;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;; Miguel's FoolOS Helper Functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ;disk_load ; [bits 16] DISK_LOAD_HANG_MSG: db " D",0 ;disk_load routune (load dh sectors from drive dl to es:bx) disk_load: pusha ; mov ah,0x41 ; mov bx,0x55AA ; ;mov dl,[disk] ; int 0x13 ; jne disk_load_hang ;mov ah,0x42 ; llea si,[lbaadr] ; int 0x13 ; cmp ah,0x00 ; check for error ; jne disk_load_hang ; check if LBA is supported pusha mov ah,0x41 mov bx,0x55aa int 0x13 jnc disk_load_lba popa mov ah,0x02 ;BIOS read sector func mov al,dh ;read dh sectors (amount) mov ch,0x00 ;cyl 0 mov dh,0x00 ;head 0 mov cl,0x02 ;start at sector 2 ; int 0x13 ;bios interrupt ; jc disk_load_hang popa ret disk_load_lba: popa xor ah,ah mov ah,0x42 lea si,[lbaadr] int 0x13 jc skip_print mov bx, 0x1000 call print_string skip_print: popa ret lbaadr: dw 0x10 dw 52 dw 0x1000 dw 0 dd 1 dd 0 ; ;lbaadr: ; dw 0x0010 ; 2byte, reserved - size of packet. ; dw 0x0010 ; WORD 2bytes nr of blocks read. ; dd 0x00001000 ; DWORD 4bytes Transfer buffer ; ; dq 0x0000000034009605 ; QWORD 4bytes,32bit LBA address ; dq 0x0000000000000000