Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - Limbo

Seiten: [1]
1
Lowlevel-Coding / Frage zu Bochs
« am: 11. March 2005, 12:27 »
Tja, das wird's dann wohl sein :-(

Bin noch auf dem Stand von Win98.

Aber darf ich annehmen das es unter Linux funktioniert ??
Na ja, ich werde es mal testen ...
2
Lowlevel-Coding / Frage zu Bochs
« am: 11. March 2005, 12:03 »
Also mit 'ner bochsrc.txt á la :

megs: 32
romimage: file=BIOS-bochs-latest, address=0xf0000
vgaromimage: VGABIOS-lgpl-latest
floppya: 1_44=a:, status=inserted
boot: a
log: bochsout.txt
ips: 500000

und einer Windows-Startdiskette (oder meinem OS-Image)  bekomme ich wieder den Fehler.

In der Log-Datei steht was von :

Cannot open floppy drive
attempt to read/write sector 1, sectors/track=0 with media not present
Boot from Floppy 0 failed
FATAL: Could not read the boot disk
>>PANIC<< BIOS panic at rombios.c, line 1558

Ich hab' mich mal mit Joachim_Neu kurzgeschlossen, und habe es mit seiner Hilfe und seiner etwas ausführlicheren config-file endlich geschafft :-)

Wenn man in der obigen bochsrc.txt die 2. Zeile durch :

floppya: 1_44="MeinImage.img", status=inserted

ersetzt, dann funzt es aber auch mit dieser Konfiguration. Bochs lädt dann halt das Image von der Festplatte.

Aber vielleicht kann mir jemand noch mal erklären, warum es von der Diskette nicht klappen will (Cannot open floppy drive) ...

Falls noch jemand nach Joachim_Neu's Confg-File sucht :

http://www.lowlevel.brainsware.org/forum/viewtopic.php?t=518
3
Lowlevel-Coding / Frage zu Bochs
« am: 10. March 2005, 10:14 »
;)

Bios Rom Image und VGA Rom Image sind nun in der bochsrc.txt eingetragen. Wenn ich nun die Simulation starte, öffnet sich ein Fenster, Bochs versucht auf die Diskette zuzugreifen, Fenster schließt wieder, Fehlermeldung :

BIOS panic at rombios.c, line 1558

Supi !

Ich denke die bochsrc.txt ist jetzt ok, aber ich füge sie hier noch mal ein :

romimage: file=BIOS-bochs-latest, address=0xf0000
megs: 128
vgaromimage: VGABIOS-elpin-2.40
floppya: 1_44=myos.img, status=inserted
boot: floppy
ips: 1000000
4
Lowlevel-Coding / Frage zu Bochs
« am: 09. March 2005, 07:13 »
Ich bekomme beim Versuch mit Bochs von der Diskette zu booten folgende Fehlermeldung :

[MEM0 ] ROM : System BIOS image undefined.

Auf der Diskette befindet sich Teejay's Bootloader und ein kleiner Kernel.

Wenn ich normal von der Diskette boote (Rechner-Neustart) ist alles O.K.

Brauche ich eigentlich die bochsrc.txt um von Diskette zu booten ??
Ich meine, in Bochs  unter "3. Edit options -> 8. Disk options -> 16. Boot from :" ist doch floppy drive voreingestellt.

Ich hab's auch schon mit einer bochsrc.txt probiert :

floppya: 1_44=a:, status=inserted
boot: floppy

bin mir aber nicht sicher, ob das jetzt so richtig / volllständig ist.
Auf jeden Fall bekomme damit den gleichen Fehler wie oben.

Wie macht ihr es ??
5
Lowlevel-Coding / AMI Bios und Protected Mode geht nicht
« am: 05. August 2004, 23:52 »
Und wie ist es mit dem Lämpchen ?
6
Lowlevel-Coding / AMI Bios und Protected Mode geht nicht
« am: 05. August 2004, 23:04 »
Hi Roshl, vielen Dank soweit !

Das mit den Int's klingt einleuchtend, das mit dem Trennen von 32 Bit und 16 Bit lass ich erstmal lieber noch, ich glaub so weit bin ich noch nicht ...

Aber ein Frage möchte ich noch loswerden :

Wenn Du / Ihr den Code aus dem PM-Tutorial von TeeJay laufen lasst, ist das dann  bei euch auch so, daß das Lämpchen vom Diskettenlaufwerk weiterleuchtet und der Computer dann hängt (Strg-Alt-Entf bringt nichts) ??

Ich vermute, daß der obige Code bzw. der von TeeJay eigentlich auch bei mir funktionert, nur das halt irgendwie kein Zeichen ausgegeben wird und durch das weiterleuchten vom Diskettenlaufwerk es nur den Anschein hat das er 'hängt'.

Also wie sieht das bei euch aus ??
7
Lowlevel-Coding / AMI Bios und Protected Mode geht nicht
« am: 05. August 2004, 19:47 »
Hier noch mal der Code :

[BITS 16]       ; We need 16-bit intructions for Real mode

[ORG 0x7C00]    ; The BIOS loads the boot sector into memory location 0x7C00

        cli
                mov si, msg2
                call putstr     ; Meldung ausgeben
                                ; Disable interrupts, we want to be alone
        xor ax, ax
        mov ds, ax              ; Set DS-register to 0 - used by lgdt
        lgdt [gdt_desc]         ; Load the GDT descriptor
        mov eax, cr0            ; Copy the contents of CR0 into EAX
        or eax, 1               ; Set bit 0
        mov cr0, eax            ; Copy the contents of EAX into CR0
        jmp 08h:clear_pipe      ; Jump to code segment, offset clear_pipe
       
        msg db "TEST",13,10,0
        msg2 db "TEST2",13,10,0
putstr:
        lodsb             ; Byte laden
        or al,al
        jz short putstrd  ; 0-Byte? -> Ende!

        mov ah,0x0E       ; Funktion 0x0E
        mov bx,0x0007     ; Attribut-Byte (wird nicht benötigt)
        int 0x10          ; schreiben
        jmp putstr        ; Nächstes Byte
putstrd:
        retn

[BITS 32]                       ; We now need 32-bit instructions
clear_pipe:
                mov si, msg2
                call putstr     ; Meldung ausgeben
        mov ax, 10h             ; Save data segment identifyer
        mov ds, ax              ; Move a valid data segment into the data segment register
        mov ss, ax              ; Move a valid data segment into the stack segment register
                mov si, msg2
                call putstr     ; Meldung ausgeben
       
        mov esp, 090000h        ; Move the stack pointer to 090000h
                ;mov si, msg2
                ;call putstr     ; Meldung ausgeben
       
        mov byte [ds:0B8000h], 'P'      ; Move the ASCII-code of 'P' into first video memory
                ;mov si, msg2
                ;call putstr             ; Meldung ausgeben
       
        mov byte [ds:0B8001h], 1Bh      ; Assign a color code
                ;mov si, msg2
                ;call putstr             ; Meldung ausgeben
       

hang:
        jmp hang                ; Loop, self-jump
               
gdt:                            ; Address for the GDT

gdt_null:                       ; Null Segment
        dd 0
        dd 0

gdt_code:               ; Code segment, read/execute, nonconforming
        dw 0FFFFh
        dw 0
        db 0
        db 10011010b
        db 11001111b
        db 0

gdt_data:               ; Data segment, read/write, expand down
        dw 0FFFFh
        dw 0
        db 0
        db 10010010b
        db 11001111b
        db 0

gdt_end:                ; Used to calculate the size of the GDT



gdt_desc:                       ; The GDT descriptor
        dw gdt_end - gdt - 1    ; Limit (size)
        dd gdt                  ; Address of the GDT

times 510-($-$$) db 0           ; Fill up the file with zeros

        dw 0AA55h               ; Boot sector identifyer
8
Lowlevel-Coding / AMI Bios und Protected Mode geht nicht
« am: 05. August 2004, 19:27 »
Hast natürlich Recht, AX wird ja in Putstr "verfälscht".

Ich hab jetzt wieder fast alle Meldungen rausgenommen, bis auf hinter cli (nur um zu sehen ob er überhaupt was ausgibt (ja, er tut's !))  und hinter [Bits 32].
Da gibt aber nichts aus ! Innerhalb des 16-Bit-Code konnte ich keine weitere Meldung ausgeben lassen, da er sonst 'nen Reboot macht.

??
9
Lowlevel-Coding / AMI Bios und Protected Mode geht nicht
« am: 05. August 2004, 16:18 »
Hi !

Ich hab jetzt versucht dem Problem auf die Spur kommen ...
Ich hab den Protected Mode Code von obigen Link genommen, ich glaube der ist einfacher zu debuggen (nach Roshl Methode), da nur eine Datei. Also der folgende Code ist ein Bootloader in dem bereits in den PM geschaltet wird :

[BITS 16]       ; We need 16-bit intructions for Real mode

[ORG 0x7C00]    ; The BIOS loads the boot sector into memory location 0x7C00

        cli                     ; Disable interrupts, we want to be alone
                mov si, msg
                call putstr     ; Meldung ausgeben
       
        xor ax, ax
                mov si, msg
                call putstr     ; Meldung ausgeben
       
        mov ds, ax              ; Set DS-register to 0 - used by lgdt
                mov si, msg
                call putstr     ; Meldung ausgeben

        lgdt [gdt_desc]         ; Load the GDT descriptor
                mov si, msg
                call putstr     ; Meldung ausgeben

        mov eax, cr0            ; Copy the contents of CR0 into EAX
                mov si, msg
                call putstr     ; Meldung ausgeben
       
        or eax, 1               ; Set bit 0
                mov si, msg
                call putstr     ; Meldung ausgeben
       
        mov cr0, eax            ; Copy the contents of EAX into CR0
                mov si, msg
                call putstr     ; Meldung ausgeben

        jmp 08h:clear_pipe      ; Jump to code segment, offset clear_pipe
       
        msg db "TEST",13,10,0
        msg2 db "TEST2",13,10,0
putstr:
        lodsb             ; Byte laden
        or al,al
        jz short putstrd  ; 0-Byte? -> Ende!

        mov ah,0x0E       ; Funktion 0x0E
        mov bx,0x0007     ; Attribut-Byte (wird nicht benötigt)
        int 0x10          ; schreiben
        jmp putstr        ; Nächstes Byte
putstrd:
        retn

[BITS 32]                       ; We now need 32-bit instructions
clear_pipe:
        mov ax, 10h             ; Save data segment identifyer
                mov si, msg2
                call putstr     ; Meldung ausgeben
       
        mov ds, ax              ; Move a valid data segment into the data segment register
                mov si, msg2
                call putstr     ; Meldung ausgeben
       
        mov ss, ax              ; Move a valid data segment into the stack segment register
                mov si, msg2
                call putstr     ; Meldung ausgeben
       
        mov esp, 090000h        ; Move the stack pointer to 090000h
                mov si, msg2
                call putstr     ; Meldung ausgeben
       
        mov byte [ds:0B8000h], 'P'      ; Move the ASCII-code of 'P' into first video memory
                mov si, msg2
                call putstr             ; Meldung ausgeben
       
        mov byte [ds:0B8001h], 1Bh      ; Assign a color code
                mov si, msg2
                call putstr             ; Meldung ausgeben
     
hang:
        jmp hang                ; Loop, self-jump
               
gdt:                            ; Address for the GDT

gdt_null:                       ; Null Segment
        dd 0
        dd 0

gdt_code:               ; Code segment, read/execute, nonconforming
        dw 0FFFFh
        dw 0
        db 0
        db 10011010b
        db 11001111b
        db 0

gdt_data:               ; Data segment, read/write, expand down
        dw 0FFFFh
        dw 0
        db 0
        db 10010010b
        db 11001111b
        db 0

gdt_end:                ; Used to calculate the size of the GDT

gdt_desc:                       ; The GDT descriptor
        dw gdt_end - gdt - 1    ; Limit (size)
        dd gdt                  ; Address of the GDT

times 510-($-$$) db 0           ; Fill up the file with zeros

        dw 0AA55h               ; Boot sector identifyer


Wie man sieht, lasse ich nach fast jedem Befehl eine Message ausgeben.
Wenn ich den Code von ner Diskette boote, bekomme ich 2 Meldungen ausgegeben. Nachdem das DS auf 0 gesetzt wird passiert nix mehr. Findet er nun
den String nicht mehr oder hängt er sich hier auf ?
10
Lowlevel-Coding / AMI Bios und Protected Mode geht nicht
« am: 05. August 2004, 15:05 »
Also ich mein Rechner hat AwardBios und bei mir geht's (immer noch) nicht.
Scheint also ein anderes Problem zu sein ...

Ich hab Netz daher mal nach einem anderem Tutorial zum Thema PM usw. gesucht :

http://hem.passagen.se/gregge/index_hires.html

4 Tuturials, u.a.  Bootloader, PM, Ckernel
Ist in "Easy English" geschrieben, das verstehe ich sogar :-)

Allerdings funktionert dieser PM-Code bei mir genauso wenig wie TeeJay's.
Gleiches Problem wie Bassai. Der Ckernel-Code wiederrum funktionert bei mir von dieser Page, auch dort wird in den PM geschaltet.

Ich werde mal Roshl Methode (Debugging ohne Debugger) probieren, wenn mir was auffällt werde ich es hier posten.
11
Lowlevel-Coding / Datendeklaration
« am: 31. July 2004, 01:01 »
Moin :-)

Ich hab da wohl ein kleines Verständnisproblem, aber erstmal der Code (stammt aus der 1. Lowlevel-Ausgabe, Bootloader->Kernel.asm) :

mov ax, 1000h ; Segmentregister updaten
    mov ds, ax
    mov es, ax
       
start:
    mov si, Msg
putstr:
    lodsb             ; Byte laden
    or al,al
    jz short putstrd  ; 0-Byte? -> Ende!

    mov ah,0x0E       ; Funktion 0x0E
    mov bx,0x0007     ; Attribut-Byte (wird nicht benötigt)
    int 0x10          ; schreiben
    jmp putstr        ; Nächstes Byte
putstrd:          
    jmp ende
   
    Msg    db    "Kernel16",13,10,0
       
ende:

Hab's ein wenig gekürzt (kein getkey und reboot)
Mir geht's nur um folgendes. So wie der Code da steht, lässt er sich kompilieren und mit dem Lowlevel-Bootloader starten. Es wird nur "Kernel16", also der String ausgegeben. Jetzt mein Problem : Wenn ich msg vor start: oder kurz dahinter deklariere lässt sich das auch kompilieren, wenn dieser "Kernel" geladen wird erscheint der String aber nicht auf dem Moni !?

Der Kernel wird doch an 1000h geladen und das DS auf diese Adresse gesetzt.
So viel weiß sollten die Daten im Datensegment stehen, und das wäre doch auch
kurz vor / hinter start: der Fall ... ??
12
Lowlevel-Coding / linken geht nicht beim c-kernel tut
« am: 05. July 2004, 23:18 »
Also ich  hab's jetzt mit 0x10000, 0x10200, 0x1200, 0x200 probiert.

Konnte leider kein Erfolgserlebnis verzeichnen :o[
13
Lowlevel-Coding / linken geht nicht beim c-kernel tut
« am: 05. July 2004, 18:11 »
Zitat
TeeJay postete
Vielleicht hast du den Startpunkt nicht richtig gesetzt.

Du muss ja im Linkerscript angeben an welche Adresse gelinkt werden soll.
Das musst du Berücksichtigen, da sonst der Code auf die falschen Daten zugreift.

Dazu hatte ich aber auch was in dem C-Kernel Tutorial geschrieben.
Startpunkt ....   In Link.txt (aus ckernel.zip) steht :  .text 0x200 ...
                                            Im Tutorial steht :  .text 0x10200 ...

Müsste es nicht aber 0x1200 sein ?

Kernel16.bin beginnt doch bei 0x1000 und hat 512 Bytes.
c32kernel.bin soll doch, wenn ich das richtig verstanden hab, direkt hinter kernel16.bin gelinkt werden, also 0x1200 ?

Na ja, ich hab's mit allen drei Werten versucht, bei mir klappts aber auch nicht !
Bootloader funktioniert, dann rebootet er ohne eine Meldung auszugeben.
Weiß vielleicht jemand inzwischen woran es liegt ?
14
Lowlevel-Coding / linken geht nicht beim c-kernel tut
« am: 05. July 2004, 17:59 »
Zitat
TeeJay postete
Vielleicht hast du den Startpunkt nicht richtig gesetzt.

Du muss ja im Linkerscript angeben an welche Adresse gelinkt werden soll.
Das musst du Berücksichtigen, da sonst der Code auf die falschen Daten zugreift.

Dazu hatte ich aber auch was in dem C-Kernel Tutorial geschrieben.
Startpunkt - In Link.txt steht :  .text 0x200 ...
15
Lowlevel-Coding / Bootsector Diskettte Formatieren?
« am: 04. July 2004, 00:50 »
Sorry,

6. Zeile 2. Wort sollte 515 sein (nicht 512) !

(Nachricht editieren geht leider nicht bei mir !?)
16
Lowlevel-Coding / Bootsector Diskettte Formatieren?
« am: 04. July 2004, 00:39 »
Moin !

Ich denke das Problem war (zumindest war es meins) einfach, daß TeeJays Bootloader-Code 515 Byte, und damit um 3 Byte für einen "normalen" Bootloader zu  
groß ist. Lässt sich auch gar nicht kompilieren, wegen Code in letzter Zeile bekommt man den Fehler : Times .... -3 is negative.

Wenn man nun, so wie ich (=Newbie=),  probiert diese 512 vor dem Times-Befehl
auf 512 in der letzten Zeile zu ändern, oder im Bios-Parameter-Block bei den Strings ein paar Leerzeichen zu löschen (im Bootloader-PDF-Dokument sind es nämlich auch ein paar weniger !!), dann lässt sich bootsec.asm zwar kompileren, aber wenn man dann den Bootloader auf die Disk schreibt ist die FAT halt hin, und man bekommt diese Formatierungsaufforderung.

Also, meine Lösung (wahrscheinlich gibts 'ne bessere, hab' hier nur noch keine gefunden ...) :

Einfach den String "File not Found" um 3 Zeichen kürzen.
Bootsec hat dann nach dem kompilieren die richtige Größe von 512 Bytes, dann mit Rawrite oder Hexworks auf die Disk schreiben, dann den Kernel draufkopieren,  
 und feddig.
Seiten: [1]

Einloggen