From: John Tsiombikas Date: Sat, 30 Sep 2023 19:05:18 +0000 (+0300) Subject: moving to 2MB, need to modify ldscript for vma/lma X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=commitdiff_plain;h=c213ae83bf00aefb9526238658e6739ee9a71187;p=com32 moving to 2MB, need to modify ldscript for vma/lma --- diff --git a/com32.ld b/com32.ld index 04c9f88..4771389 100644 --- a/com32.ld +++ b/com32.ld @@ -4,10 +4,10 @@ ENTRY(_start) SECTIONS { /* loader starts at :100h */ . = 0x100; - .loader : { - * (.loader); - * (.ldrtext); - } + .loader : { * (.loader); } + + . = ALIGN(4); + _ldr_main_start = .; /* main program will be moved to 2MB by the loader */ . = 2M; diff --git a/src/loader.asm b/src/loader.asm index 6b4f288..18bd286 100644 --- a/src/loader.asm +++ b/src/loader.asm @@ -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 diff --git a/src/startup.asm b/src/startup.asm index 8c2b643..99cbf6c 100644 --- a/src/startup.asm +++ b/src/startup.asm @@ -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: