From 020bfcdcbfc8171f233632facf71048822d3f5d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9my=20GIBERT?= Date: Thu, 24 Sep 2020 17:31:48 +0200 Subject: [PATCH] Kernel 0.94 --- .Floppies/A2OSX.BUILD.po | Bin 33553920 -> 33553920 bytes BIN/SHUTDOWN.S.txt | 199 +++++++++++++++++++++++++++++++-------- SYS/KERNEL.S.CORE.txt | 99 +++++++++++++------ SYS/KERNEL.S.GP.txt | 8 +- SYS/KERNEL.S.INIT.txt | 63 ++++++++----- SYS/KERNEL.S.IRQ.txt | 36 +++---- 6 files changed, 294 insertions(+), 111 deletions(-) diff --git a/.Floppies/A2OSX.BUILD.po b/.Floppies/A2OSX.BUILD.po index 374152e6d871426f632b1b43360a905c9118c374..00722017fcc8415cbe4fe0b27423aff71a2c4dff 100644 GIT binary patch delta 39313 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 delta 35582 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 L.MSG.SHUTDOWN - >SYSCALL PutS +CS.RUN lda #DEFAULT.TIMEOUT + sta Timeout + +.1 inc Index + lda Index + >SYSCALL ArgV + bcs .8 + + >STYA ZPPtr1 + >DEBUG + lda (ZPPtr1) + cmp #'-' + beq .2 + + lda ArgPtr+1 + bne .9 + + >LDYA ZPPtr1 + >STYA ArgPtr + bra .1 + +.2 ldy #2 + lda (ZPPtr1),y + bne .9 + + dey + lda (ZPPtr1),y + + cmp #'a' + bcc .3 + + cmp #'z'+1 + bcs .3 + + eor #$20 + +.3 cmp #'T' + bne .4 + + inc Index + lda Index + >SYSCALL ArgV + bcs .9 + + >SYSCALL atol + bcs .9 + + >PULLL Timeout + + bra .1 + +.4 cmp #'R' + bne .9 + + sec + ror bRestart + bra .1 + +.8 jsr CS.RUN.WAIT + bcs .99 jsr CS.RUN.PS jsr CS.RUN.DEV - + >PUSHBI 1 - - >PUSHBI 1 INITD + +* lda #1 INITD >SYSCALL Kill lda #0 sec +.99 rts +*-------------------------------------- +.9 >PUSHW L.MSG.USAGE + >PUSHBI 0 + >SYSCALL PrintF + + lda #E.SYN + sec + rts +*-------------------------------------- +CS.RUN.WAIT >PUSHW L.MSG.SHUTDOWN + >PUSHL Timeout + >PUSHBI 4 + >SYSCALL PrintF + +.1 >SLEEP + + lda bSec + bpl .1 + + stz bSec + + lda bTimeout + bpl CS.RUN.WAIT + + >PUSHW L.MSG.CRLF + >PUSHBI 0 + >SYSCALL PrintF + + clc rts *-------------------------------------- CS.RUN.PS stz Count ldx #0 stx Index - + .1 lda PS.Table.hPS,x beq .7 >SYSCALL GetMemPtr >STYA ZPPtr1 - + .2 lda (ZPPtr1) bpl .4 HOLD ? - + ldy #S.PS.CPID lda (ZPPtr1),y .3 jsr CS.GetPSByID bra .2 - + .4 ldy #S.PS.S lda (ZPPtr1),y cmp #S.PS.S.QUIT beq .6 - + ldy #S.PS.PID lda (ZPPtr1),y beq .7 don't kill PS0 - + cmp #1 beq .7 don't kill INITD - + cmp (pPS),y don't kill myself beq .7 - + jsr CS.RUN.KILL - + .5 ldy #S.PS.PPID lda (ZPPtr1),y bne .3 go kill parent if not 0 - + .6 inc Count .7 >SLEEP @@ -111,10 +207,10 @@ CS.RUN.PS stz Count ldx Index cpx #K.PS.MAX bne .1 - + lda Count bne CS.RUN.PS - + sec rts *-------------------------------------- @@ -122,17 +218,17 @@ CS.RUN.KILL >PUSHW L.MSG.PS ldy #S.PS.PID lda (ZPPtr1),y >PUSHA - + ldy #S.PS.hARGV lda (ZPPtr1),y >SYSCALL GetMemPtr >PUSHYA - + >PUSHBI 3 >SYSCALL PrintF - + >PUSHBI 1 - + ldy #S.PS.PID lda (ZPPtr1),y >SYSCALL Kill @@ -140,7 +236,7 @@ CS.RUN.KILL >PUSHW L.MSG.PS *-------------------------------------- CS.RUN.DEV ldx #1 stx Index - + .1 lda Dev.Table-1,x sta ZPPtr1 lda Dev.Table,x @@ -149,7 +245,7 @@ CS.RUN.DEV ldx #1 >PUSHW L.MSG.DEV >PUSHB Index - + lda ZPPtr1 clc adc #S.FD.DEV @@ -157,18 +253,18 @@ CS.RUN.DEV ldx #1 lda ZPPtr1+1 adc /S.FD.DEV >PUSHYA - + >PUSHBI 3 >SYSCALL PrintF - - + + .7 inc Index inc Index ldx Index cpx #K.DEV.MAX*2+1 - bne .1 - + bne .1 + rts *-------------------------------------- CS.GetPSByID ldx #0 @@ -183,34 +279,59 @@ CS.GetPSByID ldx #0 >SYSCALL GetMemPtr >STYA ZPPtr1 plx - + pla - + ldy #S.PS.PID cmp (ZPPtr1),y beq .8 - + .7 inx cpx #K.PS.MAX bne .1 -* sec +* sec rts - + .8 clc rts *-------------------------------------- -CS.DOEVENT sec +CS.DOEVENT lda (pEvent) + bpl .9 + asl + bpl .9 + + sta bSec + + ldx #4 + ldy #0 + + clc + +.1 lda Timeout,y + sbc #0 + sta Timeout,y + iny + dex + bne .1 + + ror + eor #$80 + sta bTimeout + +.9 sec rts *-------------------------------------- CS.QUIT clc rts *-------------------------------------- -CS.END +CS.END MSG.USAGE .AS "Usage : SHUTDOWN \r\n" - .AZ " -T : \r\n" -MSG.SHUTDOWN .AZ "SHUTDOWN:System..." + .AS " -R : Restart System\r\n" + .AS " -T : default to 60" +MSG.CRLF .AZ "\r\n" +MSG.SHUTDOWN .AZ "\r\e[KSHUTDOWN:System will stop in %u seconds..." MSG.PS .AZ "SHUTDOWN:Killing process %3d, %s\r\n" MSG.DEV .AZ "SHUTDOWN:Closing device %3d, %s\r\n" *-------------------------------------- diff --git a/SYS/KERNEL.S.CORE.txt b/SYS/KERNEL.S.CORE.txt index 8fbbf75d..65fede5e 100644 --- a/SYS/KERNEL.S.CORE.txt +++ b/SYS/KERNEL.S.CORE.txt @@ -1,15 +1,9 @@ NEW AUTO 3,1 *-------------------------------------- -CORE.Quit ldx #5 +CORE.Run ldx #1 -.1 stz K.MLI.PARAMS,x - dex - bpl .1 - - >MLICALL MLIQUIT -*-------------------------------------- -CORE.Run ldx #1 Skip PS0 + bra .80 Skip PS0 .1 stx CORE.PSIndex @@ -64,8 +58,10 @@ CORE.Run ldx #1 Skip PS0 >PUSHBI 2 ldy #S.PS.PID lda (pPS),y -* cmp #1 INITD ? -* beq CORE.Quit + cmp #1 INITD ? + bne .6 + + jmp CORE.Quit .6 >SYSCALL2 Kill bra .8 @@ -74,7 +70,7 @@ CORE.Run ldx #1 Skip PS0 .8 ldx CORE.PSIndex inx - cpx CORE.PSCount +.80 cpx CORE.PSCount bne .1 *-------------------------------------- CORE.Events jsr CORE.GetEvents @@ -132,6 +128,23 @@ CORE.Events jsr CORE.GetEvents >SYSCALL2 IOCTL .8 jmp CORE.Run *-------------------------------------- +CORE.Quit jsr CORE.IRQ.None.Off + + lda IRQ.INTNUM + sta K.MLI.PARAMS+1 + + >MLICALL MLIDEALLOCIRQ + + ldx #5 + +.1 stz K.MLI.PARAMS+1,x + dex + bpl .1 + + lda #4 + ldx #MLIQUIT + jmp GP.MLICall +*-------------------------------------- CORE.UpdateParentPS tax save RC From INIT or RUN @@ -243,7 +256,8 @@ CORE.GetEvents lda #Evt.Table * CC: Event Cleared *-------------------------------------- CORE.Dispatch ldx #1 skip PS0 - + bra .80 + .1 stx CORE.PSIndex lda PS.Table.hPS,x @@ -296,9 +310,11 @@ CORE.Dispatch ldx #1 skip PS0 .5 ldx CORE.PSIndex inx - cpx CORE.PSCount +.80 cpx CORE.PSCount bne .1 + * sec + rts *-------------------------------------- * X unmodified @@ -474,40 +490,43 @@ CORE.EvtIndex .BS 1 CORE.EvtCount .BS 1 *-------------------------------------- * Called by : -* - Kernel K.IrqHAuxLC +* - Kernel IRQ Manager (AuxLC) * - ProDOS IRQ Manager (GP) *-------------------------------------- -K.IrqH.IIGS lda IO.IIGS.INTFLAG +CORE.IRQ.IIGS lda IO.IIGS.INTFLAG and #$08 - beq K.IrqH.DEV + beq CORE.IRQ.DEV stz IO.IIGS.CLRVBLINT - bra K.IrqH.Switch + bra CORE.IRQ.Switch *-------------------------------------- -K.IrqH.TCLOCK ldy IRQ.VBL.n0 +CORE.IRQ.TCLOCK ldy IRQ.VBL.n0 lda $c080,y and #$20 - beq K.IrqH.DEV + beq CORE.IRQ.DEV lda $c088,y lda $c080,y - bra K.IrqH.Switch + bra CORE.IRQ.Switch *-------------------------------------- -K.IrqH.VBL -K.IrqH.VBL.MSM jsr $FFFF SELF MODIFIED,SERVEMOUSE - bcs K.IrqH.DEV Not From Mouse +CORE.IRQ.MOUSE jsr $FFFF SELF MODIFIED,SERVEMOUSE + bcs CORE.IRQ.DEV Not From Mouse + ldx IRQ.VBL.0n lda MOUSESTSx,x and #MOUSESTSx.INTVBL IRQ was caused by VBL ? - beq K.IrqH.DEV - ldx K.IrqH.VBL.MRM+2 $Cn + beq CORE.IRQ.DEV + + ldx CORE.IRQ.MOUSE.2+2 $Cn ldy IRQ.VBL.n0 -K.IrqH.VBL.MRM jsr $FFFF SELF MODIFIED,READMOUSE + +CORE.IRQ.MOUSE.2 + jsr $FFFF SELF MODIFIED,READMOUSE *-------------------------------------- -K.IrqH.Switch inc IRQ.Tick +CORE.IRQ.Switch inc IRQ.Tick dec CORE.CPUStatCnt bne .2 @@ -547,7 +566,7 @@ K.IrqH.Switch inc IRQ.Tick .8 clc exit with V flag set rts *-------------------------------------- -K.IrqH.DEV ldx #0 +CORE.IRQ.DEV ldx #0 .1 lda IRQ.Vectors+1,x beq .9 sta .10+2 @@ -565,6 +584,30 @@ K.IrqH.DEV ldx #0 .8 clv clear V (no task switching) rts *-------------------------------------- +CORE.IRQ.IIGS.Off + lda #$08 + trb IO.IIGS.INTEN + + rts +CORE.IRQ.TCLOCK.Off + ldx IRQ.VBL.n0 + stz $c080,x + + ldx IRQ.VBL.0n + sta CLRPAGE2 + stz $478,x + stz $7f8,x + + rts +CORE.IRQ.MOUSE.Off + ldy CORE.IRQ.MOUSE.Off.1+2 Cn + ldy IRQ.VBL.n0 + lda #0 +CORE.IRQ.MOUSE.Off.1 + jmp $ffff SELF MODIFIED +CORE.IRQ.None.Off + rts +*-------------------------------------- IRQ.InKernel .BS 1 IRQ.InLib .BS 1 IRQ.SkipA2osX .BS 1 diff --git a/SYS/KERNEL.S.GP.txt b/SYS/KERNEL.S.GP.txt index 8a9eda5a..aa15d10d 100644 --- a/SYS/KERNEL.S.GP.txt +++ b/SYS/KERNEL.S.GP.txt @@ -373,17 +373,17 @@ GO.EXIT.JMP jmp $FFFF SELF MODIFIED * must exit with RTS * - CC if IRQ cleared, CS if NOT *-------------------------------------- -GP.IrqH cld +GP.IRQ cld bit IRQ.SkipA2osX After A2osX IRQ.H ? - bmi GP.IrqH.Exit + bmi GP.IRQ.Exit sta SETALTZP switch to aux LC tsx stx A2osX.SaveSM ldx A2osX.SaveSX txs -GP.IrqH.JSR jsr K.IrqH.DEV SELF MODIFIED +GP.IRQ.JSR jsr CORE.IRQ.DEV SELF MODIFIED tsx go back to Main stx A2osX.SaveSX ldx A2osX.SaveSM @@ -391,7 +391,7 @@ GP.IrqH.JSR jsr K.IrqH.DEV SELF MODIFIED sta CLRALTZP rts -GP.IrqH.Exit stz IRQ.SkipA2osX reset flag +GP.IRQ.Exit stz IRQ.SkipA2osX reset flag sec rts *-------------------------------------- diff --git a/SYS/KERNEL.S.INIT.txt b/SYS/KERNEL.S.INIT.txt index 8a5884ca..13f0a732 100644 --- a/SYS/KERNEL.S.INIT.txt +++ b/SYS/KERNEL.S.INIT.txt @@ -22,7 +22,7 @@ Kernel.Init2 sei >LDYA PAKME.MAIN >STYA ZPInBufPtr - >LDYAI CORE.Run + >LDYAI A2osX.EndTables jsr A2osX.Unpak >LDYA PAKME.AUX @@ -595,6 +595,7 @@ CPU.Init.Z80 >PUSHWI MSG.Z80 >PUSHBI 1 >SYSCALL2 printf rts + .9 >LDYAI MSG.Z80.KO >SYSCALL2 puts rts @@ -793,7 +794,7 @@ DevMgrInit.AddBDev >PUSHWI FD.BDEV >PUSHWI FD.BDEV.NAME >SYSCALL2 MKDev -DevMgrInit.AddBDev.RTS + rts *-------------------------------------- * Setup AuxLC $FFFE->Kernel IRQ Handler @@ -805,11 +806,11 @@ IrqMgrInit >LDYAI MSG.IRQ php sei >LDYA $FFFE - >STYA K.IrqHAuxLC.JMP+1 - >LDYAI K.IrqHAuxLC + >STYA IRQ.JMP+1 + >LDYAI IRQ.Handler >STYA $FFFE - >LDYAI GP.IrqH + >LDYAI GP.IRQ >STYA K.MLI.PARAMS+2 >MLICALL MLIALLOCIRQ @@ -831,12 +832,19 @@ IrqMgrInit >LDYAI MSG.IRQ jsr IrqMgrInit.HZ2Tick - >LDYAI K.IrqH.IIGS + >LDYAI CORE.IRQ.IIGS jsr IrqMgrInit.SetV + >LDYAI CORE.IRQ.IIGS.Off + >STYA CORE.Quit+1 + >LDYAI MSG.IRQ.IIGS bra .8 +.9 plp + sec + rts + .1 cmp #A2osX.HWType.IIc beq .2 @@ -845,9 +853,12 @@ IrqMgrInit >LDYAI MSG.IRQ lda #"C" sta IRQ.Mode - >LDYAI K.IrqH.TCLOCK + >LDYAI CORE.IRQ.TCLOCK jsr IrqMgrInit.SetV - + + >LDYAI CORE.IRQ.TCLOCK.Off + >STYA CORE.Quit+1 + >LDYAI MSG.IRQ.CLOCK bra .8 @@ -856,10 +867,13 @@ IrqMgrInit >LDYAI MSG.IRQ lda #"V" sta IRQ.Mode - >LDYAI K.IrqH.VBL + >LDYAI CORE.IRQ.MOUSE jsr IrqMgrInit.SetV - >LDYAI MSG.IRQ.VBL + >LDYAI CORE.IRQ.MOUSE.Off + >STYA CORE.Quit+1 + + >LDYAI MSG.IRQ.MOUSE bra .8 .3 jsr IrqMgrInit.HZ2Tick @@ -871,13 +885,9 @@ IrqMgrInit >LDYAI MSG.IRQ .8 >SYSCALL2 puts clc rts - -.9 plp - sec - rts *-------------------------------------- -IrqMgrInit.SetV >STYA K.IrqHAuxLC.JSR+1 - >STYA GP.IrqH.JSR+1 +IrqMgrInit.SetV >STYA IRQ.JSR+1 + >STYA GP.IRQ.JSR+1 rts *-------------------------------------- IrqMgrInit.TClock @@ -915,12 +925,15 @@ IrqMgrInit.TClock sty IRQ.VBL.n0 lda #A2osX.S.CLK sta A2osX.S,x + php sei lda #$40+$20 Enable interrupt + 64Hz sta $c080,y - lda #$40 + sta CLRPAGE2 + + lda #$40 sta $478,x sta $7f8,x @@ -959,8 +972,9 @@ IrqMgrInit.Mouse .4 lda ZPPtr1+1 sta .11+2 - sta K.IrqH.VBL.MSM+2 - sta K.IrqH.VBL.MRM+2 + sta CORE.IRQ.MOUSE.Off.1+2 + sta CORE.IRQ.MOUSE+2 + sta CORE.IRQ.MOUSE.2+2 and #$0f sta IRQ.VBL.0n asl @@ -975,7 +989,10 @@ IrqMgrInit.Mouse bit RROMBNK2 Renable ROM to allow MOUSE II firmware works properly ldy #INITMOUSE jsr .10 + ldy #SETMOUSE + lda (ZPPtr1),y + sta CORE.IRQ.MOUSE.Off.1+1 lda #MOUSEMODx.INTVBL+MOUSEMODx.ACTIVE jsr .10 @@ -983,17 +1000,19 @@ IrqMgrInit.Mouse bit RRAMWRAMBNK1 ldy #SERVEMOUSE lda (ZPPtr1),y - sta K.IrqH.VBL.MSM+1 + sta CORE.IRQ.MOUSE+1 ldy #READMOUSE lda (ZPPtr1),y - sta K.IrqH.VBL.MRM+1 + sta CORE.IRQ.MOUSE.2+1 jsr IrqMgrInit.HZ2Tick dec CORE.IRQMode + plp clc rts + .9 plp sec rts @@ -1196,7 +1215,7 @@ DRV.BLKDEV .DA DRV.RamDrive *-------------------------------------- MSG.IRQ .AZ "Interrupt Manager..." MSG.IRQ.IIGS .AZ " Apple IIgs VBL IRQ Activated." -MSG.IRQ.VBL .AZ " Mouse Card VBL IRQ Activated." +MSG.IRQ.MOUSE .AZ " Mouse Card VBL IRQ Activated." MSG.IRQ.CLOCK .AZ " Clock Card IRQ Activated." MSG.IRQ.POLL .AZ " Polling Mode." MSG.EVT .AZ "Event Manager..." diff --git a/SYS/KERNEL.S.IRQ.txt b/SYS/KERNEL.S.IRQ.txt index 37e4cc62..5eee17b2 100644 --- a/SYS/KERNEL.S.IRQ.txt +++ b/SYS/KERNEL.S.IRQ.txt @@ -12,19 +12,19 @@ NEW *-------------------------------------- MSLOT .EQ $7f8 *-------------------------------------- -K.IrqHAuxLC.BRK jmp K.IrqHAuxLC.6 +*IRQ.BRK jmp IRQ.6 *-------------------------------------- -K.IrqHAuxLC cld +IRQ.Handler cld - sta K.IrqHAuxLC.6+1 + sta IRQ.6+1 pla pha and #$10 BRK? -* bne K.IrqHAuxLC.BRK +* bne IRQ.BRK bne * - stx K.IrqHAuxLC.5+1 - sty K.IrqHAuxLC.4+1 + stx IRQ.5+1 + sty IRQ.4+1 lda RDPAGE2 pha @@ -43,7 +43,7 @@ K.IrqHAuxLC cld pha sta CLRCXROM Enable access to slot C800 space -K.IrqHAuxLC.JSR jsr K.IrqH.DEV SELF MODIFIED +IRQ.JSR jsr CORE.IRQ.DEV SELF MODIFIED ldx #CLRCXROM @@ -56,17 +56,17 @@ K.IrqHAuxLC.JSR jsr K.IrqH.DEV SELF MODIFIED pla Get back MSLOT sta MSLOT - sta K.IrqHAuxLC.2+2 + sta IRQ.2+2 and #$F0 eor #$C0 ....mmm...not looking like Cn.... - bne K.IrqHAuxLC.3 + bne IRQ.3 sta $CFFF Release $C800 -K.IrqHAuxLC.2 lda $ff00 SELF MODIFIED +IRQ.2 lda $ff00 SELF MODIFIED -K.IrqHAuxLC.3 pla Must keep Carry +IRQ.3 pla Must keep Carry bpl .1 sta SETWRITEAUX @@ -88,7 +88,7 @@ K.IrqHAuxLC.3 pla Must keep Carry sta SETPAGE2 -.30 bvc K.IrqHAuxLC.4 if not V, skip task switching +.30 bvc IRQ.4 if not V, skip task switching tsx Check Stack if before "dec IRQ.InKernel" cpx #$fc $1ff-PChi-PClo-P = $1fc @@ -123,15 +123,15 @@ K.IrqHAuxLC.3 pla Must keep Carry .8 clc -K.IrqHAuxLC.4 ldy #$ff Self Modified -K.IrqHAuxLC.5 ldx #$ff Self Modified -K.IrqHAuxLC.6 lda #$ff Self Modified - bcc K.IrqHAuxLC.8 +IRQ.4 ldy #$ff Self Modified +IRQ.5 ldx #$ff Self Modified +IRQ.6 lda #$ff Self Modified + bcc IRQ.8 dec IRQ.SkipA2osX Make regular ProDOS IRQ manager skip A2osX -K.IrqHAuxLC.JMP jmp $FFFF SELF MODIFIED Not handled, pass to ProDOS +IRQ.JMP jmp $FFFF SELF MODIFIED Not handled, pass to ProDOS -K.IrqHAuxLC.8 rti +IRQ.8 rti *-------------------------------------- MAN SAVE USR/SRC/SYS/KERNEL.S.IRQ