You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
<strong>Linux</strong> <strong>i386</strong> <strong>Önyükleme</strong> <strong>Kodu</strong> <strong>NASIL</strong><br />
if (head==0) track++;<br />
ok4_set:<br />
AX = 0;<br />
}<br />
ok3_set:<br />
sread = AX;<br />
BX += CX && 9;<br />
if (BX overflow) { // > 64KB<br />
ES += 0x1000;<br />
BX = 0;<br />
}<br />
set_next_fn:<br />
}<br />
3.7. Bootsect Yardımcısı<br />
setup.S:bootsect_helper() sadece bootsect.S:read_it() tarafından kullanılır.<br />
bbootsect ve bsetup yarı ayrı ba˘glandıkları için kendi kod/veri bölütlerine ba˘glı konumlar kullanırlar. De˘gi¸sik<br />
bölütlerde bootsect_helper() için "call far" (lcall) ça˘gırmak zorundayız ve "return far" dönmeli. Bu ça˘gırma,<br />
CS!=DS durumunu yaratan CS de˘gi¸sikli˘gi ile sonuçlanır ve setup.S içindeki de˘gi¸skenleri belirtmek için bölütü<br />
niteleyici kullanmak zorundayız.<br />
///////////////////////////////////////////////////////////////////////////////<br />
// bzImage yüklendi˘ginde bootsect yükleyici tarafından ça˘gırılır<br />
bootsect_helper(ES:BX)<br />
bootsect_es = 0; // setup.S içinde tanımlı<br />
type_of_loader = 0; // setup.S içinde tanımlı<br />
{<br />
if (!bootsect_es) { // ilk sefer için ça˘gırılır<br />
type_of_loader = 0x20; // bootsect–yükleyici, version 0<br />
AX = ES >> 4;<br />
*(byte*)(&bootsect_src_base+2) = AH;<br />
bootsect_es = ES;<br />
AX = ES – SYSSEG;<br />
return;<br />
}<br />
bootsect_second:<br />
if (!BX) { // 64KB full<br />
// SYSSEG:0’dan hedefe ta¸sı, her seferinde 64KB<br />
int15/AH=87h(CX=0x8000, ES:SI=CS:bootsect_gdt);<br />
// int15/AH=87h: S˙ISTEM – GEN˙I¸SLET˙ILM˙I¸S BELLE˘GE KOPYALA (B46)<br />
if (kopyalama hatası) {<br />
bootsect_panic() {<br />
prtstr("INT15 refuses to access high mem, giving up.");<br />
bootsect_panic_loop: goto bootsect_panic_loop; // never return<br />
}<br />
}<br />
ES = bootsect_es; // ES’i daima 0x10000 noktasına ata<br />
*(byte*)(&bootsect_dst_base+2)++;<br />
}<br />
bootsect_ex:<br />
// AX içindeki ta¸sınmı¸s çerçeveler (16–bayt)<br />
AH = *(byte*)(&bootsect_dst_base+2)