diff options
author | 2015-08-13 09:59:55 +0200 | |
---|---|---|
committer | 2015-08-13 10:01:35 +0200 | |
commit | 70fe93c86627c98cee6cc50add4b4a33f19a2f03 (patch) | |
tree | 0c407dfe25c1232bc7fbe5203a33ccb10d86b578 | |
parent | b31469df44fbe54f5d29c46be92269f1323e85b2 (diff) |
amiga.c: reduce tagmap lookups, reduce read_safe usage, minor cleanups (nw)
-rw-r--r-- | src/mame/includes/amiga.h | 5 | ||||
-rw-r--r-- | src/mame/machine/amiga.c | 62 | ||||
-rw-r--r-- | src/mame/video/amiga.c | 10 |
3 files changed, 40 insertions, 37 deletions
diff --git a/src/mame/includes/amiga.h b/src/mame/includes/amiga.h index 2858f47ce27..efefd00c58d 100644 --- a/src/mame/includes/amiga.h +++ b/src/mame/includes/amiga.h @@ -352,6 +352,7 @@ public: m_p1_mouse_y(*this, "p1_mouse_y"), m_p2_mouse_x(*this, "p2_mouse_x"), m_p2_mouse_y(*this, "p2_mouse_y"), + m_hvpos(*this, "HVPOS"), m_chip_ram_mask(0), m_cia_0_irq(0), m_cia_1_irq(0), @@ -580,6 +581,7 @@ protected: optional_ioport m_p1_mouse_y; optional_ioport m_p2_mouse_x; optional_ioport m_p2_mouse_y; + optional_ioport m_hvpos; memory_array m_chip_ram; UINT32 m_chip_ram_mask; @@ -660,6 +662,8 @@ private: void serial_adjust(); void serial_shift(); void rx_write(amiga_state *state, int level); + + UINT32 amiga_gethvpos(); }; @@ -675,7 +679,6 @@ extern const UINT16 amiga_expand_byte[256]; void amiga_copper_setpc(running_machine &machine, UINT32 pc); int amiga_copper_execute_next(running_machine &machine, int xpos); -UINT32 amiga_gethvpos(screen_device &screen); void amiga_set_genlock_color(running_machine &machine, UINT16 color); void amiga_sprite_dma_reset(running_machine &machine, int which); void amiga_sprite_enable_comparitor(running_machine &machine, int which, int enable); diff --git a/src/mame/machine/amiga.c b/src/mame/machine/amiga.c index 6679a2925c4..b69d4a96746 100644 --- a/src/mame/machine/amiga.c +++ b/src/mame/machine/amiga.c @@ -381,23 +381,23 @@ TIMER_CALLBACK_MEMBER( amiga_state::amiga_irq_proc ) UINT16 amiga_state::joy0dat_r() { if (m_input_device == NULL) - return m_joy0dat_port->read_safe(0xffff); + return m_joy0dat_port ? m_joy0dat_port->read() : 0xffff; - if (m_input_device->read_safe(0xff) & 0x10) - return m_joy0dat_port->read_safe(0xffff); + if (m_input_device->read() & 0x10) + return m_joy0dat_port ? m_joy0dat_port->read() : 0xffff; else - return (m_p1_mouse_y->read_safe(0xff) << 8) | m_p1_mouse_x->read_safe(0xff); + return ((m_p1_mouse_y ? m_p1_mouse_y->read() : 0xff) << 8) | (m_p1_mouse_x? m_p1_mouse_x->read() : 0xff); } UINT16 amiga_state::joy1dat_r() { if (m_input_device == NULL) - return m_joy1dat_port->read_safe(0xffff); + return m_joy1dat_port ? m_joy1dat_port->read() : 0xffff; - if (m_input_device->read_safe(0xff) & 0x20) - return m_joy1dat_port->read_safe(0xffff); + if (m_input_device->read() & 0x20) + return m_joy1dat_port ? m_joy1dat_port->read() : 0xffff; else - return (m_p2_mouse_y->read_safe(0xff) << 8) | m_p2_mouse_x->read_safe(0xff); + return ((m_p2_mouse_y ? m_p2_mouse_y->read() : 0xff) << 8) | (m_p2_mouse_x ? m_p2_mouse_x->read() : 0xff); } CUSTOM_INPUT_MEMBER( amiga_state::amiga_joystick_convert ) @@ -1172,12 +1172,12 @@ READ16_MEMBER( amiga_state::custom_chip_r ) case REG_VPOSR: CUSTOM_REG(REG_VPOSR) &= 0xff00; - CUSTOM_REG(REG_VPOSR) |= amiga_gethvpos(*m_screen) >> 16; + CUSTOM_REG(REG_VPOSR) |= amiga_gethvpos() >> 16; return CUSTOM_REG(REG_VPOSR); case REG_VHPOSR: - return amiga_gethvpos(*m_screen) & 0xffff; + return amiga_gethvpos() & 0xffff; case REG_SERDATR: if (LOG_SERIAL) @@ -1186,23 +1186,23 @@ READ16_MEMBER( amiga_state::custom_chip_r ) return CUSTOM_REG(REG_SERDATR); case REG_JOY0DAT: - if (state->m_joy0dat_port) + if (m_joy0dat_port) return joy0dat_r(); case REG_JOY1DAT: - if (state->m_joy1dat_port) + if (m_joy1dat_port) return joy1dat_r(); case REG_POTGOR: - if (state->m_potgo_port) - return state->m_potgo_port->read(); + if (m_potgo_port) + return m_potgo_port->read(); else return 0x5500; case REG_POT0DAT: - if (state->m_pot0dat_port) + if (m_pot0dat_port) { - return state->m_pot0dat_port->read(); + return m_pot0dat_port->read(); } else { @@ -1215,9 +1215,9 @@ READ16_MEMBER( amiga_state::custom_chip_r ) } case REG_POT1DAT: - if (state->m_pot1dat_port) + if (m_pot1dat_port) { - return state->m_pot1dat_port->read(); + return m_pot1dat_port->read(); } else { @@ -1230,7 +1230,7 @@ READ16_MEMBER( amiga_state::custom_chip_r ) } case REG_DSKBYTR: - return state->m_fdc->dskbytr_r(); + return m_fdc->dskbytr_r(); case REG_INTENAR: return CUSTOM_REG(REG_INTENA); @@ -1255,13 +1255,13 @@ READ16_MEMBER( amiga_state::custom_chip_r ) return CUSTOM_REG(REG_DENISEID); case REG_DSKPTH: - return state->m_fdc->dskpth_r(); + return m_fdc->dskpth_r(); case REG_DSKPTL: - return state->m_fdc->dskptl_r(); + return m_fdc->dskptl_r(); case REG_ADKCONR: - return state->m_fdc->adkcon_r(); + return m_fdc->adkcon_r(); case REG_DSKDATR: popmessage("DSKDAT R, contact MESSdev"); @@ -1294,19 +1294,19 @@ WRITE16_MEMBER( amiga_state::custom_chip_w ) break; case REG_DSKSYNC: - state->m_fdc->dsksync_w(data); + m_fdc->dsksync_w(data); break; case REG_DSKPTH: - state->m_fdc->dskpth_w(data); + m_fdc->dskpth_w(data); break; case REG_DSKPTL: - state->m_fdc->dskptl_w(data); + m_fdc->dskptl_w(data); break; case REG_DSKLEN: - state->m_fdc->dsklen_w(data); + m_fdc->dsklen_w(data); break; case REG_POTGO: @@ -1392,7 +1392,7 @@ WRITE16_MEMBER( amiga_state::custom_chip_w ) case REG_SPR0PTH: case REG_SPR1PTH: case REG_SPR2PTH: case REG_SPR3PTH: case REG_SPR4PTH: case REG_SPR5PTH: case REG_SPR6PTH: case REG_SPR7PTH: - data &= ( state->m_chip_ram_mask >> 16 ); + data &= ( m_chip_ram_mask >> 16 ); break; case REG_SPR0PTL: case REG_SPR1PTL: case REG_SPR2PTL: case REG_SPR3PTL: @@ -1414,7 +1414,7 @@ WRITE16_MEMBER( amiga_state::custom_chip_w ) case REG_COP1LCH: case REG_COP2LCH: - data &= ( state->m_chip_ram_mask >> 16 ); + data &= ( m_chip_ram_mask >> 16 ); break; case REG_COPJMP1: @@ -1445,7 +1445,7 @@ WRITE16_MEMBER( amiga_state::custom_chip_w ) /* bits BBUSY (14) and BZERO (13) are read-only */ data &= 0x9fff; data = (data & 0x8000) ? (CUSTOM_REG(offset) | (data & 0x7fff)) : (CUSTOM_REG(offset) & ~(data & 0x7fff)); - state->m_fdc->dmacon_set(data); + m_fdc->dmacon_set(data); /* if 'blitter-nasty' has been turned on and we have a blit pending, reschedule it */ if ( ( data & 0x400 ) && ( CUSTOM_REG(REG_DMACON) & 0x4000 ) ) @@ -1495,7 +1495,7 @@ WRITE16_MEMBER( amiga_state::custom_chip_w ) case REG_ADKCON: m_sound->update(); data = (data & 0x8000) ? (CUSTOM_REG(offset) | (data & 0x7fff)) : (CUSTOM_REG(offset) & ~(data & 0x7fff)); - state->m_fdc->adkcon_set(data); + m_fdc->adkcon_set(data); break; case REG_AUD0LCL: case REG_AUD0LCH: case REG_AUD0LEN: case REG_AUD0PER: case REG_AUD0VOL: @@ -1511,7 +1511,7 @@ WRITE16_MEMBER( amiga_state::custom_chip_w ) case REG_BPL1PTH: case REG_BPL2PTH: case REG_BPL3PTH: case REG_BPL4PTH: case REG_BPL5PTH: case REG_BPL6PTH: - data &= ( state->m_chip_ram_mask >> 16 ); + data &= ( m_chip_ram_mask >> 16 ); break; case REG_BPLCON0: diff --git a/src/mame/video/amiga.c b/src/mame/video/amiga.c index f9891c67cda..95bbe40c078 100644 --- a/src/mame/video/amiga.c +++ b/src/mame/video/amiga.c @@ -146,15 +146,15 @@ VIDEO_START_MEMBER( amiga_state, amiga ) * *************************************/ -UINT32 amiga_gethvpos(screen_device &screen) +UINT32 amiga_state::amiga_gethvpos() { - amiga_state *state = screen.machine().driver_data<amiga_state>(); - UINT32 hvpos = (state->m_last_scanline << 8) | (screen.hpos() >> 2); - UINT32 latchedpos = state->ioport("HVPOS")->read_safe(0); + amiga_state *state = this; + UINT32 hvpos = (m_last_scanline << 8) | (m_screen->hpos() >> 2); + UINT32 latchedpos = m_hvpos ? m_hvpos->read() : 0; /* if there's no latched position, or if we are in the active display area */ /* but before the latching point, return the live HV position */ - if ((CUSTOM_REG(REG_BPLCON0) & 0x0008) == 0 || latchedpos == 0 || (state->m_last_scanline >= 20 && hvpos < latchedpos)) + if ((CUSTOM_REG(REG_BPLCON0) & 0x0008) == 0 || latchedpos == 0 || (m_last_scanline >= 20 && hvpos < latchedpos)) return hvpos; /* otherwise, return the latched position */ |