mirror of
https://github.com/holub/mame
synced 2025-04-23 08:49:55 +03:00
nb1414m4.c: converted to a device, no functional change expected (nw)
This commit is contained in:
parent
0edcf59a50
commit
41fd6c25d8
@ -293,7 +293,6 @@ Notes:
|
||||
#include "sound/dac.h"
|
||||
#include "sound/3812intf.h"
|
||||
#include "includes/armedf.h"
|
||||
#include "includes/nb1414m4.h"
|
||||
|
||||
#define LEGION_HACK 0
|
||||
|
||||
@ -318,7 +317,7 @@ Notes:
|
||||
WRITE16_MEMBER(armedf_state::terraf_io_w)
|
||||
{
|
||||
if(data & 0x4000 && ((m_vreg & 0x4000) == 0)) //0 -> 1 transition
|
||||
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);
|
||||
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);
|
||||
|
||||
|
||||
COMBINE_DATA(&m_vreg);
|
||||
@ -477,7 +476,7 @@ static ADDRESS_MAP_START( legiono_map, AS_PROGRAM, 16, armedf_state )
|
||||
AM_RANGE(0x060000, 0x060fff) AM_RAM AM_SHARE("spriteram")
|
||||
AM_RANGE(0x061000, 0x063fff) AM_RAM
|
||||
AM_RANGE(0x064000, 0x064fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
|
||||
AM_RANGE(0x068000, 0x069fff) AM_READWRITE8(nb1414m4_text_videoram_r,nb1414m4_text_videoram_w,0x00ff)
|
||||
AM_RANGE(0x068000, 0x069fff) AM_READWRITE8(armedf_text_videoram_r,armedf_text_videoram_w,0x00ff)
|
||||
AM_RANGE(0x06a000, 0x06a9ff) AM_RAM
|
||||
AM_RANGE(0x06c000, 0x06cfff) AM_RAM AM_SHARE("spr_pal_clut")
|
||||
AM_RANGE(0x070000, 0x070fff) AM_RAM_WRITE(armedf_fg_videoram_w) AM_SHARE("fg_videoram")
|
||||
@ -1179,6 +1178,8 @@ static MACHINE_CONFIG_START( terraf, armedf_state )
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(armedf_state,armedf)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(armedf_state,armedf)
|
||||
|
||||
MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -1276,6 +1277,8 @@ static MACHINE_CONFIG_START( kozure, armedf_state )
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(armedf_state,armedf)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(armedf_state,armedf)
|
||||
|
||||
MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -1368,6 +1371,8 @@ static MACHINE_CONFIG_START( cclimbr2, armedf_state )
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(armedf_state,armedf)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(armedf_state,armedf)
|
||||
|
||||
MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -1414,6 +1419,8 @@ static MACHINE_CONFIG_START( legion, armedf_state )
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(armedf_state,armedf)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(armedf_state,armedf)
|
||||
|
||||
MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
@ -1461,6 +1468,7 @@ static MACHINE_CONFIG_START( legiono, armedf_state )
|
||||
MCFG_MACHINE_START_OVERRIDE(armedf_state,armedf)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(armedf_state,armedf)
|
||||
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
@ -1580,7 +1588,7 @@ ROM_START( legion )
|
||||
ROM_LOAD( "legion.1k", 0x000000, 0x010000, CRC(ff5a0db9) SHA1(9308deb363d3b7686cc69485ec14201dd68f9a97) ) // lg12
|
||||
ROM_LOAD( "legion.1j", 0x010000, 0x010000, CRC(bae220c8) SHA1(392ae0fb0351dcad7b0e8e0ed4a1dc6e07f493df) ) // lg11
|
||||
|
||||
ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter */
|
||||
ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */
|
||||
ROM_LOAD ( "lg7.bin", 0x0000, 0x4000, CRC(533e2b58) SHA1(a13ea4a530038760ffa87713903c59a932452717) )
|
||||
ROM_END
|
||||
|
||||
@ -1637,7 +1645,7 @@ ROM_START( terraf )
|
||||
ROM_LOAD( "12.7d", 0x00000, 0x10000, CRC(2d1f2ceb) SHA1(77544e1c4bda06feac135a96bb76af7c79278dc0) ) /* sprites */
|
||||
ROM_LOAD( "13.9d", 0x10000, 0x10000, CRC(1d2f92d6) SHA1(e842c6bf95a5958a6ca2c85e68b9bc3cc15211a4) )
|
||||
|
||||
ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter */
|
||||
ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */
|
||||
ROM_LOAD( "10.11c", 0x0000, 0x4000, CRC(ac705812) SHA1(65be46ee959d8478cb6dffb25e61f7742276997b) )
|
||||
|
||||
ROM_REGION( 0x0100, "proms", 0 ) /* Unknown use */
|
||||
@ -1671,7 +1679,7 @@ ROM_START( terrafu ) /* Bootleg of the USA version?, uses some roms common to bo
|
||||
ROM_LOAD( "tf-003.7d", 0x00000, 0x10000, CRC(d74085a1) SHA1(3f6ba85dbd6e48a502c115b2d322a586fc4f56c9) ) /* sprites */
|
||||
ROM_LOAD( "tf-002.9d", 0x10000, 0x10000, CRC(148aa0c5) SHA1(8d8a565540e91b384a9c154522501921b7da4d4e) )
|
||||
|
||||
ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter */
|
||||
ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */
|
||||
ROM_LOAD( "10.11c", 0x0000, 0x4000, CRC(ac705812) SHA1(65be46ee959d8478cb6dffb25e61f7742276997b) )
|
||||
|
||||
ROM_REGION( 0x0100, "proms", 0 ) /* Unknown use */
|
||||
@ -1705,7 +1713,7 @@ ROM_START( terrafj )
|
||||
ROM_LOAD( "tfj-12.7d", 0x00000, 0x10000, CRC(d74085a1) SHA1(3f6ba85dbd6e48a502c115b2d322a586fc4f56c9) ) /* sprites */
|
||||
ROM_LOAD( "tfj-13.9d", 0x10000, 0x10000, CRC(148aa0c5) SHA1(8d8a565540e91b384a9c154522501921b7da4d4e) )
|
||||
|
||||
ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter */
|
||||
ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */
|
||||
ROM_LOAD( "10.11c", 0x0000, 0x4000, CRC(ac705812) SHA1(65be46ee959d8478cb6dffb25e61f7742276997b) )
|
||||
|
||||
ROM_REGION( 0x0100, "proms", 0 ) /* Unknown use */
|
||||
@ -1846,7 +1854,7 @@ ROM_START( kozure )
|
||||
ROM_LOAD( "kozure12.8d", 0x00000, 0x20000, CRC(15f4021d) SHA1(b2ba6fda1a7bdaae97de4b0157b9b656b4385e08) ) /* sprites */
|
||||
ROM_LOAD( "kozure13.9d", 0x20000, 0x20000, CRC(b3b6c753) SHA1(9ad061cac9558320b5cfd1ac1ac8d7f1788270cc) )
|
||||
|
||||
ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter */
|
||||
ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */
|
||||
ROM_LOAD( "kozure10.11c", 0x0000, 0x4000, CRC(f48be21d) SHA1(5d6db049f30cab98f672814a86a06609c1fa8fb4) )
|
||||
|
||||
ROM_REGION( 0x0100, "proms", 0 ) /* Unknown use */
|
||||
@ -1883,7 +1891,7 @@ ROM_START( cclimbr2 )
|
||||
ROM_LOAD( "13.bin", 0x20000, 0x10000, CRC(6b6ec999) SHA1(7749ce435f497732bd1b6958974cd95e960fc9fe) )
|
||||
ROM_LOAD( "14.bin", 0x30000, 0x10000, CRC(f426a4ad) SHA1(facccb21ca73c560d3a38e05e677782516d5b0c0) )
|
||||
|
||||
ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter */
|
||||
ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */
|
||||
ROM_LOAD( "9.bin", 0x0000, 0x4000, CRC(740d260f) SHA1(5b4487930c7a1fb0a796aec2243bec631b1b5104) )
|
||||
ROM_END
|
||||
|
||||
@ -1917,7 +1925,7 @@ ROM_START( cclimbr2a )
|
||||
ROM_LOAD( "13.bin", 0x20000, 0x10000, CRC(6b6ec999) SHA1(7749ce435f497732bd1b6958974cd95e960fc9fe) )
|
||||
ROM_LOAD( "14.bin", 0x30000, 0x10000, CRC(f426a4ad) SHA1(facccb21ca73c560d3a38e05e677782516d5b0c0) )
|
||||
|
||||
ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter */
|
||||
ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter */
|
||||
ROM_LOAD( "9.bin", 0x0000, 0x4000, CRC(740d260f) SHA1(5b4487930c7a1fb0a796aec2243bec631b1b5104) )
|
||||
ROM_END
|
||||
|
||||
@ -2120,6 +2128,8 @@ DRIVER_INIT_MEMBER(armedf_state,legiono)
|
||||
m_maincpu->space(AS_PROGRAM).install_write_handler(0x07c000, 0x07c001, write16_delegate(FUNC(armedf_state::bootleg_io_w),this));
|
||||
|
||||
m_scroll_type = 2;
|
||||
|
||||
save_item(NAME(m_legion_cmd));
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(armedf_state,cclimbr2)
|
||||
|
@ -32,7 +32,6 @@ Takahiro Nogi (nogi@kt.rim.or.jp) 1999/12/17 -
|
||||
#include "sound/dac.h"
|
||||
#include "sound/3526intf.h"
|
||||
#include "includes/galivan.h"
|
||||
#include "includes/nb1414m4.h"
|
||||
|
||||
|
||||
WRITE8_MEMBER(galivan_state::galivan_sound_command_w)
|
||||
@ -91,7 +90,7 @@ ADDRESS_MAP_END
|
||||
|
||||
WRITE8_MEMBER(galivan_state::blit_trigger_w)
|
||||
{
|
||||
nb_1414m4_exec(space,(m_videoram[0] << 8) | (m_videoram[1] & 0xff),m_videoram,m_scrollx,m_scrolly,m_tx_tilemap);
|
||||
m_nb1414m4->exec((m_videoram[0] << 8) | (m_videoram[1] & 0xff),m_videoram,m_scrollx,m_scrolly,m_tx_tilemap);
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( ninjemak_io_map, AS_IO, 8, galivan_state )
|
||||
@ -472,6 +471,8 @@ static MACHINE_CONFIG_START( ninjemak, galivan_state )
|
||||
|
||||
MCFG_MACHINE_START_OVERRIDE(galivan_state,ninjemak)
|
||||
MCFG_MACHINE_RESET_OVERRIDE(galivan_state,ninjemak)
|
||||
|
||||
MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_BUFFERED_SPRITERAM8_ADD("spriteram")
|
||||
@ -505,7 +506,10 @@ static MACHINE_CONFIG_START( ninjemak, galivan_state )
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
||||
MACHINE_CONFIG_DERIVED(youmab, ninjemak)
|
||||
|
||||
MCFG_DEVICE_REMOVE("nb1414m4")
|
||||
MACHINE_CONFIG_END
|
||||
/***************************************************************************
|
||||
|
||||
Game driver(s)
|
||||
@ -763,7 +767,7 @@ ROM_START( ninjemak )
|
||||
ROM_LOAD( "ninjemak.7", 0x0000, 0x4000, CRC(80c20d36) SHA1(f20724754824030d62059388f3ea2224f5b7a60e) )
|
||||
ROM_LOAD( "ninjemak.6", 0x4000, 0x4000, CRC(1da7a651) SHA1(5307452058164a0bc39d144dd204627a9ead7543) )
|
||||
|
||||
ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter? */
|
||||
ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter? */
|
||||
ROM_LOAD( "ninjemak.5", 0x0000, 0x4000, CRC(5f91dd30) SHA1(3513c0a2e4ca83f602cacad6af9c07fe9e4b16a1) ) /* text layer data */
|
||||
|
||||
ROM_REGION( 0x0400, "proms", 0 ) /* Region 3 - color data */
|
||||
@ -805,7 +809,7 @@ ROM_START( youma )
|
||||
ROM_LOAD( "ninjemak.7", 0x0000, 0x4000, CRC(80c20d36) SHA1(f20724754824030d62059388f3ea2224f5b7a60e) )
|
||||
ROM_LOAD( "ninjemak.6", 0x4000, 0x4000, CRC(1da7a651) SHA1(5307452058164a0bc39d144dd204627a9ead7543) )
|
||||
|
||||
ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter? */
|
||||
ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter? */
|
||||
ROM_LOAD( "ync-5.bin", 0x0000, 0x4000, CRC(993e4ab2) SHA1(aceafc83b36db4db923d27f77ad045e626678bae) ) /* text layer data */
|
||||
|
||||
ROM_REGION( 0x0400, "proms", 0 ) /* Region 3 - color data */
|
||||
@ -847,7 +851,7 @@ ROM_START( youma2 )
|
||||
ROM_LOAD( "ninjemak.7", 0x0000, 0x4000, CRC(80c20d36) SHA1(f20724754824030d62059388f3ea2224f5b7a60e) )
|
||||
ROM_LOAD( "ninjemak.6", 0x4000, 0x4000, CRC(1da7a651) SHA1(5307452058164a0bc39d144dd204627a9ead7543) )
|
||||
|
||||
ROM_REGION( 0x4000, "blit_data", 0 ) /* data for mcu/blitter? */
|
||||
ROM_REGION( 0x4000, "nb1414m4", 0 ) /* data for mcu/blitter? */
|
||||
ROM_LOAD( "5.15d", 0x0000, 0x4000, CRC(1b4f64aa) SHA1(2cb2db946bf93e0928d6aa2e2dd29acb92981567) ) /* text layer data x */
|
||||
|
||||
ROM_REGION( 0x0400, "proms", 0 ) /* Region 3 - color data */
|
||||
@ -1093,5 +1097,5 @@ GAME( 1986, dangarb, dangar, galivan, dangarb, driver_device, 0, ROT270, "b
|
||||
GAME( 1986, ninjemak, 0, ninjemak, ninjemak, driver_device, 0, ROT270, "Nichibutsu", "Ninja Emaki (US)", GAME_SUPPORTS_SAVE|GAME_UNEMULATED_PROTECTION )
|
||||
GAME( 1986, youma, ninjemak, ninjemak, ninjemak, driver_device, 0, ROT270, "Nichibutsu", "Youma Ninpou Chou (Japan)", GAME_SUPPORTS_SAVE|GAME_UNEMULATED_PROTECTION )
|
||||
GAME( 1986, youma2, ninjemak, ninjemak, ninjemak, driver_device, 0, ROT270, "Nichibutsu", "Youma Ninpou Chou (Japan, alt)", GAME_SUPPORTS_SAVE|GAME_UNEMULATED_PROTECTION )
|
||||
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
|
||||
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 ) // ""
|
||||
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
|
||||
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 ) // ""
|
||||
|
@ -1,3 +1,4 @@
|
||||
#include "includes/nb1414m4.h"
|
||||
#include "video/bufsprite.h"
|
||||
|
||||
class armedf_state : public driver_device
|
||||
@ -7,6 +8,7 @@ public:
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_extra(*this, "extra"),
|
||||
m_nb1414m4(*this, "nb1414m4"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette"),
|
||||
m_spriteram(*this, "spriteram"),
|
||||
@ -18,6 +20,7 @@ public:
|
||||
/* devices */
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_device<cpu_device> m_extra;
|
||||
optional_device<nb1414m4_device> m_nb1414m4;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
required_device<buffered_spriteram16_device> m_spriteram;
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
#include "includes/nb1414m4.h"
|
||||
#include "video/bufsprite.h"
|
||||
|
||||
class galivan_state : public driver_device
|
||||
@ -14,6 +15,7 @@ public:
|
||||
m_videoram(*this, "videoram"),
|
||||
m_spriteram(*this, "spriteram"),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_nb1414m4(*this, "nb1414m4"),
|
||||
m_gfxdecode(*this, "gfxdecode"),
|
||||
m_palette(*this, "palette") { }
|
||||
|
||||
@ -63,6 +65,7 @@ public:
|
||||
UINT32 screen_update_ninjemak(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
|
||||
required_device<cpu_device> m_maincpu;
|
||||
optional_device<nb1414m4_device> m_nb1414m4;
|
||||
required_device<gfxdecode_device> m_gfxdecode;
|
||||
required_device<palette_device> m_palette;
|
||||
};
|
||||
|
@ -1 +1,29 @@
|
||||
void nb_1414m4_exec(address_space &space,UINT16 mcu_cmd,UINT8 *vram,UINT16 &scrollx,UINT16 &scrolly,tilemap_t *tilemap);
|
||||
class nb1414m4_device : public device_t,
|
||||
public device_video_interface
|
||||
{
|
||||
public:
|
||||
nb1414m4_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
~nb1414m4_device() {}
|
||||
|
||||
void exec(UINT16 mcu_cmd, UINT8 *vram, UINT16 &scrollx, UINT16 &scrolly, tilemap_t *tilemap);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
|
||||
private:
|
||||
void dma(UINT16 src, UINT16 dst, UINT16 size, UINT8 condition, UINT8 *vram);
|
||||
void fill(UINT16 dst, UINT8 tile, UINT8 pal, UINT8 *vram);
|
||||
void insert_coin_msg(UINT8 *vram);
|
||||
void credit_msg(UINT8 *vram);
|
||||
void kozure_score_msg(UINT16 dst, UINT8 src_base, UINT8 *vram);
|
||||
void _0200(UINT16 mcu_cmd, UINT8 *vram);
|
||||
void _0600(UINT8 is2p, UINT8 *vram);
|
||||
void _0e00(UINT16 mcu_cmd, UINT8 *vram);
|
||||
|
||||
UINT8 *m_data;
|
||||
|
||||
};
|
||||
|
||||
extern const device_type NB1414M4;
|
||||
|
@ -14,7 +14,6 @@ TODO:
|
||||
- Ninja Emaki triggers unknown commands 0x8000 & 0xff20;
|
||||
- Ninja Emaki continue screen is corrupt;
|
||||
- How to NOT draw the params?
|
||||
- Device-ify this;
|
||||
|
||||
Notes:
|
||||
- Just before any string in the "MCU" rom, there's a control byte, this meaning is as follows:
|
||||
@ -31,9 +30,40 @@ Notes:
|
||||
#include "emu.h"
|
||||
#include "includes/nb1414m4.h"
|
||||
|
||||
static void nichibutsu_1414m4_dma(address_space &space,UINT16 src,UINT16 dst,UINT16 size, UINT8 condition,UINT8 *vram)
|
||||
const device_type NB1414M4 = &device_creator<nb1414m4_device>;
|
||||
|
||||
nb1414m4_device::nb1414m4_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, NB1414M4, "NB1414M4 Mahjong Custom", tag, owner, clock, "nb1414m4", __FILE__),
|
||||
device_video_interface(mconfig, *this),
|
||||
m_data(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void nb1414m4_device::device_start()
|
||||
{
|
||||
m_data = region()->base();
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_reset - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void nb1414m4_device::device_reset()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
DEVICE HANDLERS
|
||||
*****************************************************************************/
|
||||
|
||||
void nb1414m4_device::dma(UINT16 src, UINT16 dst, UINT16 size, UINT8 condition, UINT8 *vram)
|
||||
{
|
||||
UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base();
|
||||
int i;
|
||||
|
||||
for(i=0;i<size;i++)
|
||||
@ -41,13 +71,13 @@ static void nichibutsu_1414m4_dma(address_space &space,UINT16 src,UINT16 dst,UIN
|
||||
if(i+dst+0x000 < 18) //avoid param overwrite
|
||||
continue;
|
||||
|
||||
vram[i+dst+0x000] = (condition) ? (data[i+(0)+src] & 0xff) : 0x20;
|
||||
vram[i+dst+0x000] = (condition) ? (m_data[i+(0)+src] & 0xff) : 0x20;
|
||||
|
||||
vram[i+dst+0x400] = data[i+(size)+src] & 0xff;
|
||||
vram[i+dst+0x400] = m_data[i+(size)+src] & 0xff;
|
||||
}
|
||||
}
|
||||
|
||||
static void nichibutsu_1414m4_fill(address_space &space,UINT16 dst,UINT8 tile,UINT8 pal,UINT8 *vram)
|
||||
void nb1414m4_device::fill(UINT16 dst, UINT8 tile, UINT8 pal, UINT8 *vram)
|
||||
{
|
||||
int i;
|
||||
|
||||
@ -61,61 +91,58 @@ static void nichibutsu_1414m4_fill(address_space &space,UINT16 dst,UINT8 tile,UI
|
||||
}
|
||||
}
|
||||
|
||||
static void insert_coin_msg(address_space &space,UINT8 *vram)
|
||||
void nb1414m4_device::insert_coin_msg(UINT8 *vram)
|
||||
{
|
||||
UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base();
|
||||
int credit_count = (vram[0xf] & 0xff);
|
||||
UINT8 fl_cond = space.machine().first_screen()->frame_number() & 0x10; /* for insert coin "flickering" */
|
||||
UINT8 fl_cond = m_screen->frame_number() & 0x10; /* for insert coin "flickering" */
|
||||
UINT16 dst;
|
||||
|
||||
if(credit_count == 0)
|
||||
{
|
||||
dst = (data[0x01]<<8|data[0x02]) & 0x3fff;
|
||||
dst = (m_data[0x01]<<8|m_data[0x02]) & 0x3fff;
|
||||
|
||||
nichibutsu_1414m4_dma(space,0x0003,dst,0x10,fl_cond,vram);
|
||||
dma(0x0003,dst,0x10,fl_cond,vram);
|
||||
}
|
||||
else
|
||||
{
|
||||
dst = (data[0x49]<<8|data[0x4a]) & 0x3fff;
|
||||
dst = (m_data[0x49]<<8|m_data[0x4a]) & 0x3fff;
|
||||
|
||||
nichibutsu_1414m4_dma(space,0x004b,dst,0x18,1,vram);
|
||||
dma(0x004b,dst,0x18,1,vram);
|
||||
}
|
||||
}
|
||||
|
||||
static void credit_msg(address_space &space,UINT8 *vram)
|
||||
void nb1414m4_device::credit_msg(UINT8 *vram)
|
||||
{
|
||||
UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base();
|
||||
int credit_count = (vram[0xf] & 0xff);
|
||||
UINT8 fl_cond = space.machine().first_screen()->frame_number() & 0x10; /* for insert coin "flickering" */
|
||||
UINT8 fl_cond = m_screen->frame_number() & 0x10; /* for insert coin "flickering" */
|
||||
UINT16 dst;
|
||||
|
||||
dst = ((data[0x023]<<8)|(data[0x024]&0xff)) & 0x3fff;
|
||||
nichibutsu_1414m4_dma(space,0x0025,dst,0x10,1,vram); /* credit */
|
||||
dst = ((m_data[0x023]<<8)|(m_data[0x024]&0xff)) & 0x3fff;
|
||||
dma(0x0025,dst,0x10,1,vram); /* credit */
|
||||
|
||||
dst = ((data[0x045]<<8)|(data[0x046]&0xff)) & 0x3fff;
|
||||
dst++; // data is 0x5e, needs to be 0x5f ...
|
||||
dst = ((m_data[0x045]<<8)|(m_data[0x046]&0xff)) & 0x3fff;
|
||||
dst++; // m_data is 0x5e, needs to be 0x5f ...
|
||||
vram[dst+0x000] = (credit_count + 0x30); /* credit num */
|
||||
vram[dst+0x400] = (data[0x48]);
|
||||
vram[dst+0x400] = (m_data[0x48]);
|
||||
|
||||
if(credit_count == 1) /* ONE PLAYER ONLY */
|
||||
{
|
||||
dst = ((data[0x07b]<<8)|(data[0x07c]&0xff)) & 0x3fff;
|
||||
nichibutsu_1414m4_dma(space,0x007d,dst,0x18,fl_cond,vram);
|
||||
dst = ((m_data[0x07b]<<8)|(m_data[0x07c]&0xff)) & 0x3fff;
|
||||
dma(0x007d,dst,0x18,fl_cond,vram);
|
||||
}
|
||||
else if(credit_count > 1) /* ONE OR TWO PLAYERS */
|
||||
{
|
||||
dst = ((data[0x0ad]<<8)|(data[0x0ae]&0xff)) & 0x3fff;
|
||||
nichibutsu_1414m4_dma(space,0x00af,dst,0x18,fl_cond,vram);
|
||||
dst = ((m_data[0x0ad]<<8)|(m_data[0x0ae]&0xff)) & 0x3fff;
|
||||
dma(0x00af,dst,0x18,fl_cond,vram);
|
||||
}
|
||||
}
|
||||
|
||||
static void kozure_score_msg(address_space &space,UINT16 dst,UINT8 src_base,UINT8 *vram)
|
||||
void nb1414m4_device::kozure_score_msg(UINT16 dst, UINT8 src_base, UINT8 *vram)
|
||||
{
|
||||
int i;
|
||||
UINT8 first_digit;
|
||||
UINT8 res;
|
||||
UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base();
|
||||
|
||||
|
||||
first_digit = 0;
|
||||
|
||||
for(i=0;i<6;i++)
|
||||
@ -130,29 +157,28 @@ static void kozure_score_msg(address_space &space,UINT16 dst,UINT8 src_base,UINT
|
||||
else
|
||||
vram[i+dst+0x0000] = 0x20;
|
||||
|
||||
vram[i+dst+0x0400] = data[0x10f+(src_base*0x1c)+i];
|
||||
vram[i+dst+0x0400] = m_data[0x10f+(src_base*0x1c)+i];
|
||||
}
|
||||
|
||||
vram[6+dst+0x0000] = 0x30;
|
||||
vram[6+dst+0x0400] = data[0x10f+(src_base*0x1c)+6];
|
||||
vram[6+dst+0x0400] = m_data[0x10f+(src_base*0x1c)+6];
|
||||
vram[7+dst+0x0000] = 0x30;
|
||||
vram[7+dst+0x0400] = data[0x10f+(src_base*0x1c)+7];
|
||||
vram[7+dst+0x0400] = m_data[0x10f+(src_base*0x1c)+7];
|
||||
|
||||
}
|
||||
|
||||
static void nichibutsu_1414m4_0200(address_space &space, UINT16 mcu_cmd,UINT8 *vram)
|
||||
void nb1414m4_device::_0200(UINT16 mcu_cmd, UINT8 *vram)
|
||||
{
|
||||
UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base();
|
||||
UINT16 dst;
|
||||
|
||||
dst = (data[0x330+((mcu_cmd & 0xf)*2)]<<8)|(data[0x331+((mcu_cmd & 0xf)*2)]&0xff);
|
||||
dst = (m_data[0x330+((mcu_cmd & 0xf)*2)]<<8)|(m_data[0x331+((mcu_cmd & 0xf)*2)]&0xff);
|
||||
|
||||
dst &= 0x3fff;
|
||||
|
||||
if(dst & 0x7ff) // fill
|
||||
nichibutsu_1414m4_fill(space,0x0000,data[dst & 0x3fff],data[dst+1],vram);
|
||||
fill(0x0000,m_data[dst & 0x3fff],m_data[dst+1],vram);
|
||||
else // src -> dst
|
||||
nichibutsu_1414m4_dma(space,dst & 0x3fff,0x0000,0x400,1,vram);
|
||||
dma(dst & 0x3fff,0x0000,0x400,1,vram);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -185,95 +211,93 @@ static void nichibutsu_1414m4_0200(address_space &space, UINT16 mcu_cmd,UINT8 *v
|
||||
[0x10] coinage B
|
||||
[0x11] sound test num
|
||||
*/
|
||||
static void nichibutsu_1414m4_0600(address_space &space, UINT8 is2p,UINT8 *vram)
|
||||
void nb1414m4_device::_0600(UINT8 is2p, UINT8 *vram)
|
||||
{
|
||||
UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base();
|
||||
UINT16 dst;
|
||||
int i;
|
||||
|
||||
dst = ((data[0x1f5]<<8)|(data[0x1f6]&0xff)) & 0x3fff;
|
||||
vram[dst] = (vram[7] & 0x7) + 0x30;//data[0x1f7];
|
||||
dst = ((m_data[0x1f5]<<8)|(m_data[0x1f6]&0xff)) & 0x3fff;
|
||||
vram[dst] = (vram[7] & 0x7) + 0x30;//m_data[0x1f7];
|
||||
|
||||
dst = ((data[0x1f8]<<8)|(data[0x1f9]&0xff)) & 0x3fff;
|
||||
nichibutsu_1414m4_dma(space,0x1fa + (((vram[7] & 0x30) >> 4) * 0x18),dst,12,1,vram);
|
||||
dst = ((m_data[0x1f8]<<8)|(m_data[0x1f9]&0xff)) & 0x3fff;
|
||||
dma(0x1fa + (((vram[7] & 0x30) >> 4) * 0x18),dst,12,1,vram);
|
||||
|
||||
// 0x25a - 0x261 unknown meaning
|
||||
|
||||
dst = ((data[0x262]<<8)|(data[0x263]&0xff)) & 0x3fff;
|
||||
nichibutsu_1414m4_dma(space,0x264 + (((vram[7] & 0x80) >> 7) * 0x18),dst,12,1,vram);
|
||||
dst = ((m_data[0x262]<<8)|(m_data[0x263]&0xff)) & 0x3fff;
|
||||
dma(0x264 + (((vram[7] & 0x80) >> 7) * 0x18),dst,12,1,vram);
|
||||
|
||||
dst = ((data[0x294]<<8)|(data[0x295]&0xff)) & 0x3fff;
|
||||
nichibutsu_1414m4_dma(space,0x296 + (((vram[7] & 0x40) >> 6) * 0x18),dst,12,1,vram);
|
||||
dst = ((m_data[0x294]<<8)|(m_data[0x295]&0xff)) & 0x3fff;
|
||||
dma(0x296 + (((vram[7] & 0x40) >> 6) * 0x18),dst,12,1,vram);
|
||||
|
||||
dst = ((data[0x2c6]<<8)|(data[0x2c7]&0xff)) & 0x3fff;
|
||||
vram[dst] = ((vram[0xf] & 0xf0) >> 4) + 0x30;//data[0x2c8];
|
||||
dst = ((m_data[0x2c6]<<8)|(m_data[0x2c7]&0xff)) & 0x3fff;
|
||||
vram[dst] = ((vram[0xf] & 0xf0) >> 4) + 0x30;//m_data[0x2c8];
|
||||
|
||||
dst = ((data[0x2c9]<<8)|(data[0x2ca]&0xff)) & 0x3fff;
|
||||
vram[dst] = ((vram[0xf] & 0x0f) >> 0) + 0x30;//data[0x2cb];
|
||||
dst = ((m_data[0x2c9]<<8)|(m_data[0x2ca]&0xff)) & 0x3fff;
|
||||
vram[dst] = ((vram[0xf] & 0x0f) >> 0) + 0x30;//m_data[0x2cb];
|
||||
|
||||
dst = ((data[0x2cc]<<8)|(data[0x2cd]&0xff)) & 0x3fff;
|
||||
vram[dst] = ((vram[0x10] & 0xf0) >> 4) + 0x30;//data[0x2ce];
|
||||
dst = ((m_data[0x2cc]<<8)|(m_data[0x2cd]&0xff)) & 0x3fff;
|
||||
vram[dst] = ((vram[0x10] & 0xf0) >> 4) + 0x30;//m_data[0x2ce];
|
||||
|
||||
dst = ((data[0x2cf]<<8)|(data[0x2d0]&0xff)) & 0x3fff;
|
||||
vram[dst] = ((vram[0x10] & 0x0f) >> 0) + 0x30;//data[0x2d1];
|
||||
dst = ((m_data[0x2cf]<<8)|(m_data[0x2d0]&0xff)) & 0x3fff;
|
||||
vram[dst] = ((vram[0x10] & 0x0f) >> 0) + 0x30;//m_data[0x2d1];
|
||||
|
||||
dst = ((data[0x2d2]<<8)|(data[0x2d3]&0xff)) & 0x3fff;
|
||||
vram[dst+0] = ((vram[0x11] & 0xf0) >> 4) + 0x30;//data[0x2d4];
|
||||
vram[dst+1] = (vram[0x11] & 0x0f) + 0x30;//data[0x2d5];
|
||||
dst = ((m_data[0x2d2]<<8)|(m_data[0x2d3]&0xff)) & 0x3fff;
|
||||
vram[dst+0] = ((vram[0x11] & 0xf0) >> 4) + 0x30;//m_data[0x2d4];
|
||||
vram[dst+1] = (vram[0x11] & 0x0f) + 0x30;//m_data[0x2d5];
|
||||
|
||||
dst = ((data[0x2d6]<<8)|(data[0x2d7]&0xff)) & 0x3fff;
|
||||
nichibutsu_1414m4_dma(space,0x2d8 + (is2p * 0x18),dst,12,1,vram); // 1p / 2p string
|
||||
dst = ((m_data[0x2d6]<<8)|(m_data[0x2d7]&0xff)) & 0x3fff;
|
||||
dma(0x2d8 + (is2p * 0x18),dst,12,1,vram); // 1p / 2p string
|
||||
|
||||
dst = ((data[0x308]<<8)|(data[0x309]&0xff)) & 0x3fff;
|
||||
dst = ((m_data[0x308]<<8)|(m_data[0x309]&0xff)) & 0x3fff;
|
||||
for(i=0;i<5;i++) /* system inputs */
|
||||
nichibutsu_1414m4_dma(space,0x310 + (((vram[0x04] >> (4-i)) & 1) * 6),dst + (i * 0x20),0x3,1,vram);
|
||||
dma(0x310 + (((vram[0x04] >> (4-i)) & 1) * 6),dst + (i * 0x20),0x3,1,vram);
|
||||
|
||||
dst = ((data[0x30a]<<8)|(data[0x30b]&0xff)) & 0x3fff;
|
||||
dst = ((m_data[0x30a]<<8)|(m_data[0x30b]&0xff)) & 0x3fff;
|
||||
for(i=0;i<7;i++) /* 1p / 2p inputs */
|
||||
nichibutsu_1414m4_dma(space,0x310 + (((vram[0x02 + is2p] >> (6-i)) & 1) * 6),dst + (i * 0x20),0x3,1,vram);
|
||||
dma(0x310 + (((vram[0x02 + is2p] >> (6-i)) & 1) * 6),dst + (i * 0x20),0x3,1,vram);
|
||||
|
||||
dst = ((data[0x30c]<<8)|(data[0x30d]&0xff)) & 0x3fff;
|
||||
dst = ((m_data[0x30c]<<8)|(m_data[0x30d]&0xff)) & 0x3fff;
|
||||
for(i=0;i<8;i++) /* dips */
|
||||
nichibutsu_1414m4_dma(space,0x310 + (((vram[0x05] >> (7-i)) & 1) * 6),dst + (i * 0x20),0x3,1,vram);
|
||||
dma(0x310 + (((vram[0x05] >> (7-i)) & 1) * 6),dst + (i * 0x20),0x3,1,vram);
|
||||
|
||||
dst = ((data[0x30e]<<8)|(data[0x30f]&0xff)) & 0x3fff;
|
||||
dst = ((m_data[0x30e]<<8)|(m_data[0x30f]&0xff)) & 0x3fff;
|
||||
for(i=0;i<8;i++) /* dips */
|
||||
nichibutsu_1414m4_dma(space,0x310 + (((vram[0x06] >> (7-i)) & 1) * 6),dst + (i * 0x20),0x3,1,vram);
|
||||
dma(0x310 + (((vram[0x06] >> (7-i)) & 1) * 6),dst + (i * 0x20),0x3,1,vram);
|
||||
}
|
||||
|
||||
static void nichibutsu_1414m4_0e00(address_space &space,UINT16 mcu_cmd,UINT8 *vram)
|
||||
void nb1414m4_device::_0e00(UINT16 mcu_cmd, UINT8 *vram)
|
||||
{
|
||||
UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base();
|
||||
UINT16 dst;
|
||||
|
||||
dst = ((data[0xdf]<<8)|(data[0xe0]&0xff)) & 0x3fff;
|
||||
nichibutsu_1414m4_dma(space,0x00e1,dst,8,1,vram); /* hi-score */
|
||||
dst = ((m_data[0xdf]<<8)|(m_data[0xe0]&0xff)) & 0x3fff;
|
||||
dma(0x00e1,dst,8,1,vram); /* hi-score */
|
||||
|
||||
if(mcu_cmd & 0x04)
|
||||
{
|
||||
dst = ((data[0xfb]<<8)|(data[0xfc]&0xff)) & 0x3fff;
|
||||
nichibutsu_1414m4_dma(space,0x00fd,dst,8,!(mcu_cmd & 1),vram); /* 1p-msg */
|
||||
dst = ((data[0x10d]<<8)|(data[0x10e]&0xff)) & 0x3fff;
|
||||
kozure_score_msg(space,dst,0,vram); /* 1p score */
|
||||
dst = ((m_data[0xfb]<<8)|(m_data[0xfc]&0xff)) & 0x3fff;
|
||||
dma(0x00fd,dst,8,!(mcu_cmd & 1),vram); /* 1p-msg */
|
||||
dst = ((m_data[0x10d]<<8)|(m_data[0x10e]&0xff)) & 0x3fff;
|
||||
kozure_score_msg(dst,0,vram); /* 1p score */
|
||||
if(mcu_cmd & 0x80)
|
||||
{
|
||||
dst = ((data[0x117]<<8)|(data[0x118]&0xff)) & 0x3fff;
|
||||
nichibutsu_1414m4_dma(space,0x0119,dst,8,!(mcu_cmd & 2),vram); /* 2p-msg */
|
||||
dst = ((data[0x129]<<8)|(data[0x12a]&0xff)) & 0x3fff;
|
||||
kozure_score_msg(space,dst,1,vram); /* 2p score */
|
||||
dst = ((m_data[0x117]<<8)|(m_data[0x118]&0xff)) & 0x3fff;
|
||||
dma(0x0119,dst,8,!(mcu_cmd & 2),vram); /* 2p-msg */
|
||||
dst = ((m_data[0x129]<<8)|(m_data[0x12a]&0xff)) & 0x3fff;
|
||||
kozure_score_msg(dst,1,vram); /* 2p score */
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
dst = ((data[0x133]<<8)|(data[0x134]&0xff)) & 0x3fff;
|
||||
nichibutsu_1414m4_dma(space,0x0135,dst,0x10,!(mcu_cmd & 1),vram); /* game over */
|
||||
insert_coin_msg(space,vram);
|
||||
dst = ((m_data[0x133]<<8)|(m_data[0x134]&0xff)) & 0x3fff;
|
||||
dma(0x0135,dst,0x10,!(mcu_cmd & 1),vram); /* game over */
|
||||
insert_coin_msg(vram);
|
||||
if((mcu_cmd & 0x18) == 0) // TODO: either one of these two disables credit display
|
||||
credit_msg(space,vram);
|
||||
credit_msg(vram);
|
||||
}
|
||||
}
|
||||
|
||||
void nb_1414m4_exec(address_space &space,UINT16 mcu_cmd,UINT8 *vram,UINT16 &scrollx,UINT16 &scrolly,tilemap_t *tilemap)
|
||||
void nb1414m4_device::exec(UINT16 mcu_cmd, UINT8 *vram, UINT16 &scrollx, UINT16 &scrolly, tilemap_t *tilemap)
|
||||
{
|
||||
/* latch fg scroll values */
|
||||
scrollx = (vram[0x0d] & 0xff) | ((vram[0x0e] & 0xff) << 8);
|
||||
@ -283,16 +307,16 @@ void nb_1414m4_exec(address_space &space,UINT16 mcu_cmd,UINT8 *vram,UINT16 &scro
|
||||
switch(mcu_cmd & 0xff00)
|
||||
{
|
||||
/* title screen / continue screens */
|
||||
case 0x0000: insert_coin_msg(space,vram); credit_msg(space,vram); break;
|
||||
case 0x0000: insert_coin_msg(vram); credit_msg(vram); break;
|
||||
|
||||
/* direct DMA'ing / fill */
|
||||
case 0x0200: nichibutsu_1414m4_0200(space,mcu_cmd & 0x87,vram); break;
|
||||
case 0x0200: _0200(mcu_cmd & 0x87,vram); break;
|
||||
|
||||
/* service mode */
|
||||
case 0x0600: nichibutsu_1414m4_0600(space,mcu_cmd & 1,vram); break;
|
||||
case 0x0600: _0600(mcu_cmd & 1,vram); break;
|
||||
|
||||
/* gameplay */
|
||||
case 0x0e00: nichibutsu_1414m4_0e00(space,mcu_cmd & 0xff,vram); break;
|
||||
case 0x0e00: _0e00(mcu_cmd & 0xff,vram); break;
|
||||
|
||||
case 0x8000: break; //Ninja Emaki, attract mode
|
||||
case 0xff00: break; //Ninja Emaki POST, presumably invalid
|
||||
|
Loading…
Reference in New Issue
Block a user