..



  • 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. :o

    Anscheinend 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.


Anmelden zum Antworten