OSDN Git Service

svn rev.329より移動。
[chnosproject/CHNOSProject.git] / CHNOSProject / chnos / tolset_chn_000 / chnos_008 / chnos / chnipl.nas
diff --git a/CHNOSProject/chnos/tolset_chn_000/chnos_008/chnos/chnipl.nas b/CHNOSProject/chnos/tolset_chn_000/chnos_008/chnos/chnipl.nas
new file mode 100644 (file)
index 0000000..0080cac
--- /dev/null
@@ -0,0 +1,183 @@
+\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