diff options
Diffstat (limited to 'src/devices/cpu/tms7000/tms7000.cpp')
-rw-r--r-- | src/devices/cpu/tms7000/tms7000.cpp | 104 |
1 files changed, 56 insertions, 48 deletions
diff --git a/src/devices/cpu/tms7000/tms7000.cpp b/src/devices/cpu/tms7000/tms7000.cpp index bcbebcce3ba..be619f1083b 100644 --- a/src/devices/cpu/tms7000/tms7000.cpp +++ b/src/devices/cpu/tms7000/tms7000.cpp @@ -52,54 +52,62 @@ DEFINE_DEVICE_TYPE(TMS70C46, tms70c46_device, "tms70c46", "Texas Instruments TMS // internal memory maps -ADDRESS_MAP_START(tms7000_device::tms7000_mem) - AM_RANGE(0x0000, 0x007f) AM_RAM // 128 bytes internal RAM - AM_RANGE(0x0080, 0x00ff) AM_READWRITE(tms7000_unmapped_rf_r, tms7000_unmapped_rf_w) - AM_RANGE(0x0100, 0x010b) AM_READWRITE(tms7000_pf_r, tms7000_pf_w) - AM_RANGE(0x0104, 0x0105) AM_WRITENOP // no port A write or ddr -ADDRESS_MAP_END - -ADDRESS_MAP_START(tms7000_device::tms7001_mem) - AM_RANGE(0x0000, 0x007f) AM_RAM // 128 bytes internal RAM - AM_RANGE(0x0080, 0x00ff) AM_READWRITE(tms7000_unmapped_rf_r, tms7000_unmapped_rf_w) - AM_RANGE(0x0100, 0x010b) AM_READWRITE(tms7000_pf_r, tms7000_pf_w) - AM_RANGE(0x0110, 0x0117) AM_READWRITE(tms7002_pf_r, tms7002_pf_w) -ADDRESS_MAP_END - -ADDRESS_MAP_START(tms7000_device::tms7002_mem) - AM_RANGE(0x0000, 0x00ff) AM_RAM // 256 bytes internal RAM - AM_RANGE(0x0100, 0x010b) AM_READWRITE(tms7000_pf_r, tms7000_pf_w) - AM_RANGE(0x0110, 0x0117) AM_READWRITE(tms7002_pf_r, tms7002_pf_w) -ADDRESS_MAP_END - -ADDRESS_MAP_START(tms7000_device::tms7020_mem) - AM_IMPORT_FROM( tms7000_mem ) - AM_RANGE(0xf800, 0xffff) AM_ROM AM_REGION(DEVICE_SELF, 0) // 2kB internal ROM -ADDRESS_MAP_END - -ADDRESS_MAP_START(tms7000_device::tms7040_mem) - AM_IMPORT_FROM( tms7000_mem ) - AM_RANGE(0xf000, 0xffff) AM_ROM AM_REGION(DEVICE_SELF, 0) // 4kB internal ROM -ADDRESS_MAP_END - -ADDRESS_MAP_START(tms7000_device::tms7041_mem) - AM_IMPORT_FROM( tms7001_mem ) - AM_RANGE(0xf000, 0xffff) AM_ROM AM_REGION(DEVICE_SELF, 0) -ADDRESS_MAP_END - -ADDRESS_MAP_START(tms7000_device::tms7042_mem) - AM_IMPORT_FROM( tms7002_mem ) - AM_RANGE(0xf000, 0xffff) AM_ROM AM_REGION(DEVICE_SELF, 0) -ADDRESS_MAP_END - -ADDRESS_MAP_START(tms70c46_device::tms70c46_mem) - AM_IMPORT_FROM( tms7040_mem ) - AM_RANGE(0x010c, 0x010c) AM_READWRITE(e_bus_data_r, e_bus_data_w) - AM_RANGE(0x010d, 0x010d) AM_NOP // ? always writes $FF before checking keyboard... maybe INT3 ack? - AM_RANGE(0x010e, 0x010e) AM_READWRITE(dockbus_data_r, dockbus_data_w) - AM_RANGE(0x010f, 0x010f) AM_READWRITE(dockbus_status_r, dockbus_status_w) - AM_RANGE(0x0118, 0x0118) AM_READWRITE(control_r, control_w) -ADDRESS_MAP_END +void tms7000_device::tms7000_mem(address_map &map) +{ + map(0x0000, 0x007f).ram(); // 128 bytes internal RAM + map(0x0080, 0x00ff).rw(this, FUNC(tms7000_device::tms7000_unmapped_rf_r), FUNC(tms7000_device::tms7000_unmapped_rf_w)); + map(0x0100, 0x010b).rw(this, FUNC(tms7000_device::tms7000_pf_r), FUNC(tms7000_device::tms7000_pf_w)); + map(0x0104, 0x0105).nopw(); // no port A write or ddr +} + +void tms7000_device::tms7001_mem(address_map &map) +{ + map(0x0000, 0x007f).ram(); // 128 bytes internal RAM + map(0x0080, 0x00ff).rw(this, FUNC(tms7000_device::tms7000_unmapped_rf_r), FUNC(tms7000_device::tms7000_unmapped_rf_w)); + map(0x0100, 0x010b).rw(this, FUNC(tms7000_device::tms7000_pf_r), FUNC(tms7000_device::tms7000_pf_w)); + map(0x0110, 0x0117).rw(this, FUNC(tms7000_device::tms7002_pf_r), FUNC(tms7000_device::tms7002_pf_w)); +} + +void tms7000_device::tms7002_mem(address_map &map) +{ + map(0x0000, 0x00ff).ram(); // 256 bytes internal RAM + map(0x0100, 0x010b).rw(this, FUNC(tms7000_device::tms7000_pf_r), FUNC(tms7000_device::tms7000_pf_w)); + map(0x0110, 0x0117).rw(this, FUNC(tms7000_device::tms7002_pf_r), FUNC(tms7000_device::tms7002_pf_w)); +} + +void tms7000_device::tms7020_mem(address_map &map) +{ + tms7000_mem(map); + map(0xf800, 0xffff).rom().region(DEVICE_SELF, 0); // 2kB internal ROM +} + +void tms7000_device::tms7040_mem(address_map &map) +{ + tms7000_mem(map); + map(0xf000, 0xffff).rom().region(DEVICE_SELF, 0); // 4kB internal ROM +} + +void tms7000_device::tms7041_mem(address_map &map) +{ + tms7001_mem(map); + map(0xf000, 0xffff).rom().region(DEVICE_SELF, 0); +} + +void tms7000_device::tms7042_mem(address_map &map) +{ + tms7002_mem(map); + map(0xf000, 0xffff).rom().region(DEVICE_SELF, 0); +} + +void tms70c46_device::tms70c46_mem(address_map &map) +{ + tms7040_mem(map); + map(0x010c, 0x010c).rw(this, FUNC(tms70c46_device::e_bus_data_r), FUNC(tms70c46_device::e_bus_data_w)); + map(0x010d, 0x010d).noprw(); // ? always writes $FF before checking keyboard... maybe INT3 ack? + map(0x010e, 0x010e).rw(this, FUNC(tms70c46_device::dockbus_data_r), FUNC(tms70c46_device::dockbus_data_w)); + map(0x010f, 0x010f).rw(this, FUNC(tms70c46_device::dockbus_status_r), FUNC(tms70c46_device::dockbus_status_w)); + map(0x0118, 0x0118).rw(this, FUNC(tms70c46_device::control_r), FUNC(tms70c46_device::control_w)); +} // device definitions |