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 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