mirror of
https://github.com/A2osX/A2osX.git
synced 2024-10-10 12:23:45 +00:00
Kernel 0.9.1 : KERNEL, Preemtive mode, Code cleaning....step by step....#4
This commit is contained in:
parent
62d910288d
commit
cc307e8bc3
Binary file not shown.
Binary file not shown.
Binary file not shown.
18
README.md
18
README.md
@ -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 |
|
||||||
| -------------------------| ---------- | ----------- | ------- |
|
| -------------------------| ---------- | ----------- | ------- |
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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 #'_'
|
sta CLRREADAUX
|
||||||
beq MEM.IsDigit.8
|
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
|
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
|
||||||
|
|
||||||
sta CLRREADAUX
|
cmp #'_'
|
||||||
sta CLRWRITEAUX
|
beq MEM.IsDigit.8
|
||||||
|
|
||||||
|
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
|
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
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user