return des valeurs à récupérer pour affichage dynamique
This commit is contained in:
parent
a4cc3b36a6
commit
c2aa1738f3
16
Epreuve3.py
16
Epreuve3.py
@ -31,6 +31,7 @@ class CPU:
|
|||||||
|
|
||||||
|
|
||||||
class Simulator:
|
class Simulator:
|
||||||
|
cycles_added = 0
|
||||||
def __init__(self, program: bytes):
|
def __init__(self, program: bytes):
|
||||||
self.ram = bytearray(256)
|
self.ram = bytearray(256)
|
||||||
for i, b in enumerate(program[:256]):
|
for i, b in enumerate(program[:256]):
|
||||||
@ -225,7 +226,7 @@ class Simulator:
|
|||||||
c.cycles += size
|
c.cycles += size
|
||||||
cycles_added = size
|
cycles_added = size
|
||||||
|
|
||||||
self.report(pc_before, instr, cycles_added)
|
return self.report(pc_before, instr, cycles_added)
|
||||||
|
|
||||||
# ----------------- rapport d'exécution -----------------
|
# ----------------- rapport d'exécution -----------------
|
||||||
|
|
||||||
@ -235,13 +236,24 @@ class Simulator:
|
|||||||
print(f"PC={pc_before:02X} {instr:20s} +Cycles={cycles_added:3d} Total={c.cycles}")
|
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(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 -----------------
|
# ----------------- boucle principale -----------------
|
||||||
|
|
||||||
def run(self, max_steps: int = 100000):
|
def run(self, max_steps: int = 100000):
|
||||||
steps = 0
|
steps = 0
|
||||||
while self.cpu.running and steps < max_steps:
|
while self.cpu.running and steps < max_steps:
|
||||||
self.step()
|
result = self.step()
|
||||||
|
yield result
|
||||||
steps += 1
|
steps += 1
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,8 @@
|
|||||||
from tkinter import *
|
from tkinter import *
|
||||||
|
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
|
import Epreuve3 as e3
|
||||||
|
import subprocess
|
||||||
|
|
||||||
root = tk.Tk()
|
root = tk.Tk()
|
||||||
# Widgets are added here
|
# 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").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)
|
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, 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)
|
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, 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)
|
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, 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)
|
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, 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
|
#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)
|
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, 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)
|
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, 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)
|
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, 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)
|
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, 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
|
#Frame RAM
|
||||||
|
|
||||||
|
|
||||||
|
update_gui()
|
||||||
root.mainloop()
|
root.mainloop()
|
||||||
Loading…
x
Reference in New Issue
Block a user