;********************************************************
;* *
;* KEYBOARD INPUT PATCH *
;* *
;* SIMULATED FUNCTION *
;* KEYS WITH CPM IN GENERAL; THE SORCERER COMPUTER *
;* IN PARTICULAR, USING KIP.HEX AND KID.COM & DDT *
;* *
;* AS PUBLISHED IN DR DOBBS JOURNAL, ISSUE 55 MAY *
;* 1981, BY JOHN B PALMER. *
;* P.O. BOX 23 *
;* BOONSVILLE, CA, 95415 *
;* USA *
;* *
;* See the Dr. Dobbs article for commented code *
;* *
;********************************************************
;
; Keyed in By John Cepak
; Australia
;
FRERAM EQU 5C00H
TEXT EQU FRERAM+256
KIFUN EQU 01
TAB EQU 09
LF EQU 0AH
CR EQU 0DH
EOF EQU 01AH
;
ACTIVE EQU 0FFH
INACTIV EQU 0
;
ORG FRERAM
;
KIP:
OLDST: JMP 0
OLDIN: JMP 0
NEWST: JMP STAT
NEWIN: JMP INP
;
ASWITCH DB 0
EOSTR: DB 0
STRPTR: DW 0
SAVCHR: DB 0
;
STAT:
LDA SWITCH
ORA A
RNZ
JMP OLDST
;
INP:
LDA SWITCH
ORA A
JNZ STRING
CALL OLDIN
CPI KIFUN
RNZ
CALL OLDIN
STA SAVCHR
ORI 20H
SUI '`'
SUI 16
CC OLDIN
LDA SAVCHR
SEARCH:
PUSH B
PUSH H
CPI KIFUN
JZ PEEK
MOV B,A
LXI H,TEXT
TRY:
CALL IGNORE
JC EXIT
JZ TRY
CMP B
JZ FOUND
CALL SKIP
JNC TRY
EXIT:
MVI A,'?'
POP H
POP B
RET
;
PEEK:
MVI A,CR
CALL DIO
MVI A,LF
LXI H,TEXT
PRINT:
CALL DIO
MOV A,M
INX H
CPI EOF
JNZ PRINT
POP H
POP B
MVI A,CR
RET
;
DIO:
PUSH D
PUSH H
LHLD 01
LXI B,9
DAD B
MOV C,A
CALL VIAHL
POP H
POP D
RET
;
VIAHL:
PCHL
FOUND:
MOV A,M
STA EOSTR
INX H
SHLD STRPTR
MVI A,ACTIVE
FIN:
STA SWITCH
POP H
POP B
JMP INP
;
SKIP:
MOV A,M
CALL EOFCHR
RC
MOV C,A
INX H
TSTCHR:
MOV A,M
INX H
CALL EOFCHR
RC
CMP C
RZ
JMP TSTCHR
;
IGNORE:
MOV A,M
INX H
CPI ' '
RZ
CPI 9
RZ
CPI ','
RZ
CPI CR
RZ
CPI LF
RZ
EOFCHR:
CPI EOF
STC
CMC
RNZ
ORA A
STC
RET
;
STRING:
CALL GETCHR
RM
CPI '^'
RNZ
CALL GETCHR
RM
CPI '^'
RZ
ANI 01FH
RET
;
GETCHR:
PUSH H
LHLD STRPTR
MVI A,EOF
CMP M
JZ WIERD
LDA EOSTR
CMP M
JZ WIERD
INX H
SHLD STRPTR
CMP M
DCX H
MOV L,M
JNZ READY
SUB A
STA SWITCH
READY:
MOV A,L
POP H
ORA A
RET
;
WIERD:
POP PSW
SUB A
STA SWITCH
DCR A
MVI A,'?'
POP H
RET
;
END