diff --git a/src/mame/drivers/goodejan.c b/src/mame/drivers/goodejan.c index 76a97b81fb5..63949a4c5a3 100644 --- a/src/mame/drivers/goodejan.c +++ b/src/mame/drivers/goodejan.c @@ -68,6 +68,7 @@ WRITE16_HANDLER( goodejan_bgvram_w ); WRITE16_HANDLER( goodejan_txvram_w ); WRITE16_HANDLER( goodejan_bg_scrollx_w ); WRITE16_HANDLER( goodejan_bg_scrolly_w ); +WRITE16_HANDLER( goodejan_layer_en_w ); VIDEO_START( goodejan ); VIDEO_UPDATE( goodejan ); @@ -95,11 +96,6 @@ static WRITE16_HANDLER( mahjong_panel_w ) goodejan_mux_data = data; } -static READ16_HANDLER( goodejan_read_ff ) -{ - return 0xff; -} - static ADDRESS_MAP_START( goodejan_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0x00000, 0x0afff) AM_RAM AM_RANGE(0x0c000, 0x0c7ff) AM_RAM_WRITE(goodejan_bgvram_w) AM_BASE(&goodejan_bgvram) @@ -109,16 +105,19 @@ static ADDRESS_MAP_START( goodejan_map, ADDRESS_SPACE_PROGRAM, 16 ) AM_RANGE(0xc0000, 0xfffff) AM_ROM ADDRESS_MAP_END - +/*totmejan CRT is at 8000-804f,goodejan is at 8040-807f(808f but not tested)*/ static ADDRESS_MAP_START( goodejan_io_map, ADDRESS_SPACE_IO, 16 ) + AM_RANGE(0x801c, 0x801d) AM_WRITE(goodejan_layer_en_w ) + AM_RANGE(0x805c, 0x805d) AM_WRITE(goodejan_layer_en_w ) AM_RANGE(0x8060, 0x8061) AM_WRITE(goodejan_bg_scrollx_w ) AM_RANGE(0x8062, 0x8063) AM_WRITE(goodejan_bg_scrolly_w ) AM_RANGE(0xb004, 0xb005) AM_WRITE(mahjong_panel_w) - AM_RANGE(0xc000, 0xc001) AM_READ(goodejan_read_ff) + AM_RANGE(0xc000, 0xc001) AM_READ_PORT("DSW1") AM_RANGE(0xc002, 0xc003) AM_READ(mahjong_panel_r) + AM_RANGE(0xc004, 0xc005) AM_READ_PORT("DSW2") // maybe it's a seibu_main_word mirror? // AM_RANGE(0xc004, 0xc005) AM_READ(random_reading) AM_RANGE(0xd000, 0xd00f) AM_READWRITE(seibu_main_word_r, seibu_main_word_w) @@ -177,8 +176,8 @@ static INPUT_PORTS_START( goodejan ) PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_START("DSW") - PORT_DIPNAME( 0x0001, 0x0001, "4" ) + PORT_START("DSW1") + PORT_DIPNAME( 0x0001, 0x0001, "0" ) PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) @@ -190,7 +189,56 @@ static INPUT_PORTS_START( goodejan ) PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) ) // Freezes if off? + PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0040, 0x0040, "Cross Hatch Test" ) + PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0080, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0100, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0200, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0400, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0800, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x1000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x2000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_START("DSW2") + PORT_DIPNAME( 0x0001, 0x0001, "1" ) + PORT_DIPSETTING( 0x0001, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0002, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0004, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x0008, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x0010, 0x0000, DEF_STR( Unknown ) ) PORT_DIPSETTING( 0x0010, DEF_STR( Off ) ) PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) ) @@ -318,8 +366,7 @@ ROM_START( totmejan ) ROM_LOAD16_BYTE( "4.061", 0x00001, 0x10000, CRC(29fb6ad2) SHA1(8a9c4625472daefca7fb73a9ef3717e86c3d632f) ) ROM_REGION( 0x100000, "gfx2", ROMREGION_DISPOSE ) - ROM_LOAD( "e-jan.064", 0x080000, 0x080000, CRC(5f6185ee) SHA1(599e4a574672cd1571032e879b3032d06b70e4e2) ) - ROM_CONTINUE(0x00000,0x80000) + ROM_LOAD( "e-jan.064", 0x000000, 0x100000, CRC(5f6185ee) SHA1(599e4a574672cd1571032e879b3032d06b70e4e2) ) ROM_REGION( 0x080000, "gfx3", ROMREGION_DISPOSE ) ROM_LOAD( "e-jan.078", 0x000000, 0x080000, CRC(ff9ee9d8) SHA1(5e49e9a666630ca9867ee96b9d2b8d6f503b25df) ) @@ -346,7 +393,8 @@ ROM_START( goodejan ) ROM_LOAD16_BYTE( "4.061", 0x00001, 0x10000, CRC(5bdf7225) SHA1(a8eded9dc5be1db20cddbed1ae8c22de1674de2a) ) ROM_REGION( 0x100000, "gfx2", ROMREGION_DISPOSE ) - ROM_LOAD( "e_jan2scr.064", 0x000000, 0x100000, CRC(71654822) SHA1(fe2a128413999085e321e455aeebda0360d38cb8) ) + ROM_LOAD( "e_jan2scr.064", 0x080000, 0x080000, CRC(71654822) SHA1(fe2a128413999085e321e455aeebda0360d38cb8) ) + ROM_CONTINUE( 0x000000, 0x080000 ) ROM_REGION( 0x080000, "gfx3", ROMREGION_DISPOSE ) ROM_LOAD( "e_jan2obj.078", 0x000000, 0x080000, CRC(0f892ef2) SHA1(188ae43db1c48fb6870aa45c64718e901831499b) ) @@ -373,7 +421,8 @@ ROM_START( goodejaa ) ROM_LOAD16_BYTE( "4.061", 0x00001, 0x10000, CRC(5bdf7225) SHA1(a8eded9dc5be1db20cddbed1ae8c22de1674de2a) ) ROM_REGION( 0x100000, "gfx2", ROMREGION_DISPOSE ) - ROM_LOAD( "e_jan2scr.064", 0x000000, 0x100000, CRC(71654822) SHA1(fe2a128413999085e321e455aeebda0360d38cb8) ) + ROM_LOAD( "e_jan2scr.064", 0x080000, 0x080000, CRC(71654822) SHA1(fe2a128413999085e321e455aeebda0360d38cb8) ) + ROM_CONTINUE( 0x000000, 0x080000 ) ROM_REGION( 0x080000, "gfx3", ROMREGION_DISPOSE ) ROM_LOAD( "e_jan2obj.078", 0x000000, 0x080000, CRC(0f892ef2) SHA1(188ae43db1c48fb6870aa45c64718e901831499b) ) diff --git a/src/mame/video/goodejan.c b/src/mame/video/goodejan.c index e82b3e89859..405a10387e2 100644 --- a/src/mame/video/goodejan.c +++ b/src/mame/video/goodejan.c @@ -2,6 +2,7 @@ static tilemap *bg_tilemap, *tx_tilemap; UINT16 *goodejan_bgvram,*goodejan_txvram; +static UINT16 goodejan_layer_en; WRITE16_HANDLER( goodejan_bgvram_w ) { @@ -15,13 +16,21 @@ WRITE16_HANDLER( goodejan_txvram_w ) tilemap_mark_tile_dirty(tx_tilemap,offset); } +WRITE16_HANDLER( goodejan_layer_en_w ) +{ + /*---- ---- ---x ---- enable sprites*/ + /*---- ---- ---- xxxx enable layers*/ + goodejan_layer_en = data; +} + static TILE_GET_INFO( goodejan_bg_tile_info ) { int tile = goodejan_bgvram[tile_index]&0x0fff; int color = (goodejan_bgvram[tile_index]&0xf000)>>12; // WRONG! - if ((goodejan_bgvram[tile_index]&0x8000)==0x0000) tile+=0x1000; + tile|= (goodejan_bgvram[tile_index]&0x8000)>>3; +// if ((goodejan_bgvram[tile_index]&0x8000)==0x0000) tile+=0x1000; SET_TILE_INFO(1, tile, color, 0); } @@ -48,11 +57,13 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap,const rectan y = spriteram16[offs+3];//&0x1ff; x = spriteram16[offs+2];//&0x1ff; - if (spriteram16[offs+2]&0x8000) x=0x10000-x; - if (spriteram16[offs+3]&0x8000) y=0x10000-y; + if (x&0x8000) x=0-(0x200-(x&0x1ff)); + //else x&=0x1ff; + if (y&0x8000) y=0-(0x200-(y&0x1ff)); + //else y&=0x1ff; color = spriteram16[offs+0]&0x3f; - fx = spriteram16[offs+0]&0x40; + fx = spriteram16[offs+0]&0x4000; fy = 0; /* To do - probably 0x2000 */ dy = ((spriteram16[offs+0]&0x0380)>>7) + 1; dx = ((spriteram16[offs+0]&0x1c00)>>10) + 1; @@ -86,19 +97,21 @@ WRITE16_HANDLER( goodejan_bg_scrolly_w ) VIDEO_START( goodejan ) { - bg_tilemap = tilemap_create(machine, goodejan_bg_tile_info,tilemap_scan_rows, 16,16,32,32); + bg_tilemap = tilemap_create(machine, goodejan_bg_tile_info,tilemap_scan_rows, 16,16,32,32); tx_tilemap = tilemap_create(machine, goodejan_tx_tile_info,tilemap_scan_rows, 8, 8,32,32); tilemap_set_transparent_pen(tx_tilemap,15); } VIDEO_UPDATE( goodejan ) { - tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); - draw_sprites(screen->machine, bitmap,cliprect, 2); - draw_sprites(screen->machine, bitmap,cliprect, 1); - draw_sprites(screen->machine, bitmap,cliprect, 0); - tilemap_draw(bitmap,cliprect,tx_tilemap,0,0); - draw_sprites(screen->machine, bitmap,cliprect, 3); + bitmap_fill(bitmap, cliprect, screen->machine->pens[0]); //black pen,likely to be selectable by a crt register + + if(!(goodejan_layer_en & 1)) { tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); } + if(!(goodejan_layer_en & 0x10)) { draw_sprites(screen->machine, bitmap,cliprect, 2); } + if(!(goodejan_layer_en & 0x10)) { draw_sprites(screen->machine, bitmap,cliprect, 1); } + if(!(goodejan_layer_en & 0x10)) { draw_sprites(screen->machine, bitmap,cliprect, 0); } + if(!(goodejan_layer_en & 8)) { tilemap_draw(bitmap,cliprect,tx_tilemap,0,0); } + if(!(goodejan_layer_en & 0x10)) { draw_sprites(screen->machine, bitmap,cliprect, 3); } return 0; }