From 9abe0fb272a92cbc3f7be084af984146a3ca84d8 Mon Sep 17 00:00:00 2001 From: Ryan Holtz Date: Tue, 22 May 2018 15:53:52 +0200 Subject: cdi: Use device finders instead of machine().device, plus some driver_device cleanup. Could be improved further. (nw) --- src/mame/drivers/cdi.cpp | 32 ++-------------- src/mame/includes/cdi.h | 15 ++++---- src/mame/machine/cdi070.cpp | 33 +++++++---------- src/mame/machine/cdi070.h | 6 +++ src/mame/machine/cdicdic.cpp | 86 +++++++++++++++++++++---------------------- src/mame/machine/cdicdic.h | 11 +++++- src/mame/machine/cdislave.cpp | 49 ++++++++++++++++-------- src/mame/machine/cdislave.h | 12 +++++- src/mame/video/mcd212.cpp | 6 +-- src/mame/video/mcd212.h | 2 + 10 files changed, 131 insertions(+), 121 deletions(-) diff --git a/src/mame/drivers/cdi.cpp b/src/mame/drivers/cdi.cpp index feb1091c8ec..013aa910bfc 100644 --- a/src/mame/drivers/cdi.cpp +++ b/src/mame/drivers/cdi.cpp @@ -194,17 +194,6 @@ INPUT_CHANGED_MEMBER(cdi_state::mcu_input) } static INPUT_PORTS_START( cdi ) - PORT_START("MOUSEX") - PORT_BIT(0x3ff, 0x000, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_MINMAX(0x000, 0x3ff) PORT_KEYDELTA(2) PORT_CHANGED_MEMBER("slave_hle", cdislave_device, mouse_update, 0) - - PORT_START("MOUSEY") - PORT_BIT(0x3ff, 0x000, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_MINMAX(0x000, 0x3ff) PORT_KEYDELTA(2) PORT_CHANGED_MEMBER("slave_hle", cdislave_device, mouse_update, 0) - - PORT_START("MOUSEBTN") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_CODE(MOUSECODE_BUTTON1) PORT_NAME("Mouse Button 1") PORT_CHANGED_MEMBER("slave_hle", cdislave_device, mouse_update, 0) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_CODE(MOUSECODE_BUTTON2) PORT_NAME("Mouse Button 2") PORT_CHANGED_MEMBER("slave_hle", cdislave_device, mouse_update, 0) - PORT_BIT(0xfc, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_START("DEBUG") PORT_CONFNAME( 0x01, 0x00, "Plane A Disable") PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) @@ -235,17 +224,6 @@ static INPUT_PORTS_START( cdi ) INPUT_PORTS_END static INPUT_PORTS_START( cdimono2 ) - PORT_START("MOUSEX") - PORT_BIT(0x3ff, 0x000, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_MINMAX(0x000, 0x3ff) PORT_KEYDELTA(2) //PORT_CHANGED_MEMBER("slave_hle", cdislave_device, mouse_update, 0) - - PORT_START("MOUSEY") - PORT_BIT(0x3ff, 0x000, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_MINMAX(0x000, 0x3ff) PORT_KEYDELTA(2) //PORT_CHANGED_MEMBER("slave_hle", cdislave_device, mouse_update, 0) - - PORT_START("MOUSEBTN") - PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_CODE(MOUSECODE_BUTTON1) PORT_NAME("Mouse Button 1") //PORT_CHANGED_MEMBER("slave_hle", cdislave_device, mouse_update, 0) - PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_CODE(MOUSECODE_BUTTON2) PORT_NAME("Mouse Button 2") //PORT_CHANGED_MEMBER("slave_hle", cdislave_device, mouse_update, 0) - PORT_BIT(0xfc, IP_ACTIVE_HIGH, IPT_UNUSED) - PORT_START("DEBUG") PORT_CONFNAME( 0x01, 0x00, "Plane A Disable") PORT_CONFSETTING( 0x00, DEF_STR( Off ) ) @@ -311,9 +289,6 @@ MACHINE_RESET_MEMBER( cdi_state, cdimono1 ) memset(m_slave_io_regs, 0, 0x20); m_maincpu->reset(); - - m_dmadac[0] = machine().device("dac1"); - m_dmadac[1] = machine().device("dac2"); } MACHINE_RESET_MEMBER( cdi_state, cdimono2 ) @@ -323,9 +298,6 @@ MACHINE_RESET_MEMBER( cdi_state, cdimono2 ) memcpy(dst, src, 0x8); m_maincpu->reset(); - - m_dmadac[0] = machine().device("dac1"); - m_dmadac[1] = machine().device("dac2"); } MACHINE_RESET_MEMBER( cdi_state, quizard1 ) @@ -801,6 +773,8 @@ MACHINE_CONFIG_START(cdi_state::cdimono1_base) MCFG_DEFAULT_LAYOUT(layout_cdi) MCFG_CDI68070_ADD("scc68070") + MCFG_CDI68070_CPU_TAG("maincpu") + MCFG_CDICDIC_ADD("cdic") MCFG_CDISLAVE_ADD("slave_hle") @@ -850,6 +824,7 @@ MACHINE_CONFIG_START(cdi_state::cdimono2) MCFG_MACHINE_RESET_OVERRIDE( cdi_state, cdimono2 ) MCFG_CDI68070_ADD("scc68070") + MCFG_CDI68070_CPU_TAG("maincpu") MCFG_DEVICE_ADD("servo", M68HC05EG, 2000000) /* Unknown clock speed, docs say 2MHz internal clock */ MCFG_DEVICE_PROGRAM_MAP(cdimono2_servo_mem) MCFG_DEVICE_ADD("slave", M68HC05EG, 2000000) /* Unknown clock speed, docs say 2MHz internal clock */ @@ -905,6 +880,7 @@ MACHINE_CONFIG_START(cdi_state::cdi910) MCFG_MACHINE_RESET_OVERRIDE( cdi_state, cdimono2 ) MCFG_CDI68070_ADD("scc68070") + MCFG_CDI68070_CPU_TAG("maincpu") MCFG_DEVICE_ADD("servo", M68HC05EG, 2000000) /* Unknown clock speed, docs say 2MHz internal clock */ MCFG_DEVICE_PROGRAM_MAP(cdimono2_servo_mem) MCFG_DEVICE_ADD("slave", M68HC05EG, 2000000) /* Unknown clock speed, docs say 2MHz internal clock */ diff --git a/src/mame/includes/cdi.h b/src/mame/includes/cdi.h index e39f6e83ba9..93aeb542e29 100644 --- a/src/mame/includes/cdi.h +++ b/src/mame/includes/cdi.h @@ -10,6 +10,7 @@ #include "sound/dmadac.h" #include "video/mcd212.h" #include "cpu/mcs51/mcs51.h" +#include "screen.h" /*----------- driver state -----------*/ @@ -26,16 +27,16 @@ public: , m_planeb(*this, "planeb") , m_input1(*this, "INPUT1") , m_input2(*this, "INPUT2") - , m_mousex(*this, "MOUSEX") - , m_mousey(*this, "MOUSEY") - , m_mousebtn(*this, "MOUSEBTN") , m_slave_hle(*this, "slave_hle") , m_servo(*this, "servo") , m_slave(*this, "slave") , m_scc(*this, "scc68070") , m_cdic(*this, "cdic") , m_cdda(*this, "cdda") - , m_mcd212(*this, "mcd212") { } + , m_mcd212(*this, "mcd212") + , m_lcd(*this, "lcd") + , m_dmadac(*this, "dac%u", 1U) + { } enum m68hc05eg_io_reg_t { @@ -78,9 +79,6 @@ public: required_shared_ptr m_planeb; optional_ioport m_input1; optional_ioport m_input2; - required_ioport m_mousex; - required_ioport m_mousey; - required_ioport m_mousebtn; optional_device m_slave_hle; optional_device m_servo; optional_device m_slave; @@ -88,8 +86,9 @@ public: optional_device m_cdic; required_device m_cdda; required_device m_mcd212; + optional_device m_lcd; - dmadac_sound_device *m_dmadac[2]; + required_device_array m_dmadac; INTERRUPT_GEN_MEMBER( mcu_frame ); diff --git a/src/mame/machine/cdi070.cpp b/src/mame/machine/cdi070.cpp index c7baa63b3b0..472075dd3c9 100644 --- a/src/mame/machine/cdi070.cpp +++ b/src/mame/machine/cdi070.cpp @@ -57,6 +57,7 @@ static inline void ATTR_PRINTF(3,4) verboselog(device_t& device, int n_level, co cdi68070_device::cdi68070_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, MACHINE_CDI68070, tag, owner, clock) + , m_maincpu(*this, finder_base::DUMMY_TAG) { } @@ -247,8 +248,6 @@ void cdi68070_device::set_quizard_mcu_value(uint16_t value) TIMER_CALLBACK_MEMBER( cdi68070_device::timer0_callback ) { - cdi_state *state = machine().driver_data(); - m_timers.timer0 = m_timers.reload_register; m_timers.timer_status_register |= TSR_OV0; if(m_picr1 & 7) @@ -257,8 +256,8 @@ TIMER_CALLBACK_MEMBER( cdi68070_device::timer0_callback ) m_timers.timer_status_register |= TSR_OV0; if(interrupt) { - state->m_maincpu->set_input_line_vector(M68K_IRQ_1 + (interrupt - 1), 56 + interrupt); - state->m_maincpu->set_input_line(M68K_IRQ_1 + (interrupt - 1), ASSERT_LINE); + m_maincpu->set_input_line_vector(M68K_IRQ_1 + (interrupt - 1), 56 + interrupt); + m_maincpu->set_input_line(M68K_IRQ_1 + (interrupt - 1), ASSERT_LINE); } } @@ -320,8 +319,6 @@ void cdi68070_device::uart_tx(uint8_t data) TIMER_CALLBACK_MEMBER( cdi68070_device::rx_callback ) { - cdi_state *state = machine().driver_data(); - if((m_uart.command_register & 3) == 1) { if(m_uart.receive_pointer >= 0) @@ -342,8 +339,8 @@ TIMER_CALLBACK_MEMBER( cdi68070_device::rx_callback ) uint8_t interrupt = (m_picr2 >> 4) & 7; if(interrupt) { - state->m_maincpu->set_input_line_vector(M68K_IRQ_1 + (interrupt - 1), 56 + interrupt); - state->m_maincpu->set_input_line(M68K_IRQ_1 + (interrupt - 1), ASSERT_LINE); + m_maincpu->set_input_line_vector(M68K_IRQ_1 + (interrupt - 1), 56 + interrupt); + m_maincpu->set_input_line(M68K_IRQ_1 + (interrupt - 1), ASSERT_LINE); } m_uart.status_register |= USR_RXRDY; @@ -532,15 +529,13 @@ void cdi68070_device::quizard_handle_byte_tx() TIMER_CALLBACK_MEMBER( cdi68070_device::tx_callback ) { - cdi_state *state = machine().driver_data(); - if(((m_uart.command_register >> 2) & 3) == 1) { uint8_t interrupt = m_picr2 & 7; if(interrupt) { - state->m_maincpu->set_input_line_vector(M68K_IRQ_1 + (interrupt - 1), 56 + interrupt); - state->m_maincpu->set_input_line(M68K_IRQ_1 + (interrupt - 1), ASSERT_LINE); + m_maincpu->set_input_line_vector(M68K_IRQ_1 + (interrupt - 1), 56 + interrupt); + m_maincpu->set_input_line(M68K_IRQ_1 + (interrupt - 1), ASSERT_LINE); } if(m_uart.transmit_pointer > -1) @@ -573,8 +568,6 @@ TIMER_CALLBACK_MEMBER( cdi68070_device::tx_callback ) READ16_MEMBER( cdi68070_device::periphs_r ) { - cdi_state *state = machine().driver_data(); - switch(offset) { // Interrupts: 80001001 @@ -637,12 +630,12 @@ READ16_MEMBER( cdi68070_device::periphs_r ) if((m_picr2 >> 4) & 7) { - state->m_maincpu->set_input_line(M68K_IRQ_1 + (((m_picr2 >> 4) & 7) - 1), ASSERT_LINE); + m_maincpu->set_input_line(M68K_IRQ_1 + (((m_picr2 >> 4) & 7) - 1), ASSERT_LINE); } if(m_picr2 & 7) { - state->m_maincpu->set_input_line(M68K_IRQ_1 + ((m_picr2 & 7) - 1), ASSERT_LINE); + m_maincpu->set_input_line(M68K_IRQ_1 + ((m_picr2 & 7) - 1), ASSERT_LINE); } return m_uart.status_register; @@ -688,7 +681,7 @@ READ16_MEMBER( cdi68070_device::periphs_r ) } if((m_picr2 >> 4) & 7) { - state->m_maincpu->set_input_line(M68K_IRQ_1 + (((m_picr2 >> 4) & 7) - 1), CLEAR_LINE); + m_maincpu->set_input_line(M68K_IRQ_1 + (((m_picr2 >> 4) & 7) - 1), CLEAR_LINE); } m_uart.receive_holding_register = m_uart.receive_buffer[0]; @@ -863,8 +856,7 @@ READ16_MEMBER( cdi68070_device::periphs_r ) WRITE16_MEMBER( cdi68070_device::periphs_w ) { - cdi_state *state = machine().driver_data(); - + /* switch(offset) { // Interrupts: 80001001 @@ -995,7 +987,7 @@ WRITE16_MEMBER( cdi68070_device::periphs_w ) if(!m_timers.timer_status_register) { uint8_t interrupt = m_picr1 & 7; - state->m_maincpu->set_input_line(M68K_IRQ_1 + (interrupt - 1), CLEAR_LINE); + m_maincpu->set_input_line(M68K_IRQ_1 + (interrupt - 1), CLEAR_LINE); } } break; @@ -1170,6 +1162,7 @@ WRITE16_MEMBER( cdi68070_device::periphs_w ) verboselog(*this, 0, "cdi68070_periphs_w: Unknown address: %04x = %04x & %04x\n", offset * 2, data, mem_mask); break; } + */ } #if ENABLE_UART_PRINTING diff --git a/src/mame/machine/cdi070.h b/src/mame/machine/cdi070.h index 0f1df7f7bad..74c962ba4aa 100644 --- a/src/mame/machine/cdi070.h +++ b/src/mame/machine/cdi070.h @@ -130,6 +130,9 @@ TODO: MCFG_DEVICE_ADD(_tag, MACHINE_CDI68070, 0) #define MCFG_CDI68070_REPLACE(_tag) \ MCFG_DEVICE_REPLACE(_tag, MACHINE_CDI68070, 0) +#define MCFG_CDI68070_CPU_TAG(_tag) \ + downcast(*device).set_cpu_tag(_tag); + //************************************************************************** // TYPE DEFINITIONS @@ -143,6 +146,8 @@ public: // construction/destruction cdi68070_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + void set_cpu_tag(const char *tag) { m_maincpu.set_tag(tag); } + // external callbacks void uart_rx(uint8_t data); void uart_tx(uint8_t data); @@ -270,6 +275,7 @@ protected: virtual void device_reset() override; private: + required_device m_maincpu; void uart_rx_check(); void uart_tx_check(); diff --git a/src/mame/machine/cdicdic.cpp b/src/mame/machine/cdicdic.cpp index 7fb907504c4..c3d2756f5e5 100644 --- a/src/mame/machine/cdicdic.cpp +++ b/src/mame/machine/cdicdic.cpp @@ -28,7 +28,6 @@ TODO: #include "cpu/m68000/m68000.h" #include "cdrom.h" #include "sound/cdda.h" -#include "imagedev/chd_cd.h" // device type definition @@ -418,8 +417,6 @@ void cdicdic_device::decode_xa_stereo8(int32_t *cdic_xa_last, const uint8_t *xa, void cdicdic_device::decode_audio_sector(const uint8_t *xa, int32_t triggered) { // Get XA format from sector header - - cdi_state *state = machine().driver_data(); const uint8_t *hdr = xa + 4; int32_t channels; int32_t bits = 4; @@ -481,8 +478,11 @@ void cdicdic_device::decode_audio_sector(const uint8_t *xa, int32_t triggered) fatalerror("play_xa: unhandled xa mode %08x\n",hdr[2]); } - dmadac_set_frequency(&state->m_dmadac[0], 2, m_audio_sample_freq); - dmadac_enable(&state->m_dmadac[0], 2, 1); + m_dmadac[0]->set_frequency(m_audio_sample_freq); + m_dmadac[0]->enable(1); + + m_dmadac[1]->set_frequency(m_audio_sample_freq); + m_dmadac[1]->enable(1); switch(channels) { @@ -529,7 +529,11 @@ void cdicdic_device::decode_audio_sector(const uint8_t *xa, int32_t triggered) break; } - dmadac_transfer(&state->m_dmadac[0], 2, 1, 2, 18*28*2*m_audio_sample_size, samples); + m_dmadac[0]->flush(); + m_dmadac[1]->flush(); + + m_dmadac[0]->transfer(0, 1, 2, 18*28*2*m_audio_sample_size, samples); + m_dmadac[1]->transfer(1, 1, 2, 18*28*2*m_audio_sample_size, samples); } // After an appropriate delay for decoding to take place... @@ -540,8 +544,6 @@ TIMER_CALLBACK_MEMBER( cdicdic_device::audio_sample_trigger ) void cdicdic_device::sample_trigger() { - cdi_state *state = machine().driver_data(); - if(m_decode_addr == 0xffff) { verboselog(*this, 0, "%s", "Decode stop requested, stopping playback\n" ); @@ -557,8 +559,8 @@ void cdicdic_device::sample_trigger() // Set the CDIC interrupt line verboselog(*this, 0, "%s", "Setting CDIC interrupt line for soundmap decode\n" ); - state->m_maincpu->set_input_line_vector(M68K_IRQ_4, 128); - state->m_maincpu->set_input_line(M68K_IRQ_4, ASSERT_LINE); + m_maincpu->set_input_line_vector(M68K_IRQ_4, 128); + m_maincpu->set_input_line(M68K_IRQ_4, ASSERT_LINE); } else { @@ -601,8 +603,6 @@ TIMER_CALLBACK_MEMBER( cdicdic_device::trigger_readback_int ) void cdicdic_device::process_delayed_command() { - cdi_state *state = machine().driver_data(); - switch(m_command) { case 0x23: // Reset Mode 1 @@ -712,8 +712,8 @@ void cdicdic_device::process_delayed_command() //printf( "Setting CDIC interrupt line\n" ); verboselog(*this, 0, "%s", "Setting CDIC interrupt line for audio sector\n" ); - state->m_maincpu->set_input_line_vector(M68K_IRQ_4, 128); - state->m_maincpu->set_input_line(M68K_IRQ_4, ASSERT_LINE); + m_maincpu->set_input_line_vector(M68K_IRQ_4, 128); + m_maincpu->set_input_line(M68K_IRQ_4, ASSERT_LINE); } else if((buffer[CDIC_SECTOR_SUBMODE2] & (CDIC_SUBMODE_DATA | CDIC_SUBMODE_AUDIO | CDIC_SUBMODE_VIDEO)) == 0x00) { @@ -731,8 +731,8 @@ void cdicdic_device::process_delayed_command() { //printf( "Setting CDIC interrupt line\n" ); verboselog(*this, 0, "%s", "Setting CDIC interrupt line for message sector\n" ); - state->m_maincpu->set_input_line_vector(M68K_IRQ_4, 128); - state->m_maincpu->set_input_line(M68K_IRQ_4, ASSERT_LINE); + m_maincpu->set_input_line_vector(M68K_IRQ_4, 128); + m_maincpu->set_input_line(M68K_IRQ_4, ASSERT_LINE); } else { @@ -751,8 +751,8 @@ void cdicdic_device::process_delayed_command() //printf( "Setting CDIC interrupt line\n" ); verboselog(*this, 0, "%s", "Setting CDIC interrupt line for data sector\n" ); - state->m_maincpu->set_input_line_vector(M68K_IRQ_4, 128); - state->m_maincpu->set_input_line(M68K_IRQ_4, ASSERT_LINE); + m_maincpu->set_input_line_vector(M68K_IRQ_4, 128); + m_maincpu->set_input_line(M68K_IRQ_4, ASSERT_LINE); } if((buffer[CDIC_SECTOR_SUBMODE2] & CDIC_SUBMODE_EOF) == 0 && m_command != 0x23) @@ -816,7 +816,7 @@ void cdicdic_device::process_delayed_command() // next_lba = next_nybbles[0] + next_nybbles[1]*10 + ((next_nybbles[2] + next_nybbles[3]*10)*75) + ((next_nybbles[4] + next_nybbles[5]*10)*75*60); verboselog(*this, 0, "Playing CDDA sector from MSF location %06x\n", m_time | 2 ); - state->m_cdda->start_audio(lba, rounded_next_msf); + m_cdda->start_audio(lba, rounded_next_msf); } m_ram[(m_data_buffer & 5) * (0xa00/2) + 0x924/2] = 0x0001; // CTRL @@ -846,8 +846,8 @@ void cdicdic_device::process_delayed_command() } verboselog(*this, 0, "%s", "Setting CDIC interrupt line for CDDA sector\n" ); - state->m_maincpu->set_input_line_vector(M68K_IRQ_4, 128); - state->m_maincpu->set_input_line(M68K_IRQ_4, ASSERT_LINE); + m_maincpu->set_input_line_vector(M68K_IRQ_4, 128); + m_maincpu->set_input_line(M68K_IRQ_4, ASSERT_LINE); break; } case 0x2c: // Seek @@ -897,8 +897,8 @@ void cdicdic_device::process_delayed_command() m_time = next_msf << 8; verboselog(*this, 0, "%s", "Setting CDIC interrupt line for Seek sector\n" ); - state->m_maincpu->set_input_line_vector(M68K_IRQ_4, 128); - state->m_maincpu->set_input_line(M68K_IRQ_4, ASSERT_LINE); + m_maincpu->set_input_line_vector(M68K_IRQ_4, 128); + m_maincpu->set_input_line(M68K_IRQ_4, ASSERT_LINE); break; } } @@ -906,7 +906,6 @@ void cdicdic_device::process_delayed_command() READ16_MEMBER( cdicdic_device::regs_r ) { - cdi_state *state = machine().driver_data(); uint32_t addr = offset + 0x3c00/2; switch(addr) @@ -945,7 +944,7 @@ READ16_MEMBER( cdicdic_device::regs_r ) m_audio_buffer &= 0x7fff; if(!((m_audio_buffer | m_x_buffer) & 0x8000)) { - state->m_maincpu->set_input_line(M68K_IRQ_4, CLEAR_LINE); + m_maincpu->set_input_line(M68K_IRQ_4, CLEAR_LINE); verboselog(*this, 0, "%s", "Clearing CDIC interrupt line\n" ); ////printf("Clearing CDIC interrupt line\n" ); } @@ -959,7 +958,7 @@ READ16_MEMBER( cdicdic_device::regs_r ) m_x_buffer &= 0x7fff; if(!((m_audio_buffer | m_x_buffer) & 0x8000)) { - state->m_maincpu->set_input_line(M68K_IRQ_4, CLEAR_LINE); + m_maincpu->set_input_line(M68K_IRQ_4, CLEAR_LINE); verboselog(*this, 0, "%s", "Clearing CDIC interrupt line\n" ); ////printf("Clearing CDIC interrupt line\n" ); } @@ -990,8 +989,6 @@ READ16_MEMBER( cdicdic_device::regs_r ) WRITE16_MEMBER( cdicdic_device::regs_w ) { - cdi_state *state = machine().driver_data(); - uint32_t addr = offset + 0x3c00/2; switch(addr) @@ -1047,18 +1044,18 @@ WRITE16_MEMBER( cdicdic_device::regs_w ) case 0x3ff8/2: { - uint32_t start = state->m_scc->dma().channel[0].memory_address_counter; - uint32_t count = state->m_scc->dma().channel[0].transfer_counter; + uint32_t start = m_scc->dma().channel[0].memory_address_counter; + uint32_t count = m_scc->dma().channel[0].transfer_counter; uint32_t index = 0; uint32_t device_index = (data & 0x3fff) >> 1; - address_space &memory_space = state->m_maincpu->space(AS_PROGRAM); - verboselog(*this, 0, "memory address counter: %08x\n", state->m_scc->dma().channel[0].memory_address_counter); + address_space &memory_space = m_maincpu->space(AS_PROGRAM); + verboselog(*this, 0, "memory address counter: %08x\n", m_scc->dma().channel[0].memory_address_counter); verboselog(*this, 0, "cdic_w: DMA Control Register = %04x & %04x\n", data, mem_mask); verboselog(*this, 0, "Doing copy, transferring %04x bytes\n", count * 2 ); ////printf("Doing copy, transferring %04x bytes\n", count * 2 ); for(index = start / 2; index < (start / 2 + count); index++) { - if(state->m_scc->dma().channel[0].operation_control & OCR_D) + if(m_scc->dma().channel[0].operation_control & OCR_D) { memory_space.write_word(index * 2, m_ram[device_index++]); } @@ -1067,7 +1064,7 @@ WRITE16_MEMBER( cdicdic_device::regs_w ) m_ram[device_index++] = memory_space.read_word(index * 2); } } - state->m_scc->dma().channel[0].memory_address_counter += state->m_scc->dma().channel[0].transfer_counter * 2; + m_scc->dma().channel[0].memory_address_counter += m_scc->dma().channel[0].transfer_counter * 2; break; } @@ -1108,12 +1105,13 @@ WRITE16_MEMBER( cdicdic_device::regs_w ) case 0x2e: // Abort { m_interrupt_timer->adjust(attotime::never); - dmadac_enable(&state->m_dmadac[0], 2, 0); + m_dmadac[0]->enable(0); + m_dmadac[1]->enable(0); //m_data_buffer &= 0xbfff; break; } case 0x2b: // Stop CDDA - state->m_cdda->stop_audio(); + m_cdda->stop_audio(); m_interrupt_timer->adjust(attotime::never); break; case 0x23: // Reset Mode 1 @@ -1160,6 +1158,11 @@ WRITE16_MEMBER( cdicdic_device::regs_w ) cdicdic_device::cdicdic_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, MACHINE_CDICDIC, tag, owner, clock) + , m_maincpu(*this, ":maincpu") + , m_dmadac(*this, ":dac%u", 1U) + , m_scc(*this, ":scc68070") + , m_cdda(*this, ":cdda") + , m_cdrom_dev(*this, ":cdrom") { } @@ -1199,8 +1202,6 @@ void cdicdic_device::device_start() void cdicdic_device::device_reset() { - cdi_state *state = machine().driver_data(); - m_command = 0; m_time = 0; m_file = 0; @@ -1219,18 +1220,17 @@ void cdicdic_device::device_reset() m_decode_addr = 0; m_decode_delay = 0; - cdrom_image_device *cdrom_dev = machine().device("cdrom"); - if( cdrom_dev ) + if (m_cdrom_dev) { // MESS case (has CDROM device) - m_cd = cdrom_dev->get_cdrom_file(); - state->m_cdda->set_cdrom(m_cd); + m_cd = m_cdrom_dev->get_cdrom_file(); + m_cdda->set_cdrom(m_cd); } else { // MAME case m_cd = cdrom_open(machine().rom_load().get_disk_handle(":cdrom")); - state->m_cdda->set_cdrom(m_cd); + m_cdda->set_cdrom(m_cd); } } diff --git a/src/mame/machine/cdicdic.h b/src/mame/machine/cdicdic.h index e275ed5739b..1c527a8a78e 100644 --- a/src/mame/machine/cdicdic.h +++ b/src/mame/machine/cdicdic.h @@ -26,8 +26,11 @@ TODO: #pragma once -#include "cdrom.h" +#include "imagedev/chd_cd.h" +#include "machine/cdi070.h" #include "sound/cdda.h" +#include "sound/dmadac.h" +#include "cdrom.h" //************************************************************************** @@ -72,6 +75,12 @@ protected: TIMER_CALLBACK_MEMBER( trigger_readback_int ); private: + required_device m_maincpu; + required_device_array m_dmadac; + required_device m_scc; + required_device m_cdda; + optional_device m_cdrom_dev; + // internal state uint16_t m_command; // CDIC Command Register (0x303c00) uint32_t m_time; // CDIC Time Register (0x303c02) diff --git a/src/mame/machine/cdislave.cpp b/src/mame/machine/cdislave.cpp index 5c74f8b6fe8..028f7a50261 100644 --- a/src/mame/machine/cdislave.cpp +++ b/src/mame/machine/cdislave.cpp @@ -56,11 +56,9 @@ static inline void ATTR_PRINTF(3,4) verboselog(device_t& device, int n_level, co TIMER_CALLBACK_MEMBER( cdislave_device::trigger_readback_int ) { - cdi_state *state = machine().driver_data(); - verboselog(*this, 0, "%s", "Asserting IRQ2\n" ); - state->m_maincpu->set_input_line_vector(M68K_IRQ_2, 26); - state->m_maincpu->set_input_line(M68K_IRQ_2, ASSERT_LINE); + m_maincpu->set_input_line_vector(M68K_IRQ_2, 26); + m_maincpu->set_input_line(M68K_IRQ_2, ASSERT_LINE); m_interrupt_timer->adjust(attotime::never); } @@ -79,11 +77,9 @@ void cdislave_device::prepare_readback(const attotime &delay, uint8_t channel, u void cdislave_device::perform_mouse_update() { - cdi_state *state = machine().driver_data(); - - uint16_t x = state->m_mousex->read(); - uint16_t y = state->m_mousey->read(); - uint8_t buttons = state->m_mousebtn->read(); + uint16_t x = m_mousex->read(); + uint16_t y = m_mousey->read(); + uint8_t buttons = m_mousebtn->read(); uint16_t old_mouse_x = m_real_mouse_x; uint16_t old_mouse_y = m_real_mouse_y; @@ -124,10 +120,26 @@ INPUT_CHANGED_MEMBER( cdislave_device::mouse_update ) perform_mouse_update(); } -READ16_MEMBER( cdislave_device::slave_r ) +static INPUT_PORTS_START(cdislave_mouse) + PORT_START("MOUSEX") + PORT_BIT(0x3ff, 0x000, IPT_MOUSE_X) PORT_SENSITIVITY(100) PORT_MINMAX(0x000, 0x3ff) PORT_KEYDELTA(2) PORT_CHANGED_MEMBER(DEVICE_SELF, cdislave_device, mouse_update, 0) + + PORT_START("MOUSEY") + PORT_BIT(0x3ff, 0x000, IPT_MOUSE_Y) PORT_SENSITIVITY(100) PORT_MINMAX(0x000, 0x3ff) PORT_KEYDELTA(2) PORT_CHANGED_MEMBER(DEVICE_SELF, cdislave_device, mouse_update, 0) + + PORT_START("MOUSEBTN") + PORT_BIT(0x01, IP_ACTIVE_HIGH, IPT_BUTTON1) PORT_CODE(MOUSECODE_BUTTON1) PORT_NAME("Mouse Button 1") PORT_CHANGED_MEMBER(DEVICE_SELF, cdislave_device, mouse_update, 0) + PORT_BIT(0x02, IP_ACTIVE_HIGH, IPT_BUTTON2) PORT_CODE(MOUSECODE_BUTTON2) PORT_NAME("Mouse Button 2") PORT_CHANGED_MEMBER(DEVICE_SELF, cdislave_device, mouse_update, 0) + PORT_BIT(0xfc, IP_ACTIVE_HIGH, IPT_UNUSED) +INPUT_PORTS_END + +ioport_constructor cdislave_device::device_input_ports() const { - cdi_state *state = machine().driver_data(); + return INPUT_PORTS_NAME(cdislave_mouse); +} +READ16_MEMBER( cdislave_device::slave_r ) +{ if(m_channel[offset].m_out_count) { uint8_t ret = m_channel[offset].m_out_buf[m_channel[offset].m_out_index]; @@ -143,7 +155,7 @@ READ16_MEMBER( cdislave_device::slave_r ) case 0xf4: case 0xf7: verboselog(*this, 0, "%s", "slave_r: De-asserting IRQ2\n" ); - state->m_maincpu->set_input_line(M68K_IRQ_2, CLEAR_LINE); + m_maincpu->set_input_line(M68K_IRQ_2, CLEAR_LINE); break; } } @@ -181,8 +193,6 @@ void cdislave_device::set_mouse_position() WRITE16_MEMBER( cdislave_device::slave_w ) { - cdi_state *state = machine().driver_data(); - switch(offset) { case 0: @@ -302,14 +312,16 @@ WRITE16_MEMBER( cdislave_device::slave_w ) { case 0x82: // Mute Audio verboselog(*this, 0, "slave_w: Channel %d: Mute Audio (0x82)\n", offset ); - dmadac_enable(&state->m_dmadac[0], 2, 0); + m_dmadac[0]->enable(0); + m_dmadac[1]->enable(0); m_in_index = 0; m_in_count = 0; //cdic->audio_sample_timer->adjust(attotime::never); break; case 0x83: // Unmute Audio verboselog(*this, 0, "slave_w: Channel %d: Unmute Audio (0x83)\n", offset ); - dmadac_enable(&state->m_dmadac[0], 2, 1); + m_dmadac[0]->enable(1); + m_dmadac[1]->enable(1); m_in_index = 0; m_in_count = 0; break; @@ -422,6 +434,11 @@ WRITE16_MEMBER( cdislave_device::slave_w ) cdislave_device::cdislave_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, CDISLAVE, tag, owner, clock) + , m_maincpu(*this, ":maincpu") + , m_dmadac(*this, ":dac%u", 1U) + , m_mousex(*this, "MOUSEX") + , m_mousey(*this, "MOUSEY") + , m_mousebtn(*this, "MOUSEBTN") { } diff --git a/src/mame/machine/cdislave.h b/src/mame/machine/cdislave.h index e14a8b71023..46f4a97715f 100644 --- a/src/mame/machine/cdislave.h +++ b/src/mame/machine/cdislave.h @@ -26,6 +26,7 @@ TODO: #pragma once +#include "sound/dmadac.h" //************************************************************************** // INTERFACE CONFIGURATION MACROS @@ -35,6 +36,7 @@ TODO: MCFG_DEVICE_ADD(_tag, CDISLAVE, 0) #define MCFG_CDISLAVE_REPLACE(_tag) \ MCFG_DEVICE_REPLACE(_tag, CDISLAVE, 0) + //************************************************************************** // TYPE DEFINITIONS //************************************************************************** @@ -59,13 +61,19 @@ protected: // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual void device_post_load() override { } - virtual void device_clock_changed() override { } + virtual ioport_constructor device_input_ports() const override; // internal callbacks TIMER_CALLBACK_MEMBER( trigger_readback_int ); private: + required_device m_maincpu; + required_device_array m_dmadac; + + required_ioport m_mousex; + required_ioport m_mousey; + required_ioport m_mousebtn; + // internal state class channel_state { diff --git a/src/mame/video/mcd212.cpp b/src/mame/video/mcd212.cpp index cd48eac0c3c..b7ac26e1bac 100644 --- a/src/mame/video/mcd212.cpp +++ b/src/mame/video/mcd212.cpp @@ -1520,6 +1520,7 @@ void mcd212_device::device_reset() mcd212_device::mcd212_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, MACHINE_MCD212, tag, owner, clock) , device_video_interface(mconfig, *this) + , m_lcd(*this, ":lcd") { } @@ -1632,9 +1633,8 @@ void mcd212_device::ab_init() void cdi_state::video_start() { m_mcd212->ab_init(); - - screen_device *screen = downcast(machine().device("lcd")); - screen->register_screen_bitmap(m_lcdbitmap); + if (m_lcd) + m_lcd->register_screen_bitmap(m_lcdbitmap); } uint32_t cdi_state::screen_update_cdimono1(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) diff --git a/src/mame/video/mcd212.h b/src/mame/video/mcd212.h index 05088b8f0bb..6a560eeaadb 100644 --- a/src/mame/video/mcd212.h +++ b/src/mame/video/mcd212.h @@ -210,6 +210,8 @@ protected: virtual void device_reset() override; private: + required_device m_lcd; + // internal state channel_t m_channel[2]; emu_timer *m_scan_timer; -- cgit v1.2.3