summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/abc80x.cpp
diff options
context:
space:
mode:
author Curt Coder <curtcoder@mail.com>2018-03-26 11:37:03 +0300
committer Curt Coder <curtcoder@mail.com>2018-03-27 13:39:39 +0300
commit994c32529f7de650d89c0f81e4f73a93ba999102 (patch)
tree81eb8833d186e1774f38e0c0c25940a0f2762c5c /src/mame/drivers/abc80x.cpp
parentd3261eeea4e20322cb120f4d943ac7718741cf74 (diff)
abc80x: Implemented option ROM opcode fetch thru character RAM. [Curt Coder]
Diffstat (limited to 'src/mame/drivers/abc80x.cpp')
-rw-r--r--src/mame/drivers/abc80x.cpp86
1 files changed, 81 insertions, 5 deletions
diff --git a/src/mame/drivers/abc80x.cpp b/src/mame/drivers/abc80x.cpp
index 1b9a6060945..ff4363943dc 100644
--- a/src/mame/drivers/abc80x.cpp
+++ b/src/mame/drivers/abc80x.cpp
@@ -380,6 +380,68 @@ void abc806_state::bankswitch()
//-------------------------------------------------
+// m1_r - opcode read
+//-------------------------------------------------
+
+READ8_MEMBER( abc800_state::m1_r )
+{
+ if (offset >= 0x7800 && offset < 0x8000)
+ {
+ if (!m_fetch_charram)
+ {
+ m_fetch_charram = 1;
+ bankswitch();
+ }
+
+ return m_rom->base()[0x7800 | (offset & 0x7ff)];
+ }
+
+ if (m_fetch_charram)
+ {
+ m_fetch_charram = 0;
+ bankswitch();
+ }
+
+ return m_maincpu->space(AS_PROGRAM).read_byte(offset);
+}
+
+READ8_MEMBER( abc800c_state::m1_r )
+{
+ if (offset >= 0x7c00 && offset < 0x8000)
+ {
+ if (!m_fetch_charram)
+ {
+ m_fetch_charram = 1;
+ bankswitch();
+ }
+
+ return m_rom->base()[0x7c00 | (offset & 0x3ff)];
+ }
+
+ if (m_fetch_charram)
+ {
+ m_fetch_charram = 0;
+ bankswitch();
+ }
+
+ return m_maincpu->space(AS_PROGRAM).read_byte(offset);
+}
+
+READ8_MEMBER( abc802_state::m1_r )
+{
+ if (m_lrs)
+ {
+ if (offset >= 0x7800 && offset < 0x8000)
+ {
+ return m_rom->base()[0x7800 | (offset & 0x7ff)];
+ }
+ }
+
+ return m_maincpu->space(AS_PROGRAM).read_byte(offset);
+}
+
+
+//-------------------------------------------------
// mai_r - memory bank map read
//-------------------------------------------------
@@ -426,6 +488,16 @@ WRITE8_MEMBER( abc806_state::mao_w )
//**************************************************************************
//-------------------------------------------------
+// ADDRESS_MAP( abc800_m1 )
+//-------------------------------------------------
+
+void abc800_state::abc800_m1(address_map &map)
+{
+ map(0x0000, 0xffff).r(this, FUNC(abc800_state::m1_r));
+}
+
+
+//-------------------------------------------------
// ADDRESS_MAP( abc800c_mem )
//-------------------------------------------------
@@ -466,11 +538,11 @@ ADDRESS_MAP_END
//-------------------------------------------------
ADDRESS_MAP_START(abc800_state::abc800m_mem)
- ADDRESS_MAP_UNMAP_HIGH
- AM_RANGE(0x0000, 0x3fff) AM_RAM AM_SHARE("video_ram")
- AM_RANGE(0x4000, 0x77ff) AM_ROM
- AM_RANGE(0x7800, 0x7fff) AM_RAM AM_SHARE("char_ram")
- AM_RANGE(0x8000, 0xffff) AM_RAM
+ map.unmap_value_high();
+ map(0x0000, 0x3fff).ram().share("video_ram");
+ map(0x4000, 0x77ff).rom();
+ map(0x7800, 0x7fff).ram().share("char_ram");
+ map(0x8000, 0xffff).ram();
ADDRESS_MAP_END
@@ -1024,6 +1096,7 @@ MACHINE_CONFIG_START(abc800c_state::abc800c)
// basic machine hardware
MCFG_CPU_ADD(Z80_TAG, Z80, ABC800_X01/2/2)
MCFG_Z80_DAISY_CHAIN(abc800_daisy_chain)
+ MCFG_CPU_OPCODES_MAP(abc800_m1)
MCFG_CPU_PROGRAM_MAP(abc800c_mem)
MCFG_CPU_IO_MAP(abc800c_io)
@@ -1099,6 +1172,7 @@ MACHINE_CONFIG_START(abc800m_state::abc800m)
// basic machine hardware
MCFG_CPU_ADD(Z80_TAG, Z80, ABC800_X01/2/2)
MCFG_Z80_DAISY_CHAIN(abc800_daisy_chain)
+ MCFG_CPU_OPCODES_MAP(abc800_m1)
MCFG_CPU_PROGRAM_MAP(abc800m_mem)
MCFG_CPU_IO_MAP(abc800m_io)
@@ -1174,6 +1248,7 @@ MACHINE_CONFIG_START(abc802_state::abc802)
// basic machine hardware
MCFG_CPU_ADD(Z80_TAG, Z80, ABC800_X01/2/2)
MCFG_Z80_DAISY_CHAIN(abc800_daisy_chain)
+ MCFG_CPU_OPCODES_MAP(abc800_m1)
MCFG_CPU_PROGRAM_MAP(abc802_mem)
MCFG_CPU_IO_MAP(abc802_io)
@@ -1250,6 +1325,7 @@ MACHINE_CONFIG_START(abc806_state::abc806)
// basic machine hardware
MCFG_CPU_ADD(Z80_TAG, Z80, ABC800_X01/2/2)
MCFG_Z80_DAISY_CHAIN(abc800_daisy_chain)
+ MCFG_CPU_OPCODES_MAP(abc800_m1)
MCFG_CPU_PROGRAM_MAP(abc806_mem)
MCFG_CPU_IO_MAP(abc806_io)