return des valeurs à récupérer pour affichage dynamique

This commit is contained in:
Jack Parrot 2026-03-22 01:53:25 +01:00
parent a4cc3b36a6
commit c2aa1738f3
2 changed files with 72 additions and 14 deletions

View File

@ -31,6 +31,7 @@ class CPU:
class Simulator:
cycles_added = 0
def __init__(self, program: bytes):
self.ram = bytearray(256)
for i, b in enumerate(program[:256]):
@ -225,7 +226,7 @@ class Simulator:
c.cycles += size
cycles_added = size
self.report(pc_before, instr, cycles_added)
return self.report(pc_before, instr, cycles_added)
# ----------------- rapport d'exécution -----------------
@ -234,14 +235,25 @@ class Simulator:
regs_str = " ".join(f"R{i}={c.regs[i]:02X}" for i in range(4))
print(f"PC={pc_before:02X} {instr:20s} +Cycles={cycles_added:3d} Total={c.cycles}")
print(f" {regs_str} LT={c.lt} EQ={c.eq} SP={c.sp}")
print("-" * 60)
print("-" * 60)
return {
"pc": pc_before,
"instr": instr,
"cycles_added": cycles_added,
"regs": c.regs.copy(),
"lt": c.lt,
"eq": c.eq,
"sp": c.sp
}
# ----------------- boucle principale -----------------
def run(self, max_steps: int = 100000):
steps = 0
while self.cpu.running and steps < max_steps:
self.step()
result = self.step()
yield result
steps += 1

View File

@ -1,6 +1,8 @@
from tkinter import *
import tkinter as tk
import Epreuve3 as e3
import subprocess
root = tk.Tk()
# Widgets are added here
@ -46,8 +48,8 @@ single_inst_frame.pack(padx=5, pady=5, side=tk.BOTTOM)
Label(single_inst_frame, text=f"Instruction").pack(pady=5, side=LEFT)
Label(single_inst_frame, text=f"instruction+cycle", width=30, bg="white").pack(pady=5, side=LEFT)
single_instr = Label(single_inst_frame, text=f"instruction+cycle", width=30, bg="white")
single_instr.pack(pady=5, side=tk.LEFT)
@ -61,7 +63,8 @@ registre_1_frame = tk.Frame(registres_frames, width=100, height=100, bg="orange"
registre_1_frame.pack(padx=10, pady=0, side=tk.LEFT)
Label(registre_1_frame, text=f"R0", width=15, bg="orange").pack(pady=5)
Label(registre_1_frame, bg="orange").pack(pady=5)
label_registre_1 = Label(registre_1_frame, bg="orange")
label_registre_1.pack(pady=5)
@ -72,7 +75,8 @@ registre_2_frame = tk.Frame(registres_frames, width=100, height=100, bg="orange"
registre_2_frame.pack(padx=10, pady=0, side=tk.LEFT)
Label(registre_2_frame, text=f"R1", width=15, bg="orange").pack(pady=5)
Label(registre_2_frame, bg="orange").pack(pady=5)
label_registre_2 = Label(registre_2_frame, bg="orange")
label_registre_2.pack(pady=5)
@ -82,7 +86,8 @@ registre_3_frame = tk.Frame(registres_frames, width=100, height=100, bg="orange"
registre_3_frame.pack(padx=10, pady=0, side=tk.LEFT)
Label(registre_3_frame, text=f"R2", width=15, bg="orange").pack(pady=5)
Label(registre_3_frame, bg="orange").pack(pady=5)
label_registre_3 = Label(registre_3_frame, bg="orange")
label_registre_3.pack(pady=5)
@ -92,7 +97,8 @@ registre_4_frame = tk.Frame(registres_frames, width=100, height=100, bg="ORANGE"
registre_4_frame.pack(padx=10, pady=0, side=tk.LEFT)
Label(registre_4_frame, text=f"R3", width=15, bg="orange").pack(pady=5)
Label(registre_4_frame, bg="orange").pack(pady=5)
label_registre_4 = Label(registre_4_frame, bg="orange")
label_registre_4.pack(pady=5)
#Frame annexes
@ -105,7 +111,8 @@ annexe_1_frame = tk.Frame(annexes_frames, width=100, height=100, bg="orange")
annexe_1_frame.pack(padx=10, pady=0, side=tk.LEFT)
Label(annexe_1_frame, text=f"EQ", width=15, bg="orange").pack(pady=5)
Label(annexe_1_frame, bg="orange").pack(pady=5)
label_eq = Label(annexe_1_frame, bg="orange")
label_eq.pack(pady=5)
@ -116,7 +123,8 @@ annexe_2_frame = tk.Frame(annexes_frames, width=100, height=100, bg="orange")
annexe_2_frame.pack(padx=10, pady=0, side=tk.LEFT)
Label(annexe_2_frame, text=f"LT", width=15, bg="orange").pack(pady=5)
Label(annexe_2_frame, bg="orange").pack(pady=5)
label_lt = Label(annexe_2_frame, bg="orange")
label_lt.pack(pady=5)
@ -126,7 +134,8 @@ annexe_3_frame = tk.Frame(annexes_frames, width=100, height=100, bg="orange")
annexe_3_frame.pack(padx=10, pady=0, side=tk.LEFT)
Label(annexe_3_frame, text=f"PC", width=15, bg="orange").pack(pady=5)
Label(annexe_3_frame, bg="orange").pack(pady=5)
label_pc = Label(annexe_3_frame, bg="orange")
label_pc.pack(pady=5)
@ -136,14 +145,51 @@ annexe_4_frame = tk.Frame(annexes_frames, width=100, height=100, bg="ORANGE")
annexe_4_frame.pack(padx=10, pady=0, side=tk.LEFT)
Label(annexe_4_frame, text=f"SP", width=15, bg="orange").pack(pady=5)
Label(annexe_4_frame, bg="orange").pack(pady=5)
label_sp = Label(annexe_4_frame, bg="orange")
label_sp.pack(pady=5)
#val = subprocess.run(["/usr/bin/python3", "/home/aurelien/Documents/24hducode2026/24H_du_code_2026/Epreuve3.py", "test_bin_epreuve3/call_label.bin"] # transforme bytes en str)
with open("test_bin_epreuve3/sub_val.bin", "rb") as f:
program = f.read()
sim = e3.Simulator(program)
sim_iter = sim.run()
def update_gui():
try:
state = next(sim_iter)
# 👉 mise à jour label instruction
single_instr.config(
text=state["instr"] + " Cycle(s): " + str(state["cycles_added"])
)
label_registre_1.config(text=f"{state['regs'][0]:02X}")
label_registre_2.config(text=f"{state['regs'][1]:02X}")
label_registre_3.config(text=f"{state['regs'][2]:02X}")
label_registre_4.config(text=f"{state['regs'][3]:02X}")
label_eq.config(text=f"{state['eq']}")
label_lt.config(text=f"{state['lt']}")
label_pc.config(text=f"{state['pc']:02X}")
label_sp.config(text=f"{state['sp']:02X}")
# 👉 exemple registres
# registre_1_label.config(text=state["regs"][0])
# registre_2_label.config(text=state["regs"][1])
# relance automatique
root.after(200, update_gui)
except StopIteration:
print("Simulation terminée")
#Frame RAM
update_gui()
root.mainloop()