mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
abc80x: Implemented option ROM opcode fetch thru character RAM. [Curt Coder]
This commit is contained in:
parent
d3261eeea4
commit
994c32529f
@ -379,6 +379,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
|
||||
//-------------------------------------------------
|
||||
@ -425,6 +487,16 @@ WRITE8_MEMBER( abc806_state::mao_w )
|
||||
// ADDRESS MAPS
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// 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)
|
||||
|
||||
|
@ -117,6 +117,7 @@ public:
|
||||
void bankswitch();
|
||||
void clock_cassette(int state);
|
||||
|
||||
virtual DECLARE_READ8_MEMBER( m1_r );
|
||||
DECLARE_READ8_MEMBER( pling_r );
|
||||
DECLARE_WRITE8_MEMBER( hrs_w );
|
||||
DECLARE_WRITE8_MEMBER( hrc_w );
|
||||
@ -128,7 +129,9 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER( sio_rtsb_w );
|
||||
|
||||
// memory state
|
||||
int m_fetch_charram; // opcode fetched from character RAM region (0x7800-0x7fff)
|
||||
bool m_fetch_charram; // opcode fetched from character RAM region (0x7800-0x7fff)
|
||||
uint16_t m_char_ram_start;
|
||||
uint16_t m_char_ram_mask;
|
||||
|
||||
// sound state
|
||||
int m_pling;
|
||||
@ -150,6 +153,7 @@ public:
|
||||
// timers
|
||||
emu_timer *m_ctc_timer;
|
||||
emu_timer *m_cassette_timer;
|
||||
void abc800_m1(address_map &map);
|
||||
void abc800c_io(address_map &map);
|
||||
void abc800m_io(address_map &map);
|
||||
void abc800m_mem(address_map &map);
|
||||
@ -205,6 +209,7 @@ public:
|
||||
offs_t translate_trom_offset(offs_t offset);
|
||||
void hr_update(bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
|
||||
DECLARE_READ8_MEMBER( m1_r ) override;
|
||||
DECLARE_READ8_MEMBER( char_ram_r );
|
||||
DECLARE_PALETTE_INIT( abc800c );
|
||||
void abc800c(machine_config &config);
|
||||
@ -239,6 +244,7 @@ public:
|
||||
|
||||
void bankswitch();
|
||||
|
||||
DECLARE_READ8_MEMBER( m1_r ) override;
|
||||
DECLARE_READ8_MEMBER( pling_r );
|
||||
DECLARE_WRITE_LINE_MEMBER( lrs_w );
|
||||
DECLARE_WRITE_LINE_MEMBER( mux80_40_w );
|
||||
|
Loading…
Reference in New Issue
Block a user