Reference / Apple II family
Apple II Technical Note Misc #8 — Pascal 1.1 Firmware Protocol ID Bytes
The complete text of the only Apple-published specification for the Pascal 1.1 firmware protocol used to identify Apple II peripheral cards. Includes the canonical $Cn0C device-signature/instance-ID values for all Pascal-1.1-compliant Apple products.
This is the complete text of Apple II Technical Note Misc #8: Pascal 1.1 Firmware Protocol ID Bytes, originally written by Cameron Birse in December 1986 and revised by Matt Deatherage in November 1988. It is the only document Apple ever formally published describing the Pascal 1.1 firmware protocol used to identify Apple II peripheral cards. Captured here as a reference for the CP/M Videx investigation and any other research that needs to detect Pascal-1.1-compliant cards.
Source: Apple II Technical Notes, Developer CD Volume 2, September 1989 — pages 394-395. The full PDF of the September 1989 Technical Notes collection (1.4 MB, ~535 pages, all topics) is preserved at /reference/apple-ii-technical-notes-1989-09.pdf. The text below is just Misc #8; converting the rest of the collection to markdown is a future task.
The original is reproduced below with no edits beyond layout for web rendering.
Apple II Miscellaneous
#8: Pascal 1.1 Firmware Protocol ID Bytes
Revised by: Matt Deatherage November 1988 Written by: Cameron Birse December 1986
This Technical Note documents the Pascal 1.1 Firmware Protocol ID bytes for Apple II peripheral cards and ports.
Background
Apple II Pascal 1.1 introduced a firmware protocol called, not surprisingly, the Pascal 1.1 Firmware Protocol. A card following this protocol could be identified by the following ID bytes, where n is the slot in which the card resides:
| Address | Value | Definition |
|---|---|---|
$Cn05 | $38 | ID byte (from Pascal 1.0) |
$Cn07 | $18 | ID byte (from Pascal 1.0) |
$Cn0B | $01 | Generic signature of cards with Pascal 1.1 Protocol |
$Cn0C | $ci | Device signature byte |
$Cn0C was interpreted as two nibbles. The high-order nibble, c, was defined as the device signature. This signature was a pre-defined value determining what kind of device was connected (i.e., printer, modem, joystick, clock, etc.). The low-order nibble, i, was defined as a unique identifier, so you could tell one printer from another, for example.
Developer Technical Support no longer maintains a list of assignments for the i nibble in this protocol. Since, by definition, the Pascal 1.1 Protocol only has room for 16 uniquely identified devices of each signature, it is easy to see that the Apple II family has outgrown the definition.
Following is a table which lists the values of the Pascal 1.1 Firmware Protocol ID bytes for some Apple products which follow the protocol. Previous versions of this Note listed ID bytes for products which did not follow the protocol. Do not attempt to identify devices which do not follow the protocol by checking these ID bytes. This method will not work and should be avoided.
For example, trying to conclusively identify a 3.5” disk drive, SCSI hard drive, memory expansion card, or other SmartPort device using these ID bytes could be disastrous. For any SmartPort device, you should look for the ProDOS Block Device ID bytes ($Cn01 = $20, $Cn03 = $00, $Cn05 = $03), then look for the additional SmartPort ID byte ($Cn07 = $00). Once you have identified SmartPort, you should make a SmartPort STATUS call to determine the nature and types of connected devices. By this definition, ProDOS block devices and SmartPort devices cannot follow the Pascal 1.1 Firmware Protocol.
Pascal 1.1 Devices
Apple II Peripheral Cards
| Card | $Cn05 | $Cn07 | $Cn0B | $Cn0C |
|---|---|---|---|---|
| Super Serial Card (or port) | $38 | $18 | $01 | $31 |
| Apple 80 Column Card | $38 | $18 | $01 | $88 |
| Apple II Mouse Card | $38 | $18 | $01 | $20 |
Apple IIc Ports
1st version ($FBBF = $FF)
| Slot | Port | $Cn05 | $Cn07 | $Cn0B | $Cn0C |
|---|---|---|---|---|---|
| 1 | Serial Port | $38 | $18 | $01 | $31 |
| 2 | Serial Port | $38 | $18 | $01 | $31 |
| 3 | 80 Columns | $38 | $18 | $01 | $88 |
| 4 | Mouse | $38 | $18 | $01 | $20 |
2nd version ($FBBF = $00)
| Slot | Port | $Cn05 | $Cn07 | $Cn0B | $Cn0C |
|---|---|---|---|---|---|
| 1 | Serial Port | $38 | $18 | $01 | $31 |
| 2 | Serial Port | $38 | $18 | $01 | $31 |
| 3 | 80 Columns | $38 | $18 | $01 | $88 |
| 4 | Mouse | $38 | $18 | $01 | $20 |
| 7 | AppleTalk | $38 | $18 | $01 | $31 |
3rd version ($FBBF = $03), 4th version ($FBBF = $04), and 5th version ($FBBF = $05)
| Slot | Port | $Cn05 | $Cn07 | $Cn0B | $Cn0C |
|---|---|---|---|---|---|
| 1 | Serial Port | $38 | $18 | $01 | $31 |
| 2 | Serial Port | $38 | $18 | $01 | $31 |
| 3 | 80 Columns | $38 | $18 | $01 | $88 |
| 7 | Mouse | $38 | $18 | $01 | $20 |
Apple IIGS Ports (ROM 1.0 and 2.0)
| Slot | Port | $Cn05 | $Cn07 | $Cn0B | $Cn0C |
|---|---|---|---|---|---|
| 1 | Serial Port | $38 | $18 | $01 | $31 |
| 2 | Serial Port | $38 | $18 | $01 | $31 |
| 3 | 80 Columns | $38 | $18 | $01 | $88 |
| 4 | Mouse Port | $38 | $18 | $01 | $20 |
| 7 | AppleTalk | $38 | $18 | $01 | $31 |
ProDOS and SmartPort Devices
These devices use a different identification protocol — not the Pascal 1.1 Firmware Protocol.
| Device | $Cn01 | $Cn03 | $Cn05 | $Cn07 |
|---|---|---|---|---|
| Generic ProDOS Block Device | $20 | $00 | $03 | $xx |
| SmartPort Device | $20 | $00 | $03 | $00 |
END OF FILE TN.Misc.008
Notes on Reading This Document
Synthesized observations about the published $Cn0C values, since Apple never explicitly published the device-signature nibble registry but the table above implicitly defines several of them:
c nibble | Class (inferred from published cards) |
|---|---|
$2 | Mouse / pointing device (Apple II Mouse Card = $20; IIc/IIGS mouse port = $20) |
$3 | Serial / communications interface (Apple Super Serial Card = $31; IIc/IIGS serial ports and AppleTalk = $31) |
$8 | 80-column display card (Apple 80 Column Card = $88; IIc/IIGS slot 3 80-column = $88) |
Third-party cards followed similar conventions. The Videx Videoterm — not in Apple’s official table because it’s not an Apple product — declares $CB0C = $82: device signature $8 (display), instance ID $2. That’s consistent with Apple’s $8 = 80-column display assignment, just with a different instance ID to distinguish it from Apple’s own card (which uses instance $8).
Important practical limit, restated from the Tech Note itself: do not try to identify ProDOS block devices, SmartPort devices, SCSI cards, 3.5” drives, memory expansion cards, or anything else not in the table above using these bytes. Those cards do not implement the Pascal 1.1 protocol and probing them this way may produce false matches.
Document
Having trouble viewing? Download the PDF and open it locally.