11.4 os16: ibm_i86(9) Il file kernel/ibm_i86.h [12.5] descrive le funzioni e le macroistruzioni per la gestione dell'hardware. La sezione 2.3 descrive complessivamente queste funzioni e le tabelle successive sono tratte da li`. Tabella 2.26. Funzioni e macroistruzioni di basso livello, dichiarate nel file di intestazione kernel/ibm_i86.h e descritte nei file della directory kernel/ ibm_i860/. Le macroistruzioni hanno argomenti di tipo numerico non precisato, purche' in grado di rappresentare il valore necessario. Funzione o macroistruzione Descrizione Imposta la modalita` video della console. Questa funzione viene void _int10_00 (uint16_t ); usata solo da , per inizializzare void int10_00 (); la console; la modalita` video e` stabilita dalla macro-variabile , dichiarata nel file kernel/ibm_i86.h. Colloca il cursore in void _int10_02 (uint16_t , una posizione determinata dello uint16_t ); schermo, relativo a una certa pagina video. void int10_02 (, ); Questa funzione viene usata solo da . void _int10_05 (uint16_t ); Seleziona la pagina attiva del video. void int10_05 (); Questa funzione viene usata solo da e . void _int12 (void); Restituisce la quantita` di memoria disponibile, void int12 (void); in multipli di 1 024 byte. Azzera lo stato dell'unita` a disco void _int13_00 (uint16_t ); indicata, rappresentata da un numero secondo le void int13_00 (); convenzioni del BIOS. Viene usata solo dalle funzioni dsk_...() che si occupano dell'accesso alle unita` a disco. uint16_t _int13_02 (uint16_t , uint16_t , uint16_t , Legge dei settori da uint16_t , un'unita` a disco. Questa funzione viene uint16_t , usata soltanto da . void *); void int13_02 (, , , , , ); uint16_t _int13_03 (uint16_t , uint16_t , uint16_t , Scrive dei settori in uint16_t , un'unita` a disco. Questa funzione viene uint16_t , usata solo da . void *); void int13_03 (, , , , , ); Legge un carattere dalla tastiera, rimuovendolo uint16_t _int16_00 (void); dalla memoria tampone relativa. Viene usata void int16_00 (void); solo in alcune funzioni di controllo della console, denominate con_...(). Verifica se e` disponibile un carattere dalla tastiera: se c'e` ne restituisce il uint16_t _int16_01 (void); valore, ma senza rimuoverlo dalla memoria void int16_01 (void); tampone relativa, altrimenti restituisce zero. Viene usata solo dalle funzioni di gestione della console, denominate con_...(). Restituisce un valore con cui e` possibile determinare quali void _int16_02 (void); funzioni speciali della tastiera risultano void int16_02 (void); inserite (inserimento, fissa-maiuscole, blocco numerico, ecc.). Al momento la funzione non viene usata. Legge un byte dalla uint16_t _in_8 (uint16_t ); porta di I/O indicata. Questa funzione viene void in_8 (); usata da , e . uint16_t _in_16 (uint16_t ); Legge un valore a 16 bit dalla porta di I/O void in_16 (); indicata. Questa funzione viene usata solo da . void _out_8 (uint16_t , Scrive un byte nella porta di I/O indicata. uint16_t ); Questa funzione viene usata da , void out_8 (, ); e . void _out_16 (uint16_t , Scrive un valore a 16 bit nella porta uint16_t ); indicata. Questa funzione viene usata void out_16 (, ); solo da . Azzera l'indicatore delle interruzioni, nel registro . La funzione serve a void cli (void); permettere l'uso dell'istruzione CLI dal codice in linguaggio C, ma in questa veste, viene usata solo dalla funzione . Attiva l'indicatore delle interruzioni, nel registro . La funzione serve a void sti (void); permettere l'uso dell'istruzione STI dal codice in linguaggio C, ma in questa veste, viene usata solo dalla funzione . Abilita l'interruzione void irq_on (unsigned int ); hardware indicata. Questa funzione viene usata solo da . Disabilita void irq_off (unsigned int ); l'interruzione hardware indicata. Questa funzione viene usata solo da . void _ram_copy (segment_t , offset_t , Copia una certa quantita` segment_t , di byte, da una posizione di memoria offset_t , all'altra, specificando segmento e scostamento uint16_t ); di origine e destinazione. Viene void ram_copy (, , , usata solo dalle funzioni mem_...(). , ); Tabella 2.27. Funzioni per l'accesso alla console, dichiarate nel file di intestazione kernel/ibm_i86.h e descritte nei file contenuti nella directory kernel/ibm_i86/. Funzione Descrizione Legge un carattere dalla console, se int con_char_read (void); questo e` disponibile, altrimenti restituisce il valore zero. Questa funzione viene usata solo da . Legge un carattere dalla console, ma se int con_char_wait (void); questo non e` ancora disponibile, rimane in attesa, bloccando tutto il sistema operativo. Questa funzione non e` utilizzata. Verifica se e` disponibile un carattere dalla console: se e` cosi`, restituisce int con_char_ready (void); un valore diverso da zero, corrispondente al carattere in attesa di essere prelevato. Questa funzione viene usata solo da . void con_init (void); Inizializza la gestione della console. Questa funzione viene usata solo da . Seleziona la console desiderata, dove void con_select (int ); la prima si individua con lo zero. Questa funzione viene usata solo da . Visualizza il carattere indicato sullo schermo della console specificata, void con_putc (int , int ); sulla posizione in cui si trova il cursore, facendolo avanzare di conseguenza e facendo scorrere il testo in alto, se necessario. Questa funzione viene usata solo da . Fa avanzare in alto il testo della void con_scroll (int ); console selezionata. Viene usata internamente, solo dalla funzione . Tabella 2.30. Funzioni per l'accesso ai dischi, dichiarate nel file di intestazione kernel/ibm_i86.h. Funzione Descrizione void dsk_setup (void); Predispone il contenuto dell'array . Questa funzione viene usata soltanto da . Azzera lo stato dell'unita` int dsk_reset (int ); corrispondente a . Viene usata solo internamente, dalle altre funzioni dsk_...(). void dsk_sector_to_chs (int , Modifica le coordinate della variabile strutturata a cui punta unsigned int l'ultimo parametro, con le coordinate corrispondenti al numero , di settore fornito. Viene usata solo internamente, dalle altre funzioni dsk_chs_t *); dsk_...(). int dsk_read_sectors (int , unsigned int Legge una sequenza di settori da un disco, mettendo i dati in memoria, a , partire dalla posizione espressa da un puntatore generico. La funzione e` void *, ricorsiva, ma oltre che da se stessa, viene usata internamente da unsigned int e da . ); int dsk_write_sectors (int , unsigned int Scrive una sequenza di settori in un disco, traendo i dati da un , puntatore a una certa posizione della memoria. La funzione e` void *, ricorsiva, ma oltre che da se stessa, viene usata solo unsigned int internamente da . ); size_t dsk_read_bytes (int , Legge da una certa unita` a disco una off_t , quantita` specificata di byte, a partire dallo scostamento indicato void *, (nel disco), il quale deve essere un valore positivo. Questa funzione size_t count); viene usata solo da . size_t dsk_write_bytes (int , Scrive su una certa unita` a disco una quantita` specificata di byte, a off_t , partire dallo scostamento indicato (nel disco), il quale deve essere un void *, valore positivo. Questa funzione viene usata solo da . size_t count);