17 /* °Ê²¼¤Ï¥ê¥ó¥«¡¦¥¹¥¯¥ê¥×¥È¤ÇÄêµÁ¤·¤Æ¤¢¤ë¥·¥ó¥Ü¥ë */
18 extern int erodata, data_start, edata, bss_start, ebss;
21 * ¥Ç¡¼¥¿Îΰè¤ÈBSSÎΰè¤ò½é´ü²½¤¹¤ë¡¥¤³¤Î½èÍý°Ê¹ß¤Ç¤Ê¤¤¤È¡¤
22 * ¥°¥í¡¼¥Ð¥ëÊÑ¿ô¤¬½é´ü²½¤µ¤ì¤Æ¤¤¤Ê¤¤¤Î¤ÇÃí°Õ¡¥
24 memcpy(&data_start, &erodata, (long)&edata - (long)&data_start);
25 memset(&bss_start, 0, (long)&ebss - (long)&bss_start);
27 /* ¥½¥Õ¥È¥¦¥¨¥¢¡¦³ä¤ê¹þ¤ß¥Ù¥¯¥¿¤ò½é´ü²½¤¹¤ë */
30 /* ¥·¥ê¥¢¥ë¤Î½é´ü²½ */
31 serial_init(SERIAL_DEFAULT_DEVICE);
39 /* ¥í¡¼¥¿¥ê¡¼¥¨¥ó¥³¡¼¥À¡¼¤Î½é´ü²½ */
42 /* ¥¹¥¤¥Ã¥Á¤Î½é´ü²½ */
50 lcd_draw_box(0, 0, 121, 31, 0);
51 lcd_draw_string(2, 2, "KOZOS EXPBRD #00", 0);
57 vs1011e_sinetest_init();
58 for (i = 0; i < 20000; i++) { }
59 vs1011e_sinetest_fini();
60 for (i = 0; i < 20000; i++) { }
61 vs1011e_sinetest_init();
62 for (i = 0; i < 20000; i++) { }
63 vs1011e_sinetest_fini();
64 for (i = 0; i < 20000; i++) { }
65 vs1011e_sinetest_init();
66 for (i = 0; i < 20000; i++) { }
67 vs1011e_sinetest_fini();
72 void boot_from_sdc(const char *filename)
74 static unsigned char *loadbuf = NULL;
77 extern int buffer_start; /* ¥ê¥ó¥«¡¦¥¹¥¯¥ê¥×¥È¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥Ð¥Ã¥Õ¥¡ */
85 * SD¥«¡¼¥É¤ò¥Þ¥¦¥ó¥È¡£
87 rc = pf_mount(&fatfs);
95 rc = pf_open(filename);
100 lcd_draw_string(2, 10, "Booting from SDC.", 0);
103 * SD¥«¡¼¥É¾å¤ÎOS¥¤¥á¡¼¥¸¤ò¥á¥â¥ê¾å¤ËÆɤ߹þ¤ß¡£
105 loadbuf = (char *)(&buffer_start);
107 rc = pf_read(buff, sizeof(buff), &br);
111 for (i = 0; i < br; i++) {
115 lcd_draw_progressbar(5, 20, 121 - 5, 25, 0, 100, fatfs.fptr * 100 / fatfs.fsize, 0);
120 lcd_draw_string(2, 10, "File read error.", 0);
125 * ¥á¥â¥ê¾å¤ËŸ³«(¥í¡¼¥É)
127 loadbuf = (char *)(&buffer_start);
128 entry_point = elf_load(loadbuf);
134 lcd_draw_string(2, 10, "Run error.", 0);
137 led_write(Led1, LedOff);
138 led_write(Led2, LedOff);
139 led_write(LedG, LedOff);
140 led_write(LedR, LedOff);
141 f = (void (*)(void))entry_point;
149 for (i = 0; i < 300000; i++)
153 /* ¥á¥â¥ê¤Î16¿Ê¥À¥ó¥×½ÐÎÏ */
154 static int dump(char *buf, long size)
162 for (i = 0; i < size; i++) {
164 if ((i & 0xf) == 15) {
167 if ((i & 0xf) == 7) puts(" ");
176 void boot_from_ser(void)
179 static long size = -1;
180 static unsigned char *loadbuf = NULL;
183 extern int buffer_start; /* ¥ê¥ó¥«¡¦¥¹¥¯¥ê¥×¥È¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥Ð¥Ã¥Õ¥¡ */
185 lcd_draw_string(2, 10, "Waiting a boot image.", 0);
188 puts("kzload> "); /* ¥×¥í¥ó¥×¥Èɽ¼¨ */
189 gets(buf); /* ¥·¥ê¥¢¥ë¤«¤é¤Î¥³¥Þ¥ó¥É¼õ¿® */
191 if (!strcmp(buf, "load")) { /* XMODEM¤Ç¤Î¥Õ¥¡¥¤¥ë¤Î¥À¥¦¥ó¥í¡¼¥É */
192 lcd_draw_string(2, 10, "Receiving a boot image.", 0);
193 loadbuf = (char *)(&buffer_start);
194 size = xmodem_recv(loadbuf);
195 wait(); /* žÁ÷¥¢¥×¥ê¤¬½ªÎ»¤·Ã¼Ëö¥¢¥×¥ê¤ËÀ©¸æ¤¬Ìá¤ë¤Þ¤ÇÂÔ¤Á¹ç¤ï¤»¤ë */
197 puts("\nXMODEM receive error!\n");
198 lcd_draw_string(2, 10, "Receive error occurred.", 0);
200 puts("\nXMODEM receive succeeded.\n");
201 lcd_draw_string(2, 10, "Receive succeeded. ", 0);
203 } else if (!strcmp(buf, "dump")) { /* ¥á¥â¥ê¤Î16¿Ê¥À¥ó¥×½ÐÎÏ */
208 } else if (!strcmp(buf, "run")) { /* ELF·Á¼°¥Õ¥¡¥¤¥ë¤Î¼Â¹Ô */
209 entry_point = elf_load(loadbuf); /* ¥á¥â¥ê¾å¤ËŸ³«(¥í¡¼¥É) */
211 puts("run error!\n");
213 puts("starting from entry point: ");
214 putxval((unsigned long)entry_point, 0);
216 f = (void (*)(void))entry_point;
217 f(); /* ¤³¤³¤Ç¡¤¥í¡¼¥É¤·¤¿¥×¥í¥°¥é¥à¤Ë½èÍý¤òÅϤ¹ */
218 /* ¤³¤³¤Ë¤ÏÊ֤äƤ³¤Ê¤¤ */
226 INTR_DISABLE; /* ³ä¹þ¤ß̵¸ú¤Ë¤¹¤ë */
230 boot_from_sdc("kozos");