+++ /dev/null
-\r
-[INSTRSET "i486p"]\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 [0x0ff0],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
-msg:\r
- db 0x0a, 0x0a ; \89ü\8ds\82ð2\82Â\r
- db "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
-\r
- db 0x55, 0xaa\r