.PREL .IDENT EXEC .INSERT MACRO.LIB .INSERT BBEQU.ASM ; TABLE GIVING JUMP TO ADDRESS FOR COMMANDS TOKJT: .WORD LIST# .WORD CLRSCR# .WORD RUN .WORD NEXT# .WORD LINEDR# .WORD IFF# .WORD GOTO# .WORD GOSUB# .WORD RETURN# .WORD BOXDRW# .WORD FOR# .WORD INPUT# .WORD PRINT# .WORD QWHAT# ; STEP .WORD QWHAT# ; RND .WORD QWHAT# ; TO .WORD INIDAT# ; DATA .WORD CIRCLE# .WORD POINT# .WORD RSETDV# ; DEFAULT .WORD SHOW# .WORD SNAP# .WORD VARZRO# ; ZERO .WORD SCROLC# ; SCROLL ; DIRECT AND EXEC EXC0LA:: RSTIGN ; GET FIRST NONBLANK PUSH D CPI 68H ; IS SHE A TOKEN? JRC EXEC0A ; NO CPI 80H JRNC EXEC0A ; NO ; WE FOUND A TOKEN - LOOKUP IN TABLE AND JUMP TO IT RLC MOV E,A MVI D,0 LXI H,TOKJT-208 DAD D MOV E,M INX H MOV D,M XCHG POP D INX D PCHL ; NOT A TOKEN - A VARIABLE PERHAPS? EXEC0A: CALL TSTV# JRC EXEC0B ; NO - SEARCH 1 TSTC '=',EXEC0B ; MAYBE POP B ; THROW OUT OLD PTR CALL SETV1# ; ASSIGNMENT 1 ; RSTFIN JMP FINISH EXEC0B: POP D LXI H,TAB2 EXEC:: RSTIGN EX0: PUSH D EX1: LDAX D CPI '.' ; CHECK FOR ABBREVIATION JRZ GOTDOT BIT 7,M JRNZ ATEND CMP M JRNZ MISMAT INX H INX D JMPR EX1 MISMAT: INX H BIT 7,M JRZ MISMAT SKPBAD: INX H INX H INX H MOV A,M POP D INR A JRZ EOL JMPR EX0 ATEND: INX D ORI 80H CMP M JRNZ SKPBAD ABRLNK: POP PSW ; MATCH STACK CLEANUP EOL: INX H MOV A,M INX H MOV H,M MOV L,A PCHL GOTDOT: INX D ; SKIP PAST DOT ..SKD1: BIT 7,M JRNZ ABRLNK ; TILL WE HIT JUMP ADDR INX H JMPR ..SKD1 RUN: LDED HVTEXT# RUNNXL:: LXI H,0 CALL FNDLP# JC RSTART# RUNTSL:: SDED CURRNT# CALL WHATSU# ; CHECK FOR HALT JRNZ ..OK ; AND FOR TRACE KEY PUSH D ; TRACE IS WANTED CALL PRTLN# CALL PRTSTG# POP D ..OK: INX D INX D RUNSML:: CALL WHATSU# ; CHECK FOR INTERRUPT KEY JMP EXEC0# ; END A LINE ROUTINE FINISH:: CALL FIN# JMP QWHAT# FINLA:: TSTCC 3BH,FI1 POP PSW JMPR RUNSML FI1: TSTCC CR,FI2 POP PSW JMPR RUNNXL FI2: RET TAB2: ITEM '.',REM# ITEM 'TV',PUTCD# ITEM 'MU',PUTMU# ITEM '&',PUTIO# ITEM 'BYTE',BYTEVAR# ITEM 'LIST',LIST# ITEM 'CLEAR',CLRSCR# ITEM 'RUN',RUN ITEM 'NEXT',NEXT# ITEM 'LINE',LINEDR# ITEM 'IF',IFF# ITEM 'GOTO',GOTO# ITEM 'GOSUB',GOSUB# ITEM 'RETURN',RETURN# ITEM 'BOX',BOXDRW# ITEM 'FOR',FOR# ITEM 'INPUT',INPUT# ITEM 'PRINT',PRINT# ITEM 'CALL',DOCALL# ITEM 'CIRCLE',CIRCLE# ITEM 'POINT',POINT# ITEM 'SNAP',SNAP# ITEM 'SHOW',SHOW# ITEM 'SCROLL',SCROLC# ITEM 'DATA',INIDAT# ITEM '$',BCDMAT# .BYTE ':' TOKEN 68H,TLIST# ITEM ':LIST',TLIST# .BYTE ':' TOKEN 74H,TOUTPU# ITEM ':PRINT',TOUTPU# .BYTE ':' TOKEN 73H,TINPUT# ITEM ':INPUT',TINPUT# .BYTE ':' TOKEN 70H,TRETUR# ITEM ':RETURN',TRETUR# .BYTE ':' TOKEN 6AH,TLOAD# ITEM ':RUN',TLOAD# .BYTE '*' TOKEN 74H,TPRINT# ITEM '*PRINT',TPRINT# ITEM 'STOP',STOP# ITEM 'ZERO',VARZRO# ITEM 'DEFAULT',RSETDV# ITEM 'NEW',ZAPALL# TOKEN 07FH,HKUCMD# .END