mirror of
https://github.com/holub/mame
synced 2025-06-09 14:22:41 +03:00
New systems marked not working
------------------------------ Mahjong The Mysterious World Returns (Japan) [buffi] - merit/merit.cpp: removed duplicate set, improved documentation [Brian Troha] - seibu/bloodbro_ms.cpp: fleshed out the driver. Still missing sound and sprite / tilemap priorities
This commit is contained in:
parent
7de867b3d7
commit
0fe1c036aa
@ -113,6 +113,8 @@ TODO:
|
|||||||
|
|
||||||
- implement palette RAM enable in most games. Done for seljan2 (in a convoluted way).
|
- implement palette RAM enable in most games. Done for seljan2 (in a convoluted way).
|
||||||
|
|
||||||
|
- mjmysterr: background while playing seems of wrong color
|
||||||
|
|
||||||
Notes:
|
Notes:
|
||||||
|
|
||||||
- all games using black as default palette is trusted from a real rongrong PCB;
|
- all games using black as default palette is trusted from a real rongrong PCB;
|
||||||
@ -11719,7 +11721,7 @@ ROM_START( mjmyorntr ) // PCB seems mostly similar to the mjschuka one
|
|||||||
ROM_LOAD( "71s2.5b", 0x00000, 0x40000, CRC(5a283aca) SHA1(bdb3e70dcbe04d6be3dc1bca0a4df7d9fd04506d) )
|
ROM_LOAD( "71s2.5b", 0x00000, 0x40000, CRC(5a283aca) SHA1(bdb3e70dcbe04d6be3dc1bca0a4df7d9fd04506d) )
|
||||||
ROM_RELOAD( 0x10000, 0x40000 )
|
ROM_RELOAD( 0x10000, 0x40000 )
|
||||||
|
|
||||||
ROM_REGION( 0x1c0000, "blitter", 0 ) // same as mjmyorn2 but for minor differences in 71s6.2c
|
ROM_REGION( 0x1c0000, "blitter", 0 ) // same as mjmyorn2 but for minor differences in 71s6.12c
|
||||||
ROM_LOAD( "71s3.11a", 0x000000, 0x80000, CRC(1debae36) SHA1(670fa1203b9f127f9ce3150a4a0cae730cbc426f) )
|
ROM_LOAD( "71s3.11a", 0x000000, 0x80000, CRC(1debae36) SHA1(670fa1203b9f127f9ce3150a4a0cae730cbc426f) )
|
||||||
ROM_LOAD( "71s4.12a", 0x080000, 0x80000, CRC(fe9953f7) SHA1(db7bef218f830f7a0e7d68ee6ff363f9b5c2966c) )
|
ROM_LOAD( "71s4.12a", 0x080000, 0x80000, CRC(fe9953f7) SHA1(db7bef218f830f7a0e7d68ee6ff363f9b5c2966c) )
|
||||||
ROM_LOAD( "71s5.11c", 0x100000, 0x80000, CRC(6d0fd29a) SHA1(9b31668acf1790d9aecd1f8e8c0cb52a7a625d2d) )
|
ROM_LOAD( "71s5.11c", 0x100000, 0x80000, CRC(6d0fd29a) SHA1(9b31668acf1790d9aecd1f8e8c0cb52a7a625d2d) )
|
||||||
@ -11729,6 +11731,22 @@ ROM_START( mjmyorntr ) // PCB seems mostly similar to the mjschuka one
|
|||||||
ROM_LOAD( "71s1.1b", 0x00000, 0x20000, CRC(09b7a9b2) SHA1(64d9ccbb726bb6c5b362afc92bca2e3db87fd454) )
|
ROM_LOAD( "71s1.1b", 0x00000, 0x20000, CRC(09b7a9b2) SHA1(64d9ccbb726bb6c5b362afc92bca2e3db87fd454) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
ROM_START( mjmysterr )
|
||||||
|
ROM_REGION( 0x50000+8*0x1000, "maincpu", 0 )
|
||||||
|
ROM_LOAD( "77s2.5c", 0x00000, 0x40000, CRC(a2b3a480) SHA1(8d2db056d3126ba3433fe3b76b9ee7b3324cf78b) )
|
||||||
|
ROM_RELOAD( 0x10000, 0x40000 )
|
||||||
|
|
||||||
|
ROM_REGION( 0x5a0000, "blitter", 0 ) // same as mjmyster but for minor differences in 77s6.12d
|
||||||
|
ROM_LOAD( "77s3.11a", 0x400000, 0x80000, CRC(a287589a) SHA1(58659dd7e019d1d32efeaec548c84a7ded637c50) )
|
||||||
|
ROM_LOAD( "77s4.12a", 0x480000, 0x80000, CRC(a3475059) SHA1(ec86dcea3314b65d391a970680c021899c16449e) )
|
||||||
|
ROM_LOAD( "77s5.11c", 0x500000, 0x80000, CRC(f45c24d6) SHA1(0eca68f2ca5722717f27ac0839359966daa2715b) )
|
||||||
|
ROM_LOAD( "77s6.12c", 0x580000, 0x20000, CRC(ebe64e5a) SHA1(0dbad5af95671eff3986937c991c31c84f2a56eb) ) // 1xxxxxxxxxxxxxxxxx = 0xFF
|
||||||
|
ROM_IGNORE( 0x20000 )
|
||||||
|
|
||||||
|
ROM_REGION( 0x40000, "oki", 0 ) // same as many other games
|
||||||
|
ROM_LOAD( "71s1.1b", 0x00000, 0x20000, CRC(09b7a9b2) SHA1(64d9ccbb726bb6c5b362afc92bca2e3db87fd454) )
|
||||||
|
ROM_END
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
Mahjong The Mysterious Universe
|
Mahjong The Mysterious Universe
|
||||||
@ -12759,6 +12777,8 @@ GAME( 1996, mjflove, 0, mjflove, mjflove, ddenlovr_state, empty_
|
|||||||
|
|
||||||
GAME( 1997, mjmyorntr, 0, mjmyorntr, mjschuka, ddenlovr_state, empty_init, ROT0, "Dynax", "Mahjong The Mysterious Orient Returns (Japan, v1.00)", MACHINE_NO_COCKTAIL ) // no copyright warning, assume Japan from game strings
|
GAME( 1997, mjmyorntr, 0, mjmyorntr, mjschuka, ddenlovr_state, empty_init, ROT0, "Dynax", "Mahjong The Mysterious Orient Returns (Japan, v1.00)", MACHINE_NO_COCKTAIL ) // no copyright warning, assume Japan from game strings
|
||||||
|
|
||||||
|
GAME( 1997, mjmysterr, 0, mjmyorntr, mjschuka, ddenlovr_state, empty_init, ROT0, "Dynax", "Mahjong The Mysterious World Returns (Japan)", MACHINE_NOT_WORKING | MACHINE_NO_COCKTAIL | MACHINE_IMPERFECT_GRAPHICS ) // no copyright warning, assume Japan from game strings
|
||||||
|
|
||||||
GAME( 1997, hkagerou, 0, hkagerou, hkagerou, hanakanz_state, empty_init, ROT0, "Nakanihon / Dynax", "Hana Kagerou (Japan)", MACHINE_NO_COCKTAIL )
|
GAME( 1997, hkagerou, 0, hkagerou, hkagerou, hanakanz_state, empty_init, ROT0, "Nakanihon / Dynax", "Hana Kagerou (Japan)", MACHINE_NO_COCKTAIL )
|
||||||
|
|
||||||
GAME( 1998, mjchuuka, 0, mjchuuka, mjchuuka, hanakanz_state, empty_init, ROT0, "Dynax", "Maque Zhonghua Ernu (Taiwan)", MACHINE_NO_COCKTAIL )
|
GAME( 1998, mjchuuka, 0, mjchuuka, mjchuuka, hanakanz_state, empty_init, ROT0, "Dynax", "Maque Zhonghua Ernu (Taiwan)", MACHINE_NO_COCKTAIL )
|
||||||
|
@ -1322,7 +1322,7 @@ ROM_END
|
|||||||
|
|
||||||
// YEAR, NAME, PARENT, MACHINE, INPUT, CLASS, INIT, ROT, COMPANY, FULLNAME
|
// YEAR, NAME, PARENT, MACHINE, INPUT, CLASS, INIT, ROT, COMPANY, FULLNAME
|
||||||
|
|
||||||
GAME( 1991, bigkarnk, 0, bigkarnk, bigkarnk, bigkarnk_state, empty_init, ROT0, "Gaelco", "Big Karnak (ver. 1.0, checksum 1e38c94 )", MACHINE_SUPPORTS_SAVE )
|
GAME( 1991, bigkarnk, 0, bigkarnk, bigkarnk, bigkarnk_state, empty_init, ROT0, "Gaelco", "Big Karnak (ver. 1.0, checksum 1e38c94)", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1991, bigkarnka, bigkarnk, bigkarnk, bigkarnk, bigkarnk_state, empty_init, ROT0, "Gaelco", "Big Karnak (ver. 1.0, checksum 1e38b94)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1991, bigkarnka, bigkarnk, bigkarnk, bigkarnk, bigkarnk_state, empty_init, ROT0, "Gaelco", "Big Karnak (ver. 1.0, checksum 1e38b94)", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1995, biomtoy, 0, maniacsq, biomtoy, gaelco_state, empty_init, ROT0, "Gaelco / Zeus", "Biomechanical Toy (ver. 1.0.1885, checksum 69f5e032)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1995, biomtoy, 0, maniacsq, biomtoy, gaelco_state, empty_init, ROT0, "Gaelco / Zeus", "Biomechanical Toy (ver. 1.0.1885, checksum 69f5e032)", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1995, biomtoya, biomtoy, maniacsq, biomtoy, gaelco_state, empty_init, ROT0, "Gaelco / Zeus", "Biomechanical Toy (ver. 1.0.1884, checksum 3f316c70)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1995, biomtoya, biomtoy, maniacsq, biomtoy, gaelco_state, empty_init, ROT0, "Gaelco / Zeus", "Biomechanical Toy (ver. 1.0.1884, checksum 3f316c70)", MACHINE_SUPPORTS_SAVE )
|
||||||
|
@ -17668,6 +17668,7 @@ mjmyorn2
|
|||||||
mjmyornt
|
mjmyornt
|
||||||
mjmyorntr
|
mjmyorntr
|
||||||
mjmyster
|
mjmyster
|
||||||
|
mjmysterr
|
||||||
mjmyuniv
|
mjmyuniv
|
||||||
mjmyunivh
|
mjmyunivh
|
||||||
mjmywrld
|
mjmywrld
|
||||||
@ -27681,7 +27682,6 @@ rivierab
|
|||||||
rivierac
|
rivierac
|
||||||
rivierad
|
rivierad
|
||||||
rivierae
|
rivierae
|
||||||
rivieraf
|
|
||||||
tictac
|
tictac
|
||||||
tictaca
|
tictaca
|
||||||
tictacuk
|
tictacuk
|
||||||
|
@ -1956,12 +1956,12 @@ ROM_START( riviera )
|
|||||||
ROM_LOAD( "2131-08_u5-4a.u5", 0x0000, 0x8000, CRC(0bc8cf26) SHA1(da52010be2d44a240160bb1a13288b35e8feade2) ) // 08 U5-4A 111287 2131-84A, label shows (c) 1988
|
ROM_LOAD( "2131-08_u5-4a.u5", 0x0000, 0x8000, CRC(0bc8cf26) SHA1(da52010be2d44a240160bb1a13288b35e8feade2) ) // 08 U5-4A 111287 2131-84A, label shows (c) 1988
|
||||||
|
|
||||||
ROM_REGION( 0x6000, "gfx1", 0 )
|
ROM_REGION( 0x6000, "gfx1", 0 )
|
||||||
ROM_LOAD( "hisc_u39.u39", 0x00000, 0x2000, CRC(1814c2ea) SHA1(fecc5dc1c0a56cbc7b68ee6a52222de348d6cc79) )
|
ROM_LOAD( "hisc_u39_c1987_mii.u39", 0x00000, 0x2000, CRC(1814c2ea) SHA1(fecc5dc1c0a56cbc7b68ee6a52222de348d6cc79) )
|
||||||
ROM_LOAD( "hisc_u38.u38", 0x02000, 0x2000, CRC(ef1d7a80) SHA1(539662bee187a300a6f1bcded954758c87171219) )
|
ROM_LOAD( "hisc_u38_c1987_mii.u38", 0x02000, 0x2000, CRC(ef1d7a80) SHA1(539662bee187a300a6f1bcded954758c87171219) )
|
||||||
ROM_LOAD( "hisc_u37.u37", 0x04000, 0x2000, CRC(f6e709f8) SHA1(02905be912d0aa794f82926462f854e8e67dc407) )
|
ROM_LOAD( "hisc_u37_c1987_mii.u37", 0x04000, 0x2000, CRC(f6e709f8) SHA1(02905be912d0aa794f82926462f854e8e67dc407) )
|
||||||
|
|
||||||
ROM_REGION( 0x2000, "gfx2", 0 )
|
ROM_REGION( 0x2000, "gfx2", 0 )
|
||||||
ROM_LOAD( "hisc_u40.u40", 0x00000, 0x2000, CRC(6d2a1ca8) SHA1(96ef3e0914c2b213ed9c9082fa3e27d75d52a8ec) )
|
ROM_LOAD( "hisc_u40_c1987_mii.u40", 0x00000, 0x2000, CRC(6d2a1ca8) SHA1(96ef3e0914c2b213ed9c9082fa3e27d75d52a8ec) )
|
||||||
|
|
||||||
ROM_REGION( 0x117, "plds", 0 )
|
ROM_REGION( 0x117, "plds", 0 )
|
||||||
ROM_LOAD( "dec003.u13", 0x000, 0x117, CRC(5b9a2fec) SHA1(c56c7bbe13028903cfc82440ee8b24df855134c2) ) // PAL16L8ANC - brute forced
|
ROM_LOAD( "dec003.u13", 0x000, 0x117, CRC(5b9a2fec) SHA1(c56c7bbe13028903cfc82440ee8b24df855134c2) ) // PAL16L8ANC - brute forced
|
||||||
@ -1971,119 +1971,80 @@ ROM_START( rivieraa )
|
|||||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||||
ROM_LOAD( "2131-08_u5-4.u5", 0x0000, 0x8000, CRC(ce0b00f2) SHA1(c467c2c08d0bbadf80d67f41e17127e08ce3b3ff) ) // 08 U5-4 111786 2131-84, label shows (c) 1987
|
ROM_LOAD( "2131-08_u5-4.u5", 0x0000, 0x8000, CRC(ce0b00f2) SHA1(c467c2c08d0bbadf80d67f41e17127e08ce3b3ff) ) // 08 U5-4 111786 2131-84, label shows (c) 1987
|
||||||
|
|
||||||
ROM_REGION( 0x6000, "gfx1", 0 )
|
|
||||||
ROM_LOAD( "hisc_u39.u39", 0x00000, 0x2000, CRC(1814c2ea) SHA1(fecc5dc1c0a56cbc7b68ee6a52222de348d6cc79) )
|
|
||||||
ROM_LOAD( "hisc_u38.u38", 0x02000, 0x2000, CRC(ef1d7a80) SHA1(539662bee187a300a6f1bcded954758c87171219) )
|
|
||||||
ROM_LOAD( "hisc_u37.u37", 0x04000, 0x2000, CRC(f6e709f8) SHA1(02905be912d0aa794f82926462f854e8e67dc407) )
|
|
||||||
|
|
||||||
ROM_REGION( 0x2000, "gfx2", 0 )
|
|
||||||
ROM_LOAD( "hisc_u40.u40", 0x00000, 0x2000, CRC(6d2a1ca8) SHA1(96ef3e0914c2b213ed9c9082fa3e27d75d52a8ec) )
|
|
||||||
|
|
||||||
ROM_REGION( 0x117, "plds", 0 )
|
|
||||||
ROM_LOAD( "dec003.u13", 0x000, 0x117, CRC(5b9a2fec) SHA1(c56c7bbe13028903cfc82440ee8b24df855134c2) ) // PAL16L8ANC - brute forced
|
|
||||||
ROM_END
|
|
||||||
|
|
||||||
ROM_START( rivierab )
|
|
||||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
|
||||||
ROM_LOAD( "2131-08_u5-2d.u5", 0x0000, 0x8000, CRC(64c6892b) SHA1(d245d4a9933e3b21279542da0cb6ee641569ef6c) ) // 08 U5-2D 022086 2131-82d, label shows (c) 1985
|
|
||||||
|
|
||||||
ROM_REGION( 0x6000, "gfx1", 0 )
|
|
||||||
ROM_LOAD( "hisc_u39.u39", 0x00000, 0x2000, CRC(1814c2ea) SHA1(fecc5dc1c0a56cbc7b68ee6a52222de348d6cc79) )
|
|
||||||
ROM_LOAD( "hisc_u38.u38", 0x02000, 0x2000, CRC(ef1d7a80) SHA1(539662bee187a300a6f1bcded954758c87171219) )
|
|
||||||
ROM_LOAD( "hisc_u37.u37", 0x04000, 0x2000, CRC(f6e709f8) SHA1(02905be912d0aa794f82926462f854e8e67dc407) )
|
|
||||||
|
|
||||||
ROM_REGION( 0x2000, "gfx2", 0 )
|
|
||||||
ROM_LOAD( "hisc_u40.u40", 0x00000, 0x2000, CRC(6d2a1ca8) SHA1(96ef3e0914c2b213ed9c9082fa3e27d75d52a8ec) )
|
|
||||||
|
|
||||||
ROM_REGION( 0x117, "plds", 0 )
|
|
||||||
ROM_LOAD( "dec003.u13", 0x000, 0x117, CRC(5b9a2fec) SHA1(c56c7bbe13028903cfc82440ee8b24df855134c2) ) // PAL16L8ANC - brute forced
|
|
||||||
ROM_END
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
Riviera High Score.
|
|
||||||
2131-08, U5-4, 111786
|
|
||||||
|
|
||||||
*/
|
|
||||||
ROM_START( rivierac )
|
|
||||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
|
||||||
ROM_LOAD( "nosticker.u5", 0x0000, 0x8000, CRC(ce0b00f2) SHA1(c467c2c08d0bbadf80d67f41e17127e08ce3b3ff) )
|
|
||||||
|
|
||||||
ROM_REGION( 0x6000, "gfx1", 0 )
|
ROM_REGION( 0x6000, "gfx1", 0 )
|
||||||
ROM_LOAD( "hisc_u39_c1987_mii.u39", 0x00000, 0x2000, CRC(1814c2ea) SHA1(fecc5dc1c0a56cbc7b68ee6a52222de348d6cc79) )
|
ROM_LOAD( "hisc_u39_c1987_mii.u39", 0x00000, 0x2000, CRC(1814c2ea) SHA1(fecc5dc1c0a56cbc7b68ee6a52222de348d6cc79) )
|
||||||
ROM_LOAD( "nosticker.u38", 0x02000, 0x2000, CRC(ef1d7a80) SHA1(539662bee187a300a6f1bcded954758c87171219) )
|
ROM_LOAD( "hisc_u38_c1987_mii.u38", 0x02000, 0x2000, CRC(ef1d7a80) SHA1(539662bee187a300a6f1bcded954758c87171219) )
|
||||||
ROM_LOAD( "hisc_u37_c1987_mii.u37", 0x04000, 0x2000, CRC(f6e709f8) SHA1(02905be912d0aa794f82926462f854e8e67dc407) )
|
ROM_LOAD( "hisc_u37_c1987_mii.u37", 0x04000, 0x2000, CRC(f6e709f8) SHA1(02905be912d0aa794f82926462f854e8e67dc407) )
|
||||||
|
|
||||||
ROM_REGION( 0x2000, "gfx2", 0 )
|
ROM_REGION( 0x2000, "gfx2", 0 )
|
||||||
ROM_LOAD( "hisc_u40_c1987_mii.u40", 0x00000, 0x2000, CRC(6d2a1ca8) SHA1(96ef3e0914c2b213ed9c9082fa3e27d75d52a8ec) )
|
ROM_LOAD( "hisc_u40_c1987_mii.u40", 0x00000, 0x2000, CRC(6d2a1ca8) SHA1(96ef3e0914c2b213ed9c9082fa3e27d75d52a8ec) )
|
||||||
|
|
||||||
ROM_REGION( 0xc20, "plds", 0 ) // need conversion to .bin (the format type prevents to do it)
|
ROM_REGION( 0xe20, "plds", 0 )
|
||||||
ROM_LOAD( "sc3931_atf16v8b.jed.u13", 0x000, 0xc20, CRC(c505a4a1) SHA1(676f5f73cb14b5853aeca9cde71ad2c3ec425f9c) )
|
ROM_LOAD( "dec003.u13", 0x000, 0x117, CRC(5b9a2fec) SHA1(c56c7bbe13028903cfc82440ee8b24df855134c2) ) // PAL16L8ANC - brute forced
|
||||||
|
ROM_LOAD( "sc3931_atf16v8b.jed.u13", 0x200, 0xc20, CRC(c505a4a1) SHA1(676f5f73cb14b5853aeca9cde71ad2c3ec425f9c) ) // needs conversion to .bin (the format type prevents easy conversion)
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
/*
|
ROM_START( rivierab )
|
||||||
Riviera High Score.
|
|
||||||
2131-08, U5-3C, 091586
|
|
||||||
|
|
||||||
*/
|
|
||||||
ROM_START( rivierad )
|
|
||||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||||
ROM_LOAD( "3_u5_27256.u5", 0x0000, 0x8000, CRC(c9582556) SHA1(2d960cbfadea82968e9e509d2e72c0ef16032755) )
|
ROM_LOAD( "2131-08_u5-3c.u5", 0x0000, 0x8000, CRC(c9582556) SHA1(2d960cbfadea82968e9e509d2e72c0ef16032755) ) // 08 U5-3C 091586 2131-83C
|
||||||
|
|
||||||
ROM_REGION( 0x6000, "gfx1", 0 )
|
ROM_REGION( 0x6000, "gfx1", 0 )
|
||||||
ROM_LOAD( "nosticker_2764.u39", 0x00000, 0x2000, CRC(1814c2ea) SHA1(fecc5dc1c0a56cbc7b68ee6a52222de348d6cc79) )
|
ROM_LOAD( "hisc_u39_c1987_mii.u39", 0x00000, 0x2000, CRC(1814c2ea) SHA1(fecc5dc1c0a56cbc7b68ee6a52222de348d6cc79) )
|
||||||
ROM_LOAD( "hisc_u38_2764.u38", 0x02000, 0x2000, CRC(ef1d7a80) SHA1(539662bee187a300a6f1bcded954758c87171219) )
|
ROM_LOAD( "hisc_u38_c1987_mii.u38", 0x02000, 0x2000, CRC(ef1d7a80) SHA1(539662bee187a300a6f1bcded954758c87171219) )
|
||||||
ROM_LOAD( "nosticker_2764.u37", 0x04000, 0x2000, CRC(f6e709f8) SHA1(02905be912d0aa794f82926462f854e8e67dc407) )
|
ROM_LOAD( "hisc_u37_c1987_mii.u37", 0x04000, 0x2000, CRC(f6e709f8) SHA1(02905be912d0aa794f82926462f854e8e67dc407) )
|
||||||
|
|
||||||
ROM_REGION( 0x2000, "gfx2", 0 )
|
ROM_REGION( 0x2000, "gfx2", 0 )
|
||||||
ROM_LOAD( "hisc_u40_2764.u40", 0x00000, 0x2000, CRC(6d2a1ca8) SHA1(96ef3e0914c2b213ed9c9082fa3e27d75d52a8ec) )
|
ROM_LOAD( "hisc_u40_c1987_mii.u40", 0x00000, 0x2000, CRC(6d2a1ca8) SHA1(96ef3e0914c2b213ed9c9082fa3e27d75d52a8ec) )
|
||||||
|
|
||||||
ROM_REGION( 0xc22, "plds", 0 ) // need conversion to .bin (the format type prevents to do it)
|
ROM_REGION( 0xc22, "plds", 0 ) // need conversion to .bin (the format type prevents to do it)
|
||||||
ROM_LOAD( "dec-002_atf16v8c.jed.u13", 0x000, 0xc22, CRC(494164ba) SHA1(b7ebfd9c28e0e953beb9a4bdc331ded02ac5a67e) )
|
ROM_LOAD( "dec-002_atf16v8c.jed.u13", 0x000, 0xc22, CRC(494164ba) SHA1(b7ebfd9c28e0e953beb9a4bdc331ded02ac5a67e) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
/*
|
ROM_START( rivierac )
|
||||||
Riviera High Score.
|
|
||||||
2131-08P, 5C25C, 082702
|
|
||||||
|
|
||||||
*/
|
|
||||||
ROM_START( rivierae )
|
|
||||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||||
ROM_LOAD( "nosticker_27c256.u5", 0x0000, 0x8000, CRC(a9d7606f) SHA1(0970a2158d5347624f45cccb03048d6e4175fd9b) )
|
ROM_LOAD( "2131-08_u5-2d.u5", 0x0000, 0x8000, CRC(64c6892b) SHA1(d245d4a9933e3b21279542da0cb6ee641569ef6c) ) // 08 U5-2D 022086 2131-82d, label shows (c) 1985
|
||||||
|
|
||||||
ROM_REGION( 0x6000, "gfx1", 0 )
|
ROM_REGION( 0x6000, "gfx1", 0 )
|
||||||
ROM_LOAD( "nosticker_2764.u39", 0x00000, 0x2000, CRC(1814c2ea) SHA1(fecc5dc1c0a56cbc7b68ee6a52222de348d6cc79) )
|
ROM_LOAD( "hisc_u39_c1987_mii.u39", 0x00000, 0x2000, CRC(1814c2ea) SHA1(fecc5dc1c0a56cbc7b68ee6a52222de348d6cc79) )
|
||||||
ROM_LOAD( "hisc_u38_c1987_2764.u38", 0x02000, 0x2000, CRC(ef1d7a80) SHA1(539662bee187a300a6f1bcded954758c87171219) )
|
ROM_LOAD( "hisc_u38_c1987_mii.u38", 0x02000, 0x2000, CRC(ef1d7a80) SHA1(539662bee187a300a6f1bcded954758c87171219) )
|
||||||
ROM_LOAD( "nosticker_2764.u37", 0x04000, 0x2000, CRC(f6e709f8) SHA1(02905be912d0aa794f82926462f854e8e67dc407) )
|
ROM_LOAD( "hisc_u37_c1987_mii.u37", 0x04000, 0x2000, CRC(f6e709f8) SHA1(02905be912d0aa794f82926462f854e8e67dc407) )
|
||||||
|
|
||||||
ROM_REGION( 0x2000, "gfx2", 0 )
|
ROM_REGION( 0x2000, "gfx2", 0 )
|
||||||
ROM_LOAD( "nosticker_2764.u40", 0x00000, 0x2000, CRC(6d2a1ca8) SHA1(96ef3e0914c2b213ed9c9082fa3e27d75d52a8ec) )
|
ROM_LOAD( "hisc_u40_c1987_mii.u40", 0x00000, 0x2000, CRC(6d2a1ca8) SHA1(96ef3e0914c2b213ed9c9082fa3e27d75d52a8ec) )
|
||||||
|
|
||||||
ROM_REGION( 0xc20, "plds", 0 ) // need conversion to .bin (the format type prevents to do it)
|
ROM_REGION( 0x117, "plds", 0 )
|
||||||
ROM_LOAD( "dec-03_atf16v8b.jed.u13", 0x000, 0xc20, CRC(d24b2f03) SHA1(5156846feef7f84c7dc944dba1ffa5c4295a972a) )
|
ROM_LOAD( "dec003.u13", 0x000, 0x117, CRC(5b9a2fec) SHA1(c56c7bbe13028903cfc82440ee8b24df855134c2) ) // PAL16L8ANC - brute forced
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
/*
|
ROM_START( rivierad ) // a hack of 2131-08_u5-4a.u5 - doesn't show "MERIT IND. INC." text after copyright symbol, plus other changes
|
||||||
Riviera High Score.
|
|
||||||
2131-08P, 5C25C, 082702
|
|
||||||
|
|
||||||
Same version than the set above,
|
|
||||||
but no Merit logo at all.
|
|
||||||
|
|
||||||
*/
|
|
||||||
ROM_START( rivieraf )
|
|
||||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||||
ROM_LOAD( "riv2_u5_27256.u5", 0x0000, 0x8000, CRC(a9d7606f) SHA1(0970a2158d5347624f45cccb03048d6e4175fd9b) )
|
ROM_LOAD( "nosticker_27c256.u5", 0x0000, 0x8000, CRC(a9d7606f) SHA1(0970a2158d5347624f45cccb03048d6e4175fd9b) ) // 08P 5C25C 082702 2131-84A
|
||||||
|
|
||||||
ROM_REGION( 0x6000, "gfx1", 0 )
|
ROM_REGION( 0x6000, "gfx1", 0 )
|
||||||
ROM_LOAD( "riv2_u39_2764.u39", 0x00000, 0x2000, CRC(fca9a4cf) SHA1(1a6f0a57ac2236e9cf7c64c671e6a6b0208cc3dd) )
|
ROM_LOAD( "hisc_u39_c1987_mii.u39", 0x00000, 0x2000, CRC(1814c2ea) SHA1(fecc5dc1c0a56cbc7b68ee6a52222de348d6cc79) )
|
||||||
|
ROM_LOAD( "hisc_u38_c1987_mii.u38", 0x02000, 0x2000, CRC(ef1d7a80) SHA1(539662bee187a300a6f1bcded954758c87171219) )
|
||||||
|
ROM_LOAD( "hisc_u37_c1987_mii.u37", 0x04000, 0x2000, CRC(f6e709f8) SHA1(02905be912d0aa794f82926462f854e8e67dc407) )
|
||||||
|
|
||||||
|
ROM_REGION( 0x2000, "gfx2", 0 )
|
||||||
|
ROM_LOAD( "hisc_u40_c1987_mii.u40", 0x00000, 0x2000, CRC(6d2a1ca8) SHA1(96ef3e0914c2b213ed9c9082fa3e27d75d52a8ec) )
|
||||||
|
|
||||||
|
ROM_REGION( 0x117, "plds", 0 )
|
||||||
|
ROM_LOAD( "dec003.u13", 0x000, 0x117, CRC(5b9a2fec) SHA1(c56c7bbe13028903cfc82440ee8b24df855134c2) ) // PAL16L8ANC - brute forced
|
||||||
|
ROM_END
|
||||||
|
|
||||||
|
ROM_START( rivierae ) // same program ROM, but different graphics ROMs which eliminate the Merit logo
|
||||||
|
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||||
|
ROM_LOAD( "riv2_u5_27256.u5", 0x0000, 0x8000, CRC(a9d7606f) SHA1(0970a2158d5347624f45cccb03048d6e4175fd9b) ) // 08P 5C25C 082702 2131-84A
|
||||||
|
|
||||||
|
ROM_REGION( 0x6000, "gfx1", 0 )
|
||||||
|
ROM_LOAD( "riv2_u39_2764.u39", 0x00000, 0x2000, CRC(fca9a4cf) SHA1(1a6f0a57ac2236e9cf7c64c671e6a6b0208cc3dd) ) // these graphics ROMs remove the Merit logo
|
||||||
ROM_LOAD( "riv2_u38_2764.u38", 0x02000, 0x2000, CRC(1dbe9afe) SHA1(becc5419b948ef750efb1359fbc3264d801b1b73) )
|
ROM_LOAD( "riv2_u38_2764.u38", 0x02000, 0x2000, CRC(1dbe9afe) SHA1(becc5419b948ef750efb1359fbc3264d801b1b73) )
|
||||||
ROM_LOAD( "riv2_u37_2764.u37", 0x04000, 0x2000, CRC(3eea4a80) SHA1(7ab64810960799895b87c83096675872139f7070) )
|
ROM_LOAD( "riv2_u37_2764.u37", 0x04000, 0x2000, CRC(3eea4a80) SHA1(7ab64810960799895b87c83096675872139f7070) )
|
||||||
|
|
||||||
ROM_REGION( 0x2000, "gfx2", 0 )
|
ROM_REGION( 0x2000, "gfx2", 0 )
|
||||||
ROM_LOAD( "riv2_u40_2764.u40", 0x00000, 0x2000, CRC(6019ffb7) SHA1(e2dde1fb833feec99c2466e1da0af41c39212472) )
|
ROM_LOAD( "riv2_u40_2764.u40", 0x00000, 0x2000, CRC(6019ffb7) SHA1(e2dde1fb833feec99c2466e1da0af41c39212472) )
|
||||||
|
|
||||||
ROM_REGION( 0xc22, "plds", 0 ) // need conversion to .bin (the format type prevents to do it)
|
ROM_REGION( 0xc22, "plds", 0 ) // needs conversion to .bin (the format type prevents easy conversion)
|
||||||
ROM_LOAD( "sc3931_pal16l8amc.jed.u13", 0x000, 0xc22, CRC(5214d4d9) SHA1(b339443a8315e5dc0fac62fffc7458eeead0a4de) )
|
ROM_LOAD( "sc3931_pal16l8amc.jed.u13", 0x000, 0xc22, CRC(5214d4d9) SHA1(b339443a8315e5dc0fac62fffc7458eeead0a4de) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
@ -3111,13 +3072,12 @@ GAME( 1984, mroundup, 0, pitboss, mroundup, merit_state, empty_
|
|||||||
GAME( 1984, chkndraw, 0, pitboss, chkndraw, merit_state, empty_init, ROT0, "Merit", "Chicken Draw (2131-04, U5-1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
|
GAME( 1984, chkndraw, 0, pitboss, chkndraw, merit_state, empty_init, ROT0, "Merit", "Chicken Draw (2131-04, U5-1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
|
||||||
GAME( 1984, chkndrawa, chkndraw, pitboss, chkndraw, merit_state, empty_init, ROT0, "Merit", "Chicken Draw (2131-04, U5-0)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
|
GAME( 1984, chkndrawa, chkndraw, pitboss, chkndraw, merit_state, empty_init, ROT0, "Merit", "Chicken Draw (2131-04, U5-0)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
|
||||||
|
|
||||||
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( 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, 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( 1986, rivierab, riviera, riviera, riviera, merit_state, empty_init, ROT0, "Merit", "Riviera Hi-Score (2131-08, U5-3C)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
|
||||||
GAME( 1986, rivierac, riviera, riviera, riviera, merit_state, empty_init, ROT0, "Merit", "Riviera Hi-Score (2131-08, U5-4, 111786)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
|
GAME( 1986, rivierac, riviera, riviera, rivierab, merit_state, empty_init, ROT0, "Merit", "Riviera Hi-Score (2131-08, U5-2D)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
|
||||||
GAME( 1986, rivierad, riviera, riviera, riviera, merit_state, empty_init, ROT0, "Merit", "Riviera Hi-Score (2131-08, U5-3C, 091586)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
|
GAME( 1986, rivierad, riviera, riviera, riviera, merit_state, empty_init, ROT0, "hack?", "Riviera Hi-Score (2131-08P, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // bad Merit logo, no Merit copyright text
|
||||||
GAME( 1986, rivierae, riviera, riviera, riviera, merit_state, empty_init, ROT0, "Merit", "Riviera Hi-Score (2131-08P, 5C25C, 082702, set 1)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS )
|
GAME( 1986, rivierae, riviera, riviera, riviera, merit_state, empty_init, ROT0, "Riviera", "Riviera Hi-Score (2131-08P, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // graphics ROMs altered to remove Merit logo
|
||||||
GAME( 1986, rivieraf, riviera, riviera, riviera, merit_state, empty_init, ROT0, "Merit", "Riviera Hi-Score (2131-08P, 5C25C, 082702, set 2)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_GRAPHICS ) // no merit logo
|
|
||||||
|
|
||||||
|
|
||||||
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( 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
|
||||||
|
@ -231,7 +231,6 @@ private:
|
|||||||
bool m_opl_irq = false;
|
bool m_opl_irq = false;
|
||||||
bool m_soundnmi_mask = false;
|
bool m_soundnmi_mask = false;
|
||||||
|
|
||||||
void layer_scroll_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
|
|
||||||
void soundlatch_w(offs_t offset, u8 data);
|
void soundlatch_w(offs_t offset, u8 data);
|
||||||
void opl_irq_w(int state);
|
void opl_irq_w(int state);
|
||||||
void opl_w(offs_t offset, uint8_t data);
|
void opl_w(offs_t offset, uint8_t data);
|
||||||
@ -830,11 +829,6 @@ void bloodbro_state::layer_scroll_w(offs_t offset, uint16_t data, uint16_t mem_m
|
|||||||
COMBINE_DATA(&m_scrollram[offset]);
|
COMBINE_DATA(&m_scrollram[offset]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void weststry_state::layer_scroll_w(offs_t offset, uint16_t data, uint16_t mem_mask)
|
|
||||||
{
|
|
||||||
COMBINE_DATA(&m_scrollram[offset]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Machine Drivers
|
// Machine Drivers
|
||||||
|
|
||||||
void bloodbro_state::bloodbro(machine_config &config)
|
void bloodbro_state::bloodbro(machine_config &config)
|
||||||
|
@ -19,18 +19,25 @@
|
|||||||
MOD 4/3 - Tilemap board, has logic + 4 tilemap ROMs, long thin sub-board (CAR-0484/1 SOLD) with no chips, just routing along one edge.
|
MOD 4/3 - Tilemap board, has logic + 4 tilemap ROMs, long thin sub-board (CAR-0484/1 SOLD) with no chips, just routing along one edge.
|
||||||
|
|
||||||
PCBs pictures and dip listing are available at: http://www.recreativas.org/modular-system-blood-bros-4316-gaelco-sa
|
PCBs pictures and dip listing are available at: http://www.recreativas.org/modular-system-blood-bros-4316-gaelco-sa
|
||||||
|
|
||||||
|
TODO:
|
||||||
|
- sound (seems rather similar to seibu/toki_ms.cpp, at least address-wise);
|
||||||
|
- sprite / tilemap priorities
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
|
|
||||||
#include "cpu/m68000/m68000.h"
|
#include "cpu/m68000/m68000.h"
|
||||||
#include "cpu/z80/z80.h"
|
#include "cpu/z80/z80.h"
|
||||||
#include "machine/gen_latch.h"
|
#include "machine/gen_latch.h"
|
||||||
#include "sound/msm5205.h"
|
#include "sound/msm5205.h"
|
||||||
#include "sound/ymopn.h"
|
#include "sound/ymopn.h"
|
||||||
|
|
||||||
#include "emupal.h"
|
#include "emupal.h"
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
#include "speaker.h"
|
#include "speaker.h"
|
||||||
|
#include "tilemap.h"
|
||||||
|
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
@ -41,103 +48,260 @@ public:
|
|||||||
bloodbro_ms_state(const machine_config &mconfig, device_type type, const char *tag) :
|
bloodbro_ms_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
driver_device(mconfig, type, tag),
|
driver_device(mconfig, type, tag),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
m_palette(*this, "palette"),
|
m_audiocpu(*this, "audiocpu"),
|
||||||
m_screen(*this, "screen"),
|
m_gfxdecode(*this, "gfxdecode"),
|
||||||
|
m_msm(*this, "msm"),
|
||||||
m_spriteram(*this, "spriteram"),
|
m_spriteram(*this, "spriteram"),
|
||||||
m_gfxdecode(*this, "gfxdecode")
|
m_tileram(*this, "tileram%u", 0U)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
void bloodbrom(machine_config &config);
|
void bloodbrom(machine_config &config) ATTR_COLD;
|
||||||
void init_bloodbrom();
|
|
||||||
|
void init_bloodbrom() ATTR_COLD;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void machine_start() override ATTR_COLD;
|
virtual void machine_start() override ATTR_COLD;
|
||||||
|
virtual void video_start() override ATTR_COLD;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
required_device<palette_device> m_palette;
|
required_device<cpu_device> m_audiocpu;
|
||||||
required_device<screen_device> m_screen;
|
|
||||||
required_shared_ptr<uint16_t> m_spriteram;
|
|
||||||
required_device<gfxdecode_device> m_gfxdecode;
|
required_device<gfxdecode_device> m_gfxdecode;
|
||||||
|
required_device<msm5205_device> m_msm;
|
||||||
|
required_shared_ptr<uint16_t> m_spriteram;
|
||||||
|
required_shared_ptr_array<uint16_t, 3> m_tileram; // 0 bg, 1 fg, 2 tx
|
||||||
|
|
||||||
|
tilemap_t *m_tilemap[3] {};
|
||||||
|
uint16_t m_scrollreg[2] {};
|
||||||
|
|
||||||
|
template <uint8_t Which> TILE_GET_INFO_MEMBER(get_tile_info);
|
||||||
|
template <uint8_t Which> void tileram_w(offs_t offset, uint16_t data, uint16_t mem_mask);
|
||||||
|
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
|
|
||||||
void bloodbrom_map(address_map &map) ATTR_COLD;
|
void main_program_map(address_map &map) ATTR_COLD;
|
||||||
|
void sound_program_map(address_map &map) ATTR_COLD;
|
||||||
|
|
||||||
void descramble_16x16tiles(uint8_t* src, int len);
|
void descramble_16x16tiles(uint8_t *src, int len) ATTR_COLD;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void bloodbro_ms_state::bloodbrom_map(address_map &map)
|
|
||||||
{
|
|
||||||
map(0x000000, 0x07ffff).rom();
|
|
||||||
|
|
||||||
|
|
||||||
map(0x080000, 0x08ffff).ram(); // original vram is in here, but bootleg copies some of it elsewhere for use
|
|
||||||
|
|
||||||
map(0x0a0000, 0x0a0001).nopw();
|
|
||||||
map(0x0a0008, 0x0a0009).nopw();
|
|
||||||
map(0x0a000c, 0x0a000d).nopw();
|
|
||||||
|
|
||||||
map(0x0c0100, 0x0c0101).nopw();
|
|
||||||
|
|
||||||
map(0x0e000e, 0x0e000f).nopw();
|
|
||||||
|
|
||||||
|
|
||||||
map(0x100000, 0x1003ff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
|
|
||||||
map(0x100400, 0x1007ff).ram().w(m_palette, FUNC(palette_device::write16_ext)).share("palette_ext");
|
|
||||||
map(0x100800, 0x100fff).ram();
|
|
||||||
map(0x101000, 0x1017ff).ram().share("spriteram");
|
|
||||||
map(0x101800, 0x101fff).ram();
|
|
||||||
|
|
||||||
map(0x102000, 0x102001).nopw();
|
|
||||||
|
|
||||||
map(0x18d000, 0x18dfff).ram();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void bloodbro_ms_state::machine_start()
|
void bloodbro_ms_state::machine_start()
|
||||||
{
|
{
|
||||||
|
membank("sound_bank")->configure_entries(0, 2, memregion("audiocpu")->base() + 0x8000, 0x4000);
|
||||||
|
membank("sound_bank")->set_entry(0);
|
||||||
|
|
||||||
|
save_item(NAME(m_scrollreg));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
uint32_t bloodbro_ms_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
void bloodbro_ms_state::video_start()
|
||||||
{
|
{
|
||||||
bitmap.fill(0, cliprect);
|
m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(bloodbro_ms_state::get_tile_info<0>)), TILEMAP_SCAN_ROWS, 16, 16, 32, 16);
|
||||||
|
m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(bloodbro_ms_state::get_tile_info<1>)), TILEMAP_SCAN_ROWS, 16, 16, 32, 16);
|
||||||
|
m_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(bloodbro_ms_state::get_tile_info<2>)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
|
||||||
|
|
||||||
// TODO, convert to device, share between Modular System games
|
m_tilemap[1]->set_transparent_pen(0x0f);
|
||||||
|
m_tilemap[2]->set_transparent_pen(0x0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <uint8_t Which>
|
||||||
|
TILE_GET_INFO_MEMBER(bloodbro_ms_state::get_tile_info)
|
||||||
|
{
|
||||||
|
int const tile = m_tileram[Which][tile_index];
|
||||||
|
tileinfo.set(Which, tile & 0xfff, tile >> 12, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <uint8_t Which>
|
||||||
|
void bloodbro_ms_state::tileram_w(offs_t offset, uint16_t data, uint16_t mem_mask)
|
||||||
|
{
|
||||||
|
COMBINE_DATA(&m_tileram[Which][offset]);
|
||||||
|
m_tilemap[Which]->mark_tile_dirty(offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
void bloodbro_ms_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||||
|
{
|
||||||
const int NUM_SPRITES = 0x200;
|
const int NUM_SPRITES = 0x200;
|
||||||
const int X_EXTRA_OFFSET = 256;
|
const int X_EXTRA_OFFSET = 240;
|
||||||
|
|
||||||
for (int i = NUM_SPRITES-2; i >= 0; i-=2)
|
for (int i = NUM_SPRITES - 2; i >= 0; i -= 2)
|
||||||
{
|
{
|
||||||
gfx_element *gfx = m_gfxdecode->gfx(0);
|
gfx_element *gfx = m_gfxdecode->gfx(3);
|
||||||
|
|
||||||
uint16_t attr0 = m_spriteram[i + 0];
|
uint16_t const attr0 = m_spriteram[i + 0];
|
||||||
uint16_t attr1 = m_spriteram[i + 1];
|
uint16_t const attr1 = m_spriteram[i + 1];
|
||||||
|
|
||||||
uint16_t attr2 = m_spriteram[i + NUM_SPRITES];
|
uint16_t const attr2 = m_spriteram[i + NUM_SPRITES];
|
||||||
//uint16_t attr3 = m_spriteram[i + NUM_SPRITES + 1]; // unused?
|
//uint16_t const attr3 = m_spriteram[i + NUM_SPRITES + 1]; // unused?
|
||||||
|
|
||||||
int ypos = attr0 & 0x00ff;
|
int ypos = attr0 & 0x00ff;
|
||||||
int xpos = (attr1 & 0xff00)>>8;
|
int xpos = (attr1 & 0xff00) >> 8;
|
||||||
xpos |= (attr2 & 0x8000) ? 0x100 : 0x000;
|
xpos |= (attr2 & 0x8000) ? 0x100 : 0x000;
|
||||||
|
|
||||||
ypos = (0xff - ypos);
|
ypos = (0xff - ypos);
|
||||||
|
|
||||||
int tile = (attr0 & 0xff00) >> 8;
|
int tile = (attr0 & 0xff00) >> 8;
|
||||||
tile |= (attr1 & 0x003f) << 8;
|
tile |= (attr1 & 0x001f) << 8;
|
||||||
|
|
||||||
int flipx = (attr1 & 0x0040);
|
int const flipx = (attr1 & 0x0020);
|
||||||
int flipy = (attr2 & 0x4000);
|
int const flipy = (attr2 & 0x4000);
|
||||||
|
|
||||||
gfx->transpen(bitmap,cliprect,tile,(attr2&0x0f00)>>8,flipx,flipy,xpos-16-X_EXTRA_OFFSET,ypos-16,15);
|
// TODO: switch to prio_transpen
|
||||||
|
gfx->transpen(bitmap, cliprect, tile, (attr2 & 0x0f00) >> 8, flipx, flipy, xpos - 16 - X_EXTRA_OFFSET, ypos - 16, 15);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t bloodbro_ms_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||||
|
{
|
||||||
|
// TODO: is scrollx used?
|
||||||
|
m_tilemap[1]->set_scrolly(0, (int8_t)m_scrollreg[1] + 1);
|
||||||
|
|
||||||
|
bitmap.fill(0, cliprect);
|
||||||
|
|
||||||
|
m_tilemap[0]->draw(screen, bitmap, cliprect, 0, 0);
|
||||||
|
m_tilemap[1]->draw(screen, bitmap, cliprect, 0, 0);
|
||||||
|
|
||||||
|
draw_sprites(bitmap, cliprect);
|
||||||
|
|
||||||
|
m_tilemap[2]->draw(screen, bitmap, cliprect, 0, 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void bloodbro_ms_state::main_program_map(address_map &map)
|
||||||
|
{
|
||||||
|
map(0x000000, 0x07ffff).rom();
|
||||||
|
map(0x080000, 0x08bfff).ram(); // original vram is in here, but bootleg copies some of it elsewhere for use
|
||||||
|
map(0x08c000, 0x08cfff).ram().w(FUNC(bloodbro_ms_state::tileram_w<0>)).share(m_tileram[0]);
|
||||||
|
map(0x08d000, 0x08d7ff).ram();
|
||||||
|
map(0x08d800, 0x08dfff).ram().w(FUNC(bloodbro_ms_state::tileram_w<2>)).share(m_tileram[2]);
|
||||||
|
map(0x08e000, 0x08ffff).ram();
|
||||||
|
map(0x0a0000, 0x0a000d).nopw(); // remnants of original code (Seibu sound system)?
|
||||||
|
map(0x0c0100, 0x0c0101).nopw(); // ??? written once
|
||||||
|
// map(0x0e000f, 0x0e000f).w("soundlatch", FUNC(generic_latch_8_device::write)); // half of the sound commands (wrt weststry)?
|
||||||
|
map(0x100000, 0x1003ff).ram().w("palette", FUNC(palette_device::write16)).share("palette");
|
||||||
|
map(0x100400, 0x1007ff).ram().w("palette", FUNC(palette_device::write16_ext)).share("palette_ext");
|
||||||
|
map(0x100800, 0x100fff).ram();
|
||||||
|
map(0x101000, 0x1017ff).ram().share(m_spriteram);
|
||||||
|
map(0x101800, 0x101fff).ram();
|
||||||
|
// map(0x102001, 0x102001).w("soundlatch2", FUNC(generic_latch_8_device::write)); // the other half of the sound commands (wrt weststry)?
|
||||||
|
map(0x18d000, 0x18d7ff).w(FUNC(bloodbro_ms_state::tileram_w<1>)).share(m_tileram[1]);
|
||||||
|
map(0x18d800, 0x18d803).lw16(NAME([this] (offs_t offset, uint16_t data) { m_scrollreg[offset] = data; }));
|
||||||
|
map(0x0e0000, 0x0e0001).portr("DSW");
|
||||||
|
map(0x0e0002, 0x0e0003).portr("IN0");
|
||||||
|
map(0x0e0004, 0x0e0005).portr("IN1");
|
||||||
|
}
|
||||||
|
|
||||||
|
void bloodbro_ms_state::sound_program_map(address_map &map)
|
||||||
|
{
|
||||||
|
map(0x0000, 0x7fff).rom();
|
||||||
|
// map(0x8000, 0x8000).w(FUNC(bloodbro_ms_state::adpcm_w)); // almost surely ADPCM
|
||||||
|
map(0x8000, 0xbfff).bankr("sound_bank");
|
||||||
|
map(0xc000, 0xc7ff).ram();
|
||||||
|
map(0xd000, 0xd7ff).ram();
|
||||||
|
map(0xdff0, 0xdff5).noprw(); // ???
|
||||||
|
// returning machine().rand() to both below addresses causes sounds to be played
|
||||||
|
// map(0xdffe, 0xdffe).r("soundlatch", FUNC(generic_latch_8_device::read)); // or is read pending_r? write is acknowledge?
|
||||||
|
// map(0xdfff, 0xdfff).r("soundlatch2", FUNC(generic_latch_8_device::read));
|
||||||
|
map(0xe000, 0xe001).w("ym1", FUNC(ym2203_device::write));
|
||||||
|
map(0xe002, 0xe003).w("ym2", FUNC(ym2203_device::write));
|
||||||
|
map(0xe008, 0xe009).r("ym1", FUNC(ym2203_device::read));
|
||||||
|
map(0xe00a, 0xe00b).r("ym2", FUNC(ym2203_device::read));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static INPUT_PORTS_START( bloodbrom )
|
||||||
|
PORT_START("IN0")
|
||||||
|
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(1)
|
||||||
|
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(1)
|
||||||
|
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(1)
|
||||||
|
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(1)
|
||||||
|
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1)
|
||||||
|
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1)
|
||||||
|
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1)
|
||||||
|
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_PLAYER(2)
|
||||||
|
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_PLAYER(2)
|
||||||
|
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_PLAYER(2)
|
||||||
|
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_PLAYER(2)
|
||||||
|
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2)
|
||||||
|
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(2)
|
||||||
|
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(2)
|
||||||
|
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
|
||||||
|
PORT_START("IN1")
|
||||||
|
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||||
|
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_COIN2 )
|
||||||
|
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_START1 )
|
||||||
|
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_START2 )
|
||||||
|
PORT_BIT( 0x00e0, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
|
||||||
|
PORT_START("DSW")
|
||||||
|
PORT_DIPNAME( 0x0001, 0x0001, "Coin Mode" ) PORT_DIPLOCATION("SW1:1")
|
||||||
|
PORT_DIPSETTING( 0x0001, "Mode 1" )
|
||||||
|
PORT_DIPSETTING( 0x0000, "Mode 2" )
|
||||||
|
// Coin Mode 1
|
||||||
|
PORT_DIPNAME( 0x001e, 0x001e, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:2,3,4,5") PORT_CONDITION("DSW", 0x0001, EQUALS, 0x0001)
|
||||||
|
PORT_DIPSETTING( 0x0014, DEF_STR( 6C_1C ) )
|
||||||
|
PORT_DIPSETTING( 0x0016, DEF_STR( 5C_1C ) )
|
||||||
|
PORT_DIPSETTING( 0x0018, DEF_STR( 4C_1C ) )
|
||||||
|
PORT_DIPSETTING( 0x001a, DEF_STR( 3C_1C ) )
|
||||||
|
PORT_DIPSETTING( 0x0002, DEF_STR( 8C_3C ) )
|
||||||
|
PORT_DIPSETTING( 0x001c, DEF_STR( 2C_1C ) )
|
||||||
|
PORT_DIPSETTING( 0x0004, DEF_STR( 5C_3C ) )
|
||||||
|
PORT_DIPSETTING( 0x0006, DEF_STR( 3C_2C ) )
|
||||||
|
PORT_DIPSETTING( 0x001e, DEF_STR( 1C_1C ) )
|
||||||
|
PORT_DIPSETTING( 0x0008, DEF_STR( 2C_3C ) )
|
||||||
|
PORT_DIPSETTING( 0x0012, DEF_STR( 1C_2C ) )
|
||||||
|
PORT_DIPSETTING( 0x0010, DEF_STR( 1C_3C ) )
|
||||||
|
PORT_DIPSETTING( 0x000e, DEF_STR( 1C_4C ) )
|
||||||
|
PORT_DIPSETTING( 0x000c, DEF_STR( 1C_5C ) )
|
||||||
|
PORT_DIPSETTING( 0x000a, DEF_STR( 1C_6C ) )
|
||||||
|
PORT_DIPSETTING( 0x0000, DEF_STR( Free_Play ) )
|
||||||
|
// Coin Mode 2
|
||||||
|
PORT_DIPNAME( 0x0006, 0x0006, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW1:2,3") PORT_CONDITION("DSW", 0x0001, EQUALS, 0x0000)
|
||||||
|
PORT_DIPSETTING( 0x0000, DEF_STR( 5C_1C ) )
|
||||||
|
PORT_DIPSETTING( 0x0002, DEF_STR( 3C_1C ) )
|
||||||
|
PORT_DIPSETTING( 0x0004, DEF_STR( 2C_1C ) )
|
||||||
|
PORT_DIPSETTING( 0x0006, DEF_STR( 1C_1C ) )
|
||||||
|
PORT_DIPNAME( 0x0018, 0x0018, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW1:4,5") PORT_CONDITION("DSW", 0x0001, EQUALS, 0x0000)
|
||||||
|
PORT_DIPSETTING( 0x0018, DEF_STR( 1C_2C ) )
|
||||||
|
PORT_DIPSETTING( 0x0010, DEF_STR( 1C_3C ) )
|
||||||
|
PORT_DIPSETTING( 0x0008, DEF_STR( 1C_5C ) )
|
||||||
|
PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) )
|
||||||
|
PORT_DIPNAME( 0x0020, 0x0020, "Starting Coin" ) PORT_DIPLOCATION("SW1:6")
|
||||||
|
PORT_DIPSETTING( 0x0020, DEF_STR( Normal ) )
|
||||||
|
PORT_DIPSETTING( 0x0000, "x2" )
|
||||||
|
|
||||||
|
PORT_DIPUNKNOWN_DIPLOC( 0x0040, IP_ACTIVE_LOW, "SW1:7" )
|
||||||
|
PORT_DIPUNKNOWN_DIPLOC( 0x0080, IP_ACTIVE_LOW, "SW1:8" )
|
||||||
|
PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:1,2")
|
||||||
|
PORT_DIPSETTING( 0x0000, "1" )
|
||||||
|
PORT_DIPSETTING( 0x0200, "2" )
|
||||||
|
PORT_DIPSETTING( 0x0300, "3" )
|
||||||
|
PORT_DIPSETTING( 0x0100, "5" )
|
||||||
|
PORT_DIPNAME( 0x0c00, 0x0c00, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:3,4")
|
||||||
|
PORT_DIPSETTING( 0x0c00, "300K 500K+" )
|
||||||
|
PORT_DIPSETTING( 0x0800, "500K+" )
|
||||||
|
PORT_DIPSETTING( 0x0400, "500K" )
|
||||||
|
PORT_DIPSETTING( 0x0000, DEF_STR( None ) )
|
||||||
|
PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:5,6")
|
||||||
|
PORT_DIPSETTING( 0x2000, DEF_STR( Easy ) )
|
||||||
|
PORT_DIPSETTING( 0x3000, DEF_STR( Normal ) )
|
||||||
|
PORT_DIPSETTING( 0x1000, DEF_STR( Hard ) )
|
||||||
|
PORT_DIPSETTING( 0x0000, DEF_STR( Very_Hard ) )
|
||||||
|
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Allow_Continue ) ) PORT_DIPLOCATION("SW2:7")
|
||||||
|
PORT_DIPSETTING( 0x0000, DEF_STR( No ) )
|
||||||
|
PORT_DIPSETTING( 0x4000, DEF_STR( Yes ) )
|
||||||
|
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("SW2:8")
|
||||||
|
PORT_DIPSETTING( 0x0000, DEF_STR( Off ) )
|
||||||
|
PORT_DIPSETTING( 0x8000, DEF_STR( On ) )
|
||||||
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
static const gfx_layout tiles16x16x4_layout =
|
static const gfx_layout tiles16x16x4_layout =
|
||||||
{
|
{
|
||||||
16,16,
|
16,16,
|
||||||
@ -161,35 +325,33 @@ static const gfx_layout tiles8x8x4_layout =
|
|||||||
};
|
};
|
||||||
|
|
||||||
static GFXDECODE_START( gfx_bloodbro_ms )
|
static GFXDECODE_START( gfx_bloodbro_ms )
|
||||||
GFXDECODE_ENTRY( "sprites", 0, tiles16x16x4_layout, 0x100, 32 )
|
GFXDECODE_ENTRY( "gfx2", 0, tiles16x16x4_layout, 0x300, 16 )
|
||||||
GFXDECODE_ENTRY( "gfx1", 0, tiles16x16x4_layout, 0x000, 32 )
|
GFXDECODE_ENTRY( "gfx1", 0, tiles16x16x4_layout, 0x200, 16 )
|
||||||
GFXDECODE_ENTRY( "gfx2", 0, tiles16x16x4_layout, 0x000, 32 )
|
GFXDECODE_ENTRY( "gfx3", 0, tiles8x8x4_layout, 0x000, 16 )
|
||||||
GFXDECODE_ENTRY( "gfx3", 0, tiles8x8x4_layout, 0x000, 32 )
|
GFXDECODE_ENTRY( "sprites", 0, tiles16x16x4_layout, 0x100, 16 )
|
||||||
GFXDECODE_END
|
GFXDECODE_END
|
||||||
|
|
||||||
|
|
||||||
static INPUT_PORTS_START( bloodbrom )
|
|
||||||
INPUT_PORTS_END
|
|
||||||
|
|
||||||
void bloodbro_ms_state::bloodbrom(machine_config &config)
|
void bloodbro_ms_state::bloodbrom(machine_config &config)
|
||||||
{
|
{
|
||||||
// basic machine hardware
|
// basic machine hardware
|
||||||
M68000(config, m_maincpu, 22.1184_MHz_XTAL / 2); // divisor unknown
|
M68000(config, m_maincpu, 22.1184_MHz_XTAL / 2); // divisor unknown
|
||||||
m_maincpu->set_addrmap(AS_PROGRAM, &bloodbro_ms_state::bloodbrom_map);
|
m_maincpu->set_addrmap(AS_PROGRAM, &bloodbro_ms_state::main_program_map);
|
||||||
m_maincpu->set_vblank_int("screen", FUNC(bloodbro_ms_state::irq4_line_hold));
|
m_maincpu->set_vblank_int("screen", FUNC(bloodbro_ms_state::irq4_line_hold));
|
||||||
|
|
||||||
Z80(config, "audiocpu", 24_MHz_XTAL / 8).set_disable(); // divisor unknown, no XTAL on the PCB, might also use the 20 MHz one
|
Z80(config, m_audiocpu, 24_MHz_XTAL / 8); // divisor unknown, no XTAL on the PCB, might also use the 20 MHz one
|
||||||
|
m_audiocpu->set_addrmap(AS_PROGRAM, &bloodbro_ms_state::sound_program_map);
|
||||||
|
|
||||||
// video hardware
|
// video hardware
|
||||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER); // all wrong
|
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||||
m_screen->set_refresh_hz(60);
|
screen.set_refresh_hz(60);
|
||||||
m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500) /* not accurate */);
|
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate
|
||||||
m_screen->set_size(256, 256);
|
screen.set_size(256, 256);
|
||||||
m_screen->set_visarea(0, 256-1, 0, 256-32-1);
|
screen.set_visarea(0, 256-1, 16, 240-1);
|
||||||
m_screen->set_screen_update(FUNC(bloodbro_ms_state::screen_update));
|
screen.set_screen_update(FUNC(bloodbro_ms_state::screen_update));
|
||||||
m_screen->set_palette("palette");
|
screen.set_palette("palette");
|
||||||
|
|
||||||
PALETTE(config, m_palette).set_format(palette_device::xBGR_444, 0x400);
|
PALETTE(config, "palette").set_format(palette_device::xBGR_444, 0x400);
|
||||||
|
|
||||||
GFXDECODE(config, "gfxdecode", "palette", gfx_bloodbro_ms);
|
GFXDECODE(config, "gfxdecode", "palette", gfx_bloodbro_ms);
|
||||||
|
|
||||||
@ -197,33 +359,14 @@ void bloodbro_ms_state::bloodbrom(machine_config &config)
|
|||||||
SPEAKER(config, "mono").front_center();
|
SPEAKER(config, "mono").front_center();
|
||||||
|
|
||||||
GENERIC_LATCH_8(config, "soundlatch");
|
GENERIC_LATCH_8(config, "soundlatch");
|
||||||
|
GENERIC_LATCH_8(config, "soundlatch2").set_separate_acknowledge(true);
|
||||||
|
|
||||||
YM2203(config, "ym1", 24_MHz_XTAL / 8).add_route(ALL_OUTPUTS, "mono", 0.15); // divisor unknown, no XTAL on the PCB, might also use the 20 MHz one
|
YM2203(config, "ym1", 24_MHz_XTAL / 8).add_route(ALL_OUTPUTS, "mono", 0.75); // divisor unknown, no XTAL on the PCB, might also use the 20 MHz one
|
||||||
|
|
||||||
YM2203(config, "ym2", 24_MHz_XTAL / 8).add_route(ALL_OUTPUTS, "mono", 0.15); // divisor unknown, no XTAL on the PCB, might also use the 20 MHz one
|
YM2203(config, "ym2", 24_MHz_XTAL / 8).add_route(ALL_OUTPUTS, "mono", 0.75); // divisor unknown, no XTAL on the PCB, might also use the 20 MHz one
|
||||||
|
|
||||||
MSM5205(config, "msm", 24_MHz_XTAL / 8).add_route(ALL_OUTPUTS, "mono", 0.15); // divisor unknown, no XTAL on the PCB, might also use the 20 MHz one
|
MSM5205(config, m_msm, 24_MHz_XTAL / 8); // divisor unknown, no XTAL on the PCB, might also use the 20 MHz one
|
||||||
}
|
m_msm->add_route(ALL_OUTPUTS, "mono", 0.75);
|
||||||
|
|
||||||
// reorganize graphics into something we can decode with a single pass
|
|
||||||
void bloodbro_ms_state::descramble_16x16tiles(uint8_t* src, int len)
|
|
||||||
{
|
|
||||||
std::vector<uint8_t> buffer(len);
|
|
||||||
{
|
|
||||||
for (int i = 0; i < len; i++)
|
|
||||||
{
|
|
||||||
int j = bitswap<20>(i, 19,18,17,16,15,12,11,10,9,8,7,6,5,14,13,4,3,2,1,0);
|
|
||||||
buffer[j] = src[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
std::copy(buffer.begin(), buffer.end(), &src[0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void bloodbro_ms_state::init_bloodbrom()
|
|
||||||
{
|
|
||||||
descramble_16x16tiles(memregion("gfx1")->base(), memregion("gfx1")->bytes());
|
|
||||||
descramble_16x16tiles(memregion("gfx2")->base(), memregion("gfx2")->bytes());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -296,7 +439,29 @@ ROM_START( bloodbrom )
|
|||||||
ROM_LOAD( "51-1-b_5246_gal16v8-20hb1.ic8", 0x000, 0x117, NO_DUMP ) // Protected
|
ROM_LOAD( "51-1-b_5246_gal16v8-20hb1.ic8", 0x000, 0x117, NO_DUMP ) // Protected
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
|
||||||
|
// reorganize graphics into something we can decode with a single pass
|
||||||
|
void bloodbro_ms_state::descramble_16x16tiles(uint8_t *src, int len)
|
||||||
|
{
|
||||||
|
std::vector<uint8_t> buffer(len);
|
||||||
|
{
|
||||||
|
for (int i = 0; i < len; i++)
|
||||||
|
{
|
||||||
|
int j = bitswap<20>(i, 19, 18, 17, 16, 15, 12, 11, 10, 9, 8, 7, 6, 5, 14, 13, 4, 3, 2, 1, 0);
|
||||||
|
buffer[j] = src[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
std::copy(buffer.begin(), buffer.end(), &src[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void bloodbro_ms_state::init_bloodbrom()
|
||||||
|
{
|
||||||
|
descramble_16x16tiles(memregion("gfx1")->base(), memregion("gfx1")->bytes());
|
||||||
|
descramble_16x16tiles(memregion("gfx2")->base(), memregion("gfx2")->bytes());
|
||||||
|
}
|
||||||
|
|
||||||
} // anonymous namespace
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
GAME( 199?, bloodbrom, bloodbro, bloodbrom, bloodbrom, bloodbro_ms_state, init_bloodbrom, ROT0, "bootleg (Gaelco / Ervisa)", "Blood Bros. (Modular System)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING )
|
GAME( 199?, bloodbrom, bloodbro, bloodbrom, bloodbrom, bloodbro_ms_state, init_bloodbrom, ROT0, "bootleg (Gaelco / Ervisa)", "Blood Bros. (Modular System)", MACHINE_NO_SOUND | MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING )
|
||||||
|
Loading…
Reference in New Issue
Block a user