Card Cat for Apple II

Identifying Apple II Cards

One of the most innovative features of Steve Wozniak‘s 1977 Apple II computer hardware design was the inclusion of a set of peripheral card slots on the computer’s motherboard. Printed circuit boards (‘cards’) inserted into these slots extended the functionality of the Apple II family of computers.

Apple and other companies designed and sold cards that provided features that the base Apple II computer did not include, e.g: printer and modem interfaces, extra memory, system clocks, larger displays, disk drive controllers, audio synthesizers and even other processors (such as the Z80 CPU – allowing Apple II computers to run CP/M software). In was only in 1984, with the release of the Apple IIc computer, that Apple finally included built-in hardware to support common functions such as printing, modem access, 80-column text display and a floppy disk interface.

To deliver their functionality, cards (in most cases) needed to interact with software running on the Apple II. To facilitate the interface between card hardware and computer software the Apple II assigned memory in the $C000 - $CFFF range of the Apple II memory map for use by each inserted card. The card designer could include a ROM (Read Only Memory) chip on the card containing software (referred to as ‘Firmware’) that would use that card’s assigned memory when the card was installed into an Apple II slot.

This is the ThunderClock Plus card, released in 1980 by Thunderware Inc. of Orinda California. This card added a real-time clock to the Apple II and included an on-card battery to maintain time when the computer was turned off. The large integrated circuit in the bottom right of the card is the ROM chip.

In 1981, to support the release of Apple Pascal version 1.1, Apple created the Pascal 1.1 Firmware Protocol which formalized the use of specific ‘ID’ bytes within a card’s firmware to identify the card to software running on the Apple II. These firmware bytes could identify the class of card (e.g. a printer interface card) as well as more specific card information such as it’s name and manufacturer. If card manufacturers followed the protocol, software running on an Apple II could check each of the 7 peripheral card slots and detect what card was in each occupied slot.

Because this identification protocol depends on reading the value of specific bytes in a card’s firmware, if a card does not contain firmware then it cannot be identified using the Firmware Protocol method. Not all cards contained firmware. For example, many Z80 processor cards do not contain firmware. In addition, some cards contained firmware that did not conform to Apple’s firmware protocol.

As I had been unable to find a comprehensive list of Apple II peripheral cards and given the evident interest in these cards (frequent Apple II family card sales on eBay and a growing Facebook Apple II Cards group), I wrote a program, called Card Cat, in Apple II Pascal and 6502 assembly language that scans peripheral card slots, determines if a slot contains a firmware equipped card and analyzes the card’s firmware. It then uses this data to look up the card’s identity in a built-in database of card identifiers. The goal is to create a comprehensive curated catalog of Apple II cards. The list of cards identified by Card Cat version 1.6 is here.

Installing and Using Card Cat

Card Cat comes on a turn-key disk and requires a minimum of 64K of memory (this is an Apple II Pascal limitation). Insert the Card Cat disk into Disk Drive #1 and reboot. It will check if the Apple II has a 40 or 80 column display and adapt accordingly. The program first displays basic information about the Apple II computer that it is running on. Card Cat has been tested on an Apple II+, Franklin Ace 1000, Apple IIe, Apple IIc (emulated) and Apple IIgs (emulated).

Card Cat examines the peripheral card slots , producing one of 4 results:

  1. If a card with firmware is found and the card is in Card Cat’s built-in database, the card’s ID Bytes (‘signature’), name and slot number are displayed.
  2. If a card with firmware is found but the card is not in Card Cat’s database, the program will attempt to identify the type of card using information derived from the card’s firmware. It then displays the card’s signature, the suggested card type and the slot it occupies. For example, it might display ‘? Unknown Network or Bus Interface Card‘ as the suggested card type. If the card type cannot be determined, Card Cat will display ‘Unknown Card‘.
  3. If the slot appears to be occupied by a card that does not contain firmware, Card Cat will use custom written code to check for the presence of a Z80 card, MockingBoard card, Uthernet II card or Saturn-compatible RAM card in that slot. If detected, Card Cat will display the name of the card but no signature, as these cards contain no firmware.
  4. If none of these non-firmware cards are detected Card Cat will display ‘No Firmware Card Detected‘. As no firmware is present, no ID bytes (‘signature’) are displayed. So far, I have found no reliable method to distinguish between an empty slot and a slot occupied by a card without firmware.

After displaying these results in the slot table, Card Cat offers 4 menu options:

  • [E]dit: Use this command to change the description of the card contained in a slot. Type ‘E‘ and then enter the slot number (1-7) that you wish to edit. The Edit command just changes the screen display of what is contained in a card slot. It does not change Card Cat’s internal database. To have an edit reviewed for inclusion in the the Card Cat database, email the information to me at: cardcat@henrylowe.net with any additional card information that you have.
  • [P]rint: If you have a printer connected to the Apple II, this command will print a copy of the computer information and the slot table.
  • [S]can: This command re-scans peripheral card slots 1-7. This may be useful if you have edited slot descriptions and wish to restore the table display to the data provided by Card Cat.
  • [V]iew: Displays a listing of the hexadecimal and printable ASCII character value of the first 256 bytes of memory (Cn00 - CnFF) reserved for the selected card slot (n). The displayed values are typically the first 256 bytes of the card’s active firmware but, if the card has no firmware, it will display random ‘phantom’ values. This command is provided to help identify potential firmware signature bytes for cards not recognized by Card Cat.
  • [Q]uit – Quit Card Cat and reboot from another system disk.

Using Card Cat:

  1. Download the Card Cat disk image file (link at the end of this page).
  2. If necessary, decompress the downloaded .zip file.
  3. Copy the Card Cat disk image to a 5.25″ floppy disk using ADTPro or copy the Card Cat disk image to an Apple II disk drive emulator.
  4. Boot the Card Cat startup disk on an Apple II,II+,IIe,IIc or IIgs (or clone).
  5. Card Cat will automatically scan slots 0-7 and display any cards that it recognizes.
  6. If Card Cat fails to recognize a card or if Card cat misidentifies a card, use the ‘[V]iew‘ command to display that slot’s (1-7) firmware data and email a photo of the screen to cardcat@henrylowe.net along with any information that you have for the card.

Version 1.6 of the Card Cat program (released January 28, 2024) has some enhancement and limitations:

  • Improves detection of RAM cards installed in Slot 0 or the Auxiliary Slot.
  • Detects RAM2E Card in Auxiliary slot on Apple IIe
  • Detects multiple installed Saturn-compatible RAM cards.
  • Detects the Uthernet II card, including in slot 3.
  • Add additional cards to the Card Cat database.
  • Fixes minor bugs and database issues.
  • Requires 64K of RAM.
  • RAMFactor cards not installed in slots 4,5,6 may not display card RAM size.
  • May not recognize additional RAM in Apple IIgs.
  • Card names and firmware listing may not be fully visible on a 40-column display. CTRL-A will toggle the display between the first and second 40 character screen.