moving to 2MB, need to modify ldscript for vma/lma
authorJohn Tsiombikas <nuclear@member.fsf.org>
Sat, 30 Sep 2023 19:05:18 +0000 (22:05 +0300)
committerJohn Tsiombikas <nuclear@member.fsf.org>
Sat, 30 Sep 2023 19:05:18 +0000 (22:05 +0300)
com32.ld
src/loader.asm
src/startup.asm

index 04c9f88..4771389 100644 (file)
--- a/com32.ld
+++ b/com32.ld
@@ -4,10 +4,10 @@ ENTRY(_start)
 SECTIONS {
        /* loader starts at <seg>:100h */
        . = 0x100;
-       .loader : {
-               * (.loader);
-               * (.ldrtext);
-       }
+       .loader : { * (.loader); }
+
+       . = ALIGN(4);
+       _ldr_main_start = .;
 
        /* main program will be moved to 2MB by the loader */
        . = 2M;
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
index 8c2b643..99cbf6c 100644 (file)
@@ -1,14 +1,10 @@
        bits 32
-       section .ldrtext
+       section .text
 
        global startup
 startup:
        mov ebx, 0xb8000
-       sub ebx, [tmpsegbase]
        mov byte [ebx], '@'
        ret
 
-       global tmpsegbase
-tmpsegbase dd 0
-
 ; vi:set ts=8 sts=8 sw=8 ft=nasm: