From e5c28a46a731a79d02266aa690a90a8f809d0f70 Mon Sep 17 00:00:00 2001 From: kotorifan Date: Sat, 31 Jan 2026 15:22:00 +0100 Subject: A20 enable code added --- src/boot/boot.stage1.asm | 64 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 src/boot/boot.stage1.asm (limited to 'src/boot/boot.stage1.asm') diff --git a/src/boot/boot.stage1.asm b/src/boot/boot.stage1.asm new file mode 100644 index 0000000..801860e --- /dev/null +++ b/src/boot/boot.stage1.asm @@ -0,0 +1,64 @@ + ;; boot.stage1.asm + + %include "boot.common.asm" + %include "boot.stage1.print.asm" + [org 0x7c00] + [bits 16] + + %define READ_SECTORS_NUM 64 + %define BOOT_LOAD_ADDR 0x7c00 + %define SECTOR_SIZE 512 + + global _start + +_start: + ;; Disable interrupts + cli + + ;; Setup segment registers + xor ax, ax + mov ds, ax + mov es, ax + mov ss, ax + + ;; Adjust Stack + mov sp, _start + + clc + + mov si, disk_addr_packet + mov ah, 0x42 ; BIOS extended read function + mov dl, 0x80 ; Drive number + int 0x13 ; BIOS disk services + jc _disk_read_err + + mov si, disk_read_success_msg + call _print_string + + jmp 0x0000:0x7e00 + +_disk_read_err: + mov si, disk_read_err_msg + call _print_string + + hlt + jmp _disk_read_err + +_end: + hlt + jmp _end + +disk_read_err_msg: db "Failed to read disk", 13, 10, 0 +disk_read_success_msg: db "Read the disk successfully", 13, 10, 0 +disk_addr_packet: + db 0x10 + db 0x00 + dw READ_SECTORS_NUM + dw 0x0000 + dw 0x7e00 + dq 1 + + ;; Padding and magic number + times 510 - ($ - $$) db 0 + dw 0xaa55 + -- cgit v1.3