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