2020-11-25 09:36:30 +00:00
|
|
|
|
NEW
|
|
|
|
|
AUTO 3,1
|
|
|
|
|
*--------------------------------------
|
2020-12-02 15:22:57 +00:00
|
|
|
|
CP.RUN cpx #KW.CONLY
|
|
|
|
|
bcs .1 >= KW.CONLY
|
|
|
|
|
|
|
|
|
|
cpx #KW.ECOLON.ID
|
|
|
|
|
beq .1 END Compilation
|
2020-11-26 19:47:57 +00:00
|
|
|
|
|
|
|
|
|
>LDYA J.KEYWORDS,x
|
2020-11-25 09:36:30 +00:00
|
|
|
|
clc
|
2020-12-02 15:22:57 +00:00
|
|
|
|
jmp CP.Emit.JsrYA
|
2020-11-26 19:47:57 +00:00
|
|
|
|
|
2020-12-02 15:22:57 +00:00
|
|
|
|
.1 jmp (J.KEYWORDS,x)
|
2020-11-26 19:47:57 +00:00
|
|
|
|
*--------------------------------------
|
2020-12-02 15:22:57 +00:00
|
|
|
|
CP.DO jsr CP.PushCodePtr for compiling LOOP later
|
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
rts
|
2020-11-26 19:47:57 +00:00
|
|
|
|
*--------------------------------------
|
2020-12-02 15:22:57 +00:00
|
|
|
|
CP.LOOP lda #$A9 lda #imm
|
|
|
|
|
jsr CP.Emit.Byte
|
|
|
|
|
lda #$00
|
|
|
|
|
jsr CP.Emit.Byte
|
|
|
|
|
jsr CP.Emit.PUSHA
|
|
|
|
|
|
|
|
|
|
lda #$A9 lda #imm
|
|
|
|
|
jsr CP.Emit.Byte
|
|
|
|
|
lda #$01
|
|
|
|
|
jsr CP.Emit.Byte
|
|
|
|
|
jsr CP.Emit.PUSHA pushed n = 1
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
CP.pLOOP >LDYA J.KEYWORDS.ADD MAX I n -> MAX NEWI
|
|
|
|
|
jsr CP.Emit.JsrYA
|
|
|
|
|
jsr CP.Emit.LOOP
|
|
|
|
|
jsr CP.Emit.JMPBack
|
|
|
|
|
jsr CP.Emit.LOOPEND
|
|
|
|
|
clc
|
|
|
|
|
rts
|
2020-11-26 19:47:57 +00:00
|
|
|
|
*--------------------------------------
|
2020-12-02 15:22:57 +00:00
|
|
|
|
CP.I >LDYA J.KEYWORDS DUP
|
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
jmp CP.Emit.JsrYA
|
2020-11-26 19:47:57 +00:00
|
|
|
|
*--------------------------------------
|
|
|
|
|
CP.LEAVE
|
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
rts
|
2020-11-25 09:36:30 +00:00
|
|
|
|
*--------------------------------------
|
2020-12-02 15:22:57 +00:00
|
|
|
|
CP.IF jsr CP.Emit.TESTTRUE
|
|
|
|
|
jsr CP.Emit.JMP0000 to put jmp -> ELSE/ENDIF later
|
2020-11-26 19:47:57 +00:00
|
|
|
|
|
2020-11-27 16:37:47 +00:00
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
CP.ELSE jsr CP.PopPtr1 get previous JMP -> ptr1
|
2020-12-02 15:22:57 +00:00
|
|
|
|
jsr CP.Emit.JMP0000 to put jmp -> ENDIF later
|
2020-11-29 13:16:39 +00:00
|
|
|
|
jsr CP.UpdatePtr1
|
2020-11-25 16:29:06 +00:00
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
rts
|
2020-11-25 09:36:30 +00:00
|
|
|
|
*--------------------------------------
|
2020-11-27 16:37:47 +00:00
|
|
|
|
CP.ENDIF jsr CP.PopPtr1
|
2020-11-29 13:16:39 +00:00
|
|
|
|
jsr CP.UpdatePtr1
|
2020-11-26 19:47:57 +00:00
|
|
|
|
|
2020-11-25 16:29:06 +00:00
|
|
|
|
clc
|
|
|
|
|
rts
|
2020-11-25 09:36:30 +00:00
|
|
|
|
*--------------------------------------
|
2020-11-29 13:16:39 +00:00
|
|
|
|
CP.BEGIN jsr CP.PushCodePtr
|
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
rts
|
2020-11-26 19:47:57 +00:00
|
|
|
|
*--------------------------------------
|
2020-12-02 15:22:57 +00:00
|
|
|
|
CP.UNTIL jsr CP.Emit.TESTFALSE
|
|
|
|
|
jsr CP.Emit.JMPBack
|
|
|
|
|
jsr CP.Emit.RPDROP2
|
2020-11-29 13:16:39 +00:00
|
|
|
|
|
|
|
|
|
clc
|
|
|
|
|
rts
|
2020-11-26 19:47:57 +00:00
|
|
|
|
*--------------------------------------
|
2020-12-02 15:22:57 +00:00
|
|
|
|
CP.REPEAT jsr CP.Emit.JMPBack
|
2020-11-26 19:47:57 +00:00
|
|
|
|
|
2020-11-29 13:16:39 +00:00
|
|
|
|
clc
|
|
|
|
|
rts
|
2020-11-26 19:47:57 +00:00
|
|
|
|
*--------------------------------------
|
2020-12-02 15:22:57 +00:00
|
|
|
|
CP.WHILE jsr CP.Emit.TESTTRUE
|
|
|
|
|
jsr CP.Emit.JMPBack
|
|
|
|
|
jsr CP.Emit.RPDROP2
|
2020-11-29 13:16:39 +00:00
|
|
|
|
|
2020-11-26 19:47:57 +00:00
|
|
|
|
clc
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
2020-11-27 16:37:47 +00:00
|
|
|
|
CP.PushCodePtr ldy RP
|
|
|
|
|
|
|
|
|
|
lda ZPCodePtr+1
|
|
|
|
|
sta (pData),y
|
|
|
|
|
dey
|
|
|
|
|
|
|
|
|
|
lda ZPCodePtr
|
|
|
|
|
sta (pData),y
|
|
|
|
|
dey
|
|
|
|
|
|
|
|
|
|
sty RP
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
CP.PopPtr1 ldy RP
|
|
|
|
|
iny
|
|
|
|
|
lda (pData),y
|
|
|
|
|
sta ZPPtr1
|
|
|
|
|
|
|
|
|
|
iny
|
|
|
|
|
lda (pData),y
|
|
|
|
|
sta ZPPtr1+1
|
|
|
|
|
|
|
|
|
|
sty RP
|
|
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
2020-11-29 13:16:39 +00:00
|
|
|
|
CP.UpdatePtr1 lda ZPCodePtr
|
|
|
|
|
sta (ZPPtr1)
|
|
|
|
|
|
|
|
|
|
ldy #1
|
|
|
|
|
lda ZPCodePtr+1
|
|
|
|
|
sta (ZPPtr1),y
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
2020-12-02 15:22:57 +00:00
|
|
|
|
CP.Emit.JMP0000 lda #$4C JMP
|
|
|
|
|
jsr CP.Emit.Byte
|
2020-11-27 16:37:47 +00:00
|
|
|
|
|
|
|
|
|
jsr CP.PushCodePtr
|
|
|
|
|
|
|
|
|
|
lda #0
|
2020-12-02 15:22:57 +00:00
|
|
|
|
jsr CP.Emit.Byte
|
|
|
|
|
jsr CP.Emit.Byte
|
2020-11-27 16:37:47 +00:00
|
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
2020-12-02 15:22:57 +00:00
|
|
|
|
CP.Emit.JMPBack lda #$4C JMP
|
|
|
|
|
jsr CP.Emit.Byte
|
2020-11-29 13:16:39 +00:00
|
|
|
|
|
2020-12-02 15:22:57 +00:00
|
|
|
|
ldy RP
|
|
|
|
|
iny
|
|
|
|
|
lda (pData),y
|
|
|
|
|
jsr CP.Emit.Byte
|
|
|
|
|
|
|
|
|
|
iny
|
|
|
|
|
lda (pData),y
|
|
|
|
|
jmp CP.Emit.Byte
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
CP.Emit.RPDROP2 ldx #CODE.RPDROP2.L
|
|
|
|
|
ldy #0
|
2020-11-29 13:16:39 +00:00
|
|
|
|
|
2020-12-02 15:22:57 +00:00
|
|
|
|
.1 lda CODE.RPDROP2,y
|
|
|
|
|
jsr CP.Emit.Byte
|
|
|
|
|
iny
|
|
|
|
|
dex
|
|
|
|
|
bne .1
|
2020-11-29 13:16:39 +00:00
|
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
2020-12-02 15:22:57 +00:00
|
|
|
|
CP.Emit.TESTTRUE
|
|
|
|
|
ldx #CODE.TESTTRUE.L
|
|
|
|
|
ldy #0
|
2020-11-26 19:47:57 +00:00
|
|
|
|
|
2020-12-02 15:22:57 +00:00
|
|
|
|
.1 lda CODE.TESTTRUE,y
|
|
|
|
|
jsr CP.Emit.Byte
|
|
|
|
|
iny
|
|
|
|
|
dex
|
|
|
|
|
bne .1
|
|
|
|
|
|
|
|
|
|
rts
|
2020-11-26 19:47:57 +00:00
|
|
|
|
*--------------------------------------
|
2020-12-02 15:22:57 +00:00
|
|
|
|
CP.Emit.TESTFALSE
|
|
|
|
|
ldx #CODE.TESTFALSE.L
|
|
|
|
|
ldy #0
|
2020-11-26 19:47:57 +00:00
|
|
|
|
|
2020-12-02 15:22:57 +00:00
|
|
|
|
.1 lda CODE.TESTFALSE,y
|
|
|
|
|
jsr CP.Emit.Byte
|
|
|
|
|
iny
|
|
|
|
|
dex
|
|
|
|
|
bne .1
|
|
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
CP.Emit.PULLA ldx #CODE.PULLA.L
|
|
|
|
|
ldy #0
|
2020-11-26 19:47:57 +00:00
|
|
|
|
|
2020-12-02 15:22:57 +00:00
|
|
|
|
.1 lda CODE.PULLA,y
|
|
|
|
|
jsr CP.Emit.Byte
|
|
|
|
|
iny
|
|
|
|
|
dex
|
|
|
|
|
bne .1
|
|
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
CP.Emit.PUSHA ldx #CODE.PUSHA.L
|
|
|
|
|
ldy #0
|
2020-11-26 19:47:57 +00:00
|
|
|
|
|
2020-12-02 15:22:57 +00:00
|
|
|
|
.1 lda CODE.PUSHA,y
|
|
|
|
|
jsr CP.Emit.Byte
|
|
|
|
|
iny
|
|
|
|
|
dex
|
|
|
|
|
bne .1
|
|
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
CP.Emit.LOOP ldx #CODE.LOOP.L
|
|
|
|
|
ldy #0
|
2020-11-26 19:47:57 +00:00
|
|
|
|
|
2020-12-02 15:22:57 +00:00
|
|
|
|
.1 lda CODE.LOOP,y
|
|
|
|
|
jsr CP.Emit.Byte
|
|
|
|
|
iny
|
|
|
|
|
dex
|
|
|
|
|
bne .1
|
|
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
*--------------------------------------
|
|
|
|
|
CP.Emit.LOOPEND ldx #CODE.LOOPEND.L
|
|
|
|
|
ldy #0
|
2020-11-26 19:47:57 +00:00
|
|
|
|
|
2020-12-02 15:22:57 +00:00
|
|
|
|
.1 lda CODE.LOOPEND,y
|
|
|
|
|
jsr CP.Emit.Byte
|
|
|
|
|
iny
|
|
|
|
|
dex
|
|
|
|
|
bne .1
|
|
|
|
|
|
|
|
|
|
rts
|
2020-11-26 19:47:57 +00:00
|
|
|
|
*--------------------------------------
|
2020-12-02 15:22:57 +00:00
|
|
|
|
CP.Emit.JsrYA pha
|
2020-11-26 19:47:57 +00:00
|
|
|
|
lda #$20
|
2020-12-02 15:22:57 +00:00
|
|
|
|
jsr CP.Emit.Byte
|
2020-11-26 19:47:57 +00:00
|
|
|
|
tya
|
2020-12-02 15:22:57 +00:00
|
|
|
|
jsr CP.Emit.Byte
|
2020-11-26 19:47:57 +00:00
|
|
|
|
pla
|
|
|
|
|
*--------------------------------------
|
2020-12-02 15:22:57 +00:00
|
|
|
|
CP.Emit.Byte sta (ZPCodePtr)
|
2020-11-26 19:47:57 +00:00
|
|
|
|
inc ZPCodePtr
|
|
|
|
|
bne .8
|
|
|
|
|
inc ZPCodePtr+1
|
|
|
|
|
.8 rts
|
|
|
|
|
*--------------------------------------
|
2020-11-25 09:36:30 +00:00
|
|
|
|
MAN
|
|
|
|
|
SAVE usr/src/bin/forth.s.cp
|
|
|
|
|
LOAD usr/src/bin/forth.s
|
|
|
|
|
ASM
|