Programowanie w języku Pascal » FAQ

Jak zrestartować komputer

  • 2007-05-03 21:46
  • 9 komentarzy
  • 1388 odsłon
  • Oceń ten tekst jako pierwszy
Według jednego z artykułów aby zrestartować kompa trzeba wywołać przerwanie 19h. U mnie to nie działa. Jest natomiast inny, prostszy sposób na natychmiastowy restart, działający na wszystkich komputerach. Chodzi o wysłanie na port 64h liczby 240:

Port [$64] := 240; { Reboot! }


Dlaczego tak jest, nie wiem. Trafiłem na to przypadkiem, gdy próbowałem na wszystkie porty wysłać wszystkie liczby od 0 do 255 :-). Kiedy doszło do adresu $64, wysłanie tam 240 spowodowało restart systemu. Podejrzewam, że wywołałem jakiś błąd, który ogłupił kompa. W każdym razie kod działa!

Alternatywnie można użyć takiego kodu:
Port [$92] := 1; { Reboot! }


Zamiast 1 można podstawić jakąkolwiek liczbę nieparzystą (znaczenie ma tylko bit o wadze 1). Efekt jest dokładnie identyczny.

Uwagi:
 * Kod ten nie działa pod Windowsem
 * Kod ten nie chodzi w maszynach wirtualnych (przynajmniej w VMWare Player)

9 komentarzy

darktemplar 2005-10-02 09:31

int 19h działa pod gołym BIOS\'em bo to BIOS daje tą funkcję. Zresztą zobacz sobie na IVT. A mi działa pod gołym bootloaderem :)

Wolverine 2005-09-22 15:05

To skoro wszysto obgadane to proponuje zrobic update wskazowki :)

Marooned 2005-09-22 00:35

Ano - ale różnica pomiędzy skokiem a int 19h jest taka, że nie jest czyszczona pamięć [Ty wiesz, inni może nie].

Wygląda to tak :)

C:\\>prog_int19.com
Starting MS-DOS...
[i tu leci Autoexec.bat i Config.sys] :)

Wolverine 2005-09-21 19:40

W rmode tez mozna zrobic jmp 0xFFFF:0 po drodze mozna zapisac w 0x40:0x72 wartosc 0x1234 dzieki czemu BIOS pominie sprawdzanie pamieci.

Marooned 2005-09-21 17:00

Mi int 19h zawsze działało w DOSie. No ale nie o tym FAQ.

fatalbomb 2005-09-20 20:20

Sprawdzałem int 19h pod gołym dosem i też nie chodziło. A na tą kombinację trafiłem całkiem przypadkowo, co opisałem na końcu.

Wolverine 2005-09-20 14:53

To, ze kontrolerem klawiatury mozna wyslac do procesora sygnal ktory spowoduje jego zresetowanie, nawet takie oczywiste rzeczy jak odblokowanie lini A20 robi sie zazwyczaj przez kontroler klawiatury (ntldr robi to na kilkanascie roznych sposobow aby zachowac kompatybilnosc, podobnie jak wiekszosc innych bootloaderow), glupie nie? Co do reboota to jest wiele sposobow, o chocby litd 0, int 1 (pmode) co powinno zaowocowac triple faultem i resetem - oczywiscie mowa o ring0 wiec nie lapcie sie od razu za kompilator pod winem czy czyms tam :) Napisz jak wylaczyc komputer to bedzie cos :>

Marooned 2005-09-20 00:15

int 19h jest to przeładowanie systemu bez czyszczenia pamięci - wygląda to dość niecodziennie i działa - ale oczywiście tylko w systemie DOS

Pewnie próbowałeś pod Windows... hehe...

A port $60 ?? czy mnie pamięć nie myli, że to port klawiatury?? co to ma wspólnego z resetem...

fatalbomb 2005-11-19 18:08

Mam taką drobną uwagę: tego kodu nie należy uruchamiać w oknie DOS`a pod windą, tylko należy to odpalić w \"czystym\" DOS-ie.