From 25cbda7ca01b234238f27cc397ec970ad7a87aea Mon Sep 17 00:00:00 2001 From: Robbbert Date: Sun, 27 Jan 2013 23:50:34 +0000 Subject: [PATCH] (MESS) scorpion tags (nw) --- src/mess/drivers/atm.c | 19 ++++--- src/mess/drivers/scorpion.c | 105 ++++++++++++++++++++---------------- 2 files changed, 68 insertions(+), 56 deletions(-) diff --git a/src/mess/drivers/atm.c b/src/mess/drivers/atm.c index 76baf565d5f..197fd257931 100644 --- a/src/mess/drivers/atm.c +++ b/src/mess/drivers/atm.c @@ -38,7 +38,6 @@ public: DECLARE_WRITE8_MEMBER(atm_port_7ffd_w); DIRECT_UPDATE_MEMBER(atm_direct); DECLARE_MACHINE_RESET(atm); - void atm_update_memory(); protected: required_device m_maincpu; required_memory_bank m_bank1; @@ -49,6 +48,7 @@ protected: required_device m_ram; private: 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() { - spectrum_state *state = machine().driver_data(); 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 ) ) - state->m_ROMSelection = 3; + if (m_beta->started() && betadisk_is_active(m_beta) && !( m_port_7ffd_data & 0x10 ) ) + m_ROMSelection = 3; else /* 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 */ - 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) @@ -152,10 +151,10 @@ MACHINE_RESET_MEMBER(atm_state,atm) 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)); - /* Bank 3 is always in 0x8000 - 0xbfff */ + /* Bank 2 is always in 0x8000 - 0xbfff */ m_bank3->set_base(messram + (2<<14)); m_port_7ffd_data = 0; diff --git a/src/mess/drivers/scorpion.c b/src/mess/drivers/scorpion.c index a89bedbcfd4..fd43608f92f 100644 --- a/src/mess/drivers/scorpion.c +++ b/src/mess/drivers/scorpion.c @@ -159,7 +159,15 @@ class scorpion_state : public spectrum_state { public: 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_WRITE8_MEMBER(scorpion_0000_w); @@ -168,6 +176,18 @@ public: DECLARE_MACHINE_START(scorpion); DECLARE_MACHINE_RESET(scorpion); TIMER_DEVICE_CALLBACK_MEMBER(nmi_check_callback); +protected: + required_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 m_beta; + required_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 */ -static void scorpion_update_memory(running_machine &machine) +void scorpion_state::scorpion_update_memory() { - scorpion_state *state = machine.driver_data(); - UINT8 *messram = machine.device(RAM_TAG)->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)); - 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); - state->membank("bank1")->set_base(messram+(8<<14)); + m_ram_0000 = messram+(8<<14); + m_bank1->set_base(messram+(8<<14)); logerror("RAM\n"); } else { - if ((state->m_port_1ffd_data & 0x02)==0x02) - { - state->m_ROMSelection = 2; - } + if ((m_port_1ffd_data & 0x02)==0x02) + m_ROMSelection = 2; else - { - state->m_ROMSelection = ((state->m_port_7ffd_data>>4) & 0x01) ? 1 : 0; - } - state->membank("bank1")->set_base(machine.root_device().memregion("maincpu")->base() + 0x010000 + (state->m_ROMSelection<<14)); + m_ROMSelection = BIT(m_port_7ffd_data, 4); + + m_bank1->set_base(&m_p_ram[0x10000 + (m_ROMSelection<<14)]); } - - } 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) { - device_t *beta = machine().device(BETA_DISK_TAG); - UINT16 pc = machine().device("maincpu")->safe_pcbase(); + UINT16 pc = m_maincpu->device_t::safe_pcbase(); // works, but... m_ram_disabled_by_beta = 0; - if (betadisk_is_active(beta)) + if (betadisk_is_active(m_beta) && (pc >= 0x4000)) { - if (pc >= 0x4000) - { - m_ROMSelection = ((m_port_7ffd_data>>4) & 0x01) ? 1 : 0; - betadisk_disable(beta); - m_ram_disabled_by_beta = 1; - membank("bank1")->set_base(memregion("maincpu")->base() + 0x010000 + (m_ROMSelection<<14)); - } + m_ROMSelection = BIT(m_port_7ffd_data, 4); + betadisk_disable(m_beta); + m_ram_disabled_by_beta = 1; + m_bank1->set_base(&m_p_ram[0x10000 + (m_ROMSelection<<14)]); } - else if (((pc & 0xff00) == 0x3d00) && (m_ROMSelection==1)) + else + if (((pc & 0xff00) == 0x3d00) && (m_ROMSelection==1)) { m_ROMSelection = 3; - betadisk_enable(beta); + betadisk_enable(m_beta); } + if(address<=0x3fff) { m_ram_disabled_by_beta = 1; - direct.explicit_configure(0x0000, 0x3fff, 0x3fff, machine().root_device().memregion("maincpu")->base() + 0x010000 + (m_ROMSelection<<14)); - membank("bank1")->set_base(machine().root_device().memregion("maincpu")->base() + 0x010000 + (m_ROMSelection<<14)); + direct.explicit_configure(0x0000, 0x3fff, 0x3fff, &m_p_ram[0x10000 + (m_ROMSelection<<14)]); + m_bank1->set_base(&m_p_ram[0x10000 + (m_ROMSelection<<14)]); return ~0; } + return address; } @@ -278,8 +291,8 @@ TIMER_DEVICE_CALLBACK_MEMBER(scorpion_state::nmi_check_callback) if ((machine().root_device().ioport("NMI")->read() & 1)==1) { m_port_1ffd_data |= 0x02; - scorpion_update_memory(machine()); - machine().device("maincpu")->execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE); + scorpion_update_memory(); + 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; /* update memory */ - scorpion_update_memory(machine()); + scorpion_update_memory(); } WRITE8_MEMBER(scorpion_state::scorpion_port_1ffd_w) { m_port_1ffd_data = data; - scorpion_update_memory(machine()); + scorpion_update_memory(); } static ADDRESS_MAP_START (scorpion_io, AS_IO, 8, scorpion_state ) @@ -319,29 +332,29 @@ ADDRESS_MAP_END MACHINE_RESET_MEMBER(scorpion_state,scorpion) { - UINT8 *messram = machine().device(RAM_TAG)->pointer(); - device_t *beta = machine().device(BETA_DISK_TAG); - address_space &space = machine().device("maincpu")->memory().space(AS_PROGRAM); + UINT8 *messram = m_ram->pointer(); + address_space &space = m_maincpu->space(AS_PROGRAM); + m_p_ram = memregion("maincpu")->base(); m_ram_0000 = NULL; space.install_read_bank(0x0000, 0x3fff, "bank1"); space.install_write_handler(0x0000, 0x3fff, write8_delegate(FUNC(scorpion_state::scorpion_0000_w),this)); - betadisk_disable(beta); - betadisk_clear_status(beta); + betadisk_disable(m_beta); + betadisk_clear_status(m_beta); space.set_direct_update_handler(direct_update_delegate(FUNC(scorpion_state::scorpion_direct), this)); memset(messram,0,256*1024); /* 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 */ - membank("bank3")->set_base(messram + (2<<14)); + m_bank3->set_base(messram + (2<<14)); m_port_7ffd_data = 0; m_port_1ffd_data = 0; - scorpion_update_memory(machine()); + scorpion_update_memory(); } 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_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( 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 )