| 1 | VGA_MEMORY equ 0xB8000
|
|---|
| 2 |
|
|---|
| 3 | BLACK equ 0x0
|
|---|
| 4 | BLUE equ 0x1
|
|---|
| 5 | GREEN equ 0x2
|
|---|
| 6 | CYAN equ 0x3
|
|---|
| 7 | RED equ 0x4
|
|---|
| 8 | MAGENTA equ 0x5
|
|---|
| 9 | BROWN equ 0x6
|
|---|
| 10 | LIGHT_GREY equ 0x7
|
|---|
| 11 | DARK_GREY equ 0x8
|
|---|
| 12 | LIGHT_BLUE equ 0x9
|
|---|
| 13 | LIGHT_GREEN equ 0xA
|
|---|
| 14 | LIGHT_CYAN equ 0xB
|
|---|
| 15 | LIGHT_RED equ 0xC
|
|---|
| 16 | LIGHT_MAGENTA equ 0xD
|
|---|
| 17 | LIGHT_BROWN equ 0xE
|
|---|
| 18 | WHITE equ 0xF
|
|---|
| 19 |
|
|---|
| 20 | org 0x7C00
|
|---|
| 21 | bits 16
|
|---|
| 22 |
|
|---|
| 23 | mov ax, VGA_MEMORY >> 4
|
|---|
| 24 | mov es, ax
|
|---|
| 25 | mov ax, 0x07E0
|
|---|
| 26 | mov ss, ax
|
|---|
| 27 | mov esp, 0xFFF0
|
|---|
| 28 | mov ax, 0
|
|---|
| 29 | mov ds, ax
|
|---|
| 30 |
|
|---|
| 31 | ; Disable the annoying cursor
|
|---|
| 32 | mov ah, 0x01
|
|---|
| 33 | mov ch, 001_11111b
|
|---|
| 34 | int 0x10
|
|---|
| 35 |
|
|---|
| 36 | reset_disk_hdd:
|
|---|
| 37 | mov ah, 0x00 ; reset function
|
|---|
| 38 | int 0x13 ; disk int
|
|---|
| 39 | jc reset_disk_hdd
|
|---|
| 40 |
|
|---|
| 41 | mov ax, 00h
|
|---|
| 42 | mov ds, ax
|
|---|
| 43 | mov si, disk_address_packet
|
|---|
| 44 |
|
|---|
| 45 | read_disk_hdd:
|
|---|
| 46 | mov ah, 42h ; read function
|
|---|
| 47 | int 0x13 ; disk int
|
|---|
| 48 | jc read_disk_hdd
|
|---|
| 49 |
|
|---|
| 50 | mov ax, VGA_MEMORY >> 4
|
|---|
| 51 | mov es, ax
|
|---|
| 52 | mov ax, [0x7E00]
|
|---|
| 53 | mov [es:0x00], ax
|
|---|
| 54 |
|
|---|
| 55 | jmp $
|
|---|
| 56 |
|
|---|
| 57 | disk_address_packet:
|
|---|
| 58 | db 10h ; size of DAP (set this to 10h)
|
|---|
| 59 | db 00h ; unused, should be zero
|
|---|
| 60 | dw 43h ; number of sectors to be read
|
|---|
| 61 | dd 0x0000_7E00 ; segment:offset pointer to the memory buffer to which sectors will be transferred
|
|---|
| 62 | dq 01h ; absolute number of the start of the sectors to be read
|
|---|
| 63 |
|
|---|
| 64 | times 510-($-$$) db 0
|
|---|
| 65 |
|
|---|
| 66 | dw 0xAA55
|
|---|
| 67 | dw (RED << 4 | GREEN) << 8 | 'P' |
|---|