mirror of
https://github.com/holub/mame
synced 2025-04-25 09:50:04 +03:00
(MESS) atari400.c: Started cleaning things a bit (nw)
This commit is contained in:
parent
ec43bbcb96
commit
85bcb9e589
@ -251,18 +251,36 @@ class a400_state : public driver_device
|
||||
public:
|
||||
a400_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
, m_maincpu(*this, "maincpu")
|
||||
, m_ram(*this, RAM_TAG)
|
||||
, m_pia(*this, "pia")
|
||||
, m_a800_cart_loaded(0)
|
||||
, m_atari(0)
|
||||
, m_a800_cart_type(A800_UNKNOWN)
|
||||
, m_xegs_banks(0)
|
||||
, m_xegs_cart(0)
|
||||
{ }
|
||||
|
||||
DECLARE_DRIVER_INIT(xegs);
|
||||
DECLARE_DRIVER_INIT(a800xl);
|
||||
DECLARE_DRIVER_INIT(a600xl);
|
||||
DECLARE_MACHINE_START(xegs);
|
||||
DECLARE_MACHINE_START(a400);
|
||||
DECLARE_MACHINE_START(a800);
|
||||
DECLARE_MACHINE_START(a800xl);
|
||||
DECLARE_MACHINE_START(a5200);
|
||||
virtual void palette_init();
|
||||
DECLARE_WRITE8_MEMBER(a1200xl_pia_pb_w);
|
||||
DECLARE_WRITE8_MEMBER(a800xl_pia_pb_w);
|
||||
DECLARE_WRITE8_MEMBER(xegs_pia_pb_w);
|
||||
DECLARE_WRITE8_MEMBER(x32_bank_w);
|
||||
DECLARE_WRITE8_MEMBER(w64_bank_w);
|
||||
DECLARE_WRITE8_MEMBER(ex64_bank_w);
|
||||
DECLARE_WRITE8_MEMBER(bbsb_bankl_w);
|
||||
DECLARE_WRITE8_MEMBER(bbsb_bankh_w);
|
||||
DECLARE_WRITE8_MEMBER(oss_034m_w);
|
||||
DECLARE_WRITE8_MEMBER(oss_m091_w);
|
||||
DECLARE_WRITE8_MEMBER(xegs_bankswitch);
|
||||
|
||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( a800_cart );
|
||||
DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( a800_cart );
|
||||
@ -280,12 +298,21 @@ public:
|
||||
void ms_atari800xl_machine_start(int type, int has_cart);
|
||||
|
||||
protected:
|
||||
required_device<cpu_device> m_maincpu;
|
||||
required_device<ram_device> m_ram;
|
||||
required_device<pia6821_device> m_pia;
|
||||
|
||||
int m_a800_cart_loaded;
|
||||
int m_atari;
|
||||
int m_a800_cart_type;
|
||||
UINT8 m_xegs_banks;
|
||||
UINT8 m_xegs_cart;
|
||||
|
||||
void a800_setbank(int cart_mounted);
|
||||
|
||||
void a800xl_mmu(UINT8 new_mmu);
|
||||
void a1200xl_mmu(UINT8 new_mmu);
|
||||
void xegs_mmu(UINT8 new_mmu);
|
||||
void a800_setup_mappers(int type);
|
||||
};
|
||||
|
||||
/**************************************************************
|
||||
@ -795,155 +822,155 @@ void a400_state::palette_init()
|
||||
*
|
||||
**************************************************************/
|
||||
|
||||
static void a800xl_mmu(running_machine &machine, UINT8 new_mmu)
|
||||
void a400_state::a800xl_mmu(UINT8 new_mmu)
|
||||
{
|
||||
UINT8 *base = machine.root_device().memregion("maincpu")->base();
|
||||
UINT8 *base = memregion("maincpu")->base();
|
||||
UINT8 *base1, *base2, *base3, *base4;
|
||||
|
||||
/* check if memory C000-FFFF changed */
|
||||
if( new_mmu & 0x01 )
|
||||
{
|
||||
logerror("%s MMU BIOS ROM\n", machine.system().name);
|
||||
logerror("%s MMU BIOS ROM\n", machine().system().name);
|
||||
base3 = base + 0x14000; /* 8K lo BIOS */
|
||||
base4 = base + 0x15800; /* 4K FP ROM + 8K hi BIOS */
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xc000, 0xcfff, "bank3");
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xc000, 0xcfff);
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xd800, 0xffff, "bank4");
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xd800, 0xffff);
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0xc000, 0xcfff, "bank3");
|
||||
m_maincpu->space(AS_PROGRAM).unmap_write(0xc000, 0xcfff);
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0xd800, 0xffff, "bank4");
|
||||
m_maincpu->space(AS_PROGRAM).unmap_write(0xd800, 0xffff);
|
||||
}
|
||||
else
|
||||
{
|
||||
logerror("%s MMU BIOS RAM\n", machine.system().name);
|
||||
logerror("%s MMU BIOS RAM\n", machine().system().name);
|
||||
base3 = base + 0x0c000; /* 8K RAM */
|
||||
base4 = base + 0x0d800; /* 4K RAM + 8K RAM */
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0xc000, 0xcfff, "bank3");
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0xd800, 0xffff, "bank4");
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0xc000, 0xcfff, "bank3");
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0xd800, 0xffff, "bank4");
|
||||
}
|
||||
machine.root_device().membank("bank3")->set_base(base3);
|
||||
machine.root_device().membank("bank4")->set_base(base4);
|
||||
membank("bank3")->set_base(base3);
|
||||
membank("bank4")->set_base(base4);
|
||||
|
||||
/* check if BASIC changed */
|
||||
if( new_mmu & 0x02 )
|
||||
{
|
||||
logerror("%s MMU BASIC RAM\n", machine.system().name);
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0xa000, 0xbfff, "bank1");
|
||||
logerror("%s MMU BASIC RAM\n", machine().system().name);
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0xa000, 0xbfff, "bank1");
|
||||
base1 = base + 0x0a000; /* 8K RAM */
|
||||
}
|
||||
else
|
||||
{
|
||||
logerror("%s MMU BASIC ROM\n", machine.system().name);
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xa000, 0xbfff, "bank1");
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).nop_write(0xa000, 0xbfff);
|
||||
logerror("%s MMU BASIC ROM\n", machine().system().name);
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0xa000, 0xbfff, "bank1");
|
||||
m_maincpu->space(AS_PROGRAM).nop_write(0xa000, 0xbfff);
|
||||
base1 = base + 0x10000; /* 8K BASIC */
|
||||
}
|
||||
|
||||
machine.root_device().membank("bank1")->set_base(base1);
|
||||
membank("bank1")->set_base(base1);
|
||||
|
||||
/* check if self-test ROM changed */
|
||||
if( new_mmu & 0x80 )
|
||||
{
|
||||
logerror("%s MMU SELFTEST RAM\n", machine.system().name);
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0x5000, 0x57ff, "bank2");
|
||||
logerror("%s MMU SELFTEST RAM\n", machine().system().name);
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x5000, 0x57ff, "bank2");
|
||||
base2 = base + 0x05000; /* 0x0800 bytes */
|
||||
}
|
||||
else
|
||||
{
|
||||
logerror("%s MMU SELFTEST ROM\n", machine.system().name);
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x5000, 0x57ff, "bank2");
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).nop_write(0x5000, 0x57ff);
|
||||
logerror("%s MMU SELFTEST ROM\n", machine().system().name);
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0x5000, 0x57ff, "bank2");
|
||||
m_maincpu->space(AS_PROGRAM).nop_write(0x5000, 0x57ff);
|
||||
base2 = base + 0x15000; /* 0x0800 bytes */
|
||||
}
|
||||
machine.root_device().membank("bank2")->set_base(base2);
|
||||
membank("bank2")->set_base(base2);
|
||||
}
|
||||
|
||||
/* BASIC was available in a separate cart, so we don't test it */
|
||||
static void a1200xl_mmu(running_machine &machine, UINT8 new_mmu)
|
||||
void a400_state::a1200xl_mmu(UINT8 new_mmu)
|
||||
{
|
||||
UINT8 *base = machine.root_device().memregion("maincpu")->base();
|
||||
UINT8 *base = memregion("maincpu")->base();
|
||||
UINT8 *base2, *base3, *base4;
|
||||
|
||||
/* check if memory C000-FFFF changed */
|
||||
if( new_mmu & 0x01 )
|
||||
{
|
||||
logerror("%s MMU BIOS ROM\n", machine.system().name);
|
||||
logerror("%s MMU BIOS ROM\n", machine().system().name);
|
||||
base3 = base + 0x14000; /* 8K lo BIOS */
|
||||
base4 = base + 0x15800; /* 4K FP ROM + 8K hi BIOS */
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xc000, 0xcfff, "bank3");
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xc000, 0xcfff);
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xd800, 0xffff, "bank4");
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xd800, 0xffff);
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0xc000, 0xcfff, "bank3");
|
||||
m_maincpu->space(AS_PROGRAM).unmap_write(0xc000, 0xcfff);
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0xd800, 0xffff, "bank4");
|
||||
m_maincpu->space(AS_PROGRAM).unmap_write(0xd800, 0xffff);
|
||||
}
|
||||
else
|
||||
{
|
||||
logerror("%s MMU BIOS RAM\n", machine.system().name);
|
||||
logerror("%s MMU BIOS RAM\n", machine().system().name);
|
||||
base3 = base + 0x0c000; /* 8K RAM */
|
||||
base4 = base + 0x0d800; /* 4K RAM + 8K RAM */
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0xc000, 0xcfff, "bank3");
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0xd800, 0xffff, "bank4");
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0xc000, 0xcfff, "bank3");
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0xd800, 0xffff, "bank4");
|
||||
}
|
||||
machine.root_device().membank("bank3")->set_base(base3);
|
||||
machine.root_device().membank("bank4")->set_base(base4);
|
||||
membank("bank3")->set_base(base3);
|
||||
membank("bank4")->set_base(base4);
|
||||
|
||||
/* check if self-test ROM changed */
|
||||
if( new_mmu & 0x80 )
|
||||
{
|
||||
logerror("%s MMU SELFTEST RAM\n", machine.system().name);
|
||||
logerror("%s MMU SELFTEST RAM\n", machine().system().name);
|
||||
base2 = base + 0x05000; /* 0x0800 bytes */
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0x5000, 0x57ff, "bank2");
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x5000, 0x57ff, "bank2");
|
||||
}
|
||||
else
|
||||
{
|
||||
logerror("%s MMU SELFTEST ROM\n", machine.system().name);
|
||||
logerror("%s MMU SELFTEST ROM\n", machine().system().name);
|
||||
base2 = base + 0x15000; /* 0x0800 bytes */
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x5000, 0x57ff, "bank2");
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x5000, 0x57ff);
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0x5000, 0x57ff, "bank2");
|
||||
m_maincpu->space(AS_PROGRAM).unmap_write(0x5000, 0x57ff);
|
||||
}
|
||||
machine.root_device().membank("bank2")->set_base(base2);
|
||||
membank("bank2")->set_base(base2);
|
||||
}
|
||||
|
||||
static void xegs_mmu(running_machine &machine, UINT8 new_mmu)
|
||||
void a400_state::xegs_mmu(UINT8 new_mmu)
|
||||
{
|
||||
UINT8 *base = machine.root_device().memregion("maincpu")->base();
|
||||
UINT8 *base = memregion("maincpu")->base();
|
||||
UINT8 *base2, *base3, *base4;
|
||||
|
||||
/* check if memory C000-FFFF changed */
|
||||
if( new_mmu & 0x01 )
|
||||
{
|
||||
logerror("%s MMU BIOS ROM\n", machine.system().name);
|
||||
logerror("%s MMU BIOS ROM\n", machine().system().name);
|
||||
base3 = base + 0x14000; /* 8K lo BIOS */
|
||||
base4 = base + 0x15800; /* 4K FP ROM + 8K hi BIOS */
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xc000, 0xcfff, "bank3");
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xc000, 0xcfff);
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xd800, 0xffff, "bank4");
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xd800, 0xffff);
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0xc000, 0xcfff, "bank3");
|
||||
m_maincpu->space(AS_PROGRAM).unmap_write(0xc000, 0xcfff);
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0xd800, 0xffff, "bank4");
|
||||
m_maincpu->space(AS_PROGRAM).unmap_write(0xd800, 0xffff);
|
||||
}
|
||||
else
|
||||
{
|
||||
logerror("%s MMU BIOS RAM\n", machine.system().name);
|
||||
logerror("%s MMU BIOS RAM\n", machine().system().name);
|
||||
base3 = base + 0x0c000; /* 8K RAM */
|
||||
base4 = base + 0x0d800; /* 4K RAM + 8K RAM */
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0xc000, 0xcfff, "bank3");
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0xd800, 0xffff, "bank4");
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0xc000, 0xcfff, "bank3");
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0xd800, 0xffff, "bank4");
|
||||
}
|
||||
machine.root_device().membank("bank3")->set_base(base3);
|
||||
machine.root_device().membank("bank4")->set_base(base4);
|
||||
membank("bank3")->set_base(base3);
|
||||
membank("bank4")->set_base(base4);
|
||||
|
||||
|
||||
/* check if self-test ROM changed */
|
||||
if( new_mmu & 0x80 )
|
||||
{
|
||||
logerror("%s MMU SELFTEST RAM\n", machine.system().name);
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0x5000, 0x57ff, "bank2");
|
||||
logerror("%s MMU SELFTEST RAM\n", machine().system().name);
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x5000, 0x57ff, "bank2");
|
||||
base2 = base + 0x05000; /* 0x0800 bytes */
|
||||
}
|
||||
else
|
||||
{
|
||||
logerror("%s MMU SELFTEST ROM\n", machine.system().name);
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x5000, 0x57ff, "bank2");
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).nop_write(0x5000, 0x57ff);
|
||||
logerror("%s MMU SELFTEST ROM\n", machine().system().name);
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0x5000, 0x57ff, "bank2");
|
||||
m_maincpu->space(AS_PROGRAM).nop_write(0x5000, 0x57ff);
|
||||
base2 = base + 0x15000; /* 0x0800 bytes */
|
||||
}
|
||||
machine.root_device().membank("bank2")->set_base(base2);
|
||||
membank("bank2")->set_base(base2);
|
||||
}
|
||||
|
||||
|
||||
@ -952,25 +979,25 @@ void a400_state::a800_setbank(int cart_mounted)
|
||||
{
|
||||
offs_t ram_top;
|
||||
// take care of 0x0000-0x7fff: RAM or NOP
|
||||
ram_top = MIN(machine().device<ram_device>(RAM_TAG)->size(), 0x8000) - 1;
|
||||
machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0x0000, ram_top, "0000");
|
||||
machine().root_device().membank("0000")->set_base(machine().device<ram_device>(RAM_TAG)->pointer());
|
||||
ram_top = MIN(m_ram->size(), 0x8000) - 1;
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x0000, ram_top, "0000");
|
||||
membank("0000")->set_base(m_ram->pointer());
|
||||
|
||||
// take care of 0x8000-0x9fff: A800 -> either right slot or RAM or NOP, others -> RAM or NOP
|
||||
// is there anything in the right slot?
|
||||
if (cart_mounted & RIGHT_CARTSLOT_MOUNTED)
|
||||
{
|
||||
machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x8000, 0x9fff, "8000");
|
||||
machine().root_device().membank("8000")->set_base(machine().root_device().memregion("rslot")->base());
|
||||
machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0x9fff);
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0x9fff, "8000");
|
||||
membank("8000")->set_base(memregion("rslot")->base());
|
||||
m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0x9fff);
|
||||
}
|
||||
else if (m_a800_cart_type != BBSB)
|
||||
{
|
||||
ram_top = MIN(machine().device<ram_device>(RAM_TAG)->size(), 0xa000) - 1;
|
||||
ram_top = MIN(m_ram->size(), 0xa000) - 1;
|
||||
if (ram_top > 0x8000)
|
||||
{
|
||||
machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0x8000, ram_top, "8000");
|
||||
machine().root_device().membank("8000")->set_base(machine().device<ram_device>(RAM_TAG)->pointer() + 0x8000);
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_bank(0x8000, ram_top, "8000");
|
||||
membank("8000")->set_base(m_ram->pointer() + 0x8000);
|
||||
}
|
||||
}
|
||||
|
||||
@ -982,59 +1009,59 @@ void a400_state::a800_setbank(int cart_mounted)
|
||||
{
|
||||
if (m_a800_cart_type == A800_16K)
|
||||
{
|
||||
machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x8000, 0x9fff, "8000");
|
||||
machine().root_device().membank("8000")->set_base(machine().root_device().memregion("lslot")->base());
|
||||
machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0x9fff);
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0x9fff, "8000");
|
||||
membank("8000")->set_base(memregion("lslot")->base());
|
||||
m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0x9fff);
|
||||
|
||||
memcpy(machine().root_device().memregion("maincpu")->base() + 0x10000, machine().root_device().memregion("lslot")->base() + 0x2000, 0x2000);
|
||||
memcpy(memregion("maincpu")->base() + 0x10000, memregion("lslot")->base() + 0x2000, 0x2000);
|
||||
}
|
||||
else if (m_a800_cart_type == A800_8K)
|
||||
memcpy(machine().root_device().memregion("maincpu")->base() + 0x10000, machine().root_device().memregion("lslot")->base(), 0x2000);
|
||||
memcpy(memregion("maincpu")->base() + 0x10000, memregion("lslot")->base(), 0x2000);
|
||||
else
|
||||
fatalerror("This type of cart is not supported yet in this driver. Please use a400 or a800.\n");
|
||||
}
|
||||
else if (m_a800_cart_type == A800_16K)
|
||||
{
|
||||
machine().root_device().membank("8000")->set_base(machine().root_device().memregion("lslot")->base());
|
||||
machine().root_device().membank("a000")->set_base(machine().root_device().memregion("lslot")->base() + 0x2000);
|
||||
machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0xbfff);
|
||||
membank("8000")->set_base(memregion("lslot")->base());
|
||||
membank("a000")->set_base(memregion("lslot")->base() + 0x2000);
|
||||
m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0xbfff);
|
||||
}
|
||||
else if (m_a800_cart_type == BBSB)
|
||||
{
|
||||
// this requires separate banking in 0x8000 & 0x9000!
|
||||
machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x8000, 0x8fff, "8000");
|
||||
machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x9000, 0x9fff, "9000");
|
||||
machine().root_device().membank("8000")->set_base(machine().root_device().memregion("lslot")->base() + 0x0000);
|
||||
machine().root_device().membank("9000")->set_base(machine().root_device().memregion("lslot")->base() + 0x4000);
|
||||
machine().root_device().membank("a000")->set_base(machine().root_device().memregion("lslot")->base() + 0x8000);
|
||||
machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0x8000, 0x8fff, "8000");
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0x9000, 0x9fff, "9000");
|
||||
membank("8000")->set_base(memregion("lslot")->base() + 0x0000);
|
||||
membank("9000")->set_base(memregion("lslot")->base() + 0x4000);
|
||||
membank("a000")->set_base(memregion("lslot")->base() + 0x8000);
|
||||
m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
|
||||
}
|
||||
else if (m_a800_cart_type == OSS_034M)
|
||||
{
|
||||
// this requires separate banking in 0xa000 & 0xb000!
|
||||
machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xa000, 0xafff, "a000");
|
||||
machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xb000, 0xbfff, "b000");
|
||||
machine().root_device().membank("b000")->set_base(machine().root_device().memregion("lslot")->base() + 0x3000);
|
||||
machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0xa000, 0xafff, "a000");
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0xb000, 0xbfff, "b000");
|
||||
membank("b000")->set_base(memregion("lslot")->base() + 0x3000);
|
||||
m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
|
||||
}
|
||||
else if (m_a800_cart_type == OSS_M091)
|
||||
{
|
||||
// this requires separate banking in 0xa000 & 0xb000!
|
||||
machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xa000, 0xafff, "a000");
|
||||
machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xb000, 0xbfff, "b000");
|
||||
machine().root_device().membank("b000")->set_base(machine().root_device().memregion("lslot")->base());
|
||||
machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0xa000, 0xafff, "a000");
|
||||
m_maincpu->space(AS_PROGRAM).install_read_bank(0xb000, 0xbfff, "b000");
|
||||
membank("b000")->set_base(memregion("lslot")->base());
|
||||
m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
|
||||
}
|
||||
else if (m_a800_cart_type == XEGS_32K)
|
||||
{
|
||||
machine().root_device().membank("8000")->set_base(machine().root_device().memregion("lslot")->base());
|
||||
machine().root_device().membank("a000")->set_base(machine().root_device().memregion("lslot")->base() + 0x6000);
|
||||
machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0xbfff);
|
||||
membank("8000")->set_base(memregion("lslot")->base());
|
||||
membank("a000")->set_base(memregion("lslot")->base() + 0x6000);
|
||||
m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0xbfff);
|
||||
}
|
||||
else
|
||||
{
|
||||
machine().root_device().membank("a000")->set_base(machine().root_device().memregion("lslot")->base());
|
||||
machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
|
||||
membank("a000")->set_base(memregion("lslot")->base());
|
||||
m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1099,147 +1126,144 @@ static int a800_get_pcb_id(const char *pcb)
|
||||
}
|
||||
|
||||
|
||||
static WRITE8_HANDLER( x32_bank_w )
|
||||
WRITE8_MEMBER( a400_state::x32_bank_w )
|
||||
{
|
||||
// printf("written %x\n", data);
|
||||
int bank = data & 0x03;
|
||||
space.machine().root_device().membank("8000")->set_base(space.machine().root_device().memregion("lslot")->base() + bank * 0x2000);
|
||||
membank("8000")->set_base(memregion("lslot")->base() + bank * 0x2000);
|
||||
}
|
||||
|
||||
|
||||
static WRITE8_HANDLER( w64_bank_w )
|
||||
WRITE8_MEMBER( a400_state::w64_bank_w )
|
||||
{
|
||||
// printf("write to %x\n", offset);
|
||||
|
||||
if (offset < 8)
|
||||
space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + offset * 0x2000);
|
||||
membank("a000")->set_base(memregion("lslot")->base() + offset * 0x2000);
|
||||
else
|
||||
space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base());
|
||||
membank("a000")->set_base(memregion("maincpu")->base());
|
||||
// FIXME: writes to 0x8-0xf should disable the cart
|
||||
}
|
||||
|
||||
|
||||
// this covers Express 64, Diamond 64 and SpartaDOS (same bankswitch, but at different addresses)
|
||||
static WRITE8_HANDLER( ex64_bank_w )
|
||||
WRITE8_MEMBER( a400_state::ex64_bank_w )
|
||||
{
|
||||
// printf("write to %x\n", offset);
|
||||
|
||||
if (offset < 8)
|
||||
space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + (7 - offset) * 0x2000);
|
||||
membank("a000")->set_base(memregion("lslot")->base() + (7 - offset) * 0x2000);
|
||||
else
|
||||
space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base());
|
||||
membank("a000")->set_base(memregion("maincpu")->base());
|
||||
// FIXME: writes to 0x8-0xf should disable the cart
|
||||
}
|
||||
|
||||
|
||||
static WRITE8_HANDLER( bbsb_bankl_w )
|
||||
WRITE8_MEMBER( a400_state::bbsb_bankl_w )
|
||||
{
|
||||
// printf("write to %x\n", 0x8000 + offset);
|
||||
if (offset >= 0xff6 && offset <= 0xff9)
|
||||
space.machine().root_device().membank("8000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x0000 + (offset - 0xff6) * 0x1000);
|
||||
membank("8000")->set_base(memregion("lslot")->base() + 0x0000 + (offset - 0xff6) * 0x1000);
|
||||
}
|
||||
|
||||
|
||||
static WRITE8_HANDLER( bbsb_bankh_w )
|
||||
WRITE8_MEMBER( a400_state::bbsb_bankh_w )
|
||||
{
|
||||
// printf("write to %x\n", 0x9000 + offset);
|
||||
if (offset >= 0xff6 && offset <= 0xff9)
|
||||
space.machine().root_device().membank("9000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x4000 + (offset - 0xff6) * 0x1000);
|
||||
membank("9000")->set_base(memregion("lslot")->base() + 0x4000 + (offset - 0xff6) * 0x1000);
|
||||
}
|
||||
|
||||
|
||||
static WRITE8_HANDLER( oss_034m_w )
|
||||
WRITE8_MEMBER( a400_state::oss_034m_w )
|
||||
{
|
||||
switch (offset & 0x0f)
|
||||
{
|
||||
case 0:
|
||||
case 1:
|
||||
space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base());
|
||||
space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
|
||||
membank("a000")->set_base(memregion("lslot")->base());
|
||||
membank("b000")->set_base(memregion("lslot")->base() + 0x3000);
|
||||
break;
|
||||
case 2:
|
||||
case 6:
|
||||
// docs says this should put 0xff in the 0xa000 bank -> let's point to the end of the cart
|
||||
space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x4000);
|
||||
space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
|
||||
membank("a000")->set_base(memregion("lslot")->base() + 0x4000);
|
||||
membank("b000")->set_base(memregion("lslot")->base() + 0x3000);
|
||||
break;
|
||||
case 3:
|
||||
case 7:
|
||||
space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x1000);
|
||||
space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
|
||||
membank("a000")->set_base(memregion("lslot")->base() + 0x1000);
|
||||
membank("b000")->set_base(memregion("lslot")->base() + 0x3000);
|
||||
break;
|
||||
case 4:
|
||||
case 5:
|
||||
space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x2000);
|
||||
space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
|
||||
membank("a000")->set_base(memregion("lslot")->base() + 0x2000);
|
||||
membank("b000")->set_base(memregion("lslot")->base() + 0x3000);
|
||||
break;
|
||||
default:
|
||||
space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xa000);
|
||||
space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xb000);
|
||||
membank("a000")->set_base(memregion("maincpu")->base() + 0xa000);
|
||||
membank("b000")->set_base(memregion("maincpu")->base() + 0xb000);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static WRITE8_HANDLER( oss_m091_w )
|
||||
WRITE8_MEMBER( a400_state::oss_m091_w )
|
||||
{
|
||||
switch (offset & 0x09)
|
||||
{
|
||||
case 0:
|
||||
space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x1000);
|
||||
space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base());
|
||||
membank("a000")->set_base(memregion("lslot")->base() + 0x1000);
|
||||
membank("b000")->set_base(memregion("lslot")->base());
|
||||
break;
|
||||
case 1:
|
||||
space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
|
||||
space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base());
|
||||
membank("a000")->set_base(memregion("lslot")->base() + 0x3000);
|
||||
membank("b000")->set_base(memregion("lslot")->base());
|
||||
break;
|
||||
case 8:
|
||||
space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xa000);
|
||||
space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xb000);
|
||||
membank("a000")->set_base(memregion("maincpu")->base() + 0xa000);
|
||||
membank("b000")->set_base(memregion("maincpu")->base() + 0xb000);
|
||||
break;
|
||||
case 9:
|
||||
space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x2000);
|
||||
space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base());
|
||||
membank("a000")->set_base(memregion("lslot")->base() + 0x2000);
|
||||
membank("b000")->set_base(memregion("lslot")->base());
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static UINT8 xegs_banks = 0;
|
||||
static UINT8 xegs_cart = 0;
|
||||
|
||||
static WRITE8_HANDLER( xegs_bankswitch )
|
||||
WRITE8_MEMBER( a400_state::xegs_bankswitch )
|
||||
{
|
||||
UINT8 *cart = space.machine().root_device().memregion("user1")->base();
|
||||
data &= xegs_banks - 1;
|
||||
space.machine().root_device().membank("bank0")->set_base(cart + data * 0x2000);
|
||||
UINT8 *cart = memregion("user1")->base();
|
||||
data &= m_xegs_banks - 1;
|
||||
membank("bank0")->set_base(cart + data * 0x2000);
|
||||
}
|
||||
|
||||
MACHINE_START( xegs )
|
||||
MACHINE_START_MEMBER( a400_state, xegs )
|
||||
{
|
||||
address_space &space = machine.device("maincpu")->memory().space(AS_PROGRAM);
|
||||
UINT8 *cart = space.machine().root_device().memregion("user1")->base();
|
||||
UINT8 *cpu = space.machine().root_device().memregion("maincpu")->base();
|
||||
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||
UINT8 *cart = memregion("user1")->base();
|
||||
UINT8 *cpu = memregion("maincpu")->base();
|
||||
|
||||
atari_machine_start(machine);
|
||||
space.install_legacy_write_handler(0xd500, 0xd5ff, FUNC(xegs_bankswitch));
|
||||
atari_machine_start(machine());
|
||||
space.install_write_handler(0xd500, 0xd5ff, write8_delegate(FUNC(a400_state::xegs_bankswitch),this));
|
||||
|
||||
if (xegs_cart)
|
||||
if (m_xegs_cart)
|
||||
{
|
||||
machine.root_device().membank("bank0")->set_base(cart);
|
||||
machine.root_device().membank("bank1")->set_base(cart + (xegs_banks - 1) * 0x2000);
|
||||
membank("bank0")->set_base(cart);
|
||||
membank("bank1")->set_base(cart + (m_xegs_banks - 1) * 0x2000);
|
||||
}
|
||||
else
|
||||
{
|
||||
// point to built-in Missile Command (this does not work well, though... FIXME!!)
|
||||
machine.root_device().membank("bank0")->set_base(cpu + 0x10000);
|
||||
machine.root_device().membank("bank1")->set_base(cpu + 0x10000);
|
||||
membank("bank0")->set_base(cpu + 0x10000);
|
||||
membank("bank1")->set_base(cpu + 0x10000);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// currently this does nothing, but it will eventually install the memory handlers required by the mappers
|
||||
static void a800_setup_mappers(running_machine &machine, int type)
|
||||
void a400_state::a800_setup_mappers(int type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
@ -1252,29 +1276,29 @@ static void a800_setup_mappers(running_machine &machine, int type)
|
||||
case PHOENIX_8K: // as normal 8k cart, but it can be disabled by writing to 0xd500-0xdfff
|
||||
break;
|
||||
case XEGS_32K:
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd5ff, FUNC(x32_bank_w));
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8_delegate(FUNC(a400_state::x32_bank_w),this));
|
||||
break;
|
||||
case OSS_034M:
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd5ff, FUNC(oss_034m_w));
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8_delegate(FUNC(a400_state::oss_034m_w),this));
|
||||
break;
|
||||
case OSS_M091:
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd5ff, FUNC(oss_m091_w));
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8_delegate(FUNC(a400_state::oss_m091_w),this));
|
||||
break;
|
||||
case BBSB:
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x8000, 0x8fff, FUNC(bbsb_bankl_w));
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x9000, 0x9fff, FUNC(bbsb_bankh_w));
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0x8000, 0x8fff, write8_delegate(FUNC(a400_state::bbsb_bankl_w),this));
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0x9000, 0x9fff, write8_delegate(FUNC(a400_state::bbsb_bankh_w),this));
|
||||
break;
|
||||
case WILLIAMS_64K:
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd50f, FUNC(w64_bank_w));
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd50f, write8_delegate(FUNC(a400_state::w64_bank_w),this));
|
||||
break;
|
||||
case DIAMOND_64K:
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd5d0, 0xd5df, FUNC(ex64_bank_w));
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0xd5d0, 0xd5df, write8_delegate(FUNC(a400_state::ex64_bank_w),this));
|
||||
break;
|
||||
case EXPRESS_64:
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd570, 0xd57f, FUNC(ex64_bank_w));
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0xd570, 0xd57f, write8_delegate(FUNC(a400_state::ex64_bank_w),this));
|
||||
break;
|
||||
case SPARTADOS_X:
|
||||
machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd5e0, 0xd5ef, FUNC(ex64_bank_w));
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0xd5e0, 0xd5ef, write8_delegate(FUNC(a400_state::ex64_bank_w),this));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
@ -1406,7 +1430,7 @@ DEVICE_IMAGE_LOAD_MEMBER( a400_state, a800_cart )
|
||||
m_a800_cart_loaded = m_a800_cart_loaded & ~LEFT_CARTSLOT_MOUNTED;
|
||||
m_a800_cart_type = a800_check_cart_type(image);
|
||||
|
||||
a800_setup_mappers(image.device().machine(), m_a800_cart_type);
|
||||
a800_setup_mappers(m_a800_cart_type);
|
||||
|
||||
if (image.software_entry() == NULL)
|
||||
{
|
||||
@ -1417,12 +1441,12 @@ DEVICE_IMAGE_LOAD_MEMBER( a400_state, a800_cart )
|
||||
size -= 0x10;
|
||||
start = 0x10;
|
||||
}
|
||||
image.fread(image.device().machine().root_device().memregion("lslot")->base(), size - start);
|
||||
image.fread(memregion("lslot")->base(), size - start);
|
||||
}
|
||||
else
|
||||
{
|
||||
size = image.get_software_region_length("rom");
|
||||
memcpy(image.device().machine().root_device().memregion("lslot")->base(), image.get_software_region("rom"), size);
|
||||
memcpy(memregion("lslot")->base(), image.get_software_region("rom"), size);
|
||||
}
|
||||
|
||||
m_a800_cart_loaded |= (size > 0x0000) ? 1 : 0;
|
||||
@ -1439,7 +1463,7 @@ DEVICE_IMAGE_LOAD_MEMBER( a400_state, a800_cart_right )
|
||||
m_a800_cart_loaded = m_a800_cart_loaded & ~RIGHT_CARTSLOT_MOUNTED;
|
||||
m_a800_cart_type = a800_check_cart_type(image);
|
||||
|
||||
a800_setup_mappers(image.device().machine(), m_a800_cart_type);
|
||||
a800_setup_mappers(m_a800_cart_type);
|
||||
|
||||
if (image.software_entry() == NULL)
|
||||
{
|
||||
@ -1450,17 +1474,17 @@ DEVICE_IMAGE_LOAD_MEMBER( a400_state, a800_cart_right )
|
||||
size -= 0x10;
|
||||
start = 0x10;
|
||||
}
|
||||
image.fread(image.device().machine().root_device().memregion("rslot")->base(), size - start);
|
||||
image.fread(memregion("rslot")->base(), size - start);
|
||||
}
|
||||
else
|
||||
{
|
||||
size = image.get_software_region_length("rom");
|
||||
memcpy(image.device().machine().root_device().memregion("rslot")->base(), image.get_software_region("rom"), size);
|
||||
memcpy(memregion("rslot")->base(), image.get_software_region("rom"), size);
|
||||
}
|
||||
|
||||
m_a800_cart_loaded |= (size > 0x0000) ? 2 : 0;
|
||||
|
||||
logerror("%s loaded right cartridge '%s' size 8K\n", image.device().machine().system().name, image.filename());
|
||||
logerror("%s loaded right cartridge '%s' size 8K\n", machine().system().name, image.filename());
|
||||
return IMAGE_INIT_PASS;
|
||||
}
|
||||
|
||||
@ -1483,7 +1507,7 @@ DEVICE_IMAGE_UNLOAD_MEMBER( a400_state, a800_cart_right )
|
||||
|
||||
DEVICE_IMAGE_LOAD_MEMBER( a400_state, a5200_cart )
|
||||
{
|
||||
UINT8 *mem = image.device().machine().root_device().memregion("maincpu")->base();
|
||||
UINT8 *mem = memregion("maincpu")->base();
|
||||
UINT32 size;
|
||||
bool A13_mirr = FALSE;
|
||||
|
||||
@ -1524,7 +1548,7 @@ DEVICE_IMAGE_LOAD_MEMBER( a400_state, a5200_cart )
|
||||
|
||||
DEVICE_IMAGE_UNLOAD_MEMBER( a400_state, a5200_cart )
|
||||
{
|
||||
UINT8 *mem = image.device().machine().root_device().memregion("maincpu")->base();
|
||||
UINT8 *mem = memregion("maincpu")->base();
|
||||
/* zap the cartridge memory (again) */
|
||||
memset(&mem[0x4000], 0x00, 0x8000);
|
||||
}
|
||||
@ -1533,7 +1557,7 @@ DEVICE_IMAGE_UNLOAD_MEMBER( a400_state, a5200_cart )
|
||||
DEVICE_IMAGE_LOAD_MEMBER( a400_state, xegs_cart )
|
||||
{
|
||||
UINT32 size;
|
||||
UINT8 *ptr = image.device().machine().root_device().memregion("user1")->base();
|
||||
UINT8 *ptr = memregion("user1")->base();
|
||||
|
||||
if (image.software_entry() == NULL)
|
||||
{
|
||||
@ -1549,8 +1573,8 @@ DEVICE_IMAGE_LOAD_MEMBER( a400_state, xegs_cart )
|
||||
memcpy(ptr, image.get_software_region("rom"), size);
|
||||
}
|
||||
|
||||
xegs_banks = size / 0x2000;
|
||||
xegs_cart = 1;
|
||||
m_xegs_banks = size / 0x2000;
|
||||
m_xegs_cart = 1;
|
||||
|
||||
return IMAGE_INIT_PASS;
|
||||
}
|
||||
@ -1558,40 +1582,36 @@ DEVICE_IMAGE_LOAD_MEMBER( a400_state, xegs_cart )
|
||||
|
||||
DEVICE_IMAGE_UNLOAD_MEMBER( a400_state, xegs_cart )
|
||||
{
|
||||
xegs_cart = 0;
|
||||
xegs_banks = 0;
|
||||
m_xegs_cart = 0;
|
||||
m_xegs_banks = 0;
|
||||
}
|
||||
|
||||
|
||||
MACHINE_START( a400 )
|
||||
MACHINE_START_MEMBER( a400_state, a400 )
|
||||
{
|
||||
a400_state *state = machine.driver_data<a400_state>();
|
||||
atari_machine_start(machine);
|
||||
state->ms_atari_machine_start(ATARI_400, TRUE);
|
||||
atari_machine_start(machine());
|
||||
ms_atari_machine_start(ATARI_400, TRUE);
|
||||
}
|
||||
|
||||
|
||||
MACHINE_START( a800 )
|
||||
MACHINE_START_MEMBER( a400_state, a800 )
|
||||
{
|
||||
a400_state *state = machine.driver_data<a400_state>();
|
||||
atari_machine_start(machine);
|
||||
state->ms_atari_machine_start(ATARI_800, TRUE);
|
||||
atari_machine_start(machine());
|
||||
ms_atari_machine_start(ATARI_800, TRUE);
|
||||
}
|
||||
|
||||
|
||||
MACHINE_START( a800xl )
|
||||
MACHINE_START_MEMBER( a400_state, a800xl )
|
||||
{
|
||||
a400_state *state = machine.driver_data<a400_state>();
|
||||
atari_machine_start(machine);
|
||||
state->ms_atari800xl_machine_start(ATARI_800XL, TRUE);
|
||||
atari_machine_start(machine());
|
||||
ms_atari800xl_machine_start(ATARI_800XL, TRUE);
|
||||
}
|
||||
|
||||
|
||||
MACHINE_START( a5200 )
|
||||
MACHINE_START_MEMBER( a400_state, a5200 )
|
||||
{
|
||||
a400_state *state = machine.driver_data<a400_state>();
|
||||
atari_machine_start(machine);
|
||||
state->ms_atari_machine_start(ATARI_800XL, TRUE);
|
||||
atari_machine_start(machine());
|
||||
ms_atari_machine_start(ATARI_800XL, TRUE);
|
||||
}
|
||||
|
||||
|
||||
@ -1602,19 +1622,17 @@ MACHINE_START( a5200 )
|
||||
*
|
||||
**************************************************************/
|
||||
|
||||
WRITE8_MEMBER(a400_state::a1200xl_pia_pb_w){ device_t *device = machine().device("pia"); a1200xl_mmu(device->machine(), data); }
|
||||
WRITE8_MEMBER(a400_state::a1200xl_pia_pb_w){ a1200xl_mmu(data); }
|
||||
WRITE8_MEMBER(a400_state::a800xl_pia_pb_w)
|
||||
{
|
||||
device_t *device = machine().device("pia");
|
||||
if (downcast<pia6821_device *>(device)->port_b_z_mask() != 0xff)
|
||||
a800xl_mmu(machine(), data);
|
||||
if (m_pia->port_b_z_mask() != 0xff)
|
||||
a800xl_mmu(data);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(a400_state::xegs_pia_pb_w)
|
||||
{
|
||||
device_t *device = machine().device("pia");
|
||||
if (downcast<pia6821_device *>(device)->port_b_z_mask() != 0xff)
|
||||
xegs_mmu(machine(), data);
|
||||
if (m_pia->port_b_z_mask() != 0xff)
|
||||
xegs_mmu(data);
|
||||
}
|
||||
|
||||
static const pokey_interface atari_pokey_interface =
|
||||
@ -1825,7 +1843,7 @@ static MACHINE_CONFIG_DERIVED( a400, atari_common )
|
||||
MCFG_CPU_PROGRAM_MAP(a400_mem)
|
||||
MCFG_TIMER_ADD_SCANLINE("scantimer", a400_interrupt, "screen", 0, 1)
|
||||
|
||||
MCFG_MACHINE_START( a400 )
|
||||
MCFG_MACHINE_START_OVERRIDE( a400_state, a400 )
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_REFRESH_RATE(FRAME_RATE_60HZ)
|
||||
@ -1844,7 +1862,7 @@ static MACHINE_CONFIG_DERIVED( a400pal, atari_common )
|
||||
MCFG_CPU_PROGRAM_MAP(a400_mem)
|
||||
MCFG_TIMER_ADD_SCANLINE("scantimer", a400_interrupt, "screen", 0, 1)
|
||||
|
||||
MCFG_MACHINE_START( a400 )
|
||||
MCFG_MACHINE_START_OVERRIDE( a400_state, a400 )
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_REFRESH_RATE(FRAME_RATE_50HZ)
|
||||
@ -1863,7 +1881,7 @@ static MACHINE_CONFIG_DERIVED( a800, atari_common )
|
||||
MCFG_CPU_PROGRAM_MAP(a800_mem)
|
||||
MCFG_TIMER_ADD_SCANLINE("scantimer", a800_interrupt, "screen", 0, 1)
|
||||
|
||||
MCFG_MACHINE_START( a800 )
|
||||
MCFG_MACHINE_START_OVERRIDE( a400_state, a800 )
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_REFRESH_RATE(FRAME_RATE_60HZ)
|
||||
@ -1882,7 +1900,7 @@ static MACHINE_CONFIG_DERIVED( a800pal, atari_common )
|
||||
MCFG_CPU_PROGRAM_MAP(a800_mem)
|
||||
MCFG_TIMER_ADD_SCANLINE("scantimer", a800_interrupt, "screen", 0, 1)
|
||||
|
||||
MCFG_MACHINE_START( a800 )
|
||||
MCFG_MACHINE_START_OVERRIDE( a400_state, a800 )
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_REFRESH_RATE(FRAME_RATE_50HZ)
|
||||
@ -1903,7 +1921,7 @@ static MACHINE_CONFIG_DERIVED( a600xl, atari_common )
|
||||
|
||||
MCFG_PIA6821_MODIFY( "pia", a600xl_pia_interface )
|
||||
|
||||
MCFG_MACHINE_START( a800xl ) // FIXME?
|
||||
MCFG_MACHINE_START_OVERRIDE( a400_state, a800xl ) // FIXME?
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_REFRESH_RATE(FRAME_RATE_60HZ)
|
||||
@ -1928,7 +1946,7 @@ static MACHINE_CONFIG_DERIVED( a800xl, atari_common )
|
||||
|
||||
MCFG_PIA6821_MODIFY( "pia", a800xl_pia_interface )
|
||||
|
||||
MCFG_MACHINE_START( a800xl )
|
||||
MCFG_MACHINE_START_OVERRIDE( a400_state, a800xl )
|
||||
|
||||
MCFG_SCREEN_MODIFY("screen")
|
||||
MCFG_SCREEN_REFRESH_RATE(FRAME_RATE_60HZ)
|
||||
@ -1963,7 +1981,7 @@ static MACHINE_CONFIG_DERIVED( xegs, a800xl )
|
||||
MCFG_CPU_MODIFY( "maincpu" )
|
||||
MCFG_CPU_PROGRAM_MAP(xegs_mem)
|
||||
|
||||
MCFG_MACHINE_START( xegs )
|
||||
MCFG_MACHINE_START_OVERRIDE( a400_state, xegs )
|
||||
|
||||
MCFG_PIA6821_MODIFY( "pia", xegs_pia_interface )
|
||||
|
||||
@ -1998,7 +2016,7 @@ static MACHINE_CONFIG_DERIVED( a5200, atari_common_nodac )
|
||||
|
||||
MCFG_PIA6821_MODIFY( "pia", a5200_pia_interface )
|
||||
|
||||
MCFG_MACHINE_START( a5200 )
|
||||
MCFG_MACHINE_START_OVERRIDE( a400_state, a5200 )
|
||||
|
||||
MCFG_SCREEN_MODIFY( "screen" )
|
||||
MCFG_SCREEN_REFRESH_RATE(FRAME_RATE_60HZ)
|
||||
@ -2162,17 +2180,17 @@ ROM_END
|
||||
|
||||
DRIVER_INIT_MEMBER(a400_state,a800xl)
|
||||
{
|
||||
a800xl_mmu(machine(), 0xff);
|
||||
a800xl_mmu(0xff);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(a400_state,xegs)
|
||||
{
|
||||
xegs_mmu(machine(), 0xff);
|
||||
xegs_mmu(0xff);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(a400_state,a600xl)
|
||||
{
|
||||
UINT8 *rom = machine().root_device().memregion("maincpu")->base();
|
||||
UINT8 *rom = memregion("maincpu")->base();
|
||||
memcpy( rom + 0x5000, rom + 0xd000, 0x800 );
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user