From 3973ebbbed1dcd830aef89e1b1c82f5527d12949 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Fri, 13 Apr 2018 16:18:48 +0100 Subject: [PATCH] Kernel 0.9.1 : KERNEL, Preemtive mode, task switching (bugfix) --- .Floppies/A2OSX.BOOT.po | Bin 143360 -> 143360 bytes .Floppies/A2OSX.BUILD.po | Bin 819200 -> 819200 bytes .Floppies/A2OSX.SRC.po | Bin 819200 -> 819200 bytes BIN/LS.S.txt | 2 +- BIN/PS.S.txt | 60 ++++++++++++++++++++---------------- DRV/X.SSC.DRV.S.txt | 27 +++++++++++----- INC/A2osX.I.txt | 17 +++++----- SYS/KERNEL.S.CORE.txt | 65 +++++++++++++++++++-------------------- SYS/KERNEL.S.INIT.txt | 5 +-- SYS/KERNEL.S.IRQ.txt | 23 +++++++++----- 10 files changed, 113 insertions(+), 86 deletions(-) diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index f8e1483789717617f5b5a73f3c81c335638483b0..d5545c16f584ca1a0d6d333e6732971fbcdc9e13 100644 GIT binary patch delta 8711 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 f8R;uT^^b7`c}e6G91R7pr9!H1x@Y2SQQ(R3#+> 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 SL}V0{{8BrW45>{ZrT-5{EOC?o diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 6c1f14df3e4982e85f4e8c600f348fbf9b512eab..7d4a2636fbc9b10b5650be37136d262c77de6718 100644 GIT binary patch delta 6534 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 RQCl?AwrHkzYNG$^{{h{zA5Z`Q delta 6494 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 delta 18052 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 pData lda (ZPPtr),y >PUSHA Parent PID - lda (ZPPtr) Get flags + ldy #S.PS.UID + lda (ZPPtr),y + >PUSHA + + jsr CS.RUN.DecodeFlags + + >PUSHEA.G PS.FLAGS + + ldy #S.PS.STATS + lda (ZPPtr),y + >PUSHA CPU% + + ldy #S.PS.PID + lda (ZPPtr),y + >PUSHA + >LDYA L.MSG1 + >SYSCALL PrintF.YA + +.7 >DEC.G PS.COUNT + bne .1 + +.8 +* lda #0 tell Kernel that all done ok, but + sec we do not want to stay in memory + rts +*-------------------------------------- +CS.RUN.DecodeFlags + lda (ZPPtr) Get flags ldy #PS.FLAGS+7 ldx #7 @@ -79,27 +106,8 @@ CS.RUN >LDYA pData pla dey dex - bpl .2 - - >PUSHEA.G PS.FLAGS - - ldy #S.PS.STATS - lda (ZPPtr),y - >PUSHA CPU% - - ldy #S.PS.PID - lda (ZPPtr),y - >PUSHA PID - >LDYA L.MSG1 - >SYSCALL PrintF.YA - -.7 >DEC.G PS.COUNT - bne .1 - -.8 -* lda #0 tell Kernel that all done ok, but - sec we do not want to stay in memory - rts + bpl .2 + rts *-------------------------------------- CS.DOEVENT sec rts @@ -108,9 +116,9 @@ CS.QUIT clc rts *-------------------------------------- CS.END -MSG0 .AZ "ID CPU\% Flags PID Command Line\r\n" -MSG1 .AZ "%03d %03d\% %s %03d %s\r\n" -MSG.FLAGS .AS "IRHSED--" +MSG0 .AZ "ID CPU\% Flags UID PID Command Line\r\n" +MSG1 .AZ "%03d %03d\% %s %03d %03d %s\r\n" +MSG.FLAGS .AS "IRHSED-P" *-------------------------------------- .DUMMY .OR 0 diff --git a/DRV/X.SSC.DRV.S.txt b/DRV/X.SSC.DRV.S.txt index 6aeb12ff..b6a1352b 100644 --- a/DRV/X.SSC.DRV.S.txt +++ b/DRV/X.SSC.DRV.S.txt @@ -316,7 +316,8 @@ WRITE .DO SSCIRQ=1 * IRQ Handler * on exit, CC if handled *-------------------------------------- - .DO SSCIRQ=1 + .DO SSCIRQ=1 + IRQ ldx DEVSLOTn08F lda SSC.STATUS-$8F,x @@ -328,6 +329,8 @@ IRQ ldx DEVSLOTn08F *------------ IRQ In + pha + .1 lda INBUF.HEAD tay save actual head for later @@ -341,9 +344,10 @@ IRQ ldx DEVSLOTn08F lda SSC.DATA-$8F,x read data to clear IRQ sta INBUF,y -.2 lda SSC.STATUS-$8F,x - bit #SSC.STATUS.RDRF incoming char? - bne .1 +.2 pla +* lda SSC.STATUS-$8F,x +* bit #SSC.STATUS.RDRF incoming char? +* bne .1 *------------ IRQ Out @@ -363,33 +367,42 @@ IRQ ldx DEVSLOTn08F sta OUTBUF.TAIL - lda SSC.STATUS-$8F,x - bit #SSC.STATUS.TDRE - bne .4 +* lda SSC.STATUS-$8F,x +* bit #SSC.STATUS.TDRE +* bne .4 .8 clc rts .9 sec rts + .FIN *-------------------------------------- DRV.CS.END DEVSLOTn08F .BS 1 + .DO SSCIRQ=1 + INBUF.TAIL .BS 1 INBUF.HEAD .BS 1 OUTBUF.TAIL .BS 1 OUTBUF.HEAD .BS 1 INBUF .BS BUF.SIZE OUTBUF .BS BUF.SIZE + .FIN *-------------------------------------- STAT .DO SSCIRQ=1 + .DA #S.DSTAT.S.WRITE+S.DSTAT.S.READ+S.DEV.S.IRQ + .ELSE + .DA #S.DSTAT.S.WRITE+S.DSTAT.S.READ + .FIN + .DA #0,#0,#0 >PSTR "Serial Card/Port" .DA #S.DSTAT.T.CHAR diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index ac308fd6..b5b690b4 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -367,13 +367,14 @@ S.PS.F.HOLD .EQ %00100000 S.PS.F.SLEEP .EQ %00010000 S.PS.F.EVENT .EQ %00001000 S.PS.F.DUPENV .EQ %00000100 +S.PS.F.PREEMPTED .EQ %00000001 S.PS.PPID .EQ 1 S.PS.PID .EQ 2 S.PS.CPID .EQ 3 S.PS.hCS .EQ 4 S.PS.hDS .EQ 5 S.PS.hSS .EQ 6 -S.PS.ZP.SIZE .EQ 7 +S.PS.UID .EQ 7 S.PS.hENV .EQ 8 S.PS.hPREFIX .EQ 9 S.PS.hStdIn .EQ 10 @@ -383,14 +384,14 @@ S.PS.RC .EQ 13 S.PS.ARGC .EQ 14 S.PS.hARGS .EQ 15 -S.PS.A .EQ 16 -S.PS.X .EQ 17 -S.PS.Y .EQ 18 -S.PS.P .EQ 19 -S.PS.PC .EQ 20 WORD -S.PS.S .EQ 22 +S.PS.STATS .EQ 16 -S.PS.STATS .EQ 23 +S.PS.A .EQ 17 +S.PS.X .EQ 18 +S.PS.Y .EQ 19 +S.PS.P .EQ 20 +S.PS.PC .EQ 21 WORD +S.PS.ZP.SIZE .EQ 23 S.PS.ZP .EQ 24 diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index c3816600..334fd64c 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -29,7 +29,7 @@ CORE.Run lda CORE.PSCount and #$FF^S.PS.F.HOLD unmark as HOLD sta (pPs) -.2 jsr CORE.PSEnter Restore at least ZP & Ptrs +.2 jsr CORE.PSSelect Restore at least ZP & Ptrs lda (pPs) get S.PS.F again bit #S.PS.F.SLEEP Is this PS sleeping? @@ -39,7 +39,7 @@ CORE.Run lda CORE.PSCount sta (pPS) jsr CORE.Resume Restore PC....and JMP to - + dec IRQ.InKernel bcc .7 bcs .5 @@ -54,7 +54,7 @@ CORE.Run lda CORE.PSCount .HS 2C BIT abs .4 ldx #TSKMGR.RUN - jsr pCodeJmp Call INIT/RUN function + jsr CORE.pCodeJmp Call INIT/RUN function dec IRQ.InKernel bcc .7 INIT/RUN/RESUME said CS=QUIT? @@ -77,7 +77,7 @@ CORE.Run lda CORE.PSCount sta (ZPPtr1),y .6 ldx #TSKMGR.QUIT Quit this process - jsr pCodeJmp Call QUIT function + jsr CORE.pCodeJmp Call QUIT function dec IRQ.InKernel ldy #S.PS.PID lda (pPs),y @@ -238,7 +238,7 @@ CORE.Dispatch lda CORE.PSCount bit #S.PS.F.EVENT Accept Events ? beq .5 - jsr CORE.PSEnter + jsr CORE.PSSelect lda #Evt.Table sta pEvent Select first event in list @@ -250,7 +250,7 @@ CORE.Dispatch lda CORE.PSCount beq .3 ldx #TSKMGR.DOEVENT - jsr pCodeJmp Call DOEVENT function + jsr CORE.pCodeJmp Call DOEVENT function dec IRQ.InKernel bcs .3 not for this PS, try next event in list @@ -277,17 +277,6 @@ CORE.Dispatch lda CORE.PSCount .8 clc rts -*-------------------------------------- -pCodeJmp lda pCode+1 - pha - lda pCode - pha - php - sei - inc IRQ.InKernel - rti - - jmp (pCode) *-------------------------------------- CORE.Quit clc rts @@ -429,7 +418,7 @@ CORE.PSSelect0 >LDYAI CORE.S.PS0 Select PS0 >STYA pStack rts *-------------------------------------- -CORE.PSEnter ldy #S.PS.ZP+ZPBIN.SIZE-1 +CORE.PSSelect ldy #S.PS.ZP+ZPBIN.SIZE-1 ldx #ZPBIN.SIZE-1 .1 lda (pPs),y @@ -451,13 +440,22 @@ CORE.PSLeave ldy #S.PS.ZP+ZPBIN.SIZE-1 rts *-------------------------------------- +CORE.Switch php + sec + .HS 2C BIT ABS +*-------------------------------------- CORE.Sleep php - dec IRQ.InKernel + clc phy ldy #S.PS.A sta (pPs),y + lda #S.PS.F.SLEEP + adc #0 C=S.PS.F.PREEMPTED + ora (pPs) + sta (pPs) + txa iny #S.PS.X sta (pPs),y @@ -481,15 +479,14 @@ CORE.Sleep php iny #S.PS.PC+1 sta (pPs),y - iny #S.PS.S tsx inx inx inx txa - sta (pPs),y - + tay Save !Byte count for later + beq .8 .1 pla @@ -497,25 +494,23 @@ CORE.Sleep php inx bne .1 -.8 lda (pPs) - ora #S.PS.F.SLEEP - sta (pPs) - +.8 tya push CPU Stack BC to restorre on top of Soft Stack + >PUSHA + clc exit to kernel with CC rts *-------------------------------------- -CORE.Resume ldy #S.PS.S - lda (pPs),y - beq .2 - +CORE.Resume >PULLA Get !BC tax - + + beq .2 + .1 >PULLA pha inx bne .1 -.2 dey #S.PS.PC+1 +.2 ldy #S.PS.PC+1 lda (pPs),y pha @@ -539,9 +534,11 @@ CORE.Resume ldy #S.PS.S lda (pPs),y ply - sei inc IRQ.InKernel rti +*-------------------------------------- +CORE.pCodeJmp inc IRQ.InKernel + jmp (pCode) *-------------------------------------- TSKMGR.EVENTCNT .BS 1 *-------------------------------------- @@ -564,7 +561,7 @@ CORE.Tick10t .BS 1 CORE.Counter .BS 1 CORE.PSCount .DA #0 CORE.LastPSID .DA #0 -CORE.S.PS0 .BS S.PS.hARGS+1 +CORE.S.PS0 .BS S.PS.STATS+1 *-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.CORE diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index cf2091c1..c44c279b 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -141,6 +141,9 @@ Kernel.Init3 sta SETALTZP dex bpl .1 + lda #$ff Make sure we are in Kernel Mode during setup + sta IRQ.InKernel + jsr MemMgrInit jsr PS0Init bcs * @@ -583,8 +586,6 @@ IrqMgrInit >LDYAI MSG.IRQ lda K.MLI.PARAMS+1 sta IRQ.INTNUM - lda #$ff - sta IRQ.InKernel plp jsr IrqMgrInit.TClock diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index c775c9a6..28b88d87 100644 --- a/SYS/KERNEL.S.IRQ.txt +++ b/SYS/KERNEL.S.IRQ.txt @@ -72,21 +72,23 @@ K.IrqHAuxLC.3 pla php php make room for 2 additional bytes php keep track of C - tsx sec - lda $104,x get RTI PC LO + lda $105,x get RTI PC LO sbc #1 back one byte, to make it a "RTS" return adddress - sta $104,x + sta $105,x bcs .1 - dec $105,x adjust RTI PC HI + dec $106,x adjust RTI PC HI -.1 lda #CORE.Sleep make a RTI like "jsr CORE.Sleep" - sta $102,x - lda /CORE.Sleep with RTS=PC IRQ-1 +.1 lda $104,x get IRQ pushed P + sta $102,x down 2 bytes + + lda #CORE.Switch make a RTI like "jsr CORE.Sleep" sta $103,x + lda /CORE.Switch with RTS=PC IRQ-1 + sta $104,x plp @@ -136,7 +138,12 @@ K.IrqH.Switch inc IRQ.Tick lda #$A0+'S eor SYS.BASL0+37 - sta SYS.BASL0+37 + sta SYS.BASL0+37 + + ldy #S.PS.STATS + lda (pPs),y + inc + sta (pPs),y .8 clc exit with V flag set rts