--- /dev/null
+\r
+[INSTRSET "i486p"]\r
+\r
+; BOOT_INFO_ADDR\r
+CYLS equ 0x0ff0\r
+\r
+ org 0x7c00 ; \82±\82Ì\83v\83\8d\83O\83\89\83\80\82ª\82Ç\82±\82É\93Ç\82Ý\8d\9e\82Ü\82ê\82é\82Ì\82©\r
+\r
+; \88È\89º\82Í\95W\8f\80\93I\82Èfat12\83t\83H\81[\83}\83b\83g\83t\83\8d\83b\83s\81[\83f\83B\83X\83N\82Ì\82½\82ß\82Ì\8bL\8fq\r
+\r
+ jmp entry\r
+ db 0x90\r
+ db "chnos " ; \83u\81[\83g\83Z\83N\83^\82Ì\96¼\91O\82ð\8e©\97R\82É\8f\91\82¢\82Ä\82æ\82¢\81i8\83o\83C\83g\81j\r
+ dw 512 ; 1\83Z\83N\83^\82Ì\91å\82«\82³\81i512\82É\82µ\82È\82¯\82ê\82Î\82¢\82¯\82È\82¢\81j\r
+ db 1 ; \83N\83\89\83X\83^\82Ì\91å\82«\82³\81i1\83Z\83N\83^\82É\82µ\82È\82¯\82ê\82Î\82¢\82¯\82È\82¢\81j\r
+ dw 1 ; fat\82ª\82Ç\82±\82©\82ç\8en\82Ü\82é\82©\81i\95\81\92Ê\82Í1\83Z\83N\83^\96Ú\82©\82ç\82É\82·\82é\81j\r
+ db 2 ; fat\82Ì\8cÂ\90\94\81i2\82É\82µ\82È\82¯\82ê\82Î\82¢\82¯\82È\82¢\81j\r
+ dw 224 ; \83\8b\81[\83g\83f\83B\83\8c\83N\83g\83\8a\97Ì\88æ\82Ì\91å\82«\82³\81i\95\81\92Ê\82Í224\83G\83\93\83g\83\8a\82É\82·\82é\81j\r
+ dw 2880 ; \82±\82Ì\83h\83\89\83C\83u\82Ì\91å\82«\82³\81i2880\83Z\83N\83^\82É\82µ\82È\82¯\82ê\82Î\82¢\82¯\82È\82¢\81j\r
+ db 0xf0 ; \83\81\83f\83B\83A\82Ì\83^\83C\83v\81i0xf0\82É\82µ\82È\82¯\82ê\82Î\82¢\82¯\82È\82¢\81j\r
+ dw 9 ; fat\97Ì\88æ\82Ì\92·\82³\81i9\83Z\83N\83^\82É\82µ\82È\82¯\82ê\82Î\82¢\82¯\82È\82¢\81j\r
+ dw 18 ; 1\83g\83\89\83b\83N\82É\82¢\82\82Â\82Ì\83Z\83N\83^\82ª\82 \82é\82©\81i18\82É\82µ\82È\82¯\82ê\82Î\82¢\82¯\82È\82¢\81j\r
+ dw 2 ; \83w\83b\83h\82Ì\90\94\81i2\82É\82µ\82È\82¯\82ê\82Î\82¢\82¯\82È\82¢\81j\r
+ dd 0 ; \83p\81[\83e\83B\83V\83\87\83\93\82ð\8eg\82Á\82Ä\82È\82¢\82Ì\82Å\82±\82±\82Í\95K\82¸0\r
+ dd 2880 ; \82±\82Ì\83h\83\89\83C\83u\91å\82«\82³\82ð\82à\82¤\88ê\93x\8f\91\82\r
+ db 0, 0, 0x29 ; \82æ\82\82í\82©\82ç\82È\82¢\82¯\82Ç\82±\82Ì\92l\82É\82µ\82Ä\82¨\82\82Æ\82¢\82¢\82ç\82µ\82¢\r
+ dd 0xffffffff ; \82½\82Ô\82ñ\83{\83\8a\83\85\81[\83\80\83V\83\8a\83A\83\8b\94Ô\8d\86\r
+ db "chnosboot " ; \83f\83B\83X\83N\82Ì\96¼\91O\81i11\83o\83C\83g\81j\r
+ db "fat12 " ; \83t\83H\81[\83}\83b\83g\82Ì\96¼\91O\81i8\83o\83C\83g\81j\r
+ resb 18 ; \82Æ\82è\82 \82¦\82¸18\83o\83C\83g\82 \82¯\82Ä\82¨\82\r
+\r
+; \83v\83\8d\83O\83\89\83\80\96{\91Ì\r
+\r
+entry:\r
+ mov ax, 0 ; \83\8c\83W\83X\83^\8f\89\8aú\89»\r
+ mov ss, ax\r
+ mov sp, 0x7c00\r
+ mov ds, ax\r
+\r
+; \83f\83B\83X\83N\82ð\93Ç\82Þ\r
+\r
+ mov ax, 0x0820\r
+ mov es, ax\r
+ mov ch, 0 ; \83V\83\8a\83\93\83_0\r
+ mov dh, 0 ; \83w\83b\83h0\r
+ mov cl, 2 ; \83Z\83N\83^2\r
+ mov bx, 18*2-1 ; \93Ç\82Ý\8d\9e\82Ý\82½\82¢\8d\87\8cv\83Z\83N\83^\90\94 (2006.12.23 \83o\83O\8fC\90³)\r
+ call readfast ; \8d\82\91¬\93Ç\82Ý\8d\9e\82Ý\r
+\r
+ mov bx, 4312+0x8200+2\r
+fatloop:\r
+ add bx, -2\r
+ cmp word [bx], 0\r
+ jz fatloop\r
+ mov ax, bx\r
+ add ax, -0x8200-5+54+53\r
+ mov bl, 54\r
+ div bl ; al = ax / bl\r
+\r
+ cmp al, 0\r
+ jnz fatskip1\r
+ mov al, 1\r
+fatskip1:\r
+ cmp al, 33\r
+ jbe fatskip2\r
+ mov al, 33\r
+fatskip2:\r
+ mov [CYLS], al ; ipl\82ª\82Ç\82±\82Ü\82Å\93Ç\82ñ\82¾\82Ì\82©\82ð\83\81\83\82\r
+ add al, -1\r
+ jz fatskip3\r
+ mov ah, 0\r
+ imul bx, ax, 18*2\r
+\r
+ mov ax, 0x0c80\r
+ mov es, ax\r
+ mov ch, 1 ; \83V\83\8a\83\93\83_1\r
+ mov dh, 0 ; \83w\83b\83h0\r
+ mov cl, 1 ; \83Z\83N\83^1\r
+ call readfast ; \8d\82\91¬\93Ç\82Ý\8d\9e\82Ý\r
+fatskip3:\r
+\r
+; \93Ç\82Ý\8fI\82í\82Á\82½\82Ì\82Åharibote.sys\82ð\8eÀ\8ds\82¾\81I\r
+\r
+ jmp 0xc200\r
+\r
+\r
+error:\r
+ mov ax, 0\r
+ mov es, ax\r
+ mov si, msg\r
+putloop:\r
+ mov al, [si]\r
+ add si, 1 ; si\82É1\82ð\91«\82·\r
+ cmp al, 0\r
+ je fin\r
+ mov ah, 0x0e ; \88ê\95¶\8e\9a\95\\8e¦\83t\83@\83\93\83N\83V\83\87\83\93\r
+ mov bx, 15 ; \83J\83\89\81[\83R\81[\83h\r
+ int 0x10 ; \83r\83f\83Ibios\8cÄ\82Ñ\8fo\82µ\r
+ jmp putloop\r
+fin:\r
+ hlt ; \89½\82©\82 \82é\82Ü\82Åcpu\82ð\92â\8e~\82³\82¹\82é\r
+ jmp fin ; \96³\8cÀ\83\8b\81[\83v\r
+\r
+msg: db 0x0a, 0x0a ; \89ü\8ds\82ð2\82Â\r
+ db "chnipl load error"\r
+ db 0x0a ; \89ü\8ds\r
+ db 0\r
+\r
+readfast: ; al\82ð\8eg\82Á\82Ä\82Å\82«\82é\82¾\82¯\82Ü\82Æ\82ß\82Ä\93Ç\82Ý\8fo\82·\r
+ ; es:\93Ç\82Ý\8d\9e\82Ý\94Ô\92n, ch:\83V\83\8a\83\93\83_, dh:\83w\83b\83h, cl:\83Z\83N\83^, bx:\93Ç\82Ý\8d\9e\82Ý\83Z\83N\83^\90\94\r
+\r
+ mov ax, es ; < es\82©\82çal\82Ì\8dÅ\91å\92l\82ð\8cv\8eZ >\r
+ shl ax, 3 ; ax\82ð32\82Å\8a\84\82Á\82Ä\81A\82»\82Ì\8c\8b\89Ê\82ðah\82É\93ü\82ê\82½\82±\82Æ\82É\82È\82é \81ishl\82Í\8d¶\83V\83t\83g\96½\97ß\81j\r
+ and ah, 0x7f ; ah\82Íah\82ð128\82Å\8a\84\82Á\82½\97]\82è\81i512*128=64k\81j\r
+ mov al, 128 ; al = 128 - ah; \88ê\94Ô\8bß\82¢64kb\8b«\8aE\82Ü\82Å\8dÅ\91å\89½\83Z\83N\83^\93ü\82é\82©\r
+ sub al, ah\r
+\r
+ mov ah, bl ; < bx\82©\82çal\82Ì\8dÅ\91å\92l\82ðah\82É\8cv\8eZ >\r
+ cmp bh, 0 ; if (bh != 0) { ah = 18; }\r
+ je .skip1\r
+ mov ah, 18\r
+.skip1:\r
+ cmp al, ah ; if (al > ah) { al = ah; }\r
+ jbe .skip2\r
+ mov al, ah\r
+.skip2:\r
+\r
+ mov ah, 19 ; < cl\82©\82çal\82Ì\8dÅ\91å\92l\82ðah\82É\8cv\8eZ >\r
+ sub ah, cl ; ah = 19 - cl;\r
+ cmp al, ah ; if (al > ah) { al = ah; }\r
+ jbe .skip3\r
+ mov al, ah\r
+.skip3:\r
+\r
+ push bx\r
+ mov si, 0 ; \8e¸\94s\89ñ\90\94\82ð\90\94\82¦\82é\83\8c\83W\83X\83^\r
+retry:\r
+ mov ah, 0x02 ; ah=0x02 : \83f\83B\83X\83N\93Ç\82Ý\8d\9e\82Ý\r
+ mov bx, 0\r
+ mov dl, 0x00 ; a\83h\83\89\83C\83u\r
+ push es\r
+ push dx\r
+ push cx\r
+ push ax\r
+ int 0x13 ; \83f\83B\83X\83Nbios\8cÄ\82Ñ\8fo\82µ\r
+ jnc next ; \83G\83\89\81[\82ª\82¨\82«\82È\82¯\82ê\82Înext\82Ö\r
+ add si, 1 ; si\82É1\82ð\91«\82·\r
+ cmp si, 5 ; si\82Æ5\82ð\94ä\8ar\r
+ jae error ; si >= 5 \82¾\82Á\82½\82çerror\82Ö\r
+ mov ah, 0x00\r
+ mov dl, 0x00 ; a\83h\83\89\83C\83u\r
+ int 0x13 ; \83h\83\89\83C\83u\82Ì\83\8a\83Z\83b\83g\r
+ pop ax\r
+ pop cx\r
+ pop dx\r
+ pop es\r
+ jmp retry\r
+next:\r
+ pop ax\r
+ pop cx\r
+ pop dx\r
+ pop bx ; es\82Ì\93à\97e\82ðbx\82Å\8eó\82¯\8eæ\82é\r
+ shr bx, 5 ; bx\82ð16\83o\83C\83g\92P\88Ê\82©\82ç512\83o\83C\83g\92P\88Ê\82Ö\r
+ mov ah, 0\r
+ add bx, ax ; bx += al;\r
+ shl bx, 5 ; bx\82ð512\83o\83C\83g\92P\88Ê\82©\82ç16\83o\83C\83g\92P\88Ê\82Ö\r
+ mov es, bx ; \82±\82ê\82Å es += al * 0x20; \82É\82È\82é\r
+ pop bx\r
+ sub bx, ax\r
+ jz .ret\r
+ add cl, al ; cl\82Éal\82ð\91«\82·\r
+ cmp cl, 18 ; cl\82Æ18\82ð\94ä\8ar\r
+ jbe readfast ; cl <= 18 \82¾\82Á\82½\82çreadfast\82Ö\r
+ mov cl, 1\r
+ add dh, 1\r
+ cmp dh, 2\r
+ jb readfast ; dh < 2 \82¾\82Á\82½\82çreadfast\82Ö\r
+ mov dh, 0\r
+ add ch, 1\r
+ jmp readfast\r
+.ret:\r
+ ret\r
+\r
+ resb 0x7dfe-$ ; 0x7dfe\82Ü\82Å\82ð0x00\82Å\96\84\82ß\82é\96½\97ß\r
+ db 0x55, 0xaa\r