From 85bf36c2d17505b0c70f23d1cb5b47f15115e705 Mon Sep 17 00:00:00 2001 From: notsomeidiot123 Date: Tue, 17 Sep 2024 15:00:16 -0400 Subject: [PATCH] loading root directory to disk, will have to work on a tool to transfer kernel binary to filesystem as i cannot mount the fs to WSL --- diskwrite | Bin 0 -> 15968 bytes makefile | 8 +++++++- src/bootloader/main.s | 45 +++++++++++++++++++++++++++++++++++++++++- tools/diskwrite.c | 8 ++++++++ 4 files changed, 59 insertions(+), 2 deletions(-) create mode 100755 diskwrite create mode 100644 tools/diskwrite.c diff --git a/diskwrite b/diskwrite new file mode 100755 index 0000000000000000000000000000000000000000..62f92ba701b0778fd6c82337d59ec7fec985908d GIT binary patch literal 15968 zcmeHOYit}>6~4QU6NftXCQYd0K)i(l4UH$ZV_TurWc|#zauSm`3P`|s>{;6@_Tlc% z61#%dCA_RQQV#Ur&d7pkdb-omD{;PRDep(gL$=V5IKww zNCQCF{q~Yfrjpc0A72v@802wRmRdcBrJl9;G0DrgAb2b??-}7eBRt@W^b?4Da!&Yj zK=K*JHnMR6hIuo>3*&%CQ$TKm%kj&u^H$m$72fuw4x_@@>8TYE?R}JZa%sim#(>Lw zOxj!TI+&7wprlvr%Vs9JJNIRs)@&wUo@<>u(B0bIX_N{^hi;hrm81`ksY6FjC( zd(+CYDDjh4$+e5Fm9sN>HCuK|ij|!FZgps6xUb*pFglDbzrMdyS;J$8Ehk+}PiIPQ zx;S>YKU>JB$LxtL$DGa;@)FbXT&p@#=i-$88v5{&ON=xhAjEhoH)l5URcRO955M|# zx(sn8x2eK?j{7UMm7^%NEDq2s(buK4SwRo^;z3W(*O+sMaw(t>j*BY+J&z-lm4IG< z|A}EWp!dd+XLwHZn@Gf1Myv><3`7}-G7x1T%0QHXC<9Rj-u@YQwQ=`9%+r6aGasyd zexFk27nj|5SNe*&0JhD&;RwHd49FVj6H2$xaMxB0JRdJ zu5xLrv4#2xKKFm2hs~;d#|iUv&x;0C&Be=Zz4>6zOC(&`N#}XRp~KU)FOVGjByrd9 zUp_@f4s?Qel+489=l*3bmRIN`9&O-Yzr1q!TBWkY{eG6x%C0)+ewNu1l_&#I2BHi^ z8Hh3vWgyBxlz}J%Q3j$6L>Y)O@c+vIzuz*`*=%8N@?@cyb#A4mV!LWS+(yXni|SV@ z6^C#y;X{OX5k5vZLO4R$b+uCYDIvex|Mn27!G^?_;{97Tj#GzNj!Kk)C<9Rjq6|bCh%yjmAj&|LfhYq}2Hs{F zz`8=LBg7g(UaQEZ-UEN(;ueuzS$DWoWUN=*B{H6onnlLCMSia00{iRNDg~CGkVS%6 zTez@+wb$39UKIN~JheI_c#~k0;0{56(A1KwN5oo3`1A807hb2xT_iyrp{iMkBaF{YYTBIU`rZoJAm zrrznV&-JWIeU>U5-@nhq@D=U9!(ZnM|Hr9Pt^ezt*AH}@?P?{72-mS%ob%fM78Snk zyof@noBeh4TBO4Z^ogk^|NepgRjO25&z+!zB;gdm5v`|hi&Q{K)xD&z7N>{w3ANMD zGgt%cAK$9*{R92o;vbHGlJrS91#pV=TjM(w#w$!E)^m@9Bws`7^Q2GEb#F?+)5B5H zZzIdNj352q6q&v({un1e~HOWifOXTSktm$lF!p>Tb zTPT(+yF8~R3%S{B+D$t~TXhd!gP*bNV$q(r(s{QyucnH2E^RsGTyCBy0m&jyca5u) zDSi4>G2^DGQv=f$RIJoTL4m6^ZzF6{CTH<@5}oGth8ghw$f)tVOj8Y0g$kEOMvB+3f7FB zcX+$N@KN$|GI^_9N;?!JPX}wFR1&V+sdk?B^C|J9>VQt?yhe{cx`J8J{ z5V}PVXHd)JX(Pj|GV%pV>vX7qLyP)(FGv_&Q3h^n`5xRr;9cAv3JGsL%}>crC1p>PIEN;Lbu0T7I|Jnw-$YudnLTz4D%W> zYhTnE-%B5!OMt)LzAEjUD9rzL zh`-)`M~SM(3hIo%qYs}V+BcIVPyv3=6a6E`4-}WFLTga{yP!>@>NP)+dM=&2ml`BdLpw9?PH#o5PsO7+X|Mg(!RL+Ch+g@HC_e$AmZ8wT~iWp wTsrn{GV)kNfAGDsnRMuTkbjOJl&Jh34SAx@l~gtGbhjG+{w~j}`Azu$0iToFf&c&j literal 0 HcmV?d00001 diff --git a/makefile b/makefile index 8b74f57..e0f4675 100644 --- a/makefile +++ b/makefile @@ -2,10 +2,13 @@ CC := gcc AS := nasm BL_ASFLAGS := -f bin -all: bootloader +all: bootloader tools cp bin/bootloader.bin image.bin qemu-img resize -f raw image.bin 512M qemu-system-i386 -hda bin/bootloader.bin --no-reboot --no-shutdown -m 32m -smp 2 -serial mon:stdio + +tools: + $(CC) tools/diskwrite.c -o diskwrite bootloader: $(AS) src/bootloader/main.s $(BL_ASFLAGS) -o bin/bootloader.bin @@ -15,6 +18,9 @@ init: @mkdir bin/boot @mkdir bin/kernel +.PHONY: tools + clean: + @rm diskwrite @rm -rf bin/ @rm -rf mount/ \ No newline at end of file diff --git a/src/bootloader/main.s b/src/bootloader/main.s index fc4705b..98a1627 100644 --- a/src/bootloader/main.s +++ b/src/bootloader/main.s @@ -181,6 +181,7 @@ load_gdt: mov cr0, eax jmp 0x0:.real .real:;no actual code here, just label for readability and organization + pop ds load_part2: mov ah, 0x42 xor edx, edx @@ -201,6 +202,7 @@ load_part2: push 0 pop ds mov si, DAP + jmp $ int 0x13 jc load_fail jmp part_2 @@ -298,6 +300,7 @@ times 1024-($-$$) db 0 part_2: call get_mmap call paging_en + call open_file jmp $ load_kernel: get_mmap: @@ -360,6 +363,46 @@ paging_en: ret open_file: ;only looks in the root directory + xor esi, esi + xor ecx, ecx + xor edx, edx + mov esi, [fat_bpb.part_start]; + add si, [fat_bpb.reserved_sectors] + mov cl, [fat_bpb.fat_count] + mov dx, [fat_ebpb32.sectors_per_fat] + .addlp: + add esi, edx + dec ecx + or ecx, ecx + jnz .addlp + xor dx, dx + mov ecx, [fat_ebpb32.root_dir_cluster] + mov dl, [fat_bpb.sectors_per_cluster] + .addlp1: + add esi, edx + dec ecx + or ecx, ecx + jnz .addlp1 + mov [DAP.sector_start], esi + mov [DAP.read_count], dx + mov [DAP.offset], word 0xd000 + mov [DAP.segment], word 0x0000 + + mov eax, [DAP.sector_start] + mov ebx, [DAP.sector_start + 4] + mov ecx, [DAP.offset] + mov dx, [DAP.read_count] + push 0 + pop ds + push 0 + pop es + ;sector start now contains the sector number of the first data sector of the root directory + mov ah, 0x42 + mov dl, byte [data.boot_disc] + mov si, DAP + int 0x13 + jc load_fail + debug read_file: ;reads all data from file load_elf: @@ -369,7 +412,7 @@ k_info: .memory_map_ptr: dd 0x2000 .memory_map_count: dw 0 .padding: db 0 - .bpp: db 0 + .bpp: db 0;if depth == 0 then video is text mode .xres: dw 0 .yres: dw 0 .framebuffer_ptr: dd 0 diff --git a/tools/diskwrite.c b/tools/diskwrite.c new file mode 100644 index 0000000..a53c3df --- /dev/null +++ b/tools/diskwrite.c @@ -0,0 +1,8 @@ +#include +#include +#include + +int main(int argc, char **argv){ + printf("Hello, World!\n"); + return 0; +} \ No newline at end of file