A2osX/BIN/CC.S.KW.txt

717 lines
11 KiB
Plaintext
Raw Normal View History

NEW
AUTO 3,1
*--------------------------------------
* Built in Keywords
*--------------------------------------
KW.IF jsr STMT.NewCPS00
2022-08-20 14:37:37 +00:00
bcs .99
jsr CC.GetCharNB
bcs .9
cmp #'('
bne .9
jsr CORE.GetNCharNB
bcs .9
jsr EXP.Eval00 Any var type
2022-01-30 21:47:08 +00:00
bcs .99
jsr KW.TestZero Y,A=T/Q
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
lda #'E'
jsr SYM.LookupLabelA
bcs .99
2022-08-20 14:37:37 +00:00
lda #$4C emit JMP else
jsr CODE.TOABSYX
bcs .99
jsr CC.GetCharNB
bcs .99
cmp #')'
bne .9
jmp STMT.SetCPSType
.9 lda #E.CSYN
sec
2022-08-20 14:37:37 +00:00
.99 rts
*--------------------------------------
KW.IF.END jsr CORE.GetCharNBNL
2022-08-20 14:37:37 +00:00
bcs .1
2022-08-20 14:37:37 +00:00
cmp #';'
beq .1
2022-08-20 14:37:37 +00:00
>LDYA L.CC.KW2.IF Check allowed KW for IF....
jsr CC.LookupID
bcc .2
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
.1 lda #'E' define ELSE Label
jsr SYM.NewLabelA
2022-08-20 14:37:37 +00:00
bcs .99
2022-08-20 14:37:37 +00:00
clv pop context
rts
*--------------------------------------
.2 lda #'X'
jsr SYM.LookupLabelA
2022-08-20 14:37:37 +00:00
bcs .99
2022-08-20 14:37:37 +00:00
lda #$4C emit JMP exit
jsr CODE.TOABSYX
bcs .99
2022-08-20 14:37:37 +00:00
lda #'E' define ELSE Label
jsr SYM.NewLabelA
2022-08-20 14:37:37 +00:00
bcs .99
2022-01-30 21:47:08 +00:00
lda #KW.ELSE.ID replace IF by ELSE keyword
2022-08-20 14:37:37 +00:00
ldy CStackPtr
sta (ZPCCStack),y
jsr STMT.SetCPSType
2022-08-20 14:37:37 +00:00
bcs .99
bit .99 set V : DONT pop context
2022-01-30 21:47:08 +00:00
rts
2022-08-20 14:37:37 +00:00
.9 lda #E.CSYN
sec
.99 rts
*--------------------------------------
KW.ELSE lda #E.CSYN illegal
2022-08-20 14:37:37 +00:00
sec
rts
*--------------------------------------
KW.ELSE.END lda #'X' define EXIT Label
jsr SYM.NewLabelA
2022-08-20 14:37:37 +00:00
bcs .99
clv pop context
.99 rts
*--------------------------------------
KW.WHILE jsr STMT.NewCPS00
2022-08-20 14:37:37 +00:00
bcs .99
lda #'C' define CONT Label
jsr SYM.NewLabelA
2022-08-20 14:37:37 +00:00
bcs .99
jsr CC.GetCharNB
bcs .9
2022-08-20 14:37:37 +00:00
cmp #'('
bne .9
2022-01-30 21:47:08 +00:00
jsr CORE.GetNCharNB
bcs .9
2022-06-22 06:26:44 +00:00
jsr EXP.Eval00 Any var type
2022-08-20 14:37:37 +00:00
bcs .99
jsr KW.TestZero
2022-08-20 14:37:37 +00:00
lda #'B'
jsr SYM.LookupLabelA
2022-08-20 14:37:37 +00:00
bcs .99
2022-06-22 06:26:44 +00:00
2022-08-20 14:37:37 +00:00
lda #$4C emit JMP break:
2022-01-30 21:47:08 +00:00
jsr CODE.TOABSYX
2022-08-20 14:37:37 +00:00
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
jsr CC.GetCharNB
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
cmp #')'
bne .9
2022-01-30 21:47:08 +00:00
jmp STMT.SetCPSType
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
.9 lda #E.CSYN
2022-01-30 21:47:08 +00:00
sec
2022-08-20 14:37:37 +00:00
.99 rts
2022-01-30 21:47:08 +00:00
*--------------------------------------
KW.WHILE.END >LDYA L.PCC.SLEEP
jsr CODE.EmitPCC
bcs .99
lda #'C'
jsr SYM.LookupLabelA
2022-08-20 14:37:37 +00:00
bcs .99
lda #$4C
jsr CODE.TOABSYX emit JMP cont:
bcs .99
lda #'B' define BREAK Label
jsr SYM.NewLabelA
2022-08-20 14:37:37 +00:00
bcs .99
clv pop context
.99 rts
*--------------------------------------
KW.DO jsr STMT.NewCPS00
2022-08-20 14:37:37 +00:00
bcs .99
lda #'C' define CONT Label
jsr SYM.NewLabelA
2022-08-20 14:37:37 +00:00
bcs .99
jmp STMT.SetCPSType
2022-08-20 14:37:37 +00:00
.99 rts
*--------------------------------------
KW.DO.END >LDYA L.CC.KW2.DO Check allowed KW for DO....
2022-08-20 14:37:37 +00:00
jsr CC.LookupID
bcs .9
jsr CC.GetCharNB
bcs .9
cmp #'('
bne .9
jsr CORE.GetNCharNB
2022-08-20 14:37:37 +00:00
bcs .9
jsr EXP.Eval00 Any var type
2022-08-20 14:37:37 +00:00
bcs .99
jsr KW.TestnZero
2022-08-20 14:37:37 +00:00
lda #'C'
jsr SYM.LookupLabelA
2022-08-20 14:37:37 +00:00
bcs .99
lda #$4C emit JMP cont
jsr CODE.TOABSYX
bcs .99
lda #'B' define BREAK Label
jsr SYM.NewLabelA
2022-08-20 14:37:37 +00:00
bcs .99
jsr CC.GetCharNB
bcs .99
cmp #')'
bne .9
jsr CORE.GetNCharNB
2022-08-20 14:37:37 +00:00
bcs .9
clv pop context
2022-01-30 21:47:08 +00:00
clc
rts
2022-08-20 14:37:37 +00:00
.9 lda #E.CSYN
sec
.99 rts
2022-01-30 21:47:08 +00:00
*--------------------------------------
2022-08-20 14:37:37 +00:00
* for (s1;e2;s3) s;
2022-01-30 21:47:08 +00:00
*
2022-06-12 20:42:22 +00:00
* { <- new scope : allows for(int i=1; ....)
2022-08-20 14:37:37 +00:00
* s1;
2022-06-12 20:42:22 +00:00
* loop:
2022-08-20 14:37:37 +00:00
* while (e2) jmp break:
2022-06-12 20:42:22 +00:00
* {
2022-08-20 14:37:37 +00:00
* s; jsr s:
2022-06-12 20:42:22 +00:00
* cont:
2022-08-20 14:37:37 +00:00
* s3; jmp loop:
2022-06-12 20:42:22 +00:00
* }
2022-08-20 14:37:37 +00:00
* s:
* <s>;
* break:
2022-01-30 21:47:08 +00:00
* }
*--------------------------------------
KW.FOR jsr CC.GetCharNB
2022-08-20 14:37:37 +00:00
bcs .29
2022-01-30 21:47:08 +00:00
cmp #'('
2022-08-20 14:37:37 +00:00
bne .29
2022-01-30 21:47:08 +00:00
jsr STMT.NewCPS00
2022-08-20 14:37:37 +00:00
bcs .29
jsr CORE.GetNCharNB skip '('
2022-08-20 14:37:37 +00:00
bcs .29
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
>LDYA L.CC.TYPEQUAL
jsr CC.LookupID
bcs .1
2022-06-22 06:26:44 +00:00
jsr DECL.X
2022-08-20 14:37:37 +00:00
bcc .2
.19 rts
.1 jsr STMT.Get get s1
2022-08-20 14:37:37 +00:00
bcs .19
* jsr KW.StackDiscard
2022-08-20 14:37:37 +00:00
.2 jsr CC.GetCharNB
2022-06-12 20:42:22 +00:00
bcs .9
2022-01-30 21:47:08 +00:00
cmp #';'
2022-06-12 20:42:22 +00:00
bne .9
2022-01-30 21:47:08 +00:00
jsr CORE.GetNCharNB skip ';'
2022-06-12 20:42:22 +00:00
bcs .9
2022-01-30 21:47:08 +00:00
*--------------------------------------
2022-08-20 14:37:37 +00:00
lda #'L' LOOP Label
jsr SYM.NewLabelA
2022-08-20 14:37:37 +00:00
bcs .99
2022-01-30 21:47:08 +00:00
jsr EXP.Eval00 get e2
2022-01-30 21:47:08 +00:00
.29 bcs .99
jsr KW.TestZero
2022-01-30 21:47:08 +00:00
bcs .99
2022-08-20 14:37:37 +00:00
lda #'B'
jsr SYM.LookupLabelA
2022-08-20 14:37:37 +00:00
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
lda #$4C emit JMP break:
jsr CODE.TOABSYX
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
lda #'S'
jsr SYM.LookupLabelA
2022-08-20 14:37:37 +00:00
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
lda #$20 emit JSR s:
jsr CODE.TOABSYX
2022-01-30 21:47:08 +00:00
jsr CC.GetCharNB
bcs .9
2022-01-30 21:47:08 +00:00
cmp #';'
bne .9
jsr CORE.GetNCharNB skip ';'
2022-01-30 21:47:08 +00:00
bcs .9
*--------------------------------------
2022-08-20 14:37:37 +00:00
lda #'C' CONT Label
jsr SYM.NewLabelA
2022-08-20 14:37:37 +00:00
bcs .99
2022-01-30 21:47:08 +00:00
jsr STMT.Get get s3
2022-01-30 21:47:08 +00:00
bcs .99
* jsr KW.StackDiscard
2022-01-30 21:47:08 +00:00
jsr CC.GetCharNB
bcs .9
cmp #')'
bne .9
2022-08-20 14:37:37 +00:00
lda #'L'
jsr SYM.LookupLabelA
2022-08-20 14:37:37 +00:00
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
lda #$4C
jsr CODE.TOABSYX emit JMP loop
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
lda #'S' S Label
jsr SYM.NewLabelA
2022-08-20 14:37:37 +00:00
bcs .99
2022-01-30 21:47:08 +00:00
jmp STMT.SetCPSType
2022-01-30 21:47:08 +00:00
.9 lda #E.CSYN
sec
.99 rts
*--------------------------------------
KW.FOR.END lda #$60
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
jsr CODE.EmitByte set RTS for JSR code;
bcs .99
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
lda #'B' define BREAK Label
jsr SYM.NewLabelA
2022-08-20 14:37:37 +00:00
bcs .99
2022-08-20 14:37:37 +00:00
clv pop context
2022-08-20 14:37:37 +00:00
.99 rts
*--------------------------------------
KW.SWITCH jsr CC.GetCharNB
bcs .98
cmp #'('
bne .98
jsr CORE.GetNCharNB
bcs .98
jsr EXP.Eval00 Any var type
bcs .99 Y,A=T/Q
tax
bne .97
cpy #SYM.T.UCHAR
bcc .97
cpy #SYM.T.ULONG
bcs .97
cpy #SYM.T.SINT+1
bcs .1
>LDYA L.PCC.8to16 make char an int
jsr CODE.EmitPCC
bcs .99
.1 >LDYAI 256
>SYSCALL GetMem
bcs .99
txa
jsr CC.Push push CPS.hMEM
lda #0
jsr CC.Push push CPS.Ptr
bcs .99
jsr STMT.NewCPS
bcs .99
jsr CC.GetCharNB
bcs .99
cmp #')'
bne .98
lda #'J'
jsr SYM.LookupLabelA
bcs .99
lda #$4C emit JMP JmpTable
jsr CODE.TOABSYX
bcs .99
jmp STMT.SetCPSType
.97 lda #E.TMISMATCH
sec
rts
.98 lda #E.CSYN
sec
.99
KW.SWITCH.RTS rts
*--------------------------------------
KW.SWITCH.END lda #'J' define JMP Label
jsr SYM.NewLabelA
bcs KW.SWITCH.RTS
lda CStackPtr
clc
adc #CPS.hMEM
tay
lda (ZPCCStack),y
>SYSCALL GetMemPtr
>STYA ZPPtr1
lda CStackPtr
clc
adc #CPS.Ptr
tay
lda (ZPCCStack),y
sta ZPPtr2+1
stz ZPPtr2
.1 ldy ZPPtr2
cpy ZPPtr2+1
beq .2
lda (ZPPtr1),y
pha
iny
lda (ZPPtr1),y
tax
pla
jsr CODE.LDAXI
bcs .99
>LDYA L.PCC.JmpOnYA
jsr CODE.EmitPCC
bcs .99
ldy ZPPtr2
iny
iny
lda (ZPPtr1),y
tax
iny
lda (ZPPtr1),y
iny
sty ZPPtr2
tay
lda #$4C emit JMP Case ...
jsr CODE.TOABSYX
bcs .99
bra .1
.2 >LDYA L.PCC.Pop16
jsr CODE.EmitPCC
bcs .99
lda #'D'
jsr SYM.LookupLabelA
bcs .3
lda #$4C emit JMP Default
jsr CODE.TOABSYX
bcs .99
.3 lda #'B' define BREAK Label
jsr SYM.NewLabelA
bcs .99
lda CStackPtr
clc
adc #CPS.hMEM
tay
lda (ZPCCStack),y
>SYSCALL FreeMem
clv pop context
.99 rts
*--------------------------------------
KW.CASE ldy CStackPtr
beq .98
lda (ZPCCStack),y
cmp #KW.SWITCH.ID SWITCH ??
bne .98
tya
clc
adc #CPS.hMEM
tay
lda (ZPCCStack),y
>SYSCALL GetMemPtr
>STYA ZPPtr1
jsr EXP.GetIntegral
bcs .99
>STYA ZPPtr2
lda CStackPtr
clc
adc #CPS.Ptr
tay
lda (ZPCCStack),y
tay
lda ZPPtr2
sta (ZPPtr1),y
iny
lda ZPPtr2+1
sta (ZPPtr1),y
iny
lda ZPCCCode
sta (ZPPtr1),y
iny
lda ZPCCCode+1
sta (ZPPtr1),y
iny
beq .97
phy
lda CStackPtr
clc
adc #CPS.Ptr
tay
pla
sta (ZPCCStack),y
jsr CC.GetCharNB
bcs .98
cmp #':'
bne .98
jsr CORE.GetNCharNB skip ':'
clc
rts
.97 lda #E.BUF
sec
rts
.98 lda #E.CSYN
2022-06-12 20:42:22 +00:00
sec
.99 rts
*--------------------------------------
KW.DEFAULT ldy CStackPtr
beq .9
lda (ZPCCStack),y
cmp #KW.SWITCH.ID
bne .9
jsr CC.GetCharNB
bcs .9
cmp #':'
bne .9
jsr CORE.GetNCharNB skip ':'
lda #'D' define DEFAULT Label
jmp SYM.NewLabelA
.9 lda #E.CSYN
sec
.99 rts
2022-06-12 20:42:22 +00:00
*--------------------------------------
KW.BREAK lda #'B'
2022-08-20 14:37:37 +00:00
jsr SYM.LookupLabelA
2022-08-20 14:37:37 +00:00
bcs .9
2022-08-20 14:37:37 +00:00
lda #$4C emit JMP break
jmp CODE.TOABSYX
2022-08-20 14:37:37 +00:00
.9 lda #E.CSYN
2022-06-12 20:42:22 +00:00
sec
rts
*--------------------------------------
KW.CONTINUE lda #'C'
2022-08-20 14:37:37 +00:00
jsr SYM.LookupLabelA
2022-08-20 14:37:37 +00:00
bcs .9
2022-08-20 14:37:37 +00:00
lda #$4C emit JMP cont
jmp CODE.TOABSYX
2022-08-20 14:37:37 +00:00
.9 lda #E.CSYN
2022-01-30 21:47:08 +00:00
sec
rts
*--------------------------------------
KW.RETURN ldx ZPLineBufPtr
phx
ldx ZPLineBufPtr+1
phx
2022-01-30 21:47:08 +00:00
>LDYA L.CC._RETURN_
>STYA ZPLineBufPtr
jsr SYM.Lookup
plx
stx ZPLineBufPtr+1
plx
stx ZPLineBufPtr
2022-06-22 06:26:44 +00:00
bcs .99
ldy #SYM.Q
lda (ZPLookupSymPtr),y
2022-01-30 21:47:08 +00:00
pha
lda (ZPLookupSymPtr) SYM.T
tay
pla
2022-01-30 21:47:08 +00:00
jsr EXP.Eval
2022-01-30 21:47:08 +00:00
bcs .99
jsr SYM.GetYASizeOfInAXC Y,A=T/Q
2022-01-30 21:47:08 +00:00
tax X = sizeof
jsr CODE.SetRetValue
2022-08-20 14:37:37 +00:00
bcs .99
2022-06-22 06:26:44 +00:00
2022-08-20 14:37:37 +00:00
>LDYA L.PCC.LEAVE
jmp CODE.EmitPCC
.99 rts
2022-01-30 21:47:08 +00:00
*--------------------------------------
KW.SIZEOF
2022-02-04 14:57:17 +00:00
lda #E.CSYN
sec
rts
*--------------------------------------
2022-01-30 21:47:08 +00:00
* Input : Value on Stack, Y,A = Type/Qual
*--------------------------------------
KW.TestZero jsr EXP.GetYASizeOfInAXC
2022-01-30 21:47:08 +00:00
tax
2022-08-20 14:37:37 +00:00
cpx #1
bne .1
2022-08-20 14:37:37 +00:00
>LDYA L.PCC.TestZero1
jmp CODE.EmitPCC
2022-08-20 14:37:37 +00:00
.1 cpx #2
bne .2
2022-01-30 21:47:08 +00:00
2022-08-20 14:37:37 +00:00
>LDYA L.PCC.TestZero2
jmp CODE.EmitPCC
2022-08-20 14:37:37 +00:00
.2 jsr CODE.LDXI
bcs .9
>LDYA L.PCC.TestZeroX
jmp CODE.EmitPCC
.9 rts
*--------------------------------------
2022-08-20 14:37:37 +00:00
* Input : Value on Stack, Y,A = Type/Qual
*--------------------------------------
KW.TestnZero jsr EXP.GetYASizeOfInAXC
2022-08-20 14:37:37 +00:00
tax
cpx #1
bne .1
2022-08-20 14:37:37 +00:00
>LDYA L.PCC.TestnZero1
jmp CODE.EmitPCC
2022-08-20 14:37:37 +00:00
.1 cpx #2
bne .2
>LDYA L.PCC.TestnZero2
jmp CODE.EmitPCC
.2 jsr CODE.LDXI
bcs .9
>LDYA L.PCC.TestnZeroX
jmp CODE.EmitPCC
.9 rts
*--------------------------------------
2022-01-30 21:47:08 +00:00
* Input : Value on Stack, Y,A = Type/Qual
*--------------------------------------
KW.StackDiscard jsr TYPE.SizeOf
2022-01-30 21:47:08 +00:00
txa
beq .8 void
2022-01-30 21:47:08 +00:00
jsr CODE.AddLocal
.8 clc
2022-01-30 21:47:08 +00:00
.9 rts
*--------------------------------------
MAN
SAVE usr/src/bin/cc.s.kw
LOAD usr/src/bin/cc.s
ASM