]> git.dujemihanovic.xyz Git - nameless-os.git/commitdiff
Rehaul the memory map
authorDuje Mihanović <duje.mihanovic@skole.hr>
Fri, 6 May 2022 17:33:45 +0000 (19:33 +0200)
committerDuje Mihanović <duje.mihanovic@skole.hr>
Fri, 6 May 2022 18:03:41 +0000 (20:03 +0200)
This was done when I realized that not enough space is allocated to load
clusters. The current map is as follows (all numbers in hex):

* 600-800: MBR
* ee00-fe00: stack
* fe00-10000: VBR
* 800-1800: temporary FAT sector
* 10000-18000: temporary cluster
* 1800-fe00: LOADER.BIN

boot/x86/fat32/fat32.s
boot/x86/mbr.s
boot/x86/stage3/loader.s
boot/x86/vbr-fat32.s

index df5dd89260a3fff08e70e6729ee54f170def9559..41d5688a3ae8200333b2e227c60b83fa3f128321 100644 (file)
@@ -79,12 +79,12 @@ read_cluster:
        ; load the FAT sector we're looking for
        push di
        push ebx ; offset
-       push es ; we want to read at 0:1000, not STAGE3_SEGMENT:1000
+       push es ; we want to read at 0:800, not STAGE3_SEGMENT:800
        push eax ; desired LBA
        xor ax, ax
        mov es, ax
        pop ebx ; pop LBA into EBX
-       mov di, 0x6000
+       mov di, 0x800
        mov cx, 1
        call read_sectors
        cmp dl, 0
index 613b24894d993a26fac2891e3ecad4768028cb7d..b5d01c94f6ea86ccffd0752714db580280b6abce 100644 (file)
@@ -11,7 +11,7 @@ _start:
        mov ds, ax
        mov es, ax
        mov ss, ax
-       mov sp, 0x7c00 ; just under the soon-to-be-loaded VBR, should be more than sufficient space
+       mov sp, 0xfe00 ; just under the soon-to-be-loaded VBR, should be more than sufficient space
 
        ; perform self-relocation
        cld
@@ -54,16 +54,16 @@ real_start:
        .load_vbr:
                ; load active partition's VBR
                pop si
-               mov ax, 0x7c0
+               mov ax, 0xfe0
                add si, 8
                mov edx, [si]
                xor bx, bx
                call read_sector
                ; check is the VBR bootable (ends with 0x55 0xaa), if not halt
-               cmp word [0x7dfe], 0xaa55
+               cmp word [0xfffe], 0xaa55
                jne .not_bootable
                mov dl, [BOOT_DRIVE]
-               call 0x7c00
+               call 0xfe00
                .not_bootable:
                        mov si, no_os
                        call print
index bd703bacde4700755c287e4bed7663ec0432a391..b89d9245f62bad488bec74ca13bd80000db7806c 100644 (file)
@@ -1,6 +1,6 @@
 bits 16
 cpu 686
-org 0x8000
+org 0x1800
 
 %include "../fat32/fat32-structs.s"
 
@@ -22,7 +22,7 @@ _start:
 .a20_enabled:
        print a20_enabled
        call get_1st_data_sec
-       mov ax, 0x2000
+       mov ax, 0x1000
        mov es, ax
        mov eax, BPB_RootClus
        xor di, di
@@ -88,7 +88,7 @@ read_clus_chain_unreal:
        push es
        push ax
        xor di, di
-       mov ax, 0x100
+       mov ax, 0x1000
        mov es, ax
        pop ax
        call read_cluster
@@ -99,7 +99,7 @@ read_clus_chain_unreal:
        push eax
        push ebx
        push ecx
-       mov esi, 0x1000
+       mov esi, 0x10000
        xor ebx, ebx
        movzx eax, word BPB_BytsPerSec
        movzx bx, byte BPB_SecPerClus
index 7ec3739a8aa80ae7ddd650015a27ae99052c3616..439157f3c4299b6f7bf116f3f519fcbb0d860deb 100644 (file)
@@ -2,10 +2,10 @@
 ; This is what's going to be on most USB sticks and HDDs, for now
 
 bits 16
-org 0x7c00
+org 0xfe00
 cpu 686
 
-STAGE3_ADDRESS equ 0x8000
+STAGE3_ADDRESS equ 0x1800
 STAGE3_SEGMENT equ STAGE3_ADDRESS >> 4
 STAGE3_OFFSET equ STAGE3_ADDRESS & 0xf
 
@@ -25,7 +25,7 @@ times 0x57 db 0 ; skip past BPB
 real_start:
        sti
        ; no need to set up segments and stack again, because MBR did it for us
-       mov bp, 0x7c00
+       mov bp, 0xfe00
 
        ; we expect the boot drive to be in DL and our partition table entry in DS:SI
        mov [BOOT_DRIVE], dl