Oppure

Loading
25/02/10 22:17
Exor
salve

sto cercando di capire come mai non funziona la lettura da floppy.

Ho fatto un bootloader, e voglio cercare di leggere il bootloader per creare un loop.

siccome il bootloader si trova nel primo settore, io cerco di leggere così

	mov ax, 0x7c00
	mov es, ax
	mov ch, 0            ; track
	mov cl, 0          ; sector
	mov dh, 0            ; head
	mov dl, 0            ; drive
	mov ah, 0x02
	mov al, 0x1		;settori da leggere
	mov bx, 0x200
	int 0x13


dopo questo codice faccio un jc per saltare alla parte della lettura riuscita

	jc ReadSectors.Error
	
	jmp ReadSectors.Done

ReadSectors.Error:
	mov si, loadsectors.rootdirerr
	call PrintStr
	ret
ReadSectors.Done:
	mov si, loadsectors.rootdirsuccess
	call PrintStr
	jmp 0x200
	ret


il messaggio di riuscita della lettura appare, però quando dovrebbe saltare all'indirizzo 0x200, non succede niente... ho provato anche a sostituire 0x200 nel jmp con 0x7c00:0x200 tanto per essere sicuro che non fosse un problema d'indirizzo, ma non funziona lo stesso.

potreste aiutarmi a capire cosa non va ?

grazie mille :)
aaa
26/02/10 8:37
nessuno
Come stai provando il programma (macchina fisica? Virtuale?)

Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
26/02/10 13:31
Exor
virtuale :S

infatti ho pensato pure io che possano essere diversi gli interrupt, però almeno il carry flag si dovrebbe settare no ?

siccome non si setta ho pensato che avesse letto...
aaa
26/02/10 14:02
nessuno
No ... non c'è differenza ... ma il codice che sta a partire dall'indirizzo 7c00:0200 qual è ?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
26/02/10 14:16
Exor
allora a 7c00:0000 c'è il bootloader che carica il bios, 512 byte dopo (0x0200) volevo caricare il settore dal floppy
e qui c'è il problema ...

dice che la lettura è avvenuta perkè non si setta il carry flag, però quando faccio jmp 7c00:200 non fa niente ...

dovrebbe ricaricare di nuovo il bootloader ma non lo fa
aaa
26/02/10 14:19
nessuno
Ripeto la domanda ... quale codice c'e' a partire da 7c00:0200 ? Come ti accorgi che il jmp non ha avuto effetto?
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
26/02/10 14:25
Exor
O_O FUNZIONAAAAAAAA :)

era l'indirizzo dove caricavo i dati ... invece di 0x200 ho provato 0x700 ed è andata :)

però è strano dovrei avere a disposizione tutta la memoria tranne l'ultimo segmento e quello del bootloader :-|

EDIT:

è andata anche con 0x200 ... -.-

ho solo cambiato l'indirizzo del jmp .. invece di saltare a 0x200 era 0x200:0x0

dovevo specificare anche l'offset (infatti essendo in real mode -.-)

grazie per l'aiuto, grande forum :k:
Ultima modifica effettuata da Exor 26/02/10 14:30
aaa