11 void boot_from_sdc(const char *filename)
13 static unsigned char *loadbuf = NULL;
16 extern int buffer_start; /* リンカ・スクリプトで定義されているバッファ */
26 rc = pf_mount(&fatfs);
34 rc = pf_open(filename);
39 sg12232c_draw_string(2, 10, "Booting from SDC.", 0);
42 * SDカード上のOSイメージをメモリ上に読み込み。
44 loadbuf = (char *)(&buffer_start);
46 rc = pf_read(buff, sizeof(buff), &br);
50 for (i = 0; i < br; i++) {
54 sg12232c_draw_progressbar(5, 20, 121 - 5, 25, 0, 100, fatfs.fptr * 100 / fatfs.fsize, 0);
59 sg12232c_draw_string(2, 10, "File read error.", 0);
66 loadbuf = (char *)(&buffer_start);
67 entry_point = elf_load(loadbuf);
73 sg12232c_draw_string(2, 10, "Run error.", 0);
76 led_write(Led1, LedOff);
77 led_write(Led2, LedOff);
78 led_write(LedG, LedOff);
79 led_write(LedR, LedOff);
80 f = (void (*)(void))entry_point;
88 for (i = 0; i < 300000; i++)
93 static int dump(char *buf, long size)
101 for (i = 0; i < size; i++) {
103 if ((i & 0xf) == 15) {
106 if ((i & 0xf) == 7) puts(" ");
115 void boot_from_ser(void)
118 static long size = -1;
119 static unsigned char *loadbuf = NULL;
122 extern int buffer_start; /* リンカ・スクリプトで定義されているバッファ */
124 sg12232c_draw_string(2, 10, "Waiting a boot image.", 0);
127 puts("kzload> "); /* プロンプト表示 */
128 gets(buf); /* シリアルからのコマンド受信 */
130 if (!strcmp(buf, "load")) { /* XMODEMでのファイルのダウンロード */
131 sg12232c_draw_string(2, 10, "Receiving a boot image.", 0);
132 loadbuf = (char *)(&buffer_start);
133 size = xmodem_recv(loadbuf);
134 wait(); /* 転送アプリが終了し端末アプリに制御が戻るまで待ち合わせる */
136 puts("\nXMODEM receive error!\n");
137 sg12232c_draw_string(2, 10, "Receive error occurred.", 0);
139 puts("\nXMODEM receive succeeded.\n");
140 sg12232c_draw_string(2, 10, "Receive succeeded. ", 0);
142 } else if (!strcmp(buf, "dump")) { /* メモリの16進ダンプ出力 */
147 } else if (!strcmp(buf, "run")) { /* ELF形式ファイルの実行 */
148 entry_point = elf_load(loadbuf); /* メモリ上に展開(ロード) */
150 puts("run error!\n");
152 puts("starting from entry point: ");
153 putxval((unsigned long)entry_point, 0);
155 f = (void (*)(void))entry_point;
156 f(); /* ここで,ロードしたプログラムに処理を渡す */