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"
29 #define MINIMUM_MINI_VERSION 0x00010001
34 static void dsp_reset(void)
36 write16(0x0c00500a, read16(0x0c00500a) & ~0x01f8);
37 write16(0x0c00500a, read16(0x0c00500a) | 0x0010);
38 write16(0x0c005036, 0);
41 static char ascii(char s) {
42 if(s < 0x20) return '.';
43 if(s > 0x7E) return '.';
47 void hexdump(void *d, int len) {
51 for (off=0; off<len; off += 16) {
54 if((i+off)>=len) printf(" ");
55 else printf("%02x ",data[off+i]);
59 if((i+off)>=len) printf(" ");
60 else printf("%c",ascii(data[off+i]));
67 printf("reading OTP...\n");
69 printf("read OTP!\n");
71 hexdump(&otp, sizeof(otp));
73 printf("reading SEEPROM...\n");
75 printf("read SEEPROM!\n");
77 hexdump(&seeprom, sizeof(seeprom));
86 // clear interrupt mask
87 write32(0x0c003004, 0);
98 VIDEO_SetFrameBuffer(get_xfb());
101 u32 version = ipc_getvers();
102 u16 mini_version_major = version >> 16 & 0xFFFF;
103 u16 mini_version_minor = version & 0xFFFF;
104 printf("Mini version: %d.%0d\n", mini_version_major, mini_version_minor);
106 if (version < MINIMUM_MINI_VERSION) {
107 printf("Sorry, this version of MINI (armboot.bin)\n"
108 "is too old, please update to at least %d.%0d.\n",
109 (MINIMUM_MINI_VERSION >> 16), (MINIMUM_MINI_VERSION & 0xFFFF));
111 ; // better ideas welcome!
114 print_str_noscroll(112, 112, "ohai, world!\n");
118 printf("bye, world!\n");
120 // enable OHCI0 interrupt on hollywood-pic
121 #define HW_PPCIRQFLAG (0x0d800030)
122 #define HW_PPCIRQMASK (0x0d800034)
123 write32(HW_PPCIRQFLAG, ~0);
124 write32(HW_PPCIRQMASK, 1<<5);
125 // enable RESET and PIC (#14) interrupts on processor interface
126 write32(0x0c003004, (1<<1) | (1<<14));
127 #define _CPU_ISR_Enable() \
128 { register u32 _val = 0; \
129 __asm__ __volatile__ ( \
131 "ori %0,%0,0x8000\n" \
133 : "=&r" ((_val)) : "0" ((_val)) \