summaryrefslogtreecommitdiff
path: root/sys/src/9/pc/l.s
diff options
context:
space:
mode:
authoraiju <aiju@phicode.de>2012-07-13 18:09:42 +0200
committeraiju <aiju@phicode.de>2012-07-13 18:09:42 +0200
commitc03913c62ddb751d2992e8a3d70e945229ed8e15 (patch)
tree901a9390e70443b1e67929e4d9dd8757bfdda0b9 /sys/src/9/pc/l.s
parent8e11ff283f1e7c36b23e6e52c2ab0ca12a7713f9 (diff)
fixed multiboot booting
Diffstat (limited to 'sys/src/9/pc/l.s')
-rw-r--r--sys/src/9/pc/l.s18
1 files changed, 17 insertions, 1 deletions
diff --git a/sys/src/9/pc/l.s b/sys/src/9/pc/l.s
index d3e5f5201..128fde3d3 100644
--- a/sys/src/9/pc/l.s
+++ b/sys/src/9/pc/l.s
@@ -46,12 +46,28 @@ TEXT _multibootheader(SB), $0
LONG $_startKADDR-KZERO(SB) /* load_addr */
LONG $edata-KZERO(SB) /* load_end_addr */
LONG $end-KZERO(SB) /* bss_end_addr */
- LONG $_startKADDR-KZERO(SB) /* entry_addr */
+ LONG $_multibootentry-KZERO(SB) /* entry_addr */
LONG $0 /* mode_type */
LONG $0 /* width */
LONG $0 /* height */
LONG $0 /* depth */
+TEXT _multibootentry(SB), $0
+ MOVL $etext-KZERO(SB), SI
+ MOVL SI, DI
+ ADDL $0xfff, DI
+ ANDL $~0xfff, DI
+ MOVL $edata-KZERO(SB), CX
+ SUBL DI, CX
+ ADDL CX, SI
+ ADDL CX, DI
+ STD
+ REP; MOVSB
+ CLD
+ MOVL $_startPADDR(SB), AX
+ ANDL $~KZERO, AX
+ JMP* AX
+
/*
* In protected mode with paging turned off and segment registers setup
* to linear map all memory. Entered via a jump to PADDR(entry),