diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 3436eea7..6c1f14df 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 e4eee71d..37ce1326 100644 Binary files a/.Floppies/A2OSX.SRC.po and b/.Floppies/A2OSX.SRC.po differ diff --git a/BIN/PS.S.txt b/BIN/PS.S.txt index cdfe08b3..1b78557e 100644 --- a/BIN/PS.S.txt +++ b/BIN/PS.S.txt @@ -83,6 +83,10 @@ CS.RUN >LDYA pData >PUSHEA.G PS.FLAGS + ldy #S.PS.STATS + lda (ZPPtr),y + >PUSHA CPU% + ldy #S.PS.PID lda (ZPPtr),y >PUSHA PID @@ -95,7 +99,7 @@ CS.RUN >LDYA pData .8 * lda #0 tell Kernel that all done ok, but sec we do not want to stay in memory - rts + rts *-------------------------------------- CS.DOEVENT sec rts @@ -104,9 +108,9 @@ CS.QUIT clc rts *-------------------------------------- CS.END -MSG0 .AZ "ID Flags PID Command Line\r\n" -MSG1 .AZ "%03d %s %03d %s\r\n" -MSG.FLAGS .AS "-IHSED--" +MSG0 .AZ "ID CPU\% Flags PID Command Line\r\n" +MSG1 .AZ "%03d %03d\% %s %03d %s\r\n" +MSG.FLAGS .AS "IRHSED--" *-------------------------------------- .DUMMY .OR 0 diff --git a/INC/A2osX.I.txt b/INC/A2osX.I.txt index aa6a0998..ac308fd6 100644 --- a/INC/A2osX.I.txt +++ b/INC/A2osX.I.txt @@ -361,7 +361,8 @@ S.DSTAT .EQ 25 * PS STRUCT *-------------------------------------- S.PS.F .EQ 0 -S.PS.F.INIT .EQ %01000000 +S.PS.F.INIT .EQ %10000000 +S.PS.F.RUN .EQ %01000000 S.PS.F.HOLD .EQ %00100000 S.PS.F.SLEEP .EQ %00010000 S.PS.F.EVENT .EQ %00001000 @@ -389,6 +390,8 @@ S.PS.P .EQ 19 S.PS.PC .EQ 20 WORD S.PS.S .EQ 22 +S.PS.STATS .EQ 23 + S.PS.ZP .EQ 24 S.PS.ZP.CODE .EQ 24 diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index 9ed33980..c3816600 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -14,7 +14,7 @@ CORE.Run lda CORE.PSCount lda PS.Table.hMem-1,x jsr K.GetMemPtr.A - >STYA pPS + >STYA pPs lda (pPs) get S.PS.F bit #S.PS.F.HOLD Waiting for Another Task to Terminate? @@ -47,6 +47,7 @@ CORE.Run lda CORE.PSCount beq .4 and #$FF^S.PS.F.INIT unmark as INIT + ora #S.PS.F.RUN mark as RUN sta (pPS) ldx #TSKMGR.INIT @@ -54,6 +55,7 @@ CORE.Run lda CORE.PSCount .4 ldx #TSKMGR.RUN jsr pCodeJmp Call INIT/RUN function + dec IRQ.InKernel bcc .7 INIT/RUN/RESUME said CS=QUIT? .5 tax save RC @@ -76,7 +78,7 @@ CORE.Run lda CORE.PSCount .6 ldx #TSKMGR.QUIT Quit this process jsr pCodeJmp Call QUIT function - + dec IRQ.InKernel ldy #S.PS.PID lda (pPs),y jsr CORE.PSFree.A @@ -249,6 +251,7 @@ CORE.Dispatch lda CORE.PSCount ldx #TSKMGR.DOEVENT jsr pCodeJmp Call DOEVENT function + dec IRQ.InKernel bcs .3 not for this PS, try next event in list jsr CORE.DestroyEvent this PS handled the EVT, destroy it... @@ -275,7 +278,16 @@ CORE.Dispatch lda CORE.PSCount .8 clc rts *-------------------------------------- -pCodeJmp jmp (pCode) +pCodeJmp lda pCode+1 + pha + lda pCode + pha + php + sei + inc IRQ.InKernel + rti + + jmp (pCode) *-------------------------------------- CORE.Quit clc rts @@ -440,6 +452,8 @@ CORE.PSLeave ldy #S.PS.ZP+ZPBIN.SIZE-1 rts *-------------------------------------- CORE.Sleep php + dec IRQ.InKernel + phy ldy #S.PS.A sta (pPs),y @@ -457,10 +471,13 @@ CORE.Sleep php sta (pPs),y pla get PC LO + clc + adc #1 Advance one byte because of return by RTI iny #S.PS.PC sta (pPs),y pla get PC HI + adc #0 iny #S.PS.PC+1 sta (pPs),y @@ -483,8 +500,7 @@ CORE.Sleep php .8 lda (pPs) ora #S.PS.F.SLEEP sta (pPs) - - + clc exit to kernel with CC rts *-------------------------------------- @@ -523,8 +539,9 @@ CORE.Resume ldy #S.PS.S lda (pPs),y ply - plp - rts + sei + inc IRQ.InKernel + rti *-------------------------------------- TSKMGR.EVENTCNT .BS 1 *-------------------------------------- @@ -547,7 +564,7 @@ CORE.Tick10t .BS 1 CORE.Counter .BS 1 CORE.PSCount .DA #0 CORE.LastPSID .DA #0 -CORE.S.PS0 .BS S.PS.PC+2 +CORE.S.PS0 .BS S.PS.hARGS+1 *-------------------------------------- MAN SAVE /A2OSX.SRC/SYS/KERNEL.S.CORE diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index e04bf8a1..d0e81ccc 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -49,16 +49,26 @@ AUTO 4,1 GP.SysCall dec IRQ.InKernel bit K.SYSCALL.BANK,x - bpl .8 in $E000, no BNK change + bmi .1 - sta .7+1 save A (Func Arg) + jsr .8 in $E000, no BNK change + + inc IRQ.InKernel + rts + +.1 sta .7+1 save A (Func Arg) lda K.SYSCALL.BANK,x Get Target BNK cmp $D000 #RRAMWRAMBNK1 or #RRAMWRAMBNK2 - beq .7 same as actual BNK...go restore A and JMP + bne .2 - stx .6+1 save X (Func ID) + jsr .7 same as actual BNK...go restore A and JMP + + inc IRQ.InKernel + rts + +.2 stx .6+1 save X (Func ID) tax set Target BNK in x lda $D000 get source BNK diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index fa124ac5..cf2091c1 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -583,6 +583,8 @@ 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 87d682f4..c775c9a6 100644 --- a/SYS/KERNEL.S.IRQ.txt +++ b/SYS/KERNEL.S.IRQ.txt @@ -14,12 +14,14 @@ AUTO 4,1 MSLOT .EQ $7f8 *-------------------------------------- K.IrqHAuxLC cld + + sec sta K.IrqHAuxLC.6+1 pla pha and #$10 BRK? - bne K.IrqHAuxLC.7 + bne K.IrqHAuxLC.6 stx K.IrqHAuxLC.5+1 sty K.IrqHAuxLC.4+1 @@ -66,7 +68,7 @@ K.IrqHAuxLC.3 pla pla sta $fe bvc K.IrqHAuxLC.4 no task switching - + php php make room for 2 additional bytes php keep track of C @@ -91,13 +93,11 @@ K.IrqHAuxLC.3 pla K.IrqHAuxLC.4 ldy #$ff Self Modified K.IrqHAuxLC.5 ldx #$ff Self Modified K.IrqHAuxLC.6 lda #$ff Self Modified - bcs K.IrqHAuxLC.8 not handled, pass to ProDOS - rti + bcc K.IrqHAuxLC.8 -K.IrqHAuxLC.7 lda K.IrqHAuxLC.6+1 - -K.IrqHAuxLC.8 dec IRQ.SkipA2osX Make regular ProDOS IRQ manager skip A2osX - jmp (K.IRQ.OldFFFE) + dec IRQ.SkipA2osX Make regular ProDOS IRQ manager skip A2osX + jmp (K.IRQ.OldFFFE) Not handled, pass to ProDOS +K.IrqHAuxLC.8 rti *-------------------------------------- * Called by : * - Kernel K.IrqHAuxLC @@ -130,9 +130,9 @@ K.IrqH.Switch inc IRQ.Tick bit A2osX.F A2osX.F.PMODE .EQ %01000000 bvc .8 - + lda IRQ.InKernel keep V flag set - bmi .8 + bmi .9 lda #$A0+'S eor SYS.BASL0+37 @@ -140,6 +140,10 @@ K.IrqH.Switch inc IRQ.Tick .8 clc exit with V flag set rts + +.9 clv + clc + rts *-------------------------------------- K.IrqH.DEV >LDYAI Dev.Table >STYA $fe