mirror of
https://github.com/holub/mame
synced 2025-07-03 17:08:39 +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
|
// mai_r - memory bank map read
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -425,6 +487,16 @@ WRITE8_MEMBER( abc806_state::mao_w )
|
|||||||
// ADDRESS MAPS
|
// 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 )
|
// ADDRESS_MAP( abc800c_mem )
|
||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
@ -466,11 +538,11 @@ ADDRESS_MAP_END
|
|||||||
//-------------------------------------------------
|
//-------------------------------------------------
|
||||||
|
|
||||||
ADDRESS_MAP_START(abc800_state::abc800m_mem)
|
ADDRESS_MAP_START(abc800_state::abc800m_mem)
|
||||||
ADDRESS_MAP_UNMAP_HIGH
|
map.unmap_value_high();
|
||||||
AM_RANGE(0x0000, 0x3fff) AM_RAM AM_SHARE("video_ram")
|
map(0x0000, 0x3fff).ram().share("video_ram");
|
||||||
AM_RANGE(0x4000, 0x77ff) AM_ROM
|
map(0x4000, 0x77ff).rom();
|
||||||
AM_RANGE(0x7800, 0x7fff) AM_RAM AM_SHARE("char_ram")
|
map(0x7800, 0x7fff).ram().share("char_ram");
|
||||||
AM_RANGE(0x8000, 0xffff) AM_RAM
|
map(0x8000, 0xffff).ram();
|
||||||
ADDRESS_MAP_END
|
ADDRESS_MAP_END
|
||||||
|
|
||||||
|
|
||||||
@ -1024,6 +1096,7 @@ MACHINE_CONFIG_START(abc800c_state::abc800c)
|
|||||||
// basic machine hardware
|
// basic machine hardware
|
||||||
MCFG_CPU_ADD(Z80_TAG, Z80, ABC800_X01/2/2)
|
MCFG_CPU_ADD(Z80_TAG, Z80, ABC800_X01/2/2)
|
||||||
MCFG_Z80_DAISY_CHAIN(abc800_daisy_chain)
|
MCFG_Z80_DAISY_CHAIN(abc800_daisy_chain)
|
||||||
|
MCFG_CPU_OPCODES_MAP(abc800_m1)
|
||||||
MCFG_CPU_PROGRAM_MAP(abc800c_mem)
|
MCFG_CPU_PROGRAM_MAP(abc800c_mem)
|
||||||
MCFG_CPU_IO_MAP(abc800c_io)
|
MCFG_CPU_IO_MAP(abc800c_io)
|
||||||
|
|
||||||
@ -1099,6 +1172,7 @@ MACHINE_CONFIG_START(abc800m_state::abc800m)
|
|||||||
// basic machine hardware
|
// basic machine hardware
|
||||||
MCFG_CPU_ADD(Z80_TAG, Z80, ABC800_X01/2/2)
|
MCFG_CPU_ADD(Z80_TAG, Z80, ABC800_X01/2/2)
|
||||||
MCFG_Z80_DAISY_CHAIN(abc800_daisy_chain)
|
MCFG_Z80_DAISY_CHAIN(abc800_daisy_chain)
|
||||||
|
MCFG_CPU_OPCODES_MAP(abc800_m1)
|
||||||
MCFG_CPU_PROGRAM_MAP(abc800m_mem)
|
MCFG_CPU_PROGRAM_MAP(abc800m_mem)
|
||||||
MCFG_CPU_IO_MAP(abc800m_io)
|
MCFG_CPU_IO_MAP(abc800m_io)
|
||||||
|
|
||||||
@ -1174,6 +1248,7 @@ MACHINE_CONFIG_START(abc802_state::abc802)
|
|||||||
// basic machine hardware
|
// basic machine hardware
|
||||||
MCFG_CPU_ADD(Z80_TAG, Z80, ABC800_X01/2/2)
|
MCFG_CPU_ADD(Z80_TAG, Z80, ABC800_X01/2/2)
|
||||||
MCFG_Z80_DAISY_CHAIN(abc800_daisy_chain)
|
MCFG_Z80_DAISY_CHAIN(abc800_daisy_chain)
|
||||||
|
MCFG_CPU_OPCODES_MAP(abc800_m1)
|
||||||
MCFG_CPU_PROGRAM_MAP(abc802_mem)
|
MCFG_CPU_PROGRAM_MAP(abc802_mem)
|
||||||
MCFG_CPU_IO_MAP(abc802_io)
|
MCFG_CPU_IO_MAP(abc802_io)
|
||||||
|
|
||||||
@ -1250,6 +1325,7 @@ MACHINE_CONFIG_START(abc806_state::abc806)
|
|||||||
// basic machine hardware
|
// basic machine hardware
|
||||||
MCFG_CPU_ADD(Z80_TAG, Z80, ABC800_X01/2/2)
|
MCFG_CPU_ADD(Z80_TAG, Z80, ABC800_X01/2/2)
|
||||||
MCFG_Z80_DAISY_CHAIN(abc800_daisy_chain)
|
MCFG_Z80_DAISY_CHAIN(abc800_daisy_chain)
|
||||||
|
MCFG_CPU_OPCODES_MAP(abc800_m1)
|
||||||
MCFG_CPU_PROGRAM_MAP(abc806_mem)
|
MCFG_CPU_PROGRAM_MAP(abc806_mem)
|
||||||
MCFG_CPU_IO_MAP(abc806_io)
|
MCFG_CPU_IO_MAP(abc806_io)
|
||||||
|
|
||||||
|
@ -117,6 +117,7 @@ public:
|
|||||||
void bankswitch();
|
void bankswitch();
|
||||||
void clock_cassette(int state);
|
void clock_cassette(int state);
|
||||||
|
|
||||||
|
virtual DECLARE_READ8_MEMBER( m1_r );
|
||||||
DECLARE_READ8_MEMBER( pling_r );
|
DECLARE_READ8_MEMBER( pling_r );
|
||||||
DECLARE_WRITE8_MEMBER( hrs_w );
|
DECLARE_WRITE8_MEMBER( hrs_w );
|
||||||
DECLARE_WRITE8_MEMBER( hrc_w );
|
DECLARE_WRITE8_MEMBER( hrc_w );
|
||||||
@ -128,7 +129,9 @@ public:
|
|||||||
DECLARE_WRITE_LINE_MEMBER( sio_rtsb_w );
|
DECLARE_WRITE_LINE_MEMBER( sio_rtsb_w );
|
||||||
|
|
||||||
// memory state
|
// 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
|
// sound state
|
||||||
int m_pling;
|
int m_pling;
|
||||||
@ -150,6 +153,7 @@ public:
|
|||||||
// timers
|
// timers
|
||||||
emu_timer *m_ctc_timer;
|
emu_timer *m_ctc_timer;
|
||||||
emu_timer *m_cassette_timer;
|
emu_timer *m_cassette_timer;
|
||||||
|
void abc800_m1(address_map &map);
|
||||||
void abc800c_io(address_map &map);
|
void abc800c_io(address_map &map);
|
||||||
void abc800m_io(address_map &map);
|
void abc800m_io(address_map &map);
|
||||||
void abc800m_mem(address_map &map);
|
void abc800m_mem(address_map &map);
|
||||||
@ -205,6 +209,7 @@ public:
|
|||||||
offs_t translate_trom_offset(offs_t offset);
|
offs_t translate_trom_offset(offs_t offset);
|
||||||
void hr_update(bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
void hr_update(bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||||
|
|
||||||
|
DECLARE_READ8_MEMBER( m1_r ) override;
|
||||||
DECLARE_READ8_MEMBER( char_ram_r );
|
DECLARE_READ8_MEMBER( char_ram_r );
|
||||||
DECLARE_PALETTE_INIT( abc800c );
|
DECLARE_PALETTE_INIT( abc800c );
|
||||||
void abc800c(machine_config &config);
|
void abc800c(machine_config &config);
|
||||||
@ -239,6 +244,7 @@ public:
|
|||||||
|
|
||||||
void bankswitch();
|
void bankswitch();
|
||||||
|
|
||||||
|
DECLARE_READ8_MEMBER( m1_r ) override;
|
||||||
DECLARE_READ8_MEMBER( pling_r );
|
DECLARE_READ8_MEMBER( pling_r );
|
||||||
DECLARE_WRITE_LINE_MEMBER( lrs_w );
|
DECLARE_WRITE_LINE_MEMBER( lrs_w );
|
||||||
DECLARE_WRITE_LINE_MEMBER( mux80_40_w );
|
DECLARE_WRITE_LINE_MEMBER( mux80_40_w );
|
||||||
|
Loading…
Reference in New Issue
Block a user