16 /* °Ê²¼¤Ï¥ê¥ó¥«¡¦¥¹¥¯¥ê¥×¥È¤ÇÄêµÁ¤·¤Æ¤¢¤ë¥·¥ó¥Ü¥ë */
17 extern int erodata, data_start, edata, bss_start, ebss;
20 * ¥Ç¡¼¥¿Îΰè¤ÈBSSÎΰè¤ò½é´ü²½¤¹¤ë¡¥¤³¤Î½èÍý°Ê¹ß¤Ç¤Ê¤¤¤È¡¤
21 * ¥°¥í¡¼¥Ð¥ëÊÑ¿ô¤¬½é´ü²½¤µ¤ì¤Æ¤¤¤Ê¤¤¤Î¤ÇÃí°Õ¡¥
23 memcpy(&data_start, &erodata, (long)&edata - (long)&data_start);
24 memset(&bss_start, 0, (long)&ebss - (long)&bss_start);
26 /* ¥½¥Õ¥È¥¦¥¨¥¢¡¦³ä¤ê¹þ¤ß¥Ù¥¯¥¿¤ò½é´ü²½¤¹¤ë */
29 /* ¥·¥ê¥¢¥ë¤Î½é´ü²½ */
30 serial_init(SERIAL_DEFAULT_DEVICE);
38 /* ¥í¡¼¥¿¥ê¡¼¥¨¥ó¥³¡¼¥À¡¼¤Î½é´ü²½ */
41 /* ¥¹¥¤¥Ã¥Á¤Î½é´ü²½ */
50 /* ¥á¥â¥ê¤Î16¿Ê¥À¥ó¥×½ÐÎÏ */
51 static int dump(char *buf, long size)
59 for (i = 0; i < size; i++) {
61 if ((i & 0xf) == 15) {
64 if ((i & 0xf) == 7) puts(" ");
76 for (i = 0; i < 300000; i++)
82 puts("die with code 0x");
91 static long size = -1;
92 static unsigned char *loadbuf = NULL;
95 extern int buffer_start; /* ¥ê¥ó¥«¡¦¥¹¥¯¥ê¥×¥È¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥Ð¥Ã¥Õ¥¡ */
97 INTR_DISABLE; /* ³ä¹þ¤ß̵¸ú¤Ë¤¹¤ë */
102 puts("kzload (kozos boot loader) started.\n");
105 puts("kzload> "); /* ¥×¥í¥ó¥×¥Èɽ¼¨ */
106 gets(buf); /* ¥·¥ê¥¢¥ë¤«¤é¤Î¥³¥Þ¥ó¥É¼õ¿® */
108 if (!strcmp(buf, "load")) { /* XMODEM¤Ç¤Î¥Õ¥¡¥¤¥ë¤Î¥À¥¦¥ó¥í¡¼¥É */
109 loadbuf = (char *)(&buffer_start);
110 size = xmodem_recv(loadbuf);
111 wait(); /* žÁ÷¥¢¥×¥ê¤¬½ªÎ»¤·Ã¼Ëö¥¢¥×¥ê¤ËÀ©¸æ¤¬Ìá¤ë¤Þ¤ÇÂÔ¤Á¹ç¤ï¤»¤ë */
113 puts("\nXMODEM receive error!\n");
115 puts("\nXMODEM receive succeeded.\n");
117 } else if (!strcmp(buf, "dump")) { /* ¥á¥â¥ê¤Î16¿Ê¥À¥ó¥×½ÐÎÏ */
122 } else if (!strcmp(buf, "run")) { /* ELF·Á¼°¥Õ¥¡¥¤¥ë¤Î¼Â¹Ô */
123 entry_point = elf_load(loadbuf); /* ¥á¥â¥ê¾å¤ËŸ³«(¥í¡¼¥É) */
125 puts("run error!\n");
127 puts("starting from entry point: ");
128 putxval((unsigned long)entry_point, 0);
130 f = (void (*)(void))entry_point;
131 f(); /* ¤³¤³¤Ç¡¤¥í¡¼¥É¤·¤¿¥×¥í¥°¥é¥à¤Ë½èÍý¤òÅϤ¹ */
132 /* ¤³¤³¤Ë¤ÏÊ֤äƤ³¤Ê¤¤ */
134 } else if (!strcmp(buf, "ramchk")) {
136 } else if (!strcmp(buf, "ramchk2")) {
138 } else if (!strcmp(buf, "ramclr")) {
140 } else if (!strcmp(buf, "led1")) {
142 } else if (!strcmp(buf, "led2")) {
144 } else if (!strcmp(buf, "ledg")) {
146 } else if (!strcmp(buf, "ledr")) {
148 } else if (!strcmp(buf, "re")) {
150 putxval(re_read(), 0);
152 } else if (!strcmp(buf, "sw")) {
153 if (sw_read(Sw1)) { puts("Sw1\n"); }
154 if (sw_read(Sw2)) { puts("Sw2\n"); }
155 if (sw_read(SwRe)) { puts("SwRe\n"); }
156 } else if (!strcmp(buf, "lcd")) {
159 lcd_draw_box(0, 0, 121, 31, reverse);
160 lcd_draw_string(2, 2, "KOZOS", reverse);
166 FATFS fatfs; /* File system object */
167 DIR dir; /* Directory object */
168 FILINFO fno; /* File information object */
173 puts("\nMount a volume.\n");
174 rc = pf_mount(&fatfs);
177 puts("\nOpen a test file (message.txt).\n");
178 rc = pf_open("MESSAGE.TXT");
181 puts("\nType the file content.\n");
183 rc = pf_read(buff, sizeof(buff), &br); /* Read a chunk of file */
184 if (rc || !br) break; /* Error or end of file */
185 for (i = 0; i < br; i++) /* Type the data */
191 puts("\nOpen a file to write (write.txt).\n");
192 rc = pf_open("WRITE.TXT");
195 puts("\nWrite a text data. (Hello world!)\n");
196 rc = pf_write("Hello world!\r\n", 14, &bw);
199 puts("\nTerminate the file write process.\n");
200 rc = pf_write(0, 0, &bw);
205 puts("\nOpen root directory.\n");
206 rc = pf_opendir(&dir, "");
209 puts("\nDirectory listing...\n");
211 rc = pf_readdir(&dir, &fno); /* Read a directory item */
212 if (rc || !fno.fname[0]) break; /* Error or end of dir */
213 if (fno.fattrib & AM_DIR) {
226 puts("\nTest completed.\n");