Local Advanced Programmable Interrupt Controller — Änderungen 2510 → 2521

Zeile 189: Zeile 189:
 
==== Codebeispiel: ====
 
==== Codebeispiel: ====
 
Dieser Code gehört in den anderen Init-Code für den APIC / Symmetric Mode. Er stellt den PIT auf den gewünschten Wert für den APIC Timer ein (hier 10ms), lässt die ISR des PITs den nötigen Wert für den Initial Count Value des APIC Timers berechnen und stellt diesen dann zugleich ein. Er setzt voraus, dass in der Variable [apicregs] die Adresse der APIC Register gespeichert ist.
 
Dieser Code gehört in den anderen Init-Code für den APIC / Symmetric Mode. Er stellt den PIT auf den gewünschten Wert für den APIC Timer ein (hier 10ms), lässt die ISR des PITs den nötigen Wert für den Initial Count Value des APIC Timers berechnen und stellt diesen dann zugleich ein. Er setzt voraus, dass in der Variable [apicregs] die Adresse der APIC Register gespeichert ist.
−
<asm> mov al,00110110b ;den PIT auf den gewünschten Wert (hier 10ms) einstellen
+
<asm> xor ebp,ebp ;EBP nullen, damit nachher in PIT-ISR erkenbar, wie oft der Timer-Interrupt aufgerufen wurde
 +
 
 +
mov al,00110110b ;den PIT auf den gewünschten Wert (hier 10ms) einstellen
 
out 43h,al
 
out 43h,al
 
 
Zeile 209: Zeile 211:
 
mov DWORD[eax+0x3e0],0xb
 
mov DWORD[eax+0x3e0],0xb
  
−
mov ebp,[eax+0x3200] ;Zuerst irgendein Register lesen, wegen Bug in manchem APICS
+
mov ebp,[eax+0x320] ;Zuerst irgendein Register lesen, wegen Bug in manchem APICS
 
mov DWORD[eax+0x320],0x20031
 
mov DWORD[eax+0x320],0x20031