__inline int putchar(int c) { while(!(HW_UART(REG_UART)&(1<<REG_UART_TXREADY))) ; HW_UART(REG_UART)=c; return(c); }
char getserial() { int r=0; while(!(r&(1<<REG_UART_RXINT))) r=HW_UART(REG_UART); return(r); }
int main(int argc,char **argv) { HW_UART(REG_UART_CLKDIV)=(1000*HW_BOARD(REG_CAP_CLOCKSPEED))/1152; SetHeartbeat(); EnableInterrupts(); Dhrystone(); }
static void _initIO(void) { HW_UART(REG_UART_CLKDIV)=(1000*HW_BOARD(REG_CAP_CLOCKSPEED))/1152; HW_TIMER(REG_TIMER_DIV0)=HW_BOARD(REG_CAP_CLOCKSPEED)*2; // Clocks 1 through 6 are now based on 100kHZ base clock. _init_sd(); }
int main(int argc,char **argv) { int i; HW_VGA(FRAMEBUFFERPTR)=0x00000; puts("Initializing SD card\n"); if(spi_init()) { puts("Hunting for partition\n"); FindDrive(); if(LoadFile("MANIFESTMST",Manifest)) { unsigned char *buffer=Manifest; int ptr; puts("Parsing manifest\n"); while(1) { unsigned char c=0; ptr=0; // Parse address while((c=*buffer++)!=' ') { HW_UART(REG_UART)=c; if(c=='#') // Comment line? break; if(c=='G') _boot(); if(c=='\n') _break(); // Halt CPU if(c=='L') buffer=Manifest; c=(c&~32)-('0'-32); // Convert to upper case if(c>='9') c-='A'-'0'; ptr<<=4; ptr|=c; } // Parse filename if(c!='#') { int i; while((c=*buffer++)==' ') ; --buffer; // c-1 is now the filename pointer // printf("Loading file %s to %d\n",fn,(long)ptr); // buffer[11]=0; LoadFile(buffer,(unsigned char *)ptr); HW_VGA(FRAMEBUFFERPTR)=ptr; } // Hunt for newline character while((c=*buffer++)!='\n') ; } } else { puts("Loading manifest failed\n"); } } puts("Returning\n"); return(0); }