diff --git a/bootloader/common.c b/bootloader/common.c index 7159faaa8f..c9309a67db 100644 --- a/bootloader/common.c +++ b/bootloader/common.c @@ -40,7 +40,8 @@ #if defined(IPOD_ARCH) || defined(IRIVER_H10) || defined(IRIVER_H10_5GB) \ || defined(SANSA_E200) || defined(SANSA_C200) || defined(GIGABEAT_F) \ || defined(PHILIPS_SA9200) || (CONFIG_CPU == AS3525) || defined(COWON_D2) \ - || defined(MROBE_100) || defined(PHILIPS_HDD1630) || defined(ONDA_VX747) + || defined(MROBE_100) || defined(PHILIPS_HDD1630) || defined(ONDA_VX747) \ + || defined(MROBE_500) bool verbose = false; #else bool verbose = true; diff --git a/bootloader/mrobe500.c b/bootloader/mrobe500.c index e503baa01d..9052cbdc3c 100644 --- a/bootloader/mrobe500.c +++ b/bootloader/mrobe500.c @@ -46,147 +46,6 @@ #include "time.h" #include "system-arm.h" -//#define MRDEBUG - -#if defined(MRDEBUG) - -extern int line; -#if 0 -struct touch_calibration_point tl, br; - -void touchscreen_get_one_point(struct touch_calibration_point *p) -{ - int data = 0; - int start = current_tick; - while (TIME_AFTER(start+(HZ/3), current_tick)) - { - if (button_read_device()&BUTTON_TOUCHSCREEN) - { - data = button_get_last_touch(); - p->val_x = data>>16; - p->val_y = data&0xffff; - start = current_tick; - } - else if (data == 0) - start = current_tick; - } -} - -#define MARGIN 25 -#define LEN 7 -void touchscreen_calibrate_screen(void) -{ - reset_screen(); - printf("touch the center of the crosshairs to calibrate"); - /* get the topleft value */ - lcd_hline(MARGIN-LEN, MARGIN+LEN, MARGIN); - lcd_vline(MARGIN, MARGIN-LEN, MARGIN+LEN); - lcd_update(); - tl.px_x = MARGIN; tl.px_y = MARGIN; - touchscreen_get_one_point(&tl); - reset_screen(); - printf("touch the center of the crosshairs to calibrate"); - /* get the topright value */ - lcd_hline(LCD_WIDTH-MARGIN-LEN, LCD_WIDTH-MARGIN+LEN, LCD_HEIGHT-MARGIN); - lcd_vline(LCD_WIDTH-MARGIN, LCD_HEIGHT-MARGIN-LEN, LCD_HEIGHT-MARGIN+LEN); - lcd_update(); - br.px_x = LCD_WIDTH-MARGIN; br.px_y = LCD_HEIGHT-MARGIN; - touchscreen_get_one_point(&br); - reset_screen(); - line++; - printf("tl %d %d", tl.val_x, tl.val_y); - printf("br %d %d", br.val_x, br.val_y); - line++; - set_calibration_points(&tl, &br); -} -#endif -static uint8_t bl_command[] = {0xa4, 0x00, 0x00, 0xbb}; -int brightness = 0; - -void mrdebug(void) -{ - int button=0; -#if 0 - use_calibration(false); - touchscreen_calibrate_screen(); - use_calibration(true); -#endif - - while(true) - { -#if 0 - struct tm *t = get_time(); - printf("%d:%d:%d %d %d %d", t->tm_hour, t->tm_min, t->tm_sec, t->tm_mday, t->tm_mon, t->tm_year); - printf("time: %d", mktime(t)); -#endif - button = button_get(false); - if (button == BUTTON_POWER) - { - printf("reset"); - IO_GIO_BITSET1|=1<<10; - } - if (button==BUTTON_RC_VOL_DOWN) - { - brightness = (brightness - 5) & 0x7f; - bl_command[2] = brightness; - spi_block_transfer(SPI_target_BACKLIGHT, bl_command, 4, 0, 0); - } - else if (button==BUTTON_RC_VOL_UP) - { - brightness = (brightness + 5) & 0x7f; - bl_command[2] = brightness; - spi_block_transfer(SPI_target_BACKLIGHT, bl_command, 4, 0, 0); - } -// { -// short x,y,z1,z2; -// tsc2100_read_values(&x, &y, &z1, &z2); -// printf("x: %04x y: %04x z1: %04x z2: %04x", x, y, z1, z2); -// printf("tsadc: %4x", tsc2100_readreg(TSADC_PAGE, TSADC_ADDRESS)&0xffff); -// // tsc2100_keyclick(); /* doesnt work :( */ -// line -= 6; -// } - else if (button == BUTTON_RC_HEART) - { - printf("POINT"); - touchscreen_set_mode(TOUCHSCREEN_POINT); - } - else if (button == BUTTON_RC_MODE) - { - printf("BUTTON"); - touchscreen_set_mode(TOUCHSCREEN_BUTTON); - } -#if 1 - else if (button&BUTTON_TOUCHSCREEN) - { - if (button&BUTTON_REL) - continue; - unsigned int data = button_get_data(); - int x = (data&0xffff0000)>>16, y = data&0x0000ffff; - reset_screen(); - line = 9; - printf("BB: %x %d %d", button, x,y); - lcd_hline(x-5, x+5, y); - lcd_vline(x, y-5, y+5); - lcd_update(); - } - else if (button == BUTTON_RC_PLAY) - { - reset_screen(); - } - - else if (button) - { - // if (button&BUTTON_REL) - { - printf("%08x %s\n", button, (button&BUTTON_REL)?"yes":"no"); - } - } - -#endif - } -} -#endif - void main(void) { unsigned char* loadbuffer; @@ -252,10 +111,6 @@ void main(void) lcd_update(); } -#if defined(MRDEBUG) - mrdebug(); -#endif - sleep(50); printf("ATA"); diff --git a/firmware/target/arm/tms320dm320/boot.lds b/firmware/target/arm/tms320dm320/boot.lds index e391526dc5..ff8203ccd8 100644 --- a/firmware/target/arm/tms320dm320/boot.lds +++ b/firmware/target/arm/tms320dm320/boot.lds @@ -6,24 +6,42 @@ OUTPUT_FORMAT(elf32-littlearm) OUTPUT_ARCH(arm) STARTUP(target/arm/tms320dm320/crt0.o) -#define LCD_BUFFER_SIZE (LCD_WIDTH*LCD_HEIGHT*2) +#ifdef DEBUG +#define STUBOFFSET 0x10000 +#else +#define STUBOFFSET 0 +#endif + +#ifndef LCD_NATIVE_WIDTH +#define LCD_NATIVE_WIDTH LCD_WIDTH +#endif + +#ifndef LCD_NATIVE_HEIGHT +#define LCD_NATIVE_HEIGHT LCD_HEIGHT +#endif + +#define LCD_FUDGE LCD_NATIVE_WIDTH%32 + +#define LCD_BUFFER_SIZE ((LCD_NATIVE_WIDTH+LCD_FUDGE)*LCD_NATIVE_HEIGHT*2) /* must be 16Kb (0x4000) aligned */ #define TTB_SIZE (0x4000) -#define DRAMSIZE (MEMORYSIZE * 0x100000) - TTB_SIZE - LCD_BUFFER_SIZE +/* Give this 1 meg to allow it to align to the MMU boundary */ +#define LCD_TTB_AREA 0x100000 -#define DRAMORIG 0x01900000 /* actually it's 0x00900000 */ -#define IRAMORIG 0x00000000 -#define IRAMSIZE 16K -#define FLASHORIG 0x00100000 -#define FLASHSIZE 8M +#define BOOT_OFFSET 0x1000000 -/* Now we have the LCD buffer */ -#define LCDBEGIN (DRAMSIZE+0x00900000) +#define DRAMSIZE (MEMORYSIZE * 0x100000) - STUBOFFSET - BOOT_OFFSET -/* Finally the TTB table */ -#define TTBBEGIN (LCDBEGIN + LCD_BUFFER_SIZE) +#define DRAMORIG (0x00900000+BOOT_OFFSET) /* actually it's 0x00900000 */ +#define IRAMORIG 0x00000000 +#define IRAMSIZE 0x4000 +#define FLASHORIG 0x00100000 +#define FLASHSIZE 8M + +/* End of the audio buffer, where the codec buffer starts */ +#define TTB_BEGIN (DRAMORIG + DRAMSIZE - LCD_TTB_AREA) MEMORY { @@ -40,7 +58,6 @@ SECTIONS loadaddress = .; _loadaddress = .; *(.init.text) - *(.icode) *(.text*) *(.glue_7) *(.glue_7t) @@ -53,7 +70,6 @@ SECTIONS *(.rodata*) *(.rodata.str1.1) *(.rodata.str1.4) - *(.irodata) . = ALIGN(0x4); /* Pseudo-allocate the copies of the data sections */ @@ -61,31 +77,11 @@ SECTIONS } > DRAM .data : { - *(.idata) *(.data*) . = ALIGN(0x4); _dataend = . ; } > DRAM - .stack : - { - *(.stack) - _stackbegin = .; - stackbegin = .; - . += 0x2000; - _stackend = .; - stackend = .; - } > DRAM - - .bss : - { - _edata = .; - *(.bss*); - *(.ibss); - *(COMMON) - _end = .; - } > DRAM - .vectors IRAMORIG : { _vectorsstart = .; @@ -94,16 +90,57 @@ SECTIONS KEEP(*(.vectors)); *(.vectors); _vectorsend = .; - } AT > DRAM + } > IRAM AT > DRAM _vectorscopy = LOADADDR(.vectors); - .lcdbuffer LCDBEGIN (NOLOAD) : + .iram : + { + _iramstart = .; + *(.icode) + *(.irodata*) + *(.idata) + . = ALIGN(0x4); + _iramend = .; + } > IRAM AT> DRAM + + _iramcopy = LOADADDR(.iram); + + .ibss (NOLOAD) : + { + _iedata = .; + *(.ibss) + . = ALIGN(0x4); + _iend = .; + } > IRAM + + .stack (NOLOAD) : + { + *(.stack) + stackbegin = .; + . += 0x2000; + stackend = .; + } > IRAM + + .bss (NOLOAD) : + { + . = ADDR(.data) + SIZEOF(.data) + SIZEOF(.vectors) + SIZEOF(.iram); + _edata = .; + *(.bss*) + *(COMMON) + . = ALIGN(0x4); + _end = .; + } > DRAM + + .ttbtable TTB_BEGIN (NOLOAD) : + { + . = ALIGN (0x4000); + _ttbstart = .; + . += TTB_SIZE; + } > DRAM + + .lcdbuffer (NOLOAD) : { _lcdbuf = .; - } - - .ttbtable TTBBEGIN (NOLOAD) : - { - _ttbstart = .; - } + . += LCD_BUFFER_SIZE; + } > DRAM } diff --git a/firmware/target/arm/tms320dm320/crt0.S b/firmware/target/arm/tms320dm320/crt0.S index a5a965b9c2..0243c13971 100755 --- a/firmware/target/arm/tms320dm320/crt0.S +++ b/firmware/target/arm/tms320dm320/crt0.S @@ -54,7 +54,7 @@ start: orr r0, r0, #0x00000002 mcr p15, 0, r0, c1, c0, 0 -#if !defined(BOOTLOADER) && !defined(STUB) +#if !defined(STUB) /* Zero out IBSS */ ldr r2, =_iedata ldr r3, =_iend diff --git a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c index 1334eeaf8d..54e1dc0cf2 100644 --- a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c +++ b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c @@ -127,8 +127,6 @@ void lcd_init_device(void) /* Clear the Frame */ memset16(FRAME, 0x0000, LCD_WIDTH*LCD_HEIGHT); - lcd_sleep(); - IO_OSD_OSDWINMD0&=~(0x0001); IO_OSD_VIDWINMD&=~(0x0001); @@ -242,8 +240,6 @@ void lcd_init_device(void) IO_OSD_OSDWINMD0|=0x01; IO_VID_ENC_VMOD|=0x01; - - lcd_enable(true); } /* Update a fraction of the display. */