ProForth source code
FSYS.S: ProDOS system program to load the dictionary.
LST ON,NOGen,NOAsym,NOVsym
* FORTH.SYSTEM by John Matthews, M.D.
A1 EQU $3C
A2 EQU $3E
A4 EQU $42
FSTART EQU $800 Forth dictionary entry
FBUF1 EQU $B200
MLI EQU $BF00 Call MLI
BITMAP EQU $BF58 ProDOS memory bit map
FLEVEL EQU $BF94
MACHID EQU $BF98
CLR80COL EQU $C000 Hardware switches
CLR80VID EQU $C00C
SETALTCH EQU $C00F
ROMON EQU $C082
HOME EQU $FC58 Monitor routines
GETKEY EQU $FD0C
CROUT EQU $FD8E
PRBYTE EQU $FDDA
COUT EQU $FDED
MOVE EQU $FE2C
SETKBD EQU $FE89
SETVID EQU $FE93
SYS
ORG $2000
LDX #$FF
TXS
LDA #0
STA A1
STA A2
STA A4
LDA #$21
STA A1+1
LDA #$24
STA A2+1
LDA #<FSYS
STA A4+1
LDY #0
JSR MOVE
LDA #>FSYS
STA $3F2
LDA #<FSYS
STA $3F3
EOR #$A5
STA $3F4
JMP FSYS
ORG $A000
* Initialize normal keyboard & 40 columns
FSYS LDA ROMON Enable the ROMs!
JSR SETVID
JSR SETKBD
STA CLR80VID
STA SETALTCH
STA CLR80COL
LDA MACHID
AND #2
BEQ NO80COL
JSR $C300
NO80COL JSR HOME
JSR SCREEN
* Initialize the ProDOS bit map
LDX #$17
LDA #1 Global page ($BF00) in use
STA BITMAP,X
DEX
LDA #0 Free all other pages
STA FLEVEL File level = 0
CLRBITS STA BITMAP,X
DEX
BPL CLRBITS
LDA #$CF Zero page, stack and text
STA BITMAP page 1 in use
* Clear the future user area & buffers
LDA #$B2
STA A1+1
LDY #0
STY A1
CLRBUF1 TYA
CLRBUF2 STA (A1),Y
INY
BNE CLRBUF2
INC A1+1
LDA A1+1
CMP #$BF
BNE CLRBUF1
* Close any open files
JSR MLI
DB $CC CLOSE command
DW CLOSLIST
BCS ERROR
* Get the prefix
JSR MLI
DB $C7 GET PREFIX command
DW PREFLIST
BCS ERROR
LDA PREFIX
BEQ ERROR Null prefix is death
* Open F.DICT file
LDA #>FNAME1
STA ONAME
LDA #<FNAME1
STA ONAME+1
JSR MLI
DB $C8 OPEN command
DW OPENLIST
BCS ERROR
* Get end of file mark
LDA REFNO Use the REFNO supplied
STA EREF by the call to OPEN
JSR MLI
DB $D1 GET EOF command
DW EOFLIST
BCS ERROR
* Read the file
LDA REFNO Use the REFNO again
STA RREF
LDA EPOS Use the length supplied
STA RLENGTH by the call to GET EOF
LDA EPOS+1
STA RLENGTH+1
JSR MLI
DB $CA READ command
DW READLIST
BCS ERROR
* Close F.DICT
JSR MLI
DB $CC CLOSE command
DW CLOSLIST
BCS ERROR
* Open F.DISK
LDA #>FNAME2
STA ONAME
LDA #<FNAME2
STA ONAME+1
JSR MLI
DB $C8 OPEN command
DW OPENLIST
BCS ERROR
JMP FSTART
* Handle fatal error
ERROR PHA A Save the error code
JSR CROUT Print RETURN
LDY ERRMSG Print error message
LDX #1
ERR1 LDA ERRMSG,X
ORA #$80
JSR COUT
INX
DEY
BNE ERR1
PLA A Restore error code
JSR PRBYTE Print it
JSR GETKEY Wait for it
JSR MLI Die horribly
DB $65 QUIT command
DW QLIST
* Standard print routine
PRINT1 LDY #0
PLA
STA A1
PLA
STA A1+1
PRINT2 INC A1
BNE PRINT3
INC A1+1
PRINT3 LDA (A1),Y
BEQ PRINT4
ORA #$80
JSR COUT
JMP PRINT2
PRINT4 INC A1
BNE PRINT5
INC A1+1
PRINT5 JMP (A1)
* Print the credits
SCREEN JSR PRINT1
DB 13,13
ASC "*** PRO-FORTH V3.2 ***"
DB 13,13,13
ASC "PRESENTED BY APPLE-DAYTON, INC."
DB 13,13
ASC "PO BOX 1666 FAIRBORN OH 45324-7666"
DB 13,13,13
ASC "COURTESY OF THE FORTH INTEREST GROUP"
DB 13,13
ASC "PO BOX 1105 SAN CARLOS CA 94070"
DB 13,13,13
ASC "ADAPTED FOR PRODOS BY JOHN B. MATTHEWS"
DB 13,13,13
DB 0
RTS
* "Prefix" parameter list
PREFLIST DB 1 Parameter count
DW PREFIX Pathname pointer
* "Open" parameter list
OPENLIST DB 3 Parameter count
ONAME DW FNAME1 File name pointer
DW FBUF1 File #1 buffer addr.
REFNO DB 0 Reference number
* "End of File" parameter list
EOFLIST DB 2 Parameter count
EREF DB 0 Reference number
EPOS DB 0,0,0 File position
* "Read" parameter list
READLIST DB 4 Parameter count
RREF DB 0 Reference number
RDATA DW FSTART Data buffer addr.
RLENGTH DW 0 Requested length
DW 0 Actual length
* "Close" parameter list
CLOSLIST DB 1 Parameter count
CREF DB 0 0 closes all open files
* "Quit aprameter list
QLIST DFB 4,0,0,0,0,0,0
* String storage
ERRMSG STR "PRODOS ERROR: $"
FNAME1 STR "F.DICT"
FNAME2 STR "F.DISK"
PREFIX DS 64,0
NAME: EDASM macro used by FDICT.S
DFB &1
DCI &2
IFEQ >*+3
LST ON
FAIL 2,'PFA=xxFF'
FIN
FDICT.S: Forth dictionary
LST OFF,NOGen,NOWarn,NOVsym,NOAsym,NOExp
MACLIB
ORG $800
SSIZE EQU 1024
NBUF EQU 2
BMAG EQU SSIZE+4*NBUF
BOS EQU $60
TOS EQU $DE
N EQU TOS+8
IP EQU N+8
W EQU IP+3
UP EQU W+2
XSAVE EQU UP+2
KSWL EQU $38
TIBX EQU $0300
MEM EQU $BF00
UAREA EQU MEM-128
DAREA EQU UAREA-BMAG
MLI EQU $BF00
OUTCH EQU $FDED
INCH EQU $FD0C
CROUT EQU $FD8E
MONITOR EQU $FF69
ORIG EQU *
ENTER JMP COLD+2
NOP
REENTER JMP WARM
NOP
DW $0004
DW $5ED2
DW NTOP Last NFA
DW 8 Backspace key
DW UAREA User start
DW TOS Program TOS
DW $1FF Return TOS
DW TIBX Terminal input buffer
DW 31 Name field size max
DW 1 Warning
DW TOP FENCE
DW TOP DP
DW VLO VOC-LINK
DW 0
L22 NAME $83,'LIT'
DW 00
LIT DW *+2
LDA (IP),Y
PHA
INC IP
BNE L30
INC IP+1
L30 LDA (IP),Y
L31 INC IP
BNE PUSH
INC IP+1
PUSH DEX
DEX
PUT STA 1,X
PLA
STA 0,X
NEXT LDY #1
LDA (IP),Y
STA W+1
DEY
LDA (IP),Y
STA W
CLC
LDA IP
ADC #2
STA IP
BCC L54
INC IP+1
L54 JMP W-1
*
L35 NAME $84,'CLIT'
DW L22
CLIT DW *+2
LDA (IP),Y
PHA
TYA
BEQ L31
SETUP ASL A
STA N-1
L63 LDA 0,X
STA N,Y
INX
INY
CPY N-1
BNE L63
LDY #0
RTS
L75 NAME $87,'EXECUTE'
DW L35
EXEC DW *+2
LDA 0,X
STA W
LDA 1,X
STA W+1
INX
INX
JMP W-1
L89 NAME $86,'BRANCH'
DW L75
BRAN DW *+2
CLC
LDA (IP),Y
ADC IP
PHA
INY
LDA (IP),Y
ADC IP+1
STA IP+1
PLA
STA IP
JMP NEXT+2
L107 NAME $87,'0BRANCH'
DW L89
ZBRAN DW *+2
INX
INX
LDA $FE,X
ORA $FF,X
BEQ BRAN+2
BUMP CLC
LDA IP
ADC #2
STA IP
BCC L122
INC IP+1
L122 JMP NEXT
L127 NAME $86,'(LOOP)'
DW L107
PLOOP DW L130
L130 STX XSAVE
TSX
INC $101,X
BNE PL1
INC $102,X
PL1 CLC
LDA $103,X
SBC $101,X
LDA $104,X
SBC $102,X
PL2 LDX XSAVE
ASL A
BCC BRAN+2
PLA
PLA
PLA
PLA
JMP BUMP
L154 NAME $87,'(+LOOP)'
DW L127
PPLOO DW *+2
INX
INX
STX XSAVE
LDA $FF,X
PHA
PHA
LDA $FE,X
TSX
INX
INX
CLC
ADC $101,X
STA $101,X
PLA
ADC $102,X
STA $102,X
PLA
BPL PL1
CLC
LDA $101,X
SBC $103,X
LDA $102,X
SBC $104,X
JMP PL2
L185 NAME $84,'(DO)'
DW L154
PDO DW *+2
LDA 3,X
PHA
LDA 2,X
PHA
LDA 1,X
PHA
LDA 0,X
PHA
POPTWO INX
INX
POP INX
INX
JMP NEXT
L207 NAME $81,'I'
DW L185
I DW R+2
L214 NAME $85,'DIGIT'
DW L207
DIGIT DW *+2
SEC
LDA 2,X
SBC #$30
BMI L234
CMP #$A
BMI L227
SEC
SBC #7
CMP #$A
BMI L234
L227 CMP 0,X
BPL L234
STA 2,X
LDA #1
PHA
TYA
JMP PUT
L234 TYA
PHA
INX
INX
JMP PUT
L243 NAME $86,'(FIND)'
DW L214
PFIND DW *+2
LDA #2
JSR SETUP
STX XSAVE
L249 LDY #0
LDA (N),Y
EOR (N+2),Y
AND #$3F
BNE L281
L254 INY
LDA (N),Y
EOR (N+2),Y
ASL A
BNE L280
BCC L254
LDX XSAVE
DEX
DEX
DEX
DEX
CLC
TYA
ADC #5
ADC N
STA 2,X
LDY #0
TYA
ADC N+1
STA 3,X
STY 1,X
LDA (N),Y
STA 0,X
LDA #1
PHA
JMP PUSH
L280 BCS L284
L281 INY
LDA (N),Y
BPL L281
L284 INY
LDA (N),Y
TAX
INY
LDA (N),Y
STA N+1
STX N
ORA N
BNE L249
LDX XSAVE
LDA #0
PHA
JMP PUSH
L301 NAME $87,'ENCLOSE'
DW L243
ENCL DW *+2
LDA #2
JSR SETUP
TXA
SEC
SBC #8
TAX
STY 3,X
STY 1,X
DEY
DEC N+3
DEC 1,X
L313 INY
BNE LX1
INC N+3
INC 1,X
LX1 LDA (N+2),Y
CMP N
BEQ L313
STY 4,X
LDA 1,X
STA 5,X
L318 LDA (N+2),Y
BNE L327
STY 2,X
STY 0,X
LDA 1,X
STA 3,X
TYA
CMP 4,X
BNE L326
LDA 1,X
CMP 5,X
BNE L326
INC 2,X
BNE L326
INC 3,X
L326 JMP NEXT
L327 PHA
STY 2,X
LDA 1,X
STA 3,X
INY
BNE LX2
INC 1,X
INC N+3
LX2 PLA
CMP N
BNE L318
STY 0,X
JMP NEXT
L337 NAME $84,'EMIT'
DW L301
EMIT DW XEMIT
L344 NAME $83,'KEY'
DW L337
KEY DW XKEY
L351 NAME $89,'?TERMINAL'
DW L344
QTERM DW XQTER
L358 NAME $82,'CR'
DW L351
CR DW XCR
L365 NAME $85,'CMOVE'
DW L358
CMOVE DW *+2
LDA #3
JSR SETUP
L370 CPY N
BNE L375
DEC N+1
BPL L375
JMP NEXT
L375 LDA (N+4),Y
STA (N+2),Y
INY
BNE L370
INC N+5
INC N+3
JMP L370
L386 NAME $82,'U*'
DW L365
USTAR DW *+2
LDA 2,X
STA N
STY 2,X
LDA 3,X
STA N+1
STY 3,X
LDY #16
L396 ASL 2,X
ROL 3,X
ROL 0,X
ROL 1,X
BCC L411
CLC
LDA N
ADC 2,X
STA 2,X
LDA N+1
ADC 3,X
STA 3,X
LDA #0
ADC 0,X
STA 0,X
L411 DEY
BNE L396
JMP NEXT
L418 NAME $82,'U/'
DW L386
USLAS DW *+2
LDA 4,X
LDY 2,X
STY 4,X
ASL A
STA 2,X
LDA 5,X
LDY 3,X
STY 5,X
ROL A
STA 3,X
LDA #16
STA N
L433 ROL 4,X
ROL 5,X
SEC
LDA 4,X
SBC 0,X
TAY
LDA 5,X
SBC 1,X
BCC L444
STY 4,X
STA 5,X
L444 ROL 2,X
ROL 3,X
DEC N
BNE L433
JMP POP
L453 NAME $83,'AND'
DW L418
ANDD DW *+2
LDA 0,X
AND 2,X
PHA
LDA 1,X
AND 3,X
BINARY INX
INX
JMP PUT
L469 NAME $82,'OR'
DW L453
OR DW *+2
LDA 0,X
ORA 2,X
PHA
LDA 1,X
ORA 3,X
INX
INX
JMP PUT
L484 NAME $83,'XOR'
DW L469
XOR DW *+2
LDA 0,X
EOR 2,X
PHA
LDA 1,X
EOR 3,X
INX
INX
JMP PUT
L499 NAME $83,'SP@'
DW L484
SPAT DW *+2
TXA
PUSHOA PHA
LDA #0
JMP PUSH
L511 NAME $83,'SP!'
DW L499
SPSTO DW *+2
LDY #6
LDA (UP),Y
TAX
JMP NEXT
L522 NAME $83,'RP!'
DW L511
RPSTO DW *+2
STX XSAVE
LDY #8
LDA (UP),Y
TAX
TXS
LDX XSAVE
JMP NEXT
L536 NAME $82,';S'
DW L522
SEMIS DW *+2
PLA
STA IP
PLA
STA IP+1
JMP NEXT
L548 NAME $85,'LEAVE'
DW L536
LEAVE DW *+2
STX XSAVE
TSX
LDA $101,X
STA $103,X
LDA $102,X
STA $104,X
LDX XSAVE
JMP NEXT
L563 NAME $82,'>R'
DW L548
TOR DW *+2
LDA 1,X
PHA
LDA 0,X
PHA
INX
INX
JMP NEXT
L577 NAME $82,'R>'
DW L563
RFROM DW *+2
DEX
DEX
PLA
STA 0,X
PLA
STA 1,X
JMP NEXT
L591 NAME $81,'R'
DW L577
R DW *+2
STX XSAVE
TSX
LDA $101,X
PHA
LDA $102,X
LDX XSAVE
JMP PUSH
L605 NAME $82,'0='
DW L591
ZEQU DW *+2
LDA 0,X
ORA 1,X
STY 1,X
BNE L613
INY
L613 STY 0,X
JMP NEXT
L619 NAME $82,'0<'
DW L605
ZLESS DW *+2
ASL 1,X
TYA
ROL A
STY 1,X
STA 0,X
JMP NEXT
DW 0
L632 NAME $81,'+'
DW L619
PLUS DW *+2
CLC
LDA 0,X
ADC 2,X
STA 2,X
LDA 1,X
ADC 3,X
STA 3,X
INX
INX
JMP NEXT
L649 NAME $82,'D+'
DW L632
DPLUS DW *+2
CLC
LDA 2,X
ADC 6,X
STA 6,X
LDA 3,X
ADC 7,X
STA 7,X
LDA 0,X
ADC 4,X
STA 4,X
LDA 1,X
ADC 5,X
STA 5,X
JMP POPTWO
L670 NAME $85,'MINUS'
DW L649
MINUS DW *+2
SEC
TYA
SBC 0,X
STA 0,X
TYA
SBC 1,X
STA 1,X
JMP NEXT
L685 NAME $86,'DMINUS'
DW L670
DMINU DW *+2
SEC
TYA
SBC 2,X
STA 2,X
TYA
SBC 3,X
STA 3,X
JMP MINUS+3
L700 NAME $84,'OVER'
DW L685
OVER DW *+2
LDA 2,X
PHA
LDA 3,X
JMP PUSH
L711 NAME $84,'DROP'
DW L700
DROP DW POP
L718 NAME $84,'SWAP'
DW L711
SWAP DW *+2
LDA 2,X
PHA
LDA 0,X
STA 2,X
LDA 3,X
LDY 1,X
STY 3,X
JMP PUT
L733 NAME $83,'DUP'
DW L718
DUP DW *+2
LDA 0,X
PHA
LDA 1,X
JMP PUSH
L744 NAME $82,'+!'
DW L733
PSTOR DW *+2
CLC
LDA (0,X)
ADC 2,X
STA (0,X)
INC 0,X
BNE L754
INC 1,X
L754 LDA (0,X)
ADC 3,X
STA (0,X)
JMP POPTWO
L762 NAME $86,'TOGGLE'
DW L744
TOGGL DW *+2
LDA (2,X)
EOR 0,X
STA (2,X)
JMP POPTWO
L773 NAME $81,'@'
DW L762
AT DW *+2
LDA (0,X)
PHA
INC 0,X
BNE L781
INC 1,X
L781 LDA (0,X)
JMP PUT
L787 NAME $82,'C@'
DW L773
CAT DW *+2
LDA (0,X)
STA 0,X
STY 1,X
JMP NEXT
L798 NAME $81,'!'
DW L787
STORE DW *+2
LDA 2,X
STA (0,X)
INC 0,X
BNE L806
INC 1,X
L806 LDA 3,X
STA (0,X)
JMP POPTWO
L813 NAME $82,'C!'
DW L798
CSTOR DW *+2
LDA 2,X
STA (0,X)
JMP POPTWO
L823 NAME $C1,':'
DW L813
COLON DW DOCOL
DW QEXEC
DW SCSP
DW CURR
DW AT
DW CON
DW STORE
DW CREAT
DW RBRAC
DW PSCOD
DOCOL LDA IP+1
PHA
LDA IP
PHA
CLC
LDA W
ADC #2
STA IP
TYA
ADC W+1
STA IP+1
JMP NEXT
L853 NAME $C1,';'
DW L823
DW DOCOL
DW QCSP
DW COMP
DW SEMIS
DW SMUDG
DW LBRAC
DW SEMIS
L867 NAME $88,'CONSTANT'
DW L853
CONST DW DOCOL
DW CREAT
DW SMUDG
DW COMMA
DW PSCOD
DOCON LDY #2
LDA (W),Y
PHA
INY
LDA (W),Y
JMP PUSH
L885 NAME $88,'VARIABLE'
DW L867
VAR DW DOCOL
DW CONST
DW PSCOD
DOVAR CLC
LDA W
ADC #2
PHA
TYA
ADC W+1
JMP PUSH
L902 NAME $84,'USER'
DW L885
USER DW DOCOL
DW CONST
DW PSCOD
DOUSE LDY #2
CLC
LDA (W),Y
ADC UP
PHA
LDA #0
ADC UP+1
JMP PUSH
L920 NAME $81,'0'
DW L902
ZERO DW DOCON
DW 0
L928 NAME $81,'1'
DW L920
ONE DW DOCON
DW 1
L936 NAME $81,'2'
DW L928
TWO DW DOCON
DW 2
L944 NAME $81,'3'
DW L936
THREE DW DOCON
DW 3
L952 NAME $82,'BL'
DW L944
BL DW DOCON
DW $20
L960 NAME $83,'C/L'
DW L952
CSLL DW DOCON
DW 64
L968 NAME $85,'FIRST'
DW L960
FIRST DW DOCON
DW DAREA
L976 NAME $85,'LIMIT'
DW L968
LIMIT DW DOCON
DW UAREA
L984 NAME $85,'B/BUF'
DW L976
BBUF DW DOCON
DW SSIZE
L992 NAME $85,'B/SCR'
DW L984
BSCR DW DOCON
DW 1024/SSIZE
L993 NAME $85,'FSIZE'
DW L992
FSIZE DW DOCON
DW 100
L1000 NAME $87,'+ORIGIN'
DW L993
PORIG DW DOCOL
DW LIT,ORIG
DW PLUS
DW SEMIS
L1010 NAME $83,'TIB'
DW L1000
TIB DW DOUSE
DFB $A
L1018 NAME $85,'WIDTH'
DW L1010
WIDTH DW DOUSE
;
DFB $C
L1026 NAME $87,'WARNING'
DW L1018
WARN DW DOUSE
DFB $E
L1034 NAME $85,'FENCE'
DW L1026
FENCE DW DOUSE
DFB $10
L1042 NAME $82,'DP'
DW L1034
DP DW DOUSE
DFB $12
L1050 NAME $88,'VOC-LINK'
DW L1042
VOCL DW DOUSE
DFB $14
L1058 NAME $83,'BLK'
DW L1050
BLK DW DOUSE
DFB $16
L1066 NAME $82,'IN'
DW L1058
IN DW DOUSE
DFB $18
L1074 NAME $83,'OUT'
DW L1066
OUT DW DOUSE
DFB $1A
L1082 NAME $83,'SCR'
DW L1074
SCR DW DOUSE
DFB $1C
L1090 NAME $86,'OFFSET'
DW L1082
OFSET DW DOUSE
DFB $1E
L1098 NAME $87,'CONTEXT'
DW L1090
CON DW DOUSE
DFB $20
L1106 NAME $87,'CURRENT'
DW L1098
CURR DW DOUSE
DFB $22
L1114 NAME $85,'STATE'
DW L1106
STATE DW DOUSE
DFB $24
L1122 NAME $84,'BASE'
DW L1114
BASE DW DOUSE
DFB $26
L1130 NAME $83,'DPL'
DW L1122
DPL DW DOUSE
DFB $28
L1138 NAME $83,'FLD'
DW L1130
FLD DW DOUSE
DFB $2A
L1146 NAME $83,'CSP'
DW L1138
CSP DW DOUSE
DFB $2C
L1154 NAME $82,'R#'
DW L1146
RNUM DW DOUSE
DFB $2E
L1162 NAME $83,'HLD'
DW L1154
HLD DW DOUSE
DFB $30
L1170 NAME $82,'1+'
DW L1162
ONEP DW DOCOL
DW ONE
DW PLUS
DW SEMIS
L1180 NAME $82,'2+'
DW L1170
TWOP DW DOCOL
DW TWO
DW PLUS
DW SEMIS
L1190 NAME $84,'HERE'
DW L1180
HERE DW DOCOL
DW DP
DW AT
DW SEMIS
L1200 NAME $85,'ALLOT'
DW L1190
ALLOT DW DOCOL
DW DP
DW PSTOR
DW SEMIS
L1210 DFB $81,$AC ,
DW L1200
COMMA DW DOCOL
DW HERE
DW STORE
DW TWO
DW ALLOT
DW SEMIS
L1222 DFB $82,'C',$AC C,
DW L1210
CCOMM DW DOCOL
DW HERE
DW CSTOR
DW ONE
DW ALLOT
DW SEMIS
L1234 NAME $81,'-'
DW L1222
SUB DW DOCOL
DW MINUS
DW PLUS
DW SEMIS
L1244 NAME $81,'='
DW L1234
EQUAL DW DOCOL
DW SUB
DW ZEQU
DW SEMIS
L1246 NAME $82,'U<'
DW L1244
ULESS DW *+2
LDA 2,X
CMP 0,X
LDA 3,X
SBC 1,X
TYA
ROL A
EOR #1
STA 2,X
STY 3,X
JMP POP
L1254 NAME $81,'<'
DW L1246
LESS DW *+2
SEC
LDA 2,X
SBC 0,X
LDA 3,X
SBC 1,X
STY 3,X
BVC L1258
EOR #$80
L1258 BPL L1260
INY
L1260 STY 2,X
JMP POP
L1264 NAME $81,'>'
DW L1254
GREAT DW DOCOL
DW SWAP
DW LESS
DW SEMIS
L1274 NAME $83,'ROT'
DW L1264
ROT DW DOCOL
DW TOR
DW SWAP
DW RFROM
DW SWAP
DW SEMIS
L1286 NAME $85,'SPACE'
DW L1274
SPACE DW DOCOL
DW BL
DW EMIT
DW SEMIS
L1296 NAME $84,'-DUP'
DW L1286
DDUP DW DOCOL
DW DUP
DW ZBRAN
L1301 DW $4
DW DUP
L1303 DW SEMIS
L1308 NAME $88,'TRAVERSE'
DW L1296
TRAV DW DOCOL
DW SWAP
L1312 DW OVER
DW PLUS
DW CLIT
DFB $7F
DW OVER
DW CAT
DW LESS
DW ZBRAN
L1320 DW $FFF1
DW SWAP
DW DROP
DW SEMIS
L1328 NAME $86,'LATEST'
DW L1308
LATES DW DOCOL
DW CURR
DW AT
DW AT
DW SEMIS
L1339 NAME $83,'LFA'
DW L1328
LFA DW DOCOL
DW CLIT
DFB 4
DW SUB
DW SEMIS
L1350 NAME $83,'CFA'
DW L1339
CFA DW DOCOL
DW TWO
DW SUB
DW SEMIS
L1360 NAME $83,'NFA'
DW L1350
NFA DW DOCOL
DW CLIT
DFB $5
DW SUB
DW LIT,$FFFF
DW TRAV
DW SEMIS
L1373 NAME $83,'PFA'
DW L1360
PFA DW DOCOL
DW ONE
DW TRAV
DW CLIT
DFB 5
DW PLUS
DW SEMIS
L1386 NAME $84,'!CSP'
DW L1373
SCSP DW DOCOL
DW SPAT
DW CSP
DW STORE
DW SEMIS
L1397 NAME $86,'?ERROR'
DW L1386
QERR DW DOCOL
DW SWAP
DW ZBRAN
L1402 DW 8
DW ERROR
DW BRAN
L1405 DW 4
L1406 DW DROP
L1407 DW SEMIS
L1412 NAME $85,'?COMP'
DW L1397
QCOMP DW DOCOL
DW STATE
DW AT
DW ZEQU
DW CLIT
DFB $11
DW QERR
DW SEMIS
L1426 NAME $85,'?EXEC'
DW L1412
QEXEC DW DOCOL
DW STATE
DW AT
DW CLIT
DFB $12
DW QERR
DW SEMIS
L1439 NAME $86,'?PAIRS'
DW L1426
QPAIR DW DOCOL
DW SUB
DW CLIT
DFB $13
DW QERR
DW SEMIS
L1451 NAME $84,'?CSP'
DW L1439
QCSP DW DOCOL
DW SPAT
DW CSP
DW AT
DW SUB
DW CLIT
DFB $14
DW QERR
DW SEMIS
L1466 NAME $88,'?LOADING'
DW L1451
QLOAD DW DOCOL
DW BLK
DW AT
DW ZEQU
DW CLIT
DFB $16
DW QERR
DW SEMIS
L1480 NAME $87,'COMPILE'
DW L1466
COMP DW DOCOL
DW QCOMP
DW RFROM
DW DUP
DW TWOP
DW TOR
DW AT
DW COMMA
DW SEMIS
L1495 NAME $C1,'['
DW L1480
LBRAC DW DOCOL
DW ZERO
DW STATE
DW STORE
DW SEMIS
L1507 NAME $81,']'
DW L1495
RBRAC DW DOCOL
DW CLIT
DFB $C0
DW STATE
DW STORE
DW SEMIS
L1519 NAME $86,'SMUDGE'
DW L1507
SMUDG DW DOCOL
DW LATES
DW CLIT
DFB $20
DW TOGGL
DW SEMIS
L1531 NAME $83,'HEX'
DW L1519
HEX DW DOCOL
DW CLIT
DFB 16
DW BASE
DW STORE
DW SEMIS
L1543 NAME $87,'DECIMAL'
DW L1531
DECIM DW DOCOL
DW CLIT
DFB 10
DW BASE
DW STORE
DW SEMIS
L1555 NAME $87,'(;CODE)'
DW L1543
PSCOD DW DOCOL
DW RFROM
DW LATES
DW PFA
DW CFA
DW STORE
DW SEMIS
L1568 NAME $C5,';CODE'
DW L1555
DW DOCOL
DW QCSP
DW COMP
DW PSCOD
DW LBRAC
DW SMUDG
DW SEMIS
L1582 NAME $87,'<BUILDS'
DW L1568
BUILD DW DOCOL
DW ZERO
DW CONST
DW SEMIS
L1592 NAME $85,'DOES>'
DW L1582
DOES DW DOCOL
DW RFROM
DW LATES
DW PFA
DW STORE
DW PSCOD
DODOE LDA IP+1
PHA
LDA IP
PHA
LDY #2
LDA (W),Y
STA IP
INY
LDA (W),Y
STA IP+1
CLC
LDA W
ADC #4
PHA
LDA W+1
ADC #0
JMP PUSH
L1622 NAME $85,'COUNT'
DW L1592
COUNT DW DOCOL
DW DUP
DW ONEP
DW SWAP
DW CAT
DW SEMIS
L1634 NAME $84,'TYPE'
DW L1622
TYPE DW DOCOL
DW DDUP
DW ZBRAN
L1639 DW $18
DW OVER
DW PLUS
DW SWAP
DW PDO
L1644 DW I
DW CAT
DW EMIT
DW PLOOP
L1648 DW $FFF8
DW BRAN
L1650 DW $4
L1651 DW DROP
L1652 DW SEMIS
L1657 NAME $89,'-TRAILING'
DW L1634
DTRAI DW *+2
LDY 0,X
LDA 2,X
STA N
LDA 3,X
STA N+1
DTR1 DEY
BMI DTR2
LDA (N),Y
CMP #$20
BEQ DTR1
DTR2 INY
STY 0,X
JMP NEXT
L1685 NAME $84,'(.")'
DW L1657
PDOTQ DW DOCOL
DW R
DW COUNT
DW DUP
DW ONEP
DW RFROM
DW PLUS
DW TOR
DW TYPE
DW SEMIS
L1701 NAME $C2,'."'
DW L1685
DW DOCOL
DW CLIT
DFB $22
DW STATE
DW AT
DW ZBRAN
L1709 DW $14
DW COMP
DW PDOTQ
DW WORD
DW HERE
DW CAT
DW ONEP
DW ALLOT
DW BRAN
L1718 DW $A
L1719 DW WORD
DW HERE
DW COUNT
DW TYPE
L1723 DW SEMIS
L1729 NAME $86,'EXPECT'
DW L1701
EXPEC DW *+2
STX XSAVE
LDA 2,X
STA N
LDA 3,X
STA N+1
JSR $FD6F
CPX #$4D
BCC EXPEC1
LDX #$4C
EXPEC1 LDA #0
STA $200,X
INX
STA $200,X
INX
STA $200,X
INX
STA $200,X
TXA
TAY
EXPEC2 LDA $200,X
AND #$7F
STA (N),Y
DEY
DEX
BPL EXPEC2
LDX XSAVE
JMP POPTWO
L1788 NAME $85,'QUERY'
DW L1729
QUERY DW DOCOL
DW TIB
DW AT
DW CLIT
DFB 80
DW EXPEC
DW ZERO
DW IN
DW STORE
DW SEMIS
L1804 DFB $C1,$80 @
DW L1788
DW DOCOL
DW BLK
DW AT
DW ZBRAN
L1810 DW $2A
DW ONE
DW BLK
DW PSTOR
DW ZERO
DW IN
DW STORE
DW BLK
DW AT
DW ZERO,BSCR
DW USLAS
DW DROP
DW ZEQU
DW ZBRAN
L1824 DW 8
DW QEXEC
DW RFROM
DW DROP
L1828 DW BRAN
L1829 DW 6
L1830 DW RFROM
DW DROP
L1832 DW SEMIS
L1838 NAME $84,'FILL'
DW L1804
FILL DW DOCOL
DW SWAP
DW TOR
DW OVER
DW CSTOR
DW DUP
DW ONEP
DW RFROM
DW ONE
DW SUB
DW CMOVE
DW SEMIS
L1856 NAME $85,'ERASE'
DW L1838
ERASE DW DOCOL
DW ZERO
DW FILL
DW SEMIS
L1866 NAME $86,'BLANKS'
DW L1856
BLANK DW DOCOL
DW BL
DW FILL
DW SEMIS
L1876 NAME $84,'HOLD'
DW L1866
HOLD DW DOCOL
DW LIT,$FFFF
DW HLD
DW PSTOR
DW HLD
DW AT
DW CSTOR
DW SEMIS
L1890 NAME $83,'PAD'
DW L1876
PAD DW DOCOL
DW HERE
DW CLIT
DFB 68
DW PLUS
DW SEMIS
L1902 NAME $84,'WORD'
DW L1890
WORD DW DOCOL
DW BLK
DW AT
DW ZBRAN
L1908 DW $C
DW BLK
DW AT
DW BLOCK
DW BRAN
L1913 DW $6
L1914 DW TIB
DW AT
L1916 DW IN
DW AT
DW PLUS
DW SWAP
DW ENCL
DW HERE
DW CLIT
DFB $22
DW BLANK
DW IN
DW PSTOR
DW OVER
DW SUB
DW TOR
DW R
DW HERE
DW CSTOR
DW PLUS
DW HERE
DW ONEP
DW RFROM
DW CMOVE
DW SEMIS
L1943 NAME $85,'UPPER'
DW L1902
UPPER DW DOCOL
DW OVER
DW PLUS
DW SWAP
DW PDO
L1950 DW I
DW CAT
DW CLIT
DFB $5F
DW GREAT
DW ZBRAN
L1956 DW 09
DW I
DW CLIT
DFB $20
DW TOGGL
L1961 DW PLOOP
L1962 DW $FFEA
DW SEMIS
L1968 NAME $88,'(NUMBER)'
DW L1943
PNUMB DW DOCOL
L1971 DW ONEP
DW DUP
DW TOR
DW CAT
DW BASE
DW AT
DW DIGIT
DW ZBRAN
L1979 DW $2C
DW SWAP
DW BASE
DW AT
DW USTAR
DW DROP
DW ROT
DW BASE
DW AT
DW USTAR
DW DPLUS
DW DPL
DW AT
DW ONEP
DW ZBRAN
L1994 DW 8
DW ONE
DW DPL
DW PSTOR
L1998 DW RFROM
DW BRAN
L2000 DW $FFC6
L2001 DW RFROM
DW SEMIS
L2007 NAME $86,'NUMBER'
DW L1968
NUMBER DW DOCOL
DW ZERO
DW ZERO
DW ROT
DW DUP
DW ONEP
DW CAT
DW CLIT
DFB $2D
DW EQUAL
DW DUP
DW TOR
DW PLUS
DW LIT,$FFFF
L2023 DW DPL
DW STORE
DW PNUMB
DW DUP
DW CAT
DW BL
DW SUB
DW ZBRAN
L2031 DW $15
DW DUP
DW CAT
DW CLIT
DFB $2E
DW SUB
DW ZERO
DW QERR
DW ZERO
DW BRAN
L2041 DW $FFDD
L2042 DW DROP
DW RFROM
DW ZBRAN
L2045 DW 4
DW DMINU
L2047 DW SEMIS
L2052 NAME $85,'-FIND'
DW L2007
DFIND DW DOCOL
DW BL
DW WORD
DW HERE
DW COUNT
DW UPPER
DW HERE
DW CON
DW AT
DW AT
DW PFIND
DW DUP
DW ZEQU
DW ZBRAN
L2068 DW $A
DW DROP
DW HERE
DW LATES
DW PFIND
L2073 DW SEMIS
L2078 NAME $87,'(ABORT)'
DW L2052
PABOR DW DOCOL
DW ABORT
DW SEMIS
L2087 NAME $85,'ERROR'
DW L2078
ERROR DW DOCOL
DW WARN
DW AT
DW ZLESS
DW ZBRAN
DW L2096-*
DW PABOR
L2096 DW HERE
DW COUNT
DW TYPE
DW PDOTQ
STR ' ? '
DW MESS
DW SPSTO
DW DROP,DROP
DW IN
DW AT
DW BLK
DW AT
DW QUIT
DW SEMIS
L2113 NAME $83,'ID.'
DW L2087
IDDOT DW DOCOL
DW PAD
DW CLIT
DFB $20
DW CLIT
DFB $5F
DW FILL
DW DUP
DW PFA
DW LFA
DW OVER
DW SUB
DW PAD
DW SWAP
DW CMOVE
DW PAD
DW COUNT
DW CLIT
DFB $1F
DW ANDD
DW TYPE
DW SPACE
DW SEMIS
L2142 NAME $86,'CREATE'
DW L2113
CREAT DW DOCOL
DW LIT,$A800
DW HERE
DW ULESS
DW TWO
DW QERR
DW DFIND
DW ZBRAN
L2155 DW $0F
DW DROP
DW NFA
DW IDDOT
DW CLIT
DFB 4
DW MESS
DW SPACE
L2163 DW HERE
DW DUP
DW CAT
DW WIDTH
DW AT
DW MIN
DW ONEP
DW ALLOT
DW DP
DW CAT
DW CLIT
DFB $FD
DW EQUAL
DW ALLOT
DW DUP
DW CLIT
DFB $A0
DW TOGGL
DW HERE
DW ONE
DW SUB
DW CLIT
DFB $80
DW TOGGL
DW LATES
DW COMMA
DW CURR
DW AT
DW STORE
DW HERE
DW TWOP
DW COMMA
DW SEMIS
L2200 NAME $C9,'[COMPILE]'
DW L2142
DW DOCOL
DW DFIND
DW ZEQU
DW ZERO
DW QERR
DW DROP
DW CFA
DW COMMA
DW SEMIS
L2216 NAME $C7,'LITERAL'
DW L2200
LITER DW DOCOL
DW STATE
DW AT
DW ZBRAN
L2222 DW 8
DW COMP
DW LIT
DW COMMA
L2226 DW SEMIS
L2232 NAME $C8,'DLITERAL'
DW L2216
DLIT DW DOCOL
DW STATE
DW AT
DW ZBRAN
L2238 DW 8
DW SWAP
DW LITER
DW LITER
L2242 DW SEMIS
L2248 NAME $86,'?STACK'
DW L2232
QSTAC DW DOCOL
DW CLIT
DFB TOS-2
DW SPAT
DW ULESS
DW ONE
DW QERR
DW SPAT
DW CLIT
DFB BOS
DW ULESS
DW CLIT
DFB 7
DW QERR
DW SEMIS
L2269 NAME $89,'INTERPRET'
DW L2248
INTER DW DOCOL
L2272 DW DFIND
DW ZBRAN
L2274 DW $1E
DW STATE
DW AT
DW LESS
DW ZBRAN
L2279 DW $A
DW CFA
DW COMMA
DW BRAN
L2283 DW $6
L2284 DW CFA
DW EXEC
L2286 DW QSTAC
DW BRAN
L2288 DW $1C
L2289 DW HERE
DW NUMBER
DW DPL
DW AT
DW ONEP
DW ZBRAN
L2295 DW 8
DW DLIT
DW BRAN
L2298 DW $6
L2299 DW DROP
DW LITER
L2301 DW QSTAC
L2302 DW BRAN
L2303 DW $FFC2
L2309 NAME $89,'IMMEDIATE'
DW L2269
DW DOCOL
DW LATES
DW CLIT
DFB $40
DW TOGGL
DW SEMIS
L2321 NAME $8A,'VOCABULARY'
DW L2309
DW DOCOL
DW BUILD
DW LIT,$A081
DW COMMA
DW CURR
DW AT
DW CFA
DW COMMA
DW HERE
DW VOCL
DW AT
DW COMMA
DW VOCL
DW STORE
DW DOES
DOVOC DW TWOP
DW CON
DW STORE
DW SEMIS
L2346 NAME $C5,'FORTH'
DW L2321
FORTH DW DODOE
DW DOVOC
DW $A081
XFOR DW NTOP
VLO DW 0
L2357 NAME $8B,'DEFINITIONS'
DW L2346
DEFIN DW DOCOL
DW CON
DW AT
DW CURR
DW STORE
DW SEMIS
L2369 NAME $C1,'('
DW L2357
DW DOCOL
DW CLIT
DFB $29
DW WORD
DW SEMIS
L2381 NAME $84,'QUIT'
DW L2369
QUIT DW DOCOL
DW ZERO
DW BLK
DW STORE
DW LBRAC
L2388 DW RPSTO
DW CR
DW QUERY
DW INTER
DW STATE
DW AT
DW ZEQU
DW ZBRAN
DW L2399-*
DW PDOTQ
STR 'OK'
L2399 DW BRAN
DW L2388-*
DW SEMIS
L2406 NAME $85,'ABORT'
DW L2381
ABORT DW DOCOL
ABORT1 DW SPSTO
DW DECIM
DW DR0
DW CR
DW PDOTQ
STR 'APPLE-DAYTON ProFORTH V3.2'
DW CR
DW FORTH
DW DEFIN
DW QUIT
L2423 NAME $84,'COLD'
DW L2406
COLD DW *+2
LDA #>WARM
STA $3F9
LDA #<WARM
STA $3FA
LDA #>RESET
STA $3F2
LDA #<RESET
STA $3F3
EOR #$A5
STA $3F4
LDA #$4C
STA $3EA
LDA #>MYHOOK
STA $3EB
LDA #<MYHOOK
STA $3EC
LDA ORIG+$0C
STA FORTH+6
LDA ORIG+$0D
STA FORTH+7
LDY #$15
BNE L2433
WARM LDY #$0F
L2433 LDA ORIG+$10
STA UP
LDA ORIG+$11
STA UP+1
L2437 LDA ORIG+$0C,Y
STA (UP),Y
DEY
BPL L2437
LDA #$80 NULL prompt if
STA $33 backspace to far
JSR MYHOOK
LDA #<ABORT1
STA IP+1
LDA #>ABORT1
STA IP
CLD
LDA #$6C
STA W-1
JMP RPSTO+2
RESET LDA $BF98
AND #2
BEQ RESET1
JSR $C300
RESET1 JMP WARM
MYKEY JSR $FF58
CMP #$FF
BNE MYKEY1
LDA #$88 DEL=^H
MYKEY1 RTS
MYHOOK LDA KSWL+1
CMP #<MYKEY
BEQ HOOKED
STA MYKEY+2
LDA KSWL
STA MYKEY+1
LDA #>MYKEY
STA KSWL
LDA #<MYKEY
STA KSWL+1
HOOKED RTS
L2453 NAME $84,'S->D'
DW L2423
STOD DW DOCOL
DW DUP
DW ZLESS
DW MINUS
DW SEMIS
L2464 NAME $82,'+-'
DW L2453
PM DW DOCOL
DW ZLESS
DW ZBRAN
L2469 DW 4
DW MINUS
L2471 DW SEMIS
L2476 NAME $83,'D+-'
DW L2464
DPM DW DOCOL
DW ZLESS
DW ZBRAN
L2481 DW 4
DW DMINU
L2483 DW SEMIS
L2488 NAME $83,'ABS'
DW L2476
ABS DW DOCOL
DW DUP
DW PM
DW SEMIS
L2498 NAME $84,'DABS'
DW L2488
DABS DW DOCOL
DW DUP
DW DPM
DW SEMIS
L2508 NAME $83,'MIN'
DW L2498
MIN DW DOCOL
DW OVER
DW OVER
DW GREAT
DW ZBRAN
L2515 DW 4
DW SWAP
L2517 DW DROP
DW SEMIS
L2523 NAME $83,'MAX'
DW L2508
MAX DW DOCOL
DW OVER
DW OVER
DW LESS
DW ZBRAN
L2530 DW 4
DW SWAP
L2532 DW DROP
DW SEMIS
L2538 NAME $82,'M*'
DW L2523
MSTAR DW DOCOL
DW OVER
DW OVER
DW XOR
DW TOR
DW ABS
DW SWAP
DW ABS
DW USTAR
DW RFROM
DW DPM
DW SEMIS
L2556 NAME $82,'M/'
DW L2538
MSLAS DW DOCOL
DW OVER
DW TOR
DW TOR
DW DABS
DW R
DW ABS
DW USLAS
DW RFROM
DW R
DW XOR
DW PM
DW SWAP
DW RFROM
DW PM
DW SWAP
DW SEMIS
L2579 NAME $81,'*'
DW L2556
STAR DW DOCOL
DW USTAR
DW DROP
DW SEMIS
L2589 NAME $84,'/MOD'
DW L2579
SLMOD DW DOCOL
DW TOR
DW STOD
DW RFROM
DW MSLAS
DW SEMIS
L2601 NAME $81,'/'
DW L2589
SLASH DW DOCOL
DW SLMOD
DW SWAP
DW DROP
DW SEMIS
L2612 NAME $83,'MOD'
DW L2601
MOD DW DOCOL
DW SLMOD
DW DROP
DW SEMIS
L2622 NAME $85,'*/MOD'
DW L2612
SSMOD DW DOCOL
DW TOR
DW MSTAR
DW RFROM
DW MSLAS
DW SEMIS
L2634 NAME $82,'*/'
DW L2622
SSLAS DW DOCOL
DW SSMOD
DW SWAP
DW DROP
DW SEMIS
L2645 NAME $85,'M/MOD'
DW L2634
MSMOD DW DOCOL
DW TOR
DW ZERO
DW R
DW USLAS
DW RFROM
DW SWAP
DW TOR
DW USLAS
DW RFROM
DW SEMIS
L2662 NAME $83,'USE'
DW L2645
USE DW DOVAR
DW DAREA
L2670 NAME $84,'PREV'
DW L2662
PREV DW DOVAR
DW DAREA
L2678 NAME $84,'+BUF'
DW L2670
PBUF DW DOCOL
DW LIT
DW SSIZE+4
DW PLUS
DW DUP
DW LIMIT
DW EQUAL
DW ZBRAN
L2688 DW 6
DW DROP
DW FIRST
L2691 DW DUP
DW PREV
DW AT
DW SUB
DW SEMIS
L2700 NAME $86,'UPDATE'
DW L2678
UPDAT DW DOCOL
DW PREV
DW AT
DW AT
DW LIT,$8000
DW OR
DW PREV
DW AT
DW STORE
DW SEMIS
L2705 NAME $85,'FLUSH'
DW L2700
DW DOCOL
DW LIT,NBUF+1
DW ZERO,PDO
L2835 DW LIT,$7FFF,BUFFR
DW DROP,PLOOP,L2835-*
DW SEMIS
L2716 NAME $8D,'EMPTY-BUFFERS'
DW L2705
DW DOCOL
DW FIRST
DW LIMIT
DW OVER
DW SUB
DW ERASE
DW SEMIS
L2729 NAME $83,'DR0'
DW L2716
DR0 DW DOCOL
DW LIT,0,OFSET,STORE
DW SEMIS
L2740 NAME $83,'DR1'
DW L2729
DR1 DW DOCOL
DW FSIZE,OFSET,STORE
DW SEMIS
L2751 NAME $86,'BUFFER'
DW L2740
BUFFR DW DOCOL
DW USE
DW AT
DW DUP
DW TOR
L2758 DW PBUF
DW ZBRAN
L2760 DW $FFFC
DW USE
DW STORE
DW R
DW AT
DW ZLESS
DW ZBRAN
L2767 DW $14
DW R
DW TWOP
DW R
DW AT
DW LIT,$7FFF
DW ANDD
DW ZERO
DW RSLW
L2776 DW R
DW STORE
DW R
DW PREV
DW STORE
DW RFROM
DW TWOP
DW SEMIS
L2788 NAME $85,'BLOCK'
DW L2751
BLOCK DW DOCOL
DW OFSET
DW AT
DW PLUS
DW TOR
DW PREV
DW AT
DW DUP
DW AT
DW R
DW SUB
DW DUP
DW PLUS
DW ZBRAN
L2804 DW $34
L2805 DW PBUF
DW ZEQU
DW ZBRAN
L2808 DW $14
DW DROP
DW R
DW BUFFR
DW DUP
DW R
DW ONE
DW RSLW
DW TWO
DW SUB
L2818 DW DUP
DW AT
DW R
DW SUB
DW DUP
DW PLUS
DW ZEQU
DW ZBRAN
L2826 DW $FFD6
DW DUP
DW PREV
DW STORE
L2830 DW RFROM
DW DROP
DW TWOP
DW SEMIS
L2838 NAME $86,'(LINE)'
DW L2788
PLINE DW DOCOL
DW TOR
DW CSLL
DW BBUF
DW SSMOD
DW RFROM
DW BSCR
DW STAR
DW PLUS
DW BLOCK
DW PLUS
DW CSLL
DW SEMIS
L2857 NAME $85,'.LINE'
DW L2838
DLINE DW DOCOL
DW PLINE
DW DTRAI
DW TYPE
DW SEMIS
L2868 NAME $87,'MESSAGE'
DW L2857
MESS DW DOCOL
DW WARN
DW AT
DW ZBRAN
DW L2888-*
DW CLIT
DFB 4
DW OFSET
DW AT
DW BSCR
DW SLASH
DW SUB
DW DLINE
DW BRAN
DW L2891-*
L2888 DW PDOTQ
STR 'MSG #'
DW DOT
L2891 DW SEMIS
L2896 NAME $84,'LOAD'
DW L2868
LOAD DW DOCOL
DW BLK
DW AT
DW TOR
DW IN
DW AT
DW TOR
DW ZERO
DW IN
DW STORE
DW BSCR
DW STAR
DW BLK
DW STORE
DW INTER
DW RFROM
DW IN
DW STORE
DW RFROM
DW BLK
DW STORE
DW SEMIS
L2924 NAME $C3,'-->'
DW L2896
DW DOCOL
DW QLOAD
DW ZERO
DW IN
DW STORE
DW BSCR
DW BLK
DW AT
DW OVER
DW MOD
DW SUB
DW BLK
DW PSTOR
DW SEMIS
XEMIT INC UAREA+$1A
BNE XEMIT1
INC UAREA+$1B
XEMIT1 LDA 0,X
STX XSAVE
ORA #$80
JSR OUTCH
LDX XSAVE
JMP POP
XKEY STX XSAVE
JSR INCH
AND #$7F
LDX XSAVE
JMP PUSHOA
XQTER BIT $C000
BPL XQTER2
XQTER1 BIT $C010
BIT $C000
BMI XQTER1
INY
XQTER2 TYA
JMP PUSHOA
XCR STX XSAVE
JSR CROUT
LDX XSAVE
JMP NEXT
L3050 NAME $85,'(R/W)'
DW L2924
PRSLW DW *+2
LDA 0,X
STA SETREF
STA RWREF
LDA #$CA
STA RWCOM
LDA 2,X
BNE PRSLW1
LDA #$CB
STA RWCOM
PRSLW1 LDA 6,X
STA RWBUF
LDA 7,X
STA RWBUF+1
LDA 4,X
ASL A
STA SETPOS+1
LDA 5,X
ROL A
STA SETPOS+2
ASL SETPOS+1
ROL SETPOS+2
JSR MLI
DB $CE Set file position
DW SETLIST
BCS PRSLW2
JSR MLI
RWCOM DB 0 Read/write command
DW RWLIST
PRSLW2 PHA
TXA
CLC
ADC #6
TAX
TYA
JMP PUT
SETLIST DB 2
SETREF DB 0
SETPOS DB 0,0,0
RWLIST DB 4
RWREF DB 0
RWBUF DW 0
RWLEN DW 1024,0
FCLIST DB 1,0
BLIST DFB 4,0,0,0,0,0,0
L3060 NAME $83,'R/W'
DW L3050
RSLW DW DOCOL,TOR,DUP,FSIZE,ULESS
DW ZBRAN,RSLW1-*
DW ONE,BRAN,RSLW2-*
RSLW1 DW FSIZE,SUB,TWO
RSLW2 DW RFROM,SWAP,PRSLW
DW DDUP,ZBRAN,RSLW3-*
DW DOT,LIT,8,ERROR
RSLW3 DW SEMIS
L3202 NAME $C1,"'"
DW L3060
TICK DW DOCOL
DW DFIND
DW ZEQU
DW ZERO
DW QERR
DW DROP
DW LITER
DW SEMIS
L3217 NAME $86,'FORGET'
DW L3202
FORG DW DOCOL
DW TICK,NFA,DUP
DW FENCE,AT,ULESS,CLIT
DFB $15
DW QERR,TOR,VOCL,AT
L3220 DW R,OVER,ULESS
DW ZBRAN,L3225-*
DW FORTH,DEFIN,AT,DUP
DW VOCL,STORE
DW BRAN,$FFFF-24+1 ;L3220-*
L3225 DW DUP,CLIT
DFB 4
DW SUB
L3228 DW PFA,LFA,AT
DW DUP,R,ULESS
DW ZBRAN,$FFFF-14+1 ;L3228-*
DW OVER,TWO,SUB,STORE
DW AT,DDUP,ZEQU
DW ZBRAN,$FFFF-39+1 ;L3225-*
DW RFROM,DP,STORE
DW SEMIS
L3250 NAME $84,'BACK'
DW L3217
BACK DW DOCOL
DW HERE
DW SUB
DW COMMA
DW SEMIS
L3261 NAME $C5,'BEGIN'
DW L3250
DW DOCOL
DW QCOMP
DW HERE
DW ONE
DW SEMIS
L3273 NAME $C5,'ENDIF'
DW L3261
ENDIF DW DOCOL
DW QCOMP
DW TWO
DW QPAIR
DW HERE
DW OVER
DW SUB
DW SWAP
DW STORE
DW SEMIS
L3290 NAME $C4,'THEN'
DW L3273
DW DOCOL
DW ENDIF
DW SEMIS
L3300 NAME $C2,'DO'
DW L3290
DW DOCOL
DW COMP
DW PDO
DW HERE
DW THREE
DW SEMIS
L3313 NAME $C4,'LOOP'
DW L3300
DW DOCOL
DW THREE
DW QPAIR
DW COMP
DW PLOOP
DW BACK
DW SEMIS
DW SEMIS
L3327 NAME $C5,'+LOOP'
DW L3313
DW DOCOL
DW THREE
DW QPAIR
DW COMP
DW PPLOO
DW BACK
DW SEMIS
L3341 NAME $C5,'UNTIL'
DW L3327
UNTIL DW DOCOL
DW ONE
DW QPAIR
DW COMP
DW ZBRAN
DW BACK
DW SEMIS
L3355 NAME $C3,'END'
DW L3341
DW DOCOL
DW UNTIL
DW SEMIS
L3365 NAME $C5,'AGAIN'
DW L3355
AGAIN DW DOCOL
DW ONE
DW QPAIR
DW COMP
DW BRAN
DW BACK
DW SEMIS
L3379 NAME $C6,'REPEAT'
DW L3365
DW DOCOL
DW TOR
DW TOR
DW AGAIN
DW RFROM
DW RFROM
DW TWO
DW SUB
DW ENDIF
DW SEMIS
L3396 NAME $C2,'IF'
DW L3379
IF DW DOCOL
DW COMP
DW ZBRAN
DW HERE
DW ZERO
DW COMMA
DW TWO
DW SEMIS
L3411 NAME $C4,'ELSE'
DW L3396
DW DOCOL
DW TWO
DW QPAIR
DW COMP
DW BRAN
DW HERE
DW ZERO
DW COMMA
DW SWAP
DW TWO
DW ENDIF
DW TWO
DW SEMIS
L3431 NAME $C5,'WHILE'
DW L3411
DW DOCOL
DW IF
DW TWOP
DW SEMIS
L3442 NAME $86,'SPACES'
DW L3431
SPACS DW DOCOL
DW ZERO
DW MAX
DW DDUP
DW ZBRAN
L3449 DW $0C
DW ZERO
DW PDO
L3452 DW SPACE
DW PLOOP
L3454 DW $FFFC
L3455 DW SEMIS
L3460 NAME $82,'<#'
DW L3442
BDIGS DW DOCOL
DW PAD
DW HLD
DW STORE
DW SEMIS
L3471 NAME $82,'#>'
DW L3460
EDIGS DW DOCOL
DW DROP
DW DROP
DW HLD
DW AT
DW PAD
DW OVER
DW SUB
DW SEMIS
L3486 NAME $84,'SIGN'
DW L3471
SIGN DW DOCOL
DW ROT
DW ZLESS
DW ZBRAN
L3492 DW $7
DW CLIT
DFB $2D
DW HOLD
L3496 DW SEMIS
L3501 DFB $81,$A3
DW L3486
DIG DW DOCOL
DW BASE
DW AT
DW MSMOD
DW ROT
DW CLIT
DFB 9
DW OVER
DW LESS
DW ZBRAN
L3513 DW 7
DW CLIT
DFB 7
DW PLUS
L3517 DW CLIT
DFB $30
DW PLUS
DW HOLD
DW SEMIS
L3526 NAME $82,'#S'
DW L3501
DIGS DW DOCOL
L3529 DW DIG
DW OVER
DW OVER
DW OR
DW ZEQU
DW ZBRAN
L3535 DW $FFF4
DW SEMIS
L3541 NAME $83,'D.R'
DW L3526
DDOTR DW DOCOL
DW TOR
DW SWAP
DW OVER
DW DABS
DW BDIGS
DW DIGS
DW SIGN
DW EDIGS
DW RFROM
DW OVER
DW SUB
DW SPACS
DW TYPE
DW SEMIS
L3562 NAME $82,'D.'
DW L3541
DDOT DW DOCOL
DW ZERO
DW DDOTR
DW SPACE
DW SEMIS
L3573 NAME $82,'.R'
DW L3562
DOTR DW DOCOL
DW TOR
DW STOD
DW RFROM
DW DDOTR
DW SEMIS
L3585 DFB $81,$AE
DW L3573
DOT DW DOCOL
DW STOD
DW DDOT
DW SEMIS
L3595 NAME $81,'?'
DW L3585
QUES DW DOCOL
DW AT
DW DOT
DW SEMIS
L3605 NAME $84,'LIST'
DW L3595
LIST DW DOCOL
DW DECIM
DW CR
DW DUP
DW SCR
DW STORE
DW PDOTQ
DFB 6
ASC 'Scr # '
DW DOT
DW CLIT
DFB 16
DW ZERO
DW PDO
L3620 DW CR
DW I
DW THREE
DW DOTR
DW SPACE
DW I
DW SCR
DW AT
DW DLINE
DW PLOOP
L3630 DW $FFEC
DW CR
DW SEMIS
L3637 NAME $85,'INDEX'
DW L3605
DW DOCOL
DW CR
DW ONEP
DW SWAP
DW PDO
L3647 DW CR
DW I
DW THREE
DW DOTR
DW SPACE
DW ZERO
DW I
DW DLINE
DW QTERM
DW ZBRAN
L3657 DW 4
DW LEAVE
L3659 DW PLOOP
L3660 DW $FFE6
DW CLIT
DFB $0D
DW EMIT
DW SEMIS
L3666 NAME $85,'TRIAD'
DW L3637
DW DOCOL
DW THREE
DW SLASH
DW THREE
DW STAR
DW THREE
DW OVER
DW PLUS
DW SWAP
DW PDO
L3681 DW CR
DW I
DW LIST
DW PLOOP
L3685 DW $FFF8
DW CR
DW CLIT
DFB $F
DW MESS
DW CR
DW CLIT
DFB $0D
DW EMIT
DW SEMIS
L3696 NAME $85,'VLIST'
DW L3666
VLIST DW DOCOL
DW CLIT
DFB $80
DW OUT
DW STORE
DW CON
DW AT
DW AT
L3706 DW OUT
DW AT
DW CSLL
DW GREAT
DW ZBRAN
DW L3716-*
DW CR
DW ZERO
DW OUT
DW STORE
L3716 DW DUP
DW IDDOT
DW SPACE
DW SPACE
DW PFA
DW LFA
DW AT
DW DUP
DW ZEQU
DW QTERM
DW OR
DW ZBRAN
DW L3706-*
DW DROP
DW SEMIS
NMON NAME $83,'MON'
DW L3696
MON DW *+2
JMP MONITOR
NMLI NAME $83,'MLI'
DW NMON
DOMLI DW *+2
LDA 0,X
STA MLICOM
LDA 2,X
STA MLICOM+1
LDA 3,X
STA MLICOM+2
JSR MLI
MLICOM DFB 0,0,0
INX
INX
PHA
TYA
JMP PUT
NCALL NAME $84,'CALL'
DW NMLI
CALL DW *+2
STX XSAVE
LDA 0,X
STA CALL1+1
LDA 1,X
STA CALL1+2
LDA 0
LDX 1
LDY 2
CALL1 JSR 0
STY 2
STX 1
STA 0
LDX XSAVE
JMP POP
NTOP NAME $83,'BYE'
DW NCALL
BYE DW *+2
JSR MLI
DB $CC
DW FCLIST
JSR MLI
DFB $65
DW BLIST
TOP DFB 00