summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/trs80.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/trs80.cpp')
-rw-r--r--src/mame/drivers/trs80.cpp356
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