diff options
Diffstat (limited to 'src/mame/drivers/trs80.cpp')
-rw-r--r-- | src/mame/drivers/trs80.cpp | 356 |
1 files changed, 185 insertions, 171 deletions
diff --git a/src/mame/drivers/trs80.cpp b/src/mame/drivers/trs80.cpp index b39f3a72520..09a3c5775e1 100644 --- a/src/mame/drivers/trs80.cpp +++ b/src/mame/drivers/trs80.cpp @@ -145,183 +145,197 @@ There don't seem to be any JV1 boot disks for Model III/4. #include "formats/dmk_dsk.h" -ADDRESS_MAP_START(trs80_state::trs80_map) - AM_RANGE(0x0000, 0x0fff) AM_ROM - AM_RANGE(0x3800, 0x38ff) AM_READ(trs80_keyboard_r) - AM_RANGE(0x3c00, 0x3fff) AM_READWRITE(trs80_videoram_r, trs80_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x4000, 0x7fff) AM_RAM -ADDRESS_MAP_END - -ADDRESS_MAP_START(trs80_state::trs80_io) - ADDRESS_MAP_GLOBAL_MASK(0xff) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0xff, 0xff) AM_READWRITE(trs80_ff_r, trs80_ff_w) -ADDRESS_MAP_END - -ADDRESS_MAP_START(trs80_state::model1_map) - AM_RANGE(0x0000, 0x377f) AM_ROM // sys80,ht1080 needs up to 375F - AM_RANGE(0x37de, 0x37de) AM_READWRITE(sys80_f9_r, sys80_f8_w) - AM_RANGE(0x37df, 0x37df) AM_DEVREADWRITE("uart", ay31015_device, receive, transmit) - AM_RANGE(0x37e0, 0x37e3) AM_READWRITE(trs80_irq_status_r, trs80_motor_w) - AM_RANGE(0x37e4, 0x37e7) AM_WRITE(trs80_cassunit_w) - AM_RANGE(0x37e8, 0x37eb) AM_READWRITE(trs80_printer_r, trs80_printer_w) - AM_RANGE(0x37ec, 0x37ec) AM_READ(trs80_wd179x_r) - AM_RANGE(0x37ec, 0x37ec) AM_DEVWRITE("fdc", fd1793_device, cmd_w) - AM_RANGE(0x37ed, 0x37ed) AM_DEVREADWRITE("fdc", fd1793_device, track_r, track_w) - AM_RANGE(0x37ee, 0x37ee) AM_DEVREADWRITE("fdc", fd1793_device, sector_r, sector_w) - AM_RANGE(0x37ef, 0x37ef) AM_DEVREADWRITE("fdc", fd1793_device, data_r, data_w) - AM_RANGE(0x3800, 0x38ff) AM_MIRROR(0x300) AM_READ(trs80_keyboard_r) - AM_RANGE(0x3c00, 0x3fff) AM_READWRITE(trs80_videoram_r, trs80_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x4000, 0xffff) AM_RAM -ADDRESS_MAP_END - -ADDRESS_MAP_START(trs80_state::model1_io) - ADDRESS_MAP_GLOBAL_MASK(0xff) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0xff, 0xff) AM_READWRITE(trs80_ff_r, trs80_ff_w) -ADDRESS_MAP_END - -ADDRESS_MAP_START(trs80_state::sys80_io) - ADDRESS_MAP_GLOBAL_MASK(0xff) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0xf8, 0xf8) AM_DEVREAD("uart", ay31015_device, receive) AM_WRITE(sys80_f8_w) - AM_RANGE(0xf9, 0xf9) AM_READ(sys80_f9_r) AM_DEVWRITE("uart", ay31015_device, transmit) - AM_RANGE(0xfd, 0xfd) AM_READWRITE(trs80_printer_r, trs80_printer_w) - AM_RANGE(0xfe, 0xfe) AM_WRITE(sys80_fe_w) - AM_RANGE(0xff, 0xff) AM_READWRITE(trs80_ff_r, trs80_ff_w) -ADDRESS_MAP_END - -ADDRESS_MAP_START(trs80_state::lnw80_map) - AM_RANGE(0x4000, 0xffff) AM_RAM -ADDRESS_MAP_END - -ADDRESS_MAP_START(trs80_state::lnw80_io) - ADDRESS_MAP_GLOBAL_MASK(0xff) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0xe8, 0xe8) AM_READWRITE(trs80m4_e8_r, trs80m4_e8_w) - AM_RANGE(0xe9, 0xe9) AM_READ_PORT("E9") - AM_RANGE(0xea, 0xea) AM_READWRITE(trs80m4_ea_r, trs80m4_ea_w) - AM_RANGE(0xeb, 0xeb) AM_DEVREADWRITE("uart", ay31015_device, receive, transmit) - AM_RANGE(0xfe, 0xfe) AM_READWRITE(lnw80_fe_r, lnw80_fe_w) - AM_RANGE(0xff, 0xff) AM_READWRITE(trs80_ff_r, trs80_ff_w) -ADDRESS_MAP_END - -ADDRESS_MAP_START(trs80_state::model3_map) -ADDRESS_MAP_END - -ADDRESS_MAP_START(trs80_state::model3_io) - ADDRESS_MAP_GLOBAL_MASK(0xff) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0xe0, 0xe3) AM_READWRITE(trs80m4_e0_r, trs80m4_e0_w) - AM_RANGE(0xe4, 0xe4) AM_READWRITE(trs80m4_e4_r, trs80m4_e4_w) - AM_RANGE(0xe8, 0xe8) AM_READWRITE(trs80m4_e8_r, trs80m4_e8_w) - AM_RANGE(0xe9, 0xe9) AM_READ_PORT("E9") AM_WRITE(trs80m4_e9_w) - AM_RANGE(0xea, 0xea) AM_READWRITE(trs80m4_ea_r, trs80m4_ea_w) - AM_RANGE(0xeb, 0xeb) AM_DEVREADWRITE("uart", ay31015_device, receive, transmit) - AM_RANGE(0xec, 0xef) AM_READWRITE(trs80m4_ec_r, trs80m4_ec_w) - AM_RANGE(0xf0, 0xf0) AM_READ(trs80_wd179x_r) - AM_RANGE(0xf0, 0xf0) AM_DEVWRITE("fdc", fd1793_device, cmd_w) - AM_RANGE(0xf1, 0xf1) AM_DEVREADWRITE("fdc", fd1793_device, track_r, track_w) - AM_RANGE(0xf2, 0xf2) AM_DEVREADWRITE("fdc", fd1793_device, sector_r, sector_w) - AM_RANGE(0xf3, 0xf3) AM_DEVREADWRITE("fdc", fd1793_device, data_r, data_w) - AM_RANGE(0xf4, 0xf4) AM_WRITE(trs80m4_f4_w) - AM_RANGE(0xf8, 0xfb) AM_READWRITE(trs80_printer_r, trs80_printer_w) - AM_RANGE(0xfc, 0xff) AM_READWRITE(trs80m4_ff_r, trs80m4_ff_w) -ADDRESS_MAP_END - -ADDRESS_MAP_START(trs80_state::model4_io) - ADDRESS_MAP_GLOBAL_MASK(0xff) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x84, 0x87) AM_WRITE(trs80m4_84_w) - AM_RANGE(0x88, 0x89) AM_WRITE(trs80m4_88_w) - AM_RANGE(0x90, 0x93) AM_WRITE(trs80m4_90_w) - AM_RANGE(0xe0, 0xe3) AM_READWRITE(trs80m4_e0_r, trs80m4_e0_w) - AM_RANGE(0xe4, 0xe4) AM_READWRITE(trs80m4_e4_r, trs80m4_e4_w) - AM_RANGE(0xe8, 0xe8) AM_READWRITE(trs80m4_e8_r, trs80m4_e8_w) - AM_RANGE(0xe9, 0xe9) AM_READ_PORT("E9") AM_WRITE(trs80m4_e9_w) - AM_RANGE(0xea, 0xea) AM_READWRITE(trs80m4_ea_r, trs80m4_ea_w) - AM_RANGE(0xeb, 0xeb) AM_DEVREADWRITE("uart", ay31015_device, receive, transmit) - AM_RANGE(0xec, 0xef) AM_READWRITE(trs80m4_ec_r, trs80m4_ec_w) - AM_RANGE(0xf0, 0xf0) AM_READ(trs80_wd179x_r) - AM_RANGE(0xf0, 0xf0) AM_DEVWRITE("fdc", fd1793_device, cmd_w) - AM_RANGE(0xf1, 0xf1) AM_DEVREADWRITE("fdc", fd1793_device, track_r, track_w) - AM_RANGE(0xf2, 0xf2) AM_DEVREADWRITE("fdc", fd1793_device, sector_r, sector_w) - AM_RANGE(0xf3, 0xf3) AM_DEVREADWRITE("fdc", fd1793_device, data_r, data_w) - AM_RANGE(0xf4, 0xf4) AM_WRITE(trs80m4_f4_w) - AM_RANGE(0xf8, 0xfb) AM_READWRITE(trs80_printer_r, trs80_printer_w) - AM_RANGE(0xfc, 0xff) AM_READWRITE(trs80m4_ff_r, trs80m4_ff_w) -ADDRESS_MAP_END - -ADDRESS_MAP_START(trs80_state::model4p_io) - ADDRESS_MAP_GLOBAL_MASK(0xff) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0x84, 0x87) AM_WRITE(trs80m4_84_w) - AM_RANGE(0x88, 0x89) AM_WRITE(trs80m4_88_w) - AM_RANGE(0x90, 0x93) AM_WRITE(trs80m4_90_w) - AM_RANGE(0x9c, 0x9f) AM_WRITE(trs80m4p_9c_w) - AM_RANGE(0xe0, 0xe3) AM_READWRITE(trs80m4_e0_r, trs80m4_e0_w) - AM_RANGE(0xe4, 0xe4) AM_READWRITE(trs80m4_e4_r, trs80m4_e4_w) - AM_RANGE(0xe8, 0xe8) AM_READWRITE(trs80m4_e8_r, trs80m4_e8_w) - AM_RANGE(0xe9, 0xe9) AM_READ_PORT("E9") AM_WRITE(trs80m4_e9_w) - AM_RANGE(0xea, 0xea) AM_READWRITE(trs80m4_ea_r, trs80m4_ea_w) - AM_RANGE(0xeb, 0xeb) AM_DEVREADWRITE("uart", ay31015_device, receive, transmit) - AM_RANGE(0xec, 0xef) AM_READWRITE(trs80m4_ec_r, trs80m4_ec_w) - AM_RANGE(0xf0, 0xf0) AM_READ(trs80_wd179x_r) - AM_RANGE(0xf0, 0xf0) AM_DEVWRITE("fdc", fd1793_device, cmd_w) - AM_RANGE(0xf1, 0xf1) AM_DEVREADWRITE("fdc", fd1793_device, track_r, track_w) - AM_RANGE(0xf2, 0xf2) AM_DEVREADWRITE("fdc", fd1793_device, sector_r, sector_w) - AM_RANGE(0xf3, 0xf3) AM_DEVREADWRITE("fdc", fd1793_device, data_r, data_w) - AM_RANGE(0xf4, 0xf4) AM_WRITE(trs80m4_f4_w) - AM_RANGE(0xf8, 0xfb) AM_READWRITE(trs80_printer_r, trs80_printer_w) - AM_RANGE(0xfc, 0xff) AM_READWRITE(trs80m4_ff_r, trs80m4_ff_w) -ADDRESS_MAP_END - -ADDRESS_MAP_START(trs80_state::meritum_map) - AM_RANGE(0x0000, 0x37ff) AM_ROM - AM_RANGE(0x3800, 0x38ff) AM_MIRROR(0x300) AM_READ(trs80_keyboard_r) - AM_RANGE(0x3c00, 0x3fff) AM_READWRITE(trs80_videoram_r, trs80_videoram_w) AM_SHARE("videoram") - AM_RANGE(0x4000, 0xffff) AM_RAM -ADDRESS_MAP_END - -ADDRESS_MAP_START(trs80_state::meritum_io) - ADDRESS_MAP_GLOBAL_MASK(0xff) - ADDRESS_MAP_UNMAP_HIGH +void trs80_state::trs80_map(address_map &map) +{ + map(0x0000, 0x0fff).rom(); + map(0x3800, 0x38ff).r(this, FUNC(trs80_state::trs80_keyboard_r)); + map(0x3c00, 0x3fff).rw(this, FUNC(trs80_state::trs80_videoram_r), FUNC(trs80_state::trs80_videoram_w)).share("videoram"); + map(0x4000, 0x7fff).ram(); +} + +void trs80_state::trs80_io(address_map &map) +{ + map.global_mask(0xff); + map.unmap_value_high(); + map(0xff, 0xff).rw(this, FUNC(trs80_state::trs80_ff_r), FUNC(trs80_state::trs80_ff_w)); +} + +void trs80_state::model1_map(address_map &map) +{ + map(0x0000, 0x377f).rom(); // sys80,ht1080 needs up to 375F + map(0x37de, 0x37de).rw(this, FUNC(trs80_state::sys80_f9_r), FUNC(trs80_state::sys80_f8_w)); + map(0x37df, 0x37df).rw("uart", FUNC(ay31015_device::receive), FUNC(ay31015_device::transmit)); + map(0x37e0, 0x37e3).rw(this, FUNC(trs80_state::trs80_irq_status_r), FUNC(trs80_state::trs80_motor_w)); + map(0x37e4, 0x37e7).w(this, FUNC(trs80_state::trs80_cassunit_w)); + map(0x37e8, 0x37eb).rw(this, FUNC(trs80_state::trs80_printer_r), FUNC(trs80_state::trs80_printer_w)); + map(0x37ec, 0x37ec).r(this, FUNC(trs80_state::trs80_wd179x_r)); + map(0x37ec, 0x37ec).w(m_fdc, FUNC(fd1793_device::cmd_w)); + map(0x37ed, 0x37ed).rw(m_fdc, FUNC(fd1793_device::track_r), FUNC(fd1793_device::track_w)); + map(0x37ee, 0x37ee).rw(m_fdc, FUNC(fd1793_device::sector_r), FUNC(fd1793_device::sector_w)); + map(0x37ef, 0x37ef).rw(m_fdc, FUNC(fd1793_device::data_r), FUNC(fd1793_device::data_w)); + map(0x3800, 0x38ff).mirror(0x300).r(this, FUNC(trs80_state::trs80_keyboard_r)); + map(0x3c00, 0x3fff).rw(this, FUNC(trs80_state::trs80_videoram_r), FUNC(trs80_state::trs80_videoram_w)).share("videoram"); + map(0x4000, 0xffff).ram(); +} + +void trs80_state::model1_io(address_map &map) +{ + map.global_mask(0xff); + map.unmap_value_high(); + map(0xff, 0xff).rw(this, FUNC(trs80_state::trs80_ff_r), FUNC(trs80_state::trs80_ff_w)); +} + +void trs80_state::sys80_io(address_map &map) +{ + map.global_mask(0xff); + map.unmap_value_high(); + map(0xf8, 0xf8).r("uart", FUNC(ay31015_device::receive)).w(this, FUNC(trs80_state::sys80_f8_w)); + map(0xf9, 0xf9).r(this, FUNC(trs80_state::sys80_f9_r)).w("uart", FUNC(ay31015_device::transmit)); + map(0xfd, 0xfd).rw(this, FUNC(trs80_state::trs80_printer_r), FUNC(trs80_state::trs80_printer_w)); + map(0xfe, 0xfe).w(this, FUNC(trs80_state::sys80_fe_w)); + map(0xff, 0xff).rw(this, FUNC(trs80_state::trs80_ff_r), FUNC(trs80_state::trs80_ff_w)); +} + +void trs80_state::lnw80_map(address_map &map) +{ + map(0x4000, 0xffff).ram(); +} + +void trs80_state::lnw80_io(address_map &map) +{ + map.global_mask(0xff); + map.unmap_value_high(); + map(0xe8, 0xe8).rw(this, FUNC(trs80_state::trs80m4_e8_r), FUNC(trs80_state::trs80m4_e8_w)); + map(0xe9, 0xe9).portr("E9"); + map(0xea, 0xea).rw(this, FUNC(trs80_state::trs80m4_ea_r), FUNC(trs80_state::trs80m4_ea_w)); + map(0xeb, 0xeb).rw("uart", FUNC(ay31015_device::receive), FUNC(ay31015_device::transmit)); + map(0xfe, 0xfe).rw(this, FUNC(trs80_state::lnw80_fe_r), FUNC(trs80_state::lnw80_fe_w)); + map(0xff, 0xff).rw(this, FUNC(trs80_state::trs80_ff_r), FUNC(trs80_state::trs80_ff_w)); +} + +void trs80_state::model3_map(address_map &map) +{ +} + +void trs80_state::model3_io(address_map &map) +{ + map.global_mask(0xff); + map.unmap_value_high(); + map(0xe0, 0xe3).rw(this, FUNC(trs80_state::trs80m4_e0_r), FUNC(trs80_state::trs80m4_e0_w)); + map(0xe4, 0xe4).rw(this, FUNC(trs80_state::trs80m4_e4_r), FUNC(trs80_state::trs80m4_e4_w)); + map(0xe8, 0xe8).rw(this, FUNC(trs80_state::trs80m4_e8_r), FUNC(trs80_state::trs80m4_e8_w)); + map(0xe9, 0xe9).portr("E9").w(this, FUNC(trs80_state::trs80m4_e9_w)); + map(0xea, 0xea).rw(this, FUNC(trs80_state::trs80m4_ea_r), FUNC(trs80_state::trs80m4_ea_w)); + map(0xeb, 0xeb).rw("uart", FUNC(ay31015_device::receive), FUNC(ay31015_device::transmit)); + map(0xec, 0xef).rw(this, FUNC(trs80_state::trs80m4_ec_r), FUNC(trs80_state::trs80m4_ec_w)); + map(0xf0, 0xf0).r(this, FUNC(trs80_state::trs80_wd179x_r)); + map(0xf0, 0xf0).w(m_fdc, FUNC(fd1793_device::cmd_w)); + map(0xf1, 0xf1).rw(m_fdc, FUNC(fd1793_device::track_r), FUNC(fd1793_device::track_w)); + map(0xf2, 0xf2).rw(m_fdc, FUNC(fd1793_device::sector_r), FUNC(fd1793_device::sector_w)); + map(0xf3, 0xf3).rw(m_fdc, FUNC(fd1793_device::data_r), FUNC(fd1793_device::data_w)); + map(0xf4, 0xf4).w(this, FUNC(trs80_state::trs80m4_f4_w)); + map(0xf8, 0xfb).rw(this, FUNC(trs80_state::trs80_printer_r), FUNC(trs80_state::trs80_printer_w)); + map(0xfc, 0xff).rw(this, FUNC(trs80_state::trs80m4_ff_r), FUNC(trs80_state::trs80m4_ff_w)); +} + +void trs80_state::model4_io(address_map &map) +{ + map.global_mask(0xff); + map.unmap_value_high(); + map(0x84, 0x87).w(this, FUNC(trs80_state::trs80m4_84_w)); + map(0x88, 0x89).w(this, FUNC(trs80_state::trs80m4_88_w)); + map(0x90, 0x93).w(this, FUNC(trs80_state::trs80m4_90_w)); + map(0xe0, 0xe3).rw(this, FUNC(trs80_state::trs80m4_e0_r), FUNC(trs80_state::trs80m4_e0_w)); + map(0xe4, 0xe4).rw(this, FUNC(trs80_state::trs80m4_e4_r), FUNC(trs80_state::trs80m4_e4_w)); + map(0xe8, 0xe8).rw(this, FUNC(trs80_state::trs80m4_e8_r), FUNC(trs80_state::trs80m4_e8_w)); + map(0xe9, 0xe9).portr("E9").w(this, FUNC(trs80_state::trs80m4_e9_w)); + map(0xea, 0xea).rw(this, FUNC(trs80_state::trs80m4_ea_r), FUNC(trs80_state::trs80m4_ea_w)); + map(0xeb, 0xeb).rw("uart", FUNC(ay31015_device::receive), FUNC(ay31015_device::transmit)); + map(0xec, 0xef).rw(this, FUNC(trs80_state::trs80m4_ec_r), FUNC(trs80_state::trs80m4_ec_w)); + map(0xf0, 0xf0).r(this, FUNC(trs80_state::trs80_wd179x_r)); + map(0xf0, 0xf0).w(m_fdc, FUNC(fd1793_device::cmd_w)); + map(0xf1, 0xf1).rw(m_fdc, FUNC(fd1793_device::track_r), FUNC(fd1793_device::track_w)); + map(0xf2, 0xf2).rw(m_fdc, FUNC(fd1793_device::sector_r), FUNC(fd1793_device::sector_w)); + map(0xf3, 0xf3).rw(m_fdc, FUNC(fd1793_device::data_r), FUNC(fd1793_device::data_w)); + map(0xf4, 0xf4).w(this, FUNC(trs80_state::trs80m4_f4_w)); + map(0xf8, 0xfb).rw(this, FUNC(trs80_state::trs80_printer_r), FUNC(trs80_state::trs80_printer_w)); + map(0xfc, 0xff).rw(this, FUNC(trs80_state::trs80m4_ff_r), FUNC(trs80_state::trs80m4_ff_w)); +} + +void trs80_state::model4p_io(address_map &map) +{ + map.global_mask(0xff); + map.unmap_value_high(); + map(0x84, 0x87).w(this, FUNC(trs80_state::trs80m4_84_w)); + map(0x88, 0x89).w(this, FUNC(trs80_state::trs80m4_88_w)); + map(0x90, 0x93).w(this, FUNC(trs80_state::trs80m4_90_w)); + map(0x9c, 0x9f).w(this, FUNC(trs80_state::trs80m4p_9c_w)); + map(0xe0, 0xe3).rw(this, FUNC(trs80_state::trs80m4_e0_r), FUNC(trs80_state::trs80m4_e0_w)); + map(0xe4, 0xe4).rw(this, FUNC(trs80_state::trs80m4_e4_r), FUNC(trs80_state::trs80m4_e4_w)); + map(0xe8, 0xe8).rw(this, FUNC(trs80_state::trs80m4_e8_r), FUNC(trs80_state::trs80m4_e8_w)); + map(0xe9, 0xe9).portr("E9").w(this, FUNC(trs80_state::trs80m4_e9_w)); + map(0xea, 0xea).rw(this, FUNC(trs80_state::trs80m4_ea_r), FUNC(trs80_state::trs80m4_ea_w)); + map(0xeb, 0xeb).rw("uart", FUNC(ay31015_device::receive), FUNC(ay31015_device::transmit)); + map(0xec, 0xef).rw(this, FUNC(trs80_state::trs80m4_ec_r), FUNC(trs80_state::trs80m4_ec_w)); + map(0xf0, 0xf0).r(this, FUNC(trs80_state::trs80_wd179x_r)); + map(0xf0, 0xf0).w(m_fdc, FUNC(fd1793_device::cmd_w)); + map(0xf1, 0xf1).rw(m_fdc, FUNC(fd1793_device::track_r), FUNC(fd1793_device::track_w)); + map(0xf2, 0xf2).rw(m_fdc, FUNC(fd1793_device::sector_r), FUNC(fd1793_device::sector_w)); + map(0xf3, 0xf3).rw(m_fdc, FUNC(fd1793_device::data_r), FUNC(fd1793_device::data_w)); + map(0xf4, 0xf4).w(this, FUNC(trs80_state::trs80m4_f4_w)); + map(0xf8, 0xfb).rw(this, FUNC(trs80_state::trs80_printer_r), FUNC(trs80_state::trs80_printer_w)); + map(0xfc, 0xff).rw(this, FUNC(trs80_state::trs80m4_ff_r), FUNC(trs80_state::trs80m4_ff_w)); +} + +void trs80_state::meritum_map(address_map &map) +{ + map(0x0000, 0x37ff).rom(); + map(0x3800, 0x38ff).mirror(0x300).r(this, FUNC(trs80_state::trs80_keyboard_r)); + map(0x3c00, 0x3fff).rw(this, FUNC(trs80_state::trs80_videoram_r), FUNC(trs80_state::trs80_videoram_w)).share("videoram"); + map(0x4000, 0xffff).ram(); +} + +void trs80_state::meritum_io(address_map &map) +{ + map.global_mask(0xff); + map.unmap_value_high(); // There are specific writes to ports 03, F3, F7, F8, FA, FB, FD // so perhaps this system uses devices at these locations. // The disk input expects values that are different to the usual, // eg. port F0 should be 5, port F2 should have bit 3 set. //AM_RANGE(0x03, 0x03) unknown - AM_RANGE(0xf0, 0xf0) AM_READ(trs80_wd179x_r) - AM_RANGE(0xf0, 0xf0) AM_DEVWRITE("fdc", fd1793_device, cmd_w) - AM_RANGE(0xf1, 0xf1) AM_DEVREADWRITE("fdc", fd1793_device, track_r, track_w) - AM_RANGE(0xf2, 0xf2) AM_DEVREADWRITE("fdc", fd1793_device, sector_r, sector_w) - AM_RANGE(0xf3, 0xf3) AM_DEVREADWRITE("fdc", fd1793_device, data_r, data_w) - AM_RANGE(0xf4, 0xf4) AM_WRITE(trs80m4_f4_w) - AM_RANGE(0xf8, 0xfb) AM_READWRITE(trs80_printer_r, trs80_printer_w) + map(0xf0, 0xf0).r(this, FUNC(trs80_state::trs80_wd179x_r)); + map(0xf0, 0xf0).w(m_fdc, FUNC(fd1793_device::cmd_w)); + map(0xf1, 0xf1).rw(m_fdc, FUNC(fd1793_device::track_r), FUNC(fd1793_device::track_w)); + map(0xf2, 0xf2).rw(m_fdc, FUNC(fd1793_device::sector_r), FUNC(fd1793_device::sector_w)); + map(0xf3, 0xf3).rw(m_fdc, FUNC(fd1793_device::data_r), FUNC(fd1793_device::data_w)); + map(0xf4, 0xf4).w(this, FUNC(trs80_state::trs80m4_f4_w)); + map(0xf8, 0xfb).rw(this, FUNC(trs80_state::trs80_printer_r), FUNC(trs80_state::trs80_printer_w)); //AM_RANGE(0xfc, 0xfd) unknown - AM_RANGE(0xff, 0xff) AM_READWRITE(trs80_ff_r, trs80_ff_w) -ADDRESS_MAP_END - -ADDRESS_MAP_START(trs80_state::cp500_io) - ADDRESS_MAP_GLOBAL_MASK(0xff) - ADDRESS_MAP_UNMAP_HIGH - AM_RANGE(0xe0, 0xe3) AM_READWRITE(trs80m4_e0_r, trs80m4_e0_w) - AM_RANGE(0xe4, 0xe4) AM_READWRITE(trs80m4_e4_r, trs80m4_e4_w) - AM_RANGE(0xe8, 0xe8) AM_READWRITE(trs80m4_e8_r, trs80m4_e8_w) - AM_RANGE(0xe9, 0xe9) AM_READ_PORT("E9") AM_WRITE(trs80m4_e9_w) - AM_RANGE(0xea, 0xea) AM_READWRITE(trs80m4_ea_r, trs80m4_ea_w) - AM_RANGE(0xeb, 0xeb) AM_DEVREADWRITE("uart", ay31015_device, receive, transmit) - AM_RANGE(0xec, 0xef) AM_READWRITE(trs80m4_ec_r, trs80m4_ec_w) - AM_RANGE(0xf0, 0xf0) AM_READ(trs80_wd179x_r) - AM_RANGE(0xf0, 0xf0) AM_DEVWRITE("fdc", fd1793_device, cmd_w) - AM_RANGE(0xf1, 0xf1) AM_DEVREADWRITE("fdc", fd1793_device, track_r, track_w) - AM_RANGE(0xf2, 0xf2) AM_DEVREADWRITE("fdc", fd1793_device, sector_r, sector_w) - AM_RANGE(0xf3, 0xf3) AM_DEVREADWRITE("fdc", fd1793_device, data_r, data_w) - AM_RANGE(0xf4, 0xf4) AM_WRITE(trs80m4_f4_w) - AM_RANGE(0xf4, 0xf7) AM_READ(cp500_a11_flipflop_toggle) - AM_RANGE(0xf8, 0xfb) AM_READWRITE(trs80_printer_r, trs80_printer_w) - AM_RANGE(0xfc, 0xff) AM_READWRITE(trs80m4_ff_r, trs80m4_ff_w) -ADDRESS_MAP_END + map(0xff, 0xff).rw(this, FUNC(trs80_state::trs80_ff_r), FUNC(trs80_state::trs80_ff_w)); +} + +void trs80_state::cp500_io(address_map &map) +{ + map.global_mask(0xff); + map.unmap_value_high(); + map(0xe0, 0xe3).rw(this, FUNC(trs80_state::trs80m4_e0_r), FUNC(trs80_state::trs80m4_e0_w)); + map(0xe4, 0xe4).rw(this, FUNC(trs80_state::trs80m4_e4_r), FUNC(trs80_state::trs80m4_e4_w)); + map(0xe8, 0xe8).rw(this, FUNC(trs80_state::trs80m4_e8_r), FUNC(trs80_state::trs80m4_e8_w)); + map(0xe9, 0xe9).portr("E9").w(this, FUNC(trs80_state::trs80m4_e9_w)); + map(0xea, 0xea).rw(this, FUNC(trs80_state::trs80m4_ea_r), FUNC(trs80_state::trs80m4_ea_w)); + map(0xeb, 0xeb).rw("uart", FUNC(ay31015_device::receive), FUNC(ay31015_device::transmit)); + map(0xec, 0xef).rw(this, FUNC(trs80_state::trs80m4_ec_r), FUNC(trs80_state::trs80m4_ec_w)); + map(0xf0, 0xf0).r(this, FUNC(trs80_state::trs80_wd179x_r)); + map(0xf0, 0xf0).w(m_fdc, FUNC(fd1793_device::cmd_w)); + map(0xf1, 0xf1).rw(m_fdc, FUNC(fd1793_device::track_r), FUNC(fd1793_device::track_w)); + map(0xf2, 0xf2).rw(m_fdc, FUNC(fd1793_device::sector_r), FUNC(fd1793_device::sector_w)); + map(0xf3, 0xf3).rw(m_fdc, FUNC(fd1793_device::data_r), FUNC(fd1793_device::data_w)); + map(0xf4, 0xf4).w(this, FUNC(trs80_state::trs80m4_f4_w)); + map(0xf4, 0xf7).r(this, FUNC(trs80_state::cp500_a11_flipflop_toggle)); + map(0xf8, 0xfb).rw(this, FUNC(trs80_state::trs80_printer_r), FUNC(trs80_state::trs80_printer_w)); + map(0xfc, 0xff).rw(this, FUNC(trs80_state::trs80m4_ff_r), FUNC(trs80_state::trs80m4_ff_w)); +} /************************************************************************** w/o SHIFT with SHIFT |