Systems promoted to working

---------------------------
Montana Super Draw (4436-05, U5-0) [Brian Troha]

- seta/seta.cpp: made zingzipbl go a bit further, marked its Oki ROM as bad. Main blocker is the different sprite format.

- shared/segam1audio.cpp: measured clocks [Guru]
This commit is contained in:
Ivan Vangelista 2024-07-08 18:14:33 +02:00
parent ce215330ad
commit 0a51009b74
10 changed files with 98 additions and 78 deletions

View File

@ -82,7 +82,7 @@ void x1_001_device::device_start()
perspective.
jjsquawk has a garbage tile in the bottom left instead, but in this case the entire
m_spriteylow is initalized (to 0), but sprite entry 0 for the other tables is never
m_spriteylow is initialized (to 0), but sprite entry 0 for the other tables is never
written to, again meaning it picks up whatever we clear the RAM to as positional
values.

View File

@ -851,7 +851,12 @@ static INPUT_PORTS_START( rivierab )
INPUT_PORTS_END
static INPUT_PORTS_START( mosdraw )
PORT_INCLUDE( riviera )
PORT_INCLUDE( meritpoker )
PORT_MODIFY("DSW") // DSW affects only points per coins, everything seems hard coded values
PORT_DIPNAME( 0x10, 0x00, "Points Per Coin" ) PORT_DIPLOCATION("SW1:5")
PORT_DIPSETTING( 0x00, "5" )
PORT_DIPSETTING( 0x10, "1" )
PORT_MODIFY("IN2")
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // to bypass printer check TODO: proper emulation
@ -1995,7 +2000,6 @@ ROM_END
// Sub board CRT-203 includes 2 P8255A, parallel printer connection & MM58174AN RTC that plugs in through the CRT-200's P8255 socket.
// There is a battery that connects to the PCB to keep the CRT-200's Mosel MS6264L-10PC RAM active and also runs to the CRT-203 for the RTC (guess)
// Currently the game starts with an error, press F2 to configure RTC then press Deal (2)
ROM_START( mosdraw )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "4436-05_u5-0.u5", 0x0000, 0x8000, CRC(d0194059) SHA1(4e106c7e38fd92e005f5e1899b6fbca4ab62ce6d) ) // 4436-05 U5-0 041790
@ -2007,6 +2011,9 @@ ROM_START( mosdraw )
ROM_REGION( 0x2000, "gfx2", 0 )
ROM_LOAD( "tana_u40.u40", 0x00000, 0x2000, CRC(a45cae66) SHA1(499759badc006fa09706d349e252284949d20a2d) )
ROM_REGION( 0x2000, "nvram", 0 )
ROM_LOAD( "nvram", 0x0000, 0x2000, CRC(61351962) SHA1(b2a18563c41b58385d6b0ccbc621fddd0d82f1b5) ) // preconfigured NVRAM to avoid error on boot
ROM_END
ROM_START( bigappg )
@ -2989,7 +2996,7 @@ GAME( 1984, chkndrawa, chkndraw, pitboss, chkndraw, merit_state, empty_
GAME( 1987, riviera, 0, riviera, riviera, merit_state, empty_init, ROT0, "Merit", "Riviera Hi-Score (2131-08, U5-4A)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1986, rivieraa, riviera, riviera, riviera, merit_state, empty_init, ROT0, "Merit", "Riviera Hi-Score (2131-08, U5-4)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1986, rivierab, riviera, riviera, rivierab, merit_state, empty_init, ROT0, "Merit", "Riviera Hi-Score (2131-08, U5-2D)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
GAME( 1990, mosdraw, 0, mosdraw, mosdraw, merit_state, empty_init, ROT0, "Merit", "Montana Super Draw (4436-05, U5-0)", MACHINE_NOT_WORKING | MACHINE_NODEVICE_PRINTER | MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // needs printer and RTC hook up
GAME( 1990, mosdraw, 0, mosdraw, mosdraw, merit_state, empty_init, ROT0, "Merit", "Montana Super Draw (4436-05, U5-0)", MACHINE_NODEVICE_PRINTER | MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // needs printer and RTC hook up
GAME( 1986, bigappg, 0, bigappg, bigappg, merit_state, empty_init, ROT0, "Big Apple Games / Merit", "The Big Apple (2131-13, U5-0)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, misdraw, 0, misdraw, bigappg, merit_state, empty_init, ROT0, "Big Apple Games / Merit", "Michigan Super Draw (2131-16, U5-2)", MACHINE_SUPPORTS_SAVE )
@ -3008,33 +3015,33 @@ GAME( 1985, trvwza, trvwz, trvwhiz, trivia, merit_quiz_state, empty_
GAME( 1985, trvwzb, trvwz, trvwhiz, trivia, merit_quiz_state, empty_init, ROT0, "Merit", "Trivia ? Whiz (6221-00, Alt Gen trivia)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, trvwzv, trvwz, trvwhiz, trivia, merit_quiz_state, empty_init, ROT90, "Merit", "Trivia ? Whiz (6221-02, Vertical)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, trvwz2, 0, trvwhiz, trivia, merit_quiz_state, init_key<2>, ROT90, "Merit", "Trivia ? Whiz (6221-05, Edition 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, trvwz2a, trvwz2, trvwhiz, trivia, merit_quiz_state, init_key<2>, ROT90, "Merit", "Trivia ? Whiz (6221-05, Edition 2 Alt Sex trivia)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, trvwz2, 0, trvwhiz, trivia, merit_quiz_state, init_key<2>, ROT90, "Merit", "Trivia ? Whiz Edition 2 (6221-05)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, trvwz2a, trvwz2, trvwhiz, trivia, merit_quiz_state, init_key<2>, ROT90, "Merit", "Trivia ? Whiz Edition 2 (6221-05, Alt Sex trivia)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, trvwz3, 0, trvwhiz, trivia, merit_quiz_state, empty_init, ROT0, "Merit", "Trivia ? Whiz (6221-05, U5-0D, Edition 3)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, trvwz3a, trvwz3, trvwhiz, trivia, merit_quiz_state, empty_init, ROT0, "Merit", "Trivia ? Whiz (6221-05, U5-0C, Edition 3)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, trvwz3b, trvwz3, trvwhiz, trivia, merit_quiz_state, empty_init, ROT0, "Merit", "Trivia ? Whiz (6221-05, Edition 3 Sex trivia III)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, trvwz3v, trvwz3, trvwhiz, trivia, merit_quiz_state, empty_init, ROT90, "Merit", "Trivia ? Whiz (6221-04, U5-0E, Edition 3 Vertical)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, trvwz3, 0, trvwhiz, trivia, merit_quiz_state, empty_init, ROT0, "Merit", "Trivia ? Whiz Edition 3 (6221-05, U5-0D)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, trvwz3a, trvwz3, trvwhiz, trivia, merit_quiz_state, empty_init, ROT0, "Merit", "Trivia ? Whiz Edition 3 (6221-05, U5-0C)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, trvwz3b, trvwz3, trvwhiz, trivia, merit_quiz_state, empty_init, ROT0, "Merit", "Trivia ? Whiz Edition 3 (6221-05, with Sex trivia III)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, trvwz3v, trvwz3, trvwhiz, trivia, merit_quiz_state, empty_init, ROT90, "Merit", "Trivia ? Whiz Edition 3 (6221-04, U5-0E, Vertical)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, trvwz4, 0, trvwhziv, trvwhziv, merit_quiz_state, init_key<5>, ROT0, "Merit", "Trivia ? Whiz (6221-10, U5-0A, Edition 4)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, trvwz4v, trvwz4, trvwhziv, trvwhziv, merit_quiz_state, init_key<5>, ROT90, "Merit", "Trivia ? Whiz (6221-13, U5-0B, Edition 4 Vertical)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, trvwz4va, trvwz4, trvwhziv, trvwhziv, merit_quiz_state, init_key<5>, ROT90, "Merit", "Trivia ? Whiz (6221-13, U5-0B, Edition 4 Vertical Alt Sex trivia)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, trvwz4, 0, trvwhziv, trvwhziv, merit_quiz_state, init_key<5>, ROT0, "Merit", "Trivia ? Whiz Edition 4 (6221-10, U5-0A)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, trvwz4v, trvwz4, trvwhziv, trvwhziv, merit_quiz_state, init_key<5>, ROT90, "Merit", "Trivia ? Whiz Edition 4 (6221-13, U5-0B, Vertical)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, trvwz4va, trvwz4, trvwhziv, trvwhziv, merit_quiz_state, init_key<5>, ROT90, "Merit", "Trivia ? Whiz Edition 4 (6221-13, U5-0B, alt Sex trivia)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, tictac, 0, tictac, tictac, merit_quiz_state, init_key<8>, ROT0, "Merit", "Tic Tac Trivia (6221-23, U5-0C, 07/07/86)", MACHINE_SUPPORTS_SAVE ) // all new trivia categories
GAME( 1985, tictaca, tictac, tictac, tictac, merit_quiz_state, init_key<4>, ROT0, "Merit", "Tic Tac Trivia (6221-23, U5-0C, 02/11/86)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, tictacv, tictac, tictac, tictac, merit_quiz_state, init_key<4>, ROT90, "Merit", "Tic Tac Trivia (6221-22, U5-0 Vertical)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, tictacv, tictac, tictac, tictac, merit_quiz_state, init_key<4>, ROT90, "Merit", "Tic Tac Trivia (6221-22, U5-0, Vertical)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, phrcraze, 0, phrcraze, phrcrazs, merit_quiz_state, init_key<7>, ROT0, "Merit", "Phraze Craze (6221-40, U5-3A Expanded Questions)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, phrcrazea, phrcraze, phrcraze, phrcrazs, merit_quiz_state, init_key<7>, ROT0, "Merit", "Phraze Craze (6221-40, U5-3 Expanded Questions)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, phrcraze, 0, phrcraze, phrcrazs, merit_quiz_state, init_key<7>, ROT0, "Merit", "Phraze Craze (6221-40, U5-3A, Expanded Questions)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, phrcrazea, phrcraze, phrcraze, phrcrazs, merit_quiz_state, init_key<7>, ROT0, "Merit", "Phraze Craze (6221-40, U5-3, Expanded Questions)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, phrcrazeb, phrcraze, phrcraze, phrcraze, merit_quiz_state, init_key<7>, ROT0, "Merit", "Phraze Craze (6221-40, U5-0A)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, phrcrazec, phrcraze, phrcraze, phrcraza, merit_quiz_state, init_key<7>, ROT0, "Merit", "Phraze Craze (6221-40, U5-0)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, phrcrazev, phrcraze, phrcraze, phrcrazs, merit_quiz_state, init_key<7>, ROT90, "Merit", "Phraze Craze (6221-45, U5-2 Vertical)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, phrcrazev, phrcraze, phrcraze, phrcrazs, merit_quiz_state, init_key<7>, ROT90, "Merit", "Phraze Craze (6221-45, U5-2, Vertical)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, dtrvwz5, 0, dtrvwz5, dtrvwz5, merit_quiz_state, init_dtrvwz5, ROT0, "Merit", "Deluxe Trivia ? Whiz (6221-70, U5-0A Edition 5)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, dtrvwz5v, dtrvwz5, dtrvwz5, dtrvwz5, merit_quiz_state, init_dtrvwz5, ROT90, "Merit", "Deluxe Trivia ? Whiz (6221-75, U5-0 Edition 5 Vertical)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, dtrvwz5, 0, dtrvwz5, dtrvwz5, merit_quiz_state, init_dtrvwz5, ROT0, "Merit", "Deluxe Trivia ? Whiz Edition 5 (6221-70, U5-0A)", MACHINE_SUPPORTS_SAVE )
GAME( 1987, dtrvwz5v, dtrvwz5, dtrvwz5, dtrvwz5, merit_quiz_state, init_dtrvwz5, ROT90, "Merit", "Deluxe Trivia ? Whiz Edition 5 (6221-75, U5-0, Vertical)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, matchem, 0, couple, matchem, merit_state, init_crt209, ROT0, "Merit", "Match'em Up (6221-51, U5-1)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, matchemg, matchem, couple, matchemg, merit_state, init_crt209, ROT0, "Merit", "Match'em Up (6221-55, U5-1 German)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, matchemg, matchem, couple, matchemg, merit_state, init_crt209, ROT0, "Merit", "Match'em Up (6221-55, U5-1, German)", MACHINE_SUPPORTS_SAVE )
GAME( 1988, couple, matchem, couple, couple, merit_state, init_crt209, ROT0, "bootleg", "The Couples (set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1988, couplep, matchem, couple, couplep, merit_state, init_crt209, ROT0, "bootleg", "The Couples (set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1988, couplei, matchem, couple, couple, merit_state, init_crt209, ROT0, "bootleg", "The Couples (set 3)", MACHINE_SUPPORTS_SAVE )

View File

@ -20,8 +20,8 @@ TODO:
- ma6710 hangs at UART device check (PC=5e44). Bypassing it, game stops with 'TOD CLOCK ERROR';
- Never initializes RAMDAC;
- Never initializes CRTC on CRT-352 games;
- Map secondary NVRAM moduleM
- Map / connect up Dallas DS1216 RTCM
- Map secondary NVRAM module;
- Map / connect up Dallas DS1216 RTC;
- ma6710a/ma9800 start with game malfunction message. It can be started by switching IN2:2 on,
then pressing discard 3. Games 'Super Eight' and 'Black Jack' show GFX banking logic isn't correct.
'Black Jack' GFX are over 0x8000 in ROM but proper GFX bank bit hasn't been identified.
@ -762,11 +762,11 @@ lamps for control panel buttons
*/
static INPUT_PORTS_START( merit3xx )
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Discard 1")
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) PORT_NAME("Discard 1") // "Double Down" button in Blackjack
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) PORT_NAME("Discard 2")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Discard 3")
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Discard 4")
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Discard 5")
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) PORT_NAME("Discard 3") // "Split" button in Blackjack
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) PORT_NAME("Discard 4") // "Stand" button in Blackjack
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) PORT_NAME("Discard 5") // "Hit" button in Blackjack
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_BET )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT )
@ -836,10 +836,27 @@ static INPUT_PORTS_START( merit3xx )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
INPUT_PORTS_END
/*
Translations of on screen messages for ma9800:
Bedobott Ermek = Inserted Coins
Hivja A Gepkezelot = Call Attendant
Feketedoboz Hiba = Blackbox Error
Button labels:
TET = Bet
OSZT = Deal
KIFIZET = Collect
BEFEJEZ = Stand
ELDOB/VISSZAVESZ = Discard/Recover
It seems that this set uses a hopper instead of a printer like other sets.
*/
static INPUT_PORTS_START( ma9800 )
PORT_INCLUDE( merit3xx )
// PORT_START("IN1")
// PORT_MODIFY("IN1")
// PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) // Button labeled ELDOB/VISSZAVESZ
// PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) // Button labeled ELDOB/VISSZAVESZ
// PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) // Button labeled ELDOB/VISSZAVESZ
@ -853,12 +870,8 @@ static INPUT_PORTS_START( ma9800 )
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) // gives 1 credit at a time (25 cents)
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) // gives 4 credits at a time ($1.00)
// PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_STAND ) // Button labeled BEFEJEZ
PORT_DIPNAME( 0x20, 0x20, "IN1.6 Door" ) PORT_TOGGLE // <-- for ma9800 set, ON results in DOOR OPEN error
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x40, 0x40, "IN1.7 Door" ) PORT_TOGGLE // <-- for ma9800 set, ON results in DOOR OPEN error
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Door 2") PORT_CODE(KEYCODE_U) PORT_TOGGLE // Unknown what these 2 are but will give DOOR OPEN errors
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Door 3") PORT_CODE(KEYCODE_Y) PORT_TOGGLE // Unknown what these 2 are but will give DOOR OPEN errors
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) // gives 4 credits at a time ($1.00)
INPUT_PORTS_END

View File

@ -2052,8 +2052,8 @@ ROM_END
*/
GAME( 1994, tekken, 0, tekken, tekken, namcos11_state, empty_init, ROT0, "Namco", "Tekken (World, TE2/VER.C)", 0 )
GAME( 1994, tekkenac, tekken, tekken, tekken, namcos11_state, empty_init, ROT0, "Namco", "Tekken (Asia, TE4/VER.C)", 0 )
GAME( 1994, tekkenb, tekken, tekken, tekken, namcos11_state, empty_init, ROT0, "Namco", "Tekken (World, TE2/VER.B)", 0 )
GAME( 1994, tekkenac, tekken, tekken, tekken, namcos11_state, empty_init, ROT0, "Namco", "Tekken (Asia, TE4/VER.C)", 0 )
GAME( 1994, tekkenjb, tekken, tekken, tekken, namcos11_state, empty_init, ROT0, "Namco", "Tekken (Japan, TE1/VER.B)", 0 )
GAME( 1996, tekken2, 0, tekken2, tekken, namcos11_state, empty_init, ROT0, "Namco", "Tekken 2 Ver.B (World, TES2/VER.D)", 0 )
GAME( 1995, tekken2b, tekken2, tekken2o, tekken, namcos11_state, empty_init, ROT0, "Namco", "Tekken 2 Ver.B (World, TES2/VER.B)", 0 )

View File

@ -3565,8 +3565,8 @@ ROM_END
// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME, FLAGS
GAME( 1996, tekken3, 0, coh700, namcos12, namcos12_state, init_namcos12, ROT0, "Namco", "Tekken 3 (World, TET2/VER.E1)", 0 ) /* KC006 */
GAME( 1996, tekken3d, tekken3, coh700, namcos12, namcos12_state, init_namcos12, ROT0, "Namco", "Tekken 3 (World, TET2/VER.D)", 0 ) /* KC006 */
GAME( 1996, tekken3b, tekken3, coh700, namcos12, namcos12_state, init_namcos12, ROT0, "Namco", "Tekken 3 (World, TET2/VER.B)", 0 ) /* KC006 */
GAME( 1996, tekken3c, tekken3, coh700, namcos12, namcos12_state, init_namcos12, ROT0, "Namco", "Tekken 3 (World, TET2/VER.C)", 0 ) /* KC006 */
GAME( 1996, tekken3b, tekken3, coh700, namcos12, namcos12_state, init_namcos12, ROT0, "Namco", "Tekken 3 (World, TET2/VER.B)", 0 ) /* KC006 */
GAME( 1996, tekken3a, tekken3, coh700, namcos12, namcos12_state, init_namcos12, ROT0, "Namco", "Tekken 3 (World, TET2/VER.A)", 0 ) /* KC006 */
GAME( 1996, tekken3ud, tekken3, coh700, namcos12, namcos12_state, init_namcos12, ROT0, "Namco", "Tekken 3 (US, TET3/VER.D)", 0 ) /* KC006 */
GAME( 1996, tekken3ua, tekken3, coh700, namcos12, namcos12_state, init_namcos12, ROT0, "Namco", "Tekken 3 (US, TET3/VER.A)", 0 ) /* KC006 */

View File

@ -14,6 +14,7 @@ Known functional issues:
Sega Model 1 Hardware Overview
------------------------------
Documented by Guru
Note! This document is a Work-In-Progress and covers all the dumped Sega Model 1 games, including...
@ -1752,7 +1753,7 @@ void model1_state::model1(machine_config &config)
I8251(config, m_m1uart, 8000000); // uPD71051C, clock unknown
m_m1uart->txd_handler().set(m_m1audio, FUNC(segam1audio_device::write_txd));
clock_device &m1uart_clock(CLOCK(config, "m1uart_clock", 500000)); // 16 times 31.25MHz (standard Sega/MIDI sound data rate)
clock_device &m1uart_clock(CLOCK(config, "m1uart_clock", 16_MHz_XTAL / 2 / 16)); // 16 times 31.25kHz (standard Sega/MIDI sound data rate)
m1uart_clock.signal_handler().set(m_m1uart, FUNC(i8251_device::write_txc));
m1uart_clock.signal_handler().append(m_m1uart, FUNC(i8251_device::write_rxc));
}

View File

@ -2544,7 +2544,7 @@ void model2o_state::model2o(machine_config &config)
I8251(config, m_uart, 8000000); // uPD71051C, clock unknown
m_uart->txd_handler().set(m_m1audio, FUNC(segam1audio_device::write_txd));
clock_device &uart_clock(CLOCK(config, "uart_clock", 500000)); // 16 times 31.25MHz (standard Sega/MIDI sound data rate)
clock_device &uart_clock(CLOCK(config, "uart_clock", 16_MHz_XTAL / 2 / 16)); // 16 times 31.25kHz (standard Sega/MIDI sound data rate)
uart_clock.signal_handler().set(m_uart, FUNC(i8251_device::write_txc));
uart_clock.signal_handler().append(m_uart, FUNC(i8251_device::write_rxc));

View File

@ -1439,7 +1439,6 @@ protected:
void seta_vregs_w(u8 data);
u16 seta_dsw_r(offs_t offset);
u16 zingzipbl_unknown_r();
void blockcar_interrupt_w(u8 data);
u16 extdwnhl_watchdog_r();
void utoukond_sound_control_w(u8 data);
@ -2497,41 +2496,36 @@ void zombraid_state::zombraid_x1_map(address_map &map)
map(0x80000, 0xfffff).bankr("x1_bank");
}
u16 seta_state::zingzipbl_unknown_r()
{
return 0x0000;
}
void seta_state::zingzipbl_map(address_map &map)
{
map(0x000000, 0x07ffff).rom(); // ROM (up to 2MB)
map(0x200000, 0x20ffff).ram().share("workram"); // RAM (pointer for zombraid crosshair hack)
// map(0x400000, 0x400001).port_r("P1"); // P1
// map(0x400002, 0x400003).port_r("P2"); // P2
map(0x400002, 0x400003).r(FUNC(seta_state::zingzipbl_unknown_r)); // P2
// map(0x400004, 0x400005).port_r("COINS"); // Coins
map(0x500001, 0x500001).w(FUNC(seta_state::seta_coin_lockout_w)); // Coin Lockout
map(0x500003, 0x500003).w(FUNC(seta_state::seta_vregs_w)); // Video Registers
map(0x500004, 0x500005).nopw();
//map(0x600000, 0x600003).r(FUNC(seta_state::seta_dsw_r)); // DSW
map(0x700400, 0x700fff).ram().share("paletteram1"); // Palette
map(0x800000, 0x803fff).ram().w(m_layers[0], FUNC(x1_012_device::vram_w)).share("layer1"); // VRAM 0&1
map(0x880000, 0x883fff).ram().w(m_layers[1], FUNC(x1_012_device::vram_w)).share("layer2"); // VRAM 2&3
map(0x900000, 0x900005).rw(m_layers[0], FUNC(x1_012_device::vctrl_r), FUNC(x1_012_device::vctrl_w)); // VRAM 0&1 Ctrl
map(0x000000, 0x07ffff).rom(); // ok
map(0x200000, 0x20ffff).ram(); // ok
// TODO: coins (possibly 0x400000). For now only free-play 'works'.
map(0x500001, 0x500001).w(FUNC(seta_state::seta_coin_lockout_w)); // ok
map(0x500003, 0x500003).w(FUNC(seta_state::seta_vregs_w)); // maybe?
map(0x700400, 0x700fff).ram().share("paletteram1"); // ok
map(0x800000, 0x803fff).ram().w(m_layers[0], FUNC(x1_012_device::vram_w)).share("layer1"); // ok
map(0x880000, 0x883fff).ram().w(m_layers[1], FUNC(x1_012_device::vram_w)).share("layer2"); // ok
map(0x902001, 0x902001).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); // should be ok, but bad ROM
// the following appear to be video registers, but laid out differently than in the original. Trampoline galore for now. TODO: verify
map(0x902004, 0x902005).lw16(NAME([this] (offs_t offset, uint16_t data, uint16_t mem_mask) { m_layers[1]->vctrl_w(1, data, mem_mask); }));
map(0x902006, 0x902007).lw16(NAME([this] (offs_t offset, uint16_t data, uint16_t mem_mask) { m_layers[1]->vctrl_w(0, data, mem_mask); }));
map(0x902008, 0x902009).lw16(NAME([this] (offs_t offset, uint16_t data, uint16_t mem_mask) { m_layers[0]->vctrl_w(1, data, mem_mask); }));
map(0x90200a, 0x90200b).lw16(NAME([this] (offs_t offset, uint16_t data, uint16_t mem_mask) { m_layers[0]->vctrl_w(0, data, mem_mask); }));
map(0x900004, 0x900005).lw16(NAME([this] (offs_t offset, uint16_t data, uint16_t mem_mask) { m_layers[0]->vctrl_w(2, data, mem_mask); }));
map(0x980004, 0x980005).lw16(NAME([this] (offs_t offset, uint16_t data, uint16_t mem_mask) { m_layers[1]->vctrl_w(2, data, mem_mask); }));
map(0x902010, 0x902013).r(FUNC(seta_state::seta_dsw_r)); // ok
map(0x902014, 0x902015).portr("P1"); // ok
map(0x902016, 0x902017).portr("P2"); // ok
//map(0x902006, 0x902007).w // writes 0 here on start up
map(0x902010, 0x902013).r(FUNC(seta_state::zingzipbl_unknown_r));
map(0x980000, 0x980005).rw(m_layers[1], FUNC(x1_012_device::vctrl_r), FUNC(x1_012_device::vctrl_w)); // VRAM 2&3 Ctrl
// TODO: sprites also seem to have different registers, need correct implementation
map(0xa00000, 0xa005ff).ram().rw(m_spritegen, FUNC(x1_001_device::spriteylow_r16), FUNC(x1_001_device::spriteylow_w16)); // Sprites Y
map(0xa00600, 0xa00607).ram().rw(m_spritegen, FUNC(x1_001_device::spritectrl_r16), FUNC(x1_001_device::spritectrl_w16));
map(0xa00608, 0xa00fff).ram(); // zeroed on start up
map(0xa00600, 0xa00607).ram().rw(m_spritegen, FUNC(x1_001_device::spritectrl_r16), FUNC(x1_001_device::spritectrl_w16));
map(0xa80000, 0xa80001).ram(); // ? 0x4000
map(0xb00000, 0xb03fff).ram().rw(m_spritegen, FUNC(x1_001_device::spritecode_r16), FUNC(x1_001_device::spritecode_w16)); // Sprites Code + X + Attr
map(0xc00000, 0xc000ff).ram(); // zeroed on startup
map(0xe00000, 0xe00001).nopw(); // ? VBlank IRQ Ack
map(0xf00000, 0xf00001).nopw(); // ? Sound IRQ Ack
map(0xc00000, 0xc000ff).ram(); // zeroed on startup, doesn't seem to be used later
map(0xe00000, 0xe00001).w(m_watchdog, FUNC(watchdog_timer_device::reset16_w));
}
void seta_state::jjsquawb_map(address_map &map)
@ -9016,8 +9010,8 @@ void seta_state::zingzipbl(machine_config &config)
M68000(config.replace(), m_maincpu, 16000000); // 16 MHz
m_maincpu->set_addrmap(AS_PROGRAM, &seta_state::zingzipbl_map);
TIMER(config, "scantimer").configure_scanline(FUNC(seta_state::seta_interrupt_1_and_2), "screen", 0, 1);
subdevice<screen_device>("screen")->screen_vblank().set_nop();
subdevice<screen_device>("screen")->screen_vblank().set_inputline(m_maincpu, 6, HOLD_LINE); // TODO: there's probably more then this
config.device_remove("x1snd");
@ -9731,8 +9725,8 @@ ROM_START( zingzipbl )
ROM_COPY( "gfxtemp", 0x080000, 0x000000, 0x80000 )
ROM_COPY( "gfxtemp", 0x180000, 0x080000, 0x80000 )
ROM_REGION( 0x100000, "oki", 0 ) // OKI Samples - Not Seta
ROM_LOAD( "8", 0x000000, 0x40000, CRC(7927a200) SHA1(fd6163d2867959ec14b418d6207ae024afd3b654) )
ROM_REGION( 0x40000, "oki", 0 ) // OKI Samples - Not Seta
ROM_LOAD( "8", 0x00000, 0x40000, BAD_DUMP CRC(7927a200) SHA1(fd6163d2867959ec14b418d6207ae024afd3b654) ) // BADADDR xxxxxxxxxxxxxxx-xx
ROM_END
ROM_START( atehate )
@ -11346,7 +11340,7 @@ GAME( 1992, neobattl, 0, umanclub, neobattl, seta_state, empty_ini
GAME( 1992, umanclub, 0, umanclub, umanclub, seta_state, empty_init, ROT0, "Banpresto", "Ultraman Club - Tatakae! Ultraman Kyoudai!!", 0 )
GAME( 1992, zingzip, 0, zingzip, zingzip, seta_state, empty_init, ROT270, "Allumer / Tecmo", "Zing Zing Zip (World) / Zhen Zhen Ji Pao (China?)", 0 ) // This set has Chinese Characters in Title screen, it distributed for Chinese market/or Title: DSW?
GAME( 1992, zingzipbl, zingzip, zingzipbl, zingzip, seta_state, empty_init, ROT270, "bootleg", "Zing Zing Zip (bootleg)", MACHINE_NOT_WORKING )
GAME( 1992, zingzipbl, zingzip, zingzipbl, zingzip, seta_state, empty_init, ROT270, "bootleg", "Zing Zing Zip (bootleg)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // different video registers, bad Oki ROM dump
GAME( 1993, atehate, 0, atehate, atehate, seta_state, empty_init, ROT0, "Athena", "Athena no Hatena?", 0 )

View File

@ -52,33 +52,37 @@ DEFINE_DEVICE_TYPE(SEGAM1AUDIO, segam1audio_device, "segam1audio", "Sega Model 1
void segam1audio_device::device_add_mconfig(machine_config &config)
{
M68000(config, m_audiocpu, 10000000); // verified on real h/w
M68000(config, m_audiocpu, 20_MHz_XTAL / 2); // verified on real h/w
m_audiocpu->set_addrmap(AS_PROGRAM, &segam1audio_device::segam1audio_map);
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
YM3438(config, m_ym, 8_MHz_XTAL);
YM3438(config, m_ym, 16_MHz_XTAL / 2);
m_ym->add_route(0, "lspeaker", 0.30);
m_ym->add_route(1, "rspeaker", 0.30);
MULTIPCM(config, m_multipcm_1, 10_MHz_XTAL);
MULTIPCM(config, m_multipcm_1, 20_MHz_XTAL / 2);
m_multipcm_1->set_addrmap(0, &segam1audio_device::mpcm1_map);
m_multipcm_1->add_route(0, "lspeaker", 0.5);
m_multipcm_1->add_route(1, "rspeaker", 0.5);
MULTIPCM(config, m_multipcm_2, 10_MHz_XTAL);
MULTIPCM(config, m_multipcm_2, 20_MHz_XTAL / 2);
m_multipcm_2->set_addrmap(0, &segam1audio_device::mpcm2_map);
m_multipcm_2->add_route(0, "lspeaker", 0.5);
m_multipcm_2->add_route(1, "rspeaker", 0.5);
I8251(config, m_uart, 8_MHz_XTAL); // T82C51, clock unknown
I8251(config, m_uart, 16_MHz_XTAL / 2); // T82C51
m_uart->rxrdy_handler().set_inputline(m_audiocpu, M68K_IRQ_2);
m_uart->txd_handler().set(FUNC(segam1audio_device::output_txd));
clock_device &uart_clock(CLOCK(config, "uart_clock", 500000)); // 16 times 31.25MHz (standard Sega/MIDI sound data rate)
clock_device &uart_clock(CLOCK(config, "uart_clock", 16_MHz_XTAL / 2 / 16)); // 16 times 31.25kHz (standard Sega/MIDI sound data rate)
uart_clock.signal_handler().set(m_uart, FUNC(i8251_device::write_txc));
uart_clock.signal_handler().append(m_uart, FUNC(i8251_device::write_rxc));
// DAC output clocks measures:
// BYTECLK = 10/8 (1.25MHz)
// WORDCLK = 10/8/28 (44.642857kHz)
}
//**************************************************************************

View File

@ -45,6 +45,7 @@ It only contains a 27C512 or 27C1024 and a X24C04.
#include "machine/6522via.h"
#include "machine/i2cmem.h"
#include "machine/msm6242.h"
#include "machine/r65c52.h"
#include "sound/ay8910.h"
#include "emupal.h"
@ -165,7 +166,7 @@ void ramstar_state::ramstar(machine_config &config)
R65C22(config, "via", 3.6864_MHz_XTAL / 2); // divider not verified
// TODO: R65C52 DACIA
R65C52(config, "dacia", 3.6864_MHz_XTAL / 2); // divider not verified
I80C31(config, m_cartcpu, 6_MHz_XTAL); // (absence of) divider not verified
m_cartcpu->set_addrmap(AS_PROGRAM, &ramstar_state::cart_program_map);