From e0ab3e5c1abce531b37420822f8ab1e63f2d43b3 Mon Sep 17 00:00:00 2001 From: d0p1 Date: Mon, 29 Jul 2024 17:51:41 +0200 Subject: [PATCH] refactor(boot): create fat_read_bpb func --- boot/loader/Makefile | 1 + boot/loader/fat.inc | 30 ++++++++++++++++++++++++++++++ boot/loader/loader.asm | 26 ++------------------------ 3 files changed, 33 insertions(+), 24 deletions(-) create mode 100644 boot/loader/fat.inc diff --git a/boot/loader/Makefile b/boot/loader/Makefile index d560bb8..43d6f7a 100644 --- a/boot/loader/Makefile +++ b/boot/loader/Makefile @@ -5,6 +5,7 @@ LOADER_SRCS = loader.asm \ ../common/bootinfo.inc \ ../../kernel/sys/bootinfo.inc \ ../../kernel/sys/register.inc \ + fat.inc \ video.inc \ memory.inc \ logger.inc \ diff --git a/boot/loader/fat.inc b/boot/loader/fat.inc new file mode 100644 index 0000000..3bad234 --- /dev/null +++ b/boot/loader/fat.inc @@ -0,0 +1,30 @@ + ;; File: fat.inc + +include '../common/fat12.inc' + +fat_read_bpb: + mov ax, DISK_BUFFER/0x10 + mov es, ax + xor bx, bx + mov ax, 0 + mov cx, 1 + call disk_read_sectors + + mov word ax, [DISK_BUFFER + fat_bpb.sects_per_track] + mov word [sectors_per_track], ax + mov word ax, [DISK_BUFFER + fat_bpb.heads_per_cyl] + mov word [heads_per_cylinder], ax + mov word ax, [DISK_BUFFER + fat_bpb.bytes_per_sects] + mov word [bytes_per_sector], ax + mov word ax, [DISK_BUFFER + fat_bpb.sects_per_FAT] + mov word [sectors_per_FAT], ax + mov byte al, [DISK_BUFFER + fat_bpb.FAT_count] + mov byte [FAT_count], al + mov word ax, [DISK_BUFFER + fat_bpb.reserved_sects] + mov word [reserved_sectors], ax + mov word ax, [DISK_BUFFER + fat_bpb.root_dir_entries] + mov word [root_dir_entries], ax + mov byte al, [DISK_BUFFER + fat_bpb.sects_per_clust] + mov byte [sectors_per_cluster], al + ret + diff --git a/boot/loader/loader.asm b/boot/loader/loader.asm index 9fec956..31f2a79 100644 --- a/boot/loader/loader.asm +++ b/boot/loader/loader.asm @@ -80,29 +80,7 @@ _start: ; for now fat12 is asumed .fat_fallback: ; get bpb - mov ax, DISK_BUFFER/0x10 - mov es, ax - xor bx, bx - mov ax, 0 - mov cx, 1 - call disk_read_sectors - - mov word ax, [DISK_BUFFER + fat_bpb.sects_per_track] - mov word [sectors_per_track], ax - mov word ax, [DISK_BUFFER + fat_bpb.heads_per_cyl] - mov word [heads_per_cylinder], ax - mov word ax, [DISK_BUFFER + fat_bpb.bytes_per_sects] - mov word [bytes_per_sector], ax - mov word ax, [DISK_BUFFER + fat_bpb.sects_per_FAT] - mov word [sectors_per_FAT], ax - mov byte al, [DISK_BUFFER + fat_bpb.FAT_count] - mov byte [FAT_count], al - mov word ax, [DISK_BUFFER + fat_bpb.reserved_sects] - mov word [reserved_sectors], ax - mov word ax, [DISK_BUFFER + fat_bpb.root_dir_entries] - mov word [root_dir_entries], ax - mov byte al, [DISK_BUFFER + fat_bpb.sects_per_clust] - mov byte [sectors_per_cluster], al + call fat_read_bpb call fat_load_root @@ -177,7 +155,7 @@ _start: include 'a20.inc' include '../common/bios.inc' - include '../common/fat12.inc' + include 'fat.inc' include 'disk.inc' include 'logger.inc' include 'memory.inc'