diff --git a/.Floppies/A2OSX.BOOT.po b/.Floppies/A2OSX.BOOT.po index f8e14837..d5545c16 100644 Binary files a/.Floppies/A2OSX.BOOT.po and b/.Floppies/A2OSX.BOOT.po differ diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 6c1f14df..7d4a2636 100644 Binary files a/.Floppies/A2OSX.BUILD.po and b/.Floppies/A2OSX.BUILD.po differ diff --git a/.Floppies/A2OSX.SRC.po b/.Floppies/A2OSX.SRC.po index 37ce1326..7ff1f48b 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/BIN/LS.S.txt b/BIN/LS.S.txt index d873a45e..40710a41 100644 --- a/BIN/LS.S.txt +++ b/BIN/LS.S.txt @@ -29,7 +29,7 @@ CS.START cld .DA 0 .DA CS.END-CS.START CS .DA DS.END-DS.START DS - .DA #16 SS + .DA #64 SS .DA #8 ZP .DA 0 *-------------------------------------- diff --git a/BIN/PS.S.txt b/BIN/PS.S.txt index 1b78557e..bd41e503 100644 --- a/BIN/PS.S.txt +++ b/BIN/PS.S.txt @@ -21,7 +21,7 @@ CS.START cld .DA 0 .DA CS.END-CS.START CS .DA DS.END-DS.START DS - .DA #16 SS + .DA #64 SS .DA #2 ZP .DA 0 *-------------------------------------- @@ -64,7 +64,34 @@ CS.RUN >LDYA 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