summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/machine/cdislave.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/machine/cdislave.cpp')
-rw-r--r--src/mame/machine/cdislave.cpp132
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;