Kernel 0.94++

This commit is contained in:
Rémy GIBERT 2021-05-30 22:34:03 +02:00
parent 988a14bf42
commit 6959200abf
18 changed files with 1332 additions and 709 deletions

Binary file not shown.

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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
*--------------------------------------

View File

@ -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

View File

@ -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

View File

@ -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
View 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

View File

@ -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*,...);

View File

@ -1,6 +1,9 @@
NEW
AUTO 3,1
// void* malloc(int);
// void free(void*);
float strtof(const char*,char**);
float atof(const char*);

View File

@ -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 *);

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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