diff --git a/hash/chessmstdm.xml b/hash/chessmstdm.xml new file mode 100644 index 00000000000..124e926d6a8 --- /dev/null +++ b/hash/chessmstdm.xml @@ -0,0 +1,27 @@ + + + + + + PM10 Openings + 1987 + VEB Mikroelektronik Erfurt + + + + + + + + + PM11 Endings + 1987 + VEB Mikroelektronik Erfurt + + + + + + + + diff --git a/hash/ibm5150.xml b/hash/ibm5150.xml index f2e2125402a..7feb2527d71 100644 --- a/hash/ibm5150.xml +++ b/hash/ibm5150.xml @@ -3021,6 +3021,17 @@ Known PC Booter Games Not Dumped, Or Dumped and Lost when Demonlord's Site went + + Budokan - The Martial Spirit + 1989 + Electronic Arts + + + + + + + Les 8 Conquêtes d'Armorik le Viking 1988 @@ -3046,7 +3057,23 @@ Known PC Booter Games Not Dumped, Or Dumped and Lost when Demonlord's Site went - Indianapolis 500: The Simulation + Indianapolis 500: The Simulation (5.25") + 1989 + Electronic Arts + + + + + + + + + + + + + + Indianapolis 500: The Simulation (3.5") 1989 Electronic Arts @@ -3225,6 +3252,23 @@ Known PC Booter Games Not Dumped, Or Dumped and Lost when Demonlord's Site went + + + Purple Saturn Day + 1989 + Epyx + + + + + + + + + + + + Skate or Die (5.25") 1988 diff --git a/hash/ibm5170.xml b/hash/ibm5170.xml index 3dccc71ded3..1b3c5a025cd 100644 --- a/hash/ibm5170.xml +++ b/hash/ibm5170.xml @@ -3611,6 +3611,54 @@ Missing files come here + + WordPerfect 6.0 for DOS + 1993 + WordPerfect Corporation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + MikroBITTI Huvi- ja hyötylevyke 1995 (Fin) 1995 diff --git a/src/devices/cpu/psx/psxdasm.cpp b/src/devices/cpu/psx/psxdasm.cpp index 94d960b94a3..bfa1c546835 100644 --- a/src/devices/cpu/psx/psxdasm.cpp +++ b/src/devices/cpu/psx/psxdasm.cpp @@ -124,7 +124,7 @@ static const char *const s_gtelm[] = static char *effective_address( psxcpu_state *state, UINT32 pc, UINT32 op ) { - static char s_address[ 20 ]; + static char s_address[ 30 ]; if( state != nullptr && state->pc() == pc ) { diff --git a/src/devices/machine/68340.cpp b/src/devices/machine/68340.cpp index b9ddd9c4b16..f65c820ab33 100644 --- a/src/devices/machine/68340.cpp +++ b/src/devices/machine/68340.cpp @@ -32,11 +32,11 @@ int m68340_calc_cs(m68340cpu_device *m68k, offs_t address) -UINT16 m68340_get_cs(m68340cpu_device *device, offs_t address) +UINT16 m68340cpu_device::get_cs(offs_t address) { - device->m68340_currentcs = m68340_calc_cs(device, address); + m68340_currentcs = m68340_calc_cs(this, address); - return device->m68340_currentcs; + return m68340_currentcs; } diff --git a/src/devices/machine/68340.h b/src/devices/machine/68340.h index 4dd93bb6e51..5e9d4b5d908 100644 --- a/src/devices/machine/68340.h +++ b/src/devices/machine/68340.h @@ -38,6 +38,8 @@ public: UINT16 m_picr; UINT16 m_pitr; + UINT16 get_cs(offs_t address); + READ32_MEMBER( m68340_internal_base_r ); WRITE32_MEMBER( m68340_internal_base_w ); READ32_MEMBER( m68340_internal_dma_r ); @@ -66,8 +68,6 @@ protected: static const device_type M68340 = &device_creator; -extern UINT16 m68340_get_cs(m68340cpu_device *device, offs_t address); - diff --git a/src/frontend/mame/ui/inifile.cpp b/src/frontend/mame/ui/inifile.cpp index e1bf2604733..b76adb689b6 100644 --- a/src/frontend/mame/ui/inifile.cpp +++ b/src/frontend/mame/ui/inifile.cpp @@ -150,7 +150,6 @@ favorite_manager::favorite_manager(running_machine &machine, ui_options &moption : m_machine(machine) , m_options(moptions) { - m_current = -1; parse_favorite(); } @@ -160,7 +159,7 @@ favorite_manager::favorite_manager(running_machine &machine, ui_options &moption void favorite_manager::add_favorite_game(const game_driver *driver) { - m_list.emplace_back(driver->name, driver->description, "", "", "", 0, "", driver, "", "", "", 1, "", "", "", true); + m_list.emplace(driver->description, ui_software_info{ driver->name, driver->description, "", "", "", 0, "", driver, "", "", "", 1, "", "", "", true }); save_favorite_games(); } @@ -170,7 +169,7 @@ void favorite_manager::add_favorite_game(const game_driver *driver) void favorite_manager::add_favorite_game(ui_software_info &swinfo) { - m_list.push_back(swinfo); + m_list.emplace(swinfo.longname, swinfo); save_favorite_games(); } @@ -229,7 +228,7 @@ void favorite_manager::add_favorite_game() tmpmatches.devicetype = strensure(image.image_type_name()); tmpmatches.available = true; software_avail = true; - m_list.push_back(tmpmatches); + m_list.emplace(tmpmatches.longname, tmpmatches); save_favorite_games(); } } @@ -244,7 +243,13 @@ void favorite_manager::add_favorite_game() void favorite_manager::remove_favorite_game(ui_software_info &swinfo) { - m_list.erase(std::remove(m_list.begin(), m_list.end(), swinfo), m_list.end()); + for (auto e = m_list.begin(); e != m_list.end(); ++e) + if (e->second == swinfo) + { + m_list.erase(e); + break; + } + m_current = m_list.begin(); save_favorite_games(); } @@ -254,7 +259,8 @@ void favorite_manager::remove_favorite_game(ui_software_info &swinfo) void favorite_manager::remove_favorite_game() { - m_list.erase(m_list.begin() + m_current); + m_list.erase(m_current); + m_current = m_list.begin(); save_favorite_games(); } @@ -275,9 +281,9 @@ bool favorite_manager::isgame_favorite() if (image.exists() && swinfo != nullptr) { image_loaded = true; - for (size_t current = 0; current < m_list.size(); current++) - if (m_list[current].shortname == swinfo->shortname() && - m_list[current].listname == image.software_list_name()) + for (auto current = m_list.begin(); current != m_list.end(); ++current) + if (current->second.shortname == swinfo->shortname() && + current->second.listname == image.software_list_name()) { m_current = current; return true; @@ -288,7 +294,7 @@ bool favorite_manager::isgame_favorite() if (!image_loaded) return isgame_favorite(&machine().system()); - m_current = -1; + m_current = m_list.begin(); return false; } @@ -298,14 +304,14 @@ bool favorite_manager::isgame_favorite() bool favorite_manager::isgame_favorite(const game_driver *driver) { - for (size_t x = 0; x < m_list.size(); x++) - if (m_list[x].driver == driver && m_list[x].shortname == driver->name) + for (auto current = m_list.begin(); current != m_list.end(); ++current) + if (current->second.driver == driver && current->second.shortname == driver->name) { - m_current = x; + m_current = current; return true; } - m_current = -1; + m_current = m_list.begin(); return false; } @@ -315,14 +321,14 @@ bool favorite_manager::isgame_favorite(const game_driver *driver) bool favorite_manager::isgame_favorite(ui_software_info const &swinfo) { - for (size_t x = 0; x < m_list.size(); x++) - if (m_list[x] == swinfo) + for (auto current = m_list.begin(); current != m_list.end(); ++current) + if (current->second == swinfo) { - m_current = x; + m_current = current; return true; } - m_current = -1; + m_current = m_list.begin(); return false; } @@ -378,7 +384,7 @@ void favorite_manager::parse_favorite() tmpmatches.devicetype = chartrimcarriage(readbuf); file.gets(readbuf, 1024); tmpmatches.available = atoi(readbuf); - m_list.push_back(tmpmatches); + m_list.emplace(tmpmatches.longname, tmpmatches); } file.close(); } @@ -404,8 +410,9 @@ void favorite_manager::save_favorite_games() // generate the favorite INI std::ostringstream text; text << "[ROOT_FOLDER]\n[Favorite]\n\n"; - for (auto & elem : m_list) + for (auto & e : m_list) { + auto elem = e.second; text << elem.shortname << '\n'; text << elem.longname << '\n'; text << elem.parentname << '\n'; diff --git a/src/frontend/mame/ui/inifile.h b/src/frontend/mame/ui/inifile.h index f8da04145a7..f0ed83adbd2 100644 --- a/src/frontend/mame/ui/inifile.h +++ b/src/frontend/mame/ui/inifile.h @@ -83,8 +83,17 @@ public: // construction/destruction favorite_manager(running_machine &machine, ui_options &moptions); + // favorites comparator + struct ci_less + { + bool operator() (const std::string &s1, const std::string &s2) const + { + return (core_stricmp(s1.c_str(), s2.c_str()) < 0); + } + }; + // favorite indices - std::vector m_list; + std::multimap m_list; // getters running_machine &machine() const { return m_machine; } @@ -110,7 +119,7 @@ private: const char *favorite_filename = "favorites.ini"; // current - int m_current; + std::multimap::iterator m_current; // parse file ui_favorite void parse_favorite(); diff --git a/src/frontend/mame/ui/miscmenu.cpp b/src/frontend/mame/ui/miscmenu.cpp index 3da9d91ee4e..296b5a4be05 100644 --- a/src/frontend/mame/ui/miscmenu.cpp +++ b/src/frontend/mame/ui/miscmenu.cpp @@ -681,6 +681,7 @@ menu_machine_configure::menu_machine_configure(mame_ui_manager &mui, render_cont , x0(_x0) , y0(_y0) , m_curbios(0) + , m_fav_reset(false) { // parse the INI file std::string error; @@ -690,6 +691,8 @@ menu_machine_configure::menu_machine_configure(mame_ui_manager &mui, render_cont menu_machine_configure::~menu_machine_configure() { + if (m_fav_reset) + reset_topmost(reset_options::SELECT_FIRST); } //------------------------------------------------- @@ -724,10 +727,15 @@ void menu_machine_configure::handle() mame_machine_manager::instance()->favorite().add_favorite_game(m_drv); reset(reset_options::REMEMBER_POSITION); break; - case DELFAV: mame_machine_manager::instance()->favorite().remove_favorite_game(); - reset(reset_options::REMEMBER_POSITION); + if (main_filters::actual == FILTER_FAVORITE) + { + m_fav_reset = true; + menu::stack_pop(); + } + else + reset(reset_options::REMEMBER_POSITION); break; case CONTROLLER: if (menu_event->iptkey == IPT_UI_SELECT) diff --git a/src/frontend/mame/ui/miscmenu.h b/src/frontend/mame/ui/miscmenu.h index 5431b2e9996..22d2555b204 100644 --- a/src/frontend/mame/ui/miscmenu.h +++ b/src/frontend/mame/ui/miscmenu.h @@ -165,6 +165,7 @@ private: s_bios m_bios; std::size_t m_curbios; void setup_bios(); + bool m_fav_reset; }; //------------------------------------------------- diff --git a/src/frontend/mame/ui/selgame.cpp b/src/frontend/mame/ui/selgame.cpp index c025f75e202..43fbf912d25 100644 --- a/src/frontend/mame/ui/selgame.cpp +++ b/src/frontend/mame/ui/selgame.cpp @@ -549,36 +549,37 @@ void menu_select_game::populate() } } } - // populate favorites list else { + // populate favorites list m_search[0] = '\0'; int curitem = 0; + // iterate over entries - for (auto & mfavorite : mame_machine_manager::instance()->favorite().m_list) + for (auto & favmap : mame_machine_manager::instance()->favorite().m_list) { auto flags = flags_ui | FLAG_UI_FAVORITE; - if (mfavorite.startempty == 1) + if (favmap.second.startempty == 1) { - if (old_item_selected == -1 && mfavorite.shortname == reselect_last::driver) + if (old_item_selected == -1 && favmap.second.shortname == reselect_last::driver) old_item_selected = curitem; - bool cloneof = strcmp(mfavorite.driver->parent, "0"); + bool cloneof = strcmp(favmap.second.driver->parent, "0"); if (cloneof) { - int cx = driver_list::find(mfavorite.driver->parent); + int cx = driver_list::find(favmap.second.driver->parent); if (cx != -1 && ((driver_list::driver(cx).flags & MACHINE_IS_BIOS_ROOT) != 0)) cloneof = false; } - item_append(mfavorite.longname, "", (cloneof) ? (flags | FLAG_INVERT) : flags, (void *)&mfavorite); + item_append(favmap.second.longname, "", (cloneof) ? (flags | FLAG_INVERT) : flags, (void *)&favmap.second); } else { - if (old_item_selected == -1 && mfavorite.shortname == reselect_last::driver) + if (old_item_selected == -1 && favmap.second.shortname == reselect_last::driver) old_item_selected = curitem; - item_append(mfavorite.longname, mfavorite.devicetype, - mfavorite.parentname.empty() ? flags : (FLAG_INVERT | flags), (void *)&mfavorite); + item_append(favmap.second.longname, favmap.second.devicetype, + favmap.second.parentname.empty() ? flags : (FLAG_INVERT | flags), (void *)&favmap.second); } curitem++; } @@ -993,9 +994,6 @@ void menu_select_game::inkey_special(const event *menu_event) void menu_select_game::build_list(const char *filter_text, int filter, bool bioscheck, std::vector s_drivers) { - int cx = 0; - bool cloneof = false; - if (s_drivers.empty()) { filter = main_filters::actual; @@ -1037,20 +1035,21 @@ void menu_select_game::build_list(const char *filter_text, int filter, bool bios case FILTER_PARENT: case FILTER_CLONES: - cloneof = strcmp(s_driver->parent, "0"); - if (cloneof) { - cx = driver_list::find(s_driver->parent); - if (cx != -1 && ((driver_list::driver(cx).flags & MACHINE_IS_BIOS_ROOT) != 0)) - cloneof = false; + bool cloneof = strcmp(s_driver->parent, "0"); + if (cloneof) + { + auto cx = driver_list::find(s_driver->parent); + if (cx != -1 && ((driver_list::driver(cx).flags & MACHINE_IS_BIOS_ROOT) != 0)) + cloneof = false; + } + + if (filter == FILTER_CLONES && cloneof) + m_displaylist.push_back(s_driver); + else if (filter == FILTER_PARENT && !cloneof) + m_displaylist.push_back(s_driver); } - - if (filter == FILTER_CLONES && cloneof) - m_displaylist.push_back(s_driver); - else if (filter == FILTER_PARENT && !cloneof) - m_displaylist.push_back(s_driver); break; - case FILTER_NOT_WORKING: if (s_driver->flags & MACHINE_NOT_WORKING) m_displaylist.push_back(s_driver); @@ -1417,11 +1416,10 @@ bool menu_select_game::load_available_machines() file.gets(rbuf, MAX_CHAR_INFO); file.gets(rbuf, MAX_CHAR_INFO); - int avsize = 0, unavsize = 0; file.gets(rbuf, MAX_CHAR_INFO); - avsize = atoi(rbuf); + auto avsize = atoi(rbuf); file.gets(rbuf, MAX_CHAR_INFO); - unavsize = atoi(rbuf); + auto unavsize = atoi(rbuf); // load available list for (int x = 0; x < avsize; ++x) diff --git a/src/lib/formats/jvc_dsk.cpp b/src/lib/formats/jvc_dsk.cpp index 30ec8287f22..ce364d9efe2 100644 --- a/src/lib/formats/jvc_dsk.cpp +++ b/src/lib/formats/jvc_dsk.cpp @@ -37,16 +37,19 @@ const char *jvc_format::extensions() const bool jvc_format::parse_header(io_generic *io, int &header_size, int &tracks, int &heads, int §ors, int §or_size, int &base_sector_id) { + // The JVC format has a header whose size is the size of the image modulo 256. Currently, we only + // handle up to five header bytes UINT64 size = io_generic_size(io); header_size = size % 256; UINT8 header[5]; + // if we know that this is a header of a bad size, we can fail + // immediately; otherwise read the header + if (header_size >= sizeof(header)) + return false; if (header_size > 0) io_generic_read(io, header, 0, header_size); - if (header_size > 5) - return false; - // default values heads = 1; sectors = 18; diff --git a/src/mame/drivers/astrafr.cpp b/src/mame/drivers/astrafr.cpp index 37d0f4c4997..34a6523d8a7 100644 --- a/src/mame/drivers/astrafr.cpp +++ b/src/mame/drivers/astrafr.cpp @@ -133,7 +133,7 @@ public: READ32_MEMBER(astrafr_state::astrafr_mem_r) { int pc = space.device().safe_pc(); - int cs = m68340_get_cs(m_maincpu, offset * 4); + int cs = m_maincpu->get_cs(offset * 4); switch ( cs ) { @@ -161,7 +161,7 @@ WRITE32_MEMBER(astrafr_state::astrafr_mem_w) { int pc = space.device().safe_pc(); int address = offset * 4; - int cs = m68340_get_cs(m_maincpu, address); + int cs = m_maincpu->get_cs(address); switch ( cs ) @@ -190,7 +190,7 @@ WRITE32_MEMBER(astrafr_state::astrafr_mem_w) READ32_MEMBER(astrafr_state::astrafr_slave_mem_r) { int pc = space.device().safe_pc(); - int cs = m68340_get_cs(m_slavecpu, offset * 4); + int cs = m_slavecpu->get_cs(offset * 4); switch ( cs ) { @@ -216,7 +216,7 @@ WRITE32_MEMBER(astrafr_state::astrafr_slave_mem_w) { int pc = space.device().safe_pc(); int address = offset * 4; - int cs = m68340_get_cs(m_slavecpu, address); + int cs = m_slavecpu->get_cs(address); switch ( cs ) diff --git a/src/mame/drivers/bfm_sc4.cpp b/src/mame/drivers/bfm_sc4.cpp index f967baa9050..a7b65a0688f 100644 --- a/src/mame/drivers/bfm_sc4.cpp +++ b/src/mame/drivers/bfm_sc4.cpp @@ -624,7 +624,7 @@ ADDRESS_MAP_END READ32_MEMBER(sc4_adder4_state::adder4_mem_r) { int pc = space.device().safe_pc(); - int cs = m68340_get_cs(m_adder4cpu, offset * 4); + int cs = m_adder4cpu->get_cs(offset * 4); switch ( cs ) { @@ -646,7 +646,7 @@ READ32_MEMBER(sc4_adder4_state::adder4_mem_r) WRITE32_MEMBER(sc4_adder4_state::adder4_mem_w) { int pc = space.device().safe_pc(); - int cs = m68340_get_cs(m_adder4cpu, offset * 4); + int cs = m_adder4cpu->get_cs(offset * 4); switch ( cs ) { diff --git a/src/mame/drivers/bfm_swp.cpp b/src/mame/drivers/bfm_swp.cpp index 5198984a975..6c7c91e0730 100644 --- a/src/mame/drivers/bfm_swp.cpp +++ b/src/mame/drivers/bfm_swp.cpp @@ -136,7 +136,7 @@ protected: READ32_MEMBER(bfm_swp_state::bfm_swp_mem_r) { int pc = space.device().safe_pc(); - int cs = m68340_get_cs(m_maincpu, offset * 4); + int cs = m_maincpu->get_cs(offset * 4); switch ( cs ) { @@ -158,7 +158,7 @@ READ32_MEMBER(bfm_swp_state::bfm_swp_mem_r) WRITE32_MEMBER(bfm_swp_state::bfm_swp_mem_w) { int pc = space.device().safe_pc(); - int cs = m68340_get_cs(m_maincpu, offset * 4); + int cs = m_maincpu->get_cs(offset * 4); switch ( cs ) { diff --git a/src/mame/drivers/chessmst.cpp b/src/mame/drivers/chessmst.cpp index d55e2ffdc14..e0194657ddc 100644 --- a/src/mame/drivers/chessmst.cpp +++ b/src/mame/drivers/chessmst.cpp @@ -6,7 +6,6 @@ TODO: - figure out why chessmsta won't work, for starters it assume z80 carry flag is set at poweron? - - a better artwork ****************************************************************************/ @@ -14,8 +13,15 @@ #include "emu.h" #include "cpu/z80/z80.h" #include "machine/z80pio.h" +#include "machine/clock.h" #include "sound/speaker.h" +#include "sound/beep.h" #include "chessmst.lh" +#include "chessmstdm.lh" + +#include "bus/generic/slot.h" +#include "bus/generic/carts.h" + class chessmst_state : public driver_device { @@ -23,24 +29,40 @@ public: chessmst_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), - m_speaker(*this, "speaker") + m_pia2(*this, "z80pio2"), + m_speaker(*this, "speaker"), + m_beeper(*this, "beeper"), + m_extra(*this, "EXTRA") { } required_device m_maincpu; - required_device m_speaker; + required_device m_pia2; + optional_device m_speaker; + optional_device m_beeper; + required_ioport m_extra; UINT16 m_matrix; UINT16 m_led_sel; UINT8 m_sensor[64]; + UINT8 m_digit_matrix; + int m_digit_dot; + UINT16 m_digit; virtual void machine_reset() override; + DECLARE_WRITE8_MEMBER( digits_w ); DECLARE_WRITE8_MEMBER( pio1_port_a_w ); DECLARE_WRITE8_MEMBER( pio1_port_b_w ); + DECLARE_WRITE8_MEMBER( pio1_port_b_dm_w ); DECLARE_READ8_MEMBER( pio2_port_a_r ); DECLARE_WRITE8_MEMBER( pio2_port_b_w ); DECLARE_INPUT_CHANGED_MEMBER(chessmst_sensor); DECLARE_INPUT_CHANGED_MEMBER(reset_button); + DECLARE_INPUT_CHANGED_MEMBER(view_monitor_button); + DECLARE_WRITE_LINE_MEMBER( timer_555_w ); + +private: + void update_display(); }; @@ -51,6 +73,13 @@ static ADDRESS_MAP_START(chessmst_mem, AS_PROGRAM, 8, chessmst_state) AM_RANGE( 0x3400, 0x3bff ) AM_RAM ADDRESS_MAP_END +static ADDRESS_MAP_START(chessmstdm, AS_PROGRAM, 8, chessmst_state) + ADDRESS_MAP_UNMAP_HIGH + AM_RANGE( 0x0000, 0x3fff ) AM_ROM + AM_RANGE( 0x4000, 0x7fff ) AM_DEVREAD("cartslot", generic_slot_device, read_rom) + AM_RANGE( 0x8000, 0x8bff ) AM_RAM +ADDRESS_MAP_END + static ADDRESS_MAP_START( chessmst_io , AS_IO, 8, chessmst_state) ADDRESS_MAP_UNMAP_HIGH ADDRESS_MAP_GLOBAL_MASK(0xff) @@ -59,9 +88,31 @@ static ADDRESS_MAP_START( chessmst_io , AS_IO, 8, chessmst_state) AM_RANGE(0x08, 0x0b) AM_MIRROR(0xf0) AM_DEVREADWRITE("z80pio2", z80pio_device, read, write) ADDRESS_MAP_END +static ADDRESS_MAP_START( chessmstdm_io , AS_IO, 8, chessmst_state) + AM_IMPORT_FROM(chessmst_io) + AM_RANGE(0x4c, 0x4c) AM_WRITE(digits_w) +ADDRESS_MAP_END + +WRITE_LINE_MEMBER( chessmst_state::timer_555_w ) +{ + m_pia2->strobe_b(state); + m_pia2->data_b_write(m_matrix); +} + INPUT_CHANGED_MEMBER(chessmst_state::reset_button) { m_maincpu->set_input_line(INPUT_LINE_RESET, newval ? ASSERT_LINE : CLEAR_LINE); + machine_reset(); +} + +INPUT_CHANGED_MEMBER(chessmst_state::view_monitor_button) +{ + // pressing both VIEW and MONITOR buttons causes a reset + if ((m_extra->read() & 0x03) == 0x03) + { + m_maincpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE); + machine_reset(); + } } INPUT_CHANGED_MEMBER(chessmst_state::chessmst_sensor) @@ -77,93 +128,112 @@ INPUT_CHANGED_MEMBER(chessmst_state::chessmst_sensor) /* Input ports */ static INPUT_PORTS_START( chessmst ) PORT_START("COL_A") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 0) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 1) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 2) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 3) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 4) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 5) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 6) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 7) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 0) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 1) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 2) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 3) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 4) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 5) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 6) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 7) PORT_START("COL_B") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 8) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 9) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 10) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 11) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 12) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 13) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 14) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 15) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 8) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 9) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 10) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 11) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 12) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 13) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 14) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 15) PORT_START("COL_C") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 16) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 17) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 18) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 19) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 20) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 21) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 22) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 23) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 16) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 17) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 18) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 19) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 20) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 21) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 22) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 23) PORT_START("COL_D") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 24) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 25) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 26) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 27) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 28) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 29) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 30) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 31) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 24) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 25) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 26) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 27) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 28) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 29) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 30) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 31) PORT_START("COL_E") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 32) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 33) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 34) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 35) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 36) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 37) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 38) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 39) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 32) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 33) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 34) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 35) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 36) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 37) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 38) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 39) PORT_START("COL_F") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 40) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 41) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 42) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 43) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 44) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 45) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 46) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 47) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 40) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 41) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 42) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 43) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 44) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 45) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 46) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 47) PORT_START("COL_G") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 48) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 49) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 50) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 51) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 52) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 53) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 54) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 55) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 48) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 49) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 50) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 51) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 52) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 53) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 54) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 55) PORT_START("COL_H") - PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 56) - PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 57) - PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 58) - PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 59) - PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 60) - PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 61) - PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 62) - PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 63) + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 56) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 57) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 58) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 59) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 60) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 61) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 62) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, chessmst_sensor, 63) PORT_START("BUTTONS") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Hint [7]") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_H) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Random [6]") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_R) - PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Referee [5]") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_F) - PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Selfplay [4]") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_S) - PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board [3]") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_B) - PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Color [2]") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_C) - PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Level [1]") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_L) - PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("New Game [0]") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_ENTER) + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Hint [7]") PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_H) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Random [6]") PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_R) + PORT_BIT(0x04, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Referee [5]") PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_F) + PORT_BIT(0x08, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Selfplay [4]") PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_S) + PORT_BIT(0x10, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Board [3]") PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_B) + PORT_BIT(0x20, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Color [2]") PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_C) + PORT_BIT(0x40, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Level [1]") PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_L) + PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("New Game [0]") PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_ENTER) PORT_START("EXTRA") PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Halt") PORT_CODE(KEYCODE_F2) PORT_WRITE_LINE_DEVICE_MEMBER("z80pio1", z80pio_device, strobe_a) // -> PIO(1) ASTB pin PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_KEYPAD ) PORT_NAME("Reset") PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, reset_button, 0) // -> Z80 RESET pin INPUT_PORTS_END +static INPUT_PORTS_START( chessmstdm ) + PORT_INCLUDE(chessmst) + + PORT_MODIFY("BUTTONS") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Move Fore") PORT_CODE(KEYCODE_RIGHT) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Move Back") PORT_CODE(KEYCODE_LEFT) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Board") PORT_CODE(KEYCODE_B) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Match / Time") PORT_CODE(KEYCODE_M) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Parameter / Information") PORT_CODE(KEYCODE_I) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Selection / Dialogue") PORT_CODE(KEYCODE_S) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Function / Notation") PORT_CODE(KEYCODE_F) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_KEYPAD) PORT_NAME("Enter") PORT_CODE(KEYCODE_ENTER) + + PORT_MODIFY("EXTRA") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("Monitor") PORT_CODE(KEYCODE_F1) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, view_monitor_button, 0) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_KEYPAD) PORT_NAME("View") PORT_CODE(KEYCODE_F2) PORT_CHANGED_MEMBER(DEVICE_SELF, chessmst_state, view_monitor_button, 0) +INPUT_PORTS_END + + void chessmst_state::machine_reset() { //reset all sensors @@ -174,6 +244,23 @@ void chessmst_state::machine_reset() m_sensor[i+0] = m_sensor[i+1] = m_sensor[i+6] = m_sensor[i+7] = 0; } +void chessmst_state::update_display() +{ + for(int i=0; i<4; i++) + { + if (BIT(m_digit_matrix, i)) + output().set_indexed_value("digit", i, BITSWAP16(m_digit, 3,5,12,10,14,1,2,13,8,6,11,15,7,9,4,0) | (m_digit_dot << 16)); + } +} + +WRITE8_MEMBER( chessmst_state::digits_w ) +{ + m_digit = (m_digit << 4) | (data & 0x0f); + m_digit_matrix = (data >> 4) & 0x0f; + + update_display(); +} + WRITE8_MEMBER( chessmst_state::pio1_port_a_w ) { for (int row=1; row<=8; row++) @@ -211,6 +298,20 @@ WRITE8_MEMBER( chessmst_state::pio1_port_b_w ) m_speaker->level_w(BIT(data, 6)); } +WRITE8_MEMBER( chessmst_state::pio1_port_b_dm_w ) +{ + m_matrix = (m_matrix & 0xff) | ((data & 0x04)<<6); + + m_digit_dot = BIT(data, 4); + if (m_digit_dot) + update_display(); + + m_beeper->set_state(BIT(data, 3)); + + output().set_value("monitor_led", !BIT(data, 5)); + output().set_value("playmode_led", !BIT(data, 6)); +} + READ8_MEMBER( chessmst_state::pio2_port_a_r ) { UINT8 data = 0x00; @@ -218,24 +319,11 @@ READ8_MEMBER( chessmst_state::pio2_port_a_r ) // The pieces position on the chessboard is identified by 64 Hall // sensors, which are in a 8x8 matrix with the corresponding LEDs. for (int i=0; i<8; i++) - { - if (m_matrix & 0x01) - data |= (m_sensor[0+i] ? (1<read(); @@ -255,6 +343,12 @@ static const z80_daisy_config chessmst_daisy_chain[] = { nullptr } }; +static const z80_daisy_config chessmstdm_daisy_chain[] = +{ + { "z80pio2" }, + { nullptr } +}; + static MACHINE_CONFIG_START( chessmst, chessmst_state ) /* basic machine hardware */ @@ -305,10 +399,42 @@ static MACHINE_CONFIG_START( chessmsta, chessmst_state ) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) MACHINE_CONFIG_END +static MACHINE_CONFIG_START( chessmstdm, chessmst_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", Z80, XTAL_8MHz/2) // U880 Z80 clone + MCFG_CPU_PROGRAM_MAP(chessmstdm) + MCFG_CPU_IO_MAP(chessmstdm_io) + MCFG_Z80_DAISY_CHAIN(chessmstdm_daisy_chain) + + MCFG_DEVICE_ADD("z80pio1", Z80PIO, XTAL_8MHz/4) + MCFG_Z80PIO_OUT_PA_CB(WRITE8(chessmst_state, pio1_port_a_w)) + MCFG_Z80PIO_OUT_PB_CB(WRITE8(chessmst_state, pio1_port_b_dm_w)) + MCFG_Z80PIO_IN_PB_CB(IOPORT("EXTRA")) + + MCFG_DEVICE_ADD("z80pio2", Z80PIO, XTAL_8MHz/4) + MCFG_Z80PIO_OUT_INT_CB(INPUTLINE("maincpu", INPUT_LINE_IRQ0)) + MCFG_Z80PIO_IN_PA_CB(READ8(chessmst_state, pio2_port_a_r)) + MCFG_Z80PIO_OUT_PB_CB(WRITE8(chessmst_state, pio2_port_b_w)) + + MCFG_DEFAULT_LAYOUT(layout_chessmstdm) + + MCFG_DEVICE_ADD("555_timer", CLOCK, 500) // from 555 timer + MCFG_CLOCK_SIGNAL_HANDLER(WRITELINE(chessmst_state, timer_555_w)) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_MONO("mono") + MCFG_SOUND_ADD("beeper", BEEP, 1000) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + + MCFG_GENERIC_CARTSLOT_ADD("cartslot", generic_plain_slot, "chessmstdm_cart") + MCFG_SOFTWARE_LIST_ADD("cart_list", "chessmstdm") +MACHINE_CONFIG_END + /* ROM definition */ ROM_START( chessmst ) - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + ROM_REGION( 0x2800, "maincpu", ROMREGION_ERASEFF ) ROM_LOAD( "056.bin", 0x0000, 0x0400, CRC(2b90e5d3) SHA1(c47445964b2e6cb11bd1f27e395cf980c97af196) ) ROM_LOAD( "057.bin", 0x0400, 0x0400, CRC(e666fc56) SHA1(3fa75b82cead81973bea94191a5c35f0acaaa0e6) ) ROM_LOAD( "058.bin", 0x0800, 0x0400, CRC(6a17fbec) SHA1(019051e93a5114477c50eaa87e1ff01b02eb404d) ) @@ -322,14 +448,20 @@ ROM_START( chessmst ) ROM_END ROM_START( chessmsta ) - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + ROM_REGION( 0x2800, "maincpu", ROMREGION_ERASEFF ) ROM_LOAD( "2764.bin", 0x0000, 0x2000, CRC(6be28876) SHA1(fd7d77b471e7792aef3b2b3f7ff1de4cdafc94c9) ) ROM_LOAD( "u2616bm108.bin", 0x2000, 0x0800, CRC(6e69ace3) SHA1(e099b6b6cc505092f64b8d51ab9c70aa64f58f70) ) ROM_END +ROM_START( chessmstdm ) + ROM_REGION( 0x4000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD("CMD_bm002_bm201.bin", 0x0000, 0x4000, CRC(47858079) SHA1(eeae1126b514e4853d056690e72e7f5c6dfb3008)) +ROM_END + /* Driver */ /* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY, FULLNAME, FLAGS */ COMP( 1984, chessmst, 0, 0, chessmst, chessmst, driver_device, 0, "VEB Mikroelektronik Erfurt", "Chess-Master (set 1)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) COMP( 1984, chessmsta, chessmst, 0, chessmsta, chessmst, driver_device, 0, "VEB Mikroelektronik Erfurt", "Chess-Master (set 2)", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) +COMP( 1987, chessmstdm,0, 0, chessmstdm, chessmstdm, driver_device, 0, "VEB Mikroelektronik Erfurt", "Chess-Master Diamond", MACHINE_NOT_WORKING | MACHINE_CLICKABLE_ARTWORK ) diff --git a/src/mame/drivers/hikaru.cpp b/src/mame/drivers/hikaru.cpp index e2239e73c6d..b5575b1297f 100644 --- a/src/mame/drivers/hikaru.cpp +++ b/src/mame/drivers/hikaru.cpp @@ -582,6 +582,29 @@ ROM_START( airtrix ) ROM_PARAMETER( ":rom_board:segam2crypt:key", "291b02c7" ) ROM_END +ROM_START( airtrixo ) + ROM_REGION( 0x200000, "maincpu", 0) + HIKARU_BIOS + + ROM_REGION( 0x800000, "user1", 0) + ROM_LOAD32_WORD( "epr-23601.ic29", 0x0000000, 0x0400000, CRC(e0c642cb) SHA1(f04f8e13cc46d462c79ecebcded7dee9b3500bdc) ) + ROM_LOAD32_WORD( "epr-23602.ic30", 0x0000002, 0x0400000, CRC(fac11d21) SHA1(70b48a7e1ac4268fc09d96d6845c5a5099d4e301) ) + + /* ROM board using 128M TSOP48 MASKROMs */ + ROM_REGION( 0x10000000, "user2", 0) + ROM_LOAD32_WORD( "mpr-23573.ic37" , 0x0000000, 0x1000000, CRC(e22a0734) SHA1(fc06d5972d285d09473874aaeb1efed2d19c8f36) ) + ROM_LOAD32_WORD( "mpr-23577.ic38" , 0x0000002, 0x1000000, CRC(d007680d) SHA1(a795057c40b1851adb0e19e5dfb39e16206215bf) ) + ROM_LOAD32_WORD( "mpr-23574.ic41" , 0x2000000, 0x1000000, CRC(a77034a5) SHA1(e6e8e2f747e7a972144436103741acfd7030fe84) ) + ROM_LOAD32_WORD( "mpr-23578.ic42" , 0x2000002, 0x1000000, CRC(db612dd6) SHA1(e6813a1e16099094d67347027e058be582750ad7) ) + ROM_LOAD32_WORD( "mpr-23575.ic45" , 0x4000000, 0x1000000, CRC(fe660f06) SHA1(73916f67d852df719fd65b1ed0f8b977c0c33390) ) + ROM_LOAD32_WORD( "mpr-23579.ic46" , 0x4000002, 0x1000000, CRC(55e656d2) SHA1(5d0b26807cf915ab0ae5cc3a7c9dd6bec43da7b2) ) + ROM_LOAD32_WORD( "mpr-23576.ic49" , 0x6000000, 0x1000000, CRC(c01e0329) SHA1(df1a3c83f338925d69912af56f675197e14e1793) ) + ROM_LOAD32_WORD( "mpr-23580.ic50" , 0x6000002, 0x1000000, CRC(d260f39c) SHA1(e5cdf399defaaa7dbcee62f7ab64b898c28d8f7d) ) + + // 834-14149 2000 317-0294-COM Hikaru + ROM_PARAMETER( ":rom_board:segam2crypt:key", "291b02c7" ) +ROM_END + ROM_START( pharrier ) ROM_REGION( 0x200000, "maincpu", 0) @@ -749,9 +772,43 @@ ROM_START( sgnascar ) ROM_PARAMETER( ":rom_board:key", "56dedf33" ) ROM_END +ROM_START( sgnascaro ) + ROM_REGION( 0x200000, "maincpu", 0) + HIKARU_BIOS + + ROM_REGION( 0x2000000, "user1", 0) + ROM_LOAD32_WORD( "epr-23485.ic35", 0x000000, 0x400000, CRC(13b44fbf) SHA1(73416fa7b671ec5c96f0b084a427ff701bf6c399) ) + ROM_LOAD32_WORD( "epr-23486.ic36", 0x000002, 0x400000, CRC(ac3acd19) SHA1(1ec96be0bfceb2f1f808d78b07425d32056fbde0) ) + + /* ROM board using 128M TSOP48 MASKROMs */ + ROM_REGION( 0x10000000, "user2", ROMREGION_ERASE00) + ROM_LOAD32_WORD( "mpr-23469.ic19", 0x0000000, 0x1000000, CRC(89cbad8d) SHA1(e4f103b96a3a842a90182172ddcf3bc5dfe6cca8) ) + ROM_LOAD32_WORD( "mpr-23473.ic20", 0x0000002, 0x1000000, CRC(977b87d6) SHA1(079eeebc6f9c60d0a016a46386bbe846d8a354da) ) + ROM_LOAD32_WORD( "mpr-23470.ic21", 0x2000000, 0x1000000, CRC(faf4940f) SHA1(72fee9ea5b78da260ed99ebe80ca6300f62cdbd7) ) + ROM_LOAD32_WORD( "mpr-23474.ic22", 0x2000002, 0x1000000, CRC(faf69ac5) SHA1(875c748151bf0e9cd73d86384665414b2f7b6f5a) ) + ROM_LOAD32_WORD( "mpr-23471.ic23", 0x4000000, 0x1000000, CRC(a3aad8ac) SHA1(afc8f3d1546e50afab4f540d59c87fe27cfb2cdd) ) + ROM_LOAD32_WORD( "mpr-23475.ic24", 0x4000002, 0x1000000, CRC(5f51597c) SHA1(02c0a5d463714082b7ebb2bec4d0f88aff186f82) ) + ROM_LOAD32_WORD( "mpr-23472.ic25", 0x6000000, 0x1000000, CRC(2495f678) SHA1(94b3160aabaea0596855c38ab1b63b16b20f2bae) ) + ROM_LOAD32_WORD( "mpr-23476.ic26", 0x6000002, 0x1000000, CRC(927cf31c) SHA1(7cab22a4113d92080a52e1d235bf075ce95f985f) ) + ROM_LOAD32_WORD( "mpr-23477.ic27", 0x8000000, 0x1000000, CRC(b4b7c477) SHA1(bcbfe081d509f0b87c6685b9b6617ae146987fe7) ) + ROM_LOAD32_WORD( "mpr-23481.ic28", 0x8000002, 0x1000000, CRC(27b8eb7d) SHA1(087b1ed13a3e2a0dbda82c454243214784429d24) ) + ROM_LOAD32_WORD( "mpr-23478.ic29", 0xa000000, 0x1000000, CRC(1fac431c) SHA1(2e3903c8cfd55d414555a1d23ba3a97c335991b3) ) + ROM_LOAD32_WORD( "mpr-23482.ic30", 0xa000002, 0x1000000, CRC(2e9a0420) SHA1(376d5f0b8274d741a702dc08da50ea5679991740) ) + ROM_LOAD32_WORD( "mpr-23479.ic31", 0xc000000, 0x1000000, CRC(9704e393) SHA1(0cb1403f4a268def3ce88db42e55d89ca913e2a0) ) + ROM_LOAD32_WORD( "mpr-23483.ic32", 0xc000002, 0x1000000, CRC(c37adebe) SHA1(e84f6d2cc364c743f7f3b73d8c8d0271952bb093) ) + ROM_LOAD32_WORD( "mpr-23480.ic33", 0xe000000, 0x1000000, CRC(f517b8b3) SHA1(c04740adb612473c4c9f8186e7e93d2f73d1bb1a) ) + ROM_LOAD32_WORD( "mpr-23484.ic34", 0xe000002, 0x1000000, CRC(2ebe1aa1) SHA1(16b39f7422da1a334dde27169c2949e1d95bddb3) ) + + // 317-0283-COM Actel A54SX32 + // ID 0x4252 + ROM_PARAMETER( ":rom_board:key", "56dedf33" ) +ROM_END + GAME( 2000, hikaru, 0, hikaru, hikaru, driver_device, 0, ROT0, "Sega", "Hikaru Bios", MACHINE_NO_SOUND|MACHINE_NOT_WORKING|MACHINE_IS_BIOS_ROOT ) GAME( 1999, braveff, hikaru, hikaru, hikaru, driver_device, 0, ROT0, "Sega", "Brave Fire Fighters", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) -GAME( 2000, airtrix, hikaru, hikaru, hikaru, driver_device, 0, ROT0, "Sega", "Air Trix", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) -GAME( 2000, sgnascar, hikaru, hikaru, hikaru, driver_device, 0, ROT0, "Sega / Electronic Arts", "NASCAR Racing", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) -GAME( 2001, pharrier, hikaru, hikaru, hikaru, driver_device, 0, ROT0, "Sega", "Planet Harriers", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +GAME( 2000, airtrix, hikaru, hikaru, hikaru, driver_device, 0, ROT0, "Sega", "Air Trix (Rev A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +GAME( 2000, airtrixo, airtrix, hikaru, hikaru, driver_device, 0, ROT0, "Sega", "Air Trix (original)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +GAME( 2000, sgnascar, hikaru, hikaru, hikaru, driver_device, 0, ROT0, "Sega / Electronic Arts", "NASCAR Racing (Rev A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +GAME( 2000, sgnascaro,sgnascar, hikaru, hikaru, driver_device, 0, ROT0, "Sega / Electronic Arts", "NASCAR Racing (original)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) +GAME( 2001, pharrier, hikaru, hikaru, hikaru, driver_device, 0, ROT0, "Sega", "Planet Harriers (Rev A)", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) GAME( 2001, podrace, hikaru, hikaru, hikaru, driver_device, 0, ROT0, "Sega", "Star Wars Pod Racer", MACHINE_NO_SOUND|MACHINE_NOT_WORKING ) diff --git a/src/mame/drivers/homedata.cpp b/src/mame/drivers/homedata.cpp index b19ab6dd652..8a8083b456e 100644 --- a/src/mame/drivers/homedata.cpp +++ b/src/mame/drivers/homedata.cpp @@ -320,10 +320,11 @@ WRITE8_MEMBER(homedata_state::mrokumei_sound_io_w) switch (offset & 0xff) { case 0x40: + case 0x7f: // hourouki mirror m_dac->write_signed8(data); break; default: - logerror("%04x: I/O write to port %04x\n", space.device().safe_pc(), offset); + logerror("%04x: I/O write to port %04x %02x\n", space.device().safe_pc(), offset,data); break; } } @@ -557,8 +558,10 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( mrokumei_sound_map, AS_PROGRAM, 8, homedata_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM + // TODO: might be that the entire area is sound_bank_w AM_RANGE(0xfffc, 0xfffd) AM_WRITENOP /* stack writes happen here, but there's no RAM */ AM_RANGE(0x8080, 0x8080) AM_WRITE(mrokumei_sound_bank_w) + AM_RANGE(0xffbf, 0xffbf) AM_WRITE(mrokumei_sound_bank_w) // hourouki mirror ADDRESS_MAP_END diff --git a/src/mame/drivers/jackal.cpp b/src/mame/drivers/jackal.cpp index 26e2c97dcf3..19848b4ed1e 100644 --- a/src/mame/drivers/jackal.cpp +++ b/src/mame/drivers/jackal.cpp @@ -14,8 +14,6 @@ Notes: necessarily mean anything. TODO: -- Coin counters don't work correctly, because the register is overwritten by - other routines and the coin counter bits rapidly toggle between 0 and 1. - running the sound CPU at the nominal clock rate, music stops working at the beginning of the game. This is kludged by overclocking the sound CPU. This looks like a CPU communication timing issue however fiddling with the @@ -121,9 +119,14 @@ WRITE8_MEMBER(jackal_state::jackal_rambank_w) if (data & 0x04) popmessage("jackal_rambank_w %02x", data); - machine().bookkeeping().coin_counter_w(0, data & 0x01); - machine().bookkeeping().coin_counter_w(1, data & 0x02); - + // all revisions flips the coin counter bit between 1 -> 0 five times, causing the bookkeeping to report 5 coins inserted. + // most likely solution in HW is a f/f that disables coin counters when any of the other bits are enabled. + if((data & 0xfc) == 0) + { + machine().bookkeeping().coin_counter_w(0, data & 0x01); + machine().bookkeeping().coin_counter_w(1, data & 0x02); + } + m_spritebank = &rgn[((data & 0x08) << 13)]; m_rambank = &rgn[((data & 0x10) << 12)]; membank("bank1")->set_entry((data & 0x20) ? 1 : 0); diff --git a/src/mame/drivers/metro.cpp b/src/mame/drivers/metro.cpp index 252e5bea272..780d7307df6 100644 --- a/src/mame/drivers/metro.cpp +++ b/src/mame/drivers/metro.cpp @@ -4038,12 +4038,12 @@ static MACHINE_CONFIG_START( gakusai, metro_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_OKIM6295_ADD("oki", 2112000, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.25) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.25) MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_3_579545MHz) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.90) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.90) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 2.00) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 2.00) MACHINE_CONFIG_END @@ -4077,12 +4077,12 @@ static MACHINE_CONFIG_START( gakusai2, metro_state ) MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") MCFG_OKIM6295_ADD("oki", 2112000, OKIM6295_PIN7_HIGH) // clock frequency & pin 7 not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.50) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.50) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.25) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.25) MCFG_SOUND_ADD("ymsnd", YM2413, XTAL_3_579545MHz) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 0.90) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 0.90) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 2.00) + MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 2.00) MACHINE_CONFIG_END diff --git a/src/mame/drivers/mpu5.cpp b/src/mame/drivers/mpu5.cpp index 29df7cb8932..d3c6c3cd39d 100644 --- a/src/mame/drivers/mpu5.cpp +++ b/src/mame/drivers/mpu5.cpp @@ -281,7 +281,7 @@ READ32_MEMBER(mpu5_state::mpu5_mem_r) { int pc = space.device().safe_pc(); int addr = offset *4; - int cs = m68340_get_cs(m_maincpu, addr); + int cs = m_maincpu->get_cs(addr); switch ( cs ) { @@ -477,7 +477,7 @@ WRITE32_MEMBER(mpu5_state::mpu5_mem_w) { int pc = space.device().safe_pc(); int addr = offset *4; - int cs = m68340_get_cs(m_maincpu, addr); + int cs = m_maincpu->get_cs(addr); switch ( cs ) { diff --git a/src/mame/drivers/naomi.cpp b/src/mame/drivers/naomi.cpp index 358f3fa2914..e8dcad5a464 100644 --- a/src/mame/drivers/naomi.cpp +++ b/src/mame/drivers/naomi.cpp @@ -9887,7 +9887,7 @@ GAME( 2003, puyofevp, naomi, naomim1, naomi, naomi_state, naomi, ROT0, "Sega", " /* Atomiswave */ GAME( 2001, awbios, 0, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy", "Atomiswave Bios", GAME_FLAGS|MACHINE_IS_BIOS_ROOT ) -GAME( 2003, maxspeed, awbios, aw1c, aw1w, naomi_state, atomiswave, ROT0, "Sammy", "Maximum Speed", GAME_FLAGS ) +GAME( 2003, maxspeed, awbios, aw1c, aw1w, naomi_state, atomiswave, ROT0, "SIMS / Sammy", "Maximum Speed", GAME_FLAGS ) GAME( 2003, sprtshot, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy USA", "Sports Shooting USA", GAME_FLAGS ) GAME( 2003, ggx15, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Arc System Works / Sammy", "Guilty Gear X ver. 1.5", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_NOT_WORKING ) GAME( 2003, demofist, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Polygon Magic / Dimps", "Demolish Fist", GAME_FLAGS ) @@ -9898,10 +9898,10 @@ GAME( 2003, sushibar, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "S GAME( 2004, dirtypig, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy", "Dirty Pigskin Football", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_NOT_WORKING ) GAME( 2004, rumblef, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / Dimps", "The Rumble Fish", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_NOT_WORKING ) GAME( 2004, rumblefp, rumblef, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / Dimps", "The Rumble Fish (prototype)", MACHINE_IMPERFECT_GRAPHICS|MACHINE_IMPERFECT_SOUND|MACHINE_NOT_WORKING ) -GAME( 2004, rangrmsn, awbios, aw2c, aw1w, naomi_state, atomiswave, ROT0, "Sammy", "Ranger Mission", GAME_FLAGS ) -GAME( 2004, salmankt, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy", "Salary Man Kintarou", GAME_FLAGS ) +GAME( 2004, rangrmsn, awbios, aw2c, aw1w, naomi_state, atomiswave, ROT0, "RIZ Inc./ Sammy", "Ranger Mission", GAME_FLAGS ) +GAME( 2004, salmankt, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Yuki Enterprise / Sammy", "Net Select: Salaryman Kintaro", GAME_FLAGS ) GAME( 2004, ftspeed, awbios, aw1c, aw1w, naomi_state, atomiswave, ROT0, "Sammy", "Faster Than Speed", GAME_FLAGS ) -GAME( 2005, vfurlong, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy", "Net Select Keiba Victory Furlong", GAME_FLAGS ) +GAME( 2005, vfurlong, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Progress / Sammy", "Net Select Horse Racing: Victory Furlong", GAME_FLAGS ) GAME( 2005, rumblef2, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / Dimps", "The Rumble Fish 2", GAME_FLAGS ) GAME( 2005, rumblf2p, rumblef2, aw2c, aw2c, naomi_state, atomiswave, ROT0, "Sammy / Dimps", "The Rumble Fish 2 (prototype)", GAME_FLAGS ) GAME( 2005, anmlbskt, awbios, aw2c, aw2c, naomi_state, atomiswave, ROT270, "MOSS / Sammy", "Animal Basket", GAME_FLAGS ) diff --git a/src/mame/drivers/nmk16.cpp b/src/mame/drivers/nmk16.cpp index 4d177723eda..f82300106e4 100644 --- a/src/mame/drivers/nmk16.cpp +++ b/src/mame/drivers/nmk16.cpp @@ -55,7 +55,6 @@ TODO: - Hacha Mecha Fighter: mcu simulation is wrong/incorrect (see notes). -- Music timing in nouryoku is a little off. - In Bioship, there's an occasional flicker of one of the sprites composing big ships. Increasing CPU speed from 12 to 16 MHz improved it, but it's still not 100% fixed. (the CPU speed has been verified to be 10Mhz??) diff --git a/src/mame/drivers/pluto5.cpp b/src/mame/drivers/pluto5.cpp index bfb5cb114c9..8cc68881e40 100644 --- a/src/mame/drivers/pluto5.cpp +++ b/src/mame/drivers/pluto5.cpp @@ -206,7 +206,7 @@ public: READ32_MEMBER(pluto5_state::pluto5_mem_r) { int pc = space.device().safe_pc(); - int cs = m68340_get_cs(m_maincpu, offset * 4); + int cs = m_maincpu->get_cs(offset * 4); switch ( cs ) { @@ -224,7 +224,7 @@ READ32_MEMBER(pluto5_state::pluto5_mem_r) WRITE32_MEMBER(pluto5_state::pluto5_mem_w) { int pc = space.device().safe_pc(); - int cs = m68340_get_cs(m_maincpu, offset * 4); + int cs = m_maincpu->get_cs(offset * 4); switch ( cs ) { diff --git a/src/mame/drivers/segas24.cpp b/src/mame/drivers/segas24.cpp index 9d9fe017c6b..4deb6ff9f42 100644 --- a/src/mame/drivers/segas24.cpp +++ b/src/mame/drivers/segas24.cpp @@ -354,6 +354,9 @@ Notes: #define FRC_CLOCK_MODE0 (MASTER_CLOCK/2)/24 // /16 according to Charles #define FRC_CLOCK_MODE1 (MASTER_CLOCK/2)/1536 // /1024 according to Charles, but /1536 sounds better +#define FDC_LEGACY_LOG 0 +#define FDC_LOG(x) do { if (FDC_LEGACY_LOG) logerror x; } while (0) + enum { IRQ_YM2151 = 1, IRQ_TIMER = 2, @@ -394,18 +397,18 @@ READ16_MEMBER( segas24_state::fdc_r ) int res = fdc_data; if(fdc_drq) { fdc_span--; - // logerror("Read %02x (%d)\n", res, fdc_span); + // FDC_LOG(("Read %02x (%d)\n", res, fdc_span)); if(fdc_span) { fdc_pt++; fdc_data = *fdc_pt; } else { - logerror("FDC: transfert complete\n"); + FDC_LOG(("FDC: transfert complete\n")); fdc_drq = 0; fdc_status = 0; fdc_irq = 1; } } else - logerror("FDC: data read with drq down\n"); + FDC_LOG(("FDC: data read with drq down\n")); return res; } } @@ -423,19 +426,19 @@ WRITE16_MEMBER( segas24_state::fdc_w ) fdc_irq = 0; switch(data >> 4) { case 0x0: - logerror("FDC: Restore\n"); + FDC_LOG(("FDC: Restore\n")); fdc_phys_track = fdc_track = 0; fdc_irq = 1; fdc_status = 4; break; case 0x1: - logerror("FDC: Seek %d\n", fdc_data); + FDC_LOG(("FDC: Seek %d\n", fdc_data)); fdc_phys_track = fdc_track = fdc_data; fdc_irq = 1; fdc_status = fdc_track ? 0 : 4; break; case 0x9: - logerror("Read multiple [%02x] %d..%d side %d track %d\n", data, fdc_sector, fdc_sector+fdc_data-1, data & 8 ? 1 : 0, fdc_phys_track); + FDC_LOG(("Read multiple [%02x] %d..%d side %d track %d\n", data, fdc_sector, fdc_sector+fdc_data-1, data & 8 ? 1 : 0, fdc_phys_track)); fdc_pt = memregion("floppy")->base() + track_size*(2*fdc_phys_track+(data & 8 ? 1 : 0)); fdc_span = track_size; fdc_status = 3; @@ -443,14 +446,14 @@ WRITE16_MEMBER( segas24_state::fdc_w ) fdc_data = *fdc_pt; break; case 0xb: - logerror("Write multiple [%02x] %d..%d side %d track %d\n", data, fdc_sector, fdc_sector+fdc_data-1, data & 8 ? 1 : 0, fdc_phys_track); + FDC_LOG(("Write multiple [%02x] %d..%d side %d track %d\n", data, fdc_sector, fdc_sector+fdc_data-1, data & 8 ? 1 : 0, fdc_phys_track)); fdc_pt = memregion("floppy")->base() + track_size*(2*fdc_phys_track+(data & 8 ? 1 : 0)); fdc_span = track_size; fdc_status = 3; fdc_drq = 1; break; case 0xd: - logerror("FDC: Forced interrupt\n"); + FDC_LOG(("FDC: Forced interrupt\n")); fdc_span = 0; fdc_drq = 0; fdc_irq = data & 1; @@ -458,38 +461,38 @@ WRITE16_MEMBER( segas24_state::fdc_w ) break; case 0xf: if(data == 0xfe) - logerror("FDC: Assign mode %02x\n", fdc_data); + FDC_LOG(("FDC: Assign mode %02x\n", fdc_data)); else if(data == 0xfd) - logerror("FDC: Assign parameter %02x\n", fdc_data); + FDC_LOG(("FDC: Assign parameter %02x\n", fdc_data)); else - logerror("FDC: Unknown command %02x\n", data); + FDC_LOG(("FDC: Unknown command %02x\n", data)); break; default: - logerror("FDC: Unknown command %02x\n", data); + FDC_LOG(("FDC: Unknown command %02x\n", data)); break; } break; case 1: - logerror("FDC: Track register %02x\n", data); + FDC_LOG(("FDC: Track register %02x\n", data)); fdc_track = data; break; case 2: - logerror("FDC: Sector register %02x\n", data); + FDC_LOG(("FDC: Sector register %02x\n", data)); fdc_sector = data; break; case 3: if(fdc_drq) { - // logerror("Write %02x (%d)\n", data, fdc_span); + // FDC_LOG("Write %02x (%d)\n", data, fdc_span); *fdc_pt++ = data; fdc_span--; if(!fdc_span) { - logerror("FDC: transfert complete\n"); + FDC_LOG(("FDC: transfert complete\n")); fdc_drq = 0; fdc_status = 0; fdc_irq = 1; } } else - logerror("FDC: Data register %02x\n", data); + FDC_LOG(("FDC: Data register %02x\n", data)); fdc_data = data; break; } @@ -507,7 +510,7 @@ READ16_MEMBER( segas24_state::fdc_status_r ) WRITE16_MEMBER( segas24_state::fdc_ctrl_w ) { if(ACCESSING_BITS_0_7) - logerror("FDC control %02x\n", data & 0xff); + FDC_LOG(("FDC control %02x\n", data & 0xff)); } diff --git a/src/mame/drivers/superqix.cpp b/src/mame/drivers/superqix.cpp index 6a6f42d7534..b2b3ffb5cd4 100644 --- a/src/mame/drivers/superqix.cpp +++ b/src/mame/drivers/superqix.cpp @@ -22,20 +22,37 @@ Notes: 5P and 5M are the Sprite framebuffer Super Qix: -- The sq07.108 ROM came from a bootleg where the 8751 MCU was replaced by a - model using external ROM. The ROM was bad (bit 3 was stuck high). It was - recovered by carefully checking the disassembly but there might still be - some mistakes. - The bootleg MCU code is different from the original; it was modified by the - bootleggers to avoid use of port 2. +- The sq07.ic108 ROM came from a bootleg where the 8751 MCU was replaced by an + 8031 MCU plus an external ROM (i.e. the sqixb1 romset). The 8031 ROM was bad + (bit 3 was stuck high). It was originally recovered by carefully checking + the disassembly, and this repair was later verified from another dump to be + correct. The majority of the bootleg 8031 MCU code matches the decapped + sqixu b03-03.l2 mcu code, implying the sq07.ic108 8031 MCU code ROM was + derived from code dumped from an original Taito b03-03.l2 8751 MCU somehow. + The bootleg MCU code is different from the original b03-03.l2 MCU since + an 8031 when running in external ROM mode cannot use ports 0 or 2, hence + the code was extensively patched by the bootleggers to avoid use of those + ports, by adding an additional multiplexer to port 1, and moving various + read and write pins around. + An important note about the sqixb1 bootleg pcb: the SOCKET on the pcb for + sq07.ic108 is populated backwards compared to the way the ROM will fit into + it! This is probably the cause of the bad bit 3 in the original dump in MAME + (due to someone inserting and powering the chip backwards) and is definitely + the cause of at least one other ROM failure during a repair. Be aware of + this, if you find or own one of these PCBs! - The MCU sends some ID to the Z80 on startup, but the Z80 happily ignores it. This happens in all sets. There appears to be code that would check part of the MCU init sequence ($5973 onwards), but it doesn't seem to be called. -- sqixb1 might be an earlier version because there is a bug with coin lockout: - it is activated after inesrting 10 coins instead of 9. sqix doesn't have - that bug and also inverts the coin lockout output. +- sqixb1 might be based on an earlier version because there is a bug with coin + lockout: it is activated after inserting 10 coins instead of 9. + sqix doesn't have that bug and also inverts the coin lockout output compared + to the bootleg. + The older sqixr1 non-bootleg set does not have the 10 coin lockout bug + either, so it is possible that the bootleggers introduced it themselves, or + the bootleg is based on some sort of early (location test?) set (older than + the sqixr1 set) which we don't have a dump of. - sqixb2 is a bootleg of sqixb1, with the MCU removed. @@ -210,11 +227,26 @@ The MCU acts this way: **************************************************************************/ +CUSTOM_INPUT_MEMBER(superqix_state::superqix_semaphore_input_r) // similar to pbillian_semaphore_input_r below, but reverse order and polarity +{ + int res = 0; + + if (m_MCUHasWritten) + res |= 0x01; + + if (m_Z80HasWritten) + res |= 0x02; + + return res; +} READ8_MEMBER(superqix_state::in4_mcu_r) { // logerror("%04x: in4_mcu_r\n",space.device().safe_pc()); - return ioport("P2")->read() | (m_MCUHasWritten << 6) | (m_Z80HasWritten << 7); + //logerror("%04x: ay_port_b_r and MCUHasWritten is %d and Z80HasWritten is %d: ",static_cast(*m_maincpu).safe_pc(),m_MCUHasWritten, m_Z80HasWritten); + UINT8 temp = ioport("P2")->read(); + //logerror("returning %02X\n", temp); + return temp; } READ8_MEMBER(superqix_state::sqix_from_mcu_r) @@ -225,7 +257,15 @@ READ8_MEMBER(superqix_state::sqix_from_mcu_r) TIMER_CALLBACK_MEMBER(superqix_state::mcu_acknowledge_callback) { - m_Z80HasWritten = 1; + /* if we're on a set with no mcu, namely sqixb2, perestro or perestrof, + do not set the mcu flags since at least a few checks in sqixb2 were + not patched out by the bootleggers nor the read from the + mcu_acknowledge_r register which sets the m_Z80HasWritten semaphore, + hence the semaphore flags must both be hard-wired inactive on the pcb, + or else it will never boot to the title screen. + perestro and perestrof seem to completely ignore the semaphores. + */ + if (m_mcu.found()) m_Z80HasWritten = 1; // only set this if we have an actual mcu m_fromZ80 = m_fromZ80pending; // logerror("Z80->MCU %02x\n",m_fromZ80); } @@ -309,12 +349,12 @@ READ8_MEMBER(superqix_state::bootleg_mcu_p3_r) READ8_MEMBER(superqix_state::sqix_system_status_r) { - return ioport("SYSTEM")->read() | (m_MCUHasWritten << 6) | (m_Z80HasWritten << 7); + return ioport("SYSTEM")->read(); } WRITE8_MEMBER(superqix_state::sqixu_mcu_p2_w) { - // bit 0 = unknown (clocked often), watchdog? + // bit 0 = enable latch for bits 1-6 below on high level or falling edge (doesn't particularly matter which, either one works) // bit 1 = coin cointer 1 machine().bookkeeping().coin_counter_w(0,data & 2); @@ -812,7 +852,7 @@ READ8_MEMBER(superqix_state::hotsmash_Z80_mcu_r) return m_fromMCU; } -CUSTOM_INPUT_MEMBER(superqix_state::superqix_semaphore_input_r) +CUSTOM_INPUT_MEMBER(superqix_state::pbillian_semaphore_input_r) { int res = 0; /* bit 0x40 is PROBABLY latch 1 on 74ls74.7c, is high if m_Z80HasWritten is clear */ @@ -1006,12 +1046,12 @@ ADDRESS_MAP_END /* I8751 memory handlers */ -static ADDRESS_MAP_START( bootleg_mcu_io_map, AS_IO, 8, superqix_state ) +static ADDRESS_MAP_START( sqix_8031_mcu_io_map, AS_IO, 8, superqix_state ) AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_WRITE(bootleg_mcu_p1_w) AM_RANGE(MCS51_PORT_P3, MCS51_PORT_P3) AM_READWRITE(bootleg_mcu_p3_r, mcu_p3_w) ADDRESS_MAP_END -static ADDRESS_MAP_START( sqixu_mcu_io_map, AS_IO, 8, superqix_state ) +static ADDRESS_MAP_START( sqix_mcu_io_map, AS_IO, 8, superqix_state ) AM_RANGE(MCS51_PORT_P0, MCS51_PORT_P0) AM_READ(sqix_system_status_r) AM_RANGE(MCS51_PORT_P1, MCS51_PORT_P1) AM_READ_PORT("DSW1") AM_RANGE(MCS51_PORT_P2, MCS51_PORT_P2) AM_WRITE(sqixu_mcu_p2_w) @@ -1077,7 +1117,7 @@ static INPUT_PORTS_START( pbillian ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state,superqix_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */ + PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state, pbillian_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */ PORT_START("BUTTONS") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) // N/C @@ -1086,7 +1126,7 @@ static INPUT_PORTS_START( pbillian ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL // P2 fire (M powerup) + high score initials PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state,superqix_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */ + PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state, pbillian_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */ PORT_START("PLUNGER1") // plunger mechanism for shot (BUTTON1 and PEDAL mapped to the same key in MAME) PORT_BIT( 0x3f, 0x00, IPT_PEDAL ) PORT_MINMAX(0x00, 0x3f) PORT_SENSITIVITY(100) PORT_KEYDELTA(1) @@ -1159,7 +1199,7 @@ static INPUT_PORTS_START( hotsmash ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 )//$49c PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )//$42d - PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state,superqix_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */ + PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state, pbillian_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */ PORT_START("BUTTONS") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNUSED ) @@ -1168,7 +1208,7 @@ static INPUT_PORTS_START( hotsmash ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL // p2 button 2, unused on this game? PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state,superqix_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */ + PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state, pbillian_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */ PORT_START("DIAL1") PORT_BIT( 0xff, 0x00, IPT_DIAL ) PORT_SENSITIVITY(15) PORT_KEYDELTA(30) PORT_CENTERDELTA(0) PORT_PLAYER(1) @@ -1233,8 +1273,7 @@ static INPUT_PORTS_START( superqix ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_START2 ) PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 ) // doesn't work in bootleg PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL ) // Z80 status (pending mcu->z80) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) // Z80 status (pending z80->mcu) + PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state, superqix_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */ PORT_START("P1") PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY @@ -1253,8 +1292,8 @@ static INPUT_PORTS_START( superqix ) PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SPECIAL ) // mcu status (pending mcu->z80) - PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) // mcu status (pending z80->mcu) + PORT_BIT( 0xc0, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, superqix_state, superqix_semaphore_input_r, nullptr) /* Z80 and MCU Semaphores */ + INPUT_PORTS_END @@ -1359,7 +1398,6 @@ static MACHINE_CONFIG_START( pbillian, superqix_state ) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( hotsmash, pbillian ) - MCFG_CPU_ADD("mcu", M68705, XTAL_12MHz/4) /* 3mhz???? */ MCFG_CPU_PROGRAM_MAP(m68705_map) MACHINE_CONFIG_END @@ -1373,7 +1411,7 @@ static MACHINE_CONFIG_START( sqix, superqix_state ) MCFG_CPU_PERIODIC_INT_DRIVER(superqix_state, sqix_timer_irq, 4*60) /* ??? */ MCFG_CPU_ADD("mcu", I8751, 12000000/3) /* ??? */ - MCFG_CPU_IO_MAP(bootleg_mcu_io_map) + MCFG_CPU_IO_MAP(sqix_mcu_io_map) MCFG_QUANTUM_PERFECT_CPU("maincpu") @@ -1410,14 +1448,13 @@ static MACHINE_CONFIG_START( sqix, superqix_state ) MACHINE_CONFIG_END -static MACHINE_CONFIG_DERIVED( sqixu, sqix ) - +static MACHINE_CONFIG_DERIVED( sqix_8031, sqix ) MCFG_CPU_MODIFY("mcu") - MCFG_CPU_IO_MAP(sqixu_mcu_io_map) + MCFG_CPU_IO_MAP(sqix_8031_mcu_io_map) MACHINE_CONFIG_END -static MACHINE_CONFIG_START( sqixbl, superqix_state ) +static MACHINE_CONFIG_START( sqix_nomcu, superqix_state ) /* basic machine hardware */ MCFG_CPU_ADD("maincpu", Z80, 12000000/2) /* 6 MHz */ @@ -1447,7 +1484,7 @@ static MACHINE_CONFIG_START( sqixbl, superqix_state ) MCFG_SOUND_ADD("ay1", AY8910, 12000000/8) MCFG_AY8910_PORT_A_READ_CB(IOPORT("P1")) - MCFG_AY8910_PORT_B_READ_CB(IOPORT("P2")) + MCFG_AY8910_PORT_B_READ_CB(READ8(superqix_state, in4_mcu_r)) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25) MCFG_SOUND_ADD("ay2", AY8910, 12000000/8) @@ -1510,7 +1547,7 @@ ROM_START( sqix ) ROM_REGION( 0x1000, "mcu", 0 ) /* I8751 code */ ROM_LOAD( "b03-03.l2", 0x00000, 0x1000, NO_DUMP ) /* Original Taito ID code for this set's MCU */ /* sq07.108 is from the sqixb1 set, it will be removed once the actual MCU code from b03-03.l2 is decapped / dumped */ - ROM_LOAD( "sq07.108", 0x00000, 0x1000, BAD_DUMP CRC(d11411fb) SHA1(31183f433596c4d2503c01f6dc8d91024f2cf5de) ) + ROM_LOAD( "sq07.ic108", 0x00000, 0x1000, BAD_DUMP CRC(d11411fb) SHA1(31183f433596c4d2503c01f6dc8d91024f2cf5de) ) ROM_REGION( 0x08000, "gfx1", 0 ) ROM_LOAD( "b03-04.s8", 0x00000, 0x08000, CRC(f815ef45) SHA1(4189d455b6ccf3ae922d410fb624c4665203febf) ) @@ -1530,7 +1567,7 @@ ROM_START( sqixr1 ) ROM_REGION( 0x1000, "mcu", 0 ) /* I8751 code */ ROM_LOAD( "b03-03.l2", 0x00000, 0x1000, NO_DUMP ) /* Original Taito ID code for this set's MCU */ /* sq07.108 is from the sqixb1 set, it will be removed once the actual MCU code from b03-03.l2 is decapped / dumped */ - ROM_LOAD( "sq07.108", 0x00000, 0x1000, BAD_DUMP CRC(d11411fb) SHA1(31183f433596c4d2503c01f6dc8d91024f2cf5de) ) + ROM_LOAD( "sq07.ic108", 0x00000, 0x1000, BAD_DUMP CRC(d11411fb) SHA1(31183f433596c4d2503c01f6dc8d91024f2cf5de) ) ROM_REGION( 0x08000, "gfx1", 0 ) ROM_LOAD( "b03-04.s8", 0x00000, 0x08000, CRC(f815ef45) SHA1(4189d455b6ccf3ae922d410fb624c4665203febf) ) @@ -1563,14 +1600,14 @@ ROM_END /* this is a bootleg with an 8031+external rom in place of the 8751 of the original board; The mcu code is extensively hacked to avoid use of port 2, which is used as the rom data bus, using a multiplexed latch on one of the - other ports instead. Is this based on dumped original b03-03.l2 code? */ + other ports instead. This is based on dumped original b03-03.l2 code. */ ROM_START( sqixb1 ) ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "sq01.97", 0x00000, 0x08000, CRC(0888b7de) SHA1(de3e4637436de185f43d2ad4186d4cfdcd4d33d9) ) ROM_LOAD( "b03-02.h3", 0x10000, 0x10000, CRC(9c23cb64) SHA1(7e04cb18cabdc0031621162cbc228cd95875a022) ) ROM_REGION( 0x10000, "mcu", 0 ) /* I8031 code */ - ROM_LOAD( "sq07.108", 0x00000, 0x1000, BAD_DUMP CRC(d11411fb) SHA1(31183f433596c4d2503c01f6dc8d91024f2cf5de) ) + ROM_LOAD( "sq07.ic108", 0x00000, 0x1000, CRC(d11411fb) SHA1(31183f433596c4d2503c01f6dc8d91024f2cf5de) ) ROM_REGION( 0x08000, "gfx1", 0 ) ROM_LOAD( "b03-04.s8", 0x00000, 0x08000, CRC(f815ef45) SHA1(4189d455b6ccf3ae922d410fb624c4665203febf) ) @@ -1705,12 +1742,12 @@ DRIVER_INIT_MEMBER(superqix_state,perestro) -GAME( 1986, pbillian, 0, pbillian, pbillian, driver_device, 0, ROT0, "Kaneko / Taito", "Prebillian", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, hotsmash, 0, hotsmash, hotsmash, driver_device, 0, ROT90, "Kaneko / Taito", "Vs. Hot Smash", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, sqix, 0, sqix, superqix, superqix_state, sqix, ROT90, "Kaneko / Taito", "Super Qix (World, Rev 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, sqixr1, sqix, sqix, superqix, superqix_state, sqix, ROT90, "Kaneko / Taito", "Super Qix (World, Rev 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, sqixu, sqix, sqixu, superqix, driver_device, 0, ROT90, "Kaneko / Taito (Romstar License)", "Super Qix (US)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, sqixb1, sqix, sqix, superqix, superqix_state, sqixa, ROT90, "bootleg", "Super Qix (bootleg set 1)", MACHINE_SUPPORTS_SAVE ) -GAME( 1987, sqixb2, sqix, sqixbl, superqix, driver_device, 0, ROT90, "bootleg", "Super Qix (bootleg set 2, No MCU)", MACHINE_SUPPORTS_SAVE ) -GAME( 1994, perestro, 0, sqixbl, superqix, superqix_state, perestro, ROT90, "Promat", "Perestroika Girls", MACHINE_SUPPORTS_SAVE ) -GAME( 1993, perestrof,perestro, sqixbl, superqix, superqix_state, perestro, ROT90, "Promat (Fuuki license)", "Perestroika Girls (Fuuki license)", MACHINE_SUPPORTS_SAVE ) \ No newline at end of file +GAME( 1986, pbillian, 0, pbillian, pbillian, driver_device, 0, ROT0, "Kaneko / Taito", "Prebillian", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, hotsmash, 0, hotsmash, hotsmash, driver_device, 0, ROT90, "Kaneko / Taito", "Vs. Hot Smash", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, sqix, 0, sqix_8031, superqix, superqix_state, sqix, ROT90, "Kaneko / Taito", "Super Qix (World, Rev 2)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, sqixr1, sqix, sqix_8031, superqix, superqix_state, sqix, ROT90, "Kaneko / Taito", "Super Qix (World, Rev 1)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, sqixu, sqix, sqix, superqix, driver_device, 0, ROT90, "Kaneko / Taito (Romstar License)", "Super Qix (US)", MACHINE_SUPPORTS_SAVE ) +GAME( 1987, sqixb1, sqix, sqix_8031, superqix, superqix_state, sqixa, ROT90, "bootleg", "Super Qix (bootleg set 1, 8031 MCU)", MACHINE_SUPPORTS_SAVE ) // bootleg of World, Rev 1 +GAME( 1987, sqixb2, sqix, sqix_nomcu, superqix, driver_device, 0, ROT90, "bootleg", "Super Qix (bootleg set 2, No MCU)", MACHINE_SUPPORTS_SAVE ) // bootleg of World, Rev 1 +GAME( 1994, perestro, 0, sqix_nomcu, superqix, superqix_state, perestro, ROT90, "Promat", "Perestroika Girls", MACHINE_SUPPORTS_SAVE ) +GAME( 1993, perestrof,perestro, sqix_nomcu, superqix, superqix_state, perestro, ROT90, "Promat (Fuuki license)", "Perestroika Girls (Fuuki license)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/drivers/tryout.cpp b/src/mame/drivers/tryout.cpp index 7be0c3520f8..5ff8ea95660 100644 --- a/src/mame/drivers/tryout.cpp +++ b/src/mame/drivers/tryout.cpp @@ -7,9 +7,6 @@ Driver by Pierpaolo Prazzoli and Bryan McPhail - TODO: - - Fix sprite position in cocktail mode - ================================================================= Debug cheats: @@ -246,4 +243,4 @@ ROM_START( tryout ) ROM_LOAD( "ch14.bpr", 0x00000, 0x0020, CRC(8ce19925) SHA1(12f8f6022f1148b6ba1d019a34247452637063a7) ) ROM_END -GAME( 1985, tryout, 0, tryout, tryout, driver_device, 0, ROT90, "Data East Corporation", "Pro Baseball Skill Tryout (Japan)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE ) +GAME( 1985, tryout, 0, tryout, tryout, driver_device, 0, ROT90, "Data East Corporation", "Pro Baseball Skill Tryout (Japan)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/includes/superqix.h b/src/mame/includes/superqix.h index e4042a2495c..866913bb757 100644 --- a/src/mame/includes/superqix.h +++ b/src/mame/includes/superqix.h @@ -7,7 +7,7 @@ class superqix_state : public driver_device public: enum { - MCU_ACKNOWLEDGE, + MCU_ACKNOWLEDGE, /// TODO: get rid of this hack! HLE_68705_WRITE }; @@ -96,6 +96,7 @@ public: DECLARE_WRITE8_MEMBER(hotsmash_68705_ddr_c_w); DECLARE_WRITE8_MEMBER(hotsmash_Z80_mcu_w); DECLARE_READ8_MEMBER(hotsmash_Z80_mcu_r); + DECLARE_CUSTOM_INPUT_MEMBER(pbillian_semaphore_input_r); DECLARE_CUSTOM_INPUT_MEMBER(superqix_semaphore_input_r); DECLARE_WRITE8_MEMBER(pbillian_Z80_mcu_w); DECLARE_WRITE8_MEMBER(superqix_videoram_w); @@ -103,8 +104,9 @@ public: DECLARE_WRITE8_MEMBER(superqix_bitmapram2_w); DECLARE_WRITE8_MEMBER(pbillian_0410_w); DECLARE_WRITE8_MEMBER(superqix_0410_w); - DECLARE_READ8_MEMBER(in4_mcu_r); DECLARE_READ8_MEMBER(sqix_from_mcu_r); + //DECLARE_READ8_MEMBER(superqix_ay1_a_r); + DECLARE_READ8_MEMBER(in4_mcu_r); //DECLARE_READ8_MEMBER(superqix_ay1_b_r); DECLARE_WRITE8_MEMBER(sqix_z80_mcu_w); DECLARE_READ8_MEMBER(bootleg_in0_r); DECLARE_READ8_MEMBER(hotsmash_ay_port_a_r); diff --git a/src/mame/layout/chessmst.lay b/src/mame/layout/chessmst.lay index 40a623faf32..61dd06ce73d 100644 --- a/src/mame/layout/chessmst.lay +++ b/src/mame/layout/chessmst.lay @@ -1,351 +1,609 @@ + + + - + - - - - - - - - - - - - - - - - - - - - + + + - + + + + + + + + + + + + + + + - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - - - - - - - - - - + - - - - - - - - - + + - - - - - - - - - - + + - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - diff --git a/src/mame/layout/chessmstdm.lay b/src/mame/layout/chessmstdm.lay new file mode 100644 index 00000000000..b5c8e57f345 --- /dev/null +++ b/src/mame/layout/chessmstdm.lay @@ -0,0 +1,589 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 2bb58c42525..46a432ac094 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -9352,6 +9352,7 @@ cheekyms // 8004 (c) [1980?] @source:chessmst.cpp chessmst // chessmsta // +chessmstdm // @source:chesstrv.cpp borisdpl // @@ -14230,12 +14231,14 @@ tour4000 // (c) 2000 High Video tour4010 // (c) 2000 High Video @source:hikaru.cpp -airtrix // 2001.02 Air Trix +airtrix // 2001.02 Air Trix (Rev A) +airtrixo // 2001.02 Air Trix (original) braveff // 1999.06 Syouboushi Brave Fire Fighters hikaru // 2000.?? Hikaru BIOS -pharrier // 2000.12 Planet Harriers +pharrier // 2000.12 Planet Harriers (Rev A) podrace // 2000.06 Star Wars: Racer Arcade -sgnascar // 2000.09 Nascar Arcade +sgnascar // 2000.10 Nascar Arcade (Rev A) +sgnascaro // 2000.09 Nascar Arcade (original) @source:himesiki.cpp himesiki // (c) 1989 Hi-Soft diff --git a/src/mame/video/rollrace.cpp b/src/mame/video/rollrace.cpp index b5ea9646761..b800d9b5f8d 100644 --- a/src/mame/video/rollrace.cpp +++ b/src/mame/video/rollrace.cpp @@ -180,7 +180,7 @@ UINT32 rollrace_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap sx = offs % 32; sy = offs / 32; - scroll = ( 8 * sy + m_colorram[2 * sx] ) % 256; + scroll = ( 8 * sy - m_colorram[2 * sx] ) % 256; col = m_colorram[ sx * 2 + 1 ]&0x1f; if (!m_flipy) diff --git a/src/mame/video/superqix.cpp b/src/mame/video/superqix.cpp index 003a8860fd3..80354f940a6 100644 --- a/src/mame/video/superqix.cpp +++ b/src/mame/video/superqix.cpp @@ -157,10 +157,11 @@ WRITE8_MEMBER(superqix_state::superqix_0410_w) } /* bit 2 selects which of the two bitmaps to display (for 2 players game) */ - m_show_bitmap = (data & 0x04) >> 2; + m_show_bitmap = BIT(data,2); /* bit 3 enables NMI */ - m_nmi_mask = data & 0x08; + m_nmi_mask = BIT(data,3); + //if (!(m_nmi_mask)) m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); // test for later, could this explain the need for 4 NMIs per frame instead of one? Is the game manually retriggering NMI using the mask register, several times during the vblank period? /* bits 4-5 control ROM bank */ membank("bank1")->set_entry((data & 0x30) >> 4);