mirror of
https://github.com/A2osX/A2osX.git
synced 2025-02-11 15:31:09 +00:00
Kernel 0.94++
This commit is contained in:
parent
988a14bf42
commit
6959200abf
Binary file not shown.
@ -140,59 +140,64 @@ CSH.Run.1 cmp #C.CR empty line....
|
||||
.10 jsr CSH.IsLetter
|
||||
bcc .20
|
||||
|
||||
* TODO: PREOPS ++ --.....
|
||||
|
||||
|
||||
bcs .29 error, todo : PREOPS ++ --.....
|
||||
bcs .29
|
||||
*--------------------------------------
|
||||
.20 >LDYA L.CSH.TMODS
|
||||
jsr CSH.LookupID
|
||||
bcs .50
|
||||
|
||||
jsr CSH.tDecl.JMP
|
||||
jsr CSH.tDecl
|
||||
bcs .59
|
||||
|
||||
jsr CSH.AddSymbol add with undef value...
|
||||
bcs .99 OOM or DUP
|
||||
>STYA ZPVarType Type/Qual
|
||||
|
||||
jsr CSH.AddSymbol add with undef value...
|
||||
bcs .29 OOM or DUP
|
||||
|
||||
lda ZPVarQual
|
||||
bit #CSH.Q.FUNC
|
||||
bne .21
|
||||
|
||||
jsr CSH.GetCharNB
|
||||
bcs .99
|
||||
|
||||
cmp #';'
|
||||
beq .8
|
||||
beq .69
|
||||
|
||||
cmp #'='
|
||||
bne .21
|
||||
bne .99
|
||||
|
||||
jsr CSH.GetNextCharNB skip '='
|
||||
bcs .99
|
||||
|
||||
lda ZPVarType
|
||||
>LDYA ZPVarType T/Q
|
||||
jsr CSH.ExpEval
|
||||
bcs .9
|
||||
|
||||
jsr CSH.SetVarValueFromStack X= Type, Set value to this var
|
||||
.29 bcs .99
|
||||
jsr CSH.SetVarValue Y,A Type/qual, Set value to this var
|
||||
.29 bcs .9
|
||||
|
||||
bra .68
|
||||
|
||||
.21 cmp #'('
|
||||
bne .99
|
||||
|
||||
jsr CSH.fDecl
|
||||
bcs .99
|
||||
.21 jsr CSH.fDecl
|
||||
bcs .9
|
||||
|
||||
bra .68
|
||||
*--------------------------------------
|
||||
.50 jsr CSH.SavePtr Save Ptr, in case of while,for....
|
||||
|
||||
>LDYA L.CSH.KW
|
||||
jsr CSH.LookupID
|
||||
bcs .6 not an internal CSH keyword....
|
||||
|
||||
jsr CSH.KW.JMP
|
||||
.59 bcs .9
|
||||
bra .8
|
||||
|
||||
.6 jsr CSH.GetVar
|
||||
bra .8
|
||||
*--------------------------------------
|
||||
.6 jsr CSH.GetVar I = ?
|
||||
bcs .7
|
||||
|
||||
>STYA ZPVarID
|
||||
@ -202,8 +207,13 @@ CSH.Run.1 cmp #C.CR empty line....
|
||||
lda ZPVarQual
|
||||
bit #CSH.Q.FUNC
|
||||
beq .60
|
||||
|
||||
|
||||
ldy #0 func( ?
|
||||
lda #0
|
||||
jsr CSH.fExec
|
||||
bcs .9
|
||||
|
||||
bra .8
|
||||
*--------------------------------------
|
||||
.60 jsr CSH.GetCharNB
|
||||
bcs .9
|
||||
@ -214,27 +224,29 @@ CSH.Run.1 cmp #C.CR empty line....
|
||||
jsr CSH.GetNextChar Skip =
|
||||
bcs .99
|
||||
|
||||
lda ZPVarType
|
||||
>LDYA ZPVarType T/Q
|
||||
jsr CSH.ExpEval
|
||||
bcs .9
|
||||
|
||||
jsr CSH.SetVarValueFromStack X = Exp Type
|
||||
jsr CSH.SetVarValue
|
||||
bcs .9
|
||||
|
||||
.68 jsr CSH.GetCharNB
|
||||
cmp #';'
|
||||
beq .8
|
||||
.69 beq .8
|
||||
|
||||
.99 lda #E.CSYN
|
||||
sec
|
||||
.9 rts
|
||||
|
||||
.7 lda #0 no return value type check required
|
||||
jsr CSH.fCall
|
||||
*--------------------------------------
|
||||
.7 ldy #0 no return value type check required
|
||||
lda #0
|
||||
|
||||
jsr CSH.fCall Y,A = Type/Qual
|
||||
bcs .9
|
||||
|
||||
jsr CSH.GetVarSize X = returned value type
|
||||
clc A = Sizeof CC to ignore Pointer hMem
|
||||
jsr CSH.GetVarSize Y,A = returned value type
|
||||
clc A = Sizeof, CC to ignore Pointer hMem
|
||||
adc pStack
|
||||
sta pStack Discard value on stack
|
||||
|
||||
@ -260,10 +272,12 @@ CSH.COMMENTS jsr CSH.GetNextChar
|
||||
*--------------------------------------
|
||||
CSH.SkipLine jsr CSH.GetNextChar
|
||||
bcs .9
|
||||
|
||||
cmp #C.CR
|
||||
bne CSH.SkipLine
|
||||
|
||||
clc
|
||||
jmp CSH.GetNextChar Skip CR
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CSH.SavePtr >LDYA ZPInputBufPtr
|
||||
@ -328,9 +342,10 @@ CSH.Lookup phy Y = len
|
||||
>LDA.G CSH.LookupOpt
|
||||
bpl .1
|
||||
|
||||
ldy #$0 Start at Y=1 for VOID func()
|
||||
ldy #$0 Start at Y=2 for VOID func()
|
||||
|
||||
.6 iny
|
||||
iny
|
||||
lda (ZPPtr1),y
|
||||
bne .6
|
||||
|
||||
@ -342,9 +357,27 @@ CSH.Lookup phy Y = len
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.ZPPtr1Next inc ZPPtr1
|
||||
CSH.ZPPtr1GetNextW
|
||||
jsr CSH.ZPPtr1NextW
|
||||
*--------------------------------------
|
||||
CSH.ZPPtr1GetW lda (ZPPtr1)
|
||||
beq .8
|
||||
|
||||
pha
|
||||
|
||||
ldy #1
|
||||
lda (ZPPtr1),y
|
||||
ply
|
||||
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
CSH.ZPPtr1NextW jsr .1
|
||||
|
||||
.1 inc ZPPtr1
|
||||
bne .8
|
||||
|
||||
inc ZPPtr1+1
|
||||
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
CSH.ZPPtr1AddAp1
|
||||
@ -363,7 +396,8 @@ CSH.AddSymbol >LDA.G CSH.hSymbols
|
||||
bcs .9
|
||||
|
||||
>STYA ZPVarID
|
||||
ldx ZPVarType
|
||||
|
||||
>LDYA ZPVarType
|
||||
jsr CSH.GetVarSize CS if pointer
|
||||
sta ZPVarSizeOf
|
||||
|
||||
@ -386,10 +420,33 @@ CSH.AddSymbol >LDA.G CSH.hSymbols
|
||||
|
||||
bcs .99
|
||||
|
||||
>PUSHB.G CSH.hSymbols
|
||||
jsr CSH.GetCharNB
|
||||
bcs .8
|
||||
|
||||
cmp #'('
|
||||
beq .7
|
||||
|
||||
lda ZPVarQual
|
||||
and #CSH.Q.FUNC
|
||||
beq .8
|
||||
|
||||
lda #E.CSYN
|
||||
sec
|
||||
rts
|
||||
|
||||
.7 lda #CSH.Q.FUNC
|
||||
tsb ZPVarQual
|
||||
|
||||
lda ZPCSHfDecl
|
||||
sta ZPVarDefPtr
|
||||
|
||||
lda ZPCSHfDecl+1
|
||||
sta ZPVarDefPtr+1
|
||||
|
||||
.8 >PUSHB.G CSH.hSymbols
|
||||
>PUSHW ZPVarID
|
||||
>PUSHWI ZPVarDef
|
||||
>PUSHWI 6
|
||||
>PUSHWI 8
|
||||
>SYSCALL SListAddData
|
||||
.9 rts
|
||||
|
||||
@ -397,91 +454,288 @@ CSH.AddSymbol >LDA.G CSH.hSymbols
|
||||
* sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.fDecl lda ZPCSHfDecl
|
||||
sta ZPVarDataPtr
|
||||
|
||||
lda ZPCSHfDecl+1
|
||||
sta ZPVarDataPtr+1
|
||||
* ZPVarDataPtr = fDef
|
||||
*--------------------------------------
|
||||
CSH.fExec ldx ZPPtr1
|
||||
phx
|
||||
ldx ZPPtr1+1 local : fdef Ptr
|
||||
phx
|
||||
ldx ZPPtr2 local : type
|
||||
phx
|
||||
ldx ZPPtr2+1 local : qual
|
||||
phx
|
||||
ldx ZPPtr3 local : variadic size
|
||||
phx
|
||||
ldx ZPPtr3+1 local : f
|
||||
phx
|
||||
|
||||
lda ZPVarID
|
||||
>STYA ZPPtr2 save Type/qual
|
||||
|
||||
>LDYA ZPVarDefPtr
|
||||
>STYA ZPPtr1
|
||||
|
||||
stz ZPPtr3 Reset VARIADIC byte count
|
||||
|
||||
jsr CSH.GetNextCharNB skip '('
|
||||
bcs .10
|
||||
|
||||
jsr CSH.ZPPtr1GetW Y,A = Return value Type/Qual
|
||||
|
||||
ldx ZPPtr2
|
||||
beq .1 no check required
|
||||
|
||||
cpy ZPPtr2
|
||||
bne .91
|
||||
|
||||
cmp ZPPtr2+1
|
||||
bne .91
|
||||
|
||||
.1 eor #CSH.Q.FUNC
|
||||
>STYA ZPPtr2 this will be the returned type/qual
|
||||
|
||||
jsr CSH.ZPPtr1GetNextW advance to arg list type
|
||||
beq .7 end of list, go check ending ')'
|
||||
*--------------------------------------
|
||||
.3 cpy #CSH.T.VARIADIC if VARIADIC, don't advance to next arg and assume type = 0
|
||||
bne .4
|
||||
|
||||
ldy #0
|
||||
lda #0
|
||||
|
||||
.4 jsr CSH.ExpEval Y,A = 0 if VARIADIC
|
||||
bcs .93
|
||||
|
||||
jsr CSH.GetVarSize Y,A = Var Type/Qual
|
||||
|
||||
tax
|
||||
lda (ZPPtr1)
|
||||
eor #CSH.T.VARIADIC
|
||||
bne .5
|
||||
|
||||
txa
|
||||
clc make sure pointer only 2 bytes
|
||||
adc ZPPtr3
|
||||
sta ZPPtr3 Add to byte count
|
||||
bra .51 stay on VARIADIC tag
|
||||
|
||||
.5 jsr CSH.ZPPtr1NextW
|
||||
|
||||
.51 jsr CSH.GetCharNB
|
||||
.10 bcs .90
|
||||
|
||||
cmp #','
|
||||
bne .6
|
||||
|
||||
jsr CSH.GetNextCharNB Skip ','
|
||||
|
||||
jsr CSH.ZPPtr1GetW
|
||||
bne .3 Another ARG....
|
||||
|
||||
.52 bra .90 extra args....error
|
||||
|
||||
.6 cmp #')'
|
||||
bne .90
|
||||
|
||||
jsr CSH.ZPPtr1GetW
|
||||
beq .8 no more arg after ')', exit
|
||||
|
||||
cpy #CSH.T.VARIADIC
|
||||
bne .90 missing arg
|
||||
|
||||
>PUSHB ZPPtr3 push VARIADIC byte count
|
||||
|
||||
.7 jsr CSH.GetCharNB
|
||||
bcs .90
|
||||
|
||||
cmp #')'
|
||||
bne .90
|
||||
|
||||
.8 jsr CSH.GetNextCharNB Skip )
|
||||
|
||||
* ldx ZPPtr3+1
|
||||
* jsr CSH.Exec
|
||||
* bcs .93
|
||||
|
||||
>LDYA ZPPtr2 type/qual
|
||||
bra .93
|
||||
|
||||
.90 lda #E.CSYN
|
||||
bra .92
|
||||
|
||||
.91 lda #E.TMISMATCH
|
||||
|
||||
.92 sec
|
||||
|
||||
.93 plx
|
||||
stx ZPPtr3+1
|
||||
plx
|
||||
stx ZPPtr3
|
||||
|
||||
plx
|
||||
stx ZPPtr2+1
|
||||
plx
|
||||
stx ZPPtr2
|
||||
|
||||
plx
|
||||
stx ZPPtr1+1
|
||||
plx
|
||||
stx ZPPtr1
|
||||
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CSH.fDecl >ENTER 2
|
||||
|
||||
lda #0
|
||||
sta (pStack) hLocal
|
||||
|
||||
lda ZPVarType
|
||||
jsr CSH.fDeclAddA
|
||||
lda ZPVarID+1
|
||||
lda ZPVarQual
|
||||
jsr CSH.fDeclAddA
|
||||
>DEBUG
|
||||
|
||||
jsr CSH.GetNextCharNB Skip (
|
||||
bcs .9
|
||||
|
||||
.1 cmp #')'
|
||||
beq .5
|
||||
beq .6
|
||||
|
||||
.2 jsr CSH.fDeclGetArg
|
||||
bcs .99
|
||||
|
||||
pha
|
||||
|
||||
tya
|
||||
jsr CSH.fDeclAddA
|
||||
|
||||
pla
|
||||
jsr CSH.fDeclAddA
|
||||
|
||||
jsr CSH.GetCharNB
|
||||
bcs .9
|
||||
|
||||
jsr CSH.IsLetter
|
||||
bcs .5
|
||||
|
||||
cmp #')'
|
||||
beq .5
|
||||
* TODO: AddLocal
|
||||
|
||||
cmp #','
|
||||
bne .9
|
||||
|
||||
jsr CSH.GetNextCharNB Skip ,
|
||||
.3 jsr CSH.GetNextCharNB
|
||||
bcs .9
|
||||
|
||||
jsr CSH.IsLetterOrDigit
|
||||
bcc .3
|
||||
|
||||
|
||||
|
||||
.5 cmp #')'
|
||||
beq .6
|
||||
|
||||
cmp #','
|
||||
bne .9
|
||||
|
||||
jsr CSH.GetNextCharNB Skip ,
|
||||
bcs .9
|
||||
|
||||
bra .2
|
||||
|
||||
.5 jsr CSH.GetNextCharNB Skip )
|
||||
.6 jsr CSH.GetNextCharNB Skip )
|
||||
bcs .9
|
||||
|
||||
cmp #';'
|
||||
bne .9
|
||||
|
||||
jsr CSH.GetNextCharNB Skip ;
|
||||
beq .7
|
||||
|
||||
|
||||
* TODO: f() body
|
||||
|
||||
bra .9
|
||||
*--------------------------------------
|
||||
.7 lda #0
|
||||
* sta ZPVarDataPtr
|
||||
* sta ZPVarDataPtr+1
|
||||
|
||||
.8 lda #0
|
||||
sta (ZPCSHfDecl)
|
||||
|
||||
jmp CSH.SetVarValueFromStack
|
||||
jsr CSH.fDeclAddA
|
||||
|
||||
clc
|
||||
bra .99
|
||||
|
||||
.9 lda #E.CSYN
|
||||
sec
|
||||
.99 rts
|
||||
|
||||
.99 >LEAVE
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.fDeclGetArg >ENTER 4
|
||||
|
||||
>LDYA L.CSH.TMODS
|
||||
CSH.fDeclGetArg lda (ZPInputBufPtr)
|
||||
cmp #'.'
|
||||
bne .5
|
||||
|
||||
ldx #2
|
||||
|
||||
.1 jsr CSH.GetNextChar
|
||||
bcs .9
|
||||
|
||||
cmp #'.'
|
||||
bne .9
|
||||
|
||||
dex
|
||||
bne .1
|
||||
|
||||
jsr CSH.GetNextCharNB
|
||||
bcs .9
|
||||
|
||||
eor #')'
|
||||
bne .9
|
||||
|
||||
ldy #CSH.T.VARIADIC Type
|
||||
* lda #0 Qual
|
||||
* clc
|
||||
rts
|
||||
|
||||
.5 >LDYA L.CSH.TMODS
|
||||
jsr CSH.LookupID
|
||||
bcs .9
|
||||
|
||||
|
||||
jsr CSH.tDecl
|
||||
bcs .9
|
||||
|
||||
|
||||
|
||||
* Y,A = Type/Qual
|
||||
|
||||
bra .8
|
||||
|
||||
|
||||
.9 lda #E.CSYN
|
||||
sec
|
||||
|
||||
.8 >LEAVE
|
||||
rts
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
CSH.fDeclAddA sta (ZPCSHfDecl)
|
||||
inc ZPCSHfDecl
|
||||
bne .8
|
||||
|
||||
inc ZPCSHfDecl+1
|
||||
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
CSH.tDecl jsr CSH.tDecl.JMP
|
||||
bcs .9
|
||||
|
||||
|
||||
|
||||
.9 rts
|
||||
|
||||
CSH.tDecl.JMP jmp (J.CSH.TMODS,x)
|
||||
inc ZPCSHfDecl+1
|
||||
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
CSH.tDecl >ENTER 2
|
||||
lda #0
|
||||
sta (pStack) Type
|
||||
ldy #1
|
||||
sta (pStack),y Qual
|
||||
|
||||
jsr .7
|
||||
bcs .99
|
||||
|
||||
ldy #1
|
||||
lda (pStack),y
|
||||
pha
|
||||
lda (pStack)
|
||||
tay Y = Type
|
||||
pla A = Qual
|
||||
|
||||
clc
|
||||
|
||||
.99 >LEAVE
|
||||
rts
|
||||
|
||||
.7 jmp (J.CSH.TMODS,x)
|
||||
*--------------------------------------
|
||||
CSH.NewKey >PUSHA
|
||||
>PUSHW ZPInputBufPtr
|
||||
@ -489,6 +743,8 @@ CSH.NewKey >PUSHA
|
||||
bcs .9
|
||||
|
||||
pha
|
||||
phy
|
||||
|
||||
txa
|
||||
* clc
|
||||
adc ZPInputBufPtr
|
||||
@ -498,15 +754,18 @@ CSH.NewKey >PUSHA
|
||||
inc ZPInputBufPtr+1
|
||||
|
||||
.1 clc
|
||||
ply
|
||||
pla
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
* X=Type
|
||||
* Y,A = Type/Qual
|
||||
*--------------------------------------
|
||||
CSH.SetVarValueFromStack
|
||||
cpx ZPVarType X = type
|
||||
CSH.SetVarValue cpy ZPVarType
|
||||
bne .99
|
||||
|
||||
cmp ZPVarQual
|
||||
bne .99
|
||||
|
||||
ldy #0
|
||||
|
||||
.1 lda (pStack)
|
||||
@ -565,9 +824,12 @@ CSH.Get >PUSHW ZPInputBufPtr
|
||||
adc ZPInputBufPtr
|
||||
sta ZPInputBufPtr
|
||||
bcc .1
|
||||
|
||||
inc ZPInputBufPtr+1
|
||||
clc
|
||||
|
||||
.1 pla Y,A = VarID
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CSH.GetVarDef phy
|
||||
@ -580,85 +842,18 @@ CSH.GetVarDef phy
|
||||
>PUSHA KeyID
|
||||
|
||||
>PUSHWI ZPVarDef
|
||||
>PUSHWI 6 6 bytes
|
||||
>PUSHWI 8 8 bytes
|
||||
>PUSHWI 0 From Start
|
||||
>SYSCALL SListGetData
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Input :
|
||||
* X=Var Type (or 0)
|
||||
* YA=VarID
|
||||
* Output : Stack, X = Var Type
|
||||
*--------------------------------------
|
||||
CSH.GetVarValueOnStack
|
||||
phx
|
||||
phy
|
||||
pha
|
||||
>PUSHB.G CSH.hSymbols
|
||||
|
||||
pla
|
||||
>PUSHA
|
||||
pla
|
||||
>PUSHA KeyID
|
||||
|
||||
>PUSHEA.G CSH.VarDef
|
||||
>PUSHWI 6 6 bytes
|
||||
>PUSHWI 0 From Start
|
||||
>SYSCALL SListGetData
|
||||
plx
|
||||
|
||||
bcs .9
|
||||
|
||||
txa
|
||||
beq .1 any type
|
||||
|
||||
>CMP.G CSH.VarDef Type
|
||||
beq .2
|
||||
|
||||
and #CSH.Q.PPPOINTER
|
||||
beq .99 not pointer....mismatch
|
||||
|
||||
>EOR.G CSH.VarDef
|
||||
and #CSH.Q.PPPOINTER
|
||||
bne .99 compare only pointer depth
|
||||
|
||||
.1 >LDA.G CSH.VarDef
|
||||
beq *
|
||||
|
||||
.2 tax
|
||||
jsr CSH.GetVarSize
|
||||
pha
|
||||
|
||||
>LDA.G CSH.VarDef+4
|
||||
sta ZPPtr3
|
||||
iny
|
||||
lda (pData),y
|
||||
sta ZPPtr3+1
|
||||
|
||||
ply
|
||||
|
||||
.3 dey
|
||||
lda (ZPPtr3),y
|
||||
>PUSHA
|
||||
tya
|
||||
bne .3
|
||||
|
||||
>LDA.G CSH.VarDef
|
||||
tax
|
||||
clc X = Var Type
|
||||
.9 rts
|
||||
|
||||
.99 lda #E.TMISMATCH
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Input : Value on Stack, X = Var Type
|
||||
* Input : Value on Stack, Y,A = Type/Qual
|
||||
* Output : CC = true, CS = false
|
||||
*--------------------------------------
|
||||
CSH.IsValue0 cpx #CSH.T.FLOAT
|
||||
CSH.IsValue0 cpy #CSH.T.FLOAT
|
||||
bcc .1 char,int,long
|
||||
|
||||
ldy CSH.TYPESIZE,x
|
||||
lda CSH.TYPESIZE-1,y
|
||||
lda (ZPVarDataPtr),y
|
||||
bne .9
|
||||
|
||||
@ -763,10 +958,13 @@ CSH.SkipBlock ldy #0 not in "", TOTO:skip comments
|
||||
|
||||
.1 jsr CSH.GetNextCharNB
|
||||
bcs .9
|
||||
|
||||
cmp #'{'
|
||||
bne .2
|
||||
|
||||
tya
|
||||
bmi .1
|
||||
|
||||
inx
|
||||
bra .1
|
||||
|
||||
@ -775,55 +973,66 @@ CSH.SkipBlock ldy #0 not in "", TOTO:skip comments
|
||||
|
||||
tya
|
||||
bmi .1
|
||||
|
||||
dex
|
||||
bne .1
|
||||
|
||||
clc
|
||||
rts
|
||||
.3 cmp #'"'
|
||||
bne .1
|
||||
|
||||
tya
|
||||
eor #$ff
|
||||
tay
|
||||
bra .1
|
||||
jmp CSH.GetNextCharNB skip '}'
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CSH.GetCharNB jsr CSH.GetChar
|
||||
bcs CSH.GetNextCharNB.RTS
|
||||
|
||||
jsr CSH.CheckCharNB
|
||||
bcc CSH.GetNextCharNB.RTS
|
||||
*--------------------------------------
|
||||
CSH.GetNextCharNB
|
||||
jsr CSH.GetNextChar
|
||||
bcs CSH.GetNextCharNB.RTS
|
||||
|
||||
jsr CSH.CheckCharNB
|
||||
bcs CSH.GetNextCharNB
|
||||
|
||||
CSH.GetNextCharNB.RTS
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.CheckSpace jsr CSH.GetChar
|
||||
bcs .90
|
||||
|
||||
cmp #C.SPACE
|
||||
bne .90
|
||||
|
||||
jsr CSH.GetNextCharNB
|
||||
bcc CSH.GetNextCharNB.RTS
|
||||
bcc .99
|
||||
|
||||
.90 lda #E.CSYN
|
||||
sec
|
||||
rts
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CSH.CheckCharNB cmp #C.SPACE
|
||||
beq .9
|
||||
|
||||
cmp #C.LF
|
||||
beq .9
|
||||
|
||||
cmp #C.TAB
|
||||
beq .9
|
||||
|
||||
clc
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CSH.GetNextChar inc ZPInputBufPtr
|
||||
bne CSH.GetChar
|
||||
|
||||
inc ZPInputBufPtr+1
|
||||
*--------------------------------------
|
||||
CSH.GetChar lda (ZPInputBufPtr)
|
||||
@ -911,29 +1120,26 @@ CSH.IsLetterRTS rts
|
||||
*---------------------------------------
|
||||
CSH.IsDigit10 cmp #'0'
|
||||
bcc .9
|
||||
|
||||
cmp #'9'+1
|
||||
rts cc if ok, cs if not
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
* in : X = type, out : X = type, A = size
|
||||
* in : Y,A = type/qual
|
||||
* out : A = size
|
||||
*--------------------------------------
|
||||
CSH.GetVarSize txa
|
||||
and #CSH.Q.PPPOINTER
|
||||
CSH.GetVarSize and #CSH.Q.PPPOINTER
|
||||
bne .2
|
||||
|
||||
txa
|
||||
and #$f
|
||||
phx
|
||||
tax
|
||||
lda CSH.TYPESIZE,x
|
||||
plx
|
||||
lda CSH.TYPESIZE-1,y
|
||||
|
||||
clc
|
||||
rts
|
||||
|
||||
.2 sec +1 for hMem Storage
|
||||
lda #2
|
||||
.2 lda #2 pointer
|
||||
sec +1 for hMem Storage
|
||||
rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
|
@ -2,7 +2,7 @@ NEW
|
||||
AUTO 3,1
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* Y = Type, A = OP
|
||||
* Y,A = Type/Qual, X = OP
|
||||
*--------------------------------------
|
||||
CSH.BOP.EXEC cpy #CSH.T.UINT
|
||||
bcs .3
|
||||
@ -17,13 +17,12 @@ CSH.BOP.EXEC cpy #CSH.T.UINT
|
||||
sec
|
||||
rts
|
||||
|
||||
.1 tax
|
||||
jmp (J.CSH.bBOPS,x)
|
||||
.1 jmp (J.CSH.bBOPS,x)
|
||||
|
||||
.2 tax
|
||||
jmp (J.CSH.cBOPS,x)
|
||||
.2 jmp (J.CSH.cBOPS,x)
|
||||
|
||||
.3 clc
|
||||
.3 txa
|
||||
clc
|
||||
adc CSH.Type2FPU-CSH.T.UINT,y
|
||||
tax
|
||||
jsr A2osX.FPUCALL
|
||||
@ -114,6 +113,8 @@ CSH.BOPS.LOR
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.Exec jmp (J.CSH.EXEC,x)
|
||||
**--------------------------------------
|
||||
EXEC.pwr >FPU PWR
|
||||
clc
|
||||
rts
|
||||
@ -190,7 +191,8 @@ EXEC.malloc >PULLYA
|
||||
EXEC.fopen >SYSCALL FOpen
|
||||
>PUSHYA
|
||||
*--------------------------------------
|
||||
EXEC.fclose >SYSCALL FClose
|
||||
EXEC.fclose >PULLA
|
||||
>SYSCALL FClose
|
||||
>PUSHYA
|
||||
*--------------------------------------
|
||||
EXEC.fread >SYSCALL FRead
|
||||
|
@ -3,23 +3,27 @@ NEW
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* Input:
|
||||
* ZPInputBufPtr, A = Expected type
|
||||
* ZPInputBufPtr, Y,A = Expected type/qual
|
||||
* Output:
|
||||
* CS, A = EC
|
||||
* CC, X = Var Type, Value on Stack
|
||||
* CC, Y,A = type/qual, Value on Stack
|
||||
*--------------------------------------
|
||||
CSH.ExpEval ldx ZPPtr1
|
||||
phx
|
||||
ldx ZPPtr1+1 local : used by lookup
|
||||
phx
|
||||
|
||||
ldx ZPPtr2 local : VarType
|
||||
phx
|
||||
ldx ZPPtr2+1 local : BOP
|
||||
ldx ZPPtr2+1 local : VarQual
|
||||
phx
|
||||
|
||||
sta ZPPtr2 local : expected type
|
||||
ldx ZPPtr3 local : BOP
|
||||
phx
|
||||
|
||||
lda #$ff
|
||||
>STYA ZPPtr2 local : expected type/qual
|
||||
|
||||
lda #$ff no previous OP
|
||||
pha
|
||||
*--------------------------------------
|
||||
.10 jsr CSH.GetCharNB
|
||||
@ -31,12 +35,11 @@ CSH.ExpEval ldx ZPPtr1
|
||||
jsr CSH.GetNextCharNB skip (
|
||||
bcs .19
|
||||
|
||||
lda ZPPtr2
|
||||
|
||||
>LDYA ZPPtr2
|
||||
jsr CSH.ExpEval
|
||||
bcs .19
|
||||
|
||||
stx ZPPtr2
|
||||
>STYA ZPPtr2 update type/qual
|
||||
|
||||
jsr CSH.GetCharNB
|
||||
bcs .19
|
||||
@ -55,32 +58,30 @@ CSH.ExpEval ldx ZPPtr1
|
||||
jsr CSH.GetDefine
|
||||
bcc .10
|
||||
|
||||
jsr CSH.GetVar
|
||||
jsr CSH.VarLookup
|
||||
bcs .21
|
||||
|
||||
ldx ZPPtr2 YA=VarID, X=expected var type (or 0=any)
|
||||
|
||||
jsr CSH.GetVarValueOnStack Y,A = VarID, Get value on stack
|
||||
jsr CSH.GetValue Check type & Get value on stack
|
||||
bcs .29
|
||||
|
||||
stx ZPPtr2 store real var type
|
||||
bra .30
|
||||
|
||||
.21 lda ZPPtr2 var type
|
||||
.21 >LDYA ZPPtr2 var type/qual
|
||||
jsr CSH.fCall X = function index
|
||||
bcs .29
|
||||
|
||||
stx ZPPtr2 store real var type
|
||||
>STYA ZPPtr2 store real var type
|
||||
bra .30
|
||||
|
||||
*--------------------------------------
|
||||
.22 jsr CSH.IsDigit10 number ?
|
||||
bcs .24
|
||||
|
||||
ldx ZPPtr2
|
||||
ldy ZPPtr2
|
||||
bne .23
|
||||
|
||||
ldx #CSH.T.SINT
|
||||
stx ZPPtr2
|
||||
ldy #CSH.T.SINT
|
||||
sty ZPPtr2
|
||||
stz ZPPtr2+1
|
||||
|
||||
.23 jsr CSH.GetNumOnStack
|
||||
bcs .29
|
||||
@ -112,31 +113,31 @@ CSH.ExpEval ldx ZPPtr1
|
||||
jsr CSH.LookupOP
|
||||
bcs .90
|
||||
|
||||
stx ZPPtr2+1 save OP(n)
|
||||
stx ZPPtr3 save OP(n)
|
||||
|
||||
.32 pla get OP(n-1)
|
||||
.32 plx get OP(n-1)
|
||||
bmi .33 $ff....
|
||||
|
||||
cmp ZPPtr2+1
|
||||
cpx ZPPtr3
|
||||
bcc .33 OP(n) has precedence, on stack : V1,V2
|
||||
|
||||
ldy ZPPtr2 OP(n-1) has precedence...
|
||||
|
||||
>LDYA ZPPtr2 OP(n-1) has precedence...
|
||||
jsr CSH.BOP.EXEC compute V(n-1) <OP(n-1)> V(n)
|
||||
bcc .32
|
||||
|
||||
bcs .99
|
||||
|
||||
.33 pha push back OP(n-1)
|
||||
lda ZPPtr2+1 get OP(n)
|
||||
.33 phx push back OP(n-1)
|
||||
|
||||
lda ZPPtr3 get OP(n)
|
||||
pha push OP(n) on stack
|
||||
|
||||
jmp .10 go check for next token
|
||||
*--------------------------------------
|
||||
.80 pla any OP on stack ?
|
||||
.80 plx any OP on stack ?
|
||||
bmi .88
|
||||
|
||||
ldy ZPPtr2 Var Type
|
||||
>LDYA ZPPtr2 Var Type
|
||||
jsr CSH.BOP.EXEC
|
||||
bcc .80
|
||||
|
||||
@ -148,19 +149,23 @@ CSH.ExpEval ldx ZPPtr1
|
||||
bpl .99
|
||||
|
||||
sec
|
||||
.HS 90 BCC
|
||||
bra .89
|
||||
|
||||
.88 clc
|
||||
|
||||
ldx ZPPtr2 X = Var Type
|
||||
>LDYA ZPPtr2 Type/Qual
|
||||
|
||||
.89 plx
|
||||
stx ZPPtr3
|
||||
plx
|
||||
stx ZPPtr2+1
|
||||
plx
|
||||
stx ZPPtr2
|
||||
plx
|
||||
stx ZPPtr1+1
|
||||
plx
|
||||
stx ZPPtr1
|
||||
|
||||
ply
|
||||
sty ZPPtr2+1
|
||||
ply
|
||||
sty ZPPtr2
|
||||
ply
|
||||
sty ZPPtr1+1
|
||||
ply
|
||||
sty ZPPtr1
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.AddContCharP
|
||||
@ -188,6 +193,7 @@ CSH.AddContCharP
|
||||
adc ZPCSHConst
|
||||
sta ZPCSHConst
|
||||
bcc .3
|
||||
|
||||
inc ZPCSHConst+1
|
||||
.3 jsr CSH.GetNextChar Skip "
|
||||
|
||||
@ -199,11 +205,9 @@ CSH.AddContCharP
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.GetNumOnStack
|
||||
txa
|
||||
beq .99
|
||||
|
||||
cpx #CSH.T.FLOAT
|
||||
cpy #CSH.T.FLOAT
|
||||
bcc .1
|
||||
|
||||
bne .99
|
||||
|
||||
>PUSHW ZPInputBufPtr
|
||||
@ -215,8 +219,6 @@ CSH.GetNumOnStack
|
||||
.1 >PUSHW ZPInputBufPtr
|
||||
>PUSHWI ZPInputBufPtr
|
||||
>PUSHBI 10
|
||||
phx
|
||||
|
||||
bcc .2
|
||||
|
||||
>SYSCALL StrToUL
|
||||
@ -224,10 +226,10 @@ CSH.GetNumOnStack
|
||||
|
||||
.2 >SYSCALL StrToL
|
||||
|
||||
.3 plx
|
||||
bcs .9
|
||||
.3 bcs .9
|
||||
|
||||
lda CSH.TYPESIZE,x
|
||||
ldy ZPPtr2
|
||||
lda CSH.TYPESIZE-1,y
|
||||
cmp #4
|
||||
beq .8
|
||||
|
||||
@ -254,6 +256,233 @@ CSH.GetNumOnStack
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.VarLookup >PUSHB.G CSH.hSymbols
|
||||
|
||||
>PUSHW ZPInputBufPtr
|
||||
>SYSCALL SListLookup
|
||||
bcs .9
|
||||
|
||||
phy
|
||||
pha
|
||||
|
||||
txa
|
||||
* clc
|
||||
adc ZPInputBufPtr
|
||||
sta ZPInputBufPtr
|
||||
bcc .1
|
||||
|
||||
inc ZPInputBufPtr+1
|
||||
clc
|
||||
|
||||
.1 >PUSHB.G CSH.hSymbols
|
||||
|
||||
pla
|
||||
>PUSHA
|
||||
pla
|
||||
>PUSHA KeyID
|
||||
|
||||
>PUSHEA.G CSH.VarDef
|
||||
>PUSHWI 8 8 bytes
|
||||
>PUSHWI 0 From Start
|
||||
>SYSCALL SListGetData
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
CSH.GetValue lda ZPPtr2 target type
|
||||
beq .1
|
||||
|
||||
>LDA.G CSH.VarDef Type
|
||||
cmp #CSH.T.VOID
|
||||
beq .11
|
||||
|
||||
cmp ZPPtr2
|
||||
bne .9
|
||||
|
||||
.11 lda ZPPtr2+1 qual
|
||||
>CMP.G CSH.VarDef+1
|
||||
beq .2
|
||||
|
||||
.9 lda #E.TMISMATCH
|
||||
sec
|
||||
rts
|
||||
|
||||
.1 >LDA.G CSH.VarDef Type
|
||||
sta ZPPtr2
|
||||
iny
|
||||
lda (pData),y
|
||||
sta ZPPtr2+1
|
||||
|
||||
.2 lda ZPPtr3
|
||||
pha
|
||||
lda ZPPtr3+1
|
||||
pha
|
||||
|
||||
>LDA.G CSH.VarDef+4
|
||||
sta ZPPtr3
|
||||
iny
|
||||
lda (pData),y
|
||||
sta ZPPtr3+1
|
||||
|
||||
ldx ZPPtr2
|
||||
ldy CSH.TYPESIZE-1,x
|
||||
|
||||
.3 dey
|
||||
lda (ZPPtr3),y
|
||||
>PUSHA
|
||||
tya
|
||||
bne .3
|
||||
|
||||
pla
|
||||
sta ZPPtr3+1
|
||||
pla
|
||||
sta ZPPtr3
|
||||
|
||||
clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
* Input:
|
||||
* ZPInputBufPtr, Y,A = Expected type/qual
|
||||
* Output:
|
||||
* CS, A = EC
|
||||
* CC, Y,A = type/qual, Result on Stack
|
||||
*--------------------------------------
|
||||
CSH.fCall ldx ZPPtr1
|
||||
phx
|
||||
ldx ZPPtr1+1 local : fdef Ptr
|
||||
phx
|
||||
ldx ZPPtr2 local : type
|
||||
phx
|
||||
ldx ZPPtr2+1 local : qual
|
||||
phx
|
||||
ldx ZPPtr3 local : variadic size
|
||||
phx
|
||||
ldx ZPPtr3+1 local : f
|
||||
phx
|
||||
|
||||
>STYA ZPPtr2 save Type/qual
|
||||
|
||||
stz ZPPtr3 Reset VARIADIC byte count
|
||||
|
||||
>LDYA L.CSH.FN
|
||||
jsr CSH.LookupFN
|
||||
bcs .10
|
||||
|
||||
stx ZPPtr3+1 X = function index
|
||||
|
||||
>STYA ZPPtr1 f() definition, starting at returned type
|
||||
|
||||
jsr CSH.GetCharNB
|
||||
bcs .10
|
||||
|
||||
cmp #'('
|
||||
bne .52
|
||||
|
||||
jsr CSH.GetNextCharNB skip '('
|
||||
|
||||
bcs .10
|
||||
|
||||
jsr CSH.ZPPtr1GetW Y,A = Return value Type/Qual
|
||||
|
||||
ldx ZPPtr2
|
||||
beq .1 no check required
|
||||
|
||||
cpy ZPPtr2
|
||||
bne .91
|
||||
|
||||
cmp ZPPtr2+1
|
||||
bne .91
|
||||
|
||||
.1 >STYA ZPPtr2 this will be the returned type/qual
|
||||
|
||||
jsr CSH.ZPPtr1GetNextW advance to arg list type
|
||||
beq .7 end of list, go check ending ')'
|
||||
*--------------------------------------
|
||||
.3 cpy #CSH.T.VARIADIC if VARIADIC, don't advance to next arg and assume type = 0
|
||||
bne .4
|
||||
|
||||
ldy #0
|
||||
lda #0
|
||||
|
||||
.4 jsr CSH.ExpEval Y,A = 0 if VARIADIC
|
||||
bcs .93
|
||||
|
||||
jsr CSH.GetVarSize Y,A = Var Type/Qual
|
||||
|
||||
tax
|
||||
lda (ZPPtr1)
|
||||
eor #CSH.T.VARIADIC
|
||||
bne .5
|
||||
|
||||
txa
|
||||
clc make sure pointer only 2 bytes
|
||||
adc ZPPtr3
|
||||
sta ZPPtr3 Add to byte count
|
||||
bra .51 stay on VARIADIC tag
|
||||
|
||||
.5 jsr CSH.ZPPtr1NextW
|
||||
|
||||
.51 jsr CSH.GetCharNB
|
||||
.10 bcs .90
|
||||
|
||||
cmp #','
|
||||
bne .6
|
||||
|
||||
jsr CSH.GetNextCharNB Skip ,
|
||||
jsr CSH.ZPPtr1GetW
|
||||
bne .3 Another ARG....
|
||||
|
||||
.52 bra .90 extra args....error
|
||||
|
||||
.6 cmp #')'
|
||||
bne .90
|
||||
|
||||
jsr CSH.ZPPtr1GetW
|
||||
beq .8 no more arg after ')', exit
|
||||
|
||||
cpy #CSH.T.VARIADIC
|
||||
bne .90 missing arg
|
||||
|
||||
>PUSHB ZPPtr3 push VARIADIC byte count
|
||||
bra .8
|
||||
|
||||
.7 jsr CSH.GetCharNB
|
||||
bcs .90
|
||||
|
||||
cmp #')'
|
||||
bne .90
|
||||
|
||||
.8 jsr CSH.GetNextCharNB Skip )
|
||||
|
||||
ldx ZPPtr3+1
|
||||
jsr CSH.Exec
|
||||
bcs .93
|
||||
|
||||
>LDYA ZPPtr2 type/qual
|
||||
bra .93
|
||||
|
||||
.90 lda #E.CSYN
|
||||
bra .92
|
||||
|
||||
.91 lda #E.TMISMATCH
|
||||
|
||||
.92 sec
|
||||
|
||||
.93 plx
|
||||
stx ZPPtr3+1
|
||||
plx
|
||||
stx ZPPtr3
|
||||
|
||||
plx
|
||||
stx ZPPtr2+1
|
||||
plx
|
||||
stx ZPPtr2
|
||||
|
||||
plx
|
||||
stx ZPPtr1+1
|
||||
plx
|
||||
stx ZPPtr1
|
||||
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/bin/csh.s.exp
|
||||
LOAD usr/src/bin/csh.s
|
||||
|
238
BIN/CSH.S.KW.txt
238
BIN/CSH.S.KW.txt
@ -18,10 +18,13 @@ CSH.IF jsr CSH.GetCharNB
|
||||
jsr CSH.GetNextCharNB
|
||||
bcs .9
|
||||
|
||||
lda #0 Any var type
|
||||
ldy #0 Any var type
|
||||
lda #0
|
||||
jsr CSH.ExpEval
|
||||
bcs .99
|
||||
|
||||
jsr CSH.IsValue0 result in X
|
||||
|
||||
jsr CSH.GetCharNB
|
||||
bcs .99
|
||||
|
||||
@ -29,16 +32,16 @@ CSH.IF jsr CSH.GetCharNB
|
||||
bne .9
|
||||
|
||||
jsr CSH.GetNextCharNB skip ')'
|
||||
bcs .99
|
||||
bcs .9
|
||||
|
||||
cmp #'{'
|
||||
bne .9
|
||||
|
||||
jsr CSH.GetNextCharNB Skip '{'
|
||||
bcs .99
|
||||
bcs .9
|
||||
|
||||
jsr CSH.IsValue0 X = var type from ExpEval
|
||||
bcc .6 Value=0, skip {{....}}
|
||||
txa
|
||||
beq .6 Value=0, skip {{....}}
|
||||
|
||||
>LDA.G CSH.CmdSave
|
||||
beq .1 IF
|
||||
@ -54,15 +57,16 @@ CSH.IF jsr CSH.GetCharNB
|
||||
|
||||
lda #'}' Tell '}' is expected at the end of block
|
||||
jsr CSH.Push
|
||||
bcs .99
|
||||
|
||||
rts
|
||||
.99 rts
|
||||
|
||||
.6 jsr CSH.SkipBlock
|
||||
|
||||
bcc .99
|
||||
|
||||
.9 lda #E.CSYN
|
||||
sec
|
||||
.99 rts
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.IF.END clc
|
||||
rts
|
||||
@ -97,16 +101,20 @@ CSH.STRUCT >ENTER 4
|
||||
jsr CSH.NewKey
|
||||
bcs .99
|
||||
|
||||
sta (pStack)
|
||||
|
||||
sta (pStack) Y,A = KeyID
|
||||
tya
|
||||
ldy #1
|
||||
sta (pStack),y
|
||||
|
||||
jsr CSH.GetNextCharNB
|
||||
bcs .99
|
||||
|
||||
cmp #'{'
|
||||
bne .99
|
||||
|
||||
.1 jsr CSH.GetNextCharNB
|
||||
bcs .99
|
||||
|
||||
cmp #'}'
|
||||
bne .1
|
||||
|
||||
@ -116,14 +124,22 @@ CSH.STRUCT >ENTER 4
|
||||
.99 >LEAVE
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.CONST lda #CSH.Q.CONST
|
||||
* Type Declaration keywords
|
||||
*--------------------------------------
|
||||
CSH.CONST ldy #1
|
||||
|
||||
tsb ZPVarQual
|
||||
lda (pStack),y
|
||||
ora #CSH.Q.CONST
|
||||
sta (pStack),y
|
||||
|
||||
jsr CSH.CheckSpace
|
||||
bcs .9
|
||||
|
||||
>LDYA L.CSH.TMODS2
|
||||
jsr CSH.LookupID
|
||||
bcs .9
|
||||
|
||||
jmp (J.CSH.TMODS2-2,x)
|
||||
jmp (J.CSH.TMODS2,x)
|
||||
|
||||
.9 lda #E.CSYN
|
||||
sec
|
||||
@ -143,10 +159,10 @@ CSH.UNSIGNED clc
|
||||
|
||||
bcs .9
|
||||
|
||||
cpx #2
|
||||
bcc .9
|
||||
cpx #CSH.T.UCHAR
|
||||
bcc .9 void
|
||||
|
||||
cpx #8 only char int long allowed
|
||||
cpx #CSH.T.SLONG+1 only char int long allowed
|
||||
bcs .9
|
||||
|
||||
plp
|
||||
@ -177,44 +193,55 @@ CSH.SHORT jsr CSH.CheckSpace
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CSH.VOID ldx #CSH.T.VOID
|
||||
CSH.VOID lda #CSH.T.VOID
|
||||
bra CSH.TYPE
|
||||
|
||||
CSH.SCHAR ldx #CSH.T.SCHAR
|
||||
bra CSH.TYPE
|
||||
CSH.CHAR
|
||||
CSH.UCHAR ldx #CSH.T.UCHAR
|
||||
CSH.UCHAR lda #CSH.T.UCHAR
|
||||
bra CSH.TYPE
|
||||
|
||||
CSH.SCHAR lda #CSH.T.SCHAR
|
||||
bra CSH.TYPE
|
||||
|
||||
CSH.UINT lda #CSH.T.UINT
|
||||
bra CSH.TYPE
|
||||
|
||||
CSH.INT
|
||||
CSH.SINT ldx #CSH.T.SINT
|
||||
CSH.SINT lda #CSH.T.SINT
|
||||
bra CSH.TYPE
|
||||
|
||||
CSH.UINT ldx #CSH.T.UINT
|
||||
CSH.ULONG lda #CSH.T.ULONG
|
||||
bra CSH.TYPE
|
||||
|
||||
CSH.LONG
|
||||
CSH.SLONG ldx #CSH.T.SLONG
|
||||
CSH.SLONG lda #CSH.T.SLONG
|
||||
bra CSH.TYPE
|
||||
|
||||
CSH.ULONG ldx #CSH.T.ULONG
|
||||
bra CSH.TYPE
|
||||
CSH.FLOAT lda #CSH.T.FLOAT
|
||||
|
||||
CSH.FLOAT ldx #CSH.T.FLOAT
|
||||
CSH.TYPE sta (pStack)
|
||||
|
||||
CSH.TYPE stx ZPVarType
|
||||
|
||||
.11 jsr CSH.GetNextCharNB
|
||||
jsr CSH.GetCharNB
|
||||
bcs .9
|
||||
|
||||
cmp #'*'
|
||||
ldy #1
|
||||
|
||||
.1 cmp #'*'
|
||||
bne .10
|
||||
|
||||
lda ZPVarType
|
||||
lda (pStack),y
|
||||
clc
|
||||
adc #CSH.Q.POINTER
|
||||
sta ZPVarType
|
||||
bcc .11
|
||||
bcs .9 more than ***
|
||||
|
||||
sta (pStack),y
|
||||
|
||||
bra .9 more than ***
|
||||
jsr CSH.GetNextCharNB
|
||||
bcc .1
|
||||
|
||||
.9 lda #E.CSYN
|
||||
sec
|
||||
.99 rts
|
||||
|
||||
.10 jsr CSH.IsLetter
|
||||
bcs .8
|
||||
@ -226,151 +253,16 @@ CSH.TYPE stx ZPVarType
|
||||
sec
|
||||
ror bFastCall
|
||||
|
||||
lda #CSH.Q.FUNC
|
||||
tsb ZPVarQual
|
||||
ldy #1
|
||||
lda (pStack),y
|
||||
ora #CSH.Q.FUNC
|
||||
sta (pStack),y
|
||||
|
||||
jsr CSH.GetNextCharNB
|
||||
bcs .9 next char is an identifier, ",", "(",")"
|
||||
|
||||
.8 clc
|
||||
rts
|
||||
|
||||
.9 lda #E.CSYN
|
||||
sec
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
* Input:
|
||||
* ZPInputBufPtr, A = Expected type
|
||||
* Output:
|
||||
* CS, A = EC
|
||||
* CC, Result on Stack, X = Type
|
||||
*--------------------------------------
|
||||
CSH.fCall ldx ZPPtr1
|
||||
phx
|
||||
ldx ZPPtr1+1 local : fdef
|
||||
phx
|
||||
ldx ZPPtr2 local : type
|
||||
phx
|
||||
ldx ZPPtr2+1 local : variadic size
|
||||
phx
|
||||
|
||||
sta ZPPtr2 save Type
|
||||
stz ZPPtr2+1 Reset VARIADIC byte count
|
||||
>LDYA L.CSH.FN
|
||||
jsr CSH.LookupFN
|
||||
phx X = function index
|
||||
bcs .10
|
||||
|
||||
>STYA ZPPtr1 f() definition, starting at returned type
|
||||
|
||||
jsr CSH.GetCharNB
|
||||
bcs .10
|
||||
|
||||
cmp #'('
|
||||
bne .52
|
||||
|
||||
jsr CSH.GetNextCharNB skip '('
|
||||
.10 bcs .90
|
||||
|
||||
lda ZPPtr2
|
||||
bne .11
|
||||
|
||||
lda (ZPPtr1)
|
||||
sta ZPPtr2
|
||||
bra .1 expected type is 0, no check
|
||||
|
||||
.11 cmp (ZPPtr1) Get Return value Type
|
||||
bne .91
|
||||
|
||||
.1 jsr CSH.ZPPtr1Next advance to arg list type
|
||||
|
||||
lda (ZPPtr1) get type of first arg
|
||||
beq .7 end of list, go check ending ')'
|
||||
*--------------------------------------
|
||||
.3 eor #CSH.T.VARIADIC if VARIADIC, don't advance to next arg and assume type = 0
|
||||
beq .4
|
||||
|
||||
eor #CSH.T.VARIADIC restore type...
|
||||
|
||||
.4 jsr CSH.ExpEval A=0 if VARIADIC
|
||||
bcs .9 X = Var Type
|
||||
|
||||
lda (ZPPtr1) get current arg type
|
||||
eor #CSH.T.VARIADIC
|
||||
bne .5
|
||||
|
||||
jsr CSH.GetVarSize X = Var Type
|
||||
|
||||
clc make sure pointer only 2 bytes
|
||||
adc ZPPtr2+1
|
||||
sta ZPPtr2+1 Add to byte count
|
||||
bra .51
|
||||
|
||||
.5 jsr CSH.ZPPtr1Next
|
||||
|
||||
.51 jsr CSH.GetCharNB
|
||||
bcs .90
|
||||
|
||||
cmp #','
|
||||
bne .6
|
||||
|
||||
jsr CSH.GetNextCharNB Skip ,
|
||||
lda (ZPPtr1)
|
||||
bne .3 Another ARG....
|
||||
|
||||
.52 bra .90 extra args....error
|
||||
|
||||
.6 cmp #')'
|
||||
bne .90
|
||||
lda (ZPPtr1)
|
||||
beq .8 no more arg after ')', exit
|
||||
|
||||
eor #CSH.T.VARIADIC
|
||||
bne .90 missing arg
|
||||
|
||||
>PUSHB ZPPtr2+1 push VARIADIC byte count
|
||||
bra .8
|
||||
.7 jsr CSH.GetCharNB
|
||||
bcs .90
|
||||
cmp #')'
|
||||
bne .90
|
||||
|
||||
.8 jsr CSH.GetNextCharNB Skip )
|
||||
|
||||
plx restore X = function index
|
||||
ldy ZPPtr2 get type in Y
|
||||
pla
|
||||
sta ZPPtr2+1
|
||||
pla
|
||||
sta ZPPtr2
|
||||
pla
|
||||
sta ZPPtr1+1
|
||||
pla
|
||||
sta ZPPtr1
|
||||
phy
|
||||
jsr CSH.fCall.Exec
|
||||
plx restore returned type
|
||||
rts
|
||||
|
||||
.90 lda #E.CSYN
|
||||
.HS 2C BIT ABS
|
||||
.91 lda #E.TMISMATCH
|
||||
sec
|
||||
|
||||
.9 plx Discard function index
|
||||
|
||||
plx
|
||||
stx ZPPtr2+1
|
||||
plx
|
||||
stx ZPPtr2
|
||||
plx
|
||||
stx ZPPtr1+1
|
||||
plx
|
||||
stx ZPPtr1
|
||||
|
||||
.99 rts
|
||||
*--------------------------------------
|
||||
CSH.fCall.Exec jmp (J.CSH.EXEC,x)
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/bin/csh.s.kw
|
||||
|
330
BIN/CSH.S.txt
330
BIN/CSH.S.txt
@ -10,20 +10,19 @@ NEW
|
||||
.INB inc/mli.i
|
||||
.INB inc/mli.e.i
|
||||
*--------------------------------------
|
||||
CSH.T.VOID .EQ 0
|
||||
CSH.T.UCHAR .EQ 1
|
||||
CSH.T.SCHAR .EQ 2
|
||||
CSH.T.UINT .EQ 3
|
||||
CSH.T.SINT .EQ 4
|
||||
CSH.T.ULONG .EQ 5
|
||||
CSH.T.SLONG .EQ 6
|
||||
CSH.T.FLOAT .EQ 7
|
||||
CSH.T.VOID .EQ 1
|
||||
CSH.T.UCHAR .EQ 2
|
||||
CSH.T.SCHAR .EQ 3
|
||||
CSH.T.UINT .EQ 4
|
||||
CSH.T.SINT .EQ 5
|
||||
CSH.T.ULONG .EQ 6
|
||||
CSH.T.SLONG .EQ 7
|
||||
CSH.T.FLOAT .EQ 8
|
||||
CSH.T.VARIADIC .EQ $FF
|
||||
*--------------------------------------
|
||||
CSH.Q.POINTER .EQ %01000000
|
||||
CSH.Q.PPOINTER .EQ %10000000
|
||||
CSH.Q.PPPOINTER .EQ %11000000
|
||||
CSH.Q.PCONST .EQ %00100000
|
||||
CSH.Q.CONST .EQ %00010000
|
||||
CSH.Q.FUNC .EQ %00001000
|
||||
*--------------------------------------
|
||||
@ -36,30 +35,26 @@ ZPCSHCode .BS 2
|
||||
ZPCSHConst .BS 2
|
||||
ZPCSHData .BS 2
|
||||
ZPCSHStack .BS 2
|
||||
ZPCSHfDecl .BS 2
|
||||
|
||||
ZPCSHfDecl .BS 2
|
||||
ZPInputBufPtr .BS 2
|
||||
hDefine .BS 1
|
||||
hInclude .BS 1
|
||||
ZPVarID .BS 2
|
||||
ZPVarDef .EQ *
|
||||
|
||||
ZPVarDef .EQ *
|
||||
ZPVarType .BS 1
|
||||
ZPVarQual .BS 1
|
||||
ZPVarSizeOf .BS 2
|
||||
ZPVarDataPtr .BS 2
|
||||
ZPVarDefPtr .BS 2
|
||||
|
||||
ZPInputBufPtr .BS 2
|
||||
|
||||
|
||||
ArgIndex .BS 1
|
||||
bFastCall .BS 1
|
||||
bCompil .BS 1
|
||||
|
||||
hDefine .BS 1
|
||||
hInclude .BS 1
|
||||
|
||||
ZPPtr1 .BS 2
|
||||
ZPPtr2 .BS 2
|
||||
ZPPtr3 .BS 2
|
||||
|
||||
ArgIndex .BS 1
|
||||
|
||||
ZS.END .ED
|
||||
*--------------------------------------
|
||||
* File Header (16 Bytes)
|
||||
@ -163,9 +158,12 @@ J.CSH.UTYPES .DA CSH.UCHAR
|
||||
J.CSH.STYPES .DA CSH.SCHAR
|
||||
.DA CSH.SINT
|
||||
.DA CSH.SLONG
|
||||
*--------------------------------------
|
||||
J.CSH.KW.END .DA CSH.IF.END
|
||||
.DA CSH.WHILE.END
|
||||
*--------------------------------------
|
||||
L.CSH.LIBC .DA CSH.LIBC
|
||||
*--------------------------------------
|
||||
J.CSH.EXEC .DA EXEC.pwr
|
||||
.DA EXEC.log
|
||||
.DA EXEC.sqr
|
||||
@ -239,12 +237,12 @@ CS.RUN >PUSHW L.MSG.GREETINGS
|
||||
sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
CS.RUN.ARGS inc ArgIndex
|
||||
CS.RUN.ARGS inc ArgIndex
|
||||
|
||||
lda ArgIndex
|
||||
>SYSCALL ArgV
|
||||
bcs .7
|
||||
|
||||
|
||||
>STYA ZPPtr1
|
||||
lda (ZPPtr1)
|
||||
cmp #'-'
|
||||
@ -276,7 +274,7 @@ CS.RUN.ARGS inc ArgIndex
|
||||
bcs .9
|
||||
|
||||
>STYA ZPInputBufPtr
|
||||
|
||||
|
||||
txa
|
||||
>STA.G hFileBuf
|
||||
bra CS.RUN.ARGS
|
||||
@ -317,23 +315,24 @@ PrintErrMsg lda hDefine
|
||||
|
||||
>LDYA.G CSH.SaveDefine
|
||||
>STYA ZPInputBufPtr
|
||||
|
||||
|
||||
.10 lda hInclude
|
||||
beq .11
|
||||
|
||||
|
||||
|
||||
|
||||
bra .12
|
||||
|
||||
.11 >LDA.G hFileBuf
|
||||
|
||||
.12 >SYSCALL GetMemPtr
|
||||
>STYA ZPPtr1
|
||||
|
||||
|
||||
stz ZPPtr2
|
||||
stz ZPPtr2+1 Line counter
|
||||
|
||||
.1 inc ZPPtr2
|
||||
bne .2
|
||||
|
||||
inc ZPPtr2+1
|
||||
|
||||
.2 >LDYA ZPPtr1
|
||||
@ -343,9 +342,11 @@ PrintErrMsg lda hDefine
|
||||
|
||||
inc ZPPtr1
|
||||
bne .3
|
||||
|
||||
inc ZPPtr1+1
|
||||
.3 cmp #C.CR
|
||||
bne .20 Scan until EoL
|
||||
|
||||
ldx ZPPtr1
|
||||
cpx ZPInputBufPtr
|
||||
lda ZPPtr1+1
|
||||
@ -354,7 +355,7 @@ PrintErrMsg lda hDefine
|
||||
|
||||
.4 >LDA.G bTrace
|
||||
bmi .5
|
||||
|
||||
|
||||
jsr PrintTraceMsg.3
|
||||
|
||||
.5 lda ZPPtr3
|
||||
@ -362,7 +363,7 @@ PrintErrMsg lda hDefine
|
||||
bne .6
|
||||
|
||||
lda ZPPtr3+1
|
||||
cmp ZPInputBufPtr+1
|
||||
cmp ZPInputBufPtr+1
|
||||
beq .8
|
||||
|
||||
.6 ldy #S.PS.hStdErr
|
||||
@ -375,7 +376,7 @@ PrintErrMsg lda hDefine
|
||||
|
||||
inc ZPPtr3+1
|
||||
bra .5
|
||||
|
||||
|
||||
.8 ldy #S.PS.hStdErr
|
||||
lda (pPS),y
|
||||
>PUSHA
|
||||
@ -389,9 +390,9 @@ PrintErrMsg lda hDefine
|
||||
PrintDebugMsg >LDYA pStack
|
||||
>STYA ZPPtr2
|
||||
>PUSHW L.MSG.DEBUG
|
||||
|
||||
|
||||
>PUSHW ZPPtr2
|
||||
|
||||
|
||||
>PUSHBI 2
|
||||
>SYSCALL PrintF
|
||||
rts
|
||||
@ -403,16 +404,16 @@ PrintTraceMsg.3 ldy #S.PS.hStdErr
|
||||
>PUSHA
|
||||
>PUSHBI '>'
|
||||
>SYSCALL FPutC
|
||||
|
||||
|
||||
ldy #$ff
|
||||
|
||||
.1 iny
|
||||
lda (ZPPtr3),y
|
||||
beq .8
|
||||
|
||||
|
||||
cmp #C.CR
|
||||
beq .8
|
||||
|
||||
|
||||
phy
|
||||
pha
|
||||
ldy #S.PS.hStdErr
|
||||
@ -423,11 +424,11 @@ PrintTraceMsg.3 ldy #S.PS.hStdErr
|
||||
>SYSCALL FPutC
|
||||
ply
|
||||
bra .1
|
||||
|
||||
|
||||
.8 ldy #S.PS.hStdErr
|
||||
lda (pPS),y
|
||||
>PUSHA
|
||||
|
||||
|
||||
>PUSHW L.MSG.ECHOCRLF
|
||||
>PUSHBI 0
|
||||
>SYSCALL FPrintF
|
||||
@ -449,8 +450,8 @@ MSG.USAGE .AS "Usage : CSH <option> file\r\n"
|
||||
.AS " -D : Debug Mode\r\n"
|
||||
.AS " -T : Trace On"
|
||||
MSG.ECHOCRLF .AZ "\r\n"
|
||||
MSG.DEBUG .AZ "pStack=%H"
|
||||
MSG.ERR .AZ "^\r\nLine #%D:"
|
||||
MSG.DEBUG .AZ "pStack=%H\r\n"
|
||||
MSG.ERR .AZ "-^\r\nLine #%D:"
|
||||
*--------------------------------------
|
||||
ENV.INCLUDE .AZ "INCLUDE"
|
||||
*--------------------------------------
|
||||
@ -468,7 +469,7 @@ CSH.PREOPS >PSTR "+"
|
||||
>PSTR "!"
|
||||
>PSTR "~"
|
||||
*--------------------------------------
|
||||
* Post Operators: ++ --
|
||||
* Post Operators: ++ --
|
||||
*--------------------------------------
|
||||
CSH.POSTOPS >PSTR "++"
|
||||
>PSTR "--"
|
||||
@ -558,129 +559,258 @@ CSH.FTYPES >PSTR "fastcall"
|
||||
*--------------------------------------
|
||||
CSH.TYPESIZE .HS 0001010202040405
|
||||
*--------------------------------------
|
||||
CSH.LIBC >PSTR "chtyp"
|
||||
>PSTR "chmod"
|
||||
>PSTR "fstat"
|
||||
>PSTR "stat"
|
||||
>PSTR "mkdir"
|
||||
>PSTR "mknod"
|
||||
>PSTR "mkfifo"
|
||||
>PSTR "pipe"
|
||||
>PSTR "opendir"
|
||||
>PSTR "readdir"
|
||||
>PSTR "closedir"
|
||||
>PSTR "open"
|
||||
>PSTR "close"
|
||||
>PSTR "read"
|
||||
>PSTR "write"
|
||||
>PSTR "chown"
|
||||
>PSTR "fputc"
|
||||
>PSTR "putchar"
|
||||
>PSTR "getc"
|
||||
>PSTR "getchar"
|
||||
>PSTR "fputs"
|
||||
>PSTR "puts"
|
||||
>PSTR "fgets"
|
||||
>PSTR "ungetc"
|
||||
>PSTR "fopen"
|
||||
>PSTR "fclose"
|
||||
>PSTR "fread"
|
||||
>PSTR "fwrite"
|
||||
>PSTR "fflush"
|
||||
>PSTR "fseek"
|
||||
>PSTR "ftell"
|
||||
>PSTR "feof"
|
||||
>PSTR "remove"
|
||||
>PSTR "rename"
|
||||
>PSTR "printf"
|
||||
>PSTR "fprintf"
|
||||
>PSTR "sprintf"
|
||||
>PSTR "scanf"
|
||||
>PSTR "fscanf"
|
||||
>PSTR "sscanf"
|
||||
>PSTR "$50"
|
||||
>PSTR "$52"
|
||||
>PSTR "$54"
|
||||
>PSTR "$56"
|
||||
>PSTR "$58"
|
||||
>PSTR "$5A"
|
||||
>PSTR "$5C"
|
||||
>PSTR "setattr"
|
||||
>PSTR "mount"
|
||||
>PSTR "umount"
|
||||
>PSTR "online"
|
||||
>PSTR "getstkobj"
|
||||
>PSTR "shift"
|
||||
>PSTR "argv"
|
||||
>PSTR "argvDup"
|
||||
>PSTR "geterrmsg"
|
||||
>PSTR "atof"
|
||||
>PSTR "atoi"
|
||||
>PSTR "atol"
|
||||
>PSTR "strtof"
|
||||
>PSTR "strtol"
|
||||
>PSTR "strtoul"
|
||||
>PSTR "realpath"
|
||||
>PSTR "expand"
|
||||
>PSTR "strlen"
|
||||
>PSTR "strcpy"
|
||||
>PSTR "strcat"
|
||||
>PSTR "strdup"
|
||||
>PSTR "strupr"
|
||||
>PSTR "strlwr"
|
||||
>PSTR "strcmp"
|
||||
>PSTR "strcasecmp"
|
||||
>PSTR "getdevbyname"
|
||||
>PSTR "getdevstatus"
|
||||
>PSTR "mkdev"
|
||||
>PSTR "ioctl"
|
||||
>PSTR "loadlib"
|
||||
>PSTR "unloadlib"
|
||||
>PSTR "loaddrv"
|
||||
>PSTR "insdrv"
|
||||
>PSTR "execl"
|
||||
>PSTR "execv"
|
||||
>PSTR "fork"
|
||||
>PSTR "kill"
|
||||
>PSTR "loadfile"
|
||||
>PSTR "loadtxtfile"
|
||||
>PSTR "filesearch"
|
||||
>PSTR "getmemstat"
|
||||
>PSTR "strvnew"
|
||||
>PSTR "strvset"
|
||||
>PSTR "strvget"
|
||||
>PSTR "strvfree"
|
||||
>PSTR "putenv"
|
||||
>PSTR "setenv"
|
||||
>PSTR "getenv"
|
||||
>PSTR "unsetenv"
|
||||
>PSTR "time"
|
||||
>PSTR "strftime"
|
||||
>PSTR "ctime2time"
|
||||
>PSTR "md5"
|
||||
>PSTR "md5init"
|
||||
>PSTR "md5update"
|
||||
>PSTR "md5finalize"
|
||||
>PSTR "getpwuid"
|
||||
>PSTR "getpwname"
|
||||
>PSTR "putpw"
|
||||
>PSTR "getgrpgid"
|
||||
>PSTR "getgrpname"
|
||||
>PSTR "putgr"
|
||||
>PSTR "opensession"
|
||||
>PSTR "closesession"
|
||||
>PSTR "slistgetdata"
|
||||
>PSTR "slistadddata"
|
||||
>PSTR "slistsetdata"
|
||||
>PSTR "slistgetbyid"
|
||||
>PSTR "slistnewkey"
|
||||
>PSTR "slistlookup"
|
||||
>PSTR "slistfree"
|
||||
>PSTR "slistnew"
|
||||
>PSTR "malloc"
|
||||
>PSTR "realloc"
|
||||
>PSTR "getmemptr"
|
||||
>PSTR "free"
|
||||
>PSTR "newstkobj"
|
||||
>PSTR "loadstkobj"
|
||||
>PSTR "getstkobjptr"
|
||||
>PSTR "freestkobj"
|
||||
.HS 00
|
||||
*--------------------------------------
|
||||
CSH.FN
|
||||
* float pwr (float x, float y);
|
||||
>PSTR "pwr"
|
||||
.DA #CSH.T.FLOAT returned value
|
||||
.DA #CSH.T.FLOAT
|
||||
.DA #CSH.T.FLOAT
|
||||
.DA #CSH.T.FLOAT,#0 returned value
|
||||
.DA #CSH.T.FLOAT,#0
|
||||
.DA #CSH.T.FLOAT,#0
|
||||
.DA #0
|
||||
* float cos (float x);
|
||||
>PSTR "log"
|
||||
.DA #CSH.T.FLOAT returned value
|
||||
.DA #CSH.T.FLOAT
|
||||
.DA #CSH.T.FLOAT,#0 returned value
|
||||
.DA #CSH.T.FLOAT,#0
|
||||
.DA #0
|
||||
>PSTR "sqr"
|
||||
.DA #CSH.T.FLOAT returned value
|
||||
.DA #CSH.T.FLOAT
|
||||
.DA #CSH.T.FLOAT,#0 returned value
|
||||
.DA #CSH.T.FLOAT,#0
|
||||
.DA #0
|
||||
>PSTR "exp"
|
||||
.DA #CSH.T.FLOAT returned value
|
||||
.DA #CSH.T.FLOAT
|
||||
.DA #CSH.T.FLOAT,#0 returned value
|
||||
.DA #CSH.T.FLOAT,#0
|
||||
.DA #0
|
||||
>PSTR "cos"
|
||||
.DA #CSH.T.FLOAT returned value
|
||||
.DA #CSH.T.FLOAT
|
||||
.DA #CSH.T.FLOAT,#0 returned value
|
||||
.DA #CSH.T.FLOAT,#0
|
||||
.DA #0
|
||||
>PSTR "sin"
|
||||
.DA #CSH.T.FLOAT returned value
|
||||
.DA #CSH.T.FLOAT
|
||||
.DA #CSH.T.FLOAT,#0 returned value
|
||||
.DA #CSH.T.FLOAT,#0
|
||||
.DA #0
|
||||
>PSTR "tan"
|
||||
.DA #CSH.T.FLOAT returned value
|
||||
.DA #CSH.T.FLOAT
|
||||
.DA #CSH.T.FLOAT,#0 returned value
|
||||
.DA #CSH.T.FLOAT,#0
|
||||
.DA #0
|
||||
>PSTR "atan"
|
||||
.DA #CSH.T.FLOAT returned value
|
||||
.DA #CSH.T.FLOAT
|
||||
.DA #CSH.T.FLOAT,#0 returned value
|
||||
.DA #CSH.T.FLOAT,#0
|
||||
.DA #0
|
||||
* char getchar ( void );
|
||||
>PSTR "getchar"
|
||||
.DA #CSH.T.UCHAR returned value
|
||||
.DA #CSH.T.UCHAR,#0 returned value
|
||||
.DA #0
|
||||
* int puts ( const char * str );
|
||||
>PSTR "puts"
|
||||
.DA #CSH.T.SINT returned value
|
||||
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
|
||||
.DA #CSH.T.SINT,#0 returned value
|
||||
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
|
||||
.DA #0
|
||||
* int execl(const char* cmdline, short int flags);
|
||||
>PSTR "execl"
|
||||
.DA #CSH.T.SINT returned value
|
||||
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
|
||||
.DA #CSH.T.UCHAR
|
||||
.DA #CSH.T.SINT,#0 returned value
|
||||
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
|
||||
.DA #CSH.T.UCHAR,#0
|
||||
.DA #0
|
||||
* int printf ( const char * format, ... );
|
||||
>PSTR "printf"
|
||||
.DA #CSH.T.SINT returned value
|
||||
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
|
||||
.DA #CSH.T.VARIADIC
|
||||
.DA #CSH.T.SINT,#0 returned value
|
||||
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
|
||||
.DA #CSH.T.VARIADIC,#0
|
||||
.DA #0
|
||||
* int putenv(const char *string);
|
||||
>PSTR "putenv"
|
||||
.DA #CSH.T.SINT returned value
|
||||
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
|
||||
.DA #CSH.T.SINT,#0 returned value
|
||||
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
|
||||
.DA #0
|
||||
* int setenv(const char *name, const char *value);
|
||||
>PSTR "setenv"
|
||||
.DA #CSH.T.SINT returned value
|
||||
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
|
||||
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
|
||||
.DA #CSH.T.SINT,#0 returned value
|
||||
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
|
||||
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
|
||||
.DA #0
|
||||
* char *getenv(const char *name, char *value);
|
||||
>PSTR "getenv"
|
||||
.DA #CSH.Q.POINTER+CSH.T.UCHAR
|
||||
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
|
||||
.DA #CSH.Q.POINTER+CSH.T.UCHAR
|
||||
.DA #CSH.T.UCHAR,#CSH.Q.POINTER
|
||||
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
|
||||
.DA #CSH.T.UCHAR,#CSH.Q.POINTER
|
||||
.DA #0
|
||||
* int unsetenv(const char *name);
|
||||
>PSTR "unsetenv"
|
||||
.DA #CSH.T.SINT returned value
|
||||
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
|
||||
.DA #CSH.T.SINT,#0 returned value
|
||||
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
|
||||
.DA #0
|
||||
* void md5 (const char* str, char* digest);
|
||||
>PSTR "md5"
|
||||
.DA #CSH.T.VOID
|
||||
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
|
||||
.DA #CSH.Q.POINTER+CSH.T.UCHAR
|
||||
.DA #CSH.T.VOID,#0
|
||||
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
|
||||
.DA #CSH.T.UCHAR,#CSH.Q.POINTER
|
||||
.DA #0
|
||||
* void * malloc ( int size );
|
||||
>PSTR "malloc"
|
||||
.DA #CSH.Q.POINTER+CSH.T.VOID returned value
|
||||
.DA #CSH.T.SINT
|
||||
.DA #CSH.T.VOID,#CSH.Q.POINTER returned value
|
||||
.DA #CSH.T.SINT,#0
|
||||
.DA #0
|
||||
* short int fopen(const char*,short int,short int,int);
|
||||
>PSTR "fopen"
|
||||
.DA #CSH.T.SCHAR
|
||||
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.UCHAR
|
||||
.DA #CSH.T.SCHAR
|
||||
.DA #CSH.T.SCHAR
|
||||
.DA #CSH.T.SINT
|
||||
.DA #CSH.T.SCHAR,#0
|
||||
.DA #CSH.T.UCHAR,#CSH.Q.CONST+CSH.Q.POINTER
|
||||
.DA #CSH.T.SCHAR,#0
|
||||
.DA #CSH.T.SCHAR,#0
|
||||
.DA #CSH.T.SINT,#0
|
||||
.DA #0
|
||||
* int fclose(short int);
|
||||
>PSTR "fclose"
|
||||
.DA #CSH.T.SINT
|
||||
.DA #CSH.T.SCHAR
|
||||
.DA #CSH.T.SINT,#0
|
||||
.DA #CSH.T.SCHAR,#0
|
||||
.DA #0
|
||||
* int fread (short int,void*,int);
|
||||
>PSTR "fread"
|
||||
.DA #CSH.T.SINT
|
||||
.DA #CSH.T.SCHAR
|
||||
.DA #CSH.Q.POINTER+CSH.T.VOID
|
||||
.DA #CSH.T.SINT
|
||||
.DA #CSH.T.SINT,#0
|
||||
.DA #CSH.T.SCHAR,#0
|
||||
.DA #CSH.T.VOID,#CSH.Q.POINTER
|
||||
.DA #CSH.T.SINT,#0
|
||||
.DA #0
|
||||
* int fwrite (short int,const void*,int);
|
||||
>PSTR "fwrite"
|
||||
.DA #CSH.T.SINT
|
||||
.DA #CSH.T.SCHAR
|
||||
.DA #CSH.Q.CONST+CSH.Q.POINTER+CSH.T.VOID
|
||||
.DA #CSH.T.SINT
|
||||
.DA #0
|
||||
.DA #CSH.T.SINT,#0
|
||||
.DA #CSH.T.SCHAR,#0
|
||||
.DA #CSH.T.VOID,#CSH.Q.CONST+CSH.Q.POINTER
|
||||
.DA #CSH.T.SINT,#0
|
||||
.DA #0
|
||||
*--------------------------------------
|
||||
.DA #0
|
||||
*--------------------------------------
|
||||
.DUMMY
|
||||
.OR 0
|
||||
DS.START
|
||||
DS.START
|
||||
PathBuf .BS 65
|
||||
|
||||
hFileBuf .BS 1
|
||||
@ -712,7 +842,7 @@ CSH.fDeclBuf .BS 2
|
||||
CSH.SaveInclude .BS 2
|
||||
CSH.SaveDefine .BS 2
|
||||
|
||||
CSH.VarDef .BS 6
|
||||
CSH.VarDef .BS 8
|
||||
|
||||
bDebug .BS 1
|
||||
bTrace .BS 1
|
||||
|
@ -8,6 +8,7 @@ NEW
|
||||
.TF bin/nscutil
|
||||
*--------------------------------------
|
||||
.INB inc/macros.i
|
||||
.INB inc/io.i
|
||||
.INB inc/a2osx.i
|
||||
.INB inc/mli.e.i
|
||||
*--------------------------------------
|
||||
@ -31,7 +32,7 @@ CS.START cld
|
||||
*--------------------------------------
|
||||
.1 .DA CS.INIT
|
||||
.DA CS.RUN
|
||||
.DA CS.DOEVENT
|
||||
.DA CS.DOEVENT
|
||||
.DA CS.QUIT
|
||||
L.MSG.READ.KO .DA MSG.READ.KO
|
||||
L.MSG.READ.OK1 .DA MSG.READ.OK1
|
||||
@ -49,15 +50,15 @@ CS.RUN ldy #S.PS.ARGC
|
||||
lda (pPS),y
|
||||
cmp #1
|
||||
bcs CS.RUN.SET
|
||||
|
||||
CS.RUN.READ lda $c00b
|
||||
jsr NSC.Init
|
||||
|
||||
CS.RUN.READ jsr NSC.Init
|
||||
jsr NSC.Read
|
||||
ldx #7
|
||||
|
||||
|
||||
.1 lda DS1216E.DETECT,x
|
||||
eor DS1216E.DATA,x
|
||||
bne .8
|
||||
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
@ -73,7 +74,7 @@ CS.RUN.READ lda $c00b
|
||||
>PUSHW L.MSG.USAGE
|
||||
>PUSHBI 0
|
||||
>SYSCALL PrintF
|
||||
lda #0 tell TSKMGR that all done ok, but
|
||||
lda #0 tell TSKMGR that all done ok, but
|
||||
sec we do not want to stay in memory
|
||||
rts
|
||||
|
||||
@ -83,34 +84,41 @@ CS.RUN.SET lda #1
|
||||
>SYSCALL StrLen
|
||||
cpy #17
|
||||
bne .9
|
||||
|
||||
ldy #0
|
||||
stz DS1216E.DATA+7
|
||||
jsr GetBCD
|
||||
bcs .9
|
||||
|
||||
sta DS1216E.DATA
|
||||
lda (ZPPtr1),y
|
||||
cmp #'/'
|
||||
bne .9
|
||||
|
||||
iny
|
||||
|
||||
jsr GetBCD
|
||||
bcs .9
|
||||
|
||||
sta DS1216E.DATA+1
|
||||
|
||||
lda (ZPPtr1),y
|
||||
cmp #'/'
|
||||
bne .9
|
||||
|
||||
iny
|
||||
|
||||
jsr GetBCD
|
||||
bcs .9
|
||||
|
||||
sta DS1216E.DATA+2
|
||||
|
||||
lda (ZPPtr1),y
|
||||
cmp #','
|
||||
bne .9
|
||||
|
||||
iny
|
||||
|
||||
|
||||
jsr GetBCD
|
||||
bcs .9
|
||||
sta DS1216E.DATA+4
|
||||
@ -118,23 +126,28 @@ CS.RUN.SET lda #1
|
||||
lda (ZPPtr1),y
|
||||
cmp #':'
|
||||
bne .9
|
||||
|
||||
iny
|
||||
|
||||
jsr GetBCD
|
||||
bcs .9
|
||||
|
||||
sta DS1216E.DATA+5
|
||||
|
||||
lda (ZPPtr1),y
|
||||
cmp #':'
|
||||
bne .9
|
||||
|
||||
iny
|
||||
|
||||
jsr GetBCD
|
||||
bcs .9
|
||||
|
||||
sta DS1216E.DATA+6
|
||||
stz DS1216E.DATA+7
|
||||
jsr NSC.Write
|
||||
lda #0 tell TSKMGR that all done ok, but
|
||||
|
||||
lda #0 tell TSKMGR that all done ok, but
|
||||
sec we do not want to stay in memory
|
||||
rts
|
||||
|
||||
@ -148,94 +161,132 @@ CS.DOEVENT sec
|
||||
CS.QUIT clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
NSC.Init php
|
||||
NSC.Init lda RDC3ROM
|
||||
|
||||
php
|
||||
sei
|
||||
lda $C00B
|
||||
lda $CFFF
|
||||
pha
|
||||
|
||||
* sta CLRC8ROM Make cards release $C8xx space
|
||||
sta SETC3ROM
|
||||
|
||||
ldx #7
|
||||
|
||||
.1 ldy #8
|
||||
|
||||
.2 lda $C304
|
||||
lsr
|
||||
ror DS1216E.DETECT,x
|
||||
dey
|
||||
bne .2
|
||||
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
plp
|
||||
bmi .8
|
||||
|
||||
sta CLRC3ROM
|
||||
|
||||
.8 rts
|
||||
*--------------------------------------
|
||||
NSC.Read php
|
||||
sei
|
||||
|
||||
lda RDC3ROM
|
||||
php
|
||||
|
||||
* sta CLRC8ROM Make cards release $C8xx space
|
||||
sta SETC3ROM
|
||||
|
||||
jsr NSC.Select
|
||||
|
||||
ldx #7
|
||||
|
||||
.1 ldy #8
|
||||
|
||||
.2 lda $C304
|
||||
lsr
|
||||
ror DS1216E.DATA,x
|
||||
dey
|
||||
bne .2
|
||||
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
plp
|
||||
bmi .8
|
||||
|
||||
sta CLRC3ROM
|
||||
|
||||
.8 plp
|
||||
rts
|
||||
*--------------------------------------
|
||||
NSC.Write php
|
||||
sei
|
||||
|
||||
lda RDC3ROM
|
||||
php
|
||||
|
||||
* sta CLRC8ROM Make cards release $C8xx space
|
||||
sta SETC3ROM
|
||||
|
||||
jsr NSC.Select
|
||||
|
||||
ldx #7
|
||||
|
||||
.3 lda DS1216E.DATA,x
|
||||
phx
|
||||
ldx #8 ....of 8 bits
|
||||
|
||||
.4 ldy #0
|
||||
lsr
|
||||
bcc .5
|
||||
|
||||
iny
|
||||
|
||||
.5 pha
|
||||
lda $C300,y Write Pattern bit in A0, with A2=0
|
||||
pla
|
||||
bmi .99
|
||||
sta $CFFF
|
||||
.99 plp
|
||||
dex
|
||||
bne .4
|
||||
|
||||
plx
|
||||
dex
|
||||
bpl .3
|
||||
|
||||
plp
|
||||
bmi .8
|
||||
|
||||
sta CLRC3ROM
|
||||
|
||||
.8 plp
|
||||
rts
|
||||
*--------------------------------------
|
||||
NSC.Select sta $C300
|
||||
|
||||
lda $C304 Reset DS1216E comparison register with READ A2=1
|
||||
ldx #7 Read 8 bytes...
|
||||
|
||||
.3 lda DS1216E.PATTERN,x
|
||||
phx
|
||||
ldx #8 ....of 8 bits
|
||||
|
||||
.4 ldy #0
|
||||
lsr
|
||||
bcc .5
|
||||
|
||||
iny
|
||||
|
||||
.5 pha
|
||||
lda $C300,y Write Pattern bit in A0, with A2=0
|
||||
pla
|
||||
dex
|
||||
bne .4
|
||||
|
||||
plx
|
||||
dex
|
||||
bpl .3
|
||||
rts
|
||||
*--------------------------------------
|
||||
NSC.Read php
|
||||
sei
|
||||
lda $CFFF
|
||||
pha
|
||||
jsr NSC.Select
|
||||
|
||||
ldx #7
|
||||
.1 ldy #8
|
||||
.2 lda $C304
|
||||
lsr
|
||||
ror DS1216E.DATA,x
|
||||
dey
|
||||
bne .2
|
||||
dex
|
||||
bpl .1
|
||||
pla
|
||||
bmi .99
|
||||
sta $CFFF
|
||||
.99 plp
|
||||
rts
|
||||
*--------------------------------------
|
||||
NSC.Write php
|
||||
sei
|
||||
lda $CFFF
|
||||
pha
|
||||
jsr NSC.Select
|
||||
|
||||
ldx #7
|
||||
.3 lda DS1216E.DATA,x
|
||||
phx
|
||||
ldx #8 ....of 8 bits
|
||||
.4 ldy #0
|
||||
lsr
|
||||
bcc .5
|
||||
iny
|
||||
.5 pha
|
||||
lda $C300,y Write Pattern bit in A0, with A2=0
|
||||
pla
|
||||
dex
|
||||
bne .4
|
||||
plx
|
||||
dex
|
||||
bpl .3
|
||||
pla
|
||||
bmi .99
|
||||
sta $CFFF
|
||||
.99 plp
|
||||
rts
|
||||
*--------------------------------------
|
||||
NSC.Dump >PUSHW L.MSG.READ.OK1
|
||||
@ -262,7 +313,7 @@ NSC.Dump >PUSHW L.MSG.READ.OK1
|
||||
>LDYA L.MSG.READ.OK2.24
|
||||
bit DS1216E.DATA+4
|
||||
bpl .3
|
||||
|
||||
|
||||
>LDYA L.MSG.READ.OK2.12
|
||||
|
||||
.3 >SYSCALL PutS
|
||||
@ -312,7 +363,7 @@ NSC.Dump >PUSHW L.MSG.READ.OK1
|
||||
>SYSCALL PutChar
|
||||
lda DS1216E.DATA+7
|
||||
jsr PrintBCD
|
||||
|
||||
|
||||
>PUSHW L.MSG.CRLF
|
||||
>PUSHBI 0
|
||||
>SYSCALL PrintF
|
||||
@ -325,35 +376,40 @@ PrintBCD pha
|
||||
lsr
|
||||
ora #$30
|
||||
>SYSCALL PutChar
|
||||
bcs .9
|
||||
|
||||
pla
|
||||
and #$0f
|
||||
ora #$30
|
||||
>SYSCALL PutChar
|
||||
.9 rts
|
||||
rts
|
||||
*--------------------------------------
|
||||
GetBCD lda (ZPPtr1),y
|
||||
GetBCD lda (ZPPtr1),y
|
||||
iny
|
||||
jsr IsDigit
|
||||
bcs .9
|
||||
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
asl
|
||||
sta TmpByte
|
||||
lda (ZPPtr1),y
|
||||
lda (ZPPtr1),y
|
||||
iny
|
||||
jsr IsDigit
|
||||
bcs .9
|
||||
|
||||
and #$0f
|
||||
ora TmpByte
|
||||
|
||||
.9 rts
|
||||
*--------------------------------------
|
||||
IsDigit cmp #'0'
|
||||
bcc .9
|
||||
|
||||
cmp #'9'+1
|
||||
and #$0f
|
||||
rts cc if ok, cs if not
|
||||
|
||||
.9 sec
|
||||
rts
|
||||
*--------------------------------------
|
||||
|
@ -1,10 +1,10 @@
|
||||
NEW
|
||||
AUTO 3,1
|
||||
*--------------------------------------
|
||||
IO.D2.SeekTimeR .EQ 68 LIBBLKDEV Recalibration
|
||||
IO.D2.SeekTimeF .EQ 68 LIBBLKDEV Track Formatter
|
||||
IO.D2.SeekTimeB .EQ 68 LIBBLKDEV Boot Block
|
||||
IO.D2.SeekTimeP .EQ 68 ProDOS.FX initial
|
||||
IO.D2.SeekTimeR .EQ 48 LIBBLKDEV Recalibration
|
||||
IO.D2.SeekTimeF .EQ 48 LIBBLKDEV Track Formatter
|
||||
IO.D2.SeekTimeB .EQ 48 LIBBLKDEV Boot Block
|
||||
IO.D2.SeekTimeP .EQ 38 ProDOS.FX initial
|
||||
IO.D2.SeekTimeI .EQ 10 ProDOS.FX increment -> until > 128
|
||||
*--------------------------------------
|
||||
IO.D2.Ph0Off .EQ $C080
|
||||
|
@ -28,7 +28,7 @@ RDREADAUX .EQ $C013 R
|
||||
RDWRITEAUX .EQ $C014 R
|
||||
RDCXROM .EQ $C015 R
|
||||
RDALTZP .EQ $C016 R
|
||||
*RDC3ROM .EQ $C017 R
|
||||
RDC3ROM .EQ $C017 R
|
||||
RD80STORE .EQ $C018 R
|
||||
VBL .EQ $C019 R
|
||||
RDTEXT .EQ $C01A R
|
||||
|
@ -576,16 +576,18 @@ FPU.FOUT .EQ 210 PrintF
|
||||
.MA ENTER
|
||||
>PUSHB pBase
|
||||
lda pStack
|
||||
inc
|
||||
sta pBase
|
||||
sec
|
||||
clc
|
||||
sbc #]1
|
||||
sta pStack
|
||||
.EM
|
||||
*--------------------------------------
|
||||
.MA LEAVE
|
||||
pha
|
||||
lda pStack
|
||||
sta pBase
|
||||
lda pBase
|
||||
dec
|
||||
sta pStack
|
||||
>PULLB pBase
|
||||
pla
|
||||
.EM
|
||||
|
16
INCLUDE/math.h.txt
Normal file
16
INCLUDE/math.h.txt
Normal file
@ -0,0 +1,16 @@
|
||||
NEW
|
||||
AUTO 3,1
|
||||
|
||||
float pwr(float,float);
|
||||
float log(float);
|
||||
float sqr(float);
|
||||
float exp(float);
|
||||
float cos(float);
|
||||
float sin(float);
|
||||
float tan(float);
|
||||
float atan(float);
|
||||
|
||||
long lrintf(float);
|
||||
|
||||
MAN
|
||||
TEXT include/math.h
|
@ -13,19 +13,11 @@ NEW
|
||||
#define SEEK_CUR 1
|
||||
#define SEEK_END 2
|
||||
|
||||
int fastcall putchar(short int);
|
||||
int fputc (short int, short int);
|
||||
int fastcall puts(const char*);
|
||||
int fputs (short int,const char*);
|
||||
char* fgets(short int,char* s,int n);
|
||||
short int getchar();
|
||||
short int fastcall getc(short int);
|
||||
// short int ungetc(short int c, short int );
|
||||
|
||||
short int fopen(const char*,short int,short int,int);
|
||||
int fclose(short int);
|
||||
int fread (short int,void*,int);
|
||||
int fwrite (short int,const void*,int);
|
||||
int fastcall fclose(short int);
|
||||
int fread(short int,void*,int);
|
||||
int fwrite(short int,const void*,int);
|
||||
|
||||
int fastcall fflush(short int);
|
||||
int fseek(short int,long,short int);
|
||||
int fastcall feof(short int);
|
||||
@ -33,6 +25,16 @@ long fastcall ftell(short int);
|
||||
int fastcall remove(const char*);
|
||||
int rename(const char*,const char*);
|
||||
|
||||
int fastcall putchar(short int);
|
||||
int fputc(short int, short int);
|
||||
int fastcall puts(const char*);
|
||||
int fputs(short int,const char*);
|
||||
|
||||
char* fgets(short int,char*,int);
|
||||
short int getchar();
|
||||
short int fastcall getc(short int);
|
||||
// short int ungetc(short int c, short int );
|
||||
|
||||
int printf(const char*,...);
|
||||
int fprintf(short int,const char*,...);
|
||||
int sprintf(char*,const char*,...);
|
||||
|
@ -1,6 +1,9 @@
|
||||
NEW
|
||||
AUTO 3,1
|
||||
|
||||
// void* malloc(int);
|
||||
// void free(void*);
|
||||
|
||||
float strtof(const char*,char**);
|
||||
float atof(const char*);
|
||||
|
||||
|
@ -4,9 +4,9 @@ NEW
|
||||
int fastcall strlen(char*);
|
||||
char* strcat(char*,const char*);
|
||||
char* strcpy(char*,const char*);
|
||||
char* fastcall strdup (char*);
|
||||
char* fastcall strupr (char*);
|
||||
char* fastcall strlwr (char*);
|
||||
char* fastcall strdup(char*);
|
||||
char* fastcall strupr(char*);
|
||||
char* fastcall strlwr(char*);
|
||||
int strcmp(const char*,const char*);
|
||||
int strcasecmp(const char*,const char *);
|
||||
|
||||
|
@ -2,12 +2,12 @@ NEW
|
||||
AUTO 3,1
|
||||
|
||||
short int open(const char*, short int);
|
||||
short int fastcall close(short int)
|
||||
short int fastcall close(short int);
|
||||
int read(short int, void*, int);
|
||||
int write(short int, const void*, int);
|
||||
// int lseek(short int,long,short int);
|
||||
|
||||
short int chown(const char*, short int, short int);`
|
||||
short int chown(const char*, short int, short int);
|
||||
|
||||
MAN
|
||||
TEXT include/unistd.h
|
||||
|
@ -353,75 +353,79 @@ DS1216E.DATA2 .EQ A1L
|
||||
*--------------------------------------
|
||||
LDR.ClkDevScan php
|
||||
sei
|
||||
lda $CFFF
|
||||
pha
|
||||
|
||||
lda RDC3ROM
|
||||
php
|
||||
|
||||
* sta CLRC8ROM Make cards release $C8xx space
|
||||
sta SETC3ROM
|
||||
|
||||
sta $C300
|
||||
|
||||
ldx #7
|
||||
ldx #8
|
||||
|
||||
.1 ldy #8
|
||||
|
||||
.2 lda $C304
|
||||
lsr
|
||||
ror DS1216E.DATA1,x
|
||||
ror DS1216E.DATA1-1,x
|
||||
dey
|
||||
bne .2
|
||||
|
||||
dex
|
||||
bpl .1
|
||||
bne .1
|
||||
|
||||
lda $C304 Reset DS1216E comparison register with READ A2=1
|
||||
ldx #7 Read 8 bytes...
|
||||
|
||||
.3 lda DS1216E.SIG,x
|
||||
phx
|
||||
ldy #8 Read 8 bytes...
|
||||
|
||||
ldx #8 ....of 8 bits
|
||||
.3 ldy #8 ....of 8 bits
|
||||
|
||||
.4 ldy #0
|
||||
lsr
|
||||
bcc .5
|
||||
lda DS1216E.SIG-1,y
|
||||
|
||||
iny
|
||||
.4 lsr
|
||||
bcs .5
|
||||
|
||||
.5 pha
|
||||
lda $C300,y Write Pattern bit in A0, with A2=0
|
||||
pla
|
||||
dex
|
||||
bit $C300
|
||||
bra .50
|
||||
|
||||
.5 bit $C301 Write Pattern bit in A0, with A2=0
|
||||
|
||||
.50 dey
|
||||
bne .4
|
||||
|
||||
plx
|
||||
dex
|
||||
bpl .3
|
||||
bne .3
|
||||
|
||||
ldx #7
|
||||
ldx #8
|
||||
|
||||
.6 ldy #8
|
||||
|
||||
.7 lda $C304
|
||||
lsr
|
||||
ror DS1216E.DATA2,x
|
||||
ror DS1216E.DATA2-1,x
|
||||
|
||||
dey
|
||||
bne .7
|
||||
|
||||
dex
|
||||
bpl .6
|
||||
bne .6
|
||||
|
||||
pla
|
||||
plp
|
||||
bmi .8
|
||||
|
||||
sta $CFFF
|
||||
|
||||
sta CLRC3ROM
|
||||
|
||||
.8 plp
|
||||
|
||||
ldx #7
|
||||
ldx #8
|
||||
|
||||
.9 lda DS1216E.DATA1,x
|
||||
cmp DS1216E.DATA2,x
|
||||
.9 lda DS1216E.DATA1-1,x
|
||||
cmp DS1216E.DATA2-1,x
|
||||
bne .90
|
||||
|
||||
dex
|
||||
bpl .9
|
||||
bne .9
|
||||
|
||||
bra LDR.ClkDevTCLK
|
||||
|
||||
|
@ -3,43 +3,56 @@ NEW
|
||||
*--------------------------------------
|
||||
* Driver For DS1216E
|
||||
*--------------------------------------
|
||||
* we can safely use $200 (used by TCLK)
|
||||
*--------------------------------------
|
||||
DS1216E.DATA .EQ $200 Reverted YY MM DD Day HH mm SS CS
|
||||
*--------------------------------------
|
||||
NCLK.START php
|
||||
sei
|
||||
sta $CFFF Make cards release $C8xx space
|
||||
sei NO IRQ !!!
|
||||
|
||||
lda RDC3ROM because no IRQ handler at $C3FA...
|
||||
php
|
||||
|
||||
* sta CLRC8ROM Make cards release $C8xx space
|
||||
sta SETC3ROM ... after this
|
||||
|
||||
sta $C300
|
||||
lda $C304 Reset DS1216E comparison register with READ A2=1
|
||||
ldy #7 Read 8 bytes...
|
||||
|
||||
.1 lda DS1216E.PATTERN,y
|
||||
phy
|
||||
ldy #8 ....of 8 bits
|
||||
ldx #8 Read 8 bytes...
|
||||
|
||||
.2 ldx #0
|
||||
lsr
|
||||
bcc .3
|
||||
inx
|
||||
.1 ldy #8 ....of 8 bits
|
||||
|
||||
.3 bit $C300,x Write Pattern bit in A0, with A2=0
|
||||
dey
|
||||
lda DS1216E.PATTERN-1,x
|
||||
|
||||
.2 lsr
|
||||
bcs .3
|
||||
|
||||
bit $C300
|
||||
bra .30
|
||||
|
||||
.3 bit $C301 Write Pattern bit in A0, with A2=0
|
||||
|
||||
.30 dey
|
||||
bne .2
|
||||
|
||||
ply
|
||||
dey
|
||||
bpl .1
|
||||
dex
|
||||
bne .1
|
||||
|
||||
ldx #7
|
||||
ldx #8
|
||||
|
||||
.4 ldy #8
|
||||
|
||||
.5 lda $C304 Read Byte...
|
||||
.5 pha
|
||||
lda $C304 Read Byte...
|
||||
|
||||
lsr
|
||||
ror DS1216E.DATA,x
|
||||
pla
|
||||
ror
|
||||
|
||||
dey
|
||||
bne .5
|
||||
|
||||
lda DS1216E.DATA,x
|
||||
pha
|
||||
lsr
|
||||
lsr
|
||||
@ -55,16 +68,14 @@ NCLK.START php
|
||||
|
||||
.6 adc #$0A
|
||||
dey
|
||||
bpl .6
|
||||
bpl .6
|
||||
|
||||
sta DS1216E.DATA,x
|
||||
sta DS1216E.DATA-1,x
|
||||
dex
|
||||
bpl .4
|
||||
|
||||
lda DS1216E.DATA+4 Get HH
|
||||
sta TIMELO+1
|
||||
lda DS1216E.DATA+5 Get mm
|
||||
sta TIMELO
|
||||
bne .4
|
||||
|
||||
pha DS1216E.DATA
|
||||
|
||||
lda DS1216E.DATA+1 Get MM
|
||||
asl
|
||||
asl
|
||||
@ -73,17 +84,38 @@ NCLK.START php
|
||||
asl
|
||||
ora DS1216E.DATA+2 Get DD
|
||||
sta DATELO
|
||||
lda DS1216E.DATA Get YY
|
||||
rol
|
||||
sta DATELO+1
|
||||
|
||||
* lda DS1216E.DATA Get YY
|
||||
|
||||
pla
|
||||
rol
|
||||
sta DATELO+1
|
||||
|
||||
lda DS1216E.DATA+5 Get mm
|
||||
sta TIMELO
|
||||
|
||||
lda DS1216E.DATA+4 Get HH
|
||||
sta TIMELO+1
|
||||
|
||||
plp
|
||||
bmi .8
|
||||
|
||||
sta CLRC3ROM
|
||||
|
||||
.8 plp
|
||||
rts
|
||||
*--------------------------------------
|
||||
DS1216E.PATTERN .HS 5CA33AC55CA33AC5 Reverted 7->0
|
||||
DS1216E.DATA .BS 8 Reverted YY MM DD Day HH mm SS CS
|
||||
*--------------------------------------
|
||||
.LIST ON
|
||||
NCLK.LEN .EQ *-NCLK.START
|
||||
.LIST OFF
|
||||
*--------------------------------------
|
||||
* CONTROL SECTION :
|
||||
*--------------------------------------
|
||||
.DO NCLK.LEN>125
|
||||
ERROR:NCLK Driver too big
|
||||
.FIN
|
||||
*--------------------------------------
|
||||
MAN
|
||||
SAVE usr/src/prodos.fx/prodos.s.nclk
|
||||
|
177
SYS/KM.NSC.S.txt
177
SYS/KM.NSC.S.txt
@ -19,7 +19,7 @@ NSC.Init >LDYAI NSC.MSG0
|
||||
lda MACHID
|
||||
and #MACHID.CLK Clock already installed ?
|
||||
beq .1
|
||||
|
||||
|
||||
>LDYAI NSC.MSG1
|
||||
jmp NSC.Print
|
||||
.1 jsr NSC.Detect
|
||||
@ -39,60 +39,85 @@ NSC.Init >LDYAI NSC.MSG0
|
||||
DS1216E.DATA1 .EQ $10
|
||||
DS1216E.DATA2 .EQ $18
|
||||
*--------------------------------------
|
||||
NSC.Detect php
|
||||
NSC.Detect lda RDC3ROM
|
||||
|
||||
php
|
||||
sei
|
||||
lda $CFFF
|
||||
pha
|
||||
|
||||
sta CLRC8ROM Make cards release $C8xx space
|
||||
sta SETC3ROM
|
||||
|
||||
sta $C300
|
||||
|
||||
ldx #7
|
||||
|
||||
.1 ldy #8
|
||||
|
||||
.2 lda $C304
|
||||
lsr
|
||||
ror DS1216E.DATA1,x
|
||||
dey
|
||||
bne .2
|
||||
|
||||
dex
|
||||
bpl .1
|
||||
|
||||
lda $C304 Reset DS1216E comparison register with READ A2=1
|
||||
ldx #7 Read 8 bytes...
|
||||
.3 lda DS1216E.PATTERN,x
|
||||
phx
|
||||
ldx #8 ....of 8 bits
|
||||
.4 ldy #0
|
||||
|
||||
ldy #7 Read 8 bytes...
|
||||
|
||||
.3 lda DS1216E.PATTERN,y
|
||||
phy
|
||||
|
||||
ldy #8 ....of 8 bits
|
||||
|
||||
.4 ldx #0
|
||||
|
||||
lsr
|
||||
bcc .5
|
||||
iny
|
||||
.5 pha
|
||||
lda $C300,y Write Pattern bit in A0, with A2=0
|
||||
pla
|
||||
dex
|
||||
bne .4
|
||||
plx
|
||||
dex
|
||||
bpl .3
|
||||
ldx #7
|
||||
.6 ldy #8
|
||||
.7 lda $C304
|
||||
lsr
|
||||
ror DS1216E.DATA2,x
|
||||
|
||||
inx
|
||||
|
||||
.5 bit $C300,x Write Pattern bit in A0, with A2=0
|
||||
dey
|
||||
bne .7
|
||||
dex
|
||||
bpl .6
|
||||
pla
|
||||
bmi .8
|
||||
sta $CFFF
|
||||
.8 plp
|
||||
bne .4
|
||||
|
||||
ply
|
||||
dey
|
||||
bpl .3
|
||||
|
||||
ldx #7
|
||||
|
||||
.6 ldy #8
|
||||
|
||||
.7 lda $C304
|
||||
|
||||
lsr
|
||||
ror DS1216E.DATA2,x
|
||||
|
||||
dey
|
||||
bne .7
|
||||
|
||||
dex
|
||||
bpl .6
|
||||
|
||||
plp
|
||||
bmi .8
|
||||
|
||||
sta CLRC3ROM
|
||||
|
||||
.8 ldx #7
|
||||
|
||||
.81 lda DS1216E.DATA1,x
|
||||
cmp DS1216E.DATA2,x
|
||||
bne .9
|
||||
|
||||
dex
|
||||
bpl .81
|
||||
|
||||
sec
|
||||
rts
|
||||
|
||||
.9 clc
|
||||
rts
|
||||
*--------------------------------------
|
||||
@ -110,6 +135,7 @@ NSC.Install lda DATETIME+1
|
||||
|
||||
.1 lda NSCDRV.RELOC,x
|
||||
beq .2
|
||||
|
||||
sta TmpPtr2
|
||||
inx
|
||||
lda NSCDRV.RELOC,x
|
||||
@ -123,6 +149,7 @@ NSC.Install lda DATETIME+1
|
||||
sta (TmpPtr2),y
|
||||
inx
|
||||
bne .1
|
||||
|
||||
.2 lda RRAMWRAMBNK1
|
||||
lda RRAMWRAMBNK1
|
||||
.3 ldy #NSCDRV.SIZE-1 always < 128
|
||||
@ -130,22 +157,22 @@ NSC.Install lda DATETIME+1
|
||||
.7 lda NSCDRV.B.START,y
|
||||
sta (TmpPtr1),y
|
||||
dey
|
||||
bpl .7
|
||||
|
||||
bpl .7
|
||||
|
||||
lda RROMBNK1
|
||||
lda #$4C
|
||||
sta DATETIME
|
||||
rts
|
||||
*--------------------------------------
|
||||
NSCDRV.RELOC .DA NSCDRV.R1+1
|
||||
.DA NSCDRV.R2+1
|
||||
.DA NSCDRV.R3+1
|
||||
* .DA NSCDRV.R2+1
|
||||
* .DA NSCDRV.R3+1
|
||||
.DA NSCDRV.R4+1
|
||||
.DA NSCDRV.R5+1
|
||||
.DA NSCDRV.R6+1
|
||||
.DA NSCDRV.R7+1
|
||||
.DA NSCDRV.R8+1
|
||||
.DA NSCDRV.R9+1
|
||||
* .DA NSCDRV.R9+1
|
||||
.DA #0
|
||||
*--------------------------------------
|
||||
NSC.Print sty TmpPtr1
|
||||
@ -166,45 +193,56 @@ NSC.MSG2 .AZ -"No DS1216E Detected!"
|
||||
NSC.MSG3 .AZ -"DS1216E Driver Successfully Installed."
|
||||
*--------------------------------------
|
||||
* Driver For DS1216E
|
||||
DS1216E.DATA .EQ $200 Reverted YY MM DD Day HH mm SS CS
|
||||
*--------------------------------------
|
||||
NSCDRV.B.START .EQ *
|
||||
NSCDRV php
|
||||
sei
|
||||
sta $CFFF Make cards release $C8xx space
|
||||
|
||||
lda RDC3ROM
|
||||
php
|
||||
|
||||
* sta CLRC8ROM Make cards release $C8xx space
|
||||
sta SETC3ROM
|
||||
|
||||
sta $C300
|
||||
lda $C304 Reset DS1216E comparison register with READ A2=1
|
||||
ldy #7 Read 8 bytes...
|
||||
|
||||
NSCDRV.1
|
||||
NSCDRV.R1 lda DS1216E.PATTERN,y
|
||||
ldx #8 Read 8 bytes...
|
||||
|
||||
NSCDRV.1 ldy #8 ....of 8 bits
|
||||
|
||||
NSCDRV.R1 lda DS1216E.PATTERN-1,y
|
||||
phy
|
||||
ldy #8 ....of 8 bits
|
||||
|
||||
NSCDRV.2 ldx #0
|
||||
lsr
|
||||
bcc NSCDRV.21
|
||||
inx
|
||||
|
||||
NSCDRV.2 lsr
|
||||
bcs NSCDRV.21
|
||||
|
||||
NSCDRV.21 bit $C300,x Write Pattern bit in A0, with A2=0
|
||||
dey
|
||||
NSCDRV.20 bit $C300
|
||||
bra NSCDRV.22
|
||||
|
||||
NSCDRV.21 bit $C301 Write Pattern bit in A0, with A2=0
|
||||
|
||||
NSCDRV.22 dey
|
||||
bne NSCDRV.2
|
||||
|
||||
ply
|
||||
dey
|
||||
bpl NSCDRV.1
|
||||
bne NSCDRV.1
|
||||
|
||||
ldx #7
|
||||
ldx #8
|
||||
|
||||
NSCDRV.4 ldy #8
|
||||
NSCDRV.5 lda $C304 Read Byte...
|
||||
|
||||
NSCDRV.5 pha
|
||||
lda $C304 Read Byte...
|
||||
|
||||
lsr
|
||||
NSCDRV.R2 ror DS1216E.DATA,x
|
||||
ror
|
||||
|
||||
dey
|
||||
bne NSCDRV.5
|
||||
|
||||
NSCDRV.R3 lda DS1216E.DATA,x
|
||||
pha
|
||||
lsr
|
||||
lsr
|
||||
@ -220,15 +258,14 @@ NSCDRV.R3 lda DS1216E.DATA,x
|
||||
|
||||
NSCDRV.6 adc #$0A
|
||||
dey
|
||||
bpl NSCDRV.6
|
||||
bpl NSCDRV.6
|
||||
|
||||
NSCDRV.R4 sta DS1216E.DATA,x
|
||||
NSCDRV.R4 sta DS1216E.DATA-1,x
|
||||
dex
|
||||
bpl NSCDRV.4
|
||||
NSCDRV.R5 lda DS1216E.DATA+4 Get HH
|
||||
sta TIMELO+1
|
||||
NSCDRV.R6 lda DS1216E.DATA+5 Get mm
|
||||
sta TIMELO
|
||||
bne NSCDRV.4
|
||||
|
||||
pha
|
||||
|
||||
NSCDRV.R7 lda DS1216E.DATA+1 Get MM
|
||||
asl
|
||||
asl
|
||||
@ -237,15 +274,27 @@ NSCDRV.R7 lda DS1216E.DATA+1 Get MM
|
||||
asl
|
||||
NSCDRV.R8 ora DS1216E.DATA+2 Get DD
|
||||
sta DATELO
|
||||
NSCDRV.R9 lda DS1216E.DATA Get YY
|
||||
rol
|
||||
sta DATELO+1
|
||||
|
||||
* NSCDRV.R9 lda DS1216E.DATA Get YY
|
||||
|
||||
pla
|
||||
rol
|
||||
sta DATELO+1
|
||||
|
||||
NSCDRV.R5 lda DS1216E.DATA+4 Get HH
|
||||
sta TIMELO+1
|
||||
NSCDRV.R6 lda DS1216E.DATA+5 Get mm
|
||||
sta TIMELO
|
||||
|
||||
plp
|
||||
bmi .8
|
||||
|
||||
sta CLRC3ROM
|
||||
|
||||
.8 plp
|
||||
rts
|
||||
*--------------------------------------
|
||||
DS1216E.PATTERN .HS 5CA33AC55CA33AC5 Reverted 7->0
|
||||
DS1216E.DATA .BS 8 Reverted YY MM DD Day HH mm SS CS
|
||||
*--------------------------------------
|
||||
.LIST ON
|
||||
NSCDRV.SIZE .EQ *-NSCDRV.B.START
|
||||
@ -254,7 +303,7 @@ NSCDRV.SIZE .EQ *-NSCDRV.B.START
|
||||
* CONTROL SECTION :
|
||||
*--------------------------------------
|
||||
.DO NSCDRV.SIZE>125
|
||||
* ERROR:NSCDRV.SIZE too big
|
||||
ERROR:NSCDRV.SIZE too big
|
||||
.FIN
|
||||
*--------------------------------------
|
||||
MAN
|
||||
|
Loading…
x
Reference in New Issue
Block a user