From a2cdf21167ac12c314a719d2c90a5863256df354 Mon Sep 17 00:00:00 2001
From: Jeremy Soller <jackpot51@gmail.com>
Date: Sat, 17 Jun 2017 14:32:09 -0600
Subject: [PATCH] Allow both filesystem and live modes

---
 x86_64/disk.asm           | 17 ++++++++++++++---
 x86_64/startup-common.asm | 23 +++++++++++++++++++++--
 2 files changed, 35 insertions(+), 5 deletions(-)

diff --git a/x86_64/disk.asm b/x86_64/disk.asm
index 6376521..fce7e94 100644
--- a/x86_64/disk.asm
+++ b/x86_64/disk.asm
@@ -11,7 +11,18 @@ startup_start:
 align 512, db 0
 startup_end:
 
-filesystem:
-    %defstr FILESYSTEM_STR %[FILESYSTEM]
-    incbin FILESYSTEM_STR
+%ifdef KERNEL
+    kernel_file:
+      %defstr KERNEL_STR %[KERNEL]
+      incbin KERNEL_STR
+    .end:
     align 512, db 0
+%endif
+
+%ifdef FILESYSTEM
+    filesystem:
+        %defstr FILESYSTEM_STR %[FILESYSTEM]
+        incbin FILESYSTEM_STR
+    .end:
+    align 512, db 0
+%endif
diff --git a/x86_64/startup-common.asm b/x86_64/startup-common.asm
index 2b9bd92..fb29d7f 100644
--- a/x86_64/startup-common.asm
+++ b/x86_64/startup-common.asm
@@ -10,8 +10,25 @@ startup:
     or al, 2
     out 0x92, al
 
-    call redoxfs
+    %ifdef KERNEL
+        mov edi, [kernel_base]
+        mov ecx, (kernel_file.end - kernel_file)
+        mov [kernel_size], ecx
 
+        mov eax, (kernel_file - boot)/512
+        add ecx, 511
+        shr ecx, 9
+        call load_extent
+
+        jmp .loaded_kernel
+    %endif
+
+    %ifdef FILESYSTEM
+        call redoxfs
+        jmp .loaded_kernel
+    %endif
+
+.loaded_kernel:
     call memory_map
 
     call vesa
@@ -113,7 +130,9 @@ load_extent:
 %include "memory_map.asm"
 %include "vesa.asm"
 %include "initialize.asm"
-%include "redoxfs.asm"
+%ifdef FILESYSTEM
+    %include "redoxfs.asm"
+%endif
 
 init_fpu_msg: db "Init FPU",13,10,0
 init_sse_msg: db "Init SSE",13,10,0
-- 
GitLab