mirror of
https://github.com/A2osX/A2osX.git
synced 2025-04-01 14:29:40 +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
|
||||
|
||||
...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 |
|
||||
| -------------------------| ---------- | ----------- | ------- |
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user