* To do:
* 4 IO routines -- OK?
-* adjust ram locations
-* then add trace routines
+* adjust ram locations -- OK?
+* then add trace routines -- OK?
* then try in emulator
* ASSEMBLY SOURCE LISTING
* ORG $E0 variables
ORG $1300 variables
PGBASE EQU *
- SETDP PGBASE/$100
+PGBDP EQU PGBASE/$100
+ SETDP PGBDP
N RMB 10 used as scratch by (FIND),ENCLOSE,CMOVE,EMIT,KEY,
UP RMB 2 the pointer to base of current user's 'USER' table
* ( altered during multi-tasking )
*
+* For the tracer:
+ RMB 4
+TRASP RMB 2
+TRAVEC RMB 2
+TRAA RMB 1
+TRAB RMB 1
+FLAGON RMB 1
+*
PAGE
* This system is shown with one user, but additional users
* may be added by allocating additional user tables:
* The next instruction could be patched to JMP TRACE =
* if a TRACE routine is available: =
* =
- JMP 0,X
+* Or add the TRACE routine in-line, since we are assembling it.
+ TST TRACEM
+ BEQ NEXTGO
+ STX TRAVEC
+ TFR S,X ; Mechanical! Mechanical! (So the funn 6800 stack didn't beach us.)
+ STX TRASP
+ LDA #':'
+ JSR PEMIT
+* LDA #' '
+* JSR PEMIT
+ LDX W
+ LEAX -1,X
+ LEAX -1,X ; allocation link
+ LEAX -1,X ; last char
+ LDA #31
+NAMTST LEAX -1,X ; length byte?
+ LDB 0,X
+ BMI NAMTDN
+ DECA
+ BNE NAMTST
+NAMTDN ANDB #31 ; It's the length byte whether it wants to be or not.
+NAMSHW LEAX 1,X
+ LDA 0,X
+ JSR PEMIT
+ DECB
+ BNE NAMSHW
+* show the virtual registers
+* TOO MUCH OUTPUT! Have to trim this.
+ LDA #' '
+ JSR PEMIT
+ LDA #'@'
+ LDX #TRAVEC
+ JSR PHEX4F
+ TFR DP,A
+ LDB #(W-PGBASE)
+ TFR D,X
+ LDA #'W'
+ JSR PHEX4F
+ LDA #'I'
+ JSR PHEX4F
+ LDA #'R'
+ JSR PHEX4F
+ LDA #'U'
+ JSR PHEX4F
+ TFR DP,A
+ LDB #(W-TRASP)
+ TFR D,X
+ LDA #'S'
+ BSR PHEX4F
+ LDA #'>'
+ TFR S,X
+ BSR PHEX4F
+ LDA #' '
+ BSR PHEX4F
+*
+ JSR PRTCR
+ LDX TRAVEC
+*
+NEXTGO JMP 0,X
NOP
* JMP TRACE ( an alternate for the above )
* =
+* =
+*DBG
+PHEX4F JSR PEMIT
+ BSR PHEXX2
+ BSR PHEXX2
+ LDA #' '
+ JMP PEMIT ; rob return
+*
+PHEXX2 LDA 0,X
+ LSRA
+ LSRA
+ LSRA
+ LSRA
+ BSR PHEXD
+ LDA 0,X
+ BSR PHEXD
+ LEAX 1,X
+ RTS
+*
+PHEXD ANDA #$0F
+ CMPA #10
+ BLO PHEXDH
+ ADDA #7 ; 'A'-'9'+1
+PHEXDH ADDA #'0'
+ JMP PEMIT ; rob return
+*
+DEBUGP FDB *+2
+ INC FLAGON my version of trace
+ LDA FLAGON
+ JSR PEMIT
+ JMP NEXT
+*
+DEBUGM FDB *+2
+ DEC FLAGON my version of trace
+ LDA FLAGON
+ JSR PEMIT
+ JMP NEXT
+*DBG
* = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
PSHS B
PSHS A
INCB
- BRA ENCL7+2
+ BRA ENCL7A ; ENCL7+2 ******* was a *potential* bug ****** (But DP)
* found NUL following the word instead of SPACE
ENCL7 LDB N
- PSHS B save EW
+ENCL7A PSHS B save EW
PSHS A
ENCL8 LDB N save NC
JMP PUSHBA
JSR PEMIT
LDX UP
INC XOUT+1-UORIG,X
- BNE *+4
+ BNE EMITDN
INC XOUT-UORIG,X
- JMP NEXT
+EMITDN JMP NEXT
*
* ======>> 14 <<
FCB $83
FCB $D3
FDB RPSTOR-6
SEMIS FDB *+2
+* DBG
+ LDA #-$10
+ ADDA FLAGON
+ STA FLAGON my version of trace
+ JSR PEMIT
+*
LDX RP
LEAX 1,X
LEAX 1,X
LEAX -1,X
LEAX -1,X
STX RP
+* DBG
+ LDA #$10
+ ADDA FLAGON
+ STA FLAGON my version of trace
+ JSR PEMIT
+*
LDA IP
LDB IP+1
STA 2,X Store address of the high level word
FCC 'DECIMA' ; 'DECIMAL'
FCB $CC
FDB HEX-6
-DEC FDB DOCOL
+DECIM FDB DOCOL
FDB CLITER
FCB 10 note: hex "A"
FDB BASE,STORE
FCB $87
FCC '(;CODE' ; '(;CODE)'
FCB $A9
- FDB DEC-10
+ FDB DECIM-10
PSCODE FDB DOCOL,FROMR,TWOP,LATEST,PFA,CFA,STORE
FDB SEMIS
*
FCC 'ABOR' ; 'ABORT'
FCB $D4
FDB QUIT-7
-ABORT FDB DOCOL,SPSTOR,DEC,QSTACK,DRZERO,CR,PDOTQ
- FCB 8
- FCC "Forth-68"
+ABORT FDB DOCOL,SPSTOR,DECIM,QSTACK,DRZERO,CR,PDOTQ
+ FCB 15
+ FCC "Forth-68oo-68o9"
FDB FORTH,DEFIN
FDB QUIT
* FDB SEMIS never executed
FDB ABORT-8
COLD FDB *+2
* CENT LDS #REND-1 top of destination on 6800
-CENT LDA #PGBASE/$100
+CENT LDA #PGBDP
TFR A,DP
LDS #REND top of destination on 6809
LDX #ERAM top of stuff to move
STX TRLIM clear trace mode
LDX #0
STX BRKPT clear breakpoint address
+* DBG
+ LDA #$21
+ STA FLAGON my version of trace
+ JSR PEMIT
+*
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
+RAM FDB $5000,$5000,0,0
* ======>> (152) <<
FCB $C5 immediate
FCC 'LIS' ; 'LIST'
FCB $D4
FDB QUEST-4
-LIST FDB DOCOL,DEC,CR,DUP,SCR,STORE,PDOTQ
+LIST FDB DOCOL,DECIM,CR,DUP,SCR,STORE,PDOTQ
FCB 6
FCC "SCR # "
FDB DOT,CLITER