diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index 693f27d7..b1b2fc8f 100644 Binary files a/.Floppies/A2OSX.BOOT.po and b/.Floppies/A2OSX.BOOT.po differ diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index bb7bff79..cef1f0a3 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index 3dbd19c7..d93cfbcd 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/README.md b/README.md index 45800b2c..06c29347 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,5 @@ # A2osX (0.9.1) Multi-Tasking OS for Apple II -...preemtive ? soon ! - ## Disk images : + **A2OSX.BOOT.po** : **(0.9.1)** 140k BOOT disk image with all binaries @@ -9,6 +7,18 @@ + **A2OSX.BUILD.po** : **(0.9.1)** 800k BOOT disk image with S-C MASM 3.0 and all binaries (BOOT+DEV) + **A2OSX.SRC.po** : **(0.9.1)** 800k disk image with all sources +## Latest News 2018-04-29 + +Kernel 0.9.1 is now preemptive. All you need is a "tick" source, see below for supported hardware. +For now, only SBIN/BIN executables are "switcheable". + +Roadmap is as follow: + + + Check all BIN/SBIN sources to make them preemptive compliant, most of them are NOT. + + Add a way to make LIB also interruptible and reentrant. + + Add more supported hardware for system clock. + + ...and still hoping finding few contributors.... :-( + ## Latest News 2017-11-08 Kernel 0.9.1 stable enough to resume building. @@ -36,10 +46,10 @@ Kernel 0.9.1 stable enough to resume building. + Per process Stack Segment __(done!)__ + Larger S.PS structure __(done!)__ + ... - + to allow...Preemtive! + + to allow...Preemptive! -**"System Tick" sources for preemtive mode :** +**"System Tick" sources for preemptive mode :** | Hardware | Resolution | Status | Comment | | -------------------------| ---------- | ----------- | ------- | diff --git a/SYS/KERNEL.S.CTRL.txt b/SYS/KERNEL.S.CTRL.txt index 26f24127..cb6d659e 100644 --- a/SYS/KERNEL.S.CTRL.txt +++ b/SYS/KERNEL.S.CTRL.txt @@ -6,7 +6,7 @@ AUTO 4,1 .LIST ON *-------------------------------------- A2osX.MAIN.S .EQ A2osX.AUX-A2osX.MAIN -A2osX.AUX.S .EQ A2osX.GP-A2osX.AUX +A2osX.AUX.S .EQ A2osX.GP-A2osX.AUX A2osX.GP.S .EQ GP.CodeEnd-GP.CodeStart A2osX.D1.S .EQ A2osX.D2-A2osX.D1 A2osX.D2.S .EQ A2osX.E0-A2osX.D2 diff --git a/SYS/KERNEL.S.ENV.txt b/SYS/KERNEL.S.ENV.txt index 5c1964af..72bab415 100644 --- a/SYS/KERNEL.S.ENV.txt +++ b/SYS/KERNEL.S.ENV.txt @@ -184,7 +184,7 @@ K.PutEnv.YA >STYA ZPPtr1 NAME=VALUE * PUSHW = PTR To Name (PSTR) * ## Out: *\-------------------------------------- -K.SetEnv jsr PullP1P2 Ptr1=NAME,Ptr2=VALUE +K.SetEnv jsr MEM.PullP1P2 Ptr1=NAME,Ptr2=VALUE K.SetEnv.I jsr K.UnsetEnv.I jsr ENV.InitEnvP3 ZPPtr3 -> Env diff --git a/SYS/KERNEL.S.JMP.txt b/SYS/KERNEL.S.JMP.txt index 1fa51ae7..86ea3409 100644 --- a/SYS/KERNEL.S.JMP.txt +++ b/SYS/KERNEL.S.JMP.txt @@ -2,7 +2,7 @@ NEW PREFIX /A2OSX.BUILD AUTO 4,1 *-------------------------------------- -* $E000-E0FF K.SYSCALL.JMP Jmp Table +* $E000-E1FF K.SYSCALL.JMP Jmp Table *-------------------------------------- * Bank 1 *-------------------------------------- @@ -422,24 +422,6 @@ K.GUIOSD.JMP sta SETREADAUX sta CLRWRITEAUX rts *-------------------------------------- -TXTPTR.GetNext sta CLRREADAUX - lda (TXTPTR) - sta SETREADAUX - beq .9 - inc TXTPTR - bne .9 - inc TXTPTR+1 -.9 rts -*-------------------------------------- -PullP1P2P3 sec - .HS 90 bcc -PullP1P2 clc - >PULLW ZPPtr1 - >PULLW ZPPtr2 - bcc .9 - >PULLW ZPPtr3 -.9 rts -*-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.JMP LOAD /A2OSX.SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.MEM.txt b/SYS/KERNEL.S.MEM.txt index b0fb8f03..488dd3bc 100644 --- a/SYS/KERNEL.S.MEM.txt +++ b/SYS/KERNEL.S.MEM.txt @@ -557,59 +557,39 @@ K.SListFree.A sta CLRREADAUX sta CLRWRITEAUX rts -*-------------------------------------- -MEM.GetKeyCharY sta CLRREADAUX - lda (ZPSListKeyPtr),y +*/-------------------------------------- +* # NewStkObj.YA +* ## In: +* Y,A = Size Requested +* ## Out: +* CC : success +* YA = PTR to Mem (Uninitialised) +* X = hMem +* CS : +* A = EC +*\-------------------------------------- +K.NewStkObj.YA ldx #SYS.GetMem.YA + .HS 2C BIT ABS +*/-------------------------------------- +* # FreeStkObj.A +* ## In: +* A = hMem To Free (AUX Memory) +* ## Out: +* none. +* (X,Y unmodified) +*\-------------------------------------- +K.FreeStkObj.A ldx #SYS.FreeMem.A + sta SETREADAUX - beq MEM.IsDigit.9 + sta SETWRITEAUX -MEM.IsIDValid cmp #'.' - beq MEM.IsDigit.8 - - cmp #'_' - beq MEM.IsDigit.8 + jsr .1 -MEM.IsDigitOrL cmp #'z'+1 - bcs MEM.IsDigit.RTS - cmp #'a' - bcs MEM.IsDigit.8 - -MEM.IsDigitOrUC cmp #'Z'+1 - bcs MEM.IsDigit.RTS - cmp #'A' - bcs MEM.IsDigit.8 - -MEM.IsDigit cmp #'9'+1 - bcs MEM.IsDigit.RTS - cmp #'0' - bcs MEM.IsDigit.8 - -MEM.IsDigit.9 sec - -MEM.IsDigit.RTS rts - -MEM.IsDigit.8 clc + sta CLRREADAUX + sta CLRWRITEAUX rts -*-------------------------------------- -MEM.SetKeyCharY sta CLRWRITEAUX - sta (ZPSListKeyPtr),y - sta SETWRITEAUX - rts -*-------------------------------------- -MEM.GetDataByte sta CLRREADAUX - lda (ZPSListDataPtr) - sta SETREADAUX - bra MEM.SetDataByte.1 -*-------------------------------------- -MEM.SetDataByte sta CLRWRITEAUX - sta (ZPSListDataPtr) - sta SETWRITEAUX -MEM.SetDataByte.1 - inc ZPSListDataPtr - bne .8 - inc ZPSListDataPtr+1 -.8 rts +.1 jmp (SYS.Kernel.JMP,x) */-------------------------------------- * # LoadStkObj * Load a file in AUX memory (Stock Objects) @@ -661,42 +641,78 @@ K.LoadStkObj >SYSCALL LoadFile pla sec .99 rts -*/-------------------------------------- -* # NewStkObj.YA -* ## In: -* Y,A = Size Requested -* ## Out: -* CC : success -* YA = PTR to Mem (Uninitialised) -* X = hMem -* CS : -* A = EC -*\-------------------------------------- -K.NewStkObj.YA sta SETREADAUX - sta SETWRITEAUX +*-------------------------------------- +MEM.GetKeyCharY sta CLRREADAUX + lda (ZPSListKeyPtr),y + sta SETREADAUX + beq MEM.IsDigit.9 - jsr K.GetMem.YA +MEM.IsIDValid cmp #'.' + beq MEM.IsDigit.8 + + cmp #'_' + beq MEM.IsDigit.8 - sta CLRREADAUX - sta CLRWRITEAUX +MEM.IsDigitOrL cmp #'z'+1 + bcs MEM.IsDigit.RTS + cmp #'a' + bcs MEM.IsDigit.8 + +MEM.IsDigitOrUC cmp #'Z'+1 + bcs MEM.IsDigit.RTS + cmp #'A' + bcs MEM.IsDigit.8 + +MEM.IsDigit cmp #'9'+1 + bcs MEM.IsDigit.RTS + cmp #'0' + bcs MEM.IsDigit.8 + +MEM.IsDigit.9 sec + +MEM.IsDigit.RTS rts + +MEM.IsDigit.8 clc rts -*/-------------------------------------- -* # FreeStkObj.A -* ## In: -* A = hMem To Free (AUX Memory) -* ## Out: -* none. -* (X,Y unmodified) -*\-------------------------------------- -K.FreeStkObj.A sta SETREADAUX +*-------------------------------------- +MEM.SetKeyCharY sta CLRWRITEAUX + sta (ZPSListKeyPtr),y sta SETWRITEAUX - - jsr K.FreeMem.A - - sta CLRREADAUX - sta CLRWRITEAUX rts *-------------------------------------- +MEM.GetDataByte sta CLRREADAUX + lda (ZPSListDataPtr) + sta SETREADAUX + bra MEM.SetDataByte.1 +*-------------------------------------- +MEM.SetDataByte sta CLRWRITEAUX + sta (ZPSListDataPtr) + sta SETWRITEAUX +MEM.SetDataByte.1 + inc ZPSListDataPtr + bne .8 + inc ZPSListDataPtr+1 +.8 rts +*-------------------------------------- +MEM.TXTPTR.GetNext + sta CLRREADAUX + lda (TXTPTR) + sta SETREADAUX + beq .9 + inc TXTPTR + bne .9 + inc TXTPTR+1 +.9 rts +*-------------------------------------- +MEM.PullP1P2P3 sec + .HS 90 bcc +MEM.PullP1P2 clc + >PULLW ZPPtr1 + >PULLW ZPPtr2 + bcc .9 + >PULLW ZPPtr3 +.9 rts +*-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.MEM LOAD /A2OSX.SRC/SYS/KERNEL.S diff --git a/SYS/KERNEL.S.OSD.txt b/SYS/KERNEL.S.OSD.txt index 9a4a6933..4ac9f2f5 100644 --- a/SYS/KERNEL.S.OSD.txt +++ b/SYS/KERNEL.S.OSD.txt @@ -208,7 +208,7 @@ DRAWTEXT lda CB.Cache+S.CB.hFONT sta CB.Cache+S.CB.SrcH stz CB.Cache+S.CB.SrcH+1 -.3 jsr TXTPTR.GetNext +.3 jsr MEM.TXTPTR.GetNext beq .4 jsr FON.GetChar @@ -235,7 +235,7 @@ DRAWTEXT lda CB.Cache+S.CB.hFONT stz GWORD reset Col index in BM stz GWORD+1 reset Bit index in Col -DRAWTEXT.LOOP jsr TXTPTR.GetNext +DRAWTEXT.LOOP jsr MEM.TXTPTR.GetNext beq DRAWTEXT.END jsr FON.GetChar diff --git a/SYS/KERNEL.S.STDIO.txt b/SYS/KERNEL.S.STDIO.txt index ca3249dc..d981d35e 100644 --- a/SYS/KERNEL.S.STDIO.txt +++ b/SYS/KERNEL.S.STDIO.txt @@ -628,7 +628,7 @@ K.Rename jsr PFT.CheckPathSTK * PUSHW PSTR to scan (ex: "192.168.1.5") * ## Out: *\-------------------------------------- -K.SScanF jsr PullP1P2P3 +K.SScanF jsr MEM.PullP1P2P3 ldy #0 Y = PTR in pattern diff --git a/SYS/KERNEL.S.STDLIB.txt b/SYS/KERNEL.S.STDLIB.txt index 04f36f63..6abb69e8 100644 --- a/SYS/KERNEL.S.STDLIB.txt +++ b/SYS/KERNEL.S.STDLIB.txt @@ -58,7 +58,7 @@ K.StrToL sec Signed * ## Out: *\-------------------------------------- K.StrToUL clc Unsigned - jsr PullP1P2P3 + jsr MEM.PullP1P2P3 >PULLA Base jsr K.AToL.I @@ -81,7 +81,7 @@ K.StrToUL.rts rts * PUSHW PTR to target buffer DWORD * ## Out: *\-------------------------------------- -K.AToL jsr PullP1P2 C-String in Ptr2, Dst buffer in Ptr1 +K.AToL jsr MEM.PullP1P2 C-String in Ptr2, Dst buffer in Ptr1 lda #10 base 10 sec signed diff --git a/SYS/KERNEL.S.STRING.txt b/SYS/KERNEL.S.STRING.txt index 3bd6f97a..68c1ba1f 100644 --- a/SYS/KERNEL.S.STRING.txt +++ b/SYS/KERNEL.S.STRING.txt @@ -33,7 +33,7 @@ K.StrLen.YA >STYA ZPPtr1 * ## Out: * DST = DST+SRC *\-------------------------------------- -K.StrCat jsr PullP1P2 +K.StrCat jsr MEM.PullP1P2 .1 lda (ZPPtr1) beq K.StrCpy.I @@ -51,7 +51,7 @@ K.StrCat jsr PullP1P2 * ## Out: * DST = SRC *\-------------------------------------- -K.StrCpy jsr PullP1P2 +K.StrCpy jsr MEM.PullP1P2 K.StrCpy.I ldy #0 @@ -75,7 +75,7 @@ K.StrCpy.I ldy #0 * CC : match * CS : no match *\-------------------------------------- -K.StrMatch jsr PullP1P2 +K.StrMatch jsr MEM.PullP1P2 lda (ZPPtr2) Get pattern 1st byte beq .8 Match always if empty @@ -198,7 +198,7 @@ K.StrCmp sec * CS, Y,A > 0 or < 0 *\-------------------------------------- K.StrICmp clc - jsr PullP1P2 + jsr MEM.PullP1P2 ldy #0 diff --git a/SYS/KERNEL.S.TIME.txt b/SYS/KERNEL.S.TIME.txt index 88d8147f..7bc5f055 100644 --- a/SYS/KERNEL.S.TIME.txt +++ b/SYS/KERNEL.S.TIME.txt @@ -28,7 +28,7 @@ K.Time.YA >STYA ZPPtr2 * PUSHW = Dst PTR To S.TIME * PUSHW = Src PTR to ProDOS DATE/TIME (DWORD) *\-------------------------------------- -K.PTime2Time jsr PullP1P2 +K.PTime2Time jsr MEM.PullP1P2 TIME.PTime2TimeP1P2 ldy #1 lda (ZPPtr1),y Get Year @@ -157,7 +157,7 @@ K.ComputeWDAY lda #3 Thursday : 4 (-1 for mod 7) * PUSHW = Dst PTR To S.TIME * PUSHW = Src CTIME DWORD *\-------------------------------------- -K.CTime2Time jsr PullP1P2 +K.CTime2Time jsr MEM.PullP1P2 ldy #3 @@ -398,7 +398,7 @@ K.CTime.Year .BS 1 * ## Out: * none. always succeed. *\-------------------------------------- -K.StrFTime jsr PullP1P2P3 +K.StrFTime jsr MEM.PullP1P2P3 ldy #0