home *** CD-ROM | disk | FTP | other *** search
- ;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
-