A2osX/BIN/FORTH.S.CP.txt

247 lines
4.5 KiB
Plaintext
Raw Normal View History

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