From bed4069f7bf3303bbdc39ebccd3ef9dcb634bae6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Banaan=20Ananas?= Date: Tue, 6 Aug 2013 14:57:18 +0000 Subject: [PATCH] namcos22 cleanup: moved static functions/vars to class and converted 3d renderer to polynew --- src/mame/drivers/namcos22.c | 6955 +++++++++++++++++----------------- src/mame/includes/namcos22.h | 380 +- src/mame/video/namcos22.c | 3442 ++++++++--------- 3 files changed, 5375 insertions(+), 5402 deletions(-) diff --git a/src/mame/drivers/namcos22.c b/src/mame/drivers/namcos22.c index 728c3c6e50f..e4d4ed26173 100644 --- a/src/mame/drivers/namcos22.c +++ b/src/mame/drivers/namcos22.c @@ -1,6 +1,4 @@ /** - * @file src/drivers/namcos22.c - * * This driver describes Namco's System22 and Super System 22 hardware. * * driver provided with thanks to: @@ -11,7 +9,6 @@ * * Input * - input ports require manual calibration through built-in diagnostics (or canned EEPROM) - * - new input port type needed for bicycle pedal speed * * Output Devices * - Prop Cycle fan (outputs noted at the right MCU port) @@ -1143,7 +1140,7 @@ #define SS22_MASTER_CLOCK (XTAL_49_152MHz) /* info from Guru */ -#define PIXEL_CLOCK ((SS22_MASTER_CLOCK*2)/4) // x 2 is due of the interlaced screen ... +#define PIXEL_CLOCK ((SS22_MASTER_CLOCK*2)/4) /* x 2 is due of the interlaced screen ... */ // VSync - 59.9042 Hz // HSync - 15.7248 kHz @@ -1158,800 +1155,28 @@ #define MCU_SPEEDUP 1 /* mcu idle skipping */ -/** - * helper function used to read a byte from a chunk of 32 bit memory - */ -static UINT8 nthbyte( const UINT32 *pSource, int offs ) -{ - pSource += offs/4; - return (pSource[0]<<((offs&3)*8))>>24; -} /*********************************************************************************************/ -/* TODO: REMOVE (THIS IS HANDLED BY "IOMCU") */ -static void HandleCoinage(running_machine &machine, int slots, int address_is_odd) +// Main CPU + +/* SCI, prelim! */ +READ32_MEMBER(namcos22_state::namcos22_sci_r) { - namcos22_state *state = machine.driver_data(); - UINT16 *share16 = (UINT16 *)state->m_shareram.target(); - UINT32 coin_state; - - coin_state = state->ioport("INPUTS")->read() & 0x1200; - - if (!(coin_state & 0x1000) && (state->m_old_coin_state & 0x1000)) - { - state->m_credits1++; - } - - if (!(coin_state & 0x0200) && (state->m_old_coin_state & 0x0200)) - { - state->m_credits2++; - } - - state->m_old_coin_state = coin_state; - - share16[BYTE_XOR_LE(0x38/2)] = state->m_credits1 << (address_is_odd*8); - - if (slots == 2) - { - share16[BYTE_XOR_LE(0x3e/2)] = state->m_credits2 << (address_is_odd*8); - } -} - -/* TODO: REMOVE (THIS IS HANDLED BY "IOMCU") */ -static void HandleDrivingIO( running_machine &machine ) -{ - namcos22_state *state = machine.driver_data(); - if( nthbyte(state->m_system_controller, 0x18) != 0 ) - { - UINT16 flags = state->ioport("INPUTS")->read(); - UINT16 coinram_address_is_odd = 0; - - UINT16 gas = machine.root_device().ioport("GAS")->read(); - UINT16 brake = machine.root_device().ioport("BRAKE")->read(); - UINT16 steer = machine.root_device().ioport("STEER")->read(); - - switch (state->m_gametype) - { - case NAMCOS22_RIDGE_RACER: - case NAMCOS22_RIDGE_RACER2: - gas <<= 3; - gas += 884; - brake <<= 3; - brake += 809; - steer <<= 4; - steer += 0x160; - break; - - case NAMCOS22_RAVE_RACER: - gas <<= 3; - gas += 992; - brake <<= 3; - brake += 3008; - steer <<= 4; - steer += 32; - break; - - case NAMCOS22_VICTORY_LAP: - coinram_address_is_odd = 1; - // (fall through) - case NAMCOS22_ACE_DRIVER: - gas <<= 3; - gas += 992; - brake <<= 3; - brake += 3008; - steer <<= 4; - steer += 2048; - break; - - default: - gas <<= 3; - brake <<= 3; - steer <<= 4; - break; - } - - HandleCoinage(machine, 2, coinram_address_is_odd); - state->m_shareram[0x000/4] = 0x10<<16; /* SUB CPU ready */ - state->m_shareram[0x030/4] = (flags<<16)|steer; - state->m_shareram[0x034/4] = (gas<<16)|brake; - } -} - -/* TODO: REMOVE (THIS IS HANDLED BY "IOMCU") */ -static void HandleCyberCommandoIO( running_machine &machine ) -{ - namcos22_state *state = machine.driver_data(); - if( nthbyte(state->m_system_controller, 0x18) != 0 ) - { - UINT16 flags = state->ioport("INPUTS")->read(); - - UINT16 volume0 = state->ioport("STICKY1")->read() * 0x10; - UINT16 volume1 = state->ioport("STICKY2")->read() * 0x10; - UINT16 volume2 = state->ioport("STICKX1")->read() * 0x10; - UINT16 volume3 = state->ioport("STICKX2")->read() * 0x10; - - state->m_shareram[0x030/4] = (flags<<16) | volume0; - state->m_shareram[0x034/4] = (volume1<<16) | volume2; - state->m_shareram[0x038/4] = volume3<<16; - - HandleCoinage(machine, 1, 0); - } -} - -/*********************************************************************************************/ - -READ16_MEMBER(namcos22_state::pdp_status_r) -{ - return m_MasterBIOZ; -} - -void namcos22_state::WriteToPointRAM(offs_t offs, UINT32 data ) -{ - offs &= 0xffffff; /* 24 bit addressing */ - if( m_bSuperSystem22 ) - { - if( offs>=0xf80000 && offs<=0xf9ffff ) - m_pPointRAM[offs-0xf80000] = data & 0x00ffffff; - } - else - { - if( offs>=0xf00000 && offs<=0xf1ffff ) - m_pPointRAM[offs-0xf00000] = data & 0x00ffffff; - } -} - -UINT32 namcos22_state::ReadFromCommRAM(offs_t offs ) -{ - return m_polygonram[offs&0x7fff]; -} - -void namcos22_state::WriteToCommRAM(offs_t offs, UINT32 data ) -{ - if (data & 0x00800000) m_polygonram[offs&0x7fff] = data | 0xff000000; - else m_polygonram[offs&0x7fff] = data & 0x00ffffff; -} - -READ16_MEMBER(namcos22_state::pdp_begin_r) -{ - /* this feature appears to be only used on Super System22 hardware */ - if( m_bSuperSystem22 ) - { - UINT16 offs = m_polygonram[0x20000/4-1]; - m_MasterBIOZ = 1; - for(;;) - { - UINT16 start = offs; - UINT16 cmd = ReadFromCommRAM(offs++); - UINT32 srcAddr; - UINT32 dstAddr; - UINT32 numWords; - UINT32 data; - switch( cmd ) - { - case 0xfff0: - /* NOP? used in 'PDP LOOP TEST' */ - break; - - case 0xfff5: /* write to point ram */ - dstAddr = ReadFromCommRAM(offs++); /* 32 bit PointRAM address */ - data = ReadFromCommRAM(offs++); /* 24 bit data */ - WriteToPointRAM(dstAddr, data ); - break; - - case 0xfff6: /* read word from point ram */ - srcAddr = ReadFromCommRAM(offs++); /* 32 bit PointRAM address */ - dstAddr = ReadFromCommRAM(offs++); /* CommRAM address; receives 24 bit PointRAM data */ - data = namcos22_point_rom_r( machine(), srcAddr ); - WriteToCommRAM(dstAddr, data ); - break; - - case 0xfff7: /* block move (CommRAM to CommRAM) */ - srcAddr = ReadFromCommRAM(offs++); - dstAddr = ReadFromCommRAM(offs++); - numWords = ReadFromCommRAM(offs++); - while( numWords-- ) - { - data = ReadFromCommRAM(srcAddr++); - WriteToCommRAM(dstAddr++, data ); - } - break; - - case 0xfffa: /* read block from point ram */ - srcAddr = ReadFromCommRAM(offs++); /* 32 bit PointRAM address */ - dstAddr = ReadFromCommRAM(offs++); /* CommRAM address; receives data */ - numWords = ReadFromCommRAM(offs++); /* block size */ - while( numWords-- ) - { - data = namcos22_point_rom_r( machine(), srcAddr++ ); - WriteToCommRAM(dstAddr++, data ); - } - break; - - case 0xfffb: /* write block to point ram */ - dstAddr = ReadFromCommRAM(offs++); /* 32 bit PointRAM address */ - numWords = ReadFromCommRAM(offs++); /* block size */ - while( numWords-- ) - { - data = ReadFromCommRAM(offs++ ); /* 24 bit source data */ - WriteToPointRAM(dstAddr++, data ); - } - break; - - case 0xfffc: /* point ram to point ram */ - srcAddr = ReadFromCommRAM(offs++); - dstAddr = ReadFromCommRAM(offs++); - numWords = ReadFromCommRAM(offs++); - while( numWords-- ) - { - data = namcos22_point_rom_r( machine(), srcAddr++ ); - WriteToPointRAM(dstAddr++, data ); - } - break; - - case 0xfffd: /* direct command to render device */ - // len -> command (eg. BB0003) -> data - numWords = ReadFromCommRAM(offs++); - while( numWords-- ) - { - data = ReadFromCommRAM(offs++); - //namcos22_WriteDataToRenderDevice( data ); - } - break; - - case 0xfffe: /* unknown */ - data = ReadFromCommRAM(offs++); /* ??? (usually 0x400 or 0) */ - break; - - case 0xffff: /* "goto" command */ - offs = ReadFromCommRAM(offs); - if( offs == start ) - { - /* most commands end with a "goto self" */ - return 0; - } - break; - - default: - logerror( "unknown PDP cmd = 0x%04x!\n", cmd ); - return 0; - } - } - } - return 0; -} - -READ16_MEMBER(namcos22_state::slave_external_ram_r) -{ - return m_pSlaveExternalRAM[offset]; -} - -WRITE16_MEMBER(namcos22_state::slave_external_ram_w) -{ - COMBINE_DATA( &m_pSlaveExternalRAM[offset] ); -} - -static void HaltSlaveDSP( running_machine &machine ) -{ - namcos22_state *state = machine.driver_data(); - state->m_slave->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); - namcos22_enable_slave_simulation(machine, 0); -} - -static void EnableSlaveDSP( running_machine &machine ) -{ -// namcos22_state *state = machine.driver_data(); -// state->m_slave->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); - namcos22_enable_slave_simulation(machine, 1); -} - -READ16_MEMBER(namcos22_state::dsp_HOLD_signal_r) -{ - /* STUB */ - return 0; -} - -WRITE16_MEMBER(namcos22_state::dsp_HOLD_ACK_w) -{ - /* STUB */ -} - -WRITE16_MEMBER(namcos22_state::dsp_XF_output_w) -{ - /* STUB */ -} - -/************************************************************/ - -WRITE16_MEMBER(namcos22_state::point_ram_idx_w) -{ - m_PointAddr<<=16; - m_PointAddr |= data; -} - -WRITE16_MEMBER(namcos22_state::point_ram_loword_iw) -{ - m_PointData |= data; - WriteToPointRAM(m_PointAddr++, m_PointData ); -} - -WRITE16_MEMBER(namcos22_state::point_ram_hiword_w) -{ - m_PointData = (data<<16); -} - -READ16_MEMBER(namcos22_state::point_ram_loword_r) -{ - return namcos22_point_rom_r(machine(), m_PointAddr)&0xffff; -} - -READ16_MEMBER(namcos22_state::point_ram_hiword_ir) -{ - return namcos22_point_rom_r(machine(), m_PointAddr++)>>16; -} - -WRITE16_MEMBER(namcos22_state::dsp_unk2_w) -{ - /** - * Used by Ridge Racer (Japan) to specify baseaddr - * for post-processed display-list output. - * - * Prop Cycle doesn't use this; instead it writes this - * addr to the uppermost word of CommRAM. - */ -} - -enum -{ - eDSP_UPLOAD_READY, - eDSP_UPLOAD_DEST, - eDSP_UPLOAD_DATA -}; - -READ16_MEMBER(namcos22_state::dsp_unk_port3_r) -{ - m_MasterBIOZ = 0; - m_DspUploadState = eDSP_UPLOAD_READY; - return 0; -} - -WRITE16_MEMBER(namcos22_state::upload_code_to_slave_dsp_w) -{ - switch( m_DspUploadState ) - { - case eDSP_UPLOAD_READY: - logerror( "UPLOAD_READY; cmd = 0x%x\n", data ); - switch (data) - { - case 0: - HaltSlaveDSP(machine()); - break; - case 1: - m_DspUploadState = eDSP_UPLOAD_DEST; - break; - case 2: - /* custom IC poke */ - break; - case 3: - EnableSlaveDSP(machine()); - break; - case 4: - break; - case 0x10: - /* serial i/o related? */ - EnableSlaveDSP(machine()); - break; - - default: - logerror( "%08x: master port#7: 0x%04x\n", space.device().safe_pcbase(), data ); - break; - } - break; - - case eDSP_UPLOAD_DEST: - m_UploadDestIdx = data; - m_DspUploadState = eDSP_UPLOAD_DATA; - break; - - case eDSP_UPLOAD_DATA: - m_pSlaveExternalRAM[m_UploadDestIdx&0x1fff] = data; - m_UploadDestIdx++; - break; - - default: - break; - } -} - -READ16_MEMBER(namcos22_state::dsp_unk8_r) -{ - /* bit 0x0001 is busy signal */ - return 0; -} - -READ16_MEMBER(namcos22_state::custom_ic_status_r) -{ - /* bit 0x0001 signals completion */ - return 0x0063; -} - -READ16_MEMBER(namcos22_state::dsp_upload_status_r) -{ - /** - * bit 0x0001 is polled to confirm that code/data has been - * successfully uploaded to the slave dsp via port 0x7. - */ - return 0x0000; -} - -READ16_MEMBER(namcos22_state::master_external_ram_r) -{ - return m_pMasterExternalRAM[offset]; -} - -WRITE16_MEMBER(namcos22_state::master_external_ram_w) -{ - COMBINE_DATA( &m_pMasterExternalRAM[offset] ); -} - -WRITE16_MEMBER(namcos22_state::slave_serial_io_w) -{ - m_SerialDataSlaveToMasterNext = data; - logerror( "slave_serial_io_w(%04x)\n", data ); -} - -READ16_MEMBER(namcos22_state::master_serial_io_r) -{ - logerror( "master_serial_io_r() == %04x\n", - m_SerialDataSlaveToMasterCurrent ); - return m_SerialDataSlaveToMasterCurrent; -} - -TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::dsp_master_serial_irq) -{ - int scanline = param; - - if( m_bEnableDspIrqs ) - { - m_SerialDataSlaveToMasterCurrent = m_SerialDataSlaveToMasterNext; - - if(scanline == 480) - m_master->set_input_line(TMS32025_INT0, HOLD_LINE); - else if((scanline % 2) == 0) - { - m_master->set_input_line(TMS32025_RINT, HOLD_LINE); - m_master->set_input_line(TMS32025_XINT, HOLD_LINE); - } - } -} - -TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::dsp_slave_serial_irq) -{ - int scanline = param; - - if( m_bEnableDspIrqs ) - { - if((scanline % 2) == 0) - { - m_slave->set_input_line(TMS32025_RINT, HOLD_LINE); - m_slave->set_input_line(TMS32025_XINT, HOLD_LINE); - } - } -} - -WRITE16_MEMBER(namcos22_state::dsp_unk_porta_w) -{ -} - -WRITE16_MEMBER(namcos22_state::dsp_led_w) -{ - /* I believe this port controls diagnostic LEDs on the DSP PCB. */ -} - -/** - * master dsp usage pattern: - * - * 4059: out $10,PA$8 - * 405A: in $09,PA$8; lac $09,0h; andk 0001h,0h; bnz $405A * - * 4060: out $11,PA$8 - * - * 4061: out $10,PA$F - * 4062: nop; rpt *+; out *+,PA$C // send data to 'render device' - * 4065: out $11,PA$F - * - * 4066: out $10,PA$9 - * 4067: nop - * 4068: out $11,PA$9 - ************************************************************** - * 0x03a2 // 0x0fff zcode lo - * 0x0001 // 0x000f zcode hi - * 0xbd00 // color - * 0x13a2 // flags - * - * 0x0100 0x009c // u,v - * 0x0072 0xf307 // sx,sy - * 0x602b 0x9f28 // i,zpos - * - * 0x00bf 0x0060 // u,v - * 0x0040 0xf3ec // sx,sy - * 0x602b 0xad48 // i,zpos - * - * 0x00fb 0x00ca // u,v - * 0x0075 0xf205 // sx,sy - * 0x602b 0x93e8 // i,zpos - * - * 0x00fb 0x00ca // u,v - * 0x0075 0xf205 // sx,sy - * 0x602b 0x93e8 // i,zpos - */ -WRITE16_MEMBER(namcos22_state::dsp_unk8_w) -{ - m_RenderBufSize = 0; -} - -WRITE16_MEMBER(namcos22_state::master_render_device_w) -{ - if( m_RenderBufSize(); - int i; - UINT8 data[4]; - if( read_or_write ) - { - for( i=0; im_nvmem.bytes()/4; i++ ) - { - UINT32 dword = state->m_nvmem[i]; - data[0] = dword>>24; - data[1] = (dword&0x00ff0000)>>16; - data[2] = (dword&0x0000ff00)>>8; - data[3] = dword&0xff; - file->write( data, 4 ); - } - } - else - { - if( file ) - { - for( i=0; im_nvmem.bytes()/4; i++ ) - { - file->read( data, 4 ); - state->m_nvmem[i] = (data[0]<<24)|(data[1]<<16)|(data[2]<<8)|data[3]; - } - } - else - { - memset( state->m_nvmem, 0x00, state->m_nvmem.bytes() ); - if (machine.root_device().memregion("nvram")->bytes() == state->m_nvmem.bytes()) - { - UINT8* nvram = machine.root_device().memregion("nvram")->base(); - - for( i=0; im_nvmem.bytes()/4; i++ ) - { - state->m_nvmem[i] = (nvram[0+i*4]<<24)|(nvram[1+i*4]<<16)|(nvram[2+i*4]<<8)|nvram[3+i*4]; - } - } - } - } -} - -/* Super System22 supports a sprite layer. - * Sprites are rendered as part of the polygon draw list, based on a per-sprite Z attribute. - * Each sprite has explicit placement/color/zoom controls. - */ -static const gfx_layout sprite_layout = -{ - 32,32, - RGN_FRAC(1,1), - 8, - { 0,1,2,3,4,5,6,7 }, - { - 0*8,1*8,2*8,3*8,4*8,5*8,6*8,7*8, - 8*8,9*8,10*8,11*8,12*8,13*8,14*8,15*8, - 16*8,17*8,18*8,19*8,20*8,21*8,22*8,23*8, - 24*8,25*8,26*8,27*8,28*8,29*8,30*8,31*8 }, - { - 0*32*8,1*32*8,2*32*8,3*32*8,4*32*8,5*32*8,6*32*8,7*32*8, - 8*32*8,9*32*8,10*32*8,11*32*8,12*32*8,13*32*8,14*32*8,15*32*8, - 16*32*8,17*32*8,18*32*8,19*32*8,20*32*8,21*32*8,22*32*8,23*32*8, - 24*32*8,25*32*8,26*32*8,27*32*8,28*32*8,29*32*8,30*32*8,31*32*8 }, - 32*32*8 -}; - -static const gfx_layout texture_tile_layout = -{ - 16,16, - RGN_FRAC(1,1), - 8, - { 0,1,2,3,4,5,6,7 }, - { - 0*8,1*8,2*8,3*8,4*8,5*8,6*8,7*8,8*8,9*8,10*8,11*8,12*8,13*8,14*8,15*8 - }, - { - 0*16*8,1*16*8,2*16*8,3*16*8,4*16*8,5*16*8,6*16*8,7*16*8, - 8*16*8,9*16*8,10*16*8,11*16*8,12*16*8,13*16*8,14*16*8,15*16*8 - }, - 16*16*8 -}; - -#define XOR(a) WORD2_XOR_BE(a) - -/* text layer uses a set of 16x16x8bpp tiles defined in RAM */ -static const gfx_layout namcos22_cg_layout = -{ - 16,16, - 0x400, /* 0x3c0 */ - 4, - { 0,1,2,3 }, - { XOR(0)*4, XOR(1)*4, XOR(2)*4, XOR(3)*4, XOR(4)*4, XOR(5)*4, XOR(6)*4, XOR(7)*4, - XOR(8)*4, XOR(9)*4, XOR(10)*4, XOR(11)*4, XOR(12)*4, XOR(13)*4, XOR(14)*4, XOR(15)*4 }, - { 64*0,64*1,64*2,64*3,64*4,64*5,64*6,64*7,64*8,64*9,64*10,64*11,64*12,64*13,64*14,64*15 }, - 64*16 -}; - -static GFXDECODE_START( namcos22 ) - GFXDECODE_ENTRY( NULL, 0, namcos22_cg_layout, 0, 0x800 ) - GFXDECODE_ENTRY( "textile", 0, texture_tile_layout, 0, 0x80 ) -GFXDECODE_END - -static GFXDECODE_START( super ) - GFXDECODE_ENTRY( NULL, 0, namcos22_cg_layout, 0, 0x800 ) - GFXDECODE_ENTRY( "textile", 0, texture_tile_layout, 0, 0x80 ) - GFXDECODE_ENTRY( "sprite", 0, sprite_layout, 0, 0x80 ) -GFXDECODE_END - -/* prelim! */ -READ32_MEMBER(namcos22_state::namcos22_C139_SCI_r) -{ - switch( offset ) + switch (offset) { case 0x0/4: - return 0x0004<<16; + return 0x0004 << 16; + default: return 0; } } #if 0 -WRITE32_MEMBER(namcos22_state::namcos22_C139_SCI_w) +WRITE32_MEMBER(namcos22_state::namcos22_sci_w) { - COMBINE_DATA( &namcos22_C139_SCI[offset] ); + COMBINE_DATA(&m_sci_regs[offset]); /* 20020000 2 R/W RX Status 0x01 : Frame Error @@ -1981,10 +1206,6 @@ WRITE32_MEMBER(namcos22_state::namcos22_C139_SCI_w) } #endif -READ32_MEMBER(namcos22_state::namcos22_system_controller_r) -{ - return m_system_controller[offset]; -} /* system controller (super system22) @@ -2025,78 +1246,88 @@ READ32_MEMBER(namcos22_state::namcos22_system_controller_r) 0x1c: dsp control */ -WRITE32_MEMBER(namcos22_state::namcos22s_system_controller_w) +WRITE8_MEMBER(namcos22_state::namcos22s_system_controller_w) { - int oldreg, newreg; - - // acknowledge irqs - if (offset == 0x04/4 && mem_mask & 0xff000000) + switch (offset) { - // vblank - m_irq_state &= ~1; - m_maincpu->set_input_line(nthbyte(m_system_controller, 0x00) & 7, CLEAR_LINE); - } - - // irq level / enable irqs - if (offset == 0x00/4 && mem_mask & 0xff000000) - { - // vblank - oldreg = nthbyte(m_system_controller, 0x00) & 7; - newreg = data >> 24 & 7; - if (m_irq_state & 1 && oldreg != newreg) + // irq level / enable irqs + case 0x00: // vblank + case 0x01: // hblank + case 0x02: // SCI + case 0x03: // unknown { - m_maincpu->set_input_line(oldreg, CLEAR_LINE); - if (newreg) - m_maincpu->set_input_line(newreg, ASSERT_LINE); - else - m_irq_state &= ~1; + int line = 1 << offset; + int oldlevel = m_syscontrol[offset] & 7; + int newlevel = data & 7; + if (m_irq_state & line && oldlevel != newlevel) + { + m_maincpu->set_input_line(oldlevel, CLEAR_LINE); + if (newlevel) + m_maincpu->set_input_line(newlevel, ASSERT_LINE); + else + m_irq_state &= ~line; + } + break; } - } - - // enable mcu - if (offset == 0x16/4 && mem_mask & 0x0000ff00) - { - if (data & 0x0000ff00) - m_mcu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); - else - m_mcu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); - } - - // dsp control - if (offset == 0x1c/4 && mem_mask & 0xff000000) - { - oldreg = nthbyte(m_system_controller, 0x1c); - newreg = data >> 24 & 0xff; - if (newreg != oldreg) + + // acknowledge irqs + case 0x04: // vblank + case 0x05: // hblank + case 0x06: // SCI + case 0x07: // unknown { - if( newreg == 0 ) - { - /* disable DSPs */ - m_master->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); /* master DSP */ - m_slave->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); /* slave DSP */ - namcos22_enable_slave_simulation(machine(), 0); - m_bEnableDspIrqs = 0; - } - else if( newreg == 1 ) - { - /* enable dsp and rendering subsystem */ - m_master->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); - namcos22_enable_slave_simulation(machine(), 1); - m_bEnableDspIrqs = 1; - } - else if( newreg == 0xff ) - { - /* used to upload game-specific code to master/slave dsps */ - m_master->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); - m_bEnableDspIrqs = 0; - } + int line = 1 << (offset-4); + m_irq_state &= ~line; + m_maincpu->set_input_line(m_syscontrol[offset-4] & 7, CLEAR_LINE); + break; } + + // watchdog + case 0x14: + break; + + // reset mcu + case 0x16: + m_mcu->set_input_line(INPUT_LINE_RESET, data ? CLEAR_LINE : ASSERT_LINE); + break; + + // dsp control + case 0x1c: + if (data != m_syscontrol[0x1c]) + { + if (data == 0) + { + /* disable DSPs */ + m_master->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + m_slave->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + enable_slave_simulation(false); + m_dsp_irq_enabled = false; + } + else if (data == 1) + { + /* enable dsp and rendering subsystem */ + m_master->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); + enable_slave_simulation(true); + m_dsp_irq_enabled = true; + } + else if (data == 0xff) + { + /* used to upload game-specific code to master/slave dsps */ + m_master->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); + m_dsp_irq_enabled = false; + } + } + break; + + // other regs: unknown + default: + break; } - - COMBINE_DATA( &m_system_controller[offset] ); - + + m_syscontrol[offset] = data; } + /* 000064: 0000 8C9A (1) 000068: 0000 8CA2 (2) @@ -2111,14 +1342,16 @@ WRITE32_MEMBER(namcos22_state::namcos22s_system_controller_w) */ INTERRUPT_GEN_MEMBER(namcos22_state::namcos22s_interrupt) { - if (nthbyte(m_system_controller, 0x00) & 7) + if (m_syscontrol[0x00] & 7) { // vblank irq - m_irq_state |= 1; - device.execute().set_input_line(nthbyte(m_system_controller, 0x00) & 7, ASSERT_LINE); + m_irq_state |= (1 << 0x00); + device.execute().set_input_line(m_syscontrol[0x00] & 7, ASSERT_LINE); } } + + /* system controller (system22) 0x00: IRQ (unknown) @@ -2156,76 +1389,87 @@ INTERRUPT_GEN_MEMBER(namcos22_state::namcos22s_interrupt) 0x1a: 0 or 1 or 0xff -> DSP control 0x1b: ? */ -WRITE32_MEMBER(namcos22_state::namcos22_system_controller_w) +WRITE8_MEMBER(namcos22_state::namcos22_system_controller_w) { - int oldreg, newreg; - - // acknowledge irqs - if (offset == 0x09/4 && mem_mask & 0x00ff0000) + switch (offset) { - // vblank - m_irq_state &= ~1; - m_maincpu->set_input_line(nthbyte(m_system_controller, 0x04) & 7, CLEAR_LINE); - } - - // irq level / enable irqs - if (offset == 0x04/4 && mem_mask & 0xff000000) - { - // vblank - oldreg = nthbyte(m_system_controller, 0x04) & 7; - newreg = data >> 24 & 7; - if (m_irq_state & 1 && oldreg != newreg) + // irq level / enable irqs + case 0x00: // unknown + case 0x01: // ? + case 0x02: // SCI + case 0x03: // unknown + case 0x04: // vblank { - m_maincpu->set_input_line(oldreg, CLEAR_LINE); - if (newreg) - m_maincpu->set_input_line(newreg, ASSERT_LINE); - else - m_irq_state &= ~1; + int line = 1 << offset; + int oldlevel = m_syscontrol[offset] & 7; + int newlevel = data & 7; + if (m_irq_state & line && oldlevel != newlevel) + { + m_maincpu->set_input_line(oldlevel, CLEAR_LINE); + if (newlevel) + m_maincpu->set_input_line(newlevel, ASSERT_LINE); + else + m_irq_state &= ~line; + } + break; } - } - - // enable mcu - if (offset == 0x1a/4 && mem_mask & 0xff000000) - { - if (data & 0xff000000) - m_mcu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); - else - m_mcu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); - } - - // dsp control - if (offset == 0x1a/4 && mem_mask & 0x0000ff00) - { - oldreg = nthbyte(m_system_controller, 0x1a); - newreg = data >> 8 & 0xff; - if (newreg != oldreg) + + // acknowledge irqs + case 0x05: // unknown + case 0x06: // ? + case 0x07: // SCI + case 0x08: // unknown + case 0x09: // vblank { - if( newreg == 0 ) - { - /* disable DSPs */ - m_master->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); /* master DSP */ - m_slave->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); /* slave DSP */ - namcos22_enable_slave_simulation(machine(), 0); - m_bEnableDspIrqs = 0; - } - else if( newreg == 1 ) - { - /* enable dsp and rendering subsystem */ - m_master->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); - namcos22_enable_slave_simulation(machine(), 1); - m_bEnableDspIrqs = 1; - } - else if( newreg == 0xff ) - { - /* used to upload game-specific code to master/slave dsps */ - m_master->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); - m_bEnableDspIrqs = 0; - } + int line = 1 << (offset-5); + m_irq_state &= ~line; + m_maincpu->set_input_line(m_syscontrol[offset-5] & 7, CLEAR_LINE); + break; } + + // watchdog + case 0x16: + break; + + // reset mcu + case 0x18: + m_mcu->set_input_line(INPUT_LINE_RESET, data ? CLEAR_LINE : ASSERT_LINE); + break; + + // dsp control + case 0x1a: + if (data != m_syscontrol[0x1a]) + { + if (data == 0) + { + /* disable DSPs */ + m_master->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + m_slave->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + enable_slave_simulation(false); + m_dsp_irq_enabled = false; + } + else if (data == 1) + { + /* enable dsp and rendering subsystem */ + m_master->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); + enable_slave_simulation(true); + m_dsp_irq_enabled = true; + } + else if (data == 0xff) + { + /* used to upload game-specific code to master/slave dsps */ + m_master->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); + m_dsp_irq_enabled = false; + } + } + break; + + // other regs: unknown + default: + break; } - COMBINE_DATA( &m_system_controller[offset] ); - + m_syscontrol[offset] = data; } /* namcos22_interrupt @@ -2274,32 +1518,61 @@ Cyber Commando: */ INTERRUPT_GEN_MEMBER(namcos22_state::namcos22_interrupt) { - switch( m_gametype ) + switch (m_gametype) { case NAMCOS22_RIDGE_RACER: case NAMCOS22_RIDGE_RACER2: case NAMCOS22_RAVE_RACER: case NAMCOS22_ACE_DRIVER: case NAMCOS22_VICTORY_LAP: - HandleDrivingIO(machine()); + handle_driving_io(); break; case NAMCOS22_CYBER_COMMANDO: - HandleCyberCommandoIO(machine()); + handle_cybrcomm_io(); break; default: break; } - if (nthbyte(m_system_controller, 0x04) & 7) + if (m_syscontrol[0x04] & 7) { // vblank irq - m_irq_state |= 1; - device.execute().set_input_line(nthbyte(m_system_controller, 0x04) & 7, ASSERT_LINE); + m_irq_state |= (1 << 0x04); + device.execute().set_input_line(m_syscontrol[0x04] & 7, ASSERT_LINE); } } +READ8_MEMBER(namcos22_state::namcos22_system_controller_r) +{ + return m_syscontrol[offset]; +} + + +WRITE32_MEMBER(namcos22_state::namcos22s_nvmem_w) +{ + mem_mask &= 0xff00ff00; // 8KB RAM over 16KB address &space + COMBINE_DATA(&m_nvmem[offset]); +} + +READ32_MEMBER(namcos22_state::namcos22_dspram_r) +{ + return signed24(m_polygonram[offset]); // only d0-23 are connected +} + +WRITE32_MEMBER(namcos22_state::namcos22_dspram_w) +{ + if (mem_mask & 0x00ff0000) + { + // only d0-23 are connected + mem_mask |= 0xff000000; + data = signed24(data); // ! + } + COMBINE_DATA(&m_polygonram[offset]); +} + + READ32_MEMBER(namcos22_state::namcos22_keycus_r) { // this chip is also used for reading random values in some games @@ -2352,72 +1625,13 @@ READ16_MEMBER(namcos22_state::namcos22_dipswitch_r) return ioport("DSW0")->read(); } -READ32_MEMBER(namcos22_state::namcos22_mcuram_r) -{ - return m_shareram[offset]; -} - -WRITE32_MEMBER(namcos22_state::namcos22_mcuram_w) -{ - COMBINE_DATA(&m_shareram[offset]); -} - -READ32_MEMBER(namcos22_state::namcos22_gun_r) -{ - UINT16 xpos = ioport("LIGHTX")->read(); - UINT16 ypos = ioport("LIGHTY")->read(); - // ypos is not completely understood yet, there should be a difference between case 1 and 2 - - switch( offset ) - { - case 0: /* 430000 */ - return xpos<<16; - - case 1: /* 430004 */ - case 2: /* 430008 */ - return ypos<<16; - - default: - return 0; - } -} - WRITE16_MEMBER(namcos22_state::namcos22_cpuleds_w) { // 8 leds on cpu board, 0=on 1=off // on system 22: two rows of 4 red leds // on super system 22: GYRGYRGY green/yellow/red for (int i = 0; i < 8; i++) - output_set_lamp_value(i, (~data<> 16; + + // 8-bit access? (see alpinerd) else if (ACCESSING_BITS_24_31) m_chipselect = data >> 24; } -/* Namco Super System 22 */ -static ADDRESS_MAP_START( namcos22s_am, AS_PROGRAM, 32, namcos22_state ) - AM_RANGE(0x000000, 0x3fffff) AM_ROM - AM_RANGE(0x400000, 0x40001f) AM_READWRITE(namcos22_keycus_r, namcos22_keycus_w) - AM_RANGE(0x410000, 0x413fff) AM_RAM /* C139 SCI buffer */ - AM_RANGE(0x420000, 0x42000f) AM_READ(namcos22_C139_SCI_r) AM_WRITEONLY /* C139 SCI registers */ - AM_RANGE(0x440000, 0x440003) AM_READWRITE16(namcos22_dipswitch_r, namcos22_cpuleds_w, 0xffffffff) - AM_RANGE(0x450008, 0x45000b) AM_READWRITE16(namcos22_portbit_r, namcos22_portbit_w, 0xffffffff) - AM_RANGE(0x460000, 0x463fff) AM_RAM_WRITE(namcos22s_nvmem_w) AM_SHARE("nvmem") - AM_RANGE(0x700000, 0x70001f) AM_READWRITE(namcos22_system_controller_r, namcos22s_system_controller_w) AM_SHARE("syscontrol") - AM_RANGE(0x800000, 0x800003) AM_WRITE(namcos22s_chipselect_w) - AM_RANGE(0x810000, 0x81000f) AM_RAM AM_SHARE("czattr") - AM_RANGE(0x810200, 0x8103ff) AM_READWRITE(namcos22s_czram_r, namcos22s_czram_w) - AM_RANGE(0x820000, 0x8202ff) AM_WRITENOP /* leftover of old (non-super) video mixer device */ - AM_RANGE(0x824000, 0x8243ff) AM_READWRITE(namcos22_gamma_r, namcos22_gamma_w) AM_SHARE("gamma") - AM_RANGE(0x828000, 0x83ffff) AM_READWRITE(namcos22_paletteram_r, namcos22_paletteram_w) AM_SHARE("paletteram") - AM_RANGE(0x860000, 0x860007) AM_READWRITE(namcos22s_spotram_r, namcos22s_spotram_w) - AM_RANGE(0x880000, 0x89dfff) AM_READWRITE(namcos22_cgram_r, namcos22_cgram_w) AM_SHARE("cgram") - AM_RANGE(0x89e000, 0x89ffff) AM_READWRITE(namcos22_textram_r, namcos22_textram_w) AM_SHARE("textram") - AM_RANGE(0x8a0000, 0x8a000f) AM_READWRITE(namcos22_tilemapattr_r, namcos22_tilemapattr_w) AM_SHARE("tilemapattr") - AM_RANGE(0x900000, 0x90ffff) AM_RAM AM_SHARE("vics_data") - AM_RANGE(0x940000, 0x94007f) AM_READWRITE(namcos22s_vics_control_r, namcos22s_vics_control_w) AM_SHARE("vics_control") - AM_RANGE(0x980000, 0x9affff) AM_RAM AM_SHARE("spriteram") /* C374 */ - AM_RANGE(0xa04000, 0xa0bfff) AM_READWRITE(namcos22_mcuram_r, namcos22_mcuram_w) AM_SHARE("shareram") /* COM RAM */ - AM_RANGE(0xc00000, 0xc1ffff) AM_READWRITE(namcos22_dspram_r, namcos22_dspram_w) AM_SHARE("polygonram") - AM_RANGE(0xe00000, 0xe3ffff) AM_RAM /* workram */ -ADDRESS_MAP_END - -static ADDRESS_MAP_START( timecris_am, AS_PROGRAM, 32, namcos22_state ) - AM_RANGE(0x430000, 0x43000f) AM_READ(namcos22_gun_r) - AM_IMPORT_FROM( namcos22s_am ) -ADDRESS_MAP_END - -READ16_MEMBER(namcos22_state::s22mcu_shared_r) -{ - UINT16 *share16 = (UINT16 *)m_shareram.target(); - - return share16[BYTE_XOR_BE(offset)]; -} - -WRITE16_MEMBER(namcos22_state::s22mcu_shared_w) -{ - UINT16 *share16 = (UINT16 *)m_shareram.target(); - - COMBINE_DATA(&share16[BYTE_XOR_BE(offset)]); -} - -/* - MCU memory map - -------------- - 000000-00027f: internal MCU registers and RAM - 002000-002fff: C352 PCM chip - 004000-00bfff: shared RAM with host CPU - 00c000-00ffff: BIOS ROM (internal on System 22, external on Super) - 200000-27ffff: data ROM - 301000-301001: watchdog? - 308000-308003: unknown (I/O?) - - pin hookups - ----------- - 5 (IRQ0): C383 custom (probably vsync) - 7 (IRQ2): 74F244 at 8c, pin 3 - - port assignments - ---------------- - port 4: "bankswitches" the controls read at port 5, probably other functions too - port 5: on read, digital controls (buttons, coins, start, service switch) - on write, various outputs (lamps, the fan in prop cycle, etc) - ADC : analog inputs - -*/ - -// Super System 22 M37710 -static ADDRESS_MAP_START( mcu_program, AS_PROGRAM, 16, namcos22_state ) - AM_RANGE(0x002000, 0x002fff) AM_DEVREADWRITE("c352", c352_device, read, write) - AM_RANGE(0x004000, 0x00bfff) AM_READWRITE(s22mcu_shared_r, s22mcu_shared_w ) - AM_RANGE(0x00c000, 0x00ffff) AM_ROM AM_REGION("mcu", 0xc000) - AM_RANGE(0x080000, 0x0fffff) AM_ROM AM_REGION("mcu", 0) - AM_RANGE(0x200000, 0x27ffff) AM_ROM AM_REGION("mcu", 0) - AM_RANGE(0x280000, 0x2fffff) AM_ROM AM_REGION("mcu", 0) - AM_RANGE(0x301000, 0x301001) AM_NOP // watchdog? LEDs? - AM_RANGE(0x308000, 0x308003) AM_NOP // volume control IC? -ADDRESS_MAP_END - -// System 22 37702 -static ADDRESS_MAP_START( mcu_s22_program, AS_PROGRAM, 16, namcos22_state ) - AM_RANGE(0x002000, 0x002fff) AM_DEVREADWRITE("c352", c352_device, read, write) - AM_RANGE(0x004000, 0x00bfff) AM_READWRITE(s22mcu_shared_r, s22mcu_shared_w ) - AM_RANGE(0x00c000, 0x00ffff) AM_ROM AM_REGION("mcu_c74", 0) - AM_RANGE(0x080000, 0x0fffff) AM_ROM AM_REGION("mcu", 0) - AM_RANGE(0x200000, 0x27ffff) AM_ROM AM_REGION("mcu", 0) - AM_RANGE(0x280000, 0x2fffff) AM_ROM AM_REGION("mcu", 0) - AM_RANGE(0x301000, 0x301001) AM_NOP // watchdog? LEDs? - AM_RANGE(0x308000, 0x308003) AM_NOP // volume control IC? -ADDRESS_MAP_END - -static ADDRESS_MAP_START( iomcu_s22_program, AS_PROGRAM, 16, namcos22_state ) - AM_RANGE(0x00c000, 0x00ffff) AM_ROM AM_REGION("iomcu", 0) -ADDRESS_MAP_END - - -WRITE8_MEMBER(namcos22_state::mcu_port4_w) -{ - m_p4 = data; -} - -READ8_MEMBER(namcos22_state::mcu_port4_r) -{ - return m_p4; -} - -WRITE8_MEMBER(namcos22_state::mcu_port5_w) -{ - ; -} - -READ8_MEMBER(namcos22_state::mcu_port5_r) -{ - if (m_p4 & 8) - return ioport("MCUP5A")->read_safe(0xff); - else - return ioport("MCUP5B")->read_safe(0xff); -} - -WRITE8_MEMBER(namcos22_state::mcu_port6_w) -{ - ; -} - -READ8_MEMBER(namcos22_state::mcu_port6_r) -{ - return 0; -} - -WRITE8_MEMBER(namcos22_state::mcu_port7_w) -{ - ; -} - -READ8_MEMBER(namcos22_state::mcu_port7_r) -{ - return 0; -} - -WRITE8_MEMBER(namcos22_state::propcycle_mcu_port5_w) -{ - // prop cycle outputs: - // bit 1 = fan - // bit 2 = button light - - output_set_value("fan0", data & 1); - set_led_status(machine(), 0, data & 2); -} - -READ8_MEMBER(namcos22_state::namcos22s_mcu_adc_r) -{ - static const char *const portnames[] = { "ADC0", "ADC1", "ADC2", "ADC3" }; - if (offset & 1) - return (ioport(portnames[offset >> 1 & 3])->read_safe(0) << 2) >> 8 & 0xff; - else - return (ioport(portnames[offset >> 1 & 3])->read_safe(0) << 2) & 0xff; -} - -TIMER_CALLBACK_MEMBER(namcos22_state::alpine_steplock_callback) -{ - m_motor_status = param; -} - -WRITE8_MEMBER(namcos22_state::alpine_mcu_port5_w) -{ - // bits 1+2 are steplock motor outputs - if ((data & 6) == 6) - { - if (m_motor_status == 2) - { - // free steps - m_motor_status = 0; - m_motor_timer->adjust(attotime::from_msec(500), 1); - } - } - else if (data & 4) - { - if (m_motor_status == 1) - { - // lock steps - m_motor_status = 0; - m_motor_timer->adjust(attotime::from_msec(500), 2); - } - } -} - -static ADDRESS_MAP_START( mcu_io, AS_IO, 8, namcos22_state ) - AM_RANGE(M37710_PORT4, M37710_PORT4) AM_READ(mcu_port4_r ) AM_WRITE(mcu_port4_w ) - AM_RANGE(M37710_PORT5, M37710_PORT5) AM_READ(mcu_port5_r ) AM_WRITE(mcu_port5_w ) - AM_RANGE(M37710_PORT6, M37710_PORT6) AM_READ(mcu_port6_r ) AM_WRITE(mcu_port6_w ) - AM_RANGE(M37710_PORT7, M37710_PORT7) AM_READ(mcu_port7_r ) AM_WRITE(mcu_port7_w ) - AM_RANGE(M37710_ADC0_L, M37710_ADC3_H) AM_READ(namcos22s_mcu_adc_r) - AM_RANGE(M37710_ADC4_L, M37710_ADC7_H) AM_READNOP -ADDRESS_MAP_END - -READ8_MEMBER(namcos22_state::mcu_port4_s22_r) -{ - // for C74, 0x10 selects sound MCU role, 0x00 selects control-reading role - return (&space.device() == m_mcu) ? 0x10: 0x00; -} - -static ADDRESS_MAP_START( mcu_s22_io, AS_IO, 8, namcos22_state ) - AM_RANGE(M37710_PORT4, M37710_PORT4) AM_READ(mcu_port4_s22_r ) -ADDRESS_MAP_END - -static ADDRESS_MAP_START( iomcu_s22_io, AS_IO, 8, namcos22_state ) - AM_RANGE(M37710_PORT4, M37710_PORT4) AM_READ(mcu_port4_s22_r ) - AM_RANGE(0x00, 0xff) AM_NOP -ADDRESS_MAP_END - -TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::mcu_irq) -{ - int scanline = param; - - /* TODO: real sources of these */ - if(scanline == 480) - m_mcu->set_input_line(M37710_LINE_IRQ0, HOLD_LINE); - else if(scanline == 500) - m_mcu->set_input_line(M37710_LINE_ADC, HOLD_LINE); - else if(scanline == 0) - m_mcu->set_input_line(M37710_LINE_IRQ2, HOLD_LINE); -} - -void namcos22_state::machine_reset() -{ - m_master->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); - m_slave->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); - m_mcu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); -} - -void namcos22_state::machine_start() -{ - m_portbits[0] = 0xffff; - m_portbits[1] = 0xffff; -} - -static MACHINE_CONFIG_START( namcos22s, namcos22_state ) - - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", M68EC020,SS22_MASTER_CLOCK/2) - MCFG_CPU_PROGRAM_MAP(namcos22s_am) - MCFG_CPU_VBLANK_INT_DRIVER("screen", namcos22_state, namcos22s_interrupt) - - MCFG_CPU_ADD("master", TMS32025,SS22_MASTER_CLOCK) - MCFG_CPU_PROGRAM_MAP(master_dsp_program) - MCFG_CPU_DATA_MAP(master_dsp_data) - MCFG_CPU_IO_MAP(master_dsp_io) - MCFG_TIMER_DRIVER_ADD_SCANLINE("master_st", namcos22_state, dsp_master_serial_irq, "screen", 0, 1) - - MCFG_CPU_ADD("slave", TMS32025,SS22_MASTER_CLOCK) - MCFG_CPU_PROGRAM_MAP(slave_dsp_program) - MCFG_CPU_DATA_MAP(slave_dsp_data) - MCFG_CPU_IO_MAP(slave_dsp_io) - MCFG_TIMER_DRIVER_ADD_SCANLINE("slave_st", namcos22_state, dsp_slave_serial_irq, "screen", 0, 1) - - MCFG_CPU_ADD("mcu", M37710, SS22_MASTER_CLOCK/3) - MCFG_CPU_PROGRAM_MAP(mcu_program) - MCFG_CPU_IO_MAP( mcu_io) - MCFG_TIMER_DRIVER_ADD_SCANLINE("mcu_st", namcos22_state, mcu_irq, "screen", 0, 1) - - MCFG_QUANTUM_TIME(attotime::from_hz(6000)) -// MCFG_QUANTUM_PERFECT_CPU("maincpu") -// MCFG_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) - - MCFG_NVRAM_HANDLER(namcos22) - - /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(namcos22_state, screen_update_namcos22s) - - MCFG_PALETTE_LENGTH(NAMCOS22_PALETTE_SIZE) - MCFG_GFXDECODE(super) - MCFG_VIDEO_START_OVERRIDE(namcos22_state,namcos22s) - - /* sound hardware */ - MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - - MCFG_C352_ADD("c352", SS22_MASTER_CLOCK/2) - MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) - MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(3, "lspeaker", 1.00) -MACHINE_CONFIG_END - - -static MACHINE_CONFIG_DERIVED( timecris, namcos22s ) - - /* basic machine hardware */ - MCFG_CPU_MODIFY("maincpu") - MCFG_CPU_PROGRAM_MAP(timecris_am) -MACHINE_CONFIG_END - - -TIMER_CALLBACK_MEMBER(namcos22_state::adillor_trackball_interrupt) -{ - generic_pulse_irq_line(m_mcu, param ? M37710_LINE_TIMERA2TICK : M37710_LINE_TIMERA3TICK, 1); -} - -TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::adillor_trackball_update) -{ - // arbitrary timer for reading optical trackball - UINT8 ix = ioport("TRACKX")->read(); - UINT8 iy = ioport("TRACKY")->read(); - - if (ix != 0x80 || iy < 0x80) - { - if (iy >= 0x80) - iy = 0x7f; - double x = (double)(ix - 0x80) / 127.0; - double y = (double)(0x80 - iy) / 127.0; - - // normalize - double a = atan(x/y); - double p = sqrt(x*x + y*y); - double v = (fabs(a) < (M_PI / 4.0)) ? p*cos(a) : p*sin(a); - v = fabs(v); - - // note that it is rotated by 45 degrees, so instead of axes like (+), they are like (x) - a += (M_PI / 4.0); - if (a < 0) - a = 0; - else if (a > (M_PI / 2.0)) - a = M_PI / 2.0; - - // tied to mcu A2/A3 timer (speed determines frequency) - // these values(in usec) may need tweaking: - const int base = 1000; - const int range = 5000; - - double t[2]; - t[0] = v*sin(a); // y -> A2 - t[1] = v*cos(a); // x -> A3 - - for (int axis = 0; axis < 2; axis++) - { - if (t[axis] > (1.0 / (double)(range))) - { - attotime freq = attotime::from_usec((base + range) - ((double)(range) * t[axis])); - m_ar_tb_interrupt[axis]->adjust(min(freq, m_ar_tb_interrupt[axis]->remaining()), axis, freq); - } - else - { - // not moving - m_ar_tb_interrupt[axis]->adjust(attotime::never, axis, attotime::never); - } - } - } - else - { - // both axes not moving - for (int axis = 0; axis < 2; axis++) - { - m_ar_tb_interrupt[axis]->adjust(attotime::never, axis, attotime::never); - } - } -} - -MACHINE_START_MEMBER(namcos22_state,adillor) -{ - machine_start(); - - for (int axis = 0; axis < 2; axis++) - m_ar_tb_interrupt[axis] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(namcos22_state::adillor_trackball_interrupt),this)); -} - -static MACHINE_CONFIG_DERIVED( adillor, namcos22s ) - - /* basic machine hardware */ - MCFG_TIMER_DRIVER_ADD_PERIODIC("ar_tb_upd", namcos22_state, adillor_trackball_update, attotime::from_msec(20)) - - MCFG_MACHINE_START_OVERRIDE(namcos22_state,adillor) -MACHINE_CONFIG_END - - -TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::propcycl_pedal_interrupt) -{ - generic_pulse_irq_line(m_mcu, M37710_LINE_TIMERA3TICK, 1); -} - -TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::propcycl_pedal_update) -{ - // arbitrary timer for reading optical pedal - UINT8 i = ioport("PEDAL")->read(); - - if (i != 0) - { - // the pedal has a simple 1-bit "light interrupted" sensor. the faster you pedal, - // the faster it pulses. this is connected to the clock input for timer A3, - // and timer A3 is configured by the MCU program to cause an interrupt each time - // it's clocked. by counting the number of interrupts in a frame, we can determine - // how fast the user is pedaling. - - // these values(in usec) may need tweaking: - const int base = 1000; - const int range = 10000; - - attotime freq = attotime::from_usec(base + range * (1.0 / (double)i)); - m_pc_pedal_interrupt->adjust(min(freq, m_pc_pedal_interrupt->time_left()), 0, freq); - - } - else - { - // not moving - m_pc_pedal_interrupt->adjust(attotime::never, 0, attotime::never); - } -} - -static MACHINE_CONFIG_DERIVED( propcycl, namcos22s ) - - /* basic machine hardware */ - MCFG_TIMER_DRIVER_ADD_PERIODIC("pc_p_upd", namcos22_state, propcycl_pedal_update, attotime::from_msec(20)) - MCFG_TIMER_DRIVER_ADD("pc_p_int", namcos22_state, propcycl_pedal_interrupt) -MACHINE_CONFIG_END - -/*********************************************************************************/ - -/* Namco System 22 */ +// System 22 static ADDRESS_MAP_START( namcos22_am, AS_PROGRAM, 32, namcos22_state ) /** * Program ROM (2M bytes) @@ -2925,13 +1719,13 @@ static ADDRESS_MAP_START( namcos22_am, AS_PROGRAM, 32, namcos22_state ) * 2002000c 2 R/W RX FIFO Pointer (0x0000 - 0x0fff) * 2002000e 2 W TX FIFO Pointer (0x0000 - 0x1fff) */ - AM_RANGE(0x20020000, 0x2002000f) AM_READ(namcos22_C139_SCI_r) AM_WRITEONLY + AM_RANGE(0x20020000, 0x2002000f) AM_READ(namcos22_sci_r) AM_WRITEONLY /** * System Controller: Interrupt Control, Peripheral Control * */ - AM_RANGE(0x40000000, 0x4000001f) AM_READWRITE(namcos22_system_controller_r, namcos22_system_controller_w) AM_SHARE("syscontrol") + AM_RANGE(0x40000000, 0x4000001f) AM_READWRITE8(namcos22_system_controller_r, namcos22_system_controller_w, 0xffffffff) /** * Unknown Device (optional for diagnostics?) @@ -2996,7 +1790,7 @@ static ADDRESS_MAP_START( namcos22_am, AS_PROGRAM, 32, namcos22_state ) * +0x0300 - 0x03ff? Song Title (put messages here from Sound CPU) */ AM_RANGE(0x60000000, 0x60003fff) AM_WRITENOP - AM_RANGE(0x60004000, 0x6000bfff) AM_READWRITE(namcos22_mcuram_r, namcos22_mcuram_w) AM_SHARE("shareram") + AM_RANGE(0x60004000, 0x6000bfff) AM_RAM AM_SHARE("shareram") /** * C71 (TI TMS320C25 DSP) Shared RAM (0x70000000 - 0x70020000) @@ -3025,13 +1819,13 @@ static ADDRESS_MAP_START( namcos22_am, AS_PROGRAM, 32, namcos22_state ) * Mounted position: VIDEO 7D (C305) * Notes: Boot time check: 0x90020100 - 0x9002027f */ - AM_RANGE(0x90020000, 0x90027fff) AM_READWRITE(namcos22_gamma_r, namcos22_gamma_w) AM_SHARE("gamma") + AM_RANGE(0x90020000, 0x90027fff) AM_RAM AM_SHARE("video_mixer") /** * Mounted position: VIDEO 6B, 7B, 8B (near C305) * Note: 0xff00-0xffff are for Tilemap (16 x 16) */ - AM_RANGE(0x90028000, 0x9003ffff) AM_READWRITE(namcos22_paletteram_r, namcos22_paletteram_w) AM_SHARE("paletteram") + AM_RANGE(0x90028000, 0x9003ffff) AM_RAM_WRITE(namcos22_paletteram_w) AM_SHARE("paletteram") /** * unknown (option) @@ -3042,7 +1836,7 @@ static ADDRESS_MAP_START( namcos22_am, AS_PROGRAM, 32, namcos22_state ) /** * Tilemap PCG Memory */ - AM_RANGE(0x90080000, 0x9009dfff) AM_READWRITE(namcos22_cgram_r, namcos22_cgram_w) AM_SHARE("cgram") + AM_RANGE(0x90080000, 0x9009dfff) AM_RAM_WRITE(namcos22_cgram_w) AM_SHARE("cgram") /** * Tilemap Memory (64 x 64) @@ -3050,7 +1844,7 @@ static ADDRESS_MAP_START( namcos22_am, AS_PROGRAM, 32, namcos22_state ) * Known chip type: HM511664 (64k x 16bit SRAM) * Note: Self test: 90084000 - 9009ffff */ - AM_RANGE(0x9009e000, 0x9009ffff) AM_READWRITE(namcos22_textram_r, namcos22_textram_w) AM_SHARE("textram") + AM_RANGE(0x9009e000, 0x9009ffff) AM_RAM_WRITE(namcos22_textram_w) AM_SHARE("textram") /** * Tilemap Register @@ -3060,1621 +1854,1406 @@ static ADDRESS_MAP_START( namcos22_am, AS_PROGRAM, 32, namcos22_state ) ADDRESS_MAP_END -static MACHINE_CONFIG_START( namcos22, namcos22_state ) - - /* basic machine hardware */ - MCFG_CPU_ADD("maincpu", M68020,SS22_MASTER_CLOCK/2) /* 25 MHz? */ - MCFG_CPU_PROGRAM_MAP(namcos22_am) - MCFG_CPU_VBLANK_INT_DRIVER("screen", namcos22_state, namcos22_interrupt) - - MCFG_CPU_ADD("master", TMS32025,SS22_MASTER_CLOCK) /* ? */ - MCFG_CPU_PROGRAM_MAP(master_dsp_program) - MCFG_CPU_DATA_MAP(master_dsp_data) - MCFG_CPU_IO_MAP(master_dsp_io) - MCFG_TIMER_DRIVER_ADD_SCANLINE("master_st", namcos22_state, dsp_master_serial_irq, "screen", 0, 1) - - MCFG_CPU_ADD("slave", TMS32025,SS22_MASTER_CLOCK) /* ? */ - MCFG_CPU_PROGRAM_MAP(slave_dsp_program) - MCFG_CPU_DATA_MAP(slave_dsp_data) - MCFG_CPU_IO_MAP(slave_dsp_io) - MCFG_TIMER_DRIVER_ADD_SCANLINE("slave_st", namcos22_state, dsp_slave_serial_irq, "screen", 0, 1) - - MCFG_CPU_ADD("mcu", M37702, SS22_MASTER_CLOCK/3) // C74 on the CPU board has no periodic interrupts, it runs entirely off Timer A0 - MCFG_CPU_PROGRAM_MAP( mcu_s22_program) - MCFG_CPU_IO_MAP( mcu_s22_io) - - MCFG_CPU_ADD("iomcu", M37702, XTAL_6_144MHz) // 6.144MHz XTAL on I/O board, not sure if it has a divider - MCFG_CPU_PROGRAM_MAP( iomcu_s22_program) - MCFG_CPU_IO_MAP( iomcu_s22_io) - -// MCFG_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) - - MCFG_NVRAM_HANDLER(namcos22) - - /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) - MCFG_SCREEN_UPDATE_DRIVER(namcos22_state, screen_update_namcos22) - - MCFG_PALETTE_LENGTH(NAMCOS22_PALETTE_SIZE) - MCFG_GFXDECODE(namcos22) - MCFG_VIDEO_START_OVERRIDE(namcos22_state,namcos22) - - /* sound hardware */ - MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - - MCFG_C352_ADD("c352", SS22_MASTER_CLOCK/2) - MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) - MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) - MCFG_SOUND_ROUTE(3, "lspeaker", 1.00) -MACHINE_CONFIG_END - -/*********************************************************************************/ - -ROM_START( airco22b ) - ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "acs1verb.1", 0x00003, 0x100000, CRC(062c4f61) SHA1(98e1c75dd0f493eb6ebb64b46543217c1d40116e) ) - ROM_LOAD32_BYTE( "acs1verb.2", 0x00002, 0x100000, CRC(8ae69711) SHA1(4c5323fa8f0419275e330fec66d1fb2b89bb3795) ) - ROM_LOAD32_BYTE( "acs1verb.3", 0x00001, 0x100000, CRC(71738e67) SHA1(eb8c66dedbeff911b6166ebbda466fb9656ef0fb) ) - ROM_LOAD32_BYTE( "acs1verb.4", 0x00000, 0x100000, CRC(3b193add) SHA1(5e3bca13905bfa3a2947f4f16ca01878b0a14a3a) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.20 */ - ROM_LOAD( "acs1data.8k", 0, 0x080000, CRC(33824bc9) SHA1(80ec63883770e5eec1f5f1ddc16a85ef8f22a48b) ) - - ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ - ROM_LOAD( "acs1scg0.12l", 0x200000*0, 0x200000,CRC(e5235404) SHA1(3133b71d1bde3a9815cd02e97382b8078b62b0bb) ) - ROM_LOAD( "acs1scg1.10l", 0x200000*1, 0x200000,CRC(828e91e7) SHA1(8383b029cd29fbad107fd49e866defb50c11c99a) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "acs1cg0.8d", 0x200000*0x0, 0x200000,CRC(1f31343e) SHA1(25ba730cec74e0ed0b404f5c4430b7c3368c9b52) ) - ROM_LOAD( "acs1cg1.10d", 0x200000*0x1, 0x200000,CRC(ccd5481d) SHA1(050e6fc7d4e0591f8ffc9552d140b6bd4533c06d) ) - ROM_LOAD( "acs1cg2.12d", 0x200000*0x2, 0x200000,CRC(14e5d0d2) SHA1(3147ad11098030e9cfd93fbc0a1b3aafa8b8aba6) ) - ROM_LOAD( "acs1cg3.13d", 0x200000*0x3, 0x200000,CRC(1a7bcc16) SHA1(bbc4ca5b208bea8394d1679e4e2d17d22331e2c8) ) - ROM_LOAD( "acs1cg4.14d", 0x200000*0x4, 0x200000,CRC(1920b7fb) SHA1(56318f2a96c55998bb9a8d791d56be3dfb39867e) ) - ROM_LOAD( "acs1cg5.16d", 0x200000*0x5, 0x200000,CRC(3dd109b7) SHA1(a7f914b9b80f1bca1afb6144698578a29ca74676) ) - ROM_LOAD( "acs1cg6.18d", 0x200000*0x6, 0x200000,CRC(ec71c8a3) SHA1(86892a91883d483ca0d422b78fa36042e02f3ad3) ) - ROM_LOAD( "acs1cg7.19d", 0x200000*0x7, 0x200000,CRC(82271757) SHA1(023c935e78b14da310e4c29da8785b82aa3241ac) ) - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "acs1ccrl.3d", 0x000000, 0x200000,CRC(07088ba1) SHA1(a962c0821d5af28ed508cfdbd613675454e306e3) ) - ROM_LOAD( "acs1ccrh.1d", 0x200000, 0x080000,CRC(62936af6) SHA1(ca80b68415aa2cd2ce4e90404f10640d0ae38be9) ) - - ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "acs1ptl0.18k", 0x80000*0x0, 0x80000,CRC(bd5896c7) SHA1(58ec7d0f1e0bfdbf4908e1d920bbd7f094993777) ) - ROM_LOAD( "acs1ptl1.16k", 0x80000*0x1, 0x80000,CRC(e583b975) SHA1(beb0cc2b44bc69af057c2bb744cd7e1b95de577a) ) - ROM_LOAD( "acs1ptl2.15k", 0x80000*0x2, 0x80000,CRC(802d737a) SHA1(3d99a369db70d13fb87c2ff26c82b4b39afe94d9) ) - ROM_LOAD( "acs1ptl3.14k", 0x80000*0x3, 0x80000,CRC(fe556ecb) SHA1(9d9dbbb4f1d3688fb763001834640d79d9987d47) ) - - ROM_LOAD( "acs1ptm0.18j", 0x80000*0x4, 0x80000,CRC(949b6c58) SHA1(6ea016551b10f5d5764921dcc5a4b81d2b93d701) ) - ROM_LOAD( "acs1ptm1.16j", 0x80000*0x5, 0x80000,CRC(8b2b99d9) SHA1(89c3545c4035509307728a9577018c1100ce3a54) ) - ROM_LOAD( "acs1ptm2.15j", 0x80000*0x6, 0x80000,CRC(f1515080) SHA1(27a87217a140477a6840a610c95ae57abc0d01a6) ) - ROM_LOAD( "acs1ptm3.14j", 0x80000*0x7, 0x80000,CRC(e364f4aa) SHA1(3af6a864765871664cccad82c4795f677be68d51) ) - - ROM_LOAD( "acs1ptu0.18f", 0x80000*0x8, 0x80000,CRC(746b3084) SHA1(73397d1f22300fb3a81a0a068da4d0a8cfdc0a36) ) - ROM_LOAD( "acs1ptu1.16f", 0x80000*0x9, 0x80000,CRC(b44f1d3b) SHA1(f3f1a85c082053653e4da7d7f01f1baef1a013c8) ) - ROM_LOAD( "acs1ptu2.15f", 0x80000*0xa, 0x80000,CRC(fdd2d778) SHA1(0269f971d778e908a1efb5a63b08fb3365d98c2a) ) - ROM_LOAD( "acs1ptu3.14f", 0x80000*0xb, 0x80000,CRC(38b425d4) SHA1(8ff6dd6775d42afdff4c9fb2232e4d72b38e515a) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "acs1wav0.1", 0x400000, 0x400000, CRC(52fb9762) SHA1(125c163e62d701c2e17ba0b572ed27c944ca0412) ) - ROM_LOAD( "acs1wav1.2", 0x800000, 0x400000, CRC(b568dca2) SHA1(503deb277691d801acac1380ded2868a5d5ac501) ) -ROM_END - -ROM_START( alpinerc ) - ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "ar2ver-c.1", 0x00003, 0x100000, CRC(61323842) SHA1(e3c33248340bee252f230124fa9b7fa935a60565) ) - ROM_LOAD32_BYTE( "ar2ver-c.2", 0x00002, 0x100000, CRC(43795b2d) SHA1(e060f3259661279a36300431c5ca7347bde8b6ec) ) - ROM_LOAD32_BYTE( "ar2ver-c.3", 0x00001, 0x100000, CRC(acb3003b) SHA1(ea0cbf3a1607b06b108df051f38fec1f214f42d2) ) - ROM_LOAD32_BYTE( "ar2ver-c.4", 0x00000, 0x100000, CRC(800acc21) SHA1(41d26766da2db46954a2351bbc50aea94bc1d564) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */ - ROM_LOAD( "ar1datab.8k", 0, 0x080000, CRC(c26306f8) SHA1(6d8d993c076d5ced523143a86bd0938b3794478d) ) - - ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ - ROM_LOAD( "ar1scg0.12f", 0x200000*0, 0x200000,CRC(e7be830a) SHA1(60e2162eecd7401a0c26c525de2715cbfb10c1c5) ) /* identical to "ar1scg0.12l" */ - ROM_LOAD( "ar1scg1.10f", 0x200000*1, 0x200000,CRC(8f15a686) SHA1(bce2d4380c6c39aa402566ddb0f62bbe6d7bfa1d) ) /* identical to "ar1scg1.10l" */ - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "ar1cg0.12b", 0x200000*0x0, 0x200000,CRC(93f3a9d9) SHA1(7e94c81ad5ace98a2f0d00d101d464883d38c197) ) /* identical to "ar1cg0.8d" */ - ROM_LOAD( "ar1cg1.10d", 0x200000*0x1, 0x200000,CRC(39828c8b) SHA1(424aa67eb0b898c9cab8a4749893a9c5696ac430) ) /* identical to "ar1cg1.13b" */ - ROM_LOAD( "ar1cg2.12d", 0x200000*0x2, 0x200000,CRC(f7b058d1) SHA1(fffd0f01724a26dd47b1ecceecf4a139d5746f81) ) /* identical to "ar1cg2.14b" */ - ROM_LOAD( "ar1cg3.13d", 0x200000*0x3, 0x200000,CRC(c28a3d2a) SHA1(cdc44fdbc99274e860c834e42b4cfafb478d4d26) ) /* identical to "ar1cg3.16b" */ - ROM_LOAD( "ar1cg4.14d", 0x200000*0x4, 0x200000,CRC(abdb161f) SHA1(260bff9b0e94c1b2ea4b9d7fa170fbca212e85ee) ) /* identical to "ar1cg4.18b" */ - ROM_LOAD( "ar1cg5.16d", 0x200000*0x5, 0x200000,CRC(2381cfea) SHA1(1de4c8b94df233fd74771fa47843290a3d8df0c8) ) /* identical to "ar1cg5.19b" */ - ROM_LOAD( "ar1cg6.18a", 0x200000*0x6, 0x200000,CRC(ca0b6d23) SHA1(df969e0eeec557a95584b06995b0d55f2c6ec70a) ) /* identical to "ar1cg6.18d" */ - ROM_LOAD( "ar1cg7.15a", 0x200000*0x7, 0x200000,CRC(ffb9f9f9) SHA1(2b8c75b580f77e887df7d50909a3a95cda570e20) ) /* identical to "ar1cg7.19d" */ - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "ar1ccrl.3d", 0x000000, 0x200000,CRC(17387b2c) SHA1(dfd7cadaf97917347c0fa98f395364a543e49612) ) /* identical to "ar1ccrl.7b" */ - ROM_LOAD( "ar1ccrh.1d", 0x200000, 0x080000,CRC(ee7a4803) SHA1(8383c9a8ef5ed94df13446ca5cefa5f9e518f175) ) /* identical to "pr1ccrh.5b" */ - - ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "ar1ptrl0.18k", 0x80000*0x0, 0x80000,CRC(82405108) SHA1(0a40882a9bc8621c620bede404c78f6b1333f223) ) - ROM_LOAD( "ar1ptrl1.16k", 0x80000*0x1, 0x80000,CRC(8739b09c) SHA1(cd603c4dc2f9ffc4185f891eb83e4c383c564294) ) - ROM_LOAD( "ar1ptrl2.15k", 0x80000*0x2, 0x80000,CRC(bda693a9) SHA1(fe71dd3c63198737aa2d39527f0004e977e3be20) ) - ROM_LOAD( "ar1ptrl3.14k", 0x80000*0x3, 0x80000,CRC(82797405) SHA1(2f205fee2d33e183c80a906fb38900167c011240) ) - - ROM_LOAD( "ar1ptrm0.18j", 0x80000*0x4, 0x80000,CRC(64bd6620) SHA1(2e33ff22208805ece304128be8887646fc890f6d) ) - ROM_LOAD( "ar1ptrm1.16j", 0x80000*0x5, 0x80000,CRC(2232f0a5) SHA1(3fccf6d4a0c4100cc85e3051024d659c4a1c769e) ) - ROM_LOAD( "ar1ptrm2.15j", 0x80000*0x6, 0x80000,CRC(8ee14e6f) SHA1(f6f1cbb748b109b365255378c18e710ba6270c1c) ) - ROM_LOAD( "ar1ptrm3.14j", 0x80000*0x7, 0x80000,CRC(1094a970) SHA1(d41b10f48e1ef312bcaf09f27fabc7252c30e648) ) - - ROM_LOAD( "ar1ptru0.18f", 0x80000*0x8, 0x80000,CRC(26d88467) SHA1(d528f989fab4dd5ac1aec9b596a05fbadcc0587a) ) - ROM_LOAD( "ar1ptru1.16f", 0x80000*0x9, 0x80000,CRC(c5e2c208) SHA1(152fde0b95a5df8c781e4a83577cfbbc7672ae0d) ) - ROM_LOAD( "ar1ptru2.15f", 0x80000*0xa, 0x80000,CRC(1321ec59) SHA1(dbd3687a4c6b1aa0b18e336f99dabb9010d36639) ) - ROM_LOAD( "ar1ptru3.14f", 0x80000*0xb, 0x80000,CRC(139d7dc1) SHA1(6d25e6ad552a91a0c5fc03db7e1a801ccf9c9556) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "ar1wavea.2l", 0, 0x200000, CRC(dbf64562) SHA1(454fd7d5b860f0e5557d8900393be95d6c992ad1) ) - - ROM_REGION( 0x4000, "nvram", 0 ) // default eeprom - ROM_LOAD( "alpiner_defaults.nv", 0x0000, 0x4000, CRC(46c06e51) SHA1(df3a16fe3a0858b14c51d48539d9ab3eb3a213de) ) -ROM_END - -ROM_START( alpinerd ) - ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "ar2ver-d.1", 0x00003, 0x100000, CRC(fa3380b9) SHA1(2a46988745bd2672f8082399a68ae0d0ab3d28f2) ) - ROM_LOAD32_BYTE( "ar2ver-d.2", 0x00002, 0x100000, CRC(76141352) SHA1(0f7230dd9cd6f1b83d499034affc7bc2c4385ab5) ) - ROM_LOAD32_BYTE( "ar2ver-d.3", 0x00001, 0x100000, CRC(9beffe6a) SHA1(d8efd1e3829d32bb06537d7cecb59f8df9b6d663) ) - ROM_LOAD32_BYTE( "ar2ver-d.4", 0x00000, 0x100000, CRC(1f3f1134) SHA1(0afa78444d1463d214f1afd7ec500af76d567489) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */ - ROM_LOAD( "ar1datab.8k", 0, 0x080000, CRC(c26306f8) SHA1(6d8d993c076d5ced523143a86bd0938b3794478d) ) - - ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ - ROM_LOAD( "ar1scg0.12f", 0x200000*0, 0x200000,CRC(e7be830a) SHA1(60e2162eecd7401a0c26c525de2715cbfb10c1c5) ) /* identical to "ar1scg0.12l" */ - ROM_LOAD( "ar1scg1.10f", 0x200000*1, 0x200000,CRC(8f15a686) SHA1(bce2d4380c6c39aa402566ddb0f62bbe6d7bfa1d) ) /* identical to "ar1scg1.10l" */ - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "ar1cg0.12b", 0x200000*0x0, 0x200000,CRC(93f3a9d9) SHA1(7e94c81ad5ace98a2f0d00d101d464883d38c197) ) /* identical to "ar1cg0.8d" */ - ROM_LOAD( "ar1cg1.10d", 0x200000*0x1, 0x200000,CRC(39828c8b) SHA1(424aa67eb0b898c9cab8a4749893a9c5696ac430) ) /* identical to "ar1cg1.13b" */ - ROM_LOAD( "ar1cg2.12d", 0x200000*0x2, 0x200000,CRC(f7b058d1) SHA1(fffd0f01724a26dd47b1ecceecf4a139d5746f81) ) /* identical to "ar1cg2.14b" */ - ROM_LOAD( "ar1cg3.13d", 0x200000*0x3, 0x200000,CRC(c28a3d2a) SHA1(cdc44fdbc99274e860c834e42b4cfafb478d4d26) ) /* identical to "ar1cg3.16b" */ - ROM_LOAD( "ar1cg4.14d", 0x200000*0x4, 0x200000,CRC(abdb161f) SHA1(260bff9b0e94c1b2ea4b9d7fa170fbca212e85ee) ) /* identical to "ar1cg4.18b" */ - ROM_LOAD( "ar1cg5.16d", 0x200000*0x5, 0x200000,CRC(2381cfea) SHA1(1de4c8b94df233fd74771fa47843290a3d8df0c8) ) /* identical to "ar1cg5.19b" */ - ROM_LOAD( "ar1cg6.18a", 0x200000*0x6, 0x200000,CRC(ca0b6d23) SHA1(df969e0eeec557a95584b06995b0d55f2c6ec70a) ) /* identical to "ar1cg6.18d" */ - ROM_LOAD( "ar1cg7.15a", 0x200000*0x7, 0x200000,CRC(ffb9f9f9) SHA1(2b8c75b580f77e887df7d50909a3a95cda570e20) ) /* identical to "ar1cg7.19d" */ - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "ar1ccrl.3d", 0x000000, 0x200000,CRC(17387b2c) SHA1(dfd7cadaf97917347c0fa98f395364a543e49612) ) /* identical to "ar1ccrl.7b" */ - ROM_LOAD( "ar1ccrh.1d", 0x200000, 0x080000,CRC(ee7a4803) SHA1(8383c9a8ef5ed94df13446ca5cefa5f9e518f175) ) /* identical to "pr1ccrh.5b" */ - - ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "ar1ptrl0.18k", 0x80000*0x0, 0x80000,CRC(82405108) SHA1(0a40882a9bc8621c620bede404c78f6b1333f223) ) - ROM_LOAD( "ar1ptrl1.16k", 0x80000*0x1, 0x80000,CRC(8739b09c) SHA1(cd603c4dc2f9ffc4185f891eb83e4c383c564294) ) - ROM_LOAD( "ar1ptrl2.15k", 0x80000*0x2, 0x80000,CRC(bda693a9) SHA1(fe71dd3c63198737aa2d39527f0004e977e3be20) ) - ROM_LOAD( "ar1ptrl3.14k", 0x80000*0x3, 0x80000,CRC(82797405) SHA1(2f205fee2d33e183c80a906fb38900167c011240) ) - - ROM_LOAD( "ar1ptrm0.18j", 0x80000*0x4, 0x80000,CRC(64bd6620) SHA1(2e33ff22208805ece304128be8887646fc890f6d) ) - ROM_LOAD( "ar1ptrm1.16j", 0x80000*0x5, 0x80000,CRC(2232f0a5) SHA1(3fccf6d4a0c4100cc85e3051024d659c4a1c769e) ) - ROM_LOAD( "ar1ptrm2.15j", 0x80000*0x6, 0x80000,CRC(8ee14e6f) SHA1(f6f1cbb748b109b365255378c18e710ba6270c1c) ) - ROM_LOAD( "ar1ptrm3.14j", 0x80000*0x7, 0x80000,CRC(1094a970) SHA1(d41b10f48e1ef312bcaf09f27fabc7252c30e648) ) - - ROM_LOAD( "ar1ptru0.18f", 0x80000*0x8, 0x80000,CRC(26d88467) SHA1(d528f989fab4dd5ac1aec9b596a05fbadcc0587a) ) - ROM_LOAD( "ar1ptru1.16f", 0x80000*0x9, 0x80000,CRC(c5e2c208) SHA1(152fde0b95a5df8c781e4a83577cfbbc7672ae0d) ) - ROM_LOAD( "ar1ptru2.15f", 0x80000*0xa, 0x80000,CRC(1321ec59) SHA1(dbd3687a4c6b1aa0b18e336f99dabb9010d36639) ) - ROM_LOAD( "ar1ptru3.14f", 0x80000*0xb, 0x80000,CRC(139d7dc1) SHA1(6d25e6ad552a91a0c5fc03db7e1a801ccf9c9556) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "ar1wavea.2l", 0, 0x200000, CRC(dbf64562) SHA1(454fd7d5b860f0e5557d8900393be95d6c992ad1) ) - - ROM_REGION( 0x4000, "nvram", 0 ) // default eeprom - ROM_LOAD( "alpiner_defaults.nv", 0x0000, 0x4000, CRC(46c06e51) SHA1(df3a16fe3a0858b14c51d48539d9ab3eb3a213de) ) -ROM_END - -ROM_START( alpinr2b ) - ROM_REGION( 0x800000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "ars2ver-b.2", 0x000003, 0x200000, CRC(ed977f83) SHA1(26c57cdfc15f799a999ee22f141e1c0cabfc91dc) ) - ROM_LOAD32_BYTE( "ars2ver-b.3", 0x000001, 0x200000, CRC(8e7a9983) SHA1(34c82e5f080efe04d6b77a77a8391cb48b69c1af) ) - ROM_LOAD32_BYTE( "ars2ver-b.4", 0x000002, 0x200000, CRC(610e49c2) SHA1(433c6d2216551bac31584306f748af1c912c3b07) ) - ROM_LOAD32_BYTE( "ars2ver-b.5", 0x000000, 0x200000, CRC(7f3517b0) SHA1(3e6ba1a51bf235f40f933aae1f00638b88bba522) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */ - ROM_LOAD( "ars2data.8k", 0x000000, 0x080000, CRC(29b36dcb) SHA1(70fde130c11789c822829493a70ecefb077c0c15) ) - - ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ - ROM_LOAD( "ars1scg0.12f", 0x000000, 0x200000, CRC(bc49ed86) SHA1(289b39f2cb21c723dbe4ddd64ee4b2c5fa65c368) ) - - ROM_REGION( 0xc00000, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "ars1cg0.8d", 0x000000, 0x200000, CRC(74f4515c) SHA1(1e3a96281d543213d10c962b4d387c414d76e0c3) ) - ROM_LOAD( "ars1cg1.10d", 0x200000, 0x200000, CRC(329a95c1) SHA1(2cad7fd9e5ca7c64729ca2548ef4f873a0b8de64) ) - ROM_LOAD( "ars1cg2.12d", 0x400000, 0x200000, CRC(5648345a) SHA1(0dc7aedba65b7d97687a9e38a63597f16cee6179) ) - ROM_LOAD( "ars1cg3.13d", 0x600000, 0x200000, CRC(a752f205) SHA1(373b5a69e4488bc30763568ceae512ab7039f5f8) ) - ROM_LOAD( "ars1cg4.14d", 0x800000, 0x200000, CRC(54bf35b6) SHA1(aec43b66e7597ad7d113ae785417bf26164c1bca) ) - ROM_LOAD( "ars1cg5.16d", 0xa00000, 0x200000, CRC(e24a19a2) SHA1(34c1b51eea954ae3000602e550eb1cef0a10e651) ) - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "ars1ccrl.3d", 0x000000, 0x200000, CRC(fc8c9161) SHA1(ad0fcfae27e02d68a6f8d1d03c514dc2f12d9ee8) ) - ROM_LOAD( "ars1ccrh.1d", 0x200000, 0x080000, CRC(a17660bb) SHA1(bae2c3f20772c6cea99f271ee3f39b1f999038c6) ) - - ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "ars1ptrl0.18k", 0x000000, 0x080000, CRC(f04e0e61) SHA1(d58a1d3ca1d0922e134db21a04feaee7dc97b020) ) - ROM_LOAD( "ars1ptrl1.16k", 0x080000, 0x080000, CRC(8bdb4970) SHA1(a504cd4beca4bedd1a7a228c83dd6b844ca3a1e0) ) - ROM_LOAD( "ars1ptrl2.15k", 0x100000, 0x080000, CRC(ec993a4f) SHA1(883f64e3e8d951415e9cef589c354eba9406c0aa) ) - ROM_LOAD( "ars1ptrl3.14k", 0x180000, 0x080000, CRC(4d453f3c) SHA1(7a82e5d8f974d9e56d0031b35e73647fe6aeec2e) ) - - ROM_LOAD( "ars1ptrm0.18j", 0x200000, 0x080000, CRC(d1bdc524) SHA1(b898bb38de397551ada4da4677dd733bf8fa5010) ) - ROM_LOAD( "ars1ptrm1.16j", 0x280000, 0x080000, CRC(86b81c81) SHA1(45096abf46794f06a4b647f5e4222798d8467632) ) - ROM_LOAD( "ars1ptrm2.15j", 0x300000, 0x080000, CRC(24116b83) SHA1(41c6a880abce7b543c409fda767682b2537b0d99) ) - ROM_LOAD( "ars1ptrm3.14j", 0x380000, 0x080000, CRC(772bede3) SHA1(f9565b7a40f0bbf11081d619fe5a46feafce2e56) ) - - ROM_LOAD( "ars1ptru0.18f", 0x400000, 0x080000, CRC(a4cf197a) SHA1(ee78cc259e87395df75179bbe5b6e521e762b582) ) - ROM_LOAD( "ars1ptru1.16f", 0x480000, 0x080000, CRC(1deb1fc0) SHA1(bfd1dfcaccf5a0f851b6757995fa7195452a3965) ) - ROM_LOAD( "ars1ptru2.15f", 0x500000, 0x080000, CRC(bcfad0ba) SHA1(bee7f2f9ecd2b289c6706e19fa86863913b286b5) ) - ROM_LOAD( "ars1ptru3.14f", 0x580000, 0x080000, CRC(73ce6958) SHA1(918b0fb0fca33dbe3be3ac679b8b28f58213f75b) ) - - ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */ - ROM_LOAD( "ars1wavea.2l", 0x000000, 0x400000, CRC(f8d107e9) SHA1(5c418691f0b35403553f21f5570eda8bbb66890f) ) - ROM_LOAD( "ars2waveb.1l", 0x800000, 0x400000, CRC(deab4ad1) SHA1(580ad88d516280baaf6cc92b2e07cdc0cfc486f3) ) - - ROM_REGION( 0x4000, "nvram", 0 ) // default eeprom - ROM_LOAD( "alpiner2_defaults.nv", 0x0000, 0x4000, CRC(1d660b8b) SHA1(e6047ad2d61fa55e8f054813f5c705fd7d145a73) ) -ROM_END - -ROM_START( alpinr2a ) - ROM_REGION( 0x800000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "ars2ver-a.2", 0x000003, 0x200000, CRC(b07b15a4) SHA1(ea3b2d7b4ef4ccf3aafeef7e7eac92e8d446f4e7) ) - ROM_LOAD32_BYTE( "ars2ver-a.3", 0x000002, 0x200000, CRC(90a92e40) SHA1(bf8083256e56e7e33e61b4cdaf9fd03dabfb36ba) ) - ROM_LOAD32_BYTE( "ars2ver-a.4", 0x000001, 0x200000, CRC(9e9d771d) SHA1(6fb983e3f4f8233544667b1bbf87864e4fb8698c) ) - ROM_LOAD32_BYTE( "ars2ver-a.5", 0x000000, 0x200000, CRC(e93c7771) SHA1(305f35488a55be1b845702df972bba8334c0726c) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */ - ROM_LOAD( "ars2data.8k", 0x000000, 0x080000, CRC(29b36dcb) SHA1(70fde130c11789c822829493a70ecefb077c0c15) ) - - ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ - ROM_LOAD( "ars1scg0.12f", 0x000000, 0x200000, CRC(bc49ed86) SHA1(289b39f2cb21c723dbe4ddd64ee4b2c5fa65c368) ) - - ROM_REGION( 0xc00000, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "ars1cg0.8d", 0x000000, 0x200000, CRC(74f4515c) SHA1(1e3a96281d543213d10c962b4d387c414d76e0c3) ) - ROM_LOAD( "ars1cg1.10d", 0x200000, 0x200000, CRC(329a95c1) SHA1(2cad7fd9e5ca7c64729ca2548ef4f873a0b8de64) ) - ROM_LOAD( "ars1cg2.12d", 0x400000, 0x200000, CRC(5648345a) SHA1(0dc7aedba65b7d97687a9e38a63597f16cee6179) ) - ROM_LOAD( "ars1cg3.13d", 0x600000, 0x200000, CRC(a752f205) SHA1(373b5a69e4488bc30763568ceae512ab7039f5f8) ) - ROM_LOAD( "ars1cg4.14d", 0x800000, 0x200000, CRC(54bf35b6) SHA1(aec43b66e7597ad7d113ae785417bf26164c1bca) ) - ROM_LOAD( "ars1cg5.16d", 0xa00000, 0x200000, CRC(e24a19a2) SHA1(34c1b51eea954ae3000602e550eb1cef0a10e651) ) - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "ars1ccrl.3d", 0x000000, 0x200000, CRC(fc8c9161) SHA1(ad0fcfae27e02d68a6f8d1d03c514dc2f12d9ee8) ) - ROM_LOAD( "ars1ccrh.1d", 0x200000, 0x080000, CRC(a17660bb) SHA1(bae2c3f20772c6cea99f271ee3f39b1f999038c6) ) - - ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "ars1ptrl0.18k", 0x000000, 0x080000, CRC(f04e0e61) SHA1(d58a1d3ca1d0922e134db21a04feaee7dc97b020) ) - ROM_LOAD( "ars1ptrl1.16k", 0x080000, 0x080000, CRC(8bdb4970) SHA1(a504cd4beca4bedd1a7a228c83dd6b844ca3a1e0) ) - ROM_LOAD( "ars1ptrl2.15k", 0x100000, 0x080000, CRC(ec993a4f) SHA1(883f64e3e8d951415e9cef589c354eba9406c0aa) ) - ROM_LOAD( "ars1ptrl3.14k", 0x180000, 0x080000, CRC(4d453f3c) SHA1(7a82e5d8f974d9e56d0031b35e73647fe6aeec2e) ) - - ROM_LOAD( "ars1ptrm0.18j", 0x200000, 0x080000, CRC(d1bdc524) SHA1(b898bb38de397551ada4da4677dd733bf8fa5010) ) - ROM_LOAD( "ars1ptrm1.16j", 0x280000, 0x080000, CRC(86b81c81) SHA1(45096abf46794f06a4b647f5e4222798d8467632) ) - ROM_LOAD( "ars1ptrm2.15j", 0x300000, 0x080000, CRC(24116b83) SHA1(41c6a880abce7b543c409fda767682b2537b0d99) ) - ROM_LOAD( "ars1ptrm3.14j", 0x380000, 0x080000, CRC(772bede3) SHA1(f9565b7a40f0bbf11081d619fe5a46feafce2e56) ) - - ROM_LOAD( "ars1ptru0.18f", 0x400000, 0x080000, CRC(a4cf197a) SHA1(ee78cc259e87395df75179bbe5b6e521e762b582) ) - ROM_LOAD( "ars1ptru1.16f", 0x480000, 0x080000, CRC(1deb1fc0) SHA1(bfd1dfcaccf5a0f851b6757995fa7195452a3965) ) - ROM_LOAD( "ars1ptru2.15f", 0x500000, 0x080000, CRC(bcfad0ba) SHA1(bee7f2f9ecd2b289c6706e19fa86863913b286b5) ) - ROM_LOAD( "ars1ptru3.14f", 0x580000, 0x080000, CRC(73ce6958) SHA1(918b0fb0fca33dbe3be3ac679b8b28f58213f75b) ) - - ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */ - ROM_LOAD( "ars1wavea.2l", 0x000000, 0x400000, CRC(f8d107e9) SHA1(5c418691f0b35403553f21f5570eda8bbb66890f) ) - ROM_LOAD( "ars2waveb.1l", 0x800000, 0x400000, CRC(deab4ad1) SHA1(580ad88d516280baaf6cc92b2e07cdc0cfc486f3) ) - - ROM_REGION( 0x4000, "nvram", 0 ) // default eeprom - ROM_LOAD( "alpiner2_defaults.nv", 0x0000, 0x4000, CRC(1d660b8b) SHA1(e6047ad2d61fa55e8f054813f5c705fd7d145a73) ) -ROM_END - -ROM_START( alpinesa ) - ROM_REGION( 0x800000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "af2ver-a_ll.ic2", 0x000003, 0x200000, CRC(e776159d) SHA1(5110364afb7ec606074d58a1d216d7d687b9df62) ) - ROM_LOAD32_BYTE( "af2ver-a_lm.ic3", 0x000002, 0x200000, CRC(c5333d38) SHA1(9486cead964f95f8e56dac2f88486f3b98561aa6) ) - ROM_LOAD32_BYTE( "af2ver-a_um.ic4", 0x000001, 0x200000, CRC(5977fc6e) SHA1(19b8041789f8987934fa461972976a3570b1b87b) ) - ROM_LOAD32_BYTE( "af2ver-a_uu.ic5", 0x000000, 0x200000, CRC(54ee33a1) SHA1(0eaa8707ab13a0a66551f61a08986c98f5c9e446) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */ - ROM_LOAD( "af1data.8k", 0x000000, 0x080000, CRC(ef13ebe8) SHA1(5d3f697994d4b5b19ee7fea1e2aef8e39449b68e) ) - - ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ - ROM_LOAD( "af1scg0b.12f", 0x000000, 0x200000, CRC(46a6222a) SHA1(5322ef60690625b9b8dbe1cfe0c49dcd9c8b1a4c) ) - - ROM_REGION( 0x200000*5, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "af1cg0.8d", 0x200000*0, 0x200000, CRC(7423f3ff) SHA1(6a2fd44823ef46111deb57d328b1b75cc355d413) ) - ROM_LOAD( "af1cg1.10d", 0x200000*1, 0x200000, CRC(ea76689a) SHA1(73dd3af737a3e9903abe5ed9c9ae7eded51d8350) ) - ROM_LOAD( "af1cg2.12d", 0x200000*2, 0x200000, CRC(2a38943a) SHA1(15d737996f49bf6374ef6191bbfbe0298d398378) ) - ROM_LOAD( "af1cg3.13d", 0x200000*3, 0x200000, CRC(7f5a3e0f) SHA1(241f9995323b28df23d20a75e1f43ce6e05434cd) ) - ROM_LOAD( "af1cg4.14d", 0x200000*4, 0x200000, CRC(a5ee13e2) SHA1(48fd3c912690f21cbbc2a39bed0a82be41a0d011) ) - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "af1ccrl.3d", 0x000000, 0x200000, CRC(6c054698) SHA1(8537607646b183883c5aa4060fb0af640da4af87) ) - ROM_LOAD( "af1ccrh.1d", 0x200000, 0x080000, CRC(95a02a27) SHA1(32ee87b76ae9fcec6d825e3cf4d5cbb97db39544) ) - - ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "af1ptrl0.18k", 0x80000*0, 0x80000, CRC(31ce46d3) SHA1(568fb9ee9ac14e613a4fd7668cb38315c10be62b) ) - ROM_LOAD( "af1ptrl1.16k", 0x80000*1, 0x80000, CRC(e869bf00) SHA1(b3c3026891ae3958d1774c905e97c3b57a414ea7) ) - ROM_LOAD( "af1ptrm0.18j", 0x80000*2, 0x80000, CRC(ef7f4d8a) SHA1(02f77c68004b7dccc99b61126e7d07960eb15028) ) - ROM_LOAD( "af1ptrm1.16j", 0x80000*3, 0x80000, CRC(7dd01d52) SHA1(adc1087435d31ed6163ad046466955f01517450f) ) - ROM_LOAD( "af1ptru0.18f", 0x80000*4, 0x80000, CRC(177f1591) SHA1(3969e780e5603eca0a65f65c1ad14d1cef918b39) ) - ROM_LOAD( "af1ptru1.16f", 0x80000*5, 0x80000, CRC(7521d18e) SHA1(dc03ef369db16f59c138ff4e22260d1c04782d1f) ) - - ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */ - ROM_LOAD( "af1wavea.2l", 0x000000, 0x400000, CRC(28cca494) SHA1(4ff87ab85fd17bf8dbee5b03d99cc5c31dd6349a) ) - - ROM_REGION( 0x4000, "nvram", 0 ) // default eeprom - ROM_LOAD( "alpinesa_defaults.nv", 0x0000, 0x4000, CRC(9744207c) SHA1(bbd34ee138c116d281c718f14740e2883a5cdf49) ) -ROM_END - -ROM_START( cybrcomm ) - ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "cy1prgll.4d", 0x00003, 0x80000, CRC(b3eab156) SHA1(2a5c4e0360c3b9500687a4d70f7110a0c30da2a5) ) - ROM_LOAD32_BYTE( "cy1prglm.2d", 0x00002, 0x80000, CRC(884a5b0e) SHA1(0e27ae366b8a2695fe112b4740c8c9013bb97e26) ) - ROM_LOAD32_BYTE( "cy1prgum.8d", 0x00001, 0x80000, CRC(c9c4a921) SHA1(76a52461165a8bd8d984a34063fbeb4cb73624af) ) - ROM_LOAD32_BYTE( "cy1prguu.6d", 0x00000, 0x80000, CRC(5f22975b) SHA1(a1a5cb66358d64a3c564b912f2eeafa182786b1e) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ - ROM_LOAD( "cy1data.6r", 0x00000, 0x20000, CRC(10d0005b) SHA1(10508eeaf74d24a611b44cd3bb12417ceb78904f) ) - ROM_RELOAD( 0x20000, 0x20000) - ROM_RELOAD( 0x40000, 0x20000) - ROM_RELOAD( 0x60000, 0x20000) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "cyc1cg0.1a", 0x200000*0x4, 0x200000,CRC(e839b9bd) SHA1(fee43d37dcca7f1fb952a6bfb886b7ee30b7d75c) ) /* cyc1cg0.6a */ - ROM_LOAD( "cyc1cg1.2a", 0x200000*0x5, 0x200000,CRC(7d13993f) SHA1(96ac82bcc63afe395bae73f005eb66dad7742d48) ) /* cyc1cg1.7a */ - ROM_LOAD( "cyc1cg2.3a", 0x200000*0x6, 0x200000,CRC(7c464566) SHA1(69817ac3a7c6e43b960e8a904962b58b23417163) ) /* cyc1cg2.8a */ - ROM_LOAD( "cyc1cg3.5a", 0x200000*0x7, 0x200000,CRC(2222e16f) SHA1(562bcd4d43b1543303d8fd66d9f0d9a8e3702492) ) /* cyc1cg3.9a */ - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - - //cyc1ccrl.1c FIXED BITS (xxxxxxxx11xxxxxx) - ROM_LOAD( "cyc1ccrl.1c", 0x000000, 0x100000,CRC(1a0dc5f0) SHA1(bf0093d9cbdcb45a82705e966c48a1f408fa344e) ) /* cyc1ccrl.8c */ - - //cyc1ccrh.2c 1xxxxxxxxxxxxxxxxxx = 0xFF - ROM_LOAD( "cyc1ccrh.2c", 0x200000, 0x080000,CRC(8c4090b8) SHA1(456d548a48833e840c5d39d47b2dcca03f8d6321) ) /* cyc1ccrh.7c */ - - ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "cyc1ptl0.5b", 0x80000*0x0, 0x80000,CRC(d91de03d) SHA1(05819d285f6111867c41337bda9c4b9ad5394b6b) ) - ROM_LOAD( "cyc1ptl1.4b", 0x80000*0x1, 0x80000,CRC(e5b98021) SHA1(7416cbf74da969f822e0363ced7a25b967277e28) ) - ROM_LOAD( "cyc1ptl2.3b", 0x80000*0x2, 0x80000,CRC(7ba786c6) SHA1(1a5319dec495453bab9d70ae773a807f0036b355) ) - ROM_LOAD( "cyc1ptm0.5c", 0x80000*0x3, 0x80000,CRC(d454b5c6) SHA1(95ae6f0455e9fd7dff066e74cd4343c94d1bc212) ) - ROM_LOAD( "cyc1ptm1.4c", 0x80000*0x4, 0x80000,CRC(74fdf8cc) SHA1(f2627f400e247b6d4c4157eaf0ec69d57212e566) ) - ROM_LOAD( "cyc1ptm2.3c", 0x80000*0x5, 0x80000,CRC(b9c99a45) SHA1(c86cf594b416776eaf9a32c3cb9d34acc79777e9) ) - ROM_LOAD( "cyc1ptu0.5d", 0x80000*0x6, 0x80000,CRC(4d40897f) SHA1(ffe2a0ab66443553c83512f9a1be94b2e385cf2f) ) - ROM_LOAD( "cyc1ptu1.4d", 0x80000*0x7, 0x80000,CRC(3bdaeeeb) SHA1(826f97e2165af8569cfec03874b16030a9486559) ) - ROM_LOAD( "cyc1ptu2.3d", 0x80000*0x8, 0x80000,CRC(a0e73674) SHA1(1e22142a564e664031c12b250664fc82e3b3d43b) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "cy1wav0.10r", 0x000000, 0x100000, CRC(c6f366a2) SHA1(795dbee09df159d3501c748fb3de16cca81742d6) ) - ROM_LOAD( "cy1wav1.10p", 0x200000, 0x100000, CRC(f30b5e37) SHA1(9f5a94d82741ef9688c6e415ebb9009c906737c9) ) - ROM_LOAD( "cy1wav2.10n", 0x100000, 0x100000, CRC(b98c1ca6) SHA1(4b66aa05f82be5ef3315acc30031872698ff4391) ) - ROM_LOAD( "cy1wav3.10l", 0x300000, 0x100000, CRC(43dbac19) SHA1(83fd4ae4e7ec264fc217ed18caf59bf438af0c3d) ) - - ROM_REGION( 0x300, "gamma_proms", 0 ) - ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - - ROM_REGION( 0x2000, "nvram", 0 ) // default eeprom - ROM_LOAD( "cy1eeprm.9e", 0x0000, 0x2000, CRC(8432c066) SHA1(99d4bfda3f8aec288dbeaf291bce85fe9009a1de) ) -ROM_END - -ROM_START( cybrcycc ) - ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "cb2ver-c.1", 0x00003, 0x100000, CRC(a8e07a14) SHA1(9bef7068c9bf792960df922ea79e4565d7680433) ) - ROM_LOAD32_BYTE( "cb2ver-c.2", 0x00002, 0x100000, CRC(054c504f) SHA1(9bde803ff09be0402f9b0388e55407362a2508e3) ) - ROM_LOAD32_BYTE( "cb2ver-c.3", 0x00001, 0x100000, CRC(47e6306c) SHA1(39d6fc2c3cb9b4c9d3569cedb79b916a90537115) ) - ROM_LOAD32_BYTE( "cb2ver-c.4", 0x00000, 0x100000, CRC(398426e4) SHA1(f20cd4892420e7b978baa51c9129b362422a3895) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */ - ROM_LOAD( "cb1datab.8k", 0, 0x080000, CRC(e2404221) SHA1(b88810dd45aee8a5475c30806cdfded25fa14e0e) ) - - ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ - ROM_LOAD( "cb1scg0.12f", 0x200000*0, 0x200000,CRC(7aaca90d) SHA1(9808819db5d86d555a03bb20a2fbedf060d04f0e) ) /* identical to "cb1scg0.12l" */ - - ROM_REGION( 0x200000*7, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "cb1cg0.12b", 0x200000*0x0, 0x200000,CRC(762a47a0) SHA1(8a49c700dca7afec5d8d6a38fedcd3ad4b0e6713) ) /* identical to "cb1cg0.8d" */ - ROM_LOAD( "cb1cg1.10d", 0x200000*0x1, 0x200000,CRC(df92c3e6) SHA1(302d7ee7e073a45e7baa948543bd30251f903a6d) ) /* identical to "cb1cg1.13b" */ - ROM_LOAD( "cb1cg2.12d", 0x200000*0x2, 0x200000,CRC(07bc508e) SHA1(7675694d10b50e57bb10b350559bd321df75d1ea) ) /* identical to "cb1cg2.14b" */ - ROM_LOAD( "cb1cg3.13d", 0x200000*0x3, 0x200000,CRC(50c86dea) SHA1(7837a1d2bd3ade470f7fbc732513dd598badd219) ) /* identical to "cb1cg3.16b" */ - ROM_LOAD( "cb1cg4.14d", 0x200000*0x4, 0x200000,CRC(e93b8894) SHA1(4d28b557b7ed2667e6af9f970f3e99cda785b940) ) /* identical to "cb1cg4.18b" */ - ROM_LOAD( "cb1cg5.16d", 0x200000*0x5, 0x200000,CRC(9ee610a1) SHA1(ebc7892b6a66461ca6b6b912a264da1594340b2d) ) /* identical to "cb1cg5.19b" */ - ROM_LOAD( "cb1cg6.18a", 0x200000*0x6, 0x200000,CRC(ddc3b5cc) SHA1(34edffee9eb6fbf4a00fce0da34d9354b1a1155f) ) /* identical to "cb1cg6.18d" */ - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "cb1ccrl.3d", 0x000000, 0x200000,CRC(2f171c48) SHA1(52b76213e37379b4a5cea7de40cf5396dc2998d8) ) /* identical to "cb1ccrl.7b" */ - ROM_LOAD( "cb1ccrh.1d", 0x200000, 0x080000,CRC(86124b93) SHA1(f2cfd726313cbeff162d402a15de2360377630e7) ) /* identical to "cb1ccrh.5b" */ - - ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "cb1ptrl0.18k", 0x80000*0x0, 0x80000,CRC(f1393a03) SHA1(c9e808601eef5839e6bff630e5f83380e073c5c0) ) - ROM_LOAD( "cb1ptrl1.16k", 0x80000*0x1, 0x80000,CRC(2ad51de7) SHA1(efd102b960ca10cda70da84661acf61e4bbb9f00) ) - ROM_LOAD( "cb1ptrl2.15k", 0x80000*0x2, 0x80000,CRC(78f77c0d) SHA1(5183a8909c2ac0a3d80e707393bcbb4441d79a3c) ) - ROM_LOAD( "cb1ptrl3.14k", 0x80000*0x3, 0x80000,CRC(804bfb4a) SHA1(74b3fc3931265398e23605d3da7ca84a002da632) ) - ROM_LOAD( "cb1ptrm0.18j", 0x80000*0x4, 0x80000,CRC(f4eece49) SHA1(3f34d1ae5986f0d340563ab0fb637bfdacb8712c) ) - ROM_LOAD( "cb1ptrm1.16j", 0x80000*0x5, 0x80000,CRC(5f3cbd7d) SHA1(d00d0a96b71d6a3b98907c4ba7c702e549dd0adb) ) - ROM_LOAD( "cb1ptrm2.15j", 0x80000*0x6, 0x80000,CRC(02c7e4af) SHA1(6a541a28163b1026a824f6f8aed05d0eb0c8ae93) ) - ROM_LOAD( "cb1ptrm3.14j", 0x80000*0x7, 0x80000,CRC(ace3123b) SHA1(2b590ed967572d77b3cc6b37e341a5bdc55c762f) ) - ROM_LOAD( "cb1ptru0.18f", 0x80000*0x8, 0x80000,CRC(58d35341) SHA1(a5fe00bdcf39521f0465743664ff0dd78be5d6e8) ) - ROM_LOAD( "cb1ptru1.16f", 0x80000*0x9, 0x80000,CRC(f4d005b0) SHA1(0862ed1dd0818bfb765d97f1f9d996c321b0ec83) ) - ROM_LOAD( "cb1ptru2.15f", 0x80000*0xa, 0x80000,CRC(68ffcd50) SHA1(5ca5f71b6b079fde14d76c869d211a815bffae68) ) - ROM_LOAD( "cb1ptru3.14f", 0x80000*0xb, 0x80000,CRC(d89c1c2b) SHA1(9c25df696b2d120ce33d7774381460297740007a) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "cb1wavea.2l", 0x000000, 0x400000, CRC(b79a624d) SHA1(c0ee358a183ba6d0835731dbdd191b64718fde6e) ) - ROM_LOAD( "cb1waveb.1l", 0x800000, 0x200000, CRC(33bf08f6) SHA1(bf9d68b26a8158ea1abfe8428b7454cac25242c5) ) - - ROM_REGION( 0x4000, "nvram", 0 ) // default eeprom - ROM_LOAD( "cybrcycc_defaults.nv", 0x0000, 0x4000, CRC(1ef95c25) SHA1(26b8bead9d62a420ee0ff770df83c4207a963065) ) -ROM_END - -ROM_START( propcycl ) - ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "pr2ver-a.1", 0x00003, 0x100000, CRC(3f58594c) SHA1(5fdd8c61b47b51088a201799ce0c2f08c32ef852) ) - ROM_LOAD32_BYTE( "pr2ver-a.2", 0x00002, 0x100000, CRC(c0da354a) SHA1(f27a71a62385b842404fcd8ed6513158e3639b8f) ) - ROM_LOAD32_BYTE( "pr2ver-a.3", 0x00001, 0x100000, CRC(74bf4b74) SHA1(02713aa07238cc9e30163ae24d12c034aa972ff3) ) - ROM_LOAD32_BYTE( "pr2ver-a.4", 0x00000, 0x100000, CRC(cf4d5638) SHA1(2ddd00d6ec3b85c234820507650d201e176c94a2) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* SS22-BIOS ver1.41 */ - ROM_LOAD( "pr1data.8k", 0, 0x080000, CRC(2e5767a4) SHA1(390bf05c90044d841fe2dd4a427177fa1570b9a6) ) - - ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ - ROM_LOAD( "pr1scg0.12f", 0x200000*0, 0x200000,CRC(2d09a869) SHA1(ce8beabaac255e1de29d944c9866022bad713519) ) /* identical to "pr1scg0.12l" */ - ROM_LOAD( "pr1scg1.10f", 0x200000*1, 0x200000,CRC(7433c5bd) SHA1(a8fd4e73de66e3d443c0cb5b5beef8f467014815) ) /* identical to "pr1scg1.10l" */ - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "pr1cg0.12b", 0x200000*0x0, 0x200000,CRC(0a041238) SHA1(da5688970432f7fe39337ee9fb46ca25a53fdb11) ) /* identical to "pr1cg0.8d" */ - ROM_LOAD( "pr1cg1.10d", 0x200000*0x1, 0x200000,CRC(7d09e6a7) SHA1(892317ee0bd796fa5c70d64912ef2e696792a2d4) ) /* identical to "pr1cg1.13b" */ - ROM_LOAD( "pr1cg2.12d", 0x200000*0x2, 0x200000,CRC(659f006e) SHA1(23362a922cb1100950181fac4858b953d8fc0794) ) /* identical to "pr1cg2.14b" */ - ROM_LOAD( "pr1cg3.13d", 0x200000*0x3, 0x200000,CRC(d30bffa3) SHA1(2f05227d91d257db9fa8cae114974de602d98729) ) /* identical to "pr1cg3.16b" */ - ROM_LOAD( "pr1cg4.14d", 0x200000*0x4, 0x200000,CRC(f4636cc9) SHA1(4e01a476e418e5790878572e83a8a11536ce30ae) ) /* identical to "pr1cg4.18b" */ - ROM_LOAD( "pr1cg5.16d", 0x200000*0x5, 0x200000,CRC(97d333de) SHA1(e8f8383f49aae834dd8b57231b25899703cef966) ) /* identical to "pr1cg5.19b" */ - ROM_LOAD( "pr1cg6.18a", 0x200000*0x6, 0x200000,CRC(3e081c03) SHA1(6ccb162952f6076359b2785b5d800b39a9a3c5ce) ) /* identical to "pr1cg6.18d" */ - ROM_LOAD( "pr1cg7.15a", 0x200000*0x7, 0x200000,CRC(ec9fc5c8) SHA1(16de614b26f06bbddae3ab56cebba45efd6fe81b) ) /* identical to "pr1cg7.19d" */ - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "pr1ccrl.3d", 0x000000, 0x200000,CRC(e01321fd) SHA1(5938c6eff8e1b3642728c3be733f567a97cb5aad) ) /* identical to "pr1ccrl.7b" */ - ROM_LOAD( "pr1ccrh.1d", 0x200000, 0x080000,CRC(1d68bc31) SHA1(d534d0daebe7018e83b57cc7919c294ab89bddc8) ) /* identical to "pr1ccrh.5b" */ - /* These two ROMs define a huge texture tilemap using the tiles from "textile". - * The tilemap has 0x100 columns. - * - * pr1ccrl contains little endian 16 bit words. Each word references a 16x16 tile. - * - * pr1ccrh.1d contains packed nibbles. Each nibble encodes three tile attributes: - * 0x8 = swapxy - * 0x4 = flipx - * 0x2 = flipy - * 0x1 = tile bank (used in some sys22 games) - */ - - ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "pr1ptrl0.18k", 0x80000*0, 0x80000,CRC(fddb27a2) SHA1(6e837b45e3f9ed7ca3d1a457d0f0124de5618d1f) ) - ROM_LOAD( "pr1ptrl1.16k", 0x80000*1, 0x80000,CRC(6964dd06) SHA1(f38a550165504693d20892a7dcfaf01db19b04ef) ) - ROM_LOAD( "pr1ptrl2.15k", 0x80000*2, 0x80000,CRC(4d7ed1d4) SHA1(8f72864a06ff8962e640cb36d062bddf5d110308) ) - - ROM_LOAD( "pr1ptrm0.18j", 0x80000*3, 0x80000,CRC(b6f204b7) SHA1(3b34f240b399b6406faaf338ae0ab536247e64a6) ) - ROM_LOAD( "pr1ptrm1.16j", 0x80000*4, 0x80000,CRC(949588b7) SHA1(fdaf50ff2496200b9c981efc18b035f3c0a96ace) ) - ROM_LOAD( "pr1ptrm2.15j", 0x80000*5, 0x80000,CRC(dc1cef0a) SHA1(8cbc02cf73fac3cc110b676d77602ae628385eae) ) - - ROM_LOAD( "pr1ptru0.18f", 0x80000*6, 0x80000,CRC(5d66a7c4) SHA1(c9ed1c18724192d45c1f6b40096f15d02baf2401) ) - ROM_LOAD( "pr1ptru1.16f", 0x80000*7, 0x80000,CRC(e9a3f72b) SHA1(f967e1adf8eee4fffdf4288d36a93c5bb4f9a126) ) - ROM_LOAD( "pr1ptru2.15f", 0x80000*8, 0x80000,CRC(c346a842) SHA1(299bc0a30d0e74d8adfa3dc605aebf6439f5bc18) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "pr1wavea.2l", 0x000000, 0x400000, CRC(320f3913) SHA1(3887b7334ca7762794c14198dd24bab47fcd9505) ) - ROM_LOAD( "pr1waveb.1l", 0x800000, 0x400000, CRC(d91acb26) SHA1(c2161e2d70e08aed15cbc875ffee685190611daf) ) -ROM_END - -ROM_START( acedrvrw ) - ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "ad2prgll.4d", 0x00003, 0x80000, CRC(808c5ff8) SHA1(119c90ecb5aa099a0e5d1d7944c004beacead367) ) - ROM_LOAD32_BYTE( "ad2prglm.2d", 0x00002, 0x80000, CRC(5f726a10) SHA1(d077312c6a387fbdf906d278c73c6a3730687f32) ) - ROM_LOAD32_BYTE( "ad2prgum.8d", 0x00001, 0x80000, CRC(d5042d6e) SHA1(9ae93e7ea7126302831a879ba0aadcb6e5b842f5) ) - ROM_LOAD32_BYTE( "ad2prguu.6d", 0x00000, 0x80000, CRC(86d4661d) SHA1(2a1529a51ca5466994a2d0d84c7aab13cef95a11) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ - ROM_LOAD( "ad1data.6r", 0, 0x080000, CRC(82024f74) SHA1(711ab0c4f027716aeab18e3a5d3d06fa82af8007) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "ad1cg0.1a", 0x200000*0x4, 0x200000,CRC(faaa1ee2) SHA1(878f2b74587ed4d06c5110a0eb0020c49ddc5dfa) ) - ROM_LOAD( "ad1cg1.2a", 0x200000*0x5, 0x200000,CRC(1aab1eb7) SHA1(b8f9eeafec7e0de340cf48e38fa55dd14404c867) ) - ROM_LOAD( "ad1cg2.3a", 0x200000*0x6, 0x200000,CRC(cdcd1874) SHA1(5a7a4a0d897cca4956b0a4f178f39f618c921861) ) - ROM_LOAD( "ad1cg3.5a", 0x200000*0x7, 0x200000,CRC(effdd2cd) SHA1(9ff156e7e38c103b8fa6f3c29776dd38482d9cf2) ) - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "ad1ccrl.1c", 0x000000, 0x200000,CRC(bc3c9b12) SHA1(088e861e5c4b37c54b7f72963113a10870bf7927) ) - ROM_LOAD( "ad1ccrh.2c", 0x200000, 0x080000,CRC(71f44526) SHA1(bb4811fc5de626380ce6a17bee73e5e47926d850) ) - - ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "ad1potl0.5b", 0x80000*0, 0x80000,CRC(dfc7e729) SHA1(5e3deef66d0a5dd2ff0584b8c8be4bf5e798e4d0) ) - ROM_LOAD( "ad1potl1.4b", 0x80000*1, 0x80000,CRC(5914ef8e) SHA1(f6db9c3061ceda76eef0a9538d9c048366b71124) ) - ROM_LOAD( "ad1potm0.5c", 0x80000*2, 0x80000,CRC(844bcd6b) SHA1(629b8dc0a7e94410c08c8874b69d9f4bc22f3e4f) ) - ROM_LOAD( "ad1potm1.4c", 0x80000*3, 0x80000,CRC(515cf541) SHA1(db1522813ea3e982d479cc1903d18799bf75aea9) ) - ROM_LOAD( "ad1potu0.5d", 0x80000*4, 0x80000,CRC(e0f44949) SHA1(ffdb64d600883974b05edaa9ed3071af355ee17f) ) - ROM_LOAD( "ad1potu1.4d", 0x80000*5, 0x80000,CRC(f2cd2cbb) SHA1(19fe6e3454a1e4353c7fe0a0d7a71742fea946de) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "ad1wave0.10r", 0x100000*0, 0x100000,CRC(c7879a72) SHA1(ae04d664858b0944583590ed0003a9420032d5ca) ) - ROM_LOAD( "ad1wave1.10p", 0x100000*2, 0x100000,CRC(69c1d41e) SHA1(b5cdfe7b75075c585dfd842347f8e4e692bb2781) ) - ROM_LOAD( "ad1wave2.10n", 0x100000*1, 0x100000,CRC(365a6831) SHA1(ddaa44a4436d6de120b64a5d130b1ee18f872e19) ) - ROM_LOAD( "ad1wave3.10l", 0x100000*3, 0x100000,CRC(cd8ecb0b) SHA1(7950b5a3a81f5554f57accabc7a623b8265a21a1) ) - - ROM_REGION( 0x300, "gamma_proms", 0 ) - ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) -ROM_END - -ROM_START( victlapw ) - ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "advprgll.4d", 0x00003, 0x80000, CRC(4dc1b0ab) SHA1(b5913388d16f824af6dbb01b5b0350d510667a87) ) - ROM_LOAD32_BYTE( "advprglm.2d", 0x00002, 0x80000, CRC(7b658bef) SHA1(cf982b49fde0c1897c4c16e77f9eb2a145d8cd42) ) - ROM_LOAD32_BYTE( "advprgum.8d", 0x00001, 0x80000, CRC(af67f2fb) SHA1(f391843ee0d053e33660c60e3718871142d932f2) ) - ROM_LOAD32_BYTE( "advprguu.6d", 0x00000, 0x80000, CRC(b60e5d2b) SHA1(f5740615c2864c5c6433275cf4388bda5122b7a7) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ - ROM_LOAD( "adv1data.6r", 0, 0x080000, CRC(10eecdb4) SHA1(aaedeed166614e6670e765e0d7e4e9eb5f38ad10) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "adv1cg0.2a", 0x200000*0x0, 0x200000,CRC(13353848) SHA1(c6c7693e3cb086919daf9fcaf6bf602142213073) ) - ROM_LOAD( "adv1cg1.1c", 0x200000*0x1, 0x200000,CRC(1542066c) SHA1(20a053e919b7a81da2a17d31dc7482832a4d4ffe) ) - ROM_LOAD( "adv1cg2.2d", 0x200000*0x2, 0x200000,CRC(111f371c) SHA1(29d8062daae51b3c1712bd30baa9813a2b5b374d) ) - ROM_LOAD( "adv1cg3.1e", 0x200000*0x3, 0x200000,CRC(a077831f) SHA1(71bb95199b368e48bc474123ca84d19213f73137) ) - ROM_LOAD( "adv1cg4.2f", 0x200000*0x4, 0x200000,CRC(71abdacf) SHA1(64409e6aa40dd9e5a6dd1dc306860fbbf6ee7c3e) ) - ROM_LOAD( "adv1cg5.1j", 0x200000*0x5, 0x200000,CRC(cd6cd798) SHA1(51070997a457c0ace078174569cd548ac2226b2d) ) - ROM_LOAD( "adv1cg6.2k", 0x200000*0x6, 0x200000,CRC(94bdafba) SHA1(41e64fa99b342edd8b0ed95ae9869c23e03399e6) ) - ROM_LOAD( "adv1cg7.1n", 0x200000*0x7, 0x200000,CRC(18823475) SHA1(a3244d665b59c352593de21f5cb8d55ddf8cee5c) ) - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "adv1ccrl.5a", 0x000000, 0x200000,CRC(dd2b96ae) SHA1(6337ce17e617234c27ebad578ba82451649aad9c) ) /* ident to adv1ccrl.5l */ - ROM_LOAD( "adv1ccrh.5c", 0x200000, 0x080000,CRC(5719844a) SHA1(a17d7bc239235e9f566931ba4fee1d6ad7964d83) ) /* ident to adv1ccrh.5j */ - - ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "adv1pot.l0", 0x80000*0, 0x80000,CRC(3b85b2a4) SHA1(84c92ed0105618d4aa5508af344b4b6cfa772567) ) - ROM_LOAD( "adv1pot.l1", 0x80000*1, 0x80000,CRC(601d6488) SHA1(c7932103ba6070e17deb3cc06060eed7789f938e) ) - ROM_LOAD( "adv1pot.l2", 0x80000*2, 0x80000,CRC(a0323a84) SHA1(deadf9a47461df7b137759d6886e676137b39fd2) ) - ROM_LOAD( "adv1pot.m0", 0x80000*3, 0x80000,CRC(20951aa2) SHA1(3de55bded443a5b78699cec4845470b53b22301a) ) - ROM_LOAD( "adv1pot.m1", 0x80000*4, 0x80000,CRC(5aed6fbf) SHA1(8cee781d8a12e00635b9a1e5cc8d82e64b17e8f1) ) - ROM_LOAD( "adv1pot.m2", 0x80000*5, 0x80000,CRC(00cbff92) SHA1(09a11ba064aafc921a7ca0add5898d91b773f10a) ) - ROM_LOAD( "adv1pot.u0", 0x80000*6, 0x80000,CRC(6b73dd2a) SHA1(e3654ab2b62e4f3314558209e37c5636f871a6c7) ) - ROM_LOAD( "adv1pot.u1", 0x80000*7, 0x80000,CRC(c8788f74) SHA1(606e10b05146e3db824aa608745de80584420d12) ) - ROM_LOAD( "adv1pot.u2", 0x80000*8, 0x80000,CRC(e67f29c5) SHA1(16222afb4f1f494711dd00ebb347c824db333bae) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "adv1wav0.10r", 0x000000, 0x100000, CRC(f07b2d9d) SHA1(fd46c23b336d5e9a748f7f8d825c19737125d2fb) ) - ROM_LOAD( "adv1wav1.10p", 0x200000, 0x100000, CRC(737f3c7a) SHA1(4737994f146c0076e7270785f41f3a85c53c7c5f) ) - ROM_LOAD( "adv1wav2.10n", 0x100000, 0x100000, CRC(c1a5ca5e) SHA1(27e6f9256d5fe5966e91d6be1e6e80900a764af1) ) - ROM_LOAD( "adv1wav3.10l", 0x300000, 0x100000, CRC(fc6b8004) SHA1(5c9e0805895931ec2b6a43376059bdbf5777222f) ) - - ROM_REGION( 0x300, "gamma_proms", 0 ) - ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) -ROM_END - -ROM_START( raveracw ) - ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "rv2prllb.4d", 0x00003, 0x80000, CRC(3017cd1e) SHA1(ccd648b4a5dfc74fd141815af2969f423311042f) ) - ROM_LOAD32_BYTE( "rv2prlmb.2d", 0x00002, 0x80000, CRC(894be0c3) SHA1(4dba93dc3ca1cf502c5f54018b64ad79bb2a632b) ) - ROM_LOAD32_BYTE( "rv2prumb.8d", 0x00001, 0x80000, CRC(6414a800) SHA1(c278ff644909d12a43ba6fc2bf8d2092e469c3e6) ) - ROM_LOAD32_BYTE( "rv2pruub.6d", 0x00000, 0x80000, CRC(a9f18714) SHA1(8e7b17749d151f92020f68d1ac06003cf1f5c573) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ - ROM_LOAD( "rv1data.6r", 0, 0x080000, CRC(d358ec20) SHA1(140c513349240417bb546dd2d151f3666b818e91) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "rv1cg0.1a", 0x200000*0x0, 0x200000,CRC(c518f06b) SHA1(4c01d453244192dd13087bdc72a7f7be80b47cbc) ) /* rv1cg0.2a */ - ROM_LOAD( "rv1cg1.1c", 0x200000*0x1, 0x200000,CRC(6628f792) SHA1(7a5405c5fcb2f3f001ae17df393c31e61a834f2b) ) /* rv1cg1.2c */ - ROM_LOAD( "rv1cg2.1d", 0x200000*0x2, 0x200000,CRC(0b707cc5) SHA1(38e1a554b278062edc369565353497ac4b016f78) ) /* rv1cg2.2d */ - ROM_LOAD( "rv1cg3.1e", 0x200000*0x3, 0x200000,CRC(39b62921) SHA1(873287d81338baf10dd85214d82f6c38bfdf199e) ) /* rv1cg3.2e */ - ROM_LOAD( "rv1cg4.1f", 0x200000*0x4, 0x200000,CRC(a9791ea2) SHA1(245b2ebbadd1fbca90dc241f88e9f6f341b2a01a) ) /* rv1cg4.2f */ - ROM_LOAD( "rv1cg5.1j", 0x200000*0x5, 0x200000,CRC(b2c79ec1) SHA1(6f669996863bdf1fe09b0c1a2a876625029d3d43) ) /* rv1cg5.2j */ - ROM_LOAD( "rv1cg6.1k", 0x200000*0x6, 0x200000,CRC(8cddedc2) SHA1(e3993f5505bc7e61bec7be5b48c873572e1220f7) ) /* rv1cg6.2k */ - ROM_LOAD( "rv1cg7.1n", 0x200000*0x7, 0x200000,CRC(b39147ca) SHA1(50ca6691fc809c95e6999dd52e39f2b8c2d22f3b) ) /* rv1cg7.2n */ - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "rv1ccrl.5a", 0x000000, 0x200000,CRC(bc634f72) SHA1(b5c504ed92bca7682614fc4c51f38cff607e6f2a) ) /* rv1ccrl.5l */ - ROM_LOAD( "rv1ccrh.5c", 0x200000, 0x080000,CRC(a741b262) SHA1(363076220a0eacc67befda05f8253963e8ffbcaa) ) /* rv1ccrh.5j */ - - ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "rv1potl0.5b", 0x80000*0x0, 0x80000,CRC(de2ce519) SHA1(2fe0dd000571f76d1a4df6a439d40119125170ef) ) - ROM_LOAD( "rv1potl1.4b", 0x80000*0x1, 0x80000,CRC(2215cb5a) SHA1(d48ee692ab3dbcffdc49d22f6f232ca9390da766) ) - ROM_LOAD( "rv1potl2.3b", 0x80000*0x2, 0x80000,CRC(ddb15bf7) SHA1(4c54ec98e0cba10841d43a4ce593cdacfd7f90f8) ) - ROM_LOAD( "rv1potl3.2b", 0x80000*0x3, 0x80000,CRC(fa9361ca) SHA1(35a5c2712bca9c62400b724754de3a931ad21561) ) - ROM_LOAD( "rv1potm0.5c", 0x80000*0x4, 0x80000,CRC(3c024f3a) SHA1(711f0442823797b2d410352796a5cca66af98dce) ) - ROM_LOAD( "rv1potm1.4c", 0x80000*0x5, 0x80000,CRC(b1a32a68) SHA1(e24abb3a7e35d098abae5420bf8ef5c975718987) ) - ROM_LOAD( "rv1potm2.3c", 0x80000*0x6, 0x80000,CRC(a414fe15) SHA1(eb27cdca045ab2ab27dec179043328847fb65e11) ) - ROM_LOAD( "rv1potm3.2c", 0x80000*0x7, 0x80000,CRC(2953bbb4) SHA1(aca1acd87f7130d2522d0c6f8e60beeb7ab7495a) ) - ROM_LOAD( "rv1potu0.5d", 0x80000*0x8, 0x80000,CRC(b9eaf3cc) SHA1(3b2a9041f1fa90706ecf7d4fbff918516f891a07) ) - ROM_LOAD( "rv1potu1.4d", 0x80000*0x9, 0x80000,CRC(a5c55258) SHA1(826d4dde761aec7d848456f7bc4ba6268fe99605) ) - ROM_LOAD( "rv1potu2.3d", 0x80000*0xa, 0x80000,CRC(c18fcb74) SHA1(a4009ae2b014dc89aed4741fd97f84350117c2f4) ) - ROM_LOAD( "rv1potu3.2d", 0x80000*0xb, 0x80000,CRC(79735aaa) SHA1(1cf14274669b916a7641f7a16785da1b72347485) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "rv1wav0.10r", 0x000000, 0x100000, CRC(5aef8143) SHA1(a75d31298e3ff9b290f238976a11e8b85cfb72d3) ) - ROM_LOAD( "rv1wav1.10p", 0x200000, 0x100000, CRC(9ed9e6b3) SHA1(dd1da2b08d1b6aa0912daacc77744c9799aabb78) ) - ROM_LOAD( "rv1wav2.10n", 0x100000, 0x100000, CRC(5af9dc83) SHA1(9aeb7f8217b806a6f3ed93056513af9fbcb6b372) ) - ROM_LOAD( "rv1wav3.10l", 0x300000, 0x100000, CRC(ffb9ad75) SHA1(a9a61a597bd3bbe9732f92747d82264fe4d9af48) ) - - ROM_REGION( 0x300, "gamma_proms", 0 ) - ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - - ROM_REGION( 0x2000, "nvram", 0 ) // default eeprom - ROM_LOAD( "rv1eeprm.9e", 0x0000, 0x2000, CRC(e00dd412) SHA1(f594b31ace5e5e980e904faa8b83a450cc95db17) ) -ROM_END - -ROM_START( raveracj ) - ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "rv1prllb.4d", 0x00003, 0x80000, CRC(71da3eea) SHA1(8a641bb23e0ad89cae5ee1570f8a3627b2434d20) ) - ROM_LOAD32_BYTE( "rv1prlmb.2d", 0x00002, 0x80000, CRC(6ab7e9ce) SHA1(0c6376ca5a63409aeea344bbc201af6c47afe9ab) ) - ROM_LOAD32_BYTE( "rv1prumb.8d", 0x00001, 0x80000, CRC(375fabcf) SHA1(448e3db3e3fab8c7c27e214ab5a5fa84e5f84366) ) - ROM_LOAD32_BYTE( "rv1pruub.6d", 0x00000, 0x80000, CRC(92f834d6) SHA1(028368790f0293fcfea5c7b12f7f315e27a62f77) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ - ROM_LOAD( "rv1data.6r", 0, 0x080000, CRC(d358ec20) SHA1(140c513349240417bb546dd2d151f3666b818e91) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "rv1cg0.1a", 0x200000*0x0, 0x200000,CRC(c518f06b) SHA1(4c01d453244192dd13087bdc72a7f7be80b47cbc) ) /* rv1cg0.2a */ - ROM_LOAD( "rv1cg1.1c", 0x200000*0x1, 0x200000,CRC(6628f792) SHA1(7a5405c5fcb2f3f001ae17df393c31e61a834f2b) ) /* rv1cg1.2c */ - ROM_LOAD( "rv1cg2.1d", 0x200000*0x2, 0x200000,CRC(0b707cc5) SHA1(38e1a554b278062edc369565353497ac4b016f78) ) /* rv1cg2.2d */ - ROM_LOAD( "rv1cg3.1e", 0x200000*0x3, 0x200000,CRC(39b62921) SHA1(873287d81338baf10dd85214d82f6c38bfdf199e) ) /* rv1cg3.2e */ - ROM_LOAD( "rv1cg4.1f", 0x200000*0x4, 0x200000,CRC(a9791ea2) SHA1(245b2ebbadd1fbca90dc241f88e9f6f341b2a01a) ) /* rv1cg4.2f */ - ROM_LOAD( "rv1cg5.1j", 0x200000*0x5, 0x200000,CRC(b2c79ec1) SHA1(6f669996863bdf1fe09b0c1a2a876625029d3d43) ) /* rv1cg5.2j */ - ROM_LOAD( "rv1cg6.1k", 0x200000*0x6, 0x200000,CRC(8cddedc2) SHA1(e3993f5505bc7e61bec7be5b48c873572e1220f7) ) /* rv1cg6.2k */ - ROM_LOAD( "rv1cg7.1n", 0x200000*0x7, 0x200000,CRC(b39147ca) SHA1(50ca6691fc809c95e6999dd52e39f2b8c2d22f3b) ) /* rv1cg7.2n */ - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "rv1ccrl.5a", 0x000000, 0x200000,CRC(bc634f72) SHA1(b5c504ed92bca7682614fc4c51f38cff607e6f2a) ) /* rv1ccrl.5l */ - ROM_LOAD( "rv1ccrh.5c", 0x200000, 0x080000,CRC(a741b262) SHA1(363076220a0eacc67befda05f8253963e8ffbcaa) ) /* rv1ccrh.5j */ - - ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "rv1potl0.5b", 0x80000*0x0, 0x80000,CRC(de2ce519) SHA1(2fe0dd000571f76d1a4df6a439d40119125170ef) ) - ROM_LOAD( "rv1potl1.4b", 0x80000*0x1, 0x80000,CRC(2215cb5a) SHA1(d48ee692ab3dbcffdc49d22f6f232ca9390da766) ) - ROM_LOAD( "rv1potl2.3b", 0x80000*0x2, 0x80000,CRC(ddb15bf7) SHA1(4c54ec98e0cba10841d43a4ce593cdacfd7f90f8) ) - ROM_LOAD( "rv1potl3.2b", 0x80000*0x3, 0x80000,CRC(fa9361ca) SHA1(35a5c2712bca9c62400b724754de3a931ad21561) ) - ROM_LOAD( "rv1potm0.5c", 0x80000*0x4, 0x80000,CRC(3c024f3a) SHA1(711f0442823797b2d410352796a5cca66af98dce) ) - ROM_LOAD( "rv1potm1.4c", 0x80000*0x5, 0x80000,CRC(b1a32a68) SHA1(e24abb3a7e35d098abae5420bf8ef5c975718987) ) - ROM_LOAD( "rv1potm2.3c", 0x80000*0x6, 0x80000,CRC(a414fe15) SHA1(eb27cdca045ab2ab27dec179043328847fb65e11) ) - ROM_LOAD( "rv1potm3.2c", 0x80000*0x7, 0x80000,CRC(2953bbb4) SHA1(aca1acd87f7130d2522d0c6f8e60beeb7ab7495a) ) - ROM_LOAD( "rv1potu0.5d", 0x80000*0x8, 0x80000,CRC(b9eaf3cc) SHA1(3b2a9041f1fa90706ecf7d4fbff918516f891a07) ) - ROM_LOAD( "rv1potu1.4d", 0x80000*0x9, 0x80000,CRC(a5c55258) SHA1(826d4dde761aec7d848456f7bc4ba6268fe99605) ) - ROM_LOAD( "rv1potu2.3d", 0x80000*0xa, 0x80000,CRC(c18fcb74) SHA1(a4009ae2b014dc89aed4741fd97f84350117c2f4) ) - ROM_LOAD( "rv1potu3.2d", 0x80000*0xb, 0x80000,CRC(79735aaa) SHA1(1cf14274669b916a7641f7a16785da1b72347485) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "rv1wav0.10r", 0x000000, 0x100000, CRC(5aef8143) SHA1(a75d31298e3ff9b290f238976a11e8b85cfb72d3) ) - ROM_LOAD( "rv1wav1.10p", 0x200000, 0x100000, CRC(9ed9e6b3) SHA1(dd1da2b08d1b6aa0912daacc77744c9799aabb78) ) - ROM_LOAD( "rv1wav2.10n", 0x100000, 0x100000, CRC(5af9dc83) SHA1(9aeb7f8217b806a6f3ed93056513af9fbcb6b372) ) - ROM_LOAD( "rv1wav3.10l", 0x300000, 0x100000, CRC(ffb9ad75) SHA1(a9a61a597bd3bbe9732f92747d82264fe4d9af48) ) - - ROM_REGION( 0x300, "gamma_proms", 0 ) - ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - - ROM_REGION( 0x2000, "nvram", 0 ) // default eeprom - ROM_LOAD( "rv1eeprm.9e", 0x0000, 0x2000, CRC(e00dd412) SHA1(f594b31ace5e5e980e904faa8b83a450cc95db17) ) -ROM_END - -ROM_START( raveracja ) - ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "rv1prll.4d", 0x00003, 0x80000, CRC(5dfce6cd) SHA1(1aeeca1e507ae4cbe3d39ca5efd1cc4fe1ab03a8) ) - ROM_LOAD32_BYTE( "rv1prlm.2d", 0x00002, 0x80000, CRC(0d4d9f74) SHA1(f886b0629cbf5a369af1f44e53c6fd3f51b3fbc9) ) - ROM_LOAD32_BYTE( "rv1prum.8d", 0x00001, 0x80000, CRC(28e503e3) SHA1(a3071461f840f28c65c660de215c73f812f356b3) ) - ROM_LOAD32_BYTE( "rv1pruu.6d", 0x00000, 0x80000, CRC(c47d9ff4) SHA1(4d7c4ac4151a3b306e7277937add8eee26e561a6) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ - ROM_LOAD( "rv1data.6r", 0, 0x080000, CRC(d358ec20) SHA1(140c513349240417bb546dd2d151f3666b818e91) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "rv1cg0.1a", 0x200000*0x0, 0x200000,CRC(c518f06b) SHA1(4c01d453244192dd13087bdc72a7f7be80b47cbc) ) /* rv1cg0.2a */ - ROM_LOAD( "rv1cg1.1c", 0x200000*0x1, 0x200000,CRC(6628f792) SHA1(7a5405c5fcb2f3f001ae17df393c31e61a834f2b) ) /* rv1cg1.2c */ - ROM_LOAD( "rv1cg2.1d", 0x200000*0x2, 0x200000,CRC(0b707cc5) SHA1(38e1a554b278062edc369565353497ac4b016f78) ) /* rv1cg2.2d */ - ROM_LOAD( "rv1cg3.1e", 0x200000*0x3, 0x200000,CRC(39b62921) SHA1(873287d81338baf10dd85214d82f6c38bfdf199e) ) /* rv1cg3.2e */ - ROM_LOAD( "rv1cg4.1f", 0x200000*0x4, 0x200000,CRC(a9791ea2) SHA1(245b2ebbadd1fbca90dc241f88e9f6f341b2a01a) ) /* rv1cg4.2f */ - ROM_LOAD( "rv1cg5.1j", 0x200000*0x5, 0x200000,CRC(b2c79ec1) SHA1(6f669996863bdf1fe09b0c1a2a876625029d3d43) ) /* rv1cg5.2j */ - ROM_LOAD( "rv1cg6.1k", 0x200000*0x6, 0x200000,CRC(8cddedc2) SHA1(e3993f5505bc7e61bec7be5b48c873572e1220f7) ) /* rv1cg6.2k */ - ROM_LOAD( "rv1cg7.1n", 0x200000*0x7, 0x200000,CRC(b39147ca) SHA1(50ca6691fc809c95e6999dd52e39f2b8c2d22f3b) ) /* rv1cg7.2n */ - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "rv1ccrl.5a", 0x000000, 0x200000,CRC(bc634f72) SHA1(b5c504ed92bca7682614fc4c51f38cff607e6f2a) ) /* rv1ccrl.5l */ - ROM_LOAD( "rv1ccrh.5c", 0x200000, 0x080000,CRC(a741b262) SHA1(363076220a0eacc67befda05f8253963e8ffbcaa) ) /* rv1ccrh.5j */ - - ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "rv1potl0.5b", 0x80000*0x0, 0x80000,CRC(de2ce519) SHA1(2fe0dd000571f76d1a4df6a439d40119125170ef) ) - ROM_LOAD( "rv1potl1.4b", 0x80000*0x1, 0x80000,CRC(2215cb5a) SHA1(d48ee692ab3dbcffdc49d22f6f232ca9390da766) ) - ROM_LOAD( "rv1potl2.3b", 0x80000*0x2, 0x80000,CRC(ddb15bf7) SHA1(4c54ec98e0cba10841d43a4ce593cdacfd7f90f8) ) - ROM_LOAD( "rv1potl3.2b", 0x80000*0x3, 0x80000,CRC(fa9361ca) SHA1(35a5c2712bca9c62400b724754de3a931ad21561) ) - ROM_LOAD( "rv1potm0.5c", 0x80000*0x4, 0x80000,CRC(3c024f3a) SHA1(711f0442823797b2d410352796a5cca66af98dce) ) - ROM_LOAD( "rv1potm1.4c", 0x80000*0x5, 0x80000,CRC(b1a32a68) SHA1(e24abb3a7e35d098abae5420bf8ef5c975718987) ) - ROM_LOAD( "rv1potm2.3c", 0x80000*0x6, 0x80000,CRC(a414fe15) SHA1(eb27cdca045ab2ab27dec179043328847fb65e11) ) - ROM_LOAD( "rv1potm3.2c", 0x80000*0x7, 0x80000,CRC(2953bbb4) SHA1(aca1acd87f7130d2522d0c6f8e60beeb7ab7495a) ) - ROM_LOAD( "rv1potu0.5d", 0x80000*0x8, 0x80000,CRC(b9eaf3cc) SHA1(3b2a9041f1fa90706ecf7d4fbff918516f891a07) ) - ROM_LOAD( "rv1potu1.4d", 0x80000*0x9, 0x80000,CRC(a5c55258) SHA1(826d4dde761aec7d848456f7bc4ba6268fe99605) ) - ROM_LOAD( "rv1potu2.3d", 0x80000*0xa, 0x80000,CRC(c18fcb74) SHA1(a4009ae2b014dc89aed4741fd97f84350117c2f4) ) - ROM_LOAD( "rv1potu3.2d", 0x80000*0xb, 0x80000,CRC(79735aaa) SHA1(1cf14274669b916a7641f7a16785da1b72347485) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "rv1wav0.10r", 0x000000, 0x100000, CRC(5aef8143) SHA1(a75d31298e3ff9b290f238976a11e8b85cfb72d3) ) - ROM_LOAD( "rv1wav1.10p", 0x200000, 0x100000, CRC(9ed9e6b3) SHA1(dd1da2b08d1b6aa0912daacc77744c9799aabb78) ) - ROM_LOAD( "rv1wav2.10n", 0x100000, 0x100000, CRC(5af9dc83) SHA1(9aeb7f8217b806a6f3ed93056513af9fbcb6b372) ) - ROM_LOAD( "rv1wav3.10l", 0x300000, 0x100000, CRC(ffb9ad75) SHA1(a9a61a597bd3bbe9732f92747d82264fe4d9af48) ) - - ROM_REGION( 0x300, "gamma_proms", 0 ) - ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - - ROM_REGION( 0x2000, "nvram", 0 ) // default eeprom - ROM_LOAD( "rv1eeprm.9e", 0x0000, 0x2000, CRC(e00dd412) SHA1(f594b31ace5e5e980e904faa8b83a450cc95db17) ) -ROM_END - -ROM_START( ridgera2 ) - ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "rrs2prll.4d", 0x00003, 0x80000, CRC(88199c0f) SHA1(5cf5bb714c3d209943a8d815eaea60afd34641ff) ) - ROM_LOAD32_BYTE( "rrs1prlmb.2d", 0x00002, 0x80000, CRC(8e86f199) SHA1(7bd9ec9147ef0380864508f66203ef2c6ad1f7f6) ) - ROM_LOAD32_BYTE( "rrs1prumb.8d", 0x00001, 0x80000, CRC(78c360b6) SHA1(8ee502291359cbc8aef39145c8fe7538311cc58f) ) - ROM_LOAD32_BYTE( "rrs1pruub.6d", 0x00000, 0x80000, CRC(60d6d4a4) SHA1(759762a9b7d7aee7ee1b44b1721e5356898aa7ea) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ - ROM_LOAD( "rrs1data.6r", 0, 0x080000, CRC(b7063aa8) SHA1(08ff689e8dd529b91eee423c93f084945c6de417) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "rrs1cg0.1a", 0x200000*0x4, 0x200000,CRC(714c0091) SHA1(df29512bd6e64827660c40304051366d2c4d7977) ) - ROM_LOAD( "rrs1cg1.2a", 0x200000*0x5, 0x200000,CRC(836545c1) SHA1(05e3346463d8d42b5d33216207e855033a65510d) ) - ROM_LOAD( "rrs1cg2.3a", 0x200000*0x6, 0x200000,CRC(00e9799d) SHA1(280184451138420f64080efe13e5e2795f7b61d4) ) - ROM_LOAD( "rrs1cg3.5a", 0x200000*0x7, 0x200000,CRC(3858983f) SHA1(feda270b71f1310ecf4c17823bc8827ca2951b40) ) - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "rrs1ccrl.5a", 0x000000, 0x200000,CRC(304a8b57) SHA1(f4f3e7c194697d754375f36a0e41d0941fa5d225) ) - ROM_LOAD( "rrs1ccrh.5c", 0x200000, 0x080000,CRC(bd3c86ab) SHA1(cd3a8774843c5864e651fa8989c80e2d975a13e8) ) - - ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "rrs1pol0.5b", 0x80000*0, 0x80000,CRC(9376c384) SHA1(cde0e36db1beab1523607098a760d81fac2ea90e) ) - ROM_LOAD( "rrs1pol1.4b", 0x80000*1, 0x80000,CRC(094fa832) SHA1(cc59442540b1cdef068c4408b6e048c11042beb8) ) - ROM_LOAD( "rrs1pom0.5c", 0x80000*2, 0x80000,CRC(b47a7f8b) SHA1(0fa0456ad8b4864a7071b5b5ba1a78877c1ac0f0) ) - ROM_LOAD( "rrs1pom1.4c", 0x80000*3, 0x80000,CRC(27260361) SHA1(8775cc779eb8b6a0d79fa84d606c970ec2d6ea8d) ) - ROM_LOAD( "rrs1pou0.5d", 0x80000*4, 0x80000,CRC(74d6ec84) SHA1(63f5beee51443c98100330ec04291f71e10716c4) ) - ROM_LOAD( "rrs1pou1.4d", 0x80000*5, 0x80000,CRC(f527caaa) SHA1(f92bdd15323239d593ddac92a11d23a27e6635ed) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "rrs1wav0.10r", 0x100000*0, 0x100000,CRC(99d11a2d) SHA1(1f3db98a99be0f07c03b0a7817561459a58f310e) ) - ROM_LOAD( "rrs1wav1.10p", 0x100000*2, 0x100000,CRC(ad28444a) SHA1(c31bbf3cae5015e5494fe4988b9b01d822224c69) ) - ROM_LOAD( "rrs1wav2.10n", 0x100000*1, 0x100000,CRC(6f0d4619) SHA1(cd3d57f2ea21497f388ffa29ec7d2665647a01c0) ) - ROM_LOAD( "rrs1wav3.10l", 0x100000*3, 0x100000,CRC(106e761f) SHA1(97f47b857bdcbc79b0aface53dd385e67fcc9108) ) - - ROM_REGION( 0x300, "gamma_proms", 0 ) - ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) -ROM_END - -ROM_START( ridgera2j ) - ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "rrs1prllb.4d", 0x00003, 0x80000, CRC(22f069e5) SHA1(fcaec3aa83853c39d713ed01c511060663027ccd) ) - ROM_LOAD32_BYTE( "rrs1prlmb.2d", 0x00002, 0x80000, CRC(8e86f199) SHA1(7bd9ec9147ef0380864508f66203ef2c6ad1f7f6) ) - ROM_LOAD32_BYTE( "rrs1prumb.8d", 0x00001, 0x80000, CRC(78c360b6) SHA1(8ee502291359cbc8aef39145c8fe7538311cc58f) ) - ROM_LOAD32_BYTE( "rrs1pruub.6d", 0x00000, 0x80000, CRC(60d6d4a4) SHA1(759762a9b7d7aee7ee1b44b1721e5356898aa7ea) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ - ROM_LOAD( "rrs1data.6r", 0, 0x080000, CRC(b7063aa8) SHA1(08ff689e8dd529b91eee423c93f084945c6de417) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "rrs1cg0.1a", 0x200000*0x4, 0x200000,CRC(714c0091) SHA1(df29512bd6e64827660c40304051366d2c4d7977) ) - ROM_LOAD( "rrs1cg1.2a", 0x200000*0x5, 0x200000,CRC(836545c1) SHA1(05e3346463d8d42b5d33216207e855033a65510d) ) - ROM_LOAD( "rrs1cg2.3a", 0x200000*0x6, 0x200000,CRC(00e9799d) SHA1(280184451138420f64080efe13e5e2795f7b61d4) ) - ROM_LOAD( "rrs1cg3.5a", 0x200000*0x7, 0x200000,CRC(3858983f) SHA1(feda270b71f1310ecf4c17823bc8827ca2951b40) ) - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "rrs1ccrl.5a", 0x000000, 0x200000,CRC(304a8b57) SHA1(f4f3e7c194697d754375f36a0e41d0941fa5d225) ) - ROM_LOAD( "rrs1ccrh.5c", 0x200000, 0x080000,CRC(bd3c86ab) SHA1(cd3a8774843c5864e651fa8989c80e2d975a13e8) ) - - ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "rrs1pol0.5b", 0x80000*0, 0x80000,CRC(9376c384) SHA1(cde0e36db1beab1523607098a760d81fac2ea90e) ) - ROM_LOAD( "rrs1pol1.4b", 0x80000*1, 0x80000,CRC(094fa832) SHA1(cc59442540b1cdef068c4408b6e048c11042beb8) ) - ROM_LOAD( "rrs1pom0.5c", 0x80000*2, 0x80000,CRC(b47a7f8b) SHA1(0fa0456ad8b4864a7071b5b5ba1a78877c1ac0f0) ) - ROM_LOAD( "rrs1pom1.4c", 0x80000*3, 0x80000,CRC(27260361) SHA1(8775cc779eb8b6a0d79fa84d606c970ec2d6ea8d) ) - ROM_LOAD( "rrs1pou0.5d", 0x80000*4, 0x80000,CRC(74d6ec84) SHA1(63f5beee51443c98100330ec04291f71e10716c4) ) - ROM_LOAD( "rrs1pou1.4d", 0x80000*5, 0x80000,CRC(f527caaa) SHA1(f92bdd15323239d593ddac92a11d23a27e6635ed) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "rrs1wav0.10r", 0x100000*0, 0x100000,CRC(99d11a2d) SHA1(1f3db98a99be0f07c03b0a7817561459a58f310e) ) - ROM_LOAD( "rrs1wav1.10p", 0x100000*2, 0x100000,CRC(ad28444a) SHA1(c31bbf3cae5015e5494fe4988b9b01d822224c69) ) - ROM_LOAD( "rrs1wav2.10n", 0x100000*1, 0x100000,CRC(6f0d4619) SHA1(cd3d57f2ea21497f388ffa29ec7d2665647a01c0) ) - ROM_LOAD( "rrs1wav3.10l", 0x100000*3, 0x100000,CRC(106e761f) SHA1(97f47b857bdcbc79b0aface53dd385e67fcc9108) ) - - ROM_REGION( 0x300, "gamma_proms", 0 ) - ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) -ROM_END - -ROM_START( ridgera2ja ) - ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "rrs1prll.4d", 0x00003, 0x80000, CRC(fbf785a2) SHA1(b9333c7623f68f48aa6ae50913a22a527a19576a) ) - ROM_LOAD32_BYTE( "rrs1prlm.2d", 0x00002, 0x80000, CRC(562f747a) SHA1(79d818b87c9a992fc9706fb39e6d560c2b0aa392) ) - ROM_LOAD32_BYTE( "rrs1prum.8d", 0x00001, 0x80000, CRC(93259fb0) SHA1(c29787e873797a003db27adbd20d7b852e26d8c6) ) - ROM_LOAD32_BYTE( "rrs1pruu.6d", 0x00000, 0x80000, CRC(31cdefe8) SHA1(ae836d389bed43dd156eb4cf3e97b6f1ad68181e) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ - ROM_LOAD( "rrs1data.6r", 0, 0x080000, CRC(b7063aa8) SHA1(08ff689e8dd529b91eee423c93f084945c6de417) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "rrs1cg0.1a", 0x200000*0x4, 0x200000,CRC(714c0091) SHA1(df29512bd6e64827660c40304051366d2c4d7977) ) - ROM_LOAD( "rrs1cg1.2a", 0x200000*0x5, 0x200000,CRC(836545c1) SHA1(05e3346463d8d42b5d33216207e855033a65510d) ) - ROM_LOAD( "rrs1cg2.3a", 0x200000*0x6, 0x200000,CRC(00e9799d) SHA1(280184451138420f64080efe13e5e2795f7b61d4) ) - ROM_LOAD( "rrs1cg3.5a", 0x200000*0x7, 0x200000,CRC(3858983f) SHA1(feda270b71f1310ecf4c17823bc8827ca2951b40) ) - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "rrs1ccrl.5a", 0x000000, 0x200000,CRC(304a8b57) SHA1(f4f3e7c194697d754375f36a0e41d0941fa5d225) ) - ROM_LOAD( "rrs1ccrh.5c", 0x200000, 0x080000,CRC(bd3c86ab) SHA1(cd3a8774843c5864e651fa8989c80e2d975a13e8) ) - - ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "rrs1pol0.5b", 0x80000*0, 0x80000,CRC(9376c384) SHA1(cde0e36db1beab1523607098a760d81fac2ea90e) ) - ROM_LOAD( "rrs1pol1.4b", 0x80000*1, 0x80000,CRC(094fa832) SHA1(cc59442540b1cdef068c4408b6e048c11042beb8) ) - ROM_LOAD( "rrs1pom0.5c", 0x80000*2, 0x80000,CRC(b47a7f8b) SHA1(0fa0456ad8b4864a7071b5b5ba1a78877c1ac0f0) ) - ROM_LOAD( "rrs1pom1.4c", 0x80000*3, 0x80000,CRC(27260361) SHA1(8775cc779eb8b6a0d79fa84d606c970ec2d6ea8d) ) - ROM_LOAD( "rrs1pou0.5d", 0x80000*4, 0x80000,CRC(74d6ec84) SHA1(63f5beee51443c98100330ec04291f71e10716c4) ) - ROM_LOAD( "rrs1pou1.4d", 0x80000*5, 0x80000,CRC(f527caaa) SHA1(f92bdd15323239d593ddac92a11d23a27e6635ed) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "rrs1wav0.10r", 0x100000*0, 0x100000,CRC(99d11a2d) SHA1(1f3db98a99be0f07c03b0a7817561459a58f310e) ) - ROM_LOAD( "rrs1wav1.10p", 0x100000*2, 0x100000,CRC(ad28444a) SHA1(c31bbf3cae5015e5494fe4988b9b01d822224c69) ) - ROM_LOAD( "rrs1wav2.10n", 0x100000*1, 0x100000,CRC(6f0d4619) SHA1(cd3d57f2ea21497f388ffa29ec7d2665647a01c0) ) - ROM_LOAD( "rrs1wav3.10l", 0x100000*3, 0x100000,CRC(106e761f) SHA1(97f47b857bdcbc79b0aface53dd385e67fcc9108) ) - - ROM_REGION( 0x300, "gamma_proms", 0 ) - ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) -ROM_END - -ROM_START( ridgerac ) - ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "rr3prgll.4d", 0x00003, 0x80000, CRC(856fe5ec) SHA1(72d95b8bd5da551c3d358b8ab266373a89f8aa6a) ) - ROM_LOAD32_BYTE( "rr3prglm.2d", 0x00002, 0x80000, CRC(1e9ef0a9) SHA1(a4577bcdf13673568793d8a324945fca30b10f43) ) - ROM_LOAD32_BYTE( "rr3prgum.8d", 0x00001, 0x80000, CRC(e160f63f) SHA1(9b4b7a13eb4bc19fcb53daedb87e4945c20a1b8e) ) - ROM_LOAD32_BYTE( "rr3prguu.6d", 0x00000, 0x80000, CRC(f07c78c0) SHA1(dbed76d868b761711faf5b6e11f2c9affb91db5d) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ - ROM_LOAD( "rr1data.6r", 0, 0x080000, CRC(18f5f748) SHA1(e0d149a66de36156edd9b55f604c9a9801aaefa8) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "rr1cg0.bin", 0x200000*0x4, 0x200000, CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) )//,CRC(d1b0eec6) SHA1(f66922c324dfc3ff408db7556c587ef90ca64c3b) ) - ROM_LOAD( "rr1cg1.bin", 0x200000*0x5, 0x200000, CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) )//,CRC(bb695d89) SHA1(557bac9d2718519c1f69e374d0ef9a86a43fe86c) ) - ROM_LOAD( "rr1cg2.bin", 0x200000*0x6, 0x200000, CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) )//,CRC(8f374c0a) SHA1(94ff8581de11a03ef86525155f8433bf5858b980) ) - ROM_LOAD( "rr1cg3.bin", 0x200000*0x7, 0x200000, CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) )//,CRC(072a5c47) SHA1(86b8e973ae6b78197d685fe6d14722d8e2d0dfec) ) - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "rr1ccrl.bin",0x000000, 0x200000, CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) )//,CRC(c15cb257) SHA1(0cb8f231c62ea37955be5d452a436a6e815af8e8) ) - ROM_LOAD( "rr1ccrh.bin",0x200000, 0x080000, CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) )//,CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) ) - - ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "rr1potl0.5b", 0x80000*0, 0x80000,CRC(3ac193e3) SHA1(ff213766f15e34dc1b25187b57d94e17930090a3) ) - ROM_LOAD( "rr1potl1.4b", 0x80000*1, 0x80000,CRC(ac3ffba5) SHA1(4eb4dda5faeff237e0d35725b56d309948fba900) ) - ROM_LOAD( "rr1potm0.5c", 0x80000*2, 0x80000,CRC(42a3fa08) SHA1(15db0ae7ccf7f5a77b9dd9a9d82a488b67f8aaff) ) - ROM_LOAD( "rr1potm1.4c", 0x80000*3, 0x80000,CRC(1bc1ea7b) SHA1(52c21eef4989c45acc5fa4deda2d0b63214731c8) ) - ROM_LOAD( "rr1potu0.5d", 0x80000*4, 0x80000,CRC(5e367f72) SHA1(5887f011379dce865fef238b402678a3d2033de9) ) - ROM_LOAD( "rr1potu1.4d", 0x80000*5, 0x80000,CRC(31d92475) SHA1(51d3c0baa223e1bc16ea2950f2e085597528f870) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "rr1wav0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) ) - ROM_LOAD( "rr1wav1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) ) - ROM_LOAD( "rr1wav2.10n", 0x100000*1, 0x100000,CRC(3244cb59) SHA1(b3283b30cfafbfdcbc6d482ecc4ed6a47a527ca4) ) - ROM_LOAD( "rr1wav3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) ) - - ROM_REGION( 0x300, "gamma_proms", 0 ) - ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) -ROM_END - -ROM_START( ridgeracb ) - ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "rr1prll.4d", 0x00003, 0x80000, CRC(4bb7fc86) SHA1(8291375b8ec4d37e0d9e3bf38da2d5907b0f31bd) ) - ROM_LOAD32_BYTE( "rr1prlm.2d", 0x00002, 0x80000, CRC(68e13830) SHA1(ddc447c7afbb5c4238969d7e78bfe9cf8fac6061) ) - ROM_LOAD32_BYTE( "rr1prum.8d", 0x00001, 0x80000, CRC(705ef78a) SHA1(881903413e66d6fd83d46eb18c4e1230531832ae) ) - ROM_LOAD32_BYTE( "rr2pruu.6d", 0x00000, 0x80000, CRC(a79e456f) SHA1(049c596e01e53e3a401c5c4260517f170688d387) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ - ROM_LOAD( "rr1data.6r", 0, 0x080000, CRC(18f5f748) SHA1(e0d149a66de36156edd9b55f604c9a9801aaefa8) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "rr1cg0.bin", 0x200000*0x4, 0x200000, CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) )//,CRC(d1b0eec6) SHA1(f66922c324dfc3ff408db7556c587ef90ca64c3b) ) - ROM_LOAD( "rr1cg1.bin", 0x200000*0x5, 0x200000, CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) )//,CRC(bb695d89) SHA1(557bac9d2718519c1f69e374d0ef9a86a43fe86c) ) - ROM_LOAD( "rr1cg2.bin", 0x200000*0x6, 0x200000, CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) )//,CRC(8f374c0a) SHA1(94ff8581de11a03ef86525155f8433bf5858b980) ) - ROM_LOAD( "rr1cg3.bin", 0x200000*0x7, 0x200000, CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) )//,CRC(072a5c47) SHA1(86b8e973ae6b78197d685fe6d14722d8e2d0dfec) ) - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "rr1ccrl.bin",0x000000, 0x200000, CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) )//,CRC(c15cb257) SHA1(0cb8f231c62ea37955be5d452a436a6e815af8e8) ) - ROM_LOAD( "rr1ccrh.bin",0x200000, 0x080000, CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) )//,CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) ) - - ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "rr1potl0.5b", 0x80000*0, 0x80000,CRC(3ac193e3) SHA1(ff213766f15e34dc1b25187b57d94e17930090a3) ) - ROM_LOAD( "rr1potl1.4b", 0x80000*1, 0x80000,CRC(ac3ffba5) SHA1(4eb4dda5faeff237e0d35725b56d309948fba900) ) - ROM_LOAD( "rr1potm0.5c", 0x80000*2, 0x80000,CRC(42a3fa08) SHA1(15db0ae7ccf7f5a77b9dd9a9d82a488b67f8aaff) ) - ROM_LOAD( "rr1potm1.4c", 0x80000*3, 0x80000,CRC(1bc1ea7b) SHA1(52c21eef4989c45acc5fa4deda2d0b63214731c8) ) - ROM_LOAD( "rr1potu0.5d", 0x80000*4, 0x80000,CRC(5e367f72) SHA1(5887f011379dce865fef238b402678a3d2033de9) ) - ROM_LOAD( "rr1potu1.4d", 0x80000*5, 0x80000,CRC(31d92475) SHA1(51d3c0baa223e1bc16ea2950f2e085597528f870) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "rr1wav0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) ) - ROM_LOAD( "rr1wav1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) ) - ROM_LOAD( "rr1wav2.10n", 0x100000*1, 0x100000,CRC(3244cb59) SHA1(b3283b30cfafbfdcbc6d482ecc4ed6a47a527ca4) ) - ROM_LOAD( "rr1wav3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) ) - - ROM_REGION( 0x300, "gamma_proms", 0 ) - ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) -ROM_END - -ROM_START( ridgeracj ) - ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "rr1prll.4d", 0x00003, 0x80000, CRC(4bb7fc86) SHA1(8291375b8ec4d37e0d9e3bf38da2d5907b0f31bd) ) - ROM_LOAD32_BYTE( "rr1prlm.2d", 0x00002, 0x80000, CRC(68e13830) SHA1(ddc447c7afbb5c4238969d7e78bfe9cf8fac6061) ) - ROM_LOAD32_BYTE( "rr1prum.8d", 0x00001, 0x80000, CRC(705ef78a) SHA1(881903413e66d6fd83d46eb18c4e1230531832ae) ) - ROM_LOAD32_BYTE( "rr1pruu.6d", 0x00000, 0x80000, CRC(c1371f96) SHA1(a78e0bf6c147c034487a85efa0a8470f4e8f4bf0) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ - ROM_LOAD( "rr1data.6r", 0, 0x080000, CRC(18f5f748) SHA1(e0d149a66de36156edd9b55f604c9a9801aaefa8) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "rr1cg0.bin", 0x200000*0x4, 0x200000, CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) )//,CRC(d1b0eec6) SHA1(f66922c324dfc3ff408db7556c587ef90ca64c3b) ) - ROM_LOAD( "rr1cg1.bin", 0x200000*0x5, 0x200000, CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) )//,CRC(bb695d89) SHA1(557bac9d2718519c1f69e374d0ef9a86a43fe86c) ) - ROM_LOAD( "rr1cg2.bin", 0x200000*0x6, 0x200000, CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) )//,CRC(8f374c0a) SHA1(94ff8581de11a03ef86525155f8433bf5858b980) ) - ROM_LOAD( "rr1cg3.bin", 0x200000*0x7, 0x200000, CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) )//,CRC(072a5c47) SHA1(86b8e973ae6b78197d685fe6d14722d8e2d0dfec) ) - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "rr1ccrl.bin",0x000000, 0x200000, CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) )//,CRC(c15cb257) SHA1(0cb8f231c62ea37955be5d452a436a6e815af8e8) ) - ROM_LOAD( "rr1ccrh.bin",0x200000, 0x080000, CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) )//,CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) ) - - ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "rr1potl0.5b", 0x80000*0, 0x80000,CRC(3ac193e3) SHA1(ff213766f15e34dc1b25187b57d94e17930090a3) ) - ROM_LOAD( "rr1potl1.4b", 0x80000*1, 0x80000,CRC(ac3ffba5) SHA1(4eb4dda5faeff237e0d35725b56d309948fba900) ) - ROM_LOAD( "rr1potm0.5c", 0x80000*2, 0x80000,CRC(42a3fa08) SHA1(15db0ae7ccf7f5a77b9dd9a9d82a488b67f8aaff) ) - ROM_LOAD( "rr1potm1.4c", 0x80000*3, 0x80000,CRC(1bc1ea7b) SHA1(52c21eef4989c45acc5fa4deda2d0b63214731c8) ) - ROM_LOAD( "rr1potu0.5d", 0x80000*4, 0x80000,CRC(5e367f72) SHA1(5887f011379dce865fef238b402678a3d2033de9) ) - ROM_LOAD( "rr1potu1.4d", 0x80000*5, 0x80000,CRC(31d92475) SHA1(51d3c0baa223e1bc16ea2950f2e085597528f870) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "rr1wav0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) ) - ROM_LOAD( "rr1wav1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) ) - ROM_LOAD( "rr1wav2.10n", 0x100000*1, 0x100000,CRC(3244cb59) SHA1(b3283b30cfafbfdcbc6d482ecc4ed6a47a527ca4) ) - ROM_LOAD( "rr1wav3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) ) - - ROM_REGION( 0x300, "gamma_proms", 0 ) - ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) -ROM_END - -ROM_START( ridgerac3 ) - ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "rr3prgll-3s.4d", 0x000003, 0x080000, CRC(2c3d8cb7) SHA1(46a7b62938fe3edde5c52ce3fdfe447000cd6af0) ) - ROM_LOAD32_BYTE( "rr3prglm-3s.2d", 0x000002, 0x080000, CRC(b15343f2) SHA1(3056eb5a3036a74b2ac641a4c3221986c0be1e27) ) - ROM_LOAD32_BYTE( "rr3prgum-3s.8d", 0x000001, 0x080000, CRC(8fda06ac) SHA1(7e9adba198eb0941100cda64ecedac504f6ac696) ) - ROM_LOAD32_BYTE( "rr3prguu-3s.6d", 0x000000, 0x080000, CRC(868398df) SHA1(422e0f9884904b0df93fcacd1468b8da0458eb8e) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ - ROM_LOAD( "rr1data.6r", 0, 0x080000, CRC(18f5f748) SHA1(e0d149a66de36156edd9b55f604c9a9801aaefa8) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "rr1cg0.bin", 0x200000*0x4, 0x200000, CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) )//,CRC(d1b0eec6) SHA1(f66922c324dfc3ff408db7556c587ef90ca64c3b) ) - ROM_LOAD( "rr1cg1.bin", 0x200000*0x5, 0x200000, CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) )//,CRC(bb695d89) SHA1(557bac9d2718519c1f69e374d0ef9a86a43fe86c) ) - ROM_LOAD( "rr1cg2.bin", 0x200000*0x6, 0x200000, CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) )//,CRC(8f374c0a) SHA1(94ff8581de11a03ef86525155f8433bf5858b980) ) - ROM_LOAD( "rr1cg3.bin", 0x200000*0x7, 0x200000, CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) )//,CRC(072a5c47) SHA1(86b8e973ae6b78197d685fe6d14722d8e2d0dfec) ) - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "rr1ccrl.bin",0x000000, 0x200000, CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) )//,CRC(c15cb257) SHA1(0cb8f231c62ea37955be5d452a436a6e815af8e8) ) - ROM_LOAD( "rr1ccrh.bin",0x200000, 0x080000, CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) )//,CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) ) - - ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "rr1potl0.5b", 0x80000*0, 0x80000,CRC(3ac193e3) SHA1(ff213766f15e34dc1b25187b57d94e17930090a3) ) - ROM_LOAD( "rr1potl1.4b", 0x80000*1, 0x80000,CRC(ac3ffba5) SHA1(4eb4dda5faeff237e0d35725b56d309948fba900) ) - ROM_LOAD( "rr1potm0.5c", 0x80000*2, 0x80000,CRC(42a3fa08) SHA1(15db0ae7ccf7f5a77b9dd9a9d82a488b67f8aaff) ) - ROM_LOAD( "rr1potm1.4c", 0x80000*3, 0x80000,CRC(1bc1ea7b) SHA1(52c21eef4989c45acc5fa4deda2d0b63214731c8) ) - ROM_LOAD( "rr1potu0.5d", 0x80000*4, 0x80000,CRC(5e367f72) SHA1(5887f011379dce865fef238b402678a3d2033de9) ) - ROM_LOAD( "rr1potu1.4d", 0x80000*5, 0x80000,CRC(31d92475) SHA1(51d3c0baa223e1bc16ea2950f2e085597528f870) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "rr1wav0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) ) - ROM_LOAD( "rr1wav1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) ) - ROM_LOAD( "rr1wav2.10n", 0x100000*1, 0x100000,CRC(3244cb59) SHA1(b3283b30cfafbfdcbc6d482ecc4ed6a47a527ca4) ) - ROM_LOAD( "rr1wav3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) ) - - ROM_REGION( 0x300, "gamma_proms", 0 ) - ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) -ROM_END - -ROM_START( ridgeracf ) - ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "rrf2prgll.4d", 0x00003, 0x80000, CRC(23c6144d) SHA1(99f70e2c60fba7551cafdce12b07da1f8ab8aad6) ) - ROM_LOAD32_BYTE( "rrf2prglm.2d", 0x00002, 0x80000, CRC(1ad638a1) SHA1(505a7f4ba60bbc4e735865fbc5d664311b6045d9) ) - ROM_LOAD32_BYTE( "rrf2prgum.8d", 0x00001, 0x80000, CRC(d7e0aa16) SHA1(cab4578cdd3af84b865114be4105cfdc2e7abf36) ) - ROM_LOAD32_BYTE( "rrf2prguu.6d", 0x00000, 0x80000, CRC(12c808bb) SHA1(64e84686d4ceb8145b9a59b75d0dced830884c9d) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ - ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) - - ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ - ROM_LOAD( "rrf1data.6r", 0, 0x080000, CRC(ce3c6ed6) SHA1(23e033364bc967c10c49fd1d5413dda837670633) ) - - ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "rrf2potl0.l0", 0x80000*0, 0x80000, CRC(9b762e60) SHA1(50b67ff6678bacba140bad3aedda75c30851fa7a) ) - ROM_LOAD( "rrf2potl1.l1", 0x80000*1, 0x80000, CRC(ab4d66b0) SHA1(59020b3dc2efff99cd528752ca7168b64ae96ac4) ) - ROM_LOAD( "rrf2potm0.m0", 0x80000*2, 0x80000, CRC(02d4daa3) SHA1(9b4e48d3234cb91146b5d31ffcf42ad199ccb903) ) - ROM_LOAD( "rrf2potm1.m1", 0x80000*3, 0x80000, CRC(37e005c2) SHA1(036ae1c44aaa6a6904e6d4938572035ccc6854ed) ) - ROM_LOAD( "rrf2potu0.u0", 0x80000*4, 0x80000, CRC(86b3fe98) SHA1(f242d33f7488e233ccdc0b5d309c64510d7a622d) ) - ROM_LOAD( "rrf2potu1.u1", 0x80000*5, 0x80000, CRC(e0c6ce3d) SHA1(cc559a2237ccb753cb1397fecba64733455a8c43) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "rrf1wave0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) ) - ROM_LOAD( "rrf1wave1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) ) - ROM_LOAD( "rrf1wave2.10n", 0x100000*1, 0x100000,CRC(4ceeae12) SHA1(ae3a6583f8912bc784c7bc63d32448228cf217ba) ) // differs from normal sets - ROM_LOAD( "rrf1wave3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) ) - - /* this stuff was missing from this version, and shouldn't be the same (bad textures if we use these roms) */ - ROM_REGION( 0x300, "gamma_proms", 0 ) - ROM_LOAD( "rrf1gam.2d", 0x0000, 0x0100, BAD_DUMP CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rrf1gam.3d", 0x0100, 0x0100, BAD_DUMP CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - ROM_LOAD( "rrf1gam.4d", 0x0200, 0x0100, BAD_DUMP CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "rrf1cg0.bin", 0x200000*0x4, 0x200000, BAD_DUMP CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) ) - ROM_LOAD( "rrf1cg1.bin", 0x200000*0x5, 0x200000, BAD_DUMP CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) ) - ROM_LOAD( "rrf1cg2.bin", 0x200000*0x6, 0x200000, BAD_DUMP CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) ) - ROM_LOAD( "rrf1cg3.bin", 0x200000*0x7, 0x200000, BAD_DUMP CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) ) - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "rrf1ccrl.bin",0x000000, 0x200000, BAD_DUMP CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) ) - ROM_LOAD( "rrf1ccrh.bin",0x200000, 0x080000, BAD_DUMP CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) ) -ROM_END - -ROM_START( timecris ) - ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "ts2ver-b.1", 0x00003, 0x100000, CRC(29b377f7) SHA1(21864ba964602115c1268fd5edd8006a13a86cfc) ) - ROM_LOAD32_BYTE( "ts2ver-b.2", 0x00002, 0x100000, CRC(79512e25) SHA1(137a215ec192e76e93511456ad504481a566c9c9) ) - ROM_LOAD32_BYTE( "ts2ver-b.3", 0x00001, 0x100000, CRC(9f4ced33) SHA1(32768b5ff263a9e3d11b7b36f6b2d7e951e07419) ) - ROM_LOAD32_BYTE( "ts2ver-b.4", 0x00000, 0x100000, CRC(3e0cfb38) SHA1(3c56342bd73b1617ea579a0d53e19d59bb04fd99) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */ - ROM_LOAD( "ts1data.8k", 0, 0x080000, CRC(e68aa973) SHA1(663e80d249be5d5841139d98a9d72e2396851272) ) - - ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ - ROM_LOAD( "ts1scg0.12f",0x200000*0, 0x200000,CRC(14a3674d) SHA1(c5792a385572452b43bbc7eb8428335b19daa3c0) ) - ROM_LOAD( "ts1scg1.10f",0x200000*1, 0x200000,CRC(11791dbf) SHA1(3d75b468d69a8bf398d45f310cdb8bc88b63f25c) ) - ROM_LOAD( "ts1scg2.8f", 0x200000*2, 0x200000,CRC(d630fff9) SHA1(691394027b858702f06282f965f5b53e6fed496b) ) - ROM_LOAD( "ts1scg3.7f", 0x200000*3, 0x200000,CRC(1a62f015) SHA1(7d09ae480ae7813391616ae0090929ba845a345a) ) - ROM_LOAD( "ts1scg4.5f", 0x200000*4, 0x200000,CRC(511b8dd6) SHA1(936649c0a61d29f024a28e4ab64cce4b55d58f64) ) - ROM_LOAD( "ts1scg5.3f", 0x200000*5, 0x200000,CRC(553bb246) SHA1(94659bee4fd0afe834a8bf3414d8825411cf9e86) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "ts1cg0.8d", 0x200000*0x0, 0x200000,CRC(de07b22c) SHA1(f4d07b8840ec8be625eff634bce619e960c334a5) ) - ROM_LOAD( "ts1cg1.10d", 0x200000*0x1, 0x200000,CRC(992d26f6) SHA1(a0b9007312804b413d4c1748527378da4d8d53b3) ) - ROM_LOAD( "ts1cg2.12d", 0x200000*0x2, 0x200000,CRC(6273954f) SHA1(d73a43888b53e4c42fc33e8e1b38e60fd3329413) ) - ROM_LOAD( "ts1cg3.13d", 0x200000*0x3, 0x200000,CRC(38171f24) SHA1(d04caaa5b1b377ced38501b014e4cb7fc831c41d) ) - ROM_LOAD( "ts1cg4.14d", 0x200000*0x4, 0x200000,CRC(51f09856) SHA1(0eef421907ee813d5117e62cf0005bf00eb29c88) ) - ROM_LOAD( "ts1cg5.16d", 0x200000*0x5, 0x200000,CRC(4cd9fd79) SHA1(0d2018ec914683a75bdec8655d678fd562eb6d15) ) - ROM_LOAD( "ts1cg6.18d", 0x200000*0x6, 0x200000,CRC(f17f2ec9) SHA1(ed88ec524626e5bbe2e1ea6838412d3ac85671dd) ) - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "ts1ccrl.3d", 0x000000, 0x200000,CRC(56cad2df) SHA1(49c0e57d5cf5d5fc4c75da6969bec01d6d443259) ) - ROM_LOAD( "ts1ccrh.1d", 0x200000, 0x080000,CRC(a1cc3741) SHA1(7fe57924c42e287b134e5d7ad00cffdff1f18084) ) - - ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "ts1ptrl0.18k", 0x80000*0, 0x80000,CRC(e5f2d275) SHA1(2f5057e65ec8a3ec03f841f15f10769ae1f69139) ) - ROM_LOAD( "ts1ptrl1.16k", 0x80000*1, 0x80000,CRC(2bba3800) SHA1(1d9c944cb06417cb0ac47a58b922dddb83387586) ) - ROM_LOAD( "ts1ptrl2.15k", 0x80000*2, 0x80000,CRC(d4441c08) SHA1(6a6bb9cecbf35cb81b7681e220fc33df9a01d07f) ) - ROM_LOAD( "ts1ptrm0.18j", 0x80000*3, 0x80000,CRC(8aea02ba) SHA1(44ba85ba6d59758448d17ec39dfb628882ddc684) ) - ROM_LOAD( "ts1ptrm1.16j", 0x80000*4, 0x80000,CRC(bccf19bc) SHA1(4a6566948bdd2b0f82b7c30e57d3fe65005c26e3) ) - ROM_LOAD( "ts1ptrm2.15j", 0x80000*5, 0x80000,CRC(7280be31) SHA1(476b7171ae855d8bbd968ccbaa55b5100d274e3b) ) - ROM_LOAD( "ts1ptru0.18f", 0x80000*6, 0x80000,CRC(c30d6332) SHA1(a5c59d0abfe38de975fa0d606ed8500eb02008b7) ) - ROM_LOAD( "ts1ptru1.16f", 0x80000*7, 0x80000,CRC(993cde84) SHA1(c9cdcca1d60bcc41ad881c02dda9895563963ead) ) - ROM_LOAD( "ts1ptru2.15f", 0x80000*8, 0x80000,CRC(7cb25c73) SHA1(616eab3ac238864a584394f7ec8736ece227974a) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "ts1wavea.2l", 0x000000, 0x400000, CRC(d1123301) SHA1(4bf1fd746fef4e6befa63c61a761971d729e1573) ) - ROM_LOAD( "ts1waveb.1l", 0x800000, 0x200000, CRC(bf4d7272) SHA1(c7c7b3620e7b3176644b6784ee36e679c9e31cc1) ) -ROM_END - -ROM_START( timecrisa ) - ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_WORD_SWAP( "ts2ver-a.1", 0x00002, 0x200000, CRC(d57eb74b) SHA1(536dd9305d0ac44110c575776333310cc57b5242) ) - ROM_LOAD32_WORD_SWAP( "ts2ver-a.2", 0x00000, 0x200000, CRC(671588af) SHA1(63f992c6795521fd263a0ebf230f8dc88cbfc443) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */ - ROM_LOAD( "ts1data.8k", 0, 0x080000, CRC(e68aa973) SHA1(663e80d249be5d5841139d98a9d72e2396851272) ) - - ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ - ROM_LOAD( "ts1scg0.12f",0x200000*0, 0x200000,CRC(14a3674d) SHA1(c5792a385572452b43bbc7eb8428335b19daa3c0) ) - ROM_LOAD( "ts1scg1.10f",0x200000*1, 0x200000,CRC(11791dbf) SHA1(3d75b468d69a8bf398d45f310cdb8bc88b63f25c) ) - ROM_LOAD( "ts1scg2.8f", 0x200000*2, 0x200000,CRC(d630fff9) SHA1(691394027b858702f06282f965f5b53e6fed496b) ) - ROM_LOAD( "ts1scg3.7f", 0x200000*3, 0x200000,CRC(1a62f015) SHA1(7d09ae480ae7813391616ae0090929ba845a345a) ) - ROM_LOAD( "ts1scg4.5f", 0x200000*4, 0x200000,CRC(511b8dd6) SHA1(936649c0a61d29f024a28e4ab64cce4b55d58f64) ) - ROM_LOAD( "ts1scg5.3f", 0x200000*5, 0x200000,CRC(553bb246) SHA1(94659bee4fd0afe834a8bf3414d8825411cf9e86) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "ts1cg0.8d", 0x200000*0x0, 0x200000,CRC(de07b22c) SHA1(f4d07b8840ec8be625eff634bce619e960c334a5) ) - ROM_LOAD( "ts1cg1.10d", 0x200000*0x1, 0x200000,CRC(992d26f6) SHA1(a0b9007312804b413d4c1748527378da4d8d53b3) ) - ROM_LOAD( "ts1cg2.12d", 0x200000*0x2, 0x200000,CRC(6273954f) SHA1(d73a43888b53e4c42fc33e8e1b38e60fd3329413) ) - ROM_LOAD( "ts1cg3.13d", 0x200000*0x3, 0x200000,CRC(38171f24) SHA1(d04caaa5b1b377ced38501b014e4cb7fc831c41d) ) - ROM_LOAD( "ts1cg4.14d", 0x200000*0x4, 0x200000,CRC(51f09856) SHA1(0eef421907ee813d5117e62cf0005bf00eb29c88) ) - ROM_LOAD( "ts1cg5.16d", 0x200000*0x5, 0x200000,CRC(4cd9fd79) SHA1(0d2018ec914683a75bdec8655d678fd562eb6d15) ) - ROM_LOAD( "ts1cg6.18d", 0x200000*0x6, 0x200000,CRC(f17f2ec9) SHA1(ed88ec524626e5bbe2e1ea6838412d3ac85671dd) ) - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "ts1ccrl.3d", 0x000000, 0x200000,CRC(56cad2df) SHA1(49c0e57d5cf5d5fc4c75da6969bec01d6d443259) ) - ROM_LOAD( "ts1ccrh.1d", 0x200000, 0x080000,CRC(a1cc3741) SHA1(7fe57924c42e287b134e5d7ad00cffdff1f18084) ) - - ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "ts1ptrl0.18k", 0x80000*0, 0x80000,CRC(e5f2d275) SHA1(2f5057e65ec8a3ec03f841f15f10769ae1f69139) ) - ROM_LOAD( "ts1ptrl1.16k", 0x80000*1, 0x80000,CRC(2bba3800) SHA1(1d9c944cb06417cb0ac47a58b922dddb83387586) ) - ROM_LOAD( "ts1ptrl2.15k", 0x80000*2, 0x80000,CRC(d4441c08) SHA1(6a6bb9cecbf35cb81b7681e220fc33df9a01d07f) ) - ROM_LOAD( "ts1ptrm0.18j", 0x80000*3, 0x80000,CRC(8aea02ba) SHA1(44ba85ba6d59758448d17ec39dfb628882ddc684) ) - ROM_LOAD( "ts1ptrm1.16j", 0x80000*4, 0x80000,CRC(bccf19bc) SHA1(4a6566948bdd2b0f82b7c30e57d3fe65005c26e3) ) - ROM_LOAD( "ts1ptrm2.15j", 0x80000*5, 0x80000,CRC(7280be31) SHA1(476b7171ae855d8bbd968ccbaa55b5100d274e3b) ) - ROM_LOAD( "ts1ptru0.18f", 0x80000*6, 0x80000,CRC(c30d6332) SHA1(a5c59d0abfe38de975fa0d606ed8500eb02008b7) ) - ROM_LOAD( "ts1ptru1.16f", 0x80000*7, 0x80000,CRC(993cde84) SHA1(c9cdcca1d60bcc41ad881c02dda9895563963ead) ) - ROM_LOAD( "ts1ptru2.15f", 0x80000*8, 0x80000,CRC(7cb25c73) SHA1(616eab3ac238864a584394f7ec8736ece227974a) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "ts1wavea.2l", 0x000000, 0x400000, CRC(d1123301) SHA1(4bf1fd746fef4e6befa63c61a761971d729e1573) ) - ROM_LOAD( "ts1waveb.1l", 0x800000, 0x200000, CRC(bf4d7272) SHA1(c7c7b3620e7b3176644b6784ee36e679c9e31cc1) ) -ROM_END - -ROM_START( tokyowar ) - ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "tw2ver-a.1", 0x000003, 0x100000, CRC(2b17ca92) SHA1(7bcb1658059c59fb1a0131a41ede7157855130a8) ) - ROM_LOAD32_BYTE( "tw2ver-a.2", 0x000002, 0x100000, CRC(12da84e3) SHA1(a9406d0b77f60ba930c30e60bf4b3656c8905585) ) - ROM_LOAD32_BYTE( "tw2ver-a.3", 0x000001, 0x100000, CRC(7d42c516) SHA1(28c1596dd55c15207bbb41a8b9a5abc97abc2bc8) ) - ROM_LOAD32_BYTE( "tw2ver-a.4", 0x000000, 0x100000, CRC(b904ed16) SHA1(773e11536e1b3fe4971608a63a8e6eca702f8667) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */ - ROM_LOAD( "tw1data.8k", 0x000000, 0x080000, CRC(bd046e4b) SHA1(162bc4ab69959ccab49fd69de291d34d472fb1c8) ) - - ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ - ROM_LOAD( "tw1scg0.12f", 0x000000, 0x200000, CRC(e3ec4daa) SHA1(f3a71ae9820d62075b814ffa2fecf3343ae09ffe) ) - ROM_LOAD( "tw1scg1.10f", 0x200000, 0x200000, CRC(b18a06e9) SHA1(ecf6a1e11603b8ea5119a036a57595dea021d778) ) - ROM_LOAD( "tw1scg2.8f", 0x400000, 0x200000, CRC(36f8c3d8) SHA1(d5c965d5cdd258c77b9db3137ce33404a5a3641c) ) - ROM_LOAD( "tw1scg3.7f", 0x600000, 0x200000, CRC(8e14d013) SHA1(ca63105a5c07bb9653499eef7a757db52612b59b) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "tw1cg0.8d", 0x000000, 0x200000, CRC(98b9b070) SHA1(cb920a34700dab330c967cc634717134c04b7e1d) ) - ROM_LOAD( "tw1cg1.10d", 0x200000, 0x200000, CRC(f96a723a) SHA1(5ba14963a4c51c875ac8d3b42049bc334de90038) ) - ROM_LOAD( "tw1cg2.12d", 0x400000, 0x200000, CRC(573e9ded) SHA1(815bda1ac000532c915c2d65ffdb04fee6fa8201) ) - ROM_LOAD( "tw1cg3.13d", 0x600000, 0x200000, CRC(302d5c74) SHA1(5a823f6842cf0f79eb93da47d5bf8c5f51e420db) ) - ROM_LOAD( "tw1cg4.14d", 0x800000, 0x200000, CRC(ab8aa1df) SHA1(355192d999f493e0761fbc822fa9b30c33d8e1c4) ) - ROM_LOAD( "tw1cg5.16d", 0xa00000, 0x200000, CRC(5063f3d0) SHA1(ad8dd2f4184373a3a3ca748b411a5eec1835dc97) ) - ROM_LOAD( "tw1cg6.18d", 0xc00000, 0x200000, CRC(d764027c) SHA1(5cbf93392683885c220628936ba50c09cb40fcfb) ) - ROM_LOAD( "tw1cg7.19d", 0xe00000, 0x200000, CRC(12da0a43) SHA1(99287348a5219146bcd3e61fde3f2bc26b0c5a25) ) - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "tw1ccrl.3d", 0x000000, 0x200000, CRC(d08f5794) SHA1(336a97a2b060505e259e3bcedb9eb8aa4ea8815e) ) - ROM_LOAD( "tw1ccrh.1d", 0x200000, 0x080000, CRC(ad17e693) SHA1(4f06dc82c03159894fb8e10383862920f94563b1) ) - - ROM_REGION( 0x600000, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "tw1ptrl0.18k", 0x000000, 0x080000, CRC(44ac5e86) SHA1(5e42db58f2e352c0fe5e49588a9283817dd15ab1) ) - ROM_LOAD( "tw1ptrl1.16k", 0x080000, 0x080000, CRC(3c769860) SHA1(19b32c3d262f2a9d07354fbd6ac6be97b05f176e) ) - ROM_LOAD( "tw1ptrl2.15k", 0x100000, 0x080000, CRC(6e94103c) SHA1(ee90b77939a9f5780ce271882133cdf977eb643e) ) - ROM_LOAD( "tw1ptrl3.14k", 0x180000, 0x080000, CRC(e3ce5eb2) SHA1(4e15a6f630be15eb017cd51c5e7901db3138a061) ) - ROM_LOAD( "tw1ptrm0.18j", 0x200000, 0x080000, CRC(e170cea2) SHA1(ca259508d76fdab97a9d0502f871f0e560e6c308) ) - ROM_LOAD( "tw1ptrm1.16j", 0x280000, 0x080000, CRC(36a32237) SHA1(f46851dc5c094810ddc42d56310a9f85908bf715) ) - ROM_LOAD( "tw1ptrm2.15j", 0x300000, 0x080000, CRC(c426c278) SHA1(64232ac3c1649e0d0adb4b03e58b8b5ea4013f83) ) - ROM_LOAD( "tw1ptrm3.14j", 0x380000, 0x080000, CRC(d9b9a651) SHA1(0c49a051526081149d894d629f19cb0f2b66a698) ) - ROM_LOAD( "tw1ptru0.18f", 0x400000, 0x080000, CRC(62a9e9fb) SHA1(24739adba029b0acf2d7078962c9d01098a29a6c) ) - ROM_LOAD( "tw1ptru1.16f", 0x480000, 0x080000, CRC(2fd36177) SHA1(368b915261d914be01ae9daeb52571bead52d14d) ) - ROM_LOAD( "tw1ptru2.15f", 0x500000, 0x080000, CRC(ceacb1c9) SHA1(b86cf576e16bbe26ad0d6d6df8bf28d0071c25e2) ) - ROM_LOAD( "tw1ptru3.14f", 0x580000, 0x080000, CRC(939044c2) SHA1(f4c1c0a1c2f07ca7f784d59ef4162a2a6a8bbc43) ) - - ROM_REGION( 0x1000000, "c352", 0 ) // Samples - ROM_LOAD( "tw1wavea.2l", 0x000000, 0x400000, CRC(ebce6366) SHA1(44ebe90ff3c7af5bebbf1baba3b7a2b1863daebb) ) - - ROM_REGION( 0x4000, "nvram", 0 ) // default eeprom - ROM_LOAD( "tokyowar_defaults.nv", 0x0000, 0x4000, CRC(a1fe05e4) SHA1(39a20b35394a43e12c66a6c0f5ecb204148c58de) ) -ROM_END - -ROM_START( dirtdash ) - ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_WORD_SWAP( "dt2vera.1", 0x000002, 0x200000, CRC(402a3d73) SHA1(009b57ed0ea228ccedb139d945b9eaf2a36e2502) ) - ROM_LOAD32_WORD_SWAP( "dt2vera.2", 0x000000, 0x200000, CRC(66ed140d) SHA1(a472fdc7b6aaeb4b3643ecdafd32fa665e7c7aa2) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */ - ROM_LOAD( "dt1dataa.8k", 0x000000, 0x080000, CRC(9bcdea21) SHA1(26ae025cf746d3a703a82495eb2bb515b828a650) ) - - ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ - ROM_LOAD( "dt1scg0.12f", 0x000000, 0x200000, CRC(a09b5760) SHA1(3dd54ebebf9da1de76874a1adf491ed15849e1b1) ) - ROM_LOAD( "dt1scg1.10f", 0x200000, 0x200000, CRC(f9ac8111) SHA1(814074ae8cc81c6c1201d764a84dd95fe914f19c) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "dt1cg0.8d", 0x000000, 0x200000, CRC(10ab95e0) SHA1(ffde1f00ac3e82a36fbcfa060c6b97c92dfcfc8b) ) - ROM_LOAD( "dt1cg1.10d", 0x200000, 0x200000, CRC(d9f1ba53) SHA1(5a1095b726c55001cc1d4c695adc38097e6a0201) ) - ROM_LOAD( "dt1cg2.12d", 0x400000, 0x200000, CRC(bd8b1e0b) SHA1(fcd94e33a0cbd17c9308cb8952e3c618ab56f9fc) ) - ROM_LOAD( "dt1cg3.13d", 0x600000, 0x200000, CRC(ba960663) SHA1(e98149bc4652ea7933ac47d760a6f7e6489f15e2) ) - ROM_LOAD( "dt1cg4.14d", 0x800000, 0x200000, CRC(424b9652) SHA1(fa8865110db03559740c4e633e123d1a009782c4) ) - ROM_LOAD( "dt1cg5.16d", 0xa00000, 0x200000, CRC(29516626) SHA1(1f12c5dc3975b88dc60d87d0409bf311837e9fa4) ) - ROM_LOAD( "dt1cg6.18d", 0xc00000, 0x200000, CRC(e6fa7180) SHA1(85316cde282cff1f913cf9f155cfa36adcc1108e) ) - ROM_LOAD( "dt1cg7.19d", 0xe00000, 0x200000, CRC(2ca19153) SHA1(c82403c8b40bf85daedf610b1bc7bfea9dfc6206) ) - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "dt1ccrl.3d", 0x000000, 0x200000, CRC(e536b313) SHA1(7357da993d2bb3fcc8c1c2feb53689ad368cd80a) ) - ROM_LOAD( "dt1ccrh.1d", 0x200000, 0x080000, CRC(af257064) SHA1(0da561d9f8824618c00209ccef6146e9f3ad72bb) ) - - ROM_REGION( 0x480000, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "dt1ptrl0.18k", 0x000000, 0x080000, CRC(4e0cac3a) SHA1(c2778e9e93be2de729c6f118caf62ac9f48efbb0) ) - ROM_LOAD( "dt1ptrl1.16k", 0x080000, 0x080000, CRC(59ba9dba) SHA1(a2e9488cf0ff255284c06a1ef653ae86c0d98adc) ) - ROM_LOAD( "dt1ptrl2.15k", 0x100000, 0x080000, CRC(cfe80c67) SHA1(ba3bc48aa39712e63c915070a76974fbd560dee6) ) - ROM_LOAD( "dt1ptrm0.18j", 0x180000, 0x080000, CRC(41f34337) SHA1(7e624e7b6fdefe156168b1c9cc5e919db3b2fbaa) ) - ROM_LOAD( "dt1ptrm1.16j", 0x200000, 0x080000, CRC(d68541fc) SHA1(6b00079bd8f2db26e71968de289cea93458aebe9) ) - ROM_LOAD( "dt1ptrm2.15j", 0x280000, 0x080000, CRC(71e6714d) SHA1(6aad6db3be5020213d7add61c7d927ae9c4fea4e) ) - ROM_LOAD( "dt1ptru0.18f", 0x300000, 0x080000, CRC(4909bd7d) SHA1(0e4ef3987c43ef0438331b82b50dcc97363a45d0) ) - ROM_LOAD( "dt1ptru1.16f", 0x380000, 0x080000, CRC(4a5097df) SHA1(a9c814b0ed4bd92accd0e57be8e3d887114b06a5) ) - ROM_LOAD( "dt1ptru2.15f", 0x400000, 0x080000, CRC(1171eaf5) SHA1(168365ea619386f218585c49025cdd7fd1224082) ) - - ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */ - ROM_LOAD( "dt1wavea.2l", 0x000000, 0x400000, CRC(cbd52e40) SHA1(dc995dd919548c96a90efb0375e5b5f1055e05cb) ) - ROM_LOAD( "dt1waveb.1l", 0x800000, 0x400000, CRC(6b736f94) SHA1(ac3715480aa9a9c2dec099607f89859bb3b73a6a) ) -ROM_END - -ROM_START( aquajet ) - ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "aj2ver-b.1", 0x000003, 0x100000, CRC(3a67b9f4) SHA1(8cd51f319e082297fdb99634486fe297a0ace654) ) - ROM_LOAD32_BYTE( "aj2ver-b.2", 0x000002, 0x100000, CRC(f5e8fc96) SHA1(e23fcf6f84724d1de15870ff578ff8a6b26e8f31) ) - ROM_LOAD32_BYTE( "aj2ver-b.3", 0x000001, 0x100000, CRC(ef6ebcf7) SHA1(358973b678b9a3065e945fb589af16e8102d437b) ) - ROM_LOAD32_BYTE( "aj2ver-b.4", 0x000000, 0x100000, CRC(7799b909) SHA1(e40005f96f51742b2778605926b8184c9b2c1ad2) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */ - ROM_LOAD( "aj1data.8k", 0x000000, 0x080000, CRC(52bcc6d5) SHA1(25319ea6db35cc9bdcb39cc83d597a2a9f1690f3) ) - - ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ - ROM_LOAD( "aj1scg0.12f", 0x000000, 0x200000, CRC(13ea766c) SHA1(a1a259bd8f468b90cbc891f1c2875fe03bba9802) ) - ROM_LOAD( "aj1scg1.10f", 0x200000, 0x200000, CRC(cb3638de) SHA1(0af99aaf00782036d7f479b00b0c3d9d7ad4fc37) ) - ROM_LOAD( "aj1scg2.8f", 0x400000, 0x200000, CRC(1048a09b) SHA1(6859533e24db5ac54e28d480aaac7b411a648dfe) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "aj1cg0.8d", 0x000000, 0x200000, CRC(b814e1eb) SHA1(1af29897dcfd0a58743b4fcdd5049d9e6e3d4cbd) ) - ROM_LOAD( "aj1cg1.10d", 0x200000, 0x200000, CRC(dc63d496) SHA1(d3c3eea6b134850004062dd513c0f26096101227) ) - ROM_LOAD( "aj1cg2.12d", 0x400000, 0x200000, CRC(71fbb571) SHA1(40f84ab5a4a7bb4438fb53751762609671d17800) ) - ROM_LOAD( "aj1cg3.13d", 0x600000, 0x200000, CRC(e28052e2) SHA1(3dbc446d7a13312ed4c1d20c2e1209947853f2c4) ) - ROM_LOAD( "aj1cg4.14d", 0x800000, 0x200000, CRC(c77ae1a0) SHA1(e15f2ccbadb8634f6e5cfd2cf48f428d68bd92e1) ) - ROM_LOAD( "aj1cg5.16d", 0xa00000, 0x200000, CRC(15be0080) SHA1(ca14dfd2a66996f0b32fa1155c04f21d300e8f30) ) - ROM_LOAD( "aj1cg6.18d", 0xc00000, 0x200000, CRC(1a4f733a) SHA1(60a991f06e73667fa2c9016189999c4301cba24f) ) - ROM_LOAD( "aj1cg7.19d", 0xe00000, 0x200000, CRC(ea118130) SHA1(24ef22e5c8c6f6e8a01c72466be1e7acbfba63bc) ) - - ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "aj1ccrl.3d", 0x000000, 0x200000, CRC(3cc7a247) SHA1(336e4dd506d932987e20a5890dd3b0db75c02ccf) ) - ROM_LOAD( "aj1ccrh.1d", 0x200000, 0x080000, CRC(9d936030) SHA1(a383bcca494a9f8d9a08fbe9940c8071d4525d65) ) - - ROM_REGION( 0x600000, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "aj1ptrl0.18k", 0x000000, 0x080000, CRC(16205d45) SHA1(7e9681af852e2e875f80cbbe350e4982eaf80884) ) - ROM_LOAD( "aj1ptrl1.16k", 0x080000, 0x080000, CRC(6f114da7) SHA1(a1e7349ef8eb0ef043fce06f88bfbb76c2967393) ) - ROM_LOAD( "aj1ptrl2.15k", 0x100000, 0x080000, CRC(719b73f0) SHA1(bf8530a706097ae663769090177f1f259c540aa6) ) - ROM_LOAD( "aj1ptrl3.14k", 0x180000, 0x080000, CRC(9555fe31) SHA1(03bdd0784817191b3600d643b775191181a21706) ) - ROM_LOAD( "aj1ptrm0.18j", 0x200000, 0x080000, CRC(89bee2e0) SHA1(d84b06ef1318814fcf4782fef09a85ae1a87beb8) ) - ROM_LOAD( "aj1ptrm1.16j", 0x280000, 0x080000, CRC(0ecf88c7) SHA1(20b7cb09a6a13599cac024ef19c73612ce2952f6) ) - ROM_LOAD( "aj1ptrm2.15j", 0x300000, 0x080000, CRC(829bc7ba) SHA1(7104d66a027911e38ecf521f01ff098ccb76d5fb) ) - ROM_LOAD( "aj1ptrm3.14j", 0x380000, 0x080000, CRC(7d0a222a) SHA1(e78c405d00429580015c6c7d1bcd35393317a769) ) - ROM_LOAD( "aj1ptru0.18f", 0x400000, 0x080000, CRC(90d4e36a) SHA1(bdc44aac6aef5266d289f03c816aa2abdb263e9b) ) - ROM_LOAD( "aj1ptru1.16f", 0x480000, 0x080000, CRC(bf0cf4bf) SHA1(bbf06c7605c083d2fb8c72528c5c9d3b8b067073) ) - ROM_LOAD( "aj1ptru2.15f", 0x500000, 0x080000, CRC(91ffbb77) SHA1(fbfe7d32ef22037f7190d1b8263b5e8c55f2d892) ) - ROM_LOAD( "aj1ptru3.14f", 0x580000, 0x080000, CRC(d83d8d42) SHA1(e1561ce4538b01db92b7e645ad008cd1a2ddaf8a) ) - - ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */ - ROM_LOAD( "aj1wavea.2l", 0x000000, 0x400000, CRC(8c72ea59) SHA1(3ae8dbd8baae08f1daab2b218932ba9d9451231d) ) - ROM_LOAD( "aj1waveb.1l", 0x800000, 0x400000, CRC(ab5a457f) SHA1(c34531fd574eb0c3e78fc31a9af8658df3446adc) ) - - ROM_REGION( 0x4000, "nvram", 0 ) // default eeprom - ROM_LOAD( "aquajet_defaults.nv", 0x0000, 0x4000, CRC(7d03893c) SHA1(f75ca5d996a94da4136ed0a4f0f4c869f1412e38) ) -ROM_END - -ROM_START( adillor ) - ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ - ROM_LOAD32_BYTE( "am1vera.rom1", 0x000003, 0x100000, CRC(e99157f9) SHA1(7a200f3b5890f5badbf529a8c8ac6a8548adb801) ) - ROM_LOAD32_BYTE( "am1vera.rom2", 0x000002, 0x100000, CRC(b63d79b0) SHA1(c83251727b2973f5b9dc2eea23b51b1275bd88ed) ) - ROM_LOAD32_BYTE( "am1vera.rom3", 0x000001, 0x100000, CRC(af0983bc) SHA1(136d2e14485864e20d7a6947d640577b8a85243c) ) - ROM_LOAD32_BYTE( "am1vera.rom4", 0x000000, 0x100000, CRC(4424047f) SHA1(d0ca736c085db58d33b603813b7a54c8ce995bac) ) - - ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ - ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) - - ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */ - ROM_LOAD( "am1data.8k", 0x000000, 0x080000, CRC(3c176589) SHA1(fabf8debfa118893449f6086986fd1aa012daf27) ) - - ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ - ROM_LOAD( "am1scg0.12f", 0x000000, 0x200000, CRC(e576f993) SHA1(704645c2b2af4d3f6b77f2299cd7277837e204d2) ) - ROM_LOAD( "am1scg1.10f", 0x200000, 0x200000, CRC(d6d26cc1) SHA1(1da35ec2f89cfc5778d81b6a892fcf100d6e9933) ) - ROM_LOAD( "am1scg0.12l", 0x000000, 0x200000, CRC(e576f993) SHA1(704645c2b2af4d3f6b77f2299cd7277837e204d2) ) - ROM_LOAD( "am1scg1.10l", 0x200000, 0x200000, CRC(d6d26cc1) SHA1(1da35ec2f89cfc5778d81b6a892fcf100d6e9933) ) - - ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ - ROM_LOAD( "am1cg0.8d", 0x000000, 0x200000, CRC(b91e4259) SHA1(3de7fee2be9843ef6a8718f9dcbc3aeb1fb23b64) ) - ROM_LOAD( "am1cg1.10d", 0x200000, 0x200000, CRC(c1b82a26) SHA1(25dc3cdf5fe18de89e6d7304ff76b6157aba2cd6) ) - ROM_LOAD( "am1cg2.12d", 0x400000, 0x200000, CRC(36a7d3fd) SHA1(f07bb746f775d1eb70c4b6a65e6002d2136cfe4d) ) - ROM_LOAD( "am1cg3.13d", 0x600000, 0x200000, CRC(8b0857ef) SHA1(1c86db318d7bb7bc303ba65a9db493b033035d7b) ) - ROM_LOAD( "am1cg3.14d", 0x800000, 0x200000, CRC(ebc516fe) SHA1(585554f14cfdf69a89a6431867b7cfc1a9eae379) ) - ROM_LOAD( "am1cg5.16d", 0xa00000, 0x200000, CRC(30fad30d) SHA1(bb0d9e2b479d83cc38ffd76d0d55f06dca0f304a) ) - ROM_LOAD( "am1cg6.18d", 0xc00000, 0x200000, CRC(62eea883) SHA1(37e441bb1289e45ef3043f70f77646c15b6dff0e) ) - ROM_LOAD( "am1cg7.19d", 0xe00000, 0x200000, CRC(2d257f47) SHA1(6406556b4b142b6c596eb25f407275a63f6a44f1) ) - ROM_LOAD( "am1cg0.12b", 0x000000, 0x200000, CRC(b91e4259) SHA1(3de7fee2be9843ef6a8718f9dcbc3aeb1fb23b64) ) - ROM_LOAD( "am1cg1.13b", 0x200000, 0x200000, CRC(c1b82a26) SHA1(25dc3cdf5fe18de89e6d7304ff76b6157aba2cd6) ) - ROM_LOAD( "am1cg2.14b", 0x400000, 0x200000, CRC(36a7d3fd) SHA1(f07bb746f775d1eb70c4b6a65e6002d2136cfe4d) ) - ROM_LOAD( "am1cg3.16b", 0x600000, 0x200000, CRC(8b0857ef) SHA1(1c86db318d7bb7bc303ba65a9db493b033035d7b) ) - ROM_LOAD( "am1cg3.18b", 0x800000, 0x200000, CRC(ebc516fe) SHA1(585554f14cfdf69a89a6431867b7cfc1a9eae379) ) - ROM_LOAD( "am1cg5.19b", 0xa00000, 0x200000, CRC(30fad30d) SHA1(bb0d9e2b479d83cc38ffd76d0d55f06dca0f304a) ) - ROM_LOAD( "am1cg6.18a", 0xc00000, 0x200000, CRC(62eea883) SHA1(37e441bb1289e45ef3043f70f77646c15b6dff0e) ) - ROM_LOAD( "am1cg7.15a", 0xe00000, 0x200000, CRC(2d257f47) SHA1(6406556b4b142b6c596eb25f407275a63f6a44f1) ) - - ROM_REGION16_LE( 0x300000, "textilemap", 0 ) /* texture tilemap */ - ROM_LOAD( "am1ccrl.3d", 0x000000, 0x200000, CRC(76c6d5f3) SHA1(637efe30d004a9c42864b7536e02e9805ed9b6ef) ) - ROM_LOAD( "am1ccrh.1d", 0x200000, 0x080000, CRC(180c4a33) SHA1(5e0818ba8a135c51953bc3bc5c4a1475f7f93eff) ) - ROM_LOAD( "am1ccrl.7b", 0x000000, 0x200000, CRC(76c6d5f3) SHA1(637efe30d004a9c42864b7536e02e9805ed9b6ef) ) - ROM_LOAD( "am1ccrh.5b", 0x200000, 0x080000, CRC(180c4a33) SHA1(5e0818ba8a135c51953bc3bc5c4a1475f7f93eff) ) - - ROM_REGION( 0x600000, "pointrom", 0 ) /* 3d model data */ - ROM_LOAD( "am1ptrl0.18k", 0x000000, 0x080000, CRC(6fdb34f6) SHA1(5dc7359eef0dbe6d421808eefd3920159ce34944) ) - ROM_LOAD( "am1ptrl1.16k", 0x080000, 0x080000, CRC(32e40601) SHA1(161b148aae688e944cfe456d9bca1ca7139812e1) ) - ROM_LOAD( "am1ptrl2.15k", 0x100000, 0x080000, CRC(e27e29cc) SHA1(3a2b0d18d23b2ace6fe1c6c4dbcc73cb74acd189) ) - ROM_LOAD( "am1ptrl3.14k", 0x180000, 0x080000, CRC(0c638e3e) SHA1(2cd68e6aa04a9235f792fad0913314545ab70e71) ) - ROM_LOAD( "am1ptrm0.18j", 0x200000, 0x080000, CRC(e676cd98) SHA1(f7b31c848bc2afc31f3ad53d9eda7daae5f28865) ) - ROM_LOAD( "am1ptrm1.16j", 0x280000, 0x080000, CRC(eb115d9d) SHA1(165cb13a3d0f2982c35ae5e6e796de48cf2b5846) ) - ROM_LOAD( "am1ptrm2.15j", 0x300000, 0x080000, CRC(86b4ed0c) SHA1(d97f2b26cc3981b4b337029723c5ddec9316628f) ) - ROM_LOAD( "am1ptrm3.14j", 0x380000, 0x080000, CRC(97c1c6b0) SHA1(84e5f982f50560debd6f1f4d3d96f58888616529) ) - ROM_LOAD( "am1ptru0.18f", 0x400000, 0x080000, CRC(6a3fd855) SHA1(c6d2029e676426c4e71d9cfddbac7ecdec81c4da) ) - ROM_LOAD( "am1ptru1.16f", 0x480000, 0x080000, CRC(551bf714) SHA1(4af1e65ad1e42a95accafb57422fc276743f408a) ) - ROM_LOAD( "am1ptru2.15f", 0x500000, 0x080000, CRC(ce790635) SHA1(fb49646a9b35ee7cb3ace59a7f0932a08c393052) ) - ROM_LOAD( "am1ptru3.14f", 0x580000, 0x080000, CRC(5e4e6333) SHA1(5897251e4694c5c24f1810ff6f9177a0456baf2e) ) - - ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */ - ROM_LOAD( "am1wavea.2l", 0x000000, 0x400000, CRC(48f8c20c) SHA1(48b4fbcb7e9dbbb70a542ef7cb7ee0e46fad23fc) ) - ROM_LOAD( "am1waveb.1l", 0x800000, 0x400000, CRC(fd8e7384) SHA1(91e53ab0293f81f8357645fd319249abc128b78e) ) - - ROM_REGION( 0x4000, "nvram", ROMREGION_ERASE00 ) // default eeprom -ROM_END - -/*******************************************************************/ +// Super System 22 +static ADDRESS_MAP_START( namcos22s_am, AS_PROGRAM, 32, namcos22_state ) + AM_RANGE(0x000000, 0x3fffff) AM_ROM + AM_RANGE(0x400000, 0x40001f) AM_READWRITE(namcos22_keycus_r, namcos22_keycus_w) + AM_RANGE(0x410000, 0x413fff) AM_RAM /* C139 SCI buffer */ + AM_RANGE(0x420000, 0x42000f) AM_READ(namcos22_sci_r) AM_WRITEONLY /* C139 SCI registers */ + AM_RANGE(0x440000, 0x440003) AM_READWRITE16(namcos22_dipswitch_r, namcos22_cpuleds_w, 0xffffffff) + AM_RANGE(0x450008, 0x45000b) AM_READWRITE16(namcos22_portbit_r, namcos22_portbit_w, 0xffffffff) + AM_RANGE(0x460000, 0x463fff) AM_RAM_WRITE(namcos22s_nvmem_w) AM_SHARE("nvmem") + AM_RANGE(0x700000, 0x70001f) AM_READWRITE8(namcos22_system_controller_r, namcos22s_system_controller_w, 0xffffffff) + AM_RANGE(0x800000, 0x800003) AM_WRITE(namcos22s_chipselect_w) + AM_RANGE(0x810000, 0x81000f) AM_RAM AM_SHARE("czattr") + AM_RANGE(0x810200, 0x8103ff) AM_READWRITE(namcos22s_czram_r, namcos22s_czram_w) + AM_RANGE(0x820000, 0x8202ff) AM_WRITENOP /* leftover of old (non-super) video mixer device */ + AM_RANGE(0x824000, 0x8243ff) AM_RAM AM_SHARE("video_mixer") + AM_RANGE(0x828000, 0x83ffff) AM_RAM_WRITE(namcos22_paletteram_w) AM_SHARE("paletteram") + AM_RANGE(0x860000, 0x860007) AM_READWRITE(namcos22s_spotram_r, namcos22s_spotram_w) + AM_RANGE(0x880000, 0x89dfff) AM_RAM_WRITE(namcos22_cgram_w) AM_SHARE("cgram") + AM_RANGE(0x89e000, 0x89ffff) AM_RAM_WRITE(namcos22_textram_w) AM_SHARE("textram") + AM_RANGE(0x8a0000, 0x8a000f) AM_READWRITE(namcos22_tilemapattr_r, namcos22_tilemapattr_w) AM_SHARE("tilemapattr") + AM_RANGE(0x900000, 0x90ffff) AM_RAM AM_SHARE("vics_data") + AM_RANGE(0x940000, 0x94007f) AM_READWRITE(namcos22s_vics_control_r, namcos22s_vics_control_w) AM_SHARE("vics_control") + AM_RANGE(0x980000, 0x9affff) AM_RAM AM_SHARE("spriteram") /* C374 */ + AM_RANGE(0xa04000, 0xa0bfff) AM_RAM AM_SHARE("shareram") /* COM RAM */ + AM_RANGE(0xc00000, 0xc1ffff) AM_READWRITE(namcos22_dspram_r, namcos22_dspram_w) AM_SHARE("polygonram") + AM_RANGE(0xe00000, 0xe3ffff) AM_RAM /* workram */ +ADDRESS_MAP_END + + +// Time Crisis gun +READ32_MEMBER(namcos22_state::namcos22_gun_r) +{ + UINT16 xpos = ioport("LIGHTX")->read(); + UINT16 ypos = ioport("LIGHTY")->read(); + // ypos is not completely understood yet, there should be a difference between case 1 and 2 + + switch (offset) + { + case 0: /* 430000 */ + return xpos << 16; + + case 1: /* 430004 */ + case 2: /* 430008 */ + return ypos << 16; + + default: + return 0; + } +} + +static ADDRESS_MAP_START( timecris_am, AS_PROGRAM, 32, namcos22_state ) + AM_RANGE(0x430000, 0x43000f) AM_READ(namcos22_gun_r) + AM_IMPORT_FROM( namcos22s_am ) +ADDRESS_MAP_END + + +// Alpine Surfer protection +READ32_MEMBER(namcos22_state::alpinesa_prot_r) +{ + return m_alpinesa_protection; +} + +WRITE32_MEMBER(namcos22_state::alpinesa_prot_w) +{ + switch (data) + { + case 0: + m_alpinesa_protection = 0; + break; + + case 1: + m_alpinesa_protection = 1; + break; + + case 3: + m_alpinesa_protection = 2; + break; + + default: + break; + } +} + +static ADDRESS_MAP_START( alpinesa_am, AS_PROGRAM, 32, namcos22_state ) + AM_RANGE(0x200000, 0x200003) AM_READ(alpinesa_prot_r) + AM_RANGE(0x300000, 0x300003) AM_WRITE(alpinesa_prot_w) + AM_IMPORT_FROM( namcos22s_am ) +ADDRESS_MAP_END + + + +/*********************************************************************************************/ + +// DSPs + +void namcos22_state::enable_slave_simulation(bool enable) +{ + m_slave_simulation_active = enable; +} + +void namcos22_state::slave_halt() +{ + m_slave->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + enable_slave_simulation(false); +} + +void namcos22_state::slave_enable() +{ +// m_slave->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); + enable_slave_simulation(true); +} + + +READ16_MEMBER(namcos22_state::namcos22_dspram16_r) +{ + UINT32 value = m_polygonram[offset]; + + switch (m_dspram_bank) + { + case 0: + value &= 0xffff; + break; + + case 1: + value >>= 16; + break; + + case 2: + m_dspram16_latch = value >> 16; + value &= 0xffff; + break; + + default: + break; + } + + return (UINT16)value; +} + +WRITE16_MEMBER(namcos22_state::namcos22_dspram16_w) +{ + UINT32 value = m_polygonram[offset]; + UINT16 lo = value & 0xffff; + UINT16 hi = value >> 16; + + switch (m_dspram_bank) + { + case 0: + COMBINE_DATA(&lo); + break; + + case 1: + COMBINE_DATA(&hi); + break; + + case 2: + COMBINE_DATA(&lo); + hi = m_dspram16_latch; + break; + + default: + break; + } + + m_polygonram[offset] = (hi << 16) | lo; +} + +WRITE16_MEMBER(namcos22_state::namcos22_dspram16_bank_w) +{ + COMBINE_DATA(&m_dspram_bank); +} + + +void namcos22_state::point_write(offs_t offs, UINT32 data) +{ + offs &= 0x00ffffff; /* 24 bit addressing */ + if (m_is_ss22) + { + if (offs >= 0xf80000 && offs < 0xfa0000) + m_pointram[offs - 0xf80000] = data & 0x00ffffff; + } + else + { + if (offs >= 0xf00000 && offs < 0xf20000) + m_pointram[offs - 0xf00000] = data & 0x00ffffff; + } +} + +INT32 namcos22_state::point_read(INT32 addr) +{ + if (addr < 0) + return -1; + + // point rom + else if (addr < m_pointrom_size) + return m_pointrom[addr]; + + // point ram, only used in ram test? + INT32 result = 0; + if (m_is_ss22) + { + if (addr >= 0xf80000 && addr < 0xfa0000) + result = m_pointram[addr - 0xf80000]; + else return -1; + } + else + { + if (addr >= 0xf00000 && addr < 0xf20000) + result = m_pointram[addr - 0xf00000]; + else return -1; + } + + // sign extend or crop + return signed24(result); +} + + +WRITE16_MEMBER(namcos22_state::point_address_w) +{ + m_point_address <<= 16; + m_point_address |= data; +} + +WRITE16_MEMBER(namcos22_state::point_loword_iw) +{ + m_point_data |= data; + point_write(m_point_address++, m_point_data); +} + +WRITE16_MEMBER(namcos22_state::point_hiword_w) +{ + m_point_data = data << 16; +} + +READ16_MEMBER(namcos22_state::point_loword_r) +{ + return point_read(m_point_address & 0x00ffffff) & 0xffff; +} + +READ16_MEMBER(namcos22_state::point_hiword_ir) +{ + return point_read(m_point_address++ & 0x00ffffff) >> 16 & 0xffff; +} + + +READ16_MEMBER(namcos22_state::pdp_status_r) +{ + return m_dsp_master_bioz; +} + +UINT32 namcos22_state::pdp_polygonram_read(offs_t offs) +{ + return m_polygonram[offs & 0x7fff]; +} + +void namcos22_state::pdp_polygonram_write(offs_t offs, UINT32 data) +{ + m_polygonram[offs & 0x7fff] = data; +} + +READ16_MEMBER(namcos22_state::pdp_begin_r) +{ + /* this feature appears to be only used on Super System22 hardware */ + if (m_is_ss22) + { + UINT16 offs = pdp_polygonram_read(0x7fff); + m_dsp_master_bioz = 1; + for (;;) + { + UINT16 start = offs; + UINT16 cmd = pdp_polygonram_read(offs++); + UINT32 srcAddr; + UINT32 dstAddr; + UINT32 numWords; + UINT32 data; + switch (cmd) + { + case 0xfff0: + /* NOP? used in 'PDP LOOP TEST' */ + break; + + case 0xfff5: + /* write to point ram */ + dstAddr = pdp_polygonram_read(offs++); /* 32 bit PointRAM address */ + data = pdp_polygonram_read(offs++); /* 24 bit data */ + point_write(dstAddr, data); + break; + + case 0xfff6: + /* read word from point ram */ + srcAddr = pdp_polygonram_read(offs++); /* 32 bit PointRAM address */ + dstAddr = pdp_polygonram_read(offs++); /* CommRAM address; receives 24 bit PointRAM data */ + data = point_read(srcAddr & 0x00ffffff); + pdp_polygonram_write(dstAddr, data); + break; + + case 0xfff7: + /* block move (CommRAM to CommRAM) */ + srcAddr = pdp_polygonram_read(offs++); + dstAddr = pdp_polygonram_read(offs++); + numWords = pdp_polygonram_read(offs++); + while (numWords--) + { + data = pdp_polygonram_read(srcAddr++); + pdp_polygonram_write(dstAddr++, data); + } + break; + + case 0xfffa: + /* read block from point ram */ + srcAddr = pdp_polygonram_read(offs++); /* 32 bit PointRAM address */ + dstAddr = pdp_polygonram_read(offs++); /* CommRAM address; receives data */ + numWords = pdp_polygonram_read(offs++); /* block size */ + while (numWords--) + { + data = point_read(srcAddr++ & 0x00ffffff); + pdp_polygonram_write(dstAddr++, data); + } + break; + + case 0xfffb: + /* write block to point ram */ + dstAddr = pdp_polygonram_read(offs++); /* 32 bit PointRAM address */ + numWords = pdp_polygonram_read(offs++); /* block size */ + while (numWords--) + { + data = pdp_polygonram_read(offs++); /* 24 bit source data */ + point_write(dstAddr++, data); + } + break; + + case 0xfffc: + /* point ram to point ram */ + srcAddr = pdp_polygonram_read(offs++); + dstAddr = pdp_polygonram_read(offs++); + numWords = pdp_polygonram_read(offs++); + while (numWords--) + { + data = point_read(srcAddr++ & 0x00ffffff); + point_write(dstAddr++, data); + } + break; + + case 0xfffd: + /* direct command to render device */ + // len -> command (eg. BB0003) -> data + numWords = pdp_polygonram_read(offs++); + while (numWords--) + { + data = pdp_polygonram_read(offs++); + //namcos22_WriteDataToRenderDevice(data); + } + break; + + case 0xfffe: + /* unknown */ + data = pdp_polygonram_read(offs++); /* ??? (usually 0x400 or 0) */ + break; + + case 0xffff: + /* "goto" command */ + offs = pdp_polygonram_read(offs); + if (offs == start) + { + /* most commands end with a "goto self" */ + return 0; + } + break; + + default: + logerror("unknown PDP cmd = 0x%04x!\n", cmd); + return 0; + } + } + } + + return 0; +} + +READ16_MEMBER(namcos22_state::slave_external_ram_r) +{ + return m_pSlaveExternalRAM[offset]; +} + +WRITE16_MEMBER(namcos22_state::slave_external_ram_w) +{ + COMBINE_DATA(&m_pSlaveExternalRAM[offset]); +} + +READ16_MEMBER(namcos22_state::dsp_hold_signal_r) +{ + /* STUB */ + return 0; +} + +WRITE16_MEMBER(namcos22_state::dsp_hold_ack_w) +{ + /* STUB */ +} + +WRITE16_MEMBER(namcos22_state::dsp_xf_output_w) +{ + /* STUB */ +} + +WRITE16_MEMBER(namcos22_state::dsp_unk2_w) +{ + /** + * Used by Ridge Racer (Japan) to specify baseaddr + * for post-processed display-list output. + * + * Prop Cycle doesn't use this; instead it writes this + * addr to the uppermost word of CommRAM. + */ +} + +READ16_MEMBER(namcos22_state::dsp_unk_port3_r) +{ + m_dsp_master_bioz = 0; + m_dsp_upload_state = NAMCOS22_DSP_UPLOAD_READY; + return 0; +} + +WRITE16_MEMBER(namcos22_state::upload_code_to_slave_dsp_w) +{ + switch (m_dsp_upload_state) + { + case NAMCOS22_DSP_UPLOAD_READY: + logerror("UPLOAD_READY; cmd = 0x%x\n", data); + + switch (data) + { + case 0x00: + slave_halt(); + break; + + case 0x01: + m_dsp_upload_state = NAMCOS22_DSP_UPLOAD_DEST; + break; + + case 0x02: + /* custom IC poke */ + break; + + case 0x03: + slave_enable(); + break; + + case 0x04: + break; + + case 0x10: + /* serial i/o related? */ + slave_enable(); + break; + + default: + logerror("%08x: master port#7: 0x%04x\n", space.device().safe_pcbase(), data); + break; + } + break; + + case NAMCOS22_DSP_UPLOAD_DEST: + m_UploadDestIdx = data; + m_dsp_upload_state = NAMCOS22_DSP_UPLOAD_DATA; + break; + + case NAMCOS22_DSP_UPLOAD_DATA: + m_pSlaveExternalRAM[m_UploadDestIdx & 0x1fff] = data; + m_UploadDestIdx++; + break; + + default: + break; + } +} + +READ16_MEMBER(namcos22_state::dsp_unk8_r) +{ + /* bit 0x0001 is busy signal */ + return 0x0000; +} + +READ16_MEMBER(namcos22_state::custom_ic_status_r) +{ + /* bit 0x0001 signals completion */ + return 0x0063; +} + +READ16_MEMBER(namcos22_state::dsp_upload_status_r) +{ + /* bit 0x0001 is polled to confirm that code/data has been successfully uploaded to the slave dsp via port 0x7. */ + return 0x0000; +} + +READ16_MEMBER(namcos22_state::master_external_ram_r) +{ + return m_pMasterExternalRAM[offset]; +} + +WRITE16_MEMBER(namcos22_state::master_external_ram_w) +{ + COMBINE_DATA(&m_pMasterExternalRAM[offset]); +} + +WRITE16_MEMBER(namcos22_state::slave_serial_io_w) +{ + m_SerialDataSlaveToMasterNext = data; + logerror("slave_serial_io_w(%04x)\n", data); +} + +READ16_MEMBER(namcos22_state::master_serial_io_r) +{ + logerror("master_serial_io_r() == %04x\n", m_SerialDataSlaveToMasterCurrent); + return m_SerialDataSlaveToMasterCurrent; +} + +TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::dsp_master_serial_irq) +{ + int scanline = param; + + if (m_dsp_irq_enabled) + { + m_SerialDataSlaveToMasterCurrent = m_SerialDataSlaveToMasterNext; + + if (scanline == 480) + { + m_master->set_input_line(TMS32025_INT0, HOLD_LINE); + } + else if ((scanline % 2) == 0) + { + m_master->set_input_line(TMS32025_RINT, HOLD_LINE); + m_master->set_input_line(TMS32025_XINT, HOLD_LINE); + } + } +} + +TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::dsp_slave_serial_irq) +{ + int scanline = param; + + if (m_dsp_irq_enabled) + { + if ((scanline % 2) == 0) + { + m_slave->set_input_line(TMS32025_RINT, HOLD_LINE); + m_slave->set_input_line(TMS32025_XINT, HOLD_LINE); + } + } +} + +WRITE16_MEMBER(namcos22_state::dsp_unk_porta_w) +{ +} + +WRITE16_MEMBER(namcos22_state::dsp_led_w) +{ + /* I believe this port controls diagnostic LEDs on the DSP PCB. */ +} + +/** + * master dsp usage pattern: + * + * 4059: out $10,PA$8 + * 405A: in $09,PA$8; lac $09,0h; andk 0001h,0h; bnz $405A * + * 4060: out $11,PA$8 + * + * 4061: out $10,PA$F + * 4062: nop; rpt *+; out *+,PA$C // send data to 'render device' + * 4065: out $11,PA$F + * + * 4066: out $10,PA$9 + * 4067: nop + * 4068: out $11,PA$9 + ************************************************************** + * 0x03a2 // 0x0fff zcode lo + * 0x0001 // 0x000f zcode hi + * 0xbd00 // color + * 0x13a2 // flags + * + * 0x0100 0x009c // u,v + * 0x0072 0xf307 // sx,sy + * 0x602b 0x9f28 // i,zpos + * + * 0x00bf 0x0060 // u,v + * 0x0040 0xf3ec // sx,sy + * 0x602b 0xad48 // i,zpos + * + * 0x00fb 0x00ca // u,v + * 0x0075 0xf205 // sx,sy + * 0x602b 0x93e8 // i,zpos + * + * 0x00fb 0x00ca // u,v + * 0x0075 0xf205 // sx,sy + * 0x602b 0x93e8 // i,zpos + */ +WRITE16_MEMBER(namcos22_state::dsp_unk8_w) +{ + m_RenderBufSize = 0; +} + +WRITE16_MEMBER(namcos22_state::master_render_device_w) +{ + if (m_RenderBufSize < NAMCOS22_MAX_RENDER_CMD_SEQ) + { + m_RenderBufData[m_RenderBufSize++] = data; + if (m_RenderBufSize == NAMCOS22_MAX_RENDER_CMD_SEQ) + { + draw_direct_poly(m_RenderBufData); + } + } +} + +static ADDRESS_MAP_START( master_dsp_program, AS_PROGRAM, 16, namcos22_state ) + AM_RANGE(0x0000, 0x0fff) AM_ROM /* internal ROM (4k words) */ + AM_RANGE(0x4000, 0x7fff) AM_ROM AM_SHARE("masterextram") +ADDRESS_MAP_END + +static ADDRESS_MAP_START( master_dsp_data, AS_DATA, 16, namcos22_state ) + AM_RANGE(0x1000, 0x3fff) AM_RAM + AM_RANGE(0x4000, 0x7fff) AM_READ(master_external_ram_r) AM_WRITE(master_external_ram_w) + AM_RANGE(0x8000, 0xffff) AM_READ(namcos22_dspram16_r) AM_WRITE(namcos22_dspram16_w) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( master_dsp_io, AS_IO, 16, namcos22_state ) + AM_RANGE(0x0, 0x0) AM_READWRITE(point_loword_r, point_loword_iw) + AM_RANGE(0x1, 0x1) AM_READWRITE(point_hiword_ir, point_hiword_w) + AM_RANGE(0x2, 0x2) AM_READWRITE(pdp_begin_r, dsp_unk2_w) + AM_RANGE(0x3, 0x3) AM_READWRITE(dsp_unk_port3_r, point_address_w) + AM_RANGE(0x4, 0x4) AM_WRITENOP /* unknown */ + AM_RANGE(0x7, 0x7) AM_WRITE(upload_code_to_slave_dsp_w) + AM_RANGE(0x8, 0x8) AM_READWRITE(dsp_unk8_r, dsp_unk8_w) /* trigger irq? */ + AM_RANGE(0x9, 0x9) AM_READ(custom_ic_status_r) AM_WRITENOP /* trigger irq? */ + AM_RANGE(0xa, 0xa) AM_WRITE(dsp_unk_porta_w) + AM_RANGE(0xb, 0xb) AM_WRITENOP /* RINT-related? */ + AM_RANGE(0xc, 0xc) AM_WRITE(master_render_device_w) + AM_RANGE(0xd, 0xd) AM_WRITE(namcos22_dspram16_bank_w) + AM_RANGE(0xe, 0xe) AM_WRITE(dsp_led_w) + AM_RANGE(0xf, 0xf) AM_READ(dsp_upload_status_r) AM_WRITENOP + AM_RANGE(TMS32025_HOLD, TMS32025_HOLD) AM_READ(dsp_hold_signal_r) + AM_RANGE(TMS32025_HOLDA, TMS32025_HOLDA) AM_WRITE(dsp_hold_ack_w) + AM_RANGE(TMS32025_XF, TMS32025_XF) AM_WRITE(dsp_xf_output_w) + AM_RANGE(TMS32025_BIO, TMS32025_BIO) AM_READ(pdp_status_r) + AM_RANGE(TMS32025_DR, TMS32025_DR) AM_READ(master_serial_io_r) +ADDRESS_MAP_END + + +READ16_MEMBER(namcos22_state::dsp_bioz_r) +{ + /* STUB */ + return 1; +} + +READ16_MEMBER(namcos22_state::dsp_slave_port3_r) +{ + return 0x0010; /* ? */ +} + +READ16_MEMBER(namcos22_state::dsp_slave_port4_r) +{ + return 0; +// return ReadDataFromSlaveBuf(); +} + +READ16_MEMBER(namcos22_state::dsp_slave_port5_r) +{ +#if 0 + int numWords = SlaveBufSize(); + int mode = 2; + return (numWords<<4) | mode; +#endif + return 0; +} + +READ16_MEMBER(namcos22_state::dsp_slave_port6_r) +{ + /* bit 0x9 indicates whether device at port2 is ready to receive data */ + /* bit 0xd indicates whether data is available from port4 */ + return 0; +} + +WRITE16_MEMBER(namcos22_state::dsp_slave_portc_w) +{ + /* Unknown; used before transmitting a command sequence. */ +} + +READ16_MEMBER(namcos22_state::dsp_slave_port8_r) +{ + /* This reports status of the device mapped at port 0xb. */ + /* The slave dsp waits for bit 0x0001 to be zero before writing a new command sequence. */ + return 0; /* status */ +} + +READ16_MEMBER(namcos22_state::dsp_slave_portb_r) +{ + /* The slave DSP reads before transmitting a command sequence. */ + return 0; +} + +WRITE16_MEMBER(namcos22_state::dsp_slave_portb_w) +{ + /* The slave dsp uses this to transmit a command sequence to an external device. */ +} + +static ADDRESS_MAP_START( slave_dsp_program, AS_PROGRAM, 16, namcos22_state ) + AM_RANGE(0x0000, 0x0fff) AM_ROM /* internal ROM */ + AM_RANGE(0x8000, 0x9fff) AM_ROM AM_SHARE("slaveextram") +ADDRESS_MAP_END + +static ADDRESS_MAP_START( slave_dsp_data, AS_DATA, 16, namcos22_state ) + AM_RANGE(0x8000, 0x9fff) AM_READWRITE(slave_external_ram_r, slave_external_ram_w) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( slave_dsp_io, AS_IO, 16, namcos22_state ) + /* unknown signal */ + AM_RANGE(0x3, 0x3) AM_READ(dsp_slave_port3_r) + + AM_RANGE(0x4, 0x4) AM_READ(dsp_slave_port4_r) + AM_RANGE(0x5, 0x5) AM_READ(dsp_slave_port5_r) + AM_RANGE(0x6, 0x6) AM_READ(dsp_slave_port6_r) AM_WRITENOP + + /* render device state */ + AM_RANGE(0x8, 0x8) AM_READ(dsp_slave_port8_r) AM_WRITENOP + + /* render device */ + AM_RANGE(0xb, 0xb) AM_READWRITE(dsp_slave_portb_r, dsp_slave_portb_w) + + AM_RANGE(0xc, 0xc) AM_WRITE(dsp_slave_portc_w) + + AM_RANGE(TMS32025_HOLD, TMS32025_HOLD) AM_READ(dsp_hold_signal_r) + AM_RANGE(TMS32025_HOLDA, TMS32025_HOLDA) AM_WRITE(dsp_hold_ack_w) + AM_RANGE(TMS32025_XF, TMS32025_XF) AM_WRITE(dsp_xf_output_w) + AM_RANGE(TMS32025_BIO, TMS32025_BIO) AM_READ(dsp_bioz_r) + AM_RANGE(TMS32025_DX, TMS32025_DX) AM_WRITE(slave_serial_io_w) +ADDRESS_MAP_END + + +/*********************************************************************************************/ + +/* + MCU memory map + -------------- + 000000-00027f: internal MCU registers and RAM + 002000-002fff: C352 PCM chip + 004000-00bfff: shared RAM with host CPU + 00c000-00ffff: BIOS ROM (internal on System 22, external on Super) + 200000-27ffff: data ROM + 301000-301001: watchdog? + 308000-308003: unknown (I/O?) + + pin hookups + ----------- + 5 (IRQ0): C383 custom (probably vsync) + 7 (IRQ2): 74F244 at 8c, pin 3 + + port assignments + ---------------- + port 4: "bankswitches" the controls read at port 5, probably other functions too + port 5: on read, digital controls (buttons, coins, start, service switch) + on write, various outputs (lamps, the fan in prop cycle, etc) + ADC : analog inputs + +*/ + +// System 22 37702 + +READ16_MEMBER(namcos22_state::s22mcu_shared_r) +{ + UINT16 *share16 = (UINT16 *)m_shareram.target(); + return share16[BYTE_XOR_BE(offset)]; +} + +WRITE16_MEMBER(namcos22_state::s22mcu_shared_w) +{ + UINT16 *share16 = (UINT16 *)m_shareram.target(); + COMBINE_DATA(&share16[BYTE_XOR_BE(offset)]); +} + +READ8_MEMBER(namcos22_state::mcu_port4_s22_r) +{ + // for C74, 0x10 selects sound MCU role, 0x00 selects control-reading role + return 0x10; +} + +READ8_MEMBER(namcos22_state::iomcu_port4_s22_r) +{ + // for C74, 0x10 selects sound MCU role, 0x00 selects control-reading role + return 0x00; +} + +static ADDRESS_MAP_START( mcu_s22_program, AS_PROGRAM, 16, namcos22_state ) + AM_RANGE(0x002000, 0x002fff) AM_DEVREADWRITE("c352", c352_device, read, write) + AM_RANGE(0x004000, 0x00bfff) AM_READWRITE(s22mcu_shared_r, s22mcu_shared_w ) + AM_RANGE(0x00c000, 0x00ffff) AM_ROM AM_REGION("mcu_c74", 0) + AM_RANGE(0x080000, 0x0fffff) AM_ROM AM_REGION("mcu", 0) + AM_RANGE(0x200000, 0x27ffff) AM_ROM AM_REGION("mcu", 0) + AM_RANGE(0x280000, 0x2fffff) AM_ROM AM_REGION("mcu", 0) + AM_RANGE(0x301000, 0x301001) AM_NOP // watchdog? LEDs? + AM_RANGE(0x308000, 0x308003) AM_NOP // volume control IC? +ADDRESS_MAP_END + +static ADDRESS_MAP_START( iomcu_s22_program, AS_PROGRAM, 16, namcos22_state ) + AM_RANGE(0x00c000, 0x00ffff) AM_ROM AM_REGION("iomcu", 0) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( mcu_s22_io, AS_IO, 8, namcos22_state ) + AM_RANGE(M37710_PORT4, M37710_PORT4) AM_READ(mcu_port4_s22_r) +ADDRESS_MAP_END + +static ADDRESS_MAP_START( iomcu_s22_io, AS_IO, 8, namcos22_state ) + AM_RANGE(M37710_PORT4, M37710_PORT4) AM_READ(iomcu_port4_s22_r) + AM_RANGE(0x00, 0xff) AM_NOP +ADDRESS_MAP_END + + +// Super System 22 M37710 + +TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::mcu_irq) +{ + int scanline = param; + + /* TODO: real sources of these */ + if (scanline == 480) + m_mcu->set_input_line(M37710_LINE_IRQ0, HOLD_LINE); + else if (scanline == 500) + m_mcu->set_input_line(M37710_LINE_ADC, HOLD_LINE); + else if (scanline == 0) + m_mcu->set_input_line(M37710_LINE_IRQ2, HOLD_LINE); +} + + +WRITE8_MEMBER(namcos22_state::mcu_port4_w) +{ + m_p4 = data; +} + +READ8_MEMBER(namcos22_state::mcu_port4_r) +{ + return m_p4; +} + +WRITE8_MEMBER(namcos22_state::mcu_port5_w) +{ + ; +} + +READ8_MEMBER(namcos22_state::mcu_port5_r) +{ + if (m_p4 & 8) + return ioport("MCUP5A")->read_safe(0xff); + else + return ioport("MCUP5B")->read_safe(0xff); +} + +WRITE8_MEMBER(namcos22_state::mcu_port6_w) +{ + ; +} + +READ8_MEMBER(namcos22_state::mcu_port6_r) +{ + return 0; +} + +WRITE8_MEMBER(namcos22_state::mcu_port7_w) +{ + ; +} + +READ8_MEMBER(namcos22_state::mcu_port7_r) +{ + return 0; +} + +READ8_MEMBER(namcos22_state::namcos22s_mcu_adc_r) +{ + static const char *const portnames[] = { "ADC0", "ADC1", "ADC2", "ADC3" }; + if (offset & 1) + return (ioport(portnames[offset >> 1 & 3])->read_safe(0) << 2) >> 8 & 0xff; + else + return (ioport(portnames[offset >> 1 & 3])->read_safe(0) << 2) & 0xff; +} + +static ADDRESS_MAP_START( mcu_program, AS_PROGRAM, 16, namcos22_state ) + AM_RANGE(0x002000, 0x002fff) AM_DEVREADWRITE("c352", c352_device, read, write) + AM_RANGE(0x004000, 0x00bfff) AM_READWRITE(s22mcu_shared_r, s22mcu_shared_w ) + AM_RANGE(0x00c000, 0x00ffff) AM_ROM AM_REGION("mcu", 0xc000) + AM_RANGE(0x080000, 0x0fffff) AM_ROM AM_REGION("mcu", 0) + AM_RANGE(0x200000, 0x27ffff) AM_ROM AM_REGION("mcu", 0) + AM_RANGE(0x280000, 0x2fffff) AM_ROM AM_REGION("mcu", 0) + AM_RANGE(0x301000, 0x301001) AM_NOP // watchdog? LEDs? + AM_RANGE(0x308000, 0x308003) AM_NOP // volume control IC? +ADDRESS_MAP_END + +static ADDRESS_MAP_START( mcu_io, AS_IO, 8, namcos22_state ) + AM_RANGE(M37710_PORT4, M37710_PORT4) AM_READWRITE(mcu_port4_r, mcu_port4_w) + AM_RANGE(M37710_PORT5, M37710_PORT5) AM_READWRITE(mcu_port5_r, mcu_port5_w) + AM_RANGE(M37710_PORT6, M37710_PORT6) AM_READWRITE(mcu_port6_r, mcu_port6_w) + AM_RANGE(M37710_PORT7, M37710_PORT7) AM_READWRITE(mcu_port7_r, mcu_port7_w) + AM_RANGE(M37710_ADC0_L, M37710_ADC3_H) AM_READ(namcos22s_mcu_adc_r) + AM_RANGE(M37710_ADC4_L, M37710_ADC7_H) AM_READNOP +ADDRESS_MAP_END + +/*********************************************************************************************/ + +// custom input handling + +/* TODO: REMOVE (THIS IS HANDLED BY "IOMCU") */ +void namcos22_state::handle_coinage(int slots, int address_is_odd) +{ + UINT16 *share16 = (UINT16 *)m_shareram.target(); + + UINT32 coin_state = ioport("INPUTS")->read() & 0x1200; + + if (!(coin_state & 0x1000) && (m_old_coin_state & 0x1000)) + { + m_credits1++; + } + + if (!(coin_state & 0x0200) && (m_old_coin_state & 0x0200)) + { + m_credits2++; + } + + m_old_coin_state = coin_state; + + share16[BYTE_XOR_LE(0x38/2)] = m_credits1 << (address_is_odd*8); + + if (slots == 2) + { + share16[BYTE_XOR_LE(0x3e/2)] = m_credits2 << (address_is_odd*8); + } +} + +/* TODO: REMOVE (THIS IS HANDLED BY "IOMCU") */ +void namcos22_state::handle_driving_io() +{ + if (m_syscontrol[0x18] != 0) + { + UINT16 flags = ioport("INPUTS")->read(); + UINT16 coinram_address_is_odd = 0; + + UINT16 gas = ioport("GAS")->read(); + UINT16 brake = ioport("BRAKE")->read(); + UINT16 steer = ioport("STEER")->read(); + + switch (m_gametype) + { + case NAMCOS22_RIDGE_RACER: + case NAMCOS22_RIDGE_RACER2: + gas <<= 3; + gas += 884; + brake <<= 3; + brake += 809; + steer <<= 4; + steer += 0x160; + break; + + case NAMCOS22_RAVE_RACER: + gas <<= 3; + gas += 992; + brake <<= 3; + brake += 3008; + steer <<= 4; + steer += 32; + break; + + case NAMCOS22_VICTORY_LAP: + coinram_address_is_odd = 1; + // (fall through) + case NAMCOS22_ACE_DRIVER: + gas <<= 3; + gas += 992; + brake <<= 3; + brake += 3008; + steer <<= 4; + steer += 2048; + break; + + default: + gas <<= 3; + brake <<= 3; + steer <<= 4; + break; + } + + handle_coinage(2, coinram_address_is_odd); + m_shareram[0x000/4] = 0x10 << 16; /* SUB CPU ready */ + m_shareram[0x030/4] = (flags << 16) | steer; + m_shareram[0x034/4] = (gas << 16) | brake; + } +} + +/* TODO: REMOVE (THIS IS HANDLED BY "IOMCU") */ +void namcos22_state::handle_cybrcomm_io() +{ + if (m_syscontrol[0x18] != 0) + { + UINT16 flags = ioport("INPUTS")->read(); + + UINT16 volume0 = ioport("STICKY1")->read() * 0x10; + UINT16 volume1 = ioport("STICKY2")->read() * 0x10; + UINT16 volume2 = ioport("STICKX1")->read() * 0x10; + UINT16 volume3 = ioport("STICKX2")->read() * 0x10; + + m_shareram[0x030/4] = (flags << 16) | volume0; + m_shareram[0x034/4] = (volume1 << 16) | volume2; + m_shareram[0x038/4] = volume3 << 16; + + handle_coinage(1, 0); + } +} + + +// Alpine skiing games + +TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::alpine_steplock_callback) +{ + m_motor_status = param; +} + +WRITE8_MEMBER(namcos22_state::alpine_mcu_port5_w) +{ + // bits 1+2 are steplock motor outputs + if ((data & 6) == 6) + { + if (m_motor_status == 2) + { + // free steps + m_motor_status = 0; + m_motor_timer->adjust(attotime::from_msec(500), 1); + } + } + else if (data & 4) + { + if (m_motor_status == 1) + { + // lock steps + m_motor_status = 0; + m_motor_timer->adjust(attotime::from_msec(500), 2); + } + } +} + +static ADDRESS_MAP_START( alpine_io_map, AS_IO, 8, namcos22_state ) + AM_RANGE(M37710_PORT5, M37710_PORT5) AM_WRITE(alpine_mcu_port5_w) + AM_IMPORT_FROM( mcu_io ) +ADDRESS_MAP_END + + +// Prop Cycle + +WRITE8_MEMBER(namcos22_state::propcycle_mcu_port5_w) +{ + // prop cycle outputs: + // bit 1 = fan + // bit 2 = button light + output_set_value("fan0", data & 1); + set_led_status(machine(), 0, data & 2); +} + +static ADDRESS_MAP_START( propcycl_io_map, AS_IO, 8, namcos22_state ) + AM_RANGE(M37710_PORT5, M37710_PORT5) AM_WRITE(propcycle_mcu_port5_w) + AM_IMPORT_FROM( mcu_io ) +ADDRESS_MAP_END + +TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::propcycl_pedal_interrupt) +{ + generic_pulse_irq_line(m_mcu, M37710_LINE_TIMERA3TICK, 1); +} + +TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::propcycl_pedal_update) +{ + // arbitrary timer for reading optical pedal + UINT8 i = ioport("PEDAL")->read(); + + if (i != 0) + { + // the pedal has a simple 1-bit "light interrupted" sensor. the faster you pedal, + // the faster it pulses. this is connected to the clock input for timer A3, + // and timer A3 is configured by the MCU program to cause an interrupt each time + // it's clocked. by counting the number of interrupts in a frame, we can determine + // how fast the user is pedaling. + + // these values(in usec) may need tweaking: + const int base = 1000; + const int range = 10000; + + attotime freq = attotime::from_usec(base + range * (1.0 / (double)i)); + m_pc_pedal_interrupt->adjust(min(freq, m_pc_pedal_interrupt->time_left()), 0, freq); + } + else + { + // not moving + m_pc_pedal_interrupt->adjust(attotime::never, 0, attotime::never); + } +} + + +// Armadillo Racing + +TIMER_CALLBACK_MEMBER(namcos22_state::adillor_trackball_interrupt) +{ + generic_pulse_irq_line(m_mcu, param ? M37710_LINE_TIMERA2TICK : M37710_LINE_TIMERA3TICK, 1); +} + +TIMER_DEVICE_CALLBACK_MEMBER(namcos22_state::adillor_trackball_update) +{ + // arbitrary timer for reading optical trackball + UINT8 ix = ioport("TRACKX")->read(); + UINT8 iy = ioport("TRACKY")->read(); + + if (ix != 0x80 || iy < 0x80) + { + if (iy >= 0x80) + iy = 0x7f; + double x = (double)(ix - 0x80) / 127.0; + double y = (double)(0x80 - iy) / 127.0; + + // normalize + double a = atan(x/y); + double p = sqrt(x*x + y*y); + double v = (fabs(a) < (M_PI / 4.0)) ? p*cos(a) : p*sin(a); + v = fabs(v); + + // note that it is rotated by 45 degrees, so instead of axes like (+), they are like (x) + a += (M_PI / 4.0); + if (a < 0) + a = 0; + else if (a > (M_PI / 2.0)) + a = M_PI / 2.0; + + // tied to mcu A2/A3 timer (speed determines frequency) + // these values(in usec) may need tweaking: + const int base = 1000; + const int range = 5000; + + double t[2]; + t[0] = v*sin(a); // y -> A2 + t[1] = v*cos(a); // x -> A3 + + for (int axis = 0; axis < 2; axis++) + { + if (t[axis] > (1.0 / (double)(range))) + { + attotime freq = attotime::from_usec((base + range) - ((double)(range) * t[axis])); + m_ar_tb_interrupt[axis]->adjust(min(freq, m_ar_tb_interrupt[axis]->remaining()), axis, freq); + } + else + { + // not moving + m_ar_tb_interrupt[axis]->adjust(attotime::never, axis, attotime::never); + } + } + } + else + { + // both axes not moving + for (int axis = 0; axis < 2; axis++) + { + m_ar_tb_interrupt[axis]->adjust(attotime::never, axis, attotime::never); + } + } +} + + + +/*********************************************************************************************/ + +static INPUT_PORTS_START( ridgera ) + PORT_START("INPUTS") + /* 1 3 5 When the cabinet is set to Deluxe, the stick shift is basically + |-|-| an 8-way joystick that locks into place. + 2 4 6 Standard (default) setup uses a racing shifter like in Ace Driver. */ + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Shift Down") + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Shift Up") + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_NAME("Shift Left") // not used in Standard + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_NAME("Shift Right") // not used in Standard + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Clutch Pedal") // not used in Standard + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( Standard ) ) + PORT_DIPSETTING( 0x0100, "Deluxe" ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) // also service mode? + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW0") + PORT_SERVICE_DIPLOC( 0x0001, IP_ACTIVE_LOW, "SW2:1") + PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW2:2" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW2:3" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "SW2:4" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW2:5" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW2:6" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW2:7" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0080, 0x0080, "SW2:8" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0100, 0x0100, "SW3:1" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0200, 0x0200, "SW3:2" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0400, 0x0400, "SW3:3" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0800, 0x0800, "SW3:4" ) + PORT_DIPUNKNOWN_DIPLOC( 0x1000, 0x1000, "SW3:5" ) + PORT_DIPUNKNOWN_DIPLOC( 0x2000, 0x2000, "SW3:6" ) + PORT_DIPUNKNOWN_DIPLOC( 0x4000, 0x4000, "SW3:7" ) + PORT_DIPUNKNOWN_DIPLOC( 0x8000, 0x8000, "SW3:8" ) + + PORT_START("GAS") + PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Gas Pedal") + + PORT_START("BRAKE") + PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Brake Pedal") + + PORT_START("STEER") + PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Steering Wheel") +INPUT_PORTS_END + +static INPUT_PORTS_START( ridgeracf ) + PORT_INCLUDE( ridgera ) + + PORT_MODIFY("INPUTS") + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Ignition Key") + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("AT Switch") + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("MT Switch") + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_SERVICE2 ) + PORT_SERVICE( 0x0400, IP_ACTIVE_LOW ) + + // DIP3-1 to DIP3-3 are for setting up the viewing angle (game used one board per screen?) + // Some of the other dipswitches are for debugging, like with Ridge Racer 2. + PORT_MODIFY("DSW0") + PORT_DIPUNKNOWN_DIPLOC( 0x0001, 0x0000, "SW2:1" ) // always on? + PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0000, "SW2:2" ) // always on? + PORT_DIPNAME( 0x8000, 0x8000, "Test Mode" ) PORT_DIPLOCATION("SW3:8") + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( ridgera2 ) + PORT_INCLUDE( ridgera ) + + PORT_MODIFY("INPUTS") + PORT_DIPNAME( 0x2100, 0x2000, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x0000, "50 Inch" ) + PORT_DIPSETTING( 0x0100, "Twin" ) + PORT_DIPSETTING( 0x2000, DEF_STR( Standard ) ) + PORT_DIPSETTING( 0x2100, "Deluxe" ) + + /* Some dipswitches seem to be for debug purposes, for example: + 2-4 : background drawing related + 2-5 : background drawing related + 2-6 : debug link-up + 2-8 : no game over when time runs out (cheat) + 3-7 : debug polygons + */ + PORT_MODIFY("DSW0") + PORT_DIPNAME( 0x8000, 0x8000, "Test Mode" ) PORT_DIPLOCATION("SW3:8") + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) +INPUT_PORTS_END + +static INPUT_PORTS_START( raveracw ) + PORT_INCLUDE( ridgera ) + + PORT_MODIFY("INPUTS") + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("View Change") + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no coin2 + + PORT_DIPNAME( 0x2100, 0x2000, DEF_STR( Cabinet ) ) + PORT_DIPSETTING( 0x0000, "50 Inch" ) + PORT_DIPSETTING( 0x0100, "Twin" ) + PORT_DIPSETTING( 0x2000, DEF_STR( Standard ) ) + PORT_DIPSETTING( 0x2100, "Deluxe" ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( cybrcomm ) + PORT_START("INPUTS") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Gun Trigger") // placed on both sticks + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Missile Button") // placed on both sticks + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("View Change") + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_SERVICE( 0x0400, IP_ACTIVE_LOW ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + /* Note(s) + The ranges here are based on the test mode which displays +-224 + The nvram is calibrated using these settings. If the SUBCPU handling changes then these might + end up needing to change again too + Default key arrangement is based on dual-joystick 'Tank' arrangement found in Assault and CyberSled + */ + PORT_START("STICKY1") /* VOLUME 0 */ + PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_MINMAX(0x47,0xb7) /* range based on test mode */ PORT_CODE_DEC(KEYCODE_I) PORT_CODE_INC(KEYCODE_K) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(2) /* right joystick: vertical */ + PORT_START("STICKY2") /* VOLUME 0 */ + PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_MINMAX(0x47,0xb7) /* range based on test mode */ PORT_CODE_DEC(KEYCODE_E) PORT_CODE_INC(KEYCODE_D) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) /* left joystick: vertical */ + PORT_START("STICKX1") /* VOLUME 0 */ + PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_X ) PORT_MINMAX(0x47,0xb7) /* range based on test mode */ PORT_CODE_DEC(KEYCODE_J) PORT_CODE_INC(KEYCODE_L) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(2) /* right joystick: horizontal */ + PORT_START("STICKX2") /* VOLUME 0 */ + PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_X ) PORT_MINMAX(0x47,0xb7) /* range based on test mode */ PORT_CODE_DEC(KEYCODE_S) PORT_CODE_INC(KEYCODE_F) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) /* left joystick: horizontal */ + + PORT_START("DSW0") + PORT_DIPUNKNOWN_DIPLOC( 0x0001, 0x0001, "SW2:1" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW2:2" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW2:3" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "SW2:4" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW2:5" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW2:6" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW2:7" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0080, 0x0080, "SW2:8" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0100, 0x0100, "SW3:1" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0200, 0x0200, "SW3:2" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0400, 0x0400, "SW3:3" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0800, 0x0800, "SW3:4" ) + PORT_DIPUNKNOWN_DIPLOC( 0x1000, 0x1000, "SW3:5" ) + PORT_DIPUNKNOWN_DIPLOC( 0x2000, 0x2000, "SW3:6" ) + PORT_DIPUNKNOWN_DIPLOC( 0x4000, 0x4000, "SW3:7" ) + PORT_DIPUNKNOWN_DIPLOC( 0x8000, 0x8000, "SW3:8" ) +INPUT_PORTS_END + +static INPUT_PORTS_START( acedrvr ) + PORT_START("INPUTS") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Shift Down") + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Shift Up") + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("View Change") + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE1 ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Motion-Stop") + + PORT_START("P1") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("Dev Service Enter") + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_NAME("Dev Service Up") + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_NAME("Dev Service Down") + PORT_BIT( 0xff3e, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW0") + PORT_DIPUNKNOWN_DIPLOC( 0x0001, 0x0001, "SW2:1" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW2:2" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW2:3" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "SW2:4" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW2:5" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW2:6" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW2:7" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0080, 0x0080, "SW2:8" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0100, 0x0100, "SW3:1" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0200, 0x0200, "SW3:2" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0400, 0x0400, "SW3:3" ) + PORT_DIPUNKNOWN_DIPLOC( 0x0800, 0x0800, "SW3:4" ) + PORT_DIPUNKNOWN_DIPLOC( 0x1000, 0x1000, "SW3:5" ) + PORT_DIPUNKNOWN_DIPLOC( 0x2000, 0x2000, "SW3:6" ) + PORT_DIPNAME( 0x4000, 0x4000, "Test Mode?" ) PORT_DIPLOCATION("SW3:7") + PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + PORT_DIPNAME( 0x8000, 0x8000, "Test Mode?" ) PORT_DIPLOCATION("SW3:8") + PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) + + PORT_START("GAS") + PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Gas Pedal") + + PORT_START("BRAKE") + PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Brake Pedal") + + PORT_START("STEER") + PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Steering Wheel") +INPUT_PORTS_END + +static INPUT_PORTS_START( victlap ) + PORT_INCLUDE( acedrvr ) + + PORT_MODIFY("P1") + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_NAME("Dev Service Up") + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_NAME("Dev Service Down") + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("Dev Service Enter") + PORT_BIT( 0xfe3f, IP_ACTIVE_LOW, IPT_UNKNOWN ) +INPUT_PORTS_END + +/*********************************************************************************************/ CUSTOM_INPUT_MEMBER(namcos22_state::alpine_motor_read) { @@ -5007,238 +3586,1875 @@ static INPUT_PORTS_START( timecris ) PORT_BIT( 0xfff, 43+241/2, IPT_LIGHTGUN_Y ) PORT_CROSSHAIR(Y, 1.0, 0.0, 0) PORT_MINMAX(43, 43+241) PORT_SENSITIVITY(64) PORT_KEYDELTA(4) INPUT_PORTS_END -/*****************************************************************************************************/ -static INPUT_PORTS_START( cybrcomm ) - PORT_START("INPUTS") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Gun Trigger") // placed on both sticks - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Missile Button") // placed on both sticks - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("View Change") - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_SERVICE( 0x0400, IP_ACTIVE_LOW ) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - /* Note(s) - The ranges here are based on the test mode which displays +-224 - The nvram is calibrated using these settings. If the SUBCPU handling changes then these might - end up needing to change again too - Default key arrangement is based on dual-joystick 'Tank' arrangement found in Assault and CyberSled - */ - PORT_START("STICKY1") /* VOLUME 0 */ - PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_MINMAX(0x47,0xb7) /* range based on test mode */ PORT_CODE_DEC(KEYCODE_I) PORT_CODE_INC(KEYCODE_K) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(2) /* right joystick: vertical */ - PORT_START("STICKY2") /* VOLUME 0 */ - PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_Y ) PORT_MINMAX(0x47,0xb7) /* range based on test mode */ PORT_CODE_DEC(KEYCODE_E) PORT_CODE_INC(KEYCODE_D) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) /* left joystick: vertical */ - PORT_START("STICKX1") /* VOLUME 0 */ - PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_X ) PORT_MINMAX(0x47,0xb7) /* range based on test mode */ PORT_CODE_DEC(KEYCODE_J) PORT_CODE_INC(KEYCODE_L) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(2) /* right joystick: horizontal */ - PORT_START("STICKX2") /* VOLUME 0 */ - PORT_BIT( 0xff, 0x7f, IPT_AD_STICK_X ) PORT_MINMAX(0x47,0xb7) /* range based on test mode */ PORT_CODE_DEC(KEYCODE_S) PORT_CODE_INC(KEYCODE_F) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) /* left joystick: horizontal */ +/*********************************************************************************************/ - PORT_START("DSW0") - PORT_DIPUNKNOWN_DIPLOC( 0x0001, 0x0001, "SW2:1" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW2:2" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW2:3" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "SW2:4" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW2:5" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW2:6" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW2:7" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0080, 0x0080, "SW2:8" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0100, 0x0100, "SW3:1" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0200, 0x0200, "SW3:2" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0400, 0x0400, "SW3:3" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0800, 0x0800, "SW3:4" ) - PORT_DIPUNKNOWN_DIPLOC( 0x1000, 0x1000, "SW3:5" ) - PORT_DIPUNKNOWN_DIPLOC( 0x2000, 0x2000, "SW3:6" ) - PORT_DIPUNKNOWN_DIPLOC( 0x4000, 0x4000, "SW3:7" ) - PORT_DIPUNKNOWN_DIPLOC( 0x8000, 0x8000, "SW3:8" ) -INPUT_PORTS_END +/* Super System22 supports a sprite layer. + * Sprites are rendered as part of the polygon draw list, based on a per-sprite Z attribute. + * Each sprite has explicit placement/color/zoom controls. + */ +static const gfx_layout sprite_layout = +{ + 32,32, + RGN_FRAC(1,1), + 8, + { 0,1,2,3,4,5,6,7 }, + { + 0*8,1*8,2*8,3*8,4*8,5*8,6*8,7*8, + 8*8,9*8,10*8,11*8,12*8,13*8,14*8,15*8, + 16*8,17*8,18*8,19*8,20*8,21*8,22*8,23*8, + 24*8,25*8,26*8,27*8,28*8,29*8,30*8,31*8 + }, + { + 0*32*8,1*32*8,2*32*8,3*32*8,4*32*8,5*32*8,6*32*8,7*32*8, + 8*32*8,9*32*8,10*32*8,11*32*8,12*32*8,13*32*8,14*32*8,15*32*8, + 16*32*8,17*32*8,18*32*8,19*32*8,20*32*8,21*32*8,22*32*8,23*32*8, + 24*32*8,25*32*8,26*32*8,27*32*8,28*32*8,29*32*8,30*32*8,31*32*8 + }, + 32*32*8 +}; -static INPUT_PORTS_START( acedrvr ) - PORT_START("INPUTS") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Shift Down") - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Shift Up") - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("View Change") - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Motion-Stop") +static const gfx_layout texture_tile_layout = +{ + 16,16, + RGN_FRAC(1,1), + 8, + { 0,1,2,3,4,5,6,7 }, + { + 0*8,1*8,2*8,3*8,4*8,5*8,6*8,7*8,8*8,9*8,10*8,11*8,12*8,13*8,14*8,15*8 + }, + { + 0*16*8,1*16*8,2*16*8,3*16*8,4*16*8,5*16*8,6*16*8,7*16*8, + 8*16*8,9*16*8,10*16*8,11*16*8,12*16*8,13*16*8,14*16*8,15*16*8 + }, + 16*16*8 +}; - PORT_START("P1") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("Dev Service Enter") - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_NAME("Dev Service Up") - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_NAME("Dev Service Down") - PORT_BIT( 0xff3e, IP_ACTIVE_LOW, IPT_UNKNOWN ) +/* text layer uses a set of 16x16x8bpp tiles defined in RAM */ +#define XOR(a) WORD2_XOR_BE(a) +static const gfx_layout namcos22_cg_layout = +{ + 16,16, + 0x400, /* 0x3c0 */ + 4, + { 0,1,2,3 }, + { XOR(0)*4, XOR(1)*4, XOR(2)*4, XOR(3)*4, XOR(4)*4, XOR(5)*4, XOR(6)*4, XOR(7)*4, + XOR(8)*4, XOR(9)*4, XOR(10)*4, XOR(11)*4, XOR(12)*4, XOR(13)*4, XOR(14)*4, XOR(15)*4 }, + { 64*0,64*1,64*2,64*3,64*4,64*5,64*6,64*7,64*8,64*9,64*10,64*11,64*12,64*13,64*14,64*15 }, + 64*16 +}; - PORT_START("DSW0") - PORT_DIPUNKNOWN_DIPLOC( 0x0001, 0x0001, "SW2:1" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW2:2" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW2:3" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "SW2:4" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW2:5" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW2:6" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW2:7" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0080, 0x0080, "SW2:8" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0100, 0x0100, "SW3:1" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0200, 0x0200, "SW3:2" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0400, 0x0400, "SW3:3" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0800, 0x0800, "SW3:4" ) - PORT_DIPUNKNOWN_DIPLOC( 0x1000, 0x1000, "SW3:5" ) - PORT_DIPUNKNOWN_DIPLOC( 0x2000, 0x2000, "SW3:6" ) - PORT_DIPNAME( 0x4000, 0x4000, "Test Mode?" ) PORT_DIPLOCATION("SW3:7") - PORT_DIPSETTING( 0x4000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - PORT_DIPNAME( 0x8000, 0x8000, "Test Mode?" ) PORT_DIPLOCATION("SW3:8") - PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) +#undef XOR - PORT_START("GAS") - PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Gas Pedal") +static GFXDECODE_START( namcos22 ) + GFXDECODE_ENTRY( NULL, 0, namcos22_cg_layout, 0, 0x800 ) + GFXDECODE_ENTRY( "textile", 0, texture_tile_layout, 0, 0x80 ) +GFXDECODE_END - PORT_START("BRAKE") - PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Brake Pedal") +static GFXDECODE_START( super ) + GFXDECODE_ENTRY( NULL, 0, namcos22_cg_layout, 0, 0x800 ) + GFXDECODE_ENTRY( "textile", 0, texture_tile_layout, 0, 0x80 ) + GFXDECODE_ENTRY( "sprite", 0, sprite_layout, 0, 0x80 ) +GFXDECODE_END - PORT_START("STEER") - PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Steering Wheel") -INPUT_PORTS_END -static INPUT_PORTS_START( victlap ) - PORT_INCLUDE( acedrvr ) +static NVRAM_HANDLER( namcos22 ) +{ + namcos22_state *state = machine.driver_data(); + int i; + UINT8 data[4]; + if (read_or_write) + { + for (i = 0; i < state->m_nvmem.bytes() / 4; i++) + { + UINT32 dword = state->m_nvmem[i]; + data[0] = dword>>24; + data[1] = (dword&0x00ff0000)>>16; + data[2] = (dword&0x0000ff00)>>8; + data[3] = dword&0xff; + file->write(data, 4); + } + } + else + { + if (file) + { + for (i = 0; i < state->m_nvmem.bytes() / 4; i++) + { + file->read(data, 4); + state->m_nvmem[i] = (data[0]<<24)|(data[1]<<16)|(data[2]<<8)|data[3]; + } + } + else + { + memset(state->m_nvmem, 0x00, state->m_nvmem.bytes()); + if (machine.root_device().memregion("nvram")->bytes() == state->m_nvmem.bytes()) + { + UINT8* nvram = machine.root_device().memregion("nvram")->base(); - PORT_MODIFY("P1") - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) PORT_NAME("Dev Service Up") - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) PORT_NAME("Dev Service Down") - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) PORT_NAME("Dev Service Enter") - PORT_BIT( 0xfe3f, IP_ACTIVE_LOW, IPT_UNKNOWN ) -INPUT_PORTS_END + for (i = 0; i < state->m_nvmem.bytes() / 4; i++) + { + state->m_nvmem[i] = (nvram[0+i*4]<<24)|(nvram[1+i*4]<<16)|(nvram[2+i*4]<<8)|nvram[3+i*4]; + } + } + } + } +} -static INPUT_PORTS_START( ridgera ) - PORT_START("INPUTS") - /* 1 3 5 When the cabinet is set to Deluxe, the stick shift is basically - |-|-| an 8-way joystick that locks into place. - 2 4 6 Standard (default) setup uses a racing shifter like in Ace Driver. */ - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Shift Down") - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Shift Up") - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_NAME("Shift Left") // not used in Standard - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT) PORT_NAME("Shift Right") // not used in Standard - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Clutch Pedal") // not used in Standard - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_DIPNAME( 0x0100, 0x0000, DEF_STR( Cabinet ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Standard ) ) - PORT_DIPSETTING( 0x0100, "Deluxe" ) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_COIN2 ) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) // also service mode? - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE1 ) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_COIN1 ) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) +void namcos22_state::machine_reset() +{ + m_master->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + m_slave->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + m_mcu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); + + m_poly->reset(); +} - PORT_START("DSW0") - PORT_SERVICE_DIPLOC( 0x0001, IP_ACTIVE_LOW, "SW2:1") - PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0002, "SW2:2" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0004, 0x0004, "SW2:3" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0008, 0x0008, "SW2:4" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0010, 0x0010, "SW2:5" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0020, 0x0020, "SW2:6" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0040, 0x0040, "SW2:7" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0080, 0x0080, "SW2:8" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0100, 0x0100, "SW3:1" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0200, 0x0200, "SW3:2" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0400, 0x0400, "SW3:3" ) - PORT_DIPUNKNOWN_DIPLOC( 0x0800, 0x0800, "SW3:4" ) - PORT_DIPUNKNOWN_DIPLOC( 0x1000, 0x1000, "SW3:5" ) - PORT_DIPUNKNOWN_DIPLOC( 0x2000, 0x2000, "SW3:6" ) - PORT_DIPUNKNOWN_DIPLOC( 0x4000, 0x4000, "SW3:7" ) - PORT_DIPUNKNOWN_DIPLOC( 0x8000, 0x8000, "SW3:8" ) +void namcos22_state::machine_start() +{ + m_slave_simulation_active = false; + m_portbits[0] = 0xffff; + m_portbits[1] = 0xffff; +} - PORT_START("GAS") - PORT_BIT( 0xff, 0x00, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Gas Pedal") +// System 22 +static MACHINE_CONFIG_START( namcos22, namcos22_state ) - PORT_START("BRAKE") - PORT_BIT( 0xff, 0x00, IPT_PEDAL2 ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Brake Pedal") + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M68020,SS22_MASTER_CLOCK/2) /* 25 MHz? */ + MCFG_CPU_PROGRAM_MAP(namcos22_am) + MCFG_CPU_VBLANK_INT_DRIVER("screen", namcos22_state, namcos22_interrupt) - PORT_START("STEER") - PORT_BIT( 0xff, 0x80, IPT_PADDLE ) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_NAME("Steering Wheel") -INPUT_PORTS_END + MCFG_CPU_ADD("master", TMS32025,SS22_MASTER_CLOCK) /* ? */ + MCFG_CPU_PROGRAM_MAP(master_dsp_program) + MCFG_CPU_DATA_MAP(master_dsp_data) + MCFG_CPU_IO_MAP(master_dsp_io) + MCFG_TIMER_DRIVER_ADD_SCANLINE("master_st", namcos22_state, dsp_master_serial_irq, "screen", 0, 1) -static INPUT_PORTS_START( ridgeracf ) - PORT_INCLUDE( ridgera ) + MCFG_CPU_ADD("slave", TMS32025,SS22_MASTER_CLOCK) /* ? */ + MCFG_CPU_PROGRAM_MAP(slave_dsp_program) + MCFG_CPU_DATA_MAP(slave_dsp_data) + MCFG_CPU_IO_MAP(slave_dsp_io) + MCFG_TIMER_DRIVER_ADD_SCANLINE("slave_st", namcos22_state, dsp_slave_serial_irq, "screen", 0, 1) - PORT_MODIFY("INPUTS") - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Ignition Key") - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("AT Switch") - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("MT Switch") - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_SERVICE2 ) - PORT_SERVICE( 0x0400, IP_ACTIVE_LOW ) + MCFG_CPU_ADD("mcu", M37702, SS22_MASTER_CLOCK/3) // C74 on the CPU board has no periodic interrupts, it runs entirely off Timer A0 + MCFG_CPU_PROGRAM_MAP( mcu_s22_program) + MCFG_CPU_IO_MAP( mcu_s22_io) - // DIP3-1 to DIP3-3 are for setting up the viewing angle (game used one board per screen?) - // Some of the other dipswitches are for debugging, like with Ridge Racer 2. - PORT_MODIFY("DSW0") - PORT_DIPUNKNOWN_DIPLOC( 0x0001, 0x0000, "SW2:1" ) // always on? - PORT_DIPUNKNOWN_DIPLOC( 0x0002, 0x0000, "SW2:2" ) // always on? - PORT_DIPNAME( 0x8000, 0x8000, "Test Mode" ) PORT_DIPLOCATION("SW3:8") - PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) -INPUT_PORTS_END + MCFG_CPU_ADD("iomcu", M37702, XTAL_6_144MHz) // 6.144MHz XTAL on I/O board, not sure if it has a divider + MCFG_CPU_PROGRAM_MAP( iomcu_s22_program) + MCFG_CPU_IO_MAP( iomcu_s22_io) -static INPUT_PORTS_START( ridgera2 ) - PORT_INCLUDE( ridgera ) +// MCFG_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) - PORT_MODIFY("INPUTS") - PORT_DIPNAME( 0x2100, 0x2000, DEF_STR( Cabinet ) ) - PORT_DIPSETTING( 0x0000, "50 Inch" ) - PORT_DIPSETTING( 0x0100, "Twin" ) - PORT_DIPSETTING( 0x2000, DEF_STR( Standard ) ) - PORT_DIPSETTING( 0x2100, "Deluxe" ) + MCFG_NVRAM_HANDLER(namcos22) - /* Some dipswitches seem to be for debug purposes, for example: - 2-4 : background drawing related - 2-5 : background drawing related - 2-6 : debug link-up - 2-8 : no game over when time runs out (cheat) - 3-7 : debug polygons - */ - PORT_MODIFY("DSW0") - PORT_DIPNAME( 0x8000, 0x8000, "Test Mode" ) PORT_DIPLOCATION("SW3:8") - PORT_DIPSETTING( 0x8000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) -INPUT_PORTS_END + /* video hardware */ + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) + MCFG_SCREEN_UPDATE_DRIVER(namcos22_state, screen_update_namcos22) -static INPUT_PORTS_START( raveracw ) - PORT_INCLUDE( ridgera ) + MCFG_PALETTE_LENGTH(0x8000) + MCFG_GFXDECODE(namcos22) + MCFG_VIDEO_START_OVERRIDE(namcos22_state,namcos22) - PORT_MODIFY("INPUTS") - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("View Change") - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) // no coin2 + /* sound hardware */ + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") - PORT_DIPNAME( 0x2100, 0x2000, DEF_STR( Cabinet ) ) - PORT_DIPSETTING( 0x0000, "50 Inch" ) - PORT_DIPSETTING( 0x0100, "Twin" ) - PORT_DIPSETTING( 0x2000, DEF_STR( Standard ) ) - PORT_DIPSETTING( 0x2100, "Deluxe" ) -INPUT_PORTS_END + MCFG_C352_ADD("c352", SS22_MASTER_CLOCK/2) + MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) + MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) + MCFG_SOUND_ROUTE(3, "lspeaker", 1.00) +MACHINE_CONFIG_END -/*****************************************************************************************************/ + +// Super System 22 +static MACHINE_CONFIG_START( namcos22s, namcos22_state ) + + /* basic machine hardware */ + MCFG_CPU_ADD("maincpu", M68EC020,SS22_MASTER_CLOCK/2) + MCFG_CPU_PROGRAM_MAP(namcos22s_am) + MCFG_CPU_VBLANK_INT_DRIVER("screen", namcos22_state, namcos22s_interrupt) + + MCFG_CPU_ADD("master", TMS32025,SS22_MASTER_CLOCK) + MCFG_CPU_PROGRAM_MAP(master_dsp_program) + MCFG_CPU_DATA_MAP(master_dsp_data) + MCFG_CPU_IO_MAP(master_dsp_io) + MCFG_TIMER_DRIVER_ADD_SCANLINE("master_st", namcos22_state, dsp_master_serial_irq, "screen", 0, 1) + + MCFG_CPU_ADD("slave", TMS32025,SS22_MASTER_CLOCK) + MCFG_CPU_PROGRAM_MAP(slave_dsp_program) + MCFG_CPU_DATA_MAP(slave_dsp_data) + MCFG_CPU_IO_MAP(slave_dsp_io) + MCFG_TIMER_DRIVER_ADD_SCANLINE("slave_st", namcos22_state, dsp_slave_serial_irq, "screen", 0, 1) + + MCFG_CPU_ADD("mcu", M37710, SS22_MASTER_CLOCK/3) + MCFG_CPU_PROGRAM_MAP(mcu_program) + MCFG_CPU_IO_MAP(mcu_io) + MCFG_TIMER_DRIVER_ADD_SCANLINE("mcu_st", namcos22_state, mcu_irq, "screen", 0, 1) + + MCFG_QUANTUM_TIME(attotime::from_hz(6000)) +// MCFG_QUANTUM_PERFECT_CPU("maincpu") +// MCFG_VIDEO_ATTRIBUTES(VIDEO_ALWAYS_UPDATE) + + MCFG_NVRAM_HANDLER(namcos22) + + /* video hardware */ + MCFG_SCREEN_ADD("screen", RASTER) + MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART) + MCFG_SCREEN_UPDATE_DRIVER(namcos22_state, screen_update_namcos22s) + + MCFG_PALETTE_LENGTH(0x8000) + MCFG_GFXDECODE(super) + MCFG_VIDEO_START_OVERRIDE(namcos22_state,namcos22s) + + /* sound hardware */ + MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") + + MCFG_C352_ADD("c352", SS22_MASTER_CLOCK/2) + MCFG_SOUND_ROUTE(0, "rspeaker", 1.00) + MCFG_SOUND_ROUTE(1, "lspeaker", 1.00) + MCFG_SOUND_ROUTE(2, "rspeaker", 1.00) + MCFG_SOUND_ROUTE(3, "lspeaker", 1.00) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( alpine, namcos22s ) + + /* basic machine hardware */ + MCFG_CPU_MODIFY("mcu") + MCFG_CPU_IO_MAP(alpine_io_map) + + MCFG_TIMER_DRIVER_ADD("motor_timer", namcos22_state, alpine_steplock_callback) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( alpinesa, alpine ) + + /* basic machine hardware */ + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(alpinesa_am) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( timecris, namcos22s ) + + /* basic machine hardware */ + MCFG_CPU_MODIFY("maincpu") + MCFG_CPU_PROGRAM_MAP(timecris_am) +MACHINE_CONFIG_END + +static MACHINE_CONFIG_DERIVED( propcycl, namcos22s ) + + /* basic machine hardware */ + MCFG_CPU_MODIFY("mcu") + MCFG_CPU_IO_MAP(propcycl_io_map) + + MCFG_TIMER_DRIVER_ADD_PERIODIC("pc_p_upd", namcos22_state, propcycl_pedal_update, attotime::from_msec(20)) + MCFG_TIMER_DRIVER_ADD("pc_p_int", namcos22_state, propcycl_pedal_interrupt) +MACHINE_CONFIG_END + +MACHINE_START_MEMBER(namcos22_state,adillor) +{ + machine_start(); + + for (int axis = 0; axis < 2; axis++) + m_ar_tb_interrupt[axis] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(namcos22_state::adillor_trackball_interrupt),this)); +} + +static MACHINE_CONFIG_DERIVED( adillor, namcos22s ) + + /* basic machine hardware */ + MCFG_TIMER_DRIVER_ADD_PERIODIC("ar_tb_upd", namcos22_state, adillor_trackball_update, attotime::from_msec(20)) + + MCFG_MACHINE_START_OVERRIDE(namcos22_state,adillor) +MACHINE_CONFIG_END + + + +/*********************************************************************************************/ + +ROM_START( ridgerac ) + ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "rr3prgll.4d", 0x00003, 0x80000, CRC(856fe5ec) SHA1(72d95b8bd5da551c3d358b8ab266373a89f8aa6a) ) + ROM_LOAD32_BYTE( "rr3prglm.2d", 0x00002, 0x80000, CRC(1e9ef0a9) SHA1(a4577bcdf13673568793d8a324945fca30b10f43) ) + ROM_LOAD32_BYTE( "rr3prgum.8d", 0x00001, 0x80000, CRC(e160f63f) SHA1(9b4b7a13eb4bc19fcb53daedb87e4945c20a1b8e) ) + ROM_LOAD32_BYTE( "rr3prguu.6d", 0x00000, 0x80000, CRC(f07c78c0) SHA1(dbed76d868b761711faf5b6e11f2c9affb91db5d) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ + ROM_LOAD( "rr1data.6r", 0, 0x080000, CRC(18f5f748) SHA1(e0d149a66de36156edd9b55f604c9a9801aaefa8) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "rr1cg0.bin", 0x200000*0x4, 0x200000, CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) )//,CRC(d1b0eec6) SHA1(f66922c324dfc3ff408db7556c587ef90ca64c3b) ) + ROM_LOAD( "rr1cg1.bin", 0x200000*0x5, 0x200000, CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) )//,CRC(bb695d89) SHA1(557bac9d2718519c1f69e374d0ef9a86a43fe86c) ) + ROM_LOAD( "rr1cg2.bin", 0x200000*0x6, 0x200000, CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) )//,CRC(8f374c0a) SHA1(94ff8581de11a03ef86525155f8433bf5858b980) ) + ROM_LOAD( "rr1cg3.bin", 0x200000*0x7, 0x200000, CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) )//,CRC(072a5c47) SHA1(86b8e973ae6b78197d685fe6d14722d8e2d0dfec) ) + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "rr1ccrl.bin",0x000000, 0x200000, CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) )//,CRC(c15cb257) SHA1(0cb8f231c62ea37955be5d452a436a6e815af8e8) ) + ROM_LOAD( "rr1ccrh.bin",0x200000, 0x080000, CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) )//,CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) ) + + ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "rr1potl0.5b", 0x80000*0, 0x80000,CRC(3ac193e3) SHA1(ff213766f15e34dc1b25187b57d94e17930090a3) ) + ROM_LOAD( "rr1potl1.4b", 0x80000*1, 0x80000,CRC(ac3ffba5) SHA1(4eb4dda5faeff237e0d35725b56d309948fba900) ) + ROM_LOAD( "rr1potm0.5c", 0x80000*2, 0x80000,CRC(42a3fa08) SHA1(15db0ae7ccf7f5a77b9dd9a9d82a488b67f8aaff) ) + ROM_LOAD( "rr1potm1.4c", 0x80000*3, 0x80000,CRC(1bc1ea7b) SHA1(52c21eef4989c45acc5fa4deda2d0b63214731c8) ) + ROM_LOAD( "rr1potu0.5d", 0x80000*4, 0x80000,CRC(5e367f72) SHA1(5887f011379dce865fef238b402678a3d2033de9) ) + ROM_LOAD( "rr1potu1.4d", 0x80000*5, 0x80000,CRC(31d92475) SHA1(51d3c0baa223e1bc16ea2950f2e085597528f870) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "rr1wav0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) ) + ROM_LOAD( "rr1wav1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) ) + ROM_LOAD( "rr1wav2.10n", 0x100000*1, 0x100000,CRC(3244cb59) SHA1(b3283b30cfafbfdcbc6d482ecc4ed6a47a527ca4) ) + ROM_LOAD( "rr1wav3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) ) + + ROM_REGION( 0x300, "gamma_proms", 0 ) + ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) +ROM_END + +ROM_START( ridgeracb ) + ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "rr1prll.4d", 0x00003, 0x80000, CRC(4bb7fc86) SHA1(8291375b8ec4d37e0d9e3bf38da2d5907b0f31bd) ) + ROM_LOAD32_BYTE( "rr1prlm.2d", 0x00002, 0x80000, CRC(68e13830) SHA1(ddc447c7afbb5c4238969d7e78bfe9cf8fac6061) ) + ROM_LOAD32_BYTE( "rr1prum.8d", 0x00001, 0x80000, CRC(705ef78a) SHA1(881903413e66d6fd83d46eb18c4e1230531832ae) ) + ROM_LOAD32_BYTE( "rr2pruu.6d", 0x00000, 0x80000, CRC(a79e456f) SHA1(049c596e01e53e3a401c5c4260517f170688d387) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ + ROM_LOAD( "rr1data.6r", 0, 0x080000, CRC(18f5f748) SHA1(e0d149a66de36156edd9b55f604c9a9801aaefa8) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "rr1cg0.bin", 0x200000*0x4, 0x200000, CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) )//,CRC(d1b0eec6) SHA1(f66922c324dfc3ff408db7556c587ef90ca64c3b) ) + ROM_LOAD( "rr1cg1.bin", 0x200000*0x5, 0x200000, CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) )//,CRC(bb695d89) SHA1(557bac9d2718519c1f69e374d0ef9a86a43fe86c) ) + ROM_LOAD( "rr1cg2.bin", 0x200000*0x6, 0x200000, CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) )//,CRC(8f374c0a) SHA1(94ff8581de11a03ef86525155f8433bf5858b980) ) + ROM_LOAD( "rr1cg3.bin", 0x200000*0x7, 0x200000, CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) )//,CRC(072a5c47) SHA1(86b8e973ae6b78197d685fe6d14722d8e2d0dfec) ) + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "rr1ccrl.bin",0x000000, 0x200000, CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) )//,CRC(c15cb257) SHA1(0cb8f231c62ea37955be5d452a436a6e815af8e8) ) + ROM_LOAD( "rr1ccrh.bin",0x200000, 0x080000, CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) )//,CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) ) + + ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "rr1potl0.5b", 0x80000*0, 0x80000,CRC(3ac193e3) SHA1(ff213766f15e34dc1b25187b57d94e17930090a3) ) + ROM_LOAD( "rr1potl1.4b", 0x80000*1, 0x80000,CRC(ac3ffba5) SHA1(4eb4dda5faeff237e0d35725b56d309948fba900) ) + ROM_LOAD( "rr1potm0.5c", 0x80000*2, 0x80000,CRC(42a3fa08) SHA1(15db0ae7ccf7f5a77b9dd9a9d82a488b67f8aaff) ) + ROM_LOAD( "rr1potm1.4c", 0x80000*3, 0x80000,CRC(1bc1ea7b) SHA1(52c21eef4989c45acc5fa4deda2d0b63214731c8) ) + ROM_LOAD( "rr1potu0.5d", 0x80000*4, 0x80000,CRC(5e367f72) SHA1(5887f011379dce865fef238b402678a3d2033de9) ) + ROM_LOAD( "rr1potu1.4d", 0x80000*5, 0x80000,CRC(31d92475) SHA1(51d3c0baa223e1bc16ea2950f2e085597528f870) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "rr1wav0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) ) + ROM_LOAD( "rr1wav1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) ) + ROM_LOAD( "rr1wav2.10n", 0x100000*1, 0x100000,CRC(3244cb59) SHA1(b3283b30cfafbfdcbc6d482ecc4ed6a47a527ca4) ) + ROM_LOAD( "rr1wav3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) ) + + ROM_REGION( 0x300, "gamma_proms", 0 ) + ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) +ROM_END + +ROM_START( ridgeracj ) + ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "rr1prll.4d", 0x00003, 0x80000, CRC(4bb7fc86) SHA1(8291375b8ec4d37e0d9e3bf38da2d5907b0f31bd) ) + ROM_LOAD32_BYTE( "rr1prlm.2d", 0x00002, 0x80000, CRC(68e13830) SHA1(ddc447c7afbb5c4238969d7e78bfe9cf8fac6061) ) + ROM_LOAD32_BYTE( "rr1prum.8d", 0x00001, 0x80000, CRC(705ef78a) SHA1(881903413e66d6fd83d46eb18c4e1230531832ae) ) + ROM_LOAD32_BYTE( "rr1pruu.6d", 0x00000, 0x80000, CRC(c1371f96) SHA1(a78e0bf6c147c034487a85efa0a8470f4e8f4bf0) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ + ROM_LOAD( "rr1data.6r", 0, 0x080000, CRC(18f5f748) SHA1(e0d149a66de36156edd9b55f604c9a9801aaefa8) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "rr1cg0.bin", 0x200000*0x4, 0x200000, CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) )//,CRC(d1b0eec6) SHA1(f66922c324dfc3ff408db7556c587ef90ca64c3b) ) + ROM_LOAD( "rr1cg1.bin", 0x200000*0x5, 0x200000, CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) )//,CRC(bb695d89) SHA1(557bac9d2718519c1f69e374d0ef9a86a43fe86c) ) + ROM_LOAD( "rr1cg2.bin", 0x200000*0x6, 0x200000, CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) )//,CRC(8f374c0a) SHA1(94ff8581de11a03ef86525155f8433bf5858b980) ) + ROM_LOAD( "rr1cg3.bin", 0x200000*0x7, 0x200000, CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) )//,CRC(072a5c47) SHA1(86b8e973ae6b78197d685fe6d14722d8e2d0dfec) ) + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "rr1ccrl.bin",0x000000, 0x200000, CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) )//,CRC(c15cb257) SHA1(0cb8f231c62ea37955be5d452a436a6e815af8e8) ) + ROM_LOAD( "rr1ccrh.bin",0x200000, 0x080000, CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) )//,CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) ) + + ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "rr1potl0.5b", 0x80000*0, 0x80000,CRC(3ac193e3) SHA1(ff213766f15e34dc1b25187b57d94e17930090a3) ) + ROM_LOAD( "rr1potl1.4b", 0x80000*1, 0x80000,CRC(ac3ffba5) SHA1(4eb4dda5faeff237e0d35725b56d309948fba900) ) + ROM_LOAD( "rr1potm0.5c", 0x80000*2, 0x80000,CRC(42a3fa08) SHA1(15db0ae7ccf7f5a77b9dd9a9d82a488b67f8aaff) ) + ROM_LOAD( "rr1potm1.4c", 0x80000*3, 0x80000,CRC(1bc1ea7b) SHA1(52c21eef4989c45acc5fa4deda2d0b63214731c8) ) + ROM_LOAD( "rr1potu0.5d", 0x80000*4, 0x80000,CRC(5e367f72) SHA1(5887f011379dce865fef238b402678a3d2033de9) ) + ROM_LOAD( "rr1potu1.4d", 0x80000*5, 0x80000,CRC(31d92475) SHA1(51d3c0baa223e1bc16ea2950f2e085597528f870) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "rr1wav0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) ) + ROM_LOAD( "rr1wav1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) ) + ROM_LOAD( "rr1wav2.10n", 0x100000*1, 0x100000,CRC(3244cb59) SHA1(b3283b30cfafbfdcbc6d482ecc4ed6a47a527ca4) ) + ROM_LOAD( "rr1wav3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) ) + + ROM_REGION( 0x300, "gamma_proms", 0 ) + ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) +ROM_END + +ROM_START( ridgerac3 ) + ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "rr3prgll-3s.4d", 0x000003, 0x080000, CRC(2c3d8cb7) SHA1(46a7b62938fe3edde5c52ce3fdfe447000cd6af0) ) + ROM_LOAD32_BYTE( "rr3prglm-3s.2d", 0x000002, 0x080000, CRC(b15343f2) SHA1(3056eb5a3036a74b2ac641a4c3221986c0be1e27) ) + ROM_LOAD32_BYTE( "rr3prgum-3s.8d", 0x000001, 0x080000, CRC(8fda06ac) SHA1(7e9adba198eb0941100cda64ecedac504f6ac696) ) + ROM_LOAD32_BYTE( "rr3prguu-3s.6d", 0x000000, 0x080000, CRC(868398df) SHA1(422e0f9884904b0df93fcacd1468b8da0458eb8e) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ + ROM_LOAD( "rr1data.6r", 0, 0x080000, CRC(18f5f748) SHA1(e0d149a66de36156edd9b55f604c9a9801aaefa8) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "rr1cg0.bin", 0x200000*0x4, 0x200000, CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) )//,CRC(d1b0eec6) SHA1(f66922c324dfc3ff408db7556c587ef90ca64c3b) ) + ROM_LOAD( "rr1cg1.bin", 0x200000*0x5, 0x200000, CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) )//,CRC(bb695d89) SHA1(557bac9d2718519c1f69e374d0ef9a86a43fe86c) ) + ROM_LOAD( "rr1cg2.bin", 0x200000*0x6, 0x200000, CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) )//,CRC(8f374c0a) SHA1(94ff8581de11a03ef86525155f8433bf5858b980) ) + ROM_LOAD( "rr1cg3.bin", 0x200000*0x7, 0x200000, CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) )//,CRC(072a5c47) SHA1(86b8e973ae6b78197d685fe6d14722d8e2d0dfec) ) + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "rr1ccrl.bin",0x000000, 0x200000, CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) )//,CRC(c15cb257) SHA1(0cb8f231c62ea37955be5d452a436a6e815af8e8) ) + ROM_LOAD( "rr1ccrh.bin",0x200000, 0x080000, CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) )//,CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) ) + + ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "rr1potl0.5b", 0x80000*0, 0x80000,CRC(3ac193e3) SHA1(ff213766f15e34dc1b25187b57d94e17930090a3) ) + ROM_LOAD( "rr1potl1.4b", 0x80000*1, 0x80000,CRC(ac3ffba5) SHA1(4eb4dda5faeff237e0d35725b56d309948fba900) ) + ROM_LOAD( "rr1potm0.5c", 0x80000*2, 0x80000,CRC(42a3fa08) SHA1(15db0ae7ccf7f5a77b9dd9a9d82a488b67f8aaff) ) + ROM_LOAD( "rr1potm1.4c", 0x80000*3, 0x80000,CRC(1bc1ea7b) SHA1(52c21eef4989c45acc5fa4deda2d0b63214731c8) ) + ROM_LOAD( "rr1potu0.5d", 0x80000*4, 0x80000,CRC(5e367f72) SHA1(5887f011379dce865fef238b402678a3d2033de9) ) + ROM_LOAD( "rr1potu1.4d", 0x80000*5, 0x80000,CRC(31d92475) SHA1(51d3c0baa223e1bc16ea2950f2e085597528f870) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "rr1wav0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) ) + ROM_LOAD( "rr1wav1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) ) + ROM_LOAD( "rr1wav2.10n", 0x100000*1, 0x100000,CRC(3244cb59) SHA1(b3283b30cfafbfdcbc6d482ecc4ed6a47a527ca4) ) + ROM_LOAD( "rr1wav3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) ) + + ROM_REGION( 0x300, "gamma_proms", 0 ) + ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) +ROM_END + +ROM_START( ridgeracf ) + ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "rrf2prgll.4d", 0x00003, 0x80000, CRC(23c6144d) SHA1(99f70e2c60fba7551cafdce12b07da1f8ab8aad6) ) + ROM_LOAD32_BYTE( "rrf2prglm.2d", 0x00002, 0x80000, CRC(1ad638a1) SHA1(505a7f4ba60bbc4e735865fbc5d664311b6045d9) ) + ROM_LOAD32_BYTE( "rrf2prgum.8d", 0x00001, 0x80000, CRC(d7e0aa16) SHA1(cab4578cdd3af84b865114be4105cfdc2e7abf36) ) + ROM_LOAD32_BYTE( "rrf2prguu.6d", 0x00000, 0x80000, CRC(12c808bb) SHA1(64e84686d4ceb8145b9a59b75d0dced830884c9d) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ + ROM_LOAD( "rrf1data.6r", 0, 0x080000, CRC(ce3c6ed6) SHA1(23e033364bc967c10c49fd1d5413dda837670633) ) + + ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "rrf2potl0.l0", 0x80000*0, 0x80000, CRC(9b762e60) SHA1(50b67ff6678bacba140bad3aedda75c30851fa7a) ) + ROM_LOAD( "rrf2potl1.l1", 0x80000*1, 0x80000, CRC(ab4d66b0) SHA1(59020b3dc2efff99cd528752ca7168b64ae96ac4) ) + ROM_LOAD( "rrf2potm0.m0", 0x80000*2, 0x80000, CRC(02d4daa3) SHA1(9b4e48d3234cb91146b5d31ffcf42ad199ccb903) ) + ROM_LOAD( "rrf2potm1.m1", 0x80000*3, 0x80000, CRC(37e005c2) SHA1(036ae1c44aaa6a6904e6d4938572035ccc6854ed) ) + ROM_LOAD( "rrf2potu0.u0", 0x80000*4, 0x80000, CRC(86b3fe98) SHA1(f242d33f7488e233ccdc0b5d309c64510d7a622d) ) + ROM_LOAD( "rrf2potu1.u1", 0x80000*5, 0x80000, CRC(e0c6ce3d) SHA1(cc559a2237ccb753cb1397fecba64733455a8c43) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "rrf1wave0.10r", 0x100000*0, 0x100000,CRC(a8e85bde) SHA1(b56677e9f6c98f7b600043f5dcfef3a482ca7455) ) + ROM_LOAD( "rrf1wave1.10p", 0x100000*2, 0x100000,CRC(35f47c8e) SHA1(7c3f9e942f532af8008fbead2a96fee6084bcde6) ) + ROM_LOAD( "rrf1wave2.10n", 0x100000*1, 0x100000,CRC(4ceeae12) SHA1(ae3a6583f8912bc784c7bc63d32448228cf217ba) ) // differs from normal sets + ROM_LOAD( "rrf1wave3.10l", 0x100000*3, 0x100000,CRC(c4cda1a7) SHA1(60bc96880ec79efdff3cc70c09e848692a40bea4) ) + + /* this stuff was missing from this version, and shouldn't be the same (bad textures if we use these roms) */ + ROM_REGION( 0x300, "gamma_proms", 0 ) + ROM_LOAD( "rrf1gam.2d", 0x0000, 0x0100, BAD_DUMP CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rrf1gam.3d", 0x0100, 0x0100, BAD_DUMP CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rrf1gam.4d", 0x0200, 0x0100, BAD_DUMP CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "rrf1cg0.bin", 0x200000*0x4, 0x200000, BAD_DUMP CRC(b557a795) SHA1(f345486ffbe797246ad80a55d3c4a332ed6e2888) ) + ROM_LOAD( "rrf1cg1.bin", 0x200000*0x5, 0x200000, BAD_DUMP CRC(0fa212d9) SHA1(a1311de0a504e2d399044fa8ac32ec6c56ec965f) ) + ROM_LOAD( "rrf1cg2.bin", 0x200000*0x6, 0x200000, BAD_DUMP CRC(18e2d2bd) SHA1(69c2ea62eeb255f27d3c69373f6716b0a34683cc) ) + ROM_LOAD( "rrf1cg3.bin", 0x200000*0x7, 0x200000, BAD_DUMP CRC(9564488b) SHA1(6b27d1aea75d6be747c62e165cfa49ecc5d9e767) ) + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "rrf1ccrl.bin",0x000000, 0x200000, BAD_DUMP CRC(6092d181) SHA1(52c0e3ac20aa23059a87d1a985d24ae641577310) ) + ROM_LOAD( "rrf1ccrh.bin",0x200000, 0x080000, BAD_DUMP CRC(dd332fd5) SHA1(a7d9c1d6b5a8e3a937b525c1363880e404dcd147) ) +ROM_END + + +ROM_START( ridgera2 ) + ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "rrs2prll.4d", 0x00003, 0x80000, CRC(88199c0f) SHA1(5cf5bb714c3d209943a8d815eaea60afd34641ff) ) + ROM_LOAD32_BYTE( "rrs1prlmb.2d", 0x00002, 0x80000, CRC(8e86f199) SHA1(7bd9ec9147ef0380864508f66203ef2c6ad1f7f6) ) + ROM_LOAD32_BYTE( "rrs1prumb.8d", 0x00001, 0x80000, CRC(78c360b6) SHA1(8ee502291359cbc8aef39145c8fe7538311cc58f) ) + ROM_LOAD32_BYTE( "rrs1pruub.6d", 0x00000, 0x80000, CRC(60d6d4a4) SHA1(759762a9b7d7aee7ee1b44b1721e5356898aa7ea) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ + ROM_LOAD( "rrs1data.6r", 0, 0x080000, CRC(b7063aa8) SHA1(08ff689e8dd529b91eee423c93f084945c6de417) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "rrs1cg0.1a", 0x200000*0x4, 0x200000,CRC(714c0091) SHA1(df29512bd6e64827660c40304051366d2c4d7977) ) + ROM_LOAD( "rrs1cg1.2a", 0x200000*0x5, 0x200000,CRC(836545c1) SHA1(05e3346463d8d42b5d33216207e855033a65510d) ) + ROM_LOAD( "rrs1cg2.3a", 0x200000*0x6, 0x200000,CRC(00e9799d) SHA1(280184451138420f64080efe13e5e2795f7b61d4) ) + ROM_LOAD( "rrs1cg3.5a", 0x200000*0x7, 0x200000,CRC(3858983f) SHA1(feda270b71f1310ecf4c17823bc8827ca2951b40) ) + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "rrs1ccrl.5a", 0x000000, 0x200000,CRC(304a8b57) SHA1(f4f3e7c194697d754375f36a0e41d0941fa5d225) ) + ROM_LOAD( "rrs1ccrh.5c", 0x200000, 0x080000,CRC(bd3c86ab) SHA1(cd3a8774843c5864e651fa8989c80e2d975a13e8) ) + + ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "rrs1pol0.5b", 0x80000*0, 0x80000,CRC(9376c384) SHA1(cde0e36db1beab1523607098a760d81fac2ea90e) ) + ROM_LOAD( "rrs1pol1.4b", 0x80000*1, 0x80000,CRC(094fa832) SHA1(cc59442540b1cdef068c4408b6e048c11042beb8) ) + ROM_LOAD( "rrs1pom0.5c", 0x80000*2, 0x80000,CRC(b47a7f8b) SHA1(0fa0456ad8b4864a7071b5b5ba1a78877c1ac0f0) ) + ROM_LOAD( "rrs1pom1.4c", 0x80000*3, 0x80000,CRC(27260361) SHA1(8775cc779eb8b6a0d79fa84d606c970ec2d6ea8d) ) + ROM_LOAD( "rrs1pou0.5d", 0x80000*4, 0x80000,CRC(74d6ec84) SHA1(63f5beee51443c98100330ec04291f71e10716c4) ) + ROM_LOAD( "rrs1pou1.4d", 0x80000*5, 0x80000,CRC(f527caaa) SHA1(f92bdd15323239d593ddac92a11d23a27e6635ed) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "rrs1wav0.10r", 0x100000*0, 0x100000,CRC(99d11a2d) SHA1(1f3db98a99be0f07c03b0a7817561459a58f310e) ) + ROM_LOAD( "rrs1wav1.10p", 0x100000*2, 0x100000,CRC(ad28444a) SHA1(c31bbf3cae5015e5494fe4988b9b01d822224c69) ) + ROM_LOAD( "rrs1wav2.10n", 0x100000*1, 0x100000,CRC(6f0d4619) SHA1(cd3d57f2ea21497f388ffa29ec7d2665647a01c0) ) + ROM_LOAD( "rrs1wav3.10l", 0x100000*3, 0x100000,CRC(106e761f) SHA1(97f47b857bdcbc79b0aface53dd385e67fcc9108) ) + + ROM_REGION( 0x300, "gamma_proms", 0 ) + ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) +ROM_END + +ROM_START( ridgera2j ) + ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "rrs1prllb.4d", 0x00003, 0x80000, CRC(22f069e5) SHA1(fcaec3aa83853c39d713ed01c511060663027ccd) ) + ROM_LOAD32_BYTE( "rrs1prlmb.2d", 0x00002, 0x80000, CRC(8e86f199) SHA1(7bd9ec9147ef0380864508f66203ef2c6ad1f7f6) ) + ROM_LOAD32_BYTE( "rrs1prumb.8d", 0x00001, 0x80000, CRC(78c360b6) SHA1(8ee502291359cbc8aef39145c8fe7538311cc58f) ) + ROM_LOAD32_BYTE( "rrs1pruub.6d", 0x00000, 0x80000, CRC(60d6d4a4) SHA1(759762a9b7d7aee7ee1b44b1721e5356898aa7ea) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ + ROM_LOAD( "rrs1data.6r", 0, 0x080000, CRC(b7063aa8) SHA1(08ff689e8dd529b91eee423c93f084945c6de417) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "rrs1cg0.1a", 0x200000*0x4, 0x200000,CRC(714c0091) SHA1(df29512bd6e64827660c40304051366d2c4d7977) ) + ROM_LOAD( "rrs1cg1.2a", 0x200000*0x5, 0x200000,CRC(836545c1) SHA1(05e3346463d8d42b5d33216207e855033a65510d) ) + ROM_LOAD( "rrs1cg2.3a", 0x200000*0x6, 0x200000,CRC(00e9799d) SHA1(280184451138420f64080efe13e5e2795f7b61d4) ) + ROM_LOAD( "rrs1cg3.5a", 0x200000*0x7, 0x200000,CRC(3858983f) SHA1(feda270b71f1310ecf4c17823bc8827ca2951b40) ) + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "rrs1ccrl.5a", 0x000000, 0x200000,CRC(304a8b57) SHA1(f4f3e7c194697d754375f36a0e41d0941fa5d225) ) + ROM_LOAD( "rrs1ccrh.5c", 0x200000, 0x080000,CRC(bd3c86ab) SHA1(cd3a8774843c5864e651fa8989c80e2d975a13e8) ) + + ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "rrs1pol0.5b", 0x80000*0, 0x80000,CRC(9376c384) SHA1(cde0e36db1beab1523607098a760d81fac2ea90e) ) + ROM_LOAD( "rrs1pol1.4b", 0x80000*1, 0x80000,CRC(094fa832) SHA1(cc59442540b1cdef068c4408b6e048c11042beb8) ) + ROM_LOAD( "rrs1pom0.5c", 0x80000*2, 0x80000,CRC(b47a7f8b) SHA1(0fa0456ad8b4864a7071b5b5ba1a78877c1ac0f0) ) + ROM_LOAD( "rrs1pom1.4c", 0x80000*3, 0x80000,CRC(27260361) SHA1(8775cc779eb8b6a0d79fa84d606c970ec2d6ea8d) ) + ROM_LOAD( "rrs1pou0.5d", 0x80000*4, 0x80000,CRC(74d6ec84) SHA1(63f5beee51443c98100330ec04291f71e10716c4) ) + ROM_LOAD( "rrs1pou1.4d", 0x80000*5, 0x80000,CRC(f527caaa) SHA1(f92bdd15323239d593ddac92a11d23a27e6635ed) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "rrs1wav0.10r", 0x100000*0, 0x100000,CRC(99d11a2d) SHA1(1f3db98a99be0f07c03b0a7817561459a58f310e) ) + ROM_LOAD( "rrs1wav1.10p", 0x100000*2, 0x100000,CRC(ad28444a) SHA1(c31bbf3cae5015e5494fe4988b9b01d822224c69) ) + ROM_LOAD( "rrs1wav2.10n", 0x100000*1, 0x100000,CRC(6f0d4619) SHA1(cd3d57f2ea21497f388ffa29ec7d2665647a01c0) ) + ROM_LOAD( "rrs1wav3.10l", 0x100000*3, 0x100000,CRC(106e761f) SHA1(97f47b857bdcbc79b0aface53dd385e67fcc9108) ) + + ROM_REGION( 0x300, "gamma_proms", 0 ) + ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) +ROM_END + +ROM_START( ridgera2ja ) + ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "rrs1prll.4d", 0x00003, 0x80000, CRC(fbf785a2) SHA1(b9333c7623f68f48aa6ae50913a22a527a19576a) ) + ROM_LOAD32_BYTE( "rrs1prlm.2d", 0x00002, 0x80000, CRC(562f747a) SHA1(79d818b87c9a992fc9706fb39e6d560c2b0aa392) ) + ROM_LOAD32_BYTE( "rrs1prum.8d", 0x00001, 0x80000, CRC(93259fb0) SHA1(c29787e873797a003db27adbd20d7b852e26d8c6) ) + ROM_LOAD32_BYTE( "rrs1pruu.6d", 0x00000, 0x80000, CRC(31cdefe8) SHA1(ae836d389bed43dd156eb4cf3e97b6f1ad68181e) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ + ROM_LOAD( "rrs1data.6r", 0, 0x080000, CRC(b7063aa8) SHA1(08ff689e8dd529b91eee423c93f084945c6de417) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "rrs1cg0.1a", 0x200000*0x4, 0x200000,CRC(714c0091) SHA1(df29512bd6e64827660c40304051366d2c4d7977) ) + ROM_LOAD( "rrs1cg1.2a", 0x200000*0x5, 0x200000,CRC(836545c1) SHA1(05e3346463d8d42b5d33216207e855033a65510d) ) + ROM_LOAD( "rrs1cg2.3a", 0x200000*0x6, 0x200000,CRC(00e9799d) SHA1(280184451138420f64080efe13e5e2795f7b61d4) ) + ROM_LOAD( "rrs1cg3.5a", 0x200000*0x7, 0x200000,CRC(3858983f) SHA1(feda270b71f1310ecf4c17823bc8827ca2951b40) ) + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "rrs1ccrl.5a", 0x000000, 0x200000,CRC(304a8b57) SHA1(f4f3e7c194697d754375f36a0e41d0941fa5d225) ) + ROM_LOAD( "rrs1ccrh.5c", 0x200000, 0x080000,CRC(bd3c86ab) SHA1(cd3a8774843c5864e651fa8989c80e2d975a13e8) ) + + ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "rrs1pol0.5b", 0x80000*0, 0x80000,CRC(9376c384) SHA1(cde0e36db1beab1523607098a760d81fac2ea90e) ) + ROM_LOAD( "rrs1pol1.4b", 0x80000*1, 0x80000,CRC(094fa832) SHA1(cc59442540b1cdef068c4408b6e048c11042beb8) ) + ROM_LOAD( "rrs1pom0.5c", 0x80000*2, 0x80000,CRC(b47a7f8b) SHA1(0fa0456ad8b4864a7071b5b5ba1a78877c1ac0f0) ) + ROM_LOAD( "rrs1pom1.4c", 0x80000*3, 0x80000,CRC(27260361) SHA1(8775cc779eb8b6a0d79fa84d606c970ec2d6ea8d) ) + ROM_LOAD( "rrs1pou0.5d", 0x80000*4, 0x80000,CRC(74d6ec84) SHA1(63f5beee51443c98100330ec04291f71e10716c4) ) + ROM_LOAD( "rrs1pou1.4d", 0x80000*5, 0x80000,CRC(f527caaa) SHA1(f92bdd15323239d593ddac92a11d23a27e6635ed) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "rrs1wav0.10r", 0x100000*0, 0x100000,CRC(99d11a2d) SHA1(1f3db98a99be0f07c03b0a7817561459a58f310e) ) + ROM_LOAD( "rrs1wav1.10p", 0x100000*2, 0x100000,CRC(ad28444a) SHA1(c31bbf3cae5015e5494fe4988b9b01d822224c69) ) + ROM_LOAD( "rrs1wav2.10n", 0x100000*1, 0x100000,CRC(6f0d4619) SHA1(cd3d57f2ea21497f388ffa29ec7d2665647a01c0) ) + ROM_LOAD( "rrs1wav3.10l", 0x100000*3, 0x100000,CRC(106e761f) SHA1(97f47b857bdcbc79b0aface53dd385e67fcc9108) ) + + ROM_REGION( 0x300, "gamma_proms", 0 ) + ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) +ROM_END + + +ROM_START( raveracw ) + ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "rv2prllb.4d", 0x00003, 0x80000, CRC(3017cd1e) SHA1(ccd648b4a5dfc74fd141815af2969f423311042f) ) + ROM_LOAD32_BYTE( "rv2prlmb.2d", 0x00002, 0x80000, CRC(894be0c3) SHA1(4dba93dc3ca1cf502c5f54018b64ad79bb2a632b) ) + ROM_LOAD32_BYTE( "rv2prumb.8d", 0x00001, 0x80000, CRC(6414a800) SHA1(c278ff644909d12a43ba6fc2bf8d2092e469c3e6) ) + ROM_LOAD32_BYTE( "rv2pruub.6d", 0x00000, 0x80000, CRC(a9f18714) SHA1(8e7b17749d151f92020f68d1ac06003cf1f5c573) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ + ROM_LOAD( "rv1data.6r", 0, 0x080000, CRC(d358ec20) SHA1(140c513349240417bb546dd2d151f3666b818e91) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "rv1cg0.1a", 0x200000*0x0, 0x200000,CRC(c518f06b) SHA1(4c01d453244192dd13087bdc72a7f7be80b47cbc) ) /* rv1cg0.2a */ + ROM_LOAD( "rv1cg1.1c", 0x200000*0x1, 0x200000,CRC(6628f792) SHA1(7a5405c5fcb2f3f001ae17df393c31e61a834f2b) ) /* rv1cg1.2c */ + ROM_LOAD( "rv1cg2.1d", 0x200000*0x2, 0x200000,CRC(0b707cc5) SHA1(38e1a554b278062edc369565353497ac4b016f78) ) /* rv1cg2.2d */ + ROM_LOAD( "rv1cg3.1e", 0x200000*0x3, 0x200000,CRC(39b62921) SHA1(873287d81338baf10dd85214d82f6c38bfdf199e) ) /* rv1cg3.2e */ + ROM_LOAD( "rv1cg4.1f", 0x200000*0x4, 0x200000,CRC(a9791ea2) SHA1(245b2ebbadd1fbca90dc241f88e9f6f341b2a01a) ) /* rv1cg4.2f */ + ROM_LOAD( "rv1cg5.1j", 0x200000*0x5, 0x200000,CRC(b2c79ec1) SHA1(6f669996863bdf1fe09b0c1a2a876625029d3d43) ) /* rv1cg5.2j */ + ROM_LOAD( "rv1cg6.1k", 0x200000*0x6, 0x200000,CRC(8cddedc2) SHA1(e3993f5505bc7e61bec7be5b48c873572e1220f7) ) /* rv1cg6.2k */ + ROM_LOAD( "rv1cg7.1n", 0x200000*0x7, 0x200000,CRC(b39147ca) SHA1(50ca6691fc809c95e6999dd52e39f2b8c2d22f3b) ) /* rv1cg7.2n */ + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "rv1ccrl.5a", 0x000000, 0x200000,CRC(bc634f72) SHA1(b5c504ed92bca7682614fc4c51f38cff607e6f2a) ) /* rv1ccrl.5l */ + ROM_LOAD( "rv1ccrh.5c", 0x200000, 0x080000,CRC(a741b262) SHA1(363076220a0eacc67befda05f8253963e8ffbcaa) ) /* rv1ccrh.5j */ + + ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "rv1potl0.5b", 0x80000*0x0, 0x80000,CRC(de2ce519) SHA1(2fe0dd000571f76d1a4df6a439d40119125170ef) ) + ROM_LOAD( "rv1potl1.4b", 0x80000*0x1, 0x80000,CRC(2215cb5a) SHA1(d48ee692ab3dbcffdc49d22f6f232ca9390da766) ) + ROM_LOAD( "rv1potl2.3b", 0x80000*0x2, 0x80000,CRC(ddb15bf7) SHA1(4c54ec98e0cba10841d43a4ce593cdacfd7f90f8) ) + ROM_LOAD( "rv1potl3.2b", 0x80000*0x3, 0x80000,CRC(fa9361ca) SHA1(35a5c2712bca9c62400b724754de3a931ad21561) ) + ROM_LOAD( "rv1potm0.5c", 0x80000*0x4, 0x80000,CRC(3c024f3a) SHA1(711f0442823797b2d410352796a5cca66af98dce) ) + ROM_LOAD( "rv1potm1.4c", 0x80000*0x5, 0x80000,CRC(b1a32a68) SHA1(e24abb3a7e35d098abae5420bf8ef5c975718987) ) + ROM_LOAD( "rv1potm2.3c", 0x80000*0x6, 0x80000,CRC(a414fe15) SHA1(eb27cdca045ab2ab27dec179043328847fb65e11) ) + ROM_LOAD( "rv1potm3.2c", 0x80000*0x7, 0x80000,CRC(2953bbb4) SHA1(aca1acd87f7130d2522d0c6f8e60beeb7ab7495a) ) + ROM_LOAD( "rv1potu0.5d", 0x80000*0x8, 0x80000,CRC(b9eaf3cc) SHA1(3b2a9041f1fa90706ecf7d4fbff918516f891a07) ) + ROM_LOAD( "rv1potu1.4d", 0x80000*0x9, 0x80000,CRC(a5c55258) SHA1(826d4dde761aec7d848456f7bc4ba6268fe99605) ) + ROM_LOAD( "rv1potu2.3d", 0x80000*0xa, 0x80000,CRC(c18fcb74) SHA1(a4009ae2b014dc89aed4741fd97f84350117c2f4) ) + ROM_LOAD( "rv1potu3.2d", 0x80000*0xb, 0x80000,CRC(79735aaa) SHA1(1cf14274669b916a7641f7a16785da1b72347485) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "rv1wav0.10r", 0x000000, 0x100000, CRC(5aef8143) SHA1(a75d31298e3ff9b290f238976a11e8b85cfb72d3) ) + ROM_LOAD( "rv1wav1.10p", 0x200000, 0x100000, CRC(9ed9e6b3) SHA1(dd1da2b08d1b6aa0912daacc77744c9799aabb78) ) + ROM_LOAD( "rv1wav2.10n", 0x100000, 0x100000, CRC(5af9dc83) SHA1(9aeb7f8217b806a6f3ed93056513af9fbcb6b372) ) + ROM_LOAD( "rv1wav3.10l", 0x300000, 0x100000, CRC(ffb9ad75) SHA1(a9a61a597bd3bbe9732f92747d82264fe4d9af48) ) + + ROM_REGION( 0x300, "gamma_proms", 0 ) + ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + + ROM_REGION( 0x2000, "nvram", 0 ) // default eeprom + ROM_LOAD( "rv1eeprm.9e", 0x0000, 0x2000, CRC(e00dd412) SHA1(f594b31ace5e5e980e904faa8b83a450cc95db17) ) +ROM_END + +ROM_START( raveracj ) + ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "rv1prllb.4d", 0x00003, 0x80000, CRC(71da3eea) SHA1(8a641bb23e0ad89cae5ee1570f8a3627b2434d20) ) + ROM_LOAD32_BYTE( "rv1prlmb.2d", 0x00002, 0x80000, CRC(6ab7e9ce) SHA1(0c6376ca5a63409aeea344bbc201af6c47afe9ab) ) + ROM_LOAD32_BYTE( "rv1prumb.8d", 0x00001, 0x80000, CRC(375fabcf) SHA1(448e3db3e3fab8c7c27e214ab5a5fa84e5f84366) ) + ROM_LOAD32_BYTE( "rv1pruub.6d", 0x00000, 0x80000, CRC(92f834d6) SHA1(028368790f0293fcfea5c7b12f7f315e27a62f77) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ + ROM_LOAD( "rv1data.6r", 0, 0x080000, CRC(d358ec20) SHA1(140c513349240417bb546dd2d151f3666b818e91) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "rv1cg0.1a", 0x200000*0x0, 0x200000,CRC(c518f06b) SHA1(4c01d453244192dd13087bdc72a7f7be80b47cbc) ) /* rv1cg0.2a */ + ROM_LOAD( "rv1cg1.1c", 0x200000*0x1, 0x200000,CRC(6628f792) SHA1(7a5405c5fcb2f3f001ae17df393c31e61a834f2b) ) /* rv1cg1.2c */ + ROM_LOAD( "rv1cg2.1d", 0x200000*0x2, 0x200000,CRC(0b707cc5) SHA1(38e1a554b278062edc369565353497ac4b016f78) ) /* rv1cg2.2d */ + ROM_LOAD( "rv1cg3.1e", 0x200000*0x3, 0x200000,CRC(39b62921) SHA1(873287d81338baf10dd85214d82f6c38bfdf199e) ) /* rv1cg3.2e */ + ROM_LOAD( "rv1cg4.1f", 0x200000*0x4, 0x200000,CRC(a9791ea2) SHA1(245b2ebbadd1fbca90dc241f88e9f6f341b2a01a) ) /* rv1cg4.2f */ + ROM_LOAD( "rv1cg5.1j", 0x200000*0x5, 0x200000,CRC(b2c79ec1) SHA1(6f669996863bdf1fe09b0c1a2a876625029d3d43) ) /* rv1cg5.2j */ + ROM_LOAD( "rv1cg6.1k", 0x200000*0x6, 0x200000,CRC(8cddedc2) SHA1(e3993f5505bc7e61bec7be5b48c873572e1220f7) ) /* rv1cg6.2k */ + ROM_LOAD( "rv1cg7.1n", 0x200000*0x7, 0x200000,CRC(b39147ca) SHA1(50ca6691fc809c95e6999dd52e39f2b8c2d22f3b) ) /* rv1cg7.2n */ + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "rv1ccrl.5a", 0x000000, 0x200000,CRC(bc634f72) SHA1(b5c504ed92bca7682614fc4c51f38cff607e6f2a) ) /* rv1ccrl.5l */ + ROM_LOAD( "rv1ccrh.5c", 0x200000, 0x080000,CRC(a741b262) SHA1(363076220a0eacc67befda05f8253963e8ffbcaa) ) /* rv1ccrh.5j */ + + ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "rv1potl0.5b", 0x80000*0x0, 0x80000,CRC(de2ce519) SHA1(2fe0dd000571f76d1a4df6a439d40119125170ef) ) + ROM_LOAD( "rv1potl1.4b", 0x80000*0x1, 0x80000,CRC(2215cb5a) SHA1(d48ee692ab3dbcffdc49d22f6f232ca9390da766) ) + ROM_LOAD( "rv1potl2.3b", 0x80000*0x2, 0x80000,CRC(ddb15bf7) SHA1(4c54ec98e0cba10841d43a4ce593cdacfd7f90f8) ) + ROM_LOAD( "rv1potl3.2b", 0x80000*0x3, 0x80000,CRC(fa9361ca) SHA1(35a5c2712bca9c62400b724754de3a931ad21561) ) + ROM_LOAD( "rv1potm0.5c", 0x80000*0x4, 0x80000,CRC(3c024f3a) SHA1(711f0442823797b2d410352796a5cca66af98dce) ) + ROM_LOAD( "rv1potm1.4c", 0x80000*0x5, 0x80000,CRC(b1a32a68) SHA1(e24abb3a7e35d098abae5420bf8ef5c975718987) ) + ROM_LOAD( "rv1potm2.3c", 0x80000*0x6, 0x80000,CRC(a414fe15) SHA1(eb27cdca045ab2ab27dec179043328847fb65e11) ) + ROM_LOAD( "rv1potm3.2c", 0x80000*0x7, 0x80000,CRC(2953bbb4) SHA1(aca1acd87f7130d2522d0c6f8e60beeb7ab7495a) ) + ROM_LOAD( "rv1potu0.5d", 0x80000*0x8, 0x80000,CRC(b9eaf3cc) SHA1(3b2a9041f1fa90706ecf7d4fbff918516f891a07) ) + ROM_LOAD( "rv1potu1.4d", 0x80000*0x9, 0x80000,CRC(a5c55258) SHA1(826d4dde761aec7d848456f7bc4ba6268fe99605) ) + ROM_LOAD( "rv1potu2.3d", 0x80000*0xa, 0x80000,CRC(c18fcb74) SHA1(a4009ae2b014dc89aed4741fd97f84350117c2f4) ) + ROM_LOAD( "rv1potu3.2d", 0x80000*0xb, 0x80000,CRC(79735aaa) SHA1(1cf14274669b916a7641f7a16785da1b72347485) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "rv1wav0.10r", 0x000000, 0x100000, CRC(5aef8143) SHA1(a75d31298e3ff9b290f238976a11e8b85cfb72d3) ) + ROM_LOAD( "rv1wav1.10p", 0x200000, 0x100000, CRC(9ed9e6b3) SHA1(dd1da2b08d1b6aa0912daacc77744c9799aabb78) ) + ROM_LOAD( "rv1wav2.10n", 0x100000, 0x100000, CRC(5af9dc83) SHA1(9aeb7f8217b806a6f3ed93056513af9fbcb6b372) ) + ROM_LOAD( "rv1wav3.10l", 0x300000, 0x100000, CRC(ffb9ad75) SHA1(a9a61a597bd3bbe9732f92747d82264fe4d9af48) ) + + ROM_REGION( 0x300, "gamma_proms", 0 ) + ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + + ROM_REGION( 0x2000, "nvram", 0 ) // default eeprom + ROM_LOAD( "rv1eeprm.9e", 0x0000, 0x2000, CRC(e00dd412) SHA1(f594b31ace5e5e980e904faa8b83a450cc95db17) ) +ROM_END + +ROM_START( raveracja ) + ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "rv1prll.4d", 0x00003, 0x80000, CRC(5dfce6cd) SHA1(1aeeca1e507ae4cbe3d39ca5efd1cc4fe1ab03a8) ) + ROM_LOAD32_BYTE( "rv1prlm.2d", 0x00002, 0x80000, CRC(0d4d9f74) SHA1(f886b0629cbf5a369af1f44e53c6fd3f51b3fbc9) ) + ROM_LOAD32_BYTE( "rv1prum.8d", 0x00001, 0x80000, CRC(28e503e3) SHA1(a3071461f840f28c65c660de215c73f812f356b3) ) + ROM_LOAD32_BYTE( "rv1pruu.6d", 0x00000, 0x80000, CRC(c47d9ff4) SHA1(4d7c4ac4151a3b306e7277937add8eee26e561a6) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ + ROM_LOAD( "rv1data.6r", 0, 0x080000, CRC(d358ec20) SHA1(140c513349240417bb546dd2d151f3666b818e91) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "rv1cg0.1a", 0x200000*0x0, 0x200000,CRC(c518f06b) SHA1(4c01d453244192dd13087bdc72a7f7be80b47cbc) ) /* rv1cg0.2a */ + ROM_LOAD( "rv1cg1.1c", 0x200000*0x1, 0x200000,CRC(6628f792) SHA1(7a5405c5fcb2f3f001ae17df393c31e61a834f2b) ) /* rv1cg1.2c */ + ROM_LOAD( "rv1cg2.1d", 0x200000*0x2, 0x200000,CRC(0b707cc5) SHA1(38e1a554b278062edc369565353497ac4b016f78) ) /* rv1cg2.2d */ + ROM_LOAD( "rv1cg3.1e", 0x200000*0x3, 0x200000,CRC(39b62921) SHA1(873287d81338baf10dd85214d82f6c38bfdf199e) ) /* rv1cg3.2e */ + ROM_LOAD( "rv1cg4.1f", 0x200000*0x4, 0x200000,CRC(a9791ea2) SHA1(245b2ebbadd1fbca90dc241f88e9f6f341b2a01a) ) /* rv1cg4.2f */ + ROM_LOAD( "rv1cg5.1j", 0x200000*0x5, 0x200000,CRC(b2c79ec1) SHA1(6f669996863bdf1fe09b0c1a2a876625029d3d43) ) /* rv1cg5.2j */ + ROM_LOAD( "rv1cg6.1k", 0x200000*0x6, 0x200000,CRC(8cddedc2) SHA1(e3993f5505bc7e61bec7be5b48c873572e1220f7) ) /* rv1cg6.2k */ + ROM_LOAD( "rv1cg7.1n", 0x200000*0x7, 0x200000,CRC(b39147ca) SHA1(50ca6691fc809c95e6999dd52e39f2b8c2d22f3b) ) /* rv1cg7.2n */ + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "rv1ccrl.5a", 0x000000, 0x200000,CRC(bc634f72) SHA1(b5c504ed92bca7682614fc4c51f38cff607e6f2a) ) /* rv1ccrl.5l */ + ROM_LOAD( "rv1ccrh.5c", 0x200000, 0x080000,CRC(a741b262) SHA1(363076220a0eacc67befda05f8253963e8ffbcaa) ) /* rv1ccrh.5j */ + + ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "rv1potl0.5b", 0x80000*0x0, 0x80000,CRC(de2ce519) SHA1(2fe0dd000571f76d1a4df6a439d40119125170ef) ) + ROM_LOAD( "rv1potl1.4b", 0x80000*0x1, 0x80000,CRC(2215cb5a) SHA1(d48ee692ab3dbcffdc49d22f6f232ca9390da766) ) + ROM_LOAD( "rv1potl2.3b", 0x80000*0x2, 0x80000,CRC(ddb15bf7) SHA1(4c54ec98e0cba10841d43a4ce593cdacfd7f90f8) ) + ROM_LOAD( "rv1potl3.2b", 0x80000*0x3, 0x80000,CRC(fa9361ca) SHA1(35a5c2712bca9c62400b724754de3a931ad21561) ) + ROM_LOAD( "rv1potm0.5c", 0x80000*0x4, 0x80000,CRC(3c024f3a) SHA1(711f0442823797b2d410352796a5cca66af98dce) ) + ROM_LOAD( "rv1potm1.4c", 0x80000*0x5, 0x80000,CRC(b1a32a68) SHA1(e24abb3a7e35d098abae5420bf8ef5c975718987) ) + ROM_LOAD( "rv1potm2.3c", 0x80000*0x6, 0x80000,CRC(a414fe15) SHA1(eb27cdca045ab2ab27dec179043328847fb65e11) ) + ROM_LOAD( "rv1potm3.2c", 0x80000*0x7, 0x80000,CRC(2953bbb4) SHA1(aca1acd87f7130d2522d0c6f8e60beeb7ab7495a) ) + ROM_LOAD( "rv1potu0.5d", 0x80000*0x8, 0x80000,CRC(b9eaf3cc) SHA1(3b2a9041f1fa90706ecf7d4fbff918516f891a07) ) + ROM_LOAD( "rv1potu1.4d", 0x80000*0x9, 0x80000,CRC(a5c55258) SHA1(826d4dde761aec7d848456f7bc4ba6268fe99605) ) + ROM_LOAD( "rv1potu2.3d", 0x80000*0xa, 0x80000,CRC(c18fcb74) SHA1(a4009ae2b014dc89aed4741fd97f84350117c2f4) ) + ROM_LOAD( "rv1potu3.2d", 0x80000*0xb, 0x80000,CRC(79735aaa) SHA1(1cf14274669b916a7641f7a16785da1b72347485) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "rv1wav0.10r", 0x000000, 0x100000, CRC(5aef8143) SHA1(a75d31298e3ff9b290f238976a11e8b85cfb72d3) ) + ROM_LOAD( "rv1wav1.10p", 0x200000, 0x100000, CRC(9ed9e6b3) SHA1(dd1da2b08d1b6aa0912daacc77744c9799aabb78) ) + ROM_LOAD( "rv1wav2.10n", 0x100000, 0x100000, CRC(5af9dc83) SHA1(9aeb7f8217b806a6f3ed93056513af9fbcb6b372) ) + ROM_LOAD( "rv1wav3.10l", 0x300000, 0x100000, CRC(ffb9ad75) SHA1(a9a61a597bd3bbe9732f92747d82264fe4d9af48) ) + + ROM_REGION( 0x300, "gamma_proms", 0 ) + ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + + ROM_REGION( 0x2000, "nvram", 0 ) // default eeprom + ROM_LOAD( "rv1eeprm.9e", 0x0000, 0x2000, CRC(e00dd412) SHA1(f594b31ace5e5e980e904faa8b83a450cc95db17) ) +ROM_END + + +ROM_START( cybrcomm ) + ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "cy1prgll.4d", 0x00003, 0x80000, CRC(b3eab156) SHA1(2a5c4e0360c3b9500687a4d70f7110a0c30da2a5) ) + ROM_LOAD32_BYTE( "cy1prglm.2d", 0x00002, 0x80000, CRC(884a5b0e) SHA1(0e27ae366b8a2695fe112b4740c8c9013bb97e26) ) + ROM_LOAD32_BYTE( "cy1prgum.8d", 0x00001, 0x80000, CRC(c9c4a921) SHA1(76a52461165a8bd8d984a34063fbeb4cb73624af) ) + ROM_LOAD32_BYTE( "cy1prguu.6d", 0x00000, 0x80000, CRC(5f22975b) SHA1(a1a5cb66358d64a3c564b912f2eeafa182786b1e) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ + ROM_LOAD( "cy1data.6r", 0x00000, 0x20000, CRC(10d0005b) SHA1(10508eeaf74d24a611b44cd3bb12417ceb78904f) ) + ROM_RELOAD( 0x20000, 0x20000) + ROM_RELOAD( 0x40000, 0x20000) + ROM_RELOAD( 0x60000, 0x20000) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "cyc1cg0.1a", 0x200000*0x4, 0x200000,CRC(e839b9bd) SHA1(fee43d37dcca7f1fb952a6bfb886b7ee30b7d75c) ) /* cyc1cg0.6a */ + ROM_LOAD( "cyc1cg1.2a", 0x200000*0x5, 0x200000,CRC(7d13993f) SHA1(96ac82bcc63afe395bae73f005eb66dad7742d48) ) /* cyc1cg1.7a */ + ROM_LOAD( "cyc1cg2.3a", 0x200000*0x6, 0x200000,CRC(7c464566) SHA1(69817ac3a7c6e43b960e8a904962b58b23417163) ) /* cyc1cg2.8a */ + ROM_LOAD( "cyc1cg3.5a", 0x200000*0x7, 0x200000,CRC(2222e16f) SHA1(562bcd4d43b1543303d8fd66d9f0d9a8e3702492) ) /* cyc1cg3.9a */ + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + + //cyc1ccrl.1c FIXED BITS (xxxxxxxx11xxxxxx) + ROM_LOAD( "cyc1ccrl.1c", 0x000000, 0x100000,CRC(1a0dc5f0) SHA1(bf0093d9cbdcb45a82705e966c48a1f408fa344e) ) /* cyc1ccrl.8c */ + + //cyc1ccrh.2c 1xxxxxxxxxxxxxxxxxx = 0xFF + ROM_LOAD( "cyc1ccrh.2c", 0x200000, 0x080000,CRC(8c4090b8) SHA1(456d548a48833e840c5d39d47b2dcca03f8d6321) ) /* cyc1ccrh.7c */ + + ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "cyc1ptl0.5b", 0x80000*0x0, 0x80000,CRC(d91de03d) SHA1(05819d285f6111867c41337bda9c4b9ad5394b6b) ) + ROM_LOAD( "cyc1ptl1.4b", 0x80000*0x1, 0x80000,CRC(e5b98021) SHA1(7416cbf74da969f822e0363ced7a25b967277e28) ) + ROM_LOAD( "cyc1ptl2.3b", 0x80000*0x2, 0x80000,CRC(7ba786c6) SHA1(1a5319dec495453bab9d70ae773a807f0036b355) ) + ROM_LOAD( "cyc1ptm0.5c", 0x80000*0x3, 0x80000,CRC(d454b5c6) SHA1(95ae6f0455e9fd7dff066e74cd4343c94d1bc212) ) + ROM_LOAD( "cyc1ptm1.4c", 0x80000*0x4, 0x80000,CRC(74fdf8cc) SHA1(f2627f400e247b6d4c4157eaf0ec69d57212e566) ) + ROM_LOAD( "cyc1ptm2.3c", 0x80000*0x5, 0x80000,CRC(b9c99a45) SHA1(c86cf594b416776eaf9a32c3cb9d34acc79777e9) ) + ROM_LOAD( "cyc1ptu0.5d", 0x80000*0x6, 0x80000,CRC(4d40897f) SHA1(ffe2a0ab66443553c83512f9a1be94b2e385cf2f) ) + ROM_LOAD( "cyc1ptu1.4d", 0x80000*0x7, 0x80000,CRC(3bdaeeeb) SHA1(826f97e2165af8569cfec03874b16030a9486559) ) + ROM_LOAD( "cyc1ptu2.3d", 0x80000*0x8, 0x80000,CRC(a0e73674) SHA1(1e22142a564e664031c12b250664fc82e3b3d43b) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "cy1wav0.10r", 0x000000, 0x100000, CRC(c6f366a2) SHA1(795dbee09df159d3501c748fb3de16cca81742d6) ) + ROM_LOAD( "cy1wav1.10p", 0x200000, 0x100000, CRC(f30b5e37) SHA1(9f5a94d82741ef9688c6e415ebb9009c906737c9) ) + ROM_LOAD( "cy1wav2.10n", 0x100000, 0x100000, CRC(b98c1ca6) SHA1(4b66aa05f82be5ef3315acc30031872698ff4391) ) + ROM_LOAD( "cy1wav3.10l", 0x300000, 0x100000, CRC(43dbac19) SHA1(83fd4ae4e7ec264fc217ed18caf59bf438af0c3d) ) + + ROM_REGION( 0x300, "gamma_proms", 0 ) + ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + + ROM_REGION( 0x2000, "nvram", 0 ) // default eeprom + ROM_LOAD( "cy1eeprm.9e", 0x0000, 0x2000, CRC(8432c066) SHA1(99d4bfda3f8aec288dbeaf291bce85fe9009a1de) ) +ROM_END + + +ROM_START( acedrvrw ) + ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "ad2prgll.4d", 0x00003, 0x80000, CRC(808c5ff8) SHA1(119c90ecb5aa099a0e5d1d7944c004beacead367) ) + ROM_LOAD32_BYTE( "ad2prglm.2d", 0x00002, 0x80000, CRC(5f726a10) SHA1(d077312c6a387fbdf906d278c73c6a3730687f32) ) + ROM_LOAD32_BYTE( "ad2prgum.8d", 0x00001, 0x80000, CRC(d5042d6e) SHA1(9ae93e7ea7126302831a879ba0aadcb6e5b842f5) ) + ROM_LOAD32_BYTE( "ad2prguu.6d", 0x00000, 0x80000, CRC(86d4661d) SHA1(2a1529a51ca5466994a2d0d84c7aab13cef95a11) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ + ROM_LOAD( "ad1data.6r", 0, 0x080000, CRC(82024f74) SHA1(711ab0c4f027716aeab18e3a5d3d06fa82af8007) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "ad1cg0.1a", 0x200000*0x4, 0x200000,CRC(faaa1ee2) SHA1(878f2b74587ed4d06c5110a0eb0020c49ddc5dfa) ) + ROM_LOAD( "ad1cg1.2a", 0x200000*0x5, 0x200000,CRC(1aab1eb7) SHA1(b8f9eeafec7e0de340cf48e38fa55dd14404c867) ) + ROM_LOAD( "ad1cg2.3a", 0x200000*0x6, 0x200000,CRC(cdcd1874) SHA1(5a7a4a0d897cca4956b0a4f178f39f618c921861) ) + ROM_LOAD( "ad1cg3.5a", 0x200000*0x7, 0x200000,CRC(effdd2cd) SHA1(9ff156e7e38c103b8fa6f3c29776dd38482d9cf2) ) + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "ad1ccrl.1c", 0x000000, 0x200000,CRC(bc3c9b12) SHA1(088e861e5c4b37c54b7f72963113a10870bf7927) ) + ROM_LOAD( "ad1ccrh.2c", 0x200000, 0x080000,CRC(71f44526) SHA1(bb4811fc5de626380ce6a17bee73e5e47926d850) ) + + ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "ad1potl0.5b", 0x80000*0, 0x80000,CRC(dfc7e729) SHA1(5e3deef66d0a5dd2ff0584b8c8be4bf5e798e4d0) ) + ROM_LOAD( "ad1potl1.4b", 0x80000*1, 0x80000,CRC(5914ef8e) SHA1(f6db9c3061ceda76eef0a9538d9c048366b71124) ) + ROM_LOAD( "ad1potm0.5c", 0x80000*2, 0x80000,CRC(844bcd6b) SHA1(629b8dc0a7e94410c08c8874b69d9f4bc22f3e4f) ) + ROM_LOAD( "ad1potm1.4c", 0x80000*3, 0x80000,CRC(515cf541) SHA1(db1522813ea3e982d479cc1903d18799bf75aea9) ) + ROM_LOAD( "ad1potu0.5d", 0x80000*4, 0x80000,CRC(e0f44949) SHA1(ffdb64d600883974b05edaa9ed3071af355ee17f) ) + ROM_LOAD( "ad1potu1.4d", 0x80000*5, 0x80000,CRC(f2cd2cbb) SHA1(19fe6e3454a1e4353c7fe0a0d7a71742fea946de) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "ad1wave0.10r", 0x100000*0, 0x100000,CRC(c7879a72) SHA1(ae04d664858b0944583590ed0003a9420032d5ca) ) + ROM_LOAD( "ad1wave1.10p", 0x100000*2, 0x100000,CRC(69c1d41e) SHA1(b5cdfe7b75075c585dfd842347f8e4e692bb2781) ) + ROM_LOAD( "ad1wave2.10n", 0x100000*1, 0x100000,CRC(365a6831) SHA1(ddaa44a4436d6de120b64a5d130b1ee18f872e19) ) + ROM_LOAD( "ad1wave3.10l", 0x100000*3, 0x100000,CRC(cd8ecb0b) SHA1(7950b5a3a81f5554f57accabc7a623b8265a21a1) ) + + ROM_REGION( 0x300, "gamma_proms", 0 ) + ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) +ROM_END + + +ROM_START( victlapw ) + ROM_REGION( 0x200000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "advprgll.4d", 0x00003, 0x80000, CRC(4dc1b0ab) SHA1(b5913388d16f824af6dbb01b5b0350d510667a87) ) + ROM_LOAD32_BYTE( "advprglm.2d", 0x00002, 0x80000, CRC(7b658bef) SHA1(cf982b49fde0c1897c4c16e77f9eb2a145d8cd42) ) + ROM_LOAD32_BYTE( "advprgum.8d", 0x00001, 0x80000, CRC(af67f2fb) SHA1(f391843ee0d053e33660c60e3718871142d932f2) ) + ROM_LOAD32_BYTE( "advprguu.6d", 0x00000, 0x80000, CRC(b60e5d2b) SHA1(f5740615c2864c5c6433275cf4388bda5122b7a7) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x4000, "iomcu", 0 ) /* I/O MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x4000, "mcu_c74", 0 ) /* SUB/SOUND MCU BIOS */ + ROM_LOAD( "c74.bin", 0x0000, 0x4000, CRC(a3dce360) SHA1(8f3248b1890abb2e649927240ae46f73bb171e3b) ) + + ROM_REGION16_LE( 0x80000, "mcu", 0 ) /* sound data */ + ROM_LOAD( "adv1data.6r", 0, 0x080000, CRC(10eecdb4) SHA1(aaedeed166614e6670e765e0d7e4e9eb5f38ad10) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "adv1cg0.2a", 0x200000*0x0, 0x200000,CRC(13353848) SHA1(c6c7693e3cb086919daf9fcaf6bf602142213073) ) + ROM_LOAD( "adv1cg1.1c", 0x200000*0x1, 0x200000,CRC(1542066c) SHA1(20a053e919b7a81da2a17d31dc7482832a4d4ffe) ) + ROM_LOAD( "adv1cg2.2d", 0x200000*0x2, 0x200000,CRC(111f371c) SHA1(29d8062daae51b3c1712bd30baa9813a2b5b374d) ) + ROM_LOAD( "adv1cg3.1e", 0x200000*0x3, 0x200000,CRC(a077831f) SHA1(71bb95199b368e48bc474123ca84d19213f73137) ) + ROM_LOAD( "adv1cg4.2f", 0x200000*0x4, 0x200000,CRC(71abdacf) SHA1(64409e6aa40dd9e5a6dd1dc306860fbbf6ee7c3e) ) + ROM_LOAD( "adv1cg5.1j", 0x200000*0x5, 0x200000,CRC(cd6cd798) SHA1(51070997a457c0ace078174569cd548ac2226b2d) ) + ROM_LOAD( "adv1cg6.2k", 0x200000*0x6, 0x200000,CRC(94bdafba) SHA1(41e64fa99b342edd8b0ed95ae9869c23e03399e6) ) + ROM_LOAD( "adv1cg7.1n", 0x200000*0x7, 0x200000,CRC(18823475) SHA1(a3244d665b59c352593de21f5cb8d55ddf8cee5c) ) + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "adv1ccrl.5a", 0x000000, 0x200000,CRC(dd2b96ae) SHA1(6337ce17e617234c27ebad578ba82451649aad9c) ) /* ident to adv1ccrl.5l */ + ROM_LOAD( "adv1ccrh.5c", 0x200000, 0x080000,CRC(5719844a) SHA1(a17d7bc239235e9f566931ba4fee1d6ad7964d83) ) /* ident to adv1ccrh.5j */ + + ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "adv1pot.l0", 0x80000*0, 0x80000,CRC(3b85b2a4) SHA1(84c92ed0105618d4aa5508af344b4b6cfa772567) ) + ROM_LOAD( "adv1pot.l1", 0x80000*1, 0x80000,CRC(601d6488) SHA1(c7932103ba6070e17deb3cc06060eed7789f938e) ) + ROM_LOAD( "adv1pot.l2", 0x80000*2, 0x80000,CRC(a0323a84) SHA1(deadf9a47461df7b137759d6886e676137b39fd2) ) + ROM_LOAD( "adv1pot.m0", 0x80000*3, 0x80000,CRC(20951aa2) SHA1(3de55bded443a5b78699cec4845470b53b22301a) ) + ROM_LOAD( "adv1pot.m1", 0x80000*4, 0x80000,CRC(5aed6fbf) SHA1(8cee781d8a12e00635b9a1e5cc8d82e64b17e8f1) ) + ROM_LOAD( "adv1pot.m2", 0x80000*5, 0x80000,CRC(00cbff92) SHA1(09a11ba064aafc921a7ca0add5898d91b773f10a) ) + ROM_LOAD( "adv1pot.u0", 0x80000*6, 0x80000,CRC(6b73dd2a) SHA1(e3654ab2b62e4f3314558209e37c5636f871a6c7) ) + ROM_LOAD( "adv1pot.u1", 0x80000*7, 0x80000,CRC(c8788f74) SHA1(606e10b05146e3db824aa608745de80584420d12) ) + ROM_LOAD( "adv1pot.u2", 0x80000*8, 0x80000,CRC(e67f29c5) SHA1(16222afb4f1f494711dd00ebb347c824db333bae) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "adv1wav0.10r", 0x000000, 0x100000, CRC(f07b2d9d) SHA1(fd46c23b336d5e9a748f7f8d825c19737125d2fb) ) + ROM_LOAD( "adv1wav1.10p", 0x200000, 0x100000, CRC(737f3c7a) SHA1(4737994f146c0076e7270785f41f3a85c53c7c5f) ) + ROM_LOAD( "adv1wav2.10n", 0x100000, 0x100000, CRC(c1a5ca5e) SHA1(27e6f9256d5fe5966e91d6be1e6e80900a764af1) ) + ROM_LOAD( "adv1wav3.10l", 0x300000, 0x100000, CRC(fc6b8004) SHA1(5c9e0805895931ec2b6a43376059bdbf5777222f) ) + + ROM_REGION( 0x300, "gamma_proms", 0 ) + ROM_LOAD( "rr1gam.2d", 0x0000, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.3d", 0x0100, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) + ROM_LOAD( "rr1gam.4d", 0x0200, 0x0100, CRC(b2161bce) SHA1(d2681cc0cf8e68df0d942d392b4eb4458c4bb356) ) +ROM_END + +/*********************************************************************************************/ + +ROM_START( propcycl ) + ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "pr2ver-a.1", 0x00003, 0x100000, CRC(3f58594c) SHA1(5fdd8c61b47b51088a201799ce0c2f08c32ef852) ) + ROM_LOAD32_BYTE( "pr2ver-a.2", 0x00002, 0x100000, CRC(c0da354a) SHA1(f27a71a62385b842404fcd8ed6513158e3639b8f) ) + ROM_LOAD32_BYTE( "pr2ver-a.3", 0x00001, 0x100000, CRC(74bf4b74) SHA1(02713aa07238cc9e30163ae24d12c034aa972ff3) ) + ROM_LOAD32_BYTE( "pr2ver-a.4", 0x00000, 0x100000, CRC(cf4d5638) SHA1(2ddd00d6ec3b85c234820507650d201e176c94a2) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* SS22-BIOS ver1.41 */ + ROM_LOAD( "pr1data.8k", 0, 0x080000, CRC(2e5767a4) SHA1(390bf05c90044d841fe2dd4a427177fa1570b9a6) ) + + ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ + ROM_LOAD( "pr1scg0.12f", 0x200000*0, 0x200000,CRC(2d09a869) SHA1(ce8beabaac255e1de29d944c9866022bad713519) ) /* identical to "pr1scg0.12l" */ + ROM_LOAD( "pr1scg1.10f", 0x200000*1, 0x200000,CRC(7433c5bd) SHA1(a8fd4e73de66e3d443c0cb5b5beef8f467014815) ) /* identical to "pr1scg1.10l" */ + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "pr1cg0.12b", 0x200000*0x0, 0x200000,CRC(0a041238) SHA1(da5688970432f7fe39337ee9fb46ca25a53fdb11) ) /* identical to "pr1cg0.8d" */ + ROM_LOAD( "pr1cg1.10d", 0x200000*0x1, 0x200000,CRC(7d09e6a7) SHA1(892317ee0bd796fa5c70d64912ef2e696792a2d4) ) /* identical to "pr1cg1.13b" */ + ROM_LOAD( "pr1cg2.12d", 0x200000*0x2, 0x200000,CRC(659f006e) SHA1(23362a922cb1100950181fac4858b953d8fc0794) ) /* identical to "pr1cg2.14b" */ + ROM_LOAD( "pr1cg3.13d", 0x200000*0x3, 0x200000,CRC(d30bffa3) SHA1(2f05227d91d257db9fa8cae114974de602d98729) ) /* identical to "pr1cg3.16b" */ + ROM_LOAD( "pr1cg4.14d", 0x200000*0x4, 0x200000,CRC(f4636cc9) SHA1(4e01a476e418e5790878572e83a8a11536ce30ae) ) /* identical to "pr1cg4.18b" */ + ROM_LOAD( "pr1cg5.16d", 0x200000*0x5, 0x200000,CRC(97d333de) SHA1(e8f8383f49aae834dd8b57231b25899703cef966) ) /* identical to "pr1cg5.19b" */ + ROM_LOAD( "pr1cg6.18a", 0x200000*0x6, 0x200000,CRC(3e081c03) SHA1(6ccb162952f6076359b2785b5d800b39a9a3c5ce) ) /* identical to "pr1cg6.18d" */ + ROM_LOAD( "pr1cg7.15a", 0x200000*0x7, 0x200000,CRC(ec9fc5c8) SHA1(16de614b26f06bbddae3ab56cebba45efd6fe81b) ) /* identical to "pr1cg7.19d" */ + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "pr1ccrl.3d", 0x000000, 0x200000,CRC(e01321fd) SHA1(5938c6eff8e1b3642728c3be733f567a97cb5aad) ) /* identical to "pr1ccrl.7b" */ + ROM_LOAD( "pr1ccrh.1d", 0x200000, 0x080000,CRC(1d68bc31) SHA1(d534d0daebe7018e83b57cc7919c294ab89bddc8) ) /* identical to "pr1ccrh.5b" */ + /* These two ROMs define a huge texture tilemap using the tiles from "textile". + * The tilemap has 0x100 columns. + * + * pr1ccrl contains little endian 16 bit words. Each word references a 16x16 tile. + * + * pr1ccrh.1d contains packed nibbles. Each nibble encodes three tile attributes: + * 0x8 = swapxy + * 0x4 = flipx + * 0x2 = flipy + * 0x1 = tile bank (used in some sys22 games) + */ + + ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "pr1ptrl0.18k", 0x80000*0, 0x80000,CRC(fddb27a2) SHA1(6e837b45e3f9ed7ca3d1a457d0f0124de5618d1f) ) + ROM_LOAD( "pr1ptrl1.16k", 0x80000*1, 0x80000,CRC(6964dd06) SHA1(f38a550165504693d20892a7dcfaf01db19b04ef) ) + ROM_LOAD( "pr1ptrl2.15k", 0x80000*2, 0x80000,CRC(4d7ed1d4) SHA1(8f72864a06ff8962e640cb36d062bddf5d110308) ) + + ROM_LOAD( "pr1ptrm0.18j", 0x80000*3, 0x80000,CRC(b6f204b7) SHA1(3b34f240b399b6406faaf338ae0ab536247e64a6) ) + ROM_LOAD( "pr1ptrm1.16j", 0x80000*4, 0x80000,CRC(949588b7) SHA1(fdaf50ff2496200b9c981efc18b035f3c0a96ace) ) + ROM_LOAD( "pr1ptrm2.15j", 0x80000*5, 0x80000,CRC(dc1cef0a) SHA1(8cbc02cf73fac3cc110b676d77602ae628385eae) ) + + ROM_LOAD( "pr1ptru0.18f", 0x80000*6, 0x80000,CRC(5d66a7c4) SHA1(c9ed1c18724192d45c1f6b40096f15d02baf2401) ) + ROM_LOAD( "pr1ptru1.16f", 0x80000*7, 0x80000,CRC(e9a3f72b) SHA1(f967e1adf8eee4fffdf4288d36a93c5bb4f9a126) ) + ROM_LOAD( "pr1ptru2.15f", 0x80000*8, 0x80000,CRC(c346a842) SHA1(299bc0a30d0e74d8adfa3dc605aebf6439f5bc18) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "pr1wavea.2l", 0x000000, 0x400000, CRC(320f3913) SHA1(3887b7334ca7762794c14198dd24bab47fcd9505) ) + ROM_LOAD( "pr1waveb.1l", 0x800000, 0x400000, CRC(d91acb26) SHA1(c2161e2d70e08aed15cbc875ffee685190611daf) ) +ROM_END + + +ROM_START( airco22b ) + ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "acs1verb.1", 0x00003, 0x100000, CRC(062c4f61) SHA1(98e1c75dd0f493eb6ebb64b46543217c1d40116e) ) + ROM_LOAD32_BYTE( "acs1verb.2", 0x00002, 0x100000, CRC(8ae69711) SHA1(4c5323fa8f0419275e330fec66d1fb2b89bb3795) ) + ROM_LOAD32_BYTE( "acs1verb.3", 0x00001, 0x100000, CRC(71738e67) SHA1(eb8c66dedbeff911b6166ebbda466fb9656ef0fb) ) + ROM_LOAD32_BYTE( "acs1verb.4", 0x00000, 0x100000, CRC(3b193add) SHA1(5e3bca13905bfa3a2947f4f16ca01878b0a14a3a) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.20 */ + ROM_LOAD( "acs1data.8k", 0, 0x080000, CRC(33824bc9) SHA1(80ec63883770e5eec1f5f1ddc16a85ef8f22a48b) ) + + ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ + ROM_LOAD( "acs1scg0.12l", 0x200000*0, 0x200000,CRC(e5235404) SHA1(3133b71d1bde3a9815cd02e97382b8078b62b0bb) ) + ROM_LOAD( "acs1scg1.10l", 0x200000*1, 0x200000,CRC(828e91e7) SHA1(8383b029cd29fbad107fd49e866defb50c11c99a) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "acs1cg0.8d", 0x200000*0x0, 0x200000,CRC(1f31343e) SHA1(25ba730cec74e0ed0b404f5c4430b7c3368c9b52) ) + ROM_LOAD( "acs1cg1.10d", 0x200000*0x1, 0x200000,CRC(ccd5481d) SHA1(050e6fc7d4e0591f8ffc9552d140b6bd4533c06d) ) + ROM_LOAD( "acs1cg2.12d", 0x200000*0x2, 0x200000,CRC(14e5d0d2) SHA1(3147ad11098030e9cfd93fbc0a1b3aafa8b8aba6) ) + ROM_LOAD( "acs1cg3.13d", 0x200000*0x3, 0x200000,CRC(1a7bcc16) SHA1(bbc4ca5b208bea8394d1679e4e2d17d22331e2c8) ) + ROM_LOAD( "acs1cg4.14d", 0x200000*0x4, 0x200000,CRC(1920b7fb) SHA1(56318f2a96c55998bb9a8d791d56be3dfb39867e) ) + ROM_LOAD( "acs1cg5.16d", 0x200000*0x5, 0x200000,CRC(3dd109b7) SHA1(a7f914b9b80f1bca1afb6144698578a29ca74676) ) + ROM_LOAD( "acs1cg6.18d", 0x200000*0x6, 0x200000,CRC(ec71c8a3) SHA1(86892a91883d483ca0d422b78fa36042e02f3ad3) ) + ROM_LOAD( "acs1cg7.19d", 0x200000*0x7, 0x200000,CRC(82271757) SHA1(023c935e78b14da310e4c29da8785b82aa3241ac) ) + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "acs1ccrl.3d", 0x000000, 0x200000,CRC(07088ba1) SHA1(a962c0821d5af28ed508cfdbd613675454e306e3) ) + ROM_LOAD( "acs1ccrh.1d", 0x200000, 0x080000,CRC(62936af6) SHA1(ca80b68415aa2cd2ce4e90404f10640d0ae38be9) ) + + ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "acs1ptl0.18k", 0x80000*0x0, 0x80000,CRC(bd5896c7) SHA1(58ec7d0f1e0bfdbf4908e1d920bbd7f094993777) ) + ROM_LOAD( "acs1ptl1.16k", 0x80000*0x1, 0x80000,CRC(e583b975) SHA1(beb0cc2b44bc69af057c2bb744cd7e1b95de577a) ) + ROM_LOAD( "acs1ptl2.15k", 0x80000*0x2, 0x80000,CRC(802d737a) SHA1(3d99a369db70d13fb87c2ff26c82b4b39afe94d9) ) + ROM_LOAD( "acs1ptl3.14k", 0x80000*0x3, 0x80000,CRC(fe556ecb) SHA1(9d9dbbb4f1d3688fb763001834640d79d9987d47) ) + + ROM_LOAD( "acs1ptm0.18j", 0x80000*0x4, 0x80000,CRC(949b6c58) SHA1(6ea016551b10f5d5764921dcc5a4b81d2b93d701) ) + ROM_LOAD( "acs1ptm1.16j", 0x80000*0x5, 0x80000,CRC(8b2b99d9) SHA1(89c3545c4035509307728a9577018c1100ce3a54) ) + ROM_LOAD( "acs1ptm2.15j", 0x80000*0x6, 0x80000,CRC(f1515080) SHA1(27a87217a140477a6840a610c95ae57abc0d01a6) ) + ROM_LOAD( "acs1ptm3.14j", 0x80000*0x7, 0x80000,CRC(e364f4aa) SHA1(3af6a864765871664cccad82c4795f677be68d51) ) + + ROM_LOAD( "acs1ptu0.18f", 0x80000*0x8, 0x80000,CRC(746b3084) SHA1(73397d1f22300fb3a81a0a068da4d0a8cfdc0a36) ) + ROM_LOAD( "acs1ptu1.16f", 0x80000*0x9, 0x80000,CRC(b44f1d3b) SHA1(f3f1a85c082053653e4da7d7f01f1baef1a013c8) ) + ROM_LOAD( "acs1ptu2.15f", 0x80000*0xa, 0x80000,CRC(fdd2d778) SHA1(0269f971d778e908a1efb5a63b08fb3365d98c2a) ) + ROM_LOAD( "acs1ptu3.14f", 0x80000*0xb, 0x80000,CRC(38b425d4) SHA1(8ff6dd6775d42afdff4c9fb2232e4d72b38e515a) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "acs1wav0.1", 0x400000, 0x400000, CRC(52fb9762) SHA1(125c163e62d701c2e17ba0b572ed27c944ca0412) ) + ROM_LOAD( "acs1wav1.2", 0x800000, 0x400000, CRC(b568dca2) SHA1(503deb277691d801acac1380ded2868a5d5ac501) ) +ROM_END + + +ROM_START( cybrcycc ) + ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "cb2ver-c.1", 0x00003, 0x100000, CRC(a8e07a14) SHA1(9bef7068c9bf792960df922ea79e4565d7680433) ) + ROM_LOAD32_BYTE( "cb2ver-c.2", 0x00002, 0x100000, CRC(054c504f) SHA1(9bde803ff09be0402f9b0388e55407362a2508e3) ) + ROM_LOAD32_BYTE( "cb2ver-c.3", 0x00001, 0x100000, CRC(47e6306c) SHA1(39d6fc2c3cb9b4c9d3569cedb79b916a90537115) ) + ROM_LOAD32_BYTE( "cb2ver-c.4", 0x00000, 0x100000, CRC(398426e4) SHA1(f20cd4892420e7b978baa51c9129b362422a3895) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */ + ROM_LOAD( "cb1datab.8k", 0, 0x080000, CRC(e2404221) SHA1(b88810dd45aee8a5475c30806cdfded25fa14e0e) ) + + ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ + ROM_LOAD( "cb1scg0.12f", 0x200000*0, 0x200000,CRC(7aaca90d) SHA1(9808819db5d86d555a03bb20a2fbedf060d04f0e) ) /* identical to "cb1scg0.12l" */ + + ROM_REGION( 0x200000*7, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "cb1cg0.12b", 0x200000*0x0, 0x200000,CRC(762a47a0) SHA1(8a49c700dca7afec5d8d6a38fedcd3ad4b0e6713) ) /* identical to "cb1cg0.8d" */ + ROM_LOAD( "cb1cg1.10d", 0x200000*0x1, 0x200000,CRC(df92c3e6) SHA1(302d7ee7e073a45e7baa948543bd30251f903a6d) ) /* identical to "cb1cg1.13b" */ + ROM_LOAD( "cb1cg2.12d", 0x200000*0x2, 0x200000,CRC(07bc508e) SHA1(7675694d10b50e57bb10b350559bd321df75d1ea) ) /* identical to "cb1cg2.14b" */ + ROM_LOAD( "cb1cg3.13d", 0x200000*0x3, 0x200000,CRC(50c86dea) SHA1(7837a1d2bd3ade470f7fbc732513dd598badd219) ) /* identical to "cb1cg3.16b" */ + ROM_LOAD( "cb1cg4.14d", 0x200000*0x4, 0x200000,CRC(e93b8894) SHA1(4d28b557b7ed2667e6af9f970f3e99cda785b940) ) /* identical to "cb1cg4.18b" */ + ROM_LOAD( "cb1cg5.16d", 0x200000*0x5, 0x200000,CRC(9ee610a1) SHA1(ebc7892b6a66461ca6b6b912a264da1594340b2d) ) /* identical to "cb1cg5.19b" */ + ROM_LOAD( "cb1cg6.18a", 0x200000*0x6, 0x200000,CRC(ddc3b5cc) SHA1(34edffee9eb6fbf4a00fce0da34d9354b1a1155f) ) /* identical to "cb1cg6.18d" */ + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "cb1ccrl.3d", 0x000000, 0x200000,CRC(2f171c48) SHA1(52b76213e37379b4a5cea7de40cf5396dc2998d8) ) /* identical to "cb1ccrl.7b" */ + ROM_LOAD( "cb1ccrh.1d", 0x200000, 0x080000,CRC(86124b93) SHA1(f2cfd726313cbeff162d402a15de2360377630e7) ) /* identical to "cb1ccrh.5b" */ + + ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "cb1ptrl0.18k", 0x80000*0x0, 0x80000,CRC(f1393a03) SHA1(c9e808601eef5839e6bff630e5f83380e073c5c0) ) + ROM_LOAD( "cb1ptrl1.16k", 0x80000*0x1, 0x80000,CRC(2ad51de7) SHA1(efd102b960ca10cda70da84661acf61e4bbb9f00) ) + ROM_LOAD( "cb1ptrl2.15k", 0x80000*0x2, 0x80000,CRC(78f77c0d) SHA1(5183a8909c2ac0a3d80e707393bcbb4441d79a3c) ) + ROM_LOAD( "cb1ptrl3.14k", 0x80000*0x3, 0x80000,CRC(804bfb4a) SHA1(74b3fc3931265398e23605d3da7ca84a002da632) ) + ROM_LOAD( "cb1ptrm0.18j", 0x80000*0x4, 0x80000,CRC(f4eece49) SHA1(3f34d1ae5986f0d340563ab0fb637bfdacb8712c) ) + ROM_LOAD( "cb1ptrm1.16j", 0x80000*0x5, 0x80000,CRC(5f3cbd7d) SHA1(d00d0a96b71d6a3b98907c4ba7c702e549dd0adb) ) + ROM_LOAD( "cb1ptrm2.15j", 0x80000*0x6, 0x80000,CRC(02c7e4af) SHA1(6a541a28163b1026a824f6f8aed05d0eb0c8ae93) ) + ROM_LOAD( "cb1ptrm3.14j", 0x80000*0x7, 0x80000,CRC(ace3123b) SHA1(2b590ed967572d77b3cc6b37e341a5bdc55c762f) ) + ROM_LOAD( "cb1ptru0.18f", 0x80000*0x8, 0x80000,CRC(58d35341) SHA1(a5fe00bdcf39521f0465743664ff0dd78be5d6e8) ) + ROM_LOAD( "cb1ptru1.16f", 0x80000*0x9, 0x80000,CRC(f4d005b0) SHA1(0862ed1dd0818bfb765d97f1f9d996c321b0ec83) ) + ROM_LOAD( "cb1ptru2.15f", 0x80000*0xa, 0x80000,CRC(68ffcd50) SHA1(5ca5f71b6b079fde14d76c869d211a815bffae68) ) + ROM_LOAD( "cb1ptru3.14f", 0x80000*0xb, 0x80000,CRC(d89c1c2b) SHA1(9c25df696b2d120ce33d7774381460297740007a) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "cb1wavea.2l", 0x000000, 0x400000, CRC(b79a624d) SHA1(c0ee358a183ba6d0835731dbdd191b64718fde6e) ) + ROM_LOAD( "cb1waveb.1l", 0x800000, 0x200000, CRC(33bf08f6) SHA1(bf9d68b26a8158ea1abfe8428b7454cac25242c5) ) + + ROM_REGION( 0x4000, "nvram", 0 ) // default eeprom + ROM_LOAD( "cybrcycc_defaults.nv", 0x0000, 0x4000, CRC(1ef95c25) SHA1(26b8bead9d62a420ee0ff770df83c4207a963065) ) +ROM_END + + +ROM_START( alpinerd ) + ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "ar2ver-d.1", 0x00003, 0x100000, CRC(fa3380b9) SHA1(2a46988745bd2672f8082399a68ae0d0ab3d28f2) ) + ROM_LOAD32_BYTE( "ar2ver-d.2", 0x00002, 0x100000, CRC(76141352) SHA1(0f7230dd9cd6f1b83d499034affc7bc2c4385ab5) ) + ROM_LOAD32_BYTE( "ar2ver-d.3", 0x00001, 0x100000, CRC(9beffe6a) SHA1(d8efd1e3829d32bb06537d7cecb59f8df9b6d663) ) + ROM_LOAD32_BYTE( "ar2ver-d.4", 0x00000, 0x100000, CRC(1f3f1134) SHA1(0afa78444d1463d214f1afd7ec500af76d567489) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */ + ROM_LOAD( "ar1datab.8k", 0, 0x080000, CRC(c26306f8) SHA1(6d8d993c076d5ced523143a86bd0938b3794478d) ) + + ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ + ROM_LOAD( "ar1scg0.12f", 0x200000*0, 0x200000,CRC(e7be830a) SHA1(60e2162eecd7401a0c26c525de2715cbfb10c1c5) ) /* identical to "ar1scg0.12l" */ + ROM_LOAD( "ar1scg1.10f", 0x200000*1, 0x200000,CRC(8f15a686) SHA1(bce2d4380c6c39aa402566ddb0f62bbe6d7bfa1d) ) /* identical to "ar1scg1.10l" */ + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "ar1cg0.12b", 0x200000*0x0, 0x200000,CRC(93f3a9d9) SHA1(7e94c81ad5ace98a2f0d00d101d464883d38c197) ) /* identical to "ar1cg0.8d" */ + ROM_LOAD( "ar1cg1.10d", 0x200000*0x1, 0x200000,CRC(39828c8b) SHA1(424aa67eb0b898c9cab8a4749893a9c5696ac430) ) /* identical to "ar1cg1.13b" */ + ROM_LOAD( "ar1cg2.12d", 0x200000*0x2, 0x200000,CRC(f7b058d1) SHA1(fffd0f01724a26dd47b1ecceecf4a139d5746f81) ) /* identical to "ar1cg2.14b" */ + ROM_LOAD( "ar1cg3.13d", 0x200000*0x3, 0x200000,CRC(c28a3d2a) SHA1(cdc44fdbc99274e860c834e42b4cfafb478d4d26) ) /* identical to "ar1cg3.16b" */ + ROM_LOAD( "ar1cg4.14d", 0x200000*0x4, 0x200000,CRC(abdb161f) SHA1(260bff9b0e94c1b2ea4b9d7fa170fbca212e85ee) ) /* identical to "ar1cg4.18b" */ + ROM_LOAD( "ar1cg5.16d", 0x200000*0x5, 0x200000,CRC(2381cfea) SHA1(1de4c8b94df233fd74771fa47843290a3d8df0c8) ) /* identical to "ar1cg5.19b" */ + ROM_LOAD( "ar1cg6.18a", 0x200000*0x6, 0x200000,CRC(ca0b6d23) SHA1(df969e0eeec557a95584b06995b0d55f2c6ec70a) ) /* identical to "ar1cg6.18d" */ + ROM_LOAD( "ar1cg7.15a", 0x200000*0x7, 0x200000,CRC(ffb9f9f9) SHA1(2b8c75b580f77e887df7d50909a3a95cda570e20) ) /* identical to "ar1cg7.19d" */ + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "ar1ccrl.3d", 0x000000, 0x200000,CRC(17387b2c) SHA1(dfd7cadaf97917347c0fa98f395364a543e49612) ) /* identical to "ar1ccrl.7b" */ + ROM_LOAD( "ar1ccrh.1d", 0x200000, 0x080000,CRC(ee7a4803) SHA1(8383c9a8ef5ed94df13446ca5cefa5f9e518f175) ) /* identical to "pr1ccrh.5b" */ + + ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "ar1ptrl0.18k", 0x80000*0x0, 0x80000,CRC(82405108) SHA1(0a40882a9bc8621c620bede404c78f6b1333f223) ) + ROM_LOAD( "ar1ptrl1.16k", 0x80000*0x1, 0x80000,CRC(8739b09c) SHA1(cd603c4dc2f9ffc4185f891eb83e4c383c564294) ) + ROM_LOAD( "ar1ptrl2.15k", 0x80000*0x2, 0x80000,CRC(bda693a9) SHA1(fe71dd3c63198737aa2d39527f0004e977e3be20) ) + ROM_LOAD( "ar1ptrl3.14k", 0x80000*0x3, 0x80000,CRC(82797405) SHA1(2f205fee2d33e183c80a906fb38900167c011240) ) + + ROM_LOAD( "ar1ptrm0.18j", 0x80000*0x4, 0x80000,CRC(64bd6620) SHA1(2e33ff22208805ece304128be8887646fc890f6d) ) + ROM_LOAD( "ar1ptrm1.16j", 0x80000*0x5, 0x80000,CRC(2232f0a5) SHA1(3fccf6d4a0c4100cc85e3051024d659c4a1c769e) ) + ROM_LOAD( "ar1ptrm2.15j", 0x80000*0x6, 0x80000,CRC(8ee14e6f) SHA1(f6f1cbb748b109b365255378c18e710ba6270c1c) ) + ROM_LOAD( "ar1ptrm3.14j", 0x80000*0x7, 0x80000,CRC(1094a970) SHA1(d41b10f48e1ef312bcaf09f27fabc7252c30e648) ) + + ROM_LOAD( "ar1ptru0.18f", 0x80000*0x8, 0x80000,CRC(26d88467) SHA1(d528f989fab4dd5ac1aec9b596a05fbadcc0587a) ) + ROM_LOAD( "ar1ptru1.16f", 0x80000*0x9, 0x80000,CRC(c5e2c208) SHA1(152fde0b95a5df8c781e4a83577cfbbc7672ae0d) ) + ROM_LOAD( "ar1ptru2.15f", 0x80000*0xa, 0x80000,CRC(1321ec59) SHA1(dbd3687a4c6b1aa0b18e336f99dabb9010d36639) ) + ROM_LOAD( "ar1ptru3.14f", 0x80000*0xb, 0x80000,CRC(139d7dc1) SHA1(6d25e6ad552a91a0c5fc03db7e1a801ccf9c9556) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "ar1wavea.2l", 0, 0x200000, CRC(dbf64562) SHA1(454fd7d5b860f0e5557d8900393be95d6c992ad1) ) + + ROM_REGION( 0x4000, "nvram", 0 ) // default eeprom + ROM_LOAD( "alpiner_defaults.nv", 0x0000, 0x4000, CRC(46c06e51) SHA1(df3a16fe3a0858b14c51d48539d9ab3eb3a213de) ) +ROM_END + +ROM_START( alpinerc ) + ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "ar2ver-c.1", 0x00003, 0x100000, CRC(61323842) SHA1(e3c33248340bee252f230124fa9b7fa935a60565) ) + ROM_LOAD32_BYTE( "ar2ver-c.2", 0x00002, 0x100000, CRC(43795b2d) SHA1(e060f3259661279a36300431c5ca7347bde8b6ec) ) + ROM_LOAD32_BYTE( "ar2ver-c.3", 0x00001, 0x100000, CRC(acb3003b) SHA1(ea0cbf3a1607b06b108df051f38fec1f214f42d2) ) + ROM_LOAD32_BYTE( "ar2ver-c.4", 0x00000, 0x100000, CRC(800acc21) SHA1(41d26766da2db46954a2351bbc50aea94bc1d564) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */ + ROM_LOAD( "ar1datab.8k", 0, 0x080000, CRC(c26306f8) SHA1(6d8d993c076d5ced523143a86bd0938b3794478d) ) + + ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ + ROM_LOAD( "ar1scg0.12f", 0x200000*0, 0x200000,CRC(e7be830a) SHA1(60e2162eecd7401a0c26c525de2715cbfb10c1c5) ) /* identical to "ar1scg0.12l" */ + ROM_LOAD( "ar1scg1.10f", 0x200000*1, 0x200000,CRC(8f15a686) SHA1(bce2d4380c6c39aa402566ddb0f62bbe6d7bfa1d) ) /* identical to "ar1scg1.10l" */ + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "ar1cg0.12b", 0x200000*0x0, 0x200000,CRC(93f3a9d9) SHA1(7e94c81ad5ace98a2f0d00d101d464883d38c197) ) /* identical to "ar1cg0.8d" */ + ROM_LOAD( "ar1cg1.10d", 0x200000*0x1, 0x200000,CRC(39828c8b) SHA1(424aa67eb0b898c9cab8a4749893a9c5696ac430) ) /* identical to "ar1cg1.13b" */ + ROM_LOAD( "ar1cg2.12d", 0x200000*0x2, 0x200000,CRC(f7b058d1) SHA1(fffd0f01724a26dd47b1ecceecf4a139d5746f81) ) /* identical to "ar1cg2.14b" */ + ROM_LOAD( "ar1cg3.13d", 0x200000*0x3, 0x200000,CRC(c28a3d2a) SHA1(cdc44fdbc99274e860c834e42b4cfafb478d4d26) ) /* identical to "ar1cg3.16b" */ + ROM_LOAD( "ar1cg4.14d", 0x200000*0x4, 0x200000,CRC(abdb161f) SHA1(260bff9b0e94c1b2ea4b9d7fa170fbca212e85ee) ) /* identical to "ar1cg4.18b" */ + ROM_LOAD( "ar1cg5.16d", 0x200000*0x5, 0x200000,CRC(2381cfea) SHA1(1de4c8b94df233fd74771fa47843290a3d8df0c8) ) /* identical to "ar1cg5.19b" */ + ROM_LOAD( "ar1cg6.18a", 0x200000*0x6, 0x200000,CRC(ca0b6d23) SHA1(df969e0eeec557a95584b06995b0d55f2c6ec70a) ) /* identical to "ar1cg6.18d" */ + ROM_LOAD( "ar1cg7.15a", 0x200000*0x7, 0x200000,CRC(ffb9f9f9) SHA1(2b8c75b580f77e887df7d50909a3a95cda570e20) ) /* identical to "ar1cg7.19d" */ + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "ar1ccrl.3d", 0x000000, 0x200000,CRC(17387b2c) SHA1(dfd7cadaf97917347c0fa98f395364a543e49612) ) /* identical to "ar1ccrl.7b" */ + ROM_LOAD( "ar1ccrh.1d", 0x200000, 0x080000,CRC(ee7a4803) SHA1(8383c9a8ef5ed94df13446ca5cefa5f9e518f175) ) /* identical to "pr1ccrh.5b" */ + + ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "ar1ptrl0.18k", 0x80000*0x0, 0x80000,CRC(82405108) SHA1(0a40882a9bc8621c620bede404c78f6b1333f223) ) + ROM_LOAD( "ar1ptrl1.16k", 0x80000*0x1, 0x80000,CRC(8739b09c) SHA1(cd603c4dc2f9ffc4185f891eb83e4c383c564294) ) + ROM_LOAD( "ar1ptrl2.15k", 0x80000*0x2, 0x80000,CRC(bda693a9) SHA1(fe71dd3c63198737aa2d39527f0004e977e3be20) ) + ROM_LOAD( "ar1ptrl3.14k", 0x80000*0x3, 0x80000,CRC(82797405) SHA1(2f205fee2d33e183c80a906fb38900167c011240) ) + + ROM_LOAD( "ar1ptrm0.18j", 0x80000*0x4, 0x80000,CRC(64bd6620) SHA1(2e33ff22208805ece304128be8887646fc890f6d) ) + ROM_LOAD( "ar1ptrm1.16j", 0x80000*0x5, 0x80000,CRC(2232f0a5) SHA1(3fccf6d4a0c4100cc85e3051024d659c4a1c769e) ) + ROM_LOAD( "ar1ptrm2.15j", 0x80000*0x6, 0x80000,CRC(8ee14e6f) SHA1(f6f1cbb748b109b365255378c18e710ba6270c1c) ) + ROM_LOAD( "ar1ptrm3.14j", 0x80000*0x7, 0x80000,CRC(1094a970) SHA1(d41b10f48e1ef312bcaf09f27fabc7252c30e648) ) + + ROM_LOAD( "ar1ptru0.18f", 0x80000*0x8, 0x80000,CRC(26d88467) SHA1(d528f989fab4dd5ac1aec9b596a05fbadcc0587a) ) + ROM_LOAD( "ar1ptru1.16f", 0x80000*0x9, 0x80000,CRC(c5e2c208) SHA1(152fde0b95a5df8c781e4a83577cfbbc7672ae0d) ) + ROM_LOAD( "ar1ptru2.15f", 0x80000*0xa, 0x80000,CRC(1321ec59) SHA1(dbd3687a4c6b1aa0b18e336f99dabb9010d36639) ) + ROM_LOAD( "ar1ptru3.14f", 0x80000*0xb, 0x80000,CRC(139d7dc1) SHA1(6d25e6ad552a91a0c5fc03db7e1a801ccf9c9556) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "ar1wavea.2l", 0, 0x200000, CRC(dbf64562) SHA1(454fd7d5b860f0e5557d8900393be95d6c992ad1) ) + + ROM_REGION( 0x4000, "nvram", 0 ) // default eeprom + ROM_LOAD( "alpiner_defaults.nv", 0x0000, 0x4000, CRC(46c06e51) SHA1(df3a16fe3a0858b14c51d48539d9ab3eb3a213de) ) +ROM_END + + +ROM_START( alpinr2b ) + ROM_REGION( 0x800000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "ars2ver-b.2", 0x000003, 0x200000, CRC(ed977f83) SHA1(26c57cdfc15f799a999ee22f141e1c0cabfc91dc) ) + ROM_LOAD32_BYTE( "ars2ver-b.3", 0x000001, 0x200000, CRC(8e7a9983) SHA1(34c82e5f080efe04d6b77a77a8391cb48b69c1af) ) + ROM_LOAD32_BYTE( "ars2ver-b.4", 0x000002, 0x200000, CRC(610e49c2) SHA1(433c6d2216551bac31584306f748af1c912c3b07) ) + ROM_LOAD32_BYTE( "ars2ver-b.5", 0x000000, 0x200000, CRC(7f3517b0) SHA1(3e6ba1a51bf235f40f933aae1f00638b88bba522) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */ + ROM_LOAD( "ars2data.8k", 0x000000, 0x080000, CRC(29b36dcb) SHA1(70fde130c11789c822829493a70ecefb077c0c15) ) + + ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ + ROM_LOAD( "ars1scg0.12f", 0x000000, 0x200000, CRC(bc49ed86) SHA1(289b39f2cb21c723dbe4ddd64ee4b2c5fa65c368) ) + + ROM_REGION( 0xc00000, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "ars1cg0.8d", 0x000000, 0x200000, CRC(74f4515c) SHA1(1e3a96281d543213d10c962b4d387c414d76e0c3) ) + ROM_LOAD( "ars1cg1.10d", 0x200000, 0x200000, CRC(329a95c1) SHA1(2cad7fd9e5ca7c64729ca2548ef4f873a0b8de64) ) + ROM_LOAD( "ars1cg2.12d", 0x400000, 0x200000, CRC(5648345a) SHA1(0dc7aedba65b7d97687a9e38a63597f16cee6179) ) + ROM_LOAD( "ars1cg3.13d", 0x600000, 0x200000, CRC(a752f205) SHA1(373b5a69e4488bc30763568ceae512ab7039f5f8) ) + ROM_LOAD( "ars1cg4.14d", 0x800000, 0x200000, CRC(54bf35b6) SHA1(aec43b66e7597ad7d113ae785417bf26164c1bca) ) + ROM_LOAD( "ars1cg5.16d", 0xa00000, 0x200000, CRC(e24a19a2) SHA1(34c1b51eea954ae3000602e550eb1cef0a10e651) ) + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "ars1ccrl.3d", 0x000000, 0x200000, CRC(fc8c9161) SHA1(ad0fcfae27e02d68a6f8d1d03c514dc2f12d9ee8) ) + ROM_LOAD( "ars1ccrh.1d", 0x200000, 0x080000, CRC(a17660bb) SHA1(bae2c3f20772c6cea99f271ee3f39b1f999038c6) ) + + ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "ars1ptrl0.18k", 0x000000, 0x080000, CRC(f04e0e61) SHA1(d58a1d3ca1d0922e134db21a04feaee7dc97b020) ) + ROM_LOAD( "ars1ptrl1.16k", 0x080000, 0x080000, CRC(8bdb4970) SHA1(a504cd4beca4bedd1a7a228c83dd6b844ca3a1e0) ) + ROM_LOAD( "ars1ptrl2.15k", 0x100000, 0x080000, CRC(ec993a4f) SHA1(883f64e3e8d951415e9cef589c354eba9406c0aa) ) + ROM_LOAD( "ars1ptrl3.14k", 0x180000, 0x080000, CRC(4d453f3c) SHA1(7a82e5d8f974d9e56d0031b35e73647fe6aeec2e) ) + + ROM_LOAD( "ars1ptrm0.18j", 0x200000, 0x080000, CRC(d1bdc524) SHA1(b898bb38de397551ada4da4677dd733bf8fa5010) ) + ROM_LOAD( "ars1ptrm1.16j", 0x280000, 0x080000, CRC(86b81c81) SHA1(45096abf46794f06a4b647f5e4222798d8467632) ) + ROM_LOAD( "ars1ptrm2.15j", 0x300000, 0x080000, CRC(24116b83) SHA1(41c6a880abce7b543c409fda767682b2537b0d99) ) + ROM_LOAD( "ars1ptrm3.14j", 0x380000, 0x080000, CRC(772bede3) SHA1(f9565b7a40f0bbf11081d619fe5a46feafce2e56) ) + + ROM_LOAD( "ars1ptru0.18f", 0x400000, 0x080000, CRC(a4cf197a) SHA1(ee78cc259e87395df75179bbe5b6e521e762b582) ) + ROM_LOAD( "ars1ptru1.16f", 0x480000, 0x080000, CRC(1deb1fc0) SHA1(bfd1dfcaccf5a0f851b6757995fa7195452a3965) ) + ROM_LOAD( "ars1ptru2.15f", 0x500000, 0x080000, CRC(bcfad0ba) SHA1(bee7f2f9ecd2b289c6706e19fa86863913b286b5) ) + ROM_LOAD( "ars1ptru3.14f", 0x580000, 0x080000, CRC(73ce6958) SHA1(918b0fb0fca33dbe3be3ac679b8b28f58213f75b) ) + + ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */ + ROM_LOAD( "ars1wavea.2l", 0x000000, 0x400000, CRC(f8d107e9) SHA1(5c418691f0b35403553f21f5570eda8bbb66890f) ) + ROM_LOAD( "ars2waveb.1l", 0x800000, 0x400000, CRC(deab4ad1) SHA1(580ad88d516280baaf6cc92b2e07cdc0cfc486f3) ) + + ROM_REGION( 0x4000, "nvram", 0 ) // default eeprom + ROM_LOAD( "alpiner2_defaults.nv", 0x0000, 0x4000, CRC(1d660b8b) SHA1(e6047ad2d61fa55e8f054813f5c705fd7d145a73) ) +ROM_END + +ROM_START( alpinr2a ) + ROM_REGION( 0x800000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "ars2ver-a.2", 0x000003, 0x200000, CRC(b07b15a4) SHA1(ea3b2d7b4ef4ccf3aafeef7e7eac92e8d446f4e7) ) + ROM_LOAD32_BYTE( "ars2ver-a.3", 0x000002, 0x200000, CRC(90a92e40) SHA1(bf8083256e56e7e33e61b4cdaf9fd03dabfb36ba) ) + ROM_LOAD32_BYTE( "ars2ver-a.4", 0x000001, 0x200000, CRC(9e9d771d) SHA1(6fb983e3f4f8233544667b1bbf87864e4fb8698c) ) + ROM_LOAD32_BYTE( "ars2ver-a.5", 0x000000, 0x200000, CRC(e93c7771) SHA1(305f35488a55be1b845702df972bba8334c0726c) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */ + ROM_LOAD( "ars2data.8k", 0x000000, 0x080000, CRC(29b36dcb) SHA1(70fde130c11789c822829493a70ecefb077c0c15) ) + + ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ + ROM_LOAD( "ars1scg0.12f", 0x000000, 0x200000, CRC(bc49ed86) SHA1(289b39f2cb21c723dbe4ddd64ee4b2c5fa65c368) ) + + ROM_REGION( 0xc00000, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "ars1cg0.8d", 0x000000, 0x200000, CRC(74f4515c) SHA1(1e3a96281d543213d10c962b4d387c414d76e0c3) ) + ROM_LOAD( "ars1cg1.10d", 0x200000, 0x200000, CRC(329a95c1) SHA1(2cad7fd9e5ca7c64729ca2548ef4f873a0b8de64) ) + ROM_LOAD( "ars1cg2.12d", 0x400000, 0x200000, CRC(5648345a) SHA1(0dc7aedba65b7d97687a9e38a63597f16cee6179) ) + ROM_LOAD( "ars1cg3.13d", 0x600000, 0x200000, CRC(a752f205) SHA1(373b5a69e4488bc30763568ceae512ab7039f5f8) ) + ROM_LOAD( "ars1cg4.14d", 0x800000, 0x200000, CRC(54bf35b6) SHA1(aec43b66e7597ad7d113ae785417bf26164c1bca) ) + ROM_LOAD( "ars1cg5.16d", 0xa00000, 0x200000, CRC(e24a19a2) SHA1(34c1b51eea954ae3000602e550eb1cef0a10e651) ) + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "ars1ccrl.3d", 0x000000, 0x200000, CRC(fc8c9161) SHA1(ad0fcfae27e02d68a6f8d1d03c514dc2f12d9ee8) ) + ROM_LOAD( "ars1ccrh.1d", 0x200000, 0x080000, CRC(a17660bb) SHA1(bae2c3f20772c6cea99f271ee3f39b1f999038c6) ) + + ROM_REGION( 0x80000*12, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "ars1ptrl0.18k", 0x000000, 0x080000, CRC(f04e0e61) SHA1(d58a1d3ca1d0922e134db21a04feaee7dc97b020) ) + ROM_LOAD( "ars1ptrl1.16k", 0x080000, 0x080000, CRC(8bdb4970) SHA1(a504cd4beca4bedd1a7a228c83dd6b844ca3a1e0) ) + ROM_LOAD( "ars1ptrl2.15k", 0x100000, 0x080000, CRC(ec993a4f) SHA1(883f64e3e8d951415e9cef589c354eba9406c0aa) ) + ROM_LOAD( "ars1ptrl3.14k", 0x180000, 0x080000, CRC(4d453f3c) SHA1(7a82e5d8f974d9e56d0031b35e73647fe6aeec2e) ) + + ROM_LOAD( "ars1ptrm0.18j", 0x200000, 0x080000, CRC(d1bdc524) SHA1(b898bb38de397551ada4da4677dd733bf8fa5010) ) + ROM_LOAD( "ars1ptrm1.16j", 0x280000, 0x080000, CRC(86b81c81) SHA1(45096abf46794f06a4b647f5e4222798d8467632) ) + ROM_LOAD( "ars1ptrm2.15j", 0x300000, 0x080000, CRC(24116b83) SHA1(41c6a880abce7b543c409fda767682b2537b0d99) ) + ROM_LOAD( "ars1ptrm3.14j", 0x380000, 0x080000, CRC(772bede3) SHA1(f9565b7a40f0bbf11081d619fe5a46feafce2e56) ) + + ROM_LOAD( "ars1ptru0.18f", 0x400000, 0x080000, CRC(a4cf197a) SHA1(ee78cc259e87395df75179bbe5b6e521e762b582) ) + ROM_LOAD( "ars1ptru1.16f", 0x480000, 0x080000, CRC(1deb1fc0) SHA1(bfd1dfcaccf5a0f851b6757995fa7195452a3965) ) + ROM_LOAD( "ars1ptru2.15f", 0x500000, 0x080000, CRC(bcfad0ba) SHA1(bee7f2f9ecd2b289c6706e19fa86863913b286b5) ) + ROM_LOAD( "ars1ptru3.14f", 0x580000, 0x080000, CRC(73ce6958) SHA1(918b0fb0fca33dbe3be3ac679b8b28f58213f75b) ) + + ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */ + ROM_LOAD( "ars1wavea.2l", 0x000000, 0x400000, CRC(f8d107e9) SHA1(5c418691f0b35403553f21f5570eda8bbb66890f) ) + ROM_LOAD( "ars2waveb.1l", 0x800000, 0x400000, CRC(deab4ad1) SHA1(580ad88d516280baaf6cc92b2e07cdc0cfc486f3) ) + + ROM_REGION( 0x4000, "nvram", 0 ) // default eeprom + ROM_LOAD( "alpiner2_defaults.nv", 0x0000, 0x4000, CRC(1d660b8b) SHA1(e6047ad2d61fa55e8f054813f5c705fd7d145a73) ) +ROM_END + + +ROM_START( alpinesa ) + ROM_REGION( 0x800000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "af2ver-a_ll.ic2", 0x000003, 0x200000, CRC(e776159d) SHA1(5110364afb7ec606074d58a1d216d7d687b9df62) ) + ROM_LOAD32_BYTE( "af2ver-a_lm.ic3", 0x000002, 0x200000, CRC(c5333d38) SHA1(9486cead964f95f8e56dac2f88486f3b98561aa6) ) + ROM_LOAD32_BYTE( "af2ver-a_um.ic4", 0x000001, 0x200000, CRC(5977fc6e) SHA1(19b8041789f8987934fa461972976a3570b1b87b) ) + ROM_LOAD32_BYTE( "af2ver-a_uu.ic5", 0x000000, 0x200000, CRC(54ee33a1) SHA1(0eaa8707ab13a0a66551f61a08986c98f5c9e446) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */ + ROM_LOAD( "af1data.8k", 0x000000, 0x080000, CRC(ef13ebe8) SHA1(5d3f697994d4b5b19ee7fea1e2aef8e39449b68e) ) + + ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ + ROM_LOAD( "af1scg0b.12f", 0x000000, 0x200000, CRC(46a6222a) SHA1(5322ef60690625b9b8dbe1cfe0c49dcd9c8b1a4c) ) + + ROM_REGION( 0x200000*5, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "af1cg0.8d", 0x200000*0, 0x200000, CRC(7423f3ff) SHA1(6a2fd44823ef46111deb57d328b1b75cc355d413) ) + ROM_LOAD( "af1cg1.10d", 0x200000*1, 0x200000, CRC(ea76689a) SHA1(73dd3af737a3e9903abe5ed9c9ae7eded51d8350) ) + ROM_LOAD( "af1cg2.12d", 0x200000*2, 0x200000, CRC(2a38943a) SHA1(15d737996f49bf6374ef6191bbfbe0298d398378) ) + ROM_LOAD( "af1cg3.13d", 0x200000*3, 0x200000, CRC(7f5a3e0f) SHA1(241f9995323b28df23d20a75e1f43ce6e05434cd) ) + ROM_LOAD( "af1cg4.14d", 0x200000*4, 0x200000, CRC(a5ee13e2) SHA1(48fd3c912690f21cbbc2a39bed0a82be41a0d011) ) + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "af1ccrl.3d", 0x000000, 0x200000, CRC(6c054698) SHA1(8537607646b183883c5aa4060fb0af640da4af87) ) + ROM_LOAD( "af1ccrh.1d", 0x200000, 0x080000, CRC(95a02a27) SHA1(32ee87b76ae9fcec6d825e3cf4d5cbb97db39544) ) + + ROM_REGION( 0x80000*6, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "af1ptrl0.18k", 0x80000*0, 0x80000, CRC(31ce46d3) SHA1(568fb9ee9ac14e613a4fd7668cb38315c10be62b) ) + ROM_LOAD( "af1ptrl1.16k", 0x80000*1, 0x80000, CRC(e869bf00) SHA1(b3c3026891ae3958d1774c905e97c3b57a414ea7) ) + ROM_LOAD( "af1ptrm0.18j", 0x80000*2, 0x80000, CRC(ef7f4d8a) SHA1(02f77c68004b7dccc99b61126e7d07960eb15028) ) + ROM_LOAD( "af1ptrm1.16j", 0x80000*3, 0x80000, CRC(7dd01d52) SHA1(adc1087435d31ed6163ad046466955f01517450f) ) + ROM_LOAD( "af1ptru0.18f", 0x80000*4, 0x80000, CRC(177f1591) SHA1(3969e780e5603eca0a65f65c1ad14d1cef918b39) ) + ROM_LOAD( "af1ptru1.16f", 0x80000*5, 0x80000, CRC(7521d18e) SHA1(dc03ef369db16f59c138ff4e22260d1c04782d1f) ) + + ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */ + ROM_LOAD( "af1wavea.2l", 0x000000, 0x400000, CRC(28cca494) SHA1(4ff87ab85fd17bf8dbee5b03d99cc5c31dd6349a) ) + + ROM_REGION( 0x4000, "nvram", 0 ) // default eeprom + ROM_LOAD( "alpinesa_defaults.nv", 0x0000, 0x4000, CRC(9744207c) SHA1(bbd34ee138c116d281c718f14740e2883a5cdf49) ) +ROM_END + + +ROM_START( timecris ) + ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "ts2ver-b.1", 0x00003, 0x100000, CRC(29b377f7) SHA1(21864ba964602115c1268fd5edd8006a13a86cfc) ) + ROM_LOAD32_BYTE( "ts2ver-b.2", 0x00002, 0x100000, CRC(79512e25) SHA1(137a215ec192e76e93511456ad504481a566c9c9) ) + ROM_LOAD32_BYTE( "ts2ver-b.3", 0x00001, 0x100000, CRC(9f4ced33) SHA1(32768b5ff263a9e3d11b7b36f6b2d7e951e07419) ) + ROM_LOAD32_BYTE( "ts2ver-b.4", 0x00000, 0x100000, CRC(3e0cfb38) SHA1(3c56342bd73b1617ea579a0d53e19d59bb04fd99) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */ + ROM_LOAD( "ts1data.8k", 0, 0x080000, CRC(e68aa973) SHA1(663e80d249be5d5841139d98a9d72e2396851272) ) + + ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ + ROM_LOAD( "ts1scg0.12f",0x200000*0, 0x200000,CRC(14a3674d) SHA1(c5792a385572452b43bbc7eb8428335b19daa3c0) ) + ROM_LOAD( "ts1scg1.10f",0x200000*1, 0x200000,CRC(11791dbf) SHA1(3d75b468d69a8bf398d45f310cdb8bc88b63f25c) ) + ROM_LOAD( "ts1scg2.8f", 0x200000*2, 0x200000,CRC(d630fff9) SHA1(691394027b858702f06282f965f5b53e6fed496b) ) + ROM_LOAD( "ts1scg3.7f", 0x200000*3, 0x200000,CRC(1a62f015) SHA1(7d09ae480ae7813391616ae0090929ba845a345a) ) + ROM_LOAD( "ts1scg4.5f", 0x200000*4, 0x200000,CRC(511b8dd6) SHA1(936649c0a61d29f024a28e4ab64cce4b55d58f64) ) + ROM_LOAD( "ts1scg5.3f", 0x200000*5, 0x200000,CRC(553bb246) SHA1(94659bee4fd0afe834a8bf3414d8825411cf9e86) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "ts1cg0.8d", 0x200000*0x0, 0x200000,CRC(de07b22c) SHA1(f4d07b8840ec8be625eff634bce619e960c334a5) ) + ROM_LOAD( "ts1cg1.10d", 0x200000*0x1, 0x200000,CRC(992d26f6) SHA1(a0b9007312804b413d4c1748527378da4d8d53b3) ) + ROM_LOAD( "ts1cg2.12d", 0x200000*0x2, 0x200000,CRC(6273954f) SHA1(d73a43888b53e4c42fc33e8e1b38e60fd3329413) ) + ROM_LOAD( "ts1cg3.13d", 0x200000*0x3, 0x200000,CRC(38171f24) SHA1(d04caaa5b1b377ced38501b014e4cb7fc831c41d) ) + ROM_LOAD( "ts1cg4.14d", 0x200000*0x4, 0x200000,CRC(51f09856) SHA1(0eef421907ee813d5117e62cf0005bf00eb29c88) ) + ROM_LOAD( "ts1cg5.16d", 0x200000*0x5, 0x200000,CRC(4cd9fd79) SHA1(0d2018ec914683a75bdec8655d678fd562eb6d15) ) + ROM_LOAD( "ts1cg6.18d", 0x200000*0x6, 0x200000,CRC(f17f2ec9) SHA1(ed88ec524626e5bbe2e1ea6838412d3ac85671dd) ) + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "ts1ccrl.3d", 0x000000, 0x200000,CRC(56cad2df) SHA1(49c0e57d5cf5d5fc4c75da6969bec01d6d443259) ) + ROM_LOAD( "ts1ccrh.1d", 0x200000, 0x080000,CRC(a1cc3741) SHA1(7fe57924c42e287b134e5d7ad00cffdff1f18084) ) + + ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "ts1ptrl0.18k", 0x80000*0, 0x80000,CRC(e5f2d275) SHA1(2f5057e65ec8a3ec03f841f15f10769ae1f69139) ) + ROM_LOAD( "ts1ptrl1.16k", 0x80000*1, 0x80000,CRC(2bba3800) SHA1(1d9c944cb06417cb0ac47a58b922dddb83387586) ) + ROM_LOAD( "ts1ptrl2.15k", 0x80000*2, 0x80000,CRC(d4441c08) SHA1(6a6bb9cecbf35cb81b7681e220fc33df9a01d07f) ) + ROM_LOAD( "ts1ptrm0.18j", 0x80000*3, 0x80000,CRC(8aea02ba) SHA1(44ba85ba6d59758448d17ec39dfb628882ddc684) ) + ROM_LOAD( "ts1ptrm1.16j", 0x80000*4, 0x80000,CRC(bccf19bc) SHA1(4a6566948bdd2b0f82b7c30e57d3fe65005c26e3) ) + ROM_LOAD( "ts1ptrm2.15j", 0x80000*5, 0x80000,CRC(7280be31) SHA1(476b7171ae855d8bbd968ccbaa55b5100d274e3b) ) + ROM_LOAD( "ts1ptru0.18f", 0x80000*6, 0x80000,CRC(c30d6332) SHA1(a5c59d0abfe38de975fa0d606ed8500eb02008b7) ) + ROM_LOAD( "ts1ptru1.16f", 0x80000*7, 0x80000,CRC(993cde84) SHA1(c9cdcca1d60bcc41ad881c02dda9895563963ead) ) + ROM_LOAD( "ts1ptru2.15f", 0x80000*8, 0x80000,CRC(7cb25c73) SHA1(616eab3ac238864a584394f7ec8736ece227974a) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "ts1wavea.2l", 0x000000, 0x400000, CRC(d1123301) SHA1(4bf1fd746fef4e6befa63c61a761971d729e1573) ) + ROM_LOAD( "ts1waveb.1l", 0x800000, 0x200000, CRC(bf4d7272) SHA1(c7c7b3620e7b3176644b6784ee36e679c9e31cc1) ) +ROM_END + +ROM_START( timecrisa ) + ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_WORD_SWAP( "ts2ver-a.1", 0x00002, 0x200000, CRC(d57eb74b) SHA1(536dd9305d0ac44110c575776333310cc57b5242) ) + ROM_LOAD32_WORD_SWAP( "ts2ver-a.2", 0x00000, 0x200000, CRC(671588af) SHA1(63f992c6795521fd263a0ebf230f8dc88cbfc443) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.30 */ + ROM_LOAD( "ts1data.8k", 0, 0x080000, CRC(e68aa973) SHA1(663e80d249be5d5841139d98a9d72e2396851272) ) + + ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ + ROM_LOAD( "ts1scg0.12f",0x200000*0, 0x200000,CRC(14a3674d) SHA1(c5792a385572452b43bbc7eb8428335b19daa3c0) ) + ROM_LOAD( "ts1scg1.10f",0x200000*1, 0x200000,CRC(11791dbf) SHA1(3d75b468d69a8bf398d45f310cdb8bc88b63f25c) ) + ROM_LOAD( "ts1scg2.8f", 0x200000*2, 0x200000,CRC(d630fff9) SHA1(691394027b858702f06282f965f5b53e6fed496b) ) + ROM_LOAD( "ts1scg3.7f", 0x200000*3, 0x200000,CRC(1a62f015) SHA1(7d09ae480ae7813391616ae0090929ba845a345a) ) + ROM_LOAD( "ts1scg4.5f", 0x200000*4, 0x200000,CRC(511b8dd6) SHA1(936649c0a61d29f024a28e4ab64cce4b55d58f64) ) + ROM_LOAD( "ts1scg5.3f", 0x200000*5, 0x200000,CRC(553bb246) SHA1(94659bee4fd0afe834a8bf3414d8825411cf9e86) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "ts1cg0.8d", 0x200000*0x0, 0x200000,CRC(de07b22c) SHA1(f4d07b8840ec8be625eff634bce619e960c334a5) ) + ROM_LOAD( "ts1cg1.10d", 0x200000*0x1, 0x200000,CRC(992d26f6) SHA1(a0b9007312804b413d4c1748527378da4d8d53b3) ) + ROM_LOAD( "ts1cg2.12d", 0x200000*0x2, 0x200000,CRC(6273954f) SHA1(d73a43888b53e4c42fc33e8e1b38e60fd3329413) ) + ROM_LOAD( "ts1cg3.13d", 0x200000*0x3, 0x200000,CRC(38171f24) SHA1(d04caaa5b1b377ced38501b014e4cb7fc831c41d) ) + ROM_LOAD( "ts1cg4.14d", 0x200000*0x4, 0x200000,CRC(51f09856) SHA1(0eef421907ee813d5117e62cf0005bf00eb29c88) ) + ROM_LOAD( "ts1cg5.16d", 0x200000*0x5, 0x200000,CRC(4cd9fd79) SHA1(0d2018ec914683a75bdec8655d678fd562eb6d15) ) + ROM_LOAD( "ts1cg6.18d", 0x200000*0x6, 0x200000,CRC(f17f2ec9) SHA1(ed88ec524626e5bbe2e1ea6838412d3ac85671dd) ) + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "ts1ccrl.3d", 0x000000, 0x200000,CRC(56cad2df) SHA1(49c0e57d5cf5d5fc4c75da6969bec01d6d443259) ) + ROM_LOAD( "ts1ccrh.1d", 0x200000, 0x080000,CRC(a1cc3741) SHA1(7fe57924c42e287b134e5d7ad00cffdff1f18084) ) + + ROM_REGION( 0x80000*9, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "ts1ptrl0.18k", 0x80000*0, 0x80000,CRC(e5f2d275) SHA1(2f5057e65ec8a3ec03f841f15f10769ae1f69139) ) + ROM_LOAD( "ts1ptrl1.16k", 0x80000*1, 0x80000,CRC(2bba3800) SHA1(1d9c944cb06417cb0ac47a58b922dddb83387586) ) + ROM_LOAD( "ts1ptrl2.15k", 0x80000*2, 0x80000,CRC(d4441c08) SHA1(6a6bb9cecbf35cb81b7681e220fc33df9a01d07f) ) + ROM_LOAD( "ts1ptrm0.18j", 0x80000*3, 0x80000,CRC(8aea02ba) SHA1(44ba85ba6d59758448d17ec39dfb628882ddc684) ) + ROM_LOAD( "ts1ptrm1.16j", 0x80000*4, 0x80000,CRC(bccf19bc) SHA1(4a6566948bdd2b0f82b7c30e57d3fe65005c26e3) ) + ROM_LOAD( "ts1ptrm2.15j", 0x80000*5, 0x80000,CRC(7280be31) SHA1(476b7171ae855d8bbd968ccbaa55b5100d274e3b) ) + ROM_LOAD( "ts1ptru0.18f", 0x80000*6, 0x80000,CRC(c30d6332) SHA1(a5c59d0abfe38de975fa0d606ed8500eb02008b7) ) + ROM_LOAD( "ts1ptru1.16f", 0x80000*7, 0x80000,CRC(993cde84) SHA1(c9cdcca1d60bcc41ad881c02dda9895563963ead) ) + ROM_LOAD( "ts1ptru2.15f", 0x80000*8, 0x80000,CRC(7cb25c73) SHA1(616eab3ac238864a584394f7ec8736ece227974a) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "ts1wavea.2l", 0x000000, 0x400000, CRC(d1123301) SHA1(4bf1fd746fef4e6befa63c61a761971d729e1573) ) + ROM_LOAD( "ts1waveb.1l", 0x800000, 0x200000, CRC(bf4d7272) SHA1(c7c7b3620e7b3176644b6784ee36e679c9e31cc1) ) +ROM_END + + +ROM_START( tokyowar ) + ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "tw2ver-a.1", 0x000003, 0x100000, CRC(2b17ca92) SHA1(7bcb1658059c59fb1a0131a41ede7157855130a8) ) + ROM_LOAD32_BYTE( "tw2ver-a.2", 0x000002, 0x100000, CRC(12da84e3) SHA1(a9406d0b77f60ba930c30e60bf4b3656c8905585) ) + ROM_LOAD32_BYTE( "tw2ver-a.3", 0x000001, 0x100000, CRC(7d42c516) SHA1(28c1596dd55c15207bbb41a8b9a5abc97abc2bc8) ) + ROM_LOAD32_BYTE( "tw2ver-a.4", 0x000000, 0x100000, CRC(b904ed16) SHA1(773e11536e1b3fe4971608a63a8e6eca702f8667) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */ + ROM_LOAD( "tw1data.8k", 0x000000, 0x080000, CRC(bd046e4b) SHA1(162bc4ab69959ccab49fd69de291d34d472fb1c8) ) + + ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ + ROM_LOAD( "tw1scg0.12f", 0x000000, 0x200000, CRC(e3ec4daa) SHA1(f3a71ae9820d62075b814ffa2fecf3343ae09ffe) ) + ROM_LOAD( "tw1scg1.10f", 0x200000, 0x200000, CRC(b18a06e9) SHA1(ecf6a1e11603b8ea5119a036a57595dea021d778) ) + ROM_LOAD( "tw1scg2.8f", 0x400000, 0x200000, CRC(36f8c3d8) SHA1(d5c965d5cdd258c77b9db3137ce33404a5a3641c) ) + ROM_LOAD( "tw1scg3.7f", 0x600000, 0x200000, CRC(8e14d013) SHA1(ca63105a5c07bb9653499eef7a757db52612b59b) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "tw1cg0.8d", 0x000000, 0x200000, CRC(98b9b070) SHA1(cb920a34700dab330c967cc634717134c04b7e1d) ) + ROM_LOAD( "tw1cg1.10d", 0x200000, 0x200000, CRC(f96a723a) SHA1(5ba14963a4c51c875ac8d3b42049bc334de90038) ) + ROM_LOAD( "tw1cg2.12d", 0x400000, 0x200000, CRC(573e9ded) SHA1(815bda1ac000532c915c2d65ffdb04fee6fa8201) ) + ROM_LOAD( "tw1cg3.13d", 0x600000, 0x200000, CRC(302d5c74) SHA1(5a823f6842cf0f79eb93da47d5bf8c5f51e420db) ) + ROM_LOAD( "tw1cg4.14d", 0x800000, 0x200000, CRC(ab8aa1df) SHA1(355192d999f493e0761fbc822fa9b30c33d8e1c4) ) + ROM_LOAD( "tw1cg5.16d", 0xa00000, 0x200000, CRC(5063f3d0) SHA1(ad8dd2f4184373a3a3ca748b411a5eec1835dc97) ) + ROM_LOAD( "tw1cg6.18d", 0xc00000, 0x200000, CRC(d764027c) SHA1(5cbf93392683885c220628936ba50c09cb40fcfb) ) + ROM_LOAD( "tw1cg7.19d", 0xe00000, 0x200000, CRC(12da0a43) SHA1(99287348a5219146bcd3e61fde3f2bc26b0c5a25) ) + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "tw1ccrl.3d", 0x000000, 0x200000, CRC(d08f5794) SHA1(336a97a2b060505e259e3bcedb9eb8aa4ea8815e) ) + ROM_LOAD( "tw1ccrh.1d", 0x200000, 0x080000, CRC(ad17e693) SHA1(4f06dc82c03159894fb8e10383862920f94563b1) ) + + ROM_REGION( 0x600000, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "tw1ptrl0.18k", 0x000000, 0x080000, CRC(44ac5e86) SHA1(5e42db58f2e352c0fe5e49588a9283817dd15ab1) ) + ROM_LOAD( "tw1ptrl1.16k", 0x080000, 0x080000, CRC(3c769860) SHA1(19b32c3d262f2a9d07354fbd6ac6be97b05f176e) ) + ROM_LOAD( "tw1ptrl2.15k", 0x100000, 0x080000, CRC(6e94103c) SHA1(ee90b77939a9f5780ce271882133cdf977eb643e) ) + ROM_LOAD( "tw1ptrl3.14k", 0x180000, 0x080000, CRC(e3ce5eb2) SHA1(4e15a6f630be15eb017cd51c5e7901db3138a061) ) + ROM_LOAD( "tw1ptrm0.18j", 0x200000, 0x080000, CRC(e170cea2) SHA1(ca259508d76fdab97a9d0502f871f0e560e6c308) ) + ROM_LOAD( "tw1ptrm1.16j", 0x280000, 0x080000, CRC(36a32237) SHA1(f46851dc5c094810ddc42d56310a9f85908bf715) ) + ROM_LOAD( "tw1ptrm2.15j", 0x300000, 0x080000, CRC(c426c278) SHA1(64232ac3c1649e0d0adb4b03e58b8b5ea4013f83) ) + ROM_LOAD( "tw1ptrm3.14j", 0x380000, 0x080000, CRC(d9b9a651) SHA1(0c49a051526081149d894d629f19cb0f2b66a698) ) + ROM_LOAD( "tw1ptru0.18f", 0x400000, 0x080000, CRC(62a9e9fb) SHA1(24739adba029b0acf2d7078962c9d01098a29a6c) ) + ROM_LOAD( "tw1ptru1.16f", 0x480000, 0x080000, CRC(2fd36177) SHA1(368b915261d914be01ae9daeb52571bead52d14d) ) + ROM_LOAD( "tw1ptru2.15f", 0x500000, 0x080000, CRC(ceacb1c9) SHA1(b86cf576e16bbe26ad0d6d6df8bf28d0071c25e2) ) + ROM_LOAD( "tw1ptru3.14f", 0x580000, 0x080000, CRC(939044c2) SHA1(f4c1c0a1c2f07ca7f784d59ef4162a2a6a8bbc43) ) + + ROM_REGION( 0x1000000, "c352", 0 ) // Samples + ROM_LOAD( "tw1wavea.2l", 0x000000, 0x400000, CRC(ebce6366) SHA1(44ebe90ff3c7af5bebbf1baba3b7a2b1863daebb) ) + + ROM_REGION( 0x4000, "nvram", 0 ) // default eeprom + ROM_LOAD( "tokyowar_defaults.nv", 0x0000, 0x4000, CRC(a1fe05e4) SHA1(39a20b35394a43e12c66a6c0f5ecb204148c58de) ) +ROM_END + + +ROM_START( dirtdash ) + ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_WORD_SWAP( "dt2vera.1", 0x000002, 0x200000, CRC(402a3d73) SHA1(009b57ed0ea228ccedb139d945b9eaf2a36e2502) ) + ROM_LOAD32_WORD_SWAP( "dt2vera.2", 0x000000, 0x200000, CRC(66ed140d) SHA1(a472fdc7b6aaeb4b3643ecdafd32fa665e7c7aa2) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */ + ROM_LOAD( "dt1dataa.8k", 0x000000, 0x080000, CRC(9bcdea21) SHA1(26ae025cf746d3a703a82495eb2bb515b828a650) ) + + ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ + ROM_LOAD( "dt1scg0.12f", 0x000000, 0x200000, CRC(a09b5760) SHA1(3dd54ebebf9da1de76874a1adf491ed15849e1b1) ) + ROM_LOAD( "dt1scg1.10f", 0x200000, 0x200000, CRC(f9ac8111) SHA1(814074ae8cc81c6c1201d764a84dd95fe914f19c) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "dt1cg0.8d", 0x000000, 0x200000, CRC(10ab95e0) SHA1(ffde1f00ac3e82a36fbcfa060c6b97c92dfcfc8b) ) + ROM_LOAD( "dt1cg1.10d", 0x200000, 0x200000, CRC(d9f1ba53) SHA1(5a1095b726c55001cc1d4c695adc38097e6a0201) ) + ROM_LOAD( "dt1cg2.12d", 0x400000, 0x200000, CRC(bd8b1e0b) SHA1(fcd94e33a0cbd17c9308cb8952e3c618ab56f9fc) ) + ROM_LOAD( "dt1cg3.13d", 0x600000, 0x200000, CRC(ba960663) SHA1(e98149bc4652ea7933ac47d760a6f7e6489f15e2) ) + ROM_LOAD( "dt1cg4.14d", 0x800000, 0x200000, CRC(424b9652) SHA1(fa8865110db03559740c4e633e123d1a009782c4) ) + ROM_LOAD( "dt1cg5.16d", 0xa00000, 0x200000, CRC(29516626) SHA1(1f12c5dc3975b88dc60d87d0409bf311837e9fa4) ) + ROM_LOAD( "dt1cg6.18d", 0xc00000, 0x200000, CRC(e6fa7180) SHA1(85316cde282cff1f913cf9f155cfa36adcc1108e) ) + ROM_LOAD( "dt1cg7.19d", 0xe00000, 0x200000, CRC(2ca19153) SHA1(c82403c8b40bf85daedf610b1bc7bfea9dfc6206) ) + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "dt1ccrl.3d", 0x000000, 0x200000, CRC(e536b313) SHA1(7357da993d2bb3fcc8c1c2feb53689ad368cd80a) ) + ROM_LOAD( "dt1ccrh.1d", 0x200000, 0x080000, CRC(af257064) SHA1(0da561d9f8824618c00209ccef6146e9f3ad72bb) ) + + ROM_REGION( 0x480000, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "dt1ptrl0.18k", 0x000000, 0x080000, CRC(4e0cac3a) SHA1(c2778e9e93be2de729c6f118caf62ac9f48efbb0) ) + ROM_LOAD( "dt1ptrl1.16k", 0x080000, 0x080000, CRC(59ba9dba) SHA1(a2e9488cf0ff255284c06a1ef653ae86c0d98adc) ) + ROM_LOAD( "dt1ptrl2.15k", 0x100000, 0x080000, CRC(cfe80c67) SHA1(ba3bc48aa39712e63c915070a76974fbd560dee6) ) + ROM_LOAD( "dt1ptrm0.18j", 0x180000, 0x080000, CRC(41f34337) SHA1(7e624e7b6fdefe156168b1c9cc5e919db3b2fbaa) ) + ROM_LOAD( "dt1ptrm1.16j", 0x200000, 0x080000, CRC(d68541fc) SHA1(6b00079bd8f2db26e71968de289cea93458aebe9) ) + ROM_LOAD( "dt1ptrm2.15j", 0x280000, 0x080000, CRC(71e6714d) SHA1(6aad6db3be5020213d7add61c7d927ae9c4fea4e) ) + ROM_LOAD( "dt1ptru0.18f", 0x300000, 0x080000, CRC(4909bd7d) SHA1(0e4ef3987c43ef0438331b82b50dcc97363a45d0) ) + ROM_LOAD( "dt1ptru1.16f", 0x380000, 0x080000, CRC(4a5097df) SHA1(a9c814b0ed4bd92accd0e57be8e3d887114b06a5) ) + ROM_LOAD( "dt1ptru2.15f", 0x400000, 0x080000, CRC(1171eaf5) SHA1(168365ea619386f218585c49025cdd7fd1224082) ) + + ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */ + ROM_LOAD( "dt1wavea.2l", 0x000000, 0x400000, CRC(cbd52e40) SHA1(dc995dd919548c96a90efb0375e5b5f1055e05cb) ) + ROM_LOAD( "dt1waveb.1l", 0x800000, 0x400000, CRC(6b736f94) SHA1(ac3715480aa9a9c2dec099607f89859bb3b73a6a) ) +ROM_END + + +ROM_START( aquajet ) + ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "aj2ver-b.1", 0x000003, 0x100000, CRC(3a67b9f4) SHA1(8cd51f319e082297fdb99634486fe297a0ace654) ) + ROM_LOAD32_BYTE( "aj2ver-b.2", 0x000002, 0x100000, CRC(f5e8fc96) SHA1(e23fcf6f84724d1de15870ff578ff8a6b26e8f31) ) + ROM_LOAD32_BYTE( "aj2ver-b.3", 0x000001, 0x100000, CRC(ef6ebcf7) SHA1(358973b678b9a3065e945fb589af16e8102d437b) ) + ROM_LOAD32_BYTE( "aj2ver-b.4", 0x000000, 0x100000, CRC(7799b909) SHA1(e40005f96f51742b2778605926b8184c9b2c1ad2) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */ + ROM_LOAD( "aj1data.8k", 0x000000, 0x080000, CRC(52bcc6d5) SHA1(25319ea6db35cc9bdcb39cc83d597a2a9f1690f3) ) + + ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ + ROM_LOAD( "aj1scg0.12f", 0x000000, 0x200000, CRC(13ea766c) SHA1(a1a259bd8f468b90cbc891f1c2875fe03bba9802) ) + ROM_LOAD( "aj1scg1.10f", 0x200000, 0x200000, CRC(cb3638de) SHA1(0af99aaf00782036d7f479b00b0c3d9d7ad4fc37) ) + ROM_LOAD( "aj1scg2.8f", 0x400000, 0x200000, CRC(1048a09b) SHA1(6859533e24db5ac54e28d480aaac7b411a648dfe) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "aj1cg0.8d", 0x000000, 0x200000, CRC(b814e1eb) SHA1(1af29897dcfd0a58743b4fcdd5049d9e6e3d4cbd) ) + ROM_LOAD( "aj1cg1.10d", 0x200000, 0x200000, CRC(dc63d496) SHA1(d3c3eea6b134850004062dd513c0f26096101227) ) + ROM_LOAD( "aj1cg2.12d", 0x400000, 0x200000, CRC(71fbb571) SHA1(40f84ab5a4a7bb4438fb53751762609671d17800) ) + ROM_LOAD( "aj1cg3.13d", 0x600000, 0x200000, CRC(e28052e2) SHA1(3dbc446d7a13312ed4c1d20c2e1209947853f2c4) ) + ROM_LOAD( "aj1cg4.14d", 0x800000, 0x200000, CRC(c77ae1a0) SHA1(e15f2ccbadb8634f6e5cfd2cf48f428d68bd92e1) ) + ROM_LOAD( "aj1cg5.16d", 0xa00000, 0x200000, CRC(15be0080) SHA1(ca14dfd2a66996f0b32fa1155c04f21d300e8f30) ) + ROM_LOAD( "aj1cg6.18d", 0xc00000, 0x200000, CRC(1a4f733a) SHA1(60a991f06e73667fa2c9016189999c4301cba24f) ) + ROM_LOAD( "aj1cg7.19d", 0xe00000, 0x200000, CRC(ea118130) SHA1(24ef22e5c8c6f6e8a01c72466be1e7acbfba63bc) ) + + ROM_REGION16_LE( 0x280000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "aj1ccrl.3d", 0x000000, 0x200000, CRC(3cc7a247) SHA1(336e4dd506d932987e20a5890dd3b0db75c02ccf) ) + ROM_LOAD( "aj1ccrh.1d", 0x200000, 0x080000, CRC(9d936030) SHA1(a383bcca494a9f8d9a08fbe9940c8071d4525d65) ) + + ROM_REGION( 0x600000, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "aj1ptrl0.18k", 0x000000, 0x080000, CRC(16205d45) SHA1(7e9681af852e2e875f80cbbe350e4982eaf80884) ) + ROM_LOAD( "aj1ptrl1.16k", 0x080000, 0x080000, CRC(6f114da7) SHA1(a1e7349ef8eb0ef043fce06f88bfbb76c2967393) ) + ROM_LOAD( "aj1ptrl2.15k", 0x100000, 0x080000, CRC(719b73f0) SHA1(bf8530a706097ae663769090177f1f259c540aa6) ) + ROM_LOAD( "aj1ptrl3.14k", 0x180000, 0x080000, CRC(9555fe31) SHA1(03bdd0784817191b3600d643b775191181a21706) ) + ROM_LOAD( "aj1ptrm0.18j", 0x200000, 0x080000, CRC(89bee2e0) SHA1(d84b06ef1318814fcf4782fef09a85ae1a87beb8) ) + ROM_LOAD( "aj1ptrm1.16j", 0x280000, 0x080000, CRC(0ecf88c7) SHA1(20b7cb09a6a13599cac024ef19c73612ce2952f6) ) + ROM_LOAD( "aj1ptrm2.15j", 0x300000, 0x080000, CRC(829bc7ba) SHA1(7104d66a027911e38ecf521f01ff098ccb76d5fb) ) + ROM_LOAD( "aj1ptrm3.14j", 0x380000, 0x080000, CRC(7d0a222a) SHA1(e78c405d00429580015c6c7d1bcd35393317a769) ) + ROM_LOAD( "aj1ptru0.18f", 0x400000, 0x080000, CRC(90d4e36a) SHA1(bdc44aac6aef5266d289f03c816aa2abdb263e9b) ) + ROM_LOAD( "aj1ptru1.16f", 0x480000, 0x080000, CRC(bf0cf4bf) SHA1(bbf06c7605c083d2fb8c72528c5c9d3b8b067073) ) + ROM_LOAD( "aj1ptru2.15f", 0x500000, 0x080000, CRC(91ffbb77) SHA1(fbfe7d32ef22037f7190d1b8263b5e8c55f2d892) ) + ROM_LOAD( "aj1ptru3.14f", 0x580000, 0x080000, CRC(d83d8d42) SHA1(e1561ce4538b01db92b7e645ad008cd1a2ddaf8a) ) + + ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */ + ROM_LOAD( "aj1wavea.2l", 0x000000, 0x400000, CRC(8c72ea59) SHA1(3ae8dbd8baae08f1daab2b218932ba9d9451231d) ) + ROM_LOAD( "aj1waveb.1l", 0x800000, 0x400000, CRC(ab5a457f) SHA1(c34531fd574eb0c3e78fc31a9af8658df3446adc) ) + + ROM_REGION( 0x4000, "nvram", 0 ) // default eeprom + ROM_LOAD( "aquajet_defaults.nv", 0x0000, 0x4000, CRC(7d03893c) SHA1(f75ca5d996a94da4136ed0a4f0f4c869f1412e38) ) +ROM_END + + +ROM_START( adillor ) + ROM_REGION( 0x400000, "maincpu", 0 ) /* main program */ + ROM_LOAD32_BYTE( "am1vera.rom1", 0x000003, 0x100000, CRC(e99157f9) SHA1(7a200f3b5890f5badbf529a8c8ac6a8548adb801) ) + ROM_LOAD32_BYTE( "am1vera.rom2", 0x000002, 0x100000, CRC(b63d79b0) SHA1(c83251727b2973f5b9dc2eea23b51b1275bd88ed) ) + ROM_LOAD32_BYTE( "am1vera.rom3", 0x000001, 0x100000, CRC(af0983bc) SHA1(136d2e14485864e20d7a6947d640577b8a85243c) ) + ROM_LOAD32_BYTE( "am1vera.rom4", 0x000000, 0x100000, CRC(4424047f) SHA1(d0ca736c085db58d33b603813b7a54c8ce995bac) ) + + ROM_REGION( 0x10000*2, "master", 0 ) /* Master DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION( 0x10000*2, "slave", 0 ) /* Slave DSP */ + ROM_LOAD16_WORD( "c71.bin", 0,0x1000*2, CRC(47c623ab) SHA1(e363ac50f5556f83308d4cc191b455e9b62bcfc8) ) + + ROM_REGION16_LE( 0x080000, "mcu", 0 ) /* S22-BIOS ver1.41 */ + ROM_LOAD( "am1data.8k", 0x000000, 0x080000, CRC(3c176589) SHA1(fabf8debfa118893449f6086986fd1aa012daf27) ) + + ROM_REGION( 0x200000*8, "sprite", ROMREGION_ERASEFF ) /* 32x32x8bpp sprite tiles */ + ROM_LOAD( "am1scg0.12f", 0x000000, 0x200000, CRC(e576f993) SHA1(704645c2b2af4d3f6b77f2299cd7277837e204d2) ) + ROM_LOAD( "am1scg1.10f", 0x200000, 0x200000, CRC(d6d26cc1) SHA1(1da35ec2f89cfc5778d81b6a892fcf100d6e9933) ) + ROM_LOAD( "am1scg0.12l", 0x000000, 0x200000, CRC(e576f993) SHA1(704645c2b2af4d3f6b77f2299cd7277837e204d2) ) + ROM_LOAD( "am1scg1.10l", 0x200000, 0x200000, CRC(d6d26cc1) SHA1(1da35ec2f89cfc5778d81b6a892fcf100d6e9933) ) + + ROM_REGION( 0x200000*8, "textile", 0) /* 16x16x8bpp texture tiles */ + ROM_LOAD( "am1cg0.8d", 0x000000, 0x200000, CRC(b91e4259) SHA1(3de7fee2be9843ef6a8718f9dcbc3aeb1fb23b64) ) + ROM_LOAD( "am1cg1.10d", 0x200000, 0x200000, CRC(c1b82a26) SHA1(25dc3cdf5fe18de89e6d7304ff76b6157aba2cd6) ) + ROM_LOAD( "am1cg2.12d", 0x400000, 0x200000, CRC(36a7d3fd) SHA1(f07bb746f775d1eb70c4b6a65e6002d2136cfe4d) ) + ROM_LOAD( "am1cg3.13d", 0x600000, 0x200000, CRC(8b0857ef) SHA1(1c86db318d7bb7bc303ba65a9db493b033035d7b) ) + ROM_LOAD( "am1cg3.14d", 0x800000, 0x200000, CRC(ebc516fe) SHA1(585554f14cfdf69a89a6431867b7cfc1a9eae379) ) + ROM_LOAD( "am1cg5.16d", 0xa00000, 0x200000, CRC(30fad30d) SHA1(bb0d9e2b479d83cc38ffd76d0d55f06dca0f304a) ) + ROM_LOAD( "am1cg6.18d", 0xc00000, 0x200000, CRC(62eea883) SHA1(37e441bb1289e45ef3043f70f77646c15b6dff0e) ) + ROM_LOAD( "am1cg7.19d", 0xe00000, 0x200000, CRC(2d257f47) SHA1(6406556b4b142b6c596eb25f407275a63f6a44f1) ) + ROM_LOAD( "am1cg0.12b", 0x000000, 0x200000, CRC(b91e4259) SHA1(3de7fee2be9843ef6a8718f9dcbc3aeb1fb23b64) ) + ROM_LOAD( "am1cg1.13b", 0x200000, 0x200000, CRC(c1b82a26) SHA1(25dc3cdf5fe18de89e6d7304ff76b6157aba2cd6) ) + ROM_LOAD( "am1cg2.14b", 0x400000, 0x200000, CRC(36a7d3fd) SHA1(f07bb746f775d1eb70c4b6a65e6002d2136cfe4d) ) + ROM_LOAD( "am1cg3.16b", 0x600000, 0x200000, CRC(8b0857ef) SHA1(1c86db318d7bb7bc303ba65a9db493b033035d7b) ) + ROM_LOAD( "am1cg3.18b", 0x800000, 0x200000, CRC(ebc516fe) SHA1(585554f14cfdf69a89a6431867b7cfc1a9eae379) ) + ROM_LOAD( "am1cg5.19b", 0xa00000, 0x200000, CRC(30fad30d) SHA1(bb0d9e2b479d83cc38ffd76d0d55f06dca0f304a) ) + ROM_LOAD( "am1cg6.18a", 0xc00000, 0x200000, CRC(62eea883) SHA1(37e441bb1289e45ef3043f70f77646c15b6dff0e) ) + ROM_LOAD( "am1cg7.15a", 0xe00000, 0x200000, CRC(2d257f47) SHA1(6406556b4b142b6c596eb25f407275a63f6a44f1) ) + + ROM_REGION16_LE( 0x300000, "textilemap", 0 ) /* texture tilemap */ + ROM_LOAD( "am1ccrl.3d", 0x000000, 0x200000, CRC(76c6d5f3) SHA1(637efe30d004a9c42864b7536e02e9805ed9b6ef) ) + ROM_LOAD( "am1ccrh.1d", 0x200000, 0x080000, CRC(180c4a33) SHA1(5e0818ba8a135c51953bc3bc5c4a1475f7f93eff) ) + ROM_LOAD( "am1ccrl.7b", 0x000000, 0x200000, CRC(76c6d5f3) SHA1(637efe30d004a9c42864b7536e02e9805ed9b6ef) ) + ROM_LOAD( "am1ccrh.5b", 0x200000, 0x080000, CRC(180c4a33) SHA1(5e0818ba8a135c51953bc3bc5c4a1475f7f93eff) ) + + ROM_REGION( 0x600000, "pointrom", 0 ) /* 3d model data */ + ROM_LOAD( "am1ptrl0.18k", 0x000000, 0x080000, CRC(6fdb34f6) SHA1(5dc7359eef0dbe6d421808eefd3920159ce34944) ) + ROM_LOAD( "am1ptrl1.16k", 0x080000, 0x080000, CRC(32e40601) SHA1(161b148aae688e944cfe456d9bca1ca7139812e1) ) + ROM_LOAD( "am1ptrl2.15k", 0x100000, 0x080000, CRC(e27e29cc) SHA1(3a2b0d18d23b2ace6fe1c6c4dbcc73cb74acd189) ) + ROM_LOAD( "am1ptrl3.14k", 0x180000, 0x080000, CRC(0c638e3e) SHA1(2cd68e6aa04a9235f792fad0913314545ab70e71) ) + ROM_LOAD( "am1ptrm0.18j", 0x200000, 0x080000, CRC(e676cd98) SHA1(f7b31c848bc2afc31f3ad53d9eda7daae5f28865) ) + ROM_LOAD( "am1ptrm1.16j", 0x280000, 0x080000, CRC(eb115d9d) SHA1(165cb13a3d0f2982c35ae5e6e796de48cf2b5846) ) + ROM_LOAD( "am1ptrm2.15j", 0x300000, 0x080000, CRC(86b4ed0c) SHA1(d97f2b26cc3981b4b337029723c5ddec9316628f) ) + ROM_LOAD( "am1ptrm3.14j", 0x380000, 0x080000, CRC(97c1c6b0) SHA1(84e5f982f50560debd6f1f4d3d96f58888616529) ) + ROM_LOAD( "am1ptru0.18f", 0x400000, 0x080000, CRC(6a3fd855) SHA1(c6d2029e676426c4e71d9cfddbac7ecdec81c4da) ) + ROM_LOAD( "am1ptru1.16f", 0x480000, 0x080000, CRC(551bf714) SHA1(4af1e65ad1e42a95accafb57422fc276743f408a) ) + ROM_LOAD( "am1ptru2.15f", 0x500000, 0x080000, CRC(ce790635) SHA1(fb49646a9b35ee7cb3ace59a7f0932a08c393052) ) + ROM_LOAD( "am1ptru3.14f", 0x580000, 0x080000, CRC(5e4e6333) SHA1(5897251e4694c5c24f1810ff6f9177a0456baf2e) ) + + ROM_REGION( 0x1000000, "c352", 0 ) /* sound samples */ + ROM_LOAD( "am1wavea.2l", 0x000000, 0x400000, CRC(48f8c20c) SHA1(48b4fbcb7e9dbbb70a542ef7cb7ee0e46fad23fc) ) + ROM_LOAD( "am1waveb.1l", 0x800000, 0x400000, CRC(fd8e7384) SHA1(91e53ab0293f81f8357645fd319249abc128b78e) ) + + ROM_REGION( 0x4000, "nvram", ROMREGION_ERASE00 ) // default eeprom +ROM_END + + + +/*********************************************************************************************/ // MCU speed cheats (every bit helps with these games) @@ -5280,99 +5496,131 @@ READ16_MEMBER(namcos22_state::mcuc74_speedup_r) return m_su_82; } -static void install_c74_speedup(running_machine &machine) +void namcos22_state::install_c74_speedup() { - namcos22_state *state = machine.driver_data(); if (MCU_SPEEDUP) - state->m_mcu->space(AS_PROGRAM).install_readwrite_handler(0x80, 0x81, read16_delegate(FUNC(namcos22_state::mcuc74_speedup_r),state), write16_delegate(FUNC(namcos22_state::mcu_speedup_w),state)); + m_mcu->space(AS_PROGRAM).install_readwrite_handler(0x80, 0x81, read16_delegate(FUNC(namcos22_state::mcuc74_speedup_r),this), write16_delegate(FUNC(namcos22_state::mcu_speedup_w),this)); } -static void install_130_speedup(running_machine &machine) +void namcos22_state::install_130_speedup() { - namcos22_state *state = machine.driver_data(); // install speedup cheat for 1.20/1.30 MCU BIOS if (MCU_SPEEDUP) - state->m_mcu->space(AS_PROGRAM).install_readwrite_handler(0x82, 0x83, read16_delegate(FUNC(namcos22_state::mcu130_speedup_r),state), write16_delegate(FUNC(namcos22_state::mcu_speedup_w),state)); + m_mcu->space(AS_PROGRAM).install_readwrite_handler(0x82, 0x83, read16_delegate(FUNC(namcos22_state::mcu130_speedup_r),this), write16_delegate(FUNC(namcos22_state::mcu_speedup_w),this)); } -static void install_141_speedup(running_machine &machine) +void namcos22_state::install_141_speedup() { - namcos22_state *state = machine.driver_data(); // install speedup cheat for 1.41 MCU BIOS if (MCU_SPEEDUP) - state->m_mcu->space(AS_PROGRAM).install_readwrite_handler(0x82, 0x83, read16_delegate(FUNC(namcos22_state::mcu141_speedup_r),state), write16_delegate(FUNC(namcos22_state::mcu_speedup_w),state)); + m_mcu->space(AS_PROGRAM).install_readwrite_handler(0x82, 0x83, read16_delegate(FUNC(namcos22_state::mcu141_speedup_r),this), write16_delegate(FUNC(namcos22_state::mcu_speedup_w),this)); } -static void namcos22_init( running_machine &machine, int game_type ) + + +/*********************************************************************************************/ + +void namcos22_state::namcos22_init(int game_type) { - namcos22_state *state = machine.driver_data(); + m_gametype = game_type; - state->m_gametype = game_type; - state->m_keycus_id = 0; - state->m_su_82 = 0; - state->m_irq_state = 0; - state->m_p4 = 0; - state->m_old_coin_state = 0; - state->m_credits1 = state->m_credits2 = 0; - - state->m_pPointRAM = auto_alloc_array(machine, UINT32, 0x20000); + m_keycus_id = 0; + m_su_82 = 0; + m_irq_state = 0; + m_p4 = 0; + m_old_coin_state = 0; + m_credits1 = m_credits2 = 0; } -static void alpine_init_common( running_machine &machine, int game_type ) +DRIVER_INIT_MEMBER(namcos22_state,ridgeraj) { - namcos22_state *state = machine.driver_data(); - namcos22_init(machine, game_type); + namcos22_init(NAMCOS22_RIDGE_RACER); + install_c74_speedup(); - state->m_mcu->space(AS_IO).install_write_handler(M37710_PORT5, M37710_PORT5, write8_delegate(FUNC(namcos22_state::alpine_mcu_port5_w),state)); - - state->m_motor_timer = machine.scheduler().timer_alloc(timer_expired_delegate(FUNC(namcos22_state::alpine_steplock_callback),state)); - state->m_motor_timer->reset(); - state->m_motor_status = 2; + m_keycus_id = 0x0172; } +DRIVER_INIT_MEMBER(namcos22_state,ridger2j) +{ + namcos22_init(NAMCOS22_RIDGE_RACER2); + install_c74_speedup(); + + m_keycus_id = 0x0172; +} + +DRIVER_INIT_MEMBER(namcos22_state,acedrvr) +{ + namcos22_init(NAMCOS22_ACE_DRIVER); + install_c74_speedup(); + + m_keycus_id = 0x0173; +} + +DRIVER_INIT_MEMBER(namcos22_state,victlap) +{ + namcos22_init(NAMCOS22_VICTORY_LAP); + install_c74_speedup(); + + m_keycus_id = 0x0188; +} + +DRIVER_INIT_MEMBER(namcos22_state,raveracw) +{ + namcos22_init(NAMCOS22_RAVE_RACER); + install_c74_speedup(); +} + +DRIVER_INIT_MEMBER(namcos22_state,cybrcomm) +{ + namcos22_init(NAMCOS22_CYBER_COMMANDO); + install_c74_speedup(); + + m_keycus_id = 0x0185; +} + + DRIVER_INIT_MEMBER(namcos22_state,alpiner) { - alpine_init_common(machine(), NAMCOS22_ALPINE_RACER); - - install_130_speedup(machine()); + namcos22_init(NAMCOS22_ALPINE_RACER); + install_130_speedup(); m_keycus_id = 0x0187; + + m_motor_status = 2; } DRIVER_INIT_MEMBER(namcos22_state,alpiner2) { - alpine_init_common(machine(), NAMCOS22_ALPINE_RACER_2); - - install_130_speedup(machine()); + namcos22_init(NAMCOS22_ALPINE_RACER_2); + install_130_speedup(); m_keycus_id = 0x0187; + + m_motor_status = 2; } DRIVER_INIT_MEMBER(namcos22_state,alpinesa) { - alpine_init_common(machine(), NAMCOS22_ALPINE_SURFER); - - m_maincpu->space(AS_PROGRAM).install_read_handler (0x200000, 0x200003, read32_delegate(FUNC(namcos22_state::alpinesa_prot_r),this)); - m_maincpu->space(AS_PROGRAM).install_write_handler(0x300000, 0x300003, write32_delegate(FUNC(namcos22_state::alpinesa_prot_w),this)); - install_141_speedup(machine()); + namcos22_init(NAMCOS22_ALPINE_SURFER); + install_141_speedup(); m_keycus_id = 0x01a9; + + m_motor_status = 2; } DRIVER_INIT_MEMBER(namcos22_state,airco22) { - namcos22_init(machine(), NAMCOS22_AIR_COMBAT22); - - // S22-BIOS ver1.20 namco all rights reserved 94/12/21 - install_130_speedup(machine()); + namcos22_init(NAMCOS22_AIR_COMBAT22); + install_130_speedup(); // S22-BIOS ver1.20 namco all rights reserved 94/12/21 } DRIVER_INIT_MEMBER(namcos22_state,propcycl) { - UINT32 *pROM = (UINT32 *)memregion("maincpu")->base(); + UINT32 *ROM = (UINT32 *)memregion("maincpu")->base(); /* patch out strange routine (uninitialized-eprom related?) */ - pROM[0x1992C/4] = 0x4E754E75; + ROM[0x1992C/4] = 0x4E754E75; /** * The dipswitch reading routine in Prop Cycle polls the @@ -5383,145 +5631,90 @@ DRIVER_INIT_MEMBER(namcos22_state,propcycl) * * DIP5: real time display of "INST_CUNT, MODE_NUM, MODE_CUNT" */ -// pROM[0x22296/4] &= 0xffff0000; -// pROM[0x22296/4] |= 0x00004e75; +// ROM[0x22296/4] &= 0xffff0000; +// ROM[0x22296/4] |= 0x00004e75; - namcos22_init(machine(), NAMCOS22_PROP_CYCLE); - m_mcu->space(AS_IO).install_write_handler(M37710_PORT5, M37710_PORT5, write8_delegate(FUNC(namcos22_state::propcycle_mcu_port5_w),this)); - install_141_speedup(machine()); -} - -DRIVER_INIT_MEMBER(namcos22_state,ridgeraj) -{ - namcos22_init(machine(), NAMCOS22_RIDGE_RACER); - - install_c74_speedup(machine()); - - m_keycus_id = 0x0172; -} - -DRIVER_INIT_MEMBER(namcos22_state,ridger2j) -{ - namcos22_init(machine(), NAMCOS22_RIDGE_RACER2); - - install_c74_speedup(machine()); - - m_keycus_id = 0x0172; -} - -DRIVER_INIT_MEMBER(namcos22_state,acedrvr) -{ - namcos22_init(machine(), NAMCOS22_ACE_DRIVER); - - install_c74_speedup(machine()); - - m_keycus_id = 0x0173; -} - -DRIVER_INIT_MEMBER(namcos22_state,victlap) -{ - namcos22_init(machine(), NAMCOS22_VICTORY_LAP); - - install_c74_speedup(machine()); - - m_keycus_id = 0x0188; -} - -DRIVER_INIT_MEMBER(namcos22_state,raveracw) -{ - namcos22_init(machine(), NAMCOS22_RAVE_RACER); - - install_c74_speedup(machine()); -} - -DRIVER_INIT_MEMBER(namcos22_state,cybrcomm) -{ - namcos22_init(machine(), NAMCOS22_CYBER_COMMANDO); - - install_c74_speedup(machine()); - - m_keycus_id = 0x0185; + namcos22_init(NAMCOS22_PROP_CYCLE); + install_141_speedup(); } DRIVER_INIT_MEMBER(namcos22_state,cybrcyc) { - namcos22_init(machine(), NAMCOS22_CYBER_CYCLES); - - install_130_speedup(machine()); + namcos22_init(NAMCOS22_CYBER_CYCLES); + install_130_speedup(); m_keycus_id = 0x0387; } DRIVER_INIT_MEMBER(namcos22_state,timecris) { - namcos22_init(machine(), NAMCOS22_TIME_CRISIS); - - install_130_speedup(machine()); + namcos22_init(NAMCOS22_TIME_CRISIS); + install_130_speedup(); } DRIVER_INIT_MEMBER(namcos22_state,tokyowar) { - namcos22_init(machine(), NAMCOS22_TOKYO_WARS); - - install_141_speedup(machine()); + namcos22_init(NAMCOS22_TOKYO_WARS); + install_141_speedup(); m_keycus_id = 0x01a8; } DRIVER_INIT_MEMBER(namcos22_state,aquajet) { - namcos22_init(machine(), NAMCOS22_AQUA_JET); - install_141_speedup(machine()); + namcos22_init(NAMCOS22_AQUA_JET); + install_141_speedup(); } DRIVER_INIT_MEMBER(namcos22_state,adillor) { - namcos22_init(machine(), NAMCOS22_ARMADILLO_RACING); - install_141_speedup(machine()); + namcos22_init(NAMCOS22_ARMADILLO_RACING); + install_141_speedup(); m_keycus_id = 0x59b7; } DRIVER_INIT_MEMBER(namcos22_state,dirtdash) { - namcos22_init(machine(), NAMCOS22_DIRT_DASH); - - install_141_speedup(machine()); + namcos22_init(NAMCOS22_DIRT_DASH); + install_141_speedup(); m_keycus_id = 0x01a2; } -/************************************************************************************/ + + +/*********************************************************************************************/ /* YEAR, NAME, PARENT, MACHINE, INPUT, INIT, MNTR, COMPANY, FULLNAME, FLAGS */ /* System22 games */ -GAME( 1993, ridgerac, 0, namcos22, ridgera, namcos22_state, ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR3, World)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 1994-01-17 -GAME( 1993, ridgerac3, ridgerac, namcos22, ridgera, namcos22_state, ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR2 Ver.B, World, 3-screen?)", GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 1993-10-28, no indication that this really is a 3-screen version. -GAME( 1993, ridgeracb, ridgerac, namcos22, ridgera, namcos22_state, ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR2, World)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 1993-10-07 -GAME( 1993, ridgeracj, ridgerac, namcos22, ridgera, namcos22_state, ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR1, Japan)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 1993-10-07 -GAME( 1993, ridgeracf, ridgerac, namcos22, ridgeracf, namcos22_state, ridgeraj, ROT0, "Namco", "Ridge Racer Full Scale (World)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS|GAME_NOT_WORKING ) // 1993-12-13, very different version, incomplete dump. -GAME( 1994, ridgera2, 0, namcos22, ridgera2, namcos22_state, ridger2j, ROT0, "Namco", "Ridge Racer 2 (Rev. RRS2, World)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 1994-06-21 -GAME( 1994, ridgera2j, ridgera2, namcos22, ridgera2, namcos22_state, ridger2j, ROT0, "Namco", "Ridge Racer 2 (Rev. RRS1 Ver.B, Japan)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 1994-06-21 -GAME( 1994, ridgera2ja,ridgera2, namcos22, ridgera2, namcos22_state, ridger2j, ROT0, "Namco", "Ridge Racer 2 (Rev. RRS1, Japan)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 1994-06-13 -GAME( 1994, cybrcomm, 0, namcos22, cybrcomm, namcos22_state, cybrcomm, ROT0, "Namco", "Cyber Commando (Rev. CY1, Japan)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 10/14/94 -GAME( 1995, raveracw, 0, namcos22, raveracw, namcos22_state, raveracw, ROT0, "Namco", "Rave Racer (Rev. RV2, World)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 07/16/95 -GAME( 1995, raveracj, raveracw, namcos22, raveracw, namcos22_state, raveracw, ROT0, "Namco", "Rave Racer (Rev. RV1 Ver.B, Japan)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 07/16/95 -GAME( 1995, raveracja, raveracw, namcos22, raveracw, namcos22_state, raveracw, ROT0, "Namco", "Rave Racer (Rev. RV1, Japan)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 06/29/95 -GAME( 1994, acedrvrw, 0, namcos22, acedrvr, namcos22_state, acedrvr, ROT0, "Namco", "Ace Driver: Racing Evolution (Rev. AD2)", GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 94/10/20 16:22:25 -GAME( 1996, victlapw, 0, namcos22, victlap, namcos22_state, victlap, ROT0, "Namco", "Ace Driver: Victory Lap (Rev. ADV2)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 96/02/13 17:50:06 +GAME( 1993, ridgerac, 0, namcos22, ridgera, namcos22_state, ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR3, World)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 1994-01-17 +GAME( 1993, ridgerac3, ridgerac, namcos22, ridgera, namcos22_state, ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR2 Ver.B, World, 3-screen?)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 1993-10-28, no indication that this really is a 3-screen version. +GAME( 1993, ridgeracb, ridgerac, namcos22, ridgera, namcos22_state, ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR2, World)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 1993-10-07 +GAME( 1993, ridgeracj, ridgerac, namcos22, ridgera, namcos22_state, ridgeraj, ROT0, "Namco", "Ridge Racer (Rev. RR1, Japan)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 1993-10-07 +GAME( 1993, ridgeracf, ridgerac, namcos22, ridgeracf, namcos22_state, ridgeraj, ROT0, "Namco", "Ridge Racer Full Scale (World)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) // 1993-12-13, very different version, incomplete dump. +GAME( 1994, ridgera2, 0, namcos22, ridgera2, namcos22_state, ridger2j, ROT0, "Namco", "Ridge Racer 2 (Rev. RRS2, World)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 1994-06-21 +GAME( 1994, ridgera2j, ridgera2, namcos22, ridgera2, namcos22_state, ridger2j, ROT0, "Namco", "Ridge Racer 2 (Rev. RRS1 Ver.B, Japan)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 1994-06-21 +GAME( 1994, ridgera2ja,ridgera2, namcos22, ridgera2, namcos22_state, ridger2j, ROT0, "Namco", "Ridge Racer 2 (Rev. RRS1, Japan)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 1994-06-13 +GAME( 1994, cybrcomm, 0, namcos22, cybrcomm, namcos22_state, cybrcomm, ROT0, "Namco", "Cyber Commando (Rev. CY1, Japan)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 10/14/94 +GAME( 1995, raveracw, 0, namcos22, raveracw, namcos22_state, raveracw, ROT0, "Namco", "Rave Racer (Rev. RV2, World)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 07/16/95 +GAME( 1995, raveracj, raveracw, namcos22, raveracw, namcos22_state, raveracw, ROT0, "Namco", "Rave Racer (Rev. RV1 Ver.B, Japan)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 07/16/95 +GAME( 1995, raveracja, raveracw, namcos22, raveracw, namcos22_state, raveracw, ROT0, "Namco", "Rave Racer (Rev. RV1, Japan)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 06/29/95 +GAME( 1994, acedrvrw, 0, namcos22, acedrvr, namcos22_state, acedrvr, ROT0, "Namco", "Ace Driver: Racing Evolution (Rev. AD2)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 94/10/20 16:22:25 +GAME( 1996, victlapw, 0, namcos22, victlap, namcos22_state, victlap, ROT0, "Namco", "Ace Driver: Victory Lap (Rev. ADV2)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 96/02/13 17:50:06 /* Super System22 games */ -GAME( 1994, alpinerd, 0, namcos22s, alpiner, namcos22_state, alpiner, ROT0, "Namco", "Alpine Racer (Rev. AR2 Ver.D)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) -GAME( 1994, alpinerc, alpinerd, namcos22s, alpiner, namcos22_state, alpiner, ROT0, "Namco", "Alpine Racer (Rev. AR2 Ver.C)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) -GAME( 1995, airco22b, 0, namcos22s, airco22, namcos22_state, airco22, ROT0, "Namco", "Air Combat 22 (Rev. ACS1 Ver.B, Japan)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS|GAME_NOT_WORKING ) // various problems -GAME( 1995, cybrcycc, 0, namcos22s, cybrcycc, namcos22_state, cybrcyc, ROT0, "Namco", "Cyber Cycles (Rev. CB2 Ver.C)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 95/04/04 -GAME( 1995, dirtdash, 0, namcos22s, dirtdash, namcos22_state, dirtdash, ROT0, "Namco", "Dirt Dash (Rev. DT2)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 95/12/20 20:01:56 -GAME( 1995, timecris, 0, timecris, timecris, namcos22_state, timecris, ROT0, "Namco", "Time Crisis (Rev. TS2 Ver.B)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 96/04/02 18:48:00 -GAME( 1995, timecrisa,timecris, timecris, timecris, namcos22_state, timecris, ROT0, "Namco", "Time Crisis (Rev. TS2 Ver.A)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 96/01/08 18:56:09 -GAME( 1996, propcycl, 0, propcycl, propcycl, namcos22_state, propcycl, ROT0, "Namco", "Prop Cycle (Rev. PR2 Ver.A)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 96/06/18 21:22:13 -GAME( 1996, alpinesa, 0, namcos22s, alpiner, namcos22_state, alpinesa, ROT0, "Namco", "Alpine Surfer (Rev. AF2 Ver.A)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS|GAME_NOT_WORKING ) // 96/07/01 15:19:23. major gfx problems, slave dsp? -GAME( 1996, tokyowar, 0, namcos22s, tokyowar, namcos22_state, tokyowar, ROT0, "Namco", "Tokyo Wars (Rev. TW2 Ver.A)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS|GAME_NOT_WORKING ) // 96/09/03 14:08:47. near-invincible tanks, maybe related to timecris helicopter bug? -GAME( 1996, aquajet, 0, namcos22s, aquajet, namcos22_state, aquajet, ROT0, "Namco", "Aqua Jet (Rev. AJ2 Ver.B)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 96/09/20 14:28:30 -GAME( 1996, alpinr2b, 0, namcos22s, alpiner, namcos22_state, alpiner2, ROT0, "Namco", "Alpine Racer 2 (Rev. ARS2 Ver.B)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 97/01/10 17:10:59 -GAME( 1996, alpinr2a, alpinr2b, namcos22s, alpiner, namcos22_state, alpiner2, ROT0, "Namco", "Alpine Racer 2 (Rev. ARS2 Ver.A)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 96/12/06 13:45:05 -GAME( 1996, adillor, 0, adillor, adillor, namcos22_state, adillor, ROT0, "Namco", "Armadillo Racing (Rev. AM1 Ver.A)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 97/04/07 19:19:41 +GAME( 1994, alpinerd, 0, alpine, alpiner, namcos22_state, alpiner, ROT0, "Namco", "Alpine Racer (Rev. AR2 Ver.D)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) +GAME( 1994, alpinerc, alpinerd, alpine, alpiner, namcos22_state, alpiner, ROT0, "Namco", "Alpine Racer (Rev. AR2 Ver.C)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) +GAME( 1995, airco22b, 0, namcos22s, airco22, namcos22_state, airco22, ROT0, "Namco", "Air Combat 22 (Rev. ACS1 Ver.B, Japan)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) // various problems +GAME( 1995, cybrcycc, 0, namcos22s, cybrcycc, namcos22_state, cybrcyc, ROT0, "Namco", "Cyber Cycles (Rev. CB2 Ver.C)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 95/04/04 +GAME( 1995, dirtdash, 0, namcos22s, dirtdash, namcos22_state, dirtdash, ROT0, "Namco", "Dirt Dash (Rev. DT2)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 95/12/20 20:01:56 +GAME( 1995, timecris, 0, timecris, timecris, namcos22_state, timecris, ROT0, "Namco", "Time Crisis (Rev. TS2 Ver.B)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 96/04/02 18:48:00 +GAME( 1995, timecrisa,timecris, timecris, timecris, namcos22_state, timecris, ROT0, "Namco", "Time Crisis (Rev. TS2 Ver.A)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 96/01/08 18:56:09 +GAME( 1996, propcycl, 0, propcycl, propcycl, namcos22_state, propcycl, ROT0, "Namco", "Prop Cycle (Rev. PR2 Ver.A)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 96/06/18 21:22:13 +GAME( 1996, alpinesa, 0, alpinesa, alpiner, namcos22_state, alpinesa, ROT0, "Namco", "Alpine Surfer (Rev. AF2 Ver.A)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) // 96/07/01 15:19:23. major gfx problems, slave dsp? +GAME( 1996, tokyowar, 0, namcos22s, tokyowar, namcos22_state, tokyowar, ROT0, "Namco", "Tokyo Wars (Rev. TW2 Ver.A)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) // 96/09/03 14:08:47. near-invincible tanks, maybe related to timecris helicopter bug? +GAME( 1996, aquajet, 0, namcos22s, aquajet, namcos22_state, aquajet, ROT0, "Namco", "Aqua Jet (Rev. AJ2 Ver.B)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 96/09/20 14:28:30 +GAME( 1996, alpinr2b, 0, alpine, alpiner, namcos22_state, alpiner2, ROT0, "Namco", "Alpine Racer 2 (Rev. ARS2 Ver.B)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 97/01/10 17:10:59 +GAME( 1996, alpinr2a, alpinr2b, alpine, alpiner, namcos22_state, alpiner2, ROT0, "Namco", "Alpine Racer 2 (Rev. ARS2 Ver.A)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 96/12/06 13:45:05 +GAME( 1996, adillor, 0, adillor, adillor, namcos22_state, adillor, ROT0, "Namco", "Armadillo Racing (Rev. AM1 Ver.A)" , GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) // 97/04/07 19:19:41 diff --git a/src/mame/includes/namcos22.h b/src/mame/includes/namcos22.h index e07ac2e464a..b8a5bc8bb24 100644 --- a/src/mame/includes/namcos22.h +++ b/src/mame/includes/namcos22.h @@ -1,12 +1,5 @@ -#include "video/poly.h" - -#define NAMCOS22_PALETTE_SIZE 0x8000 -#define MAX_LIT_SURFACES 0x80 -#define MAX_RENDER_CMD_SEQ 0x1c - -#define GFX_CHAR 0 -#define GFX_TEXTURE_TILE 1 -#define GFX_SPRITE 2 +#include "video/rgbutil.h" +#include "video/polynew.h" enum { @@ -29,31 +22,170 @@ enum NAMCOS22_ARMADILLO_RACING }; + +struct namcos22_polyvertex +{ + float x, y, z; + int u, v; /* 0..0xfff */ + int bri; /* 0..0xff */ +}; + +enum namcos22_scenenode_type +{ + NAMCOS22_SCENENODE_NONLEAF, + NAMCOS22_SCENENODE_QUAD, + NAMCOS22_SCENENODE_SPRITE +}; + +#define NAMCOS22_RADIX_BITS 4 +#define NAMCOS22_RADIX_BUCKETS (1 << NAMCOS22_RADIX_BITS) +#define NAMCOS22_RADIX_MASK (NAMCOS22_RADIX_BUCKETS - 1) + +struct namcos22_scenenode +{ + namcos22_scenenode_type type; + struct namcos22_scenenode *next; + union + { + struct + { + struct namcos22_scenenode *next[NAMCOS22_RADIX_BUCKETS]; + } nonleaf; + + struct + { + float vx, vy, vw, vh; + int texturebank; + int color; + int cmode; + int flags; + int cz_adjust; + int direct; + namcos22_polyvertex v[4]; + } quad; + + struct + { + int tile, color, pri; + int flipx, flipy; + int linktype; + int cols, rows; + int xpos, ypos; + int cx_min, cx_max; + int cy_min, cy_max; + int sizex, sizey; + int translucency; + int cz; + } sprite; + } data; +}; + + +struct namcos22_object_data +{ + /* poly / sprites */ + rgbint fogcolor; + rgbint fadecolor; + rgbint polycolor; + const pen_t *pens; + bitmap_rgb32 *destbase; + bitmap_ind8 *primap; + int bn; + int flags; + int prioverchar; + int cmode; + int fadefactor; + int pfade_enabled; + int fogfactor; + int zfog_enabled; + int cz_adjust; + int cz_sdelta; + const UINT8 *czram; + + /* sprites */ + const UINT8 *source; + int alpha; + int line_modulo; + int flipx; + int flipy; +}; + + +class namcos22_state; + +class namcos22_renderer : public poly_manager +{ +public: + namcos22_renderer(namcos22_state &state); + + void render_scene(screen_device &screen, bitmap_rgb32 &bitmap); + struct namcos22_scenenode *new_scenenode(running_machine &machine, UINT32 zsort, namcos22_scenenode_type type); + + void reset(); + +private: + namcos22_state &m_state; + + struct namcos22_scenenode m_scenenode_root; + struct namcos22_scenenode *m_scenenode_cur; + + int m_clipx; + int m_clipy; + rectangle m_cliprect; + + inline UINT8 nthbyte(const UINT32 *src, int n) { return (src[n / 4] << ((n & 3) * 8)) >> 24; } + inline UINT16 nthword(const UINT32 *src, int n) { return (src[n / 2] << ((n & 1) * 16)) >> 16; } + + void render_scene_nodes(screen_device &screen, bitmap_rgb32 &bitmap, struct namcos22_scenenode *node); + void render_sprite(screen_device &screen, bitmap_rgb32 &bitmap, struct namcos22_scenenode *node); + void poly3d_drawquad(screen_device &screen, bitmap_rgb32 &bitmap, struct namcos22_scenenode *node); + void poly3d_drawsprite(screen_device &screen, bitmap_rgb32 &dest_bmp, UINT32 code, UINT32 color, int flipx, int flipy, int sx, int sy, int scalex, int scaley, int cz_factor, int prioverchar, int alpha); + + void free_scenenode(struct namcos22_scenenode *node); + struct namcos22_scenenode *alloc_scenenode(running_machine &machine, struct namcos22_scenenode *node); + + void renderscanline_uvi_full(INT32 scanline, const extent_t &extent, const namcos22_object_data &extra, int threadid); + void renderscanline_sprite(INT32 scanline, const extent_t &extent, const namcos22_object_data &extra, int threadid); +}; + + +enum namcos22_dsp_upload_state +{ + NAMCOS22_DSP_UPLOAD_READY, + NAMCOS22_DSP_UPLOAD_DEST, + NAMCOS22_DSP_UPLOAD_DATA +}; + +#define NAMCOS22_MAX_LIT_SURFACES 0x80 +#define NAMCOS22_MAX_RENDER_CMD_SEQ 0x1c + class namcos22_state : public driver_device { public: namcos22_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_maincpu(*this,"maincpu"), - m_master(*this,"master"), - m_slave(*this,"slave"), - m_mcu(*this,"mcu"), - m_iomcu(*this,"iomcu"), - m_spriteram(*this,"spriteram"), - m_shareram(*this,"shareram"), - m_system_controller(*this,"syscontrol"), - m_nvmem(*this,"nvmem"), - m_pSlaveExternalRAM(*this,"slaveextram"), - m_pMasterExternalRAM(*this,"masterextram"), - m_cgram(*this,"cgram"), - m_textram(*this,"textram"), - m_polygonram(*this,"polygonram"), - m_gamma(*this,"gamma"), - m_vics_data(*this,"vics_data"), - m_vics_control(*this,"vics_control"), - m_czattr(*this,"czattr"), - m_tilemapattr(*this,"tilemapattr"), - m_czram(*this,"czram"), + m_maincpu(*this, "maincpu"), + m_master(*this, "master"), + m_slave(*this, "slave"), + m_mcu(*this, "mcu"), + m_iomcu(*this, "iomcu"), + m_spriteram(*this, "spriteram"), + m_shareram(*this, "shareram"), + m_nvmem(*this, "nvmem"), + m_pSlaveExternalRAM(*this, "slaveextram"), + m_pMasterExternalRAM(*this, "masterextram"), + m_paletteram(*this, "paletteram"), + m_cgram(*this, "cgram"), + m_textram(*this, "textram"), + m_polygonram(*this, "polygonram"), + m_mixer(*this, "video_mixer"), + m_gamma_proms(*this, "gamma_proms"), + m_vics_data(*this, "vics_data"), + m_vics_control(*this, "vics_control"), + m_czattr(*this, "czattr"), + m_tilemapattr(*this, "tilemapattr"), + m_czram(*this, "czram"), + m_motor_timer(*this, "motor_timer"), m_pc_pedal_interrupt(*this, "pc_p_int") { } @@ -64,46 +196,48 @@ public: optional_device m_iomcu; optional_shared_ptr m_spriteram; required_shared_ptr m_shareram; - required_shared_ptr m_system_controller; required_shared_ptr m_nvmem; required_shared_ptr m_pSlaveExternalRAM; required_shared_ptr m_pMasterExternalRAM; + required_shared_ptr m_paletteram; required_shared_ptr m_cgram; required_shared_ptr m_textram; required_shared_ptr m_polygonram; - required_shared_ptr m_gamma; + required_shared_ptr m_mixer; + optional_memory_region m_gamma_proms; optional_shared_ptr m_vics_data; optional_shared_ptr m_vics_control; optional_shared_ptr m_czattr; required_shared_ptr m_tilemapattr; optional_shared_ptr m_czram; + optional_device m_motor_timer; optional_device m_pc_pedal_interrupt; - int m_bEnableDspIrqs; + UINT8 m_syscontrol[0x20]; + bool m_dsp_irq_enabled; emu_timer *m_ar_tb_interrupt[2]; - UINT16 m_MasterBIOZ; - UINT32 *m_pPointRAM; + UINT16 m_dsp_master_bioz; + UINT32 *m_pointram; UINT32 m_old_coin_state; UINT32 m_credits1; UINT32 m_credits2; - UINT32 m_PointAddr; - UINT32 m_PointData; + UINT32 m_point_address; + UINT32 m_point_data; UINT16 m_SerialDataSlaveToMasterNext; UINT16 m_SerialDataSlaveToMasterCurrent; int m_RenderBufSize; - UINT16 m_RenderBufData[MAX_RENDER_CMD_SEQ]; + UINT16 m_RenderBufData[NAMCOS22_MAX_RENDER_CMD_SEQ]; UINT16 m_portbits[2]; int m_irq_state; - int m_DspUploadState; + namcos22_dsp_upload_state m_dsp_upload_state; int m_UploadDestIdx; - UINT32 m_AlpineSurferProtData; + UINT32 m_alpinesa_protection; int m_motor_status; - emu_timer *m_motor_timer; int m_p4; UINT16 m_su_82; UINT16 m_keycus_id; int m_gametype; - int m_bSuperSystem22; + int m_is_ss22; int m_chipselect; int m_spot_enable; int m_spot_read_address; @@ -113,37 +247,63 @@ public: UINT8 *m_recalc_czram[4]; UINT32 m_cz_was_written[4]; int m_cz_adjust; - poly_manager *m_poly; - UINT16 *m_pTextureTileMap16; - UINT8 *m_pTextureTileMapAttr; - UINT8 *m_pTextureTileData; - UINT8 m_XYAttrToPixel[16][16][16]; + namcos22_renderer *m_poly; + UINT16 *m_texture_tilemap; + UINT8 *m_texture_tileattr; + UINT8 *m_texture_tiledata; + UINT8 *m_texture_ayx_to_pixel; UINT16 m_dspram_bank; - UINT16 m_UpperWordLatch; - int m_bDSPisActive; - INT32 m_AbsolutePriority; - INT32 m_ObjectShiftValue22; + UINT16 m_dspram16_latch; + bool m_slave_simulation_active; + INT32 m_absolute_priority; + INT32 m_objectshift; UINT16 m_PrimitiveID; - float m_ViewMatrix[4][4]; - UINT8 m_LitSurfaceInfo[MAX_LIT_SURFACES]; + float m_viewmatrix[4][4]; + UINT8 m_LitSurfaceInfo[NAMCOS22_MAX_LIT_SURFACES]; INT32 m_SurfaceNormalFormat; unsigned m_LitSurfaceCount; unsigned m_LitSurfaceIndex; - int m_PtRomSize; - const UINT8 *m_pPolyH; - const UINT8 *m_pPolyM; - const UINT8 *m_pPolyL; + int m_pointrom_size; + INT32 *m_pointrom; UINT8 *m_dirtypal; bitmap_ind16 *m_mix_bitmap; tilemap_t *m_bgtilemap; - DECLARE_READ32_MEMBER(namcos22_gamma_r); - DECLARE_WRITE32_MEMBER(namcos22_gamma_w); + int m_mixer_flags; + int m_fog_r; + int m_fog_g; + int m_fog_b; + int m_fog_r_per_cztype[4]; + int m_fog_g_per_cztype[4]; + int m_fog_b_per_cztype[4]; + UINT32 m_fog_colormask; + int m_poly_fade_r; + int m_poly_fade_g; + int m_poly_fade_b; + int m_poly_fade_enabled; + int m_screen_fade_r; + int m_screen_fade_g; + int m_screen_fade_b; + int m_screen_fade_factor; + int m_spot_limit; + int m_poly_translucency; + int m_text_palbase; + + float m_camera_zoom; + float m_camera_vx; + float m_camera_vy; + float m_camera_vw; + float m_camera_vh; + float m_camera_lx; // unit vector for light direction + float m_camera_ly; // " + float m_camera_lz; // " + int m_camera_ambient; // 0.0..1.0 + int m_camera_power; // 0.0..1.0 + DECLARE_WRITE32_MEMBER(namcos22s_czram_w); DECLARE_READ32_MEMBER(namcos22s_czram_r); DECLARE_READ32_MEMBER(namcos22s_vics_control_r); DECLARE_WRITE32_MEMBER(namcos22s_vics_control_w); - DECLARE_READ32_MEMBER(namcos22_textram_r); DECLARE_WRITE32_MEMBER(namcos22_textram_w); DECLARE_READ32_MEMBER(namcos22_tilemapattr_r); DECLARE_WRITE32_MEMBER(namcos22_tilemapattr_w); @@ -151,9 +311,7 @@ public: DECLARE_WRITE32_MEMBER(namcos22s_spotram_w); DECLARE_READ32_MEMBER(namcos22_dspram_r); DECLARE_WRITE32_MEMBER(namcos22_dspram_w); - DECLARE_READ32_MEMBER(namcos22_cgram_r); DECLARE_WRITE32_MEMBER(namcos22_cgram_w); - DECLARE_READ32_MEMBER(namcos22_paletteram_r); DECLARE_WRITE32_MEMBER(namcos22_paletteram_w); DECLARE_WRITE16_MEMBER(namcos22_dspram16_bank_w); DECLARE_READ16_MEMBER(namcos22_dspram16_r); @@ -163,14 +321,14 @@ public: DECLARE_READ16_MEMBER(pdp_begin_r); DECLARE_READ16_MEMBER(slave_external_ram_r); DECLARE_WRITE16_MEMBER(slave_external_ram_w); - DECLARE_READ16_MEMBER(dsp_HOLD_signal_r); - DECLARE_WRITE16_MEMBER(dsp_HOLD_ACK_w); - DECLARE_WRITE16_MEMBER(dsp_XF_output_w); - DECLARE_WRITE16_MEMBER(point_ram_idx_w); - DECLARE_WRITE16_MEMBER(point_ram_loword_iw); - DECLARE_WRITE16_MEMBER(point_ram_hiword_w); - DECLARE_READ16_MEMBER(point_ram_loword_r); - DECLARE_READ16_MEMBER(point_ram_hiword_ir); + DECLARE_READ16_MEMBER(dsp_hold_signal_r); + DECLARE_WRITE16_MEMBER(dsp_hold_ack_w); + DECLARE_WRITE16_MEMBER(dsp_xf_output_w); + DECLARE_WRITE16_MEMBER(point_address_w); + DECLARE_WRITE16_MEMBER(point_loword_iw); + DECLARE_WRITE16_MEMBER(point_hiword_w); + DECLARE_READ16_MEMBER(point_loword_r); + DECLARE_READ16_MEMBER(point_hiword_ir); DECLARE_WRITE16_MEMBER(dsp_unk2_w); DECLARE_READ16_MEMBER(dsp_unk_port3_r); DECLARE_WRITE16_MEMBER(upload_code_to_slave_dsp_w); @@ -185,7 +343,7 @@ public: DECLARE_WRITE16_MEMBER(dsp_led_w); DECLARE_WRITE16_MEMBER(dsp_unk8_w); DECLARE_WRITE16_MEMBER(master_render_device_w); - DECLARE_READ16_MEMBER(dsp_BIOZ_r); + DECLARE_READ16_MEMBER(dsp_bioz_r); DECLARE_READ16_MEMBER(dsp_slave_port3_r); DECLARE_READ16_MEMBER(dsp_slave_port4_r); DECLARE_READ16_MEMBER(dsp_slave_port5_r); @@ -194,18 +352,16 @@ public: DECLARE_READ16_MEMBER(dsp_slave_port8_r); DECLARE_READ16_MEMBER(dsp_slave_portb_r); DECLARE_WRITE16_MEMBER(dsp_slave_portb_w); - DECLARE_READ32_MEMBER(namcos22_C139_SCI_r); - DECLARE_WRITE32_MEMBER(namcos22_C139_SCI_w); - DECLARE_READ32_MEMBER(namcos22_system_controller_r); - DECLARE_WRITE32_MEMBER(namcos22s_system_controller_w); - DECLARE_WRITE32_MEMBER(namcos22_system_controller_w); + DECLARE_READ32_MEMBER(namcos22_sci_r); + DECLARE_WRITE32_MEMBER(namcos22_sci_w); + DECLARE_READ8_MEMBER(namcos22_system_controller_r); + DECLARE_WRITE8_MEMBER(namcos22s_system_controller_w); + DECLARE_WRITE8_MEMBER(namcos22_system_controller_w); DECLARE_READ32_MEMBER(namcos22_keycus_r); DECLARE_WRITE32_MEMBER(namcos22_keycus_w); DECLARE_READ16_MEMBER(namcos22_portbit_r); DECLARE_WRITE16_MEMBER(namcos22_portbit_w); DECLARE_READ16_MEMBER(namcos22_dipswitch_r); - DECLARE_READ32_MEMBER(namcos22_mcuram_r); - DECLARE_WRITE32_MEMBER(namcos22_mcuram_w); DECLARE_READ32_MEMBER(namcos22_gun_r); DECLARE_WRITE16_MEMBER(namcos22_cpuleds_w); DECLARE_READ32_MEMBER(alpinesa_prot_r); @@ -226,13 +382,65 @@ public: DECLARE_WRITE8_MEMBER(propcycle_mcu_port5_w); DECLARE_WRITE8_MEMBER(alpine_mcu_port5_w); DECLARE_READ8_MEMBER(mcu_port4_s22_r); + DECLARE_READ8_MEMBER(iomcu_port4_s22_r); DECLARE_READ16_MEMBER(mcu141_speedup_r); DECLARE_WRITE16_MEMBER(mcu_speedup_w); DECLARE_READ16_MEMBER(mcu130_speedup_r); DECLARE_READ16_MEMBER(mcuc74_speedup_r); - UINT32 ReadFromCommRAM(offs_t offs ); - void WriteToCommRAM(offs_t offs, UINT32 data ); - void WriteToPointRAM(offs_t offs, UINT32 data ); + + inline UINT8 nthbyte(const UINT32 *src, int n) { return (src[n / 4] << ((n & 3) * 8)) >> 24; } + inline UINT16 nthword(const UINT32 *src, int n) { return (src[n / 2] << ((n & 1) * 16)) >> 16; } + + inline INT32 signed18(INT32 val) { return (val & 0x00020000) ? (INT32)(val | 0xfffc0000) : val & 0x0001ffff; } + inline INT32 signed24(INT32 val) { return (val & 0x00800000) ? (INT32)(val | 0xff000000) : val & 0x007fffff; } + + inline float dspfixed_to_nativefloat(INT16 val) { return val / (float)0x7fff; } + float dspfloat_to_nativefloat(UINT32 val); + + void handle_driving_io(); + void handle_coinage(int slots, int address_is_odd); + void handle_cybrcomm_io(); + UINT32 pdp_polygonram_read(offs_t offs); + void pdp_polygonram_write(offs_t offs, UINT32 data); + void point_write(offs_t offs, UINT32 data); + void slave_halt(); + void slave_enable(); + void enable_slave_simulation(bool enable); + + void matrix3d_multiply(float a[4][4], float b[4][4]); + void matrix3d_identity(float m[4][4]); + void transform_point(float *vx, float *vy, float *vz, float m[4][4]); + void transform_normal(float *nx, float *ny, float *nz, float m[4][4]); + void register_normals(INT32 addr, float m[4][4]); + + void blit_single_quad(bitmap_rgb32 &bitmap, UINT32 color, UINT32 addr, float m[4][4], INT32 polyshift, int flags, int packetformat); + void blit_quads(bitmap_rgb32 &bitmap, INT32 addr, float m[4][4], INT32 base); + void blit_polyobject(bitmap_rgb32 &bitmap, int code, float m[4][4]); + + void slavesim_handle_bb0003(const INT32 *src); + void slavesim_handle_200002(bitmap_rgb32 &bitmap, const INT32 *src); + void slavesim_handle_300000(const INT32 *src); + void slavesim_handle_233002(const INT32 *src); + void simulate_slavedsp(bitmap_rgb32 &bitmap); + + INT32 point_read(INT32 addr); + void init_tables(); + void update_mixer(); + void update_palette(); + void recalc_czram(); + void draw_direct_poly(const UINT16 *src); + void draw_polygons(bitmap_rgb32 &bitmap); + void draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect); + void draw_sprite_group(bitmap_rgb32 &bitmap, const rectangle &cliprect, const UINT32 *src, const UINT32 *attr, int num_sprites, int deltax, int deltay, int y_lowres); + void draw_text_layer(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + void namcos22s_mix_text_layer(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int prival); + void namcos22_mix_text_layer(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + void install_c74_speedup(); + void install_130_speedup(); + void install_141_speedup(); + void namcos22_init(int game_type); + DECLARE_DRIVER_INIT(acedrvr); DECLARE_DRIVER_INIT(aquajet); DECLARE_DRIVER_INIT(adillor); @@ -250,7 +458,8 @@ public: DECLARE_DRIVER_INIT(alpiner); DECLARE_DRIVER_INIT(ridgeraj); DECLARE_DRIVER_INIT(alpinesa); - TILE_GET_INFO_MEMBER(TextTilemapGetInfo); + + TILE_GET_INFO_MEMBER(get_text_tile_info); virtual void machine_reset(); virtual void machine_start(); DECLARE_MACHINE_START(adillor); @@ -265,15 +474,8 @@ public: TIMER_CALLBACK_MEMBER(adillor_trackball_interrupt); TIMER_DEVICE_CALLBACK_MEMBER(propcycl_pedal_update); TIMER_DEVICE_CALLBACK_MEMBER(propcycl_pedal_interrupt); - TIMER_CALLBACK_MEMBER(alpine_steplock_callback); + TIMER_DEVICE_CALLBACK_MEMBER(alpine_steplock_callback); TIMER_DEVICE_CALLBACK_MEMBER(dsp_master_serial_irq); TIMER_DEVICE_CALLBACK_MEMBER(dsp_slave_serial_irq); TIMER_DEVICE_CALLBACK_MEMBER(mcu_irq); - void namcos22_reset(); - void namcos22_exit(); }; - -/*----------- defined in video/namcos22.c -----------*/ -void namcos22_draw_direct_poly( running_machine &machine, const UINT16 *pSource ); -UINT32 namcos22_point_rom_r( running_machine &machine, offs_t offs ); -void namcos22_enable_slave_simulation( running_machine &machine, int enable ); diff --git a/src/mame/video/namcos22.c b/src/mame/video/namcos22.c index 74ad23d5683..fef27a3daa3 100644 --- a/src/mame/video/namcos22.c +++ b/src/mame/video/namcos22.c @@ -1,10 +1,11 @@ /** * video hardware for Namco System22 * - * todo (ordered by importance): + * TODO: * * - emulate slave dsp! - * - texture u/v mapping is often 1 pixel off, resulting in many glitch lines/gaps between textures + * - texture u/v mapping is often 1 pixel off, resulting in many glitch lines/gaps between textures. The glitch may be in MAME core: + * it used to be much worse with the old poly.h * - tokyowar tanks are not shootable, same for timecris helicopter, there's still a very small hitbox but almost impossible to hit * (is this related to dsp? or cpu?) * - find out how/where vics num_sprites is determined exactly, currently a workaround is needed for airco22b and dirtdash @@ -15,12 +16,13 @@ * - improve ss22 spot: * + dirtdash spotlight is opaque for a short time when exiting the jungle level * + dirtdash speedometer has wrong colors when in the jungle level - * + dirtdash record time message creates a 'gap' in the spotlight when entering the jungle level (possibly just a game bug) + * + dirtdash record time message creates a 'gap' in the spotlight when entering the jungle level (possibly just a game bug?) + * - add layer enable in system 22, see bugs in cybrcomm and victlapw * - window clipping is wrong in acedrvrw, victlapw * - ridgerac waving flag title screen is missing, just an empty beach scenery instead * - global offset is wrong in non-super22 servicemode video test, and above that, it flickers in acedrvrw, victlapw - * - dirtdash polys are broken at the start section of the mountain level - * - alpinr2b skiier selection screen should have mirrored models (easiest to see with cursor on the red pants guy) + * - dirtdash polys are broken at the start section of the mountain level, maybe bad rom? + * - alpinr2b skiier selection screen should have mirrored models (easiest to see with cursor on the red pants guy). specular reflection? * - propcycl scoreboard sprite part should fade out in attract mode and just before game over, fader or fog related? * - ridgerac fogging isn't applied to the upper/side part of the sky (best seen when driving down a hill), it's fine in ridgera2 * czram contents is rather odd here and partly cleared (probably the cause?): @@ -37,384 +39,93 @@ #include "emu.h" #include "video/rgbutil.h" +#include "video/polynew.h" #include "includes/namcos22.h" -#include "video/poly.h" -/* for debug: allow memdump to file with D key */ -#define ALLOW_MEMDUMP 0 -#if ALLOW_MEMDUMP -static void Dump( address_space &space, FILE *f, unsigned addr1, unsigned addr2, const char *name ) +// polynew constructor +namcos22_renderer::namcos22_renderer(namcos22_state &state) + : poly_manager(state.machine()), + m_state(state) + { } + +void namcos22_renderer::reset() { - unsigned addr; - fprintf( f, "%s:\n", name ); - for( addr=addr1; addr<=addr2; addr+=16 ) - { - UINT8 data[16]; - int bHasNonZero = 0; - int i; - for( i=0; i<16; i++ ) - { - data[i] = space.read_byte(addr+i ); - if( data[i] ) - { - bHasNonZero = 1; - } - } - if( bHasNonZero ) - { - fprintf( f,"%08x:", addr ); - for( i=0; i<16; i++ ) - { - if( (i&0x03)==0 ) - { - fprintf( f, " " ); - } - fprintf( f, "%02x", data[i] ); - } - fprintf( f, "\n" ); - } - } - fprintf( f, "\n" ); -} -#endif + memset(&m_scenenode_root, 0, sizeof(m_scenenode_root)); + m_scenenode_cur = NULL; - -static UINT8 nthbyte( const UINT32 *pSource, int offs ) -{ - pSource += offs/4; - return (pSource[0]<<((offs&3)*8))>>24; -} - -static UINT16 nthword( const UINT32 *pSource, int offs ) -{ - pSource += offs/2; - return (pSource[0]<<((offs&1)*16))>>16; -} - -INLINE UINT8 Clamp256( int v ) -{ - if( v<0 ) - { - v = 0; - } - else if( v>255 ) - { - v = 255; - } - return v; -} - - -static struct -{ - int flags; - int rFogColor; - int gFogColor; - int bFogColor; - UINT32 fog_colormask; - int rFogColor_per_cztype[4]; - int gFogColor_per_cztype[4]; - int bFogColor_per_cztype[4]; - int rPolyFadeColor; - int gPolyFadeColor; - int bPolyFadeColor; - int PolyFade_enabled; - int rFadeColor; - int gFadeColor; - int bFadeColor; - int fadeFactor; - int spot_limit; - int poly_translucency; - int palBase; -} mixer; - -static void UpdateVideoMixer( running_machine &machine ) -{ - int i; - namcos22_state *state = machine.driver_data(); - poly_wait(state->m_poly, "UpdateVideoMixer"); - memset( &mixer, 0, sizeof(mixer) ); -#if 0 // show reg contents - char msg1[0x1000]={0}, msg2[0x1000]={0}; - int st=0x000/16; - for (i=st;i<(st+3);i++) - { - sprintf(msg2,"%04X %08X %08X %08X %08X\n",i*16,state->m_gamma[i*4+0],state->m_gamma[i*4+1],state->m_gamma[i*4+2],state->m_gamma[i*4+3]); - strcat(msg1,msg2); - } - if (1) // + other non-super regs - if (!state->m_bSuperSystem22) - { - strcat(msg1,"\n"); - for (i=8;i<=0x20;i+=8) - { - sprintf(msg2,"%04X %08X %08X %08X %08X\n",i*16,state->m_gamma[i*4+0],state->m_gamma[i*4+1],state->m_gamma[i*4+2],state->m_gamma[i*4+3]); - strcat(msg1,msg2); - } - } - popmessage("%s",msg1); -#endif - - if( state->m_bSuperSystem22 ) - { -/* - 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 14 18 1c -00824000: ffffff00 00000000 0000007f 00ff0000 1000ff00 0f000000 00ff007f 00010007 // time crisis -00824000: ffffff00 00000000 1830407f 00800000 0000007f 0f000000 0000037f 00010007 // trans sprite -00824000: ffffff00 00000000 3040307f 00000000 0080007f 0f000000 0000037f 00010007 // trans poly -00824000: ffffff00 00000000 1800187f 00800000 0080007f 0f000000 0000037f 00010007 // trans poly(2) -00824000: ffffff00 00000000 1800187f 00000000 0000007f 0f800000 0000037f 00010007 // trans text - - 00,01,02 polygon fade rgb - 03 - 04 - 05,06,07 world fog rgb - 08,09,0a background color - 0b - 0c - 0d spot factor limit value - 0e enable spot factor limit - 0f - 10 - 11 global polygon alpha factor - 12,13 textlayer alpha pen comparison - 14 textlayer alpha pen mask? - 15 textlayer alpha factor - 16,17,18 global fade rgb - 19 global fade factor - 1a fade target flags - 1b textlayer palette base - 1c - 1d - 1e - 1f layer enable -*/ - mixer.rPolyFadeColor = nthbyte( state->m_gamma, 0x00 ); - mixer.gPolyFadeColor = nthbyte( state->m_gamma, 0x01 ); - mixer.bPolyFadeColor = nthbyte( state->m_gamma, 0x02 ); mixer.PolyFade_enabled = (mixer.rPolyFadeColor == 0xff && mixer.gPolyFadeColor == 0xff && mixer.bPolyFadeColor == 0xff) ? 0 : 1; - mixer.rFogColor = nthbyte( state->m_gamma, 0x05 ); - mixer.gFogColor = nthbyte( state->m_gamma, 0x06 ); - mixer.bFogColor = nthbyte( state->m_gamma, 0x07 ); - mixer.spot_limit = nthbyte( state->m_gamma, 0x0d ); - mixer.poly_translucency = nthbyte( state->m_gamma, 0x11 ); - mixer.rFadeColor = nthbyte( state->m_gamma, 0x16 ); - mixer.gFadeColor = nthbyte( state->m_gamma, 0x17 ); - mixer.bFadeColor = nthbyte( state->m_gamma, 0x18 ); - mixer.fadeFactor = nthbyte( state->m_gamma, 0x19 ); - mixer.flags = nthbyte( state->m_gamma, 0x1a ); - mixer.palBase = nthbyte( state->m_gamma, 0x1b ) & 0x7f; - - // put spot-specific flags into high word - mixer.flags |= state->m_spot_enable << 16; - mixer.flags |= (nthbyte(state->m_gamma, 0x0e) & 1) << 17; - mixer.flags |= (state->m_chipselect & 0xc000) << 4; - } - else - { -/* -90020000: 4f030000 7f00007f 4d4d4d42 0c00c0c0 -90020010: c0010001 00010000 00000000 00000000 -90020080: 00010101 01010102 00000000 00000000 -900200c0: 00000000 00000000 00000000 03000000 -90020100: fff35000 00000000 00000000 00000000 -90020180: ff713700 00000000 00000000 00000000 -90020200: ff100000 00000000 00000000 00000000 - - 00,01 display flags - 02 - 03 - 04 - 05 - 06 - 07 textlayer palette base? - 08,09,0a textlayer pen c shadow rgb - 0b,0c,0d textlayer pen d shadow rgb - 0e,0f,10 textlayer pen e shadow rgb - 11,12 global fade factor red - 13,14 global fade factor green - 15,16 global fade factor blue - 80-87 fog color mask? - 100,180,200 fog rgb 0 - 101,181,201 fog rgb 1 - 102,182,202 fog rgb 2 - 103,183,203 fog rgb 3 -*/ - mixer.flags = nthbyte( state->m_gamma, 0x00 )*256 + nthbyte( state->m_gamma, 0x01 ); - mixer.rPolyFadeColor = nthbyte( state->m_gamma, 0x11 )*256 + nthbyte( state->m_gamma, 0x12 ); // 0x0100 = 1.0 - mixer.gPolyFadeColor = nthbyte( state->m_gamma, 0x13 )*256 + nthbyte( state->m_gamma, 0x14 ); - mixer.bPolyFadeColor = nthbyte( state->m_gamma, 0x15 )*256 + nthbyte( state->m_gamma, 0x16 ); - mixer.PolyFade_enabled = (mixer.rPolyFadeColor == 0x100 && mixer.gPolyFadeColor == 0x100 && mixer.bPolyFadeColor == 0x100) ? 0 : 1; - - // raveracw is the only game using multiple fog colors (city smog, cars under tunnels, brake disc in attract mode) - mixer.fog_colormask = state->m_gamma[0x84/4]; - - // fog color per cz type - for (i=0; i<4; i++) - { - mixer.rFogColor_per_cztype[i] = nthbyte( state->m_gamma, 0x0100+i ); - mixer.gFogColor_per_cztype[i] = nthbyte( state->m_gamma, 0x0180+i ); - mixer.bFogColor_per_cztype[i] = nthbyte( state->m_gamma, 0x0200+i ); - } - - mixer.palBase = 0x7f; - } -} - -READ32_MEMBER(namcos22_state::namcos22_gamma_r) -{ - return m_gamma[offset]; -} - -WRITE32_MEMBER(namcos22_state::namcos22_gamma_w) -{ - COMBINE_DATA( &m_gamma[offset] ); -} - -static struct -{ - int cx,cy; - rectangle scissor; -} mClip; - -static void poly3d_Clip( float vx, float vy, float vw, float vh ) -{ - int cx = 320+vx; - int cy = 240+vy; - mClip.cx = cx; - mClip.cy = cy; - mClip.scissor.set(cx + vw, cx - vw, cy + vh, cy - vh); - if( mClip.scissor.min_x<0 ) mClip.scissor.min_x = 0; - if( mClip.scissor.max_x>639 ) mClip.scissor.max_x = 639; - if( mClip.scissor.min_y<0 ) mClip.scissor.min_y = 0; - if( mClip.scissor.max_y>479 ) mClip.scissor.max_y = 479; -} - -static void sprite_Clip( int min_x, int max_x, int min_y, int max_y ) -{ - // cx/cy not used - mClip.scissor.set(min_x, max_x, min_y, max_y); - if( mClip.scissor.min_x<0 ) mClip.scissor.min_x = 0; - if( mClip.scissor.max_x>639 ) mClip.scissor.max_x = 639; - if( mClip.scissor.min_y<0 ) mClip.scissor.min_y = 0; - if( mClip.scissor.max_y>479 ) mClip.scissor.max_y = 479; -} - -static void poly3d_NoClip( void ) -{ - mClip.cx = 320; - mClip.cy = 240; - mClip.scissor.set(0, 639, 0, 479); -} - -struct Poly3dVertex -{ - float x,y,z; - int u,v; /* 0..0xfff */ - int bri; /* 0..0xff */ -}; - -#define MIN_Z (10.0f) - - -INLINE unsigned texel( namcos22_state *state, unsigned x, unsigned y ) -{ - unsigned offs = ((y&0xfff0)<<4)|((x&0xff0)>>4); - unsigned tile = state->m_pTextureTileMap16[offs]; - return state->m_pTextureTileData[(tile<<8)|state->m_XYAttrToPixel[state->m_pTextureTileMapAttr[offs]][x&0xf][y&0xf]]; + m_clipx = 320; + m_clipy = 240; + m_cliprect.set(0, 639, 0, 479); } -struct poly_extra_data +/*********************************************************************************************/ + +// polynew scanline callbacks +void namcos22_renderer::renderscanline_uvi_full(INT32 scanline, const extent_t &extent, const namcos22_object_data &extra, int threadid) { - /* poly / sprites */ - running_machine *machine; - rgbint fogColor; - rgbint fadeColor; - rgbint polyColor; - const pen_t *pens; - bitmap_ind8 *priority_bitmap; - int bn; - int flags; - int prioverchar; - int cmode; - int fadeFactor; - int pfade_enabled; - int fogFactor; - int zfog_enabled; - int cz_adjust; - int cz_sdelta; - const UINT8 *czram; - - /* sprites */ - const UINT8 *source; - int alpha; - int line_modulo; - int flipx; - int flipy; -}; - - -static void renderscanline_uvi_full(void *destbase, INT32 scanline, const poly_extent *extent, const void *extradata, int threadid) -{ - const poly_extra_data *extra = (const poly_extra_data *)extradata; - namcos22_state *state = extra->machine->driver_data(); - float z = extent->param[0].start; - float u = extent->param[1].start; - float v = extent->param[2].start; - float i = extent->param[3].start; - float dz = extent->param[0].dpdx; - float du = extent->param[1].dpdx; - float dv = extent->param[2].dpdx; - float di = extent->param[3].dpdx; - bitmap_rgb32 *destmap = (bitmap_rgb32 *)destbase; - int bn = extra->bn * 0x1000; - const pen_t *pens = extra->pens; - const UINT8 *czram = extra->czram; - int cz_adjust = extra->cz_adjust; - int cz_sdelta = extra->cz_sdelta; - int zfog_enabled = extra->zfog_enabled; - int fogFactor = 0xff - extra->fogFactor; - int fadeFactor = 0xff - extra->fadeFactor; - int alphaFactor = 0xff - mixer.poly_translucency; - rgbint fogColor = extra->fogColor; - rgbint fadeColor = extra->fadeColor; - rgbint polyColor = extra->polyColor; - int polyfade_enabled = extra->pfade_enabled; + float z = extent.param[0].start; + float u = extent.param[1].start; + float v = extent.param[2].start; + float i = extent.param[3].start; + float dz = extent.param[0].dpdx; + float du = extent.param[1].dpdx; + float dv = extent.param[2].dpdx; + float di = extent.param[3].dpdx; + int bn = extra.bn * 0x1000; + const pen_t *pens = extra.pens; + const UINT8 *czram = extra.czram; + int cz_adjust = extra.cz_adjust; + int cz_sdelta = extra.cz_sdelta; + int zfog_enabled = extra.zfog_enabled; + int fogfactor = 0xff - extra.fogfactor; + int fadefactor = 0xff - extra.fadefactor; + int alphafactor = 0xff - m_state.m_poly_translucency; + rgbint fogcolor = extra.fogcolor; + rgbint fadecolor = extra.fadecolor; + rgbint polycolor = extra.polycolor; + int polyfade_enabled = extra.pfade_enabled; int penmask = 0xff; int penshift = 0; - int prioverchar = extra->prioverchar; - UINT32 *dest = &destmap->pix32(scanline); - UINT8 *primap = &extra->priority_bitmap->pix8(scanline); - int x; + int prioverchar = extra.prioverchar; + UINT32 *dest = &extra.destbase->pix32(scanline); + UINT8 *primap = &extra.primap->pix8(scanline); + UINT16 *ttmap = m_state.m_texture_tilemap; + UINT8 *ttattr = m_state.m_texture_tileattr; + UINT8 *ttdata = m_state.m_texture_tiledata; + UINT8 *tt_ayx_to_pixel = m_state.m_texture_ayx_to_pixel; - if (extra->cmode & 4) + if (extra.cmode & 4) { - pens += 0xec + ((extra->cmode & 8) << 1); + pens += 0xec + ((extra.cmode & 8) << 1); penmask = 0x03; - penshift = 2 * (~extra->cmode & 3); + penshift = 2 * (~extra.cmode & 3); } - else if (extra->cmode & 2) + else if (extra.cmode & 2) { - pens += 0xe0 + ((extra->cmode & 8) << 1); + pens += 0xe0 + ((extra.cmode & 8) << 1); penmask = 0x0f; - penshift = 4 * (~extra->cmode & 1); + penshift = 4 * (~extra.cmode & 1); } // slight differences between super and non-super, do the branch here for optimization // normal: 1 fader, no alpha, shading after fog // super: 2 faders, alpha, shading before fog - if (state->m_bSuperSystem22) + if (m_state.m_is_ss22) { - for( x=extent->startx; xstopx; x++ ) + for (int x = extent.startx; x < extent.stopx; x++) { float ooz = 1.0f / z; - int pen = texel(state, (int)(u*ooz), bn+(int)(v*ooz)); + int tx = (int)(u * ooz); + int ty = (int)(v * ooz) + bn; + int to = ((ty & 0xfff0) << 4) | ((tx & 0xff0) >> 4); + int pen = ttdata[(ttmap[to] << 8) | tt_ayx_to_pixel[ttattr[to] << 8 | (ty << 4 & 0xf0) | (tx & 0xf)]]; // pen = 0x55; // debug: disable textures rgbint rgb; - rgb_to_rgbint(&rgb, pens[pen>>penshift&penmask]); + rgb_to_rgbint(&rgb, pens[pen >> penshift & penmask]); // apply shading before fog int shade = i*ooz; @@ -427,26 +138,27 @@ static void renderscanline_uvi_full(void *destbase, INT32 scanline, const poly_e // discard low byte and clamp to 0-1fff if ((UINT32)cz < 0x200000) cz >>= 8; else cz = (cz < 0) ? 0 : 0x1fff; - if ((fogFactor = czram[cz] + cz_sdelta) > 0) + fogfactor = czram[cz] + cz_sdelta; + if (fogfactor > 0) { - if (fogFactor>0xff) fogFactor=0xff; - rgbint_blend(&rgb, &fogColor, 0xff-fogFactor); + if (fogfactor > 0xff) fogfactor = 0xff; + rgbint_blend(&rgb, &fogcolor, 0xff - fogfactor); } } - else if (fogFactor != 0xff) // direct - rgbint_blend(&rgb, &fogColor, fogFactor); + else if (fogfactor != 0xff) // direct + rgbint_blend(&rgb, &fogcolor, fogfactor); - if( polyfade_enabled ) - rgbint_scale_channel_and_clamp(&rgb, &polyColor); + if (polyfade_enabled) + rgbint_scale_channel_and_clamp(&rgb, &polycolor); - if( fadeFactor != 0xff ) - rgbint_blend(&rgb, &fadeColor, fadeFactor); + if (fadefactor != 0xff) + rgbint_blend(&rgb, &fadecolor, fadefactor); - if( alphaFactor != 0xff ) + if (alphafactor != 0xff) { rgbint mix; rgb_to_rgbint(&mix, dest[x]); - rgbint_blend(&rgb, &mix, alphaFactor); + rgbint_blend(&rgb, &mix, alphafactor); } dest[x] = rgbint_to_rgb(&rgb); @@ -460,14 +172,17 @@ static void renderscanline_uvi_full(void *destbase, INT32 scanline, const poly_e } else { - for( x=extent->startx; xstopx; x++ ) + for (int x = extent.startx; x < extent.stopx; x++) { float ooz = 1.0f / z; - int pen = texel(state, (int)(u*ooz), bn+(int)(v*ooz)); + int tx = (int)(u * ooz); + int ty = (int)(v * ooz) + bn; + int to = ((ty & 0xfff0) << 4) | ((tx & 0xff0) >> 4); + int pen = ttdata[(ttmap[to] << 8) | tt_ayx_to_pixel[ttattr[to] << 8 | (ty << 4 & 0xf0) | (tx & 0xf)]]; // pen = 0x55; // debug: disable textures rgbint rgb; - rgb_to_rgbint(&rgb, pens[pen>>penshift&penmask]); + rgb_to_rgbint(&rgb, pens[pen >> penshift & penmask]); // per-z distance fogging if (zfog_enabled) @@ -476,18 +191,19 @@ static void renderscanline_uvi_full(void *destbase, INT32 scanline, const poly_e // discard low byte and clamp to 0-1fff if ((UINT32)cz < 0x200000) cz >>= 8; else cz = (cz < 0) ? 0 : 0x1fff; - if ((fogFactor = czram[NATIVE_ENDIAN_VALUE_LE_BE(3,0)^cz]) != 0) - rgbint_blend(&rgb, &fogColor, 0xff-fogFactor); + fogfactor = czram[NATIVE_ENDIAN_VALUE_LE_BE(3, 0) ^ cz]; + if (fogfactor != 0) + rgbint_blend(&rgb, &fogcolor, 0xff - fogfactor); } - else if (fogFactor != 0xff) // direct - rgbint_blend(&rgb, &fogColor, fogFactor); + else if (fogfactor != 0xff) // direct + rgbint_blend(&rgb, &fogcolor, fogfactor); // apply shading after fog int shade = i*ooz; rgbint_scale_immediate_and_clamp(&rgb, shade << 2); - if( polyfade_enabled ) - rgbint_scale_channel_and_clamp(&rgb, &polyColor); + if (polyfade_enabled) + rgbint_scale_channel_and_clamp(&rgb, &polycolor); dest[x] = rgbint_to_rgb(&rgb); primap[x] |= prioverchar; @@ -500,49 +216,117 @@ static void renderscanline_uvi_full(void *destbase, INT32 scanline, const poly_e } } -static void poly3d_DrawQuad(screen_device &screen, bitmap_rgb32 &bitmap, int textureBank, int color, Poly3dVertex pv[4], int flags, int cz_adjust, int direct, int cmode ) + +void namcos22_renderer::renderscanline_sprite(INT32 scanline, const extent_t &extent, const namcos22_object_data &extra, int threadid) { - namcos22_state *state = screen.machine().driver_data(); - poly_extra_data *extra = (poly_extra_data *)poly_get_extra_data(state->m_poly); - poly_vertex v[4], clipv[6]; + int y_index = extent.param[1].start - extra.flipy; + float x_index = extent.param[0].start - extra.flipx; + float dx = extent.param[0].dpdx; + const pen_t *pal = extra.pens; + int prioverchar = extra.prioverchar; + int alphafactor = extra.alpha; + int fogfactor = 0xff - extra.fogfactor; + int fadefactor = 0xff - extra.fadefactor; + rgbint fogcolor = extra.fogcolor; + rgbint fadecolor = extra.fadecolor; + UINT8 *source = (UINT8 *)extra.source + y_index * extra.line_modulo; + UINT32 *dest = &extra.destbase->pix32(scanline); + UINT8 *primap = &extra.primap->pix8(scanline); + + for (int x = extent.startx; x < extent.stopx; x++) + { + int pen = source[(int)x_index]; + if (pen != 0xff) + { + rgbint rgb; + rgb_to_rgbint(&rgb, pal[pen]); + + if (fogfactor != 0xff) + rgbint_blend(&rgb, &fogcolor, fogfactor); + + if (fadefactor != 0xff) + rgbint_blend(&rgb, &fadecolor, fadefactor); + + if (alphafactor != 0xff) + { + rgbint mix; + rgb_to_rgbint(&mix, dest[x]); + rgbint_blend(&rgb, &mix, alphafactor); + } + + dest[x] = rgbint_to_rgb(&rgb); + primap[x] |= prioverchar; + } + x_index += dx; + } +} + + + +/*********************************************************************************************/ + +void namcos22_renderer::poly3d_drawquad(screen_device &screen, bitmap_rgb32 &bitmap, struct namcos22_scenenode *node) +{ + namcos22_object_data &extra = object_data_alloc(); + vertex_t v[4]; + vertex_t clipv[6]; int clipverts; int vertnum; + + int direct = node->data.quad.direct; + int flags = node->data.quad.flags; + int color = node->data.quad.color; + int cz_adjust = node->data.quad.cz_adjust; + + extra.destbase = &bitmap; + extra.pfade_enabled = 0; + extra.zfog_enabled = 0; + extra.fadefactor = 0; + extra.fogfactor = 0; - extra->machine = &screen.machine(); - extra->pfade_enabled = 0; - extra->zfog_enabled = 0; - extra->fadeFactor = 0; - extra->fogFactor = 0; + extra.pens = &screen.machine().pens[(color & 0x7f) << 8]; + extra.primap = &screen.priority(); + extra.bn = node->data.quad.texturebank; + extra.flags = flags; + extra.cz_adjust = cz_adjust; + extra.cmode = node->data.quad.cmode; + extra.prioverchar = ((node->data.quad.cmode & 7) == 1) ? 1 : 0; + extra.prioverchar |= m_state.m_is_ss22 ? 2 : 0; - extra->pens = &screen.machine().pens[(color&0x7f)<<8]; - extra->priority_bitmap = &screen.priority(); - extra->bn = textureBank; - extra->flags = flags; - extra->cz_adjust = cz_adjust; - extra->cmode = cmode; - extra->prioverchar = (state->m_bSuperSystem22 << 1) | ((cmode & 7) == 1); + // scene clip + int cx = 320 + node->data.quad.vx; + int cy = 240 + node->data.quad.vy; + m_clipx = cx; + m_clipy = cy; + m_cliprect.set(cx + node->data.quad.vw, cx - node->data.quad.vw, cy + node->data.quad.vh, cy - node->data.quad.vh); + if (m_cliprect.min_x < 0) m_cliprect.min_x = 0; + if (m_cliprect.max_x > 639) m_cliprect.max_x = 639; + if (m_cliprect.min_y < 0) m_cliprect.min_y = 0; + if (m_cliprect.max_y > 479) m_cliprect.max_y = 479; - /* non-direct case: project and z-clip */ + // non-direct case: project and z-clip if (!direct) { for (vertnum = 0; vertnum < 4; vertnum++) { - v[vertnum].x = pv[vertnum].x; - v[vertnum].y = pv[vertnum].y; - v[vertnum].p[0] = pv[vertnum].z; - v[vertnum].p[1] = pv[vertnum].u; - v[vertnum].p[2] = pv[vertnum].v; - v[vertnum].p[3] = pv[vertnum].bri; + v[vertnum].x = node->data.quad.v[vertnum].x; + v[vertnum].y = node->data.quad.v[vertnum].y; + v[vertnum].p[0] = node->data.quad.v[vertnum].z; + v[vertnum].p[1] = node->data.quad.v[vertnum].u; + v[vertnum].p[2] = node->data.quad.v[vertnum].v; + v[vertnum].p[3] = node->data.quad.v[vertnum].bri; } - clipverts = poly_zclip_if_less(4, v, clipv, 4, MIN_Z); + + clipverts = zclip_if_less(4, v, clipv, 4, 10.0f); + assert(clipverts <= ARRAY_LENGTH(clipv)); if (clipverts < 3) return; - assert(clipverts <= ARRAY_LENGTH(clipv)); + for (vertnum = 0; vertnum < clipverts; vertnum++) { float ooz = 1.0f / clipv[vertnum].p[0]; - clipv[vertnum].x = mClip.cx + clipv[vertnum].x * ooz; - clipv[vertnum].y = mClip.cy - clipv[vertnum].y * ooz; + clipv[vertnum].x = m_clipx + clipv[vertnum].x * ooz; + clipv[vertnum].y = m_clipy - clipv[vertnum].y * ooz; clipv[vertnum].p[0] = ooz; clipv[vertnum].p[1] = (clipv[vertnum].p[1] + 0.5f) * ooz; clipv[vertnum].p[2] = (clipv[vertnum].p[2] + 0.5f) * ooz; @@ -550,34 +334,34 @@ static void poly3d_DrawQuad(screen_device &screen, bitmap_rgb32 &bitmap, int tex } } - /* direct case: don't clip, and treat pv->z as 1/z */ + // direct case: don't clip, and treat pv->z as 1/z else { clipverts = 4; for (vertnum = 0; vertnum < 4; vertnum++) { - float ooz = pv[vertnum].z; - clipv[vertnum].x = mClip.cx + pv[vertnum].x; - clipv[vertnum].y = mClip.cy - pv[vertnum].y; + float ooz = node->data.quad.v[vertnum].z; + clipv[vertnum].x = m_clipx + node->data.quad.v[vertnum].x; + clipv[vertnum].y = m_clipy - node->data.quad.v[vertnum].y; clipv[vertnum].p[0] = ooz; - clipv[vertnum].p[1] = (pv[vertnum].u + 0.5f) * ooz; - clipv[vertnum].p[2] = (pv[vertnum].v + 0.5f) * ooz; - clipv[vertnum].p[3] = (pv[vertnum].bri + 0.5f) * ooz; + clipv[vertnum].p[1] = (node->data.quad.v[vertnum].u + 0.5f) * ooz; + clipv[vertnum].p[2] = (node->data.quad.v[vertnum].v + 0.5f) * ooz; + clipv[vertnum].p[3] = (node->data.quad.v[vertnum].bri + 0.5f) * ooz; } } - if( state->m_bSuperSystem22 ) + if (m_state.m_is_ss22) { // global fade - if (mixer.flags&1) + if (m_state.m_mixer_flags & 1) { - extra->fadeFactor = mixer.fadeFactor; - rgb_comp_to_rgbint(&extra->fadeColor, mixer.rFadeColor, mixer.gFadeColor, mixer.bFadeColor); + extra.fadefactor = m_state.m_screen_fade_factor; + rgb_comp_to_rgbint(&extra.fadecolor, m_state.m_screen_fade_r, m_state.m_screen_fade_g, m_state.m_screen_fade_b); } // poly fade - extra->pfade_enabled = mixer.PolyFade_enabled; - rgb_comp_to_rgbint(&extra->polyColor, mixer.rPolyFadeColor, mixer.gPolyFadeColor, mixer.bPolyFadeColor); + extra.pfade_enabled = m_state.m_poly_fade_enabled; + rgb_comp_to_rgbint(&extra.polycolor, m_state.m_poly_fade_r, m_state.m_poly_fade_g, m_state.m_poly_fade_b); /* poly fog (not completely accurate yet) @@ -644,29 +428,29 @@ static void poly3d_DrawQuad(screen_device &screen, bitmap_rgb32 &bitmap, int tex */ if (~color & 0x80) { - int cztype = flags&3; - if (nthword(state->m_czattr, 4) & (4<<(cztype*4))) + int cztype = flags & 3; + if (nthword(m_state.m_czattr, 4) & (4 << (cztype * 4))) { - int delta = (INT16)nthword(state->m_czattr, cztype); - rgb_comp_to_rgbint(&extra->fogColor, mixer.rFogColor, mixer.gFogColor, mixer.bFogColor); + int delta = (INT16)nthword(m_state.m_czattr, cztype); + rgb_comp_to_rgbint(&extra.fogcolor, m_state.m_fog_r, m_state.m_fog_g, m_state.m_fog_b); if (direct) { - int cz = ((flags&0x1fff00) + cz_adjust) >> 8; + int cz = ((flags & 0x1fff00) + cz_adjust) >> 8; if (cz < 0) cz = 0; else if (cz > 0x1fff) cz = 0x1fff; - int fogFactor = state->m_recalc_czram[cztype][cz] + delta; - if (fogFactor>0) + int fogfactor = m_state.m_recalc_czram[cztype][cz] + delta; + if (fogfactor > 0) { - if (fogFactor>0xff) fogFactor = 0xff; - extra->fogFactor = fogFactor; + if (fogfactor > 0xff) fogfactor = 0xff; + extra.fogfactor = fogfactor; } } else { - extra->zfog_enabled = 1; - extra->cz_sdelta = delta; - extra->czram = state->m_recalc_czram[cztype]; + extra.zfog_enabled = 1; + extra.cz_sdelta = delta; + extra.czram = m_state.m_recalc_czram[cztype]; } } } @@ -675,91 +459,55 @@ static void poly3d_DrawQuad(screen_device &screen, bitmap_rgb32 &bitmap, int tex else { // global fade - if (mixer.flags&1) + if (m_state.m_mixer_flags & 1) { - extra->pfade_enabled = mixer.PolyFade_enabled; - rgb_comp_to_rgbint(&extra->polyColor, mixer.rPolyFadeColor, mixer.gPolyFadeColor, mixer.bPolyFadeColor); + extra.pfade_enabled = m_state.m_poly_fade_enabled; + rgb_comp_to_rgbint(&extra.polycolor, m_state.m_poly_fade_r, m_state.m_poly_fade_g, m_state.m_poly_fade_b); } // poly fog if (~color & 0x80) { - int cztype = flags&3; - int czcolor = cztype & nthbyte(&mixer.fog_colormask, cztype); - rgb_comp_to_rgbint(&extra->fogColor, mixer.rFogColor_per_cztype[czcolor], mixer.gFogColor_per_cztype[czcolor], mixer.bFogColor_per_cztype[czcolor]); + int cztype = flags & 3; + int czcolor = cztype & nthbyte(&m_state.m_fog_colormask, cztype); + rgb_comp_to_rgbint(&extra.fogcolor, m_state.m_fog_r_per_cztype[czcolor], m_state.m_fog_g_per_cztype[czcolor], m_state.m_fog_b_per_cztype[czcolor]); if (direct) { // direct case, cz value is preset - int cz = ((flags&0x1fff00) + cz_adjust) >> 8; + int cz = ((flags & 0x1fff00) + cz_adjust) >> 8; if (cz < 0) cz = 0; else if (cz > 0x1fff) cz = 0x1fff; - extra->fogFactor = nthbyte(state->m_czram, cztype<<13|cz); + extra.fogfactor = nthbyte(m_state.m_czram, cztype << 13 | cz); } else { - extra->zfog_enabled = 1; - extra->czram = (UINT8*)&state->m_czram[cztype<<(13-2)]; + extra.zfog_enabled = 1; + extra.czram = (UINT8*)&m_state.m_czram[cztype << (13-2)]; } } } - poly_render_triangle_fan(state->m_poly, &bitmap, mClip.scissor, renderscanline_uvi_full, 4, clipverts, clipv); -} - -static void renderscanline_sprite(void *destbase, INT32 scanline, const poly_extent *extent, const void *extradata, int threadid) -{ - const poly_extra_data *extra = (const poly_extra_data *)extradata; - int y_index = extent->param[1].start - extra->flipy; - float x_index = extent->param[0].start - extra->flipx; - float dx = extent->param[0].dpdx; - bitmap_rgb32 *destmap = (bitmap_rgb32 *)destbase; - const pen_t *pal = extra->pens; - int prioverchar = extra->prioverchar; - int alphaFactor = extra->alpha; - int fogFactor = 0xff - extra->fogFactor; - int fadeFactor = 0xff - extra->fadeFactor; - rgbint fogColor = extra->fogColor; - rgbint fadeColor = extra->fadeColor; - UINT8 *source = (UINT8 *)extra->source + y_index * extra->line_modulo; - UINT32 *dest = &destmap->pix32(scanline); - UINT8 *primap = &extra->priority_bitmap->pix8(scanline); - int x; - - for( x=extent->startx; xstopx; x++ ) - { - int pen = source[(int)x_index]; - if( pen != 0xff ) - { - rgbint rgb; - rgb_to_rgbint(&rgb, pal[pen]); - - if( fogFactor != 0xff ) - rgbint_blend(&rgb, &fogColor, fogFactor); - - if( fadeFactor != 0xff ) - rgbint_blend(&rgb, &fadeColor, fadeFactor); - - if( alphaFactor != 0xff ) - { - rgbint mix; - rgb_to_rgbint(&mix, dest[x]); - rgbint_blend(&rgb, &mix, alphaFactor); - } - - dest[x] = rgbint_to_rgb(&rgb); - primap[x] |= prioverchar; - } - x_index += dx; - } + render_triangle_fan(m_cliprect, render_delegate(FUNC(namcos22_renderer::renderscanline_uvi_full), this), 4, clipverts, clipv); } -static void poly3d_DrawSprite(screen_device &screen, bitmap_rgb32 &dest_bmp, gfx_element *gfx, UINT32 code, UINT32 color, int flipx, int flipy, int sx, int sy, int scalex, int scaley, int cz_factor, int prioverchar, int alpha) +void namcos22_renderer::poly3d_drawsprite( + screen_device &screen, + bitmap_rgb32 &dest_bmp, + UINT32 code, + UINT32 color, + int flipx, int flipy, + int sx, int sy, + int scalex, int scaley, + int cz_factor, + int prioverchar, + int alpha +) { - namcos22_state *state = gfx->machine().driver_data(); - int sprite_screen_height = (scaley*gfx->height()+0x8000)>>16; - int sprite_screen_width = (scalex*gfx->width()+0x8000)>>16; + gfx_element *gfx = screen.machine().gfx[2]; + int sprite_screen_height = (scaley * gfx->height() + 0x8000) >> 16; + int sprite_screen_width = (scalex * gfx->width() + 0x8000) >> 16; if (sprite_screen_width && sprite_screen_height) { float fsx = sx; @@ -768,22 +516,23 @@ static void poly3d_DrawSprite(screen_device &screen, bitmap_rgb32 &dest_bmp, gfx float fheight = gfx->height(); float fsw = sprite_screen_width; float fsh = sprite_screen_height; - poly_extra_data *extra = (poly_extra_data *)poly_get_extra_data(state->m_poly); - poly_vertex vert[4]; - extra->fadeFactor = 0; - extra->fogFactor = 0; - extra->flags = 0; + namcos22_object_data &extra = object_data_alloc(); + vertex_t vert[4]; - extra->machine = &gfx->machine(); - extra->alpha = alpha; - extra->prioverchar = 2 | prioverchar; - extra->line_modulo = gfx->rowbytes(); - extra->flipx = flipx; - extra->flipy = flipy; - extra->pens = &gfx->machine().pens[gfx->colorbase() + gfx->granularity() * (color&0x7f)]; - extra->priority_bitmap = &screen.priority(); - extra->source = gfx->get_data(code % gfx->elements()); + extra.fadefactor = 0; + extra.fogfactor = 0; + extra.flags = 0; + + extra.destbase = &dest_bmp; + extra.alpha = alpha; + extra.prioverchar = 2 | prioverchar; + extra.line_modulo = gfx->rowbytes(); + extra.flipx = flipx; + extra.flipy = flipy; + extra.pens = &gfx->machine().pens[gfx->colorbase() + gfx->granularity() * (color & 0x7f)]; + extra.primap = &screen.priority(); + extra.source = gfx->get_data(code % gfx->elements()); vert[0].x = fsx; vert[0].y = fsy; @@ -803,235 +552,114 @@ static void poly3d_DrawSprite(screen_device &screen, bitmap_rgb32 &dest_bmp, gfx vert[3].p[1] = fheight; // global fade - if (mixer.flags&2) + if (m_state.m_mixer_flags & 2) { - extra->fadeFactor = mixer.fadeFactor; - rgb_comp_to_rgbint(&extra->fadeColor, mixer.rFadeColor, mixer.gFadeColor, mixer.bFadeColor); + extra.fadefactor = m_state.m_screen_fade_factor; + rgb_comp_to_rgbint(&extra.fadecolor, m_state.m_screen_fade_r, m_state.m_screen_fade_g, m_state.m_screen_fade_b); } // fog, 0xfe is a special case for sprite priority over textlayer if (~color & 0x80 && cz_factor > 0 && cz_factor != 0xfe) { // or does it fetch from poly-cz ram? that will break timecris though - extra->fogFactor = cz_factor; - rgb_comp_to_rgbint(&extra->fogColor, mixer.rFogColor, mixer.gFogColor, mixer.bFogColor); + extra.fogfactor = cz_factor; + rgb_comp_to_rgbint(&extra.fogcolor, m_state.m_fog_r, m_state.m_fog_g, m_state.m_fog_b); } - poly_render_triangle_fan(state->m_poly, &dest_bmp, mClip.scissor, renderscanline_sprite, 2, 4, vert); + render_triangle_fan(m_cliprect, render_delegate(FUNC(namcos22_renderer::renderscanline_sprite), this), 2, 4, vert); } } -static void ApplyGamma( running_machine &machine, bitmap_rgb32 &bitmap ) + +void namcos22_renderer::render_sprite(screen_device &screen, bitmap_rgb32 &bitmap, struct namcos22_scenenode *node) { - namcos22_state *state = machine.driver_data(); - int x,y; - if( state->m_bSuperSystem22 ) + // scene clip + m_cliprect.set(node->data.sprite.cx_min, node->data.sprite.cx_max, node->data.sprite.cy_min, node->data.sprite.cy_max); + if (m_cliprect.min_x < 0) m_cliprect.min_x = 0; + if (m_cliprect.max_x > 639) m_cliprect.max_x = 639; + if (m_cliprect.min_y < 0) m_cliprect.min_y = 0; + if (m_cliprect.max_y > 479) m_cliprect.max_y = 479; + + int offset = 0; + + for (int row = 0; row < node->data.sprite.rows; row++) { - /* super system 22 */ - const UINT8 *rlut = (const UINT8 *)&state->m_gamma[0x100/4]; - const UINT8 *glut = (const UINT8 *)&state->m_gamma[0x200/4]; - const UINT8 *blut = (const UINT8 *)&state->m_gamma[0x300/4]; - for( y=0; ydata.sprite.cols; col++) { - UINT32 *dest = &bitmap.pix32(y); - for( x=0; x>16)&0xff)]; - int g = glut[NATIVE_ENDIAN_VALUE_LE_BE(3,0)^((rgb>>8)&0xff)]; - int b = blut[NATIVE_ENDIAN_VALUE_LE_BE(3,0)^(rgb&0xff)]; - dest[x] = (r<<16)|(g<<8)|b; - } - } - } - else - { - /* system 22 */ - const UINT8 *rlut = 0x000+(const UINT8 *)machine.root_device().memregion("gamma_proms")->base(); - const UINT8 *glut = 0x100+rlut; - const UINT8 *blut = 0x200+rlut; - for( y=0; y>16)&0xff]; - int g = glut[(rgb>>8)&0xff]; - int b = blut[rgb&0xff]; - dest[x] = (r<<16)|(g<<8)|b; - } + int code = node->data.sprite.tile; + if (node->data.sprite.linktype == 0xff) + code += offset; + else + code += nthword(&m_state.m_spriteram[0x800/4], offset + node->data.sprite.linktype*4); + + poly3d_drawsprite( + screen, + bitmap, + code, + node->data.sprite.color, + node->data.sprite.flipx, + node->data.sprite.flipy, + node->data.sprite.xpos + col * node->data.sprite.sizex, + node->data.sprite.ypos + row * node->data.sprite.sizey, + (node->data.sprite.sizex << 16) / 32, + (node->data.sprite.sizey << 16) / 32, + node->data.sprite.cz, + node->data.sprite.pri, + 0xff - node->data.sprite.translucency + ); + offset++; } } } -#define DSP_FIXED_TO_FLOAT( X ) (((INT16)(X))/(float)0x7fff) -#define SPRITERAM_SIZE (0x9b0000-0x980000) -#define CGRAM_SIZE 0x1e000 -#define NUM_CG_CHARS ((CGRAM_SIZE*8)/(64*16)) /* 0x3c0 */ -/* modal rendering properties */ -static void matrix3d_Multiply( float A[4][4], float B[4][4] ) +/*********************************************************************************************/ + +void namcos22_renderer::free_scenenode(struct namcos22_scenenode *node) { - float temp[4][4]; - int row,col; - - for( row=0;row<4;row++ ) - { - for(col=0;col<4;col++) - { - float sum = 0.0f; - int i; - for( i=0; i<4; i++ ) - { - sum += A[row][i]*B[i][col]; - } - temp[row][col] = sum; - } - } - memcpy( A, temp, sizeof(temp) ); + node->next = m_scenenode_cur; + m_scenenode_cur = node; } -static void matrix3d_Identity( float M[4][4] ) +struct namcos22_scenenode *namcos22_renderer::alloc_scenenode(running_machine &machine, struct namcos22_scenenode *node) { - int r,c; - - for( r=0; r<4; r++ ) - { - for( c=0; c<4; c++ ) - { - M[r][c] = (r==c)?1.0:0.0; - } - } -} - -static void TransformPoint( float *vx, float *vy, float *vz, float m[4][4] ) -{ - float x = *vx; - float y = *vy; - float z = *vz; - *vx = m[0][0]*x + m[1][0]*y + m[2][0]*z + m[3][0]; - *vy = m[0][1]*x + m[1][1]*y + m[2][1]*z + m[3][1]; - *vz = m[0][2]*x + m[1][2]*y + m[2][2]*z + m[3][2]; -} - -static void TransformNormal( float *nx, float *ny, float *nz, float m[4][4] ) -{ - float x = *nx; - float y = *ny; - float z = *nz; - *nx = m[0][0]*x + m[1][0]*y + m[2][0]*z; - *ny = m[0][1]*x + m[1][1]*y + m[2][1]*z; - *nz = m[0][2]*x + m[1][2]*y + m[2][2]*z; -} - - - -static struct -{ - float zoom, vx, vy, vw, vh; - float lx,ly,lz; /* unit vector for light direction */ - int ambient; /* 0.0..1.0 */ - int power; /* 0.0..1.0 */ -} mCamera; - -enum SceneNodeType -{ - eSCENENODE_NONLEAF, - eSCENENODE_QUAD3D, - eSCENENODE_SPRITE -}; - -#define RADIX_BITS 4 -#define RADIX_BUCKETS (1<nextInBucket = mpFreeSceneNode; - mpFreeSceneNode = node; -} - -static struct SceneNode *MallocSceneNode( running_machine &machine ) -{ - struct SceneNode *node = mpFreeSceneNode; - if( node ) + if (node) { /* use free pool */ - mpFreeSceneNode = node->nextInBucket; + m_scenenode_cur = node->next; } else { - node = auto_alloc(machine, struct SceneNode); + node = auto_alloc(machine, struct namcos22_scenenode); } - memset( node, 0, sizeof(*node) ); + memset(node, 0, sizeof(*node)); return node; } -static struct SceneNode *NewSceneNode( running_machine &machine, UINT32 zsortvalue24, SceneNodeType type ) +struct namcos22_scenenode *namcos22_renderer::new_scenenode(running_machine &machine, UINT32 zsort, namcos22_scenenode_type type) { - struct SceneNode *node = &mSceneRoot; - struct SceneNode *prev = NULL; - int i, hash = 0; - for( i=0; i<24; i+=RADIX_BITS ) + struct namcos22_scenenode *node = &m_scenenode_root; + struct namcos22_scenenode *prev = NULL; + int hash; + + for (int i = 0; i < 24; i += NAMCOS22_RADIX_BITS) { - hash = (zsortvalue24>>20)&RADIX_MASK; - struct SceneNode *next = node->data.nonleaf.next[hash]; - if( !next ) + hash = (zsort >> 20) & NAMCOS22_RADIX_MASK; + struct namcos22_scenenode *next = node->data.nonleaf.next[hash]; + if (!next) { /* lazily allocate tree node for this radix */ - next = MallocSceneNode(machine); - next->type = eSCENENODE_NONLEAF; + next = alloc_scenenode(machine, m_scenenode_cur); + next->type = NAMCOS22_SCENENODE_NONLEAF; node->data.nonleaf.next[hash] = next; } prev = node; node = next; - zsortvalue24 <<= RADIX_BITS; + zsort <<= NAMCOS22_RADIX_BITS; } - if( node->type == eSCENENODE_NONLEAF ) + if (node->type == NAMCOS22_SCENENODE_NONLEAF) { /* first leaf allocation on this branch */ node->type = type; @@ -1039,133 +667,81 @@ static struct SceneNode *NewSceneNode( running_machine &machine, UINT32 zsortval } else { - struct SceneNode *leaf = MallocSceneNode(machine); + struct namcos22_scenenode *leaf = alloc_scenenode(machine, m_scenenode_cur); leaf->type = type; - leaf->nextInBucket = node; + leaf->next = node; prev->data.nonleaf.next[hash] = leaf; return leaf; } } - -static void RenderSprite(screen_device &screen, bitmap_rgb32 &bitmap, struct SceneNode *node ) +void namcos22_renderer::render_scene_nodes(screen_device &screen, bitmap_rgb32 &bitmap, struct namcos22_scenenode *node) { - namcos22_state *state = screen.machine().driver_data(); - int tile = node->data.sprite.tile; - int col,row; - int i = 0; - for( row=0; rowdata.sprite.numrows; row++ ) + if (node) { - for( col=0; coldata.sprite.numcols; col++ ) + if (node->type == NAMCOS22_SCENENODE_NONLEAF) { - int code = tile; - if( node->data.sprite.linkType == 0xff ) - code += i; - else - code += nthword( &state->m_spriteram[0x800/4], i+node->data.sprite.linkType*4 ); - - poly3d_DrawSprite( - screen, - bitmap, - screen.machine().gfx[GFX_SPRITE], - code, - node->data.sprite.color, - node->data.sprite.flipx, - node->data.sprite.flipy, - node->data.sprite.xpos+col*node->data.sprite.sizex, - node->data.sprite.ypos+row*node->data.sprite.sizey, - (node->data.sprite.sizex<<16)/32, - (node->data.sprite.sizey<<16)/32, - node->data.sprite.cz, - node->data.sprite.pri, - 0xff - node->data.sprite.translucency - ); - i++; - } - } -} - -static void RenderSceneHelper(screen_device &screen, bitmap_rgb32 &bitmap, struct SceneNode *node ) -{ - if( node ) - { - if( node->type == eSCENENODE_NONLEAF ) - { - int i; - for( i=RADIX_BUCKETS-1; i>=0; i-- ) + for (int i = NAMCOS22_RADIX_BUCKETS - 1; i >= 0; i--) { - RenderSceneHelper(screen, bitmap, node->data.nonleaf.next[i] ); + render_scene_nodes(screen, bitmap, node->data.nonleaf.next[i]); } - FreeSceneNode( node ); + free_scenenode(node); } else { - while( node ) + while (node) { - struct SceneNode *next = node->nextInBucket; + struct namcos22_scenenode *next = node->next; - switch( node->type ) + switch (node->type) { - case eSCENENODE_QUAD3D: - poly3d_Clip( - node->data.quad3d.vx, - node->data.quad3d.vy, - node->data.quad3d.vw, - node->data.quad3d.vh - ); - poly3d_DrawQuad(screen, - bitmap, - node->data.quad3d.textureBank, - node->data.quad3d.color, - node->data.quad3d.v, - node->data.quad3d.flags, - node->data.quad3d.cz_adjust, - node->data.quad3d.direct, - node->data.quad3d.cmode - ); - break; + case NAMCOS22_SCENENODE_QUAD: + poly3d_drawquad(screen, bitmap, node); + break; - case eSCENENODE_SPRITE: - sprite_Clip( - node->data.sprite.cx_min, - node->data.sprite.cx_max, - node->data.sprite.cy_min, - node->data.sprite.cy_max - ); - RenderSprite(screen, bitmap, node ); - break; + case NAMCOS22_SCENENODE_SPRITE: + render_sprite(screen, bitmap, node); + break; - default: - fatalerror("invalid node->type\n"); - break; + default: + fatalerror("invalid node->type\n"); + break; } - FreeSceneNode( node ); + free_scenenode(node); node = next; } } } } -static void RenderScene(screen_device &screen, bitmap_rgb32 &bitmap ) +void namcos22_renderer::render_scene(screen_device &screen, bitmap_rgb32 &bitmap) { - namcos22_state *state = screen.machine().driver_data(); - struct SceneNode *node = &mSceneRoot; - int i; - for( i=RADIX_BUCKETS-1; i>=0; i-- ) + struct namcos22_scenenode *node = &m_scenenode_root; + for (int i = NAMCOS22_RADIX_BUCKETS - 1; i >= 0; i--) { - RenderSceneHelper(screen, bitmap, node->data.nonleaf.next[i] ); + render_scene_nodes(screen, bitmap, node->data.nonleaf.next[i]); node->data.nonleaf.next[i] = NULL; } - poly3d_NoClip(); - poly_wait(state->m_poly, "DrawPolygons"); + + m_clipx = 320; + m_clipy = 240; + m_cliprect.set(0, 639, 0, 479); + + wait("render_scene"); } -static float DspFloatToNativeFloat( UINT32 iVal ) + + +/*********************************************************************************************/ + +// slave dsp render + +float namcos22_state::dspfloat_to_nativefloat(UINT32 val) { - INT16 mantissa = (INT16)iVal; + INT16 mantissa = (INT16)val; float result = mantissa;//?((float)mantissa):((float)0x10000); - int exponent = (iVal>>16)&0xff; - while( exponent<0x2e ) + int exponent = (val >> 16) & 0xff; + while (exponent < 0x2e) { result /= 2.0; exponent++; @@ -1173,178 +749,85 @@ static float DspFloatToNativeFloat( UINT32 iVal ) return result; } -static INT32 GetPolyData( namcos22_state *state, INT32 addr ) +/* modal rendering properties */ +void namcos22_state::matrix3d_multiply(float a[4][4], float b[4][4]) { - UINT32 result; - if( addr<0 || addr>=state->m_PtRomSize ) + float temp[4][4]; + + for (int row = 0; row < 4; row++) { - // point ram, only used in ram test? - if( state->m_bSuperSystem22 ) + for (int col = 0; col < 4; col++) { - if( addr>=0xf80000 && addr<=0xf9ffff ) - result = state->m_pPointRAM[addr-0xf80000]; - else return -1; - } - else - { - if( addr>=0xf00000 && addr<=0xf1ffff ) - result = state->m_pPointRAM[addr-0xf00000]; - else return -1; - } - } - else - { - result = (state->m_pPolyH[addr]<<16)|(state->m_pPolyM[addr]<<8)|state->m_pPolyL[addr]; - } - if( result&0x00800000 ) - result |= 0xff000000; /* sign extend */ - return result; -} - -UINT32 namcos22_point_rom_r( running_machine &machine, offs_t offs ) -{ - namcos22_state *state = machine.driver_data(); - return GetPolyData(state, offs & 0x00ffffff); -} - - -WRITE32_MEMBER(namcos22_state::namcos22s_czram_w) -{ - int bank = nthword(m_czattr,0xa/2)&3; - UINT16 *czram = m_banked_czram[bank]; - UINT32 dat = (czram[offset*2]<<16)|czram[offset*2+1]; - UINT32 prev = dat; - COMBINE_DATA( &dat ); - czram[offset*2] = dat>>16; - czram[offset*2+1] = dat&0xffff; - m_cz_was_written[bank] |= (prev^dat); -} - -READ32_MEMBER(namcos22_state::namcos22s_czram_r) -{ - int bank = nthword(m_czattr,0xa/2)&3; - const UINT16 *czram = m_banked_czram[bank]; - return (czram[offset*2]<<16)|czram[offset*2+1]; -} - -static void namcos22s_recalc_czram( running_machine &machine ) -{ - namcos22_state *state = machine.driver_data(); - int i, j, table; - for (table=0; table<4; table++) - { - // as documented above, ss22 czram is 'just' a big compare table - // this is very slow when emulating, so let's recalculate it to a simpler lookup table - if (state->m_cz_was_written[table]) - { - const UINT16 *src = state->m_banked_czram[table]; - UINT8 *dest = state->m_recalc_czram[table]; - int small_val = 0x2000; - int small_offset = 0; - int large_val = 0; - int large_offset = 0; - int prev = 0x2000; - - for (i=0; i<0x100; i++) + float sum = 0.0f; + for (int i = 0; i < 4; i++) { - int val = src[i]; - - // discard if larger than 1fff - if (val>0x1fff) val = prev; - if (prev>0x1fff) - { - prev = val; - continue; - } - - int start = prev; - int end = val; - if (start>end) - { - start = val; - end = prev; - } - prev = val; - - // fill range - for (j=start; jlarge_val) - { - large_val = val; - large_offset = i; - } + sum += a[row][i] * b[i][col]; } - - // fill possible leftover ranges - for (j=0; jm_cz_was_written[table] = 0; + temp[row][col] = sum; } } + + memcpy(a, temp, sizeof(temp)); } - -static void InitXYAttrToPixel( namcos22_state *state ) +void namcos22_state::matrix3d_identity(float m[4][4]) { - unsigned attr,x,y,ix,iy,temp; - for( attr=0; attr<16; attr++ ) + for (int r = 0; r < 4; r++) { - for( y=0; y<16; y++ ) + for (int c = 0; c < 4; c++) { - for( x=0; x<16; x++ ) - { - ix = x; iy = y; - if( attr&4 ) ix = 15-ix; - if( attr&2 ) iy = 15-iy; - if( attr&8 ){ temp = ix; ix = iy; iy = temp; } - state->m_XYAttrToPixel[attr][x][y] = (iy<<4)|ix; - } + m[r][c] = (r == c) ? 1.0 : 0.0; } } } -static void PatchTexture( namcos22_state *state ) +void namcos22_state::transform_point(float *vx, float *vy, float *vz, float m[4][4]) { - int i; - switch( state->m_gametype ) - { - case NAMCOS22_RIDGE_RACER: - case NAMCOS22_RIDGE_RACER2: - case NAMCOS22_ACE_DRIVER: - case NAMCOS22_CYBER_COMMANDO: - for( i=0; i<0x100000; i++ ) - { - int tile = state->m_pTextureTileMap16[i]; - int attr = state->m_pTextureTileMapAttr[i]; - if( (attr&0x1)==0 ) - { - tile = (tile&0x3fff)|0x8000; - state->m_pTextureTileMap16[i] = tile; - } - } - break; + float x = *vx; + float y = *vy; + float z = *vz; + + *vx = m[0][0]*x + m[1][0]*y + m[2][0]*z + m[3][0]; + *vy = m[0][1]*x + m[1][1]*y + m[2][1]*z + m[3][1]; + *vz = m[0][2]*x + m[1][2]*y + m[2][2]*z + m[3][2]; +} - default: - break; +void namcos22_state::transform_normal(float *nx, float *ny, float *nz, float m[4][4]) +{ + float x = *nx; + float y = *ny; + float z = *nz; + + *nx = m[0][0]*x + m[1][0]*y + m[2][0]*z; + *ny = m[0][1]*x + m[1][1]*y + m[2][1]*z; + *nz = m[0][2]*x + m[1][2]*y + m[2][2]*z; +} + +void namcos22_state::register_normals(INT32 addr, float m[4][4]) +{ + for (int i = 0; i < 4; i++) + { + float nx = dspfixed_to_nativefloat(point_read(addr + i * 3 + 0)); + float ny = dspfixed_to_nativefloat(point_read(addr + i * 3 + 1)); + float nz = dspfixed_to_nativefloat(point_read(addr + i * 3 + 2)); + + /* transform normal vector */ + transform_normal(&nx, &ny, &nz, m); + float dotproduct = nx*m_camera_lx + ny*m_camera_ly + nz*m_camera_lz; + if (dotproduct < 0.0f) + dotproduct = 0.0f; + + m_LitSurfaceInfo[m_LitSurfaceCount++] = m_camera_ambient + m_camera_power * dotproduct; } } -void namcos22_draw_direct_poly( running_machine &machine, const UINT16 *pSource ) + +void namcos22_state::draw_direct_poly(const UINT16 *src) { - if (machine.video().skip_this_frame()) return; - namcos22_state *state = machine.driver_data(); - int polys_enabled = state->m_bSuperSystem22 ? nthbyte(state->m_gamma,0x1f)&1 : 1; + if (machine().video().skip_this_frame()) + return; + + int polys_enabled = m_is_ss22 ? nthbyte(m_mixer, 0x1f) & 1 : 1; if (!polys_enabled) return; /** * word#0: @@ -1371,116 +854,689 @@ void namcos22_draw_direct_poly( running_machine &machine, const UINT16 *pSource * xx-- ---- // BRI * --xx xxxx // zpos */ - UINT32 zsortvalue24 = ((pSource[1]&0xfff)<<12)|(pSource[0]&0xfff); - struct SceneNode *node = NewSceneNode(machine, zsortvalue24, eSCENENODE_QUAD3D); - int i, cztype = pSource[3]&3; - if( state->m_bSuperSystem22 ) + UINT32 zsort = ((src[1] & 0xfff) << 12) | (src[0] & 0xfff); + struct namcos22_scenenode *node = m_poly->new_scenenode(machine(), zsort, NAMCOS22_SCENENODE_QUAD); + int cztype = src[3] & 3; + + if (m_is_ss22) { cztype ^= 3; // ? not sure, but this makes testmode look like on a pcb (only 1 pcb checked) - node->data.quad3d.cmode = (pSource[2]&0x00f0)>>4; - node->data.quad3d.textureBank = (pSource[2]&0x000f); + node->data.quad.cmode = (src[2] & 0x00f0) >> 4; + node->data.quad.texturebank = (src[2] & 0x000f); } else { - node->data.quad3d.cmode = (pSource[0+4]&0xf000)>>12; - node->data.quad3d.textureBank = (pSource[1+4]&0xf000)>>12; + node->data.quad.cmode = (src[0 + 4] & 0xf000) >> 12; + node->data.quad.texturebank = (src[1 + 4] & 0xf000) >> 12; } - node->data.quad3d.cz_adjust = state->m_cz_adjust; - node->data.quad3d.flags = (pSource[3]<<6&0x1fff00) | cztype; - node->data.quad3d.color = (pSource[2]&0xff00)>>8; - pSource += 4; - for( i=0; i<4; i++ ) + node->data.quad.cz_adjust = m_cz_adjust; + node->data.quad.flags = (src[3] << 6 & 0x1fff00) | cztype; + node->data.quad.color = (src[2] & 0xff00) >> 8; + src += 4; + + for (int i = 0; i < 4; i++) { - Poly3dVertex *p = &node->data.quad3d.v[i]; - if( state->m_bSuperSystem22 ) + namcos22_polyvertex *p = &node->data.quad.v[i]; + if (m_is_ss22) { - p->u = pSource[0] >> 4; - p->v = pSource[1] >> 4; + p->u = src[0] >> 4; + p->v = src[1] >> 4; } else { - p->u = pSource[0] & 0x0fff; - p->v = pSource[1] & 0x0fff; + p->u = src[0] & 0x0fff; + p->v = src[1] & 0x0fff; } - int mantissa = (INT16)pSource[5]; + int mantissa = (INT16)src[5]; float zf = (float)mantissa; - int exponent = (pSource[4])&0xff; - if( mantissa ) + int exponent = (src[4]) & 0xff; + if (mantissa) { - while( exponent<0x2e ) + while (exponent < 0x2e) { zf /= 2.0; exponent++; } - if( state->m_bSuperSystem22 ) + if (m_is_ss22) p->z = zf; else - p->z = 1.0f/zf; + p->z = 1.0f / zf; } else { zf = (float)0x10000; - exponent = 0x40-exponent; - while( exponent<0x2e ) + exponent = 0x40 - exponent; + while (exponent < 0x2e) { zf /= 2.0; exponent++; } - p->z = 1.0f/zf; + p->z = 1.0f / zf; } - p->x = ((INT16)pSource[2]); - p->y = (-(INT16)pSource[3]); - p->bri = pSource[4]>>8; - pSource += 6; + p->x = (INT16)src[2]; + p->y = -(INT16)src[3]; + p->bri = src[4] >> 8; + src += 6; } - node->data.quad3d.direct = 1; - node->data.quad3d.vx = 0; - node->data.quad3d.vy = 0; - node->data.quad3d.vw = -320; - node->data.quad3d.vh = -240; + + node->data.quad.direct = 1; + node->data.quad.vx = 0; + node->data.quad.vy = 0; + node->data.quad.vw = -320; + node->data.quad.vh = -240; } -static void Prepare3dTexture( running_machine &machine, void *pTilemapROM, const void *pTextureROM ) +/** + * @brief render a single quad + * + * @param flags + * 00-1.----.01-0.001- ? (always set/clear) + * --x-.----.----.---- ? + * ----.xx--.----.---- cz table + * ----.--xx.----.---- representative z algorithm? + * ----.----.--x-.---- backface cull enable + * ----.----.----.---x ? + * + * 1163 // sky + * 1262 // score (front) + * 1242 // score (hinge) + * 1243 // ? + * 1063 // n/a + * 1243 // various (2-sided?) + * 1263 // everything else (1-sided?) + * 1663 // ? + * + * @param color + * xxxxxxxx -------- -------- flat shading factor + * -------- x------- -------- fog enable + * -------- -xxxxxxx -------- palette select + * -------- -------- xxxxxxxx unused? + * + * @param polyshift + * 0x1fbd0 - sky+sea + * 0x0c350 - mountains + * 0x09c40 - boats, surf, road, buildings + * 0x07350 - guardrail + * 0x061a8 - red car + */ +void namcos22_state::blit_single_quad(bitmap_rgb32 &bitmap, UINT32 color, UINT32 addr, float m[4][4], INT32 polyshift, int flags, int packetformat) { - namcos22_state *state = machine.driver_data(); + int absolute_priority = m_absolute_priority; + INT32 zsort; + float zmin = 0.0f; + float zmax = 0.0f; + namcos22_polyvertex v[4]; int i; - assert( pTilemapROM && pTextureROM ); + + for (i = 0; i < 4; i++) { - /* following setup is Namco System 22 specific */ - const UINT8 *pPackedTileAttr = 0x200000 + (UINT8 *)pTilemapROM; - UINT8 *pUnpackedTileAttr = auto_alloc_array(machine, UINT8, 0x080000*2); + namcos22_polyvertex *pv = &v[i]; + pv->x = point_read(0x8 + i * 3 + addr); + pv->y = point_read(0x9 + i * 3 + addr); + pv->z = point_read(0xa + i * 3 + addr); + transform_point(&pv->x, &pv->y, &pv->z, m); + } + + /* backface cull one-sided polygons */ + if (flags & 0x0020 && + (v[2].x*((v[0].z*v[1].y)-(v[0].y*v[1].z)))+ + (v[2].y*((v[0].x*v[1].z)-(v[0].z*v[1].x)))+ + (v[2].z*((v[0].y*v[1].x)-(v[0].x*v[1].y))) >= 0 && + + (v[0].x*((v[2].z*v[3].y)-(v[2].y*v[3].z)))+ + (v[0].y*((v[2].x*v[3].z)-(v[2].z*v[3].x)))+ + (v[0].z*((v[2].y*v[3].x)-(v[2].x*v[3].y))) >= 0) + { + return; + } + + for (i = 0; i < 4; i++) + { + namcos22_polyvertex *pv = &v[i]; + int bri; + + pv->u = point_read(0 + i * 2 + addr); + pv->v = point_read(1 + i * 2 + addr); + + if (i == 0 || pv->z > zmax) zmax = pv->z; + if (i == 0 || pv->z < zmin) zmin = pv->z; + + if (m_LitSurfaceCount) { - InitXYAttrToPixel(state); - state->m_pTextureTileMapAttr = pUnpackedTileAttr; - for( i=0; i<0x80000; i++ ) + // lighting (prelim) + bri = m_LitSurfaceInfo[m_LitSurfaceIndex % m_LitSurfaceCount]; + if (m_SurfaceNormalFormat == 0x6666) { - *pUnpackedTileAttr++ = (*pPackedTileAttr)>>4; - *pUnpackedTileAttr++ = (*pPackedTileAttr)&0xf; - pPackedTileAttr++; + if (i == 3) + m_LitSurfaceIndex++; } - state->m_pTextureTileMap16 = (UINT16 *)pTilemapROM; - state->m_pTextureTileData = (UINT8 *)pTextureROM; - PatchTexture(state); + else if (m_SurfaceNormalFormat == 0x4000) + m_LitSurfaceIndex++; + else + logerror("unknown normal format: 0x%x\n", m_SurfaceNormalFormat); + } + else if (packetformat & 0x40) + { + // gourad shading + bri = (point_read(i + addr) >> 16) & 0xff; + } + else + { + // flat shading + bri = color >> 16 & 0xff; + } + + pv->bri = bri; + } + + if (zmin < 0.0f) zmin = 0.0f; + if (zmax < 0.0f) zmax = 0.0f; + + switch (flags & 0x300) + { + case 0x000: + zsort = (INT32)zmin; + break; + + case 0x100: + zsort = (INT32)zmax; + break; + + default: + zsort = (INT32)((zmin + zmax) / 2.0f); + break; + } + + /* relative: representative z + shift values + * 1x.xxxx.xxxxxxxx.xxxxxxxx fixed z value + * 0x.xx--.--------.-------- absolute priority shift + * 0-.--xx.xxxxxxxx.xxxxxxxx z-representative value shift + */ + if (polyshift & 0x200000) + zsort = polyshift & 0x1fffff; + else + { + zsort += signed18(polyshift); + absolute_priority += (polyshift & 0x1c0000) >> 18; + } + + if (m_objectshift & 0x200000) + zsort = m_objectshift & 0x1fffff; + else + { + zsort += signed18(m_objectshift); + absolute_priority += (m_objectshift & 0x1c0000) >> 18; + } + + if (zsort < 0) zsort = 0; + else if (zsort > 0x1fffff) zsort = 0x1fffff; + absolute_priority &= 7; + zsort |= (absolute_priority << 21); + + // allocate quad + struct namcos22_scenenode *node = m_poly->new_scenenode(machine(), zsort, NAMCOS22_SCENENODE_QUAD); + node->data.quad.cmode = (v[0].u >> 12) & 0xf; + node->data.quad.texturebank = (v[0].v >> 12) & 0xf; + node->data.quad.color = (color >> 8) & 0xff; + node->data.quad.flags = flags >> 10 & 3; + node->data.quad.cz_adjust = m_cz_adjust; + + for (i = 0; i < 4; i++) + { + namcos22_polyvertex *p = &node->data.quad.v[i]; + p->x = v[i].x * m_camera_zoom; + p->y = v[i].y * m_camera_zoom; + p->z = v[i].z; + p->u = v[i].u & 0xfff; + p->v = v[i].v & 0xfff; + p->bri = v[i].bri; + } + + node->data.quad.direct = 0; + node->data.quad.vx = m_camera_vx; + node->data.quad.vy = m_camera_vy; + node->data.quad.vw = m_camera_vw; + node->data.quad.vh = m_camera_vh; +} + + +void namcos22_state::blit_quads(bitmap_rgb32 &bitmap, INT32 addr, float m[4][4], INT32 base) +{ +// int additionalnormals = 0; + int chunklength = point_read(addr++); + int finish = addr + chunklength; + + if (chunklength > 0x100) + fatalerror("bad packet length\n"); + + while (addr < finish) + { + int packetlength = point_read(addr++); + int packetformat = point_read(addr + 0); + int flags, color, bias; + + /** + * packetformat: + * 800000 final packet in chunk + * 080000 ? + * 020000 color word exists? + * 010000 z-offset word exists? + * 002000 ? + * 001000 z-offset word exists? + * 000400 ? + * 000080 tex# or UV or CMODE? + * 000040 use I + * 000001 ? + */ + switch (packetlength) + { + case 0x17: + /** + * word 0: opcode (8a24c0) + * word 1: flags + * word 2: color + */ + flags = point_read(addr + 1); + color = point_read(addr + 2); + bias = 0; + blit_single_quad(bitmap, color, addr + 3, m, bias, flags, packetformat); + break; + + case 0x18: + /** + * word 0: opcode (0b3480 for first N-1 quads or 8b3480 for final quad in primitive) + * word 1: flags + * word 2: color + * word 3: depth bias + */ + flags = point_read(addr + 1); + color = point_read(addr + 2); + bias = point_read(addr + 3); + blit_single_quad(bitmap, color, addr + 4, m, bias, flags, packetformat); + break; + + case 0x10: /* vertex lighting */ + /* + 333401 (opcode) + 000000 [count] [type] + 000000 000000 007fff // normal vector + 000000 000000 007fff // normal vector + 000000 000000 007fff // normal vector + 000000 000000 007fff // normal vector + */ +// additionalnormals = point_read(addr+2); + m_SurfaceNormalFormat = point_read(addr + 3); + m_LitSurfaceCount = 0; + m_LitSurfaceIndex = 0; + register_normals(addr + 4, m); + break; + + case 0x0d: /* additional normals */ + /* + 300401 (opcode) + 007b09 ffdd04 0004c2 + 007a08 ffd968 0001c1 + ff8354 ffe401 000790 + ff84f7 ffdd04 0004c2 + */ + register_normals(addr + 1, m); + break; + + default: + break; + } + addr += packetlength; + } +} + +void namcos22_state::blit_polyobject(bitmap_rgb32 &bitmap, int code, float m[4][4]) +{ + UINT32 addr1 = point_read(code); + m_LitSurfaceCount = 0; + m_LitSurfaceIndex = 0; + + for (;;) + { + INT32 addr2 = point_read(addr1++); + if (addr2 < 0) + break; + blit_quads(bitmap, addr2, m, code); + } +} + + +/** + * master DSP can write directly to render device via port 0xc. + * This is used for "direct drawn" polygons, and "direct draw from point rom" + * feature - both opcodes exist in Ridge Racer's display-list processing + * + * record format: + * header (3 words) + * polyshift + * color + * flags + * + * per-vertex data (4*6 words) + * u,v + * sx,sy + * intensity;z.exponent + * z.mantissa + * + * master DSP can specify 3d objects indirectly (along with view transforms), + * via the "transmit" PDP opcode. the "render device" sends quad data to the slave DSP + * viewspace clipping and projection + * + * most "3d object" references are 0x45 and greater. references less than 0x45 are "special" + * commands, using a similar point rom format. the point rom header may point to point ram. + * + * slave DSP reads records via port 4 + * its primary purpose is applying lighting calculations + * the slave DSP forwards draw commands to a "draw device" + */ + +/*******************************************************************************/ + +/** + * 0xfffd + * 0x0: transform + * 0x1 + * 0x2 + * 0x5: transform + * >=0x45: draw primitive + */ +void namcos22_state::slavesim_handle_bb0003(const INT32 *src) +{ + /* + bb0003 or 3b0003 + + 14.00c8 light.ambient light.power + 01.0000 ? light.dx + 06.5a82 window priority light.dy + 00.a57e ? light.dz + + c8.0081 vx=200,vy=129 + 29.6092 zoom = 772.5625 + 1e.95f8 1e.95f8 0.5858154296875 0.5858154296875 // 452 + 1e.b079 1e.b079 0.6893463134765 0.6893463134765 // 532 + 29.58e8 711.25 (border? see time crisis) + + 7ffe 0000 0000 + 0000 7ffe 0000 + 0000 0000 7ffe + */ + m_camera_ambient = src[0x1] >> 16; + m_camera_power = src[0x1] & 0xffff; + + m_camera_lx = dspfixed_to_nativefloat(src[0x2]); + m_camera_ly = dspfixed_to_nativefloat(src[0x3]); + m_camera_lz = dspfixed_to_nativefloat(src[0x4]); + + m_absolute_priority = src[0x3] >> 16; + m_camera_vx = (INT16)(src[5] >> 16); + m_camera_vy = (INT16)(src[5] & 0xffff); + m_camera_zoom = dspfloat_to_nativefloat(src[6]); + m_camera_vw = dspfloat_to_nativefloat(src[7]) * m_camera_zoom; + m_camera_vh = dspfloat_to_nativefloat(src[9]) * m_camera_zoom; + + m_viewmatrix[0][0] = dspfixed_to_nativefloat(src[0x0c]); + m_viewmatrix[1][0] = dspfixed_to_nativefloat(src[0x0d]); + m_viewmatrix[2][0] = dspfixed_to_nativefloat(src[0x0e]); + + m_viewmatrix[0][1] = dspfixed_to_nativefloat(src[0x0f]); + m_viewmatrix[1][1] = dspfixed_to_nativefloat(src[0x10]); + m_viewmatrix[2][1] = dspfixed_to_nativefloat(src[0x11]); + + m_viewmatrix[0][2] = dspfixed_to_nativefloat(src[0x12]); + m_viewmatrix[1][2] = dspfixed_to_nativefloat(src[0x13]); + m_viewmatrix[2][2] = dspfixed_to_nativefloat(src[0x14]); + + transform_normal(&m_camera_lx, &m_camera_ly, &m_camera_lz, m_viewmatrix); +} + +void namcos22_state::slavesim_handle_200002(bitmap_rgb32 &bitmap, const INT32 *src) +{ + if (m_PrimitiveID >= 0x45) + { + float m[4][4]; /* row major */ + + matrix3d_identity(m); + + m[0][0] = dspfixed_to_nativefloat(src[0x1]); + m[1][0] = dspfixed_to_nativefloat(src[0x2]); + m[2][0] = dspfixed_to_nativefloat(src[0x3]); + + m[0][1] = dspfixed_to_nativefloat(src[0x4]); + m[1][1] = dspfixed_to_nativefloat(src[0x5]); + m[2][1] = dspfixed_to_nativefloat(src[0x6]); + + m[0][2] = dspfixed_to_nativefloat(src[0x7]); + m[1][2] = dspfixed_to_nativefloat(src[0x8]); + m[2][2] = dspfixed_to_nativefloat(src[0x9]); + + m[3][0] = src[0xa]; /* xpos */ + m[3][1] = src[0xb]; /* ypos */ + m[3][2] = src[0xc]; /* zpos */ + + matrix3d_multiply(m, m_viewmatrix); + blit_polyobject(bitmap, m_PrimitiveID, m); + } + else if (m_PrimitiveID != 0 && m_PrimitiveID != 2) + { + logerror("slavesim_handle_200002:unk code=0x%x\n", m_PrimitiveID); + // ridgerac title screen waving flag: 0x5 + } +} + +void namcos22_state::slavesim_handle_300000(const INT32 *src) +{ + m_viewmatrix[0][0] = dspfixed_to_nativefloat(src[1]); + m_viewmatrix[1][0] = dspfixed_to_nativefloat(src[2]); + m_viewmatrix[2][0] = dspfixed_to_nativefloat(src[3]); + + m_viewmatrix[0][1] = dspfixed_to_nativefloat(src[4]); + m_viewmatrix[1][1] = dspfixed_to_nativefloat(src[5]); + m_viewmatrix[2][1] = dspfixed_to_nativefloat(src[6]); + + m_viewmatrix[0][2] = dspfixed_to_nativefloat(src[7]); + m_viewmatrix[1][2] = dspfixed_to_nativefloat(src[8]); + m_viewmatrix[2][2] = dspfixed_to_nativefloat(src[9]); +} + +void namcos22_state::slavesim_handle_233002(const INT32 *src) +{ + /* + 00233002 + 00000000 // cz adjust (signed24) + 0003dd00 // z bias adjust + 001fffff // far plane? + 00007fff 00000000 00000000 + 00000000 00007fff 00000000 + 00000000 00000000 00007fff + 00000000 00000000 00000000 + */ + m_cz_adjust = signed24(src[1]); + m_objectshift = src[2]; +} + +void namcos22_state::simulate_slavedsp(bitmap_rgb32 &bitmap) +{ + const INT32 *src = 0x300 + (INT32 *)m_polygonram.target(); + INT16 len; + + matrix3d_identity(m_viewmatrix); + + if (m_is_ss22) + { + src += 4; /* FFFE 0400 */ + } + else + { + src--; + } + + for (;;) + { + INT16 next; + m_PrimitiveID = *src++; + len = (INT16)*src++; + + switch (len) + { + case 0x15: + slavesim_handle_bb0003(src); /* define viewport */ + break; + + case 0x10: + slavesim_handle_233002(src); /* set modal rendering options */ + break; + + case 0x0a: + slavesim_handle_300000(src); /* modify view transform */ + break; + + case 0x0d: + slavesim_handle_200002(bitmap, src); /* render primitive */ + break; + + default: + logerror("unk 3d data(%d) addr=0x%x!", len, (int)(src-(INT32*)m_polygonram.target())); + { + int i; + for (i = 0; i < len; i++) + { + logerror(" %06x", src[i] & 0xffffff); + } + logerror("\n"); + } + return; + } + + /* hackery! commands should be streamed, not parsed here */ + src += len; + src++; /* always 0xffff */ + next = (INT16)*src++; /* link to next command */ + if ((next & 0x7fff) != (src - (INT32 *)m_polygonram.target())) + { + /* end of list */ + break; } } } -static void DrawSpritesHelper(running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect, UINT32 *pBase, const UINT32 *pSource, const UINT32 *pPal, int num_sprites, int deltax, int deltay, int y_lowres) +void namcos22_state::draw_polygons(bitmap_rgb32 &bitmap) { - for( int i=0; iwait("draw_polygons"); + } +} + + + +/*********************************************************************************************/ + +WRITE32_MEMBER(namcos22_state::namcos22s_czram_w) +{ + int bank = nthword(m_czattr, 0xa/2) & 3; + UINT32 prev = (m_banked_czram[bank][offset * 2] << 16) | m_banked_czram[bank][offset * 2 + 1]; + UINT32 temp = prev; + COMBINE_DATA(&temp); + data = temp; + m_banked_czram[bank][offset * 2] = data >> 16; + m_banked_czram[bank][offset * 2 + 1] = data & 0xffff; + m_cz_was_written[bank] |= (prev ^ data); +} + +READ32_MEMBER(namcos22_state::namcos22s_czram_r) +{ + int bank = nthword(m_czattr, 0xa/2) & 3; + return (m_banked_czram[bank][offset * 2] << 16) | m_banked_czram[bank][offset * 2 + 1]; +} + +void namcos22_state::recalc_czram() +{ + for (int table = 0; table < 4; table++) + { + // as documented above, ss22 czram is 'just' a big compare table + // this is very slow when emulating, so let's recalculate it to a simpler lookup table + if (m_cz_was_written[table]) + { + int small_val = 0x2000; + int small_offset = 0; + int large_val = 0; + int large_offset = 0; + int prev = 0x2000; + + for (int i = 0; i < 0x100; i++) + { + int val = m_banked_czram[table][i]; + + // discard if larger than 1fff + if (val > 0x1fff) val = prev; + if (prev > 0x1fff) + { + prev = val; + continue; + } + + int start = prev; + int end = val; + if (start > end) + { + start = val; + end = prev; + } + prev = val; + + // fill range + for (int j = start; j < end; j++) + m_recalc_czram[table][j] = i; + + // remember largest/smallest for later + if (val < small_val) + { + small_val = val; + small_offset = i; + } + if (val > large_val) + { + large_val = val; + large_offset = i; + } + } + + // fill possible leftover ranges + for (int j = 0; j < small_val; j++) + m_recalc_czram[table][j] = small_offset; + for (int j = large_val; j < 0x2000; j++) + m_recalc_czram[table][j] = large_offset; + + m_cz_was_written[table] = 0; + } + } +} + + + +/*********************************************************************************************/ + +void namcos22_state::draw_sprite_group(bitmap_rgb32 &bitmap, const rectangle &cliprect, const UINT32 *src, const UINT32 *attr, int num_sprites, int deltax, int deltay, int y_lowres) +{ + for (int i = 0; i < num_sprites; i++) { /* - pSource[0] + src[0] xxxx.xxxx.xxxx.xxxx | ----.----.----.---- x pos ----.----.----.---- | xxxx.xxxx.xxxx.xxxx y pos - pSource[1] + src[1] xxxx.xxxx.xxxx.xxxx | ----.----.----.---- x size ----.----.----.---- | xxxx.xxxx.xxxx.xxxx y size - pSource[2] + src[2] xxxx.x---.----.---- | ----.----.----.---- no function ----.-xxx.----.---- | ----.----.----.---- clip target ----.----.xxxx.xxxx | ----.----.----.---- linktype @@ -1488,74 +1544,73 @@ static void DrawSpritesHelper(running_machine &machine, bitmap_rgb32 &bitmap, co ----.----.----.---- | ----.--x-.----.---- right justify ----.----.----.---- | ----.---x.----.---- bottom justify ----.----.----.---- | ----.----.x---.---- flipx - ----.----.----.---- | ----.----.-xxx.---- numcols + ----.----.----.---- | ----.----.-xxx.---- cols ----.----.----.---- | ----.----.----.x--- flipy - ----.----.----.---- | ----.----.----.-xxx numrows + ----.----.----.---- | ----.----.----.-xxx rows - pSource[3] + src[3] xxxx.xxxx.xxxx.xxxx | ----.----.----.---- tile number ----.----.----.---- | xxxx.xxxx.----.---- translucency ----.----.----.---- | ----.----.xxxx.xxxx no function(?) - set in timecris - pPal[0] + attr[0] xxxx.xxxx.----.---- | ----.----.----.---- no function ----.----.xxxx.xxxx | xxxx.xxxx.xxxx.xxxx z pos - pPal[1] + attr[1] xxxx.xxxx.----.---- | ----.----.----.---- no function ----.----.x---.---- | ----.----.----.---- cz enable ----.----.-xxx.xxxx | ----.----.----.---- color ----.----.----.---- | xxxx.xxxx.----.---- no function(?) - set in airco22b, propcycl ----.----.----.---- | ----.----.xxxx.xxxx cz factor (fog aka depth cueing) */ - int xpos = (pSource[0]>>16) - deltax; - int ypos = (pSource[0]&0xffff) - deltay; - int sizex = pSource[1]>>16; - int sizey = pSource[1]&0xffff; - UINT32 attrs = pSource[2]; - int flipy = attrs>>3&0x1; - int numrows = attrs&0x7; - int linkType = (attrs&0x00ff0000)>>16; - int flipx = (attrs>>7)&0x1; - int numcols = (attrs>>4)&0x7; - UINT32 code = pSource[3]; - int tile = code>>16; - int translucency = (code&0xff00)>>8; + int xpos = (src[0] >> 16) - deltax; + int ypos = (src[0] & 0xffff) - deltay; + int sizex = src[1] >> 16; + int sizey = src[1] & 0xffff; + int flipy = src[2] >> 3 & 0x1; + int rows = src[2] & 0x7; + int linktype = (src[2] & 0x00ff0000) >> 16; + int flipx = (src[2] >> 7) & 0x1; + int cols = (src[2] >> 4) & 0x7; + UINT32 code = src[3]; + int tile = code >> 16; + int translucency = (code & 0xff00) >> 8; - UINT32 zcoord = pPal[0]&0x00ffffff; - int color = pPal[1]>>16; - int cz = pPal[1]&0xff; + UINT32 zcoord = attr[0] & 0x00ffffff; + int color = attr[1] >> 16; + int cz = attr[1] & 0xff; // priority over textlayer, trusted by testmode and timecris - int pri = ((pPal[1] & 0xffff) == 0x00fe); + int pri = ((attr[1] & 0xffff) == 0x00fe); // set window clipping - int clip = attrs>>23&0xe; - int cx_min = -deltax + (INT16)(pBase[0x80|clip]>>16); - int cx_max = -deltax + (INT16)(pBase[0x80|clip]&0xffff); - int cy_min = -deltay + (INT16)(pBase[0x81|clip]>>16); - int cy_max = -deltay + (INT16)(pBase[0x81|clip]&0xffff); + int clip = src[2] >> 23 & 0xe; + int cx_min = -deltax + (INT16)(m_spriteram[0x80|clip] >> 16); + int cx_max = -deltax + (INT16)(m_spriteram[0x80|clip] & 0xffff); + int cy_min = -deltay + (INT16)(m_spriteram[0x81|clip] >> 16); + int cy_max = -deltay + (INT16)(m_spriteram[0x81|clip] & 0xffff); - if (numrows == 0) numrows = 8; - if (numcols == 0) numcols = 8; + if (rows == 0) rows = 8; + if (cols == 0) cols = 8; /* right justify */ - if (attrs & 0x0200) - xpos -= sizex*numcols-1; + if (src[2] & 0x0200) + xpos -= sizex * cols - 1; /* bottom justify */ - if (attrs & 0x0100) - ypos -= sizey*numrows-1; + if (src[2] & 0x0100) + ypos -= sizey * rows - 1; if (flipy) { - ypos += sizey*numrows-1; + ypos += sizey * rows - 1; sizey = -sizey; } if (flipx) { - xpos += sizex*numcols-1; + xpos += sizex * cols - 1; sizex = -sizex; } @@ -1567,14 +1622,14 @@ static void DrawSpritesHelper(running_machine &machine, bitmap_rgb32 &bitmap, co if (sizex && sizey) { - struct SceneNode *node = NewSceneNode(machine, zcoord, eSCENENODE_SPRITE); + struct namcos22_scenenode *node = m_poly->new_scenenode(machine(), zcoord, NAMCOS22_SCENENODE_SPRITE); node->data.sprite.tile = tile; node->data.sprite.flipx = flipx; node->data.sprite.flipy = flipy; - node->data.sprite.numcols = numcols; - node->data.sprite.numrows = numrows; - node->data.sprite.linkType = linkType; + node->data.sprite.cols = cols; + node->data.sprite.rows = rows; + node->data.sprite.linktype = linktype; node->data.sprite.xpos = xpos; node->data.sprite.ypos = ypos; node->data.sprite.cx_min = cx_min; @@ -1588,37 +1643,35 @@ static void DrawSpritesHelper(running_machine &machine, bitmap_rgb32 &bitmap, co node->data.sprite.cz = cz; node->data.sprite.pri = pri; } - pSource += 4; - pPal += 2; + src += 4; + attr += 2; } } -static void DrawSprites( running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect ) +void namcos22_state::draw_sprites(bitmap_rgb32 &bitmap, const rectangle &cliprect) { - namcos22_state *state = machine.driver_data(); - UINT32 *spriteram32 = state->m_spriteram; - const UINT32 *pSource; - const UINT32 *pPal; + const UINT32 *src; + const UINT32 *attr; #if 0 // show reg contents int i; char msg1[0x1000]={0}, msg2[0x1000]={0}; // 980000-98023f (spriteram header) for (i=0x00;i<0x02;i++) { - sprintf(msg2,"98%04X %08X %08X %08X %08X\n",i*16,spriteram32[i*4+0],spriteram32[i*4+1],spriteram32[i*4+2],spriteram32[i*4+3]); + sprintf(msg2,"98%04X %08X %08X %08X %08X\n",i*16,m_spriteram[i*4+0],m_spriteram[i*4+1],m_spriteram[i*4+2],m_spriteram[i*4+3]); strcat(msg1,msg2); } for (i=0x20;i<0x24;i++) { - sprintf(msg2,"98%04X %08X %08X %08X %08X\n",i*16,spriteram32[i*4+0],spriteram32[i*4+1],spriteram32[i*4+2],spriteram32[i*4+3]); + sprintf(msg2,"98%04X %08X %08X %08X %08X\n",i*16,m_spriteram[i*4+0],m_spriteram[i*4+1],m_spriteram[i*4+2],m_spriteram[i*4+3]); strcat(msg1,msg2); } strcat(msg1,"\n"); // 940000-94007c (vics control) for (i=0x00;i<0x08;i++) { - sprintf(msg2,"94%04X %08X %08X %08X %08X\n",i*16,state->m_vics_control[i*4+0],state->m_vics_control[i*4+1],state->m_vics_control[i*4+2],state->m_vics_control[i*4+3]); + sprintf(msg2,"94%04X %08X %08X %08X %08X\n",i*16,m_vics_control[i*4+0],m_vics_control[i*4+1],m_vics_control[i*4+2],m_vics_control[i*4+3]); strcat(msg1,msg2); } - if (machine.input().code_pressed(KEYCODE_S)) + if (machine().input().code_pressed(KEYCODE_S)) popmessage("%s",msg1); else popmessage("[S] shows sprite/vics regs"); #endif @@ -1649,20 +1702,20 @@ static void DrawSprites( running_machine &machine, bitmap_rgb32 &bitmap, const r bit 1: ??? (always set, except in alpinr2b. it's not x-resolution) bit 2: y-resolution? (always set, except in cybrcycc) */ - int sprites_on = (spriteram32[0]>>16 & 1) ? 0 : 1; - int y_lowres = (spriteram32[0]>>16 & 4) ? 0 : 1; + int sprites_on = (m_spriteram[0] >> 16 & 1) ? 0 : 1; + int y_lowres = (m_spriteram[0] >> 16 & 4) ? 0 : 1; - int deltax = (spriteram32[1]&0xffff) + (spriteram32[2]&0xffff) + 0x2d; - int deltay = (spriteram32[3]>>16) + (0x2a >> y_lowres); + int deltax = (m_spriteram[1] & 0xffff) + (m_spriteram[2] & 0xffff) + 0x2d; + int deltay = (m_spriteram[3] >> 16) + (0x2a >> y_lowres); - int base = spriteram32[0] & 0xffff; // alpinesa/alpinr2b - int num_sprites = ((spriteram32[1]>>16) - base) + 1; + int base = m_spriteram[0] & 0xffff; // alpinesa/alpinr2b + int num_sprites = ((m_spriteram[1] >> 16) - base) + 1; - if( sprites_on && num_sprites > 0 && num_sprites < 0x400 ) + if (sprites_on && num_sprites > 0 && num_sprites < 0x400) { - pSource = &spriteram32[0x04000/4 + base*4]; - pPal = &spriteram32[0x20000/4 + base*2]; - DrawSpritesHelper( machine, bitmap, cliprect, spriteram32, pSource, pPal, num_sprites, deltax, deltay, y_lowres ); + src = &m_spriteram[0x04000/4 + base*4]; + attr = &m_spriteram[0x20000/4 + base*2]; + draw_sprite_group(bitmap, cliprect, src, attr, num_sprites, deltax, deltay, y_lowres); } /* VICS RAM provides two additional banks (also many unknown regs here) */ @@ -1681,38 +1734,38 @@ static void DrawSprites( running_machine &machine, bitmap_rgb32 &bitmap, const r 0x940060..0x94007c set#2 */ - sprites_on = (state->m_vics_control[0x30/4]>>24 & 1) ? 0 : 1; - y_lowres = (state->m_vics_control[0x30/4]>>24 & 4) ? 0 : 1; + sprites_on = (m_vics_control[0x30/4] >> 24 & 1) ? 0 : 1; + y_lowres = (m_vics_control[0x30/4] >> 24 & 4) ? 0 : 1; // where do the games store the number of sprites to be processed by vics??? // the current default implementation (using spritelist size) is clearly wrong and causes problems in dirtdash and airco22b - num_sprites = state->m_vics_control[0x40/4] >> 4 & 0x1ff; // no +1 + num_sprites = m_vics_control[0x40/4] >> 4 & 0x1ff; // no +1 // dirtdash sprite list starts at xxx4, number of sprites is stored in xxx0, it doesn't use set#2 - if (state->m_gametype == NAMCOS22_DIRT_DASH) - num_sprites = (state->m_vics_data[(state->m_vics_control[0x48/4]&0x4000)/4] & 0xff) + 1; + if (m_gametype == NAMCOS22_DIRT_DASH) + num_sprites = (m_vics_data[(m_vics_control[0x48/4] & 0x4000)/4] & 0xff) + 1; - if( sprites_on && num_sprites > 0 ) + if (sprites_on && num_sprites > 0) { - pSource = &state->m_vics_data[(state->m_vics_control[0x48/4]&0xffff)/4]; - pPal = &state->m_vics_data[(state->m_vics_control[0x58/4]&0xffff)/4]; - DrawSpritesHelper( machine, bitmap, cliprect, spriteram32, pSource, pPal, num_sprites, deltax, deltay, y_lowres ); + src = &m_vics_data[(m_vics_control[0x48/4] & 0xffff)/4]; + attr = &m_vics_data[(m_vics_control[0x58/4] & 0xffff)/4]; + draw_sprite_group(bitmap, cliprect, src, attr, num_sprites, deltax, deltay, y_lowres); } - num_sprites = state->m_vics_control[0x60/4] >> 4 & 0x1ff; // no +1 + num_sprites = m_vics_control[0x60/4] >> 4 & 0x1ff; // no +1 // airco22b number of sprites for set#2 is stored in set#1 - it does not use set 1, or main set for sprites - if (state->m_gametype == NAMCOS22_AIR_COMBAT22) + if (m_gametype == NAMCOS22_AIR_COMBAT22) { - sprites_on = (state->m_vics_data[(state->m_vics_control[0x48/4]&0xffff)/4]>>16&1) ? 0 : 1; - num_sprites = (state->m_vics_data[(state->m_vics_control[0x48/4]&0xffff)/4+1]>>16)+1; + sprites_on = (m_vics_data[(m_vics_control[0x48/4] & 0xffff)/4] >> 16 & 1) ? 0 : 1; + num_sprites = (m_vics_data[(m_vics_control[0x48/4] & 0xffff)/4+1] >> 16) + 1; } - if( sprites_on && num_sprites > 0 ) + if (sprites_on && num_sprites > 0) { - pSource = &state->m_vics_data[(state->m_vics_control[0x68/4]&0xffff)/4]; - pPal = &state->m_vics_data[(state->m_vics_control[0x78/4]&0xffff)/4]; - DrawSpritesHelper( machine, bitmap, cliprect, spriteram32, pSource, pPal, num_sprites, deltax, deltay, y_lowres ); + src = &m_vics_data[(m_vics_control[0x68/4] & 0xffff)/4]; + attr = &m_vics_data[(m_vics_control[0x78/4] & 0xffff)/4]; + draw_sprite_group(bitmap, cliprect, src, attr, num_sprites, deltax, deltay, y_lowres); } } @@ -1746,49 +1799,31 @@ WRITE32_MEMBER(namcos22_state::namcos22s_vics_control_w) } -static void UpdatePalette(running_machine &machine) -{ - namcos22_state *state = machine.driver_data(); - int i,j; - for( i=0; im_dirtypal[i] ) - { - for( j=0; j<4; j++ ) - { - int which = i*4+j; - int r = nthbyte(state->m_generic_paletteram_32,which+0x00000); - int g = nthbyte(state->m_generic_paletteram_32,which+0x08000); - int b = nthbyte(state->m_generic_paletteram_32,which+0x10000); - palette_set_color( machine,which,MAKE_RGB(r,g,b) ); - } - state->m_dirtypal[i] = 0; - } - } -} +/*********************************************************************************************/ -TILE_GET_INFO_MEMBER(namcos22_state::TextTilemapGetInfo) +TILE_GET_INFO_MEMBER(namcos22_state::get_text_tile_info) { - UINT16 data = nthword( m_textram,tile_index ); + UINT16 data = nthword(m_textram, tile_index); /** * xxxx.----.----.---- palette select * ----.xx--.----.---- flip * ----.--xx.xxxx.xxxx code */ - SET_TILE_INFO_MEMBER( GFX_CHAR,data&0x03ff,data>>12,TILE_FLIPYX((data&0x0c00)>>10) ); -} - -READ32_MEMBER(namcos22_state::namcos22_textram_r) -{ - return m_textram[offset]; + SET_TILE_INFO_MEMBER(0, data & 0x03ff, data >> 12, TILE_FLIPYX((data & 0x0c00) >> 10)); } WRITE32_MEMBER(namcos22_state::namcos22_textram_w) { - COMBINE_DATA( &m_textram[offset] ); - m_bgtilemap->mark_tile_dirty(offset*2 ); - m_bgtilemap->mark_tile_dirty(offset*2+1 ); + COMBINE_DATA(&m_textram[offset]); + m_bgtilemap->mark_tile_dirty(offset * 2); + m_bgtilemap->mark_tile_dirty(offset * 2 + 1); +} + +WRITE32_MEMBER(namcos22_state::namcos22_cgram_w) +{ + COMBINE_DATA(&m_cgram[offset]); + machine().gfx[0]->mark_dirty(offset/32); } READ32_MEMBER(namcos22_state::namcos22_tilemapattr_r) @@ -1797,13 +1832,13 @@ READ32_MEMBER(namcos22_state::namcos22_tilemapattr_r) { case 2: { - UINT16 lo,hi = (m_tilemapattr[offset] & 0xffff0000) >> 16; + UINT16 lo, hi = (m_tilemapattr[offset] & 0xffff0000) >> 16; // assume current scanline, 0x1ff if in vblank (used in alpinesa) // or maybe relative to posirq? if (m_screen->vblank()) lo = 0x1ff; else lo = m_screen->vpos() >> 1; // dirtdash has slowdowns if high bit is clear, why?? - return hi<<16 | lo | 0x8000; + return hi << 16 | lo | 0x8000; } case 3: @@ -1830,7 +1865,7 @@ WRITE32_MEMBER(namcos22_state::namcos22_tilemapattr_w) 3.hiword ? unused? 3.loword R ??? */ - COMBINE_DATA( &m_tilemapattr[offset] ); + COMBINE_DATA(&m_tilemapattr[offset]); // popmessage("%08x\n%08x\n%08x\n%08x\n",m_tilemapattr[0],m_tilemapattr[1],m_tilemapattr[2],m_tilemapattr[3]); } @@ -1886,8 +1921,8 @@ WRITE32_MEMBER(namcos22_state::namcos22s_spotram_w) if (ACCESSING_BITS_16_31) { // set address - m_spot_read_address = data>>(16+1); - m_spot_write_address = data>>(16+1); + m_spot_read_address = data >> (16 + 1); + m_spot_write_address = data >> (16 + 1); } else { @@ -1909,39 +1944,37 @@ WRITE32_MEMBER(namcos22_state::namcos22s_spotram_w) } } -static void namcos22s_mix_textlayer( screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int prival ) +void namcos22_state::namcos22s_mix_text_layer(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int prival) { - namcos22_state *state = screen.machine().driver_data(); - const pen_t *pens = screen.machine().pens; + const pen_t *pens = machine().pens; UINT16 *src; UINT32 *dest; UINT8 *pri; - int x,y; // prepare alpha - UINT8 alpha_check12 = nthbyte(state->m_gamma, 0x12); - UINT8 alpha_check13 = nthbyte(state->m_gamma, 0x13); - UINT8 alpha_mask = nthbyte(state->m_gamma, 0x14); - UINT8 alpha_factor = nthbyte(state->m_gamma, 0x15); + UINT8 alpha_check12 = nthbyte(m_mixer, 0x12); + UINT8 alpha_check13 = nthbyte(m_mixer, 0x13); + UINT8 alpha_mask = nthbyte(m_mixer, 0x14); + UINT8 alpha_factor = nthbyte(m_mixer, 0x15); // prepare spot - int spot_flags = mixer.flags >> 16; - bool spot_enabled = spot_flags&1 && spot_flags&0xc; - int spot_limit = (spot_flags&2) ? mixer.spot_limit : 0xff; + int spot_flags = m_mixer_flags >> 16; + bool spot_enabled = (spot_flags & 1) && (spot_flags & 0xc); + int spot_limit = (spot_flags & 2) ? m_spot_limit : 0xff; // prepare fader - bool fade_enabled = mixer.flags&2 && mixer.fadeFactor; - int fade_factor = 0xff - mixer.fadeFactor; + bool fade_enabled = (m_mixer_flags & 2) && m_screen_fade_factor; + int fade_factor = 0xff - m_screen_fade_factor; rgbint fade_color; - rgb_comp_to_rgbint(&fade_color, mixer.rFadeColor, mixer.gFadeColor, mixer.bFadeColor); + rgb_comp_to_rgbint(&fade_color, m_screen_fade_r, m_screen_fade_g, m_screen_fade_b); // mix textlayer with poly/sprites - for (y=0;y<480;y++) + for (int y = cliprect.min_y; y <= cliprect.max_y; y++) { - src = &state->m_mix_bitmap->pix16(y); + src = &m_mix_bitmap->pix16(y); dest = &bitmap.pix32(y); pri = &screen.priority().pix8(y); - for (x=0;x<640;x++) + for (int x = cliprect.min_x; x <= cliprect.max_x; x++) { // skip if transparent or under poly/sprite if (pri[x] == prival) @@ -1952,8 +1985,8 @@ static void namcos22s_mix_textlayer( screen_device &screen, bitmap_rgb32 &bitmap // apply alpha if (alpha_factor) { - UINT8 pen = src[x]&0xff; - if ((pen&0xf) == alpha_mask || pen == alpha_check12 || pen == alpha_check13) + UINT8 pen = src[x] & 0xff; + if ((pen & 0xf) == alpha_mask || pen == alpha_check12 || pen == alpha_check13) { rgbint mix; rgb_to_rgbint(&mix, dest[x]); @@ -1964,7 +1997,7 @@ static void namcos22s_mix_textlayer( screen_device &screen, bitmap_rgb32 &bitmap // apply spot if (spot_enabled) { - UINT8 pen = src[x]&0xff; + UINT8 pen = src[x] & 0xff; rgbint mix; rgb_to_rgbint(&mix, dest[x]); if (spot_flags & 8) @@ -1972,14 +2005,14 @@ static void namcos22s_mix_textlayer( screen_device &screen, bitmap_rgb32 &bitmap // mix with per-channel brightness rgbint shade; rgb_comp_to_rgbint(&shade, - (0xff - (state->m_spotram[pen<<2|1] & 0xff)) << 2, - (0xff - (state->m_spotram[pen<<2|2] & 0xff)) << 2, - (0xff - (state->m_spotram[pen<<2|3] & 0xff)) << 2 + (0xff - (m_spotram[pen << 2 | 1] & 0xff)) << 2, + (0xff - (m_spotram[pen << 2 | 2] & 0xff)) << 2, + (0xff - (m_spotram[pen << 2 | 3] & 0xff)) << 2 ); rgbint_scale_channel_and_clamp(&mix, &shade); } - int spot_factor = 0xff - (state->m_spotram[pen<<2] & 0xff); + int spot_factor = 0xff - (m_spotram[pen << 2] & 0xff); if (spot_factor < spot_limit) rgbint_blend(&rgb, &mix, spot_factor); } @@ -1993,32 +2026,30 @@ static void namcos22s_mix_textlayer( screen_device &screen, bitmap_rgb32 &bitmap } } -static void namcos22_mix_textlayer( screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect ) +void namcos22_state::namcos22_mix_text_layer(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { - namcos22_state *state = screen.machine().driver_data(); - const pen_t *pens = screen.machine().pens; + const pen_t *pens = machine().pens; UINT16 *src; UINT32 *dest; UINT8 *pri; - int x,y; // prepare fader and shadow factor - bool fade_enabled = mixer.flags&2 && mixer.PolyFade_enabled; - bool shadow_enabled = mixer.flags&0x100; // ? (ridgerac is the only game not using shadow) + bool fade_enabled = m_mixer_flags & 2 && m_poly_fade_enabled; + bool shadow_enabled = (m_mixer_flags & 0x100) != 0; // ? (ridgerac is the only game not using shadow) rgbint fade_color, rgb_mix[3]; - rgb_comp_to_rgbint(&fade_color, mixer.rPolyFadeColor, mixer.gPolyFadeColor, mixer.bPolyFadeColor); - rgb_comp_to_rgbint(&rgb_mix[0], nthbyte(state->m_gamma, 0x08), nthbyte(state->m_gamma, 0x09), nthbyte(state->m_gamma, 0x0a)); // pen c - rgb_comp_to_rgbint(&rgb_mix[1], nthbyte(state->m_gamma, 0x0b), nthbyte(state->m_gamma, 0x0c), nthbyte(state->m_gamma, 0x0d)); // pen d - rgb_comp_to_rgbint(&rgb_mix[2], nthbyte(state->m_gamma, 0x0e), nthbyte(state->m_gamma, 0x0f), nthbyte(state->m_gamma, 0x10)); // pen e + rgb_comp_to_rgbint(&fade_color, m_poly_fade_r, m_poly_fade_g, m_poly_fade_b); + rgb_comp_to_rgbint(&rgb_mix[0], nthbyte(m_mixer, 0x08), nthbyte(m_mixer, 0x09), nthbyte(m_mixer, 0x0a)); // pen c + rgb_comp_to_rgbint(&rgb_mix[1], nthbyte(m_mixer, 0x0b), nthbyte(m_mixer, 0x0c), nthbyte(m_mixer, 0x0d)); // pen d + rgb_comp_to_rgbint(&rgb_mix[2], nthbyte(m_mixer, 0x0e), nthbyte(m_mixer, 0x0f), nthbyte(m_mixer, 0x10)); // pen e // mix textlayer with poly/sprites - for (y=0;y<480;y++) + for (int y = cliprect.min_y; y <= cliprect.max_y; y++) { - src = &state->m_mix_bitmap->pix16(y); + src = &m_mix_bitmap->pix16(y); dest = &bitmap.pix32(y); pri = &screen.priority().pix8(y); - for (x=0;x<640;x++) + for (int x = cliprect.min_x; x <= cliprect.max_x; x++) { // skip if transparent or under poly if (pri[x] == 2) @@ -2033,7 +2064,7 @@ static void namcos22_mix_textlayer( screen_device &screen, bitmap_rgb32 &bitmap, if (shadow_enabled) { rgb_to_rgbint(&rgb, dest[x]); - rgbint_scale_channel_and_clamp(&rgb, &rgb_mix[(src[x]&0xf)-0xc]); + rgbint_scale_channel_and_clamp(&rgb, &rgb_mix[(src[x] & 0xf) - 0xc]); break; } // (fall through) @@ -2055,857 +2086,404 @@ static void namcos22_mix_textlayer( screen_device &screen, bitmap_rgb32 &bitmap, } } -static void DrawCharacterLayer(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect ) +void namcos22_state::draw_text_layer(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { - namcos22_state *state = screen.machine().driver_data(); - int scroll_x = (state->m_tilemapattr[0]>>16) - 0x35c; - int scroll_y = state->m_tilemapattr[0]&0xffff; + int scroll_x = (m_tilemapattr[0] >> 16) - 0x35c; + int scroll_y = m_tilemapattr[0] & 0xffff; - state->m_bgtilemap->set_scrollx(0, scroll_x & 0x3ff ); - state->m_bgtilemap->set_scrolly(0, scroll_y & 0x3ff ); - state->m_bgtilemap->set_palette_offset(mixer.palBase*256 ); + m_bgtilemap->set_scrollx(0, scroll_x & 0x3ff); + m_bgtilemap->set_scrolly(0, scroll_y & 0x3ff); + m_bgtilemap->set_palette_offset(m_text_palbase * 256); - if (state->m_bSuperSystem22) + if (m_is_ss22) { - state->m_bgtilemap->draw(screen, *state->m_mix_bitmap, cliprect, 0, 4, 4); - namcos22s_mix_textlayer(screen, bitmap, cliprect, 4); + m_bgtilemap->draw(screen, *m_mix_bitmap, cliprect, 0, 4, 4); + namcos22s_mix_text_layer(screen, bitmap, cliprect, 4); } else { - state->m_bgtilemap->draw(screen, *state->m_mix_bitmap, cliprect, 0, 2, 3); - namcos22_mix_textlayer(screen, bitmap, cliprect); + m_bgtilemap->draw(screen, *m_mix_bitmap, cliprect, 0, 2, 3); + namcos22_mix_text_layer(screen, bitmap, cliprect); } } + + /*********************************************************************************************/ - -static INT32 Signed18( UINT32 value ) -{ - INT32 offset = value&0x03ffff; - if( offset&0x20000 ) - { - /* sign extend */ - offset |= ~0x03ffff; - } - return offset; -} - -/** - * @brief render a single quad - * - * @param flags - * 00-1.----.01-0.001- ? (always set/clear) - * --x-.----.----.---- ? - * ----.xx--.----.---- cz table - * ----.--xx.----.---- representative z algorithm? - * ----.----.--x-.---- backface cull enable - * ----.----.----.---x ? - * - * 1163 // sky - * 1262 // score (front) - * 1242 // score (hinge) - * 1243 // ? - * 1063 // n/a - * 1243 // various (2-sided?) - * 1263 // everything else (1-sided?) - * 1663 // ? - * - * @param color - * xxxxxxxx -------- -------- flat shading factor - * -------- x------- -------- fog enable - * -------- -xxxxxxx -------- palette select - * -------- -------- xxxxxxxx unused? - * - * @param polygonShiftValue22 - * 0x1fbd0 - sky+sea - * 0x0c350 - mountains - * 0x09c40 - boats, surf, road, buildings - * 0x07350 - guardrail - * 0x061a8 - red car - */ -static void BlitQuadHelper(running_machine &machine, bitmap_rgb32 &bitmap, unsigned color, unsigned addr, float m[4][4], INT32 polygonShiftValue22, int flags, int packetFormat) -{ - namcos22_state *state = machine.driver_data(); - int absolutePriority = state->m_AbsolutePriority; - INT32 zsortvalue24; - float zmin = 0.0f; - float zmax = 0.0f; - Poly3dVertex v[4]; - int i; - - for( i=0; i<4; i++ ) - { - Poly3dVertex *pVerTex = &v[i]; - pVerTex->x = GetPolyData( state, 8+i*3+addr ); - pVerTex->y = GetPolyData( state, 9+i*3+addr ); - pVerTex->z = GetPolyData( state, 10+i*3+addr ); - TransformPoint( &pVerTex->x, &pVerTex->y, &pVerTex->z, m ); - } - - /* backface cull one-sided polygons */ - if( flags&0x0020 && - (v[2].x*((v[0].z*v[1].y)-(v[0].y*v[1].z)))+ - (v[2].y*((v[0].x*v[1].z)-(v[0].z*v[1].x)))+ - (v[2].z*((v[0].y*v[1].x)-(v[0].x*v[1].y))) >= 0 && - - (v[0].x*((v[2].z*v[3].y)-(v[2].y*v[3].z)))+ - (v[0].y*((v[2].x*v[3].z)-(v[2].z*v[3].x)))+ - (v[0].z*((v[2].y*v[3].x)-(v[2].x*v[3].y))) >= 0 ) - { - return; - } - - for( i=0; i<4; i++ ) - { - Poly3dVertex *pVerTex = &v[i]; - int bri; - - pVerTex->u = GetPolyData( state, 0+i*2+addr ); - pVerTex->v = GetPolyData( state, 1+i*2+addr ); - - if( i==0 || pVerTex->z > zmax ) zmax = pVerTex->z; - if( i==0 || pVerTex->z < zmin ) zmin = pVerTex->z; - - if( state->m_LitSurfaceCount ) - { - // lighting (prelim) - bri = state->m_LitSurfaceInfo[state->m_LitSurfaceIndex%state->m_LitSurfaceCount]; - if( state->m_SurfaceNormalFormat == 0x6666 ) - { - if( i==3 ) - state->m_LitSurfaceIndex++; - } - else if( state->m_SurfaceNormalFormat == 0x4000 ) - state->m_LitSurfaceIndex++; - else - logerror( "unknown normal format: 0x%x\n", state->m_SurfaceNormalFormat ); - } - else if( packetFormat & 0x40 ) - { - // gourad shading - bri = (GetPolyData(state, i+addr)>>16)&0xff; - } - else - { - // flat shading - bri = color>>16&0xff; - } - - pVerTex->bri = bri; - } - - if( zmin<0.0f ) zmin = 0.0f; - if( zmax<0.0f ) zmax = 0.0f; - - switch (flags & 0x300) - { - case 0x000: - zsortvalue24 = (INT32)zmin; - break; - - case 0x100: - zsortvalue24 = (INT32)zmax; - break; - - default: - zsortvalue24 = (INT32)((zmin+zmax)/2.0f); - break; - } - - /* relative: representative z + shift values - * 1x.xxxx.xxxxxxxx.xxxxxxxx fixed z value - * 0x.xx--.--------.-------- absolute priority shift - * 0-.--xx.xxxxxxxx.xxxxxxxx z-representative value shift - */ - if( polygonShiftValue22 & 0x200000 ) - zsortvalue24 = polygonShiftValue22 & 0x1fffff; - else - { - zsortvalue24 += Signed18( polygonShiftValue22 ); - absolutePriority += (polygonShiftValue22&0x1c0000)>>18; - } - - if( state->m_ObjectShiftValue22 & 0x200000 ) - zsortvalue24 = state->m_ObjectShiftValue22 & 0x1fffff; - else - { - zsortvalue24 += Signed18( state->m_ObjectShiftValue22 ); - absolutePriority += (state->m_ObjectShiftValue22&0x1c0000)>>18; - } - - if (zsortvalue24 < 0) zsortvalue24 = 0; - else if (zsortvalue24 > 0x1fffff) zsortvalue24 = 0x1fffff; - absolutePriority &= 7; - zsortvalue24 |= (absolutePriority<<21); - - // allocate quad - struct SceneNode *node = NewSceneNode(machine, zsortvalue24, eSCENENODE_QUAD3D); - node->data.quad3d.cmode = (v[0].u>>12)&0xf; - node->data.quad3d.textureBank = (v[0].v>>12)&0xf; - node->data.quad3d.color = (color>>8)&0xff; - node->data.quad3d.flags = flags>>10&3; - node->data.quad3d.cz_adjust = state->m_cz_adjust; - - for( i=0; i<4; i++ ) - { - Poly3dVertex *p = &node->data.quad3d.v[i]; - p->x = v[i].x*mCamera.zoom; - p->y = v[i].y*mCamera.zoom; - p->z = v[i].z; - p->u = v[i].u&0xfff; - p->v = v[i].v&0xfff; - p->bri = v[i].bri; - } - - node->data.quad3d.direct = 0; - node->data.quad3d.vx = mCamera.vx; - node->data.quad3d.vy = mCamera.vy; - node->data.quad3d.vw = mCamera.vw; - node->data.quad3d.vh = mCamera.vh; -} - -static void RegisterNormals( namcos22_state *state, INT32 addr, float m[4][4] ) -{ - int i; - for( i=0; i<4; i++ ) - { - float nx = DSP_FIXED_TO_FLOAT(GetPolyData(state, addr+i*3+0)); - float ny = DSP_FIXED_TO_FLOAT(GetPolyData(state, addr+i*3+1)); - float nz = DSP_FIXED_TO_FLOAT(GetPolyData(state, addr+i*3+2)); - float dotproduct; - - /* transform normal vector */ - TransformNormal( &nx, &ny, &nz, m ); - dotproduct = nx*mCamera.lx + ny*mCamera.ly + nz*mCamera.lz; - if( dotproduct<0.0f ) - dotproduct = 0.0f; - state->m_LitSurfaceInfo[state->m_LitSurfaceCount++] = mCamera.ambient + mCamera.power*dotproduct; - } -} - -static void BlitQuads( running_machine &machine, bitmap_rgb32 &bitmap, INT32 addr, float m[4][4], INT32 base ) -{ - namcos22_state *state = machine.driver_data(); -// int numAdditionalNormals = 0; - int chunkLength = GetPolyData(state, addr++); - int finish = addr + chunkLength; - - if( chunkLength>0x100 ) - fatalerror( "bad packet length\n" ); - - while( addrm_SurfaceNormalFormat = GetPolyData(state, addr+3); - state->m_LitSurfaceCount = 0; - state->m_LitSurfaceIndex = 0; - RegisterNormals( state, addr+4, m ); - break; - - case 0x0d: /* additional normals */ - /* - 300401 (opcode) - 007b09 ffdd04 0004c2 - 007a08 ffd968 0001c1 - ff8354 ffe401 000790 - ff84f7 ffdd04 0004c2 - */ - RegisterNormals( state, addr+1, m ); - break; - - default: - break; - } - addr += packetLength; - } -} - -static void BlitPolyObject( running_machine &machine, bitmap_rgb32 &bitmap, int code, float M[4][4] ) -{ - namcos22_state *state = machine.driver_data(); - unsigned addr1 = GetPolyData(state, code); - state->m_LitSurfaceCount = 0; - state->m_LitSurfaceIndex = 0; - for(;;) - { - INT32 addr2 = GetPolyData(state, addr1++); - if( addr2<0 ) - break; - BlitQuads( machine, bitmap, addr2, M, code ); - } -} - -/*******************************************************************************/ - -READ32_MEMBER(namcos22_state::namcos22_dspram_r) -{ - return m_polygonram[offset] | 0xff000000; // only d0-23 are connected -} - -WRITE32_MEMBER(namcos22_state::namcos22_dspram_w) -{ - if (mem_mask & 0x00ff0000) - { - // sign extend or crop - mem_mask |= 0xff000000; - if (data & 0x00800000) - data |= 0xff000000; - else - data &= 0xffffff; - } - - COMBINE_DATA( &m_polygonram[offset] ); -} - -/*******************************************************************************/ - -/** - * master DSP can write directly to render device via port 0xc. - * This is used for "direct drawn" polygons, and "direct draw from point rom" - * feature - both opcodes exist in Ridge Racer's display-list processing - * - * record format: - * header (3 words) - * polygonShiftValue22 - * color - * flags - * - * per-vertex data (4*6 words) - * u,v - * sx,sy - * intensity;z.exponent - * z.mantissa - * - * master DSP can specify 3d objects indirectly (along with view transforms), - * via the "transmit" PDP opcode. the "render device" sends quad data to the slave DSP - * viewspace clipping and projection - * - * most "3d object" references are 0x45 and greater. references less than 0x45 are "special" - * commands, using a similar point rom format. the point rom header may point to point ram. - * - * slave DSP reads records via port 4 - * its primary purpose is applying lighting calculations - * the slave DSP forwards draw commands to a "draw device" - */ - -/*******************************************************************************/ - -/** - * 0xfffd - * 0x0: transform - * 0x1 - * 0x2 - * 0x5: transform - * >=0x45: draw primitive - */ -static void HandleBB0003( namcos22_state *state, const INT32 *pSource ) -{ - /* - bb0003 or 3b0003 - - 14.00c8 light.ambient light.power - 01.0000 ? light.dx - 06.5a82 window priority light.dy - 00.a57e ? light.dz - - c8.0081 vx=200,vy=129 - 29.6092 zoom = 772.5625 - 1e.95f8 1e.95f8 0.5858154296875 0.5858154296875 // 452 - 1e.b079 1e.b079 0.6893463134765 0.6893463134765 // 532 - 29.58e8 711.25 (border? see time crisis) - - 7ffe 0000 0000 - 0000 7ffe 0000 - 0000 0000 7ffe - */ - mCamera.ambient = pSource[0x1]>>16; - mCamera.power = pSource[0x1]&0xffff; - - mCamera.lx = DSP_FIXED_TO_FLOAT(pSource[0x2]); - mCamera.ly = DSP_FIXED_TO_FLOAT(pSource[0x3]); - mCamera.lz = DSP_FIXED_TO_FLOAT(pSource[0x4]); - - state->m_AbsolutePriority = pSource[0x3]>>16; - mCamera.vx = (INT16)(pSource[5]>>16); - mCamera.vy = (INT16)pSource[5]; - mCamera.zoom = DspFloatToNativeFloat(pSource[6]); - mCamera.vw = DspFloatToNativeFloat(pSource[7])*mCamera.zoom; - mCamera.vh = DspFloatToNativeFloat(pSource[9])*mCamera.zoom; - - state->m_ViewMatrix[0][0] = DSP_FIXED_TO_FLOAT(pSource[0x0c]); - state->m_ViewMatrix[1][0] = DSP_FIXED_TO_FLOAT(pSource[0x0d]); - state->m_ViewMatrix[2][0] = DSP_FIXED_TO_FLOAT(pSource[0x0e]); - - state->m_ViewMatrix[0][1] = DSP_FIXED_TO_FLOAT(pSource[0x0f]); - state->m_ViewMatrix[1][1] = DSP_FIXED_TO_FLOAT(pSource[0x10]); - state->m_ViewMatrix[2][1] = DSP_FIXED_TO_FLOAT(pSource[0x11]); - - state->m_ViewMatrix[0][2] = DSP_FIXED_TO_FLOAT(pSource[0x12]); - state->m_ViewMatrix[1][2] = DSP_FIXED_TO_FLOAT(pSource[0x13]); - state->m_ViewMatrix[2][2] = DSP_FIXED_TO_FLOAT(pSource[0x14]); - - TransformNormal( &mCamera.lx, &mCamera.ly, &mCamera.lz, state->m_ViewMatrix ); -} - -static void Handle200002( running_machine &machine, bitmap_rgb32 &bitmap, const INT32 *pSource ) -{ - namcos22_state *state = machine.driver_data(); - if( state->m_PrimitiveID>=0x45 ) - { - float m[4][4]; /* row major */ - - matrix3d_Identity( m ); - - m[0][0] = DSP_FIXED_TO_FLOAT(pSource[0x1]); - m[1][0] = DSP_FIXED_TO_FLOAT(pSource[0x2]); - m[2][0] = DSP_FIXED_TO_FLOAT(pSource[0x3]); - - m[0][1] = DSP_FIXED_TO_FLOAT(pSource[0x4]); - m[1][1] = DSP_FIXED_TO_FLOAT(pSource[0x5]); - m[2][1] = DSP_FIXED_TO_FLOAT(pSource[0x6]); - - m[0][2] = DSP_FIXED_TO_FLOAT(pSource[0x7]); - m[1][2] = DSP_FIXED_TO_FLOAT(pSource[0x8]); - m[2][2] = DSP_FIXED_TO_FLOAT(pSource[0x9]); - - m[3][0] = pSource[0xa]; /* xpos */ - m[3][1] = pSource[0xb]; /* ypos */ - m[3][2] = pSource[0xc]; /* zpos */ - - matrix3d_Multiply( m, state->m_ViewMatrix ); - BlitPolyObject( machine, bitmap, state->m_PrimitiveID, m ); - } - else if( state->m_PrimitiveID !=0 && state->m_PrimitiveID !=2 ) - { - logerror( "Handle200002:unk code=0x%x\n", state->m_PrimitiveID ); - // ridgerac title screen waving flag: 0x5 - } -} - -static void Handle300000( namcos22_state *state, const INT32 *pSource ) -{ - state->m_ViewMatrix[0][0] = DSP_FIXED_TO_FLOAT(pSource[1]); - state->m_ViewMatrix[1][0] = DSP_FIXED_TO_FLOAT(pSource[2]); - state->m_ViewMatrix[2][0] = DSP_FIXED_TO_FLOAT(pSource[3]); - - state->m_ViewMatrix[0][1] = DSP_FIXED_TO_FLOAT(pSource[4]); - state->m_ViewMatrix[1][1] = DSP_FIXED_TO_FLOAT(pSource[5]); - state->m_ViewMatrix[2][1] = DSP_FIXED_TO_FLOAT(pSource[6]); - - state->m_ViewMatrix[0][2] = DSP_FIXED_TO_FLOAT(pSource[7]); - state->m_ViewMatrix[1][2] = DSP_FIXED_TO_FLOAT(pSource[8]); - state->m_ViewMatrix[2][2] = DSP_FIXED_TO_FLOAT(pSource[9]); -} /* Handle300000 */ - -static void Handle233002( namcos22_state *state, const INT32 *pSource ) -{ - /* - 00233002 - 00000000 // cz adjust (signed24) - 0003dd00 // z bias adjust - 001fffff // far plane? - 00007fff 00000000 00000000 - 00000000 00007fff 00000000 - 00000000 00000000 00007fff - 00000000 00000000 00000000 - */ - state->m_cz_adjust = (pSource[1] & 0x00800000) ? pSource[1] | 0xff000000 : pSource[1] & 0x00ffffff; - state->m_ObjectShiftValue22 = pSource[2]; -} - -static void SimulateSlaveDSP( running_machine &machine, bitmap_rgb32 &bitmap ) -{ - namcos22_state *state = machine.driver_data(); - const INT32 *pSource = 0x300 + (INT32 *)state->m_polygonram.target(); - INT16 len; - - matrix3d_Identity( state->m_ViewMatrix ); - - if( state->m_bSuperSystem22 ) - { - pSource += 4; /* FFFE 0400 */ - } - else - { - pSource--; - } - - for(;;) - { - INT16 next; - state->m_PrimitiveID = *pSource++; - len = (INT16)*pSource++; - - switch( len ) - { - case 0x15: - HandleBB0003( state, pSource ); /* define viewport */ - break; - - case 0x10: - Handle233002( state, pSource ); /* set modal rendering options */ - break; - - case 0x0a: - Handle300000( state, pSource ); /* modify view transform */ - break; - - case 0x0d: - Handle200002( machine, bitmap, pSource ); /* render primitive */ - break; - - default: - logerror( "unk 3d data(%d) addr=0x%x!", len, (int)(pSource-(INT32*)state->m_polygonram.target()) ); - { - int i; - for( i=0; im_polygonram.target()) ) - { - /* end of list */ - break; - } - } -} - -static void DrawPolygons( running_machine &machine, bitmap_rgb32 &bitmap ) -{ - namcos22_state *state = machine.driver_data(); - if( state->m_bDSPisActive ) - { - SimulateSlaveDSP( machine, bitmap ); - poly_wait(state->m_poly, "DrawPolygons"); - } -} - -void namcos22_enable_slave_simulation( running_machine &machine, int enable ) -{ - namcos22_state *state = machine.driver_data(); - state->m_bDSPisActive = enable; -} - -/*********************************************************************************************/ - -READ32_MEMBER(namcos22_state::namcos22_cgram_r) -{ - return m_cgram[offset]; -} - -WRITE32_MEMBER(namcos22_state::namcos22_cgram_w) -{ - COMBINE_DATA( &m_cgram[offset] ); - machine().gfx[GFX_CHAR]->mark_dirty(offset/32); -} - -READ32_MEMBER(namcos22_state::namcos22_paletteram_r) -{ - return m_generic_paletteram_32[offset]; -} - WRITE32_MEMBER(namcos22_state::namcos22_paletteram_w) { - COMBINE_DATA( &m_generic_paletteram_32[offset] ); - m_dirtypal[offset&(0x7fff/4)] = 1; + COMBINE_DATA(&m_paletteram[offset]); + m_dirtypal[offset & (0x7fff/4)] = 1; } -void namcos22_state::namcos22_reset() +void namcos22_state::update_palette() { - memset(&mSceneRoot, 0, sizeof(mSceneRoot)); - mpFreeSceneNode = NULL; -} - -void namcos22_state::namcos22_exit() -{ - poly_free(m_poly); -} - -VIDEO_START_MEMBER(namcos22_state,common) -{ - int code; - - m_mix_bitmap = auto_bitmap_ind16_alloc(machine(),640,480); - m_bgtilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(namcos22_state::TextTilemapGetInfo),this),TILEMAP_SCAN_ROWS,16,16,64,64 ); - m_bgtilemap->set_transparent_pen(0xf); - - m_bDSPisActive = 0; - memset( m_polygonram, 0xcc, 0x20000 ); - - for (code = 0; code < machine().gfx[GFX_TEXTURE_TILE]->elements(); code++) - machine().gfx[GFX_TEXTURE_TILE]->decode(code); - - Prepare3dTexture(machine(), memregion("textilemap")->base(), machine().gfx[GFX_TEXTURE_TILE]->get_data(0) ); - m_dirtypal = auto_alloc_array(machine(), UINT8, NAMCOS22_PALETTE_SIZE/4); - m_PtRomSize = memregion("pointrom")->bytes()/3; - m_pPolyL = memregion("pointrom")->base(); - m_pPolyM = m_pPolyL + m_PtRomSize; - m_pPolyH = m_pPolyM + m_PtRomSize; - - m_poly = poly_alloc(machine(), 4000, sizeof(poly_extra_data), 0); - machine().add_notifier(MACHINE_NOTIFY_RESET, machine_notify_delegate(FUNC(namcos22_state::namcos22_reset), this)); - machine().add_notifier(MACHINE_NOTIFY_EXIT, machine_notify_delegate(FUNC(namcos22_state::namcos22_exit), this)); - - machine().gfx[GFX_CHAR]->set_source((UINT8 *)m_cgram.target()); -} - -VIDEO_START_MEMBER(namcos22_state,namcos22) -{ - m_bSuperSystem22 = 0; - VIDEO_START_CALL_MEMBER(common); -} - -VIDEO_START_MEMBER(namcos22_state,namcos22s) -{ - m_bSuperSystem22 = 1; - - // init spotram - m_spotram = auto_alloc_array(machine(), UINT16, SPOTRAM_SIZE); - memset(m_spotram, 0, SPOTRAM_SIZE*2); - - // init czram tables - int table; - for (table=0; table<4; table++) + for (int i = 0; i < 0x8000/4; i++) { - m_banked_czram[table] = auto_alloc_array(machine(), UINT16, 0x100); - memset(m_banked_czram[table], 0, 0x100*2); - m_recalc_czram[table] = auto_alloc_array(machine(), UINT8, 0x2000); - memset(m_recalc_czram[table], 0, 0x2000); - m_cz_was_written[table] = 0; + if (m_dirtypal[i]) + { + for (int j = 0; j < 4; j++) + { + int which = i * 4 + j; + int r = nthbyte(m_paletteram, which + 0x00000); + int g = nthbyte(m_paletteram, which + 0x08000); + int b = nthbyte(m_paletteram, which + 0x10000); + palette_set_color(machine(), which, MAKE_RGB(r, g, b)); + } + m_dirtypal[i] = 0; + } } - - VIDEO_START_CALL_MEMBER(common); } + +void namcos22_state::update_mixer() +{ + int i; + m_poly->wait("update_mixer"); +#if 0 // show reg contents + char msg1[0x1000] = {0}, msg2[0x1000] = {0}; + int st = 0x000 / 16; + for (i = st; i < (st+3); i++) + { + sprintf(msg2,"%04X %08X %08X %08X %08X\n", i*16, m_mixer[i*4+0], m_mixer[i*4+1], m_mixer[i*4+2], m_mixer[i*4+3]); + strcat(msg1,msg2); + } + if (1) // + other non-super regs + if (!m_is_ss22) + { + strcat(msg1,"\n"); + for (i = 8; i <= 0x20; i += 8) + { + sprintf(msg2,"%04X %08X %08X %08X %08X\n", i*16, m_mixer[i*4+0], m_mixer[i*4+1], m_mixer[i*4+2], m_mixer[i*4+3]); + strcat(msg1,msg2); + } + } + popmessage("%s",msg1); +#endif + + if (m_is_ss22) + { +/* + 0 1 2 3 4 5 6 7 8 9 a b c d e f 10 14 18 1c +00824000: ffffff00 00000000 0000007f 00ff0000 1000ff00 0f000000 00ff007f 00010007 // time crisis +00824000: ffffff00 00000000 1830407f 00800000 0000007f 0f000000 0000037f 00010007 // trans sprite +00824000: ffffff00 00000000 3040307f 00000000 0080007f 0f000000 0000037f 00010007 // trans poly +00824000: ffffff00 00000000 1800187f 00800000 0080007f 0f000000 0000037f 00010007 // trans poly(2) +00824000: ffffff00 00000000 1800187f 00000000 0000007f 0f800000 0000037f 00010007 // trans text + + 00,01,02 polygon fade rgb + 03 + 04 + 05,06,07 world fog rgb + 08,09,0a background color + 0b + 0c + 0d spot factor limit value + 0e enable spot factor limit + 0f + 10 + 11 global polygon alpha factor + 12,13 textlayer alpha pen comparison + 14 textlayer alpha pen mask? + 15 textlayer alpha factor + 16,17,18 global fade rgb + 19 global fade factor + 1a fade target flags + 1b textlayer palette base + 1c + 1d + 1e + 1f layer enable +*/ + m_poly_fade_r = nthbyte(m_mixer, 0x00); + m_poly_fade_g = nthbyte(m_mixer, 0x01); + m_poly_fade_b = nthbyte(m_mixer, 0x02); m_poly_fade_enabled = (m_poly_fade_r == 0xff && m_poly_fade_g == 0xff && m_poly_fade_b == 0xff) ? 0 : 1; + m_fog_r = nthbyte(m_mixer, 0x05); + m_fog_g = nthbyte(m_mixer, 0x06); + m_fog_b = nthbyte(m_mixer, 0x07); + m_spot_limit = nthbyte(m_mixer, 0x0d); + m_poly_translucency = nthbyte(m_mixer, 0x11); + m_screen_fade_r = nthbyte(m_mixer, 0x16); + m_screen_fade_g = nthbyte(m_mixer, 0x17); + m_screen_fade_b = nthbyte(m_mixer, 0x18); + m_screen_fade_factor = nthbyte(m_mixer, 0x19); + m_mixer_flags = nthbyte(m_mixer, 0x1a); + m_text_palbase = nthbyte(m_mixer, 0x1b) & 0x7f; + + // put spot-specific flags into high word + m_mixer_flags |= m_spot_enable << 16; + m_mixer_flags |= (nthbyte(m_mixer, 0x0e) & 1) << 17; + m_mixer_flags |= (m_chipselect & 0xc000) << 4; + } + else + { +/* +90020000: 4f030000 7f00007f 4d4d4d42 0c00c0c0 +90020010: c0010001 00010000 00000000 00000000 +90020080: 00010101 01010102 00000000 00000000 +900200c0: 00000000 00000000 00000000 03000000 +90020100: fff35000 00000000 00000000 00000000 +90020180: ff713700 00000000 00000000 00000000 +90020200: ff100000 00000000 00000000 00000000 + + 00,01 display flags + 02 + 03 + 04 + 05 + 06 + 07 textlayer palette base? + 08,09,0a textlayer pen c shadow rgb + 0b,0c,0d textlayer pen d shadow rgb + 0e,0f,10 textlayer pen e shadow rgb + 11,12 global fade factor red + 13,14 global fade factor green + 15,16 global fade factor blue + 80-87 fog color mask? + 100,180,200 fog rgb 0 + 101,181,201 fog rgb 1 + 102,182,202 fog rgb 2 + 103,183,203 fog rgb 3 +*/ + m_mixer_flags = nthbyte(m_mixer, 0x00) << 8 | nthbyte(m_mixer, 0x01); + m_poly_fade_r = nthbyte(m_mixer, 0x11) << 8 | nthbyte(m_mixer, 0x12); // 0x0100 = 1.0 + m_poly_fade_g = nthbyte(m_mixer, 0x13) << 8 | nthbyte(m_mixer, 0x14); + m_poly_fade_b = nthbyte(m_mixer, 0x15) << 8 | nthbyte(m_mixer, 0x16); + m_poly_fade_enabled = (m_poly_fade_r == 0x100 && m_poly_fade_g == 0x100 && m_poly_fade_b == 0x100) ? 0 : 1; + + // raveracw is the only game using multiple fog colors (city smog, cars under tunnels, brake disc in attract mode) + m_fog_colormask = m_mixer[0x84/4]; + + // fog color per cz type + for (i = 0; i < 4; i++) + { + m_fog_r_per_cztype[i] = nthbyte(m_mixer, 0x0100+i); + m_fog_g_per_cztype[i] = nthbyte(m_mixer, 0x0180+i); + m_fog_b_per_cztype[i] = nthbyte(m_mixer, 0x0200+i); + } + + m_text_palbase = 0x7f; + } +} + + UINT32 namcos22_state::screen_update_namcos22s(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { - UpdateVideoMixer(machine()); - UpdatePalette(machine()); - namcos22s_recalc_czram(machine()); + update_mixer(); + update_palette(); + recalc_czram(); screen.priority().fill(0, cliprect); // background color rgbint bg_color; - rgb_comp_to_rgbint(&bg_color, nthbyte(m_gamma,0x08), nthbyte(m_gamma,0x09), nthbyte(m_gamma,0x0a)); - if (mixer.flags&1 && mixer.fadeFactor) + rgb_comp_to_rgbint(&bg_color, nthbyte(m_mixer, 0x08), nthbyte(m_mixer, 0x09), nthbyte(m_mixer, 0x0a)); + if (m_mixer_flags & 1 && m_screen_fade_factor) { rgbint fade_color; - rgb_comp_to_rgbint(&fade_color, mixer.rFadeColor, mixer.gFadeColor, mixer.bFadeColor); - rgbint_blend(&bg_color, &fade_color, 0xff - mixer.fadeFactor); + rgb_comp_to_rgbint(&fade_color, m_screen_fade_r, m_screen_fade_g, m_screen_fade_b); + rgbint_blend(&bg_color, &fade_color, 0xff - m_screen_fade_factor); } bitmap.fill(rgbint_to_rgb(&bg_color), cliprect); // layers - UINT8 layer = nthbyte(m_gamma,0x1f); - if (layer&4) DrawCharacterLayer(screen, bitmap, cliprect); - if (layer&2) DrawSprites(machine(), bitmap, cliprect); - if (layer&1) DrawPolygons(machine(), bitmap); - RenderScene(screen, bitmap ); - if (layer&4) namcos22s_mix_textlayer(screen, bitmap, cliprect, 6); - ApplyGamma(machine(), bitmap); - - // debug stuff -#if ALLOW_MEMDUMP - if( machine().input().code_pressed(KEYCODE_D) ) + UINT8 layer = nthbyte(m_mixer, 0x1f); + if (layer & 4) draw_text_layer(screen, bitmap, cliprect); + if (layer & 2) draw_sprites(bitmap, cliprect); + if (layer & 1) draw_polygons(bitmap); + m_poly->render_scene(screen, bitmap); + if (layer & 4) namcos22s_mix_text_layer(screen, bitmap, cliprect, 6); + + // apply gamma + const UINT8 *rlut = (const UINT8 *)&m_mixer[0x100/4]; + const UINT8 *glut = (const UINT8 *)&m_mixer[0x200/4]; + const UINT8 *blut = (const UINT8 *)&m_mixer[0x300/4]; + for (int y = cliprect.min_y; y <= cliprect.max_y; y++) { - FILE *f = fopen( "dump.txt", "wb" ); - if( f ) + UINT32 *dest = &bitmap.pix32(y); + for (int x = cliprect.min_x; x <= cliprect.max_x; x++) { - address_space &space = m_maincpu->space(AS_PROGRAM); - - if (1) // czram - { - int i,bank; - for( bank=0; bank<4; bank++ ) - { - fprintf( f, "czram[%d] =", bank ); - for( i=0; i<256; i++ ) - { - fprintf( f, " %04x", m_banked_czram[bank][i] ); - } - fprintf( f, "\n" ); - } - fprintf( f, "\n" ); - } - - if (0) // spotram - { - int i; - fprintf(f, "spotram:\n"); - for (i=0; i<256; i++) - { - fprintf(f, "%02X: %04X %04X %04X %04X\n", i, m_spotram[i*4+0], m_spotram[i*4+1], m_spotram[i*4+2], m_spotram[i*4+3]); - } - fprintf(f, "\n"); - } - - Dump(space, f,0x810000, 0x81000f, "cz attr" ); - Dump(space, f,0x824000, 0x8243ff, "gamma"); - //Dump(space, f,0x828000, 0x83ffff, "palette" ); - //Dump(space, f,0x8a0000, 0x8a000f, "tilemap_attr"); - //Dump(space, f,0x880000, 0x89ffff, "cgram/textram"); - //Dump(space, f,0x900000, 0x90ffff, "vics_data"); - //Dump(space, f,0x940000, 0x94007f, "vics_control"); - //Dump(space, f,0x980000, 0x9affff, "sprite374" ); - //Dump(space, f,0xc00000, 0xc1ffff, "polygonram"); - fclose( f ); + int rgb = dest[x]; + int r = rlut[NATIVE_ENDIAN_VALUE_LE_BE(3, 0) ^ ((rgb >> 16) & 0xff)]; + int g = glut[NATIVE_ENDIAN_VALUE_LE_BE(3, 0) ^ ((rgb >> 8) & 0xff)]; + int b = blut[NATIVE_ENDIAN_VALUE_LE_BE(3, 0) ^ (rgb & 0xff)]; + dest[x] = (r << 16) | (g << 8) | b; } - while( machine().input().code_pressed(KEYCODE_D) ){} } -#endif - -// popmessage("%08X %08X %08X %08X",m_czattr[0],m_czattr[1],m_czattr[2],m_czattr[3]); return 0; } UINT32 namcos22_state::screen_update_namcos22(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { - UpdateVideoMixer(machine()); - UpdatePalette(machine()); + update_mixer(); + update_palette(); screen.priority().fill(0, cliprect); - bitmap.fill(0, cliprect); - DrawPolygons(machine(), bitmap); - RenderScene(screen, bitmap); - DrawCharacterLayer(screen, bitmap, cliprect); - ApplyGamma(machine(), bitmap); - -#if ALLOW_MEMDUMP - if( machine().input().code_pressed(KEYCODE_D) ) + + // background color + bitmap.fill(screen.machine().pens[0x7fff], cliprect); + + // layers + draw_polygons(bitmap); + m_poly->render_scene(screen, bitmap); + draw_text_layer(screen, bitmap, cliprect); + + // apply gamma + const UINT8 *rlut = (const UINT8 *)m_gamma_proms->base(); + const UINT8 *glut = (const UINT8 *)m_gamma_proms->base() + 0x100; + const UINT8 *blut = (const UINT8 *)m_gamma_proms->base() + 0x200; + for (int y = cliprect.min_y; y <= cliprect.max_y; y++) { - FILE *f = fopen( "dump.txt", "wb" ); - if( f ) + UINT32 *dest = &bitmap.pix32(y); + for (int x = cliprect.min_x; x <= cliprect.max_x; x++) { - address_space &space = m_maincpu->space(AS_PROGRAM); - - //Dump(space, f,0x90000000, 0x90000003, "led?" ); - Dump(space, f,0x90010000, 0x90017fff, "cz_ram"); - //Dump(space, f,0x900a0000, 0x900a000f, "tilemap_attr"); - Dump(space, f,0x90020000, 0x90027fff, "gamma"); - //Dump(space, f,0x70000000, 0x7001ffff, "polygonram"); - fclose( f ); + int rgb = dest[x]; + int r = rlut[(rgb >> 16) & 0xff]; + int g = glut[(rgb >> 8) & 0xff]; + int b = blut[rgb & 0xff]; + dest[x] = (r << 16) | (g << 8) | b; } - while( machine().input().code_pressed(KEYCODE_D) ){} } -#endif return 0; } -WRITE16_MEMBER(namcos22_state::namcos22_dspram16_bank_w) -{ - COMBINE_DATA( &m_dspram_bank ); -} -READ16_MEMBER(namcos22_state::namcos22_dspram16_r) + +/*********************************************************************************************/ + +void namcos22_state::init_tables() { - UINT32 value = m_polygonram[offset]; - switch( m_dspram_bank ) + m_dirtypal = auto_alloc_array(machine(), UINT8, 0x8000/4); + memset(m_dirtypal, 1, 0x8000/4); + memset(m_paletteram, 0, 0x8000); + + memset(m_polygonram, 0xcc, m_polygonram.bytes()); + + // init spotram (super22 only) + if (m_is_ss22) + m_spotram = auto_alloc_array_clear(machine(), UINT16, SPOTRAM_SIZE); + + // init czram tables (super22 only) + if (m_is_ss22) { - case 0: - value &= 0xffff; - break; - - case 1: - value>>=16; - break; - - case 2: - m_UpperWordLatch = value>>16; - value &= 0xffff; - break; - - default: - break; + for (int table = 0; table < 4; table++) + { + m_banked_czram[table] = auto_alloc_array_clear(machine(), UINT16, 0x100); + m_recalc_czram[table] = auto_alloc_array_clear(machine(), UINT8, 0x2000); + m_cz_was_written[table] = 1; + } } - return (UINT16)value; -} -WRITE16_MEMBER(namcos22_state::namcos22_dspram16_w) -{ - UINT32 value = m_polygonram[offset]; - UINT16 lo = value&0xffff; - UINT16 hi = value>>16; - switch( m_dspram_bank ) + // init pointrom + m_pointrom_size = memregion("pointrom")->bytes()/3; + m_pointrom = auto_alloc_array(machine(), INT32, m_pointrom_size); + UINT8* pointrom_low = memregion("pointrom")->base(); + UINT8* pointrom_mid = pointrom_low + m_pointrom_size; + UINT8* pointrom_high = pointrom_mid + m_pointrom_size; + for (int i = 0; i < m_pointrom_size; i++) { - case 0: - COMBINE_DATA( &lo ); - break; - - case 1: - COMBINE_DATA( &hi ); - break; - - case 2: - COMBINE_DATA( &lo ); - hi = m_UpperWordLatch; - break; - - default: - break; + m_pointrom[i] = signed24(pointrom_high[i] << 16 | pointrom_mid[i] << 8 | pointrom_low[i]); + } + + m_pointram = auto_alloc_array_clear(machine(), UINT32, 0x20000); + + // textures + for (int i = 0; i < machine().gfx[1]->elements(); i++) + machine().gfx[1]->decode(i); + + m_texture_tilemap = (UINT16 *)memregion("textilemap")->base(); + m_texture_tiledata = (UINT8 *)machine().gfx[1]->get_data(0); + m_texture_tileattr = auto_alloc_array(machine(), UINT8, 0x080000*2); + + // unpack textures + UINT8 *packed_tileattr = 0x200000 + (UINT8 *)memregion("textilemap")->base(); + UINT8 *unpacked_tileattr = m_texture_tileattr; + for (int i = 0; i < 0x80000; i++) + { + *unpacked_tileattr++ = (*packed_tileattr) >> 4; + *unpacked_tileattr++ = (*packed_tileattr) & 0xf; + packed_tileattr++; + } + + // make attr/y/x lookup table + m_texture_ayx_to_pixel = auto_alloc_array(machine(), UINT8, 16*16*16); + for (int attr = 0; attr < 16; attr++) + { + for (int y = 0; y < 16; y++) + { + for (int x = 0; x < 16; x++) + { + int ix = x, iy = y; + + if (attr & 4) + ix = 15 - ix; + + if (attr & 2) + iy = 15 - iy; + + if (attr & 8) + { + int temp = ix; + ix = iy; + iy = temp; + } + + m_texture_ayx_to_pixel[attr << 8 | y << 4 | x] = (iy << 4) | ix; + } + } + } + + // following setup is Namco System 22 specific + switch (m_gametype) + { + case NAMCOS22_RIDGE_RACER: + case NAMCOS22_RIDGE_RACER2: + case NAMCOS22_ACE_DRIVER: + case NAMCOS22_CYBER_COMMANDO: + { + for (int i = 0; i < 0x100000; i++) + { + int tile = m_texture_tilemap[i]; + int attr = m_texture_tileattr[i]; + if ((attr & 0x1) == 0) + { + tile = (tile & 0x3fff) | 0x8000; + m_texture_tilemap[i] = tile; + } + } + break; + } + + default: + break; } - m_polygonram[offset] = (hi<<16)|lo; +} + + +VIDEO_START_MEMBER(namcos22_state,common) +{ + init_tables(); + + m_mix_bitmap = auto_bitmap_ind16_alloc(machine(), 640, 480); + m_bgtilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(namcos22_state::get_text_tile_info), this), TILEMAP_SCAN_ROWS, 16, 16, 64, 64); + m_bgtilemap->set_transparent_pen(0xf); + + machine().gfx[0]->set_source((UINT8 *)m_cgram.target()); + + m_poly = auto_alloc(machine(), namcos22_renderer(*this)); +} + +VIDEO_START_MEMBER(namcos22_state,namcos22) +{ + m_is_ss22 = 0; + + VIDEO_START_CALL_MEMBER(common); +} + +VIDEO_START_MEMBER(namcos22_state,namcos22s) +{ + m_is_ss22 = 1; + + VIDEO_START_CALL_MEMBER(common); }