From c4cd93bc24553f2407d831fa3fd69d316f842f91 Mon Sep 17 00:00:00 2001 From: Jeremiah Orians Date: Sat, 16 Sep 2017 13:44:38 -0400 Subject: [PATCH] web IDE behavior enhancement --- CHANGELOG.org | 4 +++- User_Interface.py | 23 ++++++++++++---------- wrapper.c | 50 +++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 64 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.org b/CHANGELOG.org index 0676f56..750b865 100644 --- a/CHANGELOG.org +++ b/CHANGELOG.org @@ -17,11 +17,13 @@ * Current ** Added -** Chnaged +** Changed +Expanded stage0 web IDE to include the PC and instruction counter ** Fixed Fixed behavior of R@ thanks to reepca Updated changed checksums for stage2 FORTH +Corrected behavior when using the web IDE and attempting to set registers that don't exist ** Removed diff --git a/User_Interface.py b/User_Interface.py index aa89bbc..e95f9f9 100644 --- a/User_Interface.py +++ b/User_Interface.py @@ -27,6 +27,8 @@ vm.get_memory.restype = ctypes.c_char_p vm.step_lilith.restype = ctypes.c_uint vm.set_register.argtype = (ctypes.c_uint, ctypes.c_uint) vm.set_memory.argtype = (ctypes.c_uint, ctypes.c_ubyte) +vm.get_register.argtype = ctypes.c_uint +vm.get_register.restype = ctypes.c_uint def Reset_lilith(): global Memory_Size @@ -68,7 +70,7 @@ def Set_Register(register, value): return def returnPage(): - return get_header() + (vm.get_memory(Current_Page)).decode('utf-8') + get_spacer1() + get_registers(0) + get_registers(8) + get_spacer2() + get_Window_shortcut() + get_disassembled() + get_footer() + return get_header() + (vm.get_memory(Current_Page)).decode('utf-8') + get_spacer1() + get_registers(0) + get_registers(9) + get_spacer2() + get_Window_shortcut() + get_disassembled() + get_footer() hexlookup = { 0 : '0', 1 : '1', 2 : '2', 3 : '3', 4 : '4', 5 : '5', 6 : '6', 7 : '7', 8 : '8', 9 : '9', 10 : 'A', 11 : 'B', 12 : 'C', 13 : 'D', 14 : 'E', 15 : 'F' } @@ -147,24 +149,24 @@ def get_spacer1(): """ def get_registers(index): - vm.get_register.argtype = ctypes.c_uint - vm.get_register.restype = ctypes.c_uint - -# R0 = vm.get_register(3) -# print("Register R0 value:") -# print(R0) - temp = """ + """ - for i in range(0,8): - temp = temp + """\n" + if (0 == index): + for i in range(0,9): + temp = temp + """" + "\n" + else: + for i in range(0,7): + temp = temp + """" + "\n" + temp = temp + """\n" + temp = temp + """\n" return temp + """
Register ValueName
R""" + str(index + i) + "" + formatRegister(vm.get_register(index + i)) + "
R""" + str(index + i) + "" + formatRegister(vm.get_register(index + i)) + "REG" + str(index + i) +"
R""" + str(index + i) + "" + formatRegister(vm.get_register(index + i)) + "REG" + str(index + i) +"
R16""" + formatRegister(vm.get_register(16)) + " PC
R17""" + formatRegister(vm.get_register(17)) + "Counter
""" @@ -183,6 +185,7 @@ def get_Window_shortcut(): """ def get_disassembled(): + Current_IP = vm.get_register(16) f = open('z_disassembled', "r") temp = """
diff --git a/wrapper.c b/wrapper.c index 1cc4755..00285e1 100644 --- a/wrapper.c +++ b/wrapper.c @@ -76,12 +76,58 @@ unsigned int step_lilith() unsigned int get_register(unsigned int reg) { - return Globalvm->reg[reg]; + unsigned int i; + switch(reg) + { + case 0 ... 15: + { + i = Globalvm->reg[reg]; + break; + } + case 16: /* Get PC */ + { + i = Globalvm->ip; + break; + } + case 17: /* Instruction count */ + { + i = performance_counter; + break; + } + default: + { + fprintf(stderr, "What have you done????\n"); + exit(EXIT_FAILURE); + } + } + return i; } void set_register(unsigned int reg, unsigned int value) { - Globalvm->reg[reg] = value; + switch(reg) + { + case 0 ... 15: + { + Globalvm->reg[reg] = value; + break; + } + case 16: /* Set PC */ + { + Globalvm->ip = value; + break; + } + case 17: /* No one mess with the Instruction count */ + { + fprintf(stderr, "Don't be a moron!!!!\n"); + break; + } + default: + { + fprintf(stderr, "What are you trying to do????\n"); + exit(EXIT_FAILURE); + } + } } void set_memory(unsigned int address, unsigned char value)