diff options
Diffstat (limited to 'src/mame/drivers/deco_mlc.c')
-rw-r--r-- | src/mame/drivers/deco_mlc.c | 103 |
1 files changed, 49 insertions, 54 deletions
diff --git a/src/mame/drivers/deco_mlc.c b/src/mame/drivers/deco_mlc.c index 5e8b364eded..3132e680f70 100644 --- a/src/mame/drivers/deco_mlc.c +++ b/src/mame/drivers/deco_mlc.c @@ -107,23 +107,23 @@ /***************************************************************************/ -static READ32_HANDLER(test2_r) +READ32_MEMBER(deco_mlc_state::test2_r) { // if (offset==0) -// return input_port_read(space->machine(), "IN0"); //0xffffffff; -// logerror("%08x: Test2_r %d\n",cpu_get_pc(&space->device()),offset); - return space->machine().rand(); //0xffffffff; +// return input_port_read(machine(), "IN0"); //0xffffffff; +// logerror("%08x: Test2_r %d\n",cpu_get_pc(&space.device()),offset); + return machine().rand(); //0xffffffff; } -static READ32_HANDLER(test3_r) +READ32_MEMBER(deco_mlc_state::test3_r) { /* test3 7 - vbl loop on 0x10 0000 at end of IRQ */ //if (offset==0) -// return space->machine().rand()|(space->machine().rand()<<16); -// logerror("%08x: Test3_r %d\n",cpu_get_pc(&space->device()),offset); +// return machine().rand()|(machine().rand()<<16); +// logerror("%08x: Test3_r %d\n",cpu_get_pc(&space.device()),offset); return 0xffffffff; } @@ -145,26 +145,25 @@ static WRITE32_DEVICE_HANDLER( avengrs_eprom_w ) logerror("%s: eprom_w %08x mask %08x\n",device->machine().describe_context(),data,mem_mask); } -static WRITE32_HANDLER( avengrs_palette_w ) +WRITE32_MEMBER(deco_mlc_state::avengrs_palette_w) { - COMBINE_DATA(&space->machine().generic.paletteram.u32[offset]); + COMBINE_DATA(&machine().generic.paletteram.u32[offset]); /* x bbbbb ggggg rrrrr */ - palette_set_color_rgb(space->machine(),offset,pal5bit(space->machine().generic.paletteram.u32[offset] >> 0),pal5bit(space->machine().generic.paletteram.u32[offset] >> 5),pal5bit(space->machine().generic.paletteram.u32[offset] >> 10)); + palette_set_color_rgb(machine(),offset,pal5bit(machine().generic.paletteram.u32[offset] >> 0),pal5bit(machine().generic.paletteram.u32[offset] >> 5),pal5bit(machine().generic.paletteram.u32[offset] >> 10)); } -static READ32_HANDLER( decomlc_vbl_r ) +READ32_MEMBER(deco_mlc_state::decomlc_vbl_r) { - deco_mlc_state *state = space->machine().driver_data<deco_mlc_state>(); - state->m_vbl_i ^=0xffffffff; -//logerror("vbl r %08x\n", cpu_get_pc(&space->device())); + m_vbl_i ^=0xffffffff; +//logerror("vbl r %08x\n", cpu_get_pc(&space.device())); // Todo: Vblank probably in $10 - return state->m_vbl_i; + return m_vbl_i; } -static READ32_HANDLER( mlc_scanline_r ) +READ32_MEMBER(deco_mlc_state::mlc_scanline_r) { -// logerror("read scanline counter (%d)\n", space->machine().primary_screen->vpos()); - return space->machine().primary_screen->vpos(); +// logerror("read scanline counter (%d)\n", machine().primary_screen->vpos()); + return machine().primary_screen->vpos(); } static TIMER_DEVICE_CALLBACK( interrupt_gen ) @@ -174,20 +173,19 @@ static TIMER_DEVICE_CALLBACK( interrupt_gen ) cputag_set_input_line(timer.machine(), "maincpu", state->m_mainCpuIsArm ? ARM_IRQ_LINE : 1, HOLD_LINE); } -static WRITE32_HANDLER( mlc_irq_w ) +WRITE32_MEMBER(deco_mlc_state::mlc_irq_w) { - deco_mlc_state *state = space->machine().driver_data<deco_mlc_state>(); - int scanline=space->machine().primary_screen->vpos(); - state->m_irq_ram[offset]=data&0xffff; + int scanline=machine().primary_screen->vpos(); + m_irq_ram[offset]=data&0xffff; switch (offset*4) { case 0x10: /* IRQ ack. Value written doesn't matter */ - cputag_set_input_line(space->machine(), "maincpu", state->m_mainCpuIsArm ? ARM_IRQ_LINE : 1, CLEAR_LINE); + cputag_set_input_line(machine(), "maincpu", m_mainCpuIsArm ? ARM_IRQ_LINE : 1, CLEAR_LINE); return; case 0x14: /* Prepare scanline interrupt */ - state->m_raster_irq_timer->adjust(space->machine().primary_screen->time_until_pos(state->m_irq_ram[0x14/4])); - //logerror("prepare scanline to fire at %d (currently on %d)\n", state->m_irq_ram[0x14/4], space->machine().primary_screen->vpos()); + m_raster_irq_timer->adjust(machine().primary_screen->time_until_pos(m_irq_ram[0x14/4])); + //logerror("prepare scanline to fire at %d (currently on %d)\n", m_irq_ram[0x14/4], machine().primary_screen->vpos()); return; case 0x18: case 0x1c: @@ -201,17 +199,17 @@ static WRITE32_HANDLER( mlc_irq_w ) if (scanline > 255) scanline = 255; /* Update scanlines up to present line */ - while (state->m_lastScanline[offset-6]<scanline) + while (m_lastScanline[offset-6]<scanline) { - state->m_mlc_raster_table[offset-6][state->m_lastScanline[offset-6]+1]=state->m_mlc_raster_table[offset-6][state->m_lastScanline[offset-6]]; - state->m_lastScanline[offset-6]++; + m_mlc_raster_table[offset-6][m_lastScanline[offset-6]+1]=m_mlc_raster_table[offset-6][m_lastScanline[offset-6]]; + m_lastScanline[offset-6]++; } - if (state->m_lastScanline[offset-6] > scanline) - state->m_lastScanline[offset-6]=0; + if (m_lastScanline[offset-6] > scanline) + m_lastScanline[offset-6]=0; /* Set current scanline value */ - state->m_mlc_raster_table[offset-6][scanline]=data&0xffff; + m_mlc_raster_table[offset-6][scanline]=data&0xffff; break; default: @@ -221,19 +219,17 @@ static WRITE32_HANDLER( mlc_irq_w ) // logerror("irqw %04x %04x (%d)\n", offset * 4, data&0xffff, scanline); } -static READ32_HANDLER(mlc_spriteram_r) +READ32_MEMBER(deco_mlc_state::mlc_spriteram_r) { - deco_mlc_state *state = space->machine().driver_data<deco_mlc_state>(); - return state->m_spriteram[offset]&0xffff; + return m_spriteram[offset]&0xffff; } -static READ32_HANDLER(mlc_vram_r) +READ32_MEMBER(deco_mlc_state::mlc_vram_r) { - deco_mlc_state *state = space->machine().driver_data<deco_mlc_state>(); - return state->m_mlc_vram[offset]&0xffff; + return m_mlc_vram[offset]&0xffff; } -static READ32_HANDLER(stadhr96_prot_146_r) +READ32_MEMBER(deco_mlc_state::stadhr96_prot_146_r) { /* cpu #0 (PC=00041BD0): unmapped program memory dword write to 00708004 = 000F0000 & FFFFFFFF @@ -244,7 +240,7 @@ static READ32_HANDLER(stadhr96_prot_146_r) */ offset<<=1; - logerror("%08x: Read prot %04x\n", cpu_get_pc(&space->device()), offset); + logerror("%08x: Read prot %04x\n", cpu_get_pc(&space.device()), offset); if (offset==0x5c4) return 0xaa55 << 16; @@ -264,20 +260,20 @@ static ADDRESS_MAP_START( decomlc_map, AS_PROGRAM, 32, deco_mlc_state ) AM_RANGE(0x0000000, 0x00fffff) AM_ROM AM_MIRROR(0xff000000) AM_RANGE(0x0100000, 0x011ffff) AM_RAM AM_BASE(m_mlc_ram) AM_MIRROR(0xff000000) AM_RANGE(0x0200000, 0x020000f) AM_READNOP AM_MIRROR(0xff000000)/* IRQ control? */ - AM_RANGE(0x0200070, 0x0200073) AM_READ_LEGACY(decomlc_vbl_r) AM_MIRROR(0xff000000) - AM_RANGE(0x0200074, 0x0200077) AM_READ_LEGACY(mlc_scanline_r) AM_MIRROR(0xff000000) - AM_RANGE(0x0200078, 0x020007f) AM_READ_LEGACY(test2_r) AM_MIRROR(0xff000000) - AM_RANGE(0x0200000, 0x020007f) AM_WRITE_LEGACY(mlc_irq_w) AM_BASE(m_irq_ram) AM_MIRROR(0xff000000) + AM_RANGE(0x0200070, 0x0200073) AM_READ(decomlc_vbl_r) AM_MIRROR(0xff000000) + AM_RANGE(0x0200074, 0x0200077) AM_READ(mlc_scanline_r) AM_MIRROR(0xff000000) + AM_RANGE(0x0200078, 0x020007f) AM_READ(test2_r) AM_MIRROR(0xff000000) + AM_RANGE(0x0200000, 0x020007f) AM_WRITE(mlc_irq_w) AM_BASE(m_irq_ram) AM_MIRROR(0xff000000) AM_RANGE(0x0200080, 0x02000ff) AM_RAM AM_BASE(m_mlc_clip_ram) AM_MIRROR(0xff000000) - AM_RANGE(0x0204000, 0x0206fff) AM_RAM_READ_LEGACY(mlc_spriteram_r) AM_BASE_SIZE(m_spriteram, m_spriteram_size) AM_MIRROR(0xff000000) - AM_RANGE(0x0280000, 0x029ffff) AM_RAM_READ_LEGACY(mlc_vram_r) AM_BASE(m_mlc_vram) AM_MIRROR(0xff000000) - AM_RANGE(0x0300000, 0x0307fff) AM_RAM_WRITE_LEGACY(avengrs_palette_w) AM_BASE_GENERIC(paletteram) AM_MIRROR(0xff000000) + AM_RANGE(0x0204000, 0x0206fff) AM_RAM_READ(mlc_spriteram_r) AM_BASE_SIZE(m_spriteram, m_spriteram_size) AM_MIRROR(0xff000000) + AM_RANGE(0x0280000, 0x029ffff) AM_RAM_READ(mlc_vram_r) AM_BASE(m_mlc_vram) AM_MIRROR(0xff000000) + AM_RANGE(0x0300000, 0x0307fff) AM_RAM_WRITE(avengrs_palette_w) AM_BASE_GENERIC(paletteram) AM_MIRROR(0xff000000) AM_RANGE(0x0400000, 0x0400003) AM_READ_PORT("INPUTS") AM_MIRROR(0xff000000) - AM_RANGE(0x0440000, 0x044001f) AM_READ_LEGACY(test3_r) AM_MIRROR(0xff000000) + AM_RANGE(0x0440000, 0x044001f) AM_READ(test3_r) AM_MIRROR(0xff000000) AM_RANGE(0x044001c, 0x044001f) AM_WRITENOP AM_MIRROR(0xff000000) AM_RANGE(0x0500000, 0x0500003) AM_DEVWRITE_LEGACY("eeprom", avengrs_eprom_w) AM_MIRROR(0xff000000) AM_RANGE(0x0600000, 0x0600007) AM_DEVREADWRITE8_LEGACY("ymz", ymz280b_r, ymz280b_w, 0xff000000) AM_MIRROR(0xff000000) - AM_RANGE(0x070f000, 0x070ffff) AM_READ_LEGACY(stadhr96_prot_146_r) AM_MIRROR(0xff000000) + AM_RANGE(0x070f000, 0x070ffff) AM_READ(stadhr96_prot_146_r) AM_MIRROR(0xff000000) // AM_RANGE(0x070f000, 0x070ffff) AM_READ_LEGACY(stadhr96_prot_146_w) AM_BASE_LEGACY(&deco32_prot_ram) ADDRESS_MAP_END @@ -722,13 +718,12 @@ static void descramble_sound( running_machine &machine ) auto_free (machine, buf1); } -static READ32_HANDLER( avengrgs_speedup_r ) +READ32_MEMBER(deco_mlc_state::avengrgs_speedup_r) { - deco_mlc_state *state = space->machine().driver_data<deco_mlc_state>(); - UINT32 a=state->m_mlc_ram[0x89a0/4]; - UINT32 p=cpu_get_pc(&space->device()); + UINT32 a=m_mlc_ram[0x89a0/4]; + UINT32 p=cpu_get_pc(&space.device()); - if ((p==0x3234 || p==0x32dc) && (a&1)) device_spin_until_interrupt(&space->device()); + if ((p==0x3234 || p==0x32dc) && (a&1)) device_spin_until_interrupt(&space.device()); return a; } @@ -744,7 +739,7 @@ static DRIVER_INIT( avengrgs ) sh2drc_add_pcflush(machine.device("maincpu"), 0x32dc); state->m_mainCpuIsArm = 0; - machine.device("maincpu")->memory().space(AS_PROGRAM)->install_legacy_read_handler(0x01089a0, 0x01089a3, FUNC(avengrgs_speedup_r) ); + machine.device("maincpu")->memory().space(AS_PROGRAM)->install_read_handler(0x01089a0, 0x01089a3, read32_delegate(FUNC(deco_mlc_state::avengrgs_speedup_r),state)); descramble_sound(machine); } |