PDA

View Full Version : [Assembly] Problema con la lettura di dati binari da floppy


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:

malocchio
30-07-2010, 00:18
Scusa ma tua stai usando assembly per 8086 (conosco l'emulatore) su una macchina reale x86?

demonbl@ck
05-08-2010, 13:31
Scusa ma tua stai usando assembly per 8086 (conosco l'emulatore) su una macchina reale x86?

Sì, non dovrei? :fagiano:

In teoria dovrebbe essere retrocompatibile al 100% :O

E comunque il kernel viene caricato quindi almeno in parte funziona :mbe:

malocchio
05-08-2010, 21:12
Sì, non dovrei? :fagiano:

In teoria dovrebbe essere retrocompatibile al 100% :O

E comunque il kernel viene caricato quindi almeno in parte funziona :mbe:

La prima cosa che mi viene in mente è che sull'8086 l'indirizzamento è a 20 bit, sull'x86 a 32. :wtf:

Comunque bisogna aspettare il parere di qualche esperto, qui sul forum non mancano, strano che nessuno abbia ancora risposto...

fero86
06-08-2010, 02:01
ma perché, esistono ancora i floppy disk? :stordita:
il mio PC il lettore floppy neanche ce l'ha, e parliamo del fisso, non del portatile :asd:

ha ancora senso perdere tempo su queste tecnologie? metá dei computers oggi sono a 64 bit e non supportano piu neanche la modalitá virtuale x86, io se dovessi scrivere un sistema operativo da zero quantomeno mi informerei su EFI.

fero86
06-08-2010, 02:03
La prima cosa che mi viene in mente è che sull'8086 l'indirizzamento è a 20 bit, sull'x86 a 32. :wtf: si, ma comunque i processori ad architettura Intel a 32 bit partono sempre in modalitá reale a 16 bit: i bootloaders vengono eseguiti come codice Intel a 16 bit e si devono occupare di entrare nella modalitá protetta a 32 bit.

cdimauro
06-08-2010, 06:18
ma perché, esistono ancora i floppy disk? :stordita:
il mio PC il lettore floppy neanche ce l'ha, e parliamo del fisso, non del portatile :asd:
Beh, io ce l'ho ancora. Il che dovrebbe far capire quanto vecchi siano i miei PC. :asd:
ha ancora senso perdere tempo su queste tecnologie? metá dei computers oggi sono a 64 bit e non supportano piu neanche la modalitá virtuale x86, io se dovessi scrivere un sistema operativo da zero quantomeno mi informerei su EFI.
Concordo. E la cosa più importante e da non sottovalutare, a mio avviso, è il fatto che quasi tutti i PC venduti da qualche anno a questa parte sono a 64 bit.

Perfino il mio netbook, sebbene ci giri 7 Starter che è a 32 bit, ha un Atom 450 che supporta AMD64.

Quindi se dovessi realizzare un s.o. oggi partirei senza dubbio con questa architettura, che ha una lunga vita davanti, ma soprattutto un'architettura molto più semplice, flessibile, e performante. ;)

malocchio
07-08-2010, 01:20
si, ma comunque i processori ad architettura Intel a 32 bit partono sempre in modalitá reale a 16 bit: i bootloaders vengono eseguiti come codice Intel a 16 bit e si devono occupare di entrare nella modalitá protetta a 32 bit.

:cry: non sapevo... redimimi! :D

cdimauro
07-08-2010, 05:42
Boot sequence on standard PC (IBM-PC compatible) (http://en.wikipedia.org/wiki/Boot_loader#Boot_sequence_on_standard_PC_.28IBM-PC_compatible.29)