============================================================== Á¦¸ñ : º¸È£¸ðµå & ÆäÀÌ¡ ºÎÆ®¼½ÅÍ ¿¹Á¦ ¿øÀúÀÚ : johnfine ÀÛ¼ºÀÚ : edward ÀÛ¼ºÀÏÀÚ : 2003. 06. 30 ºÐ¼®¹×¹ø¿ª: edward_frswz ºÐ¼®¹öÁ¯ : ver 0.0.1 ¶óÀ̼¾½º : GPL ȨÆäÀÌÁö : http://OSx86.ORG ============================================================== ======================================================= - Áغñ¹° Windows Machine PartCopy NASM v0.95 or higher JLOC v0.6 or higher VMWare ( ³»¿ëÀ» Àдٺ¸¸é URL ÀÌ Ã·ºÎµÇ¾îÀÖ½À´Ï´Ù.) - Å×½ºÆ® ȯ°æ Pentium III 1GHz Main Memory 256MB Windows 2000 Professional PartCopy NASM v0.98.34 JLOC v0.7 - ¿ä±¸Áö½Ä Ʋ¸° ³»¿ëÀ̳ª ÀÌ»óÇÑ ³»¿ëÀº ¹Ù·Î ¸ÞÀÏ·Î ¾Ã¾îÁÖ¼¼¿ä. Á¦°¡ °ËÁõ ÈÄ ¹Ù·Î °íÃļ­ ¾÷µ¥ÀÌÆ® ÇϰڽÀ´Ï´Ù. email : osx86@osx86.org ======================================================= -- ¹®¼­ Àб⿡ ¾Õ¼­ -- ÇöÀç johnfine ´Ô¿¡°Ô ¸ÞÀÏÀ» º¸³» ´ç½ÅÀÇ ¹®¼­¸¦ ½áµµ µÇ°Ú³Ä´Â ¾û¼ºÇÑ ¹®±¸ÀÇ ¸ÞÀÏÀ» ¹ß¼ÛÇß½À´Ï´Ù. ´ë°­ÀÇ ³»¿ëÀº "Àú´Â Çѱ¹¿¡ »ç´Â Å×Å©´ÏÄà ¶óÀÌÅ͸¦ ²Þ²Ù´Â »ç¶÷ÀÔ´Ï´Ù. ... ¾î¼±¸ Àú¼±¸ ... ´ç½ÅÀÇ ¹®¼­¿Í ¼Ò½ºÄڵ带 ÇѱÛÈ­ ÇØ¼­ GPL ¶óÀ̼¾½º¸¦ ´Þ°í ¿Ã¸®°í ½ÍÀºµ¥ ±¦Âú°Ú½À´Ï±î ?" ¶ó´Â ³»¿ëÀ̾ú½À´Ï´Ù. ÀÌ ¹®¼­´Â johnfine ´ÔÀÌ À§¿Í °°Àº ¶æÀ» ÀÌÇØÇÏÁö ¸øÇϽðųª µ¿ÀÇÇÏÁö ¾ÊÀ¸½Å´Ù¸é ¾ðÁ¦µçÁö ÀúÀÇ À¥ÆäÀÌÁöÀÎ OSx86¿¡¼­ Á¦°Å ÇÒ ÀÇÇâÀÌ ÀÖÀ½À» ¾Ë·Áµå¸³´Ï´Ù. ¹®¼­ ³»¿ëÁß¿¡ ÀÌ·±°Ô ÀÖ±º¿ä. "Àú´Â ÀÌ ¹®¼­ÀÇ ¼Ò½ºÄڵ带 »ç¿ëÇϴµ¥ ´ëÇØ ¾Æ¹«·± Á¦¾àÀ» °¡ÇÏÁö ¾Ê°Ú½À´Ï´Ù. ÇÏÁö¸¸ ÀÌ ¼Ò½ºÄڵ带 »ç¿ëÇØ¼­ ¹®Á¦°¡ »ý±ä´Ù°í ÇÏ´õ¶óµµ Àú´Â ¾Æ¹«·± Ã¥ÀÓÀÌ ¾øÀ¸¸ç, ÀÌ ¼Ò½ºÄÚµåÀÇ Á¤È®¼º¿¡ ´ëÇØ¼­ Ã¥ÀÓÀ» ÁöÁö ¾Ê°Ú½À´Ï´Ù." Á¤È®¼ºÀº Á¦°¡ ÇϳªÇϳª ´Ù Å×½ºÆ® ÇØº¸¸é µÇ°ÚÁÒ. ^^)/ - ¿øÀúÀÚ(Johnfine)ÀÇ °øÁö»çÇ× ======================================================================= Version 2.0, Mar 19, 1998 by John S. Fine johnfine@erols.com I do not place any restrictions on your use of this source code I do not provide any warranty of the correctness of this source code ======================================================================= 1. °£·«ÇÑ ¼Ò°³ BOOTP.ASM Àº º¸È£¸ðµå ¿î¿µÃ¼Á¦¸¦ À§ÇÑ ºÎÆ®½ºÆ®·¦ »ùÇà ÄÚµå ÀÔ´Ï´Ù. ´ëºÎºÐÀÇ ¿î¿µÃ¼Á¦¸¦ À§ÇØ ÁغñÇØ¾ßÇÏ´Â ¾ÆÁÖ ÀÛÀº ÄÚµåÀÇ ÀϺÎÀ̱⵵ ÇÏÁö¿ä. FAT µð½ºÄÏÀ̳ª FAT ÆÄƼ¼ÇÀÇ ºÎÆ® ÄÚµå´Â 0x1C0 ¹ÙÀÌÆ® Å©±â·Î Á¦ÇѵǾî ÀÖ½À´Ï´Ù. BOOTP.ASM Àº 0xF ¹ÙÀÌÆ® À§Ä¡¿¡ ¸ÂÃçÁ® ÀÖ°í, ÀÌ ÄÚµå¿Í µ¥ÀÌÅÍ´Â 0x1B1 ¹ÙÀÌÆ®¸¦ »ç¿ëÇÏ°Ô µË´Ï´Ù. (%edward : ´ÙÀ½°ú °°Àº °úÁ¤À» °ÅÃÄ º¸È£¸ðµå·Î ÀüȯÇϰí, FAT ÆÄÀÏÀ» ÀоîµéÀÌ°Ô µË´Ï´Ù. ) - FAT ÆÄÀÏ ½Ã½ºÅÛ¿¡¼­ º¸È£¸ðµå·ÎÀÇ Àüȯ °úÁ¤ ========================================================================= 1) A20 °ÔÀÌÆ® Enable 2) ¸¶½ºÅÍ ºÎÆ® ·¹ÄÚµå Àбâ 3) ÆÄƼ¼Ç Å×ÀÌºí¿¡¼­ Active ÆÄƼ¼Ç °Ë»öÇϱâ 4) ÆÄƼ¼Ç¿¡¼­ ºÎÆ®¼½ÅÍ Àбâ 5) FAT ÀÇ ·çÆ® µð·ºÅ丮¿Í ù¹øÂ° Ŭ·¯½ºÅÍÀÇ À§Ä¡ ó¸® 6) ·çÆ® µð·ºÅ丮 Àбâ 7) ·çÆ® µð·ºÅ丮¿¡¼­ ƯÁ¤ ÆÄÀÏ °Ë»öÇϱâ(ÀÌ ¿¹Á¦¿¡¼­´Â TEST.BIN ÆÄÀÏÀÌ µË´Ï´Ù.) 8) FAT Àбâ 9) ÆÄÀÏ(TEST.BIN)À» Àо ¹°¸®Àû ¸Þ¸ð¸® 1MB ¿¡¼­ ½ÃÀÛÇϱâ 10) µÎ°³ÀÇ ÆäÀÌÁö Å×À̺í°ú ÇϳªÀÇ ÆäÀÌÁö µð·ºÅ丮¿Í ¸ÅÇÎÇϱâ a) ù ¼±ÇüÁÖ¼Ò 4MB ¸¦ ¹°¸®Àû ÁÖ¼Ò 4MB ·Î ... b) ¼±ÇüÁÖ¼Ò FF800000À» ¹°¸®Àû ÁÖ¼Ò 1MB ·Î ... c) ÆäÀÌÁö µð·ºÅ丮¸¦ ¼±Çü ÁÖ¼ÒÀÇ ³¡¿¡ ¸ÅÇÎÇϱâ 11) ÆäÀÌ¡ ±â´ÉÀ» ۰í, º¸È£¸ðµå·Î ÀüȯÇϱâ 12) ¼±ÇüÁÖ¼Ò FF800000 ¿¡ TEST.BIN À» JMP ½Ã۱â ========================================================================= - ÆÄÀÏ ±¸¼º ========================================================================= BOOTP.ASM ¼Ò½ºÄÚµå BOOTP.LNK BOOTP ÆÄÀÏ ¸µÅ·À» À§ÇÑ JLOC ÄÁÆ®·Ñ ÆÄÀÏ BOOTP.BIN BOOTP.ASM À» ÅëÇØ »ý¼ºµÈ ¹ÙÀ̳ʸ® ÆÄÀÏ GDT.INC GDT[Global Descriptor Table]¸¦ À§ÇÑ Á¤ÀÇ GDT_OLD.INC GDT.INC ÆÄÀÏÀÇ ÀϺΠGDT_NEW.INC GDT.INC ÆÄÀÏÀÇ ÀϺΠTEST.ZIP Å©±â°¡ Å« TEST.BIN »ùÇà À̹ÌÁö (http://www.erols.com/johnfine/#8254ex ) ========================================================================= (% edward : Àú´Â ÆÄÀÏ ±¸¼º±îÁö´Â ÇÏÁö ¾ÊÀ»°Í °°³×¿ä. ¹®¼­³»¿¡ ¼Ò½º¸¦ ´Ù ³Ö¾î ³õÀ»²²¿ä. ¾î·µç ÆÄÀϵéÀÇ ±¸¼ºÀº ´ÙÀ½°ú °°½À´Ï´Ù. ) build ¿Í install À» À§Çؼ­ ÇÊ¿äÇÑ °ÍµéÀ» ±¸ÇÒ¼ö Àִ°÷ =============================================== - NASM v 0.95 or higher http://www.cryogen.com/Nasm/ http://www.osx86.org/data/tool.html - JLOC http://www.erols.com/johnfine/#jloc http://www.osx86.org/data/tool.html - PARTCOPY http://www.erols.com/johnfine/#partcopy http://www.osx86.org/data/tool.html =============================================== BOOTP.ASM ÆÄÀÏ ³»¿¡ Build ¿Í Install °ü·Ã ¸í·É¿¡ ´ëÇØ ¼Ò°³µÇ¾î ÀÖ½À´Ï´Ù. »ùÇà À̹ÌÁö¿¡´Â BOOTP °¡ Å« À̹ÌÁö¸¦ ·ÎµåÇÒ ¼ö Àִ°¡ Å×½ºÆ®¸¦ Çϱâ À§ÇØ 3MB Å©±âÀÇ À̹ÌÁö¿¡ ´ëÇÑ ÄÚµå¿Í µ¥ÀÌÅ͸¦ Æ÷ÇÔÇϰí ÀÖ½À´Ï´Ù. 2. ¼Ò½ºÀÇ ºÐ¼® 2-1. BOOTP.ASM(¼Ò½ºÄÚµå) ================================================================================= ; bootp.asm Bootstrap for protected mode image ; Version 1.0, Dec 14, 1997 ; Sample code ; by John S. Fine johnfine@erols.com ; ; ÀÌ ÇÁ·Î±×·¥Àº ¼¼ °¡Áö ¸ñÀûÀ¸·Î ÀÛ¼ºµÇ¾ú½À´Ï´Ù. ; ; 1) Ç÷ÎÇÇÀÇ ºÎÆ®¼½Å͸¦ ¼öÁ¤ÇÏÁö¾Ê°í Çϵåµð½ºÅ©·Î ºÎÅÍ Å×½ºÆ® À̹ÌÁö¸¦ ·Îµå Çϴµ¥ ; »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸¹Àº ȯ°æ¿¡¼­ Ç÷ÎÇÇ·Î ºÎÆ®ÇÏ´Â °ÍÀº º¸È£¸ðµå Å×½ºÆ®¸¦ À§ÇÑ ; °¡Àå ±ú²ýÇÑ »óÅ·ΠºÎÆÃÇÒ ¼ö ÀÖ´Â °¡Àå ½¬¿î ¹æ¹ýÀÌ´Ù. ÇÏµå µð½ºÅ© µå¶óÀ̺ê·Î ºÎÅÍ ; ºÎÆ®ÇÏ¿© À̹ÌÁö¸¦ Àоî¿ÈÀ¸·Î Ç÷ÎÇÇ ºÎÆ®·Î ÀÎÇØ »ý±â´Â ´ëºÎºÐÀÇ µô·¹ÀÌ¿Í Á¦¾àÀ» ; ¾ø¾Ù ¼öµµ ÀÖ´Ù. ; ; 2) ºÎÆ®½ºÆ®·¦ Æ©Å丮¾ó¿¡ µû¶ó º¸È£¸ðµå ºÎÆ®½ºÆ®·¦Àº ¸¹Àº ´Ü°è¿Í ºÎÆ®½ºÆ®·¦ ÄÚµåÀÇ ; Å©±â¸¦ ÁÙÀ̱â À§ÇØ ¸¹Àº Æ®¸¯ÀÌ ÇÊ¿äÇÏ´Ù´Â Á¡¿¡ ´ëÇØ Å×½ºÆ®¸¦ ÅëÇØ Áõ¸íÇϰíÀÚ ÇÑ´Ù. ; ; 3) º¸È£¸ðµå, ÆÄƼ¼Ç ·¹º§, ºÎÆ® ½ºÆ®·¦¿¡ ±Ù°ÅÇÏ¿©, ¿ì¸®ÀÇ È¯°æ¿¡¼­ ÇÊ¿äÇÏÁö ¾ÊÀº ; ´Ü°è(ÀÛ¾÷)µéÀ» Á¦°ÅÇϰí, Á¦°øµÇÁö ¾ÊÀ» »óÅ¿¡ ´ëÇÑ ¸î °¡Áö ¿¡·¯ ¸Þ½ÃÁö¸¦ ; Ãß°¡ÇÑ´Ù. ; ; Âü°í»çÇ× : ; ; 1) ´ëºÎºÐÀÇ Âü°í»çÇ×Àº ÀÌ ÆÄÀÏÀÇ ³¡¿¡ ÁÖ¼®À¸·Î Æ÷ÇԵǾî ÀÖ½À´Ï´Ù. ; ; 2) ¸î¸î Âü°í»çÇ×Àº BOOTP.TXT ÆÄÀÏ¿¡ ÀÖ½À´Ï´Ù. ; (% edward : BOOTP.TXT ÆÄÀÏÀº ¾ø´øµ­ -_-;;;) ; ; 3) ¼Ò½ºÄڵ峻¿¡ ÁÖ¼®Áß¿¡ {} ¸¦ »ç¿ëÇϰí ÀÖ´Â ³»¿ëµéÀº ÀÌ ÆÄÀÏÀÇ ³¡ºÎºÐ¿¡ ; { } ¾ÈÀÇ Âü°í¼½¼Ç¿¡ µû¶ó Á¤¸®°¡ µÇ¾îÀÖ´Ù. ; ; 4) ³»°¡ ÄÚµåÀÇ Å©±â¸¦ ÁÙÀÌ´Â ºÎºÐ¿¡¼­ °¡Àå ÁÖµÈ ¹æ¹ýÀº ·¹Áö½ºÅͳ»ÀÇ ; ¾µ¸ð¾ø´Â °ªµéÀ» Á¦°ÅÇÏ°í ·¹Áö½ºÅ͸¦ ÃʱâÈ­ ÇϱâÀ§ÇÑ °¡Àå È¿À²ÀûÀÎ ¹æ¹ý¿¡ ; ¼±Åÿ¡ ÀÖ´Ù. ¹ÏÀ»¼ö ¾ø°ÚÁö¸¸ ¸î¸î ¶óÀο¡¼­ ";>" ¶Ç´Â ";>>" ·Î ½ÃÀÛÇϴµ¥ ; ÀÌ ¶óÀεéÀº ÄÚµå ½ÇÇà ½ÃÁ¡¿¡¼­ ·¹Áö½ºÅÍ °ªÀ» ³ªÅ¸³½´Ù. ; ";>" ´Â ´ÙÀ½ Äڵ弽¼Ç¿¡¼­ ÇÊ¿äÇÑ °ªÀ» °¡¸®Å°¸ç, ; ";>>" ´Â ´ÙÀ½ ¼½¼Ç¿¡¼­ ¼öÁ¤µÇÁö ¾ÊÀ¸¸ç ³ªÁß¿¡µµ »ç¿ëµÉ °ªÀ» °¡¸®Å²´Ù. ;_____________________________________________________________________________ %include "gdt.inc" struc DISK_PARM ; ¹ÙÀÌ¿À½ºÀÇ ÇÏµå µð½ºÅ© ÆÄ¶ó¹ÌÅ͵é DP_cyl resw 1 ; ½Ç¸°´õ DP_heads resb 1 ; Çì´õ resb 5 DP_ctrl resb 1 ; ÄÁÆ®·Ñ resb 5 DP_sect resb 1 ; ¼½ÅÍ resb 1 endstruc struc PT_ENT ; ÆÄƼ¼Ç Å×ÀÌºí ¿£Æ®¸® BootFlag resb 1 BeginHead resb 1 BeginSector resb 1 BeginCyl resb 1 SystemID resb 1 EndHead resb 1 EndSector resb 1 EndCyl resb 1 RelSectorLow resw 1 RelSectorHigh resw 1 NumSectorsLow resw 1 NumSectorsHigh resw 1 endstruc struc BB ; ÆÄƼ¼Ç ºÎÆ® ºí·° resb 0xD ; ¹«½ÃÇÒ °Í BB_clu resb 1 ; Ŭ·¯½ºÅÍ´ç ¼½ÅÍ BB_res resw 1 ; Reserved ¼½ÅÍ BB_fats resb 1 ; FAT ¼ö BB_root resw 1 ; ·çÆ® µð·ºÅ丮 ¿£Æ®¸® resb 3 ; ¹«½ÃÇÒ °Í BB_fat resw 1 ; FAT ´ç ¼½ÅÍ endstruc max_xfer equ 0x78 ; Çѹø¿¡ Àü¼ÛÇϱâ À§ÇÑ ÃÖ´ë ¼½ÅÍ ¼ö ; ¹Ýµå½Ã 8·Î ³ª´µ¾îÁö´Â ¼ö¿©¾ß ÇÑ´Ù. SEGMENT START USE16 jmp short start ; ºÎÆ®¼½ÅÍÀÇ ½ÃÀÛÁ¡ nop resb 0x3B ; Æ÷¸ËÀ» À§ÇÑ ÆÄ¶ó¸ÞÅÍ ¼³Á¤ °Ç³Ê¶Ù±â start: cli ; {0} lgdt [cs:gdt] ; GDT ·ÎµåÇϱâ mov ecx, CR0 ; º¸È£¸ðµå·Î ÁøÀÔÇϱâ inc cx mov CR0, ecx .5: in al, 0x64 ; A20 °ÔÀÌÆ® Ȱ¼ºÈ­ {4A} {5} test al, 2 jnz .5 mov al, 0xD1 out 0x64, al .6: in al, 0x64 test al, 2 jnz .6 mov al, 0xDF out 0x60, al mov ax, flat_data ; 4Gb µ¥ÀÌÅÍ ¼¼±×¸ÕÆ®¸¦ À§ÇÑ ¼¿·ºÅÍ mov ds, ax ; {2} ds ·¹Áö½ºÅ͸¦ À§ÇÑ ¸®¹ÌÆ® È®Àå mov es, ax ; es ·¹Áö½ºÅ͸¦ À§ÇÑ ¸®¹ÌÆ® È®Àå dec cx ; º¸È£¸ðµå·Î µ¹¾Æ°¡±â mov CR0, ecx mov al, 0x80 ; ºÎÆ® ºí·°À» À§ÇÑ ¼¼±×¸ÕÆ® mov es, ax ; {1A} xor eax, eax ; ¼¼±×¸ÕÆ®¿Í ³í¸®Àû ºí·° ¼ö(LBN:Logical block number) mov ds, ax ; {1B} mov ss, ax mov sp, start xor edi, edi inc di ; ¼½Å͵éÀÇ Ä«¿îÆ® call read_sectors ; MBB(Master boot block)Àоî¿À±â ;> eax = 0 ;> edi = 1 ;> ds = 0 ;> es = 80 mov si, 0x9BE-PT_ENT_size ; ÆÄƼ¼Ç Å×ÀÌºí °¡¸®Å°±â .10: add si, byte PT_ENT_size cmp [si+BootFlag], al ; Ȱ¼ºÈ­ µÇ¾ú´Â°¡ ? je .10 ; ¾Æ´Ï¿À jg boot_error mov eax, [si+RelSectorLow] ; ÆÄƼ¼ÇÀÇ LBN ¼½ÅÍ ¼ö call read_sectors ; ÆÄƼ¼Ç ºÎÆ® ºí·° Àбâ ;> eax = LBN of partition ;> ebx = 0000???? ;> edi = 0000???? ;> ds = 0 mov bp, 0x800 ; ÆÄƼ¼Ç ºÎÆ® ºí·° °¡¸®Å°±â mov bx, [bp+BB_res] ; ù FAT ÀüÀÇ ¼½Å͵é add eax, ebx ; FAT ÀÇ ³í¸®Àû ºí·° ¼ö push eax ; FAT ÈÄ¿¡ ÀбâÀ§ÇØ ÇÊ¿ä movzx bx, [bp+BB_fats] ; FAT µéÀÇ ¼ö imul bx, [bp+BB_fat] ; FAT Times size of FAT add eax, ebx ; ·çÆ® µð·ºÅ丮ÀÇ ³í¸®Àû ºí·°ÀÇ ¼ö(LBN) mov di, [bp+BB_root] ; ·çÆ® µð·ºÅ丮 ¿£Æ®¸® push di ; ³ªÁß¿¡ ´Ù½Ã »ç¿ëÇϱâ À§ÇØ ½ºÅÃÀ¸·Î dec di ; º¯È¯Çϱâ À§ÇÑ ¼½ÅÍÀÇ ¼ö shr di, 4 ; ¼½ÅÍ´ç 16 µð·ºÅ丮 ¿£Æ®¸® inc di mov es, bp ; 800:0 ¿¡ µð·ºÅ丮 Àбâ call read_sectors add eax, edi ; Ŭ·¯½ºÅÍ 2ÀÇ ³í¸®Àû ºí·°ÀÇ ¼ö(LBN) ;>> [sp+2] = FAT ÀÇ ³í¸®Àû ºí·°ÀÇ ¼ö(LBN) ;> [sp] = ·çÆ® µð·ºÅ丮 ¿£Æ®¸®ÀÇ ¼ö ;>> eax = Ŭ·¯½ºÅÍ 2ÀÇ ³í¸®Àû ºí·°ÀÇ ¼ö(LBN) ;> edi = 0000???? ;>> bp = 800 ;> ds = 0 ;> es = 800 pop bx ; ·çÆ® µð·ºÅ丮 ¿£Æ®¸® xor di, di ; µð·ºÅ丮 °¡¸®Å°±â{1C} .20: mov si, file_name ; ¿øÇÏ´Â ÆÄÀÏÀÇ À̸§ xor ecx, ecx mov cl, 11 a32 rep cmpsb ; ÆÄÀÏÀ» ã¾Ò´Â°¡ ? je found ; ±×·¸´Ù¸é found ·Î Á¡ÇÁ add cl, 21 ; ¿ÀÇÁ¼ÂÀ» ´ÙÀ½ µð·ºÅ丮 ¿£Æ®¸®·Î add edi, ecx ; ´ÙÀ½ ¿£Æ®¸®·Î À̵¿Çϱâ dec bx ; ¸ðµç ¿£Æ®¸®¸¦ °ÅÄ¥¶§ ±îÁö ¹Ýº¹ jnz .20 ; µð·ºÅ丮¿¡¼­ ÆÄÀÏÀ» ãÁö ¸øÇßÀ»¶§ boot_error: disk_error: mov ax, 0xE07 ; {3} int 10h jmp short $ ;> [sp] = FAT ÀÇ ³í¸®Àû ºí·°ÀÇ ¼ö ;> eax = Ŭ·¯½ºÅÍ 2 ÀÇ ³í¸®Àû ºí·°ÀÇ ¼ö ;> es:edi = µð·ºÅ丮 ¿£Æ®¸®³»ÀÇ À̸§ÀÇ ³¡À» °¡¸®Å´ ;> bp = 800 ;> ds = 0 ;> es = 800 found: mov bx, [es:edi+0xF] ; ÆÄÀÏÀÇ Å¬·¯½ºÅÍ ½ÃÀÛ mov di, [bp+BB_fat] ; (¼½ÅÍ·Î ±¸¼ºµÈ) FAT Å©±â xchg eax, ebp ; ebp = Ŭ·¯½ºÅÍ 2ÀÇ ³í¸®Àû ºí·°ÀÇ ¼ö pop eax ; FAT ÀÇ ³í¸®Àû ºí·°ÀÇ ¼ö push bx ; ÆÄÀÏÀÇ Å¬·¯½ºÅÍ ½ÃÀÛ call read_sectors mov bh, 0x40 mov es, bx ; es = 0x4000 mov edi, 0x100000-0x40000 ; {1D}{4B} es 1¸Þ°¡¹ÙÀÌÆ® - es º£À̽º ¾îµå·¹½º .10: ;> [sp] = ÆÄÀÏÀÇ ´ÙÀ½ Ŭ·¯½ºÅÍ ;> esi = 0000???? ;> es:edi = ¸ñÀûÁö ÁÖ¼Ò ;> ebp = Ŭ·¯½ºÅÍ 2ÀÇ ³í¸®Àû ºí·°ÀÇ ¼ö ;> ds = 0 xor eax, eax pop si ; ÆÄÀÏÀÇ ´ÙÀ½ Ŭ·¯½ºÅÍ dec si dec si cmp si, byte 0xFFFFFFEE ; À¯È¿ÇÑ Å¬·¯½ºÅÍ Àΰ¡ ? jae eof ; ¾Æ´Ï¿À : ÆÄÀÏÀÇ ³¡À¸·Î ÁüÀÛµÊ push word [esi*2+0x8004] ; ±× ´ÙÀ½ Ŭ·¯½ºÅÍ push di ; ¸ñÀûÁö ÁÖ¼Ò ÀúÀå {7} mov al, [0x800+BB_clu] ; (¼½ÅÍ·Î ±¸¼ºµÈ)°¢°¢ÀÇ Å¬·¯½ºÅÍ Å©±â mov di, ax mul esi ; ÇöÀç Ŭ·¯½ºÅÍÀÇ ¼ö¸¸Å­ °öÇϱâ add eax, ebp ; Ŭ·¯½ºÅÍ 2 ÀÇ ³í¸®Àû ºí·°ÀÇ ¼ö ´õÇϱâ call read_sectors ; Ŭ·¯½ºÅÍ Àбâ ;>> ebx = 0000??00 ;> di = (¼½ÅÍ·Î ±¸¼ºµÈ) Ŭ·¯½ºÅÍÀÇ Å©±â ;> esi = 0 ;>> ebp = Ŭ·¯½ºÅÍ 2ÀÇ ³í¸®Àû ºí·°ÀÇ ¼ö ;> [sp] = ¸ñÀûÁö ÁÖ¼ÒÀÇ ÇÏÀ§ 16ºñÆ®{7} ;> [sp+2] = ´ÙÀ½¿¡ ¿Ã Ŭ·¯½ºÅÍ ;>> ds = 0 ;> es = 4000 mov cx, di ; (¼½ÅÍ·Î ±¸¼ºµÈ) Ŭ·¯½ºÅÍÀÇ Å©±â xchg ch, cl ; (¿öµå·Î ±¸¼ºµÈ) Ŭ·¯½ºÅÍÀÇ Å©±â pop di ; ¸ñÀûÁö ÁÖ¼Ò º¹±Í {7} es a32 rep movsw jmp short .10 ; ÆÄÀÏÀÇ ³¡±îÁö ¹Ýº¹ ;> eax = 0 ;> ebx = 0000??00 ;> si = FF?? ;> ecx = 0 eof: mov bh, 0x9C mov es, bx ; es = 9C00 xor di, di ; {1E} ÆäÀÌÁö Å×À̺íµéÀÇ ÁÖ¼Ò¸¦ es¿¡ ¾²±â mov bh, 4096/256 ; ebx = 4096 .10: mov ch, 4 ; cx = 1024 mov al, 7 .20: stosd add eax, ebx int 8 ;{8} loop .20 shr eax, 2 ; {4C} (óÀ½¿¡¸¸) 4Mb / 4 = 1Mb shr si, 1 ; ´Ü ÇϳªÀÇ ÆäÀÌÁö ÀÛ¾÷ÀÌ ¿Ï·áµÇ¾ú´Â°¡ ? jo .10 ; ±×·¸´Ù¸é .10 À¸·Î cli ; ¾Æ´Ï¸é {6} mov eax, 0x9C007 ; ÆäÀÌÁö µð·ºÅ丮ÀÇ Ã¹¹øÂ° ÆäÀÌÁö Å×ÀÌºí Æ÷ÀÎÅÍ stosd ; {1H} mov ax, (1024-3)*2 xchg ax, cx rep stosw mov ax, 0xD007 ; 0FF800000 ÆäÀÌÁö Å×ÀÌºí Æ÷ÀÎÅÍ stosd ; {1F} mov ah, 0xE0 ; ÆäÀÌÁö µð·ºÅ丮 self Æ÷ÀÎÅÍ stosd ; {1G} mov al, 0 mov CR3, eax ; ÆäÀÌÁö µð·ºÅ丮 ¼Â¾÷ mov eax, CR0 ; ÆäÀÌ¡°ú º¸È£¸ðµå ±â´É ½ÃÀÛ or eax, 0x80000001 mov CR0, eax mov cl, flat_data ; ds¿Í es ¼Â¾÷ push cx ; {5} pop ds mov es, cx jmp dword 8:0xFF800000 ; GO read_sectors: ; Input: ; EAX = ³í¸®Àû ºí·°ÀÇ ¼ö ; DI = ¼½ÅÍ Ä«¿îÆ® ; ES = ¼¼±×¸ÕÆ® ; Output: ; BL = es ·¹Áö½ºÅÍÀÇ ÇÏÀ§ ¹ÙÀÌÆ® ; EBX »óÀ§ 16ºñÆ® Ŭ¸®¾îµÊ ; DL = 0x80 ; EDX »óÀ§ 16ºñÆ® Ŭ¸®¾îµÊ ; ESI = 0 ; Clobbered: ; BH, CX, DH push eax push di push es .10: push eax ; ³í¸®Àû ºí·°ÀÇ ¼ö push ds lds si, [0x104] ; ÇÏµå µå¶óÀ̺ê 0 ÀÇ ÆÄ¶ó¸ÞÅ͵é cdq ; edx = 0 movzx ebx, byte [si+DP_sect] div ebx ; EAX = Æ®·¢ ; EDX = ¼½ÅÍ-1 mov cx, dx ; CL = ¼½ÅÍ-1 ; CH = 0 inc cx ; CL = ¼½ÅÍÀÇ ¼ö xor dx, dx mov bl, [si+DP_heads] pop ds div ebx mov dh, dl ; Çìµå mov dl, 0x80 ; µå¶óÀ̺ê 0 xchg ch, al ; CH = ½Ç¸°´õ ³Ñ¹öÀÇ ÇÏÀ§ 8 ºñÆ®;AL = 0 shr ax, 2 ; AL[6:7] = ½Ç¸°´õÀÇ »óÀ§ 2 ºñÆ®;AH = 0 or cl, al ; CX = ½Ç¸°´õ¿Í ¼½ÅÍ mov al, max_xfer ; AX = Àü¼ÛÇÒ(xfer) ÃÖ´ë ¼½ÅÍÀÇ ¼ö cmp ax, di ; Àüüũ±â°¡ ÃÖ´ëÀü¼Û·® º¸´Ù ´õ Å«°¡ ? jb .20 ; ±×·¸´Ù¸é : ÃÖ´ë·Î Àü¼Û xchg ax, di ; ¾Æ´Ï¶ó¸é : AX=Àüü ;DI=ÃÖ´ë .20: mov ah, 2 ; Àбâ xor bx, bx int 13h jc near disk_error mov bx, es add bh, max_xfer>>3 ; ¼¼±×¸ÕÆ® À̵¿ mov es, bx pop eax add eax, byte max_xfer sub di, byte max_xfer ja .10 pop es pop di pop eax xor esi, esi ret file_name db 'TEST BIN' gdt start_gdt ;{9} flat_code desc 0, 0xFFBFF, D_CODE+D_READ+D_BIG+D_BIG_LIM flat_data desc 0, 0xFFFFF, D_DATA+D_WRITE+D_BIG+D_BIG_LIM end_gdt resb 0x1FE+$$-$ db 0x55, 0xAA ; ºÎÆ® ¼½ÅÍÀÇ ³¡ ;_____________________________________________________________________________ ; ; Build/Install ¸í·É : ; (% edward : Á¶±Ý ¸ÂÁö ¾Ê´Â ºÎºÐÀÌ ÀִµíÇÏ¿© ... ¾Æ·¡ 3Àå¿¡¼­ ¼Ò°³Çϵµ·Ï ; ÇϰÚÀ¸´Ï °Ç³Ê¶Ùµµ·Ï Çϼ¼¿ä. ´ëÃæ Àо±â¸¸ ÇÏ°í ³Ñ¾î°¡¼¼¿ä.) ; ; *) NASMw -f obj bootp.asm ; (Æ÷¸ËÀ» obj ·Î ÇÏ¿© ¾î¼Àºí ÀÛ¾÷À» ÇÕ´Ï´Ù.) ; ; *) JLOC bootp.lnk bootp.bin ; (JLOC À» ÀÌ¿ëÇØ¼­ ¸µÅ©ÇØÁÝ´Ï´Ù.) ; ; *) Æ÷¸ËµÈ Ç÷ÎÇǸ¦ »ðÀÔÇØÁֽðí... ; ; *) PARTCOPY bootp.bin 0 3 -f0 0 ; ; ÀÌ ÀÛ¾÷Àº JMP $+3E ÀÇ Ç÷ÎÇÇÀÇ ½ÃÀÛÁ¡¿¡ JMP¸¦ µ¤¾î¾´´Ù. ; ¸¸¾à¿¡ ´Ù¸¥ °÷À¸·Î Á¡ÇÁÇϱ⸦ ¹Ù¶õ´Ù¸é, bootp.asm ÆÄÀÏÀÇ ½ÃÀÛÁ¡À» °¡¸®Å°´Â ; "resb"¸¦ ½ÃÀÛ ÁÖ¼Ò¸¦ Á¶ÀýÇØÁÖ¸é µÈ´Ù. ; ; *) PARTCOPY bootp.bin 3E 1C2 -f0 3E ; ; ÀÌ ÀÛ¾÷Àº bootp.bin ÀÇ ³ª¸ÓÁö¸¦ Ç÷ÎÇÇÀÇ ¿ÀÇÁ¼Â 3E ·Î º¹»çÇϰí, ; Æ÷¸Ë¿¡ ÀÇÇÑ ÆÄ¶ó¹ÌÅÍ ¼Â¾÷À» °Ç³Ê¶Ú´Ù. ±× ÀÌÀ¯´Â µð½ºÅ©°¡ DOS µð½ºÄÏÀ¸·Î ; »ç¿ë°¡´ÉÇϱ⠶§¹®ÀÌ´Ù. ; (% edward : µµ½º·Î µð½ºÅ©¸¦ Æ÷¸Ë ÇϽŵڿ¡ µð½ºÅ©¸¦ ´ýÇÁÇØº¸¼¼¿ä. ; Æ÷¸ËÀ» ÇÏ°í³ª¸é µð½ºÅ©°¡ ÅÖÅÖ ºñ´Â°ÍÀÌ ¾Æ´Ï¶ø´Ï´Ù. ¾î¶² µ¥ÀÌÅ͵éÀÌ ; ¿©ÀüÈ÷ Á¸ÀçÇϰí ÀÖ´ä´Ï´Ù.) ; ; *) C:\TEST.BIN À¸·Î º¸È£¸ðµå À̹ÌÁö¸¦ º¹»çÇØÁÖ¼¼¿ä. ; ; *) ±×¸®°í Ç÷ÎÇÇ·Î ºÎÆÃÇÕ´Ï´Ù. ; (% edward :Ç÷ÎÇÇ¿¡´Â º¸È£¸ðµå ºÎÆ®¼½ÅÍÀÎ bootp.bin ÀÇ Äڵ尡 µé¾î°¡ ÀÖ°ÚÁÒ. ; ±×¸®°í´Â º¸È£¸ðµå¿Í ÆäÀÌ¡À» °¡µ¿ ½Ã۰í C:\TEST.BIN À» ÀоîµéÀ̰ÚÁÒ.) ;_____________________________________________________________________________ ; ; ³ª´Â ´ëºÎºÐÀÇ ¿¡·¯ Çڵ鸵À» ºü¶ß·È´Ù. ¿¡·¯¸¦ ã¾ÒÀ»¶§, ÇѹøÀÇ ºñÇÁÀ½À» ; Ãâ·ÂÇϰí, µ¿ÀÛÀ» ÁßÁöÇÏ°Ô µÈ´Ù. ´ÙÀ½ÀÇ ¿¡·¯µéÀº ãÀ¸·Á°í ½ÃµµÇÏÁö ¾ÊÀ»°ÍÀÌ´Ù. ; a) 386 ÀÌ»óÀ¸·Î µ¿ÀÛÇÏÁö ¾ÊÀ½ ; b) Active ÆÄƼ¼ÇÀÌ FAT16 ÆÄƼ¼ÇÀÌ ¾Æ´Ô ; c) ·çÆ® µð·ºÅ丮°¡ 608Kb º¸´Ù Å©´Ù. ; d) TEST.BIN ÆÄÀÏÀÌ 4Mb º¸´Ù Å©´Ù. ; e) Àüü RAMÀÌ 1MB + TEST.BIN ÀÇ ½ÇÁ¦ Å©±âº¸´Ù ÀÛ´Ù. ; ; ±×¸®°í ´ÙÀ½ ¿¡·¯µéÀº üũÇÒ °ÍÀÌ´Ù. ; a) ÀÎÅÍ·´Æ® 13h ÈÄ¿¡ C ºñÆ®°¡ ¼¼Æ®µÊ ; b) Active ÆÄƼ¼ÇÀÌ ¾øÀ½ ; c) ·çÆ® µð·ºÅ丮¿¡ "TEST.BIN" ÆÄÀÏÀÌ ¾øÀ½ ; ; ¸¸¾à¿¡ ÀÌ ºÎÆ®½ºÆ®·¦ Äڵ尡 ºÎÆ® ÆÄƼ¼Ç¿¡ Á¸ÀçÇÑ´Ù¸é, ; MBR ÀÇ Äڵ带 ÀÐÁö ¾Ê°í ºÎÆ® ÆÄƼ¼ÇÀ» ã¾Æ¼­ ÀÐ°Ô µÉ °ÍÀÌ´Ù. ; ±×¸®°í ³ª¼­ ¸î °¡Áö ¿¡·¯ üũ¸¦ Ãß°¡ÇÏ¸é µÈ´Ù. ;_____________________________________________________________________________ ; ; ¼Ò½ºÄÚµåÀÇ {} ºÎºÐ¿¡ ´ëÇÑ Âü°í ¼½¼Ç : ; ; {0} BIOS³ª ºÎÆ®Çϱâ ÀÌÀü¿¡ Àü´ÞµÈ Á¦¾î Áï CPUÀÇ »óÅ¿¡ ´ëÇØ ¾î¶°ÇÑ °¡Á¤µµ ; ÇÒ ¼ö ¾ø´Ù. ÀÎÅÍ·´Æ®´Â disable »óŰ¡ µÇ°í, DS=0 °¡ µÉ°ÍÀÌ´Ù. ; ÇÏÁö¸¸ À̰͵µ È®½ÅÇÒ ¼ö ¾ø´Ù. ´Ù¸¸ °¡Á¤ÇÒ ¼ö ÀÖ´Â °Ç Äڵ忡 µÎ ¹ÙÀÌÆ®°¡ ; ÀúÀåµÈ´Ù´Â °ÍÀÌ´Ù. ; ; {1} ¸Þ¸ð¸®ÀÇ »ç¿ë: ; {A} MBR °ú ÆÄƼ¼Ç ºÎÆ® ºí·°À» 80:0 ¿¡ ÀоîµéÀδÙ. ; {B} MBR °ú ÆÄƼ¼Ç ºÎÆ® ºí·°À» 0:800 ¿¡¼­ ¾×¼¼½ºÇÑ´Ù. ; {C} µð·ºÅ丮¿Í FAT ´Â 800:0 À¸·Î ÀоîµéÀÌ°í ¾×¼¼½ºÇÑ´Ù. ; {D} À̹ÌÁö¸¦ ÀоîµéÀ̰í, ¹°¸®ÁÖ¼Ò 1MB ·Î º¹»çµÈ´Ù. ; {E} ÆäÀÌÁö Å×À̺íÀº ¹°¸®ÁÖ¼Ò 9C000 ¿¡ ¸¸µé¾îÁø´Ù. ; {F} À̹ÌÁö´Â ¼±ÇüÁÖ¼Ò FFF80000 À¸·Î ¸ÅÇεȴÙ. ; {G} ÆäÀÌÁö Å×À̺íÀº ¼±ÇüÁÖ¼Ò FFFC0000 À¸·Î ¸ÅÇεȴÙ. ; {H} ù 4MB ´Â ³í¸®ÁÖ¼Ò¿Í ¹°¸®ÁÖ¼Ò°¡ °°°Ô ¸ÅÇεȴÙ. ; ; {2} ÀÌ ÄÚµåÀÇ ´ëºÎºÐÀº °Å´ëÇÑ ¸®¾ó¸ðµå·Î µ¿ÀÛÇÑ´Ù. ; ÀÌ´Â Äڵ尡 ÀÎÅÍ·´Æ® 13h ¶Ç´Â ´Ù¸¥ ¹øÈ£ÀÇ ¹ÙÀÌ¿À½º ÄÝÀ» ¸¸µå´Â°ÍÀ» ; Çã¿ëÇϰí, È®ÀåµÈ ¸Þ¸ð¸®¸¦ Á÷Á¢ ¿¢¼¼½ºÇÏ´Â °Í ¶ÇÇÑ Çã¿ëÇÑ´Ù. ; ; {3} ¸¹Àº ¿¡·¯Ã¼Å©¸¦ »ý·«ÇßÀ¸¸ç, üũµÈ ¿¡·¯¿¡ ´ëÇØ¼­´Â ÇѹøÀÇ ºñÇÁÀ½À» ; ³½´Ù. ÀÌ Á¡Àº º¸È£¸ðµå ºÎÆÃ¿¡ ´ëÇØ °øºÎÇϰųª º¸È£¸ðµå Ä¿³Î °³¹ßÀÚ°¡ ; Å×½ºÆ®¸¦ À§ÇØ »ç¿ëÇϱ⿡ ÀûÇÕÇÏ°Ô µµ¿ÍÁØ´Ù. ; ÀÌ Äڵ尡 OS ÆÐŰÁö¿Í ÇÔ²² »ç¿ëµÉ °æ¿ì °ø°£À» ´õ Å©°Ô Àâ¾ÆÁÖ°í, ; ½ÇÁ¦ ¿¡·¯¸Þ½ÃÁö¸¦ Ç¥½ÃÇØÁÖ¾î¾ß ÇÒ °ÍÀÌ´Ù. ; ; {4} ºÎÆ® ÀÛ¾÷À» ÁÙÀ̱â À§ÇÑ ÇѰ¡Áö ¹æ¹ýÀº Ä¿³Î ½ºÅ¸Æ® ¾÷ Äڵ带 À§ÇÑ ; A20 °ÔÀÌÆ® »ç¿ëÀ» À§ÇÑ ÀÛ¾÷À» Á¦°ÅÇØ¾ß ÇÑ´Ù. ; {A} A20 °ÔÀÌÆ®¸¦ enable ·Î ÇÏÁö ¾ÊÀ½. ; {B} 1MB ¿¡ À̹ÌÁö¸¦ ·ÎµåÇÏ´Â ´ë½Å¿¡ 2MB ¿¡ ·ÎµåÇÑ´Ù. ; (A20 °ÔÀÌÆ®°¡ disable »óŰ¡ µÇ¸é Ȧ¼ö¹øÂ° ¸Þ°¡¹ÙÀÌÆ®ÀÇ ¸Þ¸ð¸®´Â ; »ç¿ëÇÒ ¼ö ¾ø´Ù.) ; {C} 4MB ¿¡¼­ 2MB ·Î º¯È¯Çϱâ À§Çؼ­´Â "shr eax,1" ¿Í °°ÀÌ ÇÑ´Ù. ; ; ÇöÀç ÀÌ ÄÚµå´Â ÃÖ¼ÒÇÑ 1MB + À̹ÌÁöÀÇ Å©±â ¸¸Å­ÀÇ ¸Þ¸ð¸®¸¦ ÇÊ¿ä·Î ÇÔ¿¡ ÁÖ¸ñÇÏÀÚ. ; À̰ÍÀº 2MB + À̹ÌÁöÀÇ Å©±â·Î ¹Ù²Ü¼öµµ ÀÖ´Ù. À§ÀÇ ¼½¼Ç {4}¸¦ Àß ÀÌ¿ëÇÑ´Ù¸é... ; ; {5} ÀÌ ÄÚµåÀÇ Ã¹¹øÂ° ¹öÁ¯Àº º¸È£¸ðµå·Î ÀüȯÇÑ ÈÄ¿¡ ¼¼±×¸ÕÆ® ·¹Áö½ºÅÍÀÇ ; °ªÀ» ¹Ù·Î º¯°æµÇ¾ú´Ù. ÀÌ´Â Å×½ºÆ® Çß´ø 386 ¸Ó½Å¿¡¼­ Àß µ¿ÀÛÇÏ¿´´Ù. ; ±× ¸Ó½ÅÀÇ µÎ¹øÂ° º¸È£¸ðµå Àüȯ¿¡¼­ ù¹øÂ° ¼¼±×¸ÕÆ® ·¹Áö½ºÅͰ¡ ; ¿Ã¹Ù¸¥ ¼¿·ºÅ͸¦ ·ÎµåÇßÁö¸¸ bad µð½ºÅ©¸³ÅͰ¡ ·ÎµåµÇ¾ú´Ù. ; ³ª´Â »ç¶÷µéÀÌ º¸È£¸ðµå·Î ÀüȯÇÑÈÄ¿¡ JMP°¡ ÇÊ¿äÇÏ´Ù°í ÇÏ´Â °ÍÀ» ; ÀÐÀºÀûÀÌ ÀÖ´Ù. ÇÏÁö¸¸ ¼º°øÀûÀ¸·Î ÀÛ¼ºµÈ ¸¹Àº ÇÁ·Î±×·¥¿¡ JMP ; °¡ ¾ø´Â°ÍÀ» ¾Ë¾Ò´Ù. ³»°¡ ÃßÃøÇϰǵ¥ µô·¹À̰¡ ÇÊ¿äÇÑ°Í °°´Ù. ; "flush the prefetch queue" ÀÌ·ÐÀº Áø½ÇÀ» ¹àÇô³»±â¿¡´Â ÀûÇÕÇÏÁö ; ¾ÊÀº °Í °°´Ù. ¿Ö³ÄÇÏ¸é ³ª´Â "mov ds,cx"¸¦ "push cx"¿Í "pop ds"·Î ; ¹Ù²ÞÀ¸·Î ÀÎÇØ ¹®Á¦¸¦ ÇØ°áÇÒ¼ö ÀÖ¾ú±â ¶§¹®ÀÌ´Ù. ; ÀÌ´Â °¢°¢ prefetch queue ¿¡ 2 ¹ÙÀÌÆ® ¸¸À» °¡Áö°Ô µÈ´Ù. ; ¶ÇÇÑ ³ª´Â DS ¸¦ ·ÎµåÇϱâ Àü¿¡ ¸®¾ó¸ðµå¿Í º¸È£¸ðµå¸¦ °°°Ô µ¿ÀÛÇÏ°Ô ; ÇÏ´Â ¸î¸î Äڵ带 À¯ÁöÇϱâ Á© À­ºÎºÐÀÇ Äڵ带 Àç¹èÄ¡ Çß´Ù. ; ÀÌ´Â À§ÀÇ °æ¿ì¿¡´Â ºÒÇÊ¿äÇÑ °Íó·³ º¸ÀÌÁö¸¸ ¾Æ¹«·± ´ñ°¡µµ Ä¡¸£Áö ¾Ê´Â´Ù. ; ; {6} ÀÌ ÄÚµåÀÇ ´ëºÎºÐÀº ÀÎÅÍ·´Æ®°¡ enable »óÅÂÀÎÁö ¾Æ´ÑÁö ±×¸® ½Å°æ¾²Áö ; ¾Ê¾Ò´Ù. ±×·¡¼­ cli ÃʱâÈ­ ÈÄ¿¡ ±×°ÍÀ» ´Ù½Ã enable »óÅ·Π¸¸µéÁö ¾Ê¾Ò´Ù. ; BIOS ´Â ÀÎÅÍ·´Æ®°¡ ÇÊ¿äÇÒ¶§ ÀÎÅÍ·´Æ® 13h ¸¦ ó¸®ÇÏ´Â µ¿¾È Á¤È®ÇÏ°Ô ; ÀÎÅÍ·´Æ®¸¦ enable ½ÃŲ´Ù. ºÒÇàÇϰԵµ, ¸î¸î ¹ÙÀÌ¿À½º´Â ÀÎÅÍ·´Æ® 13h¸¦ ; ¸¶ÃÆÀ½¿¡µµ ºÒ±¸Çϰí ÀÎÅÍ·´Æ® enable »óŸ¦ À¯ÁöÇÑ´Ù. º¸È£¸ðµå·Î ÀüȯµÇ±â ; À§Çؼ­ ÀÎÅÍ·´Æ®´Â ¹Ýµå½Ã disable »óŰ¡ µÇ¾î¾ß Çϱ⶧¹®¿¡ cli ¸¦ ; ÇÊ¿ä·ÎÇÑ´Ù. ; ; {7} edi ÀÇ ÇÏÀ§ 16ºñÆ®¸¸ read_sector ¿¡ ÀÇÇØ »ç¿ëµÇ±â ¶§¹®¿¡ ; »óÀ§ 16ºñÆ®´Â ÀúÀåÇÏ°í º¹±¸½Ãų ÇÊ¿ä¾øÀÌ ¸¶À½´ë·Î »ç¿ëÇÒ ¼ö ÀÖ´Ù. ; ; {8} ÀÎÅÍ·´Æ® 8(IRQ 0)¸¦ ¸¹ÀÌ »ç¿ëÇϴµ¥, Ç÷ÎÇÇ·Î ºÎÅÍ Äڵ尡 ·ÎµåµÇ´Â °æ¿ì¿¡ ; »ç¿ëµÈ´Ù. À̰ÍÀº BIOS ¿¡¼­ Ç÷ÎÇÇÀÇ ¸ðÅ͸¦ ²ô´Â Æ®¸¯Àε¥, ; ³»°¡ Ç÷ÎÇÇ ¸ðÅ͸¦ Ű°í º¸È£¸ðµå Å×½ºÆ®¸¦ ÇÏ´Â °ÍÀ» ½È¾îÇϱ⠶§¹®ÀÌ´Ù. ; ; {9} GDT ÀÇ Ã¹¹øÂ° ¿£Æ®¸®´Â CPU ¿¡ ÀÇÇØ °áÄÚ »ç¿ëµÇÁö ¾Ê´Â´Ù. ; 0¹ø ¼¿·ºÅÍ´Â GDT·ÎºÎÅÍ µð½ºÅ©¸³Å͸¦ ·ÎµùÇÏÁö ¾Ê°í ; ¼¼±×¸ÕÆ® ·¹Áö½ºÅÍ¿¡ ¾ÈÀüÇÏ°Ô ³Ö±âÀ§ÇØ Á¤ÀǵȴÙ. ; (À̰ÍÀ» ÅëÇØ¼­ ¸Þ¸ð¸®¸¦ ¿¢¼¼½º ÇÒ ¼ö´Â ¾ø´Ù.) ; ³ª´Â º¸Åë SELF Æ÷ÀÎÅÍ·Î GDTÀÇ Ã¹¹øÂ° 6 ¹ÙÀÌÆ®¸¦ »ç¿ëÇÑ´Ù. ; ¸ÅÅ©·ÎÀÎ gdt.inc ÆÄÀÏ¿¡ À̸¦ ¼Â¾÷ ÇØµÎ¾ú´Ù. ;_____________________________________________________________________________ ================================================================================= (% edward : À̰ÍÀ¸·Î ÇãÁ¢ÇÑ ¹ø¿ª¸¸À¸·Î ±¸¼ºµÈ BOOTP.ASM À» ¸¶Ä¡°í ´ÙÀ½ ¼Ò½ºÄÚµåµéÀ» º¸µµ·Ï ÇÏÀÚ !) 2-2. BOOTP.LNK(BOOTP ÆÄÀÏ ¸µÅ·À» À§ÇÑ JLOC ÄÁÆ®·Ñ ÆÄÀÏ) JLOC À» »ç¿ëÇÏ´Â ÀÌÀ¯°¡ ÀÖÀ¸´Ï, JLOC À» »ç¿ëÇÏ¼Å¾ß Çϰí, ¸µÅ· ÀÛ¾÷À» ÇÒ¶§ »ç¿ëµÇ´Â BOOTP.LNK ÆÄÀÏÀÔ´Ï´Ù. ================================================================================ ; bootp.lnk JLOC control file for bootp.asm ; Version 1.0, Dec 14, 1997 ; Sample code ; by John S. Fine johnfine@erols.com ;_____________________________________________________________________________ ALL: bootp.obj VLOAD: 0 7C00 0 * ================================================================================ 2-3. BOOTP.BIN(BOOTP.ASM À» ÅëÇØ »ý¼ºµÈ ¹ÙÀ̳ʸ® ÆÄÀÏ) ÀÌ ÆÄÀÏÀº BOOTP.ASM ¿¡ ´ëÇÑ ÃÖÁ¾ÀûÀÎ ÀÛ¾÷À» °ÅÄ£ º¸È£¸ðµå·Î µ¿ÀÛÇÏ´Â ºÎÆ®¼½ÅͰ¡ µÈ´Ù. 2-4. GDT.INC(GDT[Global Descriptor Table]¸¦ À§ÇÑ Á¤ÀÇ) GDT.INC ÆÄÀÏÀº Á¦¸ñ¿¡¼­µµ º¸ÀÌ´Ù ½ÃÇÇ Àü¿ª µð½ºÅ©¸³ÅÍ Å×À̺íÀ» À§ÇÑ Á¤ÀǸ¦ ÇØµÐ ÆÄÀÏÀÔ´Ï´Ù. Çѹø ½ºÀ¹ µÑ·¯ º¼±î¿ä. ================================================================================ ; gdt.inc symbols and macros for building descriptors ; Version 2.3, Mar 16, 1998 ; Sample code ; by John S. Fine johnfine@erols.com ;_____________________________________________________________________________ ; ; ; ÀÌ GDT.INC ÆÄÀÏÀº Ç¥ÁØ NASM ¹öÁ¯ 0.97 ¿¡¼­ Á¤È®ÇÏ°Ô ¾î¼Àºí µÉ°ÍÀÌ´Ù. ; (ÀÌ Æ¯Â¡À» NASM ¿¡ Ãß°¡Çϰí, ¸¸¾à ÀÌ Æ¯¼ºÀÌ ºüÁø°ÍÀ̶ó¸é ; ´Ù¸¥ ¹æ¹ýÀ» »ç¿ëÇØ¾ß ÇÑ´Ù.) ÇÏÁö¸¸ Ç¥ÁØ NASM 0.97 À» »ç¿ëÇÒ °æ¿ì ; gdt ³»ÀÇ ¸ðµç desc ¸ÅÅ©·Î´Â ¼¿·ºÅÍ·Î Á¤ÀǵǾî¾ß ÇÑ´Ù. ; ³»°¡ ¼öÁ¤ÇÑ nasm À» »ç¿ëÇÑ´Ù¸é, ¼¿·ºÅÍ´Â °¢°¢ÀÇ desc »ç¿ëÀº Á¤Àǵǰųª ; °Ç³Ê¶Û ¼ö ÀÖ´Ù. ; ;_____________________________________________________________________________ ; ; desc ¸ÅÅ©·Î¸¦ ¼¼±×¸ÕÆ® µð½ºÅ©¸³ÅÍ¿Í ¸ÂÃá´Ù. ; ; desc offset, selector, control ; °ÔÀÌÆ® µð½ºÅ©¸³Å͸¦ À§ÇÑ Á¤ÀÇ ; desc base, limit, control ; ´Ù¸¥ ¸ðµç µð½ºÅ©¸³Å͸¦ À§ÇÑ Á¤ÀÇ ; ; base º£À̽º´Â ¼¼±×¸ÕÆ®ÀÇ 32bit base address ÀÌ´Ù. ; limit ¸®¹ÌÆ®´Â 1~4K byte ÀÎ ¼¼±×¸ÕÆ® ±æÀ̺¸´Ù ÀÛ´Ù. ; control ¸ðµç "D_"·Î ½ÃÀ۵Ǵ ¸ÅÅ©·ÎÀÇ ÇÕ°ú ÀÏÄ¡Çϸç ; call °ÔÀÌÆ® ¿ëµµ·Î »ç¿ëµÇ´Â Ç÷¡±×¸¦ À§ÇÑ ; "parameter dword count" ´õÇѰÍÀÌ´Ù ; ; µð½ºÅ©¸³ÅÍ´Â ¾î¼Àºí ÇÒ¶§ ´Ü¼øÈ­µÈ Æ÷¸ËÀ¸·Î ºôµåµÇ¸ç Ưº°ÇÑ ½É¹úÀº Á¤È®ÇÑ ; Æ÷¸ËÀ¸·Î º¯È¯Çϱâ À§ÇØ JLOC ¿¡°Ô Àü´ÞÇϱâ À§ÇÑ ¿ëµµ·Î Á¤ÀǵȴÙ. ; ¾Æ·¡ ³»¿ëÀ» º¸ÀÚ! ; ; desc ¸ÅÅ©·Î¸¦ »ç¿ëÇÏ´Â ¶óÀο¡ ¾î¶² label ÀÇ Æ¯¼ö󸮸¦ ÇÏ´Â ¿¹ÀÌ´Ù. ; ; flat_code: desc 0, 0xFFFFF, D_CODE + D_READ + D_BIG + D_BIG_LIM ; ; ÀÌ´Â 0À» base ·Î °®´Â Ç¥ÁØ Ç÷§(flat) ÄÚµå ¼¼±×¸ÕÆ®¸¦ Á¤ÀÇÇÑ´Ù. ; flat_code ½Éº¼Àº µð½ºÅ©¸³ÅÍÀÇ ÁÖ¼Ò°¡ ¾Æ´Ñ µð½ºÅ©¸³Å͸¦ À§ÇÑ ¼¿·ºÅÍ·Î ; Á¤ÀǵȴÙ. ±×·¯¹Ç·Î ´ÙÀ½°ú °°ÀÌ ÇØ¾ß ÇÑ´Ù. ; ; jmp flat_code:entry_point ; ; ¶Ç´Â IDT ¿£Æ®¸® Æ÷ÀÎÆ®·Î ´ÙÀ½°ú °°ÀÌ Á¤ÀÇÇØ¾ß ÇÑ´Ù. ; ; desc service_GPF, flat_code, D_TRAP ; ; ¼¿·ºÅÍ Á¤ÀǸ¦ Áö¿øÇϱâ À§Çؼ­´Â start_gdt ¸ÅÅ©·Î¿Í °°Àº °ÍÀ» ; »ç¿ëÇØ ¼Â¾÷µÇ¾î¾ß ÇÑ´Ù. ; ; start_gdt ¸ÅÅ©·Î´Â lgdt ÀνºÆ®·°¼Ç¿¡ ÀÇÇØ »ç¿ëµÉ ¼ö Àִ Ư¼öÇÑ µð½ºÅ©¸³Å͸¦ ; »ç¿ëÇØ null µð½ºÅ©¸³Å͸¦ ä¿ì°Ô µÈ´Ù. ; ; end_gdt ¸ÅÅ©·Î´Â start_gdt¿¡ ÀÇÇØ ÇÊ¿ä·ÎÇÏ´Â limit °ªÀ» Á¤ÀÇÇϰí, ; NASM ¹®¸ÆÀº ¼¿·ºÅ͸¦ Á¤ÀÇÇϱâ À§ÇØ »ç¿ëµÈ´Ù. ;_____________________________________________________________________________ ; °¢°¢ÀÇ µð½ºÅ©¸³ÅÍ´Â ´ÙÀ½ÀÇ 8°³ÀÇ Å¸ÀÔÁß¿¡ ÇϳªÀÇ µð½ºÅ©¸³ÅͰ¡ µË´Ï´Ù. D_LDT EQU 200h ; LDT ¼¼±×¸ÕÆ® D_TASK EQU 500h ; Task °ÔÀÌÆ® D_TSS EQU 900h ; TSS D_CALL EQU 0C00h ; 386 call °ÔÀÌÆ® D_INT EQU 0E00h ; 386 interrupt °ÔÀÌÆ® D_TRAP EQU 0F00h ; 386 trap °ÔÀÌÆ® D_DATA EQU 1000h ; Data ¼¼±×¸ÕÆ® D_CODE EQU 1800h ; Code ¼¼±×¸ÕÆ® ; µð½ºÅ©¸³Å͵éÀº ¾Æ·¡ÀÇ ¼Ó¼ºµéÀ» Æ÷ÇÔÇÕ´Ï´Ù. D_DPL3 EQU 6000h ; DPL3 ¶Ç´Â DPL À» À§ÇÑ mask D_DPL2 EQU 4000h D_DPL1 EQU 2000h D_PRESENT EQU 8000h ; Present ºñÆ® ¼Â D_NOT_PRESENT EQU 8000h ; Not Present ; PRESENT ºñÆ®´Â NOT_PRESENT ¸¦ OFF ÇÔ¿¡ ÀÇÇØ SET µÈ´Ù. ; (°ÔÀÌÆ®°¡ ¾Æ´Ñ)¼¼±×¸ÕÆ® µð½ºÅ©¸³ÅͰ¡ Æ÷ÇÔÇÏ´Â °Íµé D_ACC EQU 100h ; Accessed (Data ¶Ç´Â Code) D_WRITE EQU 200h ; Writable (Data ¼¼±×¸ÕÆ® only) D_READ EQU 200h ; Readable (Code ¼¼±×¸ÕÆ® only) D_BUSY EQU 200h ; Busy (TSS only) D_EXDOWN EQU 400h ; Expand down (Data ¼¼±×¸ÕÆ® only) D_CONFORM EQU 400h ; Conforming (Code ¼¼±×¸ÕÆ® only) D_BIG EQU 40h ; 32 bit ¸ðµå ±âº» (USE32) D_BIG_LIM EQU 80h ; Limit¸¦ 4K ·Î %macro test_for_my_00_feature 0 %ifnnum %00 %define my_00_feature %endif %endm test_for_my_00_feature ; NASM ¹öÁ¯ 0.97 Àº %macro Á¤ÀÇ¿¡ %if ±¸Á¶¸¦ »ðÀÔÇϴµ¥ ¸î°¡Áö ¹ö±×¸¦ °®°í ; ÀÖ½À´Ï´Ù. µû¶ó¼­ %macro Á¤ÀǸ¦ %include ÆÄÀÏ¿¡ »ðÀÔÇÏ¿© ¹®Á¦¸¦ ÇÇÇß´ä´Ï´Ù. ;_____________________________________________________________________________ %ifdef my_00_feature %include "gdt_new.inc" %else %include "gdt_old.inc" %endif ;----------------------------------------------------------------------------- ; ÁÖÀÇ : ; ; ½ÇÁ¦ µð½ºÅ©¸³ÅÍ¿¡¼­ÀÇ offset °ú base ±×¸®°í limit Çʵå´Â °¢°¢ ; µÎ°¡Áö ÆÄÆ®·Î ³ª´¶´Ù. ÀÌ·¸°Ô µÎ°¡Áö ÆÄÆ®·Î ³ª´©´Â °ÍÀº Çʵå(ƯÈ÷ offset)°¡ ; ¸µÅ© ÇÒ¶§±îÁö ¾Ë·ÁÁöÁö ¾Ê´Â µð½ºÅ©¸³Å͸¦ Á¤ÀÇÇÒ¶§ À¯¿ëÇÏ´Ù. ; ¾î¼Àºí·¯´Â ÃÖÁ¾ÀûÀÎ °ªÀ» ¾ËÁö ¸øÇϱ⠶§¹®¿¡ ÇʵåµéÀ» Á¤È®ÇÏ°Ô ºÐ¸®ÇÒ ¼ö ¾ø´Ù. ; ; ÀÌ·¯ÇÑ ¹®Á¦¸¦ ±Øº¹Çϰí ÀÛ¾÷Çϱâ À§Çؼ­ ³ª´Â desc ¸ÅÅ©·Î¿¡ °¢°¢ÀÇ µð½ºÅ©¸³ÅÍÀÇ ; ºÎºÐµéÀ» ÀÎÅÚÀÇ Á¤È®ÇÑ ¼ö¼ø´ë·Î ÀúÀåÇÏÁö ¾Ê°í, ¿¬¼ÓµÈ Çʵå ó·³ ÀúÀåÇß´Ù, ; ¾î¼Àºí·¯´Â ¾î¼Àºí¸® ½Ã ¾Ë¼ö ¾ø´Â ¾î¶² °ªÀ» °¡¸®Å°´Â Ç¥ÁØ "fixup" ¿äûÀ» ; »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿©·¯ºÐµéÀº ¹Ýµå½Ã À̸¦ JLOC À» »ç¿ëÇØ¼­ ¸µÅ©Çؾ߸¸ ÇÑ´Ù. ; ÈÄ¿¡ fixupµéÀ» Àû¿ëÇÑ ÈÄ¿¡ JLOC Àº µð½ºÅ©¸³Å͵éÀ» Á¤È®ÇÑ ¼ø¼­´ë·Î Àç¹èÄ¡ ; ÇÒ °ÍÀÌ´Ù. ; ; µð½ºÅ©¸³ÅÍ¿¡´Â µÎ°¡Áö ±âº»ÀûÀÎ Æ÷¸ËÀÌ Àִµ¥, Çϳª´Â °ÔÀÌÆ®¸¦ À§ÇÑ °ÍÀ̰í, ; ³ª¸ÓÁö´Â °ÔÀÌÆ®¸¦ Á¦¿ÜÇÑ ³ª¸ÓÁö ÇüŸ¦ À§ÇÑ Æ÷¸ËÀ» ¸»ÇÑ´Ù. ; ; °ÔÀÌÆ®´Â JLOC¿¡ ÀÇÇØ ´Ü¼øÇÏ°Ô Æ÷¸ËÀÌ bit 26ÀÌ ¼¼Æ®µÇ°í, bit 28 ÀÌ Å¬¸®¾îµÈ ÇüÅÂÀÇ ; µð½ºÅ©¸³ÅÍÀÎÁö È®ÀεȴÙ. ; ; °ÔÀÌÆ®¸¦ À§Çؼ­´Â ¾Æ·¡¿Í °°Àº Àç¹èÄ¡°¡ ÀϾ´Ù. ; ; subField Simplified location Final location ; ------------------ ------------------- -------------- ; Selector[0..15] 0..15 16..31 ; Minor control bits 16..23 32..39 ; Major control bits 24..31 40..47 ; Offset[0..15] 32..47 0..15 ; Offset[16..31] 48..63 48..63 ; ; °ÔÀÌÆ®°¡ ¾Æ´Ñ °ÍµéÀ» À§Çؼ­´Â ¾Æ·¡¿Í °°Àº Àç¹èÄ¡°¡ ÀϾ´Ù. ; ; subField Simplified location Final location ; ------------------ ------------------- -------------- ; Limit[0..15] 0..15 0..15 ; Limit[16..19] 16..19 48..51 ; Minor control bits 20..23 52..57 ; Major control bits 24..31 40..47 ; Base[0..23] 32..55 16..39 ; Base[24..31] 56..63 56..63 ; ; desc ¸ÅÅ©·Î¸¦ À§ÇÑ ¸¶Áö¸· ÆÄ¶ó¸ÞÅÍ´Â ¸ðµç °áÇÕµÈ ÄÁÆ®·Ñ bit ¸¦ Æ÷ÇÔÇÑ´Ù. ; ÀÌ´Â Àû´çÇÑ D_ ·Î ½ÃÀÛÇÏ´Â »ó¼öÀÇ ÇÕÀ¸·Î »ý¼ºµÈ´Ù. ; ¸ðµç µð½ºÅ©¸³Å͸¦ À§ÇÑ ¸¶Áö¸· ÆÄ¶ó¸ÞÅÍ´Â D_ ·Î ½ÃÀÛÇÏ´Â »ó¼öÀÇ 8¿¡¼­ 15±îÁöÀÇ ; ºñÆ®¸¦ Æ÷ÇÔÇÏ´Â ÄÁÆ®·Ñ ºñÆ®¸¦ °®´Â´Ù. ; D_ ·Î ½ÃÀÛÇÏ´Â »ó¼öÀÇ 0¿¡¼­ 7±îÁöÀÇ ºñÆ® ȤÀº 4¿¡¼­ 7±îÁöÀÇ ºñÆ®´Â ; µð½ºÅ©¸³Æ®ÀÇ Å¸ÀÔ¿¡ µû¶ó ´Þ¶óÁö´Â ÄÁÆ®·Ñ ºñÆ®ÀÌ´Ù. ;_____________________________________________________________________________ ================================================================================ 2-5. GDT_OLD.INC(GDT.INC ÆÄÀÏÀÇ ÀϺÎ) ============================================================================== ; gdt_old.inc µð½ºÅ©¸³Å͸¦ ºôµå Çϱâ À§ÇÑ ½É¹ú°ú ¸ÅÅ©·Î ; Version 2.3, Mar 16, 1998 ; Sample code ; by John S. Fine johnfine@erols.com ;_____________________________________________________________________________ ; ; gdt.inc ¿¡¼­ ÀÌ ÆÄÀÏÀ» À§¿¡¼­ ¼³¸íÇÑ ¸î°¡Áö ¹®Á¦¸¦ ÇØ°á ÇϱâÀ§ÇØ ; include ÇÏ¿© »ç¿ëÇÑ´Ù. ; ; ÀÌ ¼½¼ÇÀº NASM 0.97 ¹öÁ¯¿¡ %if ºÎºÐÀÇ ¸ÅÅ©·Î Á¤ÀÇ Ã³¸® ¹ö±×¶§¹®¿¡ ; gdt.inc ÆÄÀÏÀ» Âɰ³³õÀº °ÍÀÌ´Ù. ; ; ÀÌ·¯ÇÑ ¸ÅÅ©·Î Á¤ÀÇÀÇ º¯°æÀº NASM ¿¡ ÇöÀç Á¸ÀçÇÏÁö ¾Ê´Â %00 Ư¼ºÀ» À§ÇØ »ç¿ëµÈ´Ù. ;_____________________________________________________________________________ %define fix_nasm_prepend_bug %define desc_make_selector %macro start_gdt 0 fix_nasm_prepend_bug %push table %$startoftable: dw %$limitoftable dd %$startoftable dw 0 %define desc_make_selector equ $-%$startoftable %endmacro %macro end_gdt 0 %$limitoftable equ $-%$startoftable-1 %define desc_make_selector %pop %endmacro %macro desc 3 desc_make_selector GLOBAL ?fixD%%jloc ?fixD%%jloc: dd (%2) + ( ( (%3) ^ D_PRESENT ) << 16 ) , (%1) %endmacro ============================================================================== 2-6. GDT_NEW.INC(GDT.INC ÆÄÀÏÀÇ ÀϺÎ) ÀÌ ÆÄÀÏÀº À§ÀÇ gdt.inc ÆÄÀÏ¿¡¼­ GDT_OLD.INC ¿Í ¼±ÅÃÀûÀ¸·Î »ç¿ëµÈ´Ù. ============================================================================== ; gdt_new.inc µð½ºÅ©¸³ÅÍ ºôµå¸¦ À§ÇÑ ½É¹ú°ú ¸ÅÅ©·Î ; Version 2.3, Mar 16, 1998 ; Sample code ; by John S. Fine johnfine@erols.com ;_____________________________________________________________________________ ; ; ; gdt.inc ¿¡¼­ ÀÌ ÆÄÀÏÀ» À§¿¡¼­ ¼³¸íÇÑ ¸î°¡Áö ¹®Á¦¸¦ ÇØ°á ÇϱâÀ§ÇØ ; include ÇÏ¿© »ç¿ëÇÑ´Ù. ; ; ÀÌ ¼½¼ÇÀº NASM 0.97 ¹öÁ¯¿¡ %if ºÎºÐÀÇ ¸ÅÅ©·Î Á¤ÀÇ Ã³¸® ¹ö±×¶§¹®¿¡ ; gdt.inc ÆÄÀÏÀ» Âɰ³³õÀº °ÍÀÌ´Ù. ; ; ÀÌ·¯ÇÑ ¸ÅÅ©·Î Á¤ÀÇÀÇ º¯°æÀº NASM ¿¡ Á¸ÀçÇÏ´Â %00 Ư¼ºÀ» À§ÇØ »ç¿ëµÈ´Ù. ;_____________________________________________________________________________ %macro start_gdt 0 %push table %$startoftable: dw %$limitoftable dd %$startoftable dw 0 %endmacro %macro end_gdt 0 %$limitoftable equ $-%$startoftable-1 %pop %endmacro %macro desc 3 %ifid %00 %00 equ $-%$startoftable %endif GLOBAL ?fixD%%jloc ?fixD%%jloc: dd (%2) + ( ( (%3) ^ D_PRESENT ) << 16 ) , (%1) %endmacro ============================================================================== 3. ºôµå & Å×½ºÆ® 3 Àå¿¡¼­´Â ºôµå ÀÛ¾÷À» ÁøÇàÇϰí, Å×½ºÆ®¸¦ ÇØº¸µµ·Ï ÇϰڽÀ´Ï´Ù. 3-1). ¾î¼Àºí ÀÛ¾÷ ¾î¼Àºí ÀÛ¾÷Àº NASM 0.97 ¹öÁ¯À» ÀÌ¿ëÇØ ÇÏ°Ô µË´Ï´Ù. ÇÊ¿äÇÑ ÅøµéÀº ÀüºÎ ȨÆäÀÌÁö(osx86.org)ÀÇ DATA SHARING -> TOOL ¿¡ ÀÖ½À´Ï´Ù. *) assembly : input - bootp.asm output - bootp.obj (621 byte) c:\pmode> nasmw -f obj bootp.asm Æ÷¸ËÀ» obj ·Î ÇÏ¿© ¾î¼Àºí ÀÛ¾÷À» ÇÕ´Ï´Ù. À©µµ¿ì¿ë NASM ÀÎ °æ¿ì NASMW ¶ó´Â ¸í·ÉÀ¸·Î ½ÃÀÛÇÒ °ÍÀÔ´Ï´Ù. ±×¸®°í ¿É¼ÇÀº ´ë¼Ò¹®ÀÚ¸¦ ±¸ºÐÇÕ´Ï´Ù. ÀÌÁ¦ bootp.obj ÆÄÀÏÀÌ »ý¼ºµÇ¾úÀ»°Ì´Ï´Ù. 3-2). JLOC À» ÀÌ¿ëÇÑ ¸µÅ· *) linking : input - bootp.lnk bootp.obj output - bootp.bin (512 byte) c:\pmode> jloc bootp.lnk bootp.bin JLOC¸¦ ÀÌ¿ëÇØ¼­ ¸µÅ© ÀÛ¾÷À» ÇØÁÝ´Ï´Ù. ÃÖÁ¾ÀûÀ¸·Î bootp.bin ÆÄÀÏÀÌ »ý¼ºµÇ¾ú½À´Ï´Ù. À̰ÍÀÌ ¿ì¸®°¡ ¿øÇÏ´ø º¸È£¸ðµå ºÎÆ® ¼½Åͷ২ä. ÀÌÁ¦ Å×½ºÆ®¸¦ Çϱâ À§ÇØ Ç÷ÎÇÇ¿¡ boot sector ¸¦ º¹»çÇØº¼±î¿ä ? 3-3). PARTCOPY ·Î Ç÷ÎÇÇÀÇ Ã¹¹øÂ° ¼½ÅÍ·Î º¹»çÇϱ⠿켱 Æ÷¸ËµÈ Ç÷ÎÇǸ¦ »ðÀÔÇØÁֽðí, ´ÙÀ½ ¸í·ÉÀ» ¼öÇàÇÕ´Ï´Ù. *) Ç÷ÎÇÇ·Î ºÎÆ®¼½ÅÍ º¹»çÇϱâ PARTCOPY bootp.bin 0 3 -f0 0 ÀÌ ÀÛ¾÷Àº JMP $+3E ÀÇ Ç÷ÎÇÇÀÇ ½ÃÀÛÁ¡¿¡ JMP¸¦ µ¤¾î¾´´Ù. ¸¸¾à¿¡ ´Ù¸¥ °÷À¸·Î Á¡ÇÁÇϱ⸦ ¹Ù¶õ´Ù¸é, bootp.asm ÆÄÀÏÀÇ ½ÃÀÛÁ¡À» °¡¸®Å°´Â "resb"¸¦ ½ÃÀÛ ÁÖ¼Ò¸¦ Á¶ÀýÇØÁÖ¸é µÈ´Ù. PARTCOPY bootp.bin 3E 1C2 -f0 3E ÀÌ ÀÛ¾÷Àº bootp.bin ÀÇ ³ª¸ÓÁö¸¦ Ç÷ÎÇÇÀÇ ¿ÀÇÁ¼Â 3E ·Î º¹»çÇϰí, Æ÷¸Ë¿¡ ÀÇÇÑ ÆÄ¶ó¹ÌÅÍ ¼Â¾÷À» °Ç³Ê¶Ú´Ù. ±× ÀÌÀ¯´Â µð½ºÅ©°¡ DOS µð½ºÄÏÀ¸·Î »ç¿ë°¡´ÉÇϱ⠶§¹®ÀÌ´Ù. (% edward : µµ½º·Î µð½ºÅ©¸¦ Æ÷¸Ë ÇϽŵڿ¡ µð½ºÅ©¸¦ ´ýÇÁÇØº¸¼¼¿ä. Æ÷¸ËÀ» ÇÏ°í³ª¸é µð½ºÅ©°¡ ÅÖÅÖ ºñ´Â°ÍÀÌ ¾Æ´Ï¶ø´Ï´Ù. ¾î¶² µ¥ÀÌÅ͵éÀÌ ¿©ÀüÈ÷ Á¸ÀçÇϰí ÀÖ´ä´Ï´Ù.) 3-4). Å×½ºÆ®Çϱâ *) ÇÏµå µð½ºÅ©·Î º¸È£¸ðµå¿¡¼­ ÀоîµéÀÏ À̹ÌÁö¸¦ º¹»ç C:\TEST.BIN À¸·Î º¸È£¸ðµå À̹ÌÁö¸¦ º¹»çÇØÁÖ¼¼¿ä. TEST.BIN ÆÄÀÏÀº http://osx86.org/study/os/boot/pmodebstrap-test.zip ¿¡¼­ ´Ù¿î·Îµå ¹ÞÀ¸¼¼¿ä. *) ±×¸®°í Ç÷ÎÇÇ·Î ºÎÆÃÇÕ´Ï´Ù. (% edward :Ç÷ÎÇÇ¿¡´Â º¸È£¸ðµå ºÎÆ®¼½ÅÍÀÎ bootp.bin ÀÇ Äڵ尡 µé¾î°¡ ÀÖ°ÚÁÒ. ±×¸®°í´Â º¸È£¸ðµå¿Í ÆäÀÌ¡À» °¡µ¿ ½Ã۰í C:\TEST.BIN À» ÀоîµéÀ̰ÚÁÒ.) ======================================================================== edward ÀÇ ¹®¼­ ÀÛ¼ºÈı⠻ó´çÈ÷ ºÎÁ·ÇÑ ¹®¼­ÀÔ´Ï´Ù. Á¦°¡ ¸¹Àº ½Å°æÀ» ¾²Áö ¸øÇÑ Å¿µµ Å©°ÚÁÒ. ½Ã°£À» ³»¼­ -_-;;; (°ÅÁþ¸») ²À ¹®¼­ ¾÷µ¥ÀÌÆ®¸¦ Çϵµ·Ï ÇϰڽÀ´Ï´Ù. (% edward : ¾ÕÀ¸·ÎÀÇ ¸ðµç ±Û¿¡¼­µµ ÇÊ¿äÇÑ ÅøÀº DATA SHARING -> TOOL À» ÂüÁ¶ÇϽñ⠹ٶø´Ï´Ù. liscence°¡ ¹®Á¦°¡ µÇÁö ¾Ê´Â ÇÑ ¸ðµÎ ¿Ã·ÁµÑ ¿¹Á¤ÀÔ´Ï´Ù.) ========================================================================