# HG changeset patch # User Shinji KONO # Date 1620791840 -32400 # Node ID 63de06ad7a49cd7e578319dbe91907086f64d7c9 # Parent 41d578d28d8cc74378991ed1ca54f8fdb2aff359 add LISP09 (not yet finished) diff -r 41d578d28d8c -r 63de06ad7a49 LISP09/LISP09.LST --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LISP09/LISP09.LST Wed May 12 12:57:20 2021 +0900 @@ -0,0 +1,3437 @@ + + + + + *====================================== + * + * 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 + + + + diff -r 41d578d28d8c -r 63de06ad7a49 LISP09/LISP09.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LISP09/LISP09.txt Wed May 12 12:57:20 2021 +0900 @@ -0,0 +1,3217 @@ + + + +*====================================== +* +* LISP-09 INTERPRETER +* vers.2.08 +* written by TERUO SERIZAWA +* 1982.11.04 +* 83.10.07 +* +*====================================== +* +* +* ADDRESS MAP +* +HSHTOP EQU $0000 +HSHBTM EQU HSHTOP+$800 +* atom hash table +* # of atoms : 1024 +* if contents=0 : undefined +* else : pointer to atom information table +* +CELTOP EQU HSHBTM +CELBTM EQU $8000 +* cell area ( lists and numbers ) +* # of cells : 7680 +* +LSPTOP EQU CELBTM +LSPBTM EQU XXXXX +* LISP-09 interpreter +* +* S stack is here +SSKBTM EQU $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 +USKBTM EQU $C000 +* +* $C000-$FFFF FLEX SYSTEM +* + + +*-------------------------------------- +* +* MAIN PROGRAM +* +*-------------------------------------- +* + ORG LSPTOP +COLDS LBRA STARTU +WARMS LBRA WARMS2 +* +* unbind variables +* +WARMS1 LBSR UNBIND +WARMS2 CMPU USKTOP + BCS START + CMPU #USKBTM + BCS WARMS1 +* +* initialize system +* +START LDS #SSKBTM + LDU #USKBTM + BSR INITIO + BSR INITVA + LBSR TERPRI +* +* +* LISP system top level function +* +START1 LBSR READ + LEAX ,Y + LBSR EVAL + LEAX ,Y + LBSR PRINT + BRA START1 +* +* initialize I/O +* +INITIO LBSR CLOSE + CLR ECHOSW + CLR OLDCHR + LDX IBFP + CLR ,X + RTS +* +* initialize system variables +* +INITVA CLR GOSW + CLR RTNSW + LDX #NIL + STX CATCHL + RTS + +*-------------------------------------- +* +* CONSTANTS AND VARIABLES +* +*-------------------------------------- +* +* +* MACROES +* +TESTS MACRO + CMPS #LSPBTM+100 + LBCS ERRSSK + ENDM +* +TESTU MACRO + CMPU USKTOP + LBCS ERRUSK + ENDM +* +* +* ASCII CHARACTERS +* +BEL EQU $07 +BS EQU $08 +LF EQU $0A +FF EQU $0C +CR EQU $0D +CAN EQU $18 +* +* +* FUNCTION TYPES +* +N0 EQU 0 +NSUBR EQU 1 +NFSUBR EQU 2 +NLSUBR EQU 3 +NERR EQU 7 +NEXPR EQU 9 +NFEXPR EQU 10 +NMACRO EQU 12 +* +* +* SYSTEM VARIABLES +* +IBFL EQU 100 +IBF RMB IBFL + FCB 0 +IBFP FDB IBF +* +ABFL EQU 100 +ABF RMB ABFL + FCB 0 +ABFP FDB ABF +* +GBUF FCC /0000/ + FDB 0 +NX RMB 4 +NY RMB 4 + FDB 0 +NR RMB 4 +OP RMB 2 +* +ECHOSW FCB 0 +CARSW FCB 0 +GBCSW FCB 0 +GOSW FCB 0 +RTNSW FCB 0 +CATCHL FDB NIL +* +OLDCHR FCB 0 +NSIGN FCB 0 +* +FREE FDB NIL +ATMEND FDB AAAAA +USKTOP FDB AAAAA+30 + +*-------------------------------------- +* +* ARITHMETIC FUNCTIONS +* +*-------------------------------------- +*** +*** ( QUOTIENT n1 n2 ... ) +*** val <= n1 / n2 / ... +*** +QUOTIE LDD #DIV + BRA TIMES1 +*** +*** ( TIMES n1 n2 ... ) LSUBR +*** val <= n1 * n2 * ... +*** +TIMES LDD #MULT +TIMES1 TST ,X + BMI ONE + BRA ARITH +*** +*** ( DIFFERENCE n1 n2 ... ) LSUBR +*** val <= n1 - n2 - ... +*** +DIFFER LDD #NSUB + BRA PLUS1 +*** +*** ( PLUS n1 n2 ... ) LSUBR +*** val <= n1 + n2 + ... +*** +PLUS LDD #NADD +PLUS1 TST ,X + BMI ZERO +* +* execute arithmetic functions +* X : list of arguments +* +ARITH STD OP + PSHU X + LDX ,X + BSR NUMX +ARITH1 LDY ,U + LDY 2,Y + STY ,U + LDY ,Y + BMI MNA0 + BSR NUMY + JSR [OP] + BRA ARITH1 +*** +*** ( MAX n1 n2 ... ) LSUBR +*** val <= maximum value of numbers +*** +MAX LDD #NMAX + TST ,X + BMI MINF + BRA ARITH +*** +*** ( MIN n1 n2 ... ) LSUBR +*** val <= minimum value of numbers +*** +MIN LDD #NMIN + TST ,X + BMI INF + BRA ARITH +*** +*** ( SIGN n ) SUBR +*** if n>0 then val <= 1 +*** n=0 0 +*** n<0 -1 +*** +SIGN BSR NUMX + BMI MONE + BNE ONE + LDD 2,X + BNE ONE +* +* value <= 0 +* +ZERO LDX #ZEROV + BRA MNA +* +* value <= -1 +* +MONE LDX #MONEV + BRA MNA +* +* value <= 1 +* +ONE LDX #ONEV + BRA MNA +* +* value <= infinity ( largest number ) +* +INF LDX #INFV + BRA MNA +* +* value <= minus infinity ( smallest number ) +* +MINF LDX #MINFV + BRA MNA +* +* transpose numerical atom(s) into number register(s) +* +NUMS LBPL ERRNUM + ASRA + RORB + BITA #$20 + BNE NUMRTS + ANDA #$3F + RTS +* +NUMXY BSR NUMY +NUMX CMPX #CELTOP + LBCS ERRNUM + LDD 2,X + STD NX+2 + LDD ,X + BSR NUMS + LDX #NX + STD ,X + RTS +* +NUMY CMPY #CELTOP + LBCS ERRNUM + LDD 2,Y + STD NY+2 + LDD ,Y + BSR NUMS + LDY #NY + STD ,Y +NUMRTS RTS +* +* make numerical atom +* X : number register +* +MNA0 LEAU 2,U +* +MNA LBSR NEW + LDD ,X + ASLB + ROLA + ORA #$80 + STD ,Y + LDD 2,X + STD 2,Y + RTS +*** +*** ( ADD1 n ) SUBR +*** val <= n + 1 +*** +ADD1 LDY #ONEV +ADD11 BSR NUMX + LBSR NADD + BRA MNA +*** +*** ( SUB1 n ) SUBR +*** val <= n - 1 +*** +SUB1 LDY #MONEV + BRA ADD11 +*** +*** ( ABS n ) SUBR +*** val <= absolute value of n +*** +ABS BSR NUMX + BPL MNA + BRA MINUS1 +*** +*** ( MINUS n ) SUBR +*** val <= - n +*** +MINUS BSR NUMX +MINUS1 LBSR NNEG + BRA MNA +*** +*** ( LOGAND n1 n2 ) SUBR +*** logical operation +*** val <= n1 and n2 +*** +LOGAND BSR NUMXY + ANDA ,Y + ANDB 1,Y + STD ,X + LDD 2,X + ANDA 2,Y + ANDB 3,Y + STD 2,X + BRA MNA +*** +*** ( LOGOR n1 n2 ) SUBR +*** logical operation +*** val <= n1 or n2 +*** +LOGOR BSR NUMXY + ORA ,Y + ORB 1,Y + STD ,X + LDD 2,X + ORA 2,Y + ORB 3,Y + STD 2,X + BRA MNA +*** +*** ( LOGXOR n1 n2 ) SUBR +*** logical ,exclusive-OR> operation +*** val <= n1 xor n2 +*** +LOGXOR LBSR NUMXY + EORA ,Y + EORB 1,Y + STD ,X + LDD 2,X + EORA 2,Y + EORB 3,Y + STD 2,X + BRA MNA +*** +*** ( REMAINDER n1 n2 ) SUBR +*** val <= n1 mod n2 +*** +REMAIN LBSR NUMXY + BSR DIV + LEAX ,Y + BRA MNA +*** +*** ( DIVIDE n1 n2 ) SUBR +*** n1 / n2 +*** val <= dot pAir of quotient and remainder +*** +DIVIDE LBSR NUMXY + BSR DIV + BSR MNA + PSHU Y + LDX #NY + BSR MNA + LBRA CONSU +*** +*** ( GCD n1 n2 ) SUBR +*** greatest common divisor +*** val <= GCD ( n1, n2 ) +*** +GCD LBSR NUMXY +GCD1 LDD 2,Y + PSHS D + LDD ,Y + PSHS D + BSR DIV + PULS D + STD ,X + PULS D + STD 2,X + LDD 2,Y + BNE GCD1 + LDD ,Y + BNE GCD1 + LBRA MNA +* +* divide NX by NY +* NX <= NX / NY quotient +* NY <= NX mod NY remainder +* +DIV LEAS -8,S + LDD #30 + STD 4,S + LDA ,X + BPL DIV1 + INC 4,S + BSR NNEG +DIV1 LDA ,Y + BMI DIV2 + INC 4,S + BSR NNEGY +DIV2 LDD ,Y + STD ,S + LDD 2,Y + STD 2,S + LDD #0 + STD ,Y + STD 2,Y + BSR NASL3 +DIV3 ROL 3,Y + ROL 2,Y + ROL 1,Y + ROL ,Y + LDD 2,Y + ADDD 2,S + STD 6,S + LDD ,Y + ADCB 1,S + ADCA ,S + BCC DIV4 + STD ,Y + LDD 6,S + STD 2,Y +DIV4 ROL 3,X + ROL 2,X + ROL 1,X + ROL ,X + DEC 5,S + BNE DIV3 + DEC 4,S + LEAS 8,S + BEQ DIVRTS + BSR NNEG +* +* negate number +* Y : number register +* +NNEGY LDD #0 + SUBD 2,Y + STD 2,Y + LDD #0 + SBCB 1,Y + SBCA ,Y + STD ,Y + RTS +* +* negate number +* X : number register +* +NNEG LDD #0 + SUBD 2,X + STD 2,X + LDD #0 + SBCB 1,X + SBCA ,X + STD ,X + RTS +* +* arithmetic shift left +* X : number register +* +NASL4 BSR NASL +NASL3 BSR NASL +NASL2 BSR NASL +NASL ASL 3,X + ROL 2,X + ROL 1,X + ROL ,X +DIVRTS RTS +* +* multiply NX with NY +* NX <= NX * NY +* +MMM MACRO + LDA &1,S + LDB &2,Y + MUL + ENDM +* +MULT LDD 2,X + PSHS D + LDD ,X + PSHS D + MMM 3,3 + STD 2,X + MMM 2,2 + STD ,X + MMM 3,2 + ADDD 1,X + STD 1,X + BCC MULT1 + INC ,X +MULT1 MMM 2,3 + ADDD 1,X + STD 1,X + BCC MULT2 + INC ,X +MULT2 MMM 1,3 + ADDD ,X + STD ,X + MMM 3,1 + ADDD ,X + STD ,X + MMM 0,3 + ADDB ,X + STB ,X + MMM 1,2 + ADDB ,X + STB ,X + MMM 2,1 + ADDB ,X + STB ,X + MMM 3,0 + ADDB ,X + STB ,X + LEAS 4,S + RTS +* +* add numbers +* NX <= NX + NY +* +NADD LDD 2,X + ADDD 2,Y + STD 2,X + LDD ,X + ADCB 1,Y + ADCA ,Y + STD ,X + RTS +* +* subtract numbers +* NX <= NX - NY +* +NSUB LDD 2,X + SUBD 2,Y + STD 2,X + LDD ,X + SBCB 1,Y + SBCA ,Y + STD ,X + RTS +* +* compare numbers +* CCR <= NX - NY +* +NCMP LDD 2,X + SUBD 2,Y + LDD ,X + SBCB 1,Y + SBCA ,Y + RTS +* +* NX <= max ( NX, NY ) +* +NMAX BSR NCMP + BGE MAXRTS +NMAX1 LDD ,Y + STD ,X + LDD 2,Y + STD 2,X +MAXRTS RTS +* +* NX <= min ( NX, NY ) +* +NMIN BSR NCMP + BGE NMAX1 + RTS +*** +*** ( RND n ) SUBR +*** generate random number +*** val <= 0 .. n-1 +*** +RND LBSR NUMX + LDX #NR + LDY #RNDV + LBSR MULT + LDY #ONEV + BSR NADD + LEAY -2,X + LDX #NX + LBSR MULT + LEAX -2,X + LBRA MNA +*** +*** ( INC 'var ) FSUBR +*** increae value of var by 1 +*** (SETQ var (ADD1 var)) +*** +INC LDX ,X + LBMI ERROR + CMPX #CELTOP + LBCC ERRATM + LDX ,X + PSHS X + LDX ,X + LBSR ADD1 + STY [,S++] + RTS +*** +*** ( DEC 'var ) FSUBR +*** decrease value of var by 1 +*** (SETQ var (SUB1 var)) +*** +DEC LDX ,X + LBMI ERROR + CMPX #CELTOP + LBCC ERRATM + LDX ,X + PSHS X + LDX ,X + LBSR SUB1 + STY [,S++] + RTS +* +* numerical constants +* +RNDV FDB $0019,$660D +MINFV FDB $2000 +ZEROV FDB $0000 +ONEV FDB $0000,$0001 +INFV FDB $1FFF +MONEV FDB $FFFF,$FFFF +*** +*** ( CALL address ) SUBR +*** call subroutine +*** val <= NIL +*** +CALL LBSR NUMX + PSHS U + JSR [2,X] + LDY #NIL + PULS U,PC +*** +*** ( POKE address value(8) ) SUBR +*** store Value +*** val <= value +*** +POKE PSHS Y + LBSR NUMXY + LDA 3,Y + STA [2,X] + PULS Y,PC +*** +*** ( PEEK address ) SUBR +*** val <= memory value of address +*** +PEEK LBSR NUMX + LDA [2,X] +* +* make numerical atom ( A ) +* +MNAA PSHS A + LBSR NEW + PULS A + STA 3,Y + CLR 2,Y +MNAA1 CLR 1,Y + LDA #$80 + STA ,Y + RTS +* +* make numerical atom ( Y ) +* +MNAY LEAX ,Y +MNAX LBSR NEW + STX 2,Y + BRA MNAA1 +*** +*** ( ATOMLENGTH atom ) SUBR +*** val <= length of atom +*** +ATOMLE CMPX #CELTOP + LBCC ZERO + LDX ,X + LEAX 7,X + LDY #0 +ATOML1 LDA ,X+ + BEQ MNAY + LEAY 1,Y + BRA ATOML1 +*** +*** ( LENGTH list ) SUBR +*** val <= length of list +*** +LENGTH LDY #0 +LENGT1 LDA ,X + BMI MNAY + LDX 2,X + LEAY 1,Y + BRA LENGT1 + + +*-------------------------------------- +* +* ERRORS +* +*-------------------------------------- +* +ERRM FCB CR,LF,BEL + FCC /--ERROR-- /,0 +* +ERRSSK BSR ERR + FCC /S over/,0 +ERRUSK BSR ERR + FCC /U over/,0 +ERRGBC BSR ERR + FCC /Cell area over/,0 +ERRMSA BSR ERR + FCC /Atom area over/,0 +* +ERR LBSR ERRS + PULS X + LBSR MSG + LBRA WARMS +*** +*** ( ERROR e1 e2 ) SUBR +*** print e1 e2, goto top level +*** +ERROR LBSR ERRXY + FCB 0 +* +ERRCAT LBSR ERRXY + FCC /Catch and Throw/,0 +ERRCAR BSR ERRXY + FCC /Car or Cdr of atom/,0 +ERRSET BSR ERRXY + FCC /Set/,0 +ERRPRG BSR ERRXY + FCC /Prog/,0 +ERRDE BSR ERRXY + FCC /Definition/,0 +ERRATM BSR ERRXY + FCC /Atom expected/,0 +ERRSTR BSR ERRXY + FCC /String expected/,0 +ERRUND BSR ERRXY + FCC /Undefined Function/,0 +ERRNUM BSR ERRXY + FCC /Number expected/,0 +ERRPUT BSR ERRXY + FCC /Put/,0 +* +ERRXY PSHU X,Y + BSR ERRS + PULS X + BSR MSG + BSR TERPRI + PULU X + BSR PRINT + PULU X + BSR PRINT + LBRA WARMS +* +ERRS LBSR INITIO + LDX #ERRM + BRA MSG + +*-------------------------------------- +* +* OUTPUT +* +*-------------------------------------- +* +* print message +* X : top of message +* +MSG0 LBSR OUT +MSG LDA ,X+ + BNE MSG0 + RTS +*** +*** ( CRLF num(16) ) SUBR +*** print crlfs +*** val <= NIL +*** +CRLF LBSR NUMX + LDX 2,X + BEQ PRIRTS +CRLF1 BSR TERPRI + LEAX -1,X + BNE CRLF1 + RTS +*** +*** ( SPACES num(16) ) SUBR +*** print blanks +*** val <= NIL +*** +SPACES LBSR NUMX + LDX 2,X + BEQ PRIRTS +SPACE1 BSR BLANK + LEAX -1,X + BNE SPACE1 +PRIRTS RTS +* +* print blank +* +BLANK LDA #' + BRA OUT +*** +*** ( PRIANT e ) SUBR +*** print e, print crlf +*** val <= e +*** +PRINT PSHU X + BSR PRIN1 + PULU Y +*** +*** ( TERPRI ) SUBR +*** print crlf +*** val <= NIL +*** +TERPRI LDA #CR + BSR OUT + LDA #LF + BRA OUT +*** +*** ( LPRI e ) SUBR +*** print e without top level "(" and ")" +*** val <= NIL +*** +LPRI0 BSR PRIN1 + PULS X + LDX 2,X + LDA ,X + BMI LPRI1 + BSR BLANK +LPRI PSHS X + LDX ,X + BPL LPRI0 + PULS X +LPRI1 CMPX #NIL + BEQ PRIRTS + BSR BLANK + LDA #'. + BSR OUT + BSR BLANK +*** +*** ( PRIN1 e ) SUBR +*** print e +*** val <= NIL +*** +PRIN1 TESTS + CMPX #CELBTM + BCC PRIRTS + CMPX #CELTOP + BCC PRIN2 + LDX ,X + BPL PRIRTS + LEAX 7,X + BRA MSG +* +PRIN2 TFR X,D + BITB #3 + BNE PRIRTS + LDA ,X + BMI PRINN + LDA #'( + BSR OUT + BSR LPRI + LDA #') +* +* output a char in A +* +OUT LBRA OUTPUT +* +* print number ( decimal form ) +* +PRINN LDA #-'0 + PSHS A,Y + LDY #NY + LBSR NUMX + BPL PRINN1 + LDA #'- + BSR OUT + LBSR NNEG +PRINN1 LDD #10 + STD 2,Y + CLRB + STD ,Y + LBSR DIV + LDA 3,Y + PSHS A + LDD 2,X + BNE PRINN1 + LDD ,X + BNE PRINN1 + BRA PRINN3 +* +PRINN2 BSR OUT +PRINN3 PULS A + ADDA #'0 + BNE PRINN2 + PULS Y,PC +*** +*** ( TYO num(8) ) SUBR +*** output ASCII character +*** val <= NIL +*** +TYO LBSR NUMX + LDA 3,X + BRA OUT +*** +*** ( PRINH n ) SUBR +*** print number ( hex form ) +*** val <= NIL +*** +PRINH LBSR NUMX + LDA #'$ + BSR OUT + LDD ,X + BSR PRINH4 + LDD 2,X +PRINH4 BSR PRINH2 + TFR B,A +PRINH2 PSHS A + RORA + RORA + RORA + RORA + BSR PRINH1 + PULS A +PRINH1 ANDA #$0F + ADDA #'0 + CMPA #'9+1 + BCS OUT + ADDA #7 + BRA OUT + +*-------------------------------------- +* +* INPUT +* +*-------------------------------------- +*** +*** ( TYI ) SUBR +*** read a char +*** val <= ASCII code +*** +TYI BSR IN + LBRA MNAA +*** +*** ( READCH ) SUBR +*** read a char +*** val <= symbolic atom +*** +READCH BSR IN + LBRA MSAA +*** +*** ( GETCH ) SUBR +*** read char, direct input +*** val <= symbolic atom +*** +GETCH LBSR INPUT + LBRA MSAA +* +* read a line +* +GETLIN LDX prompt + LBSR PRIN1 +GETL1 LDX #IBF + STX IBFP +GETL2 LBSR INPUT + CMPA #BS + BEQ GETL3 + CMPA #CAN + BEQ GETL5 + CMPA #CR + BEQ GETL6 + CMPA #' + BCS GETL2 + STA ,X+ + BSR EOUT + CMPX #IBF+IBFL + BNE GETL2 + BRA IN1 +* +GETL3 CMPX #IBF + BEQ GETL2 + BSR EOUTBS + BRA GETL2 +* +GETL4 BSR EOUTBS +GETL5 CMPX #IBF + BNE GETL4 + BRA GETL2 +* +GETL6 STA ,X+ + CLR ,X + TST ECHOSW + BNE IN1 + LBSR TERPRI + BRA IN1 +* +* output back space +* +EOUTBS LEAX -1,X + BSR EOUTB1 + LDA #' + BSR EOUT +EOUTB1 LDA #BS +* +* output a char +* +EOUT TST ECHOSW + LBEQ OUT + RTS +* +* read a char in A +* +IN LDA OLDCHR + BNE IN2 +IN1 LDX IBFP + LDA ,X+ + BEQ GETLIN + STX IBFP +IN2 CLR OLDCHR + RTS +* +* skip blank ( cntr ) chars, char in A +* +SKIP0 BSR IN + CMPA #'; + BEQ SKIP + CMPA #CR + BNE SKIP0 +SKIP BSR IN + CMPA #' +1 + BCS SKIP + CMPA #'; + BEQ SKIP0 + RTS +*** +*** ( READ ) SUBR +*** read a expression +*** val <= expression +*** +READ TESTS + TESTU + LBSR CLRABF + BSR SKIP + CMPA #') + BEQ READ + CMPA #'] + BEQ READ + CMPA #'( + BEQ READR + CMPA #'[ + BEQ READG + CMPA #'" + LBEQ READS + CMPA #'' + BNE READA +* +* read quate +* + BSR READ + LBSR CONSN + LDX #QUOTE + LBRA CONS +* +* read right part +* +READG BSR READR + LDA OLDCHR + CMPA #'] + BEQ IN2 + RTS +* +READR BSR SKIP + LDY #NIL + CMPA #') + BEQ REDRTS + CMPA #'] + BEQ READR3 + CMPA #'. + BEQ READR1 + STA OLDCHR + BSR READ + PSHU Y + BSR READR + LBRA CONSU +* +READR1 BSR READ +READR2 BSR SKIP + CMPA #') + BEQ REDRTS + CMPA #'] + BNE READR2 +READR3 STA OLDCHR +REDRTS RTS +* +* read atom +* +READA0 LBSR STOREA + LBSR IN +READA CMPA #' +1 + BCS READA1 + CMPA #'( + BEQ READA1 + CMPA #'[ + BEQ READA1 + CMPA #') + BEQ READA1 + CMPA #'] + BNE READA0 +READA1 STA OLDCHR +* +* make atom ( input is number ??? ) +* +MATM LDX #NX + LDD #0 + STD 2,X + STD ,X + CLR NSIGN + LDY #ABF + LDA ,Y+ + CMPA #'+ + BEQ MATM1 + CMPA #'- + BNE MATM2 + INC NSIGN +MATM1 LDA ,Y+ +MATM2 CMPA #'$ + BNE MATM4 +* +* make hex number +* + LDA ,Y+ +MATM3 BSR TSTHEX + LBCC MSA + LBSR NASL4 + ADDA 3,X + STA 3,X + LDA ,Y+ + BNE MATM3 + BRA MATM5 +* +* make decimal number +* +MATM4 BSR TSTDEC + LBCC MSA + BSR N10A + LDA ,Y+ + BNE MATM4 +* +MATM5 LDA NSIGN + LBEQ MNA + LBRA MINUS1 +* +* char in ( 0..9, A..F ) ??? +* +TSTHEX CMPA #'A + BCS TSTDEC + CMPA #'G + BCC TSTRTS + ADDA #10-'A + RTS +* +* char in ( 0..9 ) ??? +* +TSTDEC SUBA #'0 + BCS TSTCLC + CMPA #10 + RTS +* +TSTCLC CLC +TSTRTS RTS +* +* NX <= NX * 10 + A +* +N10A PSHU A + BSR N10 + LDD #0 + PSHS D + PULU B + BRA N10A1 +* +N10 LBSR NASL + LDD ,X + PSHS D + LDD 2,X + LBSR NASL2 +N10A1 ADDD 2,X + STD 2,X + PULS D + ADCB 1,X + ADCA ,X + STD ,X + RTS +* +* read string +* +READS0 BSR STOREA +READS LBSR IN + CMPA #CR + LBEQ MSA + CMPA #'" + BNE READS0 + LBSR IN + CMPA #'" + BEQ READS0 + STA OLDCHR + LBRA MSA +* +* compute string address +* +STRING CMPX #CELTOP + LBCC ERRSTR + LDX ,X + LEAX 7,X + RTS +* +* clear atom buffer +* +CLRABF PSHS X + LDX #ABF + STX ABFP + CLR ,X + PULS X,PC +* +* store a char into Atom buffer +* +STOREA PSHS X + LDX ABFP + STA ,X+ + CMPX #ABF+ABFL + BEQ STORE1 + STX ABFP + CLR ,X +STORE1 PULS X,PC +* +* store chars into atom buffer +* X : POINTER +* +STORE0 BSR STOREA +STORES LDA ,X+ + BNE STORE0 + RTS +*** +*** ( IMPLODE list_of _atom ) SUBR +*** val <= connected atom +*** +*** +*** ( CONCAT atom1 atoM2 ... ) LSUBR +*** val <= connected atom +*** +CONCAT EQU * +IMPLOD BSR CLRABF +IMPLD1 PSHU X + LDX ,X + BMI IMPLD2 + BSR STRING + BSR STORES + PULU X + LDX 2,X + BRA IMPLD1 +IMPLD2 LEAU 2,U + BRA MSA +*** +*** ( EXPLODE atom ) SUBR +*** val <= list of chars +*** +EXPLOD LDD #MSAA + BRA EXPL1 +*** +*** ( EXPLODEN atom ) SUBR +*** val <= list of ascii codes +*** +EXPLN LDD #MNAA +EXPL1 STD OP + BSR STRING + TESTU + TESTS +EXPL2 LDA ,X+ + LBEQ FALSE + PSHS X + JSR [OP] + PULS X + PSHU Y + BSR EXPL2 + LBRA CONSU +*** +*** ( ATOMCDR atom ) SUBR +*** val <= butfirst chars of atom +*** +ATOMCD BSR STRING + BSR CLRABF + LDA ,X+ + BEQ MSA + BSR STORES + BRA MSA +*** +*** ( ATOMCAR atom ) SUBR +*** val <= first char of atom +*** +ATOMCA LBSR STRING + LDA ,X +* +* make single char atom (A ) +* +MSAA LBSR CLRABF + BSR STOREA +* +* make symbolic atom +* +MSA LDX #ABF + LDD #0 +MSA1 TST ,X + BEQ MSA2 + LSRA + RORB + LSRA + RORB + LSRA + RORB + EORA ,X+ + BRA MSA1 +* +MSA4 PULS D + ADDD #2 +MSA2 ANDA #$07 + ANDB #$FE + ADDD #HSHTOP + PSHS D + LDY #ABF + LDX [,S] + BEQ MSA5 + LEAX 7,X +MSA3 LDA ,X+ + CMPA ,Y+ + BNE MSA4 + TSTA + BNE MSA3 + PULS Y,PC +* +* create new atom +* +MSA5 LEAX -10,U + PSHS X + LDX ATMEND + LDD #UNDEFI + STD ,X++ + LDD #NIL + STD ,X++ + LDD #ERRUND + STD ,X++ + CLR ,X+ +MSA6 CMPX ,S + LBCC ERRMSA + LDA ,Y+ + STA ,X+ + BNE MSA6 + LDD ATMEND + STD [2,S] + STX ATMEND + LEAX 30,X + STX USKTOP + TESTU + PULS D,Y,PC +*** +*** ( ASCII n ) SUBR +*** val <= syumbolic atom +*** +ASCII LBSR NUMX + LDA 3,X + LBRA MSAA +*** +*** ( GENSYM [atom] ) SUBR +*** generate symbolic atom +*** val <= atom +*** +GENSYM LBSR CLRABF + CMPX #NIL + BNE GENSY0 + LDA #'G + LBSR STOREA + BRA GENSY1 +GENSY0 LBSR STRING + LBSR STORES +GENSY1 LDX #GBUF+4 +GENSY2 INC ,-X + LDA ,X + CMPA #'9+1 + BNE GENSY3 + LDA #'0 + STA ,X + BRA GENSY2 +GENSY3 LDX #GBUF + LBSR STORES + LBRA MSA + + +*-------------------------------------- +* +* EVALUATION +* +*-------------------------------------- +* +* EVAL - FSUBR +* +EVFSBR LDX 2,X + LDY #NIL + RTS +* +* EVAL - MACRO +* +EVMACR LDY 2,X +EVMAC1 PULS X + BSR EVALL1 + LEAX ,Y +*** +*** ( EVAL e ) SUBR +*** val <= value of e +*** +EVAL TESTS + TESTU + LDY ,X + BPL EVAL3 + CMPX #CELTOP + BCC EVAL1 + LDY ,Y + RTS +EVAL1 LEAY ,X + RTS +EVAL2 LEAS 2,S + LDY ,Y +EVAL3 CMPY #CELTOP + BCC EVALL + LDY ,Y + LDD 4,Y + PSHS D + LDA 6,Y + BEQ EVAL2 + CMPA #NSUBR + BEQ EVSUBR + CMPA #NFSUBR + BEQ EVFSBR + CMPA #NLSUBR + BEQ EVLSBR + CMPA #NEXPR + BEQ EVEXPR + CMPA #NFEXPR + LBEQ EVFEXP + CMPA #NMACRO + BEQ EVMACR +EVAL9 LBRA ERRUND +* +* EVAL - LAMBDA +* +EVALL PSHU Y + LDD ,Y + CMPD #LAMBDA + BNE EVAL9 + BSR EVLIS + PULU X +EVALL2 LDX 2,X +EVALL1 PSHS X + LDX ,X + BRA EVEXP2 +*** +*** ( EVLIS list ) SUBR +*** evaluate each element of list +*** val <= list of values +*** +EVLIS LDX 2,X + PSHU X + LDX ,X + BMI EVLIS1 + BSR EVAL + LDX ,U + STY ,U + LDX 2,X + PSHU X + LDX ,X + LBMI CONSUU + LBSR EVAL + LDX ,U + STY ,U + BSR EVLIS + LBSR CONSU + LBRA CONSU +EVLIS1 PULU Y + RTS +* +* EVAL - SUBR +* +EVSUBR LDX 2,X + PSHU X + LDX ,X + BMI EVSBR1 + LBSR EVAL + LDX ,U + STY ,U + LDX [2,X] + BMI EVSBR1 + LBSR EVAL + PULU X + RTS +EVSBR1 PULU X + LDY #NIL + RTS +* +* EVAL - LSBUR +* +EVLSBR BSR EVLIS +EVLSB1 LEAX ,Y + LDY #NIL + RTS +* +* EVAL - EXPR +* +EVEXPR BSR EVLIS +EVEXP1 LDX [,S] +EVEXP2 BMI EVAL9 + BSR BIND + PULS X + BSR EVBODY + BRA UNBIND +* +* EVAL - FEXPR +* +EVFEXP LDY 2,X + BRA EVEXP1 +* +* bind varables +* X : variable(s) +* Y : argument(s) +* +BIND LDD #NIL + PSHU D +BIND1 TESTU + PSHS X,Y + LDX ,X + BMI BINDA0 + LDY ,Y + BMI BIND2 + BSR BINDA + PULS X,Y + LDX 2,X + LDY 2,Y + BRA BIND1 +BIND2 LDY #NIL + BSR BINDA + PULS X,Y + LDX 2,X + BRA BIND1 +* +* bind atom +* +BINDA0 PULS X,Y +BINDA CMPX #CELTOP + BCC BINRTS + CMPX #NIL + BEQ BINRTS + LDX ,X + LDD ,X + PSHU D + PSHU X + STY ,X +BINRTS RTS +* +* unbind variables +* +UNBIN0 PULU D + STD ,X +UNBIND LDX ,U++ + BMI UNBIN0 + RTS +*** +*** ( EVBODY list ) SUBR +*** evaluate each element of list +*** val <= last element +*** +EVBOD0 LBSR EVAL + PULU X +EVBODY LDX 2,X + PSHU X + LDX ,X + BPL EVBOD0 +EVBOD1 PULU X + RTS +*** +*** ( COND clause1 clause2 ... ) FSUBR +*** val <= result or NIL +*** +COND0 PULU X + LDX 2,X +COND PSHU X + LDX ,X + BMI EVBOD1 + LDX ,X + BMI COND0 + LBSR EVAL + CMPY #NIL + BEQ COND0 + LDX [,U++] + BRA EVBODY +*** +*** ( MAPCAR fn list ) SUBR +*** val <= list of values +*** +MAPCAR PSHU X,Y + LDX ,Y + BMI MAPCA1 + LBSR CONSN1 + LDX ,U + BSR APPLY + TFR Y,D + PULU X,Y + LDY 2,Y + PSHU D + BSR MAPCAR + LBRA CONSU +* +MAPCA1 PULU X,Y + RTS +*** +*** ( MAPCAN fn list ) SUBR +*** val <= appended list of values +*** +MAPCAN PSHU X,Y + LDX ,Y + BMI MAPCA1 + LBSR CONSN1 + LDX ,U + BSR APPLY + TFR Y,D + PULU X,Y + LDY 2,Y + PSHU D + BSR MAPCAN + PULU X + LBRA APPXY +*** +*** ( MAPC fn list ) SUBR +*** val <= NIL +*** +MAPC PSHU X,Y +MAPC1 LDX ,Y + BMI MAPCA1 + LBSR CONSN1 + LDX ,U + BSR APPLY + LDY 2,U + LDY 2,Y + STY 2,U + BRA MAPC1 +*** +*** ( FUNCALL fn arg! ... ) LSUBR +*** evaluate function +*** val <= value of function +*** +FUNCALL LDY 2,X + LDX ,X + BPL APPLY + LBRA ERROR +*** +*** ( APPLY fn list ) SUBR +*** evaluate function, argument are list +*** val <= value of function +*** +APPLY0 LEAS 2,S + LDX ,X +APPLY TESTS + TESTU + CMPX #CELTOP + BCC APPLYL + LDX ,X + LDD 4,X + PSHS D + LDA 6,X + BEQ APPLY0 + CMPA #NSUBR + BEQ APSUBR + CMPA #NFSUBR + LBEQ EVLSB1 + CMPA #NLSUBR + LBEQ EVLSB1 + CMPA #NEXPR + LBEQ EVEXP1 + CMPA #NFEXPR + LBEQ EVEXP1 + CMPA #NMACRO + BEQ APMACR + LBRA ERRUND +* +* APPLY - SUBR +* +APSUBR LDX ,Y + BMI APSUB1 + LDY [2,Y] + BMI APSUB2 + RTS +APSUB1 LDX #NIL +APSUB2 LDY #NIL + RTS +* +* APPLY - MACRO +* +APMACR LBSR CONS + LBRA EVMAC1 +* +* APPLY - LAMBDA +* +APPLYL LDD ,X + CMPD #LAMBDA + LBNE ERRUND + LBRA EVALL2 + + +*-------------------------------------- +* +* PROPERTY +* +*-------------------------------------- +*** +*** ( DEFUN 'fn ['type] 'args 'body ) FSUBR +*** define function +*** val <= fn +*** +DEFUN LDY ,X + LDX 2,X + LDD ,X + CMPD #EXPR + BEQ DE1 + CMPD #FEXPR + BEQ DF1 + CMPD #MACRO + BEQ DM1 + LDA #NEXPR + BRA DE3 +*** +*** ( DE 'fn 'args 'body ) FSUBR +*** define EXPR function +*** val <= fn +*** +DE LDY ,X +DE1 LDA #NEXPR +DE2 LDX 2,X +DE3 CMPY #CELTOP + LBCC ERRDE + PSHS Y + LDY ,Y + STA 6,Y + STX 4,Y + PULS Y,PC +*** +*** ( DF 'fn 'args 'body ) FSUBR +*** define FEXPR function +*** val <= fn +*** +DF LDY ,X +DF1 LDA #NFEXPR + BRA DE2 +*** +*** ( DM 'fn 'args 'body ) FSUBR +*** define MACRO function +*** val <= fn +*** +DM LDY ,X +DM1 LDA #NMACRO + BRA DE2 +*** +*** ( SET atom value ) SUBR +*** give value to symbolic atom +*** val <= value +*** +SET CMPX #CELTOP + BCC SET9 + CMPX #NIL + BEQ SET9 + CMPX #T + BEQ SET9 + STY [,X] + RTS +*** +*** ( SETQ 'atom1 value1 ... ) FSUBR +*** val <= last value +*** +SETQ0 LDX [2,X] + BMI SET9 + LBSR EVAL + LDX [,U] + BSR SET + PULU X + LDX 2,X + LDX 2,X +SETQ PSHU X + LDA ,X + BPL SETQ0 +SETQ1 LEAU 2,U + RTS +*** +*** ( SETQQ 'atom1 'value1 ... ) FSUBR +*** val <= last value +*** +SETQQ0 LDX ,X + BSR SET + PULU X + LDX 2,X + LDX 2,X +SETQQ PSHU X + LDA ,X + BMI SETQ1 + LDY [2,X] + BPL SETQQ0 +SET9 LBRA ERRSET +*** +*** ( FVALUE atom ) SUBR +*** val <= function values of atom ( list or number ) +*** +FVALUE CMPX #CELTOP + LBCC ERRATM + LDX ,X + LDY 4,X + LDA 6,X + LDX #EXPR + CMPA #NEXPR + LBCS MNAY + BEQ FVALU1 + LDX #FEXPR + CMPA #NFEXPR + BEQ FVALU1 + LDX #MACRO +FVALU1 LBRA CONS +*** +*** ( PROPLIST atom ) SUBR +*** val <= p-list of atom +*** +PROPLI CMPX #CELTOP + LBCC ERRATM + LDX ,X + LDY 2,X + RTS +*** +*** ( GET atom ind ) SUBR +*** get property of symbolic atom +*** val <= property or NIL +*** +GET CMPX #CELTOP + LBCC ERRATM + LDX ,X + LDX 2,X + EXG X,Y + LBSR ASSOC + CMPY #NIL + BEQ ERMRTS + LDY 2,Y + RTS +*** +*** ( PUT atom ind e ) LSUBR +*** add property +*** val <= e +*** +PUT LDY ,X +PUTERR LBMI ERRPUT + LDX 2,X + LDD ,X + BMI PUTERR + LDX 2,X + LDX ,X + BMI PUTERR + CMPY #CELTOP + LBCC ERRATM + LDY ,Y + LEAY 2,Y + PSHS X,Y + LDY ,Y + TFR D,X + LBSR ASSOC + CMPY #NIL + BEQ PUT1 + PULS X + STX 2,Y + LEAY ,X + PULS D,PC +* +PUT1 LDY ,S + LBSR CONS + LEAX ,Y + LDY [2,S] + LBSR CONS + STY [2,S] + LDY ,S + PULS D,X,PC +*** +*** ( CARMODE e ) SUBR +*** if e = NIL then disable (CAR atom) +*** else enable +*** val <= NIL +*** +CARMOD CLR CARSW + CMPX #NIL + BNE ERMRTS + INC CARSW +ERMRTS RTS +*** +*** ( GBCMODE e ) SUBR +*** if e = NIL then disable message +*** else enable +*** val <= NIL +*** +GBCMODE CLR GBCSW + CMPX #NIL + BEQ ERMRTS + INC GBCSW + RTS +*** +*** ( ECHOMODE e ) SUBR +*** if e = NIL then disable echoback +*** else enable +*** val <= NIL +*** +ECHOMO CLR ECHOSW + CMPX #NIL + BNE ERMRTS + INC ECHOSW + RTS + + +*-------------------------------------- +* +* PROG AND LOOP +* +*-------------------------------------- +*** +*** ( PROG 'args 'body ) FSUBR +*** val <= value of RETURN or NIL +*** +PROG PSHS X + LDX ,X +PROG9 LBMI ERRPRG + LBSR BIND + PULS X + PSHU X + BSR PROGS +PRG1 CLR RTNSW + LEAU 2,U + LBRA UNBIND +*** +*** ( LOOP 'args 'body ) FSUBR +*** val <= value of RETURN +*** +LOOP PSHS X + LDX ,X + BMI PROG9 + LBSR BIND + PULS X + PSHU X +LOOP1 LDX ,U + BSR PROGS + LDA RTNSW + BEQ LOOP1 + BRA PRG1 +* +* +* +PROGS LDX 2,X + PSHU X + LDX ,X + BMI PROGS2 + LBSR EVAL + PULU X + LDA RTNSW + BNE PRGRTS + LDA GOSW + BEQ PROGS + CLR GOSW + LDX ,U +PROGS1 LDX 2,X + LDA ,X + BMI PROG9 + CMPY ,X + BNE PROGS1 + BRA PROGS +PROGS2 PULU Y +PRGRTS RTS +*** +*** ( GO 'label ) FSUBR +*** val <= label +*** +GO INC GOSW + LDY ,X + BMI PROG9 + RTS +*** +*** ( RETURN value ) SUBR +*** val <= value +*** +RETURN INC RTNSW + LEAY ,X + RTS +*** +*** ( PROGN e1 e2 ... ) LSUBR +*** val <= last e +*** +PROGN0 LDY ,X + LDX 2,X +PROGN LDA ,X + BPL PROGN0 + RTS +*** +*** ( PROG1 e1 e2 ... ) LSUBR +*** val <= e1 +*** +PROG1 EQU CAR +*** +*** ( PROG2 e1 e2 ... ) LSUBR +*** val <= e2 +*** +PROG2 EQU CADR +*** +*** ( CATCH e1 'tag ) FSUBR +*** val <= value of e1 or THROWed value +*** +CATCH PSHS U + PSHU X + LEAX ,S + LBSR MNAX + LEAX ,Y + LDY CATCHL + LBSR CONS + LDX ,U + LDA ,X + BMI CATERR + LDX [2,X] + BMI CATERR + LBSR CONS + STY CATCHL + LDX [,U++] + LBSR EVAL + LDX CATCHL + LDX 2,X + LDX 2,X + STX CATCHL +CATCH1 PULS U,PC +*** +*** ( THROW value 'tag ) FSUBR +*** val <= value +*** +THROW PSHU X + LDX ,X + BMI CATERR + LBSR EVAL + LDX ,U + STY ,U + LDX [2,X] + BMI CATERR + LDY CATCHL + LBSR MEMBER +CATERR LBNE ERRCAT + LDX 2,Y + LDY 2,X + STY CATCHL + LDX ,X + LEAS [2,X] + PULU Y +THROW1 CMPU ,S + BEQ CATCH1 + LBSR UNBIND + BRA THROW1 + + +*-------------------------------------- +* +* PREDICATES +* +*-------------------------------------- +*** +*** ( ALPHORDER atom1 atom2 ) SUBR +*** val <= T or NIL +*** +ALPHOR LBSR STRING + EXG X,Y + LBSR STRING +ALPHO1 LDA ,X+ + CMPA ,Y+ + BCS FALSE + BNE TRUE + TSTA + BNE ALPHO1 + BRA TRUE +*** +*** ( GREATERP n1 n2 ) SUBR +*** n1 > n2 ??? +*** val <= T or NIL +*** +GREATE EXG X,Y +*** +*** ( LESSP n1 n2 ) SUBR +*** n1 < n2 ??? +*** val <= T or NIL +*** +LESSP LBSR NUMXY + LBSR NCMP + BGE FALSE + BRA TRUE +*** +*** ( SYMBOLP e ) SUBR +*** e is symbol ??? +*** val <= T or NIL +*** +SYMBOL CMPX #CELTOP + BCC FALSE + BRA TRUE +*** +*** ( NUMBERP e ) SUBR +*** e is number ??? +*** val <= T or NIL +***+ +NUMBER CMPX #CELTOP + BCS FALSE +*** +*** ( ATOM e ) SUBR +*** e is atom ??? +*** val <= T or NIL +*** +ATOM LDA ,X + BPL FALSE + BRA TRUE +*** +*** ( LSITP e ) SUBR +*** e Is list ??? +*** val <= T or NIL +*** +LISTP LDA ,X + BPL TRUE + BRA FALSE +*** +*** ( EQ e1 e2 ) SUBR +*** e1 = e2 ??? +*** val <= T or NIL +*** +EQ PSHU Y + CMPX ,U++ + BNE FALSE +TRUE LDY #T + RTS +*** +*** ( NULL e ) SUBR +*** ( NOT e ) SUBR +*** e is NIL ??? +*** val <= T or NIL +*** +NULL EQU * +NOT CMPX #NIL + BEQ TRUE +FALSE LDY #NIL + RTS +*** +*** ( PLUSP e ) SUBR +*** e >= 0 ??? +*** val <= T or NIL +*** +PLUSP CMPX #CELTOP + BCS FALSE + LDA ,X + BPL FALSE + BITA #$40 + BEQ TRUE + BRA FALSE +*** +*** ( MINUSP e ) SUBR +*** e < 0 ??? +*** val <= T or NIL +*** +MINUSP CMPX #CELTOP + BCS FALSE + LDA ,X + BPL FALSE + BITA #$40 + BNE TRUE + BRA FALSE +*** +*** ( oneP e ) SUBR +*** e = 1 ??? +*** +ONEP LDD 2,X + CMPD #1 +ONEP1 BNE FALSE + CMPX #CELTOP + BCS FALSE + LDD ,X + CMPD #$8000 + BEQ TRUE + BRA FALSE +*** +*** ( ZEROP e ) SUBR +*** e = 0 ??? +*** val <= T or NIL +*** +ZEROP LDD 2,X + BRA ONEP1 +*** +*** ( EQUAL e1 e2 ) SUBR +*** compare e1 with e2 +*** val <= T or NIL +*** zero flag is set ( T ) +*** +EQUAL0 TESTS + BSR EQUAL + BNE EQUAL2 + PULS X,Y + LDX 2,X + LDY 2,Y +EQUAL PSHS X,Y + LDX ,X + BMI EQUAL3 + LDY ,Y + BPL EQUAL0 +EQUAL1 LDY #NIL +EQUAL2 LEAS 4,S + RTS +* +EQUAL3 CMPX ,Y + BNE EQUAL1 + LDX ,S + LDX 2,X + CMPX 2,Y + BNE EQUAL1 + LDY #T + CLRA + LEAS 4,S + RTS +*** +*** ( MEMBER e list ) SUBR +*** e is top listevel element of 1 ??? +*** val <= sublist or NIL +*** +MEMBE0 LDY 2,Y +MEMBER PSHS X,Y + LDY ,Y + BMI EQUAL1 + BSR EQUAL + PULS X,Y + BNE MEMBE0 + RTS +*** +*** ( ASSOC e a-list ) SUBR +*** search e +*** val <= element or NIL +*** +ASSOC0 LDY 2,Y +ASSOC PSHS X,Y + LDY ,Y + BMI EQUAL1 + LDY ,Y + BMI ASSOC1 + BSR EQUAL +ASSOC1 PULS X,Y + BNE ASSOC0 + LDY ,Y + RTS +*** +*** ( MEMQ obj list ) SUBR +*** obj is top level element of list ??? +*** ( uses EQ instead of EQUAL ) +*** val <= sublist or NIL +*** +MEMQ0 LDY 2,Y +MEMQ CMPX ,Y + BEQ MEMRTS + LDA ,Y + BPL MEMQ0 +MEMRTS RTS +*** +*** ( ASSQ obj a-list ) SUBR +*** search obj +*** ( uses EQ instead of EQUAL ) +*** val <= element or NIL +*** +ASSQ0 PULS Y + LDY 2,Y +ASSQ PSHS Y + LDY ,Y + BMI ASSQ1 + CMPX ,Y + BNE ASSQ0 + PULS X,PC +ASSQ1 PULS Y,PC + + +*-------------------------------------- +* +* LIST FUNCTIONS +* +*-------------------------------------- +*** +*** ( C..R e ) SUBR +*** ( C..R e ) " +*** ( CAR e ) " +*** ( CDR e ) " +*** +CAAAR BSR CARX + BRA CAAR +CAADR BSR CDRX +CAAR BSR CARX + BRA CAR +CADAR BSR CARX + BRA CADR +CADDR BSR CDRX +CADR BSR CDRX +CAR LDY ,X + BPL CARRTS +CARERR LDA CARSW + LBNE ERRCAR + LDX #NIL + LEAY ,X + RTS +* +CARX LDX ,X + BMI CARERR +CARRTS RTS +* +CDRX LDA ,X + BMI CARERR + LDX 2,X + RTS +* +CDAAR BSR CARX + BRA CDAR +CDADR BSR CDRX +CDAR BSR CARX + BRA CDR +CDDAR BSR CARX + BRA CDDR +CDDDR BSR CDRX +CDDR BSR CDRX +CDR LDA ,X + BMI CARERR + LDY 2,X + RTS +*** +*** ( LAST list ) SUBR +*** val <= list of last element of list +*** +LAST0 LEAY ,X + LDX 2,X +LAST LDA ,X + BPL LAST0 + RTS +*** +*** ( REVERSE list ) SUBR +*** val <= reversed list +*** +REVER0 LBSR CONS + PULU X + LDX 2,X +REVERS PSHU X + LDX ,X + BPL REVER0 + LEAU 2,U + RTS +*** +*** ( COPY e ) SUBR +*** val <= copy of e +*** +COPY TESTS + TESTU + PSHU X + LDX ,X + BMI COPY1 + BSR COPY + LDX ,U + STY ,U + LDX 2,X + BSR COPY + LBRA CONSU +COPY1 PULU Y +CPYRTS RTS +*** +*** ( APPEND 11 12 ... ) LSUBR +*** val <= connected list +*** +APPEND LDD ,X + BMI CPYRTS +APPEN1 PSHU D + LDX 2,X + LDD ,X + BMI COPY1 + TESTU + TESTS + BSR APPEN1 + PULU X +* +* append X to Y +* +APPXY LDD ,X + BMI CPYRTS + PSHU D + LDX 2,X + TESTS + TESTU + BSR APPXY + LBRA CONSU +*** +*** ( NCONC 11 12 ... ) LSUBR +*** val <= append list, use RPLACD +*** +NCONC LDD ,X + BMI CPYRTS +NCONC1 PSHS D + LDX 2,X + LDD ,X + BMI NCONC4 + TESTS + BSR NCONC1 + LDX ,S + LDA ,X + BMI NCONC5 +NCONC2 LDA [2,X] + BMI NCONC3 + LDX 2,X + BRA NCONC2 +NCONC3 STY 2,X +NCONC4 PULS Y,PC +NCONC5 PULS D,PC +*** +*** ( AND 'e1 'e2 ... ) FSUBR +*** search NIL +*** val <= NIL or last e +*** +AND LDY #T +AND1 PSHU X + LDX ,X + BMI OR1 + LBSR EVAL + CMPY #NIL + BEQ OR1 + PULU X + LDX 2,X + BRA AND1 +*** +*** ( OR 'e1 'e2 ... ) FSUBR +*** search non-NIL +*** val <= non-NIL or NIL +*** +OR0 LBSR EVAL + CMPY #NIL + BNE OR1 + PULU X + LDX 2,X +OR PSHU X + LDX ,X + BPL OR0 +OR1 LEAU 2,U + RTS +*** +*** ( RPLACA l e ) SUBR +*** replace car of l with e +*** val <= 1 +*** +RPLACA LDA ,X + LBMI ERROR + STY ,X + LEAY ,X + RTS +*** +*** ( RPLACD l e ) SUBR +*** replace cdr of l with e +*** val <= l +*** +RPLACD LDA ,X + LBMI ERROR + STY 2,X + LEAY ,X + RTS +*** +*** ( LIST e1 e2 ... ) LSUBR +*** val <= list of e1 ... +*** +LIST EQU EVAL1 +*** +*** ( DBLIST ) SUBR +*** val <= list of atoms +*** +OBLIST LDY #NIL + LDX #HSHTOP +OBLIS1 PSHS X + LDD ,X + BEQ OBLIS2 + LBSR CONS +OBLIS2 PULS X + LEAX 2,X + CMPX #HSHBTM + BNE OBLIS1 + RTS +*** +*** ( POP 'var ) FSUBR +*** (PROG1 (CAR var) (SETQ var (CDR var))) +*** +POP LDX ,X + CMPX #CELTOP + LBCC ERROR + LDX ,X + LDY ,X + LDD 2,Y + LDY ,Y + LBMI ERRCAR + STD ,X + RTS +*** +*** ( PUSH item 'var ) FSUBR +*** (SETQ var (CONS item var)) +*** +PUSH PSHU X + LDX ,X + LBMI ERROR + LBSR EVAL + PULU X + LDX [2,X] + CMPX #CELTOP + LBCC ERROR + LDX ,X + PSHS X + LDX ,X + EXG X,Y + BSR CONS + STY [,S++] + RTS + + +*-------------------------------------- +* +* GARBAGE COLLECTION +* +*-------------------------------------- +*** +*** ( CONS e1 e2 ) SUBR +*** val <= list +*** +CONS PSHU X +CONSU PSHU Y +CONSUU BSR NEW + PULU D + STD 2,Y + PULU D + STD ,Y + RTS +* +CONSN LEAX ,Y +CONSN1 LDY #NIL + BRA CONS +* +* get a free cell ( address in Y ) +* +NEW0 PSHS X + BSR GBC + PULS X +NEW LDY FREE + LDD ,Y + BMI NEW0 + STD FREE + RTS +*** +*** ( GBC ) SUBR +*** garbage collection +*** val <= # of collected cells +*** +GBC PSHS U,CC + ORCC #$50 + BSR MARKS + BSR COLLCT + TFR U,X + PULS U,CC + CMPX #3 + LBCS ERRGBC + LBSR MNAX + LDX #GMSG + LDA GBCSW + LBNE MSG + RTS +* +* mark used cells +* +MARKS LDY #ATMTOP +MARKS1 LDX ,Y++ + BSR MARK + LDX ,y++ + BSR MARK + LDX ,Y + CMPX #CELBTM + BCC MARKS2 + BSR MARK +MARKS2 LEAY 3,Y +MARKS3 LDA ,Y+ + BNE MARKS3 + CMPY ATMEND + BCS MARKS1 + BRA MARKS5 +* +MARKS4 LDX ,U++ + BMI MARKS5 + BSR MARK +MARKS5 CMPU #USKBTM + BCS MARKS4 + LDX CATCHL + BSR MARK + RTS +* +* mark list ( X ) +* +MARK0 PSHS X + CMPS #LSPBTM+30 + LBCS QUIT + TFR D,X + BSR MARK + PULS X + LDX 2,X +MARK CMPX #CELTOP + BCS MAKRTS + LDD ,X + BITB #1 + BNE MAKRTS + INC 1,X + TSTA + BPL MARK0 +MAKRTS RTS +* +* collect frdd cells +* +COLLCT LDX #CELTOP + LDY #NIL + LDU #0 +COLL1 LDB 1,X + BITB #1 + BNE COLL2 + STY ,X + LEAY ,X + LEAU 1,U + BRA COLL3 +COLL2 DEC 1,X +COLL3 LEAX 4,X + CMPX #CELBTM + BCS COLL1 + STY FREE + RTS +* +* +GMSG FCC /--Garbage Collection--/,CR,LF,0 + + +*-------------------------------------- +* +* DISK I/O +* +*-------------------------------------- +*** +*** ( MREAD filename ) SUBR +*** read s-expr from DISK +*** val <= s-expr +*** +MREAD BSR OPENR open file + LBSR READ read s-expr + BRA CLOSEI close file +*** +*** ( MPRINT filename expr ) SUBR +*** write expr into DISK file +*** val <= expr +*** +MPRINT BSR OPENW open output file + LEAX ,Y + LBSR PRINT print expr + BRA CLOSEO close file +*** +*** ( LOAD 'filename ) FSUBR +*** load programs +*** val <= NIL +*** +LOAD LDX ,X +*** +*** ( OPENR filename ) SUBR +*** open input file +*** val <= NIL +*** +OPENR PSHS X + BSR CLOSEI close input file + PULS X + LBSR STRING + BRA OPENFI open input file +*** +*** ( OPENW filename ) SUBR +*** open output file +*** val <= NIL +*** +OPENW PSHS X + BSR CLOSEO close output file + PULS X + LBSR STRING + BRA OPENFO open output file +*** +*** ( CLOSER ) SUBR +*** close read file +*** val <= NIL +*** +CLOSER EQU CLOSEI +*** +*** ( CLOSEW ) SUBR +*** close write file +*** val <= NIL +*** +CLOSEW EQU CLOSEO +*** +*** ( CLOSE ) SUBR +*** close I/O files +*** val <= NIL +*** +CLOSE BSR CLOSEI + BRA CLOSEO +*** +*** ( QUIT ) SUBR +*** terminate lisp, return to monitor +*** +QUIT BSR CLOSE close any open files + LDX #QMSG + LBSR MSG print message + BRA MON +* +QMSG FCC CR,LF + FCC /may the force be with you!/ + FCB CR,LF,0 +*** +*** ( DOS 'command ) FSUBR +*** execute DOS command +*** val <= NIL +*** +DOS LDX ,X + LBSR STRING + PSHS Y,U + BSR DODOS + PULS Y,U,PC + + +*************************************** +* +* LISP-09 I/O DRIVERS +* 1982.9.21 +* +*************************************** +* +* JUMP TABLE +* +OUTPUT LBRA OUTPT1 +* output char in A to terminal ( OUTSW = 0 ) or +* disk (OUTSW <> 0 ) +* +INPUT LBRA INPUT1 +* input char from terminal ( INSW = 0 ) or disk +* ( INSW <> 0 ) without echo +* +OPENFO LBRA OPNFO1 +* open file for output +* X = filename pointer ( terminater = 0 ) +* +OPENFI LBRA OPNFI1 +* open file for input +* X = filename pointer +* +CLOSEO LBRA CLSO1 +* close output file +* +CLOSEI LBRA CLSI1 +* close input file +* +DODOS LBRA DODOS1 +* execute DOS command +* X = pointer to DOS command string +* +MON JMP FLEX +* return to FLEX +* +INIT LBRA INI1 +* initialize system +* +********** +* +* SYSTEM ADDRESSES +* +FLEX EQU $CD03 FLEX warm start entry +OUTCH EQU $D3F9 output char ( pointer ) +INCHNE EQU $D3E5 input char ( pointer ) +PUTCHR EQU $CD18 put character +FMS EQU $D406 FMS call +PCRLF EQU $CD24 output crlf +GETFIL EQU $CD2D get file specification +SETEXT EQU $CD33 set extension +RPTERR EQU $CD3F report error message +DOCMND EQU $CD4B call DOS as a subroutine +FLBUF EQU $C080 FLEX input line buffer +FLBUFP EQU $CC14 FLEX line buffer pointer +ESCRTN EQU $CC16 escape return register +SYSDAT EQU $CC0E system date register +* +* FMS functions +* +FMSR EQU 1 : read command +FMSW EQU 2 : write command +FMSC EQU 4 : close command +* +* FILE CONTROL BLOCKS +* +OUTSW FCB 0 output file switch +OUTFCB RMB 320 output file FCB +INSW FCB 0 input file switch +INFCB RMB 320 input file FCB +* +* +OUTPT1 PSHS B,X,Y + LDX #OUTSW + TST ,X+ + BNE FLEXIO + JSR PUTCHR + PULS B,X,Y,PC +* +INPUT1 PSHS B,X,Y + LDX #INSW + TST ,X+ + BNE FLEXIO + JSR [INCHNE] + PULS B,X,Y,PC +* +FLEXIO BSR CALFMS + PULS B,X,Y,PC +* +OPNFO1 BSR SETSTR + LDX #OUTFCB + JSR GETFIL + BCS FILERR + LDA #1 + STA OUTSW + JSR SETEXT + LDA #FMSW + BRA OPNFIL +* +OPNFI1 BSR SETSTR + LDX #INFCB + JSR GETFIL + BCS FILERR + LDA #1 + STA INSW + JSR SETEXT + LDA #FMSR +OPNFIL STA ,X +CALFMS JSR FMS + BEQ FMSRTS + LDA 1,X + CMPA #8 + BEQ FMSEOF +FILERR JSR RPTERR + LBRA WARMS +FMSEOF BSR CLSI1 + LDA #CR +FMSRTS RTS +* +SETSTR PSHS Y + LDY #FLBUF + STY FLBUFP +STSTR1 LDA ,X+ + STA ,Y+ + BNE STSTR1 + LDA #CR + STA ,-Y + PULS Y,PC +* +DODOS1 BSR SETSTR + JSR DOCMND + BRA INI1 +* +CLSO1 LDX #OUTSW + BRA CLSIO +* +CLSI1 LDX #INSW +CLSIO TST ,X + BEQ FMSRTS + CLR ,X+ + LDA #FMSC + BRA OPNFIL +* +INI1 LDD #WARMS + STD ESCRTN + RTS + + +*-------------------------------------- +* +* START UP INITIALIZATION +* +*-------------------------------------- +* +XXXXX EQU * +* +* +STARTU LDS #SSKBTM + LDU #USKBTM + LDX #LSPMSG + LDD #(CELBTM-CELTOP)/4 + BSR MSGOUT + LDD #AAAAA-ATMTOP + BSR MSGOUT + LDD #USKBTM-AAAAA + BSR MSGOUT + LDD #SSKBTM-LSPBTM + BSR MSGOUT +* + LDX #HSHTOP +STATU0 CLR ,X+ + CMPX #HSHBTM + BNE STATU0 + LDX #CELTOP + LDD #NIL + STD FREE +STATU1 STD ,X++ + CMPX #CELBTM + BNE STATU1 +* + LDX #ATMTOP +STATU2 PSHS X + LEAX 7,X + LBSR CLRABF + LBSR STORES + PSHS X + LBSR MSA + LDX 2,S + STX ,Y + LDD #AAAAA + STD ATMEND + LDD #AAAAA+30 + STD USKTOP + PULS X,Y + CMPX #AAAAA + BNE STATU2 +* + LDD #START-COLDS-3 + STD COLDS+1 + LBSR INIT + LBSR GBC + LBRA COLDS +* +* print opening messages +* +MSGOUT PSHS D + LBSR MSG + LDD ,S + STX ,S + LDX #NX + STD 2,X + CLR 1,X + CLR ,X + BSR MSGOU1 + LBSR TERPRI + PULS X,PC +* +MSGOU1 LDA #-'0 + PSHS A,Y + LDY #NY + LBRA PRINN1 +* +* messages +* +LSPMSG FCB CR,LF + FCC /---------------------------------------------/,CR,LF + FCC /LISP-09 Interpreter version 2.08 1983.10.07/,CR,LF + FCC / Copyright (C) 1982 by Kogakuin University/,CR,LF + FCC /---------------------------------------------/,CR,LF + FCC /# of free cells : /,0 + FCC /atom area, used : /,0 + FCC /User stack area : /,0 + FCC /System stack area: /,0 + + +*-------------------------------------- +* +* ATOM INFORMATION TABLE +* +*-------------------------------------- +* + 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 +* +* +* +NIL EQU $418+HSHTOP + OBJ NIL,NIL,FALSE,LSUBR,NIL +T EQU $400+HSHTOP + OBJ T,NIL,TRUE,LSUBR,T +UNDEFI EQU $12A+HSHTOP + OBJ UNDEFI,NIL,ERRUND,ERR,undefined +prompt OBJ COLON,NIL,ERRUND,0,PROMPT +COLON EQU $200+HSHTOP + OBJ UNDEFI,NIL,ERRUND,0,: +LAMBDA EQU $0AA+HSHTOP + OBJ UNDEFI,NIL,ERRUND,0,LAMBDA +EXPR EQU $142+HSHTOP + OBJ UNDEFI,NIL,ERRUND,0,EXPR +FEXPR EQU $146+HSHTOP + OBJ UNDEFI,NIL,ERRUND,0,FEXPR +MACRO EQU $468+HSHTOP + OBJ UNDEFI,NIL,ERRUND,0,MACRO +* +QUOTE EQU $692+HSHTOP + OBJ UNDEFI,NIL,CAR,FSUBR,QUOTE +* + FN COLDS,SUBR + FN WARMS,SUBR + FN QUOTIENT,LSUBR + FN TIMES,LSUBR + FN DIFFERENCE,LSUBR + FN PLUS,LSUBR + FN MAX,LSUBR + FN MIN,LSUBR + FN SIGN,SUBR + FN ADD1,SUBR + FN SUB1,SUBR + FN ABS,SUBR + FN MINUS,SUBR + FN LOGAND,SUBR + FN LOGOR,SUBR + FN LOGXOR,SUBR + FN REMAINDER,SUBR + FN DIVIDE,SUBR + FN GCD,SUBR + FN RND,SUBR + FN INC,FSUBR + FN DEC,FSUBR + FN CALL,SUBR + FN POKE,SUBR + FN PEEK,SUBR + FN ATOMLENGTH,SUBR + FN LENGTH,SUBR + FN ERROR,SUBR + FN CRLF,SUBR + FN SPACES,SUBR + FN PRINT,SUBR + FN TERPRI,SUBR + FN LPRI,SUBR + FN PRIN1,SUBR + FN TYO,SUBR + FN PRINH,SUBR + FN TYI,SUBR + FN READCH,SUBR + FN GETCH,SUBR + FN READ,SUBR + FN IMPLODE,SUBR + FN CONCAT,LSUBR + FN EXPLODE,SUBR + OBJ UNDEFI,NIL,EXPLN,SUBR,EXPLODEN + FN ATOMCDR,SUBR + FN ATOMCAR,SUBR + FN ASCII,SUBR + FN GENSYM,SUBR + FN EVAL,SUBR + OBJ UNDEFI,NIL,EVLIS+2,SUBR,EVLIS + OBJ UNDEFI,NIL,EVBODY+2,SUBR,EVBODY + FN COND,FSUBR + FN MAPCAR,SUBR + FN MAPCAN,SUBR + FN MAPC,SUBR + FN FUNCALL,LSUBR + FN APPLY,SUBR + FN DEFUN,FSUBR + FN DE,FSUBR + FN DF,FSUBR + FN DM,FSUBR + FN SET,SUBR + FN SETQ,FSUBR + FN SETQQ,FSUBR + FN FVALUE,SUBR + FN PROPLIST,SUBR + FN GET,SUBR + FN PUT,LSUBR + FN CARMODE,SUBR + FN GBCMODE,SUBR + FN ECHOMODE,SUBR + FN PROG,FSUBR + FN LOOP,FSUBR + FN GO,FSUBR + FN RETURN,SUBR + FN PROGN,LSUBR + FN PROG1,LSUBR + FN PROG2,LSUBR + FN CATCH,FSUBR + FN THROW,FSUBR + FN ALPHORDER,SUBR + FN GREATERP,SUBR + FN LESSP,SUBR + FN SYMBOLP,SUBR + FN NUMBERP,SUBR + FN ATOM,SUBR + FN LISTP,SUBR + FN EQ,SUBR + FN NULL,SUBR + FN NOT,SUBR + FN PLUSP,SUBR + FN MINUSP,SUBR + FN ONEP,SUBR + FN ZEROP,SUBR + FN EQUAL,SUBR + FN MEMBER,SUBR + FN ASSOC,SUBR + FN MEMQ,SUBR + FN ASSQ,SUBR + FN CAAAR,SUBR + FN CAADR,SUBR + FN CADAR,SUBR + FN CADDR,SUBR + FN CDAAR,SUBR + FN CDADR,SUBR + FN CDDAR,SUBR + FN CDDDR,SUBR + FN CAAR,SUBR + FN CADR,SUBR + FN CDAR,SUBR + FN CDDR,SUBR + FN CAR,SUBR + FN CDR,SUBR + FN LAST,SUBR + FN REVERSE,SUBR + FN COPY,SUBR + FN APPEND,LSUBR + FN NCONC,LSUBR + FN AND,FSUBR + FN OR,FSUBR + FN RPLACA,SUBR + FN RPLACD,SUBR + FN LIST,LSUBR + FN OBLIST,SUBR + FN POP,FSUBR + FN PUSH,FSUBR + FN CONS,SUBR + FN GBC,SUBR + FN MREAD,SUBR + FN MPRINT,SUBR + FN LOAD,FSUBR + FN OPENR,SUBR + FN OPENW,SUBR + FN CLOSER,SUBR + FN CLOSEW,SUBR + FN CLOSE,SUBR + FN QUIT,SUBR + FN DOS,FSUBR +* +* +* +AAAAA EQU * + END COLDS diff -r 41d578d28d8c -r 63de06ad7a49 TL1/TL1os9.asm --- a/TL1/TL1os9.asm Mon Apr 15 14:21:00 2019 +0900 +++ b/TL1/TL1os9.asm Wed May 12 12:57:20 2021 +0900 @@ -70,6 +70,8 @@ ** LIBR equ . ioentry rmb $80 +memds equ ioentry +membuf equ ioentry+1 readbuff rmb bufsiz+1 OBJSTART RMB 10 @@ -405,7 +407,7 @@ LBEQ EXPR CMPA #$A3 seekr LBEQ EXPR - CMPA #$A4 position + CMPA #$A4 tell LBEQ EXPR SSEND1 COM SSW RTS @@ -1145,7 +1147,7 @@ FDB RND RTS * FUNTION GET -TM61 CMPA #$71 +TM61 CMPA #$71 get BNE TM62 LBSR SUBSC LBSR PUTHS @@ -1156,7 +1158,7 @@ FDB getchar RTS * FUNCTION READ etc -TM62 CMPA #$72 +TM62 CMPA #$72 read BNE TM63 LBSR SUBSC LBSR PUTHS @@ -1176,7 +1178,7 @@ BNE TM65 LBSR DSUBSC bra tmm3 -TM65 CMPA #$A4 position +TM65 CMPA #$A4 tell BNE TM66 LBSR DSUBSA tstb @@ -1184,15 +1186,17 @@ bra aradr TM66 CMPA #$A5 open BNE TM67 - LBSR DSUBSC - bra tmm3 + LBSR DSUBSA + tstb + beq tmm3 + bra aradr TM67 CMPA #$A6 openm BNE TM7 LBSR DSUBSA tstb beq tmm3 bra aradr -* ; pshs u; leau ?,[xy] ; stu 0x1f +MEMBUF eq 0x20 +** +** seek postion wt1 +** seekr relative postion in A +** tell put position in wt1 +** +** putca +** getca +** close err ldb #1 L0049 @@ -1919,11 +1941,38 @@ PSHS X,Y BRA OUTCH1 -close +close pshs x,y,u lda

Relational operator

-

Compares two values ​​and returns a boolean value. GT and LT compare and compare left and right numbers as signed binary numbers in 2's complement representation. Other operators interpret numbers as unsigned binary.

+

Compares two values and returns a boolean value. GT and LT compare and compare left and right numbers as signed binary numbers in 2's complement representation. Other operators interpret numbers as unsigned binary.

> large
< small