mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
Untangle cartslot from TV Boy, replace unnecessary bankdev with ROM
bank, fix save state for TV Boy. (nw) This is a great example of why trying to make a derived class that removes stuff from the base is a bad idea. The machine start hook for a2600 both registered variables for save states and mapped the cartridge. The tvboy drivers couldn't call this as there's no cartridge slot present. This meant they didn't register for save state properly either. It may seem tempting to just make devices optional in the base class, but you lose useful validation and set yourself up for subtle issues like this. It's better to separate out the common parts into a base class.
This commit is contained in:
parent
aa153f753e
commit
18541972c0
@ -29,7 +29,7 @@ TODO:
|
||||
static const uint16_t supported_screen_heights[4] = { 262, 312, 328, 342 };
|
||||
|
||||
|
||||
ADDRESS_MAP_START(a2600_state::a2600_mem) // 6507 has 13-bit address space, 0x0000 - 0x1fff
|
||||
ADDRESS_MAP_START(a2600_base_state::a2600_mem) // 6507 has 13-bit address space, 0x0000 - 0x1fff
|
||||
AM_RANGE(0x0000, 0x007f) AM_MIRROR(0x0f00) AM_DEVREADWRITE("tia_video", tia_video_device, read, write)
|
||||
AM_RANGE(0x0080, 0x00ff) AM_MIRROR(0x0d00) AM_RAM AM_SHARE("riot_ram")
|
||||
#if USE_NEW_RIOT
|
||||
@ -113,7 +113,7 @@ WRITE8_MEMBER(a2600_state::cart_over_all_w)
|
||||
/* 0x300 - 0x3ff already masked out */
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(a2600_state::switch_A_w)
|
||||
WRITE8_MEMBER(a2600_base_state::switch_A_w)
|
||||
{
|
||||
/* Left controller port */
|
||||
m_joy1->joy_w( data >> 4 );
|
||||
@ -129,54 +129,54 @@ WRITE8_MEMBER(a2600_state::switch_A_w)
|
||||
// }
|
||||
}
|
||||
|
||||
READ8_MEMBER(a2600_state::switch_A_r)
|
||||
READ8_MEMBER(a2600_base_state::switch_A_r)
|
||||
{
|
||||
uint8_t val = 0;
|
||||
|
||||
/* Left controller port PINs 1-4 ( 4321 ) */
|
||||
val |= ( m_joy1->joy_r() & 0x0F ) << 4;
|
||||
// Left controller port PINs 1-4 ( 4321 )
|
||||
val |= (m_joy1->joy_r() & 0x0f) << 4;
|
||||
|
||||
/* Right controller port PINs 1-4 ( 4321 ) */
|
||||
val |= m_joy2->joy_r() & 0x0F;
|
||||
// Right controller port PINs 1-4 ( 4321 )
|
||||
val |= m_joy2->joy_r() & 0x0f;
|
||||
|
||||
return val;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(a2600_state::switch_B_w)
|
||||
WRITE8_MEMBER(a2600_base_state::switch_B_w)
|
||||
{
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(a2600_state::irq_callback)
|
||||
WRITE_LINE_MEMBER(a2600_base_state::irq_callback)
|
||||
{
|
||||
}
|
||||
|
||||
READ8_MEMBER(a2600_state::riot_input_port_8_r)
|
||||
READ8_MEMBER(a2600_base_state::riot_input_port_8_r)
|
||||
{
|
||||
return m_swb->read();
|
||||
}
|
||||
|
||||
|
||||
READ16_MEMBER(a2600_state::a2600_read_input_port)
|
||||
READ16_MEMBER(a2600_base_state::a2600_read_input_port)
|
||||
{
|
||||
switch( offset )
|
||||
switch (offset)
|
||||
{
|
||||
case 0: /* Left controller port PIN 5 */
|
||||
case 0: // Left controller port PIN 5
|
||||
return m_joy1->pot_x_r();
|
||||
|
||||
case 1: /* Left controller port PIN 9 */
|
||||
case 1: // Left controller port PIN 9
|
||||
return m_joy1->pot_y_r();
|
||||
|
||||
case 2: /* Right controller port PIN 5 */
|
||||
case 2: // Right controller port PIN 5
|
||||
return m_joy2->pot_x_r();
|
||||
|
||||
case 3: /* Right controller port PIN 9 */
|
||||
case 3: // Right controller port PIN 9
|
||||
return m_joy2->pot_y_r();
|
||||
|
||||
case 4: /* Left controller port PIN 6 */
|
||||
return ( m_joy1->joy_r() & 0x20 ) ? 0xff : 0x7f;
|
||||
case 4: // Left controller port PIN 6
|
||||
return (m_joy1->joy_r() & 0x20) ? 0xff : 0x7f;
|
||||
|
||||
case 5: /* Right controller port PIN 6 */
|
||||
return ( m_joy2->joy_r() & 0x20 ) ? 0xff : 0x7f;
|
||||
case 5: // Right controller port PIN 6
|
||||
return (m_joy2->joy_r() & 0x20) ? 0xff : 0x7f;
|
||||
}
|
||||
return 0xff;
|
||||
}
|
||||
@ -190,7 +190,7 @@ READ16_MEMBER(a2600_state::a2600_read_input_port)
|
||||
Q-Bert's Qubes (NTSC,F6) at 0x1594
|
||||
Berzerk at 0xF093.
|
||||
*/
|
||||
READ8_MEMBER(a2600_state::a2600_get_databus_contents)
|
||||
READ8_MEMBER(a2600_base_state::a2600_get_databus_contents)
|
||||
{
|
||||
uint16_t last_address, prev_address;
|
||||
uint8_t last_byte, prev_byte;
|
||||
@ -228,7 +228,7 @@ static const rectangle visarea[4] = {
|
||||
};
|
||||
#endif
|
||||
|
||||
WRITE16_MEMBER(a2600_state::a2600_tia_vsync_callback)
|
||||
WRITE16_MEMBER(a2600_base_state::a2600_tia_vsync_callback)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -245,7 +245,7 @@ WRITE16_MEMBER(a2600_state::a2600_tia_vsync_callback)
|
||||
}
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(a2600_state::a2600_tia_vsync_callback_pal)
|
||||
WRITE16_MEMBER(a2600_base_state::a2600_tia_vsync_callback_pal)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -284,76 +284,81 @@ WRITE8_MEMBER(a2600_state::cart_over_tia_w)
|
||||
m_tia->write(space, offset, data);
|
||||
}
|
||||
|
||||
void a2600_state::machine_start()
|
||||
void a2600_base_state::machine_start()
|
||||
{
|
||||
m_current_screen_height = m_screen->height();
|
||||
memset(m_riot_ram, 0x00, 0x80);
|
||||
|
||||
save_item(NAME(m_current_screen_height));
|
||||
}
|
||||
|
||||
void a2600_state::machine_start()
|
||||
{
|
||||
a2600_base_state::machine_start();
|
||||
|
||||
switch (m_cart->get_cart_type())
|
||||
{
|
||||
case A26_2K:
|
||||
case A26_4K:
|
||||
case A26_F4:
|
||||
case A26_F8:
|
||||
case A26_F8SW:
|
||||
case A26_FA:
|
||||
case A26_E0:
|
||||
case A26_E7:
|
||||
case A26_CV:
|
||||
case A26_DC:
|
||||
case A26_FV:
|
||||
case A26_8IN1:
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart), write8_delegate(FUNC(vcs_cart_slot_device::write_bank),(vcs_cart_slot_device*)m_cart));
|
||||
break;
|
||||
case A26_F6:
|
||||
case A26_DPC:
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart), write8_delegate(FUNC(vcs_cart_slot_device::write_bank),(vcs_cart_slot_device*)m_cart));
|
||||
break;
|
||||
case A26_FE:
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart), write8_delegate(FUNC(vcs_cart_slot_device::write_ram),(vcs_cart_slot_device*)m_cart));
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0x01fe, 0x01ff, read8_delegate(FUNC(vcs_cart_slot_device::read_bank),(vcs_cart_slot_device*)m_cart));
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0x01fe, 0x01fe, write8_delegate(FUNC(vcs_cart_slot_device::write_bank),(vcs_cart_slot_device*)m_cart));
|
||||
break;
|
||||
case A26_3E:
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart), write8_delegate(FUNC(vcs_cart_slot_device::write_ram),(vcs_cart_slot_device*)m_cart));
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0x00, 0x3f, write8_delegate(FUNC(a2600_state::cart_over_tia_w), this));
|
||||
break;
|
||||
case A26_3F:
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart));
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0x00, 0x3f, write8_delegate(FUNC(a2600_state::cart_over_tia_w), this));
|
||||
break;
|
||||
case A26_UA:
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart));
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x200, 0x27f, read8_delegate(FUNC(vcs_cart_slot_device::read_bank),(vcs_cart_slot_device*)m_cart), write8_delegate(FUNC(vcs_cart_slot_device::write_bank),(vcs_cart_slot_device*)m_cart));
|
||||
break;
|
||||
case A26_JVP:
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart), write8_delegate(FUNC(vcs_cart_slot_device::write_bank),(vcs_cart_slot_device*)m_cart));
|
||||
// to verify the actual behavior...
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xfa0, 0xfc0, read8_delegate(FUNC(a2600_state::cart_over_riot_r), this), write8_delegate(FUNC(a2600_state::cart_over_riot_w), this));
|
||||
break;
|
||||
case A26_4IN1:
|
||||
case A26_32IN1:
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart));
|
||||
break;
|
||||
case A26_SS:
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart));
|
||||
break;
|
||||
case A26_CM:
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart));
|
||||
break;
|
||||
case A26_X07:
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart), write8_delegate(FUNC(vcs_cart_slot_device::write_bank),(vcs_cart_slot_device*)m_cart));
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x0000, 0x0fff, read8_delegate(FUNC(a2600_state::cart_over_all_r), this), write8_delegate(FUNC(a2600_state::cart_over_all_w), this));
|
||||
break;
|
||||
case A26_HARMONY:
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart), write8_delegate(FUNC(vcs_cart_slot_device::write_bank),(vcs_cart_slot_device*)m_cart));
|
||||
break;
|
||||
case A26_2K:
|
||||
case A26_4K:
|
||||
case A26_F4:
|
||||
case A26_F8:
|
||||
case A26_F8SW:
|
||||
case A26_FA:
|
||||
case A26_E0:
|
||||
case A26_E7:
|
||||
case A26_CV:
|
||||
case A26_DC:
|
||||
case A26_FV:
|
||||
case A26_8IN1:
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart), write8_delegate(FUNC(vcs_cart_slot_device::write_bank),(vcs_cart_slot_device*)m_cart));
|
||||
break;
|
||||
case A26_F6:
|
||||
case A26_DPC:
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart), write8_delegate(FUNC(vcs_cart_slot_device::write_bank),(vcs_cart_slot_device*)m_cart));
|
||||
break;
|
||||
case A26_FE:
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart), write8_delegate(FUNC(vcs_cart_slot_device::write_ram),(vcs_cart_slot_device*)m_cart));
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0x01fe, 0x01ff, read8_delegate(FUNC(vcs_cart_slot_device::read_bank),(vcs_cart_slot_device*)m_cart));
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0x01fe, 0x01fe, write8_delegate(FUNC(vcs_cart_slot_device::write_bank),(vcs_cart_slot_device*)m_cart));
|
||||
break;
|
||||
case A26_3E:
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart), write8_delegate(FUNC(vcs_cart_slot_device::write_ram),(vcs_cart_slot_device*)m_cart));
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0x00, 0x3f, write8_delegate(FUNC(a2600_state::cart_over_tia_w), this));
|
||||
break;
|
||||
case A26_3F:
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart));
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0x00, 0x3f, write8_delegate(FUNC(a2600_state::cart_over_tia_w), this));
|
||||
break;
|
||||
case A26_UA:
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart));
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x200, 0x27f, read8_delegate(FUNC(vcs_cart_slot_device::read_bank),(vcs_cart_slot_device*)m_cart), write8_delegate(FUNC(vcs_cart_slot_device::write_bank),(vcs_cart_slot_device*)m_cart));
|
||||
break;
|
||||
case A26_JVP:
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart), write8_delegate(FUNC(vcs_cart_slot_device::write_bank),(vcs_cart_slot_device*)m_cart));
|
||||
// to verify the actual behavior...
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xfa0, 0xfc0, read8_delegate(FUNC(a2600_state::cart_over_riot_r), this), write8_delegate(FUNC(a2600_state::cart_over_riot_w), this));
|
||||
break;
|
||||
case A26_4IN1:
|
||||
case A26_32IN1:
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart));
|
||||
break;
|
||||
case A26_SS:
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart));
|
||||
break;
|
||||
case A26_CM:
|
||||
m_maincpu->space(AS_PROGRAM).install_read_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart));
|
||||
break;
|
||||
case A26_X07:
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart), write8_delegate(FUNC(vcs_cart_slot_device::write_bank),(vcs_cart_slot_device*)m_cart));
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x0000, 0x0fff, read8_delegate(FUNC(a2600_state::cart_over_all_r), this), write8_delegate(FUNC(a2600_state::cart_over_all_w), this));
|
||||
break;
|
||||
case A26_HARMONY:
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x1000, 0x1fff, read8_delegate(FUNC(vcs_cart_slot_device::read_rom),(vcs_cart_slot_device*)m_cart), write8_delegate(FUNC(vcs_cart_slot_device::write_bank),(vcs_cart_slot_device*)m_cart));
|
||||
break;
|
||||
}
|
||||
|
||||
/* Banks may have changed, reset the cpu so it uses the correct reset vector */
|
||||
// Banks may have changed, reset the cpu so it uses the correct reset vector
|
||||
m_maincpu->reset();
|
||||
|
||||
save_item(NAME(m_current_screen_height));
|
||||
}
|
||||
|
||||
|
||||
@ -361,18 +366,21 @@ void a2600_state::machine_start()
|
||||
// try to detect 2600 controller setup. returns 32bits with left/right controller info
|
||||
unsigned a2600_state::long detect_2600controllers()
|
||||
{
|
||||
#define JOYS 0x001
|
||||
#define PADD 0x002
|
||||
#define KEYP 0x004
|
||||
#define LGUN 0x008
|
||||
#define INDY 0x010
|
||||
#define BOOS 0x020
|
||||
#define KVID 0x040
|
||||
#define CMTE 0x080
|
||||
#define MLNK 0x100
|
||||
#define AMSE 0x200
|
||||
#define CX22 0x400
|
||||
#define CX80 0x800
|
||||
enum
|
||||
{
|
||||
JOYS = 0x001,
|
||||
PADD = 0x002,
|
||||
KEYP = 0x004,
|
||||
LGUN = 0x008,
|
||||
INDY = 0x010,
|
||||
BOOS = 0x020,
|
||||
KVID = 0x040,
|
||||
CMTE = 0x080,
|
||||
MLNK = 0x100,
|
||||
AMSE = 0x200,
|
||||
CX22 = 0x400,
|
||||
CX80 = 0x800
|
||||
};
|
||||
|
||||
unsigned int left,right;
|
||||
int i,j,foundkeypad = 0;
|
||||
|
@ -18,36 +18,48 @@ TODO:
|
||||
#include "softlist.h"
|
||||
#include "speaker.h"
|
||||
|
||||
class tvboy_state : public a2600_state
|
||||
class tvboy_state : public a2600_base_state
|
||||
{
|
||||
public:
|
||||
tvboy_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: a2600_state(mconfig, type, tag)
|
||||
: a2600_base_state(mconfig, type, tag)
|
||||
, m_crom(*this, "crom")
|
||||
, m_rom(*this, "mainrom") { }
|
||||
|
||||
DECLARE_WRITE8_MEMBER(bank_write);
|
||||
, m_rom(*this, "mainrom")
|
||||
{ }
|
||||
|
||||
void tvboyii(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(bank_write);
|
||||
|
||||
void rom_map(address_map &map);
|
||||
void tvboy_mem(address_map &map);
|
||||
private:
|
||||
required_device<address_map_bank_device> m_crom;
|
||||
required_region_ptr<uint8_t> m_rom;
|
||||
|
||||
virtual void machine_reset() override;
|
||||
private:
|
||||
required_memory_bank m_crom;
|
||||
required_region_ptr<uint8_t> m_rom;
|
||||
};
|
||||
|
||||
void tvboy_state::machine_reset() {
|
||||
m_crom->set_bank(0);
|
||||
a2600_state::machine_reset();
|
||||
void tvboy_state::machine_start()
|
||||
{
|
||||
a2600_base_state::machine_start();
|
||||
m_crom->configure_entries(0, m_rom.bytes() / 0x1000, &m_rom[0], 0x1000);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(tvboy_state::bank_write) {
|
||||
void tvboy_state::machine_reset()
|
||||
{
|
||||
m_crom->set_entry(0);
|
||||
a2600_base_state::machine_reset();
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(tvboy_state::bank_write)
|
||||
{
|
||||
logerror("banking (?) write %04x, %02x\n", offset, data);
|
||||
if ((offset & 0xFF00) == 0x0800)
|
||||
m_crom->set_bank(data);
|
||||
if ((offset & 0xff00) == 0x0800)
|
||||
m_crom->set_entry(data);
|
||||
}
|
||||
|
||||
ADDRESS_MAP_START(tvboy_state::tvboy_mem) // 6507 has 13-bit address space, 0x0000 - 0x1fff
|
||||
@ -59,11 +71,7 @@ ADDRESS_MAP_START(tvboy_state::tvboy_mem) // 6507 has 13-bit address space, 0x00
|
||||
AM_RANGE(0x0280, 0x029f) AM_MIRROR(0x0d00) AM_DEVREADWRITE("riot", riot6532_device, read, write)
|
||||
#endif
|
||||
AM_RANGE(0x1000, 0x1fff) AM_WRITE(bank_write)
|
||||
AM_RANGE(0x1000, 0x1fff) AM_DEVICE("crom", address_map_bank_device, amap8)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
ADDRESS_MAP_START(tvboy_state::rom_map)
|
||||
AM_RANGE(0x00000, 0x7ffff) AM_ROM AM_REGION("mainrom", 0)
|
||||
AM_RANGE(0x1000, 0x1fff) AM_ROMBANK("crom")
|
||||
ADDRESS_MAP_END
|
||||
|
||||
#define MASTER_CLOCK_PAL 3546894
|
||||
@ -74,13 +82,6 @@ MACHINE_CONFIG_START(tvboy_state::tvboyii)
|
||||
MCFG_CPU_PROGRAM_MAP(tvboy_mem)
|
||||
MCFG_M6502_DISABLE_DIRECT()
|
||||
|
||||
MCFG_DEVICE_ADD("crom", ADDRESS_MAP_BANK, 0)
|
||||
MCFG_DEVICE_PROGRAM_MAP(rom_map)
|
||||
MCFG_ADDRESS_MAP_BANK_ENDIANNESS(ENDIANNESS_LITTLE)
|
||||
MCFG_ADDRESS_MAP_BANK_DATA_WIDTH(8)
|
||||
MCFG_ADDRESS_MAP_BANK_ADDR_WIDTH(19)
|
||||
MCFG_ADDRESS_MAP_BANK_STRIDE(0x1000)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_DEVICE_ADD("tia_video", TIA_PAL_VIDEO, 0)
|
||||
MCFG_TIA_READ_INPUT_PORT_CB(READ16(tvboy_state, a2600_read_input_port))
|
||||
|
@ -36,27 +36,23 @@
|
||||
#define CONTROL2_TAG "joyport2"
|
||||
|
||||
|
||||
class a2600_state : public driver_device
|
||||
class a2600_base_state : public driver_device
|
||||
{
|
||||
public:
|
||||
a2600_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag),
|
||||
protected:
|
||||
a2600_base_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_riot_ram(*this, "riot_ram"),
|
||||
m_joy1(*this, CONTROL1_TAG),
|
||||
m_joy2(*this, CONTROL2_TAG),
|
||||
m_cart(*this, "cartslot"),
|
||||
m_tia(*this, "tia_video"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_riot(*this, "riot"),
|
||||
m_joy1(*this, CONTROL1_TAG),
|
||||
m_joy2(*this, CONTROL2_TAG),
|
||||
m_screen(*this, "screen"),
|
||||
m_swb(*this, "SWB"),
|
||||
m_riot(*this, "riot")
|
||||
m_swb(*this, "SWB")
|
||||
{ }
|
||||
|
||||
void a2600(machine_config &config);
|
||||
void a2600p(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(switch_A_w);
|
||||
DECLARE_READ8_MEMBER(switch_A_r);
|
||||
DECLARE_WRITE8_MEMBER(switch_B_w);
|
||||
@ -66,6 +62,43 @@ protected:
|
||||
DECLARE_READ8_MEMBER(a2600_get_databus_contents);
|
||||
DECLARE_WRITE16_MEMBER(a2600_tia_vsync_callback);
|
||||
DECLARE_WRITE16_MEMBER(a2600_tia_vsync_callback_pal);
|
||||
|
||||
void a2600_mem(address_map &map);
|
||||
|
||||
required_shared_ptr<uint8_t> m_riot_ram;
|
||||
required_device<tia_video_device> m_tia;
|
||||
required_device<m6507_device> m_maincpu;
|
||||
#if USE_NEW_RIOT
|
||||
required_device<mos6532_t> m_riot;
|
||||
#else
|
||||
required_device<riot6532_device> m_riot;
|
||||
#endif
|
||||
|
||||
private:
|
||||
uint16_t m_current_screen_height;
|
||||
|
||||
required_device<vcs_control_port_device> m_joy1;
|
||||
required_device<vcs_control_port_device> m_joy2;
|
||||
|
||||
required_device<screen_device> m_screen;
|
||||
required_ioport m_swb;
|
||||
};
|
||||
|
||||
|
||||
class a2600_state : public a2600_base_state
|
||||
{
|
||||
public:
|
||||
a2600_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||
a2600_base_state(mconfig, type, tag),
|
||||
m_cart(*this, "cartslot")
|
||||
{ }
|
||||
|
||||
void a2600(machine_config &config);
|
||||
void a2600p(machine_config &config);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
|
||||
DECLARE_WRITE8_MEMBER(cart_over_tia_w);
|
||||
// investigate how the carts mapped here (Mapper JVP) interact with the RIOT device
|
||||
DECLARE_READ8_MEMBER(cart_over_riot_r);
|
||||
@ -74,26 +107,9 @@ protected:
|
||||
DECLARE_WRITE8_MEMBER(cart_over_all_w);
|
||||
|
||||
void a2600_cartslot(machine_config &config);
|
||||
void a2600_mem(address_map &map);
|
||||
|
||||
private:
|
||||
required_shared_ptr<uint8_t> m_riot_ram;
|
||||
uint16_t m_current_screen_height;
|
||||
|
||||
required_device<vcs_control_port_device> m_joy1;
|
||||
required_device<vcs_control_port_device> m_joy2;
|
||||
optional_device<vcs_cart_slot_device> m_cart;
|
||||
required_device<tia_video_device> m_tia;
|
||||
|
||||
required_device<m6507_device> m_maincpu;
|
||||
required_device<screen_device> m_screen;
|
||||
required_ioport m_swb;
|
||||
#if USE_NEW_RIOT
|
||||
required_device<mos6532_t> m_riot;
|
||||
#else
|
||||
required_device<riot6532_device> m_riot;
|
||||
#endif
|
||||
required_device<vcs_cart_slot_device> m_cart;
|
||||
};
|
||||
|
||||
|
||||
#endif // MAME_INCLUDES_A2600_H
|
||||
|
Loading…
Reference in New Issue
Block a user