Advanced Power Management — Änderungen 7495 → 7639

Zeile 1: Zeile 1:
 
{{TODO|Tutorial fertigschreiben}}
 
{{TODO|Tutorial fertigschreiben}}
  
−
'''Advanced Power Management''' ('''APM''') ist ein Standard für Power-Management, der von Intel und Microsoft entwickelt wurde. Um die [[Advanced Power Management#Real-Mode Schnittstelle | Real-Mode Schnittstelle]] zu nutzen, sollte bereits ein [[Real Mode]]-Betriebssystem oder ein Betriebssystem, das den [[Virtual 8086 Mode]] unterstützt, vorhanden sein. Für die [[Advanced Power Management#Protected-Mode Schnittstelle | Protected-Mode Schnittstelle]] gilt sollte ein lauffähiges [[Protected Mode]]-Betriebssystem, das zumindest Funktionen zum Verändern der [[GDT]] bereitstellt, vorhanden sein.
+
'''Advanced Power Management''' ('''APM''') ist ein Standard für Power-Management, der von Intel und Microsoft entwickelt wurde. Um die [[Advanced Power Management#Real-Mode Schnittstelle | Real-Mode Schnittstelle]] zu nutzen, sollte bereits ein [[Real Mode]]-Betriebssystem oder ein Betriebssystem, das den [[Virtual 8086 Mode]] unterstützt, vorhanden sein. Für die [[Advanced Power Management#Protected-Mode Schnittstelle | Protected-Mode Schnittstelle]] sollte ein lauffähiges [[Protected Mode]]-Betriebssystem, das zumindest Funktionen zum Verändern der [[GDT]] bereitstellt, vorhanden sein.
  
  
 
==Allgemeines==
 
==Allgemeines==
  
−
Der APM-Standard definiert 3 Schnittstellen, mit denen das Betriebssystem arbeiten kann.
+
Der APM-Standard definiert drei Schnittstellen, mit denen das Betriebssystem arbeiten kann.
  
 
Diese Schnittstellen sind:
 
Diese Schnittstellen sind:
−
#Das Real Mode Interface
+
#Das Real-Mode-Interface
−
#Das 16Bit Protected Mode Interface
+
#Das 16-Bit-Protected-Mode-Interface
−
#Das 32Bit Protected Mode Interface.  
+
#Das 32-Bit-Protected-Mode-Interface.  
 
Nur eine dieser Schnittstellen kann gleichzeitig genutzt werden.
 
Nur eine dieser Schnittstellen kann gleichzeitig genutzt werden.
−
<br>Bevor eine dieser Schnittstellen genutzt werden kann muss das Betriebssystem kontrollieren, ob APM vorhanden ist, denn einige neue Computer unterstützen APM nicht mehr.
+
<br />Bevor eine dieser Schnittstellen genutzt werden kann, muss das Betriebssystem kontrollieren, ob APM vorhanden ist, denn einige neue Computer unterstützen APM nicht mehr.
−
<br>Wenn APM unterstützt wird muss das Betriebssystem sich als nächstes mit einer Schnittstelle verbinden. Es ist eine gute Idee das Trennkommando zu senden bevor man sich mit einer Schnittstelle verbindet.
+
<br />Wenn APM unterstützt wird, muss das Betriebssystem sich als nächstes mit einer Schnittstelle verbinden. Es ist eine gute Idee das Trennkommando zu senden, bevor man sich mit einer Schnittstelle verbindet.
  
  
−
==Real-Mode Schnittstelle==
+
==Real-Mode-Schnittstelle==
  
 
===Initialisierung===
 
===Initialisierung===
 
====Versionskontrolle====
 
====Versionskontrolle====
  
−
Diese Funktion kontrolliert ob APM unterstützt wird:
+
Diese Funktion kontrolliert, ob APM unterstützt wird:
−
  <asm>mov ah,53h            ;Das APM-Komando      
+
  <asm>mov ah,53h            ;Das APM-Kommando      
−
mov al,00h            ;Versions-Anzeige Komando
+
mov al,00h            ;Versionsanzeigebefehl
−
xor bx,bx            ;Geräte id (0 = APM BIOS)
+
xor bx,bx            ;Geräte-ID (0 = APM BIOS)
 
int 15h              ;Die BIOS-Funktion über Interrupt 15h aufrufen
 
int 15h              ;Die BIOS-Funktion über Interrupt 15h aufrufen
−
jc APM_error          ;Wenn das Carry-Flag gesetzt wurde gab es einen Fehler (APM_error eigenes Label)
+
jc APM_error          ;Wenn das Carry-Flag gesetzt wurde, gab es einen Fehler (APM_error ist eigenes Label)
 
                       ;Die Funktion war erfolgreich
 
                       ;Die Funktion war erfolgreich
−
                       ;AX = APM Versionsnummer
+
                       ;AX = APM-Versionsnummer
−
                           ;AH = Major revision number (im BCD Format)
+
                           ;AH = Major revision number (im BCD-Format)
−
                           ;AL = Minor revision number (auch BCD Format)
+
                           ;AL = Minor revision number (auch BCD-Format)
−
                       ;BX = ASCII Zeichen "P" (in BH) und "M" (in BL)
+
                       ;BX = ASCII-Zeichen „P“ (in BH) und „M“ (in BL)
−
                       ;CX = APM Flags (Weiteres in der offiziellen Dokumentation)
+
                       ;CX = APM-Flags (Weiteres in der offiziellen Dokumentation)
 
</asm>
 
</asm>
  
Zeile 41: Zeile 41:
  
 
Diese Funktion verbindet sich zu einer der Schnittstellen, basierend auf der Variable ''interface_number'', die folgende Werte haben kann:
 
Diese Funktion verbindet sich zu einer der Schnittstellen, basierend auf der Variable ''interface_number'', die folgende Werte haben kann:
−
  01h = Real Mode Interface
+
  01h = Real-Mode-Interface
−
  02h = 16bit Protected Mode Interface
+
  02h = 16-Bit-Protected-Mode-Interface
−
  03h = 32bit Protected Mode Interface
+
  03h = 32-Bit-Protected-Mode-Interface
  
 
  <asm>;Verbinden zu einer APM-Schnittstelle
 
  <asm>;Verbinden zu einer APM-Schnittstelle
−
mov ah,53h              ;Dies ist das APM Komando
+
mov ah,53h              ;Dies ist das APM-Kommando
 
mov al,[interface_number];Siehe oben
 
mov al,[interface_number];Siehe oben
−
xor bx,bx                ;Geräte id (0 = APM BIOS)
+
xor bx,bx                ;Geräte-ID (0 = APM BIOS)
 
int 15h                  ;
 
int 15h                  ;
−
jc APM_error            ;Wenn das Carry-Flag gesetzt wurde gab es einen Fehler (APM_error eigenes Label)
+
jc APM_error            ;Wenn das Carry-Flag gesetzt wurde, gab es einen Fehler (APM_error ist eigenes Label)
 
                         ;Die Funktion war erfolgreich
 
                         ;Die Funktion war erfolgreich
 
                         ;Die Rückgabewerte sind unterschiedlich für jede Schnittstelle
 
                         ;Die Rückgabewerte sind unterschiedlich für jede Schnittstelle
−
                         ;Die Real Mode Schnittstelle gibt nichts zurück.
+
                         ;Die Real-Mode-Schnittstelle gibt nichts zurück.
 
                          
 
                          
  
Zeile 63: Zeile 63:
  
 
  <asm>;Jede Schnittstelle trennen
 
  <asm>;Jede Schnittstelle trennen
−
mov ah,53h              ;dies ist das APM KOmando
+
mov ah,53h              ;dies ist das APM-Kommando
−
mov al,04h              ;Trennkomando
+
mov al,04h              ;Trennbefehl
−
xor bx,bx                ;Geräte id (0 = APM BIOS)
+
xor bx,bx                ;Geräte-ID (0 = APM BIOS)
 
int 15h                  ;Die BIOS-Funktion über Interrupt 15h aufrufen
 
int 15h                  ;Die BIOS-Funktion über Interrupt 15h aufrufen
−
jc .disconnect_error    ;Wenn das Carry-Flag gesetzt wird kontrollieren was für ein Fehler auftrat
+
jc .disconnect_error    ;Wenn das Carry-Flag gesetzt wird, kontrollieren, was für ein Fehler auftrat
 
jmp .no_error
 
jmp .no_error
 
   
 
   
−
.disconnect_error:      ;Der Fehlercode ist in ah.
+
.disconnect_error:      ;Der Fehlercode ist in AH.
−
cmp ah,03h              ;Wenn der Fehlercode nicht 03h ist gab es einen Fehler
+
cmp ah,03h              ;Wenn der Fehlercode nicht 03h ist, gab es einen Fehler
−
jne APM_error            ;Der Fehlercode 03h bedeutet, dass keine Schnittstelle vebunden war. (APM_error eigenes Label)
+
jne APM_error            ;Der Fehlercode 03h bedeutet, dass keine Schnittstelle vebunden war. (APM_error ist eigenes Label)
  
 
.no_error:
 
.no_error:
−
                         ;Die Funktion war erfolkreich
+
                         ;Die Funktion war erfolgreich
 
                         ;Nichts wurde zurückgegeben
 
                         ;Nichts wurde zurückgegeben
 
</asm>
 
</asm>
  
 
===Geräte kontrollieren===
 
===Geräte kontrollieren===
−
Nachdem das Betriebssystem sich mit einer Schnittstelle verbunden hat kann es anfangen Geräte zu kontrollieren, aber als erstes muss es das Power Management aktivieren.
+
Nachdem das Betriebssystem sich mit einer Schnittstelle verbunden hat, kann es anfangen Geräte zu kontrollieren, aber als erstes muss es das Power Management aktivieren.
  
 
====Power Management aktivieren====
 
====Power Management aktivieren====
  
−
Diese Funktion aktiviert das Power Management für alle Geräte. Das ist schneller als es für jedes einzeln zu aktivieren
+
Diese Funktion aktiviert das Power Management für alle Geräte. Das ist schneller, als es für jedes einzeln zu aktivieren.
 
  <asm>;Power Management für alle Geräte aktivieren
 
  <asm>;Power Management für alle Geräte aktivieren
−
mov ah,53h              ;Dies ist das APM KOmando
+
mov ah,53h              ;Dies ist das APM-Kommando
−
mov al,08h              ;Den Status von Power Managemen wechseln...
+
mov al,08h              ;Den Status des Power Managements wechseln...
 
mov bx,0001h            ;...bei allen Geräten zu...
 
mov bx,0001h            ;...bei allen Geräten zu...
 
mov cx,0001h            ;...Power Management an.
 
mov cx,0001h            ;...Power Management an.
 
int 15h                ;Die BIOS-Funktion über Interrupt 15h aufrufen
 
int 15h                ;Die BIOS-Funktion über Interrupt 15h aufrufen
−
jc APM_error            ;Wenn das Carry-Flag gesetzt wurde gab es einen Fehler (APM_error eigenes Label)
+
jc APM_error            ;Wenn das Carry-Flag gesetzt wurde, gab es einen Fehler (APM_error ist eigenes Label)
 
                         ;Keine Rückgabe
 
                         ;Keine Rückgabe
 
</asm>
 
</asm>
−
Um das Power Management nur für ein bestimmtes Gerät zu aktivieren muss du die Geräte id in der Dokumentation nachschlagen und statt 0001h in bx eintragen.
+
Um das Power Management nur für ein bestimmtes Gerät zu aktivieren, muss die Geräte-ID in der Dokumentation nachgeschlagen und statt 0001h in BX eingetragen werden.
  
 
====Gerätezustand setzen====
 
====Gerätezustand setzen====
−
Diese Funktion setzt alle Geräte auf den Zustand auf den Wert der Variable ''power_state'' Korrekte Werte für ''power_state'' sind:
+
Diese Funktion setzt alle Geräte auf den Zustand, den die Variable ''power_state'' angibt. Gültige Werte für ''power_state'' sind:
 
  01h = Standby
 
  01h = Standby
 
  02h = Suspend
 
  02h = Suspend
Zeile 104: Zeile 104:
 
  20h...7Fh = OEM-defined power states
 
  20h...7Fh = OEM-defined power states
  
−
Um nur den Status eines bestimmten Gerätes zu ändern musst du die Geräte id in der Dokumentation nachschlagen und statt 0001h in bx eintragen.
+
Um nur den Status eines bestimmten Gerätes zu ändern, muss die Geräte-ID in der Dokumentation nachgeschlagen und statt 0001h in BX eingetragen werden.
  
−
  <asm>mov ah,53h              ;Dies ist das APM Komando
+
  <asm>mov ah,53h              ;Dies ist das APM-Kommando
 
mov al,07h              ;Setze den Status...
 
mov al,07h              ;Setze den Status...
 
mov bx,0001h            ;...aller Geräte...
 
mov bx,0001h            ;...aller Geräte...
−
mov cx,[power_state]    ;...zu Siehe oben
+
mov cx,[power_state]    ;...zu (siehe oben)
 
int 15h                ;Die BIOS-Funktion über Interrupt 15h aufrufen
 
int 15h                ;Die BIOS-Funktion über Interrupt 15h aufrufen
−
jc APM_error            ;Wenn das Carry-Flag gesetzt wurde gab es einen Fehler (APM_error eigenes Label)
+
jc APM_error            ;Wenn das Carry-Flag gesetzt wurde, gab es einen Fehler (APM_error ist eigenes Label)
 
                         ;Keine Rückgabe
 
                         ;Keine Rückgabe
  
Zeile 118: Zeile 118:
  
 
===Alles zusammen===
 
===Alles zusammen===
−
So zum Abschluss des Real Mode Teils noch eine Funktion zum Herrunterfahren des Computers:
+
Zum Abschluss des Real-Mode-Teils noch eine Funktion zum Herunterfahren des Computers:
  
 
  <asm>shutdown:  
 
  <asm>shutdown:  
 
pusha
 
pusha
 
mov ah,53h            ;Das APM-Komando     
 
mov ah,53h            ;Das APM-Komando     
−
mov al,00h            ;Versions-Anzeige Komando
+
mov al,00h            ;Versionsanzeigebefehl
−
xor bx,bx            ;Geräte id (0 = APM BIOS)
+
xor bx,bx            ;Geräte-ID (0 = APM BIOS)
 
int 15h              ;Die BIOS-Funktion über Interrupt 15h aufrufen
 
int 15h              ;Die BIOS-Funktion über Interrupt 15h aufrufen
−
jc APM_error          ;Wenn das Carry-Flag gesetzt wurde gab es einen Fehler (APM_error eigenes Label)
+
jc APM_error          ;Wenn das Carry-Flag gesetzt wurde, gab es einen Fehler (APM_error ist eigenes Label)
  
−
mov ah,53h              ;dies ist das APM KOmando
+
mov ah,53h              ;dies ist das APM-Kommando
−
mov al,04h              ;Trennkomando
+
mov al,04h              ;Trennbefehl
−
xor bx,bx                ;Geräte id (0 = APM BIOS)
+
xor bx,bx                ;Geräte-ID (0 = APM BIOS)
 
int 15h                  ;Die BIOS-Funktion über Interrupt 15h aufrufen
 
int 15h                  ;Die BIOS-Funktion über Interrupt 15h aufrufen
−
jc .disconnect_error    ;Wenn das Carry-Flag gesetzt wird kontrollieren was für ein Fehler auftrat
+
jc .disconnect_error    ;Wenn das Carry-Flag gesetzt wird, kontrollieren, was für ein Fehler auftrat
 
jmp .no_error
 
jmp .no_error
 
   
 
   
−
.disconnect_error:      ;Der Fehlercode ist in ah.
+
.disconnect_error:      ;Der Fehlercode ist in AH.
−
cmp ah,03h              ;Wenn der Fehlercode nicht 03h ist gab es einen Fehler
+
cmp ah,03h              ;Wenn der Fehlercode nicht 03h ist, gab es einen Fehler
−
jne APM_error            ;Der Fehlercode 03h bedeutet, dass keine Schnittstelle vebunden war. (APM_error eigenes Label)
+
jne APM_error            ;Der Fehlercode 03h bedeutet, dass keine Schnittstelle vebunden war. (APM_error ist eigenes Label)
  
 
.no_error:
 
.no_error:
  
 
;Verbinden zu einer APM-Schnittstelle
 
;Verbinden zu einer APM-Schnittstelle
−
mov ah,53h              ;Dies ist das APM Komando
+
mov ah,53h              ;Dies ist das APM-Kommando
 
mov al,[interface_number];Siehe oben
 
mov al,[interface_number];Siehe oben
−
xor bx,bx                ;Geräte id (0 = APM BIOS)
+
xor bx,bx                ;Geräte-ID (0 = APM BIOS)
 
int 15h                  ;
 
int 15h                  ;
−
jc APM_error            ;Wenn das Carry-Flag gesetzt wurde gab es einen Fehler (APM_error eigenes Label)
+
jc APM_error            ;Wenn das Carry-Flag gesetzt wurde, gab es einen Fehler  
  
 
;Power Management für alle Geräte aktivieren
 
;Power Management für alle Geräte aktivieren
−
mov ah,53h              ;Dies ist das APM KOmando
+
mov ah,53h              ;Dies ist das APM-Kommando
−
mov al,08h              ;Den Status von Power Managemen wechseln...
+
mov al,08h              ;Den Status des Power Managements wechseln...
 
mov bx,0001h            ;...bei allen Geräten zu...
 
mov bx,0001h            ;...bei allen Geräten zu...
 
mov cx,0001h            ;...Power Management an.
 
mov cx,0001h            ;...Power Management an.
 
int 15h                ;Die BIOS-Funktion über Interrupt 15h aufrufen
 
int 15h                ;Die BIOS-Funktion über Interrupt 15h aufrufen
−
jc APM_error            ;Wenn das Carry-Flag gesetzt wurde gab es einen Fehler (APM_error eigenes Label)
+
jc APM_error            ;Wenn das Carry-Flag gesetzt wurde, gab es einen Fehler
  
−
mov ah,53h              ;Dies ist das APM Komando
+
mov ah,53h              ;Dies ist das APM-Kommando
 
mov al,07h              ;Setze den Status...
 
mov al,07h              ;Setze den Status...
 
mov bx,0001h            ;...aller Geräte...
 
mov bx,0001h            ;...aller Geräte...
−
mov cx,[power_state]    ;...zu Siehe oben
+
mov cx,[power_state]    ;...zu (siehe oben)
 
int 15h                ;Die BIOS-Funktion über Interrupt 15h aufrufen
 
int 15h                ;Die BIOS-Funktion über Interrupt 15h aufrufen
−
jc APM_error            ;Wenn das Carry-Flag gesetzt wurde gab es einen Fehler (APM_error eigenes Label)
+
jc APM_error            ;Wenn das Carry-Flag gesetzt wurde gab es einen Fehler
 
                         ;Keine Rückgabe
 
                         ;Keine Rückgabe
 
   
 
   
Zeile 169: Zeile 169:
 
ret
 
ret
  
−
interface_number db 01h ;Real Mode Schnittstelle
+
interface_number db 01h ;Real-Mode-Schnittstelle
 
power_state db 03h      ;Power off
 
power_state db 03h      ;Power off
 
</asm>
 
</asm>