3808 lines
98 KiB
NASM
3808 lines
98 KiB
NASM
;
|
||
; Through the courtesy of
|
||
;
|
||
; FORTH INTEREST GROUP
|
||
; P.O. BOX 2154
|
||
; OAKLAND, CALIFORNIA
|
||
; 94621
|
||
;
|
||
;
|
||
; Release 1.k0010
|
||
;
|
||
; with compiler security
|
||
; and
|
||
; variable length names
|
||
;
|
||
; Further distribution need not include this notice.
|
||
; The FIG installation Manual is required as it contains
|
||
; the model of FORTH and glossary of the system.
|
||
; Might be available from FIG at the above address for $95.00 postpaid.
|
||
;
|
||
; Translated from the FIG model by W.F. Ragsdale with input-
|
||
; output given for the Rockwell System-65. Transportation to
|
||
; other systems requires only the alteration of :
|
||
; XEMIT, XKEY, XQTER, XCR, AND RSLW
|
||
;
|
||
; Equates giving memory assignments, machine
|
||
; registers, and disk parameters.
|
||
;
|
||
SSIZE = 128 ; sector size in bytes
|
||
NBUF = 8 ; number of buffers desired in RAM
|
||
; (SSIZE*NBUF >= 1024 bytes)
|
||
SECTR = 800 ; sector per drive
|
||
; forcing high drive to zero
|
||
SECTL = 1600 ; sector limit for two drives
|
||
; of 800 per drive.
|
||
BMAG = 1056 ; total buffer magnitude, in bytes
|
||
; expressed by SSIZE+4*NBUF
|
||
;
|
||
BOS = $20 ; bottom of data stack, in zero-page.
|
||
TOS = $9F ; top of data stack, in zero-page.
|
||
N = TOS+8 ; scratch workspace.
|
||
IP = N+8 ; interpretive pointer.
|
||
W = IP+3 ; code field pointer.
|
||
UP = W+2 ; user area pointer.
|
||
XSAVE = UP+2 ; temporary for X register.
|
||
;
|
||
TIBX = $0100 ; terminal input buffer of 84 bytes.
|
||
ORIG = $0400 ; origin of FORTH's Dictionary.
|
||
MEM = $3F00 ; top of assigned memory+1 byte.
|
||
UAREA = MEM-128 ; 128 bytes of user area
|
||
DAREA = UAREA-BMAG ; disk buffer space.
|
||
;
|
||
; Monitor calls for terminal support
|
||
;
|
||
OUTCH = cout ; output one ASCII char. to term.
|
||
INCH = cin ; input one ASCII char. to term.
|
||
TCR = crout ; terminal return and line feed.
|
||
;
|
||
; From DAREA downward to the top of the dictionary is free
|
||
; space where the user's applications are compiled.
|
||
;
|
||
; Boot up parameters. This area provides jump vectors
|
||
; to Boot up code, and parameters describing the system.
|
||
;
|
||
;
|
||
; .ORG ORIG
|
||
;
|
||
; User cold entry point
|
||
|
||
|
||
ENTER NOP ; Vector to COLD entry
|
||
JMP COLD+2 ;
|
||
REENTR NOP ; User Warm entry point
|
||
JMP WARM ; Vector to WARM entry
|
||
.WORD $0004 ; 6502 in radix-36
|
||
.WORD $5ED2 ;
|
||
.WORD NTOP ; Name address of MON
|
||
.WORD $7F ; Backspace Character
|
||
.WORD UAREA ; Initial User Area
|
||
.WORD TOS ; Initial Top of Stack
|
||
.WORD $1FF ; Initial Top of Return Stack
|
||
.WORD TIBX ; Initial terminal input buffer
|
||
;
|
||
;
|
||
.WORD 31 ; Initial name field width
|
||
.WORD 1 ; 0=nod disk, 1=disk
|
||
.WORD TOP ; Initial fence address
|
||
.WORD TOP ; Initial top of dictionary
|
||
.WORD VL0 ; Initial Vocabulary link ptr.
|
||
;
|
||
; The following offset adjusts all code fields to avoid an
|
||
; address ending $XXFF. This must be checked and altered on
|
||
; any alteration , for the indirect jump at W-1 to operate !
|
||
;
|
||
; .ORG *+2 ;.ORIGIN *+2
|
||
nop
|
||
nop
|
||
;
|
||
;
|
||
; LIT
|
||
; SCREEN 13 LINE 1
|
||
;
|
||
L22 .BYTE $83,"LI",$D4 ; <--- name field
|
||
; <----- link field
|
||
.WORD 00 ; last link marked by zero
|
||
LIT .WORD *+2 ; <----- code address field
|
||
LDA (IP),Y ; <----- start of parameter field
|
||
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 is the address interpreter that moves from machine
|
||
; level word to word.
|
||
;
|
||
NEXT LDY #1
|
||
LDA (IP),Y ; Fetch code field address pointed
|
||
STA W+1 ; to by IP.
|
||
DEY
|
||
LDA (IP),Y
|
||
STA W
|
||
CLC ; Increment IP by two.
|
||
LDA IP
|
||
ADC #2
|
||
STA IP
|
||
BCC L54
|
||
INC IP+1
|
||
L54 JMP W-1 ; Jump to an indirect jump (W) which
|
||
; vectors to code pointed to by a code
|
||
; field.
|
||
;
|
||
; CLIT pushes the next inline byte to data stack
|
||
;
|
||
L35 .BYTE $84,"CLI",$D4
|
||
.WORD L22 ; Link to LIT
|
||
CLIT .WORD *+2
|
||
LDA (IP),Y
|
||
PHA
|
||
TYA
|
||
BEQ L31 ; a forced branch into LIT
|
||
|
||
;
|
||
;
|
||
SETUP ASL
|
||
STA N-1
|
||
L63 LDA 0,X
|
||
STA N,Y
|
||
INX
|
||
INY
|
||
CPY N-1
|
||
BNE L63
|
||
LDY #0
|
||
RTS
|
||
;
|
||
; EXCECUTE
|
||
; SCREEN 14 LINE 11
|
||
;
|
||
L75 .BYTE $87,"EXECUT",$C5
|
||
.WORD L35 ; link to CLIT
|
||
EXEC .WORD *+2
|
||
LDA 0,X
|
||
STA W
|
||
LDA 1,X
|
||
STA W+1
|
||
INX
|
||
INX
|
||
JMP W-1 ; to JMP (W) in z-page
|
||
;
|
||
; BRANCH
|
||
; SCREEN 15 LINE 11
|
||
;
|
||
L89 .BYTE $86,"BRANC",$C8
|
||
.WORD L75 ; link to EXCECUTE
|
||
BRAN .WORD *+2
|
||
CLC
|
||
LDA (IP),Y
|
||
ADC IP
|
||
PHA
|
||
INY
|
||
LDA (IP),Y
|
||
ADC IP+1
|
||
STA IP+1
|
||
PLA
|
||
STA IP
|
||
JMP NEXT +2
|
||
;
|
||
; 0BRANCH
|
||
; SCREEN 15 LINE 6
|
||
;
|
||
L107 .BYTE $87,"0BRANC",$C8
|
||
.WORD L89 ; link to BRANCH
|
||
ZBRAN .WORD *+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
|
||
;
|
||
; (LOOP)
|
||
; SCREEN 16 LINE 1
|
||
;
|
||
L127 .BYTE $86,"(LOOP",$A9
|
||
.WORD L107 ; link to 0BRANCH
|
||
PLOOP .WORD 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
|
||
BCC BRAN+2
|
||
PLA
|
||
PLA
|
||
PLA
|
||
PLA
|
||
JMP BUMP
|
||
;
|
||
; (+LOOP)
|
||
; SCREEN 16 LINE 8
|
||
;
|
||
L154 .BYTE $87,"(+LOOP",$A9
|
||
.WORD L127 ; link to (loop)
|
||
PPLOO .WORD *+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
|
||
;
|
||
; (DO)
|
||
; SCREEN 17 LINE 2
|
||
;
|
||
L185 .BYTE $84,"(DO",$A9
|
||
.WORD L154 ; link to (+LOOP)
|
||
PDO .WORD *+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
|
||
;
|
||
; I
|
||
; SCREEN 17 LINE 9
|
||
;
|
||
L207 .BYTE $81,$C9
|
||
.WORD L185 ; link to (DO)
|
||
I .WORD R+2 ; share the code for R
|
||
;
|
||
; DIGIT
|
||
; SCREEN 18 LINE 1
|
||
;
|
||
L214 .BYTE $85,"DIGI",$D4
|
||
.WORD L207 ; link to I
|
||
DIGIT .WORD *+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 ; exit true with converted value
|
||
L234 TYA
|
||
PHA
|
||
INX
|
||
INX
|
||
JMP PUT ; exit false with bad conversion
|
||
;
|
||
; (FIND)
|
||
; SCREEN 19 LINE 1
|
||
;
|
||
L243 .BYTE $86,"(FIND",$A9
|
||
.WORD L214 ; Link to DIGIT
|
||
PFIND .WORD *+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
|
||
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 ; exit false upon reading null link
|
||
;
|
||
; ENCLOSE
|
||
; SCREEN 20 LINE 1
|
||
;
|
||
L301 .BYTE $87,"ENCLOS",$C5
|
||
.WORD L243 ; link to (FIND)
|
||
ENCL .WORD *+2
|
||
LDA #2
|
||
JSR SETUP
|
||
TXA
|
||
SEC
|
||
SBC #8
|
||
TAX
|
||
STY 3,X
|
||
STY 1,X
|
||
DEY
|
||
L313 INY
|
||
LDA (N+2),Y
|
||
CMP N
|
||
BEQ L313
|
||
STY 4,X
|
||
L318 LDA (N+2),Y
|
||
BNE L327
|
||
STY 2,X
|
||
STY 0,X
|
||
TYA
|
||
CMP 4,X
|
||
BNE L326
|
||
INC 2,X
|
||
L326 JMP NEXT
|
||
L327 STY 2,X
|
||
INY
|
||
CMP N
|
||
BNE L318
|
||
STY 0,X
|
||
JMP NEXT
|
||
;
|
||
; EMIT
|
||
; SCREEN 21 LINE 5
|
||
;
|
||
L337 .BYTE $84,"EMI",$D4
|
||
.WORD L301 ; link to ENCLOSE
|
||
EMIT .WORD XEMIT ; Vector to code for KEY
|
||
;
|
||
; KEY
|
||
; SCREEN 21 LINE 7
|
||
;
|
||
L344 .BYTE $83,"KE",$D9
|
||
.WORD L337 ; link to EMIT
|
||
KEY .WORD XKEY ; Vector to code for KEY
|
||
;
|
||
; ?TERMINAL
|
||
; SCREEN 21 LINE 9
|
||
;
|
||
L351 .BYTE $89,"?TERMINA",$CC
|
||
.WORD L344 ; link to KEY
|
||
QTERM .WORD XQTER ; Vector to code for ?TERMINAL
|
||
;
|
||
;
|
||
;
|
||
;
|
||
;
|
||
; CR
|
||
; SCREEN 21 LINE 11
|
||
;
|
||
L358 .BYTE $82,"C",$D2
|
||
.WORD L351 ; link to ?TERMINAL
|
||
CR .WORD XCR ; Vector to code for CR
|
||
;
|
||
; CMOVE
|
||
; SCREEN 22 LINE 1
|
||
;
|
||
L365 .BYTE $85,"CMOV",$C5
|
||
.WORD L358 ; link to CR
|
||
CMOVE .WORD *+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
|
||
;
|
||
; U*
|
||
; SCREEN 23 LINE 1
|
||
;
|
||
L386 .BYTE $82,"U",$AA
|
||
.WORD L365 ; link to CMOVE
|
||
USTAR .WORD *+2
|
||
; LDA 2,X
|
||
; STA N
|
||
; STY 2,X
|
||
; LDA 3,X
|
||
; STA N+1
|
||
; STY 3,X
|
||
; LDY #16 ; for 16 bits
|
||
;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 ; bug here as high byte of this high word does not
|
||
; ADC 0,X ; get incremented when 0,x rolls over to $00
|
||
; STA 0,X
|
||
;
|
||
;L411 DEY
|
||
; BNE L396
|
||
; JMP NEXT
|
||
|
||
;
|
||
; replacement code from 6502.org - http://forum.6502.org/viewtopic.php?t=689
|
||
;
|
||
LDA #0 ; in some implementations TYA can be used since NEXT leaves Y=$00
|
||
STA N
|
||
LDY #16
|
||
LSR 3,X
|
||
ROR 2,X
|
||
L1 BCC L2
|
||
CLC
|
||
sta N+1 ; PHA
|
||
LDA N
|
||
ADC 0,X
|
||
STA N
|
||
lda N+1 ; PLA
|
||
ADC 1,X
|
||
L2 ROR
|
||
ROR N
|
||
ROR 3,X
|
||
ROR 2,X
|
||
DEY
|
||
BNE L1
|
||
STA 1,X
|
||
LDA N
|
||
STA 0,X
|
||
JMP NEXT
|
||
|
||
;
|
||
; U/
|
||
; SCREEN 24 LINE 1
|
||
;
|
||
L418 .BYTE $82,"U",$AF
|
||
.WORD L386 ; link to U*
|
||
USLAS .WORD *+2
|
||
; LDA 4,X ; bugged code replaced - dr
|
||
; LDY 2,X
|
||
; STY 4,X
|
||
; ASL
|
||
; STA 2,X
|
||
; LDA 5,X
|
||
; LDY 3,X
|
||
; STY 5,X
|
||
; ROL
|
||
; 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
|
||
|
||
;
|
||
; updated code from 6502.org - source code repository 32bit division
|
||
;
|
||
SEC ; Modified code - dr
|
||
LDA 2,X ; Subtract hi cell of dividend by
|
||
SBC 0,X ; divisor to see if there's an overflow condition.
|
||
LDA 3,X
|
||
SBC 1,X
|
||
BCS oflow ; Branch if /0 or overflow.
|
||
LDA #$11 ; Loop 17x.
|
||
STA N ; Use N for loop counter.
|
||
loopp ROL 4,X ; Rotate dividend lo cell left one bit.
|
||
ROL 5,X
|
||
DEC N ; Decrement loop counter.
|
||
BEQ endd ; If we're done, then branch to end.
|
||
ROL 2,X ; Otherwise rotate dividend hi cell left one bit.
|
||
ROL 3,X
|
||
STZ N+1
|
||
ROL N+1 ; Rotate the bit carried out of above into N+1.
|
||
SEC
|
||
LDA 2,X ; Subtract dividend hi cell minus divisor.
|
||
SBC 0,X
|
||
STA N+2 ; Put result temporarily in N+2 (lo byte)
|
||
LDA 3,X
|
||
SBC 1,X
|
||
TAY ; and Y (hi byte).
|
||
LDA N+1 ; Remember now to bring in the bit carried out above.
|
||
SBC #$00
|
||
BCC loopp
|
||
LDA N+2 ; If that didn't cause a borrow,
|
||
STA 2,X ; make the result from above to
|
||
STY 3,X ; be the new dividend hi cell
|
||
BRA loopp ; and then brach up. (NMOS 6502 can use BCS here.)
|
||
oflow LDA #$FF ; If overflow or /0 condition found,
|
||
STA 2,X ; just put FFFF in both the remainder
|
||
STA 3,X
|
||
STA 4,X ; and the quotient.
|
||
STA 5,X
|
||
endd INX ; When you're done, show one less cell on data stack,
|
||
INX ; (INX INX is exactly what the Forth word DROP does)
|
||
JMP SWAP+2 ; and swap the two top cells to put quotient on top.
|
||
|
||
;
|
||
; AND
|
||
; SCREEN 25 LINE 2
|
||
;
|
||
L453 .BYTE $83,"AN",$C4
|
||
.WORD L418 ; link to U/
|
||
ANDD .WORD *+2
|
||
LDA 0,X
|
||
AND 2,X
|
||
PHA
|
||
LDA 1,X
|
||
AND 3,X
|
||
;
|
||
BINARY INX
|
||
INX
|
||
JMP PUT
|
||
;
|
||
; OR
|
||
; SCREEN 25 LINE 7
|
||
;
|
||
L469 .BYTE $82,"O",$D2
|
||
.WORD L453 ; link to AND
|
||
OR .WORD *+2
|
||
LDA 0,X
|
||
ORA 2,X
|
||
PHA
|
||
LDA 1,X
|
||
ORA 3,X
|
||
INX
|
||
INX
|
||
JMP PUT
|
||
;
|
||
; XOR
|
||
; SCREEN 25 LINE 11
|
||
;
|
||
L484 .BYTE $83,"XO",$D2
|
||
.WORD L469 ; link to OR
|
||
XOR .WORD *+2
|
||
LDA 0,X
|
||
EOR 2,X
|
||
PHA
|
||
LDA 1,X
|
||
EOR 3,X
|
||
INX
|
||
INX
|
||
JMP PUT
|
||
;
|
||
; SP@
|
||
; SCREEN 26 LINE 1
|
||
;
|
||
L499 .BYTE $83,"SP",$C0
|
||
.WORD L484 ; link to XOR
|
||
SPAT .WORD *+2
|
||
TXA
|
||
;
|
||
PUSHOA PHA
|
||
LDA #0
|
||
JMP PUSH
|
||
;
|
||
; SP!
|
||
; SCREEN 26 LINE 5
|
||
;
|
||
;
|
||
L511 .BYTE $83,"SP",$A1
|
||
.WORD L499 ; link to SP@
|
||
SPSTO .WORD *+2
|
||
LDY #6
|
||
LDA (UP),Y ; load data stack pointer (X reg) from
|
||
TAX ; silent user variable S0.
|
||
JMP NEXT
|
||
;
|
||
; RP!
|
||
; SCREEN 26 LINE 8
|
||
;
|
||
L522 .BYTE $83,"RP",$A1
|
||
.WORD L511 ; link to SP!
|
||
RPSTO .WORD *+2
|
||
STX XSAVE ; load return stack pointer (machine
|
||
LDY #8 ; stack pointer) from silent user
|
||
LDA (UP),Y ; VARIABLE R0
|
||
TAX
|
||
TXS
|
||
LDX XSAVE
|
||
JMP NEXT
|
||
;
|
||
; ;S
|
||
; SCREEN 26 LINE 12
|
||
;
|
||
L536 .BYTE $82,";",$D3
|
||
.WORD L522 ; link to RP!
|
||
SEMIS .WORD *+2
|
||
PLA
|
||
STA IP
|
||
PLA
|
||
STA IP+1
|
||
JMP NEXT
|
||
;
|
||
; LEAVE
|
||
; SCREEN 27 LINE 1
|
||
;
|
||
L548 .BYTE $85,"LEAV",$C5
|
||
.WORD L536 ; link to ;S
|
||
LEAVE .WORD *+2
|
||
STX XSAVE
|
||
TSX
|
||
LDA $101,X
|
||
STA $103,X
|
||
LDA $102,X
|
||
STA $104,X
|
||
LDX XSAVE
|
||
JMP NEXT
|
||
;
|
||
; >R
|
||
; SCREEN 27 LINE 5
|
||
;
|
||
L563 .BYTE $82,">",$D2
|
||
.WORD L548 ; link to LEAVE
|
||
TOR .WORD *+2
|
||
LDA 1,X ; move high byte
|
||
PHA
|
||
LDA 0,X ; then low byte
|
||
PHA ; to return stack
|
||
INX
|
||
INX ; popping off data stack
|
||
JMP NEXT
|
||
;
|
||
; R>
|
||
; SCREEN 27 LINE 8
|
||
;
|
||
L577 .BYTE $82,"R",$BE
|
||
.WORD L563 ; link to >R
|
||
RFROM .WORD *+2
|
||
DEX ; make room on data stack
|
||
DEX
|
||
PLA ; high byte
|
||
STA 0,X
|
||
PLA ; then low byte
|
||
STA 1,X ; restored to data stack
|
||
JMP NEXT
|
||
;
|
||
; R
|
||
; SCREEN 27 LINE 11
|
||
;
|
||
L591 .BYTE $81,$D2
|
||
.WORD L577 ; link to R>
|
||
R .WORD *+2
|
||
STX XSAVE
|
||
TSX ; address return stack
|
||
LDA $101,X ; copy bottom value
|
||
PHA ; to data stack
|
||
LDA $102,X
|
||
LDX XSAVE
|
||
JMP PUSH
|
||
;
|
||
; 0=
|
||
; SCREEN 28 LINE 2
|
||
;
|
||
L605 .BYTE $82,"0",$BD
|
||
.WORD L591 ; link to R
|
||
ZEQU .WORD *+2
|
||
LDA 1,X ; Corrected from FD3/2 p69
|
||
STY 1,X
|
||
ORA 0,X
|
||
BNE L613
|
||
INY
|
||
L613 STY 0,X
|
||
JMP NEXT
|
||
;
|
||
; 0<
|
||
; SCREEN 28 LINE 6
|
||
;
|
||
L619 .BYTE $82,"0",$BC
|
||
.WORD L605 ; link to 0=
|
||
ZLESS .WORD *+2
|
||
ASL 1,X
|
||
TYA
|
||
ROL
|
||
STY 1,X
|
||
STA 0,X
|
||
JMP NEXT
|
||
;
|
||
; +
|
||
; SCREEN 29 LINE 1
|
||
;
|
||
L632 .BYTE $81,$AB
|
||
.WORD L619 ; link to V-ADJ
|
||
PLUS .WORD *+2
|
||
CLC
|
||
LDA 0,X
|
||
ADC 2,X
|
||
STA 2,X
|
||
LDA 1,X
|
||
ADC 3,X
|
||
STA 3,X
|
||
INX
|
||
INX
|
||
JMP NEXT
|
||
;
|
||
; D+
|
||
; SCREEN 29 LINE 4
|
||
;
|
||
L649 .BYTE $82,"D",$AB
|
||
.WORD L632 ; LINK TO +
|
||
DPLUS .WORD *+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
|
||
;
|
||
; MINUS
|
||
; SCREEN 29 LINE 9
|
||
;
|
||
L670 .BYTE $85,"MINU",$D3
|
||
.WORD L649 ; link to D+
|
||
MINUS .WORD *+2
|
||
SEC
|
||
TYA
|
||
SBC 0,X
|
||
STA 0,X
|
||
TYA
|
||
SBC 1,X
|
||
STA 1,X
|
||
JMP NEXT
|
||
;
|
||
; DMINUS
|
||
; SCREEN 29 LINE 12
|
||
;
|
||
L685 .BYTE $86,"DMINU",$D3
|
||
.WORD L670 ; link to MINUS
|
||
DMINU .WORD *+2
|
||
SEC
|
||
TYA
|
||
SBC 2,X
|
||
STA 2,X
|
||
TYA
|
||
SBC 3,X
|
||
STA 3,X
|
||
JMP MINUS+3
|
||
;
|
||
; OVER
|
||
; SCREEN 30 LINE 1
|
||
;
|
||
L700 .BYTE $84,"OVE",$D2
|
||
.WORD L685 ; link to DMINUS
|
||
OVER .WORD *+2
|
||
LDA 2,X
|
||
PHA
|
||
LDA 3,X
|
||
JMP PUSH
|
||
;
|
||
; DROP
|
||
; SCREEN 30 LINE 4
|
||
;
|
||
L711 .BYTE $84,"DRO",$D0
|
||
.WORD L700 ; link to OVER
|
||
DROP .WORD POP
|
||
;
|
||
; SWAP
|
||
; SCREEN 30 LINE 8
|
||
;
|
||
L718 .BYTE $84,"SWA",$D0
|
||
.WORD L711 ; link to DROP
|
||
SWAP .WORD *+2
|
||
LDA 2,X
|
||
PHA
|
||
LDA 0,X
|
||
STA 2,X
|
||
LDA 3,X
|
||
LDY 1,X
|
||
STY 3,X
|
||
JMP PUT
|
||
;
|
||
; DUP
|
||
; SCREEN 30 LINE 21
|
||
;
|
||
L733 .BYTE $83,"DU",$D0
|
||
.WORD L718 ; link to SWAP
|
||
DUP .WORD *+2
|
||
LDA 0,X
|
||
PHA
|
||
LDA 1,X
|
||
JMP PUSH
|
||
;
|
||
; +!
|
||
; SCREEN 31 LINE 2
|
||
;
|
||
L744 .BYTE $82,"+",$A1
|
||
.WORD L733 ; link to DUP
|
||
PSTOR .WORD *+2
|
||
CLC
|
||
LDA (0,X) ; fetch 16 bit value addressed by
|
||
ADC 2,X ; bottom of stack, adding to
|
||
STA (0,X) ; second item on stack, and return
|
||
INC 0,X ; to memory
|
||
BNE L754
|
||
INC 1,X
|
||
L754 LDA (0,X)
|
||
ADC 3,X
|
||
STA (0,X)
|
||
JMP POPTWO
|
||
;
|
||
; TOGGLE
|
||
; SCREEN 31 LINE 7
|
||
;
|
||
L762 .BYTE $81,"TOGGL",$C5
|
||
.WORD L744 ; link to +!
|
||
TOGGL .WORD *+2
|
||
LDA (2,X) ; complement bits in memory address
|
||
EOR 0,X ; second on stack, by pattern on
|
||
STA (2,X) ; bottom of stack.
|
||
JMP POPTWO
|
||
;
|
||
; @
|
||
; SCREEN 32 LINE 1
|
||
;
|
||
L773 .BYTE $81,$C0
|
||
.WORD L762 ; link to TOGGLE
|
||
AT .WORD *+2
|
||
LDA (0,X)
|
||
PHA
|
||
INC 0,X
|
||
BNE L781
|
||
INC 1,X
|
||
L781 LDA (0,X)
|
||
JMP PUT
|
||
;
|
||
; C@
|
||
; SCREEN 32 LINE 5
|
||
;
|
||
L787 .BYTE $82,"C",$C0
|
||
.WORD L773 ; link to @
|
||
CAT .WORD *+2
|
||
LDA (0,X) ; fetch byte addressed by bottom of
|
||
STA 0,X ; stack to stack, zeroing the high
|
||
STY 1,X ; byte
|
||
JMP NEXT
|
||
;
|
||
; !
|
||
; SCREEN 32 LINE 8
|
||
;
|
||
L798 .BYTE $81,$A1
|
||
.WORD L787 ; link to C@
|
||
STORE .WORD *+2
|
||
LDA 2,X
|
||
STA (0,X) ; store second 16bit value on stack
|
||
INC 0,X ; to memory as addressed by bottom
|
||
BNE L806 ; of stack.
|
||
INC 1,X
|
||
L806 LDA 3,X
|
||
STA (0,X)
|
||
JMP POPTWO
|
||
;
|
||
; C!
|
||
; SCREEN 32 LINE 12
|
||
;
|
||
L813 .BYTE $82,"C",$A1
|
||
.WORD L798 ; link to !
|
||
CSTOR .WORD *+2
|
||
LDA 2,X
|
||
STA (0,X)
|
||
JMP POPTWO
|
||
;
|
||
; :
|
||
; SCREEN 33 LINE 2
|
||
;
|
||
L823 .BYTE $C1,$BA
|
||
.WORD L813 ; link to C!
|
||
COLON .WORD DOCOL
|
||
.WORD QEXEC
|
||
.WORD SCSP
|
||
.WORD CURR
|
||
.WORD AT
|
||
.WORD CON
|
||
.WORD STORE
|
||
.WORD CREAT
|
||
.WORD RBRAC
|
||
.WORD 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
|
||
;
|
||
; ;
|
||
; SCREEN 33 LINE 9
|
||
;
|
||
L853 .BYTE $C1,$BB
|
||
.WORD L823 ; link to :
|
||
.WORD DOCOL
|
||
.WORD QCSP
|
||
.WORD COMP
|
||
.WORD SEMIS
|
||
.WORD SMUDG
|
||
.WORD LBRAC
|
||
.WORD SEMIS
|
||
;
|
||
; CONSTANT
|
||
; SCREEN 34 LINE 1
|
||
;
|
||
L867 .BYTE $88,"CONSTAN",$D4
|
||
.WORD L853 ; link to ;
|
||
CONST .WORD DOCOL
|
||
.WORD CREAT
|
||
.WORD SMUDG
|
||
.WORD COMMA
|
||
.WORD PSCOD
|
||
;
|
||
DOCON LDY #2
|
||
LDA (W),Y
|
||
PHA
|
||
INY
|
||
LDA (W),Y
|
||
JMP PUSH
|
||
;
|
||
; VARIABLE
|
||
; SCREEN 34 LINE 5
|
||
;
|
||
L885 .BYTE $88,"VARIABL",$C5
|
||
.WORD L867 ; link to CONSTANT
|
||
VAR .WORD DOCOL
|
||
.WORD CONST
|
||
.WORD PSCOD
|
||
;
|
||
DOVAR CLC
|
||
LDA W
|
||
ADC #2
|
||
PHA
|
||
TYA
|
||
ADC W+1
|
||
JMP PUSH
|
||
;
|
||
; USER
|
||
; SCREEN 34 LINE 10
|
||
;
|
||
L902 .BYTE $84,"USE",$D2
|
||
.WORD L885 ; link to VARIABLE
|
||
USER .WORD DOCOL
|
||
.WORD CONST
|
||
.WORD PSCOD
|
||
;
|
||
DOUSE LDY #2
|
||
CLC
|
||
LDA (W),Y
|
||
ADC UP
|
||
PHA
|
||
LDA #0
|
||
ADC UP+1
|
||
JMP PUSH
|
||
;
|
||
; 0
|
||
; SCREEN 35 LINE 2
|
||
;
|
||
L920 .BYTE $81,$B0
|
||
.WORD L902 ; link to USER
|
||
ZERO .WORD DOCON
|
||
.WORD 0
|
||
;
|
||
; 1
|
||
; SCREEN 35 LINE 2
|
||
;
|
||
L928 .BYTE $81,$B1
|
||
.WORD L920 ; link to 0
|
||
ONE .WORD DOCON
|
||
.WORD 1
|
||
;
|
||
; 2
|
||
; SCREEN 35 LINE 3
|
||
;
|
||
L936 .BYTE $81,$B2
|
||
.WORD L928 ; link to 1
|
||
TWO .WORD DOCON
|
||
.WORD 2
|
||
;
|
||
; 3
|
||
; SCREEN 35 LINE 3
|
||
;
|
||
L944 .BYTE $81,$B3
|
||
.WORD L936 ; link to 2
|
||
THREE .WORD DOCON
|
||
.WORD 3
|
||
;
|
||
; BL
|
||
; SCREEN 35 LINE 4
|
||
;
|
||
L952 .BYTE $82,"B",$CC
|
||
.WORD L944 ; link to 3
|
||
BL .WORD DOCON
|
||
.WORD $20
|
||
;
|
||
; C/L
|
||
; SCREEN 35 LINE 5
|
||
; Characters per line
|
||
L960 .BYTE $83,"C/",$CC
|
||
.WORD L952 ; link to BL
|
||
CSLL .WORD DOCON
|
||
.WORD 64
|
||
;
|
||
; FIRST
|
||
; SCREEN 35 LINE 7
|
||
;
|
||
L968 .BYTE $85,"FIRS",$D4
|
||
.WORD L960 ; link to C/L
|
||
FIRST .WORD DOCON
|
||
.WORD DAREA ; bottom of disk buffer area
|
||
;
|
||
; LIMIT
|
||
; SCREEN 35 LINE 8
|
||
;
|
||
L976 .BYTE $85,"LIMI",$D4
|
||
.WORD L968 ; link to FIRST
|
||
LIMIT .WORD DOCON
|
||
.WORD UAREA ; buffers end at user area
|
||
;
|
||
; B/BUF
|
||
; SCREEN 35 LINE 9
|
||
; Bytes per Buffer
|
||
;
|
||
L984 .BYTE $85,"B/BU",$C6
|
||
.WORD L976 ; link to LIMIT
|
||
BBUF .WORD DOCON
|
||
.WORD SSIZE ; sector size
|
||
;
|
||
; B/SCR
|
||
; SCREEN 35 LINE 10
|
||
; Blocks per screen
|
||
;
|
||
L992 .BYTE $85,"B/SC",$D2
|
||
.WORD L984 ; link to B/BUF
|
||
BSCR .WORD DOCON
|
||
.WORD 8 ; blocks to make one screen
|
||
|
||
|
||
|
||
|
||
|
||
;
|
||
; +ORIGIN
|
||
; SCREEN 35 LINE 12
|
||
;
|
||
L1000 .BYTE $87,"+ORIGI",$CE
|
||
.WORD L992 ; link to B/SCR
|
||
PORIG .WORD DOCOL
|
||
.WORD LIT,ORIG
|
||
.WORD PLUS
|
||
.WORD SEMIS
|
||
;
|
||
; TIB
|
||
; SCREEN 36 LINE 4
|
||
;
|
||
L1010 .BYTE $83,"TI",$C2
|
||
.WORD L1000 ; link to +ORIGIN
|
||
TIB .WORD DOUSE
|
||
.BYTE $A
|
||
;
|
||
; WIDTH
|
||
; SCREEN 36 LINE 5
|
||
;
|
||
L1018 .BYTE $85,"WIDT",$C8
|
||
.WORD L1010 ; link to TIB
|
||
WIDTH .WORD DOUSE
|
||
.BYTE $C
|
||
;
|
||
; WARNING
|
||
; SCREEN 36 LINE 6
|
||
;
|
||
L1026 .BYTE $87,"WARNIN",$C7
|
||
.WORD L1018 ; link to WIDTH
|
||
WARN .WORD DOUSE
|
||
.BYTE $E
|
||
;
|
||
; FENCE
|
||
; SCREEN 36 LINE 7
|
||
;
|
||
L1034 .BYTE $85,"FENC",$C5
|
||
.WORD L1026 ; link to WARNING
|
||
FENCE .WORD DOUSE
|
||
.BYTE $10
|
||
;
|
||
;
|
||
; DP
|
||
; SCREEN 36 LINE 8
|
||
;
|
||
L1042 .BYTE $82,"D",$D0
|
||
.WORD L1034 ; link to FENCE
|
||
DP .WORD DOUSE
|
||
.BYTE $12
|
||
;
|
||
; VOC-LINK
|
||
; SCREEN 36 LINE 9
|
||
;
|
||
L1050 .BYTE $88,"VOC-LIN",$CB
|
||
.WORD L1042 ; link to DP
|
||
VOCL .WORD DOUSE
|
||
.BYTE $14
|
||
;
|
||
; BLK
|
||
; SCREEN 36 LINE 10
|
||
;
|
||
L1058 .BYTE $83,"BL",$CB
|
||
.WORD L1050 ; link to VOC-LINK
|
||
BLK .WORD DOUSE
|
||
.BYTE $16
|
||
;
|
||
; IN
|
||
; SCREEN 36 LINE 11
|
||
;
|
||
L1066 .BYTE $82,"I",$CE
|
||
.WORD L1058 ; link to BLK
|
||
IN .WORD DOUSE
|
||
.BYTE $18
|
||
;
|
||
; OUT
|
||
; SCREEN 36 LINE 12
|
||
;
|
||
L1074 .BYTE $83,"OU",$D4
|
||
.WORD L1066 ; link to IN
|
||
OUT .WORD DOUSE
|
||
.BYTE $1A
|
||
;
|
||
; SCR
|
||
; SCREEN 36 LINE 13
|
||
;
|
||
L1082 .BYTE $83,"SC",$D2
|
||
.WORD L1074 ; link to OUT
|
||
SCR .WORD DOUSE
|
||
.BYTE $1C
|
||
;
|
||
; OFFSET
|
||
; SCREEN 37 LINE 1
|
||
;
|
||
L1090 .BYTE $86,"OFFSE",$D4
|
||
.WORD L1082 ; link to SCR
|
||
OFSET .WORD DOUSE
|
||
.BYTE $1E
|
||
;
|
||
; CONTEXT
|
||
; SCREEN 37 LINE 2
|
||
;
|
||
L1098 .BYTE $87,"CONTEX",$D4
|
||
.WORD L1090 ; link to OFFSET
|
||
CON .WORD DOUSE
|
||
.BYTE $20
|
||
;
|
||
; CURRENT
|
||
; SCREEN 37 LINE 3
|
||
;
|
||
L1106 .BYTE $87,"CURREN",$D4
|
||
.WORD L1098 ; link to CONTEXT
|
||
CURR .WORD DOUSE
|
||
.BYTE $22
|
||
;
|
||
; STATE
|
||
; SCREEN 37 LINE 4
|
||
;
|
||
L1114 .BYTE $85,"STAT",$C5
|
||
.WORD L1106 ; link to CURRENT
|
||
STATE .WORD DOUSE
|
||
.BYTE $24
|
||
;
|
||
; BASE
|
||
; SCREEN 37 LINE 5
|
||
;
|
||
L1122 .BYTE $84,"BAS",$C5
|
||
.WORD L1114 ; link to STATE
|
||
BASE .WORD DOUSE
|
||
.BYTE $26
|
||
;
|
||
; DPL
|
||
; SCREEN 37 LINE 6
|
||
;
|
||
L1130 .BYTE $83,"DP",$CC
|
||
.WORD L1122 ; link to BASE
|
||
DPL .WORD DOUSE
|
||
.BYTE $28
|
||
;
|
||
; FLD
|
||
; SCREEN 37 LINE 7
|
||
;
|
||
L1138 .BYTE $83,"FL",$C4
|
||
.WORD L1130 ; link to DPL
|
||
FLD .WORD DOUSE
|
||
.BYTE $2A
|
||
;
|
||
;
|
||
;
|
||
; CSP
|
||
; SCREEN 37 LINE 8
|
||
;
|
||
L1146 .BYTE $83,"CS",$D0
|
||
.WORD L1138 ; link to FLD
|
||
CSP .WORD DOUSE
|
||
.BYTE $2C
|
||
;
|
||
; R#
|
||
; SCREEN 37 LINE 9
|
||
;
|
||
L1154 .BYTE $82,"R",$A3
|
||
.WORD L1146 ; link to CSP
|
||
RNUM .WORD DOUSE
|
||
.BYTE $2E
|
||
;
|
||
; HLD
|
||
; SCREEN 37 LINE 10
|
||
;
|
||
L1162 .BYTE $83,"HL",$C4
|
||
.WORD L1154 ; link to R#
|
||
HLD .WORD DOUSE
|
||
.BYTE $30
|
||
;
|
||
; 1+
|
||
; SCREEN 38 LINE 1
|
||
;
|
||
L1170 .BYTE $82,"1",$AB
|
||
.WORD L1162 ; link to HLD
|
||
ONEP .WORD DOCOL
|
||
.WORD ONE
|
||
.WORD PLUS
|
||
.WORD SEMIS
|
||
;
|
||
; 2+
|
||
; SCREEN 38 LINE 2
|
||
;
|
||
L1180 .BYTE $82,"2",$AB
|
||
.WORD L1170 ; link to 1+
|
||
TWOP .WORD DOCOL
|
||
.WORD TWO
|
||
.WORD PLUS
|
||
.WORD SEMIS
|
||
;
|
||
; HERE
|
||
; SCREEN 38 LINE 3
|
||
;
|
||
L1190 .BYTE $84,"HER",$C5
|
||
.WORD L1180 ; link to 2+
|
||
HERE .WORD DOCOL
|
||
.WORD DP
|
||
.WORD AT
|
||
.WORD SEMIS
|
||
;
|
||
; ALLOT
|
||
; SCREEN 38 LINE 4
|
||
;
|
||
L1200 .BYTE $85,"ALLO",$D4
|
||
.WORD L1190 ; link to HERE
|
||
ALLOT .WORD DOCOL
|
||
.WORD DP
|
||
.WORD PSTOR
|
||
.WORD SEMIS
|
||
;
|
||
; ,
|
||
; SCREEN 38 LINE 5
|
||
;
|
||
L1210 .BYTE $81,$AC
|
||
.WORD L1200 ; link to ALLOT
|
||
COMMA .WORD DOCOL
|
||
.WORD HERE
|
||
.WORD STORE
|
||
.WORD TWO
|
||
.WORD ALLOT
|
||
.WORD SEMIS
|
||
;
|
||
; C,
|
||
; SCREEN 38 LINE 6
|
||
;
|
||
L1222 .BYTE $82,"C",$AC
|
||
.WORD L1210 ; link to ,
|
||
CCOMM .WORD DOCOL
|
||
.WORD HERE
|
||
.WORD CSTOR
|
||
.WORD ONE
|
||
.WORD ALLOT
|
||
.WORD SEMIS
|
||
;
|
||
; -
|
||
; SCREEN 38 LINE 7
|
||
;
|
||
L1234 .BYTE $81,$AD
|
||
.WORD L1222 ; link to C,
|
||
SUB .WORD DOCOL
|
||
.WORD MINUS
|
||
.WORD PLUS
|
||
.WORD SEMIS
|
||
;
|
||
; =
|
||
; SCREEN 38 LINE 8
|
||
;
|
||
L1244 .BYTE $81,$BD
|
||
.WORD L1234 ; link to -
|
||
EQUAL .WORD DOCOL
|
||
.WORD SUB
|
||
.WORD ZEQU
|
||
.WORD SEMIS
|
||
;
|
||
; U<
|
||
; Unsigned less than
|
||
;
|
||
L1246 .BYTE $82,"U",$BC
|
||
.WORD L1244 ; link to =
|
||
ULESS .WORD DOCOL
|
||
.WORD SUB ; subtract two values
|
||
.WORD ZLESS ; test sign
|
||
.WORD SEMIS
|
||
;
|
||
; <
|
||
; Altered from model
|
||
; SCREEN 38 LINE 9
|
||
;
|
||
L1254 .BYTE $81,$BC
|
||
.WORD L1246 ; link to U<
|
||
LESS .WORD *+2
|
||
SEC
|
||
LDA 2,X
|
||
SBC 0,X ; subtract
|
||
LDA 3,X
|
||
SBC 1,X
|
||
STY 3,X ; zero high byte
|
||
BVC L1258
|
||
EOR #$80 ; correct overflow
|
||
L1258 BPL L1260
|
||
INY ; invert boolean
|
||
L1260 STY 2,X ; leave boolean
|
||
JMP POP
|
||
;
|
||
; >
|
||
; SCREEN 38 LINE 10
|
||
L1264 .BYTE $81,$BE
|
||
.WORD L1254 ; link to <
|
||
GREAT .WORD DOCOL
|
||
.WORD SWAP
|
||
.WORD LESS
|
||
.WORD SEMIS
|
||
;
|
||
; ROT
|
||
; SCREEN 38 LINE 11
|
||
;
|
||
L1274 .BYTE $83,"RO",$D4
|
||
.WORD L1264 ; link to >
|
||
ROT .WORD DOCOL
|
||
.WORD TOR
|
||
.WORD SWAP
|
||
.WORD RFROM
|
||
.WORD SWAP
|
||
.WORD SEMIS
|
||
;
|
||
; SPACE
|
||
; SCREEN 38 LINE 12
|
||
;
|
||
L1286 .BYTE $85,"SPAC",$C5
|
||
.WORD L1274 ; link to ROT
|
||
SPACE .WORD DOCOL
|
||
.WORD BL
|
||
.WORD EMIT
|
||
.WORD SEMIS
|
||
;
|
||
; -DUP
|
||
; SCREEN 38 LINE 13
|
||
;
|
||
L1296 .BYTE $84,"-DU",$D0
|
||
.WORD L1286 ; link to SPACE
|
||
DDUP .WORD DOCOL
|
||
.WORD DUP
|
||
.WORD ZBRAN
|
||
L1301 .WORD $4 ; L1303-L1301
|
||
.WORD DUP
|
||
L1303 .WORD SEMIS
|
||
;
|
||
; TRAVERSE
|
||
; SCREEN 39 LINE 14
|
||
;
|
||
L1308 .BYTE $88,"TRAVERS",$C5
|
||
.WORD L1296 ; link to -DUP
|
||
TRAV .WORD DOCOL
|
||
.WORD SWAP
|
||
L1312 .WORD OVER
|
||
.WORD PLUS
|
||
.WORD CLIT
|
||
.BYTE $7F
|
||
.WORD OVER
|
||
.WORD CAT
|
||
.WORD LESS
|
||
.WORD ZBRAN
|
||
L1320 .WORD $FFF1 ; L1312-L1320
|
||
.WORD SWAP
|
||
.WORD DROP
|
||
.WORD SEMIS
|
||
;
|
||
; LATEST
|
||
; SCREEN 39 LINE 6
|
||
;
|
||
L1328 .BYTE $86,"LATES",$D4
|
||
.WORD L1308 ; link to TRAVERSE
|
||
LATES .WORD DOCOL
|
||
.WORD CURR
|
||
.WORD AT
|
||
.WORD AT
|
||
.WORD SEMIS
|
||
;
|
||
;
|
||
; LFA
|
||
; SCREEN 39 LINE 11
|
||
;
|
||
L1339 .BYTE $83,"LF",$C1
|
||
.WORD L1328 ; link to LATEST
|
||
LFA .WORD DOCOL
|
||
.WORD CLIT
|
||
.BYTE 4
|
||
.WORD SUB
|
||
.WORD SEMIS
|
||
;
|
||
; CFA
|
||
; SCREEN 39 LINE 12
|
||
;
|
||
L1350 .BYTE $83,"CF",$C1
|
||
.WORD L1339 ; link to LFA
|
||
CFA .WORD DOCOL
|
||
.WORD TWO
|
||
.WORD SUB
|
||
.WORD SEMIS
|
||
;
|
||
; NFA
|
||
; SCREEN 39 LIINE 13
|
||
;
|
||
L1360 .BYTE $83,"NF",$C1
|
||
.WORD L1350 ; link to CFA
|
||
NFA .WORD DOCOL
|
||
.WORD CLIT
|
||
.BYTE $5
|
||
.WORD SUB
|
||
.WORD LIT,$FFFF
|
||
.WORD TRAV
|
||
.WORD SEMIS
|
||
;
|
||
; PFA
|
||
; SCREEN 39 LINE 14
|
||
;
|
||
L1373 .BYTE $83,"PF",$C1
|
||
.WORD L1360 ; link to NFA
|
||
PFA .WORD DOCOL
|
||
.WORD ONE
|
||
.WORD TRAV
|
||
.WORD CLIT
|
||
.BYTE 5
|
||
.WORD PLUS
|
||
.WORD SEMIS
|
||
;
|
||
; !CSP
|
||
; SCREEN 40 LINE 1
|
||
;
|
||
L1386 .BYTE $84,"!CS",$D0
|
||
.WORD L1373 ; link to PFA
|
||
SCSP .WORD DOCOL
|
||
.WORD SPAT
|
||
.WORD CSP
|
||
.WORD STORE
|
||
.WORD SEMIS
|
||
;
|
||
; ?ERROR
|
||
; SCREEN 40 LINE 3
|
||
;
|
||
L1397 .BYTE $86,"?ERRO",$D2
|
||
.WORD L1386 ; link to !CSP
|
||
QERR .WORD DOCOL
|
||
.WORD SWAP
|
||
.WORD ZBRAN
|
||
L1402 .WORD 8 ; L1406-L1402
|
||
.WORD ERROR
|
||
.WORD BRAN
|
||
L1405 .WORD 4 ; L1407-L1405
|
||
L1406 .WORD DROP
|
||
L1407 .WORD SEMIS
|
||
;
|
||
; ?COMP
|
||
; SCREEN 40 LINE 6
|
||
;
|
||
L1412 .BYTE $85,"?COM",$D0
|
||
.WORD L1397 ; link to ?ERROR
|
||
QCOMP .WORD DOCOL
|
||
.WORD STATE
|
||
.WORD AT
|
||
.WORD ZEQU
|
||
.WORD CLIT
|
||
.BYTE $11
|
||
.WORD QERR
|
||
.WORD SEMIS
|
||
;
|
||
; ?EXEC
|
||
; SCREEN 40 LINE 8
|
||
;
|
||
L1426 .BYTE $85,"?EXE",$C3
|
||
.WORD L1412 ; link to ?COMP
|
||
QEXEC .WORD DOCOL
|
||
.WORD STATE
|
||
.WORD AT
|
||
.WORD CLIT
|
||
.BYTE $12
|
||
.WORD QERR
|
||
.WORD SEMIS
|
||
;
|
||
; ?PAIRS
|
||
; SCREEN 40 LINE 10
|
||
;
|
||
L1439 .BYTE $86,"?PAIR",$D3
|
||
.WORD L1426 ; link to ?EXEC
|
||
QPAIR .WORD DOCOL
|
||
.WORD SUB
|
||
.WORD CLIT
|
||
.BYTE $13
|
||
.WORD QERR
|
||
.WORD SEMIS
|
||
;
|
||
; ?CSP
|
||
; SCREEN 40 LINE 12
|
||
;
|
||
L1451 .BYTE $84,"?CS",$D0
|
||
.WORD L1439 ; link to ?PAIRS
|
||
QCSP .WORD DOCOL
|
||
.WORD SPAT
|
||
.WORD CSP
|
||
.WORD AT
|
||
.WORD SUB
|
||
.WORD CLIT
|
||
.BYTE $14
|
||
.WORD QERR
|
||
.WORD SEMIS
|
||
;
|
||
; ?LOADING
|
||
; SCREEN 40 LINE 14
|
||
;
|
||
L1466 .BYTE $88,"?LOADIN",$C7
|
||
.WORD L1451 ; link to ?CSP
|
||
QLOAD .WORD DOCOL
|
||
.WORD BLK
|
||
.WORD AT
|
||
.WORD ZEQU
|
||
.WORD CLIT
|
||
.BYTE $16
|
||
.WORD QERR
|
||
.WORD SEMIS
|
||
;
|
||
; COMPILE
|
||
; SCREEN 41 LINE 2
|
||
;
|
||
L1480 .BYTE $87,"COMPIL",$C5
|
||
.WORD L1466 ; link to ?LOADING
|
||
COMP .WORD DOCOL
|
||
.WORD QCOMP
|
||
.WORD RFROM
|
||
.WORD DUP
|
||
.WORD TWOP
|
||
.WORD TOR
|
||
.WORD AT
|
||
.WORD COMMA
|
||
.WORD SEMIS
|
||
;
|
||
; [
|
||
; SCREEN 41 LINE 5
|
||
;
|
||
L1495 .BYTE $C1,$DB
|
||
.WORD L1480 ; link to COMPILE
|
||
LBRAC .WORD DOCOL
|
||
.WORD ZERO
|
||
.WORD STATE
|
||
.WORD STORE
|
||
.WORD SEMIS
|
||
;
|
||
; ]
|
||
; SCREEN 41 LINE 7
|
||
;
|
||
L1507 .BYTE $81,$DD
|
||
.WORD L1495 ; link to [
|
||
RBRAC .WORD DOCOL
|
||
.WORD CLIT
|
||
.BYTE $C0
|
||
.WORD STATE
|
||
.WORD STORE
|
||
.WORD SEMIS
|
||
;
|
||
; SMUDGE
|
||
; SCREEN 41 LINE 9
|
||
;
|
||
L1519 .BYTE $86,"SMUDG",$C5
|
||
.WORD L1507 ; link to ]
|
||
SMUDG .WORD DOCOL
|
||
.WORD LATES
|
||
.WORD CLIT
|
||
.BYTE $20
|
||
.WORD TOGGL
|
||
.WORD SEMIS
|
||
;
|
||
; HEX
|
||
; SCREEN 41 LINE 11
|
||
;
|
||
L1531 .BYTE $83,"HE",$D8
|
||
.WORD L1519 ; link to SMUDGE
|
||
HEX .WORD DOCOL
|
||
.WORD CLIT
|
||
.BYTE 16
|
||
.WORD BASE
|
||
.WORD STORE
|
||
.WORD SEMIS
|
||
;
|
||
; DECIMAL
|
||
; SCREEN 41 LINE 13
|
||
;
|
||
L1543 .BYTE $87,"DECIMA",$CC
|
||
.WORD L1531 ; link to HEX
|
||
DECIM .WORD DOCOL
|
||
.WORD CLIT
|
||
.BYTE 10
|
||
.WORD BASE
|
||
.WORD STORE
|
||
.WORD SEMIS
|
||
;
|
||
;
|
||
;
|
||
; (;CODE)
|
||
; SCREEN 42 LINE 2
|
||
;
|
||
L1555 .BYTE $87,"(;CODE",$A9
|
||
.WORD L1543 ; link to DECIMAL
|
||
PSCOD .WORD DOCOL
|
||
.WORD RFROM
|
||
.WORD LATES
|
||
.WORD PFA
|
||
.WORD CFA
|
||
.WORD STORE
|
||
.WORD SEMIS
|
||
;
|
||
; ;CODE
|
||
; SCREEN 42 LINE 6
|
||
;
|
||
L1568 .BYTE $C5,";COD",$C5
|
||
.WORD L1555 ; link to (;CODE)
|
||
.WORD DOCOL
|
||
.WORD QCSP
|
||
.WORD COMP
|
||
.WORD PSCOD
|
||
.WORD LBRAC
|
||
.WORD SMUDG
|
||
.WORD SEMIS
|
||
;
|
||
; <BUILDS
|
||
; SCREEN 43 LINE 2
|
||
;
|
||
L1582 .BYTE $87,"<BUILD",$D3
|
||
.WORD L1568 ; link to ;CODE
|
||
BUILD .WORD DOCOL
|
||
.WORD ZERO
|
||
.WORD CONST
|
||
.WORD SEMIS
|
||
;
|
||
; DOES>
|
||
; SCREEN 43 LINE 4
|
||
;
|
||
L1592 .BYTE $85,"DOES",$BE
|
||
.WORD L1582 ; link to <BUILDS
|
||
DOES .WORD DOCOL
|
||
.WORD RFROM
|
||
.WORD LATES
|
||
.WORD PFA
|
||
.WORD STORE
|
||
.WORD 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
|
||
;
|
||
; COUNT
|
||
; SCREEN 44 LINE 1
|
||
;
|
||
L1622 .BYTE $85,"COUN",$D4
|
||
.WORD L1592 ; link to DOES>
|
||
COUNT .WORD DOCOL
|
||
.WORD DUP
|
||
.WORD ONEP
|
||
.WORD SWAP
|
||
.WORD CAT
|
||
.WORD SEMIS
|
||
;
|
||
; TYPE
|
||
; SCREEN 44 LINE 2
|
||
;
|
||
L1634 .BYTE $84,"TYP",$C5
|
||
.WORD L1622 ; link to COUNT
|
||
TYPE .WORD DOCOL
|
||
.WORD DDUP
|
||
.WORD ZBRAN
|
||
L1639 .WORD $18 ; L1651-L1639
|
||
.WORD OVER
|
||
.WORD PLUS
|
||
.WORD SWAP
|
||
.WORD PDO
|
||
L1644 .WORD I
|
||
.WORD CAT
|
||
.WORD EMIT
|
||
.WORD PLOOP
|
||
L1648 .WORD $FFF8 ; L1644-L1648
|
||
.WORD BRAN
|
||
L1650 .WORD $4 ; L1652-L1650
|
||
L1651 .WORD DROP
|
||
L1652 .WORD SEMIS
|
||
;
|
||
; -TRAILING
|
||
; SCREEN 44 LINE 5
|
||
;
|
||
L1657 .BYTE $89,"-TRAILIN",$C7
|
||
.WORD L1634 ; link to TYPE
|
||
DTRAI .WORD DOCOL
|
||
.WORD DUP
|
||
.WORD ZERO
|
||
.WORD PDO
|
||
L1663 .WORD OVER
|
||
.WORD OVER
|
||
.WORD PLUS
|
||
.WORD ONE
|
||
.WORD SUB
|
||
.WORD CAT
|
||
.WORD BL
|
||
.WORD SUB
|
||
.WORD ZBRAN
|
||
L1672 .WORD 8 ; L1676-L1672
|
||
.WORD LEAVE
|
||
.WORD BRAN
|
||
L1675 .WORD 6 ; L1678-L1675
|
||
L1676 .WORD ONE
|
||
.WORD SUB
|
||
L1678 .WORD PLOOP
|
||
L1679 .WORD $FFE0 ; L1663-L1679
|
||
.WORD SEMIS
|
||
;
|
||
; (.")
|
||
; SCREEN 44 LINE 8
|
||
L1685 .BYTE $84,"(.",$22,$A9 ; $84 (." $A9
|
||
.WORD L1657 ; link to -TRAILING
|
||
PDOTQ .WORD DOCOL
|
||
.WORD R
|
||
.WORD COUNT
|
||
.WORD DUP
|
||
.WORD ONEP
|
||
.WORD RFROM
|
||
.WORD PLUS
|
||
.WORD TOR
|
||
.WORD TYPE
|
||
.WORD SEMIS
|
||
;
|
||
; ."
|
||
; SCREEN 44 LINE12
|
||
;
|
||
L1701 .BYTE $C2,".",$A2
|
||
.WORD L1685 ; link to PDOTQ
|
||
.WORD DOCOL
|
||
.WORD CLIT
|
||
.BYTE $22
|
||
.WORD STATE
|
||
.WORD AT
|
||
.WORD ZBRAN
|
||
L1709 .WORD $14 ;L1719-L1709
|
||
.WORD COMP
|
||
.WORD PDOTQ
|
||
.WORD WORD
|
||
.WORD HERE
|
||
.WORD CAT
|
||
.WORD ONEP
|
||
.WORD ALLOT
|
||
.WORD BRAN
|
||
L1718 .WORD $A ;L1723-L1718
|
||
L1719 .WORD WORD
|
||
.WORD HERE
|
||
.WORD COUNT
|
||
.WORD TYPE
|
||
L1723 .WORD SEMIS
|
||
;
|
||
; EXPECT
|
||
; SCREEN 45 LINE 2
|
||
;
|
||
L1729 .BYTE $86,"EXPEC",$D4
|
||
.WORD L1701 ; link to ."
|
||
EXPEC .WORD DOCOL
|
||
.WORD OVER
|
||
.WORD PLUS
|
||
.WORD OVER
|
||
.WORD PDO
|
||
L1736 .WORD KEY
|
||
.WORD DUP
|
||
.WORD CLIT
|
||
.BYTE $E
|
||
.WORD PORIG
|
||
.WORD AT
|
||
.WORD EQUAL
|
||
.WORD ZBRAN
|
||
L1744 .WORD $1F ; L1760-L1744
|
||
.WORD DROP
|
||
.WORD CLIT
|
||
.BYTE 08
|
||
.WORD OVER
|
||
.WORD I
|
||
.WORD EQUAL
|
||
.WORD DUP
|
||
.WORD RFROM
|
||
.WORD TWO
|
||
.WORD SUB
|
||
.WORD PLUS
|
||
.WORD TOR
|
||
.WORD SUB
|
||
.WORD BRAN
|
||
L1759 .WORD $27 ; L1779-L1759
|
||
L1760 .WORD DUP
|
||
.WORD CLIT
|
||
.BYTE $0D
|
||
.WORD EQUAL
|
||
.WORD ZBRAN
|
||
L1765 .WORD $0E ; L1772-L1765
|
||
.WORD LEAVE
|
||
.WORD DROP
|
||
.WORD BL
|
||
.WORD ZERO
|
||
.WORD BRAN
|
||
L1771 .WORD 04 ; L1773-L1771
|
||
L1772 .WORD DUP
|
||
L1773 .WORD I
|
||
.WORD CSTOR
|
||
.WORD ZERO
|
||
.WORD I
|
||
.WORD ONEP
|
||
.WORD STORE
|
||
L1779 .WORD EMIT
|
||
.WORD PLOOP
|
||
L1781 .WORD $FFA9
|
||
.WORD DROP ; L1736-L1781
|
||
.WORD SEMIS
|
||
;
|
||
; QUERY
|
||
; SCREEN 45 LINE 9
|
||
;
|
||
L1788 .BYTE $85,"QUER",$D9
|
||
.WORD L1729 ; link to EXPECT
|
||
QUERY .WORD DOCOL
|
||
.WORD TIB
|
||
.WORD AT
|
||
.WORD CLIT
|
||
.BYTE 80 ; 80 characters from terminal
|
||
.WORD EXPEC
|
||
.WORD ZERO
|
||
.WORD IN
|
||
.WORD STORE
|
||
.WORD SEMIS
|
||
;
|
||
; X
|
||
; SCREEN 45 LINE 11
|
||
; Actually Ascii Null
|
||
;
|
||
L1804 .BYTE $C1,$80
|
||
.WORD L1788 ; link to QUERY
|
||
.WORD DOCOL
|
||
.WORD BLK
|
||
.WORD AT
|
||
.WORD ZBRAN
|
||
L1810 .WORD $2A ; L1830-l1810
|
||
.WORD ONE
|
||
.WORD BLK
|
||
.WORD PSTOR
|
||
.WORD ZERO
|
||
.WORD IN
|
||
.WORD STORE
|
||
.WORD BLK
|
||
.WORD AT
|
||
.WORD ZERO,BSCR
|
||
.WORD USLAS
|
||
.WORD DROP ; fixed from model
|
||
.WORD ZEQU
|
||
.WORD ZBRAN
|
||
L1824 .WORD 8 ; L1828-L1824
|
||
.WORD QEXEC
|
||
.WORD RFROM
|
||
.WORD DROP
|
||
L1828 .WORD BRAN
|
||
L1829 .WORD 6 ; L1832-L1829
|
||
L1830 .WORD RFROM
|
||
.WORD DROP
|
||
L1832 .WORD SEMIS
|
||
;
|
||
; FILL
|
||
; SCREEN 46 LINE 1
|
||
;
|
||
;
|
||
L1838 .BYTE $84,"FIL",$CC
|
||
.WORD L1804 ; link to X
|
||
FILL .WORD DOCOL
|
||
.WORD SWAP
|
||
.WORD TOR
|
||
.WORD OVER
|
||
.WORD CSTOR
|
||
.WORD DUP
|
||
.WORD ONEP
|
||
.WORD RFROM
|
||
.WORD ONE
|
||
.WORD SUB
|
||
.WORD CMOVE
|
||
.WORD SEMIS
|
||
;
|
||
; ERASE
|
||
; SCREEN 46 LINE 4
|
||
;
|
||
L1856 .BYTE $85,"ERAS",$C5
|
||
.WORD L1838 ; link to FILL
|
||
ERASE .WORD DOCOL
|
||
.WORD ZERO
|
||
.WORD FILL
|
||
.WORD SEMIS
|
||
;
|
||
; BLANKS
|
||
; SCREEN 46 LINE 7
|
||
;
|
||
L1866 .BYTE $86,"BLANK",$D3
|
||
.WORD L1856 ; link to ERASE
|
||
BLANK .WORD DOCOL
|
||
.WORD BL
|
||
.WORD FILL
|
||
.WORD SEMIS
|
||
;
|
||
; HOLD
|
||
; SCREEN 46 LINE 10
|
||
;
|
||
L1876 .BYTE $84,"HOL",$C4
|
||
.WORD L1866 ; link to BLANKS
|
||
HOLD .WORD DOCOL
|
||
.WORD LIT,$FFFF
|
||
.WORD HLD
|
||
.WORD PSTOR
|
||
.WORD HLD
|
||
.WORD AT
|
||
.WORD CSTOR
|
||
.WORD SEMIS
|
||
;
|
||
; PAD
|
||
; SCREEN 46 LINE 13
|
||
;
|
||
L1890 .BYTE $83,"PA",$C4
|
||
.WORD L1876 ; link to HOLD
|
||
PAD .WORD DOCOL
|
||
.WORD HERE
|
||
.WORD CLIT
|
||
.BYTE 68 ; PAD is 68 bytes above here.
|
||
.WORD PLUS
|
||
.WORD SEMIS
|
||
;
|
||
; WORD
|
||
; SCREEN 47 LINE 1
|
||
;
|
||
L1902 .BYTE $84,"WOR",$C4
|
||
.WORD L1890 ; link to PAD
|
||
WORD .WORD DOCOL
|
||
.WORD BLK
|
||
.WORD AT
|
||
.WORD ZBRAN
|
||
L1908 .WORD $C ; L1914-L1908
|
||
.WORD BLK
|
||
.WORD AT
|
||
.WORD BLOCK
|
||
.WORD BRAN
|
||
L1913 .WORD $6 ; L1916-L1913
|
||
L1914 .WORD TIB
|
||
.WORD AT
|
||
L1916 .WORD IN
|
||
.WORD AT
|
||
.WORD PLUS
|
||
.WORD SWAP
|
||
.WORD ENCL
|
||
.WORD HERE
|
||
.WORD CLIT
|
||
.BYTE $22
|
||
.WORD BLANK
|
||
.WORD IN
|
||
.WORD PSTOR
|
||
.WORD OVER
|
||
.WORD SUB
|
||
.WORD TOR
|
||
.WORD R
|
||
.WORD HERE
|
||
.WORD CSTOR
|
||
.WORD PLUS
|
||
.WORD HERE
|
||
.WORD ONEP
|
||
.WORD RFROM
|
||
.WORD CMOVE
|
||
.WORD SEMIS
|
||
;
|
||
; UPPER
|
||
; SCREEN 47 LINE 12
|
||
;
|
||
L1943 .BYTE $85,"UPPE",$D2
|
||
.WORD L1902 ; link to WORD
|
||
UPPER .WORD DOCOL
|
||
.WORD OVER ; This routine converts text to U case
|
||
.WORD PLUS ; It allows interpretation from a term.
|
||
.WORD SWAP ; without a shift-lock.
|
||
.WORD PDO
|
||
L1950 .WORD I
|
||
.WORD CAT
|
||
.WORD CLIT
|
||
.BYTE $5F
|
||
.WORD GREAT
|
||
.WORD ZBRAN
|
||
L1956 .WORD 09 ; L1961-L1956
|
||
.WORD I
|
||
.WORD CLIT
|
||
.BYTE $20
|
||
.WORD TOGGL
|
||
L1961 .WORD PLOOP
|
||
L1962 .WORD $FFEA ; L1950-L1962
|
||
.WORD SEMIS
|
||
;
|
||
; (NUMBER)
|
||
; SCREEN 48 LINE 1
|
||
;
|
||
L1968 .BYTE $88,"(NUMBER",$A9
|
||
.WORD L1943 ; link to UPPER
|
||
PNUMB .WORD DOCOL
|
||
L1971 .WORD ONEP
|
||
.WORD DUP
|
||
.WORD TOR
|
||
.WORD CAT
|
||
.WORD BASE
|
||
.WORD AT
|
||
.WORD DIGIT
|
||
.WORD ZBRAN
|
||
L1979 .WORD $2C ; L2001-L1979
|
||
.WORD SWAP
|
||
.WORD BASE
|
||
.WORD AT
|
||
.WORD USTAR
|
||
.WORD DROP
|
||
.WORD ROT
|
||
.WORD BASE
|
||
.WORD AT
|
||
.WORD USTAR
|
||
.WORD DPLUS
|
||
.WORD DPL
|
||
.WORD AT
|
||
.WORD ONEP
|
||
.WORD ZBRAN
|
||
L1994 .WORD 8 ; L1998-L1994
|
||
.WORD ONE
|
||
.WORD DPL
|
||
.WORD PSTOR
|
||
L1998 .WORD RFROM
|
||
.WORD BRAN
|
||
L2000 .WORD $FFC6 ; L1971-L2000
|
||
L2001 .WORD RFROM
|
||
.WORD SEMIS
|
||
;
|
||
; NUMBER
|
||
; SCREEN 48 LINE 6
|
||
;
|
||
L2007 .BYTE $86,"NUMBE",$D2
|
||
.WORD L1968 ; link to (NUMBER)
|
||
NUMBER .WORD DOCOL
|
||
.WORD ZERO
|
||
.WORD ZERO
|
||
.WORD ROT
|
||
.WORD DUP
|
||
.WORD ONEP
|
||
.WORD CAT
|
||
.WORD CLIT
|
||
.BYTE $2D
|
||
.WORD EQUAL
|
||
.WORD DUP
|
||
.WORD TOR
|
||
.WORD PLUS
|
||
.WORD LIT,$FFFF
|
||
L2023 .WORD DPL
|
||
.WORD STORE
|
||
.WORD PNUMB
|
||
.WORD DUP
|
||
.WORD CAT
|
||
.WORD BL
|
||
.WORD SUB
|
||
.WORD ZBRAN
|
||
L2031 .WORD $15 ; L2042-L2031
|
||
.WORD DUP
|
||
.WORD CAT
|
||
.WORD CLIT
|
||
.BYTE $2E
|
||
.WORD SUB
|
||
.WORD ZERO
|
||
.WORD QERR
|
||
.WORD ZERO
|
||
.WORD BRAN
|
||
L2041 .WORD $FFDD ; L2023-L2041
|
||
L2042 .WORD DROP
|
||
.WORD RFROM
|
||
.WORD ZBRAN
|
||
L2045 .WORD 4 ; L2047-L2045
|
||
.WORD DMINU
|
||
L2047 .WORD SEMIS
|
||
;
|
||
; -FIND
|
||
; SCREEN 48 LINE 12
|
||
;
|
||
L2052 .BYTE $85,"-FIN",$C4
|
||
.WORD L2007 ; link to NUMBER
|
||
DFIND .WORD DOCOL
|
||
.WORD BL
|
||
.WORD WORD
|
||
.WORD HERE ; )
|
||
.WORD COUNT ; |- Optional allowing free use of low
|
||
.WORD UPPER ; ) case from terminal
|
||
.WORD HERE
|
||
.WORD CON
|
||
.WORD AT
|
||
.WORD AT
|
||
.WORD PFIND
|
||
.WORD DUP
|
||
.WORD ZEQU
|
||
.WORD ZBRAN
|
||
L2068 .WORD $A ; L2073-L2068
|
||
.WORD DROP
|
||
.WORD HERE
|
||
.WORD LATES
|
||
.WORD PFIND
|
||
L2073 .WORD SEMIS
|
||
;
|
||
; (ABORT)
|
||
; SCREEN 49 LINE 2
|
||
;
|
||
L2078 .BYTE $87,"(ABORT",$A9
|
||
.WORD L2052 ; link to -FIND
|
||
PABOR .WORD DOCOL
|
||
.WORD ABORT
|
||
.WORD SEMIS
|
||
;
|
||
; ERROR
|
||
; SCREEN 49 LINE 4
|
||
;
|
||
L2087 .BYTE $85,"ERRO",$D2
|
||
.WORD L2078 ; link to (ABORT)
|
||
ERROR .WORD DOCOL
|
||
.WORD WARN
|
||
.WORD AT
|
||
.WORD ZLESS
|
||
.WORD ZBRAN
|
||
L2094 .WORD $4 ; L2096-L2094
|
||
.WORD PABOR
|
||
L2096 .WORD HERE
|
||
.WORD COUNT
|
||
.WORD TYPE
|
||
.WORD PDOTQ
|
||
.BYTE 4," ? "
|
||
.WORD MESS
|
||
.WORD SPSTO
|
||
.WORD DROP,DROP; make room for 2 error values
|
||
.WORD IN
|
||
.WORD AT
|
||
.WORD BLK
|
||
.WORD AT
|
||
.WORD QUIT
|
||
.WORD SEMIS
|
||
;
|
||
; ID.
|
||
; SCREEN 49 LINE 9
|
||
;
|
||
L2113 .BYTE $83,"ID",$AE
|
||
.WORD L2087 ; link to ERROR
|
||
IDDOT .WORD DOCOL
|
||
.WORD PAD
|
||
.WORD CLIT
|
||
.BYTE $20
|
||
.WORD CLIT
|
||
.BYTE $5F
|
||
.WORD FILL
|
||
.WORD DUP
|
||
.WORD PFA
|
||
.WORD LFA
|
||
.WORD OVER
|
||
.WORD SUB
|
||
.WORD PAD
|
||
.WORD SWAP
|
||
.WORD CMOVE
|
||
.WORD PAD
|
||
.WORD COUNT
|
||
.WORD CLIT
|
||
.BYTE $1F
|
||
.WORD ANDD
|
||
.WORD TYPE
|
||
.WORD SPACE
|
||
.WORD SEMIS
|
||
;
|
||
; CREATE
|
||
; SCREEN 50 LINE 2
|
||
;
|
||
L2142 .BYTE $86,"CREAT",$C5
|
||
.WORD L2113 ; link to ID
|
||
CREAT .WORD DOCOL
|
||
.WORD TIB ;)
|
||
.WORD HERE ;|
|
||
.WORD CLIT ;| 6502 only, assures
|
||
.BYTE $A0 ;| room exists in dict.
|
||
.WORD PLUS ;|
|
||
.WORD ULESS ;|
|
||
.WORD TWO ;|
|
||
.WORD QERR ;)
|
||
.WORD DFIND
|
||
.WORD ZBRAN
|
||
L2155 .WORD $0F
|
||
.WORD DROP
|
||
.WORD NFA
|
||
.WORD IDDOT
|
||
.WORD CLIT
|
||
.BYTE 4
|
||
.WORD MESS
|
||
.WORD SPACE
|
||
L2163 .WORD HERE
|
||
.WORD DUP
|
||
.WORD CAT
|
||
.WORD WIDTH
|
||
.WORD AT
|
||
.WORD MIN
|
||
.WORD ONEP
|
||
.WORD ALLOT
|
||
.WORD DP ;)
|
||
.WORD CAT ;| 6502 only. The code field
|
||
.WORD CLIT ;| must not straddle page
|
||
.BYTE $FD ;| boundaries
|
||
.WORD EQUAL ;|
|
||
.WORD ALLOT ;)
|
||
.WORD DUP
|
||
.WORD CLIT
|
||
.BYTE $A0
|
||
.WORD TOGGL
|
||
.WORD HERE
|
||
.WORD ONE
|
||
.WORD SUB
|
||
.WORD CLIT
|
||
.BYTE $80
|
||
.WORD TOGGL
|
||
.WORD LATES
|
||
.WORD COMMA
|
||
.WORD CURR
|
||
.WORD AT
|
||
.WORD STORE
|
||
.WORD HERE
|
||
.WORD TWOP
|
||
.WORD COMMA
|
||
.WORD SEMIS
|
||
;
|
||
; [COMPILE]
|
||
; SCREEN 51 LINE 2
|
||
;
|
||
L2200 .BYTE $C9,"[COMPILE",$DD
|
||
.WORD L2142 ; link to CREATE
|
||
.WORD DOCOL
|
||
.WORD DFIND
|
||
.WORD ZEQU
|
||
.WORD ZERO
|
||
.WORD QERR
|
||
.WORD DROP
|
||
.WORD CFA
|
||
.WORD COMMA
|
||
.WORD SEMIS
|
||
;
|
||
; LITERAL
|
||
; SCREEN 51 LINE 2
|
||
;
|
||
L2216 .BYTE $C7,"LITERA",$CC
|
||
.WORD L2200 ; link to [COMPILE]
|
||
LITER .WORD DOCOL
|
||
.WORD STATE
|
||
.WORD AT
|
||
.WORD ZBRAN
|
||
L2222 .WORD 8 ; L2226-L2222
|
||
.WORD COMP
|
||
.WORD LIT
|
||
.WORD COMMA
|
||
L2226 .WORD SEMIS
|
||
;
|
||
; DLITERAL
|
||
; SCREEN 51 LINE 8
|
||
;
|
||
L2232 .BYTE $C8,"DLITERA",$CC
|
||
.WORD L2216 ; link to LITERAL
|
||
DLIT .WORD DOCOL
|
||
.WORD STATE
|
||
.WORD AT
|
||
.WORD ZBRAN
|
||
L2238 .WORD 8 ; L2242-L2238
|
||
.WORD SWAP
|
||
.WORD LITER
|
||
.WORD LITER
|
||
L2242 .WORD SEMIS
|
||
;
|
||
; ?STACK
|
||
; SCREEN 51 LINE 13
|
||
;
|
||
L2248 .BYTE $86,"?STAC",$CB
|
||
.WORD L2232 ; link to DLITERAL
|
||
QSTAC .WORD DOCOL
|
||
.WORD CLIT
|
||
.BYTE TOS
|
||
.WORD SPAT
|
||
.WORD ULESS
|
||
.WORD ONE
|
||
.WORD QERR
|
||
.WORD SPAT
|
||
.WORD CLIT
|
||
.BYTE BOS
|
||
.WORD ULESS
|
||
.WORD CLIT
|
||
.BYTE 7
|
||
.WORD QERR
|
||
.WORD SEMIS
|
||
;
|
||
; INTERPRET
|
||
; SCREEN 52 LINE 2
|
||
;
|
||
L2269 .BYTE $89,"INTERPRE",$D4
|
||
.WORD L2248 ; link to ?STACK
|
||
INTER .WORD DOCOL
|
||
L2272 .WORD DFIND
|
||
.WORD ZBRAN
|
||
L2274 .WORD $1E ; L2289-L2274
|
||
.WORD STATE
|
||
.WORD AT
|
||
.WORD LESS
|
||
.WORD ZBRAN
|
||
L2279 .WORD $A ; L2284-L2279
|
||
.WORD CFA
|
||
.WORD COMMA
|
||
.WORD BRAN
|
||
L2283 .WORD $6 ; L2286-L2283
|
||
L2284 .WORD CFA
|
||
.WORD EXEC
|
||
L2286 .WORD QSTAC
|
||
.WORD BRAN
|
||
L2288 .WORD $1C ; L2302-L2288
|
||
L2289 .WORD HERE
|
||
.WORD NUMBER
|
||
.WORD DPL
|
||
.WORD AT
|
||
.WORD ONEP
|
||
.WORD ZBRAN
|
||
L2295 .WORD 8 ; L2299-L2295
|
||
.WORD DLIT
|
||
.WORD BRAN
|
||
L2298 .WORD $6 ; L2301-L2298
|
||
L2299 .WORD DROP
|
||
.WORD LITER
|
||
L2301 .WORD QSTAC
|
||
L2302 .WORD BRAN
|
||
L2303 .WORD $FFC2 ; L2272-L2303
|
||
;
|
||
; IMMEDIATE
|
||
; SCREEN 53 LINE 1
|
||
;
|
||
L2309 .BYTE $89,"IMMEDIAT",$C5
|
||
.WORD L2269; ; link to INTERPRET
|
||
.WORD DOCOL
|
||
.WORD LATES
|
||
.WORD CLIT
|
||
.BYTE $40
|
||
.WORD TOGGL
|
||
.WORD SEMIS
|
||
;
|
||
; VOCABULARY
|
||
; SCREEN 53 LINE 4
|
||
;
|
||
L2321 .BYTE $8A,"VOCABULAR",$D9
|
||
.WORD L2309 ; link to IMMEDIATE
|
||
.WORD DOCOL
|
||
.WORD BUILD
|
||
.WORD LIT,$A081
|
||
.WORD COMMA
|
||
.WORD CURR
|
||
.WORD AT
|
||
.WORD CFA
|
||
.WORD COMMA
|
||
.WORD HERE
|
||
.WORD VOCL
|
||
.WORD AT
|
||
.WORD COMMA
|
||
.WORD VOCL
|
||
.WORD STORE
|
||
.WORD DOES
|
||
DOVOC .WORD TWOP
|
||
.WORD CON
|
||
.WORD STORE
|
||
.WORD SEMIS
|
||
;
|
||
; FORTH
|
||
; SCREEN 53 LINE 9
|
||
;
|
||
L2346 .BYTE $C5,"FORT",$C8
|
||
.WORD L2321 ; link to VOCABULARY
|
||
FORTH .WORD DODOE
|
||
.WORD DOVOC
|
||
.WORD $A081
|
||
XFOR .WORD NTOP ; points to top name in FORTH
|
||
VL0 .WORD 0 ; last vocab link ends at zero
|
||
;
|
||
; DEFINITIONS
|
||
; SCREEN 53 LINE 11
|
||
;
|
||
;
|
||
L2357 .BYTE $8B,"DEFINITION",$D3
|
||
.WORD L2346 ; link to FORTH
|
||
DEFIN .WORD DOCOL
|
||
.WORD CON
|
||
.WORD AT
|
||
.WORD CURR
|
||
.WORD STORE
|
||
.WORD SEMIS
|
||
;
|
||
; (
|
||
; SCREEN 53 LINE 14
|
||
;
|
||
L2369 .BYTE $C1,$A8
|
||
.WORD L2357 ; link to DEFINITIONS
|
||
.WORD DOCOL
|
||
.WORD CLIT
|
||
.BYTE $29
|
||
.WORD WORD
|
||
.WORD SEMIS
|
||
;
|
||
; QUIT
|
||
; SCREEN 54 LINE 2
|
||
;
|
||
L2381 .BYTE $84,"QUI",$D4
|
||
.WORD L2369 ; link to (
|
||
QUIT .WORD DOCOL
|
||
.WORD ZERO
|
||
.WORD BLK
|
||
.WORD STORE
|
||
.WORD LBRAC
|
||
L2388 .WORD RPSTO
|
||
.WORD CR
|
||
.WORD QUERY
|
||
.WORD INTER
|
||
.WORD STATE
|
||
.WORD AT
|
||
.WORD ZEQU
|
||
.WORD ZBRAN
|
||
L2396 .WORD 7 ; L2399-L2396
|
||
.WORD PDOTQ
|
||
.BYTE 2,"OK"
|
||
L2399 .WORD BRAN
|
||
L2400 .WORD $FFE7 ; L2388-L2400
|
||
.WORD SEMIS
|
||
;
|
||
; ABORT
|
||
; SCREEN 54 LINE 7
|
||
;
|
||
L2406 .BYTE $85,"ABOR",$D4
|
||
.WORD L2381 ; link to QUIT
|
||
ABORT .WORD DOCOL
|
||
.WORD SPSTO
|
||
.WORD DECIM
|
||
.WORD DR0
|
||
.WORD CR
|
||
.WORD PDOTQ
|
||
.BYTE 14,"fig-FORTH 1.0"
|
||
.WORD FORTH
|
||
.WORD DEFIN
|
||
.WORD QUIT
|
||
;
|
||
; COLD
|
||
; SCREEN 55 LINE 1
|
||
;
|
||
L2423 .BYTE $84,"COL",$C4
|
||
.WORD L2406 ; link to ABORT
|
||
COLD .WORD *+2
|
||
LDA ORIG+$0C ; from cold start area
|
||
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 #>ABORT ; actually #>(ABORT+2)
|
||
STA IP+1
|
||
LDA #<ABORT+2
|
||
STA IP
|
||
CLD
|
||
LDA #$6C ; ind jump opcode
|
||
STA W-1
|
||
JMP RPSTO+2 ; And off we go !
|
||
;
|
||
; S->D
|
||
; SCREEN 56 LINE 1
|
||
;
|
||
L2453 .BYTE $84,"S->",$C4
|
||
.WORD L2423 ; link to COLD
|
||
STOD .WORD DOCOL
|
||
.WORD DUP
|
||
.WORD ZLESS
|
||
.WORD MINUS
|
||
.WORD SEMIS
|
||
;
|
||
; +-
|
||
; SCREEN 56 LINE 4
|
||
;
|
||
L2464 .BYTE $82,"+",$AD
|
||
.WORD L2453 ; link to S->D
|
||
PM .WORD DOCOL
|
||
.WORD ZLESS
|
||
.WORD ZBRAN
|
||
L2469 .WORD 4
|
||
.WORD MINUS
|
||
L2471 .WORD SEMIS
|
||
;
|
||
; D+-
|
||
; SCREEN 56 LINE 6
|
||
;
|
||
L2476 .BYTE $83,"D+",$AD
|
||
.WORD L2464 ; link to +-
|
||
DPM .WORD DOCOL
|
||
.WORD ZLESS
|
||
.WORD ZBRAN
|
||
L2481 .WORD 4 ; L2483-L2481
|
||
.WORD DMINU
|
||
L2483 .WORD SEMIS
|
||
;
|
||
; ABS
|
||
; SCREEN 56 LINE 9
|
||
;
|
||
L2488 .BYTE $83,"AB",$D3
|
||
.WORD L2476 ; link to D+-
|
||
ABS .WORD DOCOL
|
||
.WORD DUP
|
||
.WORD PM
|
||
.WORD SEMIS
|
||
;
|
||
; DABS
|
||
; SCREEN 56 LINE 10
|
||
;
|
||
L2498 .BYTE $84,"DAB",$D3
|
||
.WORD L2488 ; link to ABS
|
||
DABS .WORD DOCOL
|
||
.WORD DUP
|
||
.WORD DPM
|
||
.WORD SEMIS
|
||
;
|
||
; MIN
|
||
; SCREEN 56 LINE 12
|
||
;
|
||
L2508 .BYTE $83,"MI",$CE
|
||
.WORD L2498 ; link to DABS
|
||
MIN .WORD DOCOL
|
||
.WORD OVER
|
||
.WORD OVER
|
||
.WORD GREAT
|
||
.WORD ZBRAN
|
||
L2515 .WORD 4 ; L2517-L2515
|
||
.WORD SWAP
|
||
L2517 .WORD DROP
|
||
.WORD SEMIS
|
||
;
|
||
; MAX
|
||
; SCREEN 56 LINE 14
|
||
;
|
||
L2523 .BYTE $83,"MA",$D8
|
||
.WORD L2508 ; link to MIN
|
||
MAX .WORD DOCOL
|
||
.WORD OVER
|
||
.WORD OVER
|
||
.WORD LESS
|
||
.WORD ZBRAN
|
||
L2530 .WORD 4 ; L2532-L2530
|
||
.WORD SWAP
|
||
L2532 .WORD DROP
|
||
.WORD SEMIS
|
||
;
|
||
; M*
|
||
; SCREEN 57 LINE 1
|
||
;
|
||
L2538 .BYTE $82,"M",$AA
|
||
.WORD L2523 ; link to MAX
|
||
MSTAR .WORD DOCOL
|
||
.WORD OVER
|
||
.WORD OVER
|
||
.WORD XOR
|
||
.WORD TOR
|
||
.WORD ABS
|
||
.WORD SWAP
|
||
.WORD ABS
|
||
.WORD USTAR
|
||
.WORD RFROM
|
||
.WORD DPM
|
||
.WORD SEMIS
|
||
;
|
||
; M/
|
||
; SCREEN 57 LINE 3
|
||
;
|
||
L2556 .BYTE $82,"M",$AF
|
||
.WORD L2538 ; link to M*
|
||
MSLAS .WORD DOCOL
|
||
.WORD OVER
|
||
.WORD TOR
|
||
.WORD TOR
|
||
.WORD DABS
|
||
.WORD R
|
||
.WORD ABS
|
||
.WORD USLAS
|
||
.WORD RFROM
|
||
.WORD R
|
||
.WORD XOR
|
||
.WORD PM
|
||
.WORD SWAP
|
||
.WORD RFROM
|
||
.WORD PM
|
||
.WORD SWAP
|
||
.WORD SEMIS
|
||
;
|
||
; *
|
||
; SCREEN 57 LINE 7
|
||
;
|
||
L2579 .BYTE $81,$AA
|
||
.WORD L2556 ; link to M/
|
||
STAR .WORD DOCOL
|
||
.WORD USTAR
|
||
.WORD DROP
|
||
.WORD SEMIS
|
||
;
|
||
; /MOD
|
||
; SCREEN 57 LINE 8
|
||
;
|
||
L2589 .BYTE $84,"/MO",$C4
|
||
.WORD L2579 ; link to *
|
||
SLMOD .WORD DOCOL
|
||
.WORD TOR
|
||
.WORD STOD
|
||
.WORD RFROM
|
||
.WORD MSLAS
|
||
.WORD SEMIS
|
||
;
|
||
; /
|
||
; SCREEN 57 LINE 9
|
||
;
|
||
L2601 .BYTE $81,$AF
|
||
.WORD L2589 ; link to /MOD
|
||
SLASH .WORD DOCOL
|
||
.WORD SLMOD
|
||
.WORD SWAP
|
||
.WORD DROP
|
||
.WORD SEMIS
|
||
;
|
||
; MOD
|
||
; SCREEN 57 LINE 10
|
||
;
|
||
L2612 .BYTE $83,"MO",$C4
|
||
.WORD L2601 ; link to /
|
||
MOD .WORD DOCOL
|
||
.WORD SLMOD
|
||
.WORD DROP
|
||
.WORD SEMIS
|
||
;
|
||
; */MOD
|
||
; SCREEN 57 LINE 11
|
||
;
|
||
L2622 .BYTE $85,"*/MO",$C4
|
||
.WORD L2612 ; link to MOD
|
||
SSMOD .WORD DOCOL
|
||
.WORD TOR
|
||
.WORD MSTAR
|
||
.WORD RFROM
|
||
.WORD MSLAS
|
||
.WORD SEMIS
|
||
;
|
||
; */
|
||
; SCREEN 57 LINE 13
|
||
;
|
||
L2634 .BYTE $82,"*",$AF
|
||
.WORD L2622 ; link to */MOD
|
||
SSLAS .WORD DOCOL
|
||
.WORD SSMOD
|
||
.WORD SWAP
|
||
.WORD DROP
|
||
.WORD SEMIS
|
||
;
|
||
; M/MOD
|
||
; SCREEN 57 LINE 14
|
||
;
|
||
L2645 .BYTE $85,"M/MO",$C4
|
||
.WORD L2634 ; link to */
|
||
MSMOD .WORD DOCOL
|
||
.WORD TOR
|
||
.WORD ZERO
|
||
.WORD R
|
||
.WORD USLAS
|
||
.WORD RFROM
|
||
.WORD SWAP
|
||
.WORD TOR
|
||
.WORD USLAS
|
||
.WORD RFROM
|
||
.WORD SEMIS
|
||
;
|
||
; USE
|
||
; SCREEN 58 LINE 1
|
||
;
|
||
L2662 .BYTE $83,"US",$C5
|
||
.WORD L2645 ; link to M/MOD
|
||
USE .WORD DOVAR
|
||
.WORD DAREA
|
||
;
|
||
; PREV
|
||
; SCREEN 58 LINE 2
|
||
;
|
||
L2670 .BYTE $84,"PRE",$D6
|
||
.WORD L2662 ; link to USE
|
||
PREV .WORD DOVAR
|
||
.WORD DAREA
|
||
;
|
||
; +BUF
|
||
; SCREEN 58 LINE 4
|
||
;
|
||
;
|
||
L2678 .BYTE $84,"+BU",$C6
|
||
.WORD L2670 ; link to PREV
|
||
PBUF .WORD DOCOL
|
||
.WORD LIT
|
||
.WORD SSIZE+4 ; hold block #, one sector two num
|
||
.WORD PLUS
|
||
.WORD DUP
|
||
.WORD LIMIT
|
||
.WORD EQUAL
|
||
.WORD ZBRAN
|
||
L2688 .WORD 6 ; L2691-L2688
|
||
.WORD DROP
|
||
.WORD FIRST
|
||
L2691 .WORD DUP
|
||
.WORD PREV
|
||
.WORD AT
|
||
.WORD SUB
|
||
.WORD SEMIS
|
||
;
|
||
; UPDATE
|
||
; SCREEN 58 LINE 8
|
||
;
|
||
L2700 .BYTE $86,"UPDAT",$C5
|
||
.WORD L2678 ; link to +BUF
|
||
UPDAT .WORD DOCOL
|
||
.WORD PREV
|
||
.WORD AT
|
||
.WORD AT
|
||
.WORD LIT,$8000
|
||
.WORD OR
|
||
.WORD PREV
|
||
.WORD AT
|
||
.WORD STORE
|
||
.WORD SEMIS
|
||
;
|
||
; FLUSH
|
||
;
|
||
L2705 .BYTE $85,"FLUS",$C8
|
||
.WORD L2700 ; link to UPDATE
|
||
.WORD DOCOL
|
||
.WORD LIMIT,FIRST,SUB
|
||
.WORD BBUF,CLIT
|
||
.BYTE 4
|
||
.WORD PLUS,SLASH,ONEP
|
||
.WORD ZERO,PDO
|
||
L2835 .WORD LIT,$7FFF,BUFFR
|
||
.WORD DROP,PLOOP
|
||
L2839 .WORD $FFF6 ; L2835-L2839
|
||
.WORD SEMIS
|
||
;
|
||
; EMPTY-BUFFERS
|
||
; SCREEN 58 LINE 11
|
||
;
|
||
L2716 .BYTE $8D,"EMPTY-BUFFER",$D3
|
||
.WORD L2705 ; link to FLUSH
|
||
.WORD DOCOL
|
||
.WORD FIRST
|
||
.WORD LIMIT
|
||
.WORD OVER
|
||
.WORD SUB
|
||
.WORD ERASE
|
||
.WORD SEMIS
|
||
;
|
||
; DR0
|
||
; SCREEN 58 LINE 14
|
||
;
|
||
L2729 .BYTE $83,"DR",$B0
|
||
.WORD L2716 ; link to EMPTY-BUFFERS
|
||
DR0 .WORD DOCOL
|
||
.WORD ZERO
|
||
.WORD OFSET
|
||
.WORD STORE
|
||
.WORD SEMIS
|
||
;
|
||
; DR1
|
||
; SCREEN 58 LINE 15
|
||
;
|
||
L2740 .BYTE $83,"DR",$B1
|
||
.WORD L2729 ; link to DR0
|
||
.WORD DOCOL
|
||
.WORD LIT,SECTR ; sectors per drive
|
||
.WORD OFSET
|
||
.WORD STORE
|
||
.WORD SEMIS
|
||
;
|
||
; BUFFER
|
||
; SCREEN 59 LINE 1
|
||
;
|
||
L2751 .BYTE $86,"BUFFE",$D2
|
||
.WORD L2740 ; link to DR1
|
||
BUFFR .WORD DOCOL
|
||
.WORD USE
|
||
.WORD AT
|
||
.WORD DUP
|
||
.WORD TOR
|
||
L2758 .WORD PBUF
|
||
.WORD ZBRAN
|
||
L2760 .WORD $FFFC ; L2758-L2760
|
||
.WORD USE
|
||
.WORD STORE
|
||
.WORD R
|
||
.WORD AT
|
||
.WORD ZLESS
|
||
.WORD ZBRAN
|
||
L2767 .WORD $14 ; L2776-L2767
|
||
.WORD R
|
||
.WORD TWOP
|
||
.WORD R
|
||
.WORD AT
|
||
.WORD LIT,$7FFF
|
||
.WORD ANDD
|
||
.WORD ZERO
|
||
; .WORD RSLW
|
||
.WORD RSW
|
||
L2776 .WORD R
|
||
.WORD STORE
|
||
.WORD R
|
||
.WORD PREV
|
||
.WORD STORE
|
||
.WORD RFROM
|
||
.WORD TWOP
|
||
.WORD SEMIS
|
||
;
|
||
; BLOCK
|
||
; SCREEN 60 LINE 1
|
||
;
|
||
L2788 .BYTE $85,"BLOC",$CB
|
||
.WORD L2751 ; link to BUFFER
|
||
BLOCK .WORD DOCOL
|
||
.WORD OFSET
|
||
.WORD AT
|
||
.WORD PLUS
|
||
.WORD TOR
|
||
.WORD PREV
|
||
.WORD AT
|
||
.WORD DUP
|
||
.WORD AT
|
||
.WORD R
|
||
.WORD SUB
|
||
.WORD DUP
|
||
.WORD PLUS
|
||
.WORD ZBRAN
|
||
L2804 .WORD $34 ; L2830-L2804
|
||
L2805 .WORD PBUF
|
||
.WORD ZEQU
|
||
.WORD ZBRAN
|
||
L2808 .WORD $14 ; L2818-L2808
|
||
.WORD DROP
|
||
.WORD R
|
||
.WORD BUFFR
|
||
.WORD DUP
|
||
.WORD R
|
||
.WORD ONE
|
||
; .WORD RSLW
|
||
.WORD RSW
|
||
.WORD TWO
|
||
.WORD SUB
|
||
L2818 .WORD DUP
|
||
.WORD AT
|
||
.WORD R
|
||
.WORD SUB
|
||
.WORD DUP
|
||
.WORD PLUS
|
||
.WORD ZEQU
|
||
.WORD ZBRAN
|
||
L2826 .WORD $FFD6 ; L2805-L2826
|
||
.WORD DUP
|
||
.WORD PREV
|
||
.WORD STORE
|
||
L2830 .WORD RFROM
|
||
.WORD DROP
|
||
.WORD TWOP
|
||
.WORD SEMIS ; end of BLOCK
|
||
;
|
||
;
|
||
; (LINE)
|
||
; SCREEN 61 LINE 2
|
||
;
|
||
L2838 .BYTE $86,"(LINE",$A9
|
||
.WORD L2788 ; link to BLOCK
|
||
PLINE .WORD DOCOL
|
||
.WORD TOR
|
||
.WORD CSLL
|
||
.WORD BBUF
|
||
.WORD SSMOD
|
||
.WORD RFROM
|
||
.WORD BSCR
|
||
.WORD STAR
|
||
.WORD PLUS
|
||
.WORD BLOCK
|
||
.WORD PLUS
|
||
.WORD CSLL
|
||
.WORD SEMIS
|
||
;
|
||
; .LINE
|
||
; SCREEN 61 LINE 6
|
||
;
|
||
L2857 .BYTE $85,".LIN",$C5
|
||
.WORD L2838 ; link to (LINE)
|
||
DLINE .WORD DOCOL
|
||
.WORD PLINE
|
||
.WORD DTRAI
|
||
.WORD TYPE
|
||
.WORD SEMIS
|
||
;
|
||
; MESSAGE
|
||
; SCREEN 61 LINE 9
|
||
;
|
||
L2868 .BYTE $87,"MESSAG",$C5
|
||
.WORD L2857 ; link to .LINE
|
||
MESS .WORD DOCOL
|
||
.WORD WARN
|
||
.WORD AT
|
||
.WORD ZBRAN
|
||
L2874 .WORD $1B ; L2888-L2874
|
||
.WORD DDUP
|
||
.WORD ZBRAN
|
||
L2877 .WORD $11 ; L2886-L2877
|
||
.WORD CLIT
|
||
.BYTE 4
|
||
.WORD OFSET
|
||
.WORD AT
|
||
.WORD BSCR
|
||
.WORD SLASH
|
||
.WORD SUB
|
||
.WORD DLINE
|
||
L2886 .WORD BRAN
|
||
L2887 .WORD 13 ; L2891-L2887
|
||
L2888 .WORD PDOTQ
|
||
.BYTE 6,"MSG # "
|
||
.WORD DOT
|
||
L2891 .WORD SEMIS
|
||
;
|
||
; LOAD
|
||
; SCREEN 62 LINE 2
|
||
;
|
||
L2896 .BYTE $84,"LOA",$C4
|
||
.WORD L2868 ; link to MESSAGE
|
||
LOAD .WORD DOCOL
|
||
.WORD BLK
|
||
.WORD AT
|
||
.WORD TOR
|
||
.WORD IN
|
||
.WORD AT
|
||
.WORD TOR
|
||
.WORD ZERO
|
||
.WORD IN
|
||
.WORD STORE
|
||
.WORD BSCR
|
||
.WORD STAR
|
||
.WORD BLK
|
||
.WORD STORE
|
||
.WORD INTER
|
||
.WORD RFROM
|
||
.WORD IN
|
||
.WORD STORE
|
||
.WORD RFROM
|
||
.WORD BLK
|
||
.WORD STORE
|
||
.WORD SEMIS
|
||
;
|
||
; -->
|
||
; SCREEN 62 LINE 6
|
||
;
|
||
L2924 .BYTE $C3,"--",$BE
|
||
.WORD L2896 ; link to LOAD
|
||
.WORD DOCOL
|
||
.WORD QLOAD
|
||
.WORD ZERO
|
||
.WORD IN
|
||
.WORD STORE
|
||
.WORD BSCR
|
||
.WORD BLK
|
||
.WORD AT
|
||
.WORD OVER
|
||
.WORD MOD
|
||
.WORD SUB
|
||
.WORD BLK
|
||
.WORD PSTOR
|
||
.WORD SEMIS
|
||
;
|
||
; XEMIT writes one ascii character to terminal
|
||
;
|
||
;
|
||
XEMIT
|
||
; TYA
|
||
; SEC
|
||
; LDY #$1A
|
||
; ADC (UP),Y
|
||
; STA (UP),Y
|
||
; INY ; bump user varaible OUT
|
||
; LDA #0
|
||
; ADC (UP),Y
|
||
; STA (UP),Y
|
||
LDA 0,X ; fetch character to output
|
||
; STX XSAVE
|
||
JSR OUTCH ; and display it
|
||
; LDX XSAVE
|
||
JMP POP
|
||
;
|
||
; XKEY reads one terminal keystroke to stack
|
||
;
|
||
;
|
||
XKEY
|
||
; STX XSAVE
|
||
JSR INCH ; might otherwise clobber it while
|
||
; LDX XSAVE ; inputting a char to accumulator
|
||
JMP PUSHOA
|
||
;
|
||
; XQTER leaves a boolean representing terminal break
|
||
;
|
||
;
|
||
XQTER jsr cbrk ; if Ctrl-c, set C else clear C
|
||
lda #$00 ; 0
|
||
rol ; move carry to bit 0
|
||
JMP PUSHOA
|
||
;
|
||
; XCR displays a CR and LF to terminal
|
||
;
|
||
;
|
||
XCR
|
||
; STX XSAVE
|
||
JSR TCR ; use monitor call
|
||
; LDX XSAVE
|
||
JMP NEXT
|
||
;
|
||
; *** -DISC
|
||
; machine level sector R/W
|
||
;
|
||
;L3030 .BYTE $85,"-DIS",$C3
|
||
; .WORD L2924 ; link to -->
|
||
;DDISC .WORD *+2
|
||
; LDA 0,X
|
||
; STA $C60C
|
||
; STA $C60D ; store sector number
|
||
; LDA 2,X
|
||
; STA $C60A
|
||
; STA $C60B ; store track number
|
||
; LDA 4,X
|
||
; STA $C4CD
|
||
; STA $C4CE ; store drive number
|
||
; STX XSAVE
|
||
; LDA $C4DA ; sense read or write
|
||
; BNE L3032
|
||
; JSR $E1FE
|
||
; JMP L3040
|
||
;L3032 JSR $E262
|
||
;L3040 JSR $E3EF ; head up motor off
|
||
; LDX XSAVE
|
||
; LDA $C4E1 ; report error code
|
||
; STA 4,X
|
||
; JMP POPTWO
|
||
;
|
||
; -BCD
|
||
; Convert binary value to BCD
|
||
;
|
||
L3050 .BYTE $84,"-BC",$C4
|
||
.WORD L2924 ; link to -DISC
|
||
DBCD .WORD DOCOL
|
||
.WORD ZERO,CLIT
|
||
.BYTE 10
|
||
.WORD USLAS,CLIT
|
||
.BYTE 16
|
||
.WORD STAR,OR,SEMIS
|
||
|
||
;
|
||
; *** R/W
|
||
; Read or write one sector
|
||
;
|
||
;L3060 .BYTE $83,"R/",$D7
|
||
; .WORD L3050 ; link to -BCD
|
||
;RSLW .WORD DOCOL
|
||
; .WORD ZEQU,LIT,$C4DA,CSTOR
|
||
; .WORD SWAP,ZERO,STORE
|
||
; .WORD ZERO,OVER,GREAT,OVER
|
||
; .WORD LIT,SECTL-1,GREAT,OR,CLIT
|
||
; .BYTE 6
|
||
; .WORD QERR
|
||
; .WORD ZERO,LIT,SECTR,USLAS,ONEP
|
||
; .WORD SWAP,ZERO,CLIT
|
||
; .BYTE $12
|
||
; .WORD USLAS,DBCD,SWAP,ONEP
|
||
; .WORD DBCD,DDISC,CLIT
|
||
; .BYTE 8
|
||
; .WORD QERR
|
||
; .WORD SEMIS
|
||
;
|
||
;
|
||
; RSW
|
||
; Read or write one sector
|
||
;
|
||
L3070 .BYTE $83,"RS",$D7
|
||
.WORD L3050 ; link to R/W
|
||
RSW .WORD DOCOL
|
||
.WORD TOR
|
||
.WORD BBUF, STAR, LIT, $4000, PLUS, DUP
|
||
.WORD LIT, $6800, GREAT, LIT, $6, QERR
|
||
.WORD RFROM, ZBRAN, $4, SWAP
|
||
.WORD BBUF, CMOVE
|
||
.WORD SEMIS
|
||
;
|
||
;
|
||
; '
|
||
; SCREEN 72 LINE 2
|
||
;
|
||
L3202 .BYTE $C1,$A7
|
||
.WORD L3070 ; link to RSW
|
||
TICK .WORD DOCOL
|
||
.WORD DFIND
|
||
.WORD ZEQU
|
||
.WORD ZERO
|
||
.WORD QERR
|
||
.WORD DROP
|
||
.WORD LITER
|
||
.WORD SEMIS
|
||
;
|
||
; FORGET
|
||
; Altered from model
|
||
; SCREEN 72 LINE 6
|
||
;
|
||
L3217 .BYTE $86,"FORGE",$D4
|
||
.WORD L3202 ; link to ' TICK
|
||
FORG .WORD DOCOL
|
||
.WORD TICK,NFA,DUP
|
||
.WORD FENCE,AT,ULESS,CLIT
|
||
.BYTE $15
|
||
.WORD QERR,TOR,VOCL,AT
|
||
L3220 .WORD R,OVER,ULESS
|
||
.WORD ZBRAN,L3225-*
|
||
.WORD FORTH,DEFIN,AT,DUP
|
||
.WORD VOCL,STORE
|
||
.WORD BRAN,$FFFF-24+1 ; L3220-*
|
||
L3225 .WORD DUP,CLIT
|
||
.BYTE 4
|
||
.WORD SUB
|
||
L3228 .WORD PFA,LFA,AT
|
||
.WORD DUP,R,ULESS
|
||
.WORD ZBRAN,$FFFF-14+1 ; L3228-*
|
||
.WORD OVER,TWO,SUB,STORE
|
||
.WORD AT,DDUP,ZEQU
|
||
.WORD ZBRAN,$FFFF-39+1 ; L3225-*
|
||
.WORD RFROM,DP,STORE
|
||
.WORD SEMIS
|
||
;
|
||
; BACK
|
||
; SCREEN 73 LINE 1
|
||
;
|
||
L3250 .BYTE $84,"BAC",$CB
|
||
.WORD L3217 ; link to FORGET
|
||
BACK .WORD DOCOL
|
||
.WORD HERE
|
||
.WORD SUB
|
||
.WORD COMMA
|
||
.WORD SEMIS
|
||
;
|
||
; BEGIN
|
||
; SCREEN 73 LINE 3
|
||
;
|
||
L3261 .BYTE $C5,"BEGI",$CE
|
||
.WORD L3250 ; link to BACK
|
||
.WORD DOCOL
|
||
.WORD QCOMP
|
||
.WORD HERE
|
||
.WORD ONE
|
||
.WORD SEMIS
|
||
;
|
||
; ENDIF
|
||
; SCREEN 73 LINE 5
|
||
;
|
||
L3273 .BYTE $C5,"ENDI",$C6
|
||
.WORD L3261 ; link to BEGIN
|
||
ENDIF .WORD DOCOL
|
||
.WORD QCOMP
|
||
.WORD TWO
|
||
.WORD QPAIR
|
||
.WORD HERE
|
||
.WORD OVER
|
||
.WORD SUB
|
||
.WORD SWAP
|
||
.WORD STORE
|
||
.WORD SEMIS
|
||
;
|
||
; THEN
|
||
; SCREEN 73 LINE 7
|
||
;
|
||
L3290 .BYTE $C4,"THE",$CE
|
||
.WORD L3273 ; link to ENDIF
|
||
.WORD DOCOL
|
||
.WORD ENDIF
|
||
.WORD SEMIS
|
||
;
|
||
; DO
|
||
; SCREEN 73 LINE 9
|
||
;
|
||
L3300 .BYTE $C2,"D",$CF
|
||
.WORD L3290 ; link to THEN
|
||
.WORD DOCOL
|
||
.WORD COMP
|
||
.WORD PDO
|
||
.WORD HERE
|
||
.WORD THREE
|
||
.WORD SEMIS
|
||
;
|
||
; LOOP
|
||
; SCREEN 73 LINE 11
|
||
;
|
||
;
|
||
L3313 .BYTE $C4,"LOO",$D0
|
||
.WORD L3300 ; link to DO
|
||
.WORD DOCOL
|
||
.WORD THREE
|
||
.WORD QPAIR
|
||
.WORD COMP
|
||
.WORD PLOOP
|
||
.WORD BACK
|
||
.WORD SEMIS
|
||
;
|
||
; +LOOP
|
||
; SCREEN 73 LINE 13
|
||
;
|
||
L3327 .BYTE $C5,"+LOO",$D0
|
||
.WORD L3313 ; link to LOOP
|
||
.WORD DOCOL
|
||
.WORD THREE
|
||
.WORD QPAIR
|
||
.WORD COMP
|
||
.WORD PPLOO
|
||
.WORD BACK
|
||
.WORD SEMIS
|
||
;
|
||
; UNTIL
|
||
; SCREEN 73 LINE 15
|
||
;
|
||
L3341 .BYTE $C5,"UNTI",$CC
|
||
.WORD L3327 ; link to +LOOP
|
||
UNTIL .WORD DOCOL
|
||
.WORD ONE
|
||
.WORD QPAIR
|
||
.WORD COMP
|
||
.WORD ZBRAN
|
||
.WORD BACK
|
||
.WORD SEMIS
|
||
;
|
||
; END
|
||
; SCREEN 74 LINE 1
|
||
;
|
||
L3355 .BYTE $C3,"EN",$C4
|
||
.WORD L3341 ; link to UNTIL
|
||
.WORD DOCOL
|
||
.WORD UNTIL
|
||
.WORD SEMIS
|
||
;
|
||
; AGAIN
|
||
; SCREEN 74 LINE 3
|
||
;
|
||
L3365 .BYTE $C5,"AGAI",$CE
|
||
.WORD L3355 ; link to END
|
||
AGAIN .WORD DOCOL
|
||
.WORD ONE
|
||
.WORD QPAIR
|
||
.WORD COMP
|
||
.WORD BRAN
|
||
.WORD BACK
|
||
.WORD SEMIS
|
||
;
|
||
; REPEAT
|
||
; SCREEN 74 LINE 5
|
||
;
|
||
L3379 .BYTE $C6,"REPEA",$D4
|
||
.WORD L3365 ; link to AGAIN
|
||
.WORD DOCOL
|
||
.WORD TOR
|
||
.WORD TOR
|
||
.WORD AGAIN
|
||
.WORD RFROM
|
||
.WORD RFROM
|
||
.WORD TWO
|
||
.WORD SUB
|
||
.WORD ENDIF
|
||
.WORD SEMIS
|
||
;
|
||
; IF
|
||
; SCREEN 74 LINE 8
|
||
;
|
||
L3396 .BYTE $C2,"I",$C6
|
||
.WORD L3379 ; link to REPEAT
|
||
IF .WORD DOCOL
|
||
.WORD COMP
|
||
.WORD ZBRAN
|
||
.WORD HERE
|
||
.WORD ZERO
|
||
.WORD COMMA
|
||
.WORD TWO
|
||
.WORD SEMIS
|
||
;
|
||
; ELSE
|
||
; SCREEN 74 LINE 10
|
||
;
|
||
L3411 .BYTE $C4,"ELS",$C5
|
||
.WORD L3396 ; link to IF
|
||
.WORD DOCOL
|
||
.WORD TWO
|
||
.WORD QPAIR
|
||
.WORD COMP
|
||
.WORD BRAN
|
||
.WORD HERE
|
||
.WORD ZERO
|
||
.WORD COMMA
|
||
.WORD SWAP
|
||
.WORD TWO
|
||
.WORD ENDIF
|
||
.WORD TWO
|
||
.WORD SEMIS
|
||
;
|
||
; WHILE
|
||
; SCREEN 74 LINE 13
|
||
;
|
||
L3431 .BYTE $C5,"WHIL",$C5
|
||
.WORD L3411 ; link to ELSE
|
||
.WORD DOCOL
|
||
.WORD IF
|
||
.WORD TWOP
|
||
.WORD SEMIS
|
||
;
|
||
; SPACES
|
||
; SCREEN 75 LINE 1
|
||
;
|
||
L3442 .BYTE $86,"SPACE",$D3
|
||
.WORD L3431 ; link to WHILE
|
||
SPACS .WORD DOCOL
|
||
.WORD ZERO
|
||
.WORD MAX
|
||
.WORD DDUP
|
||
.WORD ZBRAN
|
||
L3449 .WORD $0C ; L3455-L3449
|
||
.WORD ZERO
|
||
.WORD PDO
|
||
L3452 .WORD SPACE
|
||
.WORD PLOOP
|
||
L3454 .WORD $FFFC ; L3452-L3454
|
||
L3455 .WORD SEMIS
|
||
;
|
||
; <#
|
||
; SCREEN 75 LINE 3
|
||
;
|
||
L3460 .BYTE $82,"<",$A3
|
||
.WORD L3442 ; link to SPACES
|
||
BDIGS .WORD DOCOL
|
||
.WORD PAD
|
||
.WORD HLD
|
||
.WORD STORE
|
||
.WORD SEMIS
|
||
;
|
||
; #>
|
||
; SCREEN 75 LINE 5
|
||
;
|
||
L3471 .BYTE $82,"#",$BE
|
||
.WORD L3460 ; link to <#
|
||
EDIGS .WORD DOCOL
|
||
.WORD DROP
|
||
.WORD DROP
|
||
.WORD HLD
|
||
.WORD AT
|
||
.WORD PAD
|
||
.WORD OVER
|
||
.WORD SUB
|
||
.WORD SEMIS
|
||
;
|
||
; SIGN
|
||
; SCREEN 75 LINE 7
|
||
;
|
||
L3486 .BYTE $84,"SIG",$CE
|
||
.WORD L3471 ; link to #>
|
||
SIGN .WORD DOCOL
|
||
.WORD ROT
|
||
.WORD ZLESS
|
||
.WORD ZBRAN
|
||
L3492 .WORD $7 ; L3496-L3492
|
||
.WORD CLIT
|
||
.BYTE $2D
|
||
.WORD HOLD
|
||
L3496 .WORD SEMIS
|
||
;
|
||
; #
|
||
; SCREEN 75 LINE 9
|
||
;
|
||
L3501 .BYTE $81,$A3
|
||
.WORD L3486 ; link to SIGN
|
||
DIG .WORD DOCOL
|
||
.WORD BASE
|
||
.WORD AT
|
||
.WORD MSMOD
|
||
.WORD ROT
|
||
.WORD CLIT
|
||
.BYTE 9
|
||
.WORD OVER
|
||
.WORD LESS
|
||
.WORD ZBRAN
|
||
L3513 .WORD 7 ; L3517-L3513
|
||
.WORD CLIT
|
||
.BYTE 7
|
||
.WORD PLUS
|
||
L3517 .WORD CLIT
|
||
.BYTE $30
|
||
.WORD PLUS
|
||
.WORD HOLD
|
||
.WORD SEMIS
|
||
;
|
||
; #S
|
||
; SCREEN 75 LINE 12
|
||
;
|
||
L3526 .BYTE $82,"#",$D3
|
||
.WORD L3501 ; link to #
|
||
DIGS .WORD DOCOL
|
||
L3529 .WORD DIG
|
||
.WORD OVER
|
||
.WORD OVER
|
||
.WORD OR
|
||
.WORD ZEQU
|
||
.WORD ZBRAN
|
||
L3535 .WORD $FFF4 ; L3529-L3535
|
||
.WORD SEMIS
|
||
;
|
||
; D.R
|
||
; SCREEN 76 LINE 1
|
||
;
|
||
L3541 .BYTE $83,"D.",$D2
|
||
.WORD L3526 ; link to #S
|
||
DDOTR .WORD DOCOL
|
||
.WORD TOR
|
||
.WORD SWAP
|
||
.WORD OVER
|
||
.WORD DABS
|
||
.WORD BDIGS
|
||
.WORD DIGS
|
||
.WORD SIGN
|
||
.WORD EDIGS
|
||
.WORD RFROM
|
||
.WORD OVER
|
||
.WORD SUB
|
||
.WORD SPACS
|
||
.WORD TYPE
|
||
.WORD SEMIS
|
||
;
|
||
; D.
|
||
; SCREEN 76 LINE 5
|
||
;
|
||
L3562 .BYTE $82,"D",$AE
|
||
.WORD L3541 ; link to D.R
|
||
DDOT .WORD DOCOL
|
||
.WORD ZERO
|
||
.WORD DDOTR
|
||
.WORD SPACE
|
||
.WORD SEMIS
|
||
;
|
||
; .R
|
||
; SCREEN 76 LINE 7
|
||
;
|
||
L3573 .BYTE $82,".",$D2
|
||
.WORD L3562 ; link to D.
|
||
DOTR .WORD DOCOL
|
||
.WORD TOR
|
||
.WORD STOD
|
||
.WORD RFROM
|
||
.WORD DDOTR
|
||
.WORD SEMIS
|
||
;
|
||
; .
|
||
; SCREEN 76 LINE 9
|
||
;
|
||
L3585 .BYTE $81,$AE
|
||
.WORD L3573 ; link to .R
|
||
DOT .WORD DOCOL
|
||
.WORD STOD
|
||
.WORD DDOT
|
||
.WORD SEMIS
|
||
;
|
||
; ?
|
||
; SCREEN 76 LINE 11
|
||
;
|
||
L3595 .BYTE $81,$BF
|
||
.WORD L3585 ; link to .
|
||
QUES .WORD DOCOL
|
||
.WORD AT
|
||
.WORD DOT
|
||
.WORD SEMIS
|
||
;
|
||
; LIST
|
||
; SCREEN 77 LINE 2
|
||
;
|
||
L3605 .BYTE $84,"LIS",$D4
|
||
.WORD L3595 ; link to ?
|
||
LIST .WORD DOCOL
|
||
.WORD DECIM
|
||
.WORD CR
|
||
.WORD DUP
|
||
.WORD SCR
|
||
.WORD STORE
|
||
.WORD PDOTQ
|
||
.BYTE 6,"SCR # "
|
||
.WORD DOT
|
||
.WORD CLIT
|
||
.BYTE 16
|
||
.WORD ZERO
|
||
.WORD PDO
|
||
L3620 .WORD CR
|
||
.WORD I
|
||
.WORD THREE
|
||
.WORD DOTR
|
||
.WORD SPACE
|
||
.WORD I
|
||
.WORD SCR
|
||
.WORD AT
|
||
.WORD DLINE
|
||
.WORD PLOOP
|
||
L3630 .WORD $FFEC
|
||
.WORD CR
|
||
.WORD SEMIS
|
||
;
|
||
; INDEX
|
||
; SCREEN 77 LINE 7
|
||
;
|
||
L3637 .BYTE $85,"INDE",$D8
|
||
.WORD L3605 ; link to LIST
|
||
.WORD DOCOL
|
||
.WORD CR
|
||
.WORD ONEP
|
||
.WORD SWAP
|
||
.WORD PDO
|
||
L3647 .WORD CR
|
||
.WORD I
|
||
.WORD THREE
|
||
.WORD DOTR
|
||
.WORD SPACE
|
||
.WORD ZERO
|
||
.WORD I
|
||
.WORD DLINE
|
||
.WORD QTERM
|
||
.WORD ZBRAN
|
||
L3657 .WORD 4 ; L3659-L3657
|
||
.WORD LEAVE
|
||
L3659 .WORD PLOOP
|
||
L3660 .WORD $FFE6 ; L3647-L3660
|
||
.WORD CLIT
|
||
.BYTE $0C ; form feed for printer
|
||
.WORD EMIT
|
||
.WORD SEMIS
|
||
;
|
||
; TRIAD
|
||
; SCREEN 77 LINE 12
|
||
;
|
||
L3666 .BYTE $85,"TRIA",$C4
|
||
.WORD L3637 ; link to INDEX
|
||
.WORD DOCOL
|
||
.WORD THREE
|
||
.WORD SLASH
|
||
.WORD THREE
|
||
.WORD STAR
|
||
.WORD THREE
|
||
.WORD OVER
|
||
.WORD PLUS
|
||
.WORD SWAP
|
||
.WORD PDO
|
||
L3681 .WORD CR
|
||
.WORD I
|
||
.WORD LIST
|
||
.WORD PLOOP
|
||
L3685 .WORD $FFF8 ; L3681-L3685
|
||
.WORD CR
|
||
.WORD CLIT
|
||
.BYTE $F
|
||
.WORD MESS
|
||
.WORD CR
|
||
.WORD CLIT
|
||
.BYTE $0C ; form feed for printer
|
||
.WORD EMIT
|
||
.WORD SEMIS
|
||
;
|
||
; VLIST
|
||
; SCREEN 78 LINE 2
|
||
;
|
||
;
|
||
L3696 .BYTE $85,"VLIS",$D4
|
||
.WORD L3666 ; link to TRIAD
|
||
VLIST .WORD DOCOL
|
||
.WORD CLIT
|
||
.BYTE $80
|
||
.WORD OUT
|
||
.WORD STORE
|
||
.WORD CON
|
||
.WORD AT
|
||
.WORD AT
|
||
L3706 .WORD OUT
|
||
.WORD AT
|
||
.WORD CSLL
|
||
.WORD GREAT
|
||
.WORD ZBRAN
|
||
L3711 .WORD $A ; L3716-L3711
|
||
.WORD CR
|
||
.WORD ZERO
|
||
.WORD OUT
|
||
.WORD STORE
|
||
L3716 .WORD DUP
|
||
.WORD IDDOT
|
||
.WORD SPACE
|
||
.WORD SPACE
|
||
.WORD PFA
|
||
.WORD LFA
|
||
.WORD AT
|
||
.WORD DUP
|
||
.WORD ZEQU
|
||
.WORD QTERM
|
||
.WORD OR
|
||
.WORD ZBRAN
|
||
L3728 .WORD $FFD4 ; L3706-L3728
|
||
.WORD DROP
|
||
.WORD SEMIS
|
||
;
|
||
; MON
|
||
; SCREEN 79 LINE 3
|
||
;
|
||
NTOP .BYTE $83,"MO",$CE
|
||
.WORD L3696 ; link to VLIST
|
||
MON .WORD *+2
|
||
JMP (RESvector) ; back to SBC Monitor
|
||
; STX XSAVE
|
||
; BRK ; break to monitor which is assumed
|
||
; LDX XSAVE ; to save this as reentry point
|
||
; JMP NEXT
|
||
;
|
||
TOP ; end of listing
|
||
|