From 3a75661c7c33414b1489644f5007ec0e2cebbfbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Wed, 22 Jan 2020 17:31:48 +0100 Subject: [PATCH] Kernel 0.93++ --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/CSH.I.txt | 8 + BIN/CSH.R.txt | 2 + BIN/CSH.S.CORE.txt | 19 +- BIN/CSH.S.txt | 18 +- BIN/EDIT.S.txt | 15 +- SYS/KERNEL.S.ENVX.txt | 432 +++++++++++++++++++++++++++++++++++++++ 7 files changed, 485 insertions(+), 9 deletions(-) create mode 100644 SYS/KERNEL.S.ENVX.txt diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 5461138fa7b19de4a3cf1d7ab989a5df17792a5d..e723d95efc9924361970bd612db37e9c8ff188d7 100644 GIT binary patch delta 29113 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

yFVY8A?@{|^r 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 "if" >PSTR "case" >PSTR "break" >PSTR "continue" + >PSTR "void" >PSTR "float" >PSTR "signed" char,int,long >PSTR "unsigned" char,int,long @@ -114,6 +116,12 @@ CSH.FN >PSTR "printf" >PSTR "getchar" .DA #CSH.T.CHAR returned value .DA #0 +* void * malloc ( int size ); + >PSTR "malloc" + .DA #CSH.Q.POINTER+CSH.T.VOID returned value + .DA #CSH.T.INT + .DA #0 +*-------------------------------------- .DA #0 *-------------------------------------- MAN diff --git a/BIN/CSH.R.txt b/BIN/CSH.R.txt index ab74df00..0d116c15 100644 --- a/BIN/CSH.R.txt +++ b/BIN/CSH.R.txt @@ -49,6 +49,7 @@ J.CSH.KW .DA CSH.IF .DA CSH.CASE .DA CSH.BREAK .DA CSH.CONTINUE + .DA CSH.VOID .DA CSH.FLOAT .DA CSH.SIGNED .DA CSH.UNSIGNED @@ -67,6 +68,7 @@ J.CSH.EXEC .DA EXEC.printf .DA EXEC.puts .DA EXEC.cos .DA EXEC.getchar + .DA EXEC.malloc *-------------------------------------- MAN SAVE USR/SRC/BIN/CSH.R diff --git a/BIN/CSH.S.CORE.txt b/BIN/CSH.S.CORE.txt index 7fc11848..8bd721d7 100644 --- a/BIN/CSH.S.CORE.txt +++ b/BIN/CSH.S.CORE.txt @@ -237,6 +237,8 @@ CSH.UNSIGNED jsr CSH.GetChar sec rts *-------------------------------------- +CSH.VOID ldx #CSH.T.VOID + bra CSH.TYPE CSH.CHAR ldx #CSH.T.CHAR bra CSH.TYPE CSH.UCHAR ldx #CSH.T.UCHAR @@ -257,10 +259,18 @@ CSH.TYPE stx ZPVarType bcs .9 cmp #C.SPACE bne .9 - jsr CSH.GetNextCharNB + +.11 jsr CSH.GetNextCharNB bcs .9 - jsr CSH.IsLetter + cmp #'*' + bne .10 + + lda #CSH.Q.POINTER + tsb ZPVarType + bra .11 + +.10 jsr CSH.IsLetter bcs .9 jsr CSH.AddVar add with no value... @@ -1155,6 +1165,11 @@ EXEC.getchar >SYSCALL getchar >PUSHA rts *-------------------------------------- +EXEC.malloc >PULLYA + >SYSCALL getmem + >PUSHYA + rts +*-------------------------------------- MAN SAVE USR/SRC/BIN/CSH.S.CORE LOAD USR/SRC/BIN/CSH.S diff --git a/BIN/CSH.S.txt b/BIN/CSH.S.txt index 2c99386a..d8ebd93e 100644 --- a/BIN/CSH.S.txt +++ b/BIN/CSH.S.txt @@ -77,6 +77,7 @@ CS.RUN >PUSHWI K.VER >LDYA L.MSG.GREETINGS >SYSCALL printf bcs CS.INIT.RTS + jsr CS.RUN.ARGS bcs CS.INIT.RTS @@ -102,6 +103,7 @@ CS.RUN >PUSHWI K.VER pla sec rts + .8 lda #0 Exit Code = Success sec rts @@ -116,45 +118,55 @@ CS.RUN.ARGS inc ArgIndex lda (ZPPtr1) cmp #'-' bne .4 + ldy #1 lda (ZPPtr1),y + ldx #OptionVars-OptionList-1 + .1 cmp OptionList,x beq .2 + dex bpl .1 bra .90 + .2 ldy OptionVars,x lda #$ff sta (pData),y bra CS.RUN.ARGS + .4 >LDA.G hFileBuf bne .90 + >PUSHWZ Aux type >PUSHBI S.FI.T.TXT >PUSHBI O.RDONLY >LDYA ZPPtr1 >SYSCALL LoadTxtFile bcs .9 + txa >STA.G hFileBuf >SYSCALL GetMemPtr >STYA ZPFileBuf >STYA ZPFileBufPtr bra CS.RUN.ARGS + .7 >LDA.G hFileBuf beq .90 clc - rts +.9 rts + .90 >PUSHBI 0 >LDYA L.MSG.USAGE >SYSCALL printf + lda #E.SYN sec QUIT Process - -.9 rts + rts *-------------------------------------- CS.DOEVENT sec rts diff --git a/BIN/EDIT.S.txt b/BIN/EDIT.S.txt index 4664b8a8..419234c6 100644 --- a/BIN/EDIT.S.txt +++ b/BIN/EDIT.S.txt @@ -270,7 +270,14 @@ CharIn tax lda (pData) #EscBuffer inc sta (pData) - tay + cmp #32 + bne .10 + >DEBUG + >STZ.G bEscMode + clc + rts + +.10 tay txa sta (pData),y @@ -339,7 +346,7 @@ CharIn.Esc >STZ.G bEscMode .3 stz TmpByte - ldy #EscBuffer+1 + ldy #1 .4 lda (pData),y cmp #';' @@ -401,7 +408,7 @@ CharIn.Esc >STZ.G bEscMode bra .6 .7 lda TmpByte - >STA.G ScreenW + >STA.G ScreenW sec rts @@ -596,7 +603,7 @@ DLG.FIND.LEN .EQ *-DLG.FIND .DUMMY .OR 0 DS.START -EscBuffer .BS 16 +EscBuffer .BS 33 bEscMode .BS 1 bExit .BS 1 diff --git a/SYS/KERNEL.S.ENVX.txt b/SYS/KERNEL.S.ENVX.txt new file mode 100644 index 00000000..502828dc --- /dev/null +++ b/SYS/KERNEL.S.ENVX.txt @@ -0,0 +1,432 @@ +NEW + AUTO 3,1 +*-------------------------------------- +ENVX.PutEnv ldy #$ff + +.1 iny + lda (TXTPTR),y NAME= + beq .9 + + cmp #'=' + bne .1 + + tya + sec skip = + adc TXTPTR + sta FORPNT + + lda #0 + adc TXTPTR+1 + sta FORPNT+1 + + bra K.SetEnv.I + +.9 lda #E.SYN + sec + rts +*-------------------------------------- +ENVX.SetEnv jsr ENVX.UnsetEnv + +.1 jsr ENV.InitEnvP3 ZPPtr3 -> Env (SETREADAUX) + + lda #1 + sta ZPPtr4 + stz ZPPtr4+1 ZPPtr4 = ENVSIZE = 1 + +.10 lda (ZPPtr3) End of ENV + beq .15 + + jsr ENV.GetP3LenY + jsr ENV.NextEnvP3Y + jsr ENV.NextEnvP4Y + bra .10 + +.15 .DO AUXENV=1 + sta CLRREADAUX + .FIN + + ldy #$ff + +.16 iny + lda (TXTPTR),y + beq .17 + + jsr SHARED.IsIDValid + bcc .16 + +.17 jsr ENV.NextEnvP4Y ZPPtr4 = ENVSIZE + VAR + + ldy #$ff + +.19 iny + lda (FORPNT),y + bne .19 + + jsr ENV.NextEnvP4Y ZPPtr4 = ENVSIZE + VALUE + lda ZPPtr4 + beq .20 + + inc ZPPtr4+1 + +.20 ldy #S.PS.ENVPAGECNT + lda (pPs),y + cmp ZPPtr4+1 + bcs .22 env is large enough + + lda ZPPtr4+1 + jsr ENV.Dup.A + bcs .9 + + pha + ldy #S.PS.hENV + lda (pPs),y + + .DO AUXENV=1 + ldx #SYS.FreeStkObj + jsr K.SYSCALL2.AUX + .ELSE + jsr K.Freemem + .FIN + + pla + ldy #S.PS.hENV + sta (pPs),y + txa + dey S.PS.ENVPAGECNT + sta (pPs),y + bra .1 Start over + +.22 ldy #$ff + + .DO AUXENV=1 + sta SETWRITEAUX + .FIN + +.23 iny + lda (TXTPTR),y + sta (ZPPtr3),y + beq .24 + jsr SHARED.IsIDValid + bcc .23 + +.24 lda #'=' + sta (ZPPtr3),y + + jsr ENV.NextEnvP3Y + ldy #$ff + +.25 iny + lda (FORPNT),y + sta (ZPPtr3),y + bne .25 + + iny + sta (ZPPtr3),y don't forget array ending 0 + clc + +.9 .DO AUXENV=1 + sta CLRREADAUX + sta CLRWRITEAUX + .FIN + rts +*-------------------------------------- +ENVX.GetEnv lda TXTPTR + beq K.GetEnvDump + + jsr ENV.FindVar + bcs .9 + + jsr ENV.NextEnvP3Y Skip NAME= + + lda FORPNT+1 + bne .3 + + ldy #$ff + + .DO AUXENV=1 + sta SETREADAUX + .FIN + +.1 iny + lda (ZPPtr3),y + bne .1 + + .DO AUXENV=1 + sta CLRREADAUX + .FIN + + iny + bne .2 + inc + +.2 .DO AUXENV=1 + sta CLRREADAUX + sta CLRWRITEAUX + .FIN + + jsr K.getmem + bcs .99 + + >STYA FORPNT + +.3 .DO AUXENV=1 + sta SETREADAUX + .FIN + + ldy #$ff + +.4 iny + lda (ZPPtr3),y + sta (FORPNT),y + bne .4 + + >LDYA FORPNT + .DO AUXENV=1 + sta CLRREADAUX + .FIN + + clc + rts + +.9 >LDYAI 0 +* sec +.99 rts + +K.GetEnvDump ldy #S.PS.ENVPAGECNT + lda (pPs),y + sta .1+1 + + ldy #0 + jsr K.getmem + bcs .9 + + >STYA FORPNT + sty .80+1 + sta .81+1 + stx .82+1 + + jsr ENV.InitEnvP3 SETREADAUX + +.1 ldx #$ff SELF MODIFIED + + ldy #0 + +.2 lda (ZPPtr3),y + sta (FORPNT),y + iny + bne .2 + + +.80 ldy #$ff SELF MODIFIED +.81 lda #$ff SELF MODIFIED +.82 ldx #$ff SELF MODIFIED + + .DO AUXENV=1 + sta CLRREADAUX + .FIN + + clc +.9 rts +*-------------------------------------- +ENVX.UnsetEnv jsr ENV.FindVar + bcs . 8 not found, quit + + jsr ENV.DelVarP3 Ptr3 -> NAME=VALUE + clc + + rts +*-------------------------------------- +* ENV.FindVar +* In: +* TXTPTR -> NAME +* Out: +* CC: Found +* Y = NAME len +* TXTPTR -> NAME +* ZPPtr3 -> NAME=VALUE +* CS: Not Found +* TXTPTR -> NAME +* ZPPtr3 -> PTR to Ending 0 +*-------------------------------------- +ENVX.FindVar + .DO AUXENV=1 + sta SETREADAUX + sta SETWRITEAUX + .FIN + + jsr ENV.InitEnvP3 Store ENV + +.1 lda (ZPPtr3) + beq .9 end of ENV + + ldy #$ff + +.2 iny + .DO AUXENV=1 + jsr SHARED.TXTPTR.GetY + .ELSE + lda (TXTPTR),y + .FIN + beq .3 + + jsr SHARED.IsIDValid + bcs .3 + + cmp (ZPPtr3),y + beq .2 + + bra .4 + +.3 lda (ZPPtr3),y + cmp #'=' + bne .4 + + .DO AUXENV=1 + sta CLRREADAUX + sta CLRWRITEAUX + .FIN + clc + rts + +.4 jsr ENV.NextEnvP3 Skip NAME=VALUE + bra .1 + +.9 .DO AUXENV=1 + sta CLRREADAUX + sta CLRWRITEAUX + .FIN + sec + rts +*-------------------------------------- +* ENV.DelVarP3 +* In: +* ZPPtr3 -> ENV.NAME to Discard +*-------------------------------------- +ENV.DelVarP3 .DO AUXENV=1 + sta SETREADAUX + sta SETWRITEAUX + .FIN + >LDYA ZPPtr3 save actual Ptr + >STYA ZPPtr4 + jsr ENV.NextEnvP3 Skip NAME=VALUE + +.1 ldy #$ff + +.2 iny + lda (ZPPtr3),y Move back CSTRs... + sta (ZPPtr4),y + bne .2 + + tya + + beq .8 we moved back ending \0 + + jsr ENV.NextEnvP3Y + jsr ENV.NextEnvP4Y + bra .1 + +.8 .DO AUXENV=1 + sta CLRREADAUX + sta CLRWRITEAUX + .FIN + rts +*-------------------------------------- +ENV.InitEnvP3 .DO AUXENV=1 + sta CLRREADAUX + .FIN + ldy #S.PS.hENV + lda (pPs),y + .DO AUXENV=1 + sta SETREADAUX + .FIN + jsr K.GetMemPtr + >STYA ZPPtr3 Store ENV + + rts +*-------------------------------------- +ENV.NextEnvP3 jsr ENV.GetP3LenY +*-------------------------------------- +ENV.NextEnvP3Y tya +ENV.NextEnvP3A sec + adc ZPPtr3 + sta ZPPtr3 + bcc .8 + inc ZPPtr3+1 +.8 rts +*-------------------------------------- +ENV.GetP3LenY ldy #$ff +.1 iny + lda (ZPPtr3),y + bne .1 + rts +*-------------------------------------- +ENV.NextEnvP4Y tya + sec + adc ZPPtr4 + sta ZPPtr4 + bcc .8 + inc ZPPtr4+1 +.8 rts +*-------------------------------------- +* ENV.Dup +* In: +* A = ENV hMem To Duplicate +* Out: +* A = hMem to new ENV +* X = Page Count +*-------------------------------------- +ENV.Dup ldy #S.PS.ENVPAGECNT + lda (pPs),y + +ENV.Dup.A sta .8+1 Store target page Count + + ldy #S.PS.ENVPAGECNT get SOURCE page count + lda (pPs),y + sta .10+1 + + ldy #S.PS.hENV + lda (pPs),y + .DO AUXENV=1 + sta SETREADAUX + sta SETWRITEAUX + .FIN + jsr K.GetMemPtr + >STYA .1+1 + + ldy #0 + lda .8+1 + jsr K.GetMem + bcs .9 + + >STYA .2+1 Target Buffer + phx save hMem + jsr Mem.SetOwner Set Ownership + + ldy #0 + +.10 ldx #$ff SELF MODIFIED + +.1 lda $ffff,y SELF MODIFIED +.2 sta $ffff,y SELF MODIFIED + iny + bne .1 + + inc .1+2 + inc .2+2 + dex + bne .1 + +.8 ldx #$ff SELF MODIFIED Target Page Count + pla hMem + clc + +.9 .DO AUXENV=1 + sta CLRREADAUX + sta CLRWRITEAUX + .FIN + rts +*-------------------------------------- +MAN +SAVE USR/SRC/SYS/KERNEL.S.ENVX +LOAD USR/SRC/SYS/KERNEL.S +ASM