Kernel 0.92+

This commit is contained in:
Rémy GIBERT 2019-02-13 16:20:44 +00:00
parent 673b0f0873
commit 585972348f
6 changed files with 254 additions and 159 deletions

Binary file not shown.

View File

@ -10,6 +10,9 @@ CSH.BufPtrSave .BS 2
CSH.hSymbols .BS 1 CSH.hSymbols .BS 1
CSH.SymbolsPtr .BS 1 CSH.SymbolsPtr .BS 1
CSH.hConst .BS 1
CSH.ConstPtr .BS 1
CSH.hData .BS 1 CSH.hData .BS 1
CSH.DataPtr .BS 1 CSH.DataPtr .BS 1

View File

@ -84,15 +84,17 @@ CSH.TSIZE .HS 0001020401020405 00,CHAR,INT,LONG,UCHAR,UINT,ULONG,FLOAT....
* int printf ( const char * format, ... ); * int printf ( const char * format, ... );
CSH.FN >PSTR "printf" CSH.FN >PSTR "printf"
.DA #CSH.T.INT returned value .DA #CSH.T.INT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER1 .DA #CSH.Q.CONST
.DA #CSH.T.CHAR .DA #CSH.T.CHAR
.DA #CSH.Q.POINTER
.DA #CSH.T.VARIADIC .DA #CSH.T.VARIADIC
.DA #0 .DA #0
* int puts ( const char * str ); * int puts ( const char * str );
>PSTR "puts" >PSTR "puts"
.DA #CSH.T.INT returned value .DA #CSH.T.INT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER1 .DA #CSH.Q.CONST
.DA #CSH.T.CHAR .DA #CSH.T.CHAR
.DA #CSH.Q.POINTER
.DA #0 .DA #0
* float cos ( float x ); * float cos ( float x );
>PSTR "cos" >PSTR "cos"

View File

@ -3,11 +3,8 @@ PREFIX
AUTO 4,1 AUTO 4,1
.LIST OFF .LIST OFF
*-------------------------------------- *--------------------------------------
CSH.Q.CONST .EQ %11000000 CSH.Q.CONST .EQ %10000000
CSH.Q.ARRAY .EQ %10001100 max 3 bounds CSH.Q.POINTER .EQ %10000001
CSH.Q.POINTER1 .EQ %10000001 max 3 depth
CSH.Q.POINTER2 .EQ %10000010
CSH.Q.POINTER3 .EQ %10000011
CSH.T.CHAR .EQ 1 CSH.T.CHAR .EQ 1
CSH.T.INT .EQ 2 CSH.T.INT .EQ 2
CSH.T.LONG .EQ 3 CSH.T.LONG .EQ 3
@ -17,34 +14,44 @@ CSH.T.ULONG .EQ 6
CSH.T.FLOAT .EQ 7 CSH.T.FLOAT .EQ 7
CSH.T.VARIADIC .EQ $F CSH.T.VARIADIC .EQ $F
*-------------------------------------- *--------------------------------------
CSH.Init lda #$0 CSH.Init >LDYAI 256
>SYSCALL GetMem0
bcs .9
>STYA ZPCSHSymbols
txa
>STA.G CSH.hSymbols
>LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPCSHConst
txa
>STA.G CSH.hConst
>LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPCSHData
txa
>STA.G CSH.hData
>LDYAI 256
>SYSCALL GetMem
bcs .9
>STYA ZPCSHStack
txa
>STA.G CSH.hStack
lda #$0
>STA.G CSH.SymbolsPtr >STA.G CSH.SymbolsPtr
>STA.G CSH.ConstPtr
>STA.G CSH.DataPtr >STA.G CSH.DataPtr
>STA.G CSH.StackPtr >STA.G CSH.StackPtr
>LDYAI 256 sta (ZPCSHSymbols)
>SYSCALL GetMem0 sta (ZPCSHConst)
bcs .9 sta (ZPCSHData)
txa sta (ZPCSHStack)
>STA.G CSH.hSymbols
>SYSCALL GetMemPtr
>STYA ZPCSHSymbols
>LDYAI 256
>SYSCALL GetMem
bcs .9
txa
>STA.G CSH.hData
>SYSCALL GetMemPtr
>STYA ZPCSHData
>LDYAI 256
>SYSCALL GetMem
bcs .9
txa
>STA.G CSH.hStack
>SYSCALL GetMemPtr
>STYA ZPCSHStack
* clc * clc
.9 rts .9 rts
@ -62,13 +69,13 @@ CSH.Quit >LDA.G hFileBuf
>SYSCALL FreeMem >SYSCALL FreeMem
.3 >LDA.G CSH.hSymbols .3 >LDA.G CSH.hSymbols
beq .8 beq CSH.Quit.RTS
>SYSCALL FreeMem >SYSCALL FreeMem
.8 rts CSH.Quit.RTS rts
*-------------------------------------- *--------------------------------------
CSH.Run jsr CSH.GetCharNB CSH.Run jsr CSH.GetCharNB
bcs .9 bcs CSH.Quit.RTS
cmp #'}' End of block ? cmp #'}' End of block ?
bne .1 bne .1
@ -107,9 +114,8 @@ CSH.Run jsr CSH.GetCharNB
jmp (J.CSH.KW,x) jmp (J.CSH.KW,x)
.4 jsr CSH.GetVar .4 jsr CSH.GetVar
bcs .9 bcs .5
jsr CSH.GetCharNB jsr CSH.GetCharNB
bcs .9 bcs .9
cmp #'=' cmp #'='
@ -130,6 +136,16 @@ CSH.Run jsr CSH.GetCharNB
jmp CSH.GetNextCharNB Skip ; jmp CSH.GetNextCharNB Skip ;
.5 >LDYA L.CSH.FN
jsr CSH.LookupFn
bcs .99
>STZ.G CSH.ACCT no retrun value type check required
jsr CSH.FnEval
bcs .9
jmp CSH.GetNextCharNB Skip ;
.99 lda #CSH.E.SYNTAX .99 lda #CSH.E.SYNTAX
sec sec
.9 rts .9 rts
@ -349,23 +365,165 @@ CSH.TYPE >STA.G CSH.ACCT
sec sec
.99 rts .99 rts
*-------------------------------------- *--------------------------------------
CSH.FnEval >STYA ZPFnDefPtr CSH.ExpEval jsr CSH.ZeroACC
.10 lda #$ff
>STA.G CSH.EXPBOP1 Reset BOP1
jsr CSH.GetCharNB jsr CSH.GetCharNB
bcs .9
jsr CSH.IsLetter Fnc or Var ?
bcs .2
jsr CSH.GetVar
bcs .1
jsr CSH.LoadACCFromVar
bcs .9
bra .11
.1 >LDYA L.CSH.FN
jsr CSH.LookupFn
bcs .9
jsr CSH.FnEval
bcs .99
bra .11
.2 jsr CSH.IsDigit10 number ?
bcs .3
jsr CSH.GetNumInACC
bcs .9
.11 jsr CSH.GetCharNB
bcs .9
cmp #')'
beq .8
cmp #';'
beq .8
jsr CSH.IsOPChar
bcs .9
>LDYA L.CSH.BOPS
jsr CSH.LookupOP
bcs .9
>LDA.G CSH.EXPBOP1 previous OP...
bpl .5 go check precedence
txa
>STA.G CSH.EXPBOP1
jsr CSH.ACC2ARG
jsr CSH.GetCharNB
bcc .10 go check for an ARG
bra .9
.3 >DEBUG
cmp #'"' String litteral
bne .9
jsr CSH.AddContCharP
bcs .99
jmp .11
.9 lda #CSH.E.SYNTAX
sec
.99 rts
.5 txa
>STA.G CSH.EXPBOP2
>CMP.G CSH.EXPBOP1
bcs .6
* new OP has precedence, stack ACC
jmp .10
* Old OP has precedence, compute ACC=ARG <BOP> ACC
.6 >LDA.G CSH.EXPBOP1
jsr CSH.Compute
bcs .9
jsr CSH.GetCharNB
bcs .9
jmp .10
.8 >LDA.G CSH.EXPBOP1
bmi .80
jmp CSH.Compute
.80 clc
rts
*--------------------------------------
CSH.AddContCharP
ldy #0
.1 jsr CSH.GetNextChar
bcs .9
cmp #C.CR
beq .9
cmp #'"'
beq .2
sta (ZPCSHConst),y
iny
bra .1
.2 lda #0
sta (ZPCSHConst),y
lda ZPCSHConst
pha
lda ZPCSHConst+1
pha
tya
sec
adc ZPCSHConst
sta ZPCSHConst
bcc .3
inc ZPCSHConst+1
.3 pla
ply
clc
rts
.9 lda #CSH.E.SYNTAX
sec
rts
*--------------------------------------
CSH.FnEval jsr CSH.GetCharNB
bcs .9 bcs .9
cmp #'(' cmp #'('
bne .9 bne .9
lda (ZPFnDefPtr) Get Return value Type >LDA.G CSH.ACCT Match with ACC ?
>CMP.G CSH.ACCT Match with ACC ? beq .10 ACC is VOID
cmp (ZPFnDefPtr) Get Return value Type
bne .99 bne .99
jsr CSH.GetNextCharNB skip '(' .10 jsr CSH.GetNextCharNB skip '('
bcs .9 bcs .9
jsr CSH.PushACCT Save Acc & T on stack jsr CSH.PushACCT Save Acc & T on stack
.1 inc ZPFnDefPtr advance to arg list type .1 inc ZPFnDefPtr advance to arg list type
bne .2 bne .2
inc ZPFnDefPtr+1 inc ZPFnDefPtr+1
@ -384,10 +542,10 @@ CSH.FnEval >STYA ZPFnDefPtr
.3 >CMP.G CSH.ACCT Match with ACC ? .3 >CMP.G CSH.ACCT Match with ACC ?
bne .99 bne .99
inc ZPFnDefPtr advance to next arg inc ZPFnDefPtr advance to next arg
bne .4 bne .4
inc ZPFnDefPtr+1 inc ZPFnDefPtr+1
.4 lda (ZPFnDefPtr) no more arg in fn definition .4 lda (ZPFnDefPtr) no more arg in fn definition
beq .7 beq .7
jsr CSH.GetNextCharNB jsr CSH.GetNextCharNB
@ -419,94 +577,6 @@ CSH.FnEval >STYA ZPFnDefPtr
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CSH.ExpEval jsr CSH.ZeroACC
.10 lda #$ff
>STA.G CSH.EXPBOP1 Reset BOP1
jsr CSH.GetCharNB
bcs .9
jsr CSH.IsLetter Fnc or Var ?
bcs .2
jsr CSH.GetVar
bcs .1
jsr CSH.LoadACCFromVar
bcs .9
bra .11
.1 >LDYA L.CSH.FN
jsr CSH.LookupFn
bcs .9
>LDYA ZPPtr1
jsr CSH.FnEval
bcs .99
bra .11
.2 jsr CSH.IsDigit10 number ?
bcs .9
jsr CSH.GetNumInACC
bcs .9
.11 jsr CSH.GetCharNB
bcs .9
cmp #')'
beq .8
cmp #';'
beq .8
jsr CSH.IsOPChar
bcs .9
>LDYA L.CSH.BOPS
jsr CSH.LookupOP
bcs .9
>LDA.G CSH.EXPBOP1 previous OP...
bpl .5 go check precedence
txa
>STA.G CSH.EXPBOP1
jsr CSH.ACC2ARG
jsr CSH.GetCharNB
bcc .10 go check for an ARG
.9 lda #CSH.E.SYNTAX
sec
.99 rts
.5 txa
>STA.G CSH.EXPBOP2
>CMP.G CSH.EXPBOP1
bcs .3
* new OP has precedence, stack ACC
bra .10
* Old OP has precedence, compute ACC=ARG <BOP> ACC
.3 >LDA.G CSH.EXPBOP1
jsr CSH.Compute
bcs .9
jsr CSH.GetCharNB
bcs .9
jmp .10
.8 >LDA.G CSH.EXPBOP1
bmi .80
jmp CSH.Compute
.80 clc
rts
*--------------------------------------
CSH.SavePtr >LDYA ZPFileBufPtr CSH.SavePtr >LDYA ZPFileBufPtr
>STYA.G CSH.BufPtrSave >STYA.G CSH.BufPtrSave
rts rts
@ -563,9 +633,10 @@ CSH.Lookup phy Y = len
.31 lda ZPPtr1 .31 lda ZPPtr1
sec sec
adc (ZPPtr1) adc (ZPPtr1)
sta ZPPtr1 sta ZPFnDefPtr
bcc .8 lda ZPPtr1+1
inc ZPPtr1+1 adc #0
inc ZPFnDefPtr+1
clc clc
.8 rts .8 rts
@ -600,6 +671,14 @@ CSH.Lookup phy Y = len
sec sec
rts rts
*-------------------------------------- *--------------------------------------
CSH.ZPPtr1AddAp1
sec
adc ZPPtr1
sta ZPPtr1
bcc .1
inc ZPPtr1+1
.1 rts
*--------------------------------------
CSH.GetNumInACC >LDA.G CSH.ACCT CSH.GetNumInACC >LDA.G CSH.ACCT
cmp #CSH.T.FLOAT cmp #CSH.T.FLOAT
bcc .1 bcc .1

View File

@ -26,6 +26,7 @@ ZPFileBufPtr .BS 2
ZPFnDefPtr .BS 2 ZPFnDefPtr .BS 2
ZPCSHSymbols .BS 2 ZPCSHSymbols .BS 2
ZPCSHConst .BS 2
ZPCSHData .BS 2 ZPCSHData .BS 2
ZPCSHValue .BS 2 ZPCSHValue .BS 2
ZPCSHStack .BS 2 ZPCSHStack .BS 2
@ -129,7 +130,8 @@ CS.QUIT jsr CSH.Quit
PrintErrMsg >LDYA ZPFileBuf PrintErrMsg >LDYA ZPFileBuf
>STYA ZPPtr1 >STYA ZPPtr1
stz ZPPtr3 lda #1
sta ZPPtr3
stz ZPPtr3+1 stz ZPPtr3+1
.1 >LDYA ZPPtr1 .1 >LDYA ZPPtr1
@ -154,13 +156,14 @@ PrintErrMsg >LDYA ZPFileBuf
sbc ZPFileBufPtr+1 sbc ZPFileBufPtr+1
bcc .1 not this line.... bcc .1 not this line....
.4 ldy #0 ldy #$ff
.5 lda (ZPPtr2),y .5 iny
lda (ZPPtr2),y
beq .6 beq .6
iny
cmp #C.CR cmp #C.CR
beq .6 beq .6
phy phy
>PUSHA >PUSHA
ldy #S.PS.hStdErr ldy #S.PS.hStdErr
@ -169,17 +172,14 @@ PrintErrMsg >LDYA ZPFileBuf
ply ply
bra .5 bra .5
.6 >PUSHBI 0 .6 phy
>PUSHBI 0
>PUSHW L.MSG.ECHOCRLF >PUSHW L.MSG.ECHOCRLF
ldy #S.PS.hStdErr ldy #S.PS.hStdErr
lda (pPS),y lda (pPS),y
>SYSCALL fprintf >SYSCALL fprintf
ply
lda ZPFileBufPtr
sec
sbc ZPPtr2
beq .8 beq .8
tay
.7 phy .7 phy
>PUSHBI '-' >PUSHBI '-'

View File

@ -886,17 +886,27 @@ DevMgrInit >LDYAI MSG.DEV
ldy #7 ldy #7
lda (ZPPtr1),y lda (ZPPtr1),y
bne .6 $Cn07=00 : SmartPort beq .51 $Cn07=00 : SmartPort
bne .6
lda ZPPtr1 get $Cn ldx #AWSmartPort.SIG-AWSmartPort.OFS-1
.50 ldy AWSmartPort.OFS,x Check if there is a AWsmartport firmware
lda (ZPPtr1),y
cmp AWSmartPort.SIG,x
bne .6 not on AW
dex
bpl .50
.51 lda ZPPtr1+1 get $Cn
and #$f get $0n and #$f get $0n
cmp FD.BDEV+S.FD.DEV.DEVID same as SSS ? cmp FD.BDEV+S.FD.DEV.BUSID same as SSS ?
beq .51 beq .52
inc FD.BDEV+S.FD.DEV.DEVID Remapped SP devices.... inc FD.BDEV+S.FD.DEV.DEVID Remapped SP devices....
inc FD.BDEV+S.FD.DEV.DEVID Add 2 to DEVID (2 & 3) inc FD.BDEV+S.FD.DEV.DEVID Add 2 to DEVID (2 & 3)
.51 jsr DevMgrInit.SP .52 jsr DevMgrInit.SP
lda #A2osX.S.SP lda #A2osX.S.SP
bra .7 bra .7
@ -941,14 +951,14 @@ DevMgrInit.SP ldy #$ff
sta .1+2 sta .1+2
lda FD.BDEV+S.FD.DEV.DEVID lda FD.BDEV+S.FD.DEV.DEVID
sta SP.DEV.STATUS.DEVID sta SP.IOCTL.STATUS+S.IOCTL.UNITNUM
.1 jsr $ffff Self Modified .1 jsr $ffff Self Modified
.DA #0 Status .DA #0 Status
.DA SP.DEV.STATUS .DA SP.IOCTL.STATUS
bcs .9 bcs .9
ldx SP.DEV.STATUS.DATA+S.DIB.S ldx SP.IOCTL.STATUS.DIB+S.DIB.S
>LDYAI DRV.SmartPort >LDYAI DRV.SmartPort
jsr DevMgrInit.AddBDev jsr DevMgrInit.AddBDev
@ -1184,13 +1194,14 @@ FD.BDEV.NAME .AZ "S1D1"
*-------------------------------------- *--------------------------------------
SmartPort.OFS .HS 010305 SmartPort.OFS .HS 010305
SmartPort.SIG .HS 200003 SmartPort.SIG .HS 200003
AWSmartPort.OFS .HS 12131415161718191A1B
AWSmartPort.SIG .HS A9008DF2C0A9708DF3C0
*-------------------------------------- *--------------------------------------
SP.DEV.STATUS .DA #3 SP.IOCTL.STATUS .DA #3
SP.DEV.STATUS.DEVID .BS 1 UNITNUM
.BS 1 .DA SP.IOCTL.STATUS.DIB
.DA SP.DEV.STATUS.DATA .DA #S.IOCTL.STATCODE.GETDIB
.DA S.IOCTL.STATCODE.GETDIB SP.IOCTL.STATUS.DIB
SP.DEV.STATUS.DATA
.BS S.DIB .BS S.DIB
*-------------------------------------- *--------------------------------------
MAN MAN