From c5c5b784cbb319a21409fe57574379ae302a3334 Mon Sep 17 00:00:00 2001 From: Elliot Nunn Date: Sun, 19 Nov 2017 12:11:07 +0800 Subject: [PATCH] Initial commit --- .gitignore | 6 + BuildResults/ThisFolderMustExist | 0 ConfigInfo.s | 160 + EasyBuild | 5 + Emulator.x | Bin 0 -> 655720 bytes Internal/EmulatorPublic.a | 125 + Internal/InfoRecords.a | 553 ++++ Internal/NKOpaque.a | 544 ++++ Internal/NKPublic.a | 1001 +++++++ Linker/LinkPowerROM | 151 + Linker/LinkPowerROM.c | 216 ++ MakeFile | 60 + NanoKernel/InnerMakeFile | 42 + NanoKernel/MakeFile | 9 + NanoKernel/NKAdditions.s | 61 + NanoKernel/NKAddressSpaceMPCalls.s | 4454 ++++++++++++++++++++++++++++ NanoKernel/NKBuiltinInit.s | 1379 +++++++++ NanoKernel/NKCacheCalls.s | 300 ++ NanoKernel/NKConsoleLog.s | 802 +++++ NanoKernel/NKEquates.s | 50 + NanoKernel/NKIndex.s | 298 ++ NanoKernel/NKInit.s | 2134 +++++++++++++ NanoKernel/NKInterrupts.s | 2851 ++++++++++++++++++ NanoKernel/NKMPCalls.s | 2672 +++++++++++++++++ NanoKernel/NKMacros.s | 192 ++ NanoKernel/NKPaging.s | 753 +++++ NanoKernel/NKPoolAllocator.s | 530 ++++ NanoKernel/NKPowerCalls.s | 579 ++++ NanoKernel/NKPrimaryIntHandlers.s | 1268 ++++++++ NanoKernel/NKProcFlagsTbl.s | 72 + NanoKernel/NKProcInfoTbl.s | 52 + NanoKernel/NKQueues.s | 2526 ++++++++++++++++ NanoKernel/NKRTASCalls.s | 190 ++ NanoKernel/NKReplacementInit.s | 480 +++ NanoKernel/NKScheduler.s | 2192 ++++++++++++++ NanoKernel/NKScreenConsole.s | 1313 ++++++++ NanoKernel/NKSleep.s | 598 ++++ NanoKernel/NKTasks.s | 1569 ++++++++++ NanoKernel/NKThud.s | 1369 +++++++++ NanoKernel/NKTimers.s | 1002 +++++++ NanoKernel/NKTranslation.s | 4374 +++++++++++++++++++++++++++ NanoKernel/NKVMCalls.s | 1988 +++++++++++++ NanoKernel/NanoKernel.s | 59 + PPCExceptionTable.s | 483 +++ README.md | 59 + RomMondo.bin | Bin 0 -> 3145728 bytes SetFileTypes.sh | 3 + 47 files changed, 39524 insertions(+) create mode 100644 .gitignore create mode 100644 BuildResults/ThisFolderMustExist create mode 100644 ConfigInfo.s create mode 100644 EasyBuild create mode 100644 Emulator.x create mode 100644 Internal/EmulatorPublic.a create mode 100644 Internal/InfoRecords.a create mode 100644 Internal/NKOpaque.a create mode 100644 Internal/NKPublic.a create mode 100644 Linker/LinkPowerROM create mode 100644 Linker/LinkPowerROM.c create mode 100644 MakeFile create mode 100644 NanoKernel/InnerMakeFile create mode 100644 NanoKernel/MakeFile create mode 100644 NanoKernel/NKAdditions.s create mode 100644 NanoKernel/NKAddressSpaceMPCalls.s create mode 100644 NanoKernel/NKBuiltinInit.s create mode 100644 NanoKernel/NKCacheCalls.s create mode 100644 NanoKernel/NKConsoleLog.s create mode 100644 NanoKernel/NKEquates.s create mode 100644 NanoKernel/NKIndex.s create mode 100644 NanoKernel/NKInit.s create mode 100644 NanoKernel/NKInterrupts.s create mode 100644 NanoKernel/NKMPCalls.s create mode 100644 NanoKernel/NKMacros.s create mode 100644 NanoKernel/NKPaging.s create mode 100644 NanoKernel/NKPoolAllocator.s create mode 100644 NanoKernel/NKPowerCalls.s create mode 100644 NanoKernel/NKPrimaryIntHandlers.s create mode 100644 NanoKernel/NKProcFlagsTbl.s create mode 100644 NanoKernel/NKProcInfoTbl.s create mode 100644 NanoKernel/NKQueues.s create mode 100644 NanoKernel/NKRTASCalls.s create mode 100644 NanoKernel/NKReplacementInit.s create mode 100644 NanoKernel/NKScheduler.s create mode 100644 NanoKernel/NKScreenConsole.s create mode 100644 NanoKernel/NKSleep.s create mode 100644 NanoKernel/NKTasks.s create mode 100644 NanoKernel/NKThud.s create mode 100644 NanoKernel/NKTimers.s create mode 100644 NanoKernel/NKTranslation.s create mode 100644 NanoKernel/NKVMCalls.s create mode 100644 NanoKernel/NanoKernel.s create mode 100644 PPCExceptionTable.s create mode 100644 README.md create mode 100644 RomMondo.bin create mode 100755 SetFileTypes.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a02b845 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.DS_Store +BuildResults/ +*.NJ +*.tool +RomMondo.bin.x +*.dmg diff --git a/BuildResults/ThisFolderMustExist b/BuildResults/ThisFolderMustExist new file mode 100644 index 0000000..e69de29 diff --git a/ConfigInfo.s b/ConfigInfo.s new file mode 100644 index 0000000..6dd5486 --- /dev/null +++ b/ConfigInfo.s @@ -0,0 +1,160 @@ +; ROM version of NKConfigurationInfo struct, based on Mac OS ROM 8=9=10. +; Lives at ROM + 0x30d000 (and other addresses on OldWorld). + +; From start of ConfigInfo to end of LoMemInit = 4k: + + + +; Auto-align fields + + aligning on + + + + import RomTop, RomBtm + import Mac68kRomTop, Mac68kRomBtm + import ExTblTop + import NKTop + import EmTop, EmBtm, EmEntry, EmKernelTrapTable + import OpcodeTblTop, OpcodeTblBtm + + + +ConfigInfo + +; These sums are not checked on NewWorld, but :Tools:ToolSource:RiscLayout.c calcs them anyway + dcb.l 8, 0 ; 000 ; ROMByteCheckSums ; ROM Checksums - one word for each of 8 byte lanes + dcb.l 2, 0 ; 020 ; ROMCheckSum64 ; ROM Checksum - 64 bit sum of doublewords + + dc.l RomTop-ConfigInfo ; 028 ; ROMImageBaseOffset ; Offset of Base of total ROM image + dc.l RomBtm-RomTop ; 02c ; ROMImageSize ; Number of bytes in ROM image + dc.l 0 ; 030 ; ROMImageVersion ; ROM Version number for entire ROM + +; ROM component Info (offsets are from base of ConfigInfo page) + dc.l Mac68kRomTop-ConfigInfo ; 034 ; Mac68KROMOffset ; Offset of base of Macintosh 68K ROM + dc.l Mac68kRomBtm-Mac68kRomTop ; 038 ; Mac68KROMSize ; Number of bytes in Macintosh 68K ROM + + dc.l ExTblTop-ConfigInfo ; 03c ; ExceptionTableOffset ; Offset of base of PowerPC Exception Table Code + dc.l 0xc000 ; 040 ; ExceptionTableSize ; Number of bytes in PowerPC Exception Table Code (generous) + + dc.l RomTop+0x320000-ConfigInfo ; 044 ; HWInitCodeOffset ; Offset of base of Hardware Init Code (no longer exists) + dc.l 0x10000 ; 048 ; HWInitCodeSize ; Number of bytes in Hardware Init Code + + dc.l NKTop-ConfigInfo ; 04c ; KernelCodeOffset ; Offset of base of NanoKernel Code + dc.l 0x10000 ; 050 ; KernelCodeSize ; Number of bytes in NanoKernel Code (too small) + + dc.l EmTop-ConfigInfo ; 054 ; EmulatorCodeOffset ; Offset of base of Emulator Code + dc.l EmBtm-EmTop ; 058 ; EmulatorCodeSize ; Number of bytes in Emulator Code + + dc.l OpcodeTblTop-ConfigInfo ; 05c ; OpcodeTableOffset ; Offset of base of Opcode Table + dc.l OpcodeTblBtm-OpcodeTblTop ; 060 ; OpcodeTableSize ; Number of bytes in Opcode Table + +; Offsets within the Emulator Data Page. + string AsIs +@s dc.b 'NewWorld v1.0' ; 064 ; BootstrapVersion ; Bootstrap loader version info + org @s + 16 + + dc.l 0xf00 ; 074 ; BootVersionOffset ; offset within EmulatorData of BootstrapVersion + dc.l 0x100 ; 078 ; ECBOffset ; offset within EmulatorData of ECB + dc.l 0x070 ; 07c ; IplValueOffset ; offset within EmulatorData of IplValue + +; Offsets within the Emulator Code. + dc.l EmEntry-EmTop ; 080 ; EmulatorEntryOffset ; offset within Emulator Code of entry point + dc.l EmKernelTrapTable-EmTop ; 084 ; KernelTrapTableOffset ; offset within Emulator Code of KernelTrapTable + +; Interrupt Passing Masks. + dc.l 0x00200000 ; 088 ; TestIntMaskInit ; initial value for test interrupt mask + dc.l 0xff9fffff ; 08c ; ClearIntMaskInit ; initial value for clear interrupt mask + dc.l 0x00e00000 ; 090 ; PostIntMaskInit ; initial value for post interrupt mask + dc.l 0x808e0000 ; 094 ; LA_InterruptCtl ; logical address of Interrupt Control I/O page + dc.b 6 ; 098 ; InterruptHandlerKind ; kind of handler to use + + dc.l 0x5fffe000 ; 09c ; LA_InfoRecord ; logical address of InfoRecord page + dc.l 0x68ffe000 ; 0a0 ; LA_KernelData ; logical address of KernelData page + dc.l 0x68fff000 ; 0a4 ; LA_EmulatorData ; logical address of EmulatorData page + dc.l 0x68080000 ; 0a8 ; LA_DispatchTable ; logical address of Dispatch Table + dc.l 0x68060000 ; 0ac ; LA_EmulatorCode ; logical address of Emulator Code + + dc.l LowMemVals-ConfigInfo ; 0b0 ; MacLowMemInitOffset ; offset to list of LowMem addr/data values + + +; +; Then the pagemap init stuff is filled by the trampoline at boot +; + + +; Address Space Mapping + dc.l 0 ; 0b4 ; PageAttributeInit ; default WIMG, PP settings for PTE creation + dc.l 0 ; 0b8 ; PageMapInitSize ; size of page mapping info + dc.l 0 ; 0bc ; PageMapInitOffset ; offset to page mapping info (from base of ConfigInfo) + dc.l 0 ; 0c0 ; PageMapIRPOffset ; offset of InfoRecord map info (from base of PageMap) + dc.l 0 ; 0c4 ; PageMapKDPOffset ; offset of KernelData map info (from base of PageMap) + dc.l 0 ; 0c8 ; PageMapEDPOffset ; offset of EmulatorData map info (from base of PageMap) + + dcb.l 32, 0 ; 0cc ; SegMap32SupInit ; 32 bit mode Segment Map Supervisor space + dcb.l 32, 0 ; 14c ; SegMap32UsrInit ; 32 bit mode Segment Map User space + dcb.l 32, 0 ; 1cc ; SegMap32CPUInit ; 32 bit mode Segment Map CPU space + dcb.l 32, 0 ; 24c ; SegMap32OvlInit ; 32 bit mode Segment Map Overlay mode + + dcb.l 32, 0 ; 2cc ; BATRangeInit ; BAT mapping ranges + + dc.l 0 ; 34c ; BatMap32SupInit ; 32 bit mode BAT Map Supervisor space + dc.l 0 ; 350 ; BatMap32UsrInit ; 32 bit mode BAT Map User space + dc.l 0 ; 354 ; BatMap32CPUInit ; 32 bit mode BAT Map CPU space + dc.l 0 ; 358 ; BatMap32OvlInit ; 32 bit mode BAT Map Overlay mode + +; Only needed for Smurf + dc.l 0 ; 35c ; SharedMemoryAddr ; physical address of Mac/Smurf shared message mem + + dc.l -1 ; 360 ; PA_RelocatedLowMemInit ; physical address of RelocatedLowMem + + dc.l 0x330000 - 0x30d000 ; 364 ; OpenFWBundleOffset ; Offset of base of OpenFirmware PEF Bundle + dc.l 0x20000 ; 368 ; OpenFWBundleSize ; Number of bytes in OpenFirmware PEF Bundle + + dc.l 0xff800000 ; 36c ; LA_OpenFirmware ; logical address of Open Firmware + dc.l 0x00400000 ; 370 ; PA_OpenFirmware ; physical address of Open Firmware + dc.l 0xfff0c000 ; 374 ; LA_HardwarePriv ; logical address of HardwarePriv callback + +; There are still some fixed-location fields here that the Trampoline will populate, +; but the ROM we are building contains just zeros. + + + +; +; Key/value pairs for initializing Low Memory Globals. +; (at the end of ConfigInfo's 4k max size) +; + +; A wee little macro to write LoMem key/value pairs *below* the asm location counter + + macro + LowMem &addr, &val +@b + org @b - 4 + dc.l &val + org @b - 8 + dc.l &addr + org @b - 8 + endm + + +; Sentinel zero at end (late address) of list + + org 4096 - 4 + dc.l 0 + org 4096 - 4 + + +; The table (older RISC versions have more in here.) + + ; The 68k emulator's cold-start vector, points to a "JMP StartBoot" + ; instruction in the 68k ROM header. (Normally this value would be + ; read from the ROM while it was overlaid on RAM at cold start, but + ; why emulate that on a PowerPC?) + + ; SheepShaver patches the 68k reset vector around this location, + ; but assumed offset 0xfd8. + + LowMem 0x00000004, 0xffc0002a + +LowMemVals diff --git a/EasyBuild b/EasyBuild new file mode 100644 index 0000000..0d2a1bc --- /dev/null +++ b/EasyBuild @@ -0,0 +1,5 @@ +Set Parent "`Files -f "{0}" | StreamEdit -d -e '/((Å:)*)¨1([Â:]*)/ Print ¨1'`" +SetDirectory "{Parent}" # too easy + +Make -w > :BuildResults:BuildOut +:BuildResults:BuildOut diff --git a/Emulator.x b/Emulator.x new file mode 100644 index 0000000000000000000000000000000000000000..06b429a951f72eba4cbc022243c78180af168fc1 GIT binary patch literal 655720 zcmcG%4SZD9xh}qw49TdehTG_k6>&la43fg2(KBF-6NofIz=_O2)L=ssAQozaq8;m= z$&d_TfB*pk21JY{V8CEw4c@4zLlYvjloMOZiIsC24-se&M`AC>6D?-`&%4&zUo#W1 z|9fwKzx>u->wTa1ectu8zt*fB_h%{Y)Gz9%O4mv`k|bS^e`(^1MV=LOp!{9S4oI&5 zvv@}&Wfw?4bcoa=(kzjdi!@WD9U`@gv{^2jmO95T!OnCK?AYBS%sB2RM_lPt*@;yBLq1ii@{68KN>7YnkMcOaY7M}jlF7nMHZ1-w82m5ja4%y1D@EGkUc~&DinP(ai1~MlH0WK${5wSI5owl4%SDrZy(%h@ae@PEd7nr?!$bU&lq=O=D6=}anTX?#_ zF7nMHkNAJg{qI={|0NynJWG5@6^ZFGOe{5wS&^o?Nt9U}FJ zG)tuABFz+Ohe)j=Mf}ywzi&hh`M1v-LH-{d;OS$T^G1;WNBemCSlYZ1zG_TJC@BI{1IIW8PTizfz@7ip$QJ49*~DdPVH_rGd4`M1woMgEHic=|}@ zyjA4CxR0lgq|IAJ{)>Bf`iR-Lhx`|ZL^>$aR+09Lw1uaS*hRisB5t@D==*z37?x zw9fw)_}ArqT(0_S;c_)E6q1j&2G=s2A%%~_}ArqT(0_S z;c_)EM5Q7ZSb$l`?y^7*TUs$UdUB{elAz@^0V-NYIy&0#&sThx}@3*u9PHwK2qKi zTdw-^bGe$A7mi7l(_{PprALZ)1wz-)_1@yC!q}(0GdLqx4w!B%Y>_MlQr9JaWB9UO z?lq~hUec$$UM_HlsDF{1Z0Y6Bpea}AG{*G5#^8TNlz*%0znJ+)UTt{A(5eow4IzXYd~#f4SPW2x<{yM$? zUq{CuQ2hUz$B%rp|6dOuf1Tq0*RkVYZ}1--f3xbJ$B%pr|HH?>UiBY4{tbHnhoj@~ zQv4t0@gpDY|M2kfZ&3UnjvfC-ga7FG`&Iuue&l2LA3pw#s(%*09@~aI`egR#bM zJ#_dO3-yxRfXBI4hwq4qhmOEEM&WVp)Zslb@z4?Y;wU`MeLB27CLTHhpB9D3xl6-; zFc=dL9ghE?Hwuq)j}G4v6AvAMZ;Zm@+@ZsJV&b7A@WoMh%>6pNJtiJH0-qL%Z?6vz zY54aCW8oX>!`wcPeI~5(x{x8VBiZ$35*T=$ss)A+qx5l#n&VZt$ z+22q0Rjk3jxc=q#-)UE{%>K5R_UjcL&Hk@o{|748U|(F{3i~bv%j~a=Y2T*kX!frq z`wWY|uAaka?jzkc%!Azi+m|TMY}bEc==<6{`F0QKpx>90ectzH3@X>3xR;H#k9ktq zZ&2-T8rFWL(LVM48I7v_hhx~sJSyyGtM)e!Yd^(kpZfj`yK4XG81^yGa{C=8Rr_0p zv)|EXv`>BifnL>qLk#^lP?NwH6QjfQK$w=Pjxq|VOza9HdAZ}liTVto1e7?>UtOZMsck`B+}Cm(#A zef+xq9HY~#AkO-K#jk{vQGHyQY+C^{N{8e`LAVjKDSOUM798b9N|X*m7| zTlC!NSn+G%Z@30NxFVL$&dqxM2c3$J#-GOUw3ygNety*RSL0{=HxI|Z{rtD$Z@30; zZ&$eKW8Aq#&%eE1(b4$R9FZ3j+sMzqI{xiy{EYvWVfkl%EB=OifHyBG+zk91^!(rK zQFJu^GzU3iVjKDSUB~}THGamwVL1M8e!Ko}xCePNTj6HlztzA$MbXjt(;VlBiEZT9 z4?6z8QsZa*w+_euSKqGx8}5OAwL;-$;J;1J|5r{$N8?X(=>0LVjr{sV&tHw7@!vKa z|2Mu}|2N!&z0t04Gw?TDr@v9J=xF?Dj?RsVZRFQK?71302fU%i&-kw#mVeCt?=_9G zDcofLNDFZ({Ndm)X}KgLEImV%%cLH{R|KRul9vS2 za)qrH#a6IJk_x1GtlkMvScOC0%i$2|={QtI;MlpBcu;vH-tltSAAz?;;MuuP!F#P& zivO29{&7nDuITu!SBZa(68|rG{IJF2ck}pxzjFM)w8cw_v5E5+Z+ z9RF)Pehp`gKLQ^e|7$#c4R4IU>q_zO=ka$d z@jnzDf7eyw-=M_5pT`edJbovSANVWBzn{mi;f(P|;G^T;&*Rtd#`ycM6#qUR|5+ve zInnX=UnTyHO8onH{IJF2e~8Bq{FUS1$K%&<#`q)f(edx&@oRWv{N@aga_)7TLf6x| zQoHABVexxS7CY%UgNeDb!r@-!8h~`Y<8^pz6uzD5SOtDf4E#(TK0gY-g5mQ8er*i= zQXRfL3ZKpJ4%JBIDkCfq2uHy5f@Wl*Y4m{pzGJLtfBV~A$tN8LL zd>X?CfX6#Yh7SllQieyliVsBM_w+J+Gw^t)$nebqkCfq2uHu`c@Qn=L1w7sfGJKc7 zBV~A$tN5-cd@;lK1CMul4Bs#CNEsgGD!xAop9UQh$-U+=&lO179rvb5@yw>#GDX3m zyjd&HcurSdr{c#myhqg=Z@`ypkN1;{yGC*i~j(_Yw;g2;I;S<81P#BCm3Ff|AYar#ec$p*W$lO z_&c@uFY57kYVlvxJBYqFzBjSIabR**bIm#R? ze!1~apSu%Hxz3mPJG}{slH~hK!rr_c60)8k*( z;zv2~JpR2`z#lN+wfIpEJdeNo3iuNSycR#o3#5rW{Xjw(;%JxHf{96_L zOCk9g!cQ{B|BQ-n5^`hw+f=+?ewN{l@jt8LONHDR|4J3_kQXw%G5&=r-Xi24YInL9 zp?Yv9hOS4OvuA1%WptiX*9npywK>|C&R-gS9N}&3*`11KWs{knvd++rGJ#Jv;Ab#A zdv>SdS=nT!r{Yn@@so}l@QWGV5u=Rhsd(rKe4RnJmf?-@^D?HV;!!5>g$Ddy!cQ{B z&&qf`sd$tLe6j)G&G5$fS(%OLsd$ue{KVr1{8@%K#?Q-`o{C4Az}FF;%BfA|K=w#l z`-yp>)oqq0^8R3Zg~|$BOjrxL<2o*UQ6})2 zDxT{dRq?d~kF}4$x4P?qM;Y+1I8ny&+qL+)o)-UJfydfK;Fq}%0FN@@7dlZU@LK#_ zPm8}>;IZ})_$>Dc;86yAx)Wsruf@;xwD`{oJk|~tNLd%$7lB6^>he=3$^>4EpX-VE z{iFH#_m8H2fquZ&Kvd<$?{x+Pz|uP4#tZI5|7f&F5ig_u(AdlCPvFPJz^_s9t!~JH zAL(Re4Bu$L&xnCvtKyfrAxC|DP{7>@lTc}PV%32Nel*s)QNOu$(bjJ}st1r6j`^yY?=<)gI zj%0)G42ExtF8h9#0S`TnAAj7SyO`liW0YMm;Grk*bq3v9hBwB~%UTV1lnH#H0l$~< z6O8e*vaDqWJjw(<*?{k6cw_vmEGx@^M;XUw9yj36GQ2T{{%AhVCtRbA^DSEZX9b??v-?`FDc`VuoaTK#=WiaQ zdQ+~E<*xjZl$QgxR3Y!Byw_Sd9KOSdFO0-DGJL*kIK0P*cSYih8NR$^IK176FNwsb zF?^tW82qL|BfdNWzp0nuo0koT?=a$*MdBM7zH7yBc#jdkA`)NB@cr^|c)JlVN8-~+ zu0FpBT5l|n#`mMlM17(_vakP|*2Kq}L3=4=u94TO_{u2`;CcBQy7FR%FE7#I(+9naX)lD# z2jz7t-Zljf`$YM2T{-Lj-axq?-{Gw-Bm6Zo-V5>g*AGnb1JBDR>&kij&CB$7k9Y4< z;BP-BuUGMHQ<{M1rk^!IgA zsl?aWvi4=;HsfabFN%C^pFz&X<(RMJzpC<(LC(hGn2+WEP~}YqIU84F-j*+@a=$^& z#?6@R@_(xGQiGh0i!sm1pR00*LC*U9m`CJ`s@$TNQ{Uio+nB9d9jv*m=-|EDDCIaZ zRr)5M+s3%HI$Co`(fw9KNdf0!}J@qHVpn_@v}Cz{84M;;J1ojc`vBUf7G5nQ?;1;R;%yR407vQMcx|| zpTAj=cf^#J?@;88G39|@C~{9sdGmfnUK~^2^(#egk0qC_*DCU~SaP4q@8s9_wSzI` z)}SKqjVaHsSL7Wr<>ifvyfLOc(4@#cG3CuIio7_cysJ%-+hfUPt67n=^PkeTa#tYY z`gqkK^#@H}7b)*G${Ql(9Y*=iNO_}C-W)0S80D>z@?xXBJyLEr%9A7IX>QYXm-DK} zU6!#1&>6gpd&sesZj+}JWq4MZhO#;;lk=*jdbf%09Y>=q;6oW(%Z+jmE3ZwP>^w^M zpkv#Vd4p0~3k)5Xt1Ky(^omTT+>$`r{d~R2*e)uEJUfQ$DB&H|QgWpTqdCA^z4jx0U#hJI9c;m z{?W1mvf-$xffEK;<7T3z7}+zt0T}V%<(_gam(! zx19Ko>~aT)e+KXWb;N&6r8_|UGkE{6BmQG##y=qV*Af3QEo7hZr*h(docNC!zW+n7 zC?NRbS`xZi|Bsd(<@__eZeS4W$4+24|COcQ0ON0RH#7dc|F0+h>22<2;y;G>|MkQ_ z{Sf2dEcmY{{^{pc{!~uEF14L0dgSYqU83sy=TQ@xLM9?kE1~y#H@x{B7=j;-Aj@ z|3=0?hw<+h{5KMRO9k0y{fEkl|34FdOC^;n{|5fhE9w{gHxeg{*8ihrL9zk<_ql;V ztlMdgnBZ^m_7nf>yX=GZhF)_vZHGQTJ*^qOe?XL^NX zA6UEBG#%^5(k6QoN86y=E;w80cNtz&BJdUq^ip*BWI1R;`SoT;wdGdAgWnYS=+x&p zKcAm$)4$5k3Vv(I@92{%KP&iIiQnixm7f*-xLzya89(bRk9R!yjbr>$Reo0Rvl74C z{EVNLUnZ|1e&4BZRNv3?1iu-?Z}bY4Uq1Nd6Ti`YjGvZ2F0Uni$wwX4qyNxkd24JyBK@GB>Nw>GK#%E6E8Eh9YRSN@pCyA=Eu6Te$es{G2qublC7Fn(G- zOJ2wLWrE**Uf{v+5&5?YKe>r))4$3u0Dg7EZ`37~UjY09jGv-c=na4$*E>#l#xGFj z@z#M~E#sH1@(X}pfcV|o#Q16XI=PPcT^Dpz-};glc+~OR@^O_P<7VL341VhwKbOj{ z8T^`w->6cx{+hv$>t(6@nwNUK2f%MH@f+2k@@odaX2y@=NLirfM_rKD6TfTEJE}*0 z;{_i4ZkB(i@O!?LY#aD>f!_w=cT2m7L{K= z_%XfjT~PV;KkxBg1i!P4pG)P}4}Sf`@0Jkbr{!Dajl}Po7Dx3h?|Feo3?Iw?tn#xc z{JcriJ=hm5o$mXg@A2L~i|6sI1NjQ?59abbo^2ps>|OF0&*NDJ@&(@2Wjv2(7s%Va zuP)_zJgY!H)BEAmJdbA+$ftSFJ^1C%!p`fgvx^Ix$1dEXDV@ciFc zzSpC*{!XOFMfzKj{zjz7L~6T^>d`Lq)M>X#rdi>S3zhbjCo_4PNNx7X zOukH&-$`=wpv=;1QtWp!IU5_KBj3g3y&@g3-^JvuDn6UZJ7k{r*t41ZxGKM!$s1*! zw%PAy@(YTb?$26!!$b7DPyU;EQ;5ofz2UG{HiEw=Ht3CD*FVrT`Fq2cb-E74Hl;@U z^qY1Qdq1q%XJxH1^o|O=&OX!a8{R(s=G?@5YW7)Kq0v4oW7j`M{;b?Ty!{=ppU_0M zH2bWKz29z8>xarr=4k$`TpjyDuB(6g&31yrXrGnU8TqramT3E|JTyH2{jeY3XS7dc z30X$_tgIl~J}WOB-u|!1zTaq{l^r+QXJzN3?NfPzG`#(5$-c#CpOq~$+Gl0KX#1?Z zNpHWYhwTLsk1?3p^bwA+R|<|tHT@pP*w+NdDNTRCG4>$Av8m}Kj6g=6dkiR0A3;qYbJlM%;eoqeaye!kAWU1vW_ zXWyc;pQ^KO*6e@hvY*$FsX$8X_4E3n?6nhcB`Vy>!k;^TX%E;q|$1 zrmvgdhS%qOa2}(&X=L*%s~Z>g8& zK5=t2hMVjde2(o%n~?4Z?}VRBJ67UkDF)GGY2o=DjEDSQ7xa%KbN zF>Ex>e?D|Q?b%TEyy-^$o;SjW;rTDwX;`T2-S*QG^1lspk@DLO`JU@MayoAhfj6vA zx8H*{QP+_FbX032VuQYd*XsAD64^rD6uI{*?IX)=Kgr_P$5daV>?`X(FJXuUSByWq5>-@0ypUU1sjl=6D)4Kw~vA8|q%Xr7D z{O-!+=lN{XAzL~f2XUxs`ocnUQ*gH=VJ?byHs?<)+-9;MZ*s1hHW6is&SnS3E}x@F zpW;>O#}#noA|LPACZ&pFlSmWEKCkniR78#+7uE=q4eDo*`CA83A01Ns{KZ%gTw{OT z`JO5(Cmlsb<oJdbMt?nQiU<1tS>K|_H{hfEu9yXb_V7niiy`Z ztv&kj3e@)~C7#GMhHcglTmk6@su$)1eS&-_TmO6q{y{$G@6C9ebVd6&DRGh?l9MbaB$*@o z$5r^De*{?nAbwi^c*3IC|9{O-&)-mYYX4}kXl>YF8NPq;anJilAeYxS^^XeIx9cCO zZKZ$Q7OQ_yee(XH`a}QF`&(id|8gAq^WNM4C9g)Z$*a;&$*(5ejrFn4s@0he)}G=T zn66EntNo*A?_$?LX>uUrxx8u<|9zOy$?-cRd1V6D-cnpk`24rpe_K_p-2vT0dV7wY z;gj;&jBWC2_&mpbDn6*MEA5N=H_^2#JtH7I^;v2MY8M)N^^oy?yCgYco_-Q_-9vhW zpTGB2pMpnuNN1nPQD~|s z$^ANh+WJY+C-wHL@)Gtc{ge02yV-AJ^m7;N{VT6WYPUs(@jw3uQh?RVIf>1K!UjLr z#h9O{uBrdQ<}sbkN^nY3IO|h7-^ibs*gXK9TcKwq8`KvFBV>sbld2c`!cx{bUvhSK zKPy+@x4v5?yQ4u$LBC0t&yD>T>ObuGRm=Z$R0DS|ot5P@p?|)D{x0%moyBHn=eTF( zCldAoKT2R;fc(^?)#z8#{)T%qlWHrnoZ=w<;@&e}@V6-UqTrlLu@HAvhsGPmj;xOX z{`0Eib}D=jPbv81z;`-vlRw0L%GulhMSc}yWsl8SSYxtKn<)KI8+SA|%W+>PaA)uJ z0QZ6(hjuw?-yI&L`#|`xvzX5gRaULCImlPuu5iPo5x92^9j=}+0&aVpX;?z-c^e^e9>Lob zc3-!6;t6uEoyNcr6NQsEc(WtLRAJ8rA}9NzEw!AL=M<#C`D|dLE1Pob*xN%Asa`nLT7dUwk~1V%PUwIu4?J z>HLbA?U0{jV(Rij;8IAuF;awbm zr-Cnx#xp&ef~Wb1IB=Y05H<`k5@)5K(U_#`8eHq#z~|hBjdZ>d@#DAqYW!28DiHTj==o!B>bmP8F1{p!*MoNpJa>LfX}Nm z)=SgA9sVv>AJO<9_I^A3ox|Z9UA2Q%#8IgS*N*c6I_K~@_#yhc#qiufmJ(C7-{<_W z*od_STmkcUba=!4ziUS&$#2!k(`3B!s|wiIwF-!_S@_R+*sp$e zwPeA3n`|$W(lLMH`ImVA6Qh23-94To@c$iwzebOD1w82n|L7kazu>aKUyQ(y)Z^#o zr?42Efet5~+e-pzxk}x+YC|_ry^%ipWz6$8`6e5L#XHPoC)OV6ZOFArck65z#un8t z`VYG&NskUt#bDXGPNVtBV&at>+t7?0~uyzW^Wq8?p;8en~lcoA1+{Ib4>_ICv? zS5Z0XYvZ-#Lgd&c{|0<*@K)Y`tn7M(`l$}zdR092efW3A_P^|^csv^r{@FEJ^u1XL zor6+{xAL#&?-Y3S$@{6?Ra+TgbJAgDJU({*+u_Xue?Ai5awYuS{1^X?_)|MD|AEW6 zx8!Z0&5Mtf!-o3&LC>FbdHiEp{S$X;106OhetvJ8$o=RaCP&2@^FuDL%yBl^A{)iFgJe=8>2`r@0EH=0-0EoB&Cro2%Z#&Qch!n_QNAC zw1+J116vZXv2mq6hk3Mw+AtRW%6sWOYSq`Do*(!g((|Ku^zv`ZU+*7#@i{0qZ7flyrQ9v`&~td$Snm2P$>)L%d4$d3KO^R3%s2A6Ok3W{xL26%bBb-c zhj~OD9~8gp1Md}3Cym4L$32BPuOZ=!xnEjppHzM$FsQ9z?6zW%UEo{`_S{Zdg*SlmZhMgxO>^wpDI-CcOmFB<5_z)YLAJmvd zy_R*&H#@t!pGABljrE%_lFk$QI+oX9F5iOZ0k!rNs&CGd>RP&6J_r7v*(Mim#4e)p!|oMSf_E@_r;8Gu9dMekwl z9DjC3F;H8eEdJgEDPD_VZqIP|x!zx#Qr@o-p57mkJ*pQSzJ56TaNM!J!KA|v8-EM# zg_PKp_h-sG!U!Ae{TIdS1ZQe1eZ0ik81uuYtIB`%2iXm#>% z4&iBCpd3g~nPj5(-I7P~NxFQ@Je&%hQbh;v-q}4c#iQvI4Gh;lbnTp19d1?HSm_(w zc2S3;I$TdW#FJ!-p0O^AsQvB4_aFVovmM*Fuy4B}fB(=0;-_#^V$kZ+Ic)q6|4`f2 z{X5&Pk{tvXNK)b(7Y2zix=3mkk{`Mmd{v^;{j>zjj6I&AH_8f1MMf{51L30 zJSN&C!5l?OURb32x7Wz=s{j;(DztY!VA|J!E zFFC5e($}9-&f$y9&f2FTKMQ??}Kd7%irMx7%{s&L$ z;#Tys^ZbK{Vw8^>zWxXG^(X8UUWi?PgQfZy9+Ig32MeS96}FarxGE$cj^8`K`Tcj~ zCTX0j`?mMx)s~6Qy%WDK3H;L#-8W%P(WvP0SXfEt2YX|9sQzVX8OEGM=XJeafmB!s ze%Tb$Kk`q{@vp{f0?r+?ckpK=v%;Uy`$qNt`)YXNNU`zvKKvd}xwa;rbdI@_e-#g& z^e%z)wR_-M#bNxxjFgAJ_wnb(-+ugkioenL+m64*_zMq7aZ+4(XnW)0C5xAAZ(Qjw zUFfTNd6&IXGGVRkfBF)p;=YpZ{brf$%URjSz6_;o=79YvR(8ZUT`fCpf0~uO;lq6) z$Id)zU%|>=^3|wi?e=F_*&5$&wXDhhEGv7)*Qu7(*%z|1g>r^k=9v_@!A@%}9lPQO z=^hW)GqgXoiS@62xX;=tW#+voW#PPS%X>k}#ybf+-v8v}HAoJ@iS>zXE5nx^FNRNV zTZnW=xOZC~(ig%fw||+S>q=T@MfLIECA2piE7V?*|C0iv z2J8#Nm-B)N^^RQ$b;Pf#^i#{E+BuIKcTh6w}(%!!nHTn?e(rYgLG^7WbJgM4dI^JGNfC=$7^dOlY;&K)BnrL zM-5O6bZws(jBiIhw-JAegVyg+3>1r6-!Do9h@lWMI1z(u(k*kIK^(=1qXco37Va`x z{Li94?vM=URpZ*Tf+i8?ArWVXh_jvSiCEi2tgRGl;TDsn8nG(&QAf=+HzD?WB(rjj zte+3Gb#4XO)Ng3qpnfcLABN}LmvNlR?q`IIV#S(A^VS5^E1r38%|QAR(&1x*cgJ(nh3bkiH<9w_Ypzg!b7fxzOi| z(H13WuTr#EImSo@#>g_XStZ(R1=`G$w^@?&Hc9@xdMTjHO$`|s2fM?+`4T#((U1vZ5c=#!_C_gkiHOZ+Ij}*w(!oaok+Ka8@KL8 z+7NEoT7z^;xPEIH(#_$zt<#Zi3J14lV7%2!maPfl%fvy~W>4^OIAfWv?cAcQSka^Q zLz~_w${k8M%Er_95apTlT*9$=D1`cx6&=(kzedA+Lj45ipnTL}0qU?2b?8JLx=@G3 zsKXM}VJYgc9CcWMI$VZ2tVA8IKplEehcfEWPyAOUpnZ3RL#yB$^>=91bfi1O9jnTa zz8G#7{l880|5nleTUg(JA>3R`_-)~)TEcG)?-XO9QH=Wr8uzHb`r6${H-+nJI}s!5 zF97|B`cwM+&~SbJAns+U&mYV{iavjEI#TrcgScOzK7X(VDf;}u-AK{r4|XC&pFem8 zDf;|d2}sfB-^xIWKL6Hqr0DZ+l_5o+f2#&5`utnFk)qGP)oEPwOMSjAL%AQz4`6%_ zDQ!bzvOOa_MEu_BL<)Xy?M4cIZ`B|LzqiVeg5O)yk%He_8A!qJtpudtckm2S@H^Ov z6#NeEMhbohYmkE9!7`-acW^pV@H?0hX3t;foK5|K>h)kkcqpP?ALM;%`bp6*sebY9 zlE&!tP~_YK+08=MOtGQQvF|KUdVV=qFdZr4J5Yuc@g1l^iuexfMvC|j zbRtE32hJcxe6J@UMSQPkAVqwyPe+RQUN1w6_+GC;iuhjNjTG^{-YM!|7hh`zTSpJ> zlKO79RFb03cadd=ITyd_rDqEKx_R0m(lyBOn_8WGXOtYjY1PT)C^>#ps*{&Q$?=;` zojfN>j^9-3BTYKj$oMmMvTr2-V>%9@w*sNuX%>|KT{9t@PAbBcSPe4s(8cu4}~Au32f!_AaRic zPkHLM;yklUN}lxMdoO`cKXIY;(fG}c;Ns}@*Yh?e41L!d^Co|XM0zQbN#pHkMV&<5 ze<9Z1ykNK|P_OxJ*d&>-j^;d`FLsd67Wm+tOgFZ{2Ys)Zeka8HnS-v!Sz9Wx=u-o~ z%`x~rtj3ZYo1ZnB-{vdugAc|Jzg^<|?r*;$Kg2_0gw-G7G}Is3oa#{6Sr(h09Y6F}L;W>?pW0V*vtskR<22(3U6mikfua83L*)k_^!qdV-5IaH z`%YeopJFqJxWLUy?^@{l$JDR!JAydG8Hcur6SjghzDN#EeRwvJR<}ut+gXoqCF33x zWykS6ae!o>{*}aAGQ+n;@hyI15#O*<>DxK=cwQ{&pCwnB z_;=Vbrl7#!CXLyX^4&}Lr7NhceoqJnj;gvd} zI;J+FwPDmp(7!~VxOWA(kD_mH5pP$3eq;8F)T#u_#985UnPo@hzFFZT`LG@H{e}OK zlsW&^Z{De@$#nStoYY=r>cqWto?Mk^pXmP}DRcgm#8$e0YIr5wPwxpfJ2;sXvT z;E)OqqjVgc!^KarxlR7t$gX0G>?nP|I$e@hBIcEOlDQi3p}*;3n=&Z)PZjmo#_P|K zL;Mx)WIM918u0u;<2Pm4=iia`9lP%DyP9pC-D3H}Ube@X>m2$;hkYWRMfhFK(tUE% zNQ>M!=5yCV=}vmCPw~>YwUvTh`Zb|0&6^fV$(vS6DVtuAQa2rz(l&i6jY2zE z&=0Kj3#H8J1S!#V!ao|Sj(p{=ZPhVuI}d&#Wuhew+* zzqvb?9C8IsKDn$qbwaQzyb{;4rHSEBCtZWN3fH*ai#8U&b7Qw{<#fykyQE@VKPU6+ zaeL~dwd~!HmFAL#7fllFb<1V{H0XVBu4jrvlJFg*KCe~E_KttpvtYah``S2CyfZB} z$_w4&*!$e)wa$GG?`TsNUNkE<+J9noNQ=fh@b2oP6ALdU$9eI+K7nbZ*jd|vCvc~m zFu$^R)=@lbQ&-kV@e|fng|m_|KW=>gsg=7K|8j?463^WJ$wl!@St`X%T8}uY@!L%n zN1Q}^-U>f9Z|hPI?Lj+bX}E9UMeOqsKrD4X_AIDFEak;1-UEmQd7&?1A9SBLu=Kep zrBz`bPrR^oPrv(YQurqU#8juml)z%b8tiq37Wu#{JYikZkgKk^qNsI2mHR+(=9Hy5an6moPvO4V zvZ&6l_%A0M#o}5wCzs^%~E+wsos!b)AaT=yf7 zH&8m#xiRr6yeI17^<%N6mpexD815#06a5C8?8xiy#P2u4$K@_M{*gznyVK)su1N6) z7BU-CN*%da2fb6Nclb;}nPRJn>h(UqBh`H|u?_Dr+mw4vZ^dJtqKh});ayXP^m?0j z|5DK=cQ1?RE5*yZN=wn-hukL;pF|t&boak{AMP6)it>|&CIxWLt(F{J>|6S_t59HGL z@!}hmydJXq-Cai$NDlj{SksbB-+G}jg1!4Q-B#&+IY46|+;yMDaU-o8Abr?eA-6~$ z+54)7fH}>$R!irrf_88VH@Z7te&6nwep7Vj&p$5-jGnycVk-6JEW*;>EK@Au@DvB_ zRTW+q=@UMRX}nF5s=`w&=o{dIvV7>3W(Px6_CALXzjw|=8CEZPP49zP={rOlsTa9)5Qd%44&P|vrH(^fXZF`q_ zQZO8HLx*Jc7CbLKFZFoyb8OymnKn6am&g7p=E1R8dxJGP-f=lLjOS$fy$X0r^_{o} ztWj*;d8kyv3z>>8HV3=Pn{FZwj+IiDz2cDM9@mm82X3(!&DcLwWPL5SzDF_@^@pT- z_~l&glqUu6rQg7#Z=xLcK{{Ef<$O-Ey`?MFI|JOT;D)t8DmScK@mh0e{b6f%MaWNe z;41G(5&kXqiVytExAoV)2%lzqFtp85asL`;%{}e(U3l2&L%j}rf8_1^!tzksG4}gL zM|FIU{F;OPwugM;Sz(~8^JO`2WxUl<9fv)>DpI}U7h=qt{*7#k{EhfdgEh~8IolPG ze?;eoqK9OQd*-08=#D|0cceJ?_(31_i&^2zDZm-7?<4#d82yLgzo`&w{F>3%FL`G> zQ@mLZj-)mgTW%JI!zELyz`Y*2)$Kz3kZwR}(@Z6%?lH%+dV9&9MFa0is z)@;$dIstJ{7$K$Ku?nxtc1ay%57z-X-Wi04os2Y_JD>aj7jeWsZkX?%qy6E@AMHCw=Kt^tRKJpbqbzy)B7q* z-V0yV#X3jL3V#*CbN};>#;=af3V+k?*oJ)LSBIXsXj+N$K>VVMap=Ea9gXb2ldi>_ zhU*qOw_%L9+-I-1VLtBinjcL?8wIPbt&qGI?^Lgmus$zYK3;Tcia8W7*Ew&J_dRh6 zYu2zYNX1RwA1uZ1CB~<^&PhIbKk^SQJmnoa6hKPIth3pMgU)`qgh1o|4y=-b6ge53^0aW?E>C zY_r>{VOT6U7n2@hN~1cJk3GR-SW|Hm^t-_Gf08X$-~Pc&g$wZjhcxO3bS*$~=*6MT zRJEp5($|G!*U%-o+m`D70pbs&12=S;<_9+Sqh5Ji4(3xVa~j^PR{8;rbsG1MhQZ`H z2j8ux^Jvix3+`}i{qM_ky^8iT^Y$AwN4B55-kIV)bG=QppNFoysIc55NmdqKIgs8;q+eoo@a{rew@?)+fIEz{xIV?_bU9>?bux&`o;r%-A&ii z@)EXJ!FW1${#3TOemv-N{&i4t{e{nqdDUMIF1%<#|N3&E>Y7sg4sXIX_Ir^=w9}EB zPtpFVa(97Ku1P;ddj}NFfR99rL+-LUU1k2!m;)=ZR&<+OW=oa*aa%FRHOe(;-_FvT zz&izPRu0}N-sw-A@@7=r#OK5G6gf0`B>7S1b@qEZ+E3FT9-uMl{k}6r#&7cIdcj^w z*XH3~Dwn%UnV%fC_h$GK+CKpMOpm^e!EBC)4*hDA&Q7LQ*lcJ0Nw;`4T=+&%S1xp`vc#9C@=%(-h4_EMWtdt(0X z^_uTY#k+|Pdv|yM?fMO!L#9bmh+Tg*O1PKe{e${D&S6D{YhAxoLj8DciV-qC-Ruk`m> z;s2s@FrBYbP>&&3dD4(vHU`%vQcq<-3VAP%@u0j7d}oV3xWIYFKbmoOgbTbGbDyJQ z@UUXeTQkiO&UUN~U!Zc7vAquPi~!Fa$G1(nE*yrfOv_oi*0kfCm2LC>0O?Gu2VXna zLw(jgE|BXUkN)`}`e)tEr@YpJ6uB<#Cb?_!NcT+q=JT(p%U$2}%j+S_M}4eMyUA;P z5Zu4Qar8K3@sXt(BUqk(KR`^nuq0X!0Ds%c$BswRt za|U#vE4fD`g=x&Xu~nhmJ(Jc>X357ej#l+`<99Q3zLQ+tgFe(*syAaQ=Hfy820+Th zI6xk2vO8@>lalCpp#{HF4fo02-(xzo=7Fv$Nl#vabMF(AN75ceXzLWL5lWGdO-@;e zdltDf<2ka4F`DKcZ_b$&{@Z2mbkz^8OX+v7@HHL2Y8Y-L`Gc?1_+1-h4=Vn8$rkC` z``CT6Q(UWH-uzpOya(qL%%P0W?#vWXfeKNtW~7+hg;Q=SKV)jf=E&vDdBqx>&lYoPA@#VhZeRYC+xI3pQpktfgtg|d zA@|sy#5)y}{Lz#r@jk#b%^{@)dL%QIHGG7%3sfeB2izvuz#3iDtyx|Io=eu>f%uDk zlc%NnQl_QOyIuIe?-WSxO`3*w*Zkmj%Y(6fg$KE>@Sy4|$!LrF8oDqkNc$Gt)Q-5C zG4J$MnQV@{okJ%nM!d_fbe&5aLf=TC7~Q6ieH0(wucpEGfLs~akLTto^72*t@q9Z) zsSm0P%zgBp^fS~SV)Qe(s#Dm(`7~|>>ZQZd zE!_rw68L2+bp$T1dAG;rI5j0afOm(CC*upAjH9Sessohw*-P2|%M`gn>VY5UaP?00 z4PE;E@-sr$O7$;~y#IpI-jJorJ!vSrO_bft`T+K*qxMg(=k1@2dK<3X46=?Lf1bdi$*KuN#bI z(=mtt+HWkIMrF%NCH`JV!xs?VWz?NTx(;L6Oe)KY#ybhmetW0coJ+cr5&tmC4qu4I z7XyFzq*3=V(hV8Q9;LF@XnZN*BjPV3-H7;qL}fAJuONIx{7XqUBK{v!S&aBA2_F&v z)1(^_|5GRn#faYnd?+IR=Sepr{-0Bs8h?|a{SUWMU1??1{)cxO%c%ViEBjOGbgBIh zR~mJx{STKI%c%Vi7bx|w`J(neY%}Uo`yU=c2_hX#zg)c&E<#xiRE(9vi- zwSOogero?vMEunLp&0Q~`-dXpr}hs;#82%XiV;7xe<&h;YX49~{H*qKO+WyEq!~L;alC1&kDDHp?%N#wnhVfaSS~Bb~VE)VPA_}UnF_U&qh&vHW!{BrGk*0&ks-x~wZzFkfD(HGp113y{&p7m&B{M|9| z?Az50-->rZz`yy0_C4#-#`w?1z_V{xGyF0)sTD zyf4x5Uqk%g8*p10|4hbz4e@`EVyt&t1^+dSKeNyHQ#tWJ#`xP5?vxt%L$Amx_~ZRP zVx{k2aQ@M<0>V40-^cfB7=L`fM&UoI4_v^%HQ>(I@n6gM;~5(9f4_q9U(5LO?_cB# z{%eW+e@;`=oU|65Ak<&3|{9nkTwBmVEUxdX)i5bytW z#Q$C1{{w=59r1sc*=PKzocJFn{_hUo|DjhD5d7;Hf35#V%gmhrA$-4v>Ein}3jgml zxdX(1f4;j}$A3NXe`mnm%=q*Ezn=KN!~1`;;J=>nXZ9I?DkuKGWBiBj|IjOH7W~%} zr+2mfA1y23{NKg*YZ!lgzeeGIbDz7J`0oq2yL9|FF#a}o7x90W_x}xyKkxrtg8v5M z{|>Xy_)|IYKSBK88NUBRuc%A#-$0z+(fWV1EXeu4gYVa{Sn>TDmA}Q^Mf_X3-2FQK z8;SqhmF|Ax{|@i}8;Sqhy#MzL{u_z^+sr=WPvyk_pNaq5!}ova74-}L8;R4~TK|uh z9ToiX{Tdc4zF(v8Ps4jj#^2=4oQ3Cv38%dU^bM4ROZ03Szh_DI2I-p~Cabq)DWy5y zqx6jmlgoSlc}kbjdwuA4d7mJC;PHHw;rB89WbZMiZ}t9#>F0QV%=Fs5Ynk40dKL@) ze(!HcFX6KHuS_r1yN=0Qy{|EOm-n|!e%kvVBnLmdhez7#JCa?e z<~mB-eFa-6z2K{0e5}48^H<_)c@5>B2H#P#<2f#8GQ7!m4a4X7#xwj1--8U_>U)Cl zKkN6cVfazLeGKpN9b@=9c|74gUA}7x|LkSo9SooCo5}FYd_QLRX5U)E|LnAHKf|Z` ze#7vE@*NBx@Lk97hkO$V|Li5-EQZhWEoJy}-#Uih>3favKRfCBEyE|v6Bs_>}lWY44>*d z!SIFhM1~LeZeaLBzDb0C=92FrhR^c-l;O*L8ySA5@0Wys_N4Eh89rH_#PIq0XIC=& z-ZWk7rTS^?)4xHEXWsl;I<+*W9PbQ-+!0g0PL*3?%GvjxnSbV+bPWF4_nb-o-M*N3 z_Pu5%55<&kRQ!LpNs-s}gv0cG0-Q^vx{q*-XLXpDFV+1X$M`-0j?dTq0mt}00gg}C zoy0M|Pk`f|xs6{0AJf`q_87 z`6P~6{p{;${v(cA{p{;%K80geKl?hG)%w}js+23!{*&o!|zo4_Q}E0^@gD41vfUL(ya)S}VBc|EGxXb?R4|%PZ6}m;D)5Hbs6$EpynPWo2Xe?;zBy> z&y4m9;$3Gc+OI8m25TqLhX1GS=j!I|hdpH2It8*z?a1x^pS7W4Q?y}rWE;}&q^a$x z4G}xF!$|FSl-G|Mu3g(}!ePP?mY(Bkd?lyS-(0M(-Kq68JnN6_Ys63KZ+yIer^Ww) zdDMJs{zUrS_}u*5FCFU=Pm?dCpF)Oqk_vJBM>;0|$mh@=PAEG}WrQUh{Z^RDvDecO zWP8evbkCuJ`>Ei453?yHw#u~`p1I@l z$I)Iw&g~!i?0u$?eD0_n?@FY?SAQQL3`@)Xe~#;!l!*9hKlJ6jBbjHLr%iLL!9Kl7 zc!#lFl1T=g*w|lJuR2BuUDbq<9=lg=x4~K69^!_Qx*! z@JPzs+t0o4+}?dp@I&-NOS;9m`qlRzn)Ok2@El&onmeoI`zKGFZT>A%`$Sr6Gka zx)E+V|Il+?sxz8Tlsbd##@Xxe4h?lnbxCa$xi1ZG>+23d_dD<#LOOzM;kezg&h!-> z6At-iYCqn-rccX`9KjySCf3H}54vyAez(-WQJ!8^iZ$KXi)8-d^ZA9-{uIK#J2aBYHsgNPoeZ_HG6kuu!nMH@7jKy zy_@C0C&SqL4`J^v*gF%$9?H4B2Gq3~@30p&t&|e0KKr}Jx$3QV{Cmtc6$KQ=JN%4y;ME+aN4#SO`Nl2uJNteNqnFCQ=M!1HAA}B$}^pp!EmI%JpJ#2_0ciY*)Fn z5NYWT=X}ZgW6l)E7WpzO zOT+tN6U9Ee)|8HSl<(7fN@{!JA%`bVW32^MhUmwUsz7q4-(`v8E0&D|;(Yy~&}&*f$OP zs2%CP2kY$YG*6)~7UQ?%?0Z-Cb9jf2{y`jYoJ#$W?SaSYi|wz@zC8m>3F*uVZ);<7 z7Upt%BCtdpLh-%nwE-ltU->_=%$@?rgW5`O1SYeUWU z0NQme=G~b^)xkew-lVntJHrDszv3HWC+Ax88Mm_MZ4`6b{O3oEL7IYVi`)sdjt_B7 zk&53QW#P9jma5uJ2hFu;Z(29ZcoQe8o7wBwJbj+Hxf4zI!$vVX9>|n=> z*>N^Iu4TuW?07FbX78Nb-RwApm7itDrm9+tg!K;Ww--uZ=lwj9iL%^X(ls zi;kIZtnZ{_=G(jYF*;_xy|ra@%zS(IE~R7U+uQv#9W&qFv(M8p^Zn3!3Dxi)W1pK5 zLAg8WZs-lN-;ay2A>%tdC{y=c#D*qm@+y2UGB5*kmsA{~OZ%**D1Ea9eY|D26c0=a z%Cn5Re7|f(*AHDk_7i}vM020>!|r?7ycGJvGAHG`)igG%OqmY!OY9YyhW!Mwcl2tD z1Lu2N)d+l};w8y8r{Uk@<^G(JxVBHFHKY1@m)EhWnRL;AdgnC!I$nM?Yoz>YW-9iE z=(UF|X;?3kRF%-l&bRZMFXT3#!Cn9+{6^q=SoiUPIpv}7*VB}Fg6F@gR`PUSnt%I^ zpJUC%>s3=|e!KQy1NLU2F?OXrc4&Vd+T#b;DJ9W-6E4x7ebg_oFGNlZ`AOP)Oev>5 z$WR}w&3U{D?epKmK9{A5@#STbsif@lT)8adM69E5{gQE5| zwok9xe`wytHBbQiI!e?RoJYQVmihtJIqxIb`w{aIy+fsP*I9ZNY#k}%`%li*xc0~T zNTqIwSL1GlXZ%iMU!2PJZddvu&CT!|yt-fiXzrK3p|1E1MEPyg{928EV~l~Yx$dfd zmn40FXWv<@E>^?uIqX{=5o^8bGp>#4`O`AxB#Q%U*OKL?o4=3spaZfFJ1bnzzAI7H z^o6CygE5FYpSx(Up}yxX!96bOo7uzlvfMlY*D9okb`Whs*DI>d*?T=zOK`qAM)G)mSTw^OL*}-;RM^ zJ@nA7ICs?NG$G%Fyo?J8Y47z=r^-;9&zElK%=4x68}SOvqa~99bDqw_{yj*aDSXLfLHaX+t>U_K`~sWA^Uk9E(I^Dvq^!4VX~{ti>|<_n0vB0w?FVX>CZOLt@c+*%V_?k zc^31RwLls%TbW*K*i0v7%OL z!gWlX98RA|wjTQXC)Li6|J#T6GT*eX3=eL>o}X=prNsLCCFlGpN!kAUrNYu~?6VJD z#Dwb;tdI3$z2s);KFrArP-jo%)!$fwXHRMVs-&a-my?dub@>FeH+-j48&Z2wJ5oDg zU3@WpE4Zaml5W8DS(T~ROl!)jOy{x3GuBcfB|orZw`2eDdZa90m6S7o@892%Yitv# zT&|fc`22F{2An^fxECqI4|e8{9Wk*qu`OAtE1Zw^BewCl=56&?#W_m%^htQ{JG$)^ zX(Ii`cK)6VxlL74JMyNsg;FA2_oEI**-LGb{{v|m%Hqp9|IktY3f9jpl$^w+>1F8< z>B;_;v{x6~-mcn2lq0PyXj? z`&?!8+j84P|DUChy<3W-Hm}FA5(nD6*!fiw+9|=UwEO%F#GZh;qEs43vCn<`Kr7XE zJ>r4i0QRLxt$Hbq)eT)smUaE1u>R$^fdAz<2Xxw~9dSSAcLkD0quhahat-cTtia09 zsen!$j+a5F9{FT)>?;jUeaqf?wg#|VV>Y^L7QPhn=#RL=5i{6c3+>L0lOU$;}l$fI3xQpPGSnS1H zvtUQDXR|mq~2p8hs zjr;bZTNi{$j@%_l%aCtbVFUTpb5kiD*>Td@wwI(EJV*DC{-3WrgFVl?#>a?9ZSP6v zlZ}=~444y|Yj!lCKl+H}Swwld-<9?u&0OUrtg{~me-46QXlJ)7?T76%dya;~_%4wJ zXXXD@c@OJ64;m`*JUjTV!H+zdK^44vPs&2PqwN{234Yg5Mq_xCol584;(0lq+qw@* zy?CBOGK**DgLf2Pfckq-P9C2B66HF;*A|5HiMM#}L0NX*P&%raWkKKQ)f|qo3BfcO)%achknVK--Ag)&Ae*m% zeK#Y#NEc>)0)^4H7^z=DnoLTwRy|!uHjv~2^4Udmd-AY!wR;4<;0S!d_kiQb6$hLc z8_}ErY+?b~L*Gi8^V+zY&WA$Sy=J$xNVA=uqe(Z`rrVd14W&KywNe`Q!5|l87o594 z|2pAJbN(3fSrpKX=;5iCzS06+&O=)Y|CN7J*`@vfc5se2(i0lvZ|D4#P zFV{Psmus&?-%GZpu@b{bQ>xj99ho`yJWE!4cTaEI{!m|M|1s>n!+L4h>U_Wp0n6(W zQzYb3V&Z8X^#VK}0hE@Sq&e6x-nk8FF@M;L^lsSYHrR_tFh)gxsWypn>@o3`ln3d_ zj#K&rNS}y3v&FK4vqytp#Ttf2W6U$hT9m1u@BF6mrT--d3^tngEIg81=h(V+VC~7% z2^ddX9Q0l0A8@@{d*l?w86CT}c588U>Ri;nwe7n`RsF_7=vzQ~!@c9Ke_CTotV4Vw z>h8q2xJwSyRiWR)zL{*hd_;k4r*vW;qn-I-dnBCaZo~Jqah=4zsJ;JC#r!VBql|pn z2;7*R|Fn>J;CS@W9^hf3cV>i#w&vfZKH93hJExW2HC12bs*?K?pVjzG@0~QiDAI3y zGKKW*l%CQup3k0c5b4UabT!8Ms+y~Qh`qrsnk!nAm58(Xkq^Eyn@6Rwh^~$n$8L2D zx{!svt&=t9t^Tk&b@hkxk5+$J8&Gg&i#qO78%E`d)s`%i&@JqT^7y12$Cid;-!x-x zD`>_0pLc3lf6RCR*+gINY0SLdS=Z1>^+B&t{wGLk%h#^-Wl!sXH7 ztz-Hy(Ui)&K$VgsZTQ2tMoOBFq*J)5lk*b7?o)$LWZ9);E-X!MhVi>u`4u+QZU z?4^c1m`V4)1qx5DtSdaSg85U0fkkzGBl?ZNqDlB6R(^lJg!^uOZ>0O4;1wx0Tp74B zab@Kx3i3$T;xglTTi!16W9CUDFYblXmWapn0AA75>+O_@R;{3OXv zJNDnofsd=2>)D=;2?hDR^;^1vwR0_ioq$%%$K|}O@ZYgxZ)EqGUkkj}`AXoGp(9O4 zx{m~obR8Lr{=Ipe!Xu_5Lq|&t^K#%uV=pA`FiKc9<8*$7aZxtZ$Ey= zKgjw3TV}kNQ6KFag*~FbnYD}#zO9TNpBb;kj1Hej=XtgN?}Xkt7WrwhXNRCMe4iAP z@6ZVoU@9&Nm&JEzqzSOy?wykY*oFQj8L$)3%laFnQ&i(n5NBjIC#sX!XEPb3Fl>jS zrgSp9@V?|AIjqTm4kkg@p@-F9U00>3hM}bx2f(hT2Cpy-Q9k?d++p;e{iF-11MkP? z_K+;2k7YhpTd8Df+$vqL1bxC1_`CKFX)gL#I=>YA1f@3kc4K6>V8cH5*fij948>EHKe@$q@e5Qr!a9GrF z#OFJoP&?t@H`RcQa%aM`NS8$UDUEZd+K=arBCmTo@5RXbgj(TzTyt2Vih7;9 zB|G(lb}!yz`S2dAo}b5G*zwl{{kcG-)7sfOF7?zDwW+p>eW$k{I$^;48I5BS0Ih(D zfM!4=pb0RE>S%tCz8n5u0lZtxTb3-Dupctje7 z>7(|f`#`(WODt`Nz_&fpTqaXU$LRO;nQV*;^Qf=*-&Jau^Rc#!9G==uLPbv2Kj#M zFwR%{0OuOF1N}1bAq^xZXQuemJQqH!+@M{+vQZ*mU@vkY@DhLw}jfZen z4$9qva<`z|Ehu*j%H4u;x1iiDC>OG()}ib=lwF6i>ri$b%C1A%btoG=aX@FS&E1P8yQPj~)}{XEp#4MDOg`um=Fz>9~CI(khHS#?p@@V2mXVBmIcH_bb@%`4tQFbu?I# zUhum+P7%v3jU8buq1$R>M}hl@44oHtzkSMSMBseMLVc&CJMJbd&vjG;V7_N;2$ zB3UsU5Xp-IUl72GLOg7}5jsm}))+BQYXUz~QC^iO&#f!Zt(B)t z^0`hb7iUb|ppZ-*m5fRU#$YGWucDqH>ItHrAnHMRIG?XbSyys|&9jQKJ-lrCR#H(T zdj@=|Og*0Uu%({&r5p4(ZujxC(d_t^FmJ1=75!8j#*}Sb}D#D?oQP_i0Bz54)E@ zX=L9YEJ#Ovc#|$4eJ@+qh3R>@T=fTwuH0e;vc<}%xlq zXW{-lUH){(5C3$ArEh`nbogYD=4|AK#Z}sTl|AIhqB#MV`j#;*H+!<;!x8)@Pb%8=w({ZNhZE89C(}=+emHnC>tx^_AdH16@A+k=-X~a-}Y_vZMEpz zcB5}Qh`#Mz^ldjwdDO?Cf61pg51Q+!b)YZFzs9~UfB7S{UvFLh6$iR^ORF)bA^&=l zBvpUsl&!ik@!9M}l84%EUu>p#%wNA?_{7fuC5*-BGT=(Um59rTD+yOJt`uA*Tyt>E z#WfFCDz5XybpfEc8vWVho7Apq%p1PA1$*0T@vd#>;;QWjrOMiVthYHKUB3NYsY;te z@`XO~!-o#oB`F2aVV6`DFy9v%bO06t_5*rIeqdX@NGIJm41r2H1-bs~RdoKuN*h0) zW2F~R!PSNAxX-WU~^DlJ!Cc)@!NMxo?M%B4b27RI#7qn zV3Q5_)>M@kTRz9f+az0{m&J?x`s)UJc2&0R*3A!qfSI}g~t_ucy{D@z`*-Se>R ztDC<2uq}Vnzuf1)Z_@+FMs%N%zd)KF(w7&%kEU;&9&viaWgspCaT$oqKwJjmG7y)6 zxD3Q)AT9%O8Hme3Tn6GY5SM|t48&z1E(8C6$pFpA*B_i`QEKPey04g*iE9bXRV(T| ztVx-dWj~pq1h1G^hN}}7_LE6jHJ>iAI2#RTkf-byf0T^N6LE(7lTsDlPj2Y`Bj%`I zlv42>lFZtweb4{f8SG#2{c@ju_uO=>4Om9szNGhHH-0MiWqTzqD#62~Xerf5N)BD$kLlj}T6>?;onV5sx|c7Q&@%r<6drP(H^# z^_cfaJ>J`Iu@O#K`;>w86J1z$kV^PbeQ3kVHq=e)L6mpr(b~ietZ~Y+mp;^mH4-=* z+_2B@E0BVIyypqvJt3aabL7dC>#wv>*zQe5d)0~Bo!Jhe4RDa;2CE%y#kT`K{EDYx z{t~x8X^HGxTGfqbT3UQB>_zN>8mxbpXl(AyJwe})mYyTrI;$nDOPpu>F>sUv<8G=O zd5wf8?HeTe5p9Wvg{_iJqz8R*mM)!Njpy{P1m)dHyrnwZs(HI*?-m=a?{IE^=+|b1)d&r2j2*w@uj`Mn{Eb!oY`ks8vr&n5> zyHiiwJI=Qk`TnbSo$p``J;QqZVk#pybYVZ`#q(M68LMOS>B@WqYZj++LzYIK|Gddr z>fLgV{Es33{vzMoHE4ed(ZRXR*aaS&5I*18itk?RO3Fbv)wwNc6mfH%yOPJ9+fuN9 zZYsK>$K&D7Gw|& z98Z3ZwVZ_86!z(Ux$mE@z4K+*hvWl{e@~gFoKMb4cea>Dazm^A*hh!9+|oomjc&)h zYw=wYh3aSRe{v4?AkGO=n{z`;^PMeox^qJ-`ex>vdkXoY+Ak+3R^^87DMowQEz7Q(IRD0n%vNhpf$-x zUYEV&f*2W}gEJRS`;pF=8=`N-;S6lZW^Sl}aL>#QT@l1OI~(i?$3jdPnx#(gqqhxJXQU#Bf{ z@4jVAE?u6zq+!dS9NSFAjwehTkT)6j2x}}R{Y5_GSC-eW4lPg24}mYKSUZok6QB3z zh88lN(dcXsB}x%|Q{F&c;Ia_;p_4-INDg#qeugxl?FMEq?H%SSMg!dvfAm} z*14gtZJ!P1hVHDu`X!<*)}wq{ z06d0x`_77c2FJa?;nOa_T}WKW{$@X1h7$zN)g zp}#~~8>p-sKgHUV(1rk);SH?KSfAbvyer^CIhI{|$3x4XzN3KEc|izfgZV7yZUON{9TQ-JLDYU7xriH~qM`iL?&nn*G&kfx*=Ggs7u}JIT@_Wa`l7^&3STBlwVyc2X$--VhRzJxmobU}H z=;x(P5n5j`N%F?ZkD_%FzBTu^@@RWHIg}g9ZFTNQY=kWsa<(M4z-GW-{A?8M&Vwx& zLVsz69T?y;mZ9+eGg~3~)8sP3Pvaj^2iC>%epRnKxuK0l=WdewiBaM)=`HCj`cwn@ z_5HNAm$&_I8;DNS--F&!wt)1Md@iyFVub9ur`p+)WIG)wT9N=;#((vN9%;Qv0)z0@VvCD1rT_-7fblrbUzBy??V2w zZ=F+KRPx&?xo^ob;9-XSv({GiE<@c$!UOeZ!!Ip!1`Q^%ji{I8bBfu?T_2AT-tw=O zU_aQrGSIV?@Z@ct@Xu0qDz%Z?#mYX2wTY~3sY_ROnXid+VUf zH{|0Px2e!Ou5$@1v2G}cwD5^}Ux|LNH@fdhfc*cp{EpK&QvrIhcH@84<%TXljxyUJ z=YH7#oZOJD(;hlsqB7R`&;NvM7kzsqI?vJpbg%F>b8@g_cmvtU%b3~sEn@~nC+8fgr!|jM~%MGoBFGn<4IfA~3 z<%M17S-ask@B#j@g7nb&l-fsjIXCoGvY)VZ1!df>-d;@4qiIC?d8$CKpU!Ot8|fj_ zJ!Z#%56UYlIeBAl=%)PI6H7p&Q?Nn#ohVPk0d3BKuSU3C4|@>npGrT#dc1yu<$n46JjdD6YvpP1i|RjHIa>T| z`Hd)Cd#=@^g=69W7x}e1^)R+xEj+V+eXhv8mOd8#zs;|eJTpH@&&)rqUhRn%o|#`u z5e>EU(Xj@@%>2B5r8L3o34H%d^zA4ULwh-Gmj_W>4YzdeMya&GrE%HWj@oMluGv@>2l8zLvsY@v<A66L#Naie&oVQoVjE2%E`9_+2w(T03RJR@J#=-v}p<>~vw2@N;I z%UXIZj^?naT=_}(5g2=U>VFs}TaC1eV^=~ZV1V{-Q#)|qsILp*X*!>UzH)3EsGKiJ z-(p7Vy*Ptu?>>vYL=Ed{N^K|H!6WZ1bnFKmN56oMjj}nxA{!Dcb~EN=U@h!MTo6)B zMY8z`yA=@rx198{MJYAs&n}DRf@qq|OozP1?!XerFqaXIx4A&sYW8Y*n|EolZT5r5 zEyz;_*g0J;rva@*UCZpI6p0- zbF<5c8Q&R~tZaY3NUP(EKO#5gM&LY5Wdg4OE~DmVs@u~ZSVcarURF_N7RSfjLNxQV z<9rpQ(b~CYmt@nmm8H?}7PKwI{wELW!+0$02c&Sh2sZ(iBb);r5A9Hek;I}z72i;lEGM|!ogbUL!1=0A}q1Q?+50Ac@G`LO@y0gOL2`9H>W zf$ZWrL5C6bVOV`WR3J3_dDbU_T()1xi28pHE4ELt?Iqcs&R@SieA4hrUERM{wptdW@`&qD`s1zRw7D#qv<- zUN_o2u9M03h^&6rr;G38viez%P8Ns0KvvP#Gag;~!C09+i(HOC_X>eC`tk^m5grGw zS%4FOc@&Oq6KG(XMJ^|(9A#@-D)BKQmuY730&WvhI$2R~56Z*)v?zX1Jt&{mlL458v8Y|pDHG4~G&;?0htsn3<(-8_cE|$y zBE20>%Y)7h^7=l_M*F5>+b4VtqrQBdEHip=dH!@b5}$^CjcoL%0}+`8j_0(;)aK7B zbm=p{oQ$VYyG&?9o*qZd=l+rq9?uv2WlH*AHXNp?pTTO#F_anFzMz!p#|ceQzxITl zsNeB~iKyRHqA}{1o@kHxITDK#n-T{Sho-AI=Z(=G^>Y{tqJD1UhNz#{SQhoGFjmF< z6l0UI*Eo94N_7vTYPTC5#&P{G$rSrM$sF~|Ov;P-DaOvE)}&%x73aK7>W}&jBn|0* z$x^a4>Ss&NjQV9K+hcx?N!mrYkzjO;qh8$zv(4QNNxU&-bV3e}gHb(La+l#be4bna)z(jA)ZL>Q`o} zi2C6zW7MzL)F1U5Fb&20hD~F0(&u>Rl+CDW)`&TcQNQ4vmZ)E7&QR2Ec+Pm#Z*r~_ z^E1u0%yrDIn6gH+!CS?wD4Ug0Y=~v0V@_ z$e=nEG^kTJbBNA4HwMgbAQ5f`Yz9=2Q86MdU=UD&MU<_!WkCiPE%PJZi>njmb)vj( zz-|WBaJNAXqud0Po6u!e!(9mX0QLZOQXZ7o4cHCX$;!L(`ECXmFS8@Q5oI-^tQNo) zGX{Zl&&xDWnN5gmLbw&M6|j-=psW_a7QjYUmhJf#1{Xcg&o09LUVIzH6OdM|H%hDI zK%GTy#1(iM@MVh^`RpC@`ilJL%NPSJqci8U^8hgCnh!r=6mznDvI4A+puU{OfJ*6wt<=Yn zFXh=AScPyKowY#k0rX=%N-yudgx+CC<)QSNKS2F7_50+@AiiBIS07LPFYp+VdzWC1 z3gI!Gp82GjZ%)rWdmYP=mdzzlnIb&oO~gEb547`2QXVdplMcXSBNo!T$)!nnA9e5B zH8}UefNy_P;2h2FypZID-_d})N)gt~VBRG~DYZE89wC+dIK<~Tcm0POaRo*Gd*~f4 zd{qm0P=7h@G52Bdh z=qzRvaDe|Az7}hjB-y)&%G}`C@rUD{BQ$TseKVK(hhxC!x}tmUv8=oIvEQ=1ScjnD z%;vCIIcI(iTJ@r>M$}nTRC2Ip&95a}O(0Xk`#5vqFR|7MZF4`J+)Mo6?LX6?m4mtq zsXcs7ENqLk;SYsGd+z&Lij}Pvuf}gT<_5_BMqWSS%QSx+I9qE>2^Kjs!BT@co|?o2 zOSQ>3zuI7&FMEyi6);Hw|74$WKAp1(dj5C#*9!g(ar~$7zH;hxgnsiU9XsA>B|Kc} zJI#@{%^xZ9KR39}pL;jjmrD0}0rga*jqj8d`M@X4PZEEW()pvHd3q7j6Cbp6M0?t?DLEnnTqcH3C0!| z<9*RgnxbtX&}*2|5RFmhb%^T{bzna9;;9%~1eMYSCe$-M21MA5Fq;R)y_M=EIiPia zZ9Ao8rDH+5eCSGxT$Al~ml$tsK7c;xS9ESg;loJJ=CoYu+upC6l0l1Pq6NlcI9KLD ztgFB`zaSe@O9k%DupztDDLP}O?M29O>4M5ye@Z2rBWqh^D=N9iLUV86CB}?mPJ74O z7#l2**OgG)d7Mjq3pQgxl`cH8QbK=$a!FTcZ6L~oO|n|4?Ie$y93n1*bd|#36~;`~ zbk^2VYbMDd!jMI(i_0g%Sz3A~qXEb{Y!%6yE=>;Ug%$>W9-Mb|TG?vNj_CDU4!Ht) zy$M$t^jhe6HNnNuap*bf58x^kc2@!q>0Haqb>F}2uj{_Q2IH&KE5Q%Y%{oPA$vbwu zImY$%%@M>w=6}N4CE^BR%CYFmp>utDkq7Hk>ZjX^xc0N>nS2w^1IPn8jLK6%ba#_3 zfd9l>tqi4f;eKW7!jMJ-g!>Tg*M*NEJfMZqRx8PE1kcGkUFw_Q|H8rOItM4PmWBEq zqLCN8K)*hD9?}h=yyHs8!eOmUl2ycyAbu3_j9yH>5${q5yYOs$o$n`1_R+qOtVmZE z-GXyg>5SfboU>ZL{1Nw_D-Mv3drF1^o=5rv?h-nq8Q(_gG}!1o*!79*J0Y->zzOSd zmD0;HoChR3;YRi!^0{N<6=$PfDbepK0dSw5Z>XnKow3?U3TkMIfMtaT(G z$gjyMol%N-CZm8kx^iJRF3XITr{61QZ{H{HA-$Do4wxQkU&2mD@b?9X6E@=am-2*cJeYmmE}@@7a*L8AHYopKeCCAc&-qRx_mDpE`T%eAhVY>ioDeR zN{ttkPvEDouK{_e{j5H~s%YB(&Up4V{H+A(ng0M-uES-KBlyNK#8q%S-U#X1(5!1i zOLQBg)5y~*+R!HQ1`yXYOB;0cNiT^uu=N49usZd4BKniX=req3_ywHt+_M-y z5o{s(HaF7vWwAQ-#335nV9c>t4gd0x8n!=!cwB(t9$Zhnq)z?vCB&n=29y^N<^2rh zb)h_bOK<8%#N*t#sRjcdBVp`eLVOtU7~81fpBeZV2k}PqKM6P+6293ItYJ81gD#k; zt)v@}#mN0m-F>U>9%n00r-wf}eUG)L)Av}PGJTKrAk+6)OFDgzb&J#Y&AR*Tx_g}6 zKAi?@OX#+(eip1o_A7ym->2} z=Eorpy3YE|)OG&iGVrkvaRI>nF?HBcM>Y9POW7D;QJctT(btEvVV@SYi+b$L&%(QH z#5ES7{N;fvN%)traf^afhT|zUgnRZL8u^U~cOwiLWcYMqop~GV-zc>e>s%nSi&`lk z@sHwoU4LBxoYAiuvylF{hC67Jfi!Kf0ciKB7d2TxTNa_5F60T}{xaNycJ-j$Pb~2H z`ie@D55SMSfYEoS1Y31#3;8kRZ^-ap$d6gO@=zVg55^5x+laH~rAdLJnBDyCgf-3|i3+_=Sr?S~Xm3LIHwU|H^L4I+uLxiD$aT4SyM_e8{77Z2o&0><+60dUxM%@7CKW*_GQh-5uS85yo7a))Mhp|u66S7TUMKH zoloBcrL=)=%(=iO1z>CNiHs?nEgAU^rtiA>LHM{@S|)1^64%9@67=LRo4N0Hbrbn+ zMSe>sla(D3`nszjyZ21{ZV0!42bG#WihMzyFZXWBM|w$pCds@#(2w=`dVlolW=$8k z9=re#I5&3d)l5gJKS26UeHoA)VJBX#()5Vw!47KMe?6x01^Id? zAL&2*GPCAuxYSo2c-AZM$%qy^7d|KVy9G3hXc& zM?^U!Aa9pDWHMKKGKWVm&5nKh>%E6@oUz zpJNeRR1@}fB|0C&dB+`B4=6{k9xQ^tuGt*-qvflbPk^T#S5Mm-vIQ=+e*kgEksdZi zpC0orJpBlsjcWFZ@=!eTwIJV^J`cj(?bG(@>T$A9!uCum9oM94c1hq+7_o)d zn6&)^+~uAac(p0p1Ults+#647N_KBHj&O{hF>JnH=68a&^xart-qvfBzGgu3@m6} zwf++0Dt-^XZ7d6D<*mE5*|zSMW*hrJAl1>{t%lp-!?nW~Yu|+V=1shOIzKu# zAJyM|PCNR4t~-kzMZdb_ShO8o(hobjfu~=Bu^rjni2Wov)a04sk-tw1yVN7WS;`yG z#`((DC4-v%K)NBlt;BoK!P#xrM-M`_XR%oy?Ld7tm-^AyXQ{KF>Y@7Z>^Rvg3Ugcc z5!Oh5MtfUlvsoL2&C2GsX!LKIEdmbAW@+zpx!!$*HR6X`McP-iw7}^F)H}@6sI>1a z1No=zmR3fDZsGmN^CR94&0fXQN^h@DcZ&XmkL91jcW+=vqV3h_%7`tB*sDmLqZkMG z4Hx;(JU~7e*$-~7a5lG?$Km$sg9v^15{L~O=V*c840 zw3OMDh|O4P)!B@z&u%l8S|c{&Pz$#g$*VlR(E00=a3$iqeav3mhB#b%Bk}8Q{hfK; zEx$9*)cf03HFe{?5A?pN0uXxN!t_3LK9w7rkIJPvLd|Z(_!z}p-akxJO0R>CTRQdQ z3vE2J*8XapW5>&w`?&5n$*ZH~k zJ@^7`i0cJxiNOW_&Ido3=0WLogCbwdnCE3T@(*#nc{!ib(|TUS?Z-Hr)&;V8#C50> zvWjufb$wJ0#yR_O&vYL6r6Syga0q=Q;na?As@mxL37j4uV4mhW*reET&j%~v2aI8S z1m8ZnSi?Vh+%s}GqT?T69^|?al#g-G2Up=9G%f~>*|?`Q#-DJz)R7Uy92Dvm&vj#=P&>v9Y1M}Ov>KD*mNQN68Ux@Wle;=GKMiAsw3BOoKYvBk_<&>)@{vli zf%h(_^?jC7x`K_BH5=zr4<1KcOdTsQhK=>}SG1B`azB4Xnh9uY9Q6Fp{rf-Ngz_*yz-61t)S{TPP%_#z+Pi%dyp=_~1-4EgtV-v7P#lBOG4U%9+N!M7}=0rKH5=bmpVMF|4(|M=@rso&+LovRc4L>v@}FBq=O!-mb2+`#P^?Say~Id z`>!(K`)4yci2AwgAJ1@oRP*ImgtUH=+kpLpvd`g`%dEH@Zt{IK zKb7>Bd{WX~O{dA%rT8e{mfqb(>GiuWoJFs}(;Vm_`g*}L_!v6BGpA8+2S}gwI!yA7 z{7qV3m%86Nv%DPep1)sGw&t{uJaOI4!I&_jA9z1R@9Sn6E1x(G`I$wR-d*HU|Gm?t zo_J?wolE*r7n}d(b;0+X*1;1W(K^Vp=#pRPl9*#ZQLX8Prc2~AYP!UA;{^QQe`ov1 zfXf;!Jmh(d&`EJdKV>ucPU{K9ma@5T7(1ilw7ohdyQdvaudO z^GRpXp+D}8=!VWGjnbh%zT{H(6@0N@`bYS$s+H@|f6E^|haR2j;4WIm?7Uzaad&fWKyAQ$E08fl3&5&;|)~D>Wcihm9=Zd~PpbzB~Apa z4a{Co;J2AH^A71#DyeH*)oT22dthO%hw!W>oZbi z-=z;b>m*B_*CDZQVB%X8^vH=JSEB%wE=t={>SQ&W53!bw_o~% zzAmjEDvM|vgnd89zVCPeb*E^q1T;tgB%VuTk$}HjqA1C}W zfc%hObxb*k{9?Te;;iJCQ{So_UCH`y`3Uy?ux}1JX#EJj0cOH@bR|83=>$hUoAinlfS=d7(s60OO~BYO*3 z#q*(45!?CBdTJ}vQ`WYGYn@Lg+~nBtLND;iL0d52@Xkt357<7^XP#~a(%p`9kh7JU zG!7u$hhII;{E8&;{sZqGP~R4$ad4S^!3*6%-?h@tXfo};yny$gD`8jE3AvMe=}e3K z4B#ffJ%B!fscG^a_|s)rD|y(3}>wMbqqGLx7#(#OVCM}(OR?UVXj`7x|_F!z4XBIj)7U65233)79pDUg>A+1H+ zD+0f3i6+Y>x1*@kugAN+Q@?kJu}k2{~1o&%m4%GNyC0pPU@GKajt z&5W=WG>yfBa84I^v~fI)&uDa_F_Mr6tUGw?^p9~)823-#eiQj}L_QgK!p;+ZQFg}< z`<1Gc=8ogrkWB7ywpc3ZridS&HNGQvlD>Jxo*iK4kwx-!+0;3njm`E<4lJ!w zI`ZI)Uuhwn$ls%SH9W<04d3c~I((;N$Il0qtvA6hy(upu zPd^VKoE5|G9#Q8etxm{KMnrxFUy8`jo4-bW2io5Re13*|;K5}Fad;<$el|%;5jcZR zgU|yFXN|5u&*L~u({zO9mb7`MX?nmn!M8&t^anWGk8Hc)C8c!L09(I+bzL-GfNeEl zy$V~0sC29vWORT`cmkO@+FStg3<)0%dD!|zeIDk|Qd)f;j1j$}PQ0&KHGGabN6u2` z=sD^fJ4>E%W$UU5ddB;k&yRB)q*s8$q#g&fb&BQ#sO^}iH)wVxwjE08&5|AurQ>Gf zm&}K?fj6h>aB(Yq?VeHTW^4G2Z9JUN#={9D&m_N%Jl@dA;|;`D=4W~zw4pucd;IUM zl6PNeX$;Kk#2lsK@u}<#6@0(gz68ED#)@TYFZqwUJ1%=JVXgV)gthk2YWVv3%8SrN zoY6>U3e_~&q_yKet;2aU8Caia={$sW95^SdCOK28d6b=rl^Pmof1MW9Obovb%H_*Gp48#{xol1w(J1r9>+8n~q`tY3j=XhSA zJx5#_*-y%+#i6|HFUE7=Iph_14qzSe&-^ZR;Bmy2>+r0I;5qPX_zy$C6E@XZDe$a9 zT|_J9%f{fP;8_{`fHbVN6gb{ zc1_qN_&u+`rj)MskUf}f4jIpi9Xq<3IS;zf=dX72v~1nU0OnrpBr8-N%7Xv1dV}7# z5b>w9qz{Iqo^s<+y7%fr>COCOef zw>(V#GWHidEO?}?FTgw9*UwW*Z^4*J@8{f7r5|fRzO#`A^v7Jqql>H9yy^6uMRZzP zORUK{^2m-IKUI{iwbIM;wj*Ca|NdN* zw*`3vc_9OQ=UW>2J96|j@U1a_ayQMv>EyK-bg80mjFVi*)aSx~^zM6G8**zuDM%GUh$Xgd8QpSSC^2V?67K0D7&r`Mb_ z>6FaIp`tvz|2r3*upT#Je~LMc5GU4WYjR0tK{lZq$9}Gq-U=Bymu@^)#dYJk3ZyNM z(Tyy~youv>tOU=wtO*=MJhhi}1O0mf<|_FflW5&IcCFTK;PfMuL$(6CaqI^iKfP`^ zR#uy=E2|T&D>0T>sgpMv1A^bL{!J;ptub0JZVS%j_iY%L&(sS_M?6Lu({r-XdeK=n zQ!hGcy$JOA)rVv2M%>=B^ZV7?wRR&P&e4mkD-q@07vcA9*pEbOX}MnLb%JaM(z!7Q zYOhXo*hw!cpbrlw&ZZB)`C}}OO6ga-X42=Ym`gbqeZJbI$y$Uyqz@ehGxeb(hqvc9 zm?w|s4c5E-=zxD_%;IB`9A1@^eWtCtz9hxq_LjM!^L zeZ;dBTo0ZtLt54ckZp?T^U+^OLy&de_w(_(Hat*sN^@Cr! z&Ah$ItAPK0Tv*G+?4#z7!k!&PKkxE#**p4mjaQBxdoVtA3ER8}Yeih}_qaUjc@A6# zW|n#64WusRkhEH2Ks87S&clZT7%VTYa-6r4Pvo|@6x{8q=XBp@L z+SVtg;QQ@qHu9TFa20-gaJ!odq-w8ZSTn9 zw7nx+Pg_pYJJ_5V*>$q-D9;|jt*xBX_{-<#__kp#h|}7OF|8k0wJEbIir$EWKT{P$ zbDjJiy6PM>2YuHzMbmt35OK{^e>5G}PQOodsfW^B>h2awr%%KA@bcgAOrC|tkl(dc zGikh**^P+&u2ndV*9P=7j+WoGjZ_z>(QY%R?HA|c`0X0jXnG%HcXN#Vmd%vk{D}O% z^bXNdvjb!Ulu~zQH2vJLRqpHv?{~2?1jDazAx~Bnliq86L zIDfx()}Kq=345ZdvpqvuP3!I@KY-2xTF3ZAI67K(;=S8CVUKqPQTKJC?jZRI+8P2; zZ&qyCD2t7o8J+>`!A6e83%Qd_%GR~P!jF_hJP4*Ysz@axr=<7jDx|EJNcwHW&+P7D0@vve{1 z;yk(jyK>1ToE~`h10J&ZHsF-599v<_#$plD-U?Geiv~8O?F)BQ^#c~neFSK{Tu5|(kl1~^XZ)^ zpEIhm!DnFWp4TVxy~?y_b$w#5naAI@YQ1T)cKs!zf%S<~wLDK45NX-o)&%VDPBcMJ zJ8{t~SJKl~=xHDP4TGT5ta|F$F;&dg#Fy0HjkRnt@kuEy%GdVi;J#oTcm+=gH zf+NouEshqs5%00LOPG5t&LlaRF6(F!e2^lXH&Eo&!#? z7g`|uMLi@R#ADRcOYOuyue)W84e@M0)rI&F#dBUi3Eee__7_Fj2}b+UqJHA7);{Dt zM)Bn1P=3dbC*dy?4Iq9HZDzVg@!ZFMvJz#diFO><+XYefa7@|kU5T#j9F#qZvd2*N zxQ4SR+e-VlXpj7Qlj){v{M$8X4 zAU)pC%}h`0T_`kCSV6WKu71fE!74EXhTF)b+0cJZezbyMG4s*

TFMe%ssgEn-I}i)VZ-Os}If>qn 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ȋ@cOrY{lfeQnt$iNd;L4T{+;IEx!e2) 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 n{Yx)@{G~j3`GqIR3m?m0x_kb~i=W6|N 256 required for screen log +DebugThreshold equ 257 + + org 0x388 +DebugFlags ds.l 1 ; 388 ; bit 1<< 1 required for screen log +NanodbgrFlagShift equ 0 +NanodbgrFlagBit equ 31 - NanodbgrFlagShift +LogFlagShift equ 1 +LogFlagBit equ 31 - LogFlagShift + + + endr + + + + +;_______________________________________________________________________ +; System Info Record +; +; Used to pass System information from the NanoKernel to user mode +; software. +;_______________________________________________________________________ + +NKSystemInfoPtr equ $5FFFEFF0 ; logical address of NKSystemInfo record +NKSystemInfoVer equ $5FFFEFF4 ; version number of NKSystemInfo record +NKSystemInfoLen equ $5FFFEFF6 ; length of NKSystemInfo record + +NKSystemInfo record 0,increment +PhysicalMemorySize ds.l 1 ; 000, irp+dc0 ; Number of bytes in Physical RAM +UsableMemorySize ds.l 1 ; 004, irp+dc4 ; Number of bytes in Usable RAM +LogicalMemorySize ds.l 1 ; 008, irp+dc8 ; Number of bytes in Logical RAM +HashTableSize ds.l 1 ; 00c, irp+dcc ; Number of bytes in Memory Hash Table + +L2DataCacheTotalSize ds.l 1 ; 010, irp+dd0 ; number of bytes in the L2 Data Cache +L2InstCacheTotalSize ds.l 1 ; 014, irp+dd4 ; number of bytes in the L2 Instruction Cache +L2CombinedCaches ds.w 1 ; 018, irp+dd8 ; 1 <- combined or no cache, 0 <- split cache +L2InstCacheBlockSize ds.w 1 ; 01a, irp+dda ; number of bytes in a Block of the L2 Instruction Cache +L2DataCacheBlockSize ds.w 1 ; 01c, irp+ddc ; number of bytes in a Block of the L2 Data Cache +L2InstCacheAssociativity ds.w 1 ; 01e, irp+dde ; Associativity of the L2 Instruction Cache +L2DataCacheAssociativity ds.w 1 ; 020, irp+de0 ; Associativity of the L2 Data Cache + ds.b 2 ; 022, irp+de2 ; unused + + ds.b 2 ; 024, irp+de4 ; unused +FlashManufacturerCode ds.b 1 ; 026, irp+de6 ; Flash ROM Manufacturer code +FlashDeviceCode ds.b 1 ; 027, irp+de7 ; Flash ROM Device code +FlashStart ds.l 1 ; 028, irp+de8 ; Starting address of Flash ROM +FlashSize ds.l 1 ; 02c, irp+dec ; Number of bytes in Flash ROM + +Bank0Start ds.l 1 ; 030, irp+df0 ; Starting address of RAM bank 0 +Bank0Size ds.l 1 ; 034, irp+df4 ; Number of bytes in RAM bank 0 +Bank1Start ds.l 1 ; 038, irp+df8 ; Starting address of RAM bank 1 +Bank1Size ds.l 1 ; 03c, irp+dfc ; Number of bytes in RAM bank 1 +Bank2Start ds.l 1 ; 040, irp+e00 ; Starting address of RAM bank 2 +Bank2Size ds.l 1 ; 044, irp+e04 ; Number of bytes in RAM bank 2 +Bank3Start ds.l 1 ; 048, irp+e08 ; Starting address of RAM bank 3 +Bank3Size ds.l 1 ; 04c, irp+e0c ; Number of bytes in RAM bank 3 +Bank4Start ds.l 1 ; 050, irp+e10 ; Starting address of RAM bank 4 +Bank4Size ds.l 1 ; 054, irp+e14 ; Number of bytes in RAM bank 4 +Bank5Start ds.l 1 ; 058, irp+e18 ; Starting address of RAM bank 5 +Bank5Size ds.l 1 ; 05c, irp+e1c ; Number of bytes in RAM bank 5 +Bank6Start ds.l 1 ; 060, irp+e20 ; Starting address of RAM bank 6 +Bank6Size ds.l 1 ; 064, irp+e24 ; Number of bytes in RAM bank 6 +Bank7Start ds.l 1 ; 068, irp+e28 ; Starting address of RAM bank 7 +Bank7Size ds.l 1 ; 06c, irp+e2c ; Number of bytes in RAM bank 7 +Bank8Start ds.l 1 ; 070, irp+e30 ; Starting address of RAM bank 8 +Bank8Size ds.l 1 ; 074, irp+e34 ; Number of bytes in RAM bank 8 +Bank9Start ds.l 1 ; 078, irp+e38 ; Starting address of RAM bank 9 +Bank9Size ds.l 1 ; 07c, irp+e3c ; Number of bytes in RAM bank 9 +Bank10Start ds.l 1 ; 080, irp+e40 ; Starting address of RAM bank 10 +Bank10Size ds.l 1 ; 084, irp+e44 ; Number of bytes in RAM bank 10 +Bank11Start ds.l 1 ; 088, irp+e48 ; Starting address of RAM bank 11 +Bank11Size ds.l 1 ; 08c, irp+e4c ; Number of bytes in RAM bank 11 +Bank12Start ds.l 1 ; 090, irp+e50 ; Starting address of RAM bank 12 +Bank12Size ds.l 1 ; 094, irp+e54 ; Number of bytes in RAM bank 12 +Bank13Start ds.l 1 ; 098, irp+e58 ; Starting address of RAM bank 13 +Bank13Size ds.l 1 ; 09c, irp+e5c ; Number of bytes in RAM bank 13 +Bank14Start ds.l 1 ; 0a0, irp+e60 ; Starting address of RAM bank 14 +Bank14Size ds.l 1 ; 0a4, irp+e64 ; Number of bytes in RAM bank 14 +Bank15Start ds.l 1 ; 0a8, irp+e68 ; Starting address of RAM bank 15 +Bank15Size ds.l 1 ; 0ac, irp+e6c ; Number of bytes in RAM bank 15 +Bank16Start ds.l 1 ; 0b0, irp+e70 ; Starting address of RAM bank 16 +Bank16Size ds.l 1 ; 0b4, irp+e74 ; Number of bytes in RAM bank 16 +Bank17Start ds.l 1 ; 0b8, irp+e78 ; Starting address of RAM bank 17 +Bank17Size ds.l 1 ; 0bc, irp+e7c ; Number of bytes in RAM bank 17 +Bank18Start ds.l 1 ; 0c0, irp+e80 ; Starting address of RAM bank 18 +Bank18Size ds.l 1 ; 0c4, irp+e84 ; Number of bytes in RAM bank 18 +Bank19Start ds.l 1 ; 0c8, irp+e88 ; Starting address of RAM bank 19 +Bank19Size ds.l 1 ; 0cc, irp+e8c ; Number of bytes in RAM bank 19 +Bank20Start ds.l 1 ; 0d0, irp+e90 ; Starting address of RAM bank 20 +Bank20Size ds.l 1 ; 0d4, irp+e94 ; Number of bytes in RAM bank 20 +Bank21Start ds.l 1 ; 0d8, irp+e98 ; Starting address of RAM bank 21 +Bank21Size ds.l 1 ; 0dc, irp+e9c ; Number of bytes in RAM bank 21 +Bank22Start ds.l 1 ; 0e0, irp+ea0 ; Starting address of RAM bank 22 +Bank22Size ds.l 1 ; 0e4, irp+ea4 ; Number of bytes in RAM bank 22 +Bank23Start ds.l 1 ; 0e8, irp+ea8 ; Starting address of RAM bank 23 +Bank23Size ds.l 1 ; 0ec, irp+eac ; Number of bytes in RAM bank 23 +Bank24Start ds.l 1 ; 0f0, irp+eb0 ; Starting address of RAM bank 24 +Bank24Size ds.l 1 ; 0f4, irp+eb4 ; Number of bytes in RAM bank 24 +Bank25Start ds.l 1 ; 0f8, irp+eb8 ; Starting address of RAM bank 25 +Bank25Size ds.l 1 ; 0fc, irp+ebc ; Number of bytes in RAM bank 25 +EndOfBanks +MaxBanks equ 26 ; Pads out to old struct len (cache block), more to come... + + ; Interrupt Support Data +IntCntrBaseAddr ds.l 1 ; 100, irp+ec0 ; Interrupt Controller Base Address (variable is used since this is a PCI Dev and address is relocatable) +IntPendingReg ds.l 2 ; 104, irp+ec4 ; Data of current interrupts pending register + + ; These fields were added to report information about tightly-coupled L2 caches. + ; The inline L2 information should be used in situations where there is a CPU + ; card L2 cache that can coexist with a motherboard L2. + +InlineL2DSize ds.l 1 ; 10c, irp+ecc ; Size of in-line L2 Dcache +InlineL2ISize ds.l 1 ; 110, irp+ed0 ; Size of in-line L2 Icache +InlineL2Combined ds.w 1 ; 114, irp+ed4 ; 1 <- combined or no cache, 0 <- split cache +InlineL2IBlockSize ds.w 1 ; 116, irp+ed6 ; Block size of in-line I L2 cache +InlineL2DBlockSize ds.w 1 ; 118, irp+ed8 ; Block size of in-line D L2 cache +InlineL2IAssoc ds.w 1 ; 11a, irp+eda ; Associativity of L2 I +InlineL2DAssoc ds.w 1 ; 11c, irp+edc ; Associativity of L2 D + ds.w 1 ; 11e, irp+ede ; pad + + ; More Interrupt Support Data +IntsCompleted ds.l 2 ; 120, irp+ee0 ; completed interrupts + + align 5 ; pad to nice cache block alignment + endr + + + + +;_______________________________________________________________________ +; Diagnostic Info Record +; +; Used to pass Diagnostic information from the power on Diagnostics to +; the NanoKernel, and from the NanoKernel to user mode software. +;_______________________________________________________________________ + +NKDiagInfoPtr equ $5FFFEFE8 ; logical address of DiagnosticInfo record +NKDiagInfoVer equ $5FFFEFEC ; version number of DiagnosticInfo record +NKDiagInfoLen equ $5FFFEFEE ; length of DiagnosticInfo record + +NKDiagInfo record 0,increment +BankMBFailOffset ds.l 1 ; 000 ; Mother Board RAM failure code +BankAFailOffset ds.l 1 ; 004 ; Bank A RAM failure code +BankBFailOffset ds.l 1 ; 008 ; Bank B RAM failure code +BankCFailOffset ds.l 1 ; 00c ; Bank C RAM failure code + +BankDFailOffset ds.l 1 ; 010 ; Bank D RAM failure code +BankEFailOffset ds.l 1 ; 014 ; Bank E RAM failure code +BankFFailOffset ds.l 1 ; 018 ; Bank F RAM failure code +BankGFailOffset ds.l 1 ; 01c ; Bank G RAM failure code + +BankHFailOffset ds.l 1 ; 020 ; Bank H RAM failure code +CacheFailOffset ds.l 1 ; 024 ; cache failure code +LongBootParamOffset ds.l 1 ; 028 ; on longBoot this is where the params will be +POSTTraceOffset ds.l 1 ; 02c ; this tells us what route the POST took + +POSTOldWarmOffset ds.l 1 ; 030 ; logged address of old warmstart flag +POSTOldLongOffset ds.l 1 ; 034 ; logged address of old long boot flag +POSTOldGlobbOffset ds.l 1 ; 038 ; logged address of old Diagnostic Info Record +POSTOldParamOffset ds.l 1 ; 03c ; the params from the old diag globb + +POSTStartRTCUOffset ds.l 1 ; 040 ; PPC Real Time Clock Upper at start of POST +POSTStartRTCLOffset ds.l 1 ; 044 ; PPC Real Time Clock Lower at start of POST +POSTEndRTCUOffset ds.l 1 ; 048 ; PPC Real Time Clock Upper at end of POST +POSTEndRTCLOffset ds.l 1 ; 04c ; PPC Real Time Clock Lower at end of POST + +POSTTestTypeOffset ds.l 1 ; 050 ; when long RAM tests fail test type which failed is put here +POSTError2Offset ds.l 1 ; 054 ; result codes from tests +POSTError3Offset ds.l 1 ; 058 ; result codes from tests +POSTError4Offset ds.l 1 ; 05c ; result codes from tests + +RegistersStore ds.b 140 ; 060 ; store all 60x registers here, still fit into 256 bytes size. + +; Everything BEFORE here is new (hence the funny-sized register store) + +DiagPOSTResult2 ds.l 1 ; 0ec ; POST results +DiagPOSTResult1 ds.l 1 ; 0f0 ; POST results +DiagLongBootSig ds.l 1 ; 0f4 ; Burn in restart flag +DiagWarmStartHigh ds.l 1 ; 0f8 ; First long of native warm start (WLSC) +DiagWarmStartLow ds.l 1 ; 0fc ; Second long of native warm start (SamB) + align 5 ; pad to nice cache block alignment + endr + + + + +;_______________________________________________________________________ +; NanoKernel Info Record +; +; Used to pass NanoKernel statistics from the NanoKernel to user mode +; software. +;_______________________________________________________________________ + +NKNanoKernelInfoPtr equ $5FFFEFE0 ; logical address of NanoKernelInfo record +NKNanoKernelInfoVer equ $5FFFEFE4 ; version number of NanoKernelInfo record +NKNanoKernelInfoLen equ $5FFFEFE6 ; length of NanoKernelInfo record + +NKNanoKernelInfo record 0,increment +ExceptionCauseCounts ds.l 32 ; 000, kdp+dc0 ; counters per exception cause +NanoKernelCallCounts ds.l 16 ; 080, kdp+e40 ; counters per NanoKernel call +ExternalIntCount ds.l 1 ; 0c0, kdp+e80 ; count of External Interrupts +MisalignmentCount ds.l 1 ; 0c4, kdp+e84 ; count of Misalignment Interrupts +FPUReloadCount ds.l 1 ; 0c8, kdp+e88 ; count of FPU reloads on demand +DecrementerIntCount ds.l 1 ; 0cc, kdp+e8c ; count of Decrementer Interrupts +QuietWriteCount ds.l 1 ; 0d0, kdp+e90 ; count of Writes to Quiet Read-Only memory +HashTableCreateCount ds.l 1 ; 0d4, kdp+e94 ; count of Hash Table Entry creations +HashTableDeleteCount ds.l 1 ; 0d8, kdp+e98 ; count of Hash Table Entry deletions +HashTableOverflowCount ds.l 1 ; 0dc, kdp+e9c ; count of Hash Table Entry overflows +EmulatedUnimpInstCount ds.l 1 ; 0e0, kdp+ea0 ; count of Emulated unimplemented instructions +NCBPtrCacheMissCount ds.l 1 ; 0e4, kdp+ea4 ; count of NCB Pointer cache misses +ExceptionPropagateCount ds.l 1 ; 0e8, kdp+ea8 ; count of Exceptions propagated to system +ExceptionForcedCount ds.l 1 ; 0ec, kdp+eac ; count of Exceptions forced to system +SysContextCpuTime ds.l 2 ; 0f0, kdp+eb0 ; CPU Time used by System Context +AltContextCpuTime ds.l 2 ; 0f8, kdp+eb4 ; CPU Time used by Alternate Context + +; This stuff is new (starts at 0x100) + +blueProcessID ds.l 1 ; 100, kdp+ec0 ; ID of the blue process. +blueTaskID ds.l 1 ; 104, kdp+ec4 ; ID of the blue task. +pageQueueID ds.l 1 ; 108, kdp+ec8 ; ID of the page fault queue. +TaskCount ds.l 1 ; 10c, kdp+ecc ; Number of tasks. +FreePoolExtendCount ds.l 1 ; 110, kdp+ed0 ; Number of pages given to the nanokernel. + +;rsrv1 ds.l 3 ; 114, kdp+ed4 ; reserved??? + +; My additions + + org 0x11c +ConfigFlags ds.l 1 ; 11c, kdp+edc ; includes ScreenConsole ... TODO put flag equs here +NanodbgrFlagShift equ 1 +NanodbgrFlagBit equ 31 - NanodbgrFlagShift +LogFlagShift equ 3 +LogFlagBit equ 31 - LogFlagShift +; bit 31 always set on replacement, bit 27 set on replacement with ROM 2.7f3 or later + + org 0x128 +VMDispatchCountTblPtr ds.l 1 ; 128, kdp+ee8 + ds.l 1 + ds.l 1 +MPDispatchCountTblPtr ds.l 1 ; 134, kdp+ef4 ; ??????? +AddrSpcSetCtr ds.l 1 ; 138, kdp+ef8 ; incremented by SetAddrSpcRegisters +IDCtr ds.l 1 ; 13c, kdp+efc + + org 0x160 + endr + + + + +;_______________________________________________________________________ +; Processor Info Record +; +; Used to pass Processor information from the NanoKernel to user mode +; software. +;_______________________________________________________________________ + +NKProcessorInfoPtr equ $5FFFEFD8 ; logical address of ProcessorInfo record +NKProcessorInfoVer equ $5FFFEFDC ; version number of ProcessorInfo record +NKProcessorInfoLen equ $5FFFEFDE ; length of ProcessorInfo record + +NKProcessorInfo record 0,increment +ProcessorVersionReg ds.l 1 ; 000, kdp+f20 ; contents of the PVR special purpose register +CpuClockRateHz ds.l 1 ; 004, kdp+f24 ; CPU Clock frequency +BusClockRateHz ds.l 1 ; 008, kdp+f28 ; Bus Clock frequency +DecClockRateHz ds.l 1 ; 00c, kdp+f2c ; Decrementer Clock frequency + +Ovr +PageSize ds.l 1 ; 010, kdp+f30 ; number of bytes in a memory page +DataCacheTotalSize ds.l 1 ; 014, kdp+f34 ; number of bytes in the Data Cache +InstCacheTotalSize ds.l 1 ; 018, kdp+f38 ; number of bytes in the Instruction Cache +CoherencyBlockSize ds.w 1 ; 01c, kdp+f3c ; number of bytes in a Coherency Block +ReservationGranuleSize ds.w 1 ; 01e, kdp+f3e ; number of bytes in a Reservation Granule +CombinedCaches ds.w 1 ; 020, kdp+f40 ; 1 <- combined or no cache, 0 <- split cache +InstCacheLineSize ds.w 1 ; 022, kdp+f42 ; number of bytes in a Line of the Instruction Cache +DataCacheLineSize ds.w 1 ; 024, kdp+f44 ; number of bytes in a Line of the Data Cache +DataCacheBlockSizeTouch ds.w 1 ; 026, kdp+f46 ; number of bytes in a Block for DCBT DCBTST +InstCacheBlockSize ds.w 1 ; 028, kdp+f48 ; number of bytes in a Block of the Instruction Cache +DataCacheBlockSize ds.w 1 ; 02a, kdp+f4a ; number of bytes in a Block of the Data Cache +InstCacheAssociativity ds.w 1 ; 02c, kdp+f4c ; Associativity of the Instruction Cache +DataCacheAssociativity ds.w 1 ; 02e, kdp+f4e ; Associativity of the Data Cache + +TransCacheTotalSize ds.w 1 ; 030, kdp+f50 ; number of entries in the Translation Cache +TransCacheAssociativity ds.w 1 ; 032, kdp+f52 ; Associativity of the Translation Cache +OvrEnd + +; These fields were added to report information about back-side L2 caches + +ProcessorL2DSize ds.l 1 ; 034, kdp+f54 ; Size of back-side L2 Dcache +ProcessorL2ISize ds.l 1 ; 038, kdp+f58 ; Size of back-side L2 Icache +ProcessorL2Combined ds.w 1 ; 03c, kdp+f5c ; 1 <- combined or no cache, 0 <- split cache +ProcessorL2IBlockSize ds.w 1 ; 03e, kdp+f5e ; Block size of back-side I L2 cache +ProcessorL2DBlockSize ds.w 1 ; 040, kdp+f60 ; Block size of back-side D L2 cache +ProcessorL2IAssoc ds.w 1 ; 042, kdp+f62 ; Associativity of L2 I +ProcessorL2DAssoc ds.w 1 ; 044, kdp+f64 ; Associativity of L2 D + +filler1 ds.w 1 ; 046, kdp+f66 ; align to long + +; ProcessorFlags - Definitions for the processor flags field. These are bit positions, +; as in 1 << hasVMX, and not masks. +hasL2CR equ 0 +hasPLRUL1 equ 1 +hasTAU equ 2 +hasVMX equ 3 +unknownFlag equ 4 +hasExtraBATs equ 5 +ProcessorFlags ds.l 1 ; 048, kdp+f68 ; flags to specify processor features + + align 5 ; pad to nice cache block alignment + + org 0x05e +SetToZero ds.w 1 ; 05e, kdp+f7e ; by same code that sets below +CpuClockRateHzCopy ds.l 1 ; 060, kdp+f80 ; copies by Init.s +BusClockRateHzCopy ds.l 1 ; 064, kdp+f84 ; copies by Init.s +DecClockRateHzCopy ds.l 1 ; 068, kdp+f88 ; copies by Init.s + + endr + + + + +;_______________________________________________________________________ +; Hardware Info Record +; +; Used to pass hardware information from the NanoKernel to user mode +; software. +;_______________________________________________________________________ + +NKHWInfoPtr equ $5FFFEFD0 ; logical address of HWInfo record +NKHWInfoVer equ $5FFFEFD4 ; version number of HWInfo record +NKHWInfoLen equ $5FFFEFD6 ; length of HWInfo record + +NKHWInfo record 0,increment +MacROM_Base ds.l 1 ; 000, irp+f00 ; base address (physical) of Mac ROM +DeviceTreeBase ds.l 1 ; 004, irp+f04 ; base address of the copied device tree properties +UniversalInfoTableBase ds.l 1 ; 008, irp+f08 ; base address of the Universal Info Table +ConfigInfoTableBase ds.l 1 ; 00c, irp+f0c ; base address of the Config Info Table +VectorLookupTable ds.l 1 ; 010, irp+f10 ; base address of the interrupt vector lookup table (short *) +VectorMaskTable ds.l 1 ; 014, irp+f14 ; base address of the interrupt vector mask table (long *) + +OpenPICBaseAddr ds.l 1 ; 018, irp+f18 ; OpenPIC base address + +ISAMaster8259 ds.l 1 ; 01c, irp+f1c ; ISA Master 8259 ports (char *) +ISASlave8259 ds.l 1 ; 020, irp+f20 ; ISA Slave 8259 ports (char *) +InterruptAck8259 ds.l 1 ; 024, irp+f24 ; address to read to ack 8259 interrupt (long *) + + ; interrupt pending bits (actively changing) + +PendingInts ds.l 2 ; 028, irp+f28 ; 64 bits of pending interrupts + + ; some Mac I/O device base addresses + +ADB_Base ds.l 1 ; 030, irp+f30 ; base address of ADB +SCSI_DMA_Base ds.l 1 ; 034, irp+f34 ; base address of SCSI DMA registers + + ; RTAS related stuff + +RTAS_PrivDataArea ds.l 1 ; 038, irp+f38 ; RTAS private data area +MacOS_NVRAM_Offset ds.l 1 ; 03c, irp+f3c ; offset into nvram to MacOS data + +RTAS_NVRAM_Fetch ds.l 1 ; 040, irp+f40 ; token for RTAS NVRAM fetch +RTAS_NVRAM_Store ds.l 1 ; 044, irp+f44 ; token for RTAS NVRAM store +RTAS_Get_Clock ds.l 1 ; 048, irp+f48 ; token for RTAS clock get +RTAS_Set_Clock ds.l 1 ; 04c, irp+f4c ; token for RTAS clock set +RTAS_Restart ds.l 1 ; 050, irp+f50 ; token for RTAS Restart +RTAS_Shutdown ds.l 1 ; 054, irp+f54 ; token for RTAS Shutdown +RTAS_Restart_At ds.l 1 ; 058, irp+f58 ; token for RTAS system startup at specified time +RTAS_EventScan ds.l 1 ; 05c, irp+f5c ; token for RTAS event scan +RTAS_Check_Exception ds.l 1 ; 060, irp+f60 ; token for RTAS check exception +RTAS_Read_PCI_Config ds.l 1 ; 064, irp+f64 ; token for RTAS read PCI config +RTAS_Write_PCI_Config ds.l 1 ; 068, irp+f68 ; token for RTAS write PCI config + + ; SIO interrupt source numbers for the MPIC + +SIOIntVect ds.w 1 ; 06c, irp+f6c ; SIO (8259 cascade vector) vector number +SIOIntBit ds.w 1 ; 06e, irp+f6e ; SIO (8259 cascade vector) bit number + +Signature ds.l 1 ; 070, irp+f70 ; signature for this record ('Hnfo') + + ; more interrupt source numbers + +SpuriousIntVect ds.w 1 ; 074, irp+f74 ; spurious vector number + +CPU_ID ds.w 1 ; 076, irp+f76 ; the ID of this CPU (universal-tables-related) + +SCCAIntVect ds.w 1 ; 078, irp+f78 ; SCC A (non-DMA) vector number +SCCBIntVect ds.w 1 ; 07a, irp+f7a ; SCC B (non-DMA) vector number +SCSIIntVect ds.w 1 ; 07c, irp+f7c ; SCSI vector number +SCSIDMAIntVect ds.w 1 ; 07e, irp+f7e ; SCSI DMA vector number +VIAIntVect ds.w 1 ; 080, irp+f80 ; VIA vector number +VIAIntBit ds.w 1 ; 082, irp+f82 ; VIA bit number +ADBIntVect ds.w 1 ; 084, irp+f84 ; vector number +NMIIntVect ds.w 1 ; 086, irp+f86 ; NMI vector number +NMIIntBit ds.w 1 ; 088, irp+f88 ; NMI bit number + + ; current (actively changing) interrupt handling variables + +ISAPendingInt ds.w 1 ; 08a, irp+f8a ; currently pending ISA/8259 interrupt +CompletedInts ds.b 8 ; 08c, irp+f8c ; completed interrupts + +nkHWInfoFlagSlowMESH equ 1 ; set if fast MESH doesn't work on this box +nkHWInfoFlagAsynchMESH equ 2 ; set if Synchronous MESH doesn't work on this box +nkHWInfoFlagNoCopySWTLB equ 4 ; set if the software TLB walk code for 603 should NOT be copied +HardwareInfoFlags ds.l 1 ; 094, irp+f94 ; 32 bits of flags (see enum above) + +RTAS_Get_PowerOn_Time ds.l 1 ; 098, irp+f98 ; token for RTAS getting time for system startup + + align 5 ; pad to nice cache block alignment (did i get this right?) + endr + + + + +;_______________________________________________________________________ +; Processor State Record +; +; Used to save the state of the processor across sleep. +;_______________________________________________________________________ + +NKProcessorStatePtr equ $5FFFEFC8 ; logical address of ProcessorState record +NKProcessorStateVer equ $5FFFEFCC ; version number of ProcessorState record +NKProcessorStateLen equ $5FFFEFCE ; length of ProcessorState record + +NKProcessorState record 0,increment +saveDBAT0u ds.l 1 ; 000 ; place to store DBAT0U +saveDBAT0l ds.l 1 ; 004 ; place to store DBAT0L +saveDBAT1u ds.l 1 ; 008 ; place to store DBAT1U +saveDBAT1l ds.l 1 ; 00c ; place to store DBAT1L +saveDBAT2u ds.l 1 ; 010 ; place to store DBAT2U +saveDBAT2l ds.l 1 ; 014 ; place to store DBAT2L +saveDBAT3u ds.l 1 ; 018 ; place to store DBAT3U +saveDBAT3l ds.l 1 ; 01c ; place to store DBAT3L + +saveIBAT0u ds.l 1 ; 020 ; place to store IBAT0U +saveIBAT0l ds.l 1 ; 024 ; place to store IBAT0L +saveIBAT1u ds.l 1 ; 028 ; place to store IBAT1U +saveIBAT1l ds.l 1 ; 02c ; place to store IBAT1L +saveIBAT2u ds.l 1 ; 030 ; place to store IBAT2U +saveIBAT2l ds.l 1 ; 034 ; place to store IBAT2L +saveIBAT3u ds.l 1 ; 038 ; place to store IBAT3U +saveIBAT3l ds.l 1 ; 03c ; place to store IBAT3L + +saveSPRG0 ds.l 1 ; 040 ; place to store SPRG0 +saveSPRG1 ds.l 1 ; 044 ; place to store SPRG1 +saveSPRG2 ds.l 1 ; 048 ; place to store SPRG2 +saveSPRG3 ds.l 1 ; 04c ; place to store SPRG3 + +saveL2CR ds.l 1 ; 050 ; place to store Arthur's L2CR + +saveSRR0 ds.l 1 ; 054 ; place to store SRR0 +saveSRR1 ds.l 1 ; 058 ; place to store SRR1 +saveTBU ds.l 1 ; 05c ; place to store TBU +saveTBL ds.l 1 ; 060 ; place to store TBL +saveHID0 ds.l 1 ; 064 ; place to store HID0 +saveDEC ds.l 1 ; 068 ; place to store DEC +saveMSR ds.l 1 ; 06c ; place to store MSR +saveSDR1 ds.l 1 ; 070 ; place to store SDR1 + + ; saveKernelDataPtr needs to always be right after saveReturnAddr + ; because of how the code works. DO NOT CHANGE THIS ORDERING! + +saveReturnAddr ds.l 1 ; 074 ; place to store the addr to jump to. +saveKernelDataPtr ds.l 1 ; 078 ; place to store the KernelDataPtr +saveContextPtr ds.l 1 ; 07c ; place to store the ContextPtr + endr diff --git a/Internal/NKOpaque.a b/Internal/NKOpaque.a new file mode 100644 index 0000000..5b13cd6 --- /dev/null +++ b/Internal/NKOpaque.a @@ -0,0 +1,544 @@ +; Opaque NanoKernel structures: +; - stored in the NanoKernel pool (not always) +; - associated with a class number and opaque ID (not always) +; - referenced by opaque ID (for MPLibrary's benefit) + + + + + +;_______________________________________________________________________ +; ID CLASS 1: PROCESS +; (size: 32b, thud command: id -p) +; +; The NanoKernel's internal representation of a cooperative process +; within the blue environment. Processes and tasks have a many-to-one +; relationship. +; +; There is a special 'blue' process that owns the blue task and all +; the CPU idle tasks. +;_______________________________________________________________________ + +Process record 0,INCR + +kIDClass equ 1 +kSignature equ 'PROC' + +;_______________________ +; Fields +;_______________________ + +ID ds.l 1 ; 00 +Signature ds.l 1 ; 04 ; 'PROC' +Unused ds.l 1 ; 08 ; MPCall_5 does something here +SystemAddressSpaceID ds.l 1 ; 0c ; set by Init.s after addrspc creation +TaskCount ds.l 1 ; 10 ; incremented by CreateTask +SystemAddressSpacePtr ds.l 1 ; 14 +AddressSpaceCount ds.l 1 ; 18 ; incremented by NKCreateAddressSpaceSub + ds.l 1 ; 1c + +Size equ * + endr + + + + +;_______________________________________________________________________ +; ID CLASS 2: TASK +; (size: 1k, thud command: id -t) +; +; What the MPLibrary and NanoKernel call the unit of multitasking. +; (Remember that 'Thread' and 'Process' were taken.) +; +; Contains space for a ContextBlock in the style of the ECB, but +; blue's ContextBlockPtr is redirected to the ECB. +;_______________________________________________________________________ + +Task record 0,INCR + +kIDClass equ 2 +kSignature equ 'TASK' + +;_______________________ +; Task priorities +;_______________________ + +kCriticalPriority equ 0 +kLatencyProtectPriority equ 1 +kNominalPriority equ 2 +kIdlePriority equ 3 + +;_______________________ +; Fields +;_______________________ + +ID ds.l 1 ; 000 +Signature ds.l 1 ; 004 +QueueMember ds.l 4 ; 008:018 ; a task is always a member of a queue, e.g. the RDYQ +MysteryByte1 ds.b 1 ; 018 ; CreateTask sets 0 by default (blue = 2) +Priority ds.b 1 ; 019 ; CreateTask sets 2 by default +MysteryHalf ds.w 1 ; 01a +Weight ds.l 1 ; 01c ; default is 100, blue gets 200, idle gets 1 + ds.l 1 ; 020 + ds.l 1 ; 024 + ds.l 1 ; 028 + ds.l 1 ; 02c + ds.l 1 ; 030 + ds.l 1 ; 034 + ds.l 1 ; 038 + ds.l 1 ; 03c + ds.l 1 ; 040 + ds.l 1 ; 044 + ds.l 1 ; 048 + ds.l 1 ; 04c + ds.l 1 ; 050 + ds.l 1 ; 054 + ds.l 1 ; 058 + ds.l 1 ; 05c +ProcessID ds.l 1 ; 060 +ThingThatAlignVecHits ds.l 1 ; 064 ; IntAlignment is interested in bit 9, MPCall 116 in bit 15 + ds.l 1 ; 068 +OwningProcessPtr ds.l 1 ; 06c +AddressSpacePtr ds.l 1 ; 070 ; borrowed from PROC argument to CreateTask +Name ds.l 1 ; 074 ; 'blue', creator of owning cooperative process, etc +CpuID ds.l 1 ; 078 + ds.l 1 ; 07c +CreateTime3 ds.d 1 ; 080 +ContextBlockPtr ds.l 1 ; 088 ; points internally by default, and to EDP.ECB in blue +VectorSaveArea ds.l 1 ; 08c + ds.l 1 ; 090 + ds.l 1 ; 094 + ds.l 1 ; 098 +NotificationPtr ds.l 1 ; 09c +SemaphoreLLL ds.l 4 ; 0a0:0b0 +Zero ds.l 1 ; 0b0 +One ds.l 1 ; 0b4 + ds.l 1 ; 0b8 + ds.l 1 ; 0bc +Zero1 ds.l 1 ; 0c0 +Zero2 ds.l 1 ; 0c4 +CreateTime1 ds.d 1 ; 0c8 +CreateTime2 ds.d 1 ; 0d0 + ds.l 1 ; 0d8 + ds.l 1 ; 0dc +Zero3 ds.l 1 ; 0e0 +Zero4 ds.l 1 ; 0e4 +Zero5 ds.l 1 ; 0e8 + ds.l 1 ; 0ec +YellowVecTblPtr ds.l 1 ; 0f0 + ds.l 1 ; 0f4 + ds.l 1 ; 0f8 + ds.l 1 ; 0fc +ContextBlock ds.b 768 ; 100:400 ; like the EDP's Emulator Context Block -- unsure of size + +Size equ * + endr + + + + +;_______________________________________________________________________ +; ID CLASS 3: TIMER +; (size: 64b, thud command: id -tm) +; +;_______________________________________________________________________ + +Timer record 0,INCR + +kIDClass equ 3 +kSignature equ 'TIME' + +;_______________________ +; Fields +;_______________________ + +ID ds.l 1 ; 00 +Signature ds.l 1 ; 04 + ds.l 1 ; 08 + ds.l 1 ; 0c +ProcessID ds.l 1 ; 10 + ds.l 1 ; 14 + ds.l 1 ; 18 + ds.l 1 ; 1c + ds.l 1 ; 20 + ds.l 1 ; 24 + ds.l 1 ; 28 + ds.l 1 ; 2c + ds.l 1 ; 30 + ds.l 1 ; 34 + ds.l 1 ; 38 + ds.l 1 ; 3c + +Size equ * + endr + + + + +;_______________________________________________________________________ +; ID CLASS 4: QUEUE +; (size: 52b, thud command: id -q) +; +;_______________________________________________________________________ + +Queue record 0,INCR + +kIDClass equ 4 + +;_______________________ +; Fields +;_______________________ + +LLL ds.l 4 ; 00:10 + ds.l 4 ; 10:20 +ProcessID ds.l 1 ; 20 + ds.l 1 ; 24 + ds.l 1 ; 28 + ds.l 1 ; 2c + ds.l 1 ; 30 + +Size equ * + endr + + + +ReadyQueue record 0,INCR + +LLL ds.l 4 ; 00:10 ; nothing fancy +Counter ds.l 1 ; 10 ; InitRDYQs sets, TaskReadyAsNext bumps +TotalWeight ds.l 1 ; 14 ; divide available time by these +Timecake ds.d 1 ; 18 ; period of ~1ms, 8ms, 64ms, 512ms + + + org 0x20 +; Constants +kSignature equ 'RDYQ' + + endr + + + + +kTimerQueueSignature equ 'TMRQ' +kDelayQueueSignature equ 'DLYQ' +kDbugQueueSignature equ 'DBUG' +kPageQueueSignature equ 'PAGQ' +kNotQueueSignature equ 'NOTQ' +kSemaQueueSignature equ 'SEMQ' + + + + +;_______________________________________________________________________ +; ID CLASS 5: SEMAPHORE +; (size: 32b, thud command: id -s) +; +;_______________________________________________________________________ + +Semaphore record 0,INCR + +kIDClass equ 5 +kSignature equ 'SEMA' + +;_______________________ +; Fields +;_______________________ + +LLL ds.l 4 ; 00:10 + ds.l 1 ; 10 + ds.l 1 ; 14 +ProcessID ds.l 1 ; 18 + ds.l 1 ; 1c + +Size equ * + endr + + + + +;_______________________________________________________________________ +; ID CLASS 6: CRITICAL REGION +; (size: 36b, thud command: id -r) +; +;_______________________________________________________________________ + +CriticalRegion record 0,INCR + +kIDClass equ 6 +kSignature equ 'CRGN' + +;_______________________ +; Fields +;_______________________ + +LLL ds.l 4 ; 00:10 +ProcessID ds.l 4 ; 10:20 ; lll.freeform is the field? + ds.l 1 ; 20 + +Size equ * + endr + + + + +;_______________________________________________________________________ +; ID CLASS 7: CPU +; (size: 32+800+128 = 960b, thud command: id -c) +; +;_______________________________________________________________________ + +CPU record 0,INCR + +kIDClass equ 7 +kSignature equ 'CPU ' + +;_______________________ +; Fields +;_______________________ + +ID ds.l 1 ; 00 +Signature ds.l 1 ; 04 +CgrpList ds.l 4 ; 08:18 +Eff ds.l 1 ; 18 ; contains 0x0000000f +IdleTaskPtr ds.l 1 ; 1c + +EWABase ds.b 800 ; negative-indexed parts of EWA +EWA ds.b 128 ; positive-indexed parts of EWA + +Size equ * + endr + + + + + +;_______________________________________________________________________ +; ID CLASS 8: ADDRESS SPACE +; (size: 192b, thud command: id -sp) +; +;_______________________________________________________________________ + +AddressSpace record 0,INCR + +kIDClass equ 8 +kSignature equ 'SPAC' + +;_______________________ +; Fields +;_______________________ + +ID ds.l 1 ; 00 +Signature ds.l 1 ; 04 + ds.l 1 ; 08 +TaskCount ds.l 1 ; 0c ; incremented by CreateTask +RsrvList ds.l 4 ; 10:20 ; LLL +AreaList ds.l 4 ; 20:30 ; LLL +SRs ds.l 16 ; 30:70 ; segment register values +ParentCoherenceSpecialPtr ds.l 1 ; 70 ; SpecialPtr of owning cgrp (in list owned by Cpu) +ProcessID ds.l 1 ; 74 ; ID of owning PROC + ds.l 1 ; 78 + ds.l 1 ; 7c +BATs +BAT0U ds.l 1 ; 80 +BAT0L ds.l 1 ; 84 +BAT1U ds.l 1 ; 88 +BAT1L ds.l 1 ; 8c +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 + + + + +;_______________________________________________________________________ +; ID CLASS 9: EVENT GROUP +; (size: 32b, thud command: id -e) +; +;_______________________________________________________________________ + +EventGroup record 0,INCR + +kIDClass equ 9 +kSignature equ 'EVNT' + +;_______________________ +; Fields +;_______________________ + +LLL ds.l 4 ; 00:10 ; first field is ID + ds.l 1 ; 10 +ProcessID ds.l 1 ; 14 + ds.l 1 ; 18 ; contains 1-8 +/- 16 + ds.l 1 ; 1c + +Size equ * + endr + + + + +;_______________________________________________________________________ +; ID CLASS 10: COHERENCE GROUP +; (size: 88b, thud command: id -cg) +; +;_______________________________________________________________________ + +CoherenceGroup record 0,INCR + +kIDClass equ 10 +kSignature equ 'CGRP' + +;_______________________ +; Fields +;_______________________ + +LLL ds.l 4 ; 00:10 ; element in CpuStructs list of cgrps +GRPSList ds.l 4 ; 10:20 ; my own list of GRPSes (what are they?) +CpuCount ds.l 1 ; 20 +ScheduledCpuCount ds.l 1 ; 24 + ds.l 1 ; 28 + ds.l 1 ; 2c + ds.l 1 ; 30 + ds.l 1 ; 34 + ds.l 1 ; 38 + ds.l 1 ; 3c + ds.l 1 ; 40 + ds.l 1 ; 44 +Incrementer ds.l 1 ; 48 ; number of NKCreateAddressSpaceSub calls % 1M + ds.l 1 ; 4c + ds.l 1 ; 50 + ds.l 1 ; 54 + +Size equ * + endr + + + + +;_______________________________________________________________________ +; ID CLASS 11: AREA +; (size: 160b, thud command: id -a) +; +; A contiguous region of effective addresses with similar properties. +;_______________________________________________________________________ + +Area record 0,INCR + +kIDClass equ 11 +kSignature equ 'AREA' + +;_______________________ +; Fields +;_______________________ + +ID ds.l 1 ; 00 +Signature ds.l 1 ; 04 +TwoFiftySix ds.l 1 ; 08 +ProcessID ds.l 1 ; 0c +AddressSpaceID ds.l 1 ; 10 + ds.l 1 ; 14 + ds.l 1 ; 18 + ds.l 1 ; 1c + ds.l 1 ; 20 +LogicalBase ds.l 1 ; 24 +LogicalBase2 ds.l 1 ; 28 +Length ds.l 1 ; 2c ; in actual bytes! +Zero ds.l 1 ; 30 + ds.l 1 ; 34 +Length2 ds.l 1 ; 38 + ds.l 1 ; 3c + ds.l 1 ; 40 + ds.l 1 ; 44 + ds.l 1 ; 48 + ds.l 1 ; 4c + ds.l 1 ; 50 +LLL ds.l 4 ; 54:64 ; member of address space + ds.l 1 ; 64 + ds.l 1 ; 68 +AddressSpacePtr ds.l 1 ; 6c + ds.l 1 ; 70 + ds.l 1 ; 74 + ds.l 1 ; 78 + ds.l 1 ; 7c + ds.l 1 ; 80 + ds.l 1 ; 84 + ds.l 1 ; 88 + ds.l 1 ; 8c + ds.l 1 ; 90 + ds.l 1 ; 94 + ds.l 1 ; 98 + ds.l 1 ; 9c + +Size equ * + endr + + + + +;_______________________________________________________________________ +; ID CLASS 12: NOTIFICATION +; (size: 40b, thud command: id -n) +; +;_______________________________________________________________________ + +Notification record 0,INCR + +kIDClass equ 12 +kSignature equ 'KNOT' + +;_______________________ +; Fields +;_______________________ + + ds.l 1 ; 00 +Signature ds.l 1 ; 04 +ProcessID ds.l 1 ; 08 + ds.l 1 ; 0c + ds.l 1 ; 10 + ds.l 1 ; 14 + ds.l 1 ; 18 + ds.l 1 ; 1c + ds.l 1 ; 20 + ds.l 1 ; 24 + +Size equ * + endr + + + + +;_______________________________________________________________________ +; ID CLASS 13: CONSOLE LOG +; (size: 16b, thud command: id -nc) +; +; Never seen one in the wild -- must have been in debug builds. +;_______________________________________________________________________ + +ConsoleLog record 0,INCR + +kIDClass equ 13 + +;_______________________ +; Fields +;_______________________ + + ds.l 1 ; 00 + ds.l 1 ; 04 +ProcessID ds.l 1 ; 08 + ds.l 1 ; 0c + +Size equ * + endr diff --git a/Internal/NKPublic.a b/Internal/NKPublic.a new file mode 100644 index 0000000..f63a689 --- /dev/null +++ b/Internal/NKPublic.a @@ -0,0 +1,1001 @@ +;_______________________________________________________________________ +; Data structures internal to the NanoKernel +;_______________________________________________________________________ + +;_______________________________________________________________________ +; NOTE: DECLARING BIT FIELDS +; +; Bit fields get defined inside a record only in order to give them a +; namespace (e.g. MSR_IP). The _bitEqu macro is used to produce three +; equates per bit: +; (name) = the bit's place value +; (name)bit = the bit's PowerPC index (0 is leftmost) +; (name)shift = the bit's 68k index (0 is rightmost) +;_______________________________________________________________________ + + macro + _bitEqu &name, &bit +&name equ 1 << (31-&bit) +&name.bit equ &bit +&name.shift equ 31 - &bit + endm + + + + +;_______________________________________________________________________ +; INFORECORD PAGE +; +; Lives at 5fffe000 on most (all?) PowerPC Macs. The public-ish part +; is the InfoRecord, which lives in the upper 64 bytes. This contains +; logical pointers, sizes and versions for the data structures that +; are shared between the NanoKernel and userspace. See +; PPCInfoRecordsPriv.s for the contents of these structures. +; +;_______________________________________________________________________ + +IRP record 0xdc0,INCR + +SystemInfo ds.l 80 ; dc0:f00 ; other NK versions keep their structures elsewhere, +HWInfo ds.l 48 ; f00:fc0 ; so always use InfoRecord to find them from userspace +InfoRecord ds.l 16 ; fc0:1000 ; the public part + + endr + + + +; Some InfoRecord fields are obliquely referenced from PPCInfoRecordsPriv.h +; (e.g. nkSystemInfoPtr = 0x5FFFEFF0) + +InfoRecord record 0,INCR +InfoRecordPtr ds.l 1 ; 00 kdp/irp+fc0 ; set in kdp, copied to irp + +Zero ds.l 1 ; 04 kdp/irp+fc4 ; const + +NKProcessorStatePtr ds.l 1 ; 08 kdp/irp+fc8 ; in PSA +NKProcessorStateVer ds.w 1 ; 0c kdp/irp+fcc ; const +NKProcessorStateLen ds.w 1 ; 0e kdp/irp+fce ; const + +NKHWInfoPtr ds.l 1 ; 10 kdp/irp+fd0 ; in IRP +NKHWInfoVer ds.w 1 ; 14 kdp/irp+fd4 ; const +NKHWInfoLen ds.w 1 ; 16 kdp/irp+fd6 ; const + +NKProcessorInfoPtr ds.l 1 ; 18 kdp/irp+fd8 ; in KDP +NKProcessorInfoVer ds.w 1 ; 1c kdp/irp+fdc ; const +NKProcessorInfoLen ds.w 1 ; 1e kdp/irp+fde ; const + +NKNanoKernelInfoPtr ds.l 1 ; 20 kdp/irp+fe0 ; in KDP +NKNanoKernelInfoVer ds.w 1 ; 24 kdp/irp+fe4 ; BCD +NKNanoKernelInfoLen ds.w 1 ; 26 kdp/irp+fe6 ; const + +NKDiagInfoPtr ds.l 1 ; 28 kdp/irp+fe8 ; in PSA +NKDiagInfoVer ds.w 1 ; 2c kdp/irp+fec ; const +NKDiagInfoLen ds.w 1 ; 2e kdp/irp+fee ; const + +NKSystemInfoPtr ds.l 1 ; 30 kdp/irp+ff0 ; in IRP +NKSystemInfoVer ds.w 1 ; 34 kdp/irp+ff4 ; const +NKSystemInfoLen ds.w 1 ; 36 kdp/irp+ff6 ; const + +NKProcessorInfoPtr2 ds.l 1 ; 38 kdp/irp+ff8 ; in KDP (same as above) +NKProcessorInfoVer2 ds.w 1 ; 3c kdp/irp+ffc ; const +NKProcessorInfoLen2 ds.w 1 ; 3e kdp/irp+ffe ; const + +Size equ * + endr + + + + +;_______________________________________________________________________ +; PRIMARY SYSTEM AREA +; +; The PSA is Rene's homage to the ESA390's prefix storage area. +; It contains "the PowerPC IVT and some NK pointers." +; +; New to NKv2, it lives in the page below the KDP. On CPU0, this is +; also just below the below-SPRG0 part of the Exception Work Area. +; It is almost always accessed by negative offset from GPR1, hence +; the negative offsets. +;_______________________________________________________________________ + +PSA record -0xb90,INCR + +Base + +HTABLock ds.l 8 ; -b90:-b70 +PIHLock ds.l 8 ; -b70:-b50 +SchLock ds.l 8 ; -b50:-b30 +ThudLock ds.l 8 ; -b30:-b10 ; for the interactive debugger +RTASLock ds.l 8 ; -b10:-af0 +DbugLock ds.l 8 ; -af0:-ad0 +PoolLock ds.l 8 ; -ad0:-ab0 +FreePool ds.l 4 ; -ab0 ; LLL with signature 'POOL' + ds.l 1 ; -aa0 + ds.l 1 ; -a9c +IndexPtr ds.l 1 ; -a98 ; index of opaque IDs +FirstGRPS ds.l 4 ; -a94:-a84 +TimerQueue ds.l 16 ; -a84:-a44 ; there are more of these in the pool +DelayQueue ds.l 4 ; -a44:-a34 +DbugQueue ds.l 4 ; -a34:-a24 +PageQueue ds.l 4 ; -a24:-a14 +NotQueue ds.l 4 ; -a14:-a04 + ds.l 1 ; -a04 +QueueRelatedZero1 ds.l 1 ; -a00 ; set to zero when queues are inited +QueueRelatedZero2 ds.l 1 ; -9fc ; same again + ds.l 1 ; -9f8 + ds.l 1 ; -9f4 +ReadyQueues +CriticalReadyQ ds.l 8 ; -9f0:-9d0 +LatencyProtectReadyQ ds.l 8 ; -9d0:-9b0 +NominalReadyQ ds.l 8 ; -9b0:-990 +IdleReadyQ ds.l 8 ; -990:-970 +PriorityFlags ds.l 1 ; -970 ; bit 0 is 0, bit 1 is 1, etc... +ScrambledMPCallTime ds.l 1 ; -96c ; by MP call return +EmpiricalCpuFeatures ds.l 1 ; -968 ; Init.s saves MQ (should be possible) here +MQFeatureBit equ 13 ; equals 0x00040000 +AVFeatureBit equ 12 ; equals 0x00080000 +; 8 0x00800000 +; 10 0x00200000 +;int vector checks 9 0x00400000 + +UserModeMSR ds.l 1 ; -964 +ThudBuffer ds.b 96 ; -960:-900 ; that's the kernel debugger +NoIdeaR23 ds.l 1 ; -900 ; r23 copies here... replated to RTAS? + ds.l 1 ; -8fc + ds.l 1 ; -8f8 + ds.l 1 ; -8f4 +PA_BlueTask ds.l 1 ; -8f0 ; set at the same time as the one below + ds.l 1 ; -8ec + ds.l 1 ; -8e8 + ds.l 1 ; -8e4 +VectorRegInitWord ds.l 1 ; -8e0 ; task vector regs get inited with this word x 4 +SevenFFFDead2 ds.l 1 ; -8dc +SevenFFFDead3 ds.l 1 ; -8d8 +SevenFFFDead4 ds.l 1 ; -8d4 +VioletVecBase ds.l 48 ; -8d0:-810 +IndigoVecBase ds.l 48 ; -810:-750 +BlueVecBase ds.l 48 ; -750:-690 ; gets enabled by PDM PIH +GreenVecBase ds.l 48 ; -690:-5d0 +DiagInfo ds.b 256 ; -5d0:-4d0 +ProcessorState ds.b 128 ; -4d0:-450 ; interesting what this gets used by +FreeList ds.l 4 ; -450:-440 + ds.l 1 ; -440 +Int ds.w 1 ; -43c ; set by CommonPIHPath: a one-byte 68k int ID or -1 + ds.w 1 ; -43a +DecClockRateHzCopy ds.l 1 ; -438 ; copied by Init.s +OtherTimerQueuePtr ds.l 1 ; -434 ; unsigned timer queue in the pool, set by InitTMRQs +FreePageCount ds.l 1 ; -430 ; zeroed by InitFreeList +UnheldFreePageCount ds.l 1 ; -42c +ExternalHandlerID ds.l 1 ; -428 ; notification for PIH to bump +SystemAddressSpaceID ds.l 1 ; -424 + ds.l 1 ; -420 +blueProcessPtr ds.l 1 ; -41c ; physical ptr to first type-1 struct created +ThermalHandlerID ds.l 1 ; -418 ; is a Note struct +PMFHandlerID ds.l 1 ; -414 ; also a Note struct + ds.l 1 ; -410 + ds.l 1 ; -40c + ds.l 1 ; -408 + ds.l 1 ; -404 + ds.l 1 ; -400 +OtherSystemAddrSpcPtr ds.l 1 ; -3fc +OtherSystemAddrSpcPtr2 ds.l 1 ; -3f8 ; copied from the one above by InitFreeList +ZeroedByInitFreeList3 ds.l 1 ; -3f4 + ds.l 1 ; -3f0 + ds.l 1 ; -3ec + ds.l 1 ; -3e8 + ds.l 1 ; -3e4 + ds.l 1 ; -3e0 + ds.l 1 ; -3dc + ds.l 1 ; -3d8 + ds.l 1 ; -3d4 + ds.l 1 ; -3d0 + ds.l 1 ; -3cc + ds.l 1 ; -3c8 + ds.l 1 ; -3c4 + ds.l 1 ; -3c0 + ds.l 1 ; -3bc + ds.l 1 ; -3b8 + ds.l 1 ; -3b4 + ds.l 1 ; -3b0 + ds.l 1 ; -3ac + ds.l 1 ; -3a8 + ds.l 1 ; -3a4 + ds.l 1 ; -3a0 + ds.l 1 ; -39c + ds.l 1 ; -398 + ds.l 1 ; -394 + ds.l 1 ; -390 + ds.l 1 ; -38c + ds.l 1 ; -388 + ds.l 1 ; -384 + ds.l 1 ; -380 + ds.l 1 ; -37c + ds.l 1 ; -378 + ds.l 1 ; -374 + ds.l 1 ; -370 + ds.l 1 ; -36c + ds.l 1 ; -368 + ds.l 1 ; -364 + ds.l 1 ; -360 + ds.l 1 ; -35c + ds.l 1 ; -358 + ds.l 1 ; -354 + ds.l 1 ; -350 + ds.l 1 ; -34c + ds.l 1 ; -348 + ds.l 1 ; -344 + + endr + + + + +;_______________________________________________________________________ +; EXCEPTION WORK AREA +; +; Each CPU has one of these. It is half-heartedly enclosed by a "CPU" +; MP struct. Along with the SPRG registers, it is essential in order +; for the CPU to get its bearings at interrupt time. Each CPU's SPRG0 +; always points *into* that CPU's EWA. +;_______________________________________________________________________ + +EWA record -0x340,INCR + +; Fun fact: offsets before here contain the additional kernel globals +; ("Primary System Area"), but only on CPU-0. + +; It's kind of complicated, but the CPU MP struct of CPU-0 +; starts life as a chunk of the kernel globals, carefully placed +; so the "middle" (zero offset) of the Exception Work Area +; within that CPU struct will equal the "middle" (zero offset) +; of the kernel globals (i.e. between the negative-index v2-only +; Primary System Area and the positive-offset Kernel Data Page). + +; Subsequent CPU structs are just large allocations in the kernel +; pool, with the CPU's SPRG0 register being pointed to the zero +; point of that CPU struct's EWA. + +CPUBase ds.b 32 ; -340:-320 ; not really part of the EWA, but more an MP struct + +Base ; used when init'ed as part of the enclosing CPU struct + +; Now for the actual meat of sandwich. + +; Many of these fields are used by functions at interrupt time +; to save/restore registers, in lieu of a stack. + +TimeList ds.l 4 ; -320:-310, cpu+020 + ds.l 1 ; -310, cpu+030 + ds.l 1 ; -30c, cpu+034 + ds.l 1 ; -308, cpu+038 + ds.l 1 ; -304, cpu+03c + ds.l 1 ; -300, cpu+040 + ds.l 1 ; -2fc, cpu+044 + ds.l 1 ; -2f8, cpu+048 + ds.l 1 ; -2f4, cpu+04c + ds.l 1 ; -2f0, cpu+050 + ds.l 1 ; -2ec, cpu+054 + ds.l 1 ; -2e8, cpu+058 + ds.l 1 ; -2e4, cpu+05c +ThudSavedR29 ds.l 1 ; -2e0, cpu+060 +ThudSavedR30 ds.l 1 ; -2dc, cpu+064 +ThudSavedR31 ds.l 1 ; -2d8, cpu+068 + ds.l 1 ; -2d4, cpu+06c + ds.l 1 ; -2d0, cpu+070 + ds.l 1 ; -2cc, cpu+074 + ds.l 1 ; -2c8, cpu+078 + ds.l 1 ; -2c4, cpu+07c + ds.l 1 ; -2c0, cpu+080 + ds.l 1 ; -2bc, cpu+084 + ds.l 1 ; -2b8, cpu+088 + ds.l 1 ; -2b4, cpu+08c + ds.l 1 ; -2b0, cpu+090 + ds.l 1 ; -2ac, cpu+094 + ds.l 1 ; -2a8, cpu+098 + ds.l 1 ; -2a4, cpu+09c + ds.l 1 ; -2a0, cpu+0a0 + ds.l 1 ; -29c, cpu+0a4 + ds.l 1 ; -298, cpu+0a8 + ds.l 1 ; -294, cpu+0ac + ds.l 1 ; -290, cpu+0b0 + ds.l 1 ; -28c, cpu+0b4 + ds.l 1 ; -288, cpu+0b8 + ds.l 1 ; -284, cpu+0bc + ds.l 1 ; -280, cpu+0c0 + ds.l 1 ; -27c, cpu+0c4 +SpacesSavedLR ds.l 1 ; -278, cpu+0c8 +SpacesSavedCR ds.l 1 ; -274, cpu+0cc +SpacesSavedAreaBase ds.l 1 ; -270, cpu+0d0 +SpacesDeferredAreaPtr ds.l 1 ; -26c, cpu+0d4 + ds.l 1 ; -268, cpu+0d8 + ds.l 1 ; -264, cpu+0dc + ds.l 1 ; -260, cpu+0e0 + ds.l 1 ; -25c, cpu+0e4 + ds.l 1 ; -258, cpu+0e8 + ds.l 1 ; -254, cpu+0ec + ds.l 1 ; -250, cpu+0f0 + ds.l 1 ; -24c, cpu+0f4 + ds.l 1 ; -248, cpu+0f8 + ds.l 1 ; -244, cpu+0fc + ds.l 1 ; -240, cpu+100 + ds.l 1 ; -23c, cpu+104 + ds.l 1 ; -238, cpu+108 + ds.l 1 ; -234, cpu+10c + ds.l 1 ; -230, cpu+110 + ds.l 1 ; -22c, cpu+114 + ds.l 1 ; -228, cpu+118 + ds.l 1 ; -224, cpu+11c + ds.l 1 ; -220, cpu+120 + ds.l 1 ; -21c, cpu+124 + ds.l 1 ; -218, cpu+128 + ds.l 1 ; -214, cpu+12c + ds.l 1 ; -210, cpu+130 + ds.l 1 ; -20c, cpu+134 + ds.l 1 ; -208, cpu+138 + ds.l 1 ; -204, cpu+13c + ds.l 1 ; -200, cpu+140 + ds.l 1 ; -1fc, cpu+144 + ds.l 1 ; -1f8, cpu+148 + ds.l 1 ; -1f4, cpu+14c + ds.l 1 ; -1f0, cpu+150 + ds.l 1 ; -1ec, cpu+154 + ds.l 1 ; -1e8, cpu+158 + ds.l 1 ; -1e4, cpu+15c + ds.l 1 ; -1e0, cpu+160 + ds.l 1 ; -1dc, cpu+164 + ds.l 1 ; -1d8, cpu+168 + ds.l 1 ; -1d4, cpu+16c + ds.l 1 ; -1d0, cpu+170 + ds.l 1 ; -1cc, cpu+174 + ds.l 1 ; -1c8, cpu+178 + ds.l 1 ; -1c4, cpu+17c + ds.l 1 ; -1c0, cpu+180 + ds.l 1 ; -1bc, cpu+184 + ds.l 1 ; -1b8, cpu+188 + ds.l 1 ; -1b4, cpu+18c + ds.l 1 ; -1b0, cpu+190 + ds.l 1 ; -1ac, cpu+194 + ds.l 1 ; -1a8, cpu+198 + ds.l 1 ; -1a4, cpu+19c + ds.l 1 ; -1a0, cpu+1a0 + ds.l 1 ; -19c, cpu+1a4 + ds.l 1 ; -198, cpu+1a8 + ds.l 1 ; -194, cpu+1ac + ds.l 1 ; -190, cpu+1b0 + ds.l 1 ; -18c, cpu+1b4 + ds.l 1 ; -188, cpu+1b8 + ds.l 1 ; -184, cpu+1bc + ds.l 1 ; -180, cpu+1c0 + ds.l 1 ; -17c, cpu+1c4 + ds.l 1 ; -178, cpu+1c8 + ds.l 1 ; -174, cpu+1cc + ds.l 1 ; -170, cpu+1d0 + ds.l 1 ; -16c, cpu+1d4 + ds.l 1 ; -168, cpu+1d8 + ds.l 1 ; -164, cpu+1dc + ds.l 1 ; -160, cpu+1e0 + ds.l 1 ; -15c, cpu+1e4 + ds.l 1 ; -158, cpu+1e8 + ds.l 1 ; -154, cpu+1ec + ds.l 1 ; -150, cpu+1f0 + ds.l 1 ; -14c, cpu+1f4 + ds.l 1 ; -148, cpu+1f8 + ds.l 1 ; -144, cpu+1fc + ds.l 1 ; -140, cpu+200 + ds.l 1 ; -13c, cpu+204 + ds.l 1 ; -138, cpu+208 + ds.l 1 ; -134, cpu+20c + ds.l 1 ; -130, cpu+210 + ds.l 1 ; -12c, cpu+214 + ds.l 1 ; -128, cpu+218 + ds.l 1 ; -124, cpu+21c + ds.l 1 ; -120, cpu+220 + ds.l 1 ; -11c, cpu+224 + ds.l 1 ; -118, cpu+228 + ds.l 1 ; -114, cpu+22c + ds.l 1 ; -110, cpu+230 + ds.l 1 ; -10c, cpu+234 + ds.l 1 ; -108, cpu+238 + ds.l 1 ; -104, cpu+23c + ds.l 1 ; -100, cpu+240 + ds.l 1 ; -0fc, cpu+244 + ds.l 1 ; -0f8, cpu+248 + ds.l 1 ; -0f4, cpu+24c + ds.l 1 ; -0f0, cpu+250 + ds.l 1 ; -0ec, cpu+254 + ds.l 1 ; -0e8, cpu+258 + ds.l 1 ; -0e4, cpu+25c + ds.l 1 ; -0e0, cpu+260 + ds.l 1 ; -0dc, cpu+264 + ds.l 1 ; -0d8, cpu+268 + ds.l 1 ; -0d4, cpu+26c + ds.l 1 ; -0d0, cpu+270 + ds.l 1 ; -0cc, cpu+274 + ds.l 1 ; -0c8, cpu+278 + ds.l 1 ; -0c4, cpu+27c + ds.l 1 ; -0c0, cpu+280 + ds.l 1 ; -0bc, cpu+284 + ds.l 1 ; -0b8, cpu+288 + ds.l 1 ; -0b4, cpu+28c + ds.l 1 ; -0b0, cpu+290 + ds.l 1 ; -0ac, cpu+294 + ds.l 1 ; -0a8, cpu+298 + ds.l 1 ; -0a4, cpu+29c + ds.l 1 ; -0a0, cpu+2a0 + ds.l 1 ; -09c, cpu+2a4 + ds.l 1 ; -098, cpu+2a8 + ds.l 1 ; -094, cpu+2ac + ds.l 1 ; -090, cpu+2b0 + ds.l 1 ; -08c, cpu+2b4 + ds.l 1 ; -088, cpu+2b8 + ds.l 1 ; -084, cpu+2bc + ds.l 1 ; -080, cpu+2c0 + ds.l 1 ; -07c, cpu+2c4 + ds.l 1 ; -078, cpu+2c8 + ds.l 1 ; -074, cpu+2cc + ds.l 1 ; -070, cpu+2d0 + ds.l 1 ; -06c, cpu+2d4 + ds.l 1 ; -068, cpu+2d8 + ds.l 1 ; -064, cpu+2dc +PoolSavedLR ds.l 1 ; -060, cpu+2e0 +PoolSavedSizeArg ds.l 1 ; -05c, cpu+2e4 + ds.l 1 ; -058, cpu+2e8 + ds.l 1 ; -054, cpu+2ec + ds.l 1 ; -050, cpu+2f0 + ds.l 1 ; -04c, cpu+2f4 + ds.l 1 ; -048, cpu+2f8 + ds.l 1 ; -044, cpu+2fc +CreateAreaSavedLR ds.l 1 ; -040, cpu+300 +CreateAreaSavedR25 ds.l 1 ; -03c, cpu+304 ; ???!!! +CreateAreaSavedR26 ds.l 1 ; -038, cpu+308 +CreateAreaSavedR27 ds.l 1 ; -034, cpu+30c +CreateAreaSavedR28 ds.l 1 ; -030, cpu+310 +CreateAreaSavedR29 ds.l 1 ; -02c, cpu+314 +CreateAreaSavedR30 ds.l 1 ; -028, cpu+318 +CreateAreaSavedR31 ds.l 1 ; -024, cpu+31c +PA_IRP ds.l 1 ; -020, cpu+320 +PA_CurAddressSpace ds.l 1 ; -01c, cpu+324 +PA_PSA ds.l 1 ; -018, cpu+328 +PA_ContextBlock ds.l 1 ; -014, cpu+32c +Flags ds.l 1 ; -010, cpu+330 + ds.l 1 ; -00c, cpu+334 +PA_CurTask ds.l 1 ; -008, cpu+338 +PA_KDP ds.l 1 ; -004, cpu+33c + +; ZERO (SPRG0 points here) + +r0 ds.l 1 ; 000, cpu+340 ; used for quick register saves at exception time... +r1 ds.l 1 ; 004, cpu+344 +r2 ds.l 1 ; 008, cpu+348 +r3 ds.l 1 ; 00c, cpu+34c +r4 ds.l 1 ; 010, cpu+350 +r5 ds.l 1 ; 014, cpu+354 +r6 ds.l 1 ; 018, cpu+358 +r7 ds.l 1 ; 01c, cpu+35c +r8 ds.l 1 ; 020, cpu+360 +r9 ds.l 1 ; 024, cpu+364 +r10 ds.l 1 ; 028, cpu+368 +r11 ds.l 1 ; 02c, cpu+36c +r12 ds.l 1 ; 030, cpu+370 +r13 ds.l 1 ; 034, cpu+374 +r14 ds.l 1 ; 038, cpu+378 +r15 ds.l 1 ; 03c, cpu+37c +r16 ds.l 1 ; 040, cpu+380 +r17 ds.l 1 ; 044, cpu+384 +r18 ds.l 1 ; 048, cpu+388 +r19 ds.l 1 ; 04c, cpu+38c +r20 ds.l 1 ; 050, cpu+390 +r21 ds.l 1 ; 054, cpu+394 +r22 ds.l 1 ; 058, cpu+398 +r23 ds.l 1 ; 05c, cpu+39c +r24 ds.l 1 ; 060, cpu+3a0 +r25 ds.l 1 ; 064, cpu+3a4 +r26 ds.l 1 ; 068, cpu+3a8 +r27 ds.l 1 ; 06c, cpu+3ac +r28 ds.l 1 ; 070, cpu+3b0 +r29 ds.l 1 ; 074, cpu+3b4 +r30 ds.l 1 ; 078, cpu+3b8 +r31 ds.l 1 ; 07c, cpu+3bc + +; Fun fact: offsets past here contain the main kernel globals +; ("Kernel Data Page"), but only on CPU-0. + + endr + + + + +;_______________________________________________________________________ +; KERNEL DATA PAGE +; +; Positive offsets from the kernel global pointer (which can be found +; in the PA_KDP field of any CPU's EWA, and directly in the SPRG0 of +; CPU-0). Except for offsets < 128 bytes, which belong to the GPR save +; area of CPU-0's EWA (see the r0, r1 etc. directly above here?) +;_______________________________________________________________________ + +KDP record 0x80,INCR + +SegMaps +SegMap32SupInit ds.l 32 ; 080:100 +SegMap32UsrInit ds.l 32 ; 100:180 +SegMap32CPUInit ds.l 32 ; 180:200 +SegMap32OvlInit ds.l 32 ; 200:280 +BATs ds.l 32 ; 280:300 + +; GAP + org 0x340 +MinusOne1 ds.l 1 ; 340 ; several longs set at once + ds.l 1 ; 344 +MinusOne2 ds.l 1 ; 348 + ds.l 1 ; 34c +MinusOne3 ds.l 1 ; 350 + ds.l 1 ; 354 +MinusOne4 ds.l 1 ; 358 + ds.l 1 ; 35c +YellowVecBase ds.l 48 ; 360:420 ; used to ignore illegal AltiVec insns by Init.s +OrangeVecBase ds.l 48 ; 420:4e0 +RedVecBase ds.l 48 ; 4e0:5a0 +OldKDP ds.l 1 ; 5a0 ; gotten from the old SPRG0 +OtherFreeThing ds.l 1 ; 5a4 +TopOfFreePages ds.l 1 ; 5a8 ; gotten from the old SPRG0 + ds.l 1 ; 5ac +PA_InterruptHandler ds.l 1 ; 5b0 + ds.l 1 ; 5b4 +HiLevelPerfMonitorBits ds.l 1 ; 5b8 + ds.l 1 ; 5bc +PerfMonitorBits ds.l 1 ; 5c0 + ds.l 1 ; 5c4 +SegMap32SupInitPtr ds.l 1 ; 5c8 +BatMap32SupInit ds.l 1 ; 5cc +SegMap32UsrInitPtr ds.l 1 ; 5d0 +BatMap32UsrInit ds.l 1 ; 5d4 +SegMap32CPUInitPtr ds.l 1 ; 5d8 +BatMap32CPUInit ds.l 1 ; 5dc +SegMap32OvlInitPtr ds.l 1 ; 5e0 +BatMap32OvlInit ds.l 1 ; 5e4 + ds.l 1 ; 5e8 + ds.l 1 ; 5ec +NanoKernelCallTable ds.l 16 ; 5f0:630 +PA_ConfigInfo ds.l 1 ; 630 +PA_EmulatorData ds.l 1 ; 634 +KernelMemoryBase ds.l 1 ; 638 +KernelMemoryEnd ds.l 1 ; 63c ; Top of HTAB (and entire kernel reserved area). Set by Init.s +PA_RelocatedLowMemInit ds.l 1 ; 640 ; From ConfigInfo. Ptr to Mac LowMem vars, which Init.s sets up +SharedMemoryAddr ds.l 1 ; 644 ; From ConfigInfo. Not sure what latest use is. +LA_EmulatorKernelTrapTable ds.l 1 ; 648 ; Calculated from ConfigInfo. +PA_NanoKernelCode ds.l 1 ; 64c ; Calculated by NanoKernel itself. +PA_FDP ds.l 1 ; 650 ; See notes in NanoKernel. Very interesting. +LA_ECB ds.l 1 ; 654 ; Logical ptr into EDP. +PA_ECB ds.l 1 ; 658 ; gets called "system context" +PA_ECB_Old ds.l 1 ; 65c ; copied from NKv<=01.01 to EWA.PA_ContextBlock. + ds.l 1 ; 660 + ds.l 1 ; 664 + ds.l 1 ; 668 +PA_PageMapEnd ds.l 1 ; 66c ; Set at the same time as PA_PageMapStart below... +TestIntMaskInit ds.l 1 ; 670 ; These are all copied from ConfigInfo... +PostIntMaskInit ds.l 1 ; 674 +ClearIntMaskInit ds.l 1 ; 678 +PA_EmulatorIplValue ds.l 1 ; 67c ; Physical ptr into EDP +SharedMemoryAddrPlus ds.l 1 ; 680 ; Really not sure +PA_PageMapStart ds.l 1 ; 684 ; Physical ptr to PageMap (= KDP+0x920) +PageAttributeInit ds.l 1 ; 688 ; defaults for page table entries (see ConfigInfo) + ds.l 1 ; 68c + ds.l 1 ; 690 + ds.l 1 ; 694 + ds.l 1 ; 698 + ds.l 1 ; 69c +PTEGMask ds.l 1 ; 6a0 +HTABORG ds.l 1 ; 6a4 +UsablePhysicalPages ds.l 1 ; 6a8 ; does take MacOS into account +TotalPhysicalPages ds.l 1 ; 6ac ; does not take into acct maximum MacOS memory +FlatPageListPtr ds.l 1 ; 6b0 +VMMaxVirtualPages ds.l 1 ; 6b4 ; size of main contiguous segment? +CpuSpecificBytes +CpuSpecificByte1 ds.b 1 ; 6b8 ; seems to contain flags (set from PVR & tbl by Init.s) +CpuSpecificByte2 ds.b 1 ; 6b9 ; probably not flags (set in same way) + ds.b 1 ; 6ba + ds.b 1 ; 6bb +FlatPageListSegPtrs ds.l 16 ; 6bc + ds.l 1 ; 6fc + +StartOfPanicArea ; PROTECTED BY THUD LOCK +ThudSavedR0 ds.l 1 ; 700 +ThudSavedR1 ds.l 1 ; 704 ; via SPRG1 +ThudSavedR2 ds.l 1 ; 708 +ThudSavedR3 ds.l 1 ; 70c +ThudSavedR4 ds.l 1 ; 710 +ThudSavedR5 ds.l 1 ; 714 +ThudSavedR6 ds.l 1 ; 718 +ThudSavedR7 ds.l 1 ; 71c +ThudSavedR8 ds.l 1 ; 720 +ThudSavedR9 ds.l 1 ; 724 +ThudSavedR10 ds.l 1 ; 728 +ThudSavedR11 ds.l 1 ; 72c +ThudSavedR12 ds.l 1 ; 730 +ThudSavedR13 ds.l 1 ; 734 +ThudSavedR14 ds.l 1 ; 738 +ThudSavedR15 ds.l 1 ; 73c +ThudSavedR16 ds.l 1 ; 740 +ThudSavedR17 ds.l 1 ; 744 +ThudSavedR18 ds.l 1 ; 748 +ThudSavedR19 ds.l 1 ; 74c +ThudSavedR20 ds.l 1 ; 750 +ThudSavedR21 ds.l 1 ; 754 +ThudSavedR22 ds.l 1 ; 758 +ThudSavedR23 ds.l 1 ; 75c +ThudSavedR24 ds.l 1 ; 760 +ThudSavedR25 ds.l 1 ; 764 +ThudSavedR26 ds.l 1 ; 768 +ThudSavedR27 ds.l 1 ; 76c +ThudSavedR28 ds.l 1 ; 770 +ThudSavedR29 ds.l 1 ; 774 +ThudSavedR30 ds.l 1 ; 778 +ThudSavedR31 ds.l 1 ; 77c +ThudSavedCR ds.l 1 ; 780 +ThudSavedMQ ds.l 1 ; 784 +ThudSavedXER ds.l 1 ; 788 +ThudSavedSPRG2 ds.l 1 ; 78c +ThudSavedCTR ds.l 1 ; 790 +ThudSavedPVR ds.l 1 ; 794 +ThudSavedDSISR ds.l 1 ; 798 +ThudSavedDAR ds.l 1 ; 79c +ThudSavedTBU ds.l 1 ; 7a0 ; RTCU on 601 +ThudSavedTB ds.l 1 ; 7a4 ; RTCL on 601 +ThudSavedDEC ds.l 1 ; 7a8 +ThudSavedHID0 ds.l 1 ; 7ac +ThudSavedSDR1 ds.l 1 ; 7b0 +ThudSavedSRR0 ds.l 1 ; 7b4 +ThudSavedSRR1 ds.l 1 ; 7b8 +ThudSavedMSR ds.l 1 ; 7bc +ThudSavedSR0 ds.l 1 ; 7c0 +ThudSavedSR1 ds.l 1 ; 7c4 +ThudSavedSR2 ds.l 1 ; 7c8 +ThudSavedSR3 ds.l 1 ; 7cc +ThudSavedSR4 ds.l 1 ; 7d0 +ThudSavedSR5 ds.l 1 ; 7d4 +ThudSavedSR6 ds.l 1 ; 7d8 +ThudSavedSR7 ds.l 1 ; 7dc +ThudSavedSR8 ds.l 1 ; 7e0 +ThudSavedSR9 ds.l 1 ; 7e4 +ThudSavedSR10 ds.l 1 ; 7e8 +ThudSavedSR11 ds.l 1 ; 7ec +ThudSavedSR12 ds.l 1 ; 7f0 +ThudSavedSR13 ds.l 1 ; 7f4 +ThudSavedSR14 ds.l 1 ; 7f8 +ThudSavedSR15 ds.l 1 ; 7fc +ThudSavedF0 ds.d 1 ; 800 +ThudSavedF1 ds.d 1 ; 808 +ThudSavedF2 ds.d 1 ; 810 +ThudSavedF3 ds.d 1 ; 818 +ThudSavedF4 ds.d 1 ; 820 +ThudSavedF5 ds.d 1 ; 828 +ThudSavedF6 ds.d 1 ; 830 +ThudSavedF7 ds.d 1 ; 838 +ThudSavedF8 ds.d 1 ; 840 +ThudSavedF9 ds.d 1 ; 848 +ThudSavedF10 ds.d 1 ; 850 +ThudSavedF11 ds.d 1 ; 858 +ThudSavedF12 ds.d 1 ; 860 +ThudSavedF13 ds.d 1 ; 868 +ThudSavedF14 ds.d 1 ; 870 +ThudSavedF15 ds.d 1 ; 878 +ThudSavedF16 ds.d 1 ; 880 +ThudSavedF17 ds.d 1 ; 888 +ThudSavedF18 ds.d 1 ; 890 +ThudSavedF19 ds.d 1 ; 898 +ThudSavedF20 ds.d 1 ; 8a0 +ThudSavedF21 ds.d 1 ; 8a8 +ThudSavedF22 ds.d 1 ; 8b0 +ThudSavedF23 ds.d 1 ; 8b8 +ThudSavedF24 ds.d 1 ; 8c0 +ThudSavedF25 ds.d 1 ; 8c8 +ThudSavedF26 ds.d 1 ; 8d0 +ThudSavedF27 ds.d 1 ; 8d8 +ThudSavedF28 ds.d 1 ; 8e0 +ThudSavedF29 ds.d 1 ; 8e8 +ThudSavedF30 ds.d 1 ; 8f0 +ThudSavedF31 ds.d 1 ; 8f8 +SomethingSerial ds.l 1 ; 900 +ThudSavedLR ds.l 1 ; 904 +RTAS_Proc ds.l 1 ; 908 ; r8 on kernel entry +EndOfPanicArea + +RTAS_PrivDataArea ds.l 1 ; 90c ; copied from HWInfo +ZeroWord ds.l 1 ; 910 ; Only NewWorld and Unknown PIHes touch this + ds.l 1 ; 914 + ds.l 1 ; 918 + ds.l 1 ; 91c +PageMap ds.b 1184; 920:dc0 +NanoKernelInfo ds.b 352 ; dc0:f20 ; see NKNanoKernelInfo in PPCInfoRecordsPriv +ProcessorInfo ds.b 160 ; f20:fc0 +InfoRecord ds.b 64 ; fc0:1000 ; was main copy in NKv1, now vestigial? + + endr + + + + + +;_______________________________________________________________________ +; KERNEL VECTOR TABLE +; +; The kernel creates several of these, and activates one by pointing +; a CPU's SPRG3 ("vecBase") register at it. Find them in PSA and KDP. +; (For want of more information, I have colour coded them for now.) +; +; Each entry is a (hopefully 64-byte aligned) physical pointer to an +; interrupt service routine in the kernel. One entry roughly +; corresponds with one of the 256-byte aligned entry points into +; the PowerPC interrupt (="exception") vector table. Code for those +; can be found in :RISC:ExceptionTable.s. +;_______________________________________________________________________ + +VecTable record 0,INCR +; VBGYOR + ds.l 1 ; 00 ; scratch for IVT? +SystemResetVector ds.l 1 ; 04 ; called by IVT+100 (system reset) +MachineCheckVector ds.l 1 ; 08 ; called by IVT+200 (machine check) +DSIVector ds.l 1 ; 0c ; called by IVT+300 (DSI) +ISIVector ds.l 1 ; 10 ; called by IVT+400 (ISI) +ExternalIntVector ds.l 1 ; 14 ; called by IVT+500 (external interrupt) +AlignmentIntVector ds.l 1 ; 18 ; called by IVT+600 (alignment) +ProgramIntVector ds.l 1 ; 1c ; called by IVT+700 (program) +FPUnavailVector ds.l 1 ; 20 ; called by IVT+800 (FP unavail) +DecrementerVector ds.l 1 ; 24 ; called by IVT+900 (decrementer) +ReservedVector1 ds.l 1 ; 28 ; called by IVT+a00 (reserved) +ReservedVector2 ds.l 1 ; 2c ; called by IVT+b00 (reserved) +SyscallVector ds.l 1 ; 30 ; called by IVT+c00 (system call) +TraceVector ds.l 1 ; 34 ; called by IVT+d00 (trace) +FPAssistVector ds.l 1 ; 38 ; called by IVT+e00 (FP assist) +PerfMonitorVector ds.l 1 ; 3c ; called by IVT+f00 (perf monitor) + ds.l 1 ; 40 ; + ds.l 1 ; 44 ; + ds.l 1 ; 48 ; + ds.l 1 ; 4c ; Vectors from here downwards are called from + ds.l 1 ; 50 ; odd places in the IVT???? + ds.l 1 ; 54 ; + ds.l 1 ; 58 ; seems AltiVec-related +ThermalEventVector ds.l 1 ; 5c ; + ds.l 1 ; 60 ; + ds.l 1 ; 64 ; + ds.l 1 ; 68 ; + ds.l 1 ; 6c ; + ds.l 1 ; 70 ; + ds.l 1 ; 74 ; + ds.l 1 ; 78 ; + ds.l 1 ; 7c ; + ds.l 1 ; 80 ; shares with TraceVector in Y and G + ds.l 1 ; 84 ; + ds.l 1 ; 88 ; + ds.l 1 ; 8c ; + ds.l 1 ; 90 ; + ds.l 1 ; 94 ; + ds.l 1 ; 98 ; + ds.l 1 ; 9c ; + ds.l 1 ; a0 ; + ds.l 1 ; a4 ; + ds.l 1 ; a8 ; + ds.l 1 ; ac ; + ds.l 1 ; b0 ; + ds.l 1 ; b4 ; + ds.l 1 ; b8 ; + ds.l 1 ; bc ; called by IVT+0 (reserved) + +Size equ * + endr + + + + +;_______________________________________________________________________ +; NANOKERNEL CALL (KCALL) TABLE +; +; You can also use this record to index the NanoKernelCallCounts in +; PPCInfoRecordsPriv.s:NKNanoKernelInfo. +;_______________________________________________________________________ + +NanoKernelCallTable record 0,INCR + +ReturnFromException ds.l 1 ; 00, kdp+5f0, trap 0 ; SS replaces with jump to emu+f900 +RunAlternateContext ds.l 1 ; 04, kdp+5f4, trap 1 +ResetSystem ds.l 1 ; 08, kdp+5f8, trap 2 ; SS replaces with jump to emu+fb00 +VMDispatch ds.l 1 ; 0c, kdp+5fc, trap 3 ; FE0A (VM/MMU/NK) trap +PrioritizeInterrupts ds.l 1 ; 10, kdp+600, trap 4 ; SS forbids +PowerDispatch ds.l 1 ; 14, kdp+604, trap 5 ; FEOF +RTASDispatch ds.l 1 ; 18, kdp+608, trap 6 ; SS forbids the use of this trap and below +CacheDispatch ds.l 1 ; 1c, kdp+60c, trap 7 +MPDispatch ds.l 1 ; 20, kdp+610, trap 8 ; also accessible via syscall interface + ds.l 1 ; 24, kdp+614, trap 9 ; unused + ds.l 1 ; 28, kdp+618, trap 10 ; unused + ds.l 1 ; 2c, kdp+61c, trap 11 ; unused +CallAdapterProcPPC ds.l 1 ; 30, kdp+620, trap 12 ; unused + ds.l 1 ; 34, kdp+624, trap 13 ; unused +CallAdapterProc68k ds.l 1 ; 38, kdp+628, trap 14 ; unused +Thud ds.l 1 ; 3c, kdp+62c, trap 15 ; basically just panic + +Size equ * + endr + + + + + +;_______________________________________________________________________ +; PAGEMAP DESCRIPTOR TABLE +; +; An 8-byte entry in the PageMap tables passed to the NanoKernel via +; ConfigInfo. Roughly corresponds with a contiguous logical address +; range lying within 256MB (segment) boundaries, and therefore +; roughly corresponds with the NKv2 MP "Area" struct. +; +; It could be that these are actually PageMap Descriptor *Entries*, +; and I have misunderstood. +;_______________________________________________________________________ + +PMDT record 0,INCR +LBase ds.w 1 ; 0 ; (base - segment) >> 12 +PageCount ds.w 1 ; 2 ; page count MINUS ONE +PBaseAndFlags ds.l 1 ; 4 ; PBase page aligned + +PBaseBits equ 20 +FirstFlagBit equ 20 +FirstFlag equ 0x800 + +DaddyFlag equ 0x800 +CountingFlag equ 0x400 +PhysicalIsRelativeFlag equ 0x200 + +Size equ * + endr + + + + + +;_______________________________________________________________________ +; KERNEL SPINLOCK +; +; Seven of these, each with a four-byte signature, live in the PSA. +; The signatures describe the protected structures adequately. +; +; The function to acquire a lock seems to have been inlined, because +; it always saves and restores r8 and r9 (even to and from themselves) +; around a bl to NanoKernelInit.s:AcquireLock. It has therefore been +; macrofied as NanoKernelMacros.s:_Lock. +;_______________________________________________________________________ + +Lock record 0,INCR +Count ds.l 1 ; 00 ; target for lwarx/stwcx + +Signature ds.l 1 ; 04 + +kHTABLockSignature equ 'htab' +kPIHLockSignature equ 'pih ' +kSchLockSignature equ 'sch ' +kThudLockSignature equ 'thud' +kRTASLockSignature equ 'rtas' +kDbugLockSignature equ 'dbug' +kPoolLockSignature equ 'pool' + + org 0x10 +Holder ds.l 1 ; 10 + + org 0x20 + endr + + + + +; Structs after this point are inadequately commented. Sorry! + + + +Index record 0,INCR +kSignature equ 'INDX' + +HalfOne ds.w 1 ; 000 +HalfTwo ds.w 1 ; 002 +Signature ds.l 1 ; 004 +IDsPtr ds.l 1 ; 008 + + org 520 +Size equ * + endr + + + + +PoolPage record 0,INCR +FreeBytes ds.l 1 ; 000 + + org 4096 +Size equ * + endr + + + + +; Special opaque NanoKernel stuff! + + + + + +GRPSStruct record 0,INCR +kSignature equ 'GRPS' + +LLL ds.l 4 ; 00:10 + + endr + + + + + + + + + + + + +; These seem to go in a notification queue? + + + + + + + + + + +LLL record 0,INCR +Freeform ds.l 1 ; 0 +Signature ds.l 1 ; 4 +Next ds.l 1 ; 8 +Prev ds.l 1 ; c + endr + + + + + + +; Special case of LLL +; Init'ed by InitTMRQs (called by Init.s) +; There is one copy of this struct at kdp-a84 below the (shorter) queue structs, +; and two copies in the pool, pointed to by kdp-434 and kdp-364. +TimerQueueStruct record 0,INCR + +LLL ds.l 4 ; 00 +Unused ds.l 1 ; 10 +ZeroByte ds.b 1 ; 14 ; can also be set to 7 or 8 +UnusedByte ds.b 1 ; 15 +OneByte1 ds.b 1 ; 16 +OneByte2 ds.b 1 ; 17 ; can also be unset + +; GAP + + org 0x38 +TimeCtr ds.d 1 ; 38 ; high half in DEC reg or whole thing in TB + + endr + + + + +; For altivec, mofo +VectorSaveArea record 0,INCR + + org 23*16 +;RegisterAreaSize equ *-VectorSaveArea +RegisterAreaSize equ 23*16 + + org 32*16 + 20 + + endr + + + diff --git a/Linker/LinkPowerROM b/Linker/LinkPowerROM new file mode 100644 index 0000000..20c3cdf --- /dev/null +++ b/Linker/LinkPowerROM @@ -0,0 +1,151 @@ +Set Streamer " | StreamEdit -d -e '/?Å/ Pr ¶¶¶"1¶¶¶"'" + + + +If {#} ¶< 2 + Echo "USAGE: {0} DEST SRC ... > ShellScript" + Exit 1 +End + + + +Set DestFile "{1}" +Shift + + + +Set TempPrepFile "{TempFolder}PPCROMLinkPrepCmds" +Set TempCmdFile "{TempFolder}PPCROMLinkCmds" +Echo -n "" > "{TempPrepFile}" + +Echo -n "PPCLink -xm library -codestart 0 -warn -o " > "{TempCmdFile}" +Quote -n "{DestFile}.x" >> "{TempCmdFile}" + + +Set OffsetSoFar 0 +Set NeedTool 1 # Always extract binary, so always need tool + + +Loop # over arguments + If !{#} + Break + End + + If "{1}" =~ /[0-9]+/ || "{1}" =~ /0x[0-9a-f]+/ + # Move-to-offset argument (hex or decimal literal) + + If `Evaluate {1} ¶< {OffsetSoFar}` + Echo "{0} failed: cannot pad to offset {1} because we are already past it!" + Exit 1 + End + + Set Delta `Evaluate -h {1} - {OffsetSoFar}` + + If {Delta} + Echo -n "Set F ¶"¶{TempFolder¶}Zeros_{Delta}.s¶";¶t" >> "{TempPrepFile}" + Echo -n 'If !`Exists "{F}"' >> "{TempPrepFile}" + Echo -n "{Streamer}" >> "{TempPrepFile}" + Echo -n '`; ' >> "{TempPrepFile}" + Echo -n "Echo ¶¶tDCB.B {Delta}, 0" '> "{F}"; ' >> "{TempPrepFile}" + Echo -n 'PPCAsm "{F}"; ' >> "{TempPrepFile}" + Echo "End" >> "{TempPrepFile}" + + Echo -n "¶t¶¶¶n¶t" >> "{TempCmdFile}" + Echo -n "¶"¶{TempFolder¶}Zeros_{Delta}.s.o¶"" >> "{TempCmdFile}" + + Set OffsetSoFar {1} + End + Else If "{1}" =~ /([A-Za-z0-9]+)¨1:/ + # Label argument + + Echo -n "Set F ¶"¶{TempFolder¶}{¨1}.s¶";¶t" >> "{TempPrepFile}" + Echo -n 'If !`Exists "{F}"' >> "{TempPrepFile}" + Echo -n "{Streamer}" >> "{TempPrepFile}" + Echo -n '`; ' >> "{TempPrepFile}" + Echo -n "Echo ¶¶tEXPORT {¨1}¶¶n{¨1}" '> "{F}"; ' >> "{TempPrepFile}" + Echo -n 'PPCAsm "{F}"; ' >> "{TempPrepFile}" + Echo "End" >> "{TempPrepFile}" + + Echo -n "¶t¶¶¶n¶t" >> "{TempCmdFile}" + Echo -n "¶"¶{TempFolder¶}{¨1}.s.o¶"" >> "{TempCmdFile}" + Else + # Filename argument + + If "{1}" !~ /Å.x/ + Echo -n "Set F " >> "{TempPrepFile}" + Quote -n "{1}" >> "{TempPrepFile}" + Echo -n "; " >> "{TempPrepFile}" + Echo -n 'If !`Exists "{F}.x"' >> "{TempPrepFile}" + Echo -n "{Streamer}" >> "{TempPrepFile}" + Echo -n '` || `Newer "{F}" "{F}.x"' >> "{TempPrepFile}" + Echo -n "{Streamer}" >> "{TempPrepFile}" + Echo -n '`; ' >> "{TempPrepFile}" + Quote -n "{0}.tool" >> "{TempPrepFile}" + Echo -n ' tox "{F}" "{F}.x"; ' >> "{TempPrepFile}" + Echo "End" >> "{TempPrepFile}" + + Set NeedTool 1 + Set TheXCOFF "{1}.x" + Set TextLen `Files -x b -n "{1}" | StreamEdit -d -e '/([0-9]+)¨1b°/ Print ¨1'` + Else + Set TheXCOFF "{1}" + Set TextLen `DumpXCOFF -do h "{TheXCOFF}" | StreamEdit -d -e '/s_nameŶ".(Å)¨1¶"/ Set CurSec ¨1' -e '/s_sizeŶ((Å)¨1¶)/ Print CurSec " " ¨1' | StreamEdit -d -e '/text (Å)¨1/ Print ¨1'` + End + + Echo -n "¶t¶¶¶n¶t" >> "{TempCmdFile}" + Quote -n "{TheXCOFF}" >> "{TempCmdFile}" + + Set OffsetSoFar `Evaluate {OffsetSoFar} + {TextLen}` + End + + Shift +End + +If {NeedTool} + Echo "# Compile a C program to create/extract basic XCOFFs" + Echo -n 'If !`Exists ' + Quote -n "{0}.tool" + Echo -n "{Streamer}" + Echo '`' + + Echo -n "¶tSC " + Echo -n '-o "{TempFolder}LinkPowerROM.o" ' + Quote "{0}.c" + + Echo -n "¶tILink -d -t MPST -c 'MPS ' -o " + Quote -n "{0}.tool" + Echo ' "{Libraries}Stubs.o" "{CLibraries}StdCLib.o" "{Libraries}MacRuntime.o" "{Libraries}IntEnv.o" "{Libraries}Interface.o" "{TempFolder}LinkPowerROM.o"' + + Echo "End" + Echo +End + +Echo "# Auto-generate some XCOFFs (padding and labels)" +Catenate "{TempPrepFile}" + +Echo + +Echo "# Link whole-ROM XCOFF" +Catenate "{TempCmdFile}" + +Echo +Echo + +Echo "# Extract raw ROM binary" +Quote -n "{0}.tool" +Echo -n " fromx " +Quote -n "{DestFile}.x" +Echo -n " " +Quote "{DestFile}" + +Echo + +Echo "# Checksum the ConfigInfo structure(s)" +Echo -n 'Set CksumOffsets "`DumpXCOFF -do s ' +Quote -n "{DestFile}.x" +Echo ' | StreamEdit -d -e "/C_EXTÅAddrÅ(0x[A-Fa-f0-9]+)¨1ÅConfigInfoChecksum/ Print ¨1"`"' + +Quote -n "{0}.tool" +Echo -n " cksum " +Quote -n "{DestFile}" +Echo ' {CksumOffsets}' diff --git a/Linker/LinkPowerROM.c b/Linker/LinkPowerROM.c new file mode 100644 index 0000000..698569f --- /dev/null +++ b/Linker/LinkPowerROM.c @@ -0,0 +1,216 @@ +#include +#include +#include + +#ifdef macintosh +typedef unsigned long uint32_t; +typedef long int32_t; +typedef unsigned short uint16_t; +typedef short int16_t; +typedef unsigned char uint8_t; +typedef char int8_t; +#endif + +uint32_t narrow[8]; +uint32_t wide[2]; + +int slurp(char *path, uint8_t **datap, unsigned long *sizep) +{ + FILE *f; + long pos; + uint8_t *bytes; + + f = fopen(path, "rb"); + if(f == NULL) return 1; + + fseek(f, 0, SEEK_END); + pos = ftell(f); + fseek(f, 0, SEEK_SET); + + bytes = (uint8_t *)malloc(pos); + if(bytes == NULL) return 1; + + fread(bytes, pos, 1, f); + + fclose(f); + + *datap = bytes; + *sizep = pos; + + return 0; /* no error */ +} + +const uint16_t pretend_header[] = { + 0x01df /*f_magic*/, + 1 /*f_nscns*/, + 0xd611, 0x2977 /*f_timdat*/, + 0, 0 /*f_symptr*/, + 0, 2 /*f_nsyms*/, + 0 /*f_opthdr*/, + 0 /*f_flags*/, + + /* now for single .text symbol header */ + 0x2e74, 0x6578, 0x7400, 0x0000 /*s_name = .text*/, + 0, 0 /*s_paddr*/, + 0, 0 /*s_vaddr*/, + 1234, 5678 /*s_size*/, + 0, 0x3c /*s_scnptr = len of this header*/, + 0, 0 /*s_relptr*/, + 0, 0 /*s_lnnoptr*/, + 0 /*s_nreloc*/, + 0 /*s_nlnno*/, + 0, 0x20 /*s_flags = text*/ +}; + +const uint16_t pretend_footer[] = { + 0, 0, + 0, 0, + 0, 0, + 1, 0, + 0x6b01, + 1234, 5678, + 0, 0, 0, + 0x1100, 0, 0, 0 +}; + + +int main(int argc, char **argv) +{ + FILE *fp; + uint8_t *buf, *sec, *dest; + unsigned long buflen, seclen, destlen; + unsigned long i; + + if(argc < 2) + { + fprintf(stderr, "%s: No command specified -- use tox, fromx or cksum\n", argv[0]); + return 1; + } + + if(!strcmp(argv[1], "cksum")) + { + unsigned long offset; + + if(argc < 3) + { + fprintf(stderr, "%s: %s: Specify a file!\n", argv[0], argv[1]); + return 1; + } + + if(argc < 4) + { + return 0; /* No offset specified -- fail silently */ + } + + if(slurp(argv[2], &buf, &buflen)) + { + fprintf(stderr, "%s: %s: Could not open input\n", argv[0], argv[1]); + return 1; + } + + offset = strtoul(argv[3], NULL, 0); + + if(offset > buflen - 40) { + fprintf(stderr, "%s: Bad offset for ConfigInfo checksum: 0x%x\n", argv[0], offset); + return 1; + } + + memset(buf + offset, 0, 40); + + for(i=0; if_opthdr); + + sec = buf + shp->s_scnptr; + seclen = shp->s_size; + } + + /* now to create my template XCOFF */ + + if(!strcmp(argv[1], "tox")) + { + destlen = sizeof pretend_header + seclen + sizeof pretend_footer; + dest = (uint8_t *)malloc(destlen); + if(dest == NULL) + { + fprintf(stderr, "%s: OOM\n", argv[0]); + return 1; + } + + memcpy(dest, (const char *)pretend_header, sizeof pretend_header); + memcpy(dest + sizeof pretend_header, sec, seclen); + memcpy(dest + sizeof pretend_header + seclen, (const char *)pretend_footer, sizeof pretend_footer); + + *(uint32_t *)(dest + 36) = seclen; + *(uint32_t *)(dest + 8) = sizeof pretend_header + seclen; + *(uint32_t *)(dest + sizeof pretend_header + seclen + 18) = seclen; + } + else if(!strcmp(argv[1], "fromx")) + { + dest = sec; + destlen = seclen; + } + + fp = fopen(argv[3], "wb"); + if(!fp) { + fprintf(stderr, "%s: Could not open output\n", argv[0]); + return 1; + } + + fwrite(dest, 1, destlen, fp); + + fclose(fp); + } + + return 0; +} diff --git a/MakeFile b/MakeFile new file mode 100644 index 0000000..af774f8 --- /dev/null +++ b/MakeFile @@ -0,0 +1,60 @@ +ResultDir = :BuildResults: +LinkerDir = :Linker: + + + +MainTarget Ä {ResultDir}PowerROM + + + +RomBin = :RomMondo.bin + + + +ExceptionTableBin = {ResultDir}PPCExceptionTable.x + +{ExceptionTableBin} Ä PPCExceptionTable.s + PPCAsm -o {Targ} {Deps} + + + +ConfigInfoBin = {ResultDir}ConfigInfo.x + +{ConfigInfoBin} Ä ConfigInfo.s + PPCAsm -o {Targ} {Deps} + + + +#### PowerPC NanoKernel #### +NKDir = :NanoKernel: +NKIncDir = :Internal: +NKBin = {ResultDir}NanoKernel.x +NKOpts = +#include "{NKDir}InnerMakeFile" + + + +EmulatorBin = Emulator.x + + + +{ResultDir}PowerROM Ä {RomBin} {ExceptionTableBin} {ConfigInfoBin} {NKBin} {EmulatorBin} + {LinkerDir}LinkPowerROM {Targ} ¶ + RomTop: ¶ + 0x000000 Mac68kRomTop: ¶ + {RomBin} ¶ + Mac68kRomBtm: ¶ + ¶ + 0x300000 ExTblTop: ¶ + {ExceptionTableBin} ¶ + ¶ + 0x30d000 ConfigInfoChecksum: ¶ + {ConfigInfoBin} ¶ + ¶ + 0x310000 NKTop: ¶ + {NKBin} ¶ + ¶ + 0x360000 ¶ + {EmulatorBin} ¶ + 0x400000 RomBtm: ¶ + > {ResultDir}LinkerScript ; {ResultDir}LinkerScript diff --git a/NanoKernel/InnerMakeFile b/NanoKernel/InnerMakeFile new file mode 100644 index 0000000..c4f2df2 --- /dev/null +++ b/NanoKernel/InnerMakeFile @@ -0,0 +1,42 @@ +# I expect these variables to be set already: +# NKDir, NKIncDir, NKBin + +NKFiles = ¶ + {NKDir}NKInit.s ¶ + {NKDir}NKReplacementInit.s ¶ + {NKDir}NKBuiltinInit.s ¶ + {NKDir}NKProcFlagsTbl.s ¶ + {NKDir}NKProcInfoTbl.s ¶ + {NKDir}NKInterrupts.s ¶ + {NKDir}NKPaging.s ¶ + {NKDir}NKTranslation.s ¶ + {NKDir}NKVMCalls.s ¶ + {NKDir}NKPowerCalls.s ¶ + {NKDir}NKRTASCalls.s ¶ + {NKDir}NKCacheCalls.s ¶ + {NKDir}NKMPCalls.s ¶ + {NKDir}NKSync.s ¶ + {NKDir}NKTasks.s ¶ + {NKDir}NKAddressSpaceMPCalls.s ¶ + {NKDir}NKPoolAllocator.s ¶ + {NKDir}NKTimers.s ¶ + {NKDir}NKScheduler.s ¶ + {NKDir}NKIndex.s ¶ + {NKDir}NKPrimaryIntHandlers.s ¶ + {NKDir}NKConsoleLog.s ¶ + {NKDir}NKSleep.s ¶ + {NKDir}NKThud.s ¶ + {NKDir}NKScreenConsole.s ¶ + {NKDir}NKAdditions.s ¶ + +NKIncludes = ¶ + {NKDir}NKMacros.s ¶ + {NKDir}NKEquates.s ¶ + {NKIncDir}InfoRecords.a ¶ + {NKIncDir}EmulatorPublic.a ¶ + {NKIncDir}NKPublic.a ¶ + {NKIncDir}NKOpaque.a ¶ + +# We get warning 3202 from ALIGN directives -- kill it +{NKBin} Ä {NKDir}NanoKernel.s {NKFiles} {NKIncludes} + PPCAsm -o {Targ} -w 3202 -i {NKIncDir} -i "{AIncludes}" {NKDir}NanoKernel.s diff --git a/NanoKernel/MakeFile b/NanoKernel/MakeFile new file mode 100644 index 0000000..6c27ac4 --- /dev/null +++ b/NanoKernel/MakeFile @@ -0,0 +1,9 @@ +# Lets you just run Make in this directory, +# while ignoring the rest of the build system + +NKDir = : +NKIncDir = {NKDir}:Internal: +NKBin = {NKDir}NanoKernel.s.x +NKOpts = + +#include "{NKDir}InnerMakeFile" diff --git a/NanoKernel/NKAdditions.s b/NanoKernel/NKAdditions.s new file mode 100644 index 0000000..371be32 --- /dev/null +++ b/NanoKernel/NKAdditions.s @@ -0,0 +1,61 @@ +;_______________________________________________________________________ +; My additions to the NanoKernel, to go at the end of the code image +;_______________________________________________________________________ + + if &TYPE('NKDebugShim') != 'UNDEFINED' + + DeclareMPCall 200, NKDebug + +NKDebug + + ; Lifted from NKxprintf: + ; Put the physical address of the r3 arg in r8 + + rlwinm. r9, r11, 0, MSR_DRbit, MSR_DRbit ; IntSyscall sets this + mr r8, r3 + + beq- @already_physical + li r9, 0 + bl V2P ; takes page EA in r8, r9=0, returns page PA in r17 + beq- @fail + rlwimi r8, r17, 0, 0, 19 +@already_physical + + + ; Copy the command into the KDP buffer reserved for this purpose: + ; r8 = src + ; r29 = dest + ; r30 = ctr + ; r31 = val + + mfsprg r1, 0 + lwz r1, EWA.PA_KDP(r1) + + li r30, 0 + addi r29, r1, -0x960 +@cmdloop + lbzx r31, r8, r30 + stbx r31, r29, r30 + addi r30, r30, 1 + cmpwi r31, 0 + bne @cmdloop + + lwz r31, -0x404(r1) + + stw r8, -0x404(r1) + + bl panic + + lwz r8, -0x404(r1) + li r0, 0 + stw r0, 0(r8) + + stw r31, -0x404(r1) + + b ReturnZeroFromMPCall + + +@fail + b ReturnMPCallOOM + + endif diff --git a/NanoKernel/NKAddressSpaceMPCalls.s b/NanoKernel/NKAddressSpaceMPCalls.s new file mode 100644 index 0000000..ea54401 --- /dev/null +++ b/NanoKernel/NKAddressSpaceMPCalls.s @@ -0,0 +1,4454 @@ +Local_Panic set * + b panic + + + +InitFreeList + addi r9, r1, PSA.FreeList + + InitList r9, 'PHYS', scratch=r8 + + li r8, 0 + stw r8, PSA.FreePageCount(r1) + stw r8, PSA.UnheldFreePageCount(r1) + stw r8, PSA.ZeroedByInitFreeList3(r1) + + lwz r8, PSA.OtherSystemAddrSpcPtr(r1) + stw r8, PSA.OtherSystemAddrSpcPtr2(r1) + + blr + + + +; convert_pmdts_to_areas + +; Pretty obvious from log output. + +; Xrefs: +; setup + +convert_pmdts_to_areas ; OUTSIDE REFERER + + ; The kind of crap we have to do without a stack + mflr r16 + mfcr r17 + stw r16, EWA.SpacesSavedLR(r1) + stw r17, EWA.SpacesSavedCR(r1) + + _log 'Converting PMDTs to areas^n' + + lwz r17, PSA.UnheldFreePageCount(r1) + lwz r16, KDP.TotalPhysicalPages(r1) + add r17, r17, r16 + stw r17, PSA.UnheldFreePageCount(r1) + + +;_______________________________________________________________________ +; Code to increment a loop that: +; iterates over segmap entries, and +; iterates over PMDTs, starting at the one +; ref'd by the segmap entry +;_______________________________________________________________________ + + addi r27, r1, KDP.SegMaps - 8 + lis r26, 0 + +@next_segment_entry + _wlog 'SEGMENT ', r26, '^n' + + lwzu r25, 8(r27) + + b @this_pmdt +@next_pmdt + addi r25, r25, PMDT.Size +@this_pmdt + + +;_______________________________________________________________________ +; Now we enter the loop body: +; r27 points to segmap entry +; r25 points to the PMDT +; r26 equals the base address of this segment +;_______________________________________________________________________ + + + ; Load the contents of the PMDT. + + lwz r17, PMDT.PBaseAndFlags(r25) + _wlog ' PMDT PBaseAndFlags ', r17, ' ' + + lhz r15, PMDT.LBase(r25) + _wlogh 'LBase ', r15, ' ' + + andi. r8, r17, $800 | $400 | $200 ; interested in 3 PBase flags + + lhz r16, PMDT.PageCount(r25) + _wlogh 'PageCount ', r16, '^n', scratch=r9 ; cannot clobber r8 here + + + ; Based on those flags, do one of two things + cmplwi r8, 0 + cmplwi cr1, r8, $800 | $400 + beq- @pmdt_flags_are_zero + beq- cr1, @pmdt_flags_are_c00 + + ; Else if not a full-segment PMDT, next PMDT + cmplwi cr2, r15, 0x0000 + cmplwi cr3, r16, 0xffff + bne+ cr2, @next_pmdt + bne+ cr3, @next_pmdt + + ; Else if there are segments remaining (16 total), next segment. + addis r26, r26, 0x1000 + cmplwi r26, 0 ; once it wraps to zero, we're done + bne+ @next_segment_entry + + ; Else create special one-page Areas to catch naughty pointer derefs, + ; then return. + + ; 61F168F1 (magic bus error incantation) + + li r8, Area.Size + bl PoolAlloc + mr. r31, r8 + beq+ Local_Panic + + lwz r8, EWA.PA_CurAddressSpace(r1) + stw r8, Area.AddressSpacePtr(r31) + + lisori r15, 0x68f168f1 + stw r15, Area.LogicalBase(r31) + + li r16, 0x1000 + stw r16, Area.Length(r31) + + lisori r8, 0x00008000 + stw r8, Area.Zero(r31) + + li r8, 0 + stw r8, 0x001c(r31) + + lisori r8, 0x0000e00c + stw r8, 0x0020(r31) + + mr r8, r31 + bl createarea + + cmpwi r9, noErr + beq- @success_68f168f1 + mr r8, r31 + bl PoolFree +@success_68f168f1 + + + ; DEADBEEF (all over the place) + + li r8, Area.Size + bl PoolAlloc + mr. r31, r8 + beq+ Local_Panic + + lwz r8, EWA.PA_CurAddressSpace(r1) + stw r8, Area.AddressSpacePtr(r31) + + lisori r15, 0xdeadbeef + stw r15, Area.LogicalBase(r31) + + li r16, 0x1000 + stw r16, Area.Length(r31) + + lisori r8, 0x00008000 + stw r8, Area.Zero(r31) + + li r8, 0 + stw r8, 0x001c(r31) + + lisori r8, 0x0000e00c + stw r8, 0x0020(r31) + + mr r8, r31 + bl createarea + + cmpwi r9, noErr + beq- @success_deadbeef + mr r8, r31 + bl PoolFree +@success_deadbeef + + + ; Done -- return. + lwz r16, EWA.SpacesSavedLR(r1) + lwz r17, EWA.SpacesSavedCR(r1) + mtlr r16 + mtcr r17 + blr + + + ; ONE OF THE "FLAGS" CASES: all tests bits unset + +@pmdt_flags_are_zero + _clog ' pmdt_flags_are_zero^n' + + ; Apparently other iterations leave this to find? + lwz r8, EWA.SpacesDeferredAreaPtr(r1) + cmpwi r8, 0 + beq- @thing_is_zero + + bl createarea + cmpwi r9, noErr + bne+ Local_Panic + + li r8, 0 + stw r8, EWA.SpacesDeferredAreaPtr(r1) +@thing_is_zero + + + + li r8, Area.Size + bl PoolAlloc + mr. r31, r8 + beq+ Local_Panic + + ; Reload PMDT details + lwz r17, PMDT.PBaseAndFlags(r25) + lhz r15, PMDT.LBase(r25) + lhz r16, PMDT.PageCount(r25) + + ; Why do we need to sign the area? Isn't it 'AREA'? + lisori r8, 'area' + stw r8, Area.Signature(r31) + + ; Set r15/r16 to true logical base/length + slwi r15, r15, 12 + addi r16, r16, 1 + add r15, r15, r26 ; add a page, I think + slwi r16, r16, 12 + + lwz r8, KDP.NanoKernelInfo + NKNanoKernelInfo.blueProcessID(r1) + stw r8, Area.ProcessID(r31) + + lwz r8, EWA.PA_CurAddressSpace(r1) + stw r8, Area.AddressSpacePtr(r31) + + stw r15, Area.LogicalBase(r31) + + stw r16, Area.Length(r31) + stw r16, Area.Length2(r31) + + li r8, 0 + stw r8, Area.Zero(r31) + + lwz r18, 0x007c(r31) + rlwinm r9, r17, 0, 0, 19 + stw r9, 0x0070(r31) + andi. r16, r17, 0x03 + bne- @_20c + ori r17, r17, 0x02 +@_20c + + bl major_0x10d38_0x58 + stw r18, 0x001c(r31) + + +@_214 + + + + lisori r8, 0x0000e00c + stw r8, 0x0020(r31) + + + ; Try to create the Area. If we succeed then do the next PMDT. + mr r8, r31 + bl createarea + cmpwi r9, noErr + mr r31, r8 + beq+ @next_pmdt + + ; If CreateArea failed, assume that it was due to overlap with another Area. + + ; Find that AboveArea that we impinged on (=> r24). + lwz r9, Area.LogicalBase(r31) + lwz r8, Area.AddressSpacePtr(r31) + bl FindAreaAbove + mr r24, r8 + + ; Shorten our FailedArea to fit below AboveArea. + lwz r15, Area.LogicalBase(r31) + lwz r16, Area.LogicalBase(r24) + lwz r17, Area.LogicalBase2(r31) + subf. r16, r15, r16 ; r16 = offset of found area from this one + stw r17, EWA.SpacesSavedAreaBase(r1) ; ??? + stw r16, Area.Length(r31) ; we will try again, with no overlap + + beq- @found_area_has_same_base + + ; If FoundArea < FailedArea, panic (impossible for FindAreaAbove to return this) + bltl+ Local_Panic ; below would be impossible + + ; If AboveArea > FailedArea, create NewArea (=> r30) + mr r8, r31 + bl createarea + + cmpwi r9, noErr ; strike three + mr r30, r8 + bnel+ Local_Panic + + ; If AboveArea.LogicalBase2 >= FailedArea.LogicalBase2 then continue to next PMDT. + lwz r15, Area.LogicalBase2(r24) + lwz r16, EWA.SpacesSavedAreaBase(r1) + subf. r16, r15, r16 + ble+ @next_pmdt + + ; Else replace FailedArea with an Area copied from NewArea + li r8, Area.Size + bl PoolAlloc + mr. r31, r8 + beq+ Local_Panic + + li r8, Area.Size - 4 +@area_copy_loop + lwzx r9, r8, r30 + stwx r9, r8, r31 + cmpwi r8, 0 + subi r8, r8, 4 + bgt+ @area_copy_loop +@found_area_has_same_base + + ; Else (AboveArea == ThisArea), do nothing special (endif) + + + lwz r9, Area.LogicalBase(r31) + + lwz r15, 0x0028(r24) + lwz r16, EWA.SpacesSavedAreaBase(r1) ; this is FailedArea.LogicalBase2 + subf. r16, r15, r16 + addi r15, r15, 1 + blel+ Local_Panic + + stw r16, Area.Length(r31) + stw r15, Area.LogicalBase(r31) + subf r9, r9, r15 + lwz r8, 0x0070(r31) + add r8, r8, r9 + stw r8, 0x0070(r31) + b @_214 + + + + +@pmdt_flags_are_c00 + _clog ' pmdt_flags_are_c00^n' + li r8, Area.Size + bl PoolAlloc + mr. r31, r8 + beq+ Local_Panic + + lwz r17, 0x0004(r25) + lhz r15, 0x0000(r25) + lhz r16, 0x0002(r25) + lis r8, 0x6172 + ori r8, r8, 0x6561 + stw r8, Area.Signature(r31) + slwi r15, r15, 12 + addi r16, r16, 0x01 + add r15, r15, r26 + slwi r16, r16, 12 + lwz r8, 0x0ec0(r1) + stw r8, Area.ProcessID(r31) + lwz r8, EWA.PA_CurAddressSpace(r1) + stw r8, Area.AddressSpacePtr(r31) + stw r15, Area.LogicalBase(r31) + stw r16, Area.Length(r31) + stw r16, Area.Length2(r31) + li r8, 0x00 + stw r8, Area.Zero(r31) + li r8, 0x07 + stw r8, 0x001c(r31) + lis r8, 0x00 + ori r8, r8, 0x600c + stw r8, 0x0020(r31) + rlwinm r8, r17, 22, 0, 29 + stw r8, 0x0040(r31) + lwz r8, Area.TwoFiftySix(r31) + ori r8, r8, 0x40 + lwz r9, -0x0430(r1) + cmpwi r9, noErr + + bgt- @_374 + ori r8, r8, 0x80 +@_374 + + stw r8, Area.TwoFiftySix(r31) + cmpwi r15, 0x00 + + bne- @_388 + stw r31, EWA.SpacesDeferredAreaPtr(r1) + b @next_pmdt +@_388 + + lwz r18, EWA.SpacesDeferredAreaPtr(r1) + cmpwi r18, 0x00 + beq- @_3c8 + lwz r8, 0x0024(r18) + lwz r9, 0x002c(r18) + add r19, r8, r9 + cmplw r19, r15 + bne- @_3c8 + add r9, r9, r16 + addi r19, r9, -0x01 + stw r9, 0x002c(r18) + stw r9, 0x0038(r18) + stw r19, 0x0028(r18) + mr r8, r31 + bl PoolFree + b @next_pmdt +@_3c8 + + lwz r8, Area.TwoFiftySix(r31) + ori r8, r8, 0x80 + stw r8, Area.TwoFiftySix(r31) + mr r8, r31 + bl createarea + cmpwi r9, noErr + bne+ Local_Panic + b @next_pmdt + + + + + +; KCGetPageSizeClasses + + +; > r1 = kdp + +; < r3 = pageClass + + DeclareMPCall 68, KCGetPageSizeClasses + +KCGetPageSizeClasses ; OUTSIDE REFERER + li r3, 0x01 + b CommonMPCallReturnPath + + + +; KCGetPageSize + + +; > r1 = kdp +; > r3 = pageClass + +; < r3 = byteCount + + DeclareMPCall 69, KCGetPageSize + +KCGetPageSize ; OUTSIDE REFERER + cmpwi r3, 0x01 + bne+ ReturnParamErrFromMPCall + lwz r3, 0x0f30(r1) + b CommonMPCallReturnPath + + + + DeclareMPCall 70, MPCall_70 + +MPCall_70 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mfsprg r16, 0 + lwz r17, -0x0008(r16) + mr r8, r3 + lwz r9, Area.AddressSpacePtr(r17) + lwz r16, 0x0008(r9) + rlwinm. r16, r16, 0, 30, 30 + bne+ ReleaseAndReturnMPCallOOM + bl NKCreateAddressSpaceSub + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, MPCall_70_0x54 + mflr r16 + bl panic + +MPCall_70_0x54 + stw r16, PSA.SchLock + Lock.Count(r1) + mr. r3, r8 + li r4, 0x00 + bne+ CommonMPCallReturnPath + lwz r4, 0x0000(r9) + b CommonMPCallReturnPath + + + +; ARG MPCoherenceID r8 owningcgrp ; 0 to use mobo cgrp +; Process *r9 owningPROC + +; RET osErr r8 +; AddressSpace *r9 + +NKCreateAddressSpaceSub + cmpwi r8, 0 + mr r27, r9 ; Save the process arg for later + mflr r30 + + ; Use the motherboard coherence group if none is provided in r8 + bne- @cgrp_provided + mfsprg r15, 0 + lwz r28, EWA.CPUBase + CPU.CgrpList + LLL.Freeform(r15) + + b @got_cgrp + +@cgrp_provided + bl LookupID ; takes id in r8, returns ptr in r8 and kind in r9 + + cmpwi r9, CoherenceGroup.kIDClass + mr r28, r8 + bne- @fail_notcgrp + lwz r28, CoherenceGroup.GRPSList + LLL.Next(r28) + +@got_cgrp + + + ; Read the SpecialPtr of this cgrp element in list of the owning CpuStruct + ; But why? cgrp.LLL.Freeform does not seem to be set for the mobo cgrp + lwz r29, LLL.Freeform(r28) + + + ; Boast (including the SpecialPtr) + _log 'NKCreateAddressSpaceSub - group at 0x' + + mr r8, r28 + bl printw + + mr r8, r29 + bl printw + + _log '^n' + + + ; Create the AddressSpace + li r8, AddressSpace.Size + bl PoolAlloc + mr. r31, r8 + beq- @fail_OOM + + + ; Give the addr spc a copy of the SpecialPtr of its parent cgrp + stw r29, AddressSpace.ParentCoherenceSpecialPtr(r31) + + + ; Give the addr spc an ID + li r9, AddressSpace.kIDClass + bl MakeID + + cmpwi r8, 0x00 + beq- @fail_MakeID + + stw r8, AddressSpace.ID(r31) + + + ; Increment a counter in the cgrp (modulo a million, fail on overflow) + lwz r16, CoherenceGroup.Incrementer(r28) + addi r16, r16, 1 + clrlwi. r16, r16, 12 + beq- @fail_toomanycalls + stw r16, CoherenceGroup.Incrementer(r28) + + + ; Fill segment register fields in the address space struct like so: + ; (8 bits = 0x20) || (4 bits = word idx) || (20 bits = prev call count) + + addi r16, r16, -1 + li r17, 0x40 - 4 + oris r16, r16, 0x2000 + addi r18, r31, AddressSpace.SRs + +@fill_loop + cmpwi r17, 0 + rlwimi r16, r17, 18, 8, 11 ; = index (15, 14, 13...) << 20 + stwx r16, r17, r18 + addi r17, r17, -4 + bne+ @fill_loop + + + ; Sign the addr spc struct + lisori r8, AddressSpace.kSignature + stw r8, AddressSpace.Signature(r31) + + + ; Create an empty linked list of 'rsrv's (what are they?) + addi r16, r31, AddressSpace.RsrvList + InitList r16, 'rsrv', scratch=r17 + + + ; Create a linked list with one Area + addi r16, r31, AddressSpace.AreaList + InitList r16, 'area', scratch=r17 + + ; Allocate the Area, check for errors + li r8, Area.Size + bl PoolAlloc + mr. r29, r8 + beq- @fail_OOM_again + + ; Sign the Area + lisori r8, Area.kSignature + stw r8, Area.Signature(r29) + + ; Pop some constants in + lisori r8, -1 + stw r8, Area.LogicalBase(r29) + stw r8, Area.LogicalBase2(r29) + li r8, 256 + stw r8, Area.TwoFiftySix(r29) + + ; Give it a copy of the ID of its parent address space + lwz r8, AddressSpace.ID(r31) + stw r8, Area.AddressSpaceID(r29) + + ; Point the SpecialPtr to it and insert it in the list + addi r16, r31, AddressSpace.AreaList + addi r29, r29, Area.LLL + stw r16, LLL.Freeform(r29) + InsertAsPrev r29, r16, scratch=r17 + + + ; Point this struct by ID to its owning Process, + ; and increment a counter in that struct. + lwz r18, Process.ID(r27) + stw r18, AddressSpace.ProcessID(r31) + + lwz r17, Process.AddressSpaceCount(r27) + addi r17, r17, 1 + stw r17, Process.AddressSpaceCount(r27) + + + ; Done, with no errors + li r8, 0 ; kMPNoErr + mr r9, r31 ; ptr to new AddressSpace + b @return + +@fail_OOM_again + lwz r8,Area.ID(r31) + +@fail_toomanycalls + bl DeleteID + mr r8, r31 + bl PoolFree + li r8, kMPInsufficientResourcesErr + b @return + +@fail_MakeID + mr r8, r31 + bl PoolFree + +@fail_OOM + li r8, -0x726e + b @return + +@fail_notcgrp + li r8, kMPInvalidIDErr + +@return + mtlr r30 + blr + + + + DeclareMPCall 71, MPCall_71 + +MPCall_71 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, AddressSpace.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r16, Area.ProcessID(r31) + cmpwi r16, 0x00 + bne+ ReleaseAndReturnMPCallOOM + addi r16, r31, 0x10 + lwz r17, 0x0018(r31) + cmpw r16, r17 + bne+ ReleaseAndReturnMPCallOOM + addi r16, r31, 0x20 + lwz r17, Area.LogicalBase2(r31) + cmpw r16, r17 + bne+ ReleaseAndReturnMPCallOOM + lwz r8, 0x0074(r31) + +; r8 = id + bl LookupID +; r8 = something not sure what +; r9 = 0:inval, 1:proc, 2:task, 3:timer, 4:q, 5:sema, 6:cr, 7:cpu, 8:addrspc, 9:evtg, 10:cgrp, 11:area, 12:not, 13:log + + lwz r17, 0x0018(r8) + addi r17, r17, -0x01 + stw r17, 0x0018(r8) + lwz r8, Area.ID(r31) + bl DeleteID + mr r8, r31 + bl PoolFree + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; KCCurrentAddressSpace + + + DeclareMPCall 117, KCCurrentAddressSpace + +KCCurrentAddressSpace ; OUTSIDE REFERER + mfsprg r16, 0 + lwz r17, EWA.PA_CurAddressSpace(r16) + lwz r3, AddressSpace.ID(r17) + b CommonMPCallReturnPath + + + +; KCHomeAddressSpace + + + DeclareMPCall 118, KCHomeAddressSpace + +KCHomeAddressSpace ; OUTSIDE REFERER + mfsprg r16, 0 + lwz r17, EWA.PA_CurTask(r16) + lwz r18, Task.OwningProcessPtr(r17) + lwz r19, Process.SystemAddressSpacePtr(r18) + lwz r3, AddressSpace.ID(r19) + b CommonMPCallReturnPath + + + +; KCSetTaskAddressSpace + + + DeclareMPCall 119, KCSetTaskAddressSpace + +KCSetTaskAddressSpace ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID +; r8 = something not sure what +; r9 = 0:inval, 1:proc, 2:task, 3:timer, 4:q, 5:sema, 6:cr, 7:cpu, 8:addrspc, 9:evtg, 10:cgrp, 11:area, 12:not, 13:log + + mr r31, r8 + cmpwi r9, 0x02 + bne+ ReleaseAndReturnMPCallInvalidIDErr + lwz r16, 0x0064(r31) + mtcr r16 + li r3, -0x7271 + beq+ cr7, ReleaseAndReturnMPCall + bne+ cr5, ReleaseAndReturnMPCallOOM + lbz r16, 0x0018(r31) + cmpwi r16, 0x00 + bne+ ReleaseAndReturnMPCallOOM + mr r8, r4 + +; r8 = id + bl LookupID +; r8 = something not sure what +; r9 = 0:inval, 1:proc, 2:task, 3:timer, 4:q, 5:sema, 6:cr, 7:cpu, 8:addrspc, 9:evtg, 10:cgrp, 11:area, 12:not, 13:log + + mr r30, r8 + lwz r16, 0x0060(r31) + cmpwi r9, 0x08 + lwz r17, 0x0074(r30) + bne+ ReleaseAndReturnMPCallInvalidIDErr + cmpw r16, r17 + bne+ ReleaseAndReturnMPCallOOM + lwz r17, 0x0070(r31) + lwz r16, 0x000c(r17) + addi r16, r16, -0x01 + stw r16, 0x000c(r17) + lwz r16, 0x000c(r30) + addi r16, r16, 0x01 + stw r16, 0x000c(r30) + stw r30, 0x0070(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 72, MPCall_72 + +MPCall_72 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr. r8, r3 + mfsprg r28, 0 + lwz r30, EWA.PA_CurAddressSpace(r28) + beq- MPCall_72_0x38 + +; r8 = id + bl LookupID + cmpwi r9, AddressSpace.kIDClass + + mr r30, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + +MPCall_72_0x38 + li r8, 160 + +; r1 = kdp +; r8 = size + bl PoolAlloc +; r8 = ptr + + mr. r31, r8 + beq+ major_0x0af60 + stw r30, Area.AddressSpacePtr(r31) + stw r4, 0x001c(r31) + stw r5, Area.Length(r31) + lwz r8, 0x0134(r6) + stw r8, Area.Zero(r31) + lwz r8, 0x013c(r6) + stw r8, 0x0020(r31) + lwz r8, 0x0144(r6) + stw r8, Area.LogicalBase(r31) + mr r8, r31 + bl createarea + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, MPCall_72_0x90 + mflr r16 + bl panic + +MPCall_72_0x90 + stw r16, PSA.SchLock + Lock.Count(r1) + mr. r3, r9 + bne- MPCall_72_0xb0 + lwz r8, Area.LogicalBase(r31) + stw r8, 0x0144(r6) + lwz r8, Area.ID(r31) + stw r8, 0x014c(r6) + b CommonMPCallReturnPath + +MPCall_72_0xb0 + bl PoolFree + b CommonMPCallReturnPath + + + +; createarea + +; Xrefs: +; convert_pmdts_to_areas +; MPCall_72 +; MPCall_73 + +; This function actually gets passed its own structure. +; What the frick? + +; Always returns via ReturnFromCreateArea + +; ARG Area *r8 +; RET ID r8, osErr r9 + +createarea ; OUTSIDE REFERER + + ; Always returns via ReturnFromCreateArea + mflr r16 + mfsprg r9, 0 + stw r16, EWA.CreateAreaSavedLR(r9) + stmw r25, EWA.CreateAreaSavedR25(r9) + + ; Keep the structure itself in r31 for the duration. + ; r8 must be used for other things + mr r31, r8 + + ; For if we need to return early + li r9, paramErr + + + lwz r16, Area.TwoFiftySix(r31) + lwz r17, 0x0020(r31) + rlwinm. r16, r16, 0, 28, 28 + + lisori r16, 0xfffc13e0 ; if bit 28 = 0 + beq- @use_other + lisori r16, 0xfff99be0 ; if bit 28 = 1 +@use_other + + and. r16, r16, r17 + bne- ReturnFromCreateArea + + andi. r16, r17, 0x1f + cmpwi cr1, r16, 0x0c + beq- createarea_0x50 + blt- cr1, ReturnFromCreateArea + +createarea_0x50 + bne- createarea_0x5c + ori r17, r17, 0x0c + stw r17, 0x0020(r31) + +createarea_0x5c + andi. r16, r17, 0x1f + li r18, -0x01 + slw r18, r18, r16 + stw r18, 0x0078(r31) + rlwinm. r16, r17, 27, 27, 31 + bne- ReturnFromCreateArea + addi r16, r16, 0x0c + li r18, -0x01 + slw r18, r18, r16 + stw r18, 0x007c(r31) + neg r16, r18 + not r19, r18 + stw r16, 0x0068(r31) + lwz r16, Area.Length(r31) + add r16, r16, r19 + and. r16, r16, r18 + stw r16, Area.Length(r31) + beq- ReturnFromCreateArea + lwz r18, 0x001c(r31) + lis r16, -0x01 + ori r16, r16, 0xff10 + and. r16, r16, r18 + bne- ReturnFromCreateArea + lwz r16, 0x0070(r31) + li r17, 0x200 + rlwimi r17, r16, 0, 0, 19 + bl major_0x10cb8 + stw r16, 0x0070(r31) + stw r17, 0x0074(r31) + mr r8, r31 + + li r9, Area.kIDClass + bl MakeID + cmpwi r8, 0 + beq- major_0x10320 + + stw r8, Area.ID(r31) + mfsprg r16, 0 + lwz r17, -0x0008(r16) + lwz r18, 0x0060(r17) + lwz r30, Area.AddressSpacePtr(r17) + stw r18, Area.ProcessID(r31) + lwz r16, Area.AddressSpacePtr(r31) + lwz r17, 0x0000(r16) + stw r17, Area.AddressSpaceID(r31) + lwz r16, 0x0008(r30) + rlwinm. r16, r16, 0, 30, 30 + bne- major_0x10320_0x64 + lis r16, 0x4152 + ori r16, r16, 0x4541 + stw r16, Area.Signature(r31) + lwz r17, 0x0020(r31) + lwz r16, Area.Zero(r31) + addi r16, r16, 0xfff + rlwinm r16, r16, 0, 0, 19 + stw r16, Area.Zero(r31) + rlwinm r16, r17, 0, 17, 18 + cmplwi cr7, r16, 0x6000 + rlwinm. r16, r17, 0, 17, 17 + beq- cr7, createarea_0x150 + bne- createarea_0x150 + crset cr7_gt + crclr cr7_lt + +createarea_0x150 + rlwinm. r16, r17, 0, 17, 18 + lwz r18, Area.LogicalBase(r31) + lwz r19, Area.Length(r31) + blt- cr7, createarea_0x16c + bne- createarea_0x170 + li r18, 0x00 + b createarea_0x170 + +createarea_0x16c + subf r18, r19, r18 + +createarea_0x170 + lwz r16, 0x0078(r31) + and r18, r18, r16 + stw r18, Area.LogicalBase(r31) + add r16, r18, r19 + addi r16, r16, -0x01 + stw r16, Area.LogicalBase2(r31) + + + ; Major hint here... + + _log ' CreateArea [ ' + mr r8, r18 + bl Printw + mr r8, r16 + bl Printw + _log '] ID ' + + + lwz r8, Area.ID(r31) + mr r8, r8 + bl Printw + + + bgt- cr7, createarea_0x1f4 + blt- cr7, createarea_0x218 + _log 'placed' + b createarea_0x234 + +createarea_0x1f4 + _log 'placed at or above' + b createarea_0x234 + +createarea_0x218 + _log 'placed below' + +createarea_0x234 + lwz r8, Area.AddressSpacePtr(r31) + lwz r16, Area.LogicalBase2(r31) + lwz r9, Area.LogicalBase(r31) + cmplw r9, r16 + bge- major_0x10320_0x64 + bl FindAreaAbove + mr r30, r8 + lwz r14, Area.LogicalBase(r31) + lwz r15, Area.LogicalBase2(r31) + lwz r16, Area.Zero(r31) + lwz r17, 0x0024(r30) + lwz r18, 0x0028(r30) + lwz r19, 0x0030(r30) + lwz r21, Area.AddressSpacePtr(r31) + cmpwi r17, -0x01 + add r8, r15, r16 + add r9, r15, r19 + beq- createarea_0x2b8 + cmplw r8, r17 + cmplw cr1, r9, r17 + bge- createarea_0x28c + blt- cr1, createarea_0x2b8 + +createarea_0x28c + beq- cr7, major_0x10320_0x64 + _log ' ... bc search^n' + bgt- cr7, createarea_0x34c + b createarea_0x31c + +createarea_0x2b8 + addi r21, r21, 0x20 + lwz r20, 0x0060(r30) + cmpw r20, r21 + beq- createarea_0x39c + addi r20, r20, -0x54 + lwz r17, 0x0024(r20) + lwz r18, 0x0028(r20) + lwz r19, 0x0030(r20) + add r8, r18, r16 + add r9, r18, r19 + cmplw r8, r14 + cmplw cr1, r9, r14 + bge- createarea_0x2f0 + blt- cr1, createarea_0x374 + +createarea_0x2f0 + beq- cr7, major_0x10320_0x64 + _log ' ... ab search^n' + bgt- cr7, createarea_0x34c + b createarea_0x31c + +createarea_0x31c + subf r8, r19, r17 + subf r9, r16, r17 + cmplw r8, r9 + lwz r21, Area.Length(r31) + ble- createarea_0x334 + mr r8, r9 + +createarea_0x334 + subf r8, r21, r8 + cmplw r8, r14 + addi r18, r8, 0x01 + lwz r19, Area.Length(r31) + bge- major_0x10320_0x64 + b createarea_0x170 + +createarea_0x34c + add r8, r18, r19 + add r9, r18, r16 + lwz r20, 0x0078(r31) + cmplw r8, r9 + neg r21, r20 + bge- createarea_0x368 + mr r8, r9 + +createarea_0x368 + add r18, r8, r21 + lwz r19, Area.Length(r31) + b createarea_0x170 + +createarea_0x374 + addi r19, r31, 0x54 + addi r20, r20, 0x54 + lwz r16, 0x0000(r20) + stw r16, 0x0000(r19) + lwz r16, 0x0008(r20) + stw r16, 0x0008(r19) + stw r20, 0x000c(r19) + stw r19, 0x000c(r16) + stw r19, 0x0008(r20) + b createarea_0x3b8 + +createarea_0x39c + addi r19, r31, 0x54 + stw r20, 0x0000(r19) + stw r20, 0x000c(r19) + lwz r16, 0x0008(r20) + stw r16, 0x0008(r19) + stw r19, 0x000c(r16) + stw r19, 0x0008(r20) + +createarea_0x3b8 + addi r16, r31, 0x90 + lis r17, 0x6665 + stw r16, 0x0008(r16) + ori r17, r17, 0x6e63 + stw r16, 0x000c(r16) + stw r17, 0x0004(r16) + lwz r16, 0x0020(r31) + lwz r17, Area.TwoFiftySix(r31) + rlwinm. r8, r16, 0, 16, 16 + bne- createarea_0x64c + rlwinm. r8, r17, 0, 25, 25 + bne- createarea_0x41c + lwz r8, Area.Length(r31) + rlwinm r8, r8, 22, 10, 29 + mr r29, r8 + +; r1 = kdp +; r8 = size + bl PoolAlloc +; r8 = ptr + + cmpwi r8, 0x00 + stw r8, 0x0040(r31) + beq- createarea_0x460 + lwz r9, Area.Length(r31) + srwi r9, r9, 12 + bl major_0x10284 + lwz r17, Area.TwoFiftySix(r31) + ori r17, r17, 0x10 + stw r17, Area.TwoFiftySix(r31) + +createarea_0x41c + lwz r17, Area.TwoFiftySix(r31) + andi. r8, r17, 0x88 + lwz r8, Area.Length(r31) + bne- createarea_0x45c + rlwinm r8, r8, 21, 11, 30 + mr r29, r8 + +; r1 = kdp +; r8 = size + bl PoolAlloc +; r8 = ptr + + cmpwi r8, 0x00 + stw r8, 0x003c(r31) + beq- createarea_0x460 + lwz r9, Area.Length(r31) + srwi r9, r9, 12 + bl major_0x102a8 + lwz r16, Area.TwoFiftySix(r31) + ori r16, r16, 0x01 + stw r16, Area.TwoFiftySix(r31) + +createarea_0x45c + b createarea_0x64c + +createarea_0x460 + cmpwi r29, 0xfd8 + ble- major_0x10320_0x20 + + _Lock PSA.PoolLock, scratch1=r16, scratch2=r17 + + lwz r17, Area.TwoFiftySix(r31) + li r27, 0x00 + rlwinm. r8, r17, 0, 25, 25 + bne- createarea_0x4b4 + lwz r27, Area.Length(r31) + srwi r27, r27, 12 + cmpwi r27, 0x400 + ble- createarea_0x4ac + ori r17, r17, 0x20 + stw r17, Area.TwoFiftySix(r31) + addi r27, r27, 0x400 + +createarea_0x4ac + addi r27, r27, 0x3ff + srwi r27, r27, 10 + +createarea_0x4b4 + lwz r8, Area.TwoFiftySix(r31) + li r29, 0x00 + rlwinm. r9, r8, 0, 28, 28 + bne- createarea_0x4e8 + lwz r29, Area.Length(r31) + srwi r29, r29, 12 + cmpwi r29, 0x800 + ble- createarea_0x4e0 + ori r8, r8, 0x02 + stw r8, Area.TwoFiftySix(r31) + addi r29, r29, 0x800 + +createarea_0x4e0 + addi r29, r29, 0x7ff + srwi r29, r29, 11 + +createarea_0x4e8 + lwz r18, -0x0430(r1) + add. r8, r27, r29 + ble- major_0x102c8 + cmpw r8, r18 + bgt- major_0x102c8 + lwz r16, -0x0430(r1) + lwz r17, PSA.UnheldFreePageCount(r1) + subf r16, r8, r16 + subf r17, r8, r17 + stw r16, -0x0430(r1) + stw r17, PSA.UnheldFreePageCount(r1) + mr. r18, r27 + beq- createarea_0x5a0 + lwz r16, -0x0448(r1) + lwz r17, 0x0008(r16) + lwz r19, 0x000c(r16) + stw r17, 0x0008(r19) + stw r19, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + addi r18, r18, -0x01 + stw r16, 0x0040(r31) + cmpwi r18, 0x00 + lwz r17, -0x0448(r1) + mr r8, r16 + subi r16, r16, 4 + bgt- createarea_0x564 + li r9, 0x400 + bl major_0x10284 + b createarea_0x5a0 + +createarea_0x564 + lwz r19, 0x0008(r17) + lwz r20, 0x000c(r17) + stw r19, 0x0008(r20) + stw r20, 0x000c(r19) + li r19, 0x00 + stw r19, 0x0008(r17) + stw r19, 0x000c(r17) + addi r18, r18, -0x01 + stwu r17, 0x0004(r16) + mr r8, r17 + li r9, 0x400 + bl major_0x10284 + lwz r17, -0x0448(r1) + cmpwi r18, 0x00 + bgt+ createarea_0x564 + +createarea_0x5a0 + mr. r18, r29 + beq- createarea_0x62c + lwz r16, -0x0448(r1) + lwz r17, 0x0008(r16) + lwz r19, 0x000c(r16) + stw r17, 0x0008(r19) + stw r19, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + addi r18, r18, -0x01 + stw r16, 0x003c(r31) + cmpwi r18, 0x00 + lwz r17, -0x0448(r1) + mr r8, r16 + subi r16, r16, 4 + bgt- createarea_0x5f0 + li r9, 0x800 + bl major_0x102a8 + b createarea_0x62c + +createarea_0x5f0 + lwz r19, 0x0008(r17) + lwz r20, 0x000c(r17) + stw r19, 0x0008(r20) + stw r20, 0x000c(r19) + li r19, 0x00 + stw r19, 0x0008(r17) + stw r19, 0x000c(r17) + addi r18, r18, -0x01 + stwu r17, 0x0004(r16) + mr r8, r17 + li r9, 0x800 + bl major_0x102a8 + lwz r17, -0x0448(r1) + cmpwi r18, 0x00 + bgt+ createarea_0x5f0 + +createarea_0x62c + sync + lwz r16, -0x0ad0(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, createarea_0x648 + mflr r16 + bl panic + +createarea_0x648 + stw r16, -0x0ad0(r1) + +createarea_0x64c + lwz r16, Area.TwoFiftySix(r31) + rlwinm. r8, r16, 0, 28, 28 + beq- createarea_0x67c + lwz r16, 0x0044(r31) + addi r17, r31, 0x44 + stw r16, 0x0000(r17) + stw r16, 0x0008(r17) + lwz r18, 0x000c(r16) + stw r18, 0x000c(r17) + stw r17, 0x0008(r18) + stw r17, 0x000c(r16) + b major_0x10320_0x94 + +createarea_0x67c + addi r16, r31, 0x44 + lis r17, 0x414b + stw r16, 0x0008(r16) + ori r17, r17, 0x4120 + stw r16, 0x000c(r16) + stw r17, 0x0004(r16) + b major_0x10320_0x94 + + + +; major_0x10284 + +; Xrefs: +; createarea + +major_0x10284 ; OUTSIDE REFERER + subi r8, r8, 4 + addi r9, r9, -0x01 + lwz r20, 0x0074(r31) + ori r20, r20, 0x200 + +major_0x10284_0x10 + cmpwi r9, noErr + stwu r20, 0x0004(r8) + addi r9, r9, -0x01 + bgt+ major_0x10284_0x10 + blr + + + +; major_0x102a8 + +; Xrefs: +; createarea + +major_0x102a8 ; OUTSIDE REFERER + addi r8, r8, -0x02 + addi r9, r9, -0x01 + li r20, 0x7fff + +major_0x102a8_0xc + cmpwi r9, noErr + sthu r20, 0x0002(r8) + addi r9, r9, -0x01 + bgt+ major_0x102a8_0xc + blr + + + +; major_0x102c8 + +; Xrefs: +; createarea + +major_0x102c8 ; OUTSIDE REFERER + sync + lwz r16, -0x0ad0(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, major_0x102c8_0x1c + mflr r16 + bl panic + +major_0x102c8_0x1c + stw r16, -0x0ad0(r1) + addi r30, r8, 0x08 + lwz r8, -0x0420(r1) + +; r8 = id + bl LookupID + cmpwi r9, Notification.kIDClass + + mr r26, r8 + bne- major_0x10320_0x20 + li r8, 0x02 + stw r8, 0x0010(r26) + stw r30, 0x0014(r26) + li r29, 0x00 + stw r29, 0x0018(r26) + mr r30, r26 + bl major_0x0db04 + b major_0x10320_0x20 + + + +; major_0x10320 + +; Xrefs: +; IntDSIOtherOther +; PagingFunc1 +; MPCall_60 +; convert_pmdts_to_areas +; createarea +; major_0x102c8 +; MPCall_80 +; MPCall_125 +; MPCall_95 + +major_0x10320 ; OUTSIDE REFERER + mr r8, r31 + li r9, -0x726e + b ReturnFromCreateArea + dc.l 0x811f0000 + dc.l 0x48004fd1 + dc.l 0x7fe8fb78 + dc.l 0x39208d8d + dc.l 0x4800009c + +major_0x10320_0x20 ; OUTSIDE REFERER + addi r19, r31, 0x54 + lwz r16, 0x0008(r19) + lwz r17, 0x000c(r19) + stw r16, 0x0008(r17) + stw r17, 0x000c(r16) + li r16, 0x00 + stw r16, 0x0008(r19) + stw r16, 0x000c(r19) + lwz r16, Area.TwoFiftySix(r31) + lwz r8, 0x0040(r31) + rlwinm. r16, r16, 0, 25, 25 + bne- major_0x10320_0x58 + cmpwi r8, 0x00 + bnel- PoolFree + +major_0x10320_0x58 + lwz r8, 0x003c(r31) + cmpwi r8, 0x00 + bnel- PoolFree + +major_0x10320_0x64 ; OUTSIDE REFERER + _log ' ... skipped^n' + lwz r8, Area.ID(r31) + bl DeleteID + mr r8, r31 + li r9, -0x7272 + b ReturnFromCreateArea + +major_0x10320_0x94 ; OUTSIDE REFERER + _log ' ... created^n' + mr r8, r31 + li r9, 0x00 + + + +ReturnFromCreateArea + mfsprg r16, 0 + lwz r17, EWA.CreateAreaSavedLR(r16) + mtlr r17 + lmw r25, EWA.CreateAreaSavedR25(r16) + blr + + + +; ARG AddressSpace *r8, +; RET Area *r8 + +FindAreaAbove ; OUTSIDE REFERER + lwz r8, AddressSpace.AreaList + LLL.Next(r8) + +@loop + subi r8, r8, Area.LLL + + ; Return an area such that: + ; max(Area.LogicalBase, Area.LogicalBase2) >= r9 + lwz r16, Area.LogicalBase(r8) + lwz r17, Area.LogicalBase2(r8) + cmplw r16, r9 + cmplw cr1, r17, r9 + bgelr- + bgelr- cr1 + + ; Iterate over linked list + lwz r8, Area.LLL + LLL.Next(r8) + b @loop + + + + DeclareMPCall 73, MPCall_73 + +MPCall_73 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + bl LookupID + cmpwi r9, Area.kIDClass + bne+ ReleaseAndReturnMPCallInvalidIDErr + + mr r30, r8 + lwz r16, 0x0008(r30) + rlwinm. r8, r16, 0, 28, 28 + bne+ major_0x0b054 + + li r8, Area.Size + bl PoolAlloc + mr. r31, r8 + beq+ major_0x0af60 + + mfsprg r28, 0 + lwz r8, EWA.PA_CurAddressSpace(r28) + stw r8, Area.AddressSpacePtr(r31) + stw r3, 0x0014(r31) + stw r30, 0x0044(r31) + stw r4, 0x001c(r31) + stw r5, Area.Length(r31) + lwz r8, 0x0134(r6) + stw r8, Area.Zero(r31) + lwz r8, 0x013c(r6) + stw r8, 0x0020(r31) + lwz r8, 0x0144(r6) + stw r8, Area.LogicalBase(r31) + lwz r8, 0x014c(r6) + stw r8, 0x0080(r31) + li r8, 0x08 + stw r8, Area.TwoFiftySix(r31) + mr r8, r31 + bl createarea + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, MPCall_73_0xb0 + mflr r16 + bl panic + +MPCall_73_0xb0 + stw r16, PSA.SchLock + Lock.Count(r1) + mr. r3, r9 + bne- MPCall_73_0xd0 + lwz r8, Area.LogicalBase(r31) + stw r8, 0x0144(r6) + lwz r8, Area.ID(r31) + stw r8, 0x0154(r6) + b CommonMPCallReturnPath + +MPCall_73_0xd0 + bl PoolFree + b CommonMPCallReturnPath + + + + DeclareMPCall 74, MPCall_74 + +MPCall_74 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r17, Area.Length2(r31) + lwz r29, Area.TwoFiftySix(r31) + cmpwi cr1, r17, 0x00 + rlwinm. r8, r29, 0, 29, 29 + bne+ cr1, ReleaseAndReturnMPCallOOM + bne+ ReleaseAndReturnMPCallPrivilegedErr + rlwinm. r8, r29, 0, 28, 28 + lwz r16, 0x004c(r31) + bne- MPCall_74_0x5c + addi r17, r31, 0x44 + cmpw r16, r17 + bne+ ReleaseAndReturnMPCallOOM + +MPCall_74_0x5c + + _Lock PSA.HTABLock, scratch1=r18, scratch2=r9 + + addi r16, r31, 0x54 + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + rlwinm. r8, r29, 0, 28, 28 + addi r16, r31, 0x44 + beq- MPCall_74_0xbc + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + +MPCall_74_0xbc + sync + lwz r18, -0x0b90(r1) + cmpwi cr1, r18, 0x00 + li r18, 0x00 + bne+ cr1, MPCall_74_0xd8 + mflr r18 + bl panic + +MPCall_74_0xd8 + stw r18, -0x0b90(r1) + lwz r8, 0x0040(r31) + rlwinm. r16, r29, 0, 25, 25 + cmpwi cr1, r8, 0x00 + bne- MPCall_74_0x178 + rlwinm. r16, r29, 0, 27, 27 + beq- cr1, MPCall_74_0x178 + bne- MPCall_74_0x174 + + _Lock PSA.PoolLock, scratch1=r18, scratch2=r9 + + rlwinm. r16, r29, 0, 26, 26 + beq- MPCall_74_0x14c + lwz r19, Area.Length(r31) + mr r20, r8 + srwi r19, r19, 12 + addi r19, r19, 0x3ff + srwi r19, r19, 10 + slwi r19, r19, 2 + subi r19, r19, 4 + +MPCall_74_0x134 + lwzx r8, r19, r20 + +; r1 = kdp +; r8 = maybe the page + bl free_list_add_page + cmpwi r19, 0x00 + subi r19, r19, 4 + bgt+ MPCall_74_0x134 + mr r8, r20 + +MPCall_74_0x14c +; r1 = kdp +; r8 = maybe the page + bl free_list_add_page + sync + lwz r18, -0x0ad0(r1) + cmpwi cr1, r18, 0x00 + li r18, 0x00 + bne+ cr1, MPCall_74_0x16c + mflr r18 + bl panic + +MPCall_74_0x16c + stw r18, -0x0ad0(r1) + b MPCall_74_0x178 + +MPCall_74_0x174 + bl PoolFree + +MPCall_74_0x178 + lwz r8, 0x003c(r31) + clrlwi. r16, r29, 0x1f + cmpwi cr1, r8, 0x00 + beq- cr1, MPCall_74_0x20c + bne- MPCall_74_0x208 + + _Lock PSA.PoolLock, scratch1=r18, scratch2=r9 + + rlwinm. r16, r29, 0, 30, 30 + beq- MPCall_74_0x1e0 + lwz r19, Area.Length(r31) + mr r20, r8 + srwi r19, r19, 12 + addi r19, r19, 0x7ff + srwi r19, r19, 11 + slwi r19, r19, 2 + subi r19, r19, 4 + +MPCall_74_0x1c8 + lwzx r8, r19, r20 + +; r1 = kdp +; r8 = maybe the page + bl free_list_add_page + cmpwi r19, 0x00 + subi r19, r19, 4 + bgt+ MPCall_74_0x1c8 + mr r8, r20 + +MPCall_74_0x1e0 +; r1 = kdp +; r8 = maybe the page + bl free_list_add_page + sync + lwz r18, -0x0ad0(r1) + cmpwi cr1, r18, 0x00 + li r18, 0x00 + bne+ cr1, MPCall_74_0x200 + mflr r18 + bl panic + +MPCall_74_0x200 + stw r18, -0x0ad0(r1) + b MPCall_74_0x20c + +MPCall_74_0x208 + bl PoolFree + +MPCall_74_0x20c + lwz r8, Area.ID(r31) + bl DeleteID + mr r8, r31 + bl PoolFree + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 75, MPCall_75 + +MPCall_75 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + lwz r16, 0x0020(r31) + rlwinm. r8, r16, 0, 16, 16 + bne+ ReleaseAndReturnMPCallOOM + lwz r18, 0x007c(r31) + lwz r17, Area.Length(r31) + and. r5, r5, r18 + and r17, r17, r18 + ble+ major_0x0b054 + subf. r27, r17, r5 + +; r1 = kdp + beq+ ReleaseAndReturnZeroFromMPCall + bgt- MPCall_75_0x1c8 + rlwinm. r8, r4, 0, 24, 24 + lwz r28, Area.LogicalBase(r31) + lwz r29, Area.LogicalBase2(r31) + bne- MPCall_75_0x74 + add r28, r27, r29 + addi r28, r28, 0x01 + b MPCall_75_0x7c + +MPCall_75_0x74 + subf r29, r27, r28 + addi r29, r29, -0x01 + +MPCall_75_0x7c + + _Lock PSA.PoolLock, scratch1=r14, scratch2=r15 + + + _Lock PSA.HTABLock, scratch1=r14, scratch2=r15 + + lwz r27, 0x0068(r31) + +MPCall_75_0xb0 + mr r8, r28 + bl MPCall_95_0x1e4 + beq+ Local_Panic + bl MPCall_95_0x2b0 + bns- cr7, MPCall_75_0xe0 + bltl- cr5, MPCall_95_0x2e0 + bltl- cr5, MPCall_95_0x348 + lwz r17, 0x0000(r30) + rlwinm r17, r17, 0, 0, 30 + rlwinm r8, r17, 0, 0, 19 + stw r17, 0x0000(r30) + +; r1 = kdp +; r8 = maybe the page + bl free_list_add_page + +MPCall_75_0xe0 + add r28, r28, r27 + cmplw r28, r29 + ble+ MPCall_75_0xb0 + rlwinm. r8, r4, 0, 24, 24 + lwz r28, Area.LogicalBase(r31) + beq- MPCall_75_0x138 + lwz r27, 0x0068(r31) + add r29, r29, r27 + +MPCall_75_0x100 + mr r8, r28 + bl MPCall_95_0x1e4 + beq+ Local_Panic + mr r26, r30 + mr r8, r29 + bl MPCall_95_0x1e4 + beq+ Local_Panic + lwz r17, 0x0000(r30) + stw r17, 0x0000(r26) + lwz r16, Area.LogicalBase2(r31) + add r28, r28, r27 + add r29, r29, r27 + cmplw r29, r16 + ble+ MPCall_75_0x100 + +MPCall_75_0x138 + sync + lwz r8, -0x0b90(r1) + cmpwi cr1, r8, 0x00 + li r8, 0x00 + bne+ cr1, MPCall_75_0x154 + mflr r8 + bl panic + +MPCall_75_0x154 + stw r8, -0x0b90(r1) + lwz r16, Area.TwoFiftySix(r31) + rlwinm. r8, r16, 0, 25, 25 + bne- MPCall_75_0x16c + rlwinm. r8, r16, 0, 27, 27 + bne- MPCall_75_0x16c + +MPCall_75_0x16c + sync + lwz r8, -0x0ad0(r1) + cmpwi cr1, r8, 0x00 + li r8, 0x00 + bne+ cr1, MPCall_75_0x188 + mflr r8 + bl panic + +MPCall_75_0x188 + stw r8, -0x0ad0(r1) + b MPCall_75_0x190 + +MPCall_75_0x190 + rlwinm. r8, r4, 0, 24, 24 + lwz r16, Area.LogicalBase(r31) + bne- MPCall_75_0x1b0 + add r17, r16, r5 + addi r17, r17, -0x01 + stw r5, Area.Length(r31) + stw r17, Area.LogicalBase2(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_75_0x1b0 + lwz r17, Area.LogicalBase2(r31) + subf r16, r5, r17 + stw r5, Area.Length(r31) + addi r16, r16, 0x01 + stw r16, Area.LogicalBase(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_75_0x1c8 + rlwinm. r8, r4, 0, 24, 24 + lwz r28, Area.LogicalBase(r31) + lwz r29, Area.LogicalBase2(r31) + bne+ ReleaseAndMPCallWasBad + add r28, r27, r29 + addi r28, r28, 0x01 + b MPCall_75_0x1ec + dc.l 0x7fbbe050 + dc.l 0x3bbdffff + +MPCall_75_0x1ec + b ReleaseAndMPCallWasBad + + + + DeclareMPCall 130, MPCall_130 + +MPCall_130 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lis r16, -0x01 + ori r16, r16, 0xfff8 + lwz r17, 0x0020(r31) + and. r16, r16, r4 + bne+ major_0x0b054 + rlwinm. r8, r17, 0, 16, 16 + bne+ major_0x0b054 + mr r29, r5 + lwz r18, 0x0134(r6) + lwz r19, 0x0068(r31) + lwz r16, Area.LogicalBase(r31) + cmplw r18, r19 + add r28, r18, r29 + bge+ major_0x0b054 + lwz r17, 0x007c(r31) + addi r28, r28, -0x01 + lwz r18, 0x0020(r31) + lwz r19, Area.LogicalBase2(r31) + cmplw cr1, r29, r16 + cmplw cr2, r28, r19 + blt+ cr1, major_0x0b054 + bgt+ cr2, major_0x0b054 + xor r8, r28, r29 + rlwinm. r8, r8, 0, 0, 19 + bne+ major_0x0b054 + + _Lock PSA.HTABLock, scratch1=r14, scratch2=r15 + + mr r8, r29 + bl MPCall_95_0x1e4 + sync + lwz r14, -0x0b90(r1) + cmpwi cr1, r14, 0x00 + li r14, 0x00 + bne+ cr1, MPCall_130_0xcc + mflr r14 + bl panic + +MPCall_130_0xcc + stw r14, -0x0b90(r1) + beq+ Local_Panic + rlwinm r8, r16, 0, 29, 30 + lwz r16, 0x0000(r30) + cmpwi cr7, r8, 0x04 + beq+ cr7, major_0x0b054 + lwz r16, 0x0098(r31) + +MPCall_130_0xe8 + addi r17, r31, 0x90 + cmpw r16, r17 + addi r17, r16, 0x14 + beq- MPCall_130_0x11c + lwz r8, 0x0010(r16) + cmplwi r8, 0x1f8 + add r9, r8, r17 + blt- MPCall_130_0x110 + lwz r16, 0x0008(r16) + b MPCall_130_0xe8 + +MPCall_130_0x110 + addi r8, r8, 0x08 + addi r9, r9, 0x08 + b MPCall_130_0x15c + +MPCall_130_0x11c + li r8, 0x214 + +; r1 = kdp +; r8 = size + bl PoolAlloc +; r8 = ptr + + mr. r16, r8 + beq+ major_0x0af60 + addi r18, r31, 0x90 + lis r17, 0x4645 + ori r17, r17, 0x4e43 + stw r17, 0x0004(r16) + stw r18, 0x0000(r16) + stw r18, 0x0008(r16) + lwz r19, 0x000c(r18) + stw r19, 0x000c(r16) + stw r16, 0x0008(r19) + stw r16, 0x000c(r18) + li r8, 0x00 + addi r9, r16, 0x14 + +MPCall_130_0x15c + stw r8, 0x0010(r16) + stw r29, 0x0000(r9) + stw r28, 0x0004(r9) + + _Lock PSA.HTABLock, scratch1=r14, scratch2=r15 + + mr r8, r29 + bl MPCall_95_0x1e4 + beq+ Local_Panic + bl MPCall_95_0x2b0 + bns- cr7, MPCall_130_0x19c + bltl- cr5, MPCall_95_0x2e0 + bltl- cr5, MPCall_95_0x348 + +MPCall_130_0x19c + lwz r17, 0x0000(r30) + li r16, 0x06 + rlwimi r17, r16, 0, 29, 30 + stw r17, 0x0000(r30) + sync + lwz r14, -0x0b90(r1) + cmpwi cr1, r14, 0x00 + li r14, 0x00 + bne+ cr1, MPCall_130_0x1c8 + mflr r14 + bl panic + +MPCall_130_0x1c8 + stw r14, -0x0b90(r1) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; KCSetAreaAccess + + + DeclareMPCall 76, KCSetAreaAccess + +KCSetAreaAccess ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lis r16, -0x01 + ori r16, r16, 0xff10 + and. r16, r16, r4 + bne+ major_0x0b054 + lis r16, -0x01 + ori r16, r16, 0xff10 + and. r16, r16, r5 + bne+ major_0x0b054 + lwz r29, 0x0134(r6) + lwz r18, 0x013c(r6) + lwz r16, Area.LogicalBase(r31) + add r28, r18, r29 + lwz r17, 0x007c(r31) + addi r28, r28, -0x01 + lwz r18, 0x0020(r31) + lwz r19, Area.LogicalBase2(r31) + rlwinm. r8, r18, 0, 16, 16 + cmplw cr1, r29, r16 + cmplw cr2, r28, r19 + blt+ cr1, major_0x0b054 + bgt+ cr2, major_0x0b054 + bne- KCSetAreaAccess_0x154 + + _Lock PSA.HTABLock, scratch1=r14, scratch2=r15 + + +KCSetAreaAccess_0x9c + mr r8, r29 + bl MPCall_95_0x1e4 + beq+ Local_Panic + bl MPCall_95_0x2b0 + bns- cr7, KCSetAreaAccess_0xb8 + bltl- cr5, MPCall_95_0x2e0 + bltl- cr5, MPCall_95_0x348 + +KCSetAreaAccess_0xb8 + lwz r17, 0x0000(r30) + bl major_0x10d38 + and r8, r4, r5 + orc r9, r4, r5 + or r18, r18, r8 + and r18, r18, r9 + lwz r17, 0x0000(r30) + rlwinm. r8, r18, 0, 26, 26 + bns- cr7, KCSetAreaAccess_0x118 + bgt- cr6, KCSetAreaAccess_0x118 + beq- KCSetAreaAccess_0x118 + rlwinm r9, r17, 0, 0, 19 + lwz r8, 0x0068(r31) + +KCSetAreaAccess_0xec + addi r8, r8, -0x20 + dcbf r8, r9 + cmpwi r8, 0x00 + bgt+ KCSetAreaAccess_0xec + sync + lwz r8, 0x0068(r31) + +KCSetAreaAccess_0x104 + addi r8, r8, -0x20 + icbi r8, r9 + cmpwi r8, 0x00 + bgt+ KCSetAreaAccess_0x104 + isync + +KCSetAreaAccess_0x118 + bl major_0x10cb8 + lwz r19, 0x0068(r31) + stw r17, 0x0000(r30) + add r29, r29, r19 + subf. r8, r29, r28 + bge+ KCSetAreaAccess_0x9c + sync + lwz r14, -0x0b90(r1) + cmpwi cr1, r14, 0x00 + li r14, 0x00 + bne+ cr1, KCSetAreaAccess_0x14c + mflr r14 + bl panic + +KCSetAreaAccess_0x14c + stw r14, -0x0b90(r1) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +KCSetAreaAccess_0x154 + bne+ cr1, major_0x0b054 + lwz r18, 0x001c(r31) + and r8, r4, r5 + orc r9, r4, r5 + or r18, r18, r8 + and r18, r18, r9 + stw r18, 0x001c(r31) + lwz r16, 0x0070(r31) + lwz r17, 0x0074(r31) + bl major_0x10cb8 + stw r16, 0x0070(r31) + stw r17, 0x0074(r31) + + _Lock PSA.HTABLock, scratch1=r14, scratch2=r15 + + lwz r27, 0x0068(r31) + mr r28, r19 + +KCSetAreaAccess_0x1a4 + mr r8, r29 + lwz r9, Area.AddressSpacePtr(r31) + bl MPCall_95_0x45c + beq- KCSetAreaAccess_0x1bc + bl MPCall_95_0x2e0 + bl MPCall_95_0x348 + +KCSetAreaAccess_0x1bc + add r29, r29, r27 + subf. r8, r29, r28 + bge+ KCSetAreaAccess_0x1a4 + sync + lwz r14, -0x0b90(r1) + cmpwi cr1, r14, 0x00 + li r14, 0x00 + bne+ cr1, KCSetAreaAccess_0x1e4 + mflr r14 + bl panic + +KCSetAreaAccess_0x1e4 + stw r14, -0x0b90(r1) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; major_0x10cb8 + +; Xrefs: +; createarea +; KCSetAreaAccess + +major_0x10cb8 ; OUTSIDE REFERER + rlwinm r16, r16, 0, 29, 24 + rlwinm r17, r17, 0, 27, 23 + rlwinm r16, r16, 0, 0, 29 + rlwinm r17, r17, 0, 31, 28 + mtcr r18 + bge- cr6, major_0x10cb8_0x20 + ori r17, r17, 0x80 + ori r16, r16, 0x08 + +major_0x10cb8_0x20 + ble- cr6, major_0x10cb8_0x2c + ori r16, r16, 0x40 + b major_0x10cb8_0x30 + +major_0x10cb8_0x2c + ori r17, r17, 0x20 + +major_0x10cb8_0x30 + bne- cr6, major_0x10cb8_0x3c + ori r17, r17, 0x40 + ori r16, r16, 0x20 + +major_0x10cb8_0x3c + ble- cr7, major_0x10cb8_0x40 + +major_0x10cb8_0x40 + bge- cr7, major_0x10cb8_0x50 + ori r17, r17, 0x06 + ori r16, r16, 0x01 + b major_0x10cb8_0x78 + +major_0x10cb8_0x50 + bne- cr7, major_0x10cb8_0x60 + ori r17, r17, 0x00 + ori r16, r16, 0x02 + b major_0x10cb8_0x78 + +major_0x10cb8_0x60 + bns- cr7, major_0x10cb8_0x70 + ori r17, r17, 0x04 + ori r16, r16, 0x03 + b major_0x10cb8_0x78 + +major_0x10cb8_0x70 + ori r17, r17, 0x02 + ori r16, r16, 0x00 + +major_0x10cb8_0x78 + ori r16, r16, 0x10 + blr + + + +; major_0x10d38 + +; Xrefs: +; convert_pmdts_to_areas +; KCSetAreaAccess +; MPCall_123 + +major_0x10d38 ; OUTSIDE REFERER + andi. r16, r17, 0x06 + li r18, 0x00 + cmpwi r16, 0x02 + cmpwi cr1, r16, 0x06 + beq- major_0x10d38_0x28 + li r18, 0x04 + andi. r16, r17, 0x04 + ori r18, r18, 0x01 + bne- major_0x10d38_0x28 + ori r18, r18, 0x02 + +major_0x10d38_0x28 + bne- cr1, major_0x10d38_0x30 + ori r18, r18, 0x08 + +major_0x10d38_0x30 + andi. r16, r17, 0x20 + bne- major_0x10d38_0x3c + ori r18, r18, 0x40 + +major_0x10d38_0x3c + andi. r16, r17, 0x40 + beq- major_0x10d38_0x48 + ori r18, r18, 0x20 + +major_0x10d38_0x48 + andi. r16, r17, 0x80 + beq- major_0x10d38_0x54 + ori r18, r18, 0x80 + +major_0x10d38_0x54 + blr + +major_0x10d38_0x58 ; OUTSIDE REFERER + andi. r16, r17, 0x03 + li r18, 0x04 + cmpwi cr1, r16, 0x01 + beq- major_0x10d38_0x78 + andi. r16, r17, 0x01 + ori r18, r18, 0x01 + bne- major_0x10d38_0x78 + ori r18, r18, 0x02 + +major_0x10d38_0x78 + bne- cr1, major_0x10d38_0x80 + ori r18, r18, 0x08 + +major_0x10d38_0x80 + andi. r16, r17, 0x40 + beq- major_0x10d38_0x8c + ori r18, r18, 0x40 + +major_0x10d38_0x8c + andi. r16, r17, 0x20 + beq- major_0x10d38_0x98 + ori r18, r18, 0x20 + +major_0x10d38_0x98 + andi. r16, r17, 0x08 + beq- major_0x10d38_0xa4 + ori r18, r18, 0x80 + +major_0x10d38_0xa4 + blr + + + + DeclareMPCall 123, MPCall_123 + +MPCall_123 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r16, Area.LogicalBase(r31) + lwz r17, Area.LogicalBase2(r31) + lwz r18, 0x0020(r31) + cmplw r4, r16 + cmplw cr1, r4, r17 + blt+ major_0x0b054 + bgt+ cr1, major_0x0b054 + rlwinm. r8, r18, 0, 16, 16 + lwz r5, 0x001c(r31) + +; r1 = kdp + bne+ ReleaseAndReturnZeroFromMPCall + + _Lock PSA.HTABLock, scratch1=r14, scratch2=r15 + + mr r8, r4 + bl MPCall_95_0x1e4 + beq+ Local_Panic + bl MPCall_95_0x2b0 + bltl- cr5, MPCall_95_0x2e0 + bltl- cr5, MPCall_95_0x348 + lwz r17, 0x0000(r30) + sync + lwz r14, -0x0b90(r1) + cmpwi cr1, r14, 0x00 + li r14, 0x00 + bne+ cr1, MPCall_123_0xa4 + mflr r14 + bl panic + +MPCall_123_0xa4 + stw r14, -0x0b90(r1) + bl major_0x10d38 + mr r5, r18 + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 77, MPCall_77 + +MPCall_77 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + mr. r8, r4 + beq- MPCall_77_0x40 + +; r8 = id + bl LookupID + cmpwi r9, Notification.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + +MPCall_77_0x40 + stw r4, 0x0018(r31) + stw r5, 0x0084(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 78, MPCall_78 + +MPCall_78 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + cmpwi r4, 0x01 + bne+ major_0x0b054 + cmplwi r5, 0x00 + bne- MPCall_78_0x68 + li r16, 0x01 + stw r16, 0x0134(r6) + lwz r16, Area.ProcessID(r31) + stw r16, 0x013c(r6) + lwz r16, Area.AddressSpaceID(r31) + stw r16, 0x0144(r6) + lwz r16, 0x0014(r31) + stw r16, 0x014c(r6) + li r16, 0x10 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_78_0x68 + cmplwi r5, 0x10 + bne- MPCall_78_0x9c + lwz r16, 0x0018(r31) + stw r16, 0x0134(r6) + lwz r16, 0x001c(r31) + stw r16, 0x013c(r6) + lwz r16, 0x0020(r31) + stw r16, 0x0144(r6) + lwz r16, Area.LogicalBase(r31) + stw r16, 0x014c(r6) + li r16, 0x10 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_78_0x9c + cmplwi r5, 0x20 + bne- MPCall_78_0xd0 + lwz r16, Area.Length(r31) + stw r16, 0x0134(r6) + lwz r16, Area.Zero(r31) + stw r16, 0x013c(r6) + lwz r16, 0x0034(r31) + stw r16, 0x0144(r6) + lwz r16, Area.Length2(r31) + stw r16, 0x014c(r6) + li r16, 0x10 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_78_0xd0 + cmplwi r5, 0x30 + bne- MPCall_78_0xfc + lwz r16, 0x0068(r31) + stw r16, 0x0134(r6) + lwz r16, 0x0080(r31) + stw r16, 0x013c(r6) + lwz r16, 0x0084(r31) + stw r16, 0x0144(r6) + li r16, 0x0c + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_78_0xfc + cmpwi r5, 0x3c + bne+ major_0x0b054 + li r16, 0x00 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 79, MPCall_79 + +MPCall_79 ; OUTSIDE REFERER + mr. r8, r3 + mfsprg r28, 0 + lwz r31, EWA.PA_CurAddressSpace(r28) + beq- MPCall_79_0x20 + +; r8 = id + bl LookupID + cmpwi r9, AddressSpace.kIDClass + + bne+ ReturnMPCallInvalidIDErr + mr r31, r8 + +MPCall_79_0x20 + lwz r3, Area.ID(r31) + +MPCall_79_0x24 + mr r8, r4 + li r9, 0x0b + bl GetNextIDOfClass + cmpwi r8, 0x00 + beq+ ReturnMPCallInvalidIDErr + mr r4, r8 + +; r8 = id + bl LookupID +; r8 = something not sure what +; r9 = 0:inval, 1:proc, 2:task, 3:timer, 4:q, 5:sema, 6:cr, 7:cpu, 8:addrspc, 9:evtg, 10:cgrp, 11:area, 12:not, 13:log + + lwz r16, 0x0010(r8) + cmpw r16, r3 + bne+ MPCall_79_0x24 + b ReturnZeroFromMPCall + + + + DeclareMPCall 80, MPCall_80 + +MPCall_80 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr. r8, r3 + mfsprg r9, 0 + bne- MPCall_80_0x2c + lwz r8, EWA.PA_CurAddressSpace(r9) + b MPCall_80_0x38 + +MPCall_80_0x2c +; r8 = id + bl LookupID + cmpwi r9, AddressSpace.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + +MPCall_80_0x38 + mr r9, r4 + bl FindAreaAbove + lwz r16, 0x0024(r8) + li r5, 0x00 + cmplw r16, r4 + bgt+ major_0x0b054 + lwz r5, 0x0000(r8) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 125, MPCall_125 + +MPCall_125 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr. r8, r3 + mfsprg r9, 0 + bne- MPCall_125_0x2c + lwz r8, EWA.PA_CurAddressSpace(r9) + b MPCall_125_0x38 + +MPCall_125_0x2c +; r8 = id + bl LookupID + cmpwi r9, AddressSpace.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + +MPCall_125_0x38 + mr r9, r4 + bl FindAreaAbove + lwz r16, 0x0024(r8) + li r5, 0x00 + cmplw r16, r4 + bgt- MPCall_125_0x58 + lwz r8, 0x005c(r8) + addi r8, r8, -0x54 + +MPCall_125_0x58 + lwz r9, 0x002c(r8) + cmpwi r9, noErr + beq+ major_0x0b054 + lwz r5, 0x0000(r8) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 81, MPCall_81 + +MPCall_81 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + lwz r16, Area.LogicalBase(r31) + lwz r17, Area.LogicalBase2(r31) + lwz r18, 0x0020(r31) + cmplw r4, r16 + cmplw cr1, r4, r17 + blt+ major_0x0b054 + bgt+ cr1, major_0x0b054 + rlwinm. r8, r18, 0, 16, 16 + lwz r19, 0x0070(r31) + beq- MPCall_81_0x70 + lwz r17, Area.Length2(r31) + rlwinm r19, r19, 0, 0, 19 + cmpwi r17, 0x00 + subf r18, r16, r4 + beq+ major_0x0b054 + add r5, r18, r19 + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_81_0x70 + li r3, 0x00 + + _Lock PSA.HTABLock, scratch1=r14, scratch2=r15 + + mr r8, r4 + bl MPCall_95_0x1e4 + bl MPCall_95_0x2b0 + bns- cr7, MPCall_81_0xc8 + mr r5, r17 + rlwimi r5, r4, 0, 20, 31 + +MPCall_81_0xa4 + sync + lwz r8, -0x0b90(r1) + cmpwi cr1, r8, 0x00 + li r8, 0x00 + bne+ cr1, MPCall_81_0xc0 + mflr r8 + bl panic + +MPCall_81_0xc0 + stw r8, -0x0b90(r1) + b ReleaseAndReturnMPCall + +MPCall_81_0xc8 + li r3, -0x7272 + b MPCall_81_0xa4 + + + + DeclareMPCall 98, MPCall_98 + +MPCall_98 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + lwz r16, Area.LogicalBase(r31) + lwz r17, Area.LogicalBase2(r31) + mr r29, r5 + add r5, r5, r4 + lwz r18, 0x0020(r31) + addi r5, r5, -0x01 + cmplw r4, r16 + cmplw cr1, r5, r17 + blt+ major_0x0b054 + bgt+ cr1, major_0x0b054 + lwz r20, Area.Length2(r31) + rlwinm. r8, r18, 0, 16, 16 + cmpwi cr1, r20, 0x00 + beq- MPCall_98_0x84 + beq+ cr1, major_0x0b054 + lwz r19, 0x0070(r31) + subf r18, r16, r4 + rlwinm r19, r19, 0, 0, 19 + add r16, r18, r19 + stw r16, 0x0134(r6) + stw r29, 0x013c(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_98_0x84 + + _Lock PSA.HTABLock, scratch1=r14, scratch2=r15 + + mr r8, r4 + mr r28, r4 + bl MPCall_95_0x1e4 + beq+ Local_Panic + bl MPCall_95_0x2b0 + crclr cr3_eq + li r3, 0x00 + bso- cr7, MPCall_98_0xc4 + crset cr3_eq + li r3, -0x7272 + +MPCall_98_0xc4 + rlwimi r17, r4, 0, 20, 31 + rlwinm r29, r17, 0, 0, 19 + stw r17, 0x0134(r6) + +MPCall_98_0xd0 + lwz r16, 0x0068(r31) + add r28, r28, r16 + add r29, r29, r16 + cmplw cr2, r28, r5 + bgt- cr2, MPCall_98_0x140 + mr r8, r28 + bl MPCall_95_0x1e4 + beq+ Local_Panic + bl MPCall_95_0x2b0 + rlwinm r17, r17, 0, 0, 19 + crxor 31, 31, 14 + bns- cr7, MPCall_98_0x10c + beq+ cr3, MPCall_98_0xd0 + cmplw r29, r17 + beq+ MPCall_98_0xd0 + +MPCall_98_0x10c + lwz r16, 0x007c(r31) + and r28, r28, r16 + subf r16, r4, r28 + +MPCall_98_0x118 + stw r16, 0x013c(r6) + sync + lwz r8, -0x0b90(r1) + cmpwi cr1, r8, 0x00 + li r8, 0x00 + bne+ cr1, MPCall_98_0x138 + mflr r8 + bl panic + +MPCall_98_0x138 + stw r8, -0x0b90(r1) + b ReleaseAndReturnMPCall + +MPCall_98_0x140 + addi r5, r5, 0x01 + beq- cr3, MPCall_98_0x170 + mr r8, r28 + bl MPCall_95_0x1e4 + beq+ Local_Panic + bl MPCall_95_0x2b0 + rlwinm r17, r17, 0, 0, 19 + bns- cr7, MPCall_98_0x170 + cmplw r29, r17 + bne- MPCall_98_0x170 + subf r16, r4, r5 + b MPCall_98_0x118 + +MPCall_98_0x170 + lwz r16, 0x007c(r31) + and r28, r28, r16 + cmplw r5, r28 + bge- MPCall_98_0x184 + mr r28, r5 + +MPCall_98_0x184 + subf r16, r4, r28 + b MPCall_98_0x118 + + + + DeclareMPCall 82, MPCall_82 + +MPCall_82 ; OUTSIDE REFERER + lwz r8, -0x0420(r1) + cmpwi r8, 0x00 + bne+ ReturnMPCallOOM + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Notification.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + stw r3, -0x0420(r1) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; MPCall_83 + +; Xrefs: +; kcMPDispatch +; KCMapPage + + DeclareMPCall 83, MPCall_83 + +MPCall_83 ; OUTSIDE REFERER + + _Lock PSA.PoolLock, scratch1=r16, scratch2=r17 + + bl MPCall_83_0x90 + sync + lwz r16, -0x0ad0(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, MPCall_83_0x38 + mflr r16 + bl panic + +MPCall_83_0x38 + stw r16, -0x0ad0(r1) + mr. r4, r8 + bne+ ReturnZeroFromMPCall + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + +MPCall_83_0x5c ; OUTSIDE REFERER + lwz r8, -0x0420(r1) + +; r8 = id + bl LookupID + cmpwi r9, Notification.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallOOM + lwz r8, 0x001c(r31) + +; r8 = id + bl LookupID + cmpwi r9, EventGroup.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallOOM + lwz r8, 0x0020(r31) + bl major_0x0d35c + b ReleaseAndReturnMPCallOOM + +MPCall_83_0x90 ; OUTSIDE REFERER + addi r18, r1, -0x450 + lwz r8, -0x0448(r1) + cmpw r8, r18 + beq- MPCall_83_0xec + lwz r16, 0x0008(r8) + lwz r17, 0x000c(r8) + stw r16, 0x0008(r17) + stw r17, 0x000c(r16) + li r16, 0x00 + stw r16, 0x0008(r8) + stw r16, 0x000c(r8) + lwz r16, -0x0430(r1) + addi r16, r16, -0x01 + stw r16, -0x0430(r1) + lwz r17, 0x0004(r8) + mfspr r16, dec + eqv. r17, r18, r17 + stw r16, 0x0000(r8) + bne+ Local_Panic + stw r16, 0x0004(r8) + stw r16, 0x0008(r8) + stw r16, 0x000c(r8) + blr + +MPCall_83_0xec + li r8, 0x00 + blr + + + + DeclareMPCall 84, MPCall_84 + +MPCall_84 ; OUTSIDE REFERER + + _Lock PSA.PoolLock, scratch1=r16, scratch2=r17 + + lwz r16, 0x0004(r3) + lwz r17, 0x0000(r3) + addi r18, r1, -0x450 + eqv. r16, r16, r17 + cmpw cr1, r17, r18 + bne- MPCall_84_0x3c + bne- cr1, MPCall_84_0x3c + li r3, -0x32 + b MPCall_84_0x48 + +MPCall_84_0x3c + mr r8, r3 + +; r1 = kdp +; r8 = maybe the page + bl free_list_add_page + li r3, 0x00 + +MPCall_84_0x48 + sync + lwz r16, -0x0ad0(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, MPCall_84_0x64 + mflr r16 + bl panic + +MPCall_84_0x64 + stw r16, -0x0ad0(r1) + b CommonMPCallReturnPath + + + +; free_list_add_page + +; Xrefs: +; setup +; MPCall_74 +; MPCall_75 +; MPCall_84 +; KCUnmapPages + +; > r1 = kdp +; > r8 = maybe the page + +free_list_add_page ; OUTSIDE REFERER + + ; Must be an actual page-aligned address + clrlwi. r9, r8, 20 + addi r9, r1, PSA.FreeList + bne+ Local_Panic + + + ; This is probably an alternative to heavyweight locks around the free list + + stw r9, 0(r8) ; store &parent in Freeform field + + InsertAsPrev r8, r9, scratch=r16 + + not r9, r9 + stw r9, 4(r8) ; store ^&parent in Signature field + + + lwz r8, PSA.FreePageCount(r1) + addi r8, r8, 1 + stw r8, PSA.FreePageCount(r1) + + blr + + + +; KCGetFreePageCount + + + DeclareMPCall 100, KCGetFreePageCount + +KCGetFreePageCount ; OUTSIDE REFERER + lwz r3, PSA.FreePageCount(r1) + b CommonMPCallReturnPath + + + +; KCGetUnheldFreePageCount + + + DeclareMPCall 101, KCGetUnheldFreePageCount + +KCGetUnheldFreePageCount ; OUTSIDE REFERER + lwz r3, PSA.UnheldFreePageCount(r1) + b CommonMPCallReturnPath + + + +; KCMapPage + + + DeclareMPCall 85, KCMapPage + +KCMapPage ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r16, Area.TwoFiftySix(r31) + rlwinm. r8, r16, 0, 28, 28 + bne+ major_0x0b054 + lwz r16, Area.LogicalBase(r31) + lwz r17, Area.LogicalBase2(r31) + lwz r19, 0x0020(r31) + cmplw r4, r16 + cmplw cr1, r4, r17 + blt+ major_0x0b054 + bgt+ cr1, major_0x0b054 + rlwinm. r8, r19, 0, 16, 16 + cmplw cr1, r4, r16 + lwz r20, Area.Length2(r31) + beq- KCMapPage_0x8c + bne+ cr1, major_0x0b054 + cmpwi r20, 0x00 + lwz r8, 0x0070(r31) + bne+ ReleaseAndReturnMPCallOOM + rlwimi r8, r5, 0, 0, 19 + lwz r18, 0x007c(r31) + lwz r20, Area.Length(r31) + stw r8, 0x0070(r31) + stw r20, Area.Length2(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +KCMapPage_0x8c + + _Lock PSA.HTABLock, scratch1=r14, scratch2=r15 + + mr r8, r4 + bl MPCall_95_0x1e4 + beq+ Local_Panic + lwz r29, 0x0000(r30) + sync + lwz r14, -0x0b90(r1) + cmpwi cr1, r14, 0x00 + li r14, 0x00 + bne+ cr1, KCMapPage_0xd0 + mflr r14 + bl panic + +KCMapPage_0xd0 + stw r14, -0x0b90(r1) + clrlwi. r8, r29, 0x1f + bne+ ReleaseAndReturnMPCallOOM + lwz r17, 0x0134(r6) + rlwinm. r8, r17, 0, 30, 30 + bne- KCMapPage_0x12c + + _Lock PSA.PoolLock, scratch1=r16, scratch2=r17 + + bl MPCall_83_0x90 + sync + lwz r16, -0x0ad0(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, KCMapPage_0x120 + mflr r16 + bl panic + +KCMapPage_0x120 + stw r16, -0x0ad0(r1) + mr. r5, r8 + beq+ MPCall_83_0x5c + +KCMapPage_0x12c + lwz r17, 0x0134(r6) + rlwinm. r8, r17, 0, 29, 29 + beq- KCMapPage_0x17c + rlwinm. r8, r29, 0, 25, 25 + lwz r18, 0x0068(r31) + +KCMapPage_0x140 + addi r18, r18, -0x20 + bne- KCMapPage_0x174 + dcbst r18, r5 + +KCMapPage_0x14c + cmpwi cr1, r18, 0x00 + bgt+ cr1, KCMapPage_0x140 + sync + lwz r18, 0x0068(r31) + +KCMapPage_0x15c + addi r18, r18, -0x20 + icbi r18, r5 + cmpwi cr1, r18, 0x00 + bgt+ cr1, KCMapPage_0x15c + isync + b KCMapPage_0x17c + +KCMapPage_0x174 + dcbf r18, r5 + b KCMapPage_0x14c + +KCMapPage_0x17c + lwz r18, 0x0068(r31) + andi. r29, r29, 0x7e7 + ori r29, r29, 0x01 + rlwimi r29, r5, 0, 0, 19 + lwz r17, Area.Length2(r31) + stw r29, 0x0000(r30) + add r17, r17, r18 + stw r17, Area.Length2(r31) + lwz r17, 0x0134(r6) + clrlwi. r8, r17, 0x1f + +; r1 = kdp + beq+ ReleaseAndReturnZeroFromMPCall + lwz r5, 0x0068(r31) + b KCHoldPages_0x2c + + + +; KCUnmapPages + + + DeclareMPCall 86, KCUnmapPages + +KCUnmapPages ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r8, 0x0134(r6) + lwz r16, Area.TwoFiftySix(r31) + rlwinm. r16, r16, 0, 28, 28 + bne+ major_0x0b054 + clrlwi. r8, r8, 0x1f + add r5, r5, r4 + lwz r16, Area.LogicalBase(r31) + lwz r17, Area.LogicalBase2(r31) + lwz r19, 0x0020(r31) + crmove 14, 2 + addi r5, r5, -0x01 + cmplw r4, r16 + cmplw cr1, r5, r17 + blt+ major_0x0b054 + bgt+ cr1, major_0x0b054 + lwz r29, 0x0068(r31) + lwz r20, Area.Length2(r31) + rlwinm. r8, r19, 0, 16, 16 + cmplw cr1, r4, r16 + beq- KCUnmapPages_0xd8 + bne+ cr1, major_0x0b054 + cmpwi r20, 0x00 + li r20, 0x00 + ble+ ReleaseAndReturnMPCallOOM + stw r20, Area.Length2(r31) + + _Lock PSA.HTABLock, scratch1=r14, scratch2=r15 + + li r30, 0x00 + +KCUnmapPages_0xac + mr r8, r4 + lwz r9, Area.AddressSpacePtr(r31) + bl MPCall_95_0x45c + beq- KCUnmapPages_0xc4 + bl MPCall_95_0x2e0 + bl MPCall_95_0x348 + +KCUnmapPages_0xc4 + add r4, r4, r29 + subf. r8, r4, r5 + bge+ KCUnmapPages_0xac + crclr cr3_eq + b KCUnmapPages_0x158 + +KCUnmapPages_0xd8 + bne- cr3, KCUnmapPages_0xf4 + + _Lock PSA.PoolLock, scratch1=r14, scratch2=r15 + + +KCUnmapPages_0xf4 + + _Lock PSA.HTABLock, scratch1=r14, scratch2=r15 + + lwz r28, Area.Length2(r31) + +KCUnmapPages_0x110 + mr r8, r4 + bl MPCall_95_0x1e4 + beq+ Local_Panic + bl MPCall_95_0x2b0 + bns- cr7, KCUnmapPages_0x148 + bltl- cr5, MPCall_95_0x2e0 + bltl- cr5, MPCall_95_0x348 + lwz r18, 0x0000(r30) + subf r28, r29, r28 + rlwinm r18, r18, 0, 0, 30 + stw r18, 0x0000(r30) + bne- cr3, KCUnmapPages_0x148 + rlwinm r8, r18, 0, 0, 19 + +; r1 = kdp +; r8 = maybe the page + bl free_list_add_page + +KCUnmapPages_0x148 + add r4, r4, r29 + subf. r8, r4, r5 + bge+ KCUnmapPages_0x110 + stw r28, Area.Length2(r31) + +KCUnmapPages_0x158 + sync + lwz r14, -0x0b90(r1) + cmpwi cr1, r14, 0x00 + li r14, 0x00 + bne+ cr1, KCUnmapPages_0x174 + mflr r14 + bl panic + +KCUnmapPages_0x174 + stw r14, -0x0b90(r1) + +; r1 = kdp + bne+ cr3, ReleaseAndReturnZeroFromMPCall + sync + lwz r14, -0x0ad0(r1) + cmpwi cr1, r14, 0x00 + li r14, 0x00 + bne+ cr1, KCUnmapPages_0x198 + mflr r14 + bl panic + +KCUnmapPages_0x198 + stw r14, -0x0ad0(r1) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; KCMakePhysicallyContiguous + + + DeclareMPCall 127, KCMakePhysicallyContiguous + +KCMakePhysicallyContiguous ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + mr r27, r5 + add r5, r5, r4 + lwz r16, Area.LogicalBase(r31) + lwz r17, Area.LogicalBase2(r31) + addi r5, r5, -0x01 + cmplw r4, r16 + cmplw cr1, r5, r17 + blt+ major_0x0b054 + bgt+ cr1, major_0x0b054 + lwz r19, 0x0020(r31) + lwz r29, 0x0068(r31) + rlwinm. r8, r19, 0, 16, 16 + bne+ major_0x0b054 + + _Lock PSA.HTABLock, scratch1=r14, scratch2=r15 + + mr r27, r4 + li r28, -0x01 + +NKMakePhysicallyContiguous_0x80 + mr r8, r27 + bl MPCall_95_0x1e4 + beq+ Local_Panic + bl MPCall_95_0x2b0 + bns- cr7, NKMakePhysicallyContiguous_0x150 + rlwinm r8, r17, 0, 0, 19 + cmpwi r28, -0x01 + cmpw cr1, r28, r8 + mr r28, r8 + beq- NKMakePhysicallyContiguous_0xac + bne- cr1, NKMakePhysicallyContiguous_0xe0 + +NKMakePhysicallyContiguous_0xac + add r27, r27, r29 + add r28, r28, r29 + subf. r8, r27, r5 + bge+ NKMakePhysicallyContiguous_0x80 + sync + lwz r14, -0x0b90(r1) + cmpwi cr1, r14, 0x00 + li r14, 0x00 + bne+ cr1, NKMakePhysicallyContiguous_0xd8 + mflr r14 + bl panic + +NKMakePhysicallyContiguous_0xd8 + stw r14, -0x0b90(r1) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +NKMakePhysicallyContiguous_0xe0 + sync + lwz r14, -0x0b90(r1) + cmpwi cr1, r14, 0x00 + li r14, 0x00 + bne+ cr1, NKMakePhysicallyContiguous_0xfc + mflr r14 + bl panic + +NKMakePhysicallyContiguous_0xfc + stw r14, -0x0b90(r1) + + _Lock PSA.PoolLock, scratch1=r16, scratch2=r17 + + addi r18, r1, -0x450 + lwz r8, -0x0448(r1) + cmpw r8, r18 + beq- NKMakePhysicallyContiguous_0x174 + b NKMakePhysicallyContiguous_0x174 + dc.l 0x7c0004ac ; probably dead code, not a jump table + dc.l 0x8201f530 + dc.l 0x2c900000 + dc.l 0x3a000000 + dc.l 0x40a6000c + dc.l 0x7e0802a6 + dc.l 0x48005905 + dc.l 0x9201f530 + dc.l 0x4bff9554 + +NKMakePhysicallyContiguous_0x150 + sync + lwz r16, -0x0b90(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, NKMakePhysicallyContiguous_0x16c + mflr r16 + bl panic + +NKMakePhysicallyContiguous_0x16c + stw r16, -0x0b90(r1) + b ReleaseAndReturnMPCallOOM + +NKMakePhysicallyContiguous_0x174 + sync + lwz r16, -0x0ad0(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, NKMakePhysicallyContiguous_0x190 + mflr r16 + bl panic + +NKMakePhysicallyContiguous_0x190 + stw r16, -0x0ad0(r1) + b ReleaseAndReturnMPCallOOM + + + +; KCLockPages + + + DeclareMPCall 87, KCLockPages + +KCLockPages ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + mr r27, r5 + add r5, r5, r4 + lwz r16, Area.LogicalBase(r31) + lwz r17, Area.LogicalBase2(r31) + addi r5, r5, -0x01 + cmplw r4, r16 + cmplw cr1, r5, r17 + blt+ major_0x0b054 + bgt+ cr1, major_0x0b054 + lwz r19, 0x0020(r31) + lwz r29, 0x0068(r31) + rlwinm. r8, r19, 0, 16, 16 + bne+ major_0x0b054 + mr r27, r4 + li r28, 0x00 + +KCLockPages_0x68 + mr r8, r27 + bl MPCall_95_0x254 + beq+ major_0x0b054 + lhz r18, 0x0000(r30) + rlwinm r17, r18, 24, 25, 31 + rlwinm. r8, r18, 0, 16, 16 + cmpwi cr1, r17, 0x7f + addi r28, r28, 0x01 + beq- KCLockPages_0x94 + addi r28, r28, -0x01 + bge+ cr1, major_0x0b0cc + +KCLockPages_0x94 + add r27, r27, r29 + subf. r8, r27, r5 + bge+ KCLockPages_0x68 + + _Lock PSA.PoolLock, scratch1=r16, scratch2=r17 + + lwz r16, PSA.UnheldFreePageCount(r1) + subf. r16, r28, r16 + ble- KCLockPages_0xc8 + stw r16, PSA.UnheldFreePageCount(r1) + +KCLockPages_0xc8 + sync + lwz r16, -0x0ad0(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, KCLockPages_0xe4 + mflr r16 + bl panic + +KCLockPages_0xe4 + stw r16, -0x0ad0(r1) + ble+ ReleaseAndReturnMPCallOOM + mr r27, r4 + +KCLockPages_0xf0 + mr r8, r27 + bl MPCall_95_0x254 + beq+ Local_Panic + lhz r18, 0x0000(r30) + rlwinm. r17, r18, 0, 16, 16 + bne- KCLockPages_0x10c + li r18, -0x8000 + +KCLockPages_0x10c + rlwinm r17, r18, 24, 25, 31 + addi r17, r17, 0x01 + rlwimi r18, r17, 8, 17, 23 + sth r18, 0x0000(r30) + add r27, r27, r29 + subf. r8, r27, r5 + bge+ KCLockPages_0xf0 + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; KCUnlockPages + + + DeclareMPCall 88, KCUnlockPages + +KCUnlockPages ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + add r5, r5, r4 + lwz r16, Area.LogicalBase(r31) + lwz r17, Area.LogicalBase2(r31) + addi r5, r5, -0x01 + cmplw r4, r16 + cmplw cr1, r5, r17 + blt+ major_0x0b054 + bgt+ cr1, major_0x0b054 + lwz r19, 0x0020(r31) + lwz r29, 0x0068(r31) + rlwinm. r8, r19, 0, 16, 16 + bne+ major_0x0b054 + mr r27, r4 + +KCUnlockPages_0x60 + mr r8, r27 + bl MPCall_95_0x254 + beq+ major_0x0b054 + lhz r18, 0x0000(r30) + rlwinm r17, r18, 24, 25, 31 + rlwinm. r8, r18, 0, 16, 16 + cmpwi cr1, r17, 0x00 + beq+ major_0x0b0cc + addi r28, r28, 0x01 + beq+ cr1, major_0x0b0cc + add r27, r27, r29 + subf. r8, r27, r5 + bge+ KCUnlockPages_0x60 + li r28, 0x00 + +KCUnlockPages_0x98 + mr r8, r4 + bl MPCall_95_0x254 + beq+ major_0x0b054 + lhz r18, 0x0000(r30) + rlwinm r17, r18, 24, 25, 31 + addi r17, r17, -0x01 + rlwimi r18, r17, 8, 17, 23 + clrlwi. r8, r18, 0x11 + bne- KCUnlockPages_0xc4 + rlwinm r18, r18, 0, 17, 15 + addi r28, r28, 0x01 + +KCUnlockPages_0xc4 + sth r18, 0x0000(r30) + add r4, r4, r29 + subf. r8, r4, r5 + bge+ KCUnlockPages_0x98 + + _Lock PSA.PoolLock, scratch1=r16, scratch2=r17 + + lwz r16, PSA.UnheldFreePageCount(r1) + add r16, r16, r28 + stw r16, PSA.UnheldFreePageCount(r1) + sync + lwz r16, -0x0ad0(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, KCUnlockPages_0x114 + mflr r16 + bl panic + +KCUnlockPages_0x114 + stw r16, -0x0ad0(r1) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; KCHoldPages + + +; Xrefs: +; kcMPDispatch +; KCMapPage + + DeclareMPCall 89, KCHoldPages + +KCHoldPages ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + +KCHoldPages_0x2c ; OUTSIDE REFERER + add r5, r5, r4 + lwz r16, Area.LogicalBase(r31) + lwz r17, Area.LogicalBase2(r31) + addi r5, r5, -0x01 + cmplw r4, r16 + cmplw cr1, r5, r17 + blt+ major_0x0b054 + bgt+ cr1, major_0x0b054 + lwz r19, 0x0020(r31) + lwz r29, 0x0068(r31) + rlwinm. r8, r19, 0, 16, 16 + bne+ major_0x0b054 + mr r27, r4 + li r28, 0x00 + +KCHoldPages_0x64 + mr r8, r27 + bl MPCall_95_0x254 + beq+ major_0x0b054 + lhz r18, 0x0000(r30) + clrlwi r17, r18, 0x18 + rlwinm. r8, r18, 0, 16, 16 + cmpwi cr1, r17, 0xff + addi r28, r28, 0x01 + beq- KCHoldPages_0x90 + addi r28, r28, -0x01 + bge+ cr1, major_0x0b0cc + +KCHoldPages_0x90 + add r27, r27, r29 + subf. r8, r27, r5 + bge+ KCHoldPages_0x64 + + _Lock PSA.PoolLock, scratch1=r16, scratch2=r17 + + lwz r16, PSA.UnheldFreePageCount(r1) + subf. r16, r28, r16 + ble- KCHoldPages_0xc4 + stw r16, PSA.UnheldFreePageCount(r1) + +KCHoldPages_0xc4 + sync + lwz r16, -0x0ad0(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, KCHoldPages_0xe0 + mflr r16 + bl panic + +KCHoldPages_0xe0 + stw r16, -0x0ad0(r1) + ble+ ReleaseAndReturnMPCallOOM + mr r27, r4 + +KCHoldPages_0xec + mr r8, r27 + bl MPCall_95_0x254 + beq+ Local_Panic + lhz r18, 0x0000(r30) + rlwinm. r17, r18, 0, 16, 16 + bne- KCHoldPages_0x108 + li r18, -0x8000 + +KCHoldPages_0x108 + clrlwi r17, r18, 0x18 + addi r17, r17, 0x01 + rlwimi r18, r17, 0, 24, 31 + sth r18, 0x0000(r30) + add r27, r27, r29 + subf. r8, r27, r5 + bge+ KCHoldPages_0xec + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; KCUnholdPages + + + DeclareMPCall 90, KCUnholdPages + +KCUnholdPages ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + add r5, r5, r4 + lwz r16, Area.LogicalBase(r31) + lwz r17, Area.LogicalBase2(r31) + addi r5, r5, -0x01 + cmplw r4, r16 + cmplw cr1, r5, r17 + blt+ major_0x0b054 + bgt+ cr1, major_0x0b054 + lwz r19, 0x0020(r31) + lwz r29, 0x0068(r31) + rlwinm. r8, r19, 0, 16, 16 + bne+ major_0x0b054 + mr r27, r4 + +KCUnholdPages_0x60 + mr r8, r27 + bl MPCall_95_0x254 + beq+ major_0x0b054 + lhz r18, 0x0000(r30) + clrlwi r17, r18, 0x18 + rlwinm. r8, r18, 0, 16, 16 + cmpwi cr1, r17, 0x00 + beq+ major_0x0b0cc + addi r28, r28, 0x01 + beq+ cr1, major_0x0b0cc + add r27, r27, r29 + subf. r8, r27, r5 + bge+ KCUnholdPages_0x60 + li r28, 0x00 + +KCUnholdPages_0x98 + mr r8, r4 + bl MPCall_95_0x254 + beq+ major_0x0b054 + lhz r18, 0x0000(r30) + clrlwi r17, r18, 0x18 + addi r17, r17, -0x01 + rlwimi r18, r17, 0, 24, 31 + clrlwi. r8, r18, 0x11 + bne- KCUnholdPages_0xc4 + rlwinm r18, r18, 0, 17, 15 + addi r28, r28, 0x01 + +KCUnholdPages_0xc4 + sth r18, 0x0000(r30) + add r4, r4, r29 + subf. r8, r4, r5 + bge+ KCUnholdPages_0x98 + + _Lock PSA.PoolLock, scratch1=r16, scratch2=r17 + + lwz r16, PSA.UnheldFreePageCount(r1) + add r16, r16, r28 + stw r16, PSA.UnheldFreePageCount(r1) + sync + lwz r16, -0x0ad0(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, KCUnholdPages_0x114 + mflr r16 + bl panic + +KCUnholdPages_0x114 + stw r16, -0x0ad0(r1) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 91, MPCall_91 + +MPCall_91 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r16, Area.LogicalBase(r31) + lwz r17, Area.LogicalBase2(r31) + cmplw r4, r16 + cmplw cr1, r4, r17 + blt+ major_0x0b054 + bgt+ cr1, major_0x0b054 + + _Lock PSA.HTABLock, scratch1=r14, scratch2=r15 + + mr r8, r4 + bl MPCall_95_0x1e4 + beq- MPCall_91_0xcc + bl MPCall_95_0x2b0 + bltl- cr5, MPCall_95_0x2e0 + bltl- cr5, MPCall_95_0x348 + lwz r29, 0x0000(r30) + sync + lwz r14, -0x0b90(r1) + cmpwi cr1, r14, 0x00 + li r14, 0x00 + bne+ cr1, MPCall_91_0x94 + mflr r14 + bl panic + +MPCall_91_0x94 + stw r14, -0x0b90(r1) + mr r8, r4 + bl MPCall_95_0x254 + li r19, 0x00 + beq- MPCall_91_0xac + lhz r19, 0x0000(r30) + +MPCall_91_0xac + andi. r5, r29, 0x319 + rlwinm. r8, r19, 0, 16, 16 + rlwimi r5, r19, 0, 16, 16 + +; r1 = kdp + beq+ ReleaseAndReturnZeroFromMPCall + rlwinm. r8, r19, 0, 17, 23 + +; r1 = kdp + beq+ ReleaseAndReturnZeroFromMPCall + ori r5, r5, 0x4000 + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_91_0xcc + sync + lwz r14, -0x0b90(r1) + cmpwi cr1, r14, 0x00 + li r14, 0x00 + bne+ cr1, MPCall_91_0xe8 + mflr r14 + bl panic + +MPCall_91_0xe8 + stw r14, -0x0b90(r1) + b ReleaseAndReturnMPCallOOM + + + + DeclareMPCall 92, MPCall_92 + +MPCall_92 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r16, Area.TwoFiftySix(r31) + rlwinm. r8, r16, 0, 28, 28 + bne+ major_0x0b054 + lwz r29, 0x0134(r6) + li r8, 0x318 + andc. r9, r5, r8 + bne+ major_0x0b054 + andc. r9, r29, r8 + bne+ major_0x0b054 + lwz r16, Area.LogicalBase(r31) + lwz r17, Area.LogicalBase2(r31) + cmplw r4, r16 + cmplw cr1, r4, r17 + blt+ major_0x0b054 + bgt+ cr1, major_0x0b054 + + _Lock PSA.HTABLock, scratch1=r14, scratch2=r15 + + mr r8, r4 + bl MPCall_95_0x1e4 + beq- MPCall_92_0xd8 + bl MPCall_95_0x2b0 + bns- cr7, MPCall_92_0x9c + bltl- cr5, MPCall_95_0x2e0 + bltl- cr5, MPCall_95_0x348 + +MPCall_92_0x9c + lwz r16, 0x0000(r30) + and r8, r5, r29 + orc r9, r5, r29 + or r16, r16, r8 + and r16, r16, r9 + stw r16, 0x0000(r30) + sync + lwz r14, -0x0b90(r1) + cmpwi cr1, r14, 0x00 + li r14, 0x00 + bne+ cr1, MPCall_92_0xd0 + mflr r14 + bl panic + +MPCall_92_0xd0 + stw r14, -0x0b90(r1) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_92_0xd8 + sync + lwz r14, -0x0b90(r1) + cmpwi cr1, r14, 0x00 + li r14, 0x00 + bne+ cr1, MPCall_92_0xf4 + mflr r14 + bl panic + +MPCall_92_0xf4 + stw r14, -0x0b90(r1) + b ReleaseAndReturnMPCallOOM + + + + DeclareMPCall 93, MPCall_93 + +MPCall_93 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r16, Area.LogicalBase(r31) + lwz r17, Area.LogicalBase2(r31) + cmplw r4, r16 + cmplw cr1, r4, r17 + blt+ major_0x0b054 + bgt+ cr1, major_0x0b054 + mr r8, r4 + bl MPCall_95_0x254 + beq+ major_0x0b054 + lhz r18, 0x0000(r30) + rlwinm. r8, r18, 0, 16, 16 + li r5, 0x00 + +; r1 = kdp + bne+ ReleaseAndReturnZeroFromMPCall + clrlwi r5, r18, 0x11 + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 94, MPCall_94 + +MPCall_94 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r16, Area.LogicalBase(r31) + lwz r17, Area.LogicalBase2(r31) + cmplw r4, r16 + cmplw cr1, r4, r17 + blt+ major_0x0b054 + bgt+ cr1, major_0x0b054 + mr r8, r4 + bl MPCall_95_0x254 + beq+ major_0x0b054 + cmplwi r5, 0x7fff + bgt+ major_0x0b054 + lhz r18, 0x0000(r30) + rlwinm. r8, r18, 0, 16, 16 + bne+ ReleaseAndReturnMPCallOOM + rlwimi r18, r5, 0, 17, 31 + sth r18, 0x0000(r30) + + _Lock PSA.HTABLock, scratch1=r16, scratch2=r17 + + mr r8, r4 + bl MPCall_95_0x1e4 + beq+ Local_Panic + bl MPCall_95_0x2b0 + bns- cr7, MPCall_94_0xa0 + bltl- cr5, MPCall_95_0x2e0 + bltl- cr5, MPCall_95_0x348 + +MPCall_94_0xa0 + sync + lwz r16, -0x0b90(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, MPCall_94_0xbc + mflr r16 + bl panic + +MPCall_94_0xbc + stw r16, -0x0b90(r1) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 129, MPCall_129 + +MPCall_129 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Area.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r16, Area.LogicalBase(r31) + lwz r17, Area.LogicalBase2(r31) + cmplw r4, r16 + cmplw cr1, r4, r17 + blt+ major_0x0b054 + bgt+ cr1, major_0x0b054 + mr r8, r4 + bl MPCall_95_0x254 + beq+ major_0x0b054 + lhz r18, 0x0000(r30) + li r5, 0x00 + rlwinm. r8, r18, 0, 16, 16 + li r16, 0x00 + beq- MPCall_129_0x6c + rlwinm r16, r18, 24, 25, 31 + clrlwi r5, r18, 0x18 + +MPCall_129_0x6c + stw r16, 0x0134(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; MPCall_95 + +; Xrefs: +; major_0x03324 +; IntDSIOtherOther +; PagingFunc1 +; kcMPDispatch +; NKxprintf +; MPCall_115 +; MPCall_75 +; MPCall_130 +; KCSetAreaAccess +; MPCall_123 +; MPCall_81 +; MPCall_98 +; KCMapPage +; KCUnmapPages +; KCMakePhysicallyContiguous +; KCLockPages +; KCUnlockPages +; KCHoldPages +; KCUnholdPages +; MPCall_91 +; MPCall_92 +; MPCall_93 +; MPCall_94 +; MPCall_129 + + DeclareMPCall 95, MPCall_95 + +MPCall_95 ; OUTSIDE REFERER + or. r8, r3, r4 + bne- MPCall_95_0x44 + li r16, 0x00 + stw r16, 0x06b4(r1) + _log 'Areas capability probe detected^n' + b ReturnParamErrFromMPCall + +MPCall_95_0x44 + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + li r28, -0x01 + li r4, 0x00 + li r5, 0x00 + lwz r8, PSA.UnheldFreePageCount(r1) + cmpwi r8, 0x00 + ble+ ReleaseAndReturnMPCallOOM + lwz r27, -0x0438(r1) + srwi r27, r27, 15 + mfspr r8, dec + subf r27, r27, r8 + lwz r8, -0x03f8(r1) + lwz r9, -0x03f4(r1) + mr r30, r9 + bl FindAreaAbove + mr r31, r8 + lwz r29, Area.LogicalBase(r31) + cmplw r29, r30 + bgt- MPCall_95_0xa8 + mr r29, r30 + +MPCall_95_0xa8 + crset cr2_eq + +MPCall_95_0xac + mfspr r9, dec + subf. r9, r27, r9 + blt- MPCall_95_0x1c8 + +MPCall_95_0xb8 + lwz r8, 0x0020(r31) + lwz r9, 0x0018(r31) + rlwinm. r8, r8, 0, 16, 16 + cmpwi cr1, r3, 0x00 + bne- MPCall_95_0x19c + beq- cr1, MPCall_95_0xe0 + cmpwi cr3, r9, 0x00 + beq- cr3, MPCall_95_0xe0 + cmpw cr1, r9, r3 + bne- cr1, MPCall_95_0x19c + +MPCall_95_0xe0 + lwz r9, Area.TwoFiftySix(r31) + rlwinm. r8, r9, 0, 28, 28 + bne- MPCall_95_0x19c + rlwinm. r8, r9, 0, 23, 23 + bne- MPCall_95_0x19c + + _Lock PSA.HTABLock, scratch1=r16, scratch2=r17 + + mr r8, r29 + bl MPCall_95_0x1e4 + beq+ Local_Panic + sync + lwz r16, -0x0b90(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, MPCall_95_0x134 + mflr r16 + bl panic + +MPCall_95_0x134 + stw r16, -0x0b90(r1) + lwz r16, 0x0000(r30) + clrlwi. r8, r16, 0x1f + beq- MPCall_95_0x180 + mr r8, r29 + bl MPCall_95_0x254 + beq- MPCall_95_0x1c8 + lhz r17, 0x0000(r30) + rlwinm. r8, r17, 0, 16, 16 + clrlwi r17, r17, 0x11 + bne- MPCall_95_0x180 + cmpw r17, r28 + crclr cr2_eq + ble- MPCall_95_0x180 + mr r28, r17 + lwz r4, Area.ID(r31) + cmplwi r17, 0x7fff + mr r5, r29 + bge- MPCall_95_0x1c8 + +MPCall_95_0x180 + lwz r8, 0x0068(r31) + lwz r9, Area.LogicalBase2(r31) + add r29, r29, r8 + subf. r9, r9, r29 + bge- MPCall_95_0x19c + bne+ cr2, MPCall_95_0xac + b MPCall_95_0xb8 + +MPCall_95_0x19c + lwz r8, 0x0054(r31) + lwz r9, 0x005c(r31) + cmpw r8, r9 + addi r31, r9, -0x54 + lwz r29, Area.LogicalBase(r31) + bne- MPCall_95_0x1c0 + lwz r9, 0x0008(r8) + addi r31, r9, -0x54 + lwz r29, Area.LogicalBase(r31) + +MPCall_95_0x1c0 + bne+ cr2, MPCall_95_0xac + b MPCall_95_0xb8 + +MPCall_95_0x1c8 + cmpwi r4, 0x00 + stw r29, -0x03f4(r1) + beq+ ReleaseAndReturnMPCallOOM + lwz r8, 0x0068(r31) + add r8, r8, r5 + stw r8, -0x03f4(r1) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_95_0x1e4 ; OUTSIDE REFERER + lwz r16, Area.LogicalBase(r31) + lwz r18, Area.TwoFiftySix(r31) + lwz r30, 0x0040(r31) + subf r17, r16, r8 + cmpwi r30, 0x00 + rlwinm r17, r17, 22, 10, 29 + beqlr- + rlwinm. r16, r18, 0, 26, 26 + rlwinm r16, r17, 22, 20, 29 + beq- MPCall_95_0x214 + rlwinm r17, r17, 0, 20, 29 + lwzx r30, r30, r16 + +MPCall_95_0x214 + add. r30, r30, r17 + blr + + dc.l 0x821f0024 ; again, probably just dead code + dc.l 0x825f0008 + dc.l 0x83df0040 + dc.l 0x56510739 + dc.l 0x7e304050 + dc.l 0x4182ffc4 + dc.l 0x83df0044 + dc.l 0x825f0080 + dc.l 0x3bdeffbc + dc.l 0x7e304050 + dc.l 0x7e319214 + dc.l 0x825e0008 + dc.l 0x83de0040 + dc.l 0x4bffffa4 + +MPCall_95_0x254 ; OUTSIDE REFERER + lwz r16, Area.LogicalBase(r31) + lwz r18, Area.TwoFiftySix(r31) + lwz r30, 0x003c(r31) + rlwinm. r17, r18, 0, 28, 28 + subf r17, r16, r8 + beq- MPCall_95_0x288 + lwz r30, 0x0044(r31) + lwz r18, 0x0080(r31) + addi r30, r30, -0x44 + subf r17, r16, r8 + add r17, r17, r18 + lwz r18, 0x0008(r30) + lwz r30, 0x003c(r30) + +MPCall_95_0x288 + cmpwi r30, 0x00 + rlwinm r17, r17, 21, 11, 30 + beqlr- + rlwinm. r16, r18, 0, 30, 30 + rlwinm r16, r17, 22, 20, 29 + beq- MPCall_95_0x2a8 + rlwinm r17, r17, 0, 20, 30 + lwzx r30, r30, r16 + +MPCall_95_0x2a8 + add. r30, r30, r17 + blr + +MPCall_95_0x2b0 ; OUTSIDE REFERER + lwz r19, 0x0000(r30) + lwz r18, 0x06a4(r1) + mtcrf 0x07, r19 + rlwinm r17, r19, 0, 0, 19 + rlwinm r16, r19, 23, 9, 28 + bnslr- cr7 + bgelr- cr5 + lwzux r16, r18, r16 + lwz r17, 0x0004(r18) + mtcrf 0x80, r16 + bge+ Local_Panic + blr + +MPCall_95_0x2e0 ; OUTSIDE REFERER + mfspr r14, pvr + clrlwi r16, r16, 0x01 + rlwinm. r14, r14, 0, 0, 14 + stw r16, 0x0000(r18) + sync + tlbie r8 + beq- MPCall_95_0x304 + sync + tlbsync + +MPCall_95_0x304 + sync + isync + cmpwi r30, 0x00 + lwz r14, 0x0000(r30) + lwz r17, 0x0004(r18) + oris r16, r16, 0x8000 + beqlr- + rlwimi r14, r17, 29, 27, 27 + rlwimi r14, r17, 27, 28, 28 + mtcrf 0x07, r14 + stw r14, 0x0000(r30) + blr + +MPCall_95_0x334 + stw r17, 0x0004(r18) + eieio + stw r16, 0x0000(r18) + sync + blr + +MPCall_95_0x348 ; OUTSIDE REFERER + lwz r14, 0x0000(r30) + li r16, -0x01 + stw r16, 0x0340(r1) + stw r16, 0x0348(r1) + stw r16, 0x0350(r1) + stw r16, 0x0358(r1) + lwz r16, 0x0e98(r1) + rlwinm r14, r14, 0, 21, 19 + addi r16, r16, 0x01 + stw r16, 0x0e98(r1) + rlwimi r14, r17, 0, 0, 19 + cmpwi r30, 0x00 + li r16, 0x00 + li r17, 0x00 + beq+ MPCall_95_0x334 + stw r14, 0x0000(r30) + b MPCall_95_0x334 + +V2P ; OUTSIDE REFERER + mr. r19, r9 + mfsprg r17, 0 + bne- MPCall_95_0x39c + lwz r19, EWA.PA_CurAddressSpace(r17) + +MPCall_95_0x39c + addi r18, r19, 0x80 + lwz r16, 0x0000(r18) + li r19, -0x01 + rlwimi r19, r16, 15, 0, 14 + xor r17, r8, r16 + andc. r17, r17, r19 + beq- MPCall_95_0x444 + lwzu r16, 0x0008(r18) + rlwimi r19, r16, 15, 0, 14 + xor r17, r8, r16 + andc. r17, r17, r19 + beq- MPCall_95_0x444 + lwzu r16, 0x0008(r18) + rlwimi r19, r16, 15, 0, 14 + xor r17, r8, r16 + andc. r17, r17, r19 + beq- MPCall_95_0x444 + lwzu r16, 0x0008(r18) + rlwimi r19, r16, 15, 0, 14 + xor r17, r8, r16 + andc. r17, r17, r19 + beq- MPCall_95_0x444 + lwzu r16, 0x0008(r18) + rlwimi r19, r16, 15, 0, 14 + xor r17, r8, r16 + andc. r17, r17, r19 + beq- MPCall_95_0x444 + lwzu r16, 0x0008(r18) + rlwimi r19, r16, 15, 0, 14 + xor r17, r8, r16 + andc. r17, r17, r19 + beq- MPCall_95_0x444 + lwzu r16, 0x0008(r18) + rlwimi r19, r16, 15, 0, 14 + xor r17, r8, r16 + andc. r17, r17, r19 + beq- MPCall_95_0x444 + lwzu r16, 0x0008(r18) + rlwimi r19, r16, 15, 0, 14 + xor r17, r8, r16 + andc. r17, r17, r19 + bne- MPCall_95_0x45c + +MPCall_95_0x444 + andi. r17, r16, 0x01 + rlwinm r19, r19, 0, 8, 19 + lwzu r17, 0x0004(r18) + and r19, r8, r19 + or r17, r17, r19 + bnelr- + +MPCall_95_0x45c ; OUTSIDE REFERER + cmpwi r9, noErr + addi r16, r9, 0x30 + beq- MPCall_95_0x474 + rlwinm r17, r8, 6, 26, 29 + lwzx r17, r16, r17 + b MPCall_95_0x478 + +MPCall_95_0x474 + mfsrin r17, r8 + +MPCall_95_0x478 + rlwinm r16, r8, 10, 26, 31 + rlwimi r16, r17, 7, 1, 24 + rlwinm r9, r8, 26, 10, 25 + oris r16, r16, 0x8000 + rlwinm r17, r17, 6, 7, 25 + xor r9, r9, r17 + lwz r17, 0x06a0(r1) + lwz r18, 0x06a4(r1) + and r9, r9, r17 + or. r18, r18, r9 + +MPCall_95_0x4a0 + lwz r17, 0x0000(r18) + lwz r9, 0x0008(r18) + cmpw cr6, r16, r17 + lwz r17, 0x0010(r18) + cmpw cr7, r16, r9 + lwzu r9, 0x0018(r18) + bne- cr6, MPCall_95_0x4c4 + +MPCall_95_0x4bc + lwzu r17, -0x0014(r18) + blr + +MPCall_95_0x4c4 + cmpw cr6, r16, r17 + lwzu r17, 0x0008(r18) + beq+ cr7, MPCall_95_0x4bc + cmpw cr7, r16, r9 + lwzu r9, 0x0008(r18) + beq+ cr6, MPCall_95_0x4bc + cmpw cr6, r16, r17 + lwzu r17, 0x0008(r18) + beq+ cr7, MPCall_95_0x4bc + cmpw cr7, r16, r9 + lwzu r9, 0x0008(r18) + beq+ cr6, MPCall_95_0x4bc + cmpw cr6, r16, r17 + lwzu r17, -0x000c(r18) + beqlr- cr7 + cmpw cr7, r16, r9 + lwzu r17, 0x0008(r18) + beqlr- cr6 + lwzu r17, 0x0008(r18) + beqlr- cr7 + lwz r17, 0x06a0(r1) + xori r16, r16, 0x40 + andi. r9, r16, 0x40 + addi r18, r18, -0x3c + xor r18, r18, r17 + bne+ MPCall_95_0x4a0 + blr diff --git a/NanoKernel/NKBuiltinInit.s b/NanoKernel/NKBuiltinInit.s new file mode 100644 index 0000000..0c1d458 --- /dev/null +++ b/NanoKernel/NKBuiltinInit.s @@ -0,0 +1,1379 @@ +; When we receive control: +; r3 = ConfigInfo +; r4 = ProcessorInfo +; r5 = SystemInfo +; r6 = DiagInfo +; r7 = RTAS_flag ('RTAS' or 0) +; r8 = RTAS_proc +; r9 = HWInfo + + + +InitBuiltin + + + +; Leave zero in r0 (it is rather a silly place). + + li r0, 0 + + + +; Initialize segment registers (understand these better!) + + isync + lis r12, 0x2000 + mtsr 0, r12 + mtsr 1, r0 + mtsr 2, r0 + mtsr 3, r0 + mtsr 4, r0 + mtsr 5, r0 + mtsr 6, r0 + mtsr 7, r0 + mtsr 8, r0 + mtsr 9, r0 + mtsr 10, r0 + mtsr 11, r0 + mtsr 12, r0 + mtsr 13, r0 + mtsr 14, r0 + mtsr 15, r0 + isync + + + +; Zero out the timebase (rtc on 601) and upper BAT registers +; (this is best practice for invalidating BATs) +; (Interestingly, SheepShaver also uses r12 for this PVR access.) + + mfspr r12, pvr + rlwinm. r12, r12, 0, 0, 14 + bne- @not601 + + mtspr rtcl, r0 + mtspr rtcu, r0 + mtspr ibat0l, r0 + mtspr ibat1l, r0 + mtspr ibat2l, r0 + mtspr ibat3l, r0 + + b @endif601 +@not601 + + mtspr tbl, r0 + mtspr tbu, r0 + mtspr ibat0u, r0 + mtspr ibat1u, r0 + mtspr ibat2u, r0 + mtspr ibat3u, r0 + mtspr dbat0u, r0 + mtspr dbat1u, r0 + mtspr dbat2u, r0 + mtspr dbat3u, r0 + +@endif601 + + + + +; The Trampoline instructs us to put the base of the blue area at +; this physical address, which seems always to be the base of the +; first RAM bank reported by the trampoline. (The kernel is also +; expected to initialise MacOS LowMemory from a key/valye list.) + + lwz r12, NKConfigurationInfo.PA_RelocatedLowMemInit(r3) + + + +; Search SysInfo for the first nonzero size RAM bank. + + addi r10, r5, NKSystemInfo.Bank0Start - 4 +@rambank_loop + lwzu r11, 8(r10) ; Bank0Size, Bank1Size... + cmpwi r11, 0 + beq+ @rambank_loop + + ; r10 points to BankXSize, r11 contains BankXSize + + + +; DeltaMemory = PA_RelocatedLowMemInit if fits in bank, else 0. + + subf r11, r12, r11 + srawi r11, r11, 31 ; f... if PA_ > BankSize else 0... + andc r12, r12, r11 ; zero DeltaMemory if PA_ > BankSize + + + +; BankSize -= DeltaMemory + + lwz r11, 0(r10) + subf r11, r12, r11 + stw r11, 0(r10) + + + +; BankStart += DeltaMemory + + lwz r11, -4(r10) + add r11, r11, r12 + stw r11, -4(r10) + + + +; PhysicalMemorySize -= DeltaMemory (+ another page if there is close to 2GB) + + lwz r11, NKSystemInfo.PhysicalMemorySize(r5) + addis r15, r11, 1 + cmpwi r15, 0 + bgt- @skip_reducing_ram + addi r11, r11, -4096 +@skip_reducing_ram + subf r11, r12, r11 + stw r11, 0(r5) + + + +; Load PhysicalMemorySize - 1 into r15. +; +; Create the HTABMASK for eventual insertion in lo half of SDR1: +; - Is number of bits used from hash func to index PTEGs in HTAB. +; - Arch allows 10..19 bits. +; - Bits 0-9 assumed by architecture. +; - Bits 10-18 in the low field of SDR1. +; - Bits 19-31 also in low field, but must be zeroed. +; - Our r14 "mask" = (future low half of SDR1) || 0xffff. +; - Therefore has an extra six ones. +; - Therefore equals HTAB size - 1. +; - Computed from PhysicalMemorySize as follows: +; +; --------------------------------------------------------------------- +; Phys RAM r14 HTABMASK bits PTEGs in HTAB HTAB size +; (MB) (10-19 allowed) +; --------------------------------------------------------------------- +; <= 8 0000ffff 10 1k 64k +; <= 16 0001ffff 11 2k 128k +; <= 32 0003ffff 12 4k 256k +; <= 64 0007ffff 13 8k 512k +; <= 128 000fffff 14 16k 1024k +; <= 256 001fffff 15 32k 2048k +; > 256 003fffff 16 64k 4096k + + lwz r15, NKSystemInfo.PhysicalMemorySize(r5) + addi r15, r15, -1 + cntlzw r12, r15 + + lis r14, 0x01ff + srw r14, r14, r12 + ori r14, r14, 0xffff + clrlwi r14, r14, 10 + + + +; Based on PhysicalMemorySize, guess how much memory the +; kernel needs, including the HTAB. Leave it in r15. +; +; ----------------------------- +; Phys RAM r15 Kern +; (MB) pages +; ----------------------------- +; >= 4 0001d000 29 +; >= 8 0001e000 30 +; >= 16 00030000 48 +; >= 32 00054000 84 +; >= 64 0009c000 156 +; >= 128 0012c000 300 +; >= 256 0024c000 588 +; >= 512 0048c000 1164 +; >=1024 0050c000 1292 +; >=2048 0060c000 1548 + + addis r15, r15, 0x40 + rlwinm r15, r15, 22, 10, 19 + add r15, r15, r14 + lisori r10, 0x0000c001 + add r15, r15, r10 + + + +; Search SysInfo backwards for a RAM bank that can fit: +; - A HTAB aligned to a multiple of its own length +; - An r15-size area immediately below that +; +; Kernel structures (HTAB at top) will butt up against +; BankEnd % HTABSIZE. Leave bottom in r13 and top in r12. + + addi r10, r5, NKSystemInfo.EndOfBanks +@try_another_bank + lwz r11, -4(r10) ; size + lwzu r12, -8(r10) ; start + add r11, r12, r11 ; end + andc r13, r11, r14 ; end % HTABSIZE + subf r13, r15, r13 ; end % HTABSIZE - r15 + cmplw r13, r12 + blt+ @try_another_bank + cmplw r13, r11 + bgt+ @try_another_bank + + add r12, r13, r15 + + + +; Populate SDR1 with HTABORG || HTABMASK: +; - HTABORG = top_of_bank % HTABSIZE (only top half) +; - HTABMASK = top half of r14 (which equals HTABSIZE-1) +; +; Leave SDR1 in r12 and HTABORG (a full address) in r11. + + subf r12, r14, r12 + rlwimi r12, r14, 16, 16, 31 + mtspr sdr1, r12 + + rlwinm r11, r12, 0, 0, 15 + + + +; Recap: (matches SheepShaver notes on NKv1) +; r11 HTABORG +; r12 SDR1 +; r13 base of "reserved" kernel area +; r14 HTABSIZE - 1 +; r15 size of "reserved" kernel area + + + +; Place the kernel data page (KDP) 8k below the HTAB, +; and point SPRG0 at it. r1 almost always points to KDP. +; +; Page above KDP becomes emulator data page (EDP). +; Page below KDP becomes private v2 kernel globals. + + lisori r1, -0x2000 + add r1, r1, r11 + + mtsprg 0, r1 + + + +; Init the reserved area to zero, up to the HTAB. +; +; But if the machine has Thudded and dumped all its registers +; (as evidenced by a saved SDR1) then don't zero that dump. + + lwz r11, KDP.ThudSavedSDR1(r1) + cmpw r12, r11 + lis r11, 0x7fff + + bne- @did_not_panic + subf r11, r13, r1 + addi r11, r11, KDP.StartOfPanicArea +@did_not_panic + + subf r12, r14, r15 + addi r12, r12, -0x01 + +@eraseloop + addic. r12, r12, -4 + + subf r10, r11, r12 + cmplwi cr7, r10, KDP.EndOfPanicArea - KDP.StartOfPanicArea - 4 + + ble- cr7, @skipwrite + stwx r0, r13, r12 +@skipwrite + + bne+ @eraseloop + + + +; Put r1 pointer (for indexing PSA/KDP) in CPU-0 EWA + + stw r1, EWA.PA_KDP(r1) + + + +; Set up the interrupt response page (IRP) at KDP - (10 pages). +; +; (Point CPU-0 EWA to it and fill it with 0x68f168f1.) + + lisori r12, IRPOffset + add r12, r12, r1 + stw r12, EWA.PA_IRP(r1) + + bl InitIRP + + + +; Set up runtime abstraction services (RTAS). +; +; Kernel argument r7 is either 'RTAS' or zero. If 'RTAS': +; - Arg r8 points to RTAS dispatch proc. +; - Arg r9 points to HWInfo points to RTAS private data +; - Copy HWInfo into IRP +; +; TODO: neaten, use records! + + + lisori r12, 'RTAS' + cmpw r7, r12 + bne- @RTAS_absent + + stw r8, KDP.RTAS_Proc(r1) + + lwz r7, NKHWInfo.RTAS_PrivDataArea(r9) + stw r7, KDP.RTAS_PrivDataArea(r1) + + lwz r11, EWA.PA_IRP(r1) + addi r11, r11, IRP.HWInfo + li r10, 0xc0 + +@RTAS_copyloop + addic. r10, r10, -4 + lwzx r12, r9, r10 + stwx r12, r11, r10 + bgt+ @RTAS_copyloop + + stw r23, PSA.NoIdeaR23(r1) + b @RTAS_done + +@RTAS_absent + stw r0, KDP.RTAS_Proc(r1) + stw r0, KDP.RTAS_PrivDataArea(r1) + +@RTAS_done + + + +; Copy 160 bytes of ProcessorInfo into KDP +; (Way longer than anything I know about!) + + addi r11, r1, KDP.ProcessorInfo + li r10, 160 +@ProcessorInfo_copyloop + addic. r10, r10, -4 + lwzx r12, r4, r10 + stwx r12, r11, r10 + bgt+ @ProcessorInfo_copyloop + + + +; Copy 320 bytes of SystemInfo into IRP + + lwz r11, EWA.PA_IRP(r1) + addi r11, r11, IRP.SystemInfo + li r10, 320 +@SystemInfo_copyloop + addic. r10, r10, -4 + lwzx r12, r5, r10 + stwx r12, r11, r10 + bgt+ @SystemInfo_copyloop + + + +; If DiagnosticInfo != 0, copy it to PSA + + cmpwi r6, 0 + beq- @DiagInfo_skipcopy + + addi r11, r1, PSA.DiagInfo + li r10, 256; NKDiagInfo.Size + +@DiagInfo_copyloop + addic. r10, r10, -4 + lwzx r12, r6, r10 + stwx r12, r11, r10 + bgt+ @DiagInfo_copyloop + +@DiagInfo_skipcopy + + + +; Store a ConfigInfo pointer in KDP + + stw r3, KDP.PA_ConfigInfo(r1) + + + +; Add to (presumably empty) ConfigFlags + + lwz r9, KDP.PA_ConfigInfo(r1) + lhz r8, NKConfigurationInfo.Debug(r9) + + ; If CI.Debug >= 257 && CI.DebugFlags & 2 ... + cmplwi r8, NKConfigurationInfo.DebugThreshold + lwz r8, KDP.NanoKernelInfo + NKNanoKernelInfo.ConfigFlags(r1) + + if &TYPE('NKShowLog') = 'UNDEFINED' + blt- @no_screen_log + lwz r8, NKConfigurationInfo.DebugFlags(r9) + rlwinm. r8, r8, 0, NKConfigurationInfo.LogFlagBit, NKConfigurationInfo.LogFlagBit + lwz r8, KDP.NanoKernelInfo + NKNanoKernelInfo.ConfigFlags(r1) + beq- @no_screen_log + endif + + ; Enable the screen log + ori r8, r8, 1<< 3 +@no_screen_log + + ; Switch on two other flags + ori r8, r8, 1<< 0 ; not sure + ori r8, r8, 1<< 4 ; to do with interrupts + stw r8, KDP.NanoKernelInfo + NKNanoKernelInfo.ConfigFlags(r1) + + + +; Turns out that there was a CPU struct hiding between PSA and KDP, +; which contains our main CPU ewa + + addi r9, r1, EWA.CPUBase + li r8, -1 + stw r8, CPU.ID(r9) + + + +; Say hello. + + bl InitScreenConsole + + _log 'Hello from the builtin multitasking NanoKernel. Version: ' + + li r8, kNanoKernelVersion + mr r8, r8 + bl Printh + + _log '^n' + + + +; Save a pointer to the kernel memory area in KDP +; (will get upped by pool extends?) + + stw r13, KDP.KernelMemoryBase(r1) + + + +; PA_NanoKernelCode is uninitialized, but this loaded value gets +; clobbered straight away anyway. Compiler! + + lwz r12, KDP.PA_NanoKernelCode(r1) + + + +; Choose a primary interrupt handler (PIH) +; + ; ARG NKConfigurationInfo *r3 + bl LookupInterruptHandler + ; RET InterruptHandler *r7 + ; CLOB r12 + + stw r7, KDP.PA_InterruptHandler(r1) + + + +; Store HTABSIZE in the IRP + + lwz r11, EWA.PA_IRP(r1) + addi r12, r14, 1 + stw r12, IRP.SystemInfo + NKSystemInfo.HashTableSize(r11) + + + +; Populate KDP... + + ; Place EDP pointer (and leave it in r8). + addi r8, r1, 0x1000 + stw r8, KDP.PA_EmulatorData(r1) + + + ; Place pointer to top of reserved kernel area. + ; (= ptr to top of HTAB) + add r12, r13, r15 + stw r12, KDP.KernelMemoryEnd(r1) + + + ; Place PA_RelocatedLowMemInit from ConfigInfo in KDP. + ; (See note above.) + lwz r12, NKConfigurationInfo.PA_RelocatedLowMemInit(r3) + stw r12, KDP.PA_RelocatedLowMemInit(r1) + + + ; Place something from ConfigInfo in KDP. + ; This address seems to contain 0x40820160. + ; Trampoline ns old SharedMemoryAddr, which was 0 anyway. + lwz r12, NKConfigurationInfo.SharedMemoryAddr(r3) + stw r12, KDP.SharedMemoryAddr(r1) + + + ; Place (LA_EmulatorCode + KernelTrapTableOffset) from ConfigInfo in KDP. + ; (Call this LA_EmulatorKernelTrapTable?) + lwz r12, NKConfigurationInfo.LA_EmulatorCode(r3) + lwz r11, NKConfigurationInfo.KernelTrapTableOffset(r3) + add r12, r12, r11 + stw r12, KDP.LA_EmulatorKernelTrapTable(r1) + + + ; Place "PA_NanoKernelCode" in KDP and leave it in r12. + bl * + 4 + mflr r12 + addi r12, r12, 4 - * + stw r12, KDP.PA_NanoKernelCode(r1) + + + ; FDP. Got its name from an embarrassing mistake by me. Needs a better one. + ; Probably written by Gary, it emulates bad PowerPC instructions. + llabel r11, FDP + add r12, r11, r12 + stw r12, KDP.PA_FDP(r1) + + + ; Place "LA_ECB" and "PA_ECB" (twice) from ConfigInfo in KDP. + ; (This gets called the System Context.) + lwz r12, NKConfigurationInfo.LA_EmulatorData(r3) + lwz r11, NKConfigurationInfo.ECBOffset(r3) + add r12, r12, r11 + stw r12, KDP.LA_ECB(r1) + + + add r12, r8, r11 ; PA_EmulatorData + ECBOffset + stw r12, KDP.PA_ECB(r1) + stw r12, EWA.PA_ContextBlock(r1) + + + ; Place init vals for rupt masks from ConfigInfo in KDP. + lwz r12, NKConfigurationInfo.TestIntMaskInit(r3) + stw r12, KDP.TestIntMaskInit(r1) + lwz r12, NKConfigurationInfo.ClearIntMaskInit(r3) + stw r12, KDP.ClearIntMaskInit(r1) + lwz r12, NKConfigurationInfo.PostIntMaskInit(r3) + stw r12, KDP.PostIntMaskInit(r1) + + + ; Place "PA_EmulatorIplValue" from ConfigInfo in KDP. + lwz r12, NKConfigurationInfo.IplValueOffset(r3) + add r12, r8, r12 + stw r12, KDP.PA_EmulatorIplValue(r1) + + + ; Copy this value from ConfigInfo to KDP *again* (see above). + ; But this time, add 0x7c to get 0x408201DC. + lwz r12, NKConfigurationInfo.SharedMemoryAddr(r3) + addi r12, r12, 0x7c + stw r12, KDP.SharedMemoryAddrPlus(r1) + + + ; Place PageAttributeInit from ConfigInfo in KDP. + lwz r12, NKConfigurationInfo.PageAttributeInit(r3) + stw r12, KDP.PageAttributeInit(r1) + + + ; Make space at KDP + 0x920 for PageMap, + ; according to ConfigInfo.PageMapInitSize. + ; 0x1b8 might be a typical value + addi r13, r1, KDP.PageMap + lwz r12, NKConfigurationInfo.PageMapInitSize(r3) + stw r13, KDP.PA_PageMapStart(r1) + add r13, r13, r12 + stw r13, KDP.PA_PageMapEnd(r1) + + + ; Zero out a word in KDP a bit below &PA_PageMap. + ; Only NewWorld and Unknown PIHes touch this. + stw r0, KDP.ZeroWord(r1) + + + +; The InfoRecord contains metadata about the Power Mac structures +; described in PPCInfoRecordsPriv. + +; It lives in the top 64b of the InfoRecord (nee Interrupt Response) Page, +; which on PCI machines is mapped to 5fffe000 (just under 1.5GB). Here we +; populate it at the top of our KDP, and later we copy it to our IRP. + + ; Logical self-pointer to the copy of InfoRecord in KDP + ; (Will this be altered when the InfoRecord is copied to IRP?) + lwz r11, NKConfigurationInfo.LA_KernelData(r3) + addi r12, r11, KDP.InfoRecord + stw r12, KDP.InfoRecord + InfoRecord.InfoRecordPtr(r1) + + + ; Constant + stw r0, KDP.InfoRecord + InfoRecord.Zero(r1) + + + ; NKProcessorState (created by kernel, lives in PSA) + + lwz r11, NKConfigurationInfo.LA_KernelData(r3) + addi r12, r11, PSA.ProcessorState + stw r12, KDP.InfoRecord + InfoRecord.NKProcessorStatePtr(r1) + + li r12, 0x0100 + sth r12, KDP.InfoRecord + InfoRecord.NKProcessorStateVer(r1) + + li r12, 128 + sth r12, KDP.InfoRecord + InfoRecord.NKProcessorStateLen(r1) + + + ; NKHWInfo (created by bootloader, copied to IRP) + + lwz r11, NKConfigurationInfo.LA_InfoRecord(r3) + addi r12, r11, IRP.HWInfo + stw r12, KDP.InfoRecord + InfoRecord.NKHWInfoPtr(r1) + + li r12, 0x0108 + sth r12, KDP.InfoRecord + InfoRecord.NKHWInfoVer(r1) + + li r12, 192 + sth r12, KDP.InfoRecord + InfoRecord.NKHWInfoLen(r1) + + + ; NKProcessorInfo (created by bootloader, copied to KDP) + + lwz r11, NKConfigurationInfo.LA_KernelData(r3) + addi r12, r11, KDP.ProcessorInfo + stw r12, KDP.InfoRecord + InfoRecord.NKProcessorInfoPtr(r1) + + li r12, 0x0112 + sth r12, KDP.InfoRecord + InfoRecord.NKProcessorInfoVer(r1) + + li r12, 160 + sth r12, KDP.InfoRecord + InfoRecord.NKProcessorInfoLen(r1) + + + ; NKNanoKernelInfo (created by kernel, lives in KDP) + + lwz r11, NKConfigurationInfo.LA_KernelData(r3) + addi r12, r11, KDP.NanoKernelInfo + stw r12, KDP.InfoRecord + InfoRecord.NKNanoKernelInfoPtr(r1) + + li r12, kNanoKernelVersion + sth r12, KDP.InfoRecord + InfoRecord.NKNanoKernelInfoVer(r1) + + li r12, 352 + sth r12, KDP.InfoRecord + InfoRecord.NKNanoKernelInfoLen(r1) + + + ; NKDiagInfo (created by bootloader, copied to PSA) + + lwz r11, NKConfigurationInfo.LA_KernelData(r3) + addi r12, r11, PSA.DiagInfo + stw r12, KDP.InfoRecord + InfoRecord.NKDiagInfoPtr(r1) + + li r12, 0x0100 + sth r12, KDP.InfoRecord + InfoRecord.NKDiagInfoVer(r1) + + li r12, 256 + sth r12, KDP.InfoRecord + InfoRecord.NKDiagInfoLen(r1) + + + ; NKSystemInfo (created by bootloader, copied to IRP) + + lwz r11, NKConfigurationInfo.LA_InfoRecord(r3) + addi r12, r11, IRP.SystemInfo + stw r12, KDP.InfoRecord + InfoRecord.NKSystemInfoPtr(r1) + + li r12, 0x0107 + sth r12, KDP.InfoRecord + InfoRecord.NKSystemInfoVer(r1) + + li r12, 320 + sth r12, KDP.InfoRecord + InfoRecord.NKSystemInfoLen(r1) + + + ; NKProcessorInfo... again! + + lwz r11, NKConfigurationInfo.LA_KernelData(r3) + addi r12, r11, KDP.ProcessorInfo + stw r12, KDP.InfoRecord + InfoRecord.NKProcessorInfoPtr2(r1) + + li r12, 0x0112 + sth r12, KDP.InfoRecord + InfoRecord.NKProcessorInfoVer2(r1) + + li r12, 160 + sth r12, KDP.InfoRecord + InfoRecord.NKProcessorInfoLen2(r1) + + + +; Populate emulator data page (EDP). + + ; Copy 16-byte BootstrapVersion string from ConfigInfo + lwz r11, NKConfigurationInfo.BootVersionOffset(r3) + lwz r12, NKConfigurationInfo.BootstrapVersion(r3) + stwux r12, r11, r8 + lwz r12, NKConfigurationInfo.BootstrapVersion + 4(r3) + stw r12, 4(r11) + lwz r12, NKConfigurationInfo.BootstrapVersion + 8(r3) + stw r12, 8(r11) + lwz r12, NKConfigurationInfo.BootstrapVersion + 12(r3) + stw r12, 12(r11) + + + ; Place logical pointer to emulator entry point in ContextBlock. + ; Leave pointer to ECB in r11. + lwz r12, NKConfigurationInfo.LA_EmulatorCode(r3) + lwz r11, NKConfigurationInfo.EmulatorEntryOffset(r3) + add r12, r11, r12 + lwz r11, NKConfigurationInfo.ECBOffset(r3) + add r11, r11, r8 + stw r12, ContextBlock.LA_EmulatorEntry(r11) + + + ; Place LA_EmulatorData from ConfigInfo in ContextBlock. + lwz r12, NKConfigurationInfo.LA_EmulatorData(r3) + stw r12, ContextBlock.LA_EmulatorData(r11) + + + ; Place LA_DispatchTable from ConfigInfo in ContextBlock. + lwz r12, NKConfigurationInfo.LA_DispatchTable(r3) + stw r12, ContextBlock.LA_DispatchTable(r11) + + + ; Place LA_EmulatorKernelTrapTable from KDP in ContextBlock. + lwz r12, KDP.LA_EmulatorKernelTrapTable(r1) + stw r12, ContextBlock.LA_EmulatorKernelTrapTable(r11) + + + +; Initialize MacOS LowMem globals at PA_RelocatedLowMemInit + + ; Zero out 8k + lwz r10, KDP.PA_RelocatedLowMemInit(r1) + li r9, 0x2000 +@LowMem_zeroloop + addic. r9, r9, -4 + stwx r0, r10, r9 + bne+ @LowMem_zeroloop + + + ; Populate from LowMemInit "key-value" table. + lwz r11, NKConfigurationInfo.MacLowMemInitOffset(r3) + lwz r10, KDP.PA_RelocatedLowMemInit(r1) + + lwzux r9, r11, r3 ; get first word and point r11 at it +@LowMem_setloop + mr. r9, r9 + beq- @LowMem_done + lwzu r12, 4(r11) + stwx r12, r10, r9 + lwzu r9, 4(r11) + b @LowMem_setloop +@LowMem_done + + + +; We expect a 'Hnfo' signature (from Trampoline) in HWInfo. +; +; If HWInfo IS signed, great -- we can move on with the init process, +; and skip all the nasty cache-probing, table-consulting madness that +; follows. Just ignore the rest of this file. +; +; But if HWInfo is unsigned, then this is going to hurt. + + lwz r11, EWA.PA_IRP(r1) + lwz r11, IRP.HWInfo + NKHWInfo.Signature(r11) + lisori r12, 'Hnfo' + cmplw r12, r11 + beq- FinishInitBuiltin + + + +; Darn. All right, see if we can copy ProcessorInfo from +; ProcessorInfoTable.s + + mfpvr r12 + stw r12, KDP.ProcessorInfo + NKProcessorInfo.ProcessorVersionReg(r1) + srwi r12, r12, 16 + lwz r11, KDP.PA_NanoKernelCode(r1) + addi r10, r1, KDP.ProcessorInfo + NKProcessorInfo.Ovr + li r9, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr + +; check for several (some unknown) pre-7410 CPUs, and load their info + cmpwi r12, 0x0001 ; 601 + addi r11, r11, ProcessorInfoTable - NKTop + beq- OverrideProcessorInfo + + cmpwi r12, 0x0003 ; 603 + addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr + beq- OverrideProcessorInfo + + cmpwi r12, 0x0004 ; 604 + addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr + beq- OverrideProcessorInfo + + cmpwi r12, 0x0006 ; 603e + addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr + beq- OverrideProcessorInfo + + cmpwi r12, 0x0007 ; 750FX + addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr + beq- OverrideProcessorInfo + + cmpwi r12, 0x0008 ; 750 + addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr + beq- OverrideProcessorInfo + + cmpwi r12, 0x0009 ; ??? + addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr + beq- OverrideProcessorInfo + cmpwi r12, 0x000a ; ??? + beq- OverrideProcessorInfo + + cmpwi r12, 0x000c ; 7400 + addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr + beq- OverrideProcessorInfo + + cmpwi r12, 0x000d ; ??? + addi r11, r11, NKProcessorInfo.OvrEnd - NKProcessorInfo.Ovr + beq- OverrideProcessorInfo + + + +; Now things get crazy. Have barely touched this... + +; get base of page table (why?) + mfsdr1 r22 + +; r21 = SDR1 & 0xffff0000 + rlwinm r21, r22, 0, 0, 15 + +; r22 = (SDR1 << 16) & 0x007F0000 + rlwinm r22, r22, 16, 9, 15 + addis r22, r22, 0x01 + li r15, 0x00 + li r12, 0x1a + mtctr r12 + lwz r12, -0x0020(r1) + addi r10, r12, 0xec0 + +new_world_0x60c + lwz r11, -0x0004(r10) + lwzu r12, -0x0008(r10) + subf r9, r12, r21 + cmplw r9, r11 + bge- new_world_0x624 + mr r11, r9 + +new_world_0x624 + cmplw r11, r15 + ble- new_world_0x634 + mr r13, r12 + mr r15, r11 + +new_world_0x634 + bdnz+ new_world_0x60c + addi r12, r22, -0x01 + neg r11, r13 + and r12, r11, r12 + add r13, r13, r12 + subf r15, r12, r15 + rlwinm r15, r15, 0, 0, 21 + li r11, 0x1000 + stw r11, 0x0f30(r1) + li r11, -0x01 + li r10, 0x400 + +new_world_0x660 + subic. r10, r10, 4 + stwx r11, r21, r10 + bne+ new_world_0x660 + dcbz 0, r21 + +new_world_0x670 + addi r10, r10, 0x01 + lbzx r11, r21, r10 + cmpwi r11, 0x00 + beq+ new_world_0x670 + sth r10, 0x0f3c(r1) + sth r10, 0x0f3e(r1) + sth r10, 0x0f46(r1) + sth r10, 0x0f48(r1) + sth r10, 0x0f4a(r1) + lis r12, -0x8000 + add r11, r21, r22 + addi r11, r11, -0xe6e + addis r10, r21, 0x01 + +new_world_0x6a4 + stwu r11, -0x0004(r10) + rlwimi r12, r10, 29, 29, 31 + stwu r12, -0x0004(r10) + cmpw r10, r21 + rlwinm r9, r10, 9, 7, 19 + tlbie r9 + bne+ new_world_0x6a4 + sync + isync + lwz r11, 0x064c(r1) + li r12, (copied_code_1_end - copied_code_1) / 4 + mtctr r12 + add r20, r21, r22 + addi r11, r11, copied_code_1_end - NKTop + +new_world_0x6dc + lwzu r12, -0x0004(r11) + stwu r12, -0x0004(r20) + dcbst 0, r20 + sync + icbi 0, r20 + bdnz+ new_world_0x6dc + sync + isync + stw r0, 0x0f34(r1) + li r17, 0x00 + li r18, 0x200 + li r19, 0x00 + li r16, -0x01 + b new_world_0x720 + +new_world_0x714 + addi r17, r17, 0x200 + cmplw r17, r15 + bge- new_world_0x734 + +new_world_0x720 + mtlr r20 + blrl + ble+ new_world_0x714 + addi r12, r17, -0x200 + stw r12, 0x0f34(r1) + +new_world_0x734 + li r12, 0x01 + sth r12, 0x0f4e(r1) + lwz r18, 0x0f34(r1) + mr r17, r18 + li r19, 0x00 + li r16, -0x01 + b new_world_0x75c + +new_world_0x750 + add r17, r17, r18 + cmplw r17, r15 + bge- new_world_0x774 + +new_world_0x75c + mtlr r20 + blrl + ble+ new_world_0x750 + subf r17, r18, r17 + divwu r12, r17, r18 + sth r12, 0x0f4e(r1) + +new_world_0x774 + lwz r17, 0x0f34(r1) + lhz r18, 0x0f4e(r1) + slwi r17, r17, 1 + divwu r18, r17, r18 + srwi r19, r18, 1 + li r14, 0x200 + add r19, r19, r14 + li r16, -0x01 + b new_world_0x7ac + +new_world_0x798 + lhz r12, 0x0f4a(r1) + cmplw r14, r12 + ble- new_world_0x7bc + srwi r14, r14, 1 + subf r19, r14, r19 + +new_world_0x7ac + mtlr r20 + blrl + ble+ new_world_0x798 + slwi r12, r14, 1 + +new_world_0x7bc + sth r12, 0x0f44(r1) + mtsdr1 r21 + mr r14, r13 + li r13, 0xff0 + sth r0, 0x0f50(r1) + li r17, 0x00 + lwz r18, 0x0f30(r1) + li r19, 0x00 + li r16, -0x01 + b new_world_0x7f4 + +new_world_0x7e4 + add r17, r17, r18 + lis r12, 0x3f + cmplw r17, r12 + bge- new_world_0x82c + +new_world_0x7f4 + mtlr r20 + mfmsr r12 + ori r12, r12, 0x10 + mtmsr r12 + isync + blrl + mfmsr r12 + rlwinm r12, r12, 0, 28, 26 + mtmsr r12 + isync + ble+ new_world_0x7e4 + subf r17, r18, r17 + divwu r12, r17, r18 + sth r12, 0x0f50(r1) + +new_world_0x82c + li r12, 0x01 + sth r12, 0x0f52(r1) + li r17, 0x00 + lis r18, 0x40 + li r19, 0x00 + li r16, -0x01 + b new_world_0x858 + +new_world_0x848 + add r17, r17, r18 + lis r12, 0x200 + cmplw r17, r12 + bge- new_world_0x890 + +new_world_0x858 + mtlr r20 + mfmsr r12 + ori r12, r12, 0x10 + mtmsr r12 + isync + blrl + mfmsr r12 + rlwinm r12, r12, 0, 28, 26 + mtmsr r12 + isync + ble+ new_world_0x848 + subf r17, r18, r17 + divwu r12, r17, r18 + sth r12, 0x0f52(r1) + +new_world_0x890 + mr r13, r14 + addi r12, r22, -0x01 + srwi r12, r12, 16 + or r12, r12, r21 + mtsdr1 r12 + lwz r12, 0x0f34(r1) + stw r12, 0x0f38(r1) + lhz r12, 0x0f4e(r1) + sth r12, 0x0f4c(r1) + lhz r12, 0x0f44(r1) + sth r12, 0x0f42(r1) + lis r11, 0x3960 + stw r11, 0x0000(r21) + lis r11, 0x4e80 + ori r11, r11, 0x20 + stw r11, 0x0004(r21) + dcbst 0, r21 + sync + icbi 0, r21 + sync + isync + mtlr r21 + blrl + li r11, 0x01 + sth r11, 0x0002(r21) + sync + isync + mtlr r21 + blrl + sth r11, 0x0f40(r1) + cmpwi r11, 0x01 + beq- skip_cache_hackery_never + lwz r11, 0x064c(r1) + li r12, (copied_code_2_end - copied_code_2) / 4 + mtctr r12 + add r20, r21, r22 + addi r11, r11, copied_code_2_end - NKTop + +new_world_0x924 + lwzu r12, -0x0004(r11) + stwu r12, -0x0004(r20) + dcbst 0, r20 + sync + icbi 0, r20 + bdnz+ new_world_0x924 + sync + isync + subf r12, r21, r20 + mulli r12, r12, 0x80 + cmplw r12, r15 + bge- new_world_0x958 + mr r15, r12 + +new_world_0x958 + add r12, r13, r15 + mr r11, r20 + lis r10, 0x4e80 + ori r10, r10, 0x20 + +new_world_0x968 + lwzu r9, -0x0200(r12) + stw r10, 0x0000(r12) + cmpw r12, r13 + stwu r9, -0x0004(r11) + dcbst 0, r12 + sync + icbi 0, r12 + bne+ new_world_0x968 + sync + isync + stw r0, 0x0f38(r1) + li r17, 0x00 + li r18, 0x200 + li r19, 0x00 + li r16, -0x01 + b new_world_0x9b4 + +new_world_0x9a8 + addi r17, r17, 0x200 + cmplw r17, r15 + bge- new_world_0x9c8 + +new_world_0x9b4 + mtlr r20 + blrl + ble+ new_world_0x9a8 + addi r12, r17, -0x200 + stw r12, 0x0f38(r1) + +new_world_0x9c8 + li r12, 0x01 + sth r12, 0x0f4c(r1) + lwz r18, 0x0f38(r1) + mr r17, r18 + li r19, 0x00 + li r16, -0x01 + b new_world_0x9f0 + +new_world_0x9e4 + add r17, r17, r18 + cmplw r17, r15 + bge- new_world_0xa08 + +new_world_0x9f0 + mtlr r20 + blrl + ble+ new_world_0x9e4 + subf r17, r18, r17 + divwu r12, r17, r18 + sth r12, 0x0f4c(r1) + +new_world_0xa08 + add r12, r13, r15 + mr r11, r20 + +new_world_0xa10 + lwzu r9, -0x0004(r11) + stwu r9, -0x0200(r12) + cmpw r12, r13 + dcbst 0, r12 + sync + icbi 0, r12 + bne+ new_world_0xa10 + sync + isync + lwz r17, 0x0f38(r1) + lhz r18, 0x0f4c(r1) + divwu r18, r17, r18 + slwi r17, r17, 1 + add r12, r13, r17 + subi r11, r21, 4 + +new_world_0xa4c + subf r12, r18, r12 + li r14, 0x400 + +new_world_0xa54 + rlwinm. r14, r14, 31, 0, 28 + lwzx r9, r12, r14 + lis r10, 0x4e80 + ori r10, r10, 0x20 + stwx r10, r12, r14 + stwu r9, 0x0004(r11) + dcbst r12, r14 + sync + icbi r12, r14 + addi r14, r14, 0x04 + lwzx r9, r12, r14 + lis r10, 0x4bff + ori r10, r10, 0xfffc + stwx r10, r12, r14 + stwu r9, 0x0004(r11) + dcbst r12, r14 + sync + icbi r12, r14 + bne+ new_world_0xa54 + cmpw r12, r13 + bne+ new_world_0xa4c + sync + isync + mr r19, r18 + slwi r18, r18, 1 + li r14, 0x200 + add r19, r19, r14 + li r16, -0x01 + b new_world_0xadc + +new_world_0xac8 + li r12, 0x08 + cmplw r14, r12 + ble- new_world_0xaec + srwi r14, r14, 1 + subf r19, r14, r19 + +new_world_0xadc + mtlr r20 + blrl + ble+ new_world_0xac8 + slwi r12, r14, 1 + +new_world_0xaec + sth r12, 0x0f42(r1) + srwi r18, r18, 1 + add r12, r13, r17 + subi r11, r21, 4 + +new_world_0xafc + subf r12, r18, r12 + li r14, 0x400 + +new_world_0xb04 + rlwinm. r14, r14, 31, 0, 28 + lwzu r9, 0x0004(r11) + stwx r9, r12, r14 + addi r14, r14, 0x04 + lwzu r9, 0x0004(r11) + stwx r9, r12, r14 + bne+ new_world_0xb04 + cmpw r12, r13 + bne+ new_world_0xafc + +skip_cache_hackery_never + ; Clearly can't just fall through + b FinishInitBuiltin + + +; copied_code_1 + +; Xrefs: +; new_world + +copied_code_1 ; OUTSIDE REFERER + li r10, 0x03 + +copied_code_1_0x4 + li r12, 0x800 + mtctr r12 + add r19, r19, r13 + li r11, 0x00 + mtdec r11 + +copied_code_1_0x18 + subf r12, r17, r11 + srawi r12, r12, 31 + and r11, r11, r12 + lbzx r12, r13, r11 + add r12, r12, r12 + lbzx r12, r19, r11 + add r12, r12, r12 + add r11, r11, r18 + bdnz+ copied_code_1_0x18 + subf r19, r13, r19 + mfdec r12 + neg r12, r12 + cmplw r12, r16 + bgt- copied_code_1_0x54 + mr r16, r12 + +copied_code_1_0x54 + srwi r11, r12, 7 + subf r12, r11, r12 + cmpw r12, r16 + blelr- + addic. r10, r10, -0x01 + bgt+ copied_code_1_0x4 + cmpw r12, r16 + blr + isync + isync + isync + isync + isync + isync + isync + isync + isync + isync + isync + isync + isync + isync + isync + isync +copied_code_1_end ; OUTSIDE REFERER + + + +; copied_code_2 + +; Xrefs: +; new_world + +copied_code_2 ; OUTSIDE REFERER + li r10, 0x03 + mflr r9 + +copied_code_2_0x8 + li r12, 0x800 + mtctr r12 + add r19, r19, r13 + li r11, 0x00 + mtdec r11 + +copied_code_2_0x1c + subf r12, r17, r11 + srawi r12, r12, 31 + and r11, r11, r12 + add r12, r13, r11 + mtlr r12 + blrl + add r12, r19, r11 + mtlr r12 + blrl + add r11, r11, r18 + bdnz+ copied_code_2_0x1c + subf r19, r13, r19 + mfdec r12 + neg r12, r12 + cmplw r12, r16 + bgt- copied_code_2_0x60 + mr r16, r12 + +copied_code_2_0x60 + srwi r11, r12, 7 + subf r12, r11, r12 + cmpw r12, r16 + mtlr r9 + blelr- + addic. r10, r10, -0x01 + bgt+ copied_code_2_0x8 + cmpw r12, r16 + blr + isync + isync + isync + isync + isync + isync + isync + isync + isync + isync + isync + isync + isync + isync + isync + isync +copied_code_2_end ; OUTSIDE REFERER diff --git a/NanoKernel/NKCacheCalls.s b/NanoKernel/NKCacheCalls.s new file mode 100644 index 0000000..922feab --- /dev/null +++ b/NanoKernel/NKCacheCalls.s @@ -0,0 +1,300 @@ +kcCacheDispatch ; OUTSIDE REFERER + stw r21, 0x01ac(r6) + stw r22, 0x01b4(r6) + stw r23, 0x01bc(r6) + clrlwi r8, r3, 0x10 + cmplwi r8, 0x02 + bgt- kcCacheDispatch_0x4c + lwz r8, 0x0f68(r1) + andi. r8, r8, 0x01 + beq- kcCacheDispatch_0x178 + rlwinm. r9, r3, 0, 2, 2 + bnel- kcCacheDispatch_0x1e4 + srwi r8, r3, 30 + cmpwi r8, 0x03 + beq- kcCacheDispatch_0xd8 + clrlwi r8, r3, 0x10 + cmplwi r8, 0x01 + beq- kcCacheDispatch_0x58 + cmplwi r8, 0x02 + beq- kcCacheDispatch_0xb8 + +kcCacheDispatch_0x4c + lis r3, -0x01 + ori r3, r3, 0xfffe + b kcCacheDispatch_0x1c4 + +kcCacheDispatch_0x58 + rlwinm. r9, r3, 0, 1, 1 + bne- kcCacheDispatch_0x74 + rlwinm. r9, r3, 0, 0, 0 + bne- kcCacheDispatch_0x98 + rlwinm. r9, r3, 0, 3, 3 + bl kcCacheDispatch_0x258 + b kcCacheDispatch_0x1c4 + +kcCacheDispatch_0x74 + bl kcCacheDispatch_0x258 + rlwinm r22, r3, 0, 4, 5 + srwi r22, r22, 12 + mfspr r21, hid0 + andc r21, r21, r22 + sync + mtspr hid0, r21 + li r3, 0x00 + b kcCacheDispatch_0x1c4 + +kcCacheDispatch_0x98 + rlwinm r22, r3, 0, 4, 5 + srwi r22, r22, 12 + mfspr r21, hid0 + or r21, r21, r22 + sync + mtspr hid0, r21 + li r3, 0x00 + b kcCacheDispatch_0x1c4 + +kcCacheDispatch_0xb8 + rlwinm. r9, r3, 0, 1, 1 + bne- kcCacheDispatch_0x180 + rlwinm. r9, r3, 0, 0, 0 + bne- kcCacheDispatch_0xe8 + rlwinm. r9, r3, 0, 3, 3 + bne- kcCacheDispatch_0xe4 + rlwinm. r9, r3, 0, 2, 2 + bne- kcCacheDispatch_0x1c4 + +kcCacheDispatch_0xd8 + lis r3, -0x01 + ori r3, r3, 0xfffc + b kcCacheDispatch_0x1c4 + +kcCacheDispatch_0xe4 + bl kcCacheDispatch_0x180 + +kcCacheDispatch_0xe8 + mfspr r21, l2cr + sync + andis. r21, r21, 0x8000 + bne- kcCacheDispatch_0x1c4 + lwz r8, 0x0f54(r1) + and. r8, r8, r8 + beq- kcCacheDispatch_0x178 + mfspr r21, hid0 + rlwinm r8, r21, 0, 12, 10 + mtspr hid0, r8 + sync + addi r8, r1, -0x4d0 + lwz r8, 0x0050(r8) + and. r8, r8, r8 + beq- kcCacheDispatch_0x1c4 + sync + lis r9, 0x20 + or r8, r8, r9 + mtspr l2cr, r8 + sync + +kcCacheDispatch_0x138 + mfspr r8, l2cr + sync + andi. r9, r8, 0x01 + bne+ kcCacheDispatch_0x138 + lis r9, 0x20 + andc r8, r8, r9 + mtspr l2cr, r8 + sync + lis r9, -0x8000 + or r8, r8, r9 + mtspr l2cr, r8 + sync + mtspr hid0, r21 + sync + li r3, 0x00 + b kcCacheDispatch_0x1c4 + +kcCacheDispatch_0x178 + li r3, -0x02 + b kcCacheDispatch_0x1c4 + +kcCacheDispatch_0x180 + mfspr r22, l2cr + sync + andis. r22, r22, 0x8000 + beq- kcCacheDispatch_0x1c4 + bl kcCacheDispatch_0x258 + mfspr r22, l2cr + sync + clrlwi r22, r22, 0x01 + mtspr l2cr, r22 + sync + addi r8, r1, -0x4d0 + stw r22, 0x0050(r8) + sync + rlwinm r22, r22, 0, 7, 3 + oris r22, r22, 0x10 + mtspr l2cr, r22 + sync + +kcCacheDispatch_0x1c4 + ori r23, r23, 0xffff + oris r3, r3, 0xffff + and r3, r3, r23 + +kcCacheDispatch_0x1d0 + lwz r21, 0x01ac(r6) + lwz r22, 0x01b4(r6) + lwz r23, 0x01bc(r6) + sync + b skeleton_key + +kcCacheDispatch_0x1e4 + clrlwi r8, r3, 0x10 + cmplwi r8, 0x01 + beq- kcCacheDispatch_0x204 + cmplwi r8, 0x02 + beq- kcCacheDispatch_0x218 + lis r3, -0x01 + ori r3, r3, 0xfffb + b kcCacheDispatch_0x1d0 + +kcCacheDispatch_0x204 + mfspr r21, hid0 + rlwinm. r21, r21, 12, 4, 5 + beq- kcCacheDispatch_0x24c + oris r23, r21, 0x8000 + blr + +kcCacheDispatch_0x218 + lwz r8, 0x0f54(r1) + and. r8, r8, r8 + beq+ kcCacheDispatch_0x178 + mfspr r21, hid0 + rlwinm r21, r21, 12, 4, 5 + mfspr r22, l2cr + rlwinm r22, r22, 5, 4, 4 + andc r21, r21, r22 + mfspr r22, l2cr + andis. r22, r22, 0x8000 + beq- kcCacheDispatch_0x24c + or r23, r21, r22 + blr + +kcCacheDispatch_0x24c + lis r23, 0x4000 + ori r23, r23, 0x00 + blr + +kcCacheDispatch_0x258 ; OUTSIDE REFERER + mfctr r8 + stw r25, 0x01cc(r6) + stw r24, 0x01c4(r6) + stw r8, 0x00f4(r6) + lhz r25, 0x0f44(r1) + and. r25, r25, r25 + cntlzw r8, r25 + beq- kcCacheDispatch_0x338 + subfic r9, r8, 0x1f + lwz r8, 0x0f34(r1) + and. r8, r8, r8 + beq- kcCacheDispatch_0x338 + lwz r24, 0x0f68(r1) + mtcr r24 + bso- cr6, kcCacheDispatch_0x350 + bne- cr7, kcCacheDispatch_0x2a4 + slwi r24, r8, 1 + add r8, r8, r24 + srwi r8, r8, 1 + +kcCacheDispatch_0x2a4 + srw r8, r8, r9 + mtctr r8 + lwz r8, 0x0630(r1) + lwz r9, 0x0028(r8) + add r8, r8, r9 + +kcCacheDispatch_0x2b8 + lwzux r9, r8, r25 + bdnz+ kcCacheDispatch_0x2b8 + lwz r24, 0x0f68(r1) + andi. r24, r24, 0x01 + beq- kcCacheDispatch_0x338 + mfspr r24, l2cr + andis. r24, r24, 0x8000 + beq- kcCacheDispatch_0x338 + lhz r25, 0x0f60(r1) + and. r25, r25, r25 + cntlzw r8, r25 + beq- kcCacheDispatch_0x338 + subfic r9, r8, 0x1f + lwz r8, 0x0f54(r1) + and. r8, r8, r8 + beq- kcCacheDispatch_0x338 + srw r8, r8, r9 + mtctr r8 + mfspr r24, l2cr + oris r24, r24, 0x40 + mtspr l2cr, r24 + isync + lwz r8, 0x0630(r1) + lwz r9, 0x0028(r8) + add r8, r8, r9 + addis r8, r8, 0x19 + neg r25, r25 + +kcCacheDispatch_0x324 + lwzux r9, r8, r25 + bdnz+ kcCacheDispatch_0x324 + rlwinm r24, r24, 0, 10, 8 + mtspr l2cr, r24 + isync + +kcCacheDispatch_0x338 + lwz r8, 0x00f4(r6) + lwz r25, 0x01cc(r6) + lwz r24, 0x01c4(r6) + sync + mtctr r8 + blr + +kcCacheDispatch_0x350 + dssall + sync + mfspr r8, 1014 + oris r8, r8, 0x80 + mtspr 1014, r8 + sync + +kcCacheDispatch_0x368 + mfspr r8, 1014 + sync + andis. r8, r8, 0x80 + bne+ kcCacheDispatch_0x368 + mfspr r8, l2cr + ori r8, r8, 0x800 + mtspr l2cr, r8 + sync + +kcCacheDispatch_0x388 + mfspr r8, l2cr + sync + andi. r8, r8, 0x800 + bne+ kcCacheDispatch_0x388 + b kcCacheDispatch_0x338 + +kcCacheDispatch_0x39c ; OUTSIDE REFERER + lwz r8, 0x0f68(r1) + mtcr r8 + bnslr- cr6 + dssall + sync + mfspr r8, 1014 + oris r8, r8, 0x80 + mtspr 1014, r8 + sync + +kcCacheDispatch_0x3c0 + mfspr r8, 1014 + sync + andis. r8, r8, 0x80 + bne+ kcCacheDispatch_0x3c0 + blr diff --git a/NanoKernel/NKConsoleLog.s b/NanoKernel/NKConsoleLog.s new file mode 100644 index 0000000..bfb3da4 --- /dev/null +++ b/NanoKernel/NKConsoleLog.s @@ -0,0 +1,802 @@ +; prints + +; _log null-terminated string with a few special escapes. +; Not done figuring this out, with the serial and stuff. + +; Xrefs: +; replace_old_kernel +; new_world +; setup +; undo_failed_kernel_replacement +; AcquireLock +; spinlock_what +; major_0x02ccc +; IntMachineCheckMemRetry +; IntMachineCheck +; major_0x03ab0 +; IntThermalEvent +; kcResetSystem +; non_skeleton_reset_trap +; PagingFunc1 +; KCRegisterCpuPlugin +; KCStartCPU +; NKxprintf +; MPCall_108 +; NKSetClockStep +; NKSetClockDriftCorrection +; convert_pmdts_to_areas +; NKCreateAddressSpaceSub +; createarea +; major_0x10320 +; MPCall_95 +; ExtendPool +; major_0x12b94 +; InitTMRQs +; StartTimeslicing +; InitRDYQs +; major_0x14bcc +; panic +; major_0x18040 +; print_xpt_info +; print_sprgs +; print_sprs +; print_segment_registers +; print_gprs +; print_memory +; print_memory_logical + +prints ; OUTSIDE REFERER + mfsprg r1, 0 + stmw r24, -0x0108(r1) + mflr r24 + mfcr r25 + stw r24, -0x0110(r1) + stw r25, -0x010c(r1) + lwz r1, -0x0004(r1) + lwz r28, -0x0900(r1) + lwz r29, 0x0edc(r1) + + _Lock PSA.DbugLock, scratch1=r30, scratch2=r31 + + cmpwi cr7, r28, 0x00 + andi. r29, r29, 0x02 + beq- cr7, prints_skip_serial + crmove 30, 2 + beq- PrintS_skip_serial + mfmsr r31 + bl serial_io + bl serial_flush + +prints_skip_serial + addi r8, r8, -0x01 + +prints_next_char + bl serial_busywait + lbzu r29, 0x0001(r8) + cmpwi r29, 0x00 + beq- print_common + cmpwi r29, 10 + beq- PrintS_newline + cmpwi r29, 13 + beq- PrintS_newline + cmpwi r29, '\\' + beq- PrintS_escape_code + cmpwi r29, '^' + bne- PrintS_normal_char + +prints_escape_code + lbzu r29, 0x0001(r8) + cmpwi r29, 'n' + beq- PrintS_newline + cmpwi r29, 'r' + beq- PrintS_newline + cmpwi r29, 'b' + bne- PrintS_literal_backslash_or_caret + li r29, 0x07 + b PrintS_normal_char + +prints_literal_backslash_or_caret + lbzu r29, -0x0001(r8) + addi r8, r8, 0x01 + +prints_normal_char + mr r24, r29 + +; r1 = kdp + bl ScreenConsole_putchar + beq- cr7, prints_0xe4 + ori r30, r31, 0x10 + mtmsr r30 + isync + stb r24, 0x0006(r28) + eieio + mtmsr r31 + isync + +prints_0xe4 + b PrintS_next_char + +prints_newline + li r29, 0x0d + +; r1 = kdp + bl ScreenConsole_putchar + li r29, 0x0a + +; r1 = kdp + bl ScreenConsole_putchar + +; r1 = kdp + bl ScreenConsole_redraw + beq- cr7, prints_0x13c + ori r30, r31, 0x10 + mtmsr r30 + isync + li r29, 0x0d + stb r29, 0x0006(r28) + eieio + +prints_0x118 + lbz r29, 0x0002(r28) + eieio + andi. r29, r29, 0x04 + beq+ PrintS_0x118 + li r29, 0x0a + stb r29, 0x0006(r28) + eieio + mtmsr r31 + isync + +prints_0x13c + b PrintS_next_char + + + +; print_common + +; Xrefs: +; PrintS +; Printd +; print_digity_common +; getchar +; Printc + +print_common ; OUTSIDE REFERER + beq- cr7, print_common_0x8c + mtmsr r31 + isync + lwz r29, -0x0438(r1) + srwi r29, r29, 8 + mfspr r30, dec + subf r29, r29, r30 + ori r30, r31, 0x10 + mtmsr r30 + isync + +print_common_0x28 + mfspr r30, dec + subf. r30, r29, r30 + ble- print_common_0x50 + li r30, 0x01 + stb r30, 0x0002(r28) + eieio + lbz r30, 0x0002(r28) + eieio + andi. r30, r30, 0x01 + beq+ print_common_0x28 + +print_common_0x50 + sync + mtmsr r31 + isync + mfspr r30, pvr + rlwinm. r30, r30, 0, 0, 14 + li r31, 0x00 + beq- print_common_0x78 + mtspr dbat3u, r31 + mtspr dbat3l, r31 + b print_common_0x80 + +print_common_0x78 + mtspr ibat3l, r31 + mtspr ibat3u, r31 + +print_common_0x80 + isync + mtspr srr0, r26 + mtspr srr1, r27 + +print_common_0x8c + sync + lwz r30, -0x0af0(r1) + cmpwi cr1, r30, 0x00 + li r30, 0x00 + bne+ cr1, print_common_0xa8 + mflr r30 + bl panic + +print_common_0xa8 + stw r30, -0x0af0(r1) + + + +; print_return + +; Restores registers from EWA and returns. + +; Xrefs: +; print_common +; getchar + +print_return ; OUTSIDE REFERER + mfsprg r1, 0 + lwz r24, -0x0110(r1) + lwz r25, -0x010c(r1) + mtlr r24 + mtcr r25 + lmw r24, -0x0108(r1) + lwz r1, -0x0004(r1) + blr + + + +; printd + +; _log decimal + +; Xrefs: +; setup +; NKPrintDecimal +; MPCall_108 +; NKSetClockStep +; NKSetClockDriftCorrection +; ExtendPool +; major_0x12b94 + +printd ; OUTSIDE REFERER + mfsprg r1, 0 + stmw r24, -0x0108(r1) + mflr r24 + mfcr r25 + stw r24, -0x0110(r1) + stw r25, -0x010c(r1) + lwz r1, -0x0004(r1) + lwz r28, -0x0900(r1) + lwz r29, 0x0edc(r1) + + _Lock PSA.DbugLock, scratch1=r30, scratch2=r31 + + cmpwi cr7, r28, 0x00 + andi. r29, r29, 0x02 + beq- cr7, printd_0x58 + crmove 30, 2 + beq- Printd_0x58 + bl serial_io + bl serial_flush + +printd_0x58 + cmpwi r8, 0x00 + li r25, 0x2d + blt- Printd_0x9c + +printd_0x64 + mr. r24, r8 + li r25, 0x30 + beq- Printd_0x9c + lis r24, 0x3b9a + ori r24, r24, 0xca00 + +printd_0x78 + divw. r25, r8, r24 + bne- Printd_0x8c + li r25, 0x0a + divw r24, r24, r25 + b Printd_0x78 + +printd_0x8c + divw r29, r8, r24 + addi r25, r29, 0x30 + mullw r29, r29, r24 + subf r8, r29, r8 + +printd_0x9c + bl serial_busywait + mr r29, r25 + +; r1 = kdp + bl ScreenConsole_putchar + beq- cr7, printd_0xc8 + ori r30, r31, 0x10 + mtmsr r30 + isync + stb r25, 0x0006(r28) + eieio + mtmsr r31 + isync + +printd_0xc8 + cmpwi r8, 0x00 + bge- Printd_0xd8 + neg r8, r8 + b Printd_0x64 + +printd_0xd8 + li r25, 0x0a + divw. r24, r24, r25 + bne+ Printd_0x8c + li r29, 0x20 + +; r1 = kdp + bl ScreenConsole_putchar + beq- cr7, printd_0x120 + ori r30, r31, 0x10 + mtmsr r30 + isync + +printd_0xfc + lbz r30, 0x0002(r28) + eieio + andi. r30, r30, 0x04 + beq+ Printd_0xfc + li r29, 0x20 + stb r29, 0x0006(r28) + eieio + mtmsr r31 + isync + +printd_0x120 + b print_common + + + +; printw + +; _log word (hex) then a space + +; Xrefs: +; replace_old_kernel +; setup +; AcquireLock +; spinlock_what +; major_0x02ccc +; IntMachineCheckMemRetry +; IntMachineCheck +; major_0x03ab0 +; kcResetSystem +; PagingFunc1 +; NKPrintHex +; NKCreateAddressSpaceSub +; createarea +; ExtendPool +; major_0x12b94 +; InitRDYQs +; major_0x14bcc +; panic +; print_xpt_info +; print_sprgs +; print_sprs +; print_segment_registers +; print_gprs +; print_memory +; print_memory_logical + +printw ; OUTSIDE REFERER + mfsprg r1, 0 + stmw r24, -0x0108(r1) + mflr r24 + mfcr r25 + stw r24, -0x0110(r1) + stw r25, -0x010c(r1) + li r24, 0x08 + crset cr6_eq + b print_digity_common + + + +; printh + +; _log halfword (hex) then a space + +; Xrefs: +; replace_old_kernel +; new_world +; NKPrintHex +; major_0x14bcc +; panic + +printh ; OUTSIDE REFERER + mfsprg r1, 0 + stmw r24, -0x0108(r1) + mflr r24 + mfcr r25 + stw r24, -0x0110(r1) + stw r25, -0x010c(r1) + li r24, 0x04 + rotlwi r8, r8, 0x10 + crset cr6_eq + b print_digity_common + + + +; printb + +; _log byte (hex) then a space + +; Xrefs: +; setup +; NKPrintHex + +printb ; OUTSIDE REFERER + mfsprg r1, 0 + stmw r24, -0x0108(r1) + mflr r24 + mfcr r25 + stw r24, -0x0110(r1) + stw r25, -0x010c(r1) + li r24, 0x02 + rotlwi r8, r8, 0x18 + crset cr6_eq + b print_digity_common + + + +; print_unknown + +; Xrefs: +; print_memory_logical + +print_unknown ; OUTSIDE REFERER + mfsprg r1, 0 + stmw r24, -0x0108(r1) + mflr r24 + mfcr r25 + stw r24, -0x0110(r1) + stw r25, -0x010c(r1) + li r24, 0x02 + rotlwi r8, r8, 0x18 + crclr cr6_eq + b print_digity_common + + + +; print_digity_common + +; Xrefs: +; Printw +; Printh +; Printb +; print_unknown + +print_digity_common ; OUTSIDE REFERER + lwz r1, -0x0004(r1) + lwz r28, -0x0900(r1) + lwz r29, 0x0edc(r1) + + _Lock PSA.DbugLock, scratch1=r30, scratch2=r31 + + cmpwi cr7, r28, 0x00 + andi. r29, r29, 0x02 + beq- cr7, print_digity_common_0x40 + crmove 30, 2 + beq- print_digity_common_0x40 + bl serial_io + bl serial_flush + +print_digity_common_0x40 + bl serial_busywait + li r25, 0x30 + rlwimi r25, r8, 4, 28, 31 + rotlwi r8, r8, 0x04 + cmpwi r25, 0x39 + ble- print_digity_common_0x5c + addi r25, r25, 0x27 + +print_digity_common_0x5c + mr r29, r25 + +; r1 = kdp + bl ScreenConsole_putchar + beq- cr7, print_digity_common_0x84 + ori r30, r31, 0x10 + mtmsr r30 + isync + stb r25, 0x0006(r28) + eieio + mtmsr r31 + isync + +print_digity_common_0x84 + addi r24, r24, -0x01 + mr. r24, r24 + bne+ print_digity_common_0x40 + bne- cr6, print_digity_common_0xd0 + li r29, 0x20 + +; r1 = kdp + bl ScreenConsole_putchar + beq- cr7, print_digity_common_0xd0 + ori r30, r31, 0x10 + mtmsr r30 + isync + +print_digity_common_0xac + lbz r30, 0x0002(r28) + eieio + andi. r30, r30, 0x04 + beq+ print_digity_common_0xac + li r29, 0x20 + stb r29, 0x0006(r28) + eieio + mtmsr r31 + isync + +print_digity_common_0xd0 + b print_common + + + +; getchar + +; Xrefs: +; panic +; print_memory +; print_memory_logical + +getchar ; OUTSIDE REFERER + mfsprg r1, 0 + stmw r24, -0x0108(r1) + mflr r24 + mfcr r25 + stw r24, -0x0110(r1) + stw r25, -0x010c(r1) + + lwz r1, EWA.PA_KDP(r1) + lwz r28, -0x0900(r1) + cmpwi cr7, r28, 0x00 + li r8, -0x01 + beq+ cr7, print_return + + _Lock PSA.DbugLock, scratch1=r30, scratch2=r31 + + bl serial_io + ori r30, r31, 0x10 + mtmsr r30 + isync + lbz r30, 0x0002(r28) + eieio + andi. r30, r30, 0x01 + beq+ print_common + lbz r8, 0x0006(r28) + b print_common + + + +; printc + +; _log char + +; Xrefs: +; spinlock_what +; major_0x12b94 +; panic +; print_memory +; print_memory_logical + +printc ; OUTSIDE REFERER + mfsprg r1, 0 + stmw r24, -0x0108(r1) + mflr r24 + mfcr r25 + stw r24, -0x0110(r1) + stw r25, -0x010c(r1) + lwz r1, -0x0004(r1) + lwz r28, -0x0900(r1) + lwz r29, 0x0edc(r1) + + _Lock PSA.DbugLock, scratch1=r30, scratch2=r31 + + cmpwi cr7, r28, 0x00 + andi. r29, r29, 0x02 + beq- cr7, printc_0x58 + crmove 30, 2 + beq- Printc_0x58 + bl serial_io + bl serial_flush + +printc_0x58 + mr r29, r8 + +; r1 = kdp + bl ScreenConsole_putchar + beq- cr7, printc_0x90 + ori r30, r31, 0x10 + mtmsr r30 + isync + +printc_0x70 + lbz r30, 0x0002(r28) + eieio + andi. r30, r30, 0x04 + beq+ Printc_0x70 + stb r8, 0x0006(r28) + eieio + mtmsr r31 + isync + +printc_0x90 + b print_common + + + +; serial_flush + +; This and the following func are a bit speculative, but +; whatever. + +; Whoa. Turns on data but not code paging. Crikey. + +; Xrefs: +; PrintS +; Printd +; print_digity_common +; Printc + +serial_flush ; OUTSIDE REFERER + ori r30, r31, MSR_DR + mtmsr r30 + isync + lbz r29, 0x0002(r28) + li r29, 0x09 + stb r29, 0x0002(r28) + eieio + li r29, 0x80 + stb r29, 0x0002(r28) + eieio + lbz r29, 0x0002(r28) + li r29, 0x04 + stb r29, 0x0002(r28) + eieio + li r29, 0x48 + stb r29, 0x0002(r28) + eieio + lbz r29, 0x0002(r28) + li r29, 0x03 + stb r29, 0x0002(r28) + eieio + li r29, 0xc0 + stb r29, 0x0002(r28) + eieio + lbz r29, 0x0002(r28) + li r29, 0x05 + stb r29, 0x0002(r28) + eieio + li r29, 0x60 + stb r29, 0x0002(r28) + eieio + lbz r29, 0x0002(r28) + li r29, 0x09 + stb r29, 0x0002(r28) + eieio + li r29, 0x00 + stb r29, 0x0002(r28) + eieio + lbz r29, 0x0002(r28) + li r29, 0x0a + stb r29, 0x0002(r28) + eieio + li r29, 0x00 + stb r29, 0x0002(r28) + eieio + lbz r29, 0x0002(r28) + li r29, 0x0b + stb r29, 0x0002(r28) + eieio + li r29, 0x50 + stb r29, 0x0002(r28) + eieio + lbz r29, 0x0002(r28) + li r29, 0x0c + stb r29, 0x0002(r28) + eieio + li r29, 0x00 + stb r29, 0x0002(r28) + eieio + lbz r29, 0x0002(r28) + li r29, 0x0d + stb r29, 0x0002(r28) + eieio + li r29, 0x00 + stb r29, 0x0002(r28) + eieio + lbz r29, 0x0002(r28) + li r29, 0x0e + stb r29, 0x0002(r28) + eieio + li r29, 0x01 + stb r29, 0x0002(r28) + eieio + lbz r29, 0x0002(r28) + li r29, 0x03 + stb r29, 0x0002(r28) + eieio + li r29, 0xc1 + stb r29, 0x0002(r28) + eieio + lbz r29, 0x0002(r28) + li r29, 0x05 + stb r29, 0x0002(r28) + eieio + li r29, 0xea + stb r29, 0x0002(r28) + eieio + mtmsr r31 + isync + blr + + + +; serial_io + +; See disclaimer above. + +; Xrefs: +; PrintS +; Printd +; print_digity_common +; getchar +; Printc + +serial_io ; OUTSIDE REFERER + mfspr r26, srr0 + mfspr r27, srr1 + isync + mfspr r30, pvr + rlwinm. r30, r30, 0, 0, 14 + rlwinm r29, r28, 0, 0, 14 + beq- serial_io_0x38 + li r30, 0x03 + or r30, r30, r29 + li r31, 0x3a + or r31, r31, r29 + mtspr dbat3l, r31 + mtspr dbat3u, r30 + b serial_io_0x50 + +serial_io_0x38 + li r30, 0x32 + or r30, r30, r29 + li r31, 0x40 + or r31, r31, r29 + mtspr ibat3u, r30 + mtspr ibat3l, r31 + +serial_io_0x50 + isync + mfmsr r31 + blr + + + +; serial_busywait + +; See disclaimer above. + +; Xrefs: +; PrintS +; Printd +; print_digity_common + +serial_busywait ; OUTSIDE + beqlr- cr7 + ori r30, r31, 0x10 + mtmsr r30 + isync + +serial_busywait_0x10 + lbz r30, 0x0002(r28) + eieio + andi. r30, r30, 0x04 + beq+ serial_busywait_0x10 + mtmsr r31 + isync + blr diff --git a/NanoKernel/NKEquates.s b/NanoKernel/NKEquates.s new file mode 100644 index 0000000..09145e3 --- /dev/null +++ b/NanoKernel/NKEquates.s @@ -0,0 +1,50 @@ +;_______________________________________________________________________ +; Equates for the whole NanoKernel +;_______________________________________________________________________ + + +kNanoKernelVersion equ $0228 + + +; PowerPC Machine Status Register (MSR) bits +; (borrowing the _bitEqu macro from NKInfoRecordsPriv.s) + + _bitEqu MSR_POW, 13 + _bitEqu MSR_ILE, 15 + _bitEqu MSR_EE, 16 + _bitEqu MSR_PR, 17 + _bitEqu MSR_FP, 18 + _bitEqu MSR_ME, 19 + _bitEqu MSR_FE0, 20 + _bitEqu MSR_SE, 21 + _bitEqu MSR_BE, 22 + _bitEqu MSR_FE1, 23 + _bitEqu MSR_IP, 25 + _bitEqu MSR_IR, 26 + _bitEqu MSR_DR, 27 + _bitEqu MSR_RI, 30 + _bitEqu MSR_LE, 31 + + +; Special Purpose Registers (SPRs) not understood by MPW + +l2cr equ 1017 + + +; Alignment for NanoKernel interrupt routines (mostly Interrupts.s) + +kIntAlign equ 5 + + + +; Junk + + +; IRP is 10 pages below KDP (measured start to start) +IRPOffset equ (-10) * 4096 +kKDPfromIRP equ 10 * 4096 + + + + +noErr equ 0 diff --git a/NanoKernel/NKIndex.s b/NanoKernel/NKIndex.s new file mode 100644 index 0000000..cfd4733 --- /dev/null +++ b/NanoKernel/NKIndex.s @@ -0,0 +1,298 @@ +;_______________________________________________________________________ +; NanoKernel Opaque ID Index +; +; Creates opaque structure IDs and stores them in the Pool. An opaque +; ID maps back to the (type, pointer) pair passed to MakeID. +; +; This abstraction is very important to the Multiprocessing Services. +; +; Rene on comp.sys.mac.programmer.help, 26 Oct 01: +; +; Total opaque IDs - The number of IDs currently in use. All MP +; objects: address spaces, areas, processors, memory coherence groups, +; queues, semaphores, critical regions, event groups, timers, +; notifications, etc. are assigned an ID when created, and they are +; accessed by way of this ID. The kernel presently handles 65,000 +; simultaneous IDs with a bit pattern reuse probability of 1 in 4 +; billion. +;_______________________________________________________________________ + +Local_Panic set * + b panic + + + +; ARG KDP *r1 + +InitIDIndex + mflr r23 + + li r8, Index.Size + bl PoolAlloc + + mr. r22, r8 + stw r8, PSA.IndexPtr(r1) + beq+ Local_Panic + + li r9, 0 + stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.IDCtr(r1) + + sth r9, Index.HalfOne(r22) + sth r9, Index.HalfTwo(r22) + + lisori r9, Index.kSignature + stw r9, Index.Signature(r22) + + + ; Then what the hell is this? + li r8, 0xfd8 + bl PoolAlloc + + cmpwi r8, 0 + stw r8, Index.IDsPtr(r22) + beq+ Local_Panic + + mtlr r23 + + li r9, 0x00 + sth r9, 0x0000(r8) + li r9, 0x1fa + sth r9, 0x0002(r8) + lisori r9, 'IDs ' + stw r9, 0x0004(r8) + blr + + + +; ARG void *r8, IDClass r9 +; RET ID r8 + +MakeID + lwz r18, -0x0a98(r1) + lhz r19, 0x0000(r18) + mr r21, r19 + +@_c + lwz r18, -0x0a98(r1) + rlwinm r20, r19, 25, 23, 29 + addi r20, r20, 0x08 + clrlwi. r19, r19, 0x17 + lwzx r18, r18, r20 + slwi r22, r19, 3 + addi r20, r18, 0x08 + cmpwi r18, 0x00 + add r22, r22, r20 + bne- @_48 + li r19, 0x00 + b @_c + +@_3c + add r20, r20, r19 + cmpw r20, r21 + beq- @_70 + +@_48 + lbz r23, 0x0000(r22) + cmpwi r23, 0x00 + beq- @_f0 + addi r19, r19, 0x01 + cmpwi cr1, r19, 0x1fa + addi r22, r22, 0x08 + lhz r20, 0x0000(r18) + blt+ cr1, @_3c + addi r19, r20, 0x200 + b @_c + +@_70 + lwz r18, -0x0a98(r1) + mr r21, r8 + lhz r19, 0x0002(r18) + mr r22, r9 + addi r19, r19, 0x200 + rlwinm. r20, r19, 25, 23, 29 + li r8, 0x00 + beqlr- + mflr r23 + li r8, 0xfd8 + +; r1 = kdp +; r8 = size + bl PoolAlloc +; r8 = ptr + + mr. r18, r8 + mtlr r23 + li r8, 0x00 + beqlr- + lwz r17, -0x0a98(r1) + lhz r19, 0x0002(r17) + addi r19, r19, 0x200 + rlwinm r20, r19, 25, 23, 29 + addi r20, r20, 0x08 + sth r19, 0x0002(r17) + stwx r18, r20, r17 + sth r19, 0x0000(r18) + li r9, 0x1fa + sth r9, 0x0002(r18) + lis r9, 0x4944 + ori r9, r9, 0x7320 + stw r9, 0x0004(r18) + li r19, 0x00 + mr r8, r21 + mr r9, r22 + addi r22, r18, 0x08 + +@_f0 + stw r8, 0x0004(r22) + stb r9, 0x0000(r22) + lwz r9, KDP.NanoKernelInfo + NKNanoKernelInfo.IDCtr(r1) + addi r9, r9, 0x01 + stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.IDCtr(r1) + lhz r20, 0x0000(r18) + lhz r8, 0x0002(r22) + lwz r21, -0x0a98(r1) + add r19, r19, r20 + addi r8, r8, 0x01 + lhz r20, 0x0002(r18) + sth r8, 0x0002(r22) + addi r20, r20, -0x01 + rlwimi. r8, r19, 16, 0, 15 + sth r20, 0x0002(r18) + sth r19, 0x0000(r21) + bnelr+ + lhz r8, 0x0002(r22) + addi r8, r8, 0x01 + sth r8, 0x0002(r22) + rlwimi r8, r19, 16, 0, 15 + blr + + + +; ARG ID r8 + + align 5 + +DeleteID + rlwinm r20, r8, 9, 23, 29 + lwz r18, -0x0a98(r1) + addi r20, r20, 0x08 + rlwinm. r19, r8, 16, 23, 31 + lwzx r18, r18, r20 + cmplwi cr1, r19, 0x1fa + cmpwi r18, 0x00 + addi r20, r18, 0x08 + slwi r22, r19, 3 + add r22, r22, r20 + clrlwi r20, r8, 0x10 + li r8, 0x00 + bgelr- cr1 + beqlr- + lbz r19, 0x0000(r22) + lhz r23, 0x0002(r22) + cmpwi r19, 0x00 + cmpw cr1, r23, r20 + beqlr- + bnelr- cr1 + lwz r9, KDP.NanoKernelInfo + NKNanoKernelInfo.IDCtr(r1) + addi r9, r9, -0x01 + stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.IDCtr(r1) + lhz r20, 0x0002(r18) + stb r8, 0x0000(r22) + addi r20, r20, 0x01 + li r8, 0x01 + sth r20, 0x0002(r18) + blr + + + +; ARG ID r8 +; RET Ptr r8, IDClass r9 + + align 5 + +LookupID + rlwinm r20, r8, 9, 23, 29 + lwz r18, -0x0a98(r1) + addi r20, r20, 0x08 + rlwinm. r19, r8, 16, 23, 31 + lwzx r18, r18, r20 + cmplwi cr1, r19, 0x1fa + cmpwi r18, 0x00 + addi r20, r18, 0x08 + slwi r22, r19, 3 + add r22, r22, r20 + clrlwi r20, r8, 0x10 + li r8, 0x00 + li r9, 0x00 + bgelr- cr1 + beqlr- + lbz r19, 0x0000(r22) + lhz r23, 0x0002(r22) + cmpwi r19, 0x00 + cmpw cr1, r23, r20 + beqlr- + bnelr- cr1 + lwz r8, 0x0004(r22) + mr r9, r19 + blr + + + +; ARG ID r8, IDClass r9 +; RET ID r8 + + align 5 + +GetNextIDOfClass + rlwinm r20, r8, 9, 23, 29 + lwz r18, -0x0a98(r1) + addi r20, r20, 0x08 + rlwinm. r19, r8, 16, 23, 31 + lwzx r18, r18, r20 + cmplwi cr1, r19, 0x1fa + cmpwi r18, 0x00 + cmpwi cr2, r8, 0x00 + addi r20, r18, 0x08 + slwi r22, r19, 3 + li r8, 0x00 + bgelr- cr1 + beqlr- + add r22, r22, r20 + bne- cr2, @_48 + +@_3c + lbz r23, 0x0000(r22) + cmpwi r23, 0x00 + bne- @_8c + +@_48 + addi r19, r19, 0x01 + cmpwi r19, 0x1fa + addi r22, r22, 0x08 + blt+ @_3c + lhz r20, 0x0000(r18) + addi r20, r20, 0x200 + rlwinm. r20, r20, 25, 23, 29 + lwz r18, -0x0a98(r1) + beqlr- + addi r20, r20, 0x08 + li r19, 0x00 + lwzx r18, r18, r20 + cmpwi r18, 0x00 + addi r22, r18, 0x08 + bne+ @_3c + li r8, 0x00 + blr + +@_8c + cmpwi r9, 0x00 + cmpw cr1, r9, r23 + beq- @_9c + bne+ cr1, @_48 + +@_9c + lhz r20, 0x0000(r18) + lhz r8, 0x0002(r22) + add r19, r19, r20 + rlwimi r8, r19, 16, 0, 15 + blr diff --git a/NanoKernel/NKInit.s b/NanoKernel/NKInit.s new file mode 100644 index 0000000..1b54609 --- /dev/null +++ b/NanoKernel/NKInit.s @@ -0,0 +1,2134 @@ +;_______________________________________________________________________ +; START OF NANOKERNEL +; +; Init.s is the first code file included by NanoKernel.s. It contains: +; the NanoKernel header (both declarative and executable) +; +; The NanoKernel header follows: +;_______________________________________________________________________ + + + + +; This is the entry point from the Trampoline (our Open Firmware-savvy +; bootloader for NewWorld Macs, which is part of the Mac OS ROM file). +; +; When we receive control: +; r3 = ConfigInfo +; r4 = ProcessorInfo +; r5 = SystemInfo +; r6 = DiagInfo +; r7 = RTAS_flag ('RTAS' or 0) +; r8 = RTAS_proc +; r9 = HWInfo +; (and also, we can be sure that we are executing from the +; NewWorld ROM image that the Trampoline loaded into RAM) +; +; First we need to avoid executing the data that follows: + + b EndOfNanoKernelHeader + + + +; On OldWorld Macs, the 68k code in the 'boot' 3 resource +; (of the System or enabler file) loads the NanoKernel +; from the 'krnl' 0 resource (of the System file), and +; uses it to replace the ROM kernel. +; +; This code probably uses the following header: + + dc.w kNanoKernelVersion + dc.w 12 + dc.w 0x400 + dc.w 0 +EndOfNanoKernelHeader + + + +; Do some sanity checking after receiving control from the Trampoline. + + ; cr5_eq is cleared for the builtin init process + + crclr cr5_eq + + + ; If data paging is off, jump straight to the builtin init code + + mfmsr r0 + rlwinm. r0, r0, 0, MSR_DRbit, MSR_DRbit + beql- InitBuiltin + + + ; But if data paging is on, do some very strange things... + + ; Does LR contain a return address, or my address, or...? + mflr r9 + subi r9, r9, 28 + + ; Prepare to jump to one of the filthy branch instructions + ; that Trampoline stuffs into ConfigInfo + addi r12, r3, 64 + + ; Unset MSR_POW, MSR_ILE, MSR_EE, MSR_IR and MSR_DR + mfmsr r11 + li r10, -0x7fd0 + andc r11, r11, r10 + + ; Jump and set MSR with an RFI. + mtspr srr0, r12 + mtspr srr1, r11 + rfi + + + +; This (offset 0x40) is the entry point from 'boot' 3 on OldWorld. +; +; The offset *might* be encoded in the header above! +; +; When we receive control: +; sprg0 = old KDP/EWA/r1 ptr +; r3 = PA_NanoKernelCode +; r4 = physical base of our global area +; r5 = NoIdeaR23 +; r6 = PA_EDP or zero? +; r7 = ROMHeader.ROMRelease (e.g. 0x10B5 is 1.0ß5) +; +; For clarity, the NanoKernel-replacement code is included from +; another file. It copies the old kernel structures to a new area +; and adopts them as our own, with some modifications. +; +; Jumps to InitHighLevel (below) when finished. + + include 'NKReplacementInit.s' + + + +; Function that fills a new InfoRecord Page (IRP) with the +; bus error-eliciting value, 0x68f1. +; (called by both builtin and replacement code paths) + +; CLOB r10, r12 + +InitIRP + lwz r12, EWA.PA_IRP(r1) + +@wipe_loop + lisori r10, 0x68f168f1 + stw r10, 0(r12) + stw r10, 4(r12) + addi r12, r12, 8 + andi. r10, r12, 0xfff + bne+ @wipe_loop + blr + + + +; This is the code that does the bulk of the builtin-specific init. +; +; If the Trampoline has not passed in a valid HWInfo struct then +; this code will depend on ProcessorInfoTable.s. In that case it +; will jump to ProcessorInfoTable.s:OverrideProcessorInfo, which +; will fall though to FinishInitBuiltin. +; +; But normally, this code will jump straight to FinishInitBuiltin. + + include 'NKBuiltinInit.s' + + + +; Table used by the common init code (below) to fill some KDP flags +; indicating processor capabilities (e.g. presence of L2CR register) +; +; No code here. + + include 'NKProcFlagsTbl.s' + + + +; Table used by the builtin init code (above) to populate some of +; the ProcessorInfo struct when information from the Trampoline +; is lacking. +; +; Includes OverrideProcessorInfo code for use by InitBuiltin.s. +; This code falls through to FinishInitBuiltin below. + + include 'NKProcInfoTbl.s' + + + +; Tidy up the builtin init process before joining the common +; init code path. +; +; This code might be accessed by fall-through from +; ProcessorInfoTable.s:OverrideProcessorInfo, or by branch +; from InitBuiltin.s + +FinishInitBuiltin + + ; Set ProcessorInfo version in case ProcessorInfo had to be loaded + ; from the table above. + + li r8, 0x0112 + sth r8, KDP.InfoRecord + InfoRecord.NKProcessorInfoVer(r1) + + + ; Copy some choice values out of KDP's copy of NKProcessorInfo + + lwz r9, KDP.ProcessorInfo + NKProcessorInfo.DecClockRateHz(r1) + stw r9, KDP.ProcessorInfo + NKProcessorInfo.DecClockRateHzCopy(r1) + + lwz r9, KDP.ProcessorInfo + NKProcessorInfo.BusClockRateHz(r1) + stw r9, KDP.ProcessorInfo + NKProcessorInfo.BusClockRateHzCopy(r1) + + lwz r9, KDP.ProcessorInfo + NKProcessorInfo.CpuClockRateHz(r1) + stw r9, KDP.ProcessorInfo + NKProcessorInfo.CpuClockRateHzCopy(r1) + + li r9, 0 + sth r9, KDP.ProcessorInfo + NKProcessorInfo.SetToZero(r1) + + lwz r8, KDP.ProcessorInfo + NKProcessorInfo.DecClockRateHz(r1) + stw r8, PSA.DecClockRateHzCopy(r1) + + + ; Test AltiVec and MQ registers + + ; Prepare a simple vector table to ignore illegal + ; instructions (like lvewx on a G3 ;) + lwz r9, KDP.PA_NanoKernelCode(r1) + + llabel r8, IgnoreSoftwareInt + add r8, r8, r9 + stw r8, KDP.YellowVecBase + VecTable.ProgramIntVector(r1) + + llabel r8, HandlePerfMonitorInt + add r8, r8, r9 + stw r8, KDP.YellowVecBase + VecTable.PerfMonitorVector(r1) + + addi r8, r1, KDP.YellowVecBase + mtsprg 3, r8 + + + ; Test MQ and save feature field + lis r8, 1 << (15 - PSA.MQFeatureBit) + mtspr mq, r8 + li r8, 0 + mfspr r8, mq + stw r8, PSA.EmpiricalCpuFeatures(r1) + + ; Add AV and save that in scratch field + oris r9, r8, 1 << (15 - PSA.AVFeatureBit) + stw r9, EWA.r0(r1) + + ; Load from scratch field into a vector register + addi r9, r1, 0 + lvewx v0, 0, r9 + + ; Save MQ into the scratch register in case vector save fails + stw r8, EWA.r0(r1) + + ; Try save vector register (with AV flag) to scratch field + stvewx v0, 0, r9 + + ; Scratch field now contains AltiVec and MQ flags. + ; Copy it to EmpiricalCpuFeatures + lwz r8, EWA.r0(r1) + stw r8, PSA.EmpiricalCpuFeatures(r1) + + ; AllCpuFeatures = EmpiricalCpuFeatures | 0x00a00000 + oris r7, r8, 0xa0 + stw r7, EWA.Flags(r1) + + + ; Emulator data and code pointers useful for the common code path? + + lwz r6, KDP.PA_ECB(r1) + lwz r10, KDP.LA_EmulatorKernelTrapTable(r1) + + + ; Create MSR (machine status register) values for use by the common code path + + mfmsr r14 + + ; Zero out a reserved bit. Considering next insn, should have no effect + rlwinm r14, r14, 0, 7, 5 + + ; Test for and keep MSR_IP (IVT location) flag + ; (presumably set by Trampoline) + andi. r14, r14, MSR_IP + + ; "KernelModeMSR" -- Seems not to get used? + ori r15, r14, MSR_ME + MSR_DR + MSR_RI + + ; "MSR" + ori r11, r14, MSR_EE + MSR_PR + MSR_ME + MSR_IR + MSR_DR + MSR_RI + stw r11, PSA.UserModeMSR(r1) + + + ; Zero out a bunch of registers. + + li r13, 0 + li r12, 0 + li r0, 0 + li r2, 0 + li r3, 0 + li r4, 0 + + + +; The builtin kernel can be partly reinited by a 68k RESET trap. +; Rene says this is for address space setup. + +ResetBuiltinKernel + + crclr cr5_eq + + + +; The common code path! InitIRP has been called but IRP is +; otherwise untouched (InfoRecord still in KDP). +; +; We get here by a jump from InitReplacement.s +; or by fallthough from FinishInitBuiltin above. +; +; When we get here: +; cr5_eq = is_replacement_kernel +; cr0 will be set if IVT is in high meg (MSR.IP) +; r1 = KDP +; r2 = 0 +; r3 = 0 +; r4 = 0 +; r5 = SystemInfo +; r6 = PA_ECB +; r7 = AllCpuFeatures +; r8 = EmpiricalCpuFeatures +; r9 = even more altivec crud +; r10 = LA_EmulatorKernelTrapTable +; r11 = MSR +; r12 = 0 +; r13 = 0 +; r15 = KernelModeMSR + +InitHighLevel + + +; The XER contains carries, overflows and string lengths. +; Apple seems to use it for all sorts of crap. + + mfxer r17 + stw r17, ContextBlock.XER(r6) + + + +; Boring intro from the high-level init code + + _log 'Kernel code base at 0x' + + lwz r8, KDP.PA_NanoKernelCode(r1) + mr r8, r8 + bl Printw + + _log ' Physical RAM size 0x' + + lwz r8, EWA.PA_IRP(r1) + lwz r8, IRP.SystemInfo + NKSystemInfo.PhysicalMemorySize(r8) + mr r8, r8 + bl Printw + + _log 'bytes^n' + + + +; Copy InfoRecord from KDP to IRP. +; (Does this become the authoritative version?) + + lisori r22, InfoRecord.Size + lwz r9, EWA.PA_IRP(r1) + addi r8, r1, KDP.InfoRecord + addi r9, r9, IRP.InfoRecord + +@loop + subic. r22, r22, 4 + lwzx r0, r22, r8 + stwx r0, r22, r9 + bgt+ @loop + + + +; Some useful values for filling tables + + lwz r26, KDP.PA_ConfigInfo(r1) + lwz r25, KDP.PA_NanoKernelCode(r1) + lwz r18, KDP.PA_PageMapStart(r1) + + + +; A quick reminder about wordfill: +; ARG void *r3 dest, long r22 len, long r23 fill + + + +; Fill with Panics: Yellow, Orange, Red (KDP) +; Violet, Blue (PSA) + + llabel r23, panic + add r23, r23, r25 + + addi r8, r1, KDP.YellowVecBase + li r22, VecTable.Size + bl wordfill + + addi r8, r1, KDP.OrangeVecBase + li r22, VecTable.Size + bl wordfill + + addi r8, r1, KDP.RedVecBase + li r22, VecTable.Size + bl wordfill + + addi r8, r1, PSA.VioletVecBase + li r22, VecTable.Size + bl wordfill + + addi r8, r1, PSA.BlueVecBase + li r22, VecTable.Size + bl wordfill + + + +; Fill Green (PSA) with IgnoreSoftwareInt + + llabel r23, IgnoreSoftwareInt + add r23, r23, r25 + + addi r8, r1, PSA.GreenVecBase + li r22, VecTable.Size + bl wordfill + + + +; Activate Yellow and fill Yellow and Orange (KDP) + + addi r9, r1, KDP.YellowVecBase + mtsprg 3, r9 + + addi r8, r1, KDP.OrangeVecBase + + llabel r23, panic + add r23, r23, r25 + stw r23, VecTable.SystemResetVector(r9) + stw r23, VecTable.SystemResetVector(r8) + + llabel r23, IntMachineCheck + add r23, r23, r25 + stw r23, VecTable.MachineCheckVector(r9) + stw r23, VecTable.MachineCheckVector(r8) + + llabel r23, IntDSI + add r23, r23, r25 + stw r23, VecTable.DSIVector(r9) + stw r23, VecTable.DSIVector(r8) + + llabel r23, IntISI + add r23, r23, r25 + stw r23, VecTable.ISIVector(r9) + stw r23, VecTable.ISIVector(r8) + + ; Difference: Yellow seems more likely to reach PIH + llabel r23, IntExternalYellow + add r23, r23, r25 + stw r23, VecTable.ExternalIntVector(r9) ; yellow + + llabel r23, IntExternalOrange + add r23, r23, r25 + stw r23, VecTable.ExternalIntVector(r8) ; orange + + llabel r23, IntAlignment + add r23, r23, r25 + stw r23, VecTable.AlignmentIntVector(r9) + stw r23, VecTable.AlignmentIntVector(r8) + + llabel r23, IntProgram + add r23, r23, r25 + stw r23, VecTable.ProgramIntVector(r9) + stw r23, VecTable.ProgramIntVector(r8) + + llabel r23, IntFPUnavail + add r23, r23, r25 + stw r23, VecTable.FPUnavailVector(r9) + stw r23, VecTable.FPUnavailVector(r8) + + llabel r23, IntDecrementer + add r23, r23, r25 + stw r23, VecTable.DecrementerVector(r9) + stw r23, VecTable.DecrementerVector(r8) + + llabel r23, IntSyscall + add r23, r23, r25 + stw r23, VecTable.SyscallVector(r9) + stw r23, VecTable.SyscallVector(r8) + + llabel r23, IntPerfMonitor + add r23, r23, r25 + stw r23, VecTable.PerfMonitorVector(r9) + stw r23, VecTable.PerfMonitorVector(r8) + + llabel r23, IntTrace + add r23, r23, r25 + stw r23, VecTable.TraceVector(r9) + stw r23, VecTable.TraceVector(r8) + stw r23, 0x0080(r9) ; Unexplored parts of vecBase + stw r23, 0x0080(r8) + + llabel r23, FDP_1c40 ; seems AltiVec-related + add r23, r23, r25 + stw r23, 0x0058(r9) + stw r23, 0x0058(r8) + + llabel r23, IntThermalEvent ; thermal event + add r23, r23, r25 + stw r23, VecTable.ThermalEventVector(r9) + stw r23, VecTable.ThermalEventVector(r8) + + + +; Fill Red (KDP), used while were emulating some instructions + + addi r8, r1, KDP.RedVecBase + + llabel r23, panic + add r23, r23, r25 + stw r23, VecTable.SystemResetVector(r8) + + llabel r23, IntMachineCheckMemRetry + add r23, r23, r25 + stw r23, VecTable.MachineCheckVector(r8) + + llabel r23, IntDSIOtherOther + add r23, r23, r25 + stw r23, VecTable.DSIVector(r8) + + llabel r23, IntSyscall + add r23, r23, r25 + stw r23, VecTable.SyscallVector(r8) + + + +; Fill Violet (PSA) + + ; Fill everything with this + llabel r23, major_0x04a20 + add r23, r23, r25 + addi r8, r1, PSA.VioletVecBase + li r22, VecTable.Size + bl wordfill + + ; Then override with these + llabel r23, panic + add r23, r23, r25 + stw r23, VecTable.SystemResetVector(r8) + + llabel r23, IntDSI + add r23, r23, r25 + stw r23, VecTable.DSIVector(r8) + + llabel r23, IntISI + add r23, r23, r25 + stw r23, VecTable.ISIVector(r8) + + llabel r23, IntAlignment + add r23, r23, r25 + stw r23, VecTable.AlignmentIntVector(r8) + + + +; Fill Indigo (PSA). All panics, except for IntIndigo in: +; - SystemResetVector +; - ExternalIntVector +; - DecrementerVector + + bl FillIndigo + + + +; Fill Blue (PSA) + + addi r8, r1, PSA.BlueVecBase + + llabel r23, panic + add r23, r23, r25 + stw r23, VecTable.SystemResetVector(r8) + + llabel r23, IntMachineCheck + add r23, r23, r25 + stw r23, VecTable.MachineCheckVector(r8) + + llabel r23, IntDSIOther + add r23, r23, r25 + stw r23, VecTable.DSIVector(r8) + + llabel r23, IntSyscall + add r23, r23, r25 + stw r23, VecTable.SyscallVector(r8) + + + +; Fill the NanoKernelCallTable, the IntProgram interface to the NanoKernel + + ; Start with a default function + + llabel r23, major_0x046d0 + add r23, r23, r25 + + addi r8, r1, KDP.NanoKernelCallTable + + li r22, NanoKernelCallTable.Size + +@kctab_initloop + subic. r22, r22, 4 + stwx r23, r8, r22 + bne+ @kctab_initloop + + + ; Then some overrides (names still pretty poor) + + llabel r23, kcReturnFromException + add r23, r23, r25 + stw r23, NanoKernelCallTable.ReturnFromException(r8) + + llabel r23, kcRunAlternateContext + add r23, r23, r25 + stw r23, NanoKernelCallTable.RunAlternateContext(r8) + + llabel r23, kcResetSystem + add r23, r23, r25 + stw r23, NanoKernelCallTable.ResetSystem(r8) + + llabel r23, kcVMDispatch + add r23, r23, r25 + stw r23, NanoKernelCallTable.VMDispatch(r8) + + llabel r23, kcPrioritizeInterrupts + add r23, r23, r25 + stw r23, NanoKernelCallTable.PrioritizeInterrupts(r8) + + llabel r23, kcPowerDispatch + add r23, r23, r25 + stw r23, NanoKernelCallTable.PowerDispatch(r8) + + llabel r23, kcRTASDispatch + add r23, r23, r25 + stw r23, NanoKernelCallTable.RTASDispatch(r8) + + llabel r23, kcCacheDispatch + add r23, r23, r25 + stw r23, NanoKernelCallTable.CacheDispatch(r8) + + llabel r23, kcMPDispatch + add r23, r23, r25 + stw r23, NanoKernelCallTable.MPDispatch(r8) + + llabel r23, kcThud + add r23, r23, r25 + stw r23, NanoKernelCallTable.Thud(r8) + + + +; Set ProcessorFlags (and two other bytes) from PVR. +; Nigh unforgivably ugly code, but ProcessorFlagsTable.s +; describes what it does pretty well. + +SetProcessorFlags + + mfpvr r23 + srwi r23, r23, 16 + andi. r8, r23, 0x8000 + bne- @pvr_has_high_bit_set + + ; PVR < 0x8000 (therefore probably equals 000*) + cmplwi r23, 0x000f ; but if not, pretend it's zero + ble- @pvr_not_low + li r23, 0x0000 +@pvr_not_low + + add r8, r25, r23 + lbz r23, ProcessorFlagsTable - NKTop + 0(r8) + stb r23, KDP.CpuSpecificByte1(r1) + lbz r23, ProcessorFlagsTable - NKTop + 32(r8) + stb r23, KDP.CpuSpecificByte2(r1) + mfpvr r23 + srwi r23, r23, 16 + slwi r23, r23, 2 + add r8, r25, r23 + lwz r23, ProcessorFlagsTable - NKTop + 64(r8) + stw r23, KDP.ProcessorInfo + NKProcessorInfo.ProcessorFlags(r1) + b @done + +@pvr_has_high_bit_set + andi. r23, r23, 0x7fff + + cmplwi r23, 0x000f + ble- @other_pvr_not_low + li r23, -0x10 +@other_pvr_not_low + + add r8, r25, r23 + lbz r23, ProcessorFlagsTable - NKTop + 16(r8) + stb r23, KDP.CpuSpecificByte1(r1) + lbz r23, ProcessorFlagsTable - NKTop + 48(r8) + stb r23, KDP.CpuSpecificByte2(r1) + mfpvr r23 + srwi r23, r23, 16 + andi. r23, r23, 0x7fff + slwi r23, r23, 2 + add r8, r25, r23 + lwz r23, ProcessorFlagsTable - NKTop + 128(r8) + stw r23, KDP.ProcessorInfo + NKProcessorInfo.ProcessorFlags(r1) + b @done + +@done + + +; These look like two-word structures. Not yet sure what they are. + + li r23, -1 + stw r23, KDP.MinusOne1(r1) ; kdp.0x340 + stw r23, KDP.MinusOne2(r1) ; kdp.0x348 + stw r23, KDP.MinusOne3(r1) ; kdp.0x350 + stw r23, KDP.MinusOne4(r1) ; kdp.0x358 + + + +; Initialize the seven kernel locks (Count and Signature fields) + + li r23, 0 + stw r23, PSA.HTABLock + Lock.Count(r1) + stw r23, PSA.PIHLock + Lock.Count(r1) + stw r23, PSA.SchLock + Lock.Count(r1) + stw r23, PSA.ThudLock + Lock.Count(r1) + stw r23, PSA.RTASLock + Lock.Count(r1) + stw r23, PSA.DbugLock + Lock.Count(r1) + stw r23, PSA.PoolLock + Lock.Count(r1) + + lisori r23, Lock.kHTABLockSignature + stw r23, PSA.HTABLock + Lock.Signature(r1) + + lisori r23, Lock.kPIHLockSignature + stw r23, PSA.PIHLock + Lock.Signature(r1) + + lisori r23, Lock.kSchLockSignature + stw r23, PSA.SchLock + Lock.Signature(r1) + + lisori r23, Lock.kThudLockSignature ; older kernel versions have a powr lock? + stw r23, PSA.ThudLock + Lock.Signature(r1) + + lisori r23, Lock.kRTASLockSignature + stw r23, PSA.RTASLock + Lock.Signature(r1) + + lisori r23, Lock.kDbugLockSignature + stw r23, PSA.DbugLock + Lock.Signature(r1) + + lisori r23, Lock.kPoolLockSignature + stw r23, PSA.PoolLock + Lock.Signature(r1) + + + +; These seem to be register templates. + + lisori r17, 0x7fffdead + + stw r17, PSA.VectorRegInitWord(r1) + stw r17, PSA.SevenFFFDead2(r1) + stw r17, PSA.SevenFFFDead3(r1) + stw r17, PSA.SevenFFFDead4(r1) + + + +; Set up the not-quite-a-heap 'pool' of dynamic NanoKernel storage. +; +; And then set up the structure (hash table?) mapping opaque +; usermode-facing IDs with numeric types to storage blocks. + + bl InitPool + bl InitIDIndex + + + +; Leave AllCpuFeatures in r7 for use waaaaay down there... + + lwz r7, EWA.Flags(r1) + + + +; Create a blue process to own the blue and idle tasks + + ; Allocate and check + li r8, 32 ;Process.Size + bl PoolAlloc ; takes size and returns ptr, all in r8 + + mr. r31, r8 + beq- Init_Panic + + ; Get opaque ID + li r9, Process.kIDClass + bl MakeID + + ; Point KDP to it + stw r31, PSA.blueProcessPtr(r1) + + ; Save ID in self and KDP + stw r8, Process.ID(r31) + stw r8, KDP.NanoKernelInfo + NKNanoKernelInfo.blueProcessID(r1) + + ; Sign it + lisori r8, Process.kSignature + stw r8, Process.Signature(r31) + + ; blue and idle + li r8, 2 + stw r8, Process.TaskCount(r31) + + + +; Create a GRPS struct in KDP. Make it into an +; infinite linked list for adoption by coherence group. +; So leave ptr in r30. + + addi r30, r1, PSA.FirstGRPS + InitList r30, GRPSStruct.kSignature, scratch=r17 + + + +; Create the motherboard coherence group (CGRP, ID class 10) in the pool. +; Owns a linked list of GRPSes, is itself a linked list member. +; Leave ptr in r29. + + ; Allocate the main structure in the kernel pool, and check for a null ptr + li r8, 0x58 ;CoherenceGroup.Size + bl PoolAlloc + mr. r31, r8 + beq- Init_Panic + + + ; Adopt the above-created list of GRPS structs (only one so far) + addi r17, r31, CoherenceGroup.GRPSList + stw r30, LLL.Freeform(r17) + InsertAsPrev r17, r30, scratch=r18 + + + ; Make me into an infinite linked list for adoption by CPU struct. + addi r29, r31, CoherenceGroup.LLL + InitList r29, CoherenceGroup.kSignature, scratch=r17 + + + ; Get opaque ID + mr r8, r31 + li r9, CoherenceGroup.kIDClass + bl MakeID + stw r8, CoherenceGroup.LLL + LLL.Freeform(r31) + + + ; Congratulate ourselves + mr r16, r8 ; Print macro clobbers r8 (opaque ID), so save it + + _log 'Created motherboard coherence group. ID ' + + mr r8, r16 + bl Printw + + _log '^n' + + + ; Fill in some actual fields (then still have 48 unused bytes) + li r16, 1 + stw r16, CoherenceGroup.CpuCount(r31) + stw r16, CoherenceGroup.ScheduledCpuCount(r31) + + + ; problem: expecting to see more stuff set here + + + +; Create a CPU struct in KDP with a linked list of coherence groups + + ; Place + subi r31, r1, CPU.EWA + addi r30, r31, CPU.EWABase + + + ; Get opaque ID + mr r8, r31 + li r9, CPU.kIDClass + bl MakeID + + + ; Identify and sign + stw r8, CPU.ID(r31) + + lisori r8, CPU.kSignature + stw r8, CPU.Signature(r31) + + + ; Adopt the above-created coherence group list + addi r17, r31, CPU.CgrpList + + stw r29, LLL.Freeform(r17) + InsertAsPrev r17, r29, scratch=r18 + + + ; Actually populate something useful (still have one unused long) + lisori r8, 15 + stw r8, CPU.Eff(r31) + + ; Matches code in KCCreateCpuStruct very closely + + addi r8, r1, PSA.Base + stw r8, EWA.PA_PSA - EWA.Base(r30) + + + stw r1, EWA.PA_KDP - EWA.Base(r30) + + li r8, 0 + stw r8, 0x0318(r30) ; -0x28 + sth r8, 0x020a(r30) ; -0x136 + + lisori r8, 'time' + stw r8, 0x0004(r30) + + li r8, 0x04 + stb r8, 0x0014(r30) + + li r8, 0x01 + stb r8, 0x0016(r30) + + li r8, 0x00 + stb r8, 0x0017(r30) + + lisori r8, 0x7fffffff + stw r8, 0x0038(r30) + + oris r8, r8, 0xffff + stw r8, 0x003c(r30) + + + +; Copy the 32-element BATRangeInit array from ConfigInfo +; For odd-indexed longs (offsets 0x*4 and 0x*c) with bit 22 set: +; - unset that bit +; - increment the value by PA_ConfigInfo (so... they were relative?) + + lwz r26, KDP.PA_ConfigInfo(r1) + addi r9, r26, NKConfigurationInfo.BATRangeInit - 4 + addi r8, r1, KDP.BATs - 4 + li r22, 0x80 + +@BAT_copyloop + lwzu r20, 4(r9) ; grab 8 bytes + lwzu r21, 4(r9) + + stwu r20, 4(r8) ; store the first byte directly + + rlwinm r23, r21, 0, 23, 21 ; munge the second byte + cmpw r21, r23 + + beq- @bitnotset + add r21, r23, r26 +@bitnotset + + addic. r22, r22, -8 + stwu r21, 4(r8) ; but store it eventually + bgt+ @BAT_copyloop + + + +; Create a 'system' address space owned by the motherboard coherence +; group and by the MacOS process that we created earlier. +; Leave a ptr to the new AddressSpace in r30 and its ID in r16. + + li r8, 0 + lwz r9, PSA.blueProcessPtr(r1) + + ; ARG MPCoherenceID r8 owningCOHG ; 0 to use mobo COHG + ; Process *r9 owningPROC + + bl NKCreateAddressSpaceSub + + ; RET MPErr r8 + ; AddressSpace *r9 + + cmpwi r8, 0 + mr r30, r9 + bne- Init_Panic + + + ; The relationship between SPACes and PROCs is still unclear... + lwz r31, PSA.blueProcessPtr(r1) + + + ; Save the new addr spc ID in system process struct and KDP + lwz r16, AddressSpace.ID(r30) + stw r16, Process.SystemAddressSpaceID(r31) + stw r16, PSA.SystemAddressSpaceID(r1) + + + ; Save a few pointers to it for good measure + stw r30, Process.SystemAddressSpacePtr(r31) + stw r30, EWA.PA_CurAddressSpace(r1) + stw r30, PSA.OtherSystemAddrSpcPtr(r1) + + + +; Show off the new address space struct, and at the same time, +; copy the BATs that we copied from ConfigInfo to KDP, into the struct. + + _log 'Created system address space. ID ' + + mr r8, r16 + bl Printw + + _log '^n BATs ' + + lwz r16, 0x0288(r1) ; kdp.bat0l + lwz r17, 0x028c(r1) ; kdp.bat0u + stw r16, 0x0080(r30) + stw r17, 0x0084(r30) + + mr r8, r16 + bl Printw + mr r8, r17 + bl Printw + _log ' ' + + lwz r16, 0x0298(r1) ; kdp.bat1l + lwz r17, 0x029c(r1) ; kdp.bat1u + stw r16, 0x0088(r30) + stw r17, 0x008c(r30) + + mr r8, r16 + bl Printw + mr r8, r17 + bl Printw + _log ' ' + + lwz r16, 0x02a8(r1) ; kdp.bat2l + lwz r17, 0x02ac(r1) ; kdp.bat2u + stw r16, 0x0090(r30) + stw r17, 0x0094(r30) + + mr r8, r16 + bl Printw + mr r8, r17 + bl Printw + _log ' ' + + lwz r16, 0x02b8(r1) ; kdp.bat3l + lwz r17, 0x02bc(r1) ; kdp.bat3u + stw r16, 0x0098(r30) + stw r17, 0x009c(r30) + + mr r8, r16 + bl Printw + mr r8, r17 + bl Printw + _log '^n' + + + +; Initialize the kernel queues. They are called: +; +; - PHYS (free list, in KDP, by InitFreeList) +; - DLYQ (in KDP, by me) +; - DBUG (in KDP, by me) +; - PAGQ (in KDP, has ID, by me) +; - NOTQ (in KDP, by me) +; - TMRQs (one in KDP, two in pool, one more in pool for Nanodebugger) +; - RDYQs (four in KDP, for each task priority) + + ; Free list in hardcoded KDP location + ; ARG KernelData *r1 + ; CLOB r8, r9 + bl InitFreeList + + + ; Delay queue in hardcoded KDP location + + addi r9, r1, PSA.DelayQueue + InitList r9, 'DLYQ', scratch=r8 + + + ; Debugger queue in hardcoded KDP location + + addi r9, r1, PSA.DbugQueue + InitList r9, 'DBUG', scratch=r8 + + + ; Page queue in hardcoded KDP location... + + addi r8, r1, PSA.PageQueue + + ; ...with opaque id... + li r9, Queue.kIDClass + bl MakeID + addi r9, r1, PSA.PageQueue + stw r8, LLL.Freeform(r9) + + ; ...which the blue task will probably want to know about + stw r8, KDP.NanoKernelInfo + NKNanoKernelInfo.pageQueueID(r1) + + InitList r9, 'PAGQ', scratch=r16 + + + ; Not sure what these globals relate to + + li r8, 0 + stw r8, PSA.QueueRelatedZero1(r1) + stw r8, PSA.QueueRelatedZero2(r1) + + + ; Notification queue in hardcoded KDP location + + addi r9, r1, PSA.NotQueue + InitList r9, 'NOTQ', scratch=r16 + + + ; TMRQs (see comments above and with InitTMRQs) + ; (These are all the same structure but only one is signed!) + + bl InitTMRQs + + + ; One ready for each task priority (critical, etc) + + bl InitRDYQs + + + +; Set the BAT and segment registers (how were SRs calculated?) + + lwz r8, EWA.PA_CurAddressSpace(r1) + li r9, 0 + bl SetAddrSpcRegisters + + + +; Create the Blue MacOS task + + ; ARG EmpiricalCpuFeatures r7, Process *r8 + ; RET Task *r8 + + lwz r8, PSA.blueProcessPtr(r1) + bl CreateTask + + ; Check + mr. r31, r8 + beq- Init_Panic + + lwz r8, Task.ID(r31) + stw r8, KDP.NanoKernelInfo + NKNanoKernelInfo.blueTaskID(r1) + + + ; Can equal -1 or a 68k interrupt number. PIHes touch it. + li r8, -1 + sth r8, PSA.Int(r1) + + ; + stw r31, PSA.PA_BlueTask(r1) + stw r31, EWA.PA_CurTask(r1) + + ; Misc population + lisori r8, 'blue' + stw r8, Task.Name(r31) + + li r8, 2 + stb r8, Task.MysteryByte1(r31) + + lisori r8, 0x00030028 + stw r8, 0x0064(r31) + + li r8, 200 + stw r8, Task.Weight(r31) + + li r8, Task.kNominalPriority + stb r8, Task.Priority(r31) + + lhz r8, -0x0116(r1) ; zero?????? + sth r8, 0x001a(r31) + + lwz r8, EWA.CPUBase + CPU.ID(r1) + stw r8, Task.CpuID(r31) + + lwz r6, KDP.PA_ECB(r1) + stw r6, Task.ContextBlockPtr(r31) ; override structs own ECB area + + lwz r16, Task.ContextBlock + ContextBlock.VectorSaveArea(r31) + stw r16, ContextBlock.VectorSaveArea(r6) + + + ; Bang on about some stuff + + _log 'System context at 0x' + mr r8, r6 + bl Printw + + _log ' Vector save area at 0x' + mr r8, r16 + bl Printw + + _log ' SDR1 0x' + mfspr r8, sdr1 + mr r8, r8 + bl Printw + _log '^n' + + + ; Task enqueueing is still a bit of a mystery to me + + _log 'Adding blue task ' + lwz r8, Task.ID(r31) + mr r8, r8 + bl Printw + _log 'to the ready queue^n' + + addi r16, r31, Task.QueueMember + RemoveFromList r16, scratch1=r17, scratch2=r18 + + + ; ARG Task *r8 + ; CLOB r16, r17, r18 + + mr r8, r31 + bl TaskReadyAsPrev + + bl CalculateTimeslice + + + +; Do some things I do not understand + bl major_0x14af8_0xa0 + bl StartTimeslicing + + + +; Create the idle task for the first CPU + + ; Unset the AV bit in EmpiricalCpuFeatures so that + ; idle task vector registers are not saved/restored + ; (Leave the old value in r31) +av set PSA.AVFeatureBit + mr r31, r7 + rlwinm r7, r7, 0, av + 1, av - 1 + + ; ARG EmpiricalCpuFeatures r7, Process *r8 + ; RET Task *r8 + + lwz r8, PSA.blueProcessPtr(r1) + bl CreateTask + + ; Restore EmpiricalCpuFeatures + mr r7, r31 + + ; Check + mr. r31, r8 + beq- Init_Panic + + ; Misc population + lisori r8, 'idle' + stw r8, Task.Name(r31) + + + ; Blue has 0x00030028 + lisori r8, 0x000a0040 + stw r8, Task.ThingThatAlignVecHits(r31) + + ; For the scheduler + li r8, 1 + stw r8, Task.Weight(r31) + + li r8, Task.kIdlePriority + stb r8, Task.Priority(r31) + + ; Blue does this too, probably zero, not sure why? + lhz r8, -0x116(r1) + sth r8, 0x01a(r31) + + lwz r8, EWA.CPUBase + CPU.ID(r1) + stw r8, Task.CpuID(r31) + + ; Add a feature!?!?!?! + lwz r8, Task.ContextBlock + ContextBlock.EmpiricalCpuFeatures(r31) + oris r8, r8, 0x40 + stw r8, Task.ContextBlock + ContextBlock.EmpiricalCpuFeatures(r31) + + ; Point task ECB at the idle loop within the nanokernel code + lwz r8, KDP.PA_NanoKernelCode(r1) + llabel r26, IdleCode + add r8, r8, r26 + stw r8, Task.ContextBlock + ContextBlock.CodePtr(r31) + + ; The idle task runs in privileged mode with physical addressing + lwz r8, 0x01a4(r31) + andi. r8, r8, 0xbfcf ; unset loword (MSR_POW, MSR_ILE), MSR_PR, MSR_IR, MSR_DR + stw r8, 0x01a4(r31) + + ; Idle task for first CPU + addi r30, r1, EWA.CPUBase + stw r31, CPU.IdleTaskPtr(r30) + + ; Boast a bit + _log 'Adding idle task ' + lwz r8, Task.ID(r31) + mr r8, r8 + bl Printw + _log 'to the ready queue^n' + + ; This sure looks like a linked-list insertion + addi r16, r31, Task.QueueMember + RemoveFromList r16, scratch1=r17, scratch2=r18 + + ; ARG Task *r8 + ; CLOB r16, r17, r18 + + mr r8, r31 + bl TaskReadyAsPrev + + bl CalculateTimeslice + + ; Create a 'dummy' address space + li r8, 0 + lwz r9, PSA.blueProcessPtr(r1) + + ; ARG MPCoherenceID r8 owningCOHG ; 0 to use mobo COHG + ; Process *r9 owningPROC + + bl NKCreateAddressSpaceSub + + ; RET MPErr r8 + ; AddressSpace *r9 + + cmpwi r8, 0 + mr r30, r9 + lwz r31, EWA.CPUBase + CPU.IdleTaskPtr(r1) + bne- Init_Panic + + stw r30, Task.AddressSpacePtr(r31) + + + +; Now do something with the page table + lwz r7, EWA.Flags(r1) + lwz r26, KDP.PA_ConfigInfo(r1) + lwz r18, KDP.PA_PageMapStart(r1) + + + +; Put HTABORG and PTEGMask in KDP, and zero out the last PTEG + + beq- cr5, @skip_zeroing_pteg + mfspr r8, sdr1 + + ; get settable HTABMASK bits + rlwinm r22, r8, 16, 7, 15 + + ; and HTABORG + rlwinm r8, r8, 0, 0, 15 + + ; get a PTEGMask from upper half of HTABMASK + ori r22, r22, (-64) & 0xffff + + ; Save in KDP (OldWorld must do this another way) + stw r8, KDP.HTABORG(r1) + stw r22, KDP.PTEGMask(r1) + + ; zero out the last PTEG in the HTAB + li r23, 0 + addi r22, r22, 64 +@loop + subic. r22, r22, 4 + stwx r23, r8, r22 + bgt+ @loop +@skip_zeroing_pteg + + +; Rather self-explanatory. Do this even if we did not just edit HTAB. + + bl PagingFlushTLB + + + +; Copy the ConfigInfo pagemap into KDP, absolut-ising entries +; whose physical addresses are relative to ConfigInfo. + + beq- cr5, @skip_copying_pagemap + lwz r9, NKConfigurationInfo.PageMapInitOffset(r26) ; from base of CI + lwz r22, NKConfigurationInfo.PageMapInitSize(r26) + add r9, r9, r26 + +@copyloop_pagemap + subi r22, r22, 4 ; load a word from the CI pagemap (top first) + lwzx r21, r9, r22 + + andi. r23, r21, PMDT.DaddyFlag | PMDT.PhysicalIsRelativeFlag + cmpwi r23, PMDT.PhysicalIsRelativeFlag + bne- @physical_address_not_relative_to_config_info + + rlwinm r21, r21, 0, ~PMDT.PhysicalIsRelativeFlag + add r21, r21, r26 +@physical_address_not_relative_to_config_info + + stwx r21, r18, r22 ; save in the KDP pagemap + + subic. r22, r22, 4 + lwzx r20, r9, r22 ; load another word, but no be cray + stwx r20, r18, r22 ; just save it in KDP + bgt+ @copyloop_pagemap +@skip_copying_pagemap + + + +; Edit the KDP's copied PageMap to contain the correct physical address +; of the parts that we know about: IRP, KDP & surrounds, EDP. +; (No changes to flags) + + ; IRP + + lwz r8, NKConfigurationInfo.PageMapIRPOffset(r26) + add r8, r18, r8 + + lisori r19, IRPOffset + add r19, r19, r1 + + ; Set physical address (top 20 bits of second word) + lwz r23, PMDT.PBaseAndFlags(r8) + rlwimi r23, r19, 0, 0, 19 + stw r23, PMDT.PBaseAndFlags(r8) + + + ; KDP (plus the nine pages below it) + +IRPTopOffset equ IRPOffset + 0x1000 + + lwz r8, NKConfigurationInfo.PageMapKDPOffset(r26) + add r8, r18, r8 + + lisori r19, IRPTopOffset + add r19, r1, r19 + + ; Page count - 1 + lisori r22, (-IRPTopOffset) >> 12 + + ; Set physical address (top 20 bits of second word) + lwz r23, PMDT.PBaseAndFlags(r8) + rlwimi r23, r19, 0, 0, 19 + stw r23, PMDT.PBaseAndFlags(r8) + + ; Set page count - 1 (bottom half of first word) + sth r22, PMDT.PageCount(r8) + + ; Whaaaaaa? + lhz r23, PMDT.LBase(r8) + subf r23, r22, r23 + sth r23, PMDT.LBase(r8) + + + ; EDP + + lwz r19, KDP.PA_EmulatorData(r1) + lwz r8, NKConfigurationInfo.PageMapEDPOffset(r26) + add r8, r18, r8 + + lwz r23, PMDT.PBaseAndFlags(r8) + rlwimi r23, r19, 0, 0, 19 + stw r23, PMDT.PBaseAndFlags(r8) + + + +; Copy segment maps from ConfigInfo +; (128 bytes per mode: supervisor, user, CPU, overlay) +; even-indexed words are offsets into the pagemap +; odd-indexed words are or-ed with 0x20000000 + + addi r9, r26, NKConfigurationInfo.SegMaps - 4 + addi r8, r1, KDP.SegMaps - 4 + li r22, 128 * 4 + +@copyloop_segmaps + lwzu r23, 4(r9) + subic. r22, r22, 8 + add r23, r18, r23 ; even-indexed words are PMDT offsets in PageMap + stwu r23, 4(r8) + + lwzu r23, 4(r9) + oris r23, r23, 0x2000 ; no clue? + stwu r23, 4(r8) + + bgt+ @copyloop_segmaps + + + +; Give KDP pointers to its own structures (how lame). + + addi r23, r1, KDP.SegMap32SupInit + stw r23, KDP.SegMap32SupInitPtr(r1) + + lwz r23, NKConfigurationInfo.BatMap32SupInit(r26) + stw r23, KDP.BatMap32SupInit(r1) + + + addi r23, r1, KDP.SegMap32UsrInit + stw r23, KDP.SegMap32UsrInitPtr(r1) + + lwz r23, NKConfigurationInfo.BatMap32UsrInit(r26) + stw r23, KDP.BatMap32UsrInit(r1) + + + addi r23, r1, KDP.SegMap32CPUInit + stw r23, KDP.SegMap32CPUInitPtr(r1) + + lwz r23, NKConfigurationInfo.BatMap32CPUInit(r26) + stw r23, KDP.BatMap32CPUInit(r1) + + + addi r23, r1, KDP.SegMap32OvlInit + stw r23, KDP.SegMap32OvlInitPtr(r1) + + lwz r23, NKConfigurationInfo.BatMap32OvlInit(r26) + stw r23, KDP.BatMap32OvlInit(r1) + + + +; Use the PageMap kindly provided by the Trampoline to count VMMaxVirtualPages +; (remembering that virtual is meant in the '68k VM' sense). + +; In brief: only big fat PMDTs on 256MB (i.e. segment) boundaries need apply. + +; INDEPENDENT OF INSTALLED RAM! + + li r22, 0 ; counter + addi r19, r1, KDP.SegMaps - 8 + b @next_segment + +@skip_pmdt + addi r8, r8, 0x08 + b @searchloop + +@next_segment + lwzu r8, 8(r19) + +@searchloop + ; Get both words of the pointed-to PMDT + lwz r30, 0(r8) ; OffsetWithinSegInPages(16b) || PageCount-1(16b) + lwz r31, 4(r8) ; PhysicalInPages(20b) || pageAttr(12b) + + ; Stop counting if we meet a PMDT not at the base of its segment. + + ; Stop counting if we meet a PMDT with its top two pageAttr bits both unset. + + ; If PMDT has its top two pageAttr bits both set, + ; check the PMDT following it in the PageMap. + ; (Never seen this in the wild.) + + cmplwi cr7, r30, 0xffff ; if not at base: + rlwinm. r31, r31, 0, PMDT.DaddyFlag | PMDT.CountingFlag ; if neither flag: + bgt- cr7, @finish_count ; stop counting + cmpwi cr6, r31, PMDT.DaddyFlag | PMDT.CountingFlag ; if both flags: + beq- @finish_count ; stop counting + beq+ cr6, @skip_pmdt ; next PMDT instead + + add r22, r22, r30 + addi r22, r22, 1 + beq+ cr7, @next_segment ; else count and move on to next segment descriptor + +@finish_count + stw r22, KDP.VMMaxVirtualPages(r1) + + + +; Create the Flat Page List: +; a draft PTE for every usable physical page. + +; Usable physical pages are: +; Inside a RAM bank, and +; NOT inside the kernel's reserved physical memory + +; By 'draft PTE', I mean these parts of the second word of a PTE: +; physical page number (base & 0xfffff000) +; WIMG bits (from oddly formatted ConfigInfo.PageAttributeInit) +; bottom PP bit always set + +; And all this goes at the bottom of the kernel reserved area. +; Leave ptr to kernel reserved area in r21 +; Leave ptr to topmost entry in r29. + +ListFreePhysicalPages + + beq- cr5, @skip + + lwz r21, KDP.KernelMemoryBase(r1) + lwz r20, KDP.KernelMemoryEnd(r1) + + stw r21, KDP.FlatPageListPtr(r1) + + lwz r30, EWA.PA_IRP(r1) + + ; Will be writing things to the very base of kernel memory. Oh dear. + subi r29, r21, 4 + + addi r19, r30, IRP.SystemInfo + NKSystemInfo.Bank0Start - 8 + + lwz r23, KDP.PageAttributeInit(r1) ; default WIMG/PP settings in PTEs + + ; Pull WIMG bits out of PageAttributeInit + li r30, 1 + rlwimi r30, r23, 1, 25, 25 + rlwimi r30, r23, 31, 26, 26 + xori r30, r30, 0x20 + rlwimi r30, r23, 29, 27, 27 + rlwimi r30, r23, 27, 28, 28 + + li r23, NKSystemInfo.MaxBanks + +@nextbank + subic. r23, r23, 1 + blt- @done + + lwzu r31, 8(r19) ; bank start address + lwz r22, 4(r19) ; bank size + or r31, r31, r30 ; looks a lot like the second word of a PTE + +@nextpage + cmplwi r22, 4096 + cmplw cr6, r31, r21 + cmplw cr7, r31, r20 + subi r22, r22, 4096 + blt+ @nextbank + + ; Check that this page is outside the kernel's reserved area + blt- cr6, @below_reserved + blt- cr7, @in_reserved +@below_reserved + stwu r31, 4(r29) ; write that part-PTE at the base of kernel memory +@in_reserved + + addi r31, r31, 4096 + b @nextpage + +@done +@skip + + + +PrimeFreeListFromBanks + + beq- cr5, PrimeFreeListFromSystemHeap + + ; Add ~18 to 20 of these pages to the free list, depending on RAM size + subf r22, r21, r29 + addi r8, r22, 4096 + srwi r17, r22, 13 + addi r17, r17, 18 + + _log 'Priming the system free list with ' + + mr r8, r17 + bl Printd + + _log 'pages.^n' + +@loop + lwz r8, 0(r29) + rlwinm r8, r8, 0, 0, 19 ; physical base of page + bl free_list_add_page + + subi r17, r17, 1 + subi r29, r29, 4 + cmpwi r17, 0 + bgt+ @loop + + b DonePrimingFreeList + + + +; Apparently the replacement kernel can find pages just above the EDP? + +; More power to it, I say. + +PrimeFreeListFromSystemHeap + + lwz r8, 0x05a8(r1) ; kdp.0x5a8 + addi r18, r1, 0x2000 ; kdp.0x2000 + subf. r8, r18, r8 + blt- DonePrimingFreeList + addi r8, r8, 0x1000 + srwi r17, r8, 12 + + _log 'Priming the system free list with ' + + mr r8, r17 + bl Printd + + _log 'system heap pages.^n' + + +@stupidloop + rlwinm r8, r18, 0, 0, 19 + + bl free_list_add_page + addi r17, r17, -0x01 + addi r18, r18, 0x1000 + cmpwi r17, 0x00 + bgt+ @stupidloop + + + + +DonePrimingFreeList + + + +; Bang on a little bit + + + _log 'VMMaxVirtualPages: ' ; 0005fffe + + lwz r8, KDP.VMMaxVirtualPages(r1) + mr r8, r8 + bl Printw + + _log 'VMLogicalPages: ' + + lwz r8, 0x06a8(r1) ; kdp.phys_pages + mr r8, r8 + bl Printw + + _log '^n' + + _log 'Interrupt handler kind: ' + + lwz r8, KDP.PA_ConfigInfo(r1) ; kdp.pa_ConfigInfo + lbz r8, NKConfigurationInfo.InterruptHandlerKind(r8) + mr r8, r8 + bl Printb + + _log '^n' + + + +; Now the code paths diverge again. +; +; The builtin kernel needs to start the 68k virtual machine. +; +; The replacement kernel needs to return to the Mac OS +; boot process. + + beq- cr5, finish_old_world + + + +; Here we reconcile the actual physical memory with the +; size of the contiguous part of the MacOS address space. + +; Going in: +; r21 points to base of long array +; r29 points (empty ascending) to top of long array + +; Pops have been made to prime the system free list, +; but otherwise, this contains all the physical memory +; that the Trampoline reported in the banks (Tramp already +; subtracted ROM and structures), minus the kernel data. + +ReconcileMemory + + ; r22 = pages still in array * 4 + subf r22, r21, r29 + + ; r8 = theoretical maximum MacOS page count * 4 + lwz r8, KDP.VMMaxVirtualPages(r1) + slwi r8, r8, 2 + + ; Memory We Have versus Memory We Could Use + ; (see blt- below) + cmplw r22, r8 + + ; TotalPhysicalPages equals pages not yet in free list but that could go in. + ; (Therefore exludes Trampoline areas, kernel areas, free list prime) + addi r19, r22, 4 + srwi r19, r19, 2 + stw r19, KDP.TotalPhysicalPages(r1) + + ; r22 = pages in array destined to be mapped to blue area + blt- @less_than_VMMaxVirtualPages + subi r22, r8, 4 +@less_than_VMMaxVirtualPages + + li r30, 0 + + lwz r8, EWA.PA_IRP(r1) + + ; That sets UsableMemorySize = LogicalMemorySize (= size of blue area), + addi r19, r22, 4 + slwi r19, r19, 10 + ori r30, r30, 0xffff + stw r19, IRP.SystemInfo + NKSystemInfo.UsableMemorySize(r8) + srwi r22, r22, 2 + stw r19, IRP.SystemInfo + NKSystemInfo.LogicalMemorySize(r8) + ; Now r22 is a page count + + ; The above, divided by 4096 + srwi r19, r19, 12 + stw r19, KDP.UsablePhysicalPages(r1) + + addi r29, r1, KDP.FlatPageListSegPtrs + addi r19, r1, KDP.SegMaps - 8 + + + + ; Divvy up the FlatPageList into segments +@persegment + ; r21 = fully ascending pointer (starts at base) + ; r + + cmplwi r22, 0xffff ; pages in a segment + lwzu r8, 8(r19) ; get the first word of a SegMap entry + + rotlwi r31, r21, 10 + ori r31, r31, 0xc00 ; r31 = second byte with fake-ass physical backing + + ; Rewrite the pagemap entry + stw r30, 0(r8) ; Whole segment + stw r31, 4(r8) ; Based on the FlatPageList, with weird shifts! + + stwu r21, 0x0004(r29) + addis r21, r21, 4 ; we just used a segment's worth of pages on this + subis r22, r22, 1 ; pages in a segment + bgt+ @persegment + + ; Number of pages in that last segment + sth r22, 0x0002(r8) + + lwz r17, KDP.UsablePhysicalPages(r1) + lwz r18, KDP.TotalPhysicalPages(r1) + stw r17, KDP.TotalPhysicalPages(r1) + + ; Get the number of 'unusable' physical pages (not [yet] wanted by main MacOS area) + ; If any, they will be chucked on the free list + subf. r18, r17, r18 + slwi r31, r17, 12 ; does this work with discontiguous banks? hmm... + ble- @no_leftover_ram + + ; See? + _log 'Physical RAM greater than the initial logical area.^n Moving ' + + mr r8, r18 + bl Printd + + _log 'pages into the system free page list.^n' + + +@loop + mr r8, r31 + bl free_list_add_page + addi r31, r31, 4096 + subi r18, r18, 1 + cmpwi r18, 0 + bgt+ @loop + +@no_leftover_ram + + + +; Create Areas (an abstract NKv2 structure) from the Trampoline's PageMap + + bl convert_pmdts_to_areas + + + +; No understandy + + addi r29, r1, 0x5e0 ; kdp.0x5e0 + bl PagingFunc2 + bl PagingFlushTLB + + + +; Makes QEMU complain + + bl ProbePerfMonitor + + + +; Done all we can + + _log 'Reset system - Into the 68K fire: ' + + mr r8, r11 + bl Printw + mr r8, r10 + bl Printw + + _log '^n' + + lwz r9, ContextBlock.XER(r6) + mfsprg r8, 0 + mtxer r9 + + bl Restore_r14_r31 + + b kcPrioritizeInterrupts + + + +finish_old_world + addi r29, r1, 0x5e8 + bl PagingFunc2 + bl PagingFlushTLB + bl convert_pmdts_to_areas + bl ProbePerfMonitor + lwz r27, 0x0630(r1) + lwz r27, 0x0094(r27) + bl PagingFunc4 + beq- setup_0x1160 + li r30, 0x00 + stw r30, -0x0004(r29) + eieio + stw r30, 0x0000(r29) + sync + +setup_0x1160 + bl PagingFunc1 + lwz r27, 0x0630(r1) + lwz r27, 0x009c(r27) + bl PagingFunc4 + beq- setup_0x1188 + li r30, 0x00 + stw r30, -0x0004(r29) + eieio + stw r30, 0x0000(r29) + sync + +setup_0x1188 + bl PagingFunc1 + lwz r27, 0x0630(r1) + lwz r27, 0x00a0(r27) + lis r19, 0x00 + ori r19, r19, 0xa000 + subf r19, r19, r27 + +setup_0x11a0 + bl PagingFunc4 + beq- setup_0x11bc + li r30, 0x00 + stw r30, -0x0004(r29) + eieio + stw r30, 0x0000(r29) + sync + +setup_0x11bc + bl PagingFunc1 + cmplw r27, r19 + addi r27, r27, -0x1000 + bgt+ setup_0x11a0 + lwz r27, 0x0630(r1) + lwz r27, 0x00a4(r27) + bl PagingFunc4 + beq- setup_0x11f0 + li r30, 0x00 + stw r30, -0x0004(r29) + eieio + stw r30, 0x0000(r29) + sync + +setup_0x11f0 + bl PagingFunc1 + + _log 'Nanokernel replaced. Returning to boot process^n' + + addi r9, r1, 0x420 + mtsprg 3, r9 + +; r1 = kdp + b old_world_rfi_to_userspace_boot + + + +; Called by InitReplacement.s if we accidentally try +; to replace a v2 kernel (like ourself). +; +; All we need to do is restore +; sprg0 (ewa/kdp) and sprg3 (vecBase). + +CancelReplacement + + bl InitScreenConsole + + _log 'Nanokernel NOT replaced. Returning to boot process^n' + + lwz r8, KDP.OldKDP(r1) + mtsprg 0, r8 + + addi r9, r8, KDP.OrangeVecBase + mtsprg 3, r9 + + + +; old_world_rfi_to_userspace_boot + +; Xrefs: +; setup +; CancelReplacement + +; > r1 = kdp + +old_world_rfi_to_userspace_boot ; OUTSIDE REFERER + lwz r4, KDP.LA_EmulatorKernelTrapTable(r1) + lwz r8, KDP.OtherFreeThing(r1) + lwz r9, PSA.UserModeMSR(r1) + addi r8, r8, ReturnCode - NKTop + mtsrr0 r8 + mtsrr1 r9 + rfi + + +ReturnCode + li r3, 255 + mtlr r4 + blrl + + + +; ARG Lock *r8 + + align 5 + +AcquireLock ; OUTSIDE REFERER + lwarx r9, 0, r8 + cmpwi r9, 0 + mfsprg r9, 0 + bne- @already_held + lwz r9, -0x0340(r9) + sync + stwcx. r9, 0, r8 + bne- AcquireLock + mflr r9 + stw r9, 0x0010(r8) + isync + blr + +@already_held + stmw r22, -0x0094(r9) + mr r22, r9 + mflr r30 + mr r31, r8 + lwz r29, -0x0340(r22) + lwz r28, 0x0000(r31) + stw r30, -0x0098(r22) + cmpw r28, r29 + bne+ @0x84 + bl @start_logging + _log 'Recursive spinlock ***^n' + bl Init_Panic + +@0x84 + bl @0x184 + mr r24, r28 + mr r25, r29 + lwz r30, -0x0004(r22) + mfdec r29 + lwz r28, -0x0438(r30) + slwi r28, r28, 3 + subf r29, r28, r29 + b @0xc0 + +@0xa8 + lwz r30, -0x0004(r22) + lwz r28, -0x0b30(r30) + cmpwi r28, 0x00 + beq- @0xc0 + mfdec r29 + addis r29, r29, -0x01 + +@0xc0 + mfdec r28 + subf. r28, r29, r28 + bgt- @0x118 + bl @start_logging + _log 'Timeout - locked CpuID ' + mr r8, r30 + bl printw + _log '***^n' + bl Init_Panic + +@0x118 + lwz r30, 0x0000(r31) + cmpwi r30, 0x00 + bne+ @0xa8 + +@0x124 + lwarx r30, 0, r31 + cmpwi r30, 0 + bne+ @0xa8 + lwz r30, EWA.CPUBase + CPU.ID(r22) + sync + stwcx. r30, 0, r31 + bne- @0x124 + mfxer r30 + bl @0x184 + lwz r27, -0x0098(r22) + subfc r29, r25, r29 + lwz r25, 0x000c(r31) + subfe r28, r24, r28 + lwz r24, 0x0008(r31) + addc r25, r25, r29 + adde r24, r24, r28 + stw r25, 0x000c(r31) + stw r24, 0x0008(r31) + mtlr r27 + stw r27, 0x0010(r31) + mtxer r30 + mr r8, r22 + lmw r22, -0x0094(r8) + blr + +@0x184 + mftbu r28 + mftb r29 + mftbu r27 + cmpw r28, r27 + beqlr+ + b @0x184 + +@start_logging ; actually a func + mfsprg r28, 0 + mflr r27 + + lwz r29, EWA.CPUBase + CPU.ID(r28) + _log '^n*** On CPU ' + mr r8, r29 + bl printw + + _log 'spinlock 0x' + + mr r8, r31 + bl printw + + ; Print lock sig + lwz r8, Lock.Signature(r31) + rotlwi r8, r8, 8 + bl printc + rotlwi r8, r8, 8 + bl printc + rotlwi r8, r8, 8 + bl printc + rotlwi r8, r8, 8 + bl printc + + lwz r29, -0x0098(r28) + _log ' caller 0x' + mr r8, r29 + bl printw + + mtlr r27 + blr + + + +Init_Panic + b panic diff --git a/NanoKernel/NKInterrupts.s b/NanoKernel/NKInterrupts.s new file mode 100644 index 0000000..9beb6a3 --- /dev/null +++ b/NanoKernel/NKInterrupts.s @@ -0,0 +1,2851 @@ +Local_Panic set * + b panic + + + +; major_0x02964 + +; Xrefs: +; major_0x02ccc + +major_0x02964 ; OUTSIDE REFERER + b AlternateMPCallReturnPath + + + +; major_0x02980 + +; Xrefs: +; major_0x02ccc +; major_0x03548 +; IntDSIOtherOther +; IntMachineCheckMemRetry +; major_0x039dc +; IntMachineCheck +; MaskedInterruptTaken +; major_0x03be0 +; major_0x04180 +; kcRunAlternateContext +; major_0x046d0 +; IntExternalOrange +; IntProgram +; IntTrace +; FDP_1214 + + align 5 + +major_0x02980 ; OUTSIDE REFERER + mfsprg r1, 0 + mtsprg 3, r24 + lwz r9, -0x000c(r1) + rlwinm r23, r17, 31, 27, 31 + rlwnm. r9, r9, r8, 0x00, 0x00 + bsol- cr3, major_0x02980_0x100 + lwz r6, -0x0014(r1) + ori r7, r16, 0x10 + neg r23, r23 + mtcrf 0x3f, r7 + add r19, r19, r23 + rlwimi r7, r8, 24, 0, 7 + lwz r1, -0x0004(r1) + slwi r8, r8, 2 + add r8, r8, r1 + lwz r9, 0x0dc0(r8) + addi r9, r9, 0x01 + stw r9, 0x0dc0(r8) + srwi r9, r7, 24 + mfsprg r1, 0 + lwz r8, 0x0000(r1) + stw r8, 0x0104(r6) + lwz r8, 0x001c(r1) + stw r8, 0x013c(r6) + lwz r8, 0x0020(r1) + stw r8, 0x0144(r6) + lwz r8, 0x0024(r1) + stw r8, 0x014c(r6) + lwz r8, 0x0028(r1) + stw r8, 0x0154(r6) + lwz r8, 0x002c(r1) + stw r8, 0x015c(r6) + lwz r8, 0x0030(r1) + stw r8, 0x0164(r6) + lwz r8, 0x0034(r1) + stw r8, 0x016c(r6) + cmpwi cr1, r9, 0x14 + blt- cr4, major_0x04a20_0x18 + bne- cr2, major_0x02ccc_0x310 + blt- major_0x02980_0xa8 + bne- cr1, major_0x02980_0x178 + b major_0x02ccc_0x310 + +major_0x02980_0xa8 + mfsprg r1, 0 + stw r10, 0x0084(r6) + stw r12, 0x008c(r6) + stw r3, 0x0094(r6) + stw r4, 0x009c(r6) + lwz r8, -0x000c(r1) + stw r7, 0x0040(r6) + stw r8, 0x0044(r6) + li r8, 0x00 + lwz r10, 0x004c(r6) + stw r8, -0x000c(r1) + lwz r1, -0x0004(r1) + lwz r4, 0x0054(r6) + lwz r3, 0x0654(r1) + blt- cr2, major_0x02980_0xec + lwz r3, 0x05b4(r1) + rlwinm r11, r11, 0, 17, 15 + +major_0x02980_0xec + lwz r12, 0x0648(r1) + bsol- cr6, major_0x02980_0x114 + rlwinm r7, r7, 0, 29, 16 + rlwimi r11, r7, 0, 20, 23 + b skeleton_key + +major_0x02980_0x100 + lwz r2, 0x0008(r1) + lwz r3, 0x000c(r1) + lwz r4, 0x0010(r1) + lwz r5, 0x0014(r1) + blr + +major_0x02980_0x114 ; OUTSIDE REFERER + mfsprg r8, 0 + stw r17, 0x0064(r6) + stw r20, 0x0068(r6) + stw r21, 0x006c(r6) + stw r19, 0x0074(r6) + stw r18, 0x007c(r6) + lmw r14, 0x0038(r8) + blr + +major_0x02980_0x134 ; OUTSIDE REFERER + mfsprg r1, 0 + mtcrf 0x3f, r7 + lwz r9, -0x000c(r1) + lwz r1, -0x0004(r1) + rlwnm. r9, r9, r8, 0x00, 0x00 + rlwimi r7, r8, 24, 0, 7 + slwi r8, r8, 2 + add r8, r8, r1 + lwz r9, 0x0dc0(r8) + addi r9, r9, 0x01 + stw r9, 0x0dc0(r8) + srwi r9, r7, 24 + blt- cr4, major_0x04a20_0x18 + bne- cr2, major_0x02ccc_0x2a4 + cmpwi cr1, r9, 0x0c + blt+ major_0x02980_0xa8 + beq- cr1, major_0x02ccc_0x2a4 + +major_0x02980_0x178 ; OUTSIDE REFERER + lwz r1, -0x0004(r1) + lwz r9, 0x0658(r1) + addi r8, r1, 0x360 + mtsprg 3, r8 + bltl- cr2, major_0x02ccc_0x108 + +major_0x02980_0x18c ; OUTSIDE REFERER + mfsprg r1, 0 + lwz r8, -0x000c(r1) + stw r7, 0x0000(r6) + stw r8, 0x0004(r6) + bns- cr6, major_0x02980_0x1b8 + stw r17, 0x0024(r6) + stw r20, 0x0028(r6) + stw r21, 0x002c(r6) + stw r19, 0x0034(r6) + stw r18, 0x003c(r6) + lmw r14, 0x0038(r1) + +major_0x02980_0x1b8 + mfxer r8 + stw r13, 0x00dc(r6) + stw r8, 0x00d4(r6) + stw r12, 0x00ec(r6) + mfctr r8 + stw r10, 0x00fc(r6) + stw r8, 0x00f4(r6) + ble- cr3, major_0x02980_0x1e8 + lwz r8, 0x00c4(r9) + mfspr r12, mq + mtspr mq, r8 + stw r12, 0x00c4(r6) + +major_0x02980_0x1e8 + lwz r8, 0x0004(r1) + stw r8, 0x010c(r6) + stw r2, 0x0114(r6) + stw r3, 0x011c(r6) + stw r4, 0x0124(r6) + lwz r8, 0x0018(r1) + stw r5, 0x012c(r6) + stw r8, 0x0134(r6) + stw r14, 0x0174(r6) + stw r15, 0x017c(r6) + stw r16, 0x0184(r6) + stw r17, 0x018c(r6) + stw r18, 0x0194(r6) + stw r19, 0x019c(r6) + stw r20, 0x01a4(r6) + stw r21, 0x01ac(r6) + stw r22, 0x01b4(r6) + stw r23, 0x01bc(r6) + stw r24, 0x01c4(r6) + stw r25, 0x01cc(r6) + stw r26, 0x01d4(r6) + andi. r8, r11, 0x2000 + stw r27, 0x01dc(r6) + stw r28, 0x01e4(r6) + stw r29, 0x01ec(r6) + stw r30, 0x01f4(r6) + stw r31, 0x01fc(r6) + bnel- major_0x03e18_0xb4 + bge- cr3, major_0x02980_0x260 + bl Save_v0_v31 + +major_0x02980_0x260 + stw r11, 0x00a4(r6) + lwz r8, 0x0000(r9) + stw r9, -0x0014(r1) + xoris r7, r7, 0x80 + rlwimi r11, r8, 0, 20, 23 + mr r6, r9 + rlwimi r7, r8, 0, 17, 31 + andi. r8, r11, 0x900 + lwz r8, 0x0004(r6) + lwz r13, 0x00dc(r6) + stw r8, -0x000c(r1) + lwz r8, 0x00d4(r6) + lwz r12, 0x00ec(r6) + mtxer r8 + lwz r8, 0x00f4(r6) + lwz r10, 0x00fc(r6) + mtctr r8 + bnel- major_0x03e18_0x8 + lwarx r8, 0, r1 + sync + stwcx. r8, 0, r1 + lwz r29, 0x00d8(r6) + lwz r8, 0x010c(r6) + cmpwi r29, 0x00 + stw r8, 0x0004(r1) + lwz r28, 0x0210(r29) + beq- major_0x02980_0x2d0 + mtspr vrsave, r28 + +major_0x02980_0x2d0 + lwz r2, 0x0114(r6) + lwz r3, 0x011c(r6) + lwz r4, 0x0124(r6) + lwz r8, 0x0134(r6) + lwz r5, 0x012c(r6) + stw r8, 0x0018(r1) + lwz r14, 0x0174(r6) + lwz r15, 0x017c(r6) + lwz r16, 0x0184(r6) + lwz r17, 0x018c(r6) + lwz r18, 0x0194(r6) + lwz r19, 0x019c(r6) + lwz r20, 0x01a4(r6) + lwz r21, 0x01ac(r6) + lwz r22, 0x01b4(r6) + lwz r23, 0x01bc(r6) + lwz r24, 0x01c4(r6) + lwz r25, 0x01cc(r6) + lwz r26, 0x01d4(r6) + lwz r27, 0x01dc(r6) + lwz r28, 0x01e4(r6) + lwz r29, 0x01ec(r6) + lwz r30, 0x01f4(r6) + lwz r31, 0x01fc(r6) + + + +; skeleton_key + +; Called when a Gary reset trap is called. When else? + +; Xrefs: +; major_0x02980 +; IntDecrementer +; IntISI +; IntMachineCheck +; major_0x03be0 +; IntPerfMonitor +; IntThermalEvent +; kcRunAlternateContext +; kcResetSystem +; IntProgram +; IntExternalYellow +; kcVMDispatch +; major_0x09e28 +; major_0x0a600 +; kcRTASDispatch +; kcCacheDispatch +; CommonMPCallReturnPath +; CommonPIHPath + +skeleton_key ; OUTSIDE REFERER + andi. r8, r7, 0x30 + mfsprg r1, 0 + bnel- major_0x02ccc + li r8, 0x00 + stw r7, -0x0010(r1) + stw r8, -0x0114(r1) + b major_0x142a8 + + + +; major_0x02ccc + +; Xrefs: +; major_0x02980 +; skeleton_key + +major_0x02ccc ; OUTSIDE REFERER + mtcrf 0x3f, r7 + bns- cr6, major_0x02ccc_0x18 + rlwinm r7, r7, 0, 28, 26 + bso- cr7, major_0x02ccc_0x30 + rlwinm r7, r7, 0, 27, 25 + b major_0x02ccc_0x2c + +major_0x02ccc_0x18 + bne- cr6, major_0x02ccc_0x2c + rlwinm r7, r7, 0, 27, 25 + stw r7, -0x0010(r1) + li r8, 0x08 + b major_0x02980_0x134 + +major_0x02ccc_0x2c + blr + +major_0x02ccc_0x30 + rlwinm. r8, r7, 0, 8, 8 + beq- major_0x02ccc_0x108 + stw r7, -0x0010(r1) + lwz r8, 0x0104(r6) + stw r8, 0x0000(r1) + stw r2, 0x0008(r1) + stw r3, 0x000c(r1) + stw r4, 0x0010(r1) + stw r5, 0x0014(r1) + lwz r8, 0x013c(r6) + stw r8, 0x001c(r1) + lwz r8, 0x0144(r6) + stw r8, 0x0020(r1) + lwz r8, 0x014c(r6) + stw r8, 0x0024(r1) + lwz r8, 0x0154(r6) + stw r8, 0x0028(r1) + lwz r8, 0x015c(r6) + stw r8, 0x002c(r1) + lwz r8, 0x0164(r6) + stw r8, 0x0030(r1) + lwz r8, 0x016c(r6) + stw r8, 0x0034(r1) + stmw r14, 0x0038(r1) + lwz r8, -0x0004(r1) + lwz r17, 0x0024(r9) + lwz r20, 0x0028(r9) + lwz r21, 0x002c(r9) + lwz r19, 0x0034(r9) + lwz r18, 0x003c(r9) + rlwinm r16, r7, 0, 28, 26 + lwz r25, 0x0650(r8) + rlwinm. r22, r17, 31, 27, 31 + add r19, r19, r22 + rlwimi r25, r17, 7, 25, 30 + lhz r26, 0x0d20(r25) + rlwimi r25, r19, 1, 28, 30 + stw r16, -0x0010(r1) + rlwimi r26, r26, 8, 8, 15 ; copy hi byte of entry to second byte of word + rlwimi r25, r17, 4, 23, 27 + mtcrf 0x10, r26 ; so the second nybble of the entry is copied to cr3 + lha r22, 0x0c00(r25) + addi r23, r8, 0x4e0 + add r22, r22, r25 + mfsprg r24, 3 + mtlr r22 + mtsprg 3, r23 + mfmsr r14 + ori r15, r14, 0x10 + mtmsr r15 + isync + rlwimi r25, r26, 2, 22, 29 ; apparently the lower byte of the entry is an FDP (code?) offset, /4! + bnelr- + b FDP_011c + + + +major_0x02ccc_0x108 ; OUTSIDE REFERER + bl Save_r14_r31 ; r8 := EWA + + lwz r31, EWA.PA_CurTask(r8) + lwz r8, 0x00f4(r31) + +; r8 = id + bl LookupID + cmpwi r9, Queue.kIDClass + + mr r30, r8 + bnel- major_0x02ccc_0x20c + lwz r28, 0x0028(r30) + cmpwi r28, 0x00 + beql- major_0x02ccc_0x20c + + _Lock PSA.SchLock, scratch1=r8, scratch2=r9 + + lwz r29, 0x0064(r31) + ori r29, r29, 0x200 + ori r29, r29, 0x1000 + stw r29, 0x0064(r31) + lwz r17, 0x0008(r28) + stw r17, 0x0028(r30) + lwz r17, 0x0000(r31) + stw r17, 0x0010(r28) + li r18, -0x7271 + stw r18, 0x0014(r28) + stw r18, 0x00f8(r31) + stw r10, 0x0018(r28) + _log 'Blue task suspended. Notifying exception handler - srr1/0 ' + mr r8, r11 + bl Printw + mr r8, r10 + bl Printw + _log 'lr ' + mr r8, r12 + bl Printw + _log '^n' + mr r31, r30 + mr r8, r28 + bl major_0x0c8b4 + b major_0x142dc + +major_0x02ccc_0x20c + mflr r16 + _log 'Blue task terminated - no exception handler registered - srr1/0 ' + mr r8, r11 + bl Printw + mr r8, r10 + bl Printw + _log 'lr ' + mr r8, r12 + bl Printw + _log '^n' + mtlr r16 + b Local_Panic + +major_0x02ccc_0x2a4 ; OUTSIDE REFERER + bsol+ cr6, Local_Panic + +; r6 = ewa + bl Save_r14_r31 +; r8 = sprg0 (not used by me) + + mr r30, r10 + lwz r29, 0x0018(r8) + lwz r31, -0x0008(r8) + stw r29, 0x0134(r6) + stw r30, 0x0074(r6) + stw r7, 0x0040(r6) + lwz r1, -0x0004(r1) + + _Lock PSA.SchLock, scratch1=r28, scratch2=r29 + + mr r8, r31 + bl major_0x13e4c + lwz r16, 0x0064(r31) + srwi r8, r7, 24 + rlwinm. r16, r16, 0, 9, 9 + cmpwi cr1, r8, 0x0c + bne- major_0x02ccc_0x524 + bne- cr1, major_0x02ccc_0x524 + lwz r8, 0x00e0(r31) + addi r8, r8, 0x01 + stw r8, 0x00e0(r31) + b major_0x02ccc_0x380 + +major_0x02ccc_0x310 ; OUTSIDE REFERER + bnsl+ cr6, Local_Panic + bl major_0x02980_0x114 + stw r10, 0x0084(r6) + rlwinm r7, r7, 0, 28, 26 + +; r6 = ewa + bl Save_r14_r31 +; r8 = sprg0 (not used by me) + + lwz r30, 0x0074(r6) + lwz r29, 0x0018(r8) + lwz r31, -0x0008(r8) + stw r29, 0x0134(r6) + stw r7, 0x0040(r6) + lwz r1, -0x0004(r1) + + _Lock PSA.SchLock, scratch1=r28, scratch2=r29 + + mr r8, r31 + bl major_0x13e4c + lwz r16, 0x0064(r31) + srwi r8, r7, 24 + rlwinm. r16, r16, 0, 9, 9 + cmpwi cr1, r8, 0x14 + bne- major_0x02ccc_0x524 + bne- cr1, major_0x02ccc_0x524 + lwz r8, 0x00e4(r31) + addi r8, r8, 0x01 + stw r8, 0x00e4(r31) + +major_0x02ccc_0x380 + mfsprg r14, 0 + rlwinm r7, r7, 0, 27, 25 + rlwinm r7, r7, 0, 0, 30 + lwz r29, -0x00e4(r14) + lis r17, 0x4152 + ori r17, r17, 0x4541 + lwz r16, 0x0004(r29) + cmplw r16, r17 + bnel+ Local_Panic + lwz r17, 0x0034(r29) + addi r17, r17, 0x01 + stw r17, 0x0034(r29) + lwz r8, 0x0018(r29) + +; r8 = id + bl LookupID +; r8 = something not sure what +; r9 = 0:inval, 1:proc, 2:task, 3:timer, 4:q, 5:sema, 6:cr, 7:cpu, 8:addrspc, 9:evtg, 10:cohg, 11:area, 12:not, 13:log + + lwz r16, 0x06b4(r1) + cmpwi r9, 0x0c + cmpwi cr1, r16, 0x00 + mr r26, r8 + bne- major_0x02ccc_0x430 + beq- cr1, major_0x02ccc_0x3d4 + beq- cr2, major_0x02ccc_0x430 + +major_0x02ccc_0x3d4 + lwz r16, 0x0064(r31) + addi r17, r31, 0x08 + addi r18, r31, 160 + stw r18, 0x0000(r17) + stw r18, 0x0008(r17) + lwz r19, 0x000c(r18) + stw r19, 0x000c(r17) + stw r17, 0x0008(r19) + stw r17, 0x000c(r18) + li r17, 0x01 + ori r16, r16, 0x2000 + stw r17, 0x00b0(r31) + stw r16, 0x0064(r31) + rlwinm r30, r30, 0, 0, 19 + lwz r27, 0x0000(r29) + lwz r28, 0x0000(r31) + stw r30, 0x0010(r26) + stw r27, 0x0014(r26) + stw r28, 0x0018(r26) + mr r30, r26 + bl major_0x0db04 + cmpwi r8, 0x00 + beq+ major_0x02964 + +major_0x02ccc_0x430 + mfcr r28 + li r8, 0x1c + beq- cr2, major_0x02ccc_0x4a8 + bl PoolAlloc_with_crset + mr. r26, r8 + beq- major_0x02ccc_0x50c + addi r17, r31, 0x08 + addi r18, r31, 160 + stw r18, 0x0000(r17) + stw r18, 0x0008(r17) + lwz r19, 0x000c(r18) + stw r19, 0x000c(r17) + stw r17, 0x0008(r19) + stw r17, 0x000c(r18) + li r17, 0x01 + stw r17, 0x00b0(r31) + lwz r27, 0x0000(r29) + lis r8, 0x6e6f + ori r8, r8, 0x7465 + lwz r29, 0x00a0(r31) + stw r27, 0x0010(r26) + stw r29, 0x0014(r26) + stw r8, 0x0004(r26) + stw r30, 0x0018(r26) + mr r8, r26 + addi r31, r1, -0xa24 + bl major_0x0c8b4 + lwz r8, -0x0410(r1) + bl major_0x0dce8 + b AlternateMPCallReturnPath + +major_0x02ccc_0x4a8 + mr r8, r31 + bl TaskReadyAsPrev + sync + lwz r31, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r31, 0x00 + li r31, 0x00 + bne+ cr1, major_0x02ccc_0x4cc + mflr r31 + bl panic + +major_0x02ccc_0x4cc + stw r31, PSA.SchLock + Lock.Count(r1) + mtcr r28 + bns- cr6, major_0x02ccc_0x504 + lwz r8, 0x0064(r6) + lwz r9, 0x0068(r6) + stw r8, 0x0024(r6) + stw r9, 0x0028(r6) + lwz r8, 0x006c(r6) + lwz r9, 0x0074(r6) + stw r8, 0x002c(r6) + stw r9, 0x0034(r6) + lwz r8, 0x007c(r6) + stw r8, 0x003c(r6) + crclr cr6_so + +major_0x02ccc_0x504 +; r6 = ewa + bl Restore_r14_r31 + b major_0x02980_0x178 + +major_0x02ccc_0x50c + li r16, 0x02 + stb r16, 0x0019(r31) + mr r8, r31 + bl TaskReadyAsPrev + bl major_0x14af8_0xa0 + b AlternateMPCallReturnPath + +major_0x02ccc_0x524 + b FuncExportedFromTasks + + + +; IntDecrementer + +; Xrefs: +; "vec" + + align kIntAlign + +IntDecrementer ; OUTSIDE REFERER +; r6 = saved at *(ewa + 0x18) +; sprg1 = saved at *(ewa + 4) +; rN (0,7,8,9,10,11,12,13, not r1) = saved at *(*(ewa - 0x14) + 0x104 + 8*N) + bl int_prepare +; r0 = 0 +; r1 = *(ewa - 4) +; r6 = kdp +; r7 = *(ewa - 0x10) # flags? +; r8 = ewa +; r10 = srr0 +; r11 = srr1 +; r12 = sprg2 +; r13 = cr + + lwz r8, 0x05a0(r1) + rlwinm. r9, r11, 0, 16, 16 + cmpwi cr1, r8, 0x00 + beq- MaskedInterruptTaken + beq- cr1, IntDecrementer_0x54 + + stw r16, 0x0184(r6) + stw r17, 0x018c(r6) + stw r18, 0x0194(r6) + stw r25, 0x01cc(r6) + bl major_0x14a98 + ble- IntDecrementer_0x48 + lwz r8, -0x09d4(r1) + mtspr dec, r8 + lwz r16, 0x0184(r6) + lwz r17, 0x018c(r6) + lwz r18, 0x0194(r6) + b skeleton_key + +IntDecrementer_0x48 + lwz r16, 0x0184(r6) + lwz r17, 0x018c(r6) + lwz r18, 0x0194(r6) + +IntDecrementer_0x54 +; r6 = ewa + bl Save_r14_r31 +; r8 = sprg0 (not used by me) + + + _Lock PSA.SchLock, scratch1=r8, scratch2=r9 + + lwz r8, 0x0e8c(r1) + addi r8, r8, 0x01 + stw r8, 0x0e8c(r1) + bl TimerDispatch + sync + lwz r8, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r8, 0x00 + li r8, 0x00 + bne+ cr1, IntDecrementer_0x9c + mflr r8 + bl panic + +IntDecrementer_0x9c + stw r8, PSA.SchLock + Lock.Count(r1) + +; r6 = ewa + bl Restore_r14_r31 + b skeleton_key + + + +; IntDSI + +; Xrefs: +; "vec" + + align kIntAlign + +IntDSI ; OUTSIDE REFERER + mfsprg r1, 0 + stmw r2, 0x0008(r1) + mfsprg r11, 1 + stw r0, 0x0000(r1) + stw r11, 0x0004(r1) + li r0, 0x00 + mfspr r10, srr0 + mfspr r11, srr1 + mfsprg r12, 2 + mfcr r13 + mfsprg r24, 3 + lwz r16, -0x0010(r1) + lwz r1, -0x0004(r1) + mfspr r26, dsisr + addi r23, r1, 0x4e0 + andis. r28, r26, 0x400 + mtsprg 3, r23 + mfmsr r14 + bne- major_0x03324_0x9c + ori r15, r14, 0x10 + mtmsr r15 + isync + lwz r27, 0x0000(r10) + mtmsr r14 + isync + + + +; major_0x03324 + +; Xrefs: +; IntDSI +; FDP_1214 + +major_0x03324 ; OUTSIDE REFERER + rlwinm. r18, r27, 18, 25, 29 + lwz r25, 0x0650(r1) + li r21, 0x00 + mfsprg r1, 0 + beq- major_0x03324_0x18 + lwzx r18, r1, r18 + +major_0x03324_0x18 + andis. r26, r27, 0xec00 + lwz r16, -0x0010(r1) + rlwinm r17, r27, 0, 6, 15 + rlwimi r16, r16, 27, 26, 26 + bge- major_0x03324_0x58 + rlwimi r25, r27, 7, 26, 29 + rlwimi r25, r27, 12, 25, 25 + lwz r26, 0x0b80(r25) + extsh r23, r27 + rlwimi r25, r26, 26, 22, 29 + mtlr r25 + mtcr r26 + add r18, r18, r23 + crclr cr5_so + rlwimi r17, r26, 6, 26, 5 + blr + +major_0x03324_0x58 + rlwimi r25, r27, 27, 26, 29 + rlwimi r25, r27, 0, 25, 25 + rlwimi r25, r27, 6, 23, 24 + rlwimi r25, r27, 4, 22, 22 + lwz r26, 0x0800(r25) + rlwinm r23, r27, 23, 25, 29 + rlwimi r25, r26, 26, 22, 29 + mtlr r25 + mtcr r26 + lwzx r23, r1, r23 + crclr cr5_so + rlwimi r17, r26, 6, 26, 5 + add r18, r18, r23 + blelr- cr3 + neg r23, r23 + add r18, r18, r23 + blr + +major_0x03324_0x9c ; OUTSIDE REFERER + ori r15, r14, 0x10 + mr r28, r16 + mfspr r18, dar + mfspr r19, dsisr + mtmsr r15 + isync + lwz r27, 0x0000(r10) + mtmsr r14 + isync + mtsprg 3, r24 + lwz r1, -0x0004(r1) + mr r31, r19 + mr r8, r18 + li r9, 0x00 + bl V2P + mr r16, r28 + crset cr3_so + mfsprg r1, 0 + beq- major_0x03324_0x12c + mr r18, r8 + rlwinm r28, r27, 13, 25, 29 + andis. r9, r31, 0x200 + rlwimi r18, r17, 0, 0, 19 + beq- major_0x03324_0x118 + lwzx r31, r1, r28 + stwcx. r31, 0, r18 + sync + dcbf 0, r18 + mfcr r31 + rlwimi r13, r31, 0, 0, 3 + b FDP_0da0 + +major_0x03324_0x118 + lwarx r31, 0, r18 + sync + dcbf 0, r18 + stwx r31, r1, r28 + b FDP_0da0 + +major_0x03324_0x12c + subi r10, r10, 4 + b FDP_0da0 + + + +; IntAlignment + +; Xrefs: +; "vec" + +; This int handler is our best foothold into the FDP! + + align kIntAlign + +IntAlignment ; OUTSIDE REFERER + mfsprg r1, 0 + stmw r2, 0x0008(r1) + mfsprg r11, 1 + stw r0, 0x0000(r1) + stw r11, 0x0004(r1) + li r0, 0x00 + + lwz r11, EWA.PA_CurTask(r1) + lwz r16, EWA.Flags(r1) + lwz r21, Task.ThingThatAlignVecHits(r11) + lwz r1, -0x0004(r1) ; wha??? + + lwz r11, KDP.NanoKernelInfo + NKNanoKernelInfo.MisalignmentCount(r1) + addi r11, r11, 1 + stw r11, KDP.NanoKernelInfo + NKNanoKernelInfo.MisalignmentCount(r1) + + mfspr r10, srr0 + mfspr r11, srr1 + mfsprg r12, 2 + mfcr r13 + mfsprg r24, 3 + mfspr r27, dsisr + mfspr r18, dar + + rlwinm. r21, r21, 0, 9, 9 ; KDP.ThingThatAlignVecHits + + addi r23, r1, KDP.RedVecBase + + bne- major_0x03548_0x20 + + ; DSISR for misaligned X-form instruction: + + ; (0) 0 (14)||(15) 29:30 (16)||(17) 25 (17)||(18) 21:24 (21)||(22) rD (26)||(27) rA? (31) + + ; DSISR for misaligned D-form instruction: + + ; (0) zero (16)||(17) 5 (17)||(18) 1:4 (21)||(22) rD (26)||(27) rA? (31) + +FDP_TableBase equ 0xa00 + + ; Virtual PC might put the thing in MSR_LE mode + rlwinm. r21, r11, 0, MSR_LEbit, MSR_LEbit ; msr bits in srr1 + + ; Get the FDP and F.O. if we were in MSR_LE mode + lwz r25, KDP.PA_FDP(r1) + bne- major_0x03548_0x20 + + + rlwinm. r21, r27, 17, 30, 31 ; evaluate hi two bits of XO (or 0 for d-form?) + + rlwinm r17, r27, 16, 6, 15 ; save src and dest register indices in r17 + + mfsprg r1, 0 + + rlwimi r25, r27, 24, 23, 29 ; add constant fields from dsisr (*4) to FDP + + + rlwimi r16, r16, 27, 26, 26 ; AllCpuFeatures: copy bit 21 to bit 26 + + bne- @regidx + + ; D-form (immediate-indexed) instruction + lwz r26, FDP_TableBase + 4*(0x40 + 0x20)(r25) ; use upper quarter of table + mfmsr r14 + rlwimi r25, r26, 26, 22, 29 ; third byte of lookup value is a /4 code offset in FDP + mtlr r25 ; so get ready to go there + ori r15, r14, 0x10 + mtcr r26 + rlwimi r17, r26, 6, 26, 5 ; wrap some shite around the register values + crclr cr5_so + blr + +@regidx + ; X-form (register-indexed) instruction + lwz r26, FDP_TableBase(r25) + mfmsr r14 + mtsprg 3, r23 + rlwimi r25, r26, 26, 22, 29 + mtlr r25 + ori r15, r14, 0x10 + mtcr r26 + rlwimi r17, r26, 6, 26, 5 + crclr 23 ; unset bit 23 = cr5_so + bgelr- cr3 ; jump now if bit 12 is off + + ; if bit 12 was on, turn on paging and fetch the offending insn + ; and also activate the Red vector table + mtmsr r15 + isync + lwz r27, 0x0000(r10) + mtmsr r14 + isync + mtsprg 3, r24 + blr + + + +; major_0x03548 + +; Xrefs: +; IntAlignment +; major_0x05808 + +major_0x03548 ; OUTSIDE REFERER + sync + mtmsr r14 + isync + mflr r23 + icbi 0, r23 + sync + isync + blr + +major_0x03548_0x20 ; OUTSIDE REFERER + li r8, 0x00 + lis r17, -0x100 + mtcr r8 + mr r19, r18 + rlwimi r17, r27, 7, 31, 31 + xori r17, r17, 0x01 + li r8, 0x18 + b major_0x02980 + + + +; IntDSIOtherOther + +; Xrefs: +; "vec" + + align kIntAlign + +IntDSIOtherOther ; OUTSIDE REFERER + mfsprg r1, 0 + mfspr r31, dsisr + mfspr r27, dar + andis. r28, r31, 0xc030 + lwz r1, -0x0004(r1) + bne- IntDSIOtherOther_0x1c8 + mfspr r30, srr1 + andi. r28, r30, 0x4000 + mfsprg r30, 0 + beq- IntDSIOtherOther_0x100 + stw r8, -0x00e0(r30) + stw r9, -0x00dc(r30) + mfcr r8 + stw r16, -0x00d8(r30) + stw r17, -0x00d4(r30) + stw r18, -0x00d0(r30) + stw r19, -0x00cc(r30) + stw r8, -0x00c8(r30) + lwz r8, -0x001c(r30) + mr r9, r27 + bl FindAreaAbove + lwz r16, 0x0024(r8) + lwz r17, 0x0028(r8) + cmplw r27, r16 + cmplw cr7, r27, r17 + blt- IntDSIOtherOther_0xe0 + bgt- cr7, IntDSIOtherOther_0xe0 + mr r31, r8 + mr r8, r27 + bl MPCall_95_0x1e4 + beq- IntDSIOtherOther_0xe0 + lwz r8, 0x0000(r30) + lwz r16, 0x0098(r31) + rlwinm r28, r8, 0, 29, 30 + cmpwi cr7, r28, 0x04 + cmpwi r28, 0x02 + beq- cr7, IntDSIOtherOther_0xe0 + beq- IntDSIOtherOther_0xe0 + +IntDSIOtherOther_0x98 + addi r17, r31, 0x90 + cmpw r16, r17 + addi r17, r16, 0x14 + beq- IntDSIOtherOther_0x158 + lwz r9, 0x0010(r16) + add r9, r9, r17 + +IntDSIOtherOther_0xb0 + lwz r18, 0x0000(r17) + cmplw cr7, r17, r9 + lwz r19, 0x0004(r17) + bgt- cr7, IntDSIOtherOther_0xd8 + cmplw r27, r18 + cmplw cr7, r27, r19 + blt- IntDSIOtherOther_0xd0 + ble- cr7, IntDSIOtherOther_0xe0 + +IntDSIOtherOther_0xd0 + addi r17, r17, 0x08 + b IntDSIOtherOther_0xb0 + +IntDSIOtherOther_0xd8 + lwz r16, 0x0008(r16) + b IntDSIOtherOther_0x98 + +IntDSIOtherOther_0xe0 + mfsprg r30, 0 + mfspr r31, dsisr + lwz r8, -0x00e0(r30) + lwz r9, -0x00dc(r30) + lwz r16, -0x00d8(r30) + lwz r17, -0x00d4(r30) + lwz r18, -0x00d0(r30) + lwz r19, -0x00cc(r30) + +IntDSIOtherOther_0x100 + andis. r28, r31, 0x800 + addi r29, r1, 800 + bnel- PagingFunc3 + li r28, 0x43 + and r28, r31, r28 + cmpwi cr7, r28, 0x43 + beql+ Local_Panic + mfsprg r28, 2 + mtlr r28 + bne- cr7, IntDSIOtherOther_0x144 + mfspr r28, srr0 + addi r28, r28, 0x04 + lwz r26, 0x0e90(r1) + mtspr srr0, r28 + addi r26, r26, 0x01 + stw r26, 0x0e90(r1) + b IntDSIOtherOther_0x19c + +IntDSIOtherOther_0x144 + andi. r28, r31, 0x03 + li r8, 0x16 + beq+ major_0x02980 + li r8, 0x15 + b major_0x02980 + +IntDSIOtherOther_0x158 + mfsprg r30, 0 + lwz r16, 0x0f00(r1) + lwz r8, -0x00c8(r30) + addi r16, r16, 0x01 + mtcr r8 + lwz r9, -0x00dc(r30) + stw r16, 0x0f00(r1) + lwz r16, -0x00d8(r30) + lwz r17, -0x00d4(r30) + lwz r18, -0x00d0(r30) + lwz r19, -0x00cc(r30) + lwz r8, -0x00e0(r30) + mfspr r29, srr1 + mfsprg r28, 2 + rlwinm r29, r29, 0, 18, 16 + mtlr r28 + mtspr srr1, r29 + +IntDSIOtherOther_0x19c + mfsprg r1, 1 + rlwinm r26, r25, 30, 24, 31 + rfi + dcb.b 32, 0 + + +IntDSIOtherOther_0x1c8 + andis. r28, r31, 0x8010 + bne- IntMachineCheckMemRetry_0x14c + + _Lock PSA.HTABLock, scratch1=r28, scratch2=r31 + + bl PagingFunc1 + sync + lwz r28, -0x0b90(r1) + cmpwi cr1, r28, 0x00 + li r28, 0x00 + bne+ cr1, IntDSIOtherOther_0x208 + mflr r28 + bl panic + +IntDSIOtherOther_0x208 + stw r28, -0x0b90(r1) + mfsprg r28, 2 + mtlr r28 + beq+ IntDSIOtherOther_0x19c + li r8, 0x12 + bge+ major_0x02980 + li r8, 0x14 + b major_0x02980 + + + +; IntMachineCheckMemRetry + +; Xrefs: +; "vec" +; IntDSIOtherOther + +IntMachineCheckMemRetry ; OUTSIDE REFERER + mfsprg r1, 0 + mr r28, r8 + + lwz r27, EWA.CPUBase + CPU.ID(r1) + _log 'CPU ' + mr r8, r27 + bl Printw + + _log 'MemRetry machine check - last EA ' + lwz r1, EWA.PA_KDP(r1) + lwz r27, 0x0694(r1) + mr r8, r27 + bl Printw + + _log ' SRR1 ' + mfspr r8, srr1 + mr r8, r8 + bl Printw + + _log ' SRR0 ' + mfspr r8, srr0 + mr r8, r8 + bl Printw + _log '^n' + + mr r8, r28 + lwz r1, EWA.PA_KDP(r1) + lwz r27, 0x0694(r1) + subf r28, r19, r27 + cmpwi r28, -0x10 + blt- IntMachineCheckMemRetry_0x14c + cmpwi r28, 0x10 + bgt- IntMachineCheckMemRetry_0x14c + + _Lock PSA.HTABLock, scratch1=r28, scratch2=r29 + + lwz r28, 0x0e98(r1) + addi r28, r28, 0x01 + stw r28, 0x0e98(r1) + lwz r29, 0x0698(r1) + li r28, 0x00 + stw r28, 0x0000(r29) + mfspr r28, pvr + rlwinm. r28, r28, 0, 0, 14 + sync + tlbie r27 + beq- IntMachineCheckMemRetry_0x124 + sync + tlbsync + +IntMachineCheckMemRetry_0x124 + sync + isync + sync + lwz r28, -0x0b90(r1) + cmpwi cr1, r28, 0x00 + li r28, 0x00 + bne+ cr1, IntMachineCheckMemRetry_0x148 + mflr r28 + bl panic + +IntMachineCheckMemRetry_0x148 + stw r28, -0x0b90(r1) + +IntMachineCheckMemRetry_0x14c ; OUTSIDE REFERER + cmplw r10, r19 + li r8, 0x13 + bne+ major_0x02980 + mfsprg r1, 0 + mtsprg 3, r24 + lmw r14, 0x0038(r1) + li r8, 0x0b + b major_0x02980_0x134 + + + +; IntISI + +; Xrefs: +; "vec" + + align kIntAlign + +IntISI ; OUTSIDE REFERER +; r6 = saved at *(ewa + 0x18) +; sprg1 = saved at *(ewa + 4) +; rN (0,7,8,9,10,11,12,13, not r1) = saved at *(*(ewa - 0x14) + 0x104 + 8*N) + bl int_prepare +; r0 = 0 +; r1 = *(ewa - 4) +; r6 = kdp +; r7 = *(ewa - 0x10) # flags? +; r8 = ewa +; r10 = srr0 +; r11 = srr1 +; r12 = sprg2 +; r13 = cr + + andis. r8, r11, 0x4020 + beq- major_0x039dc_0x14 + mfsprg r8, 0 + stmw r14, 0x0038(r8) + + _Lock PSA.HTABLock, scratch1=r28, scratch2=r31 + + mr r27, r10 + bl PagingFunc1 + sync + lwz r28, -0x0b90(r1) + cmpwi cr1, r28, 0x00 + li r28, 0x00 + bne+ cr1, IntISI_0x50 + mflr r28 + bl panic + +IntISI_0x50 + stw r28, -0x0b90(r1) + mfsprg r8, 0 + bne- major_0x039dc + mfsprg r24, 3 + mfmsr r14 + ori r15, r14, 0x10 + addi r23, r1, 0x4e0 + mtsprg 3, r23 + mr r19, r10 + mtmsr r15 + isync + lbz r23, 0x0000(r19) + sync + mtmsr r14 + isync + mfsprg r8, 0 + mtsprg 3, r24 + lmw r14, 0x0038(r8) + b skeleton_key + + + +; major_0x039dc + +; Xrefs: +; IntISI +; IntDSIOther + +major_0x039dc ; OUTSIDE REFERER + lmw r14, 0x0038(r8) + li r8, 0x0c + blt+ major_0x02980_0x134 + li r8, 0x0a + b major_0x02980_0x134 + +major_0x039dc_0x14 ; OUTSIDE REFERER + andis. r8, r11, 0x800 + li r8, 0x0e + bne+ major_0x02980_0x134 + li r8, 0x0b + b major_0x02980_0x134 + + + +; IntMachineCheck + +; Xrefs: +; "vec" + +IntMachineCheck ; OUTSIDE REFERER +; r6 = saved at *(ewa + 0x18) +; sprg1 = saved at *(ewa + 4) +; rN (0,7,8,9,10,11,12,13, not r1) = saved at *(*(ewa - 0x14) + 0x104 + 8*N) + bl int_prepare +; r0 = 0 +; r1 = *(ewa - 4) +; r6 = kdp +; r7 = *(ewa - 0x10) # flags? +; r8 = ewa +; r10 = srr0 +; r11 = srr1 +; r12 = sprg2 +; r13 = cr + + lwz r9, EWA.CPUBase + CPU.ID(r8) + _log 'CPU ' + mr r8, r9 + bl Printw + + _log 'Machine check at ' ; srr1/srr0 + mr r8, r11 + bl Printw + mr r8, r10 + bl Printw + + _log '- last unmapped EA ' + lwz r8, 0x0694(r1) + mr r8, r8 + bl Printw + _log '^n' + + rlwinm. r8, r11, 0, 2, 2 + beq- IntMachineCheck_0xa4 + bl kcCacheDispatch_0x39c + b skeleton_key + +IntMachineCheck_0xa4 + li r8, 0x07 + b major_0x02980_0x134 + + + +; MaskedInterruptTaken + +; Xrefs: +; IntDecrementer +; IntPerfMonitor +; IntThermalEvent +; IntExternalYellow + +MaskedInterruptTaken ; OUTSIDE REFERER + _log '*** CPU MALFUNCTION - Masked interrupt punched through. SRR1/0 ' + mr r8, r11 + bl Printw + mr r8, r10 + bl Printw + _log '^n' + lis r10, -0x4523 + ori r10, r10, 0xcb00 + li r8, 0x07 + b major_0x02980_0x134 + + + +; IntDSIOther + +; Xrefs: +; "vec" + + align kIntAlign + +IntDSIOther ; OUTSIDE REFERER + mfspr r8, dsisr + rlwimi r11, r8, 0, 0, 9 + andis. r8, r11, 0x4020 + beq+ major_0x039dc_0x14 + mfsprg r8, 0 + stmw r14, 0x0038(r8) + lwz r1, -0x0004(r8) + + _Lock PSA.HTABLock, scratch1=r28, scratch2=r31 + + mfspr r27, dar + bl PagingFunc1 + sync + lwz r28, -0x0b90(r1) + cmpwi cr1, r28, 0x00 + li r28, 0x00 + bne+ cr1, IntDSIOther_0x58 + mflr r28 + bl panic + +IntDSIOther_0x58 + stw r28, -0x0b90(r1) + mfsprg r8, 0 + bne+ major_0x039dc + lmw r14, 0x0038(r8) + mfsprg r1, 2 + mtlr r1 + mfsprg r1, 1 + rfi + dcb.b 32, 0 + + + + +; major_0x03be0 + +; Xrefs: +; "sup" + + align kIntAlign + +; dead code? + + dc.l 0x81610e40 + dc.l 0x7d8a6378 + dc.l 0x396b0001 + dc.l 0x91610e40 + dc.l 0x7d7b02a6 + dc.l 0x50e7deb4 + +kcReturnFromException ; OUTSIDE REFERER + ori r11, r11, 0x8000 + mtcrf 0x3f, r7 + cmplwi cr1, r3, 0x01 + blt- cr4, major_0x04a20_0x18 + blt- cr1, major_0x03be0_0x58 + beq- cr1, major_0x03be0_0x90 + addi r8, r3, -0x20 + lwz r9, 0x0eac(r1) + cmplwi r8, 0xe0 + addi r9, r9, 0x01 + stw r9, 0x0eac(r1) + mfsprg r1, 0 + rlwimi r7, r3, 24, 0, 7 + blt- major_0x03be0_0xe8 + li r8, 0x02 + b major_0x02980_0x134 + +major_0x03be0_0x58 + mfsprg r1, 0 + lwz r8, 0x0040(r6) + lwz r10, 0x0084(r6) + rlwimi r7, r8, 0, 17, 7 + lwz r8, 0x0044(r6) + rlwimi r11, r7, 0, 20, 23 + stw r8, -0x000c(r1) + andi. r8, r11, 0x900 + lwz r12, 0x008c(r6) + lwz r3, 0x0094(r6) + lwz r4, 0x009c(r6) + bnel- major_0x03e18 + addi r9, r6, 0x40 + b skeleton_key + +major_0x03be0_0x90 + lwz r9, 0x0ea8(r1) + lwz r8, 0x0040(r6) + addi r9, r9, 0x01 + stw r9, 0x0ea8(r1) + mfsprg r1, 0 + lwz r10, 0x0084(r6) + rlwimi r7, r8, 0, 17, 7 + lwz r8, 0x0044(r6) + mtcrf 0x0f, r7 + rlwimi r11, r7, 0, 20, 23 + stw r8, -0x000c(r1) + lwz r12, 0x008c(r6) + lwz r3, 0x0094(r6) + lwz r4, 0x009c(r6) + bne- cr2, major_0x03be0_0xe8 + bns- cr6, major_0x03be0_0xe8 + stmw r14, 0x0038(r1) + lwz r17, 0x0064(r6) + lwz r20, 0x0068(r6) + lwz r21, 0x006c(r6) + lwz r19, 0x0074(r6) + lwz r18, 0x007c(r6) + +major_0x03be0_0xe8 + beq+ cr2, major_0x02980_0x178 + crclr cr6_so + mfspr r10, srr0 + li r8, 0x02 + b major_0x02980_0x134 + + + +; save_all_registers + +; Xrefs: +; IntPerfMonitor +; IntThermalEvent + + align 5 + +save_all_registers ; OUTSIDE REFERER + mfsprg r1, 0 + stw r6, 0x0018(r1) + mfsprg r6, 1 + stw r6, 0x0004(r1) + lwz r6, -0x0014(r1) + stw r0, 0x0104(r6) + stw r7, 0x013c(r6) + stw r8, 0x0144(r6) + stw r9, 0x014c(r6) + stw r10, 0x0154(r6) + stw r11, 0x015c(r6) + stw r12, 0x0164(r6) + stw r13, 0x016c(r6) + li r0, 0x00 + mfspr r10, srr0 + mfspr r11, srr1 + mfcr r13 + mfsprg r12, 2 + lwz r7, -0x0010(r1) + lwz r1, -0x0004(r1) + +; r6 = ewa + b Save_r14_r31 +; r8 = sprg0 (not used by me) + + + +; How we arrive here: +; +; PowerPC exception vector saved r1/LR in SPRG1/2 and +; jumped where directed by the vecTable pointed to by +; SPRG3. That function bl'ed here. +; +; +; When we arrive here: +; +; r1 is saved in SPRG1 (r1 itself is junk) +; LR is saved in SPRG2 (LR itself contains return addr) +; +; +; Before we return: +; +; Reg Contains Original saved in +; --------------------------------------------- +; r0 0 ContextBlock +; r1 KDP EWA +; r2 (itself) +; r3 (itself) +; r4 (itself) +; r5 (itself) +; r6 ContextBlock EWA +; r7 AllCpuFeatures ContextBlock +; r8 EWA ContextBlock +; r9 (itself) ContextBlock +; r10 SRR0 ContextBlock +; r11 SRR1 ContextBlock +; r12 LR ContextBlock +; r13 CR ContextBlock +; +; +; Can be followed up by a call to Save_r14_r31, +; (which will put them in the ContextBlock too). + + align 5 + +int_prepare + + ; Get EWA pointer in r1 (phew) + mfsprg r1, 0 + + ; Save r6 in EWA + stw r6, EWA.r6(r1) + + ; Save pre-interrupt r1 (which SPRG1 held) to EWA + mfsprg r6, 1 + stw r6, EWA.r1(r1) + + ; Get ContextBlock pointer in r6 (phew) + lwz r6, EWA.PA_ContextBlock(r1) + + ; Save r0, r7-r13 in ContextBlock + stw r0, ContextBlock.r0(r6) + stw r7, ContextBlock.r7(r6) + stw r8, ContextBlock.r8(r6) + stw r9, ContextBlock.r9(r6) + stw r10, ContextBlock.r10(r6) + stw r11, ContextBlock.r11(r6) + stw r12, ContextBlock.r12(r6) + stw r13, ContextBlock.r13(r6) + + ; Zero r0 (convenient) + li r0, 0 + + ; Make some useful special registers conveniently available + mfspr r10, srr0 + mfspr r11, srr1 + mfcr r13 + mfsprg r12, 2 + + ; Point r8 to EWA + mr r8, r1 + + ; Features in r7, KDP in r8 + lwz r7, EWA.Flags(r1) + lwz r1, EWA.PA_KDP(r1) + + blr + + + +; IntFPUnavail + +; Xrefs: +; "vec" + + align kIntAlign + +IntFPUnavail ; OUTSIDE REFERER + mfsprg r1, 0 + stw r11, -0x0290(r1) + stw r6, -0x028c(r1) + lwz r6, -0x0004(r1) + lwz r11, 0x0e88(r6) + addi r11, r11, 0x01 + stw r11, 0x0e88(r6) + mfspr r11, srr1 + ori r11, r11, 0x2000 + mtspr srr1, r11 + mfmsr r11 + ori r11, r11, 0x2000 + lwz r6, -0x0014(r1) + mtmsr r11 + isync + bl LoadFloatsFromContextBlock + lwz r11, -0x0290(r1) + lwz r6, -0x028c(r1) + mfsprg r1, 2 + mtlr r1 + mfsprg r1, 1 + rfi + dcb.b 32, 0 + + + + +; major_0x03e18 + +; Xrefs: +; major_0x02980 +; major_0x03be0 +; IntFPUnavail +; kcRTASDispatch + +major_0x03e18 ; OUTSIDE REFERER + rlwinm. r8, r11, 0, 18, 18 + bnelr- + +major_0x03e18_0x8 ; OUTSIDE REFERER + lwz r8, 0x00e4(r6) + rlwinm. r8, r8, 1, 0, 0 + mfmsr r8 + ori r8, r8, 0x2000 + beqlr- + mtmsr r8 + isync + ori r11, r11, 0x2000 + +LoadFloatsFromContextBlock ; OUTSIDE REFERER + lfd f31, 0x00e0(r6) + lfd f0, 0x0200(r6) + lfd f1, 0x0208(r6) + lfd f2, 0x0210(r6) + lfd f3, 0x0218(r6) + lfd f4, 0x0220(r6) + lfd f5, 0x0228(r6) + lfd f6, 0x0230(r6) + lfd f7, 0x0238(r6) + mtfsf 0xff, f31 + lfd f8, 0x0240(r6) + lfd f9, 0x0248(r6) + lfd f10, 0x0250(r6) + lfd f11, 0x0258(r6) + lfd f12, 0x0260(r6) + lfd f13, 0x0268(r6) + lfd f14, 0x0270(r6) + lfd f15, 0x0278(r6) + lfd f16, 0x0280(r6) + lfd f17, 0x0288(r6) + lfd f18, 0x0290(r6) + lfd f19, 0x0298(r6) + lfd f20, 0x02a0(r6) + lfd f21, 0x02a8(r6) + lfd f22, 0x02b0(r6) + lfd f23, 0x02b8(r6) + lfd f24, 0x02c0(r6) + lfd f25, 0x02c8(r6) + lfd f26, 0x02d0(r6) + lfd f27, 0x02d8(r6) + lfd f28, 0x02e0(r6) + lfd f29, 0x02e8(r6) + lfd f30, 0x02f0(r6) + lfd f31, 0x02f8(r6) + blr + + + + + +major_0x03e18_0xb4 ; OUTSIDE REFERER + mfmsr r8 + ori r8, r8, 0x2000 + mtmsr r8 + isync + rlwinm r11, r11, 0, 19, 17 + stfd f0, 0x0200(r6) + stfd f1, 0x0208(r6) + stfd f2, 0x0210(r6) + stfd f3, 0x0218(r6) + stfd f4, 0x0220(r6) + stfd f5, 0x0228(r6) + stfd f6, 0x0230(r6) + stfd f7, 0x0238(r6) + stfd f8, 0x0240(r6) + stfd f9, 0x0248(r6) + stfd f10, 0x0250(r6) + stfd f11, 0x0258(r6) + stfd f12, 0x0260(r6) + stfd f13, 0x0268(r6) + stfd f14, 0x0270(r6) + stfd f15, 0x0278(r6) + stfd f16, 0x0280(r6) + stfd f17, 0x0288(r6) + stfd f18, 0x0290(r6) + stfd f19, 0x0298(r6) + stfd f20, 0x02a0(r6) + stfd f21, 0x02a8(r6) + stfd f22, 0x02b0(r6) + stfd f23, 0x02b8(r6) + mffs f0 + stfd f24, 0x02c0(r6) + stfd f25, 0x02c8(r6) + stfd f26, 0x02d0(r6) + stfd f27, 0x02d8(r6) + stfd f28, 0x02e0(r6) + stfd f29, 0x02e8(r6) + stfd f30, 0x02f0(r6) + stfd f31, 0x02f8(r6) + stfd f0, 0x00e0(r6) + blr + + + + +; indexed emulation code, mofo + +;two instructions per load-store register + + macro + CreateFloatJumpTable &opcode, &dest, &highest==31 + + if &highest > 0 + CreateFloatJumpTable &opcode, &dest, highest = (&highest) - 1 + endif + + &opcode (&highest), -0x2e0(r1) + b &dest + + endm + + +FloatLoadJumpTable + CreateFloatJumpTable lfd, FDP_0da0 + + +FloatSaveJumpTable + CreateFloatJumpTable stfd, FDP_003c + + + + +; major_0x04180 + +; Xrefs: +; IntPerfMonitor + + align 6 + +major_0x04180 ; OUTSIDE REFERER + stw r6, -0x0290(r1) + stw r10, -0x028c(r1) + stw r11, -0x0288(r1) + lwz r6, -0x0014(r1) + lwz r10, 0x00d8(r6) + mfspr r11, srr1 + cmpwi r10, 0x00 + beql- major_0x04180_0x9c + oris r11, r11, 0x200 + stw r9, -0x027c(r1) + mtspr srr1, r11 + mfmsr r11 + oris r11, r11, 0x200 + mtmsr r11 + isync + bl Restore_v0_v31 + lwz r8, -0x0004(r1) + lwz r11, 0x0ed4(r8) + addi r11, r11, 0x01 + stw r11, 0x0ed4(r8) + mtcr r13 + lwz r6, -0x0290(r1) + lwz r10, -0x028c(r1) + lwz r11, -0x0288(r1) + lwz r13, -0x0284(r1) + lwz r8, -0x0280(r1) + lwz r9, -0x027c(r1) + mfsprg r1, 2 + mtlr r1 + mfsprg r1, 1 + rfi + dcb.b 32, 0 + + +major_0x04180_0x9c + mtcr r13 + lwz r6, -0x0290(r1) + lwz r10, -0x028c(r1) + lwz r11, -0x0288(r1) + lwz r13, -0x0284(r1) + +; r6 = saved at *(ewa + 0x18) +; sprg1 = saved at *(ewa + 4) +; rN (0,7,8,9,10,11,12,13, not r1) = saved at *(*(ewa - 0x14) + 0x104 + 8*N) + bl int_prepare +; r0 = 0 +; r1 = *(ewa - 4) +; r6 = kdp +; r7 = *(ewa - 0x10) # flags? +; r8 = ewa +; r10 = srr0 +; r11 = srr1 +; r12 = sprg2 +; r13 = cr + + li r8, 0x04 + b major_0x02980_0x134 + + + +; IntPerfMonitor + +; Xrefs: +; "vec" + + align kIntAlign + +IntPerfMonitor ; OUTSIDE REFERER + mtlr r1 + mfsprg r1, 0 + stw r8, -0x0280(r1) + stw r13, -0x0284(r1) + mflr r8 + mfcr r13 + cmpwi r8, 0xf20 + beq+ major_0x04180 + mtcr r13 + lwz r13, -0x0284(r1) + lwz r8, -0x0280(r1) + bl save_all_registers + mr r28, r8 + rlwinm. r9, r11, 0, 16, 16 + beq+ MaskedInterruptTaken + + _Lock PSA.SchLock, scratch1=r8, scratch2=r9 + + lwz r8, -0x0414(r1) + +; r8 = id + bl LookupID + cmpwi r9, Notification.kIDClass + + mr r30, r8 + bne- IntPerfMonitor_0x88 + lwz r16, -0x0340(r28) + lwz r17, -0x0008(r28) + stw r16, 0x0010(r30) + lwz r16, 0x0000(r17) + stw r16, 0x0014(r30) + mfspr r16, 955 + stw r16, 0x0018(r30) + bl major_0x0db04 + +IntPerfMonitor_0x88 + sync + lwz r8, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r8, 0x00 + li r8, 0x00 + bne+ cr1, IntPerfMonitor_0xa4 + mflr r8 + bl panic + +IntPerfMonitor_0xa4 + stw r8, PSA.SchLock + Lock.Count(r1) + +; r6 = ewa + bl Restore_r14_r31 + b skeleton_key + + + +; IntThermalEvent + +; Xrefs: +; "vec" + + align kIntAlign + +IntThermalEvent ; OUTSIDE REFERER + bl save_all_registers + mr r28, r8 + rlwinm. r9, r11, 0, 16, 16 + beq+ MaskedInterruptTaken + _log 'Thermal event^n' + + _Lock PSA.SchLock, scratch1=r8, scratch2=r9 + + lwz r8, -0x0418(r1) + +; r8 = id + bl LookupID + cmpwi r9, Notification.kIDClass + + mr r30, r8 + bne- IntThermalEvent_0x68 + lwz r16, -0x0340(r28) + stw r16, 0x0010(r30) + bl major_0x0db04 + +IntThermalEvent_0x68 + sync + lwz r8, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r8, 0x00 + li r8, 0x00 + bne+ cr1, IntThermalEvent_0x84 + mflr r8 + bl panic + +IntThermalEvent_0x84 + stw r8, PSA.SchLock + Lock.Count(r1) + +; r6 = ewa + bl Restore_r14_r31 + b skeleton_key + + + +; kcRunAlternateContext + +; Xrefs: +; "sup" + + align kIntAlign + +kcRunAlternateContext ; OUTSIDE REFERER + mtcrf 0x3f, r7 + bnel+ cr2, skeleton_key + and. r8, r4, r13 + lwz r9, 0x0340(r1) + rlwinm r8, r3, 0, 0, 25 + cmpw cr1, r8, r9 + bne+ skeleton_key + lwz r9, 0x0344(r1) + bne- cr1, major_0x043a0_0x48 + +major_0x043a0_0x24 + addi r8, r1, 0x420 + mtsprg 3, r8 + lwz r8, 0x0648(r1) + mtcrf 0x3f, r7 + mfsprg r1, 0 + clrlwi r7, r7, 0x08 + stw r8, 0x005c(r9) + stw r9, -0x0014(r1) + b major_0x02980_0x18c + +major_0x043a0_0x48 + lwz r9, 0x0348(r1) + cmpw cr1, r8, r9 + beq- cr1, major_0x043a0_0x130 + lwz r9, 0x0350(r1) + cmpw cr1, r8, r9 + beq- cr1, major_0x043a0_0x110 + lwz r9, 0x0358(r1) + cmpw cr1, r8, r9 + beq- cr1, major_0x043a0_0xf0 + mfsprg r1, 0 + stmw r14, 0x0038(r1) + lwz r1, -0x0004(r1) + cmpw cr1, r8, r6 + beq- cr1, major_0x043a0_0x154 + mr r27, r8 + addi r29, r1, 800 + bl PagingFunc3 + clrlwi r23, r8, 0x14 + beq- major_0x043a0_0x154 + cmplwi r23, 0xd00 + mr r9, r8 + mr r8, r31 + ble- major_0x043a0_0xc4 + addi r27, r27, 0x1000 + addi r29, r1, 800 + bl PagingFunc3 + beq- major_0x043a0_0x154 + addi r31, r31, -0x1000 + xor r23, r8, r31 + rlwinm. r23, r23, 0, 25, 22 + bne- major_0x043a0_0x154 + +major_0x043a0_0xc4 + clrlwi r23, r31, 0x1e + cmpwi r23, 0x03 + rlwimi r8, r9, 0, 20, 31 + beq- major_0x043a0_0x154 + lwz r23, 0x0ea4(r1) + addi r23, r23, 0x01 + stw r23, 0x0ea4(r1) + mfsprg r1, 0 + lmw r14, 0x0038(r1) + lwz r1, -0x0004(r1) + stw r8, 0x035c(r1) + +major_0x043a0_0xf0 + lwz r8, 0x0350(r1) + stw r9, 0x0350(r1) + stw r8, 0x0358(r1) + lwz r9, 0x035c(r1) + lwz r8, 0x0354(r1) + stw r9, 0x0354(r1) + stw r8, 0x035c(r1) + lwz r9, 0x0350(r1) + +major_0x043a0_0x110 + lwz r8, 0x0348(r1) + stw r9, 0x0348(r1) + stw r8, 0x0350(r1) + lwz r9, 0x0354(r1) + lwz r8, 0x034c(r1) + stw r9, 0x034c(r1) + stw r8, 0x0354(r1) + lwz r9, 0x0348(r1) + +major_0x043a0_0x130 + lwz r8, 0x0340(r1) + stw r9, 0x0340(r1) + stw r9, 0x05b4(r1) + stw r8, 0x0348(r1) + lwz r9, 0x034c(r1) + lwz r8, 0x0344(r1) + stw r9, 0x0344(r1) + stw r8, 0x034c(r1) + b major_0x043a0_0x24 + +major_0x043a0_0x154 + mfsprg r1, 0 + lmw r14, 0x0038(r1) + lwz r1, -0x0004(r1) + li r8, 0x02 + b major_0x02980_0x134 + + + +; wordfill + +; Xrefs: +; setup +; FillIndigo + +; > r8 = dest +; > r22 = len in bytes +; > r23 = fillword + +wordfill ; OUTSIDE REFERER + subic. r22, r22, 4 + stwx r23, r8, r22 + bne+ wordfill + blr + + + +; kcResetSystem + +; Handle a 68k reset trap. +; Some messing around with 601 RTC vs later timebase +; registers. +; If Gary Davidian's first name and birthdate were in the +; 68k's A0/A1 (the 'skeleton key'), do something. +; Otherwise, farm it out to non_skeleton_reset_trap. + +; Xrefs: +; "sup" + +; > r3 = a0 +; > r4 = a1 + + align kIntAlign + +kcResetSystem ; OUTSIDE REFERER +; r6 = ewa + bl Save_r14_r31 +; r8 = sprg0 (not used by me) + + ; Check for 601 (rtc vs timebase) + mfpvr r9 + rlwinm. r9, r9, 0, 0, 14 + + ; This xoris/cmplwi technique is very cool + xoris r8, r3, 'Ga' + + beq- @is_601 + mftb r9 + b @endif_601 +@is_601 + dialect POWER + mfrtcl r9 + dialect PowerPC +@endif_601 + + ; Not sure why this would need to hit cr0? + andis. r9, r9, 0xffff + + cmplwi r8, 'ry' + bne- non_skeleton_reset_trap + + ; r4 (i.e. A1) == 5 May 1956? + xoris r8, r4, 0x0505 + cmplwi r8, 0x1956 + bne- non_skeleton_reset_trap + + andc r11, r11, r5 + lwz r8, ContextBlock.r7(r6) + or r11, r11, r8 + + _log 'Skeleton key inserted at' + + mr r8, r11 + bl Printw + + mr r8, r10 + bl Printw + + _log '^n' + + b skeleton_key + + + +; non_skeleton_reset_trap + +; A 68k reset trap without Gary Davidian's magic numbers. + +; Xrefs: +; kcResetSystem + +non_skeleton_reset_trap + + _log 'ResetSystem trap entered^n' + + lwz r8, KDP.OldKDP(r1) + + cmpwi r8, 0 + beq+ ResetBuiltinKernel + + _log 'Unplugging the replacement nanokernel^n' + + lwz r8, KDP.OldKDP(r1) + mfsprg r1, 0 + addi r9, r8, KDP.YellowVecBase + mtsprg 0, r8 ; old NK has only one EWA! + mtsprg 3, r9 + + lwz r9, EWA.r1(r1) + stw r9, EWA.r1(r8) + + lwz r9, EWA.r6(r1) + stw r9, EWA.r6(r8) + + stw r6, 0x065c(r8) + stw r7, 0x0660(r8) ; ?????????? + + lwz r9, -0x000c(r1) + stw r9, 0x0664(r8) + +; r6 = ewa + bl Restore_r14_r31 + subi r10, r10, 4 + lwz r1, -0x0004(r1) + +; sprg0 = for r1 and r6 +; r1 = kdp +; r6 = register restore area +; r7 = flag to insert into XER +; r10 = new srr0 (return location) +; r11 = new srr1 +; r12 = lr restore +; r13 = cr restore + b int_teardown + + + +; kcPrioritizeInterrupts + +; Xrefs: +; "sup" +; setup +; IntExternalYellow + +; > r1 = kdp + +kcPrioritizeInterrupts ; OUTSIDE REFERER + lwz r9, KDP.PA_InterruptHandler(r1) + mtlr r9 + blr + + + +; Move registers from CB to EWA, and Thud. + + align kIntAlign + +kcThud + + stw r2, EWA.r2(r1) + stw r3, EWA.r3(r1) + stw r4, EWA.r4(r1) + stw r5, EWA.r5(r1) + + lwz r8, ContextBlock.r7(r6) + lwz r9, ContextBlock.r8(r6) + stw r8, EWA.r7(r1) + stw r9, EWA.r8(r1) + + lwz r8, ContextBlock.r9(r6) + lwz r9, ContextBlock.r10(r6) + stw r8, EWA.r9(r1) + stw r9, EWA.r10(r1) + + lwz r8, ContextBlock.r11(r6) + lwz r9, ContextBlock.r12(r6) + stw r8, EWA.r11(r1) + stw r9, EWA.r12(r1) + + lwz r8, ContextBlock.r13(r6) + stw r8, EWA.r13(r1) + + stmw r14, EWA.r14(r1) + + bl Local_Panic + + + +; major_0x046d0 + +; Xrefs: +; "vec" +; kcThud + +major_0x046d0 ; OUTSIDE REFERER +; r6 = saved at *(ewa + 0x18) +; sprg1 = saved at *(ewa + 4) +; rN (0,7,8,9,10,11,12,13, not r1) = saved at *(*(ewa - 0x14) + 0x104 + 8*N) + bl int_prepare +; r0 = 0 +; r1 = *(ewa - 4) +; r6 = kdp +; r7 = *(ewa - 0x10) # flags? +; r8 = ewa +; r10 = srr0 +; r11 = srr1 +; r12 = sprg2 +; r13 = cr + + li r8, 0x02 + b major_0x02980_0x134 + + + +; IntExternalOrange + +; Xrefs: +; "vec" + + align kIntAlign + +IntExternalOrange ; OUTSIDE REFERER +; r6 = saved at *(ewa + 0x18) +; sprg1 = saved at *(ewa + 4) +; rN (0,7,8,9,10,11,12,13, not r1) = saved at *(*(ewa - 0x14) + 0x104 + 8*N) + bl int_prepare +; r0 = 0 +; r1 = *(ewa - 4) +; r6 = kdp +; r7 = *(ewa - 0x10) # flags? +; r8 = ewa +; r10 = srr0 +; r11 = srr1 +; r12 = sprg2 +; r13 = cr + + mtcrf 0x3f, r7 + bnel+ cr2, Local_Panic + li r8, 0x00 + b major_0x02980_0x134 + + + +; IntProgram + +; Xrefs: +; "vec" + + align kIntAlign + +IntProgram ; OUTSIDE REFERER +; r6 = saved at *(ewa + 0x18) +; sprg1 = saved at *(ewa + 4) +; rN (0,7,8,9,10,11,12,13, not r1) = saved at *(*(ewa - 0x14) + 0x104 + 8*N) + bl int_prepare +; r0 = 0 +; r1 = *(ewa - 4) +; r6 = kdp +; r7 = *(ewa - 0x10) # flags? +; r8 = ewa +; r10 = srr0 +; r11 = srr1 +; r12 = sprg2 +; r13 = cr + + lwz r8, 0x0648(r1) + mtcr r11 + xor r8, r10, r8 + bne- cr3, IntProgram_0x144 + cmplwi r8, 0x00 + cmplwi cr1, r8, 0x20 + beq- IntProgram_0x120 + beq- cr1, IntProgram_0x120 + cmplwi r8, 0x0c + cmplwi cr1, r8, 0x40 + beq- IntProgram_0x120 + blt- cr1, IntProgram_0x110 + bne- cr6, IntProgram_0x58 + stw r14, 0x0174(r6) + mfsprg r14, 3 + addi r8, r1, -0x750 + mfmsr r9 + mtsprg 3, r8 + ori r8, r9, 0x10 + mtmsr r8 + isync + +IntProgram_0x58 + lwz r8, 0x0000(r10) + bne- cr6, IntProgram_0x74 + isync + mtmsr r9 + isync + mtsprg 3, r14 + lwz r14, 0x0174(r6) + +IntProgram_0x74 + mtcr r7 + xoris r8, r8, 0xfff + cmplwi r8, 0x10 + cmplwi cr1, r8, 0x00 + bge- IntProgram_0x150 + cmplwi cr7, r8, 0x08 + cmplwi r8, 0x03 + slwi r8, r8, 2 + beq- cr1, IntProgram_0xac + beq- cr7, IntProgram_0xd0 + beq- IntProgram_0xac + blt- cr4, IntProgram_0x150 + blt- cr2, IntProgram_0xac + ble- cr2, IntProgram_0x150 + +IntProgram_0xac + add r8, r8, r1 + lwz r9, KDP.NanoKernelInfo + NKNanoKernelInfo.NanoKernelCallCounts(r8) + addi r9, r9, 0x01 + stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.NanoKernelCallCounts(r8) + +IntProgram_0xbc + lwz r8, KDP.NanoKernelCallTable(r8) + mtlr r8 + addi r10, r10, 0x04 + rlwimi r7, r7, 27, 26, 26 + blr + +IntProgram_0xd0 + lwz r9, 0x0104(r6) + add r8, r8, r1 + cmpwi r9, -0x01 + lwz r9, KDP.NanoKernelInfo + NKNanoKernelInfo.NanoKernelCallCounts(r8) + addi r9, r9, 0x01 + stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.NanoKernelCallCounts(r8) + bne+ IntProgram_0xbc + addi r10, r10, 0x04 + rlwimi r7, r7, 27, 26, 26 + mfsprg r8, 0 + rlwimi r13, r7, 8, 2, 2 + lwz r9, -0x0008(r8) + xoris r13, r13, 0x2000 + lwz r8, 0x00ec(r9) + stw r8, 0x0104(r6) + b skeleton_key + +IntProgram_0x110 + mtcr r7 + blt- cr4, IntProgram_0x150 + blt- cr2, IntProgram_0x120 + ble- cr2, IntProgram_0x150 + +IntProgram_0x120 + add r8, r8, r1 + lwz r9, KDP.NanoKernelInfo + NKNanoKernelInfo.NanoKernelCallCounts(r8) + lwz r10, KDP.NanoKernelCallTable(r8) + addi r9, r9, 0x01 + stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.NanoKernelCallCounts(r8) + mtlr r10 + mr r10, r12 + rlwimi r7, r7, 27, 26, 26 + blr + +IntProgram_0x144 + blt+ cr3, FDP_1214 + bgt- cr3, FDP_1214 + bso- cr2, IntProgram_0x160 + +IntProgram_0x150 + rlwinm r8, r11, 17, 28, 29 + addi r8, r8, 0x4b3 + rlwnm r8, r8, r8, 0x1c, 0x1f + b major_0x02980_0x134 + +IntProgram_0x160 + li r8, 0x03 + bso+ cr3, major_0x02980_0x134 + addi r10, r10, 0x04 + rlwimi r7, r7, 27, 26, 26 + b major_0x02980_0x134 + + + +; IntExternalYellow + +; Xrefs: +; "vec" + + align kIntAlign + +IntExternalYellow ; OUTSIDE REFERER + + bl int_prepare + + ; RET r0 = 0 + ; r1 = KernelData + ; r6 = ECB + ; r7 = AllCpuFeatures + ; r8 = EWA (pretend KDP) + ; r10 = SRR0 + ; r11 = SRR1 + ; r12 = LR from SPRG2 + ; r13 = CR + + + ; Sanity check + + rlwinm. r9, r11, 0, MSR_EEbit, MSR_EEbit + beq+ MaskedInterruptTaken + + + ; How many CPUs? + + lwz r9, EWA.CPUBase + CPU.CgrpList + LLL.Freeform(r8) + lwz r9, CoherenceGroup.CpuCount(r9) + cmpwi r9, 2 + + + ; Uniprocessor machine: go straight to PIH + + blt+ kcPrioritizeInterrupts + + + ; Multiprocessor machine: signal another CPU? + + bl Save_r14_r31 + + li r9, 9 + stw r9, -0x0238(r8) + + li r8, 1 + bl SIGP + + bl Restore_r14_r31 + + ; These do not match any public Apple error codes? + cmpwi r8, -0x725e + cmpwi cr1, r8, -0x725d + cmpwi cr2, r8, -0x725f + + beq+ kcPrioritizeInterrupts + beq+ cr1, skeleton_key + bne+ cr2, kcPrioritizeInterrupts + + mfsprg r9, 0 + li r8, 0x01 + stb r8, -0x0118(r9) + b skeleton_key + + + +; SIGP + +; Really need to figure out what this does... + +; Xrefs: +; IntExternalYellow +; MPCall_43 +; KCStartCPU +; KCCpuPlugin +; major_0x14af8 +; MPCall_103 + +; > r7 = flags +; > r8 = usually 2? + + align 5 + +SIGP ; OUTSIDE REFERER + mfsprg r23, 0 + mtcr r7 + lwz r16, -0x001c(r23) + slwi r20, r3, 2 + stw r16, -0x02ac(r23) + blt- cr4, major_0x04a20_0x18 + cmpwi cr2, r8, 0x00 + lwz r18, -0x0238(r23) + beq- cr2, SIGP_0x28 + slwi r20, r18, 2 + +SIGP_0x28 + lwz r22, -0x0338(r23) + li r8, -0x7266 + lwz r17, 0x0038(r22) + lwz r16, 0x0044(r22) + mr. r17, r17 + beqlr- + slwi r16, r16, 2 + li r8, -0x7267 + cmplw r20, r16 + bgelr- + stw r10, -0x02d0(r23) + stw r11, -0x02cc(r23) + stw r12, -0x02c8(r23) + stw r13, -0x02c4(r23) + mfxer r16 + mfctr r17 + stw r16, -0x02c0(r23) + mflr r16 + stw r17, -0x02bc(r23) + stw r16, -0x02b8(r23) + stw r6, -0x02b4(r23) + stw r7, -0x02b0(r23) + lwz r9, -0x001c(r23) + lwz r8, 0x004c(r22) + cmpw r9, r8 + beq- SIGP_0x94 + bl SetAddrSpcRegisters + +SIGP_0x94 + lwz r16, 0x0004(r23) + lwz r17, 0x0018(r23) + stw r16, 0x010c(r6) + stw r2, 0x0114(r6) + stw r3, 0x011c(r6) + stw r4, 0x0124(r6) + stw r5, 0x012c(r6) + stw r17, 0x0134(r6) + lwz r17, 0x0648(r1) + lhz r16, -0x0116(r23) + lwz r19, -0x0964(r1) + slwi r16, r16, 2 + rlwinm r19, r19, 0, 18, 15 + lwz r8, 0x003c(r22) + lwz r9, 0x0040(r22) + lwzx r20, r8, r20 + lwz r18, 0x0000(r20) + mtlr r17 + mtspr srr0, r18 + mtspr srr1, r19 + lwzx r1, r9, r16 + lwz r2, 0x0004(r20) + srwi r3, r16, 2 + ori r7, r7, 0x8000 + mr r16, r6 + stw r7, -0x0010(r23) + addi r6, r23, -0x318 + stw r6, -0x0014(r23) + beq- cr2, SIGP_0x128 + lwz r4, -0x0234(r23) + lwz r5, -0x0230(r23) + lwz r6, -0x022c(r23) + lwz r7, -0x0228(r23) + lwz r8, -0x0224(r23) + lwz r9, -0x0220(r23) + lwz r10, -0x021c(r23) + rfi + +SIGP_0x128 + lwz r6, 0x0134(r16) + lwz r7, 0x013c(r16) + lwz r8, 0x0144(r16) + lwz r9, 0x014c(r16) + lwz r10, 0x0154(r16) + rfi + + + +; major_0x04a20 + +; Xrefs: +; "vec" +; major_0x02980 +; major_0x03be0 +; SIGP + +major_0x04a20 ; OUTSIDE REFERER + mfsprg r23, 0 + lwz r6, -0x0014(r23) + lwz r7, -0x0010(r23) + lwz r1, -0x0004(r23) + mfspr r10, srr0 + mfspr r11, srr1 + +major_0x04a20_0x18 ; OUTSIDE REFERER + mfsprg r23, 0 + lwz r7, -0x02b0(r23) + andis. r8, r11, 0x02 + stw r7, -0x0010(r23) + bne- major_0x04a20_0x30 + li r3, -0x7265 + +major_0x04a20_0x30 + lwz r8, -0x02ac(r23) + lwz r9, -0x001c(r23) + cmpw r9, r8 + beq- major_0x04a20_0x44 + bl SetAddrSpcRegisters + +major_0x04a20_0x44 + lwz r10, -0x02d0(r23) + lwz r11, -0x02cc(r23) + lwz r12, -0x02c8(r23) + lwz r13, -0x02c4(r23) + lwz r8, -0x02c0(r23) + lwz r9, -0x02bc(r23) + mtxer r8 + lwz r8, -0x02b8(r23) + lwz r6, -0x02b4(r23) + mtctr r9 + stw r6, -0x0014(r23) + mtlr r8 + mr r8, r3 + mr r9, r4 + lwz r16, 0x010c(r6) + lwz r2, 0x0114(r6) + lwz r3, 0x011c(r6) + lwz r4, 0x0124(r6) + lwz r5, 0x012c(r6) + lwz r17, 0x0134(r6) + stw r16, 0x0004(r23) + stw r17, 0x0018(r23) + blr + + + +; IntSyscall + +; Not fully sure about this one + +; Xrefs: +; "vec" + +IntSyscall ; OUTSIDE REFERER + + ; Only r1 and LR have been saved, so these compares clobber cr0 + + cmpwi r0, -3 + bne- @not_minus_3 + + ; sc -3: + + ; unset MSR_PR bit + mfspr r1, srr1 + rlwinm. r0, r1, 26, 26, 27 ; nonsense code? + rlwinm r1, r1, 0, 18, 16 + blt- @dont_unset_pr ; r0 should never have bit 0 set + mtspr srr1, r1 + @dont_unset_pr + + ; restore LR from SPRG2, r1 from SPRG1 + mfsprg r1, 2 + mtlr r1 + mfsprg r1, 1 + + rfi + +@not_minus_3 + cmpwi r0, -1 + mfsprg r1, 0 + bne- @not_minus_1 + + ; sc -1: mess around with flags + + lwz r0, -0x0010(r1) + mfsprg r1, 2 + rlwinm. r0, r0, 0, 10, 10 + mtlr r1 + mfsprg r1, 1 + rfi + +@not_minus_1 + cmpwi r0, -2 + bne- @not_any_special + + ; sc -2: more flag nonsense? + + lwz r0, -0x0010(r1) + lwz r1, -0x0008(r1) + rlwinm. r0, r0, 0, 10, 10 + lwz r0, 0x00ec(r1) + mfsprg r1, 2 + mtlr r1 + mfsprg r1, 1 + rfi + +@not_any_special + + ; Positive numbered syscalls are a fast path to MPDispatch (twi 31, r31, 8) + + bl int_prepare ; Save the usual suspects and get comfy + +; Reg Contains Original saved in +; --------------------------------------------- +; r0 0 ContextBlock +; r1 KDP EWA +; r2 (itself) +; r3 (itself) +; r4 (itself) +; r5 (itself) +; r6 ContextBlock EWA +; r7 AllCpuFeatures ContextBlock +; r8 EWA ContextBlock +; r9 (itself) ContextBlock +; r10 SRR0 ContextBlock +; r11 SRR1 ContextBlock +; r12 LR ContextBlock +; r13 CR ContextBlock + + lwz r9, KDP.NanoKernelInfo + NKNanoKernelInfo.NanoKernelCallCounts + 32(r1) + addi r9, r9, 1 + stw r9, KDP.NanoKernelInfo + NKNanoKernelInfo.NanoKernelCallCounts + 8*4(r1) + + ; Not sure what to make of these + _bset r11, r11, 14 + rlwimi r7, r7, 27, 26, 26 + + b kcMPDispatch + + + +; IntTrace + +; Xrefs: +; "vec" + + align kIntAlign + +IntTrace ; OUTSIDE REFERER +; r6 = saved at *(ewa + 0x18) +; sprg1 = saved at *(ewa + 4) +; rN (0,7,8,9,10,11,12,13, not r1) = saved at *(*(ewa - 0x14) + 0x104 + 8*N) + bl int_prepare +; r0 = 0 +; r1 = *(ewa - 4) +; r6 = kdp +; r7 = *(ewa - 0x10) # flags? +; r8 = ewa +; r10 = srr0 +; r11 = srr1 +; r12 = sprg2 +; r13 = cr + + li r8, 0x08 + b major_0x02980_0x134 + + + +; IgnoreSoftwareInt + +; Xrefs: +; "vec" + + align kIntAlign + +IgnoreSoftwareInt ; OUTSIDE REFERER + mfspr r1, srr0 + addi r1, r1, 0x04 + mtspr srr0, r1 + mfsprg r1, 2 + mtlr r1 + mfsprg r1, 1 + rfi + dcb.b 32, 0 + + + + +; HandlePerfMonitorInt + +; Xrefs: +; "vec" + + align kIntAlign + +HandlePerfMonitorInt ; OUTSIDE REFERER + mfspr r1, srr1 + oris r1, r1, 0x200 + mtspr srr1, r1 + mfsprg r1, 2 + mtlr r1 + mfsprg r1, 1 + rfi + dcb.b 32, 0 + diff --git a/NanoKernel/NKMPCalls.s b/NanoKernel/NKMPCalls.s new file mode 100644 index 0000000..3be93ca --- /dev/null +++ b/NanoKernel/NKMPCalls.s @@ -0,0 +1,2672 @@ +; Important note: If you want more than r3-r5, get them from ECB!!! + +; Unimplemented MPCalls from MPLibrary: +; NKSetPrInfoPageSize 109 +; NKSetPrInfoILockSizes 110 +; NKSetPrInfoTransCache 111 +; NKSetPrInfoL1Cache 112 +; NKSetPrInfoL2Cache 113 + + + +;MPCall_Panic set MPCall_Panic + + + + if &TYPE('NKDebugShim') != 'UNDEFINED' +MaxMPCallCount equ 300 + else +MaxMPCallCount equ 134 + endif + + + + MACRO + DeclareMPCall &n, &code +@h + org MPCallTable + 4*&n + dc.l &code - NKTop - 4*&n + org @h + ENDM + + + ; Creates a blank table without overflowing PPCAsm's default + ; macro stack size :) + + MACRO + CreateMPCallTbl &n + + if &n >= 1 + dc.l (MPCallBad - NKTop) - (* - MPCallTable) + endif + + if &n >= 2 + dc.l (MPCallBad - NKTop) - (* - MPCallTable) + endif + + if &n >= 3 + dc.l (MPCallBad - NKTop) - (* - MPCallTable) + endif + + if &n >= 4 + dc.l (MPCallBad - NKTop) - (* - MPCallTable) + endif + + if &n >= 5 + dc.l (MPCallBad - NKTop) - (* - MPCallTable) + endif + + if &n >= 6 + dc.l (MPCallBad - NKTop) - (* - MPCallTable) + endif + + if &n >= 7 + dc.l (MPCallBad - NKTop) - (* - MPCallTable) + endif + + if &n >= 8 + dc.l (MPCallBad - NKTop) - (* - MPCallTable) + endif + + if &n >= 9 + dc.l (MPCallBad - NKTop) - (* - MPCallTable) + endif + + if &n >= 10 + dc.l (MPCallBad - NKTop) - (* - MPCallTable) + endif + + if &n >= 11 + CreateMPCallTbl (&n) - 10 + endif + + ENDM + + + +kcMPDispatch ; reached by `sc`, or `twi *, *, 8` + + bl Save_r14_r31 + + lwz r8, EWA.r6(r8) ; clobbers our EWA pointer :( + lwz r14, KDP.PA_NanoKernelCode(r1) ; but r14... + lwz r15, ContextBlock.r0(r6) ; ...and r15 were saved + stw r8, ContextBlock.r6(r6) ; why move r6 from EWA to ContextBlock? + b MPCallTableEnd + +MPCallTable + CreateMPCallTbl MaxMPCallCount +MPCallTableEnd + +; Not sure where this counter table is? + + lwz r16, KDP.NanoKernelInfo + NKNanoKernelInfo.MPDispatchCountTblPtr(r1) + rlwinm r17, r15, 2, 20, 29 + cmplwi r16, 0 + beq- @no_count + lwzx r18, r16, r17 + addi r18, r18, 1 + stwx r18, r16, r17 +@no_count + + cmplwi r15, MaxMPCallCount + rlwimi r14, r15, 2, 21, 29 + llabel r16, MPCallTable + lwzx r15, r16, r14 + add r15, r15, r14 + mtlr r15 + bltlr- + + + +; Handler for out-of-range or unimplemented (debug) +; MPCalls. + +MPCallBad ; OUTSIDE REFERER + li r3, -4 + b CommonMPCallReturnPath + + + +; ReleaseAndMPCallWasBad + +; Xrefs: +; MPCall_75 + +ReleaseAndMPCallWasBad ; OUTSIDE REFERER + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + + bne+ cr1, @dont_panic + mflr r16 + bl panic +@dont_panic + + stw r16, PSA.SchLock + Lock.Count(r1) + b MPCallBad + + + +; ReleaseAndReturnZeroFromMPCall + +; Xrefs: +; KCRegisterCpuPlugin +; KCCreateProcess +; MPCall_5 +; MPCall_55 +; KCCreateCpuStruct +; MPCall_43 +; KCStartCPU +; KCStopScheduling +; KCRegisterThermalHandler +; KCRegisterPMFHandler +; KCMarkPMFTask +; NKSetClockStep +; NKSetClockDriftCorrection +; MPCall_115 +; KCRegisterExternalHandler +; MPCall_133 +; MPCall_15 +; MPCall_16 +; MPCall_39 +; MPCall_17 +; MPCall_18 +; MPCall_19 +; MPCall_20 +; MPCall_23 +; MPCall_24 +; MPCall_21 +; MPCall_25 +; MPCall_27 +; MPCall_29 +; MPCall_28 +; MPCall_26 +; MPCall_49 +; MPCall_50 +; MPCall_51 +; MPCall_52 +; MPCall_53 +; MPCall_54 +; MPCall_40 +; MPCall_30 +; MPCall_31 +; MPCall_32 +; MPCall_64 +; MPCall_65 +; MPCall_66 +; MPCall_128 +; MPCall_120 +; MPCall_7 +; MPCall_8 +; MPCall_10 +; MPCall_14 +; MPCall_56 +; MPCall_58 +; MPCall_59 +; MPCall_60 +; MPCall_61 +; MPCall_63 +; MPCall_114 +; KCSetTaskType +; MPCall_71 +; KCSetTaskAddressSpace +; MPCall_74 +; MPCall_75 +; MPCall_130 +; KCSetAreaAccess +; MPCall_123 +; MPCall_77 +; MPCall_78 +; MPCall_80 +; MPCall_125 +; MPCall_81 +; MPCall_98 +; MPCall_82 +; KCMapPage +; KCUnmapPages +; KCMakePhysicallyContiguous +; KCLockPages +; KCUnlockPages +; KCHoldPages +; KCUnholdPages +; MPCall_91 +; MPCall_92 +; MPCall_93 +; MPCall_94 +; MPCall_129 +; MPCall_95 + +; > r1 = kdp + +ReleaseAndReturnZeroFromMPCall ; OUTSIDE REFERER + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + + bne+ cr1, @dont_panic + mflr r16 + bl panic +@dont_panic + + stw r16, PSA.SchLock + Lock.Count(r1) + + + +; ReturnZeroFromMPCall + +; Xrefs: +; ReleaseAndReturnZeroFromMPCall +; MPCall_0 +; MPCall_6 +; MPCall_55 +; MPCall_34 +; MPCall_35 +; MPCall_36 +; KCGetNextID +; KCGetNextIDOwnedByProcess +; MPCall_38 +; MPCall_62 +; KCStartCPU +; MPCall_47 +; NKxprintf +; KCSetBlueProcessID +; NKLocateInfoRecord +; MPCall_108 +; NKSetClockDriftCorrection +; MPCall_41 +; MPCall_79 +; MPCall_83 +; MPCall_102 + +ReturnZeroFromMPCall ; OUTSIDE REFERER + li r3, 0x00 + b CommonMPCallReturnPath + + + +; major_0x0af60 + +; Xrefs: +; KCRegisterCpuPlugin +; KCCreateProcess +; MPCall_5 +; MPCall_6 +; MPCall_34 +; KCCreateCpuStruct +; MPCall_43 +; KCStartCPU +; KCStopScheduling +; MPCall_115 +; MPCall_15 +; MPCall_39 +; MPCall_17 +; MPCall_18 +; MPCall_19 +; MPCall_20 +; MPCall_23 +; MPCall_24 +; MPCall_25 +; MPCall_27 +; MPCall_29 +; MPCall_28 +; MPCall_49 +; MPCall_52 +; MPCall_53 +; MPCall_40 +; MPCall_31 +; MPCall_64 +; MPCall_7 +; MPCall_8 +; MPCall_9 +; MPCall_10 +; KCThrowException +; MPCall_58 +; MPCall_60 +; MPCall_61 +; MPCall_114 +; MPCall_70 +; MPCall_71 +; KCSetTaskAddressSpace +; MPCall_72 +; MPCall_73 +; MPCall_74 +; MPCall_75 +; MPCall_130 +; MPCall_83 +; KCMapPage +; KCUnmapPages +; KCMakePhysicallyContiguous +; KCLockPages +; KCHoldPages +; MPCall_91 +; MPCall_92 +; MPCall_94 +; MPCall_95 + +major_0x0af60 ; OUTSIDE REFERER + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + + bne+ cr1, @dont_panic + mflr r16 + bl panic +@dont_panic + + stw r16, PSA.SchLock + Lock.Count(r1) + + + +; I'd really live a name for this. + +major_0x0af60_0x20 ; OUTSIDE REFERER + mfspr r16, pvr + rlwinm. r16, r16, 0, 0, 14 + + beq- @is_601 + mftb r4 + b @not_601 +@is_601 + mfspr r4, rtcl +@not_601 + + xori r16, r4, 0x1007 + xoris r16, r16, 0x1950 + + stw r16, PSA.ScrambledMPCallTime(r1) + li r3, -0x726e + b CommonMPCallReturnPath + + + + +; dead code? + li r3, kMPDeletedErr + b CommonMPCallReturnPath + + + +ReleaseAndTimeoutMPCall ; OUTSIDE REFERER + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + + bne+ cr1, @dont_panic + mflr r16 + bl panic +@dont_panic + + stw r16, PSA.SchLock + Lock.Count(r1) + li r3, kMPTimeOutErr + b CommonMPCallReturnPath + + + +ReleaseAndReturnMPCallTaskAborted ; OUTSIDE REFERER + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + + bne+ cr1, @dont_panic + mflr r16 + bl panic +@dont_panic + + stw r16, PSA.SchLock + Lock.Count(r1) + li r3, kMPTaskAbortedErr + b CommonMPCallReturnPath + + + +ReleaseAndReturnMPCallOOM ; OUTSIDE REFERER + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + + bne+ cr1, @dont_panic + mflr r16 + bl panic +@dont_panic + + stw r16, PSA.SchLock + Lock.Count(r1) + + + +; ReturnMPCallOOM + +; Xrefs: +; major_0x0af60 +; MPCall_0 +; KCRegisterCpuPlugin +; MPCall_47 +; NKxprintf +; KCSetBlueProcessID +; NKSetClockStep +; NKSetClockDriftCorrection +; MPCall_39 +; MPCall_20 +; MPCall_7 +; MPCall_82 +; KCPropogateExternalInterrupt +; major_0x16b80 + +ReturnMPCallOOM ; OUTSIDE REFERER + li r3, kMPInsufficientResourcesErr + b CommonMPCallReturnPath + + + +; ReleaseAndReturnMPCallBlueBlocking + +; Xrefs: +; MPCall_18 +; MPCall_23 +; MPCall_27 +; MPCall_52 + +ReleaseAndReturnMPCallBlueBlocking ; OUTSIDE REFERER + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, major_0x0b02c_0x1c + mflr r16 + bl panic + +major_0x0b02c_0x1c + stw r16, PSA.SchLock + Lock.Count(r1) + + + +; ReturnMPCallBlueBlocking + +; Xrefs: +; ReleaseAndReturnMPCallBlueBlocking +; MPCall_33 + +ReturnMPCallBlueBlocking ; OUTSIDE REFERER + li r3, kMPBlueBlockingErr + b CommonMPCallReturnPath + + + +; major_0x0b054 + +; Xrefs: +; MPCall_128 +; MPCall_120 +; MPCall_73 +; MPCall_75 +; MPCall_130 +; KCSetAreaAccess +; MPCall_123 +; MPCall_78 +; MPCall_80 +; MPCall_125 +; MPCall_81 +; MPCall_98 +; KCMapPage +; KCUnmapPages +; KCMakePhysicallyContiguous +; KCLockPages +; KCUnlockPages +; KCHoldPages +; KCUnholdPages +; MPCall_91 +; MPCall_92 +; MPCall_93 +; MPCall_94 +; MPCall_129 + +major_0x0b054 ; OUTSIDE REFERER + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, major_0x0b054_0x1c + mflr r16 + bl panic + +major_0x0b054_0x1c + stw r16, PSA.SchLock + Lock.Count(r1) + + + +; ReturnParamErrFromMPCall + +; Xrefs: +; major_0x0b054 +; KCGetNextIDOwnedByProcess +; NKLocateInfoRecord +; MPCall_108 +; NKSetClockStep +; KCGetPageSize +; MPCall_95 +; KCPropogateExternalInterrupt +; major_0x16b80 + +ReturnParamErrFromMPCall ; OUTSIDE REFERER + li r3, -0x32 + b CommonMPCallReturnPath + + + +; ReleaseAndReturnMPCallPrivilegedErr + +; Xrefs: +; KCRegisterCpuPlugin +; KCCreateProcess +; MPCall_5 +; MPCall_6 +; MPCall_43 +; KCStartCPU +; KCStopScheduling +; KCRegisterThermalHandler +; KCRegisterPMFHandler +; KCMarkPMFTask +; MPCall_115 +; KCRegisterExternalHandler +; MPCall_16 +; MPCall_39 +; MPCall_17 +; MPCall_18 +; MPCall_19 +; MPCall_23 +; MPCall_24 +; MPCall_22 +; MPCall_21 +; MPCall_27 +; MPCall_29 +; MPCall_28 +; MPCall_26 +; MPCall_50 +; MPCall_51 +; MPCall_52 +; MPCall_53 +; MPCall_54 +; MPCall_41 +; MPCall_30 +; MPCall_31 +; MPCall_32 +; MPCall_65 +; MPCall_67 +; MPCall_66 +; MPCall_128 +; MPCall_7 +; MPCall_8 +; MPCall_9 +; MPCall_10 +; MPCall_14 +; MPCall_56 +; KCThrowException +; MPCall_58 +; MPCall_59 +; MPCall_60 +; MPCall_61 +; MPCall_63 +; MPCall_114 +; KCSetTaskType +; MPCall_71 +; KCSetTaskAddressSpace +; MPCall_72 +; MPCall_73 +; MPCall_74 +; MPCall_75 +; MPCall_130 +; KCSetAreaAccess +; MPCall_123 +; MPCall_77 +; MPCall_78 +; MPCall_80 +; MPCall_125 +; MPCall_81 +; MPCall_98 +; MPCall_82 +; KCMapPage +; KCUnmapPages +; KCMakePhysicallyContiguous +; KCLockPages +; KCUnlockPages +; KCHoldPages +; KCUnholdPages +; MPCall_91 +; MPCall_92 +; MPCall_93 +; MPCall_94 +; MPCall_129 + +ReleaseAndReturnMPCallPrivilegedErr ; OUTSIDE REFERER + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + + bne+ cr1, @dont_panic + mflr r16 + bl panic +@dont_panic + + stw r16, PSA.SchLock + Lock.Count(r1) + li r3, kMPPrivilegedErr + b CommonMPCallReturnPath + + + +ReleaseAndReturnMPCallInvalidIDErr ; OUTSIDE REFERER + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + + bne+ cr1, @dont_panic + mflr r16 + bl panic +@dont_panic + + stw r16, PSA.SchLock + Lock.Count(r1) + + + +; ReturnMPCallInvalidIDErr + +; Xrefs: +; ReleaseAndReturnMPCallPrivilegedErr +; KCRegisterCpuPlugin +; MPCall_35 +; MPCall_36 +; KCGetNextID +; KCGetNextIDOwnedByProcess +; MPCall_38 +; MPCall_62 +; KCCreateCpuStruct +; KCSetBlueProcessID +; MPCall_14 +; MPCall_79 + +ReturnMPCallInvalidIDErr ; OUTSIDE REFERER + li r3, kMPInvalidIDErr + b CommonMPCallReturnPath + + + +; major_0x0b0cc + +; Xrefs: +; KCLockPages +; KCUnlockPages +; KCHoldPages +; KCUnholdPages + +major_0x0b0cc ; OUTSIDE REFERER + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, major_0x0b0cc_0x1c + mflr r16 + bl panic + +major_0x0b0cc_0x1c + stw r16, PSA.SchLock + Lock.Count(r1) + li r3, -0x725a + b CommonMPCallReturnPath + + + +; ReturnZeroFromMPCall_again + +; Xrefs: +; MPCall_1 + +ReturnZeroFromMPCall_again ; OUTSIDE REFERER + li r3, 0x00 + b CommonMPCallReturnPath + + + +; AlternateMPCallReturnPath + +; Xrefs: +; major_0x02964 +; major_0x02ccc +; MPCall_55 +; MPCall_18 +; MPCall_23 +; MPCall_22 +; MPCall_27 +; MPCall_52 +; MPCall_67 +; MPCall_9 +; KCThrowException +; MPCall_58 +; MPCall_60 +; MPCall_61 +; KCSetTaskAddressSpace +; MPCall_81 +; MPCall_98 + +AlternateMPCallReturnPath ; OUTSIDE REFERER + crclr cr2_eq + b TrulyCommonMPCallReturnPath + +ReleaseAndReturnMPCall ; OUTSIDE REFERER + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + + bne+ cr1, @dont_panic + mflr r16 + bl panic +@dont_panic + + stw r16, PSA.SchLock + Lock.Count(r1) + + + +; CommonMPCallReturnPath + +; Xrefs: +; MPCallBad +; ReturnZeroFromMPCall +; major_0x0af60 +; ReturnMPCallOOM +; ReturnMPCallBlueBlocking +; ReturnParamErrFromMPCall +; ReleaseAndReturnMPCallPrivilegedErr +; ReturnMPCallInvalidIDErr +; major_0x0b0cc +; ReturnZeroFromMPCall_again +; AlternateMPCallReturnPath +; KCGetCpuCount +; MPCall_6 +; KCYieldWithHint +; KCCpuPlugin +; NKPrintHex +; NKPrintDecimal +; MPCall_11 +; MPCall_12 +; KCGetPageSizeClasses +; KCGetPageSize +; MPCall_70 +; KCCurrentAddressSpace +; KCHomeAddressSpace +; MPCall_72 +; MPCall_73 +; MPCall_84 +; KCGetFreePageCount +; KCGetUnheldFreePageCount +; major_0x16b80 + +CommonMPCallReturnPath ; OUTSIDE REFERER + crset cr2_eq + +TrulyCommonMPCallReturnPath ; OUTSIDE REFERER + mfsprg r8, 0 + lwz r9, 0x0134(r6) + stw r9, 0x0018(r8) + + bne- cr2, @do_the_other_thing_instead + bl Restore_r14_r31 + b skeleton_key +@do_the_other_thing_instead + + b major_0x142dc + + + +; MPCall_0 + + DeclareMPCall 0, MPCall_0 + +MPCall_0 ; OUTSIDE REFERER + andi. r16, r3, 0xfff + mr r30, r7 + mr r29, r6 + bne+ ReturnMPCallOOM + rlwinm. r4, r3, 20, 12, 31 + lwz r9, 0x06a8(r1) + beq+ ReturnMPCallOOM + cmplw r4, r9 + bge+ ReturnMPCallOOM + + _Lock PSA.HTABLock, scratch1=r17, scratch2=r18 + + bl VeryPopularFunction + bge- cr4, MPCall_0_0xd8 + bgt- cr5, MPCall_0_0xd8 + bns- cr7, MPCall_0_0xd8 + bgt- cr7, MPCall_0_0xd8 + bltl+ cr5, VMDoSomethingWithTLB + bgel+ cr5, VMSecondLastExportedFunc + ori r16, r16, 0x404 + li r31, 0x03 + rlwimi r9, r31, 0, 30, 31 + bl VMDoSomeIO + mr r7, r30 + mr r6, r29 + sync + lwz r16, -0x0b90(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, MPCall_0_0x8c + mflr r16 + bl panic + +MPCall_0_0x8c + stw r16, -0x0b90(r1) + + _Lock PSA.PoolLock, scratch1=r16, scratch2=r17 + + rlwinm r8, r9, 0, 0, 19 + mr r9, r3 + +; r1 = kdp +; r8 = anywhere in new page (phys) +; r9 = page_virt + bl ExtendPool + sync + lwz r16, -0x0ad0(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, MPCall_0_0xd0 + mflr r16 + bl panic + +MPCall_0_0xd0 + stw r16, -0x0ad0(r1) + b ReturnZeroFromMPCall + +MPCall_0_0xd8 + mr r7, r30 + mr r6, r29 + sync + lwz r16, -0x0b90(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, MPCall_0_0xfc + mflr r16 + bl panic + +MPCall_0_0xfc + stw r16, -0x0b90(r1) + b ReturnMPCallOOM + + + +; MPCall_1 + + DeclareMPCall 1, MPCall_1 + +MPCall_1 ; OUTSIDE REFERER + b ReturnZeroFromMPCall_again + + + +; KCRegisterCpuPlugin + + + DeclareMPCall 2, KCRegisterCpuPlugin + +KCRegisterCpuPlugin ; OUTSIDE REFERER + mfsprg r14, 0 + lwz r15, EWA.PA_CurTask(r14) + lwz r16, ContextBlock.r6(r6) + + andi. r8, r4, 0xfff ; page alignment? + bne+ ReturnMPCallOOM + + andi. r8, r5, 0xfff ; r5 page aligned and nonzero? + cmpwi cr1, r5, 0 + bne+ ReturnMPCallOOM + beq+ cr1, ReturnMPCallOOM + + _Lock PSA.SchLock, scratch1=r18, scratch2=r19 + + mr. r8, r3 + bne- KCRegisterCpuPlugin_0x50 + mfsprg r15, 0 + lwz r14, -0x0338(r15) + b KCRegisterCpuPlugin_0x60 + +KCRegisterCpuPlugin_0x50 +; r8 = id + bl LookupID + cmpwi r9, CoherenceGroup.kIDClass + + mr r14, r8 + bne+ ReturnMPCallInvalidIDErr + +KCRegisterCpuPlugin_0x60 + cmpwi r16, 0x00 + bne- KCRegisterCpuPlugin_0x74 + stw r16, 0x0038(r14) + stw r16, 0x0034(r14) + b ReleaseAndReturnMPCallInvalidIDErr + +KCRegisterCpuPlugin_0x74 + add r17, r4, r5 + cmplw r16, r4 + cmplw cr1, r16, r17 + blt+ ReleaseAndReturnMPCallOOM + bge+ cr1, ReleaseAndReturnMPCallOOM + lwz r19, 0x0038(r14) + mr. r19, r19 + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r27, r4 + addi r29, r1, 800 + bl PagingFunc3 + beq+ ReleaseAndReturnMPCallOOM + rlwinm r18, r31, 0, 0, 19 + mr r27, r16 + mr r19, r16 + addi r29, r1, 800 + bl PagingFunc3 + beq+ ReleaseAndReturnMPCallOOM + rlwimi r19, r31, 0, 0, 19 + stw r4, 0x0028(r14) + stw r18, 0x002c(r14) + stw r5, 0x0030(r14) + stw r16, 0x0034(r14) + stw r19, 0x0038(r14) + lwz r27, 0x0000(r19) + addi r29, r1, 800 + bl PagingFunc3 + beq+ ReleaseAndReturnMPCallOOM + rlwimi r27, r31, 0, 0, 19 + stw r27, 0x0040(r14) + mfsprg r16, 0 + lwz r17, -0x001c(r16) + stw r17, 0x004c(r14) + addi r16, r19, 0x20 + stw r16, 0x003c(r14) + subi r16, r16, 4 + lwz r17, 0x001c(r19) + cmplwi r17, 0x40 + stw r17, 0x0044(r14) + bgt+ ReleaseAndReturnMPCallOOM + +KCRegisterCpuPlugin_0x114 + lwzu r27, 0x0004(r16) + addi r29, r1, 800 + bl PagingFunc3 + beq+ ReleaseAndReturnMPCallOOM + addi r17, r17, -0x01 + rlwimi r27, r31, 0, 0, 19 + cmpwi r17, 0x00 + stw r27, 0x0000(r16) + bgt+ KCRegisterCpuPlugin_0x114 + _log 'CPU plugin registered^n' + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; KCGetCpuCount + +; Called by MPProcessors and MPProcessorsScheduled + +; > r3 = 0:all, 1:scheduled + +; < r3 = cpu_count + + DeclareMPCall 3, KCGetCpuCount + +KCGetCpuCount ; OUTSIDE REFERER + + mfsprg r15, 0 + lwz r14, EWA.CPUBase + CPU.CgrpList + LLL.Freeform(r15) + mr. r8, r3 + + lwz r3, CoherenceGroup.CpuCount(r14) + beq+ CommonMPCallReturnPath + + lwz r3, CoherenceGroup.ScheduledCpuCount(r14) + b CommonMPCallReturnPath + + + +; ARG AddressSpaceID r3 +; RET AddressSpaceID r3, ??? r4, ProcessStructID r5 + + DeclareMPCall 4, KCCreateProcess + +KCCreateProcess ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr. r8, r3 + bne- @spac_id_supplied + lwz r3, PSA.SystemAddressSpaceID(r1) + mr r8, r3 +@spac_id_supplied + + bl LookupID +; r8 = something not sure what +; r9 = 0:inval, 1:proc, 2:task, 3:timer, 4:q, 5:sema, 6:cr, 7:cpu, 8:addrspc, 9:evtg, 10:cohg, 11:area, 12:not, 13:log + + cmpwi r9, AddressSpace.kIDClass + mr r30, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + + li r8, 0x20 ;Process.Size + bl PoolAlloc + + mr. r31, r8 + beq+ major_0x0af60 + + li r9, Process.kIDClass + bl MakeID + + cmpwi r8, 0x00 + bne- @did_not_fail + mr r8, r31 + bl PoolFree + b major_0x0af60 +@did_not_fail + + stw r8, Process.ID(r31) + + lisori r16, Process.kSignature + stw r16, Process.Signature(r31) + + stw r3, Process.SystemAddressSpaceID(r31) ; NOT SYSTEM -- fix struct + stw r30, Process.SystemAddressSpacePtr(r31) + + lwz r17, Process.AddressSpaceCount(r31) + addi r17, r17, 1 + stw r17, Process.AddressSpaceCount(r31) + + mr r5, r8 + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 5, MPCall_5 + +MPCall_5 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Process.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r16, 0x0008(r31) + rlwinm. r17, r16, 0, 30, 30 + bne+ ReleaseAndReturnMPCallOOM + ori r16, r16, 0x02 + stw r16, 0x0008(r31) + mr r8, r3 + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; MPCall_6 + +; Xrefs: +; kcMPDispatch +; KCStopScheduling +; MPCall_9 +; KCThrowException + + DeclareMPCall 6, MPCall_6 + +MPCall_6 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Process.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r16, 0x0008(r31) + lwz r17, 0x0010(r31) + rlwinm. r8, r16, 0, 30, 30 + cmpwi cr1, r17, 0x00 + beq+ ReleaseAndReturnMPCallOOM + bne+ cr1, ReleaseAndReturnMPCallOOM + mr r8, r3 + bl DeleteID + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, MPCall_6_0x68 + mflr r16 + bl panic + +MPCall_6_0x68 + stw r16, PSA.SchLock + Lock.Count(r1) + mr r8, r31 + bl PoolFree + b ReturnZeroFromMPCall + +MPCall_6_0x78 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mfsprg r16, 0 + rlwinm. r8, r7, 0, 10, 10 + lwz r17, 0x0658(r1) + lwz r31, -0x0008(r16) + beq- MPCall_6_0xb4 + lwz r8, 0x00cc(r17) + rlwinm r8, r8, 0, 24, 21 + oris r8, r8, 0x8000 + stw r8, 0x00cc(r17) + +MPCall_6_0xb4 + mr r8, r31 + bl major_0x13e4c + li r16, 0x02 + stb r16, 0x0019(r31) + bl TaskReadyAsPrev + mr r8, r31 + bl major_0x14af8 + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, MPCall_6_0xec + mflr r16 + bl panic + +MPCall_6_0xec + stw r16, PSA.SchLock + Lock.Count(r1) + b CommonMPCallReturnPath + + + +; KCYieldWithHint + + + DeclareMPCall 13, KCYieldWithHint + +KCYieldWithHint ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mfsprg r16, 0 + rlwinm. r8, r7, 0, 10, 10 + lwz r17, 0x0658(r1) + lwz r31, -0x0008(r16) + beq- KCYieldWithHint_0x68 + clrlwi. r8, r3, 0x1f + lwz r8, 0x00cc(r17) + rlwinm r8, r8, 0, 24, 21 + oris r8, r8, 0x8000 + stw r8, 0x00cc(r17) + beq- KCYieldWithHint_0x68 + lbz r16, 0x0019(r31) + cmpwi r16, 0x02 + bge- KCYieldWithHint_0x7c + mr r8, r31 + bl major_0x13e4c + li r16, 0x02 + stb r16, 0x0019(r31) + bl TaskReadyAsNext + b KCYieldWithHint_0x7c + +KCYieldWithHint_0x68 + mr r8, r31 + bl major_0x13e4c + li r16, 0x02 + stb r16, 0x0019(r31) + bl TaskReadyAsPrev + +KCYieldWithHint_0x7c + mr r8, r31 + bl major_0x14af8 + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, KCYieldWithHint_0xa0 + mflr r16 + bl panic + +KCYieldWithHint_0xa0 + stw r16, PSA.SchLock + Lock.Count(r1) + b CommonMPCallReturnPath + + + + DeclareMPCall 33, MPCall_33 + +MPCall_33 ; OUTSIDE REFERER + rlwinm. r8, r7, 0, 10, 10 + bne+ ReturnMPCallBlueBlocking + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + b MPCall_55_0x60 + + + +; MPCall_55 + +; Xrefs: +; kcMPDispatch +; MPCall_33 + + DeclareMPCall 55, MPCall_55 + +MPCall_55 ; OUTSIDE REFERER + rlwinm. r8, r7, 0, 10, 10 + lwz r16, 0x0e80(r1) + beq- MPCall_55_0x60 + lwz r17, -0x08e4(r1) + lwz r18, 0x0658(r1) + cmpw r16, r17 + stw r16, -0x08e4(r1) + bne+ ReturnZeroFromMPCall + lwz r8, 0x00cc(r18) + rlwinm r8, r8, 0, 24, 21 + oris r8, r8, 0x8000 + stw r8, 0x00cc(r18) + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + lwz r16, -0x0410(r1) + cmpwi r16, -0x01 + li r16, 0x00 + bne- MPCall_55_0x60 + stw r16, -0x0410(r1) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_55_0x60 ; OUTSIDE REFERER + mfsprg r16, 0 + li r17, 0x01 + lwz r31, -0x0008(r16) + addi r16, r31, 0x20 + stb r17, 0x0014(r16) + clrlwi r3, r3, 0x01 + stw r3, 0x0038(r16) + stw r4, 0x003c(r16) + stw r31, 0x0018(r16) + mr r8, r16 + bl called_by_init_tmrqs + mr r8, r31 + bl major_0x13e4c + addi r16, r1, -0xa44 + addi r17, r31, 0x08 + stw r16, 0x0000(r17) + stw r16, 0x0008(r17) + lwz r18, 0x000c(r16) + stw r18, 0x000c(r17) + stw r17, 0x0008(r18) + stw r17, 0x000c(r16) + li r3, 0x00 + b AlternateMPCallReturnPath + + + + DeclareMPCall 34, MPCall_34 + +MPCall_34 ; OUTSIDE REFERER + mr r8, r3 + mr r9, r4 + +; r1 = kdp +; r9 = kind + bl MakeID + cmpwi r8, 0x00 + beq+ major_0x0af60_0x20 + mr r5, r8 + b ReturnZeroFromMPCall + + + + DeclareMPCall 35, MPCall_35 + +MPCall_35 ; OUTSIDE REFERER + mr r8, r3 + bl DeleteID + cmpwi r8, 0x01 + beq+ ReturnZeroFromMPCall + b ReturnMPCallInvalidIDErr + + + + DeclareMPCall 36, MPCall_36 + +MPCall_36 ; OUTSIDE REFERER + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, 0 ; invalid + + mr r4, r9 + mr r5, r8 + bne+ ReturnZeroFromMPCall + b ReturnMPCallInvalidIDErr + + + +; Replace the provided process/coherence/console ID with +; the "next" one. IDs were opaque but were only longs. +; Wrapped by MPGetNext*ID, which indirects the opaque ID +; structure. +; From MP docs: A coherence group is the set of processors +; and other bus controllers that have cache-coherent +; access to memory. Mac OS 9 defines only one coherence +; group, which is all the processors that can access +; internal memory (RAM). Other coherence groups are +; possible; for example, a PCI card with its own memory +; and processors can comprise a coherence group. + +; > r3 = kind (process=1,coherence=10,console=13) +; > r4 = prev_id + +; < r3 = MP result code +; < r4 = next_id + + DeclareMPCall 37, KCGetNextID + +KCGetNextID ; OUTSIDE REFERER + mr r8, r4 + mr r9, r3 + bl GetNextIDOfClass + cmpwi r8, 0x00 + mr r4, r8 + bne+ ReturnZeroFromMPCall + b ReturnMPCallInvalidIDErr + + + +; Replace the provided address +; space/task/queue/semaphore/critical +; region/timer/event/notification ID with the "next" one. +; IDs were opaque but were only longs. Wrapped by +; MPGetNext*ID, which indirects the opaque ID structure. +; Differs from KCGetNextID because it deals in +; objects owned by a particular process. + +; Useful info about some poorly understood structures + +; ARG ProcessID r3, IDClass r4, ID r5 +; RET MPErr r3, IDClass r4, ID r5 + + DeclareMPCall 116, KCGetNextIDOwnedByProcess + +KCGetNextIDOwnedByProcess ; OUTSIDE REFERER + + ; Confirm that owner ID in r3 is a Process + + mr r8, r3 + bl LookupID + cmpwi r9, Process.kIDClass + bne+ ReturnMPCallInvalidIDErr + + + ; Loop over IDs (and resolve them) until one is owned by the Process + +@try_another_id + mr r8, r5 + mr r9, r4 + +; ARG ID r8, IDClass r9 + bl GetNextIDOfClass +; RET ID r8 + + mr. r5, r8 + beq+ ReturnMPCallInvalidIDErr + +; ARG ID r8 + bl LookupID +; RET Ptr r8, IDClass r9 + + cmpwi r4, Task.kIDClass + cmpwi cr1, r4, Timer.kIDClass + beq- @task + beq- cr1, @timer + + cmpwi r4, Queue.kIDClass + cmpwi cr1, r4, Semaphore.kIDClass + beq- @queue + beq- cr1, @semaphore + + cmpwi r4, CriticalRegion.kIDClass + cmpwi cr1, r4, AddressSpace.kIDClass + beq- @critical_region + beq- cr1, @address_space + + cmpwi r4, EventGroup.kIDClass + cmpwi cr1, r4, Area.kIDClass + beq- @event_group + beq- cr1, @area + + cmpwi r4, Notification.kIDClass + cmpwi cr1, r4, ConsoleLog.kIDClass + beq- @notification + beq- cr1, @console_log + + b ReturnParamErrFromMPCall + +@task + lwz r17, Task.ThingThatAlignVecHits(r8) + lwz r9, Task.ProcessID(r8) + + rlwinm. r17, r17, 0, 15, 15 + beq- @not_owned_by_blue_process + lwz r9, PSA.blueProcessPtr(r1) + lwz r9, Task.ID(r9) +@not_owned_by_blue_process + + cmpw r9, r3 + bne+ @try_another_id + b ReturnZeroFromMPCall + +@timer + lwz r9, Timer.ProcessID(r8) + cmpw r9, r3 + bne+ @try_another_id + b ReturnZeroFromMPCall + +@queue + lwz r9, Queue.ProcessID(r8) + cmpw r9, r3 + bne+ @try_another_id + b ReturnZeroFromMPCall + +@semaphore + lwz r9, Semaphore.ProcessID(r8) + cmpw r9, r3 + bne+ @try_another_id + b ReturnZeroFromMPCall + +@critical_region + lwz r9, CriticalRegion.ProcessID(r8) + cmpw r9, r3 + bne+ @try_another_id + b ReturnZeroFromMPCall + +@address_space + lwz r9, AddressSpace.ProcessID(r8) + cmpw r9, r3 + bne+ @try_another_id + b ReturnZeroFromMPCall + +@event_group + lwz r9, EventGroup.ProcessID(r8) + cmpw r9, r3 + bne+ @try_another_id + b ReturnZeroFromMPCall + +@area + lwz r9, Area.ProcessID(r8) + cmpw r9, r3 + bne+ @try_another_id + b ReturnZeroFromMPCall + +@notification + lwz r9, Notification.ProcessID(r8) + cmpw r9, r3 + bne+ @try_another_id + b ReturnZeroFromMPCall + +@console_log + lwz r9, ConsoleLog.ProcessID(r8) + cmpw r9, r3 + bne+ @try_another_id + b ReturnZeroFromMPCall + + + + DeclareMPCall 38, MPCall_38 + +MPCall_38 ; OUTSIDE REFERER + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Process.kIDClass + + bne+ ReturnMPCallInvalidIDErr + mr r31, r8 + +MPCall_38_0x14 + mr r8, r4 + li r9, 0x02 + bl GetNextIDOfClass + cmpwi r8, 0x00 + beq+ ReturnMPCallInvalidIDErr + mr r4, r8 + +; r8 = id + bl LookupID +; r8 = something not sure what +; r9 = 0:inval, 1:proc, 2:task, 3:timer, 4:q, 5:sema, 6:cr, 7:cpu, 8:addrspc, 9:evtg, 10:cohg, 11:area, 12:not, 13:log + + lwz r17, 0x0064(r8) + lwz r16, 0x0060(r8) + rlwinm. r17, r17, 0, 15, 15 + beq- MPCall_38_0x48 + lwz r16, -0x041c(r1) + lwz r16, 0x0000(r16) + +MPCall_38_0x48 + cmpw r16, r3 + beq+ ReturnZeroFromMPCall + b MPCall_38_0x14 + + + + DeclareMPCall 62, MPCall_62 + +MPCall_62 ; OUTSIDE REFERER + mr. r8, r3 + bne- MPCall_62_0x18 + mfsprg r15, 0 + lwz r31, -0x0338(r15) + lwz r3, 0x0000(r31) + b MPCall_62_0x24 + +MPCall_62_0x18 +; r8 = id + bl LookupID + cmpwi r9, CoherenceGroup.kIDClass + + bne+ ReturnMPCallInvalidIDErr + +MPCall_62_0x24 + mr r8, r4 + li r9, 0x07 + bl GetNextIDOfClass + cmpwi r8, 0x00 + beq+ ReturnMPCallInvalidIDErr + mr r4, r8 + +; r8 = id + bl LookupID +; r8 = something not sure what +; r9 = 0:inval, 1:proc, 2:task, 3:timer, 4:q, 5:sema, 6:cr, 7:cpu, 8:addrspc, 9:evtg, 10:cohg, 11:area, 12:not, 13:log + + lwz r16, 0x0008(r8) + lwz r17, 0x0000(r16) + cmpw r17, r3 + bne+ MPCall_62_0x24 + b ReturnZeroFromMPCall + + + + DeclareMPCall 42, KCCreateCpuStruct + +KCCreateCpuStruct ; OUTSIDE REFERER + mr. r8, r3 + bne- KCCreateCpuStruct_0x14 + mfsprg r15, 0 + lwz r30, EWA.CPUBase + CPU.CgrpList + LLL.Freeform(r15) + b KCCreateCpuStruct_0x24 + +KCCreateCpuStruct_0x14 +; r8 = id + bl LookupID + cmpwi r9, CoherenceGroup.kIDClass + + mr r30, r8 + bne+ ReturnMPCallInvalidIDErr + +KCCreateCpuStruct_0x24 + li r8, 960 + +; r1 = kdp +; r8 = size + bl PoolAlloc +; r8 = ptr + + mr. r31, r8 + beq+ major_0x0af60_0x20 + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + li r9, 0x07 + +; r1 = kdp +; r9 = kind + bl MakeID + cmpwi r8, 0x00 + bne+ KCCreateCpuStruct_0x68 + mr r8, r31 + bl PoolFree + b major_0x0af60 +KCCreateCpuStruct_0x68 + + + stw r8, CPU.ID(r31) + + lisori r16, CPU.kSignature + + stw r8, ContextBlock.r6(r6) ; return ID in r6 + + stw r16, CPU.Signature(r31) + + lwz r17, 0x0020(r30) + addi r17, r17, 0x01 + stw r17, 0x0020(r30) + addi r16, r31, 0x08 + stw r30, 0x0000(r16) + stw r30, 0x0008(r16) + lwz r17, 0x000c(r30) + stw r17, 0x000c(r16) + stw r16, 0x0008(r17) + stw r16, 0x000c(r30) + + lisori r8, 11 + lisori r8, 6 + stw r8, CPU.Eff(r31) + + + + + addi r30, r31, CPU.EWABase + + + addi r8, r1, PSA.Base + stw r8, EWA.PA_PSA - EWA.Base(r30) + + stw r1, EWA.PA_KDP - EWA.Base(r30) + + li r8, 0 + stw r8, EWA.PA_CurTask - EWA.Base(r30) + + + ; Matches code in Init.s quite closely + + li r8, -0x01 + sth r4, 0x020a(r30) + stb r8, 0x0209(r30) ; interesting... + + lwz r8, EWA.PA_IRP(r1) + stw r8, EWA.PA_IRP - EWA.Base(r30) + + lisori r8, 'time' + stw r8, EWA.TimeList - EWA.Base + LLL.Signature(r30) + + li r8, 0x04 + stb r8, 0x0014(r30) + + li r8, 0x01 + stb r8, 0x0016(r30) + + li r8, 0x00 + stb r8, 0x0017(r30) + + lisori r8, 0x7fffffff + stw r8, 0x0038(r30) + + oris r8, r8, 0xffff + stw r8, 0x003c(r30) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 43, MPCall_43 + +MPCall_43 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, CPU.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + lwz r16, 0x0018(r31) + lis r17, 0x00 + ori r17, r17, 0x09 + and. r17, r17, r16 + bne+ ReleaseAndReturnMPCallOOM + mfsprg r15, 0 + li r16, 0x04 + stw r16, -0x0238(r15) + lhz r16, 0x022a(r31) + stw r16, -0x0234(r15) + li r8, 0x02 + +; r7 = flags +; r8 = usually 2? + bl SIGP + lwz r17, 0x0008(r31) + addi r16, r31, 0x08 + lwz r18, 0x0020(r17) + addi r18, r18, -0x01 + stw r18, 0x0020(r17) + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + mr r8, r31 + bl PoolFree + mr r8, r3 + bl DeleteID + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 44, KCStartCPU + +; ARG CpuID r3 + +KCStartCPU ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + bl LookupID + cmpwi r9, CPU.kIDClass + bne+ ReleaseAndReturnMPCallInvalidIDErr + + mr r30, r8 + lwz r16, CPU.Eff(r30) + rlwinm. r8, r16, 0, 28, 28 + bne+ ReleaseAndReturnZeroFromMPCall + + mfsprg r15, 0 + li r16, 0x04 + stw r16, -0x0238(r15) + lhz r16, 0x022a(r30) + stw r16, -0x0234(r15) + + +; Put the boots in? + + _log 'SIGP kResetProcessor^n' + li r8, 2 + bl SIGP + cmpwi r8, -0x7264 + cmpwi cr1, r8, 0 + beq+ ReleaseAndReturnMPCallOOM + bne+ cr1, ReleaseAndReturnMPCallOOM + + +; Every CPU gets an idle task + + _log 'Creating idle task^n' + mr r31, r7 + rlwinm r7, r7, 0, 13, 11 + lwz r8, PSA.blueProcessPtr(r1) + +; ARG EmpiricalCpuFeatures r7, Process *r8 + bl CreateTask +; RET Task *r8 + + mr r7, r31 + mr. r31, r8 + beq+ major_0x0af60 + + stw r31, CPU.IdleTaskPtr(r30) + + lisori r8, 'idle' + stw r8, Task.Name(r31) + + lisori r8, 0x00080040 ; clearly flags + stw r8, Task.ThingThatAlignVecHits(r31) + + li r8, 1 + stw r8, Task.Weight(r31) + + li r8, Task.kIdlePriority + stb r8, Task.Priority(r31) + + ; whoa -- cpu structs arent this big? + lhz r8, 0x022a(r30) + sth r8, Task.MysteryHalf(r31) + + lwz r8, Task.ContextBlock + ContextBlock.EmpiricalCpuFeatures(r31) + _bset r8, r8, 9 + stw r8, Task.ContextBlock + ContextBlock.EmpiricalCpuFeatures(r31) + + + lwz r8, KDP.PA_NanoKernelCode(r1) + llabel r26, IdleCode + add r8, r8, r26 + stw r8, Task.ContextBlock + ContextBlock.CodePtr(r31) + + ; better compare this with init code idle task + lwz r8, Task.ContextBlock + ContextBlock.MSR(r31) + andi. r8, r8, 0xbfcf + stw r8, Task.ContextBlock + ContextBlock.MSR(r31) + + sync ; flush pending lwarxen? + + +; This feels like cheating with the Sch lock + + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0 + li r16, 0 + + bne+ cr1, @do_not_panic + mflr r16 + bl panic +@do_not_panic + + stw r16, PSA.SchLock + Lock.Count(r1) + + + ; Some EWA/KDP stuff I do not understand + mfsprg r15, 0 + li r16, 0x08 + stw r16, -0x0238(r15) + lhz r16, 0x022a(r30) + stw r16, -0x0234(r15) + +MPCall_44_0x15c + _log 'SIGP kSynchClock^n' + li r8, 0x02 + +; r7 = flags +; r8 = usually 2? + bl SIGP + cmpwi r8, -0x7264 + cmpwi cr1, r8, 0x00 + beq+ MPCall_44_0x15c + + + bne- cr1, MPCall_Panic + mfsprg r15, 0 + li r16, 0x01 + stw r16, -0x0238(r15) + lhz r16, 0x022a(r30) + stw r16, -0x0234(r15) + lwz r16, 0x064c(r1) + llabel r17, major_0x14bcc + add r16, r16, r17 + stw r16, -0x0230(r15) + stw r30, -0x022c(r15) + +MPCall_44_0x1c0 + _log 'SIGP kStartProcessor^n' + li r8, 0x04 + +; r7 = flags +; r8 = usually 2? + bl SIGP + cmpwi r8, -0x7264 + cmpwi cr1, r8, 0x00 + beq+ MPCall_44_0x1c0 + bne- cr1, MPCall_Panic + _log 'Processor scheduled^n' + b ReturnZeroFromMPCall + + + +; KCStopScheduling + + + DeclareMPCall 45, KCStopScheduling + +KCStopScheduling ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, CPU.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r30, r8 + lwz r16, 0x0018(r30) + rlwinm. r8, r16, 0, 28, 28 + +; r1 = kdp + beq+ ReleaseAndReturnZeroFromMPCall + lwz r31, 0x001c(r30) + clrlwi. r8, r16, 0x1f + bne+ ReleaseAndReturnMPCallOOM + lbz r17, 0x0019(r31) + cmpwi r17, 0x00 + beq- KCStopScheduling_0x94 + lwz r17, 0x0064(r31) + oris r17, r17, 0x80 + stw r17, 0x0064(r31) + mr r8, r31 + bl major_0x13e4c + li r17, 0x00 + stb r17, 0x0019(r31) + mr r8, r31 + bl TaskReadyAsNext + bl CalculateTimeslice + mr r8, r31 + bl major_0x14af8_0xa0 + lwz r8, 0x064c(r1) + llabel r9, StopProcessor + add r8, r8, r9 + stw r8, 0x01fc(r31) + +KCStopScheduling_0x94 + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, KCStopScheduling_0xb0 + mflr r16 + bl panic + +KCStopScheduling_0xb0 + stw r16, PSA.SchLock + Lock.Count(r1) + b MPCall_6_0x78 + + + +; KCCpuPlugin + + + DeclareMPCall 46, KCCpuPlugin + +KCCpuPlugin ; OUTSIDE REFERER + li r8, 0x00 + +; r7 = flags +; r8 = usually 2? + bl SIGP + mr r3, r8 + mr r4, r9 + b CommonMPCallReturnPath + + + + DeclareMPCall 47, MPCall_47 + +MPCall_47 ; OUTSIDE REFERER + rlwinm. r8, r7, 0, 12, 12 + lwz r15, 0x00d8(r6) + beq+ ReturnMPCallOOM + cmpwi r15, 0x00 + mr r16, r2 + beq+ ReturnMPCallOOM + mr r17, r3 + mr r18, r4 + mr r19, r5 + bl Save_v0_v31 + mr r2, r16 + mr r3, r17 + mr r4, r18 + mr r5, r19 + b ReturnZeroFromMPCall + + + +; MPCall_48_Bad + + + DeclareMPCall 48, MPCall_48_Bad + +MPCall_48_Bad ; OUTSIDE REFERER + b MPCallBad + + + +; NKxprintf + + + DeclareMPCall 96, NKxprintf + +NKxprintf ; OUTSIDE REFERER + rlwinm. r9, r11, 0, 27, 27 + mr r8, r3 + beq- NKxprintf_0x1c + li r9, 0x00 + bl V2P + beq- NKxprintf_0x24 + rlwimi r8, r17, 0, 0, 19 + +NKxprintf_0x1c + bl PrintS + b ReturnZeroFromMPCall + +NKxprintf_0x24 + _log 'NKxprintf (V->P translation error)^n' + b ReturnMPCallOOM + + + +; ARG long r3, int r4 size (1:byte, 2:half, else:word) + + DeclareMPCall 97, NKPrintHex + +NKPrintHex + mr r8, r3 + + cmpwi r4, 1 + cmpwi cr1, r4, 2 + + beq- @byte + beq- cr1, @half + + + bl Printw + b CommonMPCallReturnPath + +@half + bl Printh + b CommonMPCallReturnPath + +@byte + bl Printb + b CommonMPCallReturnPath + + + + DeclareMPCall 124, NKPrintDecimal + +NKPrintDecimal ; OUTSIDE REFERER + mr r8, r3 + bl Printd + b CommonMPCallReturnPath + + + +; KCSetBlueProcessID + + + DeclareMPCall 99, KCSetBlueProcessID + +KCSetBlueProcessID ; OUTSIDE REFERER + mfsprg r16, 0 + rlwinm. r8, r7, 0, 10, 10 + lwz r31, EWA.PA_CurTask(r16) + beq+ ReturnMPCallOOM + mr r8, r3 + +; r8 = id + bl LookupID +; r8 = something not sure what +; r9 = 0:inval, 1:proc, 2:task, 3:timer, 4:q, 5:sema, 6:cr, 7:cpu, 8:addrspc, 9:evtg, 10:cohg, 11:area, 12:not, 13:log + + cmpwi r9, Process.kIDClass + bne+ ReturnMPCallInvalidIDErr + stw r3, Task.ProcessID(r31) + stw r4, 0x00ec(r31) + b ReturnZeroFromMPCall + + + +; KCRegisterThermalHandler + + + DeclareMPCall 104, KCRegisterThermalHandler + +KCRegisterThermalHandler ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr. r8, r3 + beq- @is_zero + bl LookupID + cmpwi r9, Notification.kIDClass + bne+ ReleaseAndReturnMPCallInvalidIDErr +@is_zero + + stw r3, PSA.ThermalHandlerID(r1) + + b ReleaseAndReturnZeroFromMPCall + + + +; KCRegisterPMFHandler + + + DeclareMPCall 105, KCRegisterPMFHandler + +KCRegisterPMFHandler ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr. r8, r3 + beq- @is_zero + bl LookupID + cmpwi r9, Notification.kIDClass + bne+ ReleaseAndReturnMPCallInvalidIDErr +@is_zero + + stw r3, PSA.PMFHandlerID(r1) + + b ReleaseAndReturnZeroFromMPCall + + + +; KCMarkPMFTask + + + DeclareMPCall 106, KCMarkPMFTask + +KCMarkPMFTask ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mfsprg r30, 0 + mr. r8, r3 + lwz r31, EWA.PA_CurTask(r30) + + beq- @use_blue_task_instead + bl LookupID + cmpwi r9, Task.kIDClass + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr +@use_blue_task_instead + +; Insert bit 31 of r4 into bit 21 of these flags + lwz r17, Task.ThingThatAlignVecHits(r31) + rlwimi r17, r4, 10, 21, 21 + stw r17, Task.ThingThatAlignVecHits(r31) + + +; Don't know what this does! + mr r8, r31 + bl major_0x14af8_0xa0 + + b ReleaseAndReturnZeroFromMPCall + + + +; ARG int r6: +; 2: SystemInfo +; 3: DiagInfo +; 4: NanoKernelInfo +; 5: ProcessorInfo +; 6: HWInfo +; 7: ProcessorState + +; RET Ptr r4, short r5 ver, short r6 len + + DeclareMPCall 107, NKLocateInfoRecord + +NKLocateInfoRecord + + cmpwi r3, 5 + cmpwi cr1, r3, 2 + beq- @ProcessorInfo + beq- cr1, @SystemInfo + + cmpwi r3, 3 + cmpwi cr1, r3, 4 + beq- @DiagInfo + beq- cr1, @NanoKernelInfo + + cmpwi r3, 7 + cmpwi cr1, r3, 6 + beq- @ProcessorState + bne+ cr1, ReturnParamErrFromMPCall + + lwz r4, KDP.InfoRecord + InfoRecord.NKHWInfoPtr(r1) + lhz r16, KDP.InfoRecord + InfoRecord.NKHWInfoLen(r1) + lhz r5, KDP.InfoRecord + InfoRecord.NKHWInfoVer(r1) + stw r16, ContextBlock.r6(r6) + b ReturnZeroFromMPCall + +@ProcessorState + lwz r4, KDP.InfoRecord + InfoRecord.NKProcessorStatePtr(r1) + lhz r16, KDP.InfoRecord + InfoRecord.NKProcessorStateLen(r1) + lhz r5, KDP.InfoRecord + InfoRecord.NKProcessorStateVer(r1) + stw r16, ContextBlock.r6(r6) + b ReturnZeroFromMPCall + +@ProcessorInfo + lwz r4, KDP.InfoRecord + InfoRecord.NKProcessorInfoPtr(r1) + lhz r16, KDP.InfoRecord + InfoRecord.NKProcessorInfoLen(r1) + lhz r5, KDP.InfoRecord + InfoRecord.NKProcessorInfoVer(r1) + stw r16, ContextBlock.r6(r6) + b ReturnZeroFromMPCall + +@NanoKernelInfo + lwz r4, KDP.InfoRecord + InfoRecord.NKNanoKernelInfoPtr(r1) + lhz r16, KDP.InfoRecord + InfoRecord.NKNanoKernelInfoLen(r1) + lhz r5, KDP.InfoRecord + InfoRecord.NKNanoKernelInfoVer(r1) + stw r16, ContextBlock.r6(r6) + b ReturnZeroFromMPCall + +@DiagInfo + lwz r4, KDP.InfoRecord + InfoRecord.NKDiagInfoPtr(r1) + lhz r16, KDP.InfoRecord + InfoRecord.NKDiagInfoLen(r1) + lhz r5, KDP.InfoRecord + InfoRecord.NKDiagInfoVer(r1) + stw r16, ContextBlock.r6(r6) + b ReturnZeroFromMPCall + +@SystemInfo + lwz r4, KDP.InfoRecord + InfoRecord.NKSystemInfoPtr(r1) + lhz r16, KDP.InfoRecord + InfoRecord.NKSystemInfoLen(r1) + lhz r5, KDP.InfoRecord + InfoRecord.NKSystemInfoVer(r1) + stw r16, ContextBlock.r6(r6) + b ReturnZeroFromMPCall + + + + DeclareMPCall 108, MPCall_108 + +MPCall_108 ; OUTSIDE REFERER + cmplwi r3, 0x02 + bge+ ReturnParamErrFromMPCall + mulli r17, r3, 0x10 + addi r18, r1, 0xf80 + add r18, r17, r18 + lwz r16, 0x0134(r6) + stw r4, 0x0000(r18) + stw r5, 0x0004(r18) + stw r16, 0x0008(r18) + _log 'Clock rates for step ' + mr r8, r3 + bl Printd + _log '- Cpu ' + mr r8, r4 + bl Printd + _log '- Bus ' + mr r8, r5 + bl Printd + _log '- Dec ' + mr r8, r16 + bl Printd + _log 'Hz^n' + b ReturnZeroFromMPCall + + + +; NKSetClockStep + +; Debug string matches MPLibrary! +; 0xf7e(r1) = clock_step (half-word) + +; > r3 = new_clock_step # (half-word) + + DeclareMPCall 131, NKSetClockStep + +NKSetClockStep ; OUTSIDE REFERER + mfsprg r9, 0 + lwz r8, -0x0338(r9) + lwz r9, 0x0024(r8) + cmpwi r9, 0x01 + bgt+ ReturnMPCallOOM + lhz r19, 0x0f7e(r1) + _log 'NKSetClockStep - current ' + mr r8, r19 + bl Printd + _log ' new ' + mr r8, r3 + bl Printd + _log '^n' + cmplwi r3, 0x02 + cmpw cr1, r3, r19 + bge+ ReturnParamErrFromMPCall + beq+ cr1, ReturnMPCallOOM + mulli r17, r3, 0x10 + addi r18, r1, 0xf80 + sth r17, 0x0f7e(r1) + add r18, r17, r18 + lwz r16, 0x0000(r18) + lwz r17, 0x0004(r18) + stw r16, 0x0f24(r1) + stw r17, 0x0f28(r1) + lwz r16, 0x0f88(r1) + stw r16, 0x0f2c(r1) + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + lwz r16, 0x0008(r18) + stw r16, -0x0438(r1) + bgt- cr1, NKSetClockStep_0xec + lwz r31, -0x0434(r1) + lbz r18, 0x0017(r31) + cmpwi r18, 0x00 + +; r1 = kdp + beq+ ReleaseAndReturnZeroFromMPCall + mr r8, r31 + bl major_0x136c8 + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +NKSetClockStep_0xec + lwz r31, -0x0434(r1) + lbz r18, 0x0017(r31) + cmpwi r18, 0x01 + +; r1 = kdp + beq+ ReleaseAndReturnZeroFromMPCall + bl GetTime + stw r8, 0x0038(r31) + stw r9, 0x003c(r31) + mr r8, r31 + bl called_by_init_tmrqs + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; NKSetClockDriftCorrection + +; There's a one-billion constant in here, for fractional +; expression. +; -0x36c(r1) = tb_drift_numerator +; -0x368(r1) = tb_drift_denominator + +; > r3 = to + + DeclareMPCall 132, NKSetClockDriftCorrection + +NKSetClockDriftCorrection ; OUTSIDE REFERER + lwz r31, -0x0364(r1) + mfsprg r9, 0 + cmpwi r31, 0x00 + beq+ ReturnMPCallOOM + lwz r8, -0x0338(r9) + lwz r9, 0x0024(r8) + cmpwi r9, 0x01 + bgt+ ReturnMPCallOOM + lwz r19, 0x0fa0(r1) + cmpwi r3, 0x00 + cmpw cr1, r3, r19 + stw r3, 0x0fa0(r1) + beq- NKSetClockDriftCorrection_0x12c + beq+ cr1, ReturnZeroFromMPCall + lis r16, 0x3b9a + ori r16, r16, 0xca00 + lwz r17, 0x0f88(r1) + srwi r17, r17, 7 + divw r18, r16, r3 + cmpw r18, r17 + bge- NKSetClockDriftCorrection_0x64 + divw r16, r16, r17 + mr r18, r17 + divw r17, r3, r16 + b NKSetClockDriftCorrection_0x6c + +NKSetClockDriftCorrection_0x64 + rlwinm r17, r3, 2, 30, 30 + addi r17, r17, 0x01 + +NKSetClockDriftCorrection_0x6c + stw r17, -0x036c(r1) + stw r18, -0x0368(r1) + _log 'TB drift adjusted to ' + mr r8, r3 + bl Printd + _log ' ppb ( ' + mr r8, r17 + bl Printd + _log '/ ' + mr r8, r18 + bl Printd + _log ')^n' + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + lwz r31, -0x0364(r1) + lbz r18, 0x0017(r31) + cmpwi r18, 0x01 + +; r1 = kdp + beq+ ReleaseAndReturnZeroFromMPCall + bl GetTime + stw r8, 0x0038(r31) + stw r9, 0x003c(r31) + mr r8, r31 + bl called_by_init_tmrqs + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +NKSetClockDriftCorrection_0x12c + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + li r17, 0x00 + stw r17, -0x036c(r1) + stw r17, -0x0368(r1) + lwz r31, -0x0364(r1) + lbz r18, 0x0017(r31) + cmpwi r18, 0x00 + +; r1 = kdp + beq+ ReleaseAndReturnZeroFromMPCall + mr r8, r31 + bl major_0x136c8 + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 115, MPCall_115 + +MPCall_115 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, ConsoleLog.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + lwz r30, 0x000c(r31) + cmpwi r30, 0x00 + bne- MPCall_115_0x94 + + _Lock PSA.DbugLock, scratch1=r16, scratch2=r17 + + lwz r30, -0x0404(r1) + +MPCall_115_0x54 + addi r30, r30, 0x01 + andi. r29, r30, 0xfff + bne- MPCall_115_0x64 + lwz r30, -0x1000(r30) + +MPCall_115_0x64 + lbz r16, 0x0000(r30) + cmpwi r16, 0x00 + beq+ MPCall_115_0x54 + stw r30, 0x000c(r31) + sync + lwz r16, -0x0af0(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, MPCall_115_0x90 + mflr r16 + bl panic + +MPCall_115_0x90 + stw r16, -0x0af0(r1) + +MPCall_115_0x94 + cmpwi r5, 0x00 + ble+ ReleaseAndReturnMPCallOOM + rlwinm. r9, r11, 0, 27, 27 + mr r8, r4 + crmove 30, 2 + beq- MPCall_115_0xd0 + li r9, 0x00 + bl MPCall_95_0x45c + beq+ ReleaseAndReturnMPCallOOM + add r8, r4, r5 + li r9, 0x00 + addi r8, r8, -0x01 + mr r30, r8 + bl MPCall_95_0x45c + beq+ ReleaseAndReturnMPCallOOM + +MPCall_115_0xd0 + lwz r28, -0x0404(r1) + lwz r29, 0x000c(r31) + li r5, 0x00 + not r27, r4 + +MPCall_115_0xe0 + cmpw r28, r29 + cmplw cr1, r4, r30 + beq- MPCall_115_0x144 + bgt- cr1, MPCall_115_0x144 + rlwinm r16, r4, 0, 0, 19 + mr r8, r4 + beq- cr7, MPCall_115_0x11c + cmpw r16, r27 + mr r17, r26 + beq- MPCall_115_0x11c + mr r27, r16 + li r9, 0x00 + bl MPCall_95_0x45c + beq+ ReleaseAndReturnMPCallOOM + mr r26, r17 + +MPCall_115_0x11c + rlwimi r17, r4, 0, 20, 31 + lbz r8, 0x0000(r29) + addi r29, r29, 0x01 + andi. r16, r29, 0xfff + bne+ MPCall_115_0x134 + lwz r29, -0x1000(r29) + +MPCall_115_0x134 + stb r8, 0x0000(r17) + addi r5, r5, 0x01 + addi r4, r4, 0x01 + b MPCall_115_0xe0 + +MPCall_115_0x144 + stw r29, 0x000c(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; KCRegisterExternalHandler + +; Point external interrupts (thing PIHes) towards this notification + + + DeclareMPCall 121, KCRegisterExternalHandler + +KCRegisterExternalHandler + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr. r8, r3 + beq- @zero + bl LookupID + cmpwi r9, Notification.kIDClass + bne+ ReleaseAndReturnMPCallInvalidIDErr +@zero + + stw r3, PSA.ExternalHandlerID(r1) + + b ReleaseAndReturnZeroFromMPCall + + + + 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, -0x0360(r1) + +MPCall_133_0x60 + beq- cr1, MPCall_133_0x70 + bgt- cr1, MPCall_133_0x6c + li r17, 0x00 + +MPCall_133_0x6c + sth r17, -0x035e(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, -0x035c(r1) + +MPCall_133_0x90 + beq- cr1, MPCall_133_0xa0 + bgt- cr1, MPCall_133_0x9c + li r17, 0x00 + +MPCall_133_0x9c + sth r17, -0x035a(r1) + +MPCall_133_0xa0 +; r1 = kdp + bl ScreenConsole_redraw + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; MPCall_Panic + +; Xrefs: +; KCStartCPU + +MPCall_Panic + b panic diff --git a/NanoKernel/NKMacros.s b/NanoKernel/NKMacros.s new file mode 100644 index 0000000..5886507 --- /dev/null +++ b/NanoKernel/NKMacros.s @@ -0,0 +1,192 @@ + MACRO + _log &s + BL @paststring + STRING AsIs + DC.B &s, 0, 0 + ALIGN 2 +@paststring + mflr r8 + BL PrintS + ENDM + + ; Cool macro for one-line debug calls + MACRO + _wlog &s1, ®, &s2, &scratch==r8 + + if &TYPE('ExtraNKLogging') != 'UNDEFINED' + mr &scratch, r8 + + _log &s1 + _log '[ ' + + mr r8, ® + bl PrintW + + _log ']' + _log &s2 + + mr r8, &scratch + endif + + ENDM + + MACRO + _wlogh &s1, ®, &s2, &scratch==r8 + + if &TYPE('ExtraNKLogging') != 'UNDEFINED' + mr &scratch, r8 + + _log &s1 + _log '[ ' + + mr r8, ® + bl PrintH + + _log ']' + _log &s2 + + mr r8, &scratch + endif + + ENDM + + MACRO + _clog &s + + if &TYPE('ExtraNKLogging') != 'UNDEFINED' + _log &s + endif + + ENDM + + + MACRO + LHHI ®, &val + lis (®), ((&val) >> 16) & 0xffff + ENDM + + + MACRO + LLHI ®, &val + ori (®), (®), (&val) & 0xffff + ENDM + + + MACRO + lisori ®, &val + lis ®, ((&val) >> 16) & 0xffff + ori ®, ®, (&val) & 0xffff + ENDM + + MACRO + llabel ®, &val + lisori ®, &val - NKTop + ENDM + + + + MACRO + StartLoadingWord ®, &val + LHHI (®), (&val) +HalfLoadedWord set (&val) +HalfLoadedReg set (®) + ENDM + + + MACRO + FinishLoadingWord + LLHI HalfLoadedReg, HalfLoadedWord + ENDM + + + MACRO + InitList &ptr, &sig, &scratch==r8 + StartLoadingWord &scratch, &sig + stw &ptr, LLL.Next(&ptr) + FinishLoadingWord + stw &ptr, LLL.Prev(&ptr) + stw &scratch, LLL.Signature(&ptr) + ENDM + + + ; Next is 8, Prev is C + + MACRO + InsertAsPrev &el, &next, &scratch==r18 + + stw &next, LLL.Next(&el) + lwz &scratch, LLL.Prev(&next) + stw &scratch, LLL.Prev(&el) + stw &el, LLL.Next(&scratch) + stw &el, LLL.Prev(&next) + + ENDM + + + MACRO + InsertAsNext &el, &prev, &scratch==r18 + + stw &prev, LLL.Prev(&el) + lwz &scratch, LLL.Next(&prev) + stw &scratch, LLL.Next(&el) + stw &el, LLL.Prev(&scratch) + stw &el, LLL.Next(&prev) + + ENDM + + + MACRO + RemoveFromList &el, &scratch1==r17, &scratch2==r18 + + ; Point neighbours of el up and down at each other + lwz &scratch1, 8(&el) + lwz &scratch2, 12(&el) + stw &scratch1, 8(&scratch2) + stw &scratch2, 12(&scratch1) + + ; Zero out the pointers in el + li &scratch1, 0 + stw &scratch1, 8(&el) + stw &scratch1, 12(&el) + + ENDM + + + MACRO + _Lock &lockoffset, &scratch1==r17, &scratch2==r18 + mr &scratch1, r8 + mr &scratch2, r9 + addi r8, r1, &lockoffset + bl AcquireLock + mr r8, &scratch1 + mr r9, &scratch2 + ENDM + + MACRO + _bset &dest, &src, &bit + + IF &bit < 16 + oris&dot &dest, &src, 1 << (15 - (&bit)) + ELSE + ori&dot &dest, &src, 1 << (31 - (&bit)) + ENDIF + + ENDM + + MACRO + _bclr &dest, &src, &bit + + rlwinm&dot &dest, &src, 0, (&bit)+1, (&bit)-1 + + ENDM + + MACRO + _band &dest, &src, &bit + + IF &bit < 16 + andis&dot &dest, &src, 1 << (15 - (&bit)) + ELSE + andi&dot &dest, &src, 1 << (31 - (&bit)) + ENDIF + + ENDM diff --git a/NanoKernel/NKPaging.s b/NanoKernel/NKPaging.s new file mode 100644 index 0000000..7694d9b --- /dev/null +++ b/NanoKernel/NKPaging.s @@ -0,0 +1,753 @@ +Local_Panic set * + b panic + + + +; PagingFunc1 + +; Xrefs: +; setup +; IntDSIOtherOther +; IntISI +; IntDSIOther +; kcVMDispatch +; print_memory_logical + + align 5 + +PagingFunc1 ; OUTSIDE REFERER + mfsprg r29, 0 + mflr r28 + stw r8, -0x00dc(r29) + mfcr r8 + stw r9, -0x00d8(r29) + stw r8, -0x00a4(r29) + stw r14, -0x00d4(r29) + stw r15, -0x00d0(r29) + stw r16, -0x00cc(r29) + stw r17, -0x00c8(r29) + stw r18, -0x00c4(r29) + stw r19, -0x00c0(r29) + stw r20, -0x00bc(r29) + stw r21, -0x00b8(r29) + stw r22, -0x00b4(r29) + stw r28, -0x00e0(r29) + b @_88 + +@_44 + mfsprg r29, 0 + lwz r8, -0x00a4(r29) + lwz r28, -0x00e0(r29) + mtcrf 0x7f, r8 + lwz r8, -0x00dc(r29) + mtlr r28 + lwz r9, -0x00d8(r29) + lwz r14, -0x00d4(r29) + lwz r15, -0x00d0(r29) + lwz r16, -0x00cc(r29) + lwz r17, -0x00c8(r29) + lwz r18, -0x00c4(r29) + lwz r19, -0x00c0(r29) + lwz r20, -0x00bc(r29) + lwz r21, -0x00b8(r29) + lwz r22, -0x00b4(r29) + blr + +@_88 + mfsprg r30, 0 + mr r9, r27 + lwz r8, -0x001c(r30) + bl FindAreaAbove + mr r31, r8 + stw r8, -0x00e4(r30) + stw r27, -0x00e8(r30) + lwz r16, 0x0024(r31) + lwz r17, 0x0020(r31) + cmplw r16, r27 + lwz r18, 0x007c(r31) + bgt- @_1a0 + bgt+ @_44 + and r28, r27, r18 + rlwinm. r26, r17, 0, 16, 16 + lwz r17, 0x0038(r31) + beq- @_fc + lwz r18, 0x0070(r31) + subf r19, r16, r28 + clrlwi r31, r18, 0x1e + cmpwi cr7, r17, -0x01 + cmpwi cr6, r31, 0x00 + beq- cr7, @_1a0 + beq+ cr6, @_44 + cmpwi r17, 0x01 + add r31, r18, r19 + blt+ @_44 + li r26, 0x00 + b @_208 + +@_fc + mr r8, r27 + bl MPCall_95_0x1e4 + lwz r28, 0x0000(r30) + mr r26, r30 + mr r8, r27 + bl MPCall_95_0x254 + beq- @_12c + lhz r16, 0x0000(r30) + rlwinm. r8, r16, 0, 16, 16 + bne- @_12c + srwi r16, r16, 1 + sth r16, 0x0000(r30) + +@_12c + lwz r8, 0x0024(r31) + lwz r9, 0x06b4(r1) + cmpwi r8, 0x00 + cmpwi cr6, r9, 0x00 + li r8, 0x801 + li r9, 0x01 + bne- @_154 + beq- cr6, @_154 + li r8, 0x881 + li r9, 0x81 + +@_154 + lwz r31, 0x0688(r1) + and. r30, r28, r8 + rlwimi r31, r28, 0, 0, 19 + cmplwi cr6, r30, 0x800 + cmplwi r30, 0x01 + bge- cr6, @_2ec + cmplw cr7, r30, r9 + ori r31, r31, 0x100 + rlwimi r31, r28, 28, 28, 28 + rlwimi r31, r28, 3, 24, 24 + rlwimi r31, r28, 31, 26, 26 + rlwimi r31, r28, 1, 25, 25 + xori r31, r31, 0x40 + rlwimi r31, r28, 30, 31, 31 + rlwimi r31, r28, 0, 30, 30 + xori r31, r31, 0x02 + beq- @_208 + blt+ cr7, @_44 + bl Local_Panic + +@_1a0 + lwz r29, 0x05e8(r1) + rlwinm r28, r27, 7, 25, 28 + lwzx r29, r29, r28 + rlwinm r28, r27, 20, 16, 31 + lhz r30, 0x0000(r29) + b @_1bc + +@_1b8 + lhzu r30, 0x0008(r29) + +@_1bc + lhz r31, 0x0002(r29) + subf r30, r30, r28 + cmplw cr7, r30, r31 + bgt+ cr7, @_1b8 + lwz r28, 0x0690(r1) + lwz r31, 0x0004(r29) + cmpwi cr7, r28, 0x00 + bnel- cr7, @_314 + rlwinm. r26, r31, 23, 29, 30 + cmplwi cr7, r26, 0x06 + beq- @_200 + cmplwi cr6, r26, 0x02 + beq- cr7, @_368 + beq- cr6, @_3b8 + b @_44 + dc.l 0x41800168 + dc.l 0x418101bc + +@_200 + slwi r28, r30, 12 + add r31, r31, r28 + +@_208 + mfsrin r30, r27 + rlwinm r28, r27, 26, 10, 25 + rlwinm r30, r30, 6, 7, 25 + xor r28, r28, r30 + lwz r30, KDP.PTEGMask(r1) + lwz r29, KDP.HTABORG(r1) + and r28, r28, r30 + or. r29, r29, r28 + +@_228 + lwz r30, 0x0000(r29) + lwz r28, 0x0008(r29) + cmpwi cr6, r30, 0x00 + lwz r30, 0x0010(r29) + cmpwi cr7, r28, 0x00 + lwzu r28, 0x0018(r29) + bge- cr6, @_298 + cmpwi cr6, r30, 0x00 + lwzu r30, 0x0008(r29) + bge- cr7, @_298 + cmpwi cr7, r28, 0x00 + lwzu r28, 0x0008(r29) + bge- cr6, @_298 + cmpwi cr6, r30, 0x00 + lwzu r30, 0x0008(r29) + bge- cr7, @_298 + cmpwi cr7, r28, 0x00 + lwzu r28, 0x0008(r29) + bge- cr6, @_298 + cmpwi cr6, r30, 0x00 + addi r29, r29, 0x08 + bge- cr7, @_298 + cmpwi cr7, r28, 0x00 + addi r29, r29, 0x08 + bge- cr6, @_298 + rlwinm r28, r31, 0, 26, 26 + addi r29, r29, 0x08 + blt- cr7, @_3e0 + +@_298 + cmpwi r26, 0x00 + mfsrin r28, r27 + rlwinm r30, r27, 10, 26, 31 + stw r27, 0x0694(r1) + oris r30, r30, 0x8000 + ori r31, r31, 0x100 + rlwimi r30, r31, 27, 25, 25 + rlwinm r31, r31, 0, 21, 19 + rlwimi r30, r28, 7, 1, 24 + stw r31, -0x0014(r29) + eieio + stwu r30, -0x0018(r29) + sync + lwz r28, 0x0e94(r1) + stw r29, 0x0698(r1) + addi r28, r28, 0x01 + stw r28, 0x0e94(r1) + beq+ @_44 + cmpwi r26, 0x5a5a + bne- @_2f4 + stw r29, 0x0690(r1) + +@_2ec + cmpw r29, r29 + b @_44 + +@_2f4 + lwz r28, 0x0000(r26) + lwz r30, KDP.HTABORG(r1) + ori r28, r28, 0x800 + subf r30, r30, r29 + cmpw r29, r29 + rlwimi r28, r30, 9, 0, 19 + stw r28, 0x0000(r26) + b @_44 + +@_314 + lwz r28, 0x0e98(r1) + lwz r29, 0x0690(r1) + addi r28, r28, 0x01 + stw r28, 0x0e98(r1) + li r28, 0x00 + stw r28, 0x0000(r29) + lwz r29, 0x068c(r1) + stw r28, 0x068c(r1) + stw r28, 0x0690(r1) + mfspr r28, pvr + rlwinm. r28, r28, 0, 0, 14 + sync + tlbie r29 + beq- @_354 + sync + tlbsync + +@_354 + sync + isync + blr + dc.l 0x57fca803 + dc.l 0x40800068 + +@_368 + slwi r28, r30, 2 + rlwinm r26, r31, 22, 0, 29 + lwzux r28, r26, r28 + lwz r31, 0x0688(r1) + andi. r30, r28, 0x881 + rlwimi r31, r28, 0, 0, 19 + cmplwi cr6, r30, 0x800 + cmplwi cr7, r30, 0x81 + cmplwi r30, 0x01 + bge+ cr6, @_2ec + cmplwi cr7, r30, 0x81 + ori r31, r31, 0x100 + rlwimi r31, r28, 3, 24, 24 + rlwimi r31, r28, 31, 26, 26 + rlwimi r31, r28, 1, 25, 25 + xori r31, r31, 0x40 + rlwimi r31, r28, 30, 31, 31 + beq+ @_208 + blt+ cr7, @_44 + bl Local_Panic + +@_3b8 + ori r28, r27, 0xfff + stw r28, 0x068c(r1) + rlwinm r31, r31, 0, 22, 19 + li r26, 0x5a5a + b @_208 + dc.l 0x4181fc78 + dc.l 0x4bfffc11 + dc.l 0x3ba105c8 + dc.l 0x48000281 + dc.l 0x4bfffc68 + +@_3e0 + cmplw cr6, r28, r26 + addi r29, r29, -0x50 + ble- cr6, @_400 + crnot 2, 2 + lwz r30, KDP.PTEGMask(r1) + xori r31, r31, 0x800 + xor r29, r29, r30 + beq+ @_228 + +@_400 + lwz r26, 0x069c(r1) + crclr cr6_eq + rlwimi r26, r29, 0, 0, 25 + li r9, 0x08 + addi r29, r26, 0x08 + b @_428 + dc.l 0x409a0008 + dc.l 0x7fbaeb78 + +@_420 + cmpw cr6, r29, r26 + addi r29, r29, 0x08 + +@_428 + rlwimi r29, r26, 0, 0, 25 + lwz r31, 0x0004(r29) + lwz r30, 0x0000(r29) + beq- cr6, @_444 + rlwinm r28, r31, 30, 25, 25 + andc. r28, r28, r30 + bne+ @_420 + +@_444 + addi r9, r9, -0x01 + cmpwi cr7, r9, 0x00 + rlwinm r31, r30, 0, 25, 25 + blel+ cr7, Local_Panic + rlwinm r28, r30, 1, 0, 3 + neg r31, r31 + rlwimi r28, r30, 22, 4, 9 + xor r31, r31, r29 + rlwimi r28, r30, 5, 10, 19 + rlwinm r31, r31, 6, 10, 19 + xor r28, r28, r31 + xoris r30, r30, 0x8000 + lwz r31, 0x0e9c(r1) + stw r29, 0x069c(r1) + addi r31, r31, 0x01 + stw r31, 0x0e9c(r1) + lwz r31, 0x0e98(r1) + stw r30, 0x0000(r29) + addi r31, r31, 0x01 + stw r31, 0x0e98(r1) + sync + mfspr r31, pvr + rlwinm. r31, r31, 0, 0, 14 + tlbie r28 + beq- @_4b0 + sync + tlbsync + +@_4b0 + sync + isync + li r8, -0x01 + stw r8, 0x0340(r1) + stw r8, 0x0348(r1) + stw r8, 0x0350(r1) + stw r8, 0x0358(r1) + mfsprg r8, 0 + mr r9, r28 + lwz r8, -0x001c(r8) + bl FindAreaAbove + lwz r16, 0x0024(r8) + mr r31, r8 + cmplw r16, r28 + mr r8, r28 + bgt- @_600 + bgt+ Local_Panic + bl MPCall_95_0x1e4 + mr r26, r30 + beql+ @_88 + +@_500 + lwz r28, 0x0000(r26) + lwz r31, 0x0004(r29) + andi. r30, r28, 0x800 + rlwinm r30, r28, 23, 9, 28 + xor r30, r30, r29 + beq+ Local_Panic + andi. r30, r30, 0xffff + xori r28, r28, 0x800 + bne+ Local_Panic + rlwimi r28, r31, 0, 0, 19 + rlwimi r28, r31, 29, 27, 27 + rlwimi r28, r31, 27, 28, 28 + stw r28, 0x0000(r26) + bl @_88 + _log 'PTEG overflow: EA ' + mr r8, r27 + bl Printw + _log 'Victim EA: ' + mr r8, r28 + bl Printw + _log 'MapInfo: ' + mr r8, r29 + bl Printw + lwz r16, 0x0000(r26) + mr r8, r26 + bl Printw + mr r8, r16 + bl Printw + _log ' PTE: ' + lwz r16, 0x0000(r29) + lwz r17, 0x0004(r29) + mr r8, r29 + bl Printw + mr r8, r16 + bl Printw + mr r8, r17 + bl Printw + _log '^n' + bl @_88 + +@_600 + lwz r26, 0x05e8(r1) + rlwinm r30, r28, 7, 25, 28 + lwzx r26, r26, r30 + +@_60c + lhz r30, 0x0000(r26) + rlwinm r31, r28, 20, 16, 31 + subf r30, r30, r31 + lhz r31, 0x0002(r26) + addi r26, r26, 0x08 + cmplw cr7, r30, r31 + lwz r31, -0x0004(r26) + andi. r31, r31, 0xe01 + cmpwi r31, 0xa01 + bgt+ cr7, @_60c + beq+ @_60c + lwz r26, -0x0004(r26) + slwi r30, r30, 2 + rlwinm r31, r26, 22, 30, 31 + cmpwi cr7, r31, 0x03 + rlwinm r26, r26, 22, 0, 29 + add r26, r26, r30 + bnel+ cr7, @_88 + b @_500 + + + +; PagingFunc2 + +; Xrefs: +; setup + +PagingFunc2 ; OUTSIDE REFERER + sync + isync + lwz r28, 0x0000(r29) + stw r28, 0x05e8(r1) + addi r28, r28, 0x84 + lis r31, 0x00 + +@_18 + lwzu r30, -0x0008(r28) + addis r31, r31, -0x1000 + mr. r31, r31 + mtsrin r30, r31 + bne+ @_18 + isync + +PagingFunc2AndAHalf + lwz r28, 0x0004(r29) + mfspr r31, pvr + rlwinm. r31, r31, 0, 0, 14 + addi r29, r1, 0x00 + stw r28, 0x05ec(r1) + beq- @_168 + li r30, 0x00 + mtspr ibat0u, r30 + mtspr ibat1u, r30 + mtspr ibat2u, r30 + mtspr ibat3u, r30 + mtspr dbat0u, r30 + mtspr dbat1u, r30 + mtspr dbat2u, r30 + mtspr dbat3u, r30 + rlwimi r29, r28, 7, 25, 28 + lwz r31, 0x0284(r29) + lwz r30, 0x0280(r29) + rlwinm r31, r31, 0, 29, 27 + mtspr ibat0l, r31 + mtspr ibat0u, r30 + stw r31, 0x0304(r1) + stw r30, 0x0300(r1) + rlwimi r29, r28, 11, 25, 28 + lwz r31, 0x0284(r29) + lwz r30, 0x0280(r29) + rlwinm r31, r31, 0, 29, 27 + mtspr ibat1l, r31 + mtspr ibat1u, r30 + stw r31, 0x030c(r1) + stw r30, 0x0308(r1) + rlwimi r29, r28, 15, 25, 28 + lwz r31, 0x0284(r29) + lwz r30, 0x0280(r29) + rlwinm r31, r31, 0, 29, 27 + mtspr ibat2l, r31 + mtspr ibat2u, r30 + stw r31, 0x0314(r1) + stw r30, 0x0310(r1) + rlwimi r29, r28, 19, 25, 28 + lwz r31, 0x0284(r29) + lwz r30, 0x0280(r29) + rlwinm r31, r31, 0, 29, 27 + mtspr ibat3l, r31 + mtspr ibat3u, r30 + stw r31, 0x031c(r1) + stw r30, 0x0318(r1) + rlwimi r29, r28, 23, 25, 28 + lwz r31, 0x0284(r29) + lwz r30, 0x0280(r29) + mtspr dbat0l, r31 + mtspr dbat0u, r30 + stw r31, 0x0324(r1) + stw r30, 0x0320(r1) + rlwimi r29, r28, 27, 25, 28 + lwz r31, 0x0284(r29) + lwz r30, 0x0280(r29) + mtspr dbat1l, r31 + mtspr dbat1u, r30 + stw r31, 0x032c(r1) + stw r30, 0x0328(r1) + rlwimi r29, r28, 31, 25, 28 + lwz r31, 0x0284(r29) + lwz r30, 0x0280(r29) + mtspr dbat2l, r31 + mtspr dbat2u, r30 + stw r31, 0x0334(r1) + stw r30, 0x0330(r1) + rlwimi r29, r28, 3, 25, 28 + lwz r31, 0x0284(r29) + lwz r30, 0x0280(r29) + mtspr dbat3l, r31 + mtspr dbat3u, r30 + stw r31, 0x033c(r1) + stw r30, 0x0338(r1) + isync + cmpw r29, r29 + blr + +@_168 + rlwimi r29, r28, 7, 25, 28 + lwz r30, 0x0280(r29) + lwz r31, 0x0284(r29) + stw r30, 0x0300(r1) + stw r31, 0x0304(r1) + stw r30, 0x0320(r1) + stw r31, 0x0324(r1) + rlwimi r30, r31, 0, 25, 31 + mtspr ibat0u, r30 + lwz r30, 0x0280(r29) + rlwimi r31, r30, 30, 26, 31 + rlwimi r31, r30, 6, 25, 25 + mtspr ibat0l, r31 + rlwimi r29, r28, 11, 25, 28 + lwz r30, 0x0280(r29) + lwz r31, 0x0284(r29) + stw r30, 0x0308(r1) + stw r31, 0x030c(r1) + stw r30, 0x0328(r1) + stw r31, 0x032c(r1) + rlwimi r30, r31, 0, 25, 31 + mtspr ibat1u, r30 + lwz r30, 0x0280(r29) + rlwimi r31, r30, 30, 26, 31 + rlwimi r31, r30, 6, 25, 25 + mtspr ibat1l, r31 + rlwimi r29, r28, 15, 25, 28 + lwz r30, 0x0280(r29) + lwz r31, 0x0284(r29) + stw r30, 0x0310(r1) + stw r31, 0x0314(r1) + stw r30, 0x0330(r1) + stw r31, 0x0334(r1) + rlwimi r30, r31, 0, 25, 31 + mtspr ibat2u, r30 + lwz r30, 0x0280(r29) + rlwimi r31, r30, 30, 26, 31 + rlwimi r31, r30, 6, 25, 25 + mtspr ibat2l, r31 + rlwimi r29, r28, 19, 25, 28 + lwz r30, 0x0280(r29) + lwz r31, 0x0284(r29) + stw r30, 0x0318(r1) + stw r31, 0x031c(r1) + stw r30, 0x0338(r1) + stw r31, 0x033c(r1) + rlwimi r30, r31, 0, 25, 31 + mtspr ibat3u, r30 + lwz r30, 0x0280(r29) + rlwimi r31, r30, 30, 26, 31 + rlwimi r31, r30, 6, 25, 25 + mtspr ibat3l, r31 + cmpw r29, r29 + blr + + + +; PagingFunc3 + +; Xrefs: +; IntDSIOtherOther +; kcRunAlternateContext +; kcRTASDispatch +; KCRegisterCpuPlugin +; MPCall_103 + +PagingFunc3 ; OUTSIDE REFERER + lwz r30, 0x0000(r29) + li r28, -0x01 + rlwimi r28, r30, 15, 0, 14 + xor r31, r27, r30 + andc. r31, r31, r28 + beq- @_54 + lwzu r30, 0x0008(r29) + rlwimi r28, r30, 15, 0, 14 + xor r31, r27, r30 + andc. r31, r31, r28 + beq- @_54 + lwzu r30, 0x0008(r29) + rlwimi r28, r30, 15, 0, 14 + xor r31, r27, r30 + andc. r31, r31, r28 + beq- @_54 + lwzu r30, 0x0008(r29) + rlwimi r28, r30, 15, 0, 14 + xor r31, r27, r30 + andc. r31, r31, r28 + bne- PagingFunc4 + +@_54 + andi. r31, r30, 0x01 + rlwinm r28, r28, 0, 8, 19 + lwzu r31, 0x0004(r29) + and r28, r27, r28 + or r31, r31, r28 + bnelr- + + + +; PagingFunc4 + +; Xrefs: +; setup +; PagingFunc3 +; print_memory_logical +; major_0x18c08 + +PagingFunc4 ; OUTSIDE REFERER + mfsrin r31, r27 + rlwinm r30, r27, 10, 26, 31 + rlwimi r30, r31, 7, 1, 24 + rlwinm r28, r27, 26, 10, 25 + oris r30, r30, 0x8000 + rlwinm r31, r31, 6, 7, 25 + xor r28, r28, r31 + lwz r31, KDP.PTEGMask(r1) + lwz r29, KDP.HTABORG(r1) + and r28, r28, r31 + or. r29, r29, r28 + +@_2c + lwz r31, 0x0000(r29) + lwz r28, 0x0008(r29) + cmpw cr6, r30, r31 + lwz r31, 0x0010(r29) + cmpw cr7, r30, r28 + lwzu r28, 0x0018(r29) + bne- cr6, @_50 + +@_48 + lwzu r31, -0x0014(r29) + blr + +@_50 + cmpw cr6, r30, r31 + lwzu r31, 0x0008(r29) + beq+ cr7, @_48 + cmpw cr7, r30, r28 + lwzu r28, 0x0008(r29) + beq+ cr6, @_48 + cmpw cr6, r30, r31 + lwzu r31, 0x0008(r29) + beq+ cr7, @_48 + cmpw cr7, r30, r28 + lwzu r28, 0x0008(r29) + beq+ cr6, @_48 + cmpw cr6, r30, r31 + lwzu r31, -0x000c(r29) + beqlr- cr7 + cmpw cr7, r30, r28 + lwzu r31, 0x0008(r29) + beqlr- cr6 + lwzu r31, 0x0008(r29) + beqlr- cr7 + lwz r31, KDP.PTEGMask(r1) + xori r30, r30, 0x40 + andi. r28, r30, 0x40 + addi r29, r29, -0x3c + xor r29, r29, r31 + bne+ @_2c + blr + + + +; PagingFlushTLB + +; Xrefs: +; setup +; major_0x14bcc +; MPCall_103 + +pb equ 12 + +PagingFlushTLB ; OUTSIDE REFERER + lhz r29, KDP.ProcessorInfo + NKProcessorInfo.TransCacheTotalSize(r1) + slwi r29, r29, pb + +@loop + subi r29, r29, 1 << pb + cmpwi r29, 0 + tlbie r29 + bgt+ @loop + + mfspr r29, pvr + rlwinm. r29, r29, 0, 0, 14 + + ; All cpus + sync + beqlr- + + ; Non-601 stuff + tlbsync + sync + isync + blr diff --git a/NanoKernel/NKPoolAllocator.s b/NanoKernel/NKPoolAllocator.s new file mode 100644 index 0000000..d55f0ac --- /dev/null +++ b/NanoKernel/NKPoolAllocator.s @@ -0,0 +1,530 @@ +Local_Panic set * + b panic + + + +; InitPool + +; Allocate one page for the kernel pool. Same layout at +; Memtop starts at 7 pages below KDP. +; Take note of the structure from kdp-ab0 to kdp-aa0 + +; Xrefs: +; setup + +; > r1 = kdp + +InitPool ; OUTSIDE REFERER + + ; r9 = LA_KD - 7 pages + lwz r8, KDP.PA_ConfigInfo(r1) + lwz r8, NKConfigurationInfo.LA_KernelData(r8) + lisori r9, 0x7000 + subf r9, r9, r8 + stw r9, -0x0a9c(r1) + + lisori r9, -0x7000 + add r9, r9, r1 + stw r9, -0x0aa0(r1) + +; bit of a mystery + lisori r8, 0x00006458 + add r23, r8, r9 + stw r8, 0x0000(r9) + + lisori r8, '‡BGN' + stw r8, 0x0004(r9) + + addi r9, r9, 0x08 + lisori r8, 0x00006450 + stw r8, 0x0000(r9) + + lisori r8, 'free' + stw r8, 0x0004(r9) + + li r8, 0x00 + stw r8, 0x0000(r23) + + lisori r8, '‡END' + stw r8, 0x0004(r23) + +; set up linked list + addi r8, r1, PSA.FreePool + + stw r9, LLL.Next(r8) + stw r9, LLL.Prev(r8) + stw r8, LLL.Next(r9) + stw r8, LLL.Prev(r9) + + lisori r9, 'POOL' + stw r9, LLL.Signature(r8) + + + blr + + + +; PoolAlloc + +; Easy to use! 0xfd8 (a page minus 10 words) is the +; largest request that can be satisfied. + +; Xrefs: +; setup +; major_0x02ccc +; KCCreateProcess +; KCCreateCpuStruct +; MPCall_15 +; MPCall_39 +; MPCall_17 +; MPCall_20 +; MPCall_25 +; MPCall_49 +; MPCall_40 +; MPCall_31 +; MPCall_64 +; major_0x0db04 +; CreateTask +; MPCall_58 +; convert_pmdts_to_areas +; NKCreateAddressSpaceSub +; MPCall_72 +; createarea +; MPCall_73 +; MPCall_130 +; InitTMRQs +; InitIDIndex +; MakeID + +; > r1 = kdp +; > r8 = size + +; < r8 = ptr + +PoolAlloc ; OUTSIDE REFERER + crclr cr7_eq + b PoolAllocCommon + +PoolAlloc_with_crset ; OUTSIDE REFERER + crset cr7_eq + +PoolAllocCommon + + ; Save LR and arg to EWA. Get lock. + mflr r17 + mfsprg r18, 0 + + _Lock PSA.PoolLock, scratch1=r15, scratch2=r16 + + ; These saves are my first real hint at the contents of that + ; large unexplored area of the EWA. This file, then, owns + ; part of the EWA, for its CPU-scoped globals. Because the + ; kernel runs stackless. + stw r17, EWA.PoolSavedLR(r18) + stw r8, EWA.PoolSavedSizeArg(r18) + +@try_again + ; Check that requested allocation is in the doable size range. + cmpwi r8, 0 + cmpwi cr1, r8, 0xfd8 + ble+ Local_Panic ; zero-byte request => thud + bgt- cr1, @request_too_large + + addi r8, r8, 39 + rlwinm r8, r8, 0, 0, 26 + + ; Check that the pool has any pages in it. + addi r14, r1, PSA.FreePool + lwz r15, LLL.Next(r14) +@try_different_page + cmpw r14, r15 + + bne+ @pool_has_page + + ; No? Then claim a page from the system free list for the pool? + + ; Got a free page in the system free list? It's ours. + li r8, 0 ; return zero if there is no page at all + li r9, 1 ; number of pages to grab + + lwz r16, PSA.FreePageCount(r1) + lwz r17, PSA.UnheldFreePageCount(r1) + subf. r16, r9, r16 + subf r17, r9, r17 + blt- PoolCommonReturn + + stw r16, PSA.FreePageCount(r1) + stw r17, PSA.UnheldFreePageCount(r1) + + ; Get that page, mofo. Macros FTW. + lwz r8, PSA.FreeList + LLL.Next(r1) + RemoveFromList r8, scratch1=r17, scratch2=r18 + + ; There was probably once a mechanism for virtual addressing of the pool! + li r9, 0 + bl ExtendPool ; r8=page, r9=virt=0 + + ; Now that the pool is not empty, start over. + mfsprg r18, 0 + lwz r8, EWA.PoolSavedSizeArg(r18) + b @try_again + +@request_too_large + li r8, 0 + b PoolCommonReturn + +@pool_has_page + ; We have a page (r15) that might have room in it. + ; r8 contains the size describing our actual demand on the page! + + lwz r16, PoolPage.FreeBytes(r15) + cmplw r16, r8 + + lis r20, 'fr' + bgt- @fits_with_leftover_space + beq- @fits_perfectly + ori r20, r20, 'ee' + + lwz r16, PoolPage.FreeBytes(r15) + add r18, r16, r15 ; r18 = ??? + lwz r19, 0x0004(r18) + cmplw cr1, r18, r15 + cmpw r19, r20 + ble+ cr1, Local_Panic + bne- @_118 + lwz r17, 0x0000(r18) + rotlwi r19, r19, 0x08 + add r17, r17, r16 + stw r17, 0x0000(r15) + stw r19, 0x0004(r18) + lwz r17, 0x000c(r18) + lwz r16, LLL.Next(r18) + stw r16, LLL.Next(r17) + stw r17, 0x000c(r16) + b @pool_has_page + +@_118 + lwz r15, LLL.Next(r15) + b @try_different_page + +@fits_with_leftover_space + subf r16, r8, r16 + cmpwi r16, 0x28 + blt- @fits_perfectly + stw r16, 0x0000(r15) + add r15, r15, r16 + stw r8, 0x0000(r15) + b @_14c + +@fits_perfectly + lwz r14, 0x000c(r15) + lwz r16, LLL.Next(r15) + stw r16, LLL.Next(r14) + stw r14, 0x000c(r16) + +@_14c + lisori r8, '‡loc' + stw r8, 0x0004(r15) + addi r8, r15, 0x08 + + beq- cr7, PoolCommonReturn + lwz r16, 0x0000(r15) + addi r16, r16, -0x08 + li r14, 0x00 + add r16, r16, r15 + addi r15, r15, 0x04 + +@_174 + stwu r14, 0x0004(r15) + cmpw r15, r16 + ble+ @_174 + b PoolCommonReturn + + + +; PoolFree + +; ARG void *r8 + +PoolFree ; OUTSIDE REFERER + mflr r17 + mfsprg r18, 0 + + _Lock PSA.PoolLock, scratch1=r15, scratch2=r16 + + stw r17, EWA.PoolSavedLR(r18) + bl major_0x129fc + bl major_0x12a34 + + + +; File-internal + +; Return path of most of these functions? +; Releases Pool lock and Returns to the link +; address saved in EWA. + +PoolCommonReturn ; OUTSIDE REFERER + mfsprg r18, 0 + sync + + lwz r15, PSA.PoolLock + Lock.Count(r1) + cmpwi cr1, r15, 0 + li r15, 0 + bne+ cr1, @no_panic + mflr r15 + bl panic +@no_panic + + stw r15, PSA.PoolLock + Lock.Count(r1) + + lwz r17, EWA.PoolSavedLR(r18) + mtlr r17 + blr + + + +; major_0x129fc + +; Xrefs: +; PoolFree +; ExtendPool + +; ARG Area *r8 + +major_0x129fc ; OUTSIDE REFERER + subi r15, r8, 8 + + lis r20, 'fr' + lhz r16, 4(r15) + ori r20, r20, 'ee' + cmplwi r16, 0x876c + bne+ Local_Panic + stw r20, 4(r15) + + addi r16, r1, PSA.FreePool + + InsertAsPrev r15, r16, scratch=r17 + + blr + + + +; major_0x12a34 + +; Xrefs: +; PoolFree +; ExtendPool + +major_0x12a34 ; OUTSIDE REFERER + lis r20, 0x6672 + lwz r16, 0x0000(r15) + ori r20, r20, 0x6565 + add r18, r16, r15 + lwz r19, 0x0004(r18) + cmplw cr1, r18, r15 + cmpw r19, r20 + ble+ cr1, Local_Panic + bnelr- + lwz r17, 0x0000(r18) + rotlwi r19, r19, 0x08 + add r17, r17, r16 + stw r17, 0x0000(r15) + stw r19, 0x0004(r18) + lwz r17, 0x000c(r18) + lwz r16, LLL.Next(r18) + stw r16, LLL.Next(r17) + stw r17, 0x000c(r16) + b major_0x12a34 + + + +; ExtendPool + +; 0xed0(r1) = pool extends (I increment) +; -0xa9c(r1) = virt last page (I update) +; -0xaa0(r1) = phys last page (I update) +; Assumes that cache blocks are 32 bytes! Uh-oh. +; Page gets decorated like this: +; 000: 00 00 0f e8 +; 004: 87 'B 'G 'N +; 008: 00 00 0f e8 +; 00c: 87 'l 'o 'c +; ... zeros << r8 passes ptr to here +; fe8: phys offset from here to prev page +; fec: 87 'E 'N 'D +; ff0: logical abs address of prev page +; ff4: 00 00 00 00 +; ff8: 00 00 00 00 +; ffc: 00 00 00 00 + +; Xrefs: +; MPCall_0 +; PoolAlloc + +; > r1 = kdp +; > r8 = anywhere in new page (phys) +; > r9 = page_virt + +ExtendPool ; OUTSIDE REFERER + mflr r14 + rlwinm r17, r8, 0, 0, 19 + + lwz r16, KDP.NanoKernelInfo + NKNanoKernelInfo.FreePoolExtendCount(r1) + addi r16, r16, 1 + stw r16, KDP.NanoKernelInfo + NKNanoKernelInfo.FreePoolExtendCount(r1) + + _log 'Extend free pool: phys 0x' + mr r8, r17 + bl Printw + _log ' virt 0x' + mr r8, r9 + bl Printw + _log ' count: ' + mr r8, r16 + bl Printd + _log '^n' + li r16, 0x1000 + +@zeroloop + subi r16, r16, 32 + cmpwi r16, 0 + dcbz r16, r17 + bgt+ @zeroloop + +; Put the funny stuff in + li r16, 0xfe8 + stw r16, 0x0000(r17) + lisori r16, '‡BGN' + stw r16, 0x0004(r17) + addi r15, r17, 0x08 + li r16, 0xfe0 + stw r16, 0x0000(r15) + lisori r16, '‡loc' + stw r16, 0x0004(r15) + addi r15, r17, 0xfe8 + lwz r18, -0x0aa0(r1) + subf r18, r15, r18 + stw r18, 0x0000(r15) + lisori r16, '‡END' + stw r16, 0x0004(r15) + lwz r16, -0x0a9c(r1) + stw r16, LLL.Next(r15) + +; Update globals + stw r9, -0x0a9c(r1) + stw r17, -0x0aa0(r1) + +; Unknown func calls + addi r8, r17, 0x10 + bl major_0x129fc + bl major_0x12a34 + mtlr r14 + blr + + + +; major_0x12b94 + +; Xrefs: +; "HeapSegCorrupt" + + mflr r19 + lwz r20, -0x0aa0(r1) + +major_0x12b94_0x8 + addi r8, r20, 0x08 + bl major_0x12b94_0x30 + lwz r17, 0x0000(r20) + add r17, r17, r20 + lwz r18, 0x0000(r17) + cmpwi r18, 0x00 + add r20, r18, r17 + bne+ major_0x12b94_0x8 + mtlr r19 + blr + +major_0x12b94_0x30 + mflr r14 + addi r16, r8, -0x08 + +major_0x12b94_0x38 + lwz r17, 0x0004(r16) + lis r18, -0x78bb + ori r18, r18, 0x4e44 + cmpw r17, r18 + li r9, 0x00 + beq- major_0x12b94_0x1a4 + lis r18, -0x7894 + ori r18, r18, 0x6f63 + cmpw r17, r18 + beq- major_0x12b94_0x94 + lis r18, 0x6672 + ori r18, r18, 0x6565 + li r9, 0x04 + cmpw r17, r18 + bne- major_0x12b94_0xa8 + lwz r17, 0x000c(r16) + cmpwi r17, 0x00 + li r9, 0x05 + beq- major_0x12b94_0xa8 + lwz r17, LLL.Next(r16) + cmpwi r17, 0x00 + li r9, 0x06 + beq- major_0x12b94_0xa8 + +major_0x12b94_0x94 + lwz r17, 0x0000(r16) + add r16, r16, r17 + cmpwi r17, 0x00 + li r9, 0x07 + bgt+ major_0x12b94_0x38 + +major_0x12b94_0xa8 + mr r18, r8 + _log 'Heap segment corrupt ' + mr r8, r9 + bl Printd + _log 'at ' + mr r8, r16 + bl Printw + _log '^n' + addi r16, r16, -0x40 + li r17, 0x08 + +major_0x12b94_0x10c + mr r8, r16 + bl Printw + _log ' ' + lwz r8, 0x0000(r16) + bl Printw + lwz r8, 0x0004(r16) + bl Printw + lwz r8, LLL.Next(r16) + bl Printw + lwz r8, 0x000c(r16) + bl Printw + _log ' *' + li r8, 0x10 + addi r16, r16, -0x01 + mtctr r8 + +major_0x12b94_0x164 + lbzu r8, 0x0001(r16) + cmpwi r8, 0x20 + bgt- major_0x12b94_0x174 + li r8, 0x20 + +major_0x12b94_0x174 + bl Printc + bdnz+ major_0x12b94_0x164 + _log '*^n' + addi r17, r17, -0x01 + addi r16, r16, 0x01 + cmpwi r17, 0x00 + bne+ major_0x12b94_0x10c + mr r8, r18 + +major_0x12b94_0x1a4 + mtlr r14 + blr diff --git a/NanoKernel/NKPowerCalls.s b/NanoKernel/NKPowerCalls.s new file mode 100644 index 0000000..c9c461a --- /dev/null +++ b/NanoKernel/NKPowerCalls.s @@ -0,0 +1,579 @@ +; FillIndigo + +; Xrefs: +; setup + + align kIntAlign + +FillIndigo ; EXPORTED + mflr r9 + llabel r23, panic + add r23, r23, r25 + addi r8, r1, PSA.IndigoVecBase + li r22, 192 ;VecTable.Size + bl wordfill + mtlr r9 + llabel r23, IntIndigo + add r23, r23, r25 + stw r23, VecTable.SystemResetVector(r8) + stw r23, VecTable.ExternalIntVector(r8) + stw r23, VecTable.DecrementerVector(r8) + blr + + + +; kcPowerDispatch + +; NB: I was probably wrong about this. +; Contains a (very rare) mtsprg0 instruction. + +; Xrefs: +; "sup" + + align kIntAlign + +kcPowerDispatch ; EXPORTED ; OUTSIDE REFERER + mtcr r7 + lwz r4, 0x0670(r1) + cmplwi cr7, r3, 0x0b + mr r9, r13 + blt- cr2, kcPowerDispatch_0x18 + lwz r9, -0x0440(r1) + +kcPowerDispatch_0x18 + and. r8, r4, r9 + bgt- cr7, major_0x09e28_0x34 + bne- major_0x09e28_0x2c + cmplwi cr7, r3, 0x0b + beq- cr7, major_0x0a600_0x1c + cmplwi cr7, r3, 0x08 + beq- cr7, major_0x09e28_0x3c + cmplwi cr7, r3, 0x09 + beq- cr7, major_0x0a600_0x10 + stw r26, 0x01d4(r6) + stw r27, 0x01dc(r6) + stw r28, 0x01e4(r6) + stw r29, 0x01ec(r6) + stw r30, 0x01f4(r6) + stw r31, 0x01fc(r6) + mfsprg r31, 3 + addi r8, r1, -0x810 + mtsprg 3, r8 + rlwinm r26, r3, 0, 29, 29 + clrlwi r3, r3, 0x1e + lbz r8, 0x06b8(r1) + slwi r3, r3, 1 + addi r3, r3, 0x1a + rlwnm r3, r8, r3, 0x1e, 0x1f + cmpwi r3, 0x00 + beq- major_0x09e28_0x24 + lbz r9, 0x06b9(r1) + cmpwi r9, 0x00 + beq- kcPowerDispatch_0xb0 + mfspr r27, hid0 + mr r8, r27 + cmpwi r9, 0x01 + beq- kcPowerDispatch_0xa8 + oris r9, r3, 0x100 + srw r9, r9, r9 + rlwimi r8, r9, 0, 8, 10 + +kcPowerDispatch_0xa8 + oris r8, r8, 0x01 + mtspr hid0, r8 + +kcPowerDispatch_0xb0 + cmplwi r26, 0x04 + beql- kcCacheDispatch_0x258 + mfmsr r8 + ori r8, r8, 0x8002 + cmplwi r3, 0x00 + beq- kcPowerDispatch_0xcc + oris r8, r8, 0x04 + +kcPowerDispatch_0xcc + sync + mtmsr r8 + isync + +kcPowerDispatch_0xd8 + b kcPowerDispatch_0xd8 + + + +; IntIndigo + +; Odd that this is unaligned + +IntIndigo + lbz r8, 0x06b9(r1) + cmpwi r8, 0x00 + beq- IntIndigo_0x10 + mtspr hid0, r27 + +IntIndigo_0x10 + mfsprg r1, 2 + mtlr r1 + mfsprg r1, 1 + lis r9, 0x7fff + mfspr r8, dec + mtspr dec, r9 + mtspr dec, r8 + + + +; major_0x09e28 + +; Xrefs: +; kcPowerDispatch +; IntIndigo + + li r3, 0x00 + +major_0x09e28_0x4 + mtsprg 3, r31 + lwz r26, 0x01d4(r6) + lwz r27, 0x01dc(r6) + lwz r28, 0x01e4(r6) + lwz r29, 0x01ec(r6) + lwz r30, 0x01f4(r6) + lwz r31, 0x01fc(r6) + b skeleton_key + +major_0x09e28_0x24 ; OUTSIDE REFERER + li r3, -0x7267 + b major_0x09e28_0x4 + +major_0x09e28_0x2c ; OUTSIDE REFERER + li r3, 0x00 + b skeleton_key + +major_0x09e28_0x34 ; OUTSIDE REFERER + li r3, -0x01 + b skeleton_key + +major_0x09e28_0x3c ; OUTSIDE REFERER + mfsprg r9, 0 + lwz r8, -0x0338(r9) + lwz r9, 0x0024(r8) + cmpwi r9, 0x01 + li r3, -0x7267 + bgt+ skeleton_key + stw r26, 0x01d4(r6) + stw r27, 0x01dc(r6) + stw r28, 0x01e4(r6) + stw r29, 0x01ec(r6) + stw r30, 0x01f4(r6) + stw r31, 0x01fc(r6) + bl kcCacheDispatch_0x258 + mfspr r9, hid0 + rlwinm r9, r9, 0, 18, 16 + rlwinm r9, r9, 0, 17, 15 + mtspr hid0, r9 + sync + isync + lwz r26, 0x0f68(r1) + andi. r26, r26, 0x01 + beq- major_0x09e28_0xb0 + mfspr r9, l2cr + clrlwi r9, r9, 0x01 + mtspr l2cr, r9 + sync + isync + addi r8, r1, -0x4d0 + stw r9, 0x0050(r8) + +major_0x09e28_0xb0 + stw r7, 0x0000(r6) + stw r2, 0x0114(r6) + stw r3, 0x011c(r6) + stw r4, 0x0124(r6) + stw r5, 0x012c(r6) + stw r14, 0x0174(r6) + stw r15, 0x017c(r6) + stw r16, 0x0184(r6) + stw r17, 0x018c(r6) + stw r18, 0x0194(r6) + stw r19, 0x019c(r6) + stw r20, 0x01a4(r6) + stw r21, 0x01ac(r6) + stw r22, 0x01b4(r6) + stw r23, 0x01bc(r6) + stw r24, 0x01c4(r6) + stw r25, 0x01cc(r6) + stw r13, 0x00dc(r6) + andi. r8, r11, 0x2000 + beq- major_0x09e28_0x198 + mfmsr r8 + ori r8, r8, 0x2000 + mtmsr r8 + isync + stfd f0, 0x0200(r6) + stfd f1, 0x0208(r6) + stfd f2, 0x0210(r6) + stfd f3, 0x0218(r6) + stfd f4, 0x0220(r6) + stfd f5, 0x0228(r6) + stfd f6, 0x0230(r6) + stfd f7, 0x0238(r6) + stfd f8, 0x0240(r6) + stfd f9, 0x0248(r6) + stfd f10, 0x0250(r6) + stfd f11, 0x0258(r6) + stfd f12, 0x0260(r6) + stfd f13, 0x0268(r6) + stfd f14, 0x0270(r6) + stfd f15, 0x0278(r6) + stfd f16, 0x0280(r6) + mffs f0 + stfd f17, 0x0288(r6) + stfd f18, 0x0290(r6) + stfd f19, 0x0298(r6) + stfd f20, 0x02a0(r6) + stfd f21, 0x02a8(r6) + stfd f22, 0x02b0(r6) + stfd f23, 0x02b8(r6) + stfd f24, 0x02c0(r6) + stfd f25, 0x02c8(r6) + stfd f26, 0x02d0(r6) + stfd f27, 0x02d8(r6) + stfd f28, 0x02e0(r6) + stfd f29, 0x02e8(r6) + stfd f30, 0x02f0(r6) + stfd f31, 0x02f8(r6) + stfd f0, 0x00e0(r6) + +major_0x09e28_0x198 + mfxer r9 + addi r16, r1, -0x4d0 + stw r9, 0x00d4(r6) + mfctr r9 + stw r9, 0x00f0(r6) + stw r12, 0x00e8(r6) + stw r10, 0x0054(r16) + stw r11, 0x0058(r16) + mfspr r9, hid0 + stw r9, 0x0064(r16) + +major_0x09e28_0x1c0 + mftbu r9 + stw r9, 0x005c(r16) + mftb r9 + stw r9, 0x0060(r16) + mftbu r8 + lwz r9, 0x005c(r16) + cmpw r8, r9 + bne+ major_0x09e28_0x1c0 + mfmsr r9 + stw r9, 0x006c(r16) + mfspr r9, sdr1 + stw r9, 0x0070(r16) + mfspr r9, dbat0u + stw r9, 0x0000(r16) + mfspr r9, dbat0l + stw r9, 0x0004(r16) + mfspr r9, dbat1u + stw r9, 0x0008(r16) + mfspr r9, dbat1l + stw r9, 0x000c(r16) + mfspr r9, dbat2u + stw r9, 0x0010(r16) + mfspr r9, dbat2l + stw r9, 0x0014(r16) + mfspr r9, dbat3u + stw r9, 0x0018(r16) + mfspr r9, dbat3l + stw r9, 0x001c(r16) + mfspr r9, ibat0u + stw r9, 0x0020(r16) + mfspr r9, ibat0l + stw r9, 0x0024(r16) + mfspr r9, ibat1u + stw r9, 0x0028(r16) + mfspr r9, ibat1l + stw r9, 0x002c(r16) + mfspr r9, ibat2u + stw r9, 0x0030(r16) + mfspr r9, ibat2l + stw r9, 0x0034(r16) + mfspr r9, ibat3u + stw r9, 0x0038(r16) + mfspr r9, ibat3l + stw r9, 0x003c(r16) + mfsprg r9, 0 + stw r9, 0x0040(r16) + mfsprg r9, 1 + stw r9, 0x0044(r16) + mfsprg r9, 2 + stw r9, 0x0048(r16) + mfsprg r9, 3 + stw r9, 0x004c(r16) + stw r6, 0x007c(r16) + bl major_0x09e28_0x59c + lwz r1, 0x0004(r1) + addi r16, r1, -0x4d0 + lis r8, 0x100 + ori r8, r8, 0x00 + lis r9, 0x00 + +major_0x09e28_0x2ac + addis r9, r9, -0x1000 + addis r8, r8, -0x10 + mr. r9, r9 + mtsrin r8, r9 + bne+ major_0x09e28_0x2ac + isync + mfspr r9, hid0 + li r8, 0x800 + ori r8, r8, 0x200 + or r9, r9, r8 + mtspr hid0, r9 + isync + andc r9, r9, r8 + mtspr hid0, r9 + isync + ori r9, r9, 0x8000 + ori r9, r9, 0x4000 + mtspr hid0, r9 + isync + lwz r26, 0x0f68(r1) + andi. r26, r26, 0x01 + beq- major_0x09e28_0x38c + lwz r8, 0x0f54(r1) + mr. r8, r8 + beq- major_0x09e28_0x38c + mfspr r9, hid0 + rlwinm r9, r9, 0, 12, 10 + mtspr hid0, r9 + isync + lwz r9, 0x0050(r16) + mtspr l2cr, r9 + sync + isync + lis r8, 0x20 + or r8, r9, r8 + mtspr l2cr, r8 + sync + isync + +major_0x09e28_0x344 + mfspr r8, l2cr + rlwinm. r8, r8, 31, 0, 0 + bne+ major_0x09e28_0x344 + mfspr r8, l2cr + lis r9, -0x21 + ori r9, r9, 0xffff + and r8, r8, r9 + mtspr l2cr, r8 + sync + mfspr r8, hid0 + oris r8, r8, 0x10 + mtspr hid0, r8 + isync + mfspr r8, l2cr + oris r8, r8, 0x8000 + mtspr l2cr, r8 + sync + isync + +major_0x09e28_0x38c + lwz r6, 0x007c(r16) + lwz r7, 0x0000(r6) + lwz r13, 0x00dc(r6) + lwz r9, 0x00f0(r6) + mtctr r9 + lwz r12, 0x00e8(r6) + lwz r9, 0x00d4(r6) + mtxer r9 + lwz r10, 0x0054(r16) + lwz r11, 0x0058(r16) + lwz r2, 0x0114(r6) + lwz r3, 0x011c(r6) + lwz r4, 0x0124(r6) + lwz r5, 0x012c(r6) + lwz r14, 0x0174(r6) + lwz r15, 0x017c(r6) + lwz r17, 0x018c(r6) + lwz r18, 0x0194(r6) + lwz r19, 0x019c(r6) + lwz r20, 0x01a4(r6) + lwz r21, 0x01ac(r6) + lwz r22, 0x01b4(r6) + lwz r23, 0x01bc(r6) + lwz r24, 0x01c4(r6) + lwz r25, 0x01cc(r6) + lwz r26, 0x01d4(r6) + lwz r27, 0x01dc(r6) + lwz r28, 0x01e4(r6) + lwz r29, 0x01ec(r6) + lwz r30, 0x01f4(r6) + lwz r31, 0x01fc(r6) + andi. r8, r11, 0x2000 + beq- major_0x09e28_0x4a8 + mfmsr r8 + ori r8, r8, 0x2000 + mtmsr r8 + isync + lfd f31, 0x00e0(r6) + lfd f0, 0x0200(r6) + lfd f1, 0x0208(r6) + lfd f2, 0x0210(r6) + lfd f3, 0x0218(r6) + lfd f4, 0x0220(r6) + lfd f5, 0x0228(r6) + lfd f6, 0x0230(r6) + lfd f7, 0x0238(r6) + lfd f8, 0x0240(r6) + mtfsf 0xff, f31 + lfd f9, 0x0248(r6) + lfd f10, 0x0250(r6) + lfd f11, 0x0258(r6) + lfd f12, 0x0260(r6) + lfd f13, 0x0268(r6) + lfd f14, 0x0270(r6) + lfd f15, 0x0278(r6) + lfd f16, 0x0280(r6) + lfd f17, 0x0288(r6) + lfd f18, 0x0290(r6) + lfd f19, 0x0298(r6) + lfd f20, 0x02a0(r6) + lfd f21, 0x02a8(r6) + lfd f22, 0x02b0(r6) + lfd f23, 0x02b8(r6) + lfd f24, 0x02c0(r6) + lfd f25, 0x02c8(r6) + lfd f26, 0x02d0(r6) + lfd f27, 0x02d8(r6) + lfd f28, 0x02e0(r6) + lfd f29, 0x02e8(r6) + lfd f30, 0x02f0(r6) + lfd f31, 0x02f8(r6) + +major_0x09e28_0x4a8 + lwz r9, 0x0064(r16) + ori r9, r9, 0x8000 + ori r9, r9, 0x4000 + mtspr hid0, r9 + sync + isync + lwz r9, 0x005c(r16) + mtspr tbu, r9 + lwz r9, 0x0060(r16) + mtspr tbl, r9 + li r9, 0x01 + mtspr dec, r9 + lwz r9, 0x006c(r16) + mtmsr r9 + sync + isync + lwz r9, 0x0070(r16) + mtspr sdr1, r9 + lwz r9, 0x0040(r16) + mtsprg 0, r9 + lwz r9, 0x0044(r16) + mtsprg 1, r9 + lwz r9, 0x0048(r16) + mtsprg 2, r9 + lwz r9, 0x004c(r16) + mtsprg 3, r9 + lwz r9, 0x0000(r16) + mtspr dbat0u, r9 + lwz r9, 0x0004(r16) + mtspr dbat0l, r9 + lwz r9, 0x0008(r16) + mtspr dbat1u, r9 + lwz r9, 0x000c(r16) + mtspr dbat1l, r9 + lwz r9, 0x0010(r16) + mtspr dbat2u, r9 + lwz r9, 0x0014(r16) + mtspr dbat2l, r9 + lwz r9, 0x0018(r16) + mtspr dbat3u, r9 + lwz r9, 0x001c(r16) + mtspr dbat3l, r9 + lwz r9, 0x0020(r16) + mtspr ibat0u, r9 + lwz r9, 0x0024(r16) + mtspr ibat0l, r9 + lwz r9, 0x0028(r16) + mtspr ibat1u, r9 + lwz r9, 0x002c(r16) + mtspr ibat1l, r9 + lwz r9, 0x0030(r16) + mtspr ibat2u, r9 + lwz r9, 0x0034(r16) + mtspr ibat2l, r9 + lwz r9, 0x0038(r16) + mtspr ibat3u, r9 + lwz r9, 0x003c(r16) + mtspr ibat3l, r9 + lwz r16, 0x0184(r6) + li r3, 0x00 + b skeleton_key + +major_0x09e28_0x59c + mflr r9 + stw r9, 0x0074(r16) + stw r1, 0x0078(r16) + addi r9, r16, 0x74 + li r0, 0x00 + stw r9, 0x0000(0) + lis r9, 0x4c61 + ori r9, r9, 0x7273 + stw r9, 0x0004(0) + mfspr r9, hid0 + andis. r9, r9, 0x20 + mtspr hid0, r9 + mfmsr r8 + oris r8, r8, 0x04 + mfspr r9, hid0 + ori r9, r9, 0x8000 + mtspr hid0, r9 + bl * + 4 + mflr r9 + addi r9, r9, major_0x0a600 - (* - 4) + lisori r1, 0xcafebabe + b major_0x0a500 + + + align 8 + + +; major_0x0a500 + +; Xrefs: +; major_0x09e28 + +major_0x0a500 ; OUTSIDE REFERER + sync + mtmsr r8 + isync + cmpwi r1, 0x00 + beq+ major_0x0a500 + lwz r0, 0x0000(r9) + andi. r1, r1, 0x00 + b major_0x0a500 + + + align 8 + + +; major_0x0a600 + +; Xrefs: +; kcPowerDispatch + +major_0x0a600 ; OUTSIDE REFERER + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + +major_0x0a600_0x10 ; OUTSIDE REFERER + mtspr 1019, r5 + li r3, 0x00 + b skeleton_key + +major_0x0a600_0x1c ; OUTSIDE REFERER + b major_0x0a600_0x1c diff --git a/NanoKernel/NKPrimaryIntHandlers.s b/NanoKernel/NKPrimaryIntHandlers.s new file mode 100644 index 0000000..6ab6f0c --- /dev/null +++ b/NanoKernel/NKPrimaryIntHandlers.s @@ -0,0 +1,1268 @@ +; LookupInterruptHandler + +; Called at init time to get the (64b-aligned) physical address +; off the primary interrupt handler ("PIH") for this platform. +; The interrupt handler kind is specified in a one-byte field in +; ConfigInfo, and is an index into the below macro-populated +; table. + +; ARG NKConfigurationInfo *r3 +; RET PIHPtr r7 +; CLOB r12 + + + +MaxPIHCount equ 12 + + + + MACRO + DeclarePIH &n, &code + +@h + org PIHTableStart + &n * 2 + dc.w &code - PIHTableStart + org @h + + ENDM + + + +LookupInterruptHandler ; OUTSIDE REFERER + mflr r12 + bl PIHTableEnd + +PIHTableStart + dcb.w MaxPIHCount, 0 +PIHTableEnd + + mflr r7 + mtlr r12 + lbz r12, NKConfigurationInfo.InterruptHandlerKind(r3) + slwi r12, r12, 1 + lhzx r12, r7, r12 + add r7, r7, r12 + blr + + + +; CommonPIHPath + +; At least I think so. + +; Xrefs: +; KCPropogateExternalInterrupt +; PDM_PIH +; PBX_PIH +; GazellePIH +; TNT_PIH +; GossamerPIH +; NewWorldPowerBookPIH +; CordycepsPIH +; NewWorldPIH +; UnknownPIH + +; > r1 = kdp + +; Alignment probably to fit a cache block (very oft-run code). + align 5 + +CommonPIHPath ; OUTSIDE REFERER + mtsprg 3, r30 + lwz r23, KDP.PA_EmulatorIplValue(r1) + lwz r27, -0x0428(r1) + +CommonPIHPath_0xc ; OUTSIDE REFERER + cmpwi cr7, r28, 0 + li r31, 0x00 + blt- cr7, @negative + + beq- cr7, @zero_rupt + ori r28, r28, 0x8000 + lwz r31, KDP.PostIntMaskInit(r1) +@zero_rupt + + andis. r8, r11, 0x8000 >> 14 ; some kind of perfmon bit + cmpwi cr1, r27, 0x00 + lwz r29, KDP.ClearIntMaskInit(r1) + + bne- @noperf + bne- cr1, CommonPIHPath_0x78 +@noperf + + rlwinm. r8, r7, 0, 10, 10 + beq- CommonPIHPath_0x14c + sth r28, 0x0000(r23) + or r13, r13, r31 + bgt- cr7, @negative + and r13, r13, r29 + +@negative + sync + lwz r8, PSA.PIHLock(r1) + cmpwi cr1, r8, 0 + li r8, 0 + + bne+ cr1, @pih_unlocked + mflr r8 + bl panic +@pih_unlocked + + stw r8, PSA.PIHLock(r1) ; redundant + bl Restore_r20_r31 + b skeleton_key + +CommonPIHPath_0x78 + sync + lwz r8, -0x0b70(r1) + cmpwi cr1, r8, 0x00 + li r8, 0x00 + bne+ cr1, CommonPIHPath_0x94 + mflr r8 + bl panic + +CommonPIHPath_0x94 + stw r8, -0x0b70(r1) + bl Save_r14_r19 + + _Lock PSA.SchLock, scratch1=r8, scratch2=r9 + + mr r8, r27 + +; r8 = id + bl LookupID + cmpwi r9, Notification.kIDClass + + mr r30, r8 + bne- CommonPIHPath_0x100 + clrlwi r9, r28, 0x11 + stw r9, 0x0010(r30) + stw r22, 0x0014(r30) + bl major_0x0db04 + sync + lwz r8, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r8, 0x00 + li r8, 0x00 + bne+ cr1, CommonPIHPath_0xf4 + mflr r8 + bl panic + +CommonPIHPath_0xf4 + stw r8, PSA.SchLock + Lock.Count(r1) + +; r6 = ewa + bl Restore_r14_r31 + b skeleton_key + +CommonPIHPath_0x100 + li r27, 0x00 + lwz r23, 0x067c(r1) + stw r27, -0x0428(r1) + sync + lwz r8, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r8, 0x00 + li r8, 0x00 + bne+ cr1, CommonPIHPath_0x128 + mflr r8 + bl panic + +CommonPIHPath_0x128 + stw r8, PSA.SchLock + Lock.Count(r1) + bl Restore_r14_r19 + + _Lock PSA.PIHLock, scratch1=r8, scratch2=r9 + + b CommonPIHPath_0xc + +CommonPIHPath_0x14c + sync + lwz r8, -0x0b70(r1) + cmpwi cr1, r8, 0x00 + li r8, 0x00 + bne+ cr1, CommonPIHPath_0x168 + mflr r8 + bl panic + +CommonPIHPath_0x168 + + ; This is where we have some real fun... + stw r8, -0x0b70(r1) + bl Save_r14_r19 + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + lwz r30, -0x0440(r1) + or r31, r31, r30 + stw r31, -0x0440(r1) + sth r28, -0x043c(r1) + lwz r31, -0x08f0(r1) + mfsprg r30, 0 + lwz r28, 0x0064(r31) + lbz r29, 0x0018(r31) + ori r28, r28, 0x10 + stw r28, 0x0064(r31) + cmpwi r29, 0x00 + lhz r16, 0x001a(r31) + beq- CommonPIHPath_0x1dc + lhz r17, -0x0116(r30) + cmpw cr1, r16, r17 + rlwinm. r8, r28, 0, 26, 26 + beq- cr1, CommonPIHPath_0x1d0 + bne- CommonPIHPath_0x230 + +CommonPIHPath_0x1d0 + mr r8, r31 + bl major_0x13e4c + b CommonPIHPath_0x218 + +CommonPIHPath_0x1dc + addi r16, r31, 0x08 + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + lbz r17, 0x0037(r31) + cmpwi r17, 0x01 + bne- CommonPIHPath_0x210 + addi r8, r31, 0x20 + bl major_0x136c8 + +CommonPIHPath_0x210 + lwz r16, 0x0e80(r1) + stw r16, -0x08e4(r1) + +CommonPIHPath_0x218 + li r16, 0x00 + stb r16, 0x0019(r31) + mr r8, r31 + bl TaskReadyAsNext + mr r8, r31 + bl CalculateTimeslice + +CommonPIHPath_0x230 + mr r8, r31 + bl major_0x14af8 + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, CommonPIHPath_0x254 + mflr r16 + bl panic + +CommonPIHPath_0x254 + stw r16, PSA.SchLock + Lock.Count(r1) + +; r6 = ewa + bl Restore_r14_r31 + b skeleton_key + + + +; KCPropogateExternalInterrupt + + + DeclareMPCall 122, KCPropogateExternalInterrupt + +KCPropogateExternalInterrupt ; OUTSIDE REFERER + rlwinm. r8, r7, 0, 10, 10 + cmplwi cr1, r3, 7 + bne- @notthegumdropbuttons + bgt- cr1, @too_high + + _Lock PSA.PIHLock, scratch1=r8, scratch2=r9 + + ; Get current interrupt level + lwz r23, KDP.PA_EmulatorIplValue(r1) + lbz r28, 1(r23) + + ; r28 = max(current level, desired level) + cmpw r3, r28 + ble- @desired_is_lower + mr r28, r3 +@desired_is_lower + + li r27, 0x00 + li r3, 0x00 + bl Restore_r14_r19 + b CommonPIHPath_0xc + +@notthegumdropbuttons + b ReturnMPCallOOM + +@too_high + b ReturnParamErrFromMPCall + + + +Save_r14_r19 ; OUTSIDE REFERER + stw r14, ContextBlock.r14(r6) + stw r15, ContextBlock.r15(r6) + stw r16, ContextBlock.r16(r6) + stw r17, ContextBlock.r17(r6) + stw r18, ContextBlock.r18(r6) + stw r19, ContextBlock.r19(r6) + blr + + + +Restore_r14_r19 ; OUTSIDE REFERER + lwz r14, ContextBlock.r14(r6) + lwz r15, ContextBlock.r15(r6) + lwz r16, ContextBlock.r16(r6) + lwz r17, ContextBlock.r17(r6) + lwz r18, ContextBlock.r18(r6) + lwz r19, ContextBlock.r19(r6) + blr + + + +; PDM68kInterruptTable + +; The (byte-sized) entries in the table are 68k rupt numbers. + +; Strictly unnecessary considering indexing method, +; but might speed it up? + align 6 + +PDM68kInterruptTable ; OUTSIDE REFERER + dc.l 0x00010202 + dc.l 0x04040404 + dc.l 0x03030303 + dc.l 0x04040404 + dc.l 0x04040404 + dc.l 0x04040404 + dc.l 0x04040404 + dc.l 0x04040404 + dc.l 0x07070707 + dc.l 0x07070707 + dc.l 0x07070707 + dc.l 0x07070707 + dc.l 0x07070707 + dc.l 0x07070707 + dc.l 0x07070707 + dc.l 0x07070707 + + + +; PDM (Piltdown Man) Primary Interrupt Handler + +; = first ("G1") Power Macs. NuBus. Models +; 61xx, 71xx, 81xx. + + DeclarePIH 1, PDM_PIH + + align 6 + +PDM_PIH + + _Lock PSA.PIHLock, scratch1=r8, scratch2=r9 + + bl Save_r20_r31 + + addi r9, r1, PSA.BlueVecBase + andis. r8, r11, 0x8000 >> 14 ; SRR1 mystery bit + + mfsprg r30, 3 + + bne- @nocount + lwz r21, KDP.NanoKernelInfo + NKNanoKernelInfo.ExternalIntCount(r1) + addi r21, r21, 0x01 + stw r21, KDP.NanoKernelInfo + NKNanoKernelInfo.ExternalIntCount(r1) +@nocount + + ; Switch to Blue vector table + mtsprg 3, r9 + + ; Do the bare minimum to access the device at 0x50f30000 + + ; Hardcoded address is hardcoded + lis r22, 0x50f3;0000 + + ; *Prepare* to enable data paging + mfmsr r23 + _bset r20, r23, MSR_DRbit + ;ori r20, r23, 0x80000000 >> MSR_DRbit + + ; Find a SPAC to set sr5 from + lwz r25, PSA.OtherSystemAddrSpcPtr(r1) + rlwinm r24, r22, 6, 26, 29 + addi r25, r25, AddressSpace.SRs + + ; Save sr5 in r21, load new value from SPAC, isync + mfsrin r21, r22 + lwzx r24, r25, r24 + mtsrin r24, r22 + isync + + ; Turn on data paging, isync + mtmsr r20 + isync + + ; Ask (the PIC?) something + li r20, 0xc0 + stb r20, -0x6000(r22) + eieio + lbz r20, -0x6000(r22) + + ; Turn data paging back off, isync + mtmsr r23 + isync + + ; Lookup a 68k int number using this 6-bit thing from the PIC + lwz r23, KDP.PA_NanoKernelCode(r1) + rlwimi r23, r20, 0, 26, 31 + llabel r28, PDM68kInterruptTable + lbzx r28, r28, r23 + + ; Restore sr5, isync + mtsrin r21, r22 + isync + + b CommonPIHPath + + + +; PBX Primary Interrupt Handler + +; = pre-PCI PowerPC 'Books. Possibly not including the 5300? + + DeclarePIH 3, PBX_PIH + + align 6 + +PBX_PIH + + _Lock PSA.PIHLock, scratch1=r8, scratch2=r9 + +; r6 = ewa + bl Save_r20_r31 +; r8 = sprg0 (not used by me) + + addi r9, r1, -0x750 + andis. r8, r11, 0x02 + mfsprg r30, 3 + bne- PBX_PIH_0x38 + lwz r21, 0x0e80(r1) + addi r21, r21, 0x01 + stw r21, 0x0e80(r1) + +PBX_PIH_0x38 + mtsprg 3, r9 + lis r22, 0x50f3 + mfmsr r23 + lwz r25, -0x03fc(r1) + rlwinm r24, r22, 6, 26, 29 + addi r25, r25, 0x30 + mfsrin r21, r22 + lwzx r24, r25, r24 + mtsrin r24, r22 + isync + ori r20, r23, 0x10 + mtmsr r20 + isync + lwz r20, -0x6000(r22) + ori r20, r20, 0x80 + stw r20, -0x6000(r22) + eieio + lwz r20, -0x6000(r22) + rlwimi r20, r20, 3, 26, 28 + stw r20, -0x6000(r22) + eieio + mr r28, r20 + mtmsr r23 + isync + mtsrin r21, r22 + isync + clrlwi r28, r28, 0x1d + +; r1 = kdp + b CommonPIHPath + + + +; Gazelle Primary Interrupt Handler + +; = later low-end "G2" Power Macs. 603 series +; processors. PCI. Models 54xx-55xx, 64xx-65xx. +; The 54xx/64xx ROM actually identifies as Alchemy, not +; Gazelle, and SheepShaver considers this difference when +; patching the ROM Nanokernels. But, Wikipedia describes +; these machines as minor upgrades, EveryMac calls them +; Gazelle, and they use the same PIH type. + + DeclarePIH 5, GazellePIH + + align 6 + +GazellePIH + + _Lock PSA.PIHLock, scratch1=r8, scratch2=r9 + +; r6 = ewa + bl Save_r20_r31 +; r8 = sprg0 (not used by me) + + addi r9, r1, -0x750 + andis. r8, r11, 0x02 + mfsprg r30, 3 + bne- GazellePIH_0x38 + lwz r21, 0x0e80(r1) + addi r21, r21, 0x01 + stw r21, 0x0e80(r1) + +GazellePIH_0x38 + mtsprg 3, r9 + lis r22, -0xd00 + mfmsr r20 + ori r23, r20, 0x10 + lwz r25, -0x03fc(r1) + rlwinm r24, r22, 6, 26, 29 + addi r25, r25, 0x30 + mfsrin r21, r22 + lwzx r24, r25, r24 + mtsrin r24, r22 + isync + mtmsr r23 + isync + li r26, 0x20 + lwbrx r27, r26, r22 + rlwinm r27, r27, 1, 1, 1 + eieio + lis r23, -0x8000 + li r26, 0x28 + stwbrx r23, r26, r22 + eieio + li r26, 0x24 + lwbrx r23, r26, r22 + eieio + rlwinm r28, r23, 1, 1, 1 + and r28, r27, r28 + or r23, r28, r23 + stwbrx r23, r26, r22 + eieio + li r26, 0x2c + lwbrx r26, r26, r22 + eieio + rlwimi r26, r23, 0, 1, 1 + and r23, r26, r23 + mtmsr r20 + isync + andis. r28, r23, 0x10 + li r28, 0x07 + bne- GazellePIH_0x104 + rlwinm r28, r23, 0, 15, 16 + rlwimi. r28, r23, 0, 22, 31 + li r28, 0x04 + bne- GazellePIH_0x104 + andis. r28, r23, 0x5fca + rlwimi. r28, r23, 0, 17, 20 + li r28, 0x02 + bne- GazellePIH_0x104 + andis. r28, r23, 0x04 + li r28, 0x01 + bne- GazellePIH_0x104 + li r28, 0x00 + +GazellePIH_0x104 + mtsrin r21, r22 + isync + +; r1 = kdp + b CommonPIHPath + + + +; TNT (The New Tesseract) Primary Interrupt Handler + +; = High-end and mid-range "G2" Power Macs. PCI. 603 +; and 604 series processors. Models 7200-7600, 8500-8600, +; 9500-9600. + + DeclarePIH 2, TNT_PIH + + align 6 + +TNT_PIH + + _Lock PSA.PIHLock, scratch1=r8, scratch2=r9 + +; r6 = ewa + bl Save_r20_r31 +; r8 = sprg0 (not used by me) + + addi r9, r1, -0x750 + andis. r8, r11, 0x02 + mfsprg r30, 3 + bne- TNT_PIH_0x38 + lwz r21, 0x0e80(r1) + addi r21, r21, 0x01 + stw r21, 0x0e80(r1) + +TNT_PIH_0x38 + mtsprg 3, r9 + lis r22, -0xd00 + mfmsr r20 + ori r23, r20, 0x10 + lwz r25, -0x03fc(r1) + rlwinm r24, r22, 6, 26, 29 + addi r25, r25, 0x30 + mfsrin r21, r22 + lwzx r24, r25, r24 + mtsrin r24, r22 + isync + mtmsr r23 + isync + lis r23, -0x8000 + li r26, 0x28 + stwbrx r23, r26, r22 + eieio + li r26, 0x24 + lwbrx r23, r26, r22 + li r26, 0x2c + lwbrx r26, r26, r22 + and r23, r26, r23 + eieio + mtmsr r20 + isync + rlwinm. r28, r23, 0, 11, 11 + li r28, 0x07 + bne- TNT_PIH_0xd8 + rlwinm r28, r23, 0, 15, 16 + rlwimi. r28, r23, 0, 21, 31 + li r28, 0x04 + bne- TNT_PIH_0xd8 + rlwinm. r28, r23, 0, 17, 17 + li r28, 0x03 + bne- TNT_PIH_0xd8 + andis. r28, r23, 0x7fea + rlwimi. r28, r23, 0, 18, 19 + li r28, 0x02 + bne- TNT_PIH_0xd8 + rlwinm. r28, r23, 14, 31, 31 + +TNT_PIH_0xd8 + mtsrin r21, r22 + isync + +; r1 = kdp + b CommonPIHPath + + + +; Gossamer (and GRX) Primary Interrupt Handler + +; = beige (pre-iMac) G3s. PIH 07 also used for GRX = OldWorld +; PowerBook G3 Series. + + DeclarePIH 7, GossamerPIH + + align 6 + +GossamerPIH + + _Lock PSA.PIHLock, scratch1=r8, scratch2=r9 + +; r6 = ewa + bl Save_r20_r31 +; r8 = sprg0 (not used by me) + + addi r9, r1, -0x750 + andis. r8, r11, 0x02 + mfsprg r30, 3 + bne- GossamerPIH_0x38 + lwz r21, 0x0e80(r1) + addi r21, r21, 0x01 + stw r21, 0x0e80(r1) + +GossamerPIH_0x38 + mtsprg 3, r9 + mfmsr r20 + ori r23, r20, 0x10 + lis r22, -0xd00 + lwz r25, -0x03fc(r1) + rlwinm r24, r22, 6, 26, 29 + addi r25, r25, 0x30 + mfsrin r21, r22 + lwzx r24, r25, r24 + mtsrin r24, r22 + isync + mtmsr r23 + isync + lis r23, -0x8000 + li r25, 0x28 + stwbrx r23, r25, r22 + eieio + li r25, 0x24 + lwbrx r23, r25, r22 + li r25, 0x2c + lwbrx r25, r25, r22 + and r23, r25, r23 + eieio + lis r24, -0x8000 + li r25, 0x18 + stwbrx r24, r25, r22 + eieio + li r25, 0x14 + lwbrx r24, r25, r22 + li r25, 0x1c + lwbrx r25, r25, r22 + and r24, r25, r24 + eieio + mtmsr r20 + isync + rlwinm. r28, r23, 0, 11, 11 + li r28, 0x07 + bne- GossamerPIH_0x118 + rlwinm r28, r23, 0, 15, 16 + rlwimi. r28, r23, 0, 22, 31 + li r28, 0x04 + bne- GossamerPIH_0x118 + clrlwi. r28, r24, 0x1e + li r28, 0x04 + bne- GossamerPIH_0x118 + rlwinm. r28, r24, 0, 21, 21 + li r28, 0x03 + bne- GossamerPIH_0x118 + andis. r28, r23, 0x3fea + rlwimi. r28, r23, 0, 17, 20 + li r28, 0x02 + bne- GossamerPIH_0x118 + rlwinm. r28, r24, 0, 20, 20 + li r28, 0x01 + bne- GossamerPIH_0x118 + rlwinm. r28, r23, 14, 31, 31 + +GossamerPIH_0x118 + mtsrin r21, r22 + isync + +; r1 = kdp + b CommonPIHPath + + + +; NewWorld PowerBook Primary Interrupt Handler + +; Only ever seen this on Mikey's (NewWorld) Lombard. So +; apparently the Trampoline can also change the ROM's +; default PIH. + + DeclarePIH 10, NewWorldPowerBookPIH ; logged as 'kind 0a' + + align 6 + +NewWorldPowerBookPIH + + _Lock PSA.PIHLock, scratch1=r8, scratch2=r9 + +; r6 = ewa + bl Save_r20_r31 +; r8 = sprg0 (not used by me) + + addi r9, r1, -0x750 + andis. r8, r11, 0x02 + mfsprg r30, 3 + bne- NewWorldPowerBookPIH_0x38 + lwz r21, 0x0e80(r1) + addi r21, r21, 0x01 + stw r21, 0x0e80(r1) + +NewWorldPowerBookPIH_0x38 + mtsprg 3, r9 + lwz r26, -0x0020(r1) + mfmsr r20 + ori r23, r20, 0x10 + lwz r22, 0x0ec0(r26) + lwz r25, -0x03fc(r1) + rlwinm r24, r22, 6, 26, 29 + addi r25, r25, 0x30 + mfsrin r21, r22 + lwzx r24, r25, r24 + mtsrin r24, r22 + isync + mtmsr r23 + isync + li r23, 0x80 + stw r23, 0x0018(r22) + eieio + lwz r23, 0x0014(r22) + lwz r25, 0x001c(r22) + and r23, r25, r23 + lwz r24, 0x0004(r22) + lwz r25, 0x000c(r22) + and r24, r25, r24 + mtmsr r20 + isync + stw r23, 0x0f28(r26) + stw r24, 0x0f2c(r26) + lis r25, 0x00 + ori r25, r25, 0x3f60 + li r28, 0x07 + +NewWorldPowerBookPIH_0xb0 + lwz r26, 0x001c(r25) + and. r26, r24, r26 + bne- NewWorldPowerBookPIH_0xd4 + lwzu r26, -0x0004(r25) + and. r26, r23, r26 + bne- NewWorldPowerBookPIH_0xd4 + addi r28, r28, -0x01 + cmplwi r28, 0x00 + bne+ NewWorldPowerBookPIH_0xb0 + +NewWorldPowerBookPIH_0xd4 + mtsrin r21, r22 + isync + +; r1 = kdp + b CommonPIHPath + + + +; Cordyceps Primary Interrupt Handler + +; = early low-end "G2" Power Macs. 603 series +; processors. PCI. Models 52xx-53xx, 62xx-63xx. + + DeclarePIH 4, CordycepsPIH + + align 6 + +CordycepsPIH + + _Lock PSA.PIHLock, scratch1=r8, scratch2=r9 + +; r6 = ewa + bl Save_r20_r31 +; r8 = sprg0 (not used by me) + + addi r9, r1, -0x750 + andis. r8, r11, 0x02 + mfsprg r30, 3 + bne- CordycepsPIH_0x38 + lwz r21, 0x0e80(r1) + addi r21, r21, 0x01 + stw r21, 0x0e80(r1) + +CordycepsPIH_0x38 + mtsprg 3, r9 + lis r22, 0x5300 + mfmsr r23 + mfspr r26, dbat0u + mfspr r27, dbat0l + ori r20, r22, 0x03 + mtspr dbat0u, r20 + ori r20, r22, 0x2a + mtspr dbat0l, r20 + isync + ori r20, r23, 0x10 + mtmsr r20 + isync + lwz r20, 0x001c(r22) + sync + lis r20, 0x00 + stw r20, 0x001c(r22) + eieio + lwz r20, 0x001c(r22) + lwz r20, 0x001c(r22) + sync + lwz r28, 0x0024(r22) + sync + xori r28, r28, 0x07 + mtmsr r23 + isync + mtspr dbat0l, r27 + mtspr dbat0u, r26 + clrlwi r28, r28, 0x1d + +; r1 = kdp + b CommonPIHPath + + + +; NewWorld Primary Interrupt Handler + +; (At least most NewWorld machines.) +; The '06' in the NewWorld ROM ConfigInfo seems to +; be left alone by the Trampoline on most machines. + +; This ID was reused from, of all things, the Pippin. + + DeclarePIH 6, NewWorldPIH + + align 6 + +NewWorldPIH + + _Lock PSA.PIHLock, scratch1=r8, scratch2=r9 + +; r6 = ewa + bl Save_r20_r31 +; r8 = sprg0 (not used by me) + + addi r9, r1, -0x750 + andis. r8, r11, 0x02 + mfsprg r30, 3 + bne- NewWorldPIH_0x38 + lwz r21, 0x0e80(r1) + addi r21, r21, 0x01 + stw r21, 0x0e80(r1) + +NewWorldPIH_0x38 + mtsprg 3, r9 + mfmsr r23 + lwz r20, -0x0020(r1) + lhz r27, 0x0910(r1) + lwz r22, 0x0f18(r20) + li r28, 0x00 + lwz r25, -0x03fc(r1) + rlwinm r24, r22, 6, 26, 29 + addi r25, r25, 0x30 + mfsrin r21, r22 + lwzx r24, r25, r24 + mtsrin r24, r22 + isync + cmpwi cr1, r27, 0x00 + andis. r26, r11, 0x02 + beq- cr1, NewWorldPIH_0x23c + beq- NewWorldPIH_0x150 + lbz r29, 0x0f93(r20) + stb r28, 0x0f93(r20) + addi r26, r1, 0x912 + cmpwi cr1, r29, 0x07 + cmplwi r27, 0x01 + bne+ cr1, NewWorldPIH_0xa8 + addi r27, r27, -0x01 + ble- NewWorldPIH_0x1fc + lbzx r26, r26, r27 + lbz r28, 0x3f00(r26) + b NewWorldPIH_0x1fc + +NewWorldPIH_0xa8 + cmplwi r27, 0x01 + addi r27, r27, -0x01 + ble- NewWorldPIH_0x1fc + add r26, r26, r27 + addi r27, r20, 0xf93 + lbz r24, 0x0000(r26) + +NewWorldPIH_0xc0 + lbzu r28, -0x0001(r27) + cmpw r24, r28 + cmpwi cr1, r28, 0xfe + beq- NewWorldPIH_0xdc + bne+ cr1, NewWorldPIH_0xc0 + li r28, -0x01 + b NewWorldPIH_0x1fc + +NewWorldPIH_0xdc + li r28, 0xff + stb r28, 0x0000(r27) + addi r27, r20, 0xf28 + rlwinm r20, r24, 29, 29, 29 + clrlwi r24, r24, 0x1b + lis r28, -0x8000 + add r27, r27, r20 + srw r28, r28, r24 + lwz r24, 0x0000(r27) + andc r24, r24, r28 + addi r26, r26, -0x01 + stw r24, 0x0000(r27) + lbz r26, 0x0000(r26) + li r28, 0x00 + ori r29, r23, 0x10 + lis r27, 0x02 + ori r27, r27, 0xb0 + mtmsr r29 + isync + stwx r28, r22, r27 + mtmsr r23 + isync + lhz r27, 0x0910(r1) + cmpwi r26, 0xff + addi r27, r27, -0x01 + beq+ NewWorldPIH_0x148 + lbz r28, 0x3f00(r26) + +NewWorldPIH_0x148 + sth r27, 0x0910(r1) + b NewWorldPIH_0x1fc + +NewWorldPIH_0x150 + lhz r27, 0x0f88(r20) + ori r20, r23, 0x10 + lis r26, 0x02 + ori r26, r26, 160 + mtmsr r20 + isync + lwbrx r26, r22, r26 + clrlwi r26, r26, 0x14 + cmplwi r26, 0x40 + cmplwi cr1, r26, 0x41 + li r29, 0x00 + beq- NewWorldPIH_0x208 + bge- cr1, NewWorldPIH_0x218 + cmplw r26, r27 + lis r27, 0x02 + ori r27, r27, 0xb0 + bne+ NewWorldPIH_0x198 + stwx r29, r22, r27 + +NewWorldPIH_0x198 + mtmsr r23 + isync + lwz r20, -0x0020(r1) + lbz r28, 0x3f00(r26) + cmpwi r28, 0x07 + bne+ NewWorldPIH_0x1b8 + stb r28, 0x0f93(r20) + b NewWorldPIH_0x1fc + +NewWorldPIH_0x1b8 + lhz r27, 0x0910(r1) + add r24, r27, r1 + addi r27, r27, 0x01 + stb r26, 0x0912(r24) + rlwinm r25, r26, 29, 29, 29 + clrlwi r26, r26, 0x1b + lis r24, -0x8000 + sth r27, 0x0910(r1) + addi r27, r20, 0xf28 + add r27, r27, r25 + lwz r25, 0x0000(r27) + srw r24, r24, r26 + or r25, r25, r24 + li r24, 0xff + stw r25, 0x0000(r27) + addi r27, r20, 0xf8c + stbx r24, r28, r27 + +NewWorldPIH_0x1fc + mtsrin r21, r22 + isync + +; r1 = kdp + b CommonPIHPath + +NewWorldPIH_0x208 + mtmsr r23 + isync + li r28, -0x01 + b NewWorldPIH_0x1fc + +NewWorldPIH_0x218 + lis r27, 0x02 + ori r27, r27, 0xb0 + li r29, 0x00 + stwx r29, r22, r27 + eieio + mtmsr r23 + isync + li r28, -0x01 + b NewWorldPIH_0x1fc + +NewWorldPIH_0x23c + addi r27, r27, 0x01 + li r28, -0x01 + sth r27, 0x0910(r1) + stw r28, 0x0912(r1) + stw r28, 0x0f90(r20) + xoris r28, r28, 0x100 + stw r28, 0x0f8c(r20) + li r28, 0x00 + b NewWorldPIH_0x1fc + + + +; Primary Interrupt Handler for a mystery machine + + DeclarePIH 8, UnknownPIH + + align 6 + +UnknownPIH + + _Lock PSA.PIHLock, scratch1=r8, scratch2=r9 + +; r6 = ewa + bl Save_r20_r31 +; r8 = sprg0 (not used by me) + + addi r9, r1, -0x750 + andis. r8, r11, 0x02 + mfsprg r30, 3 + bne- UnknownPIH_0x38 + lwz r21, 0x0e80(r1) + addi r21, r21, 0x01 + stw r21, 0x0e80(r1) + +UnknownPIH_0x38 + mtsprg 3, r9 + mfmsr r23 + lwz r20, -0x0020(r1) + lhz r27, 0x0910(r1) + lwz r22, 0x0f18(r20) + li r28, 0x00 + lwz r25, -0x03fc(r1) + rlwinm r24, r22, 6, 26, 29 + addi r25, r25, 0x30 + mfsrin r21, r22 + lwzx r24, r25, r24 + mtsrin r24, r22 + isync + cmpwi cr1, r27, 0x00 + andis. r26, r11, 0x02 + beq- cr1, UnknownPIH_0x23c + beq- UnknownPIH_0x170 + cmplwi r27, 0x01 + ble- UnknownPIH_0x1f8 + addi r27, r27, -0x01 + addi r26, r1, 0x912 + add r26, r26, r27 + addi r27, r20, 0xee0 + lbz r24, 0x0000(r26) + mr r29, r24 + cmpwi r24, 0x20 + blt+ UnknownPIH_0xac + addi r27, r27, 0x04 + addi r24, r24, -0x20 + +UnknownPIH_0xac + lwz r27, 0x0000(r27) + lis r28, -0x8000 + srw r28, r28, r24 + and. r27, r27, r28 + bne- UnknownPIH_0xc8 + li r28, -0x01 + b UnknownPIH_0x1f8 + +UnknownPIH_0xc8 + addi r27, r20, 0xec4 + cmpwi r29, 0x20 + blt+ UnknownPIH_0xd8 + addi r27, r27, 0x04 + +UnknownPIH_0xd8 + lwz r24, 0x0000(r27) + andc r24, r24, r28 + stw r24, 0x0000(r27) + addi r27, r20, 0xee0 + cmpwi r29, 0x20 + blt+ UnknownPIH_0xf4 + addi r27, r27, 0x04 + +UnknownPIH_0xf4 + lwz r29, 0x0000(r27) + andc r29, r29, r28 + stw r29, 0x0000(r27) + addi r26, r26, -0x01 + lbz r26, 0x0000(r26) + cmpwi r26, 0xff + beq- UnknownPIH_0x114 + b UnknownPIH_0x118 + +UnknownPIH_0x114 + li r26, 0x800 + +UnknownPIH_0x118 + ori r28, r23, 0x10 + lis r27, 0x02 + ori r27, r27, 0xb0 + mtmsr r28 + isync + li r28, 0x00 + stwx r28, r22, r27 + eieio + cmpwi r26, 0x800 + beq- UnknownPIH_0x158 + lis r28, 0x01 + ori r28, r28, 0x00 + rlwinm r27, r26, 5, 16, 31 + add r28, r28, r27 + lwbrx r28, r22, r28 + rlwinm r28, r28, 16, 28, 31 + +UnknownPIH_0x158 + mtmsr r23 + isync + lhz r27, 0x0910(r1) + addi r27, r27, -0x01 + sth r27, 0x0910(r1) + b UnknownPIH_0x1f8 + +UnknownPIH_0x170 + ori r27, r23, 0x10 + lis r26, 0x02 + ori r26, r26, 160 + lis r28, 0x01 + ori r28, r28, 0x00 + mtmsr r27 + isync + lwbrx r26, r22, r26 + clrlwi r26, r26, 0x14 + cmplwi r26, 0x31 + cmplwi cr1, r26, 0x28 + beq- UnknownPIH_0x204 + bge- cr1, UnknownPIH_0x214 + rlwinm r27, r26, 5, 16, 31 + add r28, r28, r27 + lwbrx r28, r22, r28 + rlwinm r28, r28, 16, 28, 31 + mtmsr r23 + isync + lhz r27, 0x0910(r1) + add r24, r27, r1 + addi r27, r27, 0x01 + stb r26, 0x0912(r24) + sth r27, 0x0910(r1) + addi r27, r20, 0xec4 + cmpwi r26, 0x20 + blt+ UnknownPIH_0x1e4 + addi r27, r27, 0x04 + addi r26, r26, -0x20 + +UnknownPIH_0x1e4 + lwz r25, 0x0000(r27) + lis r24, -0x8000 + srw r24, r24, r26 + or r25, r25, r24 + stw r25, 0x0000(r27) + +UnknownPIH_0x1f8 + mtsrin r21, r22 + isync + +; r1 = kdp + b CommonPIHPath + +UnknownPIH_0x204 + mtmsr r23 + isync + li r28, -0x01 + b UnknownPIH_0x1f8 + +UnknownPIH_0x214 + lis r27, 0x02 + ori r27, r27, 0xb0 + li r29, 0x00 + stwx r29, r22, r27 + eieio + mtmsr r23 + isync + li r28, 0x06 + li r28, -0x01 + b UnknownPIH_0x1f8 + +UnknownPIH_0x23c + addi r27, r27, 0x01 + li r28, -0x01 + sth r27, 0x0910(r1) + stw r28, 0x0912(r1) + li r28, 0x00 + stw r28, 0x0ee4(r20) + stw r28, 0x0ee0(r20) + b UnknownPIH_0x1f8 diff --git a/NanoKernel/NKProcFlagsTbl.s b/NanoKernel/NKProcFlagsTbl.s new file mode 100644 index 0000000..df6e201 --- /dev/null +++ b/NanoKernel/NKProcFlagsTbl.s @@ -0,0 +1,72 @@ +; Contains the table used by Init.s:SetProcessorFlags, and a label to find it with. +; +; Using this table, three fields in KDP are set: +; KDP.CpuSpecificByte1 +; KDP.CpuSpecificByte2 (immediately follows Byte1) +; KDP.ProcessorInfo.ProcessorFlags + +ProcessorFlagsTable + dcb.b 32 * (1 + 1 + 4), 0 +ProcessorFlagsTableEnd + + + +PflgTblCtr set 0 + + macro + PflgTblEnt &CpuSpecificByte1, &CpuSpecificByte2, &ProcessorFlags + +@fb + org ProcessorFlagsTable + PflgTblCtr + dc.b &CpuSpecificByte1 + org ProcessorFlagsTable + 32 + PflgTblCtr + dc.b &CpuSpecificByte2 + org ProcessorFlagsTable + 64 + 4*PflgTblCtr + dc.l &ProcessorFlags + org @fb +PflgTblCtr set PflgTblCtr + 1 + + endm + + + + with NKProcessorInfo + + ; CpuSpecificByte + ; 1 2 ProcessorFlags CPU + ; ---- - ------------------------------------------------------------------------ ----------------------- + PflgTblEnt 0x03, 1, 0 ; 0**0 + PflgTblEnt 0x00, 0, 0 ; 0**1 = 601 + PflgTblEnt 0x03, 1, 0 ; 0**2 + PflgTblEnt 0x1b, 2, 0 ; 0**3 = 603 + PflgTblEnt 0x0a, 1, 0 ; 0**4 = 604 + PflgTblEnt 0x1b, 2, 0 ; 0**5 + PflgTblEnt 0x1b, 2, 0 ; 0**6 = 603e + PflgTblEnt 0x1b, 2, 0 ; 0**7 = 750FX + PflgTblEnt 0x1b, 2, 1<< hasL2CR | 1<< hasPLRUL1 | 1<< hasTAU ; 0**8 = 750 + PflgTblEnt 0x0a, 1, 0 ; 0**9 + PflgTblEnt 0x0a, 1, 0 ; 0**a + PflgTblEnt 0x03, 1, 0 ; 0**b + PflgTblEnt 0x1b, 2, 1<< hasL2CR | 1<< hasPLRUL1 | 1<< hasTAU | 1<< hasVMX | 1<< unknownFlag ; 0**c = 7400 + PflgTblEnt 0x0b, 2, 0 ; 0**d + PflgTblEnt 0x03, 2, 0 ; 0**e + PflgTblEnt 0x03, 2, 0 ; 0**f + + PflgTblEnt 0x03, 2, 1<< hasL2CR | 1<< hasPLRUL1 | 1<< hasTAU | 1<< hasVMX | 1<< unknownFlag ; 8**0 = 7450 + PflgTblEnt 0x1b, 2, 1<< hasL2CR | 1<< hasPLRUL1 | 1<< hasTAU | 1<< hasVMX | 1<< unknownFlag ; 8**1 = 7445/55 + PflgTblEnt 0x03, 2, 0 ; 8**2 = 7447 (OS X only) + PflgTblEnt 0x03, 2, 0 ; 8**3 + PflgTblEnt 0x03, 1, 0 ; 8**4 + PflgTblEnt 0x03, 2, 0 ; 8**5 + PflgTblEnt 0x03, 2, 0 ; 8**6 + PflgTblEnt 0x03, 2, 0 ; 8**7 + PflgTblEnt 0x03, 2, 0 ; 8**8 + PflgTblEnt 0x03, 2, 0 ; 8**9 + PflgTblEnt 0x03, 2, 0 ; 8**a + PflgTblEnt 0x03, 2, 0 ; 8**b + PflgTblEnt 0x1b, 2, 1<< hasL2CR | 1<< hasPLRUL1 | 1<< hasTAU | 1<< hasVMX | 1<< unknownFlag ; 8**c = 7410 + PflgTblEnt 0x03, 2, 0 ; 8**d + PflgTblEnt 0x03, 2, 0 ; 8**e + PflgTblEnt 0x03, 2, 0 ; 8**f + + endwith diff --git a/NanoKernel/NKProcInfoTbl.s b/NanoKernel/NKProcInfoTbl.s new file mode 100644 index 0000000..a47fbb0 --- /dev/null +++ b/NanoKernel/NKProcInfoTbl.s @@ -0,0 +1,52 @@ +; Contains the table used by InitBuiltin.s:OverrideProcessorInfo +; +; If the Trampoline fails to pass in a signed HardwareInfo struct, +; this is our first choice for populating ProcessorInfo. +; +; Also contains a 'function' that will do the populating +; (not very clever), and fall through to the end of the file, +; where we expect to find Init.s:FinishInitBuiltin. + + macro ; just to make the table below look nicer... + PnfoTblEnt &a, &b, &c, &d, &e, &f, &g, &h, &i, &j, &k, &l, &m, &n, &o + dc.l &a * 1024, &b * 1024, &c * 1024 + dc.w &d, &e, &f, &g, &h, &i, &j, &k, &l, &m, &n, &o + endm + +ProcessorInfoTable + +; - PageSize, KB +; | - DataCacheTotalSize, KB +; | | - InstCacheTotalSize, KB +; | | | - CoherencyBlockSize +; | | | | - ReservationGranuleSize +; | | | | | - CombinedCaches +; | | | | | | - InstCacheLineSize +; | | | | | | | - DataCacheLineSize +; | | | | | | | | - DataCacheBlockSizeTouch +; | | | | | | | | | - InstCacheBlockSize +; | | | | | | | | | | - DataCacheBlockSize +; | | | | | | | | | | | - InstCacheAssociativity +; | | | | | | | | | | | | - DataCacheAssociativity +; | | | | | | | | | | | | | - TransCacheTotalSize +; | | | | | | | | | | | | | | - TransCacheAssociativity + + PnfoTblEnt 4, 32, 32, 32, 32, 1, 64, 64, 32, 32, 32, 8, 8, 256, 2 ; 0001 = 601 + PnfoTblEnt 4, 8, 8, 32, 32, 0, 32, 32, 32, 32, 32, 2, 2, 64, 2 ; 0003 = 603 + PnfoTblEnt 4, 16, 16, 32, 32, 0, 32, 32, 32, 32, 32, 4, 4, 128, 2 ; 0004 = 604 + PnfoTblEnt 4, 16, 16, 32, 32, 0, 32, 32, 32, 32, 32, 4, 4, 64, 2 ; 0006 = 603e + PnfoTblEnt 4, 16, 16, 32, 32, 0, 32, 32, 32, 32, 32, 4, 4, 64, 2 ; 0007 = 750FX + PnfoTblEnt 4, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 8, 8, 128, 2 ; 0008 = 750 + PnfoTblEnt 4, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 4, 4, 128, 2 ; 0009/a = ??? + PnfoTblEnt 4, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 8, 8, 128, 2 ; 000c = 7400 + PnfoTblEnt 4, 32, 32, 32, 32, 0, 32, 32, 32, 32, 32, 8, 8, 256, 4 ; 000d = ??? + + + +OverrideProcessorInfo + +@loop + subic. r9, r9, 4 + lwzx r12, r11, r9 + stwx r12, r10, r9 + bgt+ @loop diff --git a/NanoKernel/NKQueues.s b/NanoKernel/NKQueues.s new file mode 100644 index 0000000..d4d842e --- /dev/null +++ b/NanoKernel/NKQueues.s @@ -0,0 +1,2526 @@ + DeclareMPCall 15, MPCall_15 + +MPCall_15 ; OUTSIDE REFERER + li r8, 0x34 + bl PoolAlloc_with_crset + mr. r31, r8 + beq+ major_0x0af60_0x20 + lis r16, 'MS' + stw r8, 0x0008(r8) + ori r16, r16, 'GQ' + stw r8, 0x000c(r8) + stw r16, 0x0004(r8) + addi r9, r8, 0x10 + lis r16, 'NO' + stw r9, 0x0008(r9) + ori r16, r16, 'TQ' + stw r9, 0x000c(r9) + stw r16, 0x0004(r9) + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + li r9, 0x04 + +; r1 = kdp +; r9 = kind + bl MakeID + cmpwi r8, 0x00 + bne+ MPCall_15_0x70 + mr r8, r31 + bl PoolFree + b major_0x0af60 + +MPCall_15_0x70 + mfsprg r30, 0 + lwz r30, -0x0008(r30) + stw r8, 0x0000(r31) + lwz r17, 0x0060(r30) + stw r17, 0x0020(r31) + mr r4, r8 + li r17, 0x00 + stw r17, 0x0024(r31) + stw r17, 0x0028(r31) + stw r17, 0x002c(r31) + stw r17, 0x0030(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 16, MPCall_16 + +MPCall_16 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Queue.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + +MPCall_16_0x2c + addi r30, r31, 0x10 + lwz r8, 0x0018(r31) + cmpw r8, r30 + beq- MPCall_16_0x60 + lwz r16, 0x0008(r8) + lwz r17, 0x000c(r8) + stw r16, 0x0008(r17) + stw r17, 0x000c(r16) + li r16, 0x00 + stw r16, 0x0008(r8) + stw r16, 0x000c(r8) + bl PoolFree + b MPCall_16_0x2c + +MPCall_16_0x60 + lwz r30, 0x0028(r31) + +MPCall_16_0x64 + mr. r8, r30 + beq- MPCall_16_0x78 + lwz r30, 0x0008(r30) + bl PoolFree + b MPCall_16_0x64 + +MPCall_16_0x78 + mr r8, r3 + bl major_0x0dce8 + +MPCall_16_0x80 + addi r30, r31, 0x00 + lwz r16, 0x0008(r31) + cmpw r16, r30 + addi r8, r16, -0x08 + beq- MPCall_16_0xe4 + lwz r17, 0x0088(r8) + li r18, -0x726f + stw r18, 0x011c(r17) + lbz r17, 0x0037(r8) + cmpwi r17, 0x01 + bne- MPCall_16_0xb4 + addi r8, r8, 0x20 + bl major_0x136c8 + +MPCall_16_0xb4 + lwz r16, 0x0008(r31) + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + addi r8, r16, -0x08 + bl TaskReadyAsPrev + bl major_0x14af8 + b MPCall_16_0x80 + +MPCall_16_0xe4 + mr r8, r31 + bl PoolFree + mr r8, r3 + bl DeleteID + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 39, MPCall_39 + +MPCall_39 ; OUTSIDE REFERER + cmpwi r4, 0x00 + blt+ ReturnMPCallOOM + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Queue.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + lwz r29, 0x0024(r31) + lwz r30, 0x0028(r31) + cmpw r29, r4 + +; r1 = kdp + beq+ ReleaseAndReturnZeroFromMPCall + blt- MPCall_39_0x7c + +MPCall_39_0x48 + mr. r8, r30 + beq- MPCall_39_0x70 + addi r29, r29, -0x01 + lwz r30, 0x0008(r30) + bl PoolFree + cmpw r29, r4 + bgt+ MPCall_39_0x48 + stw r4, 0x0024(r31) + stw r30, 0x0028(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_39_0x70 + stw r29, 0x0024(r31) + stw r30, 0x0028(r31) + b ReleaseAndReturnMPCallOOM + +MPCall_39_0x7c + li r8, 0x1c + bl PoolAlloc_with_crset + cmpwi r8, 0x00 + beq+ major_0x0af60 + addi r29, r29, 0x01 + lis r17, 0x6e6f + ori r17, r17, 0x7472 + stw r17, 0x0004(r8) + stw r30, 0x0008(r8) + stw r29, 0x0024(r31) + cmpw r29, r4 + stw r8, 0x0028(r31) + mr r30, r8 + blt+ MPCall_39_0x7c + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 17, MPCall_17 + +MPCall_17 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Queue.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + lwz r16, 0x0024(r31) + li r8, 0x1c + cmpwi r16, 0x00 + bne- MPCall_17_0x58 + bl PoolAlloc_with_crset + cmpwi r8, 0x00 + beq+ major_0x0af60 + lis r17, 0x6e6f + ori r17, r17, 0x7465 + stw r17, 0x0004(r8) + b MPCall_17_0x6c + +MPCall_17_0x58 + lwz r17, 0x0028(r31) + mr. r8, r17 + beq+ ReleaseAndReturnMPCallOOM + lwz r17, 0x0008(r17) + stw r17, 0x0028(r31) + +MPCall_17_0x6c + lwz r16, 0x0134(r6) + stw r4, 0x0010(r8) + stw r5, 0x0014(r8) + stw r16, 0x0018(r8) + bl major_0x0c8b4 + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; major_0x0c8b4 + +; Xrefs: +; major_0x02ccc +; MPCall_17 +; major_0x0db04 +; MPCall_9 +; MPCall_58 + +major_0x0c8b4 ; OUTSIDE REFERER + addi r17, r31, 0x10 + stw r17, 0x0000(r8) + stw r17, 0x0008(r8) + lwz r16, 0x000c(r17) + stw r16, 0x000c(r8) + stw r8, 0x0008(r16) + stw r8, 0x000c(r17) + lwz r18, 0x0030(r31) + addi r18, r18, 0x01 + stw r18, 0x0030(r31) + mflr r27 + lwz r8, 0x0000(r31) + bl major_0x0dce8 + lwz r16, 0x0008(r31) + cmpw r16, r31 + addi r8, r16, -0x08 + beq- major_0x0c8b4_0xac + lwz r17, 0x0088(r8) + lwz r18, 0x00fc(r17) + subi r18, r18, 4 + stw r18, 0x00fc(r17) + lbz r17, 0x0037(r8) + cmpwi r17, 0x01 + bne- major_0x0c8b4_0x68 + addi r8, r8, 0x20 + bl major_0x136c8 + +major_0x0c8b4_0x68 + lwz r16, 0x0008(r31) + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + lwz r18, 0x002c(r31) + addi r18, r18, -0x01 + stw r18, 0x002c(r31) + addi r8, r16, -0x08 + li r17, 0x01 + stb r17, 0x0019(r8) + bl TaskReadyAsPrev + bl CalculateTimeslice + bl major_0x14af8 + +major_0x0c8b4_0xac + mtlr r27 + blr + + + + DeclareMPCall 18, MPCall_18 + +MPCall_18 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Queue.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r16, 0x0018(r31) + addi r17, r31, 0x10 + cmpw r16, r17 + beq- MPCall_18_0x9c + lwz r4, 0x0010(r16) + lwz r5, 0x0014(r16) + lwz r17, 0x0018(r16) + stw r17, 0x0134(r6) + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + lwz r18, 0x0030(r31) + addi r18, r18, -0x01 + stw r18, 0x0030(r31) + lbz r17, 0x0007(r16) + mr r8, r16 + cmpwi r17, 0x72 + beq- MPCall_18_0x8c + bl PoolFree + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_18_0x8c + lwz r17, 0x0028(r31) + stw r16, 0x0028(r31) + stw r17, 0x0008(r16) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_18_0x9c + lwz r17, 0x013c(r6) + mfsprg r30, 0 + cmpwi r17, 0x00 + lwz r19, -0x0008(r30) + beq+ ReleaseAndTimeoutMPCall + lwz r16, 0x0064(r19) + rlwinm. r16, r16, 0, 15, 15 + beq- MPCall_18_0xc4 + stw r3, -0x0410(r1) + b ReleaseAndReturnMPCallBlueBlocking + +MPCall_18_0xc4 + mr r8, r19 + bl major_0x13e4c + lwz r19, -0x0008(r30) + addi r16, r31, 0x00 + addi r17, r19, 0x08 + stw r16, 0x0000(r17) + stw r16, 0x0008(r17) + lwz r18, 0x000c(r16) + stw r18, 0x000c(r17) + stw r17, 0x0008(r18) + stw r17, 0x000c(r16) + lwz r18, 0x002c(r31) + addi r18, r18, 0x01 + stw r18, 0x002c(r31) + lis r16, 0x7fff + lwz r17, 0x013c(r6) + ori r16, r16, 0xffff + addi r30, r19, 0x20 + cmpw r17, r16 + li r16, 0x02 + beq- MPCall_18_0x154 + stb r16, 0x0014(r30) + stw r19, 0x0018(r30) + mr r8, r17 + +; r1 = kdp +; r8 = multiple (pos: /250; neg: /250000) + bl TimebaseTicksPerPeriod +; r8 = hi +; r9 = lo + + mr r27, r8 + mr r28, r9 + bl GetTime + mfxer r16 + addc r9, r9, r28 + adde r8, r8, r27 + mtxer r16 + stw r8, 0x0038(r30) + stw r9, 0x003c(r30) + mr r8, r30 + bl called_by_init_tmrqs + +MPCall_18_0x154 + b AlternateMPCallReturnPath + + + + DeclareMPCall 19, MPCall_19 + +MPCall_19 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Queue.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r16, 0x0018(r31) + addi r17, r31, 0x10 + cmpw r16, r17 + beq+ ReleaseAndTimeoutMPCall + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 20, MPCall_20 + +MPCall_20 ; OUTSIDE REFERER + cmpw r4, r3 + bgt+ ReturnMPCallOOM + li r8, 0x20 + bl PoolAlloc_with_crset + mr. r31, r8 + beq+ major_0x0af60_0x20 + lis r16, 0x5345 + stw r31, 0x0008(r31) + ori r16, r16, 0x4d41 + stw r31, 0x000c(r31) + stw r16, 0x0004(r31) + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + li r9, 0x05 + +; r1 = kdp +; r9 = kind + bl MakeID + cmpwi r8, 0x00 + bne+ MPCall_20_0x60 + mr r8, r31 + bl PoolFree + b major_0x0af60 + +MPCall_20_0x60 + li r18, 0x00 + stw r8, 0x0000(r31) + mfsprg r30, 0 + lwz r30, -0x0008(r30) + stw r3, 0x0014(r31) + stw r4, 0x0010(r31) + lwz r17, 0x0060(r30) + stw r18, 0x001c(r31) + stw r17, 0x0018(r31) + mr r5, r8 + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 23, MPCall_23 + +MPCall_23 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Semaphore.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r16, 0x0010(r31) + cmpwi r16, 0x00 + addi r16, r16, -0x01 + ble- MPCall_23_0x44 + stw r16, 0x0010(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_23_0x44 + cmpwi r4, 0x00 + mfsprg r30, 0 + beq+ ReleaseAndTimeoutMPCall + lwz r8, -0x0008(r30) + lwz r16, 0x0064(r8) + rlwinm. r16, r16, 0, 15, 15 + beq- MPCall_23_0x68 + stw r3, -0x0410(r1) + b ReleaseAndReturnMPCallBlueBlocking + +MPCall_23_0x68 + bl major_0x13e4c + addi r16, r31, 0x00 + addi r17, r8, 0x08 + stw r16, 0x0000(r17) + stw r16, 0x0008(r17) + lwz r18, 0x000c(r16) + stw r18, 0x000c(r17) + stw r17, 0x0008(r18) + stw r17, 0x000c(r16) + lwz r18, 0x001c(r31) + addi r18, r18, 0x01 + stw r18, 0x001c(r31) + lis r16, 0x7fff + addi r30, r8, 0x20 + ori r16, r16, 0xffff + cmpw r4, r16 + li r17, 0x02 + beq- MPCall_23_0xec + stb r17, 0x0014(r30) + stw r8, 0x0018(r30) + mr r8, r4 + +; r1 = kdp +; r8 = multiple (pos: /250; neg: /250000) + bl TimebaseTicksPerPeriod +; r8 = hi +; r9 = lo + + mr r27, r8 + mr r28, r9 + bl GetTime + mfxer r16 + addc r9, r9, r28 + adde r8, r8, r27 + mtxer r16 + stw r8, 0x0038(r30) + stw r9, 0x003c(r30) + mr r8, r30 + bl called_by_init_tmrqs + +MPCall_23_0xec + li r3, 0x00 + b AlternateMPCallReturnPath + + + + DeclareMPCall 24, MPCall_24 + +MPCall_24 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Semaphore.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r16, 0x0010(r31) + cmpwi r16, 0x00 + ble+ ReleaseAndTimeoutMPCall + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 22, MPCall_22 + +MPCall_22 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Semaphore.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + bl major_0x0ccf4 + mr r3, r8 + b ReleaseAndReturnMPCall + + + +; major_0x0ccf4 + +; Xrefs: +; MPCall_22 +; major_0x0db04 + +major_0x0ccf4 ; OUTSIDE REFERER + mflr r27 + lwz r8, 0x0000(r31) + bl major_0x0dce8 + lwz r16, 0x0008(r31) + cmpw r16, r31 + beq- major_0x0ccf4_0x80 + addi r8, r16, -0x08 + lbz r17, 0x0037(r8) + cmpwi r17, 0x01 + bne- major_0x0ccf4_0x30 + addi r8, r8, 0x20 + bl major_0x136c8 + +major_0x0ccf4_0x30 + lwz r16, 0x0008(r31) + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + lwz r18, 0x001c(r31) + addi r18, r18, -0x01 + stw r18, 0x001c(r31) + addi r8, r16, -0x08 + li r17, 0x01 + stb r17, 0x0019(r8) + bl TaskReadyAsPrev + bl CalculateTimeslice + bl major_0x14af8 + mtlr r27 + li r8, 0x00 + blr + +major_0x0ccf4_0x80 + mtlr r27 + lwz r16, 0x0010(r31) + lwz r17, 0x0014(r31) + cmpw r16, r17 + addi r16, r16, 0x01 + li r8, -0x7272 + bgelr- + stw r16, 0x0010(r31) + li r8, 0x00 + blr + + + + DeclareMPCall 21, MPCall_21 + +MPCall_21 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Semaphore.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r8, r3 + bl major_0x0dce8 + +MPCall_21_0x34 + addi r30, r31, 0x00 + lwz r16, 0x0008(r31) + cmpw r16, r30 + addi r8, r16, -0x08 + beq- MPCall_21_0x98 + lwz r17, 0x0088(r8) + li r18, -0x726f + stw r18, 0x011c(r17) + lbz r17, 0x0037(r8) + cmpwi r17, 0x01 + bne- MPCall_21_0x68 + addi r8, r8, 0x20 + bl major_0x136c8 + +MPCall_21_0x68 + lwz r16, 0x0008(r31) + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + addi r8, r16, -0x08 + bl TaskReadyAsPrev + bl major_0x14af8 + b MPCall_21_0x34 + +MPCall_21_0x98 + mr r8, r31 + bl PoolFree + mr r8, r3 + bl DeleteID + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 25, MPCall_25 + +MPCall_25 ; OUTSIDE REFERER + li r8, 0x24 + bl PoolAlloc_with_crset + mr. r31, r8 + beq+ major_0x0af60_0x20 + lis r16, 0x4352 + stw r31, 0x0008(r31) + ori r16, r16, 0x474e + stw r31, 0x000c(r31) + stw r16, 0x0004(r31) + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + li r9, 0x06 + +; r1 = kdp +; r9 = kind + bl MakeID + cmpwi r8, 0x00 + bne+ MPCall_25_0x58 + mr r8, r31 + bl PoolFree + b major_0x0af60 + +MPCall_25_0x58 + li r18, 0x00 + mfsprg r30, 0 + lwz r30, -0x0008(r30) + li r16, 0x00 + stw r8, 0x0000(r31) + stw r16, 0x0014(r31) + stw r16, 0x001c(r31) + stw r16, 0x0018(r31) + lwz r17, 0x0060(r30) + stw r18, 0x0020(r31) + stw r17, 0x0010(r31) + mr r4, r8 + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 27, MPCall_27 + +MPCall_27 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, CriticalRegion.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + mfsprg r17, 0 + lwz r18, 0x0014(r31) + lwz r30, -0x0008(r17) + cmpwi r18, 0x00 + lwz r16, 0x0018(r31) + beq- MPCall_27_0x64 + lwz r17, 0x001c(r31) + cmpw r16, r30 + cmpw cr1, r17, r5 + bne- MPCall_27_0x78 + bne- cr1, MPCall_27_0x78 + addi r18, r18, 0x01 + stw r18, 0x0014(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_27_0x64 + addi r18, r18, 0x01 + stw r30, 0x0018(r31) + stw r5, 0x001c(r31) + stw r18, 0x0014(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_27_0x78 + lwz r8, 0x0000(r16) + +; r8 = id + bl LookupID + cmpwi r9, Task.kIDClass + + bne+ ReleaseAndReturnMPCallTaskAborted + lwz r8, 0x001c(r31) + +; r8 = id + bl LookupID + cmpwi r9, Process.kIDClass + + bne+ ReleaseAndReturnMPCallTaskAborted + cmpwi r4, 0x00 + lwz r16, 0x0064(r30) + beq+ ReleaseAndTimeoutMPCall + rlwinm. r16, r16, 0, 15, 15 + beq- MPCall_27_0xb4 + stw r3, -0x0410(r1) + b ReleaseAndReturnMPCallBlueBlocking + +MPCall_27_0xb4 + mr r8, r30 + bl major_0x13e4c + lis r16, 0x7fff + addi r18, r30, 0x08 + ori r16, r16, 0xffff + stw r31, 0x0000(r18) + stw r31, 0x0008(r18) + lwz r19, 0x000c(r31) + stw r19, 0x000c(r18) + stw r18, 0x0008(r19) + stw r18, 0x000c(r31) + lwz r18, 0x0020(r31) + addi r18, r18, 0x01 + stw r18, 0x0020(r31) + cmpw r4, r16 + beq- MPCall_27_0x138 + addi r29, r30, 0x20 + li r8, 0x02 + stw r30, 0x0018(r29) + stb r8, 0x0014(r29) + mr r8, r4 + +; r1 = kdp +; r8 = multiple (pos: /250; neg: /250000) + bl TimebaseTicksPerPeriod +; r8 = hi +; r9 = lo + + mr r27, r8 + mr r28, r9 + bl GetTime + mfxer r16 + addc r9, r9, r28 + adde r8, r8, r27 + mtxer r16 + stw r8, 0x0038(r29) + stw r9, 0x003c(r29) + mr r8, r29 + bl called_by_init_tmrqs + +MPCall_27_0x138 + b AlternateMPCallReturnPath + + + + DeclareMPCall 29, MPCall_29 + +MPCall_29 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, CriticalRegion.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + mfsprg r17, 0 + lwz r18, 0x0014(r31) + cmpwi r18, 0x00 + +; r1 = kdp + beq+ ReleaseAndReturnZeroFromMPCall + lwz r30, -0x0008(r17) + lwz r16, 0x0018(r31) + lwz r17, 0x001c(r31) + cmpw r16, r30 + cmpw cr1, r17, r4 + bne+ ReleaseAndTimeoutMPCall + bne+ cr1, ReleaseAndTimeoutMPCall + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 28, MPCall_28 + +MPCall_28 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, CriticalRegion.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + mfsprg r17, 0 + lwz r16, 0x0018(r31) + lwz r30, -0x0008(r17) + lwz r18, 0x0014(r31) + lwz r17, 0x001c(r31) + cmpw r16, r30 + cmpw cr1, r17, r4 + bne+ ReleaseAndReturnMPCallOOM + bne+ cr1, ReleaseAndReturnMPCallOOM + addi r18, r18, -0x01 + cmpwi r18, 0x00 + stw r18, 0x0014(r31) + +; r1 = kdp + bne+ ReleaseAndReturnZeroFromMPCall + stw r18, 0x0018(r31) + stw r18, 0x001c(r31) + mr r8, r3 + bl major_0x0dce8 + lwz r16, 0x0008(r31) + cmpw r16, r31 + +; r1 = kdp + beq+ ReleaseAndReturnZeroFromMPCall + addi r8, r16, -0x08 + lbz r17, 0x0037(r8) + cmpwi r17, 0x01 + bne- MPCall_28_0x94 + addi r8, r8, 0x20 + bl major_0x136c8 + +MPCall_28_0x94 + lwz r16, 0x0008(r31) + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + lwz r18, 0x0020(r31) + addi r18, r18, -0x01 + stw r18, 0x0020(r31) + addi r8, r16, -0x08 + lwz r17, 0x0088(r8) + lwz r18, 0x00fc(r17) + subi r18, r18, 4 + stw r18, 0x00fc(r17) + li r17, 0x01 + stb r17, 0x0019(r8) + bl TaskReadyAsPrev + bl CalculateTimeslice + bl major_0x14af8 + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 26, MPCall_26 + +MPCall_26 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, CriticalRegion.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r8, r3 + bl major_0x0dce8 + +MPCall_26_0x34 + addi r30, r31, 0x00 + lwz r16, 0x0008(r31) + cmpw r16, r30 + addi r8, r16, -0x08 + beq- MPCall_26_0x98 + lwz r17, 0x0088(r8) + li r18, -0x726f + stw r18, 0x011c(r17) + lbz r17, 0x0037(r8) + cmpwi r17, 0x01 + bne- MPCall_26_0x68 + addi r8, r8, 0x20 + bl major_0x136c8 + +MPCall_26_0x68 + lwz r16, 0x0008(r31) + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + addi r8, r16, -0x08 + bl TaskReadyAsPrev + bl major_0x14af8 + b MPCall_26_0x34 + +MPCall_26_0x98 + mr r8, r31 + bl PoolFree + mr r8, r3 + bl DeleteID + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 49, NKCreateEventGroupForThisTask + +NKCreateEventGroupForThisTask + + li r8, EventGroup.Size + bl PoolAlloc + mr. r31, r8 + beq+ major_0x0af60_0x20 + + InitList r8, EventGroup.kSignature, scratch=r16 + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + li r9, EventGroup.kIDClass + bl MakeID + cmpwi r8, 0 + bne+ @success + + mr r8, r31 + bl PoolFree + b major_0x0af60 + +@success + mfsprg r30, 0 + lwz r30, EWA.PA_CurTask(r30) + + stw r8, EventGroup.LLL + LLL.Freeform(r31) + + lwz r17, Task.ProcessID(r30) + stw r17, EventGroup.ProcessID(r31) + + mr r4, r8 + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 50, MPCall_50 + +MPCall_50 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, EventGroup.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r8, r3 + bl major_0x0dce8 + +MPCall_50_0x34 + addi r30, r31, 0x00 + lwz r16, 0x0008(r31) + cmpw r16, r30 + addi r8, r16, -0x08 + beq- MPCall_50_0x98 + lwz r17, 0x0088(r8) + li r18, -0x726f + stw r18, 0x011c(r17) + lbz r17, 0x0037(r8) + cmpwi r17, 0x01 + bne- MPCall_50_0x68 + addi r8, r8, 0x20 + bl major_0x136c8 + +MPCall_50_0x68 + lwz r16, 0x0008(r31) + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + addi r8, r16, -0x08 + bl TaskReadyAsPrev + bl major_0x14af8 + b MPCall_50_0x34 + +MPCall_50_0x98 + mr r8, r31 + bl PoolFree + mr r8, r3 + bl DeleteID + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 51, MPCall_51 + +MPCall_51 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, EventGroup.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r8, r4 + bl major_0x0d35c + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; major_0x0d35c + +; Xrefs: +; MPCall_51 +; major_0x0db04 +; MPCall_83 + +major_0x0d35c ; OUTSIDE REFERER + lwz r16, 0x0010(r31) + or r16, r16, r8 + stw r16, 0x0010(r31) + mflr r27 + lwz r8, 0x0000(r31) + bl major_0x0dce8 + lwz r16, 0x0008(r31) + cmpw r16, r31 + addi r8, r16, -0x08 + beq- major_0x0d35c_0x90 + lwz r17, 0x0088(r8) + lwz r18, 0x00fc(r17) + subi r18, r18, 4 + stw r18, 0x00fc(r17) + lbz r17, 0x0037(r8) + cmpwi r17, 0x01 + bne- major_0x0d35c_0x4c + addi r8, r8, 0x20 + bl major_0x136c8 + +major_0x0d35c_0x4c + lwz r16, 0x0008(r31) + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + lwz r18, 0x001c(r31) + addi r18, r18, -0x01 + stw r18, 0x001c(r31) + addi r8, r16, -0x08 + li r17, 0x01 + stb r17, 0x0019(r8) + bl TaskReadyAsPrev + bl CalculateTimeslice + bl major_0x14af8 + +major_0x0d35c_0x90 + lwz r16, 0x0018(r31) + rlwinm. r17, r16, 0, 27, 27 + beq- major_0x0d35c_0x1a0 + lwz r17, 0x0658(r1) + lwz r26, -0x08f0(r1) + lwz r18, 0x00c8(r17) + lwz r19, 0x00d0(r17) + cmpwi cr1, r18, 0x00 + cmpwi r19, 0x00 + bne- cr1, major_0x0d35c_0xc8 + bne- major_0x0d35c_0x1a0 + lwz r8, 0x0000(r31) + stw r8, 0x00d0(r17) + b major_0x0d35c_0x118 + +major_0x0d35c_0xc8 + lwz r9, 0x0634(r1) + rlwinm r16, r16, 2, 26, 29 + add r18, r18, r9 + lwzx r19, r16, r18 + cmpwi r19, 0x00 + bne- major_0x0d35c_0x1a0 + lwz r8, 0x0000(r31) + stwx r8, r16, r18 + li r19, 0x1c + li r9, 0x04 + +major_0x0d35c_0xf0 + lwzx r8, r19, r18 + cmpwi r8, 0x00 + bne- major_0x0d35c_0x108 + subf. r19, r9, r19 + bgt+ major_0x0d35c_0xf0 + bl panic + +major_0x0d35c_0x108 + cmplw r16, r19 + srwi r16, r16, 2 + blt- major_0x0d35c_0x1a0 + stw r16, 0x00d0(r17) + +major_0x0d35c_0x118 + lwz r16, 0x0064(r26) + lbz r19, 0x0018(r26) + ori r16, r16, 0x10 + stw r16, 0x0064(r26) + lwz r17, -0x0440(r1) + lwz r16, 0x0674(r1) + lwz r8, 0x0678(r1) + and r16, r16, r8 + or r17, r17, r16 + stw r17, -0x0440(r1) + cmpwi r19, 0x00 + addi r16, r26, 0x08 + bne- major_0x0d35c_0x198 + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + lbz r17, 0x0037(r26) + cmpwi r17, 0x01 + bne- major_0x0d35c_0x17c + addi r8, r26, 0x20 + bl major_0x136c8 + +major_0x0d35c_0x17c + lwz r18, -0x08f0(r1) + li r16, 0x00 + stb r16, 0x0019(r26) + mr r8, r26 + bl TaskReadyAsNext + mr r8, r26 + bl CalculateTimeslice + +major_0x0d35c_0x198 + mr r8, r26 + bl major_0x14af8 + +major_0x0d35c_0x1a0 + mtlr r27 + blr + + + + DeclareMPCall 52, MPCall_52 + +MPCall_52 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, EventGroup.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r16, 0x0010(r31) + cmpwi r16, 0x00 + beq- MPCall_52_0xc0 + mr r4, r16 + li r16, 0x00 + stw r16, 0x0010(r31) + lwz r16, 0x0018(r31) + lwz r17, 0x0658(r1) + rlwinm. r18, r16, 0, 27, 27 + rlwinm r16, r16, 2, 26, 29 + +; r1 = kdp + beq+ ReleaseAndReturnZeroFromMPCall + lwz r18, 0x00c8(r17) + lwz r9, 0x0634(r1) + cmpwi r18, 0x00 + add r18, r18, r9 + bne- MPCall_52_0x84 + lwz r18, 0x00d0(r17) + cmpw r18, r3 + li r18, 0x00 + +; r1 = kdp + bne+ ReleaseAndReturnZeroFromMPCall + stw r18, 0x00d0(r17) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_52_0x84 + lwzx r19, r16, r18 + cmpw r19, r3 + li r19, 0x00 + +; r1 = kdp + bne+ ReleaseAndReturnZeroFromMPCall + stwx r19, r16, r18 + li r19, 0x1c + li r9, 0x04 + +MPCall_52_0xa0 + lwzx r8, r19, r18 + cmpwi r8, 0x00 + bne- MPCall_52_0xb4 + subf. r19, r9, r19 + bgt+ MPCall_52_0xa0 + +MPCall_52_0xb4 + srwi r19, r19, 2 + stw r19, 0x00d0(r17) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_52_0xc0 + mfsprg r30, 0 + cmpwi r5, 0x00 + lwz r19, -0x0008(r30) + beq+ ReleaseAndTimeoutMPCall + lwz r16, 0x0064(r19) + rlwinm. r16, r16, 0, 15, 15 + beq- MPCall_52_0xe4 + stw r3, -0x0410(r1) + b ReleaseAndReturnMPCallBlueBlocking + +MPCall_52_0xe4 + mr r8, r19 + bl major_0x13e4c + lwz r19, -0x0008(r30) + addi r16, r31, 0x00 + addi r17, r19, 0x08 + stw r16, 0x0000(r17) + stw r16, 0x0008(r17) + lwz r18, 0x000c(r16) + stw r18, 0x000c(r17) + stw r17, 0x0008(r18) + stw r17, 0x000c(r16) + lwz r18, 0x001c(r31) + addi r18, r18, 0x01 + stw r18, 0x001c(r31) + lis r16, 0x7fff + ori r16, r16, 0xffff + addi r30, r19, 0x20 + cmpw r5, r16 + li r16, 0x02 + beq- MPCall_52_0x170 + stb r16, 0x0014(r30) + stw r19, 0x0018(r30) + mr r8, r5 + +; r1 = kdp +; r8 = multiple (pos: /250; neg: /250000) + bl TimebaseTicksPerPeriod +; r8 = hi +; r9 = lo + + mr r27, r8 + mr r28, r9 + bl GetTime + mfxer r16 + addc r9, r9, r28 + adde r8, r8, r27 + mtxer r16 + stw r8, 0x0038(r30) + stw r9, 0x003c(r30) + mr r8, r30 + bl called_by_init_tmrqs + +MPCall_52_0x170 + b AlternateMPCallReturnPath + + + + DeclareMPCall 53, MPCall_53 + +MPCall_53 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, EventGroup.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r16, 0x0010(r31) + cmpwi r16, 0x00 + beq+ ReleaseAndTimeoutMPCall + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 54, MPCall_54 + +MPCall_54 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + bl LookupID + cmpwi r9, EventGroup.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + + mr r31, r8 + li r17, 1 + + cmpwi r4, 0 + cmplwi cr1, r4, 8 + + lwz r16, 0x0018(r31) + + beq- @use_1 + bgt- cr1, @use_1 + + mr r17, r4 +@use_1 + + ; r17 = 1 if outside 1-8 (inc) range + + ori r16, r16, 0x10 + rlwimi r16, r17, 0, 28, 31 + stw r16, 0x0018(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 40, MPCall_40 + +MPCall_40 ; OUTSIDE REFERER + li r8, 0x40 + +; r1 = kdp +; r8 = size + bl PoolAlloc +; r8 = ptr + + mr. r31, r8 + beq+ major_0x0af60_0x20 + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r31 + li r9, 0x03 + +; r1 = kdp +; r9 = kind + bl MakeID + cmpwi r8, 0x00 + bne- MPCall_40_0x48 + mr r8, r31 + bl PoolFree + b major_0x0af60 + +MPCall_40_0x48 + mfsprg r30, 0 + stw r8, 0x0000(r31) + lwz r30, -0x0008(r30) + mr r4, r8 + lwz r17, 0x0060(r30) + stw r17, 0x0010(r31) + bl GetTime + stw r8, 0x0038(r31) + stw r9, 0x003c(r31) + lis r17, 0x5449 + ori r17, r17, 0x4d45 + stw r17, 0x0004(r31) + li r17, 0x03 + stb r17, 0x0014(r31) + li r17, 0x00 + stb r17, 0x0016(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 41, MPCall_41 + +MPCall_41 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Timer.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r8, r3 + bl DeleteID + lwz r16, 0x0008(r31) + cmpwi r16, 0x00 + beq- MPCall_41_0x48 + mr r8, r31 + bl major_0x136c8 + +MPCall_41_0x48 + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, MPCall_41_0x64 + mflr r16 + bl panic + +MPCall_41_0x64 + stw r16, PSA.SchLock + Lock.Count(r1) + lwz r8, 0x001c(r31) + cmpwi r8, 0x00 + bnel- PoolFree + mr r8, r31 + bl PoolFree + b ReturnZeroFromMPCall + + + + DeclareMPCall 30, MPCall_30 + +MPCall_30 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Timer.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + lbz r16, 0x0014(r31) + cmpwi r16, 0x03 + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r8, r4 + +; r8 = id + bl LookupID + cmpwi r9, Semaphore.kIDClass + + cmpwi cr2, r9, 0x04 + beq- MPCall_30_0x80 + cmpwi r9, 0x09 + beq- cr2, MPCall_30_0x64 + bne+ ReleaseAndReturnMPCallInvalidIDErr + stw r4, 0x002c(r31) + stw r5, 0x0030(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_30_0x64 + stw r4, 0x0018(r31) + lwz r16, 0x0134(r6) + lwz r17, 0x013c(r6) + stw r5, 0x0020(r31) + stw r16, 0x0024(r31) + stw r17, 0x0028(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_30_0x80 + stw r4, 0x0034(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 31, MPCall_31 + +MPCall_31 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Timer.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + lbz r16, 0x0014(r31) + cmpwi r16, 0x03 + bne+ ReleaseAndReturnMPCallInvalidIDErr + lwz r16, 0x0008(r31) + cmpwi r16, 0x00 + mr r8, r31 + beq- MPCall_31_0x4c + bl major_0x136c8 + +MPCall_31_0x4c + lwz r9, 0x001c(r31) + lwz r8, 0x0018(r31) + cmpwi r9, 0x00 + cmpwi cr1, r8, 0x00 + bne- MPCall_31_0x9c + beq- cr1, MPCall_31_0x9c + +; r8 = id + bl LookupID + cmpwi r9, Queue.kIDClass + + bne- MPCall_31_0x9c + lwz r9, 0x0024(r8) + li r8, 0x1c + cmpwi r9, 0x00 + bne- MPCall_31_0x9c + +; r1 = kdp +; r8 = size + bl PoolAlloc +; r8 = ptr + + mr. r30, r8 + beq+ major_0x0af60 + lis r8, 0x6e6f + ori r8, r8, 0x7465 + stw r8, 0x0004(r30) + stw r30, 0x001c(r31) + +MPCall_31_0x9c + lwz r16, 0x0134(r6) + rlwinm. r9, r16, 0, 29, 29 + mr r8, r4 + beq- MPCall_31_0xb8 + +; r1 = kdp +; r8 = multiple (pos: /250; neg: /250000) + bl TimebaseTicksPerPeriod +; r8 = hi +; r9 = lo + + mr r4, r8 + mr r5, r9 + +MPCall_31_0xb8 + lwz r16, 0x0134(r6) + rlwinm. r8, r16, 0, 30, 30 + mfxer r17 + beq- MPCall_31_0xdc + lwz r19, 0x003c(r31) + lwz r18, 0x0038(r31) + addc r5, r5, r19 + adde r4, r4, r18 + mtxer r17 + +MPCall_31_0xdc + stw r4, 0x0038(r31) + stw r5, 0x003c(r31) + lwz r16, 0x0134(r6) + clrlwi. r16, r16, 0x1f + li r17, 0x00 + beq- MPCall_31_0xf8 + li r17, 0x01 + +MPCall_31_0xf8 + stb r17, 0x0016(r31) + mr r8, r31 + bl called_by_init_tmrqs + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 32, MPCall_32 + +MPCall_32 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Timer.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + lbz r16, 0x0017(r31) + cmpwi r16, 0x01 + bne- MPCall_32_0x58 + lwz r4, 0x0038(r31) + lwz r5, 0x003c(r31) + bl GetTime + mfxer r16 + subfc r5, r9, r5 + subfe. r4, r8, r4 + mtxer r16 + bge+ MPCall_32_0x60 + +MPCall_32_0x58 + li r4, 0x00 + li r5, 0x00 + +MPCall_32_0x60 + lwz r16, 0x0008(r31) + cmpwi r16, 0x00 + mr r8, r31 + beq- MPCall_32_0x74 + bl major_0x136c8 + +MPCall_32_0x74 +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 64, MPCall_64 + +MPCall_64 ; OUTSIDE REFERER + li r8, 0x28 + +; r1 = kdp +; r8 = size + bl PoolAlloc +; r8 = ptr + + mr. r31, r8 + beq+ major_0x0af60_0x20 + lis r16, 0x4b4e + ori r16, r16, 0x4f54 + stw r16, 0x0004(r31) + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + li r9, 0x0c + +; r1 = kdp +; r9 = kind + bl MakeID + cmpwi r8, 0x00 + bne+ MPCall_64_0x50 + mr r8, r31 + bl PoolFree + b major_0x0af60 + +MPCall_64_0x50 + mfsprg r30, 0 + lwz r30, -0x0008(r30) + stw r8, 0x0000(r31) + lwz r17, 0x0060(r30) + stw r17, 0x0008(r31) + mr r4, r8 + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 65, MPCall_65 + +MPCall_65 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Notification.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r8, r31 + bl PoolFree + mr r8, r3 + bl DeleteID + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 67, MPCall_67 + +MPCall_67 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Notification.kIDClass + + mr r30, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + bl major_0x0db04 + mr r3, r8 + b ReleaseAndReturnMPCall + + + +; major_0x0db04 + +; Xrefs: +; major_0x02ccc +; IntPerfMonitor +; IntThermalEvent +; MPCall_67 +; major_0x102c8 +; CommonPIHPath + +major_0x0db04 ; OUTSIDE REFERER + mflr r29 + lwz r16, 0x000c(r30) + lwz r17, 0x0024(r30) + cmplwi r16, 0x00 + cmplwi cr1, r17, 0x00 + bne- major_0x0db04_0x28 + bne- cr1, major_0x0db04_0x28 + lwz r18, 0x001c(r30) + cmplwi r18, 0x00 + beq- major_0x0db04_0xf0 + +major_0x0db04_0x28 + lwz r8, 0x000c(r30) + cmplwi r8, 0x00 + beq- major_0x0db04_0x94 + +; r8 = id + bl LookupID + cmpwi r9, Queue.kIDClass + + mr r31, r8 + bne- major_0x0db04_0xfc + lwz r16, 0x0024(r31) + cmpwi r16, 0x00 + lwz r17, 0x0028(r31) + beq- major_0x0db04_0x68 + mr. r8, r17 + lwz r17, 0x0008(r17) + beq- major_0x0db04_0xf0 + stw r17, 0x0028(r31) + b major_0x0db04_0x78 + +major_0x0db04_0x68 + li r8, 0x1c + bl PoolAlloc_with_crset + cmpwi r8, 0x00 + beq- major_0x0db04_0xe4 + +major_0x0db04_0x78 + lwz r16, 0x0010(r30) + lwz r17, 0x0014(r30) + lwz r18, 0x0018(r30) + stw r16, 0x0010(r8) + stw r17, 0x0014(r8) + stw r18, 0x0018(r8) + bl major_0x0c8b4 + +major_0x0db04_0x94 + lwz r8, 0x0024(r30) + cmplwi r8, 0x00 + beq- major_0x0db04_0xb4 + +; r8 = id + bl LookupID + cmpwi r9, Semaphore.kIDClass + + mr r31, r8 + bne- major_0x0db04_0xfc + bl major_0x0ccf4 + +major_0x0db04_0xb4 + lwz r8, 0x001c(r30) + cmplwi r8, 0x00 + beq- major_0x0db04_0xd8 + +; r8 = id + bl LookupID + cmpwi r9, EventGroup.kIDClass + + mr r31, r8 + bne- major_0x0db04_0xfc + lwz r8, 0x0020(r30) + bl major_0x0d35c + +major_0x0db04_0xd8 + mtlr r29 + li r8, 0x00 + blr + +major_0x0db04_0xe4 + mtlr r29 + li r8, -0x726e + blr + +major_0x0db04_0xf0 + mtlr r29 + li r8, -0x7272 + blr + +major_0x0db04_0xfc + mtlr r29 + li r8, -0x7273 + blr + + + + DeclareMPCall 66, MPCall_66 + +MPCall_66 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Notification.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r8, r4 + +; r8 = id + bl LookupID + cmpwi r9, Semaphore.kIDClass + + cmpwi cr2, r9, 0x04 + beq- MPCall_66_0x74 + cmpwi r9, 0x09 + beq- cr2, MPCall_66_0x58 + bne+ ReleaseAndReturnMPCallInvalidIDErr + stw r4, 0x001c(r31) + stw r5, 0x0020(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_66_0x58 + stw r4, 0x000c(r31) + lwz r16, 0x0134(r6) + lwz r17, 0x013c(r6) + stw r5, 0x0010(r31) + stw r16, 0x0014(r31) + stw r17, 0x0018(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_66_0x74 + stw r4, 0x0024(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 128, MPCall_128 + +MPCall_128 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Notification.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + cmpwi r4, 0x04 + cmpwi cr1, r4, 0x09 + beq- MPCall_128_0x40 + beq- cr1, MPCall_128_0x58 + b major_0x0b054 + +MPCall_128_0x40 + lwz r16, 0x0134(r6) + lwz r17, 0x013c(r6) + stw r5, 0x0010(r31) + stw r16, 0x0014(r31) + stw r17, 0x0018(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_128_0x58 + stw r5, 0x0020(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; major_0x0dce8 + +; Xrefs: +; major_0x02ccc +; MPCall_16 +; major_0x0c8b4 +; major_0x0ccf4 +; MPCall_21 +; MPCall_28 +; MPCall_26 +; MPCall_50 +; major_0x0d35c + +major_0x0dce8 ; OUTSIDE REFERER + lwz r9, -0x0410(r1) + lwz r19, -0x08f0(r1) + cmpw r8, r9 + bnelr- + li r9, -0x01 + mflr r24 + stw r9, -0x0410(r1) + lbz r17, 0x0018(r19) + cmpwi r17, 0x00 + addi r16, r19, 0x08 + bne- major_0x0dce8_0x70 + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + lbz r17, 0x0037(r19) + cmpwi r17, 0x01 + bne- major_0x0dce8_0x60 + addi r8, r19, 0x20 + bl major_0x136c8 + lwz r19, -0x08f0(r1) + +major_0x0dce8_0x60 + li r16, 0x01 + stb r16, 0x0019(r19) + lwz r8, -0x08f0(r1) + bl TaskReadyAsPrev + +major_0x0dce8_0x70 + lwz r8, -0x08f0(r1) + mtlr r24 + b major_0x14af8 + + + + DeclareMPCall 120, MPCall_120 + +MPCall_120 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID +; r8 = something not sure what +; r9 = 0:inval, 1:proc, 2:task, 3:timer, 4:q, 5:sema, 6:cr, 7:cpu, 8:addrspc, 9:evtg, 10:cohg, 11:area, 12:not, 13:log + + mr r31, r8 + cmpwi r9, 0x05 + cmpwi cr1, r9, 0x04 + beq- MPCall_120_0x33c + beq- cr1, MPCall_120_0x248 + cmpwi r9, 0x09 + cmpwi cr1, r9, 0x06 + beq- MPCall_120_0x1b4 + beq- cr1, MPCall_120_0x10c + cmpwi r9, 0x0c + cmpwi cr1, r9, 0x08 + beq- MPCall_120_0x58 + beq- cr1, MPCall_120_0x3d8 + b major_0x0b054 + +MPCall_120_0x58 + lis r8, 0x0c + ori r8, r8, 0x01 + cmpw r8, r4 + bne+ major_0x0b054 + cmplwi r5, 0x00 + bne- MPCall_120_0xa0 + lis r16, 0x0c + ori r16, r16, 0x01 + stw r16, 0x0134(r6) + lwz r16, 0x0008(r31) + stw r16, 0x013c(r6) + lwz r16, 0x0004(r31) + stw r16, 0x0144(r6) + lwz r16, 0x000c(r31) + stw r16, 0x014c(r6) + li r16, 0x10 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0xa0 + cmplwi r5, 0x10 + bne- MPCall_120_0xd4 + lwz r16, 0x0010(r31) + stw r16, 0x0134(r6) + lwz r16, 0x0014(r31) + stw r16, 0x013c(r6) + lwz r16, 0x0018(r31) + stw r16, 0x0144(r6) + lwz r16, 0x001c(r31) + stw r16, 0x014c(r6) + li r16, 0x10 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0xd4 + cmplwi r5, 0x20 + bne- MPCall_120_0xf8 + lwz r16, 0x0020(r31) + stw r16, 0x0134(r6) + lwz r16, 0x0024(r31) + stw r16, 0x013c(r6) + li r16, 0x08 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0xf8 + cmpwi r5, 0x28 + bne+ major_0x0b054 + li r16, 0x00 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0x10c + lis r8, 0x06 + ori r8, r8, 0x01 + cmpw r8, r4 + bne+ major_0x0b054 + cmplwi r5, 0x00 + bne- MPCall_120_0x154 + lis r16, 0x06 + ori r16, r16, 0x01 + stw r16, 0x0134(r6) + lwz r16, 0x0010(r31) + stw r16, 0x013c(r6) + lwz r16, 0x0004(r31) + stw r16, 0x0144(r6) + lwz r16, 0x0020(r31) + stw r16, 0x014c(r6) + li r16, 0x10 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0x154 + cmplwi r5, 0x10 + bne- MPCall_120_0x1a0 + addi r17, r31, 0x00 + lwz r18, 0x0008(r31) + li r16, 0x00 + cmpw r17, r18 + beq- MPCall_120_0x174 + lwz r16, -0x0008(r18) + +MPCall_120_0x174 + stw r16, 0x0134(r6) + lwz r16, 0x0018(r31) + cmpwi r16, 0x00 + beq- MPCall_120_0x188 + lwz r16, 0x0000(r16) + +MPCall_120_0x188 + stw r16, 0x013c(r6) + lwz r16, 0x0014(r31) + stw r16, 0x0144(r6) + li r16, 0x0c + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0x1a0 + cmpwi r5, 0x1c + bne+ major_0x0b054 + li r16, 0x00 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0x1b4 + lis r8, 0x09 + ori r8, r8, 0x01 + cmpw r8, r4 + bne+ major_0x0b054 + cmplwi r5, 0x00 + bne- MPCall_120_0x1fc + lis r16, 0x09 + ori r16, r16, 0x01 + stw r16, 0x0134(r6) + lwz r16, 0x0014(r31) + stw r16, 0x013c(r6) + lwz r16, 0x0004(r31) + stw r16, 0x0144(r6) + lwz r16, 0x001c(r31) + stw r16, 0x014c(r6) + li r16, 0x10 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0x1fc + cmplwi r5, 0x10 + bne- MPCall_120_0x234 + addi r17, r31, 0x00 + lwz r18, 0x0008(r31) + li r16, 0x00 + cmpw r17, r18 + beq- MPCall_120_0x21c + lwz r16, -0x0008(r18) + +MPCall_120_0x21c + stw r16, 0x0134(r6) + lwz r16, 0x0010(r31) + stw r16, 0x013c(r6) + li r16, 0x08 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0x234 + cmpwi r5, 0x18 + bne+ major_0x0b054 + li r16, 0x00 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0x248 + lis r8, 0x04 + ori r8, r8, 0x01 + cmpw r8, r4 + bne+ major_0x0b054 + cmplwi r5, 0x00 + bne- MPCall_120_0x290 + lis r16, 0x04 + ori r16, r16, 0x01 + stw r16, 0x0134(r6) + lwz r16, 0x0020(r31) + stw r16, 0x013c(r6) + lwz r16, 0x0004(r31) + stw r16, 0x0144(r6) + lwz r16, 0x002c(r31) + stw r16, 0x014c(r6) + li r16, 0x10 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0x290 + cmplwi r5, 0x10 + bne- MPCall_120_0x2ec + addi r17, r31, 0x00 + lwz r18, 0x0008(r31) + li r16, 0x00 + cmpw r17, r18 + beq- MPCall_120_0x2b0 + lwz r16, -0x0008(r18) + +MPCall_120_0x2b0 + stw r16, 0x0134(r6) + lwz r16, 0x0030(r31) + stw r16, 0x013c(r6) + lwz r16, 0x0024(r31) + stw r16, 0x0144(r6) + lwz r18, 0x0018(r31) + addi r17, r31, 0x10 + li r16, 0x00 + cmpw r17, r18 + beq- MPCall_120_0x2dc + lwz r16, 0x0010(r18) + +MPCall_120_0x2dc + stw r16, 0x014c(r6) + li r16, 0x10 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0x2ec + cmplwi r5, 0x20 + bne- MPCall_120_0x328 + lwz r18, 0x0018(r31) + addi r17, r31, 0x10 + li r16, 0x00 + cmpw r17, r18 + li r17, 0x00 + beq- MPCall_120_0x314 + lwz r16, 0x0014(r18) + lwz r17, 0x0018(r18) + +MPCall_120_0x314 + stw r16, 0x0134(r6) + stw r17, 0x013c(r6) + li r16, 0x08 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0x328 + cmpwi r5, 0x28 + bne+ major_0x0b054 + li r16, 0x00 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0x33c + lis r8, 0x05 + ori r8, r8, 0x01 + cmpw r8, r4 + bne+ major_0x0b054 + cmplwi r5, 0x00 + bne- MPCall_120_0x384 + lis r16, 0x05 + ori r16, r16, 0x01 + stw r16, 0x0134(r6) + lwz r16, 0x0018(r31) + stw r16, 0x013c(r6) + lwz r16, 0x0004(r31) + stw r16, 0x0144(r6) + lwz r16, 0x001c(r31) + stw r16, 0x014c(r6) + li r16, 0x10 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0x384 + cmplwi r5, 0x10 + bne- MPCall_120_0x3c4 + addi r17, r31, 0x00 + lwz r18, 0x0008(r31) + li r16, 0x00 + cmpw r17, r18 + beq- MPCall_120_0x3a4 + lwz r16, -0x0008(r18) + +MPCall_120_0x3a4 + stw r16, 0x0134(r6) + lwz r16, 0x0014(r31) + stw r16, 0x013c(r6) + lwz r16, 0x0010(r31) + stw r16, 0x0144(r6) + li r16, 0x0c + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0x3c4 + cmpwi r5, 0x1c + bne+ major_0x0b054 + li r16, 0x00 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0x3d8 + lis r8, 0x08 + ori r8, r8, 0x01 + cmpw r8, r4 + bne+ major_0x0b054 + cmplwi r5, 0x00 + bne- MPCall_120_0x420 + lis r16, 0x08 + ori r16, r16, 0x01 + stw r16, 0x0134(r6) + lwz r16, 0x0074(r31) + stw r16, 0x013c(r6) + lwz r16, 0x0070(r31) + stw r16, 0x0144(r6) + lwz r16, 0x000c(r31) + stw r16, 0x014c(r6) + li r16, 0x10 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0x420 + cmplwi r5, 0x10 + bne- MPCall_120_0x454 + lwz r16, 0x0030(r31) + stw r16, 0x0134(r6) + lwz r16, 0x0034(r31) + stw r16, 0x013c(r6) + lwz r16, 0x0038(r31) + stw r16, 0x0144(r6) + lwz r16, 0x003c(r31) + stw r16, 0x014c(r6) + li r16, 0x10 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0x454 + cmplwi r5, 0x20 + bne- MPCall_120_0x488 + lwz r16, 0x0040(r31) + stw r16, 0x0134(r6) + lwz r16, 0x0044(r31) + stw r16, 0x013c(r6) + lwz r16, 0x0048(r31) + stw r16, 0x0144(r6) + lwz r16, 0x004c(r31) + stw r16, 0x014c(r6) + li r16, 0x10 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0x488 + cmplwi r5, 0x30 + bne- MPCall_120_0x4bc + lwz r16, 0x0050(r31) + stw r16, 0x0134(r6) + lwz r16, 0x0054(r31) + stw r16, 0x013c(r6) + lwz r16, 0x0058(r31) + stw r16, 0x0144(r6) + lwz r16, 0x005c(r31) + stw r16, 0x014c(r6) + li r16, 0x10 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0x4bc + cmplwi r5, 0x40 + bne- MPCall_120_0x4f0 + lwz r16, 0x0060(r31) + stw r16, 0x0134(r6) + lwz r16, 0x0064(r31) + stw r16, 0x013c(r6) + lwz r16, 0x0068(r31) + stw r16, 0x0144(r6) + lwz r16, 0x006c(r31) + stw r16, 0x014c(r6) + li r16, 0x10 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_120_0x4f0 + cmpwi r5, 0x50 + bne+ major_0x0b054 + li r16, 0x00 + stw r16, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall diff --git a/NanoKernel/NKRTASCalls.s b/NanoKernel/NKRTASCalls.s new file mode 100644 index 0000000..8cca070 --- /dev/null +++ b/NanoKernel/NKRTASCalls.s @@ -0,0 +1,190 @@ +Local_Panic set * + b panic + + + +; kcRTASDispatch + +; Only major that hits the RTAS globals. +; RTAS requires some specific context stuff. + +; Xrefs: +; "sup" + +; > r1 = kdp +; > r6 = some kind of place +; > r7 = some kind of flags + + align 5 + +kcRTASDispatch ; OUTSIDE REFERER + lwz r8, 0x0908(r1) + cmpwi r8, 0x00 + bne- rtas_is_available + li r3, -0x01 + b skeleton_key + +rtas_is_available + + _Lock PSA.RTASLock, scratch1=r8, scratch2=r9 + + mtcrf 0x3f, r7 + lwz r9, 0x0658(r1) + lwz r8, -0x000c(r1) + stw r7, 0x0000(r6) + stw r8, 0x0004(r6) + bns- cr6, kcRTASDispatch_0x5c + stw r17, 0x0024(r6) + stw r20, 0x0028(r6) + stw r21, 0x002c(r6) + stw r19, 0x0034(r6) + stw r18, 0x003c(r6) + lmw r14, 0x0038(r1) + +kcRTASDispatch_0x5c + mfxer r8 + stw r13, 0x00dc(r6) + stw r8, 0x00d4(r6) + stw r12, 0x00ec(r6) + mfctr r8 + stw r10, 0x00fc(r6) + stw r8, 0x00f4(r6) + ble- cr3, kcRTASDispatch_0x8c + lwz r8, 0x00c4(r9) + mfspr r12, mq + mtspr mq, r8 + stw r12, 0x00c4(r6) + +kcRTASDispatch_0x8c + lwz r8, 0x0004(r1) + stw r8, 0x010c(r6) + stw r2, 0x0114(r6) + stw r3, 0x011c(r6) + stw r4, 0x0124(r6) + lwz r8, 0x0018(r1) + stw r5, 0x012c(r6) + stw r8, 0x0134(r6) + andi. r8, r11, 0x2000 + stw r14, 0x0174(r6) + stw r15, 0x017c(r6) + stw r16, 0x0184(r6) + stw r17, 0x018c(r6) + stw r18, 0x0194(r6) + stw r19, 0x019c(r6) + stw r20, 0x01a4(r6) + stw r21, 0x01ac(r6) + stw r22, 0x01b4(r6) + stw r23, 0x01bc(r6) + stw r24, 0x01c4(r6) + stw r25, 0x01cc(r6) + stw r26, 0x01d4(r6) + stw r27, 0x01dc(r6) + stw r28, 0x01e4(r6) + stw r29, 0x01ec(r6) + stw r30, 0x01f4(r6) + stw r31, 0x01fc(r6) + bnel+ major_0x03e18_0xb4 + stw r11, 0x00a4(r6) + mr r27, r3 + addi r29, r1, 800 + bl PagingFunc3 + beql+ Local_Panic + rlwimi r3, r31, 0, 0, 19 + lhz r8, 0x0004(r3) + cmpwi r8, 0x00 + beq- kcRTASDispatch_0x14c + slwi r8, r8, 2 + lwzx r27, r8, r3 + addi r29, r1, 800 + bl PagingFunc3 + beql+ Local_Panic + lwzx r9, r8, r3 + rlwimi r9, r31, 0, 0, 19 + stwx r9, r8, r3 + li r9, 0x00 + sth r9, 0x0004(r3) + dcbf r8, r3 + +kcRTASDispatch_0x14c + li r9, 0x04 + dcbf r9, r3 + sync + isync + lwz r4, 0x090c(r1) + mfmsr r8 + andi. r8, r8, 0x10cf + mtmsr r8 + isync + mr r28, r3 + lwz r9, 0x0908(r1) + bl rtas_make_actual_call + mfsprg r1, 0 + lwz r6, -0x0014(r1) + clrlwi r29, r28, 0x14 + subfic r29, r29, 0x1000 + lhz r27, 0x0f4a(r1) + +kcRTASDispatch_0x190 + subf. r29, r27, r29 + dcbf r29, r28 + sync + icbi r29, r28 + bge+ kcRTASDispatch_0x190 + sync + isync + lwz r8, 0x0000(r6) + lwz r11, 0x00a4(r6) + mr r7, r8 + andi. r8, r11, 0x900 + lwz r8, 0x0004(r6) + lwz r13, 0x00dc(r6) + stw r8, -0x000c(r1) + lwz r8, 0x00d4(r6) + lwz r12, 0x00ec(r6) + mtxer r8 + lwz r8, 0x00f4(r6) + lwz r10, 0x00fc(r6) + mtctr r8 + bnel+ major_0x03e18_0x8 + lwz r8, 0x010c(r6) + stw r8, 0x0004(r1) + lwz r2, 0x0114(r6) + lwz r3, 0x011c(r6) + lwz r4, 0x0124(r6) + lwz r8, 0x0134(r6) + lwz r5, 0x012c(r6) + stw r8, 0x0018(r1) + lwz r14, 0x0174(r6) + lwz r15, 0x017c(r6) + lwz r16, 0x0184(r6) + lwz r17, 0x018c(r6) + lwz r18, 0x0194(r6) + lwz r19, 0x019c(r6) + lwz r20, 0x01a4(r6) + lwz r21, 0x01ac(r6) + lwz r22, 0x01b4(r6) + lwz r23, 0x01bc(r6) + lwz r24, 0x01c4(r6) + lwz r25, 0x01cc(r6) + lwz r26, 0x01d4(r6) + lwz r27, 0x01dc(r6) + lwz r28, 0x01e4(r6) + lwz r29, 0x01ec(r6) + lwz r30, 0x01f4(r6) + lwz r31, 0x01fc(r6) + sync + lwz r8, -0x0b10(r1) + cmpwi cr1, r8, 0x00 + li r8, 0x00 + bne+ cr1, kcRTASDispatch_0x268 + mflr r8 + bl panic + +kcRTASDispatch_0x268 + stw r8, -0x0b10(r1) + li r3, 0x00 + b skeleton_key + +rtas_make_actual_call + mtctr r9 + bctr diff --git a/NanoKernel/NKReplacementInit.s b/NanoKernel/NKReplacementInit.s new file mode 100644 index 0000000..2d173be --- /dev/null +++ b/NanoKernel/NKReplacementInit.s @@ -0,0 +1,480 @@ +; sprg0 = old KDP/EWA/r1 ptr +; r3 = PA_NanoKernelCode +; r4 = physical base of our global area +; r5 = NoIdeaR23 +; r6 = PA_EDP or zero? +; r7 = probably ROMHeader.ROMRelease ('rom vers', e.g. 0x10B5 is 1.0§5) + + +InitReplacement + + crset cr5_eq + + + li r0, 0 + + + +; Position and initialise the kernel globals, IRP to KDP inclusive. +; (subset of builtin kernel) + + ; Zero from IRP (r4) to KDP (r4 + 10 pages) + + lisori r12, kKDPfromIRP + mr r13, r4 +@wipeloop + subic. r12, r12, 4 + stwx r0, r13, r12 + bgt+ @wipeloop + + + ; Copy the old KDP to r4 + 10 pages. + ; (r1 becomes our main ptr and r4 is discarded) + + mfsprg r11, 0 + lisori r1, kKDPfromIRP + add r1, r1, r4 + + li r12, 4096 +@kdp_copyloop + subic. r12, r12, 4 + lwzx r10, r11, r12 + stwx r10, r1, r12 + bgt+ @kdp_copyloop + + + ; IRP goes at the base of the area we were given. + ; Fill with repeating pattern and point EWA at it. + + lisori r12, -kKDPfromIRP + add r12, r12, r1 + stw r12, EWA.PA_IRP(r1) + bl InitIRP ; clobbers r10 and r12 + + + +; Play with some of the other values we were given + + ; Leave ROMRelease in r23. + + mr r23, r7 + + ; If no EDP (Emulator Data Page) pointer was provided, + ; then put the EDP above our new KDP. + + cmpwi r6, 0 + stw r11, KDP.OldKDP(r1) + stw r9, 0x05a4(r1) + + + ; discarded + + bne- @emulatordata_ptr_provided + addi r6, r1, 0x1000 +@emulatordata_ptr_provided + + + + ; Save a few bits + + stw r6, 0x05a8(r1) + stw r3, KDP.PA_NanoKernelCode(r1) + stw r5, PSA.NoIdeaR23(r1) + stw r1, EWA.PA_KDP(r1) + + addi r12, r1, -0x340 ; get the base of the main CPU struct + li r10, -1 + stw r10, CPU.ID(r12) + + lwz r3, KDP.PA_ConfigInfo(r1) + + bl LookupInterruptHandler + stw r7, KDP.PA_InterruptHandler(r1) + + + +; Clearly changed our mind about where we might be. + + bl @x +@x mflr r12 + subi r12, r12, @x - NKTop + + stw r12, KDP.PA_NanoKernelCode(r1) + + +; FDP + + llabel r10, FDP + add r12, r10, r12 + stw r12, KDP.PA_FDP(r1) + + +; Do something terrible with the CPU features + + lwz r12, -0x0010(r1) + li r10, 0x00 + rlwimi r10, r12, 0, 12, 15 + rlwimi r10, r12, 0, 28, 30 + stw r10, -0x0968(r1) + + +; Cook up a MSR: +; MSR_EE = 1 +; MSR_PR = 1 +; MSR_FP = 0 +; MSR_ME = 0 +; MSR_FE0 = 0 +; MSR_SE = 0 +; MSR_BE = 0 +; MSR_FE1 = 0 +; MSR_IP = preserved +; MSR_IR = 1 +; MSR_DR = 1 +; MSR_RI = 0 +; MSR_LE = 0 + + mfmsr r12 + andi. r12, r12, 0x0040 + ori r12, r12, 0xd032 + stw r12, PSA.UserModeMSR(r1) + + + +; Set SPRG0 (for this CPU at least) + + mtsprg 0, r1 + + +; r11 still contains the OLD EWA ptr (which is also KDP/PSA ptr?) + + lhz r12, KDP.InfoRecord + InfoRecord.NKNanoKernelInfoVer(r11) + cmpwi r12, 0x0101 + + bgt- @replaces_later_than_0101 + + ; + lwz r12, KDP.PA_ECB_Old(r1) + stw r12, EWA.PA_ContextBlock(r1) + + lwz r12, 0x660(r1) + oris r12, r12, 0x20 + stw r12, EWA.Flags(r1) + + lwz r12, 0x0664(r1) + stw r12, -0x000c(r1) ; boy, better figure out what this is + + b @endif +@replaces_later_than_0101 + + ; Obviously cannot replace a v2 NanoKernel like myself + cmpwi r12, 0x0200 + bge- CancelReplacement + + lwz r12, EWA.PA_ContextBlock(r11) + stw r12, EWA.PA_ContextBlock(r1) + + lwz r12, EWA.Flags(r11) + oris r12, r12, 0x20 + stw r12, EWA.Flags(r1) + + lwz r12, -0x000c(r11) + stw r12, -0x000c(r1) + +@endif + + + + lwz r12, 0x0340(r11) + lwz r10, 0x05b4(r11) + cmpw r12, r10 + + beq- replace_old_kernel_0x198 + stw r12, 0x05b4(r1) + stw r0, 0x06b4(r1) + lwz r10, 0x05b0(r11) + stw r10, 0x06c0(r1) + lwz r10, 0x05b4(r11) + stw r10, 0x06c4(r1) + lwz r10, 0x05b8(r11) + stw r10, 0x06c8(r1) + lwz r10, 0x05bc(r11) + stw r10, 0x06cc(r1) + stw r0, 0x06d0(r1) + stw r0, 0x06d4(r1) + stw r0, 0x06d8(r1) + stw r0, 0x06dc(r1) + stw r0, 0x06e0(r1) + stw r0, 0x06e4(r1) + stw r0, 0x06e8(r1) + stw r0, 0x06ec(r1) + stw r0, 0x06f0(r1) + stw r0, 0x06f4(r1) + stw r0, 0x06f8(r1) + stw r0, 0x06fc(r1) +replace_old_kernel_0x198 + + + +; Adjust a few KDP pointers to point into the new KDP + + lwz r12, KDP.PA_PageMapStart(r1) + subf r12, r11, r12 + add r12, r12, r1 + stw r12, KDP.PA_PageMapStart(r1) + + lwz r12, KDP.PA_PageMapEnd(r1) + subf r12, r11, r12 + add r12, r12, r1 + stw r12, KDP.PA_PageMapEnd(r1) + + lwz r12, 0x05e8(r1) + subf r12, r11, r12 + add r12, r12, r1 + stw r12, 0x05e8(r1) + + + +; Wipe KDP's NKInfo and ProcessorInfo + + li r12, 0x200 + addi r10, r1, KDP.NanoKernelInfo + +@wipeloop + subic. r12, r12, 4 + stwx r0, r10, r12 + bgt+ @wipeloop + + + + + ; r9 = physical base of kernel + li r12, 0 + addi r10, r1, KDP.InfoRecord + + bl MoveRecord ; (NanoKernelCode, NewKDPInfoRecord, OldKDP, 0) + + stw r10, KDP.InfoRecord + InfoRecord.InfoRecordPtr(r1) + stw r0, KDP.InfoRecord + InfoRecord.Zero(r1) + + + + lhz r12, KDP.InfoRecord + InfoRecord.NKProcessorStateLen(r1) + addi r10, r1, PSA.ProcessorState + lwz r9, KDP.InfoRecord + InfoRecord.NKProcessorStatePtr(r1) + + bl MoveRecord ; (OldProcessorState, NewPSAProcessorState, OldKDP, ProcessorStateLen) + + stw r10, KDP.InfoRecord + InfoRecord.NKProcessorStatePtr(r1) + + + + lhz r12, KDP.InfoRecord + InfoRecord.NKHWInfoLen(r1) + lwz r10, EWA.PA_IRP(r1) + addi r10, r10, IRP.HWInfo + lwz r9, KDP.InfoRecord + InfoRecord.NKHWInfoPtr(r1) + + bl MoveRecord ; (OldHWInfo, NewIRPHWInfo, OldKDP, HWInfoLen) + + stw r10, KDP.InfoRecord + InfoRecord.NKHWInfoPtr(r1) + + + + lhz r12, KDP.InfoRecord + InfoRecord.NKProcessorInfoLen(r1) + addi r10, r1, KDP.ProcessorInfo + lwz r9, KDP.InfoRecord + InfoRecord.NKProcessorInfoPtr(r1) + + bl MoveRecord ; (OldProcessorInfo, NewKDPProcessorInfo, OldKDP, ProcessorInfoLen) + + stw r10, KDP.InfoRecord + InfoRecord.NKProcessorInfoPtr(r1) + stw r10, KDP.InfoRecord + InfoRecord.NKProcessorInfoPtr2(r1) + + + + lhz r10, KDP.InfoRecord + InfoRecord.NKProcessorInfoVer(r1) + cmplwi r10, 0x0112 + bge- @ProcessorInfo_version_already_current + + li r12, 160 + li r10, 0x0112 + sth r12, KDP.InfoRecord + InfoRecord.NKProcessorInfoLen(r1) + sth r12, KDP.InfoRecord + InfoRecord.NKProcessorInfoLen2(r1) + sth r10, KDP.InfoRecord + InfoRecord.NKProcessorInfoVer(r1) + sth r10, KDP.InfoRecord + InfoRecord.NKProcessorInfoVer2(r1) +@ProcessorInfo_version_already_current + + + + lhz r12, KDP.InfoRecord + InfoRecord.NKDiagInfoLen(r1) + addi r10, r1, PSA.DiagInfo + lwz r9, KDP.InfoRecord + InfoRecord.NKDiagInfoPtr(r1) + + bl MoveRecord ; (OldDiagInfo, NewPSADiagInfo, OldKDP, DiagInfoLen) + + stw r10, KDP.InfoRecord + InfoRecord.NKDiagInfoPtr(r1) + + + + lhz r12, KDP.InfoRecord + InfoRecord.NKSystemInfoLen(r1) + lwz r10, EWA.PA_IRP(r1) + addi r10, r10, IRP.SystemInfo + lwz r9, KDP.InfoRecord + InfoRecord.NKSystemInfoPtr(r1) + + bl MoveRecord ; (OldSystemInfo, NewIRPSystemInfo, OldKDP, SystemInfoLen) + + stw r10, KDP.InfoRecord + InfoRecord.NKSystemInfoPtr(r1) + + + + lhz r12, KDP.InfoRecord + InfoRecord.NKNanoKernelInfoLen(r1) + addi r10, r1, KDP.NanoKernelInfo + lwz r9, KDP.InfoRecord + InfoRecord.NKNanoKernelInfoPtr(r1) + + bl MoveRecord ; (OldNanoKernelInfo, NewKDPNanoKernelInfo, OldKDP, NanoKernelInfoLen) + + stw r10, KDP.InfoRecord + InfoRecord.NKNanoKernelInfoPtr(r1) + + + + li r12, 0x160 + sth r12, KDP.InfoRecord + InfoRecord.NKNanoKernelInfoLen(r1) + + + li r12, kNanoKernelVersion + sth r12, KDP.InfoRecord + InfoRecord.NKNanoKernelInfoVer(r1) + + + lwz r8, KDP.ProcessorInfo + NKProcessorInfo.DecClockRateHz(r1) + stw r8, PSA.DecClockRateHzCopy(r1) + + + +; Play with ConfigFlags + + lwz r8, KDP.NanoKernelInfo + NKNanoKernelInfo.ConfigFlags(r1) + + _bset r8, r8, 31 ; always set bit 31 + + if &TYPE('NKShowLog') != 'UNDEFINED' + _bset r8, r8, 28 ; see if someone can test this + endif + + cmplwi r23, 0x27f3 ; set bit 27 on ROM 2.7f3 or later + blt- @oldrom ; means later than PDM and Cordyceps + _bset r8, r8, 27 +@oldrom + + stw r8, KDP.NanoKernelInfo + NKNanoKernelInfo.ConfigFlags(r1) + + + +; Say hello. + + bl InitScreenConsole + + _log 'Hello from the replacement multitasking NanoKernel. Version: ' + + mr r8, r12 + bl printh + + + _log '^n Old KDP: ' + + mr r8, r11 + bl printw + + + _log ' new KDP: ' + + mr r8, r1 + bl printw + + + _log ' new irp: ' + + lwz r8, EWA.PA_IRP(r1) + mr r8, r8 + bl printw + + + _log 'ROM vers: ' + + mr r8, r23 + bl printh + + _log '^n' + + + +; Jump back into the common code path of Init.s + + ; The Emulator ContextBlock is expected in r6. + lwz r6, KDP.PA_ECB(r1) + + b InitHighLevel + + + +; MoveRecord + +; Xrefs: +; replace_old_kernel +; r9 = base of kernel??? + +; Seems to be code to relocate some old structures. + +MoveRecord ; OUTSIDE REFERER + + ; Check whether the old structure is in KDP + ; + lwz r22, KDP.PA_ConfigInfo(r1) + lwz r22, NKConfigurationInfo.LA_InfoRecord(r22) + + subf r9, r22, r9 ; r9 = offset of old address in irp + cmplwi r9, 0x1000 + bge- @kdp + + add r21, r9, r11 ; r21 = the old address if it had been in KDP instead? + + +@0x18 + + ; r9 = offset of old structure in old parent page + ; r10 = destination + ; r12 = length + + + ; +@loop + subic. r12, r12, 4 + blt- @exit_loop + lwzx r9, r21, r12 + stwx r9, r10, r12 + bgt+ @loop +@exit_loop + + lwz r22, KDP.PA_ConfigInfo(r1) + lwz r22, NKConfigurationInfo.LA_KernelData(r22) + + subf r10, r1, r10 + lisori r21, -9 * 4096 + cmpw r10, r21 ; if dest is nearer than 9 pages below kdp... + blt- @0x50 + add r10, r10, r22 + blr +@0x50 + + lwz r22, KDP.PA_ConfigInfo(r1) + lwz r22, NKConfigurationInfo.LA_InfoRecord(r22) + lwz r21, EWA.PA_IRP(r1) + add r10, r10, r1 + subf r10, r21, r10 + add r10, r10, r22 + blr + +@kdp + add r9, r9, r22 + lwz r22, KDP.PA_ConfigInfo(r1) + lwz r22, NKConfigurationInfo.LA_KernelData(r22) + subf r9, r22, r9 ; r9 now equals an offset from old_kdp + add r21, r9, r11 ; r21 = address in new_kdp + b @0x18 \ No newline at end of file diff --git a/NanoKernel/NKScheduler.s b/NanoKernel/NKScheduler.s new file mode 100644 index 0000000..4af8f19 --- /dev/null +++ b/NanoKernel/NKScheduler.s @@ -0,0 +1,2192 @@ +Local_Panic set * + b panic + + + +; Called by setup only +; Each queue has a 64-bit time value (measured in implementation-dependent ticks). +; Critical queue has ~1ms, other queues increase this by 8x. + +InitRDYQs + + li r16, 0 + stw r16, KDP.NanoKernelInfo + NKNanoKernelInfo.TaskCount(r1) + + + ; Get a time doubleword approximating 1ms (for critical priority) + mflr r20 + + li r8, -1042 ; negative args are in usec + bl TimebaseTicksPerPeriod + mr r16, r8 ; hi + mr r17, r9 ; lo + + mtlr r20 + + + ; Zero out the KDP priority flags (a full value would be 0xf0000000) + li r23, 0 + stw r23, PSA.PriorityFlags(r1) + addi r9, r1, PSA.ReadyQueues + + + +; Populate one RDYQ for each of the four task priorities + +@loop + lisori r8, ReadyQueue.kSignature + stw r8, LLL.Signature(r9) + + stw r9, LLL.Next(r9) + stw r9, LLL.Prev(r9) + + + ; Set one word in the structure in the format of KDP PriorityFlags, + ; with the bit SET that corresponds with this queue + lis r8, 0x8000 ; ...0000 + srw r8, r8, r23 + stw r8, LLL.Freeform(r9) + + + ; Zero some shit + li r8, 0 + stw r8, ReadyQueue.Counter(r9) ; incremented by TaskReadyAsNext + stw r8, ReadyQueue.TotalWeight(r9) + + + ; Save the doubleword (1ms, 8ms...) for this priority + stw r16, ReadyQueue.Timecake(r9) + stw r17, ReadyQueue.Timecake + 4(r9) + + + ; Show off a bit + mflr r20 + + _log 'Init ready queue ' + + mr r8, r23 ; the priority (1,2,3,4) + bl printw + + mr r8, r16 ; the Timeslice + bl printw + + mr r8, r17 + bl printw + + _log '^n' + + mtlr r20 + + + ; Multiply Timeslice by 8 for the next iteration + slwi r16, r16, 3 + rlwimi r16, r17, 3, 29, 31 + slwi r17, r17, 3 + + ; Only do four of these + addi r23, r23, 1 + cmpwi r23, 4 + addi r9, r9, 32 ;ReadyQueue.Size + blt+ @loop + + + ; If the low nybble is empty, set ContextBlock.PriorityShifty to 2. + lwz r16, KDP.PA_ECB(r1) + lwz r17, ContextBlock.PriorityShifty(r16) + andi. r9, r17, (1<<4)-1 + li r17, 2 + bnelr- + + stw r17, ContextBlock.PriorityShifty(r16) + blr + + + +; ...to (ECB *)r6 +; (and also copy SPRG0 to r8) + +Save_r14_r31 + li r8, ContextBlock.r16 & -32 + dcbtst r8, r6 + stw r14, ContextBlock.r14(r6) + stw r15, ContextBlock.r15(r6) + +Save_r16_r31 + li r8, ContextBlock.r20 & -32 + stw r16, ContextBlock.r16(r6) + dcbtst r8, r6 + stw r17, ContextBlock.r17(r6) + stw r18, ContextBlock.r18(r6) + stw r19, ContextBlock.r19(r6) + +Save_r20_r31 + li r8, ContextBlock.r24 & -32 + stw r20, ContextBlock.r20(r6) + dcbtst r8, r6 + stw r21, ContextBlock.r21(r6) + stw r22, ContextBlock.r22(r6) + stw r23, ContextBlock.r23(r6) + +Save_r24_r31 + li r8, ContextBlock.r28 & -32 + stw r24, ContextBlock.r24(r6) + dcbtst r8, r6 + stw r25, ContextBlock.r25(r6) + stw r26, ContextBlock.r26(r6) + stw r27, ContextBlock.r27(r6) + stw r28, ContextBlock.r28(r6) + stw r29, ContextBlock.r29(r6) + stw r30, ContextBlock.r30(r6) + stw r31, ContextBlock.r31(r6) + + mfsprg r8, 0 + blr + + + +; ...from (ECB *)r6 + +Restore_r14_r31 + li r31, ContextBlock.r16 & -32 + dcbt r31, r6 + lwz r14, ContextBlock.r14(r6) + lwz r15, ContextBlock.r15(r6) + +Restore_r16_r31 + li r31, ContextBlock.r20 & -32 + lwz r16, ContextBlock.r16(r6) + dcbt r31, r6 + lwz r17, ContextBlock.r17(r6) + lwz r18, ContextBlock.r18(r6) + lwz r19, ContextBlock.r19(r6) + +Restore_r20_r31 + li r31, ContextBlock.r24 & -32 + lwz r20, ContextBlock.r20(r6) + dcbt r31, r6 + lwz r21, ContextBlock.r21(r6) + lwz r22, ContextBlock.r22(r6) + lwz r23, ContextBlock.r23(r6) + +Restore_r24_r31 + li r31, ContextBlock.r28 & -32 + lwz r24, ContextBlock.r24(r6) + dcbt r31, r6 + lwz r25, ContextBlock.r25(r6) + lwz r26, ContextBlock.r26(r6) + lwz r27, ContextBlock.r27(r6) + lwz r28, ContextBlock.r28(r6) + lwz r29, ContextBlock.r29(r6) + lwz r30, ContextBlock.r30(r6) + lwz r31, ContextBlock.r31(r6) + + blr + + + +; ...to (ECB *)r6 +; (but first set the MSR_FP bit in MSR, but *unset* it in r11) + +Save_f0_f31 + mfmsr r8 + rlwinm r11, r11, 0, MSR_FPbit+1, MSR_FPbit-1 + _bset r8, r8, MSR_FPbit + mtmsr r8 + isync + + li r8, 0x220 + stfd f0, 0x0200(r6) + dcbtst r8, r6 + stfd f1, 0x0208(r6) + stfd f2, 0x0210(r6) + stfd f3, 0x0218(r6) + li r8, 0x240 + stfd f4, 0x0220(r6) + dcbtst r8, r6 + stfd f5, 0x0228(r6) + stfd f6, 0x0230(r6) + stfd f7, 0x0238(r6) + li r8, 0x260 + stfd f8, 0x0240(r6) + dcbtst r8, r6 + stfd f9, 0x0248(r6) + stfd f10, 0x0250(r6) + stfd f11, 0x0258(r6) + li r8, 640 + stfd f12, 0x0260(r6) + dcbtst r8, r6 + stfd f13, 0x0268(r6) + stfd f14, 0x0270(r6) + stfd f15, 0x0278(r6) + li r8, 0x2a0 + stfd f16, 0x0280(r6) + dcbtst r8, r6 + stfd f17, 0x0288(r6) + stfd f18, 0x0290(r6) + stfd f19, 0x0298(r6) + li r8, 0x2c0 + stfd f20, 0x02a0(r6) + dcbtst r8, r6 + stfd f21, 0x02a8(r6) + stfd f22, 0x02b0(r6) + stfd f23, 0x02b8(r6) + li r8, 0x2e0 + stfd f24, 0x02c0(r6) + dcbtst r8, r6 + stfd f25, 0x02c8(r6) + stfd f26, 0x02d0(r6) + stfd f27, 0x02d8(r6) + mffs f0 + stfd f28, 0x02e0(r6) + stfd f29, 0x02e8(r6) + stfd f30, 0x02f0(r6) + stfd f31, 0x02f8(r6) + stfd f0, 0x00e0(r6) + blr + + + + +Restore_v0_v31 ; OUTSIDE REFERER + li r8, 0x200 + mfspr r11, vrsave + lvxl v0, r8, r10 + mtcr r11 + mtvscr v0 + lwz r8, -0x0004(r1) + li r9, -0x8e0 + lvx v31, r8, r9 + vor v0, v31, v31 + bge- major_0x13988_0x108 + li r8, 0x00 + lvx v0, r8, r10 + +major_0x13988_0x108 + vor v1, v31, v31 + ble- major_0x13988_0x118 + li r9, 0x10 + lvx v1, r9, r10 + +major_0x13988_0x118 + vor v2, v31, v31 + bne- major_0x13988_0x128 + li r8, 0x20 + lvx v2, r8, r10 + +major_0x13988_0x128 + vor v3, v31, v31 + bns- major_0x13988_0x138 + li r9, 0x30 + lvx v3, r9, r10 + +major_0x13988_0x138 + vor v4, v31, v31 + bge- cr1, major_0x13988_0x148 + li r8, 0x40 + lvx v4, r8, r10 + +major_0x13988_0x148 + vor v5, v31, v31 + ble- cr1, major_0x13988_0x158 + li r9, 0x50 + lvx v5, r9, r10 + +major_0x13988_0x158 + vor v6, v31, v31 + bne- cr1, major_0x13988_0x168 + li r8, 0x60 + lvx v6, r8, r10 + +major_0x13988_0x168 + vor v7, v31, v31 + bns- cr1, major_0x13988_0x178 + li r9, 0x70 + lvx v7, r9, r10 + +major_0x13988_0x178 + vor v8, v31, v31 + bge- cr2, major_0x13988_0x188 + li r8, 0x80 + lvx v8, r8, r10 + +major_0x13988_0x188 + vor v9, v31, v31 + ble- cr2, major_0x13988_0x198 + li r9, 0x90 + lvx v9, r9, r10 + +major_0x13988_0x198 + vor v10, v31, v31 + bne- cr2, major_0x13988_0x1a8 + li r8, 160 + lvx v10, r8, r10 + +major_0x13988_0x1a8 + vor v11, v31, v31 + bns- cr2, major_0x13988_0x1b8 + li r9, 0xb0 + lvx v11, r9, r10 + +major_0x13988_0x1b8 + vor v12, v31, v31 + bge- cr3, major_0x13988_0x1c8 + li r8, 0xc0 + lvx v12, r8, r10 + +major_0x13988_0x1c8 + vor v13, v31, v31 + ble- cr3, major_0x13988_0x1d8 + li r9, 0xd0 + lvx v13, r9, r10 + +major_0x13988_0x1d8 + vor v14, v31, v31 + bne- cr3, major_0x13988_0x1e8 + li r8, 0xe0 + lvx v14, r8, r10 + +major_0x13988_0x1e8 + vor v15, v31, v31 + bns- cr3, major_0x13988_0x1f8 + li r9, 240 + lvx v15, r9, r10 + +major_0x13988_0x1f8 + vor v16, v31, v31 + bge- cr4, major_0x13988_0x208 + li r8, 0x100 + lvx v16, r8, r10 + +major_0x13988_0x208 + vor v17, v31, v31 + ble- cr4, major_0x13988_0x218 + li r9, 0x110 + lvx v17, r9, r10 + +major_0x13988_0x218 + vor v18, v31, v31 + bne- cr4, major_0x13988_0x228 + li r8, 0x120 + lvx v18, r8, r10 + +major_0x13988_0x228 + vor v19, v31, v31 + bns- cr4, major_0x13988_0x238 + li r9, 0x130 + lvx v19, r9, r10 + +major_0x13988_0x238 + vor v20, v31, v31 + bge- cr5, major_0x13988_0x248 + li r8, 320 + lvx v20, r8, r10 + +major_0x13988_0x248 + vor v21, v31, v31 + ble- cr5, major_0x13988_0x258 + li r9, 0x150 + lvx v21, r9, r10 + +major_0x13988_0x258 + vor v22, v31, v31 + bne- cr5, major_0x13988_0x268 + li r8, 0x160 + lvx v22, r8, r10 + +major_0x13988_0x268 + vor v23, v31, v31 + bns- cr5, major_0x13988_0x278 + li r9, 0x170 + lvx v23, r9, r10 + +major_0x13988_0x278 + vor v24, v31, v31 + bge- cr6, major_0x13988_0x288 + li r8, 0x180 + lvx v24, r8, r10 + +major_0x13988_0x288 + vor v25, v31, v31 + ble- cr6, major_0x13988_0x298 + li r9, 400 + lvx v25, r9, r10 + +major_0x13988_0x298 + vor v26, v31, v31 + bne- cr6, major_0x13988_0x2a8 + li r8, 0x1a0 + lvx v26, r8, r10 + +major_0x13988_0x2a8 + vor v27, v31, v31 + bns- cr6, major_0x13988_0x2b8 + li r9, 0x1b0 + lvx v27, r9, r10 + +major_0x13988_0x2b8 + vor v28, v31, v31 + bge- cr7, major_0x13988_0x2c8 + li r8, 0x1c0 + lvx v28, r8, r10 + +major_0x13988_0x2c8 + vor v29, v31, v31 + ble- cr7, major_0x13988_0x2d8 + li r9, 0x1d0 + lvx v29, r9, r10 + +major_0x13988_0x2d8 + vor v30, v31, v31 + bne- cr7, major_0x13988_0x2e8 + li r8, 480 + lvx v30, r8, r10 + +major_0x13988_0x2e8 + vor v31, v31, v31 + bns- cr7, major_0x13988_0x2f8 + li r9, 0x1f0 + lvx v31, r9, r10 + +major_0x13988_0x2f8 + blr + + + +; Save_v0_v31 + +; Xrefs: +; major_0x02980 +; MPCall_47 +; major_0x14548 +; MPCall_103 + + align 4 ; ???? + +Save_v0_v31 ; OUTSIDE REFERER + mfspr r5, vrsave + lwz r2, 0x00d8(r6) + cmplwi r2, 0x00 + beqlr- + andis. r3, r11, 0x200 + stw r5, 0x0210(r2) + beqlr- + mfmsr r3 + rlwinm r11, r11, 0, 7, 5 + oris r3, r3, 0x200 + mtmsr r3 + isync + li r3, 0x00 + li r4, 0x10 + mtcr r5 + stvx v0, r3, r2 + stvxl v1, r4, r2 + mfvscr v0 + li r3, 0x200 + stvx v0, r3, r2 + bne- Save_v0_v31_0x5c + li r3, 0x20 + stvx v2, r3, r2 + +Save_v0_v31_0x5c + bns- Save_v0_v31_0x68 + li r4, 0x30 + stvx v3, r4, r2 + +Save_v0_v31_0x68 + bge- cr1, Save_v0_v31_0x74 + li r3, 0x40 + stvx v4, r3, r2 + +Save_v0_v31_0x74 + ble- cr1, Save_v0_v31_0x80 + li r4, 0x50 + stvx v5, r4, r2 + +Save_v0_v31_0x80 + bne- cr1, Save_v0_v31_0x8c + li r3, 0x60 + stvx v6, r3, r2 + +Save_v0_v31_0x8c + bns- cr1, Save_v0_v31_0x98 + li r4, 0x70 + stvx v7, r4, r2 + +Save_v0_v31_0x98 + bge- cr2, Save_v0_v31_0xa4 + li r3, 0x80 + stvx v8, r3, r2 + +Save_v0_v31_0xa4 + ble- cr2, Save_v0_v31_0xb0 + li r4, 0x90 + stvx v9, r4, r2 + +Save_v0_v31_0xb0 + bne- cr2, Save_v0_v31_0xbc + li r3, 160 + stvx v10, r3, r2 + +Save_v0_v31_0xbc + bns- cr2, Save_v0_v31_0xc8 + li r4, 0xb0 + stvx v11, r4, r2 + +Save_v0_v31_0xc8 + bge- cr3, Save_v0_v31_0xd4 + li r3, 0xc0 + stvx v12, r3, r2 + +Save_v0_v31_0xd4 + ble- cr3, Save_v0_v31_0xe0 + li r4, 0xd0 + stvx v13, r4, r2 + +Save_v0_v31_0xe0 + bne- cr3, Save_v0_v31_0xec + li r3, 0xe0 + stvx v14, r3, r2 + +Save_v0_v31_0xec + bns- cr3, Save_v0_v31_0xf8 + li r4, 240 + stvx v15, r4, r2 + +Save_v0_v31_0xf8 + bge- cr4, Save_v0_v31_0x104 + li r3, 0x100 + stvx v16, r3, r2 + +Save_v0_v31_0x104 + ble- cr4, Save_v0_v31_0x110 + li r4, 0x110 + stvx v17, r4, r2 + +Save_v0_v31_0x110 + bne- cr4, Save_v0_v31_0x11c + li r3, 0x120 + stvx v18, r3, r2 + +Save_v0_v31_0x11c + bns- cr4, Save_v0_v31_0x128 + li r4, 0x130 + stvx v19, r4, r2 + +Save_v0_v31_0x128 + bge- cr5, Save_v0_v31_0x134 + li r3, 320 + stvx v20, r3, r2 + +Save_v0_v31_0x134 + ble- cr5, Save_v0_v31_0x140 + li r4, 0x150 + stvx v21, r4, r2 + +Save_v0_v31_0x140 + bne- cr5, Save_v0_v31_0x14c + li r3, 0x160 + stvx v22, r3, r2 + +Save_v0_v31_0x14c + bns- cr5, Save_v0_v31_0x158 + li r4, 0x170 + stvx v23, r4, r2 + +Save_v0_v31_0x158 + bge- cr6, Save_v0_v31_0x164 + li r3, 0x180 + stvx v24, r3, r2 + +Save_v0_v31_0x164 + ble- cr6, Save_v0_v31_0x170 + li r4, 400 + stvx v25, r4, r2 + +Save_v0_v31_0x170 + bne- cr6, Save_v0_v31_0x17c + li r3, 0x1a0 + stvx v26, r3, r2 + +Save_v0_v31_0x17c + bns- cr6, Save_v0_v31_0x188 + li r4, 0x1b0 + stvx v27, r4, r2 + +Save_v0_v31_0x188 + bge- cr7, Save_v0_v31_0x194 + li r3, 0x1c0 + stvx v28, r3, r2 + +Save_v0_v31_0x194 + ble- cr7, Save_v0_v31_0x1a0 + li r4, 0x1d0 + stvx v29, r4, r2 + +Save_v0_v31_0x1a0 + bne- cr7, Save_v0_v31_0x1ac + li r3, 480 + stvx v30, r3, r2 + +Save_v0_v31_0x1ac + bns- cr7, Save_v0_v31_0x1b8 + li r4, 0x1f0 + stvx v31, r4, r2 + +Save_v0_v31_0x1b8 + blr + + + + +major_0x13e4c + lwz r17, 0x0010( r8) + lbz r18, 0x0018( r8) + addi r16, r8, 0x08 + cmpwi cr1, r18, 0x00 + cmpwi r17, 0x00 + beq+ cr1, Local_Panic + beq- major_0x13e4c_0x74 + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + lwz r17, 0x0000(r16) + lwz r16, 0x001c( r8) + lwz r18, 0x0014(r17) + subf r18, r16, r18 + stw r18, 0x0014(r17) + lwz r18, 0x0010(r17) + addi r18, r18, -0x01 + stw r18, 0x0010(r17) + cmpwi r18, 0x00 + lwz r16, -0x0970( r1) + blt+ Local_Panic + bne- major_0x13e4c_0x74 + lwz r18, 0x0000(r17) + andc r16, r16, r18 + stw r16, -0x0970( r1) + +major_0x13e4c_0x74 + li r16, 0x00 + stb r16, 0x0018( r8) + mfsprg r17, 0 + li r16, 0x01 + stb r16, -0x0118(r17) + blr + + + + + +; TaskReadyAsNext + +; Xrefs: +; major_0x02ccc +; MPCall_6 +; KCYieldWithHint +; MPCall_55 +; KCStopScheduling +; MPCall_18 +; MPCall_23 +; MPCall_27 +; MPCall_52 +; MPCall_9 +; KCThrowException +; MPCall_114 +; major_0x130f0 +; major_0x142dc +; CommonPIHPath + + +; These two entry cases specify different directions of queue insertion + +; ARG Task *r8 +; CLOB r16, r17, r18 + +TaskReadyAsNext + crclr cr1_eq + b TaskReadyCommonPath + +TaskReadyAsPrev + crset cr1_eq + +TaskReadyCommonPath + + lwz r16, Task.QueueMember + LLL.Next(r8) + lis r17, 0x8000 ; ...0000 + cmpwi r16, 0 + lbz r18, Task.Priority(r8) + bne+ Local_Panic + + + ; Set the KDP priority flag for this task. + ; Leave pointer to target RDYQ in r17. + + lwz r16, PSA.PriorityFlags(r1) + srw r17, r17, r18 + mulli r18, r18, 32 ;ReadyQueue.Size + or r16, r16, r17 + addi r17, r1, PSA.ReadyQueues + stw r16, PSA.PriorityFlags(r1) + add r17, r17, r18 + + + ; What decrements this counter? + lwz r18, ReadyQueue.Counter(r17) + addi r18, r18, 1 + stw r18, ReadyQueue.Counter(r17) + + + lwz r16, Task.Weight(r8) + lwz r18, ReadyQueue.TotalWeight(r17) + add r18, r18, r16 + stw r18, ReadyQueue.TotalWeight(r17) + + + addi r16, r8, Task.QueueMember + + bne- cr1, @as_next + + + stw r17, LLL.Freeform(r16) + InsertAsPrev r16, r17, scratch=r18 + + + b @endif +@as_next + + stw r17, LLL.Freeform(r16) + InsertAsNext r16, r17, scratch=r18 + +@endif + + + li r16, 1 + stb r16, Task.MysteryByte1(r8) + blr + + + + +; Set the segment and block allocation table registers according to the +; SPAC structure passed in. On non-601 machines, unset the "guarded" bit +; of the WIMG field of each lower BAT register. +; +; And apparently there is a second, undocumented batch of BAT registers! + +; ARG AddressSpace *r8, AddressSpace *r9 (can be zero?) + +SetAddrSpcRegisters + + ; This is the only function that hits this counter + lwz r17, KDP.NanoKernelInfo + NKNanoKernelInfo.AddrSpcSetCtr(r1) + addi r17, r17, 1 + stw r17, KDP.NanoKernelInfo + NKNanoKernelInfo.AddrSpcSetCtr(r1) + + ; Check that we have the right guy (a 'SPAC') + lwz r16, AddressSpace.Signature(r8) + lisori r17, AddressSpace.kSignature + cmpw r16, r17 + bne+ Local_Panic + + ; Intend to skip the dssall instruction if Altivec is... present? absent? + rlwinm. r16, r7, 0, 12, 12 ; seems to be leftover from Init.s Altivec testing + + ; Apply the address space to the segment registers + isync + lwz r16, AddressSpace.SRs + 0(r8) + lwz r17, AddressSpace.SRs + 4(r8) + mtsr 0, r16 + mtsr 1, r17 + lwz r16, AddressSpace.SRs + 8(r8) + lwz r17, AddressSpace.SRs + 12(r8) + mtsr 2, r16 + mtsr 3, r17 + lwz r16, AddressSpace.SRs + 16(r8) + lwz r17, AddressSpace.SRs + 20(r8) + mtsr 4, r16 + mtsr 5, r17 + lwz r16, AddressSpace.SRs + 24(r8) + lwz r17, AddressSpace.SRs + 28(r8) + mtsr 6, r16 + mtsr 7, r17 + lwz r16, AddressSpace.SRs + 32(r8) + lwz r17, AddressSpace.SRs + 36(r8) + mtsr 8, r16 + mtsr 9, r17 + lwz r16, AddressSpace.SRs + 40(r8) + lwz r17, AddressSpace.SRs + 44(r8) + mtsr 10, r16 + mtsr 11, r17 + lwz r16, AddressSpace.SRs + 48(r8) + lwz r17, AddressSpace.SRs + 52(r8) + mtsr 12, r16 + mtsr 13, r17 + lwz r16, AddressSpace.SRs + 56(r8) + lwz r17, AddressSpace.SRs + 60(r8) + mtsr 14, r16 + mtsr 15, r17 + + beq- @skip_dssall + dssall ; flush pending vector ops? +@skip_dssall + + ; Point KDP at this SPAC + mfsprg r16, 0 ; paranoid + isync + stw r8, EWA.PA_CurAddressSpace(r16) + + + ; The 601 has a special code path for populating the BATs + mfpvr r16 + rlwinm. r16, r16, 0, 0, 14 + cmpwi cr1, r9, 0 ; arg r9 is 0 when called from Init.s + beq- @is_601 + + + ; Fill the BATs on "real" PowerPC CPUs + + lwz r16, AddressSpace.BAT0U(r8) + lwz r17, AddressSpace.BAT0U(r9) + cmplw r16, r17 + + lwz r17, AddressSpace.BAT0L(r8) + beq- cr1, @definitely_set_BAT0 + beq- @skip_setting_BAT0 + +@definitely_set_BAT0 ; r9 is zero or the addrspc bats match low physical memory + mtspr dbat0u, r0 + mtspr dbat0l, r17 + rlwinm r17, r17, 0, 29, 27 + mtspr dbat0u, r16 + mtspr ibat0u, r0 + mtspr ibat0l, r17 + mtspr ibat0u, r16 +@skip_setting_BAT0 + + + lwz r16, AddressSpace.BAT1U(r8) + lwz r17, AddressSpace.BAT1U(r9) + cmplw r16, r17 + lwz r17, AddressSpace.BAT1L(r8) + beq- cr1, @definitely_set_BAT1 + beq- @skip_setting_BAT1 + +@definitely_set_BAT1 + mtspr dbat1u, r0 + mtspr dbat1l, r17 + rlwinm r17, r17, 0, 29, 27 + mtspr dbat1u, r16 + mtspr ibat1u, r0 + mtspr ibat1l, r17 + mtspr ibat1u, r16 +@skip_setting_BAT1 + + + lwz r16, AddressSpace.BAT2U(r8) + lwz r17, AddressSpace.BAT2U(r9) + cmplw r16, r17 + lwz r17, AddressSpace.BAT2L(r8) + beq- cr1, @definitely_set_BAT2 + beq- @skip_setting_BAT2 + +@definitely_set_BAT2 + mtspr dbat2u, r0 + mtspr dbat2l, r17 + rlwinm r17, r17, 0, 29, 27 + mtspr dbat2u, r16 + mtspr ibat2u, r0 + mtspr ibat2l, r17 + mtspr ibat2u, r16 +@skip_setting_BAT2 + + + lwz r16, AddressSpace.BAT3U(r8) + lwz r17, AddressSpace.BAT3U(r9) + cmplw r16, r17 + lwz r17, AddressSpace.BAT3L(r8) + beq- cr1, @definitely_set_BAT3 + beq- @skip_setting_BAT3 +@definitely_set_BAT3 + + mtspr dbat3u, r0 + mtspr dbat3l, r17 + rlwinm r17, r17, 0, 29, 27 + mtspr dbat3u, r16 + mtspr ibat3u, r0 + mtspr ibat3l, r17 + mtspr ibat3u, r16 +@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 + + ; This is the crazy cpu case +@is_601 + lwz r16, 0x0080(r8) + lwz r17, 0x0080(r9) + cmplw r16, r17 + lwz r17, 0x0084(r8) + beq- cr1, SetAddrSpcRegisters_0x284 + beq- SetAddrSpcRegisters_0x29c + +SetAddrSpcRegisters_0x284: + rlwimi r16, r17, 0, 25, 31 + mtspr ibat0u, r16 + lwz r16, 0x0080(r8) + rlwimi r17, r16, 30, 26, 31 + rlwimi r17, r16, 6, 25, 25 + mtspr ibat0l, r17 + +SetAddrSpcRegisters_0x29c: + lwz r16, 0x0088(r8) + lwz r17, 0x0088(r9) + cmplw r16, r17 + lwz r17, 0x008c(r8) + beq- cr1, SetAddrSpcRegisters_0x2b4 + beq- SetAddrSpcRegisters_0x2cc + +SetAddrSpcRegisters_0x2b4: + rlwimi r16, r17, 0, 25, 31 + mtspr ibat1u, r16 + lwz r16, 0x0088(r8) + rlwimi r17, r16, 30, 26, 31 + rlwimi r17, r16, 6, 25, 25 + mtspr ibat1l, r17 + +SetAddrSpcRegisters_0x2cc: + lwz r16, 0x0090(r8) + lwz r17, 0x0090(r9) + cmplw r16, r17 + lwz r17, 0x0094(r8) + beq- cr1, SetAddrSpcRegisters_0x2e4 + beq- SetAddrSpcRegisters_0x2fc + +SetAddrSpcRegisters_0x2e4: + rlwimi r16, r17, 0, 25, 31 + mtspr ibat2u, r16 + lwz r16, 0x0090(r8) + rlwimi r17, r16, 30, 26, 31 + rlwimi r17, r16, 6, 25, 25 + mtspr ibat2l, r17 + +SetAddrSpcRegisters_0x2fc: + lwz r16, 0x0098(r8) + lwz r17, 0x0098(r9) + cmplw r16, r17 + lwz r17, 0x009c(r8) + beq- cr1, SetAddrSpcRegisters_0x314 + beqlr- + +SetAddrSpcRegisters_0x314: + rlwimi r16, r17, 0, 25, 31 + mtspr ibat3u, r16 + lwz r16, 0x0098(r8) + rlwimi r17, r16, 30, 26, 31 + rlwimi r17, r16, 6, 25, 25 + mtspr ibat3l, r17 + blr + + + +; major_0x142a8 + +; Xrefs: +; skeleton_key + +major_0x142a8 ; OUTSIDE REFERER + lbz r8, -0x0118(r1) + rlwinm. r9, r7, 0, 16, 16 + lwz r1, -0x0004(r1) + cmpwi cr1, r8, 0x00 + +; sprg0 = for r1 and r6 +; r1 = kdp +; r6 = register restore area +; r7 = flag to insert into XER +; r10 = new srr0 (return location) +; r11 = new srr1 +; r12 = lr restore +; r13 = cr restore + bne- int_teardown + +; sprg0 = for r1 and r6 +; r1 = kdp +; r6 = register restore area +; r7 = flag to insert into XER +; r10 = new srr0 (return location) +; r11 = new srr1 +; r12 = lr restore +; r13 = cr restore + beq+ cr1, int_teardown + +; r6 = ewa + bl Save_r14_r31 +; r8 = sprg0 (not used by me) + + + _Lock PSA.SchLock, scratch1=r27, scratch2=r28 + + + + +; major_0x142dc + +; Xrefs: +; major_0x02ccc +; CommonMPCallReturnPath +; major_0x142a8 +; major_0x14bcc + +major_0x142dc ; OUTSIDE REFERER + mfsprg r14, 0 + li r8, 0x00 + stb r8, -0x0118(r14) + lwz r31, -0x0008(r14) + lwz r1, -0x0004(r14) + lwz r9, 0x0ee4(r1) + addi r9, r9, 0x01 + stw r9, 0x0ee4(r1) + bl major_0x14a98 + lbz r27, 0x0019(r31) + blt- major_0x142dc_0x58 + li r26, 0x01 + beq- major_0x142dc_0x38 + li r26, 0x00 + +major_0x142dc_0x38 + cmpw r27, r26 + mr r8, r31 + beq- major_0x142dc_0x58 + bl major_0x13e4c + stb r26, 0x0019(r31) + mr r8, r31 + bl TaskReadyAsPrev + bl CalculateTimeslice + +major_0x142dc_0x58 ; OUTSIDE REFERER + lwz r27, -0x0970(r1) + +major_0x142dc_0x5c + mr r30, r31 + cmpwi r27, 0x00 + cntlzw r26, r27 + beq- major_0x142dc_0x140 + addi r25, r1, -0x9f0 + mulli r26, r26, 0x20 + add r26, r26, r25 + lwz r29, 0x0008(r26) + addi r30, r29, -0x08 + +major_0x142dc_0x80 + lhz r28, -0x0116(r14) + lwz r24, 0x0064(r30) + lhz r25, 0x001a(r30) + rlwinm. r8, r24, 0, 25, 26 + cmpw cr1, r25, r28 + beq- major_0x142dc_0xb8 + beq- cr1, major_0x142dc_0xb8 + lwz r29, 0x0008(r29) + addi r30, r29, -0x08 + cmpw r29, r26 + bne+ major_0x142dc_0x80 + lwz r25, 0x0000(r26) + andc r27, r27, r25 + b major_0x142dc_0x5c + +major_0x142dc_0xb8 + lbz r25, 0x0018(r31) + lbz r28, 0x0019(r30) + lbz r27, 0x0019(r31) + cmpwi cr1, r25, 0x02 + cmpw cr2, r28, r27 + bne- cr1, major_0x142dc_0xd8 + blt- cr2, major_0x142dc_0xd8 + mr r30, r31 + +major_0x142dc_0xd8 ; OUTSIDE REFERER + lwz r28, 0x0010(r30) + addi r29, r30, 0x08 + cmpwi r28, 0x00 + lwz r26, 0x0008(r30) + beq- major_0x142dc_0x140 + lwz r28, 0x0008(r29) + lwz r27, 0x000c(r29) + stw r28, 0x0008(r27) + stw r27, 0x000c(r28) + li r28, 0x00 + stw r28, 0x0008(r29) + stw r28, 0x000c(r29) + lwz r27, 0x001c(r30) + lwz r28, 0x0014(r26) + subf r28, r27, r28 + stw r28, 0x0014(r26) + lwz r28, 0x0010(r26) + lwz r27, -0x0970(r1) + addi r28, r28, -0x01 + cmpwi r28, 0x00 + stw r28, 0x0010(r26) + bltl+ Local_Panic + bne- major_0x142dc_0x140 + lwz r28, 0x0000(r26) + andc r27, r27, r28 + stw r27, -0x0970(r1) + +major_0x142dc_0x140 + lwz r25, 0x0064(r30) + li r26, 0x00 + rlwinm. r8, r25, 0, 21, 22 + andc r27, r25, r8 + beq+ major_0x142dc_0x184 + ori r27, r27, 0x200 + stb r26, 0x0018(r30) + stw r27, 0x0064(r30) + addi r25, r1, -0xa34 + addi r26, r30, 0x08 + stw r25, 0x0000(r26) + stw r25, 0x0008(r26) + lwz r27, 0x000c(r25) + stw r27, 0x000c(r26) + stw r26, 0x0008(r27) + stw r26, 0x000c(r25) + b major_0x142dc_0x58 + +major_0x142dc_0x184 + cmpw cr3, r30, r31 + rlwinm. r8, r25, 0, 27, 27 + bne- cr3, major_0x14548 + bne- major_0x14548 + bl GetTime + bl major_0x148ec + lwz r27, 0x0064(r31) + mfsprg r14, 0 + rlwinm. r8, r27, 0, 8, 8 + rlwimi r11, r27, 24, 29, 29 + beq+ major_0x142dc_0x1bc + lwz r10, 0x00fc(r6) + rlwinm r27, r27, 0, 9, 7 + stw r27, 0x0064(r31) + +major_0x142dc_0x1bc + li r27, 0x02 + lbz r28, 0x0019(r31) + stb r27, 0x0018(r31) + stb r28, -0x0117(r14) + sync + lwz r27, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r27, 0x00 + li r27, 0x00 + bne+ cr1, major_0x142dc_0x1e8 + mflr r27 + bl panic + +major_0x142dc_0x1e8 + stw r27, PSA.SchLock + Lock.Count(r1) + +; r6 = ewa + bl Restore_r14_r31 + + + +; int_teardown + +; All MPCalls get here? +; r0,7,8,9,10,11,12,13 restored from r6 area +; r1,6 restored from sprg0 area +; Apple used the "reserved" (not first three) bits of XER. +; If bit 27 of 0xedc(r1) is set: +; Bit 22 of XER is cleared +; Bit 10 of r7 is inserted into XER at bit 23 + +; Xrefs: +; non_skeleton_reset_trap +; major_0x142a8 +; major_0x142dc +; major_0x14548 + +; > sprg0 = for r1 and r6 +; > r1 = kdp +; > r6 = register restore area +; > r7 = flag to insert into XER +; > r10 = new srr0 (return location) +; > r11 = new srr1 +; > r12 = lr restore +; > r13 = cr restore + +int_teardown ; OUTSIDE REFERER + lwz r8, 0x0edc(r1) + mfsprg r1, 0 + mtlr r12 + mtspr srr0, r10 + mtspr srr1, r11 + rlwinm. r8, r8, 0, 27, 27 + beq- int_teardown_0x2c + mfxer r8 + rlwinm r8, r8, 0, 23, 21 + rlwimi r8, r7, 19, 23, 23 + mtxer r8 + +int_teardown_0x2c + mtcr r13 + lwz r10, 0x0154(r6) + lwz r11, 0x015c(r6) + lwz r12, 0x0164(r6) + lwz r13, 0x016c(r6) + lwz r7, 0x013c(r6) + lwz r8, 0x0144(r6) + lwz r9, 0x014c(r6) + lwz r0, 0x0104(r6) + lwz r6, 0x0018(r1) + lwz r1, 0x0004(r1) + rfi + dcb.b 32, 0 + + + + +; major_0x14548 + +; Xrefs: +; major_0x142dc + +major_0x14548 ; OUTSIDE REFERER + lwz r16, 0x0064(r31) + stw r30, -0x0260(r14) + rlwinm r16, r16, 0, 27, 25 + stw r6, 0x0088(r31) + mfsprg r8, 3 + stw r16, 0x0064(r31) + stw r8, 0x00f0(r31) + lwz r8, -0x000c(r14) + stw r7, 0x0000(r6) + stw r8, 0x0004(r6) + mfxer r8 + stw r13, 0x00dc(r6) + stw r8, 0x00d4(r6) + stw r12, 0x00ec(r6) + mfctr r8 + stw r10, 0x00fc(r6) + stw r8, 0x00f4(r6) + mfspr r8, pvr + rlwinm. r8, r8, 0, 0, 14 + bne- major_0x14548_0x58 + mfspr r8, mq + stw r8, 0x00c4(r6) + +major_0x14548_0x58 + lwz r8, 0x0004(r14) + stw r8, 0x010c(r6) + stw r2, 0x0114(r6) + stw r3, 0x011c(r6) + andi. r8, r11, 0x2000 + stw r4, 0x0124(r6) + lwz r8, 0x0018(r14) + stw r5, 0x012c(r6) + stw r8, 0x0134(r6) + bnel+ Save_f0_f31 + lwz r31, -0x0008(r14) + lwz r30, -0x0260(r14) + rlwinm. r8, r7, 0, 12, 12 + bnel+ Save_v0_v31 + stw r11, 0x00a4(r6) + lwz r8, 0x00e8(r31) + addi r8, r8, 0x01 + stw r8, 0x00e8(r31) + bl GetTime + bl major_0x148ec + mfsprg r14, 0 + li r27, 0x02 + lbz r28, 0x0019(r30) + stb r27, 0x0018(r30) + stb r28, -0x0117(r14) + cmplw r30, r31 + lwz r16, 0x0010(r31) + beq- major_0x14548_0xd4 + cmpwi r16, 0x00 + mr r8, r31 + beql+ TaskReadyAsPrev + +major_0x14548_0xd4 + mfsprg r19, 0 + li r8, 0x00 + stb r8, -0x0118(r19) + lhz r8, -0x0116(r19) + lwz r6, 0x0088(r30) + lwz r28, -0x0340(r19) + sth r8, 0x001a(r30) + stw r28, 0x0078(r30) + stw r30, -0x0008(r19) + stw r6, -0x0014(r19) + lwz r7, 0x0000(r6) + lwz r28, 0x0004(r6) + stw r7, -0x0010(r19) + stw r28, -0x000c(r19) + lwz r27, 0x0064(r30) + lwz r13, 0x00dc(r6) + ori r27, r27, 0x20 + lwz r11, 0x00a4(r6) + lwz r8, 0x00f0(r30) + rlwimi r11, r27, 24, 29, 29 + rlwinm r27, r27, 0, 9, 7 + mtsprg 3, r8 + stw r27, 0x0064(r30) + lwz r18, 0x0070(r30) + lwz r9, -0x001c(r19) + cmpw r18, r9 + beq- major_0x14548_0x148 + mr r8, r18 + bl SetAddrSpcRegisters + +major_0x14548_0x148 + mfsprg r19, 0 + mtcr r7 + lis r28, 0x00 + ori r28, r28, 0x10 + bne- cr2, major_0x14548_0x20c + and. r28, r28, r27 + li r8, 0x00 + beq- major_0x14548_0x20c + andc r27, r27, r28 + lwz r29, -0x0440(r1) + stw r27, 0x0064(r30) + stw r8, -0x0440(r1) + blt- cr2, major_0x14548_0x1cc + bsol+ cr6, Local_Panic + clrlwi r8, r7, 0x08 + stw r8, 0x0000(r6) + lwz r6, 0x0658(r1) + addi r26, r1, 0x360 + mtsprg 3, r26 + stw r26, 0x00f0(r30) + stw r6, -0x0014(r19) + stw r6, 0x0088(r30) + lwz r7, 0x0000(r6) + lwz r26, 0x0004(r6) + mtcr r7 + stw r26, -0x000c(r19) + lwz r13, 0x00dc(r6) + lwz r11, 0x00a4(r6) + bsol+ cr6, Local_Panic + rlwimi r11, r7, 0, 20, 23 + rlwimi r7, r8, 0, 9, 16 + rlwimi r11, r27, 24, 29, 29 + stw r7, -0x0010(r19) + +major_0x14548_0x1cc + lwz r17, 0x00cc(r6) + ori r17, r17, 0x100 + stw r17, 0x00cc(r6) + lhz r17, -0x043c(r1) + lwz r18, 0x067c(r1) + cmplwi r17, 0xffff + lwz r26, 0x0674(r1) + beq- major_0x14548_0x1f8 + sth r17, 0x0000(r18) + li r17, -0x01 + sth r17, -0x043c(r1) + +major_0x14548_0x1f8 + cmpwi r29, 0x00 + or r13, r13, r29 + bne- major_0x14548_0x20c + lwz r29, 0x0678(r1) + and r13, r13, r29 + +major_0x14548_0x20c + lwz r29, 0x00d8(r6) + cmpwi r29, 0x00 + lwz r8, 0x0210(r29) + beq- major_0x14548_0x220 + mtspr vrsave, r8 + +major_0x14548_0x220 + lwz r8, 0x00d4(r6) + lwz r12, 0x00ec(r6) + mtxer r8 + lwz r8, 0x00f4(r6) + lwz r10, 0x00fc(r6) + mtctr r8 + mfspr r8, pvr + rlwinm. r8, r8, 0, 0, 14 + bne- major_0x14548_0x24c + lwz r8, 0x00c4(r6) + mtspr mq, r8 + +major_0x14548_0x24c + li r9, 0x124 + lwz r8, 0x010c(r6) + dcbt r9, r6 + lwz r2, 0x0114(r6) + stw r8, 0x0004(r19) + lwz r3, 0x011c(r6) + li r9, 0x184 + lwz r4, 0x0124(r6) + dcbt r9, r6 + lwz r8, 0x0134(r6) + lwz r5, 0x012c(r6) + stw r8, 0x0018(r19) + lwz r14, 0x0174(r6) + lwz r15, 0x017c(r6) + li r9, 420 + lwz r16, 0x0184(r6) + dcbt r9, r6 + lwz r17, 0x018c(r6) + lwz r18, 0x0194(r6) + lwz r19, 0x019c(r6) + li r9, 0x1c4 + lwz r20, 0x01a4(r6) + dcbt r9, r6 + lwz r21, 0x01ac(r6) + lwz r22, 0x01b4(r6) + lwz r23, 0x01bc(r6) + li r9, 0x1e4 + lwz r24, 0x01c4(r6) + dcbt r9, r6 + lwz r25, 0x01cc(r6) + lwz r26, 0x01d4(r6) + lwz r27, 0x01dc(r6) + andi. r8, r11, 0x2900 + lwz r28, 0x01e4(r6) + lwz r29, 0x01ec(r6) + lwz r30, 0x01f4(r6) + lwz r31, 0x01fc(r6) + beq- major_0x14548_0x380 + mfmsr r8 + ori r8, r8, 0x2000 + ori r11, r11, 0x2000 + mtmsr r8 + isync + lfd f31, 0x00e0(r6) + lfd f0, 0x0200(r6) + lfd f1, 0x0208(r6) + lfd f2, 0x0210(r6) + lfd f3, 0x0218(r6) + lfd f4, 0x0220(r6) + lfd f5, 0x0228(r6) + lfd f6, 0x0230(r6) + lfd f7, 0x0238(r6) + mtfsf 0xff, f31 + lfd f8, 0x0240(r6) + lfd f9, 0x0248(r6) + lfd f10, 0x0250(r6) + lfd f11, 0x0258(r6) + lfd f12, 0x0260(r6) + lfd f13, 0x0268(r6) + lfd f14, 0x0270(r6) + lfd f15, 0x0278(r6) + lfd f16, 0x0280(r6) + lfd f17, 0x0288(r6) + lfd f18, 0x0290(r6) + lfd f19, 0x0298(r6) + lfd f20, 0x02a0(r6) + lfd f21, 0x02a8(r6) + lfd f22, 0x02b0(r6) + lfd f23, 0x02b8(r6) + lfd f24, 0x02c0(r6) + lfd f25, 0x02c8(r6) + lfd f26, 0x02d0(r6) + lfd f27, 0x02d8(r6) + lfd f28, 0x02e0(r6) + lfd f29, 0x02e8(r6) + lfd f30, 0x02f0(r6) + lfd f31, 0x02f8(r6) + +major_0x14548_0x380 + sync + lwz r8, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r8, 0x00 + li r8, 0x00 + bne+ cr1, major_0x14548_0x39c + mflr r8 + bl panic + +major_0x14548_0x39c + stw r8, PSA.SchLock + Lock.Count(r1) + +; sprg0 = for r1 and r6 +; r1 = kdp +; r6 = register restore area +; r7 = flag to insert into XER +; r10 = new srr0 (return location) +; r11 = new srr1 +; r12 = lr restore +; r13 = cr restore + b int_teardown + + + +; major_0x148ec + +; Xrefs: +; major_0x142dc +; major_0x14548 + +major_0x148ec ; OUTSIDE REFERER + mfxer r20 + mfsprg r21, 0 + lwz r19, 0x00cc(r31) + lwz r18, 0x00c8(r31) + subfc r19, r19, r9 + subfe r18, r18, r8 + lwz r17, 0x00c4(r31) + lwz r16, 0x00c0(r31) + addc r17, r17, r19 + adde r16, r16, r18 + stw r17, 0x00c4(r31) + stw r16, 0x00c0(r31) + lwz r17, 0x00dc(r31) + lwz r16, 0x00d8(r31) + andi. r22, r17, 0x01 + bne- major_0x148ec_0x58 + subfc r17, r19, r17 + subfe. r16, r18, r16 + bge- major_0x148ec_0x54 + li r16, 0x00 + li r17, 0x00 + +major_0x148ec_0x54 + stw r16, 0x00d8(r31) + +major_0x148ec_0x58 + rlwinm r17, r17, 0, 0, 30 + stw r17, 0x00dc(r31) + lwz r17, 0x00fc(r31) + andi. r22, r17, 0x01 + bne- major_0x148ec_0x78 + subf. r17, r19, r17 + bge- major_0x148ec_0x78 + li r17, 0x00 + +major_0x148ec_0x78 + rlwinm r17, r17, 0, 0, 30 + stw r17, 0x00fc(r31) + stw r8, 0x00c8(r30) + stw r9, 0x00cc(r30) + lwz r18, 0x0008(r30) + lbz r19, 0x0019(r30) + lwz r18, 0x0010(r18) + cmpwi cr1, r19, 0x02 + cmpwi r18, 0x00 + bge- cr1, major_0x148ec_0xb0 + lwz r16, 0x00fc(r30) + lwz r17, 0x00fc(r30) + srawi r16, r16, 31 + b major_0x148ec_0xc8 + +major_0x148ec_0xb0 + lwz r16, 0x00d8(r30) + lwz r17, 0x00dc(r30) + bgt- major_0x148ec_0xc8 + bne- cr1, major_0x148ec_0xc8 + li r16, 0x00 + lwz r17, 0x0f2c(r1) + +major_0x148ec_0xc8 + addc r17, r17, r9 + adde r16, r16, r8 + stw r17, -0x02e4(r21) + stw r16, -0x02e8(r21) + mtxer r20 + li r16, 0x01 + stb r16, -0x0309(r21) + b major_0x13060_0xc + + + +; major_0x149d4 + +; Xrefs: +; setup +; KCStopScheduling +; major_0x0c8b4 +; major_0x0ccf4 +; MPCall_28 +; major_0x0d35c +; MPCall_8 +; major_0x130f0 +; major_0x142dc +; major_0x14bcc +; CommonPIHPath + +; Almost certain this was hand-written. Has a typo, and some +; instructions the compiler rarely touched, and is in hot path. + +major_0x149d4 ; OUTSIDE REFERER + crset cr1_eq + b major_0x149d4_0xc + +CalculateTimeslice ; OUTSIDE REFERER + crclr cr1_eq + +major_0x149d4_0xc: + + + lwz r18, Task.QueueMember + LLL.Next(r8) + lwz r16, Task.QueueMember + LLL.Freeform(r8) ; points to RDYQ + cmpwi r18, 0 + lwz r17, Task.Weight(r8) + beq+ Local_Panic + + + lwz r18, ReadyQueue.TotalWeight(r16) + + lwz r19, ReadyQueue.Timecake(r16) + lwz r20, ReadyQueue.Timecake + 4(r16) + + ; Skip some stuff if this task accounts for all of the weight in this queue + cmpw r18, r17 + rlwinm r17, r17, 10, 0, 22 ; looks like a typo; should multiply wt by 1024 + beq- @is_only_weighted_task + + divw. r18, r17, r18 ; how many slices do I get in 1024? + + ble- @no_time ; fall back on one slice worth of ticks per 1024 slices + + ; r19 || r20 = (r19 || r20) * r18 = ticks owed to this task in 1024 slices + mulhw r17, r20, r18 + mullw r19, r19, r18 + mullw r20, r20, r18 + add r19, r19, r17 +@no_time + + ; Set r19 || r20 to ticks owed to this task per RoundRobinTime + + srwi r20, r20, 10 + rlwimi r20, r19, 22, 0, 9 + srwi r19, r19, 10 +@is_only_weighted_task + + + + ; Now r19 || r20 contains something meaningful + + lbz r18, Task.Priority(r8) + cmpwi r18, Task.kNominalPriority + + ori r20, r20, 1 ; why make this odd? + + bge- @priority_nominal_or_idle + + ; Critical or latency protection: save the low word of (ticks per round) + stw r20, 0x00fc(r8) + blr + +@priority_nominal_or_idle + + lwz r16, 0x00d8(r8) + lwz r17, 0x00dc(r8) + beq- cr1, @definitely_do_the_thing + cmpwi r16, 0 + cmplwi cr2, r17, 0 + blt- @definitely_do_the_thing + bgtlr- + bgtlr- cr2 + +@definitely_do_the_thing + mfxer r18 + addc r20, r20, r17 + adde r19, r19, r16 + mtxer r18 + rlwinm r20, r20, 0, 0, 30 + + li r18, 1 + stw r19, 0x00d8(r8) + stw r20, 0x00dc(r8) + stw r18, 0x00fc(r8) + blr + + + + +; clear_cr0_lt + +; Xrefs: +; major_0x130f0 + +clear_cr0_lt ; OUTSIDE REFERER + crclr cr0_lt + blr + + + +; major_0x14a98 + +; Xrefs: +; IntDecrementer +; major_0x142dc + +major_0x14a98 ; OUTSIDE REFERER + rlwinm r8, r7, 10, 0, 0 + lwz r18, 0x0658(r1) + nand. r8, r8, r8 + lwz r17, 0x00cc(r18) + bltlr- + cmpwi r17, 0x00 + rlwinm r9, r17, 0, 22, 22 + blt- major_0x14a98_0x54 + cmpwi r9, 0x200 + lwz r16, 0x01cc(r18) + beq- major_0x14a98_0x48 + clrlwi r8, r16, 0x1d + clrlwi r9, r17, 0x1c + cmpwi r8, 0x06 + bgt- major_0x14a98_0x48 + cmpw r8, r9 + bltlr- + cmpw r8, r8 + +major_0x14a98_0x48 + ori r17, r17, 0x100 + stw r17, 0x00cc(r18) + blr + +major_0x14a98_0x54 + clrlwi r17, r17, 0x01 + stw r17, 0x00cc(r18) + blr + + + +; major_0x14af8 + +; Xrefs: +; setup +; major_0x02ccc +; MPCall_6 +; KCYieldWithHint +; KCStopScheduling +; KCMarkPMFTask +; MPCall_16 +; major_0x0c8b4 +; major_0x0ccf4 +; MPCall_21 +; MPCall_28 +; MPCall_26 +; MPCall_50 +; major_0x0d35c +; major_0x0dce8 +; MPCall_8 +; MPCall_9 +; MPCall_14 +; KCThrowException +; MPCall_58 +; MPCall_114 +; major_0x130f0 +; CommonPIHPath + +major_0x14af8 ; OUTSIDE REFERER + lwz r16, 0x0064(r8) + mfsprg r15, 0 + rlwinm. r16, r16, 0, 25, 26 + bne- major_0x14af8_0xa0 + addi r16, r15, -0x340 + lbz r17, 0x0019(r8) + lwz r19, 0x0008(r16) + lwz r14, 0x0024(r19) + cmpwi r14, 0x02 + blt- major_0x14af8_0xa0 + lwz r14, 0x0020(r19) + mr r18, r16 + b major_0x14af8_0x3c + +major_0x14af8_0x34 + lwz r16, 0x0008(r19) + +major_0x14af8_0x38 + addi r16, r16, -0x08 + +major_0x14af8_0x3c + addi r14, r14, -0x01 + lbz r20, 0x0229(r16) + lwz r21, 0x0018(r16) + cmpw cr1, r17, r20 + rlwinm. r21, r21, 0, 28, 28 + bge- cr1, major_0x14af8_0x60 + beq- major_0x14af8_0x60 + mr r17, r20 + mr r18, r16 + +major_0x14af8_0x60 + lwz r16, 0x0010(r16) + cmpwi cr1, r14, 0x00 + cmpw r16, r19 + ble- cr1, major_0x14af8_0x78 + beq+ major_0x14af8_0x34 + b major_0x14af8_0x38 + +major_0x14af8_0x78 + lbz r16, 0x0019(r8) + cmpw r17, r16 + blelr- + lhz r17, -0x0116(r15) + lhz r18, 0x022a(r18) + cmpw r18, r17 + bne- major_0x14af8_0xb4 + +major_0x14af8_0x94 + li r16, 0x01 + stb r16, -0x0118(r15) + blr + + +major_0x14af8_0xa0 ; OUTSIDE REFERER + mfsprg r15, 0 + lhz r18, Task.MysteryHalf(r8) + lhz r17, -0x0116(r15) ; somewhere in EWA + cmpw r17, r18 + beq+ major_0x14af8_0x94 + +major_0x14af8_0xb4 + lwz r9, 0x0ee0(r1) + addi r9, r9, 0x01 + stw r9, 0x0ee0(r1) + li r16, 0x05 + stw r16, -0x0238(r15) + stw r18, -0x0234(r15) + li r8, 0x02 + +; r7 = flags +; r8 = usually 2? + b SIGP + + + +; major_0x14bcc + +; Xrefs: +; "EvenMore" +; "SecondCpuCodeViaPtr" + +major_0x14bcc + + ; This func gets passed its CPU struct in r3, + ; which lets us find its real EWA pointer. + addi r1, r3, CPU.EWA + mtsprg 0, r1 + + ; Get KDP + lwz r1, EWA.PA_KDP(r1) + lwz r8, KDP.HTABORG(r1) + lwz r9, KDP.PTEGMask(r1) + + ; Set SDR1 (same as the main ones) + srwi r9, r9, 16 + or r9, r8, r9 + sync + mtspr sdr1, r9 + sync + + _log 'Sch: Symmetric Multiprocessing^n' + _log 'Sch: On CPU ' + lhz r8, 0x022a(r3) + bl Printh + _log ' ID-' + lwz r8, -0x0340(r3) + bl Printw + + _log ' SDR1: ' + mr r8, r9 + bl Printw + + _log ' CpuDescriptor: ' + mr r8, r3 + bl Printw + + _log ' KDP: ' + mr r8, r1 + bl Printw + + _log '^n' + + bl PagingFlushTLB + + _log 'Sch: Starting SMP idle task^n' + + _Lock PSA.SchLock, scratch1=r27, scratch2=r28 + + mfsprg r14, 0 + lwz r31, 0x001c(r3) + li r8, 0x00 + stb r8, -0x0118(r14) + lwz r6, 0x0088(r31) + stw r31, -0x0008(r14) + stw r6, -0x0014(r14) + lwz r7, 0x0000(r6) + lwz r28, 0x0004(r6) + stw r7, -0x0010(r14) + stw r28, -0x000c(r14) + lwz r8, 0x00f0(r31) + mtsprg 3, r8 + lwz r10, 0x00fc(r6) + lwz r11, 0x00a4(r6) + lwz r13, 0x00dc(r6) + lwz r12, 0x00ec(r6) + _log 'EWA ' + mr r8, r14 + bl Printw + _log 'ContextPtr ' + mr r8, r6 + bl Printw + _log 'Flags ' + mr r8, r7 + bl Printw + _log 'Enables ' + mr r8, r28 + bl Printw + _log '^n' + addi r16, r31, 0x08 + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + li r16, 0x02 + stb r16, 0x0018(r31) + lwz r16, 0x0064(r31) + ori r16, r16, 0x20 + stw r16, 0x0064(r31) + mfsprg r14, 0 + lbz r8, 0x0019(r31) + stb r8, -0x0117(r14) + lwz r8, 0x0070(r31) + li r9, 0x00 + bl SetAddrSpcRegisters + _log 'Adding idle task 0x' + mr r8, r31 + bl Printw + _log 'to the ready queue^n' + mr r8, r31 + bl TaskReadyAsPrev + bl CalculateTimeslice + lwz r16, 0x0018(r3) + ori r16, r16, 0x08 + stw r16, 0x0018(r3) + lwz r17, 0x0008(r3) + lwz r16, 0x0024(r17) + addi r16, r16, 0x01 + stw r16, 0x0024(r17) + li r8, 0x01 + mtspr dec, r8 + _log 'Sch: Going to ' + mr r8, r11 + bl Printw + mr r8, r10 + bl Printw + _log '^n' + mr r30, r31 + b major_0x142dc_0xd8 + b major_0x142dc_0x58 + + + +IdleCode + li r31, 0 + lisori r20, 'idle' + lisori r21, 'task' + lisori r22, 'RenŽ' + lisori r23, 'Alan' + lisori r24, 'Jim ' + lisori r25, 'Alex' + lisori r26, 'Derr' + lisori r27, 'ick ' + +@loop + + ; Kill some time + mr r30, r1 + mr r1, r2 + mr r2, r5 + mr r5, r6 + mr r6, r7 + mr r7, r8 + mr r8, r9 + mr r9, r10 + mr r10, r11 + mr r11, r12 + mr r12, r13 + mr r13, r14 + mr r14, r15 + mr r15, r16 + mr r16, r17 + mr r17, r18 + mr r18, r19 + mr r19, r20 + mr r20, r21 + mr r21, r22 + mr r22, r23 + mr r23, r24 + mr r24, r25 + mr r25, r26 + mr r26, r27 + mr r27, r28 + mr r28, r29 + mr r29, r30 + + ; If the loop started with r31==0, make another round of syscalls + cmpwi r31, 0 + beq- @make_calls + + ; But if we counted down from >=1 to zero, then just do that again + subi r31, r31, 1 + cmplwi r31, 0 + bgt- @startagain + +@make_calls + + ; KCCpuPlugin(12, 1) + li r3, 12 + li r4, 1 + li r0, 46 + sc + cmpwi r3, 0 + beq- @startagain + + li r3, 1 + li r4, 0 + twi 31, r31, 5 ; unconditional + cmpwi r3, 0 + beq- @startagain + + lisori r31, 10*1000000 + +@startagain + b @loop + + + +StopProcessor + mfmsr r30 + andi. r29, r30, 0x7fff + mtmsr r29 + mfsprg r2, 0 + lwz r1, -0x0004(r2) + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + addi r31, r2, -0x340 + lwz r16, 0x0018(r31) + rlwinm r16, r16, 0, 29, 27 + stw r16, 0x0018(r31) + sync + lwz r17, 0x0008(r31) + lwz r16, 0x0024(r17) + addi r16, r16, -0x01 + stw r16, 0x0024(r17) + lwz r8, 0x001c(r31) + li r9, 0x00 + stw r9, 0x001c(r31) + bl major_0x13e4c + addi r16, r1, -0xa44 + addi r17, r8, 0x08 + stw r16, 0x0000(r17) + stw r16, 0x0008(r17) + lwz r18, 0x000c(r16) + stw r18, 0x000c(r17) + stw r17, 0x0008(r18) + stw r17, 0x000c(r16) + bl TasksFuncThatIsNotAMPCall + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, StopProcessor_0xa0 + mflr r16 + bl panic + +StopProcessor_0xa0 + stw r16, PSA.SchLock + Lock.Count(r1) + _log 'SIGP kStopProcessor^n' + li r3, 0x03 + lhz r4, 0x022a(r31) + li r0, 0x2e + twi 31, r31, 0x08 + _log 'Stop didn''t work - going to sleep.^n' + +StopProcessor_0x10c + lis r5, 0x7fff + ori r5, r5, 0xffff + mtdec r5 + li r3, 0x06 + li r4, 0x00 + twi 31, r31, 0x05 + b StopProcessor_0x10c \ No newline at end of file diff --git a/NanoKernel/NKScreenConsole.s b/NanoKernel/NKScreenConsole.s new file mode 100644 index 0000000..21f22f7 --- /dev/null +++ b/NanoKernel/NKScreenConsole.s @@ -0,0 +1,1313 @@ +ScreenConsoleX equ 24 +ScreenConsoleY equ 22 + + + if &TYPE('ExtraNKLogging') != 'UNDEFINED' +ScreenConsoleWidth equ 800-24 +ScreenConsoleHeight equ 900-22 + else +ScreenConsoleWidth equ 588 +ScreenConsoleHeight equ 502 + endif + +ScreenConsoleBG equ 0xfffffeee +ScreenConsoleFG equ 0x44444444 + + + + align 6 ; odd! +; InitScreenConsole + +; Xrefs: +; replace_old_kernel +; new_world +; undo_failed_kernel_replacement + +; > 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, -0x0404(r1) + stw r30, -0x0400(r1) + li r29, ScreenConsoleY + sth r29, -0x0360(r1) + li r29, ScreenConsoleX + sth r29, -0x035e(r1) + li r29, ScreenConsoleHeight + sth r29, -0x035c(r1) + li r29, ScreenConsoleWidth + sth r29, -0x035a(r1) + li r29, 0x5e + sth r29, -0x0358(r1) + li r29, 0x30 + sth r29, -0x0356(r1) + lmw r29, -0x0110(r1) + blr + + + +; ScreenConsole_putchar + +; Xrefs: +; PrintS +; Printd +; print_digity_common +; Printc + +; > r1 = kdp + +ScreenConsole_putchar ; OUTSIDE REFERER + lwz r30, -0x0404(r1) + stb r29, 0x0000(r30) + addi r30, r30, 0x01 + andi. r29, r30, 0xfff + stw r30, -0x0404(r1) + bnelr- + lwz r30, -0x1000(r30) + stw r30, -0x0404(r1) + blr + + + +; ScreenConsole_redraw + +; Xrefs: +; MPCall_133 +; PrintS + +; > r1 = kdp + +ScreenConsole_redraw ; OUTSIDE REFERER + stmw r2, -0x03e8(r1) + mflr r14 + mfcr r15 + stw r14, -0x03f0(r1) + stw r15, -0x03ec(r1) + addi r26, r1, -0x690 + mfsprg r2, 3 + mtsprg 3, r26 + lwz r26, 0x0edc(r1) + andi. r26, r26, 0x08 + beq- major_0x18bec + lwz r14, -0x0404(r1) + lwz r15, -0x0400(r1) + cmpw r14, r15 + beq- major_0x18bec + bl major_0x18c18 + +ScreenConsole_redraw_0x40 + li r9, 0x00 + li r10, 0x00 + li r25, 0x20 + bl major_0x18e54 + bl major_0x19018 + mflr r21 + bl major_0x18e24 + bl funny_thing + bl major_0x18e24 + bl funny_thing + lwz r14, -0x0404(r1) + lwz r15, -0x0400(r1) + li r16, 0x00 + +ScreenConsole_redraw_0x74 + cmpw r14, r15 + beq- ScreenConsole_redraw_0x118 + lbz r25, 0x0000(r15) + addi r15, r15, 0x01 + andi. r17, r15, 0xfff + bne+ ScreenConsole_redraw_0x90 + lwz r15, -0x1000(r15) + +ScreenConsole_redraw_0x90 + cmplwi r25, 0x0d + cmplwi cr1, r25, 0x0a + beq+ ScreenConsole_redraw_0x74 + beq- cr1, ScreenConsole_redraw_0xc0 + cmpwi r25, 0x00 + cmpwi cr1, r25, 0x07 + beq+ ScreenConsole_redraw_0x74 + beq- cr1, ScreenConsole_redraw_0xe4 + bl major_0x18e54 + lhz r17, -0x0358(r1) + cmpw r9, r17 + blt+ ScreenConsole_redraw_0x74 + +ScreenConsole_redraw_0xc0 + cmpwi r16, 0x00 + bne- ScreenConsole_redraw_0xcc + mr r16, r15 + +ScreenConsole_redraw_0xcc + bl funny_thing + lhz r17, -0x0356(r1) + cmpw r10, r17 + blt+ ScreenConsole_redraw_0x74 + stw r16, -0x0400(r1) + b ScreenConsole_redraw_0x40 + +ScreenConsole_redraw_0xe4 + lhz r17, -0x0356(r1) + addi r17, r17, -0x01 + cmpw r10, r17 + blt+ ScreenConsole_redraw_0x74 + lwz r17, -0x0438(r1) + slwi r25, r17, 2 + add r25, r25, r17 + mfspr r17, dec + subf r17, r25, r17 + +ScreenConsole_redraw_0x108 + mfspr r25, dec + subf. r25, r17, r25 + bge+ ScreenConsole_redraw_0x108 + b ScreenConsole_redraw_0x74 + +ScreenConsole_redraw_0x118 + bl funny_thing_0x8 + mfspr r31, pvr + rlwinm. r31, r31, 0, 0, 14 + li r31, 0x00 + bne- ScreenConsole_redraw_0x140 + mtspr ibat3l, r31 + isync + mtspr ibat3u, r18 + mtspr ibat3l, r19 + b ScreenConsole_redraw_0x150 + +ScreenConsole_redraw_0x140 + mtspr dbat3u, r31 + isync + mtspr dbat3l, r19 + mtspr dbat3u, r18 + +ScreenConsole_redraw_0x150 + isync + + + +; major_0x18bec + +; Xrefs: +; ScreenConsole_redraw +; major_0x18c18 + +major_0x18bec ; OUTSIDE REFERER + mtsprg 3, r2 + lwz r14, -0x03f0(r1) + lwz r15, -0x03ec(r1) + mtlr r14 + mtcr r15 + lmw r2, -0x03e8(r1) + blr + + + +; major_0x18c08 + +; Xrefs: +; major_0x18c18 + +major_0x18c08 ; OUTSIDE REFERER + mfsrin r31, r27 + cmpwi r31, 0x00 + beqlr- + b PagingFunc4 + + + +; major_0x18c18 + +; Xrefs: +; ScreenConsole_redraw + +major_0x18c18 ; OUTSIDE REFERER + mflr r13 + lwz r27, -0x08f8(r1) + cmpwi r27, 0x00 + bne- major_0x18c18_0x40 + lwz r27, 0x0630(r1) + lhz r31, 0x0378(r27) + cmpwi r31, 0x00 + beq- major_0x18c18_0x40 + lwz r31, 0x037c(r27) + cmpwi r31, 0x00 + beq- major_0x18c18_0x40 + stw r31, -0x08f8(r1) + lhz r31, 0x0384(r27) + sth r31, -0x08f4(r1) + lhz r31, 0x0386(r27) + sth r31, -0x08f2(r1) + +major_0x18c18_0x40 + li r27, 0x8a4 + bl major_0x18c08 + beq- major_0x18c18_0xe0 + rlwimi. r27, r31, 0, 0, 19 + ble- major_0x18c18_0xe0 + lwz r27, 0x0000(r27) + cmpwi r27, 0x00 + ble- major_0x18c18_0xe0 + bl major_0x18c08 + beq- major_0x18c18_0xe0 + rlwimi r27, r31, 0, 0, 19 + lwz r27, 0x0000(r27) + cmpwi r27, 0x00 + ble- major_0x18c18_0xe0 + addi r27, r27, 0x16 + bl major_0x18c08 + beq- major_0x18c18_0xe0 + rlwimi r27, r31, 0, 0, 19 + lwz r27, 0x0000(r27) + cmpwi r27, 0x00 + ble- major_0x18c18_0xe0 + bl major_0x18c08 + beq- major_0x18c18_0xe0 + rlwimi r27, r31, 0, 0, 19 + lwz r27, 0x0000(r27) + cmpwi r27, 0x00 + ble- major_0x18c18_0xe0 + bl major_0x18c08 + beq- major_0x18c18_0xe0 + rlwimi r27, r31, 0, 0, 19 + lwz r3, 0x0000(r27) + lhz r5, 0x0004(r27) + andi. r5, r5, 0x7fff + lhz r6, 0x0020(r27) + srwi r6, r6, 3 + cmplwi r6, 0x08 + bgt- major_0x18c18_0xe0 + stw r3, -0x08f8(r1) + sth r5, -0x08f4(r1) + sth r6, -0x08f2(r1) + +major_0x18c18_0xe0 + lwz r3, -0x08f8(r1) + lhz r5, -0x08f4(r1) + lhz r6, -0x08f2(r1) + cmpwi r3, 0x00 + bne- major_0x18d5c + b major_0x18bec + + + +; major_0x18d10 + + dc.l 0x3c608180 + dc.l 0x60630200 + dc.l 0x38a00340 + dc.l 0x38c00001 + dc.l 0x4800003c + dc.l 0x3c60a600 + dc.l 0x60638000 + dc.l 0x38a00400 + dc.l 0x38c00001 + dc.l 0x48000028 + dc.l 0x3c609600 + dc.l 0x60638000 + dc.l 0x38a00400 + dc.l 0x38c00001 + dc.l 0x48000014 + dc.l 0x3c609600 + dc.l 0x60638000 + dc.l 0x38a00400 + dc.l 0x38c00001 + + + +; major_0x18d5c + +; Xrefs: +; major_0x18c18 + +major_0x18d5c ; OUTSIDE REFERER + cmpwi cr4, r6, 0x02 + bl major_0x19ab0 + blt- cr4, major_0x18d5c_0x18 + bl major_0x19b00 + beq- cr4, major_0x18d5c_0x18 + bl load_log_colours + +major_0x18d5c_0x18 + mflr r24 + mfspr r31, pvr + rlwinm. r31, r31, 0, 0, 14 + li r31, 0x00 + bne- major_0x18d5c_0x3c + mfspr r19, ibat3l + mfspr r18, ibat3u + mtspr ibat3l, r31 + b major_0x18d5c_0x48 + +major_0x18d5c_0x3c + mfspr r18, dbat3u + mfspr r19, dbat3l + mtspr dbat3u, r31 + +major_0x18d5c_0x48 + isync + rlwinm r29, r3, 0, 0, 7 + beq- major_0x18d5c_0x70 + li r30, 0x7e + or r30, r30, r29 + li r31, 0x32 + or r31, r31, r29 + mtspr dbat3l, r31 + mtspr dbat3u, r30 + b major_0x18d5c_0x88 + +major_0x18d5c_0x70 + li r30, 0x32 + or r30, r30, r29 + li r31, 0x5f + or r31, r31, r29 + mtspr ibat3u, r30 + mtspr ibat3l, r31 + +major_0x18d5c_0x88 + isync + mfmsr r22 + lhz r29, -0x0360(r1) + lhz r30, -0x035c(r1) + subf r29, r29, r30 + li r30, 0x0a + divw r29, r29, r30 + sth r29, -0x0356(r1) + lhz r29, -0x035e(r1) + lhz r30, -0x035a(r1) + subf r29, r29, r30 + li r30, 0x06 + divw r29, r29, r30 + sth r29, -0x0358(r1) + mtlr r13 + blr + + + +; major_0x18e24 + +; Xrefs: +; ScreenConsole_redraw + +major_0x18e24 ; OUTSIDE REFERER + mflr r12 + +major_0x18e24_0x4 + lhz r25, -0x0358(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 + +major_0x18e24_0x28 + mtlr r12 + blr + + + +; major_0x18e54 + +; Xrefs: +; ScreenConsole_redraw +; major_0x18e24 +; funny_thing + +major_0x18e54 ; OUTSIDE REFERER + mflr r13 + cmpwi cr4, r6, 0x02 + bl load_log_font + mflr r23 + add r23, r25, r23 + mulli r27, r5, 0x0a + mullw r27, r27, r10 + mulli r7, r9, 0x06 + mullw r7, r7, r6 + add r7, r7, r27 + add r7, r7, r3 + lhz r27, -0x0360(r1) + lhz r28, -0x035e(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 + +major_0x18e54_0x50 + beq- cr4, major_0x18e54_0x9c + bgt- cr4, major_0x18e54_0xe0 + lbz r27, 0x0000(r23) + rlwinm r27, r27, 28, 28, 29 + lwzx r28, r24, r27 + lbz r27, 0x0000(r23) + rlwinm r27, r27, 0, 26, 29 + lwzx r27, r24, r27 + ori r22, r22, 0x10 + mtmsr r22 + isync + sth r28, 0x0000(r7) + sth r27, 0x0004(r7) + srwi r27, r27, 16 + sth r27, 0x0002(r7) + rlwinm r22, r22, 0, 28, 26 + mtmsr r22 + isync + b major_0x18e54_0x160 + +major_0x18e54_0x9c + lbz r28, 0x0000(r23) + rlwinm r27, r28, 28, 28, 29 + lwzx r27, r24, r27 + rlwinm r29, r28, 30, 28, 29 + lwzx r29, r24, r29 + rlwinm r30, r28, 0, 28, 29 + lwzx r30, r24, r30 + ori r22, r22, 0x10 + mtmsr r22 + isync + stw r27, 0x0000(r7) + stw r29, 0x0004(r7) + stw r30, 0x0008(r7) + rlwinm r22, r22, 0, 28, 26 + mtmsr r22 + isync + b major_0x18e54_0x160 + +major_0x18e54_0xe0 + lbz r28, 0x0000(r23) + rlwinm r27, r28, 27, 29, 29 + lwzx r27, r24, r27 + rlwinm r29, r28, 28, 29, 29 + lwzx r29, r24, r29 + rlwinm r30, r28, 29, 29, 29 + lwzx r30, r24, r30 + rlwinm r31, r28, 30, 29, 29 + lwzx r31, r24, r31 + ori r22, r22, 0x10 + mtmsr r22 + isync + stw r27, 0x0000(r7) + stw r29, 0x0004(r7) + stw r30, 0x0008(r7) + stw r31, 0x000c(r7) + rlwinm r22, r22, 0, 28, 26 + mtmsr r22 + isync + rlwinm r27, r28, 31, 29, 29 + lwzx r27, r24, r27 + rlwinm r29, r28, 0, 29, 29 + lwzx r29, r24, r29 + ori r22, r22, 0x10 + mtmsr r22 + isync + stw r27, 0x0010(r7) + stw r29, 0x0014(r7) + rlwinm r22, r22, 0, 28, 26 + mtmsr r22 + isync + b major_0x18e54_0x160 + +major_0x18e54_0x160 + addi r8, r8, 0x01 + cmplwi r8, 0x0a + add r7, r7, r5 + addi r23, r23, 0x100 + blt+ major_0x18e54_0x50 + +major_0x18e54_0x174 + addi r9, r9, 0x01 + mtlr r13 + blr + + + +; funny_thing + +; Xrefs: +; ScreenConsole_redraw + +funny_thing ; OUTSIDE REFERER + crclr cr2_eq + b funny_thing_0xc + +funny_thing_0x8 ; OUTSIDE REFERER + crset cr2_eq + +funny_thing_0xc + mflr r12 + +funny_thing_0x10 + lhz r25, -0x0358(r1) + cmpw r9, r25 + bge- funny_thing_0x28 + li r25, 0x20 + bl major_0x18e54 + b funny_thing_0x10 + +funny_thing_0x28 + beq- cr2, funny_thing_0x3c + li r9, 0x00 + addi r10, r10, 0x01 + li r25, 0x20 + bl major_0x18e54 + +funny_thing_0x3c + mtlr r12 + blr + + + +; Xrefs: +; ScreenConsole_redraw + +major_0x19018 ; OUTSIDE REFERER + + blrl + + string CString + dc.b ' NanoKernel Log ' + dc.b ' -------------- ' + align 2 + + + +; Unfortunately inaccessible + + blrl + + string CString + dc.b ' System Termination ' + dc.b ' ------------------ ' + align 2 + + + +; load_log_font + +; Xrefs: +; major_0x18e54 + +load_log_font ; OUTSIDE REFERER + blrl + dc.l 0x907070f0 + dc.l 0xf0f06000 + dc.l 0xe0008090 + dc.l 0xf0007070 + dc.l 0xe0e0e0e0 + dc.l 0xe09070f0 + dc.l 0x70f070f0 + dc.l 0xf070e090 + dc.l 0 + dc.l 0x20000000 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0x00000008 + dc.l 0x20400000 + dc.l 0x50200010 + dc.l 0x68505000 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0x70000000 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0x00001800 + dc.l 0 + dc.l 0 + dc.l 0x18000000 + dc.l 0x00000040 + dc.l 0x68680000 + dc.l 0 + dc.l 0 + dc.l 0x00500000 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0xd0808080 + dc.l 0x80809000 + dc.l 0x90008090 + dc.l 0x80088080 + dc.l 0x90909090 + dc.l 0x90d08080 + dc.l 0x80808080 + dc.l 0x80809090 + dc.l 0x00205050 + dc.l 0x70786020 + dc.l 0x10200000 + dc.l 0x00000008 + dc.l 0x70207070 + dc.l 0x10f870f8 + dc.l 0x70700000 + dc.l 0x00000070 + dc.l 0x7070f070 + dc.l 0xf0f8f870 + dc.l 0x88700888 + dc.l 0x80888870 + dc.l 0xf070f070 + dc.l 0xf8888888 + dc.l 0x8888f830 + dc.l 0x40302000 + dc.l 0x20008000 + dc.l 0x08001800 + dc.l 0x80202080 + dc.l 0x20000000 + dc.l 0 + dc.l 0x20000000 + dc.l 0x00000010 + dc.l 0x20200000 + dc.l 0x00500020 + dc.l 0xb8000010 + dc.l 0x40200068 + dc.l 0x30001040 + dc.l 0x20001040 + dc.l 0x20006810 + dc.l 0x40200068 + dc.l 0x10402000 + dc.l 0x00300060 + dc.l 0x88007830 + dc.l 0 + dc.l 0 + dc.l 0x00001040 + dc.l 0x880020f8 + dc.l 0xf8002038 + dc.l 0x30700000 + dc.l 0x20200000 + dc.l 0x20000000 + dc.l 0x00000020 + dc.l 0xb0b00000 + dc.l 0x00005050 + dc.l 0x20600000 + dc.l 0x50000000 + dc.l 0x00003030 + dc.l 0 + dc.l 0x40202010 + dc.l 0x00201020 + dc.l 0x00201020 + dc.l 0x30201020 + dc.l 0x20002068 + dc.l 0x70482020 + dc.l 0x00280050 + dc.l 0xb06060e0 + dc.l 0xe0e0f020 + dc.l 0xe0208090 + dc.l 0xe0086060 + dc.l 0x90909090 + dc.l 0x90b060e0 + dc.l 0x80e060e0 + dc.l 0xe0b0e090 + dc.l 0x002050f8 + dc.l 0xa8a89020 + dc.l 0x20102020 + dc.l 0x00000008 + dc.l 0x88608888 + dc.l 0x30808008 + dc.l 0x88880000 + dc.l 0x10004088 + dc.l 0x88888888 + dc.l 0x88808088 + dc.l 0x88200890 + dc.l 0x80d8c888 + dc.l 0x88888888 + dc.l 0x20888888 + dc.l 0x88880820 + dc.l 0x40105000 + dc.l 0x10008000 + dc.l 0x08002000 + dc.l 0x80000080 + dc.l 0x20000000 + dc.l 0 + dc.l 0x20000000 + dc.l 0x00000010 + dc.l 0x20206800 + dc.l 0x702070f8 + dc.l 0x88708820 + dc.l 0x205050b0 + dc.l 0x48002020 + dc.l 0x50502020 + dc.l 0x5050b020 + dc.l 0x205050b0 + dc.l 0x20205050 + dc.l 0x20480090 + dc.l 0x4800a848 + dc.l 0xe0e0f410 + dc.l 0x50007870 + dc.l 0x00202020 + dc.l 0x50001048 + dc.l 0x50002048 + dc.l 0x48880000 + dc.l 0x00000018 + dc.l 0x20082000 + dc.l 0x00000070 + dc.l 0x70707800 + dc.l 0x0000a050 + dc.l 0x40200000 + dc.l 0x00880884 + dc.l 0x00004048 + dc.l 0x20000000 + dc.l 0xa0505020 + dc.l 0x50102050 + dc.l 0x50102050 + dc.l 0x20102050 + dc.l 0x100050b0 + dc.l 0x00300050 + dc.l 0x00500020 + dc.l 0x90101080 + dc.l 0x80809070 + dc.l 0x9030f0a0 + dc.l 0x80281010 + dc.l 0x90909090 + dc.l 0x90901080 + dc.l 0x80801080 + dc.l 0x8090a090 + dc.l 0x00200050 + dc.l 0xa0b0a000 + dc.l 0x4008a820 + dc.l 0x00000010 + dc.l 0x98200808 + dc.l 0x50f0f008 + dc.l 0x88882020 + dc.l 0x20f82008 + dc.l 0xe8888880 + dc.l 0x88808080 + dc.l 0x882008a0 + dc.l 0x80a8a888 + dc.l 0x88888880 + dc.l 0x20888888 + dc.l 0x50881020 + dc.l 0x20108800 + dc.l 0x0078f070 + dc.l 0x78707078 + dc.l 0xf0202090 + dc.l 0x20f0b070 + dc.l 0xf078b078 + dc.l 0x708888a8 + dc.l 0x8888f810 + dc.l 0x2020b000 + dc.l 0x88708880 + dc.l 0xc8888800 + dc.l 0 + dc.l 0x30700000 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0x70482080 + dc.l 0xa000a888 + dc.l 0x10105c20 + dc.l 0x0010a088 + dc.l 0xd8204010 + dc.l 0xf8901820 + dc.l 0x50f82048 + dc.l 0x48887070 + dc.l 0x20200010 + dc.l 0x20702000 + dc.l 0x00000088 + dc.l 0x8888a000 + dc.l 0x0000a0a0 + dc.l 0x60402020 + dc.l 0x88881030 + dc.l 0x0000e8e8 + dc.l 0x70000000 + dc.l 0x40000000 + dc.l 0 + dc.l 0 + dc.l 0x58000000 + dc.l 0x00200000 + dc.l 0x00000020 + dc.l 0 + dc.l 0x90e0e0f0 + dc.l 0xf0f09070 + dc.l 0xe0f80040 + dc.l 0x8068e0e0 + dc.l 0xe0e0e0e0 + dc.l 0xe090e0f0 + dc.l 0x70f0e0f0 + dc.l 0x80609060 + dc.l 0x002000f8 + dc.l 0x70504000 + dc.l 0x400870f8 + dc.l 0x00f80010 + dc.l 0xa8201030 + dc.l 0x90088810 + dc.l 0x70880000 + dc.l 0x40001010 + dc.l 0xa8f8f080 + dc.l 0x88f0f098 + dc.l 0xf82008c0 + dc.l 0x80889888 + dc.l 0xf088f070 + dc.l 0x20888888 + dc.l 0x20502020 + dc.l 0x20100000 + dc.l 0x00888888 + dc.l 0x88882088 + dc.l 0x882020a0 + dc.l 0x20a8c888 + dc.l 0x8888c880 + dc.l 0x208888a8 + dc.l 0x50881020 + dc.l 0x20100000 + dc.l 0x88888080 + dc.l 0xa8888878 + dc.l 0x78787878 + dc.l 0x78887070 + dc.l 0x70702020 + dc.l 0x2020b070 + dc.l 0x70707070 + dc.l 0x88888888 + dc.l 0x203070e0 + dc.l 0x9030a890 + dc.l 0xc8685c00 + dc.l 0x00f8a098 + dc.l 0xa8f82020 + dc.l 0x20902810 + dc.l 0x50502038 + dc.l 0x3088a898 + dc.l 0x4020f820 + dc.l 0x70885048 + dc.l 0x90000088 + dc.l 0x8888a050 + dc.l 0 + dc.l 0x00000050 + dc.l 0x88882048 + dc.l 0x00004848 + dc.l 0x20200000 + dc.l 0x1c70f870 + dc.l 0xf8f87070 + dc.l 0x70707070 + dc.l 0xf0708888 + dc.l 0x88200000 + dc.l 0 + dc.l 0 + dc.l 0x48484848 + dc.l 0x003048f8 + dc.l 0x38307800 + dc.l 0x78f83830 + dc.l 0x00107070 + dc.l 0x10484870 + dc.l 0x00007038 + dc.l 0x38383838 + dc.l 0x00200050 + dc.l 0x2868a800 + dc.l 0x4008a820 + dc.l 0x00000020 + dc.l 0xc8202008 + dc.l 0xf8088820 + dc.l 0x88782000 + dc.l 0x20f82020 + dc.l 0xf0888880 + dc.l 0x88808088 + dc.l 0x882088a0 + dc.l 0x80888888 + dc.l 0x80888808 + dc.l 0x208888a8 + dc.l 0x50204020 + dc.l 0x10100000 + dc.l 0x00888880 + dc.l 0x88f82088 + dc.l 0x882020e0 + dc.l 0x20a88888 + dc.l 0x88888070 + dc.l 0x208888a8 + dc.l 0x20882010 + dc.l 0x20200000 + dc.l 0xf88880f0 + dc.l 0x98888888 + dc.l 0x88888888 + dc.l 0x88808888 + dc.l 0x88882020 + dc.l 0x2020c888 + dc.l 0x88888888 + dc.l 0x88888888 + dc.l 0x2000a880 + dc.l 0x48307890 + dc.l 0xa8880000 + dc.l 0x0020f0a8 + dc.l 0xd8201040 + dc.l 0xf8904820 + dc.l 0x50502000 + dc.l 0x0088b8a8 + dc.l 0x802008a0 + dc.l 0x20705090 + dc.l 0x480000f8 + dc.l 0xf888b0a8 + dc.l 0x70f80000 + dc.l 0x0000f888 + dc.l 0x88504048 + dc.l 0x10404848 + dc.l 0x20000000 + dc.l 0xe0888088 + dc.l 0x80802020 + dc.l 0x20208888 + dc.l 0xf8888888 + dc.l 0x88200000 + dc.l 0 + dc.l 0 + dc.l 0x48484848 + dc.l 0x384850f8 + dc.l 0x40204038 + dc.l 0x40601048 + dc.l 0x40300808 + dc.l 0x30504848 + dc.l 0x48884840 + dc.l 0x40404040 + dc.l 0 + dc.l 0xa8a89000 + dc.l 0x20102020 + dc.l 0x00000020 + dc.l 0x88204088 + dc.l 0x10888820 + dc.l 0x88080000 + dc.l 0x10004000 + dc.l 0x80888888 + dc.l 0x88808088 + dc.l 0x88208890 + dc.l 0x80888888 + dc.l 0x80888888 + dc.l 0x208850d8 + dc.l 0x88208020 + dc.l 0x10100000 + dc.l 0x00988880 + dc.l 0x88802088 + dc.l 0x88202090 + dc.l 0x20a88888 + dc.l 0x88888008 + dc.l 0x209850a8 + dc.l 0x50884010 + dc.l 0x20200000 + dc.l 0x88f88080 + dc.l 0x88888888 + dc.l 0x88888888 + dc.l 0x8880f8f8 + dc.l 0xf8f82020 + dc.l 0x20208888 + dc.l 0x88888888 + dc.l 0x88888888 + dc.l 0x2000a080 + dc.l 0x28002888 + dc.l 0xc8680000 + dc.l 0x00f8a0c8 + dc.l 0x00200000 + dc.l 0x20904848 + dc.l 0x50502078 + dc.l 0x7850a0c8 + dc.l 0x88200840 + dc.l 0x20808890 + dc.l 0x48000088 + dc.l 0x8888a0b8 + dc.l 0 + dc.l 0x00000050 + dc.l 0x88208030 + dc.l 0x20204848 + dc.l 0x20000000 + dc.l 0x00f8f0f8 + dc.l 0xf0f02020 + dc.l 0x20208888 + dc.l 0xf8888888 + dc.l 0x88200000 + dc.l 0 + dc.l 0 + dc.l 0x48783030 + dc.l 0x10487020 + dc.l 0x30007010 + dc.l 0x70201048 + dc.l 0x40101030 + dc.l 0x78703070 + dc.l 0x68d87040 + dc.l 0x30303030 + dc.l 0x00200000 + dc.l 0x70906800 + dc.l 0x10200000 + dc.l 0x20002040 + dc.l 0x7020f870 + dc.l 0x10707020 + dc.l 0x70700020 + dc.l 0x00000020 + dc.l 0x7088f070 + dc.l 0xf0f88070 + dc.l 0x88707088 + dc.l 0xf8888870 + dc.l 0x80708870 + dc.l 0x20702088 + dc.l 0x8820f830 + dc.l 0x083000f8 + dc.l 0x0068f078 + dc.l 0x78782078 + dc.l 0x88202088 + dc.l 0x20a88870 + dc.l 0xf07880f0 + dc.l 0x18682050 + dc.l 0x8878f810 + dc.l 0x20200000 + dc.l 0x88888880 + dc.l 0x88888898 + dc.l 0x98989898 + dc.l 0x98788080 + dc.l 0x80802020 + dc.l 0x20208888 + dc.l 0x88888888 + dc.l 0x98989898 + dc.l 0x0000a888 + dc.l 0x90002888 + dc.l 0xb0100000 + dc.l 0x0040a088 + dc.l 0x00f87070 + dc.l 0x20e830f8 + dc.l 0x50502000 + dc.l 0x00d87870 + dc.l 0x70200040 + dc.l 0x2000f848 + dc.l 0x90a80088 + dc.l 0x8888a0a0 + dc.l 0 + dc.l 0x00002020 + dc.l 0x78200084 + dc.l 0x10404848 + dc.l 0x70002050 + dc.l 0x48888088 + dc.l 0x80802020 + dc.l 0x20208888 + dc.l 0x50888888 + dc.l 0x88200000 + dc.l 0 + dc.l 0x20001000 + dc.l 0x30484848 + dc.l 0x10584800 + dc.l 0x08004010 + dc.l 0x40001048 + dc.l 0x40102008 + dc.l 0x10481048 + dc.l 0x58a84840 + dc.l 0x08080808 + dc.l 0 + dc.l 0x20000000 + dc.l 0 + dc.l 0x20000040 + dc.l 0 + dc.l 0 + dc.l 0x00000020 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0x00080000 + dc.l 0 + dc.l 0 + dc.l 0x08000000 + dc.l 0 + dc.l 0x00000008 + dc.l 0x00002000 + dc.l 0 + dc.l 0x80080000 + dc.l 0 + dc.l 0x00080008 + dc.l 0x20400000 + dc.l 0x888870f8 + dc.l 0x88707068 + dc.l 0x68686868 + dc.l 0x68207878 + dc.l 0x78782020 + dc.l 0x20208870 + dc.l 0x70707070 + dc.l 0x68686868 + dc.l 0x000070f0 + dc.l 0x880028b0 + dc.l 0x00e00000 + dc.l 0x0000b870 + dc.l 0 + dc.l 0x00800000 + dc.l 0x00002000 + dc.l 0 + dc.l 0 + dc.l 0x20000000 + dc.l 0x00000088 + dc.l 0x88707858 + dc.l 0 + dc.l 0 + dc.l 0x08200000 + dc.l 0 + dc.l 0x20002050 + dc.l 0xb488f888 + dc.l 0xf8f87070 + dc.l 0x70708888 + dc.l 0x00887070 + dc.l 0x70000000 + dc.l 0 + dc.l 0x10002000 + dc.l 0x00484848 + dc.l 0x10384800 + dc.l 0x70004010 + dc.l 0x40003830 + dc.l 0x70387870 + dc.l 0x10481070 + dc.l 0x48887038 + dc.l 0x70707070 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0x40000000 + dc.l 0 + dc.l 0 + dc.l 0x00000040 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0x00000070 + dc.l 0x0000c000 + dc.l 0 + dc.l 0x80080000 + dc.l 0 + dc.l 0x00700000 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0x00400000 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0x00002000 + dc.l 0x70000080 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0x00800000 + dc.l 0x0000c000 + dc.l 0 + dc.l 0 + dc.l 0xc0000000 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0 + dc.l 0x70000000 + dc.l 0 + dc.l 0x000040a0 + dc.l 0x48000000 + dc.l 0 + dc.l 0x00007070 + dc.l 0x00700000 + dc.l 0 + dc.l 0 + dc.l 0x30003000 + + + +; major_0x19ab0 + +; Xrefs: +; major_0x18d5c + + align 4 + +major_0x19ab0 ; OUTSIDE REFERER + blrl + dc.l 0x06060606 + dc.l 0x060606ff + dc.l 0x0606ff06 + dc.l 0x0606ffff + dc.l 0x06ff0606 + dc.l 0x06ff06ff + dc.l 0x06ffff06 + dc.l 0x06ffffff + dc.l 0xff060606 + dc.l 0xff0606ff + dc.l 0xff06ff06 + dc.l 0xff06ffff + dc.l 0xffff0606 + dc.l 0xffff06ff + dc.l 0xffffff06 + dc.l 0xffffffff + + + +; major_0x19b00 + +; Xrefs: +; major_0x18d5c + + align 4 + +major_0x19b00 ; OUTSIDE REFERER + blrl + dc.l 0xff7eff7e + dc.l 0xff7e0000 + dc.l 0x0000ff7e + dc.l 0 + + + +; load_log_colours + +; Each word is RGB with the high byte ignored. Background +; and text. + +; Xrefs: +; major_0x18d5c + + align 4 + +load_log_colours ; OUTSIDE REFERER + blrl + dc.l ScreenConsoleBG + dc.l ScreenConsoleFG diff --git a/NanoKernel/NKSleep.s b/NanoKernel/NKSleep.s new file mode 100644 index 0000000..4fc5d61 --- /dev/null +++ b/NanoKernel/NKSleep.s @@ -0,0 +1,598 @@ +; Implements two MPCalls that seem to have something to do with COHGs + + + +; Make conditional calls easier +Local_Panic set * + b panic + +Local_ReturnParamErrFromMPCall + b ReturnParamErrFromMPCall + +Local_ReturnInsufficientResourcesErrFromMPCall + b ReturnMPCallOOM + +Local_CommonMPCallReturnPath + b CommonMPCallReturnPath + + + + DeclareMPCall 102, MPCall_102 + +MPCall_102 ; OUTSIDE REFERER + mfsprg r9, 0 + lwz r8, EWA.CPUBase + CPU.CgrpList + LLL.Freeform(r9) + lwz r9, CoherenceGroup.ScheduledCpuCount(r8) + cmpwi r9, 1 + bgt+ Local_ReturnInsufficientResourcesErrFromMPCall + bl CoherenceFunc + mr r4, r8 + mr r5, r9 + b ReturnZeroFromMPCall + + + + DeclareMPCall 103, MPCall_103 + +MPCall_103 ; OUTSIDE REFERER + mfsprg r9, 0 + lwz r8, EWA.CPUBase + CPU.CgrpList + LLL.Freeform(r9) + lwz r9, CoherenceGroup.ScheduledCpuCount(r8) + cmpwi r9, 1 + bgt+ Local_ReturnInsufficientResourcesErrFromMPCall + + clrlwi. r8, r5, 20 + bne+ Local_ReturnParamErrFromMPCall + bl CoherenceFunc + cmpw r3, r8 + blt+ Local_ReturnParamErrFromMPCall + cmpw r4, r9 + blt+ Local_ReturnParamErrFromMPCall + bl PagingFlushTLB + mfsprg r9, 0 + mfxer r8 + stw r13, 0x00dc(r6) + stw r8, 0x00d4(r6) + stw r12, 0x00ec(r6) + mfctr r8 + stw r10, 0x00fc(r6) + stw r8, 0x00f4(r6) + + mfpvr r8 + rlwinm. r8, r8, 0, 0, 14 + bne- @not_601 + mfspr r8, mq + stw r8, ContextBlock.MQ(r6) +@not_601 + + lwz r8, EWA.r1(r9) + stw r8, ContextBlock.r1(r6) + stw r2, ContextBlock.r2(r6) + stw r3, ContextBlock.r3(r6) + andi. r8, r11, MSR_FP + stw r4, ContextBlock.r4(r6) + lwz r8, EWA.r6(r9) + stw r5, ContextBlock.r5(r6) + stw r8, ContextBlock.r6(r6) + bnel+ Save_f0_f31 + rlwinm. r8, r7, 0, 12, 12 ; flags + bnel+ Save_v0_v31 + + lwz r3, ContextBlock.r3(r6) + lwz r4, ContextBlock.r4(r6) + lwz r5, ContextBlock.r5(r6) + + stw r11,ContextBlock.MSR(r6) + mr r27, r5 + addi r29, r1, 800 + bl PagingFunc3 + beq+ Local_ReturnInsufficientResourcesErrFromMPCall + rlwimi r27, r31, 0, 0, 19 + mr r17, r27 + addi r15, r17, 0x34 + srwi r3, r3, 12 + +MPCall_103_0xc8 + mr r27, r5 + addi r29, r1, 800 + bl PagingFunc3 + beq+ Local_ReturnInsufficientResourcesErrFromMPCall + rlwimi r27, r31, 0, 0, 19 + stwu r27, 0x0004(r15) + addi r3, r3, -0x01 + addi r5, r5, 0x1000 + cmpwi r3, 0x00 + bge+ MPCall_103_0xc8 + addi r15, r15, 0x04 + subf r15, r17, r15 + stw r15, 0x0034(r17) + mfsprg r15, 0 + stw r15, 0x0024(r17) + mfsprg r8, 3 + stw r8, 0x0028(r17) + +MPCall_103_0x10c + mftbu r8 + mftb r9, 0x10c + mftbu r16 + cmpw r16, r8 + bne- MPCall_103_0x10c + stw r8, -0x0278(r15) + stw r9, -0x0274(r15) + mr r29, r17 + li r16, 0x06 + stw r16, -0x0238(r15) + lhz r16, -0x0116(r15) + stw r16, -0x0234(r15) + li r8, 0x02 + +; r7 = flags +; r8 = usually 2? + bl SIGP + mr r17, r29 + mfsdr1 r8 + stw r8, 0x002c(r17) + rlwinm r9, r8, 16, 7, 15 + cntlzw r18, r9 + li r9, -0x01 + srw r9, r9, r18 + addi r9, r9, 0x01 + stw r9, 0x000c(r17) + rlwinm r8, r8, 0, 0, 15 + stw r8, 0x0010(r17) + lis r8, 0x00 + ori r8, r8, 0xc000 + stw r8, 0x0018(r17) + lis r9, 0x00 + ori r9, r9, 0xa000 + subf r8, r9, r1 + stw r8, 0x001c(r17) + addi r9, r1, 120 + lis r31, 0x00 + li r14, 0x00 + lwz r29, 0x0034(r17) + add r29, r29, r17 + +MPCall_103_0x1a0 + lwzu r30, 0x0008(r9) + +MPCall_103_0x1a4 + lwz r18, 0x0004(r30) + lhz r15, 0x0000(r30) + andi. r19, r18, 0xe00 + lhz r16, 0x0002(r30) + cmplwi r19, 0xc00 + bne- MPCall_103_0x1dc + addi r16, r16, 0x01 + slwi r16, r16, 2 + stw r16, 0x0000(r29) + rlwinm r18, r18, 22, 0, 29 + stw r18, 0x0004(r29) + addi r29, r29, 0x0c + addi r14, r14, 0x01 + b MPCall_103_0x1fc + +MPCall_103_0x1dc + cmpwi r15, 0x00 + bne- MPCall_103_0x1fc + cmplwi r16, 0xffff + bne- MPCall_103_0x1fc + addis r31, r31, 0x1000 + cmpwi r31, 0x00 + bne+ MPCall_103_0x1a0 + b MPCall_103_0x204 + +MPCall_103_0x1fc + addi r30, r30, 0x08 + b MPCall_103_0x1a4 + +MPCall_103_0x204 + lwz r16, -0x0aa0(r1) + +MPCall_103_0x208 + lwz r31, 0x0000(r16) + add r18, r31, r16 + lwz r19, 0x0000(r18) + addi r31, r31, 0x18 + stw r31, 0x0000(r29) + stw r16, 0x0004(r29) + addi r29, r29, 0x0c + addi r14, r14, 0x01 + cmpwi r19, 0x00 + beq- MPCall_103_0x238 + add r16, r19, r18 + b MPCall_103_0x208 + +MPCall_103_0x238 + addi r19, r1, -0x450 + lwz r31, -0x0448(r1) + +MPCall_103_0x240 + cmpw r31, r19 + beq- MPCall_103_0x264 + li r18, 0x10 + stw r18, 0x0000(r29) + stw r31, 0x0004(r29) + addi r29, r29, 0x0c + addi r14, r14, 0x01 + lwz r31, 0x0008(r31) + b MPCall_103_0x240 + +MPCall_103_0x264 + stw r14, 0x0030(r17) + lwz r30, 0x0034(r17) + add r30, r30, r17 + +MPCall_103_0x270 + subf r8, r17, r29 + stw r8, 0x0008(r30) + lwz r24, 0x0004(r30) + mr r25, r8 + lwz r26, 0x0000(r30) + add r29, r29, r26 + bl AnotherCoherenceFunc + addi r30, r30, 0x0c + addi r14, r14, -0x01 + cmpwi r14, 0x00 + bne+ MPCall_103_0x270 + subf r8, r17, r29 + stw r8, 0x0020(r17) + lwz r24, 0x001c(r17) + mr r25, r8 + lwz r26, 0x0018(r17) + add r29, r29, r26 + bl AnotherCoherenceFunc + subf r8, r17, r29 + stw r8, 0x0014(r17) + lwz r24, 0x0010(r17) + mr r25, r8 + lwz r26, 0x000c(r17) + add r29, r29, r26 + bl AnotherCoherenceFunc + bl LoadStateRestoreFunc + mflr r9 + stw r9, 0x0000(r17) + lwz r8, -0x0900(r1) + stw r8, 0x0008(r17) + li r8, 0x00 + stw r8, 0x0004(r17) + mfsprg r15, 0 + li r16, 0x11 + stw r16, -0x0238(r15) + lhz r16, -0x0116(r15) + stw r16, -0x0234(r15) + li r8, 0x02 + +; r7 = flags +; r8 = usually 2? + bl SIGP + li r3, 0x00 + b Local_CommonMPCallReturnPath + + + +LoadStateRestoreFunc + blrl + + mr r17, r3 + lwz r24, 0x0014(r17) + lwz r25, 0x0010(r17) + lwz r26, 0x000c(r17) + bl YetAnotherCoherenceFunc + lwz r24, 0x002c(r17) + mtsdr1 r24 + lwz r24, 0x0020(r17) + lwz r25, 0x001c(r17) + lwz r26, 0x0018(r17) + bl YetAnotherCoherenceFunc + lwz r14, 0x0030(r17) + lwz r30, 0x0034(r17) + add r30, r30, r17 + +RestoreKernelState_0x38 + lwz r24, 0x0008(r30) + lwz r25, 0x0004(r30) + lwz r26, 0x0000(r30) + bl YetAnotherCoherenceFunc + addi r30, r30, 0x0c + addi r14, r14, -0x01 + cmpwi r14, 0x00 + bne+ RestoreKernelState_0x38 + lwz r16, 0x0024(r17) + mtsprg 0, r16 + lwz r8, 0x0028(r17) + mtsprg 3, r8 + lwz r1, -0x0004(r16) + lwz r6, -0x0014(r16) + lwz r7, -0x0010(r16) + li r8, -0x01 + stw r8, 0x0004(r17) + lwz r8, -0x0278(r16) + lwz r9, -0x0274(r16) + li r16, 0x01 + mttb r16 + mttbu r8 + mttb r9 + mtdec r16 + _log 'Resuming saved kernel state^n' + lwz r8, 0x00d4(r6) + lwz r13, 0x00dc(r6) + mtxer r8 + lwz r12, 0x00ec(r6) + lwz r8, 0x00f4(r6) + lwz r10, 0x00fc(r6) + mtctr r8 + lwz r11, 0x00a4(r6) + mfpvr r8 + rlwinm. r8, r8, 0, 0, 14 + bne- RestoreKernelState_0xf8 + lwz r8, 0x00c4(r6) + DIALECT POWER + mtmq r8 + DIALECT PowerPC + +RestoreKernelState_0xf8 + lwz r4, -0x0020(r1) + li r2, 0x01 + sth r2, 0x0910(r1) + li r2, -0x01 + stw r2, 0x0912(r1) + stw r2, 0x0f90(r4) + xoris r2, r2, 0x100 + stw r2, 0x0f8c(r4) + li r2, 0x00 + stw r2, 0x0f28(r4) + stw r2, 0x0f2c(r4) + lwz r2, 0x0114(r6) + lwz r4, 0x0124(r6) + lwz r5, 0x012c(r6) + lwz r29, 0x00d8(r6) + cmpwi r29, 0x00 + lwz r8, 0x0210(r29) + beq- RestoreKernelState_0x144 + mtspr vrsave, r8 + +RestoreKernelState_0x144 + bl PagingFlushTLB + addi r29, r1, 0x5e0 + bl PagingFunc2AndAHalf + mfsprg r15, 0 + lwz r8, -0x001c(r15) + li r9, 0x00 + bl SetAddrSpcRegisters + isync + mfsprg r15, 0 + li r16, 0x07 + stw r16, -0x0238(r15) + lhz r16, -0x0116(r15) + stw r16, -0x0234(r15) + li r8, 0x02 + +; r7 = flags +; r8 = usually 2? + bl SIGP + mfsprg r15, 0 + li r16, 0x11 + stw r16, -0x0238(r15) + lhz r16, -0x0116(r15) + stw r16, -0x0234(r15) + li r8, 0x02 + +; r7 = flags +; r8 = usually 2? + bl SIGP + li r3, 0x00 + b Local_CommonMPCallReturnPath + + + +; Xrefs: +; MPCall_102 +; MPCall_103 +; AnotherCoherenceFunc +; YetAnotherCoherenceFunc + +CoherenceFunc ; OUTSIDE REFERER + li r24, 0x00 + mfsdr1 r16 + rlwinm r16, r16, 16, 7, 15 + cntlzw r17, r16 + li r16, -0x01 + srw r16, r16, r17 + addi r8, r16, 0x01 + addi r9, r1, 120 + lis r31, 0x00 + li r19, 0x00 + li r14, 0x00 + +CoherenceFunc_0x2c + lwzu r17, 0x0008(r9) + +CoherenceFunc_0x30 + lwz r18, 0x0004(r17) + lhz r15, 0x0000(r17) + andi. r18, r18, 0xe00 + lhz r16, 0x0002(r17) + cmplwi r18, 0xc00 + bne- CoherenceFunc_0x58 + addi r16, r16, 0x01 + add r19, r19, r16 + addi r14, r14, 0x01 + b CoherenceFunc_0x78 + +CoherenceFunc_0x58 + cmpwi r15, 0x00 + bne- CoherenceFunc_0x78 + cmplwi r16, 0xffff + bne- CoherenceFunc_0x78 + addis r31, r31, 0x1000 + cmpwi r31, 0x00 + bne+ CoherenceFunc_0x2c + b CoherenceFunc_0x80 + +CoherenceFunc_0x78 + addi r17, r17, 0x08 + b CoherenceFunc_0x30 + +CoherenceFunc_0x80 + slwi r19, r19, 2 + add r8, r8, r19 + cmpwi r14, 0x00 + beq+ Local_ReturnInsufficientResourcesErrFromMPCall + mulli r9, r14, 0x0c + add r8, r8, r9 + add r24, r24, r9 + li r9, 0x00 + li r14, 0x00 + lwz r16, -0x0aa0(r1) + +CoherenceFunc_0xa8 + lwz r17, 0x0000(r16) + add r18, r17, r16 + lwz r19, 0x0000(r18) + add r9, r9, r17 + addi r9, r9, 0x18 + addi r14, r14, 0x01 + cmpwi r19, 0x00 + add r16, r19, r18 + beq- CoherenceFunc_0xd0 + b CoherenceFunc_0xa8 + +CoherenceFunc_0xd0 + addi r16, r1, -0x450 + lwz r18, -0x0448(r1) + +CoherenceFunc_0xd8 + cmpw r18, r16 + beq- CoherenceFunc_0xf0 + addi r9, r9, 0x10 + addi r14, r14, 0x01 + lwz r18, 0x0008(r18) + b CoherenceFunc_0xd8 + +CoherenceFunc_0xf0 + add r8, r8, r9 + mulli r9, r14, 0x0c + add r8, r8, r9 + add r24, r24, r9 + lis r9, 0x00 + ori r9, r9, 0xc000 + add r8, r8, r9 + lis r9, 0x00 + ori r9, r9, 0x3c + add r8, r8, r9 + add r24, r24, r9 + srwi r9, r8, 12 + slwi r9, r9, 2 + addi r9, r9, 0x04 + add r8, r8, r9 + add r24, r24, r9 + mr r9, r24 + blr + +CoherenceFunc_0x138 ; OUTSIDE REFERER + srwi r23, r28, 12 + slwi r23, r23, 2 + add r23, r23, r17 + lwz r23, 0x0038(r23) + rlwimi r23, r28, 0, 20, 31 + blr + + + +; Xrefs: +; MPCall_103 + +AnotherCoherenceFunc ; OUTSIDE REFERER + cmpwi r26, 0x00 + beqlr- + mflr r22 + addi r24, r24, -0x01 + mr r28, r25 + +AnotherCoherenceFunc_0x14 + bl CoherenceFunc_0x138 + clrlwi r25, r23, 0x14 + subfic r25, r25, 0x1000 + cmplw r25, r26 + blt- AnotherCoherenceFunc_0x2c + mr r25, r26 + +AnotherCoherenceFunc_0x2c + mr r19, r23 + mr r20, r25 + addi r23, r23, -0x01 + mtctr r25 + +AnotherCoherenceFunc_0x3c + lbzu r27, 0x0001(r24) + stbu r27, 0x0001(r23) + bdnz+ AnotherCoherenceFunc_0x3c + bl YetAnotherCoherenceFunc_0x64 + subf r26, r25, r26 + add r28, r28, r25 + cmpwi r26, 0x00 + bne+ AnotherCoherenceFunc_0x14 + mtlr r22 + blr + + + +; Xrefs: +; RestoreKernelState +; AnotherCoherenceFunc + +YetAnotherCoherenceFunc ; OUTSIDE REFERER + cmpwi r26, 0x00 + beqlr- + mr r19, r25 + mr r20, r26 + mflr r22 + addi r25, r25, -0x01 + mr r28, r24 + +YetAnotherCoherenceFunc_0x1c + bl CoherenceFunc_0x138 + clrlwi r24, r23, 0x14 + subfic r24, r24, 0x1000 + cmplw r24, r26 + blt- YetAnotherCoherenceFunc_0x34 + mr r24, r26 + +YetAnotherCoherenceFunc_0x34 + addi r23, r23, -0x01 + mtctr r24 + +YetAnotherCoherenceFunc_0x3c + lbzu r27, 0x0001(r23) + stbu r27, 0x0001(r25) + bdnz+ YetAnotherCoherenceFunc_0x3c + add r28, r28, r24 + subf r26, r24, r26 + cmpwi r26, 0x00 + bne+ YetAnotherCoherenceFunc_0x1c + bl YetAnotherCoherenceFunc_0x64 + mtlr r22 + blr + +YetAnotherCoherenceFunc_0x64 ; OUTSIDE REFERER + sync + isync + lhz r21, 0x0f4a(r1) + addi r15, r21, -0x01 + add r20, r19, r20 + add r20, r20, r15 + neg r15, r21 + and r19, r19, r15 + and r20, r20, r15 + +YetAnotherCoherenceFunc_0x88 + dcbst 0, r19 + sync + icbi 0, r19 + add r19, r19, r21 + cmpw r19, r20 + blt+ YetAnotherCoherenceFunc_0x88 + sync + isync + blr diff --git a/NanoKernel/NKTasks.s b/NanoKernel/NKTasks.s new file mode 100644 index 0000000..f62ae57 --- /dev/null +++ b/NanoKernel/NKTasks.s @@ -0,0 +1,1569 @@ +; This file mostly provides MPCall implementations related to multitasking. +; We won't understand this very well until someone disassembles MPLibrary. + + + +Local_Panic set * + b panic + + + + DeclareMPCall 7, MPCall_7 + +MPCall_7 ; OUTSIDE REFERER + rlwinm. r8, r5, 0, 31, 28 + bne+ ReturnMPCallOOM + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Process.kIDClass + + mr r30, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + lwz r16, 0x0008(r30) + rlwinm. r17, r16, 0, 30, 30 + bne+ ReleaseAndReturnMPCallOOM + bl CreateTask + mr. r31, r8 + beq+ major_0x0af60 + mfsprg r15, 0 + lwz r17, 0x0000(r31) + stw r17, 0x0154(r6) + lhz r16, -0x0116(r15) + sth r16, 0x001a(r31) + addi r16, r31, 0x100 + lwz r17, 0x013c(r6) + stw r17, 0x0164(r16) + lwz r17, 0x0144(r6) + stw r17, 0x00fc(r16) + lwz r17, 0x014c(r6) + stw r17, 0x0114(r16) + stw r4, 0x0098(r31) + lwz r17, 0x0134(r6) + stw r17, 0x00ec(r31) + lwz r16, 0x0064(r28) + rlwinm. r8, r5, 0, 30, 30 + beq- MPCall_7_0x98 + oris r16, r16, 0x40 + +MPCall_7_0x98 + rlwinm. r8, r5, 0, 29, 29 + beq- MPCall_7_0xa4 + oris r16, r16, 0x02 + +MPCall_7_0xa4 + stw r16, 0x0064(r28) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +;Xrefs: +;setup +;major_0x0bb20 +;major_0x0e284 + + +; ARG EmpiricalCpuFeatures r7, Process *r8 +; RET Task *r8 + + +CreateTask + + ; Save arg and lr for later + mr r27, r8 + mflr r29 + + +; Create the 1k TASK struct in the pool and give it an ID, leave ptr in r28 + + li r8, 0x400 ;Task.Size + bl PoolAlloc + mr. r28, r8 + beq- @fail_oom + + ; Allocate an opaque ID for it + li r9, Task.kIDClass + bl MakeID + cmpwi r8, 0 + beq- @fail_no_id + + ; ID and sign it + stw r8, Task.ID(r28) + + lisori r8, Task.kSignature + stw r8, Task.Signature(r28) + + ; Untitled. Usually set to creator code of owning MacOS process + lisori r8, '----' + stw r8, Task.Name(r28) + + + +; Create a subordinate notification struct -- NOPENOPENOPE + + li r8, 0x1c ;Notification.Size + bl PoolAlloc + cmpwi r8, 0 + stw r8, Task.NotificationPtr(r28) + beq- @fail_note_oom + + lisori r9, 'note' + stw r9, 4(r8) + + + +; Create a semaphore struct inside the task +; (NOT a semaphore queue) + + addi r16, r28, Task.SemaphoreLLL + StartLoadingWord r17, 'SEMA' + stw r16, LLL.Next(r16) + FinishLoadingWord + stw r16, LLL.Prev(r16) + stw r17, LLL.Signature(r16) + + + +; Might be part of the SEMA? + + li r16, 1 + stw r16, Task.One(r28) + li r16, 0 + stw r16, Task.Zero(r28) + + + +; Allocate an ID for the SEMA + + addi r8, r28, Task.SemaphoreLLL + li r9, Semaphore.kIDClass + bl MakeID + cmpwi r8, 0 + beq- @fail_semq_no_id + stw r8, Task.SemaphoreLLL + LLL.Freeform(r28) + + + +; Allocate a vector (i.e. AltiVec) save area + + ; Conditionally, that is + rlwinm. r8, r7, 0, PSA.AVFeatureBit, PSA.AVFeatureBit + beq- @non_altivec_task + + ; Allocate and check + li r8, 0x214 ;VectorSaveArea.Size ; room for v registers plus 20 bytes + bl PoolAlloc + andi. r9, r8, 16-1 ; Sanity check: aligned to size of vector register? + cmpwi cr1, r8, 0 + bne+ Local_Panic + beq- cr1, @fail_altivec_oom + + ; Point to it (from inside and outside the ECB-like area) + stw r8, Task.VectorSaveArea(r28) + stw r8, Task.ContextBlock + ContextBlock.VectorSaveArea(r28) + + ; Fill the actual register parts with 0x7fffffff + li r16, 0x80 ;VectorSaveArea.RegisterAreaSize / 4 + subi r8, r8, 4 + lwz r17, PSA.VectorRegInitWord(r1) +@vectorarea_copyloop + subi r16, r16, 1 + stwu r17, 4(r8) + cmpwi r16, 0 + bgt+ @vectorarea_copyloop +@non_altivec_task + + + ; Some unexplored DLYQ stuff + + addi r16, r1, PSA.DelayQueue + addi r17, r28, 0x08 + stw r16, 0x0000(r17) + stw r16, 0x0008(r17) + lwz r18, 0x000c(r16) + stw r18, 0x000c(r17) + stw r17, 0x0008(r18) + stw r17, 0x000c(r16) + + + + li r16, 0 + stb r16, Task.MysteryByte1(r28) + + li r16, 9 + stw r16, 0x0064(r28) + + lisori r16, 'time' + stw r16, 0x0024(r28) + + li r16, 1 + stb r16, 0x0036(r28) + + li r16, 100 + stw r16, Task.Weight(r28) + + li r16, Task.kNominalPriority + stb r16, Task.Priority(r28) + + + + + addi r16, r28, Task.ContextBlock + stw r16, Task.ContextBlockPtr(r28) ; overridden to real ECB on blue + + lwz r16, PSA.EmpiricalCpuFeatures(r1) + stw r16, Task.ContextBlock + ContextBlock.EmpiricalCpuFeatures(r28) + + lwz r16, PSA.UserModeMSR(r1) + stw r16, Task.ContextBlock + ContextBlock.MSR(r28) + + addi r16, r1, KDP.YellowVecBase + stw r16, Task.YellowVecTblPtr(r28) + + li r16, 0 + lwz r17, Task.NotificationPtr(r28) + stw r16, 0x0010(r17) + stw r16, 0x0014(r17) + li r16, -0x7271 + stw r16, 0x0018(r17) + + li r16, 0 + stw r16, Task.Zero1(r28) + stw r16, Task.Zero2(r28) + stw r16, Task.Zero3(r28) + stw r16, Task.Zero4(r28) + stw r16, Task.Zero5(r28) + + ; Who knows that these are for + bl GetTime + + stw r8, Task.CreateTime1(r28) + stw r9, Task.CreateTime1 + 4(r28) + + stw r8, Task.CreateTime2(r28) + stw r9, Task.CreateTime2 + 4(r28) + + stw r8, Task.CreateTime3(r28) + stw r9, Task.CreateTime3 + 4(r28) + + lwz r16, KDP.NanoKernelInfo + NKNanoKernelInfo.TaskCount(r1) + addi r16, r16, 1 + stw r16, KDP.NanoKernelInfo + NKNanoKernelInfo.TaskCount(r1) + + ; Squeeze some info (including my owning process) out of the passed PROC ptr + stw r27, Task.OwningProcessPtr(r28) + + lwz r16, Process.ID(r27) + stw r16, Task.ProcessID(r28) + + lwz r17, Process.SystemAddressSpacePtr(r27) + stw r17, Task.AddressSpacePtr(r28) + + lwz r16, AddressSpace.TaskCount(r17) + addi r16, r16, 1 + stw r16, AddressSpace.TaskCount(r17) + + lwz r16, Process.TaskCount(r27) + addi r16, r16, 1 + stw r16, Process.TaskCount(r27) + + ; Restore and return + mtlr r29 + mr r8, r28 + blr + +@fail_altivec_oom + lwz r8, 0x00a0(r28) + bl DeleteID + +@fail_semq_no_id: + lwz r8, 0x009c(r28) + bl PoolFree + +@fail_note_oom + lwz r8, 0x0000(r28) + bl DeleteID + +@fail_no_id + mr r8, r28 + bl PoolFree + +@fail_oom + mtlr r29 + li r8, 0 + blr + + + + DeclareMPCall 8, MPCall_8 + +MPCall_8 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Task.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + lbz r16, 0x0018(r31) + cmpwi r16, 0x00 + bne+ ReleaseAndReturnMPCallOOM + lwz r8, 0x0060(r31) + +; r8 = id + bl LookupID + cmpwi r9, Process.kIDClass + + bne+ Local_Panic + lwz r16, 0x0008(r8) + rlwinm. r17, r16, 0, 30, 30 + bne+ ReleaseAndReturnMPCallOOM + lwz r30, 0x0088(r31) + stw r4, 0x0074(r31) + stw r5, 0x011c(r30) + lwz r18, 0x009c(r31) + lwz r16, 0x0134(r6) + lwz r17, 0x013c(r6) + stw r16, 0x0010(r18) + stw r17, 0x0014(r18) + lwz r16, 0x0144(r6) + lwz r17, 0x014c(r6) + stw r16, 0x010c(r30) + stw r16, 0x0090(r31) + stw r17, 0x0094(r31) + addi r16, r31, 0x08 + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + mr r8, r31 + bl TaskReadyAsPrev + bl CalculateTimeslice + bl major_0x14af8 + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; MPCall_9 + +; Xrefs: +; kcMPDispatch +; MPCall_58 + + DeclareMPCall 9, MPCall_9 + +MPCall_9 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID +; r8 = something not sure what +; r9 = 0:inval, 1:proc, 2:task, 3:timer, 4:q, 5:sema, 6:cr, 7:cpu, 8:addrspc, 9:evtg, 10:cohg, 11:area, 12:not, 13:log + + mr r31, r8 + cmpwi r9, 0x02 + bne+ ReleaseAndReturnMPCallInvalidIDErr + lwz r16, 0x0064(r31) + lbz r17, 0x0018(r31) + rlwinm. r18, r16, 0, 30, 30 + cmpwi cr1, r17, 0x00 + bne+ ReleaseAndReturnMPCallOOM + beq- cr1, MPCall_9_0xb4 + mfsprg r15, 0 + lhz r18, 0x001a(r31) + lhz r17, -0x0116(r15) + cmpw r18, r17 + beq- MPCall_9_0xe0 + ori r16, r16, 0x400 + stw r16, 0x0064(r31) + li r17, 0x01 + stb r17, 0x0019(r31) + mr r8, r31 + bl major_0x14af8_0xa0 + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, MPCall_9_0x8c + mflr r16 + bl panic + +MPCall_9_0x8c + stw r16, PSA.SchLock + Lock.Count(r1) + subi r10, r10, 4 + b MPCall_6_0x78 + +MPCall_9_0x98 ; OUTSIDE REFERER + lwz r16, 0x0064(r31) + ori r16, r16, 0x02 + stw r16, 0x0064(r31) + lwz r17, 0x009c(r31) + li r16, -0x7271 + stw r16, 0x0018(r17) + b MPCall_9_0xfc + +MPCall_9_0xb4 + ori r16, r16, 0x02 + stw r16, 0x0064(r31) + addi r16, r31, 0x08 + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + b MPCall_9_0xf0 + +MPCall_9_0xe0 + ori r16, r16, 0x02 + stw r16, 0x0064(r31) + mr r8, r31 + bl major_0x13e4c + +MPCall_9_0xf0 + lwz r17, 0x009c(r31) + li r3, 0x00 + stw r4, 0x0018(r17) + +MPCall_9_0xfc + addi r16, r1, -0xa44 + addi r17, r31, 0x08 + stw r16, 0x0000(r17) + stw r16, 0x0008(r17) + lwz r18, 0x000c(r16) + stw r18, 0x000c(r17) + stw r17, 0x0008(r18) + stw r17, 0x000c(r16) + lbz r8, 0x0037(r31) + cmpwi r8, 0x01 + bne- MPCall_9_0x130 + addi r8, r31, 0x20 + bl major_0x136c8 + +MPCall_9_0x130 + lwz r8, 0x0098(r31) + +; r8 = id + bl LookupID + cmpwi r9, Queue.kIDClass + + li r18, 0x00 + lwz r17, 0x009c(r31) + stw r18, 0x009c(r31) + bne- MPCall_9_0x15c + mr r31, r8 + mr r8, r17 + bl major_0x0c8b4 + b ReleaseAndReturnMPCall + +MPCall_9_0x15c + mr r8, r17 + bl PoolFree + b ReleaseAndReturnMPCall + + + + DeclareMPCall 10, MPCall_10 + +MPCall_10 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Task.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lbz r16, 0x0018(r31) + cmpwi r16, 0x00 + bne+ ReleaseAndReturnMPCallOOM + lwz r16, 0x0064(r31) + rlwinm. r16, r16, 0, 30, 30 + beq+ ReleaseAndReturnMPCallOOM + mr r8, r31 + bl TasksFuncThatIsNotAMPCall + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +TasksFuncThatIsNotAMPCall + mflr r27 + mr r26, r8 + addi r16, r26, 0x08 + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + lwz r8, 0x0000(r26) + bl DeleteID + lwz r8, 0x00a0(r26) + bl DeleteID + lwz r8, 0x009c(r26) + cmpwi r8, 0x00 + beq- @_0x98 + bl PoolFree + +@_0x98 + lwz r8, 0x008c(r26) + cmpwi r8, 0x00 + beq- @_0xa8 + bl PoolFree + +@_0xa8 + lwz r17, 0x006c(r26) + lwz r16, 0x0010(r17) + addi r16, r16, -0x01 + stw r16, 0x0010(r17) + lwz r17, 0x0070(r26) + lwz r16, 0x000c(r17) + addi r16, r16, -0x01 + stw r16, 0x000c(r17) + mr r8, r26 + bl PoolFree + lwz r16, 0x0ecc(r1) + addi r16, r16, -0x01 + stw r16, 0x0ecc(r1) + mtlr r27 + blr + + + + DeclareMPCall 11, MPCall_11 + +MPCall_11 ; OUTSIDE REFERER + mfsprg r16, 0 + cmpwi r3, 0x00 + lwz r17, -0x08f0(r1) + lwz r18, -0x0008(r16) + lwz r19, 0x0000(r17) + bne- MPCall_11_0x1c + lwz r3, 0x0000(r18) + +MPCall_11_0x1c + cmpw r3, r19 + li r3, 0x01 + beq+ CommonMPCallReturnPath + li r3, 0x00 + b CommonMPCallReturnPath + + + + DeclareMPCall 12, MPCall_12 + +MPCall_12 ; OUTSIDE REFERER + mfsprg r14, 0 + lwz r15, -0x0008(r14) + lwz r3, 0x0000(r15) + lwz r4, 0x00ec(r15) + b CommonMPCallReturnPath + + + + DeclareMPCall 14, MPCall_14 + +MPCall_14 ; OUTSIDE REFERER + cmpwi r4, 0x01 + cmpwi cr1, r4, 10000 + blt+ ReturnMPCallInvalidIDErr + bgt+ cr1, ReturnMPCallInvalidIDErr + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Task.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lbz r16, 0x0018(r31) + cmpwi r16, 0x01 + bne- MPCall_14_0x70 + lwz r16, 0x0008(r31) + lwz r17, 0x001c(r31) + lwz r18, 0x0014(r16) + subf r17, r17, r4 + add r18, r17, r18 + cmpwi r17, 0x00 + stw r18, 0x0014(r16) + beq- MPCall_14_0x70 + mr r8, r31 + bl major_0x14af8_0xa0 + +MPCall_14_0x70 + stw r4, 0x001c(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 56, MPCall_56 + +MPCall_56 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Task.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + mr r8, r4 + +; r8 = id + bl LookupID + cmpwi r9, 0 ; invalid + + cmpwi cr1, r9, 0x04 + beq- MPCall_56_0x44 + bne+ cr1, ReleaseAndReturnMPCallInvalidIDErr + +MPCall_56_0x44 + mr r30, r8 + stw r4, 0x00f4(r31) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; KCThrowException + +; Throws an exception to a specified task. + +; > r3 = MPTaskID task +; > r4 = MPExceptionKind kind + +; < r3 = result code + + DeclareMPCall 57, KCThrowException + +KCThrowException ; OUTSIDE REFERER + mfsprg r15, 0 + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Task.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r16, 0x0064(r31) + mtcr r16 + li r3, -0x7271 + beq+ cr7, ReleaseAndReturnMPCall + li r3, -0x726c + beq+ cr5, ReleaseAndReturnMPCall + beq+ cr3, ReleaseAndReturnMPCallOOM + lbz r17, 0x0018(r31) + lhz r18, 0x001a(r31) + cmpwi cr1, r17, 0x00 + bne- cr1, KCThrowException_0x70 + ori r16, r16, 0x600 + stw r4, 0x00f8(r31) + stw r16, 0x0064(r31) + li r3, -0x726b + b ReleaseAndReturnMPCall + +KCThrowException_0x70 + lhz r19, -0x0116(r15) + cmpw r19, r18 + bne- KCThrowException_0xb8 + ori r16, r16, 0x200 + stw r4, 0x00f8(r31) + stw r16, 0x0064(r31) + mr r8, r31 + bl major_0x13e4c + addi r16, r1, -0xa34 + addi r17, r31, 0x08 + stw r16, 0x0000(r17) + stw r16, 0x0008(r17) + lwz r18, 0x000c(r16) + stw r18, 0x000c(r17) + stw r17, 0x0008(r18) + stw r17, 0x000c(r16) + li r3, -0x726c + b ReleaseAndReturnMPCall + +KCThrowException_0xb8 + lwz r3, 0x0000(r31) + ori r16, r16, 0x400 + stw r16, 0x0064(r31) + li r17, 0x01 + stb r17, 0x0019(r31) + mr r8, r31 + bl major_0x14af8_0xa0 + sync + lwz r16, PSA.SchLock + Lock.Count(r1) + cmpwi cr1, r16, 0x00 + li r16, 0x00 + bne+ cr1, KCThrowException_0xf0 + mflr r16 + bl panic + +KCThrowException_0xf0 + stw r16, PSA.SchLock + Lock.Count(r1) + subi r10, r10, 4 + b MPCall_6_0x78 + + + +; MPCall_58 + +; Xrefs: +; major_0x02ccc +; kcMPDispatch +; MPCall_60 + + DeclareMPCall 58, MPCall_58 + +MPCall_58 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Task.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r29, 0x0064(r31) + mtcr r29 + li r3, -0x7271 + beq+ cr7, ReleaseAndReturnMPCall + beq- cr4, MPCall_58_0x44 + bne+ cr5, ReleaseAndReturnMPCallOOM + +MPCall_58_0x44 + mtcr r4 + lwz r30, 0x0088(r31) + bns- cr7, MPCall_58_0x68 + li r8, 0x1c + bl PoolAlloc_with_crset + cmpwi r8, 0x00 + beq+ major_0x0af60 + li r3, 0x00 + b MPCall_58_0x114 + +MPCall_58_0x68 + li r17, 0x3800 + rlwinm. r8, r29, 0, 18, 18 + andc r29, r29, r17 + li r17, 0x00 + bne- cr7, MPCall_58_0x80 + ori r17, r17, 0x400 + +MPCall_58_0x80 + ble- cr7, MPCall_58_0x88 + ori r17, r17, 0x200 + +MPCall_58_0x88 + lwz r18, 0x00a4(r30) + rlwimi r18, r17, 0, 21, 22 + stw r18, 0x00a4(r30) + li r19, 0x600 + lwz r17, 0x0008(r31) + addi r18, r1, -0xa34 + andc r29, r29, r19 + cmpw cr1, r17, r18 + stw r29, 0x0064(r31) + bne- MPCall_58_0xb4 + bne- cr1, MPCall_58_0xe0 + +MPCall_58_0xb4 + addi r16, r31, 0x08 + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + mr r8, r31 + bl TaskReadyAsPrev + bl major_0x14af8 + +MPCall_58_0xe0 +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +FuncExportedFromTasks ; OUTSIDE REFERER + addi r16, r1, -0xa34 + addi r17, r31, 0x08 + stw r16, 0x0000(r17) + stw r16, 0x0008(r17) + lwz r18, 0x000c(r16) + stw r18, 0x000c(r17) + stw r17, 0x0008(r18) + stw r17, 0x000c(r16) + li r8, 0x1c + bl PoolAlloc_with_crset + lwz r29, 0x0064(r31) + ori r29, r29, 0x200 + +MPCall_58_0x114 + mtcr r29 + mr r28, r8 + beq- cr3, MPCall_58_0x13c + blt- cr5, MPCall_58_0x13c + lwz r8, -0x08e8(r1) + +; r8 = id + bl LookupID + cmpwi r9, Queue.kIDClass + + mr r30, r8 + ori r29, r29, 0x800 + beq- MPCall_58_0x184 + +MPCall_58_0x13c + bso- cr4, MPCall_58_0x158 + lwz r8, 0x00f4(r31) + +; r8 = id + bl LookupID + cmpwi r9, Queue.kIDClass + + mr r30, r8 + ori r29, r29, 0x1000 + beq- MPCall_58_0x184 + +MPCall_58_0x158 + mr. r8, r28 + bnel- PoolFree + addi r16, r31, 0x08 + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + b MPCall_9_0x98 + +MPCall_58_0x184 + mr. r8, r28 + stw r29, 0x0064(r31) + bne- MPCall_58_0x1a4 + lwz r8, 0x0028(r30) + cmpwi r8, 0x00 + beq+ MPCall_58_0x114 + lwz r17, 0x0008(r8) + stw r17, 0x0028(r30) + +MPCall_58_0x1a4 + bl LoadSomeData + lwz r16, 0x0088(r31) + lwz r17, 0x0000(r31) + mflr r18 + stw r17, 0x0010(r8) + lwz r17, 0x0074(r16) + lbz r19, 0x0040(r16) + lbzx r18, r18, r19 + stw r18, 0x0014(r8) + stw r17, 0x0018(r8) + stw r18, 0x00f8(r31) + mr r31, r30 + bl major_0x0c8b4 + b ReleaseAndReturnMPCall + + + + + + +LoadSomeData ; OUTSIDE REFERER + blrl + dc.l 0x0002020d + dc.l 0x01080003 + dc.l 0x090a0403 + dc.l 0x07000500 + dc.l 0x0b0b0403 + dc.l 0x07060505 + dc.l 0x11000000 + + + + DeclareMPCall 59, MPCall_59 + +MPCall_59 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr. r8, r3 + beq- MPCall_59_0x30 + +; r8 = id + bl LookupID + cmpwi r9, Queue.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + +MPCall_59_0x30 + stw r3, -0x08e8(r1) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 60, MPCall_60 + +MPCall_60 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Task.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + cmpwi r4, 0x05 + beq- MPCall_60_0x288 + lwz r16, 0x0064(r31) + mtcr r16 + li r3, -0x7271 + beq+ cr7, ReleaseAndReturnMPCall + beq- cr4, MPCall_60_0x4c + bne+ cr5, ReleaseAndReturnMPCallOOM + +MPCall_60_0x4c + lbz r16, 0x0018(r31) + cmpwi r16, 0x00 + bne+ ReleaseAndReturnMPCallOOM + cmpwi r4, 0x00 + cmpwi cr1, r4, 0x01 + beq- MPCall_60_0xf8 + beq- cr1, MPCall_60_0x10c + cmpwi r4, 0x02 + cmpwi cr1, r4, 0x03 + beq- MPCall_60_0x150 + beq- cr1, MPCall_60_0x1c0 + cmpwi r4, 0x04 + bne+ ReleaseAndReturnMPCallOOM + lwz r16, 0x0088(r31) + li r17, 0x00 + cmplwi r5, 0x00 + cmplwi cr1, r5, 0x04 + beq- MPCall_60_0xac + beq- cr1, MPCall_60_0xc0 + cmplwi r5, 0x08 + cmplwi cr1, r5, 0x0c + beq- MPCall_60_0xc8 + beq- cr1, MPCall_60_0xd0 + b ReleaseAndReturnMPCallOOM + +MPCall_60_0xac + lwz r8, 0x0070(r31) + lwz r9, 0x0074(r16) + bl FindAreaAbove + lwz r17, 0x0000(r8) + b MPCall_60_0x36c + +MPCall_60_0xc0 + lwz r17, 0x0074(r16) + b MPCall_60_0x36c + +MPCall_60_0xc8 + lwz r17, 0x00f8(r31) + b MPCall_60_0x36c + +MPCall_60_0xd0 + lwz r17, 0x0040(r16) + lwz r18, 0x0064(r16) + rlwinm. r8, r17, 0, 27, 27 + li r17, 0x02 + beq- MPCall_60_0x36c + rlwinm. r8, r18, 0, 1, 1 + li r17, 0x01 + bne- MPCall_60_0x36c + li r17, 0x00 + b MPCall_60_0x36c + +MPCall_60_0xf8 + lwz r16, 0x0088(r31) + cmplwi cr1, r5, 0xf8 + andi. r17, r5, 0x07 + addi r16, r16, 0xfc + b MPCall_60_0x124 + +MPCall_60_0x10c + lwz r16, 0x0088(r31) + cmplwi r5, 0x100 + cmplwi cr1, r5, 0xf8 + beq- MPCall_60_0x144 + andi. r17, r5, 0x07 + addi r16, r16, 0x1fc + +MPCall_60_0x124 + add r16, r16, r5 + bgt+ cr1, ReleaseAndReturnMPCallOOM + bne+ ReleaseAndReturnMPCallOOM + lwzu r17, 0x0004(r16) + lwzu r18, 0x0004(r16) + lwzu r19, 0x0004(r16) + lwzu r20, 0x0004(r16) + b MPCall_60_0x3a8 + +MPCall_60_0x144 + lwz r17, 0x00e4(r16) + li r18, 0x00 + b MPCall_60_0x37c + +MPCall_60_0x150 + lwz r16, 0x0088(r31) + rlwinm. r8, r7, 0, 12, 12 + lwz r16, 0x00d8(r16) + beq+ ReleaseAndReturnMPCallOOM + cmplwi cr3, r16, 0x00 + cmplwi r5, 0x200 + cmplwi cr2, r5, 0x210 + cmplwi cr1, r5, 0x1f0 + beql+ cr3, Local_Panic + beq- MPCall_60_0x1a4 + beq- cr2, MPCall_60_0x1b8 + andi. r8, r5, 0x0f + add r16, r16, r5 + subi r16, r16, 4 + bgt+ cr1, ReleaseAndReturnMPCallOOM + bne+ ReleaseAndReturnMPCallOOM + lwzu r17, 0x0004(r16) + lwzu r18, 0x0004(r16) + lwzu r19, 0x0004(r16) + lwzu r20, 0x0004(r16) + b MPCall_60_0x3a8 + +MPCall_60_0x1a4 + lwz r17, 0x0200(r16) + lwz r18, 0x0204(r16) + lwz r19, 0x0208(r16) + lwz r20, 0x020c(r16) + b MPCall_60_0x3a8 + +MPCall_60_0x1b8 + lwz r17, 0x0210(r16) + b MPCall_60_0x36c + +MPCall_60_0x1c0 + lwz r16, 0x0088(r31) + li r17, 0x00 + cmplwi r5, 0x00 + cmplwi cr1, r5, 0x08 + beq- MPCall_60_0x21c + beq- cr1, MPCall_60_0x228 + cmplwi r5, 0x10 + cmplwi cr1, r5, 0x30 + beq- MPCall_60_0x234 + beq- cr1, MPCall_60_0x240 + cmplwi r5, 0x1c + cmplwi cr1, r5, 0x20 + beq- MPCall_60_0x24c + beq- cr1, MPCall_60_0x254 + cmplwi r5, 0x24 + cmplwi cr1, r5, 0x28 + beq- MPCall_60_0x25c + beq- cr1, MPCall_60_0x264 + cmplwi r5, 0x2c + cmplwi cr1, r5, 0x18 + beq- MPCall_60_0x278 + beq- cr1, MPCall_60_0x280 + b ReleaseAndReturnMPCallOOM + +MPCall_60_0x21c + lwz r17, 0x00f0(r16) + lwz r18, 0x00f4(r16) + b MPCall_60_0x37c + +MPCall_60_0x228 + lwz r17, 0x00e8(r16) + lwz r18, 0x00ec(r16) + b MPCall_60_0x37c + +MPCall_60_0x234 + lwz r17, 0x00f8(r16) + lwz r18, 0x00fc(r16) + b MPCall_60_0x37c + +MPCall_60_0x240 + lwz r17, 0x0070(r16) + lwz r18, 0x0074(r16) + b MPCall_60_0x37c + +MPCall_60_0x24c + lwz r17, 0x00d4(r16) + b MPCall_60_0x36c + +MPCall_60_0x254 + lwz r17, 0x00a4(r16) + b MPCall_60_0x36c + +MPCall_60_0x25c + lwz r17, 0x00c4(r16) + b MPCall_60_0x36c + +MPCall_60_0x264 + lbz r17, 0x0040(r16) + bl LoadSomeData + mflr r18 + lbzx r17, r18, r17 + b MPCall_60_0x36c + +MPCall_60_0x278 + li r17, 0x00 + b MPCall_60_0x36c + +MPCall_60_0x280 + lwz r17, 0x00dc(r16) + b MPCall_60_0x36c + +MPCall_60_0x288 + cmplwi cr1, r5, 0x04 + cmplwi r5, 0x14 + beq- cr1, MPCall_60_0x2c4 + beq- MPCall_60_0x2e4 + cmplwi cr1, r5, 0x20 + cmplwi r5, 0x30 + beq- cr1, MPCall_60_0x2f4 + beq- MPCall_60_0x308 + cmpwi cr1, r5, 0x40 + cmplwi r5, 0x3c + beq- cr1, MPCall_60_0x320 + beq- MPCall_60_0x318 + cmpwi cr1, r5, 0x50 + beq- cr1, MPCall_60_0x34c + b ReleaseAndReturnMPCallOOM + +MPCall_60_0x2c4 + lwz r17, 0x0074(r31) + lwz r18, 0x0008(r31) + lwz r18, 0x0004(r18) + lhz r19, 0x001a(r31) + lbz r20, 0x0018(r31) + rlwimi r19, r20, 16, 8, 15 + lwz r20, 0x001c(r31) + b MPCall_60_0x3a8 + +MPCall_60_0x2e4 + lwz r17, 0x0060(r31) + lwz r18, 0x00c0(r31) + lwz r19, 0x00c4(r31) + b MPCall_60_0x390 + +MPCall_60_0x2f4 + lwz r17, 0x00c8(r31) + lwz r18, 0x00cc(r31) + lwz r19, 0x00d0(r31) + lwz r20, 0x00d4(r31) + b MPCall_60_0x3a8 + +MPCall_60_0x308 + lwz r17, 0x00e0(r31) + lwz r18, 0x00e4(r31) + lwz r19, 0x00e8(r31) + b MPCall_60_0x390 + +MPCall_60_0x318 + lwz r17, 0x0078(r31) + b MPCall_60_0x36c + +MPCall_60_0x320 + lbz r20, 0x0018(r31) + li r17, 0x00 + lwz r16, 0x0008(r31) + lwz r18, 0x0070(r31) + cmpwi r20, 0x00 + lwz r19, 0x0094(r31) + lwz r20, 0x0090(r31) + lwz r18, 0x0000(r18) + bne- MPCall_60_0x3a8 + lwz r17, 0x0000(r16) + b MPCall_60_0x3a8 + +MPCall_60_0x34c + mfsprg r18, 0 + lwz r20, 0x0088(r31) + lwz r19, -0x0008(r18) + cmpw r19, r31 + lwz r17, 0x0004(r18) + beq- MPCall_60_0x36c + lwz r17, 0x010c(r20) + b MPCall_60_0x36c + +MPCall_60_0x36c + li r21, 0x04 + stw r17, 0x0134(r6) + stw r21, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_60_0x37c + li r21, 0x08 + stw r17, 0x0134(r6) + stw r18, 0x013c(r6) + stw r21, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_60_0x390 + li r21, 0x0c + stw r17, 0x0134(r6) + stw r18, 0x013c(r6) + stw r19, 0x0144(r6) + stw r21, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_60_0x3a8 + li r21, 0x10 + stw r17, 0x0134(r6) + stw r18, 0x013c(r6) + stw r19, 0x0144(r6) + stw r20, 0x014c(r6) + stw r21, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 61, MPCall_61 + +MPCall_61 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Task.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r31, r8 + lwz r16, 0x0064(r31) + mtcr r16 + li r3, -0x7271 + beq+ cr7, ReleaseAndReturnMPCall + beq- cr4, MPCall_61_0x44 + bne+ cr5, ReleaseAndReturnMPCallOOM + +MPCall_61_0x44 + lbz r16, 0x0018(r31) + cmpwi r16, 0x00 + bne+ ReleaseAndReturnMPCallOOM + lwz r17, 0x0134(r6) + lwz r18, 0x013c(r6) + lwz r19, 0x0144(r6) + lwz r20, 0x014c(r6) + cmpwi r4, 0x00 + cmpwi cr1, r4, 0x01 + beq- MPCall_61_0x84 + beq- cr1, MPCall_61_0x98 + cmpwi r4, 0x02 + cmpwi cr1, r4, 0x03 + beq- MPCall_61_0xe8 + beq- cr1, MPCall_61_0x170 + b ReleaseAndReturnMPCallOOM + +MPCall_61_0x84 + lwz r16, 0x0088(r31) + cmplwi cr1, r5, 0xf8 + andi. r8, r5, 0x07 + addi r16, r16, 0xfc + b MPCall_61_0xb0 + +MPCall_61_0x98 + lwz r16, 0x0088(r31) + cmplwi r5, 0x100 + cmplwi cr1, r5, 0xf8 + beq- MPCall_61_0xd8 + andi. r8, r5, 0x07 + addi r16, r16, 0x1fc + +MPCall_61_0xb0 + add r16, r16, r5 + bgt+ cr1, ReleaseAndReturnMPCallOOM + bne+ ReleaseAndReturnMPCallOOM + li r21, 0x10 + stwu r17, 0x0004(r16) + stwu r18, 0x0004(r16) + stwu r19, 0x0004(r16) + stwu r20, 0x0004(r16) + stw r21, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_61_0xd8 + li r21, 0x04 + stw r17, 0x00e4(r16) + stw r21, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_61_0xe8 + lwz r16, 0x0088(r31) + rlwinm. r8, r7, 0, 12, 12 + lwz r16, 0x00d8(r16) + beq+ ReleaseAndReturnMPCallOOM + cmplwi cr3, r16, 0x00 + cmplwi r5, 0x200 + cmplwi cr2, r5, 0x210 + cmplwi cr1, r5, 0x1f0 + beql+ cr3, Local_Panic + beq- MPCall_61_0x144 + beq- cr2, MPCall_61_0x160 + andi. r8, r5, 0x0f + add r16, r16, r5 + subi r16, r16, 4 + bgt+ cr1, ReleaseAndReturnMPCallOOM + bne+ ReleaseAndReturnMPCallOOM + li r21, 0x10 + stwu r17, 0x0004(r16) + stwu r18, 0x0004(r16) + stwu r19, 0x0004(r16) + stwu r20, 0x0004(r16) + stw r21, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_61_0x144 + li r21, 0x10 + stw r17, 0x0200(r16) + stw r18, 0x0204(r16) + stw r19, 0x0208(r16) + stw r20, 0x020c(r16) + stw r21, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_61_0x160 + li r21, 0x04 + stw r17, 0x0210(r16) + stw r21, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_61_0x170 + lwz r16, 0x0088(r31) + cmplwi r5, 0x00 + cmplwi cr1, r5, 0x08 + beq- MPCall_61_0x1b0 + beq- cr1, MPCall_61_0x1c4 + cmplwi r5, 0x10 + beq- MPCall_61_0x1d8 + cmplwi r5, 0x1c + cmplwi cr1, r5, 0x20 + beq- MPCall_61_0x1ec + beq- cr1, MPCall_61_0x1fc + cmplwi r5, 0x24 + cmplwi cr1, r5, 0x18 + beq- MPCall_61_0x218 + beq- cr1, MPCall_61_0x228 + b ReleaseAndReturnMPCallOOM + +MPCall_61_0x1b0 + li r21, 0x08 + stw r17, 0x00f0(r16) + stw r18, 0x00f4(r16) + stw r21, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_61_0x1c4 + li r21, 0x08 + stw r17, 0x00e8(r16) + stw r18, 0x00ec(r16) + stw r21, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_61_0x1d8 + li r21, 0x08 + stw r17, 0x00f8(r16) + stw r18, 0x00fc(r16) + stw r21, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_61_0x1ec + li r21, 0x04 + stw r17, 0x00d4(r16) + stw r21, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_61_0x1fc + li r21, 0x04 + lwz r18, 0x00a4(r16) + rlwimi r18, r17, 0, 20, 23 + rlwimi r18, r17, 0, 31, 31 + stw r18, 0x00a4(r16) + stw r21, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_61_0x218 + li r21, 0x04 + stw r17, 0x00c4(r16) + stw r21, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + +MPCall_61_0x228 + li r21, 0x04 + stw r17, 0x00dc(r16) + stw r21, 0x0154(r6) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 63, MPCall_63 + +MPCall_63 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Task.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + stw r4, 0x00ec(r8) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + + DeclareMPCall 114, MPCall_114 + +MPCall_114 ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Task.kIDClass + + mr r31, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + mr r8, r4 + +; r8 = id + bl LookupID + cmpwi r9, CPU.kIDClass + + mr r30, r8 + bne+ ReleaseAndReturnMPCallInvalidIDErr + lwz r16, 0x0064(r31) + lwz r17, 0x00e8(r31) + rlwinm. r8, r16, 0, 30, 30 + cmplw cr1, r17, r5 + lwz r18, 0x0018(r30) + bne+ ReleaseAndReturnMPCallOOM + bne+ cr1, ReleaseAndReturnMPCallOOM + rlwinm. r8, r18, 0, 28, 28 + cmplwi cr1, r17, 0x04 + beq+ ReleaseAndReturnMPCallOOM + lwz r16, 0x0064(r31) + lhz r17, 0x022a(r30) + ori r16, r16, 0x40 + stw r16, 0x0064(r31) + sth r17, 0x001a(r31) + rlwinm. r8, r16, 0, 26, 26 + mr r8, r31 + bne- MPCall_114_0x90 + bl major_0x13e4c + bl TaskReadyAsPrev + +MPCall_114_0x90 + bl major_0x14af8 + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall + + + +; KCSetTaskType + + + DeclareMPCall 126, KCSetTaskType + +KCSetTaskType ; OUTSIDE REFERER + + _Lock PSA.SchLock, scratch1=r16, scratch2=r17 + + mr r8, r3 + +; r8 = id + bl LookupID + cmpwi r9, Task.kIDClass + + bne+ ReleaseAndReturnMPCallInvalidIDErr + stw r4, 0x0074(r8) + +; r1 = kdp + b ReleaseAndReturnZeroFromMPCall diff --git a/NanoKernel/NKThud.s b/NanoKernel/NKThud.s new file mode 100644 index 0000000..b592a45 --- /dev/null +++ b/NanoKernel/NKThud.s @@ -0,0 +1,1369 @@ +; panic + +; Xrefs: +; "vec" +; Local_Panic +; Local_Panic +; major_0x02ccc +; IntDecrementer +; IntDSIOtherOther +; IntMachineCheckMemRetry +; IntISI +; IntDSIOther +; IntPerfMonitor +; IntThermalEvent +; Local_Panic +; FDP_1c40 +; Local_Panic +; kcVMDispatch +; Local_Panic +; kcRTASDispatch +; ReleaseAndMPCallWasBad +; ReleaseAndReturnZeroFromMPCall +; major_0x0af60 +; ReleaseAndReturnMPCallBlueBlocking +; major_0x0b054 +; ReleaseAndReturnMPCallPrivilegedErr +; major_0x0b0cc +; AlternateMPCallReturnPath +; MPCall_0 +; MPCall_6 +; KCYieldWithHint +; KCStartCPU +; KCStopScheduling +; MPCall_115 +; Local_Panic +; major_0x0d35c +; MPCall_41 +; Local_Panic +; MPCall_9 +; KCThrowException +; Local_Panic +; MPCall_70 +; MPCall_72 +; createarea +; major_0x102c8 +; MPCall_73 +; MPCall_74 +; MPCall_75 +; MPCall_130 +; KCSetAreaAccess +; MPCall_123 +; MPCall_81 +; MPCall_98 +; MPCall_83 +; MPCall_84 +; KCMapPage +; KCUnmapPages +; KCMakePhysicallyContiguous +; KCLockPages +; KCUnlockPages +; KCHoldPages +; KCUnholdPages +; MPCall_91 +; MPCall_92 +; MPCall_94 +; MPCall_95 +; Local_Panic +; major_0x129cc +; Local_Panic +; Local_Panic +; major_0x142dc +; major_0x14548 +; Local_Panic +; CommonPIHPath +; print_common + + + align 5 + + +panic ; OUTSIDE REFERER + crset cr1_eq + b panic_common + +panic_non_interactive + crclr cr1_eq + +panic_common + mfsprg r1, 0 + stmw r29, EWA.ThudSavedR29(r1) + lwz r1, EWA.PA_KDP(r1) + mflr r29 + + _Lock PSA.ThudLock, scratch1=r30, scratch2=r31 + + stw r29, KDP.ThudSavedLR(r1) + stw r0, KDP.ThudSavedR0(r1) + mfsprg r0, 1 + stw r0, KDP.ThudSavedR1(r1) + stw r2, KDP.ThudSavedR2(r1) + mfsprg r2, 0 + lmw r29, EWA.ThudSavedR29(r2) + stmw r3, KDP.ThudSavedR3(r1) + mfcr r0 + stw r0, KDP.ThudSavedCR(r1) + + +; Save the silly multiply-quotient register + + mfspr r0, pvr + rlwinm. r0, r0, 0, 0, 14 + bne- @no_mq + dialect POWER + mfmq r0 + dialect PowerPC + stw r0, KDP.ThudSavedMQ(r1) +@no_mq + + mfxer r0 + stw r0, KDP.ThudSavedXER(r1) + mfsprg r0, 2 + stw r0, KDP.ThudSavedSPRG2(r1) + mfctr r0 + stw r0, KDP.ThudSavedCTR(r1) + mfspr r0, pvr + stw r0, KDP.ThudSavedPVR(r1) + mfspr r0, dsisr + stw r0, KDP.ThudSavedDSISR(r1) + mfspr r0, dar + stw r0, KDP.ThudSavedDAR(r1) + + +; Save the time + + mfpvr r0 + rlwinm. r0, r0, 0, 0, 14 + bne- @not_601 + +@rtcloop + dialect POWER + mfrtcu r0 + mfrtcl r2 + mfrtcu r3 + dialect PowerPC + cmpw r0, r3 + bne+ @rtcloop + + stw r0, KDP.ThudSavedTBU(r1) + stw r2, KDP.ThudSavedTB(r1) + b @end_if_601 +@not_601 + +@tbloop + mftbu r0 + mftb r2 + mftbu r3 + cmpw r0, r3 + bne+ @tbloop + stw r0, KDP.ThudSavedTBU(r1) + stw r2, KDP.ThudSavedTB(r1) +@end_if_601 + + + mfspr r0, dec + stw r0, 0x07a8(r1) + mfspr r0, hid0 + stw r0, 0x07ac(r1) + mfspr r0, sdr1 + stw r0, 0x07b0(r1) + mfspr r0, srr0 + stw r0, 0x07b4(r1) + mfspr r0, srr1 + stw r0, 0x07b8(r1) + mfmsr r0 + stw r0, 0x07bc(r1) + mfsr r0, 0 + stw r0, 0x07c0(r1) + mfsr r0, 1 + stw r0, 0x07c4(r1) + mfsr r0, 2 + stw r0, 0x07c8(r1) + mfsr r0, 3 + stw r0, 0x07cc(r1) + mfsr r0, 4 + stw r0, 0x07d0(r1) + mfsr r0, 5 + stw r0, 0x07d4(r1) + mfsr r0, 6 + stw r0, 0x07d8(r1) + mfsr r0, 7 + stw r0, 0x07dc(r1) + mfsr r0, 8 + stw r0, 0x07e0(r1) + mfsr r0, 9 + stw r0, 0x07e4(r1) + mfsr r0, 10 + stw r0, 0x07e8(r1) + mfsr r0, 11 + stw r0, 0x07ec(r1) + mfsr r0, 12 + stw r0, 0x07f0(r1) + mfsr r0, 13 + stw r0, 0x07f4(r1) + mfsr r0, 14 + stw r0, 0x07f8(r1) + mfsr r0, 15 + stw r0, 0x07fc(r1) + + + mfmsr r0 + _bset r0, r0, MSR_FPbit + mtmsr r0 + isync + + stfd f0, 0x0800(r1) + stfd f1, 0x0808(r1) + stfd f2, 0x0810(r1) + stfd f3, 0x0818(r1) + stfd f4, 0x0820(r1) + stfd f5, 0x0828(r1) + stfd f6, 0x0830(r1) + stfd f7, 0x0838(r1) + stfd f8, 0x0840(r1) + stfd f9, 0x0848(r1) + stfd f10, 0x0850(r1) + stfd f11, 0x0858(r1) + stfd f12, 0x0860(r1) + stfd f13, 0x0868(r1) + stfd f14, 0x0870(r1) + stfd f15, 0x0878(r1) + stfd f16, 0x0880(r1) + stfd f17, 0x0888(r1) + stfd f18, 0x0890(r1) + stfd f19, 0x0898(r1) + stfd f20, 0x08a0(r1) + stfd f21, 0x08a8(r1) + stfd f22, 0x08b0(r1) + stfd f23, 0x08b8(r1) + stfd f24, 0x08c0(r1) + stfd f25, 0x08c8(r1) + stfd f26, 0x08d0(r1) + stfd f27, 0x08d8(r1) + stfd f28, 0x08e0(r1) + stfd f29, 0x08e8(r1) + stfd f30, 0x08f0(r1) + stfd f31, 0x08f8(r1) + mffs f31 + lwz r0, 0x08fc(r1) + stfd f31, 0x08fc(r1) + stw r0, 0x08fc(r1) + bne- cr1, @0x260 + + if &TYPE('NKDebugShim') != 'UNDEFINED' + b @go_here_to_use_saved_debug_command + endif + +@0x23c + lwz r1, 0(0) + addi r1, r1, 1 + stw r1, 0(0) + + li r1, 0 + dcbst r1, r1 + + bl getchar + +; gets kdp from print!!! + cmpwi r8, -0x01 + bne- @0x260 + b @0x23c + +@0x260 + lwz r8, 0x0edc(r1) + ori r8, r8, 0x02 + stw r8, 0x0edc(r1) + _log '½ NanoKernel debugger^n' + +@prompt + + if &TYPE('NKDebugShim') != 'UNDEFINED' + b @NKDebugShimCode + endif + + _log '½ ' ; thats an omega, btw + li r17, 0x00 ; r17 = charcount + stw r17, -0x08fc(r1) + +@input_busywait + bl getchar + cmpwi r8, -1 + beq+ @input_busywait + + mr r16, r8 + cmpwi r16, 8 ; backspace + cmpwi cr1, r17, 0 + bne- @not_backspace + ble+ cr1, @input_busywait + + + ; Backspace, wipe position, then backspace again! + subi r17, r17, 1 + li r8, 8 + bl Printc + li r8, ' ' + bl Printc + li r8, 8 + bl Printc + + b @input_busywait +@not_backspace + + ; If + cmpwi cr2, r17, 95 + addi r18, r1, -0x960 ; prepare to copy the line! + blt- cr2, @short_line + _log '^b' + b @input_busywait + +@0x30c + addi r17, r17, 1 ; accept the character as an addition to the line + mr r8, r16 + bl Printc + b @input_busywait +@short_line + + cmpwi r16, 13 + stbx r16, r17, r18 + bne+ @0x30c + li r16, 0x00 + stbx r16, r17, r18 + _log '^n' + + +@go_here_to_use_saved_debug_command + + +; Now a line is expected to be committed: + + addi r15, r1, -0x960 + +; r15 = start + bl next_cmd_word +; r15 = ptr +; r16 = char + + cmpwi r16, 0x00 + beq+ @prompt + bl @load_commands + mflr r16 + bl @load_tbl + mflr r17 + +; r16 = command strings +; r17 = lut + bl cmd_lookup +; cr0 = found +; r17 = ptr to lut entry + + bne- @bad_command + bl @load_tbl + mflr r16 + lwz r17, 0x0000(r17) + add r16, r16, r17 + mtlr r16 + + blr + +@bad_command + _log '???^n' + b @prompt + +@load_commands + blrl + string CString + dc.b 'dm' + dc.b 'dml' + dc.b 'g' + dc.b 'id' + dc.b 'kd' + dc.b 'td' + dc.b '?' + dc.b 'help' + dc.b 0xff + align 2 + +@load_tbl + blrl + +@tbl + dc.l @cmd_dumpmem_physical - @tbl + dc.l @cmd_dumpmem_logical - @tbl + dc.l @cmd_goto - @tbl + dc.l @cmd_opaque_id_info - @tbl + dc.l @cmd_display_kern_data - @tbl + dc.l @cmd_dump_registers - @tbl + dc.l @cmd_help - @tbl + dc.l @cmd_help - @tbl + dc.l 0 + +@cmd_help + _log 'Commands:^n' + _log ' dm address [length] -- Display physical^n' + _log ' dml address [length] -- Display logical^n' + _log ' g [address] -- Go resume^n' + _log ' id [-all -p -t -tm -q -s -r -c -sp -e -cg -a -n -nc]^n' + _log ' id idvalue -- Obtain opaque ID info^n' + _log ' kd -- Display kernel data^n' + _log ' td -- Dump registers^n' + b @prompt + +@cmd_dumpmem_physical +; r15 = start + bl next_cmd_word +; r15 = ptr +; r16 = char + + cmpwi r16, 0x00 + beq- @missing_physical_addr + bl major_0x187b0 + bne- @bad_length_1 + mr r30, r16 + li r31, 0x10 + +; r15 = start + bl next_cmd_word +; r15 = ptr +; r16 = char + + cmpwi r16, 0x00 + beq- @0x5e0 + bl major_0x187b0 + bne- @bad_length_1 + mr r31, r16 + +@0x5e0 + addi r31, r31, 0x03 + rlwinm r31, r31, 0, 0, 29 + mr r16, r30 + mr r17, r31 + bl print_memory + b @prompt + +@missing_physical_addr + _log 'Need a physical address^n' + b @prompt + +@bad_length_1 + _log 'Length must be a hexadecimal value^n' + b @prompt + +@cmd_dumpmem_logical + _log 'Logical memory^n' + +; r15 = start + bl next_cmd_word +; r15 = ptr +; r16 = char + + cmpwi r16, 0x00 + beq- @missing_logical_addr + bl major_0x187b0 + bne- @bad_length_2 + mr r30, r16 + li r31, 0x10 + +; r15 = start + bl next_cmd_word +; r15 = ptr +; r16 = char + + cmpwi r16, 0x00 + beq- @0x6b0 + bl major_0x187b0 + bne- @bad_length_2 + mr r31, r16 + +@0x6b0 + addi r31, r31, 0x03 + rlwinm r31, r31, 0, 0, 29 + mr r16, r30 + mr r17, r31 + bl print_memory_logical + b @prompt + +@missing_logical_addr + _log 'Need a logical address^n' + b @prompt + +@bad_length_2 + _log 'Length must be a hexadecimal value^n' + b @prompt + +@cmd_goto +; r15 = start + bl next_cmd_word +; r15 = ptr +; r16 = char + + cmpwi r16, 0x00 + lwz r31, 0x0904(r1) + beq- @0x748 + bl major_0x187b0 + bne- @bad_resume_address + stw r16, 0x0904(r1) + +@0x748 + +@NKDebugShimCode + _log 'Resuming at ' + lwz r31, 0x0904(r1) + mr r8, r31 + bl Printw + _log ' - wish me luck.^n' + bl prereturn + lwz r8, 0x0904(r1) + sync + + lwz r9, PSA.ThudLock + Lock.Count(r1) + cmpwi cr1, r9, 0x00 + li r9, 0x00 + bne+ cr1, @0x7b4 + mflr r9 + bl panic +@0x7b4 + stw r9, PSA.ThudLock + Lock.Count(r1) + mtlr r8 + blr + +@bad_resume_address + _log 'Need hexadecimal value for resume address^n' + b @prompt + +@cmd_opaque_id_info +; r15 = start + bl next_cmd_word +; r15 = ptr +; r16 = char + + cmpwi r16, 0x00 + beq- @missing_opaque_id + bl @load_id_args + mflr r16 + li r17, 0x00 + +; r16 = command strings +; r17 = lut + bl cmd_lookup +; cr0 = found +; r17 = ptr to lut entry + + bne- @0x884 + li r29, 0x00 + li r30, 0x00 + srwi r31, r17, 2 + +@0x82c + mr r8, r30 + mr r9, r31 + bl GetNextIDOfClass + mr. r30, r8 + beq- @0x868 + mr r8, r8 + bl Printw + addi r29, r29, 0x01 + andi. r29, r29, 0x07 + bne+ @0x82c + _log '^n' + b @0x82c + +@0x868 + cmpwi r29, 0x00 + beq+ @prompt + _log '^n' + b @prompt + +@0x884 + bl major_0x187b0 + bne- @bad_opaque_id + mr r30, r16 + mr r8, r16 + +; r8 = id + bl LookupID +; r8 = something not sure what +; r9 = 0:inval, 1:proc, 2:task, 3:timer, 4:q, 5:sema, 6:cr, 7:cpu, 8:addrspc, 9:evtg, 10:cohg, 11:area, 12:not, 13:log + + mr r31, r8 + _log 'ID ' + mr r8, r30 + bl Printw + bl @load_id_kind_strings + mflr r17 + slwi r18, r9, 4 + add r8, r17, r18 + bl PrintS + cmpwi r9, 0x00 + beq- @0x978 + _log ' at ' + mr r8, r31 + bl Printw + _log '^n' + mr r16, r31 + bl @load_more_jumps + mflr r17 + slwi r18, r9, 2 + lwzx r17, r17, r18 + bl print_memory + b @prompt + +@missing_opaque_id + _log 'Need an opaque ID^n' + b @prompt + +@bad_opaque_id + _log 'ID must be a hexadecimal value^n' + b @prompt + +@0x978 + _log '^n' + b @prompt + +@load_id_kind_strings + blrl + string CString + dc.b 'is invalid. ' + dc.b 'Process ' + dc.b 'Task ' + dc.b 'Timer ' + dc.b 'Queue ' + dc.b 'Semaphore ' + dc.b 'Critical Region' + dc.b 'Cpu ' + dc.b 'Address Space ' + dc.b 'Event Group ' + dc.b 'Coherence Group' + dc.b 'Area ' + dc.b 'Notification ' + dc.b 'Console Log ' + align 2 + +@load_more_jumps + blrl + dc.l 0 + dc.l Process.Size + dc.l Task.Size + dc.l Timer.Size + dc.l Queue.Size + dc.l Semaphore.Size + dc.l CriticalRegion.Size + dc.l CPU.Size + dc.l AddressSpace.Size + dc.l EventGroup.Size + dc.l CoherenceGroup.Size + dc.l Area.Size + dc.l Notification.Size + dc.l ConsoleLog.Size + +@load_id_args + blrl + dc.b '-all' + dc.b '-p' + dc.b '-t' + dc.b '-tm' + dc.b '-q' + dc.b '-s' + dc.b '-r' + dc.b '-c' + dc.b '-sp' + dc.b '-e' + dc.b '-cg' + dc.b '-a' + dc.b '-n' + dc.b '-nc' + dc.b 0xff + align 2 + +@cmd_display_kern_data + mfsprg r17, 0 + + _log 'Kernel version ' + lhz r8, KDP.InfoRecord + InfoRecord.NKNanoKernelInfoVer(r1) + bl Printh + + _log 'Code base ' + lwz r8, KDP.PA_NanoKernelCode(r1) + bl Printw + + _log 'PSA ' + addi r8, r17, PSA.Base + bl Printw + + _log 'KDP ' + mr r8, r1 + bl Printw + + _log 'EDP ' + lwz r8, KDP.PA_EmulatorData(r1) + bl Printw + + _log '^nCurrent EWA ' + mr r8, r17 + bl Printw + + _log ' is CPU ' + lhz r8, -0x0116(r17) + bl Printh + + _log ' ID-' + lwz r8, -0x0340(r17) + bl Printw + + lwz r18, EWA.PA_CurTask(r17) + _log '^nCurrent task ' + mr r8, r18 + bl Printw + + _log 'ID-' + lwz r8, Task.ID(r18) + bl Printw + + _log 'name \"' + lwz r8, Task.Name(r18) + rotlwi r8, r8, 8 + bl Printc + rotlwi r8, r8, 8 + bl Printc + rotlwi r8, r8, 8 + bl Printc + rotlwi r8, r8, 8 + bl Printc + + _log '\" Owning process ' + lwz r8, 0x006c(r18) + bl Printw + + _log ' ID-' + lwz r8, 0x0060(r18) + bl Printw + + _log '^nAddress Space ' + lwz r18, -0x001c(r17) + mr r8, r18 + bl Printw + + _log ' ID-' + lwz r8, 0x0000(r18) + bl Printw + + _log '^n' + + bl print_xpt_info + b @prompt + +@cmd_dump_registers + _log 'Kernel registers:^n' + bl print_sprgs + bl print_sprs + _log '^n' + bl print_segment_registers + _log '^n' + bl print_gprs + b @prompt + + + +; major_0x18040 + +; Xrefs: +; "EightyForty" + + mflr r16 + lwz r17, 0x07b4(r1) + rlwinm r17, r17, 16, 16, 27 + cmpwi r17, 0x6800 + bne- major_0x18040_0x100 + lwz r17, 0x071c(r1) + srwi r17, r17, 16 + andi. r17, r17, 0xffa0 + cmpwi r17, 0x2a0 + bne- major_0x18040_0x64 + _log 'Caused by emulator termination request^n' + b major_0x18040_0x9c + +major_0x18040_0x64 + _log 'Caused by unhandled emulator exception^n' + +major_0x18040_0x9c + lwz r17, 0x079c(r1) + lwz r18, 0x0704(r1) + subf r17, r18, r17 + cmpwi r17, 0x100 + cmpwi cr1, r17, -0x100 + bgt- major_0x18040_0x100 + blt- cr1, major_0x18040_0x100 + _log 'Looks like interrupt stack overflow by os or application^n' + +major_0x18040_0x100 + mtlr r16 + blr + + + +; print_xpt_info + +; Xrefs: +; panic + +print_xpt_info ; OUTSIDE REFERER + mflr r16 + lwz r18, 0x064c(r1) + llabel r18, NKBtm + add r19, r18, r19 + _log 'Termination caller ' + lwz r20, 0x0904(r1) + mr r8, r20 + bl Printw + subf. r21, r18, r20 + cmplw cr1, r20, r19 + blt- print_xpt_info_0x84 + bge- cr1, print_xpt_info_0x84 + _log '( NK+' + mr r8, r21 + bl Printw + _log ')^n' + +print_xpt_info_0x84 + _log ' Last exception at ' + mfspr r8, srr1 + bl Printw + mfspr r8, srr0 + bl Printw + mfspr r8, srr0 + subf. r21, r18, r8 + cmplw cr1, r8, r19 + blt- print_xpt_info_0xf8 + bge- cr1, print_xpt_info_0xf8 + _log '( NK+' + mr r8, r21 + bl Printw + _log ')' + +print_xpt_info_0xf8 + _log '^n' + mtlr r16 + blr + + + +; print_sprgs + +; Goldmine. Tells me what the SPRGs do! + +; Xrefs: +; panic + +print_sprgs ; OUTSIDE REFERER + mflr r16 + _log 'SPRGs ewa: ' + mfsprg r8, 0 + bl Printw + _log ' r1: ' + mfsprg r8, 1 + bl Printw + _log ' lr: ' + mfsprg r8, 2 + bl Printw + _log ' vecBase: ' + mfsprg r8, 3 + bl Printw + _log '^n' + mtlr r16 + blr + + + +; print_sprs + +; Both user-mode and supervisor-only + +; Xrefs: +; panic + +print_sprs ; OUTSIDE REFERER + mflr r16 + _log ' cr: ' + lwz r8, 0x0780(r1) + bl Printw + _log 'xer: ' + lwz r8, 0x0788(r1) + bl Printw + _log 'ctr: ' + lwz r8, 0x0790(r1) + bl Printw + _log 'lr: ' + lwz r8, 0x078c(r1) + bl Printw + _log '^n dsisr: ' + lwz r8, 0x0798(r1) + bl Printw + _log 'dar:' + lwz r8, 0x079c(r1) + bl Printw + _log 'pvr: ' + lwz r8, 0x0794(r1) + bl Printw + _log '^n' + mtlr r16 + blr + + + +; print_segment_registers + +; Xrefs: +; panic + +print_segment_registers ; OUTSIDE REFERER + mflr r16 + _log ' sr0-sr7 ' + li r17, 0x08 + mtctr r17 + li r18, 0x00 + +print_segment_registers_0x28 + mfsrin r8, r18 + addis r18, r18, 0x1000 + bl Printw + bdnz+ print_segment_registers_0x28 + _log '^n sr8-sr15 ' + li r17, 0x08 + mtctr r17 + +print_segment_registers_0x5c + mfsrin r8, r18 + addis r18, r18, 0x1000 + bl Printw + bdnz+ print_segment_registers_0x5c + _log '^n' + mtlr r16 + blr + + + +; print_gprs + +; Xrefs: +; panic + +print_gprs ; OUTSIDE REFERER + mflr r16 + addi r17, r1, 0x6fc + _log ' r0-r7 ' + li r18, 0x08 + mtctr r18 + +print_gprs_0x28 + lwzu r8, 0x0004(r17) + bl Printw + bdnz+ print_gprs_0x28 + _log '^n r8-r15 ' + li r18, 0x08 + mtctr r18 + +print_gprs_0x58 + lwzu r8, 0x0004(r17) + bl Printw + bdnz+ print_gprs_0x58 + _log '^n r16-r23 ' + li r18, 0x08 + mtctr r18 + +print_gprs_0x88 + lwzu r8, 0x0004(r17) + bl Printw + bdnz+ print_gprs_0x88 + _log '^n r24-r31 ' + li r18, 0x08 + mtctr r18 + +print_gprs_0xb8 + lwzu r8, 0x0004(r17) + bl Printw + bdnz+ print_gprs_0xb8 + _log '^n' + mtlr r16 + blr + + + +; print_memory + +; Xrefs: +; panic + +print_memory ; OUTSIDE REFERER + mflr r18 + srwi r17, r17, 4 + +print_memory_0x8 + mr r8, r16 + bl Printw + _log ' ' + lwz r8, 0x0000(r16) + bl Printw + lwz r8, 0x0004(r16) + bl Printw + lwz r8, 0x0008(r16) + bl Printw + lwz r8, 0x000c(r16) + bl Printw + _log ' *' + li r8, 0x10 + addi r16, r16, -0x01 + mtctr r8 + +print_memory_0x60 + lbzu r8, 0x0001(r16) + cmpwi r8, 0xff + beq- print_memory_0x74 + cmpwi r8, 0x20 + bgt- print_memory_0x78 + +print_memory_0x74 + li r8, 0x20 + +print_memory_0x78 + bl Printc + bdnz+ print_memory_0x60 + _log '*^n' + addi r16, r16, 0x01 + addi r17, r17, -0x01 + bl getchar + cmpwi r8, -0x01 + bne- print_memory_0xb0 + cmpwi r17, 0x00 + bne+ print_memory_0x8 + +print_memory_0xb0 + _log '^n' + mtlr r18 + blr + + + +; print_memory_logical + +; Xrefs: +; panic + +print_memory_logical ; OUTSIDE REFERER + mflr r18 + srwi r17, r17, 4 + +print_memory_logical_0x8 + mr r8, r16 + bl Printw + _log ' ' + li r19, 0x10 + +print_memory_logical_0x24 + mr r27, r16 + bl PagingFunc1 + beq- print_memory_logical_0x5c + blt- print_memory_logical_0x48 + _log '..' + b print_memory_logical_0x6c + +print_memory_logical_0x48 + _log '--' + b print_memory_logical_0x6c + +print_memory_logical_0x5c + bl PagingFunc4 + rlwimi r31, r27, 0, 20, 31 + lbz r8, 0x0000(r31) + bl print_unknown + +print_memory_logical_0x6c + addi r16, r16, 0x01 + addi r19, r19, -0x01 + andi. r8, r19, 0x03 + bne- print_memory_logical_0x84 + li r8, 0x20 + bl Printc + +print_memory_logical_0x84 + cmpwi r19, 0x00 + bgt+ print_memory_logical_0x24 + _log ' *' + li r8, 0x10 + addi r16, r16, -0x10 + mtctr r8 + +print_memory_logical_0xac + mr r27, r16 + bl PagingFunc1 + li r8, 0x20 + bne- print_memory_logical_0xdc + bl PagingFunc4 + rlwimi r31, r27, 0, 20, 31 + lbz r8, 0x0000(r31) + cmpwi r8, 0xff + beq- print_memory_logical_0xd8 + cmpwi r8, 0x20 + bgt- print_memory_logical_0xdc + +print_memory_logical_0xd8 + li r8, 0x20 + +print_memory_logical_0xdc + bl Printc + addi r16, r16, 0x01 + bdnz+ print_memory_logical_0xac + _log '*^n' + addi r17, r17, -0x01 + bl getchar + cmpwi r8, -0x01 + bne- print_memory_logical_0x114 + cmpwi r17, 0x00 + bne+ print_memory_logical_0x8 + +print_memory_logical_0x114 + _log '^n' + mtlr r18 + blr + + + +; cmd_lookup + +; Xrefs: +; panic + +; > r16 = command strings +; > r17 = lut + +; < cr0 = found +; < r17 = ptr to lut entry + +cmd_lookup ; OUTSIDE REFERER + addi r15, r15, -0x01 + addi r16, r16, -0x01 + mr r18, r15 + +cmd_lookup_0xc + lbzu r21, 0x0001(r16) + lbzu r20, 0x0001(r15) + cmpwi r21, 0xff + cmpwi cr1, r21, 0x00 + beq- cmd_lookup_0x44 + beq- cr1, cmd_lookup_0x50 + cmpw r20, r21 + beq+ cmd_lookup_0xc + +cmd_lookup_0x2c + lbzu r21, 0x0001(r16) + cmpwi r21, 0x00 + bne+ cmd_lookup_0x2c + +cmd_lookup_0x38 + addi r17, r17, 0x04 + mr r15, r18 + b cmd_lookup_0xc + +cmd_lookup_0x44 + addi r15, r18, 0x01 + cmpw r15, r18 + blr + +cmd_lookup_0x50 + cmpwi r20, 0x20 + beqlr- + cmpwi r20, 0x00 + beqlr- + b cmd_lookup_0x38 + + + +; next_cmd_word + +; Xrefs: +; panic + +; > r15 = start + +; < r15 = ptr +; < r16 = char + +next_cmd_word ; OUTSIDE REFERER + addi r15, r15, -0x01 + +next_cmd_word_0x4 + lbzu r16, 0x0001(r15) + cmpwi r16, 0x20 + beq+ next_cmd_word_0x4 + blr + + + +; major_0x187b0 + +; Xrefs: +; panic + +major_0x187b0 ; OUTSIDE REFERER + addi r15, r15, -0x01 + li r16, 0x00 + +major_0x187b0_0x8 + lbzu r17, 0x0001(r15) + cmplwi r17, 0x30 + cmplwi cr1, r17, 0x39 + blt- major_0x187b0_0x28 + bgt- cr1, major_0x187b0_0x28 + slwi r16, r16, 4 + rlwimi r16, r17, 0, 28, 31 + b major_0x187b0_0x8 + +major_0x187b0_0x28 + cmplwi r17, 0x61 + cmplwi cr1, r17, 0x66 + blt- major_0x187b0_0x48 + bgt- cr1, major_0x187b0_0x48 + addi r17, r17, -0x57 + slwi r16, r16, 4 + rlwimi r16, r17, 0, 28, 31 + b major_0x187b0_0x8 + +major_0x187b0_0x48 + cmplwi r17, 0x41 + cmplwi cr1, r17, 0x46 + blt- major_0x187b0_0x68 + bgt- cr1, major_0x187b0_0x68 + addi r17, r17, -0x37 + slwi r16, r16, 4 + rlwimi r16, r17, 0, 28, 31 + b major_0x187b0_0x8 + +major_0x187b0_0x68 + cmpwi r17, 0x00 + beqlr- + cmpwi r17, 0x20 + blr + + +prereturn ; OUTSIDE REFERER + lwz r1, EWA.PA_KDP(r1) + + mfmsr r0 + _bset r0, r0, MSR_FPbit + mtmsr r0 + isync + + lfd f31, 0x08fc(r1) + mtfsf 0xff, f31 + lfd f0, 0x0800(r1) + lfd f1, 0x0808(r1) + lfd f2, 0x0810(r1) + lfd f3, 0x0818(r1) + lfd f4, 0x0820(r1) + lfd f5, 0x0828(r1) + lfd f6, 0x0830(r1) + lfd f7, 0x0838(r1) + lfd f8, 0x0840(r1) + lfd f9, 0x0848(r1) + lfd f10, 0x0850(r1) + lfd f11, 0x0858(r1) + lfd f12, 0x0860(r1) + lfd f13, 0x0868(r1) + lfd f14, 0x0870(r1) + lfd f15, 0x0878(r1) + lfd f16, 0x0880(r1) + lfd f17, 0x0888(r1) + lfd f18, 0x0890(r1) + lfd f19, 0x0898(r1) + lfd f20, 0x08a0(r1) + lfd f21, 0x08a8(r1) + lfd f22, 0x08b0(r1) + lfd f23, 0x08b8(r1) + lfd f24, 0x08c0(r1) + lfd f25, 0x08c8(r1) + lfd f26, 0x08d0(r1) + lfd f27, 0x08d8(r1) + lfd f28, 0x08e0(r1) + lfd f29, 0x08e8(r1) + lfd f30, 0x08f0(r1) + lfd f31, 0x08f8(r1) + + lwz r0, 0x07c0(r1) + mtsr 0x00, r0 + lwz r0, 0x07c4(r1) + mtsr 0x01, r0 + lwz r0, 0x07c8(r1) + mtsr 0x02, r0 + lwz r0, 0x07cc(r1) + mtsr 0x03, r0 + lwz r0, 0x07d0(r1) + mtsr 0x04, r0 + lwz r0, 0x07d4(r1) + mtsr 0x05, r0 + lwz r0, 0x07d8(r1) + mtsr 0x06, r0 + lwz r0, 0x07dc(r1) + mtsr 0x07, r0 + lwz r0, 0x07e0(r1) + mtsr 0x08, r0 + lwz r0, 0x07e4(r1) + mtsr 0x09, r0 + lwz r0, 0x07e8(r1) + mtsr 0x0a, r0 + lwz r0, 0x07ec(r1) + mtsr 0x0b, r0 + lwz r0, 0x07f0(r1) + mtsr 0x0c, r0 + lwz r0, 0x07f4(r1) + mtsr 0x0d, r0 + lwz r0, 0x07f8(r1) + mtsr 0x0e, r0 + lwz r0, 0x07fc(r1) + mtsr 0x0f, r0 + + lwz r0, 0x07a8(r1) + mtspr dec, r0 + + lwz r0, 0x07b4(r1) + mtspr srr0, r0 + lwz r0, 0x07b8(r1) + mtspr srr1, r0 + + lwz r0, 0x07bc(r1) + mtmsr r0 + + mfpvr r0 + rlwinm. r0, r0, 0, 0, 14 + + bne- @not_601 + lwz r0, 0x0784(r1) + mtspr mq, r0 +@not_601 + + lwz r0, 0x0788(r1) + mtxer r0 + lwz r0, 0x078c(r1) + mtsprg 2, r0 + lwz r0, 0x0790(r1) + mtctr r0 + + ; Only because this crashes QEMU + + if &TYPE('NKDebugShim') = 'UNDEFINED' + lwz r0, 0x0794(r1) + mtspr pvr, r0 + endif + + lwz r0, 0x0798(r1) + mtspr dsisr, r0 + lwz r0, 0x079c(r1) + mtspr dar, r0 + lwz r0, 0x0780(r1) + mtcr r0 + lwz r0, 0x0700(r1) + lwz r2, 0x0704(r1) + mtsprg 1, r2 + lmw r2, 0x0708(r1) + + + blr + + align 5 diff --git a/NanoKernel/NKTimers.s b/NanoKernel/NKTimers.s new file mode 100644 index 0000000..fa0d7eb --- /dev/null +++ b/NanoKernel/NKTimers.s @@ -0,0 +1,1002 @@ +Local_Panic set * + b panic + + + +; InitTMRQs + +; Xrefs: +; setup + +InitTMRQs ; OUTSIDE REFERER + addi r9, r1, -0xa84 + lis r8, 0x544d + ori r8, r8, 0x5251 + stw r8, 0x0004(r9) + stw r9, 0x0008(r9) + stw r9, 0x000c(r9) + li r8, 0x00 + stb r8, 0x0014(r9) + li r8, 0x01 + stb r8, 0x0016(r9) + stb r8, 0x0017(r9) + lis r8, 0x7fff + ori r8, r8, 0xffff + mtspr dec, r8 + stw r8, 0x0038(r9) + oris r8, r8, 0xffff + stw r8, 0x003c(r9) + mfspr r8, pvr + rlwinm. r8, r8, 0, 0, 14 + beq- InitTMRQs_0x7c + mflr r30 + li r8, 0x40 + +; r1 = kdp +; r8 = size + bl PoolAlloc +; r8 = ptr + + mr. r31, r8 + beq+ Local_Panic + stw r31, -0x0434(r1) + li r9, 0x07 + stb r9, 0x0014(r31) + li r9, 0x01 + stb r9, 0x0016(r31) + mtlr r30 + +InitTMRQs_0x7c + mfspr r8, pvr + rlwinm. r8, r8, 0, 0, 14 + beq- InitTMRQs_0xb4 + mflr r30 + li r8, 0x40 + +; r1 = kdp +; r8 = size + bl PoolAlloc +; r8 = ptr + + mr. r31, r8 + beq+ Local_Panic + stw r31, -0x0364(r1) + li r9, 0x08 + stb r9, 0x0014(r31) + li r9, 0x01 + stb r9, 0x0016(r31) + mtlr r30 + +InitTMRQs_0xb4 + lwz r30, 0x0630(r1) + lhz r31, 0x0378(r30) + cmplwi r31, 0x101 + blt- InitTMRQs_0x140 + lwz r31, 0x0388(r30) + clrlwi. r8, r31, 0x1f + beq- InitTMRQs_0x140 + lwz r8, 0x0edc(r1) + ori r8, r8, 0x02 + stw r8, 0x0edc(r1) + mflr r30 + li r8, 0x40 + +; r1 = kdp +; r8 = size + bl PoolAlloc +; r8 = ptr + + mr. r31, r8 + beq+ Local_Panic + li r9, 0x06 + stb r9, 0x0014(r31) + li r9, 0x01 + stb r9, 0x0016(r31) + bl GetTime + stw r8, 0x0038(r31) + stw r9, 0x003c(r31) + mr r8, r31 + bl called_by_init_tmrqs + _log 'Nanodebugger activated.^n' + mtlr r30 + +InitTMRQs_0x140 + blr + + + +; TimerDispatch + +; Xrefs: +; IntDecrementer +; major_0x130f0 + +TimerTable + + dc.l major_0x130f0 - NKTop + dc.l major_0x13120 - NKTop + dc.l major_0x1318c - NKTop + dc.l major_0x1324c - NKTop + dc.l major_0x132e8 - NKTop + dc.l major_0x13350 - NKTop + dc.l major_0x135b8 - NKTop + dc.l major_0x134bc - NKTop + dc.l major_0x13524 - NKTop + +TimerDispatch ; OUTSIDE REFERER + mflr r19 + mfsprg r18, 0 + stw r19, -0x0258(r18) + +TimerDispatch_0x30 ; OUTSIDE REFERER + mfspr r8, pvr + rlwinm. r8, r8, 0, 0, 14 + beq- TimerDispatch_0x54 + +TimerDispatch_0x3c + mftbu r8 + mftb r9 + mftbu r16 + cmpw r8, r16 + bne- TimerDispatch_0x3c + b TimerDispatch_0x90 + +TimerDispatch_0x54 + mfspr r8, rtcu + mfspr r9, rtcl + mfspr r16, rtcu + cmpw r8, r16 + bne- TimerDispatch_0x54 + lis r16, 0x3b9a + ori r16, r16, 0xca00 + mfspr r17, mq + dc.l 0x7d1040d6 + mfspr r16, mq + mtspr mq, r17 + mfxer r17 + addc r9, r16, r9 + addze r8, r8 + mtxer r17 + +TimerDispatch_0x90 + lbz r19, -0x0309(r18) + addi r30, r18, -0x320 + cmpwi r19, 0x01 + lwz r16, 0x0038(r30) + bne- TimerDispatch_0xcc + lwz r17, 0x003c(r30) + cmpw r16, r8 + cmplw cr1, r17, r9 + bgt- TimerDispatch_0xcc + blt- TimerDispatch_0xbc + bgt- cr1, TimerDispatch_0xcc + +TimerDispatch_0xbc + li r19, 0x00 + stw r30, -0x0254(r18) + stb r19, 0x0017(r30) + b major_0x132e8_0x10 + +TimerDispatch_0xcc + lwz r30, -0x0a7c(r1) + lwz r16, 0x0038(r30) + lwz r17, 0x003c(r30) + cmpw r16, r8 + cmplw cr1, r17, r9 + bgt- TimerDispatch_0x188 + blt- TimerDispatch_0xec + bgt- cr1, TimerDispatch_0x188 + +TimerDispatch_0xec + lwz r19, 0x0008(r30) + lwz r20, 0x000c(r30) + stw r19, 0x0008(r20) + stw r20, 0x000c(r19) + li r19, 0x00 + stw r19, 0x0008(r30) + stw r19, 0x000c(r30) + lwz r19, 0x064c(r1) + lbz r20, 0x0014(r30) + rlwimi r19, r20, 2, 23, 29 + cmplwi r20, 0x09 + llabel r20, TimerTable + li r21, 0x00 + add r20, r20, r19 + bgel+ Local_Panic + stb r21, 0x0017(r30) + lwz r20, 0x0000(r20) + add r20, r20, r19 + mtlr r20 + stw r30, -0x0254(r18) + blr + +TimerDispatch_0x144 + mfsprg r18, 0 + lwz r30, -0x0254(r18) + lbz r19, 0x0016(r30) + cmpwi r19, 0x01 + lwz r8, 0x0000(r30) + beq+ TimerDispatch_0x30 + bl DeleteID + mr r8, r30 + bl PoolFree + lwz r8, 0x001c(r30) + cmpwi r8, 0x00 + beq- TimerDispatch_0x180 + bl PoolFree + li r8, 0x00 + stw r8, 0x001c(r30) + +TimerDispatch_0x180: + mfsprg r18, 0 + b TimerDispatch_0x30 + +TimerDispatch_0x188 + lwz r19, -0x0258(r18) + mtlr r19 + b major_0x13060_0x18 + + + +; StartTimeslicing + +; Xrefs: +; setup + +StartTimeslicing ; OUTSIDE REFERER + mfsprg r19, 0 + + li r8, 1 + stb r8, -0x0309(r19) + + li r8, 0 + stw r8, -0x02e8(r19) + stw r8, -0x02e4(r19) + + mflr r19 + _log 'Starting timeslicing^n' + mtlr r19 + + + +; major_0x13060 + +; Xrefs: +; TimerDispatch +; StartTimeslicing +; called_by_init_tmrqs +; major_0x136c8 +; major_0x148ec + +major_0x13060 ; OUTSIDE REFERER + mflr r19 + bl GetTime + mtlr r19 + +major_0x13060_0xc ; OUTSIDE REFERER + lwz r18, -0x0a7c(r1) + lwz r16, 0x0038(r18) + lwz r17, 0x003c(r18) + +major_0x13060_0x18 ; OUTSIDE REFERER + mfxer r20 + mfsprg r19, 0 + lis r21, 0x7fff + lbz r18, -0x0309(r19) + ori r21, r21, 0xffff + cmpwi r18, 0x01 + bne- major_0x13060_0x58 + lwz r18, -0x02e8(r19) + lwz r19, -0x02e4(r19) + cmpw r16, r18 + cmplw cr1, r17, r19 + blt- major_0x13060_0x58 + bgt- major_0x13060_0x50 + ble- cr1, major_0x13060_0x58 + +major_0x13060_0x50 + mr r17, r19 + mr r16, r18 + +major_0x13060_0x58 + subfc r17, r9, r17 + subfe. r16, r8, r16 + mtxer r20 + blt- major_0x13060_0x84 + bne- major_0x13060_0x7c + cmplw r16, r21 + bgt- major_0x13060_0x7c + mtspr dec, r17 + blr + +major_0x13060_0x7c + mtspr dec, r21 + blr + +major_0x13060_0x84 + mtspr dec, r21 + mtspr dec, r16 + blr + + + +; major_0x130f0 + +; Xrefs: +; TimerDispatch + +major_0x130f0 ; OUTSIDE REFERER + _log 'TimerInformation.kind is zero??^n' + + + +; major_0x13120 + +; Xrefs: +; TimerDispatch +; major_0x130f0 + +major_0x13120 ; OUTSIDE REFERER + bl Local_Panic + lwz r18, 0x0018(r30) + stw r16, 0x0080(r18) + stw r17, 0x0084(r18) + lwz r8, 0x0018(r30) + li r16, 0x00 + lbz r17, 0x0018(r8) + lwz r19, 0x0088(r8) + cmpwi r17, 0x00 + stw r16, 0x011c(r19) + bne- major_0x13120_0x64 + addi r16, r8, 0x08 + lwz r17, 0x0008(r16) + lwz r19, 0x000c(r16) + stw r17, 0x0008(r19) + stw r19, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + li r17, 0x01 + stb r17, 0x0019(r8) + bl TaskReadyAsPrev + bl CalculateTimeslice + bl major_0x14af8 + b TimerDispatch_0x144 + +major_0x13120_0x64 + lwz r16, 0x0064(r8) + rlwinm. r16, r16, 0, 30, 30 + + + +; major_0x1318c + +; Xrefs: +; TimerDispatch +; major_0x13120 + +major_0x1318c ; OUTSIDE REFERER + bne+ TimerDispatch_0x144 + bl Local_Panic + lwz r18, 0x0018(r30) + stw r16, 0x0080(r18) + stw r17, 0x0084(r18) + lwz r8, 0x0018(r30) + li r16, -0x7270 + lbz r17, 0x0018(r8) + lwz r18, 0x0088(r8) + cmpwi r17, 0x00 + bne- major_0x1324c_0x8 + stw r16, 0x011c(r18) + lwz r8, 0x0008(r8) + lwz r8, 0x0000(r8) + +; r8 = id + bl LookupID + cmpwi r9, Queue.kIDClass + + cmpwi cr1, r9, 0x05 + beq- major_0x1318c_0x8c + beq- cr1, major_0x1318c_0x7c + cmpwi r9, 0x09 + cmpwi cr1, r9, 0x06 + beq- major_0x1318c_0x6c + bne+ cr1, Local_Panic + lwz r16, 0x0020(r8) + addi r16, r16, -0x01 + stw r16, 0x0020(r8) + b major_0x1318c_0x98 + +major_0x1318c_0x6c + lwz r16, 0x001c(r8) + addi r16, r16, -0x01 + stw r16, 0x001c(r8) + b major_0x1318c_0x98 + +major_0x1318c_0x7c + lwz r16, 0x001c(r8) + addi r16, r16, -0x01 + stw r16, 0x001c(r8) + b major_0x1318c_0x98 + +major_0x1318c_0x8c + lwz r16, 0x002c(r8) + addi r16, r16, -0x01 + stw r16, 0x002c(r8) + +major_0x1318c_0x98 + lwz r8, 0x0018(r30) + addi r16, r8, 0x08 + lwz r17, 0x0008(r16) + lwz r18, 0x000c(r16) + stw r17, 0x0008(r18) + stw r18, 0x000c(r17) + li r17, 0x00 + stw r17, 0x0008(r16) + stw r17, 0x000c(r16) + bl TaskReadyAsPrev + + + +; major_0x1324c + +; Xrefs: +; TimerDispatch +; major_0x1318c + +major_0x1324c ; OUTSIDE REFERER + bl major_0x14af8 + b TimerDispatch_0x144 + +major_0x1324c_0x8 ; OUTSIDE REFERER + b Local_Panic + + + +; major_0x13258 + +; Dead code -- probably removed from TimerTable + + lwz r8, 0x0018(r30) + +; r8 = id + bl LookupID + cmpwi r9, Queue.kIDClass + + mr r31, r8 + bne- major_0x13258_0x68 + lwz r16, 0x0024(r31) + lwz r8, 0x001c(r30) + cmpwi r16, 0x00 + cmpwi cr1, r8, 0x00 + beq- major_0x13258_0x40 + lwz r17, 0x0028(r31) + mr. r8, r17 + lwz r17, 0x0008(r17) + beq- major_0x13258_0x68 + stw r17, 0x0028(r31) + b major_0x13258_0x4c + +major_0x13258_0x40 + beq- cr1, major_0x13258_0x68 + li r16, 0x00 + stw r16, 0x001c(r30) + +major_0x13258_0x4c + lwz r16, 0x0020(r30) + lwz r17, 0x0024(r30) + lwz r18, 0x0028(r30) + stw r16, 0x0010(r8) + stw r17, 0x0014(r8) + stw r18, 0x0018(r8) + bl major_0x0c8b4 + +major_0x13258_0x68 + lwz r8, 0x0034(r30) + +; r8 = id + bl LookupID + cmpwi r9, Semaphore.kIDClass + + mr r31, r8 + bne- major_0x13258_0x80 + bl major_0x0ccf4 + +major_0x13258_0x80 + lwz r8, 0x002c(r30) + +; r8 = id + bl LookupID + cmpwi r9, EventGroup.kIDClass + + mr r31, r8 + + + +; major_0x132e8 + +; Xrefs: +; TimerDispatch +; major_0x13258 + +major_0x132e8 ; OUTSIDE REFERER + bne- major_0x132e8_0xc + lwz r8, 0x0030(r30) + bl major_0x0d35c + +major_0x132e8_0xc + b TimerDispatch_0x144 + +major_0x132e8_0x10 ; OUTSIDE REFERER + mfsprg r28, 0 + lwz r29, -0x0008(r28) + mr r8, r29 + bl major_0x13e4c + lbz r17, 0x0019(r29) + cmpwi r17, 0x02 + bge- major_0x132e8_0x64 + mr r8, r29 + lwz r16, 0x0038(r30) + lwz r17, 0x003c(r30) + bl clear_cr0_lt + bge- major_0x132e8_0x50 + mr r8, r29 + bl TaskReadyAsPrev + bl CalculateTimeslice + b major_0x13350_0x8 + +major_0x132e8_0x50 + li r18, 0x02 + stb r18, 0x0019(r29) + mr r8, r29 + bl TaskReadyAsPrev + b major_0x13350_0x8 + +major_0x132e8_0x64 + mr r8, r29 + + + +; major_0x13350 + +; Xrefs: +; TimerDispatch +; major_0x132e8 + +major_0x13350 ; OUTSIDE REFERER + bl TaskReadyAsPrev + bl major_0x149d4 + +major_0x13350_0x8 ; OUTSIDE REFERER + bl major_0x14af8 + mfsprg r18, 0 + b TimerDispatch_0x30 + + + +; major_0x13364 + +; Dead code -- probably removed from TimerTable + + _log 'Heartbeat: Ext ' + lwz r16, 0x0e80(r1) + mr r8, r16 + bl printd + _log 'Alerts ' + lwz r16, 0x0ee0(r1) + mr r8, r16 + bl printd + _log 'Blue cpu-' + lwz r17, -0x08f0(r1) + lhz r16, 0x001a(r17) + mr r8, r16 + bl printb + _log 'state-' + lbz r16, 0x0018(r17) + mr r8, r16 + bl printb + _log 'scr-' + lwz r16, 0x0658(r1) + lwz r18, 0x0674(r1) + lwz r16, 0x00dc(r16) + and r16, r16, r18 + mr r8, r16 + bl printw + _log 'mcr-' + lwz r16, -0x0440(r1) + mr r8, r16 + bl printw + _log 'IPL-' + lwz r16, 0x067c(r1) + lhz r16, 0x0000(r16) + mr r8, r16 + bl printh + _log 'eSR-' + lwz r16, 0x0658(r1) + lwz r16, 0x01cc(r16) + andi. r16, r16, 0x07 + mr r8, r16 + bl printb + _log '^n' + mfxer r19 + lwz r16, 0x0038(r30) + lwz r17, 0x003c(r30) + lwz r18, 0x0f2c(r1) + slwi r18, r18, 3 + addc r17, r17, r18 + + + +; major_0x134bc + +; Xrefs: +; TimerDispatch +; major_0x13364 + +major_0x134bc ; OUTSIDE REFERER + addze r16, r16 + stw r16, 0x0038(r30) + stw r17, 0x003c(r30) + mtxer r19 + mr r8, r30 + bl called_by_init_tmrqs + b TimerDispatch_0x144 + + + +; major_0x134d8 + +; Dead code -- probably removed from TimerTable + + lwz r18, -0x0438(r1) + lwz r19, 0x0f88(r1) + subf. r19, r18, r19 + ble- major_0x13524_0x1c + srwi r19, r19, 11 + mfxer r20 + +major_0x134d8_0x18 + mftbu r16 + mftb r17, 0x10c + mftbu r18 + cmpw r16, r18 + li r18, 0x00 + bne- major_0x134d8_0x18 + mttb r18 + addc r17, r17, r19 + addze r16, r16 + mttbu r16 + mttb r17 + lwz r18, -0x0438(r1) + srwi r18, r18, 11 + + + +; major_0x13524 + +; Xrefs: +; TimerDispatch +; major_0x134d8 + +major_0x13524 ; OUTSIDE REFERER + addc r17, r17, r18 + addze r16, r16 + stw r16, 0x0038(r30) + stw r17, 0x003c(r30) + mtxer r20 + mr r8, r30 + bl called_by_init_tmrqs + +major_0x13524_0x1c ; OUTSIDE REFERER + b TimerDispatch_0x144 + + + +; major_0x13544 + +; Dead code -- probably removed from TimerTable + + lwz r19, -0x036c(r1) + mfxer r20 + cmpwi cr1, r19, 0x00 + srawi r8, r19, 31 + beq- cr1, major_0x135b8_0x4 + +major_0x13544_0x14 + mftbu r16 + mftb r17, 0x10c + mftbu r18 + cmpw r16, r18 + li r18, 0x00 + bne- major_0x13544_0x14 + mttb r18 + addc r19, r17, r19 + adde r18, r16, r8 + mttbu r18 + mttb r19 + bgt- cr1, major_0x13544_0x64 + +major_0x13544_0x44 + mftbu r18 + mftb r19, 0x10c + mftbu r8 + cmpw r18, r8 + bne- major_0x13544_0x44 + subfc r19, r17, r19 + subfe. r18, r16, r18 + blt+ major_0x13544_0x44 + +major_0x13544_0x64 + lwz r18, -0x0368(r1) + addc r17, r17, r18 + addze r16, r16 + stw r16, 0x0038(r30) + + + +; major_0x135b8 + +; Xrefs: +; TimerDispatch +; major_0x13544 + +major_0x135b8 ; OUTSIDE REFERER + stw r17, 0x003c(r30) + +major_0x135b8_0x4 ; OUTSIDE REFERER + mtxer r20 + beq+ cr1, TimerDispatch_0x144 + mr r8, r30 + bl called_by_init_tmrqs + b TimerDispatch_0x144 + + + +; major_0x135d0 + +; Dead code -- probably removed from TimerTable + + mfxer r19 + lwz r16, 0x0038(r30) + lwz r17, 0x003c(r30) + lwz r18, 0x0f2c(r1) + srwi r18, r18, 1 + addc r17, r17, r18 + addze r16, r16 + stw r16, 0x0038(r30) + stw r17, 0x003c(r30) + mtxer r19 + mr r8, r30 + bl called_by_init_tmrqs + bl getchar + cmpwi r8, -0x01 + beq+ TimerDispatch_0x144 + bl panic_non_interactive + b TimerDispatch_0x144 + + + +; called_by_init_tmrqs + +; Xrefs: +; MPCall_55 +; NKSetClockStep +; NKSetClockDriftCorrection +; MPCall_18 +; MPCall_23 +; MPCall_27 +; MPCall_52 +; MPCall_31 +; InitTMRQs + +; ARG KernelData *r1, TimerQueueStruct *r8 + +called_by_init_tmrqs ; OUTSIDE REFERER + lwz r16, 0x0038(r8) + lwz r17, 0x003c(r8) + lwz r20, PSA.TimerQueue + TimerQueueStruct.LLL + LLL.Next(r1) + lwz r18, 0x0038(r20) + lwz r19, 0x003c(r20) + cmpw r16, r18 + cmplw cr1, r17, r19 + bgt- called_by_init_tmrqs_0x5c + blt- called_by_init_tmrqs_0x28 + bge- cr1, called_by_init_tmrqs_0x5c + +called_by_init_tmrqs_0x28 + addi r20, r1, -0xa84 + li r18, 0x01 + stb r18, 0x0017(r8) + lwz r19, 0x0000(r8) + lwz r9, 0x0000(r20) + stw r9, 0x0000(r8) + lwz r9, 0x0008(r20) + stw r9, 0x0008(r8) + stw r20, 0x000c(r8) + stw r8, 0x000c(r9) + stw r8, 0x0008(r20) + stw r19, 0x0000(r8) + b major_0x13060 + +called_by_init_tmrqs_0x5c + lwz r20, -0x0a78(r1) + +called_by_init_tmrqs_0x60 + lwz r18, 0x0038(r20) + lwz r19, 0x003c(r20) + cmpw r16, r18 + cmplw cr1, r17, r19 + bgt- called_by_init_tmrqs_0x84 + blt- called_by_init_tmrqs_0x7c + bge- cr1, called_by_init_tmrqs_0x84 + +called_by_init_tmrqs_0x7c + lwz r20, 0x000c(r20) + b called_by_init_tmrqs_0x60 + +called_by_init_tmrqs_0x84 + li r18, 0x01 + stb r18, 0x0017(r8) + lwz r19, 0x0000(r8) + lwz r9, 0x0000(r20) + stw r9, 0x0000(r8) + lwz r9, 0x0008(r20) + stw r9, 0x0008(r8) + stw r20, 0x000c(r8) + stw r8, 0x000c(r9) + stw r8, 0x0008(r20) + stw r19, 0x0000(r8) + blr + + + + + + + +; major_0x136c8 + +; Xrefs: +; NKSetClockStep +; NKSetClockDriftCorrection +; MPCall_16 +; major_0x0c8b4 +; major_0x0ccf4 +; MPCall_21 +; MPCall_28 +; MPCall_26 +; MPCall_50 +; major_0x0d35c +; MPCall_41 +; MPCall_31 +; MPCall_32 +; major_0x0dce8 +; MPCall_9 +; CommonPIHPath + +major_0x136c8 ; OUTSIDE REFERER + lwz r16, 0x0008(r8) + cmpwi r16, 0x00 + lwz r18, -0x0a7c(r1) + beq+ Local_Panic + lwz r16, 0x0008(r8) + lwz r17, 0x000c(r8) + stw r16, 0x0008(r17) + stw r17, 0x000c(r16) + li r16, 0x00 + stw r16, 0x0008(r8) + stw r16, 0x000c(r8) + li r16, 0x00 + cmpw r18, r8 + stb r16, 0x0017(r8) + beq+ major_0x13060 + blr + + + +; TimebaseTicksPerPeriod + +; Xrefs: +; MPCall_18 +; MPCall_23 +; MPCall_27 +; MPCall_52 +; MPCall_31 +; InitRDYQs + +; Get the number of timebase ticks in a specified period + +; ARG long r8 period (positive for ms, negative for us) + +TimebaseTicksPerPeriod + mr. r17, r8 + li r19, 250 + lwz r9, KDP.ProcessorInfo + NKProcessorInfo.DecClockRateHz(r1) + + bgt+ @period_positive + blt+ @period_negative + li r8, 0 + li r9, 0 + blr ; fail +@period_negative + neg r17, r17 + lisori r19, 250000 +@period_positive + + divw r19, r9, r19 + + mullw r9, r19, r17 + mulhw r8, r19, r17 + + srwi r9, r9, 2 + rlwimi r9, r8, 30, 0, 1 + srwi r8, r8, 2 + + blr + + + + +; Xrefs: +; NKSetClockStep +; NKSetClockDriftCorrection +; MPCall_18 +; MPCall_23 +; MPCall_27 +; MPCall_52 +; MPCall_40 +; MPCall_32 +; CreateTask +; InitTMRQs +; major_0x13060 +; major_0x142dc +; major_0x14548 + +; RET long r8 tbu, long r9 tbl +; CLOB r16, r17 + +GetTime + + mfpvr r8 + rlwinm. r8, r8, 0, 0, 14 + beq- @is_601 + +@retry_timebase: + mftbu r8 + mftb r9 + mftbu r16 + cmpw r8, r16 + bne- @retry_timebase + + b @return + +@is_601 + dialect POWER ; disassembled this in POWER mode! + +@retry_rtc + mfrtcu r8 + mfrtcl r9 + mfrtcu r16 + cmp 0, r8, r16 + + dialect PowerPC + bne- @retry_rtc ; POWER chokes on hints? + dialect POWER + + liu r16, 1000000000 >> 16 + oril r16, r16, 1000000000 & 0xffff + + mfmq r17 + mul r8, r16, r8 + mfmq r16 + mtmq r17 + + mfxer r17 + a r9, r16, r9 + aze r8, r8 + mtxer r17 + + dialect POWERPC + +@return + blr diff --git a/NanoKernel/NKTranslation.s b/NanoKernel/NKTranslation.s new file mode 100644 index 0000000..50e7b95 --- /dev/null +++ b/NanoKernel/NKTranslation.s @@ -0,0 +1,4374 @@ +; This file is tricky. Along with the file immediately before it, +; Interrupts.s, it emulates unsupported PowerPC instructions. +; This mechanism is heavily optimized, and the jumping between +; tables (which I have tried to describe as well as I can) is +; very confusing. + +; It is called 'FDP' because of a long-ago confusion about what it did. + +; Some of the mnemonics might look a bit odd, because I used MPW +; to disassemble instead of ppcdisasm.py or gas. + +; The init code puts a pointer to 'FDP' in the part of the KDP that is +; mostly shared with NKv1. Therefore this is probably deep Davidianian +; magic. The tables here contain relative references to other tables +; in Interrupts.s. What a mess. + + + align 11 + + +FDP + + +FDP_panic + bl panic + + +FDP_0004 + b FDP_024C + + +; This stuff is for emulating float storage instructions + +FDP_0008 ; stfs(x) + rlwinm r17, r17, 0, 16, 10 + + +FDP_000c ; stfsu(x) + crclr cr7_SO + b FDP_001C + + +FDP_0014 ; stfd(x), stfiwx + rlwinm r17, r17, 0, 16, 10 + + +FDP_0018 ; stfdu(x) + crset cr7_SO + + +FDP_001c ; called from above + clrrwi r19, r25, 10 + rlwimi r19, r17, 14, 24, 28 + addi r19, r19, FloatSaveJumpTable - FDP + mtlr r19 + rlwimi r14, r11, 0, 18, 18 + mtmsr r14 + isync + blr + + +FDP_003c ; Called by the jump table in the previous file + ori r11, r11, 0x2000 + lwz r20, -0x02E0(r1) + lwz r21, -0x02DC(r1) + bso cr7, FDP_00E8 + extrwi r23, r20, 11, 1 + cmpwi r23, 896 + insrwi r20, r20, 27, 2 + inslwi r20, r21, 3, 29 + mr r21, r20 + bgt FDP_00E8 + cmpwi r23, 874 + clrrwi r21, r20, 31 + blt FDP_00E8 + oris r20, r20, 0x0080 + neg r23, r23 + clrlwi r20, r20, 8 + srw r20, r20, r23 + rlwimi r21, r20, 31, 9, 31 + b FDP_00E8 + + +FDP_0088 ; stwbrx + rlwinm r28, r17, 13, 25, 29 + lwbrx r21, r1, r28 + b FDP_00E4 + + +FDP_0094 ; sthbrx + rlwinm r28, r17, 13, 25, 29 + addi r21, r1, 2 + lhbrx r21, r21, r28 + b FDP_00E4 + + +FDP_00a4 ; sthu(x) + rlwinm r28, r17, 13, 25, 29 + lwzx r21, r1, r28 + b FDP_00E8 + + +FDP_00b0 ; stwcx. + rlwinm r28, r17, 13, 25, 29 + lwzx r21, r1, r28 + + +FDP_00b8 ; lwarx + crset cr5_SO + b FDP_00E4 + + +FDP_00c0 ; lbzu(x), stbu(x), lhau(x), stmw + clrrwi r18, r18, 4 + rlwimi r15, r11, 0, 6, 6 + b FDP_00E4 + + +FDP_00cc ; lwzu(x) + clrrwi r18, r18, 1 + b FDP_00E4 + + +FDP_00d4 ; lbz(x) + clrrwi r18, r18, 2 + b FDP_00E4 + + +FDP_00dc ; ecowx, sth(x) + rlwinm r28, r17, 13, 25, 29 + lwzx r21, r1, r28 + + +FDP_00e4 ; eciwx, lwz(x), lbz(x), lhz(x), lha(x), lfs(x), lfd(x) + rlwinm r17, r17, 0, 16, 10 + + +FDP_00e8 ; lwbrx, lhbrx, lmw, lhzu(x), lhfsu(x), lfdu(x) + extrwi. r22, r17, 5, 26 + add r19, r18, r22 + b FDP_03AC + + +FDP_00f4 + srwi r23, r21, 16 + sth r23, -0x0004(r19) + subi r17, r17, 4 + sth r21, -0x0002(r19) + b FDP_011C + + +FDP_0108 + lhz r23, -0x0004(r19) + subi r17, r17, 4 + insrwi r21, r23, 16, 0 + + +FDP_0114 + lhz r23, -0x0002(r19) + insrwi r21, r23, 16, 16 + + +FDP_011c ; exported, r25 = address of routine in MixedTable + li r0, -3 + sc + bl major_0x03548 + rlwinm. r28, r17, 18, 25, 29 + mtlr r25 + mfsprg r1, 0 + cror cr0_EQ, cr0_EQ, cr3_EQ + mtsprg 3, r24 + beqlr + crset cr3_SO + stwx r18, r1, r28 + blr + + +FDP_014C + extsh r21, r21 + + +FDP_0150 + rlwinm r28, r17, 13, 25, 29 + crset cr3_SO + stwx r21, r1, r28 + + +FDP_015C + b FDP_0dA0 + + +FDP_0160 + slwi r21, r21, 16 + + +FDP_0164 + rlwinm r28, r17, 13, 25, 29 + crset cr3_SO + stwbrx r21, r1, r28 + b FDP_0dA0 + + +FDP_0174 + b FDP_0fA8 + +FDP_0178 + clrrwi r23, r25, 10 + rlwimi r23, r17, 14, 24, 28 + addi r23, r23, FloatLoadJumpTable - FDP + mtlr r23 + stw r20, -0x02E0(r1) + stw r21, -0x02DC(r1) + rlwimi r14, r11, 0, 18, 18 + mtmsr r14 + isync + ori r11, r11, 0x2000 + blr + + +FDP_01a4 + rlwinm. r28, r17, 13, 25, 29 + rlwinm r23, r17, 18, 25, 29 + cmpw cr7, r28, r23 + addis r17, r17, 32 + beq FDP_01BC + beq cr7, FDP_01C0 + + +FDP_01bc + stwx r21, r1, r28 + + +FDP_01c0 + cmpwi r28, 124 + li r22, 9 + insrwi r17, r22, 6, 26 + addi r19, r19, 4 + bne FDP_03AC + b FDP_0dA0 + + +FDP_01d8 + addis r17, r17, 32 + rlwinm. r28, r17, 13, 25, 29 + beq FDP_0dA0 + lwzx r21, r1, r28 + li r22, 8 + insrwi r17, r22, 6, 26 + addi r19, r19, 4 + b FDP_03AC + + +FDP_01f8 ; dcbz + lwz r21, -0x0004(r1) + lhz r21, 0x0F4A(r21) + neg r21, r21 + and r19, r18, r21 + b FDP_0224 + + +FDP_020c + lwz r21, -0x0004(r1) + lhz r21, 0x0F4A(r21) + subi r21, r21, 8 + and. r22, r19, r21 + clrrwi r19, r19, 3 + beq FDP_0dA0 + + +FDP_0224 + li r22, 16 + insrwi. r17, r22, 6, 26 + addi r19, r19, 8 + li r20, 0 + li r21, 0 + b FDP_03AC + + +FDP_023c + rlwinm r16, r16, 0, 28, 25 + subi r10, r10, 4 + stw r16, -0x0010(r1) + b FDP_0dA0 + + +FDP_024c + li r8, 18 + b major_0x02980 + + +FDP_0254 ; stswi + subi r22, r27, 2048 + extrwi r22, r22, 5, 16 + b FDP_0270 + + +FDP_0260 ; stswx + mfxer r22 + andi. r22, r22, 0x007F + subi r22, r22, 1 + beq FDP_0dA0 + + +FDP_0270 + rlwimi r17, r22, 4, 21, 25 + not r22, r22 + insrwi r17, r22, 2, 4 + mr r19, r18 + b FDP_0e60 + + +FDP_0284 + andi. r22, r17, 0x07C0 + addis r28, r17, 32 + rlwimi r17, r28, 0, 6, 10 + subi r17, r17, 64 + bne FDP_0e60 + b FDP_0dA0 + + +FDP_029c ; lswi + subi r22, r27, 2048 + extrwi r22, r22, 5, 16 + addis r28, r27, 992 + rlwimi r17, r28, 22, 16, 20 + b FDP_02C4 + + +FDP_02b0 ; lswx + mfxer r22 + andi. r22, r22, 0x007F + rlwimi r17, r27, 0, 16, 20 + subi r22, r22, 1 + beq FDP_0dA0 + + +FDP_02c4 + andis. r23, r17, 0x001F + rlwimi r17, r22, 4, 21, 25 + not r22, r22 + insrwi r17, r22, 2, 4 + mr r19, r18 + bne FDP_0eC8 + rlwimi r17, r17, 5, 11, 15 + b FDP_0eC8 + + +FDP_02e4 + andi. r22, r17, 0x07C0 + rlwinm r28, r17, 13, 25, 29 + bne FDP_0e9C + rlwinm r22, r17, 9, 27, 28 + slw r21, r21, r22 + b FDP_0e9C + + +FDP_02fc + rlwinm. r22, r17, 28, 25, 29 + rlwinm r28, r17, 13, 25, 29 + bne FDP_0eF4 + rlwinm r23, r17, 9, 27, 28 + slw r21, r21, r23 + b FDP_0eF4 + + +FDP_0314 ; unknown table entries + mfxer r22 + + +FDP_0318 + andi. r22, r22, 0x007F + rlwimi r17, r27, 0, 16, 20 + insrwi r17, r27, 1, 3 + cmpw cr7, r27, r22 + beq FDP_0f80 + subi r22, r22, 1 + andis. r23, r17, 0x001F + rlwimi r17, r22, 4, 21, 25 + not r22, r22 + insrwi r17, r22, 2, 4 + mr r19, r18 + bne FDP_0eC8 + rlwimi r17, r17, 5, 11, 15 + b FDP_0eC8 + + +FDP_0350 ; stw(x) + li r20, 11040 + b FDP_1024 + + +FDP_0358 ; stwu(x) + clrrwi r18, r18, 1 + li r20, 11296 + b FDP_1024 + + +FDP_0364 ; stb(x) + clrrwi r18, r18, 2 + li r20, 11552 + b FDP_1024 + + +FDP_0370 + subi r23, r1, 736 + li r20, 10016 + insrwi r23, r18, 4, 28 + stb r21, 0x0000(r23) + b FDP_1000 + + +FDP_0384 + subi r23, r1, 736 + li r20, 10272 + insrwi r23, r18, 4, 28 + sth r21, 0x0000(r23) + b FDP_1000 + + +FDP_0398 + subi r23, r1, 736 + li r20, 10528 + insrwi r23, r18, 4, 28 + stw r21, 0x0000(r23) + b FDP_1000 + + +FDP_03ac + lwz r1, -0x0004(r1) + clrrwi r25, r25, 10 + insrwi r25, r19, 3, 28 + insrwi r25, r17, 5, 23 + lha r22, 0x0C00(r25) + addi r23, r1, 1248 + add r22, r22, r25 + mfsprg r1, 0 + mtlr r22 + ori r15, r15, 0x4000 + mtsprg 3, r23 + mtmsr r15 + isync + insrwi r25, r26, 8, 22 + bnelr + b FDP_011C + + +FDP_03ec + lbz r23, -0x0008(r19) + subi r17, r17, 2 + insrwi r20, r23, 8, 0 + + +FDP_03f8 + lhz r23, -0x0007(r19) + subi r17, r17, 4 + insrwi r20, r23, 16, 8 + b FDP_0414 + + +FDP_0408 + lbz r23, -0x0006(r19) + subi r17, r17, 2 + insrwi r20, r23, 8, 16 + + +FDP_0414 + lwz r23, -0x0005(r19) + subi r17, r17, 8 + inslwi r20, r23, 8, 24 + insrwi r21, r23, 24, 0 + b FDP_0490 + + +FDP_0428 + lbz r23, -0x0008(r19) + subi r17, r17, 2 + insrwi r20, r23, 8, 0 + +FDP_0434 + lwz r23, -0x0007(r19) + subi r17, r17, 8 + inslwi r20, r23, 24, 8 + insrwi r21, r23, 8, 0 + b FDP_0474 + + +FDP_0448 + lbz r23, -0x0006(r19) + subi r17, r17, 2 + insrwi r20, r23, 8, 16 + + +FDP_0454 + lhz r23, -0x0005(r19) + subi r17, r17, 4 + rlwimi r20, r23, 24, 24, 31 + insrwi r21, r23, 8, 0 + b FDP_0474 + + +FDP_0468 + lbz r23, -0x0004(r19) + subi r17, r17, 2 + insrwi r21, r23, 8, 0 + + +FDP_0474 + lhz r23, -0x0003(r19) + subi r17, r17, 4 + insrwi r21, r23, 16, 8 + b FDP_0490 + + +FDP_0484 + lbz r23, -0x0002(r19) + subi r17, r17, 2 + insrwi r21, r23, 8, 16 + + +FDP_0490 + lbz r23, -0x0001(r19) + insrwi r21, r23, 8, 24 + b FDP_011C + + +FDP_049c + lhz r23, -0x0008(r19) + subi r17, r17, 4 + insrwi r20, r23, 16, 0 + b FDP_04B8 + + +FDP_04ac + lbz r23, -0x0007(r19) + subi r17, r17, 2 + insrwi r20, r23, 8, 8 + + +FDP_04b8 + lwz r23, -0x0006(r19) + subi r17, r17, 8 + inslwi r20, r23, 16, 16 + insrwi r21, r23, 16, 0 + b FDP_0114 + + +FDP_04cc + lbz r23, -0x0005(r19) + subi r17, r17, 2 + insrwi r20, r23, 8, 24 + b FDP_0108 + + +FDP_04dc + lbz r23, -0x0003(r19) + subi r17, r17, 2 + insrwi r21, r23, 8, 8 + b FDP_0114 + + +FDP_04ec + lwz r20, -0x0008(r19) + subi r17, r17, 8 + lwz r21, -0x0004(r19) + b FDP_011C + + +FDP_04fc + lbz r23, -0x0007(r19) + subi r17, r17, 2 + insrwi r20, r23, 8, 8 + + +FDP_0508 + lhz r23, -0x0006(r19) + subi r17, r17, 4 + insrwi r20, r23, 16, 16 + lwz r21, -0x0004(r19) + b FDP_011C + + +FDP_051c + lbz r23, -0x0005(r19) + subi r17, r17, 2 + insrwi r20, r23, 8, 24 + lwz r21, -0x0004(r19) + b FDP_011C + + +FDP_0530 + bso cr5, FDP_053C + lwz r21, -0x0004(r19) + b FDP_011C + + +FDP_053c + li r23, -4 + lwarx r21, r23, r19 + b FDP_011C + + +FDP_0548 + lwz r20, -0x0008(r19) + lwz r21, -0x0004(r19) + b FDP_011C + + +FDP_0554 + clrrwi r23, r25, 10 + rlwimi r23, r17, 14, 24, 28 + addi r23, r23, 9760 + mtlr r23 + mr r23, r18 + oris r11, r11, 0x0200 + blr + + +FDP_0570 + srwi r23, r20, 24 + stb r23, -0x0008(r19) + subi r17, r17, 2 + + +FDP_057c + srwi r23, r20, 8 + sth r23, -0x0007(r19) + subi r17, r17, 4 + b FDP_0598 + + +FDP_058c + srwi r23, r20, 8 + stb r23, -0x0006(r19) + subi r17, r17, 2 + + +FDP_0598 + srwi r23, r21, 8 + insrwi r23, r20, 8, 0 + stw r23, -0x0005(r19) + subi r17, r17, 8 + stb r21, -0x0001(r19) + b FDP_011C + + +FDP_05b0 + srwi r23, r20, 24 + stb r23, -0x0008(r19) + subi r17, r17, 2 + + +FDP_05bc + srwi r23, r21, 24 + insrwi r23, r20, 24, 0 + stw r23, -0x0007(r19) + subi r17, r17, 8 + b FDP_05FC + + +FDP_05d0 + srwi r23, r20, 8 + stb r23, -0x0006(r19) + subi r17, r17, 2 + + +FDP_05dc + srwi r23, r21, 24 + insrwi r23, r20, 8, 16 + sth r23, -0x0005(r19) + subi r17, r17, 4 + b FDP_05FC + + +FDP_05f0 + srwi r23, r21, 24 + stb r23, -0x0004(r19) + subi r17, r17, 2 + + +FDP_05fc + srwi r23, r21, 8 + sth r23, -0x0003(r19) + subi r17, r17, 4 + stb r21, -0x0001(r19) + b FDP_011C + + +FDP_0610 + srwi r23, r21, 8 + stb r23, -0x0002(r19) + subi r17, r17, 2 + + +FDP_061c + stb r21, -0x0001(r19) + b FDP_011C + + +FDP_0624 + srwi r23, r20, 16 + sth r23, -0x0008(r19) + subi r17, r17, 4 + b FDP_0640 + + +FDP_0634 + srwi r23, r20, 16 + stb r23, -0x0007(r19) + subi r17, r17, 2 + + +FDP_0640 + srwi r23, r21, 16 + insrwi r23, r20, 16, 0 + stw r23, -0x0006(r19) + subi r17, r17, 8 + sth r21, -0x0002(r19) + b FDP_011C + + +FDP_0658 + stb r20, -0x0005(r19) + subi r17, r17, 2 + b FDP_00F4 + + +FDP_0664 + srwi r23, r21, 16 + stb r23, -0x0003(r19) + subi r17, r17, 2 + + +FDP_0670 + sth r21, -0x0002(r19) + b FDP_011C + + +FDP_0678 + stw r20, -0x0008(r19) + subi r17, r17, 8 + stw r21, -0x0004(r19) + b FDP_011C + + +FDP_0688 + srwi r23, r20, 16 + stb r23, -0x0007(r19) + subi r17, r17, 2 + + +FDP_0694 + sth r20, -0x0006(r19) + subi r17, r17, 4 + stw r21, -0x0004(r19) + b FDP_011C + + +FDP_06a4 + stb r20, -0x0005(r19) + subi r17, r17, 2 + stw r21, -0x0004(r19) + b FDP_011C + + +FDP_06b4 + bso cr5, FDP_06C0 + stw r21, -0x0004(r19) + b FDP_011C + + +FDP_06c0 + li r23, -4 + stwcx. r21, r23, r19 + isync + mfcr r23 + rlwimi r13, r23, 0, 0, 3 + b FDP_011C + + +FDP_06d8 + stw r20, -0x0008(r19) + stw r21, -0x0004(r19) + b FDP_011C + + +FDP_06e4 + clrrwi r23, r25, 10 + rlwimi r23, r17, 14, 24, 28 + addi r23, r23, 10784 + mtlr r23 + mr r23, r18 + oris r11, r11, 0x0200 + blr + + + + + + +; major_0x05f00 + + ; Which to use? Probably align. + align 9 +; org FDP + 0x800 + + + + macro + MisalignmentOpcodeTableEntry &hihalf, &primaryfunc, &secondaryfunc + + dc.w &hihalf + dc.b (&primaryfunc - FDP) >> 2 + dc.b (&secondaryfunc - FDP) >> 2 + + endm + + + + macro + MisalignmentOpcodeTableMacro &FirstTable + + +; X-form extended opcodes: 0 4 8 12 16 20 24 28 +; lwarx + + MisalignmentOpcodeTableEntry 0x2540, FDP_00b8, FDP_0150 + + +; X-form extended opcodes: 64 68 72 76 80 84 88 92 + + MisalignmentOpcodeTableEntry 0x4550, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 128 132 136 140 144 148 152 156 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 192 196 200 204 208 212 216 220 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 256 260 264 268 272 276 280 284 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 320 324 328 332 336 340 344 348 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 384 388 392 396 400 404 408 412 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 448 452 456 460 464 468 472 476 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 512 516 520 524 528 532 536 540 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 576 580 584 588 592 596 600 604 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 640 644 648 652 656 660 664 668 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 704 708 712 716 720 724 728 732 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 768 772 776 780 784 788 792 796 + + MisalignmentOpcodeTableEntry 0x4430, FDP_00e4, FDP_0150 + + +; X-form extended opcodes: 832 836 840 844 848 852 856 860 + + MisalignmentOpcodeTableEntry 0x2460, FDP_00e4, FDP_0150 + + +; X-form extended opcodes: 896 900 904 908 912 916 920 924 + + MisalignmentOpcodeTableEntry 0x4130, FDP_00dc, FDP_015C + + +; X-form extended opcodes: 960 964 968 972 976 980 984 988 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 32 36 40 44 48 52 56 60 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 96 100 104 108 112 116 120 124 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 160 164 168 172 176 180 184 188 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 224 228 232 236 240 244 248 252 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 288 292 296 300 304 308 312 316 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 352 356 360 364 368 372 376 380 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 416 420 424 428 432 436 440 444 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 480 484 488 492 496 500 504 508 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 544 548 552 556 560 564 568 572 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 608 612 616 620 624 628 632 636 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 672 676 680 684 688 692 696 700 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 736 740 744 748 752 756 760 764 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 800 804 808 812 816 820 824 828 + + MisalignmentOpcodeTableEntry 0x4430, FDP_00e8, FDP_0150 + + +; X-form extended opcodes: 864 868 872 876 880 884 888 892 + + MisalignmentOpcodeTableEntry 0x45b3, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 928 932 936 940 944 948 952 956 + + MisalignmentOpcodeTableEntry 0x4130, FDP_00a4, FDP_015C + + +; X-form extended opcodes: 992 996 1000 1004 1008 1012 1016 1020 + + MisalignmentOpcodeTableEntry 0x41f2, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 1 5 9 13 17 21 25 29 + + MisalignmentOpcodeTableEntry 0x4430, FDP_00e4, FDP_0150 + + +; X-form extended opcodes: 65 69 73 77 81 85 89 93 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 129 133 137 141 145 149 153 157 + + MisalignmentOpcodeTableEntry 0x4130, FDP_00dc, FDP_015C + + +; X-form extended opcodes: 193 197 201 205 209 213 217 221 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 257 261 265 269 273 277 281 285 + + MisalignmentOpcodeTableEntry 0x268b, FDP_0314, FDP_02FC + + +; X-form extended opcodes: 321 325 329 333 337 341 345 349 + + MisalignmentOpcodeTableEntry 0x2460, FDP_00e4, FDP_0150 + + +; X-form extended opcodes: 385 389 393 397 401 405 409 413 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 449 453 457 461 465 469 473 477 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; lswx +; X-form extended opcodes: 513 517 521 525 529 533 537 541 + + MisalignmentOpcodeTableEntry 0x260b, FDP_02b0, FDP_02E4 + + +; lswi +; X-form extended opcodes: 577 581 585 589 593 597 601 605 + + MisalignmentOpcodeTableEntry 0x260f, FDP_029c, FDP_02E4 + + +; stswx +; X-form extended opcodes: 641 645 649 653 657 661 665 669 + + MisalignmentOpcodeTableEntry 0x2242, FDP_0260, FDP_0284 + + +; stswi +; X-form extended opcodes: 705 709 713 717 721 725 729 733 + + MisalignmentOpcodeTableEntry 0x224e, FDP_0254, FDP_0284 + + +; X-form extended opcodes: 769 773 777 781 785 789 793 797 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 833 837 841 845 849 853 857 861 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 897 901 905 909 913 917 921 925 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 961 965 969 973 977 981 985 989 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 33 37 41 45 49 53 57 61 + + MisalignmentOpcodeTableEntry 0x4430, FDP_00e8, FDP_0150 + + +; X-form extended opcodes: 97 101 105 109 113 117 121 125 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 161 165 169 173 177 181 185 189 + + MisalignmentOpcodeTableEntry 0x4130, FDP_00a4, FDP_015C + + +; X-form extended opcodes: 225 229 233 237 241 245 249 253 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 289 293 297 301 305 309 313 317 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 353 357 361 365 369 373 377 381 + + MisalignmentOpcodeTableEntry 0x2460, FDP_00e8, FDP_015C + + +; X-form extended opcodes: 417 421 425 429 433 437 441 445 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 481 485 489 493 497 501 505 509 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 545 549 553 557 561 565 569 573 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 609 613 617 621 625 629 633 637 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 673 677 681 685 689 693 697 701 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 737 741 745 749 753 757 761 765 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 801 805 809 813 817 821 825 829 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 865 869 873 877 881 885 889 893 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 929 933 937 941 945 949 953 957 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 993 997 1001 1005 1009 1013 1017 1021 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 2 6 10 14 18 22 26 30 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 66 70 74 78 82 86 90 94 + + MisalignmentOpcodeTableEntry 0x0fe2, FDP_00e8, FDP_023C + + +; X-form extended opcodes: 130 134 138 142 146 150 154 158 +; stwcx. + + MisalignmentOpcodeTableEntry 0x2160, FDP_00b0, FDP_015C + + +; X-form extended opcodes: 194 198 202 206 210 214 218 222 + + MisalignmentOpcodeTableEntry 0x4170, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 258 262 266 270 274 278 282 286 + + MisalignmentOpcodeTableEntry 0x0fe2, FDP_00e8, FDP_023C + + +; X-form extended opcodes: 322 326 330 334 338 342 346 350 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 386 390 394 398 402 406 410 414 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 450 454 458 462 466 470 474 478 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; lwbrx +; X-form extended opcodes: 514 518 522 526 530 534 538 542 + + MisalignmentOpcodeTableEntry 0x24a2, FDP_00e8, FDP_0164 + + +; X-form extended opcodes: 578 582 586 590 594 598 602 606 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; stwbrx +; X-form extended opcodes: 642 646 650 654 658 662 666 670 + + MisalignmentOpcodeTableEntry 0x2120, FDP_0088, FDP_015C + + +; X-form extended opcodes: 706 710 714 718 722 726 730 734 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; lhbrx +; X-form extended opcodes: 770 774 778 782 786 790 794 798 + + MisalignmentOpcodeTableEntry 0x1492, FDP_00e8, FDP_0160 + + +; X-form extended opcodes: 834 838 842 846 850 854 858 862 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; sthbrx +; X-form extended opcodes: 898 902 906 910 914 918 922 926 + + MisalignmentOpcodeTableEntry 0x1110, FDP_0094, FDP_015C + + +; X-form extended opcodes: 962 966 970 974 978 982 986 990 + + MisalignmentOpcodeTableEntry 0x0fe2, FDP_00e8, FDP_023C + + +; X-form extended opcodes: 34 38 42 46 50 54 58 62 + + if &FirstTable + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + else + MisalignmentOpcodeTableEntry 0x0fe2, FDP_00e8, FDP_023C + endif + + +; X-form extended opcodes: 98 102 106 110 114 118 122 126 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 162 166 170 174 178 182 186 190 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 226 230 234 238 242 246 250 254 + + MisalignmentOpcodeTableEntry 0x0fe2, FDP_00e8, FDP_023C + + +; eciwx +; X-form extended opcodes: 290 294 298 302 306 310 314 318 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_00e4, FDP_024C + + +; X-form extended opcodes: 354 358 362 366 370 374 378 382 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; ecowx +; X-form extended opcodes: 418 422 426 430 434 438 442 446 + + MisalignmentOpcodeTableEntry 0x03f0, FDP_00dc, FDP_024C + + +; X-form extended opcodes: 482 486 490 494 498 502 506 510 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 546 550 554 558 562 566 570 574 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 610 614 618 622 626 630 634 638 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 674 678 682 686 690 694 698 702 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 738 742 746 750 754 758 762 766 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 802 806 810 814 818 822 826 830 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 866 870 874 878 882 886 890 894 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 930 934 938 942 946 950 954 958 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; dcbz +; X-form extended opcodes: 994 998 1002 1006 1010 1014 1018 1022 + + MisalignmentOpcodeTableEntry 0x4302, FDP_01f8, FDP_020C + + +; lwzx +; X-form extended opcodes: 3 7 11 15 19 23 27 31 +; D-form opcodes: 0 32 +; lwz + + if &FirstTable + MisalignmentOpcodeTableEntry 0x0f50, FDP_00e4, FDP_0370 + else + MisalignmentOpcodeTableEntry 0x2420, FDP_00e4, FDP_0150 + endif + + +; lbzx +; X-form extended opcodes: 67 71 75 79 83 87 91 95 +; D-form opcodes: 2 34 +; lbz + + if &FirstTable + MisalignmentOpcodeTableEntry 0x2770, FDP_00d4, FDP_0398 + else + MisalignmentOpcodeTableEntry 0x0c00, FDP_00e4, FDP_0150 + endif + + +; stwx +; X-form extended opcodes: 131 135 139 143 147 151 155 159 +; D-form opcodes: 4 36 +; stw + + if &FirstTable + MisalignmentOpcodeTableEntry 0x0b90, FDP_0350, FDP_015C + else + MisalignmentOpcodeTableEntry 0x2120, FDP_00dc, FDP_015C + endif + + +; stbx +; X-form extended opcodes: 195 199 203 207 211 215 219 223 +; D-form opcodes: 6 38 +; stb + + if &FirstTable + MisalignmentOpcodeTableEntry 0x23b0, FDP_0364, FDP_015C + else + MisalignmentOpcodeTableEntry 0x0900, FDP_00dc, FDP_015C + endif + + +; lhzx +; X-form extended opcodes: 259 263 267 271 275 279 283 287 +; D-form opcodes: 8 40 +; lhz + + MisalignmentOpcodeTableEntry 0x1410, FDP_00e4, FDP_0150 + +; lhax +; X-form extended opcodes: 323 327 331 335 339 343 347 351 +; D-form opcodes: 10 42 +; lha + + MisalignmentOpcodeTableEntry 0x1450, FDP_00e4, FDP_014C + + +; sthx +; X-form extended opcodes: 387 391 395 399 403 407 411 415 +; D-form opcodes: 12 44 +; sth + + MisalignmentOpcodeTableEntry 0x1110, FDP_00dc, FDP_015C + + +; X-form extended opcodes: 451 455 459 463 467 471 475 479 +; D-form opcodes: 14 46 +; lmw + + MisalignmentOpcodeTableEntry 0x25a3, FDP_00e8, FDP_01A4 + + +; lfsx +; X-form extended opcodes: 515 519 523 527 531 535 539 543 +; D-form opcodes: 16 48 +; lfs + + MisalignmentOpcodeTableEntry 0x24e0, FDP_00e4, FDP_0174 + + +; lfdx +; X-form extended opcodes: 579 583 587 591 595 599 603 607 +; D-form opcodes: 18 50 +; lfd + + MisalignmentOpcodeTableEntry 0x44f0, FDP_00e4, FDP_0178 + + +; stfsx +; X-form extended opcodes: 643 647 651 655 659 663 667 671 +; D-form opcodes: 20 52 +; stfs + + MisalignmentOpcodeTableEntry 0x2120, FDP_0008, FDP_015C + + +; stfdx +; X-form extended opcodes: 707 711 715 719 723 727 731 735 +; D-form opcodes: 22 54 +; stfd + + MisalignmentOpcodeTableEntry 0x4130, FDP_0014, FDP_015C + + +; X-form extended opcodes: 771 775 779 783 787 791 795 799 +; D-form opcodes: 24 56 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 835 839 843 847 851 855 859 863 +; D-form opcodes: 26 58 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 899 903 907 911 915 919 923 927 +; D-form opcodes: 28 60 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; stfiwx +; X-form extended opcodes: 963 967 971 975 979 983 987 991 +; D-form opcodes: 30 62 + + MisalignmentOpcodeTableEntry 0x2120, FDP_0014, FDP_015C + + +; lwzux +; X-form extended opcodes: 35 39 43 47 51 55 59 63 +; D-form opcodes: 1 33 +; lwzu + + if &FirstTable + MisalignmentOpcodeTableEntry 0x1760, FDP_00cc, FDP_0384 + else + MisalignmentOpcodeTableEntry 0x2420, FDP_00e8, FDP_0150 + endif + + +; lbzux +; X-form extended opcodes: 99 103 107 111 115 119 123 127 +; D-form opcodes: 3 35 +; lbzu + + if &FirstTable + MisalignmentOpcodeTableEntry 0x8740, FDP_00c0, FDP_015C + else + MisalignmentOpcodeTableEntry 0x0c00, FDP_00e8, FDP_0150 + endif + + +; stwux +; X-form extended opcodes: 163 167 171 175 179 183 187 191 +; D-form opcodes: 5 37 +; stwu + + if &FirstTable + MisalignmentOpcodeTableEntry 0x23a0, FDP_0358, FDP_015C + else + MisalignmentOpcodeTableEntry 0x2120, FDP_00a4, FDP_015C + endif + + +; stbux +; X-form extended opcodes: 227 231 235 239 243 247 251 255 +; D-form opcodes: 7 39 +; stbu + + if &FirstTable + MisalignmentOpcodeTableEntry 0x8380, FDP_00c0, FDP_015C + else + MisalignmentOpcodeTableEntry 0x0900, FDP_00a4, FDP_015C + endif + + +; lhzux +; X-form extended opcodes: 291 295 299 303 307 311 315 319 +; D-form opcodes: 9 41 +; lhzu + + MisalignmentOpcodeTableEntry 0x1410, FDP_00e8, FDP_0150 + + +; lhaux +; X-form extended opcodes: 355 359 363 367 371 375 379 383 +; D-form opcodes: 11 43 +; lhau + + if &FirstTable + MisalignmentOpcodeTableEntry 0x8740, FDP_00c0, FDP_015C + else + MisalignmentOpcodeTableEntry 0x1450, FDP_00e8, FDP_014C + endif + + +; sthux +; X-form extended opcodes: 419 423 427 431 435 439 443 447 +; D-form opcodes: 13 45 +; sthu + + MisalignmentOpcodeTableEntry 0x1110, FDP_00a4, FDP_015C + + +; X-form extended opcodes: 483 487 491 495 499 503 507 511 +; D-form opcodes: 15 47 +; stmw + + if &FirstTable + MisalignmentOpcodeTableEntry 0x8380, FDP_00c0, FDP_015C + else + MisalignmentOpcodeTableEntry 0x21e2, FDP_00a4, FDP_01D8 + endif + + +; lfsux +; X-form extended opcodes: 547 551 555 559 563 567 571 575 +; D-form opcodes: 17 49 +; lfsu + + MisalignmentOpcodeTableEntry 0x24e0, FDP_00e8, FDP_0174 + + +; lfdux +; X-form extended opcodes: 611 615 619 623 627 631 635 639 +; D-form opcodes: 19 51 +; lfdu + + MisalignmentOpcodeTableEntry 0x44f0, FDP_00e8, FDP_0178 + + +; stfsux +; X-form extended opcodes: 675 679 683 687 691 695 699 703 +; D-form opcodes: 21 53 +; stfsu + + MisalignmentOpcodeTableEntry 0x2120, FDP_000c, FDP_015C + + +; stfdux +; X-form extended opcodes: 739 743 747 751 755 759 763 767 +; D-form opcodes: 23 55 +; stfdu + + MisalignmentOpcodeTableEntry 0x4130, FDP_0018, FDP_015C + + +; X-form extended opcodes: 803 807 811 815 819 823 827 831 +; D-form opcodes: 25 57 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 867 871 875 879 883 887 891 895 +; D-form opcodes: 27 59 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 931 935 939 943 947 951 955 959 +; D-form opcodes: 29 61 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + +; X-form extended opcodes: 995 999 1003 1007 1011 1015 1019 1023 +; D-form opcodes: 31 63 + + MisalignmentOpcodeTableEntry 0x07f0, FDP_panic, FDP_0004 + + endm + + + + MisalignmentOpcodeTableMacro 1 + MisalignmentOpcodeTableMacro 0 + + + + + + + + macro + HalfWordTableEntry &n, &target + +@flashback + org HalfWordTable + 2*&n + dc.w &target - FDP - 2*&n + org @flashback + + endm + +HalfWordTable ; FDP + 0xc00 + dcb.w 144, 0xcafe;(FDP_panic - FDP) - (* - HalfWordTable) + + + HalfWordTableEntry 0, FDP_06e4 + HalfWordTableEntry 1, FDP_06e4 + HalfWordTableEntry 2, FDP_06e4 + HalfWordTableEntry 3, FDP_06e4 + HalfWordTableEntry 4, FDP_06e4 + HalfWordTableEntry 5, FDP_06e4 + HalfWordTableEntry 6, FDP_06e4 + HalfWordTableEntry 7, FDP_06e4 + + HalfWordTableEntry 8, FDP_0554 + HalfWordTableEntry 9, FDP_0554 + HalfWordTableEntry 10, FDP_0554 + HalfWordTableEntry 11, FDP_0554 + HalfWordTableEntry 12, FDP_0554 + HalfWordTableEntry 13, FDP_0554 + HalfWordTableEntry 14, FDP_0554 + HalfWordTableEntry 15, FDP_0554 + + HalfWordTableEntry 16, FDP_061c + HalfWordTableEntry 17, FDP_061c + HalfWordTableEntry 18, FDP_061c + HalfWordTableEntry 19, FDP_061c + HalfWordTableEntry 20, FDP_061c + HalfWordTableEntry 21, FDP_061c + HalfWordTableEntry 22, FDP_061c + HalfWordTableEntry 23, FDP_061c + + HalfWordTableEntry 24, FDP_0490 + HalfWordTableEntry 25, FDP_0490 + HalfWordTableEntry 26, FDP_0490 + HalfWordTableEntry 27, FDP_0490 + HalfWordTableEntry 28, FDP_0490 + HalfWordTableEntry 29, FDP_0490 + HalfWordTableEntry 30, FDP_0490 + HalfWordTableEntry 31, FDP_0490 + + HalfWordTableEntry 32, FDP_0670 + HalfWordTableEntry 33, FDP_0610 + HalfWordTableEntry 34, FDP_0670 + HalfWordTableEntry 35, FDP_0610 + HalfWordTableEntry 36, FDP_0670 + HalfWordTableEntry 37, FDP_0610 + HalfWordTableEntry 38, FDP_0670 + HalfWordTableEntry 39, FDP_0610 + + HalfWordTableEntry 40, FDP_0114 + HalfWordTableEntry 41, FDP_0484 + HalfWordTableEntry 42, FDP_0114 + HalfWordTableEntry 43, FDP_0484 + HalfWordTableEntry 44, FDP_0114 + HalfWordTableEntry 45, FDP_0484 + HalfWordTableEntry 46, FDP_0114 + HalfWordTableEntry 47, FDP_0484 + + HalfWordTableEntry 48, FDP_0664 + HalfWordTableEntry 49, FDP_05fc + HalfWordTableEntry 50, FDP_0664 + HalfWordTableEntry 51, FDP_05fc + HalfWordTableEntry 52, FDP_0664 + HalfWordTableEntry 53, FDP_05fc + HalfWordTableEntry 54, FDP_0664 + HalfWordTableEntry 55, FDP_05fc + + HalfWordTableEntry 56, FDP_04dc + HalfWordTableEntry 57, FDP_0474 + HalfWordTableEntry 58, FDP_04dc + HalfWordTableEntry 59, FDP_0474 + HalfWordTableEntry 60, FDP_04dc + HalfWordTableEntry 61, FDP_0474 + HalfWordTableEntry 62, FDP_04dc + HalfWordTableEntry 63, FDP_0474 + + HalfWordTableEntry 64, FDP_06b4 + HalfWordTableEntry 65, FDP_05f0 + HalfWordTableEntry 66, FDP_00f4 + HalfWordTableEntry 67, FDP_05f0 + HalfWordTableEntry 68, FDP_06b4 + HalfWordTableEntry 69, FDP_05f0 + HalfWordTableEntry 70, FDP_00f4 + HalfWordTableEntry 71, FDP_05f0 + + HalfWordTableEntry 72, FDP_0530 + HalfWordTableEntry 73, FDP_0468 + HalfWordTableEntry 74, FDP_0108 + HalfWordTableEntry 75, FDP_0468 + HalfWordTableEntry 76, FDP_0530 + HalfWordTableEntry 77, FDP_0468 + HalfWordTableEntry 78, FDP_0108 + HalfWordTableEntry 79, FDP_0468 + + HalfWordTableEntry 80, FDP_06a4 + HalfWordTableEntry 81, FDP_0598 + HalfWordTableEntry 82, FDP_0658 + HalfWordTableEntry 83, FDP_05dc + HalfWordTableEntry 84, FDP_06a4 + HalfWordTableEntry 85, FDP_0598 + HalfWordTableEntry 86, FDP_0658 + HalfWordTableEntry 87, FDP_05dc + + HalfWordTableEntry 88, FDP_051c + HalfWordTableEntry 89, FDP_0414 + HalfWordTableEntry 90, FDP_04cc + HalfWordTableEntry 91, FDP_0454 + HalfWordTableEntry 92, FDP_051c + HalfWordTableEntry 93, FDP_0414 + HalfWordTableEntry 94, FDP_04cc + HalfWordTableEntry 95, FDP_0454 + + HalfWordTableEntry 96, FDP_0694 + HalfWordTableEntry 97, FDP_058c + HalfWordTableEntry 98, FDP_0640 + HalfWordTableEntry 99, FDP_05d0 + HalfWordTableEntry 100, FDP_0694 + HalfWordTableEntry 101, FDP_058c + HalfWordTableEntry 102, FDP_0640 + HalfWordTableEntry 103, FDP_05d0 + + HalfWordTableEntry 104, FDP_0508 + HalfWordTableEntry 105, FDP_0408 + HalfWordTableEntry 106, FDP_04b8 + HalfWordTableEntry 107, FDP_0448 + HalfWordTableEntry 108, FDP_0508 + HalfWordTableEntry 109, FDP_0408 + HalfWordTableEntry 110, FDP_04b8 + HalfWordTableEntry 111, FDP_0448 + + HalfWordTableEntry 112, FDP_0688 + HalfWordTableEntry 113, FDP_057c + HalfWordTableEntry 114, FDP_0634 + HalfWordTableEntry 115, FDP_05bc + HalfWordTableEntry 116, FDP_0688 + HalfWordTableEntry 117, FDP_057c + HalfWordTableEntry 118, FDP_0634 + HalfWordTableEntry 119, FDP_05bc + + HalfWordTableEntry 120, FDP_04fc + HalfWordTableEntry 121, FDP_03f8 + HalfWordTableEntry 122, FDP_04ac + HalfWordTableEntry 123, FDP_0434 + HalfWordTableEntry 124, FDP_04fc + HalfWordTableEntry 125, FDP_03f8 + HalfWordTableEntry 126, FDP_04ac + HalfWordTableEntry 127, FDP_0434 + + HalfWordTableEntry 128, FDP_06d8 + HalfWordTableEntry 129, FDP_0570 + HalfWordTableEntry 130, FDP_0624 + HalfWordTableEntry 131, FDP_05b0 + HalfWordTableEntry 132, FDP_0678 + HalfWordTableEntry 133, FDP_0570 + HalfWordTableEntry 134, FDP_0624 + HalfWordTableEntry 135, FDP_05b0 + + HalfWordTableEntry 136, FDP_0548 + HalfWordTableEntry 137, FDP_03ec + HalfWordTableEntry 138, FDP_049c + HalfWordTableEntry 139, FDP_0428 + HalfWordTableEntry 140, FDP_04ec + HalfWordTableEntry 141, FDP_03ec + HalfWordTableEntry 142, FDP_049c + HalfWordTableEntry 143, FDP_0428 + + + + + macro + MixedTableEntry &flags, &target + + dc.b &flags + dc.b (&target - FDP) >> 2 + + endm + +; this is the d20 table +MixedTable + MixedTableEntry %01, FDP_0150 + MixedTableEntry %01, FDP_0150 + MixedTableEntry %01, FDP_0150 + MixedTableEntry %01, FDP_0150 + MixedTableEntry %01, FDP_0004 + MixedTableEntry %01, FDP_014C + MixedTableEntry %01, FDP_0150 + MixedTableEntry %01, FDP_0004 + MixedTableEntry %01, FDP_0004 + MixedTableEntry %11, FDP_0160 + MixedTableEntry %11, FDP_0164 + MixedTableEntry %01, FDP_0004 + MixedTableEntry %01, FDP_0004 + MixedTableEntry %01, FDP_0004 + MixedTableEntry %01, FDP_0174 + MixedTableEntry %01, FDP_0178 + MixedTableEntry %01, FDP_015C + MixedTableEntry %01, FDP_015C + MixedTableEntry %01, FDP_015C + MixedTableEntry %01, FDP_015C + MixedTableEntry %01, FDP_0150 + MixedTableEntry %01, FDP_0004 + MixedTableEntry %01, FDP_015C + MixedTableEntry %01, FDP_0004 + MixedTableEntry %01, FDP_0004 + MixedTableEntry %01, FDP_0004 + MixedTableEntry %11, FDP_01A4 + MixedTableEntry %11, FDP_0004 + MixedTableEntry %01, FDP_0004 + MixedTableEntry %01, FDP_0004 + MixedTableEntry %11, FDP_01D8 + MixedTableEntry %11, FDP_0004 + MixedTableEntry %11, FDP_02E4 + MixedTableEntry %11, FDP_02E4 + MixedTableEntry %11, FDP_02E4 + MixedTableEntry %11, FDP_02E4 + MixedTableEntry %11, FDP_0284 + MixedTableEntry %11, FDP_0284 + MixedTableEntry %11, FDP_0284 + MixedTableEntry %11, FDP_0284 + MixedTableEntry %11, FDP_02FC + MixedTableEntry %11, FDP_02FC + MixedTableEntry %11, FDP_02FC + MixedTableEntry %11, FDP_02FC + MixedTableEntry %11, FDP_02FC + MixedTableEntry %11, FDP_02FC + MixedTableEntry %11, FDP_02FC + MixedTableEntry %11, FDP_02FC + MixedTableEntry %11, FDP_020C + MixedTableEntry %01, FDP_0004 + MixedTableEntry %01, FDP_0004 + MixedTableEntry %01, FDP_0004 + MixedTableEntry %01, FDP_015C + MixedTableEntry %01, FDP_0370 + MixedTableEntry %01, FDP_0384 + MixedTableEntry %01, FDP_0398 + MixedTableEntry %01, FDP_015C + MixedTableEntry %01, FDP_015C + MixedTableEntry %01, FDP_015C + MixedTableEntry %01, FDP_015C + MixedTableEntry %01, FDP_0004 + MixedTableEntry %01, FDP_0004 + MixedTableEntry %11, FDP_023C + MixedTableEntry %01, FDP_024C + + + +FDP_0DA0 + li r0, -3 + sc + andi. r23, r16, 0x0020 + addi r10, r10, 4 + mfsprg SP, 0 + mtsrr0 r10 + mtsrr1 r11 + bne FDP_0E30 + mtlr r12 + bns cr3, FDP_0DFC + + +FDP_0DC8 + mtcrf 255, r13 + lmw r2, 0x0008(SP) + lwz r0, 0x0000(SP) + lwz SP, 0x0004(SP) + rfi + dcb.b 32, 0 + + +FDP_0DFC + mtcrf 255, r13 + lmw r10, 0x0028(SP) + lwz r0, 0x0000(SP) + lwz SP, 0x0004(SP) + rfi + dcb.b 32, 0 + + +FDP_0E30 + mfsprg r24, 3 + mtsprg 2, r12 + rlwinm r16, r16, 0, 27, 25 + lwz r12, 0x0034(r24) + stw r16, -0x0010(SP) + mtcrf 255, r13 + mtlr r12 + lmw r2, 0x0008(SP) + lwz r0, 0x0000(SP) + lwz SP, 0x0004(SP) + mtsprg 1, SP + blrl + + +FDP_0E60 + andi. r23, r17, 0x07C0 + rlwinm r28, r17, 13, 25, 29 + lwzx r21, SP, r28 + li r22, 8 + insrwi r17, r22, 6, 26 + addi r19, r19, 4 + bne FDP_03AC + rlwinm r22, r17, 9, 27, 28 + srw r21, r21, r22 + extrwi r22, r17, 2, 4 + neg r22, r22 + add r19, r19, r22 + addi r22, r22, 4 + insrwi. r17, r22, 5, 26 + b FDP_03AC + + +FDP_0E9C + rlwinm r23, r17, 18, 25, 29 + cmpw cr7, r28, r23 + rlwinm r23, r17, 23, 25, 29 + cmpw cr6, r28, r23 + beq cr7, FDP_0EB8 + beq cr6, FDP_0EB8 + stwx r21, SP, r28 + + +FDP_0EB8 + addis r28, r17, 32 + rlwimi r17, r28, 0, 6, 10 + subi r17, r17, 64 + beq FDP_0DA0 + + +FDP_0EC8 + andi. r23, r17, 0x07C0 + li r22, 9 + insrwi r17, r22, 6, 26 + addi r19, r19, 4 + bne FDP_03AC + extrwi r22, r17, 2, 4 + neg r22, r22 + add r19, r19, r22 + addi r22, r22, 4 + insrwi. r17, r22, 5, 26 + b FDP_03AC + + +FDP_0EF4 + rlwinm r23, r17, 18, 25, 29 + cmpw cr7, r28, r23 + rlwinm r23, r17, 23, 25, 29 + cmpw cr6, r28, r23 + beq cr7, FDP_0F10 + beq cr6, FDP_0F10 + stwx r21, SP, r28 + + +FDP_0F10 + addis r28, r17, 32 + rlwimi r17, r28, 0, 6, 10 + subi r17, r17, 64 + not r22, r22 + rlwimi r22, r17, 6, 30, 31 + li r28, 1 + mfxer r23 + extrwi r23, r23, 8, 16 + srwi r20, r21, 24 + cmpw cr7, r20, r23 + add. r22, r22, r28 + beq cr7, FDP_0F80 + beq FDP_0F80 + extrwi r20, r21, 8, 8 + cmpw cr7, r20, r23 + add. r22, r22, r28 + beq cr7, FDP_0F80 + beq FDP_0F80 + extrwi r20, r21, 8, 16 + cmpw cr7, r20, r23 + add. r22, r22, r28 + beq cr7, FDP_0F80 + beq FDP_0F80 + clrlwi r20, r21, 24 + cmpw cr7, r20, r23 + add. r22, r22, r28 + beq cr7, FDP_0F80 + bne FDP_0EC8 + + +FDP_0F80 + rlwinm. r28, r17, 0, 3, 3 + mfxer r23 + add r22, r22, r23 + insrwi r23, r22, 7, 25 + mtxer r23 + beq FDP_0DA0 + mfcr r23 + clrlwi r23, r23, 30 + insrwi r13, r23, 4, 0 + b FDP_0DA0 + + +FDP_0FA8 + clrrwi r20, r21, 31 + xor. r21, r20, r21 + beq FDP_0178 + rlwinm. r23, r21, 16, 17, 24 + addi r23, r23, 128 + rlwimi r20, r21, 29, 5, 31 + extsh r23, r23 + rlwimi r20, r21, 0, 1, 1 + slwi r21, r21, 29 + subi r23, r23, 16512 + rlwimi r20, r23, 0, 2, 4 + bne FDP_0178 + srwi r21, r21, 20 + insrwi r21, r20, 20, 0 + cntlzw r23, r21 + slw r21, r21, r23 + neg r23, r23 + rlwimi r20, r21, 21, 12, 31 + addi r23, r23, 896 + slwi r21, r21, 21 + insrwi r20, r23, 11, 1 + b FDP_0178 + + +FDP_1000 + clrrwi r21, r25, 10 + rlwimi r21, r17, 14, 24, 28 + rlwimi r14, r11, 0, 6, 6 + add r21, r21, r20 + mtmsr r14 + mtlr r21 + isync + oris r11, r11, 0x0200 + blr + + +FDP_1024 + clrrwi r19, r25, 10 + rlwimi r19, r17, 14, 24, 28 + add r19, r19, r20 + mtlr r19 + rlwimi r14, r11, 0, 6, 6 + subi r23, SP, 736 + mtmsr r14 + insrwi r23, r18, 4, 28 + isync + blr + + +FDP_104c + oris r11, r11, 0x0200 + lbz r21, 0x0000(r23) + b FDP_00E4 + + +FDP_1058 + oris r11, r11, 0x0200 + lhz r21, 0x0000(r23) + b FDP_00E4 + + +FDP_1064 + oris r11, r11, 0x0200 + lwz r21, 0x0000(r23) + b FDP_00E4 + + + + + + + + + +; Called by setup. QEMU naturally complains. + +; SPRs: +;MMCR0 equ 952 ; monitor control register 0 +MMCR1 equ 956 ; monitor control register 1 +MMCR2 equ 944 ; monitor control register 2 +;PMC1 equ 953 ; performance counter 1 +;PMC2 equ 954 ; performance counter 2 +PMC3 equ 957 ; performance counter 3 +PMC4 equ 958 ; performance counter 4 +BAMR equ 951 ; breakpoint address mask register 1 +;SIA equ 955 ; sampled instruction address 1 +;SDA equ 959 ; sampled data address (604 only?) + + + macro + TestSPR &dest, &goodgpr, &badgpr, &spr + + mtspr &spr, &goodgpr + not &badgpr, &goodgpr + mfspr &badgpr, &spr + xor&dot &dest, &goodgpr, &badgpr + + endm + + + +ProbePerfMonitor ; OUTSIDE REFERER + + ; We will populate r23 with bit fields describing perf monitor capabilities + li r23, 0 + + + ; Temporarily disable program interrupts (leave old handler in r20) + lwz r21, KDP.PA_NanoKernelCode(r1) + lwz r20, KDP.YellowVecBase + VecTable.ProgramIntVector(r1) + llabel r18, IgnoreSoftwareInt + add r21, r18, r21 + stw r21, KDP.YellowVecBase + VecTable.ProgramIntVector(r1) + + + + ; SET BIT 31 if all the 604 perf monitor registers work + + li r18, 0 + + TestSPR r17, r18, r19, MMCR0 + TestSPR r19, r18, r19, PMC1 + or r17, r17, r19 + TestSPR r19, r18, r19, PMC2 + or r17, r17, r19 + TestSPR r19, r18, r19, SIA + or. r17, r17, r19 + + bne- @dont_set_bit_31 + _bset r23, r23, 31 +@dont_set_bit_31 + + ; ONLY test for bits 28-30 if bit 31 was just set... + + mr. r23, r23 + beq- @stop_testing_perf_monitor + + ; SET BIT 30 if all the 750 perf monitor registers work + + TestSPR r17, r18, r19, MMCR1 + TestSPR r19, r18, r19, PMC3 + or r17, r17, r19 + TestSPR r19, r18, r19, PMC4 + or. r17, r17, r19 + + bne- @dont_set_bit_30 + _bset r23, r23, 30 +@dont_set_bit_30 + + ; SET BIT 29 if SDA (604 but not 750) works + + li r18, 0xaaa0 + TestSPR. r17, r18, r19, SDA + + beq- @dont_set_bit_29 + _bset r23, r23, 29 +@dont_set_bit_29 + + ; SET BIT 28 if EVEN MORE perf monitor registers work + + li r18, 0x00 + TestSPR r17, r18, r19, MMCR2 + + li r18, 0x00 + TestSPR r19, r18, r19, BAMR + + or. r17, r17, r19 + + bne- @dont_set_bit_28 + _bset r23, r23, 28 +@dont_set_bit_28 + +@stop_testing_perf_monitor + + + ; Restore program interrupts + stw r20, KDP.YellowVecBase + VecTable.ProgramIntVector(r1) + + + ; Test r23 and save + mr. r23, r23 + stw r23, KDP.PerfMonitorBits(r1) + + + ; Set HiLevelPerfMonitorBits + li r23, 0 + _bset r23, r23, 14 + _bset r23, r23, 15 + + + ; SET BIT 18 if any perf monitor features present + beq- * + 8 + _bset r23, r23, 18 + + + ; And save + stw r23, KDP.HiLevelPerfMonitorBits(r1) + + + ; Now do some insane arithmetic with the decrementer clock. TBE. + + lisori r20, 0x80587ff3 + lisori r21, 0xd62611e3 + + ; Left-justify the decrementer clock rate + lwz r19, KDP.ProcessorInfo + NKProcessorInfo.DecClockRateHz(r1) + cntlzw r23, r19 + slw r19, r19, r23 + + cmpw cr1, r20, r19 + addi r23, r23, 0x02 + xor. r24, r24, r24 + bge- cr1, ProbePerfMonitor_0x180 + addi r23, r23, -0x01 + +ProbePerfMonitor_0x160 + cmpwi cr1, r20, 0x00 + slwi r20, r20, 1 + rlwimi r20, r21, 1, 31, 31 + cmplw cr2, r20, r19 + rlwinm. r24, r24, 1, 0, 30 + slwi r21, r21, 1 + blt- cr1, ProbePerfMonitor_0x180 + blt- cr2, ProbePerfMonitor_0x188 + +ProbePerfMonitor_0x180 + subf r20, r19, r20 + ori r24, r24, 0x01 + +ProbePerfMonitor_0x188 + bge+ ProbePerfMonitor_0x160 + stw r24, 0x05bc(r1) + stb r23, 0x05b8(r1) + li r21, 0x20 + subf r21, r23, r21 + stb r21, 0x05bb(r1) + blr + + + +; FDP_1214 + +; Xrefs: +; IntProgram + +FDP_1214 ; OUTSIDE REFERER + mfsprg r1, 0 + lwz r8, 0x0104(r6) + stw r8, 0x0000(r1) + stw r2, 0x0008(r1) + stw r3, 0x000c(r1) + stw r4, 0x0010(r1) + stw r5, 0x0014(r1) + stmw r14, 0x0038(r1) + mr r16, r7 + lwz r7, 0x013c(r6) + stw r7, 0x001c(r1) + lwz r8, 0x0144(r6) + stw r8, 0x0020(r1) + lwz r9, 0x014c(r6) + stw r9, 0x0024(r1) + lwz r23, 0x0154(r6) + stw r23, 0x0028(r1) + lwz r23, 0x015c(r6) + stw r23, 0x002c(r1) + lwz r23, 0x0164(r6) + stw r23, 0x0030(r1) + lwz r23, 0x016c(r6) + stw r23, 0x0034(r1) + lwz r1, -0x0004(r1) + addi r22, r6, 0xc4 + lwz r23, 0x0ea0(r1) + lwz r25, 0x0650(r1) + addi r23, r23, 0x01 + stw r23, 0x0ea0(r1) + mfsprg r24, 3 + addi r23, r1, 0x4e0 + mfmsr r14 + ori r15, r14, 0x10 + mtsprg 3, r23 + mtmsr r15 + isync + lwz r27, 0x0000(r10) + mtmsr r14 + isync + mtsprg 3, r24 + srwi r23, r27, 26 + cmpwi cr6, r23, 0x09 + cmpwi r23, 0x16 + cmpwi cr1, r23, 0x1f + lwz r20, 0x05b8(r1) + rlwinm r21, r16, 15, 14, 14 + neg r21, r21 + rlwimi r21, r16, 14, 16, 16 + or r21, r21, r20 + rlwimi r21, r27, 0, 21, 31 + rlwimi r16, r16, 27, 26, 26 + mfsprg r1, 0 + rlwinm r17, r27, 13, 25, 29 + rlwinm r18, r27, 18, 25, 29 + beq- cr6, FDP_1214_0x2b4 + mtcrf 0x3f, r21 + rlwinm r19, r27, 23, 25, 29 + beq- FDP_1bd0 + bne- cr1, FDP_1324 + rlwinm r21, r27, 2, 24, 28 + add r21, r21, r25 + lwz r20, 0x1374(r21) + rlwinm r23, r27, 26, 27, 31 + lwz r21, 0x1378(r21) + rotlw. r20, r20, r23 + add r21, r21, r25 + mtlr r21 + bltlr- + +FDP_1324 + ble- cr1, FDP_1338 + lis r20, 0x5556 + ori r20, r20, 0x5500 + rotlw. r20, r20, r23 + blt- FDP_1c18 + +FDP_1338 + mtcrf 0x70, r11 + li r8, 0x04 + ble- cr3, FDP_1354 + + +FDP_1344 + mtcrf 0x0f, r11 + li r8, 0x04 + ble- cr4, FDP_1354 + li r8, 0x05 + +FDP_1354 + lwz r6, -0x0004(r1) + lwz r9, 0x0ea0(r6) + lmw r14, 0x0038(r1) + addi r9, r9, -0x01 + stw r9, 0x0ea0(r6) + lwz r6, -0x0014(r1) + lwz r7, -0x0010(r1) + b major_0x02980_0x134 + + + +; What the hell is this? +ProgramIntTable + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x00910091, FDP_148c - FDP + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x10301030, 0x0000151c + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x00328000, 0x000016d0 + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x0080a000, 0x00001c18 + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x55545502, 0x00001c20 + dc.l 0x0f000f0c, 0x00001ad0 + dc.l 0x0a008a08, 0x00001aa8 + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x80008000, 0x00001b8c + dc.l 0x00000000, FDP_1338 - FDP + dc.l 0x00000000, FDP_1338 - FDP + +FDP_1474 + stw r20, 0(r22) + + +FDP_1478 + bns cr7, FDP_1484 + mfcr r23 + rlwimi r13, r23, 0, 0, 3 + +FDP_1484 + stwx r21, r1, r17 + b FDP_0da0 + +FDP_148c + bns cr2, FDP_1338 + lwzx r18, SP, r18 + bge cr6, FDP_14EC + bgt cr5, FDP_14B0 + mr. r21, r18 + crxor cr5_SO, cr5_SO, cr0_LT + bns cr5, FDP_1478 + neg. r21, r18 + b FDP_1478 + +FDP_14b0 + li r21, 0 + addo. r21, r18, r21 + crxor cr5_SO, cr5_SO, cr0_LT + bns cr5, FDP_1478 + nego. r21, r18 + b FDP_1478 + +FDP_1214_0x2b4 + mtcrf 0x3f, r21 + bns+ cr2, FDP_1338 + lwzx r18, r1, r18 + extsh r19, r27 + cmpw cr1, r19, r18 + subf r21, r21, r21 + blt+ cr1, FDP_1484 + subf r21, r18, r19 + b FDP_1484 + +FDP_14ec + lwzx r19, SP, r19 + bgt cr5, FDP_1508 + cmpw cr1, r19, r18 + sub. r21, r21, r21 + blt cr1, FDP_1478 + sub. r21, r19, r18 + b FDP_1478 + + +FDP_1508 + cmpw cr1, r19, r18 + subo. r21, r21, r21 + blt cr1, FDP_1478 + subo. r21, r19, r18 + b FDP_1478 + bge cr2, FDP_1338 + lwzx r19, SP, r19 + lwzx r18, SP, r18 + bne cr5, FDP_16B8 + cmpwi cr1, r19, 0 + bgt cr6, FDP_1548 + lwz r24, 0(r22) + srwi r21, r24, 31 + add. r21, r21, r18 + bne FDP_1590 + mr r18, r24 + + +FDP_1548 + cmpwi r19, -1 + bgt cr5, FDP_1574 + beq FDP_1568 + beq cr1, FDP_1580 + divw r21, r18, r19 + + +FDP_155c + mullw r20, r21, r19 + sub. r20, r18, r20 + b FDP_1474 + + +FDP_1568 + neg r21, r18 + sub. r20, r18, r18 + b FDP_1474 + + +FDP_1574 + divwo r21, r18, r19 + beq FDP_1568 + bne cr1, FDP_155C + + +FDP_1580 + rlwinm r23, r18, 2, 30, 30 + subi r21, r23, 1 + mr. r20, r18 + b FDP_1474 + + +FDP_1590 + mfxer r26 ; XER = 1 + beq cr1, FDP_1698 + cmpwi r19, 0 + cmpwi cr1, r18, 0 + crxor cr1_SO, cr0_LT, cr1_LT + bge FDP_15AC + neg r19, r19 + + +FDP_15ac + bge cr1, FDP_15B8 + subfic r24, r24, 0 + subfze r18, r18 + + +FDP_15b8 + cmplw r18, r19 + bge FDP_1698 + cntlzw r21, r19 + xor r18, r18, r24 + slw r19, r19, r21 + rotlw r18, r18, r21 + slw r24, r24, r21 + xor r18, r18, r24 + srwi r23, r19, 16 + divwu r20, r18, r23 + mullw r23, r20, r23 + sub r18, r18, r23 + slwi r18, r18, 16 + inslwi r18, r24, 16, 16 + slwi r24, r24, 16 + clrlwi r23, r19, 16 + mullw r23, r20, r23 + subc r18, r18, r23 + subfe. r23, r23, r23 + add r24, r24, r20 + bge FDP_161C + + +FDP_160c + addc r18, r18, r19 + addze. r23, r23 + subi r24, r24, 1 + blt FDP_160C + + +FDP_161c + srwi r23, r19, 16 + divwu r20, r18, r23 + mullw r23, r20, r23 + sub r18, r18, r23 + slwi r18, r18, 16 + inslwi r18, r24, 16, 16 + slwi r24, r24, 16 + clrlwi r23, r19, 16 + mullw r23, r20, r23 + subc r18, r18, r23 + subfe. r23, r23, r23 + add r24, r24, r20 + bge FDP_1660 + + +FDP_1650 + addc r18, r18, r19 + addze. r23, r23 + subi r24, r24, 1 + blt FDP_1650 + + +FDP_1660 + srw r20, r18, r21 + mr. r21, r24 + bge cr1, FDP_1670 + neg r20, r20 + + +FDP_1670 + bns cr1, FDP_1678 + neg. r21, r21 + + +FDP_1678 + ble cr5, FDP_168C + crxor cr0_LT, cr0_LT, cr1_SO + rlwinm r26, r26, 0, 2, 0 + bge FDP_168C + oris r26, r26, 0xC000 + + +FDP_168c + mtxer r26 ; XER = 1 + mr. r20, r20 + b FDP_1474 + + +FDP_1698 + ble cr5, FDP_16A0 + oris r26, r26, 0xC000 + + +FDP_16a0 + mtxer r26 ; XER = 1 + not r21, r18 + srwi r23, r18, 31 + mr. r20, r24 + add r21, r23, r21 + b FDP_1474 + + +FDP_16b8 + mulhw r21, r18, r19 + bgt cr5, FDP_16C8 + mullw. r20, r18, r19 + b FDP_1474 + + +FDP_16c8 + mullwo. r20, r18, r19 + b FDP_1474 + bgt cr6, FDP_18D8 + bgt cr5, FDP_1A64 + cmpwi r18, 64 + cmpwi cr1, r18, 0 + cmpwi cr6, r18, 4 + bso cr5, FDP_1938 + bge FDP_17F8 + crclr cr0_LT + beq cr1, FDP_1734 + beq cr6, FDP_1740 + cmpwi cr1, r18, 20 + cmpwi cr6, r18, 24 + beq cr1, FDP_1750 + beq cr6, FDP_17C8 + cmpwi cr1, r18, 32 + cmpwi cr6, r18, 36 + beq cr1, FDP_17D4 + beq cr6, FDP_17E8 + cmpwi cr6, r18, 16 + lwzx r18, SP, r18 + lwzx r19, SP, r19 + add. r21, r18, r19 + beq cr6, FDP_1750 + bne cr3, FDP_1338 + b FDP_1B54 + + +FDP_1734 + bge cr2, FDP_1338 + lwz r21, 0(r22) + b FDP_1478 + + +FDP_1740 + bne cr3, FDP_1338 + mtcrf %10000000, r13 + dc.l 0x7EA102A7 ; mfxer r21 | bit 31 + b FDP_1478 + + +FDP_1750 + ble cr2, FDP_1338 + lwz r22, -0x0004(SP) + + +FDP_1758 + mftbu r20 + mftb r21 + mftbu r23 + cmplw cr1, r23, r20 + bne- cr1, FDP_1758 + lwz r23, 0x05BC(r22) + lbz r18, 0x05B8(r22) + lbz r19, 0x05BB(r22) + mullw r22, r20, r23 + mulhwu r24, r21, r23 + add r22, r22, r24 + bne cr6, FDP_17A8 + cmplw cr1, r22, r24 + srw r22, r22, r19 + mulhwu r21, r20, r23 + bge+ cr1, FDP_179C + addi r21, r21, 1 + + +FDP_179c + slw r21, r21, r18 + add r21, r21, r22 + b FDP_1478 + + +FDP_17a8 + mullw r21, r21, r23 + srw r21, r21, r19 + slw r22, r22, r18 + add r21, r21, r22 + lis r23, 15258 + ori r23, r23, 0xCA00 + mulhwu r21, r21, r23 + b FDP_1478 + + +FDP_17c8 + bne cr2, FDP_1338 + mfdec r21 ; DEC = 22 + b FDP_1478 + + +FDP_17d4 + bne cr3, FDP_1338 + mtcrf %10000000, r13 + mtlr r12 ; LR = 8 + dc.l 0x7EA802A7 ; mflr r21 | bit 31 + b FDP_1478 + + +FDP_17e8 + bne cr3, FDP_1338 + mtcrf %10000000, r13 + dc.l 0x7EA902A7 ; mfctr r21 | bit 31 + b FDP_1478 + + +FDP_17f8 + lwz r23, -0x0004(SP) + mtcrf %10000000, r13 + lwz r23, 0x05C0(r23) + extrwi r19, r27, 10, 11 + cmplwi cr1, r19, 0x03E8 + beq cr1, FDP_187C + clrlslwi r23, r23, 28, 20 + bne cr4, FDP_1344 + mtcrf 32, r23 + cmplwi cr1, r19, 0x031D + beq cr1, FDP_1898 + cmplwi cr1, r19, 0x033D + beq cr1, FDP_18A0 + cmplwi cr1, r19, 0x035D + beq cr1, FDP_18A8 + cmplwi cr1, r19, 0x037D + beq cr1, FDP_18B0 + bgt cr2, FDP_1848 + cmplwi cr1, r19, 0x03FD + beq cr1, FDP_18D0 + + +FDP_1848 + bne cr2, FDP_1344 + cmplwi cr1, r19, 0x039D + beq cr1, FDP_18B8 + cmplwi cr1, r19, 0x03BD + beq cr1, FDP_18C0 + cmplwi cr1, r19, 0x03DD + beq cr1, FDP_18C8 + bge cr2, FDP_1344 + cmplwi cr1, r19, 0x021D + beq cr1, FDP_1888 + cmplwi cr1, r19, 0x02FD + beq cr1, FDP_1890 + b FDP_1344 + + +FDP_187c + ble cr4, FDP_1344 + dc.l 0x7EBF42A7 ; mfpvr r21 | bit 31 + b FDP_1478 + + +FDP_1888 + dc.l 0x7EB0EAA7 ; mfspr r21, MMCR2 | bit 31 + b FDP_1478 + + +FDP_1890 + dc.l 0x7EB7EAA7 ; mfspr r21, BAMR | bit 31 + b FDP_1478 + + +FDP_1898 + dc.l 0x7EB8EAA7 ; mfspr r21, MMCR0 | bit 31 + b FDP_1478 + + +FDP_18a0 + dc.l 0x7EB9EAA7 ; mfspr r21, PMC1 | bit 31 + b FDP_1478 + + +FDP_18a8 + dc.l 0x7EBAEAA7 ; mfspr r21, PMC2 | bit 31 + b FDP_1478 + + +FDP_18b0 + dc.l 0x7EBBEAA7 ; mfspr r21, SIA | bit 31 + b FDP_1478 + + +FDP_18b8 + dc.l 0x7EBCEAA7 ; mfspr r21, MMCR1 | bit 31 + b FDP_1478 + + +FDP_18c0 + dc.l 0x7EBDEAA7 ; mfspr r21, PMC3 | bit 31 + b FDP_1478 + + +FDP_18c8 + dc.l 0x7EBEEAA7 ; mfspr r21, PMC4 | bit 31 + b FDP_1478 + + +FDP_18d0 + dc.l 0x7EBFEAA7 ; mfspr r21, SDA | bit 31 + b FDP_1478 + + +FDP_18d8 + extrwi r23, r27, 10, 11 + cmplwi cr1, r23, 0x0188 + cmplwi cr6, r23, 0x01A8 + cror cr0_EQ, cr1_EQ, cr6_EQ + bne FDP_1338 + + +FDP_18ec + DIALECT POWER + mfrtcu r20 ; RTCU = 4 + mfrtcl r21 ; RTCL = 5 + mfrtcu r23 ; RTCU = 4 + DIALECT PowerPC + + xor. r23, r23, r20 + lis r23, 15258 + ori r23, r23, 0xCA00 + bne- FDP_18EC + mfspr r24, MQ ; 0 + crset cr3_SO + mullw r19, r20, r23 + mtspr MQ, r24 ; 0 + add r21, r21, r19 + beq cr1, FDP_1484 + cmplw r21, r19 + mulhwu r21, r20, r23 + mtspr MQ, r24 ; 0 + bge FDP_1484 + addi r21, r21, 1 + b FDP_1484 + + +FDP_1938 + lwzx r17, SP, r17 + bge FDP_1998 + mr. r17, r17 + beq cr1, FDP_1964 + bne cr3, FDP_1338 + beq cr6, FDP_1970 + cmpwi cr1, r18, 32 + cmpwi cr6, r18, 36 + beq cr1, FDP_197C + beq cr6, FDP_198C + b FDP_1B54 + + +FDP_1964 + bge cr2, FDP_1338 + stw r17, 0(r22) + b FDP_1B54 + + +FDP_1970 + mtcrf %10000000, r13 + dc.l 0x7E2103A7 ; mtxer r17 | bit 31 + b FDP_1B54 + + +FDP_197c + mtcrf %10000000, r13 + mr r12, r17 + dc.l 0x7E2803A7 ; mtlr r17 | bit 31 + b FDP_1B54 + + +FDP_198c + mtcrf %10000000, r13 + dc.l 0x7E2903A7 ; mtctr r17 | bit 31 + b FDP_1B54 + + +FDP_1998 + lwz r23, -0x0004(SP) + bne cr4, FDP_1344 + lwz r23, 0x05C0(r23) + mtcrf %10000000, r13 + clrlslwi r23, r23, 28, 20 + extrwi r19, r27, 10, 11 + mtcrf 32, r23 + cmplwi cr1, r19, 0x031D + beq cr1, FDP_1A24 + cmplwi cr1, r19, 0x033D + beq cr1, FDP_1A2C + cmplwi cr1, r19, 0x035D + beq cr1, FDP_1A34 + cmplwi cr1, r19, 0x037D + beq cr1, FDP_1A3C + bgt cr2, FDP_19E0 + cmplwi cr1, r19, 0x03FD + beq cr1, FDP_1A5C + + +FDP_19e0 + bne cr2, FDP_1344 + cmplwi cr1, r19, 0x039D + beq cr1, FDP_1A44 + cmplwi cr1, r19, 0x03BD + beq cr1, FDP_1A4C + cmplwi cr1, r19, 0x03DD + beq cr1, FDP_1A54 + bge cr2, FDP_1344 + cmplwi cr1, r19, 0x021D + beq cr1, FDP_1A14 + cmplwi cr1, r19, 0x02FD + beq cr1, FDP_1A1C + b FDP_1344 + + +FDP_1a14 + dc.l 0x7E30EBA7 ; mtspr r17, MMCR2 | bit 31 + b FDP_1B54 + + +FDP_1a1c + dc.l 0x7E37EBA7 ; mtspr r17, BAMR | bit 31 + b FDP_1B54 + + +FDP_1a24 + dc.l 0x7E38EBA7 ; mtspr r17, MMCR0 | bit 31 + b FDP_1B54 + + +FDP_1a2c + dc.l 0x7E39EBA7 ; mtspr r17, PMC1 | bit 31 + b FDP_1B54 + + +FDP_1a34 + dc.l 0x7E3AEBA7 ; mtspr r17, PMC2 | bit 31 + b FDP_1B54 + + +FDP_1a3c + dc.l 0x7E3BEBA7 ; mtspr r17, SIA | bit 31 + b FDP_1B54 + + +FDP_1a44 + dc.l 0x7E3CEBA7 ; mtspr r17, MMCR1 | bit 31 + b FDP_1B54 + + +FDP_1a4c + dc.l 0x7E3DEBA7 ; mtspr r17, PMC3 | bit 31 + b FDP_1B54 + + +FDP_1a54 + dc.l 0x7E3EEBA7 ; mtspr r17, PMC4 | bit 31 + b FDP_1B54 + + +FDP_1a5c + dc.l 0x7E3FEBA7 ; mtspr r17, SDA | bit 31 + b FDP_1B54 + + +FDP_1a64 + lwz r23, -0x0004(SP) + bge cr3, FDP_1338 + extrwi. r18, r27, 4, 12 + rlwinm r21, r27, 16, 28, 30 + cmpwi cr1, r21, 10 + addi r18, r18, 6808 + lbzx r18, r25, r18 + addi r21, r23, 3872 + beq cr1, FDP_1A90 + lhzx r21, r21, r18 + b FDP_1478 + + +FDP_1a90 + lwzx r21, r21, r18 + b FDP_1478 + + DIALECT POWER + dozi SP, r4, 9252 + dozi r17, r8, 10784 + dc.l 0x2c2e1814 ; cmpdi r14, 6164 + DIALECT PowerPC + + subfic r17, r4, 9252 + lwzx r19, SP, r19 + clrlwi r19, r19, 27 + bso cr5, FDP_1B1C + bns cr2, FDP_1338 + lwzx r17, SP, r17 + lis r23, -32768 + lwzx r21, SP, r18 + srw r23, r23, r19 + srw r17, r17, r19 + b FDP_1C08 + bgt cr6, FDP_1B18 + lwzx r19, SP, r19 + clrlwi r19, r19, 26 + bge cr6, FDP_1B1C + cmpwi r19, 31 + crnot cr5_SO, cr5_SO + ble FDP_1B1C + bge cr2, FDP_1338 + lwz r20, 0(r22) + li r23, -1 + clrlwi r19, r19, 27 + bgt cr5, FDP_1B0C + slw r23, r23, r19 + and. r21, r20, r23 + b FDP_1B50 + + +FDP_1b0c + srw r23, r23, r19 + and. r21, r20, r23 + b FDP_1B50 + + +FDP_1b18 + extrwi r19, r27, 5, 16 + + +FDP_1b1c + bge cr2, FDP_1338 + lwzx r17, SP, r17 + bgt cr5, FDP_1B64 + slw. r21, r17, r19 + rotlw r20, r17, r19 + bge cr6, FDP_1B4C + li r23, -1 + slw r23, r23, r19 + + +FDP_1b3c + lwz r19, 0(r22) + andc r23, r19, r23 + or. r21, r21, r23 + bns cr5, FDP_1B50 + + +FDP_1b4c + stw r20, 0(r22) + + +FDP_1b50 + stwx r21, r1, r18 + + +FDP_1b54 + bns+ cr7, FDP_0da0 + mfcr r23 + rlwimi r13, r23, 0, 0, 3 + b FDP_0da0 + + +FDP_1b64 + neg r20, r19 + rotlw r20, r17, r20 + beq cr5, FDP_1B84 + srw. r21, r17, r19 + bge cr6, FDP_1B4C + li r23, -1 + srw r23, r23, r19 + b FDP_1B3C + + +FDP_1b84 + sraw. r21, r17, r19 + b FDP_1B4C + bns cr2, FDP_1338 + lwzx r19, SP, r19 + lwzx r17, SP, r17 + bgt cr5, FDP_1BBC + li r21, -1 + sub r19, r19, r17 + not r19, r19 + clrlwi r19, r19, 27 + neg r17, r17 + slw r21, r21, r19 + rotlw. r21, r21, r17 + b FDP_1B50 + + +FDP_1bbc + lwzx r21, SP, r18 + and r17, r17, r19 + andc r21, r21, r19 + or. r21, r21, r17 + b FDP_1B50 + + +FDP_1bd0 + bns+ cr2, FDP_1338 + lwzx r17, r1, r17 + rlwinm r20, r27, 26, 27, 31 + lwzx r19, r1, r19 + rlwinm r21, r27, 31, 27, 31 + li r23, -0x01 + subf r21, r20, r21 + not r21, r21 + clrlwi r21, r21, 0x1b + neg r20, r20 + slw r23, r23, r21 + lwzx r21, r1, r18 + rotlw r23, r23, r20 + rotlw r17, r17, r19 + + +FDP_1c08 + and r17, r17, r23 + andc r21, r21, r23 + or. r21, r21, r17 + b FDP_1b50 + + +FDP_1c18 + ble+ cr3, FDP_1338 + b major_0x03324 + bgt cr6, FDP_1C18 + bge cr4, FDP_1338 + b major_0x03324 + + + +; FDP_1c40 + +; Xrefs: +; "vec" +; major_0x07ac0 + + align 5 + +FDP_1c40 ; OUTSIDE REFERER +; r6 = saved at *(ewa + 0x18) +; sprg1 = saved at *(ewa + 4) +; rN (0,7,8,9,10,11,12,13, not r1) = saved at *(*(ewa - 0x14) + 0x104 + 8*N) + bl int_prepare +; r0 = 0 +; r1 = *(ewa - 4) +; r6 = kdp +; r7 = *(ewa - 0x10) # flags? +; r8 = ewa +; r10 = srr0 +; r11 = srr1 +; r12 = sprg2 +; r13 = cr + + mfsprg r1, 0 + lwz r8, 0x0104(r6) + stw r8, 0x0000(r1) + stw r2, 0x0008(r1) + stw r3, 0x000c(r1) + stw r4, 0x0010(r1) + stw r5, 0x0014(r1) + stmw r14, 0x0038(r1) + mr r16, r7 + lwz r7, 0x013c(r6) + stw r7, 0x001c(r1) + lwz r8, 0x0144(r6) + stw r8, 0x0020(r1) + lwz r9, 0x014c(r6) + stw r9, 0x0024(r1) + lwz r23, 0x0154(r6) + stw r23, 0x0028(r1) + lwz r23, 0x015c(r6) + stw r23, 0x002c(r1) + lwz r23, 0x0164(r6) + stw r23, 0x0030(r1) + lwz r23, 0x016c(r6) + stw r23, 0x0034(r1) + lwz r1, -0x0004(r1) + addi r22, r6, 0xc4 + mfsprg r24, 3 + addi r23, r1, 0x4e0 + mfmsr r14 + oris r14, r14, 0x200 + ori r15, r14, 0x10 + mtsprg 3, r23 + mtmsr r15 + isync + lwz r27, 0x0000(r10) + mtmsr r14 + isync + mtsprg 3, r24 + lwz r24, 0x00d8(r6) + addi r24, r24, 0x00 + li r8, 0x00 + stvx v0, r24, r8 + li r9, 0x10 + stvx v1, r24, r9 + li r8, 0x20 + stvx v2, r24, r8 + li r9, 0x30 + stvx v3, r24, r9 + li r8, 0x40 + stvx v4, r24, r8 + li r9, 0x50 + stvx v5, r24, r9 + li r8, 0x60 + stvx v6, r24, r8 + li r9, 0x70 + stvx v7, r24, r9 + li r8, 0x80 + stvx v8, r24, r8 + li r9, 0x90 + stvx v9, r24, r9 + li r8, 160 + stvx v10, r24, r8 + li r9, 0xb0 + stvx v11, r24, r9 + li r8, 0xc0 + stvx v12, r24, r8 + li r9, 0xd0 + stvx v13, r24, r9 + li r8, 0xe0 + stvx v14, r24, r8 + li r9, 240 + stvx v15, r24, r9 + li r8, 0x100 + stvx v16, r24, r8 + li r9, 0x110 + stvx v17, r24, r9 + li r8, 0x120 + stvx v18, r24, r8 + li r9, 0x130 + stvx v19, r24, r9 + li r8, 320 + stvx v20, r24, r8 + li r9, 0x150 + stvx v21, r24, r9 + li r8, 0x160 + stvx v22, r24, r8 + li r9, 0x170 + stvx v23, r24, r9 + li r8, 0x180 + stvx v24, r24, r8 + li r9, 400 + stvx v25, r24, r9 + li r8, 0x1a0 + stvx v26, r24, r8 + li r9, 0x1b0 + stvx v27, r24, r9 + li r8, 0x1c0 + stvx v28, r24, r8 + li r9, 0x1d0 + stvx v29, r24, r9 + li r8, 480 + stvx v30, r24, r8 + li r9, 0x1f0 + stvx v31, r24, r9 + lwz r23, 0x0ed8(r1) + lwz r25, 0x0650(r1) + addi r23, r23, 0x01 + stw r23, 0x0ed8(r1) + rlwinm. r8, r27, 26, 0, 0 + rlwinm r9, r27, 24, 30, 31 + cmpwi cr1, r9, 0x03 + cmpwi cr2, r9, 0x00 + rlwinm r17, r27, 15, 23, 27 + rlwinm r18, r27, 20, 23, 27 + rlwinm r19, r27, 25, 23, 27 + blt- FDP_1c40_0x398 + beq- cr2, FDP_1c40_0x43c + bgt- cr1, FDP_1c40_0x278 + lvx v3, r24, r19 + vspltisw v31, 0x00 + vspltisw v29, 0x01 + vcfux v29, v29, 0x00 + vspltisw v30, -0x01 + vspltisw v22, 0x09 + vsrw v28, v30, v22 + vslw v27, v30, v30 + vnor v26, v28, v27 + vsraw v24, v3, v30 + vand v23, v3, v28 + vcmpequw v23, v23, v31 + vand v22, v3, v26 + vcmpequw v22, v22, v31 + vandc v25, v22, v23 + lwz r9, 0x064c(r1) + llabel r8, blergh + add r9, r9, r8 + rlwinm r8, r27, 28, 26, 29 + add r9, r9, r8 + mtlr r9 + blr + +blergh + b panic + b panic + b panic + b panic + b major_0x07ac0_0x14c + b major_0x07ac0_0x100 + b major_0x07ac0_0x24c + b major_0x07ac0_0x220 + b FDP_1c40_0x4d0 + b FDP_1c40_0x4e0 + b FDP_1c40_0x4f0 + b FDP_1c40_0x500 + b panic + b panic + b FDP_1c40_0x514 + b major_0x07980_0x100 + +FDP_1c40_0x274 ; OUTSIDE REFERER + stvx v1, r24, r17 + +FDP_1c40_0x278 + li r8, 0x00 + lvx v0, r24, r8 + li r8, 0x10 + lvx v1, r24, r8 + li r8, 0x20 + lvx v2, r24, r8 + li r8, 0x30 + lvx v3, r24, r8 + li r8, 0x40 + lvx v4, r24, r8 + li r8, 0x50 + lvx v5, r24, r8 + li r8, 0x60 + lvx v6, r24, r8 + li r8, 0x70 + lvx v7, r24, r8 + li r8, 0x80 + lvx v8, r24, r8 + li r8, 0x90 + lvx v9, r24, r8 + li r8, 160 + lvx v10, r24, r8 + li r8, 0xb0 + lvx v11, r24, r8 + li r8, 0xc0 + lvx v12, r24, r8 + li r8, 0xd0 + lvx v13, r24, r8 + li r8, 0xe0 + lvx v14, r24, r8 + li r8, 240 + lvx v15, r24, r8 + li r8, 0x100 + lvx v16, r24, r8 + li r8, 0x110 + lvx v17, r24, r8 + li r8, 0x120 + lvx v18, r24, r8 + li r8, 0x130 + lvx v19, r24, r8 + li r8, 320 + lvx v20, r24, r8 + li r8, 0x150 + lvx v21, r24, r8 + li r8, 0x160 + lvx v22, r24, r8 + li r8, 0x170 + lvx v23, r24, r8 + li r8, 0x180 + lvx v24, r24, r8 + li r8, 400 + lvx v25, r24, r8 + li r8, 0x1a0 + lvx v26, r24, r8 + li r8, 0x1b0 + lvx v27, r24, r8 + li r8, 0x1c0 + lvx v28, r24, r8 + li r8, 0x1d0 + lvx v29, r24, r8 + li r8, 480 + lvx v30, r24, r8 + li r8, 0x1f0 + lvx v31, r24, r8 + andi. r23, r16, 0x20 + addi r10, r10, 0x04 + mfsprg r1, 0 + mtspr srr0, r10 + mtspr srr1, r11 + bne+ FDP_0E30 + mtlr r12 + b FDP_0DC8 + +FDP_1c40_0x398 + rlwinm r22, r27, 30, 23, 27 + mfmsr r14 + ori r15, r14, 0x2000 + mtmsr r15 + isync + rlwinm. r8, r11, 0, 18, 18 + beq- FDP_1c40_0x3cc + stfd f0, 0x0200(r6) + mffs f0 + stfd f1, 0x0208(r6) + stfd f2, 0x0210(r6) + stfd f3, 0x0218(r6) + stfd f0, 0x00e0(r6) + +FDP_1c40_0x3cc + dc.l 0xff80010c + crmove 30, 2 + rlwinm. r9, r27, 31, 0, 0 + li r8, 0x03 + crmove 26, 0 + +FDP_1c40_0x3e0 + lfsx f0, r24, r18 + addic. r8, r8, -0x01 + lfsx f1, r24, r19 + lfsx f2, r24, r22 + bne- cr6, FDP_1c40_0x408 + fnmsubs f3, f0, f2, f1 + stfsx f3, r24, r17 + addi r24, r24, 0x04 + bge+ FDP_1c40_0x3e0 + b FDP_1c40_0x418 + +FDP_1c40_0x408 + fmadds f3, f0, f2, f1 + stfsx f3, r24, r17 + addi r24, r24, 0x04 + bge+ FDP_1c40_0x3e0 + +FDP_1c40_0x418 + addi r24, r24, -0x10 + beq+ cr7, FDP_1c40_0x278 + lfd f0, 0x00e0(r6) + mtfsf 0xff, f0 + lfd f0, 0x0200(r6) + lfd f1, 0x0208(r6) + lfd f2, 0x0210(r6) + lfd f3, 0x0218(r6) + b FDP_1c40_0x278 + +FDP_1c40_0x43c + mfmsr r14 + ori r15, r14, 0x2000 + mtmsr r15 + isync + rlwinm. r8, r11, 0, 18, 18 + beq- FDP_1c40_0x468 + stfd f0, 0x0200(r6) + mffs f0 + stfd f1, 0x0208(r6) + stfd f3, 0x0218(r6) + stfd f0, 0x00e0(r6) + +FDP_1c40_0x468 + dc.l 0xff80010c + crmove 30, 2 + rlwinm. r9, r27, 25, 0, 0 + li r8, 0x03 + crmove 26, 0 + +FDP_1c40_0x47c + lfsx f0, r24, r18 + addic. r8, r8, -0x01 + lfsx f1, r24, r19 + bne- cr6, FDP_1c40_0x4a0 + fsubs f3, f0, f1 + stfsx f3, r24, r17 + addi r24, r24, 0x04 + bge+ FDP_1c40_0x47c + b FDP_1c40_0x4b0 + +FDP_1c40_0x4a0 + fadds f3, f0, f1 + stfsx f3, r24, r17 + addi r24, r24, 0x04 + bge+ FDP_1c40_0x47c + +FDP_1c40_0x4b0 + addi r24, r24, -0x10 + beq+ cr7, FDP_1c40_0x278 + lfd f0, 0x00e0(r6) + mtfsf 0xff, f0 + lfd f0, 0x0200(r6) + lfd f1, 0x0208(r6) + lfd f3, 0x0218(r6) + b FDP_1c40_0x278 + +FDP_1c40_0x4d0 + vsel v22, v31, v27, v24 + vsel v23, v3, v22, v25 + vrfin v1, v23 + b FDP_1c40_0x274 + +FDP_1c40_0x4e0 + vsel v22, v31, v27, v24 + vsel v23, v3, v22, v25 + vrfiz v1, v23 + b FDP_1c40_0x274 + +FDP_1c40_0x4f0 + vsel v22, v29, v27, v24 + vsel v23, v3, v22, v25 + vrfip v1, v23 + b FDP_1c40_0x274 + +FDP_1c40_0x500 + vor v29, v29, v27 + vsel v22, v31, v29, v24 + vsel v23, v3, v22, v25 + vrfim v1, v23 + b FDP_1c40_0x274 + +FDP_1c40_0x514 + vsel v23, v3, v31, v25 + lwz r9, 0x064c(r1) + llabel r8, FDP_2180 + add r8, r8, r9 + srwi r9, r18, 1 + add r8, r8, r9 + mtlr r8 + blr + + + + align 6 + +FDP_2180 + dc.l 0x1020BB8A + b FDP_1c40_0x274 + dc.l 0x1021BB8A + b FDP_1c40_0x274 + dc.l 0x1022BB8A + b FDP_1c40_0x274 + dc.l 0x1023BB8A + b FDP_1c40_0x274 + dc.l 0x1024BB8A + b FDP_1c40_0x274 + dc.l 0x1025BB8A + b FDP_1c40_0x274 + dc.l 0x1026BB8A + b FDP_1c40_0x274 + dc.l 0x1027BB8A + b FDP_1c40_0x274 + dc.l 0x1028BB8A + b FDP_1c40_0x274 + dc.l 0x1029BB8A + b FDP_1c40_0x274 + dc.l 0x102ABB8A + b FDP_1c40_0x274 + dc.l 0x102BBB8A + b FDP_1c40_0x274 + dc.l 0x102CBB8A + b FDP_1c40_0x274 + dc.l 0x102DBB8A + b FDP_1c40_0x274 + dc.l 0x102EBB8A + b FDP_1c40_0x274 + dc.l 0x102FBB8A + b FDP_1c40_0x274 + dc.l 0x1030BB8A + b FDP_1c40_0x274 + dc.l 0x1031BB8A + b FDP_1c40_0x274 + dc.l 0x1032BB8A + b FDP_1c40_0x274 + dc.l 0x1033BB8A + b FDP_1c40_0x274 + dc.l 0x1034BB8A + b FDP_1c40_0x274 + dc.l 0x1035BB8A + b FDP_1c40_0x274 + dc.l 0x1036BB8A + b FDP_1c40_0x274 + dc.l 0x1037BB8A + b FDP_1c40_0x274 + dc.l 0x1038BB8A + b FDP_1c40_0x274 + dc.l 0x1039BB8A + b FDP_1c40_0x274 + dc.l 0x103ABB8A + b FDP_1c40_0x274 + dc.l 0x103BBB8A + b FDP_1c40_0x274 + dc.l 0x103CBB8A + b FDP_1c40_0x274 + dc.l 0x103DBB8A + b FDP_1c40_0x274 + dc.l 0x103EBB8A + b FDP_1c40_0x274 + dc.l 0x103FBB8A + b FDP_1c40_0x274 + +major_0x07980_0x100 ; OUTSIDE REFERER + vsel v23, v3, v31, v25 + lwz r9, 0x064c(r1) + llabel r8, FDP_22c0 + add r8, r8, r9 + srwi r9, r18, 1 + add r8, r8, r9 + mtlr r8 + blr + + + +; major_0x07ac0 + +; Xrefs: +; FDP_1c40 + + align 6 + +FDP_22c0 + dc.l 0x1020BBCA + b FDP_1c40_0x274 + dc.l 0x1021BBCA + b FDP_1c40_0x274 + dc.l 0x1022BBCA + b FDP_1c40_0x274 + dc.l 0x1023BBCA + b FDP_1c40_0x274 + dc.l 0x1024BBCA + b FDP_1c40_0x274 + dc.l 0x1025BBCA + b FDP_1c40_0x274 + dc.l 0x1026BBCA + b FDP_1c40_0x274 + dc.l 0x1027BBCA + b FDP_1c40_0x274 + dc.l 0x1028BBCA + b FDP_1c40_0x274 + dc.l 0x1029BBCA + b FDP_1c40_0x274 + dc.l 0x102ABBCA + b FDP_1c40_0x274 + dc.l 0x102BBBCA + b FDP_1c40_0x274 + dc.l 0x102CBBCA + b FDP_1c40_0x274 + dc.l 0x102DBBCA + b FDP_1c40_0x274 + dc.l 0x102EBBCA + b FDP_1c40_0x274 + dc.l 0x102FBBCA + b FDP_1c40_0x274 + dc.l 0x1030BBCA + b FDP_1c40_0x274 + dc.l 0x1031BBCA + b FDP_1c40_0x274 + dc.l 0x1032BBCA + b FDP_1c40_0x274 + dc.l 0x1033BBCA + b FDP_1c40_0x274 + dc.l 0x1034BBCA + b FDP_1c40_0x274 + dc.l 0x1035BBCA + b FDP_1c40_0x274 + dc.l 0x1036BBCA + b FDP_1c40_0x274 + dc.l 0x1037BBCA + b FDP_1c40_0x274 + dc.l 0x1038BBCA + b FDP_1c40_0x274 + dc.l 0x1039BBCA + b FDP_1c40_0x274 + dc.l 0x103ABBCA + b FDP_1c40_0x274 + dc.l 0x103BBBCA + b FDP_1c40_0x274 + dc.l 0x103CBBCA + b FDP_1c40_0x274 + dc.l 0x103DBBCA + b FDP_1c40_0x274 + dc.l 0x103EBBCA + b FDP_1c40_0x274 + dc.l 0x103FBBCA + b FDP_1c40_0x274 + +major_0x07ac0_0x100 ; OUTSIDE REFERER + bl major_0x07d80_0x20 + vspltisw v19, 0x01 + vadduwm v22, v22, v19 + vspltisw v23, -0x07 + vsrw v21, v23, v23 + vsubuwm v23, v21, v22 + vspltisw v21, -0x09 + vslw v23, v23, v21 + vrsqrtefp v19, v23 + vslw v20, v3, v22 + vor v23, v29, v27 + vsel v23, v31, v23, v24 + vsel v21, v3, v23, v25 + vandc v25, v25, v24 + vrsqrtefp v20, v20 + vrsqrtefp v21, v21 + vmaddfp v1, v20, v19, v27 + vsel v1, v21, v1, v25 + b FDP_1c40_0x274 + +major_0x07ac0_0x14c ; OUTSIDE REFERER + bl major_0x07d80_0x20 + vspltisw v19, 0x01 + vadduwm v22, v22, v19 + vslw v20, v3, v22 + vsel v20, v31, v20, v25 + vrefp v20, v20 + vspltisw v21, -0x09 + vandc v23, v20, v27 + vsrw v23, v23, v21 + mfvscr v29 + vsrw v19, v30, v19 + vsrw v19, v19, v21 + vaddubs v23, v22, v23 + mtvscr v29 + vcmpequw v22, v23, v19 + vslw v23, v23, v21 + vsel v23, v20, v23, v26 + vand v22, v22, v28 + vsel v23, v23, v31, v22 + vsel v20, v31, v27, v24 + vsel v1, v23, v30, v20 + vspltisw v19, 0x01 + vslw v22, v3, v19 + vspltisw v23, -0x04 + vsraw v22, v22, v21 + vsraw v22, v22, v19 + vcmpgtuw v23, v22, v23 + vcmpequw v19, v22, v30 + vandc v23, v23, v19 + vspltisw v19, 0x02 + vsubuwm v22, v22, v19 + vslw v22, v22, v21 + vsel v22, v3, v22, v26 + vsel v22, v31, v22, v23 + vrefp v22, v22 + vspltisw v19, 0x01 + vandc v22, v22, v27 + vslw v29, v19, v21 + vor v28, v28, v29 + vcmpgtuw v28, v22, v28 + vsrw v29, v29, v19 + vsel v22, v22, v31, v26 + vsrw v22, v22, v19 + vor v22, v22, v29 + vsel v19, v19, v31, v28 + vsrw v22, v22, v19 + vor v22, v22, v20 + vsel v1, v1, v22, v23 + vor v25, v25, v23 + vsel v23, v3, v31, v25 + vrefp v23, v23 + vsel v1, v23, v1, v25 + b FDP_1c40_0x274 + +major_0x07ac0_0x220 ; OUTSIDE REFERER + bl major_0x07d80_0x20 + vspltisw v19, 0x01 + vadduwm v22, v22, v19 + vslw v20, v3, v22 + vsel v23, v3, v20, v25 + vlogefp v23, v23 + vsubsws v22, v31, v22 + vcfsx v22, v22, 0x00 + vaddfp v1, v22, v23 + vsel v1, v23, v1, v25 + b FDP_1c40_0x274 + +major_0x07ac0_0x24c ; OUTSIDE REFERER + lwz r9, 0x064c(r1) + llabel r8, FDP_2590 + add r8, r8, r9 + lvx v23, 0, r8 + vspltw v21, v23, 0x03 + vspltw v20, v23, 0x00 + vcmpgefp v21, v3, v21 + vcmpgtfp v20, v3, v20 + vspltw v19, v23, 0x02 + vandc v22, v21, v20 + vsel v29, v31, v3, v22 + vaddfp v29, v29, v19 + vsel v19, v3, v29, v22 + vexptefp v1, v19 + vspltisw v25, -0x09 + vspltw v23, v23, 0x01 + vsrw v19, v1, v25 + vspltisw v29, 0x01 + vsubuwm v19, v23, v19 + vslw v26, v29, v25 + vsel v28, v31, v1, v28 + vor v28, v28, v26 + vsrw v28, v28, v19 + vsel v1, v1, v28, v22 + b FDP_1c40_0x274 + + + +; major_0x07d80 + +; Xrefs: +; major_0x07ac0 + + align 5 + +FDP_2580 + dc.l 0x17030202 + dc.l 0x01010101 + dc.l 0x00000000 + dc.l 0x00000000 + +FDP_2590 + dc.l 0xc2fc0004 + dc.l 0x00000041 + dc.l 0x42800000 + dc.l 0xc3150001 + +major_0x07d80_0x20 ; OUTSIDE REFERER + vspltisw v23, 9 + vslw v19, v3, v23 + lwz r9, 0x064c(r1) + llabel r8, FDP_2580 + add r8, r8, r9 + lvx v23, 0, r8 + vperm v22, v23, v23, v19 + vspltisw v21, 4 + vsrw v21, v19, v21 + vperm v21, v23, v23, v21 + li r8, 0 + lvsl v20, r8, r8 + vspltisw v23, 3 + vslw v20, v20, v23 + vspltisb v23, 4 + vaddubm v19, v20, v23 + vspltw v20, v20, 0 + vspltw v19, v19, 0 + vaddubm v21, v21, v20 + vaddubm v22, v22, v19 + vminub v22, v22, v21 + vsldoi v21, v22, v22, 2 + vminub v22, v22, v21 + vsldoi v21, v22, v22,1 + vminub v22, v22, v21 + vspltisw v21, -8 + vsrw v22, v22, v21 + blr + + + +; No clue what this does + + align 5 + +FDP_2620 + dc.l 0x7C00B8CE + b FDP_011C + dc.l 0x7C20B8CE + b FDP_011C + dc.l 0x7C40B8CE + b FDP_011C + dc.l 0x7C60B8CE + b FDP_011C + dc.l 0x7C80B8CE + b FDP_011C + dc.l 0x7CA0B8CE + b FDP_011C + dc.l 0x7CC0B8CE + b FDP_011C + dc.l 0x7CE0B8CE + b FDP_011C + dc.l 0x7D00B8CE + b FDP_011C + dc.l 0x7D20B8CE + b FDP_011C + dc.l 0x7D40B8CE + b FDP_011C + dc.l 0x7D60B8CE + b FDP_011C + dc.l 0x7D80B8CE + b FDP_011C + dc.l 0x7DA0B8CE + b FDP_011C + dc.l 0x7DC0B8CE + b FDP_011C + dc.l 0x7DE0B8CE + b FDP_011C + dc.l 0x7E00B8CE + b FDP_011C + dc.l 0x7E20B8CE + b FDP_011C + dc.l 0x7E40B8CE + b FDP_011C + dc.l 0x7E60B8CE + b FDP_011C + dc.l 0x7E80B8CE + b FDP_011C + dc.l 0x7EA0B8CE + b FDP_011C + dc.l 0x7EC0B8CE + b FDP_011C + dc.l 0x7EE0B8CE + b FDP_011C + dc.l 0x7F00B8CE + b FDP_011C + dc.l 0x7F20B8CE + b FDP_011C + dc.l 0x7F40B8CE + b FDP_011C + dc.l 0x7F60B8CE + b FDP_011C + dc.l 0x7F80B8CE + b FDP_011C + dc.l 0x7FA0B8CE + b FDP_011C + dc.l 0x7FC0B8CE + b FDP_011C + dc.l 0x7FE0B8CE + b FDP_011C + dc.l 0x7C00B80E + b FDP_0DA0 + dc.l 0x7C20B80E + b FDP_0DA0 + dc.l 0x7C40B80E + b FDP_0DA0 + dc.l 0x7C60B80E + b FDP_0DA0 + dc.l 0x7C80B80E + b FDP_0DA0 + dc.l 0x7CA0B80E + b FDP_0DA0 + dc.l 0x7CC0B80E + b FDP_0DA0 + dc.l 0x7CE0B80E + b FDP_0DA0 + dc.l 0x7D00B80E + b FDP_0DA0 + dc.l 0x7D20B80E + b FDP_0DA0 + dc.l 0x7D40B80E + b FDP_0DA0 + dc.l 0x7D60B80E + b FDP_0DA0 + dc.l 0x7D80B80E + b FDP_0DA0 + dc.l 0x7DA0B80E + b FDP_0DA0 + dc.l 0x7DC0B80E + b FDP_0DA0 + dc.l 0x7DE0B80E + b FDP_0DA0 + dc.l 0x7E00B80E + b FDP_0DA0 + dc.l 0x7E20B80E + b FDP_0DA0 + dc.l 0x7E40B80E + b FDP_0DA0 + dc.l 0x7E60B80E + b FDP_0DA0 + dc.l 0x7E80B80E + b FDP_0DA0 + dc.l 0x7EA0B80E + b FDP_0DA0 + dc.l 0x7EC0B80E + b FDP_0DA0 + dc.l 0x7EE0B80E + b FDP_0DA0 + dc.l 0x7F00B80E + b FDP_0DA0 + dc.l 0x7F20B80E + b FDP_0DA0 + dc.l 0x7F40B80E + b FDP_0DA0 + dc.l 0x7F60B80E + b FDP_0DA0 + dc.l 0x7F80B80E + b FDP_0DA0 + dc.l 0x7FA0B80E + b FDP_0DA0 + dc.l 0x7FC0B80E + b FDP_0DA0 + dc.l 0x7FE0B80E + b FDP_0DA0 + dc.l 0x7C00B84E + b FDP_0DA0 + dc.l 0x7C20B84E + b FDP_0DA0 + dc.l 0x7C40B84E + b FDP_0DA0 + dc.l 0x7C60B84E + b FDP_0DA0 + dc.l 0x7C80B84E + b FDP_0DA0 + dc.l 0x7CA0B84E + b FDP_0DA0 + dc.l 0x7CC0B84E + b FDP_0DA0 + dc.l 0x7CE0B84E + b FDP_0DA0 + dc.l 0x7D00B84E + b FDP_0DA0 + dc.l 0x7D20B84E + b FDP_0DA0 + dc.l 0x7D40B84E + b FDP_0DA0 + dc.l 0x7D60B84E + b FDP_0DA0 + dc.l 0x7D80B84E + b FDP_0DA0 + dc.l 0x7DA0B84E + b FDP_0DA0 + dc.l 0x7DC0B84E + b FDP_0DA0 + dc.l 0x7DE0B84E + b FDP_0DA0 + dc.l 0x7E00B84E + b FDP_0DA0 + dc.l 0x7E20B84E + b FDP_0DA0 + dc.l 0x7E40B84E + b FDP_0DA0 + dc.l 0x7E60B84E + b FDP_0DA0 + dc.l 0x7E80B84E + b FDP_0DA0 + dc.l 0x7EA0B84E + b FDP_0DA0 + dc.l 0x7EC0B84E + b FDP_0DA0 + dc.l 0x7EE0B84E + b FDP_0DA0 + dc.l 0x7F00B84E + b FDP_0DA0 + dc.l 0x7F20B84E + b FDP_0DA0 + dc.l 0x7F40B84E + b FDP_0DA0 + dc.l 0x7F60B84E + b FDP_0DA0 + dc.l 0x7F80B84E + b FDP_0DA0 + dc.l 0x7FA0B84E + b FDP_0DA0 + dc.l 0x7FC0B84E + b FDP_0DA0 + dc.l 0x7FE0B84E + b FDP_0DA0 + dc.l 0x7C00B88E + b FDP_0DA0 + dc.l 0x7C20B88E + b FDP_0DA0 + dc.l 0x7C40B88E + b FDP_0DA0 + dc.l 0x7C60B88E + b FDP_0DA0 + dc.l 0x7C80B88E + b FDP_0DA0 + dc.l 0x7CA0B88E + b FDP_0DA0 + dc.l 0x7CC0B88E + b FDP_0DA0 + dc.l 0x7CE0B88E + b FDP_0DA0 + dc.l 0x7D00B88E + b FDP_0DA0 + dc.l 0x7D20B88E + b FDP_0DA0 + dc.l 0x7D40B88E + b FDP_0DA0 + dc.l 0x7D60B88E + b FDP_0DA0 + dc.l 0x7D80B88E + b FDP_0DA0 + dc.l 0x7DA0B88E + b FDP_0DA0 + dc.l 0x7DC0B88E + b FDP_0DA0 + dc.l 0x7DE0B88E + b FDP_0DA0 + dc.l 0x7E00B88E + b FDP_0DA0 + dc.l 0x7E20B88E + b FDP_0DA0 + dc.l 0x7E40B88E + b FDP_0DA0 + dc.l 0x7E60B88E + b FDP_0DA0 + dc.l 0x7E80B88E + b FDP_0DA0 + dc.l 0x7EA0B88E + b FDP_0DA0 + dc.l 0x7EC0B88E + b FDP_0DA0 + dc.l 0x7EE0B88E + b FDP_0DA0 + dc.l 0x7F00B88E + b FDP_0DA0 + dc.l 0x7F20B88E + b FDP_0DA0 + dc.l 0x7F40B88E + b FDP_0DA0 + dc.l 0x7F60B88E + b FDP_0DA0 + dc.l 0x7F80B88E + b FDP_0DA0 + dc.l 0x7FA0B88E + b FDP_0DA0 + dc.l 0x7FC0B88E + b FDP_0DA0 + dc.l 0x7FE0B88E + b FDP_0DA0 + dc.l 0x7C00B9CE + b FDP_011C + dc.l 0x7C20B9CE + b FDP_011C + dc.l 0x7C40B9CE + b FDP_011C + dc.l 0x7C60B9CE + b FDP_011C + dc.l 0x7C80B9CE + b FDP_011C + dc.l 0x7CA0B9CE + b FDP_011C + dc.l 0x7CC0B9CE + b FDP_011C + dc.l 0x7CE0B9CE + b FDP_011C + dc.l 0x7D00B9CE + b FDP_011C + dc.l 0x7D20B9CE + b FDP_011C + dc.l 0x7D40B9CE + b FDP_011C + dc.l 0x7D60B9CE + b FDP_011C + dc.l 0x7D80B9CE + b FDP_011C + dc.l 0x7DA0B9CE + b FDP_011C + dc.l 0x7DC0B9CE + b FDP_011C + dc.l 0x7DE0B9CE + b FDP_011C + dc.l 0x7E00B9CE + b FDP_011C + dc.l 0x7E20B9CE + b FDP_011C + dc.l 0x7E40B9CE + b FDP_011C + dc.l 0x7E60B9CE + b FDP_011C + dc.l 0x7E80B9CE + b FDP_011C + dc.l 0x7EA0B9CE + b FDP_011C + dc.l 0x7EC0B9CE + b FDP_011C + dc.l 0x7EE0B9CE + b FDP_011C + dc.l 0x7F00B9CE + b FDP_011C + dc.l 0x7F20B9CE + b FDP_011C + dc.l 0x7F40B9CE + b FDP_011C + dc.l 0x7F60B9CE + b FDP_011C + dc.l 0x7F80B9CE + b FDP_011C + dc.l 0x7FA0B9CE + b FDP_011C + dc.l 0x7FC0B9CE + b FDP_011C + dc.l 0x7FE0B9CE + b FDP_011C + dc.l 0x7C00B90E + b FDP_104C + dc.l 0x7C20B90E + b FDP_104C + dc.l 0x7C40B90E + b FDP_104C + dc.l 0x7C60B90E + b FDP_104C + dc.l 0x7C80B90E + b FDP_104C + dc.l 0x7CA0B90E + b FDP_104C + dc.l 0x7CC0B90E + b FDP_104C + dc.l 0x7CE0B90E + b FDP_104C + dc.l 0x7D00B90E + b FDP_104C + dc.l 0x7D20B90E + b FDP_104C + dc.l 0x7D40B90E + b FDP_104C + dc.l 0x7D60B90E + b FDP_104C + dc.l 0x7D80B90E + b FDP_104C + dc.l 0x7DA0B90E + b FDP_104C + dc.l 0x7DC0B90E + b FDP_104C + dc.l 0x7DE0B90E + b FDP_104C + dc.l 0x7E00B90E + b FDP_104C + dc.l 0x7E20B90E + b FDP_104C + dc.l 0x7E40B90E + b FDP_104C + dc.l 0x7E60B90E + b FDP_104C + dc.l 0x7E80B90E + b FDP_104C + dc.l 0x7EA0B90E + b FDP_104C + dc.l 0x7EC0B90E + b FDP_104C + dc.l 0x7EE0B90E + b FDP_104C + dc.l 0x7F00B90E + b FDP_104C + dc.l 0x7F20B90E + b FDP_104C + dc.l 0x7F40B90E + b FDP_104C + dc.l 0x7F60B90E + b FDP_104C + dc.l 0x7F80B90E + b FDP_104C + dc.l 0x7FA0B90E + b FDP_104C + dc.l 0x7FC0B90E + b FDP_104C + dc.l 0x7FE0B90E + b FDP_104C + dc.l 0x7C00B94E + b FDP_1058 + dc.l 0x7C20B94E + b FDP_1058 + dc.l 0x7C40B94E + b FDP_1058 + dc.l 0x7C60B94E + b FDP_1058 + dc.l 0x7C80B94E + b FDP_1058 + dc.l 0x7CA0B94E + b FDP_1058 + dc.l 0x7CC0B94E + b FDP_1058 + dc.l 0x7CE0B94E + b FDP_1058 + dc.l 0x7D00B94E + b FDP_1058 + dc.l 0x7D20B94E + b FDP_1058 + dc.l 0x7D40B94E + b FDP_1058 + dc.l 0x7D60B94E + b FDP_1058 + dc.l 0x7D80B94E + b FDP_1058 + dc.l 0x7DA0B94E + b FDP_1058 + dc.l 0x7DC0B94E + b FDP_1058 + dc.l 0x7DE0B94E + b FDP_1058 + dc.l 0x7E00B94E + b FDP_1058 + dc.l 0x7E20B94E + b FDP_1058 + dc.l 0x7E40B94E + b FDP_1058 + dc.l 0x7E60B94E + b FDP_1058 + dc.l 0x7E80B94E + b FDP_1058 + dc.l 0x7EA0B94E + b FDP_1058 + dc.l 0x7EC0B94E + b FDP_1058 + dc.l 0x7EE0B94E + b FDP_1058 + dc.l 0x7F00B94E + b FDP_1058 + dc.l 0x7F20B94E + b FDP_1058 + dc.l 0x7F40B94E + b FDP_1058 + dc.l 0x7F60B94E + b FDP_1058 + dc.l 0x7F80B94E + b FDP_1058 + dc.l 0x7FA0B94E + b FDP_1058 + dc.l 0x7FC0B94E + b FDP_1058 + dc.l 0x7FE0B94E + b FDP_1058 + dc.l 0x7C00B98E + b FDP_1064 + dc.l 0x7C20B98E + b FDP_1064 + dc.l 0x7C40B98E + b FDP_1064 + dc.l 0x7C60B98E + b FDP_1064 + dc.l 0x7C80B98E + b FDP_1064 + dc.l 0x7CA0B98E + b FDP_1064 + dc.l 0x7CC0B98E + b FDP_1064 + dc.l 0x7CE0B98E + b FDP_1064 + dc.l 0x7D00B98E + b FDP_1064 + dc.l 0x7D20B98E + b FDP_1064 + dc.l 0x7D40B98E + b FDP_1064 + dc.l 0x7D60B98E + b FDP_1064 + dc.l 0x7D80B98E + b FDP_1064 + dc.l 0x7DA0B98E + b FDP_1064 + dc.l 0x7DC0B98E + b FDP_1064 + dc.l 0x7DE0B98E + b FDP_1064 + dc.l 0x7E00B98E + b FDP_1064 + dc.l 0x7E20B98E + b FDP_1064 + dc.l 0x7E40B98E + b FDP_1064 + dc.l 0x7E60B98E + b FDP_1064 + dc.l 0x7E80B98E + b FDP_1064 + dc.l 0x7EA0B98E + b FDP_1064 + dc.l 0x7EC0B98E + b FDP_1064 + dc.l 0x7EE0B98E + b FDP_1064 + dc.l 0x7F00B98E + b FDP_1064 + dc.l 0x7F20B98E + b FDP_1064 + dc.l 0x7F40B98E + b FDP_1064 + dc.l 0x7F60B98E + b FDP_1064 + dc.l 0x7F80B98E + b FDP_1064 + dc.l 0x7FA0B98E + b FDP_1064 + dc.l 0x7FC0B98E + b FDP_1064 + dc.l 0x7FE0B98E + b FDP_1064 diff --git a/NanoKernel/NKVMCalls.s b/NanoKernel/NKVMCalls.s new file mode 100644 index 0000000..31cf116 --- /dev/null +++ b/NanoKernel/NKVMCalls.s @@ -0,0 +1,1988 @@ +Local_Panic set * + b panic + + + + align 5 + + + +MaxVMCallCount equ 26 + + + + MACRO + DeclareVMCall &n, &code + +@h + org VMDispatchMainTable + &n * 4 + dc.l &code - NKTop - &n * 4 + + org VMDispatchAltTable + &n * 4 + dc.l &code - NKTop - &n * 4 + + org @h + + ENDM + + + MACRO + DeclareVMCallWithAlt &n, &code, &alt + +@h + org VMDispatchMainTable + &n * 4 + dc.l &code - NKTop - &n * 4 + + org VMDispatchAltTable + &n * 4 + dc.l &alt - NKTop - &n * 4 + + org @h + + ENDM + + + +; Accessed ONLY via Sup table + +kcVMDispatch ; OUTSIDE REFERER + + _Lock PSA.HTABLock, scratch1=r8, scratch2=r9 + + mfsprg r8, 0 + stw r7, -0x0010(r8) + lwz r6, EWA.r6(r8) + stw r14, EWA.r14(r8) + stw r15, EWA.r15(r8) + stw r16, EWA.r16(r8) + +; Whoa... where did cr0 get set? +; And why do we set cr2? + mfpvr r9 + srwi r9, r9, 16 + cmpwi cr2, r9, 0x0009 + beq- @other_pvr_test + cmpwi cr2, r9, 0x000a +@other_pvr_test + + lwz r7, KDP.NanoKernelInfo + NKNanoKernelInfo.VMDispatchCountTblPtr(r1) + rlwinm r8, r3, 2, 20, 29 + cmplwi r7, 0 + beq- @no_count + lwzx r9, r7, r8 + addi r9, r9, 1 + stwx r9, r7, r8 +@no_count + + lwz r7, KDP.PA_NanoKernelCode(r1) + b VMDispatchTableEnd + +VMDispatchMainTable + dcb.l MaxVMCallCount, 0;Local_Panic - (* - VMDispatchMainTable) +VMDispatchAltTable + dcb.l MaxVMCallCount, 0;Local_Panic - (* - VMDispatchAltTable) +VMDispatchTableEnd + + lwz r9, KDP.VMMaxVirtualPages(r1) + cmplwi r3, MaxVMCallCount + cmpwi cr1, r9, 0 + rlwimi r7, r3, 2, 23, 29 + llabel r8, VMDispatchMainTable + + bne- cr1, @noalt + llabel r8, VMDispatchAltTable +@noalt + + lwzx r8, r8, r7 + lwz r9, KDP.UsablePhysicalPages(r1) + add r8, r8, r7 + mtlr r8 + bltlr- + + + + +; UNIMPLEMENTED kcVMDispatch selectors: + +; VMUnInit: 'un-init the MMU virtual space' + + DeclareVMCall 1, VMReturn + + +; VMGetPhysicalAddress: 'return phys address given log page (can be different from above!)' +; ('above' means VMGetPhysicalPage) + + DeclareVMCallWithAlt 11, VMReturnMinus1, VMReturnNotReady + + +; VMReload: 'reload the ATC with specified page' + + DeclareVMCall 13, VMReturn + + +; VMFlushAddressTranslationCache: 'just do it' + + DeclareVMCall 14, VMReturn + + +; VMFlushDataCache: 'wack the data cache' + + DeclareVMCall 15, VMReturn + + +; VMFlushCodeCache: 'wack the code cache' + + DeclareVMCall 16, VMReturn + + + + +; VMReturn + +; VMGetPhysicalAddress_one + +; Xrefs: +; kcVMDispatch +; VMFinalInit +; VMInit +; VMExchangePages +; VMGetPhysicalPage +; getPTEntryGivenPage +; major_0x08d88 +; VMIsInited +; VMIsResident +; VMIsUnmodified +; VMLRU +; VMMakePageCacheable +; VMMakePageWriteThrough +; PageSetCommon +; VMMakePageNonCacheable +; VMMarkBacking +; VMMarkCleanUnused +; VMMarkUndefined +; VMMarkResident +; VMPTest +; setPTEntryGivenPage +; VMShouldClean +; VMAllocateMemory +; VeryPopularFunction +; major_0x09c9c + +VMReturnMinus1 ; OUTSIDE REFERER + li r3, -0x01 + b VMReturn + +VMReturnNotReady ; OUTSIDE REFERER + b VMReturnMinus1 + +VMReturn0 ; OUTSIDE REFERER + li r3, 0x00 + b VMReturn + +VMReturn1 ; OUTSIDE REFERER + li r3, 0x01 + +VMReturn ; OUTSIDE REFERER + mfsprg r8, 0 + lwz r14, 0x0038(r8) + lwz r15, 0x003c(r8) + lwz r16, 0x0040(r8) + lwz r7, -0x0010(r8) + lwz r6, -0x0014(r8) + sync + lwz r8, -0x0b90(r1) + cmpwi cr1, r8, 0x00 + li r8, 0x00 + bne+ cr1, VMReturn_0x4c + mflr r8 + bl panic + +VMReturn_0x4c + stw r8, -0x0b90(r1) + b skeleton_key + + + +; 'last chance to init after new memory dispatch is installed' +; +; Does protecting the kernel mean *wiring* the kernel? + + DeclareVMCall 2, VMFinalInit + +VMFinalInit ; OUTSIDE REFERER + mfsprg r8, 0 + stmw r29, EWA.r29(r8) + + lwz r29, KDP.TopOfFreePages(r1) + lwz r30, KDP.PA_NanoKernelCode(r1) + lwz r31, KDP.OtherFreeThing(r1) + + subf r30, r30, r29 + cmpwi r31, 0 + add r30, r30, r31 ; r30 = TopOfFreePages - PA_NanoKernelCode + OtherFreeThing + + beq- @skip + + li r8, 0 + stw r8, KDP.OtherFreeThing(r1) + + _log 'Protecting the nanokernel: ' + + mr r8, r31 + bl printw + + mr r8, r30 + bl printw + + _log '^n' + + addi r29, r1, 4096 + +@loop + srwi r4, r31, 12 + lwz r9, KDP.UsablePhysicalPages(r1) + bl VeryPopularFunction + bge- cr4, @skip + bltl- cr5, VMDoSomethingWithTLB + bgel- cr5, VMSecondLastExportedFunc + ori r16, r16, 0x400 + rlwimi r9, r29, 0, 0, 19 + bl major_0x09b40 + addi r31, r31, 0x1000 + cmplw r31, r30 + ble+ @loop + +@skip + mfsprg r8, 0 + lmw r29, EWA.r29(r8) + b VMReturn1 + + + +; 'init the MMU virtual space' + + DeclareVMCallWithAlt 0, VMInit, VMReturn1 + +VMInit ; OUTSIDE REFERER + _log 'Legacy VMInit ' + mr r8, r4 + bl printw + mr r8, r5 + bl printw + _log '^n' + lwz r7, KDP.FlatPageListPtr(r1) + lwz r8, 0x06c0(r1) + cmpw r7, r8 + bne+ VMReturn1 + stw r4, 0x06a8(r1) + stw r5, KDP.FlatPageListPtr(r1) + lwz r6, 0x05e8(r1) + li r5, 0x00 + li r4, 0x00 + +VMInit_0x60 + lwz r8, 0x0000(r6) + addi r6, r6, 0x08 + lhz r3, 0x0000(r8) + lhz r7, 0x0002(r8) + lwz r8, 0x0004(r8) + addi r7, r7, 0x01 + cmpwi cr1, r3, 0x00 + andi. r3, r8, 0xc00 + cmpwi r3, 0xc00 + bne- VMInit_0x110 + bnel+ cr1, Local_Panic + rlwinm r15, r8, 22, 0, 29 + addi r3, r1, 0x6c0 + rlwimi r3, r5, 2, 28, 29 + stw r15, 0x0000(r3) + slwi r3, r5, 16 + cmpw r3, r4 + bnel+ Local_Panic + +VMInit_0xa8 + lwz r16, 0x0000(r15) + addi r7, r7, -0x01 + andi. r3, r16, 0x01 + beql+ Local_Panic + andi. r3, r16, 0x800 + beq- VMInit_0x100 + lwz r14, 0x06a4(r1) + rlwinm r3, r16, 23, 9, 28 + lwzux r8, r14, r3 + lwz r9, 0x0004(r14) + andis. r3, r8, 0x8000 + beql+ Local_Panic + andi. r3, r9, 0x03 + cmpwi r3, 0x00 + beql+ Local_Panic + rlwinm r3, r16, 17, 22, 31 + rlwimi r3, r8, 10, 16, 21 + rlwimi r3, r8, 21, 12, 15 + cmpw r3, r4 + bnel+ Local_Panic + bl VMDoSomethingWithTLB + bl major_0x09b40 + +VMInit_0x100 + cmpwi r7, 0x00 + addi r15, r15, 0x04 + addi r4, r4, 0x01 + bne+ VMInit_0xa8 + +VMInit_0x110 + lwz r7, 0x06b4(r1) + addi r5, r5, 0x01 + addi r7, r7, -0x01 + srwi r7, r7, 16 + cmpw r5, r7 + ble+ VMInit_0x60 + lwz r7, 0x06ac(r1) + cmpw r4, r7 + bnel+ Local_Panic + lwz r5, KDP.FlatPageListPtr(r1) + lwz r4, 0x06a8(r1) + andi. r7, r5, 0xfff + li r3, 0x02 + bne- VMInit_0x374 + lwz r7, 0x06b4(r1) + cmplw r7, r4 + li r3, 0x03 + blt- VMInit_0x374 + addi r7, r4, 0x3ff + srwi r6, r7, 10 + srwi r8, r5, 12 + add r8, r8, r6 + lwz r9, 0x06ac(r1) + cmplw r8, r9 + li r3, 0x04 + bgt- VMInit_0x374 + cmplw r4, r9 + li r3, 0x05 + blt- VMInit_0x374 + srwi r7, r5, 12 + bl major_0x09c9c + stw r9, KDP.FlatPageListPtr(r1) + mr r15, r9 + srwi r7, r5, 12 + add r7, r7, r6 + addi r7, r7, -0x01 + bl major_0x09c9c + subf r9, r15, r9 + srwi r9, r9, 12 + addi r9, r9, 0x01 + cmpw r9, r6 + li r3, 0x06 + bne- VMInit_0x374 + stw r4, 0x06a8(r1) + lwz r8, -0x0020(r1) + slwi r7, r4, 12 + stw r7, 0x0dc8(r8) + slwi r7, r4, 2 + li r8, 0x00 + +VMInit_0x1d4 + subi r7, r7, 4 + cmpwi r7, 0x00 + stwx r8, r15, r7 + bne+ VMInit_0x1d4 + lwz r7, 0x06ac(r1) + slwi r6, r7, 2 + +VMInit_0x1ec + subi r6, r6, 4 + srwi r7, r6, 2 + bl major_0x09c9c + cmpwi r6, 0x00 + ori r16, r9, 0x21 + stwx r16, r15, r6 + bne+ VMInit_0x1ec + lwz r15, KDP.FlatPageListPtr(r1) + srwi r7, r5, 10 + add r15, r15, r7 + lwz r5, 0x06a8(r1) + +VMInit_0x218 + lwz r16, 0x0000(r15) + andi. r7, r16, 0x01 + beql+ Local_Panic + ori r16, r16, 0x404 + stw r16, 0x0000(r15) + addi r5, r5, -0x400 + cmpwi r5, 0x00 + addi r15, r15, 0x04 + bgt+ VMInit_0x218 + lwz r9, 0x06b4(r1) + lwz r6, 0x05e8(r1) + addi r9, r9, -0x01 + li r8, 0xa00 + ori r7, r8, 0xffff + +VMInit_0x250 + cmplwi r9, 0xffff + lwz r3, 0x0000(r6) + addi r6, r6, 0x08 + stw r7, 0x0000(r3) + stw r8, 0x0004(r3) + stw r7, 0x0008(r3) + stw r8, 0x000c(r3) + addis r9, r9, -0x01 + bgt+ VMInit_0x250 + sth r9, 0x0002(r3) + sth r9, 0x000a(r3) + lwz r6, 0x05e8(r1) + lwz r9, 0x06a8(r1) + lwz r15, KDP.FlatPageListPtr(r1) + +VMInit_0x288 + lwz r8, 0x0000(r6) + lis r7, 0x01 + rlwinm. r3, r9, 16, 16, 31 + bne- VMInit_0x29c + mr r7, r9 + +VMInit_0x29c + subf. r9, r7, r9 + addi r7, r7, -0x01 + stw r7, 0x0000(r8) + rlwinm r7, r15, 10, 22, 19 + ori r7, r7, 0xc00 + stw r7, 0x0004(r8) + addis r15, r15, 0x04 + addi r6, r6, 0x08 + bne+ VMInit_0x288 + mfsprg r9, 0 + lwz r6, -0x0014(r9) + +; r6 = ewa + bl Save_r14_r31 +; r8 = sprg0 (not used by me) + + lwz r8, -0x001c(r9) + li r9, 0x00 + bl FindAreaAbove + lwz r16, 0x0024(r8) + cmpwi r16, 0x00 + bne+ Local_Panic + li r16, 0x00 + stw r16, 0x003c(r8) + lwz r16, KDP.FlatPageListPtr(r1) + stw r16, 0x0040(r8) + lwz r16, 0x06a8(r1) + slwi r16, r16, 12 + stw r16, 0x002c(r8) + addi r16, r16, -0x01 + stw r16, 0x0028(r8) + mr r17, r8 + _log 'Adjusting area ' + lwz r8, 0x0000(r17) + mr r8, r8 + bl printw + _log 'to size ' + lwz r8, 0x002c(r17) + mr r8, r8 + bl printw + _log '^n' + +; r6 = ewa + bl Restore_r14_r31 + b VMReturn0 + +VMInit_0x374 + lwz r7, 0x06ac(r1) + lwz r8, 0x06c0(r1) + stw r7, 0x06a8(r1) + stw r8, KDP.FlatPageListPtr(r1) + b VMReturn + + + +; 'exchange physical page contents' + + DeclareVMCallWithAlt 12, VMExchangePages, VMReturnNotReady + +VMExchangePages ; OUTSIDE REFERER + bl VeryPopularFunction + bge+ cr4, VMReturnMinus1 + bgt+ cr5, VMReturnMinus1 + bns+ cr7, VMReturnMinus1 + bgt+ cr6, VMReturnMinus1 + bne+ cr6, VMReturnMinus1 + bltl- cr5, VMDoSomethingWithTLB + bltl- cr5, major_0x09b40 + mr r6, r15 + mr r4, r5 + mr r5, r16 + lwz r9, 0x06a8(r1) + bl VeryPopularFunction + bge+ cr4, VMReturnMinus1 + bgt+ cr5, VMReturnMinus1 + bns+ cr7, VMReturnMinus1 + bgt+ cr6, VMReturnMinus1 + bne+ cr6, VMReturnMinus1 + bltl- cr5, VMDoSomethingWithTLB + bltl- cr5, major_0x09b40 + stw r5, 0x0000(r15) + stw r16, 0x0000(r6) + rlwinm r4, r5, 0, 0, 19 + rlwinm r5, r16, 0, 0, 19 + li r9, 0x1000 + li r6, 0x04 + +VMExchangePages_0x68 + subf. r9, r6, r9 + lwzx r7, r4, r9 + lwzx r8, r5, r9 + stwx r7, r5, r9 + stwx r8, r4, r9 + bne+ VMExchangePages_0x68 + b VMReturn + + + +; 'return phys page given log page' + + DeclareVMCall 10, VMGetPhysicalPage + +VMGetPhysicalPage ; OUTSIDE REFERER + bne- cr1, VMGetPhysicalPage_0x30 + mfsprg r9, 0 + lwz r6, -0x0014(r9) + +; r6 = ewa + bl Save_r14_r31 +; r8 = sprg0 (not used by me) + + slwi r29, r4, 12 + bl major_0x08d88 + blt- VMGetPhysicalPage_0x28 + bns- cr7, major_0x08d88_0xa8 + srwi r3, r17, 12 + b major_0x08d88_0xb0 + +VMGetPhysicalPage_0x28 +; r6 = ewa + bl Restore_r14_r31 + lwz r9, 0x06a8(r1) + +VMGetPhysicalPage_0x30 + bl VeryPopularFunction + bns+ cr7, VMReturnMinus1 + srwi r3, r9, 12 + b VMReturn + + + +; 'given a page, get its 68K PTE' + + DeclareVMCall 19, getPTEntryGivenPage + +getPTEntryGivenPage ; OUTSIDE REFERER + bne- cr1, getPTEntryGivenPage_0x50 + mfsprg r9, 0 + lwz r6, -0x0014(r9) + +; r6 = ewa + bl Save_r14_r31 +; r8 = sprg0 (not used by me) + + slwi r29, r4, 12 + bl major_0x08d88 + blt- getPTEntryGivenPage_0x48 + lwz r3, 0x0000(r30) + beq- getPTEntryGivenPage_0x3c + bns- cr7, getPTEntryGivenPage_0x3c + bge- cr5, getPTEntryGivenPage_0x3c + bl MPCall_95_0x2e0 + bl MPCall_95_0x334 + lwz r3, 0x0000(r30) + rlwimi r3, r17, 0, 0, 19 + +getPTEntryGivenPage_0x3c + li r16, 0x882 + andc r3, r3, r16 + b major_0x08d88_0xb0 + +getPTEntryGivenPage_0x48 +; r6 = ewa + bl Restore_r14_r31 + lwz r9, 0x06a8(r1) + +getPTEntryGivenPage_0x50 + bl VeryPopularFunction + mr r3, r16 + bns- cr7, getPTEntryGivenPage_0x74 + rlwimi r3, r9, 0, 0, 19 + bge- cr5, getPTEntryGivenPage_0x74 + bl VMDoSomethingWithTLB + bl VMDoSomeIO_0x4 + mr r3, r16 + rlwimi r3, r9, 0, 0, 19 + +getPTEntryGivenPage_0x74 + li r8, 0x882 + andc r3, r3, r8 + b VMReturn + + + +; major_0x08d88 + +; Xrefs: +; VMGetPhysicalPage +; getPTEntryGivenPage +; VMIsResident +; VMMarkBacking +; VMMarkResident +; setPTEntryGivenPage + +major_0x08d88 ; OUTSIDE REFERER + mfsprg r28, 0 + mflr r27 + mr r9, r29 + lwz r8, -0x001c(r28) + bl FindAreaAbove + mr r31, r8 + lwz r16, 0x0024(r31) + lwz r17, 0x0028(r31) + lwz r18, 0x0020(r31) + cmplw r29, r16 + cmplw cr1, r29, r17 + blt- major_0x08d88_0x74 + bgt- cr1, major_0x08d88_0x74 + rlwinm. r8, r18, 0, 16, 16 + lwz r19, 0x0070(r31) + beq- major_0x08d88_0x8c + lwz r17, 0x0038(r31) + rlwinm r19, r19, 0, 0, 19 + cmpwi r17, 0x00 + subf r18, r16, r29 + beq- major_0x08d88_0x74 + mtlr r27 + crclr cr0_lt + crset cr0_eq + add r17, r18, r19 + addi r30, r31, 0x74 + crset cr7_so + rlwimi r18, r17, 0, 0, 19 + blr + +major_0x08d88_0x74 + mtlr r27 + srwi r8, r29, 28 + cmpwi r8, 0x07 + beq- major_0x08d88_0xa8 + crset cr0_lt + blr + +major_0x08d88_0x8c + mr r8, r29 + bl MPCall_95_0x1e4 + bl MPCall_95_0x2b0 + mtlr r27 + crclr cr0_lt + crclr cr0_eq + blr + +major_0x08d88_0xa8 ; OUTSIDE REFERER +; r6 = ewa + bl Restore_r14_r31 + b VMReturnMinus1 + +major_0x08d88_0xb0 ; OUTSIDE REFERER +; r6 = ewa + bl Restore_r14_r31 + b VMReturn + + + +; 'ask about page status' (typo?) + + DeclareVMCallWithAlt 5, VMIsInited, VMReturnNotReady + +VMIsInited ; OUTSIDE REFERER + bl VeryPopularFunction + bso+ cr7, VMReturn1 + rlwinm r3, r16, 16, 31, 31 + b VMReturn + + + +; 'ask about page status' (typo?) + + DeclareVMCall 3, VMIsResident + +VMIsResident ; OUTSIDE REFERER + bne- cr1, VMIsResident_0x30 + mfsprg r9, 0 + lwz r6, -0x0014(r9) + +; r6 = ewa + bl Save_r14_r31 +; r8 = sprg0 (not used by me) + + slwi r29, r4, 12 + bl major_0x08d88 + blt- VMIsResident_0x28 + lwz r16, 0x0000(r30) + srwi r3, r16, 31 + b major_0x08d88_0xb0 + +VMIsResident_0x28 +; r6 = ewa + bl Restore_r14_r31 + lwz r9, 0x06a8(r1) + +VMIsResident_0x30 + bl VeryPopularFunction + clrlwi r3, r16, 0x1f + b VMReturn + + + +; 'ask about page status' (typo?) + + DeclareVMCallWithAlt 4, VMIsUnmodified, VMReturnNotReady + +VMIsUnmodified ; OUTSIDE REFERER + bl VeryPopularFunction + rlwinm r3, r16, 28, 31, 31 + xori r3, r3, 0x01 + bge+ cr5, VMReturn + bl VMDoSomethingWithTLB + bl VMDoSomeIO_0x4 + rlwinm r3, r16, 28, 31, 31 + xori r3, r3, 0x01 + b VMReturn + + + +; Cube-E has no comment + + DeclareVMCallWithAlt 22, VMLRU, VMReturnNotReady + +VMLRU ; OUTSIDE REFERER + rlwinm. r9, r9, 2, 0, 29 + lwz r15, KDP.FlatPageListPtr(r1) + lwz r14, 0x06a4(r1) + add r15, r15, r9 + srwi r4, r9, 2 + li r5, 0x100 + li r6, 0x08 + +VMLRU_0x1c + lwzu r16, -0x0004(r15) + addi r4, r4, -0x01 + mtcrf 0x07, r16 + cmpwi r4, 0x00 + rlwinm r7, r16, 23, 9, 28 + bns- cr7, VMLRU_0x5c + bge- cr5, VMLRU_0x50 + add r14, r14, r7 + lwz r8, 0x0000(r14) + bl VMDoSomethingWithTLB + andc r9, r9, r5 + bl major_0x09b40 + subf r14, r7, r14 + +VMLRU_0x50 + rlwimi r16, r16, 6, 22, 22 + andc r16, r16, r6 + stw r16, 0x0000(r15) + +VMLRU_0x5c + bne+ VMLRU_0x1c + b VMReturn + + + +; major_0x08f14 + +; Xrefs: +; VMMakePageCacheable +; VMMakePageWriteThrough +; VMMakePageNonCacheable + +major_0x08f14 ; OUTSIDE REFERER + mflr r28 + mr r29, r8 + mr r30, r9 + mfsprg r18, 0 + slwi r9, r4, 12 + lwz r8, -0x001c(r18) + bl FindAreaAbove + lwz r17, 0x0020(r8) + lwz r16, 0x0024(r8) + rlwinm. r18, r17, 0, 16, 16 + cmplw cr1, r16, r9 + beq+ Local_Panic + bgt+ cr1, Local_Panic + li r16, -0x01 + mtlr r28 + stw r16, 0x0038(r8) + mr r8, r29 + mr r9, r30 + blr + + + +; 'make it so' + + DeclareVMCall 17, VMMakePageCacheable + +VMMakePageCacheable ; OUTSIDE REFERER + bne- cr1, VMMakePageCacheable_0x4 + +VMMakePageCacheable_0x4 + bl VeryPopularFunction + rlwinm r7, r16, 0, 25, 26 + cmpwi r7, 0x20 + bns+ cr7, VMReturnMinus1 + beq+ VMReturn + bge- cr4, VMMakePageCacheable_0x40 + bltl- cr5, VMDoSomethingWithTLB + bgel- cr5, VMSecondLastExportedFunc + rlwinm r16, r16, 0, 27, 24 + rlwinm r9, r9, 0, 27, 24 + lwz r7, 0x0688(r1) + rlwimi r9, r7, 0, 27, 28 + ori r16, r16, 0x20 + bl VMDoSomeIO + b VMReturn + +VMMakePageCacheable_0x40 + rlwinm r7, r4, 16, 28, 31 + cmpwi r7, 0x08 + blt+ VMReturnMinus1 + ble+ cr6, VMReturnMinus1 + _log 'VMMakePageCacheable for I/O ' + mr r8, r4 + bl printw + _log '^n' + mfsprg r6, 0 + lwz r6, -0x0014(r6) + +; r6 = ewa + bl Save_r14_r31 +; r8 = sprg0 (not used by me) + + bl major_0x08f14 + +; r6 = ewa + bl Restore_r14_r31 + lwz r5, 0x000c(r15) + andi. r6, r5, 0xe01 + cmpwi r6, 0xa01 + beq- VMMakePageCacheable_0xec + addi r15, r15, -0x08 + lwz r5, 0x0004(r15) + lhz r6, 0x0000(r15) + andi. r5, r5, 0xc00 + lhz r5, 0x0002(r15) + bne+ VMReturnMinus1 + addi r5, r5, 0x01 + add r6, r6, r5 + xor r6, r6, r4 + andi. r6, r6, 0xffff + bne+ VMReturnMinus1 + sth r5, 0x0002(r15) + b PageSetCommon + +VMMakePageCacheable_0xec + lwz r5, 0x0000(r15) + lwz r6, 0x0004(r15) + stw r5, 0x0008(r15) + stw r6, 0x000c(r15) + slwi r5, r4, 16 + stw r5, 0x0000(r15) + slwi r5, r4, 12 + ori r5, r5, 0x12 + stw r5, 0x0004(r15) + b PageSetCommon + + + +; Cube-E has no comment + + DeclareVMCall 24, VMMakePageWriteThrough + +VMMakePageWriteThrough ; OUTSIDE REFERER + bne- cr1, VMMakePageWriteThrough_0x4 + +VMMakePageWriteThrough_0x4 + bl VeryPopularFunction + rlwinm. r7, r16, 0, 25, 26 + bns+ cr7, VMReturnMinus1 + beq+ VMReturn + bge- cr4, VMMakePageWriteThrough_0x3c + bltl- cr5, VMDoSomethingWithTLB + bgel- cr5, VMSecondLastExportedFunc + rlwinm r16, r16, 0, 27, 24 + rlwinm r9, r9, 0, 27, 24 + lwz r7, 0x0688(r1) + rlwimi r9, r7, 0, 27, 28 + ori r9, r9, 0x40 + bl VMDoSomeIO + b VMMakePageNonCacheable_0x3c + +VMMakePageWriteThrough_0x3c + rlwinm r7, r4, 16, 28, 31 + cmpwi r7, 0x08 + blt+ VMReturnMinus1 + ble+ cr6, VMReturnMinus1 + _log 'VMMakePageWriteThrough for I/O ' + mr r8, r4 + bl printw + _log '^n' + mfsprg r6, 0 + lwz r6, -0x0014(r6) + +; r6 = ewa + bl Save_r14_r31 +; r8 = sprg0 (not used by me) + + bl major_0x08f14 + +; r6 = ewa + bl Restore_r14_r31 + lwz r5, 0x000c(r15) + andi. r6, r5, 0xe01 + cmpwi r6, 0xa01 + beq- VMMakePageWriteThrough_0xec + addi r15, r15, -0x08 + lwz r5, 0x0004(r15) + lhz r6, 0x0000(r15) + andi. r5, r5, 0xc00 + lhz r5, 0x0002(r15) + bne+ VMReturnMinus1 + addi r5, r5, 0x01 + add r6, r6, r5 + xor r6, r6, r4 + andi. r6, r6, 0xffff + bne+ VMReturnMinus1 + sth r5, 0x0002(r15) + b PageSetCommon + +VMMakePageWriteThrough_0xec + lwz r5, 0x0000(r15) + lwz r6, 0x0004(r15) + stw r5, 0x0008(r15) + stw r6, 0x000c(r15) + slwi r5, r4, 16 + stw r5, 0x0000(r15) + slwi r5, r4, 12 + ori r5, r5, 0x52 + stw r5, 0x0004(r15) + + + +; PageSetCommon + +; Xrefs: +; VMMakePageCacheable +; VMMakePageWriteThrough +; VMMakePageNonCacheable + +PageSetCommon ; OUTSIDE REFERER + lwz r15, 0x06a0(r1) + lwz r14, 0x06a4(r1) + slwi r6, r4, 12 + mfsrin r6, r6 + rlwinm r8, r6, 7, 0, 20 + xor r6, r6, r4 + slwi r7, r6, 6 + and r15, r15, r7 + rlwimi r8, r4, 22, 26, 31 + crset cr0_eq + oris r8, r8, 0x8000 + +PageSetCommon_0x2c + lwzux r7, r14, r15 + lwz r15, 0x0008(r14) + lwz r6, 0x0010(r14) + lwz r5, 0x0018(r14) + cmplw cr1, r7, r8 + cmplw cr2, r15, r8 + cmplw cr3, r6, r8 + cmplw cr4, r5, r8 + beq- cr1, PageSetCommon_0xc8 + beq- cr2, PageSetCommon_0xc4 + beq- cr3, PageSetCommon_0xc0 + beq- cr4, PageSetCommon_0xbc + lwzu r7, 0x0020(r14) + lwz r15, 0x0008(r14) + lwz r6, 0x0010(r14) + lwz r5, 0x0018(r14) + cmplw cr1, r7, r8 + cmplw cr2, r15, r8 + cmplw cr3, r6, r8 + cmplw cr4, r5, r8 + beq- cr1, PageSetCommon_0xc8 + beq- cr2, PageSetCommon_0xc4 + beq- cr3, PageSetCommon_0xc0 + beq- cr4, PageSetCommon_0xbc + crnot 2, 2 + lwz r15, 0x06a0(r1) + lwz r14, 0x06a4(r1) + slwi r6, r4, 12 + mfsrin r6, r6 + xor r6, r6, r4 + not r6, r6 + slwi r7, r6, 6 + and r15, r15, r7 + xori r8, r8, 0x40 + bne+ PageSetCommon_0x2c + b VMReturn + +PageSetCommon_0xbc + addi r14, r14, 0x08 + +PageSetCommon_0xc0 + addi r14, r14, 0x08 + +PageSetCommon_0xc4 + addi r14, r14, 0x08 + +PageSetCommon_0xc8 + bl VMDoSomethingWithTLB + li r8, 0x00 + li r9, 0x00 + bl VMDoSomeIO_0x4 + b VMReturn + + + +; 'make it so' + + DeclareVMCall 18, VMMakePageNonCacheable + +VMMakePageNonCacheable ; OUTSIDE REFERER + bne- cr1, VMMakePageNonCacheable_0x4 + +VMMakePageNonCacheable_0x4 + bl VeryPopularFunction + rlwinm r7, r16, 0, 25, 26 + cmpwi r7, 0x60 + bns+ cr7, VMReturnMinus1 + beq+ VMReturn + bge- cr4, VMMakePageNonCacheable_0x78 + bltl- cr5, VMDoSomethingWithTLB + bgel- cr5, VMSecondLastExportedFunc + rlwinm r9, r9, 0, 27, 24 + lwz r7, 0x0688(r1) + rlwimi r9, r7, 0, 27, 28 + ori r16, r16, 0x60 + ori r9, r9, 0x20 + bl VMDoSomeIO + +VMMakePageNonCacheable_0x3c ; OUTSIDE REFERER + rlwinm r4, r9, 0, 0, 19 + lhz r8, 0x0f4a(r1) + add r5, r4, r8 + li r7, 0x1000 + slwi r8, r8, 1 + +VMMakePageNonCacheable_0x50 + subf. r7, r8, r7 + dcbf r7, r4 + dcbf r7, r5 + sync + icbi r7, r4 + icbi r7, r5 + bne+ VMMakePageNonCacheable_0x50 + sync + isync + b VMReturn + +VMMakePageNonCacheable_0x78 + rlwinm r7, r4, 16, 28, 31 + cmpwi r7, 0x08 + blt+ VMReturnMinus1 + bgt+ cr6, VMReturnMinus1 + _log 'VMMakePageNonCacheable for I/O ' + mr r8, r4 + bl printw + _log '^n' + mfsprg r6, 0 + lwz r6, -0x0014(r6) + +; r6 = ewa + bl Save_r14_r31 +; r8 = sprg0 (not used by me) + + bl major_0x08f14 + +; r6 = ewa + bl Restore_r14_r31 + lwz r5, 0x0004(r15) + srwi r6, r5, 12 + cmpw r6, r4 + bne+ VMReturnMinus1 + lis r7, 0x00 + lis r8, 0x00 + lis r9, 0x00 + srwi r6, r5, 12 + lhz r8, 0x0002(r15) + lhz r7, 0x0000(r15) + addi r6, r6, 0x01 + cmpwi r8, 0x00 + beq- VMMakePageNonCacheable_0x134 + addi r7, r7, 0x01 + addi r8, r8, -0x01 + rlwimi r5, r6, 12, 0, 19 + sth r7, 0x0000(r15) + sth r8, 0x0002(r15) + stw r5, 0x0004(r15) + b PageSetCommon + +VMMakePageNonCacheable_0x134 + lis r6, 0x00 + lwz r7, 0x0008(r15) + lwz r8, 0x000c(r15) + lis r5, 0x00 + ori r6, r6, 0xa01 + stw r7, 0x0000(r15) + stw r8, 0x0004(r15) + stw r5, 0x0008(r15) + stw r6, 0x000c(r15) + dcbf 0, r15 + b PageSetCommon + + + +; 'set page status' + + DeclareVMCall 8, VMMarkBacking + +VMMarkBacking ; OUTSIDE REFERER + bne- cr1, VMMarkBacking_0x58 + mfsprg r9, 0 + lwz r6, -0x0014(r9) + +; r6 = ewa + bl Save_r14_r31 +; r8 = sprg0 (not used by me) + + slwi r29, r4, 12 + bl major_0x08d88 + blt- VMMarkBacking_0x50 + beq+ major_0x08d88_0xa8 + bns- cr7, VMMarkBacking_0x30 + bge- cr5, VMMarkBacking_0x30 + bl MPCall_95_0x2e0 + bl MPCall_95_0x348 + +VMMarkBacking_0x30 + lwz r18, 0x0000(r30) + rlwinm r18, r18, 0, 0, 30 + stw r18, 0x0000(r30) + lwz r18, 0x0068(r31) + lwz r17, 0x0038(r31) + subf r17, r18, r17 + stw r17, 0x0038(r31) + b major_0x08d88_0xb0 + +VMMarkBacking_0x50 +; r6 = ewa + bl Restore_r14_r31 + lwz r9, 0x06a8(r1) + +VMMarkBacking_0x58 + bl VeryPopularFunction + bge+ cr4, VMReturnMinus1 + bgt+ cr5, VMReturnMinus1 + bltl- cr5, VMDoSomethingWithTLB + bltl- cr5, major_0x09b40 + rlwimi r16, r5, 16, 15, 15 + li r7, 0x01 + andc r16, r16, r7 + stw r16, 0x0000(r15) + b VMReturn + + + +; 'ask about page status' (typo?) + + DeclareVMCallWithAlt 9, VMMarkCleanUnused, VMReturnNotReady + +VMMarkCleanUnused ; OUTSIDE REFERER + bl VeryPopularFunction + bge+ cr4, VMReturnMinus1 + bns+ cr7, VMReturnMinus1 + bltl- cr5, VMDoSomethingWithTLB + beq- cr2, VMMarkCleanUnused_0x2c + bgel- cr5, VMSecondLastExportedFunc + li r7, 0x180 + andc r9, r9, r7 + ori r16, r16, 0x100 + bl VMDoSomeIO + b VMReturn + +VMMarkCleanUnused_0x2c + bgel- cr5, VMSecondLastExportedFunc + ori r16, r16, 0x100 + li r7, 0x18 + andc r16, r16, r7 + bl major_0x09b40 + b VMReturn + + + +; Cube-E has no comment + + DeclareVMCallWithAlt 23, VMMarkUndefined, VMReturnNotReady + +VMMarkUndefined ; OUTSIDE REFERER + cmplw r4, r9 + cmplw cr1, r5, r9 + add r7, r4, r5 + cmplw cr2, r7, r9 + bge+ VMReturnMinus1 + bgt+ cr1, VMReturnMinus1 + bgt+ cr2, VMReturnMinus1 + lwz r15, KDP.FlatPageListPtr(r1) + slwi r8, r7, 2 + li r7, 0x01 + +VMMarkUndefined_0x28 + subi r8, r8, 4 + subf. r5, r7, r5 + lwzx r16, r15, r8 + blt+ VMReturn + rlwimi r16, r6, 7, 24, 24 + stwx r16, r15, r8 + b VMMarkUndefined_0x28 + + + +; 'set page status' + + DeclareVMCall 7, VMMarkResident + +VMMarkResident ; OUTSIDE REFERER + bne- cr1, VMMarkResident_0x58 + mfsprg r9, 0 + lwz r6, -0x0014(r9) + +; r6 = ewa + bl Save_r14_r31 +; r8 = sprg0 (not used by me) + + slwi r29, r4, 12 + slwi r26, r5, 12 + bl major_0x08d88 + blt- VMMarkResident_0x50 + beq+ major_0x08d88_0xa8 + bso+ cr7, major_0x08d88_0xa8 + bltl+ cr5, Local_Panic + lwz r16, 0x0000(r30) + rlwimi r16, r5, 12, 0, 19 + ori r16, r16, 0x01 + stw r16, 0x0000(r30) + lwz r18, 0x0068(r31) + lwz r17, 0x0038(r31) + add r17, r17, r18 + stw r17, 0x0038(r31) + b major_0x08d88_0xb0 + +VMMarkResident_0x50 +; r6 = ewa + bl Restore_r14_r31 + lwz r9, 0x06a8(r1) + +VMMarkResident_0x58 + bl VeryPopularFunction + bge+ cr4, VMReturnMinus1 + bso+ cr7, VMReturnMinus1 + bltl+ cr5, Local_Panic + rlwimi r16, r5, 12, 0, 19 + ori r16, r16, 0x01 + stw r16, 0x0000(r15) + bl VMSecondLastExportedFunc + bl VMDoSomeIO + b VMReturn + + + +; 'ask why we got this page fault' + + DeclareVMCallWithAlt 21, VMPTest, VMReturnNotReady + +VMPTest ; OUTSIDE REFERER + srwi r4, r4, 12 + cmplw r4, r9 + li r3, 0x4000 + bge+ VMReturn + bl VeryPopularFunction + li r3, 0x400 + bns+ cr7, VMReturn + li r3, 0x00 + ori r3, r3, 0x8000 + ble+ cr7, VMReturn + cmpwi r6, 0x00 + beq+ VMReturn + li r3, 0x800 + b VMReturn + + + +; 'given a page & 68K pte, set the real PTE' + + DeclareVMCall 20, setPTEntryGivenPage + +setPTEntryGivenPage ; OUTSIDE REFERER + bne- cr1, setPTEntryGivenPage_0x64 + mfsprg r9, 0 + lwz r6, -0x0014(r9) + +; r6 = ewa + bl Save_r14_r31 +; r8 = sprg0 (not used by me) + + mr r26, r4 + slwi r29, r5, 12 + bl major_0x08d88 + blt- setPTEntryGivenPage_0x5c + beq+ major_0x08d88_0xa8 + bns- cr7, setPTEntryGivenPage_0x34 + bge- cr5, setPTEntryGivenPage_0x34 + bl MPCall_95_0x2e0 + bl MPCall_95_0x348 + +setPTEntryGivenPage_0x34 + lwz r18, 0x0000(r30) + xor r8, r18, r26 + li r3, 0x461 + rlwimi r3, r18, 24, 29, 29 + and. r3, r3, r8 + bne+ major_0x08d88_0xa8 + andi. r8, r8, 0x11c + xor r18, r18, r8 + stw r18, 0x0000(r30) + b major_0x08d88_0xb0 + +setPTEntryGivenPage_0x5c +; r6 = ewa + bl Restore_r14_r31 + lwz r9, 0x06a8(r1) + +setPTEntryGivenPage_0x64 + mr r6, r4 + mr r4, r5 + bl VeryPopularFunction + bge+ cr4, VMReturnMinus1 + xor r7, r16, r6 + li r3, 0x461 + rlwimi r3, r16, 24, 29, 29 + and. r3, r3, r7 + bne+ VMReturnMinus1 + andi. r7, r7, 0x11c + xor r16, r16, r7 + stw r16, 0x0000(r15) + bge+ cr5, VMReturn + bl VMDoSomethingWithTLB + lwz r16, 0x0000(r15) + bne- cr2, setPTEntryGivenPage_0xb4 + andi. r7, r16, 0x08 + bne- setPTEntryGivenPage_0xb4 + bl major_0x09b40 + b VMReturn + +setPTEntryGivenPage_0xb4 + rlwimi r9, r16, 5, 23, 23 + rlwimi r9, r16, 3, 24, 24 + rlwimi r9, r16, 30, 31, 31 + bl VMDoSomeIO_0x4 + b VMReturn + + + +; 'ask about page status' (typo?) + + DeclareVMCallWithAlt 6, VMShouldClean, VMReturnNotReady + +VMShouldClean ; OUTSIDE REFERER + bl VeryPopularFunction + bns+ cr7, VMReturn0 + bge+ cr4, VMReturnMinus1 + bltl- cr5, VMDoSomethingWithTLB + blt- cr7, VMShouldClean_0x34 + bns- cr6, VMShouldClean_0x34 + xori r16, r16, 0x10 + ori r16, r16, 0x100 + stw r16, 0x0000(r15) + bge+ cr5, VMReturn1 + xori r9, r9, 0x80 + bl VMDoSomeIO_0x4 + b VMReturn1 + +VMShouldClean_0x34 + bltl- cr5, VMDoSomeIO_0x4 + b VMReturn0 + + + +; Cube-E has no comment + + DeclareVMCallWithAlt 25, VMAllocateMemory, VMReturnNotReady + +VMAllocateMemory ; OUTSIDE REFERER + lwz r7, KDP.FlatPageListPtr(r1) + lwz r8, 0x06c0(r1) + cmpwi cr6, r5, 0x00 + cmpw cr7, r7, r8 + or r7, r4, r6 + rlwinm. r7, r7, 0, 0, 11 + ble+ cr6, VMReturnMinus1 + lwz r9, 0x06a8(r1) + bne+ cr7, VMReturnMinus1 + mr r7, r4 + bne+ VMReturnMinus1 + mr r4, r9 + slwi r6, r6, 12 + lwz r9, -0x0408(r1) + crclr cr3_eq + cmpwi cr6, r6, 0x00 + cmplw cr7, r9, r5 + bne- cr6, VMAllocateMemory_0x6c + blt- cr7, VMAllocateMemory_0x6c + lwz r9, -0x040c(r1) + subf r4, r5, r9 + slwi r4, r4, 2 + lwz r15, KDP.FlatPageListPtr(r1) + add r15, r15, r4 + srwi r4, r4, 2 + crset cr3_eq + b VMAllocateMemory_0xc0 + +VMAllocateMemory_0x6c + lwz r9, 0x06a8(r1) + addi r5, r5, -0x01 + +VMAllocateMemory_0x74 + addi r4, r4, -0x01 + bl VeryPopularFunction + bltl- cr5, VMDoSomethingWithTLB + bltl- cr5, major_0x09b40 + lwz r9, 0x06a8(r1) + subf r8, r4, r9 + cmplw cr7, r5, r8 + and. r8, r16, r6 + bge+ cr7, VMAllocateMemory_0x74 + bne+ VMAllocateMemory_0x74 + cmpwi cr6, r6, 0x00 + beq- cr6, VMAllocateMemory_0xc0 + slwi r8, r5, 2 + lwzx r8, r15, r8 + slwi r14, r5, 12 + add r14, r14, r16 + xor r8, r8, r14 + rlwinm. r8, r8, 0, 0, 19 + bne+ VMAllocateMemory_0x74 + +VMAllocateMemory_0xc0 + slwi r4, r7, 12 + lwz r9, 0x06b4(r1) + cmplw cr7, r7, r9 + rlwinm. r9, r7, 0, 0, 11 + blt+ cr7, VMReturnMinus1 + bne+ VMReturnMinus1 + lwz r14, 0x05e8(r1) + rlwinm r9, r7, 19, 25, 28 + lwzx r14, r14, r9 + clrlwi r9, r7, 0x10 + lhz r8, 0x0000(r14) + b VMAllocateMemory_0xf4 + +VMAllocateMemory_0xf0 + lhzu r8, 0x0008(r14) + +VMAllocateMemory_0xf4 + lhz r16, 0x0002(r14) + subf r8, r8, r9 + cmplw cr7, r8, r16 + bgt+ cr7, VMAllocateMemory_0xf0 + add r8, r8, r5 + cmplw cr7, r8, r16 + bgt+ cr7, VMReturnMinus1 + lwz r16, 0x0004(r14) + slwi r8, r7, 16 + andi. r16, r16, 0xe01 + cmpwi r16, 0xa01 + or r8, r8, r5 + addi r5, r5, 0x01 + bne+ VMReturnMinus1 + stw r8, 0x0000(r14) + bnel- cr6, VMAllocateMemory_0x2e8 + mr r7, r15 + rotlwi r15, r15, 0x0a + ori r15, r15, 0xc00 + stw r15, 0x0004(r14) + bne- cr3, VMAllocateMemory_0x164 + lwz r8, -0x0408(r1) + subf r8, r5, r8 + stw r8, -0x0408(r1) + lwz r8, -0x040c(r1) + subf r8, r5, r8 + stw r8, -0x040c(r1) + b VMAllocateMemory_0x1a4 + +VMAllocateMemory_0x164 + lwz r7, 0x06ac(r1) + subf r7, r5, r7 + stw r7, 0x06ac(r1) + stw r7, 0x06a8(r1) + lwz r5, -0x0020(r1) + slwi r8, r7, 12 + stw r8, 0x0dc4(r5) + stw r8, 0x0dc8(r5) + mr r5, r14 + lwz r7, 0x06b4(r1) + li r8, 0xa00 + bl VMAllocateMemory_0x33c + lwz r7, 0x06ac(r1) + li r8, 0xc00 + bl VMAllocateMemory_0x33c + mr r14, r5 + +VMAllocateMemory_0x1a4 + mfsprg r6, 0 + lwz r6, -0x0014(r6) + +; r6 = ewa + bl Save_r14_r31 +; r8 = sprg0 (not used by me) + + mr r30, r14 + _log ' VMAllocateMemory - creating area' + li r8, 160 + +; r1 = kdp +; r8 = size + bl PoolAlloc +; r8 = ptr + + mr. r31, r8 + beq+ Local_Panic + lwz r17, 0x0004(r30) + lhz r16, 0x0002(r30) + lis r8, 0x6172 + ori r8, r8, 0x6561 + stw r8, 0x0004(r31) + addi r16, r16, 0x01 + mr r15, r4 + slwi r16, r16, 12 + lwz r8, -0x041c(r1) + lwz r8, 0x0014(r8) + stw r8, 0x006c(r31) + stw r15, 0x0024(r31) + stw r16, 0x002c(r31) + stw r16, 0x0038(r31) + li r8, 0x00 + stw r8, 0x0030(r31) + _log ' at 0x' + mr r8, r15 + bl printw + mr r8, r16 + bl printw + _log '^n' + li r8, 0x07 + stw r8, 0x001c(r31) + lis r8, 0x00 + ori r8, r8, 0x600c + stw r8, 0x0020(r31) + rlwinm r8, r17, 22, 0, 29 + stw r8, 0x0040(r31) + lwz r8, 0x0008(r31) + ori r8, r8, 0xc0 + stw r8, 0x0008(r31) + mr r8, r31 + bl createarea + cmpwi r9, 0x00 + bne+ Local_Panic + mr r31, r8 + mfsprg r9, 0 + lwz r8, -0x001c(r9) + li r9, 0x00 + bl FindAreaAbove + lwz r16, 0x0024(r8) + cmpwi r16, 0x00 + bne+ Local_Panic + lwz r16, 0x06a8(r1) + lwz r17, 0x002c(r8) + slwi r16, r16, 12 + cmpw r17, r16 + beq- VMAllocateMemory_0x2e0 + stw r16, 0x002c(r8) + addi r16, r16, -0x01 + stw r16, 0x0028(r8) + +VMAllocateMemory_0x2e0 +; r6 = ewa + bl Restore_r14_r31 + b VMReturn1 + +VMAllocateMemory_0x2e8 + lwz r16, 0x0000(r15) + lwz r7, 0x06ac(r1) + lwz r8, KDP.FlatPageListPtr(r1) + slwi r7, r7, 2 + add r7, r7, r8 + slwi r8, r5, 2 + subf r7, r8, r7 + cmplw r15, r7 + beqlr- + subi r7, r7, 4 + +VMAllocateMemory_0x310 + lwzx r9, r15, r8 + cmplw r15, r7 + stw r9, 0x0000(r15) + addi r15, r15, 0x04 + blt+ VMAllocateMemory_0x310 + +VMAllocateMemory_0x324 + cmpwi r8, 0x04 + subi r8, r8, 4 + stwu r16, 0x0004(r7) + addi r16, r16, 0x1000 + bgt+ VMAllocateMemory_0x324 + blr + +VMAllocateMemory_0x33c + addi r14, r1, 120 + lwz r15, KDP.FlatPageListPtr(r1) + addi r7, r7, -0x01 + cmpwi cr7, r8, 0xc00 + +VMAllocateMemory_0x34c + cmplwi r7, 0xffff + lwzu r16, 0x0008(r14) + bne- cr7, VMAllocateMemory_0x360 + rotlwi r8, r15, 0x0a + ori r8, r8, 0xc00 + +VMAllocateMemory_0x360 + stw r8, 0x0004(r16) + addis r15, r15, 0x04 + addis r7, r7, -0x01 + bgt+ VMAllocateMemory_0x34c + sth r7, 0x0002(r16) + blr + + + +; VeryPopularFunction + +; Xrefs: +; VMFinalInit +; VMExchangePages +; VMGetPhysicalPage +; getPTEntryGivenPage +; VMIsInited +; VMIsResident +; VMIsUnmodified +; VMMakePageCacheable +; VMMakePageWriteThrough +; VMMakePageNonCacheable +; VMMarkBacking +; VMMarkCleanUnused +; VMMarkResident +; VMPTest +; setPTEntryGivenPage +; VMShouldClean +; VMAllocateMemory +; VMLastExportedFunc +; major_0x0b144 + +VeryPopularFunction ; OUTSIDE REFERER + cmplw cr4, r4, r9 + lwz r15, KDP.FlatPageListPtr(r1) + slwi r8, r4, 2 + bge- cr4, VeryPopularFunction_0x40 + +VeryPopularFunction_0x10 + lwzux r16, r15, r8 + lwz r14, 0x06a4(r1) + mtcrf 0x07, r16 + rlwinm r8, r16, 23, 9, 28 + rlwinm r9, r16, 0, 0, 19 + bgelr- cr5 + lwzux r8, r14, r8 + lwz r9, 0x0004(r14) + mtcrf 0x80, r8 + bns+ cr7, Local_Panic + bltlr- + bl Local_Panic + +VeryPopularFunction_0x40 + lwz r9, 0x06b4(r1) + cmplw cr4, r4, r9 + rlwinm. r9, r4, 0, 0, 11 + blt+ cr4, VMReturnMinus1 + bne+ VMReturnMinus1 + lwz r15, 0x05e8(r1) + rlwinm r9, r4, 19, 25, 28 + lwzx r15, r15, r9 + clrlwi r9, r4, 0x10 + lhz r8, 0x0000(r15) + b VeryPopularFunction_0x70 + +VeryPopularFunction_0x6c + lhzu r8, 0x0008(r15) + +VeryPopularFunction_0x70 + lhz r16, 0x0002(r15) + subf r8, r8, r9 + cmplw cr4, r8, r16 + bgt+ cr4, VeryPopularFunction_0x6c + lwz r9, 0x0004(r15) + andi. r16, r9, 0xc00 + cmpwi cr6, r16, 0x400 + cmpwi cr7, r16, 0xc00 + beq- VeryPopularFunction_0xac + beq- cr6, VeryPopularFunction_0xb4 + bne+ cr7, VMReturnMinus1 + slwi r8, r8, 2 + rlwinm r15, r9, 22, 0, 29 + crset cr4_lt + b VeryPopularFunction_0x10 + +VeryPopularFunction_0xac + slwi r8, r8, 12 + add r9, r9, r8 + +VeryPopularFunction_0xb4 + rlwinm r16, r9, 0, 0, 19 + crclr cr4_lt + rlwinm r9, r9, 0, 22, 19 + rlwimi r16, r9, 1, 25, 25 + rlwimi r16, r9, 31, 26, 26 + xori r16, r16, 0x20 + rlwimi r16, r9, 29, 27, 27 + rlwimi r16, r9, 27, 28, 28 + rlwimi r16, r9, 2, 29, 29 + ori r16, r16, 0x01 + mtcrf 0x07, r16 + blr + + + +; VMDoSomethingWithTLB + +; Xrefs: +; VMFinalInit +; VMInit +; VMExchangePages +; getPTEntryGivenPage +; VMIsUnmodified +; VMLRU +; VMMakePageCacheable +; VMMakePageWriteThrough +; PageSetCommon +; VMMakePageNonCacheable +; VMMarkBacking +; VMMarkCleanUnused +; setPTEntryGivenPage +; VMShouldClean +; VMAllocateMemory +; VMLastExportedFunc +; major_0x0b144 + +VMDoSomethingWithTLB ; OUTSIDE REFERER + mfpvr r9 + clrlwi r8, r8, 0x01 + rlwinm. r9, r9, 0, 0, 14 + stw r8, 0x0000(r14) + slwi r9, r4, 12 + sync + tlbie r9 + beq- VMDoSomethingWithTLB_0x28 + sync + tlbsync + +VMDoSomethingWithTLB_0x28 + sync + isync + lwz r9, 0x0004(r14) + oris r8, r8, 0x8000 + rlwimi r16, r9, 29, 27, 27 + rlwimi r16, r9, 27, 28, 28 + mtcrf 0x07, r16 + blr + + + +; VMDoSomeIO + +; Xrefs: +; getPTEntryGivenPage +; VMIsUnmodified +; VMMakePageCacheable +; VMMakePageWriteThrough +; PageSetCommon +; VMMakePageNonCacheable +; VMMarkCleanUnused +; VMMarkResident +; setPTEntryGivenPage +; VMShouldClean +; major_0x09b40 +; major_0x0b144 + +VMDoSomeIO ; OUTSIDE REFERER + stw r16, 0x0000(r15) + +VMDoSomeIO_0x4 ; OUTSIDE REFERER + stw r9, 0x0004(r14) + eieio + stw r8, 0x0000(r14) + sync + blr + + + +; major_0x09b40 + +; Xrefs: +; VMFinalInit +; VMInit +; VMExchangePages +; VMLRU +; VMMakePageCacheable +; VMMakePageWriteThrough +; VMMakePageNonCacheable +; VMMarkBacking +; VMMarkCleanUnused +; VMMarkResident +; setPTEntryGivenPage +; VMAllocateMemory +; major_0x0b144 + +major_0x09b40 ; OUTSIDE REFERER + lwz r8, 0x0e98(r1) + rlwinm r16, r16, 0, 21, 19 + addi r8, r8, 0x01 + stw r8, 0x0e98(r1) + rlwimi r16, r9, 0, 0, 19 + li r8, -0x01 + stw r8, 0x0340(r1) + stw r8, 0x0348(r1) + stw r8, 0x0350(r1) + stw r8, 0x0358(r1) + li r8, 0x00 + li r9, 0x00 + b VMDoSomeIO + +VMSecondLastExportedFunc ; OUTSIDE REFERER + lwz r8, 0x06a0(r1) + + + +; VMLastExportedFunc + +; Xrefs: +; major_0x09b40 + + +VMLastExportedFunc + lwz r14, 0x06a4(r1) + slwi r9, r4, 12 + mfsrin r6, r9 + xor r9, r6, r4 + slwi r7, r9, 6 + and r8, r8, r7 + lwzux r7, r14, r8 + lwz r8, 0x0008(r14) + lwz r9, 0x0010(r14) + lwz r5, 0x0018(r14) + cmpwi r7, 0x00 + cmpwi cr1, r8, 0x00 + cmpwi cr2, r9, 0x00 + cmpwi cr3, r5, 0x00 + bge- VMLastExportedFunc_0x87 + bge- cr1, VMLastExportedFunc_0x83 + bge- cr2, VMLastExportedFunc_0x7f + bge- cr3, VMLastExportedFunc_0x7b + lwzu r7, 0x0020(r14) + lwz r8, 0x0008(r14) + lwz r9, 0x0010(r14) + lwz r5, 0x0018(r14) + cmpwi r7, 0x00 + cmpwi cr1, r8, 0x00 + cmpwi cr2, r9, 0x00 + cmpwi cr3, r5, 0x00 + bge- VMLastExportedFunc_0x87 + bge- cr1, VMLastExportedFunc_0x83 + bge- cr2, VMLastExportedFunc_0x7f + blt- cr3, VMLastExportedFunc_0xd7 + +VMLastExportedFunc_0x7b + addi r14, r14, 0x08 + +VMLastExportedFunc_0x7f + addi r14, r14, 0x08 + +VMLastExportedFunc_0x83 + addi r14, r14, 0x08 + +VMLastExportedFunc_0x87 + lwz r9, 0x0e94(r1) + rlwinm r8, r6, 7, 1, 24 + addi r9, r9, 0x01 + stw r9, 0x0e94(r1) + rlwimi r8, r4, 22, 26, 31 + lwz r9, 0x0688(r1) + oris r8, r8, 0x8000 + rlwimi r9, r16, 0, 0, 19 + ori r9, r9, 0x100 + ori r16, r16, 0x08 + rlwimi r9, r16, 3, 24, 24 + rlwimi r9, r16, 31, 26, 26 + rlwimi r9, r16, 1, 25, 25 + xori r9, r9, 0x40 + rlwimi r9, r16, 30, 31, 31 + lwz r7, 0x06a4(r1) + ori r16, r16, 0x801 + subf r7, r7, r14 + rlwimi r16, r7, 9, 0, 19 + blr + +VMLastExportedFunc_0xd7 + mr r7, r27 + mr r8, r29 + mr r9, r30 + mr r5, r31 + mr r16, r28 + mr r14, r26 + mflr r6 + slwi r27, r4, 12 + bl PagingFunc1 + bnel+ Local_Panic + mr r27, r7 + mr r29, r8 + mr r30, r9 + mr r31, r5 + mr r28, r16 + mr r26, r14 + lwz r9, 0x06a8(r1) + bl VeryPopularFunction + mtlr r6 + b VMDoSomethingWithTLB + + + +; major_0x09c9c + +; Xrefs: +; VMInit + +major_0x09c9c ; OUTSIDE REFERER + addi r8, r1, 0x6c0 + lwz r9, 0x06ac(r1) + rlwimi r8, r7, 18, 26, 29 + cmplw r7, r9 + lwz r8, 0x0000(r8) + rlwinm r7, r7, 2, 14, 29 + bge+ VMReturnMinus1 + lwzx r9, r8, r7 + rlwinm r9, r9, 0, 0, 19 + blr diff --git a/NanoKernel/NanoKernel.s b/NanoKernel/NanoKernel.s new file mode 100644 index 0000000..0c0b4e5 --- /dev/null +++ b/NanoKernel/NanoKernel.s @@ -0,0 +1,59 @@ + include 'MacErrors.a' + + include 'InfoRecords.a' + include 'EmulatorPublic.a' + include 'NKPublic.a' + include 'NKOpaque.a' + + include 'NKEquates.s' + include 'NKMacros.s' + +NKTop + include 'NKInit.s' + align 5 + include 'NKInterrupts.s' + align 5 + include 'NKPaging.s' + align 5 + include 'NKTranslation.s' + align 5 + include 'NKVMCalls.s' + align 5 + include 'NKPowerCalls.s' + align 5 + include 'NKRTASCalls.s' + align 5 + include 'NKCacheCalls.s' + + ; Mostly MP calls: + align 5 + include 'NKMPCalls.s' + align 5 + include 'NKQueues.s' + align 5 + include 'NKTasks.s' + align 5 + include 'NKAddressSpaceMPCalls.s' + + align 5 + include 'NKPoolAllocator.s' + align 5 + include 'NKTimers.s' + align 5 + include 'NKScheduler.s' + align 5 + include 'NKIndex.s' + align 5 + include 'NKPrimaryIntHandlers.s' + align 5 + include 'NKConsoleLog.s' + align 5 + include 'NKSleep.s' + align 5 + include 'NKThud.s' + align 5 + include 'NKScreenConsole.s' + align 5 + include 'NKAdditions.s' + align 5 +NKBtm diff --git a/PPCExceptionTable.s b/PPCExceptionTable.s new file mode 100644 index 0000000..5ebf776 --- /dev/null +++ b/PPCExceptionTable.s @@ -0,0 +1,483 @@ +HASH1 equ 978 +HASH2 equ 979 +ICMP equ 981 +DCMP equ 977 +IMISS equ 980 +DMISS equ 976 +RPA equ 982 + + + + macro + Vanilla &idx + +@start + b @jump1 + b @jump2 + +@jump1 + ; r1 -> SPRG1 + ; LR -> SPRG2 + ; targ -> r1 + ; optr -> LR + mtsprg 1, r1 + mflr r1 + mtsprg 2, r1 + mfsprg r1, 3 + lwz r1, &idx(r1) + mtlr r1 + blrl + dc.l @start - TableStart + mflr r1 + +@jump2 + mtsprg 1, r1 + mfsprg r1, 3 + mtsprg 2, r1 + mtlr r1 + lwz r1, &idx(r1) + dc.l @start - TableStart + blrl + + endm + + + +TableStart + + + +; 0000-00ff: For software use only + + org 0x0000 + mtsprg 1, r1 + mfsprg r1, 3 + lwz r1, 0x00BC(r1) + mtlr r1 + blrl + + + org 0x0080 + dc.l 0x0000D000 ; '....' (invalid instruction) + + + +; 0100-0fff: Architecture-defined exceptions + + org 0x0100 + b $+0x0008 ; 0x00000108 + b $+0x0050 ; 0x00000154 + mtsprg 1, r1 + mfcr r1 + mtsprg 2, r1 + mfsrr1 r1 + mtcrf 255, r1 + bne cr7, RTASFairyDust + mfspr r1, HID0 + mtcrf 255, r1 + bns cr3, RTASFairyDust + mfsprg r1, 2 + mtcrf 255, r1 + mflr r1 + mtsprg 2, r1 + mfsprg r1, 3 + lwz r1, 0x0004(r1) + mtlr r1 + blrl + dc.l 0x00000100 ; '....' (invalid instruction) + + + org 0x180 +PerfMon + mtsprg 2, r1 + mfsprg r1, 3 + stw r2, 0x0000(r1) + mfsprg r2, 2 + rlwinm r2, r2, 26, 24, 29 + lwzx r1, r2, r1 + mflr r2 + mtlr r1 + mfsprg r1, 2 + mtsprg 2, r2 + mfsprg r2, 3 + lwz r2, 0x0000(r2) + blr + + + org 0x0200 ; Machine Check + Vanilla 0x0008 + + + org 0x0300 ; Data Storage + Vanilla 0x000C + + + org 0x0400 ; Instruction Storage + Vanilla 0x0010 + + + org 0x0500 ; External + Vanilla 0x0014 + + + org 0x0600 ; Alignment + Vanilla 0x0018 + + + org 0x0700 ; Program + Vanilla 0x001C + + + org 0x0800 ; FP Unavailable + Vanilla 0x0020 + + + org 0x0900 ; Decrementer + Vanilla 0x0024 + + + org 0x0A00 + Vanilla 0x0028 + + + org 0x0B00 + Vanilla 0x002C + + + org 0x0C00 ; System Call + Vanilla 0x0030 + + + org 0x0D00 ; Trace + Vanilla 0x0034 + + + org 0x0E00 + Vanilla 0x0038 + + + ; Performance monitor??? + + org 0x0F00 + mtsprg 1, r1 + li r1, 0xF00 + b PerfMon + + org 0x0F20 + mtsprg 1, r1 + li r1, 0xF20 + b PerfMon + + + + +; 1000-2fff: Implementation-specific exceptions + + org 0x1000 + mfspr r2, HASH1 + lwz r1, 0x0000(r2) + mfctr r0 + mfspr r3, ICMP + cmpw r1, r3 + beq $+0x001C ; 0x00001030 + li r1, 7 + mtctr r1 + lwzu r1, 0x0008(r2) + cmpw r1, r3 + bdnzf cr0_EQ, $-0x0008 ; 0x00001020 + bne $+0x0038 ; 0x00001064 + lwz r1, 0x0004(r2) + mtctr r0 + andi. r3, r1, 0x0008 + bne $+0x006C ; 0x000010A8 + mfspr r0, IMISS + mfsrr1 r3 + mtcrf 128, r3 + mtspr RPA, r1 + ori r1, r1, 0x0100 + srwi r1, r1, 8 + dc.l 0x7C0007E4 ; '|...' (invalid instruction) + stb r1, 0x0006(r2) + rfi + andi. r1, r3, 0x0040 + bne $+0x0014 ; 0x0000107C + mfspr r2, HASH2 + lwz r1, 0x0000(r2) + ori r3, r3, 0x0040 + b $-0x0068 ; 0x00001010 + mfsrr1 r3 + clrlwi r2, r3, 16 + oris r2, r2, 0x4000 + mtctr r0 + mtsrr1 r2 + mfmsr r0 + xoris r0, r0, 0x0002 + mtcrf 128, r3 + mtmsr r0 + isync + b $-0x0CA4 ; 0x00000400 + mfsrr1 r3 + clrlwi r2, r3, 16 + oris r2, r2, 0x1000 + b $-0x0028 ; 0x0000108C + + + org 0x1100 + mfspr r2, HASH1 + lwz r1, 0x0000(r2) + mfctr r0 + mfspr r3, DCMP + cmpw r1, r3 + beq $+0x001C ; 0x00001130 + li r1, 7 + mtctr r1 + lwzu r1, 0x0008(r2) + cmpw r1, r3 + bdnzf cr0_EQ, $-0x0008 ; 0x00001120 + bne $+0x0034 ; 0x00001160 + lwz r1, 0x0004(r2) + mtctr r0 + mfspr r0, DMISS + mfsrr1 r3 + mtcrf 128, r3 + mtspr RPA, r1 + ori r1, r1, 0x0100 + srwi r1, r1, 8 + dc.l 0x7C0007A4 ; '|...' (invalid instruction) + stb r1, 0x0006(r2) + rfi + nop + andi. r1, r3, 0x0040 + bne $+0x013C ; 0x000012A0 + mfspr r2, HASH2 + lwz r1, 0x0000(r2) + ori r3, r3, 0x0040 + b $-0x0064 ; 0x00001110 + + + org 0x1200 + mfspr r2, HASH1 + lwz r1, 0x0000(r2) + mfctr r0 + mfspr r3, DCMP + cmpw r1, r3 + beq $+0x001C ; 0x00001230 + li r1, 7 + mtctr r1 + lwzu r1, 0x0008(r2) + cmpw r1, r3 + bdnzf cr0_EQ, $-0x0008 ; 0x00001220 + bne $+0x003C ; 0x00001268 + lwz r1, 0x0004(r2) + mtctr r0 + slwi. r3, r1, 30 + bge $+0x0044 ; 0x00001280 + andi. r3, r1, 0x0001 + bne $+0x0054 ; 0x00001298 + mfspr r0, DMISS + mfsrr1 r3 + mtcrf 128, r3 + ori r1, r1, 0x0180 + mtspr RPA, r1 + dc.l 0x7C0007A4 ; '|...' (invalid instruction) + sth r1, 0x0006(r2) + rfi + andi. r1, r3, 0x0040 + bne $+0x0034 ; 0x000012A0 + mfspr r2, HASH2 + lwz r1, 0x0000(r2) + ori r3, r3, 0x0040 + b $-0x006C ; 0x00001210 + mfsrr1 r0 + extrwi r0, r0, 1, 17 + mfspr r3, DMISS + mfsrin r3, r3 + rlwnm. r3, r3, r0, 1, 1 + beq $-0x004C ; 0x00001248 + lis r1, 2048 + b $+0x000C ; 0x000012A8 + lis r1, 16384 + mtctr r0 + mfsrr1 r3 + rlwimi r1, r3, 9, 6, 6 + clrlwi r2, r3, 16 + mtsrr1 r2 + mtdsisr r1 + mfspr r1, DMISS + andi. r2, r2, 0x0001 + beq+ $+0x0008 ; 0x000012CC + xori r1, r1, 0x0007 + mtdar r1 + mfmsr r0 + xoris r0, r0, 0x0002 + mtcrf 128, r3 + mtmsr r0 + isync + b $-0x0FE4 ; 0x00000300 + + + org 0x1300 + Vanilla 0x004C + + + org 0x1400 + Vanilla 0x0050 + + + org 0x1500 + Vanilla 0x0054 + + + org 0x1600 + Vanilla 0x0058 + + + org 0x1700 + Vanilla 0x005C + + + org 0x1800 + Vanilla 0x0060 + + + org 0x1900 + Vanilla 0x0064 + + + org 0x1A00 + Vanilla 0x0068 + + + org 0x1B00 + Vanilla 0x006C + + + org 0x1C00 + Vanilla 0x0070 + + + org 0x1D00 + Vanilla 0x0074 + + + org 0x1E00 + Vanilla 0x0078 + + + org 0x1F00 + Vanilla 0x007C + + + org 0x2000 + Vanilla 0x0080 + + + org 0x2100 + Vanilla 0x0084 + + + org 0x2200 + Vanilla 0x0088 + + + org 0x2300 + Vanilla 0x008C + + + org 0x2400 + Vanilla 0x0090 + + + org 0x2500 + Vanilla 0x0094 + + + org 0x2600 + Vanilla 0x0098 + + + org 0x2700 + Vanilla 0x009C + + + org 0x2800 + Vanilla 0x00A0 + + + org 0x2900 + Vanilla 0x00A4 + + + org 0x2A00 + Vanilla 0x00A8 + + + org 0x2B00 + Vanilla 0x00AC + + + org 0x2C00 + Vanilla 0x00B0 + + + org 0x2D00 + Vanilla 0x00B4 + + + org 0x2E00 + Vanilla 0x00B8 + + + org 0x2F00 + Vanilla 0x00BC + + + +; Outside the exception table, but called by it: + + org 0x3000 +RTASFairyDust + mr r21,r3 + + li r0,0 + + lwz r5, 0(r21) + lwz r4, 4(r21) + + lwz r9, 12(r21) + lwz r3, 12(r9) + + lwz r6, 8(r21) + lwz r8, 16(r21) + lwz r22,24(r21) + lwz r23,28(r21) + + bl @clrbats + + lis r7, 'RT' + ori r7,r7,'AS' + + ; Soo, we jump to *(arg + 24) the ugly way + mtlr r22 + blr + +@clrbats + mtdbatl 0,r0 + mtdbatu 0,r0 + mtdbatl 1,r0 + mtdbatu 1,r0 + mtdbatl 2,r0 + mtdbatu 2,r0 + mtdbatl 3,r0 + mtdbatu 3,r0 + mtibatl 0,r0 + mtibatu 0,r0 + mtibatl 1,r0 + mtibatu 1,r0 + mtibatl 2,r0 + mtibatu 2,r0 + mtibatl 3,r0 + mtibatu 3,r0 + isync + + blr diff --git a/README.md b/README.md new file mode 100644 index 0000000..fdf71ae --- /dev/null +++ b/README.md @@ -0,0 +1,59 @@ +The PowerPC ROM for NewWorld Macs +================================= +This repo is part of the *CDG5* project. It builds a 4 MB PowerPC Mac ROM by appending PowerPC code to a 68k Mac ROM (either the included dump, [or one that you built yourself](https://github.com/elliotnunn/mac-rom)). The build result is a byte-perfect copy of the ROM inside the final "Mac OS ROM" release. + +Fixing line endings +------------------- + +MPW requires old-style Mac line endings (CR), while Git works better with Unix line endings (LF). Git filters can be used to convert between the two. Files committed to the repo are "cleaned" (LF-ed), and then "smudged" (CR-ed) when they hit the working tree. After cloning, append these snippets to your Git config. + +Append this to `.git/config`: + + [filter "maclines"] + clean = LC_CTYPE=C tr \\\\r \\\\n + smudge = LC_CTYPE=C tr \\\\n \\\\r + +Append this to `.git/info/attributes`: + + * filter=maclines + *.* -filter + *.s filter=maclines + *.a filter=maclines + *.c filter=maclines + *.h filter=maclines + +Finally, do a once-off "re-smudge": + + rm -rf ../powermac-rom/* + git checkout . + +Setting type and creator codes +------------------------------ + +Some MPW Tools require their input files to have the correct Mac OS file type, but Git does not save Mac OS type and creator codes. This shell script will give enough files a "TEXT" type to keep MPW happy. + + sh SetFileTypes.sh + +Building +-------- +This code is built with the [Macintosh Programmer's Workshop](https://en.wikipedia.org/wiki/Macintosh_Programmer%27s_Workshop) (MPW), which runs on the Classic Mac OS. To satisfy the memory requirements of the build process, the MPW Shell should get a memory partition of at least 16 MB. Once you have MPW set up, the build process is not particularly fussy. + +Not many computers run the Classic Mac OS any more. Here are a few workarounds: + +* Just find a Mac running Mac OS 7.5-9.2. (Not much fun if it's also your test machine.) +* Use the Classic environment on a PowerPC Mac running Mac OS X 10.4 or earlier. (A small PowerBook or iBook is perfect.) +* Use [EMPW](https://github.com/elliotnunn/empw) ("Emulated MPW"), a package of command-line tools, emulators and OS images that lets you run MPW commands straight from your macOS Terminal. This is my preferred solution. + +Once MPW is set up, the build command is: + + EasyBuild + +Using EMPW, that's: + + empw -b EasyBuild + +The 4 MB image will be at `BuildResults/PowerROM`. + +What's next? +------------ +On NewWorld Macs, this image is extracted into RAM from a "Mac OS ROM" file at boot. Use https://github.com/elliotnunn/newworld-rom to build such a file. diff --git a/RomMondo.bin b/RomMondo.bin new file mode 100644 index 0000000000000000000000000000000000000000..8b3cabe42314ed3c687bbe572893fdcbc163e40c GIT binary patch literal 3145728 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

+I`5IGE}BSrA&V0mxS@*h)1mrGhUX<^xl*r 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

ND}cEe!U+P$IX2+6=-5Cp zegXTdY4|0qK;r%eHB-5fV*~X%9zd&C$O7E{pi;|mfwBZ#z{PQa{BOVo7z4boV*-H( z2@6ng$H|Ujv?RSpz5yFBb8G-yzKR1Yg0O&$ap;~y<}pm*I-Ibt|NjYp10OM>Msa8# z5WR)N?N)-_5o(*ek-1ojn8rr`63mT$W}=2M0mRNkQ3LBW1ImI6HVhBeA-(8J|0W0e z37bRIPl!;69?rkuNcf9@7E1qs>-j(Se%S*)us?Y{Uvv+1+U<@fmvEmf@*y6vKV=bq z18xwUxQL}Tv`;#B}|H_0WC41)g~WLP$StqjY;L>ZPS54?n&NGbplB_#8L`SCD# zp{&8Tzba#cSqnYwQ5l;9n4h4GeS;)Sna=$llY7xqQhUBx?&bYaUG61yAJHdcJpJQx zFO#Hs-UTiKsT4qMCq)brOR><~1nY^CUK+Sdra-T51L6IEF%Ai{dv}ne4E4HBd8PWG zRGSPA6`})9%Bk#|b3%H^Fipr0vrr$eSdO^M1dnAD2F6`z^s6lX)fE47$G=JmMo

dqeUhaX}`*eRj-?E^v$arg<%I-j4=%VRNMu&GUEZ~-0z7vLKV@CCRHVdqH? zW#9o~0<|z&1IT;CLiAspXQIOl{%nG)ISnitvr~^bDSc#e`h>inw( z&Ih&k<2AZ>Vvb?WE;$6B*YCxBV+qx6+OJjF?^$`6U?HyuC%7S-t$gWu*oc!h(02ve zCwt=gfv%fao;+m~JZtgLofAV*-=py`&|RSR6!3k{CGbf|r@{FsPpONX?sKqk#+cb3 z*(BBafY&DW(xa2}Q_@)>TgU?JHg;4f6kim_z@F=10gRIwcEYX~Php(iA0H*ETVj1D zyM1Rm28kaN93BsaY~>d-v%*5{D!9(pZma8BgSvo=D0@7Qg!rM*0*ap}y2`$Mz`sg$ zLU;YJ?i0rCUEL}=^9{Wn0&==z&5(aP=W^_ym?QEVik6=qD$DahhD!;uH{Y%Lz$Cu3 z^!RIa-BF(-O14l~Aw4=%e=lA6LntSbrAY&PR@20b|M|pR=Z2H1ZJ?J}=!@%b;G`|xbf_5Hv zPiN;hYs0X+4NGR)Al2sNxlOQ>fx8vZ5pyo#Y&X_<^T5ARamOon%=c=S@?iD(H;3h= zJnoB#`!vO)7;k~U__>!u8Th`08&l&8sB=@r{BrHmZ_WW`eFOHChtw>Do}Gs~uZ0Zn zOAC#)cf0`qrdq^1TMI5*O8pzO_@_uswYZfj`zU27&0eUTpNG=5VY~;mQAJM33$Yg( z9R=Fxo6+8?y~A#3CvMweI!(|^+Bl|5{Q>-l&$sYV-bV279_|8WH3jdiAQRF;>3nRB zY*mE#3cP%DFY-A9Jn0+K=kfG1M&U$sZZL7x?HbaHdU||;X9qKx=Rx&|{b77YVXBF}< z-M8vgWSz0rqYN7kpL*75kPW|!m~eZV$8ZnJU~BJ4&L#PdTrW;yP&soem=zB=+6WMM z;XwBAIwO^R>e<|Kl3p+=eAnh zxMF=^tplruobmV{StD^`|B7=)Z;x?C17`(ZK;hU0ld(rjvIn(I9W(18dLH8|Uw1F; z%wx^~u=4}5)ZeR`{XL;!?BS9eS?&w`RW~G7u z2A_T$1@LC^6A2fW+K8j`gsIGK7wF(>TZGkkD4(w>h<88oR6C;`l>``U=Kv zbpJdyBXm&~1~B^l82!*kpzmHsY2|#_gjd>9 zDUMN(^Vtj!?Ja4kGrUH`NbB->_zI@{3MS=u@jsB?A13D)cq@7)9Ruk$Lc2;RWqdAT zUKtg!A9or0Mp;rS_?w+2ESx@Y*p71wwpQxvyv1GKC-5JfBQ0)N;R%ggU8eos+d&!> za8@vAj{q|`uvCEwy^qT|$fKfIGKi4w0}q`04D1+4pm8l;-5pME(|QIFUQaadV*~qY zzW2H|f-?NzRyqe_w}i z-{y*)2ZVd}cL+V3uj8Dk_Y_HhFq1&5dJ=m;Bie2xOWv#Rj`lYAU|=5%JuSae=MIga zM(7*FKDGD*Zw)X*v@F&eps&@3@`@z6lIk4HCj1k5^*TDH_U(X=;@n+{mTuNQZb6YzIWImgvlGzDBggG!#_XJa{fS9yQtec%U`ajfo@#L@uoZ$Xa@2XUJYS@{{Kx|>An@!GqA)m|yK_dKxU!JU7-{ihHA?9P9A z^nX5f*QECUT|)c+>Civ#{kw$r|LTo@IeIkK{2Nb2ASFg32N6y$Gg}mVoiK zlKI(ER>hWquu=`u*m73O>R3Hn0g;98L1S|g0-Cg0kX~Q5TW*1 z%B_pUfVo;)A$hty+dX%Ax;^)J?k(?G)U{~)qPrG#S9Voyue__WJ8(~RSM~PlyQ;gZ z?^)5cV*84_R&@8WC)kthf3c_7-?FD!T~{C5#dfo2LCpI(^Vq6W`q^_3b$XudXMfLL zfbiM@_K)l!^X#bJ@z2b&v--XP_7XeHUWPE#|7Nc;yU8xShCcNeJ?3h2wXJ&RF?O8U zMZ59a;*}t*(*uS&)*#~Tp{g$0#zhkG_hwLMEhMi>}vvcedcAkC8 zF0kLTA@&)&$o{}Cu|KlQ>`!c%ea=SM7i^S$$;Oz*iXxxe}0sm05e2 zdp>4Xd_#h)cR6u)dR5@<)v@r9*4JhP_PE_nw$MfqrqEsr>UST9 zO02!LaG&ORS-{5(y6CdC`+C$0o>Io?>UIgjR^vq zyF7XcAk)Cp2d0B~jx2BlXtOnEB4g z5r?m&?A#rGcPlJ#dcDO&Ll#@j@aqDEWmQNv(|XEX=ho@xCEMh(&B3+npZK}otr{OV zqKGSe*Z7zym)-KCTW;mP;sZzEW0cFnZLMn)d>}&~3U86g2mH0L*9klu<0+Tj+$2x- zog$ZQTGPaRRXsnmTo!C^-jt9ZWcrE$4?_19W)-AaJIoD`N0pvbLXNA}V>?NIGC7o) zyB?c?E4On|ZRJu1YAHfZ*R01zm4aJ~tu7HgngF$6_O7v~s%E90h z2HIg(ivg)x)B+v81fGKvnzV{-f63>W`at<8)Qws5-(W=t4UqByE(t2>%O1Ry}&2-@AT0jcKzXCp%cL}19O9iWH z`^7*LY(5HB@D=R-#qlO%IBVBylp9v02s(gWcGsa?lp%q00(^7OXVWM*qTc4vAnNj{ z@-FTW0YmyC80(ZZl0BUCx6{xIx?HTNfR8^Ly#U^c-U#@gJ@&F&*EGw>#fRQXvQG(} zgiXYgtf3TeS6@&;8!MUu z`SM2G^w&c7(;zq>oZbV|qWsi=a9hG-z5gDCq>W)i@8kFu98(~VrLm-&_eJIDyD@)? z0cR-~6H_~6=AAZqib`~hBi{1AK;5Klv*NeUbkwmy>$ntRofPsH={mI^8I)a4OK*yv&J_x`ioETqg^kK3m3 z{3@-V=;Goj$O;N15eX@a{&GlW*r(W+hm)RIjoH!-%JTvCbnY9|GAL!>S=UwjS?N(TO+u^I8}fWqa^8u-$l@+1_hA#Rk^Tzfa*kz)sKWoQ|_W=m`t+ z+$#3~Tr<^^6!Endf6o&{(%)o=^EklWAg3n9XyG#AWj~W|uWA z4D1GvFEl4mE{feV@-4?apKz0B#I_N?;w-|}QUU6?Sv}I5gzZ%qvY7T1QQK)mbou8i zGV)rOln;q9u5*Vewa%r>tHQ|xk6I##WLV=q7I9rKk!BBY?IJh)*WCH;&Vnq(R+y!x zy#JG;q@rZpqwULQHPx%`^54~RR2uzDDQ2ao4bdS$FJjoCBr* z7P{>8zw@eWK~D|nT7+V?rT!xQL@dMEF%9sAwScWSc8CZ(TsCOAAF{Hc0=z#D<;7;+ zw>H5}@G#!8_W4&*)Mo6}hG(^CpECjd!zSn%O6VV!Ay3J3Lq<$gQi=+gS#HMe+2f?u zZwXxx>$EYRn%|*}*Ok8X{>7~U`qzp6#eAu21GEcMj@wijK&yb62ku7fgb!iPN%NLM zc7^7WRj%so`f9Fve#v~kAU{iHfhcDch`HGXVvAV7a>Q1w6G4>m7R6j@uh`lq9L7DY zRlr^^z~Ul>v>ZYjHIwG0*y`US_NXboX7N5e4`b}AYN}sEemq>};d^=b9)!Pu@B-{t zdd^BbXGIMhL|s%L@{I5_ZED$V0`lIgT3iL<9t;vVt-Q(pWXO|HiIaV)24Or~0|&=m zM+pL;KG3XsA4e|?#^wRW|2*lZqPCN)dNz3AXDwmV!?^>=;5P>&BFhb#u5A|92u)$* zK(gBDZx)(bO?7xHVaP((sAkW3=74?*e50-st6y@ST`)uTkJX2*0|l%;WQ5N}|AVR< z`%D?Zniv^3Pj%CGJ6SGv+L3`|XeJti3pK;rpk2TWq?@>*FvG5R39j?KccSJIZ7^}o z(fColdm91UWr$9I+w}-<$6m(&=-iuX2d^u1C%9%kv)DCDwLG~5z6RX*Sd}4YPk6ld z&fdp+AM3q`Zr6r}qA+3=BpBF;y`ee}`RegiNQsOd1GIffaq9W1au8SA@I8p%HiSSA zl(+}`-Fk2sK8f33*q$d14W5x{3b;m~;VPv8zviIn+m!+&!6|R(J)K(HrDj4uV~U;A z`_tyJ?5NA;zni!nxt@wD=(oU)W?DYWhSm!3hkyzK-MIYp%ax%ScRUC1Rwb*2;H2nc z7SI%dZn_S!)WjIz+e%Id`(5vyp!HF#jlFk%2hbL?^W2t$FBG>X3E!r`bK8QfM3JNM z*Z1BDN}+T`4cGh#$qCi;olP`b01W~Lkdu;hJC(Gesf2+nY|Cq;@tAf(wQwyojktkn z%$h;@r8cHBe6wIy`6oiVzdR(?R9^MYG=@jK>Yb^MtKPAk1BEIcRy;h7;Sr06r#gy< zE$7UT&vO}goofJp6hL-q2(1MVc0xPcXa`BT9Hx9G=Kx*_YH=)eKc)Wv+S2cK|K*mV z4xL}AgYeZlP+h;;6VY+K+krYeHe!_S0sJkgR?jD}?|lgJWUN+MzPU6l3yxs$D+$~Z*;EsC8>){|)Q=oI_9PKr7ju&o7jUm>geCmM< zwE&vPuv)Fxv)jNCvL2^A&Bg?Y65KnjSIY2iQWnVhqC;`vT@T8z0@`f8Sc9+CN*2DV z@YSHCiB>i}6+7b!0rYnfIKv}=8{M#R4vyxUYRVg$>P~1!v=_Al+I!kQZIAYtHUic% zLByXS`e&T2GrQq~uAH!;>fdO%DIBPLF*n1KL<=SIhF>O{esSmHT#S zqZ`fs=Q0>DiO*)G5`Pe`1_B__ZYA!fHqc^=LA54|HKoVQ%j_rWu4zt(u#u7GC*zuc zWmlc2)&p({Gu#H%IL9Ma6knfqAn=8CzdTRq<|&+%Lg-dx+(kl1?J?wnTfods);WMt z=eUJ?6+O>vDuYwafpM_ApeKju#o~XcCa=V5qVqlr^FlU7=5?Z)LK>86rliDTg<>^* z2sPaiuPI~?qjiN22>9O1>kplv-1lB!b~o|XXM>AeWc9K7j`z~U7PcCxh14S44S~C8 zS_b6dc7rSUKtG-qG|!7)=vJ}VH}cWJowNS|>~+s=TOJ|}RYv|D1Xf)F7w8In&xeLe zxGYhZ1>e9Tc!(98`Oq9iQor)75O_4FgGV!p&!cp}HsGA4`sjYxBjH=;WXqvt1aE{c zpB!47;7=_;8q}5Vs~ISjc4bh~^$=@5TY=<~45TF&b9DVn)*KN&F{8Qaqea&xU9p zH8fOHsqy^igm6Xc;{skhF~qG(;1~=tH*jshhSWOhGkcEDgL%c&EWAb4LUSx+b2&x3 zl0veCVr%Fk(U&x=qFA1MjHxCS$dk_Q3I)0yV>yE6gj;3NsXA!%lx(yxTg|{bT}|V6 zoB-&8EafTOy&;^^#aqW=mA}yX)zQ|krqyU{Vcuj1|dF5bn5bRvp5H} zYa?uNCa}fDf{50hsVqMyw4Zos@>v$6WrY?H9V0wT?wFbpz|G(ytQaL5xcQl!g@BjL zz8~EZUe_e!RyEK=`*zg_ox^fk2pogBg+oiH9i&^KiEYIE1w557Uuf*wqhr@T$-g7& z4^B|ZrTk+Nn(e9Ob)LhcEW7+OE71dm&7{4~(2|0gV+|R1wJN4vEs97ph*J67VJ_7y zT&apwAL=!q+fRDAcQd1KrDBo*2?|$2?^KGT7Ps`!jT5+tvF*e?=r#ah>_R2wvu_kP zp0?;7?DXGFyYHH8+IJC3y3eZcIJvK6zbbA1s_+04a^t0g~Vd8JCR+%}&W>g``j6l25eJhNWq< zRmWkrZ+7SsFwH^Q+5KH1({FwaE`DR+`EAR=mj+E0?7izCxADoc1!aO(3~he@Qd$D{ zhyEZFN)Y-YrNj5rY6jltN|Jnw7r%;I!%^R2$j_a?j{WEYg44;iL&lO3VTdr=1Jr(F zUbA5GUu|U@rD6lpHig1@(66DG(q_Z8a^m*h7FzEDJ^kj-Njz~9*O(;3OakSs*7 z4|?h$uY-73mm~%EtBy2;;1)H@n{Q&ldqOsnt4+%nSv1BD%u>cBdHzXpgWCS4BMJHc zlafifAr5pfYAZwUNAtW!c|)BreD&mDL$Z%Gwgg-Ze_ff!8q69nCf{-i(Lx`^CMcWRo^ zrWtqukav6-6XNqvpiH7B7zAtzJPVO$gN*neXkF0+JdhwS6v6Y0#uK6mqUCD<19=od zFvPNo#{Bx9SUss2o`(@WMh%rlQ>ZXaB8EcyH0iO>uO5Jo|~+SC%XLo*vD|rek&Do zn@-K6pvHrW4|^Qawo}5%OlXxB74Tn^r3~oh7j_prwK1HzQ(7%J0UWA{O5%4&Vp#l| zcqSeX@CxE(=<%d}W}>_^80a9-aVACj9xKH| zoD>=nNY?;n4R3$?&T!=EJN2_H3U`8c(LN93a(BO{Dcydvk$K(Fjs>i$hy@;?)0yBY zPS>Tu-yeNm!7p*TzDFlE9t@{|eN(s&j~7o39^4}e-O#cw;}`I}a1_sJJR?{UMm!cg zE)asDX~wV^PY<3K@mv5PXT`G`PaB>m@w|%%{z-Xw8t^pXLHn9R8g5wf9-Qqd<6(e^b8L|`?71ZImb^DC zC@e|Fn_Q8v#FYUb35d=0{3l1kMui!{GY+^Qd*wg{cG2*R-p2`c!!DiAl7)G?FY+-1 zo`74mLJIC2eT7V6oLt8JJoXos^}Y%~widu#AusN|bm`l0%wHn^T`d&X&(xH;w2C$aR>VNQe)rq)v%C!c!F5FhSXu zUFhw7-~t9sner(Oi-+CgBNC@x?F@7JPYBw@ZV+TcybTkf*5(-0`r&^uylOCq1xOn} zCL^J)R6~nup>`zIoRdHY!Cj=NbKQvJ@!H(H-%2cQmb_LBCnMf_pFqr%r_0D;qFc-9 zVmU(CK(jE(Y0c@+QB7fYkcm5KRJ;#+GomXQcn~P@gdL`TzdMd`)L;xh15^r14d7ZG z*Bp~hL#=}&0X%4j0a47j4 zB3S_?14e>IR}nN*u5-xP1YFVj+!d&64mdDT8jAqRdNl!t=Q9fUG_c3XzF&h;;tb#z zrGwViguM;z1dn7C1C6)T8SN1#@4bi7gAeoh&FuL?k7};!v|>v$Y`0?eq8--pvBHj! ztI9-?KRjyKzHc{To5GM_70h!z(13{jmw~cRdFd-r*r~5XVJEFbVJEFbVJEFbfsY-z z!g7$Y*J&m47#!1}Z>(GW8|%Dg8P>m5>|^Y9XyPhACpL}m0X$6i<9k5teu1}0)N3?UW7o8JBN`}J?`kn=v zUJZwLgN7mDToE{hA}s{{7RjK>gQ3a^MguqKPDhKaIM40k$ zyPPj{N59kYeQ)&Jj5yi)cXYNAmfaj}OLKx>IO-Rs_F)G$al8(<;e4*{CO60E@T+r9 zhLbR|52cYtUSlXFnj!-jmr=3kF6`Xfn32c3FR*2Kbua_xN7*gwx3r@_?yCW|eFNr1 z-(M?ZxZ!z)q>fx=eUCr0*zUvc{m(3Z{>b+RDhEP0dM-eZ5oRH{fpLq1G^Ks_gTu$W z=mIQdmN_Dj8aCo7)x(R-h;bc{an!PVaiF3W*y}5hWU^VhmU+tSRLRn{In>k^>L*^# zWE0)gp!_`~HRptF39>{o&V?K+lry_EWD=;|d2RBX>`cD#ny z_uYSMF*rXp#N4y%X5d$s>Y*h&)Y8-jei*!;__-`$moS7(d1X{bwB?X@jrYm9#<_-T z%Gebvs*%6D?|x7N&}Q#5^iTYx5#o+6>AN3q54903$WFX#!fwGSSI5v4pSu?4k@wqj zb?W$kIRpoR6FZg0-<75Y7P~+6fgYJuY2 zdmbwWRqX0;dT&c88+SPWgB64Oxh0gw=@3r7%ESTO)_`6B8agYDl}+{YAArWa0&s>r zrRG7>$tTw+lI(xNi7!9OwyIX|x50S~$?hBa{HQgpoC)DW@$g{^C!H`z>(+InQ*0__ z{Lj*=eF=J@55HshT?y?J*~GU-91$+k_sXbe8Td8ecU@r1w^p=lYH9spi@dBRrf5aJ zWnJ^Swe78K*U9L=R%WthghuH%tc*do;p+PX$KW#Cp;ILsBp+~Ln4#62|6x^&4uqCu zTD*O1ozv*u!_(Bq6p056H{crC53tQ{eLuVG2eCup7=2 zYw)p`y4RIhz{?!?9HY71@-UBMr%~0v)l2pW?CFe^gQH0S>hww{Zg}fFhmG)OU-1Xj51D2a`XaSH=%~4bT(?rLm@UJaW^s|ucxeCCH9UfYQ13zgO|@LV zGtmcZto+Y)4dC-0##|o!4o`@oJDTy+iRU&SyFK#;&B%S-{0*5n;TLqYV3H;N2~Uwr z(|(F#cgmXflSlQ?=|l8OCF1WsyeDgEeflLu>V-5$(QxJ5=k*QRsk!{l)On z`H*l`)&mwW)IVbc!PL~C*u# zQxAo6dbWMs4Vg8EeJ``kffWLry1044W3huX!~P)Nk{xgiNoR0-4bZJXdthxpQ6>yo zIAupsP9ZD6sfe$@!D+9etkOJAxj>&oQks`l*q*aNO!0bu^@SQGS2hBrU!jfVNTX6nb>3odV#V5M}r*ON5 zxB*L{9XQ%*NYCmvbHJg{$+qdPDDA|{;Sb_w8(%pjCF6T=m( z3b|~=fjzNw8pFIEtBr(kcJP)R!JL0onKr6Nu_q&9XD<&11p=Ql-Gb4|s;g&|4>t>c%S|ua6U6$+-Z36gLAe?lFz;>&1Be?xLCv{uf&^CMbAt0K2w6*U4IPR@5~lu-s0}^9a`1%~)^H zc%~E|AEk3Ad;_?@W2=J|Uu6b7h}$UZCwDubHC{T*l5@KNACeVcE@K&m#barx6bm@Z zZexA?$O467LJcTvjo7DYUuvL1Z;AIvXLL@5{_ph6*Oxo+XGR3@f@X=J&vIHUga7z) zAN8EVSiX_`WbQ+~2#q3oKYr3}$G%Fpjk(*fBi{@fy@7V4WJFKU{#4j*uwTb|0N0B- zWvmf+NO#zJtg8t0D_5E6s@;EZ++qaP8MfoBhn+{^m5AL9 zUWO~2Qx0$6e}^i{pcu&g(NV1DBP~LE1&ui5EON28VRy4cf30>O^w?PB$}yQ^Wj8CM z07B%Z4MDY~^_KPxYi~g^f^TjWlsx{6n`!=QP}2FYQAy#yNs5X8nqsHBgWEcVwhib% z#@)4TpdY3VQ`%&>3-B#NCqe(G1B@NpW(Vg!K?I@|)L+>C?k~PpX7`eAgE^7!%ChuH zcll?M$Ir|+QNqM|8)e!z*rvCS&T0+=!Cxx4=$=hzzuHn2?K z@+rWXEg`esUIlmrmCR?Nte!JQ7$}AP;AB+IR+nV09Dp3gQNqTGB%E1cK#jfa8K)tw zk6t-MbwZ6QWcPl9nnKzShqS?li1)V*iwEX(&qqHOiF!GDKgx~Xex66a0%{dX0wzQJ zO;K%|H-?i3z-$q!t@&6SkxBDrkD86&HfR?~4`M69cMI37+5=Y^zd=7RZ71%PI-r-e zCze+~7hAe8AqI7>{+^2jq;A4~h@3Cc;>p=mumn)W*G z(#L=+k7eP>z+=N>#bd!EVZ&REU*N`Hj^ZJ#6YejE@SLam;;ecR--CGG!}B(tle+)3 zFusrAc?Hh^o@K7o#%;jDz`?B>iO(zi z2i&V3v@L9?RydZ3@DmGJLp3z=CM%hsE}BS23A(5cvdo2$d*S||F;-n*1JJy}C0%r! zS&$$vAQf2 z(GFYIwl?uJN60pIQQ0k_Tidw%Kv?AA%^TKmcVE~*?oewq{NXUCJ+`#B>EYc@;Kh@v zxzxX7XG#8H$%V0tl~^w;xD9UHcngrbL4M&MhSvh4zUXTiJCEnHqN#y{nVk!BaR2uz z`U;jWro2dPh5H3i)keNPJ<3Q-U&hnlRa7{39?#jpL1`=XU#JZ^JpCWZVb%z8s7Oe^ zk*6=#(^9XCC6vXJOq;^MZ&$KIo!ajMHUbgXMy z*4nhLZr$3}mZo6ak1AU>wAZ$7Y2VPYu43ISYuh%2L8yg!1jJd~7F0K{YiVDmw!!G& zvYM(5Yub>4zGK<&{)J{|AueCzhrKA0^6IBwDJ;@2?wpwd?y2#X`(TqRq4zJN1tWMs z@gKX4`7^pO2ezRs%iU@jFu?p!gMW#NlOJn(0gX>;b4|5Uk6swTgZSnuK0CcUMk$Zs zM~q^mvV{LcYa%rtYr>(&PC3fwt_^DciUmmJiwWNGQdq^ z+e+&Oy)||=z9W=z>tF{12S;}2Hs`t>}XSI+1 zGySa<{<;3nmeJqE;Uqr)tYK4h9!}x?ZwddA`fPd@`pg=B1mlifncVuwe_api`(dg+ zzc)cH#-_JKYnarMvuH{8*U7_aqeaPb+1k)%l_Z|*z9)We??yjiO<*>S65Xz_P>b)A z*sngq{vKaXor0y=aF$sxgm+Pjv5)lmH+C*I|HiWCH;!HK7LHxi*B92%M-$iA7_F~S zJYOJeBye!%qu41-(0(`?%JZ5qyKI&vm%dOl!w>2!0Va}Ye(lg*)5dD5F@h$@sE&d@ zc_Cw9?5)J{BAmw>>z^`ctKlQ9mDW`A5gtMcDR#Q>`3HH#85vnPHAsGP)%`bI$)I6V zVgrz~BYrN@B_y%$yG79hT{Fj_#WzLPP3@67Px|h%6 zxulFa>#$#B^Bmjw*%1vHyTn6`OHT3Ff(n)15&EmC~j+Re0oU?deP5^ z8I9$Omn|q=THh87`+_Y^FwxNnB2qblDFnrA2sUrn8f@Rt+EPo9OmxbkJ*T4WkIvO1 z)Lx+7@OOAl;{kkTdjzLON_d1$2WbqW%>-qvCkuRb3*K6Ja!B+qr5v4VqYS7 zJR$azJhm|*?}Z7mhY{PF5WAgXv$w`$v!R68=&>26cVS6{}%SA6uAA@EzXt@Ba zWABcR)~ctM1P*Sd^WPF4rrIPQKy5NR(=6w zo3U%Ns%S4y#dtR)^fKmBT7YJ80py}_@|Qlbkfq14tO9S z%sUnS3l7TIYC$<{AR#{HRq994_?P6nc>GI~;%`rgk6D}g0^*yI|M_{`)&sl2V_BkU zq0(4tXy~~mn))fE?u(~3@zhTtbsth^Pe={RaS1t#eX|owViyzR;)FkhyT|td#T@=F zYN);HZPDJCk9ul@==uI9E$H=P#5nYIG3Iv$R(Q*`WAi)FDQm$?)uO%4Q%wt7pRhZ9 zfIU{r_4cLmJNiG)ld_gIYeNK^VCGcqdR8gn@JiH=;1$B#)wGGJcI}214CG^fTmQcy zdDkO1n07sklW0KONu!%tv2M*4RfTz^z?L;K)>vqRx}}Y8yDVcuSPjNwUE8`AjCsN! z^7AWs1z@MOEuj{Izg=ZUbLpNBMHpRmjZFuQ}~Fd>P;G zbqJfzFZ9=CJeR)J3H{`M@B)9v^BH&P_!?Fn@_i~{@7#e|kZ?kzbS%sP2A_uYa~9fL zhGIRfSP^f?_e-wBqaM&%;u)E^w_^pSlwjppFq7~-HjI5REg>yziYp>v>o}A7zBsKJ zEQV|J9$pOaKaIQV+JkNFTf(|G`ZeLamh}B9VdZuq|AaGo8utHCc0%~#gmA3vX*)Tt z`TuhE2Jlf;SK|Mj$z(EwXBgrbM~v_?j&X=#5-_Ey8z2k_VN63zSWEq}Iv~s-hA@qh zKg%aSc0dF~)>6yIzia(lv}%L06e(?4e*FEX)Vj3m&rPXosmlsdL{yq)U9>C>^Zws+ z-^^qJ?(S!Qf%oRU`|i8%-gD16_ndRjJ=aKnE}Yu&IW_dt-V5*xxE|8~f{8u<^V2^v z>0#^1_PBgq`(HlTy=>*}YwlZ?l+icKsFy**{^nKxSM##f%Q|vTGo+ux2{WDW4tBQYpw*~jEK%R6^jXCiZZ9A-nJvwLkIDjFKpSZ1~v z+Y_C&Q;3}DhQns=&?K-8B^zHP0ua$mN|NUVTIvYUQfhDLki4OJYe>h)@xc3C5$pl{ z`Z)X?>^JT36C=aqx|*YwqmHAVqaiu&#qq@LA00O`C3jNtT}f}iIJs*YQT9z^TBG$T zusRdCBROto*sisC2UvNkX4H#+iw_(6r7`#8JCUVyi_AN|_qWrPwsqKb75�+?J7u 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ū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 ?aK{^cXGU+e-XU?~*_OG{5~~z_@8o`xz85Vo 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

hDyp!|zHTOE#I%kM*xsnqPH7Lw+jF23& zFhcT`aGi_=7@+`rdB#IXYccO(lsvg< z!<-jbT+7U8`dh}M)IVHd&I&_~Suw^84S9Q-21rZJEqbFM$l9L=z2Oxp=>FO@2K0w# zqn-~p&2AI+?%Ki7&_G>%`0fQZp_LoIU12*|n9v()DmM?k9jo16+kWn4Y6$e#N=Zf0 z=-;$EqxJ3Xxi+w3{c3w_-o})f?i23xR;&%(8<_h@Fc$|aZ9D3l!)L?6jKNUNWq2Xm zV5nBko`z7x%!ZnZuHc*4?OmRz`|#u%Wz~Pd{1RGSyjq1y*%w>vQA%@)8+;G@W}(ep zjkne;H8bHVouxd-ncE*6g?^ibo^2M^Z?jZs$t=(od#fzEVyG`&vps)LV`{V%n&(R+ z+9o16C&P~-b2a}1k#IvkSmBd~%&Ufq)c)C>UEWRO9d9z^dOFtxFnQOwc9wo3CkXCz8FIub`Y;*X`Bj)oHlSmVy)VVfTb z^At@nrRCzy5H@-u;ioh9!g2A$Zd~2FTFocVVcu-xjh#O5Cvx{Lgo2Th9a3goR?A`I zf|W~u&$t>1SHrjR^dg+{QhKO3Qft`dTs2Eo^Nu#?gMkMl;eBE19NHg_m+^EOPY+1T z^yjJHMxJ2vtM{5uHc+PI+9|n=ccWoaEaToV4yJQ2s#*OF zSBYKD+*k6hiZq#=8v+kTpK0@hGnPwAv!<1jF8#j9e6O=xyVRFDX%|*8BHD2J%MSUX zb}|x{8t_c4*e{##kRE^P&{Q^^r$-NLNx1iIL4FZlH9`q5(VurFMv4|%C20o(3uBG+ z*%K2_-Uuut-wWwdUkNla#Uu1-)Tce;w(qreNx779Hlrd*~T(wde zp-Pi0y}pMx`4hRa({FAf&&wuku&=U;npar9g3;(DP2kCA-UYZT;0~)a-rdcehr5~P zT@iOWclXBgcvnL20$=Ve$P=x+_weLw+4NVR<6ETy2iMO;YR&Utq&B*Bl@q9dtWK`m zzXeawNc0=4Tn9*%#FyoI4*jT-lzH8SO}PWlvsB|#rKQMEuB=q0GJ}`0H;=dR>PlAA z1&-2bulzUV{J)vC_oC&b&*8ILhl7R7zP0$HP3(XuaRv*BkU}qOh8%6iF^(C=5ymu< z<8AJ0bL3R|6xQqAjZfY11Sn5E9SJu+)x5batKz8tSn2dvp7S3Kf6t6Pzx&V9#v)-- zo~!t1G9{SRiq>dor!AZ$_y`G}3*3ebuLAjvDbwb9PtzkK%FT1Tp%%h(TYs|qFjSFP za6nZk;&J;PlK5Tpdw$<%B54{=X`QpN4)1hU&e-dD!Z~BJPsNs4`NmV7S++oVZj&Br z9h$(GQ}mmJ{B{?vLCWhc45^y}#QQWYzVz0iDVAM^MqgPaBJUuct|t7bsS$yR<}Itbx12HSfhF z?s37IeQ*?^a*3+k$kkHws;&keiP{x5FJ#|SZ(|!!Lnx;ID`s2$g^>0(or?q+QsnOIm$q9|)F{+6REu-PVCimKEI28EqYqDeL zbkR#)Z0vqu1$MEdl$KU7&-Qc@X)-6aP@WxXS~Ktf=~JW9FW6&s-B6QPEUlc_n?c_? z+0)IXVS|in>IuYq#wN7E5F8scY1L*oa;%WJKmxmzRcvo~gY-_jQO)F?DT5 zm!~vF&5`4#zZ}oQ|JMAHvrN96aKt)^!DQ!%PsVtUn*B36QGfbp9{n@<9(ZB@h(aiM z<=w<=EYA`NOuDt_rL}R_yiM#<3eReLS*WD-_VBu39zXqogUkdcS6TdW9=5Ie1gUDu z-KOqTuBAtic5Irdi1g?XdvRhVBFjyU^1F8XCiMZkZo@%%i0`29ZF<|2!FeB}TB=HA zT-)WFPV<`qAgnsP(1g0Ij;xBz6E#HY9NYUfkBVO~<9{gqF)&J2htii0hJt^k9F2dX z^*)R%pVPL&OLeK^+B)-ptGdjSm$VmG()Kuv=gzMh%=JGN$C(LM|JlE4ikVE1Ngmn|Z$pB$1X>%S}CG%9I?qN!5`p zu(A0>4e3mH$;C!aO84l&N>A3{I!{jACuQ`n^ElUF+eWHT0n(oEI!_+!39G8sLHbLc zyci{U?4KV^Pa5{j8iU8wDJkvti5jV6)Ym4xp$4peLk%P4gtr4~)*>-3=U9G|mRspI*AwV$B_ka6{` zyLnIRBgep^xt|}|KVD#D(>VlA)A(kzU1#4Tbv-6M1O1)j^ctDz%8`eZB^N7?V<( zs2kCX@(!_E}{yhvgaLa=bZoM=13ka8gDsLMefM`oQqf zcy{edjRA4T!(nt_@6GtJhpuA<7>m(<$=lzNI=1GdtVYsSL(R{!`c{tguesk&!DRn> zWd#(^nQ(n>X5^WZwH~m|)!xBS<$dg!7$#Qn)lC|a;R~wo3p)2UtQNl0+xj%Q+@8!x z*Tids#ogYi)a=a)Z%fl^hZfCaouaA&9Dr~h^4sw=Eh-YDxuqETijZMbUo`Iw{( zvNA0h0oLv=&njZ&E^32b{kA+Q1m{4jj9=?=E#F`q#+pN(F2hYJH(B2ei$7j6;h4u! z_J8pTm6cW=hm=pUyS%=qK7aylz-p)b6HhlOqsJD`M6yQ!~u_O_=kw^y#$v%UYm zDBEMW<-Q{T&FERLMX7NjOQ4PY!Vg^8-B4)g*ljp|*_@^k#7YDj;jgZyzq@yG76Kna zFA2SB#y_9emV$%l>z?^JtILpf>tekTSfve7em;Yvz5DM}l-j1aGBF|GJ zlk@$ro*#!m%4a+>tE6p9-u44|%y3Wr#pK1Ii}+^IR-k(Xxv9cpDY!b9;{zR@oXt&d z%YDM0SFOHoGllQX93bDn8wHLRVnYTE_s{O*ZC#! zbQlZAh>nFn5fs)1nN=noHd2OtVCvG6k>tn7?*BPliyS+<6>Y>Fq12z43s)1$cKlFi z#oOSmkv-^HR=jykGpV%a!gb#JI!m!rVDPovp#85yZ4#d$ghd1Pky9wJd{v1@!MgPS zYfAo`)K>KZ-|2~Gi6uY~OMuo5^!^b;sZX#9$(obNY`c^^&v7Jqp>;j)dUWyC@bc#7 z&QkUbxev>lQoMjilILWU=WE7ceC8V3b3FG2OPNoF9hdxIgSR?0E%C|0+BN?9wkf53 z9M2Bd;`4YRHNx>cJ*>wT%6s-K%NmD^4(hAMvT1jGsXH4^%MOLK7(U=nk}?*`>8eo7 zdsb~AuwtF&t|5&R=vq3N;*@w+VhbU*-(IKTSY+OrFykISK`B_Pi*OkdtT8 z-zUQjCYLLGh6CEU(!(1(7cT@ID?*77yBC!GO(@}H*V7Q=(QA$lurIJlX`hEjA|^!X z2g=>aJp7Zfp1W)DOp(?cRr zlfHWG&HaX0M8)UFIs|@wZ5x&fsiOxI(dB zVt@7QPF5oH`F?>*fxv|Kj!^QVIjXX=ylKlCZldKoBOBE&=&O$8Md{1r8Ls4agx`k? zpxgV{^(T2mB-)@4Zv4Z=jzdpiFT|?az_li;BlPWDu5F2GuCFKNc<3c|q27pe z!OHLG`;0oUe~0uY`v_B3v^$aG@~AGeCDYO^ampH9EmSaTbmg&7#=8KW{B^W;6wm(R zJ(mBIp&c2=t@4ifKgM@tXQZ>#b$Z`tQ{VD_z#s99Db4Rh=jV!qpuB^g0kL6;k8FRo zt|oi)jp9`2!8fUD)PJOv4wz*yorfW8ka?FtO}h zwjOFfnEEtc>Zw-2nv1C~&$lB-ad-yUk8zCqZ_Rg1-iKr1($p2BYOM-p4>qi_*M*wi zyuBuMrLs$M)?N*LTC^yg|JR?(|8H_1%qAUPASs{m7ZuRJYO)soY&pZo<&~-n;T-G<^P(x+Pv`OfaiZoX_9KA%KO63hLdlTZ@K5~X7+9L z{2JQ~_We%ovWL`vs<{G<;8X0UfHX);?!scGJ-JKbY3H*OrOGnYeYxq?@7>8hr9auv zC)1RN6(bJ|;6={D<5_Ys`A<+4R}zke=haf=;6TOPTi|HCa10iopv#Vv$-|8YF6LJk z!qe279L*WNr(fz%^)3@*f!M9y9)b2DH1KG#sQ%hG*6DD-pkb>>U8td|dtBoD(OT@5S> z3%7WtXEr6eBO7fw<_Qc~9$C1YFxd)XtkGYpTWF8O7_vTkBy?G&D6N?dfcLZ#`PC1iD_>w)5&1l@K zpy!iE%WrBt@SD83g=k9m%zHT5U+zj%`~!!;!K+JwjmpkabH~@^l0LHW{KfE(pgXst z$K8XK=cXE7#@^;VNY+9h~j>Ekr-$?F` zEo2?s7+8^R!RWk&$$e6*Pdm*PIGb;*`yRf~?~!^!bEQg*mdUoztNU)~)d5DjB(m|- zm;U2kwZ57vF?)AF>bqKRI)YTql5^%W=iileO*mcYL&o5D=`oglTir6opDtyL8J*$sC>WW7usKdl+azX5apanFcv)@`uR#C)16NrxWQ;@`r28bg7c5Wu;2S z(=;!PF6=mO!n6fxS>v_%WN>bw)Kppox9pkA`fj*5I*FBugbQ82eO|q}5(`#mC7uD0nc_b5BG$h#TBf9Fgbh2+xa&aQFH>i&X4^ zO{v{#DU$arwXF7<{`|sg`YFB^thl}YcNn%DllXNDul?*~{Waa=%S*Uxe#c54x(Aa1 z!;Fc5N6A<4PwDa9hFsU>!*7CUF?J+t4$c{zGdX8+b_G2TgjCT3o3!t#xqW}n?koFz zB`Pc4z*w7}E#p3*l(nLm_@wG!&t2{=#bjw`_ii~mxYJdU`jL3PzIqq&uKf{T9o}-b z*UCEAq0@{7BKJhq+Dh7d*QQ6C|GHTf6aRadl%@BJtkczr_E;wcPccV->e2?DbdDZND5?QB}PlHQ{eJ;cFB9eq0aN-CxH(d)KrE{L8bgp1I5H znPBzTQ++=pj*8O$3w8Y=SGx9J5=6^cP_4e&s%C8^rVzA?@VEF!gv9g1SE<(WEGC{l z^y=daZ1jY9!-k4NX3PMG%H*yBU%(vc7q#vQy>lIXu{{tWf9Rg)@cL<2Yw>r_4c@-m zd4E4?lyRlGwxh>T%FhjcL#h-mFQm}kD%M|~2I$bBsz{~8({kn}@#xSt;Ll?2kM|?? zPqErEAzLzajZ(78{hKCjVD=I1Ncm~)-C#sJUi_gpSnSb;ipI3z;-|IKcb(AA+__#m zS1_!dzvGy8F@I3IRM4Vbv7gjN?PqkAVd(aZ3%WC-$t=%ji>rVwh7redxu3s#-kf=% zQt!Pl%!|%znYV57|DLmVA1&Try#Ai(7lsPg6$ifX;oYmU>pT}cSKKfEkFnoJ$BzGY z$Ayabvxag`tov2yS95;3>}>b1#>%$OTRU&%{fp;4R<*Bc*WBRTBJ-;ghf+_e_gGQs zfs9kOi^uYhWgl~DFX$KU^r?OR^FK>UvW!97S#7I+M(vV2;#aJIU#N!Z(InQ5NFtzl zjx)bKGRMJXXy6^|xz6L4OH7!Y^s{8342x0rtjCip8h7Cn)oWV)yDvN!357#I8#G4m z%4k{Yk3>hl4KIS@y(?#}z`xmC_3x>&X20@`j|z4*5>JB&97ygdL3U^Uvzig}%;USU zb{WIm7fh|;jqfuHtQu!NPVMv4Y0cJ2?SaIVP$kTHXf3^WOFC^Q_SGV1%QIB*3%-Z_ zO%?a33M}b~EwReYb=HZl`)Z(4T@}Tt=!q^Ol|>^pJR#OVx?SFhtDH&vCh+nE{7Dr+Yv!I+(hdH`ahnUZf^6BI_%ujZQ+t;`wSSTY972ZoCWkKh$bKXi{ z;o#PT3)`8Hkx=D;vH!-e+8e+GCB-d8SQa?e7VE>iQx`X?SVP_yu$C9hp#Ho(cZOIr z3~oKy<+D+;!z}lB_xCw>Q4`vb@d=coaB&5Oy4&*BHpKET-OKrteLD`%mBgY57W(C&75YKxa>-kQ8f7+d^5>v4KuD|X_= z^Z+)oMS8m3#S=XcnA!v4zb^14qgPQVF_`HAnc36C{(Q=8(oIO)Banu)AlIA$2UFNc zn)YiQs-y_WTZ0WQ?V8d{dOJ{8ri%Fa|GbZEd#zU4M)6p>I4eXPJ86#(2*Pd-2>Mb{ zA#VIrHii(H~8iEizP~39h9qXaDqF><-bv>Q!c(jaE(H^~i~YzCq$<k{_Pb50$9YlHaIVz*2T4k_K$uY7*JR z_yPKRpET2azlry)ak;(|9)kH|Cr24EeRC?=c`D&02hpG=bKFVP4Dytbs?=9C{cwV4 z0w%`vvO90k2{nUepLe`3=NIHR8#qNbap$9OZbDm4lX*~aUe)o7W}jCLOa855&_9B$ z@^0nsGvlkU-dt)OOy^76zo@E-7FSMfu|*$xQRWL)gTCod**;q9kKhrVmF<<$ira^_ z8v4*P&0Xyyymu}+PwmdD;Lw&t3A5Ert=WCp99PGVXPS7!6D^*VJ!8tV@=u?ei6!E1 z{%&Tia{lJ|ne0<0UNY1Y$%H?x|HMCZf^rq?BjW*O`Ki|fzIKNH0r~ttptt%5<>ME) z8;p)UDSq_Pd)4fCE|6)iTIM{$#xAw1=`%Gu`VXc==rQRx=)C179!4{eaG7}c7Qw>j zy6U=$CBnzOVE%j2(0$2QcsG80{PO#^wma{x9Xo3dqv8#%Au?VDLKkI3btvYTuMskEKTQ(Oy;!uQ+i>YimqhU%?C!^ ziQLHH-)uo+P$&Ij_K4oQGJuReUBcoUOE77Z9P-!29VUh1^i)mzCe~)q8tEKOQ*#gj z*5&Au^)f<_*e9;iX5A>6)+FAN5Ud?&^R3D@~Die3^ATVaN4_YgL6JmP(+w41M-HK0EtP zg;=#cgIn?MqCZY_`D(2EMxNMD&(AQjC4aNj;F>Qq-(%?Eg;qWBVYBk?W_S5_q$J5% zjmP1v#i^4zKEYT_kuP*-YBP#E4m8v$+4y%2%?WEbZ z_bBfZ+Lu4IegAm;32G8u*uL~1kN?Fs`u}1Z^QW{>ynLjESvR&Yws=Y#FHf}b@(pcd z3{sz@KD1gHFJN{3uzz>z?BiHpq&}4PQ}Z0se27gR4`bU8kU|gdH62w zPLJQs4k?LL;tsD=qP>!{BYhSbp4__@k9bE@2Z)%kPUW(1xj}4|(Z=^>UX1?%??VFb zqDd8;STY@(igEZm&-FO`UF3Qk{;qKCPQ&6T@OSYB_!GL~QgrKM%oygF-GCA+3jK1# z)O_ZI>kRZZwEG;Rk)0l^^W(56{mDoz=iSo30FA};%|+@9oH4>f6Foj8K8OF?@wy}s zX^j_UTuBW_jsVlUiOW6?nZwqo<$KzJs?@pEnMKU8Uq73#+WnnhA8_ym71TuXPrG-g zMtz}qO+-e;b1!w;a7DINS>sjA2z|&1!Y4(!rvj>DKW4nE?! zxx2PFQ)h@xhSjh|4>KxaNs)zY$SdE3mV#;^X0zA>lp$XdPwx*~OXsZ+s|72qrwd%o z%Kn9}beW{MvCO1tnG!~F3k@lrn^|*mpdc^eP3b~DY3tn0)z^wHfsO3OB>ARo1LzCS?Rz%MBsdT@+bTCdJS z`oOy1^0X@OR@+`#$n$emnXx*(E|q-sNYO+72ZNcSGt4%<=I7O=uCW&6(nr(jqs-oI zJ6E7T-z_#E@uFBma|3JLK7K<7LaQ&=UN+co&CLBj#pnL?!m4e?#)2fZR(AJSWVfmqoGyD7ih8C;f53Su^QvUSUu4!uv~~XbSw@$H1yWcTYmS6Z=S9X zxQEaB7aQ(9&ws`DV}_7B{966eXF$5#_pyIY84xDBZ+@J8#$_z8(X!+a-qjt+U!*=lo0B4rX8z1keVZ#^ z=Hb75r*9FQ;^mnix$=pAaXEplKq>`&eA0(^rm>GfE zK3JCeRZ9pDO)K45u`;?dqT+!_J+TG^ic@ExOIIaU35^i)}}3=`@|qb%_%BwtQE<3BBj&uTAWv#lK2;@NLJYIkf?4LqD34 zPO*}Mdsvm2%e=kJ?vk4_G>HzMI?LKzM1-HO5#dKHj11}369Z85SPGiG=ae=x;`ht$ zBgACldp(6FKFde?#CpTJMZ43_oIJD3GvG7d;s$Ol*nm|It6yE}D)ZBntM}eiRVcX9 zwB9UM>xms2GV7d;Y~>}eu?OG(E~i*YkImY&?rZD6k{p<|>B)}H)yX5_-N|>$ZL>Bh zENYX-<=mx`gX~D(ksRo>^_CPBF3`=lJVipHzNd2VqoF5u%H0;ZW5hF_m%Gh!2h3(X zEqBkTu)JBjZ#Pzuu9rE^s!d%Tex|ZeVjOH#<@PG14C^)c6tfjzx2)ptVpVPr|A=E& zUoZOlQf0S?LaOc2wbRb7jD?_!X}efOsM|Xl*hgOMy~h&O#vIX7n)izPQlp4_-MrVi z$C`tCEuKSqwDxf)XZj*xkJTHV2WpffybF%BRJj*j)UvSpsavB`tBMO>uK%wcvfE*~ z9XVl{tiS5idhIXu;4D+BKDGa7gY=-ix8$Bjl#_WfM99J-%c!K)WvL?mli+ExC?JW`QCedhW!F zfcfDoOCHy|l=`|l6G2nsn9|y{=^j~T*%+$z=P^0=Tm9Kw7as_$klvIC9C|m@$SQ@-LC^e$pP5mD-SMRhuU*@* zN&oUgjP7Z8|67pC6h^;G44-cc4vxFQXQz2;>n$`q7EX;LHSgQ*d!#42?C;8n@KXMT zV70?JQKEgxd#OE(Kbi)g8u@g7mpSuyNGTgswLK4PODQ_Dx=FBs;PQvR)wiR%ke&ro zci!4tQdPJnSP2$r4*z>}DC`J_M50hFwUN4^wPCjp_FocxkG<0?{l7s;`A91AqjhT} zu5F&uAs#jIt(L??vRcBY4aMi+bDzDZP36Z+ zZ>v?tL=PbuV&$;0rhM2}x1aXK-RUPpKI*HJm1OZpcZiNbdUB(-*IIqXSD419iov^Z zULGiI>>$nc@e^dicEb@IaD=q1CB!tB=u${ocgZ>wSR4+Cg-|8R#FMoZDptc@4HxEW zr|Re4*QAEtj(mCsx;&3Kl$$VxQCakMySf=Tzj;B%0*5&&z$ldRAFZDX_Wd@<&T=Yq zjk8jlqo1rTj()z({WXvG&Q+)CtM$_jbBI;>#h)}`%lE}+np7+#^_O?@_2IVziw}k1 z%b!4UHQM;ptWfg!B>o0cT^S>(vEi=w!N5WzV&!VmE*_t(7qOLCJ+D-8){9kfH|xdP z^$1>6t5GpYV|+PHV?@83SUT$w;*mDZDHK{m{Jm3SXfb0%3As9_kliaCq5+lpD82|b z{U3f7T_Ni#@6TDj1uEVnk-^=vc5P9qVc|s#$MT1yytG!yZm6s(9p~$e=BK{aI&MGi zoS<~=<8mgUcguB|m(4A)JK@b-eG+HX9cI70Kq0$BREtEme+-FcHd1~xZhfx>*kO{$ zf20a}E6S8}jdxF|gT0uEKH%_p-yblpdb}3y9FGj1rUym;2EP~y`HA9PK8?LThQTaV zMQXC2n18muMWWHwUV#rElQu*lNArzgeGwBRr2Q`sdPapQr!Kr{@O7>u$~CL9%%V+4Zi zPG_!~t_my;&Kk0A-e03iL~2hUi?y>`knU&}m0D3qw58%ixD|sPqgr;5^Fv#L9nQrz zbNujs-%ho6vYqL66n`8ovg!>sG2tU4oR~`I&KOfElVUtGN#!PAvFM>_8N1s%3Okbj zuC%^7>6O1!T3@{dcfxu0)eB~r+HX-Ph`9ZWv=K^bY@9lq36@Zv)-1zrL0bMMiDfBR z@%nIQs$7BV9_am65bsp$8TU_0)P1y`cSyQPI^C*&RrSAY7aZ=smle=-%RT0dcV8wUv^-%*>T-^29{YP9b~F{op=lS}MH z@r>28P>^Pe)6i_nl1=%u%on6rVIp~Qwx{uR99@9NqF#xa;&At+;nl%Tmp&*oBo(X* zNc&wcq)SA$jP}{&hoU9W#@PJIs7%g|haa*yhrUJN5xDB2N5=7pwcCoe!N0_P554J2 zEM*<^#l6;CK{rZ_j`Hcutp}QG;}?v^1$OqDB9^Aq&wN|(@I!b;lOod8w;)&ut;c?? z`|(XObIm2!iK;>)cl?eSsdrqS#5(ztxCI$@x;;p~P5i>1N6g%IwLaXg*1?aupr=jD zVL1HD_AE(w;3`MMyH(Z$o9s5V&alr~1Rr6>w3mIrtkUpnL>B_?9l`&hYHEpad`U*T zRJ{cL!fz-wShNBNUdKAT3tt3iuK%CBw-0aXy7Gm$j$|Q>VhhJ{jK|m~imC|LmWA-R zuE$_W{u075#x}%ZXnY_IVcRlu(8eO29b0jt6)dm)JV@xAu|zK}g$~xz96yyqKeN&OZBd?X~w_d#^9R>g{NZ zYz7@L`G84@VTI4MEcmI@B95^*i|uqbvASGnMKRdao&*hFwg%U0Rc$)V%cLiVy-^SH z#Iv``*)R78RPAkFBO5t8scn#v+v#2&&4KT=Msx5WEwpa%3ul!HO<1LQ^aZ*<@epspqVDl)fgKK#w& z)N(Rb;mML+7BIcAtbGk3xTmm{r<4ZPw6_}PF&M}v`Zw>0Iz6V|FOxS$8N>Vb=j&2ckzWAD; z4_=nQAA6?qH{X(DxWV?v_!ZE}$BCX1W2H%mS_oXPv&gP8pCjr~*MLq{8q*=bg^Pya_QEo8JMn1_&upw77`{0x%50fWPbum~h z@EMGr(a^5RzB`Dg|8AQJ7-uBUm4>QwQAl)-LV}N8&VM8QVh(w-HXyrF=}bg{uJ%MU zT~{m}(F&lFIKFc0#I-L}lO))*29{5Fi+$)Y%~T^2VwpZ8t+;mDQ<-sPfqSaQeGz=4 zC&-bhm}lf+TY+k=0O@smk)VOcVYQIqjrSlYpT=Hf&~!Q>F**cIB=U*ph)GRh#Y;6i z=6%XEI9EzIw1Sy^I;4T#hl+hcnyTOA5Nn{hst+W;ZN=*F3hEgD?*Gz%A5gG^PChBt zJl6<2wr>2Uvr7DmtQx;2R)=2;tH*CPTl91zv#}-koz7l%VaMPp@ft`{Y_T15d)?w} zSE=OUPe%OKFQ$_iHO>9MF6zclX`k&6Ka zd4Nb$JV}hhTA~n;r-vr($GHh+N-km2?9-VYg!|rvH4O6E&0jA;FO`5U0H>j|WzswF zaUF_TA4XVwXUoJ^3X54A1|6FPi+$KPb^PS(ErNmN(F#b?h~On4-+V?ha$S(5_f!jE zze=)oo7_r<7>q?1*Q;w9b5DGPAcT`Jpx_gOsKC7XirIPYtMb2*cWcHtKFt8dIcDO{h4j^nw z-jsu7el7nZV2&8zIVBWMK^}BMyc2nBUIVM>rYUY$R~a;7Q0qLk+w~R7sRSu{#ftVU z=($O=(xrl;ber}Qw+W|2ut#br2)Xv+o=kV_d>S$1IEuAZZCFJo!19$AJsl@$@VgM& z11GtydO8mxsUMBR)CpuQ5!(GlvO~I2#Hbvcr(U+j)j2+KqbH1}E%{Rlrr189zQ~Ki zE~m&q{FGz1?ivTq^dWamD>oCBp5mV3l4AD8fu)+fzaw9Y8pIlz|K1;YIvkrTXojKr zp5_Z$&oLV=Q%UWa&pK5So|f{brFd%OPmNLf|1w#Tr2W8Xi-e-+JQNz6_h|kGSWbtQ zCdz=Orj(y1rP7?JRkhK+12Z&o*OR;&;HA16&HaS3KJk{*jE}t9 zpTQZq(ZqAJKzcO3Z((a+J+&`mD6mY7-bJT#p&2!uq&GFRZ>N{pNNx*6n z-~KFxz+!s~~(L)EKw zbCr^#^|&z7zu~bpQtDG&@S2V-*>Z;dj%|MagJd_e@HeTHD{zm9t#UF&-g&as`Ncx&q zgI&ii1&_A+j{q~cEuTR0)zAoaaf#~1+cX+>ZKT#$lv>kH&7PT;X~Ui`cOv`Gk#>~aSCmz#uu^DUgO`{7GC(d};l|0ai?pvWCIN@aFly&?hFVpD8xsBQ#!fC)! z#G8OSJVeNS(7J<`DCx*Kn0!ZY!omq`8VU^gY$NNNkn)1IICe;b@BS7iD*c!xRwLxT zXq5;57W_SgEW-N$aoy$nu#$8< z;AD?L&SUmqK2P{Cgf&!8{znXelmYgR4B)F0FS|*j3$X-{v56e-;(P`jPECFB2z^3; zCb*=*Z{YUqpcC^Jn*|G2(Q!F2zW#)R?pp~q8iQGou)KVLrO#}cv>zV2@C$Bs6obi5 zFYV4@@VFU#rzE)_JAy=Tp{*=+H_~vt{vJ51Lt>c?@~Nu&snD7(Q03GDzkRTSO*_vg zv9r8Kd{~_AtD^GIMH`IF+VPWhtSA$Fr#>(7o$iU+E6B66b!8GLw0k~1e((Ag8MP8) zBsp!uKF3(B&BQnC4YkPiK4=PHOvg`97XMBm;5jDI+5lM?j19q&n5cKCnKvEh)QNKc zf>5Vb{#P$));^F{XQLefL28D~Oe0al(0G)nY_F+yGq733o+LXKxpAVl4K*8;Yw

  • 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

    x7}%WrKR7RA6@|! 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 Bsa;EVkmUdTq;&i~TDFx9o*!CBMOaJ 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

    M9nW$oPs_lG>qBV+tyt^fo9{LBvwTcaaTsz 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⁢K` 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

    -Bj`ce40%N;y&_k@@CsID(?1s3pK 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�%$Rmz{i8@V=oR$KT0m$9bo$0)lA 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

    &Ex3 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