*====================================== * * LISP-09 INTERPRETER * vers.2.08 * written by TERUO SERIZAWA * 1982.11.04 * 83.10.07 * *====================================== * * * ADDRESS MAP * 0000 HSHTOP EQU $0000 0800 HSHBTM EQU HSHTOP+$800 * atom hash table * # of atoms : 1024 * if contents=0 : undefined * else : pointer to atom information table * 0800 CELTOP EQU HSHBTM 8000 CELBTM EQU $8000 * cell area ( lists and numbers ) * # of cells : 7680 * 8000 LSPTOP EQU CELBTM 94DB LSPBTM EQU XXXXX * LISP-09 interpreter * * S stack is here A000 SSKBTM EQU $A000 A000 ATMTOP EQU SSKBTM * atom information table * * ATMEND indicates table's end ( variable ) * USKTOP indicates U stack's barrier ( variable ) * ( [USKTOP] == [ATMEND] + 30 ) * * U stack is here C000 USKBTM EQU $C000 * * $C000-$FFFF FLEX SYSTEM * *-------------------------------------- * * MAIN PROGRAM * *-------------------------------------- * 8000 ORG LSPTOP 8000 16 14D8 COLDS LBRA STARTU >8003 16 0003 WARMS LBRA WARMS2 * * unbind variables * 8006 17 0A94 WARMS1 LBSR UNBIND 8009 11B3 813F WARMS2 CMPU USKTOP 800D 25 06 BCS START 800F 1183 C000 CMPU #USKBTM 8013 25 F1 BCS WARMS1 * * initialize system * 8015 10CE A000 START LDS #SSKBTM 8019 CE C000 LDU #USKBTM 801C 8D 14 BSR INITIO 801E 8D 21 BSR INITVA 8020 17 058A LBSR TERPRI * * * LISP system top level function * 8023 17 06D8 START1 LBSR READ 8026 30 A4 LEAX ,Y 8028 17 0953 LBSR EVAL 802B 30 A4 LEAX ,Y 802D 17 0577 LBSR PRINT 8030 20 F1 BRA START1 * * initialize I/O * 8032 17 1138 INITIO LBSR CLOSE 8035 7F 8132 CLR ECHOSW 8038 7F 8139 CLR OLDCHR 803B BE 80B3 LDX IBFP 803E 6F 84 CLR ,X 8040 39 RTS * * initialize system variables * 8041 7F 8135 INITVA CLR GOSW 8044 7F 8136 CLR RTNSW 8047 8E 0418 LDX #NIL 804A BF 8137 STX CATCHL 804D 39 RTS *-------------------------------------- * * CONSTANTS AND VARIABLES * *-------------------------------------- * * * MACROES * TESTS MACRO CMPS #LSPBTM+100 LBCS ERRSSK ENDM * TESTU MACRO CMPU USKTOP LBCS ERRUSK ENDM * * * ASCII CHARACTERS * 0007 BEL EQU $07 0008 BS EQU $08 000A LF EQU $0A 000C FF EQU $0C 000D CR EQU $0D 0018 CAN EQU $18 * * * FUNCTION TYPES * 0000 N0 EQU 0 0001 NSUBR EQU 1 0002 NFSUBR EQU 2 0003 NLSUBR EQU 3 0007 NERR EQU 7 0009 NEXPR EQU 9 000A NFEXPR EQU 10 000C NMACRO EQU 12 * * * SYSTEM VARIABLES * 0064 IBFL EQU 100 804E IBF RMB IBFL 80B2 00 FCB 0 80B3 804E IBFP FDB IBF * 0064 ABFL EQU 100 80B5 ABF RMB ABFL 8119 00 FCB 0 811A 80B5 ABFP FDB ABF * 811C 30 30 30 30 GBUF FCC /0000/ 8120 0000 FDB 0 8122 NX RMB 4 8126 NY RMB 4 812A 0000 FDB 0 812C NR RMB 4 8130 OP RMB 2 * 8132 00 ECHOSW FCB 0 8133 00 CARSW FCB 0 8134 00 GBCSW FCB 0 8135 00 GOSW FCB 0 8136 00 RTNSW FCB 0 8137 0418 CATCHL FDB NIL * 8139 00 OLDCHR FCB 0 813A 00 NSIGN FCB 0 * 813B 0418 FREE FDB NIL 813D A773 ATMEND FDB AAAAA 813F A791 USKTOP FDB AAAAA+30 *-------------------------------------- * * ARITHMETIC FUNCTIONS * *-------------------------------------- *** *** ( QUOTIENT n1 n2 ... ) *** val <= n1 / n2 / ... *** 8141 CC 828D QUOTIE LDD #DIV 8144 20 03 BRA TIMES1 *** *** ( TIMES n1 n2 ... ) LSUBR *** val <= n1 * n2 * ... *** 8146 CC 8316 TIMES LDD #MULT 8149 6D 84 TIMES1 TST ,X 814B 2B 53 BMI ONE 814D 20 0C BRA ARITH *** *** ( DIFFERENCE n1 n2 ... ) LSUBR *** val <= n1 - n2 - ... *** 814F CC 838E DIFFER LDD #NSUB 8152 20 03 BRA PLUS1 *** *** ( PLUS n1 n2 ... ) LSUBR *** val <= n1 + n2 + ... *** 8154 CC 837F PLUS LDD #NADD 8157 6D 84 PLUS1 TST ,X 8159 2B 3B BMI ZERO * * execute arithmetic functions * X : list of arguments * 815B FD 8130 ARITH STD OP 815E 36 10 PSHU X 8160 AE 84 LDX ,X 8162 8D 5A BSR NUMX 8164 10AE C4 ARITH1 LDY ,U 8167 10AE 22 LDY 2,Y 816A 10AF C4 STY ,U 816D 10AE A4 LDY ,Y 8170 2B 7A BMI MNA0 8172 8D 60 BSR NUMY 8174 AD 9F 8130 JSR [OP] 8178 20 EA BRA ARITH1 *** *** ( MAX n1 n2 ... ) LSUBR *** val <= maximum value of numbers *** 817A CC 83A8 MAX LDD #NMAX 817D 6D 84 TST ,X 817F 2B 29 BMI MINF 8181 20 D8 BRA ARITH *** *** ( MIN n1 n2 ... ) LSUBR *** val <= minimum value of numbers *** 8183 CC 83B5 MIN LDD #NMIN 8186 6D 84 TST ,X 8188 2B 1B BMI INF 818A 20 CF BRA ARITH *** *** ( SIGN n ) SUBR *** if n>0 then val <= 1 *** n=0 0 *** n<0 -1 *** 818C 8D 30 SIGN BSR NUMX 818E 2B 0B BMI MONE 8190 26 0E BNE ONE 8192 EC 02 LDD 2,X 8194 26 0A BNE ONE * * value <= 0 * 8196 8E 8414 ZERO LDX #ZEROV 8199 20 53 BRA MNA * * value <= -1 * 819B 8E 841C MONE LDX #MONEV 819E 20 4E BRA MNA * * value <= 1 * 81A0 8E 8416 ONE LDX #ONEV 81A3 20 49 BRA MNA * * value <= infinity ( largest number ) * 81A5 8E 841A INF LDX #INFV 81A8 20 44 BRA MNA * * value <= minus infinity ( smallest number ) * 81AA 8E 8412 MINF LDX #MINFV 81AD 20 3F BRA MNA * * transpose numerical atom(s) into number register(s) * 81AF 102A 0397 NUMS LBPL ERRNUM 81B3 47 ASRA 81B4 56 RORB 81B5 85 20 BITA #$20 81B7 26 32 BNE NUMRTS 81B9 84 3F ANDA #$3F 81BB 39 RTS * 81BC 8D 16 NUMXY BSR NUMY 81BE 8C 0800 NUMX CMPX #CELTOP 81C1 1025 0385 LBCS ERRNUM 81C5 EC 02 LDD 2,X 81C7 FD 8124 STD NX+2 81CA EC 84 LDD ,X 81CC 8D E1 BSR NUMS 81CE 8E 8122 LDX #NX 81D1 ED 84 STD ,X 81D3 39 RTS * 81D4 108C 0800 NUMY CMPY #CELTOP 81D8 1025 036E LBCS ERRNUM 81DC EC 22 LDD 2,Y 81DE FD 8128 STD NY+2 81E1 EC A4 LDD ,Y 81E3 8D CA BSR NUMS 81E5 108E 8126 LDY #NY 81E9 ED A4 STD ,Y 81EB 39 NUMRTS RTS * * make numerical atom * X : number register * 81EC 33 42 MNA0 LEAU 2,U * 81EE 17 0E8F MNA LBSR NEW 81F1 EC 84 LDD ,X 81F3 58 ASLB 81F4 49 ROLA 81F5 8A 80 ORA #$80 81F7 ED A4 STD ,Y 81F9 EC 02 LDD 2,X 81FB ED 22 STD 2,Y 81FD 39 RTS *** *** ( ADD1 n ) SUBR *** val <= n + 1 *** 81FE 108E 8416 ADD1 LDY #ONEV 8202 8D BA ADD11 BSR NUMX 8204 17 0178 LBSR NADD 8207 20 E5 BRA MNA *** *** ( SUB1 n ) SUBR *** val <= n - 1 *** 8209 108E 841C SUB1 LDY #MONEV 820D 20 F3 BRA ADD11 *** *** ( ABS n ) SUBR *** val <= absolute value of n *** 820F 8D AD ABS BSR NUMX 8211 2A DB BPL MNA 8213 20 02 BRA MINUS1 *** *** ( MINUS n ) SUBR *** val <= - n *** 8215 8D A7 MINUS BSR NUMX 8217 17 00DC MINUS1 LBSR NNEG 821A 20 D2 BRA MNA *** *** ( LOGAND n1 n2 ) SUBR *** logical operation *** val <= n1 and n2 *** 821C 8D 9E LOGAND BSR NUMXY 821E A4 A4 ANDA ,Y 8220 E4 21 ANDB 1,Y 8222 ED 84 STD ,X 8224 EC 02 LDD 2,X 8226 A4 22 ANDA 2,Y 8228 E4 23 ANDB 3,Y 822A ED 02 STD 2,X 822C 20 C0 BRA MNA *** *** ( LOGOR n1 n2 ) SUBR *** logical operation *** val <= n1 or n2 *** 822E 8D 8C LOGOR BSR NUMXY 8230 AA A4 ORA ,Y 8232 EA 21 ORB 1,Y 8234 ED 84 STD ,X 8236 EC 02 LDD 2,X 8238 AA 22 ORA 2,Y 823A EA 23 ORB 3,Y 823C ED 02 STD 2,X 823E 20 AE BRA MNA *** *** ( LOGXOR n1 n2 ) SUBR *** logical ,exclusive-OR> operation *** val <= n1 xor n2 *** 8240 17 FF79 LOGXOR LBSR NUMXY 8243 A8 A4 EORA ,Y 8245 E8 21 EORB 1,Y 8247 ED 84 STD ,X 8249 EC 02 LDD 2,X 824B A8 22 EORA 2,Y 824D E8 23 EORB 3,Y 824F ED 02 STD 2,X 8251 20 9B BRA MNA *** *** ( REMAINDER n1 n2 ) SUBR *** val <= n1 mod n2 *** 8253 17 FF66 REMAIN LBSR NUMXY 8256 8D 35 BSR DIV 8258 30 A4 LEAX ,Y 825A 20 92 BRA MNA *** *** ( DIVIDE n1 n2 ) SUBR *** n1 / n2 *** val <= dot pAir of quotient and remainder *** 825C 17 FF5D DIVIDE LBSR NUMXY 825F 8D 2C BSR DIV 8261 8D 8B BSR MNA 8263 36 20 PSHU Y 8265 8E 8126 LDX #NY 8268 8D 84 BSR MNA 826A 16 0DF8 LBRA CONSU *** *** ( GCD n1 n2 ) SUBR *** greatest common divisor *** val <= GCD ( n1, n2 ) *** 826D 17 FF4C GCD LBSR NUMXY 8270 EC 22 GCD1 LDD 2,Y 8272 34 06 PSHS D 8274 EC A4 LDD ,Y 8276 34 06 PSHS D 8278 8D 13 BSR DIV 827A 35 06 PULS D 827C ED 84 STD ,X 827E 35 06 PULS D 8280 ED 02 STD 2,X 8282 EC 22 LDD 2,Y 8284 26 EA BNE GCD1 8286 EC A4 LDD ,Y 8288 26 E6 BNE GCD1 828A 16 FF61 LBRA MNA * * divide NX by NY * NX <= NX / NY quotient * NY <= NX mod NY remainder * 828D 32 78 DIV LEAS -8,S 828F CC 001E LDD #30 8292 ED 64 STD 4,S 8294 A6 84 LDA ,X 8296 2A 04 BPL DIV1 8298 6C 64 INC 4,S 829A 8D 5A BSR NNEG 829C A6 A4 DIV1 LDA ,Y 829E 2B 04 BMI DIV2 82A0 6C 64 INC 4,S 82A2 8D 41 BSR NNEGY 82A4 EC A4 DIV2 LDD ,Y 82A6 ED E4 STD ,S 82A8 EC 22 LDD 2,Y 82AA ED 62 STD 2,S 82AC CC 0000 LDD #0 82AF ED A4 STD ,Y 82B1 ED 22 STD 2,Y 82B3 8D 54 BSR NASL3 82B5 69 23 DIV3 ROL 3,Y 82B7 69 22 ROL 2,Y 82B9 69 21 ROL 1,Y 82BB 69 A4 ROL ,Y 82BD EC 22 LDD 2,Y 82BF E3 62 ADDD 2,S 82C1 ED 66 STD 6,S 82C3 EC A4 LDD ,Y 82C5 E9 61 ADCB 1,S 82C7 A9 E4 ADCA ,S 82C9 24 06 BCC DIV4 82CB ED A4 STD ,Y 82CD EC 66 LDD 6,S 82CF ED 22 STD 2,Y 82D1 69 03 DIV4 ROL 3,X 82D3 69 02 ROL 2,X 82D5 69 01 ROL 1,X 82D7 69 84 ROL ,X 82D9 6A 65 DEC 5,S 82DB 26 D8 BNE DIV3 82DD 6A 64 DEC 4,S 82DF 32 68 LEAS 8,S 82E1 27 32 BEQ DIVRTS 82E3 8D 11 BSR NNEG * * negate number * Y : number register * 82E5 CC 0000 NNEGY LDD #0 82E8 A3 22 SUBD 2,Y 82EA ED 22 STD 2,Y 82EC CC 0000 LDD #0 82EF E2 21 SBCB 1,Y 82F1 A2 A4 SBCA ,Y 82F3 ED A4 STD ,Y 82F5 39 RTS * * negate number * X : number register * 82F6 CC 0000 NNEG LDD #0 82F9 A3 02 SUBD 2,X 82FB ED 02 STD 2,X 82FD CC 0000 LDD #0 8300 E2 01 SBCB 1,X 8302 A2 84 SBCA ,X 8304 ED 84 STD ,X 8306 39 RTS * * arithmetic shift left * X : number register * 8307 8D 04 NASL4 BSR NASL 8309 8D 02 NASL3 BSR NASL 830B 8D 00 NASL2 BSR NASL 830D 68 03 NASL ASL 3,X 830F 69 02 ROL 2,X 8311 69 01 ROL 1,X 8313 69 84 ROL ,X 8315 39 DIVRTS RTS * * multiply NX with NY * NX <= NX * NY * MMM MACRO LDA &1,S LDB &2,Y MUL ENDM * 8316 EC 02 MULT LDD 2,X 8318 34 06 PSHS D 831A EC 84 LDD ,X 831C 34 06 PSHS D 831E MMM 3,3 8323 ED 02 STD 2,X 8325 MMM 2,2 832A ED 84 STD ,X 832C MMM 3,2 8331 E3 01 ADDD 1,X 8333 ED 01 STD 1,X 8335 24 02 BCC MULT1 8337 6C 84 INC ,X 8339 MULT1 MMM 2,3 833E E3 01 ADDD 1,X 8340 ED 01 STD 1,X 8342 24 02 BCC MULT2 8344 6C 84 INC ,X 8346 MULT2 MMM 1,3 834B E3 84 ADDD ,X 834D ED 84 STD ,X 834F MMM 3,1 8354 E3 84 ADDD ,X 8356 ED 84 STD ,X 8358 MMM 0,3 835D EB 84 ADDB ,X 835F E7 84 STB ,X 8361 MMM 1,2 8366 EB 84 ADDB ,X 8368 E7 84 STB ,X 836A MMM 2,1 836F EB 84 ADDB ,X 8371 E7 84 STB ,X 8373 MMM 3,0 8378 EB 84 ADDB ,X 837A E7 84 STB ,X 837C 32 64 LEAS 4,S 837E 39 RTS * * add numbers * NX <= NX + NY * 837F EC 02 NADD LDD 2,X 8381 E3 22 ADDD 2,Y 8383 ED 02 STD 2,X 8385 EC 84 LDD ,X 8387 E9 21 ADCB 1,Y 8389 A9 A4 ADCA ,Y 838B ED 84 STD ,X 838D 39 RTS * * subtract numbers * NX <= NX - NY * 838E EC 02 NSUB LDD 2,X 8390 A3 22 SUBD 2,Y 8392 ED 02 STD 2,X 8394 EC 84 LDD ,X 8396 E2 21 SBCB 1,Y 8398 A2 A4 SBCA ,Y 839A ED 84 STD ,X 839C 39 RTS * * compare numbers * CCR <= NX - NY * 839D EC 02 NCMP LDD 2,X 839F A3 22 SUBD 2,Y 83A1 EC 84 LDD ,X 83A3 E2 21 SBCB 1,Y 83A5 A2 A4 SBCA ,Y 83A7 39 RTS * * NX <= max ( NX, NY ) * 83A8 8D F3 NMAX BSR NCMP 83AA 2C 08 BGE MAXRTS 83AC EC A4 NMAX1 LDD ,Y 83AE ED 84 STD ,X 83B0 EC 22 LDD 2,Y 83B2 ED 02 STD 2,X 83B4 39 MAXRTS RTS * * NX <= min ( NX, NY ) * 83B5 8D E6 NMIN BSR NCMP 83B7 2C F3 BGE NMAX1 83B9 39 RTS *** *** ( RND n ) SUBR *** generate random number *** val <= 0 .. n-1 *** 83BA 17 FE01 RND LBSR NUMX 83BD 8E 812C LDX #NR 83C0 108E 840E LDY #RNDV 83C4 17 FF4F LBSR MULT 83C7 108E 8416 LDY #ONEV 83CB 8D B2 BSR NADD 83CD 31 1E LEAY -2,X 83CF 8E 8122 LDX #NX 83D2 17 FF41 LBSR MULT 83D5 30 1E LEAX -2,X 83D7 16 FE14 LBRA MNA *** *** ( INC 'var ) FSUBR *** increae value of var by 1 *** (SETQ var (ADD1 var)) *** 83DA AE 84 INC LDX ,X 83DC 102B 00ED LBMI ERROR 83E0 8C 0800 CMPX #CELTOP 83E3 1024 012C LBCC ERRATM 83E7 AE 84 LDX ,X 83E9 34 10 PSHS X 83EB AE 84 LDX ,X 83ED 17 FE0E LBSR ADD1 83F0 10AF F1 STY [,S++] 83F3 39 RTS *** *** ( DEC 'var ) FSUBR *** decrease value of var by 1 *** (SETQ var (SUB1 var)) *** 83F4 AE 84 DEC LDX ,X 83F6 102B 00D3 LBMI ERROR 83FA 8C 0800 CMPX #CELTOP 83FD 1024 0112 LBCC ERRATM 8401 AE 84 LDX ,X 8403 34 10 PSHS X 8405 AE 84 LDX ,X 8407 17 FDFF LBSR SUB1 840A 10AF F1 STY [,S++] 840D 39 RTS * * numerical constants * 840E 0019 660D RNDV FDB $0019,$660D 8412 2000 MINFV FDB $2000 8414 0000 ZEROV FDB $0000 8416 0000 0001 ONEV FDB $0000,$0001 841A 1FFF INFV FDB $1FFF 841C FFFF FFFF MONEV FDB $FFFF,$FFFF *** *** ( CALL address ) SUBR *** call subroutine *** val <= NIL *** 8420 17 FD9B CALL LBSR NUMX 8423 34 40 PSHS U 8425 AD 98 02 JSR [2,X] 8428 108E 0418 LDY #NIL 842C 35 C0 PULS U,PC *** *** ( POKE address value(8) ) SUBR *** store Value *** val <= value *** 842E 34 20 POKE PSHS Y 8430 17 FD89 LBSR NUMXY 8433 A6 23 LDA 3,Y 8435 A7 98 02 STA [2,X] 8438 35 A0 PULS Y,PC *** *** ( PEEK address ) SUBR *** val <= memory value of address *** 843A 17 FD81 PEEK LBSR NUMX 843D A6 98 02 LDA [2,X] * * make numerical atom ( A ) * 8440 34 02 MNAA PSHS A 8442 17 0C3B LBSR NEW 8445 35 02 PULS A 8447 A7 23 STA 3,Y 8449 6F 22 CLR 2,Y 844B 6F 21 MNAA1 CLR 1,Y 844D 86 80 LDA #$80 844F A7 A4 STA ,Y 8451 39 RTS * * make numerical atom ( Y ) * 8452 30 A4 MNAY LEAX ,Y 8454 17 0C29 MNAX LBSR NEW 8457 AF 22 STX 2,Y 8459 20 F0 BRA MNAA1 *** *** ( ATOMLENGTH atom ) SUBR *** val <= length of atom *** 845B 8C 0800 ATOMLE CMPX #CELTOP 845E 1024 FD34 LBCC ZERO 8462 AE 84 LDX ,X 8464 30 07 LEAX 7,X 8466 108E 0000 LDY #0 846A A6 80 ATOML1 LDA ,X+ 846C 27 E4 BEQ MNAY 846E 31 21 LEAY 1,Y 8470 20 F8 BRA ATOML1 *** *** ( LENGTH list ) SUBR *** val <= length of list *** 8472 108E 0000 LENGTH LDY #0 8476 A6 84 LENGT1 LDA ,X 8478 2B D8 BMI MNAY 847A AE 02 LDX 2,X 847C 31 21 LEAY 1,Y 847E 20 F6 BRA LENGT1 *-------------------------------------- * * ERRORS * *-------------------------------------- * 8480 0D 0A 07 ERRM FCB CR,LF,BEL 8483 2D 2D 45 52 FCC /--ERROR-- /,0 8487 52 4F 52 2D 848B 2D 20 00 * 848E 8D 32 ERRSSK BSR ERR 8490 53 20 6F 76 FCC /S over/,0 8494 65 72 00 8497 8D 29 ERRUSK BSR ERR 8499 55 20 6F 76 FCC /U over/,0 849D 65 72 00 84A0 8D 20 ERRGBC BSR ERR 84A2 43 65 6C 6C FCC /Cell area over/,0 84A6 20 61 72 65 84AA 61 20 6F 76 84AE 65 72 00 84B1 8D 0F ERRMSA BSR ERR 84B3 41 74 6F 6D FCC /Atom area over/,0 84B7 20 61 72 65 84BB 61 20 6F 76 84BF 65 72 00 * 84C2 17 00B2 ERR LBSR ERRS 84C5 35 10 PULS X 84C7 17 00B8 LBSR MSG 84CA 16 FB36 LBRA WARMS *** *** ( ERROR e1 e2 ) SUBR *** print e1 e2, goto top level *** 84CD 17 0092 ERROR LBSR ERRXY 84D0 00 FCB 0 * 84D1 17 008E ERRCAT LBSR ERRXY 84D4 43 61 74 63 FCC /Catch and Throw/,0 84D8 68 20 61 6E 84DC 64 20 54 68 84E0 72 6F 77 00 84E4 8D 7C ERRCAR BSR ERRXY 84E6 43 61 72 20 FCC /Car or Cdr of atom/,0 84EA 6F 72 20 43 84EE 64 72 20 6F 84F2 66 20 61 74 84F6 6F 6D 00 84F9 8D 67 ERRSET BSR ERRXY 84FB 53 65 74 00 FCC /Set/,0 84FF 8D 61 ERRPRG BSR ERRXY 8501 50 72 6F 67 FCC /Prog/,0 8505 00 8506 8D 5A ERRDE BSR ERRXY 8508 44 65 66 69 FCC /Definition/,0 850C 6E 69 74 69 8510 6F 6E 00 8513 8D 4D ERRATM BSR ERRXY 8515 41 74 6F 6D FCC /Atom expected/,0 8519 20 65 78 70 851D 65 63 74 65 8521 64 00 8523 8D 3D ERRSTR BSR ERRXY 8525 53 74 72 69 FCC /String expected/,0 8529 6E 67 20 65 852D 78 70 65 63 8531 74 65 64 00 8535 8D 2B ERRUND BSR ERRXY 8537 55 6E 64 65 FCC /Undefined Function/,0 853B 66 69 6E 65 853F 64 20 46 75 8543 6E 63 74 69 8547 6F 6E 00 854A 8D 16 ERRNUM BSR ERRXY 854C 4E 75 6D 62 FCC /Number expected/,0 8550 65 72 20 65 8554 78 70 65 63 8558 74 65 64 00 855C 8D 04 ERRPUT BSR ERRXY 855E 50 75 74 00 FCC /Put/,0 * 8562 36 30 ERRXY PSHU X,Y 8564 8D 11 BSR ERRS 8566 35 10 PULS X 8568 8D 18 BSR MSG 856A 8D 41 BSR TERPRI 856C 37 10 PULU X 856E 8D 37 BSR PRINT 8570 37 10 PULU X 8572 8D 33 BSR PRINT 8574 16 FA8C LBRA WARMS * 8577 17 FAB8 ERRS LBSR INITIO 857A 8E 8480 LDX #ERRM 857D 20 03 BRA MSG *-------------------------------------- * * OUTPUT * *-------------------------------------- * * print message * X : top of message * 857F 17 0080 MSG0 LBSR OUT 8582 A6 80 MSG LDA ,X+ 8584 26 F9 BNE MSG0 8586 39 RTS *** *** ( CRLF num(16) ) SUBR *** print crlfs *** val <= NIL *** 8587 17 FC34 CRLF LBSR NUMX 858A AE 02 LDX 2,X 858C 27 14 BEQ PRIRTS 858E 8D 1D CRLF1 BSR TERPRI 8590 30 1F LEAX -1,X 8592 26 FA BNE CRLF1 8594 39 RTS *** *** ( SPACES num(16) ) SUBR *** print blanks *** val <= NIL *** 8595 17 FC26 SPACES LBSR NUMX 8598 AE 02 LDX 2,X 859A 27 06 BEQ PRIRTS 859C 8D 05 SPACE1 BSR BLANK 859E 30 1F LEAX -1,X 85A0 26 FA BNE SPACE1 85A2 39 PRIRTS RTS * * print blank * 85A3 86 20 BLANK LDA #' 85A5 20 5B BRA OUT *** *** ( PRIANT e ) SUBR *** print e, print crlf *** val <= e *** 85A7 36 10 PRINT PSHU X 85A9 8D 2B BSR PRIN1 85AB 37 20 PULU Y *** *** ( TERPRI ) SUBR *** print crlf *** val <= NIL *** 85AD 86 0D TERPRI LDA #CR 85AF 8D 51 BSR OUT 85B1 86 0A LDA #LF 85B3 20 4D BRA OUT *** *** ( LPRI e ) SUBR *** print e without top level "(" and ")" *** val <= NIL *** 85B5 8D 1F LPRI0 BSR PRIN1 85B7 35 10 PULS X 85B9 AE 02 LDX 2,X 85BB A6 84 LDA ,X 85BD 2B 0A BMI LPRI1 85BF 8D E2 BSR BLANK 85C1 34 10 LPRI PSHS X 85C3 AE 84 LDX ,X 85C5 2A EE BPL LPRI0 85C7 35 10 PULS X 85C9 8C 0418 LPRI1 CMPX #NIL 85CC 27 D4 BEQ PRIRTS 85CE 8D D3 BSR BLANK 85D0 86 2E LDA #'. 85D2 8D 2E BSR OUT 85D4 8D CD BSR BLANK *** *** ( PRIN1 e ) SUBR *** print e *** val <= NIL *** 85D6 PRIN1 TESTS 85DE 8C 8000 CMPX #CELBTM 85E1 24 BF BCC PRIRTS 85E3 8C 0800 CMPX #CELTOP 85E6 24 08 BCC PRIN2 85E8 AE 84 LDX ,X 85EA 2A B6 BPL PRIRTS 85EC 30 07 LEAX 7,X 85EE 20 92 BRA MSG * 85F0 1F 10 PRIN2 TFR X,D 85F2 C5 03 BITB #3 85F4 26 AC BNE PRIRTS 85F6 A6 84 LDA ,X 85F8 2B 0B BMI PRINN 85FA 86 28 LDA #'( 85FC 8D 04 BSR OUT 85FE 8D C1 BSR LPRI 8600 86 29 LDA #') * * output a char in A * 8602 16 0BA0 OUT LBRA OUTPUT * * print number ( decimal form ) * 8605 86 D0 PRINN LDA #-'0 8607 34 22 PSHS A,Y 8609 108E 8126 LDY #NY 860D 17 FBAE LBSR NUMX 8610 2A 07 BPL PRINN1 8612 86 2D LDA #'- 8614 8D EC BSR OUT 8616 17 FCDD LBSR NNEG 8619 CC 000A PRINN1 LDD #10 861C ED 22 STD 2,Y 861E 5F CLRB 861F ED A4 STD ,Y 8621 17 FC69 LBSR DIV 8624 A6 23 LDA 3,Y 8626 34 02 PSHS A 8628 EC 02 LDD 2,X 862A 26 ED BNE PRINN1 862C EC 84 LDD ,X 862E 26 E9 BNE PRINN1 8630 20 02 BRA PRINN3 * 8632 8D CE PRINN2 BSR OUT 8634 35 02 PRINN3 PULS A 8636 8B 30 ADDA #'0 8638 26 F8 BNE PRINN2 863A 35 A0 PULS Y,PC *** *** ( TYO num(8) ) SUBR *** output ASCII character *** val <= NIL *** 863C 17 FB7F TYO LBSR NUMX 863F A6 03 LDA 3,X 8641 20 BF BRA OUT *** *** ( PRINH n ) SUBR *** print number ( hex form ) *** val <= NIL *** 8643 17 FB78 PRINH LBSR NUMX 8646 86 24 LDA #'$ 8648 8D B8 BSR OUT 864A EC 84 LDD ,X 864C 8D 02 BSR PRINH4 864E EC 02 LDD 2,X 8650 8D 02 PRINH4 BSR PRINH2 8652 1F 98 TFR B,A 8654 34 02 PRINH2 PSHS A 8656 46 RORA 8657 46 RORA 8658 46 RORA 8659 46 RORA 865A 8D 02 BSR PRINH1 865C 35 02 PULS A 865E 84 0F PRINH1 ANDA #$0F 8660 8B 30 ADDA #'0 8662 81 3A CMPA #'9+1 8664 25 9C BCS OUT 8666 8B 07 ADDA #7 8668 20 98 BRA OUT *-------------------------------------- * * INPUT * *-------------------------------------- *** *** ( TYI ) SUBR *** read a char *** val <= ASCII code *** 866A 8D 6A TYI BSR IN 866C 16 FDD1 LBRA MNAA *** *** ( READCH ) SUBR *** read a char *** val <= symbolic atom *** 866F 8D 65 READCH BSR IN 8671 16 024A LBRA MSAA *** *** ( GETCH ) SUBR *** read char, direct input *** val <= symbolic atom *** 8674 17 0B31 GETCH LBSR INPUT 8677 16 0244 LBRA MSAA * * read a line * 867A BE A025 GETLIN LDX prompt 867D 17 FF56 LBSR PRIN1 8680 8E 804E GETL1 LDX #IBF 8683 BF 80B3 STX IBFP 8686 17 0B1F GETL2 LBSR INPUT 8689 81 08 CMPA #BS 868B 27 17 BEQ GETL3 868D 81 18 CMPA #CAN 868F 27 1E BEQ GETL5 8691 81 0D CMPA #CR 8693 27 21 BEQ GETL6 8695 81 20 CMPA #' 8697 25 ED BCS GETL2 8699 A7 80 STA ,X+ 869B 8D 31 BSR EOUT 869D 8C 80B2 CMPX #IBF+IBFL 86A0 26 E4 BNE GETL2 86A2 20 37 BRA IN1 * 86A4 8C 804E GETL3 CMPX #IBF 86A7 27 DD BEQ GETL2 86A9 8D 19 BSR EOUTBS 86AB 20 D9 BRA GETL2 * 86AD 8D 15 GETL4 BSR EOUTBS 86AF 8C 804E GETL5 CMPX #IBF 86B2 26 F9 BNE GETL4 86B4 20 D0 BRA GETL2 * 86B6 A7 80 GETL6 STA ,X+ 86B8 6F 84 CLR ,X 86BA 7D 8132 TST ECHOSW 86BD 26 1C BNE IN1 86BF 17 FEEB LBSR TERPRI 86C2 20 17 BRA IN1 * * output back space * 86C4 30 1F EOUTBS LEAX -1,X 86C6 8D 04 BSR EOUTB1 86C8 86 20 LDA #' 86CA 8D 02 BSR EOUT 86CC 86 08 EOUTB1 LDA #BS * * output a char * 86CE 7D 8132 EOUT TST ECHOSW 86D1 1027 FF2D LBEQ OUT 86D5 39 RTS * * read a char in A * 86D6 B6 8139 IN LDA OLDCHR 86D9 26 0A BNE IN2 86DB BE 80B3 IN1 LDX IBFP 86DE A6 80 LDA ,X+ 86E0 27 98 BEQ GETLIN 86E2 BF 80B3 STX IBFP 86E5 7F 8139 IN2 CLR OLDCHR 86E8 39 RTS * * skip blank ( cntr ) chars, char in A * 86E9 8D EB SKIP0 BSR IN 86EB 81 3B CMPA #'; 86ED 27 04 BEQ SKIP 86EF 81 0D CMPA #CR 86F1 26 F6 BNE SKIP0 86F3 8D E1 SKIP BSR IN 86F5 81 21 CMPA #' +1 86F7 25 FA BCS SKIP 86F9 81 3B CMPA #'; 86FB 27 EC BEQ SKIP0 86FD 39 RTS *** *** ( READ ) SUBR *** read a expression *** val <= expression *** 86FE READ TESTS 8706 TESTU 870E 17 012E LBSR CLRABF 8711 8D E0 BSR SKIP 8713 81 29 CMPA #') 8715 27 E7 BEQ READ 8717 81 5D CMPA #'] 8719 27 E3 BEQ READ 871B 81 28 CMPA #'( 871D 27 23 BEQ READR 871F 81 5B CMPA #'[ 8721 27 15 BEQ READG 8723 81 22 CMPA #'" 8725 1027 00F0 LBEQ READS 8729 81 27 CMPA #'' 872B 26 49 BNE READA * * read quate * 872D 8D CF BSR READ 872F 17 0940 LBSR CONSN 8732 8E 0692 LDX #QUOTE 8735 16 092B LBRA CONS * * read right part * 8738 8D 08 READG BSR READR 873A B6 8139 LDA OLDCHR 873D 81 5D CMPA #'] 873F 27 A4 BEQ IN2 8741 39 RTS * 8742 8D AF READR BSR SKIP 8744 108E 0418 LDY #NIL 8748 81 29 CMPA #') 874A 27 23 BEQ REDRTS 874C 81 5D CMPA #'] 874E 27 1C BEQ READR3 8750 81 2E CMPA #'. 8752 27 0C BEQ READR1 8754 B7 8139 STA OLDCHR 8757 8D A5 BSR READ 8759 36 20 PSHU Y 875B 8D E5 BSR READR 875D 16 0905 LBRA CONSU * 8760 8D 9C READR1 BSR READ 8762 8D 8F READR2 BSR SKIP 8764 81 29 CMPA #') 8766 27 07 BEQ REDRTS 8768 81 5D CMPA #'] 876A 26 F6 BNE READR2 876C B7 8139 READR3 STA OLDCHR 876F 39 REDRTS RTS * * read atom * 8770 17 00D8 READA0 LBSR STOREA 8773 17 FF60 LBSR IN 8776 81 21 READA CMPA #' +1 8778 25 10 BCS READA1 877A 81 28 CMPA #'( 877C 27 0C BEQ READA1 877E 81 5B CMPA #'[ 8780 27 08 BEQ READA1 8782 81 29 CMPA #') 8784 27 04 BEQ READA1 8786 81 5D CMPA #'] 8788 26 E6 BNE READA0 878A B7 8139 READA1 STA OLDCHR * * make atom ( input is number ??? ) * 878D 8E 8122 MATM LDX #NX 8790 CC 0000 LDD #0 8793 ED 02 STD 2,X 8795 ED 84 STD ,X 8797 7F 813A CLR NSIGN 879A 108E 80B5 LDY #ABF 879E A6 A0 LDA ,Y+ 87A0 81 2B CMPA #'+ 87A2 27 07 BEQ MATM1 87A4 81 2D CMPA #'- 87A6 26 05 BNE MATM2 87A8 7C 813A INC NSIGN 87AB A6 A0 MATM1 LDA ,Y+ 87AD 81 24 MATM2 CMPA #'$ 87AF 26 15 BNE MATM4 * * make hex number * 87B1 A6 A0 LDA ,Y+ 87B3 8D 27 MATM3 BSR TSTHEX 87B5 1024 010A LBCC MSA 87B9 17 FB4B LBSR NASL4 87BC AB 03 ADDA 3,X 87BE A7 03 STA 3,X 87C0 A6 A0 LDA ,Y+ 87C2 26 EF BNE MATM3 87C4 20 0C BRA MATM5 * * make decimal number * 87C6 8D 1F MATM4 BSR TSTDEC 87C8 1024 00F7 LBCC MSA 87CC 8D 23 BSR N10A 87CE A6 A0 LDA ,Y+ 87D0 26 F4 BNE MATM4 * 87D2 B6 813A MATM5 LDA NSIGN 87D5 1027 FA15 LBEQ MNA 87D9 16 FA3B LBRA MINUS1 * * char in ( 0..9, A..F ) ??? * 87DC 81 41 TSTHEX CMPA #'A 87DE 25 07 BCS TSTDEC 87E0 81 47 CMPA #'G 87E2 24 0C BCC TSTRTS 87E4 8B C9 ADDA #10-'A 87E6 39 RTS * * char in ( 0..9 ) ??? * 87E7 80 30 TSTDEC SUBA #'0 87E9 25 03 BCS TSTCLC 87EB 81 0A CMPA #10 87ED 39 RTS * 87EE 1C FE TSTCLC CLC 87F0 39 TSTRTS RTS * * NX <= NX * 10 + A * 87F1 36 02 N10A PSHU A 87F3 8D 09 BSR N10 87F5 CC 0000 LDD #0 87F8 34 06 PSHS D 87FA 37 04 PULU B 87FC 20 0C BRA N10A1 * 87FE 17 FB0C N10 LBSR NASL 8801 EC 84 LDD ,X 8803 34 06 PSHS D 8805 EC 02 LDD 2,X 8807 17 FB01 LBSR NASL2 880A E3 02 N10A1 ADDD 2,X 880C ED 02 STD 2,X 880E 35 06 PULS D 8810 E9 01 ADCB 1,X 8812 A9 84 ADCA ,X 8814 ED 84 STD ,X 8816 39 RTS * * read string * 8817 8D 32 READS0 BSR STOREA 8819 17 FEBA READS LBSR IN 881C 81 0D CMPA #CR 881E 1027 00A1 LBEQ MSA 8822 81 22 CMPA #'" 8824 26 F1 BNE READS0 8826 17 FEAD LBSR IN 8829 81 22 CMPA #'" 882B 27 EA BEQ READS0 882D B7 8139 STA OLDCHR 8830 16 0090 LBRA MSA * * compute string address * 8833 8C 0800 STRING CMPX #CELTOP 8836 1024 FCE9 LBCC ERRSTR 883A AE 84 LDX ,X 883C 30 07 LEAX 7,X 883E 39 RTS * * clear atom buffer * 883F 34 10 CLRABF PSHS X 8841 8E 80B5 LDX #ABF 8844 BF 811A STX ABFP 8847 6F 84 CLR ,X 8849 35 90 PULS X,PC * * store a char into Atom buffer * 884B 34 10 STOREA PSHS X 884D BE 811A LDX ABFP 8850 A7 80 STA ,X+ 8852 8C 8119 CMPX #ABF+ABFL 8855 27 05 BEQ STORE1 8857 BF 811A STX ABFP 885A 6F 84 CLR ,X 885C 35 90 STORE1 PULS X,PC * * store chars into atom buffer * X : POINTER * 885E 8D EB STORE0 BSR STOREA 8860 A6 80 STORES LDA ,X+ 8862 26 FA BNE STORE0 8864 39 RTS *** *** ( IMPLODE list_of _atom ) SUBR *** val <= connected atom *** *** *** ( CONCAT atom1 atoM2 ... ) LSUBR *** val <= connected atom *** 8865 CONCAT EQU * 8865 8D D8 IMPLOD BSR CLRABF 8867 36 10 IMPLD1 PSHU X 8869 AE 84 LDX ,X 886B 2B 0A BMI IMPLD2 886D 8D C4 BSR STRING 886F 8D EF BSR STORES 8871 37 10 PULU X 8873 AE 02 LDX 2,X 8875 20 F0 BRA IMPLD1 8877 33 42 IMPLD2 LEAU 2,U 8879 20 48 BRA MSA *** *** ( EXPLODE atom ) SUBR *** val <= list of chars *** 887B CC 88BE EXPLOD LDD #MSAA 887E 20 03 BRA EXPL1 *** *** ( EXPLODEN atom ) SUBR *** val <= list of ascii codes *** 8880 CC 8440 EXPLN LDD #MNAA 8883 FD 8130 EXPL1 STD OP 8886 8D AB BSR STRING 8888 TESTU 8890 TESTS 8898 A6 80 EXPL2 LDA ,X+ 889A 1027 0571 LBEQ FALSE 889E 34 10 PSHS X 88A0 AD 9F 8130 JSR [OP] 88A4 35 10 PULS X 88A6 36 20 PSHU Y 88A8 8D EE BSR EXPL2 88AA 16 07B8 LBRA CONSU *** *** ( ATOMCDR atom ) SUBR *** val <= butfirst chars of atom *** 88AD 8D 84 ATOMCD BSR STRING 88AF 8D 8E BSR CLRABF 88B1 A6 80 LDA ,X+ 88B3 27 0E BEQ MSA 88B5 8D A9 BSR STORES 88B7 20 0A BRA MSA *** *** ( ATOMCAR atom ) SUBR *** val <= first char of atom *** 88B9 17 FF77 ATOMCA LBSR STRING 88BC A6 84 LDA ,X * * make single char atom (A ) * 88BE 17 FF7E MSAA LBSR CLRABF 88C1 8D 88 BSR STOREA * * make symbolic atom * 88C3 8E 80B5 MSA LDX #ABF 88C6 CC 0000 LDD #0 88C9 6D 84 MSA1 TST ,X 88CB 27 0F BEQ MSA2 88CD 44 LSRA 88CE 56 RORB 88CF 44 LSRA 88D0 56 RORB 88D1 44 LSRA 88D2 56 RORB 88D3 A8 80 EORA ,X+ 88D5 20 F2 BRA MSA1 * 88D7 35 06 MSA4 PULS D 88D9 C3 0002 ADDD #2 88DC 84 07 MSA2 ANDA #$07 88DE C4 FE ANDB #$FE 88E0 C3 0000 ADDD #HSHTOP 88E3 34 06 PSHS D 88E5 108E 80B5 LDY #ABF 88E9 AE F4 LDX [,S] 88EB 27 0D BEQ MSA5 88ED 30 07 LEAX 7,X 88EF A6 80 MSA3 LDA ,X+ 88F1 A1 A0 CMPA ,Y+ 88F3 26 E2 BNE MSA4 88F5 4D TSTA 88F6 26 F7 BNE MSA3 88F8 35 A0 PULS Y,PC * * create new atom * 88FA 30 56 MSA5 LEAX -10,U 88FC 34 10 PSHS X 88FE BE 813D LDX ATMEND 8901 CC 012A LDD #UNDEFI 8904 ED 81 STD ,X++ 8906 CC 0418 LDD #NIL 8909 ED 81 STD ,X++ 890B CC 8535 LDD #ERRUND 890E ED 81 STD ,X++ 8910 6F 80 CLR ,X+ 8912 AC E4 MSA6 CMPX ,S 8914 1024 FB99 LBCC ERRMSA 8918 A6 A0 LDA ,Y+ 891A A7 80 STA ,X+ 891C 26 F4 BNE MSA6 891E FC 813D LDD ATMEND 8921 ED F8 02 STD [2,S] 8924 BF 813D STX ATMEND 8927 30 88 1E LEAX 30,X 892A BF 813F STX USKTOP 892D TESTU 8935 35 A6 PULS D,Y,PC *** *** ( ASCII n ) SUBR *** val <= syumbolic atom *** 8937 17 F884 ASCII LBSR NUMX 893A A6 03 LDA 3,X 893C 16 FF7F LBRA MSAA *** *** ( GENSYM [atom] ) SUBR *** generate symbolic atom *** val <= atom *** 893F 17 FEFD GENSYM LBSR CLRABF 8942 8C 0418 CMPX #NIL 8945 26 07 BNE GENSY0 8947 86 47 LDA #'G 8949 17 FEFF LBSR STOREA 894C 20 06 BRA GENSY1 894E 17 FEE2 GENSY0 LBSR STRING 8951 17 FF0C LBSR STORES 8954 8E 8120 GENSY1 LDX #GBUF+4 8957 6C 82 GENSY2 INC ,-X 8959 A6 84 LDA ,X 895B 81 3A CMPA #'9+1 895D 26 06 BNE GENSY3 895F 86 30 LDA #'0 8961 A7 84 STA ,X 8963 20 F2 BRA GENSY2 8965 8E 811C GENSY3 LDX #GBUF 8968 17 FEF5 LBSR STORES 896B 16 FF55 LBRA MSA *-------------------------------------- * * EVALUATION * *-------------------------------------- * * EVAL - FSUBR * 896E AE 02 EVFSBR LDX 2,X 8970 108E 0418 LDY #NIL 8974 39 RTS * * EVAL - MACRO * 8975 10AE 02 EVMACR LDY 2,X 8978 35 10 EVMAC1 PULS X 897A 8D 66 BSR EVALL1 897C 30 A4 LEAX ,Y *** *** ( EVAL e ) SUBR *** val <= value of e *** 897E EVAL TESTS 8986 TESTU 898E 10AE 84 LDY ,X 8991 2A 11 BPL EVAL3 8993 8C 0800 CMPX #CELTOP 8996 24 04 BCC EVAL1 8998 10AE A4 LDY ,Y 899B 39 RTS 899C 31 84 EVAL1 LEAY ,X 899E 39 RTS 899F 32 62 EVAL2 LEAS 2,S 89A1 10AE A4 LDY ,Y 89A4 108C 0800 EVAL3 CMPY #CELTOP 89A8 24 28 BCC EVALL 89AA 10AE A4 LDY ,Y 89AD EC 24 LDD 4,Y 89AF 34 06 PSHS D 89B1 A6 26 LDA 6,Y 89B3 27 EA BEQ EVAL2 89B5 81 01 CMPA #NSUBR 89B7 27 5B BEQ EVSUBR 89B9 81 02 CMPA #NFSUBR 89BB 27 B1 BEQ EVFSBR 89BD 81 03 CMPA #NLSUBR 89BF 27 75 BEQ EVLSBR 89C1 81 09 CMPA #NEXPR 89C3 27 7A BEQ EVEXPR 89C5 81 0A CMPA #NFEXPR 89C7 1027 0082 LBEQ EVFEXP 89CB 81 0C CMPA #NMACRO 89CD 27 A6 BEQ EVMACR 89CF 16 FB63 EVAL9 LBRA ERRUND * * EVAL - LAMBDA * 89D2 36 20 EVALL PSHU Y 89D4 EC A4 LDD ,Y 89D6 1083 00AA CMPD #LAMBDA 89DA 26 F3 BNE EVAL9 89DC 8D 0A BSR EVLIS 89DE 37 10 PULU X 89E0 AE 02 EVALL2 LDX 2,X 89E2 34 10 EVALL1 PSHS X 89E4 AE 84 LDX ,X 89E6 20 5B BRA EVEXP2 *** *** ( EVLIS list ) SUBR *** evaluate each element of list *** val <= list of values *** 89E8 AE 02 EVLIS LDX 2,X 89EA 36 10 PSHU X 89EC AE 84 LDX ,X 89EE 2B 21 BMI EVLIS1 89F0 8D 8C BSR EVAL 89F2 AE C4 LDX ,U 89F4 10AF C4 STY ,U 89F7 AE 02 LDX 2,X 89F9 36 10 PSHU X 89FB AE 84 LDX ,X 89FD 102B 0666 LBMI CONSUU 8A01 17 FF7A LBSR EVAL 8A04 AE C4 LDX ,U 8A06 10AF C4 STY ,U 8A09 8D DD BSR EVLIS 8A0B 17 0657 LBSR CONSU 8A0E 16 0654 LBRA CONSU 8A11 37 20 EVLIS1 PULU Y 8A13 39 RTS * * EVAL - SUBR * 8A14 AE 02 EVSUBR LDX 2,X 8A16 36 10 PSHU X 8A18 AE 84 LDX ,X 8A1A 2B 13 BMI EVSBR1 8A1C 17 FF5F LBSR EVAL 8A1F AE C4 LDX ,U 8A21 10AF C4 STY ,U 8A24 AE 98 02 LDX [2,X] 8A27 2B 06 BMI EVSBR1 8A29 17 FF52 LBSR EVAL 8A2C 37 10 PULU X 8A2E 39 RTS 8A2F 37 10 EVSBR1 PULU X 8A31 108E 0418 LDY #NIL 8A35 39 RTS * * EVAL - LSBUR * 8A36 8D B0 EVLSBR BSR EVLIS 8A38 30 A4 EVLSB1 LEAX ,Y 8A3A 108E 0418 LDY #NIL 8A3E 39 RTS * * EVAL - EXPR * 8A3F 8D A7 EVEXPR BSR EVLIS 8A41 AE F4 EVEXP1 LDX [,S] 8A43 2B 8A EVEXP2 BMI EVAL9 8A45 8D 0B BSR BIND 8A47 35 10 PULS X 8A49 8D 5C BSR EVBODY 8A4B 20 50 BRA UNBIND * * EVAL - FEXPR * 8A4D 10AE 02 EVFEXP LDY 2,X 8A50 20 EF BRA EVEXP1 * * bind varables * X : variable(s) * Y : argument(s) * 8A52 CC 0418 BIND LDD #NIL 8A55 36 06 PSHU D 8A57 BIND1 TESTU 8A5F 34 30 PSHS X,Y 8A61 AE 84 LDX ,X 8A63 2B 1C BMI BINDA0 8A65 10AE A4 LDY ,Y 8A68 2B 0B BMI BIND2 8A6A 8D 17 BSR BINDA 8A6C 35 30 PULS X,Y 8A6E AE 02 LDX 2,X 8A70 10AE 22 LDY 2,Y 8A73 20 E2 BRA BIND1 8A75 108E 0418 BIND2 LDY #NIL 8A79 8D 08 BSR BINDA 8A7B 35 30 PULS X,Y 8A7D AE 02 LDX 2,X 8A7F 20 D6 BRA BIND1 * * bind atom * 8A81 35 30 BINDA0 PULS X,Y 8A83 8C 0800 BINDA CMPX #CELTOP 8A86 24 10 BCC BINRTS 8A88 8C 0418 CMPX #NIL 8A8B 27 0B BEQ BINRTS 8A8D AE 84 LDX ,X 8A8F EC 84 LDD ,X 8A91 36 06 PSHU D 8A93 36 10 PSHU X 8A95 10AF 84 STY ,X 8A98 39 BINRTS RTS * * unbind variables * 8A99 37 06 UNBIN0 PULU D 8A9B ED 84 STD ,X 8A9D AE C1 UNBIND LDX ,U++ 8A9F 2B F8 BMI UNBIN0 8AA1 39 RTS *** *** ( EVBODY list ) SUBR *** evaluate each element of list *** val <= last element *** 8AA2 17 FED9 EVBOD0 LBSR EVAL 8AA5 37 10 PULU X 8AA7 AE 02 EVBODY LDX 2,X 8AA9 36 10 PSHU X 8AAB AE 84 LDX ,X 8AAD 2A F3 BPL EVBOD0 8AAF 37 10 EVBOD1 PULU X 8AB1 39 RTS *** *** ( COND clause1 clause2 ... ) FSUBR *** val <= result or NIL *** 8AB2 37 10 COND0 PULU X 8AB4 AE 02 LDX 2,X 8AB6 36 10 COND PSHU X 8AB8 AE 84 LDX ,X 8ABA 2B F3 BMI EVBOD1 8ABC AE 84 LDX ,X 8ABE 2B F2 BMI COND0 8AC0 17 FEBB LBSR EVAL 8AC3 108C 0418 CMPY #NIL 8AC7 27 E9 BEQ COND0 8AC9 AE D1 LDX [,U++] 8ACB 20 DA BRA EVBODY *** *** ( MAPCAR fn list ) SUBR *** val <= list of values *** 8ACD 36 30 MAPCAR PSHU X,Y 8ACF AE A4 LDX ,Y 8AD1 2B 15 BMI MAPCA1 8AD3 17 059E LBSR CONSN1 8AD6 AE C4 LDX ,U 8AD8 8D 54 BSR APPLY 8ADA 1F 20 TFR Y,D 8ADC 37 30 PULU X,Y 8ADE 10AE 22 LDY 2,Y 8AE1 36 06 PSHU D 8AE3 8D E8 BSR MAPCAR 8AE5 16 057D LBRA CONSU * 8AE8 37 30 MAPCA1 PULU X,Y 8AEA 39 RTS *** *** ( MAPCAN fn list ) SUBR *** val <= appended list of values *** 8AEB 36 30 MAPCAN PSHU X,Y 8AED AE A4 LDX ,Y 8AEF 2B F7 BMI MAPCA1 8AF1 17 0580 LBSR CONSN1 8AF4 AE C4 LDX ,U 8AF6 8D 36 BSR APPLY 8AF8 1F 20 TFR Y,D 8AFA 37 30 PULU X,Y 8AFC 10AE 22 LDY 2,Y 8AFF 36 06 PSHU D 8B01 8D E8 BSR MAPCAN 8B03 37 10 PULU X 8B05 16 0472 LBRA APPXY *** *** ( MAPC fn list ) SUBR *** val <= NIL *** 8B08 36 30 MAPC PSHU X,Y 8B0A AE A4 MAPC1 LDX ,Y 8B0C 2B DA BMI MAPCA1 8B0E 17 0563 LBSR CONSN1 8B11 AE C4 LDX ,U 8B13 8D 19 BSR APPLY 8B15 10AE 42 LDY 2,U 8B18 10AE 22 LDY 2,Y 8B1B 10AF 42 STY 2,U 8B1E 20 EA BRA MAPC1 *** *** ( FUNCALL fn arg! ... ) LSUBR *** evaluate function *** val <= value of function *** 8B20 10AE 02 FUNCALL LDY 2,X 8B23 AE 84 LDX ,X 8B25 2A 07 BPL APPLY 8B27 16 F9A3 LBRA ERROR *** *** ( APPLY fn list ) SUBR *** evaluate function, argument are list *** val <= value of function *** 8B2A 32 62 APPLY0 LEAS 2,S 8B2C AE 84 LDX ,X 8B2E APPLY TESTS 8B36 TESTU 8B3E 8C 0800 CMPX #CELTOP 8B41 24 46 BCC APPLYL 8B43 AE 84 LDX ,X 8B45 EC 04 LDD 4,X 8B47 34 06 PSHS D 8B49 A6 06 LDA 6,X 8B4B 27 DD BEQ APPLY0 8B4D 81 01 CMPA #NSUBR 8B4F 27 1F BEQ APSUBR 8B51 81 02 CMPA #NFSUBR 8B53 1027 FEE1 LBEQ EVLSB1 8B57 81 03 CMPA #NLSUBR 8B59 1027 FEDB LBEQ EVLSB1 8B5D 81 09 CMPA #NEXPR 8B5F 1027 FEDE LBEQ EVEXP1 8B63 81 0A CMPA #NFEXPR 8B65 1027 FED8 LBEQ EVEXP1 8B69 81 0C CMPA #NMACRO 8B6B 27 16 BEQ APMACR 8B6D 16 F9C5 LBRA ERRUND * * APPLY - SUBR * 8B70 AE A4 APSUBR LDX ,Y 8B72 2B 07 BMI APSUB1 8B74 10AE B8 02 LDY [2,Y] 8B78 2B 04 BMI APSUB2 8B7A 39 RTS 8B7B 8E 0418 APSUB1 LDX #NIL 8B7E 108E 0418 APSUB2 LDY #NIL 8B82 39 RTS * * APPLY - MACRO * 8B83 17 04DD APMACR LBSR CONS 8B86 16 FDEF LBRA EVMAC1 * * APPLY - LAMBDA * 8B89 EC 84 APPLYL LDD ,X 8B8B 1083 00AA CMPD #LAMBDA 8B8F 1026 F9A2 LBNE ERRUND 8B93 16 FE4A LBRA EVALL2 *-------------------------------------- * * PROPERTY * *-------------------------------------- *** *** ( DEFUN 'fn ['type] 'args 'body ) FSUBR *** define function *** val <= fn *** 8B96 10AE 84 DEFUN LDY ,X 8B99 AE 02 LDX 2,X 8B9B EC 84 LDD ,X 8B9D 1083 0142 CMPD #EXPR 8BA1 27 13 BEQ DE1 8BA3 1083 0146 CMPD #FEXPR 8BA7 27 27 BEQ DF1 8BA9 1083 0468 CMPD #MACRO 8BAD 27 28 BEQ DM1 8BAF 86 09 LDA #NEXPR 8BB1 20 07 BRA DE3 *** *** ( DE 'fn 'args 'body ) FSUBR *** define EXPR function *** val <= fn *** 8BB3 10AE 84 DE LDY ,X 8BB6 86 09 DE1 LDA #NEXPR 8BB8 AE 02 DE2 LDX 2,X 8BBA 108C 0800 DE3 CMPY #CELTOP 8BBE 1024 F944 LBCC ERRDE 8BC2 34 20 PSHS Y 8BC4 10AE A4 LDY ,Y 8BC7 A7 26 STA 6,Y 8BC9 AF 24 STX 4,Y 8BCB 35 A0 PULS Y,PC *** *** ( DF 'fn 'args 'body ) FSUBR *** define FEXPR function *** val <= fn *** 8BCD 10AE 84 DF LDY ,X 8BD0 86 0A DF1 LDA #NFEXPR 8BD2 20 E4 BRA DE2 *** *** ( DM 'fn 'args 'body ) FSUBR *** define MACRO function *** val <= fn *** 8BD4 10AE 84 DM LDY ,X 8BD7 86 0C DM1 LDA #NMACRO 8BD9 20 DD BRA DE2 *** *** ( SET atom value ) SUBR *** give value to symbolic atom *** val <= value *** 8BDB 8C 0800 SET CMPX #CELTOP 8BDE 24 3F BCC SET9 8BE0 8C 0418 CMPX #NIL 8BE3 27 3A BEQ SET9 8BE5 8C 0400 CMPX #T 8BE8 27 35 BEQ SET9 8BEA 10AF 94 STY [,X] 8BED 39 RTS *** *** ( SETQ 'atom1 value1 ... ) FSUBR *** val <= last value *** 8BEE AE 98 02 SETQ0 LDX [2,X] 8BF1 2B 2C BMI SET9 8BF3 17 FD88 LBSR EVAL 8BF6 AE D4 LDX [,U] 8BF8 8D E1 BSR SET 8BFA 37 10 PULU X 8BFC AE 02 LDX 2,X 8BFE AE 02 LDX 2,X 8C00 36 10 SETQ PSHU X 8C02 A6 84 LDA ,X 8C04 2A E8 BPL SETQ0 8C06 33 42 SETQ1 LEAU 2,U 8C08 39 RTS *** *** ( SETQQ 'atom1 'value1 ... ) FSUBR *** val <= last value *** 8C09 AE 84 SETQQ0 LDX ,X 8C0B 8D CE BSR SET 8C0D 37 10 PULU X 8C0F AE 02 LDX 2,X 8C11 AE 02 LDX 2,X 8C13 36 10 SETQQ PSHU X 8C15 A6 84 LDA ,X 8C17 2B ED BMI SETQ1 8C19 10AE 98 02 LDY [2,X] 8C1D 2A EA BPL SETQQ0 8C1F 16 F8D7 SET9 LBRA ERRSET *** *** ( FVALUE atom ) SUBR *** val <= function values of atom ( list or number ) *** 8C22 8C 0800 FVALUE CMPX #CELTOP 8C25 1024 F8EA LBCC ERRATM 8C29 AE 84 LDX ,X 8C2B 10AE 04 LDY 4,X 8C2E A6 06 LDA 6,X 8C30 8E 0142 LDX #EXPR 8C33 81 09 CMPA #NEXPR 8C35 1025 F819 LBCS MNAY 8C39 27 0A BEQ FVALU1 8C3B 8E 0146 LDX #FEXPR 8C3E 81 0A CMPA #NFEXPR 8C40 27 03 BEQ FVALU1 8C42 8E 0468 LDX #MACRO 8C45 16 041B FVALU1 LBRA CONS *** *** ( PROPLIST atom ) SUBR *** val <= p-list of atom *** 8C48 8C 0800 PROPLI CMPX #CELTOP 8C4B 1024 F8C4 LBCC ERRATM 8C4F AE 84 LDX ,X 8C51 10AE 02 LDY 2,X 8C54 39 RTS *** *** ( GET atom ind ) SUBR *** get property of symbolic atom *** val <= property or NIL *** 8C55 8C 0800 GET CMPX #CELTOP 8C58 1024 F8B7 LBCC ERRATM 8C5C AE 84 LDX ,X 8C5E AE 02 LDX 2,X 8C60 1E 12 EXG X,Y 8C62 17 0235 LBSR ASSOC 8C65 108C 0418 CMPY #NIL 8C69 27 5F BEQ ERMRTS 8C6B 10AE 22 LDY 2,Y 8C6E 39 RTS *** *** ( PUT atom ind e ) LSUBR *** add property *** val <= e *** 8C6F 10AE 84 PUT LDY ,X 8C72 102B F8E6 PUTERR LBMI ERRPUT 8C76 AE 02 LDX 2,X 8C78 EC 84 LDD ,X 8C7A 2B F6 BMI PUTERR 8C7C AE 02 LDX 2,X 8C7E AE 84 LDX ,X 8C80 2B F0 BMI PUTERR 8C82 108C 0800 CMPY #CELTOP 8C86 1024 F889 LBCC ERRATM 8C8A 10AE A4 LDY ,Y 8C8D 31 22 LEAY 2,Y 8C8F 34 30 PSHS X,Y 8C91 10AE A4 LDY ,Y 8C94 1F 01 TFR D,X 8C96 17 0201 LBSR ASSOC 8C99 108C 0418 CMPY #NIL 8C9D 27 08 BEQ PUT1 8C9F 35 10 PULS X 8CA1 AF 22 STX 2,Y 8CA3 31 84 LEAY ,X 8CA5 35 86 PULS D,PC * 8CA7 10AE E4 PUT1 LDY ,S 8CAA 17 03B6 LBSR CONS 8CAD 30 A4 LEAX ,Y 8CAF 10AE F8 02 LDY [2,S] 8CB3 17 03AD LBSR CONS 8CB6 10AF F8 02 STY [2,S] 8CBA 10AE E4 LDY ,S 8CBD 35 96 PULS D,X,PC *** *** ( CARMODE e ) SUBR *** if e = NIL then disable (CAR atom) *** else enable *** val <= NIL *** 8CBF 7F 8133 CARMOD CLR CARSW 8CC2 8C 0418 CMPX #NIL 8CC5 26 03 BNE ERMRTS 8CC7 7C 8133 INC CARSW 8CCA 39 ERMRTS RTS *** *** ( GBCMODE e ) SUBR *** if e = NIL then disable message *** else enable *** val <= NIL *** 8CCB 7F 8134 GBCMODE CLR GBCSW 8CCE 8C 0418 CMPX #NIL 8CD1 27 F7 BEQ ERMRTS 8CD3 7C 8134 INC GBCSW 8CD6 39 RTS *** *** ( ECHOMODE e ) SUBR *** if e = NIL then disable echoback *** else enable *** val <= NIL *** 8CD7 7F 8132 ECHOMO CLR ECHOSW 8CDA 8C 0418 CMPX #NIL 8CDD 26 EB BNE ERMRTS 8CDF 7C 8132 INC ECHOSW 8CE2 39 RTS *-------------------------------------- * * PROG AND LOOP * *-------------------------------------- *** *** ( PROG 'args 'body ) FSUBR *** val <= value of RETURN or NIL *** 8CE3 34 10 PROG PSHS X 8CE5 AE 84 LDX ,X 8CE7 102B F814 PROG9 LBMI ERRPRG 8CEB 17 FD64 LBSR BIND 8CEE 35 10 PULS X 8CF0 36 10 PSHU X 8CF2 8D 20 BSR PROGS 8CF4 7F 8136 PRG1 CLR RTNSW 8CF7 33 42 LEAU 2,U 8CF9 16 FDA1 LBRA UNBIND *** *** ( LOOP 'args 'body ) FSUBR *** val <= value of RETURN *** 8CFC 34 10 LOOP PSHS X 8CFE AE 84 LDX ,X 8D00 2B E5 BMI PROG9 8D02 17 FD4D LBSR BIND 8D05 35 10 PULS X 8D07 36 10 PSHU X 8D09 AE C4 LOOP1 LDX ,U 8D0B 8D 07 BSR PROGS 8D0D B6 8136 LDA RTNSW 8D10 27 F7 BEQ LOOP1 8D12 20 E0 BRA PRG1 * * * 8D14 AE 02 PROGS LDX 2,X 8D16 36 10 PSHU X 8D18 AE 84 LDX ,X 8D1A 2B 21 BMI PROGS2 8D1C 17 FC5F LBSR EVAL 8D1F 37 10 PULU X 8D21 B6 8136 LDA RTNSW 8D24 26 19 BNE PRGRTS 8D26 B6 8135 LDA GOSW 8D29 27 E9 BEQ PROGS 8D2B 7F 8135 CLR GOSW 8D2E AE C4 LDX ,U 8D30 AE 02 PROGS1 LDX 2,X 8D32 A6 84 LDA ,X 8D34 2B B1 BMI PROG9 8D36 10AC 84 CMPY ,X 8D39 26 F5 BNE PROGS1 8D3B 20 D7 BRA PROGS 8D3D 37 20 PROGS2 PULU Y 8D3F 39 PRGRTS RTS *** *** ( GO 'label ) FSUBR *** val <= label *** 8D40 7C 8135 GO INC GOSW 8D43 10AE 84 LDY ,X 8D46 2B 9F BMI PROG9 8D48 39 RTS *** *** ( RETURN value ) SUBR *** val <= value *** 8D49 7C 8136 RETURN INC RTNSW 8D4C 31 84 LEAY ,X 8D4E 39 RTS *** *** ( PROGN e1 e2 ... ) LSUBR *** val <= last e *** 8D4F 10AE 84 PROGN0 LDY ,X 8D52 AE 02 LDX 2,X 8D54 A6 84 PROGN LDA ,X 8D56 2A F7 BPL PROGN0 8D58 39 RTS *** *** ( PROG1 e1 e2 ... ) LSUBR *** val <= e1 *** 8EE2 PROG1 EQU CAR *** *** ( PROG2 e1 e2 ... ) LSUBR *** val <= e2 *** 8EE0 PROG2 EQU CADR *** *** ( CATCH e1 'tag ) FSUBR *** val <= value of e1 or THROWed value *** 8D59 34 40 CATCH PSHS U 8D5B 36 10 PSHU X 8D5D 30 E4 LEAX ,S 8D5F 17 F6F2 LBSR MNAX 8D62 30 A4 LEAX ,Y 8D64 10BE 8137 LDY CATCHL 8D68 17 02F8 LBSR CONS 8D6B AE C4 LDX ,U 8D6D A6 84 LDA ,X 8D6F 2B 37 BMI CATERR 8D71 AE 98 02 LDX [2,X] 8D74 2B 32 BMI CATERR 8D76 17 02EA LBSR CONS 8D79 10BF 8137 STY CATCHL 8D7D AE D1 LDX [,U++] 8D7F 17 FBFC LBSR EVAL 8D82 BE 8137 LDX CATCHL 8D85 AE 02 LDX 2,X 8D87 AE 02 LDX 2,X 8D89 BF 8137 STX CATCHL 8D8C 35 C0 CATCH1 PULS U,PC *** *** ( THROW value 'tag ) FSUBR *** val <= value *** 8D8E 36 10 THROW PSHU X 8D90 AE 84 LDX ,X 8D92 2B 14 BMI CATERR 8D94 17 FBE7 LBSR EVAL 8D97 AE C4 LDX ,U 8D99 10AF C4 STY ,U 8D9C AE 98 02 LDX [2,X] 8D9F 2B 07 BMI CATERR 8DA1 10BE 8137 LDY CATCHL 8DA5 17 00E1 LBSR MEMBER 8DA8 1026 F725 CATERR LBNE ERRCAT 8DAC AE 22 LDX 2,Y 8DAE 10AE 02 LDY 2,X 8DB1 10BF 8137 STY CATCHL 8DB5 AE 84 LDX ,X 8DB7 32 98 02 LEAS [2,X] 8DBA 37 20 PULU Y 8DBC 11A3 E4 THROW1 CMPU ,S 8DBF 27 CB BEQ CATCH1 8DC1 17 FCD9 LBSR UNBIND 8DC4 20 F6 BRA THROW1 *-------------------------------------- * * PREDICATES * *-------------------------------------- *** *** ( ALPHORDER atom1 atom2 ) SUBR *** val <= T or NIL *** 8DC6 17 FA6A ALPHOR LBSR STRING 8DC9 1E 12 EXG X,Y 8DCB 17 FA65 LBSR STRING 8DCE A6 80 ALPHO1 LDA ,X+ 8DD0 A1 A0 CMPA ,Y+ 8DD2 25 3B BCS FALSE 8DD4 26 2F BNE TRUE 8DD6 4D TSTA 8DD7 26 F5 BNE ALPHO1 8DD9 20 2A BRA TRUE *** *** ( GREATERP n1 n2 ) SUBR *** n1 > n2 ??? *** val <= T or NIL *** 8DDB 1E 12 GREATE EXG X,Y *** *** ( LESSP n1 n2 ) SUBR *** n1 < n2 ??? *** val <= T or NIL *** 8DDD 17 F3DC LESSP LBSR NUMXY 8DE0 17 F5BA LBSR NCMP 8DE3 2C 2A BGE FALSE 8DE5 20 1E BRA TRUE *** *** ( SYMBOLP e ) SUBR *** e is symbol ??? *** val <= T or NIL *** 8DE7 8C 0800 SYMBOL CMPX #CELTOP 8DEA 24 23 BCC FALSE 8DEC 20 17 BRA TRUE *** *** ( NUMBERP e ) SUBR *** e is number ??? *** val <= T or NIL ***+ 8DEE 8C 0800 NUMBER CMPX #CELTOP 8DF1 25 1C BCS FALSE *** *** ( ATOM e ) SUBR *** e is atom ??? *** val <= T or NIL *** 8DF3 A6 84 ATOM LDA ,X 8DF5 2A 18 BPL FALSE 8DF7 20 0C BRA TRUE *** *** ( LSITP e ) SUBR *** e Is list ??? *** val <= T or NIL *** 8DF9 A6 84 LISTP LDA ,X 8DFB 2A 08 BPL TRUE 8DFD 20 10 BRA FALSE *** *** ( EQ e1 e2 ) SUBR *** e1 = e2 ??? *** val <= T or NIL *** 8DFF 36 20 EQ PSHU Y 8E01 AC C1 CMPX ,U++ 8E03 26 0A BNE FALSE 8E05 108E 0400 TRUE LDY #T 8E09 39 RTS *** *** ( NULL e ) SUBR *** ( NOT e ) SUBR *** e is NIL ??? *** val <= T or NIL *** 8E0A NULL EQU * 8E0A 8C 0418 NOT CMPX #NIL 8E0D 27 F6 BEQ TRUE 8E0F 108E 0418 FALSE LDY #NIL 8E13 39 RTS *** *** ( PLUSP e ) SUBR *** e >= 0 ??? *** val <= T or NIL *** 8E14 8C 0800 PLUSP CMPX #CELTOP 8E17 25 F6 BCS FALSE 8E19 A6 84 LDA ,X 8E1B 2A F2 BPL FALSE 8E1D 85 40 BITA #$40 8E1F 27 E4 BEQ TRUE 8E21 20 EC BRA FALSE *** *** ( MINUSP e ) SUBR *** e < 0 ??? *** val <= T or NIL *** 8E23 8C 0800 MINUSP CMPX #CELTOP 8E26 25 E7 BCS FALSE 8E28 A6 84 LDA ,X 8E2A 2A E3 BPL FALSE 8E2C 85 40 BITA #$40 8E2E 26 D5 BNE TRUE 8E30 20 DD BRA FALSE *** *** ( oneP e ) SUBR *** e = 1 ??? *** 8E32 EC 02 ONEP LDD 2,X 8E34 1083 0001 CMPD #1 8E38 26 D5 ONEP1 BNE FALSE 8E3A 8C 0800 CMPX #CELTOP 8E3D 25 D0 BCS FALSE 8E3F EC 84 LDD ,X 8E41 1083 8000 CMPD #$8000 8E45 27 BE BEQ TRUE 8E47 20 C6 BRA FALSE *** *** ( ZEROP e ) SUBR *** e = 0 ??? *** val <= T or NIL *** 8E49 EC 02 ZEROP LDD 2,X 8E4B 20 EB BRA ONEP1 *** *** ( EQUAL e1 e2 ) SUBR *** compare e1 with e2 *** val <= T or NIL *** zero flag is set ( T ) *** 8E4D EQUAL0 TESTS 8E55 8D 09 BSR EQUAL 8E57 26 16 BNE EQUAL2 8E59 35 30 PULS X,Y 8E5B AE 02 LDX 2,X 8E5D 10AE 22 LDY 2,Y 8E60 34 30 EQUAL PSHS X,Y 8E62 AE 84 LDX ,X 8E64 2B 0C BMI EQUAL3 8E66 10AE A4 LDY ,Y 8E69 2A E2 BPL EQUAL0 8E6B 108E 0418 EQUAL1 LDY #NIL 8E6F 32 64 EQUAL2 LEAS 4,S 8E71 39 RTS * 8E72 AC A4 EQUAL3 CMPX ,Y 8E74 26 F5 BNE EQUAL1 8E76 AE E4 LDX ,S 8E78 AE 02 LDX 2,X 8E7A AC 22 CMPX 2,Y 8E7C 26 ED BNE EQUAL1 8E7E 108E 0400 LDY #T 8E82 4F CLRA 8E83 32 64 LEAS 4,S 8E85 39 RTS *** *** ( MEMBER e list ) SUBR *** e is top listevel element of 1 ??? *** val <= sublist or NIL *** 8E86 10AE 22 MEMBE0 LDY 2,Y 8E89 34 30 MEMBER PSHS X,Y 8E8B 10AE A4 LDY ,Y 8E8E 2B DB BMI EQUAL1 8E90 8D CE BSR EQUAL 8E92 35 30 PULS X,Y 8E94 26 F0 BNE MEMBE0 8E96 39 RTS *** *** ( ASSOC e a-list ) SUBR *** search e *** val <= element or NIL *** 8E97 10AE 22 ASSOC0 LDY 2,Y 8E9A 34 30 ASSOC PSHS X,Y 8E9C 10AE A4 LDY ,Y 8E9F 2B CA BMI EQUAL1 8EA1 10AE A4 LDY ,Y 8EA4 2B 02 BMI ASSOC1 8EA6 8D B8 BSR EQUAL 8EA8 35 30 ASSOC1 PULS X,Y 8EAA 26 EB BNE ASSOC0 8EAC 10AE A4 LDY ,Y 8EAF 39 RTS *** *** ( MEMQ obj list ) SUBR *** obj is top level element of list ??? *** ( uses EQ instead of EQUAL ) *** val <= sublist or NIL *** 8EB0 10AE 22 MEMQ0 LDY 2,Y 8EB3 AC A4 MEMQ CMPX ,Y 8EB5 27 04 BEQ MEMRTS 8EB7 A6 A4 LDA ,Y 8EB9 2A F5 BPL MEMQ0 8EBB 39 MEMRTS RTS *** *** ( ASSQ obj a-list ) SUBR *** search obj *** ( uses EQ instead of EQUAL ) *** val <= element or NIL *** 8EBC 35 20 ASSQ0 PULS Y 8EBE 10AE 22 LDY 2,Y 8EC1 34 20 ASSQ PSHS Y 8EC3 10AE A4 LDY ,Y 8EC6 2B 06 BMI ASSQ1 8EC8 AC A4 CMPX ,Y 8ECA 26 F0 BNE ASSQ0 8ECC 35 90 PULS X,PC 8ECE 35 A0 ASSQ1 PULS Y,PC *-------------------------------------- * * LIST FUNCTIONS * *-------------------------------------- *** *** ( C..R e ) SUBR *** ( C..R e ) " *** ( CAR e ) " *** ( CDR e ) " *** 8ED0 8D 22 CAAAR BSR CARX 8ED2 20 02 BRA CAAR 8ED4 8D 23 CAADR BSR CDRX 8ED6 8D 1C CAAR BSR CARX 8ED8 20 08 BRA CAR 8EDA 8D 18 CADAR BSR CARX 8EDC 20 02 BRA CADR 8EDE 8D 19 CADDR BSR CDRX 8EE0 8D 17 CADR BSR CDRX 8EE2 10AE 84 CAR LDY ,X 8EE5 2A 11 BPL CARRTS 8EE7 B6 8133 CARERR LDA CARSW 8EEA 1026 F5F6 LBNE ERRCAR 8EEE 8E 0418 LDX #NIL 8EF1 31 84 LEAY ,X 8EF3 39 RTS * 8EF4 AE 84 CARX LDX ,X 8EF6 2B EF BMI CARERR 8EF8 39 CARRTS RTS * 8EF9 A6 84 CDRX LDA ,X 8EFB 2B EA BMI CARERR 8EFD AE 02 LDX 2,X 8EFF 39 RTS * 8F00 8D F2 CDAAR BSR CARX 8F02 20 02 BRA CDAR 8F04 8D F3 CDADR BSR CDRX 8F06 8D EC CDAR BSR CARX 8F08 20 08 BRA CDR 8F0A 8D E8 CDDAR BSR CARX 8F0C 20 02 BRA CDDR 8F0E 8D E9 CDDDR BSR CDRX 8F10 8D E7 CDDR BSR CDRX 8F12 A6 84 CDR LDA ,X 8F14 2B D1 BMI CARERR 8F16 10AE 02 LDY 2,X 8F19 39 RTS *** *** ( LAST list ) SUBR *** val <= list of last element of list *** 8F1A 31 84 LAST0 LEAY ,X 8F1C AE 02 LDX 2,X 8F1E A6 84 LAST LDA ,X 8F20 2A F8 BPL LAST0 8F22 39 RTS *** *** ( REVERSE list ) SUBR *** val <= reversed list *** 8F23 17 013D REVER0 LBSR CONS 8F26 37 10 PULU X 8F28 AE 02 LDX 2,X 8F2A 36 10 REVERS PSHU X 8F2C AE 84 LDX ,X 8F2E 2A F3 BPL REVER0 8F30 33 42 LEAU 2,U 8F32 39 RTS *** *** ( COPY e ) SUBR *** val <= copy of e *** 8F33 COPY TESTS 8F3B TESTU 8F43 36 10 PSHU X 8F45 AE 84 LDX ,X 8F47 2B 0E BMI COPY1 8F49 8D E8 BSR COPY 8F4B AE C4 LDX ,U 8F4D 10AF C4 STY ,U 8F50 AE 02 LDX 2,X 8F52 8D DF BSR COPY 8F54 16 010E LBRA CONSU 8F57 37 20 COPY1 PULU Y 8F59 39 CPYRTS RTS *** *** ( APPEND 11 12 ... ) LSUBR *** val <= connected list *** 8F5A EC 84 APPEND LDD ,X 8F5C 2B FB BMI CPYRTS 8F5E 36 06 APPEN1 PSHU D 8F60 AE 02 LDX 2,X 8F62 EC 84 LDD ,X 8F64 2B F1 BMI COPY1 8F66 TESTU 8F6E TESTS 8F76 8D E6 BSR APPEN1 8F78 37 10 PULU X * * append X to Y * 8F7A EC 84 APPXY LDD ,X 8F7C 2B DB BMI CPYRTS 8F7E 36 06 PSHU D 8F80 AE 02 LDX 2,X 8F82 TESTS 8F8A TESTU 8F92 8D E6 BSR APPXY 8F94 16 00CE LBRA CONSU *** *** ( NCONC 11 12 ... ) LSUBR *** val <= append list, use RPLACD *** 8F97 EC 84 NCONC LDD ,X 8F99 2B BE BMI CPYRTS 8F9B 34 06 NCONC1 PSHS D 8F9D AE 02 LDX 2,X 8F9F EC 84 LDD ,X 8FA1 2B 1C BMI NCONC4 8FA3 TESTS 8FAB 8D EE BSR NCONC1 8FAD AE E4 LDX ,S 8FAF A6 84 LDA ,X 8FB1 2B 0E BMI NCONC5 8FB3 A6 98 02 NCONC2 LDA [2,X] 8FB6 2B 04 BMI NCONC3 8FB8 AE 02 LDX 2,X 8FBA 20 F7 BRA NCONC2 8FBC 10AF 02 NCONC3 STY 2,X 8FBF 35 A0 NCONC4 PULS Y,PC 8FC1 35 86 NCONC5 PULS D,PC *** *** ( AND 'e1 'e2 ... ) FSUBR *** search NIL *** val <= NIL or last e *** 8FC3 108E 0400 AND LDY #T 8FC7 36 10 AND1 PSHU X 8FC9 AE 84 LDX ,X 8FCB 2B 22 BMI OR1 8FCD 17 F9AE LBSR EVAL 8FD0 108C 0418 CMPY #NIL 8FD4 27 19 BEQ OR1 8FD6 37 10 PULU X 8FD8 AE 02 LDX 2,X 8FDA 20 EB BRA AND1 *** *** ( OR 'e1 'e2 ... ) FSUBR *** search non-NIL *** val <= non-NIL or NIL *** 8FDC 17 F99F OR0 LBSR EVAL 8FDF 108C 0418 CMPY #NIL 8FE3 26 0A BNE OR1 8FE5 37 10 PULU X 8FE7 AE 02 LDX 2,X 8FE9 36 10 OR PSHU X 8FEB AE 84 LDX ,X 8FED 2A ED BPL OR0 8FEF 33 42 OR1 LEAU 2,U 8FF1 39 RTS *** *** ( RPLACA l e ) SUBR *** replace car of l with e *** val <= 1 *** 8FF2 A6 84 RPLACA LDA ,X 8FF4 102B F4D5 LBMI ERROR 8FF8 10AF 84 STY ,X 8FFB 31 84 LEAY ,X 8FFD 39 RTS *** *** ( RPLACD l e ) SUBR *** replace cdr of l with e *** val <= l *** 8FFE A6 84 RPLACD LDA ,X 9000 102B F4C9 LBMI ERROR 9004 10AF 02 STY 2,X 9007 31 84 LEAY ,X 9009 39 RTS *** *** ( LIST e1 e2 ... ) LSUBR *** val <= list of e1 ... *** 899C LIST EQU EVAL1 *** *** ( DBLIST ) SUBR *** val <= list of atoms *** 900A 108E 0418 OBLIST LDY #NIL 900E 8E 0000 LDX #HSHTOP 9011 34 10 OBLIS1 PSHS X 9013 EC 84 LDD ,X 9015 27 03 BEQ OBLIS2 >9017 17 0049 LBSR CONS 901A 35 10 OBLIS2 PULS X 901C 30 02 LEAX 2,X 901E 8C 0800 CMPX #HSHBTM 9021 26 EE BNE OBLIS1 9023 39 RTS *** *** ( POP 'var ) FSUBR *** (PROG1 (CAR var) (SETQ var (CDR var))) *** 9024 AE 84 POP LDX ,X 9026 8C 0800 CMPX #CELTOP 9029 1024 F4A0 LBCC ERROR 902D AE 84 LDX ,X 902F 10AE 84 LDY ,X 9032 EC 22 LDD 2,Y 9034 10AE A4 LDY ,Y 9037 102B F4A9 LBMI ERRCAR 903B ED 84 STD ,X 903D 39 RTS *** *** ( PUSH item 'var ) FSUBR *** (SETQ var (CONS item var)) *** 903E 36 10 PUSH PSHU X 9040 AE 84 LDX ,X 9042 102B F487 LBMI ERROR 9046 17 F935 LBSR EVAL 9049 37 10 PULU X 904B AE 98 02 LDX [2,X] 904E 8C 0800 CMPX #CELTOP 9051 1024 F478 LBCC ERROR 9055 AE 84 LDX ,X 9057 34 10 PSHS X 9059 AE 84 LDX ,X 905B 1E 12 EXG X,Y 905D 8D 04 BSR CONS 905F 10AF F1 STY [,S++] 9062 39 RTS *-------------------------------------- * * GARBAGE COLLECTION * *-------------------------------------- *** *** ( CONS e1 e2 ) SUBR *** val <= list *** 9063 36 10 CONS PSHU X 9065 36 20 CONSU PSHU Y 9067 8D 17 CONSUU BSR NEW 9069 37 06 PULU D 906B ED 22 STD 2,Y 906D 37 06 PULU D 906F ED A4 STD ,Y 9071 39 RTS * 9072 30 A4 CONSN LEAX ,Y 9074 108E 0418 CONSN1 LDY #NIL 9078 20 E9 BRA CONS * * get a free cell ( address in Y ) * 907A 34 10 NEW0 PSHS X 907C 8D 0E BSR GBC 907E 35 10 PULS X 9080 10BE 813B NEW LDY FREE 9084 EC A4 LDD ,Y 9086 2B F2 BMI NEW0 9088 FD 813B STD FREE 908B 39 RTS *** *** ( GBC ) SUBR *** garbage collection *** val <= # of collected cells *** 908C 34 41 GBC PSHS U,CC 908E 1A 50 ORCC #$50 9090 8D 1B BSR MARKS 9092 8D 71 BSR COLLCT 9094 1F 31 TFR U,X 9096 35 41 PULS U,CC 9098 8C 0003 CMPX #3 909B 1025 F401 LBCS ERRGBC 909F 17 F3B2 LBSR MNAX 90A2 8E 912C LDX #GMSG 90A5 B6 8134 LDA GBCSW 90A8 1026 F4D6 LBNE MSG 90AC 39 RTS * * mark used cells * 90AD 108E A000 MARKS LDY #ATMTOP 90B1 AE A1 MARKS1 LDX ,Y++ 90B3 8D 3F BSR MARK 90B5 AE A1 LDX ,y++ 90B7 8D 3B BSR MARK 90B9 AE A4 LDX ,Y 90BB 8C 8000 CMPX #CELBTM 90BE 24 02 BCC MARKS2 90C0 8D 32 BSR MARK 90C2 31 23 MARKS2 LEAY 3,Y 90C4 A6 A0 MARKS3 LDA ,Y+ 90C6 26 FC BNE MARKS3 90C8 10BC 813D CMPY ATMEND 90CC 25 E3 BCS MARKS1 90CE 20 06 BRA MARKS5 * 90D0 AE C1 MARKS4 LDX ,U++ 90D2 2B 02 BMI MARKS5 90D4 8D 1E BSR MARK 90D6 1183 C000 MARKS5 CMPU #USKBTM 90DA 25 F4 BCS MARKS4 90DC BE 8137 LDX CATCHL 90DF 8D 13 BSR MARK 90E1 39 RTS * * mark list ( X ) * 90E2 34 10 MARK0 PSHS X 90E4 118C 94F9 CMPS #LSPBTM+30 90E8 1025 0085 LBCS QUIT 90EC 1F 01 TFR D,X 90EE 8D 04 BSR MARK 90F0 35 10 PULS X 90F2 AE 02 LDX 2,X 90F4 8C 0800 MARK CMPX #CELTOP 90F7 25 0B BCS MAKRTS 90F9 EC 84 LDD ,X 90FB C5 01 BITB #1 90FD 26 05 BNE MAKRTS 90FF 6C 01 INC 1,X 9101 4D TSTA 9102 2A DE BPL MARK0 9104 39 MAKRTS RTS * * collect frdd cells * 9105 8E 0800 COLLCT LDX #CELTOP 9108 108E 0418 LDY #NIL 910C CE 0000 LDU #0 910F E6 01 COLL1 LDB 1,X 9111 C5 01 BITB #1 9113 26 09 BNE COLL2 9115 10AF 84 STY ,X 9118 31 84 LEAY ,X 911A 33 41 LEAU 1,U 911C 20 02 BRA COLL3 911E 6A 01 COLL2 DEC 1,X 9120 30 04 COLL3 LEAX 4,X 9122 8C 8000 CMPX #CELBTM 9125 25 E8 BCS COLL1 9127 10BF 813B STY FREE 912B 39 RTS * * 912C 2D 2D 47 61 GMSG FCC /--Garbage Collection--/,CR,LF,0 9130 72 62 61 67 9134 65 20 43 6F 9138 6C 6C 65 63 913C 74 69 6F 6E 9140 2D 2D 0D 0A 9144 00 *-------------------------------------- * * DISK I/O * *-------------------------------------- *** *** ( MREAD filename ) SUBR *** read s-expr from DISK *** val <= s-expr *** 9145 8D 10 MREAD BSR OPENR open file 9147 17 F5B4 LBSR READ read s-expr 914A 20 68 BRA CLOSEI close file *** *** ( MPRINT filename expr ) SUBR *** write expr into DISK file *** val <= expr *** 914C 8D 14 MPRINT BSR OPENW open output file 914E 30 A4 LEAX ,Y 9150 17 F454 LBSR PRINT print expr 9153 20 5C BRA CLOSEO close file *** *** ( LOAD 'filename ) FSUBR *** load programs *** val <= NIL *** 9155 AE 84 LOAD LDX ,X *** *** ( OPENR filename ) SUBR *** open input file *** val <= NIL *** 9157 34 10 OPENR PSHS X 9159 8D 59 BSR CLOSEI close input file 915B 35 10 PULS X 915D 17 F6D3 LBSR STRING 9160 20 4C BRA OPENFI open input file *** *** ( OPENW filename ) SUBR *** open output file *** val <= NIL *** 9162 34 10 OPENW PSHS X 9164 8D 4B BSR CLOSEO close output file 9166 35 10 PULS X 9168 17 F6C8 LBSR STRING 916B 20 3E BRA OPENFO open output file *** *** ( CLOSER ) SUBR *** close read file *** val <= NIL *** 91B4 CLOSER EQU CLOSEI *** *** ( CLOSEW ) SUBR *** close write file *** val <= NIL *** 91B1 CLOSEW EQU CLOSEO *** *** ( CLOSE ) SUBR *** close I/O files *** val <= NIL *** 916D 8D 45 CLOSE BSR CLOSEI 916F 20 40 BRA CLOSEO *** *** ( QUIT ) SUBR *** terminate lisp, return to monitor *** 9171 8D FA QUIT BSR CLOSE close any open files 9173 8E 917B LDX #QMSG 9176 17 F409 LBSR MSG print message 9179 20 3F BRA MON * 917B 0D 0A QMSG FCC CR,LF 917D 6D 61 79 20 FCC /may the force be with you!/ 9181 74 68 65 20 9185 66 6F 72 63 9189 65 20 62 65 918D 20 77 69 74 9191 68 20 79 6F 9195 75 21 9197 0D 0A 00 FCB CR,LF,0 *** *** ( DOS 'command ) FSUBR *** execute DOS command *** val <= NIL *** 919A AE 84 DOS LDX ,X 919C 17 F694 LBSR STRING 919F 34 60 PSHS Y,U 91A1 8D 14 BSR DODOS 91A3 35 E0 PULS Y,U,PC *************************************** * * LISP-09 I/O DRIVERS * 1982.9.21 * *************************************** * * JUMP TABLE * 91A5 16 029A OUTPUT LBRA OUTPT1 * output char in A to terminal ( OUTSW = 0 ) or * disk (OUTSW <> 0 ) * 91A8 16 02A5 INPUT LBRA INPUT1 * input char from terminal ( INSW = 0 ) or disk * ( INSW <> 0 ) without echo * 91AB 16 02B5 OPENFO LBRA OPNFO1 * open file for output * X = filename pointer ( terminater = 0 ) * 91AE 16 02C8 OPENFI LBRA OPNFI1 * open file for input * X = filename pointer * 91B1 16 030E CLOSEO LBRA CLSO1 * close output file * 91B4 16 0310 CLOSEI LBRA CLSI1 * close input file * 91B7 16 0301 DODOS LBRA DODOS1 * execute DOS command * X = pointer to DOS command string * 91BA 7E CD03 MON JMP FLEX * return to FLEX * 91BD 16 0314 INIT LBRA INI1 * initialize system * ********** * * SYSTEM ADDRESSES * CD03 FLEX EQU $CD03 FLEX warm start entry D3F9 OUTCH EQU $D3F9 output char ( pointer ) D3E5 INCHNE EQU $D3E5 input char ( pointer ) CD18 PUTCHR EQU $CD18 put character D406 FMS EQU $D406 FMS call CD24 PCRLF EQU $CD24 output crlf CD2D GETFIL EQU $CD2D get file specification CD33 SETEXT EQU $CD33 set extension CD3F RPTERR EQU $CD3F report error message CD4B DOCMND EQU $CD4B call DOS as a subroutine C080 FLBUF EQU $C080 FLEX input line buffer CC14 FLBUFP EQU $CC14 FLEX line buffer pointer CC16 ESCRTN EQU $CC16 escape return register CC0E SYSDAT EQU $CC0E system date register * * FMS functions * 0001 FMSR EQU 1 : read command 0002 FMSW EQU 2 : write command 0004 FMSC EQU 4 : close command * * FILE CONTROL BLOCKS * 91C0 00 OUTSW FCB 0 output file switch 91C1 OUTFCB RMB 320 output file FCB 9301 00 INSW FCB 0 input file switch 9302 INFCB RMB 320 input file FCB * * 9442 34 34 OUTPT1 PSHS B,X,Y 9444 8E 91C0 LDX #OUTSW 9447 6D 80 TST ,X+ 9449 26 14 BNE FLEXIO 944B BD CD18 JSR PUTCHR 944E 35 B4 PULS B,X,Y,PC * 9450 34 34 INPUT1 PSHS B,X,Y 9452 8E 9301 LDX #INSW 9455 6D 80 TST ,X+ 9457 26 06 BNE FLEXIO 9459 AD 9F D3E5 JSR [INCHNE] 945D 35 B4 PULS B,X,Y,PC * 945F 8D 2E FLEXIO BSR CALFMS 9461 35 B4 PULS B,X,Y,PC * 9463 8D 40 OPNFO1 BSR SETSTR 9465 8E 91C1 LDX #OUTFCB 9468 BD CD2D JSR GETFIL 946B 25 2D BCS FILERR 946D 86 01 LDA #1 946F B7 91C0 STA OUTSW 9472 BD CD33 JSR SETEXT 9475 86 02 LDA #FMSW 9477 20 14 BRA OPNFIL * 9479 8D 2A OPNFI1 BSR SETSTR 947B 8E 9302 LDX #INFCB 947E BD CD2D JSR GETFIL 9481 25 17 BCS FILERR 9483 86 01 LDA #1 9485 B7 9301 STA INSW 9488 BD CD33 JSR SETEXT 948B 86 01 LDA #FMSR 948D A7 84 OPNFIL STA ,X 948F BD D406 CALFMS JSR FMS 9492 27 10 BEQ FMSRTS 9494 A6 01 LDA 1,X 9496 81 08 CMPA #8 9498 27 06 BEQ FMSEOF 949A BD CD3F FILERR JSR RPTERR 949D 16 EB63 LBRA WARMS 94A0 8D 25 FMSEOF BSR CLSI1 94A2 86 0D LDA #CR 94A4 39 FMSRTS RTS * 94A5 34 20 SETSTR PSHS Y 94A7 108E C080 LDY #FLBUF 94AB 10BF CC14 STY FLBUFP 94AF A6 80 STSTR1 LDA ,X+ 94B1 A7 A0 STA ,Y+ 94B3 26 FA BNE STSTR1 94B5 86 0D LDA #CR 94B7 A7 A2 STA ,-Y 94B9 35 A0 PULS Y,PC * 94BB 8D E8 DODOS1 BSR SETSTR 94BD BD CD4B JSR DOCMND 94C0 20 12 BRA INI1 * 94C2 8E 91C0 CLSO1 LDX #OUTSW 94C5 20 03 BRA CLSIO * 94C7 8E 9301 CLSI1 LDX #INSW 94CA 6D 84 CLSIO TST ,X 94CC 27 D6 BEQ FMSRTS 94CE 6F 80 CLR ,X+ 94D0 86 04 LDA #FMSC 94D2 20 B9 BRA OPNFIL * 94D4 CC 8003 INI1 LDD #WARMS 94D7 FD CC16 STD ESCRTN 94DA 39 RTS *-------------------------------------- * * START UP INITIALIZATION * *-------------------------------------- * 94DB XXXXX EQU * * * 94DB 10CE A000 STARTU LDS #SSKBTM 94DF CE C000 LDU #USKBTM 94E2 8E 956F LDX #LSPMSG 94E5 CC 1E00 LDD #(CELBTM-CELTOP)/4 94E8 8D 61 BSR MSGOUT 94EA CC 0773 LDD #AAAAA-ATMTOP 94ED 8D 5C BSR MSGOUT 94EF CC 188D LDD #USKBTM-AAAAA 94F2 8D 57 BSR MSGOUT 94F4 CC 0B25 LDD #SSKBTM-LSPBTM 94F7 8D 52 BSR MSGOUT * 94F9 8E 0000 LDX #HSHTOP 94FC 6F 80 STATU0 CLR ,X+ 94FE 8C 0800 CMPX #HSHBTM 9501 26 F9 BNE STATU0 9503 8E 0800 LDX #CELTOP 9506 CC 0418 LDD #NIL 9509 FD 813B STD FREE 950C ED 81 STATU1 STD ,X++ 950E 8C 8000 CMPX #CELBTM 9511 26 F9 BNE STATU1 * 9513 8E A000 LDX #ATMTOP 9516 34 10 STATU2 PSHS X 9518 30 07 LEAX 7,X 951A 17 F322 LBSR CLRABF 951D 17 F340 LBSR STORES 9520 34 10 PSHS X 9522 17 F39E LBSR MSA 9525 AE 62 LDX 2,S 9527 AF A4 STX ,Y 9529 CC A773 LDD #AAAAA 952C FD 813D STD ATMEND 952F CC A791 LDD #AAAAA+30 9532 FD 813F STD USKTOP 9535 35 30 PULS X,Y 9537 8C A773 CMPX #AAAAA 953A 26 DA BNE STATU2 * 953C CC 0012 LDD #START-COLDS-3 953F FD 8001 STD COLDS+1 9542 17 FC78 LBSR INIT 9545 17 FB44 LBSR GBC 9548 16 EAB5 LBRA COLDS * * print opening messages * 954B 34 06 MSGOUT PSHS D 954D 17 F032 LBSR MSG 9550 EC E4 LDD ,S 9552 AF E4 STX ,S 9554 8E 8122 LDX #NX 9557 ED 02 STD 2,X 9559 6F 01 CLR 1,X 955B 6F 84 CLR ,X 955D 8D 05 BSR MSGOU1 955F 17 F04B LBSR TERPRI 9562 35 90 PULS X,PC * 9564 86 D0 MSGOU1 LDA #-'0 9566 34 22 PSHS A,Y 9568 108E 8126 LDY #NY 956C 16 F0AA LBRA PRINN1 * * messages * 956F 0D 0A LSPMSG FCB CR,LF 9571 2D 2D 2D 2D FCC /---------------------------------------------/,CR,LF 9575 2D 2D 2D 2D 9579 2D 2D 2D 2D 957D 2D 2D 2D 2D 9581 2D 2D 2D 2D 9585 2D 2D 2D 2D 9589 2D 2D 2D 2D 958D 2D 2D 2D 2D 9591 2D 2D 2D 2D 9595 2D 2D 2D 2D 9599 2D 2D 2D 2D 959D 2D 0D 0A 95A0 4C 49 53 50 FCC /LISP-09 Interpreter version 2.08 1983.10.07/,CR,LF 95A4 2D 30 39 20 95A8 49 6E 74 65 95AC 72 70 72 65 95B0 74 65 72 20 95B4 20 76 65 72 95B8 73 69 6F 6E 95BC 20 32 2E 30 95C0 38 20 20 31 95C4 39 38 33 2E 95C8 31 30 2E 30 95CC 37 0D 0A 95CF 20 20 43 6F FCC / Copyright (C) 1982 by Kogakuin University/,CR,LF 95D3 70 79 72 69 95D7 67 68 74 20 95DB 28 43 29 20 95DF 31 39 38 32 95E3 20 62 79 20 95E7 4B 6F 67 61 95EB 6B 75 69 6E 95EF 20 55 6E 69 95F3 76 65 72 73 95F7 69 74 79 0D 95FB 0A 95FC 2D 2D 2D 2D FCC /---------------------------------------------/,CR,LF 9600 2D 2D 2D 2D 9604 2D 2D 2D 2D 9608 2D 2D 2D 2D 960C 2D 2D 2D 2D 9610 2D 2D 2D 2D 9614 2D 2D 2D 2D 9618 2D 2D 2D 2D 961C 2D 2D 2D 2D 9620 2D 2D 2D 2D 9624 2D 2D 2D 2D 9628 2D 0D 0A 962B 23 20 6F 66 FCC /# of free cells : /,0 962F 20 66 72 65 9633 65 20 63 65 9637 6C 6C 73 20 963B 20 3A 20 00 963F 61 74 6F 6D FCC /atom area, used : /,0 9643 20 61 72 65 9647 61 2C 20 75 964B 73 65 64 20 964F 20 3A 20 00 9653 55 73 65 72 FCC /User stack area : /,0 9657 20 73 74 61 965B 63 6B 20 61 965F 72 65 61 20 9663 20 3A 20 00 9667 53 79 73 74 FCC /System stack area: /,0 966B 65 6D 20 73 966F 74 61 63 6B 9673 20 61 72 65 9677 61 3A 20 00 *-------------------------------------- * * ATOM INFORMATION TABLE * *-------------------------------------- * A000 ORG ATMTOP * * * DATA FORMAT * * 0,1 : value of atom * 2,3 : p-list * 4,5 : function value ( expr or address ) * 6 : function type * 7--- : p-name ( terminater = 0 ) * * * MACROES * OBJ MACRO FDB &1,&2,&3 FCB N&4 FCC /&5/,0 ENDM * FN MACRO FDB UNDEFI,NIL,&1 FCB N&2 FCC /&1/,0 ENDM * * * 0418 NIL EQU $418+HSHTOP A000 OBJ NIL,NIL,FALSE,LSUBR,NIL 0400 T EQU $400+HSHTOP A00B OBJ T,NIL,TRUE,LSUBR,T 012A UNDEFI EQU $12A+HSHTOP A014 OBJ UNDEFI,NIL,ERRUND,ERR,undefined A025 prompt OBJ COLON,NIL,ERRUND,0,PROMPT 0200 COLON EQU $200+HSHTOP A033 OBJ UNDEFI,NIL,ERRUND,0,: 00AA LAMBDA EQU $0AA+HSHTOP A03C OBJ UNDEFI,NIL,ERRUND,0,LAMBDA 0142 EXPR EQU $142+HSHTOP A04A OBJ UNDEFI,NIL,ERRUND,0,EXPR 0146 FEXPR EQU $146+HSHTOP A056 OBJ UNDEFI,NIL,ERRUND,0,FEXPR 0468 MACRO EQU $468+HSHTOP A063 OBJ UNDEFI,NIL,ERRUND,0,MACRO * 0692 QUOTE EQU $692+HSHTOP A070 OBJ UNDEFI,NIL,CAR,FSUBR,QUOTE * A07D FN COLDS,SUBR A08A FN WARMS,SUBR A097 FN QUOTIENT,LSUBR A0A7 FN TIMES,LSUBR A0B4 FN DIFFERENCE,LSUBR A0C6 FN PLUS,LSUBR A0D2 FN MAX,LSUBR A0DD FN MIN,LSUBR A0E8 FN SIGN,SUBR A0F4 FN ADD1,SUBR A100 FN SUB1,SUBR A10C FN ABS,SUBR A117 FN MINUS,SUBR A124 FN LOGAND,SUBR A132 FN LOGOR,SUBR A13F FN LOGXOR,SUBR A14D FN REMAINDER,SUBR A15E FN DIVIDE,SUBR A16C FN GCD,SUBR A177 FN RND,SUBR A182 FN INC,FSUBR A18D FN DEC,FSUBR A198 FN CALL,SUBR A1A4 FN POKE,SUBR A1B0 FN PEEK,SUBR A1BC FN ATOMLENGTH,SUBR A1CE FN LENGTH,SUBR A1DC FN ERROR,SUBR A1E9 FN CRLF,SUBR A1F5 FN SPACES,SUBR A203 FN PRINT,SUBR A210 FN TERPRI,SUBR A21E FN LPRI,SUBR A22A FN PRIN1,SUBR A237 FN TYO,SUBR A242 FN PRINH,SUBR A24F FN TYI,SUBR A25A FN READCH,SUBR A268 FN GETCH,SUBR A275 FN READ,SUBR A281 FN IMPLODE,SUBR A290 FN CONCAT,LSUBR A29E FN EXPLODE,SUBR A2AD OBJ UNDEFI,NIL,EXPLN,SUBR,EXPLODEN A2BD FN ATOMCDR,SUBR A2CC FN ATOMCAR,SUBR A2DB FN ASCII,SUBR A2E8 FN GENSYM,SUBR A2F6 FN EVAL,SUBR A302 OBJ UNDEFI,NIL,EVLIS+2,SUBR,EVLIS A30F OBJ UNDEFI,NIL,EVBODY+2,SUBR,EVBODY A31D FN COND,FSUBR A329 FN MAPCAR,SUBR A337 FN MAPCAN,SUBR A345 FN MAPC,SUBR A351 FN FUNCALL,LSUBR A360 FN APPLY,SUBR A36D FN DEFUN,FSUBR A37A FN DE,FSUBR A384 FN DF,FSUBR A38E FN DM,FSUBR A398 FN SET,SUBR A3A3 FN SETQ,FSUBR A3AF FN SETQQ,FSUBR A3BC FN FVALUE,SUBR A3CA FN PROPLIST,SUBR A3DA FN GET,SUBR A3E5 FN PUT,LSUBR A3F0 FN CARMODE,SUBR A3FF FN GBCMODE,SUBR A40E FN ECHOMODE,SUBR A41E FN PROG,FSUBR A42A FN LOOP,FSUBR A436 FN GO,FSUBR A440 FN RETURN,SUBR A44E FN PROGN,LSUBR A45B FN PROG1,LSUBR A468 FN PROG2,LSUBR A475 FN CATCH,FSUBR A482 FN THROW,FSUBR A48F FN ALPHORDER,SUBR A4A0 FN GREATERP,SUBR A4B0 FN LESSP,SUBR A4BD FN SYMBOLP,SUBR A4CC FN NUMBERP,SUBR A4DB FN ATOM,SUBR A4E7 FN LISTP,SUBR A4F4 FN EQ,SUBR A4FE FN NULL,SUBR A50A FN NOT,SUBR A515 FN PLUSP,SUBR A522 FN MINUSP,SUBR A530 FN ONEP,SUBR A53C FN ZEROP,SUBR A549 FN EQUAL,SUBR A556 FN MEMBER,SUBR A564 FN ASSOC,SUBR A571 FN MEMQ,SUBR A57D FN ASSQ,SUBR A589 FN CAAAR,SUBR A596 FN CAADR,SUBR A5A3 FN CADAR,SUBR A5B0 FN CADDR,SUBR A5BD FN CDAAR,SUBR A5CA FN CDADR,SUBR A5D7 FN CDDAR,SUBR A5E4 FN CDDDR,SUBR A5F1 FN CAAR,SUBR A5FD FN CADR,SUBR A609 FN CDAR,SUBR A615 FN CDDR,SUBR A621 FN CAR,SUBR A62C FN CDR,SUBR A637 FN LAST,SUBR A643 FN REVERSE,SUBR A652 FN COPY,SUBR A65E FN APPEND,LSUBR A66C FN NCONC,LSUBR A679 FN AND,FSUBR A684 FN OR,FSUBR A68E FN RPLACA,SUBR A69C FN RPLACD,SUBR A6AA FN LIST,LSUBR A6B6 FN OBLIST,SUBR A6C4 FN POP,FSUBR A6CF FN PUSH,FSUBR A6DB FN CONS,SUBR A6E7 FN GBC,SUBR A6F2 FN MREAD,SUBR A6FF FN MPRINT,SUBR A70D FN LOAD,FSUBR A719 FN OPENR,SUBR A726 FN OPENW,SUBR A733 FN CLOSER,SUBR A741 FN CLOSEW,SUBR A74F FN CLOSE,SUBR A75C FN QUIT,SUBR A768 FN DOS,FSUBR * * * A773 AAAAA EQU * END COLDS 0 ERROR(S) DETECTED SYMBOL TABLE: AAAAA A773 ABF 80B5 ABFL 0064 ABFP 811A ABS 820F ADD1 81FE ADD11 8202 ALPHO1 8DCE ALPHOR 8DC6 AND 8FC3 AND1 8FC7 APMACR 8B83 APPEN1 8F5E APPEND 8F5A APPLY 8B2E APPLY0 8B2A APPLYL 8B89 APPXY 8F7A APSUB1 8B7B APSUB2 8B7E APSUBR 8B70 ARITH 815B ARITH1 8164 ASCII 8937 ASSOC 8E9A ASSOC0 8E97 ASSOC1 8EA8 ASSQ 8EC1 ASSQ0 8EBC ASSQ1 8ECE ATMEND 813D ATMTOP A000 ATOM 8DF3 ATOMCA 88B9 ATOMCD 88AD ATOML1 846A ATOMLE 845B BEL 0007 BIND 8A52 BIND1 8A57 BIND2 8A75 BINDA 8A83 BINDA0 8A81 BINRTS 8A98 BLANK 85A3 BS 0008 CAAAR 8ED0 CAADR 8ED4 CAAR 8ED6 CADAR 8EDA CADDR 8EDE CADR 8EE0 CALFMS 948F CALL 8420 CAN 0018 CAR 8EE2 CARERR 8EE7 CARMOD 8CBF CARRTS 8EF8 CARSW 8133 CARX 8EF4 CATCH 8D59 CATCH1 8D8C CATCHL 8137 CATERR 8DA8 CDAAR 8F00 CDADR 8F04 CDAR 8F06 CDDAR 8F0A CDDDR 8F0E CDDR 8F10 CDR 8F12 CDRX 8EF9 CELBTM 8000 CELTOP 0800 CLOSE 916D CLOSEI 91B4 CLOSEO 91B1 CLOSER 91B4 CLOSEW 91B1 CLRABF 883F CLSI1 94C7 CLSIO 94CA CLSO1 94C2 COLDS 8000 COLL1 910F COLL2 911E COLL3 9120 COLLCT 9105 COLON 0200 CONCAT 8865 COND 8AB6 COND0 8AB2 CONS 9063 CONSN 9072 CONSN1 9074 CONSU 9065 CONSUU 9067 COPY 8F33 COPY1 8F57 CPYRTS 8F59 CR 000D CRLF 8587 CRLF1 858E DE 8BB3 DE1 8BB6 DE2 8BB8 DE3 8BBA DEC 83F4 DEFUN 8B96 DF 8BCD DF1 8BD0 DIFFER 814F DIV 828D DIV1 829C DIV2 82A4 DIV3 82B5 DIV4 82D1 DIVIDE 825C DIVRTS 8315 DM 8BD4 DM1 8BD7 DOCMND CD4B DODOS 91B7 DODOS1 94BB DOS 919A ECHOMO 8CD7 ECHOSW 8132 EOUT 86CE EOUTB1 86CC EOUTBS 86C4 EQ 8DFF EQUAL 8E60 EQUAL0 8E4D EQUAL1 8E6B EQUAL2 8E6F EQUAL3 8E72 ERMRTS 8CCA ERR 84C2 ERRATM 8513 ERRCAR 84E4 ERRCAT 84D1 ERRDE 8506 ERRGBC 84A0 ERRM 8480 ERRMSA 84B1 ERRNUM 854A ERROR 84CD ERRPRG 84FF ERRPUT 855C ERRS 8577 ERRSET 84F9 ERRSSK 848E ERRSTR 8523 ERRUND 8535 ERRUSK 8497 ERRXY 8562 ESCRTN CC16 EVAL 897E EVAL1 899C EVAL2 899F EVAL3 89A4 EVAL9 89CF EVALL 89D2 EVALL1 89E2 EVALL2 89E0 EVBOD0 8AA2 EVBOD1 8AAF EVBODY 8AA7 EVEXP1 8A41 EVEXP2 8A43 EVEXPR 8A3F EVFEXP 8A4D EVFSBR 896E EVLIS 89E8 EVLIS1 8A11 EVLSB1 8A38 EVLSBR 8A36 EVMAC1 8978 EVMACR 8975 EVSBR1 8A2F EVSUBR 8A14 EXPL1 8883 EXPL2 8898 EXPLN 8880 EXPLOD 887B EXPR 0142 FALSE 8E0F FEXPR 0146 FF 000C FILERR 949A FLBUF C080 FLBUFP CC14 FLEX CD03 FLEXIO 945F FMS D406 FMSC 0004 FMSEOF 94A0 FMSR 0001 FMSRTS 94A4 FMSW 0002 FREE 813B FUNCAL 8B20 FVALU1 8C45 FVALUE 8C22 GBC 908C GBCMOD 8CCB GBCSW 8134 GBUF 811C GCD 826D GCD1 8270 GENSY0 894E GENSY1 8954 GENSY2 8957 GENSY3 8965 GENSYM 893F GET 8C55 GETCH 8674 GETFIL CD2D GETL1 8680 GETL2 8686 GETL3 86A4 GETL4 86AD GETL5 86AF GETL6 86B6 GETLIN 867A GMSG 912C GO 8D40 GOSW 8135 GREATE 8DDB HSHBTM 0800 HSHTOP 0000 IBF 804E IBFL 0064 IBFP 80B3 IMPLD1 8867 IMPLD2 8877 IMPLOD 8865 IN 86D6 IN1 86DB IN2 86E5 INC 83DA INCHNE D3E5 INF 81A5 INFCB 9302 INFV 841A INI1 94D4 INIT 91BD INITIO 8032 INITVA 8041 INPUT 91A8 INPUT1 9450 INSW 9301 LAMBDA 00AA LAST 8F1E LAST0 8F1A LENGT1 8476 LENGTH 8472 LESSP 8DDD LF 000A LIST 899C LISTP 8DF9 LOAD 9155 LOGAND 821C LOGOR 822E LOGXOR 8240 LOOP 8CFC LOOP1 8D09 LPRI 85C1 LPRI0 85B5 LPRI1 85C9 LSPBTM 94DB LSPMSG 956F LSPTOP 8000 MACRO 0468 MAKRTS 9104 MAPC 8B08 MAPC1 8B0A MAPCA1 8AE8 MAPCAN 8AEB MAPCAR 8ACD MARK 90F4 MARK0 90E2 MARKS 90AD MARKS1 90B1 MARKS2 90C2 MARKS3 90C4 MARKS4 90D0 MARKS5 90D6 MATM 878D MATM1 87AB MATM2 87AD MATM3 87B3 MATM4 87C6 MATM5 87D2 MAX 817A MAXRTS 83B4 MEMBE0 8E86 MEMBER 8E89 MEMQ 8EB3 MEMQ0 8EB0 MEMRTS 8EBB MIN 8183 MINF 81AA MINFV 8412 MINUS 8215 MINUS1 8217 MINUSP 8E23 MNA 81EE MNA0 81EC MNAA 8440 MNAA1 844B MNAX 8454 MNAY 8452 MON 91BA MONE 819B MONEV 841C MPRINT 914C MREAD 9145 MSA 88C3 MSA1 88C9 MSA2 88DC MSA3 88EF MSA4 88D7 MSA5 88FA MSA6 8912 MSAA 88BE MSG 8582 MSG0 857F MSGOU1 9564 MSGOUT 954B MULT 8316 MULT1 8339 MULT2 8346 N0 0000 N10 87FE N10A 87F1 N10A1 880A NADD 837F NASL 830D NASL2 830B NASL3 8309 NASL4 8307 NCMP 839D NCONC 8F97 NCONC1 8F9B NCONC2 8FB3 NCONC3 8FBC NCONC4 8FBF NCONC5 8FC1 NERR 0007 NEW 9080 NEW0 907A NEXPR 0009 NFEXPR 000A NFSUBR 0002 NIL 0418 NLSUBR 0003 NMACRO 000C NMAX 83A8 NMAX1 83AC NMIN 83B5 NNEG 82F6 NNEGY 82E5 NOT 8E0A NR 812C NSIGN 813A NSUB 838E NSUBR 0001 NULL 8E0A NUMBER 8DEE NUMRTS 81EB NUMS 81AF NUMX 81BE NUMXY 81BC NUMY 81D4 NX 8122 NY 8126 OBLIS1 9011 OBLIS2 901A OBLIST 900A OLDCHR 8139 ONE 81A0 ONEP 8E32 ONEP1 8E38 ONEV 8416 OP 8130 OPENFI 91AE OPENFO 91AB OPENR 9157 OPENW 9162 OPNFI1 9479 OPNFIL 948D OPNFO1 9463 OR 8FE9 OR0 8FDC OR1 8FEF OUT 8602 OUTCH D3F9 OUTFCB 91C1 OUTPT1 9442 OUTPUT 91A5 OUTSW 91C0 PCRLF CD24 PEEK 843A PLUS 8154 PLUS1 8157 PLUSP 8E14 POKE 842E POP 9024 PRG1 8CF4 PRGRTS 8D3F PRIN1 85D6 PRIN2 85F0 PRINH 8643 PRINH1 865E PRINH2 8654 PRINH4 8650 PRINN 8605 PRINN1 8619 PRINN2 8632 PRINN3 8634 PRINT 85A7 PRIRTS 85A2 PROG 8CE3 PROG1 8EE2 PROG2 8EE0 PROG9 8CE7 PROGN 8D54 PROGN0 8D4F PROGS 8D14 PROGS1 8D30 PROGS2 8D3D PROPLI 8C48 PUSH 903E PUT 8C6F PUT1 8CA7 PUTCHR CD18 PUTERR 8C72 QMSG 917B QUIT 9171 QUOTE 0692 QUOTIE 8141 READ 86FE READA 8776 READA0 8770 READA1 878A READCH 866F READG 8738 READR 8742 READR1 8760 READR2 8762 READR3 876C READS 8819 READS0 8817 REDRTS 876F REMAIN 8253 RETURN 8D49 REVER0 8F23 REVERS 8F2A RND 83BA RNDV 840E RPLACA 8FF2 RPLACD 8FFE RPTERR CD3F RTNSW 8136 SET 8BDB SET9 8C1F SETEXT CD33 SETQ 8C00 SETQ0 8BEE SETQ1 8C06 SETQQ 8C13 SETQQ0 8C09 SETSTR 94A5 SIGN 818C SKIP 86F3 SKIP0 86E9 SPACE1 859C SPACES 8595 SSKBTM A000 START 8015 START1 8023 STARTU 94DB STATU0 94FC STATU1 950C STATU2 9516 STORE0 885E STORE1 885C STOREA 884B STORES 8860 STRING 8833 STSTR1 94AF SUB1 8209 SYMBOL 8DE7 SYSDAT CC0E T 0400 TERPRI 85AD THROW 8D8E THROW1 8DBC TIMES 8146 TIMES1 8149 TRUE 8E05 TSTCLC 87EE TSTDEC 87E7 TSTHEX 87DC TSTRTS 87F0 TYI 866A TYO 863C UNBIN0 8A99 UNBIND 8A9D UNDEFI 012A USKBTM C000 USKTOP 813F WARMS 8003 WARMS1 8006 WARMS2 8009 XXXXX 94DB ZERO 8196 ZEROP 8E49 ZEROV 8414 prompt A025