diff --git a/18_day/Makefile b/18_day/Makefile index f05f580..6e5650f 100644 --- a/18_day/Makefile +++ b/18_day/Makefile @@ -52,6 +52,8 @@ haribote.img : ipl10.bin haribote.sys Makefile $(EDIMG) imgin:../z_tools/fdimg0at.tek \ wbinimg src:ipl10.bin len:512 from:0 to:0 \ copy from:haribote.sys to:@: \ + copy from:ipl10.nas to:@: \ + copy from:make.bat to:@: \ imgout:haribote.img # 其他指令 diff --git a/18_day/bootpack.c b/18_day/bootpack.c index 1bff3c0..6d54433 100644 --- a/18_day/bootpack.c +++ b/18_day/bootpack.c @@ -4,6 +4,13 @@ #include #include +struct FILEINFO { + unsigned char name[8], ext[3], type; + char reserve[10]; + unsigned short time, date, clustno; + unsigned int size; +}; + void make_window8(unsigned char *buf, int xsize, int ysize, char *title, char act); void putfonts8_asc_sht(struct SHEET *sht, int x, int y, int c, int b, char *s, int l); void make_textbox8(struct SHEET *sht, int x0, int y0, int sx, int sy, int c); @@ -380,6 +387,7 @@ void console_task(struct SHEET *sheet, unsigned int memtotal) char s[30], cmdline[30]; struct MEMMAN *memman = (struct MEMMAN *) MEMMAN_ADDR; int x, y; + struct FILEINFO *finfo = (struct FILEINFO *) (ADR_DISKIMG + 0x002600); fifo32_init(&task->fifo, 128, fifobuf, task); timer = timer_alloc(); @@ -451,7 +459,28 @@ void console_task(struct SHEET *sheet, unsigned int memtotal) } sheet_refresh(sheet, 8, 28, 8 + 240, 28 + 128); cursor_y = 28; - } else if (cmdline[0] != 0) { + } else if (strcmp(cmdline, "dir") == 0 || strcmp(cmdline, "ls") == 0) { + /* dir命令 */ + for (x = 0; x < 224; x++) { + if (finfo[x].name[0] == 0x00) { + break; + } + if (finfo[x].name[0] != 0xe5) { + if ((finfo[x].type & 0x18) == 0) { + sprintf(s, "filename.ext %7d", finfo[x].size); + for (y = 0; y < 8; y++) { + s[y] = finfo[x].name[y]; + } + s[ 9] = finfo[x].ext[0]; + s[10] = finfo[x].ext[1]; + s[11] = finfo[x].ext[2]; + putfonts8_asc_sht(sheet, 8, cursor_y, COL8_FFFFFF, COL8_000000, s, 30); + cursor_y = cons_newline(cursor_y, sheet); + } + } + } + cursor_y = cons_newline(cursor_y, sheet); + } else if (cmdline[0] != 0) { /*不是命令,也不是空行 */ putfonts8_asc_sht(sheet, 8, cursor_y, COL8_FFFFFF, COL8_000000, "Bad command.", 12); cursor_y = cons_newline(cursor_y, sheet); diff --git a/18_day/bootpack.h b/18_day/bootpack.h index 21188cb..1b58836 100644 --- a/18_day/bootpack.h +++ b/18_day/bootpack.h @@ -8,6 +8,7 @@ struct BOOTINFO { /* 0x0ff0-0x0fff */ char *vram; }; #define ADR_BOOTINFO 0x00000ff0 +#define ADR_DISKIMG 0x00100000 /* naskfunc.nas */ void io_hlt(void);