;APPATCH2.MAC 29Dec 82 ;PURPOSE:to allow the entry of all control ;characters and ascii characters for CP/M ;for an Apple ][ equipped with a Saturn RAM-card ;and an 80-column video card. ;written by W.F.McGee (613-828-9130) ;based on APPATCH1 ;written by Matthew Von-Maszewski ;from Lifelines, March 1982 ; ;Apple ][ keyboard patch to allow control ;characters to get to the operating system ;WITHOUT being filtered out by the 24x80 card. ;Designed to work with a Saturn 128k RAM card and 80-column ;card by putting keyboard patch in Apple text screen area, ;since Saturn uses all the patch area for RAM-card. ;There should be no characters defined under CONFIGIO. ;This patch requires the following hardware changes. ;A wire from the third (CONTROL)from the left end of the 25-pin ;keyboard connector goes to pin 4 of the ls251 in front ;of the game paddle connector. A wire from the second right ;(SHIFT) from the end of the keyboard connector goes to pin 4 ;of the game paddle connector. The lead from the ;game paddle must be bent out of the way. ;NOTE this is the STANDARD fix (i.e. for PASCAL) ;detailed instructions on patching: ;1. M80 B:APPATCH2,TTY:=B:APPATCH2 ;2. L80 B:APPATCH2/N/E ;3. APPATCH2 ; ;RECORD OF CHANGES ;APPATCH2, 29 Dec 82 ;made into z-80 to fit one video line ;5 SEPT 82 W F MCGEE CHANGED FROM GAME PADDLE E062 TO E060 ;TO ALLOW THE KIDS TO KEEP THE PADDLES GOING!! ;I solder to the keyboard connector, but just insert the ;wire-wrap wire into the LSI socket hole, along with the IC. ; ; .Z80 PATCH EQU 0F400H ;placed in the text screen because the ;keyboard patch area is unavailable CIV1 EQU 0F382H BDOS EQU 0005H FALSE EQU 0 TRUE EQU NOT FALSE SHIFT EQU TRUE ;SHIFT KEY SHLOCK EQU TRUE ;CTRL KEY ASEG ORG 100H LD B,LC2-LC1 ;number to move LD HL,PATCH ;start of patch LD DE,LC1 ;start of code AGAIN: EX DE,HL LD A,(HL) ;code into A-reg INC HL EX DE,HL LD (HL),A ;move to patch area INC HL DEC B JR NZ,AGAIN ;repeat if not done LD HL,CIV1 ;change pointer to F400h LD A,00H LD (HL),A INC HL LD A,0F4H LD (HL),A LD C,00H ;jump to coldstart JP BDOS LC1: BIAS EQU PATCH-LC1 L1: LD A,(0E000H) ;GET VALUE FROM KEYBOARD CP 80H ;TEST A NEW ENTRY JR C,L1 ;NOT YET AND 7FH ;STRIP HIGH BIT LD (0E010H),A ;TURN OFF KEYBOARD STROBE IF SHIFT IF SHLOCK PUSH BC LD B,A ;SAVE CHAR LD A,(FLAG+BIAS) ;SEE IF UNDER SHIFT LOCK INC A ;TEST FLAG LD A,B ;GET CHARACTER BACK JR Z,L2 ;JUMP IF SHIFT LOCK CP 41H ;TEST IN LETTER AREA JR C,L2 ;LEAVE IF NOT ALPHA ENDIF IF NOT SHLOCK CP 41H ;TEST IN LETTER AREA JR C,L2+1 ;LEAVE IF NOT ALPHA PUSH BC ;SAVE THIS REGISTER ENDIF LD B,A LD A,(0E063H) ;GET SHIFT AND 80H ;STRIP GARBAGE RRCA ;MOVE TO BIT 6 RRCA ;MOVE TO BIT 5 OR B ;DO THE STUFF L2: POP BC CP 40H ;CHECK FOR WRONG KEYS IN JR Z,L4 ;MAKE @ A CAP-P LIKE IT SHOULD BE CP 5EH ;SEE IF ^ JR Z,L3 ;MAKE ^ A CAP-N CP 5DH ;SEE IF ] JR NZ,L5 ;NOPE:LEAVE THE REST ALONE L3: AND 4FH ;FIX N AND M JR L5 ;KITTY FIXED L4: LD A,50H ;BACK TO P L5: ENDIF IF SHLOCK PUSH AF ;SAVE CHARACTER LD A,(0E060H) ;GET CTRL RLA ; JR C,L8 ;SKIP IF CTRL NOT PRESSED POP AF ;GET THE CHARACTER CP 2DH ;CHECK LOWER BOUND JR C,L8+1 ;BELOW WHAT WE ARE LOOKING FOR CP 3BH ;CHECK UPPER BOUND JR NC,L8+1 ;ABOVE WHAT WE ARE LOOKING FOR CP 30H ;TEST SHIFT LOCK JR Z,L7 ;IT IS. JUMP ;TRANSLATE AREA PUSH HL LD HL,TABLE+BIAS ;BASE OF TRANSLATE TABLE SUB 2DH ;STRIP OF UNNEEDED ASCII ADD A,L ;DO OFFSET LD L,A ;SAVE OFFSET JR NC,L6 ;SEE IF CARRY INTO H INC H ;ADD 1 L6: LD A,M ;GET REPLACEMENT VALUE POP HL JR L8+1 ;FINALLY FINISHED L7: LD A,(FLAG+BIAS) ; CPL ;CHANGE FLAG LD (FLAG+BIAS),A ;PUT FLAG IN NEW STATE JR L1 ;GET THE NEXT CHARACTER FLAG: DB 0 ;STARTS OFF LOWER CASE TABLE: ;CHARACTER TRANSLATION TABLE DB 5FH ;CTRL-= TO RUB(UNDERLINE) DB 7FH ;CTRL-. TO DLE DB 5CH ;CTRL-/ TO \ DB 0 ;SHIFT LOCK GETS INTERCEPTED DB 7CH ;CTRL-1 TO | DB 00H ;CTRL-2 TO NUL DB 7EH ;CTRL-3 TO DB 7BH ;CTRL-4 TO { DB 7DH ;CTRL-5 TO } DB 5EH ;CTRL-6 TO ^ DB 60H ;CTRL-7 TO ` DB 5BH ;CTRL-8 TO [ DB 5DH ;CTRL-9 TO ] DB 40H ;CTRL-: TO @ L8: POP AF ;GET CHARACTER BACK ENDIF RET LC2: end