mirror of
https://github.com/holub/mame
synced 2025-06-06 04:43:45 +03:00
- 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:
parent
e8533db852
commit
fc0092e82b
@ -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
|
||||
|
||||
|
||||
|
@ -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) )
|
||||
|
@ -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) )
|
||||
|
@ -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 )
|
||||
|
@ -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
|
@ -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;
|
||||
}
|
@ -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
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
|
@ -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
|
@ -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;
|
||||
}
|
@ -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 )
|
||||
|
@ -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
|
@ -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;
|
||||
}
|
@ -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 )
|
||||
|
@ -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
|
@ -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
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user