1
0
mirror of https://github.com/mnaberez/py65.git synced 2024-10-15 10:24:03 +00:00

added -i / -o option to set getc / putc addresses

This commit is contained in:
Mario Keller 2016-10-06 18:21:25 +02:00
parent 13f60394b6
commit b7301f6aa7

View File

@ -5,11 +5,13 @@
Usage: %s [options] Usage: %s [options]
Options: Options:
-h, --help : Show this message -h, --help : Show this message
-m, --mpu <device> : Choose which MPU device (default is 6502) -m, --mpu <device> : Choose which MPU device (default is 6502)
-l, --load <file> : Load a file at address 0 -l, --load <file> : Load a file at address 0
-r, --rom <file> : Load a rom at the top of address space and reset into it -r, --rom <file> : Load a rom at the top of address space and reset into it
-g, --goto <address> : Perform a goto command after loading any files -g, --goto <address> : Perform a goto command after loading any files
-i, --input <address> : define location of getc (default $f004)
-o, --output <address> : define location of putc (default $f001)
""" """
import cmd import cmd
@ -43,20 +45,22 @@ class Monitor(cmd.Cmd):
def __init__(self, mpu_type=NMOS6502, completekey='tab', stdin=None, def __init__(self, mpu_type=NMOS6502, completekey='tab', stdin=None,
stdout=None, argv=None): stdout=None, argv=None):
self.mpu_type = mpu_type self.mpu_type = mpu_type
self.putc_addr = 0xF001
self.getc_addr = 0xF004
if argv is None: if argv is None:
argv = sys.argv argv = sys.argv
self._reset(self.mpu_type)
self._breakpoints = [] self._breakpoints = []
self._width = 78 self._width = 78
self.prompt = "." self.prompt = "."
self._add_shortcuts() self._add_shortcuts()
cmd.Cmd.__init__(self, completekey, stdin, stdout) cmd.Cmd.__init__(self, completekey, stdin, stdout)
self._parse_args(argv) self._parse_args(argv)
self._reset(self.mpu_type,self.getc_addr,self.putc_addr)
def _parse_args(self, argv): def _parse_args(self, argv):
try: try:
shortopts = 'hm:l:r:g:' shortopts = 'hi:o:m:l:r:g:'
longopts = ['help', 'mpu=', 'load=', 'rom=', 'goto='] longopts = ['help', 'mpu=', 'input=', 'output=', 'load=', 'rom=', 'goto=']
options, args = getopt.getopt(argv[1:], shortopts, longopts) options, args = getopt.getopt(argv[1:], shortopts, longopts)
except getopt.GetoptError as exc: except getopt.GetoptError as exc:
self._output(exc.args[0]) self._output(exc.args[0])
@ -64,6 +68,13 @@ class Monitor(cmd.Cmd):
self._exit(1) self._exit(1)
for opt, value in options: for opt, value in options:
if opt in ('-i', '--input'):
self.getc_addr = int(value.upper(), 16)
if opt in ('-o', '--output'):
self.putc_addr = int(value.upper(), 16)
if opt in ('-l', '--load'): if opt in ('-l', '--load'):
cmd = "load %s" % value cmd = "load %s" % value
self.onecmd(cmd) self.onecmd(cmd)
@ -119,7 +130,7 @@ class Monitor(cmd.Cmd):
return result return result
def _reset(self, mpu_type): def _reset(self, mpu_type,getc_addr=0xF004,putc_addr=0xF001):
self._mpu = mpu_type() self._mpu = mpu_type()
self.addrWidth = self._mpu.ADDR_WIDTH self.addrWidth = self._mpu.ADDR_WIDTH
self.byteWidth = self._mpu.BYTE_WIDTH self.byteWidth = self._mpu.BYTE_WIDTH
@ -127,7 +138,7 @@ class Monitor(cmd.Cmd):
self.byteFmt = self._mpu.BYTE_FORMAT self.byteFmt = self._mpu.BYTE_FORMAT
self.addrMask = self._mpu.addrMask self.addrMask = self._mpu.addrMask
self.byteMask = self._mpu.byteMask self.byteMask = self._mpu.byteMask
self._install_mpu_observers() self._install_mpu_observers(getc_addr,putc_addr)
self._address_parser = AddressParser() self._address_parser = AddressParser()
self._disassembler = Disassembler(self._mpu, self._address_parser) self._disassembler = Disassembler(self._mpu, self._address_parser)
self._assembler = Assembler(self._mpu, self._address_parser) self._assembler = Assembler(self._mpu, self._address_parser)
@ -200,7 +211,7 @@ class Monitor(cmd.Cmd):
break break
return mpu return mpu
def _install_mpu_observers(self): def _install_mpu_observers(self,getc_addr,putc_addr):
def putc(address, value): def putc(address, value):
try: try:
self.stdout.write(chr(value)) self.stdout.write(chr(value))
@ -217,8 +228,8 @@ class Monitor(cmd.Cmd):
return byte return byte
m = ObservableMemory(addrWidth=self.addrWidth) m = ObservableMemory(addrWidth=self.addrWidth)
m.subscribe_to_write([0xF001], putc) m.subscribe_to_write([self.putc_addr], putc)
m.subscribe_to_read([0xF004], getc) m.subscribe_to_read([self.getc_addr], getc)
self._mpu.memory = m self._mpu.memory = m
@ -267,7 +278,7 @@ class Monitor(cmd.Cmd):
self._output("Unknown MPU: %s" % args) self._output("Unknown MPU: %s" % args)
available_mpus() available_mpus()
else: else:
self._reset(new_mpu) self._reset(new_mpu,self.getc_addr,self.putc_addr)
self._output("Reset with new MPU %s" % self._mpu.name) self._output("Reset with new MPU %s" % self._mpu.name)
def help_mpu(self): def help_mpu(self):