home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / apple / appatch2.mqc / APPATCH2.MAC
Encoding:
Text File  |  1985-02-10  |  4.3 KB  |  171 lines

  1. ;APPATCH2.MAC 29Dec 82
  2. ;PURPOSE:to allow the entry of all control
  3. ;characters and ascii characters for CP/M
  4. ;for an Apple ][ equipped with a Saturn RAM-card
  5. ;and an 80-column video card.
  6. ;written  by W.F.McGee (613-828-9130)
  7. ;based on APPATCH1
  8. ;written by Matthew Von-Maszewski
  9. ;from Lifelines, March 1982
  10. ;
  11. ;Apple ][ keyboard patch to allow control
  12. ;characters to get to the operating system
  13. ;WITHOUT being filtered out by the 24x80 card.
  14. ;Designed to work with a Saturn 128k RAM card and 80-column
  15. ;card by putting keyboard patch in Apple text screen area,
  16. ;since Saturn uses all the patch area for RAM-card.
  17. ;There should be no characters defined under CONFIGIO.
  18. ;This patch requires the following hardware changes.
  19. ;A wire from the third (CONTROL)from the left end of the 25-pin
  20. ;keyboard connector goes to pin 4 of the ls251 in front
  21. ;of the game paddle connector. A wire from the second right
  22. ;(SHIFT) from the end of the keyboard connector goes to pin 4
  23. ;of the game paddle connector. The lead from the
  24. ;game paddle must be bent out of the way.
  25. ;NOTE   this is the STANDARD fix (i.e. for PASCAL)
  26. ;detailed instructions on patching:
  27. ;1. M80 B:APPATCH2,TTY:=B:APPATCH2
  28. ;2. L80 B:APPATCH2/N/E
  29. ;3. APPATCH2
  30. ;
  31. ;RECORD OF CHANGES
  32. ;APPATCH2, 29 Dec 82
  33. ;made into z-80 to fit one video line
  34. ;5 SEPT 82 W F MCGEE CHANGED FROM GAME PADDLE E062 TO E060
  35. ;TO ALLOW THE KIDS TO KEEP THE PADDLES GOING!!
  36. ;I solder to the keyboard connector, but just insert the
  37. ;wire-wrap wire into the LSI socket hole, along with the IC.
  38. ;
  39. ;
  40.     .Z80
  41. PATCH    EQU    0F400H    ;placed in the text screen because the
  42.             ;keyboard patch area is unavailable
  43. CIV1    EQU    0F382H
  44. BDOS    EQU    0005H
  45. FALSE    EQU    0
  46. TRUE    EQU    NOT FALSE
  47.  
  48. SHIFT    EQU    TRUE    ;SHIFT KEY
  49. SHLOCK    EQU    TRUE    ;CTRL KEY
  50.  
  51.     ASEG
  52.     ORG    100H
  53.     LD    B,LC2-LC1    ;number to move
  54.     LD    HL,PATCH    ;start of patch
  55.     LD    DE,LC1        ;start of code
  56. AGAIN:    EX    DE,HL
  57.     LD    A,(HL)        ;code into A-reg
  58.     INC    HL
  59.     EX    DE,HL
  60.     LD    (HL),A        ;move to patch area
  61.     INC    HL
  62.     DEC    B
  63.     JR    NZ,AGAIN    ;repeat if not done
  64.     LD    HL,CIV1        ;change pointer to F400h
  65.     LD    A,00H
  66.     LD    (HL),A
  67.     INC    HL
  68.     LD    A,0F4H
  69.     LD    (HL),A
  70.     LD    C,00H        ;jump to coldstart
  71.     JP    BDOS    
  72. LC1:    
  73. BIAS    EQU    PATCH-LC1
  74. L1:    LD    A,(0E000H)    ;GET VALUE FROM KEYBOARD
  75.     CP    80H    ;TEST A NEW ENTRY
  76.     JR    C,L1    ;NOT YET
  77.     AND    7FH    ;STRIP HIGH BIT
  78.     LD    (0E010H),A    ;TURN OFF KEYBOARD STROBE
  79.  
  80.     IF    SHIFT
  81.  
  82.     IF    SHLOCK
  83.     PUSH    BC
  84.     LD    B,A    ;SAVE CHAR
  85.     LD    A,(FLAG+BIAS)    ;SEE IF UNDER SHIFT LOCK
  86.     INC    A    ;TEST FLAG
  87.     LD    A,B    ;GET CHARACTER BACK
  88.     JR    Z,L2    ;JUMP IF SHIFT LOCK
  89.     CP    41H    ;TEST IN LETTER AREA
  90.     JR    C,L2    ;LEAVE IF NOT ALPHA
  91.     ENDIF
  92.     IF    NOT SHLOCK
  93.     CP    41H    ;TEST IN LETTER AREA
  94.     JR    C,L2+1    ;LEAVE IF NOT ALPHA
  95.     PUSH BC    ;SAVE THIS REGISTER
  96.     ENDIF
  97.  
  98.     LD    B,A
  99.     LD    A,(0E063H)    ;GET SHIFT
  100.     AND    80H    ;STRIP GARBAGE
  101.     RRCA    ;MOVE TO BIT 6
  102.     RRCA    ;MOVE TO BIT 5
  103.     OR    B    ;DO THE STUFF
  104. L2:    POP    BC
  105.     CP    40H    ;CHECK FOR WRONG KEYS IN
  106.     JR    Z,L4    ;MAKE @ A CAP-P LIKE IT SHOULD BE
  107.     CP    5EH    ;SEE IF ^
  108.     JR    Z,L3    ;MAKE ^ A CAP-N
  109.     CP    5DH    ;SEE IF ]
  110.     JR    NZ,L5    ;NOPE:LEAVE THE REST ALONE
  111. L3:    AND    4FH    ;FIX N AND M
  112.     JR    L5    ;KITTY FIXED
  113. L4:    LD    A,50H    ;BACK TO P
  114. L5:
  115.     ENDIF
  116.     
  117.     IF SHLOCK
  118.     PUSH     AF    ;SAVE CHARACTER
  119.     LD    A,(0E060H)    ;GET CTRL
  120.     RLA        ;
  121.     JR    C,L8    ;SKIP IF CTRL NOT PRESSED
  122.     POP    AF    ;GET THE CHARACTER
  123.     CP    2DH    ;CHECK LOWER BOUND
  124.     JR    C,L8+1    ;BELOW WHAT WE ARE LOOKING FOR
  125.     CP    3BH    ;CHECK UPPER BOUND
  126.     JR    NC,L8+1    ;ABOVE WHAT WE ARE LOOKING FOR
  127.     CP    30H    ;TEST SHIFT LOCK
  128.     JR    Z,L7    ;IT IS. JUMP
  129.  
  130.     ;TRANSLATE AREA
  131.  
  132.     PUSH    HL
  133.     LD    HL,TABLE+BIAS    ;BASE OF TRANSLATE TABLE
  134.     SUB    2DH    ;STRIP OF UNNEEDED ASCII
  135.     ADD    A,L    ;DO OFFSET
  136.     LD    L,A    ;SAVE OFFSET
  137.     JR    NC,L6    ;SEE IF CARRY INTO H
  138.     INC    H    ;ADD 1
  139. L6:    LD    A,M    ;GET REPLACEMENT VALUE
  140.     POP    HL
  141.     JR    L8+1    ;FINALLY FINISHED
  142.  
  143. L7:    LD    A,(FLAG+BIAS)    ;
  144.     CPL            ;CHANGE FLAG
  145.     LD    (FLAG+BIAS),A    ;PUT FLAG IN NEW STATE
  146.     JR    L1        ;GET THE NEXT CHARACTER
  147.  
  148. FLAG:    DB    0        ;STARTS OFF LOWER CASE
  149.  
  150. TABLE:    ;CHARACTER TRANSLATION TABLE
  151.     DB    5FH    ;CTRL-= TO RUB(UNDERLINE)
  152.     DB    7FH    ;CTRL-. TO DLE
  153.     DB    5CH    ;CTRL-/ TO \
  154.     DB    0    ;SHIFT LOCK GETS INTERCEPTED
  155.     DB    7CH    ;CTRL-1 TO |
  156.     DB    00H    ;CTRL-2 TO NUL
  157.     DB    7EH    ;CTRL-3 TO 
  158.     DB    7BH    ;CTRL-4 TO {
  159.     DB    7DH    ;CTRL-5 TO }
  160.     DB    5EH    ;CTRL-6 TO ^
  161.     DB    60H    ;CTRL-7 TO `
  162.     DB    5BH    ;CTRL-8 TO [
  163.     DB    5DH    ;CTRL-9 TO ]
  164.     DB    40H    ;CTRL-: TO @
  165.  
  166. L8:    POP    AF    ;GET CHARACTER BACK
  167.     ENDIF
  168.     RET
  169. LC2:    end
  170.  
  171.