• Published on | Mar 09, 2019 | by FozzTexx

A Three Finger Salute for the Apple ][ Plus

As part of collecting I've managed to build up a small pile of Apple II+ computers that were purchased to get various cards and other parts. A revision 7 one made in 1984 (contrary to popular belief, Apple II+ production did not cease when the IIe came out in 1983, see last two images in gallery) had become my favorite test machine when I needed to try out a newly received card or other Apple II+ hardware. One night while testing out a Micromodem II card and going through the Smartcom setup several times, I realized that on the 40 column screen I was seeing lowercase! I looked inside at the character generator ROM and discovered it had been replaced with a Dan Paymar lowercase ROM. A quick Google search told me that this was actually a fairly common upgrade!

The blue clip is the one-wire shift-key mod The discovery that I had a II+ that could display lowercase inspired me to see what other upgrades could be done to bring a II+ closer to an Apple IIe. I knew that 80 columns was possible by using an add-on 80 column card since we'd had an 80 column card in our II+, so I added one of those to my lowercase capable II+. Another upgrade that stemmed from adding the 80 column card and had been pretty common was the one-wire shift-key mod which allows software to detect when the shift key is being pressed making it easier to type mixed case in word processing and communications programs.

One thing that annoyed me with the II+ was that often when you were done with one program and wanted to do something else you would have to turn the computer off and back on to get it to reboot from disk. This was more a problem with games than anything else because it was pretty common to play one game for 5 or 10 minutes and then jump to another. When programs had disabled the reset key you either had to reach way behind the computer to find the switch, or in our case turn off the switch on the Kensington System Saver and shut down the monitor too. From the IIe and up you could do what was commonly called a three finger salute and force a cold boot by holding down the Open Apple key when pressing Control-Reset.

Part of my quest to make a much improved II+ had me also considering seeing what possibilities there could be for upgrading the ROM. The ROMs on the II and II+ are mask ROMs and not directly compatible with EPROMs, however the Apple 16k Language Card has a socket for the autostart F8 ROM and can accept a 2716 EPROM by cutting a couple of pads on the PCB. A few third party language card clones can also directly accept a 2716 EPROM without modification, and as I happen to have one, that is what I chose to use. I also used a 28C16 EEPROM since they can be easily burned on a TL866 and are compatible with a 2716.

Using the Apple IIe ROM listings as a reference I looked to see how the reset sequence was altered to detect the Open Apple key and what it did to force the cold start. When an Apple II with an autostart ROM resets it checks if a reset vector in RAM at $3F2 is valid and if so, it jumps to that instead of going through the normal cold start power up routines. Invalidating the reset vector is all I should need to do to force a cold boot.

The IIe ROM patches the RESET routine and makes use of a bunch of NOPs at $FBB3. Looking at the amount of space available it seemed like I might be able to do something similar. I made my routine check paddle button 2, the same button that the one-wire shift-key mod uses, making Control-Shift-Reset force a cold boot. If the shift key is being pressed then the checksum byte at $3F4 is overwritten. It would be nice to also overwrite the value at $3F3, but I just don't have enough bytes to fit it in. But since the lower 7 bits left in the accumulator after the paddle button check are fairly random, overwriting $3F4 should be fine. And if it doesn't do a cold boot on the first try, it's not that hard for the user to try it again and overwrite $3F4 again with another random value.

One way to make your own F8 ROM is to make a patched ROM directly on your II+ and then transfer that to your favorite EPROM burner.

Boot DOS or ProDOS. Type CALL -151 to get into the monitor. Now type the following:

800<F800.FFFFM
A6D:B5 FB
BB3:F0 0C 20 89 FE AD 63 C0 30 03 8D F4 03 60

Push Control-C and RETURN to get back into BASIC, and then save it with: 

BSAVE COLDBOOT.ROM,A$800,L$800

Transferring COLDBOOT.ROM to a computer with an EPROM burner is left as an exercise for the reader.

The source for my patch is below:

*** monplus.lst	2019-03-09 09:57:13.676752262 -0800
--- monplus-cold.lst	2019-03-09 09:57:10.268730470 -0800
***************
*** 106,111 ****
--- 106,112 ----
         F800 : =$C05E              SETAN3   EQU   $C05E
         F800 : =$C05F              CLRAN3   EQU   $C05F
         F800 : =$C060              TAPEIN   EQU   $C060
+        F800 : =$C063              BUTN2    EQU   $C063
         F800 : =$C064              PADDL0   EQU   $C064
         F800 : =$C070              PTRIG    EQU   $C070
         F800 : =$CFFF              CLRROM   EQU   $CFFF
***************
*** 416,422 ****
         FA63 : 20 84 FE            	 JSR   SETNORM
         FA66 : 20 2F FB            	 JSR   INIT
         FA69 : 20 93 FE            	 JSR   SETVID
!        FA6C : 20 89 FE            	 JSR   SETKBD
         FA6F : AD 58 C0            	 LDA   SETAN0     ; AN0 = TTL HI
         FA72 : AD 5A C0            	 LDA   SETAN1     ; AN1 = TTL HI
         FA75 : AD 5D C0            	 LDA   CLRAN2     ; AN2 = TTL LO
--- 417,423 ----
         FA63 : 20 84 FE            	 JSR   SETNORM
         FA66 : 20 2F FB            	 JSR   INIT
         FA69 : 20 93 FE            	 JSR   SETVID
!        FA6C : 20 B5 FB            	 JSR   COLDCHK	  ; See if user wants to force a cold boot (was SETKBD)
         FA6F : AD 58 C0            	 LDA   SETAN0     ; AN0 = TTL HI
         FA72 : AD 5A C0            	 LDA   SETAN1     ; AN1 = TTL HI
         FA75 : AD 5D C0            	 LDA   CLRAN2     ; AN2 = TTL LO
***************
*** 559,578 ****
         FBAD : C9 CC               	 CMP   #$CC
         FBAF : F0 E6               	 BEQ   ESCOLD
         FBB1 : D0 E8               	 BNE   ESCNOW
!        FBB3 : EA                  	 NOP
!        FBB4 : EA                  	 NOP
!        FBB5 : EA                  	 NOP
!        FBB6 : EA                  	 NOP
!        FBB7 : EA                  	 NOP
!        FBB8 : EA                  	 NOP
!        FBB9 : EA                  	 NOP
!        FBBA : EA                  	 NOP
!        FBBB : EA                  	 NOP
!        FBBC : EA                  	 NOP
!        FBBD : EA                  	 NOP
!        FBBE : EA                  	 NOP
!        FBBF : EA                  	 NOP
!        FBC0 : EA                  	 NOP
         FBC1 : 48                  BASCALC  PHA              ;CALC BASE ADR IN BASL,H
         FBC2 : 4A                           LSR              ;  FOR GIVEN LINE NO
         FBC3 : 29 03                        AND   #$03       ;  0<=LINE NO.<=$17
--- 559,571 ----
         FBAD : C9 CC               	 CMP   #$CC
         FBAF : F0 E6               	 BEQ   ESCOLD
         FBB1 : D0 E8               	 BNE   ESCNOW
!        FBB3 : F0 0C               	 BEQ   BASCALC    ; Skip over button 2 (shift-mod) cold boot check
!        FBB5 : 20 89 FE            COLDCHK	 JSR   SETKBD
!        FBB8 : AD 63 C0            	 LDA   BUTN2
!        FBBB : 30 03               	 BMI   COLDRTN
!        FBBD :                     ;	 STA   PWREDUP-1
!        FBBD : 8D F4 03            	 STA   PWREDUP
!        FBC0 : 60                  COLDRTN	 RTS
         FBC1 : 48                  BASCALC  PHA              ;CALC BASE ADR IN BASL,H
         FBC2 : 4A                           LSR              ;  FOR GIVEN LINE NO
         FBC3 : 29 03                        AND   #$03       ;  0<=LINE NO.<=$17

Join The Discussion