2 BootMii - a Free Software replacement for the Nintendo/BroadOn bootloader.
5 Copyright (C) 2008, 2009 Haxx Enterprises <bushing@gmail.com>
6 Copyright (C) 2009 Andre Heider "dhewg" <dhewg@wiibrew.org>
7 Copyright (C) 2008, 2009 Hector Martin "marcan" <marcan@marcansoft.com>
8 Copyright (C) 2008, 2009 Sven Peter <svenpeter@gmail.com>
9 Copyright (C) 2009 John Kelley <wiidev@kelley.ca>
11 # This code is licensed to you under the terms of the GNU GPL, version 2;
12 # see file COPYING or http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
15 #include "bootmii_ppc.h"
24 #include "video_low.h"
28 #include "usb/core/core.h"
29 #include "usb/drivers/class/hid.h"
31 #include "hollywood.h"
33 #define MINIMUM_MINI_VERSION 0x00010001
38 static void dsp_reset(void)
40 write16(0x0c00500a, read16(0x0c00500a) & ~0x01f8);
41 write16(0x0c00500a, read16(0x0c00500a) | 0x0010);
42 write16(0x0c005036, 0);
45 static char ascii(char s) {
46 if(s < 0x20) return '.';
47 if(s > 0x7E) return '.';
51 void hexdump(void *d, int len) {
55 for (off=0; off<len; off += 16) {
58 if((i+off)>=len) printf(" ");
59 else printf("%02x ",data[off+i]);
63 if((i+off)>=len) printf(" ");
64 else printf("%c",ascii(data[off+i]));
71 printf("reading OTP...\n");
73 printf("read OTP!\n");
75 hexdump(&otp, sizeof(otp));
77 printf("reading SEEPROM...\n");
79 printf("read SEEPROM!\n");
81 hexdump(&seeprom, sizeof(seeprom));
91 irq_bw_enable(BW_PI_IRQ_RESET);
92 irq_bw_enable(BW_PI_IRQ_HW); //hollywood pic
94 irq_hw_enable(IRQ_OHCI0);
96 //irq_hw_enable(IRQ_OHCI1);
106 VIDEO_SetFrameBuffer(get_xfb());
109 u32 version = ipc_getvers();
110 u16 mini_version_major = version >> 16 & 0xFFFF;
111 u16 mini_version_minor = version & 0xFFFF;
112 printf("Mini version: %d.%0d\n", mini_version_major, mini_version_minor);
114 if (version < MINIMUM_MINI_VERSION) {
115 printf("Sorry, this version of MINI (armboot.bin)\n"
116 "is too old, please update to at least %d.%0d.\n",
117 (MINIMUM_MINI_VERSION >> 16), (MINIMUM_MINI_VERSION & 0xFFFF));
119 ; // better ideas welcome!
123 usb_init(OHCI0_REG_BASE);
126 //usb_init(OHCI1_REG_BASE);
128 /* load HID keyboard driver */
131 /* you are welcome to make this nice :) */
133 u16 i, j, y=20, x=20;
137 memset(str, '\0', 8);
139 k = usb_hidkb_getChars();
140 for(i=0; k->keys[i]>0; i++) {
148 if((k->keys[i] >= 4) && k->keys[i] <= 4+'z'-'a') {
149 str[j] = k->keys[i] - 4 + 'a';
151 else if (k->keys[i] == 0x28) {
158 print_str_noscroll(x, y, str);
159 printf("y: %d\n", y);
167 printf("===============================\n");
171 printf("bye, world!\n");