moving to 2MB, need to modify ldscript for vma/lma
[com32] / src / loader.asm
index 6b4f288..18bd286 100644 (file)
@@ -1,7 +1,10 @@
        section .loader
 
        extern startup
-       extern tmpsegbase
+
+       extern _ldr_main_start
+       extern _main_start
+       extern _main_size
 
        [bits 16]
        global _start
@@ -34,7 +37,6 @@ _start:
        xor eax, eax
        mov ax, cs
        shl eax, 4
-       mov [tmpsegbase], eax   ; save segment base
        add eax, gdt
        mov [gdt_base], eax
 
@@ -64,13 +66,23 @@ _start:
        [bits 32]
 .pm:   mov ax, 20h     ; tmp data selector
        mov ds, ax
-       mov ss, ax
        mov ax, 10h     ; dest data selector
        mov es, ax
 
+       ; copy main program high
+       cld
+       mov esi, _ldr_main_start
+       mov edi, _main_start
+       lea ecx, [_main_size + 3]
+       shr ecx, 2
+       rep movsd
+
+       mov ax, 10h
+       mov ds, ax
+       mov ss, ax
        mov esp, 200000h
 
-       call startup
+       call 8:startup
 
        ; return to real mode
        jmp 28h:.rm