Previous 199869 Revisions Next

r35181 Saturday 21st February, 2015 at 14:37:08 UTC by Osso
nb1414m4.c: converted to a device, no functional change expected (nw)
[src/mame/drivers]armedf.c galivan.c
[src/mame/includes]armedf.h galivan.h nb1414m4.h
[src/mame/machine]nb1414m4.c

trunk/src/mame/drivers/armedf.c
r243692r243693
293293#include "sound/dac.h"
294294#include "sound/3812intf.h"
295295#include "includes/armedf.h"
296#include "includes/nb1414m4.h"
297296
298297#define LEGION_HACK 0
299298
r243692r243693
318317WRITE16_MEMBER(armedf_state::terraf_io_w)
319318{
320319   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);
322321
323322
324323   COMBINE_DATA(&m_vreg);
r243692r243693
477476   AM_RANGE(0x060000, 0x060fff) AM_RAM AM_SHARE("spriteram")
478477   AM_RANGE(0x061000, 0x063fff) AM_RAM
479478   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)
481480   AM_RANGE(0x06a000, 0x06a9ff) AM_RAM
482481   AM_RANGE(0x06c000, 0x06cfff) AM_RAM AM_SHARE("spr_pal_clut")
483482   AM_RANGE(0x070000, 0x070fff) AM_RAM_WRITE(armedf_fg_videoram_w) AM_SHARE("fg_videoram")
r243692r243693
11791178
11801179   MCFG_MACHINE_START_OVERRIDE(armedf_state,armedf)
11811180   MCFG_MACHINE_RESET_OVERRIDE(armedf_state,armedf)
1181   
1182   MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0)
11821183
11831184   /* video hardware */
11841185   MCFG_SCREEN_ADD("screen", RASTER)
r243692r243693
12761277
12771278   MCFG_MACHINE_START_OVERRIDE(armedf_state,armedf)
12781279   MCFG_MACHINE_RESET_OVERRIDE(armedf_state,armedf)
1280   
1281   MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0)
12791282
12801283   /* video hardware */
12811284   MCFG_SCREEN_ADD("screen", RASTER)
r243692r243693
13681371
13691372   MCFG_MACHINE_START_OVERRIDE(armedf_state,armedf)
13701373   MCFG_MACHINE_RESET_OVERRIDE(armedf_state,armedf)
1374   
1375   MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0)
13711376
13721377   /* video hardware */
13731378   MCFG_SCREEN_ADD("screen", RASTER)
r243692r243693
14141419
14151420   MCFG_MACHINE_START_OVERRIDE(armedf_state,armedf)
14161421   MCFG_MACHINE_RESET_OVERRIDE(armedf_state,armedf)
1422   
1423   MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0)
14171424
14181425   /* video hardware */
14191426   MCFG_SCREEN_ADD("screen", RASTER)
r243692r243693
14611468   MCFG_MACHINE_START_OVERRIDE(armedf_state,armedf)
14621469   MCFG_MACHINE_RESET_OVERRIDE(armedf_state,armedf)
14631470
1471
14641472   /* video hardware */
14651473   MCFG_SCREEN_ADD("screen", RASTER)
14661474   MCFG_SCREEN_REFRESH_RATE(60)
r243692r243693
15801588   ROM_LOAD( "legion.1k", 0x000000, 0x010000, CRC(ff5a0db9) SHA1(9308deb363d3b7686cc69485ec14201dd68f9a97) ) // lg12
15811589   ROM_LOAD( "legion.1j", 0x010000, 0x010000, CRC(bae220c8) SHA1(392ae0fb0351dcad7b0e8e0ed4a1dc6e07f493df) ) // lg11
15821590
1583   ROM_REGION( 0x4000, "blit_data", 0 )    /* data for mcu/blitter */
1591   ROM_REGION( 0x4000, "nb1414m4", 0 )    /* data for mcu/blitter */
15841592   ROM_LOAD ( "lg7.bin", 0x0000, 0x4000, CRC(533e2b58) SHA1(a13ea4a530038760ffa87713903c59a932452717) )
15851593ROM_END
15861594
r243692r243693
16371645   ROM_LOAD( "12.7d", 0x00000, 0x10000, CRC(2d1f2ceb) SHA1(77544e1c4bda06feac135a96bb76af7c79278dc0) ) /* sprites */
16381646   ROM_LOAD( "13.9d", 0x10000, 0x10000, CRC(1d2f92d6) SHA1(e842c6bf95a5958a6ca2c85e68b9bc3cc15211a4) )
16391647
1640   ROM_REGION( 0x4000, "blit_data", 0 )    /* data for mcu/blitter */
1648   ROM_REGION( 0x4000, "nb1414m4", 0 )    /* data for mcu/blitter */
16411649   ROM_LOAD( "10.11c", 0x0000, 0x4000, CRC(ac705812) SHA1(65be46ee959d8478cb6dffb25e61f7742276997b) )
16421650
16431651   ROM_REGION( 0x0100, "proms", 0 )    /* Unknown use */
r243692r243693
16711679   ROM_LOAD( "tf-003.7d", 0x00000, 0x10000, CRC(d74085a1) SHA1(3f6ba85dbd6e48a502c115b2d322a586fc4f56c9) ) /* sprites */
16721680   ROM_LOAD( "tf-002.9d", 0x10000, 0x10000, CRC(148aa0c5) SHA1(8d8a565540e91b384a9c154522501921b7da4d4e) )
16731681
1674   ROM_REGION( 0x4000, "blit_data", 0 )    /* data for mcu/blitter */
1682   ROM_REGION( 0x4000, "nb1414m4", 0 )    /* data for mcu/blitter */
16751683   ROM_LOAD( "10.11c", 0x0000, 0x4000, CRC(ac705812) SHA1(65be46ee959d8478cb6dffb25e61f7742276997b) )
16761684
16771685   ROM_REGION( 0x0100, "proms", 0 )    /* Unknown use */
r243692r243693
17051713   ROM_LOAD( "tfj-12.7d", 0x00000, 0x10000, CRC(d74085a1) SHA1(3f6ba85dbd6e48a502c115b2d322a586fc4f56c9) ) /* sprites */
17061714   ROM_LOAD( "tfj-13.9d", 0x10000, 0x10000, CRC(148aa0c5) SHA1(8d8a565540e91b384a9c154522501921b7da4d4e) )
17071715
1708   ROM_REGION( 0x4000, "blit_data", 0 )    /* data for mcu/blitter */
1716   ROM_REGION( 0x4000, "nb1414m4", 0 )    /* data for mcu/blitter */
17091717   ROM_LOAD( "10.11c", 0x0000, 0x4000, CRC(ac705812) SHA1(65be46ee959d8478cb6dffb25e61f7742276997b) )
17101718
17111719   ROM_REGION( 0x0100, "proms", 0 )    /* Unknown use */
r243692r243693
18461854   ROM_LOAD( "kozure12.8d", 0x00000, 0x20000, CRC(15f4021d) SHA1(b2ba6fda1a7bdaae97de4b0157b9b656b4385e08) )   /* sprites */
18471855   ROM_LOAD( "kozure13.9d", 0x20000, 0x20000, CRC(b3b6c753) SHA1(9ad061cac9558320b5cfd1ac1ac8d7f1788270cc) )
18481856
1849   ROM_REGION( 0x4000, "blit_data", 0 )    /* data for mcu/blitter */
1857   ROM_REGION( 0x4000, "nb1414m4", 0 )    /* data for mcu/blitter */
18501858   ROM_LOAD( "kozure10.11c", 0x0000, 0x4000, CRC(f48be21d) SHA1(5d6db049f30cab98f672814a86a06609c1fa8fb4) )
18511859
18521860   ROM_REGION( 0x0100, "proms", 0 )    /* Unknown use */
r243692r243693
18831891   ROM_LOAD( "13.bin", 0x20000, 0x10000, CRC(6b6ec999) SHA1(7749ce435f497732bd1b6958974cd95e960fc9fe) )
18841892   ROM_LOAD( "14.bin", 0x30000, 0x10000, CRC(f426a4ad) SHA1(facccb21ca73c560d3a38e05e677782516d5b0c0) )
18851893
1886   ROM_REGION( 0x4000, "blit_data", 0 )    /* data for mcu/blitter */
1894   ROM_REGION( 0x4000, "nb1414m4", 0 )    /* data for mcu/blitter */
18871895   ROM_LOAD( "9.bin",  0x0000, 0x4000, CRC(740d260f) SHA1(5b4487930c7a1fb0a796aec2243bec631b1b5104) )
18881896ROM_END
18891897
r243692r243693
19171925   ROM_LOAD( "13.bin", 0x20000, 0x10000, CRC(6b6ec999) SHA1(7749ce435f497732bd1b6958974cd95e960fc9fe) )
19181926   ROM_LOAD( "14.bin", 0x30000, 0x10000, CRC(f426a4ad) SHA1(facccb21ca73c560d3a38e05e677782516d5b0c0) )
19191927
1920   ROM_REGION( 0x4000, "blit_data", 0 )    /* data for mcu/blitter */
1928   ROM_REGION( 0x4000, "nb1414m4", 0 )    /* data for mcu/blitter */
19211929   ROM_LOAD( "9.bin",  0x0000, 0x4000, CRC(740d260f) SHA1(5b4487930c7a1fb0a796aec2243bec631b1b5104) )
19221930ROM_END
19231931
r243692r243693
21202128   m_maincpu->space(AS_PROGRAM).install_write_handler(0x07c000, 0x07c001, write16_delegate(FUNC(armedf_state::bootleg_io_w),this));
21212129
21222130   m_scroll_type = 2;
2131   
2132   save_item(NAME(m_legion_cmd));
21232133}
21242134
21252135DRIVER_INIT_MEMBER(armedf_state,cclimbr2)
trunk/src/mame/drivers/galivan.c
r243692r243693
3232#include "sound/dac.h"
3333#include "sound/3526intf.h"
3434#include "includes/galivan.h"
35#include "includes/nb1414m4.h"
3635
3736
3837WRITE8_MEMBER(galivan_state::galivan_sound_command_w)
r243692r243693
9190
9291WRITE8_MEMBER(galivan_state::blit_trigger_w)
9392{
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);
9594}
9695
9796static ADDRESS_MAP_START( ninjemak_io_map, AS_IO, 8, galivan_state )
r243692r243693
472471
473472   MCFG_MACHINE_START_OVERRIDE(galivan_state,ninjemak)
474473   MCFG_MACHINE_RESET_OVERRIDE(galivan_state,ninjemak)
474   
475   MCFG_DEVICE_ADD("nb1414m4", NB1414M4, 0)
475476
476477   /* video hardware */
477478   MCFG_BUFFERED_SPRITERAM8_ADD("spriteram")
r243692r243693
505506MACHINE_CONFIG_END
506507
507508
508
509MACHINE_CONFIG_DERIVED(youmab, ninjemak)
510   
511   MCFG_DEVICE_REMOVE("nb1414m4")
512MACHINE_CONFIG_END
509513/***************************************************************************
510514
511515  Game driver(s)
r243692r243693
763767   ROM_LOAD( "ninjemak.7",   0x0000, 0x4000, CRC(80c20d36) SHA1(f20724754824030d62059388f3ea2224f5b7a60e) )
764768   ROM_LOAD( "ninjemak.6",   0x4000, 0x4000, CRC(1da7a651) SHA1(5307452058164a0bc39d144dd204627a9ead7543) )
765769
766   ROM_REGION( 0x4000, "blit_data", 0 )    /* data for mcu/blitter? */
770   ROM_REGION( 0x4000, "nb1414m4", 0 )    /* data for mcu/blitter? */
767771   ROM_LOAD( "ninjemak.5",   0x0000, 0x4000, CRC(5f91dd30) SHA1(3513c0a2e4ca83f602cacad6af9c07fe9e4b16a1) )    /* text layer data */
768772
769773   ROM_REGION( 0x0400, "proms", 0 )    /* Region 3 - color data */
r243692r243693
805809   ROM_LOAD( "ninjemak.7",   0x0000, 0x4000, CRC(80c20d36) SHA1(f20724754824030d62059388f3ea2224f5b7a60e) )
806810   ROM_LOAD( "ninjemak.6",   0x4000, 0x4000, CRC(1da7a651) SHA1(5307452058164a0bc39d144dd204627a9ead7543) )
807811
808   ROM_REGION( 0x4000, "blit_data", 0 )    /* data for mcu/blitter? */
812   ROM_REGION( 0x4000, "nb1414m4", 0 )    /* data for mcu/blitter? */
809813   ROM_LOAD( "ync-5.bin",    0x0000, 0x4000, CRC(993e4ab2) SHA1(aceafc83b36db4db923d27f77ad045e626678bae) )    /* text layer data */
810814
811815   ROM_REGION( 0x0400, "proms", 0 )    /* Region 3 - color data */
r243692r243693
847851   ROM_LOAD( "ninjemak.7",   0x0000, 0x4000, CRC(80c20d36) SHA1(f20724754824030d62059388f3ea2224f5b7a60e) )
848852   ROM_LOAD( "ninjemak.6",   0x4000, 0x4000, CRC(1da7a651) SHA1(5307452058164a0bc39d144dd204627a9ead7543) )
849853
850   ROM_REGION( 0x4000, "blit_data", 0 )    /* data for mcu/blitter? */
854   ROM_REGION( 0x4000, "nb1414m4", 0 )    /* data for mcu/blitter? */
851855   ROM_LOAD( "5.15d",    0x0000, 0x4000, CRC(1b4f64aa) SHA1(2cb2db946bf93e0928d6aa2e2dd29acb92981567) )    /* text layer data x */
852856
853857   ROM_REGION( 0x0400, "proms", 0 )    /* Region 3 - color data */
r243692r243693
10931097GAME( 1986, ninjemak, 0,        ninjemak, ninjemak, driver_device, 0, ROT270, "Nichibutsu",   "Ninja Emaki (US)", GAME_SUPPORTS_SAVE|GAME_UNEMULATED_PROTECTION )
10941098GAME( 1986, youma,    ninjemak, ninjemak, ninjemak, driver_device, 0, ROT270, "Nichibutsu",   "Youma Ninpou Chou (Japan)", GAME_SUPPORTS_SAVE|GAME_UNEMULATED_PROTECTION )
10951099GAME( 1986, youma2,   ninjemak, ninjemak, ninjemak, driver_device, 0, ROT270, "Nichibutsu",   "Youma Ninpou Chou (Japan, alt)", GAME_SUPPORTS_SAVE|GAME_UNEMULATED_PROTECTION )
1096GAME( 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
1097GAME( 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 ) // ""
1100GAME( 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
1101GAME( 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/includes/armedf.h
r243692r243693
1#include "includes/nb1414m4.h"
12#include "video/bufsprite.h"
23
34class armedf_state : public driver_device
r243692r243693
78      : driver_device(mconfig, type, tag),
89      m_maincpu(*this, "maincpu"),
910      m_extra(*this, "extra"),
11      m_nb1414m4(*this, "nb1414m4"),
1012      m_gfxdecode(*this, "gfxdecode"),
1113      m_palette(*this, "palette"),
1214      m_spriteram(*this, "spriteram"),
r243692r243693
1820   /* devices */
1921   required_device<cpu_device> m_maincpu;
2022   optional_device<cpu_device> m_extra;
23   optional_device<nb1414m4_device> m_nb1414m4;
2124   required_device<gfxdecode_device> m_gfxdecode;
2225   required_device<palette_device> m_palette;
2326   required_device<buffered_spriteram16_device> m_spriteram;
trunk/src/mame/includes/galivan.h
r243692r243693
44
55***************************************************************************/
66
7#include "includes/nb1414m4.h"
78#include "video/bufsprite.h"
89
910class galivan_state : public driver_device
r243692r243693
1415      m_videoram(*this, "videoram"),
1516      m_spriteram(*this, "spriteram"),
1617      m_maincpu(*this, "maincpu"),
18      m_nb1414m4(*this, "nb1414m4"),
1719      m_gfxdecode(*this, "gfxdecode"),
1820      m_palette(*this, "palette") { }
1921
r243692r243693
6365   UINT32 screen_update_ninjemak(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
6466   void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
6567   required_device<cpu_device> m_maincpu;
68   optional_device<nb1414m4_device> m_nb1414m4;
6669   required_device<gfxdecode_device> m_gfxdecode;
6770   required_device<palette_device> m_palette;
6871};
trunk/src/mame/includes/nb1414m4.h
r243692r243693
1void nb_1414m4_exec(address_space &space,UINT16 mcu_cmd,UINT8 *vram,UINT16 &scrollx,UINT16 &scrolly,tilemap_t *tilemap);
1class nb1414m4_device : public device_t,
2                           public device_video_interface
3{
4public:
5   nb1414m4_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
6   ~nb1414m4_device() {}
7   
8   void exec(UINT16 mcu_cmd, UINT8 *vram, UINT16 &scrollx, UINT16 &scrolly, tilemap_t *tilemap);
9
10protected:
11   // device-level overrides
12   virtual void device_start();
13   virtual void device_reset();
14
15private:
16   void dma(UINT16 src, UINT16 dst, UINT16 size, UINT8 condition, UINT8 *vram);
17   void fill(UINT16 dst, UINT8 tile, UINT8 pal, UINT8 *vram);
18   void insert_coin_msg(UINT8 *vram);
19   void credit_msg(UINT8 *vram);
20   void kozure_score_msg(UINT16 dst, UINT8 src_base, UINT8 *vram);
21   void _0200(UINT16 mcu_cmd, UINT8 *vram);
22   void _0600(UINT8 is2p, UINT8 *vram);
23   void _0e00(UINT16 mcu_cmd, UINT8 *vram);
24   
25   UINT8 *m_data;
26
27};
28
29extern const device_type NB1414M4;
trunk/src/mame/machine/nb1414m4.c
r243692r243693
1414- Ninja Emaki triggers unknown commands 0x8000 & 0xff20;
1515- Ninja Emaki continue screen is corrupt;
1616- How to NOT draw the params?
17- Device-ify this;
1817
1918Notes:
2019- Just before any string in the "MCU" rom, there's a control byte, this meaning is as follows:
r243692r243693
3130#include "emu.h"
3231#include "includes/nb1414m4.h"
3332
34static void nichibutsu_1414m4_dma(address_space &space,UINT16 src,UINT16 dst,UINT16 size, UINT8 condition,UINT8 *vram)
33const device_type NB1414M4 = &device_creator<nb1414m4_device>;
34
35nb1414m4_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)
3539{
36   UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base();
40}
41
42
43//-------------------------------------------------
44//  device_start - device-specific startup
45//-------------------------------------------------
46
47void nb1414m4_device::device_start()
48{
49   m_data = region()->base();
50}
51
52//-------------------------------------------------
53//  device_reset - device-specific startup
54//-------------------------------------------------
55
56void nb1414m4_device::device_reset()
57{
58
59}
60
61/*****************************************************************************
62    DEVICE HANDLERS
63*****************************************************************************/
64
65void nb1414m4_device::dma(UINT16 src, UINT16 dst, UINT16 size, UINT8 condition, UINT8 *vram)
66{
3767   int i;
3868
3969   for(i=0;i<size;i++)
r243692r243693
4171      if(i+dst+0x000 < 18) //avoid param overwrite
4272         continue;
4373
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;
4575
46      vram[i+dst+0x400] = data[i+(size)+src] & 0xff;
76      vram[i+dst+0x400] = m_data[i+(size)+src] & 0xff;
4777   }
4878}
4979
50static void nichibutsu_1414m4_fill(address_space &space,UINT16 dst,UINT8 tile,UINT8 pal,UINT8 *vram)
80void nb1414m4_device::fill(UINT16 dst, UINT8 tile, UINT8 pal, UINT8 *vram)
5181{
5282   int i;
5383
r243692r243693
6191   }
6292}
6393
64static void insert_coin_msg(address_space &space,UINT8 *vram)
94void nb1414m4_device::insert_coin_msg(UINT8 *vram)
6595{
66   UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base();
6796   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" */
6998   UINT16 dst;
7099
71100   if(credit_count == 0)
72101   {
73      dst = (data[0x01]<<8|data[0x02]) & 0x3fff;
102      dst = (m_data[0x01]<<8|m_data[0x02]) & 0x3fff;
74103
75      nichibutsu_1414m4_dma(space,0x0003,dst,0x10,fl_cond,vram);
104      dma(0x0003,dst,0x10,fl_cond,vram);
76105   }
77106   else
78107   {
79      dst = (data[0x49]<<8|data[0x4a]) & 0x3fff;
108      dst = (m_data[0x49]<<8|m_data[0x4a]) & 0x3fff;
80109
81      nichibutsu_1414m4_dma(space,0x004b,dst,0x18,1,vram);
110      dma(0x004b,dst,0x18,1,vram);
82111   }
83112}
84113
85static void credit_msg(address_space &space,UINT8 *vram)
114void nb1414m4_device::credit_msg(UINT8 *vram)
86115{
87   UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base();
88116   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" */
90118   UINT16 dst;
91119
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 */
94122
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 ...
97125   vram[dst+0x000] = (credit_count + 0x30); /* credit num */
98   vram[dst+0x400] = (data[0x48]);
126   vram[dst+0x400] = (m_data[0x48]);
99127
100128   if(credit_count == 1) /* ONE PLAYER ONLY */
101129   {
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);
104132   }
105133   else if(credit_count > 1) /* ONE OR TWO PLAYERS */
106134   {
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);
109137   }
110138}
111139
112static void kozure_score_msg(address_space &space,UINT16 dst,UINT8 src_base,UINT8 *vram)
140void nb1414m4_device::kozure_score_msg(UINT16 dst, UINT8 src_base, UINT8 *vram)
113141{
114142   int i;
115143   UINT8 first_digit;
116144   UINT8 res;
117   UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base();
118
145   
119146   first_digit = 0;
120147
121148   for(i=0;i<6;i++)
r243692r243693
130157      else
131158         vram[i+dst+0x0000] = 0x20;
132159
133      vram[i+dst+0x0400] = data[0x10f+(src_base*0x1c)+i];
160      vram[i+dst+0x0400] = m_data[0x10f+(src_base*0x1c)+i];
134161   }
135162
136163   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];
138165   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];
140167
141168}
142169
143static void nichibutsu_1414m4_0200(address_space &space, UINT16 mcu_cmd,UINT8 *vram)
170void nb1414m4_device::_0200(UINT16 mcu_cmd, UINT8 *vram)
144171{
145   UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base();
146172   UINT16 dst;
147173
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);
149175
150176   dst &= 0x3fff;
151177
152178   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);
154180   else // src -> dst
155      nichibutsu_1414m4_dma(space,dst & 0x3fff,0x0000,0x400,1,vram);
181      dma(dst & 0x3fff,0x0000,0x400,1,vram);
156182}
157183
158184/*
r243692r243693
185211[0x10] coinage B
186212[0x11] sound test num
187213*/
188static void nichibutsu_1414m4_0600(address_space &space, UINT8 is2p,UINT8 *vram)
214void nb1414m4_device::_0600(UINT8 is2p, UINT8 *vram)
189215{
190   UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base();
191216   UINT16 dst;
192217   int i;
193218
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];
196221
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);
199224
200225   // 0x25a - 0x261 unknown meaning
201226
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);
204229
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);
207232
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];
210235
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];
213238
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];
216241
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];
219244
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];
223248
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
226251
227   dst = ((data[0x308]<<8)|(data[0x309]&0xff)) & 0x3fff;
252   dst = ((m_data[0x308]<<8)|(m_data[0x309]&0xff)) & 0x3fff;
228253   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);
230255
231   dst = ((data[0x30a]<<8)|(data[0x30b]&0xff)) & 0x3fff;
256   dst = ((m_data[0x30a]<<8)|(m_data[0x30b]&0xff)) & 0x3fff;
232257   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);
234259
235   dst = ((data[0x30c]<<8)|(data[0x30d]&0xff)) & 0x3fff;
260   dst = ((m_data[0x30c]<<8)|(m_data[0x30d]&0xff)) & 0x3fff;
236261   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);
238263
239   dst = ((data[0x30e]<<8)|(data[0x30f]&0xff)) & 0x3fff;
264   dst = ((m_data[0x30e]<<8)|(m_data[0x30f]&0xff)) & 0x3fff;
240265   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);
242267}
243268
244static void nichibutsu_1414m4_0e00(address_space &space,UINT16 mcu_cmd,UINT8 *vram)
269void nb1414m4_device::_0e00(UINT16 mcu_cmd, UINT8 *vram)
245270{
246   UINT8 * data = (UINT8 *)space.machine().root_device().memregion("blit_data")->base();
247271   UINT16 dst;
248272
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 */
251275
252276   if(mcu_cmd & 0x04)
253277   {
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 */
258282      if(mcu_cmd & 0x80)
259283      {
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 */
264288      }
265289   }
266290   else
267291   {
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);
271295      if((mcu_cmd & 0x18) == 0) // TODO: either one of these two disables credit display
272         credit_msg(space,vram);
296         credit_msg(vram);
273297   }
274298}
275299
276void nb_1414m4_exec(address_space &space,UINT16 mcu_cmd,UINT8 *vram,UINT16 &scrollx,UINT16 &scrolly,tilemap_t *tilemap)
300void nb1414m4_device::exec(UINT16 mcu_cmd, UINT8 *vram, UINT16 &scrollx, UINT16 &scrolly, tilemap_t *tilemap)
277301{
278302   /* latch fg scroll values */
279303   scrollx = (vram[0x0d] & 0xff) | ((vram[0x0e] & 0xff) << 8);
r243692r243693
283307   switch(mcu_cmd & 0xff00)
284308   {
285309      /* 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;
287311
288312      /* 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;
290314
291315      /* service mode */
292      case 0x0600: nichibutsu_1414m4_0600(space,mcu_cmd & 1,vram); break;
316      case 0x0600: _0600(mcu_cmd & 1,vram); break;
293317
294318      /* gameplay */
295      case 0x0e00: nichibutsu_1414m4_0e00(space,mcu_cmd & 0xff,vram); break;
319      case 0x0e00: _0e00(mcu_cmd & 0xff,vram); break;
296320
297321      case 0x8000: break; //Ninja Emaki, attract mode
298322      case 0xff00: break; //Ninja Emaki POST, presumably invalid


Previous 199869 Revisions Next


© 1997-2024 The MAME Team