ref: 20a698d4fad47223f61da75f777aab7a4b31758e
parent: de299a5ab3d90ca16c83268f0498a7a21dfdd943
author: ment <thement@ibawizard.net>
date: Wed Jun 8 19:04:30 EDT 2011
boot/pc: PBS now calculates rootdir offset itself
--- a/sys/src/boot/pc/pbs.s
+++ b/sys/src/boot/pc/pbs.s
@@ -76,6 +76,7 @@
MTSR(rAX, rES)
LWI(0x100, rCX)
+ MW(rSI,rBX) /* address of partition record -> rBX */
LWI(RELOC, rSI)
MW(rSI, rSP)
LWI(_magic(SB), rDI)
@@ -97,10 +98,38 @@
STI
LWI(hello(SB), rSI)
CALL16(print16(SB))
- LWI(crnl(SB), rSI)
- CALL16(print16(SB))
- LW(_volid(SB), rAX) /* Xrootlo */
- LW(_volid+2(SB), rBX) /* Xroothi */
+
+ PUSHR(rDX)
+ PUSHR(rBX)
+
+ LB(_nfats(SB), rCL) /* # of fats */
+ LW(_fatsize(SB), rAX) /* fat size */
+ MUL(rCX) /* DX:AX = #sectors */
+ JNE _fatszok /* zero? it's FAT32 */
+
+ LW(_fatsz32+2(SB), rBX) /* hi word */
+ IMUL(rCX, rBX) /* ... in sectors */
+ LW(_fatsz32(SB), rAX) /* lo word */
+ MUL(rCX) /* ... in sectors */
+ ADD(rBX, rDX) /* DX:AX = #sectors */
+
+_fatszok:
+ POPR(rBX) /* address of partition record */
+
+ LXW(8, xBX, rCX) /* lo partition LBA */
+ ADD(rCX, rAX)
+ LXW(10, xBX, rCX) /* hi partition LBA */
+ ADC(rCX, rDX)
+
+ CLR(rBX)
+ LW(_nresrv(SB), rCX) /* # of reserved */
+ ADD(rCX, rAX)
+ ADC(rDX, rBX)
+
+ SW(rAX, _volid(SB)) /* save for later use */
+ SW(rDX, _volid+2(SB))
+ POPR(rDX)
+
PUSHR(rBP)
LW(_sectsize(SB), rCX)
SUB(rCX, rSP)
@@ -270,7 +299,5 @@
BYTE $'e'; BYTE $'r'; BYTE $'r'; BYTE $0
TEXT hello(SB), $0
- BYTE $'p'; BYTE $'b'; BYTE $'s'; BYTE $0
-
-TEXT crnl(SB), $0
- BYTE $'\r'; BYTE $'\n'; BYTE $0
+ BYTE $'p'; BYTE $'b'; BYTE $'s'; BYTE $'\r';
+ BYTE $'\n'; BYTE $0
--
⑨