|
|
|
|
import tkinter
|
|
|
|
|
|
|
|
|
|
from Print import Print_line
|
|
|
|
|
from ALU import ALU
|
|
|
|
|
from Clock import *
|
|
|
|
|
from SIG_ctrl import SIG
|
|
|
|
|
from memory import MEM
|
|
|
|
|
|
|
|
|
|
#初始化
|
|
|
|
|
cl = ClockStep()
|
|
|
|
|
alu = ALU()
|
|
|
|
|
si = SIG()
|
|
|
|
|
mem = MEM()
|
|
|
|
|
line = Print_line()
|
|
|
|
|
def init(cv:Canvas):
|
|
|
|
|
cl.init(cv, root)
|
|
|
|
|
alu.init(cv, root)
|
|
|
|
|
si.init(cv, root)
|
|
|
|
|
mem.show(cv, root)
|
|
|
|
|
line.init()
|
|
|
|
|
init(cv)
|
|
|
|
|
|
|
|
|
|
class RightPanel:
|
|
|
|
|
|
|
|
|
|
def R_set(self, num):
|
|
|
|
|
result = tkinter.simpledialog.askstring(title='修改R' + str(num + 1), prompt='请输入修改后的R值:',
|
|
|
|
|
initialvalue=cpu.R(num))#显示输入提示
|
|
|
|
|
if not result:#若没有输入则直接返回
|
|
|
|
|
return
|
|
|
|
|
if not len(result) == len(cpu.R(num)):#输入错误则警告
|
|
|
|
|
messagebox.showwarning('警告', 'R值不合法')
|
|
|
|
|
return
|
|
|
|
|
for i in range(16):#输入错误则警告
|
|
|
|
|
if (not result[i] == '0' and not result[i] == '1'):
|
|
|
|
|
messagebox.showwarning('警告', 'R值不合法')
|
|
|
|
|
return
|
|
|
|
|
sum = 0#计算输入的值
|
|
|
|
|
for i in range(16):
|
|
|
|
|
sum *= 2
|
|
|
|
|
sum += int(result[i])
|
|
|
|
|
|
|
|
|
|
cpu.R_int[num] = sum# 修改相应寄存器的值
|
|
|
|
|
self.CAL_display()#重新显示面板
|
|
|
|
|
alu.init(cv, root)#修改仿真界面
|
|
|
|
|
cv.update()#更新画布
|
|
|
|
|
|
|
|
|
|
def op_set(self, num):
|
|
|
|
|
cpu.alu = num#修改cpu记录中的符号
|
|
|
|
|
if num == 1:#修改为+
|
|
|
|
|
alu.opa(cv)
|
|
|
|
|
elif num == 2:#修改为-
|
|
|
|
|
alu.opb(cv)
|
|
|
|
|
elif num == 3:#修改为*
|
|
|
|
|
alu.opc(cv)
|
|
|
|
|
elif num == 4:#修改为/
|
|
|
|
|
alu.opd(cv)
|
|
|
|
|
else:#修改为空
|
|
|
|
|
alu.no(cv)
|
|
|
|
|
self.CAL_display()#重新显示面板
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def MEM_display(self):# 存储器操作面板
|
|
|
|
|
for w in root_right.winfo_children():
|
|
|
|
|
w.destroy()# 清除所有组件
|
|
|
|
|
# 显示标题
|
|
|
|
|
lab = tk.Label(root_right, text="存储器", bg=WHITE, fg=BLACK, font=('微软雅黑', 20))
|
|
|
|
|
lab.place(relx=0.15, rely=0.02, width=200, height=30)
|
|
|
|
|
y0 = 0.1
|
|
|
|
|
# 显示Mcontent与更改按钮
|
|
|
|
|
lab = tk.Label(root_right, text="当前Mcontent:", bg=WHITE, fg=BLACK, font=('微软雅黑', 12), anchor=W)
|
|
|
|
|
lab.place(relx=0.1, rely=0.05 + y0, width=120, height=30)
|
|
|
|
|
lab2 = tk.Label(root_right, text=cpu.MCO(), bg=BLUE, fg=BLACK, font=('微软雅黑', 12))
|
|
|
|
|
lab2.place(relx=0.1, rely=0.1 + y0, width=200, height=30)
|
|
|
|
|
B = tk.Button(root_right, text="更改", bg=WHITE, fg=BLACK, font=('微软雅黑', 12), command=lambda: self.MCO_set())
|
|
|
|
|
B.place(relx=0.7, rely=0.05 + y0, width=50, height=30)
|
|
|
|
|
# 显示Maddr与更改按钮
|
|
|
|
|
lab = tk.Label(root_right, text="当前Maddr:", bg=WHITE, fg=BLACK, font=('微软雅黑', 12), anchor=W)
|
|
|
|
|
lab.place(relx=0.1, rely=0.15 + y0, width=120, height=30)
|
|
|
|
|
lab2 = tk.Label(root_right, text=cpu.MAD(), bg=BLUE, fg=BLACK, font=('微软雅黑', 12))
|
|
|
|
|
lab2.place(relx=0.1, rely=0.2 + y0, width=200, height=30)
|
|
|
|
|
B = tk.Button(root_right, text="更改", bg=WHITE, fg=BLACK, font=('微软雅黑', 12), command=lambda: self.MAD_set())
|
|
|
|
|
B.place(relx=0.7, rely=0.15 + y0, width=50, height=30)
|
|
|
|
|
# 逐个设置存储单元按钮
|
|
|
|
|
B = tk.Button(root_right, text="设置存储器", command=lambda: self.set_memory())
|
|
|
|
|
B.place(relx=0.1, rely=0.2 + y0, width=200, height=30)
|
|
|
|
|
# 装载一段程序按钮
|
|
|
|
|
B = tk.Button(root_right, text="装载一段程序", command=lambda: self.write_memory())
|
|
|
|
|
B.place(relx=0.1, rely=0.25 + y0, width=200, height=30)
|
|
|
|
|
|
|
|
|
|
def CAL_display(self): # 运算器操作面板
|
|
|
|
|
for w in root_right.winfo_children():
|
|
|
|
|
w.destroy() # 清除右侧组件
|
|
|
|
|
lab = tk.Label(root_right, text="运算器", bg=WHITE, fg=BLACK, font=('微软雅黑', 20))
|
|
|
|
|
lab.place(relx=0.15, rely=0.02, width=200, height=30)
|
|
|
|
|
y0 = 0.1
|
|
|
|
|
# 显示运算符与更改按钮
|
|
|
|
|
PC = tk.Label(root_right, text="当前运算:", bg=WHITE, fg=BLACK, font=('微软雅黑', 12), anchor=W)
|
|
|
|
|
PC.place(relx=0.1, rely=0.05 + y0, width=80, height=30)
|
|
|
|
|
lab2 = tk.Label(root_right, text=cpu.ALU(), bg=BLUE, fg=BLACK, font=('微软雅黑', 12))
|
|
|
|
|
lab2.place(relx=0.5, rely=0.05 + y0, width=20, height=30)
|
|
|
|
|
lab2 = tk.Label(root_right, text="更改运算符", bg=WHITE, fg=BLACK, font=('微软雅黑', 12), anchor=W)
|
|
|
|
|
lab2.place(relx=0.1, rely=0.1 + y0, width=120, height=30)
|
|
|
|
|
B = tk.Button(root_right, text='+', command=lambda: self.op_set(1), state=NORMAL) # 更改为+
|
|
|
|
|
B.place(relx=0.05 + 0 * 0.15, rely=0.15 + y0, relwidth=0.15, relheight=0.05)
|
|
|
|
|
B = tk.Button(root_right, text='-', command=lambda: self.op_set(2), state=NORMAL) # 更改为-
|
|
|
|
|
B.place(relx=0.05 + 1 * 0.15, rely=0.15 + y0, relwidth=0.15, relheight=0.05)
|
|
|
|
|
B = tk.Button(root_right, text='x', command=lambda: self.op_set(3), state=NORMAL) # 更改为*
|
|
|
|
|
B.place(relx=0.05 + 2 * 0.15, rely=0.15 + y0, relwidth=0.15, relheight=0.05)
|
|
|
|
|
B = tk.Button(root_right, text='÷', command=lambda: self.op_set(4), state=NORMAL) # 更改为/
|
|
|
|
|
B.place(relx=0.05 + 3 * 0.15, rely=0.15 + y0, relwidth=0.15, relheight=0.05)
|
|
|
|
|
B = tk.Button(root_right, text='无', command=lambda: self.op_set(0), state=NORMAL) # 更改为无
|
|
|
|
|
B.place(relx=0.05 + 4 * 0.15, rely=0.15 + y0, relwidth=0.15, relheight=0.05)
|
|
|
|
|
R_text = []
|
|
|
|
|
for i in range(4): # 读取寄存器的值
|
|
|
|
|
R_text.append(cpu.R(i))
|
|
|
|
|
for i in range(4): # 显示各个寄存器的值与更改按钮
|
|
|
|
|
RN = tk.Label(root_right, text="R" + str(i + 1) + ':', bg=WHITE, fg=BLACK, font=('微软雅黑', 12))
|
|
|
|
|
RN.place(relx=0.05, rely=0.2 + y0 + 0.1 * i, width=80, height=30, anchor=NW)
|
|
|
|
|
lab1 = tk.Label(root_right, text=R_text[i], bg=BLUE, fg=BLACK, font=('微软雅黑', 12))
|
|
|
|
|
lab1.place(relx=0.1, rely=0.25 + y0 + 0.1 * i, width=150, height=30, anchor=NW)
|
|
|
|
|
B = tk.Button(root_right, text='设置R' + str(i + 1), command=lambda num=i: self.R_set(num), state=NORMAL)
|
|
|
|
|
B.place(relx=0.3, rely=0.2 + y0 + 0.1 * i, relwidth=0.2, relheight=0.05)
|
|
|
|
|
|
|
|
|
|
def SIG_display(self):#控制器操作面板
|
|
|
|
|
for w in root_right.winfo_children():
|
|
|
|
|
w.destroy()# 清除右侧组件
|
|
|
|
|
lab = tk.Label(root_right, text="控制器", bg=WHITE, fg=BLACK, font=('微软雅黑', 20))
|
|
|
|
|
lab.place(relx=0.15, rely=0.02, width=200, height=30)
|
|
|
|
|
y0 = 0.1
|
|
|
|
|
# 显示PC值与更改按钮
|
|
|
|
|
PC = tk.Label(root_right, text="当前PC:", bg=WHITE, fg=BLACK, font=('微软雅黑', 12), anchor=W)
|
|
|
|
|
PC.place(relx=0.1, rely=0.05 + y0, width=80, height=30)
|
|
|
|
|
lab2 = tk.Label(root_right, text=cpu.PC(), bg=BLUE, fg=BLACK, font=('微软雅黑', 12))
|
|
|
|
|
lab2.place(relx=0.1, rely=0.1 + y0, width=200, height=30)
|
|
|
|
|
B = tk.Button(root_right, text="设置PC值", command=lambda: self.pc_set())
|
|
|
|
|
B.place(relx=0.5, rely=0.05 + y0, width=80, height=30)
|
|
|
|
|
# 显示IR值与更改按钮
|
|
|
|
|
IR = tk.Label(root_right, text="当前IR:", bg=WHITE, fg=BLACK, font=('微软雅黑', 12), anchor=W)
|
|
|
|
|
IR.place(relx=0.1, rely=0.15 + y0, width=80, height=30)
|
|
|
|
|
lab2 = tk.Label(root_right, text=cpu.IR(), bg=BLUE, fg=BLACK, font=('微软雅黑', 12))
|
|
|
|
|
lab2.place(relx=0.1, rely=0.2 + y0, width=200, height=30)
|
|
|
|
|
B = tk.Button(root_right, text="设置IR值", command=lambda: self.ir_set())
|
|
|
|
|
B.place(relx=0.5, rely=0.15 + y0, width=80, height=30)
|
|
|
|
|
# 显示CLOCK与更改按钮
|
|
|
|
|
CLO = tk.Label(root_right, text="当前时钟:", bg=WHITE, fg=BLACK, font=('微软雅黑', 12), anchor=W)
|
|
|
|
|
CLO.place(relx=0.1, rely=0.25 + y0, width=80, height=30)
|
|
|
|
|
lab2 = tk.Label(root_right, text=str(cpu.clostep + 1), bg=BLUE, fg=BLACK, font=('微软雅黑', 12))
|
|
|
|
|
lab2.place(relx=0.45, rely=0.25 + y0, width=50, height=30)
|
|
|
|
|
lab = tk.Label(root_right, text="设置时钟刻:", bg=WHITE, fg=BLACK, font=('微软雅黑', 12))
|
|
|
|
|
lab.place(relx=0.1, rely=0.3 + y0, width=150, height=30)
|
|
|
|
|
for i in range(6):#遍历时钟刻
|
|
|
|
|
if cpu.clostep == i:#若是当前时钟刻则高亮显示,按钮禁用
|
|
|
|
|
B = tk.Button(root_right, text=str(i + 1), command=lambda n=i: self.clo_set(n), bg=YELLOW, state=DISABLED)
|
|
|
|
|
else:#若不是当前时钟刻则正常显示,按钮启用
|
|
|
|
|
B = tk.Button(root_right, text=str(i + 1), command=lambda n=i: self.clo_set(n), state=NORMAL)
|
|
|
|
|
B.place(relx=0.05 + i * 0.15, rely=0.35 + y0, relwidth=0.15, relheight=0.05)
|
|
|
|
|
# 显示Inscode与更改按钮
|
|
|
|
|
INS = tk.Label(root_right, text="当前Inscode:", bg=WHITE, fg=BLACK, font=('微软雅黑', 12), anchor=W)
|
|
|
|
|
INS.place(relx=0.1, rely=0.4 + y0, width=130, height=30)
|
|
|
|
|
lab2 = tk.Label(root_right, text=cpu.CODE(), bg=BLUE, fg=BLACK, font=('微软雅黑', 12))
|
|
|
|
|
lab2.place(relx=0.1, rely=0.45 + y0, width=100, height=30)
|
|
|
|
|
B = tk.Button(root_right, text="设置Inscode", command=lambda: self.code_set())
|
|
|
|
|
B.place(relx=0.55, rely=0.45 + y0, width=80, height=30)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def write_memory(self):
|
|
|
|
|
init(cv)
|
|
|
|
|
top = tk.Toplevel()
|
|
|
|
|
top.title('载入程序')
|
|
|
|
|
width = 1000
|
|
|
|
|
height = 700
|
|
|
|
|
top.geometry(f'{width}x{height}')
|
|
|
|
|
top.config(bg=WHITE)
|
|
|
|
|
lab = tk.Label(top, text="载入程序,用逗号隔开指令", bg=WHITE, fg=BLACK, font=('微软雅黑', 20))
|
|
|
|
|
lab.place(relx=0.05, rely=0.05, relwidth=0.4, relheight=0.1)
|
|
|
|
|
E = tk.Text(top, bg=GREY, fg=BLACK, font=('微软雅黑', 12))
|
|
|
|
|
E.place(relx=0.05, rely=0.15, relheight=0.6, relwidth=0.4)
|
|
|
|
|
|
|
|
|
|
B = tk.Button(top, text="载入程序", bg=WHITE, fg=BLACK, font=('微软雅黑', 12), command=lambda: get_text())
|
|
|
|
|
B.place(relx=0.05, rely=0.75, relwidth=0.4, relheight=0.05)
|
|
|
|
|
|
|
|
|
|
user = E.get(1.0, 'end')
|
|
|
|
|
user_command = []
|
|
|
|
|
user.replace(' ', '')
|
|
|
|
|
user.replace('\n', '')
|
|
|
|
|
|
|
|
|
|
t = list(user)
|
|
|
|
|
for i in range(len(t)):
|
|
|
|
|
if t[i] == ',':
|
|
|
|
|
t[i] = ','
|
|
|
|
|
elif not t[i] == '0' and not t[i] == '1' and not t[i] == ',':
|
|
|
|
|
t[i] = ''
|
|
|
|
|
user = ''.join(t)
|
|
|
|
|
|
|
|
|
|
users = user.split(',')
|
|
|
|
|
|
|
|
|
|
# print(users)
|
|
|
|
|
for u in users:
|
|
|
|
|
if len(u) == 16:
|
|
|
|
|
user_command.append(u)
|
|
|
|
|
# print(user_command)
|
|
|
|
|
lab = tk.Label(top, text="程序载入预览", bg=WHITE, fg=BLACK, font=('微软雅黑', 20))
|
|
|
|
|
lab.place(relx=0.55, rely=0.05, relwidth=0.4, relheight=0.1)
|
|
|
|
|
u_text = ''
|
|
|
|
|
for u in user_command:
|
|
|
|
|
u_text += u
|
|
|
|
|
u_text += '\n'
|
|
|
|
|
L = tk.Label(top, text=u_text, bg=GREY, fg=BLACK, font=('微软雅黑', 12))
|
|
|
|
|
L.place(relx=0.55, rely=0.15, relheight=0.6, relwidth=0.4)
|
|
|
|
|
B = tk.Button(top, text="确认载入程序", bg=WHITE, fg=BLACK, font=('微软雅黑', 12), command=lambda: write())
|
|
|
|
|
B.place(relx=0.55, rely=0.75, relwidth=0.4, relheight=0.05)
|
|
|
|
|
def w_init():
|
|
|
|
|
for w in top.winfo_children():
|
|
|
|
|
w.destroy()
|
|
|
|
|
# 清除原有组件
|
|
|
|
|
lab = tk.Label(top, text="载入程序,用逗号隔开指令", bg=WHITE, fg=BLACK, font=('微软雅黑', 20))
|
|
|
|
|
lab.place(relx=0.05, rely=0.05, relwidth=0.4, relheight=0.1)
|
|
|
|
|
E = tk.Text(top, bg=GREY, fg=BLACK, font=('微软雅黑', 12))
|
|
|
|
|
E.place(relx=0.05, rely=0.15, relheight=0.6, relwidth=0.4)
|
|
|
|
|
|
|
|
|
|
B = tk.Button(top, text="载入程序", bg=WHITE, fg=BLACK, font=('微软雅黑', 12), command=lambda: get_text())
|
|
|
|
|
B.place(relx=0.05, rely=0.75, relwidth=0.4, relheight=0.05)
|
|
|
|
|
|
|
|
|
|
def get_text():
|
|
|
|
|
# L.destroy()
|
|
|
|
|
|
|
|
|
|
user = E.get(1.0, 'end')
|
|
|
|
|
user_command = []
|
|
|
|
|
user.replace(' ', '')
|
|
|
|
|
user.replace('\n', '')
|
|
|
|
|
t = list(user)
|
|
|
|
|
for i in range(len(t)):
|
|
|
|
|
if t[i] == ',':
|
|
|
|
|
t[i] = ','
|
|
|
|
|
elif not t[i] == '0' and not t[i] == '1' and not t[i] == ',':
|
|
|
|
|
t[i] = ''
|
|
|
|
|
user = ''.join(t)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
users = user.split(',')
|
|
|
|
|
# print(users)
|
|
|
|
|
for u in users:
|
|
|
|
|
if len(u) == 16:
|
|
|
|
|
user_command.append(u)
|
|
|
|
|
# print(user_command)
|
|
|
|
|
# lab = tk.Label(top, text="程序载入预览", bg=WHITE, fg=BLACK, font=('微软雅黑', 20))
|
|
|
|
|
# lab.place(relx=0.55, rely=0.05, relwidth=0.4, relheight=0.1)
|
|
|
|
|
u_text = ''
|
|
|
|
|
i = 0
|
|
|
|
|
for u in user_command:
|
|
|
|
|
u_text += bin(i).replace('0b', '').zfill(16)
|
|
|
|
|
u_text += ' '
|
|
|
|
|
u_text += u
|
|
|
|
|
u_text += '\n'
|
|
|
|
|
i += 1
|
|
|
|
|
L = tk.Label(top, text=u_text, bg=GREY, fg=BLACK, font=('微软雅黑', 12), anchor=N)
|
|
|
|
|
L.place(relx=0.55, rely=0.15, relheight=0.6, relwidth=0.4)
|
|
|
|
|
|
|
|
|
|
def write():
|
|
|
|
|
user = E.get(1.0, 'end')
|
|
|
|
|
user_command = []
|
|
|
|
|
user.replace(' ', '')
|
|
|
|
|
user.replace('\n', '')
|
|
|
|
|
t = list(user)
|
|
|
|
|
for i in range(len(t)):
|
|
|
|
|
if t[i] == ',':
|
|
|
|
|
t[i] = ','
|
|
|
|
|
elif not t[i] == '0' and not t[i] == '1' and not t[i] == ',':
|
|
|
|
|
t[i] = ''
|
|
|
|
|
user = ''.join(t)
|
|
|
|
|
|
|
|
|
|
users = user.split(',')
|
|
|
|
|
# print(users)
|
|
|
|
|
for u in users:
|
|
|
|
|
if len(u) == 16:
|
|
|
|
|
user_command.append(u)
|
|
|
|
|
# print(user_command)
|
|
|
|
|
for i in range(20):
|
|
|
|
|
cpu.SimMem[i] = bin(0).replace('0b', '').zfill(16)
|
|
|
|
|
for i in range(len(user_command)):
|
|
|
|
|
cpu.SimMem[i] = user_command[i]
|
|
|
|
|
mem.show(cv, root)
|
|
|
|
|
top.destroy()
|
|
|
|
|
|
|
|
|
|
def set_memory(self):
|
|
|
|
|
init(cv)
|
|
|
|
|
top = tk.Toplevel()
|
|
|
|
|
top.title('编辑存储器')
|
|
|
|
|
width = 500
|
|
|
|
|
height = 600
|
|
|
|
|
top.geometry(f'{width}x{height}')
|
|
|
|
|
top.config(bg=WHITE)
|
|
|
|
|
Texts = []
|
|
|
|
|
def show():
|
|
|
|
|
for w in top.winfo_children():
|
|
|
|
|
w.destroy()
|
|
|
|
|
# 清除原有组件
|
|
|
|
|
Texts.clear()
|
|
|
|
|
lab = tk.Label(top, text="设置存储器", bg=WHITE, fg=BLACK, font=('微软雅黑', 20))
|
|
|
|
|
lab.place(relx=0.25, rely=0.02, width=200, height=30)
|
|
|
|
|
y0 = 50
|
|
|
|
|
lab = tk.Label(top, text="当前存储器:", bg=WHITE, fg=BLACK, font=('微软雅黑', 12), anchor=CENTER)
|
|
|
|
|
lab.place(y=y0, width=120, height=30)
|
|
|
|
|
|
|
|
|
|
for i in range(20):
|
|
|
|
|
lab = tk.Label(top, text="00000000 " + bin(i).replace('0b', '').zfill(8), bg=WHITE, fg=BLACK, font=('微软雅黑', 12), anchor=CENTER)
|
|
|
|
|
lab.place(x=30, y=30 + y0 + i * 20, width=180, height=20)
|
|
|
|
|
|
|
|
|
|
text = tkinter.Entry(top, bg=GREY, fg=BLACK, font=('微软雅黑', 12), bd=2)
|
|
|
|
|
text.place(x=200, y=30 + y0 + i * 20, width=180, height=20)
|
|
|
|
|
text.insert(0, cpu.SimMem[i])
|
|
|
|
|
Texts.append(text)
|
|
|
|
|
B = tk.Button(top, text="设置Memory", bg=WHITE, fg=BLACK, font=('微软雅黑', 12), command=lambda: set_mem())
|
|
|
|
|
B.place(x=100, y=450 + y0, width=280, height=20)
|
|
|
|
|
show()
|
|
|
|
|
|
|
|
|
|
def set_mem():
|
|
|
|
|
for T in Texts:
|
|
|
|
|
txt = T.get()
|
|
|
|
|
# print(txt)
|
|
|
|
|
if not len(txt) == len(cpu.SimMem[0]):
|
|
|
|
|
messagebox.showwarning('警告', '修改不合法')
|
|
|
|
|
show()
|
|
|
|
|
return
|
|
|
|
|
for l in range(len(txt)):
|
|
|
|
|
if (not txt[l] == '0') and (not txt[l] == '1'):
|
|
|
|
|
messagebox.showwarning('警告', '修改不合法')
|
|
|
|
|
show()
|
|
|
|
|
return
|
|
|
|
|
i = 0
|
|
|
|
|
for T in Texts:
|
|
|
|
|
txt = T.get()
|
|
|
|
|
# print (Texts[i].get())
|
|
|
|
|
cpu.SimMem[i] = txt
|
|
|
|
|
i += 1
|
|
|
|
|
show()
|
|
|
|
|
mem.show(cv, root)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def SIG_info(self):
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def MCO_set(self):
|
|
|
|
|
result = tkinter.simpledialog.askstring(title='修改Mcontent', prompt='请输入修改后的Mcontent:', initialvalue=cpu.MCO())
|
|
|
|
|
if not result:
|
|
|
|
|
return
|
|
|
|
|
if not len(result) == len(cpu.MCO()):
|
|
|
|
|
messagebox.showwarning('警告', 'Mcontent不合法')
|
|
|
|
|
return
|
|
|
|
|
for i in range(8):
|
|
|
|
|
if (not result[i] == '0' and not result[i] == '1') or (not result[i + 9] == '0' and not result[i + 9] == '1'):
|
|
|
|
|
messagebox.showwarning('警告', 'Mcontent不合法')
|
|
|
|
|
return
|
|
|
|
|
sum = 0
|
|
|
|
|
for i in range(8):
|
|
|
|
|
sum *= 2
|
|
|
|
|
sum += int(result[i])
|
|
|
|
|
for i in range(8):
|
|
|
|
|
sum *= 2
|
|
|
|
|
sum += int(result[i + 9])
|
|
|
|
|
# 将更改后的的值放到Mcontent中
|
|
|
|
|
cpu.MCO_int = sum
|
|
|
|
|
self.MEM_display()
|
|
|
|
|
mem.show(cv, root)
|
|
|
|
|
cv.update()
|
|
|
|
|
|
|
|
|
|
def MAD_set(self):
|
|
|
|
|
result = tkinter.simpledialog.askstring(title='修改Maddr', prompt='请输入修改后的Maddr:',
|
|
|
|
|
initialvalue=cpu.MAD())
|
|
|
|
|
if not result:
|
|
|
|
|
return
|
|
|
|
|
if not len(result) == len(cpu.MAD()):
|
|
|
|
|
messagebox.showwarning('警告', 'Maddr不合法')
|
|
|
|
|
return
|
|
|
|
|
for i in range(8):
|
|
|
|
|
if (not result[i] == '0' and not result[i] == '1') or (
|
|
|
|
|
not result[i + 9] == '0' and not result[i + 9] == '1'):
|
|
|
|
|
messagebox.showwarning('警告', 'Maddr不合法')
|
|
|
|
|
return
|
|
|
|
|
sum = 0
|
|
|
|
|
for i in range(8):
|
|
|
|
|
sum *= 2
|
|
|
|
|
sum += int(result[i])
|
|
|
|
|
for i in range(8):
|
|
|
|
|
sum *= 2
|
|
|
|
|
sum += int(result[i + 9])
|
|
|
|
|
cpu.MAD_int = sum
|
|
|
|
|
self.MEM_display()
|
|
|
|
|
mem.show(cv, root)
|
|
|
|
|
cv.update()
|
|
|
|
|
|
|
|
|
|
def code_set(self):
|
|
|
|
|
result = tkinter.simpledialog.askstring(title='修改Inscode', prompt='请输入修改后的Inscode:', initialvalue=cpu.CODE())
|
|
|
|
|
if not result:
|
|
|
|
|
return
|
|
|
|
|
if not len(result) == len(cpu.CODE()):
|
|
|
|
|
messagebox.showwarning('警告', 'Inscode不合法')
|
|
|
|
|
return
|
|
|
|
|
for i in range(6):
|
|
|
|
|
if (not result[i] == '0' and not result[i] == '1'):
|
|
|
|
|
messagebox.showwarning('警告', 'Inscode不合法')
|
|
|
|
|
return
|
|
|
|
|
sum = 0
|
|
|
|
|
for i in range(6):
|
|
|
|
|
sum *= 2
|
|
|
|
|
sum += int(result[i])
|
|
|
|
|
# 修改INSCODE值
|
|
|
|
|
cpu.code = sum
|
|
|
|
|
|
|
|
|
|
self.SIG_display()
|
|
|
|
|
si.init(cv, root)
|
|
|
|
|
cv.update()
|
|
|
|
|
|
|
|
|
|
def pc_set(self):
|
|
|
|
|
result = tkinter.simpledialog.askstring(title='修改PC值', prompt='请输入修改后的PC值:', initialvalue=cpu.PC())
|
|
|
|
|
if not result:
|
|
|
|
|
return
|
|
|
|
|
if not len(result) == len(cpu.PC()):
|
|
|
|
|
messagebox.showwarning('警告', 'PC值不合法')
|
|
|
|
|
return
|
|
|
|
|
for i in range(8):
|
|
|
|
|
if (not result[i] == '0' and not result[i] == '1') or (not result[i + 9] == '0' and not result[i + 9] == '1'):
|
|
|
|
|
messagebox.showwarning('警告', 'PC值不合法')
|
|
|
|
|
return
|
|
|
|
|
sum = 0
|
|
|
|
|
for i in range(8):
|
|
|
|
|
sum *= 2
|
|
|
|
|
sum += int(result[i])
|
|
|
|
|
for i in range(8):
|
|
|
|
|
sum *= 2
|
|
|
|
|
sum += int(result[i + 9])
|
|
|
|
|
cpu.PC_int = sum
|
|
|
|
|
self.SIG_display()
|
|
|
|
|
cv.update()
|
|
|
|
|
|
|
|
|
|
def ir_set(self):
|
|
|
|
|
result = tkinter.simpledialog.askstring(title='修改IR值', prompt='请输入修改后的IR值:', initialvalue=cpu.IR())
|
|
|
|
|
if not result:
|
|
|
|
|
return
|
|
|
|
|
if not len(result) == len(cpu.IR()):
|
|
|
|
|
messagebox.showwarning('警告', 'IR值不合法')
|
|
|
|
|
return
|
|
|
|
|
for i in range(8):
|
|
|
|
|
if (not result[i] == '0' and not result[i] == '1') or (not result[i + 9] == '0' and not result[i + 9] == '1'):
|
|
|
|
|
messagebox.showwarning('警告', 'IR值不合法')
|
|
|
|
|
return
|
|
|
|
|
sum = 0
|
|
|
|
|
for i in range(8):
|
|
|
|
|
sum *= 2
|
|
|
|
|
sum += int(result[i])
|
|
|
|
|
for i in range(8):
|
|
|
|
|
sum *= 2
|
|
|
|
|
sum += int(result[i + 9])
|
|
|
|
|
cpu.IR_int = sum
|
|
|
|
|
self.SIG_display()
|
|
|
|
|
cv.update()
|
|
|
|
|
|
|
|
|
|
def clo_set(self, clo):
|
|
|
|
|
cpu.CLO(clo)
|
|
|
|
|
self.SIG_display()
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
r = RightPanel()#实例化类
|
|
|
|
|
r.MEM_display()#显示存储器操作面板
|
|
|
|
|
# r.CAL_display()
|
|
|
|
|
# r.SIG_display()
|
|
|
|
|
|
|
|
|
|
# r.set_memory()
|
|
|
|
|
# r.write_memory()
|
|
|
|
|
# init(cv)
|
|
|
|
|
root.mainloop()
|