bootloader int 0x13 loading floppy tracks
Posted: Sun Feb 01, 2004 3:00 pm
i am trying to load multiple tracks into memory but i am having trouble...
Code: Select all
;=============BOOT LOADER============
[bits 16]
[org 0x7c00]
jmp 0x0:main
;=============FUNCTIONS============
kbd_wait:
in al, 0x64
and al, 0x02
cmp al, 0x0
jne kbd_wait
retn
;=============VARIABLES=========
t_pos dw 0
nullsel equ 0x0
codesel equ 0000000000001000b
datasel equ 0000000000010000b
;=============GDT===============
gdtdata:
dw 24
dd gdt
gdt:
null:
dd 0
dd 0
code:
limc1 dw 0xffff
basec1 dw 0x0000
basec2 db 0x00
prefsc1 db 10011010b
prefsc2 db 11001111b
basec3 db 0x00
data:
limd1 dw 0xffff
based1 dw 0x0000
based2 db 0x00
prefsd1 db 10010010b
prefsd2 db 11001111b
based3 db 0x00
;=============CODE===============
main:
xor ax, ax
mov ds, ax
mov es, ax
mov fs, ax
mov gs, ax
mov ax, 0x7000
mov ss, ax
mov sp, 0x0
call kbd_wait
mov al, 0xd0
out 0x64, al
call kbd_wait
in al, 0x60
or al, 0x02
mov bl, al
call kbd_wait
mov al, 0xd1
out 0x64, al
call kbd_wait
mov al, bl
out 0x60, al
call kbd_wait
readtrack0:
mov ax, 0x1000
mov es, ax
mov bx, 0x00
mov ah, 0x02
mov al, 17
mov ch, 0
mov cl, 2
mov dh, 0
mov dl, 0
int 13h
jc readtrack0
readtrack1:
mov ax, 0x1000
mov es, ax
mov bx, 0x2220
mov ah, 0x02
mov al, 18
mov ch, 1
mov cl, 1
mov dh, 1
mov dl, 0
int 13h
jc readtrack1
readtrack2:
mov ax, 0x1000
mov es, ax
mov bx, 0x4620
mov ah, 0x02
mov al, 18
mov ch, 2
mov cl, 1
mov dh, 0
mov dl, 0
int 13h
jc readtrack2
readtrack3:
mov ax, 0x1000
mov es, ax
mov bx, 0x6a20
mov ah, 0x02
mov al, 18
mov ch, 3
mov cl, 1
mov dh, 1
mov dl, 0
int 13h
jc readtrack3
readtrack4:
mov ax, 0x1000
mov es, ax
mov bx, 0x8e20
mov ah, 0x02
mov al, 18
mov ch, 4
mov cl, 1
mov dh, 0
mov dl, 0
int 13h
jc readtrack4
readtrack5:
mov ax, 0x1000
mov es, ax
mov bx, 0xb220
mov ah, 0x02
mov al, 18
mov ch, 5
mov cl, 1
mov dh, 1
mov dl, 0
int 13h
jc readtrack5
readtrack6:
mov ax, 0x1000
mov es, ax
mov bx, 0xd620
mov ah, 0x02
mov al, 18
mov ch, 6
mov cl, 1
mov dh, 0
mov dl, 0
int 13h
jc readtrack6
readtrack7:
mov ax, 0x1000
mov es, ax
mov bx, 0xfa20
mov ah, 0x02
mov al, 18
mov ch, 7
mov cl, 1
mov dh, 1
mov dl, 0
int 13h
jc readtrack7
readtrack8:
mov ax, 0x21e2
mov es, ax
mov bx, 0x0
mov ah, 0x02
mov al, 18
mov ch, 8
mov cl, 1
mov dh, 0
mov dl, 0
int 13h
jc readtrack8
readtrack9:
mov ax, 0x21e2
mov es, ax
mov bx, 0x2400
mov ah, 0x02
mov al, 18
mov ch, 9
mov cl, 1
mov dh, 1
mov dl, 0
int 13h
jc readtrack9
readtrack10:
mov ax, 0x21e2
mov es, ax
mov bx, 0x4800
mov ah, 0x02
mov al, 18
mov ch, 10
mov cl, 1
mov dh, 0
mov dl, 0
int 13h
jc readtrack10
readtrack11:
mov ax, 0x21e2
mov es, ax
mov bx, 0x6c00
mov ah, 0x02
mov al, 18
mov ch, 11
mov cl, 1
mov dh, 1
mov dl, 0
int 13h
jc readtrack11
cli
lgdt [gdtdata]
mov eax, cr0
or al, 1
mov cr0, eax
jmp codesel:pmode
[bits 32]
pmode:
mov eax, datasel
mov ds, eax
mov es, eax
mov fs, eax
mov gs, eax
mov ss, eax
mov esp, 0x7000
jmp 0x213de
hang:
jmp hang
;=============FORMAT============
db 'goon'
times 510-($-$$) db 0
bootsig dw 0xAA55