; 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