+++ /dev/null
- OPT PRT
-
-* fig-FORTH FOR 6809, converted by unintelligent conversion from 6800 source.
-* ASSEMBLY SOURCE LISTING
-
-* RELEASE 1
-* MAY 1979
-* WITH COMPILER SECURITY
-* AND VARIABLE LENGTH NAMES
-
-* This public domain publication is provided
-* through the courtesy of:
-* FORTH
-* INTEREST
-* GROUP
-* fig
-
-* P.O. Box 8231 - San Jose, CA 95155 - (408) 277-0668
-* Further distribution must include this notice.
- PAGE
- NAM Copyright:FORTH Interest Group
- OPT NOG,PAG
-* filename FTH7.21
-* === FORTH-6800 06-06-79 21:OO
-
-
-* This listing is in the PUBLIC DOMAIN and
-* may be freely copied or published with the
-* restriction that a credit line is printed
-* with the material, crediting the
-* authors and the FORTH INTEREST GROUP.
-
-* === by Dave Lion,
-* === with help from
-* === Bob Smith,
-* === LaFarr Stuart,
-* === The Forth Interest Group
-* === PO Box 1105
-* === San Carlos, CA 94070
-* === and
-* === Unbounded Computing
-* === 1134-K Aster Ave.
-* === Sunnyvale, CA 94086
-*
-* This version was developed on an AMI EVK 300 PROTO
-* system using an ACIA for the I/O. All terminal 1/0
-* is done in three subroutines:
-* PEMIT ( word # 182 )
-* PKEY ( 183 )
-* PQTERM ( 184 )
-*
-* The FORTH words for disc related I/O follow the model
-* of the FORTH Interest Group, but have not been
-* tested using a real disc.
-*
-* Addresses in this implementation reflect the fact that,
-* on the development system, it was convenient to
-* write-protect memory at hex 1000, and leave the first
-* 4K bytes write-enabled. As a consequence, code from
-* location $1000 to lable ZZZZ could be put in ROM.
-* Minor deviations from the model were made in the
-* initialization and words ?STACK and FORGET
-* in order to do this.
-*
-
-
-*
-NBLK EQU 4 ; # of disc buffer blocks for virtual memory
-MEMEND EQU 132*NBLK+$3000 ; end of ram
-* each block is 132 bytes in size,
-* holding 128 characters
-*
-MEMTOP EQU $3FFF ; absolute end of all ram
-ACIAC EQU $FBCE ; the ACIA control address and
-ACIAD EQU ACIAC+1 ; data address for PROTO
- PAGE
-* MEMORY MAP for this 16K system:
-* ( positioned so that systems with 4k byte write-
-* protected segments can write protect FORTH )
-*
-* addr. contents pointer init by
-* **** ******************************* ******* ******
-* 3FFF HI
-* substitute for disc mass memory
-* 3210 LO,MEMEND
-* 320F
-* 4 buffer sectors of VIRTUAL MEMORY
-* 3000 FIRST
-* >>>>>> memory from here up must be RAM <<<<<<
-*
-* 27FF
-* 6k of romable "FORTH" <== IP ABORT
-* <== W
-* the VIRTUAL FORTH MACHINE
-*
-* 1004 <<< WARM START ENTRY >>>
-* 1000 <<< COLD START ENTRY >>>
-*
-* >>>>>> memory from here down must be RAM <<<<<<
-* FFE RETURN STACK base <== RP RINIT
-*
-* FB4
-* INPUT LINE BUFFER
-* holds up to 132 characters
-* and is scanned upward by IN
-* starting at TIB
-* F30 <== IN TIB
-* F2F DATA STACK <== SP SP0,SINIT
-* | grows downward from F2F
-* v
-* - -
-* |
-* I DICTIONARY grows upward
-*
-* 183 end of ram-dictionary. <== DP DPINIT
-* "TASK"
-*
-* 150 "FORTH" ( a word ) <=, <== CONTEXT
-* `==== CURRENT
-* 148 start of ram-dictionary.
-*
-* 100 user #l table of variables <= UP DPINIT
-* F0 registers & pointers for the virtual machine
-* scratch area used by various words
-* E0 lowest address used by FORTH
-*
-* 0000
- PAGE
-***
-*
-* CONVENTIONS USED IN THIS PROGRAM ARE AS FOLLOWS :
-*
-* IP points to the current instruction ( pre-increment mode )
-* RP points to second free byte (first free word) in return stack
-* SP (hardware SP) points to first free byte in data stack
-*
-* when A ANDB hold one 16 bit FORTH data word,
-* A contains the high byte, B, the low byte.
-***
-
-
-
-
- ORG $E0 ; variables
-
-
-N RMB 10 ; used as scratch by (FIND),ENCLOSE,CMOVE,EMIT,KEY,
-* SP@,SWAP,DOES>,COLD
-
-
-* These locations are used by the TRACE routine :
-
-TRLIM RMB 1 ; the count for tracing without user intervention
-TRACEM RMB 1 ; non-zero = trace mode
-BRKPT RMB 2 ; the breakpoint address at which
-* ; the program will go into trace mode
-VECT RMB 2 ; vector to machine code
-* (only needed if the TRACE routine is resident)
-
-
-* Registers used by the FORTH virtual machine:
-* Starting at $OOFO:
-
-
-W RMB 2 ; the instruction register points to 6800 code
-IP RMB 2 ; the instruction pointer points to pointer to 6800 code
-RP RMB 2 ; the return stack pointer
-UP RMB 2 ; the pointer to base of current user's 'USER' table
-* ( altered during multi-tasking )
-*
- PAGE
-* This system is shown with one user, but additional users
-* may be added by allocating additional user tables:
-* UORIG2 RMB 64 data table for user #2
-*
-*
-* Some of this stuff gets initialized during
-* COLD start and WARM start:
-* [ names correspond to FORTH words of similar (no X) name ]
-*
- ORG $100
-UORIG RMB 6 ; 3 reserved variables
-XSPZER RMB 2 ; initial top of data stack for this user
-XRZERO RMB 2 ; initial top of return stack
-XTIB RMB 2 ; start of terminal input buffer
-XWIDTH RMB 2 ; name field width
-XWARN RMB 2 ; warning message mode (0 = no disc)
-XFENCE RMB 2 ; fence for FORGET
-XDP RMB 2 ; dictionary pointer
-XVOCL RMB 2 ; vocabulary linking
-XBLK RMB 2 ; disc block being accessed
-XIN RMB 2 ; scan pointer into the block
-XOUT RMB 2 ; cursor position
-XSCR RMB 2 ; disc screen being accessed ( O=terminal )
-XOFSET RMB 2 ; disc sector offset for multi-disc
-XCONT RMB 2 ; last word in primary search vocabulary
-XCURR RMB 2 ; last word in extensible vocabulary
-XSTATE RMB 2 ; flag for 'interpret' or 'compile' modes
-XBASE RMB 2 ; number base for I/O numeric conversion
-XDPL RMB 2 ; decimal point place
-XFLD RMB 2
-XCSP RMB 2 ; current stack position, for compile checks
-XRNUM RMB 2
-XHLD RMB 2
-XDELAY RMB 2 ; carriage return delay count
-XCOLUM RMB 2 ; carriage width
-IOSTAT RMB 2 ; last acia status from write/read
- RMB 2 ; ( 4 spares! )
- RMB 2
- RMB 2
- RMB 2
-
-
-
-
-*
-*
-* end of user table, start of common system variables
-*
-*
-*
-XUSE RMB 2
-XPREV RMB 2
- RMB 4 ; ( spares )
-
- PAGE
-* These things, up through the lable 'REND', are overwritten
-* at time of cold load and should have the same contents
-* as shown here:
-*
- FCB $C5 ; immediate
- FCC 4,FORTH
- FCB $C8
- FDB NOOP-7
-FORTH FDB DODOES,DOVOC,$81A0,TASK-7
- FDB 0
-*
- FCC "(C) Forth Interest Group, 1979"
-
- FCB $84
- FCC 3,TASK
- FCB $CB
- FDB FORTH-8
-TASK FDB DOCOL,SEMIS
-*
-REND EQU * ( first empty location in dictionary )
-
- PAGE
-* The FORTH program ( address $1000 to $27FF ) is written
-* so that it can be in a ROM, or write-protected if desired
- ORG $1000
-
-* ######>> screen 3 <<
-*
-***************************
-** C O L D E N T R Y **
-***************************
-ORIG NOP
- JMP CENT
-***************************
-** W A R M E N T R Y **
-***************************
- NOP
- JMP WENT ; warm-start code, keeps current dictionary intact
-
-*
-******* startup parmeters **************************
-*
- FDB $6800,0000 ; cpu & revision
- FDB 0 ; topmost word in FORTH vocabulary
-BACKSP FDB $7F ; backspace character for editing
-UPINIT FDB UORIG ; initial user area
-SINIT FDB ORIG-$D0 ; initial top of data stack
-RINIT FDB ORIG-2 initial top of return stack
- FDB ORIG-$D0 terminal input buffer
- FDB 31 ; initial name field width
- FDB 0 ; initial warning mode (0 = no disc)
-FENCIN FDB REND ; initial fence
-DPINIT FDB REND ; cold start value for DP
-VOCINT FDB FORTH+8
-COLINT FDB 132 ; initial terminal carriage width
-DELINT FDB 4 ; initial carriage return delay
-****************************************************
-*
- PAGE
-*
-* ######>> screen 13 <<
-PULABX PULS A ; 24 cycles until 'NEXT'
- PULS B
-STABX STA 0,X ; 16 cycles until 'NEXT'
- STB 1,X
- BRA NEXT
-GETX LDA 0,X ; 18 cycles until 'NEXT'
- LDB 1,X
-PUSHBA PSHS B ; 8 cycles until 'NEXT'
- PSHS A
-
-
-
-*
-* "NEXT" takes 38 cycles if TRACE is removed,
-*
-* and 95 cycles if NOT tracing.
-*
-* = = = = = = = t h e v i r t u a l m a c h i n e = = = = =
-* =
-NEXT LDX IP
- LEAX 1,X ; pre-increment mode
- LEAX 1,X
- STX IP
-NEXT2 LDX 0,X ; get W which points to CFA of word to be done
-NEXT3 STX W
- LDX 0,X ; get VECT which points to executable code
-* =
-* The next instruction could be patched to JMP TRACE =
-* if a TRACE routine is available: =
-* =
- JMP 0,X
- NOP
-* JMP TRACE ; ( an alternate for the above )
-* =
-* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
-
-
- PAGE
-*
-* ======>> 1 <<
- FCB $83
- FCC 2,LIT ; NOTE: this is different from LITERAL
- FCB $D4
- FDB 0 ; link of zero to terminate dictionary scan
-LIT FDB *+2
- LDX IP
- LEAX 1,X
- LEAX 1,X
- STX IP
- LDA 0,X
- LDB 1,X
- JMP PUSHBA
-*
-* ######>> screen 14 <<
-* ======>> 2 <<
-CLITER FDB *+2 ; (this is an invisible word, with no header)
- LDX IP
- LEAX 1,X
- STX IP
- CLRA
- LDB 1,X
- JMP PUSHBA
-*
-* ======>> 3 <<
- FCB $87
- FCC 6,EXECUTE
- FCB $C5
- FDB LIT-6
-EXEC FDB *+2
- TFR S,X
- LDX 0,X ; get code field address (CFA)
- LEAS 1,S ; pop stack
- LEAS 1,S
- JMP NEXT3
-*
-* ######>> screen 15 <<
-* ======>> 4 <<
- FCB $86
- FCC 5,BRANCH
- FCB $C8
- FDB EXEC-10
-BRAN FDB ZBYES ; Go steal code in ZBRANCH
-*
-* ======>> 5 <<
- FCB $87
- FCC 6,0BRANCH
- FCB $C8
- FDB BRAN-9
-ZBRAN FDB *+2
- PULS A
- PULS B
-* ABA is only used here.
-* Could immediately convert PULs to LDD ,S++ ;
-* with no need for trailing BCS to look for overflow
-* because we are only testing for non-zero, but,
-* converting as if by unintelligent macro:
- PSHS B ; LOL
- ADDA ,S+
-* End of unintelligent ABA conversion.
- BNE ZBNO
- BCS ZBNO
-ZBYES LDX IP ; Note: code is shared with BRANCH, (+LOOP), (LOOP)
- LDB 3,X
- LDA 2,X
- ADDB IP+1
- ADCA IP
- STB IP+1
- STA IP
- JMP NEXT
-ZBNO LDX IP ; no branch. This code is shared with (+LOOP), (LOOP).
- LEAX 1,X ; jump over branch delta
- LEAX 1,X
- STX IP
- JMP NEXT
-*
-* ######>> screen 16 <<
-* ======>> 6 <<
- FCB $86
- FCC 5,(LOOP)
- FCB $A9
- FDB ZBRAN-10
-XLOOP FDB *+2
- CLRA
- LDB #1 ; get set to increment counter by 1
- BRA XPLOP2 ; go steal other guy's code!
-*
-* ======>> 7 <<
- FCB $87
- FCC 6,(+LOOP)
- FCB $A9
- FDB XLOOP-9
-XPLOOP FDB *+2 ; Note: +LOOP has an un-signed loop counter
- PULS A ; get increment
- PULS B
-XPLOP2 TSTA
- BPL XPLOF ; forward looping
- BSR XPLOPS
- ORCC #1
- SBCB 5,X
- SBCA 4,X
- BPL ZBYES
- BRA XPLONO ; fall through
-*
-* the subroutine :
-XPLOPS LDX RP
- ADDB 3,X ; add it to counter
- ADCA 2,X
- STB 3,X ; store new counter value
- STA 2,X
- RTS
-*
-XPLOF BSR XPLOPS
- SUBB 5,X
- SBCA 4,X
- BMI ZBYES
-*
-XPLONO LEAX 1,X ; done, don't branch back
- LEAX 1,X
- LEAX 1,X
- LEAX 1,X
- STX RP
- BRA ZBNO ; use ZBRAN to skip over unused delta
-*
-* ######>> screen 17 <<
-* ======>> 8 <<
- FCB $84
- FCC 3,(DO)
- FCB $A9
- FDB XPLOOP-10
-XDO FDB *+2 ; This is the RUNTIME DO, not the COMPILING DO
- LDX RP
- LEAX -1,X
- LEAX -1,X
- LEAX -1,X
- LEAX -1,X
- STX RP
- PULS A
- PULS B
- STA 2,X
- STB 3,X
- PULS A
- PULS B
- STA 4,X
- STB 5,X
- JMP NEXT
-*
-* ======>> 9 <<
- FCB $81 I
- FCB $C9
- FDB XDO-7
-I FDB *+2
- LDX RP
- LEAX 1,X
- LEAX 1,X
- JMP GETX
-*
-* ######>> screen 18 <<
-* ======>> 10 <<
- FCB $85
- FCC 4,DIGIT
- FCB $D4
- FDB I-4
-DIGIT FDB *+2 ; NOTE: legal input range is 0-9, A-Z
- TFR S,X
- LDA 3,X
- SUBA #$30 ; ascii zero
- BMI DIGIT2 ; IF LESS THAN '0', ILLEGAL
- CMPA #$A
- BMI DIGIT0 ; IF '9' OR LESS
- CMPA #$11
- BMI DIGIT2 ; if less than 'A'
- CMPA #$2B
- BPL DIGIT2 ; if greater than 'Z'
- SUBA #7 ; translate 'A' thru 'F'
-DIGIT0 CMPA 1,X
- BPL DIGIT2 ; if not less than the base
- LDB #1 ; set flag
- STA 3,X ; store digit
-DIGIT1 STB 1,X ; store the flag
- JMP NEXT
-DIGIT2 CLRB
- LEAS 1,S
- LEAS 1,S ; pop bottom number
- TFR S,X
- STB 0,X ; make sure both bytes are 00
- BRA DIGIT1
-*
-* ######>> screen 19 <<
-*
-* The word format in the dictionary is:
-*
-* char-count + $80 lowest address
-* char 1
-* char 2
-*
-* char n + $80
-* link high byte \___point to previous word
-* link low byte /
-* CFA high byte \___pnt to 6800 code
-* CFA low byte /
-* parameter fields
-* "
-* "
-* "
-*
-* ======>> 11 <<
- FCB $86
- FCC 5,(FIND)
- FCB $A9
- FDB DIGIT-8
-PFIND FDB *+2
- NOP
- NOP
-PD EQU N ; ptr to dict word being checked
-PA0 EQU N+2
-PA EQU N+4
-PCT EQU N+6 ; PC in 6800 source
- LDX #PD
- LDB #4
-PFIND0 PULS A ; loop to get arguments
- STA 0,X
- LEAX 1,X
- DECB
- BNE PFIND0
-*
- LDX PD
-PFIND1 LDB 0,X ; get count dict count
- STB PCT
- ANDB #$3F
- LEAX 1,X
- STX PD ; update PD
- LDX PA0
- LDA 0,X ; get count from arg
- LEAX 1,X
- STX PA ; intialize PA
- PSHS B ; sim CBA
- CMPA ,S+ ; compare lengths
- BNE PFIND4
-PFIND2 LDX PA
- LDA 0,X
- LEAX 1,X
- STX PA
- LDX PD
- LDB 0,X
- LEAX 1,X
- STX PD
- TSTB ; is dict entry neg. ?
- BPL PFIND8
- ANDB #$7F ; clear sign
- PSHS B ; sim CBA
- CMPA ,S+
- BEQ FOUND
-PFIND3 LDX 0,X ; get new link
- BNE PFIND1 ; continue if link not=0
-*
-* not found :
-*
- CLRA
- CLRB
- JMP PUSHBA
-PFIND8 PSHS B ; sim CBA
- CMPA ,S+
- BEQ PFIND2
-PFIND4 LDX PD
-PFIND9 LDB 0,X ; scan forward to end of this name
- LEAX 1,X
- BPL PFIND9
- BRA PFIND3
-*
-* found :
-*
-FOUND LDA PD ; compute CFA
- LDB PD+1
- ADDB #4
- ADCA #0
- PSHS B
- PSHS A
- LDA PCT
- PSHS A
- CLRA
- PSHS A
- LDB #1
- JMP PUSHBA
-*
- PSHS A
- CLRA
- PSHS A
- LDB #1
- JMP PUSHBA
-*
-* ######>> screen 20 <<
-* ======>> 12 <<
- FCB $87
- FCC 6,ENCLOSE
- FCB $C5
- FDB PFIND-9
-* NOTE :
-* FC means offset (bytes) to First Character of next word
-* EW " " to End of Word
-* NC " " to Next Character to start next enclose at
-ENCLOS FDB *+2
- LEAS 1,S
- PULS B ; now, get the low byte, for an 8-bit delimiter
- TFR S,X
- LDX 0,X
- CLR N
-* wait for a non-delimiter or a NUL
-ENCL2 LDA 0,X
- BEQ ENCL6
- PSHS B ; sim CBA
- CMPA ,S+ ; CHECK FOR DELIM
- BNE ENCL3
- LEAX 1,X
- INC N
- BRA ENCL2
-* found first character. Push FC
-ENCL3 LDA N found first char.
- PSHS A
- CLRA
- PSHS A
-* wait for a delimiter or a NUL
-ENCL4 LDA 0,X
- BEQ ENCL7
- PSHS B ; sim CBA
- CMPA ,S+ ; ckech for delim.
- BEQ ENCL5
- LEAX 1,X
- INC N
- BRA ENCL4
-* found EW. Push it
-ENCL5 LDB N
- CLRA
- PSHS B
- PSHS A
-* advance and push NC
- INCB
- JMP PUSHBA
-* found NUL before non-delimiter, therefore there is no word
-ENCL6 LDB N found NUL
- PSHS B
- PSHS A
- INCB
- BRA ENCL7+2
-* found NUL following the word instead of SPACE
-ENCL7 LDB N
- PSHS B save EW
- PSHS A
-ENCL8 LDB N save NC
- JMP PUSHBA
-
- PAGE
-*
-* ######>> screen 21 <<
-* The next 4 words call system dependant I/O routines
-* which are listed after word "-->" ( lable: "arrow" )
-* in the dictionary.
-*
-* ======>> 13 <<
- FCB $84
- FCC 3,EMIT
- FCB $D4
- FDB ENCLOS-10
-EMIT FDB *+2
- PULS A
- PULS A
- JSR PEMIT
- LDX UP
- INC XOUT+1-UORIG,X
- BNE *+4
- INC XOUT-UORIG,X
- JMP NEXT
-*
-* ======>> 14 <<
- FCB $83
- FCC 2,KEY
- FCB $D9
- FDB EMIT-7
-KEY FDB *+2
- JSR PKEY
- PSHS A
- CLRA
- PSHS A
- JMP NEXT
-*
-* ======>> 15 <<
- FCB $89
- FCC 8,?TERMINAL
- FCB $CC
- FDB KEY-6
-QTERM FDB *+2
- JSR PQTER
- CLRB
- JMP PUSHBA stack the flag
-*
-* ======>> 16 <<
- FCB $82
- FCC 1,CR
- FCB $D2
- FDB QTERM-12
-CR FDB *+2
- JSR PRTCR
- JMP NEXT
-*
-* ######>> screen 22 <<
-* ======>> 17 <<
- FCB $85
- FCC 4,CMOVE source, destination, count
- FCB $C5
- FDB CR-5
-CMOVE FDB *+2 takes ( 43+47*count cycles )
- LDX #N
- LDB #6
-CMOV1 PULS A
- STA 0,X move parameters to scratch area
- LEAX 1,X
- DECB
- BNE CMOV1
-CMOV2 LDA N
- LDB N+1
- SUBB #1
- SBCA #0
- STA N
- STB N+1
- BCS CMOV3
- LDX N+4
- LDA 0,X
- LEAX 1,X
- STX N+4
- LDX N+2
- STA 0,X
- LEAX 1,X
- STX N+2
- BRA CMOV2
-CMOV3 JMP NEXT
-*
-* ######>> screen 23 <<
-* ======>> 18 <<
- FCB $82
- FCC 1,U*
- FCB $AA
- FDB CMOVE-8
-USTAR FDB *+2
- BSR USTARS
- LEAS 1,S
- LEAS 1,S
- JMP PUSHBA
-*
-* The following is a subroutine which
-* multiplies top 2 words on stack,
-* leaving 32-bit result: high order word in A,B
-* low order word in 2nd word of stack.
-*
-USTARS LDA #16 bits/word counter
- PSHS A
- CLRA
- CLRB
- TFR S,X
-USTAR2 ROR 5,X shift multiplier
- ROR 6,X
- DEC 0,X done?
- BMI USTAR4
- BCC USTAR3
- ADDB 4,X
- ADCA 3,X
-USTAR3 RORA
- RORB ; shift result
- BRA USTAR2
-USTAR4 LEAS 1,S dump counter
- RTS
-*
-* ######>> screen 24 <<
-* ======>> 19 <<
- FCB $82
- FCC 1,U/
- FCB $AF
- FDB USTAR-5
-USLASH FDB *+2
- LDA #17
- PSHS A
- TFR S,X
- LDA 3,X
- LDB 4,X
-USL1 CMPA 1,X
- BHI USL3
- BCS USL2
- CMPB 2,X
- BCC USL3
-USL2 ANDCC #~1
- BRA USL4
-USL3 SUBB 2,X
- SBCA 1,X
- ORCC #1
-USL4 ROL 6,X
- ROL 5,X
- DEC 0,X
- BEQ USL5
- ROLB
- ROLA
- BCC USL1
- BRA USL3
-USL5 LEAS 1,S
- LEAS 1,S
- LEAS 1,S
- LEAS 1,S
- LEAS 1,S
- JMP SWAP+4 reverse quotient & remainder
-*
-* ######>> screen 25 <<
-* ======>> 20 <<
- FCB $83
- FCC 2,AND
- FCB $C4
- FDB USLASH-5
-AND FDB *+2
- PULS A
- PULS B
- TFR S,X
- ANDB 1,X
- ANDA 0,X
- JMP STABX
-*
-* ======>> 21 <<
- FCB $82
- FCC 1,OR
- FCB $D2
- FDB AND-6
-OR FDB *+2
- PULS A
- PULS B
- TFR S,X
- ORB 1,X
- ORA 0,X
- JMP STABX
-*
-* ======>> 22 <<
- FCB $83
- FCC 2,XOR
- FCB $D2
- FDB OR-5
-XOR FDB *+2
- PULS A
- PULS B
- TFR S,X
- EORB 1,X
- EORA 0,X
- JMP STABX
-*
-* ######>> screen 26 <<
-* ======>> 23 <<
- FCB $83
- FCC 2,SP@
- FCB $C0
- FDB XOR-6
-SPAT FDB *+2
- TFR S,X
- STX N scratch area
- LDX #N
- JMP GETX
-*
-* ======>> 24 <<
- FCB $83
- FCC 2,SP!
- FCB $A1
- FDB SPAT-6
-SPSTOR FDB *+2
- LDX UP
- LDX XSPZER-UORIG,X
-* Potential problem area? ******
- TFR X,S watch it ! X and S are not equal.
- JMP NEXT
-* ======>> 25 <<
- FCB $83
- FCC 2,RP!
- FCB $A1
- FDB SPSTOR-6
-RPSTOR FDB *+2
- LDX RINIT initialize from rom constant
- STX RP
- JMP NEXT
-*
-* ======>> 26 <<
- FCB $82
- FCC 1,;S
- FCB $D3
- FDB RPSTOR-6
-SEMIS FDB *+2
- LDX RP
- LEAX 1,X
- LEAX 1,X
- STX RP
- LDX 0,X get address we have just finished.
- JMP NEXT+2 increment the return address & do next word
-*
-* ######>> screen 27 <<
-* ======>> 27 <<
- FCB $85
- FCC 4,LEAVE
- FCB $C5
- FDB SEMIS-5
-LEAVE FDB *+2
- LDX RP
- LDA 2,X
- LDB 3,X
- STA 4,X
- STB 5,X
- JMP NEXT
-*
-* ======>> 28 <<
- FCB $82
- FCC 1,>R
- FCB $D2
- FDB LEAVE-8
-TOR FDB *+2
- LDX RP
- LEAX -1,X
- LEAX -1,X
- STX RP
- PULS A
- PULS B
- STA 2,X
- STB 3,X
- JMP NEXT
-*
-* ======>> 29 <<
- FCB $82
- FCC 1,R>
- FCB $BE
- FDB TOR-5
-FROMR FDB *+2
- LDX RP
- LDA 2,X
- LDB 3,X
- LEAX 1,X
- LEAX 1,X
- STX RP
- JMP PUSHBA
-*
-* ======>> 30 <<
- FCB $81 R
- FCB $D2
- FDB FROMR-5
-R FDB *+2
- LDX RP
- LEAX 1,X
- LEAX 1,X
- JMP GETX
-*
-* ######>> screen 28 <<
-* ======>> 31 <<
- FCB $82
- FCC 1,0=
- FCB $BD
- FDB R-4
-ZEQU FDB *+2
- TFR S,X
- CLRA
- CLRB
- LDX 0,X
- BNE ZEQU2
- INCB
-ZEQU2 TFR S,X
- JMP STABX
-*
-* ======>> 32 <<
- FCB $82
- FCC 1,0<
- FCB $BC
- FDB ZEQU-5
-ZLESS FDB *+2
- TFR S,X
- LDA #$80 check the sign bit
- ANDA 0,X
- BEQ ZLESS2
- CLRA if neg.
- LDB #1
- JMP STABX
-ZLESS2 CLRB
- JMP STABX
-*
-* ######>> screen 29 <<
-* ======>> 33 <<
- FCB $81 '+'
- FCB $AB
- FDB ZLESS-5
-PLUS FDB *+2
- PULS A
- PULS B
- TFR S,X
- ADDB 1,X
- ADCA 0,X
- JMP STABX
-*
-* ======>> 34 <<
- FCB $82
- FCC 1,D+
- FCB $AB
- FDB PLUS-4
-DPLUS FDB *+2
- TFR S,X
- ANDCC #~1
- LDB #4
-DPLUS2 LDA 3,X
- ADCA 7,X
- STA 7,X
- LEAX -1,X
- DECB
- BNE DPLUS2
- LEAS 1,S
- LEAS 1,S
- LEAS 1,S
- LEAS 1,S
- JMP NEXT
-*
-* ======>> 35 <<
- FCB $85
- FCC 4,MINUS
- FCB $D3
- FDB DPLUS-5
-MINUS FDB *+2
- TFR S,X
- NEG 1,X
- BCC MINUS2
- NEG 0,X
- BRA MINUS3
-MINUS2 COM 0,X
-MINUS3 JMP NEXT
-*
-* ======>> 36 <<
- FCB $86
- FCC 5,DMINUS
- FCB $D3
- FDB MINUS-8
-DMINUS FDB *+2
- TFR S,X
- COM 0,X
- COM 1,X
- COM 2,X
- NEG 3,X
- BNE DMINX
- INC 2,X
- BNE DMINX
- INC 1,X
- BNE DMINX
- INC 0,X
-DMINX JMP NEXT
-*
-* ######>> screen 30 <<
-* ======>> 37 <<
- FCB $84
- FCC 3,OVER
- FCB $D2
- FDB DMINUS-9
-OVER FDB *+2
- TFR S,X
- LDA 2,X
- LDB 3,X
- JMP PUSHBA
-*
-* ======>> 38 <<
- FCB $84
- FCC 3,DROP
- FCB $D0
- FDB OVER-7
-DROP FDB *+2
- LEAS 1,S
- LEAS 1,S
- JMP NEXT
-*
-* ======>> 39 <<
- FCB $84
- FCC 3,SWAP
- FCB $D0
- FDB DROP-7
-SWAP FDB *+2
- PULS A
- PULS B
- TFR S,X
- LDX 0,X
- LEAS 1,S
- LEAS 1,S
- PSHS B
- PSHS A
- STX N
- LDX #N
- JMP GETX
-*
-* ======>> 40 <<
- FCB $83
- FCC 2,DUP
- FCB $D0
- FDB SWAP-7
-DUP FDB *+2
- PULS A
- PULS B
- PSHS B
- PSHS A
- JMP PUSHBA
-*
-* ######>> screen 31 <<
-* ======>> 41 <<
- FCB $82
- FCC 1,+!
- FCB $A1
- FDB DUP-6
-PSTORE FDB *+2
- TFR S,X
- LDX 0,X
- LEAS 1,S
- LEAS 1,S
- PULS A get stack data
- PULS B
- ADDB 1,X add & store low byte
- STB 1,X
- ADCA 0,X add & store hi byte
- STA 0,X
- JMP NEXT
-*
-* ======>> 42 <<
- FCB $86
- FCC 5,TOGGLE
- FCB $C5
- FDB PSTORE-5
-TOGGLE FDB DOCOL,OVER,CAT,XOR,SWAP,CSTORE
- FDB SEMIS
-*
-* ######>> screen 32 <<
-* ======>> 43 <<
- FCB $81 @
- FCB $C0
- FDB TOGGLE-9
-AT FDB *+2
- TFR S,X
- LDX 0,X get address
- LEAS 1,S
- LEAS 1,S
- JMP GETX
-*
-* ======>> 44 <<
- FCB $82
- FCC 1,C@
- FCB $C0
- FDB AT-4
-CAT FDB *+2
- TFR S,X
- LDX 0,X
- CLRA
- LDB 0,X
- LEAS 1,S
- LEAS 1,S
- JMP PUSHBA
-*
-* ======>> 45 <<
- FCB $81
- FCB $A1
- FDB CAT-5
-STORE FDB *+2
- TFR S,X
- LDX 0,X get address
- LEAS 1,S
- LEAS 1,S
- JMP PULABX
-*
-* ======>> 46 <<
- FCB $82
- FCC 1,C!
- FCB $A1
- FDB STORE-4
-CSTORE FDB *+2
- TFR S,X
- LDX 0,X get address
- LEAS 1,S
- LEAS 1,S
- LEAS 1,S
- PULS B
- STB 0,X
- JMP NEXT
- PAGE
-*
-* ######>> screen 33 <<
-* ======>> 47 <<
- FCB $C1 : immediate
- FCB $BA
- FDB CSTORE-5
-COLON FDB DOCOL,QEXEC,SCSP,CURENT,AT,CONTXT,STORE
- FDB CREATE,RBRAK
- FDB PSCODE
-
-* Here is the IP pusher for allowing
-* nested words in the virtual machine:
-* ( ;S is the equivalent un-nester )
-
-DOCOL LDX RP make room in the stack
- LEAX -1,X
- LEAX -1,X
- STX RP
- LDA IP
- LDB IP+1
- STA 2,X Store address of the high level word
- STB 3,X that we are starting to execute
- LDX W Get first sub-word of that definition
- JMP NEXT+2 and execute it
-*
-* ======>> 48 <<
- FCB $C1 ; imnediate code
- FCB $BB
- FDB COLON-4
-SEMI FDB DOCOL,QCSP,COMPIL,SEMIS,SMUDGE,LBRAK
- FDB SEMIS
-*
-* ######>> screen 34 <<
-* ======>> 49 <<
- FCB $88
- FCC 7,CONSTANT
- FCB $D4
- FDB SEMI-4
-CON FDB DOCOL,CREATE,SMUDGE,COMMA,PSCODE
-DOCON LDX W
- LDA 2,X
- LDB 3,X A & B now contain the constant
- JMP PUSHBA
-*
-* ======>> 50 <<
- FCB $88
- FCC 7,VARIABLE
- FCB $C5
- FDB CON-11
-VAR FDB DOCOL,CON,PSCODE
-DOVAR LDA W
- LDB W+1
- ADDB #2
- ADCA #0 A,B now contain the address of the variable
- JMP PUSHBA
-*
-* ======>> 51 <<
- FCB $84
- FCC 3,USER
- FCB $D2
- FDB VAR-11
-USER FDB DOCOL,CON,PSCODE
-DOUSER LDX W get offset into user's table
- LDA 2,X
- LDB 3,X
- ADDB UP+1 add to users base address
- ADCA UP
- JMP PUSHBA push address of user's variable
-*
-* ######>> screen 35 <<
-* ======>> 52 <<
- FCB $81
- FCB $B0 0
- FDB USER-7
-ZERO FDB DOCON
- FDB 0000
-*
-* ======>> 53 <<
- FCB $81
- FCB $B1 1
- FDB ZERO-4
-ONE FDB DOCON
- FDB 1
-*
-* ======>> 54 <<
- FCB $81
- FCB $B2 2
- FDB ONE-4
-TWO FDB DOCON
- FDB 2
-*
-* ======>> 55 <<
- FCB $81
- FCB $B3 3
- FDB TWO-4
-THREE FDB DOCON
- FDB 3
-*
-* ======>> 56 <<
- FCB $82
- FCC 1,BL
- FCB $CC
- FDB THREE-4
-BL FDB DOCON ascii blank
- FDB $20
-*
-* ======>> 57 <<
- FCB $85
- FCC 4,FIRST
- FCB $D4
- FDB BL-5
-FIRST FDB DOCON
- FDB MEMEND-528 (132 * NBLK)
-*
-* ======>> 58 <<
- FCB $85
- FCC 4,LIMIT ( the end of memory +1 )
- FCB $D4
- FDB FIRST-8
-LIMIT FDB DOCON
- FDB MEMEND
-*
-* ======>> 59 <<
- FCB $85
- FCC 4,B/BUF (bytes/buffer)
- FCB $C6
- FDB LIMIT-8
-BBUF FDB DOCON
- FDB 128
-*
-* ======>> 60 <<
- FCB $85
- FCC 4,B/SCR (blocks/screen)
- FCB $D2
- FDB BBUF-8
-BSCR FDB DOCON
- FDB 8
-* blocks/screen = 1024 / "B/BUF" = 8
-*
-* ======>> 61 <<
- FCB $87
- FCC 6,+ORIGIN
- FCB $CE
- FDB BSCR-8
-PORIG FDB DOCOL,LIT,ORIG,PLUS
- FDB SEMIS
-*
-* ######>> screen 36 <<
-* ======>> 62 <<
- FCB $82
- FCC 1,S0
- FCB $B0
- FDB PORIG-10
-SZERO FDB DOUSER
- FDB XSPZER-UORIG
-*
-* ======>> 63 <<
- FCB $82
- FCC 1,R0
- FCB $B0
- FDB SZERO-5
-RZERO FDB DOUSER
- FDB XRZERO-UORIG
-*
-* ======>> 64 <<
- FCB $83
- FCC 2,TIB
- FCB $C2
- FDB RZERO-5
-TIB FDB DOUSER
- FDB XTIB-UORIG
-*
-* ======>> 65 <<
- FCB $85
- FCC 4,WIDTH
- FCB $C8
- FDB TIB-6
-WIDTH FDB DOUSER
- FDB XWIDTH-UORIG
-*
-* ======>> 66 <<
- FCB $87
- FCC 6,WARNING
- FCB $C7
- FDB WIDTH-8
-WARN FDB DOUSER
- FDB XWARN-UORIG
-*
-* ======>> 67 <<
- FCB $85
- FCC 4,FENCE
- FCB $C5
- FDB WARN-10
-FENCE FDB DOUSER
- FDB XFENCE-UORIG
-*
-* ======>> 68 <<
- FCB $82
- FCC 1,DP points to first free byte at end of dictionary
- FCB $D0
- FDB FENCE-8
-DICPT FDB DOUSER ; DP in 6800 source
- FDB XDP-UORIG
-*
-* ======>> 68.5 <<
- FCB $88
- FCC 7,VOC-LINK
- FCB $CB
- FDB DICPT-5
-VOCLIN FDB DOUSER
- FDB XVOCL-UORIG
-*
-* ======>> 69 <<
- FCB $83
- FCC 2,BLK
- FCB $CB
- FDB VOCLIN-11
-BLK FDB DOUSER
- FDB XBLK-UORIG
-*
-* ======>> 70 <<
- FCB $82
- FCC 1,IN scan pointer for input line buffer
- FCB $CE
- FDB BLK-6
-IN FDB DOUSER
- FDB XIN-UORIG
-*
-* ======>> 71 <<
- FCB $83
- FCC 2,OUT
- FCB $D4
- FDB IN-5
-OUT FDB DOUSER
- FDB XOUT-UORIG
-*
-* ======>> 72 <<
- FCB $83
- FCC 2,SCR
- FCB $D2
- FDB OUT-6
-SCR FDB DOUSER
- FDB XSCR-UORIG
-* ######>> screen 37 <<
-*
-* ======>> 73 <<
- FCB $86
- FCC 5,OFFSET
- FCB $D4
- FDB SCR-6
-OFSET FDB DOUSER
- FDB XOFSET-UORIG
-*
-* ======>> 74 <<
- FCB $87
- FCC 6,CONTEXT points to pointer to vocab to search first
- FCB $D4
- FDB OFSET-9
-CONTXT FDB DOUSER
- FDB XCONT-UORIG
-*
-* ======>> 75 <<
- FCB $87
- FCC 6,CURRENT points to ptr. to vocab being extended
- FCB $D4
- FDB CONTXT-10
-CURENT FDB DOUSER
- FDB XCURR-UORIG
-*
-* ======>> 76 <<
- FCB $85
- FCC 4,STATE 1 if compiling, 0 if not
- FCB $C5
- FDB CURENT-10
-STATE FDB DOUSER
- FDB XSTATE-UORIG
-*
-* ======>> 77 <<
- FCB $84
- FCC 3,BASE number base for all input & output
- FCB $C5
- FDB STATE-8
-BASE FDB DOUSER
- FDB XBASE-UORIG
-*
-* ======>> 78 <<
- FCB $83
- FCC 2,DPL
- FCB $CC
- FDB BASE-7
-DPL FDB DOUSER
- FDB XDPL-UORIG
-*
-* ======>> 79 <<
- FCB $83
- FCC 2,FLD
- FCB $C4
- FDB DPL-6
-FLD FDB DOUSER
- FDB XFLD-UORIG
-*
-* ======>> 80 <<
- FCB $83
- FCC 2,CSP
- FCB $D0
- FDB FLD-6
-CSP FDB DOUSER
- FDB XCSP-UORIG
-*
-* ======>> 81 <<
- FCB $82
- FCC 1,R#
- FCB $A3
- FDB CSP-6
-RNUM FDB DOUSER
- FDB XRNUM-UORIG
-*
-* ======>> 82 <<
- FCB $83
- FCC 2,HLD
- FCB $C4
- FDB RNUM-5
-HLD FDB DOCON
- FDB XHLD
-*
-* ======>> 82.5 <<== SPECIAL
- FCB $87
- FCC 6,COLUMNS line width of terminal
- FCB $D3
- FDB HLD-6
-COLUMS FDB DOUSER
- FDB XCOLUM-UORIG
-*
-* ######>> screen 38 <<
-* ======>> 83 <<
- FCB $82
- FCC 1,1+
- FCB $AB
- FDB COLUMS-10
-ONEP FDB DOCOL,ONE,PLUS
- FDB SEMIS
-*
-* ======>> 84 <<
- FCB $82
- FCC 1,2+
- FCB $AB
- FDB ONEP-5
-TWOP FDB DOCOL,TWO,PLUS
- FDB SEMIS
-*
-* ======>> 85 <<
- FCB $84
- FCC 3,HERE
- FCB $C5
- FDB TWOP-5
-HERE FDB DOCOL,DICPT,AT
- FDB SEMIS
-*
-* ======>> 86 <<
- FCB $85
- FCC 4,ALLOT
- FCB $D4
- FDB HERE-7
-ALLOT FDB DOCOL,DICPT,PSTORE
- FDB SEMIS
-*
-* ======>> 87 <<
- FCB $81 ; , (COMMA)
- FCB $AC
- FDB ALLOT-8
-COMMA FDB DOCOL,HERE,STORE,TWO,ALLOT
- FDB SEMIS
-*
-* ======>> 88 <<
- FCB $82
- FCC 1,C,
- FCB $AC
- FDB COMMA-4
-CCOMM FDB DOCOL,HERE,CSTORE,ONE,ALLOT
- FDB SEMIS
-*
-* ======>> 89 <<
- FCB $81 ; -
- FCB $AD
- FDB CCOMM-5
-SUB FDB DOCOL,MINUS,PLUS
- FDB SEMIS
-*
-* ======>> 90 <<
- FCB $81 =
- FCB $BD
- FDB SUB-4
-EQUAL FDB DOCOL,SUB,ZEQU
- FDB SEMIS
-*
-* ======>> 91 <<
- FCB $81 <
- FCB $BC
- FDB EQUAL-4
-LESS FDB *+2
- PULS A
- PULS B
- TFR S,X
- CMPA 0,X
- LEAS 1,S
- BGT LESST
- BNE LESSF
- CMPB 1,X
- BHI LESST
-LESSF CLRB
- BRA LESSX
-LESST LDB #1
-LESSX CLRA
- LEAS 1,S
- JMP PUSHBA
-*
-* ======>> 92 <<
- FCB $81 >
- FCB $BE
- FDB LESS-4
-GREAT FDB DOCOL,SWAP,LESS
- FDB SEMIS
-*
-* ======>> 93 <<
- FCB $83
- FCC 2,ROT
- FCB $D4
- FDB GREAT-4
-ROT FDB DOCOL,TOR,SWAP,FROMR,SWAP
- FDB SEMIS
-*
-* ======>> 94 <<
- FCB $85
- FCC 4,SPACE
- FCB $C5
- FDB ROT-6
-SPACE FDB DOCOL,BL,EMIT
- FDB SEMIS
-*
-* ======>> 95 <<
- FCB $83
- FCC 2,MIN
- FCB $CE
- FDB SPACE-8
-MIN FDB DOCOL,OVER,OVER,GREAT,ZBRAN
- FDB MIN2-*
- FDB SWAP
-MIN2 FDB DROP
- FDB SEMIS
-*
-* ======>> 96 <<
- FCB $83
- FCC 2,MAX
- FCB $D8
- FDB MIN-6
-MAX FDB DOCOL,OVER,OVER,LESS,ZBRAN
- FDB MAX2-*
- FDB SWAP
-MAX2 FDB DROP
- FDB SEMIS
-*
-* ======>> 97 <<
- FCB $84
- FCC 3,-DUP
- FCB $D0
- FDB MAX-6
-DDUP FDB DOCOL,DUP,ZBRAN
- FDB DDUP2-*
- FDB DUP
-DDUP2 FDB SEMIS
-*
-* ######>> screen 39 <<
-* ======>> 98 <<
- FCB $88
- FCC 7,TRAVERSE
- FCB $C5
- FDB DDUP-7
-TRAV FDB DOCOL,SWAP
-TRAV2 FDB OVER,PLUS,CLITER
- FCB $7F
- FDB OVER,CAT,LESS,ZBRAN
- FDB TRAV2-*
- FDB SWAP,DROP
- FDB SEMIS
-*
-* ======>> 99 <<
- FCB $86
- FCC 5,LATEST
- FCB $D4
- FDB TRAV-11
-LATEST FDB DOCOL,CURENT,AT,AT
- FDB SEMIS
-*
-* ======>> 100 <<
- FCB $83
- FCC 2,LFA
- FCB $C1
- FDB LATEST-9
-LFA FDB DOCOL,CLITER
- FCB 4
- FDB SUB
- FDB SEMIS
-*
-* ======>> 101 <<
- FCB $83
- FCC 2,CFA
- FCB $C1
- FDB LFA-6
-CFA FDB DOCOL,TWO,SUB
- FDB SEMIS
-*
-* ======>> 102 <<
- FCB $83
- FCC 2,NFA
- FCB $C1
- FDB CFA-6
-NFA FDB DOCOL,CLITER
- FCB 5
- FDB SUB,ONE,MINUS,TRAV
- FDB SEMIS
-*
-* ======>> 103 <<
- FCB $83
- FCC 2,PFA
- FCB $C1
- FDB NFA-6
-PFA FDB DOCOL,ONE,TRAV,CLITER
- FCB 5
- FDB PLUS
- FDB SEMIS
-*
-* ######>> screen 40 <<
-* ======>> 104 <<
- FCB $84
- FCC 3,!CSP
- FCB $D0
- FDB PFA-6
-SCSP FDB DOCOL,SPAT,CSP,STORE
- FDB SEMIS
-*
-* ======>> 105 <<
- FCB $86
- FCC 5,?ERROR
- FCB $D2
- FDB SCSP-7
-QERR FDB DOCOL,SWAP,ZBRAN
- FDB QERR2-*
- FDB ERROR,BRAN
- FDB QERR3-*
-QERR2 FDB DROP
-QERR3 FDB SEMIS
-*
-* ======>> 106 <<
- FCB $85
- FCC 4,?COMP
- FCB $D0
- FDB QERR-9
-QCOMP FDB DOCOL,STATE,AT,ZEQU,CLITER
- FCB $11
- FDB QERR
- FDB SEMIS
-*
-* ======>> 107 <<
- FCB $85
- FCC 4,?EXEC
- FCB $C3
- FDB QCOMP-8
-QEXEC FDB DOCOL,STATE,AT,CLITER
- FCB $12
- FDB QERR
- FDB SEMIS
-*
-* ======>> 108 <<
- FCB $86
- FCC 5,?PAIRS
- FCB $D3
- FDB QEXEC-8
-QPAIRS FDB DOCOL,SUB,CLITER
- FCB $13
- FDB QERR
- FDB SEMIS
-*
-* ======>> 109 <<
- FCB $84
- FCC 3,?CSP
- FCB $D0
- FDB QPAIRS-9
-QCSP FDB DOCOL,SPAT,CSP,AT,SUB,CLITER
- FCB $14
- FDB QERR
- FDB SEMIS
-*
-* ======>> 110 <<
- FCB $88
- FCC 7,?LOADING
- FCB $C7
- FDB QCSP-7
-QLOAD FDB DOCOL,BLK,AT,ZEQU,CLITER
- FCB $16
- FDB QERR
- FDB SEMIS
-*
-* ######>> screen 41 <<
-* ======>> 111 <<
- FCB $87
- FCC 6,COMPILE
- FCB $C5
- FDB QLOAD-11
-COMPIL FDB DOCOL,QCOMP,FROMR,TWOP,DUP,TOR,AT,COMMA
- FDB SEMIS
-*
-* ======>> 112 <<
- FCB $C1 [ immediate
- FCB $DB
- FDB COMPIL-10
-LBRAK FDB DOCOL,ZERO,STATE,STORE
- FDB SEMIS
-*
-* ======>> 113 <<
- FCB $81 ]
- FCB $DD
- FDB LBRAK-4
-RBRAK FDB DOCOL,CLITER
- FCB $C0
- FDB STATE,STORE
- FDB SEMIS
-*
-* ======>> 114 <<
- FCB $86
- FCC 5,SMUDGE
- FCB $C5
- FDB RBRAK-4
-SMUDGE FDB DOCOL,LATEST,CLITER
- FCB $20
- FDB TOGGLE
- FDB SEMIS
-*
-* ======>> 115 <<
- FCB $83
- FCC 2,HEX
- FCB $D8
- FDB SMUDGE-9
-HEX FDB DOCOL
- FDB CLITER
- FCB 16
- FDB BASE,STORE
- FDB SEMIS
-*
-* ======>> 116 <<
- FCB $87
- FCC 6,DECIMAL
- FCB $CC
- FDB HEX-6
-DEC FDB DOCOL
- FDB CLITER
- FCB 10 note: hex "A"
- FDB BASE,STORE
- FDB SEMIS
-*
-* ######>> screen 42 <<
-* ======>> 117 <<
- FCB $87
- FCC 6,(;CODE)
- FCB $A9
- FDB DEC-10
-PSCODE FDB DOCOL,FROMR,TWOP,LATEST,PFA,CFA,STORE
- FDB SEMIS
-*
-* ======>> 118 <<
- FCB $C5 immediate
- FCC 4,;CODE
- FCB $C5
- FDB PSCODE-10
-SEMIC FDB DOCOL,QCSP,COMPIL,PSCODE,SMUDGE,LBRAK,QSTACK
- FDB SEMIS
-* note: "QSTACK" will be replaced by "ASSEMBLER" later
-*
-* ######>> screen 43 <<
-* ======>> 119 <<
- FCB $87
- FCC 6,<BUILDS
- FCB $D3
- FDB SEMIC-8
-BUILDS FDB DOCOL,ZERO,CON
- FDB SEMIS
-*
-* ======>> 120 <<
- FCB $85
- FCC 4,DOES>
- FCB $BE
- FDB BUILDS-10
-DOES FDB DOCOL,FROMR,TWOP,LATEST,PFA,STORE
- FDB PSCODE
-DODOES LDA IP
- LDB IP+1
- LDX RP make room on return stack
- LEAX -1,X
- LEAX -1,X
- STX RP
- STA 2,X push return address
- STB 3,X
- LDX W get addr of pointer to run-time code
- LEAX 1,X
- LEAX 1,X
- STX N stash it in scratch area
- LDX 0,X get new IP
- STX IP
- CLRA get address of parameter
- LDB #2
- ADDB N+1
- ADCA N
- PSHS B and push it on data stack
- PSHS A
- JMP NEXT2
-*
-* ######>> screen 44 <<
-* ======>> 121 <<
- FCB $85
- FCC 4,COUNT
- FCB $D4
- FDB DOES-8
-COUNT FDB DOCOL,DUP,ONEP,SWAP,CAT
- FDB SEMIS
-*
-* ======>> 122 <<
- FCB $84
- FCC 3,TYPE
- FCB $C5
- FDB COUNT-8
-TYPE FDB DOCOL,DDUP,ZBRAN
- FDB TYPE3-*
- FDB OVER,PLUS,SWAP,XDO
-TYPE2 FDB I,CAT,EMIT,XLOOP
- FDB TYPE2-*
- FDB BRAN
- FDB TYPE4-*
-TYPE3 FDB DROP
-TYPE4 FDB SEMIS
-*
-* ======>> 123 <<
- FCB $89
- FCC 8,-TRAILING
- FCB $C7
- FDB TYPE-7
-DTRAIL FDB DOCOL,DUP,ZERO,XDO
-DTRAL2 FDB OVER,OVER,PLUS,ONE,SUB,CAT,BL
- FDB SUB,ZBRAN
- FDB DTRAL3-*
- FDB LEAVE,BRAN
- FDB DTRAL4-*
-DTRAL3 FDB ONE,SUB
-DTRAL4 FDB XLOOP
- FDB DTRAL2-*
- FDB SEMIS
-*
-* ======>> 124 <<
- FCB $84
- FCC 3,(.")
- FCB $A9
- FDB DTRAIL-12
-PDOTQ FDB DOCOL,R,TWOP,COUNT,DUP,ONEP
- FDB FROMR,PLUS,TOR,TYPE
- FDB SEMIS
-*
-* ======>> 125 <<
- FCB $C2 immediate
- FCC 1,."
- FCB $A2
- FDB PDOTQ-7
-DOTQ FDB DOCOL
- FDB CLITER
- FCB $22 ascii quote
- FDB STATE,AT,ZBRAN
- FDB DOTQ1-*
- FDB COMPIL,PDOTQ,WORD
- FDB HERE,CAT,ONEP,ALLOT,BRAN
- FDB DOTQ2-*
-DOTQ1 FDB WORD,HERE,COUNT,TYPE
-DOTQ2 FDB SEMIS
-*
-* ######>> screen 45 <<
-* ======>> 126 <<== MACHINE DEPENDENT
- FCB $86
- FCC 5,?STACK
- FCB $CB
- FDB DOTQ-5
-QSTACK FDB DOCOL,CLITER
- FCB $12
- FDB PORIG,AT,TWO,SUB,SPAT,LESS,ONE
- FDB QERR
-* prints 'empty stack'
-*
-QSTAC2 FDB SPAT
-* Here, we compare with a value at least 128
-* higher than dict. ptr. (DP)
- FDB HERE,CLITER
- FCB $80
- FDB PLUS,LESS,ZBRAN
- FDB QSTAC3-*
- FDB TWO
- FDB QERR
-* prints 'full stack'
-*
-QSTAC3 FDB SEMIS
-*
-* ======>> 127 << this word's function
-* is done by ?STACK in this version
-* FCB $85
-* FCC 4,?FREE
-* FCB $C5
-* FDB QSTACK-9
-*QFREE FDB DOCOL,SPAT,HERE,CLITER
-* FCB $80
-* FDB PLUS,LESS,TWO,QERR,SEMIS
-*
-* ######>> screen 46 <<
-* ======>> 128 <<
- FCB $86
- FCC 5,EXPECT
- FCB $D4
- FDB QSTACK-9
-EXPECT FDB DOCOL,OVER,PLUS,OVER,XDO
-EXPEC2 FDB KEY,DUP,CLITER
- FCB $0E
- FDB PORIG,AT,EQUAL,ZBRAN
- FDB EXPEC3-*
- FDB DROP,CLITER
- FCB 8 ( backspace character to emit )
- FDB OVER,I,EQUAL,DUP,FROMR,TWO,SUB,PLUS
- FDB TOR,SUB,BRAN
- FDB EXPEC6-*
-EXPEC3 FDB DUP,CLITER
- FCB $D ( carriage return )
- FDB EQUAL,ZBRAN
- FDB EXPEC4-*
- FDB LEAVE,DROP,BL,ZERO,BRAN
- FDB EXPEC5-*
-EXPEC4 FDB DUP
-EXPEC5 FDB I,CSTORE,ZERO,I,ONEP,STORE
-EXPEC6 FDB EMIT,XLOOP
- FDB EXPEC2-*
- FDB DROP
- FDB SEMIS
-*
-* ======>> 129 <<
- FCB $85
- FCC 4,QUERY
- FCB $D9
- FDB EXPECT-9
-QUERY FDB DOCOL,TIB,AT,COLUMS
- FDB AT,EXPECT,ZERO,IN,STORE
- FDB SEMIS
-*
-* ======>> 130 <<
- FCB $C1 immediate < carriage return >
- FCB $80
- FDB QUERY-8
-NULL FDB DOCOL,BLK,AT,ZBRAN
- FDB NULL2-*
- FDB ONE,BLK,PSTORE
- FDB ZERO,IN,STORE,BLK,AT,BSCR,MOD
- FDB ZEQU
-* check for end of screen
- FDB ZBRAN
- FDB NULL1-*
- FDB QEXEC,FROMR,DROP
-NULL1 FDB BRAN
- FDB NULL3-*
-NULL2 FDB FROMR,DROP
-NULL3 FDB SEMIS
-*
-* ######>> screen 47 <<
-* ======>> 133 <<
- FCB $84
- FCC 3,FILL
- FCB $CC
- FDB NULL-4
-FILL FDB DOCOL,SWAP,TOR,OVER,CSTORE,DUP,ONEP
- FDB FROMR,ONE,SUB,CMOVE
- FDB SEMIS
-*
-* ======>> 134 <<
- FCB $85
- FCC 4,ERASE
- FCB $C5
- FDB FILL-7
-ERASE FDB DOCOL,ZERO,FILL
- FDB SEMIS
-*
-* ======>> 135 <<
- FCB $86
- FCC 5,BLANKS
- FCB $D3
- FDB ERASE-8
-BLANKS FDB DOCOL,BL,FILL
- FDB SEMIS
-*
-* ======>> 136 <<
- FCB $84
- FCC 3,HOLD
- FCB $C4
- FDB BLANKS-9
-HOLD FDB DOCOL,LIT,$FFFF,HLD,PSTORE,HLD,AT,CSTORE
- FDB SEMIS
-*
-* ======>> 137 <<
- FCB $83
- FCC 2,PAD
- FCB $C4
- FDB HOLD-7
-PAD FDB DOCOL,HERE,CLITER
- FCB $44
- FDB PLUS
- FDB SEMIS
-*
-* ######>> screen 48 <<
-* ======>> 138 <<
- FCB $84
- FCC 3,WORD
- FCB $C4
- FDB PAD-6
-WORD FDB DOCOL,BLK,AT,ZBRAN
- FDB WORD2-*
- FDB BLK,AT,BLOCK,BRAN
- FDB WORD3-*
-WORD2 FDB TIB,AT
-WORD3 FDB IN,AT,PLUS,SWAP,ENCLOS,HERE,CLITER
- FCB 34
- FDB BLANKS,IN,PSTORE,OVER,SUB,TOR,R,HERE
- FDB CSTORE,PLUS,HERE,ONEP,FROMR,CMOVE
- FDB SEMIS
-*
-* ######>> screen 49 <<
-* ======>> 139 <<
- FCB $88
- FCC 7,(NUMBER)
- FCB $A9
- FDB WORD-7
-PNUMB FDB DOCOL
-PNUMB2 FDB ONEP,DUP,TOR,CAT,BASE,AT,DIGIT,ZBRAN
- FDB PNUMB4-*
- FDB SWAP,BASE,AT,USTAR,DROP,ROT,BASE
- FDB AT,USTAR,DPLUS,DPL,AT,ONEP,ZBRAN
- FDB PNUMB3-*
- FDB ONE,DPL,PSTORE
-PNUMB3 FDB FROMR,BRAN
- FDB PNUMB2-*
-PNUMB4 FDB FROMR
- FDB SEMIS
-*
-* ======>> 140 <<
- FCB $86
- FCC 5,NUMBER
- FCB $D2
- FDB PNUMB-11
-NUMB FDB DOCOL,ZERO,ZERO,ROT,DUP,ONEP,CAT,CLITER
- FCC "-" minus sign
- FDB EQUAL,DUP,TOR,PLUS,LIT,$FFFF
-NUMB1 FDB DPL,STORE,PNUMB,DUP,CAT,BL,SUB
- FDB ZBRAN
- FDB NUMB2-*
- FDB DUP,CAT,CLITER
- FCC "."
- FDB SUB,ZERO,QERR,ZERO,BRAN
- FDB NUMB1-*
-NUMB2 FDB DROP,FROMR,ZBRAN
- FDB NUMB3-*
- FDB DMINUS
-NUMB3 FDB SEMIS
-*
-* ======>> 141 <<
- FCB $85
- FCC 4,-FIND
- FCB $C4
- FDB NUMB-9
-DFIND FDB DOCOL,BL,WORD,HERE,CONTXT,AT,AT
- FDB PFIND,DUP,ZEQU,ZBRAN
- FDB DFIND2-*
- FDB DROP,HERE,LATEST,PFIND
-DFIND2 FDB SEMIS
-*
-* ######>> screen 50 <<
-* ======>> 142 <<
- FCB $87
- FCC 6,(ABORT)
- FCB $A9
- FDB DFIND-8
-PABORT FDB DOCOL,ABORT
- FDB SEMIS
-*
-* ======>> 143 <<
- FCB $85
- FCC 4,ERROR
- FCB $D2
- FDB PABORT-10
-ERROR FDB DOCOL,WARN,AT,ZLESS
- FDB ZBRAN
-* note: WARNING is -1 to abort, 0 to print error #
-* and 1 to print error message from disc
- FDB ERROR2-*
- FDB PABORT
-ERROR2 FDB HERE,COUNT,TYPE,PDOTQ
- FCB 4,7 ( bell )
- FCC " ? "
- FDB MESS,SPSTOR,IN,AT,BLK,AT,QUIT
- FDB SEMIS
-*
-* ======>> 144 <<
- FCB $83
- FCC 2,ID.
- FCB $AE
- FDB ERROR-8
-IDDOT FDB DOCOL,PAD,CLITER
- FCB 32
- FDB CLITER
- FCB $5F ( underline )
- FDB FILL,DUP,PFA,LFA,OVER,SUB,PAD
- FDB SWAP,CMOVE,PAD,COUNT,CLITER
- FCB 31
- FDB AND,TYPE,SPACE
- FDB SEMIS
-*
-* ######>> screen 51 <<
-* ======>> 145 <<
- FCB $86
- FCC 5,CREATE
- FCB $C5
- FDB IDDOT-6
-CREATE FDB DOCOL,DFIND,ZBRAN
- FDB CREAT2-*
- FDB DROP,PDOTQ
- FCB 8
- FCB 7 ( bel )
- FCC "redef: "
- FDB NFA,IDDOT,CLITER
- FCB 4
- FDB MESS,SPACE
-CREAT2 FDB HERE,DUP,CAT,WIDTH,AT,MIN
- FDB ONEP,ALLOT,DUP,CLITER
- FCB $A0
- FDB TOGGLE,HERE,ONE,SUB,CLITER
- FCB $80
- FDB TOGGLE,LATEST,COMMA,CURENT,AT,STORE
- FDB HERE,TWOP,COMMA
- FDB SEMIS
-*
-* ######>> screen 52 <<
-* ======>> 146 <<
- FCB $C9 immediate
- FCC 8,[COMPILE]
- FCB $DD
- FDB CREATE-9
-BCOMP FDB DOCOL,DFIND,ZEQU,ZERO,QERR,DROP,CFA,COMMA
- FDB SEMIS
-*
-* ======>> 147 <<
- FCB $C7 immediate
- FCC 6,LITERAL
- FCB $CC
- FDB BCOMP-12
-LITER FDB DOCOL,STATE,AT,ZBRAN
- FDB LITER2-*
- FDB COMPIL,LIT,COMMA
-LITER2 FDB SEMIS
-*
-* ======>> 148 <<
- FCB $C8 immediate
- FCC 7,DLITERAL
- FCB $CC
- FDB LITER-10
-DLITER FDB DOCOL,STATE,AT,ZBRAN
- FDB DLITE2-*
- FDB SWAP,LITER,LITER
-DLITE2 FDB SEMIS
-*
-* ######>> screen 53 <<
-* ======>> 149 <<
- FCB $89
- FCC 8,INTERPRET
- FCB $D4
- FDB DLITER-11
-INTERP FDB DOCOL
-INTER2 FDB DFIND,ZBRAN
- FDB INTER5-*
- FDB STATE,AT,LESS
- FDB ZBRAN
- FDB INTER3-*
- FDB CFA,COMMA,BRAN
- FDB INTER4-*
-INTER3 FDB CFA,EXEC
-INTER4 FDB BRAN
- FDB INTER7-*
-INTER5 FDB HERE,NUMB,DPL,AT,ONEP,ZBRAN
- FDB INTER6-*
- FDB DLITER,BRAN
- FDB INTER7-*
-INTER6 FDB DROP,LITER
-INTER7 FDB QSTACK,BRAN
- FDB INTER2-*
-* FDB SEMIS never executed
-
-*
-* ######>> screen 54 <<
-* ======>> 150 <<
- FCB $89
- FCC 8,IMMEDIATE
- FCB $C5
- FDB INTERP-12
-IMMED FDB DOCOL,LATEST,CLITER
- FCB $40
- FDB TOGGLE
- FDB SEMIS
-*
-* ======>> 151 <<
- FCB $8A
- FCC 9,VOCABULARY
- FCB $D9
- FDB IMMED-12
-VOCAB FDB DOCOL,BUILDS,LIT,$81A0,COMMA,CURENT,AT,CFA
- FDB COMMA,HERE,VOCLIN,AT,COMMA,VOCLIN,STORE,DOES
-DOVOC FDB TWOP,CONTXT,STORE
- FDB SEMIS
-*
-* ======>> 152 <<
-*
-* Note: FORTH does not go here in the rom-able dictionary,
-* since FORTH is a type of variable.
-*
-*
-* ======>> 153 <<
- FCB $8B
- FCC 10,DEFINITIONS
- FCB $D3
- FDB VOCAB-13
-DEFIN FDB DOCOL,CONTXT,AT,CURENT,STORE
- FDB SEMIS
-*
-* ======>> 154 <<
- FCB $C1 immediate (
- FCB $A8
- FDB DEFIN-14
-PAREN FDB DOCOL,CLITER
- FCC ")"
- FDB WORD
- FDB SEMIS
-*
-* ######>> screen 55 <<
-* ======>> 155 <<
- FCB $84
- FCC 3,QUIT
- FCB $D4
- FDB PAREN-4
-QUIT FDB DOCOL,ZERO,BLK,STORE
- FDB LBRAK
-*
-* Here is the outer interpretter
-* which gets a line of input, does it, prints " OK"
-* then repeats :
-QUIT2 FDB RPSTOR,CR,QUERY,INTERP,STATE,AT,ZEQU
- FDB ZBRAN
- FDB QUIT3-*
- FDB PDOTQ
- FCB 3
- FCC 3, OK
-QUIT3 FDB BRAN
- FDB QUIT2-*
-* FDB SEMIS ( never executed )
-*
-* ======>> 156 <<
- FCB $85
- FCC 4,ABORT
- FCB $D4
- FDB QUIT-7
-ABORT FDB DOCOL,SPSTOR,DEC,QSTACK,DRZERO,CR,PDOTQ
- FCB 8
- FCC "Forth-68"
- FDB FORTH,DEFIN
- FDB QUIT
-* FDB SEMIS never executed
- PAGE
-*
-* ######>> screen 56 <<
-* bootstrap code... moves rom contents to ram :
-* ======>> 157 <<
- FCB $84
- FCC 3,COLD
- FCB $C4
- FDB ABORT-8
-COLD FDB *+2
-CENT LDS #REND-1 top of destination
- LDX #ERAM top of stuff to move
-COLD2 LEAX -1,X
- LDA 0,X
- PSHS A move TASK & FORTH to ram
- CMPX #RAM
- BNE COLD2
-*
- LDS #XFENCE-1 put stack at a safe place for now
- LDX COLINT
- STX XCOLUM
- LDX DELINT
- STX XDELAY
- LDX VOCINT
- STX XVOCL
- LDX DPINIT
- STX XDP
- LDX FENCIN
- STX XFENCE
-
-
-WENT LDS #XFENCE-1 top of destination
- LDX #FENCIN top of stuff to move
-WARM2 LEAX -1,X
- LDA 0,X
- PSHS A
- CMPX #SINIT
- BNE WARM2
-*
- LDS SINIT
- LDX UPINIT
- STX UP init user ram pointer
- LDX #ABORT
- STX IP
- NOP Here is a place to jump to special user
- NOP initializations such as I/0 interrups
- NOP
-*
-* For systems with TRACE:
- LDX #00
- STX TRLIM clear trace mode
- LDX #0
- STX BRKPT clear breakpoint address
- JMP RPSTOR+2 start the virtual machine running !
-*
-* Here is the stuff that gets copied to ram :
-* at address $140:
-*
-RAM FDB $3000,$3000,0,0
-
-* ======>> (152) <<
- FCB $C5 immediate
- FCC 4,FORTH
- FCB $C8
- FDB NOOP-7
-RFORTH FDB DODOES,DOVOC,$81A0,TASK-7
- FDB 0
- FCC "(C) Forth Interest Group, 1979"
- FCB $84
- FCC 3,TASK
- FCB $CB
- FDB FORTH-8
-RTASK FDB DOCOL,SEMIS
-ERAM FCC "David Lion"
- PAGE
-*
-* ######>> screen 57 <<
-* ======>> 158 <<
- FCB $84
- FCC 3,S->D
- FCB $C4
- FDB COLD-7
-STOD FDB DOCOL,DUP,ZLESS,MINUS
- FDB SEMIS
-
-
-*
-* ======>> 159 <<
- FCB $81 ; *
- FCB $AA
- FDB STOD-7
-STAR FDB *+2
- JSR USTARS
- LEAS 1,S
- LEAS 1,S
- JMP NEXT
-*
-* ======>> 160 <<
- FCB $84
- FCC 3,/MOD
- FCB $C4
- FDB STAR-4
-SLMOD FDB DOCOL,TOR,STOD,FROMR,USLASH
- FDB SEMIS
-*
-* ======>> 161 <<
- FCB $81 ; /
- FCB $AF
- FDB SLMOD-7
-SLASH FDB DOCOL,SLMOD,SWAP,DROP
- FDB SEMIS
-*
-* ======>> 162 <<
- FCB $83
- FCC 2,MOD
- FCB $C4
- FDB SLASH-4
-MOD FDB DOCOL,SLMOD,DROP
- FDB SEMIS
-*
-* ======>> 163 <<
- FCB $85
- FCC 4,*/MOD
- FCB $C4
- FDB MOD-6
-SSMOD FDB DOCOL,TOR,USTAR,FROMR,USLASH
- FDB SEMIS
-*
-* ======>> 164 <<
- FCB $82
- FCC 1,*/
- FCB $AF
- FDB SSMOD-8
-SSLASH FDB DOCOL,SSMOD,SWAP,DROP
- FDB SEMIS
-*
-* ======>> 165 <<
- FCB $85
- FCC 4,M/MOD
- FCB $C4
- FDB SSLASH-5
-MSMOD FDB DOCOL,TOR,ZERO,R,USLASH
- FDB FROMR,SWAP,TOR,USLASH,FROMR
- FDB SEMIS
-*
-* ======>> 166 <<
- FCB $83
- FCC 2,ABS
- FCB $D3
- FDB MSMOD-8
-ABS FDB DOCOL,DUP,ZLESS,ZBRAN
- FDB ABS2-*
- FDB MINUS
-ABS2 FDB SEMIS
-*
-* ======>> 167 <<
- FCB $84
- FCC 3,DABS
- FCB $D3
- FDB ABS-6
-DABS FDB DOCOL,DUP,ZLESS,ZBRAN
- FDB DABS2-*
- FDB DMINUS
-DABS2 FDB SEMIS
-*
-* ######>> screen 58 <<
-* Disc primatives :
-* ======>> 168 <<
- FCB $83
- FCC 2,USE
- FCB $C5
- FDB DABS-7
-USE FDB DOCON
- FDB XUSE
-* ======>> 169 <<
- FCB $84
- FCC 3,PREV
- FCB $D6
- FDB USE-6
-PREV FDB DOCON
- FDB XPREV
-* ======>> 170 <<
- FCB $84
- FCC 3,+BUF
- FCB $C6
- FDB PREV-7
-PBUF FDB DOCOL,CLITER
- FCB $84
- FDB PLUS,DUP,LIMIT,EQUAL,ZBRAN
- FDB PBUF2-*
- FDB DROP,FIRST
-PBUF2 FDB DUP,PREV,AT,SUB
- FDB SEMIS
-*
-* ======>> 171 <<
- FCB $86
- FCC 5,UPDATE
- FCB $C5
- FDB PBUF-7
-UPDATE FDB DOCOL,PREV,AT,AT,LIT,$8000,OR,PREV,AT,STORE
- FDB SEMIS
-*
-* ======>> 172 <<
- FCB $8D
- FCC 12,EMPTY-BUFFERS
- FCB $D3
- FDB UPDATE-9
-MTBUF FDB DOCOL,FIRST,LIMIT,OVER,SUB,ERASE
- FDB SEMIS
-*
-* ======>> 173 <<
- FCB $83
- FCC 2,DR0
- FCB $B0
- FDB MTBUF-16
-DRZERO FDB DOCOL,ZERO,OFSET,STORE
- FDB SEMIS
-*
-* ======>> 174 <<== system dependant word
- FCB $83
- FCC 2,DR1
- FCB $B1
- FDB DRZERO-6
-DRONE FDB DOCOL,LIT,$07D0,OFSET,STORE
- FDB SEMIS
-*
-* ######>> screen 59 <<
-* ======>> 175 <<
- FCB $86
- FCC 5,BUFFER
- FCB $D2
- FDB DRONE-6
-BUFFER FDB DOCOL,USE,AT,DUP,TOR
-BUFFR2 FDB PBUF,ZBRAN
- FDB BUFFR2-*
- FDB USE,STORE,R,AT,ZLESS
- FDB ZBRAN
- FDB BUFFR3-*
- FDB R,TWOP,R,AT,LIT,$7FFF,AND,ZERO,RW
-BUFFR3 FDB R,STORE,R,PREV,STORE,FROMR,TWOP
- FDB SEMIS
-*
-* ######>> screen 60 <<
-* ======>> 176 <<
- FCB $85
- FCC 4,BLOCK
- FCB $CB
- FDB BUFFER-9
-BLOCK FDB DOCOL,OFSET,AT,PLUS,TOR
- FDB PREV,AT,DUP,AT,R,SUB,DUP,PLUS,ZBRAN
- FDB BLOCK5-*
-BLOCK3 FDB PBUF,ZEQU,ZBRAN
- FDB BLOCK4-*
- FDB DROP,R,BUFFER,DUP,R,ONE,RW,TWO,SUB
-BLOCK4 FDB DUP,AT,R,SUB,DUP,PLUS,ZEQU,ZBRAN
- FDB BLOCK3-*
- FDB DUP,PREV,STORE
-BLOCK5 FDB FROMR,DROP,TWOP
- FDB SEMIS
-*
-* ######>> screen 61 <<
-* ======>> 177 <<
- FCB $86
- FCC 5,(LINE)
- FCB $A9
- FDB BLOCK-8
-PLINE FDB DOCOL,TOR,CLITER
- FCB $40
- FDB BBUF,SSMOD,FROMR,BSCR,STAR,PLUS,BLOCK,PLUS,CLITER
- FCB $40
- FDB SEMIS
-*
-* ======>> 178 <<
- FCB $85
- FCC 4,.LINE
- FCB $C5
- FDB PLINE-9
-DLINE FDB DOCOL,PLINE,DTRAIL,TYPE
- FDB SEMIS
-*
-* ======>> 179 <<
- FCB $87
- FCC 6,MESSAGE
- FCB $C5
- FDB DLINE-8
-MESS FDB DOCOL,WARN,AT,ZBRAN
- FDB MESS3-*
- FDB DDUP,ZBRAN
- FDB MESS3-*
- FDB CLITER
- FCB 4
- FDB OFSET,AT,BSCR,SLASH,SUB,DLINE,BRAN
- FDB MESS4-*
-MESS3 FDB PDOTQ
- FCB 6
- FCC 6,err #
- FDB DOT
-MESS4 FDB SEMIS
-*
-* ======>> 180 <<
- FCB $84
- FCC 3,LOAD input:scr #
- FCB $C4
- FDB MESS-10
-LOAD FDB DOCOL,BLK,AT,TOR,IN,AT,TOR,ZERO,IN,STORE
- FDB BSCR,STAR,BLK,STORE
- FDB INTERP,FROMR,IN,STORE,FROMR,BLK,STORE
- FDB SEMIS
-*
-* ======>> 181 <<
- FCB $C3
- FCC 2,-->
- FCB $BE
- FDB LOAD-7
-ARROW FDB DOCOL,QLOAD,ZERO,IN,STORE,BSCR
- FDB BLK,AT,OVER,MOD,SUB,BLK,PSTORE
- FDB SEMIS
- PAGE
-*
-*
-* ######>> screen 63 <<
-* The next 4 subroutines are machine dependent, and are
-* called by words 13 through 16 in the dictionary.
-*
-* ======>> 182 << code for EMIT
-PEMIT STB N save B
- STX N+1 save X
- LDB ACIAC
- BITB #2 check ready bit
- BEQ PEMIT+4 if not ready for more data
- STA ACIAD
- LDX UP
- STB IOSTAT-UORIG,X
- LDB N recover B & X
- LDX N+1
- RTS only A register may change
-* PEMIT JMP $E1D1 for MIKBUG
-* PEMIT FCB $3F,$11,$39 for PROTO
-* PEMIT JMP $D286 for Smoke Signal DOS
-*
-* ======>> 183 << code for KEY
-PKEY STB N
- STX N+1
- LDB ACIAC
- ASRB
- BCC PKEY+4 no incoming data yet
- LDA ACIAD
- ANDA #$7F strip parity bit
- LDX UP
- STB IOSTAT+1-UORIG,X
- LDB N
- LDX N+1
- RTS
-* PKEY JMP $E1AC for MIKBUG
-* PKEY FCB $3F,$14,$39 for PROTO
-* PKEY JMP $D289 for Smoke Signal DOS
-*
-* ######>> screen 64 <<
-* ======>> 184 << code for ?TERMINAL
-PQTER LDA ACIAC Test for 'break' condition
- ANDA #$11 mask framing error bit and
-* input buffer full
- BEQ PQTER2
- LDA ACIAD clear input buffer
- LDA #01
-PQTER2 RTS
-
-
- PAGE
-*
-* ======>> 185 << code for CR
-PRTCR LDA #$D carriage return ; PCR in 6800 source
- BSR PEMIT
- LDA #$A line feed
- BSR PEMIT
- LDA #$7F rubout
- LDX UP
- LDB XDELAY+1-UORIG,X
-PCR2 DECB
- BMI PQTER2 return if minus
- PSHS B save counter
- BSR PEMIT print RUBOUTs to delay.....
- PULS B
- BRA PCR2 repeat
-
-
- PAGE
-*
-* ######>> screen 66 <<
-* ======>> 187 <<
- FCB $85
- FCC 4,?DISC
- FCB $C3
- FDB ARROW-6
-QDISC FDB *+2
- JMP NEXT
-*
-* ######>> screen 67 <<
-* ======>> 189 <<
- FCB $8B
- FCC 10,BLOCK-WRITE
- FCB $C5
- FDB QDISC-8
-BWRITE FDB *+2
- JMP NEXT
-*
-* ######>> screen 68 <<
-* ======>> 190 <<
- FCB $8A
- FCC 9,BLOCK-READ
- FCB $C4
- FDB BWRITE-14
-BREAD FDB *+2
- JMP NEXT
-*
-*The next 3 words are written to create a substitute for disc
-* mass memory,located between $3210 & $3FFF in ram.
-* ======>> 190.1 <<
- FCB $82
- FCC 1,LO
- FCB $CF
- FDB BREAD-13
-LO FDB DOCON
- FDB MEMEND a system dependent equate at front
-*
-* ======>> 190.2 <<
- FCB $82
- FCC 1,HI
- FCB $C9
- FDB LO-5
-HI FDB DOCON
- FDB MEMTOP ( $3FFF in this version )
-*
-* ######>> screen 69 <<
-* ======>> 191 <<
- FCB $83
- FCC 2,R/W
- FCB $D7
- FDB HI-5
-RW FDB DOCOL,TOR,BBUF,STAR,LO,PLUS,DUP,HI,GREAT,ZBRAN
- FDB RW2-*
- FDB PDOTQ
- FCB 8
- FCC 8, Range ?
- FDB QUIT
-RW2 FDB FROMR,ZBRAN
- FDB RW3-*
- FDB SWAP
-RW3 FDB BBUF,CMOVE
- FDB SEMIS
-*
-* ######>> screen 72 <<
-* ======>> 192 <<
- FCB $C1 immediate
- FCB $A7 ' ( tick )
- FDB RW-6
-TICK FDB DOCOL,DFIND,ZEQU,ZERO,QERR,DROP,LITER
- FDB SEMIS
-*
-* ======>> 193 <<
- FCB $86
- FCC 5,FORGET
- FCB $D4
- FDB TICK-4
-FORGET FDB DOCOL,CURENT,AT,CONTXT,AT,SUB,CLITER
- FCB $18
- FDB QERR,TICK,DUP,FENCE,AT,LESS,CLITER
- FCB $15
- FDB QERR,DUP,ZERO,PORIG,GREAT,CLITER
- FCB $15
- FDB QERR,DUP,NFA,DICPT,STORE,LFA,AT,CONTXT,AT,STORE
- FDB SEMIS
-*
-* ######>> screen 73 <<
-* ======>> 194 <<
- FCB $84
- FCC 3,BACK
- FCB $CB
- FDB FORGET-9
-BACK FDB DOCOL,HERE,SUB,COMMA
- FDB SEMIS
-*
-* ======>> 195 <<
- FCB $C5
- FCC 4,BEGIN
- FCB $CE
- FDB BACK-7
-BEGIN FDB DOCOL,QCOMP,HERE,ONE
- FDB SEMIS
-*
-* ======>> 196 <<
- FCB $C5
- FCC 4,ENDIF
- FCB $C6
- FDB BEGIN-8
-ENDIF FDB DOCOL,QCOMP,TWO,QPAIRS,HERE
- FDB OVER,SUB,SWAP,STORE
- FDB SEMIS
-*
-* ======>> 197 <<
- FCB $C4
- FCC 3,THEN
- FCB $CE
- FDB ENDIF-8
-THEN FDB DOCOL,ENDIF
- FDB SEMIS
-*
-* ======>> 198 <<
- FCB $C2
- FCC 1,DO
- FCB $CF
- FDB THEN-7
-DO FDB DOCOL,COMPIL,XDO,HERE,THREE
- FDB SEMIS
-*
-* ======>> 199 <<
- FCB $C4
- FCC 3,LOOP
- FCB $D0
- FDB DO-5
-LOOP FDB DOCOL,THREE,QPAIRS,COMPIL,XLOOP,BACK
- FDB SEMIS
-*
-* ======>> 200 <<
- FCB $C5
- FCC 4,+LOOP
- FCB $D0
- FDB LOOP-7
-PLOOP FDB DOCOL,THREE,QPAIRS,COMPIL,XPLOOP,BACK
- FDB SEMIS
-*
-* ======>> 201 <<
- FCB $C5
- FCC 4,UNTIL ( same as END )
- FCB $CC
- FDB PLOOP-8
-UNTIL FDB DOCOL,ONE,QPAIRS,COMPIL,ZBRAN,BACK
- FDB SEMIS
-*
-* ######>> screen 74 <<
-* ======>> 202 <<
- FCB $C3
- FCC 2,END
- FCB $C4
- FDB UNTIL-8
-END FDB DOCOL,UNTIL
- FDB SEMIS
-*
-* ======>> 203 <<
- FCB $C5
- FCC 4,AGAIN
- FCB $CE
- FDB END-6
-AGAIN FDB DOCOL,ONE,QPAIRS,COMPIL,BRAN,BACK
- FDB SEMIS
-*
-* ======>> 204 <<
- FCB $C6
- FCC 5,REPEAT
- FCB $D4
- FDB AGAIN-8
-REPEAT FDB DOCOL,TOR,TOR,AGAIN,FROMR,FROMR
- FDB TWO,SUB,ENDIF
- FDB SEMIS
-*
-* ======>> 205 <<
- FCB $C2
- FCC 1,IF
- FCB $C6
- FDB REPEAT-9
-IF FDB DOCOL,COMPIL,ZBRAN,HERE,ZERO,COMMA,TWO
- FDB SEMIS
-*
-* ======>> 206 <<
- FCB $C4
- FCC 3,ELSE
- FCB $C5
- FDB IF-5
-ELSE FDB DOCOL,TWO,QPAIRS,COMPIL,BRAN,HERE
- FDB ZERO,COMMA,SWAP,TWO,ENDIF,TWO
- FDB SEMIS
-*
-* ======>> 207 <<
- FCB $C5
- FCC 4,WHILE
- FCB $C5
- FDB ELSE-7
-WHILE FDB DOCOL,IF,TWOP
- FDB SEMIS
-*
-* ######>> screen 75 <<
-* ======>> 208 <<
- FCB $86
- FCC 5,SPACES
- FCB $D3
- FDB WHILE-8
-SPACES FDB DOCOL,ZERO,MAX,DDUP,ZBRAN
- FDB SPACE3-*
- FDB ZERO,XDO
-SPACE2 FDB SPACE,XLOOP
- FDB SPACE2-*
-SPACE3 FDB SEMIS
-*
-* ======>> 209 <<
- FCB $82
- FCC 1,<#
- FCB $A3
- FDB SPACES-9
-BDIGS FDB DOCOL,PAD,HLD,STORE
- FDB SEMIS
-*
-* ======>> 210 <<
- FCB $82
- FCC 1,#>
- FCB $BE
- FDB BDIGS-5
-EDIGS FDB DOCOL,DROP,DROP,HLD,AT,PAD,OVER,SUB
- FDB SEMIS
-*
-* ======>> 211 <<
- FCB $84
- FCC 3,SIGN
- FCB $CE
- FDB EDIGS-5
-SIGN FDB DOCOL,ROT,ZLESS,ZBRAN
- FDB SIGN2-*
- FDB CLITER
- FCC "-"
- FDB HOLD
-SIGN2 FDB SEMIS
-*
-* ======>> 212 <<
- FCB $81 #
- FCB $A3
- FDB SIGN-7
-DIG FDB DOCOL,BASE,AT,MSMOD,ROT,CLITER
- FCB 9
- FDB OVER,LESS,ZBRAN
- FDB DIG2-*
- FDB CLITER
- FCB 7
- FDB PLUS
-DIG2 FDB CLITER
- FCC "0" ascii zero
- FDB PLUS,HOLD
- FDB SEMIS
-*
-* ======>> 213 <<
- FCB $82
- FCC 1,#S
- FCB $D3
- FDB DIG-4
-DIGS FDB DOCOL
-DIGS2 FDB DIG,OVER,OVER,OR,ZEQU,ZBRAN
- FDB DIGS2-*
- FDB SEMIS
-*
-* ######>> screen 76 <<
-* ======>> 214 <<
- FCB $82
- FCC 1,.R
- FCB $D2
- FDB DIGS-5
-DOTR FDB DOCOL,TOR,STOD,FROMR,DDOTR
- FDB SEMIS
-*
-* ======>> 215 <<
- FCB $83
- FCC 2,D.R
- FCB $D2
- FDB DOTR-5
-DDOTR FDB DOCOL,TOR,SWAP,OVER,DABS,BDIGS,DIGS,SIGN
- FDB EDIGS,FROMR,OVER,SUB,SPACES,TYPE
- FDB SEMIS
-*
-* ======>> 216 <<
- FCB $82
- FCC 1,D.
- FCB $AE
- FDB DDOTR-6
-DDOT FDB DOCOL,ZERO,DDOTR,SPACE
- FDB SEMIS
-*
-* ======>> 217 <<
- FCB $81 .
- FCB $AE
- FDB DDOT-5
-DOT FDB DOCOL,STOD,DDOT
- FDB SEMIS
-*
-* ======>> 218 <<
- FCB $81 ?
- FCB $BF
- FDB DOT-4
-QUEST FDB DOCOL,AT,DOT
- FDB SEMIS
-*
-* ######>> screen 77 <<
-* ======>> 219 <<
- FCB $84
- FCC 3,LIST
- FCB $D4
- FDB QUEST-4
-LIST FDB DOCOL,DEC,CR,DUP,SCR,STORE,PDOTQ
- FCB 6
- FCC "SCR # "
- FDB DOT,CLITER
- FCB $10
- FDB ZERO,XDO
-LIST2 FDB CR,I,THREE
- FDB DOTR,SPACE,I,SCR,AT,DLINE,XLOOP
- FDB LIST2-*
- FDB CR
- FDB SEMIS
-*
-* ======>> 220 <<
- FCB $85
- FCC 4,INDEX
- FCB $D8
- FDB LIST-7
-INDEX FDB DOCOL,CR,ONEP,SWAP,XDO
-INDEX2 FDB CR,I,THREE
- FDB DOTR,SPACE,ZERO,I,DLINE
- FDB QTERM,ZBRAN
- FDB INDEX3-*
- FDB LEAVE
-INDEX3 FDB XLOOP
- FDB INDEX2-*
- FDB SEMIS
-*
-* ======>> 221 <<
- FCB $85
- FCC 4,TRIAD
- FCB $C4
- FDB INDEX-8
-TRIAD FDB DOCOL,THREE,SLASH,THREE,STAR
- FDB THREE,OVER,PLUS,SWAP,XDO
-TRIAD2 FDB CR,I
- FDB LIST,QTERM,ZBRAN
- FDB TRIAD3-*
- FDB LEAVE
-TRIAD3 FDB XLOOP
- FDB TRIAD2-*
- FDB CR,CLITER
- FCB $0F
- FDB MESS,CR
- FDB SEMIS
-*
-* ######>> screen 78 <<
-* ======>> 222 <<
- FCB $85
- FCC 4,VLIST
- FCB $D4
- FDB TRIAD-8
-VLIST FDB DOCOL,CLITER
- FCB $80
- FDB OUT,STORE,CONTXT,AT,AT
-VLIST1 FDB OUT,AT,COLUMS,AT,CLITER
- FCB 32
- FDB SUB,GREAT,ZBRAN
- FDB VLIST2-*
- FDB CR,ZERO,OUT,STORE
-VLIST2 FDB DUP,IDDOT,SPACE,SPACE,PFA,LFA,AT
- FDB DUP,ZEQU,QTERM,OR,ZBRAN
- FDB VLIST1-*
- FDB DROP
- FDB SEMIS
-*
-* ======>> XX <<
- FCB $84
- FCC 3,NOOP
- FCB $D0
- FDB VLIST-8
-NOOP FDB NEXT a useful no-op
-ZZZZ FDB 0,0,0,0,0,0,0,0 end of rom program
-
-
-
-
-
-
-
- PAGE
- OPT L
- END