diff --git a/06_day/!cons_9x.bat b/06_day/!cons_9x.bat new file mode 100644 index 0000000..e42252a --- /dev/null +++ b/06_day/!cons_9x.bat @@ -0,0 +1 @@ +command \ No newline at end of file diff --git a/06_day/!cons_nt.bat b/06_day/!cons_nt.bat new file mode 100644 index 0000000..6e07473 --- /dev/null +++ b/06_day/!cons_nt.bat @@ -0,0 +1 @@ +cmd.exe \ No newline at end of file diff --git a/06_day/Makefile b/06_day/Makefile new file mode 100644 index 0000000..60583be --- /dev/null +++ b/06_day/Makefile @@ -0,0 +1,113 @@ +TOOLPATH = ../z_tools/ +INCPATH = ../z_tools/haribote/ + +MAKE = $(TOOLPATH)make.exe -r +NASK = $(TOOLPATH)nask.exe +CC1 = $(TOOLPATH)cc1.exe -I$(INCPATH) -Os -Wall -quiet +GAS2NASK = $(TOOLPATH)gas2nask.exe -a +OBJ2BIM = $(TOOLPATH)obj2bim.exe +MAKEFONT = $(TOOLPATH)makefont.exe +BIN2OBJ = $(TOOLPATH)bin2obj.exe +BIM2HRB = $(TOOLPATH)bim2hrb.exe +RULEFILE = $(TOOLPATH)haribote/haribote.rul +EDIMG = $(TOOLPATH)edimg.exe +IMGTOL = $(TOOLPATH)imgtol.com +COPY = copy +DEL = del + +# デフォルト動作 + +default : + $(MAKE) img + +# ファイル生成規則 + +ipl10.bin : ipl10.nas Makefile + $(NASK) ipl10.nas ipl10.bin ipl10.lst + +asmhead.bin : asmhead.nas Makefile + $(NASK) asmhead.nas asmhead.bin asmhead.lst + +bootpack.gas : bootpack.c Makefile + $(CC1) -o bootpack.gas bootpack.c + +bootpack.nas : bootpack.gas Makefile + $(GAS2NASK) bootpack.gas bootpack.nas + +bootpack.obj : bootpack.nas Makefile + $(NASK) bootpack.nas bootpack.obj bootpack.lst + +naskfunc.obj : naskfunc.nas Makefile + $(NASK) naskfunc.nas naskfunc.obj naskfunc.lst + +hankaku.bin : hankaku.txt Makefile + $(MAKEFONT) hankaku.txt hankaku.bin + +hankaku.obj : hankaku.bin Makefile + $(BIN2OBJ) hankaku.bin hankaku.obj _hankaku + +graphic.gas : graphic.c Makefile + $(CC1) -o graphic.gas graphic.c + +graphic.nas : graphic.gas Makefile + $(GAS2NASK) graphic.gas graphic.nas + +graphic.obj : graphic.nas Makefile + $(NASK) graphic.nas graphic.obj graphic.lst + +dsctbl.gas : dsctbl.c Makefile + $(CC1) -o dsctbl.gas dsctbl.c + +dsctbl.nas : dsctbl.gas Makefile + $(GAS2NASK) dsctbl.gas dsctbl.nas + +dsctbl.obj : dsctbl.nas Makefile + $(NASK) dsctbl.nas dsctbl.obj dsctbl.lst + +bootpack.bim : bootpack.obj naskfunc.obj hankaku.obj graphic.obj dsctbl.obj Makefile + $(OBJ2BIM) @$(RULEFILE) out:bootpack.bim stack:3136k map:bootpack.map \ + bootpack.obj naskfunc.obj hankaku.obj graphic.obj dsctbl.obj +# 3MB+64KB=3136KB + +bootpack.hrb : bootpack.bim Makefile + $(BIM2HRB) bootpack.bim bootpack.hrb 0 + +haribote.sys : asmhead.bin bootpack.hrb Makefile + copy /B asmhead.bin+bootpack.hrb haribote.sys + +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:@: \ + imgout:haribote.img + +# コマンド + +img : + $(MAKE) haribote.img + +run : + $(MAKE) img + $(COPY) haribote.img ..\z_tools\qemu\fdimage0.bin + $(MAKE) -C ../z_tools/qemu + +install : + $(MAKE) img + $(IMGTOL) w a: haribote.img + +clean : + -$(DEL) *.bin + -$(DEL) *.lst + -$(DEL) *.gas + -$(DEL) *.obj + -$(DEL) bootpack.nas + -$(DEL) graphic.nas + -$(DEL) dsctbl.nas + -$(DEL) bootpack.map + -$(DEL) bootpack.bim + -$(DEL) bootpack.hrb + -$(DEL) haribote.sys + +src_only : + $(MAKE) clean + -$(DEL) haribote.img diff --git a/06_day/asmhead.nas b/06_day/asmhead.nas new file mode 100644 index 0000000..4b8b8ae --- /dev/null +++ b/06_day/asmhead.nas @@ -0,0 +1,146 @@ +; haribote-os boot asm +; TAB=4 + +BOTPAK EQU 0x00280000 ; bootpackのロード先 +DSKCAC EQU 0x00100000 ; ディスクキャッシュの場所 +DSKCAC0 EQU 0x00008000 ; ディスクキャッシュの場所(リアルモード) + +; BOOT_INFO関係 +CYLS EQU 0x0ff0 ; ブートセクタが設定する +LEDS EQU 0x0ff1 +VMODE EQU 0x0ff2 ; 色数に関する情報。何ビットカラーか? +SCRNX EQU 0x0ff4 ; 解像度のX +SCRNY EQU 0x0ff6 ; 解像度のY +VRAM EQU 0x0ff8 ; グラフィックバッファの開始番地 + + ORG 0xc200 ; このプログラムがどこに読み込まれるのか + +; 画面モードを設定 + + MOV AL,0x13 ; VGAグラフィックス、320x200x8bitカラー + MOV AH,0x00 + INT 0x10 + MOV BYTE [VMODE],8 ; 画面モードをメモする(C言語が参照する) + MOV WORD [SCRNX],320 + MOV WORD [SCRNY],200 + MOV DWORD [VRAM],0x000a0000 + +; キーボードのLED状態をBIOSに教えてもらう + + MOV AH,0x02 + INT 0x16 ; keyboard BIOS + MOV [LEDS],AL + +; PICが一切の割り込みを受け付けないようにする +; AT互換機の仕様では、PICの初期化をするなら、 +; こいつをCLI前にやっておかないと、たまにハングアップする +; PICの初期化はあとでやる + + MOV AL,0xff + OUT 0x21,AL + NOP ; OUT命令を連続させるとうまくいかない機種があるらしいので + OUT 0xa1,AL + + CLI ; さらにCPUレベルでも割り込み禁止 + +; CPUから1MB以上のメモリにアクセスできるように、A20GATEを設定 + + CALL waitkbdout + MOV AL,0xd1 + OUT 0x64,AL + CALL waitkbdout + MOV AL,0xdf ; enable A20 + OUT 0x60,AL + CALL waitkbdout + +; プロテクトモード移行 + +[INSTRSET "i486p"] ; 486の命令まで使いたいという記述 + + LGDT [GDTR0] ; 暫定GDTを設定 + MOV EAX,CR0 + AND EAX,0x7fffffff ; bit31を0にする(ページング禁止のため) + OR EAX,0x00000001 ; bit0を1にする(プロテクトモード移行のため) + MOV CR0,EAX + JMP pipelineflush +pipelineflush: + MOV AX,1*8 ; 読み書き可能セグメント32bit + MOV DS,AX + MOV ES,AX + MOV FS,AX + MOV GS,AX + MOV SS,AX + +; bootpackの転送 + + MOV ESI,bootpack ; 転送元 + MOV EDI,BOTPAK ; 転送先 + MOV ECX,512*1024/4 + CALL memcpy + +; ついでにディスクデータも本来の位置へ転送 + +; まずはブートセクタから + + MOV ESI,0x7c00 ; 転送元 + MOV EDI,DSKCAC ; 転送先 + MOV ECX,512/4 + CALL memcpy + +; 残り全部 + + MOV ESI,DSKCAC0+512 ; 転送元 + MOV EDI,DSKCAC+512 ; 転送先 + MOV ECX,0 + MOV CL,BYTE [CYLS] + IMUL ECX,512*18*2/4 ; シリンダ数からバイト数/4に変換 + SUB ECX,512/4 ; IPLの分だけ差し引く + CALL memcpy + +; asmheadでしなければいけないことは全部し終わったので、 +; あとはbootpackに任せる + +; bootpackの起動 + + MOV EBX,BOTPAK + MOV ECX,[EBX+16] + ADD ECX,3 ; ECX += 3; + SHR ECX,2 ; ECX /= 4; + JZ skip ; 転送するべきものがない + MOV ESI,[EBX+20] ; 転送元 + ADD ESI,EBX + MOV EDI,[EBX+12] ; 転送先 + CALL memcpy +skip: + MOV ESP,[EBX+12] ; スタック初期値 + JMP DWORD 2*8:0x0000001b + +waitkbdout: + IN AL,0x64 + AND AL,0x02 + JNZ waitkbdout ; ANDの結果が0でなければwaitkbdoutへ + RET + +memcpy: + MOV EAX,[ESI] + ADD ESI,4 + MOV [EDI],EAX + ADD EDI,4 + SUB ECX,1 + JNZ memcpy ; 引き算した結果が0でなければmemcpyへ + RET +; memcpyはアドレスサイズプリフィクスを入れ忘れなければ、ストリング命令でも書ける + + ALIGNB 16 +GDT0: + RESB 8 ; ヌルセレクタ + DW 0xffff,0x0000,0x9200,0x00cf ; 読み書き可能セグメント32bit + DW 0xffff,0x0000,0x9a28,0x0047 ; 実行可能セグメント32bit(bootpack用) + + DW 0 +GDTR0: + DW 8*3-1 + DD GDT0 + + ALIGNB 16 +bootpack: diff --git a/06_day/bootpack.c b/06_day/bootpack.c new file mode 100644 index 0000000..0c19244 --- /dev/null +++ b/06_day/bootpack.c @@ -0,0 +1,81 @@ +/* bootpackのメイン */ + +#include + +void io_hlt(void); +void io_cli(void); +void io_out8(int port, int data); +int io_load_eflags(void); +void io_store_eflags(int eflags); + +void init_palette(void); +void set_palette(int start, int end, unsigned char *rgb); +void boxfill8(unsigned char *vram, int xsize, unsigned char c, int x0, int y0, int x1, int y1); +void init_screen8(char *vram, int x, int y); +void putfont8(char *vram, int xsize, int x, int y, char c, char *font); +void putfonts8_asc(char *vram, int xsize, int x, int y, char c, unsigned char *s); +void init_mouse_cursor8(char *mouse, char bc); +void putblock8_8(char *vram, int vxsize, int pxsize, + int pysize, int px0, int py0, char *buf, int bxsize); + +#define COL8_000000 0 +#define COL8_FF0000 1 +#define COL8_00FF00 2 +#define COL8_FFFF00 3 +#define COL8_0000FF 4 +#define COL8_FF00FF 5 +#define COL8_00FFFF 6 +#define COL8_FFFFFF 7 +#define COL8_C6C6C6 8 +#define COL8_840000 9 +#define COL8_008400 10 +#define COL8_848400 11 +#define COL8_000084 12 +#define COL8_840084 13 +#define COL8_008484 14 +#define COL8_848484 15 + +struct BOOTINFO { + char cyls, leds, vmode, reserve; + short scrnx, scrny; + char *vram; +}; + +struct SEGMENT_DESCRIPTOR { + short limit_low, base_low; + char base_mid, access_right; + char limit_high, base_high; +}; + +struct GATE_DESCRIPTOR { + short offset_low, selector; + char dw_count, access_right; + short offset_high; +}; + +void init_gdtidt(void); +void set_segmdesc(struct SEGMENT_DESCRIPTOR *sd, unsigned int limit, int base, int ar); +void set_gatedesc(struct GATE_DESCRIPTOR *gd, int offset, int selector, int ar); +void load_gdtr(int limit, int addr); +void load_idtr(int limit, int addr); + +void HariMain(void) +{ + struct BOOTINFO *binfo = (struct BOOTINFO *) 0x0ff0; + char s[40], mcursor[256]; + int mx, my; + + init_gdtidt(); + init_palette(); + init_screen8(binfo->vram, binfo->scrnx, binfo->scrny); + mx = (binfo->scrnx - 16) / 2; /* 画面中央になるように座標計算 */ + my = (binfo->scrny - 28 - 16) / 2; + init_mouse_cursor8(mcursor, COL8_008484); + putblock8_8(binfo->vram, binfo->scrnx, 16, 16, mx, my, mcursor, 16); + sprintf(s, "(%d, %d)", mx, my); + putfonts8_asc(binfo->vram, binfo->scrnx, 0, 0, COL8_FFFFFF, s); + + for (;;) { + io_hlt(); + } +} diff --git a/06_day/dsctbl.c b/06_day/dsctbl.c new file mode 100644 index 0000000..d7d2d0d --- /dev/null +++ b/06_day/dsctbl.c @@ -0,0 +1,67 @@ +/* GDTやIDTなどの、 descriptor table 関係 */ + +struct SEGMENT_DESCRIPTOR { + short limit_low, base_low; + char base_mid, access_right; + char limit_high, base_high; +}; + +struct GATE_DESCRIPTOR { + short offset_low, selector; + char dw_count, access_right; + short offset_high; +}; + +void init_gdtidt(void); +void set_segmdesc(struct SEGMENT_DESCRIPTOR *sd, unsigned int limit, int base, int ar); +void set_gatedesc(struct GATE_DESCRIPTOR *gd, int offset, int selector, int ar); +void load_gdtr(int limit, int addr); +void load_idtr(int limit, int addr); + +void init_gdtidt(void) +{ + struct SEGMENT_DESCRIPTOR *gdt = (struct SEGMENT_DESCRIPTOR *) 0x00270000; + struct GATE_DESCRIPTOR *idt = (struct GATE_DESCRIPTOR *) 0x0026f800; + int i; + + /* GDTの初期化 */ + for (i = 0; i < 8192; i++) { + set_segmdesc(gdt + i, 0, 0, 0); + } + set_segmdesc(gdt + 1, 0xffffffff, 0x00000000, 0x4092); + set_segmdesc(gdt + 2, 0x0007ffff, 0x00280000, 0x409a); + load_gdtr(0xffff, 0x00270000); + + /* IDTの初期化 */ + for (i = 0; i < 256; i++) { + set_gatedesc(idt + i, 0, 0, 0); + } + load_idtr(0x7ff, 0x0026f800); + + return; +} + +void set_segmdesc(struct SEGMENT_DESCRIPTOR *sd, unsigned int limit, int base, int ar) +{ + if (limit > 0xfffff) { + ar |= 0x8000; /* G_bit = 1 */ + limit /= 0x1000; + } + sd->limit_low = limit & 0xffff; + sd->base_low = base & 0xffff; + sd->base_mid = (base >> 16) & 0xff; + sd->access_right = ar & 0xff; + sd->limit_high = ((limit >> 16) & 0x0f) | ((ar >> 8) & 0xf0); + sd->base_high = (base >> 24) & 0xff; + return; +} + +void set_gatedesc(struct GATE_DESCRIPTOR *gd, int offset, int selector, int ar) +{ + gd->offset_low = offset & 0xffff; + gd->selector = selector; + gd->dw_count = (ar >> 8) & 0xff; + gd->access_right = ar & 0xff; + gd->offset_high = (offset >> 16) & 0xffff; + return; +} diff --git a/06_day/graphic.c b/06_day/graphic.c new file mode 100644 index 0000000..f10802f --- /dev/null +++ b/06_day/graphic.c @@ -0,0 +1,187 @@ +/* グラフィック処理関係 */ + +void io_hlt(void); +void io_cli(void); +void io_out8(int port, int data); +int io_load_eflags(void); +void io_store_eflags(int eflags); + +void init_palette(void); +void set_palette(int start, int end, unsigned char *rgb); +void boxfill8(unsigned char *vram, int xsize, unsigned char c, int x0, int y0, int x1, int y1); +void init_screen8(char *vram, int x, int y); +void putfont8(char *vram, int xsize, int x, int y, char c, char *font); +void putfonts8_asc(char *vram, int xsize, int x, int y, char c, unsigned char *s); +void init_mouse_cursor8(char *mouse, char bc); +void putblock8_8(char *vram, int vxsize, int pxsize, + int pysize, int px0, int py0, char *buf, int bxsize); + +#define COL8_000000 0 +#define COL8_FF0000 1 +#define COL8_00FF00 2 +#define COL8_FFFF00 3 +#define COL8_0000FF 4 +#define COL8_FF00FF 5 +#define COL8_00FFFF 6 +#define COL8_FFFFFF 7 +#define COL8_C6C6C6 8 +#define COL8_840000 9 +#define COL8_008400 10 +#define COL8_848400 11 +#define COL8_000084 12 +#define COL8_840084 13 +#define COL8_008484 14 +#define COL8_848484 15 + +void init_palette(void) +{ + static unsigned char table_rgb[16 * 3] = { + 0x00, 0x00, 0x00, /* 0:黒 */ + 0xff, 0x00, 0x00, /* 1:明るい赤 */ + 0x00, 0xff, 0x00, /* 2:明るい緑 */ + 0xff, 0xff, 0x00, /* 3:明るい黄色 */ + 0x00, 0x00, 0xff, /* 4:明るい青 */ + 0xff, 0x00, 0xff, /* 5:明るい紫 */ + 0x00, 0xff, 0xff, /* 6:明るい水色 */ + 0xff, 0xff, 0xff, /* 7:白 */ + 0xc6, 0xc6, 0xc6, /* 8:明るい灰色 */ + 0x84, 0x00, 0x00, /* 9:暗い赤 */ + 0x00, 0x84, 0x00, /* 10:暗い緑 */ + 0x84, 0x84, 0x00, /* 11:暗い黄色 */ + 0x00, 0x00, 0x84, /* 12:暗い青 */ + 0x84, 0x00, 0x84, /* 13:暗い紫 */ + 0x00, 0x84, 0x84, /* 14:暗い水色 */ + 0x84, 0x84, 0x84 /* 15:暗い灰色 */ + }; + set_palette(0, 15, table_rgb); + return; + + /* static char 命令は、データにしか使えないけどDB命令相当 */ +} + +void set_palette(int start, int end, unsigned char *rgb) +{ + int i, eflags; + eflags = io_load_eflags(); /* 割り込み許可フラグの値を記録する */ + io_cli(); /* 許可フラグを0にして割り込み禁止にする */ + io_out8(0x03c8, start); + for (i = start; i <= end; i++) { + io_out8(0x03c9, rgb[0] / 4); + io_out8(0x03c9, rgb[1] / 4); + io_out8(0x03c9, rgb[2] / 4); + rgb += 3; + } + io_store_eflags(eflags); /* 割り込み許可フラグを元に戻す */ + return; +} + +void boxfill8(unsigned char *vram, int xsize, unsigned char c, int x0, int y0, int x1, int y1) +{ + int x, y; + for (y = y0; y <= y1; y++) { + for (x = x0; x <= x1; x++) + vram[y * xsize + x] = c; + } + return; +} + +void init_screen8(char *vram, int x, int y) +{ + boxfill8(vram, x, COL8_008484, 0, 0, x - 1, y - 29); + boxfill8(vram, x, COL8_C6C6C6, 0, y - 28, x - 1, y - 28); + boxfill8(vram, x, COL8_FFFFFF, 0, y - 27, x - 1, y - 27); + boxfill8(vram, x, COL8_C6C6C6, 0, y - 26, x - 1, y - 1); + + boxfill8(vram, x, COL8_FFFFFF, 3, y - 24, 59, y - 24); + boxfill8(vram, x, COL8_FFFFFF, 2, y - 24, 2, y - 4); + boxfill8(vram, x, COL8_848484, 3, y - 4, 59, y - 4); + boxfill8(vram, x, COL8_848484, 59, y - 23, 59, y - 5); + boxfill8(vram, x, COL8_000000, 2, y - 3, 59, y - 3); + boxfill8(vram, x, COL8_000000, 60, y - 24, 60, y - 3); + + boxfill8(vram, x, COL8_848484, x - 47, y - 24, x - 4, y - 24); + boxfill8(vram, x, COL8_848484, x - 47, y - 23, x - 47, y - 4); + boxfill8(vram, x, COL8_FFFFFF, x - 47, y - 3, x - 4, y - 3); + boxfill8(vram, x, COL8_FFFFFF, x - 3, y - 24, x - 3, y - 3); + return; +} + +void putfont8(char *vram, int xsize, int x, int y, char c, char *font) +{ + int i; + char *p, d /* data */; + for (i = 0; i < 16; i++) { + p = vram + (y + i) * xsize + x; + d = font[i]; + if ((d & 0x80) != 0) { p[0] = c; } + if ((d & 0x40) != 0) { p[1] = c; } + if ((d & 0x20) != 0) { p[2] = c; } + if ((d & 0x10) != 0) { p[3] = c; } + if ((d & 0x08) != 0) { p[4] = c; } + if ((d & 0x04) != 0) { p[5] = c; } + if ((d & 0x02) != 0) { p[6] = c; } + if ((d & 0x01) != 0) { p[7] = c; } + } + return; +} + +void putfonts8_asc(char *vram, int xsize, int x, int y, char c, unsigned char *s) +{ + extern char hankaku[4096]; + for (; *s != 0x00; s++) { + putfont8(vram, xsize, x, y, c, hankaku + *s * 16); + x += 8; + } + return; +} + +void init_mouse_cursor8(char *mouse, char bc) +/* マウスカーソルを準備(16x16) */ +{ + static char cursor[16][16] = { + "**************..", + "*OOOOOOOOOOO*...", + "*OOOOOOOOOO*....", + "*OOOOOOOOO*.....", + "*OOOOOOOO*......", + "*OOOOOOO*.......", + "*OOOOOOO*.......", + "*OOOOOOOO*......", + "*OOOO**OOO*.....", + "*OOO*..*OOO*....", + "*OO*....*OOO*...", + "*O*......*OOO*..", + "**........*OOO*.", + "*..........*OOO*", + "............*OO*", + ".............***" + }; + int x, y; + + for (y = 0; y < 16; y++) { + for (x = 0; x < 16; x++) { + if (cursor[y][x] == '*') { + mouse[y * 16 + x] = COL8_000000; + } + if (cursor[y][x] == 'O') { + mouse[y * 16 + x] = COL8_FFFFFF; + } + if (cursor[y][x] == '.') { + mouse[y * 16 + x] = bc; + } + } + } + return; +} + +void putblock8_8(char *vram, int vxsize, int pxsize, + int pysize, int px0, int py0, char *buf, int bxsize) +{ + int x, y; + for (y = 0; y < pysize; y++) { + for (x = 0; x < pxsize; x++) { + vram[(py0 + y) * vxsize + (px0 + x)] = buf[y * bxsize + x]; + } + } + return; +} diff --git a/06_day/hankaku.txt b/06_day/hankaku.txt new file mode 100644 index 0000000..62d56f9 --- /dev/null +++ b/06_day/hankaku.txt @@ -0,0 +1,4609 @@ +OSASKの半角フォントを流用 + +char 0x00 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0x01 +........ +........ +..***... +.*...*.. +*.....*. +*.*.*.*. +*.*.*.*. +*.....*. +*.....*. +*.*.*.*. +*..*..*. +.*...*.. +..***... +........ +........ +........ + +char 0x02 +........ +........ +..***... +.*****.. +*******. +**.*.**. +**.*.**. +*******. +*******. +**.*.**. +***.***. +.*****.. +..***... +........ +........ +........ + +char 0x03 +........ +........ +........ +........ +.**.**.. +*******. +*******. +*******. +.*****.. +..***... +...*.... +........ +........ +........ +........ +........ + +char 0x04 +........ +........ +........ +........ +...*.... +..***... +.*****.. +*******. +.*****.. +..***... +...*.... +........ +........ +........ +........ +........ + +char 0x05 +........ +........ +........ +........ +...*.... +..***... +.*.*.*.. +*******. +.*.*.*.. +...*.... +..***... +........ +........ +........ +........ +........ + +char 0x06 +........ +........ +........ +........ +...*.... +..***... +.*****.. +*******. +**.*.**. +...*.... +..***... +........ +........ +........ +........ +........ + +char 0x07 +........ +........ +........ +........ +........ +........ +...**... +..****.. +..****.. +...**... +........ +........ +........ +........ +........ +........ + +char 0x08 +******** +******** +******** +******** +******** +******** +***..*** +**....** +**....** +***..*** +******** +******** +******** +******** +******** +******** + +char 0x09 +........ +........ +........ +........ +........ +..****.. +.**..**. +.*....*. +.*....*. +.**..**. +..****.. +........ +........ +........ +........ +........ + +char 0x0a +******** +******** +******** +******** +******** +**....** +*..**..* +*.****.* +*.****.* +*..**..* +**....** +******** +******** +******** +******** +******** + +char 0x0b +........ +...*.... +..***... +.*.*.*.. +*..*..*. +...*.... +...*.... +..***... +.*...*.. +*.....*. +*.....*. +*.....*. +.*...*.. +..***... +........ +........ + +char 0x0c +........ +..***... +.*...*.. +*.....*. +*.....*. +*.....*. +.*...*.. +..***... +...*.... +...*.... +*******. +...*.... +...*.... +...*.... +........ +........ + +char 0x0d +........ +........ +....**.. +....***. +....*.** +....*.** +....*.*. +....*... +....*... +...**... +.****... +*****... +.***.... +........ +........ +........ + +char 0x0e +........ +........ +...***** +...***** +...*...* +...*...* +...*...* +...*...* +...*...* +...*...* +.***.*** +******** +.**..**. +........ +........ +........ + +char 0x0f +........ +........ +........ +........ +...*.... +.*.*.*.. +..***... +..*.*... +..***... +.*.*.*.. +...*.... +........ +........ +........ +........ +........ + +char 0x10 +........ +*....... +**...... +***..... +****.... +*****... +******.. +*******. +******.. +*****... +****.... +***..... +**...... +*....... +........ +........ + +char 0x11 +........ +......*. +.....**. +....***. +...****. +..*****. +.******. +*******. +.******. +..*****. +...****. +....***. +.....**. +......*. +........ +........ + +char 0x12 +........ +........ +...*.... +..***... +.*.*.*.. +*..*..*. +...*.... +...*.... +...*.... +*..*..*. +.*.*.*.. +..***... +...*.... +........ +........ +........ + +char 0x13 +........ +........ +.*...*.. +.*...*.. +.*...*.. +.*...*.. +.*...*.. +.*...*.. +.*...*.. +.*...*.. +........ +........ +.*...*.. +.*...*.. +........ +........ + +char 0x14 +........ +..*****. +.*..*.*. +*...*.*. +*...*.*. +*...*.*. +*...*.*. +.*..*.*. +..***.*. +....*.*. +....*.*. +....*.*. +....*.*. +....*.*. +........ +........ + +char 0x15 +.*****.. +*.....*. +.*...... +..*..... +..***... +.*...*.. +*.....*. +*.....*. +*.....*. +.*...*.. +..***... +....*... +.....*.. +*.....*. +.*****.. +........ + +char 0x16 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +*******. +*******. +*******. +........ +........ + +char 0x17 +........ +........ +...*.... +..***... +.*.*.*.. +*..*..*. +...*.... +...*.... +...*.... +*..*..*. +.*.*.*.. +..***... +...*.... +.*****.. +........ +........ + +char 0x18 +........ +...*.... +..***... +.*.*.*.. +*..*..*. +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +........ +........ + +char 0x19 +........ +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +*..*..*. +.*.*.*.. +..***... +...*.... +........ +........ + +char 0x1a +........ +........ +........ +........ +...*.... +....*... +.....*.. +*******. +.....*.. +....*... +...*.... +........ +........ +........ +........ +........ + +char 0x1b +........ +........ +........ +........ +...*.... +..*..... +.*...... +*******. +.*...... +..*..... +...*.... +........ +........ +........ +........ +........ + +char 0x1c +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +*....... +*....... +*******. +........ +........ + +char 0x1d +........ +........ +........ +........ +........ +..*.*... +.*...*.. +*******. +.*...*.. +..*.*... +........ +........ +........ +........ +........ +........ + +char 0x1e +........ +........ +........ +........ +...*.... +...*.... +..***... +..***... +.*****.. +.*****.. +*******. +*******. +........ +........ +........ +........ + +char 0x1f +........ +........ +........ +........ +*******. +*******. +.*****.. +.*****.. +..***... +..***... +...*.... +...*.... +........ +........ +........ +........ + +char 0x20 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0x21 +........ +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +........ +........ +...*.... +...*.... +........ +........ + +char 0x22 +..*.*... +..*.*... +..*.*... +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0x23 +........ +.*...*.. +.*...*.. +.*...*.. +*******. +.*...*.. +.*...*.. +.*...*.. +.*...*.. +.*...*.. +*******. +.*...*.. +.*...*.. +.*...*.. +........ +........ + +char 0x24 +...*.... +..***.*. +.*.*.**. +*..*..*. +*..*..*. +*..*.... +.*.*.... +..***... +...*.*.. +...*..*. +*..*..*. +*..*..*. +**.*.*.. +*.***... +...*.... +...*.... + +char 0x25 +.**...*. +*..*..*. +*..*.*.. +*..*.*.. +.**.*... +....*... +...*.... +...*.... +..*..... +..*.**.. +.*.*..*. +.*.*..*. +*..*..*. +*...**.. +........ +........ + +char 0x26 +........ +.***.... +*...*... +*...*... +*...*... +*..*.... +.**..... +.*...*** +*.*...*. +*..*..*. +*...*.*. +*....*.. +.*...**. +..***..* +........ +........ + +char 0x27 +.....*.. +....*... +...*.... +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0x28 +......*. +.....*.. +....*... +....*... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +....*... +....*... +.....*.. +......*. +........ + +char 0x29 +*....... +.*...... +..*..... +..*..... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +..*..... +..*..... +.*...... +*....... +........ + +char 0x2a +........ +........ +........ +........ +........ +...*.... +*..*..*. +.*.*.*.. +..***... +.*.*.*.. +*..*..*. +...*.... +........ +........ +........ +........ + +char 0x2b +........ +........ +........ +........ +........ +...*.... +...*.... +...*.... +*******. +...*.... +...*.... +...*.... +........ +........ +........ +........ + +char 0x2c +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +...**... +...**... +....*... +....*... +...*.... + +char 0x2d +........ +........ +........ +........ +........ +........ +........ +........ +*******. +........ +........ +........ +........ +........ +........ +........ + +char 0x2e +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +...**... +...**... +........ +........ + +char 0x2f +......*. +......*. +.....*.. +.....*.. +....*... +....*... +....*... +...*.... +...*.... +..*..... +..*..... +.*...... +.*...... +.*...... +*....... +*....... + +char 0x30 +........ +...**... +..*..*.. +..*..*.. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +..*..*.. +..*..*.. +...**... +........ +........ + +char 0x31 +........ +....*... +...**... +..*.*... +....*... +....*... +....*... +....*... +....*... +....*... +....*... +....*... +....*... +..*****. +........ +........ + +char 0x32 +........ +...**... +..*..*.. +.*....*. +.*....*. +......*. +.....*.. +....*... +...*.... +..*..... +..*..... +.*...... +.*...... +.******. +........ +........ + +char 0x33 +........ +...**... +..*..*.. +.*....*. +......*. +......*. +.....*.. +...**... +.....*.. +......*. +......*. +.*....*. +..*..*.. +...**... +........ +........ + +char 0x34 +........ +....**.. +....**.. +....**.. +...*.*.. +...*.*.. +...*.*.. +..*..*.. +..*..*.. +.*...*.. +.******. +.....*.. +.....*.. +...****. +........ +........ + +char 0x35 +........ +.*****.. +.*...... +.*...... +.*...... +.*.**... +.**..*.. +......*. +......*. +......*. +......*. +.*....*. +..*..*.. +...**... +........ +........ + +char 0x36 +........ +...**... +..*..*.. +.*....*. +.*...... +.*.**... +.**..*.. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +..*..*.. +...**... +........ +........ + +char 0x37 +........ +.******. +.*....*. +.*....*. +.....*.. +.....*.. +....*... +....*... +....*... +...*.... +...*.... +...*.... +...*.... +..***... +........ +........ + +char 0x38 +........ +...**... +..*..*.. +.*....*. +.*....*. +.*....*. +..*..*.. +...**... +..*..*.. +.*....*. +.*....*. +.*....*. +..*..*.. +...**... +........ +........ + +char 0x39 +........ +...**... +..*..*.. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +..*..**. +...**.*. +......*. +.*....*. +..*..*.. +...**... +........ +........ + +char 0x3a +........ +........ +........ +........ +........ +...**... +...**... +........ +........ +........ +........ +........ +...**... +...**... +........ +........ + +char 0x3b +........ +........ +........ +........ +........ +...**... +...**... +........ +........ +........ +........ +...**... +...**... +....*... +....*... +...*.... + +char 0x3c +........ +......*. +.....*.. +....*... +...*.... +..*..... +.*...... +*....... +*....... +.*...... +..*..... +...*.... +....*... +.....*.. +......*. +........ + +char 0x3d +........ +........ +........ +........ +........ +........ +*******. +........ +........ +*******. +........ +........ +........ +........ +........ +........ + +char 0x3e +........ +*....... +.*...... +..*..... +...*.... +....*... +.....*.. +......*. +......*. +.....*.. +....*... +...*.... +..*..... +.*...... +*....... +........ + +char 0x3f +........ +..***... +.*...*.. +*.....*. +*.....*. +*.....*. +.....*.. +....*... +...*.... +...*.... +........ +........ +...**... +...**... +........ +........ + +char 0x40 +........ +..***... +.*...*.. +*.....*. +*..**.*. +*.*.*.*. +*.*.*.*. +*.*.*.*. +*.*.*.*. +*.*.*.*. +*..***.. +*....... +.*...**. +..***... +........ +........ + +char 0x41 +........ +...**... +...**... +...**... +...**... +..*..*.. +..*..*.. +..*..*.. +..*..*.. +.******. +.*....*. +.*....*. +.*....*. +***..*** +........ +........ + +char 0x42 +........ +****.... +.*..*... +.*...*.. +.*...*.. +.*...*.. +.*..*... +.****... +.*...*.. +.*....*. +.*....*. +.*....*. +.*...*.. +*****... +........ +........ + +char 0x43 +........ +..***.*. +.*...**. +.*....*. +*.....*. +*....... +*....... +*....... +*....... +*....... +*.....*. +.*....*. +.*...*.. +..***... +........ +........ + +char 0x44 +........ +*****... +.*...*.. +.*...*.. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +.*...*.. +.*...*.. +*****... +........ +........ + +char 0x45 +........ +*******. +.*....*. +.*....*. +.*...... +.*...... +.*...*.. +.*****.. +.*...*.. +.*...... +.*...... +.*....*. +.*....*. +*******. +........ +........ + +char 0x46 +........ +*******. +.*....*. +.*....*. +.*...... +.*...... +.*...*.. +.*****.. +.*...*.. +.*...*.. +.*...... +.*...... +.*...... +****.... +........ +........ + +char 0x47 +........ +..***.*. +.*...**. +.*....*. +*.....*. +*....... +*....... +*..****. +*.....*. +*.....*. +*.....*. +.*....*. +.*...**. +..***... +........ +........ + +char 0x48 +........ +***..*** +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +.******. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +***..*** +........ +........ + +char 0x49 +........ +.*****.. +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +.*****.. +........ +........ + +char 0x4a +........ +...***** +.....*.. +.....*.. +.....*.. +.....*.. +.....*.. +.....*.. +.....*.. +.....*.. +.....*.. +.....*.. +*....*.. +.*..*... +..**.... +........ + +char 0x4b +........ +***..*** +.*....*. +.*...*.. +.*..*... +.*.*.... +.*.*.... +.**..... +.*.*.... +.*.*.... +.*..*... +.*...*.. +.*....*. +***..*** +........ +........ + +char 0x4c +........ +****.... +.*...... +.*...... +.*...... +.*...... +.*...... +.*...... +.*...... +.*...... +.*...... +.*....*. +.*....*. +*******. +........ +........ + +char 0x4d +........ +**....** +.*....*. +.**..**. +.**..**. +.**..**. +.*.**.*. +.*.**.*. +.*.**.*. +.*....*. +.*....*. +.*....*. +.*....*. +***..*** +........ +........ + +char 0x4e +........ +**...*** +.*....*. +.**...*. +.**...*. +.*.*..*. +.*.*..*. +.*.*..*. +.*..*.*. +.*..*.*. +.*..*.*. +.*...**. +.*...**. +***...*. +........ +........ + +char 0x4f +........ +..***... +.*...*.. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +.*...*.. +..***... +........ +........ + +char 0x50 +........ +*****... +.*...*.. +.*....*. +.*....*. +.*....*. +.*...*.. +.****... +.*...... +.*...... +.*...... +.*...... +.*...... +****.... +........ +........ + +char 0x51 +........ +..***... +.*...*.. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*..*..*. +*...*.*. +.*...*.. +..***.*. +........ +........ + +char 0x52 +........ +******.. +.*....*. +.*....*. +.*....*. +.*....*. +.*****.. +.*...*.. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +***..*** +........ +........ + +char 0x53 +........ +..***.*. +.*...**. +*.....*. +*.....*. +*....... +.*...... +..***... +.....*.. +......*. +*.....*. +*.....*. +**...*.. +*.***... +........ +........ + +char 0x54 +........ +*******. +*..*..*. +*..*..*. +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +.*****.. +........ +........ + +char 0x55 +........ +***..*** +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +..*..*.. +..****.. +........ +........ + +char 0x56 +........ +***..*** +.*....*. +.*....*. +.*....*. +.*....*. +..*..*.. +..*..*.. +..*..*.. +..*..*.. +...**... +...**... +...**... +...**... +........ +........ + +char 0x57 +........ +***..*** +.*....*. +.*....*. +.*....*. +.*.**.*. +.*.**.*. +.*.**.*. +.*.**.*. +..*..*.. +..*..*.. +..*..*.. +..*..*.. +..*..*.. +........ +........ + +char 0x58 +........ +***..*** +.*....*. +.*....*. +..*..*.. +..*..*.. +..*..*.. +...**... +..*..*.. +..*..*.. +..*..*.. +.*....*. +.*....*. +***..*** +........ +........ + +char 0x59 +........ +***.***. +.*...*.. +.*...*.. +.*...*.. +..*.*... +..*.*... +..*.*... +...*.... +...*.... +...*.... +...*.... +...*.... +.*****.. +........ +........ + +char 0x5a +........ +*******. +*....*.. +*....*.. +....*... +....*... +...*.... +...*.... +..*..... +..*..... +.*...... +.*....*. +*.....*. +*******. +........ +........ + +char 0x5b +........ +..*****. +..*..... +..*..... +..*..... +..*..... +..*..... +..*..... +..*..... +..*..... +..*..... +..*..... +..*..... +..*..... +..*****. +........ + +char 0x5c +*....... +*....... +.*...... +.*...... +..*..... +..*..... +..*..... +...*.... +...*.... +....*... +....*... +.....*.. +.....*.. +.....*.. +......*. +......*. + +char 0x5d +........ +.*****.. +.....*.. +.....*.. +.....*.. +.....*.. +.....*.. +.....*.. +.....*.. +.....*.. +.....*.. +.....*.. +.....*.. +.....*.. +.*****.. +........ + +char 0x5e +........ +...*.... +..*.*... +.*...*.. +*.....*. +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0x5f +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +*******. +........ + +char 0x60 +...*.... +....*... +.....*.. +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0x61 +........ +........ +........ +........ +........ +.***.... +....*... +.....*.. +..****.. +.*...*.. +*....*.. +*....*.. +*...**.. +.***.**. +........ +........ + +char 0x62 +**...... +.*...... +.*...... +.*...... +.*...... +.*.**... +.**..*.. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +.**..*.. +.*.**... +........ +........ + +char 0x63 +........ +........ +........ +........ +........ +..**.... +.*..**.. +*....*.. +*....*.. +*....... +*....... +*.....*. +.*...*.. +..***... +........ +........ + +char 0x64 +....**.. +.....*.. +.....*.. +.....*.. +.....*.. +..**.*.. +.*..**.. +*....*.. +*....*.. +*....*.. +*....*.. +*....*.. +.*..**.. +..**.**. +........ +........ + +char 0x65 +........ +........ +........ +........ +........ +..***... +.*...*.. +*.....*. +*.....*. +******.. +*....... +*.....*. +.*....*. +..****.. +........ +........ + +char 0x66 +....***. +...*.... +...*.... +...*.... +...*.... +.*****.. +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +.*****.. +........ +........ + +char 0x67 +........ +........ +........ +........ +........ +..**.**. +.*..**.. +*....*.. +*....*.. +*....*.. +*....*.. +.*..**.. +..**.*.. +.....*.. +.....*.. +.****... + +char 0x68 +**...... +.*...... +.*...... +.*...... +.*...... +.*.**... +.**..*.. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +***...** +........ +........ + +char 0x69 +........ +...*.... +...*.... +........ +........ +..**.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +..***... +........ +........ + +char 0x6a +........ +.....*.. +.....*.. +........ +........ +....**.. +.....*.. +.....*.. +.....*.. +.....*.. +.....*.. +.....*.. +.....*.. +....*... +....*... +..**.... + +char 0x6b +**...... +.*...... +.*...... +.*...... +.*...... +.*..***. +.*...*.. +.*..*... +.*.*.... +.**..... +.*.*.... +.*..*... +.*...*.. +***..**. +........ +........ + +char 0x6c +..**.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +..***... +........ +........ + +char 0x6d +........ +........ +........ +........ +........ +****.**. +.*..*..* +.*..*..* +.*..*..* +.*..*..* +.*..*..* +.*..*..* +.*..*..* +**.**.** +........ +........ + +char 0x6e +........ +........ +........ +........ +........ +**.**... +.**..*.. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +***...** +........ +........ + +char 0x6f +........ +........ +........ +........ +........ +..***... +.*...*.. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +.*...*.. +..***... +........ +........ + +char 0x70 +........ +........ +........ +........ +........ +**.**... +.**..*.. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +.**..*.. +.*.**... +.*...... +***..... + +char 0x71 +........ +........ +........ +........ +........ +..**.*.. +.*..**.. +*....*.. +*....*.. +*....*.. +*....*.. +*....*.. +.*..**.. +..**.*.. +.....*.. +....***. + +char 0x72 +........ +........ +........ +........ +........ +**.***.. +.**...*. +.*....*. +.*...... +.*...... +.*...... +.*...... +.*...... +***..... +........ +........ + +char 0x73 +........ +........ +........ +........ +........ +.****.*. +*....**. +*.....*. +**...... +..***... +.....**. +*.....*. +**....*. +*.****.. +........ +........ + +char 0x74 +........ +........ +...*.... +...*.... +...*.... +.*****.. +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +....***. +........ +........ + +char 0x75 +........ +........ +........ +........ +........ +**...**. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +.*....*. +.*...**. +..***.** +........ +........ + +char 0x76 +........ +........ +........ +........ +........ +***..*** +.*....*. +.*....*. +.*....*. +..*..*.. +..*..*.. +..*..*.. +...**... +...**... +........ +........ + +char 0x77 +........ +........ +........ +........ +........ +***..*** +.*....*. +.*....*. +.*.**.*. +.*.**.*. +.*.**.*. +..*..*.. +..*..*.. +..*..*.. +........ +........ + +char 0x78 +........ +........ +........ +........ +........ +**...**. +.*...*.. +..*.*... +..*.*... +...*.... +..*.*... +..*.*... +.*...*.. +**...**. +........ +........ + +char 0x79 +........ +........ +........ +........ +........ +***..*** +.*....*. +.*....*. +..*..*.. +..*..*.. +..*..*.. +...**... +...**... +...*.... +...*.... +.**..... + +char 0x7a +........ +........ +........ +........ +........ +*******. +*.....*. +*....*.. +....*... +...*.... +..*..... +.*....*. +*.....*. +*******. +........ +........ + +char 0x7b +........ +.....**. +....*... +...*.... +...*.... +...*.... +...*.... +.**..... +...*.... +...*.... +...*.... +...*.... +....*... +.....**. +........ +........ + +char 0x7c +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... + +char 0x7d +........ +.**..... +...*.... +....*... +....*... +....*... +....*... +.....**. +....*... +....*... +....*... +....*... +...*.... +.**..... +........ +........ + +char 0x7e +........ +.***..*. +*...**.. +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0x7f +........ +........ +........ +........ +...*.... +..*.*... +.*...*.. +*.....*. +*******. +*.....*. +*******. +........ +........ +........ +........ +........ + +char 0x80 +........ +..***... +.*...*.. +*.....*. +*....... +*....... +*....... +*....... +*....... +*....... +*....... +*.....*. +.*...*.. +..***... +...*.... +..*..... + +char 0x81 +........ +........ +..*..*.. +..*..*.. +........ +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +.*....*. +..*****. +........ +........ + +char 0x82 +....**.. +....*... +...*.... +........ +........ +..***... +.*...*.. +*.....*. +*.....*. +*******. +*....... +*.....*. +.*...*.. +..***... +........ +........ + +char 0x83 +........ +...*.... +..*.*... +.*...*.. +........ +.****... +.....*.. +.....*.. +..****.. +.*...*.. +*....*.. +*....*.. +.*...*.. +..*****. +........ +........ + +char 0x84 +........ +........ +..*..*.. +..*..*.. +........ +.****... +.....*.. +.....*.. +..****.. +.*...*.. +*....*.. +*....*.. +.*...*.. +..*****. +........ +........ + +char 0x85 +...*.... +....*... +.....*.. +........ +........ +.****... +.....*.. +.....*.. +..****.. +.*...*.. +*....*.. +*....*.. +.*...*.. +..*****. +........ +........ + +char 0x86 +........ +...**... +..*..*.. +...**... +........ +.****... +.....*.. +.....*.. +..****.. +.*...*.. +*....*.. +*....*.. +.*...*.. +..*****. +........ +........ + +char 0x87 +........ +........ +........ +........ +........ +..****.. +.*....*. +*....... +*....... +*....... +*....... +*....... +.*....*. +..****.. +....*... +...*.... + +char 0x88 +........ +...*.... +..*.*... +.*...*.. +........ +..***... +.*...*.. +*.....*. +*.....*. +*******. +*....... +*.....*. +.*...*.. +..***... +........ +........ + +char 0x89 +........ +........ +..*..*.. +..*..*.. +........ +..***... +.*...*.. +*.....*. +*.....*. +*******. +*....... +*.....*. +.*...*.. +..***... +........ +........ + +char 0x8a +...*.... +....*... +.....*.. +........ +........ +..***... +.*...*.. +*.....*. +*.....*. +*******. +*....... +*.....*. +.*...*.. +..***... +........ +........ + +char 0x8b +........ +........ +..*..*.. +..*..*.. +........ +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +........ +........ + +char 0x8c +........ +...*.... +..*.*... +.*...*.. +........ +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +........ +........ + +char 0x8d +...*.... +....*... +.....*.. +........ +........ +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +........ +........ + +char 0x8e +..*..*.. +..*..*.. +........ +..***... +.*...*.. +*.....*. +*.....*. +*.....*. +*.....*. +*******. +*.....*. +*.....*. +*.....*. +*.....*. +........ +........ + +char 0x8f +........ +..***... +.*...*.. +..***... +.*...*.. +*.....*. +*.....*. +*.....*. +*.....*. +*******. +*.....*. +*.....*. +*.....*. +*.....*. +........ +........ + +char 0x90 +....**.. +....*... +...*.... +*******. +*....... +*....... +*....... +*....... +*****... +*....... +*....... +*....... +*....... +*******. +........ +........ + +char 0x91 +........ +........ +........ +........ +........ +.**..... +...***.. +...*..*. +.***..*. +*..****. +*..*.... +*..*.... +*..*..*. +.**.**.. +........ +........ + +char 0x92 +....**.. +...*.... +..*..... +..*.*... +..*.*... +..*.*... +*******. +..*.*... +..*.*... +..*.*... +..*.*... +..*.*... +..*.*... +..*.*... +........ +........ + +char 0x93 +........ +...*.... +..*.*... +.*...*.. +........ +..***... +.*...*.. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +.*...*.. +..***... +........ +........ + +char 0x94 +........ +........ +..*..*.. +..*..*.. +........ +..***... +.*...*.. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +.*...*.. +..***... +........ +........ + +char 0x95 +...*.... +....*... +.....*.. +........ +........ +..***... +.*...*.. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +.*...*.. +..***... +........ +........ + +char 0x96 +........ +...*.... +..*.*... +.*...*.. +........ +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +.*....*. +..*****. +........ +........ + +char 0x97 +...*.... +....*... +.....*.. +........ +........ +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +.*....*. +..*****. +........ +........ + +char 0x98 +........ +........ +..*..*.. +..*..*.. +........ +*.....*. +*.....*. +.*...*.. +.*...*.. +..*.*... +..*.*... +...*.... +...*.... +..*..... +..*..... +.*...... + +char 0x99 +..*..*.. +..*..*.. +........ +..***... +.*...*.. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +.*...*.. +..***... +........ +........ + +char 0x9a +..*..*.. +..*..*.. +........ +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +.*...*.. +..***... +........ +........ + +char 0x9b +........ +..*.*... +..*.*... +..*.*... +..****.. +.**.*.*. +*.*.*... +*.*.*... +*.*.*... +*.*.*... +*.*.*... +.**.*.*. +..****.. +..*.*... +..*.*... +..*.*... + +char 0x9c +........ +....**.. +...*..*. +..*..... +..*..... +..*..... +******.. +..*..... +..*..... +..*..... +.**..... +*.*..... +*.**..*. +.*..**.. +........ +........ + +char 0x9d +........ +*.....*. +*.....*. +.*...*.. +..*.*... +...*.... +*******. +...*.... +...*.... +*******. +...*.... +...*.... +...*.... +...*.... +........ +........ + +char 0x9e +........ +***..... +*..*.... +*...*... +*...*... +*...*... +*..*.*.. +***..*.. +*..***** +*....*.. +*....*.. +*....*.. +*....*.. +*....*.. +........ +........ + +char 0x9f +........ +....**.. +...*..*. +...*.... +...*.... +...*.... +*******. +...*.... +...*.... +...*.... +...*.... +...*.... +*..*.... +.**..... +........ +........ + +char 0xa0 +....**.. +....*... +...*.... +........ +........ +.****... +.....*.. +.....*.. +..****.. +.*...*.. +*....*.. +*....*.. +.*...*.. +..*****. +........ +........ + +char 0xa1 +....**.. +....*... +...*.... +........ +........ +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +........ +........ + +char 0xa2 +....**.. +....*... +...*.... +........ +........ +..***... +.*...*.. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +.*...*.. +..***... +........ +........ + +char 0xa3 +....**.. +....*... +...*.... +........ +........ +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +.*....*. +..*****. +........ +........ + +char 0xa4 +........ +...*..*. +..*.*.*. +..*..*.. +........ +*****... +*....*.. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +........ +........ + +char 0xa5 +...*..*. +..*.*.*. +..*..*.. +........ +*.....*. +**....*. +**....*. +*.*...*. +*..*..*. +*..*..*. +*...*.*. +*....**. +*....**. +*.....*. +........ +........ + +char 0xa6 +........ +........ +........ +.****... +.....*.. +.....*.. +..****.. +.*...*.. +*....*.. +*....*.. +.*...*.. +..*****. +........ +*******. +........ +........ + +char 0xa7 +........ +........ +........ +..***... +.*...*.. +*.....*. +*.....*. +*.....*. +*.....*. +*.....*. +.*...*.. +..***... +........ +*******. +........ +........ + +char 0xa8 +........ +...*.... +...*.... +........ +........ +...*.... +...*.... +..*..... +.*...*.. +*.....*. +*.....*. +*.....*. +.*...*.. +..***... +........ +........ + +char 0xa9 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +*******. +*....... +*....... +*....... +........ +........ + +char 0xaa +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +*******. +......*. +......*. +......*. +........ +........ + +char 0xab +........ +...*.... +..**.... +...*.... +...*.... +...*.... +........ +*******. +........ +.****... +.....*.. +..***... +.*...... +.*****.. +........ +........ + +char 0xac +........ +...*.... +..**.... +...*.... +...*.... +...*.... +........ +*******. +........ +...**... +..*.*... +.*..*... +.*****.. +....*... +........ +........ + +char 0xad +........ +...*.... +...*.... +........ +........ +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +........ +........ + +char 0xae +........ +........ +........ +........ +...*..*. +..*..*.. +.*..*... +*..*.... +*..*.... +.*..*... +..*..*.. +...*..*. +........ +........ +........ +........ + +char 0xaf +........ +........ +........ +........ +*..*.... +.*..*... +..*..*.. +...*..*. +...*..*. +..*..*.. +.*..*... +*..*.... +........ +........ +........ +........ + +char 0xb0 +...*...* +.*...*.. +...*...* +.*...*.. +...*...* +.*...*.. +...*...* +.*...*.. +...*...* +.*...*.. +...*...* +.*...*.. +...*...* +.*...*.. +...*...* +.*...*.. + +char 0xb1 +.*.*.*.* +*.*.*.*. +.*.*.*.* +*.*.*.*. +.*.*.*.* +*.*.*.*. +.*.*.*.* +*.*.*.*. +.*.*.*.* +*.*.*.*. +.*.*.*.* +*.*.*.*. +.*.*.*.* +*.*.*.*. +.*.*.*.* +*.*.*.*. + +char 0xb2 +.***.*** +**.***.* +.***.*** +**.***.* +.***.*** +**.***.* +.***.*** +**.***.* +.***.*** +**.***.* +.***.*** +**.***.* +.***.*** +**.***.* +.***.*** +**.***.* + +char 0xb3 +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... + +char 0xb4 +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +****.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... + +char 0xb5 +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +****.... +...*.... +****.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... + +char 0xb6 +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +****.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. + +char 0xb7 +........ +........ +........ +........ +........ +........ +........ +******.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. + +char 0xb8 +........ +........ +........ +........ +........ +........ +........ +****.... +...*.... +****.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... + +char 0xb9 +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +****.*.. +.....*.. +****.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. + +char 0xba +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. + +char 0xbb +........ +........ +........ +........ +........ +........ +........ +******.. +.....*.. +****.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. + +char 0xbc +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +****.*.. +.....*.. +******.. +........ +........ +........ +........ +........ +........ + +char 0xbd +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +******.. +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xbe +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +****.... +...*.... +****.... +........ +........ +........ +........ +........ +........ + +char 0xbf +........ +........ +........ +........ +........ +........ +........ +****.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... + +char 0xc0 +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...***** +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xc1 +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +******** +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xc2 +........ +........ +........ +........ +........ +........ +........ +******** +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... + +char 0xc3 +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...***** +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... + +char 0xc4 +........ +........ +........ +........ +........ +........ +........ +******** +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xc5 +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +******** +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... + +char 0xc6 +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...***** +...*.... +...***** +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... + +char 0xc7 +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*** +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. + +char 0xc8 +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*** +...*.... +...***** +........ +........ +........ +........ +........ +........ + +char 0xc9 +........ +........ +........ +........ +........ +........ +........ +...***** +...*.... +...*.*** +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. + +char 0xca +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +****.*** +........ +******** +........ +........ +........ +........ +........ +........ + +char 0xcb +........ +........ +........ +........ +........ +........ +........ +******** +........ +****.*** +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. + +char 0xcc +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*** +...*.... +...*.*** +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. + +char 0xcd +........ +........ +........ +........ +........ +........ +........ +******** +........ +******** +........ +........ +........ +........ +........ +........ + +char 0xce +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +****.*** +........ +****.*** +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. + +char 0xcf +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +******** +........ +******** +........ +........ +........ +........ +........ +........ + +char 0xd0 +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +******** +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xd1 +........ +........ +........ +........ +........ +........ +........ +******** +........ +******** +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... + +char 0xd2 +........ +........ +........ +........ +........ +........ +........ +******** +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. + +char 0xd3 +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...***** +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xd4 +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...***** +...*.... +...***** +........ +........ +........ +........ +........ +........ + +char 0xd5 +........ +........ +........ +........ +........ +........ +........ +...***** +...*.... +...***** +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... + +char 0xd6 +........ +........ +........ +........ +........ +........ +........ +...***** +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. + +char 0xd7 +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +****.*** +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. +...*.*.. + +char 0xd8 +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +******** +...*.... +******** +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... + +char 0xd9 +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +****.... +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xda +........ +........ +........ +........ +........ +........ +........ +...***** +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... +...*.... + +char 0xdb +******** +******** +******** +******** +******** +******** +******** +******** +******** +******** +******** +******** +******** +******** +******** +******** + +char 0xdc +........ +........ +........ +........ +........ +........ +........ +........ +******** +******** +******** +******** +******** +******** +******** +******** + +char 0xdd +****.... +****.... +****.... +****.... +****.... +****.... +****.... +****.... +****.... +****.... +****.... +****.... +****.... +****.... +****.... +****.... + +char 0xde +....**** +....**** +....**** +....**** +....**** +....**** +....**** +....**** +....**** +....**** +....**** +....**** +....**** +....**** +....**** +....**** + +char 0xdf +******** +******** +******** +******** +******** +******** +******** +******** +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xe0 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xe1 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xe2 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xe3 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xe4 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xe5 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xe6 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xe7 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xe8 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xe9 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xea +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xeb +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xec +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xed +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xee +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xef +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xf0 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xf1 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xf2 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xf3 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xf4 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xf5 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xf6 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xf7 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xf8 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xf9 +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xfa +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xfb +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xfc +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xfd +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xfe +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ + +char 0xff +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ +........ diff --git a/06_day/ipl10.nas b/06_day/ipl10.nas new file mode 100644 index 0000000..3e016f9 --- /dev/null +++ b/06_day/ipl10.nas @@ -0,0 +1,105 @@ +; haribote-ipl +; TAB=4 + +CYLS EQU 10 ; どこまで読み込むか + + ORG 0x7c00 ; このプログラムがどこに読み込まれるのか + +; 以下は標準的なFAT12フォーマットフロッピーディスクのための記述 + + JMP entry + DB 0x90 + DB "HARIBOTE" ; ブートセクタの名前を自由に書いてよい(8バイト) + DW 512 ; 1セクタの大きさ(512にしなければいけない) + DB 1 ; クラスタの大きさ(1セクタにしなければいけない) + DW 1 ; FATがどこから始まるか(普通は1セクタ目からにする) + DB 2 ; FATの個数(2にしなければいけない) + DW 224 ; ルートディレクトリ領域の大きさ(普通は224エントリにする) + DW 2880 ; このドライブの大きさ(2880セクタにしなければいけない) + DB 0xf0 ; メディアのタイプ(0xf0にしなければいけない) + DW 9 ; FAT領域の長さ(9セクタにしなければいけない) + DW 18 ; 1トラックにいくつのセクタがあるか(18にしなければいけない) + DW 2 ; ヘッドの数(2にしなければいけない) + DD 0 ; パーティションを使ってないのでここは必ず0 + DD 2880 ; このドライブ大きさをもう一度書く + DB 0,0,0x29 ; よくわからないけどこの値にしておくといいらしい + DD 0xffffffff ; たぶんボリュームシリアル番号 + DB "HARIBOTEOS " ; ディスクの名前(11バイト) + DB "FAT12 " ; フォーマットの名前(8バイト) + RESB 18 ; とりあえず18バイトあけておく + +; プログラム本体 + +entry: + MOV AX,0 ; レジスタ初期化 + MOV SS,AX + MOV SP,0x7c00 + MOV DS,AX + +; ディスクを読む + + MOV AX,0x0820 + MOV ES,AX + MOV CH,0 ; シリンダ0 + MOV DH,0 ; ヘッド0 + MOV CL,2 ; セクタ2 +readloop: + MOV SI,0 ; 失敗回数を数えるレジスタ +retry: + MOV AH,0x02 ; AH=0x02 : ディスク読み込み + MOV AL,1 ; 1セクタ + MOV BX,0 + MOV DL,0x00 ; Aドライブ + INT 0x13 ; ディスクBIOS呼び出し + JNC next ; エラーがおきなければnextへ + ADD SI,1 ; SIに1を足す + CMP SI,5 ; SIと5を比較 + JAE error ; SI >= 5 だったらerrorへ + MOV AH,0x00 + MOV DL,0x00 ; Aドライブ + INT 0x13 ; ドライブのリセット + JMP retry +next: + MOV AX,ES ; アドレスを0x200進める + ADD AX,0x0020 + MOV ES,AX ; ADD ES,0x020 という命令がないのでこうしている + ADD CL,1 ; CLに1を足す + CMP CL,18 ; CLと18を比較 + JBE readloop ; CL <= 18 だったらreadloopへ + MOV CL,1 + ADD DH,1 + CMP DH,2 + JB readloop ; DH < 2 だったらreadloopへ + MOV DH,0 + ADD CH,1 + CMP CH,CYLS + JB readloop ; CH < CYLS だったらreadloopへ + +; 読み終わったのでharibote.sysを実行だ! + + MOV [0x0ff0],CH ; IPLがどこまで読んだのかをメモ + JMP 0xc200 + +error: + MOV SI,msg +putloop: + MOV AL,[SI] + ADD SI,1 ; SIに1を足す + CMP AL,0 + JE fin + MOV AH,0x0e ; 一文字表示ファンクション + MOV BX,15 ; カラーコード + INT 0x10 ; ビデオBIOS呼び出し + JMP putloop +fin: + HLT ; 何かあるまでCPUを停止させる + JMP fin ; 無限ループ +msg: + DB 0x0a, 0x0a ; 改行を2つ + DB "load error" + DB 0x0a ; 改行 + DB 0 + + RESB 0x7dfe-$ ; 0x7dfeまでを0x00で埋める命令 + + DB 0x55, 0xaa diff --git a/06_day/make.bat b/06_day/make.bat new file mode 100644 index 0000000..e489766 --- /dev/null +++ b/06_day/make.bat @@ -0,0 +1 @@ +..\z_tools\make.exe %1 %2 %3 %4 %5 %6 %7 %8 %9 \ No newline at end of file diff --git a/06_day/naskfunc.nas b/06_day/naskfunc.nas new file mode 100644 index 0000000..b46ca1a --- /dev/null +++ b/06_day/naskfunc.nas @@ -0,0 +1,90 @@ +; naskfunc +; TAB=4 + +[FORMAT "WCOFF"] ; オブジェクトファイルを作るモード +[INSTRSET "i486p"] ; 486の命令まで使いたいという記述 +[BITS 32] ; 32ビットモード用の機械語を作らせる +[FILE "naskfunc.nas"] ; ソースファイル名情報 + + GLOBAL _io_hlt, _io_cli, _io_sti, _io_stihlt + GLOBAL _io_in8, _io_in16, _io_in32 + GLOBAL _io_out8, _io_out16, _io_out32 + GLOBAL _io_load_eflags, _io_store_eflags + GLOBAL _load_gdtr, _load_idtr + +[SECTION .text] + +_io_hlt: ; void io_hlt(void); + HLT + RET + +_io_cli: ; void io_cli(void); + CLI + RET + +_io_sti: ; void io_sti(void); + STI + RET + +_io_stihlt: ; void io_stihlt(void); + STI + HLT + RET + +_io_in8: ; int io_in8(int port); + MOV EDX,[ESP+4] ; port + MOV EAX,0 + IN AL,DX + RET + +_io_in16: ; int io_in16(int port); + MOV EDX,[ESP+4] ; port + MOV EAX,0 + IN AX,DX + RET + +_io_in32: ; int io_in32(int port); + MOV EDX,[ESP+4] ; port + IN EAX,DX + RET + +_io_out8: ; void io_out8(int port, int data); + MOV EDX,[ESP+4] ; port + MOV AL,[ESP+8] ; data + OUT DX,AL + RET + +_io_out16: ; void io_out16(int port, int data); + MOV EDX,[ESP+4] ; port + MOV EAX,[ESP+8] ; data + OUT DX,AX + RET + +_io_out32: ; void io_out32(int port, int data); + MOV EDX,[ESP+4] ; port + MOV EAX,[ESP+8] ; data + OUT DX,EAX + RET + +_io_load_eflags: ; int io_load_eflags(void); + PUSHFD ; PUSH EFLAGS という意味 + POP EAX + RET + +_io_store_eflags: ; void io_store_eflags(int eflags); + MOV EAX,[ESP+4] + PUSH EAX + POPFD ; POP EFLAGS という意味 + RET + +_load_gdtr: ; void load_gdtr(int limit, int addr); + MOV AX,[ESP+4] ; limit + MOV [ESP+6],AX + LGDT [ESP+6] + RET + +_load_idtr: ; void load_idtr(int limit, int addr); + MOV AX,[ESP+4] ; limit + MOV [ESP+6],AX + LIDT [ESP+6] + RET