demonbl@ck
29-07-2010, 23:51
Ciao a tutti, mi sto cimentando nella programmazione di un piccolo sistema operativo testuale in assembly :D
Ora ho un problema, nel senso che il boot loader riesce a caricare in memoria il kernel e a trasferirgli il controllo, però dopo non ci riesco più.
Cioè, dal kernel non riesco a leggere altro, rimane sempre il cursore lampeggiante :confused:
ecco le sezioni di codice interessate:
Questo è quello che legge il file e dovrebbe trasferirgli il controllo:
...
...
cls_command:
mov ah, 02h ; read function.
mov al, 1 ; sectors to read.
mov ch, 0 ; cylinder.
mov cl, 12 ; sector.
mov dh, 0 ; head.
mov dl, 0 ; drive number.
; es:bx points to receiving
; data buffer:
mov bx, 0800h
mov es, bx
mov bx, 1401h
int 13h
cmp es:[1401h],0B4h ; il primo byte del file è B4
jne integrity_check_fail
cmp es:[1402h],02h ; il secondo è 02
jne integrity_check_fail ;se non corrispondono il file è corrotto
call 0800h:1401h
call clear_screen
jmp processed
int_check_fail:
lea si,integrity_error ;è una stringa del tipo "errore! verifica fallita"
call print_string
jmp processed
...
...
E questo è l'altro (volutamente molto semplice per evitare errori qua)
mov ah,0Eh
mov al,'O'
int 10h
mov al,'K'
int 10h
ret
Quello che non ha senso è che nell'emulatore (emu8086) funziona tutto perfettamente, nella realtà invece non va un casso!
Ovviamente sul floppy nel settore 12,cilindro 0,testina 0 c'è il file che dovrebbe leggere, ma subito dopo che si è sentito il lettore macinare si blocca tutto e rimane solo il cursorse lampeggiante.
La cosa è assurda perchè l'INT 13H lo uso anche per caricare il kernel e lì funziona :confused:
Qualche idea? :help:
Ora ho un problema, nel senso che il boot loader riesce a caricare in memoria il kernel e a trasferirgli il controllo, però dopo non ci riesco più.
Cioè, dal kernel non riesco a leggere altro, rimane sempre il cursore lampeggiante :confused:
ecco le sezioni di codice interessate:
Questo è quello che legge il file e dovrebbe trasferirgli il controllo:
...
...
cls_command:
mov ah, 02h ; read function.
mov al, 1 ; sectors to read.
mov ch, 0 ; cylinder.
mov cl, 12 ; sector.
mov dh, 0 ; head.
mov dl, 0 ; drive number.
; es:bx points to receiving
; data buffer:
mov bx, 0800h
mov es, bx
mov bx, 1401h
int 13h
cmp es:[1401h],0B4h ; il primo byte del file è B4
jne integrity_check_fail
cmp es:[1402h],02h ; il secondo è 02
jne integrity_check_fail ;se non corrispondono il file è corrotto
call 0800h:1401h
call clear_screen
jmp processed
int_check_fail:
lea si,integrity_error ;è una stringa del tipo "errore! verifica fallita"
call print_string
jmp processed
...
...
E questo è l'altro (volutamente molto semplice per evitare errori qua)
mov ah,0Eh
mov al,'O'
int 10h
mov al,'K'
int 10h
ret
Quello che non ha senso è che nell'emulatore (emu8086) funziona tutto perfettamente, nella realtà invece non va un casso!
Ovviamente sul floppy nel settore 12,cilindro 0,testina 0 c'è il file che dovrebbe leggere, ma subito dopo che si è sentito il lettore macinare si blocca tutto e rimane solo il cursorse lampeggiante.
La cosa è assurda perchè l'INT 13H lo uso anche per caricare il kernel e lì funziona :confused:
Qualche idea? :help: