MCPcopy Create free account
hub / github.com/AppleWin/AppleWin / OnCommand

Method OnCommand

source/MouseInterface.cpp:327–418  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

325}
326
327void CMouseInterface::OnCommand()
328{
329#ifdef _DEBUG_SPURIOUS_IRQ
330 static UINT uSpuriousIrqCount = 0;
331 BYTE byOldState = m_byState;
332#endif
333
334 switch( m_byBuff[0] & 0xF0 )
335 {
336 case MOUSE_SET:
337 m_nDataLen = 1;
338 m_byMode = m_byBuff[0] & 0x0F;
339 break;
340 case MOUSE_READ: // Read
341 m_nDataLen = 6;
342 m_byState &= STAT_MOVEMENT_SINCE_READMOUSE;
343 m_nX = m_iX;
344 m_nY = m_iY;
345 if ( m_bBtn0 ) m_byState |= STAT_PREV_BUTTON0; // Previous Button 0
346 if ( m_bBtn1 ) m_byState |= STAT_PREV_BUTTON1; // Previous Button 1
347 m_bBtn0 = m_bButtons[0];
348 m_bBtn1 = m_bButtons[1];
349 if ( m_bBtn0 ) m_byState |= STAT_CURR_BUTTON0; // Current Button 0
350 if ( m_bBtn1 ) m_byState |= STAT_CURR_BUTTON1; // Current Button 1
351 m_byBuff[1] = m_nX & 0xFF;
352 m_byBuff[2] = ( m_nX >> 8 ) & 0xFF;
353 m_byBuff[3] = m_nY & 0xFF;
354 m_byBuff[4] = ( m_nY >> 8 ) & 0xFF;
355 m_byBuff[5] = m_byState; // button 0/1 interrupt status
356 m_byState &= ~STAT_MOVEMENT_SINCE_READMOUSE;
357#ifdef _DEBUG_SPURIOUS_IRQ
358 LogOutput("[MOUSE_READ] Old=%02X New=%02X\n", byOldState, m_byState);
359#endif
360 break;
361 case MOUSE_SERV:
362 m_nDataLen = 2;
363 m_byBuff[1] = m_byState & ~STAT_MOVEMENT_SINCE_READMOUSE; // reason of interrupt
364#ifdef _DEBUG_SPURIOUS_IRQ
365 if ((m_byMode & MODE_INT_ALL) && (m_byBuff[1] & MODE_INT_ALL) == 0)
366 {
367 uSpuriousIrqCount++;
368 LogOutput("[MOUSE_SERV] 0x%04X Buff[1]=0x%02X, ***\n", uSpuriousIrqCount, m_byBuff[1]);
369 }
370 else
371 {
372 LogOutput("[MOUSE_SERV] ------ Buff[1]=0x%02X\n", m_byBuff[1]);
373 }
374#endif
375 CpuIrqDeassert(IS_MOUSE);
376 break;
377 case MOUSE_CLEAR:
378 Clear(); // [TC] NB. Don't reset clamp values (eg. Fantavision)
379 m_nDataLen = 1;
380 break;
381 case MOUSE_POS:
382 m_nDataLen = 5;
383 break;
384 case MOUSE_INIT:

Callers

nothing calls this directly

Calls 3

LogOutputFunction · 0.85
CpuIrqDeassertFunction · 0.85
SetPAMethod · 0.80

Tested by

no test coverage detected