Skip to content

Instantly share code, notes, and snippets.

@maly
Created February 24, 2019 13:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save maly/144f0784f68d7feb9fda2bbedb9fb35e to your computer and use it in GitHub Desktop.
Save maly/144f0784f68d7feb9fda2bbedb9fb35e to your computer and use it in GitHub Desktop.
b
lda test
lda <test
lda >test
.org 100
test: db 0
.include a0.a09
lda glob
lda loc
lda ACIA_BASE
lda kokot
.org 1
test0: db 0
.org $102
test1: db 0
.org $203
test2: db 0
.org $1000
tfr b,2
lda test0
lda test1
lda test2
setdp 1
lda test0
lda test1
lda test2
setdp 2
lda test0
lda test1
lda test2
setdp 257
lda test0
lda test1
lda test2
:0700000096649664B60064EB
:0C006400000001029665B60000B6000026
:00000001FF
:0100010000FE
:0101020000FC
:0102030000FA
:1010000096009601B60102B60203B600019602B63A
:101010000203B60001B601029603B60001B6010252
:03102000B6020312
:00000001FF
0000 96 64 LDA test
0002 96 64 LDA <test
0004 B6 00 64 LDA >test
0007 ;
0064 .ORG 100
0064 00 TEST: DB 0
0065 ;
0065 .BLOCK
0065 00 GLOB: DB 0
0066 01 LOC: DB 1
0067 02 EXT: DB 2
0068 ACIA_BASE: EQU 83FCh
0068 .ENDBLOCK
0068 ;
0068 96 65 LDA glob
006A B6 00 00 LDA loc
006D B6 00 00 LDA ACIA_BASE
TEST: 0064 DEFINED AT LINE 6
> USED AT LINE 1
> USED AT LINE 2
> USED AT LINE 3
GLOB: 0065 DEFINED AT LINE 3 IN a0.a09
> USED AT LINE 10
LOC: 0066 DEFINED AT LINE 4 IN a0.a09
> USED AT LINE 11
EXT: 0067 DEFINED AT LINE 5 IN a0.a09
ACIA_BASE: 83FC DEFINED AT LINE 7
> USED AT LINE 12
0001 .ORG 1
0001 00 TEST0: DB 0
0102 .ORG $102
0102 00 TEST1: DB 0
0103 ;
0203 .ORG $203
0203 00 TEST2: DB 0
0204 ;
1000 .ORG $1000
1000 ;
1000 96 00 LDA 0a
1002 ;
1002 96 01 LDA test0
1004 B6 01 02 LDA test1
1007 B6 02 03 LDA test2
100A ;
100A SETDP 1
100A B6 00 01 LDA test0
100D 96 02 LDA test1
100F B6 02 03 LDA test2
1012 ;
1012 SETDP 2
1012 B6 00 01 LDA test0
1015 B6 01 02 LDA test1
1018 96 03 LDA test2
101A ;
101A ;
101A SETDP 257
101A B6 00 01 LDA test0
101D B6 01 02 LDA test1
1020 B6 02 03 LDA test2
TEST0: 0001 DEFINED AT LINE 2
> USED AT LINE 13
> USED AT LINE 18
> USED AT LINE 23
> USED AT LINE 29
TEST1: 0102 DEFINED AT LINE 4
> USED AT LINE 14
> USED AT LINE 19
> USED AT LINE 24
> USED AT LINE 30
TEST2: 0203 DEFINED AT LINE 7
> USED AT LINE 15
> USED AT LINE 20
> USED AT LINE 25
> USED AT LINE 31
S10600001F411288
S9030000FC
lda test
lda <test
lda >test
.org 100
test: db 0
:06000000A564A564A50043
:01006400009B
:00000001FF
0000 A5 64 LDA test
0002 A5 64 LDA <test
0004 A5 00 LDA >test
0006 ;
0064 .ORG 100
0064 00 TEST: DB 0
TEST: 0064 DEFINED AT LINE 6
> USED AT LINE 1
> USED AT LINE 2
> USED AT LINE 3
.block
@glob: db 0
loc: db 1
@ext: db 2
ACIA_BASE EQU 83FCh
.endblock
:03000000000102FA
:00000001FF
0000 .BLOCK
0000 00 GLOB: DB 0
0001 01 LOC: DB 1
0002 02 EXT: DB 2
0003 ACIA_BASE: EQU 83FCh
0003 .ENDBLOCK
GLOB: 0000 DEFINED AT LINE 3
LOC: 0001 DEFINED AT LINE 4
EXT: 0002 DEFINED AT LINE 5
ACIA_BASE: 83FC DEFINED AT LINE 7
; Monitor vectors:
MRESET EQU $E000
MSERIN EQU $E003
MSEROUT EQU $E006
MPRINT2 EQU $E009
MPRINTX EQU $E00C
MPRIMM EQU $E00F
.ORG $100
.ENT $
; test 20
; here are your space:
TESTMOD:
jsr mprimm
.cstr "Hello folks",$d,$a
JSR hdtest
BEQ m68
JSR MPRIMM
.CSTR $0d,$0a,"Hi from HD6309",$0d,$0a
JMP MRESET
M68:
JSR MPRIMM
.CSTR $0d,$0a,"Hi from MC6809",$0d,$0a
JMP MRESET
HDTEST:
PSHS d
FDB $1043
CMPB 1,s
PULS d,pc
; Monitor vectors:
MRESET EQU $E000
MSERIN EQU $E003
MSEROUT EQU $E006
MPRINT2 EQU $E009
MPRINTX EQU $E00C
MPRIMM EQU $E00F
.ORG $100
.ENT $
.PRAGMA 6309
.pragma srec
; test 20
; here are your space:
TESTMOD:
JSR hdtest
BEQ m68
JSR MPRIMM
.CSTR $0d,$0a,"Hi from HD6309",$0d,$0a
JMP MRESET
M68:
JSR MPRIMM
.CSTR $0d,$0a,"Hi from MC6809",$0d,$0a
JMP MRESET
HDTEST:
PSHS d
;FDB $1043
COMD
CMPB 1,s
PULS d,pc
biand a.7,100.5
:10010000BDE00F48656C6C6F20666F6C6B730D0AF9
:1001100000BD01482719BDE00F0D0A48692066722D
:100120006F6D204844363330390D0A007EE000BD43
:10013000E00F0D0A48692066726F6D204D43363816
:1001400030390D0A007EE00034061043E161358647
:00000001FF
:10010000BD01372719BDE00F0D0A48692066726FDF
:100110006D204844363330390D0A007EE000BDE0E2
:100120000F0D0A48692066726F6D204D43363830D6
:10013000390D0A007EE00034061043E16135861176
:03014000316F64B8
:00000001FF
0000 ; Monitor vectors:
0000 MRESET: EQU $E000
0000 MSERIN: EQU $E003
0000 MSEROUT: EQU $E006
0000 MPRINT2: EQU $E009
0000 MPRINTX: EQU $E00C
0000 MPRIMM: EQU $E00F
0100 .ORG $100
0100 .ENT $
0100 ; test 20
0100 ; here are your space:
0100 TESTMOD:
0100 BD E0 0F JSR mprimm
0103 48 65 6C 6C 6F 20 66 6F 6C 6B 73 0D 0A 00 .CSTR "Hello folks",$d,$a
0111 BD 01 48 JSR hdtest
0114 27 19 BEQ m68
0116 BD E0 0F JSR MPRIMM
0119 0D 0A 48 69 20 66 72 6F 6D 20 48 44 36 33 30 39 0D 0A 00 .CSTR $0d,$0a,"Hi from HD6309",$0d,$0a
012C 7E E0 00 JMP MRESET
012F M68:
012F BD E0 0F JSR MPRIMM
0132 0D 0A 48 69 20 66 72 6F 6D 20 4D 43 36 38 30 39 0D 0A 00 .CSTR $0d,$0a,"Hi from MC6809",$0d,$0a
0145 7E E0 00 JMP MRESET
0148 HDTEST:
0148 34 06 PSHS d
014A 10 43 FDB $1043
014C E1 61 CMPB 1,s
014E 35 86 PULS d,pc
MRESET: E000 DEFINED AT LINE 2
> USED AT LINE 22
> USED AT LINE 26
MSERIN: E003 DEFINED AT LINE 3
MSEROUT: E006 DEFINED AT LINE 4
MPRINT2: E009 DEFINED AT LINE 5
MPRINTX: E00C DEFINED AT LINE 6
MPRIMM: E00F DEFINED AT LINE 7
> USED AT LINE 16
> USED AT LINE 20
> USED AT LINE 24
TESTMOD: 0100 DEFINED AT LINE 15
M68: 012F DEFINED AT LINE 23
> USED AT LINE 19
HDTEST: 0148 DEFINED AT LINE 28
> USED AT LINE 18
0000 ; Monitor vectors:
0000 MRESET: EQU $E000
0000 MSERIN: EQU $E003
0000 MSEROUT: EQU $E006
0000 MPRINT2: EQU $E009
0000 MPRINTX: EQU $E00C
0000 MPRIMM: EQU $E00F
0100 .ORG $100
0100 .ENT $
0100 .PRAGMA 6309
0100 .PRAGMA srec
0100 ; test 20
0100 ; here are your space:
0100 TESTMOD:
0100 BD 01 37 JSR hdtest
0103 27 19 BEQ m68
0105 BD E0 0F JSR MPRIMM
0108 0D 0A 48 69 20 66 72 6F 6D 20 48 44 36 33 30 39 0D 0A 00 .CSTR $0d,$0a,"Hi from HD6309",$0d,$0a
011B 7E E0 00 JMP MRESET
011E M68:
011E BD E0 0F JSR MPRIMM
0121 0D 0A 48 69 20 66 72 6F 6D 20 4D 43 36 38 30 39 0D 0A 00 .CSTR $0d,$0a,"Hi from MC6809",$0d,$0a
0134 7E E0 00 JMP MRESET
0137 HDTEST:
0137 34 06 PSHS d
0139 ;FDB $1043
0139 10 43 COMD
013B E1 61 CMPB 1,s
013D 35 86 PULS d,pc
013F 11 31 6F 64 BIAND a,7,5,100
MRESET: E000 DEFINED AT LINE 2
> USED AT LINE 23
> USED AT LINE 27
MSERIN: E003 DEFINED AT LINE 3
MSEROUT: E006 DEFINED AT LINE 4
MPRINT2: E009 DEFINED AT LINE 5
MPRINTX: E00C DEFINED AT LINE 6
MPRIMM: E00F DEFINED AT LINE 7
> USED AT LINE 21
> USED AT LINE 25
TESTMOD: 0100 DEFINED AT LINE 18
M68: 011E DEFINED AT LINE 24
> USED AT LINE 20
HDTEST: 0137 DEFINED AT LINE 29
> USED AT LINE 19
S1130100BD01372719BDE00F0D0A48692066726FDC
S11301106D204844363330390D0A007EE000BDE0DF
S11301200F0D0A48692066726F6D204D43363830D3
S1130130390D0A007EE00034061043E16135861173
S1060140316F64B5
S9030100FB
S113010000BD01372719BDE00F0D0A48692066726FDC
S1130110006D204844363330390D0A007EE000BDE0DF
S1130120000F0D0A48692066726F6D204D43363830D3
S112013000390D0A007EE00034061043E161358685
S9030000FC
.macro wait_until_bit_6
loop%%M:
IN A, %%1
BIT 6,A
JR Z,loop%%M
.endm
l000 ;test
lasky equ 22
lasky equ 55
db lasky
wait_until_bit_6 lasky
wait_until_bit_6 6
lasky equ 33
db lasky
wait_until_bit_6 lasky
:1000000037DB37CB7728FADB06CB7728FA21DB21E1
:04001000CB7728FA88
:00000001FF
0000 ;
0000 LASKY: EQU 22
0000 LASKY: EQU 55
0000 37 DB lasky
0001 ;
**MACRO UNROLL - WAIT_UNTIL_BIT_6
0001 LOOPM_5:
0001 DB 37 IN A,lasky
0003 CB 77 BIT 6,A
0005 28 FA JR Z,loopM_5
**MACRO UNROLL - WAIT_UNTIL_BIT_6
0007 LOOPM_6:
0007 DB 06 IN A,6
0009 CB 77 BIT 6,A
000B 28 FA JR Z,loopM_6
000D ;
000D LASKY: EQU 33
000D 21 DB lasky
**MACRO UNROLL - WAIT_UNTIL_BIT_6
000E LOOPM_10:
000E DB 21 IN A,lasky
0010 CB 77 BIT 6,A
0012 28 FA JR Z,loopM_10
LASKY: 0021 DEFINED AT LINE 15
> USED AT LINE 10
> USED AT LINE 3
> USED AT LINE 16
> USED AT LINE 3
LOOPM_5: 0001 DEFINED AT LINE 2
> USED AT LINE 5
LOOPM_6: 0007 DEFINED AT LINE 2
> USED AT LINE 5
LOOPM_10: 000E DEFINED AT LINE 2
> USED AT LINE 5
;NAM TB01V137
;* WRITTEN 20-OCT-77 BY JOHN BYRNS
;* REVISED 30-DEC-77
;* REVISED 18-JAN-78
;* REVISED 10-APR-78
;* REVISED 08-MAY-79 TO ELIMINATE USE OF SP
;* REVISED 24-JAN-80 TO USE 6801 ON CHIP RAM
;* REVISED 26-JAN-80 FOR NEW 6801 INSTRUCTIONS
;* REVISED 24-JUL-81 FOR WHISTON BOARD
;* REVISED 24-SEP-81 INCLUDE USER FUNCTION
;* REVISED 08-APR-82 MAKE STANDALONE INCLUDE HEX CONSTANTS AND MEM FUNCTION
;* REVISED 21-NOV-84 FOR 6809
;* REVISED FEB 94 ADAPTED TO SIMULATOR AND BUGFIXES BY L.C. BENSCHOP.
;*
.engine kilo
EOL: EQU $04
ETX: EQU $03
SPACE: EQU $20
CR: EQU $0D
LF: EQU $0A
BS: EQU $08
CAN: EQU $18
BELL: EQU $07
FILL: EQU $00
DEL: EQU $7F
BSIZE: EQU 73
STKCUS: EQU 48
;*
bACIA equ $83FE
RMCR EQU bACIA
TRCS EQU bACIA
RECEV EQU bACIA+1
TRANS EQU bACIA+1
CNTL1 EQU $03
CNTL2 EQU $15
RDRF EQU $01
ORFE EQU $20
TDRE EQU $02
;* EDIT THE FOLLOWING EQUATES TO REFLECT THE
;* DESIRED ROM AND RAM LAYOUT
LORAM EQU $0080 ;ADDRESS OF DIRECT PAGE SCRATCH RAM
BUFFER EQU $0200 ;ADDRESS OF MAIN RAM
RAMSIZ EQU $2000 ;SIZE OF MAIN RAM
ROMADR EQU $f000 ;ADDRESS OF TINY BASIC ROM
;*
RAMBEG EQU BUFFER+BSIZE
RAMEND EQU BUFFER+RAMSIZ
;*
RAMPAT EQU $AA0F
ROMPAT EQU $F055
;*
; ORG LORAM
.bsseg
.org 6
USRBAS: RMB 2
USRTOP: RMB 2
STKLIM: RMB 2
STKTOP: RMB 2
CURSOR: RMB 2
SAVESP: RMB 2
LINENB: RMB 2
SCRTCH: RMB 2
CHAR: RMB 2
ZONE: RMB 1
MODE: RMB 1
RESRVD: RMB 1
LOEND: EQU $
;*
.cseg
.ORG 0xfff0
;reserved
DW reset
;SWI3
DW reset
;SWI2
DW reset
;FIRQ
DW reset
;IRQ
DW reset
;SWI
DW reset
;NMI
DW reset
;RES
DW reset
.block
org $e400
@reset:
.ent $
BASIC: JMP SETUP
.cstr "MOD9BASIC"
WARMS LDS STKTOP
JSR INTEEE
BRA WMS05
SETUP LDS #RAMEND-52
SET03 STS STKTOP
JSR INTEEE
CLEAR LDD #RAMBEG
STD USRBAS
STD USRTOP
CLR02 STD STKLIM
WMS05 JSR CRLF
LDX #VSTR
JSR PUTSTR
CMDB LDS STKTOP
CLR MODE
JSR CRLF
LDX USRBAS
STX CURSOR
CMDE LDX #0000
STX LINENB
TST MODE
BNE CMD01
LDA #":"
JSR PUTCHR
CMD01 JSR GETLIN
JSR TSTNBR
BCC CMD02
BVS CMD05
JSR SKIPSP
CMPA #EOL
BEQ CMDE
JSR MSLINE
BRA CMDB
CMD02 PSHS X
LDX USRTOP
CMPX STKLIM
PULS X
BEQ CMD03
JMP ERRORR
CMD03 ADDD #0
BEQ CMD05
CMD04 PSHS D
SUBD #9999
PULS D
BHI CMD05
BSR EDITOR
BRA CMDE
CMD05 JMP ERRORS
VSTR DB "TINY V1.37"
FCB EOL
;******************************
;******************************
EDITOR PSHS D
JSR SKIPSP
STX SCRTCH
LDA 0,S
LDX CURSOR
CMPX USRTOP
BEQ ED00
CMPD 0,X
BCC ED01
ED00 LDX USRBAS
ED01 JSR FNDLIN
STX CURSOR
BCS ED04
STX SAVESP
LEAX 2,X
ED02 LDA ,X+
CMPA #EOL
BNE ED02
ED03 CMPX USRTOP
BEQ ED35
LDA ,X+
STX CHAR
LDX SAVESP
STA ,X+
STX SAVESP
LDX CHAR
BRA ED03
ED35 LDX SAVESP
STX USRTOP
STX STKLIM
ED04 LDX SCRTCH
LDB #-1
ED05 INCB
LDA ,X+
CMPA #EOL
BNE ED05
TSTB
BNE ED55
LEAS 2,S
RTS
ED55 LEAX -1,X
ADDB #4
ED06 LEAX -1,X
DECB
LDA 0,X
CMPA #SPACE
BEQ ED06
LDA #EOL
STA 1,X
CLRA
LDX USRTOP
STX CHAR
ADDD USRTOP
STD USRTOP
STD STKLIM
JSR TSTSTK
BCC ED07
STX USRTOP
STX STKLIM
JMP ERRORF
ED07 LDX USRTOP
ED08 STX SAVESP
LDX CHAR
CMPX CURSOR
BEQ ED09
LDA ,-X
STX CHAR
LDX SAVESP
STA ,-X
BRA ED08
ED09 PULS D
LDX CURSOR
STD ,X++
STX CHAR
ED10 LDX SCRTCH
LDA ,X+
STX SCRTCH
LDX CHAR
STA ,X+
STX CHAR
CMPA #EOL
BNE ED10
RTS
;******************************
;******************************
PUTS01 JSR PUTCHR
LEAX 1,X
PUTSTR LDA 0,X
CMPA #EOL
BNE PUTS01
RTS
;******************************
;******************************
CRLF LDX #CRLFST
BSR PUTSTR
CLR ZONE
RTS
CRLFST FCB CR,LF,DEL,FILL,FILL,FILL,EOL
;******************************
;******************************
ERRORF BSR ER01
DB "SORRY"
FCB EOL
ERRORS BSR ER01
DB "WHAT ?"
FCB EOL
ERRORR BSR ER01
DB "HOW ?"
FCB EOL
BREAK BSR ER01
DB "BREAK"
FCB EOL
END: BSR ER01
DB "STOP"
FCB EOL
ER01 BSR CRLF
LDA #BELL
JSR PUTCHR
LDD LINENB
JSR PRNT4
LDA #SPACE
JSR PUTCHR
PULS X
BSR PUTSTR
BSR CRLF
JMP CMDB
;******************************
;******************************
GL00 BSR CRLF
GETLIN LDX #BUFFER
GL03 JSR GETCHR
CMPA #SPACE
BCS GL05
CMPA #$7F
BEQ GL03
CMPX #BUFFER+BSIZE-1
BNE GL04
LDA #BELL
BRA GL02
GL04 STA ,X+
GL02 JSR PUTCHR
BRA GL03
GL05 CMPA #BS
BEQ GL07
CMPA #CAN
BEQ GL00
CMPA #LF
BEQ GL09
CMPA #CR
BNE GL03
TST MODE
BEQ GL06
JSR PUTCHR
BRA GL08
GL06 PSHS X
JSR CRLF
PULS X
GL08 LDA #EOL
STA 0,X
LDX #BUFFER
RTS
GL07 CMPX #BUFFER
BEQ GL03
LEAX -1,X
LDA #BS
JSR PUTCHR
LDA #SPACE
JSR PUTCHR
LDA #BS
BRA GL02
GL09 ORCC #$01
ROR MODE
BRA GL02
;******************************
;******************************
REM00 LEAX 1,X
REM BSR SKIPSP
CMPA #EOL
BNE REM00
ENDSMT JSR TSTEOL
ENDS02 LDA LINENB
ORA LINENB+1
BEQ REM09
REM05 CMPX USRTOP
BNE NXTLIN
JMP ERRORR
NXTLIN LDD ,X++
STD LINENB
MSLINE JSR TSTBRK
BSR IFAN
BCS IMPLET
PSHS D
REM09 RTS
IMPLET JMP LET
;******************************
;******************************
IFAN BSR SKIPSP
STX CURSOR
LDX #VERBT
FAN00: LDA ,X+
CMPA #EOL
BNE FAN04
LDX CURSOR
ORCC #$01
RTS
FAN04 STX CHAR
LDX CURSOR
STX SCRTCH
FAN05 LDX SCRTCH
CMPA 0,X
BNE FAN07
LEAX 1,X
STX SCRTCH
LDX CHAR
LDA ,X+
STX CHAR
CMPA #EOL
BNE FAN05
LDD 0,X
LDX SCRTCH
ANDCC #$FE
RTS
FAN07 LDX CHAR
FAN08 LDA ,X+
CMPA #EOL
BNE FAN08
LEAX 2,X
BRA FAN00
;******************************
;******************************
NXTNSP LEAX 1,X
SKIPSP LDA 0,X
CMPA #SPACE
BEQ NXTNSP
RTS
;******************************
;******************************
TSTHEX BSR TSTDIG
BCC TST05
CMPA #"A"
BCS TST03
CMPA #"F"
BHI TST03
SUBA #"A"-10
ANDCC #$FE
RTS
;******************************
;******************************
TSTLTR CMPA #"A"
BCS TST03
CMPA #"Z"
BLS TST05
TST03 ORCC #$01
RTS
;******************************
;******************************
TSTDIG CMPA #"0"
BCS TST03
CMPA #"9"
BHI TST03
SUBA #"0"
TST05 ANDCC #$FE
RTS
;******************************
;******************************
TSTVAR BSR SKIPSP
BSR TSTLTR
BCS TSTV03
TFR A,B
LDA 1,X
BSR TSTLTR
BCC TST03
LEAX 1,X
SUBB #"A"
ASLB
CLRA
ADDD STKTOP
TSTV02 ANDCC #$FE
TSTV03 RTS
;******************************
;******************************
USER JSR ARGONE
PSHS D
JSR SKIPSP
CMPA #","
BEQ USER03
CMPA #")"
ORCC #$01
BEQ USER05
USER02 JMP ERRORS
USER03 LEAX 1,X
JSR EXPR
PSHS A
JSR SKIPSP
CMPA #")"
PULS A
BNE USER02
ANDCC #$FE
USER05 LEAX 1,X
STX CURSOR
JSR [,S++]
LDX CURSOR
ANDCC #$FE
RTS
;******************************
;******************************
TSTSNB JSR SKIPSP
CMPA #"-"
BNE TSTNBR
LEAX 1,X
BSR TSTNBR
BCS TSN02
NEGA
NEGB
SBCA #0
ANDCC #$FC
TSN02 RTS
;******************************
;******************************
TSTNBR JSR SKIPSP
JSR TSTDIG
BCC TSTN02
CMPA #"$"
ORCC #$01
BNE TSTN09
TSTN20 LEAX 1,X
CLR ,-S
CLR ,-S
TSTN23 LDA 0,X
JSR TSTHEX
BCS TSTN07
LEAX 1,X
PSHS X
PSHS A
LDD 3,S
BITA #$F0
BNE TSTN11
ASLB
ROLA
ASLB
ROLA
ASLB
ROLA
ASLB
ROLA
ADDB ,S+
STD 2,S
PULS X
BRA TSTN23
TSTN02 LEAX 1,X
PSHS A
CLR ,-S
TSTN03 LDA 0,X
JSR TSTDIG
BCS TSTN07
LEAX 1,X
PSHS X
PSHS A
LDD 3,S
ASLB
ROLA
BVS TSTN11
ASLB
ROLA
BVS TSTN11
ADDD 3,S
BVS TSTN11
ASLB
ROLA
BVS TSTN11
ADDB 0,S
ADCA #0
BVS TSTN11
STD 3,S
LEAS 1,S
PULS X
BRA TSTN03
TSTN07 PULS D
ANDCC #$FE
TSTN09 ANDCC #$FD
RTS
TSTN11 LDX 1,S
LEAS 5,S
ORCC #$03
RTS
;******************************
;******************************
TSTSTK STS SAVESP
LDD SAVESP
SUBD #STKCUS
SUBD STKLIM
RTS
;******************************
;******************************
PEEK JSR PAREXP
PSHS D
PSHS X
LDB [2,S]
PULS X
LEAS 2,S
CLRA
RTS
;******************************
;******************************
POKE JSR PAREXP
PSHS D
JSR SKIPSP
CMPA #"="
BEQ POKE05
JMP ERRORS
POKE05 LEAX 1,X
JSR EXPR
JSR TSTEOL
PSHS X
STB [2,S]
PULS X
LEAS 2,S
JMP ENDS02
;******************************
;******************************
TSTFUN JSR SKIPSP
STX CURSOR
LDX #FUNT
JSR FAN00
BCS TSTF05
PSHS D
TSTF05 RTS
;******************************
;******************************
FUNT DB "USR"
FCB EOL
FDB USER
DB "PEEK"
FCB EOL
FDB PEEK
DB "MEM"
FCB EOL
FDB TSTSTK
FCB EOL
;******************************
;******************************
FLINE LDX USRBAS
FNDLIN CMPX USRTOP
BNE FND03
ORCC #$03
RTS
FND03 CMPD 0,X
BNE FND05
ANDCC #$FC
RTS
FND05 BCC FND07
ORCC #$01
ANDCC #$FD
RTS
FND07 PSHS A
LDA #EOL
LEAX 1,X
FND09 LEAX 1,X
CMPA 0,X
BNE FND09
PULS A
LEAX 1,X
BRA FNDLIN
;******************************
;******************************
RELEXP BSR EXPR
PSHS D
CLRB
JSR SKIPSP
CMPA #"="
BEQ REL06
CMPA #"<"
BNE REL03
LEAX 1,X
INCB
JSR SKIPSP
CMPA #">"
BNE REL05
LEAX 1,X
ADDB #4
BRA REL07
REL03 CMPA #">"
BNE EXPR06
LEAX 1,X
ADDB #4
JSR SKIPSP
REL05 CMPA #"="
BNE REL07
REL06 LEAX 1,X
ADDB #2
REL07 PSHS B
BSR EXPR
PSHS X
SUBD 3,S
TFR CC,A
LSRA
TFR A,B
ASLA
ASLA
PSHS B
ADDA ,S+
ANDA #$06
BNE REL08
INCA
REL08 CLRB
ANDA 2,S
BEQ REL09
COMB
REL09 CLRA
PULS X
LEAS 3,S
RTS
;******************************
;******************************
EXPR CLR ,-S
CLR ,-S
JSR SKIPSP
CMPA #"-"
BEQ EXPR05
CMPA #"+"
BNE EXPR03
EXPR02 LEAX 1,X
EXPR03 BSR TERM
EXPR04 ADDD 0,S
STD 0,S
JSR SKIPSP
CMPA #"+"
BEQ EXPR02
CMPA #"-"
BNE EXPR06
EXPR05 LEAX 1,X
BSR TERM
NEGA
NEGB
SBCA #0
BRA EXPR04
EXPR06 PULS D
RTS
;******************************
;******************************
TERM JSR FACT
PSHS D
TERM03 JSR SKIPSP
CMPA #"*"
BEQ TERM07
CMPA #"/"
BEQ TERM05
PULS D
RTS
TERM05 LEAX 1,X
BSR FACT
PSHS X
LEAX 2,S
PSHS D
EORA 0,X
JSR ABSX
LEAX 0,S
JSR ABSX
PSHS A
LDA #17
PSHS A
CLRA
CLRB
DIV05 SUBD 2,S
BCC DIV07
ADDD 2,S
ANDCC #$FE
BRA DIV09
DIV07 ORCC #$01
DIV09 ROL 7,S
ROL 6,S
ROLB
ROLA
DEC 0,S
BNE DIV05
LDA 1,S
LEAS 4,S
TSTA
BPL TERM06
LEAX 2,S
BSR NEGX
TERM06 PULS X
BRA TERM03
TERM07 LEAX 1,X
BSR FACT
MULT PSHS B
LDB 2,S
MUL
LDA 1,S
STB 1,S
LDB 0,S
MUL
LDA 2,S
STB 2,S
PULS B
MUL
ADDA 0,S
ADDA 1,S
STD 0,S
BRA TERM03
;******************************
;******************************
FACT JSR TSTVAR
BCS FACT03
PSHS X
TFR D,X
LDD 0,X
PULS X
FACT02 RTS
FACT03 JSR TSTNBR
BCC FACT02
JSR TSTFUN
BCC FACT02
PAREXP BSR ARGONE
PSHS A
JSR SKIPSP
CMPA #")"
PULS A
BNE FACT05
LEAX 1,X
RTS
FACT05 JMP ERRORS
;******************************
;******************************
ARGONE JSR TSTSTK
BCC FACT04
JMP ERRORF
FACT04 JSR SKIPSP
CMPA #"("
BNE FACT05
LEAX 1,X
JMP EXPR
;******************************
;******************************
ABSX TST 0,X
BPL NEG05
NEGX NEG 0,X
NEG 1,X
BCC NEG05
DEC 0,X
NEG05 RTS
;******************************
;******************************
TSTEOL PSHS A
JSR SKIPSP
CMPA #EOL
BEQ TEOL03
JMP ERRORS
TEOL03 LEAX 1,X
PULS A
RTS
;******************************
;******************************
LET JSR TSTVAR
BCC LET03
JMP ERRORS
LET03 PSHS D
JSR SKIPSP
CMPA #"="
BEQ LET05
JMP ERRORS
LET05 LEAX 1,X
JSR EXPR
BSR TSTEOL
STX CURSOR
PULS X
STD 0,X
LDX CURSOR
JMP ENDS02
;******************************
;******************************
IF: JSR RELEXP
TSTB
BEQ IF03
JMP MSLINE
IF03: JMP REM
;******************************
;******************************
GOTO JSR EXPR
BSR TSTEOL
JSR FLINE
BCS GOSB04
JMP NXTLIN
;******************************
;******************************
GOSUB JSR EXPR
BSR TSTEOL
STX CURSOR
JSR FLINE
BCC GOSB03
GOSB04 JMP ERRORR
GOSB03 JSR TSTSTK
BCC GOSB05
JMP ERRORF
GOSB05 LDD CURSOR
PSHS D
LDD LINENB
PSHS D
JSR NXTLIN
PULS D
STD LINENB
PULS X
JMP ENDS02
;******************************
;******************************
RETURN EQU TSTEOL
;******************************
;******************************
PRINT JSR SKIPSP
PR01 CMPA #","
BEQ PR05
CMPA #";"
BEQ PR07
CMPA #EOL
BEQ PR04
CMPA #$22
BNE PR02
LEAX 1,X
BSR PRNTQS
BRA PR03
PR02 JSR EXPR
PSHS X
BSR PRNTN
PULS X
PR03 JSR SKIPSP
CMPA #","
BEQ PR05
CMPA #";"
BEQ PR07
CMPA #EOL
BEQ PR04
JMP ERRORS
PR04 PSHS X
JSR CRLF
PULS X
BRA PR08
PR05 LDB #$7
PR06 LDA #SPACE
JSR PUTCHR
BITB ZONE
BNE PR06
PR07 LEAX 1,X
JSR SKIPSP
CMPA #EOL
BNE PR01
PR08 LEAX 1,X
JMP ENDS02
;*
;*
PRQ01 JSR PUTCHR
PRNTQS LDA ,X+
CMPA #EOL
BNE PRQ03
JMP ERRORS
PRQ03 CMPA #$22
BNE PRQ01
RTS
;*
PRNTN TSTA
BPL PRN03
NEGA
NEGB
SBCA #0
PSHS A
LDA #"-"
JSR PUTCHR
PULS A
PRN03 LDX #PRNPT-2
PRN05 LEAX 2,X
CMPD 0,X
BCC PRN07
CMPX #PRNPTO
BNE PRN05
PRN07 CLR CHAR
PRN09 CMPD 0,X
BCS PRN11
SUBD 0,X
INC CHAR
BRA PRN09
PRN11 PSHS A
LDA #"0"
ADDA CHAR
JSR PUTCHR
PULS A
CMPX #PRNPTO
BEQ PRN13
LEAX 2,X
BRA PRN07
PRN13 RTS
PRNPT FDB 10000
FDB 1000
FDB 100
FDB 10
PRNPTO FDB 1
;*
PRNT4 LDX #PRNPT+2
BRA PRN07
;******************************
;******************************
INPUT JSR TSTVAR
BCS IN11
PSHS D
STX CURSOR
IN03 LDA #"?"
JSR PUTCHR
JSR GETLIN
IN05 JSR SKIPSP
CMPA #EOL
BEQ IN03
JSR TSTSNB
BCC IN07
LDX #RMESS
JSR PUTSTR
JSR CRLF
BRA IN03
IN07 STX SCRTCH
PULS X
STD 0,X
LDX CURSOR
JSR SKIPSP
CMPA #","
BEQ IN09
JMP ENDSMT
IN09 LEAX 1,X
JSR TSTVAR
BCC IN13
IN11 JMP ERRORS
IN13 PSHS D
PSHS X
LDX SCRTCH
JSR SKIPSP
CMPA #","
BNE IN05
LEAX 1,X
BRA IN05
RMESS DB "RE-ENTER"
FCB EOL
;******************************
;******************************
RUN LDX STKTOP
LDA #52
RUN01 CLR ,X+
DECA
BNE RUN01
LDX USRBAS
JMP REM05
;******************************
;******************************
LIST JSR TSTNBR
BCC LIST03
CLRA
CLRB
STD CURSOR
LDA #$7F
BRA LIST07
LIST03 STD CURSOR
JSR SKIPSP
CMPA #","
BEQ LIST05
LDA CURSOR
BRA LIST07
LIST05 LEAX 1,X
JSR TSTNBR
BCC LIST07
JMP ERRORS
LIST07 JSR TSTEOL
PSHS D
LDD CURSOR
STX CURSOR
JSR FLINE
LIST09 CMPX USRTOP
BEQ LIST10
PULS D
CMPD 0,X
BCS LIST11
PSHS D
LDD ,X++
PSHS X
JSR PRNT4
PULS X
LDA #SPACE
JSR PUTCHR
JSR PUTSTR
LEAX 1,X
PSHS X
JSR CRLF
PULS X
JSR TSTBRK
BRA LIST09
LIST10 LEAS 2,S
LDA #ETX
JSR PUTCHR
LIST11 LDX CURSOR
JMP ENDS02
;******************************
;******************************
VERBT DB "LET"
FCB EOL
FDB LET
DB "IF"
FCB EOL
FDB IF
DB "GOTO"
FCB EOL
FDB GOTO
DB "GOSUB"
FCB EOL
FDB GOSUB
DB "RETURN"
FCB EOL
FDB RETURN
DB "POKE"
FCB EOL
FDB POKE
DB "PRINT"
FCB EOL
FDB PRINT
DB "INPUT"
FCB EOL
FDB INPUT
DB "REM"
FCB EOL
FDB REM
DB "STOP"
FCB EOL
FDB END
DB "END"
FCB EOL
FDB END
DB "RUN"
FCB EOL
FDB RUN
DB "LIST"
FCB EOL
FDB LIST
DB "NEW"
FCB EOL
FDB CLEAR
DB "?"
FCB EOL
FDB PRINT
FCB EOL
;******************************
;******************************
TSTBRK bsr BRKEEE
beq GETC05
GETCHR bsr INEEE
CMPA #ETX
BNE GETC05
JMP BREAK
GETC05 RTS
PUTCHR INC ZONE
JMP OUTEEE
;******************************
;******************************
INEEE BSR BRKEEE
BEQ INEEE
LDA RECEV
ANDA #$7F
RTS
OUTEEE PSHS A
OUT01 LDA TRCS
BITA #TDRE
BEQ OUT01
PULS A
STA TRANS
RTS
BRKEEE PSHS A
BRK03 LDA TRCS
BITA #ORFE
BEQ BRK05
LDA RECEV
BRA BRK03
BRK05 BITA #RDRF
PULS A
RTS
;*
LDA #CNTL1
STA RMCR
LDA #CNTL2
STA TRCS
INTEEE EQU $
RTS
;******************************
;******************************
.endblock
:10FFF000E400E400E400E400E400E400E400E400E1
:10E400007EE4154D4F443942415349430010DE0C20
:10E41000BDEBE7201310CE21CC10DF0CBDEBE7CC19
:10E420000249DD06DD08DD0ABDE53F8EE483BDE57A
:10E430003810DE0C0F19BDE53F9E069F0E8E0000C2
:10E440009F120D192605863ABDEBACBDE592BDE6DF
:10E45000EC240E292BBDE65D810427E1BDE60F20EB
:10E46000D034109E089C0A351027037EE55FC30058
:10E4700000270D340683270F350622048D1020BD9A
:10E480007EE55654494E592056312E333704340612
:10E49000BDE65D9F14A6609E0E9C08270510A30094
:10E4A00024029E06BDE7C69F0E25229F103002A6BD
:10E4B00080810426FA9C08270EA6809F169E10A72E
:10E4C000809F109E1620EE9E109F089F0A9E14C6E5
:10E4D000FF5CA680810426F95D2603326239301F75
:10E4E000CB04301F5AA600812027F78604A7014FCE
:10E4F0009E089F16D308DD08DD0ABDE76424079F48
:10E50000089F0A7EE54E9E089F109E169C0E270AC5
:10E51000A6829F169E10A78220EE35069E0EED81E4
:10E520009F169E14A6809F149E16A7809F16810496
:10E5300026F039BDEBAC3001A600810426F5398EFA
:10E54000E5478DF40F18390D0A7F000000048D2671
:10E55000534F525259048D1E57484154203F048D49
:10E5600015484F57203F048D0D425245414B048DB5
:10E570000553544F50048DC78607BDEBACDC12BD6C
:10E58000EA608620BDEBAC35108DAD8DB27EE431F6
:10E590008DAD8E0200BDEBA281202514817F27F571
:10E5A0008C0248260486072002A780BDEBAC20E53C
:10E5B00081082724811827D8810A2731810D26D583
:10E5C0000D192705BDEBAC20073410BDE53F351014
:10E5D0008604A7008E0200398C020027B8301F86FF
:10E5E00008BDEBAC8620BDEBAC860820BE1A010648
:10E5F0001920B830018D66810426F8BDE9339612E2
:10E600009A1327149C0826037EE55FEC81DD12BD7A
:10E61000EB9E8D0825033406397EE9448D3F9F0E1D
:10E620008EEB39A680810426059E0E1A01399F16AD
:10E630009E0E9F149E14A100261530019F149E1655
:10E64000A6809F16810426ECEC009E141CFE399EC9
:10E6500016A680810426FA300220C83001A6008167
:10E660002027F8398D1A2422814125118146220D57
:10E6700080371CFE3981412504815A230D1A013946
:10E68000813025F9813922F580301CFE398DCE8DFF
:10E69000E425121F89A6018DDC24E23001C0415817
:10E6A0004FD30C1CFE39BDE9123406BDE65D812C4A
:10E6B000270981291A0127157EE5563001BDE84555
:10E6C0003402BDE65D8129350226ED1CFE30019F36
:10E6D0000EADF19E0E1CFE39BDE65D812D260D307E
:10E6E000018D092506405082001CFC39BDE65DBD48
:10E6F000E680242F81241A01266030016FE26FE248
:10E70000A600BDE664254F300134103402EC638569
:10E71000F0264A5849584958495849EBE0ED6235C6
:10E720001020DD300134026FE2A600BDE680252610
:10E73000300134103402EC63584929215849291D0D
:10E74000E363291958492915EB608900290FED6306
:10E750003261351020D335061CFE1CFD39AE613206
:10E76000651A033910DF10DC10830030930A39BDBD
:10E77000E8FF34063410E672351032624F39BDE8D6
:10E78000FF3406BDE65D813D27037EE5563001BDC1
:10E79000E845BDE9333410E772351032627EE5FE9C
:10E7A000BDE65D9F0E8EE7B0BDE623250234063937
:10E7B00055535204E6A65045454B04E76F4D454D71
:10E7C00004E764049E069C0826031A033910A3007C
:10E7D00026031CFC3924051A011CFD393402860469
:10E7E00030013001A10026FA3502300120D88D55C4
:10E7F00034065FBDE65D813D2723813C2610300154
:10E800005CBDE65D813E26113001CB042013813EC4
:10E81000265F3001CB04BDE65D813D26043001CB8F
:10E820000234048D203410A3631FA8441F89484874
:10E830003404ABE0840626014C5FA4622701534FE9
:10E8400035103263396FE26FE2BDE65D812D271727
:10E85000812B260230018D1CE360ED60BDE65D81F9
:10E860002B27F1812D260A30018D0940508200208E
:10E87000E7350639BDE8E73406BDE65D812A27485D
:10E88000812F270335063930018D5C341030623416
:10E8900006A800BDE9263060BDE9263402861134A1
:10E8A000024F5FA3622406E3621CFE20021A016984
:10E8B00067696659496A6026EAA66132644D2A048E
:10E8C00030628D66351020B130018D1B3404E66254
:10E8D0003DA661E761E6603DA662E76235043DABB7
:10E8E00060AB61ED602092BDE68D250934101F01FB
:10E8F000EC00351039BDE6EC24FABDE7A024F58D17
:10E90000113402BDE65D8129350226033001397ECE
:10E91000E556BDE76424037EE54EBDE65D8128260D
:10E92000EE30017EE8456D002A0860006001240297
:10E930006A00393402BDE65D810427037EE5563066
:10E9400001350239BDE68D24037EE5563406BDE669
:10E950005D813D27037EE5563001BDE8458DD49F9E
:10E960000E3510ED009E0E7EE5FEBDE7EE5D270341
:10E970007EE60F7EE5F5BDE8458DB8BDE7C4250F01
:10E980007EE60BBDE8458DAB9F0EBDE7C424037E3C
:10E99000E55FBDE76424037EE54EDC0E3406DC1241
:10E9A0003406BDE60B3506DD1235107EE5FEBDE60C
:10E9B0005D812C2736813B273D8104272581222636
:10E9C0000630018D422009BDE84534108D473510D1
:10E9D000BDE65D812C2714813B271B810427037E24
:10E9E000E5563410BDE53F35102014C6078620BD1E
:10E9F000EBACD51826F73001BDE65D810426B230B8
:10EA0000017EE5FEBDEBACA680810426037EE556C3
:10EA1000812226F0394D2A0D405082003402862D85
:10EA2000BDEBAC35028EEA54300210A30024058CF5
:10EA3000EA5E26F40F1610A3002506A3000C16208C
:10EA4000F5340286309B16BDEBAC35028CEA5E27AE
:10EA500004300220DF39271003E80064000A0001B7
:10EA60008EEA5820CFBDE68D253C34069F0E863FAA
:10EA7000BDEBACBDE592BDE65D810427F1BDE6D8F6
:10EA8000240B8EEABABDE538BDE53F20E19F143581
:10EA900010ED009E0EBDE65D812C27037EE5FB3068
:10EAA00001BDE68D24037EE556340634109E14BD68
:10EAB000E65D812C26C0300120BC52452D454E54C8
:10EAC0004552049E0C86346F804A26FB9E067EE6E5
:10EAD00004BDE6EC24084F5FDD0E867F2017DD0EB7
:10EAE000BDE65D812C2704960E200A3001BDE6ECC0
:10EAF00024037EE556BDE9333406DC0E9F0EBDE7E8
:10EB0000C49C082728350610A30025283406EC816C
:10EB10003410BDEA6035108620BDEBACBDE5383061
:10EB2000013410BDE53F3510BDEB9E20D432628626
:10EB300003BDEBAC9E0E7EE5FE4C455404E9444912
:10EB40004604E96A474F544F04E976474F5355420C
:10EB500004E98352455455524E04E933504F4B4516
:10EB600004E77E5052494E5404E9AE494E50555484
:10EB700004EA6552454D04E5F553544F5004E56FE2
:10EB8000454E4404E56F52554E04EAC34C49535474
:10EB900004EAD14E455704E41F3F04E9AE048D2A30
:10EBA00027098D0D810326037EE567390C187EEB5E
:10EBB000BB8D1727FCB683FF847F393402B683FEF2
:10EBC000850227F93502B783FF393402B683FE8503
:10EBD000202705B683FF20F485013502398603B767
:08EBE00083FE8615B783FE39A0
:00000001FF
0000 ;NAM TB01V137
0000 ;* WRITTEN 20-OCT-77 BY JOHN BYRNS
0000 ;* REVISED 30-DEC-77
0000 ;* REVISED 18-JAN-78
0000 ;* REVISED 10-APR-78
0000 ;* REVISED 08-MAY-79 TO ELIMINATE USE OF SP
0000 ;* REVISED 24-JAN-80 TO USE 6801 ON CHIP RAM
0000 ;* REVISED 26-JAN-80 FOR NEW 6801 INSTRUCTIONS
0000 ;* REVISED 24-JUL-81 FOR WHISTON BOARD
0000 ;* REVISED 24-SEP-81 INCLUDE USER FUNCTION
0000 ;* REVISED 08-APR-82 MAKE STANDALONE INCLUDE HEX CONSTANTS AND MEM FUNCTION
0000 ;* REVISED 21-NOV-84 FOR 6809
0000 ;* REVISED FEB 94 ADAPTED TO SIMULATOR AND BUGFIXES BY L.C. BENSCHOP.
0000 ;*
0000 .ENGINE kilo
0000 EOL: EQU $04
0000 ETX: EQU $03
0000 SPACE: EQU $20
0000 CR: EQU $0D
0000 LF: EQU $0A
0000 BS: EQU $08
0000 CAN: EQU $18
0000 BELL: EQU $07
0000 FILL: EQU $00
0000 DEL: EQU $7F
0000 BSIZE: EQU 73
0000 STKCUS: EQU 48
0000 ;*
0000 BACIA: EQU $83FE
0000 RMCR: EQU bACIA
0000 TRCS: EQU bACIA
0000 RECEV: EQU bACIA+1
0000 TRANS: EQU bACIA+1
0000 CNTL1: EQU $03
0000 CNTL2: EQU $15
0000 RDRF: EQU $01
0000 ORFE: EQU $20
0000 TDRE: EQU $02
0000 ;* EDIT THE FOLLOWING EQUATES TO REFLECT THE
0000 ;* DESIRED ROM AND RAM LAYOUT
0000 LORAM: EQU $0080
0000 BUFFER: EQU $0200
0000 RAMSIZ: EQU $2000
0000 ROMADR: EQU $f000
0000 ;*
0000 RAMBEG: EQU BUFFER+BSIZE
0000 RAMEND: EQU BUFFER+RAMSIZ
0000 ;*
0000 RAMPAT: EQU $AA0F
0000 ROMPAT: EQU $F055
0000 ;*
0000 ; ORG LORAM
0000 .BSSEG
0006 .ORG 6
0006 USRBAS: RMB 2
0008 USRTOP: RMB 2
000A STKLIM: RMB 2
000C STKTOP: RMB 2
000E CURSOR: RMB 2
0010 SAVESP: RMB 2
0012 LINENB: RMB 2
0014 SCRTCH: RMB 2
0016 CHAR: RMB 2
0018 ZONE: RMB 1
0019 MODE: RMB 1
001A RESRVD: RMB 1
001B LOEND: EQU $
001B ;*
0000 .CSEG
FFF0 .ORG 0xfff0
FFF0 ;reserved
FFF0 E4 00 DW reset
FFF2 ;SWI3
FFF2 E4 00 DW reset
FFF4 ;SWI2
FFF4 E4 00 DW reset
FFF6 ;FIRQ
FFF6 E4 00 DW reset
FFF8 ;IRQ
FFF8 E4 00 DW reset
FFFA ;SWI
FFFA E4 00 DW reset
FFFC ;NMI
FFFC E4 00 DW reset
FFFE ;RES
FFFE E4 00 DW reset
10000 .BLOCK
E400 .ORG $e400
E400 RESET:
E400 .ENT $
E400 7E E4 15 BASIC: JMP SETUP
E403 4D 4F 44 39 42 41 53 49 43 00 .CSTR "MOD9BASIC"
E40D 10 DE 0C WARMS: LDS STKTOP
E410 BD EB E7 JSR INTEEE
E413 20 13 BRA WMS05
E415 10 CE 21 CC SETUP: LDS #RAMEND-52
E419 10 DF 0C SET03: STS STKTOP
E41C BD EB E7 JSR INTEEE
E41F CC 02 49 CLEAR: LDD #RAMBEG
E422 DD 06 STD USRBAS
E424 DD 08 STD USRTOP
E426 DD 0A CLR02: STD STKLIM
E428 BD E5 3F WMS05: JSR CRLF
E42B 8E E4 83 LDX #VSTR
E42E BD E5 38 JSR PUTSTR
E431 10 DE 0C CMDB: LDS STKTOP
E434 0F 19 CLR MODE
E436 BD E5 3F JSR CRLF
E439 9E 06 LDX USRBAS
E43B 9F 0E STX CURSOR
E43D 8E 00 00 CMDE: LDX #0000
E440 9F 12 STX LINENB
E442 0D 19 TST MODE
E444 26 05 BNE CMD01
E446 86 3A LDA #":"
E448 BD EB AC JSR PUTCHR
E44B BD E5 92 CMD01: JSR GETLIN
E44E BD E6 EC JSR TSTNBR
E451 24 0E BCC CMD02
E453 29 2B BVS CMD05
E455 BD E6 5D JSR SKIPSP
E458 81 04 CMPA #EOL
E45A 27 E1 BEQ CMDE
E45C BD E6 0F JSR MSLINE
E45F 20 D0 BRA CMDB
E461 34 10 CMD02: PSHS X
E463 9E 08 LDX USRTOP
E465 9C 0A CMPX STKLIM
E467 35 10 PULS X
E469 27 03 BEQ CMD03
E46B 7E E5 5F JMP ERRORR
E46E C3 00 00 CMD03: ADDD #0
E471 27 0D BEQ CMD05
E473 34 06 CMD04: PSHS D
E475 83 27 0F SUBD #9999
E478 35 06 PULS D
E47A 22 04 BHI CMD05
E47C 8D 10 BSR EDITOR
E47E 20 BD BRA CMDE
E480 7E E5 56 CMD05: JMP ERRORS
E483 54 49 4E 59 20 56 31 2E 33 37 VSTR: DB "TINY V1.37"
E48D 04 FCB EOL
E48E ;******************************
E48E ;******************************
E48E 34 06 EDITOR: PSHS D
E490 BD E6 5D JSR SKIPSP
E493 9F 14 STX SCRTCH
E495 A6 60 LDA 0,S
E497 9E 0E LDX CURSOR
E499 9C 08 CMPX USRTOP
E49B 27 05 BEQ ED00
E49D 10 A3 00 CMPD 0,X
E4A0 24 02 BCC ED01
E4A2 9E 06 ED00: LDX USRBAS
E4A4 BD E7 C6 ED01: JSR FNDLIN
E4A7 9F 0E STX CURSOR
E4A9 25 22 BCS ED04
E4AB 9F 10 STX SAVESP
E4AD 30 02 LEAX 2,X
E4AF A6 80 ED02: LDA ,X+
E4B1 81 04 CMPA #EOL
E4B3 26 FA BNE ED02
E4B5 9C 08 ED03: CMPX USRTOP
E4B7 27 0E BEQ ED35
E4B9 A6 80 LDA ,X+
E4BB 9F 16 STX CHAR
E4BD 9E 10 LDX SAVESP
E4BF A7 80 STA ,X+
E4C1 9F 10 STX SAVESP
E4C3 9E 16 LDX CHAR
E4C5 20 EE BRA ED03
E4C7 9E 10 ED35: LDX SAVESP
E4C9 9F 08 STX USRTOP
E4CB 9F 0A STX STKLIM
E4CD 9E 14 ED04: LDX SCRTCH
E4CF C6 FF LDB #-1
E4D1 5C ED05: INCB
E4D2 A6 80 LDA ,X+
E4D4 81 04 CMPA #EOL
E4D6 26 F9 BNE ED05
E4D8 5D TSTB
E4D9 26 03 BNE ED55
E4DB 32 62 LEAS 2,S
E4DD 39 RTS
E4DE 30 1F ED55: LEAX -1,X
E4E0 CB 04 ADDB #4
E4E2 30 1F ED06: LEAX -1,X
E4E4 5A DECB
E4E5 A6 00 LDA 0,X
E4E7 81 20 CMPA #SPACE
E4E9 27 F7 BEQ ED06
E4EB 86 04 LDA #EOL
E4ED A7 01 STA 1,X
E4EF 4F CLRA
E4F0 9E 08 LDX USRTOP
E4F2 9F 16 STX CHAR
E4F4 D3 08 ADDD USRTOP
E4F6 DD 08 STD USRTOP
E4F8 DD 0A STD STKLIM
E4FA BD E7 64 JSR TSTSTK
E4FD 24 07 BCC ED07
E4FF 9F 08 STX USRTOP
E501 9F 0A STX STKLIM
E503 7E E5 4E JMP ERRORF
E506 9E 08 ED07: LDX USRTOP
E508 9F 10 ED08: STX SAVESP
E50A 9E 16 LDX CHAR
E50C 9C 0E CMPX CURSOR
E50E 27 0A BEQ ED09
E510 A6 82 LDA ,-X
E512 9F 16 STX CHAR
E514 9E 10 LDX SAVESP
E516 A7 82 STA ,-X
E518 20 EE BRA ED08
E51A 35 06 ED09: PULS D
E51C 9E 0E LDX CURSOR
E51E ED 81 STD ,X++
E520 9F 16 STX CHAR
E522 9E 14 ED10: LDX SCRTCH
E524 A6 80 LDA ,X+
E526 9F 14 STX SCRTCH
E528 9E 16 LDX CHAR
E52A A7 80 STA ,X+
E52C 9F 16 STX CHAR
E52E 81 04 CMPA #EOL
E530 26 F0 BNE ED10
E532 39 RTS
E533 ;******************************
E533 ;******************************
E533 BD EB AC PUTS01: JSR PUTCHR
E536 30 01 LEAX 1,X
E538 A6 00 PUTSTR: LDA 0,X
E53A 81 04 CMPA #EOL
E53C 26 F5 BNE PUTS01
E53E 39 RTS
E53F ;******************************
E53F ;******************************
E53F 8E E5 47 CRLF: LDX #CRLFST
E542 8D F4 BSR PUTSTR
E544 0F 18 CLR ZONE
E546 39 RTS
E547 0D 0A 7F 00 00 00 04 CRLFST: FCB CR,LF,DEL,FILL,FILL,FILL,EOL
E54E ;******************************
E54E ;******************************
E54E 8D 26 ERRORF: BSR ER01
E550 53 4F 52 52 59 DB "SORRY"
E555 04 FCB EOL
E556 8D 1E ERRORS: BSR ER01
E558 57 48 41 54 20 3F DB "WHAT ?"
E55E 04 FCB EOL
E55F 8D 15 ERRORR: BSR ER01
E561 48 4F 57 20 3F DB "HOW ?"
E566 04 FCB EOL
E567 8D 0D BREAK: BSR ER01
E569 42 52 45 41 4B DB "BREAK"
E56E 04 FCB EOL
E56F 8D 05 END: BSR ER01
E571 53 54 4F 50 DB "STOP"
E575 04 FCB EOL
E576 8D C7 ER01: BSR CRLF
E578 86 07 LDA #BELL
E57A BD EB AC JSR PUTCHR
E57D DC 12 LDD LINENB
E57F BD EA 60 JSR PRNT4
E582 86 20 LDA #SPACE
E584 BD EB AC JSR PUTCHR
E587 35 10 PULS X
E589 8D AD BSR PUTSTR
E58B 8D B2 BSR CRLF
E58D 7E E4 31 JMP CMDB
E590 ;******************************
E590 ;******************************
E590 8D AD GL00: BSR CRLF
E592 8E 02 00 GETLIN: LDX #BUFFER
E595 BD EB A2 GL03: JSR GETCHR
E598 81 20 CMPA #SPACE
E59A 25 14 BCS GL05
E59C 81 7F CMPA #$7F
E59E 27 F5 BEQ GL03
E5A0 8C 02 48 CMPX #BUFFER+BSIZE-1
E5A3 26 04 BNE GL04
E5A5 86 07 LDA #BELL
E5A7 20 02 BRA GL02
E5A9 A7 80 GL04: STA ,X+
E5AB BD EB AC GL02: JSR PUTCHR
E5AE 20 E5 BRA GL03
E5B0 81 08 GL05: CMPA #BS
E5B2 27 24 BEQ GL07
E5B4 81 18 CMPA #CAN
E5B6 27 D8 BEQ GL00
E5B8 81 0A CMPA #LF
E5BA 27 31 BEQ GL09
E5BC 81 0D CMPA #CR
E5BE 26 D5 BNE GL03
E5C0 0D 19 TST MODE
E5C2 27 05 BEQ GL06
E5C4 BD EB AC JSR PUTCHR
E5C7 20 07 BRA GL08
E5C9 34 10 GL06: PSHS X
E5CB BD E5 3F JSR CRLF
E5CE 35 10 PULS X
E5D0 86 04 GL08: LDA #EOL
E5D2 A7 00 STA 0,X
E5D4 8E 02 00 LDX #BUFFER
E5D7 39 RTS
E5D8 8C 02 00 GL07: CMPX #BUFFER
E5DB 27 B8 BEQ GL03
E5DD 30 1F LEAX -1,X
E5DF 86 08 LDA #BS
E5E1 BD EB AC JSR PUTCHR
E5E4 86 20 LDA #SPACE
E5E6 BD EB AC JSR PUTCHR
E5E9 86 08 LDA #BS
E5EB 20 BE BRA GL02
E5ED 1A 01 GL09: ORCC #$01
E5EF 06 19 ROR MODE
E5F1 20 B8 BRA GL02
E5F3 ;******************************
E5F3 ;******************************
E5F3 30 01 REM00: LEAX 1,X
E5F5 8D 66 REM: BSR SKIPSP
E5F7 81 04 CMPA #EOL
E5F9 26 F8 BNE REM00
E5FB BD E9 33 ENDSMT: JSR TSTEOL
E5FE 96 12 ENDS02: LDA LINENB
E600 9A 13 ORA LINENB+1
E602 27 14 BEQ REM09
E604 9C 08 REM05: CMPX USRTOP
E606 26 03 BNE NXTLIN
E608 7E E5 5F JMP ERRORR
E60B EC 81 NXTLIN: LDD ,X++
E60D DD 12 STD LINENB
E60F BD EB 9E MSLINE: JSR TSTBRK
E612 8D 08 BSR IFAN
E614 25 03 BCS IMPLET
E616 34 06 PSHS D
E618 39 REM09: RTS
E619 7E E9 44 IMPLET: JMP LET
E61C ;******************************
E61C ;******************************
E61C 8D 3F IFAN: BSR SKIPSP
E61E 9F 0E STX CURSOR
E620 8E EB 39 LDX #VERBT
E623 A6 80 FAN00: LDA ,X+
E625 81 04 CMPA #EOL
E627 26 05 BNE FAN04
E629 9E 0E LDX CURSOR
E62B 1A 01 ORCC #$01
E62D 39 RTS
E62E 9F 16 FAN04: STX CHAR
E630 9E 0E LDX CURSOR
E632 9F 14 STX SCRTCH
E634 9E 14 FAN05: LDX SCRTCH
E636 A1 00 CMPA 0,X
E638 26 15 BNE FAN07
E63A 30 01 LEAX 1,X
E63C 9F 14 STX SCRTCH
E63E 9E 16 LDX CHAR
E640 A6 80 LDA ,X+
E642 9F 16 STX CHAR
E644 81 04 CMPA #EOL
E646 26 EC BNE FAN05
E648 EC 00 LDD 0,X
E64A 9E 14 LDX SCRTCH
E64C 1C FE ANDCC #$FE
E64E 39 RTS
E64F 9E 16 FAN07: LDX CHAR
E651 A6 80 FAN08: LDA ,X+
E653 81 04 CMPA #EOL
E655 26 FA BNE FAN08
E657 30 02 LEAX 2,X
E659 20 C8 BRA FAN00
E65B ;******************************
E65B ;******************************
E65B 30 01 NXTNSP: LEAX 1,X
E65D A6 00 SKIPSP: LDA 0,X
E65F 81 20 CMPA #SPACE
E661 27 F8 BEQ NXTNSP
E663 39 RTS
E664 ;******************************
E664 ;******************************
E664 8D 1A TSTHEX: BSR TSTDIG
E666 24 22 BCC TST05
E668 81 41 CMPA #"A"
E66A 25 11 BCS TST03
E66C 81 46 CMPA #"F"
E66E 22 0D BHI TST03
E670 80 37 SUBA #"A"-10
E672 1C FE ANDCC #$FE
E674 39 RTS
E675 ;******************************
E675 ;******************************
E675 81 41 TSTLTR: CMPA #"A"
E677 25 04 BCS TST03
E679 81 5A CMPA #"Z"
E67B 23 0D BLS TST05
E67D 1A 01 TST03: ORCC #$01
E67F 39 RTS
E680 ;******************************
E680 ;******************************
E680 81 30 TSTDIG: CMPA #"0"
E682 25 F9 BCS TST03
E684 81 39 CMPA #"9"
E686 22 F5 BHI TST03
E688 80 30 SUBA #"0"
E68A 1C FE TST05: ANDCC #$FE
E68C 39 RTS
E68D ;******************************
E68D ;******************************
E68D 8D CE TSTVAR: BSR SKIPSP
E68F 8D E4 BSR TSTLTR
E691 25 12 BCS TSTV03
E693 1F 89 TFR A,B
E695 A6 01 LDA 1,X
E697 8D DC BSR TSTLTR
E699 24 E2 BCC TST03
E69B 30 01 LEAX 1,X
E69D C0 41 SUBB #"A"
E69F 58 ASLB
E6A0 4F CLRA
E6A1 D3 0C ADDD STKTOP
E6A3 1C FE TSTV02: ANDCC #$FE
E6A5 39 TSTV03: RTS
E6A6 ;******************************
E6A6 ;******************************
E6A6 BD E9 12 USER: JSR ARGONE
E6A9 34 06 PSHS D
E6AB BD E6 5D JSR SKIPSP
E6AE 81 2C CMPA #","
E6B0 27 09 BEQ USER03
E6B2 81 29 CMPA #")"
E6B4 1A 01 ORCC #$01
E6B6 27 15 BEQ USER05
E6B8 7E E5 56 USER02: JMP ERRORS
E6BB 30 01 USER03: LEAX 1,X
E6BD BD E8 45 JSR EXPR
E6C0 34 02 PSHS A
E6C2 BD E6 5D JSR SKIPSP
E6C5 81 29 CMPA #")"
E6C7 35 02 PULS A
E6C9 26 ED BNE USER02
E6CB 1C FE ANDCC #$FE
E6CD 30 01 USER05: LEAX 1,X
E6CF 9F 0E STX CURSOR
E6D1 AD F1 JSR [,S++]
E6D3 9E 0E LDX CURSOR
E6D5 1C FE ANDCC #$FE
E6D7 39 RTS
E6D8 ;******************************
E6D8 ;******************************
E6D8 BD E6 5D TSTSNB: JSR SKIPSP
E6DB 81 2D CMPA #"-"
E6DD 26 0D BNE TSTNBR
E6DF 30 01 LEAX 1,X
E6E1 8D 09 BSR TSTNBR
E6E3 25 06 BCS TSN02
E6E5 40 NEGA
E6E6 50 NEGB
E6E7 82 00 SBCA #0
E6E9 1C FC ANDCC #$FC
E6EB 39 TSN02: RTS
E6EC ;******************************
E6EC ;******************************
E6EC BD E6 5D TSTNBR: JSR SKIPSP
E6EF BD E6 80 JSR TSTDIG
E6F2 24 2F BCC TSTN02
E6F4 81 24 CMPA #"$"
E6F6 1A 01 ORCC #$01
E6F8 26 60 BNE TSTN09
E6FA 30 01 TSTN20: LEAX 1,X
E6FC 6F E2 CLR ,-S
E6FE 6F E2 CLR ,-S
E700 A6 00 TSTN23: LDA 0,X
E702 BD E6 64 JSR TSTHEX
E705 25 4F BCS TSTN07
E707 30 01 LEAX 1,X
E709 34 10 PSHS X
E70B 34 02 PSHS A
E70D EC 63 LDD 3,S
E70F 85 F0 BITA #$F0
E711 26 4A BNE TSTN11
E713 58 ASLB
E714 49 ROLA
E715 58 ASLB
E716 49 ROLA
E717 58 ASLB
E718 49 ROLA
E719 58 ASLB
E71A 49 ROLA
E71B EB E0 ADDB ,S+
E71D ED 62 STD 2,S
E71F 35 10 PULS X
E721 20 DD BRA TSTN23
E723 30 01 TSTN02: LEAX 1,X
E725 34 02 PSHS A
E727 6F E2 CLR ,-S
E729 A6 00 TSTN03: LDA 0,X
E72B BD E6 80 JSR TSTDIG
E72E 25 26 BCS TSTN07
E730 30 01 LEAX 1,X
E732 34 10 PSHS X
E734 34 02 PSHS A
E736 EC 63 LDD 3,S
E738 58 ASLB
E739 49 ROLA
E73A 29 21 BVS TSTN11
E73C 58 ASLB
E73D 49 ROLA
E73E 29 1D BVS TSTN11
E740 E3 63 ADDD 3,S
E742 29 19 BVS TSTN11
E744 58 ASLB
E745 49 ROLA
E746 29 15 BVS TSTN11
E748 EB 60 ADDB 0,S
E74A 89 00 ADCA #0
E74C 29 0F BVS TSTN11
E74E ED 63 STD 3,S
E750 32 61 LEAS 1,S
E752 35 10 PULS X
E754 20 D3 BRA TSTN03
E756 35 06 TSTN07: PULS D
E758 1C FE ANDCC #$FE
E75A 1C FD TSTN09: ANDCC #$FD
E75C 39 RTS
E75D AE 61 TSTN11: LDX 1,S
E75F 32 65 LEAS 5,S
E761 1A 03 ORCC #$03
E763 39 RTS
E764 ;******************************
E764 ;******************************
E764 10 DF 10 TSTSTK: STS SAVESP
E767 DC 10 LDD SAVESP
E769 83 00 30 SUBD #STKCUS
E76C 93 0A SUBD STKLIM
E76E 39 RTS
E76F ;******************************
E76F ;******************************
E76F BD E8 FF PEEK: JSR PAREXP
E772 34 06 PSHS D
E774 34 10 PSHS X
E776 E6 72 LDB [2,S]
E778 35 10 PULS X
E77A 32 62 LEAS 2,S
E77C 4F CLRA
E77D 39 RTS
E77E ;******************************
E77E ;******************************
E77E BD E8 FF POKE: JSR PAREXP
E781 34 06 PSHS D
E783 BD E6 5D JSR SKIPSP
E786 81 3D CMPA #"="
E788 27 03 BEQ POKE05
E78A 7E E5 56 JMP ERRORS
E78D 30 01 POKE05: LEAX 1,X
E78F BD E8 45 JSR EXPR
E792 BD E9 33 JSR TSTEOL
E795 34 10 PSHS X
E797 E7 72 STB [2,S]
E799 35 10 PULS X
E79B 32 62 LEAS 2,S
E79D 7E E5 FE JMP ENDS02
E7A0 ;******************************
E7A0 ;******************************
E7A0 BD E6 5D TSTFUN: JSR SKIPSP
E7A3 9F 0E STX CURSOR
E7A5 8E E7 B0 LDX #FUNT
E7A8 BD E6 23 JSR FAN00
E7AB 25 02 BCS TSTF05
E7AD 34 06 PSHS D
E7AF 39 TSTF05: RTS
E7B0 ;******************************
E7B0 ;******************************
E7B0 55 53 52 FUNT: DB "USR"
E7B3 04 FCB EOL
E7B4 E6 A6 FDB USER
E7B6 50 45 45 4B DB "PEEK"
E7BA 04 FCB EOL
E7BB E7 6F FDB PEEK
E7BD 4D 45 4D DB "MEM"
E7C0 04 FCB EOL
E7C1 E7 64 FDB TSTSTK
E7C3 04 FCB EOL
E7C4 ;******************************
E7C4 ;******************************
E7C4 9E 06 FLINE: LDX USRBAS
E7C6 9C 08 FNDLIN: CMPX USRTOP
E7C8 26 03 BNE FND03
E7CA 1A 03 ORCC #$03
E7CC 39 RTS
E7CD 10 A3 00 FND03: CMPD 0,X
E7D0 26 03 BNE FND05
E7D2 1C FC ANDCC #$FC
E7D4 39 RTS
E7D5 24 05 FND05: BCC FND07
E7D7 1A 01 ORCC #$01
E7D9 1C FD ANDCC #$FD
E7DB 39 RTS
E7DC 34 02 FND07: PSHS A
E7DE 86 04 LDA #EOL
E7E0 30 01 LEAX 1,X
E7E2 30 01 FND09: LEAX 1,X
E7E4 A1 00 CMPA 0,X
E7E6 26 FA BNE FND09
E7E8 35 02 PULS A
E7EA 30 01 LEAX 1,X
E7EC 20 D8 BRA FNDLIN
E7EE ;******************************
E7EE ;******************************
E7EE 8D 55 RELEXP: BSR EXPR
E7F0 34 06 PSHS D
E7F2 5F CLRB
E7F3 BD E6 5D JSR SKIPSP
E7F6 81 3D CMPA #"="
E7F8 27 23 BEQ REL06
E7FA 81 3C CMPA #"<"
E7FC 26 10 BNE REL03
E7FE 30 01 LEAX 1,X
E800 5C INCB
E801 BD E6 5D JSR SKIPSP
E804 81 3E CMPA #">"
E806 26 11 BNE REL05
E808 30 01 LEAX 1,X
E80A CB 04 ADDB #4
E80C 20 13 BRA REL07
E80E 81 3E REL03: CMPA #">"
E810 26 5F BNE EXPR06
E812 30 01 LEAX 1,X
E814 CB 04 ADDB #4
E816 BD E6 5D JSR SKIPSP
E819 81 3D REL05: CMPA #"="
E81B 26 04 BNE REL07
E81D 30 01 REL06: LEAX 1,X
E81F CB 02 ADDB #2
E821 34 04 REL07: PSHS B
E823 8D 20 BSR EXPR
E825 34 10 PSHS X
E827 A3 63 SUBD 3,S
E829 1F A8 TFR CC,A
E82B 44 LSRA
E82C 1F 89 TFR A,B
E82E 48 ASLA
E82F 48 ASLA
E830 34 04 PSHS B
E832 AB E0 ADDA ,S+
E834 84 06 ANDA #$06
E836 26 01 BNE REL08
E838 4C INCA
E839 5F REL08: CLRB
E83A A4 62 ANDA 2,S
E83C 27 01 BEQ REL09
E83E 53 COMB
E83F 4F REL09: CLRA
E840 35 10 PULS X
E842 32 63 LEAS 3,S
E844 39 RTS
E845 ;******************************
E845 ;******************************
E845 6F E2 EXPR: CLR ,-S
E847 6F E2 CLR ,-S
E849 BD E6 5D JSR SKIPSP
E84C 81 2D CMPA #"-"
E84E 27 17 BEQ EXPR05
E850 81 2B CMPA #"+"
E852 26 02 BNE EXPR03
E854 30 01 EXPR02: LEAX 1,X
E856 8D 1C EXPR03: BSR TERM
E858 E3 60 EXPR04: ADDD 0,S
E85A ED 60 STD 0,S
E85C BD E6 5D JSR SKIPSP
E85F 81 2B CMPA #"+"
E861 27 F1 BEQ EXPR02
E863 81 2D CMPA #"-"
E865 26 0A BNE EXPR06
E867 30 01 EXPR05: LEAX 1,X
E869 8D 09 BSR TERM
E86B 40 NEGA
E86C 50 NEGB
E86D 82 00 SBCA #0
E86F 20 E7 BRA EXPR04
E871 35 06 EXPR06: PULS D
E873 39 RTS
E874 ;******************************
E874 ;******************************
E874 BD E8 E7 TERM: JSR FACT
E877 34 06 PSHS D
E879 BD E6 5D TERM03: JSR SKIPSP
E87C 81 2A CMPA #"*"
E87E 27 48 BEQ TERM07
E880 81 2F CMPA #"/"
E882 27 03 BEQ TERM05
E884 35 06 PULS D
E886 39 RTS
E887 30 01 TERM05: LEAX 1,X
E889 8D 5C BSR FACT
E88B 34 10 PSHS X
E88D 30 62 LEAX 2,S
E88F 34 06 PSHS D
E891 A8 00 EORA 0,X
E893 BD E9 26 JSR ABSX
E896 30 60 LEAX 0,S
E898 BD E9 26 JSR ABSX
E89B 34 02 PSHS A
E89D 86 11 LDA #17
E89F 34 02 PSHS A
E8A1 4F CLRA
E8A2 5F CLRB
E8A3 A3 62 DIV05: SUBD 2,S
E8A5 24 06 BCC DIV07
E8A7 E3 62 ADDD 2,S
E8A9 1C FE ANDCC #$FE
E8AB 20 02 BRA DIV09
E8AD 1A 01 DIV07: ORCC #$01
E8AF 69 67 DIV09: ROL 7,S
E8B1 69 66 ROL 6,S
E8B3 59 ROLB
E8B4 49 ROLA
E8B5 6A 60 DEC 0,S
E8B7 26 EA BNE DIV05
E8B9 A6 61 LDA 1,S
E8BB 32 64 LEAS 4,S
E8BD 4D TSTA
E8BE 2A 04 BPL TERM06
E8C0 30 62 LEAX 2,S
E8C2 8D 66 BSR NEGX
E8C4 35 10 TERM06: PULS X
E8C6 20 B1 BRA TERM03
E8C8 30 01 TERM07: LEAX 1,X
E8CA 8D 1B BSR FACT
E8CC 34 04 MULT: PSHS B
E8CE E6 62 LDB 2,S
E8D0 3D MUL
E8D1 A6 61 LDA 1,S
E8D3 E7 61 STB 1,S
E8D5 E6 60 LDB 0,S
E8D7 3D MUL
E8D8 A6 62 LDA 2,S
E8DA E7 62 STB 2,S
E8DC 35 04 PULS B
E8DE 3D MUL
E8DF AB 60 ADDA 0,S
E8E1 AB 61 ADDA 1,S
E8E3 ED 60 STD 0,S
E8E5 20 92 BRA TERM03
E8E7 ;******************************
E8E7 ;******************************
E8E7 BD E6 8D FACT: JSR TSTVAR
E8EA 25 09 BCS FACT03
E8EC 34 10 PSHS X
E8EE 1F 01 TFR D,X
E8F0 EC 00 LDD 0,X
E8F2 35 10 PULS X
E8F4 39 FACT02: RTS
E8F5 BD E6 EC FACT03: JSR TSTNBR
E8F8 24 FA BCC FACT02
E8FA BD E7 A0 JSR TSTFUN
E8FD 24 F5 BCC FACT02
E8FF 8D 11 PAREXP: BSR ARGONE
E901 34 02 PSHS A
E903 BD E6 5D JSR SKIPSP
E906 81 29 CMPA #")"
E908 35 02 PULS A
E90A 26 03 BNE FACT05
E90C 30 01 LEAX 1,X
E90E 39 RTS
E90F 7E E5 56 FACT05: JMP ERRORS
E912 ;******************************
E912 ;******************************
E912 BD E7 64 ARGONE: JSR TSTSTK
E915 24 03 BCC FACT04
E917 7E E5 4E JMP ERRORF
E91A BD E6 5D FACT04: JSR SKIPSP
E91D 81 28 CMPA #"("
E91F 26 EE BNE FACT05
E921 30 01 LEAX 1,X
E923 7E E8 45 JMP EXPR
E926 ;******************************
E926 ;******************************
E926 6D 00 ABSX: TST 0,X
E928 2A 08 BPL NEG05
E92A 60 00 NEGX: NEG 0,X
E92C 60 01 NEG 1,X
E92E 24 02 BCC NEG05
E930 6A 00 DEC 0,X
E932 39 NEG05: RTS
E933 ;******************************
E933 ;******************************
E933 34 02 TSTEOL: PSHS A
E935 BD E6 5D JSR SKIPSP
E938 81 04 CMPA #EOL
E93A 27 03 BEQ TEOL03
E93C 7E E5 56 JMP ERRORS
E93F 30 01 TEOL03: LEAX 1,X
E941 35 02 PULS A
E943 39 RTS
E944 ;******************************
E944 ;******************************
E944 BD E6 8D LET: JSR TSTVAR
E947 24 03 BCC LET03
E949 7E E5 56 JMP ERRORS
E94C 34 06 LET03: PSHS D
E94E BD E6 5D JSR SKIPSP
E951 81 3D CMPA #"="
E953 27 03 BEQ LET05
E955 7E E5 56 JMP ERRORS
E958 30 01 LET05: LEAX 1,X
E95A BD E8 45 JSR EXPR
E95D 8D D4 BSR TSTEOL
E95F 9F 0E STX CURSOR
E961 35 10 PULS X
E963 ED 00 STD 0,X
E965 9E 0E LDX CURSOR
E967 7E E5 FE JMP ENDS02
E96A ;******************************
E96A ;******************************
E96A BD E7 EE IF: JSR RELEXP
E96D 5D TSTB
E96E 27 03 BEQ IF03
E970 7E E6 0F JMP MSLINE
E973 7E E5 F5 IF03: JMP REM
E976 ;******************************
E976 ;******************************
E976 BD E8 45 GOTO: JSR EXPR
E979 8D B8 BSR TSTEOL
E97B BD E7 C4 JSR FLINE
E97E 25 0F BCS GOSB04
E980 7E E6 0B JMP NXTLIN
E983 ;******************************
E983 ;******************************
E983 BD E8 45 GOSUB: JSR EXPR
E986 8D AB BSR TSTEOL
E988 9F 0E STX CURSOR
E98A BD E7 C4 JSR FLINE
E98D 24 03 BCC GOSB03
E98F 7E E5 5F GOSB04: JMP ERRORR
E992 BD E7 64 GOSB03: JSR TSTSTK
E995 24 03 BCC GOSB05
E997 7E E5 4E JMP ERRORF
E99A DC 0E GOSB05: LDD CURSOR
E99C 34 06 PSHS D
E99E DC 12 LDD LINENB
E9A0 34 06 PSHS D
E9A2 BD E6 0B JSR NXTLIN
E9A5 35 06 PULS D
E9A7 DD 12 STD LINENB
E9A9 35 10 PULS X
E9AB 7E E5 FE JMP ENDS02
E9AE ;******************************
E9AE ;******************************
E9AE RETURN: EQU TSTEOL
E9AE ;******************************
E9AE ;******************************
E9AE BD E6 5D PRINT: JSR SKIPSP
E9B1 81 2C PR01: CMPA #","
E9B3 27 36 BEQ PR05
E9B5 81 3B CMPA #";"
E9B7 27 3D BEQ PR07
E9B9 81 04 CMPA #EOL
E9BB 27 25 BEQ PR04
E9BD 81 22 CMPA #$22
E9BF 26 06 BNE PR02
E9C1 30 01 LEAX 1,X
E9C3 8D 42 BSR PRNTQS
E9C5 20 09 BRA PR03
E9C7 BD E8 45 PR02: JSR EXPR
E9CA 34 10 PSHS X
E9CC 8D 47 BSR PRNTN
E9CE 35 10 PULS X
E9D0 BD E6 5D PR03: JSR SKIPSP
E9D3 81 2C CMPA #","
E9D5 27 14 BEQ PR05
E9D7 81 3B CMPA #";"
E9D9 27 1B BEQ PR07
E9DB 81 04 CMPA #EOL
E9DD 27 03 BEQ PR04
E9DF 7E E5 56 JMP ERRORS
E9E2 34 10 PR04: PSHS X
E9E4 BD E5 3F JSR CRLF
E9E7 35 10 PULS X
E9E9 20 14 BRA PR08
E9EB C6 07 PR05: LDB #$7
E9ED 86 20 PR06: LDA #SPACE
E9EF BD EB AC JSR PUTCHR
E9F2 D5 18 BITB ZONE
E9F4 26 F7 BNE PR06
E9F6 30 01 PR07: LEAX 1,X
E9F8 BD E6 5D JSR SKIPSP
E9FB 81 04 CMPA #EOL
E9FD 26 B2 BNE PR01
E9FF 30 01 PR08: LEAX 1,X
EA01 7E E5 FE JMP ENDS02
EA04 ;*
EA04 ;*
EA04 BD EB AC PRQ01: JSR PUTCHR
EA07 A6 80 PRNTQS: LDA ,X+
EA09 81 04 CMPA #EOL
EA0B 26 03 BNE PRQ03
EA0D 7E E5 56 JMP ERRORS
EA10 81 22 PRQ03: CMPA #$22
EA12 26 F0 BNE PRQ01
EA14 39 RTS
EA15 ;*
EA15 4D PRNTN: TSTA
EA16 2A 0D BPL PRN03
EA18 40 NEGA
EA19 50 NEGB
EA1A 82 00 SBCA #0
EA1C 34 02 PSHS A
EA1E 86 2D LDA #"-"
EA20 BD EB AC JSR PUTCHR
EA23 35 02 PULS A
EA25 8E EA 54 PRN03: LDX #PRNPT-2
EA28 30 02 PRN05: LEAX 2,X
EA2A 10 A3 00 CMPD 0,X
EA2D 24 05 BCC PRN07
EA2F 8C EA 5E CMPX #PRNPTO
EA32 26 F4 BNE PRN05
EA34 0F 16 PRN07: CLR CHAR
EA36 10 A3 00 PRN09: CMPD 0,X
EA39 25 06 BCS PRN11
EA3B A3 00 SUBD 0,X
EA3D 0C 16 INC CHAR
EA3F 20 F5 BRA PRN09
EA41 34 02 PRN11: PSHS A
EA43 86 30 LDA #"0"
EA45 9B 16 ADDA CHAR
EA47 BD EB AC JSR PUTCHR
EA4A 35 02 PULS A
EA4C 8C EA 5E CMPX #PRNPTO
EA4F 27 04 BEQ PRN13
EA51 30 02 LEAX 2,X
EA53 20 DF BRA PRN07
EA55 39 PRN13: RTS
EA56 27 10 PRNPT: FDB 10000
EA58 03 E8 FDB 1000
EA5A 00 64 FDB 100
EA5C 00 0A FDB 10
EA5E 00 01 PRNPTO: FDB 1
EA60 ;*
EA60 8E EA 58 PRNT4: LDX #PRNPT+2
EA63 20 CF BRA PRN07
EA65 ;******************************
EA65 ;******************************
EA65 BD E6 8D INPUT: JSR TSTVAR
EA68 25 3C BCS IN11
EA6A 34 06 PSHS D
EA6C 9F 0E STX CURSOR
EA6E 86 3F IN03: LDA #"?"
EA70 BD EB AC JSR PUTCHR
EA73 BD E5 92 JSR GETLIN
EA76 BD E6 5D IN05: JSR SKIPSP
EA79 81 04 CMPA #EOL
EA7B 27 F1 BEQ IN03
EA7D BD E6 D8 JSR TSTSNB
EA80 24 0B BCC IN07
EA82 8E EA BA LDX #RMESS
EA85 BD E5 38 JSR PUTSTR
EA88 BD E5 3F JSR CRLF
EA8B 20 E1 BRA IN03
EA8D 9F 14 IN07: STX SCRTCH
EA8F 35 10 PULS X
EA91 ED 00 STD 0,X
EA93 9E 0E LDX CURSOR
EA95 BD E6 5D JSR SKIPSP
EA98 81 2C CMPA #","
EA9A 27 03 BEQ IN09
EA9C 7E E5 FB JMP ENDSMT
EA9F 30 01 IN09: LEAX 1,X
EAA1 BD E6 8D JSR TSTVAR
EAA4 24 03 BCC IN13
EAA6 7E E5 56 IN11: JMP ERRORS
EAA9 34 06 IN13: PSHS D
EAAB 34 10 PSHS X
EAAD 9E 14 LDX SCRTCH
EAAF BD E6 5D JSR SKIPSP
EAB2 81 2C CMPA #","
EAB4 26 C0 BNE IN05
EAB6 30 01 LEAX 1,X
EAB8 20 BC BRA IN05
EABA 52 45 2D 45 4E 54 45 52 RMESS: DB "RE-ENTER"
EAC2 04 FCB EOL
EAC3 ;******************************
EAC3 ;******************************
EAC3 9E 0C RUN: LDX STKTOP
EAC5 86 34 LDA #52
EAC7 6F 80 RUN01: CLR ,X+
EAC9 4A DECA
EACA 26 FB BNE RUN01
EACC 9E 06 LDX USRBAS
EACE 7E E6 04 JMP REM05
EAD1 ;******************************
EAD1 ;******************************
EAD1 BD E6 EC LIST: JSR TSTNBR
EAD4 24 08 BCC LIST03
EAD6 4F CLRA
EAD7 5F CLRB
EAD8 DD 0E STD CURSOR
EADA 86 7F LDA #$7F
EADC 20 17 BRA LIST07
EADE DD 0E LIST03: STD CURSOR
EAE0 BD E6 5D JSR SKIPSP
EAE3 81 2C CMPA #","
EAE5 27 04 BEQ LIST05
EAE7 96 0E LDA CURSOR
EAE9 20 0A BRA LIST07
EAEB 30 01 LIST05: LEAX 1,X
EAED BD E6 EC JSR TSTNBR
EAF0 24 03 BCC LIST07
EAF2 7E E5 56 JMP ERRORS
EAF5 BD E9 33 LIST07: JSR TSTEOL
EAF8 34 06 PSHS D
EAFA DC 0E LDD CURSOR
EAFC 9F 0E STX CURSOR
EAFE BD E7 C4 JSR FLINE
EB01 9C 08 LIST09: CMPX USRTOP
EB03 27 28 BEQ LIST10
EB05 35 06 PULS D
EB07 10 A3 00 CMPD 0,X
EB0A 25 28 BCS LIST11
EB0C 34 06 PSHS D
EB0E EC 81 LDD ,X++
EB10 34 10 PSHS X
EB12 BD EA 60 JSR PRNT4
EB15 35 10 PULS X
EB17 86 20 LDA #SPACE
EB19 BD EB AC JSR PUTCHR
EB1C BD E5 38 JSR PUTSTR
EB1F 30 01 LEAX 1,X
EB21 34 10 PSHS X
EB23 BD E5 3F JSR CRLF
EB26 35 10 PULS X
EB28 BD EB 9E JSR TSTBRK
EB2B 20 D4 BRA LIST09
EB2D 32 62 LIST10: LEAS 2,S
EB2F 86 03 LDA #ETX
EB31 BD EB AC JSR PUTCHR
EB34 9E 0E LIST11: LDX CURSOR
EB36 7E E5 FE JMP ENDS02
EB39 ;******************************
EB39 ;******************************
EB39 4C 45 54 VERBT: DB "LET"
EB3C 04 FCB EOL
EB3D E9 44 FDB LET
EB3F 49 46 DB "IF"
EB41 04 FCB EOL
EB42 E9 6A FDB IF
EB44 47 4F 54 4F DB "GOTO"
EB48 04 FCB EOL
EB49 E9 76 FDB GOTO
EB4B 47 4F 53 55 42 DB "GOSUB"
EB50 04 FCB EOL
EB51 E9 83 FDB GOSUB
EB53 52 45 54 55 52 4E DB "RETURN"
EB59 04 FCB EOL
EB5A E9 33 FDB RETURN
EB5C 50 4F 4B 45 DB "POKE"
EB60 04 FCB EOL
EB61 E7 7E FDB POKE
EB63 50 52 49 4E 54 DB "PRINT"
EB68 04 FCB EOL
EB69 E9 AE FDB PRINT
EB6B 49 4E 50 55 54 DB "INPUT"
EB70 04 FCB EOL
EB71 EA 65 FDB INPUT
EB73 52 45 4D DB "REM"
EB76 04 FCB EOL
EB77 E5 F5 FDB REM
EB79 53 54 4F 50 DB "STOP"
EB7D 04 FCB EOL
EB7E E5 6F FDB END
EB80 45 4E 44 DB "END"
EB83 04 FCB EOL
EB84 E5 6F FDB END
EB86 52 55 4E DB "RUN"
EB89 04 FCB EOL
EB8A EA C3 FDB RUN
EB8C 4C 49 53 54 DB "LIST"
EB90 04 FCB EOL
EB91 EA D1 FDB LIST
EB93 4E 45 57 DB "NEW"
EB96 04 FCB EOL
EB97 E4 1F FDB CLEAR
EB99 3F DB "?"
EB9A 04 FCB EOL
EB9B E9 AE FDB PRINT
EB9D 04 FCB EOL
EB9E ;******************************
EB9E ;******************************
EB9E 8D 2A TSTBRK: BSR BRKEEE
EBA0 27 09 BEQ GETC05
EBA2 8D 0D GETCHR: BSR INEEE
EBA4 81 03 CMPA #ETX
EBA6 26 03 BNE GETC05
EBA8 7E E5 67 JMP BREAK
EBAB 39 GETC05: RTS
EBAC 0C 18 PUTCHR: INC ZONE
EBAE 7E EB BB JMP OUTEEE
EBB1 ;******************************
EBB1 ;******************************
EBB1 8D 17 INEEE: BSR BRKEEE
EBB3 27 FC BEQ INEEE
EBB5 B6 83 FF LDA RECEV
EBB8 84 7F ANDA #$7F
EBBA 39 RTS
EBBB 34 02 OUTEEE: PSHS A
EBBD B6 83 FE OUT01: LDA TRCS
EBC0 85 02 BITA #TDRE
EBC2 27 F9 BEQ OUT01
EBC4 35 02 PULS A
EBC6 B7 83 FF STA TRANS
EBC9 39 RTS
EBCA 34 02 BRKEEE: PSHS A
EBCC B6 83 FE BRK03: LDA TRCS
EBCF 85 20 BITA #ORFE
EBD1 27 05 BEQ BRK05
EBD3 B6 83 FF LDA RECEV
EBD6 20 F4 BRA BRK03
EBD8 85 01 BRK05: BITA #RDRF
EBDA 35 02 PULS A
EBDC 39 RTS
EBDD ;*
EBDD 86 03 LDA #CNTL1
EBDF B7 83 FE STA RMCR
EBE2 86 15 LDA #CNTL2
EBE4 B7 83 FE STA TRCS
EBE7 INTEEE: EQU $
EBE7 39 RTS
EBE8 ;******************************
EBE8 ;******************************
EBE8 .ENDBLOCK
EOL: 0004 DEFINED AT LINE 17
> USED AT LINE 148
> USED AT LINE 253
> USED AT LINE 256
> USED AT LINE 259
> USED AT LINE 262
> USED AT LINE 265
> USED AT LINE 581
> USED AT LINE 584
> USED AT LINE 587
> USED AT LINE 589
> USED AT LINE 987
> USED AT LINE 1048
> USED AT LINE 1051
> USED AT LINE 1054
> USED AT LINE 1057
> USED AT LINE 1060
> USED AT LINE 1063
> USED AT LINE 1066
> USED AT LINE 1069
> USED AT LINE 1072
> USED AT LINE 1075
> USED AT LINE 1078
> USED AT LINE 1081
> USED AT LINE 1084
> USED AT LINE 1087
> USED AT LINE 1090
> USED AT LINE 1092
ETX: 0003 DEFINED AT LINE 18
SPACE: 0020 DEFINED AT LINE 19
CR: 000D DEFINED AT LINE 20
> USED AT LINE 248
LF: 000A DEFINED AT LINE 21
> USED AT LINE 248
BS: 0008 DEFINED AT LINE 22
CAN: 0018 DEFINED AT LINE 23
BELL: 0007 DEFINED AT LINE 24
FILL: 0000 DEFINED AT LINE 25
DEL: 007F DEFINED AT LINE 26
BSIZE: 0049 DEFINED AT LINE 27
> USED AT LINE 47
STKCUS: 0030 DEFINED AT LINE 28
BACIA: 83FE DEFINED AT LINE 30
> USED AT LINE 31
> USED AT LINE 32
> USED AT LINE 33
> USED AT LINE 34
RMCR: 83FE DEFINED AT LINE 31
> USED AT LINE 1129
TRCS: 83FE DEFINED AT LINE 32
> USED AT LINE 1112
> USED AT LINE 1119
> USED AT LINE 1131
RECEV: 83FF DEFINED AT LINE 33
> USED AT LINE 1108
> USED AT LINE 1122
TRANS: 83FF DEFINED AT LINE 34
> USED AT LINE 1116
CNTL1: 0003 DEFINED AT LINE 35
CNTL2: 0015 DEFINED AT LINE 36
RDRF: 0001 DEFINED AT LINE 37
ORFE: 0020 DEFINED AT LINE 38
TDRE: 0002 DEFINED AT LINE 39
LORAM: 0080 DEFINED AT LINE 42
BUFFER: 0200 DEFINED AT LINE 43
> USED AT LINE 47
> USED AT LINE 48
RAMSIZ: 2000 DEFINED AT LINE 44
> USED AT LINE 48
ROMADR: F000 DEFINED AT LINE 45
RAMBEG: 0249 DEFINED AT LINE 47
RAMEND: 2200 DEFINED AT LINE 48
RAMPAT: AA0F DEFINED AT LINE 50
ROMPAT: F055 DEFINED AT LINE 51
USRBAS: 0006 DEFINED AT LINE 56
> USED AT LINE 106
> USED AT LINE 115
> USED AT LINE 160
> USED AT LINE 592
> USED AT LINE 995
USRTOP: 0008 DEFINED AT LINE 57
> USED AT LINE 107
> USED AT LINE 133
> USED AT LINE 156
> USED AT LINE 169
> USED AT LINE 179
> USED AT LINE 201
> USED AT LINE 203
> USED AT LINE 204
> USED AT LINE 208
> USED AT LINE 211
> USED AT LINE 334
> USED AT LINE 593
> USED AT LINE 1021
STKLIM: 000A DEFINED AT LINE 58
> USED AT LINE 108
> USED AT LINE 134
> USED AT LINE 180
> USED AT LINE 205
> USED AT LINE 209
> USED AT LINE 541
STKTOP: 000C DEFINED AT LINE 59
> USED AT LINE 99
> USED AT LINE 103
> USED AT LINE 112
> USED AT LINE 427
> USED AT LINE 990
CURSOR: 000E DEFINED AT LINE 60
> USED AT LINE 116
> USED AT LINE 155
> USED AT LINE 162
> USED AT LINE 214
> USED AT LINE 222
> USED AT LINE 348
> USED AT LINE 353
> USED AT LINE 357
> USED AT LINE 450
> USED AT LINE 452
> USED AT LINE 572
> USED AT LINE 815
> USED AT LINE 818
> USED AT LINE 838
> USED AT LINE 845
> USED AT LINE 953
> USED AT LINE 969
> USED AT LINE 1003
> USED AT LINE 1006
> USED AT LINE 1010
> USED AT LINE 1018
> USED AT LINE 1019
> USED AT LINE 1043
SAVESP: 0010 DEFINED AT LINE 61
> USED AT LINE 164
> USED AT LINE 173
> USED AT LINE 175
> USED AT LINE 178
> USED AT LINE 212
> USED AT LINE 218
> USED AT LINE 538
> USED AT LINE 539
LINENB: 0012 DEFINED AT LINE 62
> USED AT LINE 118
> USED AT LINE 269
> USED AT LINE 331
> USED AT LINE 332
> USED AT LINE 338
> USED AT LINE 847
> USED AT LINE 851
SCRTCH: 0014 DEFINED AT LINE 63
> USED AT LINE 153
> USED AT LINE 181
> USED AT LINE 225
> USED AT LINE 227
> USED AT LINE 358
> USED AT LINE 359
> USED AT LINE 363
> USED AT LINE 370
> USED AT LINE 966
> USED AT LINE 980
CHAR: 0016 DEFINED AT LINE 64
> USED AT LINE 172
> USED AT LINE 176
> USED AT LINE 202
> USED AT LINE 213
> USED AT LINE 217
> USED AT LINE 224
> USED AT LINE 228
> USED AT LINE 230
> USED AT LINE 356
> USED AT LINE 364
> USED AT LINE 366
> USED AT LINE 373
> USED AT LINE 924
> USED AT LINE 928
> USED AT LINE 932
ZONE: 0018 DEFINED AT LINE 65
> USED AT LINE 246
> USED AT LINE 890
> USED AT LINE 1102
MODE: 0019 DEFINED AT LINE 66
> USED AT LINE 113
> USED AT LINE 119
> USED AT LINE 301
> USED AT LINE 322
RESRVD: 001A DEFINED AT LINE 67
LOEND: 001B DEFINED AT LINE 68
RESET: E400 DEFINED AT LINE 94
> USED AT LINE 75
> USED AT LINE 77
> USED AT LINE 79
> USED AT LINE 81
> USED AT LINE 83
> USED AT LINE 85
> USED AT LINE 87
> USED AT LINE 89
BASIC: E400 DEFINED AT LINE 97
WARMS: E40D DEFINED AT LINE 99
SETUP: E415 DEFINED AT LINE 102
> USED AT LINE 97
SET03: E419 DEFINED AT LINE 103
CLEAR: E41F DEFINED AT LINE 105
> USED AT LINE 1088
CLR02: E426 DEFINED AT LINE 108
WMS05: E428 DEFINED AT LINE 109
> USED AT LINE 101
CMDB: E431 DEFINED AT LINE 112
> USED AT LINE 131
> USED AT LINE 276
CMDE: E43D DEFINED AT LINE 117
> USED AT LINE 129
> USED AT LINE 145
CMD01: E44B DEFINED AT LINE 123
> USED AT LINE 120
CMD02: E461 DEFINED AT LINE 132
> USED AT LINE 125
CMD03: E46E DEFINED AT LINE 138
> USED AT LINE 136
CMD04: E473 DEFINED AT LINE 140
CMD05: E480 DEFINED AT LINE 146
> USED AT LINE 126
> USED AT LINE 139
> USED AT LINE 143
VSTR: E483 DEFINED AT LINE 147
EDITOR: E48E DEFINED AT LINE 151
> USED AT LINE 144
ED00: E4A2 DEFINED AT LINE 160
> USED AT LINE 157
ED01: E4A4 DEFINED AT LINE 161
> USED AT LINE 159
ED02: E4AF DEFINED AT LINE 166
> USED AT LINE 168
ED03: E4B5 DEFINED AT LINE 169
> USED AT LINE 177
ED35: E4C7 DEFINED AT LINE 178
> USED AT LINE 170
ED04: E4CD DEFINED AT LINE 181
> USED AT LINE 163
ED05: E4D1 DEFINED AT LINE 183
> USED AT LINE 186
ED55: E4DE DEFINED AT LINE 191
> USED AT LINE 188
ED06: E4E2 DEFINED AT LINE 193
> USED AT LINE 197
ED07: E506 DEFINED AT LINE 211
> USED AT LINE 207
ED08: E508 DEFINED AT LINE 212
> USED AT LINE 220
ED09: E51A DEFINED AT LINE 221
> USED AT LINE 215
ED10: E522 DEFINED AT LINE 225
> USED AT LINE 232
PUTS01: E533 DEFINED AT LINE 236
> USED AT LINE 240
PUTSTR: E538 DEFINED AT LINE 238
> USED AT LINE 111
> USED AT LINE 245
> USED AT LINE 274
> USED AT LINE 963
> USED AT LINE 1033
CRLF: E53F DEFINED AT LINE 244
> USED AT LINE 109
> USED AT LINE 114
> USED AT LINE 266
> USED AT LINE 275
> USED AT LINE 279
> USED AT LINE 306
> USED AT LINE 884
> USED AT LINE 964
> USED AT LINE 1036
CRLFST: E547 DEFINED AT LINE 248
ERRORF: E54E DEFINED AT LINE 251
> USED AT LINE 210
> USED AT LINE 777
> USED AT LINE 844
ERRORS: E556 DEFINED AT LINE 254
> USED AT LINE 146
> USED AT LINE 440
> USED AT LINE 560
> USED AT LINE 772
> USED AT LINE 798
> USED AT LINE 806
> USED AT LINE 811
> USED AT LINE 882
> USED AT LINE 904
> USED AT LINE 977
> USED AT LINE 1015
ERRORR: E55F DEFINED AT LINE 257
> USED AT LINE 137
> USED AT LINE 336
> USED AT LINE 841
BREAK: E567 DEFINED AT LINE 260
> USED AT LINE 1100
END: E56F DEFINED AT LINE 263
> USED AT LINE 1076
> USED AT LINE 1079
ER01: E576 DEFINED AT LINE 266
> USED AT LINE 251
> USED AT LINE 254
> USED AT LINE 257
> USED AT LINE 260
> USED AT LINE 263
GL00: E590 DEFINED AT LINE 279
> USED AT LINE 296
GETLIN: E592 DEFINED AT LINE 280
> USED AT LINE 123
> USED AT LINE 956
GL03: E595 DEFINED AT LINE 281
> USED AT LINE 285
> USED AT LINE 292
> USED AT LINE 300
> USED AT LINE 313
GL04: E5A9 DEFINED AT LINE 290
> USED AT LINE 287
GL02: E5AB DEFINED AT LINE 291
> USED AT LINE 289
> USED AT LINE 320
> USED AT LINE 323
GL05: E5B0 DEFINED AT LINE 293
> USED AT LINE 283
GL06: E5C9 DEFINED AT LINE 305
> USED AT LINE 302
GL08: E5D0 DEFINED AT LINE 308
> USED AT LINE 304
GL07: E5D8 DEFINED AT LINE 312
> USED AT LINE 294
GL09: E5ED DEFINED AT LINE 321
> USED AT LINE 298
REM00: E5F3 DEFINED AT LINE 326
> USED AT LINE 329
REM: E5F5 DEFINED AT LINE 327
> USED AT LINE 826
> USED AT LINE 1073
ENDSMT: E5FB DEFINED AT LINE 330
> USED AT LINE 973
ENDS02: E5FE DEFINED AT LINE 331
> USED AT LINE 568
> USED AT LINE 819
> USED AT LINE 853
> USED AT LINE 897
> USED AT LINE 1044
REM05: E604 DEFINED AT LINE 334
> USED AT LINE 996
NXTLIN: E60B DEFINED AT LINE 337
> USED AT LINE 335
> USED AT LINE 833
> USED AT LINE 849
MSLINE: E60F DEFINED AT LINE 339
> USED AT LINE 130
> USED AT LINE 825
REM09: E618 DEFINED AT LINE 343
> USED AT LINE 333
IMPLET: E619 DEFINED AT LINE 344
> USED AT LINE 341
IFAN: E61C DEFINED AT LINE 347
> USED AT LINE 340
FAN00: E623 DEFINED AT LINE 350
> USED AT LINE 378
> USED AT LINE 574
FAN04: E62E DEFINED AT LINE 356
> USED AT LINE 352
FAN05: E634 DEFINED AT LINE 359
> USED AT LINE 368
FAN07: E64F DEFINED AT LINE 373
> USED AT LINE 361
FAN08: E651 DEFINED AT LINE 374
> USED AT LINE 376
NXTNSP: E65B DEFINED AT LINE 381
> USED AT LINE 384
SKIPSP: E65D DEFINED AT LINE 382
> USED AT LINE 127
> USED AT LINE 152
> USED AT LINE 327
> USED AT LINE 347
> USED AT LINE 416
> USED AT LINE 434
> USED AT LINE 444
> USED AT LINE 457
> USED AT LINE 470
> USED AT LINE 557
> USED AT LINE 571
> USED AT LINE 619
> USED AT LINE 626
> USED AT LINE 636
> USED AT LINE 667
> USED AT LINE 676
> USED AT LINE 693
> USED AT LINE 766
> USED AT LINE 778
> USED AT LINE 795
> USED AT LINE 808
> USED AT LINE 859
> USED AT LINE 875
> USED AT LINE 893
> USED AT LINE 957
> USED AT LINE 970
> USED AT LINE 981
> USED AT LINE 1007
TSTHEX: E664 DEFINED AT LINE 388
> USED AT LINE 480
TSTLTR: E675 DEFINED AT LINE 399
> USED AT LINE 417
> USED AT LINE 421
TST03: E67D DEFINED AT LINE 403
> USED AT LINE 391
> USED AT LINE 393
> USED AT LINE 400
> USED AT LINE 408
> USED AT LINE 410
> USED AT LINE 422
TSTDIG: E680 DEFINED AT LINE 407
> USED AT LINE 388
> USED AT LINE 471
> USED AT LINE 504
TST05: E68A DEFINED AT LINE 412
> USED AT LINE 389
> USED AT LINE 402
TSTVAR: E68D DEFINED AT LINE 416
> USED AT LINE 753
> USED AT LINE 804
> USED AT LINE 950
> USED AT LINE 975
TSTV02: E6A3 DEFINED AT LINE 428
TSTV03: E6A5 DEFINED AT LINE 429
> USED AT LINE 418
USER: E6A6 DEFINED AT LINE 432
> USED AT LINE 582
USER02: E6B8 DEFINED AT LINE 440
> USED AT LINE 447
USER03: E6BB DEFINED AT LINE 441
> USED AT LINE 436
USER05: E6CD DEFINED AT LINE 449
> USED AT LINE 439
TSTSNB: E6D8 DEFINED AT LINE 457
> USED AT LINE 960
TSN02: E6EB DEFINED AT LINE 467
> USED AT LINE 462
TSTNBR: E6EC DEFINED AT LINE 470
> USED AT LINE 124
> USED AT LINE 459
> USED AT LINE 461
> USED AT LINE 760
> USED AT LINE 999
> USED AT LINE 1013
TSTN20: E6FA DEFINED AT LINE 476
TSTN23: E700 DEFINED AT LINE 479
> USED AT LINE 499
TSTN02: E723 DEFINED AT LINE 500
> USED AT LINE 472
TSTN03: E729 DEFINED AT LINE 503
> USED AT LINE 527
TSTN07: E756 DEFINED AT LINE 528
> USED AT LINE 481
> USED AT LINE 505
TSTN09: E75A DEFINED AT LINE 530
> USED AT LINE 475
TSTN11: E75D DEFINED AT LINE 532
> USED AT LINE 487
> USED AT LINE 512
> USED AT LINE 515
> USED AT LINE 517
> USED AT LINE 520
> USED AT LINE 523
TSTSTK: E764 DEFINED AT LINE 538
> USED AT LINE 206
> USED AT LINE 588
> USED AT LINE 775
> USED AT LINE 842
PEEK: E76F DEFINED AT LINE 545
> USED AT LINE 585
POKE: E77E DEFINED AT LINE 555
> USED AT LINE 1064
POKE05: E78D DEFINED AT LINE 561
> USED AT LINE 559
TSTFUN: E7A0 DEFINED AT LINE 571
> USED AT LINE 762
TSTF05: E7AF DEFINED AT LINE 577
> USED AT LINE 575
FUNT: E7B0 DEFINED AT LINE 580
FLINE: E7C4 DEFINED AT LINE 592
> USED AT LINE 831
> USED AT LINE 839
> USED AT LINE 1020
FNDLIN: E7C6 DEFINED AT LINE 593
> USED AT LINE 161
> USED AT LINE 613
FND03: E7CD DEFINED AT LINE 597
> USED AT LINE 594
FND05: E7D5 DEFINED AT LINE 601
> USED AT LINE 598
FND07: E7DC DEFINED AT LINE 605
> USED AT LINE 601
FND09: E7E2 DEFINED AT LINE 608
> USED AT LINE 610
RELEXP: E7EE DEFINED AT LINE 616
> USED AT LINE 822
REL03: E80E DEFINED AT LINE 632
> USED AT LINE 623
REL05: E819 DEFINED AT LINE 637
> USED AT LINE 628
REL06: E81D DEFINED AT LINE 639
> USED AT LINE 621
REL07: E821 DEFINED AT LINE 641
> USED AT LINE 631
> USED AT LINE 638
REL08: E839 DEFINED AT LINE 655
> USED AT LINE 653
REL09: E83F DEFINED AT LINE 659
> USED AT LINE 657
EXPR: E845 DEFINED AT LINE 665
> USED AT LINE 442
> USED AT LINE 562
> USED AT LINE 616
> USED AT LINE 642
> USED AT LINE 782
> USED AT LINE 813
> USED AT LINE 829
> USED AT LINE 836
> USED AT LINE 871
EXPR02: E854 DEFINED AT LINE 672
> USED AT LINE 678
EXPR03: E856 DEFINED AT LINE 673
> USED AT LINE 671
EXPR04: E858 DEFINED AT LINE 674
> USED AT LINE 686
EXPR05: E867 DEFINED AT LINE 681
> USED AT LINE 669
EXPR06: E871 DEFINED AT LINE 687
> USED AT LINE 633
> USED AT LINE 680
TERM: E874 DEFINED AT LINE 691
> USED AT LINE 673
> USED AT LINE 682
TERM03: E879 DEFINED AT LINE 693
> USED AT LINE 733
> USED AT LINE 750
TERM05: E887 DEFINED AT LINE 700
> USED AT LINE 697
DIV05: E8A3 DEFINED AT LINE 714
> USED AT LINE 725
DIV07: E8AD DEFINED AT LINE 719
> USED AT LINE 715
DIV09: E8AF DEFINED AT LINE 720
> USED AT LINE 718
TERM06: E8C4 DEFINED AT LINE 732
> USED AT LINE 729
TERM07: E8C8 DEFINED AT LINE 734
> USED AT LINE 695
MULT: E8CC DEFINED AT LINE 736
FACT: E8E7 DEFINED AT LINE 753
> USED AT LINE 691
> USED AT LINE 701
> USED AT LINE 735
FACT02: E8F4 DEFINED AT LINE 759
> USED AT LINE 761
> USED AT LINE 763
FACT03: E8F5 DEFINED AT LINE 760
> USED AT LINE 754
PAREXP: E8FF DEFINED AT LINE 764
> USED AT LINE 545
> USED AT LINE 555
FACT05: E90F DEFINED AT LINE 772
> USED AT LINE 769
> USED AT LINE 780
ARGONE: E912 DEFINED AT LINE 775
> USED AT LINE 432
> USED AT LINE 764
FACT04: E91A DEFINED AT LINE 778
> USED AT LINE 776
ABSX: E926 DEFINED AT LINE 785
> USED AT LINE 706
> USED AT LINE 708
NEGX: E92A DEFINED AT LINE 787
> USED AT LINE 731
NEG05: E932 DEFINED AT LINE 791
> USED AT LINE 786
> USED AT LINE 789
TSTEOL: E933 DEFINED AT LINE 794
> USED AT LINE 330
> USED AT LINE 563
> USED AT LINE 814
> USED AT LINE 830
> USED AT LINE 837
> USED AT LINE 856
> USED AT LINE 1016
TEOL03: E93F DEFINED AT LINE 799
> USED AT LINE 797
LET: E944 DEFINED AT LINE 804
> USED AT LINE 344
> USED AT LINE 1049
LET03: E94C DEFINED AT LINE 807
> USED AT LINE 805
LET05: E958 DEFINED AT LINE 812
> USED AT LINE 810
IF: E96A DEFINED AT LINE 822
> USED AT LINE 1052
IF03: E973 DEFINED AT LINE 826
> USED AT LINE 824
GOTO: E976 DEFINED AT LINE 829
> USED AT LINE 1055
GOSUB: E983 DEFINED AT LINE 836
> USED AT LINE 1058
GOSB04: E98F DEFINED AT LINE 841
> USED AT LINE 832
GOSB03: E992 DEFINED AT LINE 842
> USED AT LINE 840
GOSB05: E99A DEFINED AT LINE 845
> USED AT LINE 843
RETURN: E933 DEFINED AT LINE 856
> USED AT LINE 1061
PRINT: E9AE DEFINED AT LINE 859
> USED AT LINE 1067
> USED AT LINE 1091
PR01: E9B1 DEFINED AT LINE 860
> USED AT LINE 895
PR02: E9C7 DEFINED AT LINE 871
> USED AT LINE 867
PR03: E9D0 DEFINED AT LINE 875
> USED AT LINE 870
PR04: E9E2 DEFINED AT LINE 883
> USED AT LINE 865
> USED AT LINE 881
PR05: E9EB DEFINED AT LINE 887
> USED AT LINE 861
> USED AT LINE 877
PR06: E9ED DEFINED AT LINE 888
> USED AT LINE 891
PR07: E9F6 DEFINED AT LINE 892
> USED AT LINE 863
> USED AT LINE 879
PR08: E9FF DEFINED AT LINE 896
> USED AT LINE 886
PRQ01: EA04 DEFINED AT LINE 900
> USED AT LINE 906
PRNTQS: EA07 DEFINED AT LINE 901
> USED AT LINE 869
PRQ03: EA10 DEFINED AT LINE 905
> USED AT LINE 903
PRNTN: EA15 DEFINED AT LINE 909
> USED AT LINE 873
PRN03: EA25 DEFINED AT LINE 918
> USED AT LINE 910
PRN05: EA28 DEFINED AT LINE 919
> USED AT LINE 923
PRN07: EA34 DEFINED AT LINE 924
> USED AT LINE 921
> USED AT LINE 938
> USED AT LINE 947
PRN09: EA36 DEFINED AT LINE 925
> USED AT LINE 929
PRN11: EA41 DEFINED AT LINE 930
> USED AT LINE 926
PRN13: EA55 DEFINED AT LINE 939
> USED AT LINE 936
PRNPT: EA56 DEFINED AT LINE 940
PRNPTO: EA5E DEFINED AT LINE 944
PRNT4: EA60 DEFINED AT LINE 946
> USED AT LINE 270
> USED AT LINE 1029
INPUT: EA65 DEFINED AT LINE 950
> USED AT LINE 1070
IN03: EA6E DEFINED AT LINE 954
> USED AT LINE 959
> USED AT LINE 965
IN05: EA76 DEFINED AT LINE 957
> USED AT LINE 983
> USED AT LINE 985
IN07: EA8D DEFINED AT LINE 966
> USED AT LINE 961
IN09: EA9F DEFINED AT LINE 974
> USED AT LINE 972
IN11: EAA6 DEFINED AT LINE 977
> USED AT LINE 951
IN13: EAA9 DEFINED AT LINE 978
> USED AT LINE 976
RMESS: EABA DEFINED AT LINE 986
RUN: EAC3 DEFINED AT LINE 990
> USED AT LINE 1082
RUN01: EAC7 DEFINED AT LINE 992
> USED AT LINE 994
LIST: EAD1 DEFINED AT LINE 999
> USED AT LINE 1085
LIST03: EADE DEFINED AT LINE 1006
> USED AT LINE 1000
LIST05: EAEB DEFINED AT LINE 1012
> USED AT LINE 1009
LIST07: EAF5 DEFINED AT LINE 1016
> USED AT LINE 1005
> USED AT LINE 1011
> USED AT LINE 1014
LIST09: EB01 DEFINED AT LINE 1021
> USED AT LINE 1039
LIST10: EB2D DEFINED AT LINE 1040
> USED AT LINE 1022
LIST11: EB34 DEFINED AT LINE 1043
> USED AT LINE 1025
VERBT: EB39 DEFINED AT LINE 1047
TSTBRK: EB9E DEFINED AT LINE 1095
> USED AT LINE 339
> USED AT LINE 1038
GETCHR: EBA2 DEFINED AT LINE 1097
> USED AT LINE 281
GETC05: EBAB DEFINED AT LINE 1101
> USED AT LINE 1096
> USED AT LINE 1099
PUTCHR: EBAC DEFINED AT LINE 1102
> USED AT LINE 122
> USED AT LINE 236
> USED AT LINE 268
> USED AT LINE 272
> USED AT LINE 291
> USED AT LINE 303
> USED AT LINE 316
> USED AT LINE 318
> USED AT LINE 889
> USED AT LINE 900
> USED AT LINE 916
> USED AT LINE 933
> USED AT LINE 955
> USED AT LINE 1032
> USED AT LINE 1042
INEEE: EBB1 DEFINED AT LINE 1106
> USED AT LINE 1097
> USED AT LINE 1107
OUTEEE: EBBB DEFINED AT LINE 1111
> USED AT LINE 1103
OUT01: EBBD DEFINED AT LINE 1112
> USED AT LINE 1114
BRKEEE: EBCA DEFINED AT LINE 1118
> USED AT LINE 1095
> USED AT LINE 1106
BRK03: EBCC DEFINED AT LINE 1119
> USED AT LINE 1123
BRK05: EBD8 DEFINED AT LINE 1124
> USED AT LINE 1121
INTEEE: EBE7 DEFINED AT LINE 1132
> USED AT LINE 100
> USED AT LINE 104
;NAM TB01V137
;* WRITTEN 20-OCT-77 BY JOHN BYRNS
;* REVISED 30-DEC-77
;* REVISED 18-JAN-78
;* REVISED 10-APR-78
;* REVISED 08-MAY-79 TO ELIMINATE USE OF SP
;* REVISED 24-JAN-80 TO USE 6801 ON CHIP RAM
;* REVISED 26-JAN-80 FOR NEW 6801 INSTRUCTIONS
;* REVISED 24-JUL-81 FOR WHISTON BOARD
;* REVISED 24-SEP-81 INCLUDE USER FUNCTION
;* REVISED 08-APR-82 MAKE STANDALONE INCLUDE HEX CONSTANTS AND MEM FUNCTION
;* REVISED 21-NOV-84 FOR 6809
;* REVISED FEB 94 ADAPTED TO SIMULATOR AND BUGFIXES BY L.C. BENSCHOP.
;*
.engine kilo
EOL: EQU $04
ETX: EQU $03
SPACE: EQU $20
CR: EQU $0D
LF: EQU $0A
BS: EQU $08
CAN: EQU $18
BELL: EQU $07
FILL: EQU $00
DEL: EQU $7F
BSIZE: EQU 73
STKCUS: EQU 48
;*
bACIA equ $83FE
RMCR EQU bACIA
TRCS EQU bACIA
RECEV EQU bACIA+1
TRANS EQU bACIA+1
CNTL1 EQU $03
CNTL2 EQU $15
RDRF EQU $01
ORFE EQU $20
TDRE EQU $02
;* EDIT THE FOLLOWING EQUATES TO REFLECT THE
;* DESIRED ROM AND RAM LAYOUT
LORAM EQU $0080 ;ADDRESS OF DIRECT PAGE SCRATCH RAM
BUFFER EQU $0200 ;ADDRESS OF MAIN RAM
RAMSIZ EQU $2000 ;SIZE OF MAIN RAM
ROMADR EQU $f000 ;ADDRESS OF TINY BASIC ROM
;*
RAMBEG EQU BUFFER+BSIZE
RAMEND EQU BUFFER+RAMSIZ
;*
RAMPAT EQU $AA0F
ROMPAT EQU $F055
;*
; ORG LORAM
.bsseg
.org 6
USRBAS: RMB 2
USRTOP: RMB 2
STKLIM: RMB 2
STKTOP: RMB 2
CURSOR: RMB 2
SAVESP: RMB 2
LINENB: RMB 2
SCRTCH: RMB 2
CHAR: RMB 2
ZONE: RMB 1
MODE: RMB 1
RESRVD: RMB 1
LOEND: EQU $
;*
.cseg
.ORG 0xfff0
;reserved
DW reset
;SWI3
DW reset
;SWI2
DW reset
;FIRQ
DW reset
;IRQ
DW reset
;SWI
DW reset
;NMI
DW reset
;RES
DW reset
org $e400
reset:
.ent $
BASIC: JMP SETUP
.cstr "MOD9BASIC"
WARMS LDS STKTOP
JSR INTEEE
BRA WMS05
SETUP LDS #RAMEND-52
SET03 STS STKTOP
JSR INTEEE
CLEAR LDD #RAMBEG
STD USRBAS
STD USRTOP
CLR02 STD STKLIM
WMS05 JSR CRLF
LDX #VSTR
JSR PUTSTR
CMDB LDS STKTOP
CLR MODE
JSR CRLF
LDX USRBAS
STX CURSOR
CMDE LDX #0000
STX LINENB
TST MODE
BNE CMD01
LDA #":"
JSR PUTCHR
CMD01 JSR GETLIN
JSR TSTNBR
BCC CMD02
BVS CMD05
JSR SKIPSP
CMPA #EOL
BEQ CMDE
JSR MSLINE
BRA CMDB
CMD02 PSHS X
LDX USRTOP
CMPX STKLIM
PULS X
BEQ CMD03
JMP ERRORR
CMD03 ADDD #0
BEQ CMD05
CMD04 PSHS D
SUBD #9999
PULS D
BHI CMD05
BSR EDITOR
BRA CMDE
CMD05 JMP ERRORS
VSTR DB "TINY V1.37"
FCB EOL
;******************************
;******************************
EDITOR PSHS D
JSR SKIPSP
STX SCRTCH
LDA 0,S
LDX CURSOR
CMPX USRTOP
BEQ ED00
CMPD 0,X
BCC ED01
ED00 LDX USRBAS
ED01 JSR FNDLIN
STX CURSOR
BCS ED04
STX SAVESP
LEAX 2,X
ED02 LDA ,X+
CMPA #EOL
BNE ED02
ED03 CMPX USRTOP
BEQ ED35
LDA ,X+
STX CHAR
LDX SAVESP
STA ,X+
STX SAVESP
LDX CHAR
BRA ED03
ED35 LDX SAVESP
STX USRTOP
STX STKLIM
ED04 LDX SCRTCH
LDB #-1
ED05 INCB
LDA ,X+
CMPA #EOL
BNE ED05
TSTB
BNE ED55
LEAS 2,S
RTS
ED55 LEAX -1,X
ADDB #4
ED06 LEAX -1,X
DECB
LDA 0,X
CMPA #SPACE
BEQ ED06
LDA #EOL
STA 1,X
CLRA
LDX USRTOP
STX CHAR
ADDD USRTOP
STD USRTOP
STD STKLIM
JSR TSTSTK
BCC ED07
STX USRTOP
STX STKLIM
JMP ERRORF
ED07 LDX USRTOP
ED08 STX SAVESP
LDX CHAR
CMPX CURSOR
BEQ ED09
LDA ,-X
STX CHAR
LDX SAVESP
STA ,-X
BRA ED08
ED09 PULS D
LDX CURSOR
STD ,X++
STX CHAR
ED10 LDX SCRTCH
LDA ,X+
STX SCRTCH
LDX CHAR
STA ,X+
STX CHAR
CMPA #EOL
BNE ED10
RTS
;******************************
;******************************
PUTS01 JSR PUTCHR
LEAX 1,X
PUTSTR LDA 0,X
CMPA #EOL
BNE PUTS01
RTS
;******************************
;******************************
CRLF LDX #CRLFST
BSR PUTSTR
CLR ZONE
RTS
CRLFST FCB CR,LF,DEL,FILL,FILL,FILL,EOL
;******************************
;******************************
ERRORF BSR ER01
DB "SORRY"
FCB EOL
ERRORS BSR ER01
DB "WHAT ?"
FCB EOL
ERRORR BSR ER01
DB "HOW ?"
FCB EOL
BREAK BSR ER01
DB "BREAK"
FCB EOL
END BSR ER01
DB "STOP"
FCB EOL
ER01 BSR CRLF
LDA #BELL
JSR PUTCHR
LDD LINENB
JSR PRNT4
LDA #SPACE
JSR PUTCHR
PULS X
BSR PUTSTR
BSR CRLF
JMP CMDB
;******************************
;******************************
GL00 BSR CRLF
GETLIN LDX #BUFFER
GL03 JSR GETCHR
CMPA #SPACE
BCS GL05
CMPA #$7F
BEQ GL03
CMPX #BUFFER+BSIZE-1
BNE GL04
LDA #BELL
BRA GL02
GL04 STA ,X+
GL02 JSR PUTCHR
BRA GL03
GL05 CMPA #BS
BEQ GL07
CMPA #CAN
BEQ GL00
CMPA #LF
BEQ GL09
CMPA #CR
BNE GL03
TST MODE
BEQ GL06
JSR PUTCHR
BRA GL08
GL06 PSHS X
JSR CRLF
PULS X
GL08 LDA #EOL
STA 0,X
LDX #BUFFER
RTS
GL07 CMPX #BUFFER
BEQ GL03
LEAX -1,X
LDA #BS
JSR PUTCHR
LDA #SPACE
JSR PUTCHR
LDA #BS
BRA GL02
GL09 ORCC #$01
ROR MODE
BRA GL02
;******************************
;******************************
REM00 LEAX 1,X
REM BSR SKIPSP
CMPA #EOL
BNE REM00
ENDSMT JSR TSTEOL
ENDS02 LDA LINENB
ORA LINENB+1
BEQ REM09
REM05 CMPX USRTOP
BNE NXTLIN
JMP ERRORR
NXTLIN LDD ,X++
STD LINENB
MSLINE JSR TSTBRK
BSR IFAN
BCS IMPLET
PSHS D
REM09 RTS
IMPLET JMP LET
;******************************
;******************************
IFAN BSR SKIPSP
STX CURSOR
LDX #VERBT
FAN00: LDA ,X+
CMPA #EOL
BNE FAN04
LDX CURSOR
ORCC #$01
RTS
FAN04 STX CHAR
LDX CURSOR
STX SCRTCH
FAN05 LDX SCRTCH
CMPA 0,X
BNE FAN07
LEAX 1,X
STX SCRTCH
LDX CHAR
LDA ,X+
STX CHAR
CMPA #EOL
BNE FAN05
LDD 0,X
LDX SCRTCH
ANDCC #$FE
RTS
FAN07 LDX CHAR
FAN08 LDA ,X+
CMPA #EOL
BNE FAN08
LEAX 2,X
BRA FAN00
;******************************
;******************************
NXTNSP LEAX 1,X
SKIPSP LDA 0,X
CMPA #SPACE
BEQ NXTNSP
RTS
;******************************
;******************************
TSTHEX BSR TSTDIG
BCC TST05
CMPA #"A"
BCS TST03
CMPA #"F"
BHI TST03
SUBA #"A"-10
ANDCC #$FE
RTS
;******************************
;******************************
TSTLTR CMPA #"A"
BCS TST03
CMPA #"Z"
BLS TST05
TST03 ORCC #$01
RTS
;******************************
;******************************
TSTDIG CMPA #"0"
BCS TST03
CMPA #"9"
BHI TST03
SUBA #"0"
TST05 ANDCC #$FE
RTS
;******************************
;******************************
TSTVAR BSR SKIPSP
BSR TSTLTR
BCS TSTV03
TFR A,B
LDA 1,X
BSR TSTLTR
BCC TST03
LEAX 1,X
SUBB #"A"
ASLB
CLRA
ADDD STKTOP
TSTV02 ANDCC #$FE
TSTV03 RTS
;******************************
;******************************
USER JSR ARGONE
PSHS D
JSR SKIPSP
CMPA #","
BEQ USER03
CMPA #")"
ORCC #$01
BEQ USER05
USER02 JMP ERRORS
USER03 LEAX 1,X
JSR EXPR
PSHS A
JSR SKIPSP
CMPA #")"
PULS A
BNE USER02
ANDCC #$FE
USER05 LEAX 1,X
STX CURSOR
JSR [,S++]
LDX CURSOR
ANDCC #$FE
RTS
;******************************
;******************************
TSTSNB JSR SKIPSP
CMPA #"-"
BNE TSTNBR
LEAX 1,X
BSR TSTNBR
BCS TSN02
NEGA
NEGB
SBCA #0
ANDCC #$FC
TSN02 RTS
;******************************
;******************************
TSTNBR JSR SKIPSP
JSR TSTDIG
BCC TSTN02
CMPA #"$"
ORCC #$01
BNE TSTN09
TSTN20 LEAX 1,X
CLR ,-S
CLR ,-S
TSTN23 LDA 0,X
JSR TSTHEX
BCS TSTN07
LEAX 1,X
PSHS X
PSHS A
LDD 3,S
BITA #$F0
BNE TSTN11
ASLB
ROLA
ASLB
ROLA
ASLB
ROLA
ASLB
ROLA
ADDB ,S+
STD 2,S
PULS X
BRA TSTN23
TSTN02 LEAX 1,X
PSHS A
CLR ,-S
TSTN03 LDA 0,X
JSR TSTDIG
BCS TSTN07
LEAX 1,X
PSHS X
PSHS A
LDD 3,S
ASLB
ROLA
BVS TSTN11
ASLB
ROLA
BVS TSTN11
ADDD 3,S
BVS TSTN11
ASLB
ROLA
BVS TSTN11
ADDB 0,S
ADCA #0
BVS TSTN11
STD 3,S
LEAS 1,S
PULS X
BRA TSTN03
TSTN07 PULS D
ANDCC #$FE
TSTN09 ANDCC #$FD
RTS
TSTN11 LDX 1,S
LEAS 5,S
ORCC #$03
RTS
;******************************
;******************************
TSTSTK STS SAVESP
LDD SAVESP
SUBD #STKCUS
SUBD STKLIM
RTS
;******************************
;******************************
PEEK JSR PAREXP
PSHS D
PSHS X
LDB [2,S]
PULS X
LEAS 2,S
CLRA
RTS
;******************************
;******************************
POKE JSR PAREXP
PSHS D
JSR SKIPSP
CMPA #"="
BEQ POKE05
JMP ERRORS
POKE05 LEAX 1,X
JSR EXPR
JSR TSTEOL
PSHS X
STB [2,S]
PULS X
LEAS 2,S
JMP ENDS02
;******************************
;******************************
TSTFUN JSR SKIPSP
STX CURSOR
LDX #FUNT
JSR FAN00
BCS TSTF05
PSHS D
TSTF05 RTS
;******************************
;******************************
FUNT DB "USR"
FCB EOL
FDB USER
DB "PEEK"
FCB EOL
FDB PEEK
DB "MEM"
FCB EOL
FDB TSTSTK
FCB EOL
;******************************
;******************************
FLINE LDX USRBAS
FNDLIN CMPX USRTOP
BNE FND03
ORCC #$03
RTS
FND03 CMPD 0,X
BNE FND05
ANDCC #$FC
RTS
FND05 BCC FND07
ORCC #$01
ANDCC #$FD
RTS
FND07 PSHS A
LDA #EOL
LEAX 1,X
FND09 LEAX 1,X
CMPA 0,X
BNE FND09
PULS A
LEAX 1,X
BRA FNDLIN
;******************************
;******************************
RELEXP BSR EXPR
PSHS D
CLRB
JSR SKIPSP
CMPA #"="
BEQ REL06
CMPA #"<"
BNE REL03
LEAX 1,X
INCB
JSR SKIPSP
CMPA #">"
BNE REL05
LEAX 1,X
ADDB #4
BRA REL07
REL03 CMPA #">"
BNE EXPR06
LEAX 1,X
ADDB #4
JSR SKIPSP
REL05 CMPA #"="
BNE REL07
REL06 LEAX 1,X
ADDB #2
REL07 PSHS B
BSR EXPR
PSHS X
SUBD 3,S
TFR CC,A
LSRA
TFR A,B
ASLA
ASLA
PSHS B
ADDA ,S+
ANDA #$06
BNE REL08
INCA
REL08 CLRB
ANDA 2,S
BEQ REL09
COMB
REL09 CLRA
PULS X
LEAS 3,S
RTS
;******************************
;******************************
EXPR CLR ,-S
CLR ,-S
JSR SKIPSP
CMPA #"-"
BEQ EXPR05
CMPA #"+"
BNE EXPR03
EXPR02 LEAX 1,X
EXPR03 BSR TERM
EXPR04 ADDD 0,S
STD 0,S
JSR SKIPSP
CMPA #"+"
BEQ EXPR02
CMPA #"-"
BNE EXPR06
EXPR05 LEAX 1,X
BSR TERM
NEGA
NEGB
SBCA #0
BRA EXPR04
EXPR06 PULS D
RTS
;******************************
;******************************
TERM JSR FACT
PSHS D
TERM03 JSR SKIPSP
CMPA #"*"
BEQ TERM07
CMPA #"/"
BEQ TERM05
PULS D
RTS
TERM05 LEAX 1,X
BSR FACT
PSHS X
LEAX 2,S
PSHS D
EORA 0,X
JSR ABSX
LEAX 0,S
JSR ABSX
PSHS A
LDA #17
PSHS A
CLRA
CLRB
DIV05 SUBD 2,S
BCC DIV07
ADDD 2,S
ANDCC #$FE
BRA DIV09
DIV07 ORCC #$01
DIV09 ROL 7,S
ROL 6,S
ROLB
ROLA
DEC 0,S
BNE DIV05
LDA 1,S
LEAS 4,S
TSTA
BPL TERM06
LEAX 2,S
BSR NEGX
TERM06 PULS X
BRA TERM03
TERM07 LEAX 1,X
BSR FACT
MULT PSHS B
LDB 2,S
MUL
LDA 1,S
STB 1,S
LDB 0,S
MUL
LDA 2,S
STB 2,S
PULS B
MUL
ADDA 0,S
ADDA 1,S
STD 0,S
BRA TERM03
;******************************
;******************************
FACT JSR TSTVAR
BCS FACT03
PSHS X
TFR D,X
LDD 0,X
PULS X
FACT02 RTS
FACT03 JSR TSTNBR
BCC FACT02
JSR TSTFUN
BCC FACT02
PAREXP BSR ARGONE
PSHS A
JSR SKIPSP
CMPA #")"
PULS A
BNE FACT05
LEAX 1,X
RTS
FACT05 JMP ERRORS
;******************************
;******************************
ARGONE JSR TSTSTK
BCC FACT04
JMP ERRORF
FACT04 JSR SKIPSP
CMPA #"("
BNE FACT05
LEAX 1,X
JMP EXPR
;******************************
;******************************
ABSX TST 0,X
BPL NEG05
NEGX NEG 0,X
NEG 1,X
BCC NEG05
DEC 0,X
NEG05 RTS
;******************************
;******************************
TSTEOL PSHS A
JSR SKIPSP
CMPA #EOL
BEQ TEOL03
JMP ERRORS
TEOL03 LEAX 1,X
PULS A
RTS
;******************************
;******************************
LET JSR TSTVAR
BCC LET03
JMP ERRORS
LET03 PSHS D
JSR SKIPSP
CMPA #"="
BEQ LET05
JMP ERRORS
LET05 LEAX 1,X
JSR EXPR
BSR TSTEOL
STX CURSOR
PULS X
STD 0,X
LDX CURSOR
JMP ENDS02
;******************************
;******************************
IF: JSR RELEXP
TSTB
BEQ IF03
JMP MSLINE
IF03: JMP REM
;******************************
;******************************
GOTO JSR EXPR
BSR TSTEOL
JSR FLINE
BCS GOSB04
JMP NXTLIN
;******************************
;******************************
GOSUB JSR EXPR
BSR TSTEOL
STX CURSOR
JSR FLINE
BCC GOSB03
GOSB04 JMP ERRORR
GOSB03 JSR TSTSTK
BCC GOSB05
JMP ERRORF
GOSB05 LDD CURSOR
PSHS D
LDD LINENB
PSHS D
JSR NXTLIN
PULS D
STD LINENB
PULS X
JMP ENDS02
;******************************
;******************************
RETURN EQU TSTEOL
;******************************
;******************************
PRINT JSR SKIPSP
PR01 CMPA #","
BEQ PR05
CMPA #";"
BEQ PR07
CMPA #EOL
BEQ PR04
CMPA #$22
BNE PR02
LEAX 1,X
BSR PRNTQS
BRA PR03
PR02 JSR EXPR
PSHS X
BSR PRNTN
PULS X
PR03 JSR SKIPSP
CMPA #","
BEQ PR05
CMPA #";"
BEQ PR07
CMPA #EOL
BEQ PR04
JMP ERRORS
PR04 PSHS X
JSR CRLF
PULS X
BRA PR08
PR05 LDB #$7
PR06 LDA #SPACE
JSR PUTCHR
BITB ZONE
BNE PR06
PR07 LEAX 1,X
JSR SKIPSP
CMPA #EOL
BNE PR01
PR08 LEAX 1,X
JMP ENDS02
;*
;*
PRQ01 JSR PUTCHR
PRNTQS LDA ,X+
CMPA #EOL
BNE PRQ03
JMP ERRORS
PRQ03 CMPA #$22
BNE PRQ01
RTS
;*
PRNTN TSTA
BPL PRN03
NEGA
NEGB
SBCA #0
PSHS A
LDA #"-"
JSR PUTCHR
PULS A
PRN03 LDX #PRNPT-2
PRN05 LEAX 2,X
CMPD 0,X
BCC PRN07
CMPX #PRNPTO
BNE PRN05
PRN07 CLR CHAR
PRN09 CMPD 0,X
BCS PRN11
SUBD 0,X
INC CHAR
BRA PRN09
PRN11 PSHS A
LDA #"0"
ADDA CHAR
JSR PUTCHR
PULS A
CMPX #PRNPTO
BEQ PRN13
LEAX 2,X
BRA PRN07
PRN13 RTS
PRNPT FDB 10000
FDB 1000
FDB 100
FDB 10
PRNPTO FDB 1
;*
PRNT4 LDX #PRNPT+2
BRA PRN07
;******************************
;******************************
INPUT JSR TSTVAR
BCS IN11
PSHS D
STX CURSOR
IN03 LDA #"?"
JSR PUTCHR
JSR GETLIN
IN05 JSR SKIPSP
CMPA #EOL
BEQ IN03
JSR TSTSNB
BCC IN07
LDX #RMESS
JSR PUTSTR
JSR CRLF
BRA IN03
IN07 STX SCRTCH
PULS X
STD 0,X
LDX CURSOR
JSR SKIPSP
CMPA #","
BEQ IN09
JMP ENDSMT
IN09 LEAX 1,X
JSR TSTVAR
BCC IN13
IN11 JMP ERRORS
IN13 PSHS D
PSHS X
LDX SCRTCH
JSR SKIPSP
CMPA #","
BNE IN05
LEAX 1,X
BRA IN05
RMESS DB "RE-ENTER"
FCB EOL
;******************************
;******************************
RUN LDX STKTOP
LDA #52
RUN01 CLR ,X+
DECA
BNE RUN01
LDX USRBAS
JMP REM05
;******************************
;******************************
LIST JSR TSTNBR
BCC LIST03
CLRA
CLRB
STD CURSOR
LDA #$7F
BRA LIST07
LIST03 STD CURSOR
JSR SKIPSP
CMPA #","
BEQ LIST05
LDA CURSOR
BRA LIST07
LIST05 LEAX 1,X
JSR TSTNBR
BCC LIST07
JMP ERRORS
LIST07 JSR TSTEOL
PSHS D
LDD CURSOR
STX CURSOR
JSR FLINE
LIST09 CMPX USRTOP
BEQ LIST10
PULS D
CMPD 0,X
BCS LIST11
PSHS D
LDD ,X++
PSHS X
JSR PRNT4
PULS X
LDA #SPACE
JSR PUTCHR
JSR PUTSTR
LEAX 1,X
PSHS X
JSR CRLF
PULS X
JSR TSTBRK
BRA LIST09
LIST10 LEAS 2,S
LDA #ETX
JSR PUTCHR
LIST11 LDX CURSOR
JMP ENDS02
;******************************
;******************************
VERBT DB "LET"
FCB EOL
FDB LET
DB "IF"
FCB EOL
FDB IF
DB "GOTO"
FCB EOL
FDB GOTO
DB "GOSUB"
FCB EOL
FDB GOSUB
DB "RETURN"
FCB EOL
FDB RETURN
DB "POKE"
FCB EOL
FDB POKE
DB "PRINT"
FCB EOL
FDB PRINT
DB "INPUT"
FCB EOL
FDB INPUT
DB "REM"
FCB EOL
FDB REM
DB "STOP"
FCB EOL
FDB END
DB "END"
FCB EOL
FDB END
DB "RUN"
FCB EOL
FDB RUN
DB "LIST"
FCB EOL
FDB LIST
DB "NEW"
FCB EOL
FDB CLEAR
DB "?"
FCB EOL
FDB PRINT
FCB EOL
;******************************
;******************************
TSTBRK bsr BRKEEE
beq GETC05
GETCHR bsr INEEE
CMPA #ETX
BNE GETC05
JMP BREAK
GETC05 RTS
PUTCHR INC ZONE
JMP OUTEEE
;******************************
;******************************
INEEE BSR BRKEEE
BEQ INEEE
LDA RECEV
ANDA #$7F
RTS
OUTEEE PSHS A
OUT01 LDA TRCS
BITA #TDRE
BEQ OUT01
PULS A
STA TRANS
RTS
BRKEEE PSHS A
BRK03 LDA TRCS
BITA #ORFE
BEQ BRK05
LDA RECEV
BRA BRK03
BRK05 BITA #RDRF
PULS A
RTS
;*
LDA #CNTL1
STA RMCR
LDA #CNTL2
STA TRCS
INTEEE EQU $
RTS
;******************************
;******************************
END:
jmp reset
:10FFF000E400E400E400E400E400E400E400E400E1
:10E400007EE4154D4F443942415349430010DE0C20
:10E41000BDEBE5201310CE21CC10DF0CBDEBE5CC1D
:10E420000249DD06DD08DD0ABDE53F8EE483BDE57A
:10E430003810DE0C0F19BDE53F9E069F0E8E0000C2
:10E440009F120D192605863ABDEBAABDE590BDE6E3
:10E45000EA240E292BBDE65B810427E1BDE60D20F1
:10E46000D034109E089C0A351027037EE55FC30058
:10E4700000270D340683270F350622048D1020BD9A
:10E480007EE55654494E592056312E333704340612
:10E49000BDE65B9F14A6609E0E9C08270510A30096
:10E4A00024029E06BDE7C49F0E25229F103002A6BF
:10E4B00080810426FA9C08270EA6809F169E10A72E
:10E4C000809F109E1620EE9E109F089F0A9E14C6E5
:10E4D000FF5CA680810426F95D2603326239301F75
:10E4E000CB04301F5AA600812027F78604A7014FCE
:10E4F0009E089F16D308DD08DD0ABDE76224079F4A
:10E50000089F0A7EE54E9E089F109E169C0E270AC5
:10E51000A6829F169E10A78220EE35069E0EED81E4
:10E520009F169E14A6809F149E16A7809F16810496
:10E5300026F039BDEBAA3001A600810426F5398EFC
:10E54000E5478DF40F18390D0A7F000000048D2473
:10E55000534F525259048D1C57484154203F048D4B
:10E5600013484F57203F048D0B425245414B0453F3
:10E57000544F50048DC98607BDEBAADC12BDEA5E7C
:10E580008620BDEBAA35108DAF8DB47EE4318DAF02
:10E590008E0200BDEBA081202514817F27F58C021F
:10E5A00048260486072002A780BDEBAA20E5810843
:10E5B0002724811827D8810A2731810D26D50D19E6
:10E5C0002705BDEBAA20073410BDE53F35108604B2
:10E5D000A7008E0200398C020027B8301F8608BDC4
:10E5E000EBAA8620BDEBAA860820BE1A01061920D8
:10E5F000B830018D66810426F8BDE93196129A1370
:10E6000027149C0826037EE55FEC81DD12BDEB9CA0
:10E610008D0825033406397EE9428D3F9F0E8EEB2F
:10E6200037A680810426059E0E1A01399F169E0E7C
:10E630009F149E14A100261530019F149E16A680DB
:10E640009F16810426ECEC009E141CFE399E16A633
:10E6500080810426FA300220C83001A600812027DC
:10E66000F8398D1A2422814125118146220D8037E7
:10E670001CFE3981412504815A230D1A013981304C
:10E6800025F9813922F580301CFE398DCE8DE425A7
:10E69000121F89A6018DDC24E23001C041584FD3FE
:10E6A0000C1CFE39BDE9103406BDE65B812C270940
:10E6B00081291A0127157EE5563001BDE843340251
:10E6C000BDE65B8129350226ED1CFE30019F0EADB3
:10E6D000F19E0E1CFE39BDE65B812D260D30018DAD
:10E6E000092506405082001CFC39BDE65BBDE67E74
:10E6F000242F81241A01266030016FE26FE2A60008
:10E70000BDE662254F300134103402EC6385F026FB
:10E710004A5849584958495849EBE0ED62351020AC
:10E72000DD300134026FE2A600BDE67E2526300111
:10E7300034103402EC63584929215849291DE363F8
:10E74000291958492915EB608900290FED633261B9
:10E75000351020D335061CFE1CFD39AE6132651A1A
:10E76000033910DF10DC10830030930A39BDE8FD57
:10E7700034063410E672351032624F39BDE8FD348C
:10E7800006BDE65B813D27037EE5563001BDE843CB
:10E79000BDE9313410E772351032627EE5FCBDE62A
:10E7A0005B9F0E8EE7AEBDE6212502340639555338
:10E7B0005204E6A45045454B04E76D4D454D04E732
:10E7C00062049E069C0826031A033910A300260340
:10E7D0001CFC3924051A011CFD3934028604300161
:10E7E0003001A10026FA3502300120D88D553406BB
:10E7F0005FBDE65B813D2723813C261030015CBD77
:10E80000E65B813E26113001CB042013813E265F5A
:10E810003001CB04BDE65B813D26043001CB0234E0
:10E82000048D203410A3631FA8441F894848340472
:10E83000ABE0840626014C5FA4622701534F3510DC
:10E840003263396FE26FE2BDE65B812D2717812BC2
:10E85000260230018D1CE360ED60BDE65B812B2755
:10E86000F1812D260A30018D094050820020E735C4
:10E870000639BDE8E53406BDE65B812A2748812FCD
:10E88000270335063930018D5C341030623406A818
:10E8900000BDE9243060BDE9243402861134024F02
:10E8A0005FA3622406E3621CFE20021A0169676905
:10E8B0006659496A6026EAA66132644D2A043062CC
:10E8C0008D66351020B130018D1B3404E6623DA603
:10E8D00061E761E6603DA662E76235043DAB60AB8F
:10E8E00061ED602092BDE68B250934101F01EC001C
:10E8F000351039BDE6EA24FABDE79E24F58D1134C2
:10E9000002BDE65B8129350226033001397EE556DA
:10E91000BDE76224037EE54EBDE65B812826EE302E
:10E92000017EE8436D002A086000600124026A004D
:10E93000393402BDE65B810427037EE5563001359C
:10E940000239BDE68B24037EE5563406BDE65B81C5
:10E950003D27037EE5563001BDE8438DD49F0E353B
:10E9600010ED009E0E7EE5FCBDE7EC5D27037EE624
:10E970000D7EE5F3BDE8438DB8BDE7C2250F7EE609
:10E9800009BDE8438DAB9F0EBDE7C224037EE55F62
:10E99000BDE76224037EE54EDC0E3406DC1234064D
:10E9A000BDE6093506DD1235107EE5FCBDE65B816E
:10E9B0002C2736813B273D810427258122260630DE
:10E9C000018D422009BDE84334108D473510BDE666
:10E9D0005B812C2714813B271B810427037EE5568E
:10E9E0003410BDE53F35102014C6078620BDEBAAC4
:10E9F000D51826F73001BDE65B810426B230017ED2
:10EA0000E5FCBDEBAAA680810426037EE5568122A3
:10EA100026F0394D2A0D405082003402862DBDEB80
:10EA2000AA35028EEA52300210A30024058CEA5C5B
:10EA300026F40F1610A3002506A3000C1620F534AB
:10EA40000286309B16BDEBAA35028CEA5C270430A7
:10EA50000220DF39271003E80064000A00018EEA73
:10EA60005620CFBDE68B253C34069F0E863FBDEB7E
:10EA7000AABDE590BDE65B810427F1BDE6D6240B77
:10EA80008EEAB8BDE538BDE53F20E19F143510EDB5
:10EA9000009E0EBDE65B812C27037EE5F93001BDAB
:10EAA000E68B24037EE556340634109E14BDE65BE7
:10EAB000812C26C0300120BC52452D454E54455274
:10EAC000049E0C86346F804A26FB9E067EE602BDBD
:10EAD000E6EA24084F5FDD0E867F2017DD0EBDE6D7
:10EAE0005B812C2704960E200A3001BDE6EA240340
:10EAF0007EE556BDE9313406DC0E9F0EBDE7C29CB3
:10EB0000082728350610A30025283406EC81341088
:10EB1000BDEA5E35108620BDEBAABDE53830013474
:10EB200010BDE53F3510BDEB9C20D432628603BD9D
:10EB3000EBAA9E0E7EE5FC4C455404E9424946048E
:10EB4000E968474F544F04E974474F53554204E96D
:10EB50008152455455524E04E931504F4B4504E71C
:10EB60007C5052494E5404E9AC494E50555404EA85
:10EB70006352454D04E5F353544F5004EBE6454EC4
:10EB80004404EBE652554E04EAC14C49535404EA9E
:10EB9000CF4E455704E41F3F04E9AC048D2A2709F2
:10EBA0008D0D810326037EE567390C187EEBB98D48
:10EBB0001727FCB683FF847F393402B683FE8502B3
:10EBC00027F93502B783FF393402B683FE85202743
:10EBD00005B683FF20F485013502398603B783FE2D
:09EBE0008615B783FE397EE400BE
:00000001FF
0000 ;NAM TB01V137
0000 ;* WRITTEN 20-OCT-77 BY JOHN BYRNS
0000 ;* REVISED 30-DEC-77
0000 ;* REVISED 18-JAN-78
0000 ;* REVISED 10-APR-78
0000 ;* REVISED 08-MAY-79 TO ELIMINATE USE OF SP
0000 ;* REVISED 24-JAN-80 TO USE 6801 ON CHIP RAM
0000 ;* REVISED 26-JAN-80 FOR NEW 6801 INSTRUCTIONS
0000 ;* REVISED 24-JUL-81 FOR WHISTON BOARD
0000 ;* REVISED 24-SEP-81 INCLUDE USER FUNCTION
0000 ;* REVISED 08-APR-82 MAKE STANDALONE INCLUDE HEX CONSTANTS AND MEM FUNCTION
0000 ;* REVISED 21-NOV-84 FOR 6809
0000 ;* REVISED FEB 94 ADAPTED TO SIMULATOR AND BUGFIXES BY L.C. BENSCHOP.
0000 ;*
0000 .ENGINE kilo
0000 EOL: EQU $04
0000 ETX: EQU $03
0000 SPACE: EQU $20
0000 CR: EQU $0D
0000 LF: EQU $0A
0000 BS: EQU $08
0000 CAN: EQU $18
0000 BELL: EQU $07
0000 FILL: EQU $00
0000 DEL: EQU $7F
0000 BSIZE: EQU 73
0000 STKCUS: EQU 48
0000 ;*
0000 BACIA: EQU $83FE
0000 RMCR: EQU bACIA
0000 TRCS: EQU bACIA
0000 RECEV: EQU bACIA+1
0000 TRANS: EQU bACIA+1
0000 CNTL1: EQU $03
0000 CNTL2: EQU $15
0000 RDRF: EQU $01
0000 ORFE: EQU $20
0000 TDRE: EQU $02
0000 ;* EDIT THE FOLLOWING EQUATES TO REFLECT THE
0000 ;* DESIRED ROM AND RAM LAYOUT
0000 LORAM: EQU $0080
0000 BUFFER: EQU $0200
0000 RAMSIZ: EQU $2000
0000 ROMADR: EQU $f000
0000 ;*
0000 RAMBEG: EQU BUFFER+BSIZE
0000 RAMEND: EQU BUFFER+RAMSIZ
0000 ;*
0000 RAMPAT: EQU $AA0F
0000 ROMPAT: EQU $F055
0000 ;*
0000 ; ORG LORAM
0000 .BSSEG
0006 .ORG 6
0006 USRBAS: RMB 2
0008 USRTOP: RMB 2
000A STKLIM: RMB 2
000C STKTOP: RMB 2
000E CURSOR: RMB 2
0010 SAVESP: RMB 2
0012 LINENB: RMB 2
0014 SCRTCH: RMB 2
0016 CHAR: RMB 2
0018 ZONE: RMB 1
0019 MODE: RMB 1
001A RESRVD: RMB 1
001B LOEND: EQU $
001B ;*
0000 .CSEG
FFF0 .ORG 0xfff0
FFF0 ;reserved
FFF0 E4 00 DW reset
FFF2 ;SWI3
FFF2 E4 00 DW reset
FFF4 ;SWI2
FFF4 E4 00 DW reset
FFF6 ;FIRQ
FFF6 E4 00 DW reset
FFF8 ;IRQ
FFF8 E4 00 DW reset
FFFA ;SWI
FFFA E4 00 DW reset
FFFC ;NMI
FFFC E4 00 DW reset
FFFE ;RES
FFFE E4 00 DW reset
E400 .ORG $e400
E400 RESET:
E400 .ENT $
E400 7E E4 15 BASIC: JMP SETUP
E403 4D 4F 44 39 42 41 53 49 43 00 .CSTR "MOD9BASIC"
E40D 10 DE 0C WARMS: LDS STKTOP
E410 BD EB E5 JSR INTEEE
E413 20 13 BRA WMS05
E415 10 CE 21 CC SETUP: LDS #RAMEND-52
E419 10 DF 0C SET03: STS STKTOP
E41C BD EB E5 JSR INTEEE
E41F CC 02 49 CLEAR: LDD #RAMBEG
E422 DD 06 STD USRBAS
E424 DD 08 STD USRTOP
E426 DD 0A CLR02: STD STKLIM
E428 BD E5 3F WMS05: JSR CRLF
E42B 8E E4 83 LDX #VSTR
E42E BD E5 38 JSR PUTSTR
E431 10 DE 0C CMDB: LDS STKTOP
E434 0F 19 CLR MODE
E436 BD E5 3F JSR CRLF
E439 9E 06 LDX USRBAS
E43B 9F 0E STX CURSOR
E43D 8E 00 00 CMDE: LDX #0000
E440 9F 12 STX LINENB
E442 0D 19 TST MODE
E444 26 05 BNE CMD01
E446 86 3A LDA #":"
E448 BD EB AA JSR PUTCHR
E44B BD E5 90 CMD01: JSR GETLIN
E44E BD E6 EA JSR TSTNBR
E451 24 0E BCC CMD02
E453 29 2B BVS CMD05
E455 BD E6 5B JSR SKIPSP
E458 81 04 CMPA #EOL
E45A 27 E1 BEQ CMDE
E45C BD E6 0D JSR MSLINE
E45F 20 D0 BRA CMDB
E461 34 10 CMD02: PSHS X
E463 9E 08 LDX USRTOP
E465 9C 0A CMPX STKLIM
E467 35 10 PULS X
E469 27 03 BEQ CMD03
E46B 7E E5 5F JMP ERRORR
E46E C3 00 00 CMD03: ADDD #0
E471 27 0D BEQ CMD05
E473 34 06 CMD04: PSHS D
E475 83 27 0F SUBD #9999
E478 35 06 PULS D
E47A 22 04 BHI CMD05
E47C 8D 10 BSR EDITOR
E47E 20 BD BRA CMDE
E480 7E E5 56 CMD05: JMP ERRORS
E483 54 49 4E 59 20 56 31 2E 33 37 VSTR: DB "TINY V1.37"
E48D 04 FCB EOL
E48E ;******************************
E48E ;******************************
E48E 34 06 EDITOR: PSHS D
E490 BD E6 5B JSR SKIPSP
E493 9F 14 STX SCRTCH
E495 A6 60 LDA 0,S
E497 9E 0E LDX CURSOR
E499 9C 08 CMPX USRTOP
E49B 27 05 BEQ ED00
E49D 10 A3 00 CMPD 0,X
E4A0 24 02 BCC ED01
E4A2 9E 06 ED00: LDX USRBAS
E4A4 BD E7 C4 ED01: JSR FNDLIN
E4A7 9F 0E STX CURSOR
E4A9 25 22 BCS ED04
E4AB 9F 10 STX SAVESP
E4AD 30 02 LEAX 2,X
E4AF A6 80 ED02: LDA ,X+
E4B1 81 04 CMPA #EOL
E4B3 26 FA BNE ED02
E4B5 9C 08 ED03: CMPX USRTOP
E4B7 27 0E BEQ ED35
E4B9 A6 80 LDA ,X+
E4BB 9F 16 STX CHAR
E4BD 9E 10 LDX SAVESP
E4BF A7 80 STA ,X+
E4C1 9F 10 STX SAVESP
E4C3 9E 16 LDX CHAR
E4C5 20 EE BRA ED03
E4C7 9E 10 ED35: LDX SAVESP
E4C9 9F 08 STX USRTOP
E4CB 9F 0A STX STKLIM
E4CD 9E 14 ED04: LDX SCRTCH
E4CF C6 FF LDB #-1
E4D1 5C ED05: INCB
E4D2 A6 80 LDA ,X+
E4D4 81 04 CMPA #EOL
E4D6 26 F9 BNE ED05
E4D8 5D TSTB
E4D9 26 03 BNE ED55
E4DB 32 62 LEAS 2,S
E4DD 39 RTS
E4DE 30 1F ED55: LEAX -1,X
E4E0 CB 04 ADDB #4
E4E2 30 1F ED06: LEAX -1,X
E4E4 5A DECB
E4E5 A6 00 LDA 0,X
E4E7 81 20 CMPA #SPACE
E4E9 27 F7 BEQ ED06
E4EB 86 04 LDA #EOL
E4ED A7 01 STA 1,X
E4EF 4F CLRA
E4F0 9E 08 LDX USRTOP
E4F2 9F 16 STX CHAR
E4F4 D3 08 ADDD USRTOP
E4F6 DD 08 STD USRTOP
E4F8 DD 0A STD STKLIM
E4FA BD E7 62 JSR TSTSTK
E4FD 24 07 BCC ED07
E4FF 9F 08 STX USRTOP
E501 9F 0A STX STKLIM
E503 7E E5 4E JMP ERRORF
E506 9E 08 ED07: LDX USRTOP
E508 9F 10 ED08: STX SAVESP
E50A 9E 16 LDX CHAR
E50C 9C 0E CMPX CURSOR
E50E 27 0A BEQ ED09
E510 A6 82 LDA ,-X
E512 9F 16 STX CHAR
E514 9E 10 LDX SAVESP
E516 A7 82 STA ,-X
E518 20 EE BRA ED08
E51A 35 06 ED09: PULS D
E51C 9E 0E LDX CURSOR
E51E ED 81 STD ,X++
E520 9F 16 STX CHAR
E522 9E 14 ED10: LDX SCRTCH
E524 A6 80 LDA ,X+
E526 9F 14 STX SCRTCH
E528 9E 16 LDX CHAR
E52A A7 80 STA ,X+
E52C 9F 16 STX CHAR
E52E 81 04 CMPA #EOL
E530 26 F0 BNE ED10
E532 39 RTS
E533 ;******************************
E533 ;******************************
E533 BD EB AA PUTS01: JSR PUTCHR
E536 30 01 LEAX 1,X
E538 A6 00 PUTSTR: LDA 0,X
E53A 81 04 CMPA #EOL
E53C 26 F5 BNE PUTS01
E53E 39 RTS
E53F ;******************************
E53F ;******************************
E53F 8E E5 47 CRLF: LDX #CRLFST
E542 8D F4 BSR PUTSTR
E544 0F 18 CLR ZONE
E546 39 RTS
E547 0D 0A 7F 00 00 00 04 CRLFST: FCB CR,LF,DEL,FILL,FILL,FILL,EOL
E54E ;******************************
E54E ;******************************
E54E 8D 24 ERRORF: BSR ER01
E550 53 4F 52 52 59 DB "SORRY"
E555 04 FCB EOL
E556 8D 1C ERRORS: BSR ER01
E558 57 48 41 54 20 3F DB "WHAT ?"
E55E 04 FCB EOL
E55F 8D 13 ERRORR: BSR ER01
E561 48 4F 57 20 3F DB "HOW ?"
E566 04 FCB EOL
E567 8D 0B BREAK: BSR ER01
E569 42 52 45 41 4B DB "BREAK"
E56E 04 FCB EOL
E56F END BSR ER01
E56F 53 54 4F 50 DB "STOP"
E573 04 FCB EOL
E574 8D C9 ER01: BSR CRLF
E576 86 07 LDA #BELL
E578 BD EB AA JSR PUTCHR
E57B DC 12 LDD LINENB
E57D BD EA 5E JSR PRNT4
E580 86 20 LDA #SPACE
E582 BD EB AA JSR PUTCHR
E585 35 10 PULS X
E587 8D AF BSR PUTSTR
E589 8D B4 BSR CRLF
E58B 7E E4 31 JMP CMDB
E58E ;******************************
E58E ;******************************
E58E 8D AF GL00: BSR CRLF
E590 8E 02 00 GETLIN: LDX #BUFFER
E593 BD EB A0 GL03: JSR GETCHR
E596 81 20 CMPA #SPACE
E598 25 14 BCS GL05
E59A 81 7F CMPA #$7F
E59C 27 F5 BEQ GL03
E59E 8C 02 48 CMPX #BUFFER+BSIZE-1
E5A1 26 04 BNE GL04
E5A3 86 07 LDA #BELL
E5A5 20 02 BRA GL02
E5A7 A7 80 GL04: STA ,X+
E5A9 BD EB AA GL02: JSR PUTCHR
E5AC 20 E5 BRA GL03
E5AE 81 08 GL05: CMPA #BS
E5B0 27 24 BEQ GL07
E5B2 81 18 CMPA #CAN
E5B4 27 D8 BEQ GL00
E5B6 81 0A CMPA #LF
E5B8 27 31 BEQ GL09
E5BA 81 0D CMPA #CR
E5BC 26 D5 BNE GL03
E5BE 0D 19 TST MODE
E5C0 27 05 BEQ GL06
E5C2 BD EB AA JSR PUTCHR
E5C5 20 07 BRA GL08
E5C7 34 10 GL06: PSHS X
E5C9 BD E5 3F JSR CRLF
E5CC 35 10 PULS X
E5CE 86 04 GL08: LDA #EOL
E5D0 A7 00 STA 0,X
E5D2 8E 02 00 LDX #BUFFER
E5D5 39 RTS
E5D6 8C 02 00 GL07: CMPX #BUFFER
E5D9 27 B8 BEQ GL03
E5DB 30 1F LEAX -1,X
E5DD 86 08 LDA #BS
E5DF BD EB AA JSR PUTCHR
E5E2 86 20 LDA #SPACE
E5E4 BD EB AA JSR PUTCHR
E5E7 86 08 LDA #BS
E5E9 20 BE BRA GL02
E5EB 1A 01 GL09: ORCC #$01
E5ED 06 19 ROR MODE
E5EF 20 B8 BRA GL02
E5F1 ;******************************
E5F1 ;******************************
E5F1 30 01 REM00: LEAX 1,X
E5F3 8D 66 REM: BSR SKIPSP
E5F5 81 04 CMPA #EOL
E5F7 26 F8 BNE REM00
E5F9 BD E9 31 ENDSMT: JSR TSTEOL
E5FC 96 12 ENDS02: LDA LINENB
E5FE 9A 13 ORA LINENB+1
E600 27 14 BEQ REM09
E602 9C 08 REM05: CMPX USRTOP
E604 26 03 BNE NXTLIN
E606 7E E5 5F JMP ERRORR
E609 EC 81 NXTLIN: LDD ,X++
E60B DD 12 STD LINENB
E60D BD EB 9C MSLINE: JSR TSTBRK
E610 8D 08 BSR IFAN
E612 25 03 BCS IMPLET
E614 34 06 PSHS D
E616 39 REM09: RTS
E617 7E E9 42 IMPLET: JMP LET
E61A ;******************************
E61A ;******************************
E61A 8D 3F IFAN: BSR SKIPSP
E61C 9F 0E STX CURSOR
E61E 8E EB 37 LDX #VERBT
E621 A6 80 FAN00: LDA ,X+
E623 81 04 CMPA #EOL
E625 26 05 BNE FAN04
E627 9E 0E LDX CURSOR
E629 1A 01 ORCC #$01
E62B 39 RTS
E62C 9F 16 FAN04: STX CHAR
E62E 9E 0E LDX CURSOR
E630 9F 14 STX SCRTCH
E632 9E 14 FAN05: LDX SCRTCH
E634 A1 00 CMPA 0,X
E636 26 15 BNE FAN07
E638 30 01 LEAX 1,X
E63A 9F 14 STX SCRTCH
E63C 9E 16 LDX CHAR
E63E A6 80 LDA ,X+
E640 9F 16 STX CHAR
E642 81 04 CMPA #EOL
E644 26 EC BNE FAN05
E646 EC 00 LDD 0,X
E648 9E 14 LDX SCRTCH
E64A 1C FE ANDCC #$FE
E64C 39 RTS
E64D 9E 16 FAN07: LDX CHAR
E64F A6 80 FAN08: LDA ,X+
E651 81 04 CMPA #EOL
E653 26 FA BNE FAN08
E655 30 02 LEAX 2,X
E657 20 C8 BRA FAN00
E659 ;******************************
E659 ;******************************
E659 30 01 NXTNSP: LEAX 1,X
E65B A6 00 SKIPSP: LDA 0,X
E65D 81 20 CMPA #SPACE
E65F 27 F8 BEQ NXTNSP
E661 39 RTS
E662 ;******************************
E662 ;******************************
E662 8D 1A TSTHEX: BSR TSTDIG
E664 24 22 BCC TST05
E666 81 41 CMPA #"A"
E668 25 11 BCS TST03
E66A 81 46 CMPA #"F"
E66C 22 0D BHI TST03
E66E 80 37 SUBA #"A"-10
E670 1C FE ANDCC #$FE
E672 39 RTS
E673 ;******************************
E673 ;******************************
E673 81 41 TSTLTR: CMPA #"A"
E675 25 04 BCS TST03
E677 81 5A CMPA #"Z"
E679 23 0D BLS TST05
E67B 1A 01 TST03: ORCC #$01
E67D 39 RTS
E67E ;******************************
E67E ;******************************
E67E 81 30 TSTDIG: CMPA #"0"
E680 25 F9 BCS TST03
E682 81 39 CMPA #"9"
E684 22 F5 BHI TST03
E686 80 30 SUBA #"0"
E688 1C FE TST05: ANDCC #$FE
E68A 39 RTS
E68B ;******************************
E68B ;******************************
E68B 8D CE TSTVAR: BSR SKIPSP
E68D 8D E4 BSR TSTLTR
E68F 25 12 BCS TSTV03
E691 1F 89 TFR A,B
E693 A6 01 LDA 1,X
E695 8D DC BSR TSTLTR
E697 24 E2 BCC TST03
E699 30 01 LEAX 1,X
E69B C0 41 SUBB #"A"
E69D 58 ASLB
E69E 4F CLRA
E69F D3 0C ADDD STKTOP
E6A1 1C FE TSTV02: ANDCC #$FE
E6A3 39 TSTV03: RTS
E6A4 ;******************************
E6A4 ;******************************
E6A4 BD E9 10 USER: JSR ARGONE
E6A7 34 06 PSHS D
E6A9 BD E6 5B JSR SKIPSP
E6AC 81 2C CMPA #","
E6AE 27 09 BEQ USER03
E6B0 81 29 CMPA #")"
E6B2 1A 01 ORCC #$01
E6B4 27 15 BEQ USER05
E6B6 7E E5 56 USER02: JMP ERRORS
E6B9 30 01 USER03: LEAX 1,X
E6BB BD E8 43 JSR EXPR
E6BE 34 02 PSHS A
E6C0 BD E6 5B JSR SKIPSP
E6C3 81 29 CMPA #")"
E6C5 35 02 PULS A
E6C7 26 ED BNE USER02
E6C9 1C FE ANDCC #$FE
E6CB 30 01 USER05: LEAX 1,X
E6CD 9F 0E STX CURSOR
E6CF AD F1 JSR [,S++]
E6D1 9E 0E LDX CURSOR
E6D3 1C FE ANDCC #$FE
E6D5 39 RTS
E6D6 ;******************************
E6D6 ;******************************
E6D6 BD E6 5B TSTSNB: JSR SKIPSP
E6D9 81 2D CMPA #"-"
E6DB 26 0D BNE TSTNBR
E6DD 30 01 LEAX 1,X
E6DF 8D 09 BSR TSTNBR
E6E1 25 06 BCS TSN02
E6E3 40 NEGA
E6E4 50 NEGB
E6E5 82 00 SBCA #0
E6E7 1C FC ANDCC #$FC
E6E9 39 TSN02: RTS
E6EA ;******************************
E6EA ;******************************
E6EA BD E6 5B TSTNBR: JSR SKIPSP
E6ED BD E6 7E JSR TSTDIG
E6F0 24 2F BCC TSTN02
E6F2 81 24 CMPA #"$"
E6F4 1A 01 ORCC #$01
E6F6 26 60 BNE TSTN09
E6F8 30 01 TSTN20: LEAX 1,X
E6FA 6F E2 CLR ,-S
E6FC 6F E2 CLR ,-S
E6FE A6 00 TSTN23: LDA 0,X
E700 BD E6 62 JSR TSTHEX
E703 25 4F BCS TSTN07
E705 30 01 LEAX 1,X
E707 34 10 PSHS X
E709 34 02 PSHS A
E70B EC 63 LDD 3,S
E70D 85 F0 BITA #$F0
E70F 26 4A BNE TSTN11
E711 58 ASLB
E712 49 ROLA
E713 58 ASLB
E714 49 ROLA
E715 58 ASLB
E716 49 ROLA
E717 58 ASLB
E718 49 ROLA
E719 EB E0 ADDB ,S+
E71B ED 62 STD 2,S
E71D 35 10 PULS X
E71F 20 DD BRA TSTN23
E721 30 01 TSTN02: LEAX 1,X
E723 34 02 PSHS A
E725 6F E2 CLR ,-S
E727 A6 00 TSTN03: LDA 0,X
E729 BD E6 7E JSR TSTDIG
E72C 25 26 BCS TSTN07
E72E 30 01 LEAX 1,X
E730 34 10 PSHS X
E732 34 02 PSHS A
E734 EC 63 LDD 3,S
E736 58 ASLB
E737 49 ROLA
E738 29 21 BVS TSTN11
E73A 58 ASLB
E73B 49 ROLA
E73C 29 1D BVS TSTN11
E73E E3 63 ADDD 3,S
E740 29 19 BVS TSTN11
E742 58 ASLB
E743 49 ROLA
E744 29 15 BVS TSTN11
E746 EB 60 ADDB 0,S
E748 89 00 ADCA #0
E74A 29 0F BVS TSTN11
E74C ED 63 STD 3,S
E74E 32 61 LEAS 1,S
E750 35 10 PULS X
E752 20 D3 BRA TSTN03
E754 35 06 TSTN07: PULS D
E756 1C FE ANDCC #$FE
E758 1C FD TSTN09: ANDCC #$FD
E75A 39 RTS
E75B AE 61 TSTN11: LDX 1,S
E75D 32 65 LEAS 5,S
E75F 1A 03 ORCC #$03
E761 39 RTS
E762 ;******************************
E762 ;******************************
E762 10 DF 10 TSTSTK: STS SAVESP
E765 DC 10 LDD SAVESP
E767 83 00 30 SUBD #STKCUS
E76A 93 0A SUBD STKLIM
E76C 39 RTS
E76D ;******************************
E76D ;******************************
E76D BD E8 FD PEEK: JSR PAREXP
E770 34 06 PSHS D
E772 34 10 PSHS X
E774 E6 72 LDB [2,S]
E776 35 10 PULS X
E778 32 62 LEAS 2,S
E77A 4F CLRA
E77B 39 RTS
E77C ;******************************
E77C ;******************************
E77C BD E8 FD POKE: JSR PAREXP
E77F 34 06 PSHS D
E781 BD E6 5B JSR SKIPSP
E784 81 3D CMPA #"="
E786 27 03 BEQ POKE05
E788 7E E5 56 JMP ERRORS
E78B 30 01 POKE05: LEAX 1,X
E78D BD E8 43 JSR EXPR
E790 BD E9 31 JSR TSTEOL
E793 34 10 PSHS X
E795 E7 72 STB [2,S]
E797 35 10 PULS X
E799 32 62 LEAS 2,S
E79B 7E E5 FC JMP ENDS02
E79E ;******************************
E79E ;******************************
E79E BD E6 5B TSTFUN: JSR SKIPSP
E7A1 9F 0E STX CURSOR
E7A3 8E E7 AE LDX #FUNT
E7A6 BD E6 21 JSR FAN00
E7A9 25 02 BCS TSTF05
E7AB 34 06 PSHS D
E7AD 39 TSTF05: RTS
E7AE ;******************************
E7AE ;******************************
E7AE 55 53 52 FUNT: DB "USR"
E7B1 04 FCB EOL
E7B2 E6 A4 FDB USER
E7B4 50 45 45 4B DB "PEEK"
E7B8 04 FCB EOL
E7B9 E7 6D FDB PEEK
E7BB 4D 45 4D DB "MEM"
E7BE 04 FCB EOL
E7BF E7 62 FDB TSTSTK
E7C1 04 FCB EOL
E7C2 ;******************************
E7C2 ;******************************
E7C2 9E 06 FLINE: LDX USRBAS
E7C4 9C 08 FNDLIN: CMPX USRTOP
E7C6 26 03 BNE FND03
E7C8 1A 03 ORCC #$03
E7CA 39 RTS
E7CB 10 A3 00 FND03: CMPD 0,X
E7CE 26 03 BNE FND05
E7D0 1C FC ANDCC #$FC
E7D2 39 RTS
E7D3 24 05 FND05: BCC FND07
E7D5 1A 01 ORCC #$01
E7D7 1C FD ANDCC #$FD
E7D9 39 RTS
E7DA 34 02 FND07: PSHS A
E7DC 86 04 LDA #EOL
E7DE 30 01 LEAX 1,X
E7E0 30 01 FND09: LEAX 1,X
E7E2 A1 00 CMPA 0,X
E7E4 26 FA BNE FND09
E7E6 35 02 PULS A
E7E8 30 01 LEAX 1,X
E7EA 20 D8 BRA FNDLIN
E7EC ;******************************
E7EC ;******************************
E7EC 8D 55 RELEXP: BSR EXPR
E7EE 34 06 PSHS D
E7F0 5F CLRB
E7F1 BD E6 5B JSR SKIPSP
E7F4 81 3D CMPA #"="
E7F6 27 23 BEQ REL06
E7F8 81 3C CMPA #"<"
E7FA 26 10 BNE REL03
E7FC 30 01 LEAX 1,X
E7FE 5C INCB
E7FF BD E6 5B JSR SKIPSP
E802 81 3E CMPA #">"
E804 26 11 BNE REL05
E806 30 01 LEAX 1,X
E808 CB 04 ADDB #4
E80A 20 13 BRA REL07
E80C 81 3E REL03: CMPA #">"
E80E 26 5F BNE EXPR06
E810 30 01 LEAX 1,X
E812 CB 04 ADDB #4
E814 BD E6 5B JSR SKIPSP
E817 81 3D REL05: CMPA #"="
E819 26 04 BNE REL07
E81B 30 01 REL06: LEAX 1,X
E81D CB 02 ADDB #2
E81F 34 04 REL07: PSHS B
E821 8D 20 BSR EXPR
E823 34 10 PSHS X
E825 A3 63 SUBD 3,S
E827 1F A8 TFR CC,A
E829 44 LSRA
E82A 1F 89 TFR A,B
E82C 48 ASLA
E82D 48 ASLA
E82E 34 04 PSHS B
E830 AB E0 ADDA ,S+
E832 84 06 ANDA #$06
E834 26 01 BNE REL08
E836 4C INCA
E837 5F REL08: CLRB
E838 A4 62 ANDA 2,S
E83A 27 01 BEQ REL09
E83C 53 COMB
E83D 4F REL09: CLRA
E83E 35 10 PULS X
E840 32 63 LEAS 3,S
E842 39 RTS
E843 ;******************************
E843 ;******************************
E843 6F E2 EXPR: CLR ,-S
E845 6F E2 CLR ,-S
E847 BD E6 5B JSR SKIPSP
E84A 81 2D CMPA #"-"
E84C 27 17 BEQ EXPR05
E84E 81 2B CMPA #"+"
E850 26 02 BNE EXPR03
E852 30 01 EXPR02: LEAX 1,X
E854 8D 1C EXPR03: BSR TERM
E856 E3 60 EXPR04: ADDD 0,S
E858 ED 60 STD 0,S
E85A BD E6 5B JSR SKIPSP
E85D 81 2B CMPA #"+"
E85F 27 F1 BEQ EXPR02
E861 81 2D CMPA #"-"
E863 26 0A BNE EXPR06
E865 30 01 EXPR05: LEAX 1,X
E867 8D 09 BSR TERM
E869 40 NEGA
E86A 50 NEGB
E86B 82 00 SBCA #0
E86D 20 E7 BRA EXPR04
E86F 35 06 EXPR06: PULS D
E871 39 RTS
E872 ;******************************
E872 ;******************************
E872 BD E8 E5 TERM: JSR FACT
E875 34 06 PSHS D
E877 BD E6 5B TERM03: JSR SKIPSP
E87A 81 2A CMPA #"*"
E87C 27 48 BEQ TERM07
E87E 81 2F CMPA #"/"
E880 27 03 BEQ TERM05
E882 35 06 PULS D
E884 39 RTS
E885 30 01 TERM05: LEAX 1,X
E887 8D 5C BSR FACT
E889 34 10 PSHS X
E88B 30 62 LEAX 2,S
E88D 34 06 PSHS D
E88F A8 00 EORA 0,X
E891 BD E9 24 JSR ABSX
E894 30 60 LEAX 0,S
E896 BD E9 24 JSR ABSX
E899 34 02 PSHS A
E89B 86 11 LDA #17
E89D 34 02 PSHS A
E89F 4F CLRA
E8A0 5F CLRB
E8A1 A3 62 DIV05: SUBD 2,S
E8A3 24 06 BCC DIV07
E8A5 E3 62 ADDD 2,S
E8A7 1C FE ANDCC #$FE
E8A9 20 02 BRA DIV09
E8AB 1A 01 DIV07: ORCC #$01
E8AD 69 67 DIV09: ROL 7,S
E8AF 69 66 ROL 6,S
E8B1 59 ROLB
E8B2 49 ROLA
E8B3 6A 60 DEC 0,S
E8B5 26 EA BNE DIV05
E8B7 A6 61 LDA 1,S
E8B9 32 64 LEAS 4,S
E8BB 4D TSTA
E8BC 2A 04 BPL TERM06
E8BE 30 62 LEAX 2,S
E8C0 8D 66 BSR NEGX
E8C2 35 10 TERM06: PULS X
E8C4 20 B1 BRA TERM03
E8C6 30 01 TERM07: LEAX 1,X
E8C8 8D 1B BSR FACT
E8CA 34 04 MULT: PSHS B
E8CC E6 62 LDB 2,S
E8CE 3D MUL
E8CF A6 61 LDA 1,S
E8D1 E7 61 STB 1,S
E8D3 E6 60 LDB 0,S
E8D5 3D MUL
E8D6 A6 62 LDA 2,S
E8D8 E7 62 STB 2,S
E8DA 35 04 PULS B
E8DC 3D MUL
E8DD AB 60 ADDA 0,S
E8DF AB 61 ADDA 1,S
E8E1 ED 60 STD 0,S
E8E3 20 92 BRA TERM03
E8E5 ;******************************
E8E5 ;******************************
E8E5 BD E6 8B FACT: JSR TSTVAR
E8E8 25 09 BCS FACT03
E8EA 34 10 PSHS X
E8EC 1F 01 TFR D,X
E8EE EC 00 LDD 0,X
E8F0 35 10 PULS X
E8F2 39 FACT02: RTS
E8F3 BD E6 EA FACT03: JSR TSTNBR
E8F6 24 FA BCC FACT02
E8F8 BD E7 9E JSR TSTFUN
E8FB 24 F5 BCC FACT02
E8FD 8D 11 PAREXP: BSR ARGONE
E8FF 34 02 PSHS A
E901 BD E6 5B JSR SKIPSP
E904 81 29 CMPA #")"
E906 35 02 PULS A
E908 26 03 BNE FACT05
E90A 30 01 LEAX 1,X
E90C 39 RTS
E90D 7E E5 56 FACT05: JMP ERRORS
E910 ;******************************
E910 ;******************************
E910 BD E7 62 ARGONE: JSR TSTSTK
E913 24 03 BCC FACT04
E915 7E E5 4E JMP ERRORF
E918 BD E6 5B FACT04: JSR SKIPSP
E91B 81 28 CMPA #"("
E91D 26 EE BNE FACT05
E91F 30 01 LEAX 1,X
E921 7E E8 43 JMP EXPR
E924 ;******************************
E924 ;******************************
E924 6D 00 ABSX: TST 0,X
E926 2A 08 BPL NEG05
E928 60 00 NEGX: NEG 0,X
E92A 60 01 NEG 1,X
E92C 24 02 BCC NEG05
E92E 6A 00 DEC 0,X
E930 39 NEG05: RTS
E931 ;******************************
E931 ;******************************
E931 34 02 TSTEOL: PSHS A
E933 BD E6 5B JSR SKIPSP
E936 81 04 CMPA #EOL
E938 27 03 BEQ TEOL03
E93A 7E E5 56 JMP ERRORS
E93D 30 01 TEOL03: LEAX 1,X
E93F 35 02 PULS A
E941 39 RTS
E942 ;******************************
E942 ;******************************
E942 BD E6 8B LET: JSR TSTVAR
E945 24 03 BCC LET03
E947 7E E5 56 JMP ERRORS
E94A 34 06 LET03: PSHS D
E94C BD E6 5B JSR SKIPSP
E94F 81 3D CMPA #"="
E951 27 03 BEQ LET05
E953 7E E5 56 JMP ERRORS
E956 30 01 LET05: LEAX 1,X
E958 BD E8 43 JSR EXPR
E95B 8D D4 BSR TSTEOL
E95D 9F 0E STX CURSOR
E95F 35 10 PULS X
E961 ED 00 STD 0,X
E963 9E 0E LDX CURSOR
E965 7E E5 FC JMP ENDS02
E968 ;******************************
E968 ;******************************
E968 BD E7 EC IF: JSR RELEXP
E96B 5D TSTB
E96C 27 03 BEQ IF03
E96E 7E E6 0D JMP MSLINE
E971 7E E5 F3 IF03: JMP REM
E974 ;******************************
E974 ;******************************
E974 BD E8 43 GOTO: JSR EXPR
E977 8D B8 BSR TSTEOL
E979 BD E7 C2 JSR FLINE
E97C 25 0F BCS GOSB04
E97E 7E E6 09 JMP NXTLIN
E981 ;******************************
E981 ;******************************
E981 BD E8 43 GOSUB: JSR EXPR
E984 8D AB BSR TSTEOL
E986 9F 0E STX CURSOR
E988 BD E7 C2 JSR FLINE
E98B 24 03 BCC GOSB03
E98D 7E E5 5F GOSB04: JMP ERRORR
E990 BD E7 62 GOSB03: JSR TSTSTK
E993 24 03 BCC GOSB05
E995 7E E5 4E JMP ERRORF
E998 DC 0E GOSB05: LDD CURSOR
E99A 34 06 PSHS D
E99C DC 12 LDD LINENB
E99E 34 06 PSHS D
E9A0 BD E6 09 JSR NXTLIN
E9A3 35 06 PULS D
E9A5 DD 12 STD LINENB
E9A7 35 10 PULS X
E9A9 7E E5 FC JMP ENDS02
E9AC ;******************************
E9AC ;******************************
E9AC RETURN: EQU TSTEOL
E9AC ;******************************
E9AC ;******************************
E9AC BD E6 5B PRINT: JSR SKIPSP
E9AF 81 2C PR01: CMPA #","
E9B1 27 36 BEQ PR05
E9B3 81 3B CMPA #";"
E9B5 27 3D BEQ PR07
E9B7 81 04 CMPA #EOL
E9B9 27 25 BEQ PR04
E9BB 81 22 CMPA #$22
E9BD 26 06 BNE PR02
E9BF 30 01 LEAX 1,X
E9C1 8D 42 BSR PRNTQS
E9C3 20 09 BRA PR03
E9C5 BD E8 43 PR02: JSR EXPR
E9C8 34 10 PSHS X
E9CA 8D 47 BSR PRNTN
E9CC 35 10 PULS X
E9CE BD E6 5B PR03: JSR SKIPSP
E9D1 81 2C CMPA #","
E9D3 27 14 BEQ PR05
E9D5 81 3B CMPA #";"
E9D7 27 1B BEQ PR07
E9D9 81 04 CMPA #EOL
E9DB 27 03 BEQ PR04
E9DD 7E E5 56 JMP ERRORS
E9E0 34 10 PR04: PSHS X
E9E2 BD E5 3F JSR CRLF
E9E5 35 10 PULS X
E9E7 20 14 BRA PR08
E9E9 C6 07 PR05: LDB #$7
E9EB 86 20 PR06: LDA #SPACE
E9ED BD EB AA JSR PUTCHR
E9F0 D5 18 BITB ZONE
E9F2 26 F7 BNE PR06
E9F4 30 01 PR07: LEAX 1,X
E9F6 BD E6 5B JSR SKIPSP
E9F9 81 04 CMPA #EOL
E9FB 26 B2 BNE PR01
E9FD 30 01 PR08: LEAX 1,X
E9FF 7E E5 FC JMP ENDS02
EA02 ;*
EA02 ;*
EA02 BD EB AA PRQ01: JSR PUTCHR
EA05 A6 80 PRNTQS: LDA ,X+
EA07 81 04 CMPA #EOL
EA09 26 03 BNE PRQ03
EA0B 7E E5 56 JMP ERRORS
EA0E 81 22 PRQ03: CMPA #$22
EA10 26 F0 BNE PRQ01
EA12 39 RTS
EA13 ;*
EA13 4D PRNTN: TSTA
EA14 2A 0D BPL PRN03
EA16 40 NEGA
EA17 50 NEGB
EA18 82 00 SBCA #0
EA1A 34 02 PSHS A
EA1C 86 2D LDA #"-"
EA1E BD EB AA JSR PUTCHR
EA21 35 02 PULS A
EA23 8E EA 52 PRN03: LDX #PRNPT-2
EA26 30 02 PRN05: LEAX 2,X
EA28 10 A3 00 CMPD 0,X
EA2B 24 05 BCC PRN07
EA2D 8C EA 5C CMPX #PRNPTO
EA30 26 F4 BNE PRN05
EA32 0F 16 PRN07: CLR CHAR
EA34 10 A3 00 PRN09: CMPD 0,X
EA37 25 06 BCS PRN11
EA39 A3 00 SUBD 0,X
EA3B 0C 16 INC CHAR
EA3D 20 F5 BRA PRN09
EA3F 34 02 PRN11: PSHS A
EA41 86 30 LDA #"0"
EA43 9B 16 ADDA CHAR
EA45 BD EB AA JSR PUTCHR
EA48 35 02 PULS A
EA4A 8C EA 5C CMPX #PRNPTO
EA4D 27 04 BEQ PRN13
EA4F 30 02 LEAX 2,X
EA51 20 DF BRA PRN07
EA53 39 PRN13: RTS
EA54 27 10 PRNPT: FDB 10000
EA56 03 E8 FDB 1000
EA58 00 64 FDB 100
EA5A 00 0A FDB 10
EA5C 00 01 PRNPTO: FDB 1
EA5E ;*
EA5E 8E EA 56 PRNT4: LDX #PRNPT+2
EA61 20 CF BRA PRN07
EA63 ;******************************
EA63 ;******************************
EA63 BD E6 8B INPUT: JSR TSTVAR
EA66 25 3C BCS IN11
EA68 34 06 PSHS D
EA6A 9F 0E STX CURSOR
EA6C 86 3F IN03: LDA #"?"
EA6E BD EB AA JSR PUTCHR
EA71 BD E5 90 JSR GETLIN
EA74 BD E6 5B IN05: JSR SKIPSP
EA77 81 04 CMPA #EOL
EA79 27 F1 BEQ IN03
EA7B BD E6 D6 JSR TSTSNB
EA7E 24 0B BCC IN07
EA80 8E EA B8 LDX #RMESS
EA83 BD E5 38 JSR PUTSTR
EA86 BD E5 3F JSR CRLF
EA89 20 E1 BRA IN03
EA8B 9F 14 IN07: STX SCRTCH
EA8D 35 10 PULS X
EA8F ED 00 STD 0,X
EA91 9E 0E LDX CURSOR
EA93 BD E6 5B JSR SKIPSP
EA96 81 2C CMPA #","
EA98 27 03 BEQ IN09
EA9A 7E E5 F9 JMP ENDSMT
EA9D 30 01 IN09: LEAX 1,X
EA9F BD E6 8B JSR TSTVAR
EAA2 24 03 BCC IN13
EAA4 7E E5 56 IN11: JMP ERRORS
EAA7 34 06 IN13: PSHS D
EAA9 34 10 PSHS X
EAAB 9E 14 LDX SCRTCH
EAAD BD E6 5B JSR SKIPSP
EAB0 81 2C CMPA #","
EAB2 26 C0 BNE IN05
EAB4 30 01 LEAX 1,X
EAB6 20 BC BRA IN05
EAB8 52 45 2D 45 4E 54 45 52 RMESS: DB "RE-ENTER"
EAC0 04 FCB EOL
EAC1 ;******************************
EAC1 ;******************************
EAC1 9E 0C RUN: LDX STKTOP
EAC3 86 34 LDA #52
EAC5 6F 80 RUN01: CLR ,X+
EAC7 4A DECA
EAC8 26 FB BNE RUN01
EACA 9E 06 LDX USRBAS
EACC 7E E6 02 JMP REM05
EACF ;******************************
EACF ;******************************
EACF BD E6 EA LIST: JSR TSTNBR
EAD2 24 08 BCC LIST03
EAD4 4F CLRA
EAD5 5F CLRB
EAD6 DD 0E STD CURSOR
EAD8 86 7F LDA #$7F
EADA 20 17 BRA LIST07
EADC DD 0E LIST03: STD CURSOR
EADE BD E6 5B JSR SKIPSP
EAE1 81 2C CMPA #","
EAE3 27 04 BEQ LIST05
EAE5 96 0E LDA CURSOR
EAE7 20 0A BRA LIST07
EAE9 30 01 LIST05: LEAX 1,X
EAEB BD E6 EA JSR TSTNBR
EAEE 24 03 BCC LIST07
EAF0 7E E5 56 JMP ERRORS
EAF3 BD E9 31 LIST07: JSR TSTEOL
EAF6 34 06 PSHS D
EAF8 DC 0E LDD CURSOR
EAFA 9F 0E STX CURSOR
EAFC BD E7 C2 JSR FLINE
EAFF 9C 08 LIST09: CMPX USRTOP
EB01 27 28 BEQ LIST10
EB03 35 06 PULS D
EB05 10 A3 00 CMPD 0,X
EB08 25 28 BCS LIST11
EB0A 34 06 PSHS D
EB0C EC 81 LDD ,X++
EB0E 34 10 PSHS X
EB10 BD EA 5E JSR PRNT4
EB13 35 10 PULS X
EB15 86 20 LDA #SPACE
EB17 BD EB AA JSR PUTCHR
EB1A BD E5 38 JSR PUTSTR
EB1D 30 01 LEAX 1,X
EB1F 34 10 PSHS X
EB21 BD E5 3F JSR CRLF
EB24 35 10 PULS X
EB26 BD EB 9C JSR TSTBRK
EB29 20 D4 BRA LIST09
EB2B 32 62 LIST10: LEAS 2,S
EB2D 86 03 LDA #ETX
EB2F BD EB AA JSR PUTCHR
EB32 9E 0E LIST11: LDX CURSOR
EB34 7E E5 FC JMP ENDS02
EB37 ;******************************
EB37 ;******************************
EB37 4C 45 54 VERBT: DB "LET"
EB3A 04 FCB EOL
EB3B E9 42 FDB LET
EB3D 49 46 DB "IF"
EB3F 04 FCB EOL
EB40 E9 68 FDB IF
EB42 47 4F 54 4F DB "GOTO"
EB46 04 FCB EOL
EB47 E9 74 FDB GOTO
EB49 47 4F 53 55 42 DB "GOSUB"
EB4E 04 FCB EOL
EB4F E9 81 FDB GOSUB
EB51 52 45 54 55 52 4E DB "RETURN"
EB57 04 FCB EOL
EB58 E9 31 FDB RETURN
EB5A 50 4F 4B 45 DB "POKE"
EB5E 04 FCB EOL
EB5F E7 7C FDB POKE
EB61 50 52 49 4E 54 DB "PRINT"
EB66 04 FCB EOL
EB67 E9 AC FDB PRINT
EB69 49 4E 50 55 54 DB "INPUT"
EB6E 04 FCB EOL
EB6F EA 63 FDB INPUT
EB71 52 45 4D DB "REM"
EB74 04 FCB EOL
EB75 E5 F3 FDB REM
EB77 53 54 4F 50 DB "STOP"
EB7B 04 FCB EOL
EB7C EB E6 FDB END
EB7E 45 4E 44 DB "END"
EB81 04 FCB EOL
EB82 EB E6 FDB END
EB84 52 55 4E DB "RUN"
EB87 04 FCB EOL
EB88 EA C1 FDB RUN
EB8A 4C 49 53 54 DB "LIST"
EB8E 04 FCB EOL
EB8F EA CF FDB LIST
EB91 4E 45 57 DB "NEW"
EB94 04 FCB EOL
EB95 E4 1F FDB CLEAR
EB97 3F DB "?"
EB98 04 FCB EOL
EB99 E9 AC FDB PRINT
EB9B 04 FCB EOL
EB9C ;******************************
EB9C ;******************************
EB9C 8D 2A TSTBRK: BSR BRKEEE
EB9E 27 09 BEQ GETC05
EBA0 8D 0D GETCHR: BSR INEEE
EBA2 81 03 CMPA #ETX
EBA4 26 03 BNE GETC05
EBA6 7E E5 67 JMP BREAK
EBA9 39 GETC05: RTS
EBAA 0C 18 PUTCHR: INC ZONE
EBAC 7E EB B9 JMP OUTEEE
EBAF ;******************************
EBAF ;******************************
EBAF 8D 17 INEEE: BSR BRKEEE
EBB1 27 FC BEQ INEEE
EBB3 B6 83 FF LDA RECEV
EBB6 84 7F ANDA #$7F
EBB8 39 RTS
EBB9 34 02 OUTEEE: PSHS A
EBBB B6 83 FE OUT01: LDA TRCS
EBBE 85 02 BITA #TDRE
EBC0 27 F9 BEQ OUT01
EBC2 35 02 PULS A
EBC4 B7 83 FF STA TRANS
EBC7 39 RTS
EBC8 34 02 BRKEEE: PSHS A
EBCA B6 83 FE BRK03: LDA TRCS
EBCD 85 20 BITA #ORFE
EBCF 27 05 BEQ BRK05
EBD1 B6 83 FF LDA RECEV
EBD4 20 F4 BRA BRK03
EBD6 85 01 BRK05: BITA #RDRF
EBD8 35 02 PULS A
EBDA 39 RTS
EBDB ;*
EBDB 86 03 LDA #CNTL1
EBDD B7 83 FE STA RMCR
EBE0 86 15 LDA #CNTL2
EBE2 B7 83 FE STA TRCS
EBE5 INTEEE: EQU $
EBE5 39 RTS
EBE6 ;******************************
EBE6 ;******************************
EBE6 END:
EBE6 7E E4 00 JMP reset
EOL: 0004 DEFINED AT LINE 17
> USED AT LINE 146
> USED AT LINE 251
> USED AT LINE 254
> USED AT LINE 257
> USED AT LINE 260
> USED AT LINE 263
> USED AT LINE 579
> USED AT LINE 582
> USED AT LINE 585
> USED AT LINE 587
> USED AT LINE 985
> USED AT LINE 1046
> USED AT LINE 1049
> USED AT LINE 1052
> USED AT LINE 1055
> USED AT LINE 1058
> USED AT LINE 1061
> USED AT LINE 1064
> USED AT LINE 1067
> USED AT LINE 1070
> USED AT LINE 1073
> USED AT LINE 1076
> USED AT LINE 1079
> USED AT LINE 1082
> USED AT LINE 1085
> USED AT LINE 1088
> USED AT LINE 1090
ETX: 0003 DEFINED AT LINE 18
SPACE: 0020 DEFINED AT LINE 19
CR: 000D DEFINED AT LINE 20
> USED AT LINE 246
LF: 000A DEFINED AT LINE 21
> USED AT LINE 246
BS: 0008 DEFINED AT LINE 22
CAN: 0018 DEFINED AT LINE 23
BELL: 0007 DEFINED AT LINE 24
FILL: 0000 DEFINED AT LINE 25
DEL: 007F DEFINED AT LINE 26
BSIZE: 0049 DEFINED AT LINE 27
> USED AT LINE 47
STKCUS: 0030 DEFINED AT LINE 28
BACIA: 83FE DEFINED AT LINE 30
> USED AT LINE 31
> USED AT LINE 32
> USED AT LINE 33
> USED AT LINE 34
RMCR: 83FE DEFINED AT LINE 31
> USED AT LINE 1127
TRCS: 83FE DEFINED AT LINE 32
> USED AT LINE 1110
> USED AT LINE 1117
> USED AT LINE 1129
RECEV: 83FF DEFINED AT LINE 33
> USED AT LINE 1106
> USED AT LINE 1120
TRANS: 83FF DEFINED AT LINE 34
> USED AT LINE 1114
CNTL1: 0003 DEFINED AT LINE 35
CNTL2: 0015 DEFINED AT LINE 36
RDRF: 0001 DEFINED AT LINE 37
ORFE: 0020 DEFINED AT LINE 38
TDRE: 0002 DEFINED AT LINE 39
LORAM: 0080 DEFINED AT LINE 42
BUFFER: 0200 DEFINED AT LINE 43
> USED AT LINE 47
> USED AT LINE 48
RAMSIZ: 2000 DEFINED AT LINE 44
> USED AT LINE 48
ROMADR: F000 DEFINED AT LINE 45
RAMBEG: 0249 DEFINED AT LINE 47
RAMEND: 2200 DEFINED AT LINE 48
RAMPAT: AA0F DEFINED AT LINE 50
ROMPAT: F055 DEFINED AT LINE 51
USRBAS: 0006 DEFINED AT LINE 56
> USED AT LINE 104
> USED AT LINE 113
> USED AT LINE 158
> USED AT LINE 590
> USED AT LINE 993
USRTOP: 0008 DEFINED AT LINE 57
> USED AT LINE 105
> USED AT LINE 131
> USED AT LINE 154
> USED AT LINE 167
> USED AT LINE 177
> USED AT LINE 199
> USED AT LINE 201
> USED AT LINE 202
> USED AT LINE 206
> USED AT LINE 209
> USED AT LINE 332
> USED AT LINE 591
> USED AT LINE 1019
STKLIM: 000A DEFINED AT LINE 58
> USED AT LINE 106
> USED AT LINE 132
> USED AT LINE 178
> USED AT LINE 203
> USED AT LINE 207
> USED AT LINE 539
STKTOP: 000C DEFINED AT LINE 59
> USED AT LINE 97
> USED AT LINE 101
> USED AT LINE 110
> USED AT LINE 425
> USED AT LINE 988
CURSOR: 000E DEFINED AT LINE 60
> USED AT LINE 114
> USED AT LINE 153
> USED AT LINE 160
> USED AT LINE 212
> USED AT LINE 220
> USED AT LINE 346
> USED AT LINE 351
> USED AT LINE 355
> USED AT LINE 448
> USED AT LINE 450
> USED AT LINE 570
> USED AT LINE 813
> USED AT LINE 816
> USED AT LINE 836
> USED AT LINE 843
> USED AT LINE 951
> USED AT LINE 967
> USED AT LINE 1001
> USED AT LINE 1004
> USED AT LINE 1008
> USED AT LINE 1016
> USED AT LINE 1017
> USED AT LINE 1041
SAVESP: 0010 DEFINED AT LINE 61
> USED AT LINE 162
> USED AT LINE 171
> USED AT LINE 173
> USED AT LINE 176
> USED AT LINE 210
> USED AT LINE 216
> USED AT LINE 536
> USED AT LINE 537
LINENB: 0012 DEFINED AT LINE 62
> USED AT LINE 116
> USED AT LINE 267
> USED AT LINE 329
> USED AT LINE 330
> USED AT LINE 336
> USED AT LINE 845
> USED AT LINE 849
SCRTCH: 0014 DEFINED AT LINE 63
> USED AT LINE 151
> USED AT LINE 179
> USED AT LINE 223
> USED AT LINE 225
> USED AT LINE 356
> USED AT LINE 357
> USED AT LINE 361
> USED AT LINE 368
> USED AT LINE 964
> USED AT LINE 978
CHAR: 0016 DEFINED AT LINE 64
> USED AT LINE 170
> USED AT LINE 174
> USED AT LINE 200
> USED AT LINE 211
> USED AT LINE 215
> USED AT LINE 222
> USED AT LINE 226
> USED AT LINE 228
> USED AT LINE 354
> USED AT LINE 362
> USED AT LINE 364
> USED AT LINE 371
> USED AT LINE 922
> USED AT LINE 926
> USED AT LINE 930
ZONE: 0018 DEFINED AT LINE 65
> USED AT LINE 244
> USED AT LINE 888
> USED AT LINE 1100
MODE: 0019 DEFINED AT LINE 66
> USED AT LINE 111
> USED AT LINE 117
> USED AT LINE 299
> USED AT LINE 320
RESRVD: 001A DEFINED AT LINE 67
LOEND: 001B DEFINED AT LINE 68
RESET: E400 DEFINED AT LINE 92
> USED AT LINE 75
> USED AT LINE 77
> USED AT LINE 79
> USED AT LINE 81
> USED AT LINE 83
> USED AT LINE 85
> USED AT LINE 87
> USED AT LINE 89
> USED AT LINE 1138
BASIC: E400 DEFINED AT LINE 95
WARMS: E40D DEFINED AT LINE 97
SETUP: E415 DEFINED AT LINE 100
> USED AT LINE 95
SET03: E419 DEFINED AT LINE 101
CLEAR: E41F DEFINED AT LINE 103
> USED AT LINE 1086
CLR02: E426 DEFINED AT LINE 106
WMS05: E428 DEFINED AT LINE 107
> USED AT LINE 99
CMDB: E431 DEFINED AT LINE 110
> USED AT LINE 129
> USED AT LINE 274
CMDE: E43D DEFINED AT LINE 115
> USED AT LINE 127
> USED AT LINE 143
CMD01: E44B DEFINED AT LINE 121
> USED AT LINE 118
CMD02: E461 DEFINED AT LINE 130
> USED AT LINE 123
CMD03: E46E DEFINED AT LINE 136
> USED AT LINE 134
CMD04: E473 DEFINED AT LINE 138
CMD05: E480 DEFINED AT LINE 144
> USED AT LINE 124
> USED AT LINE 137
> USED AT LINE 141
VSTR: E483 DEFINED AT LINE 145
EDITOR: E48E DEFINED AT LINE 149
> USED AT LINE 142
ED00: E4A2 DEFINED AT LINE 158
> USED AT LINE 155
ED01: E4A4 DEFINED AT LINE 159
> USED AT LINE 157
ED02: E4AF DEFINED AT LINE 164
> USED AT LINE 166
ED03: E4B5 DEFINED AT LINE 167
> USED AT LINE 175
ED35: E4C7 DEFINED AT LINE 176
> USED AT LINE 168
ED04: E4CD DEFINED AT LINE 179
> USED AT LINE 161
ED05: E4D1 DEFINED AT LINE 181
> USED AT LINE 184
ED55: E4DE DEFINED AT LINE 189
> USED AT LINE 186
ED06: E4E2 DEFINED AT LINE 191
> USED AT LINE 195
ED07: E506 DEFINED AT LINE 209
> USED AT LINE 205
ED08: E508 DEFINED AT LINE 210
> USED AT LINE 218
ED09: E51A DEFINED AT LINE 219
> USED AT LINE 213
ED10: E522 DEFINED AT LINE 223
> USED AT LINE 230
PUTS01: E533 DEFINED AT LINE 234
> USED AT LINE 238
PUTSTR: E538 DEFINED AT LINE 236
> USED AT LINE 109
> USED AT LINE 243
> USED AT LINE 272
> USED AT LINE 961
> USED AT LINE 1031
CRLF: E53F DEFINED AT LINE 242
> USED AT LINE 107
> USED AT LINE 112
> USED AT LINE 264
> USED AT LINE 273
> USED AT LINE 277
> USED AT LINE 304
> USED AT LINE 882
> USED AT LINE 962
> USED AT LINE 1034
CRLFST: E547 DEFINED AT LINE 246
ERRORF: E54E DEFINED AT LINE 249
> USED AT LINE 208
> USED AT LINE 775
> USED AT LINE 842
ERRORS: E556 DEFINED AT LINE 252
> USED AT LINE 144
> USED AT LINE 438
> USED AT LINE 558
> USED AT LINE 770
> USED AT LINE 796
> USED AT LINE 804
> USED AT LINE 809
> USED AT LINE 880
> USED AT LINE 902
> USED AT LINE 975
> USED AT LINE 1013
ERRORR: E55F DEFINED AT LINE 255
> USED AT LINE 135
> USED AT LINE 334
> USED AT LINE 839
BREAK: E567 DEFINED AT LINE 258
> USED AT LINE 1098
ER01: E574 DEFINED AT LINE 264
> USED AT LINE 249
> USED AT LINE 252
> USED AT LINE 255
> USED AT LINE 258
GL00: E58E DEFINED AT LINE 277
> USED AT LINE 294
GETLIN: E590 DEFINED AT LINE 278
> USED AT LINE 121
> USED AT LINE 954
GL03: E593 DEFINED AT LINE 279
> USED AT LINE 283
> USED AT LINE 290
> USED AT LINE 298
> USED AT LINE 311
GL04: E5A7 DEFINED AT LINE 288
> USED AT LINE 285
GL02: E5A9 DEFINED AT LINE 289
> USED AT LINE 287
> USED AT LINE 318
> USED AT LINE 321
GL05: E5AE DEFINED AT LINE 291
> USED AT LINE 281
GL06: E5C7 DEFINED AT LINE 303
> USED AT LINE 300
GL08: E5CE DEFINED AT LINE 306
> USED AT LINE 302
GL07: E5D6 DEFINED AT LINE 310
> USED AT LINE 292
GL09: E5EB DEFINED AT LINE 319
> USED AT LINE 296
REM00: E5F1 DEFINED AT LINE 324
> USED AT LINE 327
REM: E5F3 DEFINED AT LINE 325
> USED AT LINE 824
> USED AT LINE 1071
ENDSMT: E5F9 DEFINED AT LINE 328
> USED AT LINE 971
ENDS02: E5FC DEFINED AT LINE 329
> USED AT LINE 566
> USED AT LINE 817
> USED AT LINE 851
> USED AT LINE 895
> USED AT LINE 1042
REM05: E602 DEFINED AT LINE 332
> USED AT LINE 994
NXTLIN: E609 DEFINED AT LINE 335
> USED AT LINE 333
> USED AT LINE 831
> USED AT LINE 847
MSLINE: E60D DEFINED AT LINE 337
> USED AT LINE 128
> USED AT LINE 823
REM09: E616 DEFINED AT LINE 341
> USED AT LINE 331
IMPLET: E617 DEFINED AT LINE 342
> USED AT LINE 339
IFAN: E61A DEFINED AT LINE 345
> USED AT LINE 338
FAN00: E621 DEFINED AT LINE 348
> USED AT LINE 376
> USED AT LINE 572
FAN04: E62C DEFINED AT LINE 354
> USED AT LINE 350
FAN05: E632 DEFINED AT LINE 357
> USED AT LINE 366
FAN07: E64D DEFINED AT LINE 371
> USED AT LINE 359
FAN08: E64F DEFINED AT LINE 372
> USED AT LINE 374
NXTNSP: E659 DEFINED AT LINE 379
> USED AT LINE 382
SKIPSP: E65B DEFINED AT LINE 380
> USED AT LINE 125
> USED AT LINE 150
> USED AT LINE 325
> USED AT LINE 345
> USED AT LINE 414
> USED AT LINE 432
> USED AT LINE 442
> USED AT LINE 455
> USED AT LINE 468
> USED AT LINE 555
> USED AT LINE 569
> USED AT LINE 617
> USED AT LINE 624
> USED AT LINE 634
> USED AT LINE 665
> USED AT LINE 674
> USED AT LINE 691
> USED AT LINE 764
> USED AT LINE 776
> USED AT LINE 793
> USED AT LINE 806
> USED AT LINE 857
> USED AT LINE 873
> USED AT LINE 891
> USED AT LINE 955
> USED AT LINE 968
> USED AT LINE 979
> USED AT LINE 1005
TSTHEX: E662 DEFINED AT LINE 386
> USED AT LINE 478
TSTLTR: E673 DEFINED AT LINE 397
> USED AT LINE 415
> USED AT LINE 419
TST03: E67B DEFINED AT LINE 401
> USED AT LINE 389
> USED AT LINE 391
> USED AT LINE 398
> USED AT LINE 406
> USED AT LINE 408
> USED AT LINE 420
TSTDIG: E67E DEFINED AT LINE 405
> USED AT LINE 386
> USED AT LINE 469
> USED AT LINE 502
TST05: E688 DEFINED AT LINE 410
> USED AT LINE 387
> USED AT LINE 400
TSTVAR: E68B DEFINED AT LINE 414
> USED AT LINE 751
> USED AT LINE 802
> USED AT LINE 948
> USED AT LINE 973
TSTV02: E6A1 DEFINED AT LINE 426
TSTV03: E6A3 DEFINED AT LINE 427
> USED AT LINE 416
USER: E6A4 DEFINED AT LINE 430
> USED AT LINE 580
USER02: E6B6 DEFINED AT LINE 438
> USED AT LINE 445
USER03: E6B9 DEFINED AT LINE 439
> USED AT LINE 434
USER05: E6CB DEFINED AT LINE 447
> USED AT LINE 437
TSTSNB: E6D6 DEFINED AT LINE 455
> USED AT LINE 958
TSN02: E6E9 DEFINED AT LINE 465
> USED AT LINE 460
TSTNBR: E6EA DEFINED AT LINE 468
> USED AT LINE 122
> USED AT LINE 457
> USED AT LINE 459
> USED AT LINE 758
> USED AT LINE 997
> USED AT LINE 1011
TSTN20: E6F8 DEFINED AT LINE 474
TSTN23: E6FE DEFINED AT LINE 477
> USED AT LINE 497
TSTN02: E721 DEFINED AT LINE 498
> USED AT LINE 470
TSTN03: E727 DEFINED AT LINE 501
> USED AT LINE 525
TSTN07: E754 DEFINED AT LINE 526
> USED AT LINE 479
> USED AT LINE 503
TSTN09: E758 DEFINED AT LINE 528
> USED AT LINE 473
TSTN11: E75B DEFINED AT LINE 530
> USED AT LINE 485
> USED AT LINE 510
> USED AT LINE 513
> USED AT LINE 515
> USED AT LINE 518
> USED AT LINE 521
TSTSTK: E762 DEFINED AT LINE 536
> USED AT LINE 204
> USED AT LINE 586
> USED AT LINE 773
> USED AT LINE 840
PEEK: E76D DEFINED AT LINE 543
> USED AT LINE 583
POKE: E77C DEFINED AT LINE 553
> USED AT LINE 1062
POKE05: E78B DEFINED AT LINE 559
> USED AT LINE 557
TSTFUN: E79E DEFINED AT LINE 569
> USED AT LINE 760
TSTF05: E7AD DEFINED AT LINE 575
> USED AT LINE 573
FUNT: E7AE DEFINED AT LINE 578
FLINE: E7C2 DEFINED AT LINE 590
> USED AT LINE 829
> USED AT LINE 837
> USED AT LINE 1018
FNDLIN: E7C4 DEFINED AT LINE 591
> USED AT LINE 159
> USED AT LINE 611
FND03: E7CB DEFINED AT LINE 595
> USED AT LINE 592
FND05: E7D3 DEFINED AT LINE 599
> USED AT LINE 596
FND07: E7DA DEFINED AT LINE 603
> USED AT LINE 599
FND09: E7E0 DEFINED AT LINE 606
> USED AT LINE 608
RELEXP: E7EC DEFINED AT LINE 614
> USED AT LINE 820
REL03: E80C DEFINED AT LINE 630
> USED AT LINE 621
REL05: E817 DEFINED AT LINE 635
> USED AT LINE 626
REL06: E81B DEFINED AT LINE 637
> USED AT LINE 619
REL07: E81F DEFINED AT LINE 639
> USED AT LINE 629
> USED AT LINE 636
REL08: E837 DEFINED AT LINE 653
> USED AT LINE 651
REL09: E83D DEFINED AT LINE 657
> USED AT LINE 655
EXPR: E843 DEFINED AT LINE 663
> USED AT LINE 440
> USED AT LINE 560
> USED AT LINE 614
> USED AT LINE 640
> USED AT LINE 780
> USED AT LINE 811
> USED AT LINE 827
> USED AT LINE 834
> USED AT LINE 869
EXPR02: E852 DEFINED AT LINE 670
> USED AT LINE 676
EXPR03: E854 DEFINED AT LINE 671
> USED AT LINE 669
EXPR04: E856 DEFINED AT LINE 672
> USED AT LINE 684
EXPR05: E865 DEFINED AT LINE 679
> USED AT LINE 667
EXPR06: E86F DEFINED AT LINE 685
> USED AT LINE 631
> USED AT LINE 678
TERM: E872 DEFINED AT LINE 689
> USED AT LINE 671
> USED AT LINE 680
TERM03: E877 DEFINED AT LINE 691
> USED AT LINE 731
> USED AT LINE 748
TERM05: E885 DEFINED AT LINE 698
> USED AT LINE 695
DIV05: E8A1 DEFINED AT LINE 712
> USED AT LINE 723
DIV07: E8AB DEFINED AT LINE 717
> USED AT LINE 713
DIV09: E8AD DEFINED AT LINE 718
> USED AT LINE 716
TERM06: E8C2 DEFINED AT LINE 730
> USED AT LINE 727
TERM07: E8C6 DEFINED AT LINE 732
> USED AT LINE 693
MULT: E8CA DEFINED AT LINE 734
FACT: E8E5 DEFINED AT LINE 751
> USED AT LINE 689
> USED AT LINE 699
> USED AT LINE 733
FACT02: E8F2 DEFINED AT LINE 757
> USED AT LINE 759
> USED AT LINE 761
FACT03: E8F3 DEFINED AT LINE 758
> USED AT LINE 752
PAREXP: E8FD DEFINED AT LINE 762
> USED AT LINE 543
> USED AT LINE 553
FACT05: E90D DEFINED AT LINE 770
> USED AT LINE 767
> USED AT LINE 778
ARGONE: E910 DEFINED AT LINE 773
> USED AT LINE 430
> USED AT LINE 762
FACT04: E918 DEFINED AT LINE 776
> USED AT LINE 774
ABSX: E924 DEFINED AT LINE 783
> USED AT LINE 704
> USED AT LINE 706
NEGX: E928 DEFINED AT LINE 785
> USED AT LINE 729
NEG05: E930 DEFINED AT LINE 789
> USED AT LINE 784
> USED AT LINE 787
TSTEOL: E931 DEFINED AT LINE 792
> USED AT LINE 328
> USED AT LINE 561
> USED AT LINE 812
> USED AT LINE 828
> USED AT LINE 835
> USED AT LINE 854
> USED AT LINE 1014
TEOL03: E93D DEFINED AT LINE 797
> USED AT LINE 795
LET: E942 DEFINED AT LINE 802
> USED AT LINE 342
> USED AT LINE 1047
LET03: E94A DEFINED AT LINE 805
> USED AT LINE 803
LET05: E956 DEFINED AT LINE 810
> USED AT LINE 808
IF: E968 DEFINED AT LINE 820
> USED AT LINE 1050
IF03: E971 DEFINED AT LINE 824
> USED AT LINE 822
GOTO: E974 DEFINED AT LINE 827
> USED AT LINE 1053
GOSUB: E981 DEFINED AT LINE 834
> USED AT LINE 1056
GOSB04: E98D DEFINED AT LINE 839
> USED AT LINE 830
GOSB03: E990 DEFINED AT LINE 840
> USED AT LINE 838
GOSB05: E998 DEFINED AT LINE 843
> USED AT LINE 841
RETURN: E931 DEFINED AT LINE 854
> USED AT LINE 1059
PRINT: E9AC DEFINED AT LINE 857
> USED AT LINE 1065
> USED AT LINE 1089
PR01: E9AF DEFINED AT LINE 858
> USED AT LINE 893
PR02: E9C5 DEFINED AT LINE 869
> USED AT LINE 865
PR03: E9CE DEFINED AT LINE 873
> USED AT LINE 868
PR04: E9E0 DEFINED AT LINE 881
> USED AT LINE 863
> USED AT LINE 879
PR05: E9E9 DEFINED AT LINE 885
> USED AT LINE 859
> USED AT LINE 875
PR06: E9EB DEFINED AT LINE 886
> USED AT LINE 889
PR07: E9F4 DEFINED AT LINE 890
> USED AT LINE 861
> USED AT LINE 877
PR08: E9FD DEFINED AT LINE 894
> USED AT LINE 884
PRQ01: EA02 DEFINED AT LINE 898
> USED AT LINE 904
PRNTQS: EA05 DEFINED AT LINE 899
> USED AT LINE 867
PRQ03: EA0E DEFINED AT LINE 903
> USED AT LINE 901
PRNTN: EA13 DEFINED AT LINE 907
> USED AT LINE 871
PRN03: EA23 DEFINED AT LINE 916
> USED AT LINE 908
PRN05: EA26 DEFINED AT LINE 917
> USED AT LINE 921
PRN07: EA32 DEFINED AT LINE 922
> USED AT LINE 919
> USED AT LINE 936
> USED AT LINE 945
PRN09: EA34 DEFINED AT LINE 923
> USED AT LINE 927
PRN11: EA3F DEFINED AT LINE 928
> USED AT LINE 924
PRN13: EA53 DEFINED AT LINE 937
> USED AT LINE 934
PRNPT: EA54 DEFINED AT LINE 938
PRNPTO: EA5C DEFINED AT LINE 942
PRNT4: EA5E DEFINED AT LINE 944
> USED AT LINE 268
> USED AT LINE 1027
INPUT: EA63 DEFINED AT LINE 948
> USED AT LINE 1068
IN03: EA6C DEFINED AT LINE 952
> USED AT LINE 957
> USED AT LINE 963
IN05: EA74 DEFINED AT LINE 955
> USED AT LINE 981
> USED AT LINE 983
IN07: EA8B DEFINED AT LINE 964
> USED AT LINE 959
IN09: EA9D DEFINED AT LINE 972
> USED AT LINE 970
IN11: EAA4 DEFINED AT LINE 975
> USED AT LINE 949
IN13: EAA7 DEFINED AT LINE 976
> USED AT LINE 974
RMESS: EAB8 DEFINED AT LINE 984
RUN: EAC1 DEFINED AT LINE 988
> USED AT LINE 1080
RUN01: EAC5 DEFINED AT LINE 990
> USED AT LINE 992
LIST: EACF DEFINED AT LINE 997
> USED AT LINE 1083
LIST03: EADC DEFINED AT LINE 1004
> USED AT LINE 998
LIST05: EAE9 DEFINED AT LINE 1010
> USED AT LINE 1007
LIST07: EAF3 DEFINED AT LINE 1014
> USED AT LINE 1003
> USED AT LINE 1009
> USED AT LINE 1012
LIST09: EAFF DEFINED AT LINE 1019
> USED AT LINE 1037
LIST10: EB2B DEFINED AT LINE 1038
> USED AT LINE 1020
LIST11: EB32 DEFINED AT LINE 1041
> USED AT LINE 1023
VERBT: EB37 DEFINED AT LINE 1045
TSTBRK: EB9C DEFINED AT LINE 1093
> USED AT LINE 337
> USED AT LINE 1036
GETCHR: EBA0 DEFINED AT LINE 1095
> USED AT LINE 279
GETC05: EBA9 DEFINED AT LINE 1099
> USED AT LINE 1094
> USED AT LINE 1097
PUTCHR: EBAA DEFINED AT LINE 1100
> USED AT LINE 120
> USED AT LINE 234
> USED AT LINE 266
> USED AT LINE 270
> USED AT LINE 289
> USED AT LINE 301
> USED AT LINE 314
> USED AT LINE 316
> USED AT LINE 887
> USED AT LINE 898
> USED AT LINE 914
> USED AT LINE 931
> USED AT LINE 953
> USED AT LINE 1030
> USED AT LINE 1040
INEEE: EBAF DEFINED AT LINE 1104
> USED AT LINE 1095
> USED AT LINE 1105
OUTEEE: EBB9 DEFINED AT LINE 1109
> USED AT LINE 1101
OUT01: EBBB DEFINED AT LINE 1110
> USED AT LINE 1112
BRKEEE: EBC8 DEFINED AT LINE 1116
> USED AT LINE 1093
> USED AT LINE 1104
BRK03: EBCA DEFINED AT LINE 1117
> USED AT LINE 1121
BRK05: EBD6 DEFINED AT LINE 1122
> USED AT LINE 1119
INTEEE: EBE5 DEFINED AT LINE 1130
> USED AT LINE 98
> USED AT LINE 102
END: EBE6 DEFINED AT LINE 1137
> USED AT LINE 1074
> USED AT LINE 1077
;NAM TB01V137
;* WRITTEN 20-OCT-77 BY JOHN BYRNS
;* REVISED 30-DEC-77
;* REVISED 18-JAN-78
;* REVISED 10-APR-78
;* REVISED 08-MAY-79 TO ELIMINATE USE OF SP
;* REVISED 24-JAN-80 TO USE 6801 ON CHIP RAM
;* REVISED 26-JAN-80 FOR NEW 6801 INSTRUCTIONS
;* REVISED 24-JUL-81 FOR WHISTON BOARD
;* REVISED 24-SEP-81 INCLUDE USER FUNCTION
;* REVISED 08-APR-82 MAKE STANDALONE INCLUDE HEX CONSTANTS AND MEM FUNCTION
;* REVISED 21-NOV-84 FOR 6809
;* REVISED FEB 94 ADAPTED TO SIMULATOR AND BUGFIXES BY L.C. BENSCHOP.
;*
.engine kilo
EOL: EQU $04
ETX: EQU $03
SPACE: EQU $20
CR: EQU $0D
LF: EQU $0A
BS: EQU $08
CAN: EQU $18
BELL: EQU $07
FILL: EQU $00
DEL: EQU $7F
BSIZE: EQU 73
STKCUS: EQU 48
;*
bACIA = $83FE
RMCR: EQU bACIA
TRCS: EQU bACIA
RECEV: EQU bACIA+1
TRANS: EQU bACIA+1
CNTL1: EQU $03
CNTL2: EQU $15
RDRF: EQU $01
ORFE: EQU $20
TDRE: EQU $02
;* EDIT THE FOLLOWING EQUATES TO REFLECT THE
;* DESIRED ROM AND RAM LAYOUT
LORAM: EQU $0080 ;ADDRESS OF DIRECT PAGE SCRATCH RAM
BUFFER: EQU $0200 ;ADDRESS OF MAIN RAM
RAMSIZ: EQU $2000 ;SIZE OF MAIN RAM
ROMADR: EQU $f000 ;ADDRESS OF TINY BASIC ROM
;*
RAMBEG: EQU BUFFER+BSIZE
RAMEND: EQU BUFFER+RAMSIZ
;*
RAMPAT: EQU $AA0F
ROMPAT: EQU $F055
;*
; ORG LORAM
.bsseg
USRBAS: RMB 2
USRTOP: RMB 2
STKLIM: RMB 2
STKTOP: RMB 2
CURSOR: RMB 2
SAVESP: RMB 2
LINENB: RMB 2
SCRTCH: RMB 2
CHAR: RMB 2
ZONE: RMB 1
MODE: RMB 1
RESRVD: RMB 1
LOEND: EQU $
;*
.cseg
;;; ORG ROMADR
.align 256
.ent $
BASIC: JMP SETUP
.cstr "MOD9BASIC"
WARMS LDS STKTOP
JSR INTEEE
BRA WMS05
SETUP LDS #RAMEND-52
SET03 STS STKTOP
JSR INTEEE
CLEAR LDD #RAMBEG
STD USRBAS
STD USRTOP
CLR02 STD STKLIM
WMS05 JSR CRLF
LDX #VSTR
JSR PUTSTR
CMDB LDS STKTOP
CLR MODE
JSR CRLF
LDX USRBAS
STX CURSOR
CMDE LDX #0000
STX LINENB
TST MODE
BNE CMD01
LDA #":"
JSR PUTCHR
CMD01 JSR GETLIN
JSR TSTNBR
BCC CMD02
BVS CMD05
JSR SKIPSP
CMPA #EOL
BEQ CMDE
JSR MSLINE
BRA CMDB
CMD02 PSHS X
LDX USRTOP
CMPX STKLIM
PULS X
BEQ CMD03
JMP ERRORR
CMD03 ADDD #0
BEQ CMD05
CMD04 PSHS D
SUBD #9999
PULS D
BHI CMD05
BSR EDITOR
BRA CMDE
CMD05 JMP ERRORS
VSTR DB "TINY V1.37"
FCB EOL
;******************************
;******************************
EDITOR PSHS D
JSR SKIPSP
STX SCRTCH
LDA 0,S
LDX CURSOR
CMPX USRTOP
BEQ ED00
CMPD 0,X
BCC ED01
ED00 LDX USRBAS
ED01 JSR FNDLIN
STX CURSOR
BCS ED04
STX SAVESP
LEAX 2,X
ED02 LDA ,X+
CMPA #EOL
BNE ED02
ED03 CMPX USRTOP
BEQ ED35
LDA ,X+
STX CHAR
LDX SAVESP
STA ,X+
STX SAVESP
LDX CHAR
BRA ED03
ED35 LDX SAVESP
STX USRTOP
STX STKLIM
ED04 LDX SCRTCH
LDB #-1
ED05 INCB
LDA ,X+
CMPA #EOL
BNE ED05
TSTB
BNE ED55
LEAS 2,S
RTS
ED55 LEAX -1,X
ADDB #4
ED06 LEAX -1,X
DECB
LDA 0,X
CMPA #SPACE
BEQ ED06
LDA #EOL
STA 1,X
CLRA
LDX USRTOP
STX CHAR
ADDD USRTOP
STD USRTOP
STD STKLIM
JSR TSTSTK
BCC ED07
STX USRTOP
STX STKLIM
JMP ERRORF
ED07 LDX USRTOP
ED08 STX SAVESP
LDX CHAR
CMPX CURSOR
BEQ ED09
LDA ,-X
STX CHAR
LDX SAVESP
STA ,-X
BRA ED08
ED09 PULS D
LDX CURSOR
STD ,X++
STX CHAR
ED10 LDX SCRTCH
LDA ,X+
STX SCRTCH
LDX CHAR
STA ,X+
STX CHAR
CMPA #EOL
BNE ED10
RTS
;******************************
;******************************
PUTS01 JSR PUTCHR
LEAX 1,X
PUTSTR LDA 0,X
CMPA #EOL
BNE PUTS01
RTS
;******************************
;******************************
CRLF LDX #CRLFST
BSR PUTSTR
CLR ZONE
RTS
CRLFST FCB CR,LF,DEL,FILL,FILL,FILL,EOL
;******************************
;******************************
ERRORF BSR ER01
DB "SORRY"
FCB EOL
ERRORS BSR ER01
DB "WHAT ?"
FCB EOL
ERRORR BSR ER01
DB "HOW ?"
FCB EOL
BREAK BSR ER01
DB "BREAK"
FCB EOL
END BSR ER01
DB "STOP"
FCB EOL
ER01 BSR CRLF
LDA #BELL
JSR PUTCHR
LDD LINENB
JSR PRNT4
LDA #SPACE
JSR PUTCHR
PULS X
BSR PUTSTR
BSR CRLF
JMP CMDB
;******************************
;******************************
GL00 BSR CRLF
GETLIN LDX #BUFFER
GL03 JSR GETCHR
CMPA #SPACE
BCS GL05
CMPA #$7F
BEQ GL03
CMPX #BUFFER+BSIZE-1
BNE GL04
LDA #BELL
BRA GL02
GL04 STA ,X+
GL02 JSR PUTCHR
BRA GL03
GL05 CMPA #BS
BEQ GL07
CMPA #CAN
BEQ GL00
CMPA #LF
BEQ GL09
CMPA #CR
BNE GL03
TST MODE
BEQ GL06
JSR PUTCHR
BRA GL08
GL06 PSHS X
JSR CRLF
PULS X
GL08 LDA #EOL
STA 0,X
LDX #BUFFER
RTS
GL07 CMPX #BUFFER
BEQ GL03
LEAX -1,X
LDA #BS
JSR PUTCHR
LDA #SPACE
JSR PUTCHR
LDA #BS
BRA GL02
GL09 ORCC #$01
ROR MODE
BRA GL02
;******************************
;******************************
REM00 LEAX 1,X
REM BSR SKIPSP
CMPA #EOL
BNE REM00
ENDSMT JSR TSTEOL
ENDS02 LDA LINENB
ORA LINENB+1
BEQ REM09
REM05 CMPX USRTOP
BNE NXTLIN
JMP ERRORR
NXTLIN LDD ,X++
STD LINENB
MSLINE JSR TSTBRK
BSR IFAN
BCS IMPLET
PSHS D
REM09 RTS
IMPLET JMP LET
;******************************
;******************************
IFAN BSR SKIPSP
STX CURSOR
LDX #VERBT
FAN00: LDA ,X+
CMPA #EOL
BNE FAN04
LDX CURSOR
ORCC #$01
RTS
FAN04 STX CHAR
LDX CURSOR
STX SCRTCH
FAN05 LDX SCRTCH
CMPA 0,X
BNE FAN07
LEAX 1,X
STX SCRTCH
LDX CHAR
LDA ,X+
STX CHAR
CMPA #EOL
BNE FAN05
LDD 0,X
LDX SCRTCH
ANDCC #$FE
RTS
FAN07 LDX CHAR
FAN08 LDA ,X+
CMPA #EOL
BNE FAN08
LEAX 2,X
BRA FAN00
;******************************
;******************************
NXTNSP LEAX 1,X
SKIPSP LDA 0,X
CMPA #SPACE
BEQ NXTNSP
RTS
;******************************
;******************************
TSTHEX BSR TSTDIG
BCC TST05
CMPA #"A"
BCS TST03
CMPA #"F"
BHI TST03
SUBA #"A"-10
ANDCC #$FE
RTS
;******************************
;******************************
TSTLTR CMPA #"A"
BCS TST03
CMPA #"Z"
BLS TST05
TST03 ORCC #$01
RTS
;******************************
;******************************
TSTDIG CMPA #"0"
BCS TST03
CMPA #"9"
BHI TST03
SUBA #"0"
TST05 ANDCC #$FE
RTS
;******************************
;******************************
TSTVAR BSR SKIPSP
BSR TSTLTR
BCS TSTV03
TFR A,B
LDA 1,X
BSR TSTLTR
BCC TST03
LEAX 1,X
SUBB #"A"
ASLB
CLRA
ADDD STKTOP
TSTV02 ANDCC #$FE
TSTV03 RTS
;******************************
;******************************
USER JSR ARGONE
PSHS D
JSR SKIPSP
CMPA #","
BEQ USER03
CMPA #")"
ORCC #$01
BEQ USER05
USER02 JMP ERRORS
USER03 LEAX 1,X
JSR EXPR
PSHS A
JSR SKIPSP
CMPA #")"
PULS A
BNE USER02
ANDCC #$FE
USER05 LEAX 1,X
STX CURSOR
JSR [,S++]
LDX CURSOR
ANDCC #$FE
RTS
;******************************
;******************************
TSTSNB JSR SKIPSP
CMPA #"-"
BNE TSTNBR
LEAX 1,X
BSR TSTNBR
BCS TSN02
NEGA
NEGB
SBCA #0
ANDCC #$FC
TSN02 RTS
;******************************
;******************************
TSTNBR JSR SKIPSP
JSR TSTDIG
BCC TSTN02
CMPA #"$"
ORCC #$01
BNE TSTN09
TSTN20 LEAX 1,X
CLR ,-S
CLR ,-S
TSTN23 LDA 0,X
JSR TSTHEX
BCS TSTN07
LEAX 1,X
PSHS X
PSHS A
LDD 3,S
BITA #$F0
BNE TSTN11
ASLB
ROLA
ASLB
ROLA
ASLB
ROLA
ASLB
ROLA
ADDB ,S+
STD 2,S
PULS X
BRA TSTN23
TSTN02 LEAX 1,X
PSHS A
CLR ,-S
TSTN03 LDA 0,X
JSR TSTDIG
BCS TSTN07
LEAX 1,X
PSHS X
PSHS A
LDD 3,S
ASLB
ROLA
BVS TSTN11
ASLB
ROLA
BVS TSTN11
ADDD 3,S
BVS TSTN11
ASLB
ROLA
BVS TSTN11
ADDB 0,S
ADCA #0
BVS TSTN11
STD 3,S
LEAS 1,S
PULS X
BRA TSTN03
TSTN07 PULS D
ANDCC #$FE
TSTN09 ANDCC #$FD
RTS
TSTN11 LDX 1,S
LEAS 5,S
ORCC #$03
RTS
;******************************
;******************************
TSTSTK STS SAVESP
LDD SAVESP
SUBD #STKCUS
SUBD STKLIM
RTS
;******************************
;******************************
PEEK JSR PAREXP
PSHS D
PSHS X
LDB [2,S]
PULS X
LEAS 2,S
CLRA
RTS
;******************************
;******************************
POKE JSR PAREXP
PSHS D
JSR SKIPSP
CMPA #"="
BEQ POKE05
JMP ERRORS
POKE05 LEAX 1,X
JSR EXPR
JSR TSTEOL
PSHS X
STB [2,S]
PULS X
LEAS 2,S
JMP ENDS02
;******************************
;******************************
TSTFUN JSR SKIPSP
STX CURSOR
LDX #FUNT
JSR FAN00
BCS TSTF05
PSHS D
TSTF05 RTS
;******************************
;******************************
FUNT DB "USR"
FCB EOL
FDB USER
DB "PEEK"
FCB EOL
FDB PEEK
DB "MEM"
FCB EOL
FDB TSTSTK
FCB EOL
;******************************
;******************************
FLINE LDX USRBAS
FNDLIN CMPX USRTOP
BNE FND03
ORCC #$03
RTS
FND03 CMPD 0,X
BNE FND05
ANDCC #$FC
RTS
FND05 BCC FND07
ORCC #$01
ANDCC #$FD
RTS
FND07 PSHS A
LDA #EOL
LEAX 1,X
FND09 LEAX 1,X
CMPA 0,X
BNE FND09
PULS A
LEAX 1,X
BRA FNDLIN
;******************************
;******************************
RELEXP BSR EXPR
PSHS D
CLRB
JSR SKIPSP
CMPA #"="
BEQ REL06
CMPA #"<"
BNE REL03
LEAX 1,X
INCB
JSR SKIPSP
CMPA #">"
BNE REL05
LEAX 1,X
ADDB #4
BRA REL07
REL03 CMPA #">"
BNE EXPR06
LEAX 1,X
ADDB #4
JSR SKIPSP
REL05 CMPA #"="
BNE REL07
REL06 LEAX 1,X
ADDB #2
REL07 PSHS B
BSR EXPR
PSHS X
SUBD 3,S
TFR CC,A
LSRA
TFR A,B
ASLA
ASLA
PSHS B
ADDA ,S+
ANDA #$06
BNE REL08
INCA
REL08 CLRB
ANDA 2,S
BEQ REL09
COMB
REL09 CLRA
PULS X
LEAS 3,S
RTS
;******************************
;******************************
EXPR CLR ,-S
CLR ,-S
JSR SKIPSP
CMPA #"-"
BEQ EXPR05
CMPA #"+"
BNE EXPR03
EXPR02 LEAX 1,X
EXPR03 BSR TERM
EXPR04 ADDD 0,S
STD 0,S
JSR SKIPSP
CMPA #"+"
BEQ EXPR02
CMPA #"-"
BNE EXPR06
EXPR05 LEAX 1,X
BSR TERM
NEGA
NEGB
SBCA #0
BRA EXPR04
EXPR06 PULS D
RTS
;******************************
;******************************
TERM JSR FACT
PSHS D
TERM03 JSR SKIPSP
CMPA #"*"
BEQ TERM07
CMPA #"/"
BEQ TERM05
PULS D
RTS
TERM05 LEAX 1,X
BSR FACT
PSHS X
LEAX 2,S
PSHS D
EORA 0,X
JSR ABSX
LEAX 0,S
JSR ABSX
PSHS A
LDA #17
PSHS A
CLRA
CLRB
DIV05 SUBD 2,S
BCC DIV07
ADDD 2,S
ANDCC #$FE
BRA DIV09
DIV07 ORCC #$01
DIV09 ROL 7,S
ROL 6,S
ROLB
ROLA
DEC 0,S
BNE DIV05
LDA 1,S
LEAS 4,S
TSTA
BPL TERM06
LEAX 2,S
BSR NEGX
TERM06 PULS X
BRA TERM03
TERM07 LEAX 1,X
BSR FACT
MULT PSHS B
LDB 2,S
MUL
LDA 1,S
STB 1,S
LDB 0,S
MUL
LDA 2,S
STB 2,S
PULS B
MUL
ADDA 0,S
ADDA 1,S
STD 0,S
BRA TERM03
;******************************
;******************************
FACT JSR TSTVAR
BCS FACT03
PSHS X
TFR D,X
LDD 0,X
PULS X
FACT02 RTS
FACT03 JSR TSTNBR
BCC FACT02
JSR TSTFUN
BCC FACT02
PAREXP BSR ARGONE
PSHS A
JSR SKIPSP
CMPA #")"
PULS A
BNE FACT05
LEAX 1,X
RTS
FACT05 JMP ERRORS
;******************************
;******************************
ARGONE JSR TSTSTK
BCC FACT04
JMP ERRORF
FACT04 JSR SKIPSP
CMPA #"("
BNE FACT05
LEAX 1,X
JMP EXPR
;******************************
;******************************
ABSX TST 0,X
BPL NEG05
NEGX NEG 0,X
NEG 1,X
BCC NEG05
DEC 0,X
NEG05 RTS
;******************************
;******************************
TSTEOL PSHS A
JSR SKIPSP
CMPA #EOL
BEQ TEOL03
JMP ERRORS
TEOL03 LEAX 1,X
PULS A
RTS
;******************************
;******************************
LET JSR TSTVAR
BCC LET03
JMP ERRORS
LET03 PSHS D
JSR SKIPSP
CMPA #"="
BEQ LET05
JMP ERRORS
LET05 LEAX 1,X
JSR EXPR
BSR TSTEOL
STX CURSOR
PULS X
STD 0,X
LDX CURSOR
JMP ENDS02
;******************************
;******************************
IF: JSR RELEXP
TSTB
BEQ IF03
JMP MSLINE
IF03: JMP REM
;******************************
;******************************
GOTO JSR EXPR
BSR TSTEOL
JSR FLINE
BCS GOSB04
JMP NXTLIN
;******************************
;******************************
GOSUB JSR EXPR
BSR TSTEOL
STX CURSOR
JSR FLINE
BCC GOSB03
GOSB04 JMP ERRORR
GOSB03 JSR TSTSTK
BCC GOSB05
JMP ERRORF
GOSB05 LDD CURSOR
PSHS D
LDD LINENB
PSHS D
JSR NXTLIN
PULS D
STD LINENB
PULS X
JMP ENDS02
;******************************
;******************************
RETURN EQU TSTEOL
;******************************
;******************************
PRINT JSR SKIPSP
PR01 CMPA #","
BEQ PR05
CMPA #";"
BEQ PR07
CMPA #EOL
BEQ PR04
CMPA #$22
BNE PR02
LEAX 1,X
BSR PRNTQS
BRA PR03
PR02 JSR EXPR
PSHS X
BSR PRNTN
PULS X
PR03 JSR SKIPSP
CMPA #","
BEQ PR05
CMPA #";"
BEQ PR07
CMPA #EOL
BEQ PR04
JMP ERRORS
PR04 PSHS X
JSR CRLF
PULS X
BRA PR08
PR05 LDB #$7
PR06 LDA #SPACE
JSR PUTCHR
BITB ZONE
BNE PR06
PR07 LEAX 1,X
JSR SKIPSP
CMPA #EOL
BNE PR01
PR08 LEAX 1,X
JMP ENDS02
;*
;*
PRQ01 JSR PUTCHR
PRNTQS LDA ,X+
CMPA #EOL
BNE PRQ03
JMP ERRORS
PRQ03 CMPA #$22
BNE PRQ01
RTS
;*
PRNTN TSTA
BPL PRN03
NEGA
NEGB
SBCA #0
PSHS A
LDA #"-"
JSR PUTCHR
PULS A
PRN03 LDX #PRNPT-2
PRN05 LEAX 2,X
CMPD 0,X
BCC PRN07
CMPX #PRNPTO
BNE PRN05
PRN07 CLR CHAR
PRN09 CMPD 0,X
BCS PRN11
SUBD 0,X
INC CHAR
BRA PRN09
PRN11 PSHS A
LDA #"0"
ADDA CHAR
JSR PUTCHR
PULS A
CMPX #PRNPTO
BEQ PRN13
LEAX 2,X
BRA PRN07
PRN13 RTS
PRNPT FDB 10000
FDB 1000
FDB 100
FDB 10
PRNPTO FDB 1
;*
PRNT4 LDX #PRNPT+2
BRA PRN07
;******************************
;******************************
INPUT JSR TSTVAR
BCS IN11
PSHS D
STX CURSOR
IN03 LDA #"?"
JSR PUTCHR
JSR GETLIN
IN05 JSR SKIPSP
CMPA #EOL
BEQ IN03
JSR TSTSNB
BCC IN07
LDX #RMESS
JSR PUTSTR
JSR CRLF
BRA IN03
IN07 STX SCRTCH
PULS X
STD 0,X
LDX CURSOR
JSR SKIPSP
CMPA #","
BEQ IN09
JMP ENDSMT
IN09 LEAX 1,X
JSR TSTVAR
BCC IN13
IN11 JMP ERRORS
IN13 PSHS D
PSHS X
LDX SCRTCH
JSR SKIPSP
CMPA #","
BNE IN05
LEAX 1,X
BRA IN05
RMESS DB "RE-ENTER"
FCB EOL
;******************************
;******************************
RUN LDX STKTOP
LDA #52
RUN01 CLR ,X+
DECA
BNE RUN01
LDX USRBAS
JMP REM05
;******************************
;******************************
LIST JSR TSTNBR
BCC LIST03
CLRA
CLRB
STD CURSOR
LDA #$7F
BRA LIST07
LIST03 STD CURSOR
JSR SKIPSP
CMPA #","
BEQ LIST05
LDA CURSOR
BRA LIST07
LIST05 LEAX 1,X
JSR TSTNBR
BCC LIST07
JMP ERRORS
LIST07 JSR TSTEOL
PSHS D
LDD CURSOR
STX CURSOR
JSR FLINE
LIST09 CMPX USRTOP
BEQ LIST10
PULS D
CMPD 0,X
BCS LIST11
PSHS D
LDD ,X++
PSHS X
JSR PRNT4
PULS X
LDA #SPACE
JSR PUTCHR
JSR PUTSTR
LEAX 1,X
PSHS X
JSR CRLF
PULS X
JSR TSTBRK
BRA LIST09
LIST10 LEAS 2,S
LDA #ETX
JSR PUTCHR
LIST11 LDX CURSOR
JMP ENDS02
;******************************
;******************************
VERBT DB "LET"
FCB EOL
FDB LET
DB "IF"
FCB EOL
FDB IF
DB "GOTO"
FCB EOL
FDB GOTO
DB "GOSUB"
FCB EOL
FDB GOSUB
DB "RETURN"
FCB EOL
FDB RETURN
DB "POKE"
FCB EOL
FDB POKE
DB "PRINT"
FCB EOL
FDB PRINT
DB "INPUT"
FCB EOL
FDB INPUT
DB "REM"
FCB EOL
FDB REM
DB "STOP"
FCB EOL
FDB END
DB "END"
FCB EOL
FDB END
DB "RUN"
FCB EOL
FDB RUN
DB "LIST"
FCB EOL
FDB LIST
DB "NEW"
FCB EOL
FDB CLEAR
DB "?"
FCB EOL
FDB PRINT
FCB EOL
;******************************
;******************************
TSTBRK bsr BRKEEE
beq GETC05
GETCHR bsr INEEE
CMPA #ETX
BNE GETC05
JMP BREAK
GETC05 RTS
PUTCHR INC ZONE
JMP OUTEEE
;******************************
;******************************
INEEE BSR BRKEEE
BEQ INEEE
LDA RECEV
ANDA #$7F
RTS
OUTEEE PSHS A
OUT01 LDA TRCS
BITA #TDRE
BEQ OUT01
PULS A
STA TRANS
RTS
BRKEEE PSHS A
BRK03 LDA TRCS
BITA #ORFE
BEQ BRK05
LDA RECEV
BRA BRK03
BRK05 BITA #RDRF
PULS A
RTS
;*
LDA #CNTL1
STA RMCR
LDA #CNTL2
STA TRCS
INTEEE EQU $
RTS
;******************************
;******************************
END:
;NAM TB01V137
;* WRITTEN 20-OCT-77 BY JOHN BYRNS
;* REVISED 30-DEC-77
;* REVISED 18-JAN-78
;* REVISED 10-APR-78
;* REVISED 08-MAY-79 TO ELIMINATE USE OF SP
;* REVISED 24-JAN-80 TO USE 6801 ON CHIP RAM
;* REVISED 26-JAN-80 FOR NEW 6801 INSTRUCTIONS
;* REVISED 24-JUL-81 FOR WHISTON BOARD
;* REVISED 24-SEP-81 INCLUDE USER FUNCTION
;* REVISED 08-APR-82 MAKE STANDALONE INCLUDE HEX CONSTANTS AND MEM FUNCTION
;* REVISED 21-NOV-84 FOR 6809
;* REVISED FEB 94 ADAPTED TO SIMULATOR AND BUGFIXES BY L.C. BENSCHOP.
;*
;.engine kilo
EOL: EQU $04
ETX: EQU $03
SPACE: EQU $20
CR: EQU $0D
LF: EQU $0A
BS: EQU $08
CAN: EQU $18
BELL: EQU $07
FILL: EQU $00
DEL: EQU $7F
BSIZE: EQU 73
STKCUS: EQU 48
;*
bACIA equ $83FE
RMCR EQU bACIA
TRCS EQU bACIA
RECEV EQU bACIA+1
TRANS EQU bACIA+1
CNTL1 EQU $03
CNTL2 EQU $15
RDRF EQU $01
ORFE EQU $20
TDRE EQU $02
;* EDIT THE FOLLOWING EQUATES TO REFLECT THE
;* DESIRED ROM AND RAM LAYOUT
LORAM EQU $0080 ;ADDRESS OF DIRECT PAGE SCRATCH RAM
BUFFER EQU $0200 ;ADDRESS OF MAIN RAM
RAMSIZ EQU $2000 ;SIZE OF MAIN RAM
ROMADR EQU $f000 ;ADDRESS OF TINY BASIC ROM
;*
RAMBEG EQU BUFFER+BSIZE
RAMEND EQU BUFFER+RAMSIZ
;*
RAMPAT EQU $AA0F
ROMPAT EQU $F055
;*
; ORG LORAM
.bsseg
USRBAS: RMB 2
USRTOP: RMB 2
STKLIM: RMB 2
STKTOP: RMB 2
CURSOR: RMB 2
SAVESP: RMB 2
LINENB: RMB 2
SCRTCH: RMB 2
CHAR: RMB 2
ZONE: RMB 1
MODE: RMB 1
RESRVD: RMB 1
LOEND: EQU $
;*
.cseg
;;; ORG ROMADR
.align 256
.ent $
.block
BASIC: JMP SETUP
.cstr "MOD9BASIC"
WARMS LDS STKTOP
JSR INTEEE
BRA WMS05
SETUP LDS #RAMEND-52
SET03 STS STKTOP
JSR INTEEE
CLEAR LDD #RAMBEG
STD USRBAS
STD USRTOP
CLR02 STD STKLIM
WMS05 JSR CRLF
LDX #VSTR
JSR PUTSTR
CMDB LDS STKTOP
CLR MODE
JSR CRLF
LDX USRBAS
STX CURSOR
CMDE LDX #0000
STX LINENB
TST MODE
BNE CMD01
LDA #":"
JSR PUTCHR
CMD01 JSR GETLIN
JSR TSTNBR
BCC CMD02
BVS CMD05
JSR SKIPSP
CMPA #EOL
BEQ CMDE
JSR MSLINE
BRA CMDB
CMD02 PSHS X
LDX USRTOP
CMPX STKLIM
PULS X
BEQ CMD03
JMP ERRORR
CMD03 ADDD #0
BEQ CMD05
CMD04 PSHS D
SUBD #9999
PULS D
BHI CMD05
BSR EDITOR
BRA CMDE
CMD05 JMP ERRORS
VSTR DB "TINY V1.37"
FCB EOL
;******************************
;******************************
EDITOR PSHS D
JSR SKIPSP
STX SCRTCH
LDA 0,S
LDX CURSOR
CMPX USRTOP
BEQ ED00
CMPD 0,X
BCC ED01
ED00 LDX USRBAS
ED01 JSR FNDLIN
STX CURSOR
BCS ED04
STX SAVESP
LEAX 2,X
ED02 LDA ,X+
CMPA #EOL
BNE ED02
ED03 CMPX USRTOP
BEQ ED35
LDA ,X+
STX CHAR
LDX SAVESP
STA ,X+
STX SAVESP
LDX CHAR
BRA ED03
ED35 LDX SAVESP
STX USRTOP
STX STKLIM
ED04 LDX SCRTCH
LDB #-1
ED05 INCB
LDA ,X+
CMPA #EOL
BNE ED05
TSTB
BNE ED55
LEAS 2,S
RTS
ED55 LEAX -1,X
ADDB #4
ED06 LEAX -1,X
DECB
LDA 0,X
CMPA #SPACE
BEQ ED06
LDA #EOL
STA 1,X
CLRA
LDX USRTOP
STX CHAR
ADDD USRTOP
STD USRTOP
STD STKLIM
JSR TSTSTK
BCC ED07
STX USRTOP
STX STKLIM
JMP ERRORF
ED07 LDX USRTOP
ED08 STX SAVESP
LDX CHAR
CMPX CURSOR
BEQ ED09
LDA ,-X
STX CHAR
LDX SAVESP
STA ,-X
BRA ED08
ED09 PULS D
LDX CURSOR
STD ,X++
STX CHAR
ED10 LDX SCRTCH
LDA ,X+
STX SCRTCH
LDX CHAR
STA ,X+
STX CHAR
CMPA #EOL
BNE ED10
RTS
;******************************
;******************************
PUTS01 JSR PUTCHR
LEAX 1,X
PUTSTR LDA 0,X
CMPA #EOL
BNE PUTS01
RTS
;******************************
;******************************
CRLF LDX #CRLFST
BSR PUTSTR
CLR ZONE
RTS
CRLFST FCB CR,LF,DEL,FILL,FILL,FILL,EOL
;******************************
;******************************
ERRORF BSR ER01
DB "SORRY"
FCB EOL
ERRORS BSR ER01
DB "WHAT ?"
FCB EOL
ERRORR BSR ER01
DB "HOW ?"
FCB EOL
BREAK BSR ER01
DB "BREAK"
FCB EOL
END: BSR ER01
DB "STOP"
FCB EOL
ER01 BSR CRLF
LDA #BELL
JSR PUTCHR
LDD LINENB
JSR PRNT4
LDA #SPACE
JSR PUTCHR
PULS X
BSR PUTSTR
BSR CRLF
JMP CMDB
;******************************
;******************************
GL00 BSR CRLF
GETLIN LDX #BUFFER
GL03 JSR GETCHR
CMPA #SPACE
BCS GL05
CMPA #$7F
BEQ GL03
CMPX #BUFFER+BSIZE-1
BNE GL04
LDA #BELL
BRA GL02
GL04 STA ,X+
GL02 JSR PUTCHR
BRA GL03
GL05 CMPA #BS
BEQ GL07
CMPA #CAN
BEQ GL00
CMPA #LF
BEQ GL09
CMPA #CR
BNE GL03
TST MODE
BEQ GL06
JSR PUTCHR
BRA GL08
GL06 PSHS X
JSR CRLF
PULS X
GL08 LDA #EOL
STA 0,X
LDX #BUFFER
RTS
GL07 CMPX #BUFFER
BEQ GL03
LEAX -1,X
LDA #BS
JSR PUTCHR
LDA #SPACE
JSR PUTCHR
LDA #BS
BRA GL02
GL09 ORCC #$01
ROR MODE
BRA GL02
;******************************
;******************************
REM00 LEAX 1,X
REM BSR SKIPSP
CMPA #EOL
BNE REM00
ENDSMT JSR TSTEOL
ENDS02 LDA LINENB
ORA LINENB+1
BEQ REM09
REM05 CMPX USRTOP
BNE NXTLIN
JMP ERRORR
NXTLIN LDD ,X++
STD LINENB
MSLINE JSR TSTBRK
BSR IFAN
BCS IMPLET
PSHS D
REM09 RTS
IMPLET JMP LET
;******************************
;******************************
IFAN BSR SKIPSP
STX CURSOR
LDX #VERBT
FAN00: LDA ,X+
CMPA #EOL
BNE FAN04
LDX CURSOR
ORCC #$01
RTS
FAN04 STX CHAR
LDX CURSOR
STX SCRTCH
FAN05 LDX SCRTCH
CMPA 0,X
BNE FAN07
LEAX 1,X
STX SCRTCH
LDX CHAR
LDA ,X+
STX CHAR
CMPA #EOL
BNE FAN05
LDD 0,X
LDX SCRTCH
ANDCC #$FE
RTS
FAN07 LDX CHAR
FAN08 LDA ,X+
CMPA #EOL
BNE FAN08
LEAX 2,X
BRA FAN00
;******************************
;******************************
NXTNSP LEAX 1,X
SKIPSP LDA 0,X
CMPA #SPACE
BEQ NXTNSP
RTS
;******************************
;******************************
TSTHEX BSR TSTDIG
BCC TST05
CMPA #"A"
BCS TST03
CMPA #"F"
BHI TST03
SUBA #"A"-10
ANDCC #$FE
RTS
;******************************
;******************************
TSTLTR CMPA #"A"
BCS TST03
CMPA #"Z"
BLS TST05
TST03 ORCC #$01
RTS
;******************************
;******************************
TSTDIG CMPA #"0"
BCS TST03
CMPA #"9"
BHI TST03
SUBA #"0"
TST05 ANDCC #$FE
RTS
;******************************
;******************************
TSTVAR BSR SKIPSP
BSR TSTLTR
BCS TSTV03
TFR A,B
LDA 1,X
BSR TSTLTR
BCC TST03
LEAX 1,X
SUBB #"A"
ASLB
CLRA
ADDD STKTOP
TSTV02 ANDCC #$FE
TSTV03 RTS
;******************************
;******************************
USER JSR ARGONE
PSHS D
JSR SKIPSP
CMPA #","
BEQ USER03
CMPA #")"
ORCC #$01
BEQ USER05
USER02 JMP ERRORS
USER03 LEAX 1,X
JSR EXPR
PSHS A
JSR SKIPSP
CMPA #")"
PULS A
BNE USER02
ANDCC #$FE
USER05 LEAX 1,X
STX CURSOR
JSR [,S++]
LDX CURSOR
ANDCC #$FE
RTS
;******************************
;******************************
TSTSNB JSR SKIPSP
CMPA #"-"
BNE TSTNBR
LEAX 1,X
BSR TSTNBR
BCS TSN02
NEGA
NEGB
SBCA #0
ANDCC #$FC
TSN02 RTS
;******************************
;******************************
TSTNBR JSR SKIPSP
JSR TSTDIG
BCC TSTN02
CMPA #"$"
ORCC #$01
BNE TSTN09
TSTN20 LEAX 1,X
CLR ,-S
CLR ,-S
TSTN23 LDA 0,X
JSR TSTHEX
BCS TSTN07
LEAX 1,X
PSHS X
PSHS A
LDD 3,S
BITA #$F0
BNE TSTN11
ASLB
ROLA
ASLB
ROLA
ASLB
ROLA
ASLB
ROLA
ADDB ,S+
STD 2,S
PULS X
BRA TSTN23
TSTN02 LEAX 1,X
PSHS A
CLR ,-S
TSTN03 LDA 0,X
JSR TSTDIG
BCS TSTN07
LEAX 1,X
PSHS X
PSHS A
LDD 3,S
ASLB
ROLA
BVS TSTN11
ASLB
ROLA
BVS TSTN11
ADDD 3,S
BVS TSTN11
ASLB
ROLA
BVS TSTN11
ADDB 0,S
ADCA #0
BVS TSTN11
STD 3,S
LEAS 1,S
PULS X
BRA TSTN03
TSTN07 PULS D
ANDCC #$FE
TSTN09 ANDCC #$FD
RTS
TSTN11 LDX 1,S
LEAS 5,S
ORCC #$03
RTS
;******************************
;******************************
TSTSTK STS SAVESP
LDD SAVESP
SUBD #STKCUS
SUBD STKLIM
RTS
;******************************
;******************************
PEEK JSR PAREXP
PSHS D
PSHS X
LDB [2,S]
PULS X
LEAS 2,S
CLRA
RTS
;******************************
;******************************
POKE JSR PAREXP
PSHS D
JSR SKIPSP
CMPA #"="
BEQ POKE05
JMP ERRORS
POKE05 LEAX 1,X
JSR EXPR
JSR TSTEOL
PSHS X
STB [2,S]
PULS X
LEAS 2,S
JMP ENDS02
;******************************
;******************************
TSTFUN JSR SKIPSP
STX CURSOR
LDX #FUNT
JSR FAN00
BCS TSTF05
PSHS D
TSTF05 RTS
;******************************
;******************************
FUNT DB "USR"
FCB EOL
FDB USER
DB "PEEK"
FCB EOL
FDB PEEK
DB "MEM"
FCB EOL
FDB TSTSTK
FCB EOL
;******************************
;******************************
FLINE LDX USRBAS
FNDLIN CMPX USRTOP
BNE FND03
ORCC #$03
RTS
FND03 CMPD 0,X
BNE FND05
ANDCC #$FC
RTS
FND05 BCC FND07
ORCC #$01
ANDCC #$FD
RTS
FND07 PSHS A
LDA #EOL
LEAX 1,X
FND09 LEAX 1,X
CMPA 0,X
BNE FND09
PULS A
LEAX 1,X
BRA FNDLIN
;******************************
;******************************
RELEXP BSR EXPR
PSHS D
CLRB
JSR SKIPSP
CMPA #"="
BEQ REL06
CMPA #"<"
BNE REL03
LEAX 1,X
INCB
JSR SKIPSP
CMPA #">"
BNE REL05
LEAX 1,X
ADDB #4
BRA REL07
REL03 CMPA #">"
BNE EXPR06
LEAX 1,X
ADDB #4
JSR SKIPSP
REL05 CMPA #"="
BNE REL07
REL06 LEAX 1,X
ADDB #2
REL07 PSHS B
BSR EXPR
PSHS X
SUBD 3,S
TFR CC,A
LSRA
TFR A,B
ASLA
ASLA
PSHS B
ADDA ,S+
ANDA #$06
BNE REL08
INCA
REL08 CLRB
ANDA 2,S
BEQ REL09
COMB
REL09 CLRA
PULS X
LEAS 3,S
RTS
;******************************
;******************************
EXPR CLR ,-S
CLR ,-S
JSR SKIPSP
CMPA #"-"
BEQ EXPR05
CMPA #"+"
BNE EXPR03
EXPR02 LEAX 1,X
EXPR03 BSR TERM
EXPR04 ADDD 0,S
STD 0,S
JSR SKIPSP
CMPA #"+"
BEQ EXPR02
CMPA #"-"
BNE EXPR06
EXPR05 LEAX 1,X
BSR TERM
NEGA
NEGB
SBCA #0
BRA EXPR04
EXPR06 PULS D
RTS
;******************************
;******************************
TERM JSR FACT
PSHS D
TERM03 JSR SKIPSP
CMPA #"*"
BEQ TERM07
CMPA #"/"
BEQ TERM05
PULS D
RTS
TERM05 LEAX 1,X
BSR FACT
PSHS X
LEAX 2,S
PSHS D
EORA 0,X
JSR ABSX
LEAX 0,S
JSR ABSX
PSHS A
LDA #17
PSHS A
CLRA
CLRB
DIV05 SUBD 2,S
BCC DIV07
ADDD 2,S
ANDCC #$FE
BRA DIV09
DIV07 ORCC #$01
DIV09 ROL 7,S
ROL 6,S
ROLB
ROLA
DEC 0,S
BNE DIV05
LDA 1,S
LEAS 4,S
TSTA
BPL TERM06
LEAX 2,S
BSR NEGX
TERM06 PULS X
BRA TERM03
TERM07 LEAX 1,X
BSR FACT
MULT PSHS B
LDB 2,S
MUL
LDA 1,S
STB 1,S
LDB 0,S
MUL
LDA 2,S
STB 2,S
PULS B
MUL
ADDA 0,S
ADDA 1,S
STD 0,S
BRA TERM03
;******************************
;******************************
FACT JSR TSTVAR
BCS FACT03
PSHS X
TFR D,X
LDD 0,X
PULS X
FACT02 RTS
FACT03 JSR TSTNBR
BCC FACT02
JSR TSTFUN
BCC FACT02
PAREXP BSR ARGONE
PSHS A
JSR SKIPSP
CMPA #")"
PULS A
BNE FACT05
LEAX 1,X
RTS
FACT05 JMP ERRORS
;******************************
;******************************
ARGONE JSR TSTSTK
BCC FACT04
JMP ERRORF
FACT04 JSR SKIPSP
CMPA #"("
BNE FACT05
LEAX 1,X
JMP EXPR
;******************************
;******************************
ABSX TST 0,X
BPL NEG05
NEGX NEG 0,X
NEG 1,X
BCC NEG05
DEC 0,X
NEG05 RTS
;******************************
;******************************
TSTEOL PSHS A
JSR SKIPSP
CMPA #EOL
BEQ TEOL03
JMP ERRORS
TEOL03 LEAX 1,X
PULS A
RTS
;******************************
;******************************
LET JSR TSTVAR
BCC LET03
JMP ERRORS
LET03 PSHS D
JSR SKIPSP
CMPA #"="
BEQ LET05
JMP ERRORS
LET05 LEAX 1,X
JSR EXPR
BSR TSTEOL
STX CURSOR
PULS X
STD 0,X
LDX CURSOR
JMP ENDS02
;******************************
;******************************
IF: JSR RELEXP
TSTB
BEQ IF03
JMP MSLINE
IF03: JMP REM
;******************************
;******************************
GOTO JSR EXPR
BSR TSTEOL
JSR FLINE
BCS GOSB04
JMP NXTLIN
;******************************
;******************************
GOSUB JSR EXPR
BSR TSTEOL
STX CURSOR
JSR FLINE
BCC GOSB03
GOSB04 JMP ERRORR
GOSB03 JSR TSTSTK
BCC GOSB05
JMP ERRORF
GOSB05 LDD CURSOR
PSHS D
LDD LINENB
PSHS D
JSR NXTLIN
PULS D
STD LINENB
PULS X
JMP ENDS02
;******************************
;******************************
RETURN EQU TSTEOL
;******************************
;******************************
PRINT JSR SKIPSP
PR01 CMPA #","
BEQ PR05
CMPA #";"
BEQ PR07
CMPA #EOL
BEQ PR04
CMPA #$22
BNE PR02
LEAX 1,X
BSR PRNTQS
BRA PR03
PR02 JSR EXPR
PSHS X
BSR PRNTN
PULS X
PR03 JSR SKIPSP
CMPA #","
BEQ PR05
CMPA #";"
BEQ PR07
CMPA #EOL
BEQ PR04
JMP ERRORS
PR04 PSHS X
JSR CRLF
PULS X
BRA PR08
PR05 LDB #$7
PR06 LDA #SPACE
JSR PUTCHR
BITB ZONE
BNE PR06
PR07 LEAX 1,X
JSR SKIPSP
CMPA #EOL
BNE PR01
PR08 LEAX 1,X
JMP ENDS02
;*
;*
PRQ01 JSR PUTCHR
PRNTQS LDA ,X+
CMPA #EOL
BNE PRQ03
JMP ERRORS
PRQ03 CMPA #$22
BNE PRQ01
RTS
;*
PRNTN TSTA
BPL PRN03
NEGA
NEGB
SBCA #0
PSHS A
LDA #"-"
JSR PUTCHR
PULS A
PRN03 LDX #PRNPT-2
PRN05 LEAX 2,X
CMPD 0,X
BCC PRN07
CMPX #PRNPTO
BNE PRN05
PRN07 CLR CHAR
PRN09 CMPD 0,X
BCS PRN11
SUBD 0,X
INC CHAR
BRA PRN09
PRN11 PSHS A
LDA #"0"
ADDA CHAR
JSR PUTCHR
PULS A
CMPX #PRNPTO
BEQ PRN13
LEAX 2,X
BRA PRN07
PRN13 RTS
PRNPT FDB 10000
FDB 1000
FDB 100
FDB 10
PRNPTO FDB 1
;*
PRNT4 LDX #PRNPT+2
BRA PRN07
;******************************
;******************************
INPUT JSR TSTVAR
BCS IN11
PSHS D
STX CURSOR
IN03 LDA #"?"
JSR PUTCHR
JSR GETLIN
IN05 JSR SKIPSP
CMPA #EOL
BEQ IN03
JSR TSTSNB
BCC IN07
LDX #RMESS
JSR PUTSTR
JSR CRLF
BRA IN03
IN07 STX SCRTCH
PULS X
STD 0,X
LDX CURSOR
JSR SKIPSP
CMPA #","
BEQ IN09
JMP ENDSMT
IN09 LEAX 1,X
JSR TSTVAR
BCC IN13
IN11 JMP ERRORS
IN13 PSHS D
PSHS X
LDX SCRTCH
JSR SKIPSP
CMPA #","
BNE IN05
LEAX 1,X
BRA IN05
RMESS DB "RE-ENTER"
FCB EOL
;******************************
;******************************
RUN LDX STKTOP
LDA #52
RUN01 CLR ,X+
DECA
BNE RUN01
LDX USRBAS
JMP REM05
;******************************
;******************************
LIST JSR TSTNBR
BCC LIST03
CLRA
CLRB
STD CURSOR
LDA #$7F
BRA LIST07
LIST03 STD CURSOR
JSR SKIPSP
CMPA #","
BEQ LIST05
LDA CURSOR
BRA LIST07
LIST05 LEAX 1,X
JSR TSTNBR
BCC LIST07
JMP ERRORS
LIST07 JSR TSTEOL
PSHS D
LDD CURSOR
STX CURSOR
JSR FLINE
LIST09 CMPX USRTOP
BEQ LIST10
PULS D
CMPD 0,X
BCS LIST11
PSHS D
LDD ,X++
PSHS X
JSR PRNT4
PULS X
LDA #SPACE
JSR PUTCHR
JSR PUTSTR
LEAX 1,X
PSHS X
JSR CRLF
PULS X
JSR TSTBRK
BRA LIST09
LIST10 LEAS 2,S
LDA #ETX
JSR PUTCHR
LIST11 LDX CURSOR
JMP ENDS02
;******************************
;******************************
VERBT DB "LET"
FCB EOL
FDB LET
DB "IF"
FCB EOL
FDB IF
DB "GOTO"
FCB EOL
FDB GOTO
DB "GOSUB"
FCB EOL
FDB GOSUB
DB "RETURN"
FCB EOL
FDB RETURN
DB "POKE"
FCB EOL
FDB POKE
DB "PRINT"
FCB EOL
FDB PRINT
DB "INPUT"
FCB EOL
FDB INPUT
DB "REM"
FCB EOL
FDB REM
DB "STOP"
FCB EOL
FDB END
DB "END"
FCB EOL
FDB END
DB "RUN"
FCB EOL
FDB RUN
DB "LIST"
FCB EOL
FDB LIST
DB "NEW"
FCB EOL
FDB CLEAR
DB "?"
FCB EOL
FDB PRINT
FCB EOL
;******************************
;******************************
TSTBRK bsr BRKEEE
beq GETC05
GETCHR bsr INEEE
CMPA #ETX
BNE GETC05
JMP BREAK
GETC05 RTS
PUTCHR INC ZONE
JMP OUTEEE
;******************************
;******************************
INEEE BSR BRKEEE
BEQ INEEE
LDA RECEV
ANDA #$7F
RTS
OUTEEE PSHS A
OUT01 LDA TRCS
BITA #TDRE
BEQ OUT01
PULS A
STA TRANS
RTS
BRKEEE PSHS A
BRK03 LDA TRCS
BITA #ORFE
BEQ BRK05
LDA RECEV
BRA BRK03
BRK05 BITA #RDRF
PULS A
RTS
;*
LDA #CNTL1
STA RMCR
LDA #CNTL2
STA TRCS
INTEEE EQU $
RTS
;******************************
;******************************
.endblock
:100000000E144D4F443942415349430010DE06BDA2
:1000100007E3201310CE21CC10DF06BD07E3CC028E
:1000200049DD00DD02DD04BD013E8E0082BD0137E9
:1000300010DE060F13BD013E9E009F088E00009F3C
:100040000C0D132605863ABD07A8BD018EBD02E83A
:10005000240E292BBD0259810427E1BD020B20D0BB
:1000600034109E029C04351027037E015EC30000FD
:10007000270D340683270F350622048D1020BD7E00
:10008000015554494E592056312E3337043406BD9C
:1000900002599F0EA6609E089C02270510A300240B
:1000A000029E00BD03C29F0825229F0A3002A6803F
:1000B000810426FA9C02270EA6809F109E0AA78024
:1000C0009F0A9E1020EE9E0A9F029F049E0EC6FF6E
:1000D0005CA680810426F95D2603326239301FCB8D
:1000E00004301F5AA600812027F78604A7014F9EDF
:1000F000029F10D302DD02DD04BD036024079F02CE
:100100009F047E014D9E029F0A9E109C08270AA60E
:10011000829F109E0AA78220EE35069E08ED819FE1
:10012000109E0EA6809F0E9E10A7809F1081042611
:10013000F039BD07A83001A600810426F5398E01EB
:10014000468DF40F12390D0A7F000000048D2453F0
:100150004F525259048D1C57484154203F048D136F
:10016000484F57203F048D0B425245414B04535496
:100170004F50048DC98607BD07A8DC0CBD065C8600
:1001800020BD07A835108DAF8DB40E308DB08E0216
:1001900000BD079E81202514817F27F58C0248260B
:1001A0000486072002A780BD07A820E58108272430
:1001B000811827D8810A2731810D26D50D132705EF
:1001C000BD07A820073410BD013E35108604A700E6
:1001D0008E0200398C020027B8301F8608BD07A8A0
:1001E0008620BD07A8860820BE1A01061320B83055
:1001F000018D66810426F8BD052F960C9A0D2714F3
:100200009C0226037E015EEC81DD0CBD079A8D0801
:1002100025033406397E05408D3F9F088E0735A69D
:1002200080810426059E081A01399F109E089F0EA2
:100230009E0EA100261530019F0E9E10A6809F10D5
:10024000810426ECEC009E0E1CFE399E10A68081D7
:100250000426FA300220C83001A600812027F83990
:100260008D1A2422814125118146220D80371CFEE2
:100270003981412504815A230D1A0139813025F92C
:10028000813922F580301CFE398DCE8DE425121F78
:1002900089A6018DDC24E23001C041584FD3061CF1
:1002A000FE39BD050E3406BD0259812C270981296E
:1002B0001A0127157E01553001BD04413402BD02EB
:1002C000598129350226ED1CFE30019F08ADF19EB3
:1002D000081CFE39BD0259812D260D30018D0925DE
:1002E00006405082001CFC39BD0259BD027C242FFF
:1002F00081241A01266030016FE26FE2A600BD0280
:1003000060254F300134103402EC6385F0264A58E2
:1003100049584958495849EBE0ED62351020DD3025
:100320000134026FE2A600BD027C252630013410A4
:100330003402EC63584929215849291DE3632919DE
:1003400058492915EB608900290FED63326135109A
:1003500020D335061CFE1CFD39AE6132651A033907
:1003600010DF0ADC0A830030930439BD04FB340635
:100370003410E672351032624F39BD04FB3406BDCD
:100380000259813D27037E01553001BD0441BD0561
:100390002F3410E772351032627E01FABD02599F88
:1003A000088E03ACBD021F25023406395553520492
:1003B00002A25045454B04036B4D454D04036004B8
:1003C0009E009C0226031A033910A30026031CFC7E
:1003D0003924051A011CFD3934028604300130012C
:1003E000A10026FA3502300120D88D5534065FBDB4
:1003F0000259813D2723813C261030015CBD025902
:10040000813E26113001CB042013813E265F30014E
:10041000CB04BD0259813D26043001CB0234048D4A
:10042000203410A3631FA8441F8948483404ABE05C
:10043000840626014C5FA4622701534F35103263B6
:10044000396FE26FE2BD0259812D2717812B2602F9
:1004500030018D1CE360ED60BD0259812B27F181D5
:100460002D260A30018D094050820020E7350639DB
:10047000BD04E33406BD0259812A2748812F270392
:1004800035063930018D5C341030623406A800BD69
:1004900005223060BD05223402861134024F5FA36D
:1004A000622406E3621CFE20021A0169676966592C
:1004B000496A6026EAA66132644D2A0430628D667C
:1004C000351020B130018D1B3404E6623DA661E792
:1004D00061E6603DA662E76235043DAB60AB61ED6D
:1004E000602092BD0289250934101F01EC003510EF
:1004F00039BD02E824FABD039C24F58D113402BDF8
:1005000002598129350226033001397E0155BD0388
:100510006024037E014DBD0259812826EE30017E04
:1005200004416D002A086000600124026A00393429
:1005300002BD0259810427037E015530013502397D
:10054000BD028924037E01553406BD0259813D2731
:10055000037E01553001BD04418DD49F083510ED57
:10056000009E087E01FABD03EA5D27037E020B7E32
:1005700001F1BD04418DB8BD03C0250F7E0207BD4A
:1005800004418DAB9F08BD03C024037E015EBD0303
:100590006024037E014DDC083406DC0C3406BD0209
:1005A000073506DD0C35107E01FABD0259812C2776
:1005B00036813B273D810427258122260630018D87
:1005C000422009BD044134108D473510BD025981C8
:1005D0002C2714813B271B810427037E01553410EF
:1005E000BD013E35102014C6078620BD07A8D512D0
:1005F00026F73001BD0259810426B230017E01FA8E
:10060000BD07A8A680810426037E0155812226F01D
:10061000394D2A0D405082003402862DBD07A83581
:10062000028E0650300210A30024058C065A26F4D0
:100630000F1010A3002506A3000C1020F53402862D
:10064000309B10BD07A835028C065A2704300220C3
:10065000DF39271003E80064000A00018E065420E9
:10066000CFBD0289253C34069F08863FBD07A8BD43
:10067000018EBD0259810427F1BD02D4240B8E06E0
:10068000B6BD0137BD013E20E19F0E3510ED009E45
:1006900008BD0259812C27037E01F73001BD028974
:1006A00024037E0155340634109E0EBD0259812C60
:1006B00026C0300120BC52452D454E544552049E63
:1006C0000686346F804A26FB9E007E0200BD02E84B
:1006D00024084F5FDD08867F2017DD08BD025981A1
:1006E0002C27049608200A3001BD02E824037E016D
:1006F00055BD052F3406DC089F08BD03C09C0227AA
:1007000028350610A30025283406EC813410BD06D8
:100710005C35108620BD07A8BD013730013410BDFF
:10072000013E3510BD079A20D432628603BD07A86A
:100730009E087E01FA4C455404054049460405666E
:10074000474F544F040572474F53554204057F529B
:10075000455455524E04052F504F4B4504037A50D3
:1007600052494E540405AA494E505554040661524C
:10077000454D0401F153544F500407E4454E4404E1
:1007800007E452554E0406BF4C4953540406CD4E5F
:10079000455704001E3F0405AA048D2A27098D0D24
:1007A000810326037E0166390C127E07B78D172759
:1007B000FCB683FF847F393402B683FE850227F9B5
:1007C0003502B783FF393402B683FE85202705B68C
:1007D00083FF20F485013502398603B783FE861531
:0407E000B783FE39A4
:00000001FF
:100000000E144D4F443942415349430010DE06BDA2
:1000100007E5201310CE21CC10DF06BD07E5CC028A
:1000200049DD00DD02DD04BD013E8E0082BD0137E9
:1000300010DE060F13BD013E9E009F088E00009F3C
:100040000C0D132605863ABD07AABD0190BD02EA34
:10005000240E292BBD025B810427E1BD020D20D0B7
:1000600034109E029C04351027037E015EC30000FD
:10007000270D340683270F350622048D1020BD7E00
:10008000015554494E592056312E3337043406BD9C
:10009000025B9F0EA6609E089C02270510A3002409
:1000A000029E00BD03C49F0825229F0A3002A6803D
:1000B000810426FA9C02270EA6809F109E0AA78024
:1000C0009F0A9E1020EE9E0A9F029F049E0EC6FF6E
:1000D0005CA680810426F95D2603326239301FCB8D
:1000E00004301F5AA600812027F78604A7014F9EDF
:1000F000029F10D302DD02DD04BD036224079F02CC
:100100009F047E014D9E029F0A9E109C08270AA60E
:10011000829F109E0AA78220EE35069E08ED819FE1
:10012000109E0EA6809F0E9E10A7809F1081042611
:10013000F039BD07AA3001A600810426F5398E01E9
:10014000468DF40F12390D0A7F000000048D2653EE
:100150004F525259048D1E57484154203F048D156B
:10016000484F57203F048D0D425245414B048D05A9
:1001700053544F50048DC78607BD07AADC0CBD063B
:100180005E8620BD07AA35108DAD8DB20E308DAEC6
:100190008E0200BD07A081202514817F27F58C02E7
:1001A00048260486072002A780BD07AA20E581080B
:1001B0002724811827D8810A2731810D26D50D13D0
:1001C0002705BD07AA20073410BD013E351086045F
:1001D000A7008E0200398C020027B8301F8608BDA8
:1001E00007AA8620BD07AA860820BE1A010613208A
:1001F000B830018D66810426F8BD0531960C9A0D44
:1002000027149C0226037E015EEC81DD0CBD079C59
:100210008D0825033406397E05428D3F9F088E07E1
:1002200037A680810426059E081A01399F109E0872
:100230009F0E9E0EA100261530019F0E9E10A680D7
:100240009F10810426ECEC009E0E1CFE399E10A629
:1002500080810426FA300220C83001A600812027C0
:10026000F8398D1A2422814125118146220D8037CB
:100270001CFE3981412504815A230D1A0139813030
:1002800025F9813922F580301CFE398DCE8DE4258B
:10029000121F89A6018DDC24E23001C041584FD3E2
:1002A000061CFE39BD05103406BD025B812C2709F2
:1002B00081291A0127157E01553001BD04433402FE
:1002C000BD025B8129350226ED1CFE30019F08AD81
:1002D000F19E081CFE39BD025B812D260D30018D7B
:1002E000092506405082001CFC39BD025BBD027E20
:1002F000242F81241A01266030016FE26FE2A600EC
:10030000BD0262254F300134103402EC6385F026C3
:100310004A5849584958495849EBE0ED6235102090
:10032000DD300134026FE2A600BD027E25263001D9
:1003300034103402EC63584929215849291DE363DC
:10034000291958492915EB608900290FED6332619D
:10035000351020D335061CFE1CFD39AE6132651AFE
:10036000033910DF0ADC0A830030930439BD04FD31
:1003700034063410E672351032624F39BD04FD3454
:1003800006BD025B813D27037E01553001BD04435C
:10039000BD05313410E772351032627E01FCBD02BA
:1003A0005B9F088E03AEBD022125023406395553EA
:1003B000520402A45045454B04036D4D454D0403C2
:1003C00062049E009C0226031A033910A300260330
:1003D0001CFC3924051A011CFD3934028604300145
:1003E0003001A10026FA3502300120D88D5534069F
:1003F0005FBD025B813D2723813C261030015CBD3F
:10040000025B813E26113001CB042013813E265F22
:100410003001CB04BD025B813D26043001CB0234A8
:10042000048D203410A3631FA8441F894848340456
:10043000ABE0840626014C5FA4622701534F3510C0
:100440003263396FE26FE2BD025B812D2717812B8A
:10045000260230018D1CE360ED60BD025B812B271D
:10046000F1812D260A30018D094050820020E735A8
:100470000639BD04E53406BD025B812A2748812F79
:10048000270335063930018D5C341030623406A8FC
:1004900000BD05243060BD05243402861134024FAE
:1004A0005FA3622406E3621CFE20021A01696769E9
:1004B0006659496A6026EAA66132644D2A043062B0
:1004C0008D66351020B130018D1B3404E6623DA6E7
:1004D00061E761E6603DA662E76235043DAB60AB73
:1004E00061ED602092BD028B250934101F01EC00E4
:1004F000351039BD02EA24FABD039E24F58D11346E
:1005000002BD025B8129350226033001397E015587
:10051000BD036224037E014DBD025B812826EE30BF
:10052000017E04436D002A086000600124026A0015
:10053000393402BD025B810427037E015530013549
:100540000239BD028B24037E01553406BD025B8156
:100550003D27037E01553001BD04438DD49F0835EE
:1005600010ED009E087E01FCBD03EC5D27037E02BA
:100570000D7E01F3BD04438DB8BD03C2250F7E027D
:1005800009BD04438DAB9F08BD03C224037E015EF9
:10059000BD036224037E014DDC083406DC0C340606
:1005A000BD02093506DD0C35107E01FCBD025B8104
:1005B0002C2736813B273D810427258122260630C2
:1005C000018D422009BD044334108D473510BD0212
:1005D0005B812C2714813B271B810427037E015557
:1005E0003410BD013E35102014C6078620BD07AA71
:1005F000D51226F73001BD025B810426B230017EA0
:1006000001FCBD07AAA680810426037E0155812234
:1006100026F0394D2A0D405082003402862DBD0748
:10062000AA35028E0652300210A30024058C065C07
:1006300026F40F1010A3002506A3000C1020F5349B
:100640000286309B10BD07AA35028C065C27043059
:100650000220DF39271003E80064000A00018E063B
:100660005620CFBD028B253C34069F08863FBD0730
:10067000AABD0190BD025B810427F1BD02D6240B07
:100680008E06B8BD0137BD013E20E19F0E3510ED4D
:10069000009E08BD025B812C27037E01F93001BD5D
:1006A000028B24037E0155340634109E0EBD025B7E
:1006B000812C26C0300120BC52452D454E54455258
:1006C000049E0686346F804A26FB9E007E0202BD91
:1006D00002EA24084F5FDD08867F2017DD08BD028F
:1006E0005B812C27049608200A3001BD02EA24030E
:1006F0007E0155BD05313406DC089F08BD03C29C50
:10070000022728350610A30025283406EC81341072
:10071000BD065E35108620BD07AABD013730013405
:1007200010BD013E3510BD079C20D432628603BD4A
:1007300007AA9E087E01FC4C455404054249460424
:100740000568474F544F040574474F5355420405FD
:100750008152455455524E040531504F4B450403C8
:100760007C5052494E540405AC494E505554040631
:100770006352454D0401F353544F5004016E454EEE
:100780004404016E52554E0406C14C4953540406AC
:10079000CF4E455704001E3F0405AC048D2A27099F
:1007A0008D0D810326037E0166390C127E07B98DFB
:1007B0001727FCB683FF847F393402B683FE850297
:1007C00027F93502B783FF393402B683FE85202727
:1007D00005B683FF20F485013502398603B783FE11
:0607E0008615B783FE3907
:00000001FF
0000 ;NAM TB01V137
0000 ;* WRITTEN 20-OCT-77 BY JOHN BYRNS
0000 ;* REVISED 30-DEC-77
0000 ;* REVISED 18-JAN-78
0000 ;* REVISED 10-APR-78
0000 ;* REVISED 08-MAY-79 TO ELIMINATE USE OF SP
0000 ;* REVISED 24-JAN-80 TO USE 6801 ON CHIP RAM
0000 ;* REVISED 26-JAN-80 FOR NEW 6801 INSTRUCTIONS
0000 ;* REVISED 24-JUL-81 FOR WHISTON BOARD
0000 ;* REVISED 24-SEP-81 INCLUDE USER FUNCTION
0000 ;* REVISED 08-APR-82 MAKE STANDALONE INCLUDE HEX CONSTANTS AND MEM FUNCTION
0000 ;* REVISED 21-NOV-84 FOR 6809
0000 ;* REVISED FEB 94 ADAPTED TO SIMULATOR AND BUGFIXES BY L.C. BENSCHOP.
0000 ;*
0000 .ENGINE kilo
0000 EOL: EQU $04
0000 ETX: EQU $03
0000 SPACE: EQU $20
0000 CR: EQU $0D
0000 LF: EQU $0A
0000 BS: EQU $08
0000 CAN: EQU $18
0000 BELL: EQU $07
0000 FILL: EQU $00
0000 DEL: EQU $7F
0000 BSIZE: EQU 73
0000 STKCUS: EQU 48
0000 ;*
0000 BACIA: = $83FE
0000 RMCR: EQU bACIA
0000 TRCS: EQU bACIA
0000 RECEV: EQU bACIA+1
0000 TRANS: EQU bACIA+1
0000 CNTL1: EQU $03
0000 CNTL2: EQU $15
0000 RDRF: EQU $01
0000 ORFE: EQU $20
0000 TDRE: EQU $02
0000 ;* EDIT THE FOLLOWING EQUATES TO REFLECT THE
0000 ;* DESIRED ROM AND RAM LAYOUT
0000 LORAM: EQU $0080 ;ADDRESS OF DIRECT PAGE SCRATCH RAM
0000 BUFFER: EQU $0200 ;ADDRESS OF MAIN RAM
0000 RAMSIZ: EQU $2000 ;SIZE OF MAIN RAM
0000 ROMADR: EQU $f000 ;ADDRESS OF TINY BASIC ROM
0000 ;*
0000 RAMBEG: EQU BUFFER+BSIZE
0000 RAMEND: EQU BUFFER+RAMSIZ
0000 ;*
0000 RAMPAT: EQU $AA0F
0000 ROMPAT: EQU $F055
0000 ;*
0000 ; ORG LORAM
0000 .BSSEG
0000 USRBAS: RMB 2
0002 USRTOP: RMB 2
0004 STKLIM: RMB 2
0006 STKTOP: RMB 2
0008 CURSOR: RMB 2
000A SAVESP: RMB 2
000C LINENB: RMB 2
000E SCRTCH: RMB 2
0010 CHAR: RMB 2
0012 ZONE: RMB 1
0013 MODE: RMB 1
0014 RESRVD: RMB 1
0015 LOEND: EQU $
0015 ;*
0000 .CSEG
0000 ; ORG ROMADR
0000 ALIGN 256
0000 .ENT $
0000 0E 14 BASIC: JMP SETUP
0002 4D 4F 44 39 42 41 53 49 43 00 .CSTR "MOD9BASIC"
000C 10 DE 06 WARMS: LDS STKTOP
000F BD 07 E3 JSR INTEEE
0012 20 13 BRA WMS05
0014 10 CE 21 CC SETUP: LDS #RAMEND-52
0018 10 DF 06 SET03: STS STKTOP
001B BD 07 E3 JSR INTEEE
001E CC 02 49 CLEAR: LDD #RAMBEG
0021 DD 00 STD USRBAS
0023 DD 02 STD USRTOP
0025 DD 04 CLR02: STD STKLIM
0027 BD 01 3E WMS05: JSR CRLF
002A 8E 00 82 LDX #VSTR
002D BD 01 37 JSR PUTSTR
0030 10 DE 06 CMDB: LDS STKTOP
0033 0F 13 CLR MODE
0035 BD 01 3E JSR CRLF
0038 9E 00 LDX USRBAS
003A 9F 08 STX CURSOR
003C 8E 00 00 CMDE: LDX #0000
003F 9F 0C STX LINENB
0041 0D 13 TST MODE
0043 26 05 BNE CMD01
0045 86 3A LDA #":"
0047 BD 07 A8 JSR PUTCHR
004A BD 01 8E CMD01: JSR GETLIN
004D BD 02 E8 JSR TSTNBR
0050 24 0E BCC CMD02
0052 29 2B BVS CMD05
0054 BD 02 59 JSR SKIPSP
0057 81 04 CMPA #EOL
0059 27 E1 BEQ CMDE
005B BD 02 0B JSR MSLINE
005E 20 D0 BRA CMDB
0060 34 10 CMD02: PSHS X
0062 9E 02 LDX USRTOP
0064 9C 04 CMPX STKLIM
0066 35 10 PULS X
0068 27 03 BEQ CMD03
006A 7E 01 5E JMP ERRORR
006D C3 00 00 CMD03: ADDD #0
0070 27 0D BEQ CMD05
0072 34 06 CMD04: PSHS D
0074 83 27 0F SUBD #9999
0077 35 06 PULS D
0079 22 04 BHI CMD05
007B 8D 10 BSR EDITOR
007D 20 BD BRA CMDE
007F 7E 01 55 CMD05: JMP ERRORS
0082 54 49 4E 59 20 56 31 2E 33 37 VSTR: DB "TINY V1.37"
008C 04 FCB EOL
008D ;******************************
008D ;******************************
008D 34 06 EDITOR: PSHS D
008F BD 02 59 JSR SKIPSP
0092 9F 0E STX SCRTCH
0094 A6 60 LDA 0,S
0096 9E 08 LDX CURSOR
0098 9C 02 CMPX USRTOP
009A 27 05 BEQ ED00
009C 10 A3 00 CMPD 0,X
009F 24 02 BCC ED01
00A1 9E 00 ED00: LDX USRBAS
00A3 BD 03 C2 ED01: JSR FNDLIN
00A6 9F 08 STX CURSOR
00A8 25 22 BCS ED04
00AA 9F 0A STX SAVESP
00AC 30 02 LEAX 2,X
00AE A6 80 ED02: LDA ,X+
00B0 81 04 CMPA #EOL
00B2 26 FA BNE ED02
00B4 9C 02 ED03: CMPX USRTOP
00B6 27 0E BEQ ED35
00B8 A6 80 LDA ,X+
00BA 9F 10 STX CHAR
00BC 9E 0A LDX SAVESP
00BE A7 80 STA ,X+
00C0 9F 0A STX SAVESP
00C2 9E 10 LDX CHAR
00C4 20 EE BRA ED03
00C6 9E 0A ED35: LDX SAVESP
00C8 9F 02 STX USRTOP
00CA 9F 04 STX STKLIM
00CC 9E 0E ED04: LDX SCRTCH
00CE C6 FF LDB #-1
00D0 5C ED05: INCB
00D1 A6 80 LDA ,X+
00D3 81 04 CMPA #EOL
00D5 26 F9 BNE ED05
00D7 5D TSTB
00D8 26 03 BNE ED55
00DA 32 62 LEAS 2,S
00DC 39 RTS
00DD 30 1F ED55: LEAX -1,X
00DF CB 04 ADDB #4
00E1 30 1F ED06: LEAX -1,X
00E3 5A DECB
00E4 A6 00 LDA 0,X
00E6 81 20 CMPA #SPACE
00E8 27 F7 BEQ ED06
00EA 86 04 LDA #EOL
00EC A7 01 STA 1,X
00EE 4F CLRA
00EF 9E 02 LDX USRTOP
00F1 9F 10 STX CHAR
00F3 D3 02 ADDD USRTOP
00F5 DD 02 STD USRTOP
00F7 DD 04 STD STKLIM
00F9 BD 03 60 JSR TSTSTK
00FC 24 07 BCC ED07
00FE 9F 02 STX USRTOP
0100 9F 04 STX STKLIM
0102 7E 01 4D JMP ERRORF
0105 9E 02 ED07: LDX USRTOP
0107 9F 0A ED08: STX SAVESP
0109 9E 10 LDX CHAR
010B 9C 08 CMPX CURSOR
010D 27 0A BEQ ED09
010F A6 82 LDA ,-X
0111 9F 10 STX CHAR
0113 9E 0A LDX SAVESP
0115 A7 82 STA ,-X
0117 20 EE BRA ED08
0119 35 06 ED09: PULS D
011B 9E 08 LDX CURSOR
011D ED 81 STD ,X++
011F 9F 10 STX CHAR
0121 9E 0E ED10: LDX SCRTCH
0123 A6 80 LDA ,X+
0125 9F 0E STX SCRTCH
0127 9E 10 LDX CHAR
0129 A7 80 STA ,X+
012B 9F 10 STX CHAR
012D 81 04 CMPA #EOL
012F 26 F0 BNE ED10
0131 39 RTS
0132 ;******************************
0132 ;******************************
0132 BD 07 A8 PUTS01: JSR PUTCHR
0135 30 01 LEAX 1,X
0137 A6 00 PUTSTR: LDA 0,X
0139 81 04 CMPA #EOL
013B 26 F5 BNE PUTS01
013D 39 RTS
013E ;******************************
013E ;******************************
013E 8E 01 46 CRLF: LDX #CRLFST
0141 8D F4 BSR PUTSTR
0143 0F 12 CLR ZONE
0145 39 RTS
0146 0D 0A 7F 00 00 00 04 CRLFST: FCB CR,LF,DEL,FILL,FILL,FILL,EOL
014D ;******************************
014D ;******************************
014D 8D 24 ERRORF: BSR ER01
014F 53 4F 52 52 59 DB "SORRY"
0154 04 FCB EOL
0155 8D 1C ERRORS: BSR ER01
0157 57 48 41 54 20 3F DB "WHAT ?"
015D 04 FCB EOL
015E 8D 13 ERRORR: BSR ER01
0160 48 4F 57 20 3F DB "HOW ?"
0165 04 FCB EOL
0166 8D 0B BREAK: BSR ER01
0168 42 52 45 41 4B DB "BREAK"
016D 04 FCB EOL
016E END BSR ER01
016E 53 54 4F 50 DB "STOP"
0172 04 FCB EOL
0173 8D C9 ER01: BSR CRLF
0175 86 07 LDA #BELL
0177 BD 07 A8 JSR PUTCHR
017A DC 0C LDD LINENB
017C BD 06 5C JSR PRNT4
017F 86 20 LDA #SPACE
0181 BD 07 A8 JSR PUTCHR
0184 35 10 PULS X
0186 8D AF BSR PUTSTR
0188 8D B4 BSR CRLF
018A 0E 30 JMP CMDB
018C ;******************************
018C ;******************************
018C 8D B0 GL00: BSR CRLF
018E 8E 02 00 GETLIN: LDX #BUFFER
0191 BD 07 9E GL03: JSR GETCHR
0194 81 20 CMPA #SPACE
0196 25 14 BCS GL05
0198 81 7F CMPA #$7F
019A 27 F5 BEQ GL03
019C 8C 02 48 CMPX #BUFFER+BSIZE-1
019F 26 04 BNE GL04
01A1 86 07 LDA #BELL
01A3 20 02 BRA GL02
01A5 A7 80 GL04: STA ,X+
01A7 BD 07 A8 GL02: JSR PUTCHR
01AA 20 E5 BRA GL03
01AC 81 08 GL05: CMPA #BS
01AE 27 24 BEQ GL07
01B0 81 18 CMPA #CAN
01B2 27 D8 BEQ GL00
01B4 81 0A CMPA #LF
01B6 27 31 BEQ GL09
01B8 81 0D CMPA #CR
01BA 26 D5 BNE GL03
01BC 0D 13 TST MODE
01BE 27 05 BEQ GL06
01C0 BD 07 A8 JSR PUTCHR
01C3 20 07 BRA GL08
01C5 34 10 GL06: PSHS X
01C7 BD 01 3E JSR CRLF
01CA 35 10 PULS X
01CC 86 04 GL08: LDA #EOL
01CE A7 00 STA 0,X
01D0 8E 02 00 LDX #BUFFER
01D3 39 RTS
01D4 8C 02 00 GL07: CMPX #BUFFER
01D7 27 B8 BEQ GL03
01D9 30 1F LEAX -1,X
01DB 86 08 LDA #BS
01DD BD 07 A8 JSR PUTCHR
01E0 86 20 LDA #SPACE
01E2 BD 07 A8 JSR PUTCHR
01E5 86 08 LDA #BS
01E7 20 BE BRA GL02
01E9 1A 01 GL09: ORCC #$01
01EB 06 13 ROR MODE
01ED 20 B8 BRA GL02
01EF ;******************************
01EF ;******************************
01EF 30 01 REM00: LEAX 1,X
01F1 8D 66 REM: BSR SKIPSP
01F3 81 04 CMPA #EOL
01F5 26 F8 BNE REM00
01F7 BD 05 2F ENDSMT: JSR TSTEOL
01FA 96 0C ENDS02: LDA LINENB
01FC 9A 0D ORA LINENB+1
01FE 27 14 BEQ REM09
0200 9C 02 REM05: CMPX USRTOP
0202 26 03 BNE NXTLIN
0204 7E 01 5E JMP ERRORR
0207 EC 81 NXTLIN: LDD ,X++
0209 DD 0C STD LINENB
020B BD 07 9A MSLINE: JSR TSTBRK
020E 8D 08 BSR IFAN
0210 25 03 BCS IMPLET
0212 34 06 PSHS D
0214 39 REM09: RTS
0215 7E 05 40 IMPLET: JMP LET
0218 ;******************************
0218 ;******************************
0218 8D 3F IFAN: BSR SKIPSP
021A 9F 08 STX CURSOR
021C 8E 07 35 LDX #VERBT
021F A6 80 FAN00: LDA ,X+
0221 81 04 CMPA #EOL
0223 26 05 BNE FAN04
0225 9E 08 LDX CURSOR
0227 1A 01 ORCC #$01
0229 39 RTS
022A 9F 10 FAN04: STX CHAR
022C 9E 08 LDX CURSOR
022E 9F 0E STX SCRTCH
0230 9E 0E FAN05: LDX SCRTCH
0232 A1 00 CMPA 0,X
0234 26 15 BNE FAN07
0236 30 01 LEAX 1,X
0238 9F 0E STX SCRTCH
023A 9E 10 LDX CHAR
023C A6 80 LDA ,X+
023E 9F 10 STX CHAR
0240 81 04 CMPA #EOL
0242 26 EC BNE FAN05
0244 EC 00 LDD 0,X
0246 9E 0E LDX SCRTCH
0248 1C FE ANDCC #$FE
024A 39 RTS
024B 9E 10 FAN07: LDX CHAR
024D A6 80 FAN08: LDA ,X+
024F 81 04 CMPA #EOL
0251 26 FA BNE FAN08
0253 30 02 LEAX 2,X
0255 20 C8 BRA FAN00
0257 ;******************************
0257 ;******************************
0257 30 01 NXTNSP: LEAX 1,X
0259 A6 00 SKIPSP: LDA 0,X
025B 81 20 CMPA #SPACE
025D 27 F8 BEQ NXTNSP
025F 39 RTS
0260 ;******************************
0260 ;******************************
0260 8D 1A TSTHEX: BSR TSTDIG
0262 24 22 BCC TST05
0264 81 41 CMPA #"A"
0266 25 11 BCS TST03
0268 81 46 CMPA #"F"
026A 22 0D BHI TST03
026C 80 37 SUBA #"A"-10
026E 1C FE ANDCC #$FE
0270 39 RTS
0271 ;******************************
0271 ;******************************
0271 81 41 TSTLTR: CMPA #"A"
0273 25 04 BCS TST03
0275 81 5A CMPA #"Z"
0277 23 0D BLS TST05
0279 1A 01 TST03: ORCC #$01
027B 39 RTS
027C ;******************************
027C ;******************************
027C 81 30 TSTDIG: CMPA #"0"
027E 25 F9 BCS TST03
0280 81 39 CMPA #"9"
0282 22 F5 BHI TST03
0284 80 30 SUBA #"0"
0286 1C FE TST05: ANDCC #$FE
0288 39 RTS
0289 ;******************************
0289 ;******************************
0289 8D CE TSTVAR: BSR SKIPSP
028B 8D E4 BSR TSTLTR
028D 25 12 BCS TSTV03
028F 1F 89 TFR A,B
0291 A6 01 LDA 1,X
0293 8D DC BSR TSTLTR
0295 24 E2 BCC TST03
0297 30 01 LEAX 1,X
0299 C0 41 SUBB #"A"
029B 58 ASLB
029C 4F CLRA
029D D3 06 ADDD STKTOP
029F 1C FE TSTV02: ANDCC #$FE
02A1 39 TSTV03: RTS
02A2 ;******************************
02A2 ;******************************
02A2 BD 05 0E USER: JSR ARGONE
02A5 34 06 PSHS D
02A7 BD 02 59 JSR SKIPSP
02AA 81 2C CMPA #","
02AC 27 09 BEQ USER03
02AE 81 29 CMPA #")"
02B0 1A 01 ORCC #$01
02B2 27 15 BEQ USER05
02B4 7E 01 55 USER02: JMP ERRORS
02B7 30 01 USER03: LEAX 1,X
02B9 BD 04 41 JSR EXPR
02BC 34 02 PSHS A
02BE BD 02 59 JSR SKIPSP
02C1 81 29 CMPA #")"
02C3 35 02 PULS A
02C5 26 ED BNE USER02
02C7 1C FE ANDCC #$FE
02C9 30 01 USER05: LEAX 1,X
02CB 9F 08 STX CURSOR
02CD AD F1 JSR [,S++]
02CF 9E 08 LDX CURSOR
02D1 1C FE ANDCC #$FE
02D3 39 RTS
02D4 ;******************************
02D4 ;******************************
02D4 BD 02 59 TSTSNB: JSR SKIPSP
02D7 81 2D CMPA #"-"
02D9 26 0D BNE TSTNBR
02DB 30 01 LEAX 1,X
02DD 8D 09 BSR TSTNBR
02DF 25 06 BCS TSN02
02E1 40 NEGA
02E2 50 NEGB
02E3 82 00 SBCA #0
02E5 1C FC ANDCC #$FC
02E7 39 TSN02: RTS
02E8 ;******************************
02E8 ;******************************
02E8 BD 02 59 TSTNBR: JSR SKIPSP
02EB BD 02 7C JSR TSTDIG
02EE 24 2F BCC TSTN02
02F0 81 24 CMPA #"$"
02F2 1A 01 ORCC #$01
02F4 26 60 BNE TSTN09
02F6 30 01 TSTN20: LEAX 1,X
02F8 6F E2 CLR ,-S
02FA 6F E2 CLR ,-S
02FC A6 00 TSTN23: LDA 0,X
02FE BD 02 60 JSR TSTHEX
0301 25 4F BCS TSTN07
0303 30 01 LEAX 1,X
0305 34 10 PSHS X
0307 34 02 PSHS A
0309 EC 63 LDD 3,S
030B 85 F0 BITA #$F0
030D 26 4A BNE TSTN11
030F 58 ASLB
0310 49 ROLA
0311 58 ASLB
0312 49 ROLA
0313 58 ASLB
0314 49 ROLA
0315 58 ASLB
0316 49 ROLA
0317 EB E0 ADDB ,S+
0319 ED 62 STD 2,S
031B 35 10 PULS X
031D 20 DD BRA TSTN23
031F 30 01 TSTN02: LEAX 1,X
0321 34 02 PSHS A
0323 6F E2 CLR ,-S
0325 A6 00 TSTN03: LDA 0,X
0327 BD 02 7C JSR TSTDIG
032A 25 26 BCS TSTN07
032C 30 01 LEAX 1,X
032E 34 10 PSHS X
0330 34 02 PSHS A
0332 EC 63 LDD 3,S
0334 58 ASLB
0335 49 ROLA
0336 29 21 BVS TSTN11
0338 58 ASLB
0339 49 ROLA
033A 29 1D BVS TSTN11
033C E3 63 ADDD 3,S
033E 29 19 BVS TSTN11
0340 58 ASLB
0341 49 ROLA
0342 29 15 BVS TSTN11
0344 EB 60 ADDB 0,S
0346 89 00 ADCA #0
0348 29 0F BVS TSTN11
034A ED 63 STD 3,S
034C 32 61 LEAS 1,S
034E 35 10 PULS X
0350 20 D3 BRA TSTN03
0352 35 06 TSTN07: PULS D
0354 1C FE ANDCC #$FE
0356 1C FD TSTN09: ANDCC #$FD
0358 39 RTS
0359 AE 61 TSTN11: LDX 1,S
035B 32 65 LEAS 5,S
035D 1A 03 ORCC #$03
035F 39 RTS
0360 ;******************************
0360 ;******************************
0360 10 DF 0A TSTSTK: STS SAVESP
0363 DC 0A LDD SAVESP
0365 83 00 30 SUBD #STKCUS
0368 93 04 SUBD STKLIM
036A 39 RTS
036B ;******************************
036B ;******************************
036B BD 04 FB PEEK: JSR PAREXP
036E 34 06 PSHS D
0370 34 10 PSHS X
0372 E6 72 LDB [2,S]
0374 35 10 PULS X
0376 32 62 LEAS 2,S
0378 4F CLRA
0379 39 RTS
037A ;******************************
037A ;******************************
037A BD 04 FB POKE: JSR PAREXP
037D 34 06 PSHS D
037F BD 02 59 JSR SKIPSP
0382 81 3D CMPA #"="
0384 27 03 BEQ POKE05
0386 7E 01 55 JMP ERRORS
0389 30 01 POKE05: LEAX 1,X
038B BD 04 41 JSR EXPR
038E BD 05 2F JSR TSTEOL
0391 34 10 PSHS X
0393 E7 72 STB [2,S]
0395 35 10 PULS X
0397 32 62 LEAS 2,S
0399 7E 01 FA JMP ENDS02
039C ;******************************
039C ;******************************
039C BD 02 59 TSTFUN: JSR SKIPSP
039F 9F 08 STX CURSOR
03A1 8E 03 AC LDX #FUNT
03A4 BD 02 1F JSR FAN00
03A7 25 02 BCS TSTF05
03A9 34 06 PSHS D
03AB 39 TSTF05: RTS
03AC ;******************************
03AC ;******************************
03AC 55 53 52 FUNT: DB "USR"
03AF 04 FCB EOL
03B0 02 A2 FDB USER
03B2 50 45 45 4B DB "PEEK"
03B6 04 FCB EOL
03B7 03 6B FDB PEEK
03B9 4D 45 4D DB "MEM"
03BC 04 FCB EOL
03BD 03 60 FDB TSTSTK
03BF 04 FCB EOL
03C0 ;******************************
03C0 ;******************************
03C0 9E 00 FLINE: LDX USRBAS
03C2 9C 02 FNDLIN: CMPX USRTOP
03C4 26 03 BNE FND03
03C6 1A 03 ORCC #$03
03C8 39 RTS
03C9 10 A3 00 FND03: CMPD 0,X
03CC 26 03 BNE FND05
03CE 1C FC ANDCC #$FC
03D0 39 RTS
03D1 24 05 FND05: BCC FND07
03D3 1A 01 ORCC #$01
03D5 1C FD ANDCC #$FD
03D7 39 RTS
03D8 34 02 FND07: PSHS A
03DA 86 04 LDA #EOL
03DC 30 01 LEAX 1,X
03DE 30 01 FND09: LEAX 1,X
03E0 A1 00 CMPA 0,X
03E2 26 FA BNE FND09
03E4 35 02 PULS A
03E6 30 01 LEAX 1,X
03E8 20 D8 BRA FNDLIN
03EA ;******************************
03EA ;******************************
03EA 8D 55 RELEXP: BSR EXPR
03EC 34 06 PSHS D
03EE 5F CLRB
03EF BD 02 59 JSR SKIPSP
03F2 81 3D CMPA #"="
03F4 27 23 BEQ REL06
03F6 81 3C CMPA #"<"
03F8 26 10 BNE REL03
03FA 30 01 LEAX 1,X
03FC 5C INCB
03FD BD 02 59 JSR SKIPSP
0400 81 3E CMPA #">"
0402 26 11 BNE REL05
0404 30 01 LEAX 1,X
0406 CB 04 ADDB #4
0408 20 13 BRA REL07
040A 81 3E REL03: CMPA #">"
040C 26 5F BNE EXPR06
040E 30 01 LEAX 1,X
0410 CB 04 ADDB #4
0412 BD 02 59 JSR SKIPSP
0415 81 3D REL05: CMPA #"="
0417 26 04 BNE REL07
0419 30 01 REL06: LEAX 1,X
041B CB 02 ADDB #2
041D 34 04 REL07: PSHS B
041F 8D 20 BSR EXPR
0421 34 10 PSHS X
0423 A3 63 SUBD 3,S
0425 1F A8 TFR CC,A
0427 44 LSRA
0428 1F 89 TFR A,B
042A 48 ASLA
042B 48 ASLA
042C 34 04 PSHS B
042E AB E0 ADDA ,S+
0430 84 06 ANDA #$06
0432 26 01 BNE REL08
0434 4C INCA
0435 5F REL08: CLRB
0436 A4 62 ANDA 2,S
0438 27 01 BEQ REL09
043A 53 COMB
043B 4F REL09: CLRA
043C 35 10 PULS X
043E 32 63 LEAS 3,S
0440 39 RTS
0441 ;******************************
0441 ;******************************
0441 6F E2 EXPR: CLR ,-S
0443 6F E2 CLR ,-S
0445 BD 02 59 JSR SKIPSP
0448 81 2D CMPA #"-"
044A 27 17 BEQ EXPR05
044C 81 2B CMPA #"+"
044E 26 02 BNE EXPR03
0450 30 01 EXPR02: LEAX 1,X
0452 8D 1C EXPR03: BSR TERM
0454 E3 60 EXPR04: ADDD 0,S
0456 ED 60 STD 0,S
0458 BD 02 59 JSR SKIPSP
045B 81 2B CMPA #"+"
045D 27 F1 BEQ EXPR02
045F 81 2D CMPA #"-"
0461 26 0A BNE EXPR06
0463 30 01 EXPR05: LEAX 1,X
0465 8D 09 BSR TERM
0467 40 NEGA
0468 50 NEGB
0469 82 00 SBCA #0
046B 20 E7 BRA EXPR04
046D 35 06 EXPR06: PULS D
046F 39 RTS
0470 ;******************************
0470 ;******************************
0470 BD 04 E3 TERM: JSR FACT
0473 34 06 PSHS D
0475 BD 02 59 TERM03: JSR SKIPSP
0478 81 2A CMPA #"*"
047A 27 48 BEQ TERM07
047C 81 2F CMPA #"/"
047E 27 03 BEQ TERM05
0480 35 06 PULS D
0482 39 RTS
0483 30 01 TERM05: LEAX 1,X
0485 8D 5C BSR FACT
0487 34 10 PSHS X
0489 30 62 LEAX 2,S
048B 34 06 PSHS D
048D A8 00 EORA 0,X
048F BD 05 22 JSR ABSX
0492 30 60 LEAX 0,S
0494 BD 05 22 JSR ABSX
0497 34 02 PSHS A
0499 86 11 LDA #17
049B 34 02 PSHS A
049D 4F CLRA
049E 5F CLRB
049F A3 62 DIV05: SUBD 2,S
04A1 24 06 BCC DIV07
04A3 E3 62 ADDD 2,S
04A5 1C FE ANDCC #$FE
04A7 20 02 BRA DIV09
04A9 1A 01 DIV07: ORCC #$01
04AB 69 67 DIV09: ROL 7,S
04AD 69 66 ROL 6,S
04AF 59 ROLB
04B0 49 ROLA
04B1 6A 60 DEC 0,S
04B3 26 EA BNE DIV05
04B5 A6 61 LDA 1,S
04B7 32 64 LEAS 4,S
04B9 4D TSTA
04BA 2A 04 BPL TERM06
04BC 30 62 LEAX 2,S
04BE 8D 66 BSR NEGX
04C0 35 10 TERM06: PULS X
04C2 20 B1 BRA TERM03
04C4 30 01 TERM07: LEAX 1,X
04C6 8D 1B BSR FACT
04C8 34 04 MULT: PSHS B
04CA E6 62 LDB 2,S
04CC 3D MUL
04CD A6 61 LDA 1,S
04CF E7 61 STB 1,S
04D1 E6 60 LDB 0,S
04D3 3D MUL
04D4 A6 62 LDA 2,S
04D6 E7 62 STB 2,S
04D8 35 04 PULS B
04DA 3D MUL
04DB AB 60 ADDA 0,S
04DD AB 61 ADDA 1,S
04DF ED 60 STD 0,S
04E1 20 92 BRA TERM03
04E3 ;******************************
04E3 ;******************************
04E3 BD 02 89 FACT: JSR TSTVAR
04E6 25 09 BCS FACT03
04E8 34 10 PSHS X
04EA 1F 01 TFR D,X
04EC EC 00 LDD 0,X
04EE 35 10 PULS X
04F0 39 FACT02: RTS
04F1 BD 02 E8 FACT03: JSR TSTNBR
04F4 24 FA BCC FACT02
04F6 BD 03 9C JSR TSTFUN
04F9 24 F5 BCC FACT02
04FB 8D 11 PAREXP: BSR ARGONE
04FD 34 02 PSHS A
04FF BD 02 59 JSR SKIPSP
0502 81 29 CMPA #")"
0504 35 02 PULS A
0506 26 03 BNE FACT05
0508 30 01 LEAX 1,X
050A 39 RTS
050B 7E 01 55 FACT05: JMP ERRORS
050E ;******************************
050E ;******************************
050E BD 03 60 ARGONE: JSR TSTSTK
0511 24 03 BCC FACT04
0513 7E 01 4D JMP ERRORF
0516 BD 02 59 FACT04: JSR SKIPSP
0519 81 28 CMPA #"("
051B 26 EE BNE FACT05
051D 30 01 LEAX 1,X
051F 7E 04 41 JMP EXPR
0522 ;******************************
0522 ;******************************
0522 6D 00 ABSX: TST 0,X
0524 2A 08 BPL NEG05
0526 60 00 NEGX: NEG 0,X
0528 60 01 NEG 1,X
052A 24 02 BCC NEG05
052C 6A 00 DEC 0,X
052E 39 NEG05: RTS
052F ;******************************
052F ;******************************
052F 34 02 TSTEOL: PSHS A
0531 BD 02 59 JSR SKIPSP
0534 81 04 CMPA #EOL
0536 27 03 BEQ TEOL03
0538 7E 01 55 JMP ERRORS
053B 30 01 TEOL03: LEAX 1,X
053D 35 02 PULS A
053F 39 RTS
0540 ;******************************
0540 ;******************************
0540 BD 02 89 LET: JSR TSTVAR
0543 24 03 BCC LET03
0545 7E 01 55 JMP ERRORS
0548 34 06 LET03: PSHS D
054A BD 02 59 JSR SKIPSP
054D 81 3D CMPA #"="
054F 27 03 BEQ LET05
0551 7E 01 55 JMP ERRORS
0554 30 01 LET05: LEAX 1,X
0556 BD 04 41 JSR EXPR
0559 8D D4 BSR TSTEOL
055B 9F 08 STX CURSOR
055D 35 10 PULS X
055F ED 00 STD 0,X
0561 9E 08 LDX CURSOR
0563 7E 01 FA JMP ENDS02
0566 ;******************************
0566 ;******************************
0566 BD 03 EA IF: JSR RELEXP
0569 5D TSTB
056A 27 03 BEQ IF03
056C 7E 02 0B JMP MSLINE
056F 7E 01 F1 IF03: JMP REM
0572 ;******************************
0572 ;******************************
0572 BD 04 41 GOTO: JSR EXPR
0575 8D B8 BSR TSTEOL
0577 BD 03 C0 JSR FLINE
057A 25 0F BCS GOSB04
057C 7E 02 07 JMP NXTLIN
057F ;******************************
057F ;******************************
057F BD 04 41 GOSUB: JSR EXPR
0582 8D AB BSR TSTEOL
0584 9F 08 STX CURSOR
0586 BD 03 C0 JSR FLINE
0589 24 03 BCC GOSB03
058B 7E 01 5E GOSB04: JMP ERRORR
058E BD 03 60 GOSB03: JSR TSTSTK
0591 24 03 BCC GOSB05
0593 7E 01 4D JMP ERRORF
0596 DC 08 GOSB05: LDD CURSOR
0598 34 06 PSHS D
059A DC 0C LDD LINENB
059C 34 06 PSHS D
059E BD 02 07 JSR NXTLIN
05A1 35 06 PULS D
05A3 DD 0C STD LINENB
05A5 35 10 PULS X
05A7 7E 01 FA JMP ENDS02
05AA ;******************************
05AA ;******************************
05AA RETURN: EQU TSTEOL
05AA ;******************************
05AA ;******************************
05AA BD 02 59 PRINT: JSR SKIPSP
05AD 81 2C PR01: CMPA #","
05AF 27 36 BEQ PR05
05B1 81 3B CMPA #";"
05B3 27 3D BEQ PR07
05B5 81 04 CMPA #EOL
05B7 27 25 BEQ PR04
05B9 81 22 CMPA #$22
05BB 26 06 BNE PR02
05BD 30 01 LEAX 1,X
05BF 8D 42 BSR PRNTQS
05C1 20 09 BRA PR03
05C3 BD 04 41 PR02: JSR EXPR
05C6 34 10 PSHS X
05C8 8D 47 BSR PRNTN
05CA 35 10 PULS X
05CC BD 02 59 PR03: JSR SKIPSP
05CF 81 2C CMPA #","
05D1 27 14 BEQ PR05
05D3 81 3B CMPA #";"
05D5 27 1B BEQ PR07
05D7 81 04 CMPA #EOL
05D9 27 03 BEQ PR04
05DB 7E 01 55 JMP ERRORS
05DE 34 10 PR04: PSHS X
05E0 BD 01 3E JSR CRLF
05E3 35 10 PULS X
05E5 20 14 BRA PR08
05E7 C6 07 PR05: LDB #$7
05E9 86 20 PR06: LDA #SPACE
05EB BD 07 A8 JSR PUTCHR
05EE D5 12 BITB ZONE
05F0 26 F7 BNE PR06
05F2 30 01 PR07: LEAX 1,X
05F4 BD 02 59 JSR SKIPSP
05F7 81 04 CMPA #EOL
05F9 26 B2 BNE PR01
05FB 30 01 PR08: LEAX 1,X
05FD 7E 01 FA JMP ENDS02
0600 ;*
0600 ;*
0600 BD 07 A8 PRQ01: JSR PUTCHR
0603 A6 80 PRNTQS: LDA ,X+
0605 81 04 CMPA #EOL
0607 26 03 BNE PRQ03
0609 7E 01 55 JMP ERRORS
060C 81 22 PRQ03: CMPA #$22
060E 26 F0 BNE PRQ01
0610 39 RTS
0611 ;*
0611 4D PRNTN: TSTA
0612 2A 0D BPL PRN03
0614 40 NEGA
0615 50 NEGB
0616 82 00 SBCA #0
0618 34 02 PSHS A
061A 86 2D LDA #"-"
061C BD 07 A8 JSR PUTCHR
061F 35 02 PULS A
0621 8E 06 50 PRN03: LDX #PRNPT-2
0624 30 02 PRN05: LEAX 2,X
0626 10 A3 00 CMPD 0,X
0629 24 05 BCC PRN07
062B 8C 06 5A CMPX #PRNPTO
062E 26 F4 BNE PRN05
0630 0F 10 PRN07: CLR CHAR
0632 10 A3 00 PRN09: CMPD 0,X
0635 25 06 BCS PRN11
0637 A3 00 SUBD 0,X
0639 0C 10 INC CHAR
063B 20 F5 BRA PRN09
063D 34 02 PRN11: PSHS A
063F 86 30 LDA #"0"
0641 9B 10 ADDA CHAR
0643 BD 07 A8 JSR PUTCHR
0646 35 02 PULS A
0648 8C 06 5A CMPX #PRNPTO
064B 27 04 BEQ PRN13
064D 30 02 LEAX 2,X
064F 20 DF BRA PRN07
0651 39 PRN13: RTS
0652 27 10 PRNPT: FDB 10000
0654 03 E8 FDB 1000
0656 00 64 FDB 100
0658 00 0A FDB 10
065A 00 01 PRNPTO: FDB 1
065C ;*
065C 8E 06 54 PRNT4: LDX #PRNPT+2
065F 20 CF BRA PRN07
0661 ;******************************
0661 ;******************************
0661 BD 02 89 INPUT: JSR TSTVAR
0664 25 3C BCS IN11
0666 34 06 PSHS D
0668 9F 08 STX CURSOR
066A 86 3F IN03: LDA #"?"
066C BD 07 A8 JSR PUTCHR
066F BD 01 8E JSR GETLIN
0672 BD 02 59 IN05: JSR SKIPSP
0675 81 04 CMPA #EOL
0677 27 F1 BEQ IN03
0679 BD 02 D4 JSR TSTSNB
067C 24 0B BCC IN07
067E 8E 06 B6 LDX #RMESS
0681 BD 01 37 JSR PUTSTR
0684 BD 01 3E JSR CRLF
0687 20 E1 BRA IN03
0689 9F 0E IN07: STX SCRTCH
068B 35 10 PULS X
068D ED 00 STD 0,X
068F 9E 08 LDX CURSOR
0691 BD 02 59 JSR SKIPSP
0694 81 2C CMPA #","
0696 27 03 BEQ IN09
0698 7E 01 F7 JMP ENDSMT
069B 30 01 IN09: LEAX 1,X
069D BD 02 89 JSR TSTVAR
06A0 24 03 BCC IN13
06A2 7E 01 55 IN11: JMP ERRORS
06A5 34 06 IN13: PSHS D
06A7 34 10 PSHS X
06A9 9E 0E LDX SCRTCH
06AB BD 02 59 JSR SKIPSP
06AE 81 2C CMPA #","
06B0 26 C0 BNE IN05
06B2 30 01 LEAX 1,X
06B4 20 BC BRA IN05
06B6 52 45 2D 45 4E 54 45 52 RMESS: DB "RE-ENTER"
06BE 04 FCB EOL
06BF ;******************************
06BF ;******************************
06BF 9E 06 RUN: LDX STKTOP
06C1 86 34 LDA #52
06C3 6F 80 RUN01: CLR ,X+
06C5 4A DECA
06C6 26 FB BNE RUN01
06C8 9E 00 LDX USRBAS
06CA 7E 02 00 JMP REM05
06CD ;******************************
06CD ;******************************
06CD BD 02 E8 LIST: JSR TSTNBR
06D0 24 08 BCC LIST03
06D2 4F CLRA
06D3 5F CLRB
06D4 DD 08 STD CURSOR
06D6 86 7F LDA #$7F
06D8 20 17 BRA LIST07
06DA DD 08 LIST03: STD CURSOR
06DC BD 02 59 JSR SKIPSP
06DF 81 2C CMPA #","
06E1 27 04 BEQ LIST05
06E3 96 08 LDA CURSOR
06E5 20 0A BRA LIST07
06E7 30 01 LIST05: LEAX 1,X
06E9 BD 02 E8 JSR TSTNBR
06EC 24 03 BCC LIST07
06EE 7E 01 55 JMP ERRORS
06F1 BD 05 2F LIST07: JSR TSTEOL
06F4 34 06 PSHS D
06F6 DC 08 LDD CURSOR
06F8 9F 08 STX CURSOR
06FA BD 03 C0 JSR FLINE
06FD 9C 02 LIST09: CMPX USRTOP
06FF 27 28 BEQ LIST10
0701 35 06 PULS D
0703 10 A3 00 CMPD 0,X
0706 25 28 BCS LIST11
0708 34 06 PSHS D
070A EC 81 LDD ,X++
070C 34 10 PSHS X
070E BD 06 5C JSR PRNT4
0711 35 10 PULS X
0713 86 20 LDA #SPACE
0715 BD 07 A8 JSR PUTCHR
0718 BD 01 37 JSR PUTSTR
071B 30 01 LEAX 1,X
071D 34 10 PSHS X
071F BD 01 3E JSR CRLF
0722 35 10 PULS X
0724 BD 07 9A JSR TSTBRK
0727 20 D4 BRA LIST09
0729 32 62 LIST10: LEAS 2,S
072B 86 03 LDA #ETX
072D BD 07 A8 JSR PUTCHR
0730 9E 08 LIST11: LDX CURSOR
0732 7E 01 FA JMP ENDS02
0735 ;******************************
0735 ;******************************
0735 4C 45 54 VERBT: DB "LET"
0738 04 FCB EOL
0739 05 40 FDB LET
073B 49 46 DB "IF"
073D 04 FCB EOL
073E 05 66 FDB IF
0740 47 4F 54 4F DB "GOTO"
0744 04 FCB EOL
0745 05 72 FDB GOTO
0747 47 4F 53 55 42 DB "GOSUB"
074C 04 FCB EOL
074D 05 7F FDB GOSUB
074F 52 45 54 55 52 4E DB "RETURN"
0755 04 FCB EOL
0756 05 2F FDB RETURN
0758 50 4F 4B 45 DB "POKE"
075C 04 FCB EOL
075D 03 7A FDB POKE
075F 50 52 49 4E 54 DB "PRINT"
0764 04 FCB EOL
0765 05 AA FDB PRINT
0767 49 4E 50 55 54 DB "INPUT"
076C 04 FCB EOL
076D 06 61 FDB INPUT
076F 52 45 4D DB "REM"
0772 04 FCB EOL
0773 01 F1 FDB REM
0775 53 54 4F 50 DB "STOP"
0779 04 FCB EOL
077A 07 E4 FDB END
077C 45 4E 44 DB "END"
077F 04 FCB EOL
0780 07 E4 FDB END
0782 52 55 4E DB "RUN"
0785 04 FCB EOL
0786 06 BF FDB RUN
0788 4C 49 53 54 DB "LIST"
078C 04 FCB EOL
078D 06 CD FDB LIST
078F 4E 45 57 DB "NEW"
0792 04 FCB EOL
0793 00 1E FDB CLEAR
0795 3F DB "?"
0796 04 FCB EOL
0797 05 AA FDB PRINT
0799 04 FCB EOL
079A ;******************************
079A ;******************************
079A 8D 2A TSTBRK: BSR BRKEEE
079C 27 09 BEQ GETC05
079E 8D 0D GETCHR: BSR INEEE
07A0 81 03 CMPA #ETX
07A2 26 03 BNE GETC05
07A4 7E 01 66 JMP BREAK
07A7 39 GETC05: RTS
07A8 0C 12 PUTCHR: INC ZONE
07AA 7E 07 B7 JMP OUTEEE
07AD ;******************************
07AD ;******************************
07AD 8D 17 INEEE: BSR BRKEEE
07AF 27 FC BEQ INEEE
07B1 B6 83 FF LDA RECEV
07B4 84 7F ANDA #$7F
07B6 39 RTS
07B7 34 02 OUTEEE: PSHS A
07B9 B6 83 FE OUT01: LDA TRCS
07BC 85 02 BITA #TDRE
07BE 27 F9 BEQ OUT01
07C0 35 02 PULS A
07C2 B7 83 FF STA TRANS
07C5 39 RTS
07C6 34 02 BRKEEE: PSHS A
07C8 B6 83 FE BRK03: LDA TRCS
07CB 85 20 BITA #ORFE
07CD 27 05 BEQ BRK05
07CF B6 83 FF LDA RECEV
07D2 20 F4 BRA BRK03
07D4 85 01 BRK05: BITA #RDRF
07D6 35 02 PULS A
07D8 39 RTS
07D9 ;*
07D9 86 03 LDA #CNTL1
07DB B7 83 FE STA RMCR
07DE 86 15 LDA #CNTL2
07E0 B7 83 FE STA TRCS
07E3 INTEEE: EQU $
07E3 39 RTS
07E4 ;******************************
07E4 ;******************************
07E4 END:
EOL: 0004 DEFINED AT LINE 18
> USED AT LINE 127
> USED AT LINE 232
> USED AT LINE 235
> USED AT LINE 238
> USED AT LINE 241
> USED AT LINE 244
> USED AT LINE 560
> USED AT LINE 563
> USED AT LINE 566
> USED AT LINE 568
> USED AT LINE 966
> USED AT LINE 1027
> USED AT LINE 1030
> USED AT LINE 1033
> USED AT LINE 1036
> USED AT LINE 1039
> USED AT LINE 1042
> USED AT LINE 1045
> USED AT LINE 1048
> USED AT LINE 1051
> USED AT LINE 1054
> USED AT LINE 1057
> USED AT LINE 1060
> USED AT LINE 1063
> USED AT LINE 1066
> USED AT LINE 1069
> USED AT LINE 1071
ETX: 0003 DEFINED AT LINE 19
SPACE: 0020 DEFINED AT LINE 20
CR: 000D DEFINED AT LINE 21
> USED AT LINE 227
LF: 000A DEFINED AT LINE 22
> USED AT LINE 227
BS: 0008 DEFINED AT LINE 23
CAN: 0018 DEFINED AT LINE 24
BELL: 0007 DEFINED AT LINE 25
FILL: 0000 DEFINED AT LINE 26
DEL: 007F DEFINED AT LINE 27
BSIZE: 0049 DEFINED AT LINE 28
> USED AT LINE 48
STKCUS: 0030 DEFINED AT LINE 29
BACIA: 83FE DEFINED AT LINE 31
> USED AT LINE 32
> USED AT LINE 33
> USED AT LINE 34
> USED AT LINE 35
RMCR: 83FE DEFINED AT LINE 32
> USED AT LINE 1108
TRCS: 83FE DEFINED AT LINE 33
> USED AT LINE 1091
> USED AT LINE 1098
> USED AT LINE 1110
RECEV: 83FF DEFINED AT LINE 34
> USED AT LINE 1087
> USED AT LINE 1101
TRANS: 83FF DEFINED AT LINE 35
> USED AT LINE 1095
CNTL1: 0003 DEFINED AT LINE 36
CNTL2: 0015 DEFINED AT LINE 37
RDRF: 0001 DEFINED AT LINE 38
ORFE: 0020 DEFINED AT LINE 39
TDRE: 0002 DEFINED AT LINE 40
LORAM: 0080 DEFINED AT LINE 43
BUFFER: 0200 DEFINED AT LINE 44
> USED AT LINE 48
> USED AT LINE 49
RAMSIZ: 2000 DEFINED AT LINE 45
> USED AT LINE 49
ROMADR: F000 DEFINED AT LINE 46
RAMBEG: 0249 DEFINED AT LINE 48
RAMEND: 2200 DEFINED AT LINE 49
RAMPAT: AA0F DEFINED AT LINE 51
ROMPAT: F055 DEFINED AT LINE 52
USRBAS: 0000 DEFINED AT LINE 56
> USED AT LINE 85
> USED AT LINE 94
> USED AT LINE 139
> USED AT LINE 571
> USED AT LINE 974
USRTOP: 0002 DEFINED AT LINE 57
> USED AT LINE 86
> USED AT LINE 112
> USED AT LINE 135
> USED AT LINE 148
> USED AT LINE 158
> USED AT LINE 180
> USED AT LINE 182
> USED AT LINE 183
> USED AT LINE 187
> USED AT LINE 190
> USED AT LINE 313
> USED AT LINE 572
> USED AT LINE 1000
STKLIM: 0004 DEFINED AT LINE 58
> USED AT LINE 87
> USED AT LINE 113
> USED AT LINE 159
> USED AT LINE 184
> USED AT LINE 188
> USED AT LINE 520
STKTOP: 0006 DEFINED AT LINE 59
> USED AT LINE 78
> USED AT LINE 82
> USED AT LINE 91
> USED AT LINE 406
> USED AT LINE 969
CURSOR: 0008 DEFINED AT LINE 60
> USED AT LINE 95
> USED AT LINE 134
> USED AT LINE 141
> USED AT LINE 193
> USED AT LINE 201
> USED AT LINE 327
> USED AT LINE 332
> USED AT LINE 336
> USED AT LINE 429
> USED AT LINE 431
> USED AT LINE 551
> USED AT LINE 794
> USED AT LINE 797
> USED AT LINE 817
> USED AT LINE 824
> USED AT LINE 932
> USED AT LINE 948
> USED AT LINE 982
> USED AT LINE 985
> USED AT LINE 989
> USED AT LINE 997
> USED AT LINE 998
> USED AT LINE 1022
SAVESP: 000A DEFINED AT LINE 61
> USED AT LINE 143
> USED AT LINE 152
> USED AT LINE 154
> USED AT LINE 157
> USED AT LINE 191
> USED AT LINE 197
> USED AT LINE 517
> USED AT LINE 518
LINENB: 000C DEFINED AT LINE 62
> USED AT LINE 97
> USED AT LINE 248
> USED AT LINE 310
> USED AT LINE 311
> USED AT LINE 317
> USED AT LINE 826
> USED AT LINE 830
SCRTCH: 000E DEFINED AT LINE 63
> USED AT LINE 132
> USED AT LINE 160
> USED AT LINE 204
> USED AT LINE 206
> USED AT LINE 337
> USED AT LINE 338
> USED AT LINE 342
> USED AT LINE 349
> USED AT LINE 945
> USED AT LINE 959
CHAR: 0010 DEFINED AT LINE 64
> USED AT LINE 151
> USED AT LINE 155
> USED AT LINE 181
> USED AT LINE 192
> USED AT LINE 196
> USED AT LINE 203
> USED AT LINE 207
> USED AT LINE 209
> USED AT LINE 335
> USED AT LINE 343
> USED AT LINE 345
> USED AT LINE 352
> USED AT LINE 903
> USED AT LINE 907
> USED AT LINE 911
ZONE: 0012 DEFINED AT LINE 65
> USED AT LINE 225
> USED AT LINE 869
> USED AT LINE 1081
MODE: 0013 DEFINED AT LINE 66
> USED AT LINE 92
> USED AT LINE 98
> USED AT LINE 280
> USED AT LINE 301
RESRVD: 0014 DEFINED AT LINE 67
LOEND: 0015 DEFINED AT LINE 68
BASIC: 0000 DEFINED AT LINE 76
WARMS: 000C DEFINED AT LINE 78
SETUP: 0014 DEFINED AT LINE 81
> USED AT LINE 76
SET03: 0018 DEFINED AT LINE 82
CLEAR: 001E DEFINED AT LINE 84
> USED AT LINE 1067
CLR02: 0025 DEFINED AT LINE 87
WMS05: 0027 DEFINED AT LINE 88
> USED AT LINE 80
CMDB: 0030 DEFINED AT LINE 91
> USED AT LINE 110
> USED AT LINE 255
CMDE: 003C DEFINED AT LINE 96
> USED AT LINE 108
> USED AT LINE 124
CMD01: 004A DEFINED AT LINE 102
> USED AT LINE 99
CMD02: 0060 DEFINED AT LINE 111
> USED AT LINE 104
CMD03: 006D DEFINED AT LINE 117
> USED AT LINE 115
CMD04: 0072 DEFINED AT LINE 119
CMD05: 007F DEFINED AT LINE 125
> USED AT LINE 105
> USED AT LINE 118
> USED AT LINE 122
VSTR: 0082 DEFINED AT LINE 126
EDITOR: 008D DEFINED AT LINE 130
> USED AT LINE 123
ED00: 00A1 DEFINED AT LINE 139
> USED AT LINE 136
ED01: 00A3 DEFINED AT LINE 140
> USED AT LINE 138
ED02: 00AE DEFINED AT LINE 145
> USED AT LINE 147
ED03: 00B4 DEFINED AT LINE 148
> USED AT LINE 156
ED35: 00C6 DEFINED AT LINE 157
> USED AT LINE 149
ED04: 00CC DEFINED AT LINE 160
> USED AT LINE 142
ED05: 00D0 DEFINED AT LINE 162
> USED AT LINE 165
ED55: 00DD DEFINED AT LINE 170
> USED AT LINE 167
ED06: 00E1 DEFINED AT LINE 172
> USED AT LINE 176
ED07: 0105 DEFINED AT LINE 190
> USED AT LINE 186
ED08: 0107 DEFINED AT LINE 191
> USED AT LINE 199
ED09: 0119 DEFINED AT LINE 200
> USED AT LINE 194
ED10: 0121 DEFINED AT LINE 204
> USED AT LINE 211
PUTS01: 0132 DEFINED AT LINE 215
> USED AT LINE 219
PUTSTR: 0137 DEFINED AT LINE 217
> USED AT LINE 90
> USED AT LINE 224
> USED AT LINE 253
> USED AT LINE 942
> USED AT LINE 1012
CRLF: 013E DEFINED AT LINE 223
> USED AT LINE 88
> USED AT LINE 93
> USED AT LINE 245
> USED AT LINE 254
> USED AT LINE 258
> USED AT LINE 285
> USED AT LINE 863
> USED AT LINE 943
> USED AT LINE 1015
CRLFST: 0146 DEFINED AT LINE 227
ERRORF: 014D DEFINED AT LINE 230
> USED AT LINE 189
> USED AT LINE 756
> USED AT LINE 823
ERRORS: 0155 DEFINED AT LINE 233
> USED AT LINE 125
> USED AT LINE 419
> USED AT LINE 539
> USED AT LINE 751
> USED AT LINE 777
> USED AT LINE 785
> USED AT LINE 790
> USED AT LINE 861
> USED AT LINE 883
> USED AT LINE 956
> USED AT LINE 994
ERRORR: 015E DEFINED AT LINE 236
> USED AT LINE 116
> USED AT LINE 315
> USED AT LINE 820
BREAK: 0166 DEFINED AT LINE 239
> USED AT LINE 1079
ER01: 0173 DEFINED AT LINE 245
> USED AT LINE 230
> USED AT LINE 233
> USED AT LINE 236
> USED AT LINE 239
GL00: 018C DEFINED AT LINE 258
> USED AT LINE 275
GETLIN: 018E DEFINED AT LINE 259
> USED AT LINE 102
> USED AT LINE 935
GL03: 0191 DEFINED AT LINE 260
> USED AT LINE 264
> USED AT LINE 271
> USED AT LINE 279
> USED AT LINE 292
GL04: 01A5 DEFINED AT LINE 269
> USED AT LINE 266
GL02: 01A7 DEFINED AT LINE 270
> USED AT LINE 268
> USED AT LINE 299
> USED AT LINE 302
GL05: 01AC DEFINED AT LINE 272
> USED AT LINE 262
GL06: 01C5 DEFINED AT LINE 284
> USED AT LINE 281
GL08: 01CC DEFINED AT LINE 287
> USED AT LINE 283
GL07: 01D4 DEFINED AT LINE 291
> USED AT LINE 273
GL09: 01E9 DEFINED AT LINE 300
> USED AT LINE 277
REM00: 01EF DEFINED AT LINE 305
> USED AT LINE 308
REM: 01F1 DEFINED AT LINE 306
> USED AT LINE 805
> USED AT LINE 1052
ENDSMT: 01F7 DEFINED AT LINE 309
> USED AT LINE 952
ENDS02: 01FA DEFINED AT LINE 310
> USED AT LINE 547
> USED AT LINE 798
> USED AT LINE 832
> USED AT LINE 876
> USED AT LINE 1023
REM05: 0200 DEFINED AT LINE 313
> USED AT LINE 975
NXTLIN: 0207 DEFINED AT LINE 316
> USED AT LINE 314
> USED AT LINE 812
> USED AT LINE 828
MSLINE: 020B DEFINED AT LINE 318
> USED AT LINE 109
> USED AT LINE 804
REM09: 0214 DEFINED AT LINE 322
> USED AT LINE 312
IMPLET: 0215 DEFINED AT LINE 323
> USED AT LINE 320
IFAN: 0218 DEFINED AT LINE 326
> USED AT LINE 319
FAN00: 021F DEFINED AT LINE 329
> USED AT LINE 357
> USED AT LINE 553
FAN04: 022A DEFINED AT LINE 335
> USED AT LINE 331
FAN05: 0230 DEFINED AT LINE 338
> USED AT LINE 347
FAN07: 024B DEFINED AT LINE 352
> USED AT LINE 340
FAN08: 024D DEFINED AT LINE 353
> USED AT LINE 355
NXTNSP: 0257 DEFINED AT LINE 360
> USED AT LINE 363
SKIPSP: 0259 DEFINED AT LINE 361
> USED AT LINE 106
> USED AT LINE 131
> USED AT LINE 306
> USED AT LINE 326
> USED AT LINE 395
> USED AT LINE 413
> USED AT LINE 423
> USED AT LINE 436
> USED AT LINE 449
> USED AT LINE 536
> USED AT LINE 550
> USED AT LINE 598
> USED AT LINE 605
> USED AT LINE 615
> USED AT LINE 646
> USED AT LINE 655
> USED AT LINE 672
> USED AT LINE 745
> USED AT LINE 757
> USED AT LINE 774
> USED AT LINE 787
> USED AT LINE 838
> USED AT LINE 854
> USED AT LINE 872
> USED AT LINE 936
> USED AT LINE 949
> USED AT LINE 960
> USED AT LINE 986
TSTHEX: 0260 DEFINED AT LINE 367
> USED AT LINE 459
TSTLTR: 0271 DEFINED AT LINE 378
> USED AT LINE 396
> USED AT LINE 400
TST03: 0279 DEFINED AT LINE 382
> USED AT LINE 370
> USED AT LINE 372
> USED AT LINE 379
> USED AT LINE 387
> USED AT LINE 389
> USED AT LINE 401
TSTDIG: 027C DEFINED AT LINE 386
> USED AT LINE 367
> USED AT LINE 450
> USED AT LINE 483
TST05: 0286 DEFINED AT LINE 391
> USED AT LINE 368
> USED AT LINE 381
TSTVAR: 0289 DEFINED AT LINE 395
> USED AT LINE 732
> USED AT LINE 783
> USED AT LINE 929
> USED AT LINE 954
TSTV02: 029F DEFINED AT LINE 407
TSTV03: 02A1 DEFINED AT LINE 408
> USED AT LINE 397
USER: 02A2 DEFINED AT LINE 411
> USED AT LINE 561
USER02: 02B4 DEFINED AT LINE 419
> USED AT LINE 426
USER03: 02B7 DEFINED AT LINE 420
> USED AT LINE 415
USER05: 02C9 DEFINED AT LINE 428
> USED AT LINE 418
TSTSNB: 02D4 DEFINED AT LINE 436
> USED AT LINE 939
TSN02: 02E7 DEFINED AT LINE 446
> USED AT LINE 441
TSTNBR: 02E8 DEFINED AT LINE 449
> USED AT LINE 103
> USED AT LINE 438
> USED AT LINE 440
> USED AT LINE 739
> USED AT LINE 978
> USED AT LINE 992
TSTN20: 02F6 DEFINED AT LINE 455
TSTN23: 02FC DEFINED AT LINE 458
> USED AT LINE 478
TSTN02: 031F DEFINED AT LINE 479
> USED AT LINE 451
TSTN03: 0325 DEFINED AT LINE 482
> USED AT LINE 506
TSTN07: 0352 DEFINED AT LINE 507
> USED AT LINE 460
> USED AT LINE 484
TSTN09: 0356 DEFINED AT LINE 509
> USED AT LINE 454
TSTN11: 0359 DEFINED AT LINE 511
> USED AT LINE 466
> USED AT LINE 491
> USED AT LINE 494
> USED AT LINE 496
> USED AT LINE 499
> USED AT LINE 502
TSTSTK: 0360 DEFINED AT LINE 517
> USED AT LINE 185
> USED AT LINE 567
> USED AT LINE 754
> USED AT LINE 821
PEEK: 036B DEFINED AT LINE 524
> USED AT LINE 564
POKE: 037A DEFINED AT LINE 534
> USED AT LINE 1043
POKE05: 0389 DEFINED AT LINE 540
> USED AT LINE 538
TSTFUN: 039C DEFINED AT LINE 550
> USED AT LINE 741
TSTF05: 03AB DEFINED AT LINE 556
> USED AT LINE 554
FUNT: 03AC DEFINED AT LINE 559
FLINE: 03C0 DEFINED AT LINE 571
> USED AT LINE 810
> USED AT LINE 818
> USED AT LINE 999
FNDLIN: 03C2 DEFINED AT LINE 572
> USED AT LINE 140
> USED AT LINE 592
FND03: 03C9 DEFINED AT LINE 576
> USED AT LINE 573
FND05: 03D1 DEFINED AT LINE 580
> USED AT LINE 577
FND07: 03D8 DEFINED AT LINE 584
> USED AT LINE 580
FND09: 03DE DEFINED AT LINE 587
> USED AT LINE 589
RELEXP: 03EA DEFINED AT LINE 595
> USED AT LINE 801
REL03: 040A DEFINED AT LINE 611
> USED AT LINE 602
REL05: 0415 DEFINED AT LINE 616
> USED AT LINE 607
REL06: 0419 DEFINED AT LINE 618
> USED AT LINE 600
REL07: 041D DEFINED AT LINE 620
> USED AT LINE 610
> USED AT LINE 617
REL08: 0435 DEFINED AT LINE 634
> USED AT LINE 632
REL09: 043B DEFINED AT LINE 638
> USED AT LINE 636
EXPR: 0441 DEFINED AT LINE 644
> USED AT LINE 421
> USED AT LINE 541
> USED AT LINE 595
> USED AT LINE 621
> USED AT LINE 761
> USED AT LINE 792
> USED AT LINE 808
> USED AT LINE 815
> USED AT LINE 850
EXPR02: 0450 DEFINED AT LINE 651
> USED AT LINE 657
EXPR03: 0452 DEFINED AT LINE 652
> USED AT LINE 650
EXPR04: 0454 DEFINED AT LINE 653
> USED AT LINE 665
EXPR05: 0463 DEFINED AT LINE 660
> USED AT LINE 648
EXPR06: 046D DEFINED AT LINE 666
> USED AT LINE 612
> USED AT LINE 659
TERM: 0470 DEFINED AT LINE 670
> USED AT LINE 652
> USED AT LINE 661
TERM03: 0475 DEFINED AT LINE 672
> USED AT LINE 712
> USED AT LINE 729
TERM05: 0483 DEFINED AT LINE 679
> USED AT LINE 676
DIV05: 049F DEFINED AT LINE 693
> USED AT LINE 704
DIV07: 04A9 DEFINED AT LINE 698
> USED AT LINE 694
DIV09: 04AB DEFINED AT LINE 699
> USED AT LINE 697
TERM06: 04C0 DEFINED AT LINE 711
> USED AT LINE 708
TERM07: 04C4 DEFINED AT LINE 713
> USED AT LINE 674
MULT: 04C8 DEFINED AT LINE 715
FACT: 04E3 DEFINED AT LINE 732
> USED AT LINE 670
> USED AT LINE 680
> USED AT LINE 714
FACT02: 04F0 DEFINED AT LINE 738
> USED AT LINE 740
> USED AT LINE 742
FACT03: 04F1 DEFINED AT LINE 739
> USED AT LINE 733
PAREXP: 04FB DEFINED AT LINE 743
> USED AT LINE 524
> USED AT LINE 534
FACT05: 050B DEFINED AT LINE 751
> USED AT LINE 748
> USED AT LINE 759
ARGONE: 050E DEFINED AT LINE 754
> USED AT LINE 411
> USED AT LINE 743
FACT04: 0516 DEFINED AT LINE 757
> USED AT LINE 755
ABSX: 0522 DEFINED AT LINE 764
> USED AT LINE 685
> USED AT LINE 687
NEGX: 0526 DEFINED AT LINE 766
> USED AT LINE 710
NEG05: 052E DEFINED AT LINE 770
> USED AT LINE 765
> USED AT LINE 768
TSTEOL: 052F DEFINED AT LINE 773
> USED AT LINE 309
> USED AT LINE 542
> USED AT LINE 793
> USED AT LINE 809
> USED AT LINE 816
> USED AT LINE 835
> USED AT LINE 995
TEOL03: 053B DEFINED AT LINE 778
> USED AT LINE 776
LET: 0540 DEFINED AT LINE 783
> USED AT LINE 323
> USED AT LINE 1028
LET03: 0548 DEFINED AT LINE 786
> USED AT LINE 784
LET05: 0554 DEFINED AT LINE 791
> USED AT LINE 789
IF: 0566 DEFINED AT LINE 801
> USED AT LINE 1031
IF03: 056F DEFINED AT LINE 805
> USED AT LINE 803
GOTO: 0572 DEFINED AT LINE 808
> USED AT LINE 1034
GOSUB: 057F DEFINED AT LINE 815
> USED AT LINE 1037
GOSB04: 058B DEFINED AT LINE 820
> USED AT LINE 811
GOSB03: 058E DEFINED AT LINE 821
> USED AT LINE 819
GOSB05: 0596 DEFINED AT LINE 824
> USED AT LINE 822
RETURN: 052F DEFINED AT LINE 835
> USED AT LINE 1040
PRINT: 05AA DEFINED AT LINE 838
> USED AT LINE 1046
> USED AT LINE 1070
PR01: 05AD DEFINED AT LINE 839
> USED AT LINE 874
PR02: 05C3 DEFINED AT LINE 850
> USED AT LINE 846
PR03: 05CC DEFINED AT LINE 854
> USED AT LINE 849
PR04: 05DE DEFINED AT LINE 862
> USED AT LINE 844
> USED AT LINE 860
PR05: 05E7 DEFINED AT LINE 866
> USED AT LINE 840
> USED AT LINE 856
PR06: 05E9 DEFINED AT LINE 867
> USED AT LINE 870
PR07: 05F2 DEFINED AT LINE 871
> USED AT LINE 842
> USED AT LINE 858
PR08: 05FB DEFINED AT LINE 875
> USED AT LINE 865
PRQ01: 0600 DEFINED AT LINE 879
> USED AT LINE 885
PRNTQS: 0603 DEFINED AT LINE 880
> USED AT LINE 848
PRQ03: 060C DEFINED AT LINE 884
> USED AT LINE 882
PRNTN: 0611 DEFINED AT LINE 888
> USED AT LINE 852
PRN03: 0621 DEFINED AT LINE 897
> USED AT LINE 889
PRN05: 0624 DEFINED AT LINE 898
> USED AT LINE 902
PRN07: 0630 DEFINED AT LINE 903
> USED AT LINE 900
> USED AT LINE 917
> USED AT LINE 926
PRN09: 0632 DEFINED AT LINE 904
> USED AT LINE 908
PRN11: 063D DEFINED AT LINE 909
> USED AT LINE 905
PRN13: 0651 DEFINED AT LINE 918
> USED AT LINE 915
PRNPT: 0652 DEFINED AT LINE 919
PRNPTO: 065A DEFINED AT LINE 923
PRNT4: 065C DEFINED AT LINE 925
> USED AT LINE 249
> USED AT LINE 1008
INPUT: 0661 DEFINED AT LINE 929
> USED AT LINE 1049
IN03: 066A DEFINED AT LINE 933
> USED AT LINE 938
> USED AT LINE 944
IN05: 0672 DEFINED AT LINE 936
> USED AT LINE 962
> USED AT LINE 964
IN07: 0689 DEFINED AT LINE 945
> USED AT LINE 940
IN09: 069B DEFINED AT LINE 953
> USED AT LINE 951
IN11: 06A2 DEFINED AT LINE 956
> USED AT LINE 930
IN13: 06A5 DEFINED AT LINE 957
> USED AT LINE 955
RMESS: 06B6 DEFINED AT LINE 965
RUN: 06BF DEFINED AT LINE 969
> USED AT LINE 1061
RUN01: 06C3 DEFINED AT LINE 971
> USED AT LINE 973
LIST: 06CD DEFINED AT LINE 978
> USED AT LINE 1064
LIST03: 06DA DEFINED AT LINE 985
> USED AT LINE 979
LIST05: 06E7 DEFINED AT LINE 991
> USED AT LINE 988
LIST07: 06F1 DEFINED AT LINE 995
> USED AT LINE 984
> USED AT LINE 990
> USED AT LINE 993
LIST09: 06FD DEFINED AT LINE 1000
> USED AT LINE 1018
LIST10: 0729 DEFINED AT LINE 1019
> USED AT LINE 1001
LIST11: 0730 DEFINED AT LINE 1022
> USED AT LINE 1004
VERBT: 0735 DEFINED AT LINE 1026
TSTBRK: 079A DEFINED AT LINE 1074
> USED AT LINE 318
> USED AT LINE 1017
GETCHR: 079E DEFINED AT LINE 1076
> USED AT LINE 260
GETC05: 07A7 DEFINED AT LINE 1080
> USED AT LINE 1075
> USED AT LINE 1078
PUTCHR: 07A8 DEFINED AT LINE 1081
> USED AT LINE 101
> USED AT LINE 215
> USED AT LINE 247
> USED AT LINE 251
> USED AT LINE 270
> USED AT LINE 282
> USED AT LINE 295
> USED AT LINE 297
> USED AT LINE 868
> USED AT LINE 879
> USED AT LINE 895
> USED AT LINE 912
> USED AT LINE 934
> USED AT LINE 1011
> USED AT LINE 1021
INEEE: 07AD DEFINED AT LINE 1085
> USED AT LINE 1076
> USED AT LINE 1086
OUTEEE: 07B7 DEFINED AT LINE 1090
> USED AT LINE 1082
OUT01: 07B9 DEFINED AT LINE 1091
> USED AT LINE 1093
BRKEEE: 07C6 DEFINED AT LINE 1097
> USED AT LINE 1074
> USED AT LINE 1085
BRK03: 07C8 DEFINED AT LINE 1098
> USED AT LINE 1102
BRK05: 07D4 DEFINED AT LINE 1103
> USED AT LINE 1100
INTEEE: 07E3 DEFINED AT LINE 1111
> USED AT LINE 79
> USED AT LINE 83
END: 07E4 DEFINED AT LINE 1118
> USED AT LINE 1055
> USED AT LINE 1058
0000 ;NAM TB01V137
0000 ;* WRITTEN 20-OCT-77 BY JOHN BYRNS
0000 ;* REVISED 30-DEC-77
0000 ;* REVISED 18-JAN-78
0000 ;* REVISED 10-APR-78
0000 ;* REVISED 08-MAY-79 TO ELIMINATE USE OF SP
0000 ;* REVISED 24-JAN-80 TO USE 6801 ON CHIP RAM
0000 ;* REVISED 26-JAN-80 FOR NEW 6801 INSTRUCTIONS
0000 ;* REVISED 24-JUL-81 FOR WHISTON BOARD
0000 ;* REVISED 24-SEP-81 INCLUDE USER FUNCTION
0000 ;* REVISED 08-APR-82 MAKE STANDALONE INCLUDE HEX CONSTANTS AND MEM FUNCTION
0000 ;* REVISED 21-NOV-84 FOR 6809
0000 ;* REVISED FEB 94 ADAPTED TO SIMULATOR AND BUGFIXES BY L.C. BENSCHOP.
0000 ;*
0000 ;.engine kilo
0000 EOL: EQU $04
0000 ETX: EQU $03
0000 SPACE: EQU $20
0000 CR: EQU $0D
0000 LF: EQU $0A
0000 BS: EQU $08
0000 CAN: EQU $18
0000 BELL: EQU $07
0000 FILL: EQU $00
0000 DEL: EQU $7F
0000 BSIZE: EQU 73
0000 STKCUS: EQU 48
0000 ;*
0000 BACIA: EQU $83FE
0000 RMCR: EQU bACIA
0000 TRCS: EQU bACIA
0000 RECEV: EQU bACIA+1
0000 TRANS: EQU bACIA+1
0000 CNTL1: EQU $03
0000 CNTL2: EQU $15
0000 RDRF: EQU $01
0000 ORFE: EQU $20
0000 TDRE: EQU $02
0000 ;* EDIT THE FOLLOWING EQUATES TO REFLECT THE
0000 ;* DESIRED ROM AND RAM LAYOUT
0000 LORAM: EQU $0080
0000 BUFFER: EQU $0200
0000 RAMSIZ: EQU $2000
0000 ROMADR: EQU $f000
0000 ;*
0000 RAMBEG: EQU BUFFER+BSIZE
0000 RAMEND: EQU BUFFER+RAMSIZ
0000 ;*
0000 RAMPAT: EQU $AA0F
0000 ROMPAT: EQU $F055
0000 ;*
0000 ; ORG LORAM
0000 .BSSEG
0000 USRBAS: RMB 2
0002 USRTOP: RMB 2
0004 STKLIM: RMB 2
0006 STKTOP: RMB 2
0008 CURSOR: RMB 2
000A SAVESP: RMB 2
000C LINENB: RMB 2
000E SCRTCH: RMB 2
0010 CHAR: RMB 2
0012 ZONE: RMB 1
0013 MODE: RMB 1
0014 RESRVD: RMB 1
0015 LOEND: EQU $
0015 ;*
0000 .CSEG
0000 ; ORG ROMADR
0000 ALIGN 256
0000 .ENT $
0000 0E 14 BASIC: JMP SETUP
0002 4D 4F 44 39 42 41 53 49 43 00 .CSTR "MOD9BASIC"
000C 10 DE 06 WARMS: LDS STKTOP
000F BD 07 E5 JSR INTEEE
0012 20 13 BRA WMS05
0014 10 CE 21 CC SETUP: LDS #RAMEND-52
0018 10 DF 06 SET03: STS STKTOP
001B BD 07 E5 JSR INTEEE
001E CC 02 49 CLEAR: LDD #RAMBEG
0021 DD 00 STD USRBAS
0023 DD 02 STD USRTOP
0025 DD 04 CLR02: STD STKLIM
0027 BD 01 3E WMS05: JSR CRLF
002A 8E 00 82 LDX #VSTR
002D BD 01 37 JSR PUTSTR
0030 10 DE 06 CMDB: LDS STKTOP
0033 0F 13 CLR MODE
0035 BD 01 3E JSR CRLF
0038 9E 00 LDX USRBAS
003A 9F 08 STX CURSOR
003C 8E 00 00 CMDE: LDX #0000
003F 9F 0C STX LINENB
0041 0D 13 TST MODE
0043 26 05 BNE CMD01
0045 86 3A LDA #":"
0047 BD 07 AA JSR PUTCHR
004A BD 01 90 CMD01: JSR GETLIN
004D BD 02 EA JSR TSTNBR
0050 24 0E BCC CMD02
0052 29 2B BVS CMD05
0054 BD 02 5B JSR SKIPSP
0057 81 04 CMPA #EOL
0059 27 E1 BEQ CMDE
005B BD 02 0D JSR MSLINE
005E 20 D0 BRA CMDB
0060 34 10 CMD02: PSHS X
0062 9E 02 LDX USRTOP
0064 9C 04 CMPX STKLIM
0066 35 10 PULS X
0068 27 03 BEQ CMD03
006A 7E 01 5E JMP ERRORR
006D C3 00 00 CMD03: ADDD #0
0070 27 0D BEQ CMD05
0072 34 06 CMD04: PSHS D
0074 83 27 0F SUBD #9999
0077 35 06 PULS D
0079 22 04 BHI CMD05
007B 8D 10 BSR EDITOR
007D 20 BD BRA CMDE
007F 7E 01 55 CMD05: JMP ERRORS
0082 54 49 4E 59 20 56 31 2E 33 37 VSTR: DB "TINY V1.37"
008C 04 FCB EOL
008D ;******************************
008D ;******************************
008D 34 06 EDITOR: PSHS D
008F BD 02 5B JSR SKIPSP
0092 9F 0E STX SCRTCH
0094 A6 60 LDA 0,S
0096 9E 08 LDX CURSOR
0098 9C 02 CMPX USRTOP
009A 27 05 BEQ ED00
009C 10 A3 00 CMPD 0,X
009F 24 02 BCC ED01
00A1 9E 00 ED00: LDX USRBAS
00A3 BD 03 C4 ED01: JSR FNDLIN
00A6 9F 08 STX CURSOR
00A8 25 22 BCS ED04
00AA 9F 0A STX SAVESP
00AC 30 02 LEAX 2,X
00AE A6 80 ED02: LDA ,X+
00B0 81 04 CMPA #EOL
00B2 26 FA BNE ED02
00B4 9C 02 ED03: CMPX USRTOP
00B6 27 0E BEQ ED35
00B8 A6 80 LDA ,X+
00BA 9F 10 STX CHAR
00BC 9E 0A LDX SAVESP
00BE A7 80 STA ,X+
00C0 9F 0A STX SAVESP
00C2 9E 10 LDX CHAR
00C4 20 EE BRA ED03
00C6 9E 0A ED35: LDX SAVESP
00C8 9F 02 STX USRTOP
00CA 9F 04 STX STKLIM
00CC 9E 0E ED04: LDX SCRTCH
00CE C6 FF LDB #-1
00D0 5C ED05: INCB
00D1 A6 80 LDA ,X+
00D3 81 04 CMPA #EOL
00D5 26 F9 BNE ED05
00D7 5D TSTB
00D8 26 03 BNE ED55
00DA 32 62 LEAS 2,S
00DC 39 RTS
00DD 30 1F ED55: LEAX -1,X
00DF CB 04 ADDB #4
00E1 30 1F ED06: LEAX -1,X
00E3 5A DECB
00E4 A6 00 LDA 0,X
00E6 81 20 CMPA #SPACE
00E8 27 F7 BEQ ED06
00EA 86 04 LDA #EOL
00EC A7 01 STA 1,X
00EE 4F CLRA
00EF 9E 02 LDX USRTOP
00F1 9F 10 STX CHAR
00F3 D3 02 ADDD USRTOP
00F5 DD 02 STD USRTOP
00F7 DD 04 STD STKLIM
00F9 BD 03 62 JSR TSTSTK
00FC 24 07 BCC ED07
00FE 9F 02 STX USRTOP
0100 9F 04 STX STKLIM
0102 7E 01 4D JMP ERRORF
0105 9E 02 ED07: LDX USRTOP
0107 9F 0A ED08: STX SAVESP
0109 9E 10 LDX CHAR
010B 9C 08 CMPX CURSOR
010D 27 0A BEQ ED09
010F A6 82 LDA ,-X
0111 9F 10 STX CHAR
0113 9E 0A LDX SAVESP
0115 A7 82 STA ,-X
0117 20 EE BRA ED08
0119 35 06 ED09: PULS D
011B 9E 08 LDX CURSOR
011D ED 81 STD ,X++
011F 9F 10 STX CHAR
0121 9E 0E ED10: LDX SCRTCH
0123 A6 80 LDA ,X+
0125 9F 0E STX SCRTCH
0127 9E 10 LDX CHAR
0129 A7 80 STA ,X+
012B 9F 10 STX CHAR
012D 81 04 CMPA #EOL
012F 26 F0 BNE ED10
0131 39 RTS
0132 ;******************************
0132 ;******************************
0132 BD 07 AA PUTS01: JSR PUTCHR
0135 30 01 LEAX 1,X
0137 A6 00 PUTSTR: LDA 0,X
0139 81 04 CMPA #EOL
013B 26 F5 BNE PUTS01
013D 39 RTS
013E ;******************************
013E ;******************************
013E 8E 01 46 CRLF: LDX #CRLFST
0141 8D F4 BSR PUTSTR
0143 0F 12 CLR ZONE
0145 39 RTS
0146 0D 0A 7F 00 00 00 04 CRLFST: FCB CR,LF,DEL,FILL,FILL,FILL,EOL
014D ;******************************
014D ;******************************
014D 8D 26 ERRORF: BSR ER01
014F 53 4F 52 52 59 DB "SORRY"
0154 04 FCB EOL
0155 8D 1E ERRORS: BSR ER01
0157 57 48 41 54 20 3F DB "WHAT ?"
015D 04 FCB EOL
015E 8D 15 ERRORR: BSR ER01
0160 48 4F 57 20 3F DB "HOW ?"
0165 04 FCB EOL
0166 8D 0D BREAK: BSR ER01
0168 42 52 45 41 4B DB "BREAK"
016D 04 FCB EOL
016E 8D 05 END: BSR ER01
0170 53 54 4F 50 DB "STOP"
0174 04 FCB EOL
0175 8D C7 ER01: BSR CRLF
0177 86 07 LDA #BELL
0179 BD 07 AA JSR PUTCHR
017C DC 0C LDD LINENB
017E BD 06 5E JSR PRNT4
0181 86 20 LDA #SPACE
0183 BD 07 AA JSR PUTCHR
0186 35 10 PULS X
0188 8D AD BSR PUTSTR
018A 8D B2 BSR CRLF
018C 0E 30 JMP CMDB
018E ;******************************
018E ;******************************
018E 8D AE GL00: BSR CRLF
0190 8E 02 00 GETLIN: LDX #BUFFER
0193 BD 07 A0 GL03: JSR GETCHR
0196 81 20 CMPA #SPACE
0198 25 14 BCS GL05
019A 81 7F CMPA #$7F
019C 27 F5 BEQ GL03
019E 8C 02 48 CMPX #BUFFER+BSIZE-1
01A1 26 04 BNE GL04
01A3 86 07 LDA #BELL
01A5 20 02 BRA GL02
01A7 A7 80 GL04: STA ,X+
01A9 BD 07 AA GL02: JSR PUTCHR
01AC 20 E5 BRA GL03
01AE 81 08 GL05: CMPA #BS
01B0 27 24 BEQ GL07
01B2 81 18 CMPA #CAN
01B4 27 D8 BEQ GL00
01B6 81 0A CMPA #LF
01B8 27 31 BEQ GL09
01BA 81 0D CMPA #CR
01BC 26 D5 BNE GL03
01BE 0D 13 TST MODE
01C0 27 05 BEQ GL06
01C2 BD 07 AA JSR PUTCHR
01C5 20 07 BRA GL08
01C7 34 10 GL06: PSHS X
01C9 BD 01 3E JSR CRLF
01CC 35 10 PULS X
01CE 86 04 GL08: LDA #EOL
01D0 A7 00 STA 0,X
01D2 8E 02 00 LDX #BUFFER
01D5 39 RTS
01D6 8C 02 00 GL07: CMPX #BUFFER
01D9 27 B8 BEQ GL03
01DB 30 1F LEAX -1,X
01DD 86 08 LDA #BS
01DF BD 07 AA JSR PUTCHR
01E2 86 20 LDA #SPACE
01E4 BD 07 AA JSR PUTCHR
01E7 86 08 LDA #BS
01E9 20 BE BRA GL02
01EB 1A 01 GL09: ORCC #$01
01ED 06 13 ROR MODE
01EF 20 B8 BRA GL02
01F1 ;******************************
01F1 ;******************************
01F1 30 01 REM00: LEAX 1,X
01F3 8D 66 REM: BSR SKIPSP
01F5 81 04 CMPA #EOL
01F7 26 F8 BNE REM00
01F9 BD 05 31 ENDSMT: JSR TSTEOL
01FC 96 0C ENDS02: LDA LINENB
01FE 9A 0D ORA LINENB+1
0200 27 14 BEQ REM09
0202 9C 02 REM05: CMPX USRTOP
0204 26 03 BNE NXTLIN
0206 7E 01 5E JMP ERRORR
0209 EC 81 NXTLIN: LDD ,X++
020B DD 0C STD LINENB
020D BD 07 9C MSLINE: JSR TSTBRK
0210 8D 08 BSR IFAN
0212 25 03 BCS IMPLET
0214 34 06 PSHS D
0216 39 REM09: RTS
0217 7E 05 42 IMPLET: JMP LET
021A ;******************************
021A ;******************************
021A 8D 3F IFAN: BSR SKIPSP
021C 9F 08 STX CURSOR
021E 8E 07 37 LDX #VERBT
0221 A6 80 FAN00: LDA ,X+
0223 81 04 CMPA #EOL
0225 26 05 BNE FAN04
0227 9E 08 LDX CURSOR
0229 1A 01 ORCC #$01
022B 39 RTS
022C 9F 10 FAN04: STX CHAR
022E 9E 08 LDX CURSOR
0230 9F 0E STX SCRTCH
0232 9E 0E FAN05: LDX SCRTCH
0234 A1 00 CMPA 0,X
0236 26 15 BNE FAN07
0238 30 01 LEAX 1,X
023A 9F 0E STX SCRTCH
023C 9E 10 LDX CHAR
023E A6 80 LDA ,X+
0240 9F 10 STX CHAR
0242 81 04 CMPA #EOL
0244 26 EC BNE FAN05
0246 EC 00 LDD 0,X
0248 9E 0E LDX SCRTCH
024A 1C FE ANDCC #$FE
024C 39 RTS
024D 9E 10 FAN07: LDX CHAR
024F A6 80 FAN08: LDA ,X+
0251 81 04 CMPA #EOL
0253 26 FA BNE FAN08
0255 30 02 LEAX 2,X
0257 20 C8 BRA FAN00
0259 ;******************************
0259 ;******************************
0259 30 01 NXTNSP: LEAX 1,X
025B A6 00 SKIPSP: LDA 0,X
025D 81 20 CMPA #SPACE
025F 27 F8 BEQ NXTNSP
0261 39 RTS
0262 ;******************************
0262 ;******************************
0262 8D 1A TSTHEX: BSR TSTDIG
0264 24 22 BCC TST05
0266 81 41 CMPA #"A"
0268 25 11 BCS TST03
026A 81 46 CMPA #"F"
026C 22 0D BHI TST03
026E 80 37 SUBA #"A"-10
0270 1C FE ANDCC #$FE
0272 39 RTS
0273 ;******************************
0273 ;******************************
0273 81 41 TSTLTR: CMPA #"A"
0275 25 04 BCS TST03
0277 81 5A CMPA #"Z"
0279 23 0D BLS TST05
027B 1A 01 TST03: ORCC #$01
027D 39 RTS
027E ;******************************
027E ;******************************
027E 81 30 TSTDIG: CMPA #"0"
0280 25 F9 BCS TST03
0282 81 39 CMPA #"9"
0284 22 F5 BHI TST03
0286 80 30 SUBA #"0"
0288 1C FE TST05: ANDCC #$FE
028A 39 RTS
028B ;******************************
028B ;******************************
028B 8D CE TSTVAR: BSR SKIPSP
028D 8D E4 BSR TSTLTR
028F 25 12 BCS TSTV03
0291 1F 89 TFR A,B
0293 A6 01 LDA 1,X
0295 8D DC BSR TSTLTR
0297 24 E2 BCC TST03
0299 30 01 LEAX 1,X
029B C0 41 SUBB #"A"
029D 58 ASLB
029E 4F CLRA
029F D3 06 ADDD STKTOP
02A1 1C FE TSTV02: ANDCC #$FE
02A3 39 TSTV03: RTS
02A4 ;******************************
02A4 ;******************************
02A4 BD 05 10 USER: JSR ARGONE
02A7 34 06 PSHS D
02A9 BD 02 5B JSR SKIPSP
02AC 81 2C CMPA #","
02AE 27 09 BEQ USER03
02B0 81 29 CMPA #")"
02B2 1A 01 ORCC #$01
02B4 27 15 BEQ USER05
02B6 7E 01 55 USER02: JMP ERRORS
02B9 30 01 USER03: LEAX 1,X
02BB BD 04 43 JSR EXPR
02BE 34 02 PSHS A
02C0 BD 02 5B JSR SKIPSP
02C3 81 29 CMPA #")"
02C5 35 02 PULS A
02C7 26 ED BNE USER02
02C9 1C FE ANDCC #$FE
02CB 30 01 USER05: LEAX 1,X
02CD 9F 08 STX CURSOR
02CF AD F1 JSR [,S++]
02D1 9E 08 LDX CURSOR
02D3 1C FE ANDCC #$FE
02D5 39 RTS
02D6 ;******************************
02D6 ;******************************
02D6 BD 02 5B TSTSNB: JSR SKIPSP
02D9 81 2D CMPA #"-"
02DB 26 0D BNE TSTNBR
02DD 30 01 LEAX 1,X
02DF 8D 09 BSR TSTNBR
02E1 25 06 BCS TSN02
02E3 40 NEGA
02E4 50 NEGB
02E5 82 00 SBCA #0
02E7 1C FC ANDCC #$FC
02E9 39 TSN02: RTS
02EA ;******************************
02EA ;******************************
02EA BD 02 5B TSTNBR: JSR SKIPSP
02ED BD 02 7E JSR TSTDIG
02F0 24 2F BCC TSTN02
02F2 81 24 CMPA #"$"
02F4 1A 01 ORCC #$01
02F6 26 60 BNE TSTN09
02F8 30 01 TSTN20: LEAX 1,X
02FA 6F E2 CLR ,-S
02FC 6F E2 CLR ,-S
02FE A6 00 TSTN23: LDA 0,X
0300 BD 02 62 JSR TSTHEX
0303 25 4F BCS TSTN07
0305 30 01 LEAX 1,X
0307 34 10 PSHS X
0309 34 02 PSHS A
030B EC 63 LDD 3,S
030D 85 F0 BITA #$F0
030F 26 4A BNE TSTN11
0311 58 ASLB
0312 49 ROLA
0313 58 ASLB
0314 49 ROLA
0315 58 ASLB
0316 49 ROLA
0317 58 ASLB
0318 49 ROLA
0319 EB E0 ADDB ,S+
031B ED 62 STD 2,S
031D 35 10 PULS X
031F 20 DD BRA TSTN23
0321 30 01 TSTN02: LEAX 1,X
0323 34 02 PSHS A
0325 6F E2 CLR ,-S
0327 A6 00 TSTN03: LDA 0,X
0329 BD 02 7E JSR TSTDIG
032C 25 26 BCS TSTN07
032E 30 01 LEAX 1,X
0330 34 10 PSHS X
0332 34 02 PSHS A
0334 EC 63 LDD 3,S
0336 58 ASLB
0337 49 ROLA
0338 29 21 BVS TSTN11
033A 58 ASLB
033B 49 ROLA
033C 29 1D BVS TSTN11
033E E3 63 ADDD 3,S
0340 29 19 BVS TSTN11
0342 58 ASLB
0343 49 ROLA
0344 29 15 BVS TSTN11
0346 EB 60 ADDB 0,S
0348 89 00 ADCA #0
034A 29 0F BVS TSTN11
034C ED 63 STD 3,S
034E 32 61 LEAS 1,S
0350 35 10 PULS X
0352 20 D3 BRA TSTN03
0354 35 06 TSTN07: PULS D
0356 1C FE ANDCC #$FE
0358 1C FD TSTN09: ANDCC #$FD
035A 39 RTS
035B AE 61 TSTN11: LDX 1,S
035D 32 65 LEAS 5,S
035F 1A 03 ORCC #$03
0361 39 RTS
0362 ;******************************
0362 ;******************************
0362 10 DF 0A TSTSTK: STS SAVESP
0365 DC 0A LDD SAVESP
0367 83 00 30 SUBD #STKCUS
036A 93 04 SUBD STKLIM
036C 39 RTS
036D ;******************************
036D ;******************************
036D BD 04 FD PEEK: JSR PAREXP
0370 34 06 PSHS D
0372 34 10 PSHS X
0374 E6 72 LDB [2,S]
0376 35 10 PULS X
0378 32 62 LEAS 2,S
037A 4F CLRA
037B 39 RTS
037C ;******************************
037C ;******************************
037C BD 04 FD POKE: JSR PAREXP
037F 34 06 PSHS D
0381 BD 02 5B JSR SKIPSP
0384 81 3D CMPA #"="
0386 27 03 BEQ POKE05
0388 7E 01 55 JMP ERRORS
038B 30 01 POKE05: LEAX 1,X
038D BD 04 43 JSR EXPR
0390 BD 05 31 JSR TSTEOL
0393 34 10 PSHS X
0395 E7 72 STB [2,S]
0397 35 10 PULS X
0399 32 62 LEAS 2,S
039B 7E 01 FC JMP ENDS02
039E ;******************************
039E ;******************************
039E BD 02 5B TSTFUN: JSR SKIPSP
03A1 9F 08 STX CURSOR
03A3 8E 03 AE LDX #FUNT
03A6 BD 02 21 JSR FAN00
03A9 25 02 BCS TSTF05
03AB 34 06 PSHS D
03AD 39 TSTF05: RTS
03AE ;******************************
03AE ;******************************
03AE 55 53 52 FUNT: DB "USR"
03B1 04 FCB EOL
03B2 02 A4 FDB USER
03B4 50 45 45 4B DB "PEEK"
03B8 04 FCB EOL
03B9 03 6D FDB PEEK
03BB 4D 45 4D DB "MEM"
03BE 04 FCB EOL
03BF 03 62 FDB TSTSTK
03C1 04 FCB EOL
03C2 ;******************************
03C2 ;******************************
03C2 9E 00 FLINE: LDX USRBAS
03C4 9C 02 FNDLIN: CMPX USRTOP
03C6 26 03 BNE FND03
03C8 1A 03 ORCC #$03
03CA 39 RTS
03CB 10 A3 00 FND03: CMPD 0,X
03CE 26 03 BNE FND05
03D0 1C FC ANDCC #$FC
03D2 39 RTS
03D3 24 05 FND05: BCC FND07
03D5 1A 01 ORCC #$01
03D7 1C FD ANDCC #$FD
03D9 39 RTS
03DA 34 02 FND07: PSHS A
03DC 86 04 LDA #EOL
03DE 30 01 LEAX 1,X
03E0 30 01 FND09: LEAX 1,X
03E2 A1 00 CMPA 0,X
03E4 26 FA BNE FND09
03E6 35 02 PULS A
03E8 30 01 LEAX 1,X
03EA 20 D8 BRA FNDLIN
03EC ;******************************
03EC ;******************************
03EC 8D 55 RELEXP: BSR EXPR
03EE 34 06 PSHS D
03F0 5F CLRB
03F1 BD 02 5B JSR SKIPSP
03F4 81 3D CMPA #"="
03F6 27 23 BEQ REL06
03F8 81 3C CMPA #"<"
03FA 26 10 BNE REL03
03FC 30 01 LEAX 1,X
03FE 5C INCB
03FF BD 02 5B JSR SKIPSP
0402 81 3E CMPA #">"
0404 26 11 BNE REL05
0406 30 01 LEAX 1,X
0408 CB 04 ADDB #4
040A 20 13 BRA REL07
040C 81 3E REL03: CMPA #">"
040E 26 5F BNE EXPR06
0410 30 01 LEAX 1,X
0412 CB 04 ADDB #4
0414 BD 02 5B JSR SKIPSP
0417 81 3D REL05: CMPA #"="
0419 26 04 BNE REL07
041B 30 01 REL06: LEAX 1,X
041D CB 02 ADDB #2
041F 34 04 REL07: PSHS B
0421 8D 20 BSR EXPR
0423 34 10 PSHS X
0425 A3 63 SUBD 3,S
0427 1F A8 TFR CC,A
0429 44 LSRA
042A 1F 89 TFR A,B
042C 48 ASLA
042D 48 ASLA
042E 34 04 PSHS B
0430 AB E0 ADDA ,S+
0432 84 06 ANDA #$06
0434 26 01 BNE REL08
0436 4C INCA
0437 5F REL08: CLRB
0438 A4 62 ANDA 2,S
043A 27 01 BEQ REL09
043C 53 COMB
043D 4F REL09: CLRA
043E 35 10 PULS X
0440 32 63 LEAS 3,S
0442 39 RTS
0443 ;******************************
0443 ;******************************
0443 6F E2 EXPR: CLR ,-S
0445 6F E2 CLR ,-S
0447 BD 02 5B JSR SKIPSP
044A 81 2D CMPA #"-"
044C 27 17 BEQ EXPR05
044E 81 2B CMPA #"+"
0450 26 02 BNE EXPR03
0452 30 01 EXPR02: LEAX 1,X
0454 8D 1C EXPR03: BSR TERM
0456 E3 60 EXPR04: ADDD 0,S
0458 ED 60 STD 0,S
045A BD 02 5B JSR SKIPSP
045D 81 2B CMPA #"+"
045F 27 F1 BEQ EXPR02
0461 81 2D CMPA #"-"
0463 26 0A BNE EXPR06
0465 30 01 EXPR05: LEAX 1,X
0467 8D 09 BSR TERM
0469 40 NEGA
046A 50 NEGB
046B 82 00 SBCA #0
046D 20 E7 BRA EXPR04
046F 35 06 EXPR06: PULS D
0471 39 RTS
0472 ;******************************
0472 ;******************************
0472 BD 04 E5 TERM: JSR FACT
0475 34 06 PSHS D
0477 BD 02 5B TERM03: JSR SKIPSP
047A 81 2A CMPA #"*"
047C 27 48 BEQ TERM07
047E 81 2F CMPA #"/"
0480 27 03 BEQ TERM05
0482 35 06 PULS D
0484 39 RTS
0485 30 01 TERM05: LEAX 1,X
0487 8D 5C BSR FACT
0489 34 10 PSHS X
048B 30 62 LEAX 2,S
048D 34 06 PSHS D
048F A8 00 EORA 0,X
0491 BD 05 24 JSR ABSX
0494 30 60 LEAX 0,S
0496 BD 05 24 JSR ABSX
0499 34 02 PSHS A
049B 86 11 LDA #17
049D 34 02 PSHS A
049F 4F CLRA
04A0 5F CLRB
04A1 A3 62 DIV05: SUBD 2,S
04A3 24 06 BCC DIV07
04A5 E3 62 ADDD 2,S
04A7 1C FE ANDCC #$FE
04A9 20 02 BRA DIV09
04AB 1A 01 DIV07: ORCC #$01
04AD 69 67 DIV09: ROL 7,S
04AF 69 66 ROL 6,S
04B1 59 ROLB
04B2 49 ROLA
04B3 6A 60 DEC 0,S
04B5 26 EA BNE DIV05
04B7 A6 61 LDA 1,S
04B9 32 64 LEAS 4,S
04BB 4D TSTA
04BC 2A 04 BPL TERM06
04BE 30 62 LEAX 2,S
04C0 8D 66 BSR NEGX
04C2 35 10 TERM06: PULS X
04C4 20 B1 BRA TERM03
04C6 30 01 TERM07: LEAX 1,X
04C8 8D 1B BSR FACT
04CA 34 04 MULT: PSHS B
04CC E6 62 LDB 2,S
04CE 3D MUL
04CF A6 61 LDA 1,S
04D1 E7 61 STB 1,S
04D3 E6 60 LDB 0,S
04D5 3D MUL
04D6 A6 62 LDA 2,S
04D8 E7 62 STB 2,S
04DA 35 04 PULS B
04DC 3D MUL
04DD AB 60 ADDA 0,S
04DF AB 61 ADDA 1,S
04E1 ED 60 STD 0,S
04E3 20 92 BRA TERM03
04E5 ;******************************
04E5 ;******************************
04E5 BD 02 8B FACT: JSR TSTVAR
04E8 25 09 BCS FACT03
04EA 34 10 PSHS X
04EC 1F 01 TFR D,X
04EE EC 00 LDD 0,X
04F0 35 10 PULS X
04F2 39 FACT02: RTS
04F3 BD 02 EA FACT03: JSR TSTNBR
04F6 24 FA BCC FACT02
04F8 BD 03 9E JSR TSTFUN
04FB 24 F5 BCC FACT02
04FD 8D 11 PAREXP: BSR ARGONE
04FF 34 02 PSHS A
0501 BD 02 5B JSR SKIPSP
0504 81 29 CMPA #")"
0506 35 02 PULS A
0508 26 03 BNE FACT05
050A 30 01 LEAX 1,X
050C 39 RTS
050D 7E 01 55 FACT05: JMP ERRORS
0510 ;******************************
0510 ;******************************
0510 BD 03 62 ARGONE: JSR TSTSTK
0513 24 03 BCC FACT04
0515 7E 01 4D JMP ERRORF
0518 BD 02 5B FACT04: JSR SKIPSP
051B 81 28 CMPA #"("
051D 26 EE BNE FACT05
051F 30 01 LEAX 1,X
0521 7E 04 43 JMP EXPR
0524 ;******************************
0524 ;******************************
0524 6D 00 ABSX: TST 0,X
0526 2A 08 BPL NEG05
0528 60 00 NEGX: NEG 0,X
052A 60 01 NEG 1,X
052C 24 02 BCC NEG05
052E 6A 00 DEC 0,X
0530 39 NEG05: RTS
0531 ;******************************
0531 ;******************************
0531 34 02 TSTEOL: PSHS A
0533 BD 02 5B JSR SKIPSP
0536 81 04 CMPA #EOL
0538 27 03 BEQ TEOL03
053A 7E 01 55 JMP ERRORS
053D 30 01 TEOL03: LEAX 1,X
053F 35 02 PULS A
0541 39 RTS
0542 ;******************************
0542 ;******************************
0542 BD 02 8B LET: JSR TSTVAR
0545 24 03 BCC LET03
0547 7E 01 55 JMP ERRORS
054A 34 06 LET03: PSHS D
054C BD 02 5B JSR SKIPSP
054F 81 3D CMPA #"="
0551 27 03 BEQ LET05
0553 7E 01 55 JMP ERRORS
0556 30 01 LET05: LEAX 1,X
0558 BD 04 43 JSR EXPR
055B 8D D4 BSR TSTEOL
055D 9F 08 STX CURSOR
055F 35 10 PULS X
0561 ED 00 STD 0,X
0563 9E 08 LDX CURSOR
0565 7E 01 FC JMP ENDS02
0568 ;******************************
0568 ;******************************
0568 BD 03 EC IF: JSR RELEXP
056B 5D TSTB
056C 27 03 BEQ IF03
056E 7E 02 0D JMP MSLINE
0571 7E 01 F3 IF03: JMP REM
0574 ;******************************
0574 ;******************************
0574 BD 04 43 GOTO: JSR EXPR
0577 8D B8 BSR TSTEOL
0579 BD 03 C2 JSR FLINE
057C 25 0F BCS GOSB04
057E 7E 02 09 JMP NXTLIN
0581 ;******************************
0581 ;******************************
0581 BD 04 43 GOSUB: JSR EXPR
0584 8D AB BSR TSTEOL
0586 9F 08 STX CURSOR
0588 BD 03 C2 JSR FLINE
058B 24 03 BCC GOSB03
058D 7E 01 5E GOSB04: JMP ERRORR
0590 BD 03 62 GOSB03: JSR TSTSTK
0593 24 03 BCC GOSB05
0595 7E 01 4D JMP ERRORF
0598 DC 08 GOSB05: LDD CURSOR
059A 34 06 PSHS D
059C DC 0C LDD LINENB
059E 34 06 PSHS D
05A0 BD 02 09 JSR NXTLIN
05A3 35 06 PULS D
05A5 DD 0C STD LINENB
05A7 35 10 PULS X
05A9 7E 01 FC JMP ENDS02
05AC ;******************************
05AC ;******************************
05AC RETURN: EQU TSTEOL
05AC ;******************************
05AC ;******************************
05AC BD 02 5B PRINT: JSR SKIPSP
05AF 81 2C PR01: CMPA #","
05B1 27 36 BEQ PR05
05B3 81 3B CMPA #";"
05B5 27 3D BEQ PR07
05B7 81 04 CMPA #EOL
05B9 27 25 BEQ PR04
05BB 81 22 CMPA #$22
05BD 26 06 BNE PR02
05BF 30 01 LEAX 1,X
05C1 8D 42 BSR PRNTQS
05C3 20 09 BRA PR03
05C5 BD 04 43 PR02: JSR EXPR
05C8 34 10 PSHS X
05CA 8D 47 BSR PRNTN
05CC 35 10 PULS X
05CE BD 02 5B PR03: JSR SKIPSP
05D1 81 2C CMPA #","
05D3 27 14 BEQ PR05
05D5 81 3B CMPA #";"
05D7 27 1B BEQ PR07
05D9 81 04 CMPA #EOL
05DB 27 03 BEQ PR04
05DD 7E 01 55 JMP ERRORS
05E0 34 10 PR04: PSHS X
05E2 BD 01 3E JSR CRLF
05E5 35 10 PULS X
05E7 20 14 BRA PR08
05E9 C6 07 PR05: LDB #$7
05EB 86 20 PR06: LDA #SPACE
05ED BD 07 AA JSR PUTCHR
05F0 D5 12 BITB ZONE
05F2 26 F7 BNE PR06
05F4 30 01 PR07: LEAX 1,X
05F6 BD 02 5B JSR SKIPSP
05F9 81 04 CMPA #EOL
05FB 26 B2 BNE PR01
05FD 30 01 PR08: LEAX 1,X
05FF 7E 01 FC JMP ENDS02
0602 ;*
0602 ;*
0602 BD 07 AA PRQ01: JSR PUTCHR
0605 A6 80 PRNTQS: LDA ,X+
0607 81 04 CMPA #EOL
0609 26 03 BNE PRQ03
060B 7E 01 55 JMP ERRORS
060E 81 22 PRQ03: CMPA #$22
0610 26 F0 BNE PRQ01
0612 39 RTS
0613 ;*
0613 4D PRNTN: TSTA
0614 2A 0D BPL PRN03
0616 40 NEGA
0617 50 NEGB
0618 82 00 SBCA #0
061A 34 02 PSHS A
061C 86 2D LDA #"-"
061E BD 07 AA JSR PUTCHR
0621 35 02 PULS A
0623 8E 06 52 PRN03: LDX #PRNPT-2
0626 30 02 PRN05: LEAX 2,X
0628 10 A3 00 CMPD 0,X
062B 24 05 BCC PRN07
062D 8C 06 5C CMPX #PRNPTO
0630 26 F4 BNE PRN05
0632 0F 10 PRN07: CLR CHAR
0634 10 A3 00 PRN09: CMPD 0,X
0637 25 06 BCS PRN11
0639 A3 00 SUBD 0,X
063B 0C 10 INC CHAR
063D 20 F5 BRA PRN09
063F 34 02 PRN11: PSHS A
0641 86 30 LDA #"0"
0643 9B 10 ADDA CHAR
0645 BD 07 AA JSR PUTCHR
0648 35 02 PULS A
064A 8C 06 5C CMPX #PRNPTO
064D 27 04 BEQ PRN13
064F 30 02 LEAX 2,X
0651 20 DF BRA PRN07
0653 39 PRN13: RTS
0654 27 10 PRNPT: FDB 10000
0656 03 E8 FDB 1000
0658 00 64 FDB 100
065A 00 0A FDB 10
065C 00 01 PRNPTO: FDB 1
065E ;*
065E 8E 06 56 PRNT4: LDX #PRNPT+2
0661 20 CF BRA PRN07
0663 ;******************************
0663 ;******************************
0663 BD 02 8B INPUT: JSR TSTVAR
0666 25 3C BCS IN11
0668 34 06 PSHS D
066A 9F 08 STX CURSOR
066C 86 3F IN03: LDA #"?"
066E BD 07 AA JSR PUTCHR
0671 BD 01 90 JSR GETLIN
0674 BD 02 5B IN05: JSR SKIPSP
0677 81 04 CMPA #EOL
0679 27 F1 BEQ IN03
067B BD 02 D6 JSR TSTSNB
067E 24 0B BCC IN07
0680 8E 06 B8 LDX #RMESS
0683 BD 01 37 JSR PUTSTR
0686 BD 01 3E JSR CRLF
0689 20 E1 BRA IN03
068B 9F 0E IN07: STX SCRTCH
068D 35 10 PULS X
068F ED 00 STD 0,X
0691 9E 08 LDX CURSOR
0693 BD 02 5B JSR SKIPSP
0696 81 2C CMPA #","
0698 27 03 BEQ IN09
069A 7E 01 F9 JMP ENDSMT
069D 30 01 IN09: LEAX 1,X
069F BD 02 8B JSR TSTVAR
06A2 24 03 BCC IN13
06A4 7E 01 55 IN11: JMP ERRORS
06A7 34 06 IN13: PSHS D
06A9 34 10 PSHS X
06AB 9E 0E LDX SCRTCH
06AD BD 02 5B JSR SKIPSP
06B0 81 2C CMPA #","
06B2 26 C0 BNE IN05
06B4 30 01 LEAX 1,X
06B6 20 BC BRA IN05
06B8 52 45 2D 45 4E 54 45 52 RMESS: DB "RE-ENTER"
06C0 04 FCB EOL
06C1 ;******************************
06C1 ;******************************
06C1 9E 06 RUN: LDX STKTOP
06C3 86 34 LDA #52
06C5 6F 80 RUN01: CLR ,X+
06C7 4A DECA
06C8 26 FB BNE RUN01
06CA 9E 00 LDX USRBAS
06CC 7E 02 02 JMP REM05
06CF ;******************************
06CF ;******************************
06CF BD 02 EA LIST: JSR TSTNBR
06D2 24 08 BCC LIST03
06D4 4F CLRA
06D5 5F CLRB
06D6 DD 08 STD CURSOR
06D8 86 7F LDA #$7F
06DA 20 17 BRA LIST07
06DC DD 08 LIST03: STD CURSOR
06DE BD 02 5B JSR SKIPSP
06E1 81 2C CMPA #","
06E3 27 04 BEQ LIST05
06E5 96 08 LDA CURSOR
06E7 20 0A BRA LIST07
06E9 30 01 LIST05: LEAX 1,X
06EB BD 02 EA JSR TSTNBR
06EE 24 03 BCC LIST07
06F0 7E 01 55 JMP ERRORS
06F3 BD 05 31 LIST07: JSR TSTEOL
06F6 34 06 PSHS D
06F8 DC 08 LDD CURSOR
06FA 9F 08 STX CURSOR
06FC BD 03 C2 JSR FLINE
06FF 9C 02 LIST09: CMPX USRTOP
0701 27 28 BEQ LIST10
0703 35 06 PULS D
0705 10 A3 00 CMPD 0,X
0708 25 28 BCS LIST11
070A 34 06 PSHS D
070C EC 81 LDD ,X++
070E 34 10 PSHS X
0710 BD 06 5E JSR PRNT4
0713 35 10 PULS X
0715 86 20 LDA #SPACE
0717 BD 07 AA JSR PUTCHR
071A BD 01 37 JSR PUTSTR
071D 30 01 LEAX 1,X
071F 34 10 PSHS X
0721 BD 01 3E JSR CRLF
0724 35 10 PULS X
0726 BD 07 9C JSR TSTBRK
0729 20 D4 BRA LIST09
072B 32 62 LIST10: LEAS 2,S
072D 86 03 LDA #ETX
072F BD 07 AA JSR PUTCHR
0732 9E 08 LIST11: LDX CURSOR
0734 7E 01 FC JMP ENDS02
0737 ;******************************
0737 ;******************************
0737 4C 45 54 VERBT: DB "LET"
073A 04 FCB EOL
073B 05 42 FDB LET
073D 49 46 DB "IF"
073F 04 FCB EOL
0740 05 68 FDB IF
0742 47 4F 54 4F DB "GOTO"
0746 04 FCB EOL
0747 05 74 FDB GOTO
0749 47 4F 53 55 42 DB "GOSUB"
074E 04 FCB EOL
074F 05 81 FDB GOSUB
0751 52 45 54 55 52 4E DB "RETURN"
0757 04 FCB EOL
0758 05 31 FDB RETURN
075A 50 4F 4B 45 DB "POKE"
075E 04 FCB EOL
075F 03 7C FDB POKE
0761 50 52 49 4E 54 DB "PRINT"
0766 04 FCB EOL
0767 05 AC FDB PRINT
0769 49 4E 50 55 54 DB "INPUT"
076E 04 FCB EOL
076F 06 63 FDB INPUT
0771 52 45 4D DB "REM"
0774 04 FCB EOL
0775 01 F3 FDB REM
0777 53 54 4F 50 DB "STOP"
077B 04 FCB EOL
077C 01 6E FDB END
077E 45 4E 44 DB "END"
0781 04 FCB EOL
0782 01 6E FDB END
0784 52 55 4E DB "RUN"
0787 04 FCB EOL
0788 06 C1 FDB RUN
078A 4C 49 53 54 DB "LIST"
078E 04 FCB EOL
078F 06 CF FDB LIST
0791 4E 45 57 DB "NEW"
0794 04 FCB EOL
0795 00 1E FDB CLEAR
0797 3F DB "?"
0798 04 FCB EOL
0799 05 AC FDB PRINT
079B 04 FCB EOL
079C ;******************************
079C ;******************************
079C 8D 2A TSTBRK: BSR BRKEEE
079E 27 09 BEQ GETC05
07A0 8D 0D GETCHR: BSR INEEE
07A2 81 03 CMPA #ETX
07A4 26 03 BNE GETC05
07A6 7E 01 66 JMP BREAK
07A9 39 GETC05: RTS
07AA 0C 12 PUTCHR: INC ZONE
07AC 7E 07 B9 JMP OUTEEE
07AF ;******************************
07AF ;******************************
07AF 8D 17 INEEE: BSR BRKEEE
07B1 27 FC BEQ INEEE
07B3 B6 83 FF LDA RECEV
07B6 84 7F ANDA #$7F
07B8 39 RTS
07B9 34 02 OUTEEE: PSHS A
07BB B6 83 FE OUT01: LDA TRCS
07BE 85 02 BITA #TDRE
07C0 27 F9 BEQ OUT01
07C2 35 02 PULS A
07C4 B7 83 FF STA TRANS
07C7 39 RTS
07C8 34 02 BRKEEE: PSHS A
07CA B6 83 FE BRK03: LDA TRCS
07CD 85 20 BITA #ORFE
07CF 27 05 BEQ BRK05
07D1 B6 83 FF LDA RECEV
07D4 20 F4 BRA BRK03
07D6 85 01 BRK05: BITA #RDRF
07D8 35 02 PULS A
07DA 39 RTS
07DB ;*
07DB 86 03 LDA #CNTL1
07DD B7 83 FE STA RMCR
07E0 86 15 LDA #CNTL2
07E2 B7 83 FE STA TRCS
07E5 INTEEE: EQU $
07E5 39 RTS
07E6 ;******************************
07E6 ;******************************
EOL: 0004 DEFINED AT LINE 18
> USED AT LINE 127
> USED AT LINE 232
> USED AT LINE 235
> USED AT LINE 238
> USED AT LINE 241
> USED AT LINE 244
> USED AT LINE 560
> USED AT LINE 563
> USED AT LINE 566
> USED AT LINE 568
> USED AT LINE 966
> USED AT LINE 1027
> USED AT LINE 1030
> USED AT LINE 1033
> USED AT LINE 1036
> USED AT LINE 1039
> USED AT LINE 1042
> USED AT LINE 1045
> USED AT LINE 1048
> USED AT LINE 1051
> USED AT LINE 1054
> USED AT LINE 1057
> USED AT LINE 1060
> USED AT LINE 1063
> USED AT LINE 1066
> USED AT LINE 1069
> USED AT LINE 1071
ETX: 0003 DEFINED AT LINE 19
SPACE: 0020 DEFINED AT LINE 20
CR: 000D DEFINED AT LINE 21
> USED AT LINE 227
LF: 000A DEFINED AT LINE 22
> USED AT LINE 227
BS: 0008 DEFINED AT LINE 23
CAN: 0018 DEFINED AT LINE 24
BELL: 0007 DEFINED AT LINE 25
FILL: 0000 DEFINED AT LINE 26
DEL: 007F DEFINED AT LINE 27
BSIZE: 0049 DEFINED AT LINE 28
> USED AT LINE 48
STKCUS: 0030 DEFINED AT LINE 29
BACIA: 83FE DEFINED AT LINE 31
> USED AT LINE 32
> USED AT LINE 33
> USED AT LINE 34
> USED AT LINE 35
RMCR: 83FE DEFINED AT LINE 32
> USED AT LINE 1108
TRCS: 83FE DEFINED AT LINE 33
> USED AT LINE 1091
> USED AT LINE 1098
> USED AT LINE 1110
RECEV: 83FF DEFINED AT LINE 34
> USED AT LINE 1087
> USED AT LINE 1101
TRANS: 83FF DEFINED AT LINE 35
> USED AT LINE 1095
CNTL1: 0003 DEFINED AT LINE 36
CNTL2: 0015 DEFINED AT LINE 37
RDRF: 0001 DEFINED AT LINE 38
ORFE: 0020 DEFINED AT LINE 39
TDRE: 0002 DEFINED AT LINE 40
LORAM: 0080 DEFINED AT LINE 43
BUFFER: 0200 DEFINED AT LINE 44
> USED AT LINE 48
> USED AT LINE 49
RAMSIZ: 2000 DEFINED AT LINE 45
> USED AT LINE 49
ROMADR: F000 DEFINED AT LINE 46
RAMBEG: 0249 DEFINED AT LINE 48
RAMEND: 2200 DEFINED AT LINE 49
RAMPAT: AA0F DEFINED AT LINE 51
ROMPAT: F055 DEFINED AT LINE 52
USRBAS: 0000 DEFINED AT LINE 56
> USED AT LINE 85
> USED AT LINE 94
> USED AT LINE 139
> USED AT LINE 571
> USED AT LINE 974
USRTOP: 0002 DEFINED AT LINE 57
> USED AT LINE 86
> USED AT LINE 112
> USED AT LINE 135
> USED AT LINE 148
> USED AT LINE 158
> USED AT LINE 180
> USED AT LINE 182
> USED AT LINE 183
> USED AT LINE 187
> USED AT LINE 190
> USED AT LINE 313
> USED AT LINE 572
> USED AT LINE 1000
STKLIM: 0004 DEFINED AT LINE 58
> USED AT LINE 87
> USED AT LINE 113
> USED AT LINE 159
> USED AT LINE 184
> USED AT LINE 188
> USED AT LINE 520
STKTOP: 0006 DEFINED AT LINE 59
> USED AT LINE 78
> USED AT LINE 82
> USED AT LINE 91
> USED AT LINE 406
> USED AT LINE 969
CURSOR: 0008 DEFINED AT LINE 60
> USED AT LINE 95
> USED AT LINE 134
> USED AT LINE 141
> USED AT LINE 193
> USED AT LINE 201
> USED AT LINE 327
> USED AT LINE 332
> USED AT LINE 336
> USED AT LINE 429
> USED AT LINE 431
> USED AT LINE 551
> USED AT LINE 794
> USED AT LINE 797
> USED AT LINE 817
> USED AT LINE 824
> USED AT LINE 932
> USED AT LINE 948
> USED AT LINE 982
> USED AT LINE 985
> USED AT LINE 989
> USED AT LINE 997
> USED AT LINE 998
> USED AT LINE 1022
SAVESP: 000A DEFINED AT LINE 61
> USED AT LINE 143
> USED AT LINE 152
> USED AT LINE 154
> USED AT LINE 157
> USED AT LINE 191
> USED AT LINE 197
> USED AT LINE 517
> USED AT LINE 518
LINENB: 000C DEFINED AT LINE 62
> USED AT LINE 97
> USED AT LINE 248
> USED AT LINE 310
> USED AT LINE 311
> USED AT LINE 317
> USED AT LINE 826
> USED AT LINE 830
SCRTCH: 000E DEFINED AT LINE 63
> USED AT LINE 132
> USED AT LINE 160
> USED AT LINE 204
> USED AT LINE 206
> USED AT LINE 337
> USED AT LINE 338
> USED AT LINE 342
> USED AT LINE 349
> USED AT LINE 945
> USED AT LINE 959
CHAR: 0010 DEFINED AT LINE 64
> USED AT LINE 151
> USED AT LINE 155
> USED AT LINE 181
> USED AT LINE 192
> USED AT LINE 196
> USED AT LINE 203
> USED AT LINE 207
> USED AT LINE 209
> USED AT LINE 335
> USED AT LINE 343
> USED AT LINE 345
> USED AT LINE 352
> USED AT LINE 903
> USED AT LINE 907
> USED AT LINE 911
ZONE: 0012 DEFINED AT LINE 65
> USED AT LINE 225
> USED AT LINE 869
> USED AT LINE 1081
MODE: 0013 DEFINED AT LINE 66
> USED AT LINE 92
> USED AT LINE 98
> USED AT LINE 280
> USED AT LINE 301
RESRVD: 0014 DEFINED AT LINE 67
LOEND: 0015 DEFINED AT LINE 68
BASIC: 0000 DEFINED AT LINE 76
WARMS: 000C DEFINED AT LINE 78
SETUP: 0014 DEFINED AT LINE 81
> USED AT LINE 76
SET03: 0018 DEFINED AT LINE 82
CLEAR: 001E DEFINED AT LINE 84
> USED AT LINE 1067
CLR02: 0025 DEFINED AT LINE 87
WMS05: 0027 DEFINED AT LINE 88
> USED AT LINE 80
CMDB: 0030 DEFINED AT LINE 91
> USED AT LINE 110
> USED AT LINE 255
CMDE: 003C DEFINED AT LINE 96
> USED AT LINE 108
> USED AT LINE 124
CMD01: 004A DEFINED AT LINE 102
> USED AT LINE 99
CMD02: 0060 DEFINED AT LINE 111
> USED AT LINE 104
CMD03: 006D DEFINED AT LINE 117
> USED AT LINE 115
CMD04: 0072 DEFINED AT LINE 119
CMD05: 007F DEFINED AT LINE 125
> USED AT LINE 105
> USED AT LINE 118
> USED AT LINE 122
VSTR: 0082 DEFINED AT LINE 126
EDITOR: 008D DEFINED AT LINE 130
> USED AT LINE 123
ED00: 00A1 DEFINED AT LINE 139
> USED AT LINE 136
ED01: 00A3 DEFINED AT LINE 140
> USED AT LINE 138
ED02: 00AE DEFINED AT LINE 145
> USED AT LINE 147
ED03: 00B4 DEFINED AT LINE 148
> USED AT LINE 156
ED35: 00C6 DEFINED AT LINE 157
> USED AT LINE 149
ED04: 00CC DEFINED AT LINE 160
> USED AT LINE 142
ED05: 00D0 DEFINED AT LINE 162
> USED AT LINE 165
ED55: 00DD DEFINED AT LINE 170
> USED AT LINE 167
ED06: 00E1 DEFINED AT LINE 172
> USED AT LINE 176
ED07: 0105 DEFINED AT LINE 190
> USED AT LINE 186
ED08: 0107 DEFINED AT LINE 191
> USED AT LINE 199
ED09: 0119 DEFINED AT LINE 200
> USED AT LINE 194
ED10: 0121 DEFINED AT LINE 204
> USED AT LINE 211
PUTS01: 0132 DEFINED AT LINE 215
> USED AT LINE 219
PUTSTR: 0137 DEFINED AT LINE 217
> USED AT LINE 90
> USED AT LINE 224
> USED AT LINE 253
> USED AT LINE 942
> USED AT LINE 1012
CRLF: 013E DEFINED AT LINE 223
> USED AT LINE 88
> USED AT LINE 93
> USED AT LINE 245
> USED AT LINE 254
> USED AT LINE 258
> USED AT LINE 285
> USED AT LINE 863
> USED AT LINE 943
> USED AT LINE 1015
CRLFST: 0146 DEFINED AT LINE 227
ERRORF: 014D DEFINED AT LINE 230
> USED AT LINE 189
> USED AT LINE 756
> USED AT LINE 823
ERRORS: 0155 DEFINED AT LINE 233
> USED AT LINE 125
> USED AT LINE 419
> USED AT LINE 539
> USED AT LINE 751
> USED AT LINE 777
> USED AT LINE 785
> USED AT LINE 790
> USED AT LINE 861
> USED AT LINE 883
> USED AT LINE 956
> USED AT LINE 994
ERRORR: 015E DEFINED AT LINE 236
> USED AT LINE 116
> USED AT LINE 315
> USED AT LINE 820
BREAK: 0166 DEFINED AT LINE 239
> USED AT LINE 1079
END: 016E DEFINED AT LINE 242
> USED AT LINE 1055
> USED AT LINE 1058
ER01: 0175 DEFINED AT LINE 245
> USED AT LINE 230
> USED AT LINE 233
> USED AT LINE 236
> USED AT LINE 239
> USED AT LINE 242
GL00: 018E DEFINED AT LINE 258
> USED AT LINE 275
GETLIN: 0190 DEFINED AT LINE 259
> USED AT LINE 102
> USED AT LINE 935
GL03: 0193 DEFINED AT LINE 260
> USED AT LINE 264
> USED AT LINE 271
> USED AT LINE 279
> USED AT LINE 292
GL04: 01A7 DEFINED AT LINE 269
> USED AT LINE 266
GL02: 01A9 DEFINED AT LINE 270
> USED AT LINE 268
> USED AT LINE 299
> USED AT LINE 302
GL05: 01AE DEFINED AT LINE 272
> USED AT LINE 262
GL06: 01C7 DEFINED AT LINE 284
> USED AT LINE 281
GL08: 01CE DEFINED AT LINE 287
> USED AT LINE 283
GL07: 01D6 DEFINED AT LINE 291
> USED AT LINE 273
GL09: 01EB DEFINED AT LINE 300
> USED AT LINE 277
REM00: 01F1 DEFINED AT LINE 305
> USED AT LINE 308
REM: 01F3 DEFINED AT LINE 306
> USED AT LINE 805
> USED AT LINE 1052
ENDSMT: 01F9 DEFINED AT LINE 309
> USED AT LINE 952
ENDS02: 01FC DEFINED AT LINE 310
> USED AT LINE 547
> USED AT LINE 798
> USED AT LINE 832
> USED AT LINE 876
> USED AT LINE 1023
REM05: 0202 DEFINED AT LINE 313
> USED AT LINE 975
NXTLIN: 0209 DEFINED AT LINE 316
> USED AT LINE 314
> USED AT LINE 812
> USED AT LINE 828
MSLINE: 020D DEFINED AT LINE 318
> USED AT LINE 109
> USED AT LINE 804
REM09: 0216 DEFINED AT LINE 322
> USED AT LINE 312
IMPLET: 0217 DEFINED AT LINE 323
> USED AT LINE 320
IFAN: 021A DEFINED AT LINE 326
> USED AT LINE 319
FAN00: 0221 DEFINED AT LINE 329
> USED AT LINE 357
> USED AT LINE 553
FAN04: 022C DEFINED AT LINE 335
> USED AT LINE 331
FAN05: 0232 DEFINED AT LINE 338
> USED AT LINE 347
FAN07: 024D DEFINED AT LINE 352
> USED AT LINE 340
FAN08: 024F DEFINED AT LINE 353
> USED AT LINE 355
NXTNSP: 0259 DEFINED AT LINE 360
> USED AT LINE 363
SKIPSP: 025B DEFINED AT LINE 361
> USED AT LINE 106
> USED AT LINE 131
> USED AT LINE 306
> USED AT LINE 326
> USED AT LINE 395
> USED AT LINE 413
> USED AT LINE 423
> USED AT LINE 436
> USED AT LINE 449
> USED AT LINE 536
> USED AT LINE 550
> USED AT LINE 598
> USED AT LINE 605
> USED AT LINE 615
> USED AT LINE 646
> USED AT LINE 655
> USED AT LINE 672
> USED AT LINE 745
> USED AT LINE 757
> USED AT LINE 774
> USED AT LINE 787
> USED AT LINE 838
> USED AT LINE 854
> USED AT LINE 872
> USED AT LINE 936
> USED AT LINE 949
> USED AT LINE 960
> USED AT LINE 986
TSTHEX: 0262 DEFINED AT LINE 367
> USED AT LINE 459
TSTLTR: 0273 DEFINED AT LINE 378
> USED AT LINE 396
> USED AT LINE 400
TST03: 027B DEFINED AT LINE 382
> USED AT LINE 370
> USED AT LINE 372
> USED AT LINE 379
> USED AT LINE 387
> USED AT LINE 389
> USED AT LINE 401
TSTDIG: 027E DEFINED AT LINE 386
> USED AT LINE 367
> USED AT LINE 450
> USED AT LINE 483
TST05: 0288 DEFINED AT LINE 391
> USED AT LINE 368
> USED AT LINE 381
TSTVAR: 028B DEFINED AT LINE 395
> USED AT LINE 732
> USED AT LINE 783
> USED AT LINE 929
> USED AT LINE 954
TSTV02: 02A1 DEFINED AT LINE 407
TSTV03: 02A3 DEFINED AT LINE 408
> USED AT LINE 397
USER: 02A4 DEFINED AT LINE 411
> USED AT LINE 561
USER02: 02B6 DEFINED AT LINE 419
> USED AT LINE 426
USER03: 02B9 DEFINED AT LINE 420
> USED AT LINE 415
USER05: 02CB DEFINED AT LINE 428
> USED AT LINE 418
TSTSNB: 02D6 DEFINED AT LINE 436
> USED AT LINE 939
TSN02: 02E9 DEFINED AT LINE 446
> USED AT LINE 441
TSTNBR: 02EA DEFINED AT LINE 449
> USED AT LINE 103
> USED AT LINE 438
> USED AT LINE 440
> USED AT LINE 739
> USED AT LINE 978
> USED AT LINE 992
TSTN20: 02F8 DEFINED AT LINE 455
TSTN23: 02FE DEFINED AT LINE 458
> USED AT LINE 478
TSTN02: 0321 DEFINED AT LINE 479
> USED AT LINE 451
TSTN03: 0327 DEFINED AT LINE 482
> USED AT LINE 506
TSTN07: 0354 DEFINED AT LINE 507
> USED AT LINE 460
> USED AT LINE 484
TSTN09: 0358 DEFINED AT LINE 509
> USED AT LINE 454
TSTN11: 035B DEFINED AT LINE 511
> USED AT LINE 466
> USED AT LINE 491
> USED AT LINE 494
> USED AT LINE 496
> USED AT LINE 499
> USED AT LINE 502
TSTSTK: 0362 DEFINED AT LINE 517
> USED AT LINE 185
> USED AT LINE 567
> USED AT LINE 754
> USED AT LINE 821
PEEK: 036D DEFINED AT LINE 524
> USED AT LINE 564
POKE: 037C DEFINED AT LINE 534
> USED AT LINE 1043
POKE05: 038B DEFINED AT LINE 540
> USED AT LINE 538
TSTFUN: 039E DEFINED AT LINE 550
> USED AT LINE 741
TSTF05: 03AD DEFINED AT LINE 556
> USED AT LINE 554
FUNT: 03AE DEFINED AT LINE 559
FLINE: 03C2 DEFINED AT LINE 571
> USED AT LINE 810
> USED AT LINE 818
> USED AT LINE 999
FNDLIN: 03C4 DEFINED AT LINE 572
> USED AT LINE 140
> USED AT LINE 592
FND03: 03CB DEFINED AT LINE 576
> USED AT LINE 573
FND05: 03D3 DEFINED AT LINE 580
> USED AT LINE 577
FND07: 03DA DEFINED AT LINE 584
> USED AT LINE 580
FND09: 03E0 DEFINED AT LINE 587
> USED AT LINE 589
RELEXP: 03EC DEFINED AT LINE 595
> USED AT LINE 801
REL03: 040C DEFINED AT LINE 611
> USED AT LINE 602
REL05: 0417 DEFINED AT LINE 616
> USED AT LINE 607
REL06: 041B DEFINED AT LINE 618
> USED AT LINE 600
REL07: 041F DEFINED AT LINE 620
> USED AT LINE 610
> USED AT LINE 617
REL08: 0437 DEFINED AT LINE 634
> USED AT LINE 632
REL09: 043D DEFINED AT LINE 638
> USED AT LINE 636
EXPR: 0443 DEFINED AT LINE 644
> USED AT LINE 421
> USED AT LINE 541
> USED AT LINE 595
> USED AT LINE 621
> USED AT LINE 761
> USED AT LINE 792
> USED AT LINE 808
> USED AT LINE 815
> USED AT LINE 850
EXPR02: 0452 DEFINED AT LINE 651
> USED AT LINE 657
EXPR03: 0454 DEFINED AT LINE 652
> USED AT LINE 650
EXPR04: 0456 DEFINED AT LINE 653
> USED AT LINE 665
EXPR05: 0465 DEFINED AT LINE 660
> USED AT LINE 648
EXPR06: 046F DEFINED AT LINE 666
> USED AT LINE 612
> USED AT LINE 659
TERM: 0472 DEFINED AT LINE 670
> USED AT LINE 652
> USED AT LINE 661
TERM03: 0477 DEFINED AT LINE 672
> USED AT LINE 712
> USED AT LINE 729
TERM05: 0485 DEFINED AT LINE 679
> USED AT LINE 676
DIV05: 04A1 DEFINED AT LINE 693
> USED AT LINE 704
DIV07: 04AB DEFINED AT LINE 698
> USED AT LINE 694
DIV09: 04AD DEFINED AT LINE 699
> USED AT LINE 697
TERM06: 04C2 DEFINED AT LINE 711
> USED AT LINE 708
TERM07: 04C6 DEFINED AT LINE 713
> USED AT LINE 674
MULT: 04CA DEFINED AT LINE 715
FACT: 04E5 DEFINED AT LINE 732
> USED AT LINE 670
> USED AT LINE 680
> USED AT LINE 714
FACT02: 04F2 DEFINED AT LINE 738
> USED AT LINE 740
> USED AT LINE 742
FACT03: 04F3 DEFINED AT LINE 739
> USED AT LINE 733
PAREXP: 04FD DEFINED AT LINE 743
> USED AT LINE 524
> USED AT LINE 534
FACT05: 050D DEFINED AT LINE 751
> USED AT LINE 748
> USED AT LINE 759
ARGONE: 0510 DEFINED AT LINE 754
> USED AT LINE 411
> USED AT LINE 743
FACT04: 0518 DEFINED AT LINE 757
> USED AT LINE 755
ABSX: 0524 DEFINED AT LINE 764
> USED AT LINE 685
> USED AT LINE 687
NEGX: 0528 DEFINED AT LINE 766
> USED AT LINE 710
NEG05: 0530 DEFINED AT LINE 770
> USED AT LINE 765
> USED AT LINE 768
TSTEOL: 0531 DEFINED AT LINE 773
> USED AT LINE 309
> USED AT LINE 542
> USED AT LINE 793
> USED AT LINE 809
> USED AT LINE 816
> USED AT LINE 835
> USED AT LINE 995
TEOL03: 053D DEFINED AT LINE 778
> USED AT LINE 776
LET: 0542 DEFINED AT LINE 783
> USED AT LINE 323
> USED AT LINE 1028
LET03: 054A DEFINED AT LINE 786
> USED AT LINE 784
LET05: 0556 DEFINED AT LINE 791
> USED AT LINE 789
IF: 0568 DEFINED AT LINE 801
> USED AT LINE 1031
IF03: 0571 DEFINED AT LINE 805
> USED AT LINE 803
GOTO: 0574 DEFINED AT LINE 808
> USED AT LINE 1034
GOSUB: 0581 DEFINED AT LINE 815
> USED AT LINE 1037
GOSB04: 058D DEFINED AT LINE 820
> USED AT LINE 811
GOSB03: 0590 DEFINED AT LINE 821
> USED AT LINE 819
GOSB05: 0598 DEFINED AT LINE 824
> USED AT LINE 822
RETURN: 0531 DEFINED AT LINE 835
> USED AT LINE 1040
PRINT: 05AC DEFINED AT LINE 838
> USED AT LINE 1046
> USED AT LINE 1070
PR01: 05AF DEFINED AT LINE 839
> USED AT LINE 874
PR02: 05C5 DEFINED AT LINE 850
> USED AT LINE 846
PR03: 05CE DEFINED AT LINE 854
> USED AT LINE 849
PR04: 05E0 DEFINED AT LINE 862
> USED AT LINE 844
> USED AT LINE 860
PR05: 05E9 DEFINED AT LINE 866
> USED AT LINE 840
> USED AT LINE 856
PR06: 05EB DEFINED AT LINE 867
> USED AT LINE 870
PR07: 05F4 DEFINED AT LINE 871
> USED AT LINE 842
> USED AT LINE 858
PR08: 05FD DEFINED AT LINE 875
> USED AT LINE 865
PRQ01: 0602 DEFINED AT LINE 879
> USED AT LINE 885
PRNTQS: 0605 DEFINED AT LINE 880
> USED AT LINE 848
PRQ03: 060E DEFINED AT LINE 884
> USED AT LINE 882
PRNTN: 0613 DEFINED AT LINE 888
> USED AT LINE 852
PRN03: 0623 DEFINED AT LINE 897
> USED AT LINE 889
PRN05: 0626 DEFINED AT LINE 898
> USED AT LINE 902
PRN07: 0632 DEFINED AT LINE 903
> USED AT LINE 900
> USED AT LINE 917
> USED AT LINE 926
PRN09: 0634 DEFINED AT LINE 904
> USED AT LINE 908
PRN11: 063F DEFINED AT LINE 909
> USED AT LINE 905
PRN13: 0653 DEFINED AT LINE 918
> USED AT LINE 915
PRNPT: 0654 DEFINED AT LINE 919
PRNPTO: 065C DEFINED AT LINE 923
PRNT4: 065E DEFINED AT LINE 925
> USED AT LINE 249
> USED AT LINE 1008
INPUT: 0663 DEFINED AT LINE 929
> USED AT LINE 1049
IN03: 066C DEFINED AT LINE 933
> USED AT LINE 938
> USED AT LINE 944
IN05: 0674 DEFINED AT LINE 936
> USED AT LINE 962
> USED AT LINE 964
IN07: 068B DEFINED AT LINE 945
> USED AT LINE 940
IN09: 069D DEFINED AT LINE 953
> USED AT LINE 951
IN11: 06A4 DEFINED AT LINE 956
> USED AT LINE 930
IN13: 06A7 DEFINED AT LINE 957
> USED AT LINE 955
RMESS: 06B8 DEFINED AT LINE 965
RUN: 06C1 DEFINED AT LINE 969
> USED AT LINE 1061
RUN01: 06C5 DEFINED AT LINE 971
> USED AT LINE 973
LIST: 06CF DEFINED AT LINE 978
> USED AT LINE 1064
LIST03: 06DC DEFINED AT LINE 985
> USED AT LINE 979
LIST05: 06E9 DEFINED AT LINE 991
> USED AT LINE 988
LIST07: 06F3 DEFINED AT LINE 995
> USED AT LINE 984
> USED AT LINE 990
> USED AT LINE 993
LIST09: 06FF DEFINED AT LINE 1000
> USED AT LINE 1018
LIST10: 072B DEFINED AT LINE 1019
> USED AT LINE 1001
LIST11: 0732 DEFINED AT LINE 1022
> USED AT LINE 1004
VERBT: 0737 DEFINED AT LINE 1026
TSTBRK: 079C DEFINED AT LINE 1074
> USED AT LINE 318
> USED AT LINE 1017
GETCHR: 07A0 DEFINED AT LINE 1076
> USED AT LINE 260
GETC05: 07A9 DEFINED AT LINE 1080
> USED AT LINE 1075
> USED AT LINE 1078
PUTCHR: 07AA DEFINED AT LINE 1081
> USED AT LINE 101
> USED AT LINE 215
> USED AT LINE 247
> USED AT LINE 251
> USED AT LINE 270
> USED AT LINE 282
> USED AT LINE 295
> USED AT LINE 297
> USED AT LINE 868
> USED AT LINE 879
> USED AT LINE 895
> USED AT LINE 912
> USED AT LINE 934
> USED AT LINE 1011
> USED AT LINE 1021
INEEE: 07AF DEFINED AT LINE 1085
> USED AT LINE 1076
> USED AT LINE 1086
OUTEEE: 07B9 DEFINED AT LINE 1090
> USED AT LINE 1082
OUT01: 07BB DEFINED AT LINE 1091
> USED AT LINE 1093
BRKEEE: 07C8 DEFINED AT LINE 1097
> USED AT LINE 1074
> USED AT LINE 1085
BRK03: 07CA DEFINED AT LINE 1098
> USED AT LINE 1102
BRK05: 07D6 DEFINED AT LINE 1103
> USED AT LINE 1100
INTEEE: 07E5 DEFINED AT LINE 1111
> USED AT LINE 79
> USED AT LINE 83
.org $200
.ent $
ldx test
ldx [test]
lda $1234
ldx $fedc
lda #$2
tfr a,dp
lda $12
test dw $204
; setdp
; lda <12
; reg
:10020000BE0213AE9F0213B61234BEFEDC86021F7E
:050210008B96120204B0
:00000001FF
0200 .ORG $200
0200 .ENT $
0200 BE 02 13 LDX test
0203 AE 9F 02 13 LDX [test]
0207 B6 12 34 LDA $1234
020A BE FE DC LDX $fedc
020D 86 02 LDA #$2
020F 1F 8B TFR a,dp
0211 96 12 LDA $12
0213 02 04 TEST: DW $204
0215 ; setdp
0215 ; lda <12
0215 ; reg
TEST: 0213 DEFINED AT LINE 15
> USED AT LINE 4
; Monitor vectors:
MRESET EQU $E000
MSERIN EQU $E003
MSEROUT EQU $E006
MPRINT2 EQU $E009
MPRINTX EQU $E00C
MPRIMM EQU $E00F
.ORG $100
.ENT $
.PRAGMA 6309
; test 20
; here are your space:
TESTMOD:
JSR hdtest
BEQ m68
JSR MPRIMM
.CSTR $0d,$0a,"Hi from HD6309",$0d,$0a
JMP MRESET
M68:
JSR MPRIMM
.CSTR $0d,$0a,"Hi from MC6809",$0d,$0a
JMP MRESET
HDTEST:
PSHS d
;FDB $1043
COMD
CMPB 1,s
PULS d,pc
biand a.7,100.5
;TITLE 6809 eForth
; $Id: ef09.asm,v 1.1 1997/11/24 02:56:01 root Exp $
;
;===============================================================
;
; eForth 1.0 by Bill Muench and C. H. Ting, 1990
; Much of the code is derived from the following sources:
; 8086 figForth by Thomas Newman, 1981 and Joe smith, 1983
; aFORTH by John Rible
; bFORTH by Bill Muench
;
; The goal of this implementation is to provide a simple eForth Model
; which can be ported easily to many 8, 16, 24 and 32 bit CPU's.
; The following attributes make it suitable for CPU's of the '90:
;
; small machine dependent kernel and portable high level code
; source code in the MASM format
; direct threaded code
; separated code and name dictionaries
; simple vectored terminal and file interface to host computer
; aligned with the proposed ANS Forth Standard
; easy upgrade path to optimize for specific CPU
;
; You are invited to implement this Model on your favorite CPU and
; contribute it to the eForth Library for public use. You may use
; a portable implementation to advertise more sophisticated and
; optimized version for commercial purposes. However, you are
; expected to implement the Model faithfully. The eForth Working
; Group reserves the right to reject implementation which deviates
; significantly from this Model.
;
; As the ANS Forth Standard is still evolving, this Model will
; change accordingly. Implementations must state clearly the
; version number of the Model being tracked.
;
; Representing the eForth Working Group in the Silicon Valley FIG Chapter.
; Send contributions to:
;
; Dr. C. H. Ting
; 156 14th Avenue
; San Mateo, CA 94402
; (415) 571-7639
;
;===============================================================
; $Log: ef09.asm,v $
; Revision 1.1 1997/11/24 02:56:01 root
; Initial revision
;
;===============================================================
;; Version control
VER EQU 1 ;major release version
EXT EQU 0 ;minor extension
;; Constants
TRUEE EQU -1 ;true flag
COMPO EQU $40 ;lexicon compile only bit
IMEDD EQU $80 ;lexicon immediate bit
MASKK EQU $1F7F ;lexicon bit mask
CFAOFF EQU 3 ;offset from word entry to code field area
; (length of JSR)
CELLL EQU 2 ;size of a cell
BASEE EQU 10 ;default radix
VOCSS EQU 8 ;depth of vocabulary stack
BKSPP EQU 8 ;back space
BKSPP2 EQU 127 ;back space
LF EQU 10 ;line feed
CRR EQU 13 ;carriage return
ERR EQU 27 ;error escape
TIC EQU 39 ;tick
CALLL EQU $12BD ;NOP CALL opcodes
;; Memory allocation
EM EQU $4000 ;top of memory
US EQU 64*CELLL ;user area size in cells
RTS EQU 128*CELLL ;return stack/TIB size
UPP EQU EM-US ;start of user area (UP0)
RPP EQU UPP-8*CELLL ;start of return stack (RP0)
TIBB EQU RPP-RTS ;terminal input buffer (TIB)
SPP EQU TIBB-8*CELLL ;start of data stack (SP0)
COLDD EQU $100 ;cold start vector
CODEE EQU COLDD+US ;code dictionary
NAMEE EQU EM-$0400 ;name dictionary
;; Initialize assembly variables
;; Main entry points and COLD start data
ORG COLDD ;beginning of cold boot area
SETDP 0
ORIG lds #SPP ;Init stack pointer.
ldy #RPP ;Init return stack pointer
ldu #COLD1 ;Init Instr pointer.
pulu pc ;next.
; COLD start moves the following to USER variables.
; MUST BE IN SAME ORDER AS USER VARIABLES.
UZERO RMB 8 ;reserved space in user area
FDB SPP ;SP0
FDB RPP ;RP0
FDB QRX ;'?KEY
FDB TXSTO ;'EMIT
FDB ACCEP ;'EXPECT
FDB KTAP ;'TAP
FDB TXSTO ;'ECHO
FDB DOTOK ;'PROMPT
FDB BASEE ;BASE
FDB 0 ;tmp
FDB 0 ;SPAN
FDB 0 ;>IN
FDB 0 ;#TIB
FDB TIBB ;TIB
FDB 0 ;CSP
FDB INTER ;'EVAL
FDB NUMBQ ;'NUMBER
FDB 0 ;HLD
FDB 0 ;HANDLER
FDB 0 ;CONTEXT pointer
RMB VOCSS*2 ;vocabulary stack
FDB 0 ;CURRENT pointer
FDB 0 ;vocabulary link pointer
FDB CTOP ;CP
FDB NTOP ;NP
FDB LASTN ;LAST
ULAST:
ORG CODEE ;beginning of the code dictionary
;; Device dependent I/O
; BYE ( -- )
; Exit eForth.
FDB BYE,0
L100 FCB 3,"BYE"
BYE sync
; ?RX ( -- c T | F )
; Return input character and true, or a false if no input.
FDB QRX,L100
L110 FCB 3,"?RX"
QRX ldx #0
swi3
bcc qrx1
stx ,--s
pulu pc
qrx1 clra
std ,--s
leax -1,x
stx ,--s
pulu pc
; TX! ( c -- )
; Send character c to the output device.
FDB TXSTO,L110
L120 FCB 3,"TX!"
TXSTO ldd ,s++
cmpb #$ff
bne tx1
ldb #32
tx1 swi2
pulu pc
; !IO ( -- )
; Initialize the serial I/O devices.
FDB STOIO,L120
L130 FCB 3,"!IO"
STOIO pulu pc
;; The kernel
; doLIT ( -- w )
; Push an inline literal.
FDB DOLIT,L130
L140 FCB COMPO+5,"doLIT"
DOLIT:
;;;; ldd ,u++
pulu d
; 7 cycles
pshs d
;;;; 8 cycles
;;;; std ,--s
pulu pc
; doCLIT ( -- w )
; Push an inline 8-bit literal.
FDB DOCLIT,L140
L141 FCB COMPO+6,"doCLIT"
DOCLIT:
pulu b
sex ; sign extended
pshs d
pulu pc
; doLIST ( a -- )
; Process colon list.
FDB DOLST,L141
L150 FCB COMPO+6,"doLIST"
DOLST stu ,--y ; IP on return stack
puls u ; JSR left new IP on parameter stack
;;;; ldu ,s++
pulu pc ; FORTH NEXT IP
; next ( -- )
; Run time code for the single index loop.
; : next ( -- ) \ hilevel model
; r> r> dup if 1 - >r @ >r exit then drop cell+ >r ;
FDB DONXT,L150
L160 FCB COMPO+4,"next"
DONXT ldd ,y ; counter on return stack
subd #1 ; decrement
bcs next1 ; < -> exit loop
std ,y ; decremented value back on stack
ldu ,u ; branch to begin of loop
pulu pc
next1 leay 2,y ; remove counter from stack
leau 2,u ; skip branch destination
pulu pc
; ?branch ( f -- )
; Branch if flag is zero.
FDB QBRAN,L160
L170 FCB COMPO+7,"?branch"
QBRAN: ;$CODE COMPO+7,'?branch',QBRAN
ldd ,s++
beq bran1
leau 2,u ; skip new IP, no branch
pulu pc
bran1 ldu ,u ; go to new IP
pulu pc
; branch ( -- )
; Branch to an inline address.
FDB BRAN,L170
L180 FCB COMPO+6,"branch"
BRAN ldu ,u ; destination immediate after BRANCH
pulu pc
; EXECUTE ( ca -- )
; Execute the word at ca.
FDB EXECU,L180
L190 FCB 7,"EXECUTE"
EXECU rts ; code pointer on parameter stack
; EXIT ( -- )
; SEMIS
; Terminate a colon definition.
FDB EXIT,L190
L200 FCB 4,"EXIT"
EXIT ldu ,y++ ; get calling IP from return stack
pulu pc
; ! ( w a -- )
; Pop the data stack to memory.
FDB STORE,L200
L210 FCB 1,"!"
STORE:
;;;; ldx ,s++
;;;; ldd ,s++
;;;; faster ...
puls x
puls d
; we cannot use puls x,d because the order fetched would be wrong :(
std ,x
pulu pc
; @ ( a -- w )
; Push memory location to the data stack.
FDB AT,L210
L220 FCB 1,"@"
AT ldd [,s]
std ,s
pulu pc
; C! ( c b -- )
; Pop the data stack to byte memory.
FDB CSTOR,L220
L230 FCB 2,"C!"
CSTOR:
;;;; ldx ,s++
;;;; ldd ,s++
;;;; faster ...
puls x
puls d
; we cannot use puls x,d because the order fetched would be wrong :(
stb ,x
pulu pc
; C@ ( b -- c )
; Push byte memory location to the data stack.
FDB CAT,L230
L240 FCB 2,"C@"
CAT ldb [,s]
clra
std ,s
pulu pc
; RP@ ( -- a )
; Push the current RP to the data stack.
FDB RPAT,L240
L250 FCB 3,"RP@"
RPAT pshs y
pulu pc
; RP! ( a -- )
; Set the return stack pointer.
FDB RPSTO,L250
L260 FCB 3,"RP!"
RPSTO puls y
pulu pc
; R> ( -- w )
; Pop the return stack to the data stack.
FDB RFROM,L260
L270 FCB 2,"R>"
RFROM ldd ,y++
;;;; std ,--s
pshs d
pulu pc
; I ( -- w )
; Copy top of return stack (current index from DO/LOOP) to the data stack.
FDB RAT,L270
L279 FCB 1,"I"
; R@ ( -- w )
; Copy top of return stack to the data stack.
FDB RAT,L279
L280 FCB 2,"R@"
RAT:
I:
ldd ,y
;;;; std ,--s
pshs d
pulu pc
; >R ( w -- )
; Push the data stack to the return stack.
FDB TOR,L280
L290 FCB 2,">R"
TOR:
;;;; ldd ,s++
puls d
std ,--y
pulu pc
; SP@ ( -- a )
; Push the current data stack pointer.
FDB SPAT,L290
L300 FCB 3,"SP@"
SPAT:
tfr s,d
std ,--s
;;;; alternatively
;;;; sts ,--s ; does this work?
pulu pc
; SP! ( a -- )
; Set the data stack pointer.
FDB SPSTO,L300
L310 FCB 3,"SP!"
SPSTO lds ,s
pulu pc
; DROP ( w -- )
; Discard top stack item.
FDB DROP,L310
L320 FCB 4,"DROP"
DROP leas 2,s
pulu pc
; DUP ( w -- w w )
; Duplicate the top stack item.
FDB DUPP,L320
L330 FCB 3,"DUP"
DUPP ldd ,s
;;;; std ,--s
pshs d
pulu pc
; SWAP ( w1 w2 -- w2 w1 )
; Exchange top two stack items.
FDB SWAP,L330
L340 FCB 4,"SWAP"
SWAP:
;;;;OLD 1: slow
;;;; ldx ,s++
;;;; ldd ,s++
;;;;OLD 2: faster
;;;; puls x
;;;; puls d
;;;; pshs d,x
;more efficient, without unnecessary stack pointer manipulations
ldd ,s
ldx 2,s
std 2,s
stx ,s
pulu pc
; OVER ( w1 w2 -- w1 w2 w1 )
; Copy second stack item to top.
FDB OVER,L340
L350 FCB 4,"OVER"
OVER ldd 2,s
;;;; std ,--s
pshs d
pulu pc
; 0< ( n -- t )
; Return true if n is negative.
FDB ZLESS,L350
L360 FCB 2,"0<"
ZLESS ldb ,s ; input high byte, as D low
sex ; sign extend to b to a/b
tfr a,b ; high byte: 0 or FF copy to D low
std ,s ; D: 0000 or FFFF (= -1)
pulu pc
; 0= ( n -- t )
; Return true if n is zero
FDB ZEQUAL,L360
L365 FCB 2,"0="
ZEQUAL:
ldx #TRUEE ; true
ldd ,s ; TOS
beq ZEQUAL1 ; -> true
ldx #0 ; false
ZEQUAL1 stx ,s ; D: 0000 or FFFF (= -1)
pulu pc
; AND ( w w -- w )
; Bitwise AND.
FDB ANDD,L365
L370 FCB 3,"AND"
ANDD ldd ,s++
anda ,s
andb 1,s
std ,s
pulu pc
; OR ( w w -- w )
; Bitwise inclusive OR.
FDB ORR,L370
L380 FCB 2,"OR"
ORR ldd ,s++
ora ,s
orb 1,s
std ,s
pulu pc
; XOR ( w w -- w )
; Bitwise exclusive OR.
FDB XORR,L380
L390 FCB 3,"XOR"
XORR ldd ,s++
eora ,s
eorb 1,s
std ,s
pulu pc
; D+ ( ud ud -- udsum )
; Add two unsigned double numbers and return a double sum.
FDB DPLUS,L390
L391 FCB 2,"D+"
DPLUS ldd 2,s ; add low words
addd 6,s
std 6,s
ldd ,s ; add hig words
adcb 5,s
adca 4,s
std 4,s
leas 4,s ; drop one double
pulu pc
; D- ( ud ud -- uddiff )
; Subtract two unsigned double numbers and return a double sum.
FDB DSUB,L391
L392 FCB 2,"D-"
DSUB jsr DOLST
FDB DNEGA,DPLUS,EXIT
; UM+ ( u u -- udsum )
; Add two unsigned single numbers and return a double sum.
FDB UPLUS,L392
L400 FCB 3,"UM+"
UPLUS ldd ,s
addd 2,s
std 2,s
ldd #0
adcb #0
std ,s
pulu pc
;; Constants
; doCONST ( -- w )
; Run time routine for CONSTANT
FDB DOCONST,L400
L401 FCB COMPO+7,"doCONST"
DOCONST:
FDOCONST:
ldd [,s] ; contents of W (on TOS because of JSR)
std ,s ; to TOS (replacing W)
pulu pc
; 0 ( -- 0 )
; Constant 0
FDB ZERO,L401
L402 FCB 1,"0"
ZERO jsr FDOCONST
FDB 0
; 1 ( -- 1 )
; Constant 1
FDB ONE,L402
L403 FCB 1,"1"
ONE jsr FDOCONST
FDB 1
; 2 ( -- 2 )
; Constant 2
FDB TWO,L403
L404 FCB 1,"2"
TWO jsr FDOCONST
FDB 2
; -1 ( -- -1 )
; Constant -1
FDB MONE,L404
L405 FCB 2,"-1"
MONE jsr FDOCONST
FDB -1
;; System and user variables
; doVAR ( -- a )
; Run time routine for VARIABLE and CREATE.
FDB DOVAR,L405
L410 FCB COMPO+5,"doVAR"
DOVAR:
jsr DOLST
FDB RFROM,EXIT
;; fast native DOVAR implementation
FDOVAR pulu pc
; UP ( -- a )
; Pointer to the user area.
FDB UP,L410
L420 FCB 2,"UP"
UP:
;; jsr DOLST
;; FDB DOVAR
;; fast (native) DOVAR
jsr FDOVAR
FDB UPP
; doUSER ( -- a )
; Run time routine for user variables.
FDB DOUSE,L420
L430 FCB COMPO+5,"doUSER"
DOUSE:
jsr DOLST
FDB RFROM,AT,UP,AT,PLUS,EXIT
;; fast (native) DOUSE implementation (*NOT COMPLETE*)
FDOUSE:
ldd [,s] ; pointer to value (from JSR)
addd UP+CFAOFF ; dirty access to start of USER area:
; var. UP value direct access (not
; as a high level word)
std ,s ; resulting address returned on p-stack
pulu pc
; SP0 ( -- a )
; Pointer to bottom of the data stack.
FDB SZERO,L430
L440 FCB 3,"SP0"
SZERO:
jsr FDOUSE
FDB 8
;;;; jsr DOLST
;;;; FDB DOUSE,8
; RP0 ( -- a )
; Pointer to bottom of the return stack.
FDB RZERO,L440
L450 FCB 3,"RP0"
RZERO:
jsr FDOUSE
FDB 10
;;;; jsr DOLST
;;;; FDB DOUSE,10
; '?KEY ( -- a )
; Execution vector of ?KEY.
FDB TQKEY,L450
L460 FCB 5,"'?KEY"
TQKEY
jsr FDOUSE
FDB 12
;;;; jsr DOLST
;;;; FDB DOUSE,12
; 'EMIT ( -- a )
; Execution vector of EMIT.
FDB TEMIT,L460
L470 FCB 5,"'EMIT"
TEMIT
jsr FDOUSE
FDB 14
;; jsr DOLST
;; FDB DOUSE,14
; 'EXPECT ( -- a )
; Execution vector of EXPECT.
FDB TEXPE,L470
L480 FCB 7,"'EXPECT"
TEXPE
jsr FDOUSE
FDB 16
;;;; jsr DOLST
;;;; FDB DOUSE,16
; 'TAP ( -- a )
; Execution vector of TAP.
FDB TTAP,L480
L490 FCB 4,"'TAP"
TTAP
jsr FDOUSE
FDB 18
;;;; jsr DOLST
;;;; FDB DOUSE,18
; 'ECHO ( -- a )
; Execution vector of ECHO.
FDB TECHO,L490
L500 FCB 5,"'ECHO"
TECHO
jsr FDOUSE
FDB 20
;;;; jsr DOLST
;;;; FDB DOUSE,20
; 'PROMPT ( -- a )
; Execution vector of PROMPT.
FDB TPROM,L500
L510 FCB 7,"'PROMPT"
TPROM
jsr FDOUSE
FDB 22
;;;; jsr DOLST
;;;; FDB DOUSE,22
; BASE ( -- a )
; Storage of the radix base for numeric I/O.
FDB BASE,L510
L520 FCB 4,"BASE"
BASE
jsr FDOUSE
FDB 24
;;;; jsr DOLST
;;;; FDB DOUSE,24
; tmp ( -- a )
; A temporary storage location used in parse and find.
FDB TEMP,L520
L530 FCB COMPO+3,"tmp"
TEMP
jsr FDOUSE
FDB 26
;;;; jsr DOLST
;;;; FDB DOUSE,26
; SPAN ( -- a )
; Hold character count received by EXPECT.
FDB SPAN,L530
L540 FCB 4,"SPAN"
SPAN
jsr FDOUSE
FDB 28
;;;; jsr DOLST
;;;; FDB DOUSE,28
; >IN ( -- a )
; Hold the character pointer while parsing input stream.
FDB INN,L540
L550 FCB 3,">IN"
INN
jsr FDOUSE
FDB 30
;;;; jsr DOLST
;;;; FDB DOUSE,30
; #TIB ( -- a )
; Hold the current count in and address of the terminal input buffer.
FDB NTIB,L550
L560 FCB 4,"#TIB"
NTIB
jsr FDOUSE
FDB 32
;;;; jsr DOLST
;;;; FDB DOUSE,32 ;It contains TWO cells!!!!
; CSP ( -- a )
; Hold the stack pointer for error checking.
FDB CSP,L560
L570 FCB 3,"CSP"
CSP
jsr FDOUSE
FDB 36
;;;; jsr DOLST
;;;; FDB DOUSE 36
; 'EVAL ( -- a )
; Execution vector of EVAL.
FDB TEVAL,L570
L580 FCB 5,"'EVAL"
TEVAL
jsr FDOUSE
FDB 38
;;;; jsr DOLST
;;;; FDB DOUSE,38
; 'NUMBER ( -- a )
; Execution vector of NUMBER?.
FDB TNUMB,L580
L590 FCB 7,"'NUMBER"
TNUMB
jsr FDOUSE
FDB 40
;;;; jsr DOLST
;;;; FDB DOUSE,40
; HLD ( -- a )
; Hold a pointer in building a numeric output string.
FDB HLD,L590
L600 FCB 3,"HLD"
HLD
jsr FDOUSE
FDB 42
;;;; jsr DOLST
;;;; FDB DOUSE,42
; HANDLER ( -- a )
; Hold the return stack pointer for error handling.
FDB HANDL,L600
L610 FCB 7,"HANDLER"
HANDL
jsr FDOUSE
FDB 44
;;;; jsr DOLST
;;;; FDB DOUSE,44
; CONTEXT ( -- a )
; A area to specify vocabulary search order.
FDB CNTXT,L610
L620 FCB 7,"CONTEXT"
CNTXT
jsr FDOUSE
FDB 46
;;;; jsr DOLST
;;;; FDB DOUSE,46 ;plus space for voc stack.
; CURRENT ( -- a )
; Point to the vocabulary to be extended.
FDB CRRNT,L620
L630 FCB 7,"CURRENT"
CRRNT
jsr FDOUSE
FDB 48+VOCSS*2 ;Extra cell
;;;; jsr DOLST
;;;; FDB DOUSE,48+VOCSS*2 ;Extra cell
; CP ( -- a )
; Point to the top of the code dictionary.
FDB CP,L630
L640 FCB 2,"CP"
CP
jsr FDOUSE
FDB 52+VOCSS*2
;;;; jsr DOLST
;;;; FDB DOUSE,52+VOCSS*2
; NP ( -- a )
; Point to the bottom of the name dictionary.
FDB NP,L640
L650 FCB 2,"NP"
NP
jsr FDOUSE
FDB 54+VOCSS*2
;;;; jsr DOLST
;;;; FDB DOUSE,54+VOCSS*2
; LAST ( -- a )
; Point to the last name in the name dictionary.
FDB LAST,L650
L660 FCB 4,"LAST"
LAST
jsr FDOUSE
FDB 56+VOCSS*2
;;;; jsr DOLST
;;;; FDB DOUSE,56+VOCSS*2
;; Common functions
; doVOC ( -- )
; Run time action of VOCABULARY's.
FDB DOVOC,L660
L670 FCB COMPO+5,"doVOC"
DOVOC
jsr DOLST
FDB RFROM,CNTXT,STORE,EXIT
; FORTH ( -- )
; Make FORTH the context vocabulary.
FDB FORTH,L670
L680 FCB 5,"FORTH"
FORTH
jsr DOLST
FDB DOVOC
FDB 0 ;vocabulary head pointer
FDB 0 ;vocabulary link pointer
; ?DUP ( w -- w w | 0 )
; Dup tos if its is not zero.
FDB QDUP,L680
L690 FCB 4,"?DUP"
QDUP
jsr DOLST
FDB DUPP
FDB QBRAN,QDUP1
FDB DUPP
QDUP1 FDB EXIT
; ROT ( w1 w2 w3 -- w2 w3 w1 )
; Rot 3rd item to top.
FDB ROT,L690
L700 FCB 3,"ROT"
ROT
jsr DOLST
FDB TOR,SWAP,RFROM,SWAP,EXIT
; 2DROP ( w w -- )
; Discard two items on stack.
FDB DDROP,L700
L710 FCB 5,"2DROP"
DDROP
jsr DOLST
FDB DROP,DROP,EXIT
; 2DUP ( w1 w2 -- w1 w2 w1 w2 )
; Duplicate top two items.
FDB DDUP,L710
L720 FCB 4,"2DUP"
DDUP
jsr DOLST
FDB OVER,OVER,EXIT
; LSHIFT ( w n -- w )
; Shift word left n times.
FDB LSHIFT,L720
L721 FCB 6,"LSHIFT"
LSHIFT ldx ,s++ ;shift count
beq LSHIFT2
ldd ,s ;value to shift
LSHIFT1 aslb ;low
rola ;high
leax -1,x ;count down
bne LSHIFT1
std ,s
LSHIFT2
pulu pc
; RSHIFT ( w n -- w )
; Shift word right n times.
FDB RSHIFT,L721
L721A FCB 6,"RSHIFT"
RSHIFT ldx ,s++ ;shift count
beq RSHIFT2
ldd ,s ;value to shift
RSHIFT1 lsra ;high
rorb ;low
leax -1,x ;count down
bne RSHIFT1
std ,s
RSHIFT2
pulu pc
; >< ( w -- w )
; swap high and low byte
FDB SWAPHL,L721A
L722 FCB 2,"><"
SWAPHL ldb ,s ;high -> D low
lda 1,s ;low -> D high
std ,s
pulu pc
; 256/ ( w -- w )
; multiply with 256 (shift left 8 times)
FDB SLASH256,L722
L723 FCB 4,"256/"
SLASH256 ldb ,s ;high -> D low
clra ;D high = 0
std ,s
pulu pc
; 256* ( w -- w )
; multiply with 256 (shift left 8 times)
FDB STAR256,L723
L724 FCB 4,"256*"
STAR256 lda 1,s ;low -> D high
clrb ;D low = 0
std ,s
pulu pc
; 1+ ( w -- w )
; Shortcut, quick add 1
FDB PLUS1,L724
L725 FCB 2,"1+"
PLUS1 ldd ,s
addd #1
std ,s
pulu pc
; -+ ( w -- w )
; Shortcut, quick subtract 1
FDB MINUS1,L725
L726 FCB 2,"1-"
MINUS1 ldd ,s
subd #1
std ,s
pulu pc
; 2* ( w -- w )
; multiply by 2 using shift operation
FDB TWOSTAR,L726
L727 FCB 2,"2*"
TWOSTAR asl 1,s ;low
rol 0,s ;high
pulu pc
; 2/ ( w -- w )
; divide by 2 using shift operation
FDB TWOSLASH,L727
L728 FCB 2,"2/"
TWOSLASH asr 0,s ;high
ror 1,s ;low
pulu pc
; + ( w w -- sum )
; Add top two items.
FDB PLUS,L728
L730 FCB 1,"+"
PLUS
ldd ,s++
addd ,s
std ,s
pulu pc
;;; HL with UPLUS!? Too inefficient ...
;;; jsr DOLST
;;; FDB UPLUS,DROP,EXIT
; NOT ( w -- w )
; One's complement of tos.
FDB INVER,L730
L740 FCB 3,"NOT"
INVER
;;;; fastest ... (13T)
com ,s ; 6T
com 1,s ; 7T
pulu pc
;;;; alternative ... (14T)
ldd ,s ;TOS 5T
coma ; 2T
comb ; 2T
std ,s ; 5T
pulu pc
;;; slow HL ...
;;; jsr DOLST
;;; FDB DOLIT,-1,XORR,EXIT
; NEGATE ( n -- -n )
; Two's complement of tos.
FDB NEGAT,L740
L750 FCB 6,"NEGATE"
NEGAT
;;;; fastest? .... (3+6+5 = 14T)
ldd #0 ; 3T
subd ,s ; 6T
std ,s ; 5T
pulu pc
;;;; alternate ... (7+3+6 = 16T)
neg 1,s ; high 7T
bne NEGAT1 ; 3T
neg ,s ; low with 1+ carry 6T
pulu pc
NEGAT1 com ,s ; low, no 1+ carry 6T
pulu pc
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB INVER,PLUS1,EXIT
; DNEGATE ( d -- -d )
; Two's complement of top double.
FDB DNEGA,L750
L760 FCB 7,"DNEGATE"
DNEGA
ldd #0
subd 2,s ; low word
std 2,s
ldd #0
sbcb 1,s ; high word low byte
sbca ,s ; high word high byte
std ,s
pulu pc
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB INVER,TOR,INVER
;;;; FDB DOLIT,1,UPLUS
;;;; FDB RFROM,PLUS,EXIT
; - ( n1 n2 -- n1-n2 )
; Subtraction.
FDB SUBB,L760
L770 FCB 1,"-"
SUBB ldd 2,s
subd ,s++
std ,s
pulu pc
;;; slow HL ...
;;; jsr DOLST
;;; FDB NEGAT,PLUS,EXIT
; ABS ( n -- n )
; Return the absolute value of n.
FDB ABSS,L770
L780 FCB 3,"ABS"
ABSS jsr DOLST
FDB DUPP,ZLESS
FDB QBRAN,ABS1
FDB NEGAT
ABS1 FDB EXIT
; = ( w w -- t )
; Return true if top two are equal.
FDB EQUAL,L780
L790 FCB 1,"="
EQUAL
ldx #TRUEE
puls d ; first value
cmpd ,s ; compare to 2nd value
beq EQUAL1 ; equal -> true
ldx #0 ; false (leax 1,x save 1 byte, but is slower)
EQUAL1 stx ,s
pulu pc
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB XORR
;;;; FDB QBRAN,EQU1
;;;; FDB DOLIT,0,EXIT
;;;;EQU1: FDB DOLIT,TRUEE,EXIT
; U< ( u1 u2 -- t )
; Unsigned compare of top two items.
FDB ULESS,L790
L800 FCB 2,"U<"
ULESS
ldx #TRUEE ; true
puls d ; u2
cmpd ,s ; u2 - u1
bhi ULES1 ; unsigned: u2 higher u1
ldx #0 ; false
ULES1 stx ,s ; replace TOS with result
pulu pc
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB DDUP,XORR,ZLESS
;;;; FDB QBRAN,ULES1
;;;; FDB SWAP,DROP,ZLESS,EXIT
;;;;ULES1: FDB SUBB,ZLESS,EXIT
; < ( n1 n2 -- t )
; Signed compare of top two items.
FDB LESS,L800
L810 FCB 1,"<"
LESS
ldx #TRUEE ; true
puls d ; n2
cmpd ,s ; n2 - n1
bgt LESS1 ; signed: n2 greater than n1
ldx #0 ; false
LESS1 stx ,s ; replace TOS with result
pulu pc
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB DDUP,XORR,ZLESS
;;;; FDB QBRAN,LESS1
;;;; FDB DROP,ZLESS,EXIT
;;;;LESS1: FDB SUBB,ZLESS,EXIT
; MAX ( n n -- n )
; Return the greater of two top stack items.
FDB MAX,L810
L820 FCB 3,"MAX"
MAX jsr DOLST
FDB DDUP,LESS
FDB QBRAN,MAX1
FDB SWAP
MAX1 FDB DROP,EXIT
; MIN ( n n -- n )
; Return the smaller of top two stack items.
FDB MIN,L820
L830 FCB 3,"MIN"
MIN jsr DOLST
FDB DDUP,SWAP,LESS
FDB QBRAN,MIN1
FDB SWAP
MIN1 FDB DROP,EXIT
; WITHIN ( u ul uh -- t )
; Return true if u is within the range of ul and uh. ( ul <= u < uh )
FDB WITHI,L830
L840 FCB 6,"WITHIN"
WITHI jsr DOLST
FDB OVER,SUBB,TOR
FDB SUBB,RFROM,ULESS,EXIT
;; Divide
; U/ ( udl udh un -- ur uq )
; Unsigned divide of a double by a single. Return mod and quotient.
;
; Special cases:
; 1. overflow: quotient overflow if dividend is to great (remainder = divisor),
; remainder is set to $FFFF -> special handling.
; This is checked also right before the main loop.
; 2. underflow: divisor does not fit into dividend -> remainder
; get the value of the dividend -> automatically covered.
;
; overflow: quotient = $FFFF, remainder = divisor
; underflow: quotient = $0000, remainder = dividend low
; division by zero: quotient = $FFFF, remainder = $0000
;
; Testvalues:
;
; DIVH DIVL DVSR QUOT REM comment
;
; 0100 0000 FFFF 0100 0100 maximum divisor
; 0000 0001 8000 0000 0001 underflow (REM = DIVL)
; 0000 5800 3000 0001 1800 normal divsion
; 5800 0000 3000 FFFF 3000 overflow
; 0000 0001 0000 FFFF 0000 overflow (division by zero)
FDB USLASH,L840
L845 FCB 2,"U/"
USLASH
ldx #16
ldd 2,s ; udh
cmpd ,s ; dividend to great?
bhs UMMODOV ; quotient overflow!
asl 5,s ; udl low
rol 4,s ; udl high
UMMOD1 rolb ; got one bit from udl
rola
bcs UMMOD2 ; bit 16 means always greater as divisor
cmpd ,s ; divide by un
bhs UMMOD2 ; higher or same as divisor?
andcc #$fe ; clc - clear carry flag
bra UMMOD3
UMMOD2 subd ,s
orcc #$01 ; sec - set carry flag
UMMOD3 rol 5,s ; udl, quotient shifted in
rol 4,s
leax -1,x
bne UMMOD1
ldx 4,s ; quotient
cmpd ,s ; remainder >= divisor -> overflow
blo UMMOD4
UMMODOV
ldd ,s ; remainder set to divisor
ldx #$FFFF ; quotient = FFFF (-1) marks overflow
; (case 1)
UMMOD4
leas 2,s ; un (divisor thrown away)
stx ,s ; quotient to TOS
std 2,s ; remainder 2nd
pulu pc ; NEXT
; UM/MOD ( udl udh un -- ur uq )
; Unsigned divide of a double by a single. Return mod and quotient.
FDB UMMOD,L845
L850 FCB 6,"UM/MOD"
UMMOD
jmp USLASH
;;;; slow HL ...
jsr DOLST
FDB DDUP,ULESS
FDB QBRAN,UMM4
FDB NEGAT,DOLIT,15,TOR
UMM1 FDB TOR,DUPP,UPLUS
FDB TOR,TOR,DUPP,UPLUS
FDB RFROM,PLUS,DUPP
FDB RFROM,RAT,SWAP,TOR
FDB UPLUS,RFROM,ORR
FDB QBRAN,UMM2
FDB TOR,DROP,PLUS1,RFROM
FDB BRAN,UMM3
UMM2 FDB DROP
UMM3 FDB RFROM
FDB DONXT,UMM1
FDB DROP,SWAP,EXIT
UMM4 FDB DROP,DDROP
FDB DOLIT,-1,DUPP,EXIT
; M/MOD ( d n -- r q )
; Signed floored divide of double by single. Return mod and quotient.
FDB MSMOD,L850
L860 FCB 5,"M/MOD"
MSMOD
jsr DOLST
FDB DUPP,ZLESS,DUPP,TOR
FDB QBRAN,MMOD1
FDB NEGAT,TOR,DNEGA,RFROM
MMOD1 FDB TOR,DUPP,ZLESS
FDB QBRAN,MMOD2
FDB RAT,PLUS
MMOD2 FDB RFROM,UMMOD,RFROM
FDB QBRAN,MMOD3
FDB SWAP,NEGAT,SWAP
MMOD3 FDB EXIT
; /MOD ( n n -- r q )
; Signed divide. Return mod and quotient.
FDB SLMOD,L860
L870 FCB 4,"/MOD"
SLMOD jsr DOLST
FDB OVER,ZLESS,SWAP,MSMOD,EXIT
; MOD ( n n -- r )
; Signed divide. Return mod only.
FDB MODD,L870
L880 FCB 3,"MOD"
MODD jsr DOLST
FDB SLMOD,DROP,EXIT
; / ( n n -- q )
; Signed divide. Return quotient only.
FDB SLASH,L880
L890 FCB 1,"/"
SLASH
jsr DOLST
FDB SLMOD,SWAP,DROP,EXIT
;; Multiply
; UM* ( u u -- ud )
; Unsigned multiply. Return double product.
FDB UMSTA,L890
L900 FCB 3,"UM*"
UMSTA
ldx #17 ; 16 adds and 17 shifts ...
clra ; result high word
clrb
bra UUMSTA3
UUMSTA1 bcc UUMSTA2
addd ,s
UUMSTA2 rora ; high, result high word
rorb ; low, result high word
UUMSTA3 ror 2,s ; shift multiplier high, result low word
ror 3,s ; shift multiplier low, result low word
leax -1,x
bne UUMSTA1
std ,s
pulu pc
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB DOLIT,0,SWAP,DOLIT,15,TOR
;;;;UMST1: FDB DUPP,UPLUS,TOR,TOR
;;;; FDB DUPP,UPLUS,RFROM,PLUS,RFROM
;;;; FDB QBRAN,UMST2
;;;; FDB TOR,OVER,UPLUS,RFROM,PLUS
;;;;UMST2: FDB DONXT,UMST1
;;;; FDB ROT,DROP,EXIT
; _UM* ( u u -- ud )
; Unsigned multiply. Return double product.
FDB UUMSTA,L900
L900A FCB 4,"_UM*"
UUMSTA
jsr DOLST
FDB DOLIT,0,SWAP,DOLIT,15,TOR
UMST1 FDB DUPP,UPLUS,TOR,TOR
FDB DUPP,UPLUS,RFROM,PLUS,RFROM
FDB QBRAN,UMST2
FDB TOR,OVER,UPLUS,RFROM,PLUS
UMST2 FDB DONXT,UMST1
FDB ROT,DROP,EXIT
; * ( n n -- n )
; Signed multiply. Return single product.
; XXX Not really signed, -200 -200 * -> -25536
FDB STAR,L900A
L910 FCB 1,"*"
STAR
jsr DOLST
FDB MSTAR,DROP,EXIT
; M* ( n n -- d )
; Signed multiply. Return double product.
FDB MSTAR,L910
L920 FCB 2,"M*"
MSTAR
jsr DOLST
FDB DDUP,XORR,ZLESS,TOR
FDB ABSS,SWAP,ABSS,UMSTA
FDB RFROM
FDB QBRAN,MSTA1
FDB DNEGA
MSTA1 FDB EXIT
; */MOD ( n1 n2 n3 -- r q )
; Multiply n1 and n2, then divide by n3. Return mod and quotient.
FDB SSMOD,L920
L930 FCB 5,"*/MOD"
SSMOD jsr DOLST
FDB TOR,MSTAR,RFROM,MSMOD,EXIT
; */ ( n1 n2 n3 -- q )
; Multiply n1 by n2, then divide by n3. Return quotient only.
FDB STASL,L930
L940 FCB 2,"*/"
STASL jsr DOLST
FDB SSMOD,SWAP,DROP,EXIT
;; Miscellaneous
; CELL+ ( a -- a )
; Add cell size in byte to address.
FDB CELLP,L940
L950 FCB 5,"CELL+"
CELLP jsr DOLST
FDB DOCLIT
FCB CELLL
FDB PLUS,EXIT
; CELL- ( a -- a )
; Subtract cell size in byte from address.
FDB CELLM,L950
L960 FCB 5,"CELL-"
CELLM jsr DOLST
FDB DOCLIT
FCB 0-CELLL
FDB PLUS,EXIT
; CELLS ( n -- n )
; Multiply tos by cell size in bytes.
FDB CELLS,L960
L970 FCB 5,"CELLS"
CELLS jsr DOLST
FDB DOCLIT
FCB CELLL
FDB STAR,EXIT
; ALIGNED ( b -- a )
; Align address to the cell boundary.
FDB ALGND,L970
L975 FCB 7,"ALIGNED"
ALGND jsr DOLST
FDB EXIT
; BL ( -- 32 )
; Return 32, the blank character.
FDB BLANK,L975
L980 FCB 2,"BL"
BLANK
jsr DOCONST
FDB ' '
;;; jsr DOLST
;;; FDB DOLIT,' ',EXIT
; >CHAR ( c -- c )
; Filter non-printing characters.
FDB TCHAR,L980
L990 FCB 5,">CHAR"
TCHAR jsr DOLST
FDB DOLIT,$7F,ANDD,DUPP ;mask msb
FDB DOCLIT
FCB 127
FDB BLANK,WITHI ;check for printable
FDB QBRAN,TCHA1
FDB DROP,DOLIT,'_' ;replace non-printables
TCHA1 FDB EXIT
; DEPTH ( -- n )
; Return the depth of the data stack.
FDB DEPTH,L990
L1000 FCB 5,"DEPTH"
DEPTH jsr DOLST
FDB SPAT,SZERO,AT,SWAP,SUBB
FDB DOCLIT
FCB CELLL
FDB SLASH,EXIT
; PICK ( ... +n -- ... w )
; Copy the nth stack item to tos.
FDB PICK,L1000
L1010 FCB 4,"PICK"
PICK
ldd ,s
addd #1 ; correct index
aslb ; CELLL* (ASSERT: CELLL=2!!!)
rola
ldx d,s ; pick value
stx ,s ; replace TOP
pulu pc
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB PLUS1,CELLS
;;;; FDB SPAT,PLUS,AT,EXIT
; ROLL ( ... +n -- ... w )
; Copy the nth stack item to tos.
FDB ROLL,L1010
L1015 FCB 4,"ROLL"
ROLL
;;;; XXX als Primitive!
;;;; slow HL ...
jsr DOLST
FDB DUPP,TWO
FDB LESS,QBRAN,ROL1
FDB DROP,BRAN,ROL2
ROL1 FDB SWAP,TOR,ONE
FDB SUBB
FDB ROLL,RFROM,SWAP
ROL2 FDB EXIT
;; Memory access
; +! ( n a -- )
; Add n to the contents at address a.
FDB PSTOR,L1015
L1020 FCB 2,"+!"
PSTOR
puls x ; address
puls d ; value
addd ,x ; add to value from address
std ,x ; store back
pulu pc
;;;; XXX als Primitive!
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB SWAP,OVER,AT,PLUS
;;;; FDB SWAP,STORE,EXIT
; 2! ( d a -- )
; Store the double integer to address a.
FDB DSTOR,L1020
L1030 FCB 2,"2!"
DSTOR
;;;; XXX als Primitive!
;;;; slow HL ...
jsr DOLST
FDB SWAP,OVER,STORE
FDB CELLP,STORE,EXIT
; 2@ ( a -- d )
; Fetch double integer from address a.
FDB DAT,L1030
L1040 FCB 2,"2@"
DAT
;;;; XXX als Primitive!
;;;; slow HL ...
jsr DOLST
FDB DUPP,CELLP,AT
FDB SWAP,AT,EXIT
; COUNT ( b -- b +n )
; Return count byte of a string and add 1 to byte address.
FDB COUNT,L1040
L1050 FCB 5,"COUNT"
COUNT jsr DOLST
FDB DUPP,PLUS1
FDB SWAP,CAT,EXIT
; HERE ( -- a )
; Return the top of the code dictionary.
FDB HERE,L1050
L1060 FCB 4,"HERE"
HERE jsr DOLST
FDB CP,AT,EXIT
; PAD ( -- a )
; Return the address of the text buffer above the code dictionary.
FDB PAD,L1060
L1070 FCB 3,"PAD"
PAD jsr DOLST
FDB HERE,DOLIT,80,PLUS,EXIT
; TIB ( -- a )
; Return the address of the terminal input buffer.
FDB TIB,L1070
L1080 FCB 3,"TIB"
TIB jsr DOLST
FDB NTIB,CELLP,AT,EXIT
; @EXECUTE ( a -- )
; Execute vector stored in address a.
FDB ATEXE,L1080
L1090 FCB 8,"@EXECUTE"
ATEXE jsr DOLST
FDB AT,QDUP ;?address or zero
FDB QBRAN,EXE1
FDB EXECU ;execute if non-zero
EXE1 FDB EXIT ;do nothing if zero
; CMOVE ( b1 b2 u -- )
; Copy u bytes from b1 to b2.
FDB CMOVE,L1090
L1100 FCB 5,"CMOVE"
CMOVE
jmp CMOVEW
ldd ,s ;count
beq CMOVE3 ;zero -> leave
tstb ;count low
beq CMOVE1
inc ,s ;ajust high for to-0 decrementation
CMOVE1
ldx 2,s ;to addr
stu 2,s ;save reg on stack
ldu 4,s ;from addr
CMOVE2 lda ,u+ ;from ->
sta ,x+ ;to
decb ;low count
bne CMOVE2
dec ,s ;high count
bne CMOVE2
ldu 2,s
CMOVE3 leas 6,s ;drop 3 parameters from stack
pulu pc
;;;;
;;;; alternative, wordwise copy ...
CMOVEW ldd ,s ; count
ldx 2,s ; destination
sty ,s ; save RP
stu 2,s ; save IP
ldy 4,s ; source
lsra ; divide by 2, count words
rorb ;
pshs cc
beq CMOVEW1 ; byte decrement correction
inca ; byte decrement high byte correction
CMOVEW1 subd #0 ; word count zero (=65536)?
beq CMOVEW3
CMOVEW2 ldu ,y++ ; source
stu ,x++ ; destination
decb ; count low
bne CMOVEW2
deca ; count high (count to 0 corrected)
bne CMOVEW2
CMOVEW3 puls CC ; check if odd count?
bcc CMOVEW4
lda ,y
sta ,x
CMOVEW4 puls y,u ; y first
leas 2,s ; drop 3rd parameter
pulu pc ; next
;;;;
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB TOR
;;;; FDB BRAN,CMOV2
;;;;CMOV1: FDB TOR,DUPP,CAT
;;;; FDB RAT,CSTOR
;;;; FDB PLUS1
;;;; FDB RFROM,PLUS1
;;;;CMOV2: FDB DONXT,CMOV1
;;;; FDB DDROP,EXIT
;;;;
; FILL ( b u c -- )
; Fill u bytes of character c to area beginning at b.
FDB FILL,L1100
L1110 FCB 4,"FILL"
FILL
ldd 2,s ;count
beq NFILL3 ;zero -> leave
tstb ;count low
beq NFILL1
inc 2,s ;ajust high for to-0 decrementation
NFILL1
ldx 4,s ;to addr
lda 1,s ;fill byte, low byte from TOS
NFILL2
sta ,x+ ;to
decb ;low count
bne NFILL2
dec 2,s ;high count
bne NFILL2
NFILL3 leas 6,s ;drop 3 parameters from stack
pulu pc
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB SWAP,TOR,SWAP
;;;; FDB BRAN,FILL2
;;;;FILL1: FDB DDUP,CSTOR,PLUS1
;;;;FILL2: FDB DONXT,FILL1
;;;; FDB DDROP,EXIT
; -TRAILING ( b u -- b u )
; Adjust the count to eliminate trailing white space.
FDB DTRAI,L1110
L1120 FCB 9,"-TRAILING"
DTRAI jsr DOLST
FDB TOR
FDB BRAN,DTRA2
DTRA1 FDB BLANK,OVER,RAT,PLUS,CAT,LESS
FDB QBRAN,DTRA2
FDB RFROM,PLUS1,EXIT
DTRA2 FDB DONXT,DTRA1
FDB ZERO,EXIT
; PACK$ ( b u a -- a )
; Build a counted string with u characters from b. Null fill.
FDB PACKS,L1120
L1130 FCB 5,"PACK$"
PACKS jsr DOLST
FDB DUPP,TOR ;strings only on cell boundary
FDB DDUP,CSTOR
FDB PLUS1 ;count mod cell
FDB DDUP,PLUS
FDB ZERO,SWAP,CSTOR ;null fill cell
FDB SWAP,CMOVE,RFROM,EXIT ;move string
;; Numeric output, single precision
; DIGIT ( u -- c )
; Convert digit u to a character.
FDB DIGIT,L1130
L1140 FCB 5,"DIGIT"
DIGIT jsr DOLST
FDB DOCLIT
FCB 9
FDB OVER,LESS
FDB DOCLIT
FCB 7
FDB ANDD,PLUS
FDB DOLIT,'0',PLUS,EXIT
; EXTRACT ( n base -- n c )
; Extract the least significant digit from n.
FDB EXTRC,L1140
L1150 FCB 7,"EXTRACT"
EXTRC jsr DOLST
FDB ZERO,SWAP,UMMOD
FDB SWAP,DIGIT,EXIT
; <# ( -- )
; Initiate the numeric output process.
FDB BDIGS,L1150
L1160 FCB 2,"<#"
BDIGS jsr DOLST
FDB PAD,HLD,STORE,EXIT
; HOLD ( c -- )
; Insert a character into the numeric output string.
FDB HOLD,L1160
L1170 FCB 4,"HOLD"
HOLD jsr DOLST
FDB HLD,AT,MINUS1
FDB DUPP,HLD,STORE,CSTOR,EXIT
; # ( u -- u )
; Extract one digit from u and append the digit to output string.
FDB DIG,L1170
L1180 FCB 1,"#"
DIG jsr DOLST
FDB BASE,AT,EXTRC,HOLD,EXIT
; #S ( u -- 0 )
; Convert u until all digits are added to the output string.
FDB DIGS,L1180
L1190 FCB 2,"#S"
DIGS jsr DOLST
DIGS1 FDB DIG,DUPP
FDB QBRAN,DIGS2
FDB BRAN,DIGS1
DIGS2 FDB EXIT
; SIGN ( n -- )
; Add a minus sign to the numeric output string.
FDB SIGN,L1190
L1200 FCB 4,"SIGN"
SIGN jsr DOLST
FDB ZLESS
FDB QBRAN,SIGN1
FDB DOLIT,'-',HOLD
SIGN1 FDB EXIT
; #> ( w -- b u )
; Prepare the output string to be TYPE'd.
FDB EDIGS,L1200
L1210 FCB 2,"#>"
EDIGS jsr DOLST
FDB DROP,HLD,AT
FDB PAD,OVER,SUBB,EXIT
; str ( w -- b u )
; Convert a signed integer to a numeric string.
FDB STR,L1210
L1220 FCB 3,"str"
STR jsr DOLST
FDB DUPP,TOR,ABSS
FDB BDIGS,DIGS,RFROM
FDB SIGN,EDIGS,EXIT
; HEX ( -- )
; Use radix 16 as base for numeric conversions.
FDB HEX,L1220
L1230 FCB 3,"HEX"
HEX jsr DOLST
FDB DOCLIT
FCB 16
FDB BASE,STORE,EXIT
; DECIMAL ( -- )
; Use radix 10 as base for numeric conversions.
FDB DECIM,L1230
L1240 FCB 7,"DECIMAL"
DECIM jsr DOLST
FDB DOCLIT
FCB 10
FDB BASE,STORE,EXIT
;; Numeric input, single precision
; DIGIT? ( c base -- u t )
; Convert a character to its numeric value. A flag indicates success.
FDB DIGTQ,L1240
L1250 FCB 6,"DIGIT?"
DIGTQ jsr DOLST
FDB TOR,DOLIT,'0',SUBB
FDB DOCLIT
FCB 9
FDB OVER,LESS
FDB QBRAN,DGTQ1
FDB DOCLIT
FCB 7
FDB SUBB
FDB DUPP,DOLIT,10,LESS,ORR
DGTQ1 FDB DUPP,RFROM,ULESS,EXIT
; NUMBER? ( a -- n T | a F )
; Convert a number string to integer. Push a flag on tos.
FDB NUMBQ,L1250
L1260 FCB 7,"NUMBER?"
NUMBQ jsr DOLST
FDB BASE,AT,TOR,ZERO,OVER,COUNT
FDB OVER,CAT,DOLIT,'$',EQUAL
FDB QBRAN,NUMQ1
FDB HEX,SWAP,PLUS1
FDB SWAP,MINUS1
NUMQ1 FDB OVER,CAT,DOLIT,'-',EQUAL,TOR
FDB SWAP,RAT,SUBB,SWAP,RAT,PLUS,QDUP
FDB QBRAN,NUMQ6
FDB MINUS1,TOR
NUMQ2 FDB DUPP,TOR,CAT,BASE,AT,DIGTQ
FDB QBRAN,NUMQ4
FDB SWAP,BASE,AT,STAR,PLUS,RFROM
FDB PLUS1
FDB DONXT,NUMQ2
FDB RAT,SWAP,DROP
FDB QBRAN,NUMQ3
FDB NEGAT
NUMQ3 FDB SWAP
FDB BRAN,NUMQ5
NUMQ4 FDB RFROM,RFROM,DDROP,DDROP,ZERO
NUMQ5 FDB DUPP
NUMQ6 FDB RFROM,DDROP
FDB RFROM,BASE,STORE,EXIT
;; Basic I/O
; ?KEY ( -- c T | F )
; Return input character and true, or a false if no input.
FDB QKEY,L1260
L1270 FCB 4,"?KEY"
QKEY jsr DOLST
FDB TQKEY,ATEXE,EXIT
; KEY ( -- c )
; Wait for and return an input character.
FDB KEY,L1270
L1280 FCB 3,"KEY"
KEY jsr DOLST
KEY1 FDB QKEY
FDB QBRAN,KEY1
FDB EXIT
; EMIT ( c -- )
; Send a character to the output device.
FDB EMIT,L1280
L1290 FCB 4,"EMIT"
EMIT jsr DOLST
FDB TEMIT,ATEXE,EXIT
; NUF? ( -- t )
; Return false if no input, else pause and if CR return true.
FDB NUFQ,L1290
L1300 FCB 4,"NUF?"
NUFQ jsr DOLST
FDB QKEY,DUPP
FDB QBRAN,NUFQ1
FDB DDROP,KEY,DOCLIT
FCB CRR
FDB EQUAL
NUFQ1 FDB EXIT
; PACE ( -- )
; Send a pace character for the file downloading process.
FDB PACE,L1300
L1310 FCB 4,"PACE"
PACE jsr DOLST
FDB DOCLIT
FCB 11
FDB EMIT,EXIT
; SPACE ( -- )
; Send the blank character to the output device.
FDB SPACE,L1310
L1320 FCB 5,"SPACE"
SPACE jsr DOLST
FDB BLANK,EMIT,EXIT
; SPACES ( +n -- )
; Send n spaces to the output device.
FDB SPACS,L1320
L1330 FCB 6,"SPACES"
SPACS jsr DOLST
FDB ZERO,MAX,TOR
FDB BRAN,CHAR2
CHAR1 FDB SPACE
CHAR2 FDB DONXT,CHAR1
FDB EXIT
; TYPE ( b u -- )
; Output u characters from b.
FDB TYPES,L1330
L1340 FCB 4,"TYPE"
TYPES jsr DOLST
FDB TOR
FDB BRAN,TYPE2
TYPE1 FDB DUPP,CAT,EMIT
FDB PLUS1
TYPE2 FDB DONXT,TYPE1
FDB DROP,EXIT
; CR ( -- )
; Output a carriage return and a line feed.
FDB CR,L1340
L1350 FCB 2,"CR"
CR jsr DOLST
FDB DOCLIT
FCB CRR
FDB EMIT
FDB DOCLIT
FCB LF
FDB EMIT,EXIT
; do$ ( -- a )
; Return the address of a compiled string.
FDB DOSTR,L1350
L1360 FCB COMPO+3,"do$"
DOSTR jsr DOLST
FDB RFROM,RAT,RFROM,COUNT,PLUS
FDB ALGND,TOR,SWAP,TOR,EXIT
; $"| ( -- a )
; Run time routine compiled by $". Return address of a compiled string.
FDB STRQP,L1360
L1370 FCB COMPO+3,'$','"','|'
STRQP jsr DOLST
FDB DOSTR,EXIT ;force a call to do$
; ."| ( -- )
; Run time routine of ." . Output a compiled string.
FDB DOTQP,L1370
L1380 FCB COMPO+3,'.','"','|'
DOTQP jsr DOLST
FDB DOSTR,COUNT,TYPES,EXIT
; .R ( n +n -- )
; Display an integer in a field of n columns, right justified.
FDB DOTR,L1380
L1390 FCB 2,".R"
DOTR jsr DOLST
FDB TOR,STR,RFROM,OVER,SUBB
FDB SPACS,TYPES,EXIT
; U.R ( u +n -- )
; Display an unsigned integer in n column, right justified.
FDB UDOTR,L1390
L1400 FCB 3,"U.R"
UDOTR jsr DOLST
FDB TOR,BDIGS,DIGS,EDIGS
FDB RFROM,OVER,SUBB
FDB SPACS,TYPES,EXIT
; U. ( u -- )
; Display an unsigned integer in free format.
FDB UDOT,L1400
L1410 FCB 2,"U."
UDOT jsr DOLST
FDB BDIGS,DIGS,EDIGS
FDB SPACE,TYPES,EXIT
; . ( w -- )
; Display an integer in free format, preceeded by a space.
FDB DOT,L1410
L1420 FCB 1,"."
DOT jsr DOLST
FDB BASE,AT,DOCLIT
FCB 10
FDB XORR ;?decimal
FDB QBRAN,DOT1
FDB UDOT,EXIT ;no, display unsigned
DOT1 FDB STR,SPACE,TYPES,EXIT ;yes, display signed
; ? ( a -- )
; Display the contents in a memory cell.
FDB QUEST,L1420
L1430 FCB 1,"?"
QUEST jsr DOLST
FDB AT,DOT,EXIT
;; Parsing
; parse ( b u c -- b u delta ; <string> )
; Scan string delimited by c. Return found string and its offset.
FDB PARS,L1430
L1440 FCB 5,"parse"
PARS jsr DOLST
FDB TEMP,STORE,OVER,TOR,DUPP
FDB QBRAN,PARS8
FDB MINUS1,TEMP,AT,BLANK,EQUAL
FDB QBRAN,PARS3
FDB TOR
PARS1 FDB BLANK,OVER,CAT ;skip leading blanks ONLY
FDB SUBB,ZLESS,INVER
FDB QBRAN,PARS2
FDB PLUS1
FDB DONXT,PARS1
FDB RFROM,DROP,ZERO,DUPP,EXIT
PARS2 FDB RFROM
PARS3 FDB OVER,SWAP
FDB TOR
PARS4 FDB TEMP,AT,OVER,CAT,SUBB ;scan for delimiter
FDB TEMP,AT,BLANK,EQUAL
FDB QBRAN,PARS5
FDB ZLESS
PARS5 FDB QBRAN,PARS6
FDB PLUS1
FDB DONXT,PARS4
FDB DUPP,TOR
FDB BRAN,PARS7
PARS6 FDB RFROM,DROP,DUPP
FDB PLUS1,TOR
PARS7 FDB OVER,SUBB
FDB RFROM,RFROM,SUBB,EXIT
PARS8 FDB OVER,RFROM,SUBB,EXIT
; PARSE ( c -- b u ; <string> )
; Scan input stream and return counted string delimited by c.
FDB PARSE,L1440
L1450 FCB 5,"PARSE"
PARSE jsr DOLST
FDB TOR,TIB,INN,AT,PLUS ;current input buffer pointer
FDB NTIB,AT,INN,AT,SUBB ;remaining count
FDB RFROM,PARS,INN,PSTOR,EXIT
; .( ( -- )
; Output following string up to next ) .
FDB DOTPR,L1450
L1460 FCB IMEDD+2,".("
DOTPR jsr DOLST
FDB DOLIT,')',PARSE,TYPES,EXIT
; ( ( -- )
; Ignore following string up to next ) . A comment.
FDB PAREN,L1460
L1470 FCB IMEDD+1,"("
PAREN jsr DOLST
FDB DOLIT,')',PARSE,DDROP,EXIT
; \ ( -- )
; Ignore following text till the end of line.
FDB BKSLA,L1470
L1480 FCB IMEDD+1,92 ; '\' but give as numeric to avoid different escap char processing in different assemblers
BKSLA jsr DOLST
FDB NTIB,AT,INN,STORE,EXIT
; CHAR ( -- c )
; Parse next word and return its first character.
FDB CHAR,L1480
L1490 FCB 4,"CHAR"
CHAR jsr DOLST
FDB BLANK,PARSE,DROP,CAT,EXIT
; TOKEN ( -- a ; <string> )
; Parse a word from input stream and copy it to name dictionary.
FDB TOKEN,L1490
L1500 FCB 5,"TOKEN"
TOKEN jsr DOLST
FDB BLANK,PARSE,DOCLIT
FCB 31
FDB MIN
FDB NP,AT,OVER,SUBB,CELLM
FDB PACKS,EXIT
; WORD ( c -- a ; <string> )
; Parse a word from input stream and copy it to code dictionary.
FDB WORD,L1500
L1510 FCB 4,"WORD"
WORD jsr DOLST
FDB PARSE,HERE,PACKS,EXIT
;; Dictionary search
; NAME> ( na -- ca )
; Return a code address given a name address.
FDB NAMET,L1510
L1520 FCB 5,"NAME>"
NAMET jsr DOLST
FDB CELLM,CELLM,AT,EXIT
; SAME? ( a a u -- a a f \ -0+ )
; Compare u bytes in two strings. Return 0 if identical.
FDB SAMEQ,L1520
L1530 FCB 5,"SAME?"
SAMEQ jsr DOLST
FDB TOR
FDB BRAN,SAME2
SAME1 FDB OVER,RAT,PLUS,CAT
FDB OVER,RAT,PLUS,CAT
FDB SUBB,QDUP
FDB QBRAN,SAME2
FDB RFROM,DROP,EXIT
SAME2 FDB DONXT,SAME1
FDB DOLIT,0,EXIT
; find ( a va -- ca na | a F )
; Search a vocabulary for a string. Return ca and na if succeeded.
FDB FIND,L1530
L1540 FCB 4,"find"
FIND jsr DOLST
FDB SWAP,DUPP,CAT,MINUS1
FDB TEMP,STORE
FDB DUPP,AT,TOR,CELLP,SWAP
FIND1 FDB AT,DUPP
FDB QBRAN,FIND6
FDB DUPP,AT,DOLIT,MASKK,ANDD,RAT,XORR
FDB QBRAN,FIND2
FDB CELLP,MONE
FDB BRAN,FIND3
FIND2 FDB CELLP,TEMP,AT,SAMEQ
FIND3 FDB BRAN,FIND4
FIND6 FDB RFROM,DROP
FDB SWAP,CELLM,SWAP,EXIT
FIND4 FDB QBRAN,FIND5
FDB CELLM,CELLM
FDB BRAN,FIND1
FIND5 FDB RFROM,DROP,SWAP,DROP
FDB CELLM
FDB DUPP,NAMET,SWAP,EXIT
; NAME? ( a -- ca na | a F )
; Search all context vocabularies for a string.
FDB NAMEQ,L1540
L1550 FCB 5,"NAME?"
NAMEQ jsr DOLST
FDB CNTXT,DUPP,DAT,XORR
FDB QBRAN,NAMQ1
FDB CELLM
NAMQ1 FDB TOR
NAMQ2 FDB RFROM,CELLP,DUPP,TOR
FDB AT,QDUP
FDB QBRAN,NAMQ3
FDB FIND,QDUP
FDB QBRAN,NAMQ2
FDB RFROM,DROP,EXIT
NAMQ3 FDB RFROM,DROP
FDB ZERO,EXIT
;; Terminal response
; ^H ( bot eot cur -- bot eot cur )
; Backup the cursor by one character.
FDB BKSP,L1550
L1560 FCB 2,"^H"
BKSP jsr DOLST
FDB TOR,OVER,RFROM,SWAP,OVER,XORR
FDB QBRAN,BACK1
FDB DOLIT,BKSPP,TECHO,ATEXE,MINUS1
FDB BLANK,TECHO,ATEXE
FDB DOLIT,BKSPP,TECHO,ATEXE
BACK1 FDB EXIT
; TAP ( bot eot cur c -- bot eot cur )
; Accept and echo the key stroke and bump the cursor.
FDB TAP,L1560
L1570 FCB 3,"TAP"
TAP jsr DOLST
FDB DUPP,TECHO,ATEXE
FDB OVER,CSTOR,PLUS1,EXIT
; kTAP ( bot eot cur c -- bot eot cur )
; Process a key stroke, CR or backspace.
FDB KTAP,L1570
L1580 FCB 4,"kTAP"
KTAP jsr DOLST
FDB DUPP,DOCLIT
FCB CRR
FDB XORR
FDB QBRAN,KTAP2
FDB DUPP,DOLIT,BKSPP,XORR
FDB SWAP,DOLIT,BKSPP2,XORR,ANDD
FDB QBRAN,KTAP1
FDB BLANK,TAP,EXIT
KTAP1 FDB BKSP,EXIT
KTAP2 FDB DROP,SWAP,DROP,DUPP,EXIT
; accept ( b u -- b u )
; Accept characters to input buffer. Return with actual count.
FDB ACCEP,L1580
L1590 FCB 6,"ACCEPT"
ACCEP jsr DOLST
FDB OVER,PLUS,OVER
ACCP1 FDB DDUP,XORR
FDB QBRAN,ACCP4
FDB KEY,DUPP
; FDB BLANK,SUBB,DOLIT,95,ULESS
FDB BLANK,DOLIT,127,WITHI
FDB QBRAN,ACCP2
FDB TAP
FDB BRAN,ACCP3
ACCP2 FDB TTAP,ATEXE
ACCP3 FDB BRAN,ACCP1
ACCP4 FDB DROP,OVER,SUBB,EXIT
; EXPECT ( b u -- )
; Accept input stream and store count in SPAN.
FDB EXPEC,L1590
L1600 FCB 6,"EXPECT"
EXPEC jsr DOLST
FDB TEXPE,ATEXE,SPAN,STORE,DROP,EXIT
; QUERY ( -- )
; Accept input stream to terminal input buffer.
FDB QUERY,L1600
L1610 FCB 5,"QUERY"
QUERY jsr DOLST
FDB TIB,DOCLIT
FCB 80
FDB TEXPE,ATEXE,NTIB,STORE
FDB DROP,ZERO,INN,STORE,EXIT
;; Error handling
; CATCH ( ca -- 0 | err# )
; Execute word at ca and set up an error frame for it.
FDB CATCH,L1610
L1620 FCB 5,"CATCH"
CATCH jsr DOLST
FDB SPAT,TOR,HANDL,AT,TOR ;save error frame
FDB RPAT,HANDL,STORE,EXECU ;execute
FDB RFROM,HANDL,STORE ;restore error frame
FDB RFROM,DROP,ZERO,EXIT ;no error
; THROW ( err# -- err# )
; Reset system to current local error frame an update error flag.
FDB THROW,L1620
L1630 FCB 5,"THROW"
THROW jsr DOLST
FDB HANDL,AT,RPSTO ;restore return stack
FDB RFROM,HANDL,STORE ;restore handler frame
FDB RFROM,SWAP,TOR,SPSTO ;restore data stack
FDB DROP,RFROM,EXIT
; NULL$ ( -- a )
; Return address of a null string with zero count.
FDB NULLS,L1630
L1640 FCB 5,"NULL$"
NULLS
;;;; jsr DOLST
;;;; FDB DOVAR ;emulate CREATE
jsr FDOVAR
FDB 0
FCB 99,111,121,111,116,101
; ABORT ( -- )
; Reset data stack and jump to QUIT.
FDB ABORT,L1640
L1650 FCB 5,"ABORT"
ABORT jsr DOLST
FDB NULLS,THROW
; abort" ( f -- )
; Run time routine of ABORT" . Abort with a message.
FDB ABORQ,L1650
L1660 FCB COMPO+6,"abort",'"'
ABORQ jsr DOLST
FDB QBRAN,ABOR1 ;text flag
FDB DOSTR,THROW ;pass error string
ABOR1 FDB DOSTR,DROP,EXIT ;drop error
;; The text interpreter
; $INTERPRET ( a -- )
; Interpret a word. If failed, try to convert it to an integer.
FDB INTER,L1660
L1670 FCB 10,"$INTERPRET"
INTER jsr DOLST
FDB NAMEQ,QDUP ;?defined
FDB QBRAN,INTE1
FDB AT,DOLIT,COMPO<<8,ANDD ;?compile only lexicon bits
FDB ABORQ
FCB 13," compile only"
FDB EXECU,EXIT ;execute defined word
INTE1 FDB TNUMB,ATEXE ;convert a number
FDB QBRAN,INTE2
FDB EXIT
INTE2 FDB THROW ;error
; [ ( -- )
; Start the text interpreter.
FDB LBRAC,L1670
L1680 FCB IMEDD+1,"["
LBRAC jsr DOLST
FDB DOLIT,INTER,TEVAL,STORE,EXIT
; .OK ( -- )
; Display 'ok' only while interpreting.
FDB DOTOK,L1680
L1690 FCB 3,".OK"
DOTOK jsr DOLST
FDB DOLIT,INTER,TEVAL,AT,EQUAL
FDB QBRAN,DOTO1
FDB DOTQP
FCB 3," ok"
DOTO1 FDB CR,EXIT
; ?STACK ( -- )
; Abort if the data stack underflows.
FDB QSTAC,L1690
L1700 FCB 6,"?STACK"
QSTAC jsr DOLST
FDB DEPTH,ZLESS ;check only for underflow
FDB ABORQ
FCB 10," underflow"
FDB EXIT
; EVAL ( -- )
; Interpret the input stream.
FDB EVAL,L1700
L1710 FCB 4,"EVAL"
EVAL jsr DOLST
EVAL1 FDB TOKEN,DUPP,CAT ;?input stream empty
FDB QBRAN,EVAL2
FDB TEVAL,ATEXE,QSTAC ;evaluate input, check stack
FDB BRAN,EVAL1
EVAL2 FDB DROP,TPROM,ATEXE,EXIT ;prompt
;; Shell
; PRESET ( -- )
; Reset data stack pointer and the terminal input buffer.
FDB PRESE,L1710
L1720 FCB 6,"PRESET"
PRESE jsr DOLST
FDB SZERO,AT,SPSTO
FDB DOLIT,TIBB,NTIB,CELLP,STORE,EXIT
; xio ( a a a -- )
; Reset the I/O vectors 'EXPECT, 'TAP, 'ECHO and 'PROMPT.
FDB XIO,L1720
L1730 FCB COMPO+3,"xio"
XIO jsr DOLST
FDB DOLIT,ACCEP,TEXPE,DSTOR
FDB TECHO,DSTOR,EXIT
; FILE ( -- )
; Select I/O vectors for file download.
FDB FILE,L1730
L1740 FCB 4,"FILE"
FILE jsr DOLST
FDB DOLIT,PACE,DOLIT,DROP
FDB DOLIT,KTAP,XIO,EXIT
; HAND ( -- )
; Select I/O vectors for terminal interface.
FDB HAND,L1740
L1750 FCB 4,"HAND"
HAND jsr DOLST
FDB DOLIT,DOTOK,DOLIT,EMIT
FDB DOLIT,KTAP,XIO,EXIT
; I/O ( -- a )
; Array to store default I/O vectors.
FDB ISLO,L1750
L1760 FCB 3,"I/O"
ISLO
;; jsr DOLST
;; FDB DOVAR ;emulate CREATE
jsr FDOVAR
FDB QRX,TXSTO ;default I/O vectors
; CONSOLE ( -- )
; Initiate terminal interface.
FDB CONSO,L1760
L1770 FCB 7,"CONSOLE"
CONSO jsr DOLST
FDB ISLO,DAT,TQKEY,DSTOR ;restore default I/O device
FDB HAND,EXIT ;keyboard input
; QUIT ( -- )
; Reset return stack pointer and start text interpreter.
FDB QUIT,L1770
L1780 FCB 4,"QUIT"
QUIT jsr DOLST
FDB RZERO,AT,RPSTO ;reset return stack pointer
QUIT1 FDB LBRAC ;start interpretation
QUIT2 FDB QUERY ;get input
FDB DOLIT,EVAL,CATCH,QDUP ;evaluate input
FDB QBRAN,QUIT2 ;continue till error
FDB TPROM,AT,TOR ;save input device
FDB CONSO,NULLS,OVER,XORR ;?display error message
FDB QBRAN,QUIT3
FDB SPACE,COUNT,TYPES ;error message
FDB DOTQP
FCB 3," ? " ;error prompt
QUIT3 FDB RFROM,DOLIT,DOTOK,XORR ;?file input
FDB QBRAN,QUIT4
FDB DOLIT,ERR,EMIT ;file error, tell host
QUIT4 FDB PRESE ;some cleanup
FDB BRAN,QUIT1
;; The compiler
; ' ( -- ca )
; Search context vocabularies for the next word in input stream.
FDB TICK,L1780
L1790 FCB 1,"'"
TICK jsr DOLST
FDB TOKEN,NAMEQ ;?defined
FDB QBRAN,TICK1
FDB EXIT ;yes, push code address
TICK1 FDB THROW ;no, error
; ALLOT ( n -- )
; Allocate n bytes to the code dictionary.
FDB ALLOT,L1790
L1800 FCB 5,"ALLOT"
ALLOT jsr DOLST
FDB CP,PSTOR,EXIT ;adjust code pointer
; , ( w -- )
; Compile an integer into the code dictionary.
FDB COMMA,L1800
L1810 FCB 1,","
COMMA jsr DOLST
FDB HERE,DUPP,CELLP ;cell boundary
FDB CP,STORE,STORE,EXIT ;adjust code pointer and compile
; [COMPILE] ( -- ; <string> )
; Compile the next immediate word into code dictionary.
FDB BCOMP,L1810
L1820 FCB IMEDD+9,"[COMPILE]"
BCOMP jsr DOLST
FDB TICK,COMMA,EXIT
; COMPILE ( -- )
; Compile the next address in colon list to code dictionary.
FDB COMPI,L1820
L1830 FCB COMPO+7,"COMPILE"
COMPI jsr DOLST
FDB RFROM,DUPP,AT,COMMA ;compile address
FDB CELLP,TOR,EXIT ;adjust return address
; LITERAL ( w -- )
; Compile tos to code dictionary as an integer literal.
FDB LITER,L1830
L1840 FCB IMEDD+7,"LITERAL"
LITER jsr DOLST
FDB COMPI,DOLIT,COMMA,EXIT
; $," ( -- )
; Compile a literal string up to next " .
FDB STRCQ,L1840
L1850 FCB 3,"$,",'"'
STRCQ jsr DOLST
FDB DOLIT,'"',WORD ;move string to code dictionary
FDB COUNT,PLUS,ALGND ;calculate aligned end of string
FDB CP,STORE,EXIT ;adjust the code pointer
; RECURSE ( -- )
; Make the current word available for compilation.
FDB RECUR,L1850
L1860 FCB IMEDD+7,"RECURSE"
RECUR jsr DOLST
FDB LAST,AT,NAMET,COMMA,EXIT
;; Structures
; DO ( -- a m )
; Start a DO-LOOP/+LOOP structure in a colon definition.
FDB DO,L1860
L1861 FCB IMEDD+2,"DO"
DO jsr DOLST
FDB COMPI,DODO,HERE
FDB ONE ; marker for DO
FDB EXIT
; ?DO ( -- a m )
; Start a ?DO-LOOP/+LOOP structure in a colon definition.
FDB QDO,L1861
L1862 FCB IMEDD+3,"?DO"
QDO jsr DOLST
FDB COMPI,DOQDO,HERE
FDB COMPI,0 ; branch destination placeholder
FDB TWO ; marker for ?DO
FDB EXIT
; (?DO) ( w w -- )
; Runtime part of DO in a DO-LOOP/+LOOP structure.
FDB DOQDO,L1862
L1862A FCB 5,"(?DO)"
DOQDO
puls d ;start
cmpd ,s ;start < end -> ok
blt DOQDO1
leas 2,s ;drop end
ldu ,u
pulu pc ;branch past loop
DOQDO1
puls x ;end
stx ,--y ;end to return stack
std ,--y ;start to return stack
leau 2,u ;skip jump forward
pulu pc
; -DO ( -- a m )
; Start a -DO-LOOP/+LOOP structure in a colon definition.
FDB MDO,L1862A
L1862B FCB IMEDD+3,"-DO"
MDO jsr DOLST
FDB COMPI,DOMDO,HERE
FDB COMPI,0 ; branch destination placeholder
FDB TWO ; marker for ?DO/-DO
FDB EXIT
; (-DO) ( w w -- )
; Runtime part of -DO in a -DO-LOOP/+LOOP structure.
FDB DOMDO,L1862B
L1862C FCB 5,"(-DO)"
DOMDO
puls d ;start
cmpd ,s ;start > end -> ok
bgt DOMDO1
leas 2,s ;drop end
ldu ,u
pulu pc ;branch past loop
DOMDO1
puls x ;end
stx ,--y ;end to return stack
std ,--y ;start to return stack
leau 2,u ;skip jump forward
pulu pc
; (DO) ( w w -- )
; Runtime part of DO in a DO-LOOP/+LOOP structure.
FDB DODO,L1862C
L1863 FCB 4,"(DO)"
DODO
puls d,x ;start first, end second
stx ,--y ;end to return stack
std ,--y ;start to return stack
pulu pc
; (LOOP) ( -- )
; Runtime part of LOOP
FDB DOLOOP,L1863
L1864 FCB 6,"(LOOP)"
DOLOOP
ldd #1
bra DOPLOF
; (+LOOP) ( -- )
; Runtime part of +LOOP
FDB DOPLOOP,L1864
L1865 FCB IMEDD+7,"(+LOOP)"
DOPLOOP
ldd ,s++ ; increment
bpl DOPLOF ; forward
addd ,y ; start/index
cmpd 2,y ; end
ble DOPLO1 ; index <= end -> leave
std ,y
ldu ,u ; branch to begin of loop
pulu pc
DOPLOF addd ,y ; start/index
cmpd 2,y ; end
bge DOPLO1 ; index >= end -> leave
std ,y ; save back
ldu ,u ; branch to begin of loop
pulu pc
DOPLO1
leau 2,u ; skip back destination
leay 4,y ; remove index and upper from r stack
pulu pc
; LOOP ( a m -- )
; Terminate a DO/?DO-LOOP loop structure.
FDB LOOP,L1865
L1866 FCB IMEDD+4,"LOOP"
LOOP jsr DOLST
FDB COMPI,DOLOOP
FDB TWO,EQUAL,QBRAN,LOOP1
FDB HERE,CELLP,OVER,STORE,CELLP ; branch forward destination
LOOP1 FDB COMMA,EXIT
; +LOOP ( a m -- )
; Terminate a DO/?DO-+LOOP loop structure.
FDB PLOOP,L1866
L1867 FCB IMEDD+5,"+LOOP"
PLOOP jsr DOLST
FDB COMPI,DOPLOOP
FDB TWO,EQUAL,QBRAN,PLOOP1
FDB HERE,CELLP,OVER,STORE,CELLP ; branch forward destination
PLOOP1 FDB COMMA,EXIT
; LEAVE ( -- )
; Leave DO/LOOP
FDB LEAVE,L1867
L1868 FCB 5,"LEAVE"
LEAVE
ldd ,y ;take index on return stack
std 2,y ;and change end to it
pulu pc
; FOR ( -- a )
; Start a FOR-NEXT loop structure in a colon definition.
FDB FOR,L1867
L1870 FCB IMEDD+3,"FOR"
FOR jsr DOLST
FDB COMPI,TOR,HERE,EXIT
; BEGIN ( -- a )
; Start an infinite or indefinite loop structure.
FDB BEGIN,L1870
L1880 FCB IMEDD+5,"BEGIN"
BEGIN jsr DOLST
FDB HERE,EXIT
; NEXT ( a -- )
; Terminate a FOR-NEXT loop structure.
FDB NEXT,L1880
L1890 FCB IMEDD+4,"NEXT"
NEXT jsr DOLST
FDB COMPI,DONXT,COMMA,EXIT
; UNTIL ( a -- )
; Terminate a BEGIN-UNTIL indefinite loop structure.
FDB UNTIL,L1890
L1900 FCB IMEDD+5,"UNTIL"
UNTIL jsr DOLST
FDB COMPI,QBRAN,COMMA,EXIT
; AGAIN ( a -- )
; Terminate a BEGIN-AGAIN infinite loop structure.
FDB AGAIN,L1900
L1910 FCB IMEDD+5,"AGAIN"
AGAIN jsr DOLST
FDB COMPI,BRAN,COMMA,EXIT
; IF ( -- A )
; Begin a conditional branch structure.
FDB IFF,L1910
L1920 FCB IMEDD+2,"IF"
IFF jsr DOLST
FDB COMPI,QBRAN,HERE
FDB ZERO,COMMA,EXIT
; AHEAD ( -- A )
; Compile a forward branch instruction.
FDB AHEAD,L1920
L1930 FCB IMEDD+5,"AHEAD"
AHEAD jsr DOLST
FDB COMPI,BRAN,HERE,ZERO,COMMA,EXIT
; REPEAT ( A a -- )
; Terminate a BEGIN-WHILE-REPEAT indefinite loop.
FDB REPEA,L1930
L1940 FCB IMEDD+6,"REPEAT"
REPEA jsr DOLST
FDB AGAIN,HERE,SWAP,STORE,EXIT
; THEN ( A -- )
; Terminate a conditional branch structure.
FDB THENN,L1940
L1950 FCB IMEDD+4,"THEN"
THENN jsr DOLST
FDB HERE,SWAP,STORE,EXIT
; AFT ( a -- a A )
; Jump to THEN in a FOR-AFT-THEN-NEXT loop the first time through.
FDB AFT,L1950
L1960 FCB IMEDD+3,"AFT"
AFT jsr DOLST
FDB DROP,AHEAD,BEGIN,SWAP,EXIT
; ELSE ( A -- A )
; Start the false clause in an IF-ELSE-THEN structure.
FDB ELSEE,L1960
L1970 FCB IMEDD+4,"ELSE"
ELSEE jsr DOLST
FDB AHEAD,SWAP,THENN,EXIT
; WHILE ( a -- A a )
; Conditional branch out of a BEGIN-WHILE-REPEAT loop.
FDB WHILE,L1970
L1980 FCB IMEDD+5,"WHILE"
WHILE jsr DOLST
FDB IFF,SWAP,EXIT
; ABORT" ( -- ; <string> )
; Conditional abort with an error message.
FDB ABRTQ,L1980
L1990 FCB IMEDD+6,"ABORT",'"'
ABRTQ jsr DOLST
FDB COMPI,ABORQ,STRCQ,EXIT
; $" ( -- ; <string> )
; Compile an inline string literal.
FDB STRQ,L1990
L2000 FCB IMEDD+2,'$','"'
STRQ jsr DOLST
FDB COMPI,STRQP,STRCQ,EXIT
; ." ( -- ; <string> )
; Compile an inline string literal to be typed out at run time.
FDB DOTQ,L2000
L2010 FCB IMEDD+2,'.','"'
DOTQ jsr DOLST
FDB COMPI,DOTQP,STRCQ,EXIT
;; Name compiler
; ?UNIQUE ( a -- a )
; Display a warning message if the word already exists.
FDB UNIQU,L2010
L2020 FCB 7,"?UNIQUE"
UNIQU jsr DOLST
FDB DUPP,NAMEQ ;?name exists
FDB QBRAN,UNIQ1
FDB DOTQP ;redefinitions are OK
FCB 7," reDef " ;but the user should be warned
FDB OVER,COUNT,TYPES ;just in case its not planned
UNIQ1 FDB DROP,EXIT
; $,n ( na -- )
; Build a new dictionary name using the string at na.
FDB SNAME,L2020
L2030 FCB 3,"$,n"
SNAME jsr DOLST
FDB DUPP,CAT ;?null input
FDB QBRAN,PNAM1
FDB UNIQU ;?redefinition
FDB DUPP,LAST,STORE ;save na for vocabulary link
FDB HERE,ALGND,SWAP ;align code address
FDB CELLM ;link address
FDB CRRNT,AT,AT,OVER,STORE
FDB CELLM,DUPP,NP,STORE ;adjust name pointer
FDB STORE,EXIT ;save code pointer
PNAM1 FDB STRQP
FCB 5," name" ;null input
FDB THROW
;; FORTH compiler
; $COMPILE ( a -- )
; Compile next word to code dictionary as a token or literal.
FDB SCOMP,L2030
L2040 FCB 8,"$COMPILE"
SCOMP jsr DOLST
FDB NAMEQ,QDUP ;?defined
FDB QBRAN,SCOM2
FDB AT,DOLIT,IMEDD<<8,ANDD ;?immediate
FDB QBRAN,SCOM1
FDB EXECU,EXIT ;its immediate, execute
SCOM1 FDB COMMA,EXIT ;its not immediate, compile
SCOM2 FDB TNUMB,ATEXE ;try to convert to number
FDB QBRAN,SCOM3
FDB LITER,EXIT ;compile number as integer
SCOM3 FDB THROW ;error
; OVERT ( -- )
; Link a new word into the current vocabulary.
FDB OVERT,L2040
L2050 FCB 5,"OVERT"
OVERT jsr DOLST
FDB LAST,AT,CRRNT,AT,STORE,EXIT
; ; ( -- )
; Terminate a colon definition.
FDB SEMIS,L2050
L2060 FCB IMEDD+COMPO+1,";"
SEMIS jsr DOLST
FDB COMPI,EXIT,LBRAC,OVERT,EXIT
; ] ( -- )
; Start compiling the words in the input stream.
FDB RBRAC,L2060
L2070 FCB 1,"]"
RBRAC jsr DOLST
FDB DOLIT,SCOMP,TEVAL,STORE,EXIT
; call, ( ca -- )
; Assemble a call instruction to ca.
FDB CALLC,L2070
L2080 FCB 5,"call,"
CALLC jsr DOLST
FDB DOCLIT
FCB CALLL
FDB HERE,CSTOR ;Direct Threaded Code
FDB ONE,ALLOT
FDB COMMA,EXIT ;DTC 6809 extended addr jsr
; : ( -- ; <string> )
; Start a new colon definition using next word as its name.
FDB COLON,L2080
L2090 FCB 1,":"
COLON jsr DOLST
FDB TOKEN,SNAME,DOLIT,DOLST
FDB CALLC,RBRAC,EXIT
; IMMEDIATE ( -- )
; Make the last compiled word an immediate word.
FDB IMMED,L2090
L2100 FCB 9,"IMMEDIATE"
IMMED jsr DOLST
FDB DOLIT,IMEDD<<8,LAST,AT,AT,ORR
FDB LAST,AT,STORE,EXIT
;; Defining words
; USER ( u -- ; <string> )
; Compile a new user variable.
FDB USER,L2100
L2110 FCB 4,"USER"
USER jsr DOLST
FDB TOKEN,SNAME,OVERT
;;;; FDB DOLIT,DOLST,CALLC
;;;; FDB DOLIT,DOUSE,COMMA
; fast implementation ....
FDB DOLIT,FDOUSE,CALLC
FDB COMMA,EXIT
; CREATE ( -- ; <string> )
; Compile a new array entry without allocating code space.
FDB CREAT,L2110
L2120 FCB 6,"CREATE"
CREAT jsr DOLST
FDB TOKEN,SNAME,OVERT
;;;; FDB DOLIT,DOLST,CALLC
;;;; FDB DOLIT,DOVAR,COMMA,EXIT
; fast implementation ....
FDB DOLIT,FDOVAR,CALLC,EXIT
; VARIABLE ( -- ; <string> )
; Compile a new variable initialized to 0.
FDB VARIA,L2120
L2130 FCB 8,"VARIABLE"
VARIA jsr DOLST
FDB CREAT,ZERO,COMMA,EXIT
; CONSTANT ( w -- ; <string> )
; Compile a new constant with value w.
FDB CONST,L2130
L2135 FCB 8,"CONSTANT"
CONST jsr DOLST
FDB TOKEN,SNAME,OVERT
FDB DOLIT,DOCONST,CALLC
FDB COMMA,EXIT
;; Tools
; _TYPE ( b u -- )
; Display a string. Filter non-printing characters.
FDB UTYPE,L2135
L2140 FCB 5,"_TYPE"
UTYPE jsr DOLST
FDB TOR ;start count down loop
FDB BRAN,UTYP2 ;skip first pass
UTYP1 FDB DUPP,CAT,TCHAR,EMIT ;display only printable
FDB PLUS1 ;increment address
UTYP2 FDB DONXT,UTYP1 ;loop till done
FDB DROP,EXIT
; dm+ ( a u -- a )
; Dump u bytes from , leaving a+u on the stack.
FDB DUMPP,L2140
L2150 FCB 3,"dm+"
DUMPP jsr DOLST
FDB OVER,DOLIT,4,UDOTR ;display address
FDB SPACE,TOR ;start count down loop
FDB BRAN,PDUM2 ;skip first pass
PDUM1 FDB DUPP,CAT,DOLIT,3,UDOTR ;display numeric data
FDB PLUS1 ;increment address
PDUM2 FDB DONXT,PDUM1 ;loop till done
FDB EXIT
; DUMP ( a u -- )
; Dump u bytes from a, in a formatted manner.
FDB DUMP,L2150
L2160 FCB 4,"DUMP"
DUMP jsr DOLST
FDB BASE,AT,TOR,HEX ;save radix, set hex
FDB DOCLIT
FCB 16
FDB SLASH ;change count to lines
FDB TOR ;start count down loop
DUMP1 FDB CR,DOCLIT
FCB 16
FDB DDUP,DUMPP ;display numeric
FDB ROT,ROT
FDB TWO,SPACS,UTYPE ;display printable characters
FDB NUFQ,INVER ;user control
FDB QBRAN,DUMP2
FDB DONXT,DUMP1 ;loop till done
FDB BRAN,DUMP3
DUMP2 FDB RFROM,DROP ;cleanup loop stack, early exit
DUMP3 FDB DROP,RFROM,BASE,STORE ;restore radix
FDB EXIT
; .S ( ... -- ... )
; Display the contents of the data stack.
FDB DOTS,L2160
L2170 FCB 2,".S"
DOTS jsr DOLST
FDB CR,DEPTH ;stack depth
FDB TOR ;start count down loop
FDB BRAN,DOTS2 ;skip first pass
DOTS1 FDB RAT,PICK,DOT ;index stack, display contents
DOTS2 FDB DONXT,DOTS1 ;loop till done
FDB DOTQP
FCB 4," <sp"
FDB EXIT
; !CSP ( -- )
; Save stack pointer in CSP for error checking.
FDB STCSP,L2170
L2180 FCB 4,"!CSP"
STCSP jsr DOLST
FDB SPAT,CSP,STORE,EXIT ;save pointer
; ?CSP ( -- )
; Abort if stack pointer differs from that saved in CSP.
FDB QCSP,L2180
L2190 FCB 4,"?CSP"
QCSP jsr DOLST
FDB SPAT,CSP,AT,XORR ;compare pointers
FDB ABORQ ;abort if different
FCB 6,"stacks"
FDB EXIT
; >NAME ( ca -- na | F )
; Convert code address to a name address.
FDB TNAME,L2190
L2200 FCB 5,">NAME"
TNAME jsr DOLST
FDB CRRNT ;vocabulary link
TNAM1 FDB CELLP,AT,QDUP ;check all vocabularies
FDB QBRAN,TNAM4
FDB DDUP
TNAM2 FDB AT,DUPP ;?last word in a vocabulary
FDB QBRAN,TNAM3
FDB DDUP,NAMET,XORR ;compare
FDB QBRAN,TNAM3
FDB CELLM ;continue with next word
FDB BRAN,TNAM2
TNAM3 FDB SWAP,DROP,QDUP
FDB QBRAN,TNAM1
FDB SWAP,DROP,SWAP,DROP,EXIT
TNAM4 FDB DROP,DOLIT,0,EXIT
; .ID ( na -- )
; Display the name at address.
FDB DOTID,L2200
L2210 FCB 3,".ID"
DOTID jsr DOLST
FDB QDUP ;if zero no name
FDB QBRAN,DOTI1
FDB COUNT,DOCLIT
FCB $1F
FDB ANDD ;mask lexicon bits
FDB UTYPE,EXIT ;display name string
DOTI1 FDB DOTQP
FCB 9," {noName}"
FDB EXIT
; SEE ( -- ; <string> )
; A simple decompiler.
FDB SEE,L2210
L2220 FCB 3,"SEE"
SEE jsr DOLST
FDB TICK ;starting address
FDB PLUS1 ;skip JSR
;primitive check ...
FDB BASE,AT,TOR,HEX ;switch to hex base
FDB DUPP,AT,DOLIT,DOLST,XORR
;high level word?
FDB QBRAN,SEE1 ;yes!
FDB CR,DOTQP ;primitive word only
FCB 9, " PRIMITVE"
FDB BRAN,SEE5 ;exit
SEE1 FDB CR,CELLP,DUPP,UDOT,SPACE
FDB DUPP,AT,DUPP ;?does it contain a zero
FDB QBRAN,SEE2
FDB TNAME ;?is it a name
SEE2 FDB QDUP ;name address or zero
FDB QBRAN,SEE3
FDB SPACE,DOTID ;display name
FDB DUPP,AT
FDB DUPP,DOLIT,DOCLIT,EQUAL ; doCLIT?
FDB QBRAN,SEE21
FDB OVER,CELLP,CAT,SPACE,UDOT ; CLIT: get only single byte
FDB SWAP,PLUS1,SWAP
FDB BRAN,SEE28
SEE21 FDB DUPP,DOLIT,DOLIT,EQUAL ; doCLIT?
FDB OVER,DOLIT,QBRAN,EQUAL,ORR ; ?BRAN ?
FDB OVER,DOLIT,BRAN,EQUAL,ORR; BRANCH ?
FDB OVER,DOLIT,DONXT,EQUAL,ORR; next ? (from FOR/NEXT)
FDB OVER,DOLIT,DOLOOP,EQUAL,ORR; (LOOP) ?
FDB OVER,DOLIT,DOPLOOP,EQUAL,ORR; (+LOOP) ?
FDB OVER,DOLIT,DODO,EQUAL,ORR; (DO) ?
FDB OVER,DOLIT,DOQDO,EQUAL,ORR; (?DO) ?
FDB OVER,DOLIT,DOMDO,EQUAL,ORR; (-DO) ?
FDB QBRAN,SEE27
FDB SWAP,CELLP,DUPP,AT,SPACE,UDOT,SWAP ; LIT: get word
FDB BRAN,SEE28
SEE27
FDB DUPP,DOLIT,DOTQP,EQUAL ; ." ..."
FDB OVER,DOLIT,ABORQ,EQUAL,ORR ; ABORT" ..."
FDB OVER,DOLIT,STRQP,EQUAL,ORR ; $" ..."
FDB QBRAN,SEE29 ; last case aalway to SEE29!!
FDB SWAP,CELLP ; print compiled string
FDB DUPP,COUNT,TYPES,DOCLIT
FCB 34
FDB EMIT
FDB COUNT,PLUS,CELLM,SWAP ; adjust continuation address
SEE28 FDB DROP ; LEAVL, without EXIT check
FDB BRAN,SEE4
SEE29 FDB DROP ; ELSE
FDB BRAN,SEE31 ; cleanup, check for EXIT
SEE3 FDB DUPP,AT,UDOT ;display number
FDB BRAN,SEE4
SEE31 FDB DUPP,AT,DOLIT,EXIT,XORR ; stop on EXIT word
; but not if SEE decompiles itself!
FDB QBRAN,SEE5
SEE4 FDB NUFQ ;user control
FDB QBRAN,SEE1
SEE5 FDB RFROM,BASE,STORE,DROP,EXIT
; WORDS ( -- )
; Display the names in the context vocabulary.
FDB WORDS,L2220
L2230 FCB 5,"WORDS"
WORDS jsr DOLST
FDB CR,CNTXT,AT ;only in context
WORS1 FDB AT,QDUP ;?at end of list
FDB QBRAN,WORS2
FDB DUPP,SPACE,DOTID ;display a name
FDB CELLM,NUFQ ;user control
FDB QBRAN,WORS1
FDB DROP
WORS2 FDB EXIT
;; Hardware reset
; VER ( -- n )
; Return the version number of this implementation.
FDB VERSN,L2230
L2240 FCB 3,"VER"
VERSN jsr DOLST
FDB DOLIT,VER*256+EXT,EXIT
; hi ( -- )
; Display the sign-on message of eForth.
FDB HI,L2240
L2250 FCB 2,"hi"
HI jsr DOLST
FDB STOIO,CR,DOTQP ;initialize I/O
FCB 11,"eForth v" ;model
FCB VER+'0','.',EXT+'0' ;version
FDB CR,EXIT
; 'BOOT ( -- a )
; The application startup vector.
FDB TBOOT,L2250
L2260 FCB 5,"'BOOT"
TBOOT
;;;; jsr DOLST
;;;; FDB DOVAR
jsr FDOVAR
FDB HI ;application to boot
; COLD ( -- )
; The hilevel cold start sequence.
FDB COLD,L2260
L2270 FCB 4,"COLD"
COLD jsr DOLST
COLD1 FDB DOLIT,UZERO,DOLIT,UPP
FDB DOLIT,ULAST-UZERO,CMOVE ;initialize user area
FDB PRESE ;initialize data stack and TIB
FDB TBOOT,ATEXE ;application boot
FDB FORTH,CNTXT,AT,DUPP ;initialize search order
FDB CRRNT,DSTOR,OVERT
; TEST
; FDB DOLIT,10,DOLIT,1
; FDB DODO
;
FDB QUIT ;start interpretation
FDB BRAN,COLD1 ;just in case
;===============================================================
LASTN EQU L2270 ;last name address in name dictionary
NTOP EQU NAMEE ;next available memory in name dictionary
CTOP EQU * ;next available memory in code dictionary
END ORIG
;===============================================================
;TITLE 6809 eForth
;.engine kilo
; $Id: ef09.asm,v 1.1 1997/11/24 02:56:01 root Exp $
;
;===============================================================
;
; eForth 1.0 by Bill Muench and C. H. Ting, 1990
; Much of the code is derived from the following sources:
; 8086 figForth by Thomas Newman, 1981 and Joe smith, 1983
; aFORTH by John Rible
; bFORTH by Bill Muench
;
; The goal of this implementation is to provide a simple eForth Model
; which can be ported easily to many 8, 16, 24 and 32 bit CPU's.
; The following attributes make it suitable for CPU's of the '90:
;
; small machine dependent kernel and portable high level code
; source code in the MASM format
; direct threaded code
; separated code and name dictionaries
; simple vectored terminal and file interface to host computer
; aligned with the proposed ANS Forth Standard
; easy upgrade path to optimize for specific CPU
;
; You are invited to implement this Model on your favorite CPU and
; contribute it to the eForth Library for public use. You may use
; a portable implementation to advertise more sophisticated and
; optimized version for commercial purposes. However, you are
; expected to implement the Model faithfully. The eForth Working
; Group reserves the right to reject implementation which deviates
; significantly from this Model.
;
; As the ANS Forth Standard is still evolving, this Model will
; change accordingly. Implementations must state clearly the
; version number of the Model being tracked.
;
; Representing the eForth Working Group in the Silicon Valley FIG Chapter.
; Send contributions to:
;
; Dr. C. H. Ting
; 156 14th Avenue
; San Mateo, CA 94402
; (415) 571-7639
;
;===============================================================
; $Log: ef09.asm,v $
; Revision 1.1 1997/11/24 02:56:01 root
; Initial revision
;
;===============================================================
;; Version control
VER EQU 1 ;major release version
EXT EQU 0 ;minor extension
;; Constants
TRUEE EQU -1 ;true flag
COMPO EQU $40 ;lexicon compile only bit
IMEDD EQU $80 ;lexicon immediate bit
MASKK EQU $1F7F ;lexicon bit mask
CFAOFF EQU 3 ;offset from word entry to code field area
; (length of JSR)
CELLL EQU 2 ;size of a cell
BASEE EQU 10 ;default radix
VOCSS EQU 8 ;depth of vocabulary stack
BKSPP EQU 8 ;back space
BKSPP2 EQU 127 ;back space
LF EQU 13 ;line feed
CRR EQU 10 ;carriage return
ERR EQU 27 ;error escape
TIC EQU 39 ;tick
CALLL EQU $12BD ;NOP CALL opcodes
;; Memory allocation
EM EQU $7000 ;top of memory
US EQU 64*CELLL ;user area size in cells
RTS: EQU 128*CELLL ;return stack/TIB size
UPP EQU EM-US ;start of user area (UP0)
RPP EQU UPP-8*CELLL ;start of return stack (RP0)
TIBB EQU RPP-RTS ;terminal input buffer (TIB)
SPP EQU TIBB-8*CELLL ;start of data stack (SP0)
COLDD EQU $e000 ;cold start vector
CODEE EQU COLDD+US ;code dictionary
NAMEE EQU EM-$0400 ;name dictionary
;; Initialize assembly variables
;; Main entry points and COLD start data
.ORG 0xfff0
;reserved
DW reset
;SWI3
DW reset
;SWI2
DW reset
;FIRQ
DW reset
;IRQ
DW reset
;SWI
DW reset
;NMI
DW reset
;RES
DW reset
ORG COLDD ;beginning of cold boot area
; SETDP 0
.ent $
.engine kilo
reset:
ORIG lds #SPP ;Init stack pointer.
ldy #RPP ;Init return stack pointer
ldu #COLD1 ;Init Instr pointer.
pulu pc ;next.
; COLD start moves the following to USER variables.
; MUST BE IN SAME ORDER AS USER VARIABLES.
UZERO RMB 8 ;reserved space in user area
FDB SPP ;SP0
FDB RPP ;RP0
FDB QRX ;'?KEY
FDB TXSTO ;'EMIT
FDB ACCEP ;'EXPECT
FDB KTAP ;'TAP
FDB TXSTO ;'ECHO
FDB DOTOK ;'PROMPT
FDB BASEE ;BASE
FDB 0 ;tmp
FDB 0 ;SPAN
FDB 0 ;>IN
FDB 0 ;#TIB
FDB TIBB ;TIB
FDB 0 ;CSP
FDB INTER ;'EVAL
FDB NUMBQ ;'NUMBER
FDB 0 ;HLD
FDB 0 ;HANDLER
FDB 0 ;CONTEXT pointer
RMB VOCSS*2 ;vocabulary stack
FDB 0 ;CURRENT pointer
FDB 0 ;vocabulary link pointer
FDB CTOP ;CP
FDB NTOP ;NP
FDB LASTN ;LAST
ULAST:
ORG CODEE ;beginning of the code dictionary
;; Device dependent I/O
ACIA EQU $83fe
ACIAC EQU ACIA
ACIAS EQU ACIA
ACIAD EQU ACIA+1
ACIA_TDRE EQU 02h
ACIA_RDRF EQU 01h
SEROUT:
PSHS a,b
SEROUTL:
LDB ACIAS
ANDB #ACIA_TDRE
BEQ seroutl
STA ACIAD
PULS a,b
RTS
SERIN:
LDA ACIAS
ANDA #ACIA_RDRF
BEQ serin_ret
LDA ACIAD
serin_ret: RTS
; BYE ( -- )
; Exit eForth.
FDB BYE,0
L100 FCB 3,"BYE"
BYE JMP $E000 ; monitor
; ?RX ( -- c T | F )
; Return input character and true, or a false if no input.
FDB QRX,L100
L110 FCB 3,"?RX"
QRX ldx #0
jsr serin
bne qrx1 ;!!!!!!!!!!!!!!!!!!! BEQ
stx ,--s
pulu pc
qrx1: tfr a,b
clra
std ,--s
leax -1,x
stx ,--s
pulu pc
; TX! ( c -- )
; Send character c to the output device.
FDB TXSTO,L110
L120 FCB 3,"TX!"
TXSTO ldd ,s++
cmpb #$ff
bne tx1
ldb #32
tx1:
tfr b,a
jsr serout
pulu pc
; !IO ( -- )
; Initialize the serial I/O devices.
FDB STOIO,L120
L130 FCB 3,"!IO"
STOIO pulu pc
;; The kernel
; doLIT ( -- w )
; Push an inline literal.
FDB DOLIT,L130
L140 FCB COMPO+5,"doLIT"
DOLIT:
;;;; ldd ,u++
pulu d
; 7 cycles
pshs d
;;;; 8 cycles
;;;; std ,--s
pulu pc
; doCLIT ( -- w )
; Push an inline 8-bit literal.
FDB DOCLIT,L140
L141 FCB COMPO+6,"doCLIT"
DOCLIT:
pulu b
sex ; sign extended
pshs d
pulu pc
; doLIST ( a -- )
; Process colon list.
FDB DOLST,L141
L150 FCB COMPO+6,"doLIST"
DOLST stu ,--y ; IP on return stack
puls u ; JSR left new IP on parameter stack
;;;; ldu ,s++
pulu pc ; FORTH NEXT IP
; next ( -- )
; Run time code for the single index loop.
; : next ( -- ) \ hilevel model
; r> r> dup if 1 - >r @ >r exit then drop cell+ >r ;
FDB DONXT,L150
L160 FCB COMPO+4,"next"
DONXT ldd ,y ; counter on return stack
subd #1 ; decrement
bcs next1 ; < -> exit loop
std ,y ; decremented value back on stack
ldu ,u ; branch to begin of loop
pulu pc
next1 leay 2,y ; remove counter from stack
leau 2,u ; skip branch destination
pulu pc
; ?branch ( f -- )
; Branch if flag is zero.
FDB QBRAN,L160
L170 FCB COMPO+7,"?branch"
QBRAN: ;$CODE COMPO+7,'?branch',QBRAN
ldd ,s++
beq bran1
leau 2,u ; skip new IP, no branch
pulu pc
bran1 ldu ,u ; go to new IP
pulu pc
; branch ( -- )
; Branch to an inline address.
FDB BRAN,L170
L180 FCB COMPO+6,"branch"
BRAN ldu ,u ; destination immediate after BRANCH
pulu pc
; EXECUTE ( ca -- )
; Execute the word at ca.
FDB EXECU,L180
L190 FCB 7,"EXECUTE"
EXECU rts ; code pointer on parameter stack
; EXIT ( -- )
; SEMIS
; Terminate a colon definition.
FDB EXIT,L190
L200 FCB 4,"EXIT"
EXIT ldu ,y++ ; get calling IP from return stack
pulu pc
; ! ( w a -- )
; Pop the data stack to memory.
FDB STORE,L200
L210 FCB 1,"!"
STORE:
;;;; ldx ,s++
;;;; ldd ,s++
;;;; faster ...
puls x
puls d
; we cannot use puls x,d because the order fetched would be wrong :(
std ,x
pulu pc
; @ ( a -- w )
; Push memory location to the data stack.
FDB AT,L210
L220 FCB 1,"@"
AT ldd [,s]
std ,s
pulu pc
; C! ( c b -- )
; Pop the data stack to byte memory.
FDB CSTOR,L220
L230 FCB 2,"C!"
CSTOR:
;;;; ldx ,s++
;;;; ldd ,s++
;;;; faster ...
puls x
puls d
; we cannot use puls x,d because the order fetched would be wrong :(
stb ,x
pulu pc
; C@ ( b -- c )
; Push byte memory location to the data stack.
FDB CAT,L230
L240 FCB 2,"C@"
CAT ldb [,s]
clra
std ,s
pulu pc
; RP@ ( -- a )
; Push the current RP to the data stack.
FDB RPAT,L240
L250 FCB 3,"RP@"
RPAT pshs y
pulu pc
; RP! ( a -- )
; Set the return stack pointer.
FDB RPSTO,L250
L260 FCB 3,"RP!"
RPSTO puls y
pulu pc
; R> ( -- w )
; Pop the return stack to the data stack.
FDB RFROM,L260
L270 FCB 2,"R>"
RFROM ldd ,y++
;;;; std ,--s
pshs d
pulu pc
; I ( -- w )
; Copy top of return stack (current index from DO/LOOP) to the data stack.
FDB RAT,L270
L279 FCB 1,"I"
; R@ ( -- w )
; Copy top of return stack to the data stack.
FDB RAT,L279
L280 FCB 2,"R@"
RAT:
I:
ldd ,y
;;;; std ,--s
pshs d
pulu pc
; >R ( w -- )
; Push the data stack to the return stack.
FDB TOR,L280
L290 FCB 2,">R"
TOR:
;;;; ldd ,s++
puls d
std ,--y
pulu pc
; SP@ ( -- a )
; Push the current data stack pointer.
FDB SPAT,L290
L300 FCB 3,"SP@"
SPAT:
tfr s,d
std ,--s
;;;; alternatively
;;;; sts ,--s ; does this work?
pulu pc
; SP! ( a -- )
; Set the data stack pointer.
FDB SPSTO,L300
L310 FCB 3,"SP!"
SPSTO lds ,s
pulu pc
; DROP ( w -- )
; Discard top stack item.
FDB DROP,L310
L320 FCB 4,"DROP"
DROP leas 2,s
pulu pc
; DUP ( w -- w w )
; Duplicate the top stack item.
FDB DUPP,L320
L330 FCB 3,"DUP"
DUPP ldd ,s
;;;; std ,--s
pshs d
pulu pc
; SWAP ( w1 w2 -- w2 w1 )
; Exchange top two stack items.
FDB SWAP,L330
L340 FCB 4,"SWAP"
SWAP:
;;;;OLD 1: slow
;;;; ldx ,s++
;;;; ldd ,s++
;;;;OLD 2: faster
;;;; puls x
;;;; puls d
;;;; pshs d,x
;more efficient, without unnecessary stack pointer manipulations
ldd ,s
ldx 2,s
std 2,s
stx ,s
pulu pc
; OVER ( w1 w2 -- w1 w2 w1 )
; Copy second stack item to top.
FDB OVER,L340
L350 FCB 4,"OVER"
OVER ldd 2,s
;;;; std ,--s
pshs d
pulu pc
; 0< ( n -- t )
; Return true if n is negative.
FDB ZLESS,L350
L360 FCB 2,"0<"
ZLESS ldb ,s ; input high byte, as D low
sex ; sign extend to b to a/b
tfr a,b ; high byte: 0 or FF copy to D low
std ,s ; D: 0000 or FFFF (= -1)
pulu pc
; 0= ( n -- t )
; Return true if n is zero
FDB ZEQUAL,L360
L365 FCB 2,"0="
ZEQUAL:
ldx #TRUEE ; true
ldd ,s ; TOS
beq ZEQUAL1 ; -> true
ldx #0 ; false
ZEQUAL1 stx ,s ; D: 0000 or FFFF (= -1)
pulu pc
; AND ( w w -- w )
; Bitwise AND.
FDB ANDD,L365
L370 FCB 3,"AND"
ANDD ldd ,s++
anda ,s
andb 1,s
std ,s
pulu pc
; OR ( w w -- w )
; Bitwise inclusive OR.
FDB ORR,L370
L380 FCB 2,"OR"
ORR ldd ,s++
ora ,s
orb 1,s
std ,s
pulu pc
; XOR ( w w -- w )
; Bitwise exclusive OR.
FDB XORR,L380
L390 FCB 3,"XOR"
XORR ldd ,s++
eora ,s
eorb 1,s
std ,s
pulu pc
; D+ ( ud ud -- udsum )
; Add two unsigned double numbers and return a double sum.
FDB DPLUS,L390
L391 FCB 2,"D+"
DPLUS ldd 2,s ; add low words
addd 6,s
std 6,s
ldd ,s ; add hig words
adcb 5,s
adca 4,s
std 4,s
leas 4,s ; drop one double
pulu pc
; D- ( ud ud -- uddiff )
; Subtract two unsigned double numbers and return a double sum.
FDB DSUB,L391
L392 FCB 2,"D-"
DSUB jsr DOLST
FDB DNEGA,DPLUS,EXIT
; UM+ ( u u -- udsum )
; Add two unsigned single numbers and return a double sum.
FDB UPLUS,L392
L400 FCB 3,"UM+"
UPLUS ldd ,s
addd 2,s
std 2,s
ldd #0
adcb #0
std ,s
pulu pc
;; Constants
; doCONST ( -- w )
; Run time routine for CONSTANT
FDB DOCONST,L400
L401 FCB COMPO+7,"doCONST"
DOCONST:
FDOCONST:
ldd [,s] ; contents of W (on TOS because of JSR)
std ,s ; to TOS (replacing W)
pulu pc
; 0 ( -- 0 )
; Constant 0
FDB ZERO,L401
L402 FCB 1,"0"
ZERO jsr FDOCONST
FDB 0
; 1 ( -- 1 )
; Constant 1
FDB ONE,L402
L403 FCB 1,"1"
ONE jsr FDOCONST
FDB 1
; 2 ( -- 2 )
; Constant 2
FDB TWO,L403
L404 FCB 1,"2"
TWO jsr FDOCONST
FDB 2
; -1 ( -- -1 )
; Constant -1
FDB MONE,L404
L405 FCB 2,"-1"
MONE jsr FDOCONST
FDB -1
;; System and user variables
; doVAR ( -- a )
; Run time routine for VARIABLE and CREATE.
FDB DOVAR,L405
L410 FCB COMPO+5,"doVAR"
DOVAR:
jsr DOLST
FDB RFROM,EXIT
;; fast native DOVAR implementation
FDOVAR pulu pc
; UP ( -- a )
; Pointer to the user area.
FDB UP,L410
L420 FCB 2,"UP"
UP:
;; jsr DOLST
;; FDB DOVAR
;; fast (native) DOVAR
jsr FDOVAR
FDB UPP
; doUSER ( -- a )
; Run time routine for user variables.
FDB DOUSE,L420
L430 FCB COMPO+5,"doUSER"
DOUSE:
jsr DOLST
FDB RFROM,AT,UP,AT,PLUS,EXIT
;; fast (native) DOUSE implementation (*NOT COMPLETE*)
FDOUSE:
ldd [,s] ; pointer to value (from JSR)
addd UP+CFAOFF ; dirty access to start of USER area:
; var. UP value direct access (not
; as a high level word)
std ,s ; resulting address returned on p-stack
pulu pc
; SP0 ( -- a )
; Pointer to bottom of the data stack.
FDB SZERO,L430
L440 FCB 3,"SP0"
SZERO:
jsr FDOUSE
FDB 8
;;;; jsr DOLST
;;;; FDB DOUSE,8
; RP0 ( -- a )
; Pointer to bottom of the return stack.
FDB RZERO,L440
L450 FCB 3,"RP0"
RZERO:
jsr FDOUSE
FDB 10
;;;; jsr DOLST
;;;; FDB DOUSE,10
; '?KEY ( -- a )
; Execution vector of ?KEY.
FDB TQKEY,L450
L460 FCB 5,"'?KEY"
TQKEY:
jsr FDOUSE
FDB 12
;;;; jsr DOLST
;;;; FDB DOUSE,12
; 'EMIT ( -- a )
; Execution vector of EMIT.
FDB TEMIT,L460
L470 FCB 5,"'EMIT"
TEMIT:
jsr FDOUSE
FDB 14
;; jsr DOLST
;; FDB DOUSE,14
; 'EXPECT ( -- a )
; Execution vector of EXPECT.
FDB TEXPE,L470
L480 FCB 7,"'EXPECT"
TEXPE:
jsr FDOUSE
FDB 16
;;;; jsr DOLST
;;;; FDB DOUSE,16
; 'TAP ( -- a )
; Execution vector of TAP.
FDB TTAP,L480
L490 FCB 4,"'TAP"
TTAP:
jsr FDOUSE
FDB 18
;;;; jsr DOLST
;;;; FDB DOUSE,18
; 'ECHO ( -- a )
; Execution vector of ECHO.
FDB TECHO,L490
L500 FCB 5,"'ECHO"
TECHO:
jsr FDOUSE
FDB 20
;;;; jsr DOLST
;;;; FDB DOUSE,20
; 'PROMPT ( -- a )
; Execution vector of PROMPT.
FDB TPROM,L500
L510 FCB 7,"'PROMPT"
TPROM:
jsr FDOUSE
FDB 22
;;;; jsr DOLST
;;;; FDB DOUSE,22
; BASE ( -- a )
; Storage of the radix base for numeric I/O.
FDB BASE,L510
L520 FCB 4,"BASE"
BASE:
jsr FDOUSE
FDB 24
;;;; jsr DOLST
;;;; FDB DOUSE,24
; tmp ( -- a )
; A temporary storage location used in parse and find.
FDB TEMP,L520
L530 FCB COMPO+3,"tmp"
TEMP:
jsr FDOUSE
FDB 26
;;;; jsr DOLST
;;;; FDB DOUSE,26
; SPAN ( -- a )
; Hold character count received by EXPECT.
FDB SPAN,L530
L540 FCB 4,"SPAN"
SPAN:
jsr FDOUSE
FDB 28
;;;; jsr DOLST
;;;; FDB DOUSE,28
; >IN ( -- a )
; Hold the character pointer while parsing input stream.
FDB INN,L540
L550 FCB 3,">IN"
INN:
jsr FDOUSE
FDB 30
;;;; jsr DOLST
;;;; FDB DOUSE,30
; #TIB ( -- a )
; Hold the current count in and address of the terminal input buffer.
FDB NTIB,L550
L560 FCB 4,"#TIB"
NTIB:
jsr FDOUSE
FDB 32
;;;; jsr DOLST
;;;; FDB DOUSE,32 ;It contains TWO cells!!!!
; CSP ( -- a )
; Hold the stack pointer for error checking.
FDB CSP,L560
L570 FCB 3,"CSP"
CSP:
jsr FDOUSE
FDB 36
;;;; jsr DOLST
;;;; FDB DOUSE 36
; 'EVAL ( -- a )
; Execution vector of EVAL.
FDB TEVAL,L570
L580 FCB 5,"'EVAL"
TEVAL:
jsr FDOUSE
FDB 38
;;;; jsr DOLST
;;;; FDB DOUSE,38
; 'NUMBER ( -- a )
; Execution vector of NUMBER?.
FDB TNUMB,L580
L590 FCB 7,"'NUMBER"
TNUMB:
jsr FDOUSE
FDB 40
;;;; jsr DOLST
;;;; FDB DOUSE,40
; HLD ( -- a )
; Hold a pointer in building a numeric output string.
FDB HLD,L590
L600 FCB 3,"HLD"
HLD:
jsr FDOUSE
FDB 42
;;;; jsr DOLST
;;;; FDB DOUSE,42
; HANDLER ( -- a )
; Hold the return stack pointer for error handling.
FDB HANDL,L600
L610 FCB 7,"HANDLER"
HANDL:
jsr FDOUSE
FDB 44
;;;; jsr DOLST
;;;; FDB DOUSE,44
; CONTEXT ( -- a )
; A area to specify vocabulary search order.
FDB CNTXT,L610
L620 FCB 7,"CONTEXT"
CNTXT:
jsr FDOUSE
FDB 46
;;;; jsr DOLST
;;;; FDB DOUSE,46 ;plus space for voc stack.
; CURRENT ( -- a )
; Point to the vocabulary to be extended.
FDB CRRNT,L620
L630 FCB 7,"CURRENT"
CRRNT:
jsr FDOUSE
FDB 48+VOCSS*2 ;Extra cell
;;;; jsr DOLST
;;;; FDB DOUSE,48+VOCSS*2 ;Extra cell
; CP ( -- a )
; Point to the top of the code dictionary.
FDB CP,L630
L640 FCB 2,"CP"
CP:
jsr FDOUSE
FDB 52+VOCSS*2
;;;; jsr DOLST
;;;; FDB DOUSE,52+VOCSS*2
; NP ( -- a )
; Point to the bottom of the name dictionary.
FDB NP,L640
L650 FCB 2,"NP"
NP:
jsr FDOUSE
FDB 54+VOCSS*2
;;;; jsr DOLST
;;;; FDB DOUSE,54+VOCSS*2
; LAST ( -- a )
; Point to the last name in the name dictionary.
FDB LAST,L650
L660 FCB 4,"LAST"
LAST:
jsr FDOUSE
FDB 56+VOCSS*2
;;;; jsr DOLST
;;;; FDB DOUSE,56+VOCSS*2
;; Common functions
; doVOC ( -- )
; Run time action of VOCABULARY's.
FDB DOVOC,L660
L670 FCB COMPO+5,"doVOC"
DOVOC:
jsr DOLST
FDB RFROM,CNTXT,STORE,EXIT
; FORTH ( -- )
; Make FORTH the context vocabulary.
FDB FORTH,L670
L680 FCB 5,"FORTH"
FORTH:
jsr DOLST
FDB DOVOC
FDB 0 ;vocabulary head pointer
FDB 0 ;vocabulary link pointer
; ?DUP ( w -- w w | 0 )
; Dup tos if its is not zero.
FDB QDUP,L680
L690 FCB 4,"?DUP"
QDUP:
jsr DOLST
FDB DUPP
FDB QBRAN,QDUP1
FDB DUPP
QDUP1 FDB EXIT
; ROT ( w1 w2 w3 -- w2 w3 w1 )
; Rot 3rd item to top.
FDB ROT,L690
L700 FCB 3,"ROT"
ROT:
jsr DOLST
FDB TOR,SWAP,RFROM,SWAP,EXIT
; 2DROP ( w w -- )
; Discard two items on stack.
FDB DDROP,L700
L710 FCB 5,"2DROP"
DDROP:
jsr DOLST
FDB DROP,DROP,EXIT
; 2DUP ( w1 w2 -- w1 w2 w1 w2 )
; Duplicate top two items.
FDB DDUP,L710
L720 FCB 4,"2DUP"
DDUP:
jsr DOLST
FDB OVER,OVER,EXIT
; LSHIFT ( w n -- w )
; Shift word left n times.
FDB LSHIFT,L720
L721 FCB 6,"LSHIFT"
LSHIFT ldx ,s++ ;shift count
beq LSHIFT2
ldd ,s ;value to shift
LSHIFT1 aslb ;low
rola ;high
leax -1,x ;count down
bne LSHIFT1
std ,s
LSHIFT2:
pulu pc
; RSHIFT ( w n -- w )
; Shift word right n times.
FDB RSHIFT,L721
L721A FCB 6,"RSHIFT"
RSHIFT ldx ,s++ ;shift count
beq RSHIFT2
ldd ,s ;value to shift
RSHIFT1 lsra ;high
rorb ;low
leax -1,x ;count down
bne RSHIFT1
std ,s
RSHIFT2:
pulu pc
; >< ( w -- w )
; swap high and low byte
FDB SWAPHL,L721A
L722 FCB 2,"><"
SWAPHL ldb ,s ;high -> D low
lda 1,s ;low -> D high
std ,s
pulu pc
; 256/ ( w -- w )
; multiply with 256 (shift left 8 times)
FDB SLASH256,L722
L723 FCB 4,"256/"
SLASH256 ldb ,s ;high -> D low
clra ;D high = 0
std ,s
pulu pc
; 256* ( w -- w )
; multiply with 256 (shift left 8 times)
FDB STAR256,L723
L724 FCB 4,"256*"
STAR256 lda 1,s ;low -> D high
clrb ;D low = 0
std ,s
pulu pc
; 1+ ( w -- w )
; Shortcut, quick add 1
FDB PLUS1,L724
L725 FCB 2,"1+"
PLUS1 ldd ,s
addd #1
std ,s
pulu pc
; -+ ( w -- w )
; Shortcut, quick subtract 1
FDB MINUS1,L725
L726 FCB 2,"1-"
MINUS1 ldd ,s
subd #1
std ,s
pulu pc
; 2* ( w -- w )
; multiply by 2 using shift operation
FDB TWOSTAR,L726
L727 FCB 2,"2*"
TWOSTAR asl 1,s ;low
rol 0,s ;high
pulu pc
; 2/ ( w -- w )
; divide by 2 using shift operation
FDB TWOSLASH,L727
L728 FCB 2,"2/"
TWOSLASH asr 0,s ;high
ror 1,s ;low
pulu pc
; + ( w w -- sum )
; Add top two items.
FDB PLUS,L728
L730 FCB 1,"+"
PLUS:
ldd ,s++
addd ,s
std ,s
pulu pc
;;; HL with UPLUS!? Too inefficient ...
;;; jsr DOLST
;;; FDB UPLUS,DROP,EXIT
; NOT ( w -- w )
; One's complement of tos.
FDB INVER,L730
L740 FCB 3,"NOT"
INVER:
;;;; fastest ... (13T)
com ,s ; 6T
com 1,s ; 7T
pulu pc
;;;; alternative ... (14T)
ldd ,s ;TOS 5T
coma ; 2T
comb ; 2T
std ,s ; 5T
pulu pc
;;; slow HL ...
;;; jsr DOLST
;;; FDB DOLIT,-1,XORR,EXIT
; NEGATE ( n -- -n )
; Two's complement of tos.
FDB NEGAT,L740
L750 FCB 6,"NEGATE"
NEGAT:
;;;; fastest? .... (3+6+5 = 14T)
ldd #0 ; 3T
subd ,s ; 6T
std ,s ; 5T
pulu pc
;;;; alternate ... (7+3+6 = 16T)
neg 1,s ; high 7T
bne NEGAT1 ; 3T
neg ,s ; low with 1+ carry 6T
pulu pc
NEGAT1 com ,s ; low, no 1+ carry 6T
pulu pc
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB INVER,PLUS1,EXIT
; DNEGATE ( d -- -d )
; Two's complement of top double.
FDB DNEGA,L750
L760 FCB 7,"DNEGATE"
DNEGA:
ldd #0
subd 2,s ; low word
std 2,s
ldd #0
sbcb 1,s ; high word low byte
sbca ,s ; high word high byte
std ,s
pulu pc
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB INVER,TOR,INVER
;;;; FDB DOLIT,1,UPLUS
;;;; FDB RFROM,PLUS,EXIT
; - ( n1 n2 -- n1-n2 )
; Subtraction.
FDB SUBB,L760
L770 FCB 1,"-"
SUBB: ldd 2,s
subd ,s++
std ,s
pulu pc
;;; slow HL ...
;;; jsr DOLST
;;; FDB NEGAT,PLUS,EXIT
; ABS ( n -- n )
; Return the absolute value of n.
FDB ABSS,L770
L780 FCB 3,"ABS"
ABSS jsr DOLST
FDB DUPP,ZLESS
FDB QBRAN,ABS1
FDB NEGAT
ABS1 FDB EXIT
; = ( w w -- t )
; Return true if top two are equal.
FDB EQUAL,L780
L790 FCB 1,"="
EQUAL:
ldx #TRUEE
puls d ; first value
cmpd ,s ; compare to 2nd value
beq EQUAL1 ; equal -> true
ldx #0 ; false (leax 1,x save 1 byte, but is slower)
EQUAL1 stx ,s
pulu pc
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB XORR
;;;; FDB QBRAN,EQU1
;;;; FDB DOLIT,0,EXIT
;;;;EQU1: FDB DOLIT,TRUEE,EXIT
; U< ( u1 u2 -- t )
; Unsigned compare of top two items.
FDB ULESS,L790
L800 FCB 2,"U<"
ULESS:
ldx #TRUEE ; true
puls d ; u2
cmpd ,s ; u2 - u1
bhi ULES1 ; unsigned: u2 higher u1
ldx #0 ; false
ULES1 stx ,s ; replace TOS with result
pulu pc
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB DDUP,XORR,ZLESS
;;;; FDB QBRAN,ULES1
;;;; FDB SWAP,DROP,ZLESS,EXIT
;;;;ULES1: FDB SUBB,ZLESS,EXIT
; < ( n1 n2 -- t )
; Signed compare of top two items.
FDB LESS,L800
L810 FCB 1,"<"
LESS:
ldx #TRUEE ; true
puls d ; n2
cmpd ,s ; n2 - n1
bgt LESS1 ; signed: n2 greater than n1
ldx #0 ; false
LESS1 stx ,s ; replace TOS with result
pulu pc
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB DDUP,XORR,ZLESS
;;;; FDB QBRAN,LESS1
;;;; FDB DROP,ZLESS,EXIT
;;;;LESS1: FDB SUBB,ZLESS,EXIT
; MAX ( n n -- n )
; Return the greater of two top stack items.
FDB MAX,L810
L820 FCB 3,"MAX"
MAX jsr DOLST
FDB DDUP,LESS
FDB QBRAN,MAX1
FDB SWAP
MAX1 FDB DROP,EXIT
; MIN ( n n -- n )
; Return the smaller of top two stack items.
FDB MIN,L820
L830 FCB 3,"MIN"
MIN jsr DOLST
FDB DDUP,SWAP,LESS
FDB QBRAN,MIN1
FDB SWAP
MIN1 FDB DROP,EXIT
; WITHIN ( u ul uh -- t )
; Return true if u is within the range of ul and uh. ( ul <= u < uh )
FDB WITHI,L830
L840 FCB 6,"WITHIN"
WITHI jsr DOLST
FDB OVER,SUBB,TOR
FDB SUBB,RFROM,ULESS,EXIT
;; Divide
; U/ ( udl udh un -- ur uq )
; Unsigned divide of a double by a single. Return mod and quotient.
;
; Special cases:
; 1. overflow: quotient overflow if dividend is to great (remainder = divisor),
; remainder is set to $FFFF -> special handling.
; This is checked also right before the main loop.
; 2. underflow: divisor does not fit into dividend -> remainder
; get the value of the dividend -> automatically covered.
;
; overflow: quotient = $FFFF, remainder = divisor
; underflow: quotient = $0000, remainder = dividend low
; division by zero: quotient = $FFFF, remainder = $0000
;
; Testvalues:
;
; DIVH DIVL DVSR QUOT REM comment
;
; 0100 0000 FFFF 0100 0100 maximum divisor
; 0000 0001 8000 0000 0001 underflow (REM = DIVL)
; 0000 5800 3000 0001 1800 normal divsion
; 5800 0000 3000 FFFF 3000 overflow
; 0000 0001 0000 FFFF 0000 overflow (division by zero)
FDB USLASH,L840
L845 FCB 2,"U/"
USLASH:
ldx #16
ldd 2,s ; udh
cmpd ,s ; dividend to great?
bhs UMMODOV ; quotient overflow!
asl 5,s ; udl low
rol 4,s ; udl high
UMMOD1 rolb ; got one bit from udl
rola
bcs UMMOD2 ; bit 16 means always greater as divisor
cmpd ,s ; divide by un
bhs UMMOD2 ; higher or same as divisor?
andcc #$fe ; clc - clear carry flag
bra UMMOD3
UMMOD2 subd ,s
orcc #$01 ; sec - set carry flag
UMMOD3 rol 5,s ; udl, quotient shifted in
rol 4,s
leax -1,x
bne UMMOD1
ldx 4,s ; quotient
cmpd ,s ; remainder >= divisor -> overflow
blo UMMOD4
UMMODOV:
ldd ,s ; remainder set to divisor
ldx #$FFFF ; quotient = FFFF (-1) marks overflow
; (case 1)
UMMOD4:
leas 2,s ; un (divisor thrown away)
stx ,s ; quotient to TOS
std 2,s ; remainder 2nd
pulu pc ; NEXT
; UM/MOD ( udl udh un -- ur uq )
; Unsigned divide of a double by a single. Return mod and quotient.
FDB UMMOD,L845
L850 FCB 6,"UM/MOD"
UMMOD:
jmp USLASH
;;;; slow HL ...
jsr DOLST
FDB DDUP,ULESS
FDB QBRAN,UMM4
FDB NEGAT,DOLIT,15,TOR
UMM1 FDB TOR,DUPP,UPLUS
FDB TOR,TOR,DUPP,UPLUS
FDB RFROM,PLUS,DUPP
FDB RFROM,RAT,SWAP,TOR
FDB UPLUS,RFROM,ORR
FDB QBRAN,UMM2
FDB TOR,DROP,PLUS1,RFROM
FDB BRAN,UMM3
UMM2 FDB DROP
UMM3 FDB RFROM
FDB DONXT,UMM1
FDB DROP,SWAP,EXIT
UMM4 FDB DROP,DDROP
FDB DOLIT,-1,DUPP,EXIT
; M/MOD ( d n -- r q )
; Signed floored divide of double by single. Return mod and quotient.
FDB MSMOD,L850
L860 FCB 5,"M/MOD"
MSMOD:
jsr DOLST
FDB DUPP,ZLESS,DUPP,TOR
FDB QBRAN,MMOD1
FDB NEGAT,TOR,DNEGA,RFROM
MMOD1 FDB TOR,DUPP,ZLESS
FDB QBRAN,MMOD2
FDB RAT,PLUS
MMOD2 FDB RFROM,UMMOD,RFROM
FDB QBRAN,MMOD3
FDB SWAP,NEGAT,SWAP
MMOD3 FDB EXIT
; /MOD ( n n -- r q )
; Signed divide. Return mod and quotient.
FDB SLMOD,L860
L870 FCB 4,"/MOD"
SLMOD jsr DOLST
FDB OVER,ZLESS,SWAP,MSMOD,EXIT
; MOD ( n n -- r )
; Signed divide. Return mod only.
FDB MODD,L870
L880 FCB 3,"MOD"
MODD jsr DOLST
FDB SLMOD,DROP,EXIT
; / ( n n -- q )
; Signed divide. Return quotient only.
FDB SLASH,L880
L890 FCB 1,"/"
SLASH:
jsr DOLST
FDB SLMOD,SWAP,DROP,EXIT
;; Multiply
; UM* ( u u -- ud )
; Unsigned multiply. Return double product.
FDB UMSTA,L890
L900 FCB 3,"UM*"
UMSTA:
ldx #17 ; 16 adds and 17 shifts ...
clra ; result high word
clrb
bra UUMSTA3
UUMSTA1 bcc UUMSTA2
addd ,s
UUMSTA2 rora ; high, result high word
rorb ; low, result high word
UUMSTA3 ror 2,s ; shift multiplier high, result low word
ror 3,s ; shift multiplier low, result low word
leax -1,x
bne UUMSTA1
std ,s
pulu pc
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB DOLIT,0,SWAP,DOLIT,15,TOR
;;;;UMST1: FDB DUPP,UPLUS,TOR,TOR
;;;; FDB DUPP,UPLUS,RFROM,PLUS,RFROM
;;;; FDB QBRAN,UMST2
;;;; FDB TOR,OVER,UPLUS,RFROM,PLUS
;;;;UMST2: FDB DONXT,UMST1
;;;; FDB ROT,DROP,EXIT
; _UM* ( u u -- ud )
; Unsigned multiply. Return double product.
FDB UUMSTA,L900
L900A FCB 4,"_UM*"
UUMSTA:
jsr DOLST
FDB DOLIT,0,SWAP,DOLIT,15,TOR
UMST1 FDB DUPP,UPLUS,TOR,TOR
FDB DUPP,UPLUS,RFROM,PLUS,RFROM
FDB QBRAN,UMST2
FDB TOR,OVER,UPLUS,RFROM,PLUS
UMST2 FDB DONXT,UMST1
FDB ROT,DROP,EXIT
; * ( n n -- n )
; Signed multiply. Return single product.
; XXX Not really signed, -200 -200 * -> -25536
FDB STAR,L900A
L910 FCB 1,"*"
STAR:
jsr DOLST
FDB MSTAR,DROP,EXIT
; M* ( n n -- d )
; Signed multiply. Return double product.
FDB MSTAR,L910
L920 FCB 2,"M*"
MSTAR:
jsr DOLST
FDB DDUP,XORR,ZLESS,TOR
FDB ABSS,SWAP,ABSS,UMSTA
FDB RFROM
FDB QBRAN,MSTA1
FDB DNEGA
MSTA1 FDB EXIT
; */MOD ( n1 n2 n3 -- r q )
; Multiply n1 and n2, then divide by n3. Return mod and quotient.
FDB SSMOD,L920
L930 FCB 5,"*/MOD"
SSMOD jsr DOLST
FDB TOR,MSTAR,RFROM,MSMOD,EXIT
; */ ( n1 n2 n3 -- q )
; Multiply n1 by n2, then divide by n3. Return quotient only.
FDB STASL,L930
L940 FCB 2,"*/"
STASL jsr DOLST
FDB SSMOD,SWAP,DROP,EXIT
;; Miscellaneous
; CELL+ ( a -- a )
; Add cell size in byte to address.
FDB CELLP,L940
L950 FCB 5,"CELL+"
CELLP jsr DOLST
FDB DOCLIT
FCB CELLL
FDB PLUS,EXIT
; CELL- ( a -- a )
; Subtract cell size in byte from address.
FDB CELLM,L950
L960 FCB 5,"CELL-"
CELLM jsr DOLST
FDB DOCLIT
FCB 0-CELLL
FDB PLUS,EXIT
; CELLS ( n -- n )
; Multiply tos by cell size in bytes.
FDB CELLS,L960
L970 FCB 5,"CELLS"
CELLS jsr DOLST
FDB DOCLIT
FCB CELLL
FDB STAR,EXIT
; ALIGNED ( b -- a )
; Align address to the cell boundary.
FDB ALGND,L970
L975 FCB 7,"ALIGNED"
ALGND jsr DOLST
FDB EXIT
; BL ( -- 32 )
; Return 32, the blank character.
FDB BLANK,L975
L980 FCB 2,"BL"
BLANK:
jsr DOCONST
FDB ' '
;;; jsr DOLST
;;; FDB DOLIT,' ',EXIT
; >CHAR ( c -- c )
; Filter non-printing characters.
FDB TCHAR,L980
L990 FCB 5,">CHAR"
TCHAR jsr DOLST
FDB DOLIT,$7F,ANDD,DUPP ;mask msb
FDB DOCLIT
FCB 127
FDB BLANK,WITHI ;check for printable
FDB QBRAN,TCHA1
FDB DROP,DOLIT,'_' ;replace non-printables
TCHA1 FDB EXIT
; DEPTH ( -- n )
; Return the depth of the data stack.
FDB DEPTH,L990
L1000 FCB 5,"DEPTH"
DEPTH jsr DOLST
FDB SPAT,SZERO,AT,SWAP,SUBB
FDB DOCLIT
FCB CELLL
FDB SLASH,EXIT
; PICK ( ... +n -- ... w )
; Copy the nth stack item to tos.
FDB PICK,L1000
L1010 FCB 4,"PICK"
PICK:
ldd ,s
addd #1 ; correct index
aslb ; CELLL* (ASSERT: CELLL=2!!!)
rola
ldx d,s ; pick value
stx ,s ; replace TOP
pulu pc
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB PLUS1,CELLS
;;;; FDB SPAT,PLUS,AT,EXIT
; ROLL ( ... +n -- ... w )
; Copy the nth stack item to tos.
FDB ROLL,L1010
L1015 FCB 4,"ROLL"
ROLL:
;;;; XXX als Primitive!
;;;; slow HL ...
jsr DOLST
FDB DUPP,TWO
FDB LESS,QBRAN,ROL1
FDB DROP,BRAN,ROL2
ROL1 FDB SWAP,TOR,ONE
FDB SUBB
FDB ROLL,RFROM,SWAP
ROL2 FDB EXIT
;; Memory access
; +! ( n a -- )
; Add n to the contents at address a.
FDB PSTOR,L1015
L1020 FCB 2,"+!"
PSTOR:
puls x ; address
puls d ; value
addd ,x ; add to value from address
std ,x ; store back
pulu pc
;;;; XXX als Primitive!
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB SWAP,OVER,AT,PLUS
;;;; FDB SWAP,STORE,EXIT
; 2! ( d a -- )
; Store the double integer to address a.
FDB DSTOR,L1020
L1030 FCB 2,"2!"
DSTOR:
;;;; XXX als Primitive!
;;;; slow HL ...
jsr DOLST
FDB SWAP,OVER,STORE
FDB CELLP,STORE,EXIT
; 2@ ( a -- d )
; Fetch double integer from address a.
FDB DAT,L1030
L1040 FCB 2,"2@"
DAT:
;;;; XXX als Primitive!
;;;; slow HL ...
jsr DOLST
FDB DUPP,CELLP,AT
FDB SWAP,AT,EXIT
; COUNT ( b -- b +n )
; Return count byte of a string and add 1 to byte address.
FDB COUNT,L1040
L1050 FCB 5,"COUNT"
COUNT jsr DOLST
FDB DUPP,PLUS1
FDB SWAP,CAT,EXIT
; HERE ( -- a )
; Return the top of the code dictionary.
FDB HERE,L1050
L1060 FCB 4,"HERE"
HERE jsr DOLST
FDB CP,AT,EXIT
; PAD ( -- a )
; Return the address of the text buffer above the code dictionary.
FDB PAD,L1060
L1070 FCB 3,"PAD"
PAD jsr DOLST
FDB HERE,DOLIT,80,PLUS,EXIT
; TIB ( -- a )
; Return the address of the terminal input buffer.
FDB TIB,L1070
L1080 FCB 3,"TIB"
TIB jsr DOLST
FDB NTIB,CELLP,AT,EXIT
; @EXECUTE ( a -- )
; Execute vector stored in address a.
FDB ATEXE,L1080
L1090 FCB 8,"@EXECUTE"
ATEXE jsr DOLST
FDB AT,QDUP ;?address or zero
FDB QBRAN,EXE1
FDB EXECU ;execute if non-zero
EXE1 FDB EXIT ;do nothing if zero
; CMOVE ( b1 b2 u -- )
; Copy u bytes from b1 to b2.
FDB CMOVE,L1090
L1100 FCB 5,"CMOVE"
CMOVE:
jmp CMOVEW
ldd ,s ;count
beq CMOVE3 ;zero -> leave
tstb ;count low
beq CMOVE1
inc ,s ;ajust high for to-0 decrementation
CMOVE1:
ldx 2,s ;to addr
stu 2,s ;save reg on stack
ldu 4,s ;from addr
CMOVE2 lda ,u+ ;from ->
sta ,x+ ;to
decb ;low count
bne CMOVE2
dec ,s ;high count
bne CMOVE2
ldu 2,s
CMOVE3 leas 6,s ;drop 3 parameters from stack
pulu pc
;;;;
;;;; alternative, wordwise copy ...
CMOVEW ldd ,s ; count
ldx 2,s ; destination
sty ,s ; save RP
stu 2,s ; save IP
ldy 4,s ; source
lsra ; divide by 2, count words
rorb ;
pshs cc
beq CMOVEW1 ; byte decrement correction
inca ; byte decrement high byte correction
CMOVEW1 subd #0 ; word count zero (=65536)?
beq CMOVEW3
CMOVEW2 ldu ,y++ ; source
stu ,x++ ; destination
decb ; count low
bne CMOVEW2
deca ; count high (count to 0 corrected)
bne CMOVEW2
CMOVEW3 puls CC ; check if odd count?
bcc CMOVEW4
lda ,y
sta ,x
CMOVEW4 puls y,u ; y first
leas 2,s ; drop 3rd parameter
pulu pc ; next
;;;;
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB TOR
;;;; FDB BRAN,CMOV2
;;;;CMOV1: FDB TOR,DUPP,CAT
;;;; FDB RAT,CSTOR
;;;; FDB PLUS1
;;;; FDB RFROM,PLUS1
;;;;CMOV2: FDB DONXT,CMOV1
;;;; FDB DDROP,EXIT
;;;;
; FILL ( b u c -- )
; Fill u bytes of character c to area beginning at b.
FDB FILL,L1100
L1110 FCB 4,"FILL"
FILL:
ldd 2,s ;count
beq NFILL3 ;zero -> leave
tstb ;count low
beq NFILL1
inc 2,s ;ajust high for to-0 decrementation
NFILL1:
ldx 4,s ;to addr
lda 1,s ;fill byte, low byte from TOS
NFILL2:
sta ,x+ ;to
decb ;low count
bne NFILL2
dec 2,s ;high count
bne NFILL2
NFILL3 leas 6,s ;drop 3 parameters from stack
pulu pc
;;;; slow HL ...
;;;; jsr DOLST
;;;; FDB SWAP,TOR,SWAP
;;;; FDB BRAN,FILL2
;;;;FILL1: FDB DDUP,CSTOR,PLUS1
;;;;FILL2: FDB DONXT,FILL1
;;;; FDB DDROP,EXIT
; -TRAILING ( b u -- b u )
; Adjust the count to eliminate trailing white space.
FDB DTRAI,L1110
L1120 FCB 9,"-TRAILING"
DTRAI jsr DOLST
FDB TOR
FDB BRAN,DTRA2
DTRA1 FDB BLANK,OVER,RAT,PLUS,CAT,LESS
FDB QBRAN,DTRA2
FDB RFROM,PLUS1,EXIT
DTRA2 FDB DONXT,DTRA1
FDB ZERO,EXIT
; PACK$ ( b u a -- a )
; Build a counted string with u characters from b. Null fill.
FDB PACKS,L1120
L1130 FCB 5,"PACK$"
PACKS jsr DOLST
FDB DUPP,TOR ;strings only on cell boundary
FDB DDUP,CSTOR
FDB PLUS1 ;count mod cell
FDB DDUP,PLUS
FDB ZERO,SWAP,CSTOR ;null fill cell
FDB SWAP,CMOVE,RFROM,EXIT ;move string
;; Numeric output, single precision
; DIGIT ( u -- c )
; Convert digit u to a character.
FDB DIGIT,L1130
L1140 FCB 5,"DIGIT"
DIGIT jsr DOLST
FDB DOCLIT
FCB 9
FDB OVER,LESS
FDB DOCLIT
FCB 7
FDB ANDD,PLUS
FDB DOLIT,'0',PLUS,EXIT
; EXTRACT ( n base -- n c )
; Extract the least significant digit from n.
FDB EXTRC,L1140
L1150 FCB 7,"EXTRACT"
EXTRC jsr DOLST
FDB ZERO,SWAP,UMMOD
FDB SWAP,DIGIT,EXIT
; <# ( -- )
; Initiate the numeric output process.
FDB BDIGS,L1150
L1160 FCB 2,"<#"
BDIGS jsr DOLST
FDB PAD,HLD,STORE,EXIT
; HOLD ( c -- )
; Insert a character into the numeric output string.
FDB HOLD,L1160
L1170 FCB 4,"HOLD"
HOLD jsr DOLST
FDB HLD,AT,MINUS1
FDB DUPP,HLD,STORE,CSTOR,EXIT
; # ( u -- u )
; Extract one digit from u and append the digit to output string.
FDB DIG,L1170
L1180 FCB 1,"#"
DIG jsr DOLST
FDB BASE,AT,EXTRC,HOLD,EXIT
; #S ( u -- 0 )
; Convert u until all digits are added to the output string.
FDB DIGS,L1180
L1190 FCB 2,"#S"
DIGS jsr DOLST
DIGS1 FDB DIG,DUPP
FDB QBRAN,DIGS2
FDB BRAN,DIGS1
DIGS2 FDB EXIT
; SIGN ( n -- )
; Add a minus sign to the numeric output string.
FDB SIGN,L1190
L1200 FCB 4,"SIGN"
SIGN jsr DOLST
FDB ZLESS
FDB QBRAN,SIGN1
FDB DOLIT,'-',HOLD
SIGN1 FDB EXIT
; #> ( w -- b u )
; Prepare the output string to be TYPE'd.
FDB EDIGS,L1200
L1210 FCB 2,"#>"
EDIGS jsr DOLST
FDB DROP,HLD,AT
FDB PAD,OVER,SUBB,EXIT
; str ( w -- b u )
; Convert a signed integer to a numeric string.
FDB STR,L1210
L1220 FCB 3,"str"
STR jsr DOLST
FDB DUPP,TOR,ABSS
FDB BDIGS,DIGS,RFROM
FDB SIGN,EDIGS,EXIT
; HEX ( -- )
; Use radix 16 as base for numeric conversions.
FDB HEX,L1220
L1230 FCB 3,"HEX"
HEX jsr DOLST
FDB DOCLIT
FCB 16
FDB BASE,STORE,EXIT
; DECIMAL ( -- )
; Use radix 10 as base for numeric conversions.
FDB DECIM,L1230
L1240 FCB 7,"DECIMAL"
DECIM jsr DOLST
FDB DOCLIT
FCB 10
FDB BASE,STORE,EXIT
;; Numeric input, single precision
; DIGIT? ( c base -- u t )
; Convert a character to its numeric value. A flag indicates success.
FDB DIGTQ,L1240
L1250 FCB 6,"DIGIT?"
DIGTQ jsr DOLST
FDB TOR,DOLIT,'0',SUBB
FDB DOCLIT
FCB 9
FDB OVER,LESS
FDB QBRAN,DGTQ1
FDB DOCLIT
FCB 7
FDB SUBB
FDB DUPP,DOLIT,10,LESS,ORR
DGTQ1 FDB DUPP,RFROM,ULESS,EXIT
; NUMBER? ( a -- n T | a F )
; Convert a number string to integer. Push a flag on tos.
FDB NUMBQ,L1250
L1260 FCB 7,"NUMBER?"
NUMBQ jsr DOLST
FDB BASE,AT,TOR,ZERO,OVER,COUNT
FDB OVER,CAT,DOLIT,'$',EQUAL
FDB QBRAN,NUMQ1
FDB HEX,SWAP,PLUS1
FDB SWAP,MINUS1
NUMQ1 FDB OVER,CAT,DOLIT,'-',EQUAL,TOR
FDB SWAP,RAT,SUBB,SWAP,RAT,PLUS,QDUP
FDB QBRAN,NUMQ6
FDB MINUS1,TOR
NUMQ2 FDB DUPP,TOR,CAT,BASE,AT,DIGTQ
FDB QBRAN,NUMQ4
FDB SWAP,BASE,AT,STAR,PLUS,RFROM
FDB PLUS1
FDB DONXT,NUMQ2
FDB RAT,SWAP,DROP
FDB QBRAN,NUMQ3
FDB NEGAT
NUMQ3 FDB SWAP
FDB BRAN,NUMQ5
NUMQ4 FDB RFROM,RFROM,DDROP,DDROP,ZERO
NUMQ5 FDB DUPP
NUMQ6 FDB RFROM,DDROP
FDB RFROM,BASE,STORE,EXIT
;; Basic I/O
; ?KEY ( -- c T | F )
; Return input character and true, or a false if no input.
FDB QKEY,L1260
L1270 FCB 4,"?KEY"
QKEY jsr DOLST
FDB TQKEY,ATEXE,EXIT
; KEY ( -- c )
; Wait for and return an input character.
FDB KEY,L1270
L1280 FCB 3,"KEY"
KEY jsr DOLST
KEY1 FDB QKEY
FDB QBRAN,KEY1
FDB EXIT
; EMIT ( c -- )
; Send a character to the output device.
FDB EMIT,L1280
L1290 FCB 4,"EMIT"
EMIT jsr DOLST
FDB TEMIT,ATEXE,EXIT
; NUF? ( -- t )
; Return false if no input, else pause and if CR return true.
FDB NUFQ,L1290
L1300 FCB 4,"NUF?"
NUFQ jsr DOLST
FDB QKEY,DUPP
FDB QBRAN,NUFQ1
FDB DDROP,KEY,DOCLIT
FCB CRR
FDB EQUAL
NUFQ1 FDB EXIT
; PACE ( -- )
; Send a pace character for the file downloading process.
FDB PACE,L1300
L1310 FCB 4,"PACE"
PACE jsr DOLST
FDB DOCLIT
FCB 11
FDB EMIT,EXIT
; SPACE ( -- )
; Send the blank character to the output device.
FDB SPACE,L1310
L1320 FCB 5,"SPACE"
SPACE jsr DOLST
FDB BLANK,EMIT,EXIT
; SPACES ( +n -- )
; Send n spaces to the output device.
FDB SPACS,L1320
L1330 FCB 6,"SPACES"
SPACS jsr DOLST
FDB ZERO,MAX,TOR
FDB BRAN,CHAR2
CHAR1 FDB SPACE
CHAR2 FDB DONXT,CHAR1
FDB EXIT
; TYPE ( b u -- )
; Output u characters from b.
FDB TYPES,L1330
L1340 FCB 4,"TYPE"
TYPES jsr DOLST
FDB TOR
FDB BRAN,TYPE2
TYPE1 FDB DUPP,CAT,EMIT
FDB PLUS1
TYPE2 FDB DONXT,TYPE1
FDB DROP,EXIT
; CR ( -- )
; Output a carriage return and a line feed.
FDB CR,L1340
L1350 FCB 2,"CR"
CR jsr DOLST
FDB DOCLIT
FCB CRR
FDB EMIT
FDB DOCLIT
FCB LF
FDB EMIT,EXIT
; do$ ( -- a )
; Return the address of a compiled string.
FDB DOSTR,L1350
L1360 FCB COMPO+3,"do$"
DOSTR jsr DOLST
FDB RFROM,RAT,RFROM,COUNT,PLUS
FDB ALGND,TOR,SWAP,TOR,EXIT
; $"| ( -- a )
; Run time routine compiled by $". Return address of a compiled string.
FDB STRQP,L1360
L1370 FCB COMPO+3,"$",$22,"|"
STRQP jsr DOLST
FDB DOSTR,EXIT ;force a call to do$
; ."| ( -- )
; Run time routine of ." . Output a compiled string.
FDB DOTQP,L1370
L1380 FCB COMPO+3,".",$22,"|"
DOTQP jsr DOLST
FDB DOSTR,COUNT,TYPES,EXIT
; .R ( n +n -- )
; Display an integer in a field of n columns, right justified.
FDB DOTR,L1380
L1390 FCB 2,".R"
DOTR jsr DOLST
FDB TOR,STR,RFROM,OVER,SUBB
FDB SPACS,TYPES,EXIT
; U.R ( u +n -- )
; Display an unsigned integer in n column, right justified.
FDB UDOTR,L1390
L1400 FCB 3,"U.R"
UDOTR jsr DOLST
FDB TOR,BDIGS,DIGS,EDIGS
FDB RFROM,OVER,SUBB
FDB SPACS,TYPES,EXIT
; U. ( u -- )
; Display an unsigned integer in free format.
FDB UDOT,L1400
L1410 FCB 2,"U."
UDOT jsr DOLST
FDB BDIGS,DIGS,EDIGS
FDB SPACE,TYPES,EXIT
; . ( w -- )
; Display an integer in free format, preceeded by a space.
FDB DOT,L1410
L1420 FCB 1,"."
DOT jsr DOLST
FDB BASE,AT,DOCLIT
FCB 10
FDB XORR ;?decimal
FDB QBRAN,DOT1
FDB UDOT,EXIT ;no, display unsigned
DOT1 FDB STR,SPACE,TYPES,EXIT ;yes, display signed
; ? ( a -- )
; Display the contents in a memory cell.
FDB QUEST,L1420
L1430 FCB 1,"?"
QUEST jsr DOLST
FDB AT,DOT,EXIT
;; Parsing
; parse ( b u c -- b u delta ; <string> )
; Scan string delimited by c. Return found string and its offset.
FDB PARS,L1430
L1440 FCB 5,"parse"
PARS jsr DOLST
FDB TEMP,STORE,OVER,TOR,DUPP
FDB QBRAN,PARS8
FDB MINUS1,TEMP,AT,BLANK,EQUAL
FDB QBRAN,PARS3
FDB TOR
PARS1 FDB BLANK,OVER,CAT ;skip leading blanks ONLY
FDB SUBB,ZLESS,INVER
FDB QBRAN,PARS2
FDB PLUS1
FDB DONXT,PARS1
FDB RFROM,DROP,ZERO,DUPP,EXIT
PARS2 FDB RFROM
PARS3 FDB OVER,SWAP
FDB TOR
PARS4 FDB TEMP,AT,OVER,CAT,SUBB ;scan for delimiter
FDB TEMP,AT,BLANK,EQUAL
FDB QBRAN,PARS5
FDB ZLESS
PARS5 FDB QBRAN,PARS6
FDB PLUS1
FDB DONXT,PARS4
FDB DUPP,TOR
FDB BRAN,PARS7
PARS6 FDB RFROM,DROP,DUPP
FDB PLUS1,TOR
PARS7 FDB OVER,SUBB
FDB RFROM,RFROM,SUBB,EXIT
PARS8 FDB OVER,RFROM,SUBB,EXIT
; PARSE ( c -- b u ; <string> )
; Scan input stream and return counted string delimited by c.
FDB PARSE,L1440
L1450 FCB 5,"PARSE"
PARSE jsr DOLST
FDB TOR,TIB,INN,AT,PLUS ;current input buffer pointer
FDB NTIB,AT,INN,AT,SUBB ;remaining count
FDB RFROM,PARS,INN,PSTOR,EXIT
; .( ( -- )
; Output following string up to next ) .
FDB DOTPR,L1450
L1460 FCB IMEDD+2,".("
DOTPR jsr DOLST
FDB DOLIT,')',PARSE,TYPES,EXIT
; ( ( -- )
; Ignore following string up to next ) . A comment.
FDB PAREN,L1460
L1470 FCB IMEDD+1,"("
PAREN jsr DOLST
FDB DOLIT,')',PARSE,DDROP,EXIT
; \ ( -- )
; Ignore following text till the end of line.
FDB BKSLA,L1470
L1480 FCB IMEDD+1,92 ; '\' but give as numeric to avoid different escap char processing in different assemblers
BKSLA jsr DOLST
FDB NTIB,AT,INN,STORE,EXIT
; CHAR ( -- c )
; Parse next word and return its first character.
FDB CHAR,L1480
L1490 FCB 4,"CHAR"
CHAR jsr DOLST
FDB BLANK,PARSE,DROP,CAT,EXIT
; TOKEN ( -- a ; <string> )
; Parse a word from input stream and copy it to name dictionary.
FDB TOKEN,L1490
L1500 FCB 5,"TOKEN"
TOKEN jsr DOLST
FDB BLANK,PARSE,DOCLIT
FCB 31
FDB MIN
FDB NP,AT,OVER,SUBB,CELLM
FDB PACKS,EXIT
; WORD ( c -- a ; <string> )
; Parse a word from input stream and copy it to code dictionary.
FDB WORD,L1500
L1510 FCB 4,"WORD"
WORD jsr DOLST
FDB PARSE,HERE,PACKS,EXIT
;; Dictionary search
; NAME> ( na -- ca )
; Return a code address given a name address.
FDB NAMET,L1510
L1520 FCB 5,"NAME>"
NAMET jsr DOLST
FDB CELLM,CELLM,AT,EXIT
; SAME? ( a a u -- a a f \ -0+ )
; Compare u bytes in two strings. Return 0 if identical.
FDB SAMEQ,L1520
L1530 FCB 5,"SAME?"
SAMEQ jsr DOLST
FDB TOR
FDB BRAN,SAME2
SAME1 FDB OVER,RAT,PLUS,CAT
FDB OVER,RAT,PLUS,CAT
FDB SUBB,QDUP
FDB QBRAN,SAME2
FDB RFROM,DROP,EXIT
SAME2 FDB DONXT,SAME1
FDB DOLIT,0,EXIT
; find ( a va -- ca na | a F )
; Search a vocabulary for a string. Return ca and na if succeeded.
FDB FIND,L1530
L1540 FCB 4,"find"
FIND jsr DOLST
FDB SWAP,DUPP,CAT,MINUS1
FDB TEMP,STORE
FDB DUPP,AT,TOR,CELLP,SWAP
FIND1 FDB AT,DUPP
FDB QBRAN,FIND6
FDB DUPP,AT,DOLIT,MASKK,ANDD,RAT,XORR
FDB QBRAN,FIND2
FDB CELLP,MONE
FDB BRAN,FIND3
FIND2 FDB CELLP,TEMP,AT,SAMEQ
FIND3 FDB BRAN,FIND4
FIND6 FDB RFROM,DROP
FDB SWAP,CELLM,SWAP,EXIT
FIND4 FDB QBRAN,FIND5
FDB CELLM,CELLM
FDB BRAN,FIND1
FIND5 FDB RFROM,DROP,SWAP,DROP
FDB CELLM
FDB DUPP,NAMET,SWAP,EXIT
; NAME? ( a -- ca na | a F )
; Search all context vocabularies for a string.
FDB NAMEQ,L1540
L1550 FCB 5,"NAME?"
NAMEQ jsr DOLST
FDB CNTXT,DUPP,DAT,XORR
FDB QBRAN,NAMQ1
FDB CELLM
NAMQ1 FDB TOR
NAMQ2 FDB RFROM,CELLP,DUPP,TOR
FDB AT,QDUP
FDB QBRAN,NAMQ3
FDB FIND,QDUP
FDB QBRAN,NAMQ2
FDB RFROM,DROP,EXIT
NAMQ3 FDB RFROM,DROP
FDB ZERO,EXIT
;; Terminal response
; ^H ( bot eot cur -- bot eot cur )
; Backup the cursor by one character.
FDB BKSP,L1550
L1560 FCB 2,"^H"
BKSP jsr DOLST
FDB TOR,OVER,RFROM,SWAP,OVER,XORR
FDB QBRAN,BACK1
FDB DOLIT,BKSPP,TECHO,ATEXE,MINUS1
FDB BLANK,TECHO,ATEXE
FDB DOLIT,BKSPP,TECHO,ATEXE
BACK1 FDB EXIT
; TAP ( bot eot cur c -- bot eot cur )
; Accept and echo the key stroke and bump the cursor.
FDB TAP,L1560
L1570 FCB 3,"TAP"
TAP jsr DOLST
FDB DUPP,TECHO,ATEXE
FDB OVER,CSTOR,PLUS1,EXIT
; kTAP ( bot eot cur c -- bot eot cur )
; Process a key stroke, CR or backspace.
FDB KTAP,L1570
L1580 FCB 4,"kTAP"
KTAP jsr DOLST
FDB DUPP,DOCLIT
FCB CRR
FDB XORR
FDB QBRAN,KTAP2
FDB DUPP,DOLIT,BKSPP,XORR
FDB SWAP,DOLIT,BKSPP2,XORR,ANDD
FDB QBRAN,KTAP1
FDB BLANK,TAP,EXIT
KTAP1 FDB BKSP,EXIT
KTAP2 FDB DROP,SWAP,DROP,DUPP,EXIT
; accept ( b u -- b u )
; Accept characters to input buffer. Return with actual count.
FDB ACCEP,L1580
L1590 FCB 6,"ACCEPT"
ACCEP jsr DOLST
FDB OVER,PLUS,OVER
ACCP1 FDB DDUP,XORR
FDB QBRAN,ACCP4
FDB KEY,DUPP
; FDB BLANK,SUBB,DOLIT,95,ULESS
FDB BLANK,DOLIT,127,WITHI
FDB QBRAN,ACCP2
FDB TAP
FDB BRAN,ACCP3
ACCP2 FDB TTAP,ATEXE
ACCP3 FDB BRAN,ACCP1
ACCP4 FDB DROP,OVER,SUBB,EXIT
; EXPECT ( b u -- )
; Accept input stream and store count in SPAN.
FDB EXPEC,L1590
L1600 FCB 6,"EXPECT"
EXPEC jsr DOLST
FDB TEXPE,ATEXE,SPAN,STORE,DROP,EXIT
; QUERY ( -- )
; Accept input stream to terminal input buffer.
FDB QUERY,L1600
L1610 FCB 5,"QUERY"
QUERY jsr DOLST
FDB TIB,DOCLIT
FCB 80
FDB TEXPE,ATEXE,NTIB,STORE
FDB DROP,ZERO,INN,STORE,EXIT
;; Error handling
; CATCH ( ca -- 0 | err# )
; Execute word at ca and set up an error frame for it.
FDB CATCH,L1610
L1620 FCB 5,"CATCH"
CATCH jsr DOLST
FDB SPAT,TOR,HANDL,AT,TOR ;save error frame
FDB RPAT,HANDL,STORE,EXECU ;execute
FDB RFROM,HANDL,STORE ;restore error frame
FDB RFROM,DROP,ZERO,EXIT ;no error
; THROW ( err# -- err# )
; Reset system to current local error frame an update error flag.
FDB THROW,L1620
L1630 FCB 5,"THROW"
THROW jsr DOLST
FDB HANDL,AT,RPSTO ;restore return stack
FDB RFROM,HANDL,STORE ;restore handler frame
FDB RFROM,SWAP,TOR,SPSTO ;restore data stack
FDB DROP,RFROM,EXIT
; NULL$ ( -- a )
; Return address of a null string with zero count.
FDB NULLS,L1630
L1640 FCB 5,"NULL$"
NULLS:
;;;; jsr DOLST
;;;; FDB DOVAR ;emulate CREATE
jsr FDOVAR
FDB 0
FCB 99,111,121,111,116,101
; ABORT ( -- )
; Reset data stack and jump to QUIT.
FDB ABORT,L1640
L1650 FCB 5,"ABORT"
ABORT jsr DOLST
FDB NULLS,THROW
; abort" ( f -- )
; Run time routine of ABORT" . Abort with a message.
FDB ABORQ,L1650
L1660 FCB COMPO+6,"abort"
FCB 34 ;'"'
ABORQ jsr DOLST
FDB QBRAN,ABOR1 ;text flag
FDB DOSTR,THROW ;pass error string
ABOR1 FDB DOSTR,DROP,EXIT ;drop error
;; The text interpreter
; $INTERPRET ( a -- )
; Interpret a word. If failed, try to convert it to an integer.
FDB INTER,L1660
L1670 FCB 10,"$INTERPRET"
INTER jsr DOLST
FDB NAMEQ,QDUP ;?defined
FDB QBRAN,INTE1
FDB AT,DOLIT,COMPO*256,ANDD ;?compile only lexicon bits
FDB ABORQ
FCB 13," compile only"
FDB EXECU,EXIT ;execute defined word
INTE1 FDB TNUMB,ATEXE ;convert a number
FDB QBRAN,INTE2
FDB EXIT
INTE2 FDB THROW ;error
; [ ( -- )
; Start the text interpreter.
FDB LBRAC,L1670
L1680 FCB IMEDD+1,"["
LBRAC jsr DOLST
FDB DOLIT,INTER,TEVAL,STORE,EXIT
; .OK ( -- )
; Display 'ok' only while interpreting.
FDB DOTOK,L1680
L1690 FCB 3,".OK"
DOTOK jsr DOLST
FDB DOLIT,INTER,TEVAL,AT,EQUAL
FDB QBRAN,DOTO1
FDB DOTQP
FCB 3," ok"
DOTO1 FDB CR,EXIT
; ?STACK ( -- )
; Abort if the data stack underflows.
FDB QSTAC,L1690
L1700 FCB 6,"?STACK"
QSTAC jsr DOLST
FDB DEPTH,ZLESS ;check only for underflow
FDB ABORQ
FCB 10," underflow"
FDB EXIT
; EVAL ( -- )
; Interpret the input stream.
FDB EVAL,L1700
L1710 FCB 4,"EVAL"
EVAL jsr DOLST
EVAL1 FDB TOKEN,DUPP,CAT ;?input stream empty
FDB QBRAN,EVAL2
FDB TEVAL,ATEXE,QSTAC ;evaluate input, check stack
FDB BRAN,EVAL1
EVAL2 FDB DROP,TPROM,ATEXE,EXIT ;prompt
;; Shell
; PRESET ( -- )
; Reset data stack pointer and the terminal input buffer.
FDB PRESE,L1710
L1720 FCB 6,"PRESET"
PRESE jsr DOLST
FDB SZERO,AT,SPSTO
FDB DOLIT,TIBB,NTIB,CELLP,STORE,EXIT
; xio ( a a a -- )
; Reset the I/O vectors 'EXPECT, 'TAP, 'ECHO and 'PROMPT.
FDB XIO,L1720
L1730 FCB COMPO+3,"xio"
XIO jsr DOLST
FDB DOLIT,ACCEP,TEXPE,DSTOR
FDB TECHO,DSTOR,EXIT
; FILE ( -- )
; Select I/O vectors for file download.
FDB FILE,L1730
L1740 FCB 4,"FILE"
FILE jsr DOLST
FDB DOLIT,PACE,DOLIT,DROP
FDB DOLIT,KTAP,XIO,EXIT
; HAND ( -- )
; Select I/O vectors for terminal interface.
FDB HAND,L1740
L1750 FCB 4,"HAND"
HAND jsr DOLST
FDB DOLIT,DOTOK,DOLIT,EMIT
FDB DOLIT,KTAP,XIO,EXIT
; I/O ( -- a )
; Array to store default I/O vectors.
FDB ISLO,L1750
L1760 FCB 3,"I/O"
ISLO:
;; jsr DOLST
;; FDB DOVAR ;emulate CREATE
jsr FDOVAR
FDB QRX,TXSTO ;default I/O vectors
; CONSOLE ( -- )
; Initiate terminal interface.
FDB CONSO,L1760
L1770 FCB 7,"CONSOLE"
CONSO jsr DOLST
FDB ISLO,DAT,TQKEY,DSTOR ;restore default I/O device
FDB HAND,EXIT ;keyboard input
; QUIT ( -- )
; Reset return stack pointer and start text interpreter.
FDB QUIT,L1770
L1780 FCB 4,"QUIT"
QUIT jsr DOLST
FDB RZERO,AT,RPSTO ;reset return stack pointer
QUIT1 FDB LBRAC ;start interpretation
QUIT2 FDB QUERY ;get input
FDB DOLIT,EVAL,CATCH,QDUP ;evaluate input
FDB QBRAN,QUIT2 ;continue till error
FDB TPROM,AT,TOR ;save input device
FDB CONSO,NULLS,OVER,XORR ;?display error message
FDB QBRAN,QUIT3
FDB SPACE,COUNT,TYPES ;error message
FDB DOTQP
FCB 3," ? " ;error prompt
QUIT3 FDB RFROM,DOLIT,DOTOK,XORR ;?file input
FDB QBRAN,QUIT4
FDB DOLIT,ERR,EMIT ;file error, tell host
QUIT4 FDB PRESE ;some cleanup
FDB BRAN,QUIT1
;; The compiler
; ' ( -- ca )
; Search context vocabularies for the next word in input stream.
FDB TICK,L1780
L1790 FCB 1,"'"
TICK jsr DOLST
FDB TOKEN,NAMEQ ;?defined
FDB QBRAN,TICK1
FDB EXIT ;yes, push code address
TICK1 FDB THROW ;no, error
; ALLOT ( n -- )
; Allocate n bytes to the code dictionary.
FDB ALLOT,L1790
L1800 FCB 5,"ALLOT"
ALLOT jsr DOLST
FDB CP,PSTOR,EXIT ;adjust code pointer
; , ( w -- )
; Compile an integer into the code dictionary.
FDB COMMA,L1800
L1810 FCB 1,","
COMMA jsr DOLST
FDB HERE,DUPP,CELLP ;cell boundary
FDB CP,STORE,STORE,EXIT ;adjust code pointer and compile
; [COMPILE] ( -- ; <string> )
; Compile the next immediate word into code dictionary.
FDB BCOMP,L1810
L1820 FCB IMEDD+9,"[COMPILE]"
BCOMP jsr DOLST
FDB TICK,COMMA,EXIT
; COMPILE ( -- )
; Compile the next address in colon list to code dictionary.
FDB COMPI,L1820
L1830 FCB COMPO+7,"COMPILE"
COMPI jsr DOLST
FDB RFROM,DUPP,AT,COMMA ;compile address
FDB CELLP,TOR,EXIT ;adjust return address
; LITERAL ( w -- )
; Compile tos to code dictionary as an integer literal.
FDB LITER,L1830
L1840 FCB IMEDD+7,"LITERAL"
LITER jsr DOLST
FDB COMPI,DOLIT,COMMA,EXIT
; $," ( -- )
; Compile a literal string up to next " .
FDB STRCQ,L1840
L1850 FCB 3,"$,",34
STRCQ jsr DOLST
FDB DOLIT,34,WORD ;move string to code dictionary
FDB COUNT,PLUS,ALGND ;calculate aligned end of string
FDB CP,STORE,EXIT ;adjust the code pointer
; RECURSE ( -- )
; Make the current word available for compilation.
FDB RECUR,L1850
L1860 FCB IMEDD+7,"RECURSE"
RECUR jsr DOLST
FDB LAST,AT,NAMET,COMMA,EXIT
;; Structures
; DO ( -- a m )
; Start a DO-LOOP/+LOOP structure in a colon definition.
FDB DO,L1860
L1861 FCB IMEDD+2,"DO"
DO jsr DOLST
FDB COMPI,DODO,HERE
FDB ONE ; marker for DO
FDB EXIT
; ?DO ( -- a m )
; Start a ?DO-LOOP/+LOOP structure in a colon definition.
FDB QDO,L1861
L1862 FCB IMEDD+3,"?DO"
QDO jsr DOLST
FDB COMPI,DOQDO,HERE
FDB COMPI,0 ; branch destination placeholder
FDB TWO ; marker for ?DO
FDB EXIT
; (?DO) ( w w -- )
; Runtime part of DO in a DO-LOOP/+LOOP structure.
FDB DOQDO,L1862
L1862A FCB 5,"(?DO)"
DOQDO:
puls d ;start
cmpd ,s ;start < end -> ok
blt DOQDO1
leas 2,s ;drop end
ldu ,u
pulu pc ;branch past loop
DOQDO1:
puls x ;end
stx ,--y ;end to return stack
std ,--y ;start to return stack
leau 2,u ;skip jump forward
pulu pc
; -DO ( -- a m )
; Start a -DO-LOOP/+LOOP structure in a colon definition.
FDB MDO,L1862A
L1862B FCB IMEDD+3,"-DO"
MDO jsr DOLST
FDB COMPI,DOMDO,HERE
FDB COMPI,0 ; branch destination placeholder
FDB TWO ; marker for ?DO/-DO
FDB EXIT
; (-DO) ( w w -- )
; Runtime part of -DO in a -DO-LOOP/+LOOP structure.
FDB DOMDO,L1862B
L1862C FCB 5,"(-DO)"
DOMDO:
puls d ;start
cmpd ,s ;start > end -> ok
bgt DOMDO1
leas 2,s ;drop end
ldu ,u
pulu pc ;branch past loop
DOMDO1:
puls x ;end
stx ,--y ;end to return stack
std ,--y ;start to return stack
leau 2,u ;skip jump forward
pulu pc
; (DO) ( w w -- )
; Runtime part of DO in a DO-LOOP/+LOOP structure.
FDB DODO,L1862C
L1863 FCB 4,"(DO)"
DODO:
puls d,x ;start first, end second
stx ,--y ;end to return stack
std ,--y ;start to return stack
pulu pc
; (LOOP) ( -- )
; Runtime part of LOOP
FDB DOLOOP,L1863
L1864 FCB 6,"(LOOP)"
DOLOOP:
ldd #1
bra DOPLOF
; (+LOOP) ( -- )
; Runtime part of +LOOP
FDB DOPLOOP,L1864
L1865 FCB IMEDD+7,"(+LOOP)"
DOPLOOP:
ldd ,s++ ; increment
bpl DOPLOF ; forward
addd ,y ; start/index
cmpd 2,y ; end
ble DOPLO1 ; index <= end -> leave
std ,y
ldu ,u ; branch to begin of loop
pulu pc
DOPLOF addd ,y ; start/index
cmpd 2,y ; end
bge DOPLO1 ; index >= end -> leave
std ,y ; save back
ldu ,u ; branch to begin of loop
pulu pc
DOPLO1:
leau 2,u ; skip back destination
leay 4,y ; remove index and upper from r stack
pulu pc
; LOOP ( a m -- )
; Terminate a DO/?DO-LOOP loop structure.
FDB LOOP,L1865
L1866 FCB IMEDD+4,"LOOP"
LOOP jsr DOLST
FDB COMPI,DOLOOP
FDB TWO,EQUAL,QBRAN,LOOP1
FDB HERE,CELLP,OVER,STORE,CELLP ; branch forward destination
LOOP1 FDB COMMA,EXIT
; +LOOP ( a m -- )
; Terminate a DO/?DO-+LOOP loop structure.
FDB PLOOP,L1866
L1867 FCB IMEDD+5,"+LOOP"
PLOOP jsr DOLST
FDB COMPI,DOPLOOP
FDB TWO,EQUAL,QBRAN,PLOOP1
FDB HERE,CELLP,OVER,STORE,CELLP ; branch forward destination
PLOOP1 FDB COMMA,EXIT
; LEAVE ( -- )
; Leave DO/LOOP
FDB LEAVE,L1867
L1868 FCB 5,"LEAVE"
LEAVE:
ldd ,y ;take index on return stack
std 2,y ;and change end to it
pulu pc
; FOR ( -- a )
; Start a FOR-NEXT loop structure in a colon definition.
FDB FOR,L1867
L1870 FCB IMEDD+3,"FOR"
FOR jsr DOLST
FDB COMPI,TOR,HERE,EXIT
; BEGIN ( -- a )
; Start an infinite or indefinite loop structure.
FDB BEGIN,L1870
L1880 FCB IMEDD+5,"BEGIN"
BEGIN jsr DOLST
FDB HERE,EXIT
; NEXT ( a -- )
; Terminate a FOR-NEXT loop structure.
FDB NEXT,L1880
L1890 FCB IMEDD+4,"NEXT"
NEXT jsr DOLST
FDB COMPI,DONXT,COMMA,EXIT
; UNTIL ( a -- )
; Terminate a BEGIN-UNTIL indefinite loop structure.
FDB UNTIL,L1890
L1900 FCB IMEDD+5,"UNTIL"
UNTIL jsr DOLST
FDB COMPI,QBRAN,COMMA,EXIT
; AGAIN ( a -- )
; Terminate a BEGIN-AGAIN infinite loop structure.
FDB AGAIN,L1900
L1910 FCB IMEDD+5,"AGAIN"
AGAIN jsr DOLST
FDB COMPI,BRAN,COMMA,EXIT
; IF ( -- A )
; Begin a conditional branch structure.
FDB IFF,L1910
L1920 FCB IMEDD+2,"IF"
IFF jsr DOLST
FDB COMPI,QBRAN,HERE
FDB ZERO,COMMA,EXIT
; AHEAD ( -- A )
; Compile a forward branch instruction.
FDB AHEAD,L1920
L1930 FCB IMEDD+5,"AHEAD"
AHEAD jsr DOLST
FDB COMPI,BRAN,HERE,ZERO,COMMA,EXIT
; REPEAT ( A a -- )
; Terminate a BEGIN-WHILE-REPEAT indefinite loop.
FDB REPEA,L1930
L1940 FCB IMEDD+6,"REPEAT"
REPEA jsr DOLST
FDB AGAIN,HERE,SWAP,STORE,EXIT
; THEN ( A -- )
; Terminate a conditional branch structure.
FDB THENN,L1940
L1950 FCB IMEDD+4,"THEN"
THENN jsr DOLST
FDB HERE,SWAP,STORE,EXIT
; AFT ( a -- a A )
; Jump to THEN in a FOR-AFT-THEN-NEXT loop the first time through.
FDB AFT,L1950
L1960 FCB IMEDD+3,"AFT"
AFT jsr DOLST
FDB DROP,AHEAD,BEGIN,SWAP,EXIT
; ELSE ( A -- A )
; Start the false clause in an IF-ELSE-THEN structure.
FDB ELSEE,L1960
L1970 FCB IMEDD+4,"ELSE"
ELSEE jsr DOLST
FDB AHEAD,SWAP,THENN,EXIT
; WHILE ( a -- A a )
; Conditional branch out of a BEGIN-WHILE-REPEAT loop.
FDB WHILE,L1970
L1980 FCB IMEDD+5,"WHILE"
WHILE jsr DOLST
FDB IFF,SWAP,EXIT
; ABORT" ( -- ; <string> )
; Conditional abort with an error message.
FDB ABRTQ,L1980
L1990 FCB IMEDD+6,"ABORT",34
ABRTQ jsr DOLST
FDB COMPI,ABORQ,STRCQ,EXIT
; $" ( -- ; <string> )
; Compile an inline string literal.
FDB STRQ,L1990
L2000 FCB IMEDD+2,"$",$22
STRQ jsr DOLST
FDB COMPI,STRQP,STRCQ,EXIT
; ." ( -- ; <string> )
; Compile an inline string literal to be typed out at run time.
FDB DOTQ,L2000
L2010 FCB IMEDD+2,".",$22
DOTQ jsr DOLST
FDB COMPI,DOTQP,STRCQ,EXIT
;; Name compiler
; ?UNIQUE ( a -- a )
; Display a warning message if the word already exists.
FDB UNIQU,L2010
L2020 FCB 7,"?UNIQUE"
UNIQU jsr DOLST
FDB DUPP,NAMEQ ;?name exists
FDB QBRAN,UNIQ1
FDB DOTQP ;redefinitions are OK
FCB 7," reDef " ;but the user should be warned
FDB OVER,COUNT,TYPES ;just in case its not planned
UNIQ1 FDB DROP,EXIT
; $,n ( na -- )
; Build a new dictionary name using the string at na.
FDB SNAME,L2020
L2030 FCB 3,"$,n"
SNAME jsr DOLST
FDB DUPP,CAT ;?null input
FDB QBRAN,PNAM1
FDB UNIQU ;?redefinition
FDB DUPP,LAST,STORE ;save na for vocabulary link
FDB HERE,ALGND,SWAP ;align code address
FDB CELLM ;link address
FDB CRRNT,AT,AT,OVER,STORE
FDB CELLM,DUPP,NP,STORE ;adjust name pointer
FDB STORE,EXIT ;save code pointer
PNAM1 FDB STRQP
FCB 5," name" ;null input
FDB THROW
;; FORTH compiler
; $COMPILE ( a -- )
; Compile next word to code dictionary as a token or literal.
FDB SCOMP,L2030
L2040 FCB 8,"$COMPILE"
SCOMP jsr DOLST
FDB NAMEQ,QDUP ;?defined
FDB QBRAN,SCOM2
FDB AT,DOLIT,IMEDD*256,ANDD ;?immediate
FDB QBRAN,SCOM1
FDB EXECU,EXIT ;its immediate, execute
SCOM1 FDB COMMA,EXIT ;its not immediate, compile
SCOM2 FDB TNUMB,ATEXE ;try to convert to number
FDB QBRAN,SCOM3
FDB LITER,EXIT ;compile number as integer
SCOM3 FDB THROW ;error
; OVERT ( -- )
; Link a new word into the current vocabulary.
FDB OVERT,L2040
L2050 FCB 5,"OVERT"
OVERT jsr DOLST
FDB LAST,AT,CRRNT,AT,STORE,EXIT
; ; ( -- )
; Terminate a colon definition.
FDB SEMIS,L2050
L2060 FCB IMEDD+COMPO+1,";"
SEMIS jsr DOLST
FDB COMPI,EXIT,LBRAC,OVERT,EXIT
; ] ( -- )
; Start compiling the words in the input stream.
FDB RBRAC,L2060
L2070 FCB 1,"]"
RBRAC jsr DOLST
FDB DOLIT,SCOMP,TEVAL,STORE,EXIT
; call, ( ca -- )
; Assemble a call instruction to ca.
FDB CALLC,L2070
L2080 FCB 5,"call,"
CALLC jsr DOLST
FDB DOCLIT
FCB CALLL
FDB HERE,CSTOR ;Direct Threaded Code
FDB ONE,ALLOT
FDB COMMA,EXIT ;DTC 6809 extended addr jsr
; : ( -- ; <string> )
; Start a new colon definition using next word as its name.
FDB COLON,L2080
L2090 FCB 1,":"
COLON jsr DOLST
FDB TOKEN,SNAME,DOLIT,DOLST
FDB CALLC,RBRAC,EXIT
; IMMEDIATE ( -- )
; Make the last compiled word an immediate word.
FDB IMMED,L2090
L2100 FCB 9,"IMMEDIATE"
IMMED jsr DOLST
FDB DOLIT,IMEDD*256,LAST,AT,AT,ORR
FDB LAST,AT,STORE,EXIT
;; Defining words
; USER ( u -- ; <string> )
; Compile a new user variable.
FDB USER,L2100
L2110 FCB 4,"USER"
USER jsr DOLST
FDB TOKEN,SNAME,OVERT
;;;; FDB DOLIT,DOLST,CALLC
;;;; FDB DOLIT,DOUSE,COMMA
; fast implementation ....
FDB DOLIT,FDOUSE,CALLC
FDB COMMA,EXIT
; CREATE ( -- ; <string> )
; Compile a new array entry without allocating code space.
FDB CREAT,L2110
L2120 FCB 6,"CREATE"
CREAT jsr DOLST
FDB TOKEN,SNAME,OVERT
;;;; FDB DOLIT,DOLST,CALLC
;;;; FDB DOLIT,DOVAR,COMMA,EXIT
; fast implementation ....
FDB DOLIT,FDOVAR,CALLC,EXIT
; VARIABLE ( -- ; <string> )
; Compile a new variable initialized to 0.
FDB VARIA,L2120
L2130 FCB 8,"VARIABLE"
VARIA jsr DOLST
FDB CREAT,ZERO,COMMA,EXIT
; CONSTANT ( w -- ; <string> )
; Compile a new constant with value w.
FDB CONST,L2130
L2135 FCB 8,"CONSTANT"
CONST jsr DOLST
FDB TOKEN,SNAME,OVERT
FDB DOLIT,DOCONST,CALLC
FDB COMMA,EXIT
;; Tools
; _TYPE ( b u -- )
; Display a string. Filter non-printing characters.
FDB UTYPE,L2135
L2140 FCB 5,"_TYPE"
UTYPE jsr DOLST
FDB TOR ;start count down loop
FDB BRAN,UTYP2 ;skip first pass
UTYP1 FDB DUPP,CAT,TCHAR,EMIT ;display only printable
FDB PLUS1 ;increment address
UTYP2 FDB DONXT,UTYP1 ;loop till done
FDB DROP,EXIT
; dm+ ( a u -- a )
; Dump u bytes from , leaving a+u on the stack.
FDB DUMPP,L2140
L2150 FCB 3,"dm+"
DUMPP jsr DOLST
FDB OVER,DOLIT,4,UDOTR ;display address
FDB SPACE,TOR ;start count down loop
FDB BRAN,PDUM2 ;skip first pass
PDUM1 FDB DUPP,CAT,DOLIT,3,UDOTR ;display numeric data
FDB PLUS1 ;increment address
PDUM2 FDB DONXT,PDUM1 ;loop till done
FDB EXIT
; DUMP ( a u -- )
; Dump u bytes from a, in a formatted manner.
FDB DUMP,L2150
L2160 FCB 4,"DUMP"
DUMP jsr DOLST
FDB BASE,AT,TOR,HEX ;save radix, set hex
FDB DOCLIT
FCB 16
FDB SLASH ;change count to lines
FDB TOR ;start count down loop
DUMP1 FDB CR,DOCLIT
FCB 16
FDB DDUP,DUMPP ;display numeric
FDB ROT,ROT
FDB TWO,SPACS,UTYPE ;display printable characters
FDB NUFQ,INVER ;user control
FDB QBRAN,DUMP2
FDB DONXT,DUMP1 ;loop till done
FDB BRAN,DUMP3
DUMP2 FDB RFROM,DROP ;cleanup loop stack, early exit
DUMP3 FDB DROP,RFROM,BASE,STORE ;restore radix
FDB EXIT
; .S ( ... -- ... )
; Display the contents of the data stack.
FDB DOTS,L2160
L2170 FCB 2,".S"
DOTS jsr DOLST
FDB CR,DEPTH ;stack depth
FDB TOR ;start count down loop
FDB BRAN,DOTS2 ;skip first pass
DOTS1 FDB RAT,PICK,DOT ;index stack, display contents
DOTS2 FDB DONXT,DOTS1 ;loop till done
FDB DOTQP
FCB 4," <sp"
FDB EXIT
; !CSP ( -- )
; Save stack pointer in CSP for error checking.
FDB STCSP,L2170
L2180 FCB 4,"!CSP"
STCSP jsr DOLST
FDB SPAT,CSP,STORE,EXIT ;save pointer
; ?CSP ( -- )
; Abort if stack pointer differs from that saved in CSP.
FDB QCSP,L2180
L2190 FCB 4,"?CSP"
QCSP jsr DOLST
FDB SPAT,CSP,AT,XORR ;compare pointers
FDB ABORQ ;abort if different
FCB 6,"stacks"
FDB EXIT
; >NAME ( ca -- na | F )
; Convert code address to a name address.
FDB TNAME,L2190
L2200 FCB 5,">NAME"
TNAME jsr DOLST
FDB CRRNT ;vocabulary link
TNAM1 FDB CELLP,AT,QDUP ;check all vocabularies
FDB QBRAN,TNAM4
FDB DDUP
TNAM2 FDB AT,DUPP ;?last word in a vocabulary
FDB QBRAN,TNAM3
FDB DDUP,NAMET,XORR ;compare
FDB QBRAN,TNAM3
FDB CELLM ;continue with next word
FDB BRAN,TNAM2
TNAM3 FDB SWAP,DROP,QDUP
FDB QBRAN,TNAM1
FDB SWAP,DROP,SWAP,DROP,EXIT
TNAM4 FDB DROP,DOLIT,0,EXIT
; .ID ( na -- )
; Display the name at address.
FDB DOTID,L2200
L2210 FCB 3,".ID"
DOTID jsr DOLST
FDB QDUP ;if zero no name
FDB QBRAN,DOTI1
FDB COUNT,DOCLIT
FCB $1F
FDB ANDD ;mask lexicon bits
FDB UTYPE,EXIT ;display name string
DOTI1 FDB DOTQP
FCB 9," {noName}"
FDB EXIT
; SEE ( -- ; <string> )
; A simple decompiler.
FDB SEE,L2210
L2220 FCB 3,"SEE"
SEE jsr DOLST
FDB TICK ;starting address
FDB PLUS1 ;skip JSR
;primitive check ...
FDB BASE,AT,TOR,HEX ;switch to hex base
FDB DUPP,AT,DOLIT,DOLST,XORR
;high level word?
FDB QBRAN,SEE1 ;yes!
FDB CR,DOTQP ;primitive word only
FCB 9, " PRIMITVE"
FDB BRAN,SEE5 ;exit
SEE1 FDB CR,CELLP,DUPP,UDOT,SPACE
FDB DUPP,AT,DUPP ;?does it contain a zero
FDB QBRAN,SEE2
FDB TNAME ;?is it a name
SEE2 FDB QDUP ;name address or zero
FDB QBRAN,SEE3
FDB SPACE,DOTID ;display name
FDB DUPP,AT
FDB DUPP,DOLIT,DOCLIT,EQUAL ; doCLIT?
FDB QBRAN,SEE21
FDB OVER,CELLP,CAT,SPACE,UDOT ; CLIT: get only single byte
FDB SWAP,PLUS1,SWAP
FDB BRAN,SEE28
SEE21 FDB DUPP,DOLIT,DOLIT,EQUAL ; doCLIT?
FDB OVER,DOLIT,QBRAN,EQUAL,ORR ; ?BRAN ?
FDB OVER,DOLIT,BRAN,EQUAL,ORR; BRANCH ?
FDB OVER,DOLIT,DONXT,EQUAL,ORR; next ? (from FOR/NEXT)
FDB OVER,DOLIT,DOLOOP,EQUAL,ORR; (LOOP) ?
FDB OVER,DOLIT,DOPLOOP,EQUAL,ORR; (+LOOP) ?
FDB OVER,DOLIT,DODO,EQUAL,ORR; (DO) ?
FDB OVER,DOLIT,DOQDO,EQUAL,ORR; (?DO) ?
FDB OVER,DOLIT,DOMDO,EQUAL,ORR; (-DO) ?
FDB QBRAN,SEE27
FDB SWAP,CELLP,DUPP,AT,SPACE,UDOT,SWAP ; LIT: get word
FDB BRAN,SEE28
SEE27:
FDB DUPP,DOLIT,DOTQP,EQUAL ; ." ..."
FDB OVER,DOLIT,ABORQ,EQUAL,ORR ; ABORT" ..."
FDB OVER,DOLIT,STRQP,EQUAL,ORR ; $" ..."
FDB QBRAN,SEE29 ; last case aalway to SEE29!!
FDB SWAP,CELLP ; print compiled string
FDB DUPP,COUNT,TYPES,DOCLIT
FCB 34
FDB EMIT
FDB COUNT,PLUS,CELLM,SWAP ; adjust continuation address
SEE28 FDB DROP ; LEAVL, without EXIT check
FDB BRAN,SEE4
SEE29 FDB DROP ; ELSE
FDB BRAN,SEE31 ; cleanup, check for EXIT
SEE3 FDB DUPP,AT,UDOT ;display number
FDB BRAN,SEE4
SEE31 FDB DUPP,AT,DOLIT,EXIT,XORR ; stop on EXIT word
; but not if SEE decompiles itself!
FDB QBRAN,SEE5
SEE4 FDB NUFQ ;user control
FDB QBRAN,SEE1
SEE5 FDB RFROM,BASE,STORE,DROP,EXIT
; WORDS ( -- )
; Display the names in the context vocabulary.
FDB WORDS,L2220
L2230 FCB 5,"WORDS"
WORDS jsr DOLST
FDB CR,CNTXT,AT ;only in context
WORS1 FDB AT,QDUP ;?at end of list
FDB QBRAN,WORS2
FDB DUPP,SPACE,DOTID ;display a name
FDB CELLM,NUFQ ;user control
FDB QBRAN,WORS1
FDB DROP
WORS2 FDB EXIT
;; Hardware reset
; VER ( -- n )
; Return the version number of this implementation.
FDB VERSN,L2230
L2240 FCB 3,"VER"
VERSN jsr DOLST
FDB DOLIT,VER*256+EXT,EXIT
; hi ( -- )
; Display the sign-on message of eForth.
FDB HI,L2240
L2250 FCB 2,"hi"
HI jsr DOLST
FDB STOIO,CR,DOTQP ;initialize I/O
FCB 11,"eForth v" ;model
FCB VER+"0",".",EXT+"0" ;version
FDB CR,EXIT
; 'BOOT ( -- a )
; The application startup vector.
FDB TBOOT,L2250
L2260 FCB 5,"'BOOT"
TBOOT:
;;;; jsr DOLST
;;;; FDB DOVAR
jsr FDOVAR
FDB HI ;application to boot
; COLD ( -- )
; The hilevel cold start sequence.
FDB COLD,L2260
L2270 FCB 4,"COLD"
COLD jsr DOLST
COLD1 FDB DOLIT,UZERO,DOLIT,UPP
FDB DOLIT,ULAST-UZERO,CMOVE ;initialize user area
FDB PRESE ;initialize data stack and TIB
FDB TBOOT,ATEXE ;application boot
FDB FORTH,CNTXT,AT,DUPP ;initialize search order
FDB CRRNT,DSTOR,OVERT
; TEST
; FDB DOLIT,10,DOLIT,1
; FDB DODO
;
FDB QUIT ;start interpretation
FDB BRAN,COLD1 ;just in case
;===============================================================
LASTN EQU L2270 ;last name address in name dictionary
NTOP EQU NAMEE ;next available memory in name dictionary
CTOP EQU $ ;next available memory in code dictionary
; END ORIG
;===============================================================
{"123":true,"124":true,"185":true}
:10FFF000E000E000E000E000E000E000E000E00001
:0DE0000010CE6E60108E6F70CEFC6D3780FC
:10E015006E606F70E0ADE0CCF198F155E0CCF300A7
:10E02500000A00000000000000006E700000F2B25F
:08E03500EC8200000000000075
:0AE04D0000000000FC956C00FC656B
:10E080003406F683FEC40227F9B783FF350639B696
:10E0900083FE84012703B683FF39E0A20000034218
:10E0A00059457EE000E0ADE09E033F52588E0000EF
:10E0B000BDE08F2604AFE337801F894FEDE3301FAB
:10E0C000AFE33780E0CCE0A903545821ECE1C1FF75
:10E0D0002602C6201F98BDE0803780E0E3E0C80339
:10E0E00021494F3780E0EFE0DF45646F4C495437FA
:10E0F0000634063780E100E0E946646F434C49543A
:10E1000037041D34063780E112E0F946646F4C494C
:10E110005354EFA335403780E121E10B446E65781D
:10E1200074ECA48300012506EDA4EEC437803122EF
:10E1300033423780E140E11C473F6272616E6368A1
:10E14000ECE1270433423780EEC43780E157E138F1
:10E15000466272616E6368EEC43780E167E1500722
:10E160004558454355544539E171E15F04455849E7
:10E1700054EEA13780E17BE16C012135103506EDCD
:10E18000843780E189E1790140ECF4EDE43780E106
:10E1900096E18702432135103506E7843780E1A5F3
:10E1A000E193024340E6F44FEDE43780E1B4E1A2AD
:10E1B0000352504034203780E1C0E1B00352502177
:10E1C00035203780E1CBE1BC02523EECA13406376A
:10E1D00080E1DEE1C80149E1DEE1D5025240ECA474
:10E1E00034063780E1EBE1DB023E523506EDA33722
:10E1F00080E1F9E1E8035350401F40EDE33780E24E
:10E2000007E1F50353502110EEE43780E215E203F5
:10E210000444524F5032623780E221E210034455E9
:10E2200050ECE434063780E230E21D04535741508D
:10E23000ECE4AE62ED62AFE43780E243E22B044FE0
:10E24000564552EC6234063780E250E23E02303CE2
:10E25000E6E41D1F89EDE43780E260E24D02303DC7
:10E260008EFFFFECE427038E0000AFE43780E276F8
:10E27000E25D03414E44ECE1A4E4E461EDE4378067
:10E28000E287E272024F52ECE1AAE4EA61EDE43780
:10E2900080E299E28403584F52ECE1A8E4E861ED92
:10E2A000E43780E2AAE29502442BEC62E366ED6675
:10E2B000ECE4E965A964ED6432643780E2C3E2A767
:10E2C00002442DBDE112E619E2AAE171E2D4E2C0F6
:10E2D00003554D2BECE4E362ED62CC0000C900ED88
:10E2E000E43780E2EFE2D047646F434F4E5354EC83
:10E2F000F4EDE43780E2FBE2E70130BDE2EF00003D
:10E30000E306E2F90131BDE2EF0001E311E30401AC
:10E3100032BDE2EF0002E31DE30F022D31BDE2EF5B
:10E32000FFFFE32CE31A45646F564152BDE112E151
:10E33000CBE1713780E33CE326025550BDE3336FF8
:10E3400080E34CE33945646F55534552BDE112E11A
:10E35000CBE189E33CE189E5CFE171ECF4F3E33F04
:10E36000EDE43780E36CE34503535030BDE35B00DD
:10E3700008E379E36803525030BDE35B000AE388A9
:10E38000E37505273F4B4559BDE35B000CE397E37D
:10E39000820527454D4954BDE35B000EE3A8E39198
:10E3A0000727455850454354BDE35B0010E3B6E3EF
:10E3B000A00427544150BDE35B0012E3C5E3B1055F
:10E3C000274543484FBDE35B0014E3D6E3BF07276F
:10E3D00050524F4D5054BDE35B0016E3E4E3CE04CE
:10E3E00042415345BDE35B0018E3F1E3DF43746D45
:10E3F00070BDE35B001AE3FFE3ED045350414EBDF3
:10E40000E35B001CE40CE3FA033E494EBDE35B0012
:10E410001EE41AE4080423544942BDE35B0020E4EF
:10E4200027E41503435350BDE35B0024E436E423A3
:10E4300005274556414CBDE35B0026E447E4300721
:10E44000274E554D424552BDE35B0028E454E43F5E
:10E4500003484C44BDE35B002AE465E450074841AF
:10E460004E444C4552BDE35B002CE476E45D07432B
:10E470004F4E54455854BDE35B002EE487E46E07CD
:10E4800043555252454E54BDE35B0040E493E47F54
:10E49000024350BDE35B0044E49FE490024E50BD54
:10E4A000E35B0046E4ADE49C044C415354BDE35BA4
:10E4B0000048E4BCE4A845646F564F43BDE112E157
:10E4C000CBE476E17BE171E4D1E4B605464F5254EA
:10E4D00048BDE112E4BC00000000E4E3E4CB043FEB
:10E4E000445550BDE112E221E140E4EEE221E17148
:10E4F000E4F8E4DE03524F54BDE112E1EBE230E117
:10E50000CBE230E171E50FE4F4053244524F50BDE7
:10E51000E112E215E215E171E521E5090432445505
:10E5200050BDE112E243E243E171E535E51C064CE2
:10E530005348494654AEE1270AECE45849301F26B7
:10E54000FAEDE43780E550E52E065253484946542B
:10E55000AEE1270AECE44456301F26FAEDE437809A
:10E56000E567E549023E3CE6E4A661EDE43780E577
:10E5700078E564043235362FE6E44FEDE43780E584
:10E5800088E573043235362AA6615FEDE43780E50D
:10E5900096E58302312BECE4C30001EDE43780E51E
:10E5A000A6E59302312DECE4830001EDE43780E52C
:10E5B000B6E5A302322A686169603780E5C3E5B336
:10E5C00002322F676066613780E5CFE5C0012BEC32
:10E5D000E1E3E4EDE43780E5DFE5CD034E4F54633E
:10E5E000E463613780ECE44353EDE43780E5F8E51C
:10E5F000DB064E4547415445CC0000A3E4EDE4372B
:10E60000806061260460E4378063E43780E619E5C2
:10E61000F107444E4547415445CC0000A362ED62EA
:10E62000CC0000E261A2E4EDE43780E631E61101BE
:10E630002DEC62A3E1EDE43780E641E62F03414291
:10E6400053BDE112E221E250E140E64EE5F8E1710E
:10E65000E656E63D013D8EFFFF350610A3E4270395
:10E660008E0000AFE43780E66EE65402553C8EFF24
:10E67000FF350610A3E422038E0000AFE43780E6E6
:10E6800085E66B013C8EFFFF350610A3E42E038E5A
:10E690000000AFE43780E69EE683034D4158BDE1BC
:10E6A00012E521E685E140E6ABE230E215E171E6F4
:10E6B000B7E69A034D494EBDE112E521E230E68509
:10E6C000E140E6C6E230E215E171E6D5E6B3065771
:10E6D000495448494EBDE112E243E631E1EBE631EF
:10E6E000E1CBE66EE171E6EDE6CE02552F8E00102D
:10E6F000EC6210A3E4242468656964594925091073
:10E70000A3E424041CFE2004A3E41A0169656964DF
:10E71000301F26E7AE6410A3E42505ECE48EFFFF6E
:10E720003262AFE4ED623780E733E6EA06554D2FFB
:10E730004D4F447EE6EDBDE112E521E66EE140E796
:10E7400089E5F8E0EF000FE1EBE1EBE221E2D4E153
:10E75000EBE1EBE221E2D4E1CBE5CFE221E1CBE159
:10E76000DEE230E1EBE2D4E1CBE287E140E77BE1BE
:10E77000EBE215E596E1CBE157E77DE215E1CBE170
:10E7800021E749E215E230E171E215E50FE0EFFF24
:10E79000FFE221E171E79FE72C054D2F4D4F44BD6E
:10E7A000E112E221E250E221E1EBE140E7B6E5F8D7
:10E7B000E1EBE619E1CBE1EBE221E250E140E7C415
:10E7C000E1DEE5CFE1CBE733E1CBE140E7D4E23076
:10E7D000E5F8E230E171E7DFE799042F4D4F44BDE2
:10E7E000E112E243E250E230E79FE171E7F4E7DA59
:10E7F000034D4F44BDE112E7DFE215E171E803E7A5
:10E80000F0012FBDE112E7DFE230E215E171E81619
:10E81000E80103554D2A8E00114F5F20062402E3C4
:10E82000E4465666626663301F26F2EDE43780E800
:10E8300038E812045F554D2ABDE112E0EF0000E216
:10E8400030E0EF000FE1EBE221E2D4E1EBE1EBE2BB
:10E8500021E2D4E1CBE5CFE1CBE140E867E1EBE2B7
:10E8600043E2D4E1CBE5CFE121E847E4F8E215E16A
:10E8700071E877E833012ABDE112E887E215E1711A
:10E88000E887E875024D2ABDE112E521E299E250E0
:10E89000E1EBE641E230E641E816E1CBE140E8A2F7
:10E8A000E619E171E8AEE884052A2F4D4F44BDE139
:10E8B00012E1EBE887E1CBE79FE171E8C2E8A8024B
:10E8C0002A2FBDE112E8AEE230E215E171E8D7E8A7
:10E8D000BF0543454C4C2BBDE112E10002E5CFE101
:10E8E00071E8EBE8D10543454C4C2DBDE112E10048
:10E8F000FEE5CFE171E8FFE8E50543454C4C53BD2B
:10E90000E112E10002E877E171E915E8F907414C0D
:10E9100049474E4544BDE112E171E921E90D02424A
:10E920004CBDE2EFE92EE91E053E43484152BDE1F0
:10E9300012E0EF007FE276E221E1007FE921E6D5F7
:10E94000E140E948E215E0EFE171E954E9280544C6
:10E9500045505448BDE112E1F9E36CE189E230E64B
:10E9600031E10002E803E171E971E94E04504943E5
:10E970004BECE4C300015849AEEBAFE43780E987C4
:10E98000E96C04524F4C4CBDE112E221E311E685E3
:10E99000E140E99AE215E157E9A8E230E1EBE3064C
:10E9A000E631E987E1CBE230E171E9B1E982022B9E
:10E9B0002135103506E384ED843780E9C2E9AE02E3
:10E9C0003221BDE112E230E243E17BE8D7E17BE1B5
:10E9D00071E9D8E9BF023240BDE112E221E8D7E196
:10E9E00089E230E189E171E9F1E9D505434F554EFE
:10E9F00054BDE112E221E596E230E1A5E171EA07BA
:10EA0000E9EB0448455245BDE112E493E189E17127
:10EA1000EA18EA0203504144BDE112EA07E0EF00C0
:10EA200050E5CFE171EA2DEA1403544942BDE112E9
:10EA3000E41AE8D7E189E171EA45EA290840455836
:10EA40004543555445BDE112E189E4E3E140EA5212
:10EA5000E167E171EA5EEA3C05434D4F56457EEAC7
:10EA600081ECE427185D27026CE4AE62EF62EE648D
:10EA7000A6C0A7805A26F96AE426F5EE6232663708
:10EA800080ECE4AE6210AFE4EF6210AE6444563442
:10EA90000127014C830000270AEEA1EF815A26F9D5
:10EAA0004A26F635012404A6A4A7843560326237CD
:10EAB00080EABAEA580446494C4CEC6227125D27BA
:10EAC000026C62AE64A661A7805A26FB6A6226F7D2
:10EAD00032663780EAE2EAB5092D545241494C4981
:10EAE0004E47BDE112E1EBE157EB01E921E243E1E1
:10EAF000DEE5CFE1A5E685E140EB01E1CBE596E17E
:10EB000071E121EAEBE2FBE171EB13EAD805504138
:10EB1000434B24BDE112E221E1EBE521E196E596CC
:10EB2000E521E5CFE2FBE230E196E230EA5EE1CBBF
:10EB3000E171EB3CEB0D054449474954BDE112E15D
:10EB40000009E243E685E10007E276E5CFE0EFE584
:10EB5000CFE171EB5FEB360745585452414354BD4A
:10EB6000E112E2FBE230E733E230EB3CE171EB75BE
:10EB7000EB57023C23BDE112EA18E454E17BE1715A
:10EB8000EB89EB7204484F4C44BDE112E454E18937
:10EB9000E5A6E221E454E17BE196E171EBA2EB848E
:10EBA0000123BDE112E3E4E189EB5FEB89E171EB65
:10EBB000B6EBA0022353BDE112EBA2E221E140EB50
:10EBC000C5E157EBB9E171EBD0EBB3045349474EC4
:10EBD000BDE112E250E140EBDDE0EFEB89E171EBEA
:10EBE000E6EBCB02233EBDE112E215E454E189EAF3
:10EBF00018E243E631E171EBFFEBE303737472BD9E
:10EC0000E112E221E1EBE641EB75EBB6E1CBEBD0B3
:10EC1000EBE6E171EC1CEBFB03484558BDE112E16A
:10EC20000010E3E4E17BE171EC34EC180744454368
:10EC3000494D414CBDE112E1000AE3E4E17BE171A1
:10EC4000EC4BEC2C0644494749543FBDE112E1EB43
:10EC5000E0EFE631E10009E243E685E140EC6EE1F8
:10EC60000007E631E221E0EF000AE685E287E221D3
:10EC7000E1CBE66EE171EC82EC44074E554D424526
:10EC8000523FBDE112E3E4E189E1EBE2FBE243E95B
:10EC9000F1E243E1A5E0EFE656E140ECA7EC1CE22F
:10ECA00030E596E230E5A6E243E1A5E0EFE656E185
:10ECB000EBE230E1DEE631E230E1DEE5CFE4E3E154
:10ECC00040ED07E5A6E1EBE221E1EBE1A5E3E4E1BC
:10ECD00089EC4BE140ECFBE230E3E4E189E877E5E5
:10ECE000CFE1CBE596E121ECC7E1DEE230E215E1D0
:10ECF00040ECF5E5F8E230E157ED05E1CBE1CBE59D
:10ED00000FE50FE2FBE221E1CBE50FE1CBE3E4E12C
:10ED10007BE171ED1CEC7A043F4B4559BDE112E3F8
:10ED200088EA45E171ED2DED17034B4559BDE11220
:10ED3000ED1CE140ED30E171ED41ED2904454D4917
:10ED400054BDE112E397EA45E171ED53ED3C044E09
:10ED500055463FBDE112ED1CE221E140ED67E50FB4
:10ED6000ED2DE1000AE656E171ED72ED4E045041E1
:10ED70004345BDE112E1000BED41E171ED86ED6D22
:10ED8000055350414345BDE112E921ED41E171EDEB
:10ED90009AED8006535041434553BDE112E2FBE634
:10EDA0009EE1EBE157EDA9ED86E121EDA7E171EDE3
:10EDB000B8ED930454595045BDE112E1EBE157ED34
:10EDC000C9E221E1A5ED41E596E121EDC1E215E1C0
:10EDD00071EDD8EDB3024352BDE112E1000AED41FD
:10EDE000E1000DED41E171EDEFEDD543646F24BD20
:10EDF000E112E1CBE1DEE1CBE9F1E5CFE915E1EBB1
:10EE0000E230E1EBE171EE0EEDEB4324227CBDE15B
:10EE100012EDEFE171EE1DEE0A432E227CBDE112F0
:10EE2000EDEFE9F1EDB8E171EE2FEE19022E52BDD2
:10EE3000E112E1EBEBFFE1CBE243E631ED9AEDB815
:10EE4000E171EE4AEE2C03552E52BDE112E1EBEBDF
:10EE500075EBB6EBE6E1CBE243E631ED9AEDB8E1D6
:10EE600071EE68EE4602552EBDE112EB75EBB6EB86
:10EE7000E6ED86EDB8E171EE7DEE65012EBDE112A5
:10EE8000E3E4E189E1000AE299E140EE91EE68E114
:10EE900071EBFFED86EDB8E171EE9FEE7B013FBDBA
:10EEA000E112E189EE7DE171EEB2EE9D05706172D5
:10EEB0007365BDE112E3F1E17BE243E1EBE221E1C5
:10EEC00040EF3BE5A6E3F1E189E921E656E140EEBA
:10EED000F5E1EBE921E243E1A5E631E250E5DFE1CE
:10EEE00040EEF3E596E121EED3E1CBE215E2FBE261
:10EEF00021E171E1CBE243E230E1EBE3F1E189E2D0
:10EF000043E1A5E631E3F1E189E921E656E140EF8D
:10EF100013E250E140EF25E596E121EEFBE221E12D
:10EF2000EBE157EF2FE1CBE215E221E596E1EBE2D1
:10EF300043E631E1CBE1CBE631E171E243E1CBE6FF
:10EF400031E171EF4DEEAC055041525345BDE11238
:10EF5000E1EBEA2DE40CE189E5CFE41AE189E40C68
:10EF6000E189E631E1CBEEB2E40CE9B1E171EF7594
:10EF7000EF47822E28BDE112E0EFEF4DEDB8E171D1
:10EF8000EF86EF728128BDE112E0EFEF4DE50FE172
:10EF900071EF97EF84815CBDE112E41AE189E40C22
:10EFA000E17BE171EFADEF950443484152BDE112C1
:10EFB000E921EF4DE215E1A5E171EFC4EFA8055499
:10EFC0004F4B454EBDE112E921EF4DE1001FE6B781
:10EFD000E49FE189E243E631E8EBEB13E171EFE70F
:10EFE000EFBE04574F5244BDE112EF4DEA07EB1359
:10EFF000E171EFFCEFE2054E414D453EBDE112E807
:10F00000EBE8EBE189E171F011EFF60553414D4575
:10F010003FBDE112E1EBE157F038E243E1DEE5CF3D
:10F02000E1A5E243E1DEE5CFE1A5E631E4E3E1403D
:10F03000F038E1CBE215E171E121F01AE0EF0000D8
:10F04000E171F04BF00B0466696E64BDE112E230D1
:10F05000E221E1A5E5A6E3F1E17BE221E189E1EB33
:10F06000E8D7E230E189E221E140F092E221E18952
:10F07000E0EF1F7FE276E1DEE299E140F086E8D73B
:10F08000E31DE157F08EE8D7E3F1E189F011E15794
:10F09000F09EE1CBE215E230E8EBE230E171E140D5
:10F0A000F0AAE8EBE8EBE157F064E1CBE215E230DF
:10F0B000E215E8EBE221EFFCE230E171F0C6F04648
:10F0C000054E414D453FBDE112E476E221E9D8E22B
:10F0D00099E140F0D7E8EBE1EBE1CBE8D7E221E1C1
:10F0E000EBE189E4E3E140F0F7F04BE4E3E140F0E9
:10F0F000D9E1CBE215E171E1CBE215E2FBE171F17F
:10F1000006F0C0025E48BDE112E1EBE243E1CBE272
:10F1100030E243E299E140F131E0EF0008E3C5EA73
:10F1200045E5A6E921E3C5EA45E0EF0008E3C5EAC5
:10F1300045E171F13BF10303544150BDE112E2217D
:10F14000E3C5EA45E243E196E596E171F155F13711
:10F15000046B544150BDE112E221E1000AE299E161
:10F1600040F183E221E0EF0008E299E230E0EF00B5
:10F170007FE299E276E140F17FE921F13BE171F133
:10F1800006E171E215E230E215E221E171F198F158
:10F190005006414343455054BDE112E243E5CFE2FE
:10F1A00043E521E299E140F1C7ED2DE221E921E0BB
:10F1B000EF007FE6D5E140F1BFF13BE157F1C3E35A
:10F1C000B6EA45E157F1A1E215E243E631E171F11A
:10F1D000DAF19106455850454354BDE112E3A8EADF
:10F1E00045E3FFE17BE215E171F1F3F1D305515500
:10F1F000455259BDE112EA2DE10050E3A8EA45E489
:10F200001AE17BE215E2FBE40CE17BE171F217F11C
:10F21000ED054341544348BDE112E1F9E1EBE465FA
:10F22000E189E1EBE1B4E465E17BE167E1CBE46531
:10F23000E17BE1CBE215E2FBE171F244F21105540E
:10F2400048524F57BDE112E465E189E1C0E1CBE4EA
:10F2500065E17BE1CBE230E1EBE207E215E1CBE1F6
:10F2600071F26BF23E054E554C4C24BDE333000069
:10F27000636F796F7465F280F2650541424F5254B5
:10F28000BDE112F26BF244F292F27A4661626F7261
:10F290007422BDE112E140F29DEDEFF244EDEFE2A8
:10F2A00015E171F2B2F28B0A24494E544552505284
:10F2B0004554BDE112F0C6E4E3E140F2D9E189E052
:10F2C000EF4000E276F2920D20636F6D70696C651D
:10F2D000206F6E6C79E167E171E447EA45E140F245
:10F2E000E3E171F244F2EBF2A7815BBDE112E0EFE2
:10F2F000F2B2E436E17BE171F300F2E9032E4F4B09
:10F30000BDE112E0EFF2B2E436E189E656E140F306
:10F3100017EE1D03206F6BEDD8E171F326F2FC06AA
:10F320003F535441434BBDE112E954E250F2920A7B
:10F3300020756E646572666C6F77E171F345F31F3B
:10F34000044556414CBDE112EFC4E221E1A5E14084
:10F35000F35CE436EA45F326E157F348E215E3D6D9
:10F36000EA45E171F36FF34006505245534554BDF1
:10F37000E112E36CE189E207E0EF6E70E41AE8D78E
:10F38000E17BE171F38CF3684378696FBDE112E0D2
:10F39000EFF198E3A8E9C2E3C5E9C2E171F3A6F38E
:10F3A000880446494C45BDE112E0EFED72E0EFE222
:10F3B00015E0EFF155F38CE171F3C2F3A10448417C
:10F3C0004E44BDE112E0EFF300E0EFED41E0EFF17C
:10F3D00055F38CE171F3DDF3BD03492F4FBDE333EA
:10F3E000E0ADE0CCF3F0F3D907434F4E534F4C451B
:10F3F000BDE112F3DDE9D8E388E9C2F3C2E171F4BB
:10F4000008F3E80451554954BDE112E379E189E17B
:10F41000C0F2EBF1F3E0EFF345F217E4E3E140F47F
:10F4200013E3D6E189E1EBF3F0F26BE243E299E119
:10F4300040F43FED86E9F1EDB8EE1D03203F20E1F9
:10F44000CBE0EFF300E299E140F451E0EF001BED77
:10F4500041F36FE157F411F45DF4030127BDE112AC
:10F46000EFC4F0C6E140F46AE171F244F476F45B73
:10F4700005414C4C4F54BDE112E493E9B1E171F404
:10F4800085F470012CBDE112EA07E221E8D7E4938C
:10F49000E17BE17BE171F4A4F483895B434F4D5040
:10F4A000494C455DBDE112F45DF485E171F4B9F4B8
:10F4B0009A47434F4D50494C45BDE112E1CBE22103
:10F4C000E189F485E8D7E1EBE171F4D6F4B1874C3A
:10F4D00049544552414CBDE112F4B9E0EFF485E1E5
:10F4E00071F4E9F4CE03242C22BDE112E0EF0022F6
:10F4F000EFE7E9F1E5CFE915E493E17BE171F50A86
:10F50000F4E58752454355525345BDE112E4ADE160
:10F5100089EFFCF485E171F51EF50282444FBDE1EF
:10F5200012F4B9F5A8EA07E306E171F533F51B8398
:10F530003F444FBDE112F4B9F54EEA07F4B90000BB
:10F54000E311E171F54EF52F05283F444F293506AB
:10F5500010A3E42D063262EEC437803510AFA3ED60
:10F56000A333423780F56DF548832D444FBDE1123A
:10F57000F4B9F588EA07F4B90000E311E171F58800
:10F58000F56905282D444F29350610A3E42E0632CF
:10F5900062EEC437803510AFA3EDA333423780F558
:10F5A000A8F5820428444F293516AFA3EDA3378070
:10F5B000F5BBF5A306284C4F4F5029CC0001201D68
:10F5C000F5CCF5B487282B4C4F4F5029ECE12A0D90
:10F5D000E3A410A3222F13EDA4EEC43780E3A410FC
:10F5E000A3222C06EDA4EEC43780334231243780A9
:10F5F000F5F9F5C4844C4F4F50BDE112F4B9F5BB99
:10F60000E311E656E140F612EA07E8D7E243E17B70
:10F61000E8D7F485E171F620F5F4852B4C4F4F5077
:10F62000BDE112F4B9F5CCE311E656E140F639EA52
:10F6300007E8D7E243E17BE8D7F485E171F647F6C6
:10F640001A054C45415645ECA4ED223780F655F697
:10F650001A83464F52BDE112F4B9E1EBEA07E171BA
:10F66000F66AF65185424547494EBDE112EA07E187
:10F6700071F67AF664844E455854BDE112F4B9E14E
:10F6800021F485E171F68FF67585554E54494CBDD0
:10F69000E112F4B9E140F485E171F6A4F6898541FF
:10F6A0004741494EBDE112F4B9E157F485E171F6E5
:10F6B000B6F69E824946BDE112F4B9E140EA07E29E
:10F6C000FBF485E171F6CFF6B3854148454144BD71
:10F6D000E112F4B9E157EA07E2FBF485E171F6E9DA
:10F6E000F6C986524550454154BDE112F6A4EA07D9
:10F6F000E230E17BE171F6FFF6E2845448454EBD0D
:10F70000E112EA07E230E17BE171F712F6FA834198
:10F710004654BDE112E215F6CFF66AE230E171F728
:10F7200028F70E84454C5345BDE112F6CFE230F682
:10F73000FFE171F73DF723855748494C45BDE1127C
:10F74000F6B6E230E171F751F7378641424F525435
:10F7500022BDE112F4B9F292F4E9E171F763F74ADC
:10F76000822422BDE112F4B9EE0EF4E9E171F775DD
:10F77000F760822E22BDE112F4B9EE1DF4E9E171C9
:10F78000F78CF772073F554E49515545BDE112E2DE
:10F7900021F0C6E140F7A7EE1D07207265446566BB
:10F7A00020E243E9F1EDB8E215E171F7B3F7840324
:10F7B000242C6EBDE112E221E1A5E140F7E4F78CD3
:10F7C000E221E4ADE17BEA07E915E230E8EBE4870A
:10F7D000E189E189E243E17BE8EBE221E49FE17B1F
:10F7E000E17BE171EE0E05206E616D65F244F7FB81
:10F7F000F7AF0824434F4D50494C45BDE112F0C6C8
:10F80000E4E3E140F81AE189E0EF8000E276E140CC
:10F81000F816E167E171F485E171E447EA45E140FA
:10F82000F826F4D6E171F244F832F7F2054F564566
:10F830005254BDE112E4ADE189E487E189E17BE165
:10F8400071F847F82CC13BBDE112F4B9E171F2EB5C
:10F85000F832E171F85AF845015DBDE112E0EFF7C9
:10F86000FBE436E17BE171F871F8580563616C6C7B
:10F870002CBDE112E100BDEA07E196E306F476F45F
:10F8800085E171F889F86B013ABDE112EFC4F7B375
:10F89000E0EFE112F871F85AE171F8A8F887094928
:10F8A0004D4D454449415445BDE112E0EF8000E42F
:10F8B000ADE189E189E287E4ADE189E17BE171F8BD
:10F8C000C8F89E0455534552BDE112EFC4F7B3F892
:10F8D00032E0EFE35BF871F485E171F8E6F8C30616
:10F8E000435245415445BDE112EFC4F7B3F832E04D
:10F8F000EFE333F871E171F904F8DF08564152493A
:10F9000041424C45BDE112F8E6E2FBF485E171F9B4
:10F910001CF8FB08434F4E5354414E54BDE112EFC7
:10F92000C4F7B3F832E0EFE2EFF871F485E171F972
:10F9300039F913055F54595045BDE112E1EBE15728
:10F94000F94CE221E1A5E92EED41E596E121F942EC
:10F95000E215E171F95CF93303646D2BBDE112E24C
:10F9600043E0EF0004EE4AED86E1EBE157F97BE27C
:10F9700021E1A5E0EF0003EE4AE596E121F96FE110
:10F9800071F98AF9580444554D50BDE112E3E4E1A0
:10F9900089E1EBEC1CE10010E803E1EBEDD8E100BC
:10F9A00010E521F95CE4F8E4F8E311ED9AF939ED9A
:10F9B00053E5DFE140F9BFE121F99CE157F9C3E1EB
:10F9C000CBE215E215E1CBE3E4E17BE171F9D4F997
:10F9D00085022E53BDE112EDD8E954E1EBE157F970
:10F9E000E7E1DEE971EE7DE121F9E1EE1D04203C65
:10F9F0007370E171F9FDF9D10421435350BDE11257
:10FA0000E1F9E427E17BE171FA11F9F8043F43538E
:10FA100050BDE112E1F9E427E189E299F29206731F
:10FA20007461636B73E171FA31FA0C053E4E414D1E
:10FA300045BDE112E487E8D7E189E4E3E140FA6EED
:10FA4000E521E189E221E140FA5AE521EFFCE29962
:10FA5000E140FA5AE8EBE157FA42E230E215E4E31A
:10FA6000E140FA36E230E215E230E215E171E215EA
:10FA7000E0EF0000E171FA7EFA2B032E4944BDE16C
:10FA800012E4E3E140FA92E9F1E1001FE276F9398C
:10FA9000E171EE1D09207B6E6F4E616D657DE17138
:10FAA000FAA8FA7A03534545BDE112F45DE596E301
:10FAB000E4E189E1EBEC1CE221E189E0EFE112E213
:10FAC00099E140FAD7EDD8EE1D09205052494D4931
:10FAD000545645E157FBEAEDD8E8D7E221EE68ED50
:10FAE00086E221E189E221E140FAEDFA31E4E3E145
:10FAF00040FBCCED86FA7EE221E189E221E0EFE1F4
:10FB000000E656E140FB1BE243E8D7E1A5ED86EEB7
:10FB100068E230E596E230E157FBC0E221E0EFE039
:10FB2000EFE656E243E0EFE140E656E287E243E0EB
:10FB3000EFE157E656E287E243E0EFE121E656E2E5
:10FB400087E243E0EFF5BBE656E287E243E0EFF5FC
:10FB5000CCE656E287E243E0EFF5A8E656E287E21C
:10FB600043E0EFF54EE656E287E243E0EFF588E644
:10FB700056E287E140FB89E230E8D7E221E189EDF6
:10FB800086EE68E230E157FBC0E221E0EFEE1DE6D1
:10FB900056E243E0EFF292E656E287E243E0EFEE10
:10FBA0000EE656E287E140FBC6E230E8D7E221E903
:10FBB000F1EDB8E10022ED41E9F1E5CFE8EBE2300B
:10FBC000E215E157FBE4E215E157FBD6E221E189BA
:10FBD000EE68E157FBE4E221E189E0EFE171E299AF
:10FBE000E140FBEAED53E140FAD7E1CBE3E4E17B0E
:10FBF000E215E171FBFEFAA405574F524453BDE1F3
:10FC000012EDD8E476E189E189E4E3E140FC1FE20A
:10FC100021ED86FA7EE8EBED53E140FC07E215E1C9
:10FC200071FC29FBF803564552BDE112E0EF0100DB
:10FC3000E171FC39FC25026869BDE112E0E3EDD811
:10FC4000EE1D0B65466F7274682076312E30EDD84C
:10FC5000E171FC5CFC360527424F4F54BDE333FC99
:10FC600039FC6AFC5604434F4C44BDE112E0EFE01E
:10FC70000DE0EF6F80E0EF004AEA5EF36FFC5CEAB4
:10FC800045E4D1E476E189E221E487E9C2F832F47F
:05FC900008E157FC6DC6
:00000001FF
0000 ;TITLE 6809 eForth
0000 ;.engine kilo
0000 ; $Id: ef09.asm,v 1.1 1997/11/24 02:56:01 root Exp $
0000 ;
0000 ;===============================================================
0000 ;
0000 ; eForth 1.0 by Bill Muench and C. H. Ting, 1990
0000 ; Much of the code is derived from the following sources:
0000 ; 8086 figForth by Thomas Newman, 1981 and Joe smith, 1983
0000 ; aFORTH by John Rible
0000 ; bFORTH by Bill Muench
0000 ;
0000 ; The goal of this implementation is to provide a simple eForth Model
0000 ; which can be ported easily to many 8, 16, 24 and 32 bit CPU's.
0000 ; The following attributes make it suitable for CPU"s of the "90:
0000 ;
0000 ; small machine dependent kernel and portable high level code
0000 ; source code in the MASM format
0000 ; direct threaded code
0000 ; separated code and name dictionaries
0000 ; simple vectored terminal and file interface to host computer
0000 ; aligned with the proposed ANS Forth Standard
0000 ; easy upgrade path to optimize for specific CPU
0000 ;
0000 ; You are invited to implement this Model on your favorite CPU and
0000 ; contribute it to the eForth Library for public use. You may use
0000 ; a portable implementation to advertise more sophisticated and
0000 ; optimized version for commercial purposes. However, you are
0000 ; expected to implement the Model faithfully. The eForth Working
0000 ; Group reserves the right to reject implementation which deviates
0000 ; significantly from this Model.
0000 ;
0000 ; As the ANS Forth Standard is still evolving, this Model will
0000 ; change accordingly. Implementations must state clearly the
0000 ; version number of the Model being tracked.
0000 ;
0000 ; Representing the eForth Working Group in the Silicon Valley FIG Chapter.
0000 ; Send contributions to:
0000 ;
0000 ; Dr. C. H. Ting
0000 ; 156 14th Avenue
0000 ; San Mateo, CA 94402
0000 ; (415) 571-7639
0000 ;
0000 ;===============================================================
0000 ; $Log: ef09.asm,v $
0000 ; Revision 1.1 1997/11/24 02:56:01 root
0000 ; Initial revision
0000 ;
0000 ;===============================================================
0000 ; Version control
0000 ;
0000 VER: EQU 1
0000 EXT: EQU 0
0000 ;
0000 ; Constants
0000 ;
0000 TRUEE: EQU -1
0000 ;
0000 COMPO: EQU $40
0000 IMEDD: EQU $80
0000 MASKK: EQU $1F7F
0000 ;
0000 CFAOFF: EQU 3
0000 ; (length of JSR)
0000 CELLL: EQU 2
0000 BASEE: EQU 10
0000 VOCSS: EQU 8
0000 ;
0000 BKSPP: EQU 8
0000 BKSPP2: EQU 127
0000 LF: EQU 13
0000 CRR: EQU 10
0000 ERR: EQU 27
0000 TIC: EQU 39
0000 ;
0000 CALLL: EQU $12BD
0000 ;
0000 ; Memory allocation
0000 ;
0000 EM: EQU $7000
0000 US: EQU 64*CELLL
0000 RTS: EQU 128*CELLL ;return stack/TIB size
0000 ;
0000 UPP: EQU EM-US
0000 RPP: EQU UPP-8*CELLL
0000 TIBB: EQU RPP-RTS
0000 SPP: EQU TIBB-8*CELLL
0000 ;
0000 COLDD: EQU $e000
0000 CODEE: EQU COLDD+US
0000 NAMEE: EQU EM-$0400
0000 ;
0000 ; Initialize assembly variables
0000 ;
0000 ;
0000 ; Main entry points and COLD start data
0000 ;
0000 ;
FFF0 .ORG 0xfff0
FFF0 ;reserved
FFF0 E0 00 DW reset
FFF2 ;SWI3
FFF2 E0 00 DW reset
FFF4 ;SWI2
FFF4 E0 00 DW reset
FFF6 ;FIRQ
FFF6 E0 00 DW reset
FFF8 ;IRQ
FFF8 E0 00 DW reset
FFFA ;SWI
FFFA E0 00 DW reset
FFFC ;NMI
FFFC E0 00 DW reset
FFFE ;RES
FFFE E0 00 DW reset
10000 ;
10000 ;
10000 ;
E000 .ORG COLDD ;beginning of cold boot area
E000 ; SETDP 0
E000 .ENT $
E000 .ENGINE kilo
E000 RESET:
E000 10 CE 6E 60 ORIG: LDS #SPP
E004 10 8E 6F 70 LDY #RPP ;Init return stack pointer
E008 CE FC 6D LDU #COLD1 ;Init Instr pointer.
E00B 37 80 PULU pc ;next.
E00D ;
E00D ; COLD start moves the following to USER variables.
E00D ; MUST BE IN SAME ORDER AS USER VARIABLES.
E00D ;
E00D ;
E00D UZERO: RMB 8
E015 6E 60 FDB SPP ;SP0
E017 6F 70 FDB RPP ;RP0
E019 E0 AD FDB QRX ;'?KEY
E01B E0 CC FDB TXSTO ;'EMIT
E01D F1 98 FDB ACCEP ;'EXPECT
E01F F1 55 FDB KTAP ;'TAP
E021 E0 CC FDB TXSTO ;'ECHO
E023 F3 00 FDB DOTOK ;'PROMPT
E025 00 0A FDB BASEE ;BASE
E027 00 00 FDB 0 ;tmp
E029 00 00 FDB 0 ;SPAN
E02B 00 00 FDB 0 ;>IN
E02D 00 00 FDB 0 ;#TIB
E02F 6E 70 FDB TIBB ;TIB
E031 00 00 FDB 0 ;CSP
E033 F2 B2 FDB INTER ;'EVAL
E035 EC 82 FDB NUMBQ ;'NUMBER
E037 00 00 FDB 0 ;HLD
E039 00 00 FDB 0 ;HANDLER
E03B 00 00 FDB 0 ;CONTEXT pointer
E03D RMB VOCSS*2 ;vocabulary stack
E04D 00 00 FDB 0 ;CURRENT pointer
E04F 00 00 FDB 0 ;vocabulary link pointer
E051 FC 95 FDB CTOP ;CP
E053 6C 00 FDB NTOP ;NP
E055 FC 65 FDB LASTN ;LAST
E057 ULAST:
E057 ;
E080 .ORG CODEE ;beginning of the code dictionary
E080 ;
E080 ; Device dependent I/O
E080 ;
E080 ACIA: EQU $83fe
E080 ACIAC: EQU ACIA
E080 ACIAS: EQU ACIA
E080 ACIAD: EQU ACIA+1
E080 ;
E080 ACIA_TDRE: EQU 02h
E080 ACIA_RDRF: EQU 01h
E080 ;
E080 SEROUT:
E080 34 06 PSHS a,b
E082 SEROUTL:
E082 F6 83 FE LDB ACIAS
E085 C4 02 ANDB #ACIA_TDRE
E087 27 F9 BEQ seroutl
E089 B7 83 FF STA ACIAD
E08C 35 06 PULS a,b
E08E 39 RTS
E08F ;
E08F SERIN:
E08F B6 83 FE LDA ACIAS
E092 84 01 ANDA #ACIA_RDRF
E094 27 03 BEQ serin_ret
E096 B6 83 FF LDA ACIAD
E099 39 SERIN_RET: RTS
E09A ;
E09A ;
E09A ; BYE ( -- )
E09A ; Exit eForth.
E09A ;
E09A E0 A2 00 00 FDB BYE,0
E09E 03 42 59 45 L100: FCB 3,"BYE"
E0A2 7E E0 00 BYE: JMP $E000
E0A5 ;
E0A5 ; ?RX ( -- c T | F )
E0A5 ; Return input character and true, or a false if no input.
E0A5 ;
E0A5 E0 AD E0 9E FDB QRX,L100
E0A9 03 3F 52 58 L110: FCB 3,"?RX"
E0AD 8E 00 00 QRX: LDX #0
E0B0 BD E0 8F JSR serin
E0B3 26 04 BNE qrx1 ;!!!!!!!!!!!!!!!!!!! BEQ
E0B5 AF E3 STX ,--s
E0B7 37 80 PULU pc
E0B9 1F 89 QRX1: TFR a,b
E0BB 4F CLRA
E0BC ED E3 STD ,--s
E0BE 30 1F LEAX -1,x
E0C0 AF E3 STX ,--s
E0C2 37 80 PULU pc
E0C4 ;
E0C4 ; TX! ( c -- )
E0C4 ; Send character c to the output device.
E0C4 E0 CC E0 A9 FDB TXSTO,L110
E0C8 03 54 58 21 L120: FCB 3,"TX!"
E0CC EC E1 TXSTO: LDD ,s++
E0CE C1 FF CMPB #$ff
E0D0 26 02 BNE tx1
E0D2 C6 20 LDB #32
E0D4 TX1:
E0D4 1F 98 TFR b,a
E0D6 BD E0 80 JSR serout
E0D9 37 80 PULU pc
E0DB ;
E0DB ;
E0DB ; !IO ( -- )
E0DB ; Initialize the serial I/O devices.
E0DB ;
E0DB E0 E3 E0 C8 FDB STOIO,L120
E0DF 03 21 49 4F L130: FCB 3,"!IO"
E0E3 37 80 STOIO: PULU pc
E0E5 ;
E0E5 ; The kernel
E0E5 ;
E0E5 ; doLIT ( -- w )
E0E5 ; Push an inline literal.
E0E5 ;
E0E5 E0 EF E0 DF FDB DOLIT,L130
E0E9 45 64 6F 4C 49 54 L140: FCB COMPO+5,"doLIT"
E0EF DOLIT:
E0EF ; ldd ,u++
E0EF 37 06 PULU d
E0F1 ; 7 cycles
E0F1 34 06 PSHS d
E0F3 ; 8 cycles
E0F3 ; std ,--s
E0F3 37 80 PULU pc
E0F5 ;
E0F5 ; doCLIT ( -- w )
E0F5 ; Push an inline 8-bit literal.
E0F5 ;
E0F5 E1 00 E0 E9 FDB DOCLIT,L140
E0F9 46 64 6F 43 4C 49 54 L141: FCB COMPO+6,"doCLIT"
E100 DOCLIT:
E100 37 04 PULU b
E102 1D SEX ; sign extended
E103 34 06 PSHS d
E105 37 80 PULU pc
E107 ;
E107 ; doLIST ( a -- )
E107 ; Process colon list.
E107 ;
E107 E1 12 E0 F9 FDB DOLST,L141
E10B 46 64 6F 4C 49 53 54 L150: FCB COMPO+6,"doLIST"
E112 EF A3 DOLST: STU ,--y
E114 35 40 PULS u ; JSR left new IP on parameter stack
E116 ; ldu ,s++
E116 37 80 PULU pc ; FORTH NEXT IP
E118 ;
E118 ; next ( -- )
E118 ; Run time code for the single index loop.
E118 ; : next ( -- ) \ hilevel model
E118 ; r> r> dup if 1 - >r @ >r exit then drop cell+ >r ;
E118 ;
E118 E1 21 E1 0B FDB DONXT,L150
E11C 44 6E 65 78 74 L160: FCB COMPO+4,"next"
E121 EC A4 DONXT: LDD ,y
E123 83 00 01 SUBD #1 ; decrement
E126 25 06 BCS next1 ; < -> exit loop
E128 ED A4 STD ,y ; decremented value back on stack
E12A EE C4 LDU ,u ; branch to begin of loop
E12C 37 80 PULU pc
E12E 31 22 NEXT1: LEAY 2,y
E130 33 42 LEAU 2,u ; skip branch destination
E132 37 80 PULU pc
E134 ;
E134 ;
E134 ; ?branch ( f -- )
E134 ; Branch if flag is zero.
E134 ;
E134 E1 40 E1 1C FDB QBRAN,L160
E138 47 3F 62 72 61 6E 63 68 L170: FCB COMPO+7,"?branch"
E140 QBRAN: ;$CODE COMPO+7,"?branch",QBRAN
E140 EC E1 LDD ,s++
E142 27 04 BEQ bran1
E144 33 42 LEAU 2,u ; skip new IP, no branch
E146 37 80 PULU pc
E148 EE C4 BRAN1: LDU ,u
E14A 37 80 PULU pc
E14C ;
E14C ; branch ( -- )
E14C ; Branch to an inline address.
E14C ;
E14C E1 57 E1 38 FDB BRAN,L170
E150 46 62 72 61 6E 63 68 L180: FCB COMPO+6,"branch"
E157 EE C4 BRAN: LDU ,u
E159 37 80 PULU pc
E15B ;
E15B ; EXECUTE ( ca -- )
E15B ; Execute the word at ca.
E15B ;
E15B E1 67 E1 50 FDB EXECU,L180
E15F 07 45 58 45 43 55 54 45 L190: FCB 7,"EXECUTE"
E167 39 EXECU: RTS
E168 ;
E168 ; EXIT ( -- )
E168 ; SEMIS
E168 ; Terminate a colon definition.
E168 ;
E168 E1 71 E1 5F FDB EXIT,L190
E16C 04 45 58 49 54 L200: FCB 4,"EXIT"
E171 EE A1 EXIT: LDU ,y++
E173 37 80 PULU pc
E175 ;
E175 ; ! ( w a -- )
E175 ; Pop the data stack to memory.
E175 ;
E175 E1 7B E1 6C FDB STORE,L200
E179 01 21 L210: FCB 1,"!"
E17B STORE:
E17B ; ldx ,s++
E17B ; ldd ,s++
E17B ; faster ...
E17B 35 10 PULS x
E17D 35 06 PULS d
E17F ; we cannot use puls x,d because the order fetched would be wrong :(
E17F ED 84 STD ,x
E181 37 80 PULU pc
E183 ;
E183 ; @ ( a -- w )
E183 ; Push memory location to the data stack.
E183 ;
E183 E1 89 E1 79 FDB AT,L210
E187 01 40 L220: FCB 1,"@"
E189 EC F4 AT: LDD [,s]
E18B ED E4 STD ,s
E18D 37 80 PULU pc
E18F ;
E18F ; C! ( c b -- )
E18F ; Pop the data stack to byte memory.
E18F ;
E18F E1 96 E1 87 FDB CSTOR,L220
E193 02 43 21 L230: FCB 2,"C!"
E196 CSTOR:
E196 ; ldx ,s++
E196 ; ldd ,s++
E196 ; faster ...
E196 35 10 PULS x
E198 35 06 PULS d
E19A ; we cannot use puls x,d because the order fetched would be wrong :(
E19A E7 84 STB ,x
E19C 37 80 PULU pc
E19E ;
E19E ;
E19E ; C@ ( b -- c )
E19E ; Push byte memory location to the data stack.
E19E ;
E19E E1 A5 E1 93 FDB CAT,L230
E1A2 02 43 40 L240: FCB 2,"C@"
E1A5 E6 F4 CAT: LDB [,s]
E1A7 4F CLRA
E1A8 ED E4 STD ,s
E1AA 37 80 PULU pc
E1AC ;
E1AC ; RP@ ( -- a )
E1AC ; Push the current RP to the data stack.
E1AC ;
E1AC E1 B4 E1 A2 FDB RPAT,L240
E1B0 03 52 50 40 L250: FCB 3,"RP@"
E1B4 34 20 RPAT: PSHS y
E1B6 37 80 PULU pc
E1B8 ;
E1B8 ; RP! ( a -- )
E1B8 ; Set the return stack pointer.
E1B8 ;
E1B8 E1 C0 E1 B0 FDB RPSTO,L250
E1BC 03 52 50 21 L260: FCB 3,"RP!"
E1C0 35 20 RPSTO: PULS y
E1C2 37 80 PULU pc
E1C4 ;
E1C4 ; R> ( -- w )
E1C4 ; Pop the return stack to the data stack.
E1C4 ;
E1C4 E1 CB E1 BC FDB RFROM,L260
E1C8 02 52 3E L270: FCB 2,"R>"
E1CB EC A1 RFROM: LDD ,y++
E1CD ; std ,--s
E1CD 34 06 PSHS d
E1CF 37 80 PULU pc
E1D1 ;
E1D1 ; I ( -- w )
E1D1 ; Copy top of return stack (current index from DO/LOOP) to the data stack.
E1D1 ;
E1D1 E1 DE E1 C8 FDB RAT,L270
E1D5 01 49 L279: FCB 1,"I"
E1D7 ;
E1D7 ; R@ ( -- w )
E1D7 ; Copy top of return stack to the data stack.
E1D7 ;
E1D7 E1 DE E1 D5 FDB RAT,L279
E1DB 02 52 40 L280: FCB 2,"R@"
E1DE RAT:
E1DE I:
E1DE EC A4 LDD ,y
E1E0 ; std ,--s
E1E0 34 06 PSHS d
E1E2 37 80 PULU pc
E1E4 ;
E1E4 ; >R ( w -- )
E1E4 ; Push the data stack to the return stack.
E1E4 ;
E1E4 E1 EB E1 DB FDB TOR,L280
E1E8 02 3E 52 L290: FCB 2,">R"
E1EB TOR:
E1EB ; ldd ,s++
E1EB 35 06 PULS d
E1ED ED A3 STD ,--y
E1EF 37 80 PULU pc
E1F1 ;
E1F1 ; SP@ ( -- a )
E1F1 ; Push the current data stack pointer.
E1F1 ;
E1F1 E1 F9 E1 E8 FDB SPAT,L290
E1F5 03 53 50 40 L300: FCB 3,"SP@"
E1F9 SPAT:
E1F9 1F 40 TFR s,d
E1FB ED E3 STD ,--s
E1FD ; alternatively
E1FD ; sts ,--s ; does this work?
E1FD 37 80 PULU pc
E1FF ;
E1FF ; SP! ( a -- )
E1FF ; Set the data stack pointer.
E1FF ;
E1FF E2 07 E1 F5 FDB SPSTO,L300
E203 03 53 50 21 L310: FCB 3,"SP!"
E207 10 EE E4 SPSTO: LDS ,s
E20A 37 80 PULU pc
E20C ;
E20C ; DROP ( w -- )
E20C ; Discard top stack item.
E20C ;
E20C E2 15 E2 03 FDB DROP,L310
E210 04 44 52 4F 50 L320: FCB 4,"DROP"
E215 32 62 DROP: LEAS 2,s
E217 37 80 PULU pc
E219 ;
E219 ; DUP ( w -- w w )
E219 ; Duplicate the top stack item.
E219 ;
E219 E2 21 E2 10 FDB DUPP,L320
E21D 03 44 55 50 L330: FCB 3,"DUP"
E221 EC E4 DUPP: LDD ,s
E223 ; std ,--s
E223 34 06 PSHS d
E225 37 80 PULU pc
E227 ;
E227 ; SWAP ( w1 w2 -- w2 w1 )
E227 ; Exchange top two stack items.
E227 ;
E227 E2 30 E2 1D FDB SWAP,L330
E22B 04 53 57 41 50 L340: FCB 4,"SWAP"
E230 SWAP:
E230 ;OLD 1: slow
E230 ; ldx ,s++
E230 ; ldd ,s++
E230 ;OLD 2: faster
E230 ; puls x
E230 ; puls d
E230 ; pshs d,x
E230 ;more efficient, without unnecessary stack pointer manipulations
E230 EC E4 LDD ,s
E232 AE 62 LDX 2,s
E234 ED 62 STD 2,s
E236 AF E4 STX ,s
E238 37 80 PULU pc
E23A ;
E23A ; OVER ( w1 w2 -- w1 w2 w1 )
E23A ; Copy second stack item to top.
E23A ;
E23A E2 43 E2 2B FDB OVER,L340
E23E 04 4F 56 45 52 L350: FCB 4,"OVER"
E243 EC 62 OVER: LDD 2,s
E245 ; std ,--s
E245 34 06 PSHS d
E247 37 80 PULU pc
E249 ;
E249 ; 0< ( n -- t )
E249 ; Return true if n is negative.
E249 ;
E249 E2 50 E2 3E FDB ZLESS,L350
E24D 02 30 3C L360: FCB 2,"0<"
E250 E6 E4 ZLESS: LDB ,s
E252 1D SEX ; sign extend to b to a/b
E253 1F 89 TFR a,b ; high byte: 0 or FF copy to D low
E255 ED E4 STD ,s ; D: 0000 or FFFF (= -1)
E257 37 80 PULU pc
E259 ;
E259 ; 0= ( n -- t )
E259 ; Return true if n is zero
E259 ;
E259 E2 60 E2 4D FDB ZEQUAL,L360
E25D 02 30 3D L365: FCB 2,"0="
E260 ZEQUAL:
E260 8E FF FF LDX #TRUEE ; true
E263 EC E4 LDD ,s ; TOS
E265 27 03 BEQ ZEQUAL1 ; -> true
E267 8E 00 00 LDX #0 ; false
E26A AF E4 ZEQUAL1: STX ,s
E26C 37 80 PULU pc
E26E ;
E26E ; AND ( w w -- w )
E26E ; Bitwise AND.
E26E ;
E26E E2 76 E2 5D FDB ANDD,L365
E272 03 41 4E 44 L370: FCB 3,"AND"
E276 EC E1 ANDD: LDD ,s++
E278 A4 E4 ANDA ,s
E27A E4 61 ANDB 1,s
E27C ED E4 STD ,s
E27E 37 80 PULU pc
E280 ;
E280 ; OR ( w w -- w )
E280 ; Bitwise inclusive OR.
E280 ;
E280 E2 87 E2 72 FDB ORR,L370
E284 02 4F 52 L380: FCB 2,"OR"
E287 EC E1 ORR: LDD ,s++
E289 AA E4 ORA ,s
E28B EA 61 ORB 1,s
E28D ED E4 STD ,s
E28F 37 80 PULU pc
E291 ;
E291 ; XOR ( w w -- w )
E291 ; Bitwise exclusive OR.
E291 ;
E291 E2 99 E2 84 FDB XORR,L380
E295 03 58 4F 52 L390: FCB 3,"XOR"
E299 EC E1 XORR: LDD ,s++
E29B A8 E4 EORA ,s
E29D E8 61 EORB 1,s
E29F ED E4 STD ,s
E2A1 37 80 PULU pc
E2A3 ;
E2A3 ; D+ ( ud ud -- udsum )
E2A3 ; Add two unsigned double numbers and return a double sum.
E2A3 ;
E2A3 E2 AA E2 95 FDB DPLUS,L390
E2A7 02 44 2B L391: FCB 2,"D+"
E2AA EC 62 DPLUS: LDD 2,s
E2AC E3 66 ADDD 6,s
E2AE ED 66 STD 6,s
E2B0 EC E4 LDD ,s ; add hig words
E2B2 E9 65 ADCB 5,s
E2B4 A9 64 ADCA 4,s
E2B6 ED 64 STD 4,s
E2B8 32 64 LEAS 4,s ; drop one double
E2BA 37 80 PULU pc
E2BC ;
E2BC ; D- ( ud ud -- uddiff )
E2BC ; Subtract two unsigned double numbers and return a double sum.
E2BC ;
E2BC E2 C3 E2 A7 FDB DSUB,L391
E2C0 02 44 2D L392: FCB 2,"D-"
E2C3 BD E1 12 DSUB: JSR DOLST
E2C6 E6 19 E2 AA E1 71 FDB DNEGA,DPLUS,EXIT
E2CC ;
E2CC ;
E2CC ; UM+ ( u u -- udsum )
E2CC ; Add two unsigned single numbers and return a double sum.
E2CC ;
E2CC E2 D4 E2 C0 FDB UPLUS,L392
E2D0 03 55 4D 2B L400: FCB 3,"UM+"
E2D4 EC E4 UPLUS: LDD ,s
E2D6 E3 62 ADDD 2,s
E2D8 ED 62 STD 2,s
E2DA CC 00 00 LDD #0
E2DD C9 00 ADCB #0
E2DF ED E4 STD ,s
E2E1 37 80 PULU pc
E2E3 ;
E2E3 ; Constants
E2E3 ;
E2E3 ; doCONST ( -- w )
E2E3 ; Run time routine for CONSTANT
E2E3 ;
E2E3 E2 EF E2 D0 FDB DOCONST,L400
E2E7 47 64 6F 43 4F 4E 53 54 L401: FCB COMPO+7,"doCONST"
E2EF DOCONST:
E2EF FDOCONST:
E2EF EC F4 LDD [,s] ; contents of W (on TOS because of JSR)
E2F1 ED E4 STD ,s ; to TOS (replacing W)
E2F3 37 80 PULU pc
E2F5 ;
E2F5 ; 0 ( -- 0 )
E2F5 ; Constant 0
E2F5 ;
E2F5 E2 FB E2 E7 FDB ZERO,L401
E2F9 01 30 L402: FCB 1,"0"
E2FB BD E2 EF ZERO: JSR FDOCONST
E2FE 00 00 FDB 0
E300 ;
E300 ; 1 ( -- 1 )
E300 ; Constant 1
E300 ;
E300 E3 06 E2 F9 FDB ONE,L402
E304 01 31 L403: FCB 1,"1"
E306 BD E2 EF ONE: JSR FDOCONST
E309 00 01 FDB 1
E30B ;
E30B ; 2 ( -- 2 )
E30B ; Constant 2
E30B ;
E30B E3 11 E3 04 FDB TWO,L403
E30F 01 32 L404: FCB 1,"2"
E311 BD E2 EF TWO: JSR FDOCONST
E314 00 02 FDB 2
E316 ;
E316 ;
E316 ; -1 ( -- -1 )
E316 ; Constant -1
E316 ;
E316 E3 1D E3 0F FDB MONE,L404
E31A 02 2D 31 L405: FCB 2,"-1"
E31D BD E2 EF MONE: JSR FDOCONST
E320 FF FF FDB -1
E322 ;
E322 ; System and user variables
E322 ;
E322 ; doVAR ( -- a )
E322 ; Run time routine for VARIABLE and CREATE.
E322 ;
E322 E3 2C E3 1A FDB DOVAR,L405
E326 45 64 6F 56 41 52 L410: FCB COMPO+5,"doVAR"
E32C DOVAR:
E32C BD E1 12 JSR DOLST
E32F E1 CB E1 71 FDB RFROM,EXIT
E333 ;
E333 ; fast native DOVAR implementation
E333 37 80 FDOVAR: PULU pc
E335 ;
E335 ;
E335 ; UP ( -- a )
E335 ; Pointer to the user area.
E335 ;
E335 E3 3C E3 26 FDB UP,L410
E339 02 55 50 L420: FCB 2,"UP"
E33C UP:
E33C ; jsr DOLST
E33C ; FDB DOVAR
E33C ; fast (native) DOVAR
E33C BD E3 33 JSR FDOVAR
E33F 6F 80 FDB UPP
E341 ;
E341 ; doUSER ( -- a )
E341 ; Run time routine for user variables.
E341 ;
E341 E3 4C E3 39 FDB DOUSE,L420
E345 45 64 6F 55 53 45 52 L430: FCB COMPO+5,"doUSER"
E34C DOUSE:
E34C BD E1 12 JSR DOLST
E34F E1 CB E1 89 E3 3C E1 89 E5 CF E1 71 FDB RFROM,AT,UP,AT,PLUS,EXIT
E35B ;
E35B ; fast (native) DOUSE implementation (*NOT COMPLETE*)
E35B FDOUSE:
E35B EC F4 LDD [,s] ; pointer to value (from JSR)
E35D F3 E3 3F ADDD UP+CFAOFF ; dirty access to start of USER area:
E360 ; var. UP value direct access (not
E360 ; as a high level word)
E360 ED E4 STD ,s ; resulting address returned on p-stack
E362 37 80 PULU pc
E364 ;
E364 ; SP0 ( -- a )
E364 ; Pointer to bottom of the data stack.
E364 ;
E364 E3 6C E3 45 FDB SZERO,L430
E368 03 53 50 30 L440: FCB 3,"SP0"
E36C SZERO:
E36C BD E3 5B JSR FDOUSE
E36F 00 08 FDB 8
E371 ; jsr DOLST
E371 ; FDB DOUSE,8
E371 ;
E371 ; RP0 ( -- a )
E371 ; Pointer to bottom of the return stack.
E371 ;
E371 E3 79 E3 68 FDB RZERO,L440
E375 03 52 50 30 L450: FCB 3,"RP0"
E379 RZERO:
E379 BD E3 5B JSR FDOUSE
E37C 00 0A FDB 10
E37E ; jsr DOLST
E37E ; FDB DOUSE,10
E37E ;
E37E ; '?KEY ( -- a )
E37E ; Execution vector of ?KEY.
E37E ;
E37E E3 88 E3 75 FDB TQKEY,L450
E382 05 27 3F 4B 45 59 L460: FCB 5,"'?KEY"
E388 TQKEY:
E388 BD E3 5B JSR FDOUSE
E38B 00 0C FDB 12
E38D ; jsr DOLST
E38D ; FDB DOUSE,12
E38D ;
E38D ; 'EMIT ( -- a )
E38D ; Execution vector of EMIT.
E38D ;
E38D E3 97 E3 82 FDB TEMIT,L460
E391 05 27 45 4D 49 54 L470: FCB 5,"'EMIT"
E397 TEMIT:
E397 BD E3 5B JSR FDOUSE
E39A 00 0E FDB 14
E39C ; jsr DOLST
E39C ; FDB DOUSE,14
E39C ;
E39C ; 'EXPECT ( -- a )
E39C ; Execution vector of EXPECT.
E39C ;
E39C E3 A8 E3 91 FDB TEXPE,L470
E3A0 07 27 45 58 50 45 43 54 L480: FCB 7,"'EXPECT"
E3A8 TEXPE:
E3A8 BD E3 5B JSR FDOUSE
E3AB 00 10 FDB 16
E3AD ; jsr DOLST
E3AD ; FDB DOUSE,16
E3AD ;
E3AD ; 'TAP ( -- a )
E3AD ; Execution vector of TAP.
E3AD ;
E3AD E3 B6 E3 A0 FDB TTAP,L480
E3B1 04 27 54 41 50 L490: FCB 4,"'TAP"
E3B6 TTAP:
E3B6 BD E3 5B JSR FDOUSE
E3B9 00 12 FDB 18
E3BB ; jsr DOLST
E3BB ; FDB DOUSE,18
E3BB ;
E3BB ; 'ECHO ( -- a )
E3BB ; Execution vector of ECHO.
E3BB ;
E3BB E3 C5 E3 B1 FDB TECHO,L490
E3BF 05 27 45 43 48 4F L500: FCB 5,"'ECHO"
E3C5 TECHO:
E3C5 BD E3 5B JSR FDOUSE
E3C8 00 14 FDB 20
E3CA ; jsr DOLST
E3CA ; FDB DOUSE,20
E3CA ;
E3CA ; 'PROMPT ( -- a )
E3CA ; Execution vector of PROMPT.
E3CA ;
E3CA E3 D6 E3 BF FDB TPROM,L500
E3CE 07 27 50 52 4F 4D 50 54 L510: FCB 7,"'PROMPT"
E3D6 TPROM:
E3D6 BD E3 5B JSR FDOUSE
E3D9 00 16 FDB 22
E3DB ; jsr DOLST
E3DB ; FDB DOUSE,22
E3DB ;
E3DB ;
E3DB ; BASE ( -- a )
E3DB ; Storage of the radix base for numeric I/O.
E3DB ;
E3DB E3 E4 E3 CE FDB BASE,L510
E3DF 04 42 41 53 45 L520: FCB 4,"BASE"
E3E4 BASE:
E3E4 BD E3 5B JSR FDOUSE
E3E7 00 18 FDB 24
E3E9 ; jsr DOLST
E3E9 ; FDB DOUSE,24
E3E9 ;
E3E9 ; tmp ( -- a )
E3E9 ; A temporary storage location used in parse and find.
E3E9 ;
E3E9 E3 F1 E3 DF FDB TEMP,L520
E3ED 43 74 6D 70 L530: FCB COMPO+3,"tmp"
E3F1 TEMP:
E3F1 BD E3 5B JSR FDOUSE
E3F4 00 1A FDB 26
E3F6 ; jsr DOLST
E3F6 ; FDB DOUSE,26
E3F6 ;
E3F6 ; SPAN ( -- a )
E3F6 ; Hold character count received by EXPECT.
E3F6 ;
E3F6 E3 FF E3 ED FDB SPAN,L530
E3FA 04 53 50 41 4E L540: FCB 4,"SPAN"
E3FF SPAN:
E3FF BD E3 5B JSR FDOUSE
E402 00 1C FDB 28
E404 ; jsr DOLST
E404 ; FDB DOUSE,28
E404 ;
E404 ; >IN ( -- a )
E404 ; Hold the character pointer while parsing input stream.
E404 ;
E404 E4 0C E3 FA FDB INN,L540
E408 03 3E 49 4E L550: FCB 3,">IN"
E40C INN:
E40C BD E3 5B JSR FDOUSE
E40F 00 1E FDB 30
E411 ; jsr DOLST
E411 ; FDB DOUSE,30
E411 ;
E411 ; #TIB ( -- a )
E411 ; Hold the current count in and address of the terminal input buffer.
E411 ;
E411 E4 1A E4 08 FDB NTIB,L550
E415 04 23 54 49 42 L560: FCB 4,"#TIB"
E41A NTIB:
E41A BD E3 5B JSR FDOUSE
E41D 00 20 FDB 32
E41F ; jsr DOLST
E41F ; FDB DOUSE,32 ;It contains TWO cells!!!!
E41F ;
E41F ; CSP ( -- a )
E41F ; Hold the stack pointer for error checking.
E41F ;
E41F E4 27 E4 15 FDB CSP,L560
E423 03 43 53 50 L570: FCB 3,"CSP"
E427 CSP:
E427 BD E3 5B JSR FDOUSE
E42A 00 24 FDB 36
E42C ; jsr DOLST
E42C ; FDB DOUSE 36
E42C ;
E42C ; 'EVAL ( -- a )
E42C ; Execution vector of EVAL.
E42C ;
E42C E4 36 E4 23 FDB TEVAL,L570
E430 05 27 45 56 41 4C L580: FCB 5,"'EVAL"
E436 TEVAL:
E436 BD E3 5B JSR FDOUSE
E439 00 26 FDB 38
E43B ; jsr DOLST
E43B ; FDB DOUSE,38
E43B ;
E43B ; 'NUMBER ( -- a )
E43B ; Execution vector of NUMBER?.
E43B ;
E43B E4 47 E4 30 FDB TNUMB,L580
E43F 07 27 4E 55 4D 42 45 52 L590: FCB 7,"'NUMBER"
E447 TNUMB:
E447 BD E3 5B JSR FDOUSE
E44A 00 28 FDB 40
E44C ; jsr DOLST
E44C ; FDB DOUSE,40
E44C ;
E44C ; HLD ( -- a )
E44C ; Hold a pointer in building a numeric output string.
E44C ;
E44C E4 54 E4 3F FDB HLD,L590
E450 03 48 4C 44 L600: FCB 3,"HLD"
E454 HLD:
E454 BD E3 5B JSR FDOUSE
E457 00 2A FDB 42
E459 ; jsr DOLST
E459 ; FDB DOUSE,42
E459 ;
E459 ; HANDLER ( -- a )
E459 ; Hold the return stack pointer for error handling.
E459 ;
E459 E4 65 E4 50 FDB HANDL,L600
E45D 07 48 41 4E 44 4C 45 52 L610: FCB 7,"HANDLER"
E465 HANDL:
E465 BD E3 5B JSR FDOUSE
E468 00 2C FDB 44
E46A ; jsr DOLST
E46A ; FDB DOUSE,44
E46A ;
E46A ; CONTEXT ( -- a )
E46A ; A area to specify vocabulary search order.
E46A ;
E46A E4 76 E4 5D FDB CNTXT,L610
E46E 07 43 4F 4E 54 45 58 54 L620: FCB 7,"CONTEXT"
E476 CNTXT:
E476 BD E3 5B JSR FDOUSE
E479 00 2E FDB 46
E47B ; jsr DOLST
E47B ; FDB DOUSE,46 ;plus space for voc stack.
E47B ;
E47B ; CURRENT ( -- a )
E47B ; Point to the vocabulary to be extended.
E47B ;
E47B E4 87 E4 6E FDB CRRNT,L620
E47F 07 43 55 52 52 45 4E 54 L630: FCB 7,"CURRENT"
E487 CRRNT:
E487 BD E3 5B JSR FDOUSE
E48A 00 40 FDB 48+VOCSS*2 ;Extra cell
E48C ; jsr DOLST
E48C ; FDB DOUSE,48+VOCSS*2 ;Extra cell
E48C ;
E48C ; CP ( -- a )
E48C ; Point to the top of the code dictionary.
E48C ;
E48C E4 93 E4 7F FDB CP,L630
E490 02 43 50 L640: FCB 2,"CP"
E493 CP:
E493 BD E3 5B JSR FDOUSE
E496 00 44 FDB 52+VOCSS*2
E498 ; jsr DOLST
E498 ; FDB DOUSE,52+VOCSS*2
E498 ;
E498 ; NP ( -- a )
E498 ; Point to the bottom of the name dictionary.
E498 ;
E498 E4 9F E4 90 FDB NP,L640
E49C 02 4E 50 L650: FCB 2,"NP"
E49F NP:
E49F BD E3 5B JSR FDOUSE
E4A2 00 46 FDB 54+VOCSS*2
E4A4 ; jsr DOLST
E4A4 ; FDB DOUSE,54+VOCSS*2
E4A4 ;
E4A4 ; LAST ( -- a )
E4A4 ; Point to the last name in the name dictionary.
E4A4 ;
E4A4 E4 AD E4 9C FDB LAST,L650
E4A8 04 4C 41 53 54 L660: FCB 4,"LAST"
E4AD LAST:
E4AD BD E3 5B JSR FDOUSE
E4B0 00 48 FDB 56+VOCSS*2
E4B2 ; jsr DOLST
E4B2 ; FDB DOUSE,56+VOCSS*2
E4B2 ;
E4B2 ; Common functions
E4B2 ;
E4B2 ; doVOC ( -- )
E4B2 ; Run time action of VOCABULARY's.
E4B2 ;
E4B2 E4 BC E4 A8 FDB DOVOC,L660
E4B6 45 64 6F 56 4F 43 L670: FCB COMPO+5,"doVOC"
E4BC DOVOC:
E4BC BD E1 12 JSR DOLST
E4BF E1 CB E4 76 E1 7B E1 71 FDB RFROM,CNTXT,STORE,EXIT
E4C7 ;
E4C7 ; FORTH ( -- )
E4C7 ; Make FORTH the context vocabulary.
E4C7 ;
E4C7 E4 D1 E4 B6 FDB FORTH,L670
E4CB 05 46 4F 52 54 48 L680: FCB 5,"FORTH"
E4D1 FORTH:
E4D1 BD E1 12 JSR DOLST
E4D4 E4 BC FDB DOVOC
E4D6 00 00 FDB 0 ;vocabulary head pointer
E4D8 00 00 FDB 0 ;vocabulary link pointer
E4DA ;
E4DA ; ?DUP ( w -- w w | 0 )
E4DA ; Dup tos if its is not zero.
E4DA ;
E4DA E4 E3 E4 CB FDB QDUP,L680
E4DE 04 3F 44 55 50 L690: FCB 4,"?DUP"
E4E3 QDUP:
E4E3 BD E1 12 JSR DOLST
E4E6 E2 21 FDB DUPP
E4E8 E1 40 E4 EE FDB QBRAN,QDUP1
E4EC E2 21 FDB DUPP
E4EE E1 71 QDUP1: FDB EXIT
E4F0 ;
E4F0 ; ROT ( w1 w2 w3 -- w2 w3 w1 )
E4F0 ; Rot 3rd item to top.
E4F0 ;
E4F0 E4 F8 E4 DE FDB ROT,L690
E4F4 03 52 4F 54 L700: FCB 3,"ROT"
E4F8 ROT:
E4F8 BD E1 12 JSR DOLST
E4FB E1 EB E2 30 E1 CB E2 30 E1 71 FDB TOR,SWAP,RFROM,SWAP,EXIT
E505 ;
E505 ; 2DROP ( w w -- )
E505 ; Discard two items on stack.
E505 ;
E505 E5 0F E4 F4 FDB DDROP,L700
E509 05 32 44 52 4F 50 L710: FCB 5,"2DROP"
E50F DDROP:
E50F BD E1 12 JSR DOLST
E512 E2 15 E2 15 E1 71 FDB DROP,DROP,EXIT
E518 ;
E518 ; 2DUP ( w1 w2 -- w1 w2 w1 w2 )
E518 ; Duplicate top two items.
E518 ;
E518 E5 21 E5 09 FDB DDUP,L710
E51C 04 32 44 55 50 L720: FCB 4,"2DUP"
E521 DDUP:
E521 BD E1 12 JSR DOLST
E524 E2 43 E2 43 E1 71 FDB OVER,OVER,EXIT
E52A ;
E52A ; LSHIFT ( w n -- w )
E52A ; Shift word left n times.
E52A E5 35 E5 1C FDB LSHIFT,L720
E52E 06 4C 53 48 49 46 54 L721: FCB 6,"LSHIFT"
E535 AE E1 LSHIFT: LDX ,s++
E537 27 0A BEQ LSHIFT2
E539 EC E4 LDD ,s ;value to shift
E53B 58 LSHIFT1: ASLB
E53C 49 ROLA ;high
E53D 30 1F LEAX -1,x ;count down
E53F 26 FA BNE LSHIFT1
E541 ED E4 STD ,s
E543 LSHIFT2:
E543 37 80 PULU pc
E545 ;
E545 ; RSHIFT ( w n -- w )
E545 ; Shift word right n times.
E545 E5 50 E5 2E FDB RSHIFT,L721
E549 06 52 53 48 49 46 54 L721A: FCB 6,"RSHIFT"
E550 AE E1 RSHIFT: LDX ,s++
E552 27 0A BEQ RSHIFT2
E554 EC E4 LDD ,s ;value to shift
E556 44 RSHIFT1: LSRA
E557 56 RORB ;low
E558 30 1F LEAX -1,x ;count down
E55A 26 FA BNE RSHIFT1
E55C ED E4 STD ,s
E55E RSHIFT2:
E55E 37 80 PULU pc
E560 ;
E560 ; >< ( w -- w )
E560 ; swap high and low byte
E560 E5 67 E5 49 FDB SWAPHL,L721A
E564 02 3E 3C L722: FCB 2,"><"
E567 E6 E4 SWAPHL: LDB ,s
E569 A6 61 LDA 1,s ;low -> D high
E56B ED E4 STD ,s
E56D 37 80 PULU pc
E56F ;
E56F ; 256/ ( w -- w )
E56F ; multiply with 256 (shift left 8 times)
E56F E5 78 E5 64 FDB SLASH256,L722
E573 04 32 35 36 2F L723: FCB 4,"256/"
E578 E6 E4 SLASH256: LDB ,s
E57A 4F CLRA ;D high = 0
E57B ED E4 STD ,s
E57D 37 80 PULU pc
E57F ;
E57F ; 256* ( w -- w )
E57F ; multiply with 256 (shift left 8 times)
E57F E5 88 E5 73 FDB STAR256,L723
E583 04 32 35 36 2A L724: FCB 4,"256*"
E588 A6 61 STAR256: LDA 1,s
E58A 5F CLRB ;D low = 0
E58B ED E4 STD ,s
E58D 37 80 PULU pc
E58F ;
E58F ; 1+ ( w -- w )
E58F ; Shortcut, quick add 1
E58F E5 96 E5 83 FDB PLUS1,L724
E593 02 31 2B L725: FCB 2,"1+"
E596 EC E4 PLUS1: LDD ,s
E598 C3 00 01 ADDD #1
E59B ED E4 STD ,s
E59D 37 80 PULU pc
E59F ;
E59F ; -+ ( w -- w )
E59F ; Shortcut, quick subtract 1
E59F E5 A6 E5 93 FDB MINUS1,L725
E5A3 02 31 2D L726: FCB 2,"1-"
E5A6 EC E4 MINUS1: LDD ,s
E5A8 83 00 01 SUBD #1
E5AB ED E4 STD ,s
E5AD 37 80 PULU pc
E5AF ;
E5AF ; 2* ( w -- w )
E5AF ; multiply by 2 using shift operation
E5AF E5 B6 E5 A3 FDB TWOSTAR,L726
E5B3 02 32 2A L727: FCB 2,"2*"
E5B6 68 61 TWOSTAR: ASL 1,s
E5B8 69 60 ROL 0,s ;high
E5BA 37 80 PULU pc
E5BC ;
E5BC ; 2/ ( w -- w )
E5BC ; divide by 2 using shift operation
E5BC E5 C3 E5 B3 FDB TWOSLASH,L727
E5C0 02 32 2F L728: FCB 2,"2/"
E5C3 67 60 TWOSLASH: ASR 0,s
E5C5 66 61 ROR 1,s ;low
E5C7 37 80 PULU pc
E5C9 ;
E5C9 ; + ( w w -- sum )
E5C9 ; Add top two items.
E5C9 ;
E5C9 E5 CF E5 C0 FDB PLUS,L728
E5CD 01 2B L730: FCB 1,"+"
E5CF PLUS:
E5CF EC E1 LDD ,s++
E5D1 E3 E4 ADDD ,s
E5D3 ED E4 STD ,s
E5D5 37 80 PULU pc
E5D7 ; HL with UPLUS!? Too inefficient ...
E5D7 ; jsr DOLST
E5D7 ; FDB UPLUS,DROP,EXIT
E5D7 ;
E5D7 ; NOT ( w -- w )
E5D7 ; One's complement of tos.
E5D7 ;
E5D7 E5 DF E5 CD FDB INVER,L730
E5DB 03 4E 4F 54 L740: FCB 3,"NOT"
E5DF INVER:
E5DF ; fastest ... (13T)
E5DF 63 E4 COM ,s ; 6T
E5E1 63 61 COM 1,s ; 7T
E5E3 37 80 PULU pc
E5E5 ; alternative ... (14T)
E5E5 EC E4 LDD ,s ;TOS 5T
E5E7 43 COMA ; 2T
E5E8 53 COMB ; 2T
E5E9 ED E4 STD ,s ; 5T
E5EB 37 80 PULU pc
E5ED ; slow HL ...
E5ED ; jsr DOLST
E5ED ; FDB DOLIT,-1,XORR,EXIT
E5ED ;
E5ED ; NEGATE ( n -- -n )
E5ED ; Two's complement of tos.
E5ED ;
E5ED E5 F8 E5 DB FDB NEGAT,L740
E5F1 06 4E 45 47 41 54 45 L750: FCB 6,"NEGATE"
E5F8 NEGAT:
E5F8 ; fastest? .... (3+6+5 = 14T)
E5F8 CC 00 00 LDD #0 ; 3T
E5FB A3 E4 SUBD ,s ; 6T
E5FD ED E4 STD ,s ; 5T
E5FF 37 80 PULU pc
E601 ; alternate ... (7+3+6 = 16T)
E601 60 61 NEG 1,s ; high 7T
E603 26 04 BNE NEGAT1 ; 3T
E605 60 E4 NEG ,s ; low with 1+ carry 6T
E607 37 80 PULU pc
E609 63 E4 NEGAT1: COM ,s
E60B 37 80 PULU pc
E60D ; slow HL ...
E60D ; jsr DOLST
E60D ; FDB INVER,PLUS1,EXIT
E60D ;
E60D ; DNEGATE ( d -- -d )
E60D ; Two's complement of top double.
E60D ;
E60D E6 19 E5 F1 FDB DNEGA,L750
E611 07 44 4E 45 47 41 54 45 L760: FCB 7,"DNEGATE"
E619 DNEGA:
E619 CC 00 00 LDD #0
E61C A3 62 SUBD 2,s ; low word
E61E ED 62 STD 2,s
E620 CC 00 00 LDD #0
E623 E2 61 SBCB 1,s ; high word low byte
E625 A2 E4 SBCA ,s ; high word high byte
E627 ED E4 STD ,s
E629 37 80 PULU pc
E62B ; slow HL ...
E62B ; jsr DOLST
E62B ; FDB INVER,TOR,INVER
E62B ; FDB DOLIT,1,UPLUS
E62B ; FDB RFROM,PLUS,EXIT
E62B ;
E62B ; - ( n1 n2 -- n1-n2 )
E62B ; Subtraction.
E62B ;
E62B E6 31 E6 11 FDB SUBB,L760
E62F 01 2D L770: FCB 1,"-"
E631 EC 62 SUBB: LDD 2,s
E633 A3 E1 SUBD ,s++
E635 ED E4 STD ,s
E637 37 80 PULU pc
E639 ; slow HL ...
E639 ; jsr DOLST
E639 ; FDB NEGAT,PLUS,EXIT
E639 ;
E639 ; ABS ( n -- n )
E639 ; Return the absolute value of n.
E639 ;
E639 E6 41 E6 2F FDB ABSS,L770
E63D 03 41 42 53 L780: FCB 3,"ABS"
E641 BD E1 12 ABSS: JSR DOLST
E644 E2 21 E2 50 FDB DUPP,ZLESS
E648 E1 40 E6 4E FDB QBRAN,ABS1
E64C E5 F8 FDB NEGAT
E64E E1 71 ABS1: FDB EXIT
E650 ;
E650 ; = ( w w -- t )
E650 ; Return true if top two are equal.
E650 ;
E650 E6 56 E6 3D FDB EQUAL,L780
E654 01 3D L790: FCB 1,"="
E656 EQUAL:
E656 8E FF FF LDX #TRUEE
E659 35 06 PULS d ; first value
E65B 10 A3 E4 CMPD ,s ; compare to 2nd value
E65E 27 03 BEQ EQUAL1 ; equal -> true
E660 8E 00 00 LDX #0 ; false (leax 1,x save 1 byte, but is slower)
E663 AF E4 EQUAL1: STX ,s
E665 37 80 PULU pc
E667 ; slow HL ...
E667 ; jsr DOLST
E667 ; FDB XORR
E667 ; FDB QBRAN,EQU1
E667 ; FDB DOLIT,0,EXIT
E667 ;EQU1: FDB DOLIT,TRUEE,EXIT
E667 ;
E667 ; U< ( u1 u2 -- t )
E667 ; Unsigned compare of top two items.
E667 ;
E667 E6 6E E6 54 FDB ULESS,L790
E66B 02 55 3C L800: FCB 2,"U<"
E66E ULESS:
E66E 8E FF FF LDX #TRUEE ; true
E671 35 06 PULS d ; u2
E673 10 A3 E4 CMPD ,s ; u2 - u1
E676 22 03 BHI ULES1 ; unsigned: u2 higher u1
E678 8E 00 00 LDX #0 ; false
E67B AF E4 ULES1: STX ,s
E67D 37 80 PULU pc
E67F ; slow HL ...
E67F ; jsr DOLST
E67F ; FDB DDUP,XORR,ZLESS
E67F ; FDB QBRAN,ULES1
E67F ; FDB SWAP,DROP,ZLESS,EXIT
E67F ;ULES1: FDB SUBB,ZLESS,EXIT
E67F ;
E67F ; < ( n1 n2 -- t )
E67F ; Signed compare of top two items.
E67F ;
E67F E6 85 E6 6B FDB LESS,L800
E683 01 3C L810: FCB 1,"<"
E685 LESS:
E685 8E FF FF LDX #TRUEE ; true
E688 35 06 PULS d ; n2
E68A 10 A3 E4 CMPD ,s ; n2 - n1
E68D 2E 03 BGT LESS1 ; signed: n2 greater than n1
E68F 8E 00 00 LDX #0 ; false
E692 AF E4 LESS1: STX ,s
E694 37 80 PULU pc
E696 ;
E696 ; slow HL ...
E696 ; jsr DOLST
E696 ; FDB DDUP,XORR,ZLESS
E696 ; FDB QBRAN,LESS1
E696 ; FDB DROP,ZLESS,EXIT
E696 ;LESS1: FDB SUBB,ZLESS,EXIT
E696 ;
E696 ; MAX ( n n -- n )
E696 ; Return the greater of two top stack items.
E696 ;
E696 E6 9E E6 83 FDB MAX,L810
E69A 03 4D 41 58 L820: FCB 3,"MAX"
E69E BD E1 12 MAX: JSR DOLST
E6A1 E5 21 E6 85 FDB DDUP,LESS
E6A5 E1 40 E6 AB FDB QBRAN,MAX1
E6A9 E2 30 FDB SWAP
E6AB E2 15 E1 71 MAX1: FDB DROP,EXIT
E6AF ;
E6AF ; MIN ( n n -- n )
E6AF ; Return the smaller of top two stack items.
E6AF ;
E6AF E6 B7 E6 9A FDB MIN,L820
E6B3 03 4D 49 4E L830: FCB 3,"MIN"
E6B7 BD E1 12 MIN: JSR DOLST
E6BA E5 21 E2 30 E6 85 FDB DDUP,SWAP,LESS
E6C0 E1 40 E6 C6 FDB QBRAN,MIN1
E6C4 E2 30 FDB SWAP
E6C6 E2 15 E1 71 MIN1: FDB DROP,EXIT
E6CA ;
E6CA ; WITHIN ( u ul uh -- t )
E6CA ; Return true if u is within the range of ul and uh. ( ul <= u < uh )
E6CA ;
E6CA E6 D5 E6 B3 FDB WITHI,L830
E6CE 06 57 49 54 48 49 4E L840: FCB 6,"WITHIN"
E6D5 BD E1 12 WITHI: JSR DOLST
E6D8 E2 43 E6 31 E1 EB FDB OVER,SUBB,TOR
E6DE E6 31 E1 CB E6 6E E1 71 FDB SUBB,RFROM,ULESS,EXIT
E6E6 ;
E6E6 ; Divide
E6E6 ;
E6E6 ; U/ ( udl udh un -- ur uq )
E6E6 ; Unsigned divide of a double by a single. Return mod and quotient.
E6E6 ;
E6E6 ; Special cases:
E6E6 ; 1. overflow: quotient overflow if dividend is to great (remainder = divisor),
E6E6 ; remainder is set to $FFFF -> special handling.
E6E6 ; This is checked also right before the main loop.
E6E6 ; 2. underflow: divisor does not fit into dividend -> remainder
E6E6 ; get the value of the dividend -> automatically covered.
E6E6 ;
E6E6 ; overflow: quotient = $FFFF, remainder = divisor
E6E6 ; underflow: quotient = $0000, remainder = dividend low
E6E6 ; division by zero: quotient = $FFFF, remainder = $0000
E6E6 ;
E6E6 ; Testvalues:
E6E6 ;
E6E6 ; DIVH DIVL DVSR QUOT REM comment
E6E6 ;
E6E6 ; 0100 0000 FFFF 0100 0100 maximum divisor
E6E6 ; 0000 0001 8000 0000 0001 underflow (REM = DIVL)
E6E6 ; 0000 5800 3000 0001 1800 normal divsion
E6E6 ; 5800 0000 3000 FFFF 3000 overflow
E6E6 ; 0000 0001 0000 FFFF 0000 overflow (division by zero)
E6E6 ;
E6E6 E6 ED E6 CE FDB USLASH,L840
E6EA 02 55 2F L845: FCB 2,"U/"
E6ED ;
E6ED USLASH:
E6ED 8E 00 10 LDX #16
E6F0 EC 62 LDD 2,s ; udh
E6F2 10 A3 E4 CMPD ,s ; dividend to great?
E6F5 24 24 BHS UMMODOV ; quotient overflow!
E6F7 68 65 ASL 5,s ; udl low
E6F9 69 64 ROL 4,s ; udl high
E6FB ;
E6FB 59 UMMOD1: ROLB
E6FC 49 ROLA
E6FD 25 09 BCS UMMOD2 ; bit 16 means always greater as divisor
E6FF 10 A3 E4 CMPD ,s ; divide by un
E702 24 04 BHS UMMOD2 ; higher or same as divisor?
E704 1C FE ANDCC #$fe ; clc - clear carry flag
E706 20 04 BRA UMMOD3
E708 A3 E4 UMMOD2: SUBD ,s
E70A 1A 01 ORCC #$01 ; sec - set carry flag
E70C 69 65 UMMOD3: ROL 5,s
E70E 69 64 ROL 4,s
E710 30 1F LEAX -1,x
E712 26 E7 BNE UMMOD1
E714 ;
E714 AE 64 LDX 4,s ; quotient
E716 10 A3 E4 CMPD ,s ; remainder >= divisor -> overflow
E719 25 05 BLO UMMOD4
E71B UMMODOV:
E71B EC E4 LDD ,s ; remainder set to divisor
E71D 8E FF FF LDX #$FFFF ; quotient = FFFF (-1) marks overflow
E720 ; (case 1)
E720 UMMOD4:
E720 32 62 LEAS 2,s ; un (divisor thrown away)
E722 AF E4 STX ,s ; quotient to TOS
E724 ED 62 STD 2,s ; remainder 2nd
E726 ;
E726 37 80 PULU pc ; NEXT
E728 ;
E728 ;
E728 ; UM/MOD ( udl udh un -- ur uq )
E728 ; Unsigned divide of a double by a single. Return mod and quotient.
E728 ;
E728 E7 33 E6 EA FDB UMMOD,L845
E72C 06 55 4D 2F 4D 4F 44 L850: FCB 6,"UM/MOD"
E733 UMMOD:
E733 7E E6 ED JMP USLASH
E736 ; slow HL ...
E736 BD E1 12 JSR DOLST
E739 E5 21 E6 6E FDB DDUP,ULESS
E73D E1 40 E7 89 FDB QBRAN,UMM4
E741 E5 F8 E0 EF 00 0F E1 EB FDB NEGAT,DOLIT,15,TOR
E749 E1 EB E2 21 E2 D4 UMM1: FDB TOR,DUPP,UPLUS
E74F E1 EB E1 EB E2 21 E2 D4 FDB TOR,TOR,DUPP,UPLUS
E757 E1 CB E5 CF E2 21 FDB RFROM,PLUS,DUPP
E75D E1 CB E1 DE E2 30 E1 EB FDB RFROM,RAT,SWAP,TOR
E765 E2 D4 E1 CB E2 87 FDB UPLUS,RFROM,ORR
E76B E1 40 E7 7B FDB QBRAN,UMM2
E76F E1 EB E2 15 E5 96 E1 CB FDB TOR,DROP,PLUS1,RFROM
E777 E1 57 E7 7D FDB BRAN,UMM3
E77B E2 15 UMM2: FDB DROP
E77D E1 CB UMM3: FDB RFROM
E77F E1 21 E7 49 FDB DONXT,UMM1
E783 E2 15 E2 30 E1 71 FDB DROP,SWAP,EXIT
E789 E2 15 E5 0F UMM4: FDB DROP,DDROP
E78D E0 EF FF FF E2 21 E1 71 FDB DOLIT,-1,DUPP,EXIT
E795 ;
E795 ; M/MOD ( d n -- r q )
E795 ; Signed floored divide of double by single. Return mod and quotient.
E795 ;
E795 E7 9F E7 2C FDB MSMOD,L850
E799 05 4D 2F 4D 4F 44 L860: FCB 5,"M/MOD"
E79F MSMOD:
E79F BD E1 12 JSR DOLST
E7A2 E2 21 E2 50 E2 21 E1 EB FDB DUPP,ZLESS,DUPP,TOR
E7AA E1 40 E7 B6 FDB QBRAN,MMOD1
E7AE E5 F8 E1 EB E6 19 E1 CB FDB NEGAT,TOR,DNEGA,RFROM
E7B6 E1 EB E2 21 E2 50 MMOD1: FDB TOR,DUPP,ZLESS
E7BC E1 40 E7 C4 FDB QBRAN,MMOD2
E7C0 E1 DE E5 CF FDB RAT,PLUS
E7C4 E1 CB E7 33 E1 CB MMOD2: FDB RFROM,UMMOD,RFROM
E7CA E1 40 E7 D4 FDB QBRAN,MMOD3
E7CE E2 30 E5 F8 E2 30 FDB SWAP,NEGAT,SWAP
E7D4 E1 71 MMOD3: FDB EXIT
E7D6 ;
E7D6 ; /MOD ( n n -- r q )
E7D6 ; Signed divide. Return mod and quotient.
E7D6 ;
E7D6 E7 DF E7 99 FDB SLMOD,L860
E7DA 04 2F 4D 4F 44 L870: FCB 4,"/MOD"
E7DF BD E1 12 SLMOD: JSR DOLST
E7E2 E2 43 E2 50 E2 30 E7 9F E1 71 FDB OVER,ZLESS,SWAP,MSMOD,EXIT
E7EC ;
E7EC ; MOD ( n n -- r )
E7EC ; Signed divide. Return mod only.
E7EC ;
E7EC E7 F4 E7 DA FDB MODD,L870
E7F0 03 4D 4F 44 L880: FCB 3,"MOD"
E7F4 BD E1 12 MODD: JSR DOLST
E7F7 E7 DF E2 15 E1 71 FDB SLMOD,DROP,EXIT
E7FD ;
E7FD ; / ( n n -- q )
E7FD ; Signed divide. Return quotient only.
E7FD ;
E7FD E8 03 E7 F0 FDB SLASH,L880
E801 01 2F L890: FCB 1,"/"
E803 SLASH:
E803 BD E1 12 JSR DOLST
E806 E7 DF E2 30 E2 15 E1 71 FDB SLMOD,SWAP,DROP,EXIT
E80E ;
E80E ; Multiply
E80E ;
E80E ; UM* ( u u -- ud )
E80E ; Unsigned multiply. Return double product.
E80E ;
E80E E8 16 E8 01 FDB UMSTA,L890
E812 03 55 4D 2A L900: FCB 3,"UM*"
E816 UMSTA:
E816 8E 00 11 LDX #17 ; 16 adds and 17 shifts ...
E819 4F CLRA ; result high word
E81A 5F CLRB
E81B 20 06 BRA UUMSTA3
E81D 24 02 UUMSTA1: BCC UUMSTA2
E81F E3 E4 ADDD ,s
E821 46 UUMSTA2: RORA
E822 56 RORB ; low, result high word
E823 66 62 UUMSTA3: ROR 2,s
E825 66 63 ROR 3,s ; shift multiplier low, result low word
E827 30 1F LEAX -1,x
E829 26 F2 BNE UUMSTA1
E82B ED E4 STD ,s
E82D 37 80 PULU pc
E82F ; slow HL ...
E82F ; jsr DOLST
E82F ; FDB DOLIT,0,SWAP,DOLIT,15,TOR
E82F ;UMST1: FDB DUPP,UPLUS,TOR,TOR
E82F ; FDB DUPP,UPLUS,RFROM,PLUS,RFROM
E82F ; FDB QBRAN,UMST2
E82F ; FDB TOR,OVER,UPLUS,RFROM,PLUS
E82F ;UMST2: FDB DONXT,UMST1
E82F ; FDB ROT,DROP,EXIT
E82F ;
E82F ; _UM* ( u u -- ud )
E82F ; Unsigned multiply. Return double product.
E82F ;
E82F E8 38 E8 12 FDB UUMSTA,L900
E833 04 5F 55 4D 2A L900A: FCB 4,"_UM*"
E838 UUMSTA:
E838 BD E1 12 JSR DOLST
E83B E0 EF 00 00 E2 30 E0 EF 00 0F E1 EB FDB DOLIT,0,SWAP,DOLIT,15,TOR
E847 E2 21 E2 D4 E1 EB E1 EB UMST1: FDB DUPP,UPLUS,TOR,TOR
E84F E2 21 E2 D4 E1 CB E5 CF E1 CB FDB DUPP,UPLUS,RFROM,PLUS,RFROM
E859 E1 40 E8 67 FDB QBRAN,UMST2
E85D E1 EB E2 43 E2 D4 E1 CB E5 CF FDB TOR,OVER,UPLUS,RFROM,PLUS
E867 E1 21 E8 47 UMST2: FDB DONXT,UMST1
E86B E4 F8 E2 15 E1 71 FDB ROT,DROP,EXIT
E871 ;
E871 ; * ( n n -- n )
E871 ; Signed multiply. Return single product.
E871 ; XXX Not really signed, -200 -200 * -> -25536
E871 ;
E871 E8 77 E8 33 FDB STAR,L900A
E875 01 2A L910: FCB 1,"*"
E877 STAR:
E877 BD E1 12 JSR DOLST
E87A E8 87 E2 15 E1 71 FDB MSTAR,DROP,EXIT
E880 ;
E880 ; M* ( n n -- d )
E880 ; Signed multiply. Return double product.
E880 ;
E880 E8 87 E8 75 FDB MSTAR,L910
E884 02 4D 2A L920: FCB 2,"M*"
E887 MSTAR:
E887 BD E1 12 JSR DOLST
E88A E5 21 E2 99 E2 50 E1 EB FDB DDUP,XORR,ZLESS,TOR
E892 E6 41 E2 30 E6 41 E8 16 FDB ABSS,SWAP,ABSS,UMSTA
E89A E1 CB FDB RFROM
E89C E1 40 E8 A2 FDB QBRAN,MSTA1
E8A0 E6 19 FDB DNEGA
E8A2 E1 71 MSTA1: FDB EXIT
E8A4 ;
E8A4 ; */MOD ( n1 n2 n3 -- r q )
E8A4 ; Multiply n1 and n2, then divide by n3. Return mod and quotient.
E8A4 ;
E8A4 E8 AE E8 84 FDB SSMOD,L920
E8A8 05 2A 2F 4D 4F 44 L930: FCB 5,"*/MOD"
E8AE BD E1 12 SSMOD: JSR DOLST
E8B1 E1 EB E8 87 E1 CB E7 9F E1 71 FDB TOR,MSTAR,RFROM,MSMOD,EXIT
E8BB ;
E8BB ; */ ( n1 n2 n3 -- q )
E8BB ; Multiply n1 by n2, then divide by n3. Return quotient only.
E8BB ;
E8BB E8 C2 E8 A8 FDB STASL,L930
E8BF 02 2A 2F L940: FCB 2,"*/"
E8C2 BD E1 12 STASL: JSR DOLST
E8C5 E8 AE E2 30 E2 15 E1 71 FDB SSMOD,SWAP,DROP,EXIT
E8CD ;
E8CD ; Miscellaneous
E8CD ;
E8CD ; CELL+ ( a -- a )
E8CD ; Add cell size in byte to address.
E8CD ;
E8CD E8 D7 E8 BF FDB CELLP,L940
E8D1 05 43 45 4C 4C 2B L950: FCB 5,"CELL+"
E8D7 BD E1 12 CELLP: JSR DOLST
E8DA E1 00 FDB DOCLIT
E8DC 02 FCB CELLL
E8DD E5 CF E1 71 FDB PLUS,EXIT
E8E1 ;
E8E1 ; CELL- ( a -- a )
E8E1 ; Subtract cell size in byte from address.
E8E1 ;
E8E1 E8 EB E8 D1 FDB CELLM,L950
E8E5 05 43 45 4C 4C 2D L960: FCB 5,"CELL-"
E8EB BD E1 12 CELLM: JSR DOLST
E8EE E1 00 FDB DOCLIT
E8F0 FE FCB 0-CELLL
E8F1 E5 CF E1 71 FDB PLUS,EXIT
E8F5 ;
E8F5 ; CELLS ( n -- n )
E8F5 ; Multiply tos by cell size in bytes.
E8F5 ;
E8F5 E8 FF E8 E5 FDB CELLS,L960
E8F9 05 43 45 4C 4C 53 L970: FCB 5,"CELLS"
E8FF BD E1 12 CELLS: JSR DOLST
E902 E1 00 FDB DOCLIT
E904 02 FCB CELLL
E905 E8 77 E1 71 FDB STAR,EXIT
E909 ;
E909 ; ALIGNED ( b -- a )
E909 ; Align address to the cell boundary.
E909 ;
E909 E9 15 E8 F9 FDB ALGND,L970
E90D 07 41 4C 49 47 4E 45 44 L975: FCB 7,"ALIGNED"
E915 BD E1 12 ALGND: JSR DOLST
E918 E1 71 FDB EXIT
E91A ;
E91A ; BL ( -- 32 )
E91A ; Return 32, the blank character.
E91A ;
E91A E9 21 E9 0D FDB BLANK,L975
E91E 02 42 4C L980: FCB 2,"BL"
E921 BLANK:
E921 BD E2 EF JSR DOCONST
E924 FDB " "
E924 ; jsr DOLST
E924 ; FDB DOLIT," ",EXIT
E924 ;
E924 ; >CHAR ( c -- c )
E924 ; Filter non-printing characters.
E924 ;
E924 E9 2E E9 1E FDB TCHAR,L980
E928 05 3E 43 48 41 52 L990: FCB 5,">CHAR"
E92E BD E1 12 TCHAR: JSR DOLST
E931 E0 EF 00 7F E2 76 E2 21 FDB DOLIT,$7F,ANDD,DUPP ;mask msb
E939 E1 00 FDB DOCLIT
E93B 7F FCB 127
E93C E9 21 E6 D5 FDB BLANK,WITHI ;check for printable
E940 E1 40 E9 48 FDB QBRAN,TCHA1
E944 E2 15 E0 EF FDB DROP,DOLIT,"_" ;replace non-printables
E948 E1 71 TCHA1: FDB EXIT
E94A ;
E94A ; DEPTH ( -- n )
E94A ; Return the depth of the data stack.
E94A ;
E94A E9 54 E9 28 FDB DEPTH,L990
E94E 05 44 45 50 54 48 L1000: FCB 5,"DEPTH"
E954 BD E1 12 DEPTH: JSR DOLST
E957 E1 F9 E3 6C E1 89 E2 30 E6 31 FDB SPAT,SZERO,AT,SWAP,SUBB
E961 E1 00 FDB DOCLIT
E963 02 FCB CELLL
E964 E8 03 E1 71 FDB SLASH,EXIT
E968 ;
E968 ; PICK ( ... +n -- ... w )
E968 ; Copy the nth stack item to tos.
E968 ;
E968 E9 71 E9 4E FDB PICK,L1000
E96C 04 50 49 43 4B L1010: FCB 4,"PICK"
E971 PICK:
E971 EC E4 LDD ,s
E973 C3 00 01 ADDD #1 ; correct index
E976 58 ASLB ; CELLL* (ASSERT: CELLL=2!!!)
E977 49 ROLA
E978 AE EB LDX d,s ; pick value
E97A AF E4 STX ,s ; replace TOP
E97C 37 80 PULU pc
E97E ; slow HL ...
E97E ; jsr DOLST
E97E ; FDB PLUS1,CELLS
E97E ; FDB SPAT,PLUS,AT,EXIT
E97E ;
E97E ;
E97E ; ROLL ( ... +n -- ... w )
E97E ; Copy the nth stack item to tos.
E97E ;
E97E E9 87 E9 6C FDB ROLL,L1010
E982 04 52 4F 4C 4C L1015: FCB 4,"ROLL"
E987 ROLL:
E987 ; XXX als Primitive!
E987 ; slow HL ...
E987 BD E1 12 JSR DOLST
E98A E2 21 E3 11 FDB DUPP,TWO
E98E E6 85 E1 40 E9 9A FDB LESS,QBRAN,ROL1
E994 E2 15 E1 57 E9 A8 FDB DROP,BRAN,ROL2
E99A E2 30 E1 EB E3 06 ROL1: FDB SWAP,TOR,ONE
E9A0 E6 31 FDB SUBB
E9A2 E9 87 E1 CB E2 30 FDB ROLL,RFROM,SWAP
E9A8 E1 71 ROL2: FDB EXIT
E9AA ;
E9AA ; Memory access
E9AA ;
E9AA ; +! ( n a -- )
E9AA ; Add n to the contents at address a.
E9AA ;
E9AA E9 B1 E9 82 FDB PSTOR,L1015
E9AE 02 2B 21 L1020: FCB 2,"+!"
E9B1 PSTOR:
E9B1 35 10 PULS x ; address
E9B3 35 06 PULS d ; value
E9B5 E3 84 ADDD ,x ; add to value from address
E9B7 ED 84 STD ,x ; store back
E9B9 37 80 PULU pc
E9BB ;
E9BB ; XXX als Primitive!
E9BB ; slow HL ...
E9BB ; jsr DOLST
E9BB ; FDB SWAP,OVER,AT,PLUS
E9BB ; FDB SWAP,STORE,EXIT
E9BB ;
E9BB ; 2! ( d a -- )
E9BB ; Store the double integer to address a.
E9BB ;
E9BB E9 C2 E9 AE FDB DSTOR,L1020
E9BF 02 32 21 L1030: FCB 2,"2!"
E9C2 DSTOR:
E9C2 ; XXX als Primitive!
E9C2 ; slow HL ...
E9C2 BD E1 12 JSR DOLST
E9C5 E2 30 E2 43 E1 7B FDB SWAP,OVER,STORE
E9CB E8 D7 E1 7B E1 71 FDB CELLP,STORE,EXIT
E9D1 ;
E9D1 ; 2@ ( a -- d )
E9D1 ; Fetch double integer from address a.
E9D1 ;
E9D1 E9 D8 E9 BF FDB DAT,L1030
E9D5 02 32 40 L1040: FCB 2,"2@"
E9D8 DAT:
E9D8 ; XXX als Primitive!
E9D8 ; slow HL ...
E9D8 BD E1 12 JSR DOLST
E9DB E2 21 E8 D7 E1 89 FDB DUPP,CELLP,AT
E9E1 E2 30 E1 89 E1 71 FDB SWAP,AT,EXIT
E9E7 ;
E9E7 ; COUNT ( b -- b +n )
E9E7 ; Return count byte of a string and add 1 to byte address.
E9E7 ;
E9E7 E9 F1 E9 D5 FDB COUNT,L1040
E9EB 05 43 4F 55 4E 54 L1050: FCB 5,"COUNT"
E9F1 BD E1 12 COUNT: JSR DOLST
E9F4 E2 21 E5 96 FDB DUPP,PLUS1
E9F8 E2 30 E1 A5 E1 71 FDB SWAP,CAT,EXIT
E9FE ;
E9FE ; HERE ( -- a )
E9FE ; Return the top of the code dictionary.
E9FE ;
E9FE EA 07 E9 EB FDB HERE,L1050
EA02 04 48 45 52 45 L1060: FCB 4,"HERE"
EA07 BD E1 12 HERE: JSR DOLST
EA0A E4 93 E1 89 E1 71 FDB CP,AT,EXIT
EA10 ;
EA10 ; PAD ( -- a )
EA10 ; Return the address of the text buffer above the code dictionary.
EA10 ;
EA10 EA 18 EA 02 FDB PAD,L1060
EA14 03 50 41 44 L1070: FCB 3,"PAD"
EA18 BD E1 12 PAD: JSR DOLST
EA1B EA 07 E0 EF 00 50 E5 CF E1 71 FDB HERE,DOLIT,80,PLUS,EXIT
EA25 ;
EA25 ; TIB ( -- a )
EA25 ; Return the address of the terminal input buffer.
EA25 ;
EA25 EA 2D EA 14 FDB TIB,L1070
EA29 03 54 49 42 L1080: FCB 3,"TIB"
EA2D BD E1 12 TIB: JSR DOLST
EA30 E4 1A E8 D7 E1 89 E1 71 FDB NTIB,CELLP,AT,EXIT
EA38 ;
EA38 ; @EXECUTE ( a -- )
EA38 ; Execute vector stored in address a.
EA38 ;
EA38 EA 45 EA 29 FDB ATEXE,L1080
EA3C 08 40 45 58 45 43 55 54 45 L1090: FCB 8,"@EXECUTE"
EA45 BD E1 12 ATEXE: JSR DOLST
EA48 E1 89 E4 E3 FDB AT,QDUP ;?address or zero
EA4C E1 40 EA 52 FDB QBRAN,EXE1
EA50 E1 67 FDB EXECU ;execute if non-zero
EA52 E1 71 EXE1: FDB EXIT
EA54 ;
EA54 ; CMOVE ( b1 b2 u -- )
EA54 ; Copy u bytes from b1 to b2.
EA54 ;
EA54 EA 5E EA 3C FDB CMOVE,L1090
EA58 05 43 4D 4F 56 45 L1100: FCB 5,"CMOVE"
EA5E CMOVE:
EA5E 7E EA 81 JMP CMOVEW
EA61 EC E4 LDD ,s ;count
EA63 27 18 BEQ CMOVE3 ;zero -> leave
EA65 5D TSTB ;count low
EA66 27 02 BEQ CMOVE1
EA68 6C E4 INC ,s ;ajust high for to-0 decrementation
EA6A CMOVE1:
EA6A AE 62 LDX 2,s ;to addr
EA6C EF 62 STU 2,s ;save reg on stack
EA6E EE 64 LDU 4,s ;from addr
EA70 A6 C0 CMOVE2: LDA ,u+
EA72 A7 80 STA ,x+ ;to
EA74 5A DECB ;low count
EA75 26 F9 BNE CMOVE2
EA77 6A E4 DEC ,s ;high count
EA79 26 F5 BNE CMOVE2
EA7B EE 62 LDU 2,s
EA7D 32 66 CMOVE3: LEAS 6,s
EA7F 37 80 PULU pc
EA81 ;
EA81 ; alternative, wordwise copy ...
EA81 EC E4 CMOVEW: LDD ,s
EA83 AE 62 LDX 2,s ; destination
EA85 10 AF E4 STY ,s ; save RP
EA88 EF 62 STU 2,s ; save IP
EA8A 10 AE 64 LDY 4,s ; source
EA8D 44 LSRA ; divide by 2, count words
EA8E 56 RORB ;
EA8F 34 01 PSHS cc
EA91 27 01 BEQ CMOVEW1 ; byte decrement correction
EA93 4C INCA ; byte decrement high byte correction
EA94 83 00 00 CMOVEW1: SUBD #0
EA97 27 0A BEQ CMOVEW3
EA99 EE A1 CMOVEW2: LDU ,y++
EA9B EF 81 STU ,x++ ; destination
EA9D 5A DECB ; count low
EA9E 26 F9 BNE CMOVEW2
EAA0 4A DECA ; count high (count to 0 corrected)
EAA1 26 F6 BNE CMOVEW2
EAA3 35 01 CMOVEW3: PULS CC
EAA5 24 04 BCC CMOVEW4
EAA7 A6 A4 LDA ,y
EAA9 A7 84 STA ,x
EAAB 35 60 CMOVEW4: PULS y,u
EAAD 32 62 LEAS 2,s ; drop 3rd parameter
EAAF 37 80 PULU pc ; next
EAB1 ;
EAB1 ; slow HL ...
EAB1 ; jsr DOLST
EAB1 ; FDB TOR
EAB1 ; FDB BRAN,CMOV2
EAB1 ;CMOV1: FDB TOR,DUPP,CAT
EAB1 ; FDB RAT,CSTOR
EAB1 ; FDB PLUS1
EAB1 ; FDB RFROM,PLUS1
EAB1 ;CMOV2: FDB DONXT,CMOV1
EAB1 ; FDB DDROP,EXIT
EAB1 ;
EAB1 ;
EAB1 ; FILL ( b u c -- )
EAB1 ; Fill u bytes of character c to area beginning at b.
EAB1 ;
EAB1 EA BA EA 58 FDB FILL,L1100
EAB5 04 46 49 4C 4C L1110: FCB 4,"FILL"
EABA FILL:
EABA EC 62 LDD 2,s ;count
EABC 27 12 BEQ NFILL3 ;zero -> leave
EABE 5D TSTB ;count low
EABF 27 02 BEQ NFILL1
EAC1 6C 62 INC 2,s ;ajust high for to-0 decrementation
EAC3 NFILL1:
EAC3 AE 64 LDX 4,s ;to addr
EAC5 A6 61 LDA 1,s ;fill byte, low byte from TOS
EAC7 NFILL2:
EAC7 A7 80 STA ,x+ ;to
EAC9 5A DECB ;low count
EACA 26 FB BNE NFILL2
EACC 6A 62 DEC 2,s ;high count
EACE 26 F7 BNE NFILL2
EAD0 32 66 NFILL3: LEAS 6,s
EAD2 37 80 PULU pc
EAD4 ; slow HL ...
EAD4 ; jsr DOLST
EAD4 ; FDB SWAP,TOR,SWAP
EAD4 ; FDB BRAN,FILL2
EAD4 ;FILL1: FDB DDUP,CSTOR,PLUS1
EAD4 ;FILL2: FDB DONXT,FILL1
EAD4 ; FDB DDROP,EXIT
EAD4 ;
EAD4 ; -TRAILING ( b u -- b u )
EAD4 ; Adjust the count to eliminate trailing white space.
EAD4 ;
EAD4 EA E2 EA B5 FDB DTRAI,L1110
EAD8 09 2D 54 52 41 49 4C 49 4E 47 L1120: FCB 9,"-TRAILING"
EAE2 BD E1 12 DTRAI: JSR DOLST
EAE5 E1 EB FDB TOR
EAE7 E1 57 EB 01 FDB BRAN,DTRA2
EAEB E9 21 E2 43 E1 DE E5 CF E1 A5 E6 85 DTRA1: FDB BLANK,OVER,RAT,PLUS,CAT,LESS
EAF7 E1 40 EB 01 FDB QBRAN,DTRA2
EAFB E1 CB E5 96 E1 71 FDB RFROM,PLUS1,EXIT
EB01 E1 21 EA EB DTRA2: FDB DONXT,DTRA1
EB05 E2 FB E1 71 FDB ZERO,EXIT
EB09 ;
EB09 ; PACK$ ( b u a -- a )
EB09 ; Build a counted string with u characters from b. Null fill.
EB09 ;
EB09 EB 13 EA D8 FDB PACKS,L1120
EB0D 05 50 41 43 4B 24 L1130: FCB 5,"PACK$"
EB13 BD E1 12 PACKS: JSR DOLST
EB16 E2 21 E1 EB FDB DUPP,TOR ;strings only on cell boundary
EB1A E5 21 E1 96 FDB DDUP,CSTOR
EB1E E5 96 FDB PLUS1 ;count mod cell
EB20 E5 21 E5 CF FDB DDUP,PLUS
EB24 E2 FB E2 30 E1 96 FDB ZERO,SWAP,CSTOR ;null fill cell
EB2A E2 30 EA 5E E1 CB E1 71 FDB SWAP,CMOVE,RFROM,EXIT ;move string
EB32 ;
EB32 ; Numeric output, single precision
EB32 ;
EB32 ; DIGIT ( u -- c )
EB32 ; Convert digit u to a character.
EB32 ;
EB32 EB 3C EB 0D FDB DIGIT,L1130
EB36 05 44 49 47 49 54 L1140: FCB 5,"DIGIT"
EB3C BD E1 12 DIGIT: JSR DOLST
EB3F E1 00 FDB DOCLIT
EB41 09 FCB 9
EB42 E2 43 E6 85 FDB OVER,LESS
EB46 E1 00 FDB DOCLIT
EB48 07 FCB 7
EB49 E2 76 E5 CF FDB ANDD,PLUS
EB4D E0 EF E5 CF E1 71 FDB DOLIT,"0",PLUS,EXIT
EB53 ;
EB53 ; EXTRACT ( n base -- n c )
EB53 ; Extract the least significant digit from n.
EB53 ;
EB53 EB 5F EB 36 FDB EXTRC,L1140
EB57 07 45 58 54 52 41 43 54 L1150: FCB 7,"EXTRACT"
EB5F BD E1 12 EXTRC: JSR DOLST
EB62 E2 FB E2 30 E7 33 FDB ZERO,SWAP,UMMOD
EB68 E2 30 EB 3C E1 71 FDB SWAP,DIGIT,EXIT
EB6E ;
EB6E ; <# ( -- )
EB6E ; Initiate the numeric output process.
EB6E ;
EB6E EB 75 EB 57 FDB BDIGS,L1150
EB72 02 3C 23 L1160: FCB 2,"<#"
EB75 BD E1 12 BDIGS: JSR DOLST
EB78 EA 18 E4 54 E1 7B E1 71 FDB PAD,HLD,STORE,EXIT
EB80 ;
EB80 ; HOLD ( c -- )
EB80 ; Insert a character into the numeric output string.
EB80 ;
EB80 ;
EB80 EB 89 EB 72 FDB HOLD,L1160
EB84 04 48 4F 4C 44 L1170: FCB 4,"HOLD"
EB89 BD E1 12 HOLD: JSR DOLST
EB8C E4 54 E1 89 E5 A6 FDB HLD,AT,MINUS1
EB92 E2 21 E4 54 E1 7B E1 96 E1 71 FDB DUPP,HLD,STORE,CSTOR,EXIT
EB9C ;
EB9C ; # ( u -- u )
EB9C ; Extract one digit from u and append the digit to output string.
EB9C ;
EB9C EB A2 EB 84 FDB DIG,L1170
EBA0 01 23 L1180: FCB 1,"#"
EBA2 BD E1 12 DIG: JSR DOLST
EBA5 E3 E4 E1 89 EB 5F EB 89 E1 71 FDB BASE,AT,EXTRC,HOLD,EXIT
EBAF ;
EBAF ; #S ( u -- 0 )
EBAF ; Convert u until all digits are added to the output string.
EBAF ;
EBAF EB B6 EB A0 FDB DIGS,L1180
EBB3 02 23 53 L1190: FCB 2,"#S"
EBB6 BD E1 12 DIGS: JSR DOLST
EBB9 EB A2 E2 21 DIGS1: FDB DIG,DUPP
EBBD E1 40 EB C5 FDB QBRAN,DIGS2
EBC1 E1 57 EB B9 FDB BRAN,DIGS1
EBC5 E1 71 DIGS2: FDB EXIT
EBC7 ;
EBC7 ; SIGN ( n -- )
EBC7 ; Add a minus sign to the numeric output string.
EBC7 ;
EBC7 EB D0 EB B3 FDB SIGN,L1190
EBCB 04 53 49 47 4E L1200: FCB 4,"SIGN"
EBD0 BD E1 12 SIGN: JSR DOLST
EBD3 E2 50 FDB ZLESS
EBD5 E1 40 EB DD FDB QBRAN,SIGN1
EBD9 E0 EF EB 89 FDB DOLIT,"-",HOLD
EBDD E1 71 SIGN1: FDB EXIT
EBDF ;
EBDF ; #> ( w -- b u )
EBDF ; Prepare the output string to be TYPE'd.
EBDF ;
EBDF EB E6 EB CB FDB EDIGS,L1200
EBE3 02 23 3E L1210: FCB 2,"#>"
EBE6 BD E1 12 EDIGS: JSR DOLST
EBE9 E2 15 E4 54 E1 89 FDB DROP,HLD,AT
EBEF EA 18 E2 43 E6 31 E1 71 FDB PAD,OVER,SUBB,EXIT
EBF7 ;
EBF7 ; str ( w -- b u )
EBF7 ; Convert a signed integer to a numeric string.
EBF7 ;
EBF7 EB FF EB E3 FDB STR,L1210
EBFB 03 73 74 72 L1220: FCB 3,"str"
EBFF BD E1 12 STR: JSR DOLST
EC02 E2 21 E1 EB E6 41 FDB DUPP,TOR,ABSS
EC08 EB 75 EB B6 E1 CB FDB BDIGS,DIGS,RFROM
EC0E EB D0 EB E6 E1 71 FDB SIGN,EDIGS,EXIT
EC14 ;
EC14 ; HEX ( -- )
EC14 ; Use radix 16 as base for numeric conversions.
EC14 ;
EC14 EC 1C EB FB FDB HEX,L1220
EC18 03 48 45 58 L1230: FCB 3,"HEX"
EC1C BD E1 12 HEX: JSR DOLST
EC1F E1 00 FDB DOCLIT
EC21 10 FCB 16
EC22 E3 E4 E1 7B E1 71 FDB BASE,STORE,EXIT
EC28 ;
EC28 ; DECIMAL ( -- )
EC28 ; Use radix 10 as base for numeric conversions.
EC28 ;
EC28 EC 34 EC 18 FDB DECIM,L1230
EC2C 07 44 45 43 49 4D 41 4C L1240: FCB 7,"DECIMAL"
EC34 BD E1 12 DECIM: JSR DOLST
EC37 E1 00 FDB DOCLIT
EC39 0A FCB 10
EC3A E3 E4 E1 7B E1 71 FDB BASE,STORE,EXIT
EC40 ;
EC40 ; Numeric input, single precision
EC40 ;
EC40 ; DIGIT? ( c base -- u t )
EC40 ; Convert a character to its numeric value. A flag indicates success.
EC40 ;
EC40 EC 4B EC 2C FDB DIGTQ,L1240
EC44 06 44 49 47 49 54 3F L1250: FCB 6,"DIGIT?"
EC4B BD E1 12 DIGTQ: JSR DOLST
EC4E E1 EB E0 EF E6 31 FDB TOR,DOLIT,"0",SUBB
EC54 E1 00 FDB DOCLIT
EC56 09 FCB 9
EC57 E2 43 E6 85 FDB OVER,LESS
EC5B E1 40 EC 6E FDB QBRAN,DGTQ1
EC5F E1 00 FDB DOCLIT
EC61 07 FCB 7
EC62 E6 31 FDB SUBB
EC64 E2 21 E0 EF 00 0A E6 85 E2 87 FDB DUPP,DOLIT,10,LESS,ORR
EC6E E2 21 E1 CB E6 6E E1 71 DGTQ1: FDB DUPP,RFROM,ULESS,EXIT
EC76 ;
EC76 ; NUMBER? ( a -- n T | a F )
EC76 ; Convert a number string to integer. Push a flag on tos.
EC76 ;
EC76 EC 82 EC 44 FDB NUMBQ,L1250
EC7A 07 4E 55 4D 42 45 52 3F L1260: FCB 7,"NUMBER?"
EC82 BD E1 12 NUMBQ: JSR DOLST
EC85 E3 E4 E1 89 E1 EB E2 FB E2 43 E9 F1 FDB BASE,AT,TOR,ZERO,OVER,COUNT
EC91 E2 43 E1 A5 E0 EF E6 56 FDB OVER,CAT,DOLIT,"$",EQUAL
EC99 E1 40 EC A7 FDB QBRAN,NUMQ1
EC9D EC 1C E2 30 E5 96 FDB HEX,SWAP,PLUS1
ECA3 E2 30 E5 A6 FDB SWAP,MINUS1
ECA7 E2 43 E1 A5 E0 EF E6 56 E1 EB NUMQ1: FDB OVER,CAT,DOLIT,"-",EQUAL,TOR
ECB1 E2 30 E1 DE E6 31 E2 30 E1 DE E5 CF E4 E3 FDB SWAP,RAT,SUBB,SWAP,RAT,PLUS,QDUP
ECBF E1 40 ED 07 FDB QBRAN,NUMQ6
ECC3 E5 A6 E1 EB FDB MINUS1,TOR
ECC7 E2 21 E1 EB E1 A5 E3 E4 E1 89 EC 4B NUMQ2: FDB DUPP,TOR,CAT,BASE,AT,DIGTQ
ECD3 E1 40 EC FB FDB QBRAN,NUMQ4
ECD7 E2 30 E3 E4 E1 89 E8 77 E5 CF E1 CB FDB SWAP,BASE,AT,STAR,PLUS,RFROM
ECE3 E5 96 FDB PLUS1
ECE5 E1 21 EC C7 FDB DONXT,NUMQ2
ECE9 E1 DE E2 30 E2 15 FDB RAT,SWAP,DROP
ECEF E1 40 EC F5 FDB QBRAN,NUMQ3
ECF3 E5 F8 FDB NEGAT
ECF5 E2 30 NUMQ3: FDB SWAP
ECF7 E1 57 ED 05 FDB BRAN,NUMQ5
ECFB E1 CB E1 CB E5 0F E5 0F E2 FB NUMQ4: FDB RFROM,RFROM,DDROP,DDROP,ZERO
ED05 E2 21 NUMQ5: FDB DUPP
ED07 E1 CB E5 0F NUMQ6: FDB RFROM,DDROP
ED0B E1 CB E3 E4 E1 7B E1 71 FDB RFROM,BASE,STORE,EXIT
ED13 ;
ED13 ; Basic I/O
ED13 ;
ED13 ; ?KEY ( -- c T | F )
ED13 ; Return input character and true, or a false if no input.
ED13 ;
ED13 ;
ED13 ED 1C EC 7A FDB QKEY,L1260
ED17 04 3F 4B 45 59 L1270: FCB 4,"?KEY"
ED1C BD E1 12 QKEY: JSR DOLST
ED1F E3 88 EA 45 E1 71 FDB TQKEY,ATEXE,EXIT
ED25 ;
ED25 ; KEY ( -- c )
ED25 ; Wait for and return an input character.
ED25 ;
ED25 ED 2D ED 17 FDB KEY,L1270
ED29 03 4B 45 59 L1280: FCB 3,"KEY"
ED2D BD E1 12 KEY: JSR DOLST
ED30 ED 1C KEY1: FDB QKEY
ED32 E1 40 ED 30 FDB QBRAN,KEY1
ED36 E1 71 FDB EXIT
ED38 ;
ED38 ; EMIT ( c -- )
ED38 ; Send a character to the output device.
ED38 ;
ED38 ED 41 ED 29 FDB EMIT,L1280
ED3C 04 45 4D 49 54 L1290: FCB 4,"EMIT"
ED41 BD E1 12 EMIT: JSR DOLST
ED44 E3 97 EA 45 E1 71 FDB TEMIT,ATEXE,EXIT
ED4A ;
ED4A ; NUF? ( -- t )
ED4A ; Return false if no input, else pause and if CR return true.
ED4A ;
ED4A ED 53 ED 3C FDB NUFQ,L1290
ED4E 04 4E 55 46 3F L1300: FCB 4,"NUF?"
ED53 BD E1 12 NUFQ: JSR DOLST
ED56 ED 1C E2 21 FDB QKEY,DUPP
ED5A E1 40 ED 67 FDB QBRAN,NUFQ1
ED5E E5 0F ED 2D E1 00 FDB DDROP,KEY,DOCLIT
ED64 0A FCB CRR
ED65 E6 56 FDB EQUAL
ED67 E1 71 NUFQ1: FDB EXIT
ED69 ;
ED69 ; PACE ( -- )
ED69 ; Send a pace character for the file downloading process.
ED69 ;
ED69 ED 72 ED 4E FDB PACE,L1300
ED6D 04 50 41 43 45 L1310: FCB 4,"PACE"
ED72 BD E1 12 PACE: JSR DOLST
ED75 E1 00 FDB DOCLIT
ED77 0B FCB 11
ED78 ED 41 E1 71 FDB EMIT,EXIT
ED7C ;
ED7C ; SPACE ( -- )
ED7C ; Send the blank character to the output device.
ED7C ;
ED7C ED 86 ED 6D FDB SPACE,L1310
ED80 05 53 50 41 43 45 L1320: FCB 5,"SPACE"
ED86 BD E1 12 SPACE: JSR DOLST
ED89 E9 21 ED 41 E1 71 FDB BLANK,EMIT,EXIT
ED8F ;
ED8F ; SPACES ( +n -- )
ED8F ; Send n spaces to the output device.
ED8F ;
ED8F ED 9A ED 80 FDB SPACS,L1320
ED93 06 53 50 41 43 45 53 L1330: FCB 6,"SPACES"
ED9A BD E1 12 SPACS: JSR DOLST
ED9D E2 FB E6 9E E1 EB FDB ZERO,MAX,TOR
EDA3 E1 57 ED A9 FDB BRAN,CHAR2
EDA7 ED 86 CHAR1: FDB SPACE
EDA9 E1 21 ED A7 CHAR2: FDB DONXT,CHAR1
EDAD E1 71 FDB EXIT
EDAF ;
EDAF ; TYPE ( b u -- )
EDAF ; Output u characters from b.
EDAF ;
EDAF ED B8 ED 93 FDB TYPES,L1330
EDB3 04 54 59 50 45 L1340: FCB 4,"TYPE"
EDB8 BD E1 12 TYPES: JSR DOLST
EDBB E1 EB FDB TOR
EDBD E1 57 ED C9 FDB BRAN,TYPE2
EDC1 E2 21 E1 A5 ED 41 TYPE1: FDB DUPP,CAT,EMIT
EDC7 E5 96 FDB PLUS1
EDC9 E1 21 ED C1 TYPE2: FDB DONXT,TYPE1
EDCD E2 15 E1 71 FDB DROP,EXIT
EDD1 ;
EDD1 ; CR ( -- )
EDD1 ; Output a carriage return and a line feed.
EDD1 ;
EDD1 ED D8 ED B3 FDB CR,L1340
EDD5 02 43 52 L1350: FCB 2,"CR"
EDD8 BD E1 12 CR: JSR DOLST
EDDB E1 00 FDB DOCLIT
EDDD 0A FCB CRR
EDDE ED 41 FDB EMIT
EDE0 E1 00 FDB DOCLIT
EDE2 0D FCB LF
EDE3 ED 41 E1 71 FDB EMIT,EXIT
EDE7 ;
EDE7 ; do$ ( -- a )
EDE7 ; Return the address of a compiled string.
EDE7 ;
EDE7 ED EF ED D5 FDB DOSTR,L1350
EDEB 43 64 6F 24 L1360: FCB COMPO+3,"do$"
EDEF BD E1 12 DOSTR: JSR DOLST
EDF2 E1 CB E1 DE E1 CB E9 F1 E5 CF FDB RFROM,RAT,RFROM,COUNT,PLUS
EDFC E9 15 E1 EB E2 30 E1 EB E1 71 FDB ALGND,TOR,SWAP,TOR,EXIT
EE06 ;
EE06 ; $"| ( -- a )
EE06 ; Run time routine compiled by $". Return address of a compiled string.
EE06 ;
EE06 EE 0E ED EB FDB STRQP,L1360
EE0A 43 24 22 7C L1370: FCB COMPO+3,"$",$22,"|"
EE0E BD E1 12 STRQP: JSR DOLST
EE11 ED EF E1 71 FDB DOSTR,EXIT ;force a call to do$
EE15 ;
EE15 ; ."| ( -- )
EE15 ; Run time routine of ." . Output a compiled string.
EE15 ;
EE15 EE 1D EE 0A FDB DOTQP,L1370
EE19 43 2E 22 7C L1380: FCB COMPO+3,".",$22,"|"
EE1D BD E1 12 DOTQP: JSR DOLST
EE20 ED EF E9 F1 ED B8 E1 71 FDB DOSTR,COUNT,TYPES,EXIT
EE28 ;
EE28 ; .R ( n +n -- )
EE28 ; Display an integer in a field of n columns, right justified.
EE28 ;
EE28 EE 2F EE 19 FDB DOTR,L1380
EE2C 02 2E 52 L1390: FCB 2,".R"
EE2F BD E1 12 DOTR: JSR DOLST
EE32 E1 EB EB FF E1 CB E2 43 E6 31 FDB TOR,STR,RFROM,OVER,SUBB
EE3C ED 9A ED B8 E1 71 FDB SPACS,TYPES,EXIT
EE42 ;
EE42 ; U.R ( u +n -- )
EE42 ; Display an unsigned integer in n column, right justified.
EE42 ;
EE42 EE 4A EE 2C FDB UDOTR,L1390
EE46 03 55 2E 52 L1400: FCB 3,"U.R"
EE4A BD E1 12 UDOTR: JSR DOLST
EE4D E1 EB EB 75 EB B6 EB E6 FDB TOR,BDIGS,DIGS,EDIGS
EE55 E1 CB E2 43 E6 31 FDB RFROM,OVER,SUBB
EE5B ED 9A ED B8 E1 71 FDB SPACS,TYPES,EXIT
EE61 ;
EE61 ; U. ( u -- )
EE61 ; Display an unsigned integer in free format.
EE61 ;
EE61 EE 68 EE 46 FDB UDOT,L1400
EE65 02 55 2E L1410: FCB 2,"U."
EE68 BD E1 12 UDOT: JSR DOLST
EE6B EB 75 EB B6 EB E6 FDB BDIGS,DIGS,EDIGS
EE71 ED 86 ED B8 E1 71 FDB SPACE,TYPES,EXIT
EE77 ;
EE77 ; . ( w -- )
EE77 ; Display an integer in free format, preceeded by a space.
EE77 ;
EE77 EE 7D EE 65 FDB DOT,L1410
EE7B 01 2E L1420: FCB 1,"."
EE7D BD E1 12 DOT: JSR DOLST
EE80 E3 E4 E1 89 E1 00 FDB BASE,AT,DOCLIT
EE86 0A FCB 10
EE87 E2 99 FDB XORR ;?decimal
EE89 E1 40 EE 91 FDB QBRAN,DOT1
EE8D EE 68 E1 71 FDB UDOT,EXIT ;no, display unsigned
EE91 EB FF ED 86 ED B8 E1 71 DOT1: FDB STR,SPACE,TYPES,EXIT
EE99 ;
EE99 ; ? ( a -- )
EE99 ; Display the contents in a memory cell.
EE99 ;
EE99 EE 9F EE 7B FDB QUEST,L1420
EE9D 01 3F L1430: FCB 1,"?"
EE9F BD E1 12 QUEST: JSR DOLST
EEA2 E1 89 EE 7D E1 71 FDB AT,DOT,EXIT
EEA8 ;
EEA8 ; Parsing
EEA8 ;
EEA8 ; parse ( b u c -- b u delta ; <string> )
EEA8 ; Scan string delimited by c. Return found string and its offset.
EEA8 ;
EEA8 EE B2 EE 9D FDB PARS,L1430
EEAC 05 70 61 72 73 65 L1440: FCB 5,"parse"
EEB2 BD E1 12 PARS: JSR DOLST
EEB5 E3 F1 E1 7B E2 43 E1 EB E2 21 FDB TEMP,STORE,OVER,TOR,DUPP
EEBF E1 40 EF 3B FDB QBRAN,PARS8
EEC3 E5 A6 E3 F1 E1 89 E9 21 E6 56 FDB MINUS1,TEMP,AT,BLANK,EQUAL
EECD E1 40 EE F5 FDB QBRAN,PARS3
EED1 E1 EB FDB TOR
EED3 E9 21 E2 43 E1 A5 PARS1: FDB BLANK,OVER,CAT
EED9 E6 31 E2 50 E5 DF FDB SUBB,ZLESS,INVER
EEDF E1 40 EE F3 FDB QBRAN,PARS2
EEE3 E5 96 FDB PLUS1
EEE5 E1 21 EE D3 FDB DONXT,PARS1
EEE9 E1 CB E2 15 E2 FB E2 21 E1 71 FDB RFROM,DROP,ZERO,DUPP,EXIT
EEF3 E1 CB PARS2: FDB RFROM
EEF5 E2 43 E2 30 PARS3: FDB OVER,SWAP
EEF9 E1 EB FDB TOR
EEFB E3 F1 E1 89 E2 43 E1 A5 E6 31 PARS4: FDB TEMP,AT,OVER,CAT,SUBB
EF05 E3 F1 E1 89 E9 21 E6 56 FDB TEMP,AT,BLANK,EQUAL
EF0D E1 40 EF 13 FDB QBRAN,PARS5
EF11 E2 50 FDB ZLESS
EF13 E1 40 EF 25 PARS5: FDB QBRAN,PARS6
EF17 E5 96 FDB PLUS1
EF19 E1 21 EE FB FDB DONXT,PARS4
EF1D E2 21 E1 EB FDB DUPP,TOR
EF21 E1 57 EF 2F FDB BRAN,PARS7
EF25 E1 CB E2 15 E2 21 PARS6: FDB RFROM,DROP,DUPP
EF2B E5 96 E1 EB FDB PLUS1,TOR
EF2F E2 43 E6 31 PARS7: FDB OVER,SUBB
EF33 E1 CB E1 CB E6 31 E1 71 FDB RFROM,RFROM,SUBB,EXIT
EF3B E2 43 E1 CB E6 31 E1 71 PARS8: FDB OVER,RFROM,SUBB,EXIT
EF43 ;
EF43 ; PARSE ( c -- b u ; <string> )
EF43 ; Scan input stream and return counted string delimited by c.
EF43 ;
EF43 EF 4D EE AC FDB PARSE,L1440
EF47 05 50 41 52 53 45 L1450: FCB 5,"PARSE"
EF4D BD E1 12 PARSE: JSR DOLST
EF50 E1 EB EA 2D E4 0C E1 89 E5 CF FDB TOR,TIB,INN,AT,PLUS ;current input buffer pointer
EF5A E4 1A E1 89 E4 0C E1 89 E6 31 FDB NTIB,AT,INN,AT,SUBB ;remaining count
EF64 E1 CB EE B2 E4 0C E9 B1 E1 71 FDB RFROM,PARS,INN,PSTOR,EXIT
EF6E ;
EF6E ; .( ( -- )
EF6E ; Output following string up to next ) .
EF6E ;
EF6E EF 75 EF 47 FDB DOTPR,L1450
EF72 82 2E 28 L1460: FCB IMEDD+2,".("
EF75 BD E1 12 DOTPR: JSR DOLST
EF78 E0 EF EF 4D ED B8 E1 71 FDB DOLIT,")",PARSE,TYPES,EXIT
EF80 ;
EF80 ; ( ( -- )
EF80 ; Ignore following string up to next ) . A comment.
EF80 ;
EF80 EF 86 EF 72 FDB PAREN,L1460
EF84 81 28 L1470: FCB IMEDD+1,"("
EF86 BD E1 12 PAREN: JSR DOLST
EF89 E0 EF EF 4D E5 0F E1 71 FDB DOLIT,")",PARSE,DDROP,EXIT
EF91 ;
EF91 ; \ ( -- )
EF91 ; Ignore following text till the end of line.
EF91 ;
EF91 EF 97 EF 84 FDB BKSLA,L1470
EF95 81 5C L1480: FCB IMEDD+1,92
EF97 BD E1 12 BKSLA: JSR DOLST
EF9A E4 1A E1 89 E4 0C E1 7B E1 71 FDB NTIB,AT,INN,STORE,EXIT
EFA4 ;
EFA4 ; CHAR ( -- c )
EFA4 ; Parse next word and return its first character.
EFA4 ;
EFA4 EF AD EF 95 FDB CHAR,L1480
EFA8 04 43 48 41 52 L1490: FCB 4,"CHAR"
EFAD BD E1 12 CHAR: JSR DOLST
EFB0 E9 21 EF 4D E2 15 E1 A5 E1 71 FDB BLANK,PARSE,DROP,CAT,EXIT
EFBA ;
EFBA ; TOKEN ( -- a ; <string> )
EFBA ; Parse a word from input stream and copy it to name dictionary.
EFBA ;
EFBA EF C4 EF A8 FDB TOKEN,L1490
EFBE 05 54 4F 4B 45 4E L1500: FCB 5,"TOKEN"
EFC4 BD E1 12 TOKEN: JSR DOLST
EFC7 E9 21 EF 4D E1 00 FDB BLANK,PARSE,DOCLIT
EFCD 1F FCB 31
EFCE E6 B7 FDB MIN
EFD0 E4 9F E1 89 E2 43 E6 31 E8 EB FDB NP,AT,OVER,SUBB,CELLM
EFDA EB 13 E1 71 FDB PACKS,EXIT
EFDE ;
EFDE ; WORD ( c -- a ; <string> )
EFDE ; Parse a word from input stream and copy it to code dictionary.
EFDE ;
EFDE EF E7 EF BE FDB WORD,L1500
EFE2 04 57 4F 52 44 L1510: FCB 4,"WORD"
EFE7 BD E1 12 WORD: JSR DOLST
EFEA EF 4D EA 07 EB 13 E1 71 FDB PARSE,HERE,PACKS,EXIT
EFF2 ;
EFF2 ; Dictionary search
EFF2 ;
EFF2 ; NAME> ( na -- ca )
EFF2 ; Return a code address given a name address.
EFF2 ;
EFF2 EF FC EF E2 FDB NAMET,L1510
EFF6 05 4E 41 4D 45 3E L1520: FCB 5,"NAME>"
EFFC BD E1 12 NAMET: JSR DOLST
EFFF E8 EB E8 EB E1 89 E1 71 FDB CELLM,CELLM,AT,EXIT
F007 ;
F007 ; SAME? ( a a u -- a a f \ -0+ )
F007 ; Compare u bytes in two strings. Return 0 if identical.
F007 ;
F007 F0 11 EF F6 FDB SAMEQ,L1520
F00B 05 53 41 4D 45 3F L1530: FCB 5,"SAME?"
F011 BD E1 12 SAMEQ: JSR DOLST
F014 E1 EB FDB TOR
F016 E1 57 F0 38 FDB BRAN,SAME2
F01A E2 43 E1 DE E5 CF E1 A5 SAME1: FDB OVER,RAT,PLUS,CAT
F022 E2 43 E1 DE E5 CF E1 A5 FDB OVER,RAT,PLUS,CAT
F02A E6 31 E4 E3 FDB SUBB,QDUP
F02E E1 40 F0 38 FDB QBRAN,SAME2
F032 E1 CB E2 15 E1 71 FDB RFROM,DROP,EXIT
F038 E1 21 F0 1A SAME2: FDB DONXT,SAME1
F03C E0 EF 00 00 E1 71 FDB DOLIT,0,EXIT
F042 ;
F042 ; find ( a va -- ca na | a F )
F042 ; Search a vocabulary for a string. Return ca and na if succeeded.
F042 ;
F042 F0 4B F0 0B FDB FIND,L1530
F046 04 66 69 6E 64 L1540: FCB 4,"find"
F04B BD E1 12 FIND: JSR DOLST
F04E E2 30 E2 21 E1 A5 E5 A6 FDB SWAP,DUPP,CAT,MINUS1
F056 E3 F1 E1 7B FDB TEMP,STORE
F05A E2 21 E1 89 E1 EB E8 D7 E2 30 FDB DUPP,AT,TOR,CELLP,SWAP
F064 E1 89 E2 21 FIND1: FDB AT,DUPP
F068 E1 40 F0 92 FDB QBRAN,FIND6
F06C E2 21 E1 89 E0 EF 1F 7F E2 76 E1 DE E2 99 FDB DUPP,AT,DOLIT,MASKK,ANDD,RAT,XORR
F07A E1 40 F0 86 FDB QBRAN,FIND2
F07E E8 D7 E3 1D FDB CELLP,MONE
F082 E1 57 F0 8E FDB BRAN,FIND3
F086 E8 D7 E3 F1 E1 89 F0 11 FIND2: FDB CELLP,TEMP,AT,SAMEQ
F08E E1 57 F0 9E FIND3: FDB BRAN,FIND4
F092 E1 CB E2 15 FIND6: FDB RFROM,DROP
F096 E2 30 E8 EB E2 30 E1 71 FDB SWAP,CELLM,SWAP,EXIT
F09E E1 40 F0 AA FIND4: FDB QBRAN,FIND5
F0A2 E8 EB E8 EB FDB CELLM,CELLM
F0A6 E1 57 F0 64 FDB BRAN,FIND1
F0AA E1 CB E2 15 E2 30 E2 15 FIND5: FDB RFROM,DROP,SWAP,DROP
F0B2 E8 EB FDB CELLM
F0B4 E2 21 EF FC E2 30 E1 71 FDB DUPP,NAMET,SWAP,EXIT
F0BC ;
F0BC ; NAME? ( a -- ca na | a F )
F0BC ; Search all context vocabularies for a string.
F0BC ;
F0BC F0 C6 F0 46 FDB NAMEQ,L1540
F0C0 05 4E 41 4D 45 3F L1550: FCB 5,"NAME?"
F0C6 BD E1 12 NAMEQ: JSR DOLST
F0C9 E4 76 E2 21 E9 D8 E2 99 FDB CNTXT,DUPP,DAT,XORR
F0D1 E1 40 F0 D7 FDB QBRAN,NAMQ1
F0D5 E8 EB FDB CELLM
F0D7 E1 EB NAMQ1: FDB TOR
F0D9 E1 CB E8 D7 E2 21 E1 EB NAMQ2: FDB RFROM,CELLP,DUPP,TOR
F0E1 E1 89 E4 E3 FDB AT,QDUP
F0E5 E1 40 F0 F7 FDB QBRAN,NAMQ3
F0E9 F0 4B E4 E3 FDB FIND,QDUP
F0ED E1 40 F0 D9 FDB QBRAN,NAMQ2
F0F1 E1 CB E2 15 E1 71 FDB RFROM,DROP,EXIT
F0F7 E1 CB E2 15 NAMQ3: FDB RFROM,DROP
F0FB E2 FB E1 71 FDB ZERO,EXIT
F0FF ;
F0FF ; Terminal response
F0FF ;
F0FF ; ^H ( bot eot cur -- bot eot cur )
F0FF ; Backup the cursor by one character.
F0FF ;
F0FF F1 06 F0 C0 FDB BKSP,L1550
F103 02 5E 48 L1560: FCB 2,"^H"
F106 BD E1 12 BKSP: JSR DOLST
F109 E1 EB E2 43 E1 CB E2 30 E2 43 E2 99 FDB TOR,OVER,RFROM,SWAP,OVER,XORR
F115 E1 40 F1 31 FDB QBRAN,BACK1
F119 E0 EF 00 08 E3 C5 EA 45 E5 A6 FDB DOLIT,BKSPP,TECHO,ATEXE,MINUS1
F123 E9 21 E3 C5 EA 45 FDB BLANK,TECHO,ATEXE
F129 E0 EF 00 08 E3 C5 EA 45 FDB DOLIT,BKSPP,TECHO,ATEXE
F131 E1 71 BACK1: FDB EXIT
F133 ;
F133 ; TAP ( bot eot cur c -- bot eot cur )
F133 ; Accept and echo the key stroke and bump the cursor.
F133 ;
F133 F1 3B F1 03 FDB TAP,L1560
F137 03 54 41 50 L1570: FCB 3,"TAP"
F13B BD E1 12 TAP: JSR DOLST
F13E E2 21 E3 C5 EA 45 FDB DUPP,TECHO,ATEXE
F144 E2 43 E1 96 E5 96 E1 71 FDB OVER,CSTOR,PLUS1,EXIT
F14C ;
F14C ; kTAP ( bot eot cur c -- bot eot cur )
F14C ; Process a key stroke, CR or backspace.
F14C ;
F14C F1 55 F1 37 FDB KTAP,L1570
F150 04 6B 54 41 50 L1580: FCB 4,"kTAP"
F155 BD E1 12 KTAP: JSR DOLST
F158 E2 21 E1 00 FDB DUPP,DOCLIT
F15C 0A FCB CRR
F15D E2 99 FDB XORR
F15F E1 40 F1 83 FDB QBRAN,KTAP2
F163 E2 21 E0 EF 00 08 E2 99 FDB DUPP,DOLIT,BKSPP,XORR
F16B E2 30 E0 EF 00 7F E2 99 E2 76 FDB SWAP,DOLIT,BKSPP2,XORR,ANDD
F175 E1 40 F1 7F FDB QBRAN,KTAP1
F179 E9 21 F1 3B E1 71 FDB BLANK,TAP,EXIT
F17F F1 06 E1 71 KTAP1: FDB BKSP,EXIT
F183 E2 15 E2 30 E2 15 E2 21 E1 71 KTAP2: FDB DROP,SWAP,DROP,DUPP,EXIT
F18D ;
F18D ; accept ( b u -- b u )
F18D ; Accept characters to input buffer. Return with actual count.
F18D ;
F18D F1 98 F1 50 FDB ACCEP,L1580
F191 06 41 43 43 45 50 54 L1590: FCB 6,"ACCEPT"
F198 BD E1 12 ACCEP: JSR DOLST
F19B E2 43 E5 CF E2 43 FDB OVER,PLUS,OVER
F1A1 E5 21 E2 99 ACCP1: FDB DDUP,XORR
F1A5 E1 40 F1 C7 FDB QBRAN,ACCP4
F1A9 ED 2D E2 21 FDB KEY,DUPP
F1AD ; FDB BLANK,SUBB,DOLIT,95,ULESS
F1AD E9 21 E0 EF 00 7F E6 D5 FDB BLANK,DOLIT,127,WITHI
F1B5 E1 40 F1 BF FDB QBRAN,ACCP2
F1B9 F1 3B FDB TAP
F1BB E1 57 F1 C3 FDB BRAN,ACCP3
F1BF E3 B6 EA 45 ACCP2: FDB TTAP,ATEXE
F1C3 E1 57 F1 A1 ACCP3: FDB BRAN,ACCP1
F1C7 E2 15 E2 43 E6 31 E1 71 ACCP4: FDB DROP,OVER,SUBB,EXIT
F1CF ;
F1CF ; EXPECT ( b u -- )
F1CF ; Accept input stream and store count in SPAN.
F1CF ;
F1CF F1 DA F1 91 FDB EXPEC,L1590
F1D3 06 45 58 50 45 43 54 L1600: FCB 6,"EXPECT"
F1DA BD E1 12 EXPEC: JSR DOLST
F1DD E3 A8 EA 45 E3 FF E1 7B E2 15 E1 71 FDB TEXPE,ATEXE,SPAN,STORE,DROP,EXIT
F1E9 ;
F1E9 ; QUERY ( -- )
F1E9 ; Accept input stream to terminal input buffer.
F1E9 ;
F1E9 F1 F3 F1 D3 FDB QUERY,L1600
F1ED 05 51 55 45 52 59 L1610: FCB 5,"QUERY"
F1F3 BD E1 12 QUERY: JSR DOLST
F1F6 EA 2D E1 00 FDB TIB,DOCLIT
F1FA 50 FCB 80
F1FB E3 A8 EA 45 E4 1A E1 7B FDB TEXPE,ATEXE,NTIB,STORE
F203 E2 15 E2 FB E4 0C E1 7B E1 71 FDB DROP,ZERO,INN,STORE,EXIT
F20D ;
F20D ; Error handling
F20D ;
F20D ; CATCH ( ca -- 0 | err# )
F20D ; Execute word at ca and set up an error frame for it.
F20D ;
F20D F2 17 F1 ED FDB CATCH,L1610
F211 05 43 41 54 43 48 L1620: FCB 5,"CATCH"
F217 BD E1 12 CATCH: JSR DOLST
F21A E1 F9 E1 EB E4 65 E1 89 E1 EB FDB SPAT,TOR,HANDL,AT,TOR ;save error frame
F224 E1 B4 E4 65 E1 7B E1 67 FDB RPAT,HANDL,STORE,EXECU ;execute
F22C E1 CB E4 65 E1 7B FDB RFROM,HANDL,STORE ;restore error frame
F232 E1 CB E2 15 E2 FB E1 71 FDB RFROM,DROP,ZERO,EXIT ;no error
F23A ;
F23A ; THROW ( err# -- err# )
F23A ; Reset system to current local error frame an update error flag.
F23A ;
F23A F2 44 F2 11 FDB THROW,L1620
F23E 05 54 48 52 4F 57 L1630: FCB 5,"THROW"
F244 BD E1 12 THROW: JSR DOLST
F247 E4 65 E1 89 E1 C0 FDB HANDL,AT,RPSTO ;restore return stack
F24D E1 CB E4 65 E1 7B FDB RFROM,HANDL,STORE ;restore handler frame
F253 E1 CB E2 30 E1 EB E2 07 FDB RFROM,SWAP,TOR,SPSTO ;restore data stack
F25B E2 15 E1 CB E1 71 FDB DROP,RFROM,EXIT
F261 ;
F261 ; NULL$ ( -- a )
F261 ; Return address of a null string with zero count.
F261 ;
F261 F2 6B F2 3E FDB NULLS,L1630
F265 05 4E 55 4C 4C 24 L1640: FCB 5,"NULL$"
F26B NULLS:
F26B ; jsr DOLST
F26B ; FDB DOVAR ;emulate CREATE
F26B BD E3 33 JSR FDOVAR
F26E 00 00 FDB 0
F270 63 6F 79 6F 74 65 FCB 99,111,121,111,116,101
F276 ;
F276 ; ABORT ( -- )
F276 ; Reset data stack and jump to QUIT.
F276 ;
F276 F2 80 F2 65 FDB ABORT,L1640
F27A 05 41 42 4F 52 54 L1650: FCB 5,"ABORT"
F280 BD E1 12 ABORT: JSR DOLST
F283 F2 6B F2 44 FDB NULLS,THROW
F287 ;
F287 ; abort" ( f -- )
F287 ; Run time routine of ABORT" . Abort with a message.
F287 ;
F287 F2 92 F2 7A FDB ABORQ,L1650
F28B 46 61 62 6F 72 74 L1660: FCB COMPO+6,"abort"
F291 22 FCB 34 ;"""
F292 BD E1 12 ABORQ: JSR DOLST
F295 E1 40 F2 9D FDB QBRAN,ABOR1 ;text flag
F299 ED EF F2 44 FDB DOSTR,THROW ;pass error string
F29D ED EF E2 15 E1 71 ABOR1: FDB DOSTR,DROP,EXIT
F2A3 ;
F2A3 ; The text interpreter
F2A3 ;
F2A3 ; $INTERPRET ( a -- )
F2A3 ; Interpret a word. If failed, try to convert it to an integer.
F2A3 ;
F2A3 F2 B2 F2 8B FDB INTER,L1660
F2A7 0A 24 49 4E 54 45 52 50 52 45 54 L1670: FCB 10,"$INTERPRET"
F2B2 BD E1 12 INTER: JSR DOLST
F2B5 F0 C6 E4 E3 FDB NAMEQ,QDUP ;?defined
F2B9 E1 40 F2 D9 FDB QBRAN,INTE1
F2BD E1 89 E0 EF 40 00 E2 76 FDB AT,DOLIT,COMPO*256,ANDD ;?compile only lexicon bits
F2C5 F2 92 FDB ABORQ
F2C7 0D 20 63 6F 6D 70 69 6C 65 20 6F 6E 6C 79 FCB 13," compile only"
F2D5 E1 67 E1 71 FDB EXECU,EXIT ;execute defined word
F2D9 E4 47 EA 45 INTE1: FDB TNUMB,ATEXE
F2DD E1 40 F2 E3 FDB QBRAN,INTE2
F2E1 E1 71 FDB EXIT
F2E3 F2 44 INTE2: FDB THROW
F2E5 ;
F2E5 ; [ ( -- )
F2E5 ; Start the text interpreter.
F2E5 ;
F2E5 F2 EB F2 A7 FDB LBRAC,L1670
F2E9 81 5B L1680: FCB IMEDD+1,"["
F2EB BD E1 12 LBRAC: JSR DOLST
F2EE E0 EF F2 B2 E4 36 E1 7B E1 71 FDB DOLIT,INTER,TEVAL,STORE,EXIT
F2F8 ;
F2F8 ; .OK ( -- )
F2F8 ; Display "ok" only while interpreting.
F2F8 ;
F2F8 F3 00 F2 E9 FDB DOTOK,L1680
F2FC 03 2E 4F 4B L1690: FCB 3,".OK"
F300 BD E1 12 DOTOK: JSR DOLST
F303 E0 EF F2 B2 E4 36 E1 89 E6 56 FDB DOLIT,INTER,TEVAL,AT,EQUAL
F30D E1 40 F3 17 FDB QBRAN,DOTO1
F311 EE 1D FDB DOTQP
F313 03 20 6F 6B FCB 3," ok"
F317 ED D8 E1 71 DOTO1: FDB CR,EXIT
F31B ;
F31B ; ?STACK ( -- )
F31B ; Abort if the data stack underflows.
F31B ;
F31B F3 26 F2 FC FDB QSTAC,L1690
F31F 06 3F 53 54 41 43 4B L1700: FCB 6,"?STACK"
F326 BD E1 12 QSTAC: JSR DOLST
F329 E9 54 E2 50 FDB DEPTH,ZLESS ;check only for underflow
F32D F2 92 FDB ABORQ
F32F 0A 20 75 6E 64 65 72 66 6C 6F 77 FCB 10," underflow"
F33A E1 71 FDB EXIT
F33C ;
F33C ; EVAL ( -- )
F33C ; Interpret the input stream.
F33C ;
F33C F3 45 F3 1F FDB EVAL,L1700
F340 04 45 56 41 4C L1710: FCB 4,"EVAL"
F345 BD E1 12 EVAL: JSR DOLST
F348 EF C4 E2 21 E1 A5 EVAL1: FDB TOKEN,DUPP,CAT
F34E E1 40 F3 5C FDB QBRAN,EVAL2
F352 E4 36 EA 45 F3 26 FDB TEVAL,ATEXE,QSTAC ;evaluate input, check stack
F358 E1 57 F3 48 FDB BRAN,EVAL1
F35C E2 15 E3 D6 EA 45 E1 71 EVAL2: FDB DROP,TPROM,ATEXE,EXIT
F364 ;
F364 ; Shell
F364 ;
F364 ; PRESET ( -- )
F364 ; Reset data stack pointer and the terminal input buffer.
F364 ;
F364 F3 6F F3 40 FDB PRESE,L1710
F368 06 50 52 45 53 45 54 L1720: FCB 6,"PRESET"
F36F BD E1 12 PRESE: JSR DOLST
F372 E3 6C E1 89 E2 07 FDB SZERO,AT,SPSTO
F378 E0 EF 6E 70 E4 1A E8 D7 E1 7B E1 71 FDB DOLIT,TIBB,NTIB,CELLP,STORE,EXIT
F384 ;
F384 ; xio ( a a a -- )
F384 ; Reset the I/O vectors "EXPECT, "TAP, "ECHO and "PROMPT.
F384 ;
F384 F3 8C F3 68 FDB XIO,L1720
F388 43 78 69 6F L1730: FCB COMPO+3,"xio"
F38C BD E1 12 XIO: JSR DOLST
F38F E0 EF F1 98 E3 A8 E9 C2 FDB DOLIT,ACCEP,TEXPE,DSTOR
F397 E3 C5 E9 C2 E1 71 FDB TECHO,DSTOR,EXIT
F39D ;
F39D ; FILE ( -- )
F39D ; Select I/O vectors for file download.
F39D ;
F39D F3 A6 F3 88 FDB FILE,L1730
F3A1 04 46 49 4C 45 L1740: FCB 4,"FILE"
F3A6 BD E1 12 FILE: JSR DOLST
F3A9 E0 EF ED 72 E0 EF E2 15 FDB DOLIT,PACE,DOLIT,DROP
F3B1 E0 EF F1 55 F3 8C E1 71 FDB DOLIT,KTAP,XIO,EXIT
F3B9 ;
F3B9 ; HAND ( -- )
F3B9 ; Select I/O vectors for terminal interface.
F3B9 ;
F3B9 F3 C2 F3 A1 FDB HAND,L1740
F3BD 04 48 41 4E 44 L1750: FCB 4,"HAND"
F3C2 BD E1 12 HAND: JSR DOLST
F3C5 E0 EF F3 00 E0 EF ED 41 FDB DOLIT,DOTOK,DOLIT,EMIT
F3CD E0 EF F1 55 F3 8C E1 71 FDB DOLIT,KTAP,XIO,EXIT
F3D5 ;
F3D5 ; I/O ( -- a )
F3D5 ; Array to store default I/O vectors.
F3D5 ;
F3D5 F3 DD F3 BD FDB ISLO,L1750
F3D9 03 49 2F 4F L1760: FCB 3,"I/O"
F3DD ISLO:
F3DD ; jsr DOLST
F3DD ; FDB DOVAR ;emulate CREATE
F3DD BD E3 33 JSR FDOVAR
F3E0 E0 AD E0 CC FDB QRX,TXSTO ;default I/O vectors
F3E4 ;
F3E4 ; CONSOLE ( -- )
F3E4 ; Initiate terminal interface.
F3E4 ;
F3E4 F3 F0 F3 D9 FDB CONSO,L1760
F3E8 07 43 4F 4E 53 4F 4C 45 L1770: FCB 7,"CONSOLE"
F3F0 BD E1 12 CONSO: JSR DOLST
F3F3 F3 DD E9 D8 E3 88 E9 C2 FDB ISLO,DAT,TQKEY,DSTOR ;restore default I/O device
F3FB F3 C2 E1 71 FDB HAND,EXIT ;keyboard input
F3FF ;
F3FF ; QUIT ( -- )
F3FF ; Reset return stack pointer and start text interpreter.
F3FF ;
F3FF F4 08 F3 E8 FDB QUIT,L1770
F403 04 51 55 49 54 L1780: FCB 4,"QUIT"
F408 BD E1 12 QUIT: JSR DOLST
F40B E3 79 E1 89 E1 C0 FDB RZERO,AT,RPSTO ;reset return stack pointer
F411 F2 EB QUIT1: FDB LBRAC
F413 F1 F3 QUIT2: FDB QUERY
F415 E0 EF F3 45 F2 17 E4 E3 FDB DOLIT,EVAL,CATCH,QDUP ;evaluate input
F41D E1 40 F4 13 FDB QBRAN,QUIT2 ;continue till error
F421 E3 D6 E1 89 E1 EB FDB TPROM,AT,TOR ;save input device
F427 F3 F0 F2 6B E2 43 E2 99 FDB CONSO,NULLS,OVER,XORR ;?display error message
F42F E1 40 F4 3F FDB QBRAN,QUIT3
F433 ED 86 E9 F1 ED B8 FDB SPACE,COUNT,TYPES ;error message
F439 EE 1D FDB DOTQP
F43B 03 20 3F 20 FCB 3," ? " ;error prompt
F43F E1 CB E0 EF F3 00 E2 99 QUIT3: FDB RFROM,DOLIT,DOTOK,XORR
F447 E1 40 F4 51 FDB QBRAN,QUIT4
F44B E0 EF 00 1B ED 41 FDB DOLIT,ERR,EMIT ;file error, tell host
F451 F3 6F QUIT4: FDB PRESE
F453 E1 57 F4 11 FDB BRAN,QUIT1
F457 ;
F457 ; The compiler
F457 ;
F457 ; ' ( -- ca )
F457 ; Search context vocabularies for the next word in input stream.
F457 ;
F457 F4 5D F4 03 FDB TICK,L1780
F45B 01 27 L1790: FCB 1,"'"
F45D BD E1 12 TICK: JSR DOLST
F460 EF C4 F0 C6 FDB TOKEN,NAMEQ ;?defined
F464 E1 40 F4 6A FDB QBRAN,TICK1
F468 E1 71 FDB EXIT ;yes, push code address
F46A F2 44 TICK1: FDB THROW
F46C ;
F46C ; ALLOT ( n -- )
F46C ; Allocate n bytes to the code dictionary.
F46C ;
F46C F4 76 F4 5B FDB ALLOT,L1790
F470 05 41 4C 4C 4F 54 L1800: FCB 5,"ALLOT"
F476 BD E1 12 ALLOT: JSR DOLST
F479 E4 93 E9 B1 E1 71 FDB CP,PSTOR,EXIT ;adjust code pointer
F47F ;
F47F ; , ( w -- )
F47F ; Compile an integer into the code dictionary.
F47F ;
F47F F4 85 F4 70 FDB COMMA,L1800
F483 01 2C L1810: FCB 1,","
F485 BD E1 12 COMMA: JSR DOLST
F488 EA 07 E2 21 E8 D7 FDB HERE,DUPP,CELLP ;cell boundary
F48E E4 93 E1 7B E1 7B E1 71 FDB CP,STORE,STORE,EXIT ;adjust code pointer and compile
F496 ;
F496 ; [COMPILE] ( -- ; <string> )
F496 ; Compile the next immediate word into code dictionary.
F496 ;
F496 F4 A4 F4 83 FDB BCOMP,L1810
F49A 89 5B 43 4F 4D 50 49 4C 45 5D L1820: FCB IMEDD+9,"[COMPILE]"
F4A4 BD E1 12 BCOMP: JSR DOLST
F4A7 F4 5D F4 85 E1 71 FDB TICK,COMMA,EXIT
F4AD ;
F4AD ; COMPILE ( -- )
F4AD ; Compile the next address in colon list to code dictionary.
F4AD ;
F4AD F4 B9 F4 9A FDB COMPI,L1820
F4B1 47 43 4F 4D 50 49 4C 45 L1830: FCB COMPO+7,"COMPILE"
F4B9 BD E1 12 COMPI: JSR DOLST
F4BC E1 CB E2 21 E1 89 F4 85 FDB RFROM,DUPP,AT,COMMA ;compile address
F4C4 E8 D7 E1 EB E1 71 FDB CELLP,TOR,EXIT ;adjust return address
F4CA ;
F4CA ; LITERAL ( w -- )
F4CA ; Compile tos to code dictionary as an integer literal.
F4CA ;
F4CA F4 D6 F4 B1 FDB LITER,L1830
F4CE 87 4C 49 54 45 52 41 4C L1840: FCB IMEDD+7,"LITERAL"
F4D6 BD E1 12 LITER: JSR DOLST
F4D9 F4 B9 E0 EF F4 85 E1 71 FDB COMPI,DOLIT,COMMA,EXIT
F4E1 ;
F4E1 ; $," ( -- )
F4E1 ; Compile a literal string up to next " .
F4E1 ;
F4E1 F4 E9 F4 CE FDB STRCQ,L1840
F4E5 03 24 2C 22 L1850: FCB 3,"$,",34
F4E9 BD E1 12 STRCQ: JSR DOLST
F4EC E0 EF 00 22 EF E7 FDB DOLIT,34,WORD ;move string to code dictionary
F4F2 E9 F1 E5 CF E9 15 FDB COUNT,PLUS,ALGND ;calculate aligned end of string
F4F8 E4 93 E1 7B E1 71 FDB CP,STORE,EXIT ;adjust the code pointer
F4FE ;
F4FE ; RECURSE ( -- )
F4FE ; Make the current word available for compilation.
F4FE ;
F4FE F5 0A F4 E5 FDB RECUR,L1850
F502 87 52 45 43 55 52 53 45 L1860: FCB IMEDD+7,"RECURSE"
F50A BD E1 12 RECUR: JSR DOLST
F50D E4 AD E1 89 EF FC F4 85 E1 71 FDB LAST,AT,NAMET,COMMA,EXIT
F517 ;
F517 ; Structures
F517 ;
F517 ; DO ( -- a m )
F517 ; Start a DO-LOOP/+LOOP structure in a colon definition.
F517 ;
F517 F5 1E F5 02 FDB DO,L1860
F51B 82 44 4F L1861: FCB IMEDD+2,"DO"
F51E BD E1 12 DO: JSR DOLST
F521 F4 B9 F5 A8 EA 07 FDB COMPI,DODO,HERE
F527 E3 06 FDB ONE ; marker for DO
F529 E1 71 FDB EXIT
F52B ;
F52B ; ?DO ( -- a m )
F52B ; Start a ?DO-LOOP/+LOOP structure in a colon definition.
F52B ;
F52B F5 33 F5 1B FDB QDO,L1861
F52F 83 3F 44 4F L1862: FCB IMEDD+3,"?DO"
F533 BD E1 12 QDO: JSR DOLST
F536 F4 B9 F5 4E EA 07 FDB COMPI,DOQDO,HERE
F53C F4 B9 00 00 FDB COMPI,0 ; branch destination placeholder
F540 E3 11 FDB TWO ; marker for ?DO
F542 E1 71 FDB EXIT
F544 ;
F544 ; (?DO) ( w w -- )
F544 ; Runtime part of DO in a DO-LOOP/+LOOP structure.
F544 ;
F544 F5 4E F5 2F FDB DOQDO,L1862
F548 05 28 3F 44 4F 29 L1862A: FCB 5,"(?DO)"
F54E DOQDO:
F54E 35 06 PULS d ;start
F550 10 A3 E4 CMPD ,s ;start < end -> ok
F553 2D 06 BLT DOQDO1
F555 32 62 LEAS 2,s ;drop end
F557 EE C4 LDU ,u
F559 37 80 PULU pc ;branch past loop
F55B DOQDO1:
F55B 35 10 PULS x ;end
F55D AF A3 STX ,--y ;end to return stack
F55F ED A3 STD ,--y ;start to return stack
F561 33 42 LEAU 2,u ;skip jump forward
F563 37 80 PULU pc
F565 ;
F565 ; -DO ( -- a m )
F565 ; Start a -DO-LOOP/+LOOP structure in a colon definition.
F565 ;
F565 F5 6D F5 48 FDB MDO,L1862A
F569 83 2D 44 4F L1862B: FCB IMEDD+3,"-DO"
F56D BD E1 12 MDO: JSR DOLST
F570 F4 B9 F5 88 EA 07 FDB COMPI,DOMDO,HERE
F576 F4 B9 00 00 FDB COMPI,0 ; branch destination placeholder
F57A E3 11 FDB TWO ; marker for ?DO/-DO
F57C E1 71 FDB EXIT
F57E ;
F57E ; (-DO) ( w w -- )
F57E ; Runtime part of -DO in a -DO-LOOP/+LOOP structure.
F57E ;
F57E F5 88 F5 69 FDB DOMDO,L1862B
F582 05 28 2D 44 4F 29 L1862C: FCB 5,"(-DO)"
F588 DOMDO:
F588 35 06 PULS d ;start
F58A 10 A3 E4 CMPD ,s ;start > end -> ok
F58D 2E 06 BGT DOMDO1
F58F 32 62 LEAS 2,s ;drop end
F591 EE C4 LDU ,u
F593 37 80 PULU pc ;branch past loop
F595 DOMDO1:
F595 35 10 PULS x ;end
F597 AF A3 STX ,--y ;end to return stack
F599 ED A3 STD ,--y ;start to return stack
F59B 33 42 LEAU 2,u ;skip jump forward
F59D 37 80 PULU pc
F59F ;
F59F ; (DO) ( w w -- )
F59F ; Runtime part of DO in a DO-LOOP/+LOOP structure.
F59F ;
F59F F5 A8 F5 82 FDB DODO,L1862C
F5A3 04 28 44 4F 29 L1863: FCB 4,"(DO)"
F5A8 DODO:
F5A8 35 16 PULS d,x ;start first, end second
F5AA AF A3 STX ,--y ;end to return stack
F5AC ED A3 STD ,--y ;start to return stack
F5AE 37 80 PULU pc
F5B0 ;
F5B0 ; (LOOP) ( -- )
F5B0 ; Runtime part of LOOP
F5B0 ;
F5B0 F5 BB F5 A3 FDB DOLOOP,L1863
F5B4 06 28 4C 4F 4F 50 29 L1864: FCB 6,"(LOOP)"
F5BB DOLOOP:
F5BB CC 00 01 LDD #1
F5BE 20 1D BRA DOPLOF
F5C0 ;
F5C0 ; (+LOOP) ( -- )
F5C0 ; Runtime part of +LOOP
F5C0 ;
F5C0 F5 CC F5 B4 FDB DOPLOOP,L1864
F5C4 87 28 2B 4C 4F 4F 50 29 L1865: FCB IMEDD+7,"(+LOOP)"
F5CC DOPLOOP:
F5CC EC E1 LDD ,s++ ; increment
F5CE 2A 0D BPL DOPLOF ; forward
F5D0 E3 A4 ADDD ,y ; start/index
F5D2 10 A3 22 CMPD 2,y ; end
F5D5 2F 13 BLE DOPLO1 ; index <= end -> leave
F5D7 ED A4 STD ,y
F5D9 EE C4 LDU ,u ; branch to begin of loop
F5DB 37 80 PULU pc
F5DD ;
F5DD E3 A4 DOPLOF: ADDD ,y
F5DF 10 A3 22 CMPD 2,y ; end
F5E2 2C 06 BGE DOPLO1 ; index >= end -> leave
F5E4 ED A4 STD ,y ; save back
F5E6 EE C4 LDU ,u ; branch to begin of loop
F5E8 37 80 PULU pc
F5EA DOPLO1:
F5EA 33 42 LEAU 2,u ; skip back destination
F5EC 31 24 LEAY 4,y ; remove index and upper from r stack
F5EE 37 80 PULU pc
F5F0 ;
F5F0 ; LOOP ( a m -- )
F5F0 ; Terminate a DO/?DO-LOOP loop structure.
F5F0 ;
F5F0 F5 F9 F5 C4 FDB LOOP,L1865
F5F4 84 4C 4F 4F 50 L1866: FCB IMEDD+4,"LOOP"
F5F9 BD E1 12 LOOP: JSR DOLST
F5FC F4 B9 F5 BB FDB COMPI,DOLOOP
F600 E3 11 E6 56 E1 40 F6 12 FDB TWO,EQUAL,QBRAN,LOOP1
F608 EA 07 E8 D7 E2 43 E1 7B E8 D7 FDB HERE,CELLP,OVER,STORE,CELLP ; branch forward destination
F612 F4 85 E1 71 LOOP1: FDB COMMA,EXIT
F616 ;
F616 ;
F616 ; +LOOP ( a m -- )
F616 ; Terminate a DO/?DO-+LOOP loop structure.
F616 ;
F616 F6 20 F5 F4 FDB PLOOP,L1866
F61A 85 2B 4C 4F 4F 50 L1867: FCB IMEDD+5,"+LOOP"
F620 BD E1 12 PLOOP: JSR DOLST
F623 F4 B9 F5 CC FDB COMPI,DOPLOOP
F627 E3 11 E6 56 E1 40 F6 39 FDB TWO,EQUAL,QBRAN,PLOOP1
F62F EA 07 E8 D7 E2 43 E1 7B E8 D7 FDB HERE,CELLP,OVER,STORE,CELLP ; branch forward destination
F639 F4 85 E1 71 PLOOP1: FDB COMMA,EXIT
F63D ;
F63D ; LEAVE ( -- )
F63D ; Leave DO/LOOP
F63D ;
F63D F6 47 F6 1A FDB LEAVE,L1867
F641 05 4C 45 41 56 45 L1868: FCB 5,"LEAVE"
F647 LEAVE:
F647 EC A4 LDD ,y ;take index on return stack
F649 ED 22 STD 2,y ;and change end to it
F64B 37 80 PULU pc
F64D ;
F64D ; FOR ( -- a )
F64D ; Start a FOR-NEXT loop structure in a colon definition.
F64D ;
F64D F6 55 F6 1A FDB FOR,L1867
F651 83 46 4F 52 L1870: FCB IMEDD+3,"FOR"
F655 BD E1 12 FOR: JSR DOLST
F658 F4 B9 E1 EB EA 07 E1 71 FDB COMPI,TOR,HERE,EXIT
F660 ;
F660 ; BEGIN ( -- a )
F660 ; Start an infinite or indefinite loop structure.
F660 ;
F660 F6 6A F6 51 FDB BEGIN,L1870
F664 85 42 45 47 49 4E L1880: FCB IMEDD+5,"BEGIN"
F66A BD E1 12 BEGIN: JSR DOLST
F66D EA 07 E1 71 FDB HERE,EXIT
F671 ;
F671 ; NEXT ( a -- )
F671 ; Terminate a FOR-NEXT loop structure.
F671 ;
F671 F6 7A F6 64 FDB NEXT,L1880
F675 84 4E 45 58 54 L1890: FCB IMEDD+4,"NEXT"
F67A BD E1 12 NEXT: JSR DOLST
F67D F4 B9 E1 21 F4 85 E1 71 FDB COMPI,DONXT,COMMA,EXIT
F685 ;
F685 ; UNTIL ( a -- )
F685 ; Terminate a BEGIN-UNTIL indefinite loop structure.
F685 ;
F685 F6 8F F6 75 FDB UNTIL,L1890
F689 85 55 4E 54 49 4C L1900: FCB IMEDD+5,"UNTIL"
F68F BD E1 12 UNTIL: JSR DOLST
F692 F4 B9 E1 40 F4 85 E1 71 FDB COMPI,QBRAN,COMMA,EXIT
F69A ;
F69A ; AGAIN ( a -- )
F69A ; Terminate a BEGIN-AGAIN infinite loop structure.
F69A ;
F69A F6 A4 F6 89 FDB AGAIN,L1900
F69E 85 41 47 41 49 4E L1910: FCB IMEDD+5,"AGAIN"
F6A4 BD E1 12 AGAIN: JSR DOLST
F6A7 F4 B9 E1 57 F4 85 E1 71 FDB COMPI,BRAN,COMMA,EXIT
F6AF ;
F6AF ; IF ( -- A )
F6AF ; Begin a conditional branch structure.
F6AF ;
F6AF F6 B6 F6 9E FDB IFF,L1910
F6B3 82 49 46 L1920: FCB IMEDD+2,"IF"
F6B6 BD E1 12 IFF: JSR DOLST
F6B9 F4 B9 E1 40 EA 07 FDB COMPI,QBRAN,HERE
F6BF E2 FB F4 85 E1 71 FDB ZERO,COMMA,EXIT
F6C5 ;
F6C5 ; AHEAD ( -- A )
F6C5 ; Compile a forward branch instruction.
F6C5 ;
F6C5 F6 CF F6 B3 FDB AHEAD,L1920
F6C9 85 41 48 45 41 44 L1930: FCB IMEDD+5,"AHEAD"
F6CF BD E1 12 AHEAD: JSR DOLST
F6D2 F4 B9 E1 57 EA 07 E2 FB F4 85 E1 71 FDB COMPI,BRAN,HERE,ZERO,COMMA,EXIT
F6DE ;
F6DE ; REPEAT ( A a -- )
F6DE ; Terminate a BEGIN-WHILE-REPEAT indefinite loop.
F6DE ;
F6DE F6 E9 F6 C9 FDB REPEA,L1930
F6E2 86 52 45 50 45 41 54 L1940: FCB IMEDD+6,"REPEAT"
F6E9 BD E1 12 REPEA: JSR DOLST
F6EC F6 A4 EA 07 E2 30 E1 7B E1 71 FDB AGAIN,HERE,SWAP,STORE,EXIT
F6F6 ;
F6F6 ; THEN ( A -- )
F6F6 ; Terminate a conditional branch structure.
F6F6 ;
F6F6 F6 FF F6 E2 FDB THENN,L1940
F6FA 84 54 48 45 4E L1950: FCB IMEDD+4,"THEN"
F6FF BD E1 12 THENN: JSR DOLST
F702 EA 07 E2 30 E1 7B E1 71 FDB HERE,SWAP,STORE,EXIT
F70A ;
F70A ; AFT ( a -- a A )
F70A ; Jump to THEN in a FOR-AFT-THEN-NEXT loop the first time through.
F70A ;
F70A F7 12 F6 FA FDB AFT,L1950
F70E 83 41 46 54 L1960: FCB IMEDD+3,"AFT"
F712 BD E1 12 AFT: JSR DOLST
F715 E2 15 F6 CF F6 6A E2 30 E1 71 FDB DROP,AHEAD,BEGIN,SWAP,EXIT
F71F ;
F71F ; ELSE ( A -- A )
F71F ; Start the false clause in an IF-ELSE-THEN structure.
F71F ;
F71F F7 28 F7 0E FDB ELSEE,L1960
F723 84 45 4C 53 45 L1970: FCB IMEDD+4,"ELSE"
F728 BD E1 12 ELSEE: JSR DOLST
F72B F6 CF E2 30 F6 FF E1 71 FDB AHEAD,SWAP,THENN,EXIT
F733 ;
F733 ; WHILE ( a -- A a )
F733 ; Conditional branch out of a BEGIN-WHILE-REPEAT loop.
F733 ;
F733 F7 3D F7 23 FDB WHILE,L1970
F737 85 57 48 49 4C 45 L1980: FCB IMEDD+5,"WHILE"
F73D BD E1 12 WHILE: JSR DOLST
F740 F6 B6 E2 30 E1 71 FDB IFF,SWAP,EXIT
F746 ;
F746 ; ABORT" ( -- ; <string> )
F746 ; Conditional abort with an error message.
F746 ;
F746 F7 51 F7 37 FDB ABRTQ,L1980
F74A 86 41 42 4F 52 54 22 L1990: FCB IMEDD+6,"ABORT",34
F751 BD E1 12 ABRTQ: JSR DOLST
F754 F4 B9 F2 92 F4 E9 E1 71 FDB COMPI,ABORQ,STRCQ,EXIT
F75C ;
F75C ; $" ( -- ; <string> )
F75C ; Compile an inline string literal.
F75C ;
F75C F7 63 F7 4A FDB STRQ,L1990
F760 82 24 22 L2000: FCB IMEDD+2,"$",$22
F763 BD E1 12 STRQ: JSR DOLST
F766 F4 B9 EE 0E F4 E9 E1 71 FDB COMPI,STRQP,STRCQ,EXIT
F76E ;
F76E ; ." ( -- ; <string> )
F76E ; Compile an inline string literal to be typed out at run time.
F76E ;
F76E F7 75 F7 60 FDB DOTQ,L2000
F772 82 2E 22 L2010: FCB IMEDD+2,".",$22
F775 BD E1 12 DOTQ: JSR DOLST
F778 F4 B9 EE 1D F4 E9 E1 71 FDB COMPI,DOTQP,STRCQ,EXIT
F780 ;
F780 ; Name compiler
F780 ;
F780 ; ?UNIQUE ( a -- a )
F780 ; Display a warning message if the word already exists.
F780 ;
F780 F7 8C F7 72 FDB UNIQU,L2010
F784 07 3F 55 4E 49 51 55 45 L2020: FCB 7,"?UNIQUE"
F78C BD E1 12 UNIQU: JSR DOLST
F78F E2 21 F0 C6 FDB DUPP,NAMEQ ;?name exists
F793 E1 40 F7 A7 FDB QBRAN,UNIQ1
F797 EE 1D FDB DOTQP ;redefinitions are OK
F799 07 20 72 65 44 65 66 20 FCB 7," reDef " ;but the user should be warned
F7A1 E2 43 E9 F1 ED B8 FDB OVER,COUNT,TYPES ;just in case its not planned
F7A7 E2 15 E1 71 UNIQ1: FDB DROP,EXIT
F7AB ;
F7AB ; $,n ( na -- )
F7AB ; Build a new dictionary name using the string at na.
F7AB ;
F7AB F7 B3 F7 84 FDB SNAME,L2020
F7AF 03 24 2C 6E L2030: FCB 3,"$,n"
F7B3 BD E1 12 SNAME: JSR DOLST
F7B6 E2 21 E1 A5 FDB DUPP,CAT ;?null input
F7BA E1 40 F7 E4 FDB QBRAN,PNAM1
F7BE F7 8C FDB UNIQU ;?redefinition
F7C0 E2 21 E4 AD E1 7B FDB DUPP,LAST,STORE ;save na for vocabulary link
F7C6 EA 07 E9 15 E2 30 FDB HERE,ALGND,SWAP ;align code address
F7CC E8 EB FDB CELLM ;link address
F7CE E4 87 E1 89 E1 89 E2 43 E1 7B FDB CRRNT,AT,AT,OVER,STORE
F7D8 E8 EB E2 21 E4 9F E1 7B FDB CELLM,DUPP,NP,STORE ;adjust name pointer
F7E0 E1 7B E1 71 FDB STORE,EXIT ;save code pointer
F7E4 EE 0E PNAM1: FDB STRQP
F7E6 05 20 6E 61 6D 65 FCB 5," name" ;null input
F7EC F2 44 FDB THROW
F7EE ;
F7EE ; FORTH compiler
F7EE ;
F7EE ; $COMPILE ( a -- )
F7EE ; Compile next word to code dictionary as a token or literal.
F7EE ;
F7EE F7 FB F7 AF FDB SCOMP,L2030
F7F2 08 24 43 4F 4D 50 49 4C 45 L2040: FCB 8,"$COMPILE"
F7FB BD E1 12 SCOMP: JSR DOLST
F7FE F0 C6 E4 E3 FDB NAMEQ,QDUP ;?defined
F802 E1 40 F8 1A FDB QBRAN,SCOM2
F806 E1 89 E0 EF 80 00 E2 76 FDB AT,DOLIT,IMEDD*256,ANDD ;?immediate
F80E E1 40 F8 16 FDB QBRAN,SCOM1
F812 E1 67 E1 71 FDB EXECU,EXIT ;its immediate, execute
F816 F4 85 E1 71 SCOM1: FDB COMMA,EXIT
F81A E4 47 EA 45 SCOM2: FDB TNUMB,ATEXE
F81E E1 40 F8 26 FDB QBRAN,SCOM3
F822 F4 D6 E1 71 FDB LITER,EXIT ;compile number as integer
F826 F2 44 SCOM3: FDB THROW
F828 ;
F828 ; OVERT ( -- )
F828 ; Link a new word into the current vocabulary.
F828 ;
F828 F8 32 F7 F2 FDB OVERT,L2040
F82C 05 4F 56 45 52 54 L2050: FCB 5,"OVERT"
F832 BD E1 12 OVERT: JSR DOLST
F835 E4 AD E1 89 E4 87 E1 89 E1 7B E1 71 FDB LAST,AT,CRRNT,AT,STORE,EXIT
F841 ;
F841 ; ; ( -- )
F841 ; Terminate a colon definition.
F841 ;
F841 F8 47 F8 2C FDB SEMIS,L2050
F845 C1 3B L2060: FCB IMEDD+COMPO+1,";"
F847 BD E1 12 SEMIS: JSR DOLST
F84A F4 B9 E1 71 F2 EB F8 32 E1 71 FDB COMPI,EXIT,LBRAC,OVERT,EXIT
F854 ;
F854 ; ] ( -- )
F854 ; Start compiling the words in the input stream.
F854 ;
F854 F8 5A F8 45 FDB RBRAC,L2060
F858 01 5D L2070: FCB 1,"]"
F85A BD E1 12 RBRAC: JSR DOLST
F85D E0 EF F7 FB E4 36 E1 7B E1 71 FDB DOLIT,SCOMP,TEVAL,STORE,EXIT
F867 ;
F867 ; call, ( ca -- )
F867 ; Assemble a call instruction to ca.
F867 ;
F867 F8 71 F8 58 FDB CALLC,L2070
F86B 05 63 61 6C 6C 2C L2080: FCB 5,"call,"
F871 BD E1 12 CALLC: JSR DOLST
F874 E1 00 FDB DOCLIT
F876 BD FCB CALLL
F877 EA 07 E1 96 FDB HERE,CSTOR ;Direct Threaded Code
F87B E3 06 F4 76 FDB ONE,ALLOT
F87F F4 85 E1 71 FDB COMMA,EXIT ;DTC 6809 extended addr jsr
F883 ;
F883 ; : ( -- ; <string> )
F883 ; Start a new colon definition using next word as its name.
F883 ;
F883 F8 89 F8 6B FDB COLON,L2080
F887 01 3A L2090: FCB 1,":"
F889 BD E1 12 COLON: JSR DOLST
F88C EF C4 F7 B3 E0 EF E1 12 FDB TOKEN,SNAME,DOLIT,DOLST
F894 F8 71 F8 5A E1 71 FDB CALLC,RBRAC,EXIT
F89A ;
F89A ; IMMEDIATE ( -- )
F89A ; Make the last compiled word an immediate word.
F89A ;
F89A F8 A8 F8 87 FDB IMMED,L2090
F89E 09 49 4D 4D 45 44 49 41 54 45 L2100: FCB 9,"IMMEDIATE"
F8A8 BD E1 12 IMMED: JSR DOLST
F8AB E0 EF 80 00 E4 AD E1 89 E1 89 E2 87 FDB DOLIT,IMEDD*256,LAST,AT,AT,ORR
F8B7 E4 AD E1 89 E1 7B E1 71 FDB LAST,AT,STORE,EXIT
F8BF ;
F8BF ; Defining words
F8BF ;
F8BF ; USER ( u -- ; <string> )
F8BF ; Compile a new user variable.
F8BF ;
F8BF F8 C8 F8 9E FDB USER,L2100
F8C3 04 55 53 45 52 L2110: FCB 4,"USER"
F8C8 BD E1 12 USER: JSR DOLST
F8CB EF C4 F7 B3 F8 32 FDB TOKEN,SNAME,OVERT
F8D1 ; FDB DOLIT,DOLST,CALLC
F8D1 ; FDB DOLIT,DOUSE,COMMA
F8D1 ; fast implementation ....
F8D1 E0 EF E3 5B F8 71 FDB DOLIT,FDOUSE,CALLC
F8D7 F4 85 E1 71 FDB COMMA,EXIT
F8DB ;
F8DB ; CREATE ( -- ; <string> )
F8DB ; Compile a new array entry without allocating code space.
F8DB ;
F8DB F8 E6 F8 C3 FDB CREAT,L2110
F8DF 06 43 52 45 41 54 45 L2120: FCB 6,"CREATE"
F8E6 BD E1 12 CREAT: JSR DOLST
F8E9 EF C4 F7 B3 F8 32 FDB TOKEN,SNAME,OVERT
F8EF ; FDB DOLIT,DOLST,CALLC
F8EF ; FDB DOLIT,DOVAR,COMMA,EXIT
F8EF ; fast implementation ....
F8EF E0 EF E3 33 F8 71 E1 71 FDB DOLIT,FDOVAR,CALLC,EXIT
F8F7 ;
F8F7 ; VARIABLE ( -- ; <string> )
F8F7 ; Compile a new variable initialized to 0.
F8F7 ;
F8F7 F9 04 F8 DF FDB VARIA,L2120
F8FB 08 56 41 52 49 41 42 4C 45 L2130: FCB 8,"VARIABLE"
F904 BD E1 12 VARIA: JSR DOLST
F907 F8 E6 E2 FB F4 85 E1 71 FDB CREAT,ZERO,COMMA,EXIT
F90F ;
F90F ; CONSTANT ( w -- ; <string> )
F90F ; Compile a new constant with value w.
F90F ;
F90F F9 1C F8 FB FDB CONST,L2130
F913 08 43 4F 4E 53 54 41 4E 54 L2135: FCB 8,"CONSTANT"
F91C BD E1 12 CONST: JSR DOLST
F91F EF C4 F7 B3 F8 32 FDB TOKEN,SNAME,OVERT
F925 E0 EF E2 EF F8 71 FDB DOLIT,DOCONST,CALLC
F92B F4 85 E1 71 FDB COMMA,EXIT
F92F ;
F92F ; Tools
F92F ;
F92F ; _TYPE ( b u -- )
F92F ; Display a string. Filter non-printing characters.
F92F ;
F92F F9 39 F9 13 FDB UTYPE,L2135
F933 05 5F 54 59 50 45 L2140: FCB 5,"_TYPE"
F939 BD E1 12 UTYPE: JSR DOLST
F93C E1 EB FDB TOR ;start count down loop
F93E E1 57 F9 4C FDB BRAN,UTYP2 ;skip first pass
F942 E2 21 E1 A5 E9 2E ED 41 UTYP1: FDB DUPP,CAT,TCHAR,EMIT
F94A E5 96 FDB PLUS1 ;increment address
F94C E1 21 F9 42 UTYP2: FDB DONXT,UTYP1
F950 E2 15 E1 71 FDB DROP,EXIT
F954 ;
F954 ; dm+ ( a u -- a )
F954 ; Dump u bytes from , leaving a+u on the stack.
F954 ;
F954 F9 5C F9 33 FDB DUMPP,L2140
F958 03 64 6D 2B L2150: FCB 3,"dm+"
F95C BD E1 12 DUMPP: JSR DOLST
F95F E2 43 E0 EF 00 04 EE 4A FDB OVER,DOLIT,4,UDOTR ;display address
F967 ED 86 E1 EB FDB SPACE,TOR ;start count down loop
F96B E1 57 F9 7B FDB BRAN,PDUM2 ;skip first pass
F96F E2 21 E1 A5 E0 EF 00 03 EE 4A PDUM1: FDB DUPP,CAT,DOLIT,3,UDOTR
F979 E5 96 FDB PLUS1 ;increment address
F97B E1 21 F9 6F PDUM2: FDB DONXT,PDUM1
F97F E1 71 FDB EXIT
F981 ;
F981 ; DUMP ( a u -- )
F981 ; Dump u bytes from a, in a formatted manner.
F981 ;
F981 F9 8A F9 58 FDB DUMP,L2150
F985 04 44 55 4D 50 L2160: FCB 4,"DUMP"
F98A BD E1 12 DUMP: JSR DOLST
F98D E3 E4 E1 89 E1 EB EC 1C FDB BASE,AT,TOR,HEX ;save radix, set hex
F995 E1 00 FDB DOCLIT
F997 10 FCB 16
F998 E8 03 FDB SLASH ;change count to lines
F99A E1 EB FDB TOR ;start count down loop
F99C ED D8 E1 00 DUMP1: FDB CR,DOCLIT
F9A0 10 FCB 16
F9A1 E5 21 F9 5C FDB DDUP,DUMPP ;display numeric
F9A5 E4 F8 E4 F8 FDB ROT,ROT
F9A9 E3 11 ED 9A F9 39 FDB TWO,SPACS,UTYPE ;display printable characters
F9AF ED 53 E5 DF FDB NUFQ,INVER ;user control
F9B3 E1 40 F9 BF FDB QBRAN,DUMP2
F9B7 E1 21 F9 9C FDB DONXT,DUMP1 ;loop till done
F9BB E1 57 F9 C3 FDB BRAN,DUMP3
F9BF E1 CB E2 15 DUMP2: FDB RFROM,DROP
F9C3 E2 15 E1 CB E3 E4 E1 7B DUMP3: FDB DROP,RFROM,BASE,STORE
F9CB E1 71 FDB EXIT
F9CD ;
F9CD ; .S ( ... -- ... )
F9CD ; Display the contents of the data stack.
F9CD ;
F9CD F9 D4 F9 85 FDB DOTS,L2160
F9D1 02 2E 53 L2170: FCB 2,".S"
F9D4 BD E1 12 DOTS: JSR DOLST
F9D7 ED D8 E9 54 FDB CR,DEPTH ;stack depth
F9DB E1 EB FDB TOR ;start count down loop
F9DD E1 57 F9 E7 FDB BRAN,DOTS2 ;skip first pass
F9E1 E1 DE E9 71 EE 7D DOTS1: FDB RAT,PICK,DOT
F9E7 E1 21 F9 E1 DOTS2: FDB DONXT,DOTS1
F9EB EE 1D FDB DOTQP
F9ED 04 20 3C 73 70 FCB 4," <sp"
F9F2 E1 71 FDB EXIT
F9F4 ;
F9F4 ; !CSP ( -- )
F9F4 ; Save stack pointer in CSP for error checking.
F9F4 ;
F9F4 F9 FD F9 D1 FDB STCSP,L2170
F9F8 04 21 43 53 50 L2180: FCB 4,"!CSP"
F9FD BD E1 12 STCSP: JSR DOLST
FA00 E1 F9 E4 27 E1 7B E1 71 FDB SPAT,CSP,STORE,EXIT ;save pointer
FA08 ;
FA08 ; ?CSP ( -- )
FA08 ; Abort if stack pointer differs from that saved in CSP.
FA08 ;
FA08 FA 11 F9 F8 FDB QCSP,L2180
FA0C 04 3F 43 53 50 L2190: FCB 4,"?CSP"
FA11 BD E1 12 QCSP: JSR DOLST
FA14 E1 F9 E4 27 E1 89 E2 99 FDB SPAT,CSP,AT,XORR ;compare pointers
FA1C F2 92 FDB ABORQ ;abort if different
FA1E 06 73 74 61 63 6B 73 FCB 6,"stacks"
FA25 E1 71 FDB EXIT
FA27 ;
FA27 ; >NAME ( ca -- na | F )
FA27 ; Convert code address to a name address.
FA27 ;
FA27 FA 31 FA 0C FDB TNAME,L2190
FA2B 05 3E 4E 41 4D 45 L2200: FCB 5,">NAME"
FA31 BD E1 12 TNAME: JSR DOLST
FA34 E4 87 FDB CRRNT ;vocabulary link
FA36 E8 D7 E1 89 E4 E3 TNAM1: FDB CELLP,AT,QDUP
FA3C E1 40 FA 6E FDB QBRAN,TNAM4
FA40 E5 21 FDB DDUP
FA42 E1 89 E2 21 TNAM2: FDB AT,DUPP
FA46 E1 40 FA 5A FDB QBRAN,TNAM3
FA4A E5 21 EF FC E2 99 FDB DDUP,NAMET,XORR ;compare
FA50 E1 40 FA 5A FDB QBRAN,TNAM3
FA54 E8 EB FDB CELLM ;continue with next word
FA56 E1 57 FA 42 FDB BRAN,TNAM2
FA5A E2 30 E2 15 E4 E3 TNAM3: FDB SWAP,DROP,QDUP
FA60 E1 40 FA 36 FDB QBRAN,TNAM1
FA64 E2 30 E2 15 E2 30 E2 15 E1 71 FDB SWAP,DROP,SWAP,DROP,EXIT
FA6E E2 15 E0 EF 00 00 E1 71 TNAM4: FDB DROP,DOLIT,0,EXIT
FA76 ;
FA76 ; .ID ( na -- )
FA76 ; Display the name at address.
FA76 ;
FA76 FA 7E FA 2B FDB DOTID,L2200
FA7A 03 2E 49 44 L2210: FCB 3,".ID"
FA7E BD E1 12 DOTID: JSR DOLST
FA81 E4 E3 FDB QDUP ;if zero no name
FA83 E1 40 FA 92 FDB QBRAN,DOTI1
FA87 E9 F1 E1 00 FDB COUNT,DOCLIT
FA8B 1F FCB $1F
FA8C E2 76 FDB ANDD ;mask lexicon bits
FA8E F9 39 E1 71 FDB UTYPE,EXIT ;display name string
FA92 EE 1D DOTI1: FDB DOTQP
FA94 09 20 7B 6E 6F 4E 61 6D 65 7D FCB 9," {noName}"
FA9E E1 71 FDB EXIT
FAA0 ;
FAA0 ; SEE ( -- ; <string> )
FAA0 ; A simple decompiler.
FAA0 ;
FAA0 FA A8 FA 7A FDB SEE,L2210
FAA4 03 53 45 45 L2220: FCB 3,"SEE"
FAA8 BD E1 12 SEE: JSR DOLST
FAAB F4 5D FDB TICK ;starting address
FAAD E5 96 FDB PLUS1 ;skip JSR
FAAF ;primitive check ...
FAAF E3 E4 E1 89 E1 EB EC 1C FDB BASE,AT,TOR,HEX ;switch to hex base
FAB7 E2 21 E1 89 E0 EF E1 12 E2 99 FDB DUPP,AT,DOLIT,DOLST,XORR
FAC1 ;high level word?
FAC1 E1 40 FA D7 FDB QBRAN,SEE1 ;yes!
FAC5 ED D8 EE 1D FDB CR,DOTQP ;primitive word only
FAC9 09 20 50 52 49 4D 49 54 56 45 FCB 9," PRIMITVE"
FAD3 E1 57 FB EA FDB BRAN,SEE5 ;exit
FAD7 ED D8 E8 D7 E2 21 EE 68 ED 86 SEE1: FDB CR,CELLP,DUPP,UDOT,SPACE
FAE1 E2 21 E1 89 E2 21 FDB DUPP,AT,DUPP ;?does it contain a zero
FAE7 E1 40 FA ED FDB QBRAN,SEE2
FAEB FA 31 FDB TNAME ;?is it a name
FAED E4 E3 SEE2: FDB QDUP
FAEF E1 40 FB CC FDB QBRAN,SEE3
FAF3 ;
FAF3 ED 86 FA 7E FDB SPACE,DOTID ;display name
FAF7 E2 21 E1 89 FDB DUPP,AT
FAFB ;
FAFB E2 21 E0 EF E1 00 E6 56 FDB DUPP,DOLIT,DOCLIT,EQUAL ; doCLIT?
FB03 E1 40 FB 1B FDB QBRAN,SEE21
FB07 E2 43 E8 D7 E1 A5 ED 86 EE 68 FDB OVER,CELLP,CAT,SPACE,UDOT ; CLIT: get only single byte
FB11 E2 30 E5 96 E2 30 FDB SWAP,PLUS1,SWAP
FB17 E1 57 FB C0 FDB BRAN,SEE28
FB1B ;
FB1B E2 21 E0 EF E0 EF E6 56 SEE21: FDB DUPP,DOLIT,DOLIT,EQUAL
FB23 E2 43 E0 EF E1 40 E6 56 E2 87 FDB OVER,DOLIT,QBRAN,EQUAL,ORR ; ?BRAN ?
FB2D E2 43 E0 EF E1 57 E6 56 E2 87 FDB OVER,DOLIT,BRAN,EQUAL,ORR ; BRANCH ?
FB37 E2 43 E0 EF E1 21 E6 56 E2 87 FDB OVER,DOLIT,DONXT,EQUAL,ORR ; next ? (from FOR/NEXT)
FB41 E2 43 E0 EF F5 BB E6 56 E2 87 FDB OVER,DOLIT,DOLOOP,EQUAL,ORR ; (LOOP) ?
FB4B E2 43 E0 EF F5 CC E6 56 E2 87 FDB OVER,DOLIT,DOPLOOP,EQUAL,ORR ; (+LOOP) ?
FB55 E2 43 E0 EF F5 A8 E6 56 E2 87 FDB OVER,DOLIT,DODO,EQUAL,ORR ; (DO) ?
FB5F E2 43 E0 EF F5 4E E6 56 E2 87 FDB OVER,DOLIT,DOQDO,EQUAL,ORR ; (?DO) ?
FB69 E2 43 E0 EF F5 88 E6 56 E2 87 FDB OVER,DOLIT,DOMDO,EQUAL,ORR ; (-DO) ?
FB73 E1 40 FB 89 FDB QBRAN,SEE27
FB77 E2 30 E8 D7 E2 21 E1 89 ED 86 EE 68 E2 30 FDB SWAP,CELLP,DUPP,AT,SPACE,UDOT,SWAP ; LIT: get word
FB85 E1 57 FB C0 FDB BRAN,SEE28
FB89 SEE27:
FB89 E2 21 E0 EF EE 1D E6 56 FDB DUPP,DOLIT,DOTQP,EQUAL ; ." ..."
FB91 E2 43 E0 EF F2 92 E6 56 E2 87 FDB OVER,DOLIT,ABORQ,EQUAL,ORR ; ABORT" ..."
FB9B E2 43 E0 EF EE 0E E6 56 E2 87 FDB OVER,DOLIT,STRQP,EQUAL,ORR ; $" ..."
FBA5 E1 40 FB C6 FDB QBRAN,SEE29 ; last case aalway to SEE29!!
FBA9 E2 30 E8 D7 FDB SWAP,CELLP ; print compiled string
FBAD E2 21 E9 F1 ED B8 E1 00 FDB DUPP,COUNT,TYPES,DOCLIT
FBB5 22 FCB 34
FBB6 ED 41 FDB EMIT
FBB8 E9 F1 E5 CF E8 EB E2 30 FDB COUNT,PLUS,CELLM,SWAP ; adjust continuation address
FBC0 ;
FBC0 E2 15 SEE28: FDB DROP
FBC2 E1 57 FB E4 FDB BRAN,SEE4
FBC6 E2 15 SEE29: FDB DROP
FBC8 E1 57 FB D6 FDB BRAN,SEE31 ; cleanup, check for EXIT
FBCC ;
FBCC E2 21 E1 89 EE 68 SEE3: FDB DUPP,AT,UDOT
FBD2 E1 57 FB E4 FDB BRAN,SEE4
FBD6 E2 21 E1 89 E0 EF E1 71 E2 99 SEE31: FDB DUPP,AT,DOLIT,EXIT,XORR
FBE0 ; but not if SEE decompiles itself!
FBE0 E1 40 FB EA FDB QBRAN,SEE5
FBE4 ED 53 SEE4: FDB NUFQ
FBE6 E1 40 FA D7 FDB QBRAN,SEE1
FBEA E1 CB E3 E4 E1 7B E2 15 E1 71 SEE5: FDB RFROM,BASE,STORE,DROP,EXIT
FBF4 ;
FBF4 ; WORDS ( -- )
FBF4 ; Display the names in the context vocabulary.
FBF4 ;
FBF4 FB FE FA A4 FDB WORDS,L2220
FBF8 05 57 4F 52 44 53 L2230: FCB 5,"WORDS"
FBFE BD E1 12 WORDS: JSR DOLST
FC01 ED D8 E4 76 E1 89 FDB CR,CNTXT,AT ;only in context
FC07 E1 89 E4 E3 WORS1: FDB AT,QDUP
FC0B E1 40 FC 1F FDB QBRAN,WORS2
FC0F E2 21 ED 86 FA 7E FDB DUPP,SPACE,DOTID ;display a name
FC15 E8 EB ED 53 FDB CELLM,NUFQ ;user control
FC19 E1 40 FC 07 FDB QBRAN,WORS1
FC1D E2 15 FDB DROP
FC1F E1 71 WORS2: FDB EXIT
FC21 ;
FC21 ; Hardware reset
FC21 ;
FC21 ; VER ( -- n )
FC21 ; Return the version number of this implementation.
FC21 ;
FC21 FC 29 FB F8 FDB VERSN,L2230
FC25 03 56 45 52 L2240: FCB 3,"VER"
FC29 BD E1 12 VERSN: JSR DOLST
FC2C E0 EF 01 00 E1 71 FDB DOLIT,VER*256+EXT,EXIT
FC32 ;
FC32 ; hi ( -- )
FC32 ; Display the sign-on message of eForth.
FC32 ;
FC32 FC 39 FC 25 FDB HI,L2240
FC36 02 68 69 L2250: FCB 2,"hi"
FC39 BD E1 12 HI: JSR DOLST
FC3C E0 E3 ED D8 EE 1D FDB STOIO,CR,DOTQP ;initialize I/O
FC42 0B 65 46 6F 72 74 68 20 76 FCB 11,"eForth v" ;model
FC4B 31 2E 30 FCB VER+"0",".",EXT+"0" ;version
FC4E ED D8 E1 71 FDB CR,EXIT
FC52 ;
FC52 ; 'BOOT ( -- a )
FC52 ; The application startup vector.
FC52 ;
FC52 FC 5C FC 36 FDB TBOOT,L2250
FC56 05 27 42 4F 4F 54 L2260: FCB 5,"'BOOT"
FC5C TBOOT:
FC5C ; jsr DOLST
FC5C ; FDB DOVAR
FC5C BD E3 33 JSR FDOVAR
FC5F FC 39 FDB HI ;application to boot
FC61 ;
FC61 ; COLD ( -- )
FC61 ; The hilevel cold start sequence.
FC61 ;
FC61 FC 6A FC 56 FDB COLD,L2260
FC65 04 43 4F 4C 44 L2270: FCB 4,"COLD"
FC6A BD E1 12 COLD: JSR DOLST
FC6D E0 EF E0 0D E0 EF 6F 80 COLD1: FDB DOLIT,UZERO,DOLIT,UPP
FC75 E0 EF 00 4A EA 5E FDB DOLIT,ULAST-UZERO,CMOVE ;initialize user area
FC7B F3 6F FDB PRESE ;initialize data stack and TIB
FC7D FC 5C EA 45 FDB TBOOT,ATEXE ;application boot
FC81 E4 D1 E4 76 E1 89 E2 21 FDB FORTH,CNTXT,AT,DUPP ;initialize search order
FC89 E4 87 E9 C2 F8 32 FDB CRRNT,DSTOR,OVERT
FC8F ; TEST
FC8F ; FDB DOLIT,10,DOLIT,1
FC8F ; FDB DODO
FC8F ;
FC8F F4 08 FDB QUIT ;start interpretation
FC91 E1 57 FC 6D FDB BRAN,COLD1 ;just in case
FC95 ;
FC95 ;===============================================================
FC95 ;
FC95 LASTN: EQU L2270
FC95 ;
FC95 NTOP: EQU NAMEE
FC95 CTOP: EQU $
FC95 ;
FC95 ;
FC95 ; END ORIG
FC95 ;
FC95 ;===============================================================
VER: 0001 DEFINED AT LINE 53
> USED AT LINE 3324
> USED AT LINE 3334
EXT: 0000 DEFINED AT LINE 54
> USED AT LINE 3324
TRUEE: 00-1 DEFINED AT LINE 58
COMPO: 0040 DEFINED AT LINE 60
> USED AT LINE 244
> USED AT LINE 258
> USED AT LINE 269
> USED AT LINE 281
> USED AT LINE 297
> USED AT LINE 310
> USED AT LINE 603
> USED AT LINE 649
> USED AT LINE 674
> USED AT LINE 792
> USED AT LINE 948
> USED AT LINE 2094
> USED AT LINE 2103
> USED AT LINE 2111
> USED AT LINE 2461
> USED AT LINE 2545
> USED AT LINE 2653
> USED AT LINE 3021
IMEDD: 0080 DEFINED AT LINE 61
> USED AT LINE 2215
> USED AT LINE 2223
> USED AT LINE 2231
> USED AT LINE 2491
> USED AT LINE 2645
> USED AT LINE 2662
> USED AT LINE 2680
> USED AT LINE 2690
> USED AT LINE 2700
> USED AT LINE 2730
> USED AT LINE 2780
> USED AT LINE 2806
> USED AT LINE 2818
> USED AT LINE 2839
> USED AT LINE 2847
> USED AT LINE 2855
> USED AT LINE 2863
> USED AT LINE 2871
> USED AT LINE 2879
> USED AT LINE 2888
> USED AT LINE 2896
> USED AT LINE 2904
> USED AT LINE 2912
> USED AT LINE 2920
> USED AT LINE 2928
> USED AT LINE 2936
> USED AT LINE 2944
> USED AT LINE 2952
> USED AT LINE 3021
> USED AT LINE 3060
MASKK: 1F7F DEFINED AT LINE 62
CFAOFF: 0003 DEFINED AT LINE 64
> USED AT LINE 682
CELLL: 0002 DEFINED AT LINE 66
> USED AT LINE 82
> USED AT LINE 83
> USED AT LINE 86
> USED AT LINE 88
> USED AT LINE 1518
> USED AT LINE 1528
> USED AT LINE 1538
> USED AT LINE 1582
BASEE: 000A DEFINED AT LINE 67
> USED AT LINE 143
VOCSS: 0008 DEFINED AT LINE 68
> USED AT LINE 155
> USED AT LINE 905
> USED AT LINE 916
> USED AT LINE 927
> USED AT LINE 938
BKSPP: 0008 DEFINED AT LINE 70
> USED AT LINE 2344
> USED AT LINE 2346
BKSPP2: 007F DEFINED AT LINE 71
LF: 000D DEFINED AT LINE 72
> USED AT LINE 2087
CRR: 000A DEFINED AT LINE 73
> USED AT LINE 2030
> USED AT LINE 2084
> USED AT LINE 2365
ERR: 001B DEFINED AT LINE 74
> USED AT LINE 2607
TIC: 0027 DEFINED AT LINE 75
CALLL: 12BD DEFINED AT LINE 77
> USED AT LINE 3040
EM: 7000 DEFINED AT LINE 81
> USED AT LINE 85
> USED AT LINE 92
US: 0080 DEFINED AT LINE 82
> USED AT LINE 85
> USED AT LINE 91
RTS: 0100 DEFINED AT LINE 83
> USED AT LINE 87
UPP: 6F80 DEFINED AT LINE 85
> USED AT LINE 86
> USED AT LINE 668
RPP: 6F70 DEFINED AT LINE 86
> USED AT LINE 87
> USED AT LINE 136
TIBB: 6E70 DEFINED AT LINE 87
> USED AT LINE 88
> USED AT LINE 148
> USED AT LINE 2539
SPP: 6E60 DEFINED AT LINE 88
> USED AT LINE 135
COLDD: E000 DEFINED AT LINE 90
> USED AT LINE 91
> USED AT LINE 120
CODEE: E080 DEFINED AT LINE 91
> USED AT LINE 163
NAMEE: 6C00 DEFINED AT LINE 92
> USED AT LINE 3371
RESET: E000 DEFINED AT LINE 124
> USED AT LINE 102
> USED AT LINE 104
> USED AT LINE 106
> USED AT LINE 108
> USED AT LINE 110
> USED AT LINE 112
> USED AT LINE 114
> USED AT LINE 116
ORIG: E000 DEFINED AT LINE 125
UZERO: E00D DEFINED AT LINE 134
> USED AT LINE 3354
> USED AT LINE 3355
ULAST: E057 DEFINED AT LINE 161
> USED AT LINE 3355
ACIA: 83FE DEFINED AT LINE 167
> USED AT LINE 168
> USED AT LINE 169
> USED AT LINE 170
ACIAC: 83FE DEFINED AT LINE 168
ACIAS: 83FE DEFINED AT LINE 169
> USED AT LINE 178
> USED AT LINE 186
ACIAD: 83FF DEFINED AT LINE 170
> USED AT LINE 181
> USED AT LINE 189
ACIA_TDRE: 0002 DEFINED AT LINE 172
ACIA_RDRF: 0001 DEFINED AT LINE 173
SEROUT: E080 DEFINED AT LINE 175
> USED AT LINE 227
SEROUTL: E082 DEFINED AT LINE 177
> USED AT LINE 180
SERIN: E08F DEFINED AT LINE 185
> USED AT LINE 206
SERIN_RET: E099 DEFINED AT LINE 190
> USED AT LINE 188
L100: E09E DEFINED AT LINE 197
> USED AT LINE 203
BYE: E0A2 DEFINED AT LINE 198
> USED AT LINE 196
L110: E0A9 DEFINED AT LINE 204
> USED AT LINE 219
QRX: E0AD DEFINED AT LINE 205
> USED AT LINE 137
> USED AT LINE 203
> USED AT LINE 2577
QRX1: E0B9 DEFINED AT LINE 210
> USED AT LINE 207
L120: E0C8 DEFINED AT LINE 220
> USED AT LINE 234
TXSTO: E0CC DEFINED AT LINE 221
> USED AT LINE 138
> USED AT LINE 141
> USED AT LINE 219
> USED AT LINE 2577
TX1: E0D4 DEFINED AT LINE 225
> USED AT LINE 223
L130: E0DF DEFINED AT LINE 235
> USED AT LINE 243
STOIO: E0E3 DEFINED AT LINE 236
> USED AT LINE 234
> USED AT LINE 3332
L140: E0E9 DEFINED AT LINE 244
> USED AT LINE 257
DOLIT: E0EF DEFINED AT LINE 245
> USED AT LINE 243
> USED AT LINE 1363
> USED AT LINE 1377
> USED AT LINE 1461
> USED AT LINE 1566
> USED AT LINE 1571
> USED AT LINE 1688
> USED AT LINE 1845
> USED AT LINE 1901
> USED AT LINE 1951
> USED AT LINE 1959
> USED AT LINE 2217
> USED AT LINE 2225
> USED AT LINE 2287
> USED AT LINE 2344
> USED AT LINE 2346
> USED AT LINE 2368
> USED AT LINE 2369
> USED AT LINE 2386
> USED AT LINE 2478
> USED AT LINE 2493
> USED AT LINE 2501
> USED AT LINE 2539
> USED AT LINE 2547
> USED AT LINE 2556
> USED AT LINE 2557
> USED AT LINE 2565
> USED AT LINE 2566
> USED AT LINE 2597
> USED AT LINE 2605
> USED AT LINE 2607
> USED AT LINE 2664
> USED AT LINE 2672
> USED AT LINE 3000
> USED AT LINE 3031
> USED AT LINE 3060
> USED AT LINE 3075
> USED AT LINE 3088
> USED AT LINE 3105
> USED AT LINE 3129
> USED AT LINE 3214
> USED AT LINE 3258
> USED AT LINE 3264
> USED AT LINE 3265
> USED AT LINE 3266
> USED AT LINE 3267
> USED AT LINE 3268
> USED AT LINE 3269
> USED AT LINE 3270
> USED AT LINE 3271
> USED AT LINE 3272
> USED AT LINE 3277
> USED AT LINE 3278
> USED AT LINE 3279
> USED AT LINE 3324
> USED AT LINE 3354
> USED AT LINE 3355
L141: E0F9 DEFINED AT LINE 258
> USED AT LINE 268
DOCLIT: E100 DEFINED AT LINE 259
> USED AT LINE 257
> USED AT LINE 1517
> USED AT LINE 1527
> USED AT LINE 1537
> USED AT LINE 1567
> USED AT LINE 1581
> USED AT LINE 1839
> USED AT LINE 1842
> USED AT LINE 1929
> USED AT LINE 1939
> USED AT LINE 1952
> USED AT LINE 1956
> USED AT LINE 2040
> USED AT LINE 2083
> USED AT LINE 2086
> USED AT LINE 2364
> USED AT LINE 2408
> USED AT LINE 3039
> USED AT LINE 3144
> USED AT LINE 3148
> USED AT LINE 3224
L150: E10B DEFINED AT LINE 269
> USED AT LINE 280
DOLST: E112 DEFINED AT LINE 270
> USED AT LINE 268
> USED AT LINE 580
> USED AT LINE 651
> USED AT LINE 676
> USED AT LINE 950
> USED AT LINE 959
> USED AT LINE 970
> USED AT LINE 982
> USED AT LINE 991
> USED AT LINE 1000
> USED AT LINE 1188
> USED AT LINE 1260
> USED AT LINE 1271
> USED AT LINE 1282
> USED AT LINE 1360
> USED AT LINE 1385
> USED AT LINE 1402
> USED AT LINE 1410
> USED AT LINE 1419
> USED AT LINE 1460
> USED AT LINE 1476
> USED AT LINE 1485
> USED AT LINE 1498
> USED AT LINE 1506
> USED AT LINE 1516
> USED AT LINE 1526
> USED AT LINE 1536
> USED AT LINE 1546
> USED AT LINE 1565
> USED AT LINE 1579
> USED AT LINE 1612
> USED AT LINE 1649
> USED AT LINE 1661
> USED AT LINE 1670
> USED AT LINE 1679
> USED AT LINE 1687
> USED AT LINE 1695
> USED AT LINE 1703
> USED AT LINE 1809
> USED AT LINE 1823
> USED AT LINE 1838
> USED AT LINE 1852
> USED AT LINE 1861
> USED AT LINE 1870
> USED AT LINE 1879
> USED AT LINE 1887
> USED AT LINE 1898
> USED AT LINE 1909
> USED AT LINE 1918
> USED AT LINE 1928
> USED AT LINE 1938
> USED AT LINE 1950
> USED AT LINE 1967
> USED AT LINE 2000
> USED AT LINE 2008
> USED AT LINE 2018
> USED AT LINE 2026
> USED AT LINE 2039
> USED AT LINE 2049
> USED AT LINE 2057
> USED AT LINE 2069
> USED AT LINE 2082
> USED AT LINE 2095
> USED AT LINE 2104
> USED AT LINE 2112
> USED AT LINE 2120
> USED AT LINE 2129
> USED AT LINE 2139
> USED AT LINE 2148
> USED AT LINE 2161
> USED AT LINE 2171
> USED AT LINE 2206
> USED AT LINE 2216
> USED AT LINE 2224
> USED AT LINE 2232
> USED AT LINE 2240
> USED AT LINE 2248
> USED AT LINE 2260
> USED AT LINE 2270
> USED AT LINE 2278
> USED AT LINE 2294
> USED AT LINE 2320
> USED AT LINE 2341
> USED AT LINE 2354
> USED AT LINE 2363
> USED AT LINE 2380
> USED AT LINE 2399
> USED AT LINE 2407
> USED AT LINE 2420
> USED AT LINE 2431
> USED AT LINE 2454
> USED AT LINE 2463
> USED AT LINE 2475
> USED AT LINE 2492
> USED AT LINE 2500
> USED AT LINE 2512
> USED AT LINE 2523
> USED AT LINE 2537
> USED AT LINE 2546
> USED AT LINE 2555
> USED AT LINE 2564
> USED AT LINE 2584
> USED AT LINE 2593
> USED AT LINE 2618
> USED AT LINE 2629
> USED AT LINE 2637
> USED AT LINE 2646
> USED AT LINE 2654
> USED AT LINE 2663
> USED AT LINE 2671
> USED AT LINE 2681
> USED AT LINE 2691
> USED AT LINE 2701
> USED AT LINE 2731
> USED AT LINE 2807
> USED AT LINE 2819
> USED AT LINE 2840
> USED AT LINE 2848
> USED AT LINE 2856
> USED AT LINE 2864
> USED AT LINE 2872
> USED AT LINE 2880
> USED AT LINE 2889
> USED AT LINE 2897
> USED AT LINE 2905
> USED AT LINE 2913
> USED AT LINE 2921
> USED AT LINE 2929
> USED AT LINE 2937
> USED AT LINE 2945
> USED AT LINE 2953
> USED AT LINE 2963
> USED AT LINE 2976
> USED AT LINE 2997
> USED AT LINE 3014
> USED AT LINE 3022
> USED AT LINE 3030
> USED AT LINE 3038
> USED AT LINE 3050
> USED AT LINE 3059
> USED AT LINE 3070
> USED AT LINE 3083
> USED AT LINE 3095
> USED AT LINE 3103
> USED AT LINE 3115
> USED AT LINE 3128
> USED AT LINE 3142
> USED AT LINE 3166
> USED AT LINE 3181
> USED AT LINE 3189
> USED AT LINE 3200
> USED AT LINE 3221
> USED AT LINE 3237
> USED AT LINE 3306
> USED AT LINE 3323
> USED AT LINE 3331
> USED AT LINE 3353
L160: E11C DEFINED AT LINE 281
> USED AT LINE 296
DONXT: E121 DEFINED AT LINE 282
> USED AT LINE 280
> USED AT LINE 1374
> USED AT LINE 1466
> USED AT LINE 1815
> USED AT LINE 1981
> USED AT LINE 2061
> USED AT LINE 2074
> USED AT LINE 2181
> USED AT LINE 2192
> USED AT LINE 2286
> USED AT LINE 2857
> USED AT LINE 3120
> USED AT LINE 3134
> USED AT LINE 3155
> USED AT LINE 3171
NEXT1: E12E DEFINED AT LINE 288
> USED AT LINE 284
L170: E138 DEFINED AT LINE 297
> USED AT LINE 309
QBRAN: E140 DEFINED AT LINE 298
> USED AT LINE 296
> USED AT LINE 972
> USED AT LINE 1190
> USED AT LINE 1262
> USED AT LINE 1273
> USED AT LINE 1362
> USED AT LINE 1369
> USED AT LINE 1387
> USED AT LINE 1390
> USED AT LINE 1393
> USED AT LINE 1464
> USED AT LINE 1489
> USED AT LINE 1570
> USED AT LINE 1614
> USED AT LINE 1705
> USED AT LINE 1813
> USED AT LINE 1889
> USED AT LINE 1900
> USED AT LINE 1955
> USED AT LINE 1970
> USED AT LINE 1975
> USED AT LINE 1978
> USED AT LINE 1983
> USED AT LINE 2010
> USED AT LINE 2028
> USED AT LINE 2152
> USED AT LINE 2173
> USED AT LINE 2175
> USED AT LINE 2179
> USED AT LINE 2188
> USED AT LINE 2190
> USED AT LINE 2284
> USED AT LINE 2299
> USED AT LINE 2301
> USED AT LINE 2308
> USED AT LINE 2322
> USED AT LINE 2327
> USED AT LINE 2329
> USED AT LINE 2343
> USED AT LINE 2367
> USED AT LINE 2370
> USED AT LINE 2383
> USED AT LINE 2387
> USED AT LINE 2464
> USED AT LINE 2477
> USED AT LINE 2483
> USED AT LINE 2502
> USED AT LINE 2525
> USED AT LINE 2598
> USED AT LINE 2601
> USED AT LINE 2606
> USED AT LINE 2620
> USED AT LINE 2865
> USED AT LINE 2881
> USED AT LINE 2965
> USED AT LINE 2978
> USED AT LINE 2999
> USED AT LINE 3001
> USED AT LINE 3005
> USED AT LINE 3154
> USED AT LINE 3203
> USED AT LINE 3206
> USED AT LINE 3208
> USED AT LINE 3212
> USED AT LINE 3223
> USED AT LINE 3244
> USED AT LINE 3250
> USED AT LINE 3253
> USED AT LINE 3259
> USED AT LINE 3273
> USED AT LINE 3280
> USED AT LINE 3296
> USED AT LINE 3298
> USED AT LINE 3309
> USED AT LINE 3312
BRAN1: E148 DEFINED AT LINE 303
> USED AT LINE 300
L180: E150 DEFINED AT LINE 310
> USED AT LINE 317
BRAN: E157 DEFINED AT LINE 311
> USED AT LINE 309
> USED AT LINE 1371
> USED AT LINE 1615
> USED AT LINE 1811
> USED AT LINE 1890
> USED AT LINE 1986
> USED AT LINE 2059
> USED AT LINE 2071
> USED AT LINE 2194
> USED AT LINE 2280
> USED AT LINE 2303
> USED AT LINE 2305
> USED AT LINE 2310
> USED AT LINE 2389
> USED AT LINE 2391
> USED AT LINE 2527
> USED AT LINE 2609
> USED AT LINE 2873
> USED AT LINE 2890
> USED AT LINE 3117
> USED AT LINE 3131
> USED AT LINE 3156
> USED AT LINE 3169
> USED AT LINE 3210
> USED AT LINE 3247
> USED AT LINE 3262
> USED AT LINE 3275
> USED AT LINE 3288
> USED AT LINE 3290
> USED AT LINE 3293
> USED AT LINE 3365
L190: E15F DEFINED AT LINE 318
> USED AT LINE 325
EXECU: E167 DEFINED AT LINE 319
> USED AT LINE 317
> USED AT LINE 1706
> USED AT LINE 2481
> USED AT LINE 3002
L200: E16C DEFINED AT LINE 326
> USED AT LINE 333
EXIT: E171 DEFINED AT LINE 327
> USED AT LINE 325
> USED AT LINE 652
> USED AT LINE 974
> USED AT LINE 1192
> USED AT LINE 1264
> USED AT LINE 1275
> USED AT LINE 1395
> USED AT LINE 1491
> USED AT LINE 1519
> USED AT LINE 1529
> USED AT LINE 1539
> USED AT LINE 1547
> USED AT LINE 1572
> USED AT LINE 1583
> USED AT LINE 1619
> USED AT LINE 1707
> USED AT LINE 1816
> USED AT LINE 1891
> USED AT LINE 1902
> USED AT LINE 2011
> USED AT LINE 2032
> USED AT LINE 2042
> USED AT LINE 2062
> USED AT LINE 2075
> USED AT LINE 2088
> USED AT LINE 2105
> USED AT LINE 2153
> USED AT LINE 2253
> USED AT LINE 2332
> USED AT LINE 2347
> USED AT LINE 2372
> USED AT LINE 2481
> USED AT LINE 2484
> USED AT LINE 2505
> USED AT LINE 2516
> USED AT LINE 2586
> USED AT LINE 2621
> USED AT LINE 2694
> USED AT LINE 2705
> USED AT LINE 2735
> USED AT LINE 2811
> USED AT LINE 2823
> USED AT LINE 2849
> USED AT LINE 2969
> USED AT LINE 2985
> USED AT LINE 3002
> USED AT LINE 3003
> USED AT LINE 3006
> USED AT LINE 3023
> USED AT LINE 3043
> USED AT LINE 3076
> USED AT LINE 3106
> USED AT LINE 3121
> USED AT LINE 3135
> USED AT LINE 3159
> USED AT LINE 3174
> USED AT LINE 3193
> USED AT LINE 3227
> USED AT LINE 3230
> USED AT LINE 3314
> USED AT LINE 3335
L210: E179 DEFINED AT LINE 334
> USED AT LINE 348
STORE: E17B DEFINED AT LINE 335
> USED AT LINE 333
> USED AT LINE 1651
> USED AT LINE 1931
> USED AT LINE 1941
> USED AT LINE 2172
> USED AT LINE 2296
> USED AT LINE 2639
> USED AT LINE 2674
> USED AT LINE 2985
L220: E187 DEFINED AT LINE 349
> USED AT LINE 357
AT: E189 DEFINED AT LINE 350
> USED AT LINE 348
> USED AT LINE 677
> USED AT LINE 1663
> USED AT LINE 1680
> USED AT LINE 1704
> USED AT LINE 1871
> USED AT LINE 1880
> USED AT LINE 1968
> USED AT LINE 2149
> USED AT LINE 2162
> USED AT LINE 2186
> USED AT LINE 2187
> USED AT LINE 2208
> USED AT LINE 2233
> USED AT LINE 2252
> USED AT LINE 2297
> USED AT LINE 2298
> USED AT LINE 2300
> USED AT LINE 2326
> USED AT LINE 2432
> USED AT LINE 2478
> USED AT LINE 2538
> USED AT LINE 2594
> USED AT LINE 2599
> USED AT LINE 2682
> USED AT LINE 2983
> USED AT LINE 3000
> USED AT LINE 3015
> USED AT LINE 3061
> USED AT LINE 3143
> USED AT LINE 3202
> USED AT LINE 3205
> USED AT LINE 3241
> USED AT LINE 3242
> USED AT LINE 3249
> USED AT LINE 3256
> USED AT LINE 3292
> USED AT LINE 3294
> USED AT LINE 3308
L230: E193 DEFINED AT LINE 358
> USED AT LINE 373
CSTOR: E196 DEFINED AT LINE 359
> USED AT LINE 357
> USED AT LINE 1825
> USED AT LINE 2356
> USED AT LINE 3041
L240: E1A2 DEFINED AT LINE 374
> USED AT LINE 383
CAT: E1A5 DEFINED AT LINE 375
> USED AT LINE 373
> USED AT LINE 1672
> USED AT LINE 1969
> USED AT LINE 1973
> USED AT LINE 2072
> USED AT LINE 2977
> USED AT LINE 3118
> USED AT LINE 3132
L250: E1B0 DEFINED AT LINE 384
> USED AT LINE 391
RPAT: E1B4 DEFINED AT LINE 385
> USED AT LINE 383
> USED AT LINE 2422
L260: E1BC DEFINED AT LINE 392
> USED AT LINE 399
RPSTO: E1C0 DEFINED AT LINE 393
> USED AT LINE 391
L270: E1C8 DEFINED AT LINE 400
> USED AT LINE 409
RFROM: E1CB DEFINED AT LINE 401
> USED AT LINE 399
> USED AT LINE 652
> USED AT LINE 677
> USED AT LINE 951
> USED AT LINE 1284
> USED AT LINE 1366
> USED AT LINE 1367
> USED AT LINE 1368
> USED AT LINE 1373
> USED AT LINE 1392
> USED AT LINE 1488
> USED AT LINE 1618
> USED AT LINE 1814
> USED AT LINE 1960
> USED AT LINE 1987
> USED AT LINE 1987
> USED AT LINE 1989
> USED AT LINE 1990
> USED AT LINE 2096
> USED AT LINE 2131
> USED AT LINE 2182
> USED AT LINE 2183
> USED AT LINE 2195
> USED AT LINE 2198
> USED AT LINE 2198
> USED AT LINE 2199
> USED AT LINE 2209
> USED AT LINE 2285
> USED AT LINE 2306
> USED AT LINE 2311
> USED AT LINE 2325
> USED AT LINE 2330
> USED AT LINE 2331
> USED AT LINE 2423
> USED AT LINE 2424
> USED AT LINE 2433
> USED AT LINE 2434
> USED AT LINE 2435
> USED AT LINE 2605
> USED AT LINE 2655
> USED AT LINE 3157
> USED AT LINE 3158
> USED AT LINE 3299
L279: E1D5 DEFINED AT LINE 410
> USED AT LINE 415
L280: E1DB DEFINED AT LINE 416
> USED AT LINE 427
RAT: E1DE DEFINED AT LINE 417
> USED AT LINE 409
> USED AT LINE 415
> USED AT LINE 1367
> USED AT LINE 1391
> USED AT LINE 1974
> USED AT LINE 1982
> USED AT LINE 2096
> USED AT LINE 2281
> USED AT LINE 2282
> USED AT LINE 3170
I: E1DE DEFINED AT LINE 418
L290: E1E8 DEFINED AT LINE 428
> USED AT LINE 438
TOR: E1EB DEFINED AT LINE 429
> USED AT LINE 427
> USED AT LINE 983
> USED AT LINE 1364
> USED AT LINE 1365
> USED AT LINE 1365
> USED AT LINE 1370
> USED AT LINE 1388
> USED AT LINE 1389
> USED AT LINE 1465
> USED AT LINE 1499
> USED AT LINE 1616
> USED AT LINE 1810
> USED AT LINE 1824
> USED AT LINE 1919
> USED AT LINE 1951
> USED AT LINE 1976
> USED AT LINE 1977
> USED AT LINE 2070
> USED AT LINE 2097
> USED AT LINE 2121
> USED AT LINE 2130
> USED AT LINE 2176
> USED AT LINE 2185
> USED AT LINE 2193
> USED AT LINE 2196
> USED AT LINE 2207
> USED AT LINE 2279
> USED AT LINE 2324
> USED AT LINE 2342
> USED AT LINE 2421
> USED AT LINE 2656
> USED AT LINE 2841
> USED AT LINE 3116
> USED AT LINE 3130
> USED AT LINE 3147
> USED AT LINE 3168
L300: E1F5 DEFINED AT LINE 439
> USED AT LINE 450
SPAT: E1F9 DEFINED AT LINE 440
> USED AT LINE 438
> USED AT LINE 1580
> USED AT LINE 2421
> USED AT LINE 3182
> USED AT LINE 3190
L310: E203 DEFINED AT LINE 451
> USED AT LINE 458
SPSTO: E207 DEFINED AT LINE 452
> USED AT LINE 450
L320: E210 DEFINED AT LINE 459
> USED AT LINE 466
DROP: E215 DEFINED AT LINE 460
> USED AT LINE 458
> USED AT LINE 992
> USED AT LINE 992
> USED AT LINE 1264
> USED AT LINE 1275
> USED AT LINE 1370
> USED AT LINE 1372
> USED AT LINE 1375
> USED AT LINE 1376
> USED AT LINE 1411
> USED AT LINE 1467
> USED AT LINE 1477
> USED AT LINE 1571
> USED AT LINE 1615
> USED AT LINE 1910
> USED AT LINE 2075
> USED AT LINE 2182
> USED AT LINE 2195
> USED AT LINE 2285
> USED AT LINE 2306
> USED AT LINE 2311
> USED AT LINE 2330
> USED AT LINE 2331
> USED AT LINE 2373
> USED AT LINE 2392
> USED AT LINE 2411
> USED AT LINE 2424
> USED AT LINE 2435
> USED AT LINE 2466
> USED AT LINE 2528
> USED AT LINE 2914
> USED AT LINE 2969
> USED AT LINE 3121
> USED AT LINE 3157
> USED AT LINE 3158
> USED AT LINE 3211
> USED AT LINE 3213
> USED AT LINE 3214
> USED AT LINE 3287
> USED AT LINE 3289
> USED AT LINE 3313
L330: E21D DEFINED AT LINE 467
> USED AT LINE 476
DUPP: E221 DEFINED AT LINE 468
> USED AT LINE 466
> USED AT LINE 971
> USED AT LINE 973
> USED AT LINE 1189
> USED AT LINE 1364
> USED AT LINE 1386
> USED AT LINE 1389
> USED AT LINE 1462
> USED AT LINE 1463
> USED AT LINE 1613
> USED AT LINE 1662
> USED AT LINE 1671
> USED AT LINE 1824
> USED AT LINE 1872
> USED AT LINE 1888
> USED AT LINE 1919
> USED AT LINE 1959
> USED AT LINE 1960
> USED AT LINE 1977
> USED AT LINE 1988
> USED AT LINE 2027
> USED AT LINE 2072
> USED AT LINE 2193
> USED AT LINE 2295
> USED AT LINE 2297
> USED AT LINE 2298
> USED AT LINE 2300
> USED AT LINE 2313
> USED AT LINE 2321
> USED AT LINE 2355
> USED AT LINE 2364
> USED AT LINE 2368
> USED AT LINE 2384
> USED AT LINE 2524
> USED AT LINE 2638
> USED AT LINE 2655
> USED AT LINE 2964
> USED AT LINE 2977
> USED AT LINE 2980
> USED AT LINE 2984
> USED AT LINE 3118
> USED AT LINE 3132
> USED AT LINE 3205
> USED AT LINE 3242
> USED AT LINE 3249
> USED AT LINE 3256
> USED AT LINE 3258
> USED AT LINE 3264
> USED AT LINE 3277
> USED AT LINE 3282
> USED AT LINE 3292
> USED AT LINE 3294
> USED AT LINE 3310
L340: E22B DEFINED AT LINE 477
> USED AT LINE 496
SWAP: E230 DEFINED AT LINE 478
> USED AT LINE 476
> USED AT LINE 983
> USED AT LINE 1263
> USED AT LINE 1272
> USED AT LINE 1274
> USED AT LINE 1375
> USED AT LINE 1394
> USED AT LINE 1420
> USED AT LINE 1487
> USED AT LINE 1507
> USED AT LINE 1616
> USED AT LINE 1650
> USED AT LINE 1663
> USED AT LINE 1672
> USED AT LINE 1828
> USED AT LINE 1829
> USED AT LINE 1853
> USED AT LINE 1854
> USED AT LINE 1971
> USED AT LINE 1972
> USED AT LINE 1974
> USED AT LINE 1979
> USED AT LINE 1982
> USED AT LINE 1985
> USED AT LINE 2184
> USED AT LINE 2295
> USED AT LINE 2307
> USED AT LINE 2369
> USED AT LINE 2373
> USED AT LINE 2434
> USED AT LINE 2906
> USED AT LINE 2922
> USED AT LINE 2930
> USED AT LINE 3211
> USED AT LINE 3213
> USED AT LINE 3261
> USED AT LINE 3274
> USED AT LINE 3281
L350: E23E DEFINED AT LINE 497
> USED AT LINE 506
OVER: E243 DEFINED AT LINE 498
> USED AT LINE 496
> USED AT LINE 1001
> USED AT LINE 1001
> USED AT LINE 1283
> USED AT LINE 1403
> USED AT LINE 1465
> USED AT LINE 1650
> USED AT LINE 1812
> USED AT LINE 1841
> USED AT LINE 1911
> USED AT LINE 1954
> USED AT LINE 1969
> USED AT LINE 1973
> USED AT LINE 2131
> USED AT LINE 2177
> USED AT LINE 2184
> USED AT LINE 2197
> USED AT LINE 2199
> USED AT LINE 2281
> USED AT LINE 2282
> USED AT LINE 2342
> USED AT LINE 2356
> USED AT LINE 2381
> USED AT LINE 2392
> USED AT LINE 2968
> USED AT LINE 3129
> USED AT LINE 3260
> USED AT LINE 3265
> USED AT LINE 3266
> USED AT LINE 3267
> USED AT LINE 3268
> USED AT LINE 3269
> USED AT LINE 3270
> USED AT LINE 3271
> USED AT LINE 3272
> USED AT LINE 3278
> USED AT LINE 3279
L360: E24D DEFINED AT LINE 507
> USED AT LINE 517
ZLESS: E250 DEFINED AT LINE 508
> USED AT LINE 506
> USED AT LINE 1189
> USED AT LINE 1386
> USED AT LINE 1403
> USED AT LINE 1899
> USED AT LINE 2178
> USED AT LINE 2189
> USED AT LINE 2513
L365: E25D DEFINED AT LINE 518
> USED AT LINE 530
ZEQUAL: E260 DEFINED AT LINE 519
> USED AT LINE 517
ZEQUAL1: E26A DEFINED AT LINE 524
> USED AT LINE 522
L370: E272 DEFINED AT LINE 531
> USED AT LINE 541
ANDD: E276 DEFINED AT LINE 532
> USED AT LINE 530
> USED AT LINE 1844
> USED AT LINE 3226
L380: E284 DEFINED AT LINE 542
> USED AT LINE 552
ORR: E287 DEFINED AT LINE 543
> USED AT LINE 541
L390: E295 DEFINED AT LINE 553
> USED AT LINE 563
XORR: E299 DEFINED AT LINE 554
> USED AT LINE 552
> USED AT LINE 1486
> USED AT LINE 2151
> USED AT LINE 2366
> USED AT LINE 2382
L391: E2A7 DEFINED AT LINE 564
> USED AT LINE 578
DPLUS: E2AA DEFINED AT LINE 565
> USED AT LINE 563
> USED AT LINE 581
L392: E2C0 DEFINED AT LINE 579
> USED AT LINE 587
DSUB: E2C3 DEFINED AT LINE 580
> USED AT LINE 578
L400: E2D0 DEFINED AT LINE 588
> USED AT LINE 602
UPLUS: E2D4 DEFINED AT LINE 589
> USED AT LINE 587
> USED AT LINE 1368
> USED AT LINE 1462
> USED AT LINE 1463
L401: E2E7 DEFINED AT LINE 603
> USED AT LINE 613
DOCONST: E2EF DEFINED AT LINE 604
> USED AT LINE 602
> USED AT LINE 1555
> USED AT LINE 3105
FDOCONST: E2EF DEFINED AT LINE 605
> USED AT LINE 615
> USED AT LINE 623
> USED AT LINE 631
> USED AT LINE 640
L402: E2F9 DEFINED AT LINE 614
> USED AT LINE 621
ZERO: E2FB DEFINED AT LINE 615
> USED AT LINE 613
> USED AT LINE 1816
> USED AT LINE 1828
> USED AT LINE 1853
> USED AT LINE 2058
> USED AT LINE 2332
> USED AT LINE 2411
> USED AT LINE 2882
> USED AT LINE 3096
L403: E304 DEFINED AT LINE 622
> USED AT LINE 629
ONE: E306 DEFINED AT LINE 623
> USED AT LINE 621
> USED AT LINE 2693
> USED AT LINE 3042
L404: E30F DEFINED AT LINE 630
> USED AT LINE 638
TWO: E311 DEFINED AT LINE 631
> USED AT LINE 629
> USED AT LINE 1613
> USED AT LINE 2704
> USED AT LINE 2734
> USED AT LINE 2809
> USED AT LINE 2821
> USED AT LINE 3152
L405: E31A DEFINED AT LINE 639
> USED AT LINE 648
MONE: E31D DEFINED AT LINE 640
> USED AT LINE 638
> USED AT LINE 2302
L410: E326 DEFINED AT LINE 649
> USED AT LINE 661
DOVAR: E32C DEFINED AT LINE 650
> USED AT LINE 648
FDOVAR: E333 DEFINED AT LINE 655
> USED AT LINE 667
> USED AT LINE 2445
> USED AT LINE 2576
> USED AT LINE 3088
> USED AT LINE 3345
L420: E339 DEFINED AT LINE 662
> USED AT LINE 673
UP: E33C DEFINED AT LINE 663
> USED AT LINE 661
> USED AT LINE 682
L430: E345 DEFINED AT LINE 674
> USED AT LINE 691
DOUSE: E34C DEFINED AT LINE 675
> USED AT LINE 673
FDOUSE: E35B DEFINED AT LINE 680
> USED AT LINE 694
> USED AT LINE 705
> USED AT LINE 716
> USED AT LINE 727
> USED AT LINE 738
> USED AT LINE 749
> USED AT LINE 760
> USED AT LINE 771
> USED AT LINE 783
> USED AT LINE 794
> USED AT LINE 805
> USED AT LINE 816
> USED AT LINE 827
> USED AT LINE 838
> USED AT LINE 849
> USED AT LINE 860
> USED AT LINE 871
> USED AT LINE 882
> USED AT LINE 893
> USED AT LINE 904
> USED AT LINE 915
> USED AT LINE 926
> USED AT LINE 937
> USED AT LINE 3075
L440: E368 DEFINED AT LINE 692
> USED AT LINE 702
SZERO: E36C DEFINED AT LINE 693
> USED AT LINE 691
> USED AT LINE 1580
> USED AT LINE 2538
L450: E375 DEFINED AT LINE 703
> USED AT LINE 713
RZERO: E379 DEFINED AT LINE 704
> USED AT LINE 702
> USED AT LINE 2594
L460: E382 DEFINED AT LINE 714
> USED AT LINE 724
TQKEY: E388 DEFINED AT LINE 715
> USED AT LINE 713
> USED AT LINE 2001
L470: E391 DEFINED AT LINE 725
> USED AT LINE 735
TEMIT: E397 DEFINED AT LINE 726
> USED AT LINE 724
> USED AT LINE 2019
L480: E3A0 DEFINED AT LINE 736
> USED AT LINE 746
TEXPE: E3A8 DEFINED AT LINE 737
> USED AT LINE 735
> USED AT LINE 2400
> USED AT LINE 2410
L490: E3B1 DEFINED AT LINE 747
> USED AT LINE 757
TTAP: E3B6 DEFINED AT LINE 748
> USED AT LINE 746
> USED AT LINE 2390
L500: E3BF DEFINED AT LINE 758
> USED AT LINE 768
TECHO: E3C5 DEFINED AT LINE 759
> USED AT LINE 757
> USED AT LINE 2345
> USED AT LINE 2355
> USED AT LINE 2548
L510: E3CE DEFINED AT LINE 769
> USED AT LINE 780
TPROM: E3D6 DEFINED AT LINE 770
> USED AT LINE 768
> USED AT LINE 2528
> USED AT LINE 2599
L520: E3DF DEFINED AT LINE 781
> USED AT LINE 791
BASE: E3E4 DEFINED AT LINE 782
> USED AT LINE 780
> USED AT LINE 1880
> USED AT LINE 1931
> USED AT LINE 1941
> USED AT LINE 1968
> USED AT LINE 1979
> USED AT LINE 1990
> USED AT LINE 2149
> USED AT LINE 3143
> USED AT LINE 3241
> USED AT LINE 3299
L530: E3ED DEFINED AT LINE 792
> USED AT LINE 802
TEMP: E3F1 DEFINED AT LINE 793
> USED AT LINE 791
> USED AT LINE 2172
> USED AT LINE 2174
> USED AT LINE 2186
> USED AT LINE 2187
> USED AT LINE 2296
> USED AT LINE 2304
L540: E3FA DEFINED AT LINE 803
> USED AT LINE 813
SPAN: E3FF DEFINED AT LINE 804
> USED AT LINE 802
L550: E408 DEFINED AT LINE 814
> USED AT LINE 824
INN: E40C DEFINED AT LINE 815
> USED AT LINE 813
L560: E415 DEFINED AT LINE 825
> USED AT LINE 835
NTIB: E41A DEFINED AT LINE 826
> USED AT LINE 824
> USED AT LINE 1696
> USED AT LINE 2208
> USED AT LINE 2233
L570: E423 DEFINED AT LINE 836
> USED AT LINE 846
CSP: E427 DEFINED AT LINE 837
> USED AT LINE 835
> USED AT LINE 3182
> USED AT LINE 3190
L580: E430 DEFINED AT LINE 847
> USED AT LINE 857
TEVAL: E436 DEFINED AT LINE 848
> USED AT LINE 846
> USED AT LINE 2526
L590: E43F DEFINED AT LINE 858
> USED AT LINE 868
TNUMB: E447 DEFINED AT LINE 859
> USED AT LINE 857
> USED AT LINE 2482
> USED AT LINE 3004
L600: E450 DEFINED AT LINE 869
> USED AT LINE 879
HLD: E454 DEFINED AT LINE 870
> USED AT LINE 868
> USED AT LINE 1862
> USED AT LINE 1871
> USED AT LINE 1872
> USED AT LINE 1910
L610: E45D DEFINED AT LINE 880
> USED AT LINE 890
HANDL: E465 DEFINED AT LINE 881
> USED AT LINE 879
> USED AT LINE 2422
> USED AT LINE 2423
> USED AT LINE 2432
> USED AT LINE 2433
L620: E46E DEFINED AT LINE 891
> USED AT LINE 901
CNTXT: E476 DEFINED AT LINE 892
> USED AT LINE 890
> USED AT LINE 951
> USED AT LINE 2321
> USED AT LINE 3307
> USED AT LINE 3358
L630: E47F DEFINED AT LINE 902
> USED AT LINE 912
CRRNT: E487 DEFINED AT LINE 903
> USED AT LINE 901
> USED AT LINE 2983
> USED AT LINE 3201
> USED AT LINE 3359
L640: E490 DEFINED AT LINE 913
> USED AT LINE 923
CP: E493 DEFINED AT LINE 914
> USED AT LINE 912
> USED AT LINE 1680
> USED AT LINE 2630
> USED AT LINE 2639
> USED AT LINE 2674
L650: E49C DEFINED AT LINE 924
> USED AT LINE 934
NP: E49F DEFINED AT LINE 925
> USED AT LINE 923
> USED AT LINE 2252
L660: E4A8 DEFINED AT LINE 935
> USED AT LINE 947
LAST: E4AD DEFINED AT LINE 936
> USED AT LINE 934
> USED AT LINE 2682
> USED AT LINE 2980
> USED AT LINE 3015
> USED AT LINE 3061
L670: E4B6 DEFINED AT LINE 948
> USED AT LINE 956
DOVOC: E4BC DEFINED AT LINE 949
> USED AT LINE 947
> USED AT LINE 960
L680: E4CB DEFINED AT LINE 957
> USED AT LINE 967
FORTH: E4D1 DEFINED AT LINE 958
> USED AT LINE 956
> USED AT LINE 3358
L690: E4DE DEFINED AT LINE 968
> USED AT LINE 979
QDUP: E4E3 DEFINED AT LINE 969
> USED AT LINE 967
> USED AT LINE 1704
> USED AT LINE 2283
> USED AT LINE 2326
> USED AT LINE 2328
> USED AT LINE 2476
> USED AT LINE 2998
> USED AT LINE 3222
> USED AT LINE 3252
> USED AT LINE 3308
QDUP1: E4EE DEFINED AT LINE 974
> USED AT LINE 972
L700: E4F4 DEFINED AT LINE 980
> USED AT LINE 988
ROT: E4F8 DEFINED AT LINE 981
> USED AT LINE 979
> USED AT LINE 1467
> USED AT LINE 3151
> USED AT LINE 3151
L710: E509 DEFINED AT LINE 989
> USED AT LINE 997
DDROP: E50F DEFINED AT LINE 990
> USED AT LINE 988
> USED AT LINE 1376
> USED AT LINE 1989
> USED AT LINE 2029
L720: E51C DEFINED AT LINE 998
> USED AT LINE 1005
DDUP: E521 DEFINED AT LINE 999
> USED AT LINE 997
> USED AT LINE 1261
> USED AT LINE 1272
> USED AT LINE 1361
> USED AT LINE 1486
> USED AT LINE 1825
> USED AT LINE 1827
> USED AT LINE 2382
> USED AT LINE 3150
> USED AT LINE 3204
> USED AT LINE 3207
L721: E52E DEFINED AT LINE 1006
> USED AT LINE 1020
LSHIFT: E535 DEFINED AT LINE 1007
> USED AT LINE 1005
LSHIFT1: E53B DEFINED AT LINE 1010
> USED AT LINE 1013
LSHIFT2: E543 DEFINED AT LINE 1015
> USED AT LINE 1008
L721A: E549 DEFINED AT LINE 1021
> USED AT LINE 1035
RSHIFT: E550 DEFINED AT LINE 1022
> USED AT LINE 1020
RSHIFT1: E556 DEFINED AT LINE 1025
> USED AT LINE 1028
RSHIFT2: E55E DEFINED AT LINE 1030
> USED AT LINE 1023
L722: E564 DEFINED AT LINE 1036
> USED AT LINE 1044
SWAPHL: E567 DEFINED AT LINE 1037
> USED AT LINE 1035
L723: E573 DEFINED AT LINE 1045
> USED AT LINE 1053
SLASH256: E578 DEFINED AT LINE 1046
> USED AT LINE 1044
L724: E583 DEFINED AT LINE 1054
> USED AT LINE 1062
STAR256: E588 DEFINED AT LINE 1055
> USED AT LINE 1053
L725: E593 DEFINED AT LINE 1063
> USED AT LINE 1071
PLUS1: E596 DEFINED AT LINE 1064
> USED AT LINE 1062
> USED AT LINE 1671
> USED AT LINE 1814
> USED AT LINE 1826
> USED AT LINE 1980
> USED AT LINE 2073
> USED AT LINE 2180
> USED AT LINE 2191
> USED AT LINE 2196
> USED AT LINE 3119
> USED AT LINE 3133
> USED AT LINE 3239
> USED AT LINE 3261
L726: E5A3 DEFINED AT LINE 1072
> USED AT LINE 1080
MINUS1: E5A6 DEFINED AT LINE 1073
> USED AT LINE 1071
> USED AT LINE 1972
> USED AT LINE 1976
> USED AT LINE 2174
L727: E5B3 DEFINED AT LINE 1081
> USED AT LINE 1088
TWOSTAR: E5B6 DEFINED AT LINE 1082
> USED AT LINE 1080
L728: E5C0 DEFINED AT LINE 1089
> USED AT LINE 1097
TWOSLASH: E5C3 DEFINED AT LINE 1090
> USED AT LINE 1088
L730: E5CD DEFINED AT LINE 1098
> USED AT LINE 1111
PLUS: E5CF DEFINED AT LINE 1099
> USED AT LINE 1097
> USED AT LINE 1366
> USED AT LINE 1391
> USED AT LINE 1519
> USED AT LINE 1529
> USED AT LINE 1827
> USED AT LINE 1844
> USED AT LINE 2381
> USED AT LINE 2673
> USED AT LINE 3285
L740: E5DB DEFINED AT LINE 1112
> USED AT LINE 1131
INVER: E5DF DEFINED AT LINE 1113
> USED AT LINE 1111
> USED AT LINE 3153
L750: E5F1 DEFINED AT LINE 1132
> USED AT LINE 1153
NEGAT: E5F8 DEFINED AT LINE 1133
> USED AT LINE 1131
> USED AT LINE 1191
> USED AT LINE 1363
> USED AT LINE 1388
> USED AT LINE 1394
> USED AT LINE 1984
NEGAT1: E609 DEFINED AT LINE 1144
> USED AT LINE 1141
L760: E611 DEFINED AT LINE 1154
> USED AT LINE 1173
DNEGA: E619 DEFINED AT LINE 1155
> USED AT LINE 581
> USED AT LINE 1153
> USED AT LINE 1490
L770: E62F DEFINED AT LINE 1174
> USED AT LINE 1186
SUBB: E631 DEFINED AT LINE 1175
> USED AT LINE 1173
> USED AT LINE 1283
> USED AT LINE 1284
> USED AT LINE 1617
> USED AT LINE 1958
> USED AT LINE 2178
> USED AT LINE 2197
> USED AT LINE 2283
L780: E63D DEFINED AT LINE 1187
> USED AT LINE 1197
ABSS: E641 DEFINED AT LINE 1188
> USED AT LINE 1186
> USED AT LINE 1487
ABS1: E64E DEFINED AT LINE 1192
> USED AT LINE 1190
L790: E654 DEFINED AT LINE 1198
> USED AT LINE 1217
EQUAL: E656 DEFINED AT LINE 1199
> USED AT LINE 1197
> USED AT LINE 2031
> USED AT LINE 2809
> USED AT LINE 2821
EQUAL1: E663 DEFINED AT LINE 1205
> USED AT LINE 1203
L800: E66B DEFINED AT LINE 1218
> USED AT LINE 1237
ULESS: E66E DEFINED AT LINE 1219
> USED AT LINE 1217
> USED AT LINE 1361
ULES1: E67B DEFINED AT LINE 1225
> USED AT LINE 1223
L810: E683 DEFINED AT LINE 1238
> USED AT LINE 1258
LESS: E685 DEFINED AT LINE 1239
> USED AT LINE 1237
> USED AT LINE 1261
> USED AT LINE 1614
> USED AT LINE 1841
> USED AT LINE 1954
LESS1: E692 DEFINED AT LINE 1245
> USED AT LINE 1243
L820: E69A DEFINED AT LINE 1259
> USED AT LINE 1269
MAX: E69E DEFINED AT LINE 1260
> USED AT LINE 1258
> USED AT LINE 2058
MAX1: E6AB DEFINED AT LINE 1264
> USED AT LINE 1262
L830: E6B3 DEFINED AT LINE 1270
> USED AT LINE 1280
MIN: E6B7 DEFINED AT LINE 1271
> USED AT LINE 1269
> USED AT LINE 2251
MIN1: E6C6 DEFINED AT LINE 1275
> USED AT LINE 1273
L840: E6CE DEFINED AT LINE 1281
> USED AT LINE 1312
WITHI: E6D5 DEFINED AT LINE 1282
> USED AT LINE 1280
> USED AT LINE 1569
L845: E6EA DEFINED AT LINE 1313
> USED AT LINE 1355
USLASH: E6ED DEFINED AT LINE 1315
> USED AT LINE 1312
> USED AT LINE 1358
UMMOD1: E6FB DEFINED AT LINE 1323
> USED AT LINE 1335
UMMOD2: E708 DEFINED AT LINE 1330
> USED AT LINE 1325
> USED AT LINE 1327
UMMOD3: E70C DEFINED AT LINE 1332
> USED AT LINE 1329
UMMODOV: E71B DEFINED AT LINE 1340
> USED AT LINE 1319
UMMOD4: E720 DEFINED AT LINE 1344
> USED AT LINE 1339
L850: E72C DEFINED AT LINE 1356
> USED AT LINE 1382
UMMOD: E733 DEFINED AT LINE 1357
> USED AT LINE 1355
> USED AT LINE 1392
UMM1: E749 DEFINED AT LINE 1364
> USED AT LINE 1374
UMM2: E77B DEFINED AT LINE 1372
> USED AT LINE 1369
UMM3: E77D DEFINED AT LINE 1373
> USED AT LINE 1371
UMM4: E789 DEFINED AT LINE 1376
> USED AT LINE 1362
L860: E799 DEFINED AT LINE 1383
> USED AT LINE 1400
MSMOD: E79F DEFINED AT LINE 1384
> USED AT LINE 1382
MMOD1: E7B6 DEFINED AT LINE 1389
> USED AT LINE 1387
MMOD2: E7C4 DEFINED AT LINE 1392
> USED AT LINE 1390
MMOD3: E7D4 DEFINED AT LINE 1395
> USED AT LINE 1393
L870: E7DA DEFINED AT LINE 1401
> USED AT LINE 1408
SLMOD: E7DF DEFINED AT LINE 1402
> USED AT LINE 1400
> USED AT LINE 1411
> USED AT LINE 1420
L880: E7F0 DEFINED AT LINE 1409
> USED AT LINE 1416
MODD: E7F4 DEFINED AT LINE 1410
> USED AT LINE 1408
L890: E801 DEFINED AT LINE 1417
> USED AT LINE 1427
SLASH: E803 DEFINED AT LINE 1418
> USED AT LINE 1416
> USED AT LINE 1583
> USED AT LINE 3146
L900: E812 DEFINED AT LINE 1428
> USED AT LINE 1457
UMSTA: E816 DEFINED AT LINE 1429
> USED AT LINE 1427
UUMSTA1: E81D DEFINED AT LINE 1434
> USED AT LINE 1441
UUMSTA2: E821 DEFINED AT LINE 1436
> USED AT LINE 1434
UUMSTA3: E823 DEFINED AT LINE 1438
> USED AT LINE 1433
L900A: E833 DEFINED AT LINE 1458
> USED AT LINE 1473
UUMSTA: E838 DEFINED AT LINE 1459
> USED AT LINE 1457
UMST1: E847 DEFINED AT LINE 1462
> USED AT LINE 1466
UMST2: E867 DEFINED AT LINE 1466
> USED AT LINE 1464
L910: E875 DEFINED AT LINE 1474
> USED AT LINE 1482
STAR: E877 DEFINED AT LINE 1475
> USED AT LINE 1473
> USED AT LINE 1539
L920: E884 DEFINED AT LINE 1483
> USED AT LINE 1496
MSTAR: E887 DEFINED AT LINE 1484
> USED AT LINE 1477
> USED AT LINE 1482
> USED AT LINE 1499
MSTA1: E8A2 DEFINED AT LINE 1491
> USED AT LINE 1489
L930: E8A8 DEFINED AT LINE 1497
> USED AT LINE 1504
SSMOD: E8AE DEFINED AT LINE 1498
> USED AT LINE 1496
> USED AT LINE 1507
L940: E8BF DEFINED AT LINE 1505
> USED AT LINE 1514
STASL: E8C2 DEFINED AT LINE 1506
> USED AT LINE 1504
L950: E8D1 DEFINED AT LINE 1515
> USED AT LINE 1524
CELLP: E8D7 DEFINED AT LINE 1516
> USED AT LINE 1514
> USED AT LINE 1651
> USED AT LINE 1662
> USED AT LINE 1696
> USED AT LINE 2302
> USED AT LINE 2304
> USED AT LINE 2325
> USED AT LINE 2656
> USED AT LINE 2810
> USED AT LINE 2822
> USED AT LINE 3202
> USED AT LINE 3248
> USED AT LINE 3260
> USED AT LINE 3274
> USED AT LINE 3281
L960: E8E5 DEFINED AT LINE 1525
> USED AT LINE 1534
CELLM: E8EB DEFINED AT LINE 1526
> USED AT LINE 1524
> USED AT LINE 2271
> USED AT LINE 2271
> USED AT LINE 2307
> USED AT LINE 2309
> USED AT LINE 2309
> USED AT LINE 2312
> USED AT LINE 2323
> USED AT LINE 2982
> USED AT LINE 2984
> USED AT LINE 3209
> USED AT LINE 3311
L970: E8F9 DEFINED AT LINE 1535
> USED AT LINE 1544
CELLS: E8FF DEFINED AT LINE 1536
> USED AT LINE 1534
L975: E90D DEFINED AT LINE 1545
> USED AT LINE 1552
ALGND: E915 DEFINED AT LINE 1546
> USED AT LINE 1544
> USED AT LINE 2097
> USED AT LINE 2981
L980: E91E DEFINED AT LINE 1553
> USED AT LINE 1563
BLANK: E921 DEFINED AT LINE 1554
> USED AT LINE 1552
> USED AT LINE 1569
> USED AT LINE 1812
> USED AT LINE 2050
> USED AT LINE 2177
> USED AT LINE 2241
> USED AT LINE 2249
> USED AT LINE 2345
> USED AT LINE 2371
> USED AT LINE 2386
L990: E928 DEFINED AT LINE 1564
> USED AT LINE 1577
TCHAR: E92E DEFINED AT LINE 1565
> USED AT LINE 1563
TCHA1: E948 DEFINED AT LINE 1572
> USED AT LINE 1570
L1000: E94E DEFINED AT LINE 1578
> USED AT LINE 1588
DEPTH: E954 DEFINED AT LINE 1579
> USED AT LINE 1577
> USED AT LINE 2513
> USED AT LINE 3167
L1010: E96C DEFINED AT LINE 1589
> USED AT LINE 1607
PICK: E971 DEFINED AT LINE 1590
> USED AT LINE 1588
> USED AT LINE 3170
L1015: E982 DEFINED AT LINE 1608
> USED AT LINE 1626
ROLL: E987 DEFINED AT LINE 1609
> USED AT LINE 1607
> USED AT LINE 1618
ROL1: E99A DEFINED AT LINE 1616
ROL2: E9A8 DEFINED AT LINE 1619
L1020: E9AE DEFINED AT LINE 1627
> USED AT LINE 1644
PSTOR: E9B1 DEFINED AT LINE 1628
> USED AT LINE 1626
> USED AT LINE 2630
L1030: E9BF DEFINED AT LINE 1645
> USED AT LINE 1656
DSTOR: E9C2 DEFINED AT LINE 1646
> USED AT LINE 1644
> USED AT LINE 2548
> USED AT LINE 3359
L1040: E9D5 DEFINED AT LINE 1657
> USED AT LINE 1668
DAT: E9D8 DEFINED AT LINE 1658
> USED AT LINE 1656
> USED AT LINE 2585
L1050: E9EB DEFINED AT LINE 1669
> USED AT LINE 1677
COUNT: E9F1 DEFINED AT LINE 1670
> USED AT LINE 1668
> USED AT LINE 2113
> USED AT LINE 2602
> USED AT LINE 2673
> USED AT LINE 2968
> USED AT LINE 3224
> USED AT LINE 3282
> USED AT LINE 3285
L1060: EA02 DEFINED AT LINE 1678
> USED AT LINE 1685
HERE: EA07 DEFINED AT LINE 1679
> USED AT LINE 1677
> USED AT LINE 1688
> USED AT LINE 2261
> USED AT LINE 2638
> USED AT LINE 2810
> USED AT LINE 2822
> USED AT LINE 2849
> USED AT LINE 2898
> USED AT LINE 2906
> USED AT LINE 2981
> USED AT LINE 3041
L1070: EA14 DEFINED AT LINE 1686
> USED AT LINE 1693
PAD: EA18 DEFINED AT LINE 1687
> USED AT LINE 1685
> USED AT LINE 1862
> USED AT LINE 1911
L1080: EA29 DEFINED AT LINE 1694
> USED AT LINE 1701
TIB: EA2D DEFINED AT LINE 1695
> USED AT LINE 1693
> USED AT LINE 2207
> USED AT LINE 2408
L1090: EA3C DEFINED AT LINE 1702
> USED AT LINE 1712
ATEXE: EA45 DEFINED AT LINE 1703
> USED AT LINE 1701
> USED AT LINE 2001
> USED AT LINE 2019
> USED AT LINE 2390
> USED AT LINE 2400
> USED AT LINE 2410
> USED AT LINE 2482
> USED AT LINE 2526
> USED AT LINE 3004
> USED AT LINE 3357
EXE1: EA52 DEFINED AT LINE 1707
> USED AT LINE 1705
L1100: EA58 DEFINED AT LINE 1713
> USED AT LINE 1777
CMOVE: EA5E DEFINED AT LINE 1714
> USED AT LINE 1712
> USED AT LINE 1829
CMOVE1: EA6A DEFINED AT LINE 1721
> USED AT LINE 1719
CMOVE2: EA70 DEFINED AT LINE 1725
> USED AT LINE 1728
> USED AT LINE 1730
CMOVE3: EA7D DEFINED AT LINE 1732
> USED AT LINE 1717
CMOVEW: EA81 DEFINED AT LINE 1736
> USED AT LINE 1715
CMOVEW1: EA94 DEFINED AT LINE 1746
> USED AT LINE 1744
CMOVEW2: EA99 DEFINED AT LINE 1748
> USED AT LINE 1751
> USED AT LINE 1753
CMOVEW3: EAA3 DEFINED AT LINE 1754
> USED AT LINE 1747
CMOVEW4: EAAB DEFINED AT LINE 1758
> USED AT LINE 1755
L1110: EAB5 DEFINED AT LINE 1778
> USED AT LINE 1807
FILL: EABA DEFINED AT LINE 1779
> USED AT LINE 1777
NFILL1: EAC3 DEFINED AT LINE 1785
> USED AT LINE 1783
NFILL2: EAC7 DEFINED AT LINE 1788
> USED AT LINE 1791
> USED AT LINE 1793
NFILL3: EAD0 DEFINED AT LINE 1794
> USED AT LINE 1781
L1120: EAD8 DEFINED AT LINE 1808
> USED AT LINE 1821
DTRAI: EAE2 DEFINED AT LINE 1809
> USED AT LINE 1807
DTRA1: EAEB DEFINED AT LINE 1812
> USED AT LINE 1815
DTRA2: EB01 DEFINED AT LINE 1815
> USED AT LINE 1811
> USED AT LINE 1813
L1130: EB0D DEFINED AT LINE 1822
> USED AT LINE 1836
PACKS: EB13 DEFINED AT LINE 1823
> USED AT LINE 1821
> USED AT LINE 2253
L1140: EB36 DEFINED AT LINE 1837
> USED AT LINE 1850
DIGIT: EB3C DEFINED AT LINE 1838
> USED AT LINE 1836
> USED AT LINE 1854
L1150: EB57 DEFINED AT LINE 1851
> USED AT LINE 1859
EXTRC: EB5F DEFINED AT LINE 1852
> USED AT LINE 1850
L1160: EB72 DEFINED AT LINE 1860
> USED AT LINE 1868
BDIGS: EB75 DEFINED AT LINE 1861
> USED AT LINE 1859
> USED AT LINE 1920
> USED AT LINE 2130
> USED AT LINE 2140
L1170: EB84 DEFINED AT LINE 1869
> USED AT LINE 1877
HOLD: EB89 DEFINED AT LINE 1870
> USED AT LINE 1868
L1180: EBA0 DEFINED AT LINE 1878
> USED AT LINE 1885
DIG: EBA2 DEFINED AT LINE 1879
> USED AT LINE 1877
> USED AT LINE 1888
L1190: EBB3 DEFINED AT LINE 1886
> USED AT LINE 1896
DIGS: EBB6 DEFINED AT LINE 1887
> USED AT LINE 1885
> USED AT LINE 1920
> USED AT LINE 2140
DIGS1: EBB9 DEFINED AT LINE 1888
> USED AT LINE 1890
DIGS2: EBC5 DEFINED AT LINE 1891
> USED AT LINE 1889
L1200: EBCB DEFINED AT LINE 1897
> USED AT LINE 1907
SIGN: EBD0 DEFINED AT LINE 1898
> USED AT LINE 1896
> USED AT LINE 1921
SIGN1: EBDD DEFINED AT LINE 1902
> USED AT LINE 1900
L1210: EBE3 DEFINED AT LINE 1908
> USED AT LINE 1916
EDIGS: EBE6 DEFINED AT LINE 1909
> USED AT LINE 1907
> USED AT LINE 1921
L1220: EBFB DEFINED AT LINE 1917
> USED AT LINE 1926
STR: EBFF DEFINED AT LINE 1918
> USED AT LINE 1916
> USED AT LINE 2121
> USED AT LINE 2154
L1230: EC18 DEFINED AT LINE 1927
> USED AT LINE 1936
HEX: EC1C DEFINED AT LINE 1928
> USED AT LINE 1926
> USED AT LINE 1971
L1240: EC2C DEFINED AT LINE 1937
> USED AT LINE 1948
DECIM: EC34 DEFINED AT LINE 1938
> USED AT LINE 1936
L1250: EC44 DEFINED AT LINE 1949
> USED AT LINE 1965
DIGTQ: EC4B DEFINED AT LINE 1950
> USED AT LINE 1948
DGTQ1: EC6E DEFINED AT LINE 1960
> USED AT LINE 1955
L1260: EC7A DEFINED AT LINE 1966
> USED AT LINE 1998
NUMBQ: EC82 DEFINED AT LINE 1967
> USED AT LINE 151
> USED AT LINE 1965
NUMQ1: ECA7 DEFINED AT LINE 1973
> USED AT LINE 1970
NUMQ2: ECC7 DEFINED AT LINE 1977
> USED AT LINE 1981
NUMQ3: ECF5 DEFINED AT LINE 1985
> USED AT LINE 1983
NUMQ4: ECFB DEFINED AT LINE 1987
> USED AT LINE 1978
NUMQ5: ED05 DEFINED AT LINE 1988
> USED AT LINE 1986
NUMQ6: ED07 DEFINED AT LINE 1989
> USED AT LINE 1975
L1270: ED17 DEFINED AT LINE 1999
> USED AT LINE 2006
QKEY: ED1C DEFINED AT LINE 2000
> USED AT LINE 1998
> USED AT LINE 2009
> USED AT LINE 2027
L1280: ED29 DEFINED AT LINE 2007
> USED AT LINE 2016
KEY: ED2D DEFINED AT LINE 2008
> USED AT LINE 2006
> USED AT LINE 2029
> USED AT LINE 2384
KEY1: ED30 DEFINED AT LINE 2009
> USED AT LINE 2010
L1290: ED3C DEFINED AT LINE 2017
> USED AT LINE 2024
EMIT: ED41 DEFINED AT LINE 2018
> USED AT LINE 2016
> USED AT LINE 2042
> USED AT LINE 2050
> USED AT LINE 2085
> USED AT LINE 2088
> USED AT LINE 3284
L1300: ED4E DEFINED AT LINE 2025
> USED AT LINE 2037
NUFQ: ED53 DEFINED AT LINE 2026
> USED AT LINE 2024
> USED AT LINE 3153
> USED AT LINE 3297
> USED AT LINE 3311
NUFQ1: ED67 DEFINED AT LINE 2032
> USED AT LINE 2028
L1310: ED6D DEFINED AT LINE 2038
> USED AT LINE 2047
PACE: ED72 DEFINED AT LINE 2039
> USED AT LINE 2037
> USED AT LINE 2556
L1320: ED80 DEFINED AT LINE 2048
> USED AT LINE 2055
SPACE: ED86 DEFINED AT LINE 2049
> USED AT LINE 2047
> USED AT LINE 2060
> USED AT LINE 2141
> USED AT LINE 2154
> USED AT LINE 2602
> USED AT LINE 3130
> USED AT LINE 3255
> USED AT LINE 3310
L1330: ED93 DEFINED AT LINE 2056
> USED AT LINE 2067
SPACS: ED9A DEFINED AT LINE 2057
> USED AT LINE 2055
> USED AT LINE 2122
> USED AT LINE 2132
> USED AT LINE 3152
CHAR1: EDA7 DEFINED AT LINE 2060
> USED AT LINE 2061
CHAR2: EDA9 DEFINED AT LINE 2061
> USED AT LINE 2059
L1340: EDB3 DEFINED AT LINE 2068
> USED AT LINE 2080
TYPES: EDB8 DEFINED AT LINE 2069
> USED AT LINE 2067
> USED AT LINE 2122
> USED AT LINE 2132
> USED AT LINE 2141
TYPE1: EDC1 DEFINED AT LINE 2072
> USED AT LINE 2074
TYPE2: EDC9 DEFINED AT LINE 2074
> USED AT LINE 2071
L1350: EDD5 DEFINED AT LINE 2081
> USED AT LINE 2093
CR: EDD8 DEFINED AT LINE 2082
> USED AT LINE 2080
> USED AT LINE 2505
> USED AT LINE 3148
> USED AT LINE 3167
> USED AT LINE 3245
> USED AT LINE 3248
> USED AT LINE 3307
> USED AT LINE 3332
> USED AT LINE 3335
L1360: EDEB DEFINED AT LINE 2094
> USED AT LINE 2102
DOSTR: EDEF DEFINED AT LINE 2095
> USED AT LINE 2093
> USED AT LINE 2105
> USED AT LINE 2113
> USED AT LINE 2465
> USED AT LINE 2466
L1370: EE0A DEFINED AT LINE 2103
> USED AT LINE 2110
STRQP: EE0E DEFINED AT LINE 2104
> USED AT LINE 2102
> USED AT LINE 2946
> USED AT LINE 2986
L1380: EE19 DEFINED AT LINE 2111
> USED AT LINE 2118
DOTQP: EE1D DEFINED AT LINE 2112
> USED AT LINE 2110
> USED AT LINE 2503
> USED AT LINE 2603
> USED AT LINE 2954
> USED AT LINE 2966
> USED AT LINE 3172
> USED AT LINE 3228
> USED AT LINE 3245
L1390: EE2C DEFINED AT LINE 2119
> USED AT LINE 2127
DOTR: EE2F DEFINED AT LINE 2120
> USED AT LINE 2118
L1400: EE46 DEFINED AT LINE 2128
> USED AT LINE 2137
UDOTR: EE4A DEFINED AT LINE 2129
> USED AT LINE 2127
L1410: EE65 DEFINED AT LINE 2138
> USED AT LINE 2146
UDOT: EE68 DEFINED AT LINE 2139
> USED AT LINE 2137
> USED AT LINE 2153
L1420: EE7B DEFINED AT LINE 2147
> USED AT LINE 2159
DOT: EE7D DEFINED AT LINE 2148
> USED AT LINE 2146
> USED AT LINE 2162
DOT1: EE91 DEFINED AT LINE 2154
> USED AT LINE 2152
L1430: EE9D DEFINED AT LINE 2160
> USED AT LINE 2169
QUEST: EE9F DEFINED AT LINE 2161
> USED AT LINE 2159
L1440: EEAC DEFINED AT LINE 2170
> USED AT LINE 2204
PARS: EEB2 DEFINED AT LINE 2171
> USED AT LINE 2169
> USED AT LINE 2209
PARS1: EED3 DEFINED AT LINE 2177
> USED AT LINE 2181
PARS2: EEF3 DEFINED AT LINE 2183
> USED AT LINE 2179
PARS3: EEF5 DEFINED AT LINE 2184
> USED AT LINE 2175
PARS4: EEFB DEFINED AT LINE 2186
> USED AT LINE 2192
PARS5: EF13 DEFINED AT LINE 2190
> USED AT LINE 2188
PARS6: EF25 DEFINED AT LINE 2195
> USED AT LINE 2190
PARS7: EF2F DEFINED AT LINE 2197
> USED AT LINE 2194
PARS8: EF3B DEFINED AT LINE 2199
> USED AT LINE 2173
L1450: EF47 DEFINED AT LINE 2205
> USED AT LINE 2214
PARSE: EF4D DEFINED AT LINE 2206
> USED AT LINE 2204
> USED AT LINE 2241
> USED AT LINE 2249
> USED AT LINE 2261
L1460: EF72 DEFINED AT LINE 2215
> USED AT LINE 2222
DOTPR: EF75 DEFINED AT LINE 2216
> USED AT LINE 2214
L1470: EF84 DEFINED AT LINE 2223
> USED AT LINE 2230
PAREN: EF86 DEFINED AT LINE 2224
> USED AT LINE 2222
L1480: EF95 DEFINED AT LINE 2231
> USED AT LINE 2238
BKSLA: EF97 DEFINED AT LINE 2232
> USED AT LINE 2230
L1490: EFA8 DEFINED AT LINE 2239
> USED AT LINE 2246
CHAR: EFAD DEFINED AT LINE 2240
> USED AT LINE 2238
L1500: EFBE DEFINED AT LINE 2247
> USED AT LINE 2258
TOKEN: EFC4 DEFINED AT LINE 2248
> USED AT LINE 2246
> USED AT LINE 2524
> USED AT LINE 2619
> USED AT LINE 3051
> USED AT LINE 3071
> USED AT LINE 3084
> USED AT LINE 3104
L1510: EFE2 DEFINED AT LINE 2259
> USED AT LINE 2268
WORD: EFE7 DEFINED AT LINE 2260
> USED AT LINE 2258
L1520: EFF6 DEFINED AT LINE 2269
> USED AT LINE 2276
NAMET: EFFC DEFINED AT LINE 2270
> USED AT LINE 2268
> USED AT LINE 2313
> USED AT LINE 3207
L1530: F00B DEFINED AT LINE 2277
> USED AT LINE 2292
SAMEQ: F011 DEFINED AT LINE 2278
> USED AT LINE 2276
SAME1: F01A DEFINED AT LINE 2281
> USED AT LINE 2286
SAME2: F038 DEFINED AT LINE 2286
> USED AT LINE 2280
> USED AT LINE 2284
L1540: F046 DEFINED AT LINE 2293
> USED AT LINE 2318
FIND: F04B DEFINED AT LINE 2294
> USED AT LINE 2292
> USED AT LINE 2328
FIND1: F064 DEFINED AT LINE 2298
> USED AT LINE 2310
FIND2: F086 DEFINED AT LINE 2304
> USED AT LINE 2301
FIND3: F08E DEFINED AT LINE 2305
> USED AT LINE 2303
FIND6: F092 DEFINED AT LINE 2306
> USED AT LINE 2299
FIND4: F09E DEFINED AT LINE 2308
> USED AT LINE 2305
FIND5: F0AA DEFINED AT LINE 2311
> USED AT LINE 2308
L1550: F0C0 DEFINED AT LINE 2319
> USED AT LINE 2339
NAMEQ: F0C6 DEFINED AT LINE 2320
> USED AT LINE 2318
> USED AT LINE 2476
> USED AT LINE 2619
> USED AT LINE 2964
> USED AT LINE 2998
NAMQ1: F0D7 DEFINED AT LINE 2324
> USED AT LINE 2322
NAMQ2: F0D9 DEFINED AT LINE 2325
> USED AT LINE 2329
NAMQ3: F0F7 DEFINED AT LINE 2331
> USED AT LINE 2327
L1560: F103 DEFINED AT LINE 2340
> USED AT LINE 2352
BKSP: F106 DEFINED AT LINE 2341
> USED AT LINE 2339
> USED AT LINE 2372
BACK1: F131 DEFINED AT LINE 2347
> USED AT LINE 2343
L1570: F137 DEFINED AT LINE 2353
> USED AT LINE 2361
TAP: F13B DEFINED AT LINE 2354
> USED AT LINE 2352
> USED AT LINE 2371
> USED AT LINE 2388
L1580: F150 DEFINED AT LINE 2362
> USED AT LINE 2378
KTAP: F155 DEFINED AT LINE 2363
> USED AT LINE 140
> USED AT LINE 2361
> USED AT LINE 2557
> USED AT LINE 2566
KTAP1: F17F DEFINED AT LINE 2372
> USED AT LINE 2370
KTAP2: F183 DEFINED AT LINE 2373
> USED AT LINE 2367
L1590: F191 DEFINED AT LINE 2379
> USED AT LINE 2397
ACCEP: F198 DEFINED AT LINE 2380
> USED AT LINE 139
> USED AT LINE 2378
> USED AT LINE 2547
ACCP1: F1A1 DEFINED AT LINE 2382
> USED AT LINE 2391
ACCP2: F1BF DEFINED AT LINE 2390
> USED AT LINE 2387
ACCP3: F1C3 DEFINED AT LINE 2391
> USED AT LINE 2389
ACCP4: F1C7 DEFINED AT LINE 2392
> USED AT LINE 2383
L1600: F1D3 DEFINED AT LINE 2398
> USED AT LINE 2405
EXPEC: F1DA DEFINED AT LINE 2399
> USED AT LINE 2397
L1610: F1ED DEFINED AT LINE 2406
> USED AT LINE 2418
QUERY: F1F3 DEFINED AT LINE 2407
> USED AT LINE 2405
> USED AT LINE 2596
L1620: F211 DEFINED AT LINE 2419
> USED AT LINE 2429
CATCH: F217 DEFINED AT LINE 2420
> USED AT LINE 2418
L1630: F23E DEFINED AT LINE 2430
> USED AT LINE 2440
THROW: F244 DEFINED AT LINE 2431
> USED AT LINE 2429
> USED AT LINE 2455
> USED AT LINE 2465
> USED AT LINE 2485
> USED AT LINE 2622
> USED AT LINE 2988
> USED AT LINE 3007
L1640: F265 DEFINED AT LINE 2441
> USED AT LINE 2452
NULLS: F26B DEFINED AT LINE 2442
> USED AT LINE 2440
> USED AT LINE 2455
> USED AT LINE 2600
L1650: F27A DEFINED AT LINE 2453
> USED AT LINE 2460
ABORT: F280 DEFINED AT LINE 2454
> USED AT LINE 2452
L1660: F28B DEFINED AT LINE 2461
> USED AT LINE 2473
ABORQ: F292 DEFINED AT LINE 2463
> USED AT LINE 2460
> USED AT LINE 2479
> USED AT LINE 2514
> USED AT LINE 2938
> USED AT LINE 3191
ABOR1: F29D DEFINED AT LINE 2466
> USED AT LINE 2464
L1670: F2A7 DEFINED AT LINE 2474
> USED AT LINE 2490
INTER: F2B2 DEFINED AT LINE 2475
> USED AT LINE 150
> USED AT LINE 2473
> USED AT LINE 2493
> USED AT LINE 2501
INTE1: F2D9 DEFINED AT LINE 2482
> USED AT LINE 2477
INTE2: F2E3 DEFINED AT LINE 2485
> USED AT LINE 2483
L1680: F2E9 DEFINED AT LINE 2491
> USED AT LINE 2498
LBRAC: F2EB DEFINED AT LINE 2492
> USED AT LINE 2490
> USED AT LINE 2595
L1690: F2FC DEFINED AT LINE 2499
> USED AT LINE 2510
DOTOK: F300 DEFINED AT LINE 2500
> USED AT LINE 142
> USED AT LINE 2498
> USED AT LINE 2565
DOTO1: F317 DEFINED AT LINE 2505
> USED AT LINE 2502
L1700: F31F DEFINED AT LINE 2511
> USED AT LINE 2521
QSTAC: F326 DEFINED AT LINE 2512
> USED AT LINE 2510
L1710: F340 DEFINED AT LINE 2522
> USED AT LINE 2535
EVAL: F345 DEFINED AT LINE 2523
> USED AT LINE 2521
> USED AT LINE 2597
EVAL1: F348 DEFINED AT LINE 2524
> USED AT LINE 2527
EVAL2: F35C DEFINED AT LINE 2528
> USED AT LINE 2525
L1720: F368 DEFINED AT LINE 2536
> USED AT LINE 2544
PRESE: F36F DEFINED AT LINE 2537
> USED AT LINE 2535
> USED AT LINE 2608
> USED AT LINE 3356
L1730: F388 DEFINED AT LINE 2545
> USED AT LINE 2553
XIO: F38C DEFINED AT LINE 2546
> USED AT LINE 2544
L1740: F3A1 DEFINED AT LINE 2554
> USED AT LINE 2562
FILE: F3A6 DEFINED AT LINE 2555
> USED AT LINE 2553
L1750: F3BD DEFINED AT LINE 2563
> USED AT LINE 2571
HAND: F3C2 DEFINED AT LINE 2564
> USED AT LINE 2562
> USED AT LINE 2586
L1760: F3D9 DEFINED AT LINE 2572
> USED AT LINE 2582
ISLO: F3DD DEFINED AT LINE 2573
> USED AT LINE 2571
> USED AT LINE 2585
L1770: F3E8 DEFINED AT LINE 2583
> USED AT LINE 2591
CONSO: F3F0 DEFINED AT LINE 2584
> USED AT LINE 2582
> USED AT LINE 2600
L1780: F403 DEFINED AT LINE 2592
> USED AT LINE 2616
QUIT: F408 DEFINED AT LINE 2593
> USED AT LINE 2591
> USED AT LINE 3364
QUIT1: F411 DEFINED AT LINE 2595
> USED AT LINE 2609
QUIT2: F413 DEFINED AT LINE 2596
> USED AT LINE 2598
QUIT3: F43F DEFINED AT LINE 2605
> USED AT LINE 2601
QUIT4: F451 DEFINED AT LINE 2608
> USED AT LINE 2606
L1790: F45B DEFINED AT LINE 2617
> USED AT LINE 2627
TICK: F45D DEFINED AT LINE 2618
> USED AT LINE 2616
> USED AT LINE 2647
> USED AT LINE 3238
TICK1: F46A DEFINED AT LINE 2622
> USED AT LINE 2620
L1800: F470 DEFINED AT LINE 2628
> USED AT LINE 2635
ALLOT: F476 DEFINED AT LINE 2629
> USED AT LINE 2627
> USED AT LINE 3042
L1810: F483 DEFINED AT LINE 2636
> USED AT LINE 2644
COMMA: F485 DEFINED AT LINE 2637
> USED AT LINE 2635
> USED AT LINE 2647
> USED AT LINE 2811
> USED AT LINE 2823
> USED AT LINE 2882
> USED AT LINE 3003
> USED AT LINE 3043
> USED AT LINE 3076
> USED AT LINE 3106
L1820: F49A DEFINED AT LINE 2645
> USED AT LINE 2652
BCOMP: F4A4 DEFINED AT LINE 2646
> USED AT LINE 2644
L1830: F4B1 DEFINED AT LINE 2653
> USED AT LINE 2661
COMPI: F4B9 DEFINED AT LINE 2654
> USED AT LINE 2652
> USED AT LINE 2664
> USED AT LINE 2692
> USED AT LINE 2702
> USED AT LINE 2703
> USED AT LINE 2732
> USED AT LINE 2733
> USED AT LINE 2808
> USED AT LINE 2820
> USED AT LINE 2841
> USED AT LINE 2857
> USED AT LINE 2865
> USED AT LINE 2873
> USED AT LINE 2881
> USED AT LINE 2890
> USED AT LINE 2938
> USED AT LINE 2946
> USED AT LINE 2954
> USED AT LINE 3023
L1840: F4CE DEFINED AT LINE 2662
> USED AT LINE 2669
LITER: F4D6 DEFINED AT LINE 2663
> USED AT LINE 2661
> USED AT LINE 3006
L1850: F4E5 DEFINED AT LINE 2670
> USED AT LINE 2679
STRCQ: F4E9 DEFINED AT LINE 2671
> USED AT LINE 2669
L1860: F502 DEFINED AT LINE 2680
> USED AT LINE 2689
RECUR: F50A DEFINED AT LINE 2681
> USED AT LINE 2679
L1861: F51B DEFINED AT LINE 2690
> USED AT LINE 2699
DO: F51E DEFINED AT LINE 2691
> USED AT LINE 2689
L1862: F52F DEFINED AT LINE 2700
> USED AT LINE 2710
QDO: F533 DEFINED AT LINE 2701
> USED AT LINE 2699
L1862A: F548 DEFINED AT LINE 2711
> USED AT LINE 2729
DOQDO: F54E DEFINED AT LINE 2712
> USED AT LINE 2702
> USED AT LINE 2710
DOQDO1: F55B DEFINED AT LINE 2719
> USED AT LINE 2715
L1862B: F569 DEFINED AT LINE 2730
> USED AT LINE 2740
MDO: F56D DEFINED AT LINE 2731
> USED AT LINE 2729
L1862C: F582 DEFINED AT LINE 2741
> USED AT LINE 2759
DOMDO: F588 DEFINED AT LINE 2742
> USED AT LINE 2732
> USED AT LINE 2740
DOMDO1: F595 DEFINED AT LINE 2749
> USED AT LINE 2745
L1863: F5A3 DEFINED AT LINE 2760
> USED AT LINE 2770
DODO: F5A8 DEFINED AT LINE 2761
> USED AT LINE 2692
> USED AT LINE 2759
L1864: F5B4 DEFINED AT LINE 2771
> USED AT LINE 2779
DOLOOP: F5BB DEFINED AT LINE 2772
> USED AT LINE 2770
> USED AT LINE 2808
L1865: F5C4 DEFINED AT LINE 2780
> USED AT LINE 2805
DOPLOOP: F5CC DEFINED AT LINE 2781
> USED AT LINE 2779
> USED AT LINE 2820
DOPLOF: F5DD DEFINED AT LINE 2791
> USED AT LINE 2774
> USED AT LINE 2783
DOPLO1: F5EA DEFINED AT LINE 2797
> USED AT LINE 2786
> USED AT LINE 2793
L1866: F5F4 DEFINED AT LINE 2806
> USED AT LINE 2817
LOOP: F5F9 DEFINED AT LINE 2807
> USED AT LINE 2805
LOOP1: F612 DEFINED AT LINE 2811
L1867: F61A DEFINED AT LINE 2818
> USED AT LINE 2828
> USED AT LINE 2838
PLOOP: F620 DEFINED AT LINE 2819
> USED AT LINE 2817
PLOOP1: F639 DEFINED AT LINE 2823
L1868: F641 DEFINED AT LINE 2829
LEAVE: F647 DEFINED AT LINE 2830
> USED AT LINE 2828
L1870: F651 DEFINED AT LINE 2839
> USED AT LINE 2846
FOR: F655 DEFINED AT LINE 2840
> USED AT LINE 2838
L1880: F664 DEFINED AT LINE 2847
> USED AT LINE 2854
BEGIN: F66A DEFINED AT LINE 2848
> USED AT LINE 2846
L1890: F675 DEFINED AT LINE 2855
> USED AT LINE 2862
NEXT: F67A DEFINED AT LINE 2856
> USED AT LINE 2854
L1900: F689 DEFINED AT LINE 2863
> USED AT LINE 2870
UNTIL: F68F DEFINED AT LINE 2864
> USED AT LINE 2862
L1910: F69E DEFINED AT LINE 2871
> USED AT LINE 2878
AGAIN: F6A4 DEFINED AT LINE 2872
> USED AT LINE 2870
> USED AT LINE 2898
L1920: F6B3 DEFINED AT LINE 2879
> USED AT LINE 2887
IFF: F6B6 DEFINED AT LINE 2880
> USED AT LINE 2878
> USED AT LINE 2930
L1930: F6C9 DEFINED AT LINE 2888
> USED AT LINE 2895
AHEAD: F6CF DEFINED AT LINE 2889
> USED AT LINE 2887
> USED AT LINE 2914
> USED AT LINE 2922
L1940: F6E2 DEFINED AT LINE 2896
> USED AT LINE 2903
REPEA: F6E9 DEFINED AT LINE 2897
> USED AT LINE 2895
L1950: F6FA DEFINED AT LINE 2904
> USED AT LINE 2911
THENN: F6FF DEFINED AT LINE 2905
> USED AT LINE 2903
L1960: F70E DEFINED AT LINE 2912
> USED AT LINE 2919
AFT: F712 DEFINED AT LINE 2913
> USED AT LINE 2911
L1970: F723 DEFINED AT LINE 2920
> USED AT LINE 2927
ELSEE: F728 DEFINED AT LINE 2921
> USED AT LINE 2919
L1980: F737 DEFINED AT LINE 2928
> USED AT LINE 2935
WHILE: F73D DEFINED AT LINE 2929
> USED AT LINE 2927
L1990: F74A DEFINED AT LINE 2936
> USED AT LINE 2943
ABRTQ: F751 DEFINED AT LINE 2937
> USED AT LINE 2935
L2000: F760 DEFINED AT LINE 2944
> USED AT LINE 2951
STRQ: F763 DEFINED AT LINE 2945
> USED AT LINE 2943
L2010: F772 DEFINED AT LINE 2952
> USED AT LINE 2961
DOTQ: F775 DEFINED AT LINE 2953
> USED AT LINE 2951
L2020: F784 DEFINED AT LINE 2962
> USED AT LINE 2974
UNIQU: F78C DEFINED AT LINE 2963
> USED AT LINE 2961
> USED AT LINE 2979
UNIQ1: F7A7 DEFINED AT LINE 2969
> USED AT LINE 2965
L2030: F7AF DEFINED AT LINE 2975
> USED AT LINE 2995
SNAME: F7B3 DEFINED AT LINE 2976
> USED AT LINE 2974
> USED AT LINE 3051
> USED AT LINE 3071
> USED AT LINE 3084
> USED AT LINE 3104
PNAM1: F7E4 DEFINED AT LINE 2986
> USED AT LINE 2978
L2040: F7F2 DEFINED AT LINE 2996
> USED AT LINE 3012
SCOMP: F7FB DEFINED AT LINE 2997
> USED AT LINE 2995
> USED AT LINE 3031
SCOM1: F816 DEFINED AT LINE 3003
> USED AT LINE 3001
SCOM2: F81A DEFINED AT LINE 3004
> USED AT LINE 2999
SCOM3: F826 DEFINED AT LINE 3007
> USED AT LINE 3005
L2050: F82C DEFINED AT LINE 3013
> USED AT LINE 3020
OVERT: F832 DEFINED AT LINE 3014
> USED AT LINE 3012
L2060: F845 DEFINED AT LINE 3021
> USED AT LINE 3028
SEMIS: F847 DEFINED AT LINE 3022
> USED AT LINE 3020
L2070: F858 DEFINED AT LINE 3029
> USED AT LINE 3036
RBRAC: F85A DEFINED AT LINE 3030
> USED AT LINE 3028
> USED AT LINE 3052
L2080: F86B DEFINED AT LINE 3037
> USED AT LINE 3048
CALLC: F871 DEFINED AT LINE 3038
> USED AT LINE 3036
> USED AT LINE 3052
L2090: F887 DEFINED AT LINE 3049
> USED AT LINE 3057
COLON: F889 DEFINED AT LINE 3050
> USED AT LINE 3048
L2100: F89E DEFINED AT LINE 3058
> USED AT LINE 3068
IMMED: F8A8 DEFINED AT LINE 3059
> USED AT LINE 3057
L2110: F8C3 DEFINED AT LINE 3069
> USED AT LINE 3081
USER: F8C8 DEFINED AT LINE 3070
> USED AT LINE 3068
L2120: F8DF DEFINED AT LINE 3082
> USED AT LINE 3093
CREAT: F8E6 DEFINED AT LINE 3083
> USED AT LINE 3081
> USED AT LINE 3096
L2130: F8FB DEFINED AT LINE 3094
> USED AT LINE 3101
VARIA: F904 DEFINED AT LINE 3095
> USED AT LINE 3093
L2135: F913 DEFINED AT LINE 3102
> USED AT LINE 3113
CONST: F91C DEFINED AT LINE 3103
> USED AT LINE 3101
L2140: F933 DEFINED AT LINE 3114
> USED AT LINE 3126
UTYPE: F939 DEFINED AT LINE 3115
> USED AT LINE 3113
> USED AT LINE 3227
UTYP1: F942 DEFINED AT LINE 3118
> USED AT LINE 3120
UTYP2: F94C DEFINED AT LINE 3120
> USED AT LINE 3117
L2150: F958 DEFINED AT LINE 3127
> USED AT LINE 3140
DUMPP: F95C DEFINED AT LINE 3128
> USED AT LINE 3126
> USED AT LINE 3150
PDUM1: F96F DEFINED AT LINE 3132
> USED AT LINE 3134
PDUM2: F97B DEFINED AT LINE 3134
> USED AT LINE 3131
L2160: F985 DEFINED AT LINE 3141
> USED AT LINE 3164
DUMP: F98A DEFINED AT LINE 3142
> USED AT LINE 3140
DUMP1: F99C DEFINED AT LINE 3148
> USED AT LINE 3155
DUMP2: F9BF DEFINED AT LINE 3157
> USED AT LINE 3154
DUMP3: F9C3 DEFINED AT LINE 3158
> USED AT LINE 3156
L2170: F9D1 DEFINED AT LINE 3165
> USED AT LINE 3179
DOTS: F9D4 DEFINED AT LINE 3166
> USED AT LINE 3164
DOTS1: F9E1 DEFINED AT LINE 3170
> USED AT LINE 3171
DOTS2: F9E7 DEFINED AT LINE 3171
> USED AT LINE 3169
L2180: F9F8 DEFINED AT LINE 3180
> USED AT LINE 3187
STCSP: F9FD DEFINED AT LINE 3181
> USED AT LINE 3179
L2190: FA0C DEFINED AT LINE 3188
> USED AT LINE 3198
QCSP: FA11 DEFINED AT LINE 3189
> USED AT LINE 3187
L2200: FA2B DEFINED AT LINE 3199
> USED AT LINE 3219
TNAME: FA31 DEFINED AT LINE 3200
> USED AT LINE 3198
> USED AT LINE 3251
TNAM1: FA36 DEFINED AT LINE 3202
> USED AT LINE 3212
TNAM2: FA42 DEFINED AT LINE 3205
> USED AT LINE 3210
TNAM3: FA5A DEFINED AT LINE 3211
> USED AT LINE 3206
> USED AT LINE 3208
TNAM4: FA6E DEFINED AT LINE 3214
> USED AT LINE 3203
L2210: FA7A DEFINED AT LINE 3220
> USED AT LINE 3235
DOTID: FA7E DEFINED AT LINE 3221
> USED AT LINE 3219
> USED AT LINE 3255
DOTI1: FA92 DEFINED AT LINE 3228
> USED AT LINE 3223
L2220: FAA4 DEFINED AT LINE 3236
> USED AT LINE 3304
SEE: FAA8 DEFINED AT LINE 3237
> USED AT LINE 3235
SEE1: FAD7 DEFINED AT LINE 3248
> USED AT LINE 3244
> USED AT LINE 3298
SEE2: FAED DEFINED AT LINE 3252
> USED AT LINE 3250
SEE21: FB1B DEFINED AT LINE 3264
> USED AT LINE 3259
SEE27: FB89 DEFINED AT LINE 3276
> USED AT LINE 3273
SEE28: FBC0 DEFINED AT LINE 3287
> USED AT LINE 3262
> USED AT LINE 3275
SEE29: FBC6 DEFINED AT LINE 3289
> USED AT LINE 3280
SEE3: FBCC DEFINED AT LINE 3292
> USED AT LINE 3253
SEE31: FBD6 DEFINED AT LINE 3294
> USED AT LINE 3290
SEE4: FBE4 DEFINED AT LINE 3297
> USED AT LINE 3288
> USED AT LINE 3293
SEE5: FBEA DEFINED AT LINE 3299
> USED AT LINE 3247
> USED AT LINE 3296
L2230: FBF8 DEFINED AT LINE 3305
> USED AT LINE 3321
WORDS: FBFE DEFINED AT LINE 3306
> USED AT LINE 3304
WORS1: FC07 DEFINED AT LINE 3308
> USED AT LINE 3312
WORS2: FC1F DEFINED AT LINE 3314
> USED AT LINE 3309
L2240: FC25 DEFINED AT LINE 3322
> USED AT LINE 3329
VERSN: FC29 DEFINED AT LINE 3323
> USED AT LINE 3321
L2250: FC36 DEFINED AT LINE 3330
> USED AT LINE 3340
HI: FC39 DEFINED AT LINE 3331
> USED AT LINE 3329
> USED AT LINE 3346
L2260: FC56 DEFINED AT LINE 3341
> USED AT LINE 3351
TBOOT: FC5C DEFINED AT LINE 3342
> USED AT LINE 3340
> USED AT LINE 3357
L2270: FC65 DEFINED AT LINE 3352
> USED AT LINE 3369
COLD: FC6A DEFINED AT LINE 3353
> USED AT LINE 3351
COLD1: FC6D DEFINED AT LINE 3354
> USED AT LINE 3365
LASTN: FC65 DEFINED AT LINE 3369
> USED AT LINE 160
NTOP: 6C00 DEFINED AT LINE 3371
> USED AT LINE 159
CTOP: FC95 DEFINED AT LINE 3372
> USED AT LINE 158
4acdd5e725ca42d03213a9a0551f7fe9
; START OF ROM CODE
; =================
ORG $F800
ROMSTART:
RAMSTART: EQU $0000
RAMEND: EQU ROMSTART
RAMEND_EQU_ROMSTART: EQU 1
BUILDK: EQU 1
FALSE: equ 0
TRUE: equ 1
.db RAMEND_EQU_ROMSTART
test equ (ramend = romstart)
; NOT WORKING because ELSE is not working:
; IF BUILDK
; TFR S,X ;
; ELSE
; LDX #ROMSTART ;
; ENDIF
;
; Workaround suggested by Martin:
;
IF RAMEND_EQU_ROMSTART
TFR S,X ;
ENDIF
IFN RAMEND_EQU_ROMSTART
LDX #ROMSTART ;
ENDIF
; fails:
; IF (RAMEND==ROMSTART)
; TFR S,X ;
; ENDIF
; fails:
; IFN RAMEND = ROMSTART
; LDX #ROMSTART ;
; ENDIF
IF FALSE
db "False!"
db 0
ENDIF
IFN FALSE
db "True!"
db 0
ENDIF
;
IF TRUE
db "True!"
db 0
ENDIF
IFN TRUE
db "False!"
db 0
ENDIF
;
; The ELSE statement seems to work for db
;
IF FALSE
db "False!"
db 0
ELSE
db "True!"
db 0
ENDIF
;
IF TRUE
db "True!"
db 0
ELSE
db "False!"
db 0
ENDIF
;
; The ELSE statement fails for mnemonics:
;
IF TRUE
TFR S,X ;
ELSE
LDX #ROMSTART ;
ENDIF
;
IF FALSE
TFR S,X ;
ELSE
LDX #ROMSTART ;
ENDIF
;
; The ELSE statement fails for db mixed with mnemonics:
;
IF TRUE
db 0
TFR S,X ;
ELSE
db 0 ; this won't appear (good)
LDX #ROMSTART ; this will appear (bad)
ENDIF
;
IF FALSE
db 0 ; this won't appear (good)
TFR S,X ; this will appear (bad)
ELSE
db 0
LDX #ROMSTART ;
ENDIF
;
; The ELSE statement fails for FCC mixed with mnemonics:
;
IF TRUE
FCC "Okay"
TFR S,X ;
ELSE
FCC "Okay" ; this won't appear (good)
LDX #ROMSTART ; this will appear (bad)
ENDIF
;
IF FALSE
FCC "Okay" ; this won't appear (good)
TFR S,X ; this will appear (bad)
ELSE
FCC "Okay"
LDX #ROMSTART ;
ENDIF
db "K"
FCC "Okay"
ds "Malfunctions " ; creates a mess from here onward
; fds "Wibble "
fdb "Wibble "
end
.MACRO write_string
LDX #$00 ; Start at 0
OUTSTR:
LDA $%%1,X
CMPA #$%%2
BEQ DONE ; Are we done writing?
JSR OUTCH
INX
JMP OUTSTR
DONE:
.ENDM
write_string TABLEHEADER,DB
TABLEHEADER:
DB "TEST"
:10F80000011F4154727565210054727565210054C1
:10F8100072756521005472756521001F418EF800D4
:0DF82000001F41008EF8001F418EF8004BC4
:00000001FF
0000 ; START OF ROM CODE
0000 ; =================
F800 .ORG $F800
F800 ROMSTART:
F800 RAMSTART: EQU $0000
F800 RAMEND: EQU ROMSTART
F800 ;
F800 RAMEND_EQU_ROMSTART: EQU 1
F800 BUILDK: EQU 1
F800 ;
F800 FALSE: EQU 0
F800 TRUE: EQU 1
F800 ;
F800 01 DB RAMEND_EQU_ROMSTART
F801 ;
F801 TEST: EQU (ramend = romstart)
F801 ;
F801 ; NOT WORKING because ELSE is not working:
F801 ; IF BUILDK
F801 ; TFR S,X ;
F801 ; ELSE
F801 ; LDX #ROMSTART ;
F801 ; ENDIF
F801 ;
F801 ; Workaround suggested by Martin:
F801 ;
F801 ;
F801 IF RAMEND_EQU_ROMSTART
F801 1F 41 TFR S,X ;
F803 ENDIF
F803 IFN RAMEND_EQU_ROMSTART
F803 ENDIF
F803 ;
F803 ; fails:
F803 ; IF (RAMEND==ROMSTART)
F803 ; TFR S,X ;
F803 ; ENDIF
F803 ;
F803 ; fails:
F803 ; IFN RAMEND = ROMSTART
F803 ; LDX #ROMSTART ;
F803 ; ENDIF
F803 ;
F803 IF FALSE
F803 ENDIF
F803 IFN FALSE
F803 54 72 75 65 21 DB "True!"
F808 00 DB 0
F809 ENDIF
F809 ;
F809 IF TRUE
F809 54 72 75 65 21 DB "True!"
F80E 00 DB 0
F80F ENDIF
F80F IFN TRUE
F80F ENDIF
F80F ;
F80F ; The ELSE statement seems to work for db
F80F ;
F80F IF FALSE
F80F ELSE
F80F 54 72 75 65 21 DB "True!"
F814 00 DB 0
F815 ENDIF
F815 ;
F815 IF TRUE
F815 54 72 75 65 21 DB "True!"
F81A 00 DB 0
F81B ELSE
F81B ENDIF
F81B ;
F81B ; The ELSE statement fails for mnemonics:
F81B ;
F81B IF TRUE
F81B 1F 41 TFR S,X ;
F81D ELSE
F81D ENDIF
F81D ;
F81D IF FALSE
F81D ELSE
F81D 8E F8 00 LDX #ROMSTART ;
F820 ENDIF
F820 ;
F820 ;
F820 ; The ELSE statement fails for db mixed with mnemonics:
F820 ;
F820 IF TRUE
F820 00 DB 0
F821 1F 41 TFR S,X ;
F823 ELSE
F823 ENDIF
F823 ;
F823 IF FALSE
F823 ELSE
F823 00 DB 0
F824 8E F8 00 LDX #ROMSTART ;
F827 ENDIF
F827 ;
F827 ;
F827 ; The ELSE statement fails for FCC mixed with mnemonics:
F827 ;
F827 IF TRUE
F827 FCC "Okay"
F827 1F 41 TFR S,X ;
F829 ELSE
F829 ENDIF
F829 ;
F829 IF FALSE
F829 ELSE
F829 FCC "Okay"
F829 8E F8 00 LDX #ROMSTART ;
F82C ENDIF
F82C ;
F82C 4B DB "K"
F82D FCC "Okay"
F82D DS "Malfunctions " ; creates a mess from here onward
63533MALFUNCTIONS ; fds "Wibble "
63533MALFUNCTIONS 0 FDB "Wibble "
63533MALFUNCTIONS 00 END
ROMSTART: F800 DEFINED AT LINE 4
> USED AT LINE 6
> USED AT LINE 16
RAMSTART: 0000 DEFINED AT LINE 5
RAMEND: F800 DEFINED AT LINE 6
> USED AT LINE 16
RAMEND_EQU_ROMSTART: 0001 DEFINED AT LINE 8
> USED AT LINE 14
BUILDK: 0001 DEFINED AT LINE 9
FALSE: 0000 DEFINED AT LINE 11
TRUE: 0001 DEFINED AT LINE 12
TEST: 0001 DEFINED AT LINE 16
S113F800011F4154727565210054727565210054BE
S113F81072756521005472756521001F418EF800D1
S110F820001F41008EF8001F418EF8004BC1
S9030000FC
.org $2000
.ent $
lda $1234
.MACRO write_string
LDX #$00 ; Start at 0
OUTSTR:
LDA %%1,X
CMP #$%%2
BEQ DONE ; Are we done writing?
JSR OUTCH
INX
JMP OUTSTR
DONE:
.ENDM
jmp tableheader
jmp $1234
TABLEHEADER:
DB "TEST"
;write_string TABLEHEADER,DB
lda tableheader,X
:10200000AD34124C09204C341254455354BD0920B0
:00000001FF
2000 .ORG $2000
2000 .ENT $
2000 AD 34 12 LDA $1234
2003 4C 09 20 JMP tableheader
2006 4C 34 12 JMP $1234
2009 TABLEHEADER:
2009 54 45 53 54 DB "TEST"
200D ;write_string TABLEHEADER,DB
200D BD 09 20 LDA tableheader,X
TABLEHEADER: 2009 DEFINED AT LINE 21
> USED AT LINE 18
> USED AT LINE 26
cpu M6809
serial 6850
serial.data 0x83ff
serial.control 0x83fe
serial.map 1
terminal.caps 1
memory.rom.from 0xE000
memory.rom.to 0xffff
memory.ram.from 0x0000
memory.ram.to 0x7fff
.ENGINE kilo
;zero page
.BSSEG
.ORG 0
Q_ADD: DS 2
Q_KEY: DS 1
Q_HEXCNT: DS 1
Q_HEXADD: DS 2
.CSEG
;.org $0000
;.phase $E000
.ORG $E000
.ENT $
JMP reset
JMP serin
JMP serout
JMP print2
JMP printx
JMP primm
RESET:
LDS #$8000
ORCC #$50
LDA #$15
STA ACIAC
LDA #0
TFR a,dp
WARM:
JSR primm
.CSTR "KILO Monitor v1"
MAINCRLF:
JSR pcrlf
MAIN:
JSR prompt
MAINSHORT:
JSR serin
CMPA #":"
BEQ m_hex
CMPA #$0d
BEQ mainshort
CMPA #$a
BEQ mainshort
;caps fix
ANDA #$DF
CMPA #"M"
LBEQ m_mem
CMPA #"D"
LBEQ m_dump
CMPA #"G"
LBEQ m_go
CMPA #"U"
LBEQ m_user
WHAT:
JSR primm
.CSTR "What?"
JMP maincrlf
M_HEX:
JSR gethex2
STA q_hexcnt
JSR gethex4
STX q_hexadd
JSR gethex2
CMPA #$00
BNE m_hexend
M_HEX_LOOP:
JSR gethex2
STA ,x+
;inc q_hexadd
DEC q_hexcnt
BNE m_hex_loop
LDA #"*"
JSR serout
M_HEX_WAITEND:
JSR serin
CMPA #$0d
BEQ main
CMPA #$0a
BEQ m_hex_waitend
CMPA #":"
BEQ m_hex
BRA m_hex_waitend
M_HEXEND:
;jsr gethex2
BRA maincrlf
M_MEM:
JSR getaddr
LDX q_add
M_MEM_LINE:
JSR pcrlf
JSR printx
JSR primm
.CSTR " ["
LDA ,x+
STA q_add+1
JSR print2
JSR primm
.CSTR "] "
JSR get4x
CMPA #$A0
LBEQ maincrlf
CMPA #$88
BEQ m_mem_back
CMPA #$8d
BNE m_mem_line
LDA q_add+1
STA [-1,x]
JMP m_mem_line
M_MEM_BACK:
LDA q_add+1
STA [-1,x]
LEAX -2,x
JMP m_mem_line
M_DUMP:
JSR getaddr
LDX q_add
JSR pcrlf
M_DUMP_LINE:
JSR printx
JSR primm
.CSTR ": "
LDB #$10
M_DUMP_LOOP:
LDA ,x+
JSR print2
LDA #$20
JSR serout
DECB
BNE m_dump_loop
JSR pcrlf
M_DUMP_WAIT:
JSR serin
CMPA #$0d
BEQ m_dump_line
CMPA #$20
LBEQ main
CMPA #$08
BNE m_dump_wait
LEAX -32,x
JMP m_dump_line
M_GO:
JSR getaddr
JMP [q_add]
M_USER:
JSR primm
.CSTR "Installed modules:",$d,$a
LDD #mon_end
CLRB
INCA
PSHS d
PULS x
M_U_FIND:
LDA 3,x
CMPA #"M"
BNE m_u_next
LDA 4,x
CMPA #"O"
BNE m_u_next
LDA 5,x
CMPA #"D"
BNE m_u_next
LDA 6,x
CMPA #"9"
BNE m_u_next
;found
PSHS x
LEAX 7,x
JSR strout
JSR pcrlf
PULS x
M_U_NEXT:
LEAX 256,x
BNE m_u_find
JMP main
PRINTX:
TFR x,d
JSR print2
TFR b,a
PRINT2:
PSHS a
LSRA
LSRA
LSRA
LSRA
JSR printhex
PULS a
ANDA #$0f
PRINTHEX:
CMPA #$0a
BHS ph2
ADDA #$30
JMP serout
PH2:
ADDA #$37
JMP serout
GETADDR:
JSR primm
.CSTR "Addr:"
JSR get4
RTS
GET4:
LDD #0
STD q_add
GET4X:
JSR gethex
BPL get4ok
RTS
GET4OK:
TFR a,b
JSR printhex
CLRA
LSL q_add+1
ROL q_add
LSL q_add+1
ROL q_add
LSL q_add+1
ROL q_add
LSL q_add+1
ROL q_add
ADDD q_add
STD q_add
JMP get4x
GETHEX2:
JSR gethex
LSLA
LSLA
LSLA
LSLA
STA q_key
JSR gethex
ADDA q_key
RTS
GETHEX4:
JSR gethex2
PSHS a
JSR gethex2
TFR a,b
PULS a
TFR d,x
RTS
GETHEX:
JSR serin
CMPA #$30
BHS gh1
GHB:
ORA #$80
RTS
GH1:
CMPA #$3A
BHI gh2
SUBA #$30
RTS
GH2:
CMPA #"A"
BLO ghb
CMPA #"F"
BHI gh3
SUBA #55
RTS
GH3:
CMPA #"a"
BLO ghb
CMPA #"f"
BHI ghb
SUBA #$57
RTS
; serial
ACIA EQU $83fe
ACIAC EQU ACIA
ACIAS EQU ACIA
ACIAD EQU ACIA+1
ACIA_TDRE EQU 02h
ACIA_RDRF EQU 01h
STROUT:
LDA ,x+
BNE sout2
RTS
SOUT2:
JSR serout
JMP strout
SEROUT:
PSHS a,b
SEROUTL:
LDB ACIAS
ANDB #ACIA_TDRE
BEQ seroutl
STA ACIAD
PULS a,b
RTS
PCRLF:
LDA #$d
JSR serout
LDA #$a
JMP serout
PROMPT:
LDA #">"
JSR serout
LDA #$20
JMP serout
PRIMM:
PSHS a,x
LDX 3,s
PRIMM1:
LDA ,x+
BNE primm2
STX 3,s
PULS a,x,pc
PRIMM2:
JSR serout
BRA primm1
SERIN:
LDA ACIAS
ANDA #ACIA_RDRF
BEQ serin
LDA ACIAD
RTS
MON_END EQU $
.BLOCK
.INCLUDE basic.a09
.ENDBLOCK
.INCLUDE testmod.a09
.ORG 0xfff0
;reserved
DW reset
;SWI3
DW reset
;SWI2
DW reset
;FIRQ
DW reset
;IRQ
DW reset
;SWI
DW reset
;NMI
DW reset
;RES
DW reset
; OMEN KILO monitor version 1.0
; (C) 2018 Martin Maly <maly@maly.cz>
; Published under the terms of MIT license
; Commands:
; =========
; M - list / change memory
; D - Dump memory
; Enter moves to the next cell, backspace moves to the previous, space ends
; G - Jump to memory
; U - List and call user modules
; W - Dump memory (from, to) as a SREC19 record
; X - Dump memory (from, to) as a HEX record
; : - read a HEX line (you can send the HEX record directly into the terminal)
; S - read a SREC line
.ENGINE kilo
.pragma srec
;zero page
.BSSEG
.ORG 0
Q_ADD: DS 2 ; address
Q_KEY: DS 1 ; last key pressed
Q_HEXCNT: DS 1 ; for hex/srec: number of bytes
Q_HEXADD: DS 2 ; for hex/srec: address
Q_HEXADD2: DS 2
q_subr: ds 2
.CSEG
; for generating EEPROM image, use this:
;.org $0000
;.phase $E000
.ORG $E000
.ENT $
; Vector table
; E000 - reset
; E003 - read a character from the serial port
; E006 - print a character
; E009 - print 2digit hex number from A
; E00C - print 4digit hex number from X
; E00F - print immediatelly stored ASCIIZ string
JMP reset
JMP serin
JMP serout
JMP print2
JMP printx
JMP primm
RESET:
LDS #$8000
ORCC #$50
LDA #$15
STA ACIAC
LDA #0
TFR a,dp
WARM:
JSR primm
.CSTR "KILO Monitor v1"
MAINCRLF:
JSR pcrlf
MAIN:
JSR prompt
MAINSHORT:
JSR serin
CMPA #":"
BEQ m_hex
CMPA #$0d
BEQ mainshort
CMPA #$a
BEQ mainshort
;caps fix
ANDA #$DF
CMPA #"M"
LBEQ m_mem
CMPA #"D"
LBEQ m_dump
CMPA #"G"
LBEQ m_go
CMPA #"U"
LBEQ m_user
CMPA #"W"
LBEQ m_writesrec
CMPA #"X"
LBEQ m_writehex
WHAT:
JSR primm
.CSTR "What?"
JMP maincrlf
M_HEX:
JSR gethex2
STA q_hexcnt
JSR gethex4
STX q_hexadd
JSR gethex2
CMPA #$00
BNE m_hexend
M_HEX_LOOP:
JSR gethex2
STA ,x+
;inc q_hexadd
DEC q_hexcnt
BNE m_hex_loop
LDA #"*"
JSR serout
M_HEX_WAITEND:
JSR serin
CMPA #$0d
BEQ main
CMPA #$0a
BEQ m_hex_waitend
CMPA #":"
BEQ m_hex
BRA m_hex_waitend
M_HEXEND:
;jsr gethex2
BRA maincrlf
M_MEM:
JSR getaddr
LDX q_add
M_MEM_LINE:
JSR pcrlf
JSR printx
JSR primm
.CSTR " ["
LDA ,x+
STA q_add+1
JSR print2
JSR primm
.CSTR "] "
JSR get4x
CMPA #$A0
LBEQ maincrlf
CMPA #$88
BEQ m_mem_back
CMPA #$8d
BNE m_mem_line
LDA q_add+1
STA [-1,x]
JMP m_mem_line
M_MEM_BACK:
LDA q_add+1
STA [-1,x]
LEAX -2,x
JMP m_mem_line
M_DUMP:
JSR getaddr
LDX q_add
JSR pcrlf
M_DUMP_LINE:
JSR printx
JSR primm
.CSTR ": "
LDB #$10
M_DUMP_LOOP:
LDA ,x+
JSR print2
LDA #$20
JSR serout
DECB
BNE m_dump_loop
JSR pcrlf
M_DUMP_WAIT:
JSR serin
CMPA #$0d
BEQ m_dump_line
CMPA #$20
LBEQ main
CMPA #$08
BNE m_dump_wait
LEAX -32,x
JMP m_dump_line
M_GO:
JSR getaddr
JMP [q_add]
M_U_FNEXT:
LDA 3,x
CMPA #"M"
BNE m_u_fnext_e
LDA 4,x
CMPA #"O"
BNE m_u_fnext_e
LDA 5,x
CMPA #"D"
BNE m_u_fnext_e
LDA 6,x
CMPA #"9"
M_U_FNEXT_E:
RTS
M_USER:
JSR primm
.CSTR "Installed modules:",$d,$a
LDD #mon_end
CLRB
INCA
PSHS d
PULS x
LDB #$41
M_U_FIND:
JSR m_u_fnext
BNE m_u_next
;found
LDA #"["
JSR serout
TFR b,a
JSR serout
INCB
LDA #"]"
JSR serout
LDA #" "
JSR serout
PSHS x
LEAX 7,x
JSR strout
JSR pcrlf
PULS x
M_U_NEXT:
LEAX 256,x
BNE m_u_find
JSR primm
.CSTR "Select module to run: "
M_U_SEL:
JSR serin
CMPA #$20
LBEQ main
CMPA #$0d
LBEQ main
SUBA #$41
LBLT main
PSHS a
LDD #mon_end
CLRB
INCA
PSHS d
PULS x
PULS b
M_U_SELF:
JSR m_u_fnext
BNE m_u_seln
CMPB #0
BEQ m_u_found
DECB
M_U_SELN:
LEAX 256,x
BNE m_u_self
JMP m_u_sel
M_U_FOUND:
PSHS x
RTS
M_WRITEHEX:
ldx #m_whexline
stx q_subr
jsr m_wrbody
JSR primm
.CSTR ":00000001FF",$d,$a
JMP main
M_WRITEsrec:
ldx #m_wsline
stx q_subr
jsr m_wrbody
JSR primm
.CSTR "S9030000FC",$d,$a
JMP main
m_wrbody:
JSR primm
.CSTR "From:"
JSR get4
LDX q_add
STX q_hexadd
JSR primm
.CSTR $d,$a,"To:"
JSR get4
LDX q_add
STX q_hexadd2
JSR pcrlf
M_WHL:
LDA q_hexadd
CMPA q_hexadd2
BNE m_wh10
LDA q_hexadd2+1
SUBA q_hexadd+1
BEQ m_whend
CMPA #$10
BLO m_whx
M_WH10:
LDA #$10
M_WHX:
STA q_hexcnt
JSR [q_subr]
LDA q_hexadd
CMPA q_hexadd2
BLS m_whl
LDA q_hexadd+1
CMPA q_hexadd2+1
BLS m_whl
m_whend:
rts
M_WHEXLINE:
LDA #":"
JSR serout
LDA q_hexcnt
JSR print2
LDX q_hexadd
JSR printx
LDA #0
JSR print2
LDB q_hexcnt
ADDB q_hexadd
ADDB q_hexadd+1
MWHLOOP:
ADDB ,x
LDA ,x+
JSR print2
DEC q_hexcnt
BNE mwhloop
STX q_hexadd
TFR b,a
NEGA
JSR print2
JSR pcrlf
RTS
M_WSLINE:
LDA #"S"
JSR serout
LDA #"1"
JSR serout
LDA q_hexcnt
adda #3
JSR print2
LDX q_hexadd
JSR printx
LDA #0
JSR print2
LDB q_hexcnt
ADDB q_hexadd
ADDB q_hexadd+1
addb #3
MWSLOOP:
ADDB ,x
LDA ,x+
JSR print2
DEC q_hexcnt
BNE mwsloop
STX q_hexadd
TFR b,a
NEGA
JSR print2
JSR pcrlf
RTS
; ----------------------------------------
; End of monitor commands
; Here starts the useful routines
; Print the 4digit hex number from the X register
PRINTX:
TFR x,d
JSR print2
TFR b,a
; Print the 2digit hex number from the A register
PRINT2:
PSHS a
LSRA
LSRA
LSRA
LSRA
JSR printhex
PULS a
ANDA #$0f
; Print one hex digit from register A
PRINTHEX:
CMPA #$0a
BHS ph2
ADDA #$30
JMP serout
PH2:
ADDA #$37
JMP serout
; Prompt for address
GETADDR:
JSR primm
.CSTR "Addr:"
;JSR get4
;RTS
; Read 4digit hex address
; The value is in q_add variable (ZP)
GET4:
LDD #0
STD q_add
GET4X:
JSR gethex
BPL get4ok
RTS
GET4OK:
TFR a,b
JSR printhex
CLRA
LSL q_add+1
ROL q_add
LSL q_add+1
ROL q_add
LSL q_add+1
ROL q_add
LSL q_add+1
ROL q_add
ADDD q_add
STD q_add
JMP get4x
; Get 1 byte from serial to A (for .hex/.srec)
GETHEX2:
JSR gethex
LSLA
LSLA
LSLA
LSLA
STA q_key
JSR gethex
ADDA q_key
RTS
; Get 2 bytes from serial to X (for .hex/.srec)
GETHEX4:
JSR gethex2
PSHS a
JSR gethex2
TFR a,b
PULS a
TFR d,x
RTS
GETHEX:
JSR serin
CMPA #$30
BHS gh1
GHB:
ORA #$80
RTS
GH1:
CMPA #$3A
BHI gh2
SUBA #$30
RTS
GH2:
CMPA #"A"
BLO ghb
CMPA #"F"
BHI gh3
SUBA #55
RTS
GH3:
CMPA #"a"
BLO ghb
CMPA #"f"
BHI ghb
SUBA #$57
RTS
; serial
ACIA EQU $83fe
ACIAC EQU ACIA
ACIAS EQU ACIA
ACIAD EQU ACIA+1
ACIA_TDRE EQU 02h
ACIA_RDRF EQU 01h
; Print null-terminated string to serial port
; address of the string is in the X register
STROUT:
LDA ,x+
BNE sout2
RTS
SOUT2:
JSR serout
JMP strout
; send one byte from A to serial
SEROUT:
PSHS a,b
SEROUTL:
LDB ACIAS
ANDB #ACIA_TDRE
BEQ seroutl
STA ACIAD
PULS a,b
RTS
; print CR LF
PCRLF:
LDA #$d
JSR serout
LDA #$a
JMP serout
; print monitor prompt
PROMPT:
LDA #">"
JSR serout
LDA #$20
JMP serout
; print immediate
; Usage:
; JSR PRIMM
; .CSTR "string to print"
PRIMM:
PSHS a,x
LDX 3,s
PRIMM1:
LDA ,x+
BNE primm2
STX 3,s
PULS a,x,pc
PRIMM2:
JSR serout
BRA primm1
; Wait for serial char to read
SERIN:
LDA ACIAS
ANDA #ACIA_RDRF
BEQ serin
LDA ACIAD
RTS
MON_END EQU $
; USER MODULES
; see testmod.a09 to further information
.INCLUDE testmod.a09
.INCLUDE basic.a09
.ORG 0xfff0
;reserved
DW reset
;SWI3
DW reset
;SWI2
DW reset
;FIRQ
DW reset
;IRQ
DW reset
;SWI
DW reset
;NMI
DW reset
;RES
DW reset
:10E000007EE0127EE24A7EE2167EE1767EE16F7E5F
:10E01000E23910CE80001A508615B783FE86001FA5
:10E020008BBDE2394B494C4F204D6F6E69746F7256
:10E0300020763100BDE225BDE22FBDE24A813A27BC
:10E040002E810D27F5810A27F184DF814D102700ED
:10E05000508144102700898147102700BD81551049
:10E060002700BEBDE239576861743F007EE034BDD1
:10E07000E1C69703BDE1D59F04BDE1C68100261F1F
:10E08000BDE1C6A7800A0326F7862ABDE216BDE2D7
:10E090004A810D27A2810A27F5813A27D220EF2055
:10E0A00093BDE1919E00BDE225BDE16FBDE2392047
:10E0B0005B00A6809701BDE176BDE2395D2000BD21
:10E0C000E1A381A01027FF6C8188270B818D26D6C4
:10E0D0009601A71F7EE0A69601A71F301E7EE0A630
:10E0E000BDE1919E00BDE225BDE16FBDE2393A2060
:10E0F00000C610A680BDE1768620BDE2165A26F342
:10E10000BDE225BDE24A810D27DE81201027FF27D1
:10E11000810826EF3088E07EE0E8BDE1916E9F0047
:10E1200000BDE239496E7374616C6C6564206D6F7B
:10E1300064756C65733A0D0A00CCE2555F4C340689
:10E140003510A603814D261EA604814F2618A6056C
:10E1500081442612A6068139260C34103007BDE210
:10E160000BBDE22535103089010026D67EE0371F31
:10E1700010BDE1761F98340244444444BDE1833528
:10E1800002840F810A24058B307EE2168B377EE2F3
:10E1900016BDE239416464723A00BDE19E39CC009B
:10E1A00000DD00BDE1E42A01391F89BDE1834F088C
:10E1B000010900080109000801090008010900D34C
:10E1C00000DD007EE1A3BDE1E4484848489702BD78
:10E1D000E1E49B0239BDE1C63402BDE1C61F8935C9
:10E1E000021F0139BDE24A813024038A8039813A15
:10E1F0002203803039814125F2814622038037395C
:10E20000816125E7816622E3805739A6802601399E
:10E21000BDE2167EE20B3406F683FEC40227F9B790
:10E2200083FF350639860DBDE216860A7EE2168624
:10E230003EBDE21686207EE2163412AE63A680262C
:10E2400004AF633592BDE21620F3B683FE84012746
:05E25000F9B683FF395F
:10E300007EE3154D4F443942415349430010DE0C22
:10E31000BDEAE1201310CE21CC10DF0CBDEAE1CC28
:10E320000249DD06DD08DD0ABDE43F8EE383BDE47E
:10E330003810DE0C0F19BDE43F9E069F0E8E0000C4
:10E340009F120D192605863ABDEAA6BDE490BDE5EB
:10E35000EA240E292BBDE55B810427E1BDE50D20F4
:10E36000D034109E089C0A351027037EE45FC3005A
:10E3700000270D340683270F350622048D1020BD9B
:10E380007EE45654494E592056312E333704340614
:10E39000BDE55B9F14A6609E0E9C08270510A30098
:10E3A00024029E06BDE6C49F0E25229F103002A6C1
:10E3B00080810426FA9C08270EA6809F169E10A72F
:10E3C000809F109E1620EE9E109F089F0A9E14C6E6
:10E3D000FF5CA680810426F95D2603326239301F76
:10E3E000CB04301F5AA600812027F78604A7014FCF
:10E3F0009E089F16D308DD08DD0ABDE66224079F4C
:10E40000089F0A7EE44E9E089F109E169C0E270AC7
:10E41000A6829F169E10A78220EE35069E0EED81E5
:10E420009F169E14A6809F149E16A7809F16810497
:10E4300026F039BDEAA63001A600810426F5398E02
:10E44000E4478DF40F18390D0A7F000000048D2475
:10E45000534F525259048D1C57484154203F048D4C
:10E4600013484F57203F048D0B425245414B0453F4
:10E47000544F50048DC98607BDEAA6DC12BDE95E83
:10E480008620BDEAA635108DAF8DB47EE3318DAF09
:10E490008E0200BDEA9C81202514817F27F58C0225
:10E4A00048260486072002A780BDEAA620E5810849
:10E4B0002724811827D8810A2731810D26D50D19E7
:10E4C0002705BDEAA620073410BDE43F35108604B9
:10E4D000A7008E0200398C020027B8301F8608BDC5
:10E4E000EAA68620BDEAA6860820BE1A01061920E3
:10E4F000B830018D66810426F8BDE83196129A1372
:10E5000027149C0826037EE45FEC81DD12BDEA98A7
:10E510008D0825033406397EE8428D3F9F0E8EEA32
:10E5200037A680810426059E0E1A01399F169E0E7D
:10E530009F149E14A100261530019F149E16A680DC
:10E540009F16810426ECEC009E141CFE399E16A634
:10E5500080810426FA300220C83001A600812027DD
:10E56000F8398D1A2422814125118146220D8037E8
:10E570001CFE3981412504815A230D1A013981304D
:10E5800025F9813922F580301CFE398DCE8DE425A8
:10E59000121F89A6018DDC24E23001C041584FD3FF
:10E5A0000C1CFE39BDE8103406BDE55B812C270943
:10E5B00081291A0127157EE4563001BDE743340254
:10E5C000BDE55B8129350226ED1CFE30019F0EADB5
:10E5D000F19E0E1CFE39BDE55B812D260D30018DAF
:10E5E000092506405082001CFC39BDE55BBDE57E77
:10E5F000242F81241A01266030016FE26FE2A60009
:10E60000BDE562254F300134103402EC6385F026FD
:10E610004A5849584958495849EBE0ED62351020AD
:10E62000DD300134026FE2A600BDE57E2526300113
:10E6300034103402EC63584929215849291DE363F9
:10E64000291958492915EB608900290FED633261BA
:10E65000351020D335061CFE1CFD39AE6132651A1B
:10E66000033910DF10DC10830030930A39BDE7FD59
:10E6700034063410E672351032624F39BDE7FD348E
:10E6800006BDE55B813D27037EE4563001BDE743CF
:10E69000BDE8313410E772351032627EE4FCBDE52E
:10E6A0005B9F0E8EE6AEBDE521250234063955533B
:10E6B0005204E5A45045454B04E66D4D454D04E636
:10E6C00062049E069C0826031A033910A300260341
:10E6D0001CFC3924051A011CFD3934028604300162
:10E6E0003001A10026FA3502300120D88D553406BC
:10E6F0005FBDE55B813D2723813C261030015CBD79
:10E70000E55B813E26113001CB042013813E265F5C
:10E710003001CB04BDE55B813D26043001CB0234E2
:10E72000048D203410A3631FA8441F894848340473
:10E73000ABE0840626014C5FA4622701534F3510DD
:10E740003263396FE26FE2BDE55B812D2717812BC4
:10E75000260230018D1CE360ED60BDE55B812B2757
:10E76000F1812D260A30018D094050820020E735C5
:10E770000639BDE7E53406BDE55B812A2748812FD0
:10E78000270335063930018D5C341030623406A819
:10E7900000BDE8243060BDE8243402861134024F05
:10E7A0005FA3622406E3621CFE20021A0169676906
:10E7B0006659496A6026EAA66132644D2A043062CD
:10E7C0008D66351020B130018D1B3404E6623DA604
:10E7D00061E761E6603DA662E76235043DAB60AB90
:10E7E00061ED602092BDE58B250934101F01EC001E
:10E7F000351039BDE5EA24FABDE69E24F58D1134C5
:10E8000002BDE55B8129350226033001397EE456DD
:10E81000BDE66224037EE44EBDE55B812826EE3032
:10E82000017EE7436D002A086000600124026A004F
:10E83000393402BDE55B810427037EE4563001359F
:10E840000239BDE58B24037EE4563406BDE55B81C9
:10E850003D27037EE4563001BDE7438DD49F0E353E
:10E8600010ED009E0E7EE4FCBDE6EC5D27037EE528
:10E870000D7EE4F3BDE7438DB8BDE6C2250F7EE50E
:10E8800009BDE7438DAB9F0EBDE6C224037EE45F66
:10E89000BDE66224037EE44EDC0E3406DC12340650
:10E8A000BDE5093506DD1235107EE4FCBDE55B8172
:10E8B0002C2736813B273D810427258122260630DF
:10E8C000018D422009BDE74334108D473510BDE569
:10E8D0005B812C2714813B271B810427037EE45690
:10E8E0003410BDE43F35102014C6078620BDEAA6CB
:10E8F000D51826F73001BDE55B810426B230017ED4
:10E90000E4FCBDEAA6A680810426037EE4568122AB
:10E9100026F0394D2A0D405082003402862DBDEA82
:10E92000A635028EE952300210A30024058CE95C62
:10E9300026F40F1610A3002506A3000C1620F534AC
:10E940000286309B16BDEAA635028CE95C270430AE
:10E950000220DF39271003E80064000A00018EE975
:10E960005620CFBDE58B253C34069F0E863FBDEA81
:10E97000A6BDE490BDE55B810427F1BDE5D6240B7F
:10E980008EE9B8BDE438BDE43F20E19F143510EDB9
:10E99000009E0EBDE55B812C27037EE4F93001BDAE
:10E9A000E58B24037EE456340634109E14BDE55BEB
:10E9B000812C26C0300120BC52452D454E54455275
:10E9C000049E0C86346F804A26FB9E067EE502BDBF
:10E9D000E5EA24084F5FDD0E867F2017DD0EBDE5DA
:10E9E0005B812C2704960E200A3001BDE5EA240342
:10E9F0007EE456BDE8313406DC0E9F0EBDE6C29CB7
:10EA0000082728350610A30025283406EC81341089
:10EA1000BDE95E35108620BDEAA6BDE4383001347C
:10EA200010BDE43F3510BDEA9820D432628603BDA4
:10EA3000EAA69E0E7EE4FC4C455404E84249460496
:10EA4000E868474F544F04E874474F53554204E871
:10EA50008152455455524E04E831504F4B4504E61F
:10EA60007C5052494E5404E8AC494E50555404E988
:0EEA70006352454D04E4F353544F5004EAE260
:06EA7C00454E4404EAE2ED
:10EA800052554E04E9C14C49535404E9CF4E455701
:10EA900004E31F3F04E8AC048D2A27098D0D810390
:10EAA00026037EE467390C187EEAB58D1727FCB67D
:10EAB000E256847F393402B6E255850227F93502E1
:10EAC000B7E256393402B6E25585202705B6E2563C
:10EAD00020F485013502398603B7E2558615B7E281
:02EAE0005539A6
:10EB00007EEB0F4D4F4439546573744D6F6400BDF7
:10EB1000E00F54657374206D6F64756C650D0A00A9
:03EB20007EE00094
:10FFF000E012E012E012E012E012E012E012E01271
:00000001FF
:10E000007EE0127EE3A67EE3727EE2D67EE2CF7EE3
:10E01000E39510CE80001A508615B783FE86001F48
:10E020008BBDE3954B494C4F204D6F6E69746F72F9
:10E0300020763100BDE381BDE38BBDE3A6813A27A5
:10E040003A810D27F5810A27F184DF814D102700E1
:10E050005C8144102700958147102700C981551025
:10E060002700E1815710270198815810270176BDBC
:10E07000E395576861743F007EE034BDE322970367
:10E08000BDE3319F04BDE3228100261FBDE322A72B
:10E09000800A0326F7862ABDE372BDE3A6810D2719
:10E0A00096810A27F5813A27D220EF2087BDE2F139
:10E0B0009E00BDE381BDE2CFBDE395205B00A6805D
:10E0C0009701BDE2D6BDE3955D2000BDE2FF81A0D2
:10E0D0001027FF608188270B818D26D69601A71F08
:10E0E0007EE0B29601A71F301E7EE0B2BDE2F19E37
:10E0F00000BDE381BDE2CFBDE3953A2000C610A686
:10E1000080BDE2D68620BDE3725A26F3BDE381BD11
:10E11000E3A6810D27DE81201027FF1B810826EF53
:10E120003088E07EE0F4BDE2F16E9F0000A603813E
:10E130004D2610A604814F260AA60581442604A672
:10E1400006813939BDE395496E7374616C6C656401
:10E15000206D6F64756C65733A0D0A00CCE3B15F96
:10E160004C34063510C641BDE12D2621865BBDE34A
:10E17000721F98BDE3725C865DBDE3728620BDE3CD
:10E180007234103007BDE367BDE38135103089017B
:10E190000026D4BDE39553656C656374206D6F6490
:10E1A000756C6520746F2072756E3A2000BDE3A611
:10E1B00081201027FE81810D1027FE7B8041102DCC
:10E1C000FE753402CCE3B15F4C340635103504BD26
:10E1D000E12D2605C100270A5A3089010026F07E6C
:10E1E000E1AD3410398EE2649F08BDE21CBDE395B9
:10E1F0003A303030303030303146460D0A007EE063
:10E20000378EE2959F08BDE21CBDE395533930334C
:10E210003030303046430D0A007EE037BDE395468E
:10E22000726F6D3A00BDE2FA9E009F04BDE3950D4A
:10E230000A546F3A00BDE2FA9E009F06BDE3819644
:10E24000049106260A960790052718811025028654
:10E25000109703AD9F00089604910623E29605915E
:10E260000723DC39863ABDE3729603BDE2D69E04ED
:10E27000BDE2CF8600BDE2D6D603DB04DB05EB842E
:10E28000A680BDE2D60A0326F59F041F9840BDE292
:10E29000D6BDE381398653BDE3728631BDE3729604
:10E2A000038B03BDE2D69E04BDE2CF8600BDE2D65D
:10E2B000D603DB04DB05CB03EB84A680BDE2D60AE4
:10E2C0000326F59F041F9840BDE2D6BDE381391FA8
:10E2D00010BDE2D61F98340244444444BDE2E33505
:10E2E00002840F810A24058B307EE3728B377EE334
:10E2F00072BDE395416464723A00CC0000DD00BD5C
:10E30000E3402A01391F89BDE2E34F0801090008F3
:10E310000109000801090008010900D300DD007EA1
:10E32000E2FFBDE340484848489702BDE3409B02F6
:10E3300039BDE3223402BDE3221F8935021F0139B2
:10E34000BDE3A6813024038A8039813A22038030DC
:10E3500039814125F281462203803739816125E7E1
:10E36000816622E3805739A680260139BDE3727E9B
:10E37000E3673406F683FEC40227F9B783FF350648
:10E3800039860DBDE372860A7EE372863EBDE37276
:10E3900086207EE3723412AE63A6802604AF633516
:10E3A00092BDE37220F3B683FE840127F9B683FFA2
:01E3B0003933
:10E400007E00004D4F4439546573744D6F6400BDF8
:10E41000E00F54657374206D6F64756C650D0A00B0
:03E420007EE0009B
:10E500007EE5154D4F443942415349430010DE101A
:10E51000BDECE7201310CE21CC10DF10BDECE7CC12
:10E520000249DD0ADD0CDD0EBDE63F8EE583BDE66A
:10E530003810DE100F1DBDE63F9E0A9F128E0000B0
:10E540009F160D1D2605863ABDECACBDE692BDE7D3
:10E55000EC240E292BBDE75D810427E1BDE70F20E8
:10E56000D034109E0C9C0E351027037EE65FC3004E
:10E5700000270D340683270F350622048D1020BD99
:10E580007EE65654494E592056312E333704340610
:10E59000BDE75D9F18A6609E129C0C270510A30086
:10E5A00024029E0ABDE8C69F1225229F143002A6AF
:10E5B00080810426FA9C0C270EA6809F1A9E14A721
:10E5C000809F149E1A20EE9E149F0C9F0E9E18C6CC
:10E5D000FF5CA680810426F95D2603326239301F74
:10E5E000CB04301F5AA600812027F78604A7014FCD
:10E5F0009E0C9F1AD30CDD0CDD0EBDE86424079F32
:10E600000C9F0E7EE64E9E0C9F149E1A9C12270AAB
:10E61000A6829F1A9E14A78220EE35069E12ED81D7
:10E620009F1A9E18A6809F189E1AA7809F1A810481
:10E6300026F039BDECAC3001A600810426F5398EF8
:10E64000E6478DF40F1C390D0A7F000000048D266B
:10E65000534F525259048D1E57484154203F048D48
:10E6600015484F57203F048D0D425245414B048DB4
:10E670000553544F50048DC78607BDECACDC16BD66
:10E68000EB608620BDECAC35108DAD8DB27EE531F2
:10E690008DAD8E0200BDECA281202514817F27F56F
:10E6A0008C0248260486072002A780BDECAC20E53A
:10E6B00081082724811827D8810A2731810D26D582
:10E6C0000D1D2705BDECAC20073410BDE63F35100D
:10E6D0008604A7008E0200398C020027B8301F86FE
:10E6E00008BDECAC8620BDECAC860820BE1A010645
:10E6F0001D20B830018D66810426F8BDEA339616D8
:10E700009A1727149C0C26037EE65FEC81DD16BD6C
:10E71000EC9E8D0825033406397EEA448D3F9F1216
:10E720008EEC39A680810426059E121A01399F1AA3
:10E730009E129F189E18A100261530019F189E1A40
:10E74000A6809F1A810426ECEC009E181CFE399EC0
:10E750001AA680810426FA300220C83001A6008162
:10E760002027F8398D1A2422814125118146220D56
:10E7700080371CFE3981412504815A230D1A013945
:10E78000813025F9813922F580301CFE398DCE8DFE
:10E79000E425121F89A6018DDC24E23001C0415816
:10E7A0004FD3101CFE39BDEA123406BDE75D812C43
:10E7B000270981291A0127157EE6563001BDE94552
:10E7C0003402BDE75D8129350226ED1CFE30019F34
:10E7D00012ADF19E121CFE39BDE75D812D260D3074
:10E7E000018D092506405082001CFC39BDE75DBD46
:10E7F000E780242F81241A01266030016FE26FE246
:10E80000A600BDE764254F300134103402EC638567
:10E81000F0264A5849584958495849EBE0ED6235C5
:10E820001020DD300134026FE2A600BDE78025260E
:10E83000300134103402EC63584929215849291D0C
:10E84000E363291958492915EB608900290FED6305
:10E850003261351020D335061CFE1CFD39AE613205
:10E86000651A033910DF14DC14830030930E39BDB0
:10E87000E9FF34063410E672351032624F39BDE9D3
:10E88000FF3406BDE75D813D27037EE6563001BDBE
:10E89000E945BDEA333410E772351032627EE6FE98
:10E8A000BDE75D9F128EE8B0BDE72325023406392F
:10E8B00055535204E7A65045454B04E86F4D454D6E
:10E8C00004E864049E0A9C0C26031A033910A30072
:10E8D00026031CFC3924051A011CFD393402860468
:10E8E00030013001A10026FA3502300120D88D55C3
:10E8F00034065FBDE75D813D2723813C2610300152
:10E900005CBDE75D813E26113001CB042013813EC2
:10E91000265F3001CB04BDE75D813D26043001CB8D
:10E920000234048D203410A3631FA8441F89484873
:10E930003404ABE0840626014C5FA4622701534FE8
:10E9400035103263396FE26FE2BDE75D812D271725
:10E95000812B260230018D1CE360ED60BDE75D81F7
:10E960002B27F1812D260A30018D0940508200208D
:10E97000E7350639BDE9E73406BDE75D812A27485A
:10E98000812F270335063930018D5C341030623415
:10E9900006A800BDEA263060BDEA2634028611349E
:10E9A000024F5FA3622406E3621CFE20021A016983
:10E9B00067696659496A6026EAA66132644D2A048D
:10E9C00030628D66351020B130018D1B3404E66253
:10E9D0003DA661E761E6603DA662E76235043DABB6
:10E9E00060AB61ED602092BDE78D250934101F01F9
:10E9F000EC00351039BDE7EC24FABDE8A024F58D14
:10EA0000113402BDE75D8129350226033001397ECC
:10EA1000E656BDE86424037EE64EBDE75D81282608
:10EA2000EE30017EE9456D002A0860006001240295
:10EA30006A00393402BDE75D810427037EE6563063
:10EA400001350239BDE78D24037EE6563406BDE765
:10EA50005D813D27037EE6563001BDE9458DD49F9B
:10EA6000123510ED009E127EE6FEBDE8EE5D270336
:10EA70007EE70F7EE6F5BDE9458DB8BDE8C4250FFC
:10EA80007EE70BBDE9458DAB9F12BDE8C424037E34
:10EA9000E65FBDE86424037EE64EDC123406DC1635
:10EAA0003406BDE70B3506DD1635107EE6FEBDE704
:10EAB0005D812C2736813B273D8104272581222635
:10EAC0000630018D422009BDE94534108D473510CF
:10EAD000BDE75D812C2714813B271B810427037E22
:10EAE000E6563410BDE63F35102014C6078620BD1B
:10EAF000ECACD51C26F73001BDE75D810426B230B1
:10EB0000017EE6FEBDECACA680810426037EE656BF
:10EB1000812226F0394D2A0D405082003402862D84
:10EB2000BDECAC35028EEB54300210A30024058CF2
:10EB3000EB5E26F40F1A10A3002506A3000C1A2082
:10EB4000F5340286309B1ABDECAC35028CEB5E27A7
:10EB500004300220DF39271003E80064000A0001B6
:10EB60008EEB5820CFBDE78D253C34069F12863FA3
:10EB7000BDECACBDE692BDE75D810427F1BDE7D8F1
:10EB8000240B8EEBBABDE638BDE63F20E19F183579
:10EB900010ED009E12BDE75D812C27037EE6FB3061
:10EBA00001BDE78D24037EE656340634109E18BD61
:10EBB000E75D812C26C0300120BC52452D454E54C6
:10EBC0004552049E1086346F804A26FB9E0A7EE7DB
:10EBD00004BDE7EC24084F5FDD12867F2017DD12AD
:10EBE000BDE75D812C27049612200A3001BDE7ECB9
:10EBF00024037EE656BDEA333406DC129F12BDE8DC
:10EC0000C49C0C2728350610A30025283406EC8167
:10EC10003410BDEB6035108620BDECACBDE638305D
:10EC2000013410BDE63F3510BDEC9E20D432628623
:10EC300003BDECAC9E127EE6FE4C455404EA44490A
:10EC40004604EA6A474F544F04EA76474F53554209
:10EC500004EA8352455455524E04EA33504F4B4513
:10EC600004E87E5052494E5404EAAE494E50555481
:10EC700004EB6552454D04E6F553544F5004E66FDE
:10EC8000454E4404E66F52554E04EBC34C49535471
:10EC900004EBD14E455704E51F3F04EAAE048D2A2C
:10ECA00027098D0D810326037EE667390C1C7EEC57
:10ECB000BB8D1727FCB683FF847F393402B683FEF1
:10ECC000850227F93502B783FF393402B683FE8502
:10ECD000202705B683FF20F485013502398603B766
:08ECE00083FE8615B783FE399F
:10FFF000E012E012E012E012E012E012E012E01271
:00000001FF
This file has been truncated, but you can view the full file.
0000 .ENGINE kilo
0000 ;zero page
0000 .BSSEG
0000 .ORG 0
0000 Q_ADD: DS 2
0002 Q_KEY: DS 1
0003 Q_HEXCNT: DS 1
0004 Q_HEXADD: DS 2
0000 .CSEG
0000 ;.org $0000
0000 ;.phase $E000
E000 .ORG $E000
E000 .ENT $
E000 7E E0 12 JMP reset
E003 7E E2 4A JMP serin
E006 7E E2 16 JMP serout
E009 7E E1 76 JMP print2
E00C 7E E1 6F JMP printx
E00F 7E E2 39 JMP primm
E012 RESET:
E012 10 CE 80 00 LDS #$8000
E016 1A 50 ORCC #$50
E018 86 15 LDA #$15
E01A B7 83 FE STA ACIAC
E01D 86 00 LDA #0
E01F 1F 8B TFR a,dp
E021 WARM:
E021 BD E2 39 JSR primm
E024 4B 49 4C 4F 20 4D 6F 6E 69 74 6F 72 20 76 31 00 .CSTR "KILO Monitor v1"
E034 MAINCRLF:
E034 BD E2 25 JSR pcrlf
E037 MAIN:
E037 BD E2 2F JSR prompt
E03A MAINSHORT:
E03A BD E2 4A JSR serin
E03D 81 3A CMPA #":"
E03F 27 2E BEQ m_hex
E041 81 0D CMPA #$0d
E043 27 F5 BEQ mainshort
E045 81 0A CMPA #$a
E047 27 F1 BEQ mainshort
E049 ;caps fix
E049 84 DF ANDA #$DF
E04B 81 4D CMPA #"M"
E04D 10 27 00 50 LBEQ m_mem
E051 81 44 CMPA #"D"
E053 10 27 00 89 LBEQ m_dump
E057 81 47 CMPA #"G"
E059 10 27 00 BD LBEQ m_go
E05D 81 55 CMPA #"U"
E05F 10 27 00 BE LBEQ m_user
E063 WHAT:
E063 BD E2 39 JSR primm
E066 57 68 61 74 3F 00 .CSTR "What?"
E06C 7E E0 34 JMP maincrlf
E06F M_HEX:
E06F BD E1 C6 JSR gethex2
E072 97 03 STA q_hexcnt
E074 BD E1 D5 JSR gethex4
E077 9F 04 STX q_hexadd
E079 BD E1 C6 JSR gethex2
E07C 81 00 CMPA #$00
E07E 26 1F BNE m_hexend
E080 M_HEX_LOOP:
E080 BD E1 C6 JSR gethex2
E083 A7 80 STA ,x+
E085 ;inc q_hexadd
E085 0A 03 DEC q_hexcnt
E087 26 F7 BNE m_hex_loop
E089 86 2A LDA #"*"
E08B BD E2 16 JSR serout
E08E M_HEX_WAITEND:
E08E BD E2 4A JSR serin
E091 81 0D CMPA #$0d
E093 27 A2 BEQ main
E095 81 0A CMPA #$0a
E097 27 F5 BEQ m_hex_waitend
E099 81 3A CMPA #":"
E09B 27 D2 BEQ m_hex
E09D 20 EF BRA m_hex_waitend
E09F M_HEXEND:
E09F ;jsr gethex2
E09F 20 93 BRA maincrlf
E0A1 M_MEM:
E0A1 BD E1 91 JSR getaddr
E0A4 9E 00 LDX q_add
E0A6 M_MEM_LINE:
E0A6 BD E2 25 JSR pcrlf
E0A9 BD E1 6F JSR printx
E0AC BD E2 39 JSR primm
E0AF 20 5B 00 .CSTR " ["
E0B2 A6 80 LDA ,x+
E0B4 97 01 STA q_add+1
E0B6 BD E1 76 JSR print2
E0B9 BD E2 39 JSR primm
E0BC 5D 20 00 .CSTR "] "
E0BF BD E1 A3 JSR get4x
E0C2 81 A0 CMPA #$A0
E0C4 10 27 FF 6C LBEQ maincrlf
E0C8 81 88 CMPA #$88
E0CA 27 0B BEQ m_mem_back
E0CC 81 8D CMPA #$8d
E0CE 26 D6 BNE m_mem_line
E0D0 96 01 LDA q_add+1
E0D2 A7 1F STA [-1,x]
E0D4 7E E0 A6 JMP m_mem_line
E0D7 M_MEM_BACK:
E0D7 96 01 LDA q_add+1
E0D9 A7 1F STA [-1,x]
E0DB 30 1E LEAX -2,x
E0DD 7E E0 A6 JMP m_mem_line
E0E0 M_DUMP:
E0E0 BD E1 91 JSR getaddr
E0E3 9E 00 LDX q_add
E0E5 BD E2 25 JSR pcrlf
E0E8 M_DUMP_LINE:
E0E8 BD E1 6F JSR printx
E0EB BD E2 39 JSR primm
E0EE 3A 20 00 .CSTR ": "
E0F1 C6 10 LDB #$10
E0F3 M_DUMP_LOOP:
E0F3 A6 80 LDA ,x+
E0F5 BD E1 76 JSR print2
E0F8 86 20 LDA #$20
E0FA BD E2 16 JSR serout
E0FD 5A DECB
E0FE 26 F3 BNE m_dump_loop
E100 BD E2 25 JSR pcrlf
E103 M_DUMP_WAIT:
E103 BD E2 4A JSR serin
E106 81 0D CMPA #$0d
E108 27 DE BEQ m_dump_line
E10A 81 20 CMPA #$20
E10C 10 27 FF 27 LBEQ main
E110 81 08 CMPA #$08
E112 26 EF BNE m_dump_wait
E114 30 88 E0 LEAX -32,x
E117 7E E0 E8 JMP m_dump_line
E11A M_GO:
E11A BD E1 91 JSR getaddr
E11D 6E 9F 00 00 JMP [q_add]
E121 M_USER:
E121 BD E2 39 JSR primm
E124 49 6E 73 74 61 6C 6C 65 64 20 6D 6F 64 75 6C 65 73 3A 0D 0A 00 .CSTR "Installed modules:",$d,$a
E139 CC E2 55 LDD #mon_end
E13C 5F CLRB
E13D 4C INCA
E13E 34 06 PSHS d
E140 35 10 PULS x
E142 M_U_FIND:
E142 A6 03 LDA 3,x
E144 81 4D CMPA #"M"
E146 26 1E BNE m_u_next
E148 A6 04 LDA 4,x
E14A 81 4F CMPA #"O"
E14C 26 18 BNE m_u_next
E14E A6 05 LDA 5,x
E150 81 44 CMPA #"D"
E152 26 12 BNE m_u_next
E154 A6 06 LDA 6,x
E156 81 39 CMPA #"9"
E158 26 0C BNE m_u_next
E15A ;found
E15A 34 10 PSHS x
E15C 30 07 LEAX 7,x
E15E BD E2 0B JSR strout
E161 BD E2 25 JSR pcrlf
E164 35 10 PULS x
E166 M_U_NEXT:
E166 30 89 01 00 LEAX 256,x
E16A 26 D6 BNE m_u_find
E16C 7E E0 37 JMP main
E16F PRINTX:
E16F 1F 10 TFR x,d
E171 BD E1 76 JSR print2
E174 1F 98 TFR b,a
E176 PRINT2:
E176 34 02 PSHS a
E178 44 LSRA
E179 44 LSRA
E17A 44 LSRA
E17B 44 LSRA
E17C BD E1 83 JSR printhex
E17F 35 02 PULS a
E181 84 0F ANDA #$0f
E183 PRINTHEX:
E183 81 0A CMPA #$0a
E185 24 05 BHS ph2
E187 8B 30 ADDA #$30
E189 7E E2 16 JMP serout
E18C PH2:
E18C 8B 37 ADDA #$37
E18E 7E E2 16 JMP serout
E191 GETADDR:
E191 BD E2 39 JSR primm
E194 41 64 64 72 3A 00 .CSTR "Addr:"
E19A BD E1 9E JSR get4
E19D 39 RTS
E19E GET4:
E19E CC 00 00 LDD #0
E1A1 DD 00 STD q_add
E1A3 GET4X:
E1A3 BD E1 E4 JSR gethex
E1A6 2A 01 BPL get4ok
E1A8 39 RTS
E1A9 GET4OK:
E1A9 1F 89 TFR a,b
E1AB BD E1 83 JSR printhex
E1AE 4F CLRA
E1AF 08 01 LSL q_add+1
E1B1 09 00 ROL q_add
E1B3 08 01 LSL q_add+1
E1B5 09 00 ROL q_add
E1B7 08 01 LSL q_add+1
E1B9 09 00 ROL q_add
E1BB 08 01 LSL q_add+1
E1BD 09 00 ROL q_add
E1BF D3 00 ADDD q_add
E1C1 DD 00 STD q_add
E1C3 7E E1 A3 JMP get4x
E1C6 GETHEX2:
E1C6 BD E1 E4 JSR gethex
E1C9 48 LSLA
E1CA 48 LSLA
E1CB 48 LSLA
E1CC 48 LSLA
E1CD 97 02 STA q_key
E1CF BD E1 E4 JSR gethex
E1D2 9B 02 ADDA q_key
E1D4 39 RTS
E1D5 GETHEX4:
E1D5 BD E1 C6 JSR gethex2
E1D8 34 02 PSHS a
E1DA BD E1 C6 JSR gethex2
E1DD 1F 89 TFR a,b
E1DF 35 02 PULS a
E1E1 1F 01 TFR d,x
E1E3 39 RTS
E1E4 GETHEX:
E1E4 BD E2 4A JSR serin
E1E7 81 30 CMPA #$30
E1E9 24 03 BHS gh1
E1EB GHB:
E1EB 8A 80 ORA #$80
E1ED 39 RTS
E1EE GH1:
E1EE 81 3A CMPA #$3A
E1F0 22 03 BHI gh2
E1F2 80 30 SUBA #$30
E1F4 39 RTS
E1F5 GH2:
E1F5 81 41 CMPA #"A"
E1F7 25 F2 BLO ghb
E1F9 81 46 CMPA #"F"
E1FB 22 03 BHI gh3
E1FD 80 37 SUBA #55
E1FF 39 RTS
E200 GH3:
E200 81 61 CMPA #"a"
E202 25 E7 BLO ghb
E204 81 66 CMPA #"f"
E206 22 E3 BHI ghb
E208 80 57 SUBA #$57
E20A 39 RTS
E20B ; serial
E20B ACIA: EQU $83fe
E20B ACIAC: EQU ACIA
E20B ACIAS: EQU ACIA
E20B ACIAD: EQU ACIA+1
E20B ACIA_TDRE: EQU 02h
E20B ACIA_RDRF: EQU 01h
E20B STROUT:
E20B A6 80 LDA ,x+
E20D 26 01 BNE sout2
E20F 39 RTS
E210 SOUT2:
E210 BD E2 16 JSR serout
E213 7E E2 0B JMP strout
E216 SEROUT:
E216 34 06 PSHS a,b
E218 SEROUTL:
E218 F6 83 FE LDB ACIAS
E21B C4 02 ANDB #ACIA_TDRE
E21D 27 F9 BEQ seroutl
E21F B7 83 FF STA ACIAD
E222 35 06 PULS a,b
E224 39 RTS
E225 PCRLF:
E225 86 0D LDA #$d
E227 BD E2 16 JSR serout
E22A 86 0A LDA #$a
E22C 7E E2 16 JMP serout
E22F PROMPT:
E22F 86 3E LDA #">"
E231 BD E2 16 JSR serout
E234 86 20 LDA #$20
E236 7E E2 16 JMP serout
E239 PRIMM:
E239 34 12 PSHS a,x
E23B AE 63 LDX 3,s
E23D PRIMM1:
E23D A6 80 LDA ,x+
E23F 26 04 BNE primm2
E241 AF 63 STX 3,s
E243 35 92 PULS a,x,pc
E245 PRIMM2:
E245 BD E2 16 JSR serout
E248 20 F3 BRA primm1
E24A SERIN:
E24A B6 83 FE LDA ACIAS
E24D 84 01 ANDA #ACIA_RDRF
E24F 27 F9 BEQ serin
E251 B6 83 FF LDA ACIAD
E254 39 RTS
E255 MON_END: EQU $
E255 .BLOCK
E255 ;NAM TB01V137
E255 ;* WRITTEN 20-OCT-77 BY JOHN BYRNS
E255 ;* REVISED 30-DEC-77
E255 ;* REVISED 18-JAN-78
E255 ;* REVISED 10-APR-78
E255 ;* REVISED 08-MAY-79 TO ELIMINATE USE OF SP
E255 ;* REVISED 24-JAN-80 TO USE 6801 ON CHIP RAM
E255 ;* REVISED 26-JAN-80 FOR NEW 6801 INSTRUCTIONS
E255 ;* REVISED 24-JUL-81 FOR WHISTON BOARD
E255 ;* REVISED 24-SEP-81 INCLUDE USER FUNCTION
E255 ;* REVISED 08-APR-82 MAKE STANDALONE INCLUDE HEX CONSTANTS AND MEM FUNCTION
E255 ;* REVISED 21-NOV-84 FOR 6809
E255 ;* REVISED FEB 94 ADAPTED TO SIMULATOR AND BUGFIXES BY L.C. BENSCHOP.
E255 ;*
E255 .ENGINE kilo
E255 EOL: EQU $04
E255 ETX: EQU $03
E255 SPACE: EQU $20
E255 CR: EQU $0D
E255 LF: EQU $0A
E255 BS: EQU $08
E255 CAN: EQU $18
E255 BELL: EQU $07
E255 FILL: EQU $00
E255 DEL: EQU $7F
E255 BSIZE: EQU 73
E255 STKCUS: EQU 48
E255 ;*
E255 BACIA: = $83FE
E255 RMCR: EQU bACIA
E255 TRCS: EQU bACIA
E255 RECEV: EQU bACIA+1
E255 TRANS: EQU bACIA+1
E255 CNTL1: EQU $03
E255 CNTL2: EQU $15
E255 RDRF: EQU $01
E255 ORFE: EQU $20
E255 TDRE: EQU $02
E255 ;* EDIT THE FOLLOWING EQUATES TO REFLECT THE
E255 ;* DESIRED ROM AND RAM LAYOUT
E255 LORAM: EQU $0080 ;ADDRESS OF DIRECT PAGE SCRATCH RAM
E255 BUFFER: EQU $0200 ;ADDRESS OF MAIN RAM
E255 RAMSIZ: EQU $2000 ;SIZE OF MAIN RAM
E255 ROMADR: EQU $f000 ;ADDRESS OF TINY BASIC ROM
E255 ;*
E255 RAMBEG: EQU BUFFER+B
View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment