;******************************************************** ;* * ;* KEYBOARD INPUT DEFINITION * ;* * ;* 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 ; MAXI EQU 4 BOOT EQU 0 BDOS EQU 5 FCBL EQU 05CH FTYP EQU FCBL+9 FCBCR EQU FCBL+32 PRINTF EQU 9 OPENF EQU 15 CLOSEF EQU 16 READF EQU 20 SETDMA EQU 26 LF EQU 0AH CR EQU 0DH ; FRERAM EQU 5C00H ; ORG 100H ; JMP BEGIN ; FREPTR: DW FRERAM CSVPTR: DS 2 CIVPTR: DS 2 DMATMP: DW 0 COUNT: DB 0 ; BEGIN: LXI D,FTYP LXI B,03 LXI H,KIDFIL CALL MOVIT JMP OPEN ; MOVIT: MOV A,B ORA C RZ MOV A,M STAX D INX H INX D DCX B JMP MOVIT ; OPEN: LHLD FREPTR LXI D,256 DAD D SHLD DMATMP XCHG MVI C,SETDMA CALL BDOS LXI D,FCBL MVI C,OPENF CALL BDOS INR A LXI D,MESNOF JZ FINISH READ: LXI D,FCBL MVI C,READF CALL BDOS ORA A JNZ CLOSE LXI H,COUNT INR M MOV A,MAXI DB 0BEH LXI D,MESBIG JC FINISH LHLD DMATMP LXI D,128 DAD D SHLD DMATMP XCHG MVI C,SETDMA CALL BDOS JMP READ ; CLOSE: LXI D,FCBL MVI C,CLOSEF CALL BDOS JMP MODIFY ; MESNOF: DB 'NO' KIDFIL: DB 'KID FILE $' MESBIG: DB 'KID FILE IS TOO BIG $' NOKIP: DB 'KIP ABSENT $' ALLOK: DB 'KID READ OK $' ; PATCH: LHLD CSVPTR CALL LOADDE LHLD FREPTR INX H CALL STORDE LHLD CIVPTR CALL LOADDE LHLD FREPTR LXI B,4 DAD B CALL STORDE LHLD FREPTR LXI B,6 DAD B XCHG LHLD CSVPTR CALL STORDE LHLD FREPTR LXI B,9 DAD B XCHG LHLD CIVPTR CALL STORDE RET ; LOADDE: MOV E,M INX H MOV D,M RET ; STORDE: MOV M,E INX H MOV M,D RET ; TSTJMP: LHLD FREPTR MVI A,0C3H CMP M STC RNZ INX H MOV A,M ORA A RNZ INX H MOV A,M ORA A RET ; MODIFY: LHLD 01 LXI D,3 DAD D INX H SHLD CSVPTR INX H INX H INX H SHLD CIVPTR CALL TSTJMP LXI D,NOKIP JC FINISH CZ PATCH LXI D,ALLOK FINISH: MVI C,PRINTF CALL BDOS JMP BOOT ; END