diff options
Diffstat (limited to 'src/mame/machine/cdislave.cpp')
-rw-r--r-- | src/mame/machine/cdislave.cpp | 132 |
1 files changed, 57 insertions, 75 deletions
diff --git a/src/mame/machine/cdislave.cpp b/src/mame/machine/cdislave.cpp index dc86a98c78a..35ef860b52a 100644 --- a/src/mame/machine/cdislave.cpp +++ b/src/mame/machine/cdislave.cpp @@ -24,42 +24,26 @@ TODO: #include "emu.h" #include "machine/cdislave.h" +#define LOG_IRQS (1 << 0) +#define LOG_COMMANDS (1 << 1) +#define LOG_READS (1 << 2) +#define LOG_WRITES (1 << 3) +#define LOG_UNKNOWNS (1 << 4) -/*----------- debug defines -----------*/ - -#define VERBOSE_LEVEL (1) - -#define ENABLE_VERBOSE_LOG (0) - +#define VERBOSE (0) +#include "logmacro.h" // device type definition DEFINE_DEVICE_TYPE(CDI_SLAVE, cdislave_device, "cdislave", "CD-i Mono-I Slave") -#if ENABLE_VERBOSE_LOG -static inline void ATTR_PRINTF(3,4) verboselog(device_t& device, int n_level, const char *s_fmt, ...) -{ - if( VERBOSE_LEVEL >= n_level ) - { - va_list v; - char buf[ 32768 ]; - va_start( v, s_fmt ); - vsprintf( buf, s_fmt, v ); - va_end( v ); - device.logerror("%s: %s", device.machine().describe_context(), buf ); - } -} -#else -#define verboselog(x,y,z, ...) -#endif - //************************************************************************** // MEMBER FUNCTIONS //************************************************************************** TIMER_CALLBACK_MEMBER( cdislave_device::trigger_readback_int ) { - verboselog(*this, 0, "%s", "Asserting IRQ2\n" ); + LOGMASKED(LOG_IRQS, "Asserting IRQ2\n"); m_int_callback(ASSERT_LINE); m_interrupt_timer->adjust(attotime::never); } @@ -86,7 +70,7 @@ void cdislave_device::perform_mouse_update() uint16_t old_mouse_x = m_real_mouse_x; uint16_t old_mouse_y = m_real_mouse_y; - if(m_real_mouse_x == 0xffff) + if (m_real_mouse_x == 0xffff) { old_mouse_x = x & 0x3ff; old_mouse_y = y & 0x3ff; @@ -98,12 +82,12 @@ void cdislave_device::perform_mouse_update() m_fake_mouse_x += (m_real_mouse_x - old_mouse_x); m_fake_mouse_y += (m_real_mouse_y - old_mouse_y); - while(m_fake_mouse_x > 0x3ff) + while (m_fake_mouse_x > 0x3ff) { m_fake_mouse_x += 0x400; } - while(m_fake_mouse_y > 0x3ff) + while (m_fake_mouse_y > 0x3ff) { m_fake_mouse_y += 0x400; } @@ -111,7 +95,7 @@ void cdislave_device::perform_mouse_update() x = m_fake_mouse_x; y = m_fake_mouse_y; - if(m_polling_active) + if (m_polling_active) { prepare_readback(attotime::zero, 0, 4, ((x & 0x380) >> 7) | (buttons << 4), x & 0x7f, (y & 0x380) >> 7, y & 0x7f, 0xf7); } @@ -142,13 +126,13 @@ ioport_constructor cdislave_device::device_input_ports() const READ16_MEMBER( cdislave_device::slave_r ) { - if(m_channel[offset].m_out_count) + if (m_channel[offset].m_out_count) { uint8_t ret = m_channel[offset].m_out_buf[m_channel[offset].m_out_index]; - verboselog(*this, 0, "slave_r: Channel %d: %d, %02x\n", offset, m_channel[offset].m_out_index, ret ); - if(m_channel[offset].m_out_index == 0) + LOGMASKED(LOG_READS, "slave_r: Channel %d: %d, %02x\n", offset, m_channel[offset].m_out_index, ret); + if (m_channel[offset].m_out_index == 0) { - switch(m_channel[offset].m_out_cmd) + switch (m_channel[offset].m_out_cmd) { case 0xb0: case 0xb1: @@ -156,13 +140,14 @@ READ16_MEMBER( cdislave_device::slave_r ) case 0xf3: case 0xf4: case 0xf7: - verboselog(*this, 0, "%s", "slave_r: De-asserting IRQ2\n" ); - m_int_callback(CLEAR_LINE); break; + LOGMASKED(LOG_IRQS, "slave_r: De-asserting IRQ2\n"); + m_int_callback(CLEAR_LINE); + break; } } m_channel[offset].m_out_index++; m_channel[offset].m_out_count--; - if(!m_channel[offset].m_out_count) + if (!m_channel[offset].m_out_count) { m_channel[offset].m_out_index = 0; m_channel[offset].m_out_cmd = 0; @@ -170,7 +155,7 @@ READ16_MEMBER( cdislave_device::slave_r ) } return ret; } - verboselog(*this, 0, "slave_r: Channel %d: %d\n", offset, m_channel[offset].m_out_index ); + LOGMASKED(LOG_READS, "slave_r: Channel %d: %d (nothing to output)\n", offset, m_channel[offset].m_out_index); return 0xff; } @@ -186,7 +171,7 @@ void cdislave_device::set_mouse_position() // x = m_fake_mouse_x; // y = m_fake_mouse_y; - if(m_polling_active) + if (m_polling_active) { //prepare_readback(attotime::zero, 0, 4, (x & 0x380) >> 7, x & 0x7f, (y & 0x380) >> 7, y & 0x7f, 0xf7); } @@ -194,17 +179,17 @@ void cdislave_device::set_mouse_position() WRITE16_MEMBER( cdislave_device::slave_w ) { - switch(offset) + LOGMASKED(LOG_WRITES, "slave_w: Channel %d: %d = %02x\n", offset, m_in_index, data & 0x00ff); + switch (offset) { case 0: - if(m_in_index) + if (m_in_index) { - verboselog(*this, 0, "slave_w: Channel %d: %d = %02x\n", offset, m_in_index, data & 0x00ff ); m_in_buf[m_in_index] = data & 0x00ff; m_in_index++; - if(m_in_index == m_in_count) + if (m_in_index == m_in_count) { - switch(m_in_buf[0]) + switch (m_in_buf[0]) { case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: @@ -226,7 +211,7 @@ WRITE16_MEMBER( cdislave_device::slave_w ) { m_in_buf[m_in_index] = data & 0x00ff; m_in_index++; - switch(data & 0x00ff) + switch (data & 0x00ff) { case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7: case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf: @@ -236,25 +221,24 @@ WRITE16_MEMBER( cdislave_device::slave_w ) case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef: case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7: case 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: - verboselog(*this, 0, "slave_w: Channel %d: Update Mouse Position (0x%02x)\n", offset, data & 0x00ff ); + LOGMASKED(LOG_COMMANDS, "slave_w: Channel %d: Update Mouse Position (0x%02x)\n", offset, data & 0x00ff); m_in_count = 3; break; default: - verboselog(*this, 0, "slave_w: Channel %d: Unknown register: %02x\n", offset, data & 0x00ff ); + LOGMASKED(LOG_COMMANDS | LOG_UNKNOWNS, "slave_w: Channel %d: Unknown register: %02x\n", offset, data & 0x00ff); m_in_index = 0; break; } } break; case 1: - if(m_in_index) + if (m_in_index) { - verboselog(*this, 0, "slave_w: Channel %d: %d = %02x\n", offset, m_in_index, data & 0x00ff ); m_in_buf[m_in_index] = data & 0x00ff; m_in_index++; - if(m_in_index == m_in_count) + if (m_in_index == m_in_count) { - switch(m_in_buf[0]) + switch (m_in_buf[0]) { case 0xf0: // Set Front Panel LCD memcpy(m_lcd_state, m_in_buf + 1, 16); @@ -272,10 +256,10 @@ WRITE16_MEMBER( cdislave_device::slave_w ) } else { - switch(data & 0x00ff) + switch (data & 0x00ff) { default: - verboselog(*this, 0, "slave_w: Channel %d: Unknown register: %02x\n", offset, data & 0x00ff ); + LOGMASKED(LOG_COMMANDS | LOG_UNKNOWNS, "slave_w: Channel %d: Unknown register: %02x\n", offset, data & 0x00ff); memset(m_in_buf, 0, 17); m_in_index = 0; m_in_count = 0; @@ -284,14 +268,13 @@ WRITE16_MEMBER( cdislave_device::slave_w ) } break; case 2: - if(m_in_index) + if (m_in_index) { - verboselog(*this, 0, "slave_w: Channel %d: %d = %02x\n", offset, m_in_index, data & 0x00ff ); m_in_buf[m_in_index] = data & 0x00ff; m_in_index++; - if(m_in_index == m_in_count) + if (m_in_index == m_in_count) { - switch(m_in_buf[0]) + switch (m_in_buf[0]) { case 0xf0: // Set Front Panel LCD memset(m_in_buf + 1, 0, 16); @@ -309,10 +292,10 @@ WRITE16_MEMBER( cdislave_device::slave_w ) { m_in_buf[m_in_index] = data & 0x00ff; m_in_index++; - switch(data & 0x00ff) + switch (data & 0x00ff) { case 0x82: // Mute Audio - verboselog(*this, 0, "slave_w: Channel %d: Mute Audio (0x82)\n", offset ); + LOGMASKED(LOG_COMMANDS, "slave_w: Channel %d: Mute Audio (0x82)\n", offset); m_dmadac[0]->enable(0); m_dmadac[1]->enable(0); m_in_index = 0; @@ -320,18 +303,18 @@ WRITE16_MEMBER( cdislave_device::slave_w ) //cdic->audio_sample_timer->adjust(attotime::never); break; case 0x83: // Unmute Audio - verboselog(*this, 0, "slave_w: Channel %d: Unmute Audio (0x83)\n", offset ); + LOGMASKED(LOG_COMMANDS, "slave_w: Channel %d: Unmute Audio (0x83)\n", offset); m_dmadac[0]->enable(1); m_dmadac[1]->enable(1); m_in_index = 0; m_in_count = 0; break; case 0xf0: // Set Front Panel LCD - verboselog(*this, 0, "slave_w: Channel %d: Set Front Panel LCD (0xf0)\n", offset ); + LOGMASKED(LOG_COMMANDS, "slave_w: Channel %d: Set Front Panel LCD (0xf0)\n", offset); m_in_count = 17; break; default: - verboselog(*this, 0, "slave_w: Channel %d: Unknown register: %02x\n", offset, data & 0x00ff ); + LOGMASKED(LOG_COMMANDS | LOG_UNKNOWNS, "slave_w: Channel %d: Unknown register: %02x\n", offset, data & 0x00ff); memset(m_in_buf, 0, 17); m_in_index = 0; m_in_count = 0; @@ -340,14 +323,13 @@ WRITE16_MEMBER( cdislave_device::slave_w ) } break; case 3: - if(m_in_index) + if (m_in_index) { - verboselog(*this, 0, "slave_w: Channel %d: %d = %02x\n", offset, m_in_index, data & 0x00ff ); m_in_buf[m_in_index] = data & 0x00ff; m_in_index++; - if(m_in_index == m_in_count) + if (m_in_index == m_in_count) { - switch(m_in_buf[0]) + switch (m_in_buf[0]) { case 0xb0: // Request Disc Status memset(m_in_buf, 0, 17); @@ -373,48 +355,48 @@ WRITE16_MEMBER( cdislave_device::slave_w ) { m_in_buf[m_in_index] = data & 0x00ff; m_in_index++; - switch(data & 0x00ff) + switch (data & 0x00ff) { case 0xb0: // Request Disc Status - verboselog(*this, 0, "slave_w: Channel %d: Request Disc Status (0xb0)\n", offset ); + LOGMASKED(LOG_COMMANDS | LOG_WRITES, "slave_w: Channel %d: Request Disc Status (0xb0)\n", offset); m_in_count = 4; break; case 0xb1: // Request Disc Base - verboselog(*this, 0, "slave_w: Channel %d: Request Disc Base (0xb1)\n", offset ); + LOGMASKED(LOG_COMMANDS | LOG_WRITES, "slave_w: Channel %d: Request Disc Base (0xb1)\n", offset); m_in_count = 4; break; case 0xf0: // Request SLAVE Revision - verboselog(*this, 0, "slave_w: Channel %d: Request SLAVE Revision (0xf0)\n", offset ); + LOGMASKED(LOG_COMMANDS | LOG_WRITES, "slave_w: Channel %d: Request SLAVE Revision (0xf0)\n", offset); prepare_readback(attotime::from_hz(10000), 2, 2, 0xf0, 0x32, 0x31, 0, 0xf0); m_in_index = 0; break; case 0xf3: // Request Pointer Type - verboselog(*this, 0, "slave_w: Channel %d: Request Pointer Type (0xf3)\n", offset ); + LOGMASKED(LOG_COMMANDS | LOG_WRITES, "slave_w: Channel %d: Request Pointer Type (0xf3)\n", offset); m_in_index = 0; prepare_readback(attotime::from_hz(10000), 2, 2, 0xf3, 1, 0, 0, 0xf3); break; case 0xf4: // Request Test Plug Status - verboselog(*this, 0, "slave_w: Channel %d: Request Test Plug Status (0xf4)\n", offset ); + LOGMASKED(LOG_COMMANDS | LOG_WRITES, "slave_w: Channel %d: Request Test Plug Status (0xf4)\n", offset); m_in_index = 0; prepare_readback(attotime::from_hz(10000), 2, 2, 0xf4, 0, 0, 0, 0xf4); break; case 0xf6: // Request NTSC/PAL Status - verboselog(*this, 0, "slave_w: Channel %d: Request NTSC/PAL Status (0xf6)\n", offset ); + LOGMASKED(LOG_COMMANDS | LOG_WRITES, "slave_w: Channel %d: Request NTSC/PAL Status (0xf6)\n", offset); prepare_readback(attotime::never, 2, 2, 0xf6, 2, 0, 0, 0xf6); m_in_index = 0; break; case 0xf7: // Enable Input Polling - verboselog(*this, 0, "slave_w: Channel %d: Activate Input Polling (0xf7)\n", offset ); + LOGMASKED(LOG_COMMANDS | LOG_WRITES, "slave_w: Channel %d: Activate Input Polling (0xf7)\n", offset); m_polling_active = 1; m_in_index = 0; break; case 0xfa: // Enable X-Bus Interrupts - verboselog(*this, 0, "slave_w: Channel %d: X-Bus Interrupt Enable (0xfa)\n", offset ); + LOGMASKED(LOG_COMMANDS | LOG_WRITES, "slave_w: Channel %d: X-Bus Interrupt Enable (0xfa)\n", offset); m_xbus_interrupt_enable = 1; m_in_index = 0; break; default: - verboselog(*this, 0, "slave_w: Channel %d: Unknown register: %02x\n", offset, data & 0x00ff ); + LOGMASKED(LOG_COMMANDS | LOG_UNKNOWNS, "slave_w: Channel %d: Unknown register: %02x\n", offset, data & 0x00ff); memset(m_in_buf, 0, 17); m_in_index = 0; m_in_count = 0; @@ -515,7 +497,7 @@ void cdislave_device::device_start() void cdislave_device::device_reset() { - for(auto & elem : m_channel) + for (auto & elem : m_channel) { elem.m_out_buf[0] = 0; elem.m_out_buf[1] = 0; |