summaryrefslogtreecommitdiff
path: root/sys/src/boot
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@localhost>2011-07-09 14:16:14 +0000
committercinap_lenrek <cinap_lenrek@localhost>2011-07-09 14:16:14 +0000
commit20977b8a7ebcf27d594a46e13123a0a4c4736711 (patch)
treed642dff367548f79cccfa2f3ea5566b13d20aec0 /sys/src/boot
parent9f8376d56a690d14803d7fdf9f3abbf6f0761d6d (diff)
pbs: add some diagnostic dots, simplify
Diffstat (limited to 'sys/src/boot')
-rw-r--r--sys/src/boot/pc/pbs.s80
1 files changed, 32 insertions, 48 deletions
diff --git a/sys/src/boot/pc/pbs.s b/sys/src/boot/pc/pbs.s
index 5f9dcfabb..0ad652d92 100644
--- a/sys/src/boot/pc/pbs.s
+++ b/sys/src/boot/pc/pbs.s
@@ -90,17 +90,13 @@ _start0x5A:
PUSHI(start16(SB))
BYTE $0xCB /* FAR RET */
-TEXT halt(SB), $0
-_halt:
- JMP _halt
-
TEXT start16(SB), $0
STI
LWI(hello(SB), rSI)
CALL16(print16(SB))
- PUSHR(rDX) /* drive */
+ STB(rDL, _driveno(SB))
CLR(rDX)
LW(_fatsize(SB), rAX)
@@ -130,8 +126,6 @@ _fatszok:
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 @@ _fatszok:
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 @@ _nextdir:
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,37 +192,33 @@ _found:
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
@@ -258,35 +241,38 @@ _printret:
* 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 @@ TEXT bootname(SB), $0
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