..
-
mail ist bei Dir.
-
Echt nur verwirrend...
Ich hab das bin aus der mail jetzt auf 2 anderen Rechnern getestet (AMD Duron) -- ist normal bis zum Ende durchgelaufen.
Zur sicherheit habe ich das ganze dann nochmal durch die Bochs gejagt - hat auch "normal" funktioniert... (mal abgesehen davon, dass statt Text irgendwie nur eine Reihe @-Zeichen ausgegeben wurde- das tut aber eigentlich nichts zur Sache)
Kurz: Keine Ahnung, wie Du den Code dazu bringst, sich von dir immer mit einem Tripple fault zu verabschieden.
Ich kann dieses Phaenomen beim besten Willen nicht rekonstruieren.
-
Nachtrag:
Ich bin jetzt nochmal an einen AMD XP2000+ gekommen, welcher die gleichen Symptome zeigte: Neustart beim Eintritt in PM. Na mal schaun...
-
Jetzt bleibt mir aber langsam der Verstand stehen ...
Ich hoffe, dass Du die Ursache findest.
Danke erstmal für die tolle Unterstützung.
-
Jo, man kann aber auch echt manchmal auf dem Schlauch stehen
Wer haetts gedacht: Die loesung ist mal wieder ziemlich banal. :oAnscheinend setzen diese Neueren BIOS die Segmentregister anders.
Da diese Register im Bootloader nicht initialisiert werden...mov ax,0x0000 mov ds,ax mov es,ax cli mov ss,ax mov sp,0xfffe sti
Das sollte Abhilfe schaffen.
-
Danke, an welcher Stelle genau einzubauen?
-
Danke für den Tipp! Es klappt hervorragend.
call clrscr ; Clear the screen mov ax,0xb800 ; Load gs to point to video memory mov gs,ax ; We intend to display a brown A in real mode mov word [gs:0],0x641 ; display call get_key ; Get_key again,ie display till key is pressed mov bp,pm_mesg ; Set string pointer call print_mesg ; Call print_mesg subroutine call get_key ; Wait till key is pressed call clrscr ; Clear the screen ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; mov ax,0x0000 ; Einschub Anfang mov ds,ax mov es,ax cli mov ss,ax mov sp,0xfffe sti ; Einschub Ende ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; cli ; Clear or disable interrupts lgdt[gdtr] ; Load GDT mov eax,cr0 ; The lsb of cr0 is the protected mode bit or al,0x01 ; Set protected mode bit mov cr0,eax ; Mov modified word to the control register jmp codesel:go_pm
-
Das sti / cli kann man sich selbstverständlich sparen.
... und das weiße A gefällt mir auch nicht, da wollen wir HALLO sehen (gelb auf rot):
... go_pm : mov ax,datasel mov ds,ax ; Initialise ds & es to data segment mov es,ax mov ax,videosel ; Initialise gs to video memory mov gs,ax mov word [gs:0],0x4E48 ; Display H in protected mode (gelb auf rot: 0 100 1 110 <=> blink RGB(Hintergrund) intensity RGB(Vordergrund)) mov word [gs:2],0x4E41 ; Display A mov word [gs:4],0x4E4C ; Display L mov word [gs:6],0x4E4C ; Display L mov word [gs:8],0x4E4F ; Display O spin : jmp spin ; Loop ; Zur Zeit Endlosschleife ...
[ Dieser Beitrag wurde am 09.05.2003 um 17:47 Uhr von Erhard Henkes editiert. ]
-
Ich empfehle zum Abschluss noch, die Initialisierung der SegRegister ganz an den Anfang des Codes zu packen, bevor irgendwelche Speicherzugriffe gemacht werden.
Offensichtlich setzt dein BIOS die Register anders als meines (nur es?), da auf meinem Athlon noch nicht einmal die Schrift (Our OS boot sector loading usw.) ausgegeben wurde.
Schliesslich sollte auch der Stack nicht benutzt werden, bevor man mit Sicherheit sagen kann, was dadurch gerade ueberschrieben wird.um genau zu sein dachte ich dabei so an hier:
begin_boot : mov ax,0x0000 mov ds,ax mov es,ax mov ss,ax mov sp,0xfffe call clrscr ; Clear the screen first mov bp,bootmesg ; Set the string ptr to message location call print_mesg ; Print the message call get_key ; Wait till a key is pressed
[ Dieser Beitrag wurde am 09.05.2003 um 21:13 Uhr von Nobuo T editiert. ]
-
Danke, ist schon eingebaut.
Hast Du eine Ahnung, wie man nun im PM einen Tastaturcontroller einbaut?
Mir fehlt da momentan noch der richtige Link.