Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: thetrue am 03. August 2006, 21:55
-
moin,
wie kann ich:
1. Den PowerDown Knopf abfangen und dann halt Power doch nicht abzuschalten ... also ich will sowas wie bei windows, wenn man den Ausschalte Knopf drückt ;)
2. Wie Kann ich den PC ausschalten, also APM PowerDown?
3. Wie reboote ich ihn?
achja, ich bin im Pmode ;)
-
Zu 1. Keine Ahnung, Sorry
2. Zurück in den RM und dann per INT 15
3. Per Hexdump
db 0EAh
dw 0000h
dw 0FFFFh
-
3. rebooten ist das einfachste. Eine Methode ist z.B. über den Keyboardcontroller (ich hab mal gehört über den kann man sogar Keyboards ansteuern...). Einfach 0xFE an den KBC senden.
2. Das kann man noch recht einfach über ein par Bios Ints machen. Muss dann aber im rm (oder v86) geschehen.
Der Code funzt bei mir. Hab ich mal wo aufgeschnappt.
Realmode!
mov ax,0x5301
xor bx,bx
int 0x15
mov ax,0x530e
xor bx,bx
mov cx,01
int 0x15
mov ax,0x530f
mov bx,1
mov cx,bx
int 0x15
mov ax,0x5308
mov bx,1
mov cx,bx
int 0x15
mov ax,0x5307
mov bx,1
mov cx,3
int 0x15
.hlt: hlt
jmp .hlt
1. Das würde nach meinem Wissen eine direkte programmierung vom APM benötigen, und davon hab ich keine Ahnung.
-
3. Per Hexdump
db 0EAh
dw 0000h
dw 0FFFFh
Wir leben im Zeitalter von Programmen die sich Assembler nennen. Kompatibilität zu Lochkarten ist nicht mehr erforderlich.
NASM nimmt z.B. folgendes an:
jmp 0xffff:0x0000
(Auch hier wird offensichtlich BIOS Code aufgerufen und benötigt somit einen Wechsel in den Real Mode.)
-
@PorkChicken: hehe das habe ich ihm auch per msn gesagt (dem thetrue). ^^
bitmaster
-
Das man nicht wieder in den RM muss ist der Vorteil des KBC-Resets.
Genau deshalb verwende ich ihn auch. Denn mein Kernel läuft mitlerweile im 3GiB Bereich und im Falle eines Resets müsste man sich immer erst ne PT für den 1MiB Bereich bauen um dort hinzuspringen und das Paging auszuschalten. Geht das eventuell auch eleganter? Ich kann sonst meinen APM Code nicht mehr benutzen. :*(
-
Virtual-8086-mode. Aber beschäftige dich doch erstmal mit einfacheren Sachen :wink:
-
Aber beschäftige dich doch erstmal mit einfacheren Sachen.
Das meintest du sicherlich mit bezug auf thetrue. Und da stimme ich dir voll zu *reim*.
@thetrue: Lern doch erstmal richtig die Intel (AMD) Architektur kennen. Lerne was "org" bringt, wofür Segmentregister sind, wie man Adressiert und wie das genau abläuft, usw. Dann wenn du das alles verstehst wird es dir viel einfacher fallen ein OS zu proggen. So, ohne viel Ahnung, wirst du bald ins stoppen geraten bzw. Fehler ohne Ende bekommen. Kauf dir doch ein besseres ASM-Buch, wenn deins nicht mal die Segmentregister erklährt. Ich empfehle dir das Assembler Buch von Addison-Wesley. Dies ist mein liebligsbuch. Ich warte z.Z. bis die eine neue Ausgabe davon rausbringen. Dann hoffentlich auch überm Longmode und 64 Bit.
bitmaster
-
Ne kleine Anmerkung @topic
Zumindest bei AT Rechnern wirst du Probleme haben, den Powerbutton abzufangen, da dieser direkt an das NT angeschlossen ist.
-
hi,
ACPI brauchst du (ab biosschen neueren PCs)
Reboot: Outb($64,$FE);
mfg,
stefan