mirror of
https://github.com/mnaberez/py65.git
synced 2025-04-20 22:37:18 +00:00
Merge pull request #34 from irmen/master
option to set external (existing) memory, options to change or disable getc/putc addresses
This commit is contained in:
commit
414b4a51d5
@ -43,10 +43,11 @@ class Monitor(cmd.Cmd):
|
||||
'65Org16': V65Org16}
|
||||
|
||||
def __init__(self, mpu_type=NMOS6502, completekey='tab', stdin=None,
|
||||
stdout=None, argv=None):
|
||||
stdout=None, argv=None, memory=None, putc_addr=0xF001, getc_addr=0xF004):
|
||||
self.mpu_type = mpu_type
|
||||
self.putc_addr = 0xF001
|
||||
self.getc_addr = 0xF004
|
||||
self.memory = memory
|
||||
self.putc_addr = putc_addr
|
||||
self.getc_addr = getc_addr
|
||||
if argv is None:
|
||||
argv = sys.argv
|
||||
self._breakpoints = []
|
||||
@ -149,14 +150,15 @@ class Monitor(cmd.Cmd):
|
||||
return result
|
||||
|
||||
def _reset(self, mpu_type,getc_addr=0xF004,putc_addr=0xF001):
|
||||
self._mpu = mpu_type()
|
||||
self._mpu = mpu_type(memory=self.memory)
|
||||
self.addrWidth = self._mpu.ADDR_WIDTH
|
||||
self.byteWidth = self._mpu.BYTE_WIDTH
|
||||
self.addrFmt = self._mpu.ADDR_FORMAT
|
||||
self.byteFmt = self._mpu.BYTE_FORMAT
|
||||
self.addrMask = self._mpu.addrMask
|
||||
self.byteMask = self._mpu.byteMask
|
||||
self._install_mpu_observers(getc_addr,putc_addr)
|
||||
if getc_addr and putc_addr:
|
||||
self._install_mpu_observers(getc_addr,putc_addr)
|
||||
self._address_parser = AddressParser()
|
||||
self._disassembler = Disassembler(self._mpu, self._address_parser)
|
||||
self._assembler = Assembler(self._mpu, self._address_parser)
|
||||
@ -245,7 +247,7 @@ class Monitor(cmd.Cmd):
|
||||
byte = 0
|
||||
return byte
|
||||
|
||||
m = ObservableMemory(addrWidth=self.addrWidth)
|
||||
m = ObservableMemory(subject=self.memory, addrWidth=self.addrWidth)
|
||||
m.subscribe_to_write([self.putc_addr], putc)
|
||||
m.subscribe_to_read([self.getc_addr], getc)
|
||||
|
||||
|
@ -1144,6 +1144,18 @@ class MonitorTests(unittest.TestCase):
|
||||
out = stdout.getvalue()
|
||||
self.assertTrue(out.startswith("width <columns>"))
|
||||
|
||||
def test_external_memory(self):
|
||||
stdout = StringIO()
|
||||
memory = bytearray(65536)
|
||||
memory[10] = 0xff
|
||||
mon = Monitor(memory=memory, stdout=stdout, putc_addr=None, getc_addr=None)
|
||||
self.assertEqual(0xff, memory[10], "memory must remain untouched")
|
||||
mon.do_mem('0008:000c')
|
||||
mon.do_fill('0000:0020 ab')
|
||||
self.assertEqual(0xab, memory[10], "memory must have been modified")
|
||||
out = stdout.getvalue()
|
||||
self.assertTrue(out.startswith('0008: 00 00 ff 00 00'), "monitor must see pre-initialized memory")
|
||||
|
||||
def test_suite():
|
||||
return unittest.findTestCases(sys.modules[__name__])
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user