mirror of
https://github.com/holub/mame
synced 2025-07-06 18:39:28 +03:00
(MESS) scorpion tags (nw)
This commit is contained in:
parent
633f90cdc8
commit
25cbda7ca0
@ -38,7 +38,6 @@ public:
|
|||||||
DECLARE_WRITE8_MEMBER(atm_port_7ffd_w);
|
DECLARE_WRITE8_MEMBER(atm_port_7ffd_w);
|
||||||
DIRECT_UPDATE_MEMBER(atm_direct);
|
DIRECT_UPDATE_MEMBER(atm_direct);
|
||||||
DECLARE_MACHINE_RESET(atm);
|
DECLARE_MACHINE_RESET(atm);
|
||||||
void atm_update_memory();
|
|
||||||
protected:
|
protected:
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
required_memory_bank m_bank1;
|
required_memory_bank m_bank1;
|
||||||
@ -49,6 +48,7 @@ protected:
|
|||||||
required_device<ram_device> m_ram;
|
required_device<ram_device> m_ram;
|
||||||
private:
|
private:
|
||||||
UINT8 *m_p_ram;
|
UINT8 *m_p_ram;
|
||||||
|
void atm_update_memory();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -91,21 +91,20 @@ DIRECT_UPDATE_MEMBER(atm_state::atm_direct)
|
|||||||
|
|
||||||
void atm_state::atm_update_memory()
|
void atm_state::atm_update_memory()
|
||||||
{
|
{
|
||||||
spectrum_state *state = machine().driver_data<spectrum_state>();
|
|
||||||
UINT8 *messram = m_ram->pointer();
|
UINT8 *messram = m_ram->pointer();
|
||||||
|
|
||||||
state->m_screen_location = messram + ((state->m_port_7ffd_data & 8) ? (7<<14) : (5<<14));
|
m_screen_location = messram + ((m_port_7ffd_data & 8) ? (7<<14) : (5<<14));
|
||||||
|
|
||||||
m_bank4->set_base(messram + ((state->m_port_7ffd_data & 0x07) * 0x4000));
|
m_bank4->set_base(messram + ((m_port_7ffd_data & 0x07) * 0x4000));
|
||||||
|
|
||||||
if (m_beta->started() && betadisk_is_active(m_beta) && !( state->m_port_7ffd_data & 0x10 ) )
|
if (m_beta->started() && betadisk_is_active(m_beta) && !( m_port_7ffd_data & 0x10 ) )
|
||||||
state->m_ROMSelection = 3;
|
m_ROMSelection = 3;
|
||||||
else
|
else
|
||||||
/* ROM switching */
|
/* ROM switching */
|
||||||
state->m_ROMSelection = BIT(state->m_port_7ffd_data, 4) ;
|
m_ROMSelection = BIT(m_port_7ffd_data, 4) ;
|
||||||
|
|
||||||
/* rom 0 is 128K rom, rom 1 is 48 BASIC */
|
/* rom 0 is 128K rom, rom 1 is 48 BASIC */
|
||||||
m_bank1->set_base(&m_p_ram[0x10000 + (state->m_ROMSelection<<14)]);
|
m_bank1->set_base(&m_p_ram[0x10000 + (m_ROMSelection<<14)]);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(atm_state::atm_port_7ffd_w)
|
WRITE8_MEMBER(atm_state::atm_port_7ffd_w)
|
||||||
@ -152,10 +151,10 @@ MACHINE_RESET_MEMBER(atm_state,atm)
|
|||||||
|
|
||||||
memset(messram,0,128*1024);
|
memset(messram,0,128*1024);
|
||||||
|
|
||||||
/* Bank 2 is always in 0x4000 - 0x7fff */
|
/* Bank 5 is always in 0x4000 - 0x7fff */
|
||||||
m_bank2->set_base(messram + (5<<14));
|
m_bank2->set_base(messram + (5<<14));
|
||||||
|
|
||||||
/* Bank 3 is always in 0x8000 - 0xbfff */
|
/* Bank 2 is always in 0x8000 - 0xbfff */
|
||||||
m_bank3->set_base(messram + (2<<14));
|
m_bank3->set_base(messram + (2<<14));
|
||||||
|
|
||||||
m_port_7ffd_data = 0;
|
m_port_7ffd_data = 0;
|
||||||
|
@ -159,7 +159,15 @@ class scorpion_state : public spectrum_state
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
scorpion_state(const machine_config &mconfig, device_type type, const char *tag)
|
scorpion_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: spectrum_state(mconfig, type, tag) { }
|
: spectrum_state(mconfig, type, tag)
|
||||||
|
, m_maincpu(*this, "maincpu")
|
||||||
|
, m_bank1(*this, "bank1")
|
||||||
|
, m_bank2(*this, "bank2")
|
||||||
|
, m_bank3(*this, "bank3")
|
||||||
|
, m_bank4(*this, "bank4")
|
||||||
|
, m_beta(*this, BETA_DISK_TAG)
|
||||||
|
, m_ram(*this, RAM_TAG)
|
||||||
|
{ }
|
||||||
|
|
||||||
DECLARE_DIRECT_UPDATE_MEMBER(scorpion_direct);
|
DECLARE_DIRECT_UPDATE_MEMBER(scorpion_direct);
|
||||||
DECLARE_WRITE8_MEMBER(scorpion_0000_w);
|
DECLARE_WRITE8_MEMBER(scorpion_0000_w);
|
||||||
@ -168,6 +176,18 @@ public:
|
|||||||
DECLARE_MACHINE_START(scorpion);
|
DECLARE_MACHINE_START(scorpion);
|
||||||
DECLARE_MACHINE_RESET(scorpion);
|
DECLARE_MACHINE_RESET(scorpion);
|
||||||
TIMER_DEVICE_CALLBACK_MEMBER(nmi_check_callback);
|
TIMER_DEVICE_CALLBACK_MEMBER(nmi_check_callback);
|
||||||
|
protected:
|
||||||
|
required_device<cpu_device> m_maincpu;
|
||||||
|
required_memory_bank m_bank1;
|
||||||
|
required_memory_bank m_bank2;
|
||||||
|
required_memory_bank m_bank3;
|
||||||
|
required_memory_bank m_bank4;
|
||||||
|
required_device<device_t> m_beta;
|
||||||
|
required_device<ram_device> m_ram;
|
||||||
|
private:
|
||||||
|
UINT8 *m_p_ram;
|
||||||
|
void scorpion_update_memory();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/****************************************************************************************************/
|
/****************************************************************************************************/
|
||||||
@ -198,35 +218,29 @@ D6-D7 - not used. ( yet ? )
|
|||||||
|
|
||||||
/* rom 0=zx128, 1=zx48, 2 = service monitor, 3=tr-dos */
|
/* rom 0=zx128, 1=zx48, 2 = service monitor, 3=tr-dos */
|
||||||
|
|
||||||
static void scorpion_update_memory(running_machine &machine)
|
void scorpion_state::scorpion_update_memory()
|
||||||
{
|
{
|
||||||
scorpion_state *state = machine.driver_data<scorpion_state>();
|
UINT8 *messram = m_ram->pointer();
|
||||||
UINT8 *messram = machine.device<ram_device>(RAM_TAG)->pointer();
|
|
||||||
|
|
||||||
state->m_screen_location = messram + ((state->m_port_7ffd_data & 8) ? (7<<14) : (5<<14));
|
m_screen_location = messram + ((m_port_7ffd_data & 8) ? (7<<14) : (5<<14));
|
||||||
|
|
||||||
state->membank("bank4")->set_base(messram + (((state->m_port_7ffd_data & 0x07) | ((state->m_port_1ffd_data & 0x10)>>1)) * 0x4000));
|
m_bank4->set_base(messram + (((m_port_7ffd_data & 0x07) | ((m_port_1ffd_data & 0x10)>>1)) * 0x4000));
|
||||||
|
|
||||||
if ((state->m_port_1ffd_data & 0x01)==0x01)
|
if ((m_port_1ffd_data & 0x01)==0x01)
|
||||||
{
|
{
|
||||||
state->m_ram_0000 = messram+(8<<14);
|
m_ram_0000 = messram+(8<<14);
|
||||||
state->membank("bank1")->set_base(messram+(8<<14));
|
m_bank1->set_base(messram+(8<<14));
|
||||||
logerror("RAM\n");
|
logerror("RAM\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ((state->m_port_1ffd_data & 0x02)==0x02)
|
if ((m_port_1ffd_data & 0x02)==0x02)
|
||||||
{
|
m_ROMSelection = 2;
|
||||||
state->m_ROMSelection = 2;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
m_ROMSelection = BIT(m_port_7ffd_data, 4);
|
||||||
state->m_ROMSelection = ((state->m_port_7ffd_data>>4) & 0x01) ? 1 : 0;
|
|
||||||
}
|
m_bank1->set_base(&m_p_ram[0x10000 + (m_ROMSelection<<14)]);
|
||||||
state->membank("bank1")->set_base(machine.root_device().memregion("maincpu")->base() + 0x010000 + (state->m_ROMSelection<<14));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(scorpion_state::scorpion_0000_w)
|
WRITE8_MEMBER(scorpion_state::scorpion_0000_w)
|
||||||
@ -244,32 +258,31 @@ WRITE8_MEMBER(scorpion_state::scorpion_0000_w)
|
|||||||
|
|
||||||
DIRECT_UPDATE_MEMBER(scorpion_state::scorpion_direct)
|
DIRECT_UPDATE_MEMBER(scorpion_state::scorpion_direct)
|
||||||
{
|
{
|
||||||
device_t *beta = machine().device(BETA_DISK_TAG);
|
UINT16 pc = m_maincpu->device_t::safe_pcbase(); // works, but...
|
||||||
UINT16 pc = machine().device("maincpu")->safe_pcbase();
|
|
||||||
|
|
||||||
m_ram_disabled_by_beta = 0;
|
m_ram_disabled_by_beta = 0;
|
||||||
if (betadisk_is_active(beta))
|
if (betadisk_is_active(m_beta) && (pc >= 0x4000))
|
||||||
{
|
{
|
||||||
if (pc >= 0x4000)
|
m_ROMSelection = BIT(m_port_7ffd_data, 4);
|
||||||
{
|
betadisk_disable(m_beta);
|
||||||
m_ROMSelection = ((m_port_7ffd_data>>4) & 0x01) ? 1 : 0;
|
m_ram_disabled_by_beta = 1;
|
||||||
betadisk_disable(beta);
|
m_bank1->set_base(&m_p_ram[0x10000 + (m_ROMSelection<<14)]);
|
||||||
m_ram_disabled_by_beta = 1;
|
|
||||||
membank("bank1")->set_base(memregion("maincpu")->base() + 0x010000 + (m_ROMSelection<<14));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (((pc & 0xff00) == 0x3d00) && (m_ROMSelection==1))
|
else
|
||||||
|
if (((pc & 0xff00) == 0x3d00) && (m_ROMSelection==1))
|
||||||
{
|
{
|
||||||
m_ROMSelection = 3;
|
m_ROMSelection = 3;
|
||||||
betadisk_enable(beta);
|
betadisk_enable(m_beta);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(address<=0x3fff)
|
if(address<=0x3fff)
|
||||||
{
|
{
|
||||||
m_ram_disabled_by_beta = 1;
|
m_ram_disabled_by_beta = 1;
|
||||||
direct.explicit_configure(0x0000, 0x3fff, 0x3fff, machine().root_device().memregion("maincpu")->base() + 0x010000 + (m_ROMSelection<<14));
|
direct.explicit_configure(0x0000, 0x3fff, 0x3fff, &m_p_ram[0x10000 + (m_ROMSelection<<14)]);
|
||||||
membank("bank1")->set_base(machine().root_device().memregion("maincpu")->base() + 0x010000 + (m_ROMSelection<<14));
|
m_bank1->set_base(&m_p_ram[0x10000 + (m_ROMSelection<<14)]);
|
||||||
return ~0;
|
return ~0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return address;
|
return address;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -278,8 +291,8 @@ TIMER_DEVICE_CALLBACK_MEMBER(scorpion_state::nmi_check_callback)
|
|||||||
if ((machine().root_device().ioport("NMI")->read() & 1)==1)
|
if ((machine().root_device().ioport("NMI")->read() & 1)==1)
|
||||||
{
|
{
|
||||||
m_port_1ffd_data |= 0x02;
|
m_port_1ffd_data |= 0x02;
|
||||||
scorpion_update_memory(machine());
|
scorpion_update_memory();
|
||||||
machine().device("maincpu")->execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
|
m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -293,13 +306,13 @@ WRITE8_MEMBER(scorpion_state::scorpion_port_7ffd_w)
|
|||||||
m_port_7ffd_data = data;
|
m_port_7ffd_data = data;
|
||||||
|
|
||||||
/* update memory */
|
/* update memory */
|
||||||
scorpion_update_memory(machine());
|
scorpion_update_memory();
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE8_MEMBER(scorpion_state::scorpion_port_1ffd_w)
|
WRITE8_MEMBER(scorpion_state::scorpion_port_1ffd_w)
|
||||||
{
|
{
|
||||||
m_port_1ffd_data = data;
|
m_port_1ffd_data = data;
|
||||||
scorpion_update_memory(machine());
|
scorpion_update_memory();
|
||||||
}
|
}
|
||||||
|
|
||||||
static ADDRESS_MAP_START (scorpion_io, AS_IO, 8, scorpion_state )
|
static ADDRESS_MAP_START (scorpion_io, AS_IO, 8, scorpion_state )
|
||||||
@ -319,29 +332,29 @@ ADDRESS_MAP_END
|
|||||||
|
|
||||||
MACHINE_RESET_MEMBER(scorpion_state,scorpion)
|
MACHINE_RESET_MEMBER(scorpion_state,scorpion)
|
||||||
{
|
{
|
||||||
UINT8 *messram = machine().device<ram_device>(RAM_TAG)->pointer();
|
UINT8 *messram = m_ram->pointer();
|
||||||
device_t *beta = machine().device(BETA_DISK_TAG);
|
address_space &space = m_maincpu->space(AS_PROGRAM);
|
||||||
address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM);
|
m_p_ram = memregion("maincpu")->base();
|
||||||
|
|
||||||
m_ram_0000 = NULL;
|
m_ram_0000 = NULL;
|
||||||
space.install_read_bank(0x0000, 0x3fff, "bank1");
|
space.install_read_bank(0x0000, 0x3fff, "bank1");
|
||||||
space.install_write_handler(0x0000, 0x3fff, write8_delegate(FUNC(scorpion_state::scorpion_0000_w),this));
|
space.install_write_handler(0x0000, 0x3fff, write8_delegate(FUNC(scorpion_state::scorpion_0000_w),this));
|
||||||
|
|
||||||
betadisk_disable(beta);
|
betadisk_disable(m_beta);
|
||||||
betadisk_clear_status(beta);
|
betadisk_clear_status(m_beta);
|
||||||
space.set_direct_update_handler(direct_update_delegate(FUNC(scorpion_state::scorpion_direct), this));
|
space.set_direct_update_handler(direct_update_delegate(FUNC(scorpion_state::scorpion_direct), this));
|
||||||
|
|
||||||
memset(messram,0,256*1024);
|
memset(messram,0,256*1024);
|
||||||
|
|
||||||
/* Bank 5 is always in 0x4000 - 0x7fff */
|
/* Bank 5 is always in 0x4000 - 0x7fff */
|
||||||
membank("bank2")->set_base(messram + (5<<14));
|
m_bank2->set_base(messram + (5<<14));
|
||||||
|
|
||||||
/* Bank 2 is always in 0x8000 - 0xbfff */
|
/* Bank 2 is always in 0x8000 - 0xbfff */
|
||||||
membank("bank3")->set_base(messram + (2<<14));
|
m_bank3->set_base(messram + (2<<14));
|
||||||
|
|
||||||
m_port_7ffd_data = 0;
|
m_port_7ffd_data = 0;
|
||||||
m_port_1ffd_data = 0;
|
m_port_1ffd_data = 0;
|
||||||
scorpion_update_memory(machine());
|
scorpion_update_memory();
|
||||||
}
|
}
|
||||||
MACHINE_START_MEMBER(scorpion_state,scorpion)
|
MACHINE_START_MEMBER(scorpion_state,scorpion)
|
||||||
{
|
{
|
||||||
@ -509,7 +522,7 @@ ROM_START( kay1024 )
|
|||||||
ROM_CART_LOAD("cart", 0x0000, 0x4000, ROM_NOCLEAR | ROM_NOMIRROR | ROM_OPTIONAL)
|
ROM_CART_LOAD("cart", 0x0000, 0x4000, ROM_NOCLEAR | ROM_NOMIRROR | ROM_OPTIONAL)
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
|
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME */
|
||||||
COMP( 1994, scorpio, spec128, 0, scorpion, spec_plus, driver_device, 0, "Zonov and Co.", "Scorpion ZS-256", GAME_NOT_WORKING )
|
COMP( 1994, scorpio, spec128, 0, scorpion, spec_plus, driver_device, 0, "Zonov and Co.", "Scorpion ZS-256", GAME_NOT_WORKING )
|
||||||
COMP( 1991, profi, spec128, 0, profi, spec_plus, driver_device, 0, "Kondor and Kramis", "Profi", GAME_NOT_WORKING )
|
COMP( 1991, profi, spec128, 0, profi, spec_plus, driver_device, 0, "Kondor and Kramis", "Profi", GAME_NOT_WORKING )
|
||||||
COMP( 1998, kay1024, spec128, 0, scorpion, spec_plus, driver_device, 0, "NEMO", "Kay 1024", GAME_NOT_WORKING )
|
COMP( 1998, kay1024, spec128, 0, scorpion, spec_plus, driver_device, 0, "NEMO", "Kay 1024", GAME_NOT_WORKING )
|
||||||
|
Loading…
Reference in New Issue
Block a user