1 REM Ins{nd av Hans Holmberg <2838>    1987-06-14 22.48.21 (DUMP)
;
; SOFTKEY.ASM v2.0, (C) Hans Holmberg <2838> 1985-08-06
;
; SoftKey definierar om alla tangenter p} tangentbordet till
; valfria ascii-v{rden. Den fungerar {ven tillsammans
; med SUPERSMARTIAD och den p}verkar ->OCKS]<- INP(56)!
;
; Z=CALL(49159) Startar SoftKey-rutinen, men se upp,
;               du m}ste ha definierat alla tangenter f|rst!
; Z=CALL(49189) St{nger av SoftKey rutinen och startar den
;               tidigare interrupt rutinen.
; Z=CALL(49263) S{tter alla tangenter till standard, och om
;               SoftKey ej {r initierat s} initieras det.
;
; Om man vill tex. g|ra 'A' till ett 'B':
; POKE 49280+ASC('A'),ASC('B')
; Sedan n{r man trycker p} 'A' s} blir det ett 'B'.
; Men om man har sm} bokst{ver s} blir det 'a' och
; inte 'b', detta beroende p} att rutinen skiljer p}
; alla tecken, s}som CTRL-A, lilla 'a' och stora 'A'.
; S} vill man definiera om lilla 'a' till lilla 'b'
; s} skriver man POKE 49280+ASC('a'),ASC('b').
;
;
         ORG 49152
INTV:    DEFW INTER
         DEFW 1428
OLDINTV: DEFB 0
OLDINTA: DEFW 0
;
; Initiera den nya interruptrutinen.
;
INIT:    DI
         LD A,I
         LD (OLDINTV),A
         LD H,A
         LD L,52
         LD A,(HL)
         INC HL
         LD H,(HL)
         LD L,A
         LD (OLDINTA),HL
         LD A,192
         LD I,A
         XOR A
         OUT (17),A
         LD A,201
         LD (INIT),A
         EI
         RET
;
; St{nga av det nya interruptet och initiera
; den gamla rutinen.
;
RESET:   DI
         XOR A
         DEC A
         OUT (17),A
         OUT (17),A
         LD A,183
         OUT (17),A
         LD A,127
         OUT (17),A
         LD A,52
         OUT (17),A
         LD A,(OLDINTV)
         LD I,A
         LD A,243
         LD (INIT),A
         EI
         RET
;
; SoftKey rutinen.
;
INTER:   DI
         PUSH AF
         PUSH HL
         PUSH BC
         XOR A
         LD B,A
         DEC A
         OUT (17),A
         OUT (17),A
         IN A,(16)
         AND 127
         LD C,A
         LD HL,KEYTAB
         ADD HL,BC
         LD A,(HL)
         POP BC
         POP HL
         PUSH AF
         XOR A
         DEC A
         OUT (17),A
         LD A,127
         OUT (17),A
         POP AF
         OUT (16),A
         POP AF
         PUSH HL
         LD HL,(OLDINTA)
         EX (SP),HL
         EI
         RET
;
; Denna rutin g|r s} att man f}r 'normala' tangenter.
;
INIT2:   LD L,128
         LD A,0
LOOP:    LD (HL),A
         INC A
         INC L
         JR NZ,LOOP
         JP INIT
;
; H{r ska tabellen med de nya ascii-v{rdena ligga.
;
KEYTAB:  ORG 49280
         END

