13 /* °Ê²¼¤Ï¥ê¥ó¥«¡¦¥¹¥¯¥ê¥×¥È¤ÇÄêµÁ¤·¤Æ¤¢¤ë¥·¥ó¥Ü¥ë */
14 extern int erodata, data_start, edata, bss_start, ebss;
17 * ¥Ç¡¼¥¿Îΰè¤ÈBSSÎΰè¤ò½é´ü²½¤¹¤ë¡¥¤³¤Î½èÍý°Ê¹ß¤Ç¤Ê¤¤¤È¡¤
18 * ¥°¥í¡¼¥Ð¥ëÊÑ¿ô¤¬½é´ü²½¤µ¤ì¤Æ¤¤¤Ê¤¤¤Î¤ÇÃí°Õ¡¥
20 memcpy(&data_start, &erodata, (long)&edata - (long)&data_start);
21 memset(&bss_start, 0, (long)&ebss - (long)&bss_start);
23 /* ¥½¥Õ¥È¥¦¥¨¥¢¡¦³ä¤ê¹þ¤ß¥Ù¥¯¥¿¤ò½é´ü²½¤¹¤ë */
26 /* ¥·¥ê¥¢¥ë¤Î½é´ü²½ */
27 serial_init(SERIAL_DEFAULT_DEVICE);
35 /* ¥í¡¼¥¿¥ê¡¼¥¨¥ó¥³¡¼¥À¡¼¤Î½é´ü²½ */
41 /* ¥á¥â¥ê¤Î16¿Ê¥À¥ó¥×½ÐÎÏ */
42 static int dump(char *buf, long size)
50 for (i = 0; i < size; i++) {
52 if ((i & 0xf) == 15) {
55 if ((i & 0xf) == 7) puts(" ");
67 for (i = 0; i < 300000; i++)
74 static long size = -1;
75 static unsigned char *loadbuf = NULL;
78 extern int buffer_start; /* ¥ê¥ó¥«¡¦¥¹¥¯¥ê¥×¥È¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤ë¥Ð¥Ã¥Õ¥¡ */
80 INTR_DISABLE; /* ³ä¹þ¤ß̵¸ú¤Ë¤¹¤ë */
84 puts("kzload (kozos boot loader) started.\n");
87 puts("kzload> "); /* ¥×¥í¥ó¥×¥Èɽ¼¨ */
88 gets(buf); /* ¥·¥ê¥¢¥ë¤«¤é¤Î¥³¥Þ¥ó¥É¼õ¿® */
90 if (!strcmp(buf, "load")) { /* XMODEM¤Ç¤Î¥Õ¥¡¥¤¥ë¤Î¥À¥¦¥ó¥í¡¼¥É */
91 loadbuf = (char *)(&buffer_start);
92 size = xmodem_recv(loadbuf);
93 wait(); /* žÁ÷¥¢¥×¥ê¤¬½ªÎ»¤·Ã¼Ëö¥¢¥×¥ê¤ËÀ©¸æ¤¬Ìá¤ë¤Þ¤ÇÂÔ¤Á¹ç¤ï¤»¤ë */
95 puts("\nXMODEM receive error!\n");
97 puts("\nXMODEM receive succeeded.\n");
99 } else if (!strcmp(buf, "dump")) { /* ¥á¥â¥ê¤Î16¿Ê¥À¥ó¥×½ÐÎÏ */
104 } else if (!strcmp(buf, "run")) { /* ELF·Á¼°¥Õ¥¡¥¤¥ë¤Î¼Â¹Ô */
105 entry_point = elf_load(loadbuf); /* ¥á¥â¥ê¾å¤ËŸ³«(¥í¡¼¥É) */
107 puts("run error!\n");
109 puts("starting from entry point: ");
110 putxval((unsigned long)entry_point, 0);
112 f = (void (*)(void))entry_point;
113 f(); /* ¤³¤³¤Ç¡¤¥í¡¼¥É¤·¤¿¥×¥í¥°¥é¥à¤Ë½èÍý¤òÅϤ¹ */
114 /* ¤³¤³¤Ë¤ÏÊ֤äƤ³¤Ê¤¤ */
116 } else if (!strcmp(buf, "ramchk")) {
118 } else if (!strcmp(buf, "ramchk2")) {
120 } else if (!strcmp(buf, "ramclr")) {
122 } else if (!strcmp(buf, "led1")) {
124 } else if (!strcmp(buf, "led2")) {
126 } else if (!strcmp(buf, "ledg")) {
128 } else if (!strcmp(buf, "ledr")) {
130 } else if (!strcmp(buf, "re")) {
132 putxval(re_read(), 0);