From 91cd41a1a15fa4d6eea945ea820f3bc1951c1a19 Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Wed, 17 Oct 2012 15:45:42 +0000 Subject: [PATCH] Small changes + promoted to working --- src/mame/drivers/dblcrown.c | 65 +++++++++++++++++++++++++++---------- 1 file changed, 48 insertions(+), 17 deletions(-) diff --git a/src/mame/drivers/dblcrown.c b/src/mame/drivers/dblcrown.c index b94dbfd6fb9..0a239f03a1a 100644 --- a/src/mame/drivers/dblcrown.c +++ b/src/mame/drivers/dblcrown.c @@ -5,11 +5,17 @@ driver by Angelo Salese TODO: - - RAM-based tiles color offset (perhaps there isn't a real palette bank, - it's just sloppy code?) - - Bogus "Hole" in main screen display + - Bogus "Hole" in main screen display; - Is the background pen really black? - - Lots of unmapped I/Os (game doesn't make much use of the HW) + - Lots of unmapped I/Os (game doesn't make much use of the HW); + - outputs / lamps; + - video / irq timings; + + Notes: + - at POST the SW tries to write to the palette RAM in a banking fashion. + I think it's just an HW left-over. + - there are various bogus checks to ROM region throughout the whole SW + (0x0030-0x0031? O.o) ============================================================================ Excellent System @@ -57,6 +63,7 @@ public: UINT8 *m_vram; UINT8 m_vram_bank[2]; UINT8 m_mux_data; + UINT8 m_lamps_data; DECLARE_READ8_MEMBER(bank_r); DECLARE_WRITE8_MEMBER(bank_w); @@ -72,6 +79,9 @@ public: DECLARE_WRITE8_MEMBER(mux_w); DECLARE_READ8_MEMBER(in_mux_r); DECLARE_READ8_MEMBER(in_mux_type_r); + DECLARE_WRITE8_MEMBER(output_w); + DECLARE_READ8_MEMBER(lamps_r); + DECLARE_WRITE8_MEMBER(lamps_w); TIMER_DEVICE_CALLBACK_MEMBER(dblcrown_irq_scanline); @@ -106,7 +116,7 @@ UINT32 dblcrown_state::screen_update( screen_device &screen, bitmap_ind16 &bitma for (x=0;x<32;x++) { UINT16 tile = ((m_vram[count])|(m_vram[count+1]<<8)) & 0xfff; - UINT8 col = (m_vram[count+1] >> 4) + 0x10; + UINT8 col = (m_vram[count+1] >> 4); drawgfx_opaque(bitmap,cliprect,gfx_2,tile,col,0,0,x*16,y*16); @@ -121,7 +131,7 @@ UINT32 dblcrown_state::screen_update( screen_device &screen, bitmap_ind16 &bitma for (x=0;x<64;x++) { UINT16 tile = ((m_vram[count])|(m_vram[count+1]<<8)) & 0xfff; - UINT8 col = 0x10; // TODO + UINT8 col = (m_vram[count+1] >> 4); // ok? drawgfx_transpen(bitmap,cliprect,gfx,tile,col,0,0,x*8,y*8,0); @@ -156,8 +166,8 @@ WRITE8_MEMBER( dblcrown_state::irq_source_w) READ8_MEMBER( dblcrown_state::palette_r) { - if(m_bank & 8) /* TODO: verify this */ - offset+=0x200; + //if(m_bank & 8) /* TODO: verify this */ + // offset+=0x200; return m_pal_ram[offset]; } @@ -166,8 +176,8 @@ WRITE8_MEMBER( dblcrown_state::palette_w) { int r,g,b,datax; - if(m_bank & 8) /* TODO: verify this */ - offset+=0x200; + //if(m_bank & 8) /* TODO: verify this */ + // offset+=0x200; m_pal_ram[offset] = data; offset>>=1; @@ -264,6 +274,25 @@ READ8_MEMBER( dblcrown_state::in_mux_type_r ) return res; } +WRITE8_MEMBER( dblcrown_state::output_w ) +{ + // bit 4: coin counter + + //popmessage("%02x",data); +} + + +READ8_MEMBER( dblcrown_state::lamps_r ) +{ + return m_lamps_data; +} + +WRITE8_MEMBER( dblcrown_state::lamps_w ) +{ + //popmessage("%02x",data); + m_lamps_data = data; +} + static ADDRESS_MAP_START( dblcrown_map, AS_PROGRAM, 8, dblcrown_state ) ADDRESS_MAP_UNMAP_HIGH AM_RANGE(0x0000, 0x7fff) AM_ROM @@ -272,11 +301,11 @@ static ADDRESS_MAP_START( dblcrown_map, AS_PROGRAM, 8, dblcrown_state ) AM_RANGE(0xb800, 0xbfff) AM_RAM AM_SHARE("nvram") AM_RANGE(0xc000, 0xdfff) AM_READWRITE(vram_r, vram_w) AM_RANGE(0xf000, 0xf1ff) AM_READWRITE(palette_r, palette_w) -// AM_RANGE(0xfe00, 0xfeff) AM_RAM // ??? + AM_RANGE(0xfe00, 0xfeff) AM_RAM // ??? AM_RANGE(0xff00, 0xff01) AM_READWRITE(vram_bank_r, vram_bank_w) AM_RANGE(0xff04, 0xff04) AM_READWRITE(irq_source_r,irq_source_w) -// AM_RANGE(0xff00, 0xffff) AM_RAM // ???, intentional fall-through + AM_RANGE(0xff00, 0xffff) AM_RAM // ???, intentional fall-through ADDRESS_MAP_END static ADDRESS_MAP_START( dblcrown_io, AS_IO, 8, dblcrown_state ) @@ -288,10 +317,12 @@ static ADDRESS_MAP_START( dblcrown_io, AS_IO, 8, dblcrown_state ) AM_RANGE(0x03, 0x03) AM_READ_PORT("DSWD") AM_RANGE(0x04, 0x04) AM_READ(in_mux_r) AM_RANGE(0x05, 0x05) AM_READ(in_mux_type_r) + AM_RANGE(0x10, 0x10) AM_READWRITE(lamps_r,lamps_w) AM_RANGE(0x11, 0x11) AM_READWRITE(bank_r,bank_w) AM_RANGE(0x12, 0x12) AM_READWRITE(mux_r,mux_w) -// AM_RANGE(0x20, 0x20) AM_DEVREAD_LEGACY("aysnd", ay8910_r) AM_RANGE(0x20, 0x21) AM_DEVWRITE_LEGACY("aysnd", ay8910_address_data_w) +// AM_RANGE(0x30, 0x30) always 1? + AM_RANGE(0x40, 0x40) AM_WRITE(output_w) ADDRESS_MAP_END static INPUT_PORTS_START( dblcrown ) @@ -455,9 +486,9 @@ static const gfx_layout char_16x16_layout = static GFXDECODE_START( dblcrown ) #ifdef DEBUG_VRAM - GFXDECODE_ENTRY( "vram", 0, char_8x8_layout, 0, 0x20 ) + GFXDECODE_ENTRY( "vram", 0, char_8x8_layout, 0, 0x10 ) #endif - GFXDECODE_ENTRY( "gfx1", 0, char_16x16_layout, 0, 0x20 ) + GFXDECODE_ENTRY( "gfx1", 0, char_16x16_layout, 0, 0x10 ) GFXDECODE_END @@ -538,7 +569,7 @@ static MACHINE_CONFIG_START( dblcrown, dblcrown_state ) MCFG_GFXDECODE(dblcrown) - MCFG_PALETTE_LENGTH(0x200) + MCFG_PALETTE_LENGTH(0x100) MCFG_NVRAM_ADD_0FILL("nvram") @@ -570,4 +601,4 @@ ROM_START( dblcrown ) ROM_LOAD("palce16v8h.u39", 0x0000, 0x0bf1, CRC(997b0ba9) SHA1(1c121ab74f33d5162b619740b08cc7bc694c257d) ) ROM_END -GAME( 1997, dblcrown, 0, dblcrown, dblcrown, driver_device, 0, ROT0, "Cadence Technology", "Double Crown (v1.0.3)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS ) // 1997 DYNA copyright in tile GFX +GAME( 1997, dblcrown, 0, dblcrown, dblcrown, driver_device, 0, ROT0, "Cadence Technology", "Double Crown (v1.0.3)", GAME_IMPERFECT_GRAPHICS ) // 1997 DYNA copyright in tile GFX