X-Git-Url: https://hackdaworld.org/gitweb/?p=my-code%2Farm.git;a=blobdiff_plain;f=betty%2Ffwbc.c;h=a617d247a09c6bb626f208aade90ba3fa23a3059;hp=e8fea0da70495e3ff944fa98820a5ad0bc51cd93;hb=63b32f389164de54b110cb6441e1569aee466a82;hpb=67e8acdb6e63a64f34120318e44238869891deff diff --git a/betty/fwbc.c b/betty/fwbc.c index e8fea0d..a617d24 100644 --- a/betty/fwbc.c +++ b/betty/fwbc.c @@ -27,9 +27,10 @@ #define MMAP_RAM 0x02 #define MMAP_EXT 0x03 -/* band 0/2 addr */ +/* band 0/2 & bootloader addr */ #define BANK0 0x80000000 #define BANK2 0x82000000 +#define BOOTLOADER 0x7fffe000 /* * type definitions @@ -56,8 +57,9 @@ int main(void) { /* variables */ - u16 *flash; - u32 i; + u16 *mem; + u32 *bl; + u32 i,len; u8 start; /* memory mapping of interrupt vectors to static ram */ @@ -79,25 +81,59 @@ int main(void) { BCFG0=0x1000FBEF; // no boot[1:0] influence? (thnx colibri) // BCFG2 should be fine as is - flash=(u16 *)BANK0; /* wait for fwdump to send transmit start character */ - start=0; - while(start!=0x23) { + start=0x23; + while(1) { while(!(UART0_LSR&(1<<0))) continue; start=UART0_RBR; + if(start=='0') { + mem=(u16 *)BANK0; + len=0x80000; + break; + } + if(start=='2') { + mem=(u16 *)BANK2; + len=0x80000; + break; + } + if(start=='b') { + BCFG0=0x1000FBEF; // 32 bit width + bl=(u32 *)BOOTLOADER; + len=0x800; + break; + } } /* transmit 1 mb of data */ - for(i=0;i<524288;i++) { + for(i=0;i>8); - flash++; + if(start=='b') + UART0_THR=((*bl&0xff00)>>8); + else { + UART0_THR=((*mem&0xff00)>>8); + mem++; + } + + if(start=='b') { + while(!(UART0_LSR&(1<<5))) + continue; + UART0_THR=((*bl&0xff0000)>>16); + while(!(UART0_LSR&(1<<5))) + continue; + UART0_THR=((*bl&0xff000000)>>24); + bl++; + } } return 0;