| 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:Hardware]] | [[Category:Hardware]] | ||