Hooked up NB1414M4 to Ninja Emaki, greatly improving gfxs in it [Angelo Salese]

This commit is contained in:
Angelo Salese 2011-05-04 21:55:36 +00:00
parent 372a9d51b2
commit 3c9d563044
4 changed files with 34 additions and 90 deletions

View File

@ -32,6 +32,7 @@ Takahiro Nogi (nogi@kt.rim.or.jp) 1999/12/17 -
#include "sound/dac.h" #include "sound/dac.h"
#include "sound/3526intf.h" #include "sound/3526intf.h"
#include "includes/galivan.h" #include "includes/galivan.h"
#include "includes/nb1414m4.h"
static WRITE8_HANDLER( galivan_sound_command_w ) 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 ) static ADDRESS_MAP_START( galivan_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0xbfff) AM_ROM 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(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(0xd800, 0xdfff) 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(0xe000, 0xe0ff) AM_RAM AM_BASE_SIZE_MEMBER(galivan_state, m_spriteram, m_spriteram_size) AM_RANGE(0xe000, 0xe0ff) AM_RAM AM_BASE_SIZE_MEMBER(galivan_state, m_spriteram, m_spriteram_size)
AM_RANGE(0xe100, 0xffff) AM_RAM AM_RANGE(0xe100, 0xffff) AM_RAM
@ -90,11 +66,8 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( ninjemak_map, AS_PROGRAM, 8 ) static ADDRESS_MAP_START( ninjemak_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0xbfff) AM_ROM 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(0xc000, 0xdfff) AM_ROMBANK("bank1")
AM_RANGE(0xd800, 0xd81f) AM_WRITE(ninjemak_videoreg_w) AM_RANGE(0xd800, 0xdfff) AM_WRITE(galivan_videoram_w) AM_BASE_SIZE_MEMBER(galivan_state, m_videoram, m_videoram_size)
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(0xe000, 0xe1ff) AM_RAM AM_BASE_SIZE_MEMBER(galivan_state, m_spriteram, m_spriteram_size) AM_RANGE(0xe000, 0xe1ff) AM_RAM AM_BASE_SIZE_MEMBER(galivan_state, m_spriteram, m_spriteram_size)
AM_RANGE(0xe200, 0xffff) AM_RAM 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 */ AM_RANGE(0xc0, 0xc0) AM_READ(IO_port_c0_r) /* dangar needs to return 0x58 */
ADDRESS_MAP_END ADDRESS_MAP_END
static WRITE8_HANDLER( blit_trigger_w )
{
galivan_state *state = space->machine().driver_data<galivan_state>();
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 ) static ADDRESS_MAP_START( ninjemak_io_map, AS_IO, 8 )
ADDRESS_MAP_GLOBAL_MASK(0xff) ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x80, 0x80) AM_READ_PORT("P1") AM_WRITE(ninjemak_gfxbank_w) 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(0x83, 0x83) AM_READ_PORT("SERVICE")
AM_RANGE(0x84, 0x84) AM_READ_PORT("DSW1") AM_RANGE(0x84, 0x84) AM_READ_PORT("DSW1")
AM_RANGE(0x85, 0x85) AM_READ_PORT("DSW2") AM_WRITE(galivan_sound_command_w) 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 // ?? // AM_RANGE(0x87, 0x87) AM_WRITENOP // ??
ADDRESS_MAP_END ADDRESS_MAP_END
@ -438,8 +418,8 @@ static MACHINE_RESET( galivan )
// state->m_layers = 0x60; // state->m_layers = 0x60;
state->m_layers = 0; state->m_layers = 0;
state->m_write_layers = 0; state->m_write_layers = 0;
state->m_scrollx[0] = state->m_scrollx[1] = 0; state->m_galivan_scrollx[0] = state->m_galivan_scrollx[1] = 0;
state->m_scrolly[0] = state->m_scrolly[1] = 0; state->m_galivan_scrolly[0] = state->m_galivan_scrolly[1] = 0;
state->m_flipscreen = 0; state->m_flipscreen = 0;
} }
@ -449,8 +429,8 @@ static MACHINE_RESET( ninjemak )
machine.device("maincpu")->reset(); machine.device("maincpu")->reset();
state->m_scrollx[0] = state->m_scrollx[1] = 0; state->m_scrollx = 0;
state->m_scrolly[0] = state->m_scrolly[1] = 0; state->m_scrolly = 0;
state->m_flipscreen = 0; state->m_flipscreen = 0;
state->m_ninjemak_dispdisable = 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.7", 0x0000, 0x4000, CRC(80c20d36) SHA1(f20724754824030d62059388f3ea2224f5b7a60e) )
ROM_LOAD( "ninjemak.6", 0x4000, 0x4000, CRC(1da7a651) SHA1(5307452058164a0bc39d144dd204627a9ead7543) ) 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_LOAD( "ninjemak.5", 0x0000, 0x4000, CRC(5f91dd30) SHA1(3513c0a2e4ca83f602cacad6af9c07fe9e4b16a1) ) /* text layer data */
ROM_REGION( 0x0400, "proms", 0 ) /* Region 3 - color 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.7", 0x0000, 0x4000, CRC(80c20d36) SHA1(f20724754824030d62059388f3ea2224f5b7a60e) )
ROM_LOAD( "ninjemak.6", 0x4000, 0x4000, CRC(1da7a651) SHA1(5307452058164a0bc39d144dd204627a9ead7543) ) 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_LOAD( "ync-5.bin", 0x0000, 0x4000, CRC(993e4ab2) SHA1(aceafc83b36db4db923d27f77ad045e626678bae) ) /* text layer data */
ROM_REGION( 0x0400, "proms", 0 ) /* Region 3 - color 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.7", 0x0000, 0x4000, CRC(80c20d36) SHA1(f20724754824030d62059388f3ea2224f5b7a60e) )
ROM_LOAD( "ninjemak.6", 0x4000, 0x4000, CRC(1da7a651) SHA1(5307452058164a0bc39d144dd204627a9ead7543) ) 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_LOAD( "5.15d", 0x0000, 0x4000, CRC(1b4f64aa) SHA1(2cb2db946bf93e0928d6aa2e2dd29acb92981567) ) /* text layer data x */
ROM_REGION( 0x0400, "proms", 0 ) /* Region 3 - color data */ ROM_REGION( 0x0400, "proms", 0 ) /* Region 3 - color data */

View File

@ -12,7 +12,7 @@ public:
/* memory pointers */ /* memory pointers */
UINT8 * m_videoram; UINT8 * m_videoram;
UINT8 * m_colorram; // UINT8 * m_colorram;
UINT8 * m_spriteram; UINT8 * m_spriteram;
size_t m_videoram_size; size_t m_videoram_size;
size_t m_spriteram_size; size_t m_spriteram_size;
@ -20,8 +20,9 @@ public:
/* video-related */ /* video-related */
tilemap_t *m_bg_tilemap; tilemap_t *m_bg_tilemap;
tilemap_t *m_tx_tilemap; tilemap_t *m_tx_tilemap;
UINT8 m_scrollx[2]; UINT16 m_scrollx;
UINT8 m_scrolly[2]; UINT16 m_scrolly;
UINT8 m_galivan_scrollx[2],m_galivan_scrolly[2];
UINT8 m_flipscreen; UINT8 m_flipscreen;
UINT8 m_write_layers; UINT8 m_write_layers;
UINT8 m_layers; UINT8 m_layers;
@ -35,7 +36,6 @@ public:
WRITE8_HANDLER( galivan_scrollx_w ); WRITE8_HANDLER( galivan_scrollx_w );
WRITE8_HANDLER( galivan_scrolly_w ); WRITE8_HANDLER( galivan_scrolly_w );
WRITE8_HANDLER( galivan_videoram_w ); WRITE8_HANDLER( galivan_videoram_w );
WRITE8_HANDLER( galivan_colorram_w );
WRITE8_HANDLER( galivan_gfxbank_w ); WRITE8_HANDLER( galivan_gfxbank_w );
WRITE8_HANDLER( ninjemak_scrollx_w ); WRITE8_HANDLER( ninjemak_scrollx_w );
WRITE8_HANDLER( ninjemak_scrolly_w ); WRITE8_HANDLER( ninjemak_scrolly_w );

View File

@ -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) void nb_1414m4_exec(address_space *space,UINT16 mcu_cmd,UINT8 *vram,UINT16 &scrollx,UINT16 &scrolly,tilemap_t *tilemap)
{ {
/* latch fg scroll values */ /* latch fg scroll values */
scrollx = (vram[0x0d] & 0xff) | ((vram[0x0e] & 0x3) << 8); scrollx = (vram[0x0d] & 0xff) | ((vram[0x0e] & 0xff) << 8);
scrolly = (vram[0x0b] & 0xff) | ((vram[0x0c] & 0x3) << 8); scrolly = (vram[0x0b] & 0xff) | ((vram[0x0c] & 0xff) << 8);
/* process the command */ /* process the command */
switch(mcu_cmd & 0xff00) switch(mcu_cmd & 0xff00)

View File

@ -134,7 +134,7 @@ static TILE_GET_INFO( get_bg_tile_info )
static TILE_GET_INFO( get_tx_tile_info ) static TILE_GET_INFO( get_tx_tile_info )
{ {
galivan_state *state = machine.driver_data<galivan_state>(); galivan_state *state = machine.driver_data<galivan_state>();
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); int code = state->m_videoram[tile_index] | ((attr & 0x01) << 8);
SET_TILE_INFO( SET_TILE_INFO(
0, 0,
@ -159,7 +159,7 @@ static TILE_GET_INFO( ninjemak_get_bg_tile_info )
static TILE_GET_INFO( ninjemak_get_tx_tile_info ) static TILE_GET_INFO( ninjemak_get_tx_tile_info )
{ {
galivan_state *state = machine.driver_data<galivan_state>(); galivan_state *state = machine.driver_data<galivan_state>();
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); int code = state->m_videoram[tile_index] | ((attr & 0x03) << 8);
SET_TILE_INFO( SET_TILE_INFO(
0, 0,
@ -208,14 +208,7 @@ WRITE8_HANDLER( galivan_videoram_w )
{ {
galivan_state *state = space->machine().driver_data<galivan_state>(); galivan_state *state = space->machine().driver_data<galivan_state>();
state->m_videoram[offset] = data; state->m_videoram[offset] = data;
tilemap_mark_tile_dirty(state->m_tx_tilemap, offset); tilemap_mark_tile_dirty(state->m_tx_tilemap, offset & 0x3ff);
}
WRITE8_HANDLER( galivan_colorram_w )
{
galivan_state *state = space->machine().driver_data<galivan_state>();
state->m_colorram[offset] = data;
tilemap_mark_tile_dirty(state->m_tx_tilemap, offset);
} }
/* Written through port 40 */ /* 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_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); tilemap_set_flip (state->m_tx_tilemap, state->m_flipscreen ? TILEMAP_FLIPX | TILEMAP_FLIPY : 0);
/* bit 3 text bank flag ??? */ /* bit 3 unknown */
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 4 background disable flag */ /* bit 4 background disable flag */
state->m_ninjemak_dispdisable = data & 0x10; state->m_ninjemak_dispdisable = data & 0x10;
@ -307,27 +284,14 @@ WRITE8_HANDLER( galivan_scrollx_w )
state->m_write_layers = 0; state->m_write_layers = 0;
} }
} }
state->m_scrollx[offset] = data; state->m_galivan_scrollx[offset] = data;
} }
/* Written through port 43-44 */ /* Written through port 43-44 */
WRITE8_HANDLER( galivan_scrolly_w ) WRITE8_HANDLER( galivan_scrolly_w )
{ {
galivan_state *state = space->machine().driver_data<galivan_state>(); galivan_state *state = space->machine().driver_data<galivan_state>();
state->m_scrolly[offset] = data; state->m_galivan_scrolly[offset] = data;
}
WRITE8_HANDLER( ninjemak_scrollx_w )
{
galivan_state *state = space->machine().driver_data<galivan_state>();
state->m_scrollx[offset] = data;
}
WRITE8_HANDLER( ninjemak_scrolly_w )
{
galivan_state *state = space->machine().driver_data<galivan_state>();
state->m_scrolly[offset] = data;
} }
@ -380,8 +344,8 @@ static void draw_sprites( running_machine &machine, bitmap_t *bitmap, const rect
SCREEN_UPDATE( galivan ) SCREEN_UPDATE( galivan )
{ {
galivan_state *state = screen->machine().driver_data<galivan_state>(); galivan_state *state = screen->machine().driver_data<galivan_state>();
tilemap_set_scrollx(state->m_bg_tilemap, 0, state->m_scrollx[0] + 256 * (state->m_scrollx[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_scrolly[0] + 256 * (state->m_scrolly[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) if (state->m_layers & 0x40)
bitmap_fill(bitmap, cliprect, 0); bitmap_fill(bitmap, cliprect, 0);
@ -409,8 +373,8 @@ SCREEN_UPDATE( ninjemak )
galivan_state *state = screen->machine().driver_data<galivan_state>(); galivan_state *state = screen->machine().driver_data<galivan_state>();
/* (scrollx[1] & 0x40) does something */ /* (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_scrollx(state->m_bg_tilemap, 0, state->m_scrollx);
tilemap_set_scrolly(state->m_bg_tilemap, 0, state->m_scrolly[0] + 256 * (state->m_scrolly[1] & 0xff)); tilemap_set_scrolly(state->m_bg_tilemap, 0, state->m_scrolly);
if (state->m_ninjemak_dispdisable) if (state->m_ninjemak_dispdisable)
bitmap_fill(bitmap, cliprect, 0); bitmap_fill(bitmap, cliprect, 0);