git: 9front

Download patch

ref: 0348350c648be2c79822f541153d6014e94bd7c2
parent: f260f4d9d1f9ea2deaab7d8a848f049c98084f17
author: cinap_lenrek <cinap_lenrek@localhost>
date: Sat Jul 9 10:16:14 EDT 2011

pbs: add some diagnostic dots, simplify

--- a/sys/src/boot/pc/pbs.s
+++ b/sys/src/boot/pc/pbs.s
@@ -90,10 +90,6 @@
 	PUSHI(start16(SB))
 	BYTE $0xCB			/* FAR RET */
 
-TEXT halt(SB), $0
-_halt:
-	JMP _halt
-
 TEXT start16(SB), $0
 	STI
 
@@ -100,7 +96,7 @@
 	LWI(hello(SB), rSI)
 	CALL16(print16(SB))
 
-	PUSHR(rDX)	/* drive */
+	STB(rDL, _driveno(SB))
 
 	CLR(rDX)
 	LW(_fatsize(SB), rAX)
@@ -130,8 +126,6 @@
 	SW(rAX, _volid(SB))	/* save for later use */
 	SW(rBX, _volid+2(SB))
 
-	POPR(rDX)	/* drive */
-
 	PUSHR(rBP)
 	LW(_sectsize(SB), rCX)
 	SUB(rCX, rSP)
@@ -139,11 +133,7 @@
 	MW(rSP, rSI)
 
 _nextsect:
-	PUSHR(rAX)
 	CALL16(readsect16(SB))
-	OR(rAX, rAX)
-	JNE _halt
-
 	LW(_sectsize(SB), rCX)
 	SHRI(5, rCX)
 
@@ -160,14 +150,11 @@
 	JEQ _found
 	ADDI(0x20, rSI)	
 	LOOP _nextdir
-	POPR(rAX)
 	ADDI(1, rAX)
 	ADC(rCX, rBX)
 	JMP _nextsect
 
 _found:
-	PUSHR(rDX)			/* drive */
-
 	CLR(rBX)
 
 	LW(_rootsize(SB), rAX)		/* calculate and save Xrootsz */
@@ -205,38 +192,34 @@
 	DEC(rCX)
 	ADD(rCX, rAX)
 	ADC(rBX, rDX)
-	POPR(rCX)			/* _sectsize(SB) */
+	POPR(rCX)	/* _sectsize(SB) */
 	DIV(rCX)
 	MW(rAX, rCX)
 	POPR(rBX)
 	POPR(rAX)
-	POPR(rDX)			/* drive */
 
 	LWI(RELOC, rSI)
-	PUSHR(rSI)
+	PUSHR(rSI)	/* entry */
 
 _loadnext:
-	PUSHR(rCX)
-	PUSHR(rAX)
 	CALL16(readsect16(SB))
-	OR(rAX, rAX)
-	JNE _loaderror
-	POPR(rAX)
-	CLR(rCX)
+
+	LW(_sectsize(SB), rDX)
+	ADD(rDX, rSI)
+
+	CLR(rDX)
 	ADDI(1, rAX)
-	ADC(rCX, rBX)
-	LW(_sectsize(SB), rCX)
-	ADD(rCX, rSI)
-	POPR(rCX)
+	ADC(rDX, rBX)
+
 	LOOP _loadnext
-	CLI
-	RET
 
-_loaderror:
-	LWI(ioerror(SB), rSI)
+	LWI(ok(SB), rSI)
 	CALL16(print16(SB))
-	CALL16(halt(SB))
 
+	LB(_driveno(SB), rDL)
+	CLI
+	RET
+
 TEXT print16(SB), $0
 	PUSHA
 	CLR(rBX)
@@ -258,35 +241,38 @@
  *	0000:SI buffer
  */
 TEXT readsect16(SB), $0
+_retry:
 	PUSHA
-	CLR(rCX)
+	CLR(rDX)
 
-	PUSHR(rCX)		/* qword lba */
-	PUSHR(rCX)
+	PUSHR(rDX)		/* qword lba */
+	PUSHR(rDX)
 	PUSHR(rBX)
 	PUSHR(rAX)
 
-	PUSHR(rCX)		/* dword buffer */
+	PUSHR(rDX)		/* dword buffer */
 	PUSHR(rSI)
 
-	INC(rCX)
-	PUSHR(rCX)		/* word # of sectors */
+	INC(rDX)
+	PUSHR(rDX)		/* word # of sectors */
 
 	PUSHI(0x0010)		/* byte reserved, byte packet size */
 
 	MW(rSP, rSI)
+	LB(_driveno(SB), rDL)
 	LWI(0x4200, rAX)
 	BIOSCALL(0x13)
 	JCC _readok
+	LWI((0x0E00|'!'), rAX)
+	BIOSCALL(0x10)
 	ADDI(0x10, rSP)
 	POPA
-	CLR(rAX)
-	DEC(rAX)
-	RET
+	JMP _retry
 _readok:
+	LWI((0x0E00|'.'), rAX)
+	BIOSCALL(0x10)
 	ADDI(0x10, rSP)
 	POPA
-	CLR(rAX)
 	RET
 
 TEXT bootnamelen(SB), $0
@@ -296,10 +282,8 @@
 	BYTE $'T'; BYTE $'F'; BYTE $'A'; BYTE $'T';
 	BYTE $0
 
-TEXT ioerror(SB), $0
-	BYTE $'i'; BYTE $'/'; BYTE $'o'; BYTE $'-';
-	BYTE $'e'; BYTE $'r'; BYTE $'r'; BYTE $0
-
 TEXT hello(SB), $0
-	BYTE $'p'; BYTE $'b'; BYTE $'s'; BYTE $'\r';
-	BYTE $'\n'; BYTE $0
+	BYTE $'p'; BYTE $'b'; BYTE $'s'; BYTE $0
+TEXT ok(SB), $0
+	BYTE $'o'; BYTE $'k'; BYTE $'\r'; BYTE $'\n';
+	BYTE $0
--