def reset_vms(): intel_machine.re_init() mips_machine.re_init() riscv_machine.re_init() intel_machine.flavor = None mips_machine.flavor = None riscv_machine.flavor = None intel_machine.base = None mips_machine.base = None riscv_machine.base = None
def main_page(request): last_instr = "" error = "" sample = "" bit_code = "" button = "" site_hdr = get_hdr() if request.method == 'GET': if (intel_machine.flavor is None and mips_machine.flavor is None and riscv_machine.flavor is None): return render(request, 'main_error.html', {HEADER: site_hdr}) intel_machine.re_init() mips_machine.re_init() riscv_machine.re_init() form = MainForm() else: base = request.POST['base'] if 'language' in request.POST: intel_machine.re_init() mips_machine.re_init() riscv_machine.re_init() form = MainForm() lang = request.POST['language'] curr_reg = getCurrRegister(request.POST) if lang in MIPS: intel_machine.flavor = None riscv_machine.flavor = None mips_machine.flavor = lang mips_machine.base = base site_hdr += ": " + MIPS[lang] + " " + mips_machine.base.upper() hex_conversion(mips_machine) r_reg, f_reg = processRegisters(mips_machine.registers) return render(request, 'main.html', {'form': form, HEADER: site_hdr, 'last_instr': "", 'error': "", 'unwritable': mips_machine.unwritable, 'debug': mips_machine.debug, NXT_KEY: mips_machine.nxt_key, 'registers': mips_machine.registers, 'r_registers': r_reg, 'f_registers': f_reg, 'memory': mips_machine.memory, 'stack': mips_machine.stack, 'symbols': mips_machine.symbols, 'cstack': mips_machine.c_stack, 'flags': mips_machine.flags, 'flavor': mips_machine.flavor, 'data_init': mips_machine.data_init, 'base': mips_machine.base, 'sample': 'none', 'start_ip': mips_machine.start_ip, 'bit_code': "", 'button_type': "", 'changes': [], 'stack_change': "", 'curr_reg': curr_reg }) if lang in INTEL: mips_machine.flavor = None riscv_machine.flavor = None intel_machine.base = base intel_machine.flavor = lang site_hdr += ": " + INTEL[lang] + " " site_hdr += intel_machine.base.upper() hex_conversion(intel_machine) return render(request, 'main.html', {'form': form, HEADER: site_hdr, 'last_instr': "", 'error': "", 'unwritable': intel_machine.unwritable, 'debug': intel_machine.debug, NXT_KEY: intel_machine.nxt_key, 'registers': intel_machine.registers, 'memory': intel_machine.memory, 'stack': intel_machine.stack, 'symbols': intel_machine.symbols, 'cstack': intel_machine.c_stack, 'flags': intel_machine.flags, 'flavor': intel_machine.flavor, DATA_INIT: intel_machine.data_init, 'base': intel_machine.base, 'sample': 'none', 'start_ip': intel_machine.start_ip, 'bit_code': "", 'button_type': "", 'changes': [], 'stack_change': "" }) if lang in RISCV: mips_machine.flavor = None intel_machine.flavor = None riscv_machine.flavor = lang riscv_machine.base = base site_hdr += ": " + RISCV[lang] + " " site_hdr += riscv_machine.base.upper() hex_conversion(riscv_machine) return render(request, 'main.html', {'form': form, HEADER: site_hdr, 'last_instr': "", 'error': "", 'unwritable': riscv_machine.unwritable, 'debug': riscv_machine.debug, NXT_KEY: riscv_machine.nxt_key, 'registers': riscv_machine.registers, 'memory': riscv_machine.memory, 'stack': riscv_machine.stack, 'symbols': riscv_machine.symbols, 'cstack': riscv_machine.c_stack, 'flags': riscv_machine.flags, 'flavor': riscv_machine.flavor, 'data_init': riscv_machine.data_init, 'base': riscv_machine.base, 'sample': 'none', 'start_ip': riscv_machine.start_ip, 'bit_code': "", 'button_type': "", 'changes': [], 'stack_change': "" }) form = MainForm(request.POST) if 'flavor' in request.POST: language = request.POST['flavor'] if language in INTEL: intel_machine.flavor = language intel_machine.base = base mips_machine.flavor = None riscv_machine.flavor = None if language in MIPS: intel_machine.flavor = None mips_machine.flavor = language mips_machine.base = base riscv_machine.flavor = None if language in RISCV: intel_machine.flavor = None mips_machine.flavor = None riscv_machine.flavor = language riscv_machine.base = base sample = request.POST['sample'] button = request.POST['button_type'] if button == CLEAR: intel_machine.re_init() mips_machine.re_init() riscv_machine.re_init() else: intel_machine.changes_init() mips_machine.changes_init() riscv_machine.changes_init() step = (button == STEP) or (button == DEMO) intel_machine.nxt_key = 0 mips_machine.nxt_key = 0 riscv_machine.nxt_key = 0 if step: key = 0 try: key = int(request.POST.get(NXT_KEY, 0)) except Exception: key = 0 if intel_machine.flavor is not None: add_debug("Getting next key", intel_machine) intel_machine.nxt_key = key if mips_machine.flavor is not None: add_debug("Getting next key", mips_machine) mips_machine.nxt_key = key if riscv_machine.flavor is not None: add_debug("Getting next key", riscv_machine) riscv_machine.nxt_key = key if intel_machine.flavor is not None: get_reg_contents(intel_machine.registers, request) get_mem_contents(intel_machine.memory, request) get_stack_contents(intel_machine.stack, request) get_flag_contents(intel_machine.flags, request) intel_machine.data_init = request.POST[DATA_INIT] intel_machine.start_ip = int(request.POST['start_ip']) if mips_machine.flavor is not None: get_reg_contents(mips_machine.registers, request) get_mem_contents(mips_machine.memory, request) get_stack_contents(mips_machine.stack, request) get_flag_contents(mips_machine.flags, request) mips_machine.data_init = request.POST[DATA_INIT] mips_machine.start_ip = int(request.POST['start_ip']) if riscv_machine.flavor is not None: get_reg_contents(riscv_machine.registers, request) get_mem_contents(riscv_machine.memory, request) get_stack_contents(riscv_machine.stack, request) get_flag_contents(riscv_machine.flags, request) riscv_machine.data_init = request.POST[DATA_INIT] riscv_machine.start_ip = int(request.POST['start_ip']) if intel_machine.flavor in INTEL: (last_instr, error, bit_code) = assemble(request.POST[CODE], intel_machine.flavor, intel_machine, step) if mips_machine.flavor in MIPS: (last_instr, error, bit_code) = assemble(request.POST[CODE], mips_machine.flavor, mips_machine, step) if riscv_machine.flavor in RISCV: (last_instr, error, bit_code) = assemble(request.POST[CODE], riscv_machine.flavor, riscv_machine, step) if button == DEMO: if (last_instr == "Reached end of executable code." or last_instr.find("Exiting program") != -1): button = "" elif error != "": button = "" else: button = "" if mips_machine.flavor in MIPS: mips_machine.order_mem() site_hdr += ": " + MIPS[mips_machine.flavor] + " " site_hdr += mips_machine.base.upper() hex_conversion(mips_machine) r_reg, f_reg = processRegisters(mips_machine.registers) curr_reg = getCurrRegister(request.POST) return render(request, 'main.html', {'form': form, HEADER: site_hdr, 'last_instr': last_instr, 'error': error, 'unwritable': mips_machine.unwritable, 'debug': mips_machine.debug, NXT_KEY: mips_machine.nxt_key, 'registers': mips_machine.registers, 'r_registers': r_reg, 'f_registers': f_reg, 'memory': mips_machine.memory, 'stack': mips_machine.stack, 'symbols': mips_machine.symbols, 'cstack': mips_machine.c_stack, 'flags': mips_machine.flags, 'flavor': mips_machine.flavor, DATA_INIT: mips_machine.data_init, 'base': mips_machine.base, 'sample': sample, 'start_ip': mips_machine.start_ip, 'bit_code': bit_code, 'button_type': button, 'changes': mips_machine.changes, 'stack_change': mips_machine.stack_change, 'curr_reg': curr_reg }) if intel_machine.flavor in INTEL: intel_machine.order_mem() site_hdr += ": " + INTEL[intel_machine.flavor] + " " site_hdr += intel_machine.base.upper() hex_conversion(intel_machine) return render(request, 'main.html', {'form': form, HEADER: site_hdr, 'last_instr': last_instr, 'error': error, 'unwritable': intel_machine.unwritable, 'debug': intel_machine.debug, NXT_KEY: intel_machine.nxt_key, 'registers': intel_machine.registers, 'memory': intel_machine.memory, 'stack': intel_machine.stack, 'symbols': intel_machine.symbols, 'cstack': intel_machine.c_stack, 'flags': intel_machine.flags, 'flavor': intel_machine.flavor, DATA_INIT: intel_machine.data_init, 'base': intel_machine.base, 'sample': sample, 'start_ip': intel_machine.start_ip, 'bit_code': bit_code, 'button_type': button, 'changes': intel_machine.changes, 'stack_change': intel_machine.stack_change }) if riscv_machine.flavor in RISCV: riscv_machine.order_mem() site_hdr += ": " + RISCV[riscv_machine.flavor] + " " site_hdr += riscv_machine.base.upper() hex_conversion(riscv_machine) return render(request, 'main.html', {'form': form, HEADER: site_hdr, 'last_instr': last_instr, 'error': error, 'unwritable': riscv_machine.unwritable, 'debug': riscv_machine.debug, NXT_KEY: riscv_machine.nxt_key, 'registers': riscv_machine.registers, 'memory': riscv_machine.memory, 'stack': riscv_machine.stack, 'symbols': riscv_machine.symbols, 'cstack': riscv_machine.c_stack, 'flags': riscv_machine.flags, 'flavor': riscv_machine.flavor, DATA_INIT: riscv_machine.data_init, 'base': riscv_machine.base, 'sample': sample, 'start_ip': riscv_machine.start_ip, 'bit_code': bit_code, 'button_type': button, 'changes': riscv_machine.changes, 'stack_change': riscv_machine.stack_change })
def run_mips_test_code(self, filenm): mips_machine.re_init() mips_machine.base = "hex" mips_machine.flavor = "mips_asm" test_code = self.read_test_code("tests/MIPS_ASM/" + filenm) assemble(test_code, mips_machine)