From 3c9d56304487b5253421fbcdcd9ff2af2ff87f3f Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Wed, 4 May 2011 21:55:36 +0000 Subject: [PATCH] Hooked up NB1414M4 to Ninja Emaki, greatly improving gfxs in it [Angelo Salese] --- src/mame/drivers/galivan.c | 56 ++++++++++++------------------------- src/mame/includes/galivan.h | 8 +++--- src/mame/machine/nb1414m4.c | 4 +-- src/mame/video/galivan.c | 56 +++++++------------------------------ 4 files changed, 34 insertions(+), 90 deletions(-) diff --git a/src/mame/drivers/galivan.c b/src/mame/drivers/galivan.c index 7fece2830f5..ec8a3b6e129 100644 --- a/src/mame/drivers/galivan.c +++ b/src/mame/drivers/galivan.c @@ -32,6 +32,7 @@ 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" static WRITE8_HANDLER( galivan_sound_command_w ) @@ -51,37 +52,12 @@ static READ8_HANDLER( IO_port_c0_r ) } -/* the scroll registers are memory mapped in ninjemak, I/O ports in the others */ -static WRITE8_HANDLER( ninjemak_videoreg_w ) -{ - switch (offset) - { - case 0x0b: - ninjemak_scrolly_w(space, 0, data); - break; - case 0x0c: - ninjemak_scrolly_w(space, 1, data); - break; - case 0x0d: - ninjemak_scrollx_w(space, 0, data); - break; - case 0x0e: - ninjemak_scrollx_w(space, 1, data); - break; - default: - break; - } -} - - static ADDRESS_MAP_START( galivan_map, AS_PROGRAM, 8 ) AM_RANGE(0x0000, 0xbfff) AM_ROM - // The next three entires need to be looked at. It's ugly. AM_RANGE(0xc000, 0xdfff) AM_ROMBANK("bank1") - AM_RANGE(0xd800, 0xdbff) AM_WRITE(galivan_videoram_w) AM_BASE_SIZE_MEMBER(galivan_state, m_videoram, m_videoram_size) - AM_RANGE(0xdc00, 0xdfff) AM_WRITE(galivan_colorram_w) AM_BASE_MEMBER(galivan_state, m_colorram) + AM_RANGE(0xd800, 0xdfff) AM_WRITE(galivan_videoram_w) AM_BASE_SIZE_MEMBER(galivan_state, m_videoram, m_videoram_size) AM_RANGE(0xe000, 0xe0ff) AM_RAM AM_BASE_SIZE_MEMBER(galivan_state, m_spriteram, m_spriteram_size) AM_RANGE(0xe100, 0xffff) AM_RAM @@ -90,11 +66,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( ninjemak_map, AS_PROGRAM, 8 ) AM_RANGE(0x0000, 0xbfff) AM_ROM - // The next three entires need to be looked at. It's ugly. AM_RANGE(0xc000, 0xdfff) AM_ROMBANK("bank1") - AM_RANGE(0xd800, 0xd81f) AM_WRITE(ninjemak_videoreg_w) - AM_RANGE(0xd800, 0xdbff) AM_WRITE(galivan_videoram_w) AM_BASE_SIZE_MEMBER(galivan_state, m_videoram, m_videoram_size) - AM_RANGE(0xdc00, 0xdfff) AM_WRITE(galivan_colorram_w) AM_BASE_MEMBER(galivan_state, m_colorram) + AM_RANGE(0xd800, 0xdfff) AM_WRITE(galivan_videoram_w) AM_BASE_SIZE_MEMBER(galivan_state, m_videoram, m_videoram_size) AM_RANGE(0xe000, 0xe1ff) AM_RAM AM_BASE_SIZE_MEMBER(galivan_state, m_spriteram, m_spriteram_size) AM_RANGE(0xe200, 0xffff) AM_RAM @@ -116,6 +89,13 @@ static ADDRESS_MAP_START( io_map, AS_IO, 8 ) AM_RANGE(0xc0, 0xc0) AM_READ(IO_port_c0_r) /* dangar needs to return 0x58 */ ADDRESS_MAP_END +static WRITE8_HANDLER( blit_trigger_w ) +{ + galivan_state *state = space->machine().driver_data(); + + nb_1414m4_exec(space,(state->m_videoram[0] << 8) | (state->m_videoram[1] & 0xff),state->m_videoram,state->m_scrollx,state->m_scrolly,state->m_tx_tilemap); +} + static ADDRESS_MAP_START( ninjemak_io_map, AS_IO, 8 ) ADDRESS_MAP_GLOBAL_MASK(0xff) AM_RANGE(0x80, 0x80) AM_READ_PORT("P1") AM_WRITE(ninjemak_gfxbank_w) @@ -124,7 +104,7 @@ static ADDRESS_MAP_START( ninjemak_io_map, AS_IO, 8 ) AM_RANGE(0x83, 0x83) AM_READ_PORT("SERVICE") AM_RANGE(0x84, 0x84) AM_READ_PORT("DSW1") AM_RANGE(0x85, 0x85) AM_READ_PORT("DSW2") AM_WRITE(galivan_sound_command_w) -// AM_RANGE(0x86, 0x86) AM_WRITENOP // ?? + AM_RANGE(0x86, 0x86) AM_WRITE(blit_trigger_w) // ?? // AM_RANGE(0x87, 0x87) AM_WRITENOP // ?? ADDRESS_MAP_END @@ -438,8 +418,8 @@ static MACHINE_RESET( galivan ) // state->m_layers = 0x60; state->m_layers = 0; state->m_write_layers = 0; - state->m_scrollx[0] = state->m_scrollx[1] = 0; - state->m_scrolly[0] = state->m_scrolly[1] = 0; + state->m_galivan_scrollx[0] = state->m_galivan_scrollx[1] = 0; + state->m_galivan_scrolly[0] = state->m_galivan_scrolly[1] = 0; state->m_flipscreen = 0; } @@ -449,8 +429,8 @@ static MACHINE_RESET( ninjemak ) machine.device("maincpu")->reset(); - state->m_scrollx[0] = state->m_scrollx[1] = 0; - state->m_scrolly[0] = state->m_scrolly[1] = 0; + state->m_scrollx = 0; + state->m_scrolly = 0; state->m_flipscreen = 0; state->m_ninjemak_dispdisable = 0; } @@ -764,7 +744,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, "gfx5", 0 ) /* data for mcu/blitter? */ + ROM_REGION( 0x4000, "blit_data", 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 */ @@ -806,7 +786,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, "gfx5", 0 ) /* data for mcu/blitter? */ + ROM_REGION( 0x4000, "blit_data", 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 */ @@ -848,7 +828,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, "gfx5", 0 ) /* data for mcu/blitter? */ + ROM_REGION( 0x4000, "blit_data", 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 */ diff --git a/src/mame/includes/galivan.h b/src/mame/includes/galivan.h index 1eb6791636f..a85e126e841 100644 --- a/src/mame/includes/galivan.h +++ b/src/mame/includes/galivan.h @@ -12,7 +12,7 @@ public: /* memory pointers */ UINT8 * m_videoram; - UINT8 * m_colorram; +// UINT8 * m_colorram; UINT8 * m_spriteram; size_t m_videoram_size; size_t m_spriteram_size; @@ -20,8 +20,9 @@ public: /* video-related */ tilemap_t *m_bg_tilemap; tilemap_t *m_tx_tilemap; - UINT8 m_scrollx[2]; - UINT8 m_scrolly[2]; + UINT16 m_scrollx; + UINT16 m_scrolly; + UINT8 m_galivan_scrollx[2],m_galivan_scrolly[2]; UINT8 m_flipscreen; UINT8 m_write_layers; UINT8 m_layers; @@ -35,7 +36,6 @@ public: WRITE8_HANDLER( galivan_scrollx_w ); WRITE8_HANDLER( galivan_scrolly_w ); WRITE8_HANDLER( galivan_videoram_w ); -WRITE8_HANDLER( galivan_colorram_w ); WRITE8_HANDLER( galivan_gfxbank_w ); WRITE8_HANDLER( ninjemak_scrollx_w ); WRITE8_HANDLER( ninjemak_scrolly_w ); diff --git a/src/mame/machine/nb1414m4.c b/src/mame/machine/nb1414m4.c index 1dbe0446250..72c95837adb 100644 --- a/src/mame/machine/nb1414m4.c +++ b/src/mame/machine/nb1414m4.c @@ -271,8 +271,8 @@ static void nichibutsu_1414m4_0e00(address_space *space,UINT16 mcu_cmd,UINT8 *vr void nb_1414m4_exec(address_space *space,UINT16 mcu_cmd,UINT8 *vram,UINT16 &scrollx,UINT16 &scrolly,tilemap_t *tilemap) { /* latch fg scroll values */ - scrollx = (vram[0x0d] & 0xff) | ((vram[0x0e] & 0x3) << 8); - scrolly = (vram[0x0b] & 0xff) | ((vram[0x0c] & 0x3) << 8); + scrollx = (vram[0x0d] & 0xff) | ((vram[0x0e] & 0xff) << 8); + scrolly = (vram[0x0b] & 0xff) | ((vram[0x0c] & 0xff) << 8); /* process the command */ switch(mcu_cmd & 0xff00) diff --git a/src/mame/video/galivan.c b/src/mame/video/galivan.c index 23ae561b2e0..50491848715 100644 --- a/src/mame/video/galivan.c +++ b/src/mame/video/galivan.c @@ -134,7 +134,7 @@ static TILE_GET_INFO( get_bg_tile_info ) static TILE_GET_INFO( get_tx_tile_info ) { galivan_state *state = machine.driver_data(); - int attr = state->m_colorram[tile_index]; + int attr = state->m_videoram[tile_index + 0x400]; int code = state->m_videoram[tile_index] | ((attr & 0x01) << 8); SET_TILE_INFO( 0, @@ -159,7 +159,7 @@ static TILE_GET_INFO( ninjemak_get_bg_tile_info ) static TILE_GET_INFO( ninjemak_get_tx_tile_info ) { galivan_state *state = machine.driver_data(); - int attr = state->m_colorram[tile_index]; + int attr = state->m_videoram[tile_index + 0x400]; int code = state->m_videoram[tile_index] | ((attr & 0x03) << 8); SET_TILE_INFO( 0, @@ -208,14 +208,7 @@ WRITE8_HANDLER( galivan_videoram_w ) { galivan_state *state = space->machine().driver_data(); state->m_videoram[offset] = data; - tilemap_mark_tile_dirty(state->m_tx_tilemap, offset); -} - -WRITE8_HANDLER( galivan_colorram_w ) -{ - galivan_state *state = space->machine().driver_data(); - state->m_colorram[offset] = data; - tilemap_mark_tile_dirty(state->m_tx_tilemap, offset); + tilemap_mark_tile_dirty(state->m_tx_tilemap, offset & 0x3ff); } /* Written through port 40 */ @@ -251,23 +244,7 @@ WRITE8_HANDLER( ninjemak_gfxbank_w ) tilemap_set_flip (state->m_bg_tilemap, state->m_flipscreen ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0); tilemap_set_flip (state->m_tx_tilemap, state->m_flipscreen ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0); - /* bit 3 text bank flag ??? */ - if (data & 0x08) - { - /* This is a temporary condition specification. */ - int offs; - - logerror("%04x: write %02x to port 80\n", cpu_get_pc(&space->device()), data); - - for (offs = 0; offs < state->m_videoram_size; offs++) - { - galivan_videoram_w(space, offs, 0x20); - } - for (offs = 0; offs < state->m_videoram_size; offs++) - { - galivan_colorram_w(space, offs, 0x03); - } - } + /* bit 3 unknown */ /* bit 4 background disable flag */ state->m_ninjemak_dispdisable = data & 0x10; @@ -307,27 +284,14 @@ WRITE8_HANDLER( galivan_scrollx_w ) state->m_write_layers = 0; } } - state->m_scrollx[offset] = data; + state->m_galivan_scrollx[offset] = data; } /* Written through port 43-44 */ WRITE8_HANDLER( galivan_scrolly_w ) { galivan_state *state = space->machine().driver_data(); - state->m_scrolly[offset] = data; -} - - -WRITE8_HANDLER( ninjemak_scrollx_w ) -{ - galivan_state *state = space->machine().driver_data(); - state->m_scrollx[offset] = data; -} - -WRITE8_HANDLER( ninjemak_scrolly_w ) -{ - galivan_state *state = space->machine().driver_data(); - state->m_scrolly[offset] = data; + state->m_galivan_scrolly[offset] = data; } @@ -380,8 +344,8 @@ static void draw_sprites( running_machine &machine, bitmap_t *bitmap, const rect SCREEN_UPDATE( galivan ) { galivan_state *state = screen->machine().driver_data(); - tilemap_set_scrollx(state->m_bg_tilemap, 0, state->m_scrollx[0] + 256 * (state->m_scrollx[1] & 0x07)); - tilemap_set_scrolly(state->m_bg_tilemap, 0, state->m_scrolly[0] + 256 * (state->m_scrolly[1] & 0x07)); + tilemap_set_scrollx(state->m_bg_tilemap, 0, state->m_galivan_scrollx[0] + 256 * (state->m_galivan_scrollx[1] & 0x07)); + tilemap_set_scrolly(state->m_bg_tilemap, 0, state->m_galivan_scrolly[0] + 256 * (state->m_galivan_scrollx[1] & 0x07)); if (state->m_layers & 0x40) bitmap_fill(bitmap, cliprect, 0); @@ -409,8 +373,8 @@ SCREEN_UPDATE( ninjemak ) galivan_state *state = screen->machine().driver_data(); /* (scrollx[1] & 0x40) does something */ - tilemap_set_scrollx(state->m_bg_tilemap, 0, state->m_scrollx[0] + 256 * (state->m_scrollx[1] & 0x1f)); - tilemap_set_scrolly(state->m_bg_tilemap, 0, state->m_scrolly[0] + 256 * (state->m_scrolly[1] & 0xff)); + tilemap_set_scrollx(state->m_bg_tilemap, 0, state->m_scrollx); + tilemap_set_scrolly(state->m_bg_tilemap, 0, state->m_scrolly); if (state->m_ninjemak_dispdisable) bitmap_fill(bitmap, cliprect, 0);