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
...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 |
| -------------------------| ---------- | ----------- | ------- |

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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