; 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