diff --git a/Internal/NKOpaque.a b/Internal/NKOpaque.a index ce3affd..5912821 100644 --- a/Internal/NKOpaque.a +++ b/Internal/NKOpaque.a @@ -466,15 +466,6 @@ BAT2U ds.l 1 ; 90 BAT2L ds.l 1 ; 94 BAT3U ds.l 1 ; 98 BAT3L ds.l 1 ; 9c -ExtraBATs ; the flag that enables these is never set? -ExtraBAT0U ds.l 1 ; a0 -ExtraBAT0L ds.l 1 ; a4 -ExtraBAT1U ds.l 1 ; a8 -ExtraBAT1L ds.l 1 ; ac -ExtraBAT2U ds.l 1 ; b0 -ExtraBAT2L ds.l 1 ; b4 -ExtraBAT3U ds.l 1 ; b8 -ExtraBAT3L ds.l 1 ; bc Size equ * endr diff --git a/Internal/NKPublic.a b/Internal/NKPublic.a index 7013eaa..5658cb5 100644 --- a/Internal/NKPublic.a +++ b/Internal/NKPublic.a @@ -211,17 +211,6 @@ _370 ds.l 1 ; -370 _36c ds.l 1 ; -36c _368 ds.l 1 ; -368 _364 ds.l 1 ; -364 -_360 ds.w 1 ; -360 -_35e ds.w 1 ; -35e -_35c ds.w 1 ; -35c -_35a ds.w 1 ; -35a -_358 ds.w 1 ; -358 -_356 ds.w 1 ; -356 -_354 ds.l 1 ; -354 -_350 ds.l 1 ; -350 -_34c ds.l 1 ; -34c -_348 ds.l 1 ; -348 -_344 ds.l 1 ; -344 EWAFiller ds.b 0x340 EndOfPSA diff --git a/NanoKernel/NKAddressSpaces.s b/NanoKernel/NKAddressSpaces.s index 07e1684..50b10eb 100644 --- a/NanoKernel/NKAddressSpaces.s +++ b/NanoKernel/NKAddressSpaces.s @@ -4665,22 +4665,6 @@ SpaceL2PUsingBATs ; LogicalPage *r8, MPAddressSpace *r9 // PhysicalPage *r17 _v2pguts beq @bat_yes - lwzu r16, 8(r18) - _v2pguts - beq @bat_yes - - lwzu r16, 8(r18) - _v2pguts - beq @bat_yes - - lwzu r16, 8(r18) - _v2pguts - beq @bat_yes - - lwzu r16, 8(r18) - _v2pguts - beq @bat_yes - lwzu r16, 8(r18) _v2pguts bne @bat_no diff --git a/NanoKernel/NKEquates.s b/NanoKernel/NKEquates.s index 22c0c02..5ed3a16 100644 --- a/NanoKernel/NKEquates.s +++ b/NanoKernel/NKEquates.s @@ -3,7 +3,7 @@ ;_______________________________________________________________________ -kNanoKernelVersion equ $0228 +kNanoKernelVersion equ $0227 ; PowerPC Machine Status Register (MSR) bits diff --git a/NanoKernel/NKMPCalls.s b/NanoKernel/NKMPCalls.s index 3d23770..1b77666 100644 --- a/NanoKernel/NKMPCalls.s +++ b/NanoKernel/NKMPCalls.s @@ -16,7 +16,7 @@ if &TYPE('NKDebugShim') != 'UNDEFINED' MaxMPCallCount equ 300 else -MaxMPCallCount equ 134 +MaxMPCallCount equ 133 endif @@ -1418,8 +1418,7 @@ KCStopScheduling ; OUTSIDE REFERER li r17, 0x00 stb r17, 0x0019(r31) mr r8, r31 - bl SchRdyTaskLater - bl CalculateTimeslice + bl SchRdyTaskNow mr r8, r31 bl FlagSchEval lwz r8, 0x064c(r1) @@ -1429,6 +1428,7 @@ KCStopScheduling ; OUTSIDE REFERER KCStopScheduling_0x94 _AssertAndRelease PSA.SchLock + Lock.Count, scratch=r16 + subi r10, r10, 4 b MPCall_6_0x78 @@ -2049,73 +2049,5 @@ KCRegisterExternalHandler - DeclareMPCall 133, MPCall_133 - -MPCall_133 ; OUTSIDE REFERER - - _Lock PSA.SchLock, scratch1=r16, scratch2=r17 - - cmpw r3, r0 - lwz r16, 0x0edc(r1) - li r17, 0x0b - blt MPCall_133_0x34 - and r3, r3, r17 - or r16, r16, r3 - b MPCall_133_0x3c - -MPCall_133_0x34 - orc r3, r3, r17 - and r16, r16, r3 - -MPCall_133_0x3c - stw r16, 0x0edc(r1) - srawi r16, r4, 16 - extsh r17, r4 - cmpwi r16, -0x01 - cmpwi cr1, r17, -0x01 - beq MPCall_133_0x60 - bgt MPCall_133_0x5c - li r16, 0x00 - -MPCall_133_0x5c - sth r16, PSA._360(r1) - -MPCall_133_0x60 - beq cr1, MPCall_133_0x70 - bgt cr1, MPCall_133_0x6c - li r17, 0x00 - -MPCall_133_0x6c - sth r17, PSA._35e(r1) - -MPCall_133_0x70 - srawi r16, r5, 16 - extsh r17, r5 - cmpwi r16, -0x01 - cmpwi cr1, r17, -0x01 - beq MPCall_133_0x90 - bgt MPCall_133_0x8c - li r16, 0x00 - -MPCall_133_0x8c - sth r16, PSA._35c(r1) - -MPCall_133_0x90 - beq cr1, MPCall_133_0xa0 - bgt cr1, MPCall_133_0x9c - li r17, 0x00 - -MPCall_133_0x9c - sth r17, PSA._35a(r1) - -MPCall_133_0xa0 -; r1 = kdp - bl ScreenConsole_redraw - -; r1 = kdp - b ReleaseAndReturnZeroFromMPCall - - - MPCall_Panic b panic diff --git a/NanoKernel/NKScheduler.s b/NanoKernel/NKScheduler.s index 8ede3d2..6a0a9fe 100644 --- a/NanoKernel/NKScheduler.s +++ b/NanoKernel/NKScheduler.s @@ -966,7 +966,7 @@ SchSwitchSpace cmplw r16, r17 lwz r17, AddressSpace.BAT3L(r8) beq cr1, @definitely_set_BAT3 - beq @skip_setting_BAT3 + beqlr @definitely_set_BAT3 mtspr dbat3u, r0 @@ -979,80 +979,6 @@ SchSwitchSpace @skip_setting_BAT3 - ; This is weird. If the hasExtraBATs flag (my name) is set in ProcessorInfo, - ; populate a second (undocumented?) set of BATs from the same struct. - - lwz r17, KDP.ProcessorInfo + NKProcessorInfo.ProcessorFlags(r1) - lwz r16, AddressSpace.ExtraBAT0U(r8) - rlwinm. r17, r17, 0, 31-NKProcessorInfo.hasExtraBATs, 31-NKProcessorInfo.hasExtraBATs - lwz r17, AddressSpace.ExtraBAT0U(r9) - beq @return - cmplw r16, r17 - lwz r17, AddressSpace.ExtraBAT0L(r8) - beq cr1, @definitely_set_ExtraBAT0 - beq @skip_setting_ExtraBAT0 - -@definitely_set_ExtraBAT0 - mtspr 0x238, r0 - mtspr 0x239, r17 - mtspr 0x238, r16 - mtspr 0x230, r0 - mtspr 0x231, r17 - mtspr 0x230, r16 -@skip_setting_ExtraBAT0 - - - lwz r16, AddressSpace.ExtraBAT1U(r8) - lwz r17, AddressSpace.ExtraBAT1U(r9) - cmplw r16, r17 - lwz r17, AddressSpace.ExtraBAT1L(r8) - beq cr1, @definitely_set_ExtraBAT1 - beq @skip_setting_ExtraBAT1 - -@definitely_set_ExtraBAT1 - mtspr 0x23a, r0 - mtspr 0x23b, r17 - mtspr 0x23a, r16 - mtspr 0x232, r0 - mtspr 0x233, r17 - mtspr 0x232, r16 -@skip_setting_ExtraBAT1 - - - lwz r16, AddressSpace.ExtraBAT2U(r8) - lwz r17, AddressSpace.ExtraBAT2U(r9) - cmplw r16, r17 - lwz r17, AddressSpace.ExtraBAT2L(r8) - beq cr1, @definitely_set_ExtraBAT2 - beq @skip_setting_ExtraBAT2 - -@definitely_set_ExtraBAT2 - mtspr 0x23c, r0 - mtspr 0x23d, r17 - mtspr 0x23c, r16 - mtspr 0x234, r0 - mtspr 0x235, r17 - mtspr 0x234, r16 -@skip_setting_ExtraBAT2 - - - lwz r16, AddressSpace.ExtraBAT3U(r8) - lwz r17, AddressSpace.ExtraBAT3U(r9) - cmplw r16, r17 - lwz r17, AddressSpace.ExtraBAT3L(r8) - beq cr1, @definitely_set_ExtraBAT3 - beq @skip_setting_ExtraBAT3 - -@definitely_set_ExtraBAT3 - mtspr 0x23e, r0 - mtspr 0x23f, r17 - mtspr 0x23e, r16 - mtspr 0x236, r0 - mtspr 0x237, r17 - mtspr 0x236, r16 -@skip_setting_ExtraBAT3 - - @return blr diff --git a/NanoKernel/NKScreenConsole.s b/NanoKernel/NKScreenConsole.s index 3596c85..49b02ec 100644 --- a/NanoKernel/NKScreenConsole.s +++ b/NanoKernel/NKScreenConsole.s @@ -18,60 +18,6 @@ ScreenConsoleFG equ 0x44444444 align 8 ; odd! ; > r1 = kdp -InitScreenConsole ; OUTSIDE REFERER - stmw r29, -0x0110(r1) - lis r30, -0x01 - ori r30, r30, 0x7000 - add r30, r30, r1 - addi r31, r30, 0x2000 - addi r30, r30, 0x04 - -InitScreenConsole_0x18 - cmplw r30, r31 - addi r29, r31, 0x04 - bge InitScreenConsole_0x2c - stwu r29, -0x1000(r31) - b InitScreenConsole_0x18 - -InitScreenConsole_0x2c - addi r31, r30, 0x1000 - stw r30, -0x0004(r31) - stw r30, PSA._404(r1) - stw r30, PSA._400(r1) - li r29, ScreenConsoleY - sth r29, PSA._360(r1) - li r29, ScreenConsoleX - sth r29, PSA._35e(r1) - li r29, ScreenConsoleHeight - sth r29, PSA._35c(r1) - li r29, ScreenConsoleWidth - sth r29, PSA._35a(r1) - li r29, 0x5e - sth r29, PSA._358(r1) - li r29, 0x30 - sth r29, PSA._356(r1) - lmw r29, -0x0110(r1) - blr - - - -; > r1 = kdp - -ScreenConsole_putchar ; OUTSIDE REFERER - lwz r30, PSA._404(r1) - stb r29, 0x0000(r30) - addi r30, r30, 0x01 - andi. r29, r30, 0xfff - stw r30, PSA._404(r1) - bnelr - lwz r30, -0x1000(r30) - stw r30, PSA._404(r1) - blr - - - -; > r1 = kdp - ScreenConsole_redraw ; OUTSIDE REFERER stmw r2, PSA._3e8(r1) mflr r14 @@ -124,8 +70,7 @@ ScreenConsole_redraw_0x90 beq ScreenConsole_redraw_0x74 beq cr1, ScreenConsole_redraw_0xe4 bl major_0x18e54 - lhz r17, PSA._358(r1) - cmpw r9, r17 + cmpwi r9, 0x5e blt ScreenConsole_redraw_0x74 ScreenConsole_redraw_0xc0 @@ -135,16 +80,13 @@ ScreenConsole_redraw_0xc0 ScreenConsole_redraw_0xcc bl funny_thing - lhz r17, PSA._356(r1) - cmpw r10, r17 + cmpwi r10, 0x30 blt ScreenConsole_redraw_0x74 stw r16, PSA._400(r1) b ScreenConsole_redraw_0x40 ScreenConsole_redraw_0xe4 - lhz r17, PSA._356(r1) - addi r17, r17, -0x01 - cmpw r10, r17 + cmpwi r10, 0x30-1 blt ScreenConsole_redraw_0x74 lwz r17, PSA.DecClockRateHzCopy(r1) slwi r25, r17, 2 @@ -342,18 +284,6 @@ major_0x18d5c_0x70 major_0x18d5c_0x88 isync mfmsr r22 - lhz r29, PSA._360(r1) - lhz r30, PSA._35c(r1) - subf r29, r29, r30 - li r30, 0x0a - divw r29, r29, r30 - sth r29, PSA._356(r1) - lhz r29, PSA._35e(r1) - lhz r30, PSA._35a(r1) - subf r29, r29, r30 - li r30, 0x06 - divw r29, r29, r30 - sth r29, PSA._358(r1) mtlr r13 blr @@ -363,13 +293,10 @@ major_0x18e24 ; OUTSIDE REFERER mflr r12 major_0x18e24_0x4 - lhz r25, PSA._358(r1) - cmpw cr1, r9, r25 lbz r25, 0x0000(r21) cmplwi r25, 0x00 addi r21, r21, 0x01 beq major_0x18e24_0x28 - bge cr1, major_0x18e24_0x4 bl major_0x18e54 b major_0x18e24_0x4 @@ -391,12 +318,6 @@ major_0x18e54 ; OUTSIDE REFERER mullw r7, r7, r6 add r7, r7, r27 add r7, r7, r3 - lhz r27, PSA._360(r1) - lhz r28, PSA._35e(r1) - mullw r27, r5, r27 - mullw r28, r6, r28 - add r7, r7, r27 - add r7, r7, r28 subf. r27, r3, r7 blt major_0x18e54_0x174 li r8, 0x00 @@ -500,8 +421,7 @@ funny_thing_0xc mflr r12 funny_thing_0x10 - lhz r25, PSA._358(r1) - cmpw r9, r25 + cmpwi r9, 0x5e bge funny_thing_0x28 li r25, 0x20 bl major_0x18e54 diff --git a/NanoKernel/NKThud.s b/NanoKernel/NKThud.s index f0781ce..dcb5cfb 100644 --- a/NanoKernel/NKThud.s +++ b/NanoKernel/NKThud.s @@ -704,7 +704,7 @@ major_0x18040_0x9c cmpwi cr1, r17, -0x100 bgt major_0x18040_0x100 blt cr1, major_0x18040_0x100 - _log 'Looks like interrupt stack overflow by os or application^n' + _log 'Looks like interrupt stack underflow by os or application^n' major_0x18040_0x100 mtlr r16 @@ -1232,4 +1232,48 @@ prereturn ; OUTSIDE REFERER blr + + +; > r1 = kdp + +InitScreenConsole ; OUTSIDE REFERER + stmw r29, -0x0110(r1) + lis r30, -0x01 + ori r30, r30, 0x7000 + add r30, r30, r1 + addi r31, r30, 0x2000 + addi r30, r30, 0x04 + +InitScreenConsole_0x18 + cmplw r30, r31 + addi r29, r31, 0x04 + bge InitScreenConsole_0x2c + stwu r29, -0x1000(r31) + b InitScreenConsole_0x18 + +InitScreenConsole_0x2c + addi r31, r30, 0x1000 + stw r30, -0x0004(r31) + stw r30, PSA._404(r1) + stw r30, PSA._400(r1) + lmw r29, -0x0110(r1) + blr + + + +; > r1 = kdp + +ScreenConsole_putchar ; OUTSIDE REFERER + lwz r30, PSA._404(r1) + stb r29, 0x0000(r30) + addi r30, r30, 0x01 + andi. r29, r30, 0xfff + stw r30, PSA._404(r1) + bnelr + lwz r30, -0x1000(r30) + stw r30, PSA._404(r1) + blr + + + align 5 diff --git a/NanoKernel/NKTranslation.s b/NanoKernel/NKTranslation.s index c3d362b..1da5604 100644 --- a/NanoKernel/NKTranslation.s +++ b/NanoKernel/NKTranslation.s @@ -2065,19 +2065,19 @@ FDP_1024 FDP_104c oris r11, r11, 0x0200 lbz r21, 0x0000(r23) - b FDP_00E4 + b FDP_00E8 FDP_1058 oris r11, r11, 0x0200 lhz r21, 0x0000(r23) - b FDP_00E4 + b FDP_00E8 FDP_1064 oris r11, r11, 0x0200 lwz r21, 0x0000(r23) - b FDP_00E4 + b FDP_00E8 diff --git a/NanoKernel/NKVMCalls.s b/NanoKernel/NKVMCalls.s index 4bff6f1..cd36d11 100644 --- a/NanoKernel/NKVMCalls.s +++ b/NanoKernel/NKVMCalls.s @@ -216,6 +216,11 @@ VMFinalInit ; OUTSIDE REFERER ble @loop @skip +foo set KDP.NanoKernelInfo + NKNanoKernelInfo.ConfigFlags + lwz r8, foo(r1) + _bclr r8, r8, 28 + stw r8, foo(r1) + mfsprg r8, 0 lmw r29, EWA.r29(r8) b VMReturn1