diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index d28c3d82..5cf58cb6 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/BIN/CSH.D.txt b/BIN/CSH.D.txt index d89b4348..f45a0cc0 100644 --- a/BIN/CSH.D.txt +++ b/BIN/CSH.D.txt @@ -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 diff --git a/BIN/CSH.I.txt b/BIN/CSH.I.txt index ddfc8dc0..d0cd674a 100644 --- a/BIN/CSH.I.txt +++ b/BIN/CSH.I.txt @@ -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" diff --git a/BIN/CSH.S.CORE.txt b/BIN/CSH.S.CORE.txt index 0c0f4897..d17db349 100644 --- a/BIN/CSH.S.CORE.txt +++ b/BIN/CSH.S.CORE.txt @@ -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 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 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 diff --git a/BIN/CSH.S.txt b/BIN/CSH.S.txt index 2846c0c5..ca936d1e 100644 --- a/BIN/CSH.S.txt +++ b/BIN/CSH.S.txt @@ -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 '-' diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 26bd428e..fb400b55 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -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