From f76307ecc193c058511697d2270c233763c55501 Mon Sep 17 00:00:00 2001 From: POUDEROUX Tom Date: Sun, 22 Mar 2026 09:36:59 +0100 Subject: [PATCH] Ajout du OUT --- Epreuve3.py | 23 +++++++------ Path.asm | 43 +++++++++++++++++++++---- __pycache__/assembleur.cpython-314.pyc | Bin 10297 -> 0 bytes notes.txt | 2 ++ out.bin | Bin 45 -> 40 bytes simulateur_front.py | 15 ++++++++- 6 files changed, 67 insertions(+), 16 deletions(-) delete mode 100644 __pycache__/assembleur.cpython-314.pyc diff --git a/Epreuve3.py b/Epreuve3.py index 28a81e0..deb2b07 100644 --- a/Epreuve3.py +++ b/Epreuve3.py @@ -24,6 +24,7 @@ class CPU: cycles: int = 0 running: bool = True after_ret: bool = False + last_out = None def __post_init__(self): if not self.regs: @@ -189,6 +190,7 @@ class Simulator: r = b & 0b11 instr = f"OUT R{r}" print(f"[OUT] R{r} = {c.regs[r]}") + self.cpu.last_out = c.regs[r] # --- TIM valeur --- elif b == 0xF8: # TIM @@ -228,16 +230,19 @@ class Simulator: print(f" {regs_str} LT={c.lt} EQ={c.eq} SP={c.sp}") print("-" * 60) ram = self.dump_ram() + out = self.cpu.last_out + self.cpu.last_out = None return { - "pc": pc_before, - "instr": instr, - "cycles_added": cycles_added, - "regs": c.regs.copy(), - "lt": c.lt, - "eq": c.eq, - "sp": c.sp, - "ram": ram - } + "pc": pc_before, + "instr": instr, + "cycles_added": cycles_added, + "regs": c.regs.copy(), + "lt": c.lt, + "eq": c.eq, + "sp": c.sp, + "ram": ram, + "out": out + } # ----------------- boucle principale ----------------- diff --git a/Path.asm b/Path.asm index 1f3be12..82633ae 100644 --- a/Path.asm +++ b/Path.asm @@ -12,26 +12,57 @@ _main: MOV R0 51 OUT R0 - TIM 165 ; Ligne droite OK + TIM 164 ; Ligne droite OK MOV R0 49 ; 0b 0011 0001 OUT R0 - TIM 130 ; Rotation droite OK + TIM 131 ; Rotation droite OK MOV R0 51 OUT R0 - TIM 152 ; Ligne droite + TIM 147 ; Ligne droite MOV R0 19 ; 0b 0001 0011 OUT R0 - TIM 130 ; Rotation gauche + TIM 131 ; Rotation gauche ;TIM 50 MOV R0 51 OUT R0 - TIM 136 ; Ligne droite + TIM 138 ; Ligne droite + + MOV R0 0 + OUT R0 ; STOP + TIM 160 + + MOV R0 162 + OUT R0 + TIM 135 ; Rotation gauche + + MOV R0 0 + OUT R0 ; STOP + TIM 140 + + MOV R0 42 + OUT R0 + TIM 135 ; Rotation droite + + MOV R0 0 + OUT R0 ; STOP + TIM 160 + + MOV R0 247 + OUT R0 + TIM 130 ; Rotation gauche + + MOV R0 127 + OUT R0 + TIM 130 ; Rotation droite + + MOV R0 247 + OUT R0 + TIM 180 ; Rotation gauche - MOV R0 0 OUT R0 ; STOP diff --git a/__pycache__/assembleur.cpython-314.pyc b/__pycache__/assembleur.cpython-314.pyc deleted file mode 100644 index ba38b9178c7e6e9036b2f822690f119c847468f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10297 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 T(2^j<9X~zts2Yj2%q#p4AF_Yk diff --git a/notes.txt b/notes.txt index e222239..bcc4863 100644 --- a/notes.txt +++ b/notes.txt @@ -177,6 +177,8 @@ Demi tour + fuite Parcours {"type": "msg", "format": "base64", "string": "4BHw+ILgIvD4guAz8Pil4DHw+ILgM/D4mOAT8PiC4DPw+IjgAPCA4ADw+GSA"} +{"type": "msg", "format": "base64", "string": "4BHw+ILgIvD4guAz8Pik4DHw+IPgM/D4k+AT8PiD4DPw+IrgAPD4oOCi8PiH4ADw+IzgKvD4h+AA8Pig4Pfw+ILgf/D4guD38Pi04ADwgOAA8PhkgA=="} + diff --git a/out.bin b/out.bin index 9f6357d5e72e858b9d0d0d33fd50377578adf222..779db754928aacc56f53b0e551bbafdca74e179b 100644 GIT binary patch literal 40 ycmV+@0N4NE0oB^y^7Ejfq1D#WVKTrIKot}JpwQFQU^l=YKp{XSV`4xBV`6~fG87^J literal 45 ncmaDL_~A#>10@h){Ncya2Zm7Aj0eI{R>uQ|4-G*4Bc%ZV$Mhaj diff --git a/simulateur_front.py b/simulateur_front.py index d245a37..2d15818 100644 --- a/simulateur_front.py +++ b/simulateur_front.py @@ -54,6 +54,16 @@ Label(single_inst_frame, text=f"Instruction").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) +# Boutons +buttons_frame = tk.Frame(instructions_frame, width=400, height=100, bg="#89B4E1") +buttons_frame.pack(padx=5, pady=5, side=tk.TOP) + +buttonAll = tk.Button(root, text="All In") +buttonStep = tk.Button(root, text="Step By Step") + +buttonAll.pack(in_=buttons_frame, side=tk.LEFT) +buttonStep.pack(in_=buttons_frame, side=tk.LEFT) + image_frame = tk.Frame(instructions_frame, width=400, height=100, bg="#89B4E1") image_frame.pack(padx=5, pady=5, side=tk.TOP) @@ -195,7 +205,7 @@ scrollbarOut.config(command=myOutList.yview) previous_sp = None # Initialisation avant la première itération def update_gui(): - global previous_sp # Accéder à la variable globale previous_sp + global previous_sp, sim_iter # Accéder à la variable globale previous_sp try: state = next(sim_iter) @@ -234,6 +244,9 @@ def update_gui(): hex_values = " ".join(f"{b:02X}" for b in chunk) myRamList.insert(tk.END, f"{addr:02X}: {hex_values}") + if (state["out"] != None): + myOutList.insert(tk.END, state["out"]) + # relance automatique root.after(200, update_gui)