A2osX/BIN/CC.S.PCC.txt

596 lines
12 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

NEW
AUTO 3,1
*--------------------------------------
* PCC = Pre Compiled Code
*--------------------------------------
ZS.RT.Ptr1 .EQ ZPBIN
ZS.RT.Ptr2 .EQ ZPBIN+2
*--------------------------------------
PCC.FH .PH $2000
PCC.FH.2000 cld
jmp (PCC.FH.JMP,x)
.DA #$61 6502,Level 1 (65c02)
.DA #1 BIN Layout Version 1
.DA #0 S.PS.F.EVENT
.DA #0
PCC.FH.CSSIZE .EQ *-PCC.FH.2000
.DA $FFFF * Code Size (without Constants)
PCC.FH.DSSIZE .EQ *-PCC.FH.2000
.DA $FFFF * Data Size
.DA #256 Stack Size
.DA #4 ZP Size
.DA 0
PCC.FH.JMP .DA PCC.FH.INIT
.DA PCC.FH.RUN
.DA PCC.FH.DOEVENT
.DA PCC.FH.QUIT
PCC.FH.IDATA .EQ *-PCC.FH.2000
.DA $FFFF
.DA 0
PCC.FH.INIT
* TODO : LoadLib code
PCC.FH.QUIT
* TODO : UnloadLib code
PCC.FH.DOEVENT clc
rts
* int main(int argc, char *argv[]) ;
PCC.FH.RUN lda #0
.1 pha
>SYSCALL ArgV
bcs .2
>STYA ZS.RT.Ptr1
pla
pha
asl
tay
lda ZS.RT.Ptr1
sta (pData),y
lda ZS.RT.Ptr1+1
iny
sta (pData),y
pla
inc
bra .1
.2 pla
jsr PCC.FH.CS Execute INIT code
>PUSHWZ returned int=0
lda #0
>PUSHA
ldy #S.PS.ARGC
lda (pPS),y
>PUSHA int ARGC
>PUSHW pData *char[] ARGV
* >DEBUG
PCC.FH.MAIN .EQ *-PCC.FH.2000+1
jsr $FFFF * jsr main
>PULLA
inc pStack pull returned int
sec
rts
*PCC.FH.SYSCALL jsr A2osX.SYSCALL
* bcc .8
* inc pStack
* eor #$ff
* inc
* >PUSHA int -ERROR code...
* ldy #1
* lda #$FF
* sta (pStack),y FFxx on stack
*.8
PCC.FH.CS .EP
PCC.FH.L .EQ *-PCC.FH
*--------------------------------------
PCC.DEBUG .DA #PCC.DEBUG.L
>DEBUG
PCC.DEBUG.L .EQ *-PCC.DEBUG
*--------------------------------------
PCC.SLEEP .DA #PCC.SLEEP.L
>SLEEP
PCC.SLEEP.L .EQ *-PCC.SLEEP
*--------------------------------------
PCC.ENTER .DA #PCC.ENTER.L
ldx pBase
phx
clc
adc pStack A = Local Size
sta pBase
PCC.ENTER.L .EQ *-PCC.ENTER
*--------------------------------------
PCC.LEAVE .DA #PCC.LEAVE.L
ldx pBase
stx pStack
plx
stx pBase
rts
PCC.LEAVE.L .EQ *-PCC.LEAVE
*--------------------------------------
PCC.ADDLOCAL .DA #PCC.ADDLOCAL.L
clc
adc pStack
sta pStack
PCC.ADDLOCAL.L .EQ *-PCC.ADDLOCAL
*--------------------------------------
PCC.SetRetValue .DA #PCC.SetRetValue.L
ldy #0
.1 >PULLA
sta (pBase),y
iny
dex
bne .1
PCC.SetRetValue.L .EQ *-PCC.SetRetValue
*--------------------------------------
PCC.TestZero1 .DA #PCC.TestZero1.L
>PULLA
tay
.2 bne .2+5 skip JMP abs
PCC.TestZero1.L .EQ *-PCC.TestZero1
*--------------------------------------
PCC.TestZero2 .DA #PCC.TestZero2.L
>PULLA
ora (pStack)
inc pStack
tay
.2 bne .2+5 skip JMP abs
PCC.TestZero2.L .EQ *-PCC.TestZero2
*--------------------------------------
PCC.TestZeroX .DA #PCC.TestZeroX.L
lda #0
.1 ora (pStack)
inc pStack
dex
bne .1
tay
.2 bne .2+5 skip JMP abs
PCC.TestZeroX.L .EQ *-PCC.TestZeroX
*--------------------------------------
PCC.TestnZero1 .DA #PCC.TestnZero1.L
>PULLA
tay
.2 beq .2+5 skip JMP abs
PCC.TestnZero1.L .EQ *-PCC.TestnZero1
*--------------------------------------
PCC.TestnZero2 .DA #PCC.TestnZero2.L
>PULLA
ora (pStack)
inc pStack
tay
.2 beq .2+5 skip JMP abs
PCC.TestnZero2.L .EQ *-PCC.TestnZero2
*--------------------------------------
PCC.TestnZeroX .DA #PCC.TestnZeroX.L
lda #0
.1 ora (pStack)
inc pStack
dex
bne .1
tay
.2 beq .2+5 skip JMP abs
PCC.TestnZeroX.L .EQ *-PCC.TestnZeroX
*--------------------------------------
PCC.PushLAddrH .DA #PCC.PushLAddrH.L
>PUSHB pBase+1
PCC.PushLAddrH.L .EQ *-PCC.PushLAddrH
*--------------------------------------
PCC.PushLAddrL .DA #PCC.PushLAddrL.L
clc
adc pBase
>PUSHA
PCC.PushLAddrL.L .EQ *-PCC.PushLAddrL
*--------------------------------------
PCC.PushIAddr .DA #PCC.PushIAddr.L
clc
adc PCC.FH.2000+PCC.FH.IDATA
dec pStack
>PUSHA
txa
adc PCC.FH.2000+PCC.FH.IDATA+1
ldy #1
sta (pStack),y
PCC.PushIAddr.L .EQ *-PCC.PushIAddr
*--------------------------------------
PCC.PushUAddr .DA #PCC.PushUAddr.L
clc
adc pData
dec pStack
>PUSHA
txa
adc pData+1
ldy #1
sta (pStack),y
PCC.PushUAddr.L .EQ *-PCC.PushUAddr
*--------------------------------------
PCC.GetLAddr1 .DA #PCC.GetLAddr1.L
clc
adc pBase
sta ZS.RT.Ptr1
lda pBase+1
sta ZS.RT.Ptr1+1
PCC.GetLAddr1.L .EQ *-PCC.GetLAddr1
*--------------------------------------
PCC.GetIAddr1 .DA #PCC.GetIAddr1.L
clc
adc PCC.FH.2000+PCC.FH.IDATA
sta ZS.RT.Ptr1
txa
adc PCC.FH.2000+PCC.FH.IDATA+1
sta ZS.RT.Ptr1+1
PCC.GetIAddr1.L .EQ *-PCC.GetIAddr1
*--------------------------------------
PCC.GetUAddr1 .DA #PCC.GetUAddr1.L
clc
adc pData
sta ZS.RT.Ptr1
txa
adc pData+1
sta ZS.RT.Ptr1+1
PCC.GetUAddr1.L .EQ *-PCC.GetUAddr1
*--------------------------------------
PCC.PopAddr1 .DA #PCC.PopAddr1.L
>PULLA
sta ZS.RT.Ptr1
>PULLA
sta ZS.RT.Ptr1+1
PCC.PopAddr1.L .EQ *-PCC.PopAddr1
*--------------------------------------
PCC.SetValue .DA #PCC.SetValue.L
.1 lda (pStack),y
sta (ZS.RT.Ptr1),y
dey
bpl .1
PCC.SetValue.L .EQ *-PCC.SetValue
*--------------------------------------
PCC.GetLAddr2 .DA #PCC.GetLAddr2.L
clc
adc pBase
sta ZS.RT.Ptr2
lda pBase+1
sta ZS.RT.Ptr2+1
PCC.GetLAddr2.L .EQ *-PCC.GetLAddr2
*--------------------------------------
PCC.GetIAddr2 .DA #PCC.GetIAddr2.L
clc
adc PCC.FH.2000+PCC.FH.IDATA
sta ZS.RT.Ptr2
txa
adc PCC.FH.2000+PCC.FH.IDATA+1
sta ZS.RT.Ptr2+1
PCC.GetIAddr2.L .EQ *-PCC.GetIAddr2
*--------------------------------------
PCC.GetUAddr2 .DA #PCC.GetUAddr2.L
clc
adc pData
sta ZS.RT.Ptr2
txa
adc pData+1
sta ZS.RT.Ptr2+1
PCC.GetUAddr2.L .EQ *-PCC.GetUAddr2
*--------------------------------------
PCC.PopAddr2 .DA #PCC.PopAddr2.L
>PULLA
sta ZS.RT.Ptr2
>PULLA
sta ZS.RT.Ptr2+1
PCC.PopAddr2.L .EQ *-PCC.PopAddr2
*--------------------------------------
PCC.Deref2 .DA #PCC.Deref2.L
ldy #1
lda (ZS.RT.Ptr2),y
tay
lda (ZS.RT.Ptr2)
sta ZS.RT.Ptr2
sty ZS.RT.Ptr2+1
PCC.Deref2.L .EQ *-PCC.Deref2
*--------------------------------------
PCC.PushDeref2 .DA #PCC.PushDeref2.L
ldy #1
>PUSHB (ZS.RT.Ptr2),y
>PUSHB (ZS.RT.Ptr2)
PCC.PushDeref2.L .EQ *-PCC.PushDeref2
*--------------------------------------
PCC.PushValue .DA #PCC.PushValue.L
.1 lda (ZS.RT.Ptr2),y
>PUSHA
dey
bpl .1
PCC.PushValue.L .EQ *-PCC.PushValue
*--------------------------------------
PCC.Inc1 .DA #PCC.Inc1.L
lda (ZS.RT.Ptr2)
inc
sta (ZS.RT.Ptr2)
PCC.Inc1.L .EQ *-PCC.Inc1
*--------------------------------------
PCC.Inc2 .DA #PCC.Inc2.L
lda (ZS.RT.Ptr2)
inc
sta (ZS.RT.Ptr2)
bne .1
ldy #1
lda (ZS.RT.Ptr2),y
inc
sta (ZS.RT.Ptr2),y
.1
PCC.Inc2.L .EQ *-PCC.Inc2
*--------------------------------------
PCC.Inc4 .DA #PCC.Inc4.L
lda (ZS.RT.Ptr2)
inc
sta (ZS.RT.Ptr2)
bne .2
ldy #1
.1 lda (ZS.RT.Ptr2),y
inc
sta (ZS.RT.Ptr2),y
beq .2
iny
cpy #4
bne .1
.2
PCC.Inc4.L .EQ *-PCC.Inc4
*--------------------------------------
PCC.Dec1 .DA #PCC.Dec1.L
lda (ZS.RT.Ptr2)
dec
sta (ZS.RT.Ptr2)
PCC.Dec1.L .EQ *-PCC.Dec1
*--------------------------------------
PCC.Dec2 .DA #PCC.Dec2.L
lda (ZS.RT.Ptr2)
php
dec
sta (ZS.RT.Ptr2)
plp
bne .1
ldy #1
lda (ZS.RT.Ptr2),y
dec
sta (ZS.RT.Ptr2),y
.1
PCC.Dec2.L .EQ *-PCC.Dec2
*--------------------------------------
PCC.Dec4 .DA #PCC.Dec4.L
lda (ZS.RT.Ptr2)
clc
sbc #0
sta (ZS.RT.Ptr2)
bcs .2
ldy #1
.1 lda (ZS.RT.Ptr2),y
sbc #0
sta (ZS.RT.Ptr2),y
bcs .2
iny
cpy #4
bne .1
.2
PCC.Dec4.L .EQ *-PCC.Dec4
*--------------------------------------
PCC.BOPS.bMUL
*--------------------------------------
PCC.BOPS.cMUL
*--------------------------------------
PCC.BOPS.bDIV
*--------------------------------------
PCC.BOPS.cDIV
*--------------------------------------
PCC.BOPS.bMOD
*--------------------------------------
PCC.BOPS.cMOD
*--------------------------------------
PCC.BOPS.ADD .DA #PCC.BOPS.ADD.L
clc
>PULLA
adc (pStack)
sta (pStack)
PCC.BOPS.ADD.L .EQ *-PCC.BOPS.ADD
*--------------------------------------
PCC.BOPS.SUB .DA #PCC.BOPS.SUB.L
sec
ldy #1
lda (pStack),y
sbc (pStack)
sta (pStack),y
inc pStack
PCC.BOPS.SUB.L .EQ *-PCC.BOPS.SUB
*--------------------------------------
PCC.BOPS.SHL .DA #PCC.BOPS.SHL.L
>PULLA
tax
beq .8
lda (pStack)
.1 asl
dex
bne .1
sta (pStack)
.8
PCC.BOPS.SHL.L .EQ *-PCC.BOPS.SHL
*--------------------------------------
PCC.BOPS.SHR .DA #PCC.BOPS.SHR.L
>PULLA
tax
beq .8
lda (pStack)
.1 lsr
dex
bne .1
sta (pStack)
.8
PCC.BOPS.SHR.L .EQ *-PCC.BOPS.SHR
*--------------------------------------
PCC.BOPS.L .DA #PCC.BOPS.L.L
>PULLA
cmp (pStack)
bcc .8
lda #0
sta (pStack)
rts
.8 lda #1
sta (pStack)
PCC.BOPS.L.L .EQ *-PCC.BOPS.L
*--------------------------------------
PCC.BOPS.G .DA #PCC.BOPS.G.L
>PULLA
cmp (pStack)
beq .1
bcs .8
.1 lda #0
sta (pStack)
rts
.8 lda #1
sta (pStack)
PCC.BOPS.G.L .EQ *-PCC.BOPS.G
*--------------------------------------
PCC.BOPS.LE .DA #PCC.BOPS.LE.L
>PULLA
cmp (pStack)
bcc .8
beq .8
lda #0
sta (pStack)
rts
.8 lda #1
sta (pStack)
PCC.BOPS.LE.L .EQ *-PCC.BOPS.LE
*--------------------------------------
PCC.BOPS.GE .DA #PCC.BOPS.GE.L
>PULLA
cmp (pStack)
bcs .8
lda #0
sta (pStack)
rts
.8 lda #1
sta (pStack)
PCC.BOPS.GE.L .EQ *-PCC.BOPS.GE
*--------------------------------------
PCC.BOPS.EQ .DA #PCC.BOPS.EQ.L
>PULLA
cmp (pStack)
beq .1
lda #0
clc
.1 ror
sta (pStack)
PCC.BOPS.EQ.L .EQ *-PCC.BOPS.EQ
*--------------------------------------
PCC.BOPS.NE .DA #PCC.BOPS.NE.L
>PULLA
eor (pStack)
sta (pStack)
PCC.BOPS.NE.L .EQ *-PCC.BOPS.NE
*--------------------------------------
PCC.BOPS.LAND
*--------------------------------------
PCC.BOPS.AND .DA #PCC.BOPS.AND.L
>PULLA
and (pStack)
sta (pStack)
PCC.BOPS.AND.L .EQ *-PCC.BOPS.AND
*--------------------------------------
PCC.BOPS.LOR
*--------------------------------------
PCC.BOPS.OR .DA #PCC.BOPS.OR.L
>PULLA
ora (pStack)
sta (pStack)
PCC.BOPS.OR.L .EQ *-PCC.BOPS.OR
*--------------------------------------
PCC.BOPS.EOR .DA #PCC.BOPS.EOR.L
>PULLA
eor (pStack)
sta (pStack)
PCC.BOPS.EOR.L .EQ *-PCC.BOPS.EOR
*--------------------------------------
MAN
SAVE usr/src/bin/cc.s.pcc
LOAD usr/src/bin/cc.s
ASM