Kernel 0.9.1 : KERNEL, Preemtive mode, Code cleaning....step by step....#4

This commit is contained in:
Rémy GIBERT 2018-04-29 21:10:13 +02:00
parent 62d910288d
commit cc307e8bc3
13 changed files with 123 additions and 115 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,7 +1,5 @@
# A2osX (0.9.1) Multi-Tasking OS for Apple II # A2osX (0.9.1) Multi-Tasking OS for Apple II
...preemtive ? soon !
## Disk images : ## Disk images :
+ **A2OSX.BOOT.po** : **(0.9.1)** 140k BOOT disk image with all binaries + **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.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 + **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 ## Latest News 2017-11-08
Kernel 0.9.1 stable enough to resume building. 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!)__ + Per process Stack Segment __(done!)__
+ Larger S.PS structure __(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 | | Hardware | Resolution | Status | Comment |
| -------------------------| ---------- | ----------- | ------- | | -------------------------| ---------- | ----------- | ------- |

View File

@ -6,7 +6,7 @@ AUTO 4,1
.LIST ON .LIST ON
*-------------------------------------- *--------------------------------------
A2osX.MAIN.S .EQ A2osX.AUX-A2osX.MAIN 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.GP.S .EQ GP.CodeEnd-GP.CodeStart
A2osX.D1.S .EQ A2osX.D2-A2osX.D1 A2osX.D1.S .EQ A2osX.D2-A2osX.D1
A2osX.D2.S .EQ A2osX.E0-A2osX.D2 A2osX.D2.S .EQ A2osX.E0-A2osX.D2

View File

@ -184,7 +184,7 @@ K.PutEnv.YA >STYA ZPPtr1 NAME=VALUE
* PUSHW = PTR To Name (PSTR) * PUSHW = PTR To Name (PSTR)
* ## Out: * ## 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 K.SetEnv.I jsr K.UnsetEnv.I
jsr ENV.InitEnvP3 ZPPtr3 -> Env jsr ENV.InitEnvP3 ZPPtr3 -> Env

View File

@ -2,7 +2,7 @@ NEW
PREFIX /A2OSX.BUILD PREFIX /A2OSX.BUILD
AUTO 4,1 AUTO 4,1
*-------------------------------------- *--------------------------------------
* $E000-E0FF K.SYSCALL.JMP Jmp Table * $E000-E1FF K.SYSCALL.JMP Jmp Table
*-------------------------------------- *--------------------------------------
* Bank 1 * Bank 1
*-------------------------------------- *--------------------------------------
@ -422,24 +422,6 @@ K.GUIOSD.JMP sta SETREADAUX
sta CLRWRITEAUX sta CLRWRITEAUX
rts 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 MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.JMP SAVE /A2OSX.SRC/SYS/KERNEL.S.JMP
LOAD /A2OSX.SRC/SYS/KERNEL.S LOAD /A2OSX.SRC/SYS/KERNEL.S

View File

@ -557,59 +557,39 @@ K.SListFree.A
sta CLRREADAUX sta CLRREADAUX
sta CLRWRITEAUX sta CLRWRITEAUX
rts rts
*-------------------------------------- */--------------------------------------
MEM.GetKeyCharY sta CLRREADAUX * # NewStkObj.YA
lda (ZPSListKeyPtr),y * ## 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 sta SETREADAUX
beq MEM.IsDigit.9 sta SETWRITEAUX
MEM.IsIDValid cmp #'.' jsr .1
beq MEM.IsDigit.8
cmp #'_'
beq MEM.IsDigit.8
MEM.IsDigitOrL cmp #'z'+1 sta CLRREADAUX
bcs MEM.IsDigit.RTS sta CLRWRITEAUX
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 rts
*-------------------------------------- .1 jmp (SYS.Kernel.JMP,x)
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
*/-------------------------------------- */--------------------------------------
* # LoadStkObj * # LoadStkObj
* Load a file in AUX memory (Stock Objects) * Load a file in AUX memory (Stock Objects)
@ -661,42 +641,78 @@ K.LoadStkObj >SYSCALL LoadFile
pla pla
sec sec
.99 rts .99 rts
*/-------------------------------------- *--------------------------------------
* # NewStkObj.YA MEM.GetKeyCharY sta CLRREADAUX
* ## In: lda (ZPSListKeyPtr),y
* Y,A = Size Requested sta SETREADAUX
* ## Out: beq MEM.IsDigit.9
* CC : success
* YA = PTR to Mem (Uninitialised)
* X = hMem
* CS :
* A = EC
*\--------------------------------------
K.NewStkObj.YA sta SETREADAUX
sta SETWRITEAUX
jsr K.GetMem.YA MEM.IsIDValid cmp #'.'
beq MEM.IsDigit.8
cmp #'_'
beq MEM.IsDigit.8
sta CLRREADAUX MEM.IsDigitOrL cmp #'z'+1
sta CLRWRITEAUX 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 rts
*/-------------------------------------- *--------------------------------------
* # FreeStkObj.A MEM.SetKeyCharY sta CLRWRITEAUX
* ## In: sta (ZPSListKeyPtr),y
* A = hMem To Free (AUX Memory)
* ## Out:
* none.
* (X,Y unmodified)
*\--------------------------------------
K.FreeStkObj.A sta SETREADAUX
sta SETWRITEAUX sta SETWRITEAUX
jsr K.FreeMem.A
sta CLRREADAUX
sta CLRWRITEAUX
rts 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 MAN
SAVE /A2OSX.SRC/SYS/KERNEL.S.MEM SAVE /A2OSX.SRC/SYS/KERNEL.S.MEM
LOAD /A2OSX.SRC/SYS/KERNEL.S LOAD /A2OSX.SRC/SYS/KERNEL.S

View File

@ -208,7 +208,7 @@ DRAWTEXT lda CB.Cache+S.CB.hFONT
sta CB.Cache+S.CB.SrcH sta CB.Cache+S.CB.SrcH
stz CB.Cache+S.CB.SrcH+1 stz CB.Cache+S.CB.SrcH+1
.3 jsr TXTPTR.GetNext .3 jsr MEM.TXTPTR.GetNext
beq .4 beq .4
jsr FON.GetChar jsr FON.GetChar
@ -235,7 +235,7 @@ DRAWTEXT lda CB.Cache+S.CB.hFONT
stz GWORD reset Col index in BM stz GWORD reset Col index in BM
stz GWORD+1 reset Bit index in Col stz GWORD+1 reset Bit index in Col
DRAWTEXT.LOOP jsr TXTPTR.GetNext DRAWTEXT.LOOP jsr MEM.TXTPTR.GetNext
beq DRAWTEXT.END beq DRAWTEXT.END
jsr FON.GetChar jsr FON.GetChar

View File

@ -628,7 +628,7 @@ K.Rename jsr PFT.CheckPathSTK
* PUSHW PSTR to scan (ex: "192.168.1.5") * PUSHW PSTR to scan (ex: "192.168.1.5")
* ## Out: * ## Out:
*\-------------------------------------- *\--------------------------------------
K.SScanF jsr PullP1P2P3 K.SScanF jsr MEM.PullP1P2P3
ldy #0 Y = PTR in pattern ldy #0 Y = PTR in pattern

View File

@ -58,7 +58,7 @@ K.StrToL sec Signed
* ## Out: * ## Out:
*\-------------------------------------- *\--------------------------------------
K.StrToUL clc Unsigned K.StrToUL clc Unsigned
jsr PullP1P2P3 jsr MEM.PullP1P2P3
>PULLA Base >PULLA Base
jsr K.AToL.I jsr K.AToL.I
@ -81,7 +81,7 @@ K.StrToUL.rts rts
* PUSHW PTR to target buffer DWORD * PUSHW PTR to target buffer DWORD
* ## Out: * ## 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 lda #10 base 10
sec signed sec signed

View File

@ -33,7 +33,7 @@ K.StrLen.YA >STYA ZPPtr1
* ## Out: * ## Out:
* DST = DST+SRC * DST = DST+SRC
*\-------------------------------------- *\--------------------------------------
K.StrCat jsr PullP1P2 K.StrCat jsr MEM.PullP1P2
.1 lda (ZPPtr1) .1 lda (ZPPtr1)
beq K.StrCpy.I beq K.StrCpy.I
@ -51,7 +51,7 @@ K.StrCat jsr PullP1P2
* ## Out: * ## Out:
* DST = SRC * DST = SRC
*\-------------------------------------- *\--------------------------------------
K.StrCpy jsr PullP1P2 K.StrCpy jsr MEM.PullP1P2
K.StrCpy.I ldy #0 K.StrCpy.I ldy #0
@ -75,7 +75,7 @@ K.StrCpy.I ldy #0
* CC : match * CC : match
* CS : no match * CS : no match
*\-------------------------------------- *\--------------------------------------
K.StrMatch jsr PullP1P2 K.StrMatch jsr MEM.PullP1P2
lda (ZPPtr2) Get pattern 1st byte lda (ZPPtr2) Get pattern 1st byte
beq .8 Match always if empty beq .8 Match always if empty
@ -198,7 +198,7 @@ K.StrCmp sec
* CS, Y,A > 0 or < 0 * CS, Y,A > 0 or < 0
*\-------------------------------------- *\--------------------------------------
K.StrICmp clc K.StrICmp clc
jsr PullP1P2 jsr MEM.PullP1P2
ldy #0 ldy #0

View File

@ -28,7 +28,7 @@ K.Time.YA >STYA ZPPtr2
* PUSHW = Dst PTR To S.TIME * PUSHW = Dst PTR To S.TIME
* PUSHW = Src PTR to ProDOS DATE/TIME (DWORD) * PUSHW = Src PTR to ProDOS DATE/TIME (DWORD)
*\-------------------------------------- *\--------------------------------------
K.PTime2Time jsr PullP1P2 K.PTime2Time jsr MEM.PullP1P2
TIME.PTime2TimeP1P2 TIME.PTime2TimeP1P2
ldy #1 ldy #1
lda (ZPPtr1),y Get Year 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 = Dst PTR To S.TIME
* PUSHW = Src CTIME DWORD * PUSHW = Src CTIME DWORD
*\-------------------------------------- *\--------------------------------------
K.CTime2Time jsr PullP1P2 K.CTime2Time jsr MEM.PullP1P2
ldy #3 ldy #3
@ -398,7 +398,7 @@ K.CTime.Year .BS 1
* ## Out: * ## Out:
* none. always succeed. * none. always succeed.
*\-------------------------------------- *\--------------------------------------
K.StrFTime jsr PullP1P2P3 K.StrFTime jsr MEM.PullP1P2P3
ldy #0 ldy #0