* *========================* * PALOALTO * * ASSEMBLY LISTING * *========================* * EXIT EQU 0C004H SOLOUT EQU 0C019H SOLIN EQU 0C01FH SPEED EQU 0C80BH LSTROM EQU 007FFH * ORG 0000H * START DI LXI SP,STACK JMP ST1 ASC 'L' * XTHL RST 5 CMP M JMP TC1 * CRLF MVI A,0DH PUSH B MOV B,A PUSH PSW JMP OC2 NOP NOP * CALL EXPR2 PUSH H JMP EXPR1 MOV D,A MOV A,H CMP D RNZ MOV A,L CMP E RET ASC "AN" * SS1 LDAX D CPI 20H RNZ INX D JMP SS1 POP PSW CALL FIN JMP QWHAT ASC 'G' * RST 5 SUI 40H RC JNZ TV1 INX D CALL PARN DAD H JC QHOW PUSH D XCHG CALL SIZE RST 4 JC ASORRY LXI H,VARBGN CALL SUBDE POP D RET * TV1 CPI 1BH CMC RC INX D LXI H,VARBGN RLC ADD L MOV L,A MVI A,00H ADC H MOV H,A RET * TC1 INX H JZ TC2 PUSH B MOV C,M MVI B,00H DAD B POP B DCX D * TC2 INX D INX H XTHL RET * TSTNUM LXI H,00H MOV B,H RST 5 * TN1 CPI 30H RC CPI 3AH RNC MVI A,0F0H ANA H JNZ QHOW INR B PUSH B MOV B,H MOV C,L DAD H DAD H DAD B DAD H LDAX D INX D ANI 0FH ADD L MOV L,A MVI A,00H ADC H MOV H,A POP B LDAX D JP TN1 QHOW PUSH D AHOW LXI D,HOW JMP ERROR HOW ASC 'HOW?' DB 0DH OK DB 20H *OK CHANGED (CHECKMARK) DB 06H DB 0DH WHAT ASC 'WHAT?' DB 0DH SORRY ASC 'SORRY' DB 0DH * ST1 NOP NOP NOP LXI D,OK SUB A CALL PRTSTG LXI H,ST2+1 SHLD CURRNT * ST2 LXI H,00H SHLD LOPVAR SHLD STKGOS * ST3 MVI A,20H CALL GETLN PUSH D LXI D,BUFFER CALL TSTNUM RST 5 MOV A,H ORA L POP B JZ DIRECT DCX D MOV A,H STAX D DCX D MOV A,L STAX D PUSH B PUSH D MOV A,C SUB E PUSH PSW CALL FNDLN PUSH D JNZ ST4 PUSH D CALL FNDNXT POP B LHLD TXTUNF CALL MVUP MOV H,B MOV L,C SHLD TXTUNF * ST4 POP B LHLD TXTUNF POP PSW PUSH H CPI 03H JZ START ADD L MOV L,A MVI A,00H ADC H MOV H,A LXI D,TXTEND RST 4 JNC QSORRY SHLD TXTUNF POP D CALL MVDOWN POP D POP H CALL MVUP JMP ST3 * TAB1 ASC "LIST" DDB LIST+8000H ASC "RUN" DDB RUN+8000H ASC "NEW" DDB NEW+8000H * TAB2 ASC "NEXT" DDB NEXT+8000H ASC "LET" DDB LET+8000H ASC "IF" DDB IF+8000H ASC "GOTO" DDB GOTO+8000H ASC "GOSUB" DDB GOSUB+8000H ASC "RETURN" DDB RETURN+8000H ASC "REM" DDB REM+8000H ASC "FOR" DDB FOR+8000H ASC "INPUT" DDB INPUT+8000H ASC "PRINT" DDB PRINT+8000H ASC "STOP" DDB STOP+8000H ASC "CALL" DDB CALL+8000H ASC "POKE" DDB POKE+8000H ASC "END" DDB STOP+8000H ASC "'" DDB REM+8000H ASC "SET" DDB SET+8000H ASC "BYE" DDB BYE+8000H * DEFLT DDB DEFLT+8000H * TAB4 ASC "RND" DDB RND+8000H ASC "ABS" DDB ABS+8000H ASC "FREE" DDB SIZE+8000H * ASC "PEEK" DDB PEEK+8000H ASC "CHR$" DDB CHR+8000H ASC "TAB" DDB TAB+8000H * XP40 DDB XP40+8000H * ASC "ORE FUNCTIONS" * TAB5 ASC "TO" DDB FR1+8000H DDB QWHAT+8000H * TAB6 ASC "STEP" DDB FR2+8000H DDB FR3+8000H * TAB8 ASC ">=" DDB XP11+8000H ASC "#" DDB XP12+8000H ASC ">" DDB XP13+8000H ASC "=" DDB XP15+8000H ASC "<=" DDB XP14+8000H ASC "<" DDB XP16+8000H DDB XP17+8000H * DIRECT LXI H,TAB1-1 * EXEC RST 5 PUSH D EX1 LDAX D INX D CPI 02EH JZ EX3 INX H CMP M JZ EX1 MVI A,07FH DCX D CMP M JC EX5 * EX2 INX H CMP M JNC EX2 INX H POP D JMP EXEC * EX3 MVI A,07FH EX4 INX H CMP M JNC EX4 * EX5 MOV A,M INX H MOV L,M ANI 07FH MOV H,A POP PSW PCHL * NEW CALL ENDCHK LXI H,TXTBGN SHLD TXTUNF * STOP CALL ENDCHK RST 0 * RUN CALL ENDCHK LXI D,TXTBGN * RUNNXL LXI H,00H CALL FNDPLN JC START * RUNTSL XCHG SHLD CURRNT XCHG INX D INX D * RUNSML CALL CHKOUT LXI H,TAB2-1 JMP EXEC * GOTO RST 3 PUSH D CALL ENDCHK CALL FNDLN JNZ AHOW POP PSW JMP RUNTSL * LIST CALL TSTNUM CALL ENDCHK CALL FNDLN * LS1 JC START CALL PRTLN CALL CHKIN CALL FNDPLN JMP LS1 * PRINT MVI C,06H RST 1 ASC ':' DB PR2-$-1 CALL CRLF JMP RUNSML * PR2 RST 1 DB 0DH (C/R) DB PR0-$-1 CALL CRLF JMP RUNNXL * PR0 RST 1 ASC '#' DB PR1-$-1 RST 3 MOV C,L JMP PR3 * PR1 CALL QTSTG JMP PR8 * PR3 RST 1 ASC ';' DB PR6-$-1 CALL FIN JMP PR0 * PR6 CALL CRLF RST 6 * PR8 RST 3 PUSH B CALL PRTNUM POP B JMP PR3 * GOSUB CALL PUSHA RST 3 PUSH D CALL FNDLN JNZ AHOW LHLD CURRNT PUSH H LHLD STKGOS PUSH H LXI H,00H SHLD LOPVAR DAD SP SHLD STKGOS JMP RUNTSL * RETURN CALL ENDCHK LHLD STKGOS MOV A,H ORA L JZ QWHAT SPHL POP H SHLD STKGOS POP H SHLD CURRNT POP D CALL POPA RST 6 * FOR CALL PUSHA CALL SETVAL DCX H SHLD LOPVAR LXI H,TAB5-1 JMP EXEC * FR1 RST 3 SHLD LOPLMT LXI H,TAB6-1 JMP EXEC * FR2 RST 3 JMP FR4 FR3 LXI H,01H FR4 SHLD LOPINC FR5 LHLD CURRNT SHLD LOPLN XCHG SHLD LOPPT LXI B,0AH LHLD LOPVAR XCHG MOV H,B MOV L,B DAD SP DB 3EH * FR7 DAD B MOV A,M INX H ORA M JZ FR8 MOV A,M DCX H CMP D JNZ FR7 MOV A,M CMP E JNZ FR7 XCHG LXI H,00H DAD SP MOV B,H MOV C,L LXI H,0AH DAD D CALL MVDOWM SPHL * FR8 LHLD LOPPT XCHG RST 6 * NEXT RST 7 JC QWHAT SHLD VARNXT * NX0 PUSH D XCHG LHLD LOPVAR MOV A,H ORA L JZ AWHAT RST 4 JZ NX3 POP D CALL POPA LHLD VARNXT JMP NX0 * NX3 MOV E,M INX H MOV D,M LHLD LOPINC PUSH H DAD D XCHG LHLD LOPVAR MOV M,E INX H MOV M,D LHLD LOPLMT POP PSW ORA A JP NX1 XCHG * NX1 CALL CKHLDE POP D JC NX2 LHLD LOPLN SHLD CURRNT LHLD LOPPT XCHG RST 6 * NX2 CALL POPA RST 6 * REM LXI H,00H DB 3EH * IF RST 3 MOV A,H ORA L JNZ RUNSML CALL FNDSKP JNC RUNTSL RST 0 * INPERR LHLD VARNXT SPHL POP H SHLD CURRNT POP D POP D * INPUT PUSH D CALL QTSTG JMP IP2 RST 7 JC IP4 JMP IP3 * IP2 PUSH D RST 7 JC QWHAT LDAX D MOV C,A SUB A STAX D POP D CALL PRTSTG MOV A,C DCX D STAX D * IP3 PUSH D XCHG LHLD CURRNT PUSH H LXI H,INPUT SHLD CURRNT LXI H,00H DAD SP SHLD VARNXT PUSH D MVI A,20H CALL GETLN LXI D,BUFFER RST 3 NOP * NOP * LATER TAKE THESE OUT NOP * POP D XCHG MOV M,E INX H MOV M,D POP H SHLD CURRNT POP D * IP4 POP PSW RST 1 ASC "," DB IP5-$-1 JMP INPUT * IP5 RST 6 DEFLT LDAX D CPI 0DH JZ LT1 * LET CALL SETVAL RST 1 ASC "," DB LT1-$-1 JMP LET LT1 RST 6 * EXPR1 LXI H,TAB8-1 JMP EXEC * XP11 CALL XP18 RC MOV L,A RET * XP12 CALL XP18 RZ MOV L,A RET * XP13 CALL XP18 RZ RC MOV L,A RET * XP14 CALL XP18 MOV L,A RZ RC MOV L,H RET * XP15 CALL XP18 RNZ MOV L,A RET * XP16 CALL XP18 RNC MOV L,A RET * XP17 POP H RET * XP18 MOV A,C POP H POP B PUSH H PUSH B MOV C,A CALL EXPR2 XCHG XTHL CALL CKHLDE POP D LXI H,00H MVI A,01H RET * EXPR2 RST 1 ASC "-" DB XP21-$-1 LXI H,00H JMP XP26 * XP21 RST 1 ASC "+" DB XP22-$-1 * XP22 CALL EXPR3 * XP23 RST 1 ASC "+" DB XP25-$-1 PUSH H CALL EXPR3 * XP24 XCHG XTHL MOV A,H XRA D MOV A,D DAD D POP D JM XP23 XRA H JP XP23 JMP QHOW * XP25 RST 1 ASC "-" DB XP42-$-1 * XP26 PUSH H CALL EXPR3 CALL CHGSGN JMP XP24 * EXPR3 CALL EXPR4 * XP31 RST 1 ASC "*" DB XP34-$-1 PUSH H CALL EXPR4 MVI B,00H CALL CHKSGN XCHG XTHL CALL CHKSGN MOV A,H ORA A JZ XP32 MOV A,D ORA D XCHG JNZ AHOW * XP32 MOV A,L LXI H,00H ORA A JZ XP35 * XP33 DAD D JC AHOW DCR A JNZ XP33 JMP XP35 * XP34 RST 1 ASC "/" DB XP42-$-1 PUSH H CALL EXPR4 MVI B,00H CALL CHKSGN XCHG XTHL CALL CHKSGN MOV A,D ORA E JZ AHOW PUSH B CALL DIVIDE MOV H,B MOV L,C POP B * XP35 POP D MOV A,H ORA A JM QHOW MOV A,B ORA A CM CHGSGN JMP XP31 * EXPR4 LXI H,TAB4-1 JMP EXEC * XP40 RST 7 JC XP41 MOV A,M INX H MOV H,M MOV L,A RET * XP41 CALL TSTNUM MOV A,B ORA A RNZ * PARN RST 1 ASC "(" DB XP43-$-1 RST 3 RST 1 ASC ")" DB XP43-$-1 XP42 RET * XP43 JMP QWHAT * RND CALL PARN MOV A,H ORA A JM QHOW ORA L JZ QHOW PUSH D PUSH H LHLD RANPNT LXI D,LSTROM RST 4 JC RA1 LXI H,START * RA1 MOV E,M INX H MOV D,M SHLD RANPNT POP H XCHG PUSH B CALL DIVIDE POP B POP D INX H RET * ABS CALL PARN CALL CHKSGN MOV A,H ORA H JM QHOW RET * SIZE LHLD TXTUNF PUSH D XCHG LXI H,VARBGN CALL SUBDE POP D RET * DIVIDE PUSH H MOV L,H MVI H,00H CALL DV1 MOV B,C MOV A,L POP H MOV H,A * DV1 MVI C,0FFH DV2 INR C CALL SUBDE JNC DV2 DAD D RET * SUBDE MOV A,L SUB E MOV L,A MOV A,H SBB D MOV H,A RET * CHKSGN MOV A,H ORA A RP * CHGSGN MOV A,H CMA MOV H,A MOV A,L CMA MOV L,A INX H MOV A,B XRI 080H MOV B,A RET * CKHLDE MOV A,H XRA D JP CK1 XCHG * CK1 RST 4 RET * SETVAL RST 7 JC QWHAT PUSH H * RST 1 ASC "=" DB SV1-$-1 RST 3 MOV B,H MOV C,L POP H MOV M,C INX H MOV M,B RET * SV1 JMP QWHAT * FIN RST 1 ASC ":" DB FI1-$-1 POP PSW JMP RUNSML * FI1 RST 1 DB 0DH (C/R) DB FI2-$-1 POP PSW JMP RUNNXL FI2 RET * ENDCHK RST 5 CPI 0DH RZ * QWHAT PUSH D AWHAT LXI D,WHAT ERROR SUB A CALL PRTSTG POP D LDAX D PUSH PSW SUB A STAX D LHLD CURRNT PUSH H MOV A,M INX H ORA M POP D JZ START MOV A,M ORA A JM INPERR CALL PRTLN DCX D POP PSW STAX D MVI A,3FH RST 2 SUB A CALL PRTSTG RST 0 * QSORRY PUSH D ASORRY LXI D,SORRY JMP ERROR * GETLN RST 2 LXI D,BUFFER GL1 CALL CHKIO JZ GL1 RST 2 CPI 0AH JZ GL1 NOP * NOP * NO NEED NOP * FOR THESE NOP * CPI 07FH JZ GL3 CPI 00H JZ GL4 STAX D INX D CPI 0DH RZ MOV A,E CPI 7FH JNZ GL1 * GL3 MOV A,E CPI 37H JZ GL4 DCX D MVI A,5FH RST 2 JMP GL1 * GL4 CALL CRLF MVI A,20H JMP GETLN * FNDLN MOV A,H ORA A JM QHOW LXI D,TXTBGN * FNDPLN PUSH H LHLD TXTUNF DCX H RST 4 POP H RC LDAX D SUB L MOV B,A INX D LDAX D SBB H JC FL2 DCX D ORA B RET * FNDNXT INX D FL2 INX D * FNDSKP LDAX D CPI 0DH JNZ FL2 INX D JMP FNDPLN * PRTSTG MOV B,A PS1 LDAX D INX D CMP B RZ RST 2 CPI 0DH JNZ PS1 RET * QTSTG RST 1 DB '"' DB QT3-$-1 MVI A,22H * QT1 CALL PRTSTG CPI 0FFH POP H JZ RUNNXL * QT2 INX H INX H INX H PCHL * QT3 RST 1 ASC "'" DB QT4-$-1 MVI A,27H JMP QT1 * QT4 RST 1 DB 5FH (RUB) DB QT5-$-1 MVI A,8DH RST 2 RST 2 POP H JMP QT2 * QT5 RET * PRTNUM PUSH D LXI D,0AH PUSH D MOV B,D DCR C CALL CHKSGN JP PN1 MVI B,02DH DCR C * PN1 PUSH B PN2 CALL DIVIDE MOV A,B ORA C JZ PN3 XTHL DCR L PUSH H MOV H,B MOV L,C JMP PN2 * PN3 POP B PN4 DCR C MOV A,C ORA A JM PN5 MVI A,20H RST 2 JMP PN4 * PN5 MOV A,B RST 2 MOV E,L * PN6 MOV A,E CPI 0AH POP D RZ ADI 30H RST 2 JMP PN6 * PRTLN LDAX D MOV L,A INX D LDAX D MOV H,A INX D MVI C,04H CALL PRTNUM MVI A,20H RST 2 SUB A CALL PRTSTG RET * MVUP RST 4 RZ LDAX D STAX B INX D INX B JMP MVUP * MVDOWM MOV A,B SUB D JNZ MD1 MOV A,C SUB E RZ * MD1 DCX D DCX H LDAX D MOV M,A JMP MVDOWM * POPA POP B POP H SHLD LOPVAR MOV A,H ORA L JZ PP1 POP H SHLD LOPINC POP H SHLD LOPLMT POP H SHLD LOPLN POP H SHLD LOPPT * PP1 PUSH B RET * PUSHA LXI H,STKLMT CALL CHGSGN POP B DAD SP JNC QSORRY LHLD LOPVAR MOV A,H ORA L JZ PU1 LHLD LOPPT PUSH H LHLD LOPLN PUSH H LHLD LOPLMT PUSH H LHLD LOPINC PUSH H LHLD LOPVAR * PU1 PUSH H PUSH B RET * OC2 CALL SOLOUT POP PSW POP B CPI 0DH RNZ MVI A,0AH RST 2 MVI A,0DH RET * SET RST 3 MOV A,L STA SPEED RST 6 NOP NOP NOP NOP * CHKIO CALL SOLIN RZ ANI 7FH CPI 0BH RNZ MOV B,A CALL SOLOUT JMP ST3 * CHKOUT CALL SOLIN RZ ANI 7FH CPI 00H RNZ JMP ST1 * CHKIN CALL SOLIN RZ ANI 7FH JZ ST1 CPI 20H RNZ * CHKN1 CALL SOLIN JZ CHKN1 RET * BYE JMP EXIT * CHR CALL PARN DCR C * CHR1 DCR C MOV A,C * CALL ORA A JM CHR2 MVI B,20H CALL SOLOUT JMP CHR1 * CHR2 MOV B,L CALL SOLOUT POP PSW POP PSW POP PSW POP PSW JMP PR3 * TAB CALL PARN MOV C,L * TB1 DCR C MOV A,C ORA A JM TB2 MVI B,020H CALL SOLOUT JMP TB1 * TB2 POP PSW POP PSW POP PSW POP PSW JMP PR3 * PEEK CALL PARN MOV L,M MVI H,00H RET * POKE RST 3 PUSH H RST 1 ASC "," DB PK1-$-1 RST 3 MOV A,L POP H MOV M,A RST 6 * PK1 JMP QWHAT DB PK2-$-1 LDAX D INX D MOV L,A MVI H,00H * PK2 RST 1 ASC '"' DB ASC1-$-1 RET * ASC1 JMP QWHAT * ORG 0800H OCSW DB 0FFH CURRNT DW 0 STKGOS DW 0 VARNXT DW 0 LOPVAR DW 0 LOPINC DW 0 LOPLMT DW 0 LOPLN DW 0 LOPPT DW 0 RANPNT DW START TXTUNF DW TXTBGN TXTBGN DS 1 ORG 1F00H TXTEND EQU $ VARBGN DS 54 DS 1 BUFFER DS 72 BUFEND EQU $ DS 40 STKLMT EQU $ ORG 2000H STACK EQU $ END