7 BYTE $0xEB; BYTE $0x3C; /* jmp .+ 0x3C (_start0x3E) */
10 BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x00;
11 BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x00
12 TEXT _sectsize(SB), $0
13 BYTE $0x00; BYTE $0x00
14 TEXT _clustsize(SB), $0
17 BYTE $0x00; BYTE $0x00
20 TEXT _rootsize(SB), $0
21 BYTE $0x00; BYTE $0x00
23 BYTE $0x00; BYTE $0x00
24 TEXT _mediadesc(SB), $0
27 BYTE $0x00; BYTE $0x00
29 BYTE $0x00; BYTE $0x00
31 BYTE $0x00; BYTE $0x00
32 TEXT _nhiddenlo(SB), $0
33 BYTE $0x00; BYTE $0x00
34 TEXT _nhiddenhi(SB), $0
35 BYTE $0x00; BYTE $0x00;
36 TEXT _bigvolsize(SB), $0
37 BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x00;
40 TEXT _reserved0(SB), $0
45 BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x00;
47 BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x00;
48 BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x00
49 BYTE $0x00; BYTE $0x00; BYTE $0x00
51 BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x00;
52 BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x00;
57 MTSR(rAX, rSS) /* 0000 -> rSS */
58 MTSR(rAX, rDS) /* 0000 -> rDS, source segment */
66 REP; MOVSL /* MOV DS:[(E)SI] -> ES:[(E)DI] */
73 BYTE $0xCB /* FAR RET */
85 LW(_volid(SB), rAX) /* Xrootlo */
86 LW(_volid+2(SB), rBX) /* Xroothi */
88 LW(_sectsize(SB), rCX)
95 CALL16(readsect16(SB))
99 LW(_sectsize(SB), rCX)
104 PUSHR(rSI) /* save for later if it matches */
105 LWI(bootname(SB), rDI)
106 LW(bootnamelen(SB), rCX)
125 LW(_rootsize(SB), rAX) /* calculate and save Xrootsz */
128 LW(_sectsize(SB), rCX)
133 POPR(rCX) /* _sectsize(SB) */
135 PUSHR(rAX) /* Xrootsz */
137 LXW(0x1a, xSI, rAX) /* starting sector address */
138 DEC(rAX) /* that's just the way it is */
140 LB(_clustsize(SB), rCL)
143 LW(_volid(SB), rCX) /* Xrootlo */
145 LW(_volid+2(SB), rCX) /* Xroothi */
147 POPR(rCX) /* Xrootsz */
151 PUSHR(rAX) /* calculate how many sectors to read */
155 LW(_sectsize(SB), rCX)
160 POPR(rCX) /* _sectsize(SB) */
173 CALL16(readsect16(SB))
180 LW(_sectsize(SB), rCX)
188 LWI(ioerror(SB), rSI)
212 TEXT readsect16(SB), $0
216 PUSHR(rCX) /* qword lba */
221 PUSHR(rCX) /* dword buffer */
225 PUSHR(rCX) /* word # of sectors */
227 PUSHI(0x0010) /* byte reserved, byte packet size */
244 TEXT bootnamelen(SB), $0
246 TEXT bootname(SB), $0
247 BYTE $'9'; BYTE $'B'; BYTE $'O'; BYTE $'O';
248 BYTE $'T'; BYTE $'F'; BYTE $'A'; BYTE $'T';
252 BYTE $'i'; BYTE $'/'; BYTE $'o'; BYTE $'-';
253 BYTE $'e'; BYTE $'r'; BYTE $'r'; BYTE $0
256 BYTE $'p'; BYTE $'b'; BYTE $'s'; BYTE $0
259 BYTE $'\r'; BYTE $'\n'; BYTE $0