34 #include "sys/clock.h"
40 #include "dev/flash.h"
42 #include "loader/loader-arch.h"
44 void *loader_arch_codeaddr, *loader_arch_dataaddr;
47 #define FLASHADDR ((char *)0x8000)
48 #define DATAADDR ((char *)0x900)
51 #define beep(n) do { } while (0)
52 #define beep_beep(n) do { } while (0)
56 loader_arch_load(
unsigned short startaddr)
59 unsigned short codelen, datalen, sumlen;
62 unsigned short *flashptr;
63 void (* init)(
void *);
64 unsigned char tmpdata[READSIZE];
76 if(tmp !=
UIP_HTONS(LOADER_ARCH_VERSION)) {
89 for(i = 0; sumlen - i > READSIZE; i += READSIZE) {
92 for(j = 0; j < READSIZE; ++j) {
94 if(sum < tmpdata[j]) {
102 for(j = 0; j < sumlen - i; ++j) {
104 if(sum < tmpdata[j]) {
115 for(i = 0; i < (sum >> 4); ++i) {
117 for(j = 0; j < 2; ++j) {
122 for(j = 0; j < 8; ++j) {
126 for(i = 0; i < (sum & 0x0f); ++i) {
128 for(j = 0; j < 2; ++j) {
139 for(i = 0; i < 4; ++i) {
141 for(j = 0; j < 2; ++j) {
163 flashptr = (
unsigned short *)FLASHADDR;
164 for(ptr = startaddr + 2; ptr < startaddr + 2 + codelen; ptr += READSIZE) {
170 if((((
unsigned short)flashptr) & 0x01ff) == 0) {
179 for(i = 0; i < READSIZE / 2; ++i) {
180 flash_write(flashptr, ((
unsigned short *)DATAADDR)[i]);
192 eeprom_read(startaddr + 2 + codelen, (
char *)&datalen, 2);
199 eeprom_read(startaddr + 2 + codelen + 2, DATAADDR, datalen);
202 for(i = 0; i < 4; ++i) {
210 init = ((void (*)(
void *))FLASHADDR);
215 loader_arch_free(
void *code,
void *data)