@@ -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+ }
144177void 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)
0 commit comments