CMOS — Änderungen 3201 → 3202

Zeile 1: Zeile 1:
−
Ein '''Complementary Metal Oxide Semiconductor''' (= '''CMOS''') ist eigentlich ein elektronischer Baustein, aber im Bereich der Betriebssystemprogrammierung ist damit meistens der Batterie-gepufferte SRAM eines [[x86]]- bzw. [[x86-64]]-Computers gemeint. In diesem speichert das [[BIOS]] Informationen beispielsweise über die angeschlossene Hardware. Außerdem wird darin die momentane Uhrzeit und das Datum gespeichert und von einer Echtzeituhr aktualisiert.
+
Ein '''Complementary Metal Oxide Semiconductor''' (= '''CMOS''') ist eigentlich ein elektronischer Baustein, aber im Bereich der Betriebssystemprogrammierung ist damit meistens der Batterie-gepufferte SRAM eines [[x86]]- bzw. [[x86-64]]-Computers gemeint. In diesem speichert das [[BIOS]] Informationen beispielsweise über die angeschlossene Hardware. Außerdem wird darin die momentane Uhrzeit und das Datum gespeichert und von einer [[RTC | Echtzeituhr]] aktualisiert.
  
 
== Aufbau ==
 
== Aufbau ==
  
−
Im CMOS werden folgende jeweils 1 Byte große Felder gespeichert.
+
Im CMOS werden folgende jeweils 1 Byte große Felder gespeichert. Die mit ''BCD'' markierten Einträge sind standardmässig im [[BCD | BCD-Format]] kodiert. Die Kodierung kann aber auch im [[CMOS#0x0B - Statusregister B | Statusregister B]] (Bit 2) geändert werden. Dabei ist allerdings zu beachten, dass die momentanen Werte im Register an die neue Kodierung angepasst werden müssen und dies nicht von selbst geschieht.
−
Die mit ''BCD'' markierten Einträge sind standardmässig im [[BCD | BCD-Format]] kodiert.
 
  
 
<br>
 
<br>
Zeile 254: Zeile 253:
 
Die Programmierung des CMOS ist denkbar einfach: Die sieben niederwertigen Bits des I/O Ports 0x70 dienen als Offset (siehe Tabelle). Das höchste Bit sollte nicht verändert werden, es dient als [[Non_Maskable_Interrupt | NMI]]-Maskierungsregister. Durch Lesen bzw. Schreiben des I/O Ports 0x71 kann dann der Wert an diesem Offset gelesen bzw. geschrieben werden.
 
Die Programmierung des CMOS ist denkbar einfach: Die sieben niederwertigen Bits des I/O Ports 0x70 dienen als Offset (siehe Tabelle). Das höchste Bit sollte nicht verändert werden, es dient als [[Non_Maskable_Interrupt | NMI]]-Maskierungsregister. Durch Lesen bzw. Schreiben des I/O Ports 0x71 kann dann der Wert an diesem Offset gelesen bzw. geschrieben werden.
  
 +
=== Assembler Beispielcode===
 
<asm>
 
<asm>
 
;Ein Makro um ein Byte aus dem CMOS auszulesen
 
;Ein Makro um ein Byte aus dem CMOS auszulesen
Zeile 268: Zeile 268:
 
</asm>
 
</asm>
  
 +
=== C/C++ Beispielcode ===
 
<c>
 
<c>
 
#define CMOS_PORT_ADDRESS 0x70
 
#define CMOS_PORT_ADDRESS 0x70
Zeile 300: Zeile 301:
 
* [http://www.bioscentral.com/misc/cmosmap.htm CMOS-Aufbau] (''englisch'')
 
* [http://www.bioscentral.com/misc/cmosmap.htm CMOS-Aufbau] (''englisch'')
  
−
[[Category:Glossar]]
 
 
[[Category:Hardware]]
 
[[Category:Hardware]]