.PREL .IDENT HOOKS .INSERT BBEQU.ASM .DEFINE NULRET=[ RET .WORD 0] HKRST0:: JMP BEGIN# ; HARD RESET HVTEXT:: .WORD TEXT# ; TEXT AREA START HVDFTL:: .WORD 08C00H ; TEXT AREA LIMIT HKHLT:: NULRET ; HALT HOOK HKSINT:: JMP KBSCAN ; SCREEN INTERRUPT HKLPIN:: NULRET ; LITE PEN INTERRUPT HKSTOP:: NULRET ; STOP HOOK HKMVD:: JMP MVDOWN# ; MOVE DOWN HKMVU:: JMP MVUP# ; MOVE UP HKFLN:: NULRET ; FIND LINE NUMBER EXEC0:: JMP EXC0LA# ; EXECUTE A COMMAND FIN:: JMP FINLA# ; FINISH A COMMAND HKUCMD:: JMP DEFLT# ; USER COMMAND HOOK HKUFUN:: JMP NOTF# ; USER FUNCTION HOOK EXPR:: JMP EXPRLA# ; EXPRESSION EVALUATOR HKTSTV:: NULRET ; TEST VARIABLE HKCLRS:: NULRET ; CLEAR SCREEN HOOK OUTCH:: JMP OUTCLA# ; OUTPUT A CHARACTER CHKIO:: JMP CKIOLA# ; INPUT A CHARACTER PNOTE:: JMP PNOTLA# ; PLAY NOTE HKERR:: JMP ERROR# ; REPORT AN ERROR HKHCHK:: NULRET ; HALT CHECKER ; UART EQUATES UARTD=0E0H UARTS=0E1H ; KEYBOARD SCANNER KBSCAN:: IN UARTS ; CHECK STATUS ANI 2 ; IS A CHAR THERE? RZ IN UARTD ; GRAB A CHAR ..GOTK: ANI 7FH ; ZAP PARITY CPI 20H ; CONTROL CHARACTER? JRNC ..STUF ; JUMP IF NOT ; WE GOT A CONTROL CHARACTER - LOOKUP IN TRANSLATE TABLE MOV C,A MVI B,0 LXI H,CTRLTBL DAD B MOV A,M ANA A ; A HALT CHAR? JRNZ ..STUF ; JUMP IF NOT INR A ; SET THE HALT FLAG STA HLTFLG# RET ..STUF: MOV E,A ; SAVE CHAR LHLD KBBPC# ; GET BUFFER POINTERS MOV A,L ; A=PRODUCER CALL BUMPKB# CMP H ; IS THE BUFFER FULL RZ ; IF SO - IGNORE THE CHAR STA KBPRO# ; ELSE UPDATE THE POINTER MVI H,0 ; AND STORE AT OLD PTR VAL LXI B,KEYBUF# DAD B MOV M,E RET ; CONTROL CHARACTER TRANSLATE TABLE CTRLTBL: .BYTE 0 ; NULL .BYTE 76H ; A - RND .BYTE 71H ; B - BOX .BYTE 69H ; C - CLEAR .BYTE 78H ; D - DATA .BYTE 66H ; E - EDIT KEY .BYTE 72H ; F - FOR .BYTE 6FH ; G - GOSUB .BYTE RUBOUT ; H - RUBOUT .BYTE 73H ; I - INPUT .BYTE 67H ; J - GO+10 .BYTE 6DH ; K - IF .BYTE 68H ; L - LIST .BYTE CR ; CARRIAGE RETURN .BYTE 6BH ; N - NEXT .BYTE 79H ; O - CIRCLE .BYTE 74H ; P - PRINT .BYTE 7DH ; Q - SNAP .BYTE 70H ; R - RETURN .BYTE 75H ; S - STEP .BYTE 77H ; T - TO .BYTE 7AH ; U - POINT .BYTE 7BH ; V - DEFAULT .BYTE 7CH ; W - SHOW .BYTE 6AH ; X - RUN .BYTE 7FH ; Y - SCROLL .BYTE 7EH ; Z - ZERO .BYTE 0 ; ESCAPE - HALT .BYTE 6CH ; BACKSLASH - LINE .BYTE 67H ; CLOSE SQUARE BKT - GO + 10 .BYTE 62H ; CARAT - MULTIPLY .BYTE 63H ; UNDERLINE - DIVIDE .END