PC unter DOS neu starten



  • Original erstellt von <whats> am 28.07.2002 um 00:13
    *
    Danke Nobou, aber ich krieg's einfach nicht hin. Könntest du vielleicht den vollständigen Code für TASM posten? Und ist das eigentlich der übliche Weg den PC unter DOS (nicht Windows-Konsole) neuzustarten?
    *

    Hier der Code:

    IDEAL
    model tiny
    p386
    
    dataseg
    Text0 db "System neu starten? (Y/N): $"
    Text1 db 0Ah,0Dh"Ungueltige Eingabe.$"
    
    codeseg
    org 100h
    START:
    mov dx,offset Text0
    mov ah,09h
    int 21h
    xor ax,ax
    int 16h
    and al,0DFh ;6=0110  4=0100   1101=D
    cmp al,"Y"
    je  short @@Restart
    cmp al,"N"
    je  short @@ImmExit
    mov dx,offset Text1
    mov ah,09h
    int 21h
    @@ImmExit:
    ret
    
    @@Restart:
    jmp far 0FFFFh:0000h
    
    END START
    

    Anm: Habe es nochmal in Windows versucht und es funktioniert leider nicht in der Windows-Konsole.



  • ich hab in meinem Buch nachgeguckt, es soll angeblich mit int 0x90 gehen



  • Also eine Bios Funktion scheint das nicht zu sein 😕
    Das mein jedenfalls mr. Brown dazu:
    *
    Int 90 - IBM ROM BASIC - used while in interpreter
    Int 90 - APL*PLUS/PC - USED BY PORT 10 PRINTER DRIVER
    *



  • oh schon wieder vertippt 0x19

    (laut "Programmiersprache Assembler - Eine strukturierte Einführung")

    scheiss fipp tehler 😉



  • Habe es gerade noch im Konsolenforum gelesen... 😉
    int 19h loest einen reboot von einem bestimmten Laufwerk aus, so weit ich weiss wird der PC davon nicht vollstaendig neu gestartet, sondern einfach der Bootsektor neu eingelesen und gestartet.
    Der Speicher wird auch net aufgeraeumt, also ich glaube diese Methode ist nicht unbedingt zum neu starten eines OS geeignet... 😃



  • kleine frage

    wo liget denn da das problem. ob der speicher nun aufgeräumt ist oder nicht. muste halt im deinem bootsektor selber aufräumen ( interrupte deaktivieren und die interupt vektortabelle selber plattmachen oder so einrichten wie du sie haben willst, dann kann dier keiner dazwischen funken.

    gruss termite



  • Sicher. In einem Bootsektorprogramm mit dem int 19h neu zu starten sollte eigentlich kein Problem sein, aber *aufs Topic deut* wir reden hier von DOS, das womoeglich auch noch im V86Modus laeuft... Ist auf jeden Fall nicht die sicherste Methode. 🙄



  • morgen

    ich kenn mich zwar nicht genau aus mit dem bootvorgang beim pc aber das geht doch ungefähr so.

    - prozessor wird mittels reset gestopt oder so
    - bios wird in ram eingeblendet
    - prozessor fängt an zu arbeiten
    - get an eine genau bestimmbare adresse und fängt von dort an code auszuführen ( das bios )
    - nach initallisierung der hw erfolgt das auslösen des int 19h ( oder so; siehe hierzu ASM faq bei den links os-development )
    - dann wird der bootsector in den arbeitsspeicher kopiert ( adresse entfallen )
    - und wird dann von dort aus ausgeführt.

    1. möglichkeit war ja nur das laden dies bootsectors zu wiederholen
    2. möglichkeit ( bin mir nicht sicher ob das geht ) denn startpunkt des bios noch mal anspringen. ich weis nicht ob das bios immer im arbeitsspeicher ingeblendet wird, oder ob das nach getaner arbeit wieder ausgeblendet wird ( mit einblenden mein ich, die addresierten speicherzelen liegen nicht im arbeitsspeicher sondern im flasch des bioses. irgend ein externer baustein schaltet von ram auf bios flasch um wenn die entsprechenden adressen anliegen. )

    3. möglichkeit irdendwie die resetleitung schalten entweder durch irgend einen hw baustein oder durch setzen von nem flag irgendwo in der cpu (wobei ich bezweifel das das irgendwie geht)

    gruss termite



  • Jup. Die vorgaenge beim Booten sollten ungefaehr so ablaufen...

    Die erste Moeglichkeit wird beim Aufruf des int 19h ausgefuehrt, richtig.

    Das 2. sollte eigentlich passieren, wenn man im Real Mode nach FFFF:0000 springt. Jedenfalls loest das einen kompletten neustart aus. (also dieser nette Bios screen wird noch einmal angezeigt, Speicher getestet usw.)

    zu 3: 😕 KA. Weiss net, was genau zB. passiert, wenn man auf die Reset Taste haemmert... Ich habe durch uebermaessig often Gebrauch in kurzen Zeitintervallen aber schonmal ein 64MB Speichermodul uebern Jordan geschickt 😃


Anmelden zum Antworten