git: 9front

Download patch

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
--