Bootloader, Grafikdateien, Maus und Tastatur



  • Hi,
    ich kann sehr wohl schon programmieren, ist es denn verwärflich mal ein bisschen wa s in richtung OS Programmierung zu unternehemn? Bootloader und asm war eigentlich klar, ich dachte nur ich könnte dann anschließend ein bisschen in c oder c++ weitermachen....konnte ja nicht wissen, dass ich deswegen gleich so niedergemact werde......

    trotzdem danke :xmas1:



  • also zum Thema bootloader google einfach mal.

    Bilder einbinden - schwer - Fang einfach erstmal mit Bmp's an. die sind nicht komprimiert. anschließeng GIF und PCX. jpgs lass erstmal außen vor. der algorithmus für die ist - öhm.. naja.

    Maus und Tastatur kannst Du über das BIOS abfragen.

    Bringt dir allerdings alles nichts, weil dein OS keine Daten bekommt. Ein OS braucht ein Filesystem....

    gibt aber genügend seiten dafür...
    schonmal in die Assembler FAQ geschaut?



  • thx werde ich machen



  • Was hlatet ihr von dem Bootloader, hab ich gestern mal gemacht:

    org 0x7C00
    
    start:
    vli
    mov ax ,0x9000
    mov ss, ax
    mov sp, 0
    sti
    
    mov [bootdriv], dl
    
    call load
    
    mov ax, 0x1000
    mov es, ax
    mov ds, ax
    push ax
    mov ax, 0
    push ax
    retf
    
    bootdriv db 0
    loadmsg db "Loading Operation System...",13,10,0
    
    putstr:
    loadsb
    or al, al
    jz short putstrd
    mov ah,0x0E
    mov bx,0x0007
    int 0x10
    kmp putstr
    pustrd:
    retn
    
    load:
    push ds
    mov ax, 0
    mov dl, [bootdriv]
    int 13h
    pop ds
    jc load
    
    loadl
    mov ax,0x1000
    mov es,ax
    mov bx, 0
    mov ah, 2
    mov al, 5
    mov cx, 2
    mov dx, 0
    int 113h
    jc loadl
    mov si,loadmsg
    call putstr
    retn
    
    times 512-($-$$)-2 db 0
    dw 0AA55h
    


  • Ob er funktioniert, wirst du doch wohl beantworten können. 🙄



  • joh tut er, ich schick dir eine disketten image wenn du es nicht glauben willst! mit nasm übersetzt...



  • Hi.

    Der code da oben wuerde so jedenfalls mit sicherheit nicht mit nasm assembliert werden koennen... uU. waere hier eine Ueberarbeitung des Beitrags angebracht - es haeufen sich die Tippfehler. 😉
    Ansonsten ist der Bootloader fuer die ersten Schritte beim OS-Proggen und zum Rumspielern sicher net schlecht. 🙂

    Sei vielleicht angemerkt, dass mir jetzt an dem Ding einiges net so gefaellt, aber die Hauptsache ist ja schliesslich, dass es bei deinen Versuchen irgendwie funktioniert. :xmas1:



  • Joh,
    sind ein paar Tippfehler drin....habt recht.
    Was gefällt dir denn daran nicht so gut? Ich kann ihn ja noch verbessern, Hauptsache er bootet erstmal, dass is ja das wichtigste an nem Bootloader.



  • Ok, dann erstmal die grundlegenden Sachen, die am Code optimiert werden koennen/sollten:
    1. Wieso rufst du load ueber ein call auf?
    =>Unnoetig. Wenn du hier Struktur haben willst, haette sich vielleicht ein Macro eher angeboten.

    2. Wieso sicherst du beim Drive reset ds auf den Stack?
    BTW: dl brauchst du hier auch nicht extra mit dem Wert aus "[bootdriv]" zu laden, da dieser Wert hier bereits in dl steht. ds und dl werden auch nicht von dieser int 13h-Funktion veraendert.

    3. Wieso schaltest du beim Einrichten des Stacks die Interrupts extra ab?
    So schlau waren die Leute bei Intel nun auch schon, dass ihre CPU von selbst die Interrupts stoppt, wenn jemand am Stack herumspielt: Wenn ss veraendert wird, wird IF geloescht und wird erst nach der folgenden Instruktion (in der man zB. sp setzen koennte 😉 ) automatisch wieder gesetzt.

    4. Es reicht, wenn du "es" in deinem Bootloader nur einmal am Anfang veraenderst. Dort solltest du uebrigens auch gleich ds einen festen Wert zuweisen, damit die Textausgabe sicher klappt. So ist das von PC zu PC ein Gluecksspiel.

    5. Unter dem Label "load1" brauchst du die ganzen Register nicht in jedem Schleifendurchlauf neu zu setzen. Bei einem Fehler wird nur ax veraendert.
    BTW: Du brauchst al und ah hier nicht einzeln zu setzen.
    dl solltest du hier uebrigens nicht einfach mit 0 ueberschreiben, wenn du vorher so viel Wert darauf legst, dl immer auf den Wert von "[bootdriv]" zu setzen. => wirkt leicht inkonsequent. 😉

    6. Das "or al,al" ist vielleicht eher eine Stilfrage, aber theoretisch veraendert diese Operation nicht nur die Flags, sondern auch die getesteten Register, von daher waere hier ein "test al,al" vielleicht besser.

    7. Ein call zu putstr ist hier ebenfalls ueberfluessig, da das Ding wie der uebrige code nur einmal aufgerufen wird. Wenn du mehrere verschiedene Textausgaben planst, macht das erst Sinn.

    Und nun eher zu abstrakten Ueberlegungen:

    So wie das Ding momentan aufgebaut ist, ist dein Bootloader zu zB. vielen AMI-BIOS inkompatibel. Es enthaelt keinen BIOS Parameter Block (BPB - enthaelt Name der Diskette, Name des Dateisystems, grobe verteilung der Sektoren, Format usw.).
    Des weiteren ist das Ding momentan auf gar kein Dateisystem ausgelegt. Bei einem FAT-System muesstest du dir momentan zB. einige Sektoren vor den FAT fuer weitere Teile deines Kernel/Bootloader reservieren, der dann irgendwo auch ein Dateisystem unterstuetzt.

    *viel_getextet* 🙄
    Hoffe, ich habe nichts vergessen. 😃



  • Okay ich arbeite dran..... 🙂 😉
    Aber eins ist mir noch nicht ganz klar, könntest du mir mal ein code-beispiel zu der sache mirt dem fat dateisystem geben? 😕

    thx



  • "Kurzer" Beispielcode fuer Bootloader mit FAT12-Unterstuetzung findest du hier oder in den Asm FAQ unter OS Dev Links. Dort gibt es auch die Microsoft Docu zum FAT-Dateisystem.


Anmelden zum Antworten