summaryrefslogtreecommitdiffstats
path: root/bootloader
diff options
context:
space:
mode:
Diffstat (limited to 'bootloader')
-rw-r--r--bootloader/SOURCES6
-rw-r--r--bootloader/e200.c190
-rw-r--r--bootloader/main-pp.c (renamed from bootloader/h10.c)26
3 files changed, 16 insertions, 206 deletions
diff --git a/bootloader/SOURCES b/bootloader/SOURCES
index 94f5a60e6b..b86365b429 100644
--- a/bootloader/SOURCES
+++ b/bootloader/SOURCES
@@ -2,10 +2,8 @@
ipod.c
#elif defined(GIGABEAT_F)
gigabeat.c
-#elif defined(SANSA_E200)
-e200.c
-#elif defined(IRIVER_H10) || defined(IRIVER_H10_5GB)
-h10.c
+#elif defined(IRIVER_H10) || defined(IRIVER_H10_5GB) || defined(SANSA_E200)
+main-pp.c
#elif defined(ELIO_TPJ1022)
tpj1022.c
#else
diff --git a/bootloader/e200.c b/bootloader/e200.c
deleted file mode 100644
index 27b1118a1c..0000000000
--- a/bootloader/e200.c
+++ /dev/null
@@ -1,190 +0,0 @@
-/***************************************************************************
- * __________ __ ___.
- * Open \______ \ ____ ____ | | _\_ |__ _______ ___
- * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
- * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
- * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
- * \/ \/ \/ \/ \/
- * $Id$
- *
- * Copyright (C) 2006 Daniel Stenberg
- *
- * All files in this archive are subject to the GNU General Public License.
- * See the file COPYING in the source tree root for full license agreement.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ****************************************************************************/
-#include "config.h"
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include "cpu.h"
-#include "system.h"
-#include "lcd.h"
-#include "kernel.h"
-#include "thread.h"
-#include "ata.h"
-#include "fat.h"
-#include "disk.h"
-#include "font.h"
-#include "adc.h"
-#include "backlight.h"
-#include "panic.h"
-#include "power.h"
-#include "file.h"
-
-static inline void blink(void)
-{
- volatile unsigned int* ptr;
- int i;
- ptr = (volatile unsigned int*)0x70000020;
-
- *ptr &= ~(1 << 13);
- for(i = 0; i < 0xfffff; i++)
- {
- }
- *ptr |= (1 << 13);
- for(i = 0; i < 0xfffff; i++)
- {
- }
-}
-
-static inline void slow_blink(void)
-{
- volatile unsigned int* ptr;
- int i;
- ptr = (volatile unsigned int*)0x70000020;
-
- *ptr &= ~(1 << 13);
- for(i = 0; i < (0xfffff); i++)
- {
- }
- for(i = 0; i < (0xfffff); i++)
- {
- }
- for(i = 0; i < (0xfffff); i++)
- {
- }
-
- *ptr |= (1 << 13);
- for(i = 0; i < (0xfffff); i++)
- {
- }
- for(i = 0; i < (0xfffff); i++)
- {
- }
- for(i = 0; i < (0xfffff); i++)
- {
- }
-}
-
-static inline unsigned long get_pc(void)
-{
- unsigned long pc;
- asm volatile (
- "mov %0, pc\n"
- : "=r"(pc)
- );
- return pc;
-}
-
-/* These functions are present in the firmware library, but we reimplement
- them here because the originals do a lot more than we want */
-
-void reset_poweroff_timer(void)
-{
-}
-
-int dbg_ports(void)
-{
- unsigned int gpio_a, gpio_b, gpio_c, gpio_d;
- unsigned int gpio_e, gpio_f, gpio_g, gpio_h;
- unsigned int gpio_i, gpio_j, gpio_k, gpio_l;
-
- char buf[128];
- int line;
-
- lcd_setmargins(0, 0);
- lcd_clear_display();
- lcd_setfont(FONT_SYSFIXED);
-
- while(1)
- {
- gpio_a = GPIOA_INPUT_VAL;
- gpio_b = GPIOB_INPUT_VAL;
- gpio_c = GPIOC_INPUT_VAL;
-
- gpio_g = GPIOG_INPUT_VAL;
- gpio_h = GPIOH_INPUT_VAL;
- gpio_i = GPIOI_INPUT_VAL;
-
- line = 0;
- snprintf(buf, sizeof(buf), "GPIO_A: %02x GPIO_G: %02x", gpio_a, gpio_g);
- lcd_puts(0, line++, buf);
- snprintf(buf, sizeof(buf), "GPIO_B: %02x GPIO_H: %02x", gpio_b, gpio_h);
- lcd_puts(0, line++, buf);
- snprintf(buf, sizeof(buf), "GPIO_C: %02x GPIO_I: %02x", gpio_c, gpio_i);
- lcd_puts(0, line++, buf);
- line++;
-
- gpio_d = GPIOD_INPUT_VAL;
- gpio_e = GPIOE_INPUT_VAL;
- gpio_f = GPIOF_INPUT_VAL;
-
- gpio_j = GPIOJ_INPUT_VAL;
- gpio_k = GPIOK_INPUT_VAL;
- gpio_l = GPIOL_INPUT_VAL;
-
- snprintf(buf, sizeof(buf), "GPIO_D: %02x GPIO_J: %02x", gpio_d, gpio_j);
- lcd_puts(0, line++, buf);
- snprintf(buf, sizeof(buf), "GPIO_E: %02x GPIO_K: %02x", gpio_e, gpio_k);
- lcd_puts(0, line++, buf);
- snprintf(buf, sizeof(buf), "GPIO_F: %02x GPIO_L: %02x", gpio_f, gpio_l);
- lcd_puts(0, line++, buf);
- line++;
- snprintf(buf, sizeof(buf), "ADC_1: %02x", adc_read(ADC_0));
- lcd_puts(0, line++, buf);
- snprintf(buf, sizeof(buf), "ADC_2: %02x", adc_read(ADC_1));
- lcd_puts(0, line++, buf);
- snprintf(buf, sizeof(buf), "ADC_3: %02x", adc_read(ADC_2));
- lcd_puts(0, line++, buf);
- snprintf(buf, sizeof(buf), "ADC_4: %02x", adc_read(ADC_3));
- lcd_puts(0, line++, buf);
- lcd_update();
- }
- return 0;
-}
-
-void mpeg_stop(void)
-{
-}
-
-void usb_acknowledge(void)
-{
-}
-
-void usb_wait_for_disconnect(void)
-{
-}
-
-void sys_poweroff(void)
-{
-}
-
-void system_reboot(void)
-{
-
-}
-
-void main(void)
-{
- kernel_init();
- adc_init();
- lcd_init_device();
-
- dbg_ports();
-}
-
diff --git a/bootloader/h10.c b/bootloader/main-pp.c
index 0cfd64a96e..a533cc7044 100644
--- a/bootloader/h10.c
+++ b/bootloader/main-pp.c
@@ -40,8 +40,8 @@
#include "power.h"
#include "file.h"
-/* Size of the buffer to store the loaded Rockbox/iriver image */
-#define MAX_LOADSIZE (5*1024*1024)
+/* Size of the buffer to store the loaded firmware image */
+#define MAX_LOADSIZE (10*1024*1024)
/* A buffer to load the iriver firmware or Rockbox into */
unsigned char loadbuffer[MAX_LOADSIZE];
@@ -52,18 +52,18 @@ char version[] = APPSVERSION;
int line=0;
-/* Load original iriver firmware. This function expects a file called
- "/System/Original.mi4" on the player. It should be decrypted
- and have the header stripped using mi4code. It reads the file in to a memory
+/* Load original mi4 firmware. This function expects a file called
+ "/System/OF.bin" on the player. It should be a mi4 firmware decrypted
+ and header stripped using mi4code. It reads the file in to a memory
buffer called buf. The rest of the loading is done in main() and crt0.S
*/
-int load_iriver(unsigned char* buf)
+int load_original_firmware(unsigned char* buf)
{
int fd;
int rc;
int len;
- fd = open("/System/Original.mi4", O_RDONLY);
+ fd = open("/System/OF.bin", O_RDONLY);
len = filesize(fd);
@@ -78,7 +78,7 @@ int load_iriver(unsigned char* buf)
return len;
}
-/* Load Rockbox firmware (rockbox.h10) */
+/* Load Rockbox firmware (rockbox.*) */
int load_rockbox(unsigned char* buf)
{
int fd;
@@ -164,6 +164,7 @@ void* main(void)
kernel_init();
lcd_init();
font_init();
+ button_init();
line=0;
@@ -172,7 +173,7 @@ void* main(void)
lcd_puts(0, line++, "Rockbox boot loader");
snprintf(buf, sizeof(buf), "Version: 20%s", version);
lcd_puts(0, line++, buf);
- snprintf(buf, sizeof(buf), "iriver H10");
+ snprintf(buf, sizeof(buf), MODEL_NAME);
lcd_puts(0, line++, buf);
lcd_update();
@@ -212,11 +213,11 @@ void* main(void)
i=button_read_device();
if(i==BUTTON_LEFT)
{
- lcd_puts(0, line, "Loading iriver firmware...");
+ lcd_puts(0, line++, "Loading original firmware...");
lcd_update();
- rc=load_iriver(loadbuffer);
+ rc=load_original_firmware(loadbuffer);
} else {
- lcd_puts(0, line, "Loading Rockbox...");
+ lcd_puts(0, line++, "Loading Rockbox...");
lcd_update();
rc=load_rockbox(loadbuffer);
}
@@ -225,6 +226,7 @@ void* main(void)
snprintf(buf, sizeof(buf), "Rockbox error: %d",rc);
lcd_puts(0, line++, buf);
lcd_update();
+ while(1) {}
}
memcpy((void*)DRAM_START,loadbuffer,rc);