Skip to content

Commit d75d11e

Browse files
Simplify Mouse Logic
The processing has too many nested clauses with duplicate code. This attempts to simplify and make it more readable.
1 parent 22abbce commit d75d11e

File tree

2 files changed

+35
-47
lines changed

2 files changed

+35
-47
lines changed

src/mame/philips/cdislavehle.cpp

Lines changed: 34 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -141,59 +141,46 @@ void cdislave_hle_device::set_mouse_position()
141141
m_device_mouse_y = ((m_in_buf[1] & 0x0f) << 6) | (m_in_buf[0] & 0x3f);
142142
}
143143

144+
void cdislave_hle_device::slave_w_mouse(offs_t offset, uint16_t data)
145+
{
146+
m_in_buf[m_in_index] = data & 0x00ff;
147+
bool set_mouse = m_in_buf[0] >= 0xc0;
148+
if (set_mouse)
149+
{
150+
if (m_in_index == 0)
151+
{
152+
LOGMASKED(LOG_COMMANDS, "slave_w: Channel %d: Update Mouse Position (0x%02x)\n", offset, data & 0x00ff);
153+
m_in_count = 3;
154+
}
155+
else
156+
{
157+
if (m_in_index == m_in_count - 1)
158+
{
159+
// Update Mouse Position
160+
set_mouse_position();
161+
memset(m_in_buf, 0, 17);
162+
m_in_index = 0;
163+
m_in_count = 0;
164+
return;
165+
}
166+
}
167+
}
168+
else
169+
{
170+
LOGMASKED(LOG_COMMANDS | LOG_UNKNOWNS, "slave_w: Channel %d: Unknown register: %02x\n", offset, data & 0x00ff);
171+
if (m_in_index == 0){
172+
return;
173+
}
174+
}
175+
m_in_index++;
176+
}
144177
void cdislave_hle_device::slave_w(offs_t offset, uint16_t data)
145178
{
146179
LOGMASKED(LOG_WRITES, "slave_w: Channel %d: %d = %02x\n", offset, m_in_index, data & 0x00ff);
147180
switch (offset)
148181
{
149182
case 0:
150-
if (m_in_index)
151-
{
152-
m_in_buf[m_in_index] = data & 0x00ff;
153-
m_in_index++;
154-
if (m_in_index == m_in_count)
155-
{
156-
switch (m_in_buf[0])
157-
{
158-
case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7:
159-
case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf:
160-
case 0xd0: case 0xd1: case 0xd2: case 0xd3: case 0xd4: case 0xd5: case 0xd6: case 0xd7:
161-
case 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf:
162-
case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7:
163-
case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef:
164-
case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7:
165-
case 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff: // Update Mouse Position
166-
set_mouse_position();
167-
memset(m_in_buf, 0, 17);
168-
m_in_index = 0;
169-
m_in_count = 0;
170-
break;
171-
}
172-
}
173-
}
174-
else
175-
{
176-
m_in_buf[m_in_index] = data & 0x00ff;
177-
m_in_index++;
178-
switch (data & 0x00ff)
179-
{
180-
case 0xc0: case 0xc1: case 0xc2: case 0xc3: case 0xc4: case 0xc5: case 0xc6: case 0xc7:
181-
case 0xc8: case 0xc9: case 0xca: case 0xcb: case 0xcc: case 0xcd: case 0xce: case 0xcf:
182-
case 0xd0: case 0xd1: case 0xd2: case 0xd3: case 0xd4: case 0xd5: case 0xd6: case 0xd7:
183-
case 0xd8: case 0xd9: case 0xda: case 0xdb: case 0xdc: case 0xdd: case 0xde: case 0xdf:
184-
case 0xe0: case 0xe1: case 0xe2: case 0xe3: case 0xe4: case 0xe5: case 0xe6: case 0xe7:
185-
case 0xe8: case 0xe9: case 0xea: case 0xeb: case 0xec: case 0xed: case 0xee: case 0xef:
186-
case 0xf0: case 0xf1: case 0xf2: case 0xf3: case 0xf4: case 0xf5: case 0xf6: case 0xf7:
187-
case 0xf8: case 0xf9: case 0xfa: case 0xfb: case 0xfc: case 0xfd: case 0xfe: case 0xff:
188-
LOGMASKED(LOG_COMMANDS, "slave_w: Channel %d: Update Mouse Position (0x%02x)\n", offset, data & 0x00ff);
189-
m_in_count = 3;
190-
break;
191-
default:
192-
LOGMASKED(LOG_COMMANDS | LOG_UNKNOWNS, "slave_w: Channel %d: Unknown register: %02x\n", offset, data & 0x00ff);
193-
m_in_index = 0;
194-
break;
195-
}
196-
}
183+
slave_w_mouse(offset, data);
197184
break;
198185
case 1:
199186
if (m_in_index)

src/mame/philips/cdislavehle.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class cdislave_hle_device : public device_t
4343

4444
uint16_t slave_r(offs_t offset);
4545
void slave_w(offs_t offset, uint16_t data);
46+
void slave_w_mouse(offs_t offset, uint16_t data);
4647

4748
protected:
4849
// device_t implementation

0 commit comments

Comments
 (0)