1
0
Fork 0
forked from len0rd/rockbox

Make the Telechips bootloader slightly less messy, kill some warnings and allow entry to the bootloader debug screen via the D2's hold switch.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16879 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Rob Purchase 2008-03-29 17:26:16 +00:00
parent edf6d90ca4
commit 3b46671a40

View file

@ -35,6 +35,7 @@
#include "button.h"
#include "adc.h"
#include "adc-target.h"
#include "backlight.h"
#include "backlight-target.h"
#include "panic.h"
#include "power.h"
@ -52,67 +53,13 @@ extern int line;
#define MAX_LOAD_SIZE (8*1024*1024) /* Arbitrary, but plenty. */
void* main(void)
void show_debug_screen(void)
{
int button;
int power_count = 0;
int count = 0;
bool do_power_off = false;
#if defined(COWON_D2) && defined(TCCBOOT)
int rc;
unsigned char* loadbuffer = (unsigned char*)LOAD_ADDRESS;
#endif
power_init();
system_init();
lcd_init();
adc_init();
button_init();
backlight_init();
font_init();
lcd_setfont(FONT_SYSFIXED);
_backlight_on();
/* Only load the firmware if TCCBOOT is defined - this ensures SDRAM_START is
available for loading the firmware. Otherwise display the debug screen. */
#if defined(COWON_D2) && defined(TCCBOOT)
printf("Rockbox boot loader");
printf("Version %s", version);
printf("ATA");
rc = ata_init();
if(rc)
{
reset_screen();
error(EATA, rc);
}
printf("mount");
rc = disk_mount_all();
if (rc<=0)
{
error(EDISK,rc);
}
rc = load_firmware(loadbuffer, BOOTFILE, MAX_LOAD_SIZE);
if (rc < 0)
{
error(EBOOTFILE,rc);
}
else if (rc == EOK)
{
int(*kernel_entry)(void);
kernel_entry = (void*) loadbuffer;
rc = kernel_entry();
}
#else
while(!do_power_off) {
line = 0;
printf("Hello World!");
@ -186,8 +133,72 @@ void* main(void)
power_off();
printf("(NOT) POWERED OFF");
while (true);
}
void* main(void)
{
#if defined(COWON_D2) && defined(TCCBOOT)
int rc;
unsigned char* loadbuffer = (unsigned char*)LOAD_ADDRESS;
#endif
power_init();
system_init();
lcd_init();
adc_init();
button_init();
backlight_init();
font_init();
lcd_setfont(FONT_SYSFIXED);
_backlight_on();
/* Only load the firmware if TCCBOOT is defined - this ensures SDRAM_START is
available for loading the firmware. Otherwise display the debug screen. */
#if defined(COWON_D2) && defined(TCCBOOT)
printf("Rockbox boot loader");
printf("Version %s", version);
printf("ATA");
rc = ata_init();
if(rc)
{
reset_screen();
error(EATA, rc);
}
printf("mount");
rc = disk_mount_all();
if (rc<=0)
{
error(EDISK,rc);
}
rc = load_firmware(loadbuffer, BOOTFILE, MAX_LOAD_SIZE);
if (rc < 0)
{
error(EBOOTFILE,rc);
}
else if (rc == EOK)
{
int(*kernel_entry)(void);
/* wait for button release to allow debug statememts to be read */
while (button_read_device()) {};
kernel_entry = (void*) loadbuffer;
/* allow entry to the debug screen if hold is on */
if (!button_hold()) rc = kernel_entry();
}
#endif
show_debug_screen();
return 0;
}