From c2aa1738f36fc215c3d7cc3f3d1d58fba4d51418 Mon Sep 17 00:00:00 2001 From: Jack Parrot Date: Sun, 22 Mar 2026 01:53:25 +0100 Subject: [PATCH] =?UTF-8?q?return=20des=20valeurs=20=C3=A0=20r=C3=A9cup?= =?UTF-8?q?=C3=A9rer=20pour=20affichage=20dynamique?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Epreuve3.py | 18 ++++- ...simulateur_front.py => simulateur_front.py | 68 ++++++++++++++++--- 2 files changed, 72 insertions(+), 14 deletions(-) rename interface/simulateur_front.py => simulateur_front.py (61%) diff --git a/Epreuve3.py b/Epreuve3.py index f6876d0..a185568 100644 --- a/Epreuve3.py +++ b/Epreuve3.py @@ -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 diff --git a/interface/simulateur_front.py b/simulateur_front.py similarity index 61% rename from interface/simulateur_front.py rename to simulateur_front.py index 8e7c68f..0945fde 100644 --- a/interface/simulateur_front.py +++ b/simulateur_front.py @@ -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() \ No newline at end of file