diff options
Diffstat (limited to 'src/mess/machine/oric.c')
-rw-r--r-- | src/mess/machine/oric.c | 174 |
1 files changed, 79 insertions, 95 deletions
diff --git a/src/mess/machine/oric.c b/src/mess/machine/oric.c index f694af217c9..69a4b6f2ad0 100644 --- a/src/mess/machine/oric.c +++ b/src/mess/machine/oric.c @@ -134,36 +134,33 @@ WRITE8_MEMBER(oric_state::oric_psg_porta_write) /* bit 0 = BC1 state */ /* this port is also used to read printer data */ -static READ8_DEVICE_HANDLER ( oric_via_in_a_func ) +READ8_MEMBER(oric_state::oric_via_in_a_func) { - oric_state *state = space.machine().driver_data<oric_state>(); - /*logerror("port a read\r\n"); */ /* access psg? */ - if (state->m_psg_control!=0) + if (m_psg_control!=0) { /* if psg is in read register state return reg data */ - if (state->m_psg_control==0x01) - return ay8910_r(space.machine().device("ay8912"), space, 0); + if (m_psg_control==0x01) + return ay8910_r(machine().device("ay8912"), space, 0); /* return high-impedance */ return 0x0ff; } /* correct?? */ - return state->m_via_port_a_data; + return m_via_port_a_data; } -static READ8_DEVICE_HANDLER ( oric_via_in_b_func ) +READ8_MEMBER(oric_state::oric_via_in_b_func) { - oric_state *state = space.machine().driver_data<oric_state>(); int data; - oric_keyboard_sense_refresh(space.machine()); + oric_keyboard_sense_refresh(machine()); - data = state->m_key_sense_bit; - data |= state->m_keyboard_line & 0x07; + data = m_key_sense_bit; + data |= m_keyboard_line & 0x07; return data; } @@ -209,19 +206,18 @@ static void oric_psg_connection_refresh(address_space &space) } } -static WRITE8_DEVICE_HANDLER ( oric_via_out_a_func ) +WRITE8_MEMBER(oric_state::oric_via_out_a_func) { - oric_state *state = space.machine().driver_data<oric_state>(); - state->m_via_port_a_data = data; + m_via_port_a_data = data; oric_psg_connection_refresh(space); - if (state->m_psg_control==0) + if (m_psg_control==0) { /* if psg not selected, write to printer */ - centronics_device *centronics = space.machine().device<centronics_device>("centronics"); - centronics->write(space.machine().driver_data()->generic_space(), 0, data); + centronics_device *centronics = machine().device<centronics_device>("centronics"); + centronics->write(machine().driver_data()->generic_space(), 0, data); } } @@ -281,61 +277,56 @@ TIMER_CALLBACK_MEMBER(oric_state::oric_refresh_tape) via_0->write_cb1(data); } -static WRITE8_DEVICE_HANDLER ( oric_via_out_b_func ) +WRITE8_MEMBER(oric_state::oric_via_out_b_func) { - oric_state *state = space.machine().driver_data<oric_state>(); - centronics_device *centronics = space.machine().device<centronics_device>("centronics"); + centronics_device *centronics = machine().device<centronics_device>("centronics"); /* KEYBOARD */ - state->m_keyboard_line = data & 0x07; + m_keyboard_line = data & 0x07; /* CASSETTE */ /* cassette motor control */ - cassette_device_image(space.machine())->change_state( + cassette_device_image(machine())->change_state( (data & 0x40) ? CASSETTE_MOTOR_ENABLED : CASSETTE_MOTOR_DISABLED, CASSETTE_MOTOR_DISABLED); /* cassette data out */ - cassette_device_image(space.machine())->output((data & (1<<7)) ? -1.0 : +1.0); + cassette_device_image(machine())->output((data & (1<<7)) ? -1.0 : +1.0); /* centronics STROBE is connected to PB4 */ centronics->strobe_w(BIT(data, 4)); oric_psg_connection_refresh(space); - state->m_previous_portb_data = data; + m_previous_portb_data = data; } -static READ8_DEVICE_HANDLER ( oric_via_in_ca2_func ) +READ8_MEMBER(oric_state::oric_via_in_ca2_func) { - oric_state *state = space.machine().driver_data<oric_state>(); - return state->m_psg_control & 1; + return m_psg_control & 1; } -static READ8_DEVICE_HANDLER ( oric_via_in_cb2_func ) +READ8_MEMBER(oric_state::oric_via_in_cb2_func) { - oric_state *state = space.machine().driver_data<oric_state>(); - return (state->m_psg_control>>1) & 1; + return (m_psg_control>>1) & 1; } -static WRITE8_DEVICE_HANDLER ( oric_via_out_ca2_func ) +WRITE8_MEMBER(oric_state::oric_via_out_ca2_func) { - oric_state *state = space.machine().driver_data<oric_state>(); - state->m_psg_control &=~1; + m_psg_control &=~1; if (data) - state->m_psg_control |=1; + m_psg_control |=1; oric_psg_connection_refresh(space); } -static WRITE8_DEVICE_HANDLER ( oric_via_out_cb2_func ) +WRITE8_MEMBER(oric_state::oric_via_out_cb2_func) { - oric_state *state = space.machine().driver_data<oric_state>(); - state->m_psg_control &=~2; + m_psg_control &=~2; if (data) - state->m_psg_control |=2; + m_psg_control |=2; oric_psg_connection_refresh(space); } @@ -394,18 +385,18 @@ CB2 const via6522_interface oric_6522_interface= { - DEVCB_HANDLER(oric_via_in_a_func), - DEVCB_HANDLER(oric_via_in_b_func), + DEVCB_DRIVER_MEMBER(oric_state,oric_via_in_a_func), + DEVCB_DRIVER_MEMBER(oric_state,oric_via_in_b_func), DEVCB_NULL, /* printer acknowledge - handled by callback*/ DEVCB_NULL, /* tape input - handled by timer */ - DEVCB_HANDLER(oric_via_in_ca2_func), - DEVCB_HANDLER(oric_via_in_cb2_func), - DEVCB_HANDLER(oric_via_out_a_func), - DEVCB_HANDLER(oric_via_out_b_func), + DEVCB_DRIVER_MEMBER(oric_state,oric_via_in_ca2_func), + DEVCB_DRIVER_MEMBER(oric_state,oric_via_in_cb2_func), + DEVCB_DRIVER_MEMBER(oric_state,oric_via_out_a_func), + DEVCB_DRIVER_MEMBER(oric_state,oric_via_out_b_func), DEVCB_NULL, DEVCB_NULL, - DEVCB_HANDLER(oric_via_out_ca2_func), - DEVCB_HANDLER(oric_via_out_cb2_func), + DEVCB_DRIVER_MEMBER(oric_state,oric_via_out_ca2_func), + DEVCB_DRIVER_MEMBER(oric_state,oric_via_out_cb2_func), DEVCB_LINE(oric_via_irq_func), }; @@ -658,15 +649,14 @@ static void oric_jasmin_set_mem_0x0c000(running_machine &machine) } /* DRQ is connected to interrupt */ -static WRITE_LINE_DEVICE_HANDLER( oric_jasmin_wd179x_drq_w ) +WRITE_LINE_MEMBER(oric_state::oric_jasmin_wd179x_drq_w) { - oric_state *drvstate = device->machine().driver_data<oric_state>(); if (state) - drvstate->m_irqs |= (1<<1); + m_irqs |= (1<<1); else - drvstate->m_irqs &=~(1<<1); + m_irqs &=~(1<<1); - oric_refresh_ints(device->machine()); + oric_refresh_ints(machine()); } READ8_MEMBER(oric_state::oric_jasmin_r) @@ -795,26 +785,24 @@ static void oric_microdisc_refresh_wd179x_ints(running_machine &machine) oric_refresh_ints(machine); } -static WRITE_LINE_DEVICE_HANDLER( oric_microdisc_wd179x_intrq_w ) +WRITE_LINE_MEMBER(oric_state::oric_microdisc_wd179x_intrq_w) { - oric_state *drvstate = device->machine().driver_data<oric_state>(); - drvstate->m_wd179x_int_state = state; + m_wd179x_int_state = state; if (state) - drvstate->m_port_314_r &= ~(1<<7); + m_port_314_r &= ~(1<<7); else - drvstate->m_port_314_r |=(1<<7); + m_port_314_r |=(1<<7); - oric_microdisc_refresh_wd179x_ints(device->machine()); + oric_microdisc_refresh_wd179x_ints(machine()); } -static WRITE_LINE_DEVICE_HANDLER( oric_microdisc_wd179x_drq_w ) +WRITE_LINE_MEMBER(oric_state::oric_microdisc_wd179x_drq_w) { - oric_state *drvstate = device->machine().driver_data<oric_state>(); if (state) - drvstate->m_port_318_r &=~(1<<7); + m_port_318_r &=~(1<<7); else - drvstate->m_port_318_r |= (1<<7); + m_port_318_r |= (1<<7); } static void oric_microdisc_set_mem_0x0c000(running_machine &machine) @@ -999,25 +987,25 @@ static void oric_install_microdisc_interface(running_machine &machine) /*********************************************************/ -static WRITE_LINE_DEVICE_HANDLER( oric_wd179x_intrq_w ) +WRITE_LINE_MEMBER(oric_state::oric_wd179x_intrq_w) { - if ((device->machine().root_device().ioport("FLOPPY")->read() & 0x07) == ORIC_FLOPPY_INTERFACE_MICRODISC) - oric_microdisc_wd179x_intrq_w(device, state); + if ((machine().root_device().ioport("FLOPPY")->read() & 0x07) == ORIC_FLOPPY_INTERFACE_MICRODISC) + oric_microdisc_wd179x_intrq_w(state); } -static WRITE_LINE_DEVICE_HANDLER( oric_wd179x_drq_w ) +WRITE_LINE_MEMBER(oric_state::oric_wd179x_drq_w) { - switch (device->machine().root_device().ioport("FLOPPY")->read() & 0x07) + switch (machine().root_device().ioport("FLOPPY")->read() & 0x07) { default: case ORIC_FLOPPY_INTERFACE_NONE: case ORIC_FLOPPY_INTERFACE_APPLE2: return; case ORIC_FLOPPY_INTERFACE_MICRODISC: - oric_microdisc_wd179x_drq_w(device, state); + oric_microdisc_wd179x_drq_w(state); return; case ORIC_FLOPPY_INTERFACE_JASMIN: - oric_jasmin_wd179x_drq_w(device, state); + oric_jasmin_wd179x_drq_w(state); return; } } @@ -1025,8 +1013,8 @@ static WRITE_LINE_DEVICE_HANDLER( oric_wd179x_drq_w ) const wd17xx_interface oric_wd17xx_interface = { DEVCB_NULL, - DEVCB_LINE(oric_wd179x_intrq_w), - DEVCB_LINE(oric_wd179x_drq_w), + DEVCB_DRIVER_LINE_MEMBER(oric_state,oric_wd179x_intrq_w), + DEVCB_DRIVER_LINE_MEMBER(oric_state,oric_wd179x_drq_w), {FLOPPY_0, FLOPPY_1, FLOPPY_2, FLOPPY_3} }; @@ -1278,55 +1266,51 @@ static void telestrat_refresh_mem(running_machine &machine) } } -static READ8_DEVICE_HANDLER(telestrat_via2_in_a_func) +READ8_MEMBER(oric_state::telestrat_via2_in_a_func) { - oric_state *state = space.machine().driver_data<oric_state>(); - //logerror("via 2 - port a %02x\n",state->m_telestrat_via2_port_a_data); - return state->m_telestrat_via2_port_a_data; + //logerror("via 2 - port a %02x\n",m_telestrat_via2_port_a_data); + return m_telestrat_via2_port_a_data; } -static WRITE8_DEVICE_HANDLER(telestrat_via2_out_a_func) +WRITE8_MEMBER(oric_state::telestrat_via2_out_a_func) { - oric_state *state = space.machine().driver_data<oric_state>(); //logerror("via 2 - port a w: %02x\n",data); - state->m_telestrat_via2_port_a_data = data; + m_telestrat_via2_port_a_data = data; - if (((data^state->m_telestrat_bank_selection) & 0x07)!=0) + if (((data^m_telestrat_bank_selection) & 0x07)!=0) { - state->m_telestrat_bank_selection = data & 0x07; + m_telestrat_bank_selection = data & 0x07; - telestrat_refresh_mem(space.machine()); + telestrat_refresh_mem(machine()); } } -static READ8_DEVICE_HANDLER(telestrat_via2_in_b_func) +READ8_MEMBER(oric_state::telestrat_via2_in_b_func) { - oric_state *state = space.machine().driver_data<oric_state>(); unsigned char data = 0x01f; /* left joystick selected? */ - if (state->m_telestrat_via2_port_b_data & (1<<6)) + if (m_telestrat_via2_port_b_data & (1<<6)) { - data &= state->ioport("JOY0")->read(); + data &= ioport("JOY0")->read(); } /* right joystick selected? */ - if (state->m_telestrat_via2_port_b_data & (1<<7)) + if (m_telestrat_via2_port_b_data & (1<<7)) { - data &= space.machine().root_device().ioport("JOY1")->read(); + data &= machine().root_device().ioport("JOY1")->read(); } - data |= state->m_telestrat_via2_port_b_data & ((1<<7) | (1<<6) | (1<<5)); + data |= m_telestrat_via2_port_b_data & ((1<<7) | (1<<6) | (1<<5)); return data; } -static WRITE8_DEVICE_HANDLER(telestrat_via2_out_b_func) +WRITE8_MEMBER(oric_state::telestrat_via2_out_b_func) { - oric_state *state = space.machine().driver_data<oric_state>(); - state->m_telestrat_via2_port_b_data = data; + m_telestrat_via2_port_b_data = data; } @@ -1347,14 +1331,14 @@ static void telestrat_via2_irq_func(device_t *device, int state) const via6522_interface telestrat_via2_interface= { - DEVCB_HANDLER(telestrat_via2_in_a_func), - DEVCB_HANDLER(telestrat_via2_in_b_func), + DEVCB_DRIVER_MEMBER(oric_state,telestrat_via2_in_a_func), + DEVCB_DRIVER_MEMBER(oric_state,telestrat_via2_in_b_func), DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, - DEVCB_HANDLER(telestrat_via2_out_a_func), - DEVCB_HANDLER(telestrat_via2_out_b_func), + DEVCB_DRIVER_MEMBER(oric_state,telestrat_via2_out_a_func), + DEVCB_DRIVER_MEMBER(oric_state,telestrat_via2_out_b_func), DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, |