Miscellaneous #3
Super Serial Card Firmware Bug

Revised by Matt Deatherage (November 1988)
Written by Cameron Birse (November 1985)

This Technical Note documents two bugs in the Super Serial Card firmware.


The Super Serial Card (SSC) firmware does not access location $CFFF to clear the $C800 space before jumping into its bank-switched ROM in that area.

By omitting this access, the Super Serial Card can cause a slot data bus conflict when a ROM of equal or greater strength on another card "owns" the $C800 space when the Super Serial Card wants to use it. For example, the UniDisk 3.5 controller card uses the same 74LS245 octal bus driver as the Super Serial Card. If you are using the UniDisk 3.5 card and switch to the Super Serial Card firmware, there will be a bus conflict. The SSC is trying to switch in its own $C800 space while the UniDisk 3.5 card is trying to keep the $C800 space, since no one cleared it by accessing $CFFF. Since both have the same capability to drive the bus, neither wins the battle.

An easy solution to this problem is to reference $CFFF before calling any of the Pascal entry points on the Super Serial Card. For example:


NEWSLOT    STA    $CFFF         ;reset the slot ROM space
           LDA    Char          ;Char = character to output
           LDX    #$Cn          ;n = slot number
           LDY    #$n0
           STX    MSLOT         ;MSLOT = $7F8, always set it up
           JSR    PWRITE        ;now call the Pascal routine of your choice

This bug is in the Pascal entry points; the BASIC entry point does not have this problem as there is a STA $CFFF instruction at $Cn1B.

This example code stores the slot number (in the form $Cn) in MSLOT, a screen hole used to tell the system which peripheral card had control when an interrupt occurred. The Super Serial Card firmware does set up MSLOT, but does not do so until long after it has enabled its $C800 space. If an IRQ comes through the system between the call to the card and when the card stores MSLOT, the system will crash.

Both bugs can be avoided by using the sample code to call entry points on the Super Serial Card.

Further Reference


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.