summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Ryan Holtz <therealmogminer@gmail.com>2018-05-22 15:53:52 +0200
committer Ryan Holtz <therealmogminer@gmail.com>2018-05-22 15:53:52 +0200
commit9abe0fb272a92cbc3f7be084af984146a3ca84d8 (patch)
tree2c61f2daa080d5d2b39cbea795600a6cbd084f32
parentb03df3659db994f5fe28652279a9bbc6099675fb (diff)
cdi: Use device finders instead of machine().device, plus some driver_device cleanup. Could be improved further. (nw)
-rw-r--r--src/mame/drivers/cdi.cpp32
-rw-r--r--src/mame/includes/cdi.h15
-rw-r--r--src/mame/machine/cdi070.cpp33
-rw-r--r--src/mame/machine/cdi070.h6
-rw-r--r--src/mame/machine/cdicdic.cpp86
-rw-r--r--src/mame/machine/cdicdic.h11
-rw-r--r--src/mame/machine/cdislave.cpp49
-rw-r--r--src/mame/machine/cdislave.h12
-rw-r--r--src/mame/video/mcd212.cpp6
-rw-r--r--src/mame/video/mcd212.h2
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<dmadac_sound_device>("dac1");
- m_dmadac[1] = machine().device<dmadac_sound_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<dmadac_sound_device>("dac1");
- m_dmadac[1] = machine().device<dmadac_sound_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<uint16_t> m_planeb;
optional_ioport m_input1;
optional_ioport m_input2;
- required_ioport m_mousex;
- required_ioport m_mousey;
- required_ioport m_mousebtn;
optional_device<cdislave_device> m_slave_hle;
optional_device<cpu_device> m_servo;
optional_device<cpu_device> m_slave;
@@ -88,8 +86,9 @@ public:
optional_device<cdicdic_device> m_cdic;
required_device<cdda_device> m_cdda;
required_device<mcd212_device> m_mcd212;
+ optional_device<screen_device> m_lcd;
- dmadac_sound_device *m_dmadac[2];
+ required_device_array<dmadac_sound_device, 2> 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<cdi_state>();
-
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<cdi_state>();
-
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<cdi_state>();
-
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<cdi_state>();
-
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<cdi_state>();
-
+ /*
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<cdi68070_device &>(*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<cpu_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<cdi_state>();
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<cdi_state>();
-
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<cdi_state>();
-
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<cdi_state>();
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<cdi_state>();
-
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<cdi_state>();
-
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_image_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<cpu_device> m_maincpu;
+ required_device_array<dmadac_sound_device, 2> m_dmadac;
+ required_device<cdi68070_device> m_scc;
+ required_device<cdda_device> m_cdda;
+ optional_device<cdrom_image_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<cdi_state>();
-
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<cdi_state>();
-
- 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<cdi_state>();
+ 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<cdi_state>();
-
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<cpu_device> m_maincpu;
+ required_device_array<dmadac_sound_device, 2> 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<screen_device *>(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<screen_device> m_lcd;
+
// internal state
channel_t m_channel[2];
emu_timer *m_scan_timer;