mirror of https://github.com/A2osX/A2osX.git
340 lines
5.1 KiB
Plaintext
340 lines
5.1 KiB
Plaintext
NEW
|
||
AUTO 3,1
|
||
.LIST OFF
|
||
*--------------------------------------
|
||
* Built in Keywords
|
||
*--------------------------------------
|
||
CC.KW.JMP txa
|
||
>STA.G CC.CmdSave
|
||
jmp (J.CC.KW,x)
|
||
*--------------------------------------
|
||
CC.WHILE jsr CC.PushCS push Test location for WHILE loop
|
||
bcc CC.IF
|
||
|
||
rts
|
||
*--------------------------------------
|
||
CC.IF jsr CC.GetCharNB
|
||
bcs .9
|
||
|
||
cmp #'('
|
||
bne .9
|
||
|
||
jsr CC.GetNextCharNB
|
||
bcs .9
|
||
|
||
ldy #0 Any var type
|
||
lda #0
|
||
jsr CC.ExpEval
|
||
bcs .99
|
||
|
||
jsr CC.IsValue0
|
||
|
||
jsr CC.GetCharNB
|
||
bcs .99
|
||
|
||
cmp #')'
|
||
bne .9
|
||
|
||
jsr CC.GetNextCharNB skip ')'
|
||
bcs .9
|
||
|
||
jsr CC.PushCS push place to set JMP if false
|
||
bcs .99
|
||
|
||
lda ZPCCCode
|
||
clc
|
||
adc #2
|
||
sta ZPCCCode
|
||
bcc .5
|
||
|
||
inc ZPCCCode+1
|
||
|
||
.5 >LDA.G CC.CmdSave
|
||
jsr CC.Push push IF / WHILE
|
||
bcs .99
|
||
|
||
lda #'}' end block expected
|
||
jmp CC.Push
|
||
|
||
.9 lda #E.CSYN
|
||
sec
|
||
.99 rts
|
||
*--------------------------------------
|
||
CC.IF.END jsr CC.Pop
|
||
bcs .9
|
||
|
||
sta ZPPtr1
|
||
|
||
jsr CC.Pop
|
||
bcs .9
|
||
|
||
sta ZPPtr1+1
|
||
|
||
lda ZPCCCode
|
||
sta (ZPPtr1)
|
||
|
||
ldy #1
|
||
lda ZPCCCode+1
|
||
sta (ZPPtr1),y
|
||
|
||
* clc
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
CC.ELSE
|
||
|
||
clc
|
||
rts
|
||
*--------------------------------------
|
||
CC.WHILE.END jsr CC.Pop
|
||
bcs .9
|
||
|
||
sta ZPPtr1
|
||
|
||
jsr CC.Pop
|
||
bcs .9
|
||
|
||
sta ZPPtr1+1
|
||
|
||
jsr CC.Pop
|
||
bcs .9
|
||
|
||
pha
|
||
|
||
jsr CC.Pop
|
||
bcs .9
|
||
|
||
tax
|
||
ply
|
||
jsr CODE.JMPYX
|
||
|
||
lda ZPCCCode
|
||
sta (ZPPtr1)
|
||
|
||
ldy #1
|
||
lda ZPCCCode+1
|
||
sta (ZPPtr1),y
|
||
|
||
clc
|
||
|
||
.9 rts
|
||
*--------------------------------------
|
||
CC.DO
|
||
CC.FOR
|
||
CC.SWITCH
|
||
CC.CASE
|
||
CC.BREAK
|
||
CC.CONTINUE
|
||
CC.SIZEOF
|
||
*--------------------------------------
|
||
CC.TYPEDEF lda #E.CSYN
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
CC.STRUCT >ENTER 4
|
||
|
||
jsr CC.GetCharNB
|
||
bcs .99
|
||
|
||
>LDA.G CC.hTags
|
||
jsr CC.NewKey
|
||
bcs .99
|
||
|
||
sta (pStack) Y,A = KeyID
|
||
tya
|
||
ldy #1
|
||
sta (pStack),y
|
||
|
||
jsr CC.GetNextCharNB
|
||
bcs .99
|
||
|
||
cmp #'{'
|
||
bne .99
|
||
|
||
.1 jsr CC.GetNextCharNB
|
||
bcs .99
|
||
|
||
cmp #'}'
|
||
bne .1
|
||
|
||
jsr CC.GetNextCharNB skip }
|
||
|
||
clc
|
||
.99 >LEAVE
|
||
rts
|
||
*--------------------------------------
|
||
* Input : Value on Stack, Y,A = Type/Qual
|
||
* Output : CC = true, CS = false
|
||
*--------------------------------------
|
||
CC.IsValue0 and #CC.Q.PPPOINTER
|
||
beq .2
|
||
|
||
ldx #2
|
||
bra .6
|
||
|
||
.2 cpy #CC.T.FLOAT
|
||
bcc .5 char,int,long
|
||
|
||
ldx #5
|
||
*--------------------------------------
|
||
.5 jsr CC.GetVarSize
|
||
|
||
.6 lda #$A2 LDX #imm
|
||
jsr CODE.EmitByte
|
||
txa
|
||
jsr CODE.EmitByte
|
||
|
||
ldx #PCC.Test0X.L
|
||
ldy #0
|
||
|
||
.7 lda PCC.Test0X,y
|
||
jsr CODE.EmitByte
|
||
iny
|
||
dex
|
||
bne .7
|
||
|
||
clc
|
||
rts
|
||
*--------------------------------------
|
||
* Type Declaration keywords
|
||
*--------------------------------------
|
||
CC.CONST ldy #1
|
||
|
||
lda (pStack),y
|
||
ora #CC.Q.CONST
|
||
sta (pStack),y
|
||
|
||
jsr CC.CheckSpace
|
||
bcs .9
|
||
|
||
>LDYA L.CC.TMODS2
|
||
jsr CC.LookupID
|
||
bcs .9
|
||
|
||
jmp (J.CC.TMODS2,x)
|
||
|
||
.9 lda #E.CSYN
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
CC.SIGNED sec
|
||
.HS 90 BCC
|
||
*--------------------------------------
|
||
CC.UNSIGNED clc
|
||
php
|
||
|
||
jsr CC.CheckSpace
|
||
bcs .9
|
||
|
||
>LDYA L.CC.TYPES
|
||
jsr CC.LookupID
|
||
|
||
bcs .9
|
||
|
||
cpx #CC.T.UCHAR
|
||
bcc .9 void
|
||
|
||
cpx #CC.T.SLONG+1 only char int long allowed
|
||
bcs .9
|
||
|
||
plp
|
||
bcs .8
|
||
|
||
jmp (J.CC.UTYPES-2,x)
|
||
|
||
.8 jmp (J.CC.STYPES-2,x)
|
||
|
||
.9 plp
|
||
|
||
lda #E.CSYN
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
CC.SHORT jsr CC.CheckSpace
|
||
bcs .9
|
||
|
||
>LDYA L.CC.TYPES
|
||
jsr CC.LookupID
|
||
|
||
bcs CC.UCHAR
|
||
|
||
cpx #4 only int allowed
|
||
beq CC.SCHAR
|
||
|
||
.9 lda #E.CSYN
|
||
sec
|
||
rts
|
||
*--------------------------------------
|
||
CC.VOID lda #CC.T.VOID
|
||
bra CC.TYPE
|
||
|
||
CC.CHAR
|
||
CC.UCHAR lda #CC.T.UCHAR
|
||
bra CC.TYPE
|
||
|
||
CC.SCHAR lda #CC.T.SCHAR
|
||
bra CC.TYPE
|
||
|
||
CC.UINT lda #CC.T.UINT
|
||
bra CC.TYPE
|
||
|
||
CC.INT
|
||
CC.SINT lda #CC.T.SINT
|
||
bra CC.TYPE
|
||
|
||
CC.ULONG lda #CC.T.ULONG
|
||
bra CC.TYPE
|
||
|
||
CC.LONG
|
||
CC.SLONG lda #CC.T.SLONG
|
||
bra CC.TYPE
|
||
|
||
CC.FLOAT lda #CC.T.FLOAT
|
||
|
||
CC.TYPE sta (pStack)
|
||
|
||
jsr CC.GetCharNB
|
||
bcs .9
|
||
|
||
ldy #1
|
||
|
||
.1 cmp #'*'
|
||
bne .10
|
||
|
||
lda (pStack),y
|
||
clc
|
||
adc #CC.Q.POINTER
|
||
bcs .9 more than ***
|
||
|
||
sta (pStack),y
|
||
|
||
jsr CC.GetNextCharNB
|
||
bcc .1
|
||
|
||
.9 lda #E.CSYN
|
||
sec
|
||
.99 rts
|
||
|
||
.10 jsr CC.IsLetter
|
||
bcs .8
|
||
|
||
>LDYA L.CC.FTYPES
|
||
jsr CC.LookupID
|
||
bcs .8 next char is an identifier
|
||
|
||
ldy #1
|
||
lda (pStack),y
|
||
ora #CC.Q.FUNC+CC.Q.FASTCALL
|
||
sta (pStack),y
|
||
|
||
jsr CC.GetNextCharNB
|
||
bcs .9 next char is an identifier, ",", "(",")"
|
||
|
||
.8 clc
|
||
rts
|
||
*--------------------------------------
|
||
MAN
|
||
SAVE usr/src/bin/cc.s.kw
|
||
LOAD usr/src/bin/cc.s
|
||
ASM
|