diff options
| author | Michal Idziorek <m.i@gmx.at> | 2014-11-14 11:08:04 +0100 |
|---|---|---|
| committer | Michal Idziorek <m.i@gmx.at> | 2014-11-14 11:08:04 +0100 |
| commit | e3cc5f6c89ba9f37bf2c1edf588d0f75c1d63c57 (patch) | |
| tree | 1c43c3e9ce81f7564beb3a970b88beaa66169946 /boot1/disk_load_16.asm | |
| parent | 2761b620043ad511d9baf66d5478a463aeece77b (diff) | |
rename dirs
Diffstat (limited to 'boot1/disk_load_16.asm')
| -rw-r--r-- | boot1/disk_load_16.asm | 102 |
1 files changed, 102 insertions, 0 deletions
diff --git a/boot1/disk_load_16.asm b/boot1/disk_load_16.asm new file mode 100644 index 0000000..76102ad --- /dev/null +++ b/boot1/disk_load_16.asm @@ -0,0 +1,102 @@ +; +;disk_load_16 +; + +[bits 16] + +STR_LBA: + db "LBA Support Detected",0 + +STR_CHS: + db "CHS BROKEN SORRY(?)",0 + +STR_ERROR: + db "Disk Read Error",0 + +STR_DONE: + db "Stage 2 Loaded",0 + +disk_load_16: + + pusha + + ; check if LBA is supported + mov ah,0x41 + mov bx,0x55aa + int 0x13 + jnc disk_load_lba + jmp disk_load_chs + +disk_load_lba: + + mov bx, STR_LBA + call print_string + call print_nextline + + mov dl,[BOOT_DRIVE] + xor ah,ah + mov ah,0x42 + + mov bx,0 + mov ds,bx + lea si,[lba_adr] + + int 0x13 + jnc disk_load_finish + jmp disk_load_error + +disk_load_chs: + + mov bx, STR_CHS + call print_string + call print_nextline + + mov bx,0 ;target es:bx + mov es,bx + mov bx,0x7e00 + + mov al,50 ;number of sectors to read + mov ah,0x02 ;BIOS read sector func + + mov cl,2 ; sector + mov ch,0 ; cylinder + + mov dl,[BOOT_DRIVE] + mov dh,0 ;head + + int 0x13 ;bios interrupt + + jnc disk_load_finish + +disk_load_error: + + call print_nextline + mov bx, STR_ERROR + call print_string + call print_nextline + jmp $ + +disk_load_finish: + + call print_nextline + mov bx, STR_DONE + call print_string + call print_nextline + + + popa + ret + + +;; here we hold the lba addr +lba_adr: + + dw 0x10 ; size of packet ( 16 byte) + dw 16 ; number of sectors to read + + ; target is 0x7e00 + dw 0x7e00 ; target addr. offset + dw 0x0000 ; target addr. sector + + dd 1 ; first sector to read + dd 0 |
