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.SymbolsPtr .BS 1
CSH.hConst .BS 1
CSH.ConstPtr .BS 1
CSH.hData .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, ... );
CSH.FN >PSTR "printf"
.DA #CSH.T.INT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER1
.DA #CSH.Q.CONST
.DA #CSH.T.CHAR
.DA #CSH.Q.POINTER
.DA #CSH.T.VARIADIC
.DA #0
* int puts ( const char * str );
>PSTR "puts"
.DA #CSH.T.INT returned value
.DA #CSH.Q.CONST+CSH.Q.POINTER1
.DA #CSH.Q.CONST
.DA #CSH.T.CHAR
.DA #CSH.Q.POINTER
.DA #0
* float cos ( float x );
>PSTR "cos"

View File

@ -3,11 +3,8 @@ PREFIX
AUTO 4,1
.LIST OFF
*--------------------------------------
CSH.Q.CONST .EQ %11000000
CSH.Q.ARRAY .EQ %10001100 max 3 bounds
CSH.Q.POINTER1 .EQ %10000001 max 3 depth
CSH.Q.POINTER2 .EQ %10000010
CSH.Q.POINTER3 .EQ %10000011
CSH.Q.CONST .EQ %10000000
CSH.Q.POINTER .EQ %10000001
CSH.T.CHAR .EQ 1
CSH.T.INT .EQ 2
CSH.T.LONG .EQ 3
@ -17,34 +14,44 @@ CSH.T.ULONG .EQ 6
CSH.T.FLOAT .EQ 7
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.ConstPtr
>STA.G CSH.DataPtr
>STA.G CSH.StackPtr
>LDYAI 256
>SYSCALL GetMem0
bcs .9
txa
>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
sta (ZPCSHSymbols)
sta (ZPCSHConst)
sta (ZPCSHData)
sta (ZPCSHStack)
* clc
.9 rts
@ -62,13 +69,13 @@ CSH.Quit >LDA.G hFileBuf
>SYSCALL FreeMem
.3 >LDA.G CSH.hSymbols
beq .8
beq CSH.Quit.RTS
>SYSCALL FreeMem
.8 rts
CSH.Quit.RTS rts
*--------------------------------------
CSH.Run jsr CSH.GetCharNB
bcs .9
bcs CSH.Quit.RTS
cmp #'}' End of block ?
bne .1
@ -107,9 +114,8 @@ CSH.Run jsr CSH.GetCharNB
jmp (J.CSH.KW,x)
.4 jsr CSH.GetVar
bcs .9
bcs .5
jsr CSH.GetCharNB
bcs .9
cmp #'='
@ -130,6 +136,16 @@ CSH.Run jsr CSH.GetCharNB
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
sec
.9 rts
@ -349,23 +365,165 @@ CSH.TYPE >STA.G CSH.ACCT
sec
.99 rts
*--------------------------------------
CSH.FnEval >STYA ZPFnDefPtr
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
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
cmp #'('
bne .9
lda (ZPFnDefPtr) Get Return value Type
>CMP.G CSH.ACCT Match with ACC ?
>LDA.G CSH.ACCT Match with ACC ?
beq .10 ACC is VOID
cmp (ZPFnDefPtr) Get Return value Type
bne .99
jsr CSH.GetNextCharNB skip '('
.10 jsr CSH.GetNextCharNB skip '('
bcs .9
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
inc ZPFnDefPtr+1
@ -384,10 +542,10 @@ CSH.FnEval >STYA ZPFnDefPtr
.3 >CMP.G CSH.ACCT Match with ACC ?
bne .99
inc ZPFnDefPtr advance to next arg
inc ZPFnDefPtr advance to next arg
bne .4
inc ZPFnDefPtr+1
.4 lda (ZPFnDefPtr) no more arg in fn definition
.4 lda (ZPFnDefPtr) no more arg in fn definition
beq .7
jsr CSH.GetNextCharNB
@ -419,94 +577,6 @@ CSH.FnEval >STYA ZPFnDefPtr
sec
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
>STYA.G CSH.BufPtrSave
rts
@ -563,9 +633,10 @@ CSH.Lookup phy Y = len
.31 lda ZPPtr1
sec
adc (ZPPtr1)
sta ZPPtr1
bcc .8
inc ZPPtr1+1
sta ZPFnDefPtr
lda ZPPtr1+1
adc #0
inc ZPFnDefPtr+1
clc
.8 rts
@ -600,6 +671,14 @@ CSH.Lookup phy Y = len
sec
rts
*--------------------------------------
CSH.ZPPtr1AddAp1
sec
adc ZPPtr1
sta ZPPtr1
bcc .1
inc ZPPtr1+1
.1 rts
*--------------------------------------
CSH.GetNumInACC >LDA.G CSH.ACCT
cmp #CSH.T.FLOAT
bcc .1

View File

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

View File

@ -886,17 +886,27 @@ DevMgrInit >LDYAI MSG.DEV
ldy #7
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
cmp FD.BDEV+S.FD.DEV.DEVID same as SSS ?
beq .51
cmp FD.BDEV+S.FD.DEV.BUSID same as SSS ?
beq .52
inc FD.BDEV+S.FD.DEV.DEVID Remapped SP devices....
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
bra .7
@ -941,14 +951,14 @@ DevMgrInit.SP ldy #$ff
sta .1+2
lda FD.BDEV+S.FD.DEV.DEVID
sta SP.DEV.STATUS.DEVID
sta SP.IOCTL.STATUS+S.IOCTL.UNITNUM
.1 jsr $ffff Self Modified
.DA #0 Status
.DA SP.DEV.STATUS
.DA SP.IOCTL.STATUS
bcs .9
ldx SP.DEV.STATUS.DATA+S.DIB.S
ldx SP.IOCTL.STATUS.DIB+S.DIB.S
>LDYAI DRV.SmartPort
jsr DevMgrInit.AddBDev
@ -1184,13 +1194,14 @@ FD.BDEV.NAME .AZ "S1D1"
*--------------------------------------
SmartPort.OFS .HS 010305
SmartPort.SIG .HS 200003
AWSmartPort.OFS .HS 12131415161718191A1B
AWSmartPort.SIG .HS A9008DF2C0A9708DF3C0
*--------------------------------------
SP.DEV.STATUS .DA #3
SP.DEV.STATUS.DEVID
.BS 1
.DA SP.DEV.STATUS.DATA
.DA S.IOCTL.STATCODE.GETDIB
SP.DEV.STATUS.DATA
SP.IOCTL.STATUS .DA #3
.BS 1 UNITNUM
.DA SP.IOCTL.STATUS.DIB
.DA #S.IOCTL.STATCODE.GETDIB
SP.IOCTL.STATUS.DIB
.BS S.DIB
*--------------------------------------
MAN