diff options
author | hap <happppp@users.noreply.github.com> | 2016-03-11 01:51:13 +0100 |
---|---|---|
committer | hap <happppp@users.noreply.github.com> | 2016-03-11 01:51:32 +0100 |
commit | e27c18a4d407cf29dfc730ee335938175785d55d (patch) | |
tree | fe953d7d2f60b32b8f9bb3148632b8c8b8058332 /src/mame/drivers/carjmbre.cpp | |
parent | 27bf6e5e80d8e47ec8b2e624a8b9ec255cba913e (diff) |
carjmbre: marked game as working again, still some problems with sprites
Diffstat (limited to 'src/mame/drivers/carjmbre.cpp')
-rw-r--r-- | src/mame/drivers/carjmbre.cpp | 77 |
1 files changed, 50 insertions, 27 deletions
diff --git a/src/mame/drivers/carjmbre.cpp b/src/mame/drivers/carjmbre.cpp index 2a9d717933c..68a1330fefd 100644 --- a/src/mame/drivers/carjmbre.cpp +++ b/src/mame/drivers/carjmbre.cpp @@ -60,9 +60,10 @@ public: UINT8 m_bgcolor; tilemap_t *m_tilemap; - DECLARE_WRITE8_MEMBER(nmi_enable_w); DECLARE_WRITE8_MEMBER(bgcolor_w); DECLARE_WRITE8_MEMBER(videoram_w); + DECLARE_WRITE8_MEMBER(nmi_enable_w); + DECLARE_WRITE8_MEMBER(flipscreen_w); INTERRUPT_GEN_MEMBER(vblank_nmi); DECLARE_PALETTE_INIT(carjmbre); @@ -86,6 +87,7 @@ void carjmbre_state::machine_start() save_item(NAME(m_bgcolor)); } + /*************************************************************************** Video @@ -125,9 +127,11 @@ PALETTE_INIT_MEMBER(carjmbre_state, carjmbre) WRITE8_MEMBER(carjmbre_state::bgcolor_w) { - m_bgcolor = data & 0x3f; + // guessed, seems to match with flyer + m_bgcolor = ~data & 0x3f; } + // tilemap WRITE8_MEMBER(carjmbre_state::videoram_w) @@ -136,8 +140,6 @@ WRITE8_MEMBER(carjmbre_state::videoram_w) m_tilemap->mark_tile_dirty(offset & 0x3ff); } - - TILE_GET_INFO_MEMBER(carjmbre_state::get_tile_info) { int attr = m_videoram[tile_index | 0x400]; @@ -154,37 +156,54 @@ void carjmbre_state::video_start() UINT32 carjmbre_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - //bitmap.fill(m_bgcolor, cliprect); - bitmap.fill(0, cliprect); + bitmap.fill(m_bgcolor, cliprect); m_tilemap->draw(screen, bitmap, cliprect, 0, 0); draw_sprites(bitmap, cliprect); return 0; } + // sprites void carjmbre_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) { - for (int offs = 0; offs < m_spriteram.bytes(); offs += 4) + for (int offs = m_spriteram.bytes() - 4; offs >= 0; offs -= 4) { - int sy = 240 - m_spriteram[offs]; + int sy = m_spriteram[offs]; int code = m_spriteram[offs + 1]; int color = m_spriteram[offs + 2] & 0xf; int flipx = m_spriteram[offs + 2] >> 6 & 1; int flipy = m_spriteram[offs + 2] >> 7 & 1; int sx = m_spriteram[offs + 3]; - + + // align to tilemap + if (flip_screen()) + { + sy += 1; + sx = 233 - sx; + flipx = !flipx; + flipy = !flipy; + } + else + { + sy = 241 - sy; + sx -= 7; + } + m_gfxdecode->gfx(1)->transpen(bitmap, cliprect, code, color, flipx, flipy, sx, sy, 0); } } + /*************************************************************************** - I/O - maincpu + I/O, Memory Maps ***************************************************************************/ +// maincpu side + INTERRUPT_GEN_MEMBER(carjmbre_state::vblank_nmi) { if (m_nmi_enabled) @@ -198,11 +217,17 @@ WRITE8_MEMBER(carjmbre_state::nmi_enable_w) m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE); } +WRITE8_MEMBER(carjmbre_state::flipscreen_w) +{ + // d0: flip screen (cocktail mode) + flip_screen_set(data & 1); +} static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, carjmbre_state ) AM_RANGE(0x0000, 0x7fff) AM_ROM AM_RANGE(0x8803, 0x8803) AM_WRITE(nmi_enable_w) AM_RANGE(0x8805, 0x8805) AM_WRITE(bgcolor_w) + AM_RANGE(0x8807, 0x8807) AM_WRITE(flipscreen_w) AM_RANGE(0x8000, 0x87ff) AM_RAM // 6116 AM_RANGE(0x9000, 0x97ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram") // 2114*4 AM_RANGE(0x9800, 0x98ff) AM_RAM AM_SHARE("spriteram") // 5101*2 @@ -211,11 +236,8 @@ static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, carjmbre_state ) AM_RANGE(0xb800, 0xb800) AM_READ_PORT("DSW") AM_WRITE(soundlatch_byte_w) ADDRESS_MAP_END -/*************************************************************************** - - I/O - audiocpu -***************************************************************************/ +// audiocpu side static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, carjmbre_state ) AM_RANGE(0x0000, 0x0fff) AM_MIRROR(0x1000) AM_ROM @@ -233,6 +255,8 @@ static ADDRESS_MAP_START( sound_io_map, AS_IO, 8, carjmbre_state ) AM_RANGE(0x34, 0x34) AM_DEVREAD("ay2", ay8910_device, data_r) ADDRESS_MAP_END + + /*************************************************************************** Inputs @@ -287,31 +311,29 @@ INPUT_PORTS_END +/*************************************************************************** + + Machine Config + +***************************************************************************/ -const gfx_layout carjmbre_spritelayout = +static const gfx_layout carjmbre_spritelayout = { 16,16, RGN_FRAC(1,4), 2, - { RGN_FRAC(1,2), RGN_FRAC(0,2) }, + { RGN_FRAC(2,4), RGN_FRAC(0,4) }, { STEP8(0,1), STEP8(256*16*8,1) }, { STEP16(0,8) }, 16*8 }; - static GFXDECODE_START( carjmbre ) GFXDECODE_ENTRY( "gfx1", 0, gfx_8x8x2_planar, 0, 16 ) GFXDECODE_ENTRY( "gfx2", 0, carjmbre_spritelayout, 0, 16 ) GFXDECODE_END -/*************************************************************************** - - Machine Config - -***************************************************************************/ - static MACHINE_CONFIG_START( carjmbre, carjmbre_state ) /* basic machine hardware */ @@ -328,7 +350,7 @@ static MACHINE_CONFIG_START( carjmbre, carjmbre_state ) MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) MCFG_SCREEN_SIZE(32*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1) + MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) MCFG_SCREEN_UPDATE_DRIVER(carjmbre_state, screen_update) MCFG_SCREEN_PALETTE("palette") @@ -367,8 +389,8 @@ ROM_START( carjmbre ) ROM_LOAD( "c15", 0x0000, 0x1000, CRC(7d7779d1) SHA1(f8f5246be4cc9632076d3330fc3d3343b911dfee) ) ROM_REGION( 0x2000, "gfx1", 0 ) - ROM_LOAD( "c9", 0x0000, 0x1000, CRC(2accb821) SHA1(ce2804536fc1abd3377dc864c8c9976ca28c1b6e) ) - ROM_LOAD( "c10", 0x1000, 0x1000, CRC(75ddbe56) SHA1(5e1363967a822265618793ccb74bf3ef5e0e00b5) ) + ROM_LOAD( "c10", 0x0000, 0x1000, CRC(75ddbe56) SHA1(5e1363967a822265618793ccb74bf3ef5e0e00b5) ) + ROM_LOAD( "c9", 0x1000, 0x1000, CRC(2accb821) SHA1(ce2804536fc1abd3377dc864c8c9976ca28c1b6e) ) ROM_REGION( 0x4000, "gfx2", 0 ) ROM_LOAD( "c11", 0x0000, 0x1000, CRC(d90cd126) SHA1(7ee110cf19b45ee654016ba0ce92f3db6ea2ed92) ) @@ -381,4 +403,5 @@ ROM_START( carjmbre ) ROM_LOAD( "c.d18", 0x0020, 0x0020, CRC(7b9ed1b0) SHA1(ec5e1f56e5a2fc726083866c08ac0e1de0ed6ace) ) ROM_END -GAME( 1983, carjmbre, 0, carjmbre, carjmbre, driver_device, 0, ROT90, "Omori Electric Co., Ltd.", "Car Jamboree", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_COLORS | MACHINE_NOT_WORKING ) + +GAME( 1983, carjmbre, 0, carjmbre, carjmbre, driver_device, 0, ROT90, "Omori Electric Co., Ltd.", "Car Jamboree", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_COLORS | MACHINE_IMPERFECT_GRAPHICS ) |