Apple IIc #6
Buffering Blues

Revised by Mike Askins (November 1988)
Written by Guillermo Ortiz (January 1987)

This Technical Note describes changes on the memory-expandable IIc which affect the procedures for enabling keyboard and serial input buffering.


When the IIc firmware was reorganized to accommodate the memory expansion card in slot 4, the mouse moved to slot 7, thus causing some screen holes to be reassigned. This change may software which uses keyboard or serial input buffering to crash.

The following list shows the changes in the locations which are used for enabling keyboard and serial input buffering:


            Original &
Name        3.5 ROM    Expandable IIc    Comment
typhed       $5FA          $5FA          ;buffer the keyboard? NO CHANGE
twkey        $5FF          $5FC          ;storage pointer for type-ahead buffer
trkey        $6FF          $6FC *        ;retrieve pointer for type-ahead buffer

aciabuf      $4FF          $4FC          ;Owner of serial buffer, if any
twser        $57F          $57C          ;storage pointer for serial buffer
trser        $67F          $67C          ;retrieve pointer for serial buffer

*    In the version 3 ROM (original "memory-expandable" IIc) this pointer 
is still $6FF which causes, among other things, the Terminal Mode to 
be inoperative.  Revision 4 of the IIc firmware fixes this bug.

We can not emphasize enough the need for carefully checking the version of the machine on which a program is running. It is also important to pay attention to the now obvious fact that even in the Apple IIc things can (and most probably will) move around, making any hard-coded slot assignment a sure source of incompatibility. To ensure compatibility, scan the slots.

The Apple IIc Technical Reference Manual, Second Edition describes how to enable buffering. Using serial buffering as an example, the pertinent instructions in the manual should now be understood as meaning:

Using Serial Buffering Transparently


 If (machineID = "Memory Expandable IIc") then
   begin
     aciabuf = $04FC;     {Newest IIc with Expanded Memory Capabilities,}
     twser = $057C;       {ROM versions 3 and 4.}
     trser = $067C
   end
 else
    begin
      aciabuf = $04FF;    {Original IIc and 3.5 ROM IIc}
      twser = $057F;
      trser = $067F
    end;

 Set_Location aciabuf to $C1 or $C2.
 Set_Locations twser and trser to $0.

Using Serial Interrupts Through Firmware


 Set_Location aciabuf to a value other than $C1 or $C2

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.