trunk/src/mame/drivers/armedf.c
| r243692 | r243693 | |
| 293 | 293 | #include "sound/dac.h" |
| 294 | 294 | #include "sound/3812intf.h" |
| 295 | 295 | #include "includes/armedf.h" |
| 296 | | #include "includes/nb1414m4.h" |
| 297 | 296 | |
| 298 | 297 | #define LEGION_HACK 0 |
| 299 | 298 | |
| r243692 | r243693 | |
| 318 | 317 | WRITE16_MEMBER(armedf_state::terraf_io_w) |
| 319 | 318 | { |
| 320 | 319 | if(data & 0x4000 && ((m_vreg & 0x4000) == 0)) //0 -> 1 transition |
| 321 | | nb_1414m4_exec(space,(m_text_videoram[0] << 8) | (m_text_videoram[1] & 0xff),m_text_videoram,m_fg_scrollx,m_fg_scrolly,m_tx_tilemap); |
| 320 | m_nb1414m4->exec((m_text_videoram[0] << 8) | (m_text_videoram[1] & 0xff),m_text_videoram,m_fg_scrollx,m_fg_scrolly,m_tx_tilemap); |
| 322 | 321 | |
| 323 | 322 | |
| 324 | 323 | COMBINE_DATA(&m_vreg); |
| r243692 | r243693 | |
| 477 | 476 | AM_RANGE(0x060000, 0x060fff) AM_RAM AM_SHARE("spriteram") |
| 478 | 477 | AM_RANGE(0x061000, 0x063fff) AM_RAM |
| 479 | 478 | AM_RANGE(0x064000, 0x064fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") |
| 480 | | AM_RANGE(0x068000, 0x069fff) AM_READWRITE8(nb1414m4_text_videoram_r,nb1414m4_text_videoram_w,0x00ff) |
| 479 | AM_RANGE(0x068000, 0x069fff) AM_READWRITE8(armedf_text_videoram_r,armedf_text_videoram_w,0x00ff) |
| 481 | 480 | AM_RANGE(0x06a000, 0x06a9ff) AM_RAM |
| 482 | 481 | AM_RANGE(0x06c000, 0x06cfff) AM_RAM AM_SHARE("spr_pal_clut") |
| 483 | 482 | AM_RANGE(0x070000, 0x070fff) AM_RAM_WRITE(armedf_fg_videoram_w) AM_SHARE("fg_videoram") |
| r243692 | r243693 | |
| 1179 | 1178 | |
| 1180 | 1179 | MCFG_MACHINE_START_OVERRIDE(armedf_state,armedf) |
| 1181 | 1180 | MCFG_MACHINE_RESET_OVERRIDE(armedf_state,armedf) |
| 1181 | |
| 1182 | MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0) |
| 1182 | 1183 | |
| 1183 | 1184 | /* video hardware */ |
| 1184 | 1185 | MCFG_SCREEN_ADD("screen", RASTER) |
| r243692 | r243693 | |
| 1276 | 1277 | |
| 1277 | 1278 | MCFG_MACHINE_START_OVERRIDE(armedf_state,armedf) |
| 1278 | 1279 | MCFG_MACHINE_RESET_OVERRIDE(armedf_state,armedf) |
| 1280 | |
| 1281 | MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0) |
| 1279 | 1282 | |
| 1280 | 1283 | /* video hardware */ |
| 1281 | 1284 | MCFG_SCREEN_ADD("screen", RASTER) |
| r243692 | r243693 | |
| 1368 | 1371 | |
| 1369 | 1372 | MCFG_MACHINE_START_OVERRIDE(armedf_state,armedf) |
| 1370 | 1373 | MCFG_MACHINE_RESET_OVERRIDE(armedf_state,armedf) |
| 1374 | |
| 1375 | MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0) |
| 1371 | 1376 | |
| 1372 | 1377 | /* video hardware */ |
| 1373 | 1378 | MCFG_SCREEN_ADD("screen", RASTER) |
| r243692 | r243693 | |
| 1414 | 1419 | |
| 1415 | 1420 | MCFG_MACHINE_START_OVERRIDE(armedf_state,armedf) |
| 1416 | 1421 | MCFG_MACHINE_RESET_OVERRIDE(armedf_state,armedf) |
| 1422 | |
| 1423 | MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0) |
| 1417 | 1424 | |
| 1418 | 1425 | /* video hardware */ |
| 1419 | 1426 | MCFG_SCREEN_ADD("screen", RASTER) |
| r243692 | r243693 | |
| 1461 | 1468 | MCFG_MACHINE_START_OVERRIDE(armedf_state,armedf) |
| 1462 | 1469 | MCFG_MACHINE_RESET_OVERRIDE(armedf_state,armedf) |
| 1463 | 1470 | |
| 1471 | |
| 1464 | 1472 | /* video hardware */ |
| 1465 | 1473 | MCFG_SCREEN_ADD("screen", RASTER) |
| 1466 | 1474 | MCFG_SCREEN_REFRESH_RATE(60) |
| r243692 | r243693 | |
| 1580 | 1588 | ROM_LOAD( "legion.1k", 0x000000, 0x010000, CRC(ff5a0db9) SHA1(9308deb363d3b7686cc69485ec14201dd68f9a97) ) // lg12 |
| 1581 | 1589 | ROM_LOAD( "legion.1j", 0x010000, 0x010000, CRC(bae220c8) SHA1(392ae0fb0351dcad7b0e8e0ed4a1dc6e07f493df) ) // lg11 |
| 1582 | 1590 | |
| 1583 | | ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter */ |
| 1591 | ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */ |
| 1584 | 1592 | ROM_LOAD ( "lg7.bin", 0x0000, 0x4000, CRC(533e2b58) SHA1(a13ea4a530038760ffa87713903c59a932452717) ) |
| 1585 | 1593 | ROM_END |
| 1586 | 1594 | |
| r243692 | r243693 | |
| 1637 | 1645 | ROM_LOAD( "12.7d", 0x00000, 0x10000, CRC(2d1f2ceb) SHA1(77544e1c4bda06feac135a96bb76af7c79278dc0) ) /* sprites */ |
| 1638 | 1646 | ROM_LOAD( "13.9d", 0x10000, 0x10000, CRC(1d2f92d6) SHA1(e842c6bf95a5958a6ca2c85e68b9bc3cc15211a4) ) |
| 1639 | 1647 | |
| 1640 | | ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter */ |
| 1648 | ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */ |
| 1641 | 1649 | ROM_LOAD( "10.11c", 0x0000, 0x4000, CRC(ac705812) SHA1(65be46ee959d8478cb6dffb25e61f7742276997b) ) |
| 1642 | 1650 | |
| 1643 | 1651 | ROM_REGION( 0x0100, "proms", 0 ) /* Unknown use */ |
| r243692 | r243693 | |
| 1671 | 1679 | ROM_LOAD( "tf-003.7d", 0x00000, 0x10000, CRC(d74085a1) SHA1(3f6ba85dbd6e48a502c115b2d322a586fc4f56c9) ) /* sprites */ |
| 1672 | 1680 | ROM_LOAD( "tf-002.9d", 0x10000, 0x10000, CRC(148aa0c5) SHA1(8d8a565540e91b384a9c154522501921b7da4d4e) ) |
| 1673 | 1681 | |
| 1674 | | ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter */ |
| 1682 | ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */ |
| 1675 | 1683 | ROM_LOAD( "10.11c", 0x0000, 0x4000, CRC(ac705812) SHA1(65be46ee959d8478cb6dffb25e61f7742276997b) ) |
| 1676 | 1684 | |
| 1677 | 1685 | ROM_REGION( 0x0100, "proms", 0 ) /* Unknown use */ |
| r243692 | r243693 | |
| 1705 | 1713 | ROM_LOAD( "tfj-12.7d", 0x00000, 0x10000, CRC(d74085a1) SHA1(3f6ba85dbd6e48a502c115b2d322a586fc4f56c9) ) /* sprites */ |
| 1706 | 1714 | ROM_LOAD( "tfj-13.9d", 0x10000, 0x10000, CRC(148aa0c5) SHA1(8d8a565540e91b384a9c154522501921b7da4d4e) ) |
| 1707 | 1715 | |
| 1708 | | ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter */ |
| 1716 | ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */ |
| 1709 | 1717 | ROM_LOAD( "10.11c", 0x0000, 0x4000, CRC(ac705812) SHA1(65be46ee959d8478cb6dffb25e61f7742276997b) ) |
| 1710 | 1718 | |
| 1711 | 1719 | ROM_REGION( 0x0100, "proms", 0 ) /* Unknown use */ |
| r243692 | r243693 | |
| 1846 | 1854 | ROM_LOAD( "kozure12.8d", 0x00000, 0x20000, CRC(15f4021d) SHA1(b2ba6fda1a7bdaae97de4b0157b9b656b4385e08) ) /* sprites */ |
| 1847 | 1855 | ROM_LOAD( "kozure13.9d", 0x20000, 0x20000, CRC(b3b6c753) SHA1(9ad061cac9558320b5cfd1ac1ac8d7f1788270cc) ) |
| 1848 | 1856 | |
| 1849 | | ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter */ |
| 1857 | ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */ |
| 1850 | 1858 | ROM_LOAD( "kozure10.11c", 0x0000, 0x4000, CRC(f48be21d) SHA1(5d6db049f30cab98f672814a86a06609c1fa8fb4) ) |
| 1851 | 1859 | |
| 1852 | 1860 | ROM_REGION( 0x0100, "proms", 0 ) /* Unknown use */ |
| r243692 | r243693 | |
| 1883 | 1891 | ROM_LOAD( "13.bin", 0x20000, 0x10000, CRC(6b6ec999) SHA1(7749ce435f497732bd1b6958974cd95e960fc9fe) ) |
| 1884 | 1892 | ROM_LOAD( "14.bin", 0x30000, 0x10000, CRC(f426a4ad) SHA1(facccb21ca73c560d3a38e05e677782516d5b0c0) ) |
| 1885 | 1893 | |
| 1886 | | ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter */ |
| 1894 | ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */ |
| 1887 | 1895 | ROM_LOAD( "9.bin", 0x0000, 0x4000, CRC(740d260f) SHA1(5b4487930c7a1fb0a796aec2243bec631b1b5104) ) |
| 1888 | 1896 | ROM_END |
| 1889 | 1897 | |
| r243692 | r243693 | |
| 1917 | 1925 | ROM_LOAD( "13.bin", 0x20000, 0x10000, CRC(6b6ec999) SHA1(7749ce435f497732bd1b6958974cd95e960fc9fe) ) |
| 1918 | 1926 | ROM_LOAD( "14.bin", 0x30000, 0x10000, CRC(f426a4ad) SHA1(facccb21ca73c560d3a38e05e677782516d5b0c0) ) |
| 1919 | 1927 | |
| 1920 | | ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter */ |
| 1928 | ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */ |
| 1921 | 1929 | ROM_LOAD( "9.bin", 0x0000, 0x4000, CRC(740d260f) SHA1(5b4487930c7a1fb0a796aec2243bec631b1b5104) ) |
| 1922 | 1930 | ROM_END |
| 1923 | 1931 | |
| r243692 | r243693 | |
| 2120 | 2128 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x07c000, 0x07c001, write16_delegate(FUNC(armedf_state::bootleg_io_w),this)); |
| 2121 | 2129 | |
| 2122 | 2130 | m_scroll_type = 2; |
| 2131 | |
| 2132 | save_item(NAME(m_legion_cmd)); |
| 2123 | 2133 | } |
| 2124 | 2134 | |
| 2125 | 2135 | DRIVER_INIT_MEMBER(armedf_state,cclimbr2) |
trunk/src/mame/drivers/galivan.c
| r243692 | r243693 | |
| 32 | 32 | #include "sound/dac.h" |
| 33 | 33 | #include "sound/3526intf.h" |
| 34 | 34 | #include "includes/galivan.h" |
| 35 | | #include "includes/nb1414m4.h" |
| 36 | 35 | |
| 37 | 36 | |
| 38 | 37 | WRITE8_MEMBER(galivan_state::galivan_sound_command_w) |
| r243692 | r243693 | |
| 91 | 90 | |
| 92 | 91 | WRITE8_MEMBER(galivan_state::blit_trigger_w) |
| 93 | 92 | { |
| 94 | | nb_1414m4_exec(space,(m_videoram[0] << 8) | (m_videoram[1] & 0xff),m_videoram,m_scrollx,m_scrolly,m_tx_tilemap); |
| 93 | m_nb1414m4->exec((m_videoram[0] << 8) | (m_videoram[1] & 0xff),m_videoram,m_scrollx,m_scrolly,m_tx_tilemap); |
| 95 | 94 | } |
| 96 | 95 | |
| 97 | 96 | static ADDRESS_MAP_START( ninjemak_io_map, AS_IO, 8, galivan_state ) |
| r243692 | r243693 | |
| 472 | 471 | |
| 473 | 472 | MCFG_MACHINE_START_OVERRIDE(galivan_state,ninjemak) |
| 474 | 473 | MCFG_MACHINE_RESET_OVERRIDE(galivan_state,ninjemak) |
| 474 | |
| 475 | MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0) |
| 475 | 476 | |
| 476 | 477 | /* video hardware */ |
| 477 | 478 | MCFG_BUFFERED_SPRITERAM8_ADD("spriteram") |
| r243692 | r243693 | |
| 505 | 506 | MACHINE_CONFIG_END |
| 506 | 507 | |
| 507 | 508 | |
| 508 | | |
| 509 | MACHINE_CONFIG_DERIVED(youmab, ninjemak) |
| 510 | |
| 511 | MCFG_DEVICE_REMOVE("nb1414m4") |
| 512 | MACHINE_CONFIG_END |
| 509 | 513 | /*************************************************************************** |
| 510 | 514 | |
| 511 | 515 | Game driver(s) |
| r243692 | r243693 | |
| 763 | 767 | ROM_LOAD( "ninjemak.7", 0x0000, 0x4000, CRC(80c20d36) SHA1(f20724754824030d62059388f3ea2224f5b7a60e) ) |
| 764 | 768 | ROM_LOAD( "ninjemak.6", 0x4000, 0x4000, CRC(1da7a651) SHA1(5307452058164a0bc39d144dd204627a9ead7543) ) |
| 765 | 769 | |
| 766 | | ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter? */ |
| 770 | ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter? */ |
| 767 | 771 | ROM_LOAD( "ninjemak.5", 0x0000, 0x4000, CRC(5f91dd30) SHA1(3513c0a2e4ca83f602cacad6af9c07fe9e4b16a1) ) /* text layer data */ |
| 768 | 772 | |
| 769 | 773 | ROM_REGION( 0x0400, "proms", 0 ) /* Region 3 - color data */ |
| r243692 | r243693 | |
| 805 | 809 | ROM_LOAD( "ninjemak.7", 0x0000, 0x4000, CRC(80c20d36) SHA1(f20724754824030d62059388f3ea2224f5b7a60e) ) |
| 806 | 810 | ROM_LOAD( "ninjemak.6", 0x4000, 0x4000, CRC(1da7a651) SHA1(5307452058164a0bc39d144dd204627a9ead7543) ) |
| 807 | 811 | |
| 808 | | ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter? */ |
| 812 | ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter? */ |
| 809 | 813 | ROM_LOAD( "ync-5.bin", 0x0000, 0x4000, CRC(993e4ab2) SHA1(aceafc83b36db4db923d27f77ad045e626678bae) ) /* text layer data */ |
| 810 | 814 | |
| 811 | 815 | ROM_REGION( 0x0400, "proms", 0 ) /* Region 3 - color data */ |
| r243692 | r243693 | |
| 847 | 851 | ROM_LOAD( "ninjemak.7", 0x0000, 0x4000, CRC(80c20d36) SHA1(f20724754824030d62059388f3ea2224f5b7a60e) ) |
| 848 | 852 | ROM_LOAD( "ninjemak.6", 0x4000, 0x4000, CRC(1da7a651) SHA1(5307452058164a0bc39d144dd204627a9ead7543) ) |
| 849 | 853 | |
| 850 | | ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter? */ |
| 854 | ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter? */ |
| 851 | 855 | ROM_LOAD( "5.15d", 0x0000, 0x4000, CRC(1b4f64aa) SHA1(2cb2db946bf93e0928d6aa2e2dd29acb92981567) ) /* text layer data x */ |
| 852 | 856 | |
| 853 | 857 | ROM_REGION( 0x0400, "proms", 0 ) /* Region 3 - color data */ |
| r243692 | r243693 | |
| 1093 | 1097 | GAME( 1986, ninjemak, 0, ninjemak, ninjemak, driver_device, 0, ROT270, "Nichibutsu", "Ninja Emaki (US)", GAME_SUPPORTS_SAVE|GAME_UNEMULATED_PROTECTION ) |
| 1094 | 1098 | GAME( 1986, youma, ninjemak, ninjemak, ninjemak, driver_device, 0, ROT270, "Nichibutsu", "Youma Ninpou Chou (Japan)", GAME_SUPPORTS_SAVE|GAME_UNEMULATED_PROTECTION ) |
| 1095 | 1099 | GAME( 1986, youma2, ninjemak, ninjemak, ninjemak, driver_device, 0, ROT270, "Nichibutsu", "Youma Ninpou Chou (Japan, alt)", GAME_SUPPORTS_SAVE|GAME_UNEMULATED_PROTECTION ) |
| 1096 | | GAME( 1986, youmab, ninjemak, ninjemak, ninjemak, galivan_state, youmab, ROT270, "bootleg", "Youma Ninpou Chou (Game Electronics bootleg, set 1)", GAME_NOT_WORKING|GAME_SUPPORTS_SAVE|GAME_UNEMULATED_PROTECTION ) // player is invincible |
| 1097 | | GAME( 1986, youmab2, ninjemak, ninjemak, ninjemak, galivan_state, youmab, ROT270, "bootleg", "Youma Ninpou Chou (Game Electronics bootleg, set 2)", GAME_NOT_WORKING|GAME_SUPPORTS_SAVE|GAME_UNEMULATED_PROTECTION ) // "" |
| 1100 | GAME( 1986, youmab, ninjemak, youmab, ninjemak, galivan_state, youmab, ROT270, "bootleg", "Youma Ninpou Chou (Game Electronics bootleg, set 1)", GAME_NOT_WORKING|GAME_SUPPORTS_SAVE|GAME_UNEMULATED_PROTECTION ) // player is invincible |
| 1101 | GAME( 1986, youmab2, ninjemak, youmab, ninjemak, galivan_state, youmab, ROT270, "bootleg", "Youma Ninpou Chou (Game Electronics bootleg, set 2)", GAME_NOT_WORKING|GAME_SUPPORTS_SAVE|GAME_UNEMULATED_PROTECTION ) // "" |
trunk/src/mame/machine/nb1414m4.c
| r243692 | r243693 | |
| 14 | 14 | - Ninja Emaki triggers unknown commands 0x8000 & 0xff20; |
| 15 | 15 | - Ninja Emaki continue screen is corrupt; |
| 16 | 16 | - How to NOT draw the params? |
| 17 | | - Device-ify this; |
| 18 | 17 | |
| 19 | 18 | Notes: |
| 20 | 19 | - Just before any string in the "MCU" rom, there's a control byte, this meaning is as follows: |
| r243692 | r243693 | |
| 31 | 30 | #include "emu.h" |
| 32 | 31 | #include "includes/nb1414m4.h" |
| 33 | 32 | |
| 34 | | static void nichibutsu_1414m4_dma(address_space &space,UINT16 src,UINT16 dst,UINT16 size, UINT8 condition,UINT8 *vram) |
| 33 | const device_type NB1414M4 = &device_creator<nb1414m4_device>; |
| 34 | |
| 35 | nb1414m4_device::nb1414m4_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 36 | : device_t(mconfig, NB1414M4, "NB1414M4 Mahjong Custom", tag, owner, clock, "nb1414m4", __FILE__), |
| 37 | device_video_interface(mconfig, *this), |
| 38 | m_data(NULL) |
| 35 | 39 | { |
| 36 | | UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base(); |
| 40 | } |
| 41 | |
| 42 | |
| 43 | //------------------------------------------------- |
| 44 | // device_start - device-specific startup |
| 45 | //------------------------------------------------- |
| 46 | |
| 47 | void nb1414m4_device::device_start() |
| 48 | { |
| 49 | m_data = region()->base(); |
| 50 | } |
| 51 | |
| 52 | //------------------------------------------------- |
| 53 | // device_reset - device-specific startup |
| 54 | //------------------------------------------------- |
| 55 | |
| 56 | void nb1414m4_device::device_reset() |
| 57 | { |
| 58 | |
| 59 | } |
| 60 | |
| 61 | /***************************************************************************** |
| 62 | DEVICE HANDLERS |
| 63 | *****************************************************************************/ |
| 64 | |
| 65 | void nb1414m4_device::dma(UINT16 src, UINT16 dst, UINT16 size, UINT8 condition, UINT8 *vram) |
| 66 | { |
| 37 | 67 | int i; |
| 38 | 68 | |
| 39 | 69 | for(i=0;i<size;i++) |
| r243692 | r243693 | |
| 41 | 71 | if(i+dst+0x000 < 18) //avoid param overwrite |
| 42 | 72 | continue; |
| 43 | 73 | |
| 44 | | vram[i+dst+0x000] = (condition) ? (data[i+(0)+src] & 0xff) : 0x20; |
| 74 | vram[i+dst+0x000] = (condition) ? (m_data[i+(0)+src] & 0xff) : 0x20; |
| 45 | 75 | |
| 46 | | vram[i+dst+0x400] = data[i+(size)+src] & 0xff; |
| 76 | vram[i+dst+0x400] = m_data[i+(size)+src] & 0xff; |
| 47 | 77 | } |
| 48 | 78 | } |
| 49 | 79 | |
| 50 | | static void nichibutsu_1414m4_fill(address_space &space,UINT16 dst,UINT8 tile,UINT8 pal,UINT8 *vram) |
| 80 | void nb1414m4_device::fill(UINT16 dst, UINT8 tile, UINT8 pal, UINT8 *vram) |
| 51 | 81 | { |
| 52 | 82 | int i; |
| 53 | 83 | |
| r243692 | r243693 | |
| 61 | 91 | } |
| 62 | 92 | } |
| 63 | 93 | |
| 64 | | static void insert_coin_msg(address_space &space,UINT8 *vram) |
| 94 | void nb1414m4_device::insert_coin_msg(UINT8 *vram) |
| 65 | 95 | { |
| 66 | | UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base(); |
| 67 | 96 | int credit_count = (vram[0xf] & 0xff); |
| 68 | | UINT8 fl_cond = space.machine().first_screen()->frame_number() & 0x10; /* for insert coin "flickering" */ |
| 97 | UINT8 fl_cond = m_screen->frame_number() & 0x10; /* for insert coin "flickering" */ |
| 69 | 98 | UINT16 dst; |
| 70 | 99 | |
| 71 | 100 | if(credit_count == 0) |
| 72 | 101 | { |
| 73 | | dst = (data[0x01]<<8|data[0x02]) & 0x3fff; |
| 102 | dst = (m_data[0x01]<<8|m_data[0x02]) & 0x3fff; |
| 74 | 103 | |
| 75 | | nichibutsu_1414m4_dma(space,0x0003,dst,0x10,fl_cond,vram); |
| 104 | dma(0x0003,dst,0x10,fl_cond,vram); |
| 76 | 105 | } |
| 77 | 106 | else |
| 78 | 107 | { |
| 79 | | dst = (data[0x49]<<8|data[0x4a]) & 0x3fff; |
| 108 | dst = (m_data[0x49]<<8|m_data[0x4a]) & 0x3fff; |
| 80 | 109 | |
| 81 | | nichibutsu_1414m4_dma(space,0x004b,dst,0x18,1,vram); |
| 110 | dma(0x004b,dst,0x18,1,vram); |
| 82 | 111 | } |
| 83 | 112 | } |
| 84 | 113 | |
| 85 | | static void credit_msg(address_space &space,UINT8 *vram) |
| 114 | void nb1414m4_device::credit_msg(UINT8 *vram) |
| 86 | 115 | { |
| 87 | | UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base(); |
| 88 | 116 | int credit_count = (vram[0xf] & 0xff); |
| 89 | | UINT8 fl_cond = space.machine().first_screen()->frame_number() & 0x10; /* for insert coin "flickering" */ |
| 117 | UINT8 fl_cond = m_screen->frame_number() & 0x10; /* for insert coin "flickering" */ |
| 90 | 118 | UINT16 dst; |
| 91 | 119 | |
| 92 | | dst = ((data[0x023]<<8)|(data[0x024]&0xff)) & 0x3fff; |
| 93 | | nichibutsu_1414m4_dma(space,0x0025,dst,0x10,1,vram); /* credit */ |
| 120 | dst = ((m_data[0x023]<<8)|(m_data[0x024]&0xff)) & 0x3fff; |
| 121 | dma(0x0025,dst,0x10,1,vram); /* credit */ |
| 94 | 122 | |
| 95 | | dst = ((data[0x045]<<8)|(data[0x046]&0xff)) & 0x3fff; |
| 96 | | dst++; // data is 0x5e, needs to be 0x5f ... |
| 123 | dst = ((m_data[0x045]<<8)|(m_data[0x046]&0xff)) & 0x3fff; |
| 124 | dst++; // m_data is 0x5e, needs to be 0x5f ... |
| 97 | 125 | vram[dst+0x000] = (credit_count + 0x30); /* credit num */ |
| 98 | | vram[dst+0x400] = (data[0x48]); |
| 126 | vram[dst+0x400] = (m_data[0x48]); |
| 99 | 127 | |
| 100 | 128 | if(credit_count == 1) /* ONE PLAYER ONLY */ |
| 101 | 129 | { |
| 102 | | dst = ((data[0x07b]<<8)|(data[0x07c]&0xff)) & 0x3fff; |
| 103 | | nichibutsu_1414m4_dma(space,0x007d,dst,0x18,fl_cond,vram); |
| 130 | dst = ((m_data[0x07b]<<8)|(m_data[0x07c]&0xff)) & 0x3fff; |
| 131 | dma(0x007d,dst,0x18,fl_cond,vram); |
| 104 | 132 | } |
| 105 | 133 | else if(credit_count > 1) /* ONE OR TWO PLAYERS */ |
| 106 | 134 | { |
| 107 | | dst = ((data[0x0ad]<<8)|(data[0x0ae]&0xff)) & 0x3fff; |
| 108 | | nichibutsu_1414m4_dma(space,0x00af,dst,0x18,fl_cond,vram); |
| 135 | dst = ((m_data[0x0ad]<<8)|(m_data[0x0ae]&0xff)) & 0x3fff; |
| 136 | dma(0x00af,dst,0x18,fl_cond,vram); |
| 109 | 137 | } |
| 110 | 138 | } |
| 111 | 139 | |
| 112 | | static void kozure_score_msg(address_space &space,UINT16 dst,UINT8 src_base,UINT8 *vram) |
| 140 | void nb1414m4_device::kozure_score_msg(UINT16 dst, UINT8 src_base, UINT8 *vram) |
| 113 | 141 | { |
| 114 | 142 | int i; |
| 115 | 143 | UINT8 first_digit; |
| 116 | 144 | UINT8 res; |
| 117 | | UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base(); |
| 118 | | |
| 145 | |
| 119 | 146 | first_digit = 0; |
| 120 | 147 | |
| 121 | 148 | for(i=0;i<6;i++) |
| r243692 | r243693 | |
| 130 | 157 | else |
| 131 | 158 | vram[i+dst+0x0000] = 0x20; |
| 132 | 159 | |
| 133 | | vram[i+dst+0x0400] = data[0x10f+(src_base*0x1c)+i]; |
| 160 | vram[i+dst+0x0400] = m_data[0x10f+(src_base*0x1c)+i]; |
| 134 | 161 | } |
| 135 | 162 | |
| 136 | 163 | vram[6+dst+0x0000] = 0x30; |
| 137 | | vram[6+dst+0x0400] = data[0x10f+(src_base*0x1c)+6]; |
| 164 | vram[6+dst+0x0400] = m_data[0x10f+(src_base*0x1c)+6]; |
| 138 | 165 | vram[7+dst+0x0000] = 0x30; |
| 139 | | vram[7+dst+0x0400] = data[0x10f+(src_base*0x1c)+7]; |
| 166 | vram[7+dst+0x0400] = m_data[0x10f+(src_base*0x1c)+7]; |
| 140 | 167 | |
| 141 | 168 | } |
| 142 | 169 | |
| 143 | | static void nichibutsu_1414m4_0200(address_space &space, UINT16 mcu_cmd,UINT8 *vram) |
| 170 | void nb1414m4_device::_0200(UINT16 mcu_cmd, UINT8 *vram) |
| 144 | 171 | { |
| 145 | | UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base(); |
| 146 | 172 | UINT16 dst; |
| 147 | 173 | |
| 148 | | dst = (data[0x330+((mcu_cmd & 0xf)*2)]<<8)|(data[0x331+((mcu_cmd & 0xf)*2)]&0xff); |
| 174 | dst = (m_data[0x330+((mcu_cmd & 0xf)*2)]<<8)|(m_data[0x331+((mcu_cmd & 0xf)*2)]&0xff); |
| 149 | 175 | |
| 150 | 176 | dst &= 0x3fff; |
| 151 | 177 | |
| 152 | 178 | if(dst & 0x7ff) // fill |
| 153 | | nichibutsu_1414m4_fill(space,0x0000,data[dst & 0x3fff],data[dst+1],vram); |
| 179 | fill(0x0000,m_data[dst & 0x3fff],m_data[dst+1],vram); |
| 154 | 180 | else // src -> dst |
| 155 | | nichibutsu_1414m4_dma(space,dst & 0x3fff,0x0000,0x400,1,vram); |
| 181 | dma(dst & 0x3fff,0x0000,0x400,1,vram); |
| 156 | 182 | } |
| 157 | 183 | |
| 158 | 184 | /* |
| r243692 | r243693 | |
| 185 | 211 | [0x10] coinage B |
| 186 | 212 | [0x11] sound test num |
| 187 | 213 | */ |
| 188 | | static void nichibutsu_1414m4_0600(address_space &space, UINT8 is2p,UINT8 *vram) |
| 214 | void nb1414m4_device::_0600(UINT8 is2p, UINT8 *vram) |
| 189 | 215 | { |
| 190 | | UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base(); |
| 191 | 216 | UINT16 dst; |
| 192 | 217 | int i; |
| 193 | 218 | |
| 194 | | dst = ((data[0x1f5]<<8)|(data[0x1f6]&0xff)) & 0x3fff; |
| 195 | | vram[dst] = (vram[7] & 0x7) + 0x30;//data[0x1f7]; |
| 219 | dst = ((m_data[0x1f5]<<8)|(m_data[0x1f6]&0xff)) & 0x3fff; |
| 220 | vram[dst] = (vram[7] & 0x7) + 0x30;//m_data[0x1f7]; |
| 196 | 221 | |
| 197 | | dst = ((data[0x1f8]<<8)|(data[0x1f9]&0xff)) & 0x3fff; |
| 198 | | nichibutsu_1414m4_dma(space,0x1fa + (((vram[7] & 0x30) >> 4) * 0x18),dst,12,1,vram); |
| 222 | dst = ((m_data[0x1f8]<<8)|(m_data[0x1f9]&0xff)) & 0x3fff; |
| 223 | dma(0x1fa + (((vram[7] & 0x30) >> 4) * 0x18),dst,12,1,vram); |
| 199 | 224 | |
| 200 | 225 | // 0x25a - 0x261 unknown meaning |
| 201 | 226 | |
| 202 | | dst = ((data[0x262]<<8)|(data[0x263]&0xff)) & 0x3fff; |
| 203 | | nichibutsu_1414m4_dma(space,0x264 + (((vram[7] & 0x80) >> 7) * 0x18),dst,12,1,vram); |
| 227 | dst = ((m_data[0x262]<<8)|(m_data[0x263]&0xff)) & 0x3fff; |
| 228 | dma(0x264 + (((vram[7] & 0x80) >> 7) * 0x18),dst,12,1,vram); |
| 204 | 229 | |
| 205 | | dst = ((data[0x294]<<8)|(data[0x295]&0xff)) & 0x3fff; |
| 206 | | nichibutsu_1414m4_dma(space,0x296 + (((vram[7] & 0x40) >> 6) * 0x18),dst,12,1,vram); |
| 230 | dst = ((m_data[0x294]<<8)|(m_data[0x295]&0xff)) & 0x3fff; |
| 231 | dma(0x296 + (((vram[7] & 0x40) >> 6) * 0x18),dst,12,1,vram); |
| 207 | 232 | |
| 208 | | dst = ((data[0x2c6]<<8)|(data[0x2c7]&0xff)) & 0x3fff; |
| 209 | | vram[dst] = ((vram[0xf] & 0xf0) >> 4) + 0x30;//data[0x2c8]; |
| 233 | dst = ((m_data[0x2c6]<<8)|(m_data[0x2c7]&0xff)) & 0x3fff; |
| 234 | vram[dst] = ((vram[0xf] & 0xf0) >> 4) + 0x30;//m_data[0x2c8]; |
| 210 | 235 | |
| 211 | | dst = ((data[0x2c9]<<8)|(data[0x2ca]&0xff)) & 0x3fff; |
| 212 | | vram[dst] = ((vram[0xf] & 0x0f) >> 0) + 0x30;//data[0x2cb]; |
| 236 | dst = ((m_data[0x2c9]<<8)|(m_data[0x2ca]&0xff)) & 0x3fff; |
| 237 | vram[dst] = ((vram[0xf] & 0x0f) >> 0) + 0x30;//m_data[0x2cb]; |
| 213 | 238 | |
| 214 | | dst = ((data[0x2cc]<<8)|(data[0x2cd]&0xff)) & 0x3fff; |
| 215 | | vram[dst] = ((vram[0x10] & 0xf0) >> 4) + 0x30;//data[0x2ce]; |
| 239 | dst = ((m_data[0x2cc]<<8)|(m_data[0x2cd]&0xff)) & 0x3fff; |
| 240 | vram[dst] = ((vram[0x10] & 0xf0) >> 4) + 0x30;//m_data[0x2ce]; |
| 216 | 241 | |
| 217 | | dst = ((data[0x2cf]<<8)|(data[0x2d0]&0xff)) & 0x3fff; |
| 218 | | vram[dst] = ((vram[0x10] & 0x0f) >> 0) + 0x30;//data[0x2d1]; |
| 242 | dst = ((m_data[0x2cf]<<8)|(m_data[0x2d0]&0xff)) & 0x3fff; |
| 243 | vram[dst] = ((vram[0x10] & 0x0f) >> 0) + 0x30;//m_data[0x2d1]; |
| 219 | 244 | |
| 220 | | dst = ((data[0x2d2]<<8)|(data[0x2d3]&0xff)) & 0x3fff; |
| 221 | | vram[dst+0] = ((vram[0x11] & 0xf0) >> 4) + 0x30;//data[0x2d4]; |
| 222 | | vram[dst+1] = (vram[0x11] & 0x0f) + 0x30;//data[0x2d5]; |
| 245 | dst = ((m_data[0x2d2]<<8)|(m_data[0x2d3]&0xff)) & 0x3fff; |
| 246 | vram[dst+0] = ((vram[0x11] & 0xf0) >> 4) + 0x30;//m_data[0x2d4]; |
| 247 | vram[dst+1] = (vram[0x11] & 0x0f) + 0x30;//m_data[0x2d5]; |
| 223 | 248 | |
| 224 | | dst = ((data[0x2d6]<<8)|(data[0x2d7]&0xff)) & 0x3fff; |
| 225 | | nichibutsu_1414m4_dma(space,0x2d8 + (is2p * 0x18),dst,12,1,vram); // 1p / 2p string |
| 249 | dst = ((m_data[0x2d6]<<8)|(m_data[0x2d7]&0xff)) & 0x3fff; |
| 250 | dma(0x2d8 + (is2p * 0x18),dst,12,1,vram); // 1p / 2p string |
| 226 | 251 | |
| 227 | | dst = ((data[0x308]<<8)|(data[0x309]&0xff)) & 0x3fff; |
| 252 | dst = ((m_data[0x308]<<8)|(m_data[0x309]&0xff)) & 0x3fff; |
| 228 | 253 | for(i=0;i<5;i++) /* system inputs */ |
| 229 | | nichibutsu_1414m4_dma(space,0x310 + (((vram[0x04] >> (4-i)) & 1) * 6),dst + (i * 0x20),0x3,1,vram); |
| 254 | dma(0x310 + (((vram[0x04] >> (4-i)) & 1) * 6),dst + (i * 0x20),0x3,1,vram); |
| 230 | 255 | |
| 231 | | dst = ((data[0x30a]<<8)|(data[0x30b]&0xff)) & 0x3fff; |
| 256 | dst = ((m_data[0x30a]<<8)|(m_data[0x30b]&0xff)) & 0x3fff; |
| 232 | 257 | for(i=0;i<7;i++) /* 1p / 2p inputs */ |
| 233 | | nichibutsu_1414m4_dma(space,0x310 + (((vram[0x02 + is2p] >> (6-i)) & 1) * 6),dst + (i * 0x20),0x3,1,vram); |
| 258 | dma(0x310 + (((vram[0x02 + is2p] >> (6-i)) & 1) * 6),dst + (i * 0x20),0x3,1,vram); |
| 234 | 259 | |
| 235 | | dst = ((data[0x30c]<<8)|(data[0x30d]&0xff)) & 0x3fff; |
| 260 | dst = ((m_data[0x30c]<<8)|(m_data[0x30d]&0xff)) & 0x3fff; |
| 236 | 261 | for(i=0;i<8;i++) /* dips */ |
| 237 | | nichibutsu_1414m4_dma(space,0x310 + (((vram[0x05] >> (7-i)) & 1) * 6),dst + (i * 0x20),0x3,1,vram); |
| 262 | dma(0x310 + (((vram[0x05] >> (7-i)) & 1) * 6),dst + (i * 0x20),0x3,1,vram); |
| 238 | 263 | |
| 239 | | dst = ((data[0x30e]<<8)|(data[0x30f]&0xff)) & 0x3fff; |
| 264 | dst = ((m_data[0x30e]<<8)|(m_data[0x30f]&0xff)) & 0x3fff; |
| 240 | 265 | for(i=0;i<8;i++) /* dips */ |
| 241 | | nichibutsu_1414m4_dma(space,0x310 + (((vram[0x06] >> (7-i)) & 1) * 6),dst + (i * 0x20),0x3,1,vram); |
| 266 | dma(0x310 + (((vram[0x06] >> (7-i)) & 1) * 6),dst + (i * 0x20),0x3,1,vram); |
| 242 | 267 | } |
| 243 | 268 | |
| 244 | | static void nichibutsu_1414m4_0e00(address_space &space,UINT16 mcu_cmd,UINT8 *vram) |
| 269 | void nb1414m4_device::_0e00(UINT16 mcu_cmd, UINT8 *vram) |
| 245 | 270 | { |
| 246 | | UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base(); |
| 247 | 271 | UINT16 dst; |
| 248 | 272 | |
| 249 | | dst = ((data[0xdf]<<8)|(data[0xe0]&0xff)) & 0x3fff; |
| 250 | | nichibutsu_1414m4_dma(space,0x00e1,dst,8,1,vram); /* hi-score */ |
| 273 | dst = ((m_data[0xdf]<<8)|(m_data[0xe0]&0xff)) & 0x3fff; |
| 274 | dma(0x00e1,dst,8,1,vram); /* hi-score */ |
| 251 | 275 | |
| 252 | 276 | if(mcu_cmd & 0x04) |
| 253 | 277 | { |
| 254 | | dst = ((data[0xfb]<<8)|(data[0xfc]&0xff)) & 0x3fff; |
| 255 | | nichibutsu_1414m4_dma(space,0x00fd,dst,8,!(mcu_cmd & 1),vram); /* 1p-msg */ |
| 256 | | dst = ((data[0x10d]<<8)|(data[0x10e]&0xff)) & 0x3fff; |
| 257 | | kozure_score_msg(space,dst,0,vram); /* 1p score */ |
| 278 | dst = ((m_data[0xfb]<<8)|(m_data[0xfc]&0xff)) & 0x3fff; |
| 279 | dma(0x00fd,dst,8,!(mcu_cmd & 1),vram); /* 1p-msg */ |
| 280 | dst = ((m_data[0x10d]<<8)|(m_data[0x10e]&0xff)) & 0x3fff; |
| 281 | kozure_score_msg(dst,0,vram); /* 1p score */ |
| 258 | 282 | if(mcu_cmd & 0x80) |
| 259 | 283 | { |
| 260 | | dst = ((data[0x117]<<8)|(data[0x118]&0xff)) & 0x3fff; |
| 261 | | nichibutsu_1414m4_dma(space,0x0119,dst,8,!(mcu_cmd & 2),vram); /* 2p-msg */ |
| 262 | | dst = ((data[0x129]<<8)|(data[0x12a]&0xff)) & 0x3fff; |
| 263 | | kozure_score_msg(space,dst,1,vram); /* 2p score */ |
| 284 | dst = ((m_data[0x117]<<8)|(m_data[0x118]&0xff)) & 0x3fff; |
| 285 | dma(0x0119,dst,8,!(mcu_cmd & 2),vram); /* 2p-msg */ |
| 286 | dst = ((m_data[0x129]<<8)|(m_data[0x12a]&0xff)) & 0x3fff; |
| 287 | kozure_score_msg(dst,1,vram); /* 2p score */ |
| 264 | 288 | } |
| 265 | 289 | } |
| 266 | 290 | else |
| 267 | 291 | { |
| 268 | | dst = ((data[0x133]<<8)|(data[0x134]&0xff)) & 0x3fff; |
| 269 | | nichibutsu_1414m4_dma(space,0x0135,dst,0x10,!(mcu_cmd & 1),vram); /* game over */ |
| 270 | | insert_coin_msg(space,vram); |
| 292 | dst = ((m_data[0x133]<<8)|(m_data[0x134]&0xff)) & 0x3fff; |
| 293 | dma(0x0135,dst,0x10,!(mcu_cmd & 1),vram); /* game over */ |
| 294 | insert_coin_msg(vram); |
| 271 | 295 | if((mcu_cmd & 0x18) == 0) // TODO: either one of these two disables credit display |
| 272 | | credit_msg(space,vram); |
| 296 | credit_msg(vram); |
| 273 | 297 | } |
| 274 | 298 | } |
| 275 | 299 | |
| 276 | | void nb_1414m4_exec(address_space &space,UINT16 mcu_cmd,UINT8 *vram,UINT16 &scrollx,UINT16 &scrolly,tilemap_t *tilemap) |
| 300 | void nb1414m4_device::exec(UINT16 mcu_cmd, UINT8 *vram, UINT16 &scrollx, UINT16 &scrolly, tilemap_t *tilemap) |
| 277 | 301 | { |
| 278 | 302 | /* latch fg scroll values */ |
| 279 | 303 | scrollx = (vram[0x0d] & 0xff) | ((vram[0x0e] & 0xff) << 8); |
| r243692 | r243693 | |
| 283 | 307 | switch(mcu_cmd & 0xff00) |
| 284 | 308 | { |
| 285 | 309 | /* title screen / continue screens */ |
| 286 | | case 0x0000: insert_coin_msg(space,vram); credit_msg(space,vram); break; |
| 310 | case 0x0000: insert_coin_msg(vram); credit_msg(vram); break; |
| 287 | 311 | |
| 288 | 312 | /* direct DMA'ing / fill */ |
| 289 | | case 0x0200: nichibutsu_1414m4_0200(space,mcu_cmd & 0x87,vram); break; |
| 313 | case 0x0200: _0200(mcu_cmd & 0x87,vram); break; |
| 290 | 314 | |
| 291 | 315 | /* service mode */ |
| 292 | | case 0x0600: nichibutsu_1414m4_0600(space,mcu_cmd & 1,vram); break; |
| 316 | case 0x0600: _0600(mcu_cmd & 1,vram); break; |
| 293 | 317 | |
| 294 | 318 | /* gameplay */ |
| 295 | | case 0x0e00: nichibutsu_1414m4_0e00(space,mcu_cmd & 0xff,vram); break; |
| 319 | case 0x0e00: _0e00(mcu_cmd & 0xff,vram); break; |
| 296 | 320 | |
| 297 | 321 | case 0x8000: break; //Ninja Emaki, attract mode |
| 298 | 322 | case 0xff00: break; //Ninja Emaki POST, presumably invalid |