def _interactive_assemble(self, args): if args == '': start = self._mpu.pc else: try: start = self._address_parser.number(args) except KeyError as exc: self._output(exc.args[0]) # "Label not found: foo" return while True: prompt = "\r$" + (self.addrFmt % start) + " " + \ (" " * int(1 + self.byteWidth / 4) * 3) line = console.line_input(prompt, stdin=self.stdin, stdout=self.stdout) if not line.strip(): self.stdout.write("\n") return # assemble into memory try: bytes = self._assembler.assemble(line, pc=start) numbytes = len(bytes) end = start + numbytes self._mpu.memory[start:end] = bytes # print disassembly _, disasm = self._disassembler.instruction_at(start) fdisasm = self._format_disassembly(start, numbytes, disasm) indent = ' ' * (len(prompt + line) + 5) self.stdout.write("\r" + indent + "\r") self.stdout.write(fdisasm + "\n") # advance to next address start += numbytes if start >= (2**self._mpu.ADDR_WIDTH): start = 0 except KeyError: addr = self.addrFmt % start self.stdout.write("\r$%s ?Label\n" % addr) except OverflowError: addr = self.addrFmt % start self.stdout.write("\r$%s ?Overflow\n" % addr) except SyntaxError: addr = self.addrFmt % start self.stdout.write("\r$%s ?Syntax\n" % addr)
def _interactive_assemble(self, args): if args == '': start = self._mpu.pc else: try: start = self._address_parser.number(args) except KeyError as exc: self._output(exc.args[0]) # "Label not found: foo" return while True: prompt = "\r$" + (self.addrFmt % start) + " " + \ (" " * int(1 + self.byteWidth / 4) * 3) line = console.line_input(prompt, stdin=self.stdin, stdout=self.stdout) if not line.strip(): self.stdout.write("\n") return # assemble into memory try: bytes = self._assembler.assemble(line, pc=start) numbytes = len(bytes) end = start + numbytes self._mpu.memory[start:end] = bytes # print disassembly _, disasm = self._disassembler.instruction_at(start) fdisasm = self._format_disassembly(start, numbytes, disasm) indent = ' ' * (len(prompt + line) + 5) self.stdout.write("\r" + indent + "\r") self.stdout.write(fdisasm + "\n") # advance to next address start += numbytes if start >= (2 ** self._mpu.ADDR_WIDTH): start = 0 except KeyError: addr = self.addrFmt % start self.stdout.write("\r$%s ?Label\n" % addr) except OverflowError: addr = self.addrFmt % start self.stdout.write("\r$%s ?Overflow\n" % addr) except SyntaxError: addr = self.addrFmt % start self.stdout.write("\r$%s ?Syntax\n" % addr)
def _interactive_assemble(self, args): if args == '': start = self._mpu.pc else: try: start = self._address_parser.number(args) except KeyError: self._output("Bad label: %s" % start) return assembling = True while assembling: prompt = "\r$%04x " % (start) line = console.line_input(prompt, stdin=self.stdin, stdout=self.stdout) if not line: self.stdout.write("\n") return # assemble into memory bytes = self._assembler.assemble(line) if bytes is None: self.stdout.write("\r$%04x ???\n" % start) continue end = start + len(bytes) self._mpu.memory[start:end] = bytes # print disassembly bytes, disasm = self._disassembler.instruction_at(start) disassembly = self._format_disassembly(start, bytes, disasm) self.stdout.write("\r" + (' ' * (len(prompt + line) + 5)) + "\r") self.stdout.write(disassembly + "\n") start += bytes
def _interactive_assemble(self, args): if args == '': start = self._mpu.pc else: try: start = self._address_parser.number(args) except KeyError: self._output("Bad label: %s" % start) return assembling = True while assembling: prompt = "\r$%04x " % (start) line = console.line_input(prompt, stdin=self.stdin, stdout=self.stdout) if not line: self.stdout.write("\n") return # assemble into memory bytes = self._assembler.assemble(line) if bytes is None: self.stdout.write("\r$%04x ???\n" % start) continue end = start + len(bytes) self._mpu.memory[start:end] = bytes # print disassembly bytes, disasm = self._disassembler.instruction_at(start) disassembly = self._format_disassembly(start, bytes, disasm) self.stdout.write("\r" + (' ' * (len(prompt+line) + 5) ) + "\r") self.stdout.write(disassembly + "\n") start += bytes