bootloader.asm 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. [BITS 16]
  2. [ORG 0x7C00]
  3. start:
  4. ; Set up segments
  5. xor ax, ax
  6. mov ds, ax
  7. mov es, ax
  8. mov ss, ax
  9. mov sp, 0x7C00
  10. ; Save boot drive passed in dl by the BIOS
  11. mov [boot_drive], dl
  12. ; Clear screen
  13. mov ah, 0x00
  14. mov al, 0x03
  15. int 0x10
  16. ; Print startup messages
  17. mov si, msg_start
  18. call print_string
  19. mov si, msg_key
  20. call print_string
  21. mov si, msg_drm
  22. call print_string
  23. mov si, msg_kernel
  24. call print_string
  25. ; Load Stage 2 from disk using LBA read
  26. mov dl, [boot_drive]
  27. mov ah, 0x42
  28. mov si, dap
  29. int 0x13
  30. jc disk_error
  31. ; Jump to Stage 2
  32. jmp 0x0000:0x7E00
  33. disk_error:
  34. mov si, msg_err
  35. call print_string
  36. halt:
  37. hlt
  38. jmp halt
  39. ; --- Functions ---
  40. print_string:
  41. mov ah, 0x0E ; Teletype output
  42. .loop:
  43. lodsb
  44. or al, al
  45. jz .done
  46. int 0x10
  47. jmp .loop
  48. .done:
  49. ret
  50. ; --- Data ---
  51. msg_start: db "Welcome to ArkOS Bootloader", 13, 10, 0
  52. msg_key: db "Checking Hardware Secure Key... OK", 13, 10, 0
  53. msg_drm: db "Loading DRM Module... OK", 13, 10, 0
  54. msg_kernel: db "Loading Kernel & Launching OS...", 13, 10, 0
  55. msg_err: db "Disk Error loading Stage 2!", 13, 10, 0
  56. boot_drive: db 0
  57. align 4
  58. dap:
  59. db 0x10 ; size of DAP
  60. db 0 ; zero
  61. dw 7 ; number of sectors to read
  62. dw 0x7E00 ; offset
  63. dw 0x0000 ; segment
  64. dq 34 ; LBA 34 (Stage 2 starts at sector 34 in hybrid GPT layout)
  65. times 446-($-$$) db 0
  66. ; Partition table placeholder (4 partitions * 16 bytes = 64 bytes)
  67. times 64 db 0
  68. ; Boot signature
  69. dw 0xAA55