- nichibutsu/clshroad.cpp, nichibutsu/cop01.cpp, nichibutsu/magmax.cpp, nichibutsu/seicross.cpp: consolidated drivers in single files

- misc drivers: used standard ROM loading macros
This commit is contained in:
Ivan Vangelista 2023-02-07 19:48:35 +01:00
parent e8533db852
commit fc0092e82b
17 changed files with 2267 additions and 2331 deletions

View File

@ -2258,22 +2258,22 @@ ROM_START( fishfren )
ROM_LOAD16_WORD("jagwave.rom", 0x0000, 0x1000, CRC(7a25ee5b) SHA1(58117e11fd6478c521fbd3fdbe157f39567552f0) )
ROM_REGION32_BE( 0x1000000, "romboard", 0 ) /* 16MB for 64-bit ROM data */
ROMX_LOAD( "l63-56", 0x000000, 0x100000, CRC(42764ea5) SHA1(805245f01006bd974fbac56f688cfcf137ddc914), ROM_SKIP(7) )
ROMX_LOAD( "l55-48", 0x000001, 0x100000, CRC(0c7592bb) SHA1(d5bd6b872abad58947842205f9eac46fd065e88f), ROM_SKIP(7) )
ROMX_LOAD( "l47-40", 0x000002, 0x100000, CRC(6d7dcdb1) SHA1(914dae3b9df5c861f794b683571c5fb0c2c3c3fd), ROM_SKIP(7) )
ROMX_LOAD( "l39-32", 0x000003, 0x100000, CRC(ef3b8d98) SHA1(858c3342e9693bfe887b91dde1116a1656a1a105), ROM_SKIP(7) )
ROMX_LOAD( "l31-24", 0x000004, 0x100000, CRC(132d628e) SHA1(3ff9fa86092eb01f21ca3ccf1ee1e3a583cbdecb), ROM_SKIP(7) )
ROMX_LOAD( "l23-16", 0x000005, 0x100000, CRC(b841f039) SHA1(79f661aee009aef2f5ad4122ae3e0ac94097a427), ROM_SKIP(7) )
ROMX_LOAD( "l15-08", 0x000006, 0x100000, CRC(0800214e) SHA1(5372f2c3470619a4967958c76055486f76b5f150), ROM_SKIP(7) )
ROMX_LOAD( "l07-00", 0x000007, 0x100000, CRC(f83b2e78) SHA1(83ee9d2bfba83e04fb794270926bd3e558c9aaa4), ROM_SKIP(7) )
ROMX_LOAD( "h63-56", 0x800000, 0x080000, CRC(67740765) SHA1(8b22413d25e0dbfe2227d1a8a023961a4c13cb76), ROM_SKIP(7) )
ROMX_LOAD( "h55-48", 0x800001, 0x080000, CRC(ffed0091) SHA1(6c8104acd7e6d95a111f9c7a4d3b6984293d72c4), ROM_SKIP(7) )
ROMX_LOAD( "h47-40", 0x800002, 0x080000, CRC(6f448f72) SHA1(3a298b9851e4ba7aa611aa6c2b0dcf06f4301463), ROM_SKIP(7) )
ROMX_LOAD( "h39-32", 0x800003, 0x080000, CRC(25a5bd67) SHA1(79f29bd36afb4574b9c923eee293964284713540), ROM_SKIP(7) )
ROMX_LOAD( "h31-24", 0x800004, 0x080000, CRC(e7088cc0) SHA1(4cb184de748c5633e669a4675e6db9920d34811e), ROM_SKIP(7) )
ROMX_LOAD( "h23-16", 0x800005, 0x080000, CRC(ab477a76) SHA1(ae9aa97dbc758cd741710fe08c6ea94a0a318451), ROM_SKIP(7) )
ROMX_LOAD( "h15-08", 0x800006, 0x080000, CRC(25a423f1) SHA1(7530cf2e28e0755bfcbd70789ef5cbbfb3d94f9f), ROM_SKIP(7) )
ROMX_LOAD( "h07-00", 0x800007, 0x080000, CRC(0f5f4cc6) SHA1(caa2b514fb1f2a815e63f7b8c6b79ce2dfa308c4), ROM_SKIP(7) )
ROM_LOAD64_BYTE( "l63-56", 0x000000, 0x100000, CRC(42764ea5) SHA1(805245f01006bd974fbac56f688cfcf137ddc914) )
ROM_LOAD64_BYTE( "l55-48", 0x000001, 0x100000, CRC(0c7592bb) SHA1(d5bd6b872abad58947842205f9eac46fd065e88f) )
ROM_LOAD64_BYTE( "l47-40", 0x000002, 0x100000, CRC(6d7dcdb1) SHA1(914dae3b9df5c861f794b683571c5fb0c2c3c3fd) )
ROM_LOAD64_BYTE( "l39-32", 0x000003, 0x100000, CRC(ef3b8d98) SHA1(858c3342e9693bfe887b91dde1116a1656a1a105) )
ROM_LOAD64_BYTE( "l31-24", 0x000004, 0x100000, CRC(132d628e) SHA1(3ff9fa86092eb01f21ca3ccf1ee1e3a583cbdecb) )
ROM_LOAD64_BYTE( "l23-16", 0x000005, 0x100000, CRC(b841f039) SHA1(79f661aee009aef2f5ad4122ae3e0ac94097a427) )
ROM_LOAD64_BYTE( "l15-08", 0x000006, 0x100000, CRC(0800214e) SHA1(5372f2c3470619a4967958c76055486f76b5f150) )
ROM_LOAD64_BYTE( "l07-00", 0x000007, 0x100000, CRC(f83b2e78) SHA1(83ee9d2bfba83e04fb794270926bd3e558c9aaa4) )
ROM_LOAD64_BYTE( "h63-56", 0x800000, 0x080000, CRC(67740765) SHA1(8b22413d25e0dbfe2227d1a8a023961a4c13cb76) )
ROM_LOAD64_BYTE( "h55-48", 0x800001, 0x080000, CRC(ffed0091) SHA1(6c8104acd7e6d95a111f9c7a4d3b6984293d72c4) )
ROM_LOAD64_BYTE( "h47-40", 0x800002, 0x080000, CRC(6f448f72) SHA1(3a298b9851e4ba7aa611aa6c2b0dcf06f4301463) )
ROM_LOAD64_BYTE( "h39-32", 0x800003, 0x080000, CRC(25a5bd67) SHA1(79f29bd36afb4574b9c923eee293964284713540) )
ROM_LOAD64_BYTE( "h31-24", 0x800004, 0x080000, CRC(e7088cc0) SHA1(4cb184de748c5633e669a4675e6db9920d34811e) )
ROM_LOAD64_BYTE( "h23-16", 0x800005, 0x080000, CRC(ab477a76) SHA1(ae9aa97dbc758cd741710fe08c6ea94a0a318451) )
ROM_LOAD64_BYTE( "h15-08", 0x800006, 0x080000, CRC(25a423f1) SHA1(7530cf2e28e0755bfcbd70789ef5cbbfb3d94f9f) )
ROM_LOAD64_BYTE( "h07-00", 0x800007, 0x080000, CRC(0f5f4cc6) SHA1(caa2b514fb1f2a815e63f7b8c6b79ce2dfa308c4) )
ROM_COPY( "romboard", 0x800000, 0xc00000, 0x400000 )
ROM_END
@ -2288,22 +2288,22 @@ ROM_START( freezeat )
ROM_LOAD16_WORD("jagwave.rom", 0x0000, 0x1000, CRC(7a25ee5b) SHA1(58117e11fd6478c521fbd3fdbe157f39567552f0) )
ROM_REGION32_BE( 0x1000000, "romboard", 0 ) /* 16MB for 64-bit ROM data */
ROMX_LOAD( "fish_gr0.63-56", 0x000000, 0x100000, CRC(b61061c5) SHA1(aeb409aa5073232d80ed81b27946e753290234f4), ROM_SKIP(7) )
ROMX_LOAD( "fish_gr0.55-48", 0x000001, 0x100000, CRC(c85acf42) SHA1(c3365caeb126a83a7e7afcda25f05849ceb5c98b), ROM_SKIP(7) )
ROMX_LOAD( "fish_gr0.47-40", 0x000002, 0x100000, CRC(67f78f59) SHA1(40b256a8939fad365c7e896cff4a959fcc70a477), ROM_SKIP(7) )
ROMX_LOAD( "fish_gr0.39-32", 0x000003, 0x100000, CRC(6be0508a) SHA1(20f617278ce1666348822d80686cecd8d9b1bc78), ROM_SKIP(7) )
ROMX_LOAD( "fish_gr0.31-24", 0x000004, 0x100000, CRC(905606e0) SHA1(866cd98ea2399fed96f76b16dce751e2c7cfdc98), ROM_SKIP(7) )
ROMX_LOAD( "fish_gr0.23-16", 0x000005, 0x100000, CRC(cdeef6fa) SHA1(1b4d58951b662040540e7d51f88c1b6f282562ee), ROM_SKIP(7) )
ROMX_LOAD( "fish_gr0.15-08", 0x000006, 0x100000, CRC(ad81f204) SHA1(58584a6c8c6cfb6366eaa10aba8a226e419f5ce9), ROM_SKIP(7) )
ROMX_LOAD( "fish_gr0.07-00", 0x000007, 0x100000, CRC(10ce7254) SHA1(2a88d45dbe78ea8358ecd8522b38d775a2fdb34a), ROM_SKIP(7) )
ROMX_LOAD( "fish_eng.63-56", 0x800000, 0x100000, CRC(4a03f971) SHA1(1ae5ad9a6cd2d612c6519193134dcd5a3f6a5049), ROM_SKIP(7) )
ROMX_LOAD( "fish_eng.55-48", 0x800001, 0x100000, CRC(6bc00de0) SHA1(b1b180c33906826703452875ce250b28352e2797), ROM_SKIP(7) )
ROMX_LOAD( "fish_eng.47-40", 0x800002, 0x100000, CRC(41ccc677) SHA1(76ee042632cfdcc99a9bfb75f2a4ef04e08f101b), ROM_SKIP(7) )
ROMX_LOAD( "fish_eng.39-32", 0x800003, 0x100000, CRC(59a8fa03) SHA1(19e91a4791e0d2dbd8578cee0fa07c491204b0dc), ROM_SKIP(7) )
ROMX_LOAD( "fish_eng.31-24", 0x800004, 0x100000, CRC(c3bb50a1) SHA1(b868ac0812d1c13feae82d293bb323a93a72e1d3), ROM_SKIP(7) )
ROMX_LOAD( "fish_eng.23-16", 0x800005, 0x100000, CRC(237cfc93) SHA1(15f61dc621c5328cc7752c76b2b1dae265a5e886), ROM_SKIP(7) )
ROMX_LOAD( "fish_eng.15-08", 0x800006, 0x100000, CRC(65bec279) SHA1(5e99972279ee9ad32e67866fc63799579a10f2dd), ROM_SKIP(7) )
ROMX_LOAD( "fish_eng.07-00", 0x800007, 0x100000, CRC(13fa20ad) SHA1(0a04fdea025109c0e604ef2a6d58cfb3adce9bd1), ROM_SKIP(7) )
ROM_LOAD64_BYTE( "fish_gr0.63-56", 0x000000, 0x100000, CRC(b61061c5) SHA1(aeb409aa5073232d80ed81b27946e753290234f4) )
ROM_LOAD64_BYTE( "fish_gr0.55-48", 0x000001, 0x100000, CRC(c85acf42) SHA1(c3365caeb126a83a7e7afcda25f05849ceb5c98b) )
ROM_LOAD64_BYTE( "fish_gr0.47-40", 0x000002, 0x100000, CRC(67f78f59) SHA1(40b256a8939fad365c7e896cff4a959fcc70a477) )
ROM_LOAD64_BYTE( "fish_gr0.39-32", 0x000003, 0x100000, CRC(6be0508a) SHA1(20f617278ce1666348822d80686cecd8d9b1bc78) )
ROM_LOAD64_BYTE( "fish_gr0.31-24", 0x000004, 0x100000, CRC(905606e0) SHA1(866cd98ea2399fed96f76b16dce751e2c7cfdc98) )
ROM_LOAD64_BYTE( "fish_gr0.23-16", 0x000005, 0x100000, CRC(cdeef6fa) SHA1(1b4d58951b662040540e7d51f88c1b6f282562ee) )
ROM_LOAD64_BYTE( "fish_gr0.15-08", 0x000006, 0x100000, CRC(ad81f204) SHA1(58584a6c8c6cfb6366eaa10aba8a226e419f5ce9) )
ROM_LOAD64_BYTE( "fish_gr0.07-00", 0x000007, 0x100000, CRC(10ce7254) SHA1(2a88d45dbe78ea8358ecd8522b38d775a2fdb34a) )
ROM_LOAD64_BYTE( "fish_eng.63-56", 0x800000, 0x100000, CRC(4a03f971) SHA1(1ae5ad9a6cd2d612c6519193134dcd5a3f6a5049) )
ROM_LOAD64_BYTE( "fish_eng.55-48", 0x800001, 0x100000, CRC(6bc00de0) SHA1(b1b180c33906826703452875ce250b28352e2797) )
ROM_LOAD64_BYTE( "fish_eng.47-40", 0x800002, 0x100000, CRC(41ccc677) SHA1(76ee042632cfdcc99a9bfb75f2a4ef04e08f101b) )
ROM_LOAD64_BYTE( "fish_eng.39-32", 0x800003, 0x100000, CRC(59a8fa03) SHA1(19e91a4791e0d2dbd8578cee0fa07c491204b0dc) )
ROM_LOAD64_BYTE( "fish_eng.31-24", 0x800004, 0x100000, CRC(c3bb50a1) SHA1(b868ac0812d1c13feae82d293bb323a93a72e1d3) )
ROM_LOAD64_BYTE( "fish_eng.23-16", 0x800005, 0x100000, CRC(237cfc93) SHA1(15f61dc621c5328cc7752c76b2b1dae265a5e886) )
ROM_LOAD64_BYTE( "fish_eng.15-08", 0x800006, 0x100000, CRC(65bec279) SHA1(5e99972279ee9ad32e67866fc63799579a10f2dd) )
ROM_LOAD64_BYTE( "fish_eng.07-00", 0x800007, 0x100000, CRC(13fa20ad) SHA1(0a04fdea025109c0e604ef2a6d58cfb3adce9bd1) )
ROM_END
ROM_START( freezeatjp )
@ -2317,22 +2317,22 @@ ROM_START( freezeatjp )
ROM_LOAD16_WORD("jagwave.rom", 0x0000, 0x1000, CRC(7a25ee5b) SHA1(58117e11fd6478c521fbd3fdbe157f39567552f0) )
ROM_REGION32_BE( 0x1000000, "romboard", 0 ) /* 16MB for 64-bit ROM data */
ROMX_LOAD( "fish_gr0.63-56", 0x000000, 0x100000, CRC(b61061c5) SHA1(aeb409aa5073232d80ed81b27946e753290234f4), ROM_SKIP(7) )
ROMX_LOAD( "fish_gr0.55-48", 0x000001, 0x100000, CRC(c85acf42) SHA1(c3365caeb126a83a7e7afcda25f05849ceb5c98b), ROM_SKIP(7) )
ROMX_LOAD( "fish_gr0.47-40", 0x000002, 0x100000, CRC(67f78f59) SHA1(40b256a8939fad365c7e896cff4a959fcc70a477), ROM_SKIP(7) )
ROMX_LOAD( "fish_gr0.39-32", 0x000003, 0x100000, CRC(6be0508a) SHA1(20f617278ce1666348822d80686cecd8d9b1bc78), ROM_SKIP(7) )
ROMX_LOAD( "fish_gr0.31-24", 0x000004, 0x100000, CRC(905606e0) SHA1(866cd98ea2399fed96f76b16dce751e2c7cfdc98), ROM_SKIP(7) )
ROMX_LOAD( "fish_gr0.23-16", 0x000005, 0x100000, CRC(cdeef6fa) SHA1(1b4d58951b662040540e7d51f88c1b6f282562ee), ROM_SKIP(7) )
ROMX_LOAD( "fish_gr0.15-08", 0x000006, 0x100000, CRC(ad81f204) SHA1(58584a6c8c6cfb6366eaa10aba8a226e419f5ce9), ROM_SKIP(7) )
ROMX_LOAD( "fish_gr0.07-00", 0x000007, 0x100000, CRC(10ce7254) SHA1(2a88d45dbe78ea8358ecd8522b38d775a2fdb34a), ROM_SKIP(7) )
ROMX_LOAD( "fish_jpn.63-56", 0x800000, 0x100000, CRC(78c65a1f) SHA1(1a97737c222809930bde9df7a55e1ff1581a3202), ROM_SKIP(7) )
ROMX_LOAD( "fish_jpn.55-48", 0x800001, 0x100000, CRC(9ffac0f1) SHA1(3ba5f8de32a5febb5d3d22f59ccb477834d33934), ROM_SKIP(7) )
ROMX_LOAD( "fish_jpn.47-40", 0x800002, 0x100000, CRC(18543fb7) SHA1(4ab9969de9a66d6b7b70cfa5290c1cf7bce54838), ROM_SKIP(7) )
ROMX_LOAD( "fish_jpn.39-32", 0x800003, 0x100000, CRC(22578f15) SHA1(4e314b22456ed4e4282406e990207e3b9bdf6203), ROM_SKIP(7) )
ROMX_LOAD( "fish_jpn.31-24", 0x800004, 0x100000, CRC(5c41b91b) SHA1(ce354c8a4a3872b009e8af9f75e8f4f0892c7a7e), ROM_SKIP(7) )
ROMX_LOAD( "fish_jpn.23-16", 0x800005, 0x100000, CRC(c2462646) SHA1(207d51a2aae076bc78548cf96325e670ea41609c), ROM_SKIP(7) )
ROMX_LOAD( "fish_jpn.15-08", 0x800006, 0x100000, CRC(f8d998ec) SHA1(ffce4a16fbb2fff3dc0a29c0cede4dfe6316e97b), ROM_SKIP(7) )
ROMX_LOAD( "fish_jpn.07-00", 0x800007, 0x100000, CRC(e7e0daa5) SHA1(108da84cc6b4df7ae88cfdacd27c1728e59cdb81), ROM_SKIP(7) )
ROM_LOAD64_BYTE( "fish_gr0.63-56", 0x000000, 0x100000, CRC(b61061c5) SHA1(aeb409aa5073232d80ed81b27946e753290234f4) )
ROM_LOAD64_BYTE( "fish_gr0.55-48", 0x000001, 0x100000, CRC(c85acf42) SHA1(c3365caeb126a83a7e7afcda25f05849ceb5c98b) )
ROM_LOAD64_BYTE( "fish_gr0.47-40", 0x000002, 0x100000, CRC(67f78f59) SHA1(40b256a8939fad365c7e896cff4a959fcc70a477) )
ROM_LOAD64_BYTE( "fish_gr0.39-32", 0x000003, 0x100000, CRC(6be0508a) SHA1(20f617278ce1666348822d80686cecd8d9b1bc78) )
ROM_LOAD64_BYTE( "fish_gr0.31-24", 0x000004, 0x100000, CRC(905606e0) SHA1(866cd98ea2399fed96f76b16dce751e2c7cfdc98) )
ROM_LOAD64_BYTE( "fish_gr0.23-16", 0x000005, 0x100000, CRC(cdeef6fa) SHA1(1b4d58951b662040540e7d51f88c1b6f282562ee) )
ROM_LOAD64_BYTE( "fish_gr0.15-08", 0x000006, 0x100000, CRC(ad81f204) SHA1(58584a6c8c6cfb6366eaa10aba8a226e419f5ce9) )
ROM_LOAD64_BYTE( "fish_gr0.07-00", 0x000007, 0x100000, CRC(10ce7254) SHA1(2a88d45dbe78ea8358ecd8522b38d775a2fdb34a) )
ROM_LOAD64_BYTE( "fish_jpn.63-56", 0x800000, 0x100000, CRC(78c65a1f) SHA1(1a97737c222809930bde9df7a55e1ff1581a3202) )
ROM_LOAD64_BYTE( "fish_jpn.55-48", 0x800001, 0x100000, CRC(9ffac0f1) SHA1(3ba5f8de32a5febb5d3d22f59ccb477834d33934) )
ROM_LOAD64_BYTE( "fish_jpn.47-40", 0x800002, 0x100000, CRC(18543fb7) SHA1(4ab9969de9a66d6b7b70cfa5290c1cf7bce54838) )
ROM_LOAD64_BYTE( "fish_jpn.39-32", 0x800003, 0x100000, CRC(22578f15) SHA1(4e314b22456ed4e4282406e990207e3b9bdf6203) )
ROM_LOAD64_BYTE( "fish_jpn.31-24", 0x800004, 0x100000, CRC(5c41b91b) SHA1(ce354c8a4a3872b009e8af9f75e8f4f0892c7a7e) )
ROM_LOAD64_BYTE( "fish_jpn.23-16", 0x800005, 0x100000, CRC(c2462646) SHA1(207d51a2aae076bc78548cf96325e670ea41609c) )
ROM_LOAD64_BYTE( "fish_jpn.15-08", 0x800006, 0x100000, CRC(f8d998ec) SHA1(ffce4a16fbb2fff3dc0a29c0cede4dfe6316e97b) )
ROM_LOAD64_BYTE( "fish_jpn.07-00", 0x800007, 0x100000, CRC(e7e0daa5) SHA1(108da84cc6b4df7ae88cfdacd27c1728e59cdb81) )
ROM_END
ROM_START( freezeat2 )
@ -2346,22 +2346,22 @@ ROM_START( freezeat2 )
ROM_LOAD16_WORD("jagwave.rom", 0x0000, 0x1000, CRC(7a25ee5b) SHA1(58117e11fd6478c521fbd3fdbe157f39567552f0) )
ROM_REGION32_BE( 0x1000000, "romboard", 0 ) /* 16MB for 64-bit ROM data */
ROMX_LOAD( "fish_gr0.63-56", 0x000000, 0x100000, CRC(99d0dc75) SHA1(b32126eea70c7584d1c34a6ca33282fbaf4b03aa), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.55-48", 0x000001, 0x100000, CRC(2dfdfe62) SHA1(e0554d36ef5cf4b6ce171857ea4f2737f11286a5), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.47-40", 0x000002, 0x100000, CRC(722aee2a) SHA1(bc79433131bed5b08453d1b80324a28a552783de), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.39-32", 0x000003, 0x100000, CRC(919e31b4) SHA1(3807d4629d8277c780dba888c23d17ba47803f27), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.31-24", 0x000004, 0x100000, CRC(a957ac95) SHA1(ddfaca994c06976bee8b123857904e64f40b7f31), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.23-16", 0x000005, 0x100000, CRC(a147ec66) SHA1(6291008158d581b81e025ed34ff0950983c12c67), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.15-08", 0x000006, 0x100000, CRC(206d2f38) SHA1(6aca89df26d3602ff1da3c23f19e0782439623ff), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.07-00", 0x000007, 0x100000, CRC(06559831) SHA1(b2c022457425d7900337cfa2fd1622336c0c0bc5), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.63-56", 0x800000, 0x100000, CRC(30c624d2) SHA1(4ced77d1663169d0cb37d6728ec52e67f05064c5), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.55-48", 0x800001, 0x100000, CRC(049cd60f) SHA1(8a7615a76b57a4e6ef5d95a5ee6c56086671dbb6), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.47-40", 0x800002, 0x100000, CRC(d6aaf3bf) SHA1(1c597bdc0e61fd0941cff5a8a93f24f108bd0daa), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.39-32", 0x800003, 0x100000, CRC(7d6ebc69) SHA1(668769297f75f9c367bc5cde26419ed092fc9dd8), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.31-24", 0x800004, 0x100000, CRC(6e5fee1f) SHA1(1eca79c8d395f881d0a05f10073998fcae70c3b1), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.23-16", 0x800005, 0x100000, CRC(a8b1e9b4) SHA1(066285928e574e656510b90bc212a8d86660bd07), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.15-08", 0x800006, 0x100000, CRC(c90080e6) SHA1(a764bdd6b4e9e727f7468a53424a9211ec5fd5a8), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.07-00", 0x800007, 0x100000, CRC(1f20c020) SHA1(71b32386dc0444264f2f1e2a81899e0e9260994c), ROM_SKIP(7) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.63-56", 0x000000, 0x100000, CRC(99d0dc75) SHA1(b32126eea70c7584d1c34a6ca33282fbaf4b03aa) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.55-48", 0x000001, 0x100000, CRC(2dfdfe62) SHA1(e0554d36ef5cf4b6ce171857ea4f2737f11286a5) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.47-40", 0x000002, 0x100000, CRC(722aee2a) SHA1(bc79433131bed5b08453d1b80324a28a552783de) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.39-32", 0x000003, 0x100000, CRC(919e31b4) SHA1(3807d4629d8277c780dba888c23d17ba47803f27) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.31-24", 0x000004, 0x100000, CRC(a957ac95) SHA1(ddfaca994c06976bee8b123857904e64f40b7f31) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.23-16", 0x000005, 0x100000, CRC(a147ec66) SHA1(6291008158d581b81e025ed34ff0950983c12c67) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.15-08", 0x000006, 0x100000, CRC(206d2f38) SHA1(6aca89df26d3602ff1da3c23f19e0782439623ff) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.07-00", 0x000007, 0x100000, CRC(06559831) SHA1(b2c022457425d7900337cfa2fd1622336c0c0bc5) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.63-56", 0x800000, 0x100000, CRC(30c624d2) SHA1(4ced77d1663169d0cb37d6728ec52e67f05064c5) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.55-48", 0x800001, 0x100000, CRC(049cd60f) SHA1(8a7615a76b57a4e6ef5d95a5ee6c56086671dbb6) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.47-40", 0x800002, 0x100000, CRC(d6aaf3bf) SHA1(1c597bdc0e61fd0941cff5a8a93f24f108bd0daa) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.39-32", 0x800003, 0x100000, CRC(7d6ebc69) SHA1(668769297f75f9c367bc5cde26419ed092fc9dd8) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.31-24", 0x800004, 0x100000, CRC(6e5fee1f) SHA1(1eca79c8d395f881d0a05f10073998fcae70c3b1) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.23-16", 0x800005, 0x100000, CRC(a8b1e9b4) SHA1(066285928e574e656510b90bc212a8d86660bd07) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.15-08", 0x800006, 0x100000, CRC(c90080e6) SHA1(a764bdd6b4e9e727f7468a53424a9211ec5fd5a8) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.07-00", 0x800007, 0x100000, CRC(1f20c020) SHA1(71b32386dc0444264f2f1e2a81899e0e9260994c) ) // sldh
ROM_END
ROM_START( freezeat3 )
@ -2375,22 +2375,22 @@ ROM_START( freezeat3 )
ROM_LOAD16_WORD("jagwave.rom", 0x0000, 0x1000, CRC(7a25ee5b) SHA1(58117e11fd6478c521fbd3fdbe157f39567552f0) )
ROM_REGION32_BE( 0x1000000, "romboard", 0 ) /* 16MB for 64-bit ROM data */
ROMX_LOAD( "fish_gr0.63-56", 0x000000, 0x100000, CRC(36799449) SHA1(bb706fe7fdc68f840702a127eed7d4519dd45869), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.55-48", 0x000001, 0x100000, CRC(23959947) SHA1(a35a6e62c7b2be57d41b1b64be93713cbf897f0a), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.47-40", 0x000002, 0x100000, CRC(4657e4e0) SHA1(b6c07182babcb0a106bf4a8f2e3f524371dd882d), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.39-32", 0x000003, 0x100000, CRC(b6ea4b64) SHA1(176f94f14307c40b9c611d6f6bc9118e498cdfad), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.31-24", 0x000004, 0x100000, CRC(7d4ce71f) SHA1(a1cf5aa9df8dd29c777c10cfdce0925981584261), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.23-16", 0x000005, 0x100000, CRC(02db4fd1) SHA1(fce6f31802bf36d6b006f0b212f553bdf21f9374), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.15-08", 0x000006, 0x100000, CRC(7d496d6c) SHA1(f82db0621729a00acf4077482e9dfab040ac829b), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.07-00", 0x000007, 0x100000, CRC(3aa389d8) SHA1(52502f2f3c91d7c29261f60fe8f489a352399c96), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.63-56", 0x800000, 0x100000, CRC(ead678c9) SHA1(f83d467f6685965b6176b10adbd4e35ef808baf3), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.55-48", 0x800001, 0x100000, CRC(3591e752) SHA1(df242d2f724edfd78f7191f0ba7a8cde2c09b25f), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.47-40", 0x800002, 0x100000, CRC(e29a7a6c) SHA1(0bfb26076b390492eed81d4c4f0852c64fdccfce), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.39-32", 0x800003, 0x100000, CRC(e980f957) SHA1(78e8ef07f443ce7991a46005627d5802d36d731c), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.31-24", 0x800004, 0x100000, CRC(d90c5221) SHA1(7a330f39f3751d58157f872d92c3c2b91fe60d14), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.23-16", 0x800005, 0x100000, CRC(9be0d4de) SHA1(9bb67a1f1db77483e896fed7096c1e23c153ede4), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.15-08", 0x800006, 0x100000, CRC(122248af) SHA1(80dd5486106d475bd9f6d78919ebeb176e7becff), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.07-00", 0x800007, 0x100000, CRC(5ae08327) SHA1(822d8292793509ebfbfce27e92a74c78c4328bda), ROM_SKIP(7) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.63-56", 0x000000, 0x100000, CRC(36799449) SHA1(bb706fe7fdc68f840702a127eed7d4519dd45869) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.55-48", 0x000001, 0x100000, CRC(23959947) SHA1(a35a6e62c7b2be57d41b1b64be93713cbf897f0a) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.47-40", 0x000002, 0x100000, CRC(4657e4e0) SHA1(b6c07182babcb0a106bf4a8f2e3f524371dd882d) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.39-32", 0x000003, 0x100000, CRC(b6ea4b64) SHA1(176f94f14307c40b9c611d6f6bc9118e498cdfad) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.31-24", 0x000004, 0x100000, CRC(7d4ce71f) SHA1(a1cf5aa9df8dd29c777c10cfdce0925981584261) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.23-16", 0x000005, 0x100000, CRC(02db4fd1) SHA1(fce6f31802bf36d6b006f0b212f553bdf21f9374) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.15-08", 0x000006, 0x100000, CRC(7d496d6c) SHA1(f82db0621729a00acf4077482e9dfab040ac829b) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.07-00", 0x000007, 0x100000, CRC(3aa389d8) SHA1(52502f2f3c91d7c29261f60fe8f489a352399c96) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.63-56", 0x800000, 0x100000, CRC(ead678c9) SHA1(f83d467f6685965b6176b10adbd4e35ef808baf3) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.55-48", 0x800001, 0x100000, CRC(3591e752) SHA1(df242d2f724edfd78f7191f0ba7a8cde2c09b25f) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.47-40", 0x800002, 0x100000, CRC(e29a7a6c) SHA1(0bfb26076b390492eed81d4c4f0852c64fdccfce) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.39-32", 0x800003, 0x100000, CRC(e980f957) SHA1(78e8ef07f443ce7991a46005627d5802d36d731c) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.31-24", 0x800004, 0x100000, CRC(d90c5221) SHA1(7a330f39f3751d58157f872d92c3c2b91fe60d14) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.23-16", 0x800005, 0x100000, CRC(9be0d4de) SHA1(9bb67a1f1db77483e896fed7096c1e23c153ede4) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.15-08", 0x800006, 0x100000, CRC(122248af) SHA1(80dd5486106d475bd9f6d78919ebeb176e7becff) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.07-00", 0x800007, 0x100000, CRC(5ae08327) SHA1(822d8292793509ebfbfce27e92a74c78c4328bda) ) // sldh
ROM_END
ROM_START( freezeat4 )
@ -2404,22 +2404,22 @@ ROM_START( freezeat4 )
ROM_LOAD16_WORD("jagwave.rom", 0x0000, 0x1000, CRC(7a25ee5b) SHA1(58117e11fd6478c521fbd3fdbe157f39567552f0) )
ROM_REGION32_BE( 0x1000000, "romboard", 0 ) /* 16MB for 64-bit ROM data */
ROMX_LOAD( "fish_gr0.63-56", 0x000000, 0x100000, CRC(36799449) SHA1(bb706fe7fdc68f840702a127eed7d4519dd45869), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.55-48", 0x000001, 0x100000, CRC(23959947) SHA1(a35a6e62c7b2be57d41b1b64be93713cbf897f0a), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.47-40", 0x000002, 0x100000, CRC(4657e4e0) SHA1(b6c07182babcb0a106bf4a8f2e3f524371dd882d), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.39-32", 0x000003, 0x100000, CRC(b6ea4b64) SHA1(176f94f14307c40b9c611d6f6bc9118e498cdfad), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.31-24", 0x000004, 0x100000, CRC(7d4ce71f) SHA1(a1cf5aa9df8dd29c777c10cfdce0925981584261), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.23-16", 0x000005, 0x100000, CRC(02db4fd1) SHA1(fce6f31802bf36d6b006f0b212f553bdf21f9374), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.15-08", 0x000006, 0x100000, CRC(7d496d6c) SHA1(f82db0621729a00acf4077482e9dfab040ac829b), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.07-00", 0x000007, 0x100000, CRC(3aa389d8) SHA1(52502f2f3c91d7c29261f60fe8f489a352399c96), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.63-56", 0x800000, 0x100000, CRC(c91b6ee4) SHA1(58d2d6b1b9847150b8b3e358842c4a097ef91475), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.55-48", 0x800001, 0x100000, CRC(65528e55) SHA1(18020cababed379f77149b7e89e80b294766df31), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.47-40", 0x800002, 0x100000, CRC(8fe4187f) SHA1(c9ceec40688617e1251142465d0e608f80a83e40), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.39-32", 0x800003, 0x100000, CRC(fdf05a42) SHA1(849e224b68be2fb396ee4cb4729517470af7c282), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.31-24", 0x800004, 0x100000, CRC(bb2cd741) SHA1(ac55a54c702d222cb1b9bb480b0f7a71bc315878), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.23-16", 0x800005, 0x100000, CRC(ea8c5984) SHA1(eca1619c17dfac154a2024ec49b4b4f9f06a50c9), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.15-08", 0x800006, 0x100000, CRC(0b00c816) SHA1(879b0e9d92fe737d740c348dc1cc376c8abfbdb8), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.07-00", 0x800007, 0x100000, CRC(a84335c3) SHA1(340f5ddb9bff1ecd469eab8be36cc0ede84f1f5e), ROM_SKIP(7) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.63-56", 0x000000, 0x100000, CRC(36799449) SHA1(bb706fe7fdc68f840702a127eed7d4519dd45869) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.55-48", 0x000001, 0x100000, CRC(23959947) SHA1(a35a6e62c7b2be57d41b1b64be93713cbf897f0a) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.47-40", 0x000002, 0x100000, CRC(4657e4e0) SHA1(b6c07182babcb0a106bf4a8f2e3f524371dd882d) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.39-32", 0x000003, 0x100000, CRC(b6ea4b64) SHA1(176f94f14307c40b9c611d6f6bc9118e498cdfad) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.31-24", 0x000004, 0x100000, CRC(7d4ce71f) SHA1(a1cf5aa9df8dd29c777c10cfdce0925981584261) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.23-16", 0x000005, 0x100000, CRC(02db4fd1) SHA1(fce6f31802bf36d6b006f0b212f553bdf21f9374) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.15-08", 0x000006, 0x100000, CRC(7d496d6c) SHA1(f82db0621729a00acf4077482e9dfab040ac829b) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.07-00", 0x000007, 0x100000, CRC(3aa389d8) SHA1(52502f2f3c91d7c29261f60fe8f489a352399c96) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.63-56", 0x800000, 0x100000, CRC(c91b6ee4) SHA1(58d2d6b1b9847150b8b3e358842c4a097ef91475) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.55-48", 0x800001, 0x100000, CRC(65528e55) SHA1(18020cababed379f77149b7e89e80b294766df31) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.47-40", 0x800002, 0x100000, CRC(8fe4187f) SHA1(c9ceec40688617e1251142465d0e608f80a83e40) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.39-32", 0x800003, 0x100000, CRC(fdf05a42) SHA1(849e224b68be2fb396ee4cb4729517470af7c282) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.31-24", 0x800004, 0x100000, CRC(bb2cd741) SHA1(ac55a54c702d222cb1b9bb480b0f7a71bc315878) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.23-16", 0x800005, 0x100000, CRC(ea8c5984) SHA1(eca1619c17dfac154a2024ec49b4b4f9f06a50c9) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.15-08", 0x800006, 0x100000, CRC(0b00c816) SHA1(879b0e9d92fe737d740c348dc1cc376c8abfbdb8) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.07-00", 0x800007, 0x100000, CRC(a84335c3) SHA1(340f5ddb9bff1ecd469eab8be36cc0ede84f1f5e) ) // sldh
ROM_END
ROM_START( freezeat5 )
@ -2433,22 +2433,22 @@ ROM_START( freezeat5 )
ROM_LOAD16_WORD("jagwave.rom", 0x0000, 0x1000, CRC(7a25ee5b) SHA1(58117e11fd6478c521fbd3fdbe157f39567552f0) )
ROM_REGION32_BE( 0x1000000, "romboard", 0 ) /* 16MB for 64-bit ROM data */
ROMX_LOAD( "fish_gr0.63-56", 0x000000, 0x100000, CRC(404a10c3) SHA1(8e353ac7608bd54f0fea610c85166ad14f2faadb), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.55-48", 0x000001, 0x100000, CRC(0b262f2f) SHA1(2a963cb5c3344091406d090edfdda498709c6aa6), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.47-40", 0x000002, 0x100000, CRC(43f86d26) SHA1(b31d36b11052514b5bcd5bf8e400457ca572c306), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.39-32", 0x000003, 0x100000, CRC(5cf0228f) SHA1(7a8c59cf9a7744e9f332db5f661f507323375968), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.31-24", 0x000004, 0x100000, CRC(7a24ff98) SHA1(db9e0e8bb417f187267a6e4fc1e66ff060ee4096), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.23-16", 0x000005, 0x100000, CRC(ea163c93) SHA1(d07ed26191d36497c56b15774625a49ecb958386), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.15-08", 0x000006, 0x100000, CRC(d364534f) SHA1(153908bb8929a898945f768f8bc3d853c6aeaceb), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.07-00", 0x000007, 0x100000, CRC(7ba4cb0d) SHA1(16bd487123f499b7080596dc76253081179a0f66), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.63-56", 0x800000, 0x100000, CRC(0e1fc4a9) SHA1(a200bb0af5f1e2c3f8d221ae4e9ba55b9dfb8550), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.55-48", 0x800001, 0x100000, CRC(b696b875) SHA1(16dc4d5cee3f08360cf19926584419c21d781f45), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.47-40", 0x800002, 0x100000, CRC(e78d9302) SHA1(f8b5ed992c433d63677edbeafd3e465b1d42b455), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.39-32", 0x800003, 0x100000, CRC(9b50374c) SHA1(d8af3c9d8e0459e24b974cdf2e75c7c39582912f), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.31-24", 0x800004, 0x100000, CRC(b6a19b7e) SHA1(5668b27db4dade8efb1524b8ecd1fe78498e8460), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.23-16", 0x800005, 0x100000, CRC(ff835b67) SHA1(19da2de1d067069871c33c8b25fd2eac2d03f627), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.15-08", 0x800006, 0x100000, CRC(8daf6995) SHA1(2f44031378b5fb1ba1f80a966dbe902316dc6fe8), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.07-00", 0x800007, 0x100000, CRC(3676ac70) SHA1(640c4d4f53ca2bcae2009e402fd6ad70e40defa4), ROM_SKIP(7) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.63-56", 0x000000, 0x100000, CRC(404a10c3) SHA1(8e353ac7608bd54f0fea610c85166ad14f2faadb) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.55-48", 0x000001, 0x100000, CRC(0b262f2f) SHA1(2a963cb5c3344091406d090edfdda498709c6aa6) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.47-40", 0x000002, 0x100000, CRC(43f86d26) SHA1(b31d36b11052514b5bcd5bf8e400457ca572c306) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.39-32", 0x000003, 0x100000, CRC(5cf0228f) SHA1(7a8c59cf9a7744e9f332db5f661f507323375968) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.31-24", 0x000004, 0x100000, CRC(7a24ff98) SHA1(db9e0e8bb417f187267a6e4fc1e66ff060ee4096) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.23-16", 0x000005, 0x100000, CRC(ea163c93) SHA1(d07ed26191d36497c56b15774625a49ecb958386) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.15-08", 0x000006, 0x100000, CRC(d364534f) SHA1(153908bb8929a898945f768f8bc3d853c6aeaceb) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.07-00", 0x000007, 0x100000, CRC(7ba4cb0d) SHA1(16bd487123f499b7080596dc76253081179a0f66) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.63-56", 0x800000, 0x100000, CRC(0e1fc4a9) SHA1(a200bb0af5f1e2c3f8d221ae4e9ba55b9dfb8550) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.55-48", 0x800001, 0x100000, CRC(b696b875) SHA1(16dc4d5cee3f08360cf19926584419c21d781f45) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.47-40", 0x800002, 0x100000, CRC(e78d9302) SHA1(f8b5ed992c433d63677edbeafd3e465b1d42b455) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.39-32", 0x800003, 0x100000, CRC(9b50374c) SHA1(d8af3c9d8e0459e24b974cdf2e75c7c39582912f) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.31-24", 0x800004, 0x100000, CRC(b6a19b7e) SHA1(5668b27db4dade8efb1524b8ecd1fe78498e8460) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.23-16", 0x800005, 0x100000, CRC(ff835b67) SHA1(19da2de1d067069871c33c8b25fd2eac2d03f627) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.15-08", 0x800006, 0x100000, CRC(8daf6995) SHA1(2f44031378b5fb1ba1f80a966dbe902316dc6fe8) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.07-00", 0x800007, 0x100000, CRC(3676ac70) SHA1(640c4d4f53ca2bcae2009e402fd6ad70e40defa4) ) // sldh
ROM_END
ROM_START( freezeat6 )
@ -2462,22 +2462,22 @@ ROM_START( freezeat6 )
ROM_LOAD16_WORD("jagwave.rom", 0x0000, 0x1000, CRC(7a25ee5b) SHA1(58117e11fd6478c521fbd3fdbe157f39567552f0) )
ROM_REGION32_BE( 0x1000000, "romboard", 0 ) /* 16MB for 64-bit ROM data */
ROMX_LOAD( "fish_gr0.63-56", 0x000000, 0x100000, CRC(293a3308) SHA1(e4c88759c3b8f8a359db83817dbd0428350b4f7e), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.55-48", 0x000001, 0x100000, CRC(18bb4bdf) SHA1(1f6c49b3b5946390fa7582b531f8d9af3baa2567), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.47-40", 0x000002, 0x100000, CRC(1faedcc6) SHA1(1e4ecbe4553fb3ebfbd03bd7e16066ccb531d00b), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.39-32", 0x000003, 0x100000, CRC(536bc349) SHA1(06d7ac38b2c8cdc85e2cb531bba9c836e50c8247), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.31-24", 0x000004, 0x100000, CRC(813d4a31) SHA1(e024f9da2f15a482d8142870baf487297b995ed9), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.23-16", 0x000005, 0x100000, CRC(f881514b) SHA1(a694f90621e2c1569a6a5ed8920838ba5506f72e), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.15-08", 0x000006, 0x100000, CRC(d7634655) SHA1(d7ac83c0fa5d0ec57d096d4d704fe99ee8160e09), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr0.07-00", 0x000007, 0x100000, CRC(3fca32a3) SHA1(22753a9678e04d9355238e013e58d9f45315579d), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.63-56", 0x800000, 0x100000, CRC(a2b89d3a) SHA1(9cfcd0b88dea192ba39efcdccc78d1a0fd8f3388), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.55-48", 0x800001, 0x100000, CRC(766822a8) SHA1(2c9b14542a5467c1a3451559ea296da09c2cfdb9), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.47-40", 0x800002, 0x100000, CRC(112b519c) SHA1(f0e1ed1b8ad271fa9708f513b11d5cca6e550668), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.39-32", 0x800003, 0x100000, CRC(435b5d37) SHA1(ecb6e7271d993f8e315b85e69166838e66dd41a8), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.31-24", 0x800004, 0x100000, CRC(2637ae7f) SHA1(5e0bd0e08d8c1eaae725b4d55030c2698abd46e7), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.23-16", 0x800005, 0x100000, CRC(e732f1bf) SHA1(a228aee0cc36a0089716f20bfa75d87750692adb), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.15-08", 0x800006, 0x100000, CRC(7d4e2d9e) SHA1(4cb9b754b7585df4cae6bdd7085a57729d53e643), ROM_SKIP(7) ) // sldh
ROMX_LOAD( "fish_gr1.07-00", 0x800007, 0x100000, CRC(8ea036af) SHA1(1f9baec6712e0ba0e8a744529e41799217760194), ROM_SKIP(7) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.63-56", 0x000000, 0x100000, CRC(293a3308) SHA1(e4c88759c3b8f8a359db83817dbd0428350b4f7e) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.55-48", 0x000001, 0x100000, CRC(18bb4bdf) SHA1(1f6c49b3b5946390fa7582b531f8d9af3baa2567) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.47-40", 0x000002, 0x100000, CRC(1faedcc6) SHA1(1e4ecbe4553fb3ebfbd03bd7e16066ccb531d00b) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.39-32", 0x000003, 0x100000, CRC(536bc349) SHA1(06d7ac38b2c8cdc85e2cb531bba9c836e50c8247) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.31-24", 0x000004, 0x100000, CRC(813d4a31) SHA1(e024f9da2f15a482d8142870baf487297b995ed9) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.23-16", 0x000005, 0x100000, CRC(f881514b) SHA1(a694f90621e2c1569a6a5ed8920838ba5506f72e) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.15-08", 0x000006, 0x100000, CRC(d7634655) SHA1(d7ac83c0fa5d0ec57d096d4d704fe99ee8160e09) ) // sldh
ROM_LOAD64_BYTE( "fish_gr0.07-00", 0x000007, 0x100000, CRC(3fca32a3) SHA1(22753a9678e04d9355238e013e58d9f45315579d) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.63-56", 0x800000, 0x100000, CRC(a2b89d3a) SHA1(9cfcd0b88dea192ba39efcdccc78d1a0fd8f3388) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.55-48", 0x800001, 0x100000, CRC(766822a8) SHA1(2c9b14542a5467c1a3451559ea296da09c2cfdb9) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.47-40", 0x800002, 0x100000, CRC(112b519c) SHA1(f0e1ed1b8ad271fa9708f513b11d5cca6e550668) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.39-32", 0x800003, 0x100000, CRC(435b5d37) SHA1(ecb6e7271d993f8e315b85e69166838e66dd41a8) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.31-24", 0x800004, 0x100000, CRC(2637ae7f) SHA1(5e0bd0e08d8c1eaae725b4d55030c2698abd46e7) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.23-16", 0x800005, 0x100000, CRC(e732f1bf) SHA1(a228aee0cc36a0089716f20bfa75d87750692adb) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.15-08", 0x800006, 0x100000, CRC(7d4e2d9e) SHA1(4cb9b754b7585df4cae6bdd7085a57729d53e643) ) // sldh
ROM_LOAD64_BYTE( "fish_gr1.07-00", 0x800007, 0x100000, CRC(8ea036af) SHA1(1f9baec6712e0ba0e8a744529e41799217760194) ) // sldh
ROM_END

View File

@ -750,13 +750,13 @@ ROM_START( turbosub )
ROM_LOAD( "turbosub.u63", 0xc000, 0x4000, CRC(35701532) SHA1(77d957682aab10ee902c1e47c468b9ab8fe6a512) )
ROM_REGION( 0x1000, "video_cpu", 0 )
ROMX_LOAD( "27s29.u29", 0x0, 0x200, CRC(d580672b) SHA1(b56295a5b780ab5e8ff6817ebb084a8dfad8c281), ROM_SKIP(7))
ROMX_LOAD( "27s29.u28", 0x1, 0x200, CRC(f7976b87) SHA1(c19a1d375c497f1671170c7833952979819c3812), ROM_SKIP(7))
ROMX_LOAD( "27s29.u27", 0x2, 0x200, CRC(03ebd3ea) SHA1(109f5369bd36bcf0da5928b96566655c6895c737), ROM_SKIP(7))
ROMX_LOAD( "27s29.u21", 0x3, 0x200, CRC(e232384b) SHA1(cfc3acc86add06b4cb6addb3455d71123fb359ce), ROM_SKIP(7))
ROMX_LOAD( "27s29.u20", 0x4, 0x200, CRC(0a8e44d8) SHA1(2df46316510b2dbfd4c9913a1460c00d5572d586), ROM_SKIP(7))
ROMX_LOAD( "27s29.u19", 0x5, 0x200, CRC(de17e5f0) SHA1(3e14768374e1bda25183aee86a82d220b7f58ff9), ROM_SKIP(7))
ROMX_LOAD( "27s29.u18", 0x6, 0x200, CRC(e33ed0a4) SHA1(41edbdc7c022971ce14bd2f419c92714b796fad7), ROM_SKIP(7))
ROM_LOAD64_BYTE( "27s29.u29", 0x0, 0x200, CRC(d580672b) SHA1(b56295a5b780ab5e8ff6817ebb084a8dfad8c281) )
ROM_LOAD64_BYTE( "27s29.u28", 0x1, 0x200, CRC(f7976b87) SHA1(c19a1d375c497f1671170c7833952979819c3812) )
ROM_LOAD64_BYTE( "27s29.u27", 0x2, 0x200, CRC(03ebd3ea) SHA1(109f5369bd36bcf0da5928b96566655c6895c737) )
ROM_LOAD64_BYTE( "27s29.u21", 0x3, 0x200, CRC(e232384b) SHA1(cfc3acc86add06b4cb6addb3455d71123fb359ce) )
ROM_LOAD64_BYTE( "27s29.u20", 0x4, 0x200, CRC(0a8e44d8) SHA1(2df46316510b2dbfd4c9913a1460c00d5572d586) )
ROM_LOAD64_BYTE( "27s29.u19", 0x5, 0x200, CRC(de17e5f0) SHA1(3e14768374e1bda25183aee86a82d220b7f58ff9) )
ROM_LOAD64_BYTE( "27s29.u18", 0x6, 0x200, CRC(e33ed0a4) SHA1(41edbdc7c022971ce14bd2f419c92714b796fad7) )
ROM_REGION( 0x10000, "sound_cpu", 0 )
ROM_LOAD( "turbosub.u66", 0xe000, 0x2000, CRC(8db3bcdb) SHA1(e6ae324ba9dad4884e1cb3d67ce099a6f4739456) )
@ -866,13 +866,13 @@ ROM_START( turbosub7 )
ROM_LOAD( "pcb4u63.bin", 0xc000, 0x4000, CRC(35701532) SHA1(77d957682aab10ee902c1e47c468b9ab8fe6a512) )
ROM_REGION( 0x1000, "video_cpu", 0 )
ROMX_LOAD( "27s29.u29", 0x0, 0x200, CRC(d580672b) SHA1(b56295a5b780ab5e8ff6817ebb084a8dfad8c281), ROM_SKIP(7))
ROMX_LOAD( "27s29.u28", 0x1, 0x200, CRC(f7976b87) SHA1(c19a1d375c497f1671170c7833952979819c3812), ROM_SKIP(7))
ROMX_LOAD( "27s29.u27", 0x2, 0x200, CRC(03ebd3ea) SHA1(109f5369bd36bcf0da5928b96566655c6895c737), ROM_SKIP(7))
ROMX_LOAD( "27s29.u21", 0x3, 0x200, CRC(e232384b) SHA1(cfc3acc86add06b4cb6addb3455d71123fb359ce), ROM_SKIP(7))
ROMX_LOAD( "27s29.u20", 0x4, 0x200, CRC(0a8e44d8) SHA1(2df46316510b2dbfd4c9913a1460c00d5572d586), ROM_SKIP(7))
ROMX_LOAD( "27s29.u19", 0x5, 0x200, CRC(de17e5f0) SHA1(3e14768374e1bda25183aee86a82d220b7f58ff9), ROM_SKIP(7))
ROMX_LOAD( "27s29.u18", 0x6, 0x200, CRC(e33ed0a4) SHA1(41edbdc7c022971ce14bd2f419c92714b796fad7), ROM_SKIP(7))
ROM_LOAD64_BYTE( "27s29.u29", 0x0, 0x200, CRC(d580672b) SHA1(b56295a5b780ab5e8ff6817ebb084a8dfad8c281) )
ROM_LOAD64_BYTE( "27s29.u28", 0x1, 0x200, CRC(f7976b87) SHA1(c19a1d375c497f1671170c7833952979819c3812) )
ROM_LOAD64_BYTE( "27s29.u27", 0x2, 0x200, CRC(03ebd3ea) SHA1(109f5369bd36bcf0da5928b96566655c6895c737) )
ROM_LOAD64_BYTE( "27s29.u21", 0x3, 0x200, CRC(e232384b) SHA1(cfc3acc86add06b4cb6addb3455d71123fb359ce) )
ROM_LOAD64_BYTE( "27s29.u20", 0x4, 0x200, CRC(0a8e44d8) SHA1(2df46316510b2dbfd4c9913a1460c00d5572d586) )
ROM_LOAD64_BYTE( "27s29.u19", 0x5, 0x200, CRC(de17e5f0) SHA1(3e14768374e1bda25183aee86a82d220b7f58ff9) )
ROM_LOAD64_BYTE( "27s29.u18", 0x6, 0x200, CRC(e33ed0a4) SHA1(41edbdc7c022971ce14bd2f419c92714b796fad7) )
ROM_REGION( 0x10000, "sound_cpu", 0 )
ROM_LOAD( "mem6u66.bin", 0xc000, 0x4000, CRC(5091bf3d) SHA1(7ab872cef1562a45f7533c16bbbae8772673465b) )
@ -976,13 +976,13 @@ ROM_START( turbosub6 )
ROM_LOAD( "u63", 0xe000, 0x2000, CRC(e85216d4) SHA1(7f61a93c52a31782116e9825d0aefa58ca3720b9) )
ROM_REGION( 0x1000, "video_cpu", 0 )
ROMX_LOAD( "27s29.u29", 0x0, 0x200, CRC(d580672b) SHA1(b56295a5b780ab5e8ff6817ebb084a8dfad8c281), ROM_SKIP(7))
ROMX_LOAD( "27s29.u28", 0x1, 0x200, CRC(f7976b87) SHA1(c19a1d375c497f1671170c7833952979819c3812), ROM_SKIP(7))
ROMX_LOAD( "27s29.u27", 0x2, 0x200, CRC(03ebd3ea) SHA1(109f5369bd36bcf0da5928b96566655c6895c737), ROM_SKIP(7))
ROMX_LOAD( "27s29.u21", 0x3, 0x200, CRC(e232384b) SHA1(cfc3acc86add06b4cb6addb3455d71123fb359ce), ROM_SKIP(7))
ROMX_LOAD( "27s29.u20", 0x4, 0x200, CRC(0a8e44d8) SHA1(2df46316510b2dbfd4c9913a1460c00d5572d586), ROM_SKIP(7))
ROMX_LOAD( "27s29.u19", 0x5, 0x200, CRC(de17e5f0) SHA1(3e14768374e1bda25183aee86a82d220b7f58ff9), ROM_SKIP(7))
ROMX_LOAD( "27s29.u18", 0x6, 0x200, CRC(e33ed0a4) SHA1(41edbdc7c022971ce14bd2f419c92714b796fad7), ROM_SKIP(7))
ROM_LOAD64_BYTE( "27s29.u29", 0x0, 0x200, CRC(d580672b) SHA1(b56295a5b780ab5e8ff6817ebb084a8dfad8c281) )
ROM_LOAD64_BYTE( "27s29.u28", 0x1, 0x200, CRC(f7976b87) SHA1(c19a1d375c497f1671170c7833952979819c3812) )
ROM_LOAD64_BYTE( "27s29.u27", 0x2, 0x200, CRC(03ebd3ea) SHA1(109f5369bd36bcf0da5928b96566655c6895c737) )
ROM_LOAD64_BYTE( "27s29.u21", 0x3, 0x200, CRC(e232384b) SHA1(cfc3acc86add06b4cb6addb3455d71123fb359ce) )
ROM_LOAD64_BYTE( "27s29.u20", 0x4, 0x200, CRC(0a8e44d8) SHA1(2df46316510b2dbfd4c9913a1460c00d5572d586) )
ROM_LOAD64_BYTE( "27s29.u19", 0x5, 0x200, CRC(de17e5f0) SHA1(3e14768374e1bda25183aee86a82d220b7f58ff9) )
ROM_LOAD64_BYTE( "27s29.u18", 0x6, 0x200, CRC(e33ed0a4) SHA1(41edbdc7c022971ce14bd2f419c92714b796fad7) )
ROM_REGION( 0x10000, "sound_cpu", 0 )
ROM_LOAD( "turbosub.u66", 0xe000, 0x2000, CRC(8db3bcdb) SHA1(e6ae324ba9dad4884e1cb3d67ce099a6f4739456) )

View File

@ -431,14 +431,14 @@ ROM_START( f15se )
/* Dr Math PCB (MPG 010-00002-001) */
ROM_REGION32_BE( 0x100000, "drmath", 0 )
ROMX_LOAD( "122.dth", 0x00000, 0x08000, CRC(9d2032cf) SHA1(8430816756ea92bbe86b94eaa24a6071bf0ef879), ROM_SKIP(7) )
ROMX_LOAD( "125.dth", 0x00001, 0x08000, CRC(7718487c) SHA1(609106f55601f84095b64ce2484107779da89149), ROM_SKIP(7) )
ROMX_LOAD( "123.dth", 0x00002, 0x08000, CRC(54d5544f) SHA1(d039ee39991b947a7483111359ab245fc104e060), ROM_SKIP(7) )
ROMX_LOAD( "124.dth", 0x00003, 0x08000, CRC(7be96646) SHA1(a6733f75c0404282d71e8c1a287546ef4d9d42ad), ROM_SKIP(7) )
ROMX_LOAD( "118.dth", 0x00004, 0x08000, CRC(cc895c20) SHA1(140ef47536914fe1441778e759894c2cdd893276), ROM_SKIP(7) )
ROMX_LOAD( "121.dth", 0x00005, 0x08000, CRC(392e5c43) SHA1(455cf3bb3c16217e58d6eea51d8f49a5bed1955e), ROM_SKIP(7) )
ROMX_LOAD( "119.dth", 0x00006, 0x08000, CRC(b1c966e5) SHA1(9703bb1f9bdf6a779b59daebb39df2926727fa76), ROM_SKIP(7) )
ROMX_LOAD( "120.dth", 0x00007, 0x08000, CRC(5fb9836d) SHA1(d511aa9f02972a7f475c82c6f57d1f3fd4f118fa), ROM_SKIP(7) )
ROM_LOAD64_BYTE( "122.dth", 0x00000, 0x08000, CRC(9d2032cf) SHA1(8430816756ea92bbe86b94eaa24a6071bf0ef879) )
ROM_LOAD64_BYTE( "125.dth", 0x00001, 0x08000, CRC(7718487c) SHA1(609106f55601f84095b64ce2484107779da89149) )
ROM_LOAD64_BYTE( "123.dth", 0x00002, 0x08000, CRC(54d5544f) SHA1(d039ee39991b947a7483111359ab245fc104e060) )
ROM_LOAD64_BYTE( "124.dth", 0x00003, 0x08000, CRC(7be96646) SHA1(a6733f75c0404282d71e8c1a287546ef4d9d42ad) )
ROM_LOAD64_BYTE( "118.dth", 0x00004, 0x08000, CRC(cc895c20) SHA1(140ef47536914fe1441778e759894c2cdd893276) )
ROM_LOAD64_BYTE( "121.dth", 0x00005, 0x08000, CRC(392e5c43) SHA1(455cf3bb3c16217e58d6eea51d8f49a5bed1955e) )
ROM_LOAD64_BYTE( "119.dth", 0x00006, 0x08000, CRC(b1c966e5) SHA1(9703bb1f9bdf6a779b59daebb39df2926727fa76) )
ROM_LOAD64_BYTE( "120.dth", 0x00007, 0x08000, CRC(5fb9836d) SHA1(d511aa9f02972a7f475c82c6f57d1f3fd4f118fa) )
ROM_REGION16_BE( 0x80000, "vertex", 0 )
ROM_LOAD16_BYTE( "014.dth", 0x00001, 0x20000, CRC(5ca7713f) SHA1(ac7b9629684b99ecfb1945176b06eb6be284ba93) )
@ -498,14 +498,14 @@ ROM_START( f15se21 )
/* Dr Math PCB (MPG 010-00002-001) */
ROM_REGION32_BE( 0x100000, "drmath", 0 )
ROMX_LOAD( "122.dth", 0x00000, 0x08000, CRC(9d2032cf) SHA1(8430816756ea92bbe86b94eaa24a6071bf0ef879), ROM_SKIP(7) )
ROMX_LOAD( "125.dth", 0x00001, 0x08000, CRC(7718487c) SHA1(609106f55601f84095b64ce2484107779da89149), ROM_SKIP(7) )
ROMX_LOAD( "123.dth", 0x00002, 0x08000, CRC(54d5544f) SHA1(d039ee39991b947a7483111359ab245fc104e060), ROM_SKIP(7) )
ROMX_LOAD( "124.dth", 0x00003, 0x08000, CRC(7be96646) SHA1(a6733f75c0404282d71e8c1a287546ef4d9d42ad), ROM_SKIP(7) )
ROMX_LOAD( "118.dth", 0x00004, 0x08000, CRC(cc895c20) SHA1(140ef47536914fe1441778e759894c2cdd893276), ROM_SKIP(7) )
ROMX_LOAD( "121.dth", 0x00005, 0x08000, CRC(392e5c43) SHA1(455cf3bb3c16217e58d6eea51d8f49a5bed1955e), ROM_SKIP(7) )
ROMX_LOAD( "119.dth", 0x00006, 0x08000, CRC(b1c966e5) SHA1(9703bb1f9bdf6a779b59daebb39df2926727fa76), ROM_SKIP(7) )
ROMX_LOAD( "120.dth", 0x00007, 0x08000, CRC(5fb9836d) SHA1(d511aa9f02972a7f475c82c6f57d1f3fd4f118fa), ROM_SKIP(7) )
ROM_LOAD64_BYTE( "122.dth", 0x00000, 0x08000, CRC(9d2032cf) SHA1(8430816756ea92bbe86b94eaa24a6071bf0ef879) )
ROM_LOAD64_BYTE( "125.dth", 0x00001, 0x08000, CRC(7718487c) SHA1(609106f55601f84095b64ce2484107779da89149) )
ROM_LOAD64_BYTE( "123.dth", 0x00002, 0x08000, CRC(54d5544f) SHA1(d039ee39991b947a7483111359ab245fc104e060) )
ROM_LOAD64_BYTE( "124.dth", 0x00003, 0x08000, CRC(7be96646) SHA1(a6733f75c0404282d71e8c1a287546ef4d9d42ad) )
ROM_LOAD64_BYTE( "118.dth", 0x00004, 0x08000, CRC(cc895c20) SHA1(140ef47536914fe1441778e759894c2cdd893276) )
ROM_LOAD64_BYTE( "121.dth", 0x00005, 0x08000, CRC(392e5c43) SHA1(455cf3bb3c16217e58d6eea51d8f49a5bed1955e) )
ROM_LOAD64_BYTE( "119.dth", 0x00006, 0x08000, CRC(b1c966e5) SHA1(9703bb1f9bdf6a779b59daebb39df2926727fa76) )
ROM_LOAD64_BYTE( "120.dth", 0x00007, 0x08000, CRC(5fb9836d) SHA1(d511aa9f02972a7f475c82c6f57d1f3fd4f118fa) )
ROM_REGION16_BE( 0x80000, "vertex", 0 )
ROM_LOAD16_BYTE( "014.dth", 0x00001, 0x20000, CRC(5ca7713f) SHA1(ac7b9629684b99ecfb1945176b06eb6be284ba93) )
@ -538,14 +538,14 @@ ROM_START( botss )
/* Dr Math PCB (MPG 010-00002-001) */
ROM_REGION32_BE( 0x100000, "drmath", 0 )
ROMX_LOAD( "110-00013-122.u134", 0x000000, 0x08000, CRC(bf60c487) SHA1(5ce80e89d9a24b627b0e97bf36a4e71c2eff4324), ROM_SKIP(7) )
ROMX_LOAD( "110-00013-125.u126", 0x000001, 0x08000, CRC(b0dccf4a) SHA1(e8bfd622c006985b724cdbd3ad14c33e9ed27c6c), ROM_SKIP(7) )
ROMX_LOAD( "110-00013-123.u114", 0x000002, 0x08000, CRC(04ba6ed1) SHA1(012be71c6b955beda2bd0ff376dcaab51b226723), ROM_SKIP(7) )
ROMX_LOAD( "110-00013-224.u107", 0x000003, 0x08000, CRC(220db5d3) SHA1(3bfbe0eb97282c4ce449fd44e8e141de74f08eb0), ROM_SKIP(7) )
ROMX_LOAD( "110-00013-118.u135", 0x000004, 0x08000, CRC(2903e682) SHA1(027ed6524e9d4490632f10aeb22150c2fbc4eec2), ROM_SKIP(7) )
ROMX_LOAD( "110-00013-121.u127", 0x000005, 0x08000, CRC(198a636b) SHA1(356b8948aafb98cb5e6ee7b5ad6ea9e5998265e5), ROM_SKIP(7) )
ROMX_LOAD( "110-00013-219.u115", 0x000006, 0x08000, CRC(9c9dbac1) SHA1(4c66971884190598e128684ece2e15a1c80b94ed), ROM_SKIP(7) )
ROMX_LOAD( "110-00013-120.u108", 0x000007, 0x08000, CRC(dafa173a) SHA1(a19980b92a5e74ebe395be36313701fdb527a46a), ROM_SKIP(7) )
ROM_LOAD64_BYTE( "110-00013-122.u134", 0x000000, 0x08000, CRC(bf60c487) SHA1(5ce80e89d9a24b627b0e97bf36a4e71c2eff4324) )
ROM_LOAD64_BYTE( "110-00013-125.u126", 0x000001, 0x08000, CRC(b0dccf4a) SHA1(e8bfd622c006985b724cdbd3ad14c33e9ed27c6c) )
ROM_LOAD64_BYTE( "110-00013-123.u114", 0x000002, 0x08000, CRC(04ba6ed1) SHA1(012be71c6b955beda2bd0ff376dcaab51b226723) )
ROM_LOAD64_BYTE( "110-00013-224.u107", 0x000003, 0x08000, CRC(220db5d3) SHA1(3bfbe0eb97282c4ce449fd44e8e141de74f08eb0) )
ROM_LOAD64_BYTE( "110-00013-118.u135", 0x000004, 0x08000, CRC(2903e682) SHA1(027ed6524e9d4490632f10aeb22150c2fbc4eec2) )
ROM_LOAD64_BYTE( "110-00013-121.u127", 0x000005, 0x08000, CRC(198a636b) SHA1(356b8948aafb98cb5e6ee7b5ad6ea9e5998265e5) )
ROM_LOAD64_BYTE( "110-00013-219.u115", 0x000006, 0x08000, CRC(9c9dbac1) SHA1(4c66971884190598e128684ece2e15a1c80b94ed) )
ROM_LOAD64_BYTE( "110-00013-120.u108", 0x000007, 0x08000, CRC(dafa173a) SHA1(a19980b92a5e74ebe395be36313701fdb527a46a) )
ROM_REGION16_BE( 0x80000, "vertex", 0 )
ROM_LOAD16_BYTE( "110-00013-014.u153", 0x00001, 0x20000, CRC(0eee0557) SHA1(8abe52cad31e59cf814fd9f64f4e42ddb4aa8c93) )
@ -599,14 +599,14 @@ ROM_START( botss11 )
/* Dr Math PCB (MPG 010-00002-001) */
ROM_REGION32_BE( 0x100000, "drmath", 0 )
ROMX_LOAD( "110-00013-122.u134", 0x000000, 0x08000, CRC(bf60c487) SHA1(5ce80e89d9a24b627b0e97bf36a4e71c2eff4324), ROM_SKIP(7) )
ROMX_LOAD( "110-00013-125.u126", 0x000001, 0x08000, CRC(b0dccf4a) SHA1(e8bfd622c006985b724cdbd3ad14c33e9ed27c6c), ROM_SKIP(7) )
ROMX_LOAD( "110-00013-123.u114", 0x000002, 0x08000, CRC(04ba6ed1) SHA1(012be71c6b955beda2bd0ff376dcaab51b226723), ROM_SKIP(7) )
ROMX_LOAD( "110-00013-124.u107", 0x000003, 0x08000, CRC(220db5d3) SHA1(3bfbe0eb97282c4ce449fd44e8e141de74f08eb0), ROM_SKIP(7) )
ROMX_LOAD( "110-00013-018.u135", 0x000004, 0x08000, CRC(2903e682) SHA1(027ed6524e9d4490632f10aeb22150c2fbc4eec2), ROM_SKIP(7) )
ROMX_LOAD( "110-00013-121.u127", 0x000005, 0x08000, CRC(198a636b) SHA1(356b8948aafb98cb5e6ee7b5ad6ea9e5998265e5), ROM_SKIP(7) )
ROMX_LOAD( "110-00013-119.u115", 0x000006, 0x08000, CRC(9c9dbac1) SHA1(4c66971884190598e128684ece2e15a1c80b94ed), ROM_SKIP(7) )
ROMX_LOAD( "110-00013-120.u108", 0x000007, 0x08000, CRC(dafa173a) SHA1(a19980b92a5e74ebe395be36313701fdb527a46a), ROM_SKIP(7) )
ROM_LOAD64_BYTE( "110-00013-122.u134", 0x000000, 0x08000, CRC(bf60c487) SHA1(5ce80e89d9a24b627b0e97bf36a4e71c2eff4324) )
ROM_LOAD64_BYTE( "110-00013-125.u126", 0x000001, 0x08000, CRC(b0dccf4a) SHA1(e8bfd622c006985b724cdbd3ad14c33e9ed27c6c) )
ROM_LOAD64_BYTE( "110-00013-123.u114", 0x000002, 0x08000, CRC(04ba6ed1) SHA1(012be71c6b955beda2bd0ff376dcaab51b226723) )
ROM_LOAD64_BYTE( "110-00013-124.u107", 0x000003, 0x08000, CRC(220db5d3) SHA1(3bfbe0eb97282c4ce449fd44e8e141de74f08eb0) )
ROM_LOAD64_BYTE( "110-00013-018.u135", 0x000004, 0x08000, CRC(2903e682) SHA1(027ed6524e9d4490632f10aeb22150c2fbc4eec2) )
ROM_LOAD64_BYTE( "110-00013-121.u127", 0x000005, 0x08000, CRC(198a636b) SHA1(356b8948aafb98cb5e6ee7b5ad6ea9e5998265e5) )
ROM_LOAD64_BYTE( "110-00013-119.u115", 0x000006, 0x08000, CRC(9c9dbac1) SHA1(4c66971884190598e128684ece2e15a1c80b94ed) )
ROM_LOAD64_BYTE( "110-00013-120.u108", 0x000007, 0x08000, CRC(dafa173a) SHA1(a19980b92a5e74ebe395be36313701fdb527a46a) )
ROM_REGION16_BE( 0x80000, "vertex", 0 )
ROM_LOAD16_BYTE( "110-00013-014.u153", 0x00001, 0x20000, CRC(0eee0557) SHA1(8abe52cad31e59cf814fd9f64f4e42ddb4aa8c93) )
@ -650,14 +650,14 @@ ROM_START( tankbatl )
ROM_FILL( 0x140000, 0x40000, 0xff )
ROM_REGION32_BE( 0x100000, "drmath", 0 )
ROMX_LOAD( "s24e_u.134", 0x00000, 0x08000, CRC(0a41756b) SHA1(8681aaf8eeda7acdff967a773290c4b2c17cbe30), ROM_SKIP(7) )
ROMX_LOAD( "s16e_u.126", 0x00001, 0x08000, CRC(d24654cd) SHA1(88d3624f23c669dc902136c822b1f4732104c9c1), ROM_SKIP(7) )
ROMX_LOAD( "s08e_u.114", 0x00002, 0x08000, CRC(765da5d7) SHA1(d489581bd12d7fca42570ee7a12d922be2528c1e), ROM_SKIP(7) )
ROMX_LOAD( "s00e_u.107", 0x00003, 0x08000, CRC(558918cc) SHA1(7e61639ab4af88f888f4aa481dd01db7de3829da), ROM_SKIP(7) )
ROMX_LOAD( "s24o_u.135", 0x00004, 0x08000, CRC(f89bab5f) SHA1(e79e71d0a5e7ba933952c5d41f6afb633da06e8a), ROM_SKIP(7) )
ROMX_LOAD( "s16o_u.127", 0x00005, 0x08000, CRC(53ba1a3f) SHA1(333734fff41b98abfa7b2904692cb128ab1f90a3), ROM_SKIP(7) )
ROMX_LOAD( "s08o_u.115", 0x00006, 0x08000, CRC(af1eae4a) SHA1(44f272b472f546ffff7d8f82e29c5d80b472b1c3), ROM_SKIP(7) )
ROMX_LOAD( "s00o_u.108", 0x00007, 0x08000, CRC(9cadc977) SHA1(e95f60d9df422511bae6a6c4a20f813d77a894a4), ROM_SKIP(7) )
ROM_LOAD64_BYTE( "s24e_u.134", 0x00000, 0x08000, CRC(0a41756b) SHA1(8681aaf8eeda7acdff967a773290c4b2c17cbe30) )
ROM_LOAD64_BYTE( "s16e_u.126", 0x00001, 0x08000, CRC(d24654cd) SHA1(88d3624f23c669dc902136c822b1f4732104c9c1) )
ROM_LOAD64_BYTE( "s08e_u.114", 0x00002, 0x08000, CRC(765da5d7) SHA1(d489581bd12d7fca42570ee7a12d922be2528c1e) )
ROM_LOAD64_BYTE( "s00e_u.107", 0x00003, 0x08000, CRC(558918cc) SHA1(7e61639ab4af88f888f4aa481dd01db7de3829da) )
ROM_LOAD64_BYTE( "s24o_u.135", 0x00004, 0x08000, CRC(f89bab5f) SHA1(e79e71d0a5e7ba933952c5d41f6afb633da06e8a) )
ROM_LOAD64_BYTE( "s16o_u.127", 0x00005, 0x08000, CRC(53ba1a3f) SHA1(333734fff41b98abfa7b2904692cb128ab1f90a3) )
ROM_LOAD64_BYTE( "s08o_u.115", 0x00006, 0x08000, CRC(af1eae4a) SHA1(44f272b472f546ffff7d8f82e29c5d80b472b1c3) )
ROM_LOAD64_BYTE( "s00o_u.108", 0x00007, 0x08000, CRC(9cadc977) SHA1(e95f60d9df422511bae6a6c4a20f813d77a894a4) )
ROM_REGION16_BE( 0x80000, "vertex", 0 )
ROM_LOAD16_BYTE( "pb0o_u.153", 0x00001, 0x20000, CRC(bcd7ddad) SHA1(3982756b6f0821df77918dd0d00807a90dbfb595) )

View File

@ -1,5 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:Luca Elia
/******************************************************************************
-= Clash Road =-
@ -41,14 +42,445 @@ TODO:
*******************************************************************************/
#include "emu.h"
#include "clshroad.h"
#include "wiping_a.h"
#include "cpu/z80/z80.h"
#include "machine/74259.h"
#include "speaker.h"
#define MASTER_CLOCK XTAL(18'432'000)
#include "emupal.h"
#include "screen.h"
#include "speaker.h"
#include "tilemap.h"
// configurable logging
#define LOG_UNKVREG (1U << 1)
//#define VERBOSE (LOG_GENERAL | LOG_UNKVREG)
#include "logmacro.h"
#define LOGUNKVREG(...) LOGMASKED(LOG_UNKVREG, __VA_ARGS__)
namespace {
class clshroad_state : public driver_device
{
public:
clshroad_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_audiocpu(*this, "audiocpu")
, m_screen(*this, "screen")
, m_gfxdecode(*this, "gfxdecode")
, m_palette(*this, "palette")
, m_spriteram(*this, "spriteram")
, m_vram(*this, "vram_%u", 0U)
, m_vregs(*this, "vregs")
, m_inputs(*this, { "P1", "P2", "DSW1", "DSW2" })
{ }
void clshroad(machine_config &config);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<screen_device> m_screen;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_shared_ptr<u8> m_spriteram;
required_shared_ptr_array<u8, 2> m_vram;
required_shared_ptr<u8> m_vregs;
required_ioport_array<4> m_inputs;
u8 m_main_irq_mask = 0U;
u8 m_sound_irq_mask = 0U;
u8 m_color_bank = 0U;
u8 m_video_unk = 0U;
tilemap_t *m_tilemap_0a = nullptr;
tilemap_t *m_tilemap_0b = nullptr;
tilemap_t *m_tilemap_1 = nullptr;
u8 input_r(offs_t offset);
DECLARE_WRITE_LINE_MEMBER(main_irq_mask_w);
DECLARE_WRITE_LINE_MEMBER(sound_irq_mask_w);
void vram_0_w(offs_t offset, u8 data);
void vram_1_w(offs_t offset, u8 data);
TILE_GET_INFO_MEMBER(get_tile_info_0a);
TILE_GET_INFO_MEMBER(get_tile_info_0b);
TILEMAP_MAPPER_MEMBER(tilemap_scan_rows_extra);
TILE_GET_INFO_MEMBER(get_tile_info_1);
void palette(palette_device &palette) const;
void color_bank_w(offs_t offset, u8 data);
void video_unk_w(offs_t offset, u8 data);
u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(vblank_irq);
INTERRUPT_GEN_MEMBER(half_vblank_irq);
INTERRUPT_GEN_MEMBER(sound_timer_irq);
void main_map(address_map &map);
void sound_map(address_map &map);
};
class firebatl_state : public clshroad_state
{
public:
firebatl_state(const machine_config &mconfig, device_type type, const char *tag) :
clshroad_state(mconfig, type, tag)
{ }
void firebatl(machine_config &config);
void init_firebatl();
protected:
virtual void video_start() override;
private:
TILE_GET_INFO_MEMBER(get_tile_info_1);
void palette(palette_device &palette) const;
};
// video
/***************************************************************************
[ 2 Horizontally Scrolling Layers ]
Size : 512 x 256
Tiles: 16 x 16 x 4.
These 2 layers share the same graphics and X scroll value.
The tile codes are stuffed together in memory too: first one
layer's row, then the other's (and so on for all the rows).
[ 1 Fixed Layer ]
Size : (256 + 32) x 256
Tiles: 8 x 8 x 4.
This is like a 32x32 tilemap, but the top and bottom rows (that
fall outside the visible area) are used to widen the tilemap
horizontally, adding 2 vertical columns both sides.
The result is a 36x28 visible tilemap.
[ 64? sprites ]
Sprites are 16 x 16 x 4.
***************************************************************************/
void clshroad_state::palette(palette_device &palette) const
{
const u8 *color_prom = memregion("proms")->base();
for (int i = 0; i < 256; i++)
{
palette.set_pen_color(i,
pal4bit(color_prom[i | 0x000]),
pal4bit(color_prom[i | 0x100]),
pal4bit(color_prom[i | 0x200]));
}
}
void firebatl_state::palette(palette_device &palette) const
{
const u8 *color_prom = memregion("proms")->base();
// create a lookup table for the palette
for (int i = 0; i < 0x100; i++)
{
int const r = pal4bit(color_prom[i | 0x000]);
int const g = pal4bit(color_prom[i | 0x100]);
int const b = pal4bit(color_prom[i | 0x200]);
palette.set_indirect_color(i, rgb_t(r, g, b));
}
// color_prom now points to the beginning of the lookup table
color_prom += 0x300;
for (int i = 0; i < 0x200; i++)
palette.set_pen_indirect(i, i & 0xff);
for (int i = 0; i < 0x100; i++)
{
u8 const ctabentry = ((color_prom[i | 0x000] & 0x0f) << 4) | (color_prom[i | 0x100] & 0x0f);
palette.set_pen_indirect(i | 0x200, ctabentry);
}
}
/***************************************************************************
Callbacks for the TileMap code
***************************************************************************/
/***************************************************************************
Layers 0 Tiles Format
Offset:
00-3f: Even bytes: Codes Odd bytes: Colors <- Layer B First Row
40-7f: Even bytes: Codes Odd bytes: Colors <- Layer A First Row
.. <- 2nd Row
.. <- 3rd Row
etc.
***************************************************************************/
TILE_GET_INFO_MEMBER(clshroad_state::get_tile_info_0a)
{
tile_index = (tile_index & 0x1f) + (tile_index & ~0x1f) * 2;
u8 const code = m_vram[0][tile_index * 2 + 0x40];
// u8 const color = m_vram[0][tile_index * 2 + 0x41];
tileinfo.set(
1,
code,
m_color_bank,
0
);
}
TILE_GET_INFO_MEMBER(clshroad_state::get_tile_info_0b)
{
tile_index = (tile_index & 0x1f) + (tile_index & ~0x1f) * 2;
u8 const code = m_vram[0][tile_index * 2 + 0x00];
// u8 const color = m_vram[0][tile_index * 2 + 0x01];
tileinfo.set(
1,
code,
m_color_bank,
0
);
}
void clshroad_state::vram_0_w(offs_t offset, u8 data)
{
int const tile_index = offset / 2;
int const tile = (tile_index & 0x1f) + (tile_index & ~0x3f) / 2;
m_vram[0][offset] = data;
if (tile_index & 0x20) m_tilemap_0a->mark_tile_dirty(tile);
else m_tilemap_0b->mark_tile_dirty(tile);
}
/***************************************************************************
Layer 1 Tiles Format
Offset:
000-3ff Code
400-7ff 7654---- Code (High bits)
----3210 Color
This is like a 32x32 tilemap, but the top and bottom rows (that
fall outside the visible area) are used to widen the tilemap
horizontally, adding 2 vertical columns both sides.
The result is a 36x28 visible tilemap.
***************************************************************************/
// logical (col,row) -> memory offset
TILEMAP_MAPPER_MEMBER(clshroad_state::tilemap_scan_rows_extra)
{
// The leftmost columns come from the bottom rows
if (col <= 0x01) return row + (col + 0x1e) * 0x20;
// The rightmost columns come from the top rows
if (col >= 0x22) return row + (col - 0x22) * 0x20;
// These are not visible, but *must* be mapped to other tiles than
// those used by the leftmost and rightmost columns (tilemap "bug"?)
if (row <= 0x01) return 0;
if (row >= 0x1e) return 0;
// "normal" layout for the rest.
return (col - 2) + row * 0x20;
}
TILE_GET_INFO_MEMBER(firebatl_state::get_tile_info_1)
{
u8 const code = m_vram[1][tile_index + 0x000];
u8 const color = m_vram[1][tile_index + 0x400] & 0x3f;
tileinfo.group = color;
tileinfo.set(2,
code,
color,
0);
}
TILE_GET_INFO_MEMBER(clshroad_state::get_tile_info_1)
{
u8 const code = m_vram[1][tile_index + 0x000];
u8 const color = m_vram[1][tile_index + 0x400];
tileinfo.set(2,
code + ((color & 0xf0) << 4),
color & 0x0f,
0);
}
void clshroad_state::vram_1_w(offs_t offset, u8 data)
{
m_vram[1][offset] = data;
m_tilemap_1->mark_tile_dirty(offset % 0x400);
}
void clshroad_state::color_bank_w(offs_t offset, u8 data)
{
// - Clash Road: always 9 during gameplay and 0 when title screen displays
// (further disabling it out)
// - Fire Battle: variable depending on what happens on screen
// (makes background to flash when lightning occurs, has additional color cycling effects)
m_color_bank = data & 0xf;
m_tilemap_0a->mark_all_dirty();
m_tilemap_0b->mark_all_dirty();
if (data & 0xf0)
LOGUNKVREG("%s: unknown vreg [2] write %02x\n", machine().describe_context(), data);
}
void clshroad_state::video_unk_w(offs_t offset, u8 data)
{
// Clash Road: inited to 0 at POST, never touched anywhere else
// Fire Battle: always bit 7 held, normally 0x80,
// increments bits 0-3 from 0x80 to 0x8f when lightning is about to strike and decrements back to 0x80
// after section has been passed, color gain control? sprite color bank (on unmapped color proms)?
}
void firebatl_state::video_start()
{
// These 2 use the graphics and scroll value
m_tilemap_0a = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(firebatl_state::get_tile_info_0a)), TILEMAP_SCAN_ROWS, 16, 16, 0x20, 0x10);
m_tilemap_0b = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(firebatl_state::get_tile_info_0b)), TILEMAP_SCAN_ROWS, 16, 16, 0x20, 0x10);
// Text (No scrolling)
m_tilemap_1 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(firebatl_state::get_tile_info_1)), tilemap_mapper_delegate(*this, FUNC(firebatl_state::tilemap_scan_rows_extra)), 8, 8, 0x24, 0x20);
m_tilemap_0a->set_scrolldx(-0x2a, -0xb3);
m_tilemap_0b->set_scrolldx(-0x2a, -0xb3);
m_tilemap_0a->set_scrolldy(0, 1);
m_tilemap_0b->set_scrolldy(0, 1);
m_tilemap_0b->set_transparent_pen(0);
m_tilemap_1->configure_groups(*m_gfxdecode->gfx(2), 0x0f);
}
void clshroad_state::video_start()
{
/* These 2 use the graphics and scroll value */
m_tilemap_0a = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(clshroad_state::get_tile_info_0a)), TILEMAP_SCAN_ROWS, 16, 16, 0x20, 0x10);
m_tilemap_0b = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(clshroad_state::get_tile_info_0b)), TILEMAP_SCAN_ROWS, 16, 16, 0x20, 0x10);
// Text (No scrolling)
m_tilemap_1 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(clshroad_state::get_tile_info_1)), tilemap_mapper_delegate(*this, FUNC(clshroad_state::tilemap_scan_rows_extra)), 8, 8, 0x24, 0x20);
m_tilemap_0a->set_scrolldx(-0x30, -0xb5);
m_tilemap_0b->set_scrolldx(-0x30, -0xb5);
m_tilemap_0b->set_transparent_pen(0x0f);
m_tilemap_1->set_transparent_pen(0x0f);
}
/***************************************************************************
Sprites Drawing
Offset: Format: Value:
0
1 Y (Bottom-up)
2 765432--
------10 Code (high bits)
3 76------
--543210 Code (low bits)
4
5 X (low bits)
6 X (High bits)
7 7654----
----3210 Color
- Sprite flipping ?
***************************************************************************/
void clshroad_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
for (int i = 0; i < m_spriteram.bytes() ; i += 8)
{
int y = 240 - m_spriteram[i + 1];
int const code = (m_spriteram[i + 3] & 0x3f) + (m_spriteram[i + 2] << 6);
int x = m_spriteram[i + 5] + (m_spriteram[i + 6] << 8);
int const attr = m_spriteram[i + 7];
int flipx = 0;
int flipy = 0;
x -= 0x4a/2;
if (flip_screen())
{
y = 240 - y;
flipx = !flipx;
flipy = !flipy;
}
m_gfxdecode->gfx(0)->transpen(bitmap, cliprect,
code,
attr & 0x0f,
flipx, flipy,
x, y, 15);
}
}
/***************************************************************************
Screen Drawing
***************************************************************************/
u32 clshroad_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int const scrollx = m_vregs[0] + (m_vregs[1] << 8);
// int const priority = m_vregs[2];
// Only horizontal scrolling (these 2 layers use the same value)
m_tilemap_0a->set_scrollx(0, scrollx);
m_tilemap_0b->set_scrollx(0, scrollx);
m_tilemap_0a->draw(screen, bitmap, cliprect, 0, 0); // Opaque
m_tilemap_0b->draw(screen, bitmap, cliprect, 0, 0);
draw_sprites(bitmap, cliprect);
m_tilemap_1->draw(screen, bitmap, cliprect, 0, 0);
return 0;
}
// machine
void clshroad_state::machine_start()
{
@ -62,17 +494,17 @@ void clshroad_state::machine_reset()
flip_screen_set(0);
m_main_irq_mask = m_sound_irq_mask = 0;
// not initialized by HW, matches grey background on first title screen
for(int i = 0;i<0x800;i++)
m_vram_0[i] = 0xf0;
for (int i = 0; i < 0x800; i++)
m_vram[0][i] = 0xf0;
}
uint8_t clshroad_state::input_r(offs_t offset)
u8 clshroad_state::input_r(offs_t offset)
{
return ((~ioport("P1")->read() & (1 << offset)) ? 1 : 0) |
((~ioport("P2")->read() & (1 << offset)) ? 2 : 0) |
((~ioport("DSW1")->read() & (1 << offset)) ? 4 : 0) |
((~ioport("DSW2")->read() & (1 << offset)) ? 8 : 0) ;
return ((~m_inputs[0]->read() & (1 << offset)) ? 1 : 0) |
((~m_inputs[1]->read() & (1 << offset)) ? 2 : 0) |
((~m_inputs[2]->read() & (1 << offset)) ? 4 : 0) |
((~m_inputs[3]->read() & (1 << offset)) ? 8 : 0) ;
}
@ -89,27 +521,27 @@ WRITE_LINE_MEMBER(clshroad_state::sound_irq_mask_w)
}
void clshroad_state::clshroad_map(address_map &map)
void clshroad_state::main_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0x95ff).ram();
map(0x9600, 0x97ff).ram().share("share1");
map(0x9600, 0x97ff).ram().share("sharedram");
map(0x9800, 0x9dff).ram();
map(0x9e00, 0x9fff).ram().share("spriteram");
map(0x9e00, 0x9fff).ram().share(m_spriteram);
map(0xa000, 0xa007).w("mainlatch", FUNC(ls259_device::write_d0));
map(0xa100, 0xa107).r(FUNC(clshroad_state::input_r));
map(0xa800, 0xafff).ram().w(FUNC(clshroad_state::vram_1_w)).share("vram_1"); // Layer 1
map(0xb000, 0xb001).writeonly().share("vregs"); // Scroll
map(0xa800, 0xafff).ram().w(FUNC(clshroad_state::vram_1_w)).share(m_vram[1]); // Layer 1
map(0xb000, 0xb001).writeonly().share(m_vregs); // Scroll
map(0xb002, 0xb002).w(FUNC(clshroad_state::color_bank_w));
map(0xb003, 0xb003).w(FUNC(clshroad_state::video_unk_w));
map(0xc000, 0xc7ff).ram().w(FUNC(clshroad_state::vram_0_w)).share("vram_0"); // Layer 0
map(0xc000, 0xc7ff).ram().w(FUNC(clshroad_state::vram_0_w)).share(m_vram[0]); // Layer 0
}
void clshroad_state::clshroad_sound_map(address_map &map)
void clshroad_state::sound_map(address_map &map)
{
map(0x0000, 0x1fff).rom();
map(0x4000, 0x7fff).w("custom", FUNC(wiping_sound_device::sound_w));
map(0x9600, 0x97ff).ram().share("share1");
map(0x9600, 0x97ff).ram().share("sharedram");
map(0xa000, 0xa007).w("mainlatch", FUNC(ls259_device::write_d0));
}
@ -153,8 +585,8 @@ static INPUT_PORTS_START( clshroad )
PORT_DIPNAME( 0x20, 0x20, "Invulnerability (Cheat)") PORT_DIPLOCATION("SW1:6")
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW1:7" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW1:8" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW1:7" ) // Listed as "Unused"
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW1:8" ) // Listed as "Unused"
/* DSW2 is listed as "Unused" */
PORT_START("DSW2")
@ -170,14 +602,14 @@ first bit OFF is: 0 0 <- value
But the values seems unused then.
*/
PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW2:1" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW2:2" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW2:4" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW2:5" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW2:6" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:7" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" ) /* Listed as "Unused" */
PORT_DIPUNUSED_DIPLOC( 0x01, 0x01, "SW2:1" ) // Listed as "Unused"
PORT_DIPUNUSED_DIPLOC( 0x02, 0x02, "SW2:2" ) // Listed as "Unused"
PORT_DIPUNUSED_DIPLOC( 0x04, 0x04, "SW2:3" ) // Listed as "Unused"
PORT_DIPUNUSED_DIPLOC( 0x08, 0x08, "SW2:4" ) // Listed as "Unused"
PORT_DIPUNUSED_DIPLOC( 0x10, 0x10, "SW2:5" ) // Listed as "Unused"
PORT_DIPUNUSED_DIPLOC( 0x20, 0x20, "SW2:6" ) // Listed as "Unused"
PORT_DIPUNUSED_DIPLOC( 0x40, 0x40, "SW2:7" ) // Listed as "Unused"
PORT_DIPUNUSED_DIPLOC( 0x80, 0x80, "SW2:8" ) // Listed as "Unused"
INPUT_PORTS_END
static INPUT_PORTS_START( firebatl )
@ -270,73 +702,73 @@ static const gfx_layout layout_16x16x4 =
};
static GFXDECODE_START( gfx_firebatl )
GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x4, 0, 16 ) // [0] Sprites
GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x4, 0, 16 ) // [1] Layer 0
GFXDECODE_ENTRY( "gfx3", 0, layout_8x8x2, 512, 64 ) // [2] Layer 1
GFXDECODE_ENTRY( "sprites", 0, layout_16x16x4, 0, 16 )
GFXDECODE_ENTRY( "layer0", 0, layout_16x16x4, 0, 16 )
GFXDECODE_ENTRY( "layer1", 0, layout_8x8x2, 512, 64 )
GFXDECODE_END
static GFXDECODE_START( gfx_clshroad )
GFXDECODE_ENTRY( "gfx1", 0, layout_16x16x4, 0, 16 ) // [0] Sprites
GFXDECODE_ENTRY( "gfx2", 0, layout_16x16x4, 0, 16 ) // [1] Layer 0
GFXDECODE_ENTRY( "gfx3", 0, layout_8x8x4, 0, 16 ) // [2] Layer 1
GFXDECODE_ENTRY( "sprites", 0, layout_16x16x4, 0, 16 )
GFXDECODE_ENTRY( "layer0", 0, layout_16x16x4, 0, 16 )
GFXDECODE_ENTRY( "layer1", 0, layout_8x8x4, 0, 16 )
GFXDECODE_END
INTERRUPT_GEN_MEMBER(clshroad_state::vblank_irq)
{
if(m_main_irq_mask)
if (m_main_irq_mask)
device.execute().set_input_line(0, HOLD_LINE);
}
INTERRUPT_GEN_MEMBER(clshroad_state::half_vblank_irq)
{
// without this then clshroad runs too fast & BGMs stops playing exactly halfway thru.
// it also otherwise make opponents to pop up in the middle of the screen
// without this clshroad runs too fast & BGMs stop playing exactly halfway thru.
// it also otherwise makes opponents to pop up in the middle of the screen
if (m_screen->frame_number() & 1)
return;
if(m_main_irq_mask)
if (m_main_irq_mask)
device.execute().set_input_line(0, HOLD_LINE);
}
INTERRUPT_GEN_MEMBER(clshroad_state::sound_timer_irq)
{
if(m_sound_irq_mask)
if (m_sound_irq_mask)
device.execute().set_input_line(0, HOLD_LINE);
}
void clshroad_state::firebatl(machine_config &config)
void firebatl_state::firebatl(machine_config &config)
{
/* basic machine hardware */
static constexpr XTAL MASTER_CLOCK = XTAL(18'432'000);
// basic machine hardware
Z80(config, m_maincpu, MASTER_CLOCK / 6); // μPD780C running at 3.072 MHz? Overruns max frequency of 2.5 MHz ...
m_maincpu->set_addrmap(AS_PROGRAM, &clshroad_state::clshroad_map);
m_maincpu->set_vblank_int("screen", FUNC(clshroad_state::vblank_irq));
m_maincpu->set_addrmap(AS_PROGRAM, &firebatl_state::main_map);
m_maincpu->set_vblank_int("screen", FUNC(firebatl_state::vblank_irq));
Z80(config, m_audiocpu, MASTER_CLOCK / 6); // μPD780C running at 3.072 MHz? Overruns max frequency of 2.5 MHz ...
m_audiocpu->set_addrmap(AS_PROGRAM, &clshroad_state::clshroad_sound_map);
m_audiocpu->set_periodic_int(FUNC(clshroad_state::sound_timer_irq), attotime::from_hz(120)); // periodic interrupt, exact frequency unknown
m_audiocpu->set_addrmap(AS_PROGRAM, &firebatl_state::sound_map);
m_audiocpu->set_periodic_int(FUNC(firebatl_state::sound_timer_irq), attotime::from_hz(120)); // periodic interrupt, exact frequency unknown
config.set_maximum_quantum(attotime::from_hz(MASTER_CLOCK / 6 / 512)); // 6000 Hz
ls259_device &mainlatch(LS259(config, "mainlatch"));
mainlatch.q_out_cb<0>().set_inputline(m_audiocpu, INPUT_LINE_RESET).invert();
mainlatch.q_out_cb<1>().set(FUNC(clshroad_state::main_irq_mask_w));
mainlatch.q_out_cb<3>().set(FUNC(clshroad_state::sound_irq_mask_w));
mainlatch.q_out_cb<4>().set(FUNC(clshroad_state::flipscreen_w));
mainlatch.q_out_cb<1>().set(FUNC(firebatl_state::main_irq_mask_w));
mainlatch.q_out_cb<3>().set(FUNC(firebatl_state::sound_irq_mask_w));
mainlatch.q_out_cb<4>().set(FUNC(firebatl_state::flip_screen_set));
/* video hardware */
// video hardware
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(MASTER_CLOCK / 3, 384, 0, 288, 264, 16, 240); // unknown, single XTAL on PCB & 288x224 suggests 60.606060 Hz like Galaxian HW
m_screen->set_screen_update(FUNC(clshroad_state::screen_update));
m_screen->set_screen_update(FUNC(firebatl_state::screen_update));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_firebatl);
PALETTE(config, m_palette, FUNC(clshroad_state::firebatl_palette), 512+64*4, 256);
PALETTE(config, m_palette, FUNC(firebatl_state::palette), 512+64*4, 256);
MCFG_VIDEO_START_OVERRIDE(clshroad_state,firebatl)
/* sound hardware */
// sound hardware
SPEAKER(config, "mono").front_center();
WIPING_CUSTOM(config, "custom", 96000 / 2).add_route(ALL_OUTPUTS, "mono", 1.0); // 48000 Hz?
@ -344,14 +776,16 @@ void clshroad_state::firebatl(machine_config &config)
void clshroad_state::clshroad(machine_config &config)
{
/* basic machine hardware */
static constexpr XTAL MASTER_CLOCK = XTAL(18'432'000);
// basic machine hardware
Z80(config, m_maincpu, MASTER_CLOCK / 6); // LH0080A running at 3.072 MHz? /5 is too fast, /6 matches wiping.cpp
m_maincpu->set_addrmap(AS_PROGRAM, &clshroad_state::clshroad_map);
m_maincpu->set_addrmap(AS_PROGRAM, &clshroad_state::main_map);
m_maincpu->set_vblank_int("screen", FUNC(clshroad_state::half_vblank_irq));
Z80(config, m_audiocpu, MASTER_CLOCK / 6); // LH0080A running at 3.072 MHz?
m_audiocpu->set_addrmap(AS_PROGRAM, &clshroad_state::clshroad_sound_map);
// TODO: by logic this should be MASTER_CLOCK / 3 / 65536 = 93.75 Hz, but it quite don't work right.
m_audiocpu->set_addrmap(AS_PROGRAM, &clshroad_state::sound_map);
// TODO: by logic this should be MASTER_CLOCK / 3 / 65536 = 93.75 Hz, but it quite doesn't work right.
m_audiocpu->set_periodic_int(FUNC(clshroad_state::sound_timer_irq), attotime::from_hz(82.75)); // periodic interrupt, exact frequency unknown
config.set_maximum_quantum(attotime::from_hz(MASTER_CLOCK / 6 / 512)); // 6000 Hz
@ -360,20 +794,18 @@ void clshroad_state::clshroad(machine_config &config)
mainlatch.q_out_cb<0>().set_nop(); // never writes here?
mainlatch.q_out_cb<1>().set(FUNC(clshroad_state::main_irq_mask_w));
mainlatch.q_out_cb<3>().set(FUNC(clshroad_state::sound_irq_mask_w));
mainlatch.q_out_cb<4>().set(FUNC(clshroad_state::flipscreen_w));
mainlatch.q_out_cb<4>().set(FUNC(clshroad_state::flip_screen_set));
/* video hardware */
// video hardware
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
m_screen->set_raw(MASTER_CLOCK / 3, 384, 0, 288, 264, 16, 240); // unknown, single XTAL on PCB & 288x224 suggests 60.606060 Hz like Galaxian HW
m_screen->set_screen_update(FUNC(clshroad_state::screen_update));
m_screen->set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_clshroad);
PALETTE(config, m_palette, FUNC(clshroad_state::clshroad_palette), 256);
PALETTE(config, m_palette, FUNC(clshroad_state::palette), 256);
MCFG_VIDEO_START_OVERRIDE(clshroad_state,clshroad)
/* sound hardware */
// sound hardware
SPEAKER(config, "mono").front_center();
WIPING_CUSTOM(config, "custom", MASTER_CLOCK / 3 / 256).add_route(ALL_OUTPUTS, "mono", 1.0); // 24000 Hz?
@ -423,127 +855,127 @@ void clshroad_state::clshroad(machine_config &config)
***************************************************************************/
ROM_START( firebatl )
ROM_REGION( 0x8000, "maincpu", 0 ) /* Main Z80 Code */
ROM_REGION( 0x8000, "maincpu", 0 ) // Z80 code
ROM_LOAD( "rom01.e8", 0x00000, 0x2000, CRC(10e24ef6) SHA1(b6dae9824eb3cecececbdfdb416a90b1b61ff18d) )
ROM_LOAD( "rom02.d8", 0x02000, 0x2000, CRC(47f79bee) SHA1(23e64ff69ff5112b0413d12a283ca90cf3642389) )
ROM_LOAD( "rom03.c8", 0x04000, 0x2000, CRC(693459b9) SHA1(8bba526960f49c9e6c7bca40eb8fbbfc81588660) )
ROM_FILL( 0x06000, 0x2000, 0x00 ) // Accessed, could this range map to the Z4 device at A8 ?!
ROM_REGION( 0x2000, "audiocpu", 0 ) /* Sound Z80 Code */
ROM_REGION( 0x2000, "audiocpu", 0 ) // Z80 code
ROM_LOAD( "rom04.r6", 0x0000, 0x2000, CRC(5f232d9a) SHA1(d0b9926cb02203f1a1f7fd0d0d7b1fe8eddc6511) )
ROM_REGION( 0x8000, "gfx1", ROMREGION_INVERT ) /* Sprites */
ROM_REGION( 0x8000, "sprites", ROMREGION_INVERT )
ROM_LOAD( "rom14.f4", 0x0000, 0x2000, CRC(36a508a7) SHA1(9b2dede4332d2b8e55e7c5f916d8cf370d7e77fc) )
ROM_LOAD( "rom13.h4", 0x2000, 0x2000, CRC(a2ec508e) SHA1(a6dd7b9729f320ed3a28e0cd8ea7b26c2a639e1a) )
ROM_LOAD( "rom12.j4", 0x4000, 0x2000, CRC(f80ece92) SHA1(2cc4317b2c58be48dc285bb3a667863e2ca8d5b7) )
ROM_LOAD( "rom11.k4", 0x6000, 0x2000, CRC(b293e701) SHA1(9dacaa9897d91dc465f2c1907804fed9bfb7207b) )
ROM_REGION( 0x8000, "gfx2", ROMREGION_INVERT ) /* Layer 0 */
ROM_REGION( 0x8000, "layer0", ROMREGION_INVERT )
ROM_LOAD( "rom09.n4", 0x0000, 0x2000, CRC(77ea3e39) SHA1(c897664bd4f4b163a557d39d12374dae08a0a0c2) )
ROM_LOAD( "rom08.p4", 0x2000, 0x2000, CRC(1b7585dd) SHA1(e402c879c5651bf0fa21dcf1ff3c4b7bf690cbaa) )
ROM_LOAD( "rom07.s4", 0x4000, 0x2000, CRC(e3ec9825) SHA1(ea266683a48e8515d40ed077fd55d15a1859c942) )
ROM_LOAD( "rom06.u4", 0x6000, 0x2000, CRC(d29fab5f) SHA1(de5f8d57d3dd9090e6c056ff7f1ab0bb59630863) )
ROM_REGION( 0x1000, "gfx3", 0 ) /* Layer 1 */
ROM_REGION( 0x1000, "layer1", 0 )
ROM_LOAD( "rom15.m4", 0x0000, 0x1000, CRC(8b5464d6) SHA1(e65acd280c0d9776cb80073241cf260b76ff0ca6) )
ROM_REGION( 0x0a20, "proms", 0 )
ROM_LOAD( "prom6.h1", 0x0000, 0x0100, CRC(b117d22c) SHA1(357efed6597757907077a7e5130bfa643d5dd197) ) /* palette red */
ROM_LOAD( "prom7.f1", 0x0100, 0x0100, CRC(9b6b4f56) SHA1(7fd726a20fce40b8ba4b8ef05fb51a85ad9fd282) ) /* palette green */
ROM_LOAD( "prom8.e1", 0x0200, 0x0100, CRC(67cb68ae) SHA1(9b54c7e51d8db0d8699723173709f04dd2fdfa77) ) /* palette blue */
ROM_LOAD( "prom9.p2", 0x0300, 0x0100, CRC(dd015b80) SHA1(ce45577204cfbbe623121c1bd99a190464ae7895) ) /* char lookup table msb */
ROM_LOAD( "prom10.n2", 0x0400, 0x0100, CRC(71b768c7) SHA1(3d8c106758d279daf8e989d4c1bb72de3419d2d6) ) /* char lookup table lsb */
ROM_LOAD( "prom4.s1", 0x0500, 0x0100, CRC(06523b81) SHA1(0042c364fd2fabd6b04cb2d59a71a7e6deb90ab3) ) /* unknown */
ROM_LOAD( "prom5.p1", 0x0600, 0x0100, CRC(75ea8f70) SHA1(1a2c478e7b87fa7f8725a3d1ff06c5c9422dd524) ) /* unknown */
ROM_LOAD( "prom11.m2", 0x0700, 0x0100, CRC(ba42a582) SHA1(2e8f3dab82a34078b866e9875978e83fef045f86) ) /* unknown */
ROM_LOAD( "prom12.h2", 0x0800, 0x0100, CRC(f2540c51) SHA1(126f698eb65e54fa16a1abfa5b40b0161cb66254) ) /* unknown */
ROM_LOAD( "prom13.w8", 0x0900, 0x0100, CRC(4e2a2781) SHA1(7be2e066499ea0af76f6ae926fe87e02f8c36a6f) ) /* unknown */
ROM_LOAD( "prom1.n2", 0x0a00, 0x0020, CRC(1afc04f0) SHA1(38207cf3e15bac7034ac06469b95708d22b57da4) ) /* timing? (on the cpu board) */
ROM_LOAD( "prom6.h1", 0x0000, 0x0100, CRC(b117d22c) SHA1(357efed6597757907077a7e5130bfa643d5dd197) ) // palette red
ROM_LOAD( "prom7.f1", 0x0100, 0x0100, CRC(9b6b4f56) SHA1(7fd726a20fce40b8ba4b8ef05fb51a85ad9fd282) ) // palette green
ROM_LOAD( "prom8.e1", 0x0200, 0x0100, CRC(67cb68ae) SHA1(9b54c7e51d8db0d8699723173709f04dd2fdfa77) ) // palette blue
ROM_LOAD( "prom9.p2", 0x0300, 0x0100, CRC(dd015b80) SHA1(ce45577204cfbbe623121c1bd99a190464ae7895) ) // char lookup table MSB
ROM_LOAD( "prom10.n2", 0x0400, 0x0100, CRC(71b768c7) SHA1(3d8c106758d279daf8e989d4c1bb72de3419d2d6) ) // char lookup table LSB
ROM_LOAD( "prom4.s1", 0x0500, 0x0100, CRC(06523b81) SHA1(0042c364fd2fabd6b04cb2d59a71a7e6deb90ab3) ) // unknown
ROM_LOAD( "prom5.p1", 0x0600, 0x0100, CRC(75ea8f70) SHA1(1a2c478e7b87fa7f8725a3d1ff06c5c9422dd524) ) // unknown
ROM_LOAD( "prom11.m2", 0x0700, 0x0100, CRC(ba42a582) SHA1(2e8f3dab82a34078b866e9875978e83fef045f86) ) // unknown
ROM_LOAD( "prom12.h2", 0x0800, 0x0100, CRC(f2540c51) SHA1(126f698eb65e54fa16a1abfa5b40b0161cb66254) ) // unknown
ROM_LOAD( "prom13.w8", 0x0900, 0x0100, CRC(4e2a2781) SHA1(7be2e066499ea0af76f6ae926fe87e02f8c36a6f) ) // unknown
ROM_LOAD( "prom1.n2", 0x0a00, 0x0020, CRC(1afc04f0) SHA1(38207cf3e15bac7034ac06469b95708d22b57da4) ) // timing? (on the CPU board)
ROM_REGION( 0x2000, "custom:samples", 0 )
ROM_LOAD( "rom05.f3", 0x0000, 0x2000, CRC(21544cd6) SHA1(b9644ab3c4393cd2669d2b5b3c80d7a9f1c91ca6) )
ROM_REGION( 0x0200, "custom:soundproms", 0 ) /* 4bit->8bit sample expansion PROMs */
ROM_LOAD( "prom3.j4", 0x0000, 0x0100, CRC(bd2c080b) SHA1(9782bb5001e96db56bc29df398187f700bce4f8e) ) /* low 4 bits */
ROM_LOAD( "prom2.k2", 0x0100, 0x0100, CRC(4017a2a6) SHA1(dadef2de7a1119758c8e6d397aa42815b0218889) ) /* high 4 bits */
ROM_REGION( 0x0200, "custom:soundproms", 0 ) // 4bit->8bit sample expansion PROMs
ROM_LOAD( "prom3.j4", 0x0000, 0x0100, CRC(bd2c080b) SHA1(9782bb5001e96db56bc29df398187f700bce4f8e) ) // low 4 bits
ROM_LOAD( "prom2.k2", 0x0100, 0x0100, CRC(4017a2a6) SHA1(dadef2de7a1119758c8e6d397aa42815b0218889) ) // high 4 bits
ROM_END
ROM_START( clshroad )
ROM_REGION( 0x8000, "maincpu", 0 ) /* Main Z80 Code */
ROM_REGION( 0x8000, "maincpu", 0 ) // Z80 code
ROM_LOAD( "clashr3.bin", 0x0000, 0x8000, CRC(865c32ae) SHA1(e5cdd2d624fe6dc8bd6bebf2bd1c79d287408c63) )
ROM_REGION( 0x2000, "audiocpu", 0 ) /* Sound Z80 Code */
ROM_REGION( 0x2000, "audiocpu", 0 ) // Z80 code
ROM_LOAD( "clashr2.bin", 0x0000, 0x2000, CRC(e6389ec1) SHA1(6ec94d5e389e9104f40fc48df6f15674415851c0) )
ROM_REGION( 0x8000, "gfx1", ROMREGION_INVERT ) /* Sprites */
ROM_REGION( 0x8000, "sprites", ROMREGION_INVERT )
ROM_LOAD( "clashr5.bin", 0x0000, 0x4000, CRC(094858b8) SHA1(a19f79cb665bbb1e25a94e9dd09a9e99f553afe8) )
ROM_LOAD( "clashr6.bin", 0x4000, 0x4000, CRC(daa1daf3) SHA1(cc24c97c9950adc0041f68832774e40c87d1d4b2) )
ROM_REGION( 0x8000, "gfx2", ROMREGION_INVERT ) /* Layer 0 */
ROM_REGION( 0x8000, "layer0", ROMREGION_INVERT )
ROM_LOAD( "clashr8.bin", 0x0000, 0x4000, CRC(cbb66719) SHA1(2497575f84a956bc2b9e4c3f2c71ae42d036355e) )
ROM_LOAD( "clashr9.bin", 0x4000, 0x4000, CRC(c15e8eed) SHA1(3b1e7fa014d176a01d5f9214051b0c8cc5556684) )
ROM_REGION( 0x4000, "gfx3", ROMREGION_INVERT) /* Layer 1 */
ROM_REGION( 0x4000, "layer1", ROMREGION_INVERT )
ROM_LOAD( "clashr4.bin", 0x0000, 0x2000, CRC(664201d9) SHA1(4eb85306f0c9683d0e0cf787f6389df8fe4a3d9d) )
ROM_LOAD( "clashr7.bin", 0x2000, 0x2000, CRC(97973030) SHA1(cca7a9d2751add7f6dd9bac83f7f63ece8021dbc) )
ROM_REGION( 0x0b40, "proms", 0 )
ROM_LOAD( "82s129.6", 0x0000, 0x0100, CRC(38f443da) SHA1(a015217508b18eb3f1987cd5b53f31608b13de08) ) /* r */
ROM_LOAD( "82s129.7", 0x0100, 0x0100, CRC(977fab0c) SHA1(78e7b4f1e9891d2d9cf1e1ec0c4f59a311cef1c5) ) /* g */
ROM_LOAD( "82s129.8", 0x0200, 0x0100, CRC(ae7ae54d) SHA1(d7d4682e437f2f7adb7fceb813437c06f27f2711) ) /* b */
/* all other proms that firebatl has are missing */
ROM_LOAD( "clashrd.a2", 0x0900, 0x0100, CRC(4e2a2781) SHA1(7be2e066499ea0af76f6ae926fe87e02f8c36a6f) ) /* unknown */
ROM_LOAD( "clashrd.g4", 0x0a00, 0x0020, CRC(1afc04f0) SHA1(38207cf3e15bac7034ac06469b95708d22b57da4) ) /* timing? */
ROM_LOAD( "clashrd.b11", 0x0a20, 0x0020, CRC(d453f2c5) SHA1(7fdc5bf59bad9e8f00e970565ff6f6b3773541db) ) /* unknown (possibly bad dump) */
ROM_LOAD( "clashrd.g10", 0x0a40, 0x0100, CRC(73afefd0) SHA1(d14c5490c5b174d54043bfdf5c6fb675e67492e7) ) /* unknown (possibly bad dump) */
ROM_LOAD( "82s129.6", 0x0000, 0x0100, CRC(38f443da) SHA1(a015217508b18eb3f1987cd5b53f31608b13de08) ) // r
ROM_LOAD( "82s129.7", 0x0100, 0x0100, CRC(977fab0c) SHA1(78e7b4f1e9891d2d9cf1e1ec0c4f59a311cef1c5) ) // g
ROM_LOAD( "82s129.8", 0x0200, 0x0100, CRC(ae7ae54d) SHA1(d7d4682e437f2f7adb7fceb813437c06f27f2711) ) // b
// all other PROMs that firebatl has are missing
ROM_LOAD( "clashrd.a2", 0x0900, 0x0100, CRC(4e2a2781) SHA1(7be2e066499ea0af76f6ae926fe87e02f8c36a6f) ) // unknown
ROM_LOAD( "clashrd.g4", 0x0a00, 0x0020, CRC(1afc04f0) SHA1(38207cf3e15bac7034ac06469b95708d22b57da4) ) // timing?
ROM_LOAD( "clashrd.b11", 0x0a20, 0x0020, CRC(d453f2c5) SHA1(7fdc5bf59bad9e8f00e970565ff6f6b3773541db) ) // unknown (possibly bad dump)
ROM_LOAD( "clashrd.g10", 0x0a40, 0x0100, CRC(73afefd0) SHA1(d14c5490c5b174d54043bfdf5c6fb675e67492e7) ) // unknown (possibly bad dump)
ROM_REGION( 0x2000, "custom:samples", 0 )
ROM_LOAD( "clashr1.bin", 0x0000, 0x2000, CRC(0d0a8068) SHA1(529878d0c5f078590e07ec0fffc27b212843c0ad) )
ROM_REGION( 0x0200, "custom:soundproms", 0 ) /* 4bit->8bit sample expansion PROMs */
ROM_LOAD( "clashrd.g8", 0x0000, 0x0100, CRC(bd2c080b) SHA1(9782bb5001e96db56bc29df398187f700bce4f8e) ) /* low 4 bits */
ROM_LOAD( "clashrd.g7", 0x0100, 0x0100, CRC(4017a2a6) SHA1(dadef2de7a1119758c8e6d397aa42815b0218889) ) /* high 4 bits */
ROM_REGION( 0x0200, "custom:soundproms", 0 ) // 4bit->8bit sample expansion PROMs
ROM_LOAD( "clashrd.g8", 0x0000, 0x0100, CRC(bd2c080b) SHA1(9782bb5001e96db56bc29df398187f700bce4f8e) ) // low 4 bits
ROM_LOAD( "clashrd.g7", 0x0100, 0x0100, CRC(4017a2a6) SHA1(dadef2de7a1119758c8e6d397aa42815b0218889) ) // high 4 bits
ROM_END
ROM_START( clshroads )
ROM_REGION( 0x8000, "maincpu", 0 ) /* Main Z80 Code */
ROM_REGION( 0x8000, "maincpu", 0 ) // Z80 code
ROM_LOAD( "cr-3", 0x0000, 0x8000, CRC(23559df2) SHA1(41a08a4fbad3da1898226e2ca1956a9f7c8f94b0) )
ROM_REGION( 0x2000, "audiocpu", 0 ) /* Sound Z80 Code */
ROM_REGION( 0x2000, "audiocpu", 0 ) // Z80 code
ROM_LOAD( "clashr2.bin", 0x0000, 0x2000, CRC(e6389ec1) SHA1(6ec94d5e389e9104f40fc48df6f15674415851c0) )
ROM_REGION( 0x8000, "gfx1", ROMREGION_INVERT ) /* Sprites */
ROM_REGION( 0x8000, "sprites", ROMREGION_INVERT )
ROM_LOAD( "cr-12", 0x0000, 0x2000, CRC(e5aa4c46) SHA1(c0ed717e263aca2d0ec8a078f0aa3377357b9e3d) )
ROM_LOAD( "cr-11", 0x2000, 0x2000, CRC(7fc11c7c) SHA1(e798c4abe87fd701f250625ae6545ab00bcfbef5) )
ROM_LOAD( "cr-10", 0x4000, 0x2000, CRC(6b1293b7) SHA1(3219c03e87be0f53d4556a45d82278fc712f4d0b) )
ROM_LOAD( "cr-9", 0x6000, 0x2000, CRC(d219722c) SHA1(e68a0883113db43a878a5529fa8deb7816573e35) )
ROM_REGION( 0x8000, "gfx2", ROMREGION_INVERT ) /* Layer 0 */
ROM_REGION( 0x8000, "layer0", ROMREGION_INVERT )
ROM_LOAD( "cr-7", 0x0000, 0x2000, CRC(e8aa7ac3) SHA1(12f4f1041001ce6e77e9b0c691663f4a20969eaa) )
ROM_LOAD( "cr-6", 0x2000, 0x2000, CRC(037be475) SHA1(72a8c1da210239ecac96ea22e54a5d193f32ad83) )
ROM_LOAD( "cr-5", 0x4000, 0x2000, CRC(a4151734) SHA1(1ccf68270bbfd557cd8cca3f7f36e9e2de7e94e6) )
ROM_LOAD( "cr-4", 0x6000, 0x2000, CRC(5ef24757) SHA1(4c6a06fdadb0b52f62148642e0416c4f60c8048b) )
ROM_REGION( 0x4000, "gfx3", ROMREGION_INVERT) /* Layer 1 */
ROM_REGION( 0x4000, "layer1", ROMREGION_INVERT )
ROM_LOAD( "cr-13", 0x0000, 0x2000, CRC(012a6412) SHA1(ae9757e56f896e4158e6af7dc12eb6c2a3755f4d) )
ROM_LOAD( "cr-8", 0x2000, 0x2000, CRC(3c2b816c) SHA1(3df3d9f49475ccfbb0792d98c3d12c8fd15034bc) )
ROM_REGION( 0x0b40, "proms", 0 )
ROM_LOAD( "82s129.6", 0x0000, 0x0100, CRC(38f443da) SHA1(a015217508b18eb3f1987cd5b53f31608b13de08) ) /* r */
ROM_LOAD( "82s129.7", 0x0100, 0x0100, CRC(977fab0c) SHA1(78e7b4f1e9891d2d9cf1e1ec0c4f59a311cef1c5) ) /* g */
ROM_LOAD( "82s129.8", 0x0200, 0x0100, CRC(ae7ae54d) SHA1(d7d4682e437f2f7adb7fceb813437c06f27f2711) ) /* b */
/* all other proms that firebatl has are missing */
ROM_LOAD( "clashrd.a2", 0x0900, 0x0100, CRC(4e2a2781) SHA1(7be2e066499ea0af76f6ae926fe87e02f8c36a6f) ) /* unknown */
ROM_LOAD( "clashrd.g4", 0x0a00, 0x0020, CRC(1afc04f0) SHA1(38207cf3e15bac7034ac06469b95708d22b57da4) ) /* timing? */
ROM_LOAD( "clashrd.b11", 0x0a20, 0x0020, CRC(d453f2c5) SHA1(7fdc5bf59bad9e8f00e970565ff6f6b3773541db) ) /* unknown (possibly bad dump) */
ROM_LOAD( "clashrd.g10", 0x0a40, 0x0100, CRC(73afefd0) SHA1(d14c5490c5b174d54043bfdf5c6fb675e67492e7) ) /* unknown (possibly bad dump) */
ROM_LOAD( "82s129.6", 0x0000, 0x0100, CRC(38f443da) SHA1(a015217508b18eb3f1987cd5b53f31608b13de08) ) // r
ROM_LOAD( "82s129.7", 0x0100, 0x0100, CRC(977fab0c) SHA1(78e7b4f1e9891d2d9cf1e1ec0c4f59a311cef1c5) ) // g
ROM_LOAD( "82s129.8", 0x0200, 0x0100, CRC(ae7ae54d) SHA1(d7d4682e437f2f7adb7fceb813437c06f27f2711) ) // b
// all other PROMs that firebatl has are missing
ROM_LOAD( "clashrd.a2", 0x0900, 0x0100, CRC(4e2a2781) SHA1(7be2e066499ea0af76f6ae926fe87e02f8c36a6f) ) // unknown
ROM_LOAD( "clashrd.g4", 0x0a00, 0x0020, CRC(1afc04f0) SHA1(38207cf3e15bac7034ac06469b95708d22b57da4) ) // timing?
ROM_LOAD( "clashrd.b11", 0x0a20, 0x0020, CRC(d453f2c5) SHA1(7fdc5bf59bad9e8f00e970565ff6f6b3773541db) ) // unknown (possibly bad dump)
ROM_LOAD( "clashrd.g10", 0x0a40, 0x0100, CRC(73afefd0) SHA1(d14c5490c5b174d54043bfdf5c6fb675e67492e7) ) // unknown (possibly bad dump)
ROM_REGION( 0x2000, "custom:samples", 0 )
ROM_LOAD( "clashr1.bin", 0x0000, 0x2000, CRC(0d0a8068) SHA1(529878d0c5f078590e07ec0fffc27b212843c0ad) )
ROM_REGION( 0x0200, "custom:soundproms", 0 ) /* 4bit->8bit sample expansion PROMs */
ROM_LOAD( "clashrd.g8", 0x0000, 0x0100, CRC(bd2c080b) SHA1(9782bb5001e96db56bc29df398187f700bce4f8e) ) /* low 4 bits */
ROM_LOAD( "clashrd.g7", 0x0100, 0x0100, CRC(4017a2a6) SHA1(dadef2de7a1119758c8e6d397aa42815b0218889) ) /* high 4 bits */
ROM_REGION( 0x0200, "custom:soundproms", 0 ) // 4bit->8bit sample expansion PROMs
ROM_LOAD( "clashrd.g8", 0x0000, 0x0100, CRC(bd2c080b) SHA1(9782bb5001e96db56bc29df398187f700bce4f8e) ) // low 4 bits
ROM_LOAD( "clashrd.g7", 0x0100, 0x0100, CRC(4017a2a6) SHA1(dadef2de7a1119758c8e6d397aa42815b0218889) ) // high 4 bits
ROM_END
// this set came from a bootleg board, but I believe it to be original for the following reason:
@ -551,51 +983,54 @@ ROM_END
// set the Wood Place string is padded with several 0x20 (Space) characters to fit the same number of bytes
// in which the Data East Corporation string fits, suggesting that they always planned to put it there.
ROM_START( clshroadd )
ROM_REGION( 0x8000, "maincpu", 0 ) /* Main Z80 Code */
ROM_REGION( 0x8000, "maincpu", 0 ) // Z80 code
ROM_LOAD( "crdeco-3.bin", 0x0000, 0x8000, CRC(1d54195c) SHA1(4b1d7d333707b5ebd57572742eb74df5abe8a70d) )
ROM_REGION( 0x2000, "audiocpu", 0 ) /* Sound Z80 Code */
ROM_REGION( 0x2000, "audiocpu", 0 ) // Z80 code
ROM_LOAD( "clashr2.bin", 0x0000, 0x2000, CRC(e6389ec1) SHA1(6ec94d5e389e9104f40fc48df6f15674415851c0) )
ROM_REGION( 0x8000, "gfx1", ROMREGION_INVERT ) /* Sprites */
ROM_REGION( 0x8000, "sprites", ROMREGION_INVERT )
ROM_LOAD( "clashr5.bin", 0x0000, 0x4000, CRC(094858b8) SHA1(a19f79cb665bbb1e25a94e9dd09a9e99f553afe8) )
ROM_LOAD( "clashr6.bin", 0x4000, 0x4000, CRC(daa1daf3) SHA1(cc24c97c9950adc0041f68832774e40c87d1d4b2) )
ROM_REGION( 0x8000, "gfx2", ROMREGION_INVERT ) /* Layer 0 */
ROM_REGION( 0x8000, "layer0", ROMREGION_INVERT )
ROM_LOAD( "clashr8.bin", 0x0000, 0x4000, CRC(cbb66719) SHA1(2497575f84a956bc2b9e4c3f2c71ae42d036355e) )
ROM_LOAD( "clashr9.bin", 0x4000, 0x4000, CRC(c15e8eed) SHA1(3b1e7fa014d176a01d5f9214051b0c8cc5556684) )
ROM_REGION( 0x4000, "gfx3", ROMREGION_INVERT) /* Layer 1 */
ROM_REGION( 0x4000, "layer1", ROMREGION_INVERT )
ROM_LOAD( "clashr4.bin", 0x0000, 0x2000, CRC(664201d9) SHA1(4eb85306f0c9683d0e0cf787f6389df8fe4a3d9d) )
ROM_LOAD( "clashr7.bin", 0x2000, 0x2000, CRC(97973030) SHA1(cca7a9d2751add7f6dd9bac83f7f63ece8021dbc) )
ROM_REGION( 0x0b40, "proms", 0 )
ROM_LOAD( "82s129.6", 0x0000, 0x0100, CRC(38f443da) SHA1(a015217508b18eb3f1987cd5b53f31608b13de08) ) /* r */
ROM_LOAD( "82s129.7", 0x0100, 0x0100, CRC(977fab0c) SHA1(78e7b4f1e9891d2d9cf1e1ec0c4f59a311cef1c5) ) /* g */
ROM_LOAD( "82s129.8", 0x0200, 0x0100, CRC(ae7ae54d) SHA1(d7d4682e437f2f7adb7fceb813437c06f27f2711) ) /* b */
/* all other proms that firebatl has are missing */
ROM_LOAD( "clashrd.a2", 0x0900, 0x0100, CRC(4e2a2781) SHA1(7be2e066499ea0af76f6ae926fe87e02f8c36a6f) ) /* unknown */
ROM_LOAD( "clashrd.g4", 0x0a00, 0x0020, CRC(1afc04f0) SHA1(38207cf3e15bac7034ac06469b95708d22b57da4) ) /* timing? */
ROM_LOAD( "clashrd.b11", 0x0a20, 0x0020, CRC(d453f2c5) SHA1(7fdc5bf59bad9e8f00e970565ff6f6b3773541db) ) /* unknown (possibly bad dump) */
ROM_LOAD( "clashrd.g10", 0x0a40, 0x0100, CRC(73afefd0) SHA1(d14c5490c5b174d54043bfdf5c6fb675e67492e7) ) /* unknown (possibly bad dump) */
ROM_LOAD( "82s129.6", 0x0000, 0x0100, CRC(38f443da) SHA1(a015217508b18eb3f1987cd5b53f31608b13de08) ) // r
ROM_LOAD( "82s129.7", 0x0100, 0x0100, CRC(977fab0c) SHA1(78e7b4f1e9891d2d9cf1e1ec0c4f59a311cef1c5) ) // g
ROM_LOAD( "82s129.8", 0x0200, 0x0100, CRC(ae7ae54d) SHA1(d7d4682e437f2f7adb7fceb813437c06f27f2711) ) // b
// all other PROMs that firebatl has are missing
ROM_LOAD( "clashrd.a2", 0x0900, 0x0100, CRC(4e2a2781) SHA1(7be2e066499ea0af76f6ae926fe87e02f8c36a6f) ) // unknown
ROM_LOAD( "clashrd.g4", 0x0a00, 0x0020, CRC(1afc04f0) SHA1(38207cf3e15bac7034ac06469b95708d22b57da4) ) // timing?
ROM_LOAD( "clashrd.b11", 0x0a20, 0x0020, CRC(d453f2c5) SHA1(7fdc5bf59bad9e8f00e970565ff6f6b3773541db) ) // unknown (possibly bad dump)
ROM_LOAD( "clashrd.g10", 0x0a40, 0x0100, CRC(73afefd0) SHA1(d14c5490c5b174d54043bfdf5c6fb675e67492e7) ) // unknown (possibly bad dump)
ROM_REGION( 0x2000, "custom:samples", 0 )
ROM_LOAD( "clashr1.bin", 0x0000, 0x2000, CRC(0d0a8068) SHA1(529878d0c5f078590e07ec0fffc27b212843c0ad) )
ROM_REGION( 0x0200, "custom:soundproms", 0 ) /* 4bit->8bit sample expansion PROMs */
ROM_LOAD( "clashrd.g8", 0x0000, 0x0100, CRC(bd2c080b) SHA1(9782bb5001e96db56bc29df398187f700bce4f8e) ) /* low 4 bits */
ROM_LOAD( "clashrd.g7", 0x0100, 0x0100, CRC(4017a2a6) SHA1(dadef2de7a1119758c8e6d397aa42815b0218889) ) /* high 4 bits */
ROM_REGION( 0x0200, "custom:soundproms", 0 ) // 4bit->8bit sample expansion PROMs
ROM_LOAD( "clashrd.g8", 0x0000, 0x0100, CRC(bd2c080b) SHA1(9782bb5001e96db56bc29df398187f700bce4f8e) ) // low 4 bits
ROM_LOAD( "clashrd.g7", 0x0100, 0x0100, CRC(4017a2a6) SHA1(dadef2de7a1119758c8e6d397aa42815b0218889) ) // high 4 bits
ROM_END
void clshroad_state::init_firebatl()
void firebatl_state::init_firebatl()
{
// cfr. notes at top
uint8_t *ROM = memregion("maincpu")->base();
u8 *rom = memregion("maincpu")->base();
ROM[0x6124] = 0x02;
rom[0x6124] = 0x02;
}
GAME( 1984, firebatl, 0, firebatl, firebatl, clshroad_state, init_firebatl, ROT90, "Woodplace Inc. (Taito license)", "Fire Battle", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_COLORS | MACHINE_UNEMULATED_PROTECTION ) // developed by Graphic Research
} // anonymous namespace
GAME( 1984, firebatl, 0, firebatl, firebatl, firebatl_state, init_firebatl, ROT90, "Woodplace Inc. (Taito license)", "Fire Battle", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_COLORS | MACHINE_UNEMULATED_PROTECTION ) // developed by Graphic Research
GAME( 1986, clshroad, 0, clshroad, clshroad, clshroad_state, empty_init, ROT0, "Woodplace Inc.", "Clash-Road", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_TIMING )
GAME( 1986, clshroads, clshroad, clshroad, clshroad, clshroad_state, empty_init, ROT0, "Woodplace Inc. (Status Game Corp. license)", "Clash-Road (Status license)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_TIMING )
GAME( 1986, clshroadd, clshroad, clshroad, clshroad, clshroad_state, empty_init, ROT0, "Woodplace Inc. (Data East license)", "Clash-Road (Data East license)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_TIMING )

View File

@ -1,84 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Luca Elia
#ifndef MAME_NICHIBUTSU_CLSHROAD_H
#define MAME_NICHIBUTSU_CLSHROAD_H
#pragma once
#include "emupal.h"
#include "screen.h"
#include "tilemap.h"
class clshroad_state : public driver_device
{
public:
clshroad_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_audiocpu(*this, "audiocpu")
, m_screen(*this, "screen")
, m_gfxdecode(*this, "gfxdecode")
, m_palette(*this, "palette")
, m_spriteram(*this, "spriteram")
, m_vram_0(*this, "vram_0")
, m_vram_1(*this, "vram_1")
, m_vregs(*this, "vregs")
{ }
void firebatl(machine_config &config);
void clshroad(machine_config &config);
void init_firebatl();
private:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<screen_device> m_screen;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_shared_ptr<uint8_t> m_spriteram;
required_shared_ptr<uint8_t> m_vram_0;
required_shared_ptr<uint8_t> m_vram_1;
required_shared_ptr<uint8_t> m_vregs;
u8 m_main_irq_mask = 0U;
u8 m_sound_irq_mask = 0U;
u8 m_color_bank = 0U;
u8 m_video_unk = 0U;
tilemap_t *m_tilemap_0a = nullptr;
tilemap_t *m_tilemap_0b = nullptr;
tilemap_t *m_tilemap_1 = nullptr;
uint8_t input_r(offs_t offset);
DECLARE_WRITE_LINE_MEMBER(main_irq_mask_w);
DECLARE_WRITE_LINE_MEMBER(sound_irq_mask_w);
DECLARE_WRITE_LINE_MEMBER(flipscreen_w);
void vram_0_w(offs_t offset, uint8_t data);
void vram_1_w(offs_t offset, uint8_t data);
TILE_GET_INFO_MEMBER(get_tile_info_0a);
TILE_GET_INFO_MEMBER(get_tile_info_0b);
TILEMAP_MAPPER_MEMBER(tilemap_scan_rows_extra);
TILE_GET_INFO_MEMBER(get_tile_info_fb1);
TILE_GET_INFO_MEMBER(get_tile_info_1);
virtual void machine_start() override;
virtual void machine_reset() override;
DECLARE_VIDEO_START(firebatl);
void firebatl_palette(palette_device &palette) const;
DECLARE_VIDEO_START(clshroad);
void clshroad_palette(palette_device &palette) const;
void color_bank_w(offs_t offset, u8 data);
void video_unk_w(offs_t offset, u8 data);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(vblank_irq);
INTERRUPT_GEN_MEMBER(half_vblank_irq);
INTERRUPT_GEN_MEMBER(sound_timer_irq);
void clshroad_map(address_map &map);
void clshroad_sound_map(address_map &map);
};
#endif // MAME_NICHIBUTSU_CLSHROAD_H

View File

@ -1,340 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Luca Elia
/***************************************************************************
-= Clash Road =-
driver by Luca Elia (l.elia@tin.it)
[ 2 Horizontally Scrolling Layers ]
Size : 512 x 256
Tiles: 16 x 16 x 4.
These 2 layers share the same graphics and X scroll value.
The tile codes are stuffed together in memory too: first one
layer's row, then the other's (and so on for all the rows).
[ 1 Fixed Layer ]
Size : (256 + 32) x 256
Tiles: 8 x 8 x 4.
This is like a 32x32 tilemap, but the top and bottom rows (that
fall outside the visible area) are used to widen the tilemap
horizontally, adding 2 vertical columns both sides.
The result is a 36x28 visible tilemap.
[ 64? sprites ]
Sprites are 16 x 16 x 4.
***************************************************************************/
#include "emu.h"
#include "clshroad.h"
WRITE_LINE_MEMBER(clshroad_state::flipscreen_w)
{
flip_screen_set(state);
}
void clshroad_state::clshroad_palette(palette_device &palette) const
{
const uint8_t *color_prom = memregion("proms")->base();
for (int i = 0; i < 256; i++)
{
palette.set_pen_color(i,
pal4bit(color_prom[i | 0x000]),
pal4bit(color_prom[i | 0x100]),
pal4bit(color_prom[i | 0x200]));
}
}
void clshroad_state::firebatl_palette(palette_device &palette) const
{
const uint8_t *color_prom = memregion("proms")->base();
// create a lookup table for the palette
for (int i = 0; i < 0x100; i++)
{
int const r = pal4bit(color_prom[i | 0x000]);
int const g = pal4bit(color_prom[i | 0x100]);
int const b = pal4bit(color_prom[i | 0x200]);
palette.set_indirect_color(i, rgb_t(r, g, b));
}
// color_prom now points to the beginning of the lookup table
color_prom += 0x300;
for (int i = 0; i < 0x200; i++)
palette.set_pen_indirect(i, i & 0xff);
for (int i = 0; i < 0x100; i++)
{
uint8_t const ctabentry = ((color_prom[i | 0x000] & 0x0f) << 4) | (color_prom[i | 0x100] & 0x0f);
palette.set_pen_indirect(i | 0x200, ctabentry);
}
}
/***************************************************************************
Callbacks for the TileMap code
***************************************************************************/
/***************************************************************************
Layers 0 Tiles Format
Offset:
00-3f: Even bytes: Codes Odd bytes: Colors <- Layer B First Row
40-7f: Even bytes: Codes Odd bytes: Colors <- Layer A First Row
.. <- 2nd Row
.. <- 3rd Row
etc.
***************************************************************************/
TILE_GET_INFO_MEMBER(clshroad_state::get_tile_info_0a)
{
uint8_t code;
tile_index = (tile_index & 0x1f) + (tile_index & ~0x1f)*2;
code = m_vram_0[ tile_index * 2 + 0x40 ];
// color = m_vram_0[ tile_index * 2 + 0x41 ];
tileinfo.set(
1,
code,
m_color_bank,
0
);
}
TILE_GET_INFO_MEMBER(clshroad_state::get_tile_info_0b)
{
uint8_t code;
tile_index = (tile_index & 0x1f) + (tile_index & ~0x1f)*2;
code = m_vram_0[ tile_index * 2 + 0x00 ];
// color = m_vram_0[ tile_index * 2 + 0x01 ];
tileinfo.set(
1,
code,
m_color_bank,
0
);
}
void clshroad_state::vram_0_w(offs_t offset, uint8_t data)
{
int tile_index = offset / 2;
int tile = (tile_index & 0x1f) + (tile_index & ~0x3f)/2;
m_vram_0[offset] = data;
if (tile_index & 0x20) m_tilemap_0a->mark_tile_dirty(tile);
else m_tilemap_0b->mark_tile_dirty(tile);
}
/***************************************************************************
Layer 1 Tiles Format
Offset:
000-3ff Code
400-7ff 7654---- Code (High bits)
----3210 Color
This is like a 32x32 tilemap, but the top and bottom rows (that
fall outside the visible area) are used to widen the tilemap
horizontally, adding 2 vertical columns both sides.
The result is a 36x28 visible tilemap.
***************************************************************************/
/* logical (col,row) -> memory offset */
TILEMAP_MAPPER_MEMBER(clshroad_state::tilemap_scan_rows_extra)
{
// The leftmost columns come from the bottom rows
if (col <= 0x01) return row + (col + 0x1e) * 0x20;
// The rightmost columns come from the top rows
if (col >= 0x22) return row + (col - 0x22) * 0x20;
// These are not visible, but *must* be mapped to other tiles than
// those used by the leftmost and rightmost columns (tilemap "bug"?)
if (row <= 0x01) return 0;
if (row >= 0x1e) return 0;
// "normal" layout for the rest.
return (col-2) + row * 0x20;
}
TILE_GET_INFO_MEMBER(clshroad_state::get_tile_info_fb1)
{
uint8_t code = m_vram_1[ tile_index + 0x000 ];
uint8_t color = m_vram_1[ tile_index + 0x400 ] & 0x3f;
tileinfo.group = color;
tileinfo.set(2,
code,
color,
0);
}
TILE_GET_INFO_MEMBER(clshroad_state::get_tile_info_1)
{
uint8_t code = m_vram_1[ tile_index + 0x000 ];
uint8_t color = m_vram_1[ tile_index + 0x400 ];
tileinfo.set(2,
code + ((color & 0xf0)<<4),
color & 0x0f,
0);
}
void clshroad_state::vram_1_w(offs_t offset, uint8_t data)
{
m_vram_1[offset] = data;
m_tilemap_1->mark_tile_dirty(offset % 0x400);
}
void clshroad_state::color_bank_w(offs_t offset, u8 data)
{
// - Clash Road: always 9 during gameplay and 0 when title screen displays
// (further disabling it out)
// - Fire Battle: variable depending on what happens on screen
// (makes background to flash when lightning occurs, has additional color cycling effects)
m_color_bank = data & 0xf;
m_tilemap_0a->mark_all_dirty();
m_tilemap_0b->mark_all_dirty();
if (data & 0xf0)
logerror("%s: unknown vreg [2] write %02x\n", machine().describe_context(), data);
}
void clshroad_state::video_unk_w(offs_t offset, u8 data)
{
// Clash Road: inited to 0 at POST, never touched anywhere else
// Fire Battle: always bit 7 held, normally 0x80,
// increments bits 0-3 from 0x80 to 0x8f when lightning is about to strike and decrements back to 0x80
// after section has been passed, color gain control? sprite color bank (on unmapped color proms)?
}
VIDEO_START_MEMBER(clshroad_state,firebatl)
{
/* These 2 use the graphics and scroll value */
m_tilemap_0a = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(clshroad_state::get_tile_info_0a)), TILEMAP_SCAN_ROWS, 16, 16, 0x20, 0x10);
m_tilemap_0b = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(clshroad_state::get_tile_info_0b)), TILEMAP_SCAN_ROWS, 16, 16, 0x20, 0x10);
/* Text (No scrolling) */
m_tilemap_1 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(clshroad_state::get_tile_info_fb1)), tilemap_mapper_delegate(*this, FUNC(clshroad_state::tilemap_scan_rows_extra)), 8, 8, 0x24, 0x20);
m_tilemap_0a->set_scrolldx(-0x2a, -0xb3);
m_tilemap_0b->set_scrolldx(-0x2a, -0xb3);
m_tilemap_0a->set_scrolldy(0, 1);
m_tilemap_0b->set_scrolldy(0, 1);
m_tilemap_0b->set_transparent_pen(0);
m_tilemap_1->configure_groups(*m_gfxdecode->gfx(2), 0x0f);
}
VIDEO_START_MEMBER(clshroad_state,clshroad)
{
/* These 2 use the graphics and scroll value */
m_tilemap_0a = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(clshroad_state::get_tile_info_0a)), TILEMAP_SCAN_ROWS, 16, 16, 0x20, 0x10);
m_tilemap_0b = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(clshroad_state::get_tile_info_0b)), TILEMAP_SCAN_ROWS, 16, 16, 0x20, 0x10);
/* Text (No scrolling) */
m_tilemap_1 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(clshroad_state::get_tile_info_1)), tilemap_mapper_delegate(*this, FUNC(clshroad_state::tilemap_scan_rows_extra)), 8, 8, 0x24, 0x20);
m_tilemap_0a->set_scrolldx(-0x30, -0xb5);
m_tilemap_0b->set_scrolldx(-0x30, -0xb5);
m_tilemap_0b->set_transparent_pen(0x0f);
m_tilemap_1->set_transparent_pen(0x0f);
}
/***************************************************************************
Sprites Drawing
Offset: Format: Value:
0
1 Y (Bottom-up)
2 765432--
------10 Code (high bits)
3 76------
--543210 Code (low bits)
4
5 X (low bits)
6 X (High bits)
7 7654----
----3210 Color
- Sprite flipping ?
***************************************************************************/
void clshroad_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
for (int i = 0; i < m_spriteram.bytes() ; i += 8)
{
int y = 240 - m_spriteram[i+1];
int code = (m_spriteram[i+3] & 0x3f) + (m_spriteram[i+2] << 6);
int x = m_spriteram[i+5] + (m_spriteram[i+6] << 8);
int attr = m_spriteram[i+7];
int flipx = 0;
int flipy = 0;
x -= 0x4a/2;
if (flip_screen())
{
y = 240 - y;
flipx = !flipx;
flipy = !flipy;
}
m_gfxdecode->gfx(0)->transpen(bitmap,cliprect,
code,
attr & 0x0f,
flipx,flipy,
x,y,15 );
}
}
/***************************************************************************
Screen Drawing
***************************************************************************/
uint32_t clshroad_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int scrollx = m_vregs[ 0 ] + (m_vregs[ 1 ] << 8);
// int priority = m_vregs[ 2 ];
/* Only horizontal scrolling (these 2 layers use the same value) */
m_tilemap_0a->set_scrollx(0, scrollx);
m_tilemap_0b->set_scrollx(0, scrollx);
m_tilemap_0a->draw(screen, bitmap, cliprect, 0,0); // Opaque
m_tilemap_0b->draw(screen, bitmap, cliprect, 0,0);
draw_sprites(bitmap,cliprect);
m_tilemap_1->draw(screen, bitmap, cliprect, 0,0);
return 0;
}

View File

@ -1,5 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:Carlos A. Lozano
/***************************************************************************
Cop 01 (c) 1985 Nichibutsu
@ -8,9 +9,9 @@ Mighty Guy (c) 1986 Nichibutsu
driver by Carlos A. Lozano <calb@gsyc.inf.uc3m.es>
TODO:
- Fix priority kludge (see video/cop01.c)
- Fix priority kludge
- Inaccurate 1412M2 protection chip emulation in mightguy, used by the sound CPU.
This is probably an extra CPU (program rom is the ic2 one), presumably
This is probably an extra CPU (program ROM is the ic2 one), presumably
with data / address line scrambling
- Some sound problems remaining, not just 1412M2, but see also MT7949
@ -54,21 +55,310 @@ Mighty Guy board layout:
***************************************************************************/
#include "emu.h"
#include "cop01.h"
#include "nb1412m2.h"
#include "cpu/z80/z80.h"
#include "machine/gen_latch.h"
#include "sound/ay8910.h"
#include "sound/dac.h"
#include "sound/ymopl.h"
#include "emupal.h"
#include "screen.h"
#include "speaker.h"
#include "sound/dac.h"
#include "tilemap.h"
namespace {
#define MIGHTGUY_HACK 0
#define TIMER_RATE 11475 /* unknown, hand-tuned to match audio reference */
#define MAINCPU_CLOCK XTAL(12'000'000)
#define AUDIOCPU_CLOCK XTAL(8'000'000)
class cop01_state : public driver_device
{
public:
cop01_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_audiocpu(*this, "audiocpu"),
m_bgvideoram(*this, "bgvideoram"),
m_spriteram(*this, "spriteram"),
m_fgvideoram(*this, "fgvideoram"),
m_maincpu(*this, "maincpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_soundlatch(*this, "soundlatch")
{ }
void init_mightguy();
void cop01(machine_config &config);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
required_device<cpu_device> m_audiocpu;
uint8_t sound_command_r();
private:
// memory pointers
required_shared_ptr<uint8_t> m_bgvideoram;
required_shared_ptr<uint8_t> m_spriteram;
required_shared_ptr<uint8_t> m_fgvideoram;
// video-related
tilemap_t *m_bg_tilemap = nullptr;
tilemap_t *m_fg_tilemap = nullptr;
uint8_t m_vreg[4]{};
// sound-related
uint8_t m_pulse = 0;
static constexpr int TIMER_RATE = 11475; // unknown, hand-tuned to match audio reference
// devices
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<generic_latch_8_device> m_soundlatch;
void irq_ack_w(uint8_t data);
uint8_t sound_irq_ack_w();
void background_w(offs_t offset, uint8_t data);
void foreground_w(offs_t offset, uint8_t data);
void vreg_w(offs_t offset, uint8_t data);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
void palette(palette_device &palette) const;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
void audio_io_map(address_map &map);
void main_map(address_map &map);
void io_map(address_map &map);
void sound_map(address_map &map);
};
class mightguy_state : public cop01_state
{
public:
mightguy_state(const machine_config &mconfig, device_type type, const char *tag) :
cop01_state(mconfig, type, tag),
m_prot(*this, "prot_chip"),
m_fake(*this, "FAKE")
{ }
void mightguy(machine_config &config);
template <int Mask> DECLARE_READ_LINE_MEMBER(area_r);
private:
void audio_io_map(address_map &map);
required_device<nb1412m2_device> m_prot;
required_ioport m_fake;
};
// video
void cop01_state::palette(palette_device &palette) const
{
const uint8_t *color_prom = memregion("proms")->base();
// create a lookup table for the palette
for (int i = 0; i < 0x100; i++)
{
int const r = pal4bit(color_prom[i + 0x000]);
int const g = pal4bit(color_prom[i + 0x100]);
int const b = pal4bit(color_prom[i + 0x200]);
palette.set_indirect_color(i, rgb_t(r, g, b));
}
// color_prom now points to the beginning of the lookup table
color_prom += 0x300;
// characters use colors 0x00-0x0f (or 0x00-0x7f, but the eight rows are identical)
for (int i = 0; i < 0x10; i++)
palette.set_pen_indirect(i, i);
// background tiles use colors 0xc0-0xff
// I don't know how much of the lookup table PROM is hooked up,
// I'm only using the first 32 bytes because the rest is empty.
for (int i = 0; i < 0x80; i++)
{
uint8_t const ctabentry = 0xc0 | (i & 0x30) | (color_prom[((i & 0x40) >> 2) | (i & 0x0f)] & 0x0f);
palette.set_pen_indirect(i + 0x10, ctabentry);
}
// sprites use colors 0x80-0x8f (or 0x80-0xbf, but the four rows are identical)
for (int i = 0; i < 0x100; i++)
{
uint8_t ctabentry = 0x80 | (color_prom[i + 0x100] & 0x0f);
palette.set_pen_indirect(i + 0x90, ctabentry);
}
}
/***************************************************************************
Callbacks for the TileMap code
***************************************************************************/
TILE_GET_INFO_MEMBER(cop01_state::get_bg_tile_info)
{
int const tile = m_bgvideoram[tile_index];
int const attr = m_bgvideoram[tile_index + 0x800];
int pri = (attr & 0x80) >> 7;
/* kludge: priority is not actually pen based, but color based. Since the
* game uses a lookup table, the two are not the same thing.
* Palette entries with bits 2&3 set have priority over sprites.
* tilemap.cpp can't handle that yet, so I'm cheating, because I know that
* color codes using the second row of the lookup table don't use palette
* entries 12-15.
* The only place where this has any effect is the beach at the bottom of
* the screen right at the beginning of mightguy. cop01 doesn't seem to
* use priority at all.
*/
if (attr & 0x10)
pri = 0;
tileinfo.set(1, tile + ((attr & 0x03) << 8), (attr & 0x1c) >> 2, 0);
tileinfo.group = pri;
}
TILE_GET_INFO_MEMBER(cop01_state::get_fg_tile_info)
{
int const tile = m_fgvideoram[tile_index];
tileinfo.set(0, tile, 0, 0);
}
/***************************************************************************
Start the video hardware emulation.
***************************************************************************/
void cop01_state::video_start()
{
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cop01_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cop01_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
m_fg_tilemap->set_transparent_pen(15);
// priority doesn't exactly work this way, see above
m_bg_tilemap->set_transmask(0, 0xffff, 0x0000); // split type 0 is totally transparent in front half
m_bg_tilemap->set_transmask(1, 0x0fff, 0xf000); // split type 1 has pens 0-11 transparent in front half
}
/***************************************************************************
Memory handlers
***************************************************************************/
void cop01_state::background_w(offs_t offset, uint8_t data)
{
m_bgvideoram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset & 0x7ff);
}
void cop01_state::foreground_w(offs_t offset, uint8_t data)
{
m_fgvideoram[offset] = data;
m_fg_tilemap->mark_tile_dirty(offset);
}
void cop01_state::vreg_w(offs_t offset, uint8_t data)
{
/* 0x40: --xx---- sprite bank, coin counters, flip screen
* -----x-- flip screen
* ------xx coin counters
* 0x41: xxxxxxxx xscroll
* 0x42: ---xx--- ? matches the bg tile color most of the time, but not
* during level transitions. Maybe sprite palette bank?
* (the four banks in the PROM are identical)
* ------x- unused (xscroll overflow)
* -------x msb xscroll
* 0x43: xxxxxxxx yscroll
*/
m_vreg[offset] = data;
if (offset == 0)
{
machine().bookkeeping().coin_counter_w(0, data & 1);
machine().bookkeeping().coin_counter_w(1, data & 2);
flip_screen_set(data & 4);
}
}
/***************************************************************************
Display refresh
***************************************************************************/
void cop01_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
for (int offs = 0; offs < m_spriteram.bytes(); offs += 4)
{
int code = m_spriteram[offs + 1];
int const attr = m_spriteram[offs + 2];
/* xxxx---- color
* ----xx-- flipy,flipx
* -------x msbx
*/
int const color = attr >> 4;
int flipx = attr & 0x04;
int flipy = attr & 0x08;
int sx = (m_spriteram[offs + 3] - 0x80) + 256 * (attr & 0x01);
int sy = 240 - m_spriteram[offs];
if (flip_screen())
{
sx = 240 - sx;
sy = 240 - sy;
flipx = !flipx;
flipy = !flipy;
}
if (code & 0x80)
code += (m_vreg[0] & 0x30) << 3;
m_gfxdecode->gfx(2)->transpen(bitmap, cliprect,
code,
color,
flipx, flipy,
sx, sy, 0);
}
}
uint32_t cop01_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_bg_tilemap->set_scrollx(0, m_vreg[1] + 256 * (m_vreg[2] & 1));
m_bg_tilemap->set_scrolly(0, m_vreg[3]);
m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 0);
draw_sprites(bitmap, cliprect);
m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 0);
m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
return 0;
}
// machine
/*************************************
*
@ -76,17 +366,11 @@ Mighty Guy board layout:
*
*************************************/
void cop01_state::cop01_sound_command_w(uint8_t data)
{
m_soundlatch->write(data);
m_audiocpu->set_input_line(0, ASSERT_LINE);
}
uint8_t cop01_state::cop01_sound_command_r()
uint8_t cop01_state::sound_command_r()
{
int res = (m_soundlatch->read() & 0x7f) << 1;
/* bit 0 seems to be a timer */
// bit 0 seems to be a timer
if ((m_audiocpu->total_cycles() / TIMER_RATE) & 1)
{
if (m_pulse == 0)
@ -102,19 +386,19 @@ uint8_t cop01_state::cop01_sound_command_r()
template <int Mask>
READ_LINE_MEMBER(cop01_state::mightguy_area_r)
READ_LINE_MEMBER(mightguy_state::area_r)
{
return (ioport("FAKE")->read() & Mask) ? 1 : 0;
return (m_fake->read() & Mask) ? 1 : 0;
}
void cop01_state::cop01_irq_ack_w(uint8_t data)
void cop01_state::irq_ack_w(uint8_t data)
{
m_maincpu->set_input_line(0, CLEAR_LINE );
m_maincpu->set_input_line(0, CLEAR_LINE);
}
uint8_t cop01_state::cop01_sound_irq_ack_w()
uint8_t cop01_state::sound_irq_ack_w()
{
m_audiocpu->set_input_line(0, CLEAR_LINE );
m_audiocpu->set_input_line(0, CLEAR_LINE);
return 0;
}
@ -124,13 +408,13 @@ uint8_t cop01_state::cop01_sound_irq_ack_w()
*
*************************************/
void cop01_state::cop01_map(address_map &map)
void cop01_state::main_map(address_map &map)
{
map(0x0000, 0xbfff).rom();
map(0xc000, 0xcfff).ram(); /* c000-c7ff in cop01 */
map(0xd000, 0xdfff).ram().w(FUNC(cop01_state::cop01_background_w)).share("bgvideoram");
map(0xe000, 0xe0ff).writeonly().share("spriteram");
map(0xf000, 0xf3ff).w(FUNC(cop01_state::cop01_foreground_w)).share("fgvideoram");
map(0xc000, 0xcfff).ram(); // c000-c7ff in cop01
map(0xd000, 0xdfff).ram().w(FUNC(cop01_state::background_w)).share(m_bgvideoram);
map(0xe000, 0xe0ff).writeonly().share(m_spriteram);
map(0xf000, 0xf3ff).w(FUNC(cop01_state::foreground_w)).share(m_fgvideoram);
}
void cop01_state::io_map(address_map &map)
@ -141,28 +425,15 @@ void cop01_state::io_map(address_map &map)
map(0x02, 0x02).portr("SYSTEM");
map(0x03, 0x03).portr("DSW1");
map(0x04, 0x04).portr("DSW2");
map(0x40, 0x43).w(FUNC(cop01_state::cop01_vreg_w));
map(0x44, 0x44).w(FUNC(cop01_state::cop01_sound_command_w));
map(0x45, 0x45).w(FUNC(cop01_state::cop01_irq_ack_w)); /* ? */
}
void mightguy_state::mightguy_io_map(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x00).portr("P1");
map(0x01, 0x01).portr("P2");
map(0x02, 0x02).portr("SYSTEM");
map(0x03, 0x03).portr("DSW1");
map(0x04, 0x04).portr("DSW2");
map(0x40, 0x43).w(FUNC(cop01_state::cop01_vreg_w));
map(0x44, 0x44).w(FUNC(cop01_state::cop01_sound_command_w));
map(0x45, 0x45).w(FUNC(cop01_state::cop01_irq_ack_w)); /* ? */
map(0x40, 0x43).w(FUNC(cop01_state::vreg_w));
map(0x44, 0x44).w(m_soundlatch, FUNC(generic_latch_8_device::write));
map(0x45, 0x45).w(FUNC(cop01_state::irq_ack_w)); // ?
}
void cop01_state::sound_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0x8000).r(FUNC(cop01_state::cop01_sound_irq_ack_w));
map(0x8000, 0x8000).r(FUNC(cop01_state::sound_irq_ack_w));
map(0xc000, 0xc7ff).ram();
}
@ -172,16 +443,16 @@ void cop01_state::audio_io_map(address_map &map)
map(0x00, 0x01).w("ay1", FUNC(ay8910_device::address_data_w));
map(0x02, 0x03).w("ay2", FUNC(ay8910_device::address_data_w));
map(0x04, 0x05).w("ay3", FUNC(ay8910_device::address_data_w));
map(0x06, 0x06).r(FUNC(cop01_state::cop01_sound_command_r));
map(0x06, 0x06).r(FUNC(cop01_state::sound_command_r));
}
void mightguy_state::mightguy_audio_io_map(address_map &map)
void mightguy_state::audio_io_map(address_map &map)
{
map.global_mask(0xff);
map(0x00, 0x01).w("ymsnd", FUNC(ym3526_device::write));
map(0x02, 0x02).w("prot_chip", FUNC(nb1412m2_device::command_w));
map(0x03, 0x03).rw("prot_chip", FUNC(nb1412m2_device::data_r), FUNC(nb1412m2_device::data_w));
map(0x06, 0x06).r(FUNC(cop01_state::cop01_sound_command_r));
map(0x06, 0x06).r(FUNC(mightguy_state::sound_command_r));
}
@ -212,7 +483,7 @@ static INPUT_PORTS_START( cop01 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("SYSTEM") /* TEST, COIN, START */
PORT_START("SYSTEM") // TEST, COIN, START
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
@ -309,7 +580,7 @@ static INPUT_PORTS_START( mightguy )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SERVICE1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) /* same as the service dip switch */
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SERVICE ) // same as the service dip switch
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
@ -332,7 +603,7 @@ static INPUT_PORTS_START( mightguy )
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_SERVICE( 0x40, IP_ACTIVE_LOW )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(cop01_state, mightguy_area_r<0x04>) // "Start Area" - see fake Dip Switch
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(mightguy_state, area_r<0x04>) // "Start Area" - see fake Dip Switch
PORT_START("DSW2")
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_A ) )
@ -350,16 +621,16 @@ static INPUT_PORTS_START( mightguy )
PORT_DIPSETTING( 0x20, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x10, DEF_STR( Hard ) )
PORT_DIPSETTING( 0x00, "Invincibility")
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(cop01_state, mightguy_area_r<0x01>) // "Start Area" - see fake Dip Switch
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(cop01_state, mightguy_area_r<0x02>) // "Start Area" - see fake Dip Switch
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(mightguy_state, area_r<0x01>) // "Start Area" - see fake Dip Switch
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(mightguy_state, area_r<0x02>) // "Start Area" - see fake Dip Switch
PORT_START("FAKE") /* FAKE Dip Switch */
PORT_START("FAKE") // FAKE Dip Switch
PORT_DIPNAME( 0x07, 0x07, "Starting Area" )
PORT_DIPSETTING( 0x07, "1" )
PORT_DIPSETTING( 0x06, "2" )
PORT_DIPSETTING( 0x05, "3" )
PORT_DIPSETTING( 0x04, "4" )
/* Not working due to ingame bug (see above) */
// Not working due to ingame bug (see above)
#if MIGHTGUY_HACK
PORT_DIPSETTING( 0x03, "5" )
PORT_DIPSETTING( 0x02, "6" )
@ -396,9 +667,9 @@ static const gfx_layout spritelayout =
};
static GFXDECODE_START( gfx_cop01 )
GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x4_packed_lsb, 0, 1 )
GFXDECODE_ENTRY( "gfx2", 0, gfx_8x8x4_packed_lsb, 16, 8 )
GFXDECODE_ENTRY( "gfx3", 0, spritelayout, 16+8*16, 16 )
GFXDECODE_ENTRY( "chars", 0, gfx_8x8x4_packed_lsb, 0, 1 )
GFXDECODE_ENTRY( "tiles", 0, gfx_8x8x4_packed_lsb, 16, 8 )
GFXDECODE_ENTRY( "sprites", 0, spritelayout, 16+8*16, 16 )
GFXDECODE_END
@ -412,14 +683,12 @@ GFXDECODE_END
void cop01_state::machine_start()
{
save_item(NAME(m_pulse));
save_item(NAME(m_timer));
save_item(NAME(m_vreg));
}
void cop01_state::machine_reset()
{
m_pulse = 0;
m_timer = 0;
m_vreg[0] = 0;
m_vreg[1] = 0;
m_vreg[2] = 0;
@ -429,9 +698,11 @@ void cop01_state::machine_reset()
void cop01_state::cop01(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, MAINCPU_CLOCK/2); // unknown clock / divider
m_maincpu->set_addrmap(AS_PROGRAM, &cop01_state::cop01_map);
static constexpr XTAL MAINCPU_CLOCK = XTAL(12'000'000);
// basic machine hardware
Z80(config, m_maincpu, MAINCPU_CLOCK / 2); // unknown clock / divider
m_maincpu->set_addrmap(AS_PROGRAM, &cop01_state::main_map);
m_maincpu->set_addrmap(AS_IO, &cop01_state::io_map);
m_maincpu->set_vblank_int("screen", FUNC(cop01_state::irq0_line_assert));
@ -439,22 +710,22 @@ void cop01_state::cop01(machine_config &config)
m_audiocpu->set_addrmap(AS_PROGRAM, &cop01_state::sound_map);
m_audiocpu->set_addrmap(AS_IO, &cop01_state::audio_io_map);
/* video hardware */
// video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_size(32*8, 32*8);
screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
screen.set_screen_update(FUNC(cop01_state::screen_update_cop01));
screen.set_screen_update(FUNC(cop01_state::screen_update));
screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_cop01);
PALETTE(config, m_palette, FUNC(cop01_state::cop01_palette), 16+8*16+16*16, 256);
PALETTE(config, m_palette, FUNC(cop01_state::palette), 16+8*16+16*16, 256);
/* sound hardware */
// sound hardware
SPEAKER(config, "mono").front_center();
GENERIC_LATCH_8(config, m_soundlatch);
GENERIC_LATCH_8(config, m_soundlatch).data_pending_callback().set_inputline(m_audiocpu, 0);
AY8910(config, "ay1", 1250000).add_route(ALL_OUTPUTS, "mono", 0.50); // unknown clock / divider, hand-tuned to match audio reference
AY8910(config, "ay2", 1250000).add_route(ALL_OUTPUTS, "mono", 0.25); // "
@ -463,39 +734,23 @@ void cop01_state::cop01(machine_config &config)
void mightguy_state::mightguy(machine_config &config)
{
/* basic machine hardware */
Z80(config, m_maincpu, MAINCPU_CLOCK/2); // unknown divider
m_maincpu->set_addrmap(AS_PROGRAM, &mightguy_state::cop01_map);
m_maincpu->set_addrmap(AS_IO, &mightguy_state::mightguy_io_map);
m_maincpu->set_vblank_int("screen", FUNC(cop01_state::irq0_line_assert));
cop01(config);
Z80(config, m_audiocpu, AUDIOCPU_CLOCK/2); // unknown divider
m_audiocpu->set_addrmap(AS_PROGRAM, &mightguy_state::sound_map);
m_audiocpu->set_addrmap(AS_IO, &mightguy_state::mightguy_audio_io_map);
static constexpr XTAL AUDIOCPU_CLOCK = XTAL(8'000'000);
NB1412M2(config, m_prot, XTAL(8'000'000)/2); // divided by 2 maybe
m_audiocpu->set_clock(AUDIOCPU_CLOCK / 2); // unknown divider
m_audiocpu->set_addrmap(AS_IO, &mightguy_state::audio_io_map);
NB1412M2(config, m_prot, XTAL(8'000'000) / 2); // divided by 2 maybe
m_prot->dac_callback().set("dac", FUNC(dac_byte_interface::data_w));
/* video hardware */
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_size(32*8, 32*8);
screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
screen.set_screen_update(FUNC(cop01_state::screen_update_cop01));
screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_cop01);
PALETTE(config, m_palette, FUNC(cop01_state::cop01_palette), 16+8*16+16*16, 256);
/* sound hardware */
SPEAKER(config, "mono").front_center();
GENERIC_LATCH_8(config, m_soundlatch);
YM3526(config, "ymsnd", AUDIOCPU_CLOCK/2).add_route(ALL_OUTPUTS, "mono", 1.0); // unknown divider
YM3526(config, "ymsnd", AUDIOCPU_CLOCK / 2).add_route(ALL_OUTPUTS, "mono", 1.0); // unknown divider
DAC_8BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "mono", 0.5); // unknown DAC
config.device_remove("ay1");
config.device_remove("ay2");
config.device_remove("ay3");
}
@ -516,15 +771,15 @@ ROM_START( cop01 )
ROM_LOAD( "cop15.17b", 0x0000, 0x4000, CRC(6a5f08fa) SHA1(8838549502b1a6ac72dd5efd58e0968f8abe338a) )
ROM_LOAD( "cop16.18b", 0x4000, 0x4000, CRC(56bf6946) SHA1(5414d00c6de96cfb5a3e68c35376333df6c525ee) )
ROM_REGION( 0x02000, "gfx1", 0 )
ROM_LOAD( "cop14.15g", 0x00000, 0x2000, CRC(066d1c55) SHA1(017a0576799d39b919e6ca9b4a7f106ed04c0f94) ) /* chars */
ROM_REGION( 0x02000, "chars", 0 )
ROM_LOAD( "cop14.15g", 0x00000, 0x2000, CRC(066d1c55) SHA1(017a0576799d39b919e6ca9b4a7f106ed04c0f94) )
ROM_REGION( 0x08000, "gfx2", 0 )
ROM_LOAD( "cop04.15c", 0x00000, 0x4000, CRC(622d32e6) SHA1(982b585e9a1115bce25c1788999d34423ccb83ab) ) /* tiles */
ROM_REGION( 0x08000, "tiles", 0 )
ROM_LOAD( "cop04.15c", 0x00000, 0x4000, CRC(622d32e6) SHA1(982b585e9a1115bce25c1788999d34423ccb83ab) )
ROM_LOAD( "cop05.16c", 0x04000, 0x4000, CRC(c6ac5a35) SHA1(dab3500981663ee19abac5bfeaaf6a07a3953d75) )
ROM_REGION( 0x10000, "gfx3", 0 )
ROM_LOAD( "cop06.3g", 0x00000, 0x2000, CRC(f1c1f4a5) SHA1(139aa23416e71361fe62ce336e3f0529a21acb81) ) /* sprites */
ROM_REGION( 0x10000, "sprites", 0 )
ROM_LOAD( "cop06.3g", 0x00000, 0x2000, CRC(f1c1f4a5) SHA1(139aa23416e71361fe62ce336e3f0529a21acb81) )
ROM_LOAD( "cop07.5g", 0x02000, 0x2000, CRC(11db7b72) SHA1(47a1223ed3e7b294d7e59c05d119488ef6b3dc7a) )
ROM_LOAD( "cop08.6g", 0x04000, 0x2000, CRC(a63ddda6) SHA1(59aaa1fe0c023c4f0d4cfbdb9ca922182201c145) )
ROM_LOAD( "cop09.8g", 0x06000, 0x2000, CRC(855a2ec3) SHA1(8a54c0ceedeeafd7c1a6a35b4efab28046967951) )
@ -534,12 +789,12 @@ ROM_START( cop01 )
ROM_LOAD( "cop13.8e", 0x0e000, 0x2000, CRC(07c4ea66) SHA1(12665c0fb648fd208805e81d056ab377d65b267a) )
ROM_REGION( 0x0600, "proms", 0 )
ROM_LOAD( "copproma.13d", 0x0000, 0x0100, CRC(97f68a7a) SHA1(010eaca95eeb5caec083bd184ec31e0f433fff8c) ) /* red */
ROM_LOAD( "coppromb.14d", 0x0100, 0x0100, CRC(39a40b4c) SHA1(456b7f97fbd1cb4beb756033ec76a89ffe8de168) ) /* green */
ROM_LOAD( "coppromc.15d", 0x0200, 0x0100, CRC(8181748b) SHA1(0098ae250095b4ac8af1811b4e41d86e3f587c7b) ) /* blue */
ROM_LOAD( "coppromd.19d", 0x0300, 0x0100, CRC(6a63dbb8) SHA1(50f971f173147203cd24dc4fa7f0a27d2179f1cc) ) /* tile lookup table */
ROM_LOAD( "copprome.2e", 0x0400, 0x0100, CRC(214392fa) SHA1(59d235c3e584e7fd484edf5c78c43d2597c1c3a8) ) /* sprite lookup table */
ROM_LOAD( "13b", 0x0500, 0x0100, NO_DUMP ) /* state machine data used for video signals generation (not used in emulation)*/
ROM_LOAD( "copproma.13d", 0x0000, 0x0100, CRC(97f68a7a) SHA1(010eaca95eeb5caec083bd184ec31e0f433fff8c) ) // red
ROM_LOAD( "coppromb.14d", 0x0100, 0x0100, CRC(39a40b4c) SHA1(456b7f97fbd1cb4beb756033ec76a89ffe8de168) ) // green
ROM_LOAD( "coppromc.15d", 0x0200, 0x0100, CRC(8181748b) SHA1(0098ae250095b4ac8af1811b4e41d86e3f587c7b) ) // blue
ROM_LOAD( "coppromd.19d", 0x0300, 0x0100, CRC(6a63dbb8) SHA1(50f971f173147203cd24dc4fa7f0a27d2179f1cc) ) // tile lookup table
ROM_LOAD( "copprome.2e", 0x0400, 0x0100, CRC(214392fa) SHA1(59d235c3e584e7fd484edf5c78c43d2597c1c3a8) ) // sprite lookup table
ROM_LOAD( "13b", 0x0500, 0x0100, NO_DUMP ) // state machine data used for video signals generation (not used in emulation)
ROM_END
ROM_START( cop01a )
@ -552,15 +807,15 @@ ROM_START( cop01a )
ROM_LOAD( "cop01alt.015", 0x0000, 0x4000, CRC(95be9270) SHA1(ffb4786e354c4c6ddce134ae3362da660199fd44) )
ROM_LOAD( "cop01alt.016", 0x4000, 0x4000, CRC(c20bf649) SHA1(a719ad6bf35811957ad32e6f07494bb00f256965) )
ROM_REGION( 0x02000, "gfx1", 0 )
ROM_LOAD( "cop01alt.014", 0x00000, 0x2000, CRC(edd8a474) SHA1(42f0655535f1e10840da383129da69627d67ff8a) ) /* chars */
ROM_REGION( 0x02000, "chars", 0 )
ROM_LOAD( "cop01alt.014", 0x00000, 0x2000, CRC(edd8a474) SHA1(42f0655535f1e10840da383129da69627d67ff8a) )
ROM_REGION( 0x08000, "gfx2", 0 )
ROM_LOAD( "cop04.15c", 0x00000, 0x4000, CRC(622d32e6) SHA1(982b585e9a1115bce25c1788999d34423ccb83ab) ) /* tiles */
ROM_REGION( 0x08000, "tiles", 0 )
ROM_LOAD( "cop04.15c", 0x00000, 0x4000, CRC(622d32e6) SHA1(982b585e9a1115bce25c1788999d34423ccb83ab) )
ROM_LOAD( "cop05.16c", 0x04000, 0x4000, CRC(c6ac5a35) SHA1(dab3500981663ee19abac5bfeaaf6a07a3953d75) )
ROM_REGION( 0x10000, "gfx3", 0 )
ROM_LOAD( "cop01alt.006", 0x00000, 0x2000, CRC(cac7dac8) SHA1(25990ac4614de2ae61d663323bd67acc137bbc4a) ) /* sprites */
ROM_REGION( 0x10000, "sprites", 0 )
ROM_LOAD( "cop01alt.006", 0x00000, 0x2000, CRC(cac7dac8) SHA1(25990ac4614de2ae61d663323bd67acc137bbc4a) )
ROM_LOAD( "cop07.5g", 0x02000, 0x2000, CRC(11db7b72) SHA1(47a1223ed3e7b294d7e59c05d119488ef6b3dc7a) )
ROM_LOAD( "cop08.6g", 0x04000, 0x2000, CRC(a63ddda6) SHA1(59aaa1fe0c023c4f0d4cfbdb9ca922182201c145) )
ROM_LOAD( "cop09.8g", 0x06000, 0x2000, CRC(855a2ec3) SHA1(8a54c0ceedeeafd7c1a6a35b4efab28046967951) )
@ -570,46 +825,46 @@ ROM_START( cop01a )
ROM_LOAD( "cop13.8e", 0x0e000, 0x2000, CRC(07c4ea66) SHA1(12665c0fb648fd208805e81d056ab377d65b267a) )
ROM_REGION( 0x0600, "proms", 0 )
ROM_LOAD( "copproma.13d", 0x0000, 0x0100, CRC(97f68a7a) SHA1(010eaca95eeb5caec083bd184ec31e0f433fff8c) ) /* red */
ROM_LOAD( "coppromb.14d", 0x0100, 0x0100, CRC(39a40b4c) SHA1(456b7f97fbd1cb4beb756033ec76a89ffe8de168) ) /* green */
ROM_LOAD( "coppromc.15d", 0x0200, 0x0100, CRC(8181748b) SHA1(0098ae250095b4ac8af1811b4e41d86e3f587c7b) ) /* blue */
ROM_LOAD( "coppromd.19d", 0x0300, 0x0100, CRC(6a63dbb8) SHA1(50f971f173147203cd24dc4fa7f0a27d2179f1cc) ) /* tile lookup table */
ROM_LOAD( "copprome.2e", 0x0400, 0x0100, CRC(214392fa) SHA1(59d235c3e584e7fd484edf5c78c43d2597c1c3a8) ) /* sprite lookup table */
ROM_LOAD( "13b", 0x0500, 0x0100, NO_DUMP ) /* state machine data used for video signals generation (not used in emulation)*/
ROM_LOAD( "copproma.13d", 0x0000, 0x0100, CRC(97f68a7a) SHA1(010eaca95eeb5caec083bd184ec31e0f433fff8c) ) // red
ROM_LOAD( "coppromb.14d", 0x0100, 0x0100, CRC(39a40b4c) SHA1(456b7f97fbd1cb4beb756033ec76a89ffe8de168) ) // green
ROM_LOAD( "coppromc.15d", 0x0200, 0x0100, CRC(8181748b) SHA1(0098ae250095b4ac8af1811b4e41d86e3f587c7b) ) // blue
ROM_LOAD( "coppromd.19d", 0x0300, 0x0100, CRC(6a63dbb8) SHA1(50f971f173147203cd24dc4fa7f0a27d2179f1cc) ) // tile lookup table
ROM_LOAD( "copprome.2e", 0x0400, 0x0100, CRC(214392fa) SHA1(59d235c3e584e7fd484edf5c78c43d2597c1c3a8) ) // sprite lookup table
ROM_LOAD( "13b", 0x0500, 0x0100, NO_DUMP ) // state machine data used for video signals generation (not used in emulation)
ROM_END
ROM_START( mightguy )
ROM_REGION( 0x60000, "maincpu", 0 ) /* Z80 code (main cpu) */
ROM_REGION( 0x60000, "maincpu", 0 ) // Z80 code
ROM_LOAD( "1.2b", 0x0000, 0x4000,CRC(bc8e4557) SHA1(4304ac1a0e11bad254ad937195f0be6e7186577d) )
ROM_LOAD( "2.4b", 0x4000, 0x4000,CRC(fb73d684) SHA1(d8a4b6fb93b2c3710fc66f92df05c1459e4171c3) )
ROM_LOAD( "3.5b", 0x8000, 0x4000,CRC(b14b6ab8) SHA1(a60059dd54c8cc974334fd879ff0cfd436a7a981) )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* Z80 code (sound cpu) */
ROM_REGION( 0x10000, "audiocpu", 0 ) // Z80 code
ROM_LOAD( "11.15b", 0x0000, 0x4000, CRC(576183ea) SHA1(e3f28e8e8c34ab396d158da122584ed226729c99) )
ROM_REGION( 0x8000, "prot_chip", 0 ) /* 1412M2 protection data, z80 encrypted code presumably */
ROM_REGION( 0x8000, "prot_chip", 0 ) // 1412M2 protection data, Z80 encrypted code presumably
ROM_LOAD( "10.ic2", 0x0000, 0x8000, CRC(1a5d2bb1) SHA1(0fd4636133a980ba9ffa076f9010474586d37635) )
ROM_REGION( 0x02000, "gfx1", 0 ) /* alpha */
ROM_REGION( 0x02000, "chars", 0 )
ROM_LOAD( "10.15g", 0x0000, 0x2000, CRC(17874300) SHA1(f97bee0ab491b04fe4950ebe9587031db6c815a3) )
ROM_REGION( 0x08000, "gfx2", 0 ) /* tiles */
ROM_REGION( 0x08000, "tiles", 0 )
ROM_LOAD( "4.15c", 0x0000, 0x4000,CRC(84d29e76) SHA1(98e6c6e4a95471c5bef9fcb85a663b86eeda6b6d) )
ROM_LOAD( "5.16c", 0x4000, 0x4000,CRC(f7bb8d82) SHA1(6ab6585827482fd23c3be129977a4443623d831c) )
ROM_REGION( 0x14000, "gfx3", 0 ) /* sprites */
ROM_REGION( 0x14000, "sprites", 0 )
ROM_LOAD( "6.3g", 0x00000, 0x2000, CRC(6ff88615) SHA1(8bfeab97bd1a14861e3a7538c0dd3c073adf29aa) )
ROM_LOAD( "7.8g", 0x02000, 0x8000, CRC(e79ea66f) SHA1(2db80eef5375294bf9c7819f4090ec71f7f2be25) )
ROM_LOAD( "8.3e", 0x0a000, 0x2000, CRC(29f6eb44) SHA1(d7957c8579d7d32c52c19d2fe7b90d1c890f29ea) )
ROM_LOAD( "9.8e", 0x0c000, 0x8000, CRC(b9f64c6f) SHA1(82ec6ba689f16fed1141cd32640a8b1f1ab14bdd) )
ROM_REGION( 0x600, "proms", 0 )
ROM_LOAD( "clr.13d", 0x000, 0x100, CRC(c4cf0bdd) SHA1(350842c46a71fb5db43c8823662378f178bbda4f) ) /* red */
ROM_LOAD( "clr.14d", 0x100, 0x100, CRC(5b3b8a9b) SHA1(6b660f5f7b0efdc20a79a9fd5a1eb30c85b27324) ) /* green */
ROM_LOAD( "clr.15d", 0x200, 0x100, CRC(6c072a64) SHA1(5ce5306af478330eb3e94aa7c8bff08f34ba6ea5) ) /* blue */
ROM_LOAD( "clr.19d", 0x300, 0x100, CRC(19b66ac6) SHA1(5e7de11f40685effa077377e7a55d7fecf752508) ) /* tile lookup table */
ROM_LOAD( "2e", 0x400, 0x100, CRC(d9c45126) SHA1(aafebe424afa400ed320f17afc2b910eaada29f5) ) /* sprite lookup table */
ROM_LOAD( "13b", 0x500, 0x100, CRC(4a6f9a6d) SHA1(65f1e0bfacd1f354ece1b18598a551044c27c4d1) ) /* state machine data used for video signals generation (not used in emulation)*/
ROM_LOAD( "clr.13d", 0x000, 0x100, CRC(c4cf0bdd) SHA1(350842c46a71fb5db43c8823662378f178bbda4f) ) // red
ROM_LOAD( "clr.14d", 0x100, 0x100, CRC(5b3b8a9b) SHA1(6b660f5f7b0efdc20a79a9fd5a1eb30c85b27324) ) // green
ROM_LOAD( "clr.15d", 0x200, 0x100, CRC(6c072a64) SHA1(5ce5306af478330eb3e94aa7c8bff08f34ba6ea5) ) // blue
ROM_LOAD( "clr.19d", 0x300, 0x100, CRC(19b66ac6) SHA1(5e7de11f40685effa077377e7a55d7fecf752508) ) // tile lookup table
ROM_LOAD( "2e", 0x400, 0x100, CRC(d9c45126) SHA1(aafebe424afa400ed320f17afc2b910eaada29f5) ) // sprite lookup table
ROM_LOAD( "13b", 0x500, 0x100, CRC(4a6f9a6d) SHA1(65f1e0bfacd1f354ece1b18598a551044c27c4d1) ) // state machine data used for video signals generation (not used in emulation)
ROM_END
@ -624,16 +879,18 @@ void cop01_state::init_mightguy()
#if MIGHTGUY_HACK
/* This is a hack to fix the game code to get a fully working
"Starting Area" fake Dip Switch */
uint8_t *RAM = (uint8_t *)memregion("maincpu")->base();
RAM[0x00e4] = 0x07; // rlca
RAM[0x00e5] = 0x07; // rlca
RAM[0x00e6] = 0x07; // rlca
/* To avoid checksum error */
RAM[0x027f] = 0x00;
RAM[0x0280] = 0x00;
uint8_t *rom = (uint8_t *)memregion("maincpu")->base();
rom[0x00e4] = 0x07; // rlca
rom[0x00e5] = 0x07; // rlca
rom[0x00e6] = 0x07; // rlca
// To avoid checksum error
rom[0x027f] = 0x00;
rom[0x0280] = 0x00;
#endif
}
} // anonymous namespace
/*************************************
*

View File

@ -1,96 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Carlos A. Lozano
/*************************************************************************
Cop 01
*************************************************************************/
#ifndef MAME_NICHIBUTSU_COP01_H
#define MAME_NICHIBUTSU_COP01_H
#pragma once
#include "machine/gen_latch.h"
#include "nb1412m2.h"
#include "emupal.h"
#include "tilemap.h"
class cop01_state : public driver_device
{
public:
cop01_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_bgvideoram(*this, "bgvideoram"),
m_spriteram(*this, "spriteram"),
m_fgvideoram(*this, "fgvideoram"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_soundlatch(*this, "soundlatch")
{ }
void init_mightguy();
void cop01(machine_config &config);
/* memory pointers */
required_shared_ptr<uint8_t> m_bgvideoram;
required_shared_ptr<uint8_t> m_spriteram;
required_shared_ptr<uint8_t> m_fgvideoram;
/* video-related */
tilemap_t *m_bg_tilemap = nullptr;
tilemap_t *m_fg_tilemap = nullptr;
uint8_t m_vreg[4]{};
/* sound-related */
int m_pulse = 0;
int m_timer = 0; // kludge for ym3526 in mightguy
/* devices */
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<generic_latch_8_device> m_soundlatch;
void cop01_sound_command_w(uint8_t data);
uint8_t cop01_sound_command_r();
void cop01_irq_ack_w(uint8_t data);
uint8_t cop01_sound_irq_ack_w();
void cop01_background_w(offs_t offset, uint8_t data);
void cop01_foreground_w(offs_t offset, uint8_t data);
void cop01_vreg_w(offs_t offset, uint8_t data);
template <int Mask> DECLARE_READ_LINE_MEMBER(mightguy_area_r);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
void cop01_palette(palette_device &palette) const;
uint32_t screen_update_cop01(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
void audio_io_map(address_map &map);
void cop01_map(address_map &map);
void io_map(address_map &map);
void sound_map(address_map &map);
};
class mightguy_state : public cop01_state
{
public:
mightguy_state(const machine_config &mconfig, device_type type, const char *tag) :
cop01_state(mconfig, type, tag),
m_prot(*this, "prot_chip")
{ }
void mightguy(machine_config &config);
private:
void mightguy_io_map(address_map &map);
void mightguy_audio_io_map(address_map &map);
required_device<nb1412m2_device> m_prot;
};
#endif // MAME_NICHIBUTSU_COP01_H

View File

@ -1,208 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Carlos A. Lozano
/***************************************************************************
Functions to emulate the video hardware of the machine.
***************************************************************************/
#include "emu.h"
#include "cop01.h"
void cop01_state::cop01_palette(palette_device &palette) const
{
const uint8_t *color_prom = memregion("proms")->base();
// create a lookup table for the palette
for (int i = 0; i < 0x100; i++)
{
int const r = pal4bit(color_prom[i + 0x000]);
int const g = pal4bit(color_prom[i + 0x100]);
int const b = pal4bit(color_prom[i + 0x200]);
palette.set_indirect_color(i, rgb_t(r, g, b));
}
// color_prom now points to the beginning of the lookup table
color_prom += 0x300;
// characters use colors 0x00-0x0f (or 0x00-0x7f, but the eight rows are identical)
for (int i = 0; i < 0x10; i++)
palette.set_pen_indirect(i, i);
// background tiles use colors 0xc0-0xff
// I don't know how much of the lookup table PROM is hooked up,
// I'm only using the first 32 bytes because the rest is empty.
for (int i = 0; i < 0x80; i++)
{
uint8_t const ctabentry = 0xc0 | (i & 0x30) | (color_prom[((i & 0x40) >> 2) | (i & 0x0f)] & 0x0f);
palette.set_pen_indirect(i + 0x10, ctabentry);
}
// sprites use colors 0x80-0x8f (or 0x80-0xbf, but the four rows are identical)
for (int i = 0; i < 0x100; i++)
{
uint8_t ctabentry = 0x80 | (color_prom[i + 0x100] & 0x0f);
palette.set_pen_indirect(i + 0x90, ctabentry);
}
}
/***************************************************************************
Callbacks for the TileMap code
***************************************************************************/
TILE_GET_INFO_MEMBER(cop01_state::get_bg_tile_info)
{
int tile = m_bgvideoram[tile_index];
int attr = m_bgvideoram[tile_index + 0x800];
int pri = (attr & 0x80) >> 7;
/* kludge: priority is not actually pen based, but color based. Since the
* game uses a lookup table, the two are not the same thing.
* Palette entries with bits 2&3 set have priority over sprites.
* tilemap.c can't handle that yet, so I'm cheating, because I know that
* color codes using the second row of the lookup table don't use palette
* entries 12-15.
* The only place where this has any effect is the beach at the bottom of
* the screen right at the beginning of mightguy. cop01 doesn't seem to
* use priority at all.
*/
if (attr & 0x10)
pri = 0;
tileinfo.set(1, tile + ((attr & 0x03) << 8), (attr & 0x1c) >> 2, 0);
tileinfo.group = pri;
}
TILE_GET_INFO_MEMBER(cop01_state::get_fg_tile_info)
{
int tile = m_fgvideoram[tile_index];
tileinfo.set(0, tile, 0, 0);
}
/***************************************************************************
Start the video hardware emulation.
***************************************************************************/
void cop01_state::video_start()
{
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cop01_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cop01_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 32, 32);
m_fg_tilemap->set_transparent_pen(15);
/* priority doesn't exactly work this way, see above */
m_bg_tilemap->set_transmask(0, 0xffff, 0x0000); /* split type 0 is totally transparent in front half */
m_bg_tilemap->set_transmask(1, 0x0fff, 0xf000); /* split type 1 has pens 0-11 transparent in front half */
}
/***************************************************************************
Memory handlers
***************************************************************************/
void cop01_state::cop01_background_w(offs_t offset, uint8_t data)
{
m_bgvideoram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset & 0x7ff);
}
void cop01_state::cop01_foreground_w(offs_t offset, uint8_t data)
{
m_fgvideoram[offset] = data;
m_fg_tilemap->mark_tile_dirty(offset);
}
void cop01_state::cop01_vreg_w(offs_t offset, uint8_t data)
{
/* 0x40: --xx---- sprite bank, coin counters, flip screen
* -----x-- flip screen
* ------xx coin counters
* 0x41: xxxxxxxx xscroll
* 0x42: ---xx--- ? matches the bg tile color most of the time, but not
* during level transitions. Maybe sprite palette bank?
* (the four banks in the PROM are identical)
* ------x- unused (xscroll overflow)
* -------x msb xscroll
* 0x43: xxxxxxxx yscroll
*/
m_vreg[offset] = data;
if (offset == 0)
{
machine().bookkeeping().coin_counter_w(0, data & 1);
machine().bookkeeping().coin_counter_w(1, data & 2);
flip_screen_set(data & 4);
}
}
/***************************************************************************
Display refresh
***************************************************************************/
void cop01_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
{
int offs, code, attr, sx, sy, flipx, flipy, color;
for (offs = 0; offs < m_spriteram.bytes(); offs += 4)
{
code = m_spriteram[offs + 1];
attr = m_spriteram[offs + 2];
/* xxxx---- color
* ----xx-- flipy,flipx
* -------x msbx
*/
color = attr>>4;
flipx = attr & 0x04;
flipy = attr & 0x08;
sx = (m_spriteram[offs + 3] - 0x80) + 256 * (attr & 0x01);
sy = 240 - m_spriteram[offs];
if (flip_screen())
{
sx = 240 - sx;
sy = 240 - sy;
flipx = !flipx;
flipy = !flipy;
}
if (code & 0x80)
code += (m_vreg[0] & 0x30) << 3;
m_gfxdecode->gfx(2)->transpen(bitmap,cliprect,
code,
color,
flipx,flipy,
sx,sy,0 );
}
}
uint32_t cop01_state::screen_update_cop01(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_bg_tilemap->set_scrollx(0, m_vreg[1] + 256 * (m_vreg[2] & 1));
m_bg_tilemap->set_scrolly(0, m_vreg[3]);
m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 0);
draw_sprites(bitmap, cliprect);
m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER0, 0);
m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0 );
return 0;
}

View File

@ -1,5 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:Takahiro Nogi
/***************************************************************************
MAGMAX
@ -19,21 +20,322 @@ Stephh's notes (based on the game M68000 code and some tests) :
if you have EXACTLY 10 credits after you pressed any START button
(which means that you need to have 11 credits if you choose a 1 player game
or 12 credits if you choose a 2 players game).
When activated, you are giving infinite lives (in fact 0x60 = 60 lives)
When activated, you are given infinite lives (in fact 0x60 = 60 lives)
for both players, you can still lose parts of the ship but not the main ship.
See code at 0x0001e6 (ships given at start) and 0x0044e6 (other stuff).
***************************************************************************/
#include "emu.h"
#include "magmax.h"
#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
#include "machine/gen_latch.h"
#include "machine/rescap.h"
#include "sound/ay8910.h"
#include "sound/flt_biquad.h"
#include "sound/mixer.h"
#include "emupal.h"
#include "screen.h"
#include "speaker.h"
// configurable logging
#define LOG_GAINCTRL (1U << 1)
//#define VERBOSE (LOG_GENERAL | LOG_GAINCTRL)
#include "logmacro.h"
#define LOGGAINCTRL(...) LOGMASKED(LOG_GAINCTRL, __VA_ARGS__)
namespace {
class magmax_state : public driver_device
{
public:
magmax_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_videoram(*this, "videoram")
, m_spriteram(*this, "spriteram")
, m_vreg(*this, "vreg")
, m_scroll_x(*this, "scroll_x")
, m_scroll_y(*this, "scroll_y")
, m_rom18b(*this, "user1")
, m_maincpu(*this, "maincpu")
, m_audiocpu(*this, "audiocpu")
, m_ay(*this, "ay%u", 0U)
, m_aymixer(*this, "aymixer%u", 0U)
, m_ayfilter(*this, "ayfilter%u", 0U)
, m_soundlatch(*this, "soundlatch")
, m_gfxdecode(*this, "gfxdecode")
, m_screen(*this, "screen")
, m_palette(*this, "palette")
{ }
void magmax(machine_config &config);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
private:
required_shared_ptr<uint16_t> m_videoram;
required_shared_ptr<uint16_t> m_spriteram;
required_shared_ptr<uint16_t> m_vreg;
required_shared_ptr<uint16_t> m_scroll_x;
required_shared_ptr<uint16_t> m_scroll_y;
required_region_ptr<uint8_t> m_rom18b;
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device_array<ay8910_device, 3> m_ay;
required_device_array<mixer_device, 3> m_aymixer;
required_device_array<filter_biquad_device, 4> m_ayfilter;
required_device<generic_latch_8_device> m_soundlatch;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
uint8_t m_ls74_clr = 0;
uint8_t m_ls74_q = 0;
uint8_t m_gain_control = 0;
emu_timer *m_interrupt_timer = nullptr;
uint8_t m_flipscreen = 0;
std::unique_ptr<uint32_t[]> m_prom_tab;
bitmap_ind16 m_bitmap;
void cpu_irq_ack_w(uint16_t data);
uint8_t sound_r();
void vreg_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
void ay8910_portb_0_w(uint8_t data);
void ay8910_porta_0_w(uint8_t data);
void palette(palette_device &palette) const;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_CALLBACK_MEMBER(scanline_callback);
void main_map(address_map &map);
void sound_io_map(address_map &map);
void sound_map(address_map &map);
};
// video
/***************************************************************************
Convert the color PROMs into a more useable format.
Mag Max has three 256x4 palette PROMs (one per gun), connected to the
RGB output this way:
bit 3 -- 220 ohm resistor -- RED/GREEN/BLUE
-- 470 ohm resistor -- RED/GREEN/BLUE
-- 1 kohm resistor -- RED/GREEN/BLUE
bit 0 -- 2.2kohm resistor -- RED/GREEN/BLUE
***************************************************************************/
void magmax_state::palette(palette_device &palette) const
{
const uint8_t *color_prom = memregion("proms")->base();
// create a lookup table for the palette
for (int i = 0; i < 0x100; i++)
{
int const r = pal4bit(color_prom[i + 0x000]);
int const g = pal4bit(color_prom[i + 0x100]);
int const b = pal4bit(color_prom[i + 0x200]);
palette.set_indirect_color(i, rgb_t(r, g, b));
}
// color_prom now points to the beginning of the lookup table
color_prom += 0x300;
// characters use colors 0-0x0f
for (int i = 0; i < 0x10; i++)
palette.set_pen_indirect(i, i);
// sprites use colors 0x10-0x1f, color 0x1f being transparent
for (int i = 0; i < 0x100; i++)
{
uint8_t const ctabentry = (color_prom[i] & 0x0f) | 0x10;
palette.set_pen_indirect(i + 0x10, ctabentry);
}
// background uses all colors (no lookup table)
for (int i = 0; i < 0x100; i++)
palette.set_pen_indirect(i + 0x110, i);
}
void magmax_state::video_start()
{
uint8_t * prom14d = memregion("user2")->base();
// Set up save state
save_item(NAME(m_flipscreen));
m_prom_tab = std::make_unique<uint32_t[]>(256);
m_screen->register_screen_bitmap(m_bitmap);
// Allocate temporary bitmap
for (int i = 0; i < 256; i++)
{
int const v = (prom14d[i] << 4) + prom14d[i + 0x100];
m_prom_tab[i] = ((v & 0x1f) << 8) | ((v & 0x10) << 10) | ((v & 0xe0) >> 1); // convert data into more useful format
}
}
uint32_t magmax_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
// bit 2 flip screen
m_flipscreen = *m_vreg & 0x04;
// copy the background graphics
if (*m_vreg & 0x40) // background disable
bitmap.fill(0, cliprect);
else
{
uint32_t const scroll_h = (*m_scroll_x) & 0x3fff;
uint32_t const scroll_v = (*m_scroll_y) & 0xff;
// clear background-over-sprites bitmap
m_bitmap.fill(0);
for (int v = 2 * 8; v < 30 * 8; v++) // only for visible area
{
uint16_t line_data[256];
uint32_t const map_v_scr_100 = (scroll_v + v) & 0x100;
uint32_t rom18d_addr = ((scroll_v + v) & 0xf8) + (map_v_scr_100 << 5);
uint32_t rom15f_addr = (((scroll_v + v) & 0x07) << 2) + (map_v_scr_100 << 5);
uint32_t const map_v_scr_1fe_6 =((scroll_v + v) & 0x1fe) << 6;
pen_t pen_base = 0x110 + 0x20 + (map_v_scr_100 >> 1);
for (int h = 0; h < 0x100; h++)
{
uint32_t ls283 = scroll_h + h;
if (!map_v_scr_100)
{
if (h & 0x80)
ls283 = ls283 + (m_rom18b[map_v_scr_1fe_6 + (h ^ 0xff)] ^ 0xff);
else
ls283 = ls283 + m_rom18b[map_v_scr_1fe_6 + h] + 0xff01;
}
uint32_t const prom_data = m_prom_tab[(ls283 >> 6) & 0xff];
rom18d_addr &= 0x20f8;
rom18d_addr += (prom_data & 0x1f00) + ((ls283 & 0x38) >>3);
rom15f_addr &= 0x201c;
rom15f_addr += (m_rom18b[0x4000 + rom18d_addr]<<5) + ((ls283 & 0x6)>>1);
rom15f_addr += (prom_data & 0x4000);
uint32_t const graph_color = (prom_data & 0x0070);
uint32_t graph_data = m_rom18b[0x8000 + rom15f_addr];
if ((ls283 & 1))
graph_data >>= 4;
graph_data &= 0x0f;
line_data[h] = pen_base + graph_color + graph_data;
// priority: background over sprites
if (map_v_scr_100 && ((graph_data & 0x0c)==0x0c))
m_bitmap.pix(v, h) = line_data[h];
}
if (m_flipscreen)
{
uint16_t line_data_flip_x[256];
for (int i = 0; i < 256; i++)
line_data_flip_x[i] = line_data[255 - i];
draw_scanline16(bitmap, 0, 255 - v, 256, line_data_flip_x, nullptr);
}
else
draw_scanline16(bitmap, 0, v, 256, line_data, nullptr);
}
}
// draw the sprites
for (int offs = 0; offs < m_spriteram.bytes() / 2; offs += 4)
{
int sy = m_spriteram[offs] & 0xff;
if (sy)
{
int code = m_spriteram[offs + 1] & 0xff;
int const attr = m_spriteram[offs + 2] & 0xff;
int const color = (attr & 0xf0) >> 4;
int flipx = attr & 0x04;
int flipy = attr & 0x08;
int sx = (m_spriteram[offs + 3] & 0xff) - 0x80 + 0x100 * (attr & 0x01);
sy = 239 - sy;
if (m_flipscreen)
{
sx = 255 - 16 - sx;
sy = 239 - sy;
flipx = !flipx;
flipy = !flipy;
}
if (code & 0x80) // sprite bankswitch
code += (*m_vreg & 0x30) * 0x8;
m_gfxdecode->gfx(1)->transmask(bitmap, cliprect,
code,
color,
flipx, flipy,
sx, sy,
m_palette->transpen_mask(*m_gfxdecode->gfx(1), color, 0x1f));
}
}
if (!(*m_vreg & 0x40)) // background disable
copybitmap_trans(bitmap, m_bitmap, m_flipscreen, m_flipscreen, 0, 0, cliprect, 0);
// draw the foreground characters
for (int offs = 32 * 32 - 1; offs >= 0; offs -= 1)
{
//int const page = (*m_vreg >> 3) & 0x1;
int const code = m_videoram[offs /*+ page*/] & 0xff;
if (code)
{
int sx = (offs % 32);
int sy = (offs / 32);
if (m_flipscreen)
{
sx = 31 - sx;
sy = 31 - sy;
}
m_gfxdecode->gfx(0)->transpen(bitmap, cliprect,
code,
0,
m_flipscreen, m_flipscreen,
8 * sx, 8 * sy, 0x0f);
}
}
return 0;
}
// machine
void magmax_state::cpu_irq_ack_w(uint16_t data)
{
m_maincpu->set_input_line(M68K_IRQ_1, CLEAR_LINE);
@ -41,15 +343,15 @@ void magmax_state::cpu_irq_ack_w(uint16_t data)
uint8_t magmax_state::sound_r()
{
return (m_soundlatch->read() << 1) | m_LS74_q;
return (m_soundlatch->read() << 1) | m_ls74_q;
}
void magmax_state::ay8910_portB_0_w(uint8_t data)
void magmax_state::ay8910_portb_0_w(uint8_t data)
{
// bit 0 is input to CLR line of the LS74
m_LS74_clr = data & 1;
if (m_LS74_clr == 0)
m_LS74_q = 0;
m_ls74_clr = data & 1;
if (m_ls74_clr == 0)
m_ls74_q = 0;
}
TIMER_CALLBACK_MEMBER(magmax_state::scanline_callback)
@ -58,8 +360,8 @@ TIMER_CALLBACK_MEMBER(magmax_state::scanline_callback)
/* bit 0 goes hi whenever line V6 from video part goes lo->hi
that is when scanline is 64 and 192 accordingly */
if (m_LS74_clr != 0)
m_LS74_q = 1;
if (m_ls74_clr != 0)
m_ls74_q = 1;
scanline += 128;
scanline &= 255;
@ -73,28 +375,19 @@ void magmax_state::machine_start()
m_interrupt_timer = timer_alloc(FUNC(magmax_state::scanline_callback), this);
// Set up save state
save_item(NAME(m_sound_latch));
save_item(NAME(m_LS74_clr));
save_item(NAME(m_LS74_q));
save_item(NAME(m_ls74_clr));
save_item(NAME(m_ls74_q));
save_item(NAME(m_gain_control));
}
void magmax_state::machine_reset()
{
m_interrupt_timer->adjust(m_screen->time_until_pos(64), 64);
#if 0
{
int i;
for (i=0; i<9; i++)
logerror("SOUND Chan#%i name=%s\n", i, mixer_get_name(i) );
}
#endif
}
void magmax_state::ay8910_portA_0_w(uint8_t data)
void magmax_state::ay8910_porta_0_w(uint8_t data)
{
/*There are three AY8910 chips and four(!) separate amplifiers on the board
* Each of AY channels is hardware mapped in following way:
@ -145,15 +438,15 @@ bit3 - SOUND Chan#8 name=AY-3-8910 #2 Ch C
m_gain_control = data & 0x0f;
// popmessage("gain_ctrl = %2x",data&0x0f);
LOGGAINCTRL("gain_ctrl = %2x", data & 0x0f);
const double mix_resistors[4] = { RES_K(1.0), RES_K(2.2), RES_K(10.0), RES_K(10.0) }; // R35, R33, R32, R34
for (int i = 0; i < 4; i++)
{
// RES_K(5) == (1.0 / ((1.0 / RES_K(10)) + (1.0 / RES_K(10)))) because of the optional extra 10k in parallel in each inverting amplifier circuit
// the total max number of output gain 'units' of all 4 inputs is 10 + 10/2.2 + 1 + 1 = 16.545454, so we divide the gain amount by this number so we don't clip
m_ayfilter[i]->set_output_gain(0, (-1.0 * ( ((m_gain_control & (1<<i)) ? RES_K(10) : RES_K(5)) / mix_resistors[i] )) / 16.545454);
//m_ayfilter[i]->set_output_gain(0, (m_gain_control & (1<<i)) ? 1.0 : 0.5);
m_ayfilter[i]->set_output_gain(0, (-1.0 * (((m_gain_control & (1 << i)) ? RES_K(10) : RES_K(5)) / mix_resistors[i] )) / 16.545454);
//m_ayfilter[i]->set_output_gain(0, (m_gain_control & (1 << i)) ? 1.0 : 0.5);
}
}
@ -283,17 +576,6 @@ static INPUT_PORTS_START( magmax )
INPUT_PORTS_END
static const gfx_layout charlayout =
{
8, 8, // 8*8 characters
256, // 256 characters
4, // 4 bits per pixel
{ 0, 1, 2, 3 },
{ 4, 0, 12, 8, 20, 16, 28, 24 },
{ 0*32, 1*32, 2*32, 3*32, 4*32, 5*32, 6*32, 7*32 },
32*8
};
static const gfx_layout spritelayout =
{
16, 16, // 16*16 characters
@ -307,20 +589,21 @@ static const gfx_layout spritelayout =
64*8
};
static GFXDECODE_START( gfx_magmax )
GFXDECODE_ENTRY( "chars", 0, charlayout, 0, 1 ) // no color codes
GFXDECODE_ENTRY( "sprites", 0, spritelayout, 1*16, 16 ) // 16 color codes
GFXDECODE_ENTRY( "chars", 0, gfx_8x8x4_packed_lsb, 0, 1 ) // no color codes
GFXDECODE_ENTRY( "sprites", 0, spritelayout, 1*16, 16 ) // 16 color codes
GFXDECODE_END
void magmax_state::magmax(machine_config &config)
{
// basic machine hardware
M68000(config, m_maincpu, XTAL(16'000'000)/2); // verified on PCB
M68000(config, m_maincpu, XTAL(16'000'000) / 2); // verified on PCB
m_maincpu->set_addrmap(AS_PROGRAM, &magmax_state::main_map);
m_maincpu->set_vblank_int("screen", FUNC(magmax_state::irq1_line_assert));
Z80(config, m_audiocpu, XTAL(20'000'000)/8); // verified on PCB
Z80(config, m_audiocpu, XTAL(20'000'000) / 8); // verified on PCB
m_audiocpu->set_addrmap(AS_PROGRAM, &magmax_state::sound_map);
m_audiocpu->set_addrmap(AS_IO, &magmax_state::sound_io_map);
@ -354,19 +637,19 @@ void magmax_state::magmax(machine_config &config)
MIXER(config, m_aymixer[1]).add_route(0, m_ayfilter[2], 1.0);
MIXER(config, m_aymixer[2]).add_route(0, m_ayfilter[3], 1.0);
AY8910(config, m_ay[0], XTAL(20'000'000)/16); // @20G verified on PCB and schematics
m_ay[0]->port_a_write_callback().set(FUNC(magmax_state::ay8910_portA_0_w));
m_ay[0]->port_b_write_callback().set(FUNC(magmax_state::ay8910_portB_0_w));
AY8910(config, m_ay[0], XTAL(20'000'000) / 16); // @20G verified on PCB and schematics
m_ay[0]->port_a_write_callback().set(FUNC(magmax_state::ay8910_porta_0_w));
m_ay[0]->port_b_write_callback().set(FUNC(magmax_state::ay8910_portb_0_w));
m_ay[0]->add_route(0, m_ayfilter[0], 1.0);
m_ay[0]->add_route(1, m_aymixer[0], 1.0);
m_ay[0]->add_route(2, m_aymixer[0], 1.0);
AY8910(config, m_ay[1], XTAL(20'000'000)/16); // @18G verified on PCB and schematics
AY8910(config, m_ay[1], XTAL(20'000'000) / 16); // @18G verified on PCB and schematics
m_ay[1]->add_route(0, m_aymixer[0], 1.0);
m_ay[1]->add_route(1, m_aymixer[0], 1.0);
m_ay[1]->add_route(2, m_aymixer[1], 1.0);
AY8910(config, m_ay[2], XTAL(20'000'000)/16); // @16G verified on PCB and schematics
AY8910(config, m_ay[2], XTAL(20'000'000) / 16); // @16G verified on PCB and schematics
m_ay[2]->add_route(0, m_aymixer[1], 1.0);
m_ay[2]->add_route(1, m_aymixer[2], 1.0);
m_ay[2]->add_route(2, m_aymixer[2], 1.0);
@ -474,6 +757,8 @@ ROM_START( magmaxa )
ROM_LOAD( "mag_f.13b", 0x0400, 0x0100, CRC(4a6f9a6d) SHA1(65f1e0bfacd1f354ece1b18598a551044c27c4d1) ) // state machine data used for video signals generation (not used in emulation)
ROM_END
} // anonymous namespace
GAME( 1985, magmax, 0, magmax, magmax, magmax_state, empty_init, ROT0, "Nichibutsu", "Mag Max (set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, magmaxa, magmax, magmax, magmax, magmax_state, empty_init, ROT0, "Nichibutsu", "Mag Max (set 2)", MACHINE_SUPPORTS_SAVE )

View File

@ -1,85 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Takahiro Nogi
#ifndef MAME_NICHIBUTSU_MAGMAX_H
#define MAME_NICHIBUTSU_MAGMAX_H
#pragma once
#include "screen.h"
#include "machine/gen_latch.h"
#include "sound/ay8910.h"
#include "sound/flt_biquad.h"
#include "sound/mixer.h"
#include "emupal.h"
class magmax_state : public driver_device
{
public:
magmax_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_videoram(*this, "videoram")
, m_spriteram(*this, "spriteram")
, m_vreg(*this, "vreg")
, m_scroll_x(*this, "scroll_x")
, m_scroll_y(*this, "scroll_y")
, m_rom18B(*this, "user1")
, m_maincpu(*this, "maincpu")
, m_audiocpu(*this, "audiocpu")
, m_ay(*this, "ay%u", 0U)
, m_aymixer(*this, "aymixer%u", 0U)
, m_ayfilter(*this, "ayfilter%u", 0U)
, m_soundlatch(*this, "soundlatch")
, m_gfxdecode(*this, "gfxdecode")
, m_screen(*this, "screen")
, m_palette(*this, "palette")
{ }
void magmax(machine_config &config);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
private:
required_shared_ptr<uint16_t> m_videoram;
required_shared_ptr<uint16_t> m_spriteram;
required_shared_ptr<uint16_t> m_vreg;
required_shared_ptr<uint16_t> m_scroll_x;
required_shared_ptr<uint16_t> m_scroll_y;
required_region_ptr<uint8_t> m_rom18B;
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
required_device_array<ay8910_device, 3> m_ay;
required_device_array<mixer_device, 3> m_aymixer;
required_device_array<filter_biquad_device, 4> m_ayfilter;
required_device<generic_latch_8_device> m_soundlatch;
required_device<gfxdecode_device> m_gfxdecode;
required_device<screen_device> m_screen;
required_device<palette_device> m_palette;
uint8_t m_sound_latch = 0;
uint8_t m_LS74_clr = 0;
uint8_t m_LS74_q = 0;
uint8_t m_gain_control = 0;
emu_timer *m_interrupt_timer = nullptr;
uint8_t m_flipscreen = 0;
std::unique_ptr<uint32_t[]> m_prom_tab;
bitmap_ind16 m_bitmap;
void cpu_irq_ack_w(uint16_t data);
uint8_t sound_r();
void vreg_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0);
void ay8910_portB_0_w(uint8_t data);
void ay8910_portA_0_w(uint8_t data);
void palette(palette_device &palette) const;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
TIMER_CALLBACK_MEMBER(scanline_callback);
void main_map(address_map &map);
void sound_io_map(address_map &map);
void sound_map(address_map &map);
};
#endif // MAME_NICHIBUTSU_MAGMAX_H

View File

@ -1,222 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Takahiro Nogi
/***************************************************************************
Video Hardware for MAGMAX.
Driver by Takahiro Nogi 1999/11/05 -
Additional tweaking by Jarek Burczynski
***************************************************************************/
#include "emu.h"
#include "magmax.h"
/***************************************************************************
Convert the color PROMs into a more useable format.
Mag Max has three 256x4 palette PROMs (one per gun), connected to the
RGB output this way:
bit 3 -- 220 ohm resistor -- RED/GREEN/BLUE
-- 470 ohm resistor -- RED/GREEN/BLUE
-- 1 kohm resistor -- RED/GREEN/BLUE
bit 0 -- 2.2kohm resistor -- RED/GREEN/BLUE
***************************************************************************/
void magmax_state::palette(palette_device &palette) const
{
const uint8_t *color_prom = memregion("proms")->base();
// create a lookup table for the palette
for (int i = 0; i < 0x100; i++)
{
int const r = pal4bit(color_prom[i + 0x000]);
int const g = pal4bit(color_prom[i + 0x100]);
int const b = pal4bit(color_prom[i + 0x200]);
palette.set_indirect_color(i, rgb_t(r, g, b));
}
// color_prom now points to the beginning of the lookup table
color_prom += 0x300;
// characters use colors 0-0x0f
for (int i = 0; i < 0x10; i++)
palette.set_pen_indirect(i, i);
// sprites use colors 0x10-0x1f, color 0x1f being transparent
for (int i = 0; i < 0x100; i++)
{
uint8_t const ctabentry = (color_prom[i] & 0x0f) | 0x10;
palette.set_pen_indirect(i + 0x10, ctabentry);
}
// background uses all colors (no lookup table)
for (int i = 0; i < 0x100; i++)
palette.set_pen_indirect(i + 0x110, i);
}
void magmax_state::video_start()
{
uint8_t * prom14D = memregion("user2")->base();
// Set up save state
save_item(NAME(m_flipscreen));
m_prom_tab = std::make_unique<uint32_t[]>(256);
m_screen->register_screen_bitmap(m_bitmap);
// Allocate temporary bitmap
for (int i = 0; i < 256; i++)
{
int v = (prom14D[i] << 4) + prom14D[i + 0x100];
m_prom_tab[i] = ((v&0x1f)<<8) | ((v&0x10)<<10) | ((v&0xe0)>>1); /*convert data into more useful format*/
}
}
uint32_t magmax_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
// bit 2 flip screen
m_flipscreen = *m_vreg & 0x04;
// copy the background graphics
if (*m_vreg & 0x40) // background disable
bitmap.fill(0, cliprect);
else
{
uint32_t scroll_h = (*m_scroll_x) & 0x3fff;
uint32_t scroll_v = (*m_scroll_y) & 0xff;
// clear background-over-sprites bitmap
m_bitmap.fill(0);
for (int v = 2*8; v < 30*8; v++) // only for visible area
{
uint16_t line_data[256];
uint32_t map_v_scr_100 = (scroll_v + v) & 0x100;
uint32_t rom18D_addr = ((scroll_v + v) & 0xf8) + (map_v_scr_100<<5);
uint32_t rom15F_addr = (((scroll_v + v) & 0x07)<<2) + (map_v_scr_100<<5);
uint32_t map_v_scr_1fe_6 =((scroll_v + v) & 0x1fe)<<6;
pen_t pen_base = 0x110 + 0x20 + (map_v_scr_100>>1);
for (int h = 0; h < 0x100; h++)
{
uint32_t LS283 = scroll_h + h;
if (!map_v_scr_100)
{
if (h & 0x80)
LS283 = LS283 + (m_rom18B[ map_v_scr_1fe_6 + (h ^ 0xff) ] ^ 0xff);
else
LS283 = LS283 + m_rom18B[ map_v_scr_1fe_6 + h ] + 0xff01;
}
uint32_t prom_data = m_prom_tab[ (LS283 >> 6) & 0xff ];
rom18D_addr &= 0x20f8;
rom18D_addr += (prom_data & 0x1f00) + ((LS283 & 0x38) >>3);
rom15F_addr &= 0x201c;
rom15F_addr += (m_rom18B[0x4000 + rom18D_addr ]<<5) + ((LS283 & 0x6)>>1);
rom15F_addr += (prom_data & 0x4000);
uint32_t graph_color = (prom_data & 0x0070);
uint32_t graph_data = m_rom18B[0x8000 + rom15F_addr];
if ((LS283 & 1))
graph_data >>= 4;
graph_data &= 0x0f;
line_data[h] = pen_base + graph_color + graph_data;
// priority: background over sprites
if (map_v_scr_100 && ((graph_data & 0x0c)==0x0c))
m_bitmap.pix(v, h) = line_data[h];
}
if (m_flipscreen)
{
uint16_t line_data_flip_x[256];
for (int i = 0; i < 256; i++)
line_data_flip_x[i] = line_data[255-i];
draw_scanline16(bitmap, 0, 255-v, 256, line_data_flip_x, nullptr);
}
else
draw_scanline16(bitmap, 0, v, 256, line_data, nullptr);
}
}
// draw the sprites
for (int offs = 0; offs < m_spriteram.bytes()/2; offs += 4)
{
int sy = m_spriteram[offs] & 0xff;
if (sy)
{
int code = m_spriteram[offs + 1] & 0xff;
int attr = m_spriteram[offs + 2] & 0xff;
int color = (attr & 0xf0) >> 4;
int flipx = attr & 0x04;
int flipy = attr & 0x08;
int sx = (m_spriteram[offs + 3] & 0xff) - 0x80 + 0x100 * (attr & 0x01);
sy = 239 - sy;
if (m_flipscreen)
{
sx = 255-16 - sx;
sy = 239 - sy;
flipx = !flipx;
flipy = !flipy;
}
if (code & 0x80) // sprite bankswitch
code += (*m_vreg & 0x30) * 0x8;
m_gfxdecode->gfx(1)->transmask(bitmap, cliprect,
code,
color,
flipx, flipy,
sx, sy,
m_palette->transpen_mask(*m_gfxdecode->gfx(1), color, 0x1f));
}
}
if (!(*m_vreg & 0x40)) // background disable
copybitmap_trans(bitmap, m_bitmap, m_flipscreen, m_flipscreen, 0, 0, cliprect, 0);
// draw the foreground characters
for (int offs = 32*32-1; offs >= 0; offs -= 1)
{
//int page = (*m_vreg>>3) & 0x1;
int code = m_videoram[offs /*+ page*/] & 0xff;
if (code)
{
int sx = (offs % 32);
int sy = (offs / 32);
if (m_flipscreen)
{
sx = 31 - sx;
sy = 31 - sy;
}
m_gfxdecode->gfx(0)->transpen(bitmap, cliprect,
code,
0,
m_flipscreen, m_flipscreen,
8 * sx, 8 * sy, 0x0f);
}
}
return 0;
}

View File

@ -1,5 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria
/***************************************************************************
driver by Nicola Salmoria
@ -41,16 +42,236 @@ This info came from http://www.ne.jp/asahi/cc-sakura/akkun/old/fryski.html
***************************************************************************/
#include "emu.h"
#include "seicross.h"
#include "cpu/m6800/m6800.h"
#include "cpu/z80/z80.h"
#include "machine/nvram.h"
#include "machine/watchdog.h"
#include "sound/ay8910.h"
#include "sound/dac.h"
#include "emupal.h"
#include "screen.h"
#include "speaker.h"
#include "tilemap.h"
// configurable logging
#define LOG_AYPORTB (1U << 1)
//#define VERBOSE (LOG_GENERAL | LOG_AYPORTB)
#include "logmacro.h"
#define LOGAYPORTB(...) LOGMASKED(LOG_AYPORTB, __VA_ARGS__)
namespace {
class seicross_state : public driver_device
{
public:
seicross_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_mcu(*this, "mcu"),
m_dac(*this, "dac"),
m_nvram(*this, "nvram"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_debug_port(*this, "DEBUG"),
m_spriteram(*this, "spriteram%u", 1U),
m_videoram(*this, "videoram"),
m_row_scroll(*this, "row_scroll"),
m_colorram(*this, "colorram")
{ }
void no_nvram(machine_config &config);
void friskytb(machine_config &config);
void nvram(machine_config &config);
void sectznt(machine_config &config);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
private:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_mcu;
required_device<dac_byte_interface> m_dac;
optional_device<nvram_device> m_nvram;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
optional_ioport m_debug_port;
required_shared_ptr_array<uint8_t, 2> m_spriteram;
required_shared_ptr<uint8_t> m_videoram;
required_shared_ptr<uint8_t> m_row_scroll;
required_shared_ptr<uint8_t> m_colorram;
uint8_t m_portb = 0;
tilemap_t *m_bg_tilemap = nullptr;
uint8_t m_irq_mask = 0;
void videoram_w(offs_t offset, uint8_t data);
void colorram_w(offs_t offset, uint8_t data);
uint8_t portb_r();
void portb_w(uint8_t data);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
INTERRUPT_GEN_MEMBER(vblank_irq);
void palette(palette_device &palette) const;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
void nvram_init(nvram_device &nvram, void *data, size_t size);
void dac_w(uint8_t data);
void main_map(address_map &map);
void main_portmap(address_map &map);
void mcu_no_nvram_map(address_map &map);
void mcu_nvram_map(address_map &map);
};
// video
/***************************************************************************
Convert the color PROMs into a more useable format.
Seicross has two 32x8 palette PROMs, connected to the RGB output this way:
bit 7 -- 220 ohm resistor -- BLUE
-- 470 ohm resistor -- BLUE
-- 220 ohm resistor -- GREEN
-- 470 ohm resistor -- GREEN
-- 1 kohm resistor -- GREEN
-- 220 ohm resistor -- RED
-- 470 ohm resistor -- RED
bit 0 -- 1 kohm resistor -- RED
***************************************************************************/
void seicross_state::palette(palette_device &palette) const
{
uint8_t const *const color_prom = memregion("proms")->base();
for (int i = 0; i < palette.entries(); i++)
{
int bit0, bit1, bit2;
// red component
bit0 = BIT(color_prom[i], 0);
bit1 = BIT(color_prom[i], 1);
bit2 = BIT(color_prom[i], 2);
int const r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
// green component
bit0 = BIT(color_prom[i], 3);
bit1 = BIT(color_prom[i], 4);
bit2 = BIT(color_prom[i], 5);
int const g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
// blue component
bit0 = BIT(color_prom[i], 6);
bit1 = BIT(color_prom[i], 7);
int const b = 0x4f * bit0 + 0xa8 * bit1;
palette.set_pen_color(i, rgb_t(r, g, b));
}
}
void seicross_state::videoram_w(offs_t offset, uint8_t data)
{
m_videoram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset);
}
void seicross_state::colorram_w(offs_t offset, uint8_t data)
{
/* bit 5 of the address is not used for color memory. There is just
512k of memory; every two consecutive rows share the same memory
region. */
offset &= 0xffdf;
m_colorram[offset] = data;
m_colorram[offset + 0x20] = data;
m_bg_tilemap->mark_tile_dirty(offset);
m_bg_tilemap->mark_tile_dirty(offset + 0x20);
}
TILE_GET_INFO_MEMBER(seicross_state::get_bg_tile_info)
{
int const code = m_videoram[tile_index] + ((m_colorram[tile_index] & 0x10) << 4);
int const color = m_colorram[tile_index] & 0x0f;
int const flags = ((m_colorram[tile_index] & 0x40) ? TILE_FLIPX : 0) | ((m_colorram[tile_index] & 0x80) ? TILE_FLIPY : 0);
tileinfo.set(0, code, color, flags);
}
void seicross_state::video_start()
{
m_bg_tilemap = &machine().tilemap().create(
*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(seicross_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS,
8, 8, 32, 32);
m_bg_tilemap->set_scroll_cols(32);
}
void seicross_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
for (int offs = m_spriteram[0].bytes() - 4; offs >= 0; offs -= 4)
{
int const x = m_spriteram[0][offs + 3];
m_gfxdecode->gfx(1)->transpen(bitmap, cliprect,
(m_spriteram[0][offs] & 0x3f) + ((m_spriteram[0][offs + 1] & 0x10) << 2) + 128,
m_spriteram[0][offs + 1] & 0x0f,
m_spriteram[0][offs] & 0x40, m_spriteram[0][offs] & 0x80,
x, 240 - m_spriteram[0][offs + 2], 0);
if (x > 0xf0)
m_gfxdecode->gfx(1)->transpen(bitmap, cliprect,
(m_spriteram[0][offs] & 0x3f) + ((m_spriteram[0][offs + 1] & 0x10) << 2) + 128,
m_spriteram[0][offs + 1] & 0x0f,
m_spriteram[0][offs] & 0x40, m_spriteram[0][offs] & 0x80,
x - 256, 240 - m_spriteram[0][offs + 2], 0);
}
for (int offs = m_spriteram[1].bytes() - 4; offs >= 0; offs -= 4)
{
int const x = m_spriteram[1][offs + 3];
m_gfxdecode->gfx(1)->transpen(bitmap, cliprect,
(m_spriteram[1][offs] & 0x3f) + ((m_spriteram[1][offs + 1] & 0x10) << 2),
m_spriteram[1][offs + 1] & 0x0f,
m_spriteram[1][offs] & 0x40, m_spriteram[1][offs] & 0x80,
x, 240 - m_spriteram[1][offs + 2], 0);
if (x > 0xf0)
m_gfxdecode->gfx(1)->transpen(bitmap, cliprect,
(m_spriteram[1][offs] & 0x3f) + ((m_spriteram[1][offs + 1] & 0x10) << 2),
m_spriteram[1][offs + 1] & 0x0f,
m_spriteram[1][offs] & 0x40, m_spriteram[1][offs] & 0x80,
x - 256, 240 - m_spriteram[1][offs + 2], 0);
}
}
uint32_t seicross_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
for (int col = 0; col < 32; col++)
m_bg_tilemap->set_scrolly(col, m_row_scroll[col]);
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
draw_sprites(bitmap, cliprect);
return 0;
}
// machine
void seicross_state::nvram_init(nvram_device &nvram, void *data, size_t size)
{
static const uint8_t init[32] = {
@ -69,20 +290,20 @@ void seicross_state::machine_start()
void seicross_state::machine_reset()
{
// start with the protection mcu halted
// start with the protection MCU halted
m_mcu->set_input_line(INPUT_LINE_HALT, ASSERT_LINE);
}
uint8_t seicross_state::portB_r()
uint8_t seicross_state::portb_r()
{
return (m_portb & 0x9f) | (m_debug_port.read_safe(0) & 0x60);
}
void seicross_state::portB_w(uint8_t data)
void seicross_state::portb_w(uint8_t data)
{
//logerror("PC %04x: 8910 port B = %02x\n", m_maincpu->pc(), data);
LOGAYPORTB("PC %04x: 8910 port B = %02x\n", m_maincpu->pc(), data);
// bit 0 is IRQ enable
m_irq_mask = data & 1;
@ -91,7 +312,7 @@ void seicross_state::portB_w(uint8_t data)
// bit 2 resets the microcontroller
if (((m_portb & 4) == 0) && (data & 4))
{
// reset and start the protection mcu
// reset and start the protection MCU
m_mcu->pulse_input_line(INPUT_LINE_RESET, attotime::zero);
m_mcu->set_input_line(INPUT_LINE_HALT, CLEAR_LINE);
}
@ -108,12 +329,12 @@ void seicross_state::dac_w(uint8_t data)
void seicross_state::main_map(address_map &map)
{
map(0x0000, 0x77ff).rom();
map(0x7800, 0x7fff).ram().share("share1");
map(0x8820, 0x887f).ram().share("spriteram");
map(0x9000, 0x93ff).ram().w(FUNC(seicross_state::videoram_w)).share("videoram");
map(0x9800, 0x981f).ram().share("row_scroll");
map(0x9880, 0x989f).writeonly().share("spriteram2");
map(0x9c00, 0x9fff).ram().w(FUNC(seicross_state::colorram_w)).share("colorram");
map(0x7800, 0x7fff).ram().share("sharedram");
map(0x8820, 0x887f).ram().share(m_spriteram[0]);
map(0x9000, 0x93ff).ram().w(FUNC(seicross_state::videoram_w)).share(m_videoram);
map(0x9800, 0x981f).ram().share(m_row_scroll);
map(0x9880, 0x989f).writeonly().share(m_spriteram[1]);
map(0x9c00, 0x9fff).ram().w(FUNC(seicross_state::colorram_w)).share(m_colorram);
map(0xa000, 0xa000).portr("IN0");
map(0xa800, 0xa800).portr("IN1");
map(0xb000, 0xb000).portr("TEST");
@ -133,7 +354,7 @@ void seicross_state::mcu_nvram_map(address_map &map)
map(0x1000, 0x10ff).ram().share("nvram");
map(0x2000, 0x2000).w(FUNC(seicross_state::dac_w));
map(0x8000, 0xf7ff).rom().region("maincpu", 0);
map(0xf800, 0xffff).ram().share("share1");
map(0xf800, 0xffff).ram().share("sharedram");
}
void seicross_state::mcu_no_nvram_map(address_map &map)
@ -143,7 +364,7 @@ void seicross_state::mcu_no_nvram_map(address_map &map)
map(0x1006, 0x1006).portr("DSW3");
map(0x2000, 0x2000).w(FUNC(seicross_state::dac_w));
map(0x8000, 0xf7ff).rom().region("maincpu", 0);
map(0xf800, 0xffff).ram().share("share1");
map(0xf800, 0xffff).ram().share("sharedram");
}
@ -368,8 +589,8 @@ static const gfx_layout spritelayout =
static GFXDECODE_START( gfx_seicross )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 16 )
GFXDECODE_ENTRY( "gfx1", 0, spritelayout, 0, 16 )
GFXDECODE_ENTRY( "gfx", 0, charlayout, 0, 16 )
GFXDECODE_ENTRY( "gfx", 0, spritelayout, 0, 16 )
GFXDECODE_END
@ -402,14 +623,14 @@ void seicross_state::no_nvram(machine_config &config)
screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_seicross);
PALETTE(config, m_palette, FUNC(seicross_state::seicross_palette), 64);
PALETTE(config, m_palette, FUNC(seicross_state::palette), 64);
// Sound hardware
SPEAKER(config, "speaker").front_center();
ay8910_device &aysnd(AY8910(config, "aysnd", 18.432_MHz_XTAL / 12));
aysnd.port_b_read_callback().set(FUNC(seicross_state::portB_r));
aysnd.port_b_write_callback().set(FUNC(seicross_state::portB_w));
aysnd.port_b_read_callback().set(FUNC(seicross_state::portb_r));
aysnd.port_b_write_callback().set(FUNC(seicross_state::portb_w));
aysnd.add_route(ALL_OUTPUTS, "speaker", 0.25);
DAC_4BIT_R2R(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.12); // unknown DAC
@ -455,7 +676,7 @@ ROM_START( friskyt )
ROM_LOAD( "ftom.07", 0x6000, 0x1000, CRC(b2ef303a) SHA1(a7150457b454e15c06fa832d42dd1f0e165fcd6e) )
ROM_LOAD( "ft8_8.rom", 0x7000, 0x0800, CRC(10461a24) SHA1(c1f98316a4e90a2a6ef4953708b90c9546caaedd) )
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_REGION( 0x4000, "gfx", 0 )
ROM_LOAD( "ftom.11", 0x0000, 0x1000, CRC(1ec6ff65) SHA1(aab589c89cd14549b35f4dece5d3c231033c0c1a) )
ROM_LOAD( "ftom.12", 0x1000, 0x1000, CRC(3b8f40b5) SHA1(08e0c1fce11ee6c507c28b0d659c5b010f2f2b6f) )
ROM_LOAD( "ftom.09", 0x2000, 0x1000, CRC(60642f25) SHA1(2d179a9ea99014065f578bbec4fbfbda5aead98b) )
@ -477,7 +698,7 @@ ROM_START( friskyta )
ROM_LOAD( "ft.07", 0x6000, 0x1000, CRC(0ba02b2e) SHA1(1260c16d589fca37bf58ee28a4795f4b6333d0b9) )
ROM_LOAD( "ft8_8.rom", 0x7000, 0x0800, CRC(10461a24) SHA1(c1f98316a4e90a2a6ef4953708b90c9546caaedd) )
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_REGION( 0x4000, "gfx", 0 )
ROM_LOAD( "ft.11", 0x0000, 0x1000, CRC(956d924a) SHA1(e61bf5f187932c6cb676b4120cd95fe422f6a1a6) )
ROM_LOAD( "ft.12", 0x1000, 0x1000, CRC(c028d3b8) SHA1(9e8768b9658f8b05ade4dd5fb2ecde4a52627bc1) )
ROM_LOAD( "ftom.09", 0x2000, 0x1000, CRC(60642f25) SHA1(2d179a9ea99014065f578bbec4fbfbda5aead98b) )
@ -500,7 +721,7 @@ ROM_START( friskytb )
ROM_LOAD( "7.3i", 0x6000, 0x1000, CRC(aa36a6b8) SHA1(bf8af71313459a775b07dcfdce455077c4f499bf) )
ROM_LOAD( "8.3j", 0x7000, 0x0800, CRC(10461a24) SHA1(c1f98316a4e90a2a6ef4953708b90c9546caaedd) )
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_REGION( 0x4000, "gfx", 0 )
ROM_LOAD( "11.7l", 0x0000, 0x1000, CRC(caa93315) SHA1(af8fd135c0a9c0278705975c127a91f246341da1) ) // 99.707031% - tile 0x69 is blank vs ft.11 (it's the symbol used for lives, instead this set shows lives to the left of the HIGH SCORE text using different gfx)
ROM_LOAD( "12.7n", 0x1000, 0x1000, CRC(c028d3b8) SHA1(9e8768b9658f8b05ade4dd5fb2ecde4a52627bc1) )
ROM_LOAD( "9.7h", 0x2000, 0x1000, CRC(60642f25) SHA1(2d179a9ea99014065f578bbec4fbfbda5aead98b) )
@ -522,7 +743,7 @@ ROM_START( radrad )
ROM_LOAD( "7.3g", 0x6000, 0x1000, CRC(02b1f9c9) SHA1(6b857ae477d3c92a58494140ffa3337dba8e77cc) )
ROM_LOAD( "8.3h", 0x7000, 0x0800, CRC(911c90e8) SHA1(94fa91e767ab27a1616f1768f97a44a59a3f3294) )
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_REGION( 0x4000, "gfx", 0 )
ROM_LOAD( "11.l7", 0x0000, 0x1000, CRC(4ace7afb) SHA1(3c495f106505d5dfed93393db1f1b3842f603448) )
ROM_LOAD( "12.n7", 0x1000, 0x1000, CRC(b19b8473) SHA1(42160f978f8e209a89be097b5cfc7ac0aeec49c5) )
ROM_LOAD( "9.j7", 0x2000, 0x1000, CRC(229939a3) SHA1(4ee050798871823314952e34938233e2cf9e7341) )
@ -548,7 +769,7 @@ ROM_START( radradj ) // Top and bottom PCBs have Nihon Bussan etched and the top
ROM_LOAD( "8.3j", 0x7000, 0x0800, CRC(bc9c7fae) SHA1(85177d438058a329189b38b89d17616bba9eed3d) ) // 2732
ROM_CONTINUE(0x7000, 0x0800) // 1ST AND 2ND HALF IDENTICAL (the half matches the ROM in radrad)
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_REGION( 0x4000, "gfx", 0 )
ROM_LOAD( "11.7k", 0x0000, 0x1000, CRC(c75b96da) SHA1(93692f7ae10ec812f641687509624eb7682e3eeb) ) // 2732
ROM_LOAD( "12.7m", 0x1000, 0x1000, CRC(83f35c05) SHA1(4645eb9995b54d8a0d98d2b2a8c477047aed4519) ) // 2732
ROM_LOAD( "9.7h", 0x2000, 0x1000, CRC(f2da3954) SHA1(157ab1fdd289c1132650b5d395219337a6c1f26b) ) // 2732
@ -573,7 +794,7 @@ ROM_START( seicross )
ROM_LOAD( "smc7", 0x6000, 0x1000, CRC(13052b03) SHA1(2866f2533a788f734310a74789f762f3fa17a57a) )
ROM_LOAD( "smc8", 0x7000, 0x0800, CRC(2093461d) SHA1(0d640bc7ee1e9ffe32580e3143677475145b06d2) )
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_REGION( 0x4000, "gfx", 0 )
ROM_LOAD( "sz11.7k", 0x0000, 0x1000, CRC(fbd9b91d) SHA1(6b3581f4b518c058b970d569ced07dd7dc6a87e6) )
ROM_LOAD( "smcd", 0x1000, 0x1000, CRC(c3c953c4) SHA1(a96937a48b59b7e992e53d279c10a5f3ea7f9a6f) )
ROM_LOAD( "sz9.7j", 0x2000, 0x1000, CRC(4819f0cd) SHA1(fa8d371efc3198daf76ff1264e22673c5521becf) )
@ -600,7 +821,7 @@ ROM_START( seicrossa )
ROM_LOAD( "sr-8.3j", 0x7000, 0x0800, CRC(2a95ad44) SHA1(75f5e9ea90f23b4e253d9f5a781a32fa914dee8c) ) // 1ST AND 2ND HALF IDENTICAL, same as sz8.3j
ROM_IGNORE( 0x0800)
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_REGION( 0x4000, "gfx", 0 )
ROM_LOAD( "sr-11.7l", 0x0000, 0x1000, CRC(fbd9b91d) SHA1(6b3581f4b518c058b970d569ced07dd7dc6a87e6) )
ROM_LOAD( "sr-12.7n", 0x1000, 0x1000, CRC(c3c953c4) SHA1(a96937a48b59b7e992e53d279c10a5f3ea7f9a6f) )
ROM_LOAD( "sr-9.7h", 0x2000, 0x1000, CRC(4819f0cd) SHA1(fa8d371efc3198daf76ff1264e22673c5521becf) )
@ -625,7 +846,7 @@ ROM_START( sectrzon )
ROM_LOAD( "sz7.3i", 0x6000, 0x1000, CRC(7b34dc1c) SHA1(fb163a908c991cd214e0d2d685e74563a460a929) )
ROM_LOAD( "sz8.3j", 0x7000, 0x0800, CRC(9933526a) SHA1(2178ef8653f1d60be28bcaebe1033ef7ae480157) )
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_REGION( 0x4000, "gfx", 0 )
ROM_LOAD( "sz11.7k", 0x0000, 0x1000, CRC(fbd9b91d) SHA1(6b3581f4b518c058b970d569ced07dd7dc6a87e6) )
ROM_LOAD( "sz12.7m", 0x1000, 0x1000, CRC(2bdef9ad) SHA1(50fe41e81c1307317b4fb6b47bf0619d141c42ff) )
ROM_LOAD( "sz9.7j", 0x2000, 0x1000, CRC(4819f0cd) SHA1(fa8d371efc3198daf76ff1264e22673c5521becf) )
@ -651,7 +872,7 @@ ROM_START( sectrzont )
ROM_LOAD( "czt_8.bin", 0x7000, 0x0800, CRC(673a20e7) SHA1(66be7581323dceddb594eed53dd3abc62b450327) ) // 1ST AND 2ND HALF IDENTICAL
ROM_IGNORE( 0x0800)
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_REGION( 0x4000, "gfx", 0 )
ROM_LOAD( "czt_11.bin", 0x0000, 0x1000, CRC(fbd9b91d) SHA1(6b3581f4b518c058b970d569ced07dd7dc6a87e6) )
ROM_LOAD( "czt_12.bin", 0x1000, 0x1000, CRC(2bdef9ad) SHA1(50fe41e81c1307317b4fb6b47bf0619d141c42ff) )
ROM_LOAD( "czt_9.bin", 0x2000, 0x1000, CRC(4819f0cd) SHA1(fa8d371efc3198daf76ff1264e22673c5521becf) )
@ -676,7 +897,7 @@ ROM_START( sectrzona ) // This and set seicross seem bug-fixed versions, where t
ROM_LOAD( "sz7.3i", 0x6000, 0x1000, CRC(13052b03) SHA1(2866f2533a788f734310a74789f762f3fa17a57a) )
ROM_LOAD( "sz8.3j", 0x7000, 0x0800, CRC(019f9651) SHA1(2b030e7823b277fb6e3f37753a4d52d277e0e079) )
ROM_REGION( 0x4000, "gfx1", 0 )
ROM_REGION( 0x4000, "gfx", 0 )
ROM_LOAD( "sz11.7k", 0x0000, 0x1000, CRC(fbd9b91d) SHA1(6b3581f4b518c058b970d569ced07dd7dc6a87e6) )
ROM_LOAD( "sz12.7m", 0x1000, 0x1000, CRC(2bdef9ad) SHA1(50fe41e81c1307317b4fb6b47bf0619d141c42ff) )
ROM_LOAD( "sz9.7j", 0x2000, 0x1000, CRC(4819f0cd) SHA1(fa8d371efc3198daf76ff1264e22673c5521becf) )
@ -690,6 +911,8 @@ ROM_START( sectrzona ) // This and set seicross seem bug-fixed versions, where t
ROM_LOAD( "pal16h2.3b", 0x0000, 0x0044, BAD_DUMP CRC(e1a6a86d) SHA1(740a5c2ef8a992f6a794c0fc4c81eb50cfcedc32) )
ROM_END
} // anonymous namespace
GAME( 1981, friskyt, 0, nvram, friskyt, seicross_state, empty_init, ROT0, "Nichibutsu", "Frisky Tom (set 1)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
GAME( 1981, friskyta, friskyt, nvram, friskyt, seicross_state, empty_init, ROT0, "Nichibutsu", "Frisky Tom (set 2)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )

View File

@ -1,86 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria
#ifndef MAME_NICHIBUTSU_SEICROSS_H
#define MAME_NICHIBUTSU_SEICROSS_H
#pragma once
#include "machine/nvram.h"
#include "sound/dac.h"
#include "emupal.h"
#include "tilemap.h"
class seicross_state : public driver_device
{
public:
seicross_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag),
m_maincpu(*this, "maincpu"),
m_mcu(*this, "mcu"),
m_dac(*this, "dac"),
m_nvram(*this, "nvram"),
m_gfxdecode(*this, "gfxdecode"),
m_palette(*this, "palette"),
m_debug_port(*this, "DEBUG"),
m_spriteram(*this, "spriteram"),
m_videoram(*this, "videoram"),
m_row_scroll(*this, "row_scroll"),
m_spriteram2(*this, "spriteram2"),
m_colorram(*this, "colorram")
{ }
void no_nvram(machine_config &config);
void friskytb(machine_config &config);
void nvram(machine_config &config);
void sectznt(machine_config &config);
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
virtual void video_start() override;
private:
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_mcu;
required_device<dac_byte_interface> m_dac;
optional_device<nvram_device> m_nvram;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
optional_ioport m_debug_port;
required_shared_ptr<uint8_t> m_spriteram;
required_shared_ptr<uint8_t> m_videoram;
required_shared_ptr<uint8_t> m_row_scroll;
required_shared_ptr<uint8_t> m_spriteram2;
required_shared_ptr<uint8_t> m_colorram;
uint8_t m_portb = 0;
tilemap_t *m_bg_tilemap = nullptr;
uint8_t m_irq_mask = 0;
void videoram_w(offs_t offset, uint8_t data);
void colorram_w(offs_t offset, uint8_t data);
uint8_t portB_r();
void portB_w(uint8_t data);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
INTERRUPT_GEN_MEMBER(vblank_irq);
void seicross_palette(palette_device &palette) const;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect );
void nvram_init(nvram_device &nvram, void *data, size_t size);
void dac_w(uint8_t data);
void main_map(address_map &map);
void main_portmap(address_map &map);
void mcu_no_nvram_map(address_map &map);
void mcu_nvram_map(address_map &map);
};
#endif // MAME_NICHIBUTSU_SEICROSS_H

View File

@ -1,143 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Nicola Salmoria
/***************************************************************************
video.c
Functions to emulate the video hardware of the machine.
***************************************************************************/
#include "emu.h"
#include "seicross.h"
/***************************************************************************
Convert the color PROMs into a more useable format.
Seicross has two 32x8 palette PROMs, connected to the RGB output this way:
bit 7 -- 220 ohm resistor -- BLUE
-- 470 ohm resistor -- BLUE
-- 220 ohm resistor -- GREEN
-- 470 ohm resistor -- GREEN
-- 1 kohm resistor -- GREEN
-- 220 ohm resistor -- RED
-- 470 ohm resistor -- RED
bit 0 -- 1 kohm resistor -- RED
***************************************************************************/
void seicross_state::seicross_palette(palette_device &palette) const
{
uint8_t const *const color_prom = memregion("proms")->base();
for (int i = 0; i < palette.entries(); i++)
{
int bit0, bit1, bit2;
// red component
bit0 = BIT(color_prom[i], 0);
bit1 = BIT(color_prom[i], 1);
bit2 = BIT(color_prom[i], 2);
int const r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
// green component
bit0 = BIT(color_prom[i], 3);
bit1 = BIT(color_prom[i], 4);
bit2 = BIT(color_prom[i], 5);
int const g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
// blue component
bit0 = BIT(color_prom[i], 6);
bit1 = BIT(color_prom[i], 7);
int const b = 0x4f * bit0 + 0xa8 * bit1;
palette.set_pen_color(i, rgb_t(r, g, b));
}
}
void seicross_state::videoram_w(offs_t offset, uint8_t data)
{
m_videoram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset);
}
void seicross_state::colorram_w(offs_t offset, uint8_t data)
{
/* bit 5 of the address is not used for color memory. There is just */
/* 512k of memory; every two consecutive rows share the same memory */
/* region. */
offset &= 0xffdf;
m_colorram[offset] = data;
m_colorram[offset + 0x20] = data;
m_bg_tilemap->mark_tile_dirty(offset);
m_bg_tilemap->mark_tile_dirty(offset + 0x20);
}
TILE_GET_INFO_MEMBER(seicross_state::get_bg_tile_info)
{
int code = m_videoram[tile_index] + ((m_colorram[tile_index] & 0x10) << 4);
int color = m_colorram[tile_index] & 0x0f;
int flags = ((m_colorram[tile_index] & 0x40) ? TILE_FLIPX : 0) | ((m_colorram[tile_index] & 0x80) ? TILE_FLIPY : 0);
tileinfo.set(0, code, color, flags);
}
void seicross_state::video_start()
{
m_bg_tilemap = &machine().tilemap().create(
*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(seicross_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS,
8, 8, 32, 32);
m_bg_tilemap->set_scroll_cols(32);
}
void seicross_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect )
{
int offs;
for (offs = m_spriteram.bytes() - 4; offs >= 0; offs -= 4)
{
int x = m_spriteram[offs + 3];
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
(m_spriteram[offs] & 0x3f) + ((m_spriteram[offs + 1] & 0x10) << 2) + 128,
m_spriteram[offs + 1] & 0x0f,
m_spriteram[offs] & 0x40,m_spriteram[offs] & 0x80,
x,240-m_spriteram[offs + 2],0);
if(x>0xf0)
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
(m_spriteram[offs] & 0x3f) + ((m_spriteram[offs + 1] & 0x10) << 2) + 128,
m_spriteram[offs + 1] & 0x0f,
m_spriteram[offs] & 0x40,m_spriteram[offs] & 0x80,
x-256,240-m_spriteram[offs + 2],0);
}
for (offs = m_spriteram2.bytes() - 4; offs >= 0; offs -= 4)
{
int x = m_spriteram2[offs + 3];
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
(m_spriteram2[offs] & 0x3f) + ((m_spriteram2[offs + 1] & 0x10) << 2),
m_spriteram2[offs + 1] & 0x0f,
m_spriteram2[offs] & 0x40,m_spriteram2[offs] & 0x80,
x,240-m_spriteram2[offs + 2],0);
if(x>0xf0)
m_gfxdecode->gfx(1)->transpen(bitmap,cliprect,
(m_spriteram2[offs] & 0x3f) + ((m_spriteram2[offs + 1] & 0x10) << 2),
m_spriteram2[offs + 1] & 0x0f,
m_spriteram2[offs] & 0x40,m_spriteram2[offs] & 0x80,
x-256,240-m_spriteram2[offs + 2],0);
}
}
uint32_t seicross_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
int col;
for (col = 0; col < 32; col++)
m_bg_tilemap->set_scrolly(col, m_row_scroll[col]);
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
draw_sprites(bitmap, cliprect);
return 0;
}

File diff suppressed because it is too large Load Diff

View File

@ -5277,8 +5277,8 @@ ROM_START( dblaxle ) /* Manual refers to this version as the "Version Without Co
ROM_LOAD64_WORD_SWAP( "c78-07.33", 0x000002, 0x100000, CRC(9da00d5b) SHA1(f6b664c7495b936ce1b99852da45ec92cb37062a) )
ROM_LOAD64_WORD_SWAP( "c78-06.23", 0x000004, 0x100000, CRC(8309e91b) SHA1(3f27557bc82bf42cc77e3c7e363b51a0b119144d) )
ROM_LOAD64_WORD_SWAP( "c78-05.31", 0x000006, 0x100000, CRC(90001f68) SHA1(5c08dfe6a2e12e6ca84035815563f38fc2c2c029) )
// ROMX_LOAD ( "c78-05l.1", 0x000007, 0x080000, CRC(f24bf972) , ROM_SKIP(7) )
// ROMX_LOAD ( "c78-05h.2", 0x000006, 0x080000, CRC(c01039b5) , ROM_SKIP(7) )
// ROM_LOAD64_BYTE( "c78-05l.1", 0x000007, 0x080000, CRC(f24bf972) )
// ROM_LOAD64_BYTE( "c78-05h.2", 0x000006, 0x080000, CRC(c01039b5) )
ROM_REGION16_LE( 0x80000, "tc0150rod", 0 )
ROM_LOAD16_WORD( "c78-09.12", 0x000000, 0x80000, CRC(0dbde6f5) SHA1(4049271e3738b54e0c56d191889b1aea5664d49f) ) /* ROD, road lines */
@ -5324,8 +5324,8 @@ ROM_START( dblaxleu ) /* Manual refers to this version as the "Version Without C
ROM_LOAD64_WORD_SWAP( "c78-07.33", 0x000002, 0x100000, CRC(9da00d5b) SHA1(f6b664c7495b936ce1b99852da45ec92cb37062a) )
ROM_LOAD64_WORD_SWAP( "c78-06.23", 0x000004, 0x100000, CRC(8309e91b) SHA1(3f27557bc82bf42cc77e3c7e363b51a0b119144d) )
ROM_LOAD64_WORD_SWAP( "c78-05.31", 0x000006, 0x100000, CRC(90001f68) SHA1(5c08dfe6a2e12e6ca84035815563f38fc2c2c029) )
// ROMX_LOAD ( "c78-05l.1", 0x000007, 0x080000, CRC(f24bf972) , ROM_SKIP(7) )
// ROMX_LOAD ( "c78-05h.2", 0x000006, 0x080000, CRC(c01039b5) , ROM_SKIP(7) )
// ROM_LOAD64_BYTE( "c78-05l.1", 0x000007, 0x080000, CRC(f24bf972) )
// ROM_LOAD64_BYTE( "c78-05h.2", 0x000006, 0x080000, CRC(c01039b5) )
ROM_REGION16_LE( 0x80000, "tc0150rod", 0 )
ROM_LOAD16_WORD( "c78-09.12", 0x000000, 0x80000, CRC(0dbde6f5) SHA1(4049271e3738b54e0c56d191889b1aea5664d49f) ) /* ROD, road lines */
@ -5371,8 +5371,8 @@ ROM_START( dblaxleul ) /* Side by side linkable version */
ROM_LOAD64_WORD_SWAP( "c78-07.33", 0x000002, 0x100000, CRC(9da00d5b) SHA1(f6b664c7495b936ce1b99852da45ec92cb37062a) )
ROM_LOAD64_WORD_SWAP( "c78-06.23", 0x000004, 0x100000, CRC(8309e91b) SHA1(3f27557bc82bf42cc77e3c7e363b51a0b119144d) )
ROM_LOAD64_WORD_SWAP( "c78-05.31", 0x000006, 0x100000, CRC(90001f68) SHA1(5c08dfe6a2e12e6ca84035815563f38fc2c2c029) )
// ROMX_LOAD ( "c78-05l.1", 0x000007, 0x080000, CRC(f24bf972) , ROM_SKIP(7) )
// ROMX_LOAD ( "c78-05h.2", 0x000006, 0x080000, CRC(c01039b5) , ROM_SKIP(7) )
// ROM_LOAD64_BYTE( "c78-05l.1", 0x000007, 0x080000, CRC(f24bf972) )
// ROM_LOAD64_BYTE( "c78-05h.2", 0x000006, 0x080000, CRC(c01039b5) )
ROM_REGION16_LE( 0x80000, "tc0150rod", 0 )
ROM_LOAD16_WORD( "c78-09.12", 0x000000, 0x80000, CRC(0dbde6f5) SHA1(4049271e3738b54e0c56d191889b1aea5664d49f) ) /* ROD, road lines */