summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/coco12.cpp
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2020-04-18 21:58:36 -0400
committer AJR <ajrhacker@users.noreply.github.com>2020-04-18 21:58:39 -0400
commit146873a90450204857779ef76d3f51e450738936 (patch)
treefb7b695abe1fc1c68828ae84c6e074b90c627972 /src/mame/drivers/coco12.cpp
parent48177fe08cc6dd1c7d843544a273ec020d1bb684 (diff)
6883sam: Replace custom dynamic memory banking with conventional address spaces
Diffstat (limited to 'src/mame/drivers/coco12.cpp')
-rw-r--r--src/mame/drivers/coco12.cpp64
1 files changed, 58 insertions, 6 deletions
diff --git a/src/mame/drivers/coco12.cpp b/src/mame/drivers/coco12.cpp
index c90c63578af..3126928471b 100644
--- a/src/mame/drivers/coco12.cpp
+++ b/src/mame/drivers/coco12.cpp
@@ -52,12 +52,57 @@
// ADDRESS MAPS
//**************************************************************************
-//-------------------------------------------------
-// ADDRESS_MAP( coco_mem )
-//-------------------------------------------------
+void coco12_state::coco_mem(address_map &map)
+{
+ map(0x0000, 0xffff).rw(m_sam, FUNC(sam6883_device::read), FUNC(sam6883_device::write));
+}
+
+
+void coco12_state::coco_ram(address_map &map)
+{
+ // mapped by configure_sam
+}
-void coco_state::coco_mem(address_map &map)
+void coco12_state::coco_rom0(address_map &map)
{
+ // $8000-$9FFF
+ map(0x0000, 0x1fff).rom().region(MAINCPU_TAG, 0x0000);
+}
+
+void coco12_state::coco_rom1(address_map &map)
+{
+ // $A000-$BFFF
+ map(0x0000, 0x1fff).rom().region(MAINCPU_TAG, 0x2000);
+}
+
+void coco12_state::coco_rom2(address_map &map)
+{
+ // $C000-$FEFF
+ map(0x0000, 0x3eff).rw(m_cococart, FUNC(cococart_slot_device::cts_read), FUNC(cococart_slot_device::cts_write));
+}
+
+void coco12_state::coco_io0(address_map &map)
+{
+ // $FF00-$FF1F
+ map(0x00, 0x03).mirror(0x1c).rw(PIA0_TAG, FUNC(pia6821_device::read), FUNC(pia6821_device::write));
+}
+
+void coco12_state::coco_io1(address_map &map)
+{
+ // $FF20-$FF3F
+ map(0x00, 0x03).mirror(0x1c).r(PIA1_TAG, FUNC(pia6821_device::read)).w(FUNC(coco12_state::ff20_write));
+}
+
+void coco12_state::coco_io2(address_map &map)
+{
+ // $FF40-$FF5F
+ map(0x00, 0x1f).rw(FUNC(coco12_state::ff40_read), FUNC(coco12_state::ff40_write));
+}
+
+void coco12_state::coco_ff60(address_map &map)
+{
+ // $FF60-$FFDF
+ map(0x00, 0x7f).rw(FUNC(coco12_state::ff60_read), FUNC(coco12_state::ff60_write));
}
@@ -459,7 +504,14 @@ void coco12_state::coco(machine_config &config)
pia1.irqb_handler().set(FUNC(coco_state::pia1_firq_b));
SAM6883(config, m_sam, XTAL(14'318'181), m_maincpu);
- m_sam->res_rd_callback().set(FUNC(coco12_state::sam_read));
+ m_sam->set_addrmap(0, &coco12_state::coco_ram);
+ m_sam->set_addrmap(1, &coco12_state::coco_rom0);
+ m_sam->set_addrmap(2, &coco12_state::coco_rom1);
+ m_sam->set_addrmap(3, &coco12_state::coco_rom2);
+ m_sam->set_addrmap(4, &coco12_state::coco_io0);
+ m_sam->set_addrmap(5, &coco12_state::coco_io1);
+ m_sam->set_addrmap(6, &coco12_state::coco_io2);
+ m_sam->set_addrmap(7, &coco12_state::coco_ff60);
// Becker Port device
COCO_DWSOCK(config, DWSOCK_TAG, 0);
@@ -487,7 +539,7 @@ void coco12_state::coco(machine_config &config)
m_vdg->set_screen("screen");
m_vdg->hsync_wr_callback().set(FUNC(coco12_state::horizontal_sync));
m_vdg->fsync_wr_callback().set(FUNC(coco12_state::field_sync));
- m_vdg->input_callback().set(m_sam, FUNC(sam6883_device::display_read));
+ m_vdg->input_callback().set(FUNC(coco12_state::sam_read));
// internal ram
RAM(config, m_ram).set_default_size("64K").set_extra_options("4K,16K,32K");