Jak zrestartować komputer
fatalbomb
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)
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 :)
To skoro wszysto obgadane to proponuje zrobic update wskazowki :)
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 :)
W rmode tez mozna zrobic jmp 0xFFFF:0 po drodze mozna zapisac w 0x40:0x72 wartosc 0x1234 dzieki czemu BIOS pominie sprawdzanie pamieci.
Mi int 19h zawsze działało w DOSie. No ale nie o tym FAQ.
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.
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 :>
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...
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.