Witam!
Mam mały problem z boot loaderem, a mianowicie z funkcją 2 przerwania 13h
Obecnie piszę w trybie rzeczywistym, ponieważ chcę potrenować przed napisaniem w pełni własnego graficznego boot loadera i pre loadera dla systemu plików ext2.
Aha i używam nasm-a oraz emulatora qemu pod systemem ubuntu 10.04 PL(polski remix)
mój boot loader:
[ORG 0x7C00]
[BITS 16]
start:
xor ah,ah
mov al, 3
int 10h
mov ah, 2
mov al, 10
xor ch, ch
mov cl, 2
mov dh, 0
mov bx, 0x1000
mov es, bx
mov bx, 0
int 0x13
jc error
mov si, msg_ok
call print_string
xor ah, ah
int 16h
jmp 0x0000:0x1000
error:
mov si, msg_error
call print_string
xor ah, ah
int 16h
mov ax, 5307h
mov cx, 0003h
mov bx, 0001h
int 15h
print_string:
lodsb ; załaduj następny znak
or al, al ; sprawdź, czy to już koniec napisu (czy bieżący znak to 0)
jz .koniec
mov ah, 0x0E
mov bh, 0x00 ; strona graficzna
mov bl, 0x07 ; atrybuty tekstu
int 0x10
jmp print_string
.koniec:
ret
;dane
msg_ok: db "gotowy do załadowania systemu, nacisnij jakis klawisz", 0
msg_error: db "wystapil blad, nacisnij jakis klawisz", 0
times 510 - ($ - start) db 0
;tworzymy znacznik bootsektora
db 0x55
db 0xAA
oraz kernel
[BITS 16]
[ORG 0x0000]
mov al, 0
mov ah, 13h
int 10h
call drawline
hang:
jmp hang
drawline:
mov ah, 0Ch
mov bh, 0
mov al, 40;
mov cx, [left]
add cx, [len]
mov dx, [top]
int 10h
mov ax, [len]
sub ax, 1
mov [len], ax
cmp ax, 0
jne drawline
ret
;dane
len: db 30
left: db 30
top: db 50
Boot loader jest ładowany poprawnie, ponieważ zanim napisałem ten post prowadziłem eksperymenty z grafiką w kodzie boot loadera.
P.S. Proszę o możliwie szybka odpowiedź.
Pozdrawiam Bartek