From 854bcbd6cb49dc89cd97c259a7270e5bd766646e Mon Sep 17 00:00:00 2001 From: Dirk Best Date: Tue, 21 Jul 2015 16:40:49 +0200 Subject: [PATCH 1/7] travis: add email notifications --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 15718c091af..80e3b739633 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,3 +16,6 @@ before_install: - sudo add-apt-repository ppa:shahar-evron/qt-backports -y - sudo apt-get update -qq - sudo apt-get install -y libsdl2-dev libsdl2-ttf-dev libasound2-dev libqt4-dev libqt4-dev-bin +notifications: + email: + - secure: "sK8JJcn1A0yLnbDJ/7vmJgESuXmP6D4QlvQvsYLp1xAx5eTVSJ5Z+GSXLBJ9CnoeJ5AlPVPX4rXdRV93UyxYlTh1O97x8VZZQtYBNPRjk/VCflsOOg7C+jcJKX/knMu/QG2MVEDE5G2b8mHSAgWljG/7Z2N0rYZlWppwklYafOkyW4uE0E7PU5XpmKim4ra6Y1eDSbap+XJiDwgUm9moDZrgAv7eom9NIWGNMRIozSRyR2IkYimlWE92FOy5PzLJtFGK02iumbYN+39mTux59v/h/m6HD6cD7Wf10Lco9+Fnmi9Bs+VvIReJIP9pDABRvJ3MkUV4I9BjUT9xk48lzxqjGtdfUwOMDOTABd4Pb/5cmNtyNUQIosy5oiplR6USBnqD7/gmJw+mfn3A+jdQHGne+akypwzUjSM6XrezjTiZLlDDG+QpA0kwAnxSXw8H2SpVyynMSn4nu0iZmOiOZMtFY0jKlt/W7OFC5wTuJFrky+bBGlVIv3KGOTJNJNgasXV4u0NXOjHyeBFpFYCIf0FZLfYyf7ITu94JxUzXGcVi5D0lBwvKY9HfJ4yJxciyfH6V7yU1+o23E/Meqe/tjt6dTW8DM5xIokrnusfzE5b0zw5GFyg54nbpazXpcPnrMdxhp+t2C7xKrxcZXhBECRYegj+Z86D9BJP/yum1YrQ=" From 70cbd68250740af6c914f7b09d113d4f122b5f25 Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Tue, 21 Jul 2015 16:46:21 +0200 Subject: [PATCH 2/7] Experiment finished, nothing to see here (nw) --- src/mame/drivers/taitoair.c | 1 - 1 file changed, 1 deletion(-) diff --git a/src/mame/drivers/taitoair.c b/src/mame/drivers/taitoair.c index 55a61decafe..3c056eda61d 100644 --- a/src/mame/drivers/taitoair.c +++ b/src/mame/drivers/taitoair.c @@ -192,7 +192,6 @@ perhaps? The two writes seem to take only two values. - Air Inferno: Almost surely crashing during replay has missing smoke effect, looks quit odd atm. - Top Landing: Night stages might have wrong priority for stars-above-sea; - Input limiters / analog thresholds for both games; - - Special thanks to syq for being a cunt. */ #include "emu.h" From 0e5af95be23d1952cbcc603322a315d719bc0f5a Mon Sep 17 00:00:00 2001 From: Cowering Date: Tue, 21 Jul 2015 10:01:44 -0500 Subject: [PATCH 3/7] feed the pedantic monster (NW) --- 3rdparty/mongoose/mongoose.c | 2 +- src/emu/netlist/devices/nld_system.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/3rdparty/mongoose/mongoose.c b/3rdparty/mongoose/mongoose.c index fce6e0405b6..3fc2b63fd0a 100644 --- a/3rdparty/mongoose/mongoose.c +++ b/3rdparty/mongoose/mongoose.c @@ -5479,7 +5479,7 @@ static void iter2(struct ns_connection *nc, int ev, void *param) { (void) ev; //DBG(("%p [%s]", conn, msg)); - if (sscanf(msg, "%p %n", &func, &n) && func != NULL && conn != NULL) { + if (sscanf(msg, "%p %n", (void **) &func, &n) && func != NULL && conn != NULL) { conn->mg_conn.callback_param = (void *) (msg + n); func(&conn->mg_conn, MG_POLL); } diff --git a/src/emu/netlist/devices/nld_system.h b/src/emu/netlist/devices/nld_system.h index 76837f99d28..3f8de7bc2fc 100644 --- a/src/emu/netlist/devices/nld_system.h +++ b/src/emu/netlist/devices/nld_system.h @@ -294,7 +294,7 @@ private: SUB, DIV, PUSH_CONST, - PUSH_INPUT, + PUSH_INPUT }; struct rpn_inst From fef8a2ede5a23f77fcf9b862432b5dc87914458b Mon Sep 17 00:00:00 2001 From: Cowering Date: Tue, 21 Jul 2015 10:02:41 -0500 Subject: [PATCH 4/7] really, nothing to see here :) (NW) --- src/mame/drivers/taitoair.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/mame/drivers/taitoair.c b/src/mame/drivers/taitoair.c index 3c056eda61d..dc301dc0c66 100644 --- a/src/mame/drivers/taitoair.c +++ b/src/mame/drivers/taitoair.c @@ -184,12 +184,12 @@ perhaps? The two writes seem to take only two values. ****************************************************************************/ /*! - @todo - Framebuffer DMA requires palette switch to be selected dynamically, see at first stage Course Select in Top Landing. + @todo - Framebuffer DMA requires palette switch to be selected dynamically, see at first stage Course Select in Top Landing. My gut feeling is that 3d poly fill operation actually copies to internal buffer then a DMA op actually do the buffer-to-screen copy, including gradiation ROZ too; - Air Inferno: missing landing monitor camera (blackened); - Air Inferno: missing 3d HUD graphics; - Air Inferno: Expert course has wrong 3d geometry; - - Air Inferno: Almost surely crashing during replay has missing smoke effect, looks quit odd atm. + - Air Inferno: Almost surely crashing during replay has missing smoke effect, looks quite odd atm. - Top Landing: Night stages might have wrong priority for stars-above-sea; - Input limiters / analog thresholds for both games; */ @@ -354,9 +354,9 @@ WRITE8_MEMBER(taitoair_state::sound_bankswitch_w) [3] both games uses 0xb7, most likely a register setting. */ WRITE16_MEMBER(taitoair_state::dma_regs_w) -{ +{ printf("%08x %04x\n",offset,data); - + if(offset == 0 && ACCESSING_BITS_8_15) { if(data == 0x1fff) @@ -480,7 +480,7 @@ READ16_MEMBER(taitoair_state::dsp_muldiv_1_r) { if(m_dsp_muldiv_c_1 == 0) return 0xffff; /**< @todo true value? */ - + return m_dsp_muldiv_a_1*m_dsp_muldiv_b_1/m_dsp_muldiv_c_1; } @@ -503,7 +503,7 @@ READ16_MEMBER(taitoair_state::dsp_muldiv_2_r) { if(m_dsp_muldiv_c_2 == 0) return 0xffff; /**< @todo true value? */ - + return m_dsp_muldiv_a_2*m_dsp_muldiv_b_2/m_dsp_muldiv_c_2; } From b1578cbdcaaf90df8d56e497b5a06a40b1642c69 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Tue, 21 Jul 2015 17:17:03 +0200 Subject: [PATCH 5/7] New games added or promoted from NOT_WORKING status --------------------------------------------------- Spatter (315-5099) [Andrea Palazzetti] --- src/mame/drivers/system1.c | 45 +++++++++++++++++++++++++++++++++++-- src/mame/includes/system1.h | 1 + 2 files changed, 44 insertions(+), 2 deletions(-) diff --git a/src/mame/drivers/system1.c b/src/mame/drivers/system1.c index 6cbaa042973..7c3f8963367 100644 --- a/src/mame/drivers/system1.c +++ b/src/mame/drivers/system1.c @@ -47,6 +47,7 @@ bullfgt 6x8k 1x8k 6x8k 2x16k no ppi ???? 6069 thetogyu 3x16k 1x8k 6x8k 2x16k no pio 6073 spatter 3x16k 1x8k 6x8k 4x16k no pio 6394 6306 +spattera 3x16k 1x8k 6x8k 4x16k no pio 6599 6306 ssanchan 3x16k 1x8k 6x8k 4x16k no pio 6312 pitfall2 3x16k 1x8k 6x8k 2x16k no pio 6458(a) 6454 @@ -121,6 +122,18 @@ nobb 3x32k 1x16k 3x32k 4x32k yes ******************************************************************************* +Spatter (315-5099) +Sega 1984 + +This game runs on Sega System 1 hardware. + +834-5583-12 SPATTER (sticker) +834-5542 daughter board with 4 eproms (EPR6306, EPR6307, EPR6308, EPR6309) +834-5540 daughter board with logic ICs +315-5099 custom Z80 CPU w/security + +******************************************************************************* + Chop Lifter Sega 1985 @@ -2808,7 +2821,7 @@ ROM_END ROM_START( spattera ) ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "epr-6597.116", 0x0000, 0x4000, BAD_DUMP CRC(be80384d) SHA1(9e1f5807492b98c3f36a5b80466dcb2a1f1fead8) ) /* encrypted */ // consistent read, but fails ingame ROM check on PCB + ROM_LOAD( "epr-6597.116", 0x0000, 0x4000, CRC(fb928b9d) SHA1(0a9bede7a147009b9ebb8a0b73681359da665982) ) /* encrypted */ ROM_LOAD( "epr-6598.109", 0x4000, 0x4000, CRC(5dff037a) SHA1(8e6f6b75a89609ab0498d317c11e6d653343ffbe) ) /* encrypted */ ROM_LOAD( "epr-6599.96", 0x8000, 0x4000, CRC(7ba9de5b) SHA1(f18542c95e8241433ed995c213924ad1ce03cd5b) ) @@ -4958,6 +4971,34 @@ DRIVER_INIT_MEMBER(system1_state,spatter) sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable); } +DRIVER_INIT_MEMBER(system1_state,spattera) +{ + static const UINT8 convtable[32][4] = + { + /* opcode data address */ + /* A B C D A B C D */ + { 0xa0,0xa8,0x20,0x28 }, { 0x80,0xa0,0x00,0x20 }, /* ...0...0...0...0 */ + { 0x20,0x28,0x00,0x08 }, { 0x20,0x28,0x00,0x08 }, /* ...0...0...0...1 */ + { 0xa0,0xa8,0x20,0x28 }, { 0x08,0x28,0x00,0x20 }, /* ...0...0...1...0 */ + { 0x88,0x08,0xa8,0x28 }, { 0x88,0x08,0xa8,0x28 }, /* ...0...0...1...1 */ + { 0xa0,0xa8,0x20,0x28 }, { 0x20,0x28,0x00,0x08 }, /* ...0...1...0...0 */ + { 0x28,0xa8,0x20,0xa0 }, { 0x20,0x28,0x00,0x08 }, /* ...0...1...0...1 */ + { 0xa0,0xa8,0x20,0x28 }, { 0x08,0x28,0x00,0x20 }, /* ...0...1...1...0 */ + { 0x88,0x08,0xa8,0x28 }, { 0x88,0x08,0xa8,0x28 }, /* ...0...1...1...1 */ + { 0x28,0xa8,0x20,0xa0 }, { 0xa0,0xa8,0x20,0x28 }, /* ...1...0...0...0 */ + { 0x88,0x08,0xa8,0x28 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...0...0...1 */ + { 0x28,0xa8,0x20,0xa0 }, { 0x08,0x28,0x00,0x20 }, /* ...1...0...1...0 */ + { 0x28,0xa8,0x20,0xa0 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...0...1...1 */ + { 0x20,0x28,0x00,0x08 }, { 0x20,0x28,0x00,0x08 }, /* ...1...1...0...0 */ + { 0x88,0x08,0xa8,0x28 }, { 0x20,0x28,0x00,0x08 }, /* ...1...1...0...1 */ + { 0x08,0x28,0x00,0x20 }, { 0x80,0xa0,0x00,0x20 }, /* ...1...1...1...0 */ + { 0x08,0x28,0x00,0x20 }, { 0x88,0x08,0xa8,0x28 } /* ...1...1...1...1 */ + }; + + DRIVER_INIT_CALL(bank00); + sega_decode(m_maincpu_region->base(), m_decrypted_opcodes, 0x8000, convtable); +} + DRIVER_INIT_MEMBER(system1_state,pitfall2) { static const UINT8 convtable[32][4] = @@ -5615,7 +5656,7 @@ GAME( 1984, flicky, 0, sys1piox, flicky, system1_state, flicky, GAME( 1984, flickys2, flicky, sys1pio, flickys2, system1_state, bank00, ROT0, "Sega", "Flicky (128k Version, System 2, not encrypted)", GAME_SUPPORTS_SAVE ) GAME( 1984, thetogyu, bullfgt, sys1piox, bullfgt, system1_state, bullfgtj, ROT0, "Coreland / Sega", "The Togyu (315-5065, Japan)", GAME_SUPPORTS_SAVE ) GAME( 1984, spatter, 0, sys1piosx, spatter, system1_state, spatter, ROT0, "Sega", "Spatter (set 1)", GAME_SUPPORTS_SAVE ) -GAME( 1984, spattera, spatter, sys1piosx, spatter, system1_state, spatter, ROT0, "Sega", "Spatter (315-5099)", GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) +GAME( 1984, spattera, spatter, sys1piosx, spatter, system1_state, spattera, ROT0, "Sega", "Spatter (315-5099)", GAME_SUPPORTS_SAVE ) GAME( 1984, ssanchan, spatter, sys1piosx, spatter, system1_state, spatter, ROT0, "Sega", "Sanrin San Chan (Japan)", GAME_SUPPORTS_SAVE ) GAME( 1985, pitfall2, 0, sys1piox, pitfall2, system1_state, pitfall2, ROT0, "Sega", "Pitfall II (315-5093)", GAME_SUPPORTS_SAVE ) GAME( 1985, pitfall2a, pitfall2, sys1piox, pitfall2, system1_state, pitfall2, ROT0, "Sega", "Pitfall II (315-5093, Flicky Conversion)", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/includes/system1.h b/src/mame/includes/system1.h index c6d7e437841..1cdc17ee42a 100644 --- a/src/mame/includes/system1.h +++ b/src/mame/includes/system1.h @@ -115,6 +115,7 @@ public: DECLARE_DRIVER_INIT(seganinj); DECLARE_DRIVER_INIT(gardia); DECLARE_DRIVER_INIT(spatter); + DECLARE_DRIVER_INIT(spattera); TILE_GET_INFO_MEMBER(tile_get_info); virtual void machine_start(); virtual void machine_reset(); From c03b7d4203d75976c41fad089632ab42505f4130 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Tue, 21 Jul 2015 17:25:12 +0200 Subject: [PATCH 6/7] paranoia.c: enabled save state support (nw) --- src/mame/drivers/paranoia.c | 56 ++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/src/mame/drivers/paranoia.c b/src/mame/drivers/paranoia.c index 6cf11b6de02..3d4ab78d5d4 100644 --- a/src/mame/drivers/paranoia.c +++ b/src/mame/drivers/paranoia.c @@ -51,15 +51,15 @@ public: paranoia_state(const machine_config &mconfig, device_type type, const char *tag) : pce_common_state(mconfig, type, tag) { } - DECLARE_WRITE8_MEMBER(paranoia_8085_d000_w); - DECLARE_READ8_MEMBER(paranoia_z80_io_01_r); - DECLARE_READ8_MEMBER(paranoia_z80_io_02_r); - DECLARE_WRITE8_MEMBER(paranoia_z80_io_17_w); - DECLARE_WRITE8_MEMBER(paranoia_z80_io_37_w); - DECLARE_WRITE8_MEMBER(paranoia_i8155_a_w); - DECLARE_WRITE8_MEMBER(paranoia_i8155_b_w); - DECLARE_WRITE8_MEMBER(paranoia_i8155_c_w); - DECLARE_WRITE_LINE_MEMBER(paranoia_i8155_timer_out); + DECLARE_WRITE8_MEMBER(i8085_d000_w); + DECLARE_READ8_MEMBER(z80_io_01_r); + DECLARE_READ8_MEMBER(z80_io_02_r); + DECLARE_WRITE8_MEMBER(z80_io_17_w); + DECLARE_WRITE8_MEMBER(z80_io_37_w); + DECLARE_WRITE8_MEMBER(i8155_a_w); + DECLARE_WRITE8_MEMBER(i8155_b_w); + DECLARE_WRITE8_MEMBER(i8155_c_w); + DECLARE_WRITE_LINE_MEMBER(i8155_timer_out); }; @@ -90,7 +90,7 @@ static ADDRESS_MAP_START( pce_io , AS_IO, 8, paranoia_state ) AM_RANGE( 0x00, 0x03) AM_DEVREADWRITE( "huc6270", huc6270_device, read, write ) ADDRESS_MAP_END -WRITE8_MEMBER(paranoia_state::paranoia_8085_d000_w) +WRITE8_MEMBER(paranoia_state::i8085_d000_w) { //logerror( "D000 (8085) write %02x\n", data ); } @@ -99,7 +99,7 @@ static ADDRESS_MAP_START(paranoia_8085_map, AS_PROGRAM, 8, paranoia_state ) AM_RANGE( 0x0000, 0x7fff) AM_ROM AM_RANGE( 0x8000, 0x80ff) AM_DEVREADWRITE("i8155", i8155_device, memory_r, memory_w) AM_RANGE( 0x8100, 0x8107) AM_DEVREADWRITE("i8155", i8155_device, io_r, io_w) - AM_RANGE( 0xd000, 0xd000) AM_WRITE(paranoia_8085_d000_w ) + AM_RANGE( 0xd000, 0xd000) AM_WRITE(i8085_d000_w ) AM_RANGE( 0xe000, 0xe1ff) AM_RAM ADDRESS_MAP_END @@ -112,48 +112,48 @@ static ADDRESS_MAP_START(paranoia_z80_map, AS_PROGRAM, 8, paranoia_state ) AM_RANGE( 0x7000, 0x73ff) AM_RAM ADDRESS_MAP_END -READ8_MEMBER(paranoia_state::paranoia_z80_io_01_r) +READ8_MEMBER(paranoia_state::z80_io_01_r) { return 0; } -READ8_MEMBER(paranoia_state::paranoia_z80_io_02_r) +READ8_MEMBER(paranoia_state::z80_io_02_r) { return 0; } -WRITE8_MEMBER(paranoia_state::paranoia_z80_io_17_w) +WRITE8_MEMBER(paranoia_state::z80_io_17_w) { } -WRITE8_MEMBER(paranoia_state::paranoia_z80_io_37_w) +WRITE8_MEMBER(paranoia_state::z80_io_37_w) { } static ADDRESS_MAP_START(paranoia_z80_io_map, AS_IO, 8, paranoia_state ) ADDRESS_MAP_GLOBAL_MASK(0xff) - AM_RANGE( 0x01, 0x01 ) AM_READ(paranoia_z80_io_01_r ) - AM_RANGE( 0x02, 0x02 ) AM_READ(paranoia_z80_io_02_r ) - AM_RANGE( 0x17, 0x17 ) AM_WRITE(paranoia_z80_io_17_w ) - AM_RANGE( 0x37, 0x37 ) AM_WRITE(paranoia_z80_io_37_w ) + AM_RANGE( 0x01, 0x01 ) AM_READ(z80_io_01_r ) + AM_RANGE( 0x02, 0x02 ) AM_READ(z80_io_02_r ) + AM_RANGE( 0x17, 0x17 ) AM_WRITE(z80_io_17_w ) + AM_RANGE( 0x37, 0x37 ) AM_WRITE(z80_io_37_w ) ADDRESS_MAP_END -WRITE8_MEMBER(paranoia_state::paranoia_i8155_a_w) +WRITE8_MEMBER(paranoia_state::i8155_a_w) { //logerror("i8155 Port A: %02X\n", data); } -WRITE8_MEMBER(paranoia_state::paranoia_i8155_b_w) +WRITE8_MEMBER(paranoia_state::i8155_b_w) { //logerror("i8155 Port B: %02X\n", data); } -WRITE8_MEMBER(paranoia_state::paranoia_i8155_c_w) +WRITE8_MEMBER(paranoia_state::i8155_c_w) { //logerror("i8155 Port C: %02X\n", data); } -WRITE_LINE_MEMBER(paranoia_state::paranoia_i8155_timer_out) +WRITE_LINE_MEMBER(paranoia_state::i8155_timer_out) { //m_subcpu->set_input_line(I8085_RST55_LINE, state ? CLEAR_LINE : ASSERT_LINE ); //logerror("Timer out %d\n", state); @@ -175,10 +175,10 @@ static MACHINE_CONFIG_START( paranoia, paranoia_state ) MCFG_CPU_IO_MAP(paranoia_z80_io_map) MCFG_DEVICE_ADD("i8155", I8155, 1000000 /*?*/) - MCFG_I8155_OUT_PORTA_CB(WRITE8(paranoia_state, paranoia_i8155_a_w)) - MCFG_I8155_OUT_PORTB_CB(WRITE8(paranoia_state, paranoia_i8155_b_w)) - MCFG_I8155_OUT_PORTC_CB(WRITE8(paranoia_state, paranoia_i8155_c_w)) - MCFG_I8155_OUT_TIMEROUT_CB(WRITELINE(paranoia_state, paranoia_i8155_timer_out)) + MCFG_I8155_OUT_PORTA_CB(WRITE8(paranoia_state, i8155_a_w)) + MCFG_I8155_OUT_PORTB_CB(WRITE8(paranoia_state, i8155_b_w)) + MCFG_I8155_OUT_PORTC_CB(WRITE8(paranoia_state, i8155_c_w)) + MCFG_I8155_OUT_TIMEROUT_CB(WRITELINE(paranoia_state, i8155_timer_out)) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) @@ -217,4 +217,4 @@ ROM_START(paranoia) ROM_LOAD( "4.352", 0x18000, 0x8000, CRC(11297fed) SHA1(17a294e65ba1c4806307602dee4c7c627ad1fcfd) ) ROM_END -GAME( 1990, paranoia, 0, paranoia, paranoia, pce_common_state, pce_common, ROT0, "Naxat Soft", "Paranoia", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING ) +GAME( 1990, paranoia, 0, paranoia, paranoia, pce_common_state, pce_common, ROT0, "Naxat Soft", "Paranoia", GAME_IMPERFECT_SOUND | GAME_NOT_WORKING | GAME_SUPPORTS_SAVE ) From 59fd99be9b48b08d46a27b87e36882dd4bf5bd1c Mon Sep 17 00:00:00 2001 From: angelosa Date: Tue, 21 Jul 2015 20:50:46 +0200 Subject: [PATCH 7/7] Fixed World Heroes Perfect (Sega Saturn) TH Control Mode in SMPC. [Angelo Salese] --- src/emu/machine/smpc.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/emu/machine/smpc.c b/src/emu/machine/smpc.c index eab928f4daa..effb6ba9841 100644 --- a/src/emu/machine/smpc.c +++ b/src/emu/machine/smpc.c @@ -686,8 +686,7 @@ void saturn_state::smpc_comreg_exec(address_space &space, UINT8 data, UINT8 is_s case 0x0a: case 0x0b: popmessage ("SMPC: NETLINK %s, contact MAMEdev",(data & 1) ? "off" : "on"); - break; - case 0x0d: + break; case 0x0d: if(LOG_SMPC) printf ("SMPC: System Reset\n"); smpc_system_reset(); break; @@ -926,8 +925,9 @@ UINT8 saturn_state::smpc_th_control_mode(UINT8 pad_n) case 2: res = th<<6; // 1 C B Right Left Down Up + // WHP actually has a very specific code at 0x6015f30, doesn't like bits 0-1 active here ... res|= (((machine().root_device().ioport(padnames[pad_n])->read()>>4)) & 0x30); // C & B - res|= (((machine().root_device().ioport(padnames[pad_n])->read()>>12)) & 0xf); + res|= (((machine().root_device().ioport(padnames[pad_n])->read()>>12)) & 0xc); break; case 1: res = th<<6; @@ -939,9 +939,11 @@ UINT8 saturn_state::smpc_th_control_mode(UINT8 pad_n) // 0 Start A 0 0 Down Up res|= (((machine().root_device().ioport(padnames[pad_n])->read()>>6)) & 0x30); // Start & A res|= (((machine().root_device().ioport(padnames[pad_n])->read()>>12)) & 0x3); + // ... and actually wants bits 2 - 3 active here. + res|= 0xc; break; } - + return res; } @@ -1025,13 +1027,13 @@ WRITE8_MEMBER( saturn_state::saturn_SMPC_w ) { if(data & 0x40) { - if(LOG_PAD_CMD) printf("SMPC: BREAK request\n"); + if(LOG_PAD_CMD) printf("SMPC: BREAK request %02x\n",data); m_smpc.SR &= 0x0f; m_smpc.intback_stage = 0; } else if(data & 0x80) { - if(LOG_PAD_CMD) printf("SMPC: CONTINUE request\n"); + if(LOG_PAD_CMD) printf("SMPC: CONTINUE request %02x\n",data); machine().scheduler().timer_set(attotime::from_usec(700), timer_expired_delegate(FUNC(saturn_state::intback_peripheral),this),0); /* TODO: is timing correct? */ m_smpc.OREG[31] = 0x10; m_smpc.SF = 0x01; //TODO: set hand-shake flag?