BIOS - Equipment List
Inside the BIOS / The Equipment List

23 Sep 2020 Fredrik Hussman 236 0 comments
  • EN Language
  • IT Language

 

Bios Award
Award Bios

The BIOS (Basic Input Output System) is a ROM that houses software written in Assembly with the specifications suitable for the processor. It is the very first software to run even before the operating system. The BIOS performs an important task, in fact, its software is able to verify the peripherals installed on the computer, some characteristics and initial settings for operation and the adaptation for the operating system supported by the computer.

Bios Award
American Megatrends Bios

Not going into historical hints, I will limit myself to explaining in principle how to read the information resident in the BIOS and how to interpret it correctly.


It is important to specify that the BIOS is a fundamental part of a computer, without it or in the event of a corrupt BIOS the system would not work. Any approach I will describe below is RISKY.



The Internal Software

Bios Award
PhoenixBios

The internal BIOS software is written in Assembly code and therefore can be interpreted, analyzed and in some parts modified. Although each manufacturer adopts different features and specifications, the internal software is developed to perform different stages. Initially, the BIOS processes the date and time taken from the CMOS which can be an integral part of the BIOS or separate and is powered by a buffer battery to allow the storage of these values. Later it deals with interfacing the computer hardware and the peripherals integrated on the motherboard to guarantee the operating system to be able to interact with them, at least within the basic operating limits. Finally, there is the POST phase which performs a general check of the hardware peripherals, port assignment and irq to end with the check of the installed RAM memory. These phases are relatively fast and silent except for some signals that the BIOS can emit through the computer speaker to signal anomalies or end of tests. The possible beeps, repeated beeps at specific intervals, indicate certain problems encountered by the BIOS. According to the BIOS manufacturer, there are interpretation tables to trace the meaning of each sequence of beeps, but I will talk about this in another article.

The Data

Phoenix BIOS Setup
PhoenixBios Setup

Internal BIOS data can be divided into two types, namely, static static data and volatile detected data:

  • Fixed static data or (FSD) are the data written on the BIOS that characterize the appearance of the internal software, the items listed and other functions that guide the user in the internal setup.
    In fact, the BIOS also allows direct SETUP access for manual settings that an experienced operator can make; this access can be carried out by means of combinations of one or more keys suggested on the screen during BOOT, usually accompanied by the same text [SETUP].


  • Volatile detected data or (VDD) are data that the bios detects from the hardware devices or data entered by the operator in the SETUP. These data are classified as volatile simply because they will reside in the internal memory of the BIOS as long as there is power guaranteed by the backup battery. If the backup battery ceases to supply adequate voltage, the risk of data loss is unavoidable, including the storage of the date and time.
    If the problem of data loss arises, the bios is able to notify us with a text on the screen and in this case often the solution and replacement of the buffer battery.

The backup battery is different depending on the model of the motherboard and can usually present itself in three types:
BIOS Type Battery

To read and interpret data, the BIOS provides many services that we can access through its hardware interrupts. These allow us to request certain functions from the BIOS for various tasks and solutions. Obviously these services, in addition to giving us important information about our computer, can help us to carry out Input/Output operations directly regardless of the Operating System installed on the computer.

For each hardware element that makes a computer, these have hardware interrupts that can be called up and based on the sub-functions we can access specific information using Assembly code or other languages that allow access to them.


Acces data of the equipment list

The Equipment list is the information we see during the boot phase or in the BIOS setup itself. To access this information we are helped by the error 11h or the absolute address 0000h:0400h which both provide a value in WORD where each bit obtained from it is information about a hardware device installed on our computer. For example, we can know how many floppy drives are installed and their capacity, the type of video, the serial and parallel ports, the joystick, amount of memory and many other information that we can use for informational purposes or integrate them to write software that requires certain hardware and then exploit this information to evaluate the configuration of the computer on which the software will operate.

CodeBitfields List


Bitfields for BIOS equipment list: Bit(s) Description (Table 00226)
0 floppy disk(s) installed (number specified by bits 7-6)
1 80x87 coprocessor installed
3-2 number of 16K banks of RAM on motherboard (PC only)
number of 64K banks of RAM on motherboard (XT only)
2 pointing device installed (PS)
3 unused (PS)
5-4 initial video mode
00 EGA, VGA, or PGA
01 40x25 color
10 80x25 color
11 80x25 monochrome
7-6 number of floppies installed less 1 (if bit 0 set)
8 DMA support installed (PCjr, Tandy 1400LT)
DMA support *not* installed (Tandy 1000's)
11-9 number of serial ports installed
12 game port installed
13 serial printer attached (PCjr)
internal modem installed (PC/Convertible)
15-14 number of parallel ports installed
---Compaq, Dell, and many other 386/486 machines--
23 page tables set so that Weitek coprocessor addressable in real mode
24 Weitek math coprocessor present
---Compaq Systempro---
25 internal DMA parallel port available
26 IRQ for internal DMA parallel port (if bit 25 set)
0 = IRQ5
1 = IRQ7
28-27 parallel port DMA channel
00 DMA channel 0
01 DMA channel 0 ???
10 reserved
11 DMA channel 3


The following listing is in classic Pascal language which, despite being simplified, allows you to access and view the equipment list. To have complete access to the many information and interrupts of the BIOS we can use the uTPk Framework which provides complete resource management.

CodeFirst example / Source Code: Pascal

(* IN QUESTO ESEMPIO SI UTILIZZERA' LA LIBRERIA STDLIB DEL *)
(* FRAMEWORK UTPK PER DISPORRE DEL COMANDO LONGBIN CHE CONVERTE *)
(* IL VALORE WORD IN RAPRESENTAZIONE BINARIA. *)

USES STDLIB; (* DICHIARO L'USO DELLA LIBRERIA STANDARD STDLIB *)
VAR DATA :WORD; (* DICHIARO VARIABILE DATI IN WORD *) SDATA :STRING; (* STRINGA DI CONVERSIONE BINARIA *)
PART_A, PART_B :STRING[8]; (* STRINGHE DI RAPRESENTAZIONE *)

BEGIN ASM (* APRO BLOCCO ASSEMBLY *) INT 11H (* RICHIEDO SERVIZIO ALL'INTERRUPT 11H *) MOV DATA, AX (* SPOSTO IL VALORE WORD RESTITUITO IN AX *)
(* NELLA VARIABILE DATA *) END; (* CHIUDO IL BLOCCO ASSEMBLY *)
SDATA := LONGBIN(DATA); (* CONVERTO IN STRINGA BINARIA *) PART_A := COPY(SDATA, 1, 8); (* COPIO LA PRIMA PARTE (8 BIT) *)
PART_B := COPY(SDATA, 9, 16); (* COPIO LA SECONDA PARTE (8 BIT) *) WRITELN(PART_A, ':', PART_B); (* STAMPO A VIDEO LA STRINGA BINARIA *)
END.

The code example shown above uses an assembly block to access interrupt
11h, but we can make a different access using the absolute address which will return the same result but we would have lightened the code by many lines, thanks to the variables declared as absolute which will point to the direct address, that is, the segment and the absolute offset [Seg: Ofs].

CodeLast example / Source Code: Pascal

(* IN QUESTO ESEMPIO SI UTILIZZERA' LA LIBRERIA STDLIB DEL *)
(* FRAMEWORK UTPK PER DISPORRE DEL COMANDO BYTEBIN CHE CONVERTE *)
(* IL VALORE BYTE IN RAPRESENTAZIONE BINARIA. *)

USES STDLIB; (* DICHIARO L'USO DELLA LIBRERIA STANDARD STDLIB *)
VAR
(* DATAL ASSUMERA' DIRETTAMENTE IL BYTE LOW DELLA WORD *) DATAL :BYTE ABSOLUTE $0000:$0410; (* DATAH ASSUMERA' DIRETTAMENTE IL BYTE HIGH DELLA WORD *) DATAH :BYTE ABSOLUTE $0000:$0411; PART_A, PART_B :STRING[8]; (* STRINGHE DI RAPRESENTAZIONE *)

BEGIN PART_A := BYTEBIN(DATAL); (* CONVERTO BYTE LOW IN STRINGA BINARIA *) PART_B := BYTEBIN(DATAH); (* CONVERTO BYTE HIGH IN STRINGA BINARIA *) WRITELN(PART_A, ':', PART_B); (* STAMPO A VIDEO LA STRINGA BINARIA *) END.

The result of both examples will look like this:

00100111:11000100


Obviously, afterwards you have to translate the meaning of each bit taking a cue from the bitfields table listed above.

In the download you will find the examples shown above is a small program that interprets some bits displaying the information obtained on the screen.


Minimal system configuration:

  • CPU 8088 / Pentium
  • RAM 640K
  • SO: DOS

Download
InfoBios
DOWNLOAD


Bios Award
Award Bios

Il BIOS (Basic Input Output System) è una ROM che ospita nel suo interno un software scritto in Assembly con le specifiche adatte al processore. E il vero primo software ad essere eseguito ancor prima del sistema operativo. Il BIOS svolge un compito importante, infatti, il suo software è in grado di verificare le periferiche installate sul computer, alcune caratteristiche e settaggi iniziali per il funzionamento e l'adeguamento per il sistema operativo supportato dal computer.

Bios Award
American Megatrends Bios

Non entrando in cenni storici, mi limiterò a spiegare in linea di massima come leggere le informazioni residenti nel BIOS e come interpretarli in modo corretto.

E' importante specificare che il BIOS è parte fondamentale di un computer, senza di esso o in caso di BIOS corrotto il sistema non funzionerebbe. Qualsiasi approccio che descriverò di seguito è da intendersi RISCHIOSO.



Il software interno

Bios Award
PhoenixBios


Il software interno del BIOS è scritto in codice Assembly è quindi può essere interpretato, analizzato e in alcune parti modificato. Nonostante ogni produttore adotta caratteristiche e specifiche diverse, il software interno è sviluppato per eseguire diverse fasi.

Inizialmente il BIOS elabora la data è l'ora ricavata dalla CMOS che può essere parte integrante del BIOS o separata ed è alimentata da una batteria tampone per consentire la memorizzazione di tali valori. In seguito si occupa di interfacciare l'hardware del computer e le periferiche integrate sulla scheda madre per garantire al sistema operativo di riuscire ad interagire con esse, almeno nei limiti di funzionamento base.
Infine si ha la fase di POST che effettua una verifica generale delle periferiche hardware, assegnazione delle porte e irq per terminare con il controllo della memoria RAM installata.

Queste fasi sono relativamente veloci e silenziose tranne per alcuni segnali che il BIOS può emettere attraverso lo speacker del computer per segnalare anomalie o fine dei test.
I possibili segnali, beep ripetuti a intervalli specifici, indicano determinati problemi riscontrati dal BIOS. In base al produttore del BIOS esistono tabelle di interpretazione per risalire al significato di ogni sequenza di beep, ma di questo ne parlerò in un'altro articolo.

I Dati

Phoenix BIOS Setup
PhoenixBios Setup


I dati interni del BIOS possono essere divisi in due tipologie, ovvero, dati statici fissi e dati rilevati volatili:

  • Dati statici fissi o (FSD) sono quei dati scritti sul BIOS che ne caratterizzano l'aspetto del software interno, le voci elencate e altre funzioni che guidano l'utente nel setup interno.
    Infatti, il BIOS consente anche un accesso diretto SETUP per i settings manuali che un operatore esperto può apportare; questo accesso può essere eseguito mediante combinazioni di uno o più tasti suggeriti a schermo in fase di BOOT, solitamente accompagnati dal medesimo testo [SETUP].

  • Dati rilevati volatili o (VDD) sono dati che il bios rileva dalle periferiche hardware o dati immessi dall'operatore nel SETUP. Questi dati vengono classificati volatili semplicemente perchè risiederanno nella memoria interna del BIOS finchè ci sia alimentazione garantita dalla batteria tampone. Se la batteria tampone cessa di erogare il voltaggio adeguato il rischio della perdita dei dati è inevitabile, compresa la memorizzazione della data e ora.
    Qualora si presenta il problema della perdita dei dati il bios è in grado di avvisarci con un testo a video e in tal caso spesso la soluzione e la sostituzione della batteria tampone.

La batteria tampone è diversa a seconda del modello della scheda madre è può presentarsi solitamente in tre tipologie:
BIOS Type Battery

Per leggere ed interpretare i dati, il BIOS fornisce molti servizi che possiamo accedervi tramite i suoi interrupt hardware. Questi ci permettono di richiedere al BIOS determinate funzioni per svariati compiti e soluzioni. Ovviamente questi servizi, oltre a darci informazioni importanti sul nostro computer, possono aiutarci ad effettuare operazioni di Input/Output in via diretta indipendentemente dal Sistema Operativo installato sul computer.

Per ogni elemento hardware di un un computer, questi hanno degli interrupt hardware che possono essere richiamati è in base alle sottofunzioni possiamo accedere ad informazioni specifiche utilizzando codice Assembly o altri linguaggi che ne permettono l'accesso ad essi.


Accesso alle Equipment List

L' Equipment list sono quelle informazioni che visualizziamo durante la fase di boot o nel setup stesso del BIOS. Per accedere a queste informazioni ci viene in aiuto l'interrupt 11h o l'address assoluto 0000h:0400h che forniscono entrambi un valore in WORD dove ogni bit ricavato da esso è una informazione riguardante una periferica hardware installata sul nostro computer. Ad esempio, possiamo conoscere quanti floppy drive sono installati e la loro capacità, il tipo di video, le porte seriali e parallele, il joystick, quantità di memoria e tante altre informazioni che possiamo utilizzare per scopi informativi o integrarli per redigere un software che richiede determinati hardware e quindi sfruttare queste informazioni per valutare la configurazione del computer sul quale il software andrà ad operare.

CodeBitfields List


Bitfields for BIOS equipment list: Bit(s) Description (Table 00226)
0 floppy disk(s) installed (number specified by bits 7-6)
1 80x87 coprocessor installed
3-2 number of 16K banks of RAM on motherboard (PC only)
number of 64K banks of RAM on motherboard (XT only)
2 pointing device installed (PS)
3 unused (PS)
5-4 initial video mode
00 EGA, VGA, or PGA
01 40x25 color
10 80x25 color
11 80x25 monochrome
7-6 number of floppies installed less 1 (if bit 0 set)
8 DMA support installed (PCjr, Tandy 1400LT)
DMA support *not* installed (Tandy 1000's)
11-9 number of serial ports installed
12 game port installed
13 serial printer attached (PCjr)
internal modem installed (PC/Convertible)
15-14 number of parallel ports installed
---Compaq, Dell, and many other 386/486 machines--
23 page tables set so that Weitek coprocessor addressable in real mode
24 Weitek math coprocessor present
---Compaq Systempro---
25 internal DMA parallel port available
26 IRQ for internal DMA parallel port (if bit 25 set)
0 = IRQ5
1 = IRQ7
28-27 parallel port DMA channel
00 DMA channel 0
01 DMA channel 0 ???
10 reserved
11 DMA channel 3


Il listato che segue è in classico linguaggio Pascal che nonostante sia semplificato permette di accedere e visualizzare l' equipment list. Per avere un accesso completo alle tante informazioni è interrupts del BIOS possiamo utilizzare il Framework uTPk che fornisce una completa gestione delle risorse.

CodePrimo esempio / Source Code: Pascal

(* IN QUESTO ESEMPIO SI UTILIZZERA' LA LIBRERIA STDLIB DEL *)
(* FRAMEWORK UTPK PER DISPORRE DEL COMANDO LONGBIN CHE CONVERTE *)
(* IL VALORE WORD IN RAPRESENTAZIONE BINARIA. *)

USES STDLIB; (* DICHIARO L'USO DELLA LIBRERIA STANDARD STDLIB *)
VAR DATA :WORD; (* DICHIARO VARIABILE DATI IN WORD *) SDATA :STRING; (* STRINGA DI CONVERSIONE BINARIA *)
PART_A, PART_B :STRING[8]; (* STRINGHE DI RAPRESENTAZIONE *)

BEGIN ASM (* APRO BLOCCO ASSEMBLY *) INT 11H (* RICHIESTA SERVIZIO ALL'INTERRUPT 11H *) MOV DATA, AX (* SPOSTO IL VALORE WORD RESTITUITO IN AX *)
(* NELLA VARIABILE DATA *) END; (* CHIUDO IL BLOCCO ASSEMBLY *)
SDATA := LONGBIN(DATA); (* CONVERTO IN STRINGA BINARIA *) PART_A := COPY(SDATA, 1, 8); (* COPIO LA PRIMA PARTE (8 BIT) *)
PART_B := COPY(SDATA, 9, 16); (* COPIO LA SECONDA PARTE (8 BIT) *) WRITELN(PART_A, ':', PART_B); (* STAMPO A VIDEO LA STRINGA BINARIA *)
END.


L' esempio di codice sopra mostrato utilizza un blocco in assembly per accedere all'interrupt 11h, ma possiamo effettuare un diverso accesso usando l'indirizzo assoluto che restituirà lo stesso risultato ma avremmo alleggerito di molte righe il codice, questo grazie alle variabili dichiarate come assolute che punteranno all'indirizzo diretto, ovvero, al segmento e all' offset [Seg:Ofs] assoluto.

CodeSecondo esempio / Source Code: Pascal


(* IN QUESTO ESEMPIO SI UTILIZZERA' LA LIBRERIA STDLIB DEL *)
(* FRAMEWORK UTPK PER DISPORRE DEL COMANDO BYTEBIN CHE CONVERTE *)
(* IL VALORE BYTE IN RAPRESENTAZIONE BINARIA. *)

USES STDLIB; (* DICHIARO L'USO DELLA LIBRERIA STANDARD STDLIB *)
VAR
(* DATAL ASSUMERA' DIRETTAMENTE IL BYTE LOW DELLA WORD *) DATAL :BYTE ABSOLUTE $0000:$0410; (* DATAH ASSUMERA' DIRETTAMENTE IL BYTE HIGH DELLA WORD *) DATAH :BYTE ABSOLUTE $0000:$0411; PART_A, PART_B :STRING[8]; (* STRINGHE DI RAPRESENTAZIONE *)

BEGIN PART_A := BYTEBIN(DATAL); (* CONVERTO BYTE LOW IN STRINGA BINARIA *) PART_B := BYTEBIN(DATAH); (* CONVERTO BYTE HIGH IN STRINGA BINARIA *) WRITELN(PART_A, ':', PART_B); (* STAMPO A VIDEO LA STRINGA BINARIA *) END.

Il risultato di entrambi gli esempi sarà simile al seguente:

00100111:11000100


Ovviamente in seguito bisogna tradurre il significato di ogni bit prendendo spunto dalla tabella dei bitfields sopra elencata.

Nel download troverete gli esempi sopra mostrati è un programmino che interpreta alcuni bit visualizzando a video le informazioni ricavate.


Minimal system configuration:

  • CPU 8088 / Pentium
  • RAM 640K
  • SO: DOS

Download
InfoBios
DOWNLOAD






Programming, For Beginning



In Mouse Burrow
How to Catch a Mouse - The Guide
Next

Comments (1)

Michele
06 Feb 2021 at 14:02

Articolo interessante molto dettagliato

Your name (required)

E-Mail (will not be published) (required)

Comment: * min 3 letters



Orbital Crew © 1992, 2020
Copyright. All Rights Reserved, Inc
Web Develope: F.H / A.Mazzola