Mouse #4
Mouse Firmware Bug Affecting ServeMouse

Revised by Matt Deatherage (November 1988)
Written by Rilla Reynolds (January 1985)

This Technical Note documents a bug in the mouse firmware on the AppleMouse card which affects the way ServeMouse works.

There is a bug in the AppleMouse II 6805 firmware which may affect the way ServeMouse works in an application. If the application takes more than one video cycle (normally about 16 ms) to respond to a mouse-generated interrupt, then ServeMouse will not claim the interrupt. The 6805 returns an interrupt status byte of $00 (i.e., no mouse interrupt pending), and the 6502 firmware sets the carry bit (although the interrupt is also cleared by the ServeMouse call). This situation can be confusing, and under ProDOS or Pascal it can be lethal. We have identified the following solutions, any of which should work:

If you are not working under an established operating system (i.e., ProDOS or Pascal):

  1. Do not allow unclaimed interrupts to be fatal to your application. Ignore them.
  2. Always service mouse interrupts within 1/60 of a second. If you are forced to disable interrupts for a longer period, first use SetMouse to set the mouse mode to 0, then call ServeMouse to clear any existing mouse interrupt. After interrupts are re-enabled, restore the mouse mode.

If you are working under an established operating system (i.e., ProDOS or Pascal) for which unclaimed interrupts are fatal and the mouse is not the only interrupting device:

  1. Write the mouse interrupt handler to claim all unclaimed interrupts and make sure the mouse interrupt handler is installed last, otherwise the interrupt will never get through to any interrupt handlers which follow that of the mouse.
  2. Note: This solution may cause cursor flicker by delaying the application's response to VBL interrupts.
  3. Write a spurious interrupt handler (also known as a "daemon"), not associated with any device, which claims all unclaimed interrupts (i.e., clears the carry bit then exits). For the reason just mentioned, this interrupt handler must be installed last.
  4. Note: Under ProDOS, this limits the number if interrupting devices to three.

This bug exists in the AppleMouse card, therefore you must deal with it when you are writing eight-bit programs for the Apple ][+, IIe, IIc and IIGS which use the mouse. The Apple IIGS does not have this bug in its internal mouse firmware, so sixteen-bit "native" mode programs are not affected by it.

This and all of the other Apple II Technical Notes have been converted to HTML by Aaron Heiss as a public service to the Apple II community, with permission by Apple Computer, Inc. Any and all trademarks, registered and otherwise, are properties of their owners.