bootloader.asm 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. ; Clear screen
  11. mov ah, 0x00
  12. mov al, 0x03
  13. int 0x10
  14. ; Print startup messages
  15. mov si, msg_start
  16. call print_string
  17. mov si, msg_key
  18. call print_string
  19. mov si, msg_drm
  20. call print_string
  21. mov si, msg_kernel
  22. call print_string
  23. ; Load Stage 2 from disk
  24. ; We assume Stage 2 is at LBA 1, 7 sectors long, load to 0x7E00
  25. mov dl, 0x80 ; Hardcode boot drive to 0x80
  26. mov ah, 0x42
  27. mov si, dap
  28. int 0x13
  29. jc disk_error
  30. ; Jump to Stage 2
  31. jmp 0x0000:0x7E00
  32. disk_error:
  33. mov si, msg_err
  34. call print_string
  35. halt:
  36. hlt
  37. jmp halt
  38. ; --- Functions ---
  39. print_string:
  40. mov ah, 0x0E ; Teletype output
  41. .loop:
  42. lodsb
  43. or al, al
  44. jz .done
  45. int 0x10
  46. jmp .loop
  47. .done:
  48. ret
  49. ; --- Data ---
  50. msg_start: db "Welcome to ArkOS Bootloader", 13, 10, 0
  51. msg_key: db "Checking Hardware Secure Key... OK", 13, 10, 0
  52. msg_drm: db "Loading DRM Module... OK", 13, 10, 0
  53. msg_kernel: db "Loading Kernel & Launching OS...", 13, 10, 0
  54. msg_err: db "Disk Error loading Stage 2!", 13, 10, 0
  55. align 4
  56. dap:
  57. db 0x10 ; size of DAP
  58. db 0 ; zero
  59. dw 7 ; number of sectors to read
  60. dw 0x7E00 ; offset
  61. dw 0x0000 ; segment
  62. dq 1 ; LBA 1 (Stage 2 starts at sector 1)
  63. times 510-($-$$) db 0
  64. dw 0xAA55