Discussione:
Che fa l'interrupt 13 del BIOS, con AH=00h?
(troppo vecchio per rispondere)
Marco
2004-11-21 09:39:19 UTC
Permalink
Disassemblando il settore di boot di un floppy di avvio, mi sono posto le
seguenti domande:
1) Che fa esattamente l'interrupt 13 del BIOS (gestione del disco), se
AH=00? Ho letto che dovrebbe resettare il disco (nel mio caso il floppy,
essendo DL=00); da qualche parte si parlava di lettura della traccia 0: che
vuol dire esattamente "resettare" il floppy? Cosa viene letto, esattamente,
e dove viene posto?
2) Perchè un codice posto all'indirizzo 0000:7C00 e che, essendo composto da
512 byte, termina a 0000:7DFF (come sempre, quando il BIOS carica il settore
di boot), e che non ha mai scritto nessun valore in memoria, dovrebbe andare
a leggere 11 byte che iniziano a 0000:0078 (addirittura il puntatore attuale
dello stack, BP, viene settato a 0078!), e copiarli all'inizio del codice da
0000:7C00 a 7C0B? Che venga cancellata una parte del codice, ormai eseguito,
non mi scandalizza; tuttavia non capisco in cosa consistano questi dati. Da
qualche parte ho letto che a 0000:0078 è presente l'interrupt 1E, che punta
alla tabella dei parametri del dischetto. È quello che viene copiato? in
cosa consiste esattamente?
Marco
2004-11-21 09:40:29 UTC
Permalink
Post by Marco
1) Che fa esattamente l'interrupt 13 del BIOS (gestione del disco), se
AH=00?
Questo è quello che ho trovato:
Function 00h: Reset Disk System
This function resets both the diskette and the fixed disk controllers. It
reinitializes the drive parameters and sets the Read/Write heads to cylinder
0.

http://home.att.net/~rayknights/pc_boot/int13fun.htm

Che vuol dire esattamente riinizializzare i parametri del drive e settare le
testine di lettura/scrittura al cilindro 0? Viene letto qualcosa (tipo
tavola delle partizioni e/o dei file presenti sul disco), oppure no? Se no,
cosa diavolo c'è all'indirizzo 0000:0078? Chi ce lo scrive? Il BIOS? Viene
letto insieme al settore di boot che è in esecuzione?

Leggo anche:

DISK - RESET DISK SYSTEM
AH = 00h
Forces controller to recalibrate drive heads (seek to track 0).

http://www.ctyme.com/intr/rb-0605.htm

Legge la traccia 0, o la cerca solo? Scrive qualcosa? Cosa, e dove?
Antonio Mazzeo
2004-11-21 10:49:05 UTC
Permalink
Post by Marco
DISK - RESET DISK SYSTEM
AH = 00h
Forces controller to recalibrate drive heads (seek to track 0).
http://www.ctyme.com/intr/rb-0605.htm
Legge la traccia 0, o la cerca solo? Scrive qualcosa? Cosa, e dove?
vado di memoria perchè è un accidenti di tempo che non vedo ste cose..

non legge nulla, non scrive nulla.. in pratica da il comando di
inizializzazione al controller, il quale dovrebbe verificare che tipo di
supporto c'è dentro (singola faccia, due facce..) e poi sposta le
testine al cilindro zero.. prova a farlo con il floppy disk..

antonio
Marco
2004-11-21 11:24:01 UTC
Permalink
Post by Antonio Mazzeo
non legge nulla, non scrive nulla.. in pratica da il comando di
inizializzazione al controller, il quale dovrebbe verificare che tipo di
supporto c'è dentro (singola faccia, due facce..) e poi sposta le testine
al cilindro zero.. prova a farlo con il floppy disk..
antonio
Ma qualche dato deve pur scriverlo in memoria... perlomeno il tipo di
supporto trovato... è chiaro che non legge un settore di dati, ma alle
locazioni 0000:0078 e successive (4 byte) cosa si trova dopo il detto
interrupt? È questo che vorrei capire. C'è dentro un indirizzo di memoria
che viene messo in ED:DI...
Antonio Mazzeo
2004-11-21 11:44:02 UTC
Permalink
Post by Marco
Ma qualche dato deve pur scriverlo in memoria... perlomeno il tipo di
supporto trovato... è chiaro che non legge un settore di dati, ma alle
locazioni 0000:0078 e successive (4 byte) cosa si trova dopo il detto
interrupt? È questo che vorrei capire. C'è dentro un indirizzo di memoria
che viene messo in ED:DI...
0000:0078h ? lì c'è la tabella dell'interrupt in modalità reale

quella locazione è l'indirizzo dell'interrupt 1Eh, e se tu vai a vedere
il contenuto di quella locazione dovresti trovare la coppia
segmento:offset della tabella che contiene le informazioni del supporto..

antonio

p.s. nell'interrupt list c'è un file che contiene la mappa del 1°
megabyte di memoria nei vari ambienti.. dos windows linux bios.. dai un
pò un'occhiata a quella mappa
lopnz@cw
2004-11-21 18:52:08 UTC
Permalink
Significati degli 11 byte della tabella base per una unità a dischetti:
Offset Impiego
00h ...............Byte di specifica 1:tempo di step rate, tempo di scarico
testina
01h................Byte di specifica 2: tempo di caricamento testina, modo
DMA
02h ...............Tempo di attesa perchè il motore cessi di girare
03h................Byte per settore: 0 = 128, 1 = 256, 2 = 512, 3 = 1024
04h.................Numero ultimo settore
05h.................Lunghezza intervallo fra settori per operazioni di
lettura/scrittura
06h.................Lunghezza dati quando non è specificata la lunghezza di
un settore
07h.................Lunghezza dell'intervallo fra settori per operazioni di
formattazione
08h.................Valore del dato registrato in un settore formattato. (di
solito F6h)
09h.................Tempo di stabilizzazione ddella testina
0Ah................Tempo di avviamento del motore.

Ripreso da: PS2 & PC IBM Guida del programmatore (2° edizione)
Di Peter Norton e Richard Wilton
Edito da Mondadori 1988
Byby.
Post by Marco
Disassemblando il settore di boot di un floppy di avvio, mi sono posto le
1) Che fa esattamente l'interrupt 13 del BIOS (gestione del disco), se
AH=00? Ho letto che dovrebbe resettare il disco (nel mio caso il floppy,
essendo DL=00); da qualche parte si parlava di lettura della traccia 0: che
vuol dire esattamente "resettare" il floppy? Cosa viene letto,
esattamente,
Post by Marco
e dove viene posto?
2) Perchè un codice posto all'indirizzo 0000:7C00 e che, essendo composto da
512 byte, termina a 0000:7DFF (come sempre, quando il BIOS carica il settore
di boot), e che non ha mai scritto nessun valore in memoria, dovrebbe andare
a leggere 11 byte che iniziano a 0000:0078 (addirittura il puntatore attuale
dello stack, BP, viene settato a 0078!), e copiarli all'inizio del codice da
0000:7C00 a 7C0B? Che venga cancellata una parte del codice, ormai eseguito,
non mi scandalizza; tuttavia non capisco in cosa consistano questi dati. Da
qualche parte ho letto che a 0000:0078 è presente l'interrupt 1E, che punta
alla tabella dei parametri del dischetto. È quello che viene copiato? in
cosa consiste esattamente?
Marco
2004-11-22 17:06:41 UTC
Permalink
Grazie infinite... suppongo che questi 11 byte vengano letti proprio
dall'int 13, AH=0...
lopnz@cw
2004-11-23 16:09:42 UTC
Permalink
Post by Marco
Grazie infinite... suppongo che questi 11 byte vengano letti proprio
dall'int 13, AH=0...
A questo indirizzo puoi trovare moltissime spiegazioni.

http://www.ctyme.com/intr/int-13.htm

Loading...