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.


Themen - Azi

Seiten: [1]
1
Hallo, hier bin ich wieder!

Also, ich hab mich dazu entschlossen, den Kernel in C zu programmieren und GRUB als Bootloader zu verwenden. Leider gibt GRUB beim booten immer folgende Meldung aus:

Error 13: Invalid or unsupported format

Der Multiboot header ist vorhanden, auch mbchk sagt, dass alles okay sei.

Hier nun meine Dateien:

[boot.asm]

[Bits 32]
extern _main
global _start

section .text
_mbh:
dd 0x1BADB002
dd 0x00000000
        dd 0xE4524FFE
        dd _mbh
        dd _start
        dd 0x00000000
        dd 0x00000000
        dd _start
        dd 0x00000000
        dd 0x00000050
        dd 0x00000019
        dd 0x00000000
_start:
call _main
_stop:
jmp _stop


[aquanaos_kernel.c]

int main()
{
 char *Text = "Welcome to Protected Mode";
 char *VideoMem = (char*)0xB8000;
 while(*Text)
 {
  *VideoMem = *Text;
  *VideoMem++;
  *VideoMem = 7;
  *VideoMem++;
  *Text++;
 }
 return(0);
}



[link.txt]

OUTPUT_FORMAT("binary")
INPUT(temp/boot.obj temp/aquanaos_kernel.obj)
ENTRY(_start)
SECTIONS
{
  .text  0x10200 : {
    code = .; _code = .; __code = .;
    *(.text)
    . = ALIGN(1);
  }
  .data  : {
    data = .; _data = .; __data = .;
    *(.data)
    . = ALIGN(1);
  }
  .bss  :
  {
    bss = .; _bss = .; __bss = .;
    *(.bss)
    . = ALIGN(1);
  }
  end = .; _end = .; __end = .;
}


Und die Befehle zum erstellen:

nasm -f aout -o temp/boot.obj boot.asm
gcc -ffreestanding -nostdinc -Wall -c -Os -o temp/aquanaos_kernel.obj aquanaos_kernel.c
ld -T link.txt -o temp/kernel.bin


Ich hoffe, ihr könnt mir helfen :(

Azi, #13 und Oberster Tempelwächter :)
2
Das Wiki / Falscher Link beim FAT12 Bootloader
« am: 10. January 2006, 18:51 »
Ich wusste nicht, in welchem Forum das gehört, dieses schien mir am Passensten.

Also, ich wollte euch mal auf den falschen Link hinweisen, klickt man nämlich auf das Tutorial, erscheint eine Seite ( http://lowlevel.brainsware.org/index.php?pagename=tutorials&tutextern=9 ), die auf http://www.jay-code.de/scripts/htmlgenerator.php?page=fat12&directory=tutorials linkt. Das ist aber falsch, der eigentliche Link heißt http://www.jay-code.de/scripts/htmlgenerator.php?page=bootloader&directory=tutorials .
3
Gibt es dafür einen BIOS-Interrupt? Und zwar nur prüfen, nicht warten!
4
Offtopic / Ich glaub, das ist ein Bot oder so: bird734
« am: 02. December 2005, 15:57 »
Ich würd mal aufpassen, die Beiträge sind nur 1-Satz-Zitate und ein englischer Kommentar dazu. Dann hat jeder Beitrag noch einen Titel, was wohl so gut wie keine Person hier machen bzw. den vorgeschriebenen ändern würde ;)
Also entweder soll seine Existenz bewiesen werden, oder er soll sofort gelöscht werden!!!
5
Lowlevel-Coding / Bochs meldet "prefetch: RIP > CS.limit"
« am: 19. November 2005, 19:34 »
Hmm, was heißt das? Ist CS zu klein? Und RIP (War das nicht 'Ruhe in Frieden' :lol:  :lol:  :lol: ?)? Hier mal der Code:

[boot.asm]

;06.11.2005 21:56: Erster Code
;09.11.2005 21:50: Code, der funktioniert
;11.11.2005 21:54: Code, der Kernel laden kann

;---------------------------------------------------------------------------Code

;----------Adresse korregieren
org 07C00h

;----------Daten- und Stapelsegment erzeugen
cli
xor ax, ax
mov ds, ax
mov ax,0100h
mov ss,ax
mov sp,06C00h
sti

;----------Bootlaufwerk speichern
mov [boot],dl

;----------Unsere ersten Ausgaben
mov si,text_boot
call sag
mov si,text_loadkernel
call sag

;----------Laufwerk wird zurückgesetzt
mov ah,00h
mov dl,[boot]
int 013h

;----------Adresse für die Daten zum Einlesen wird gesetzt
mov ax,01000h
mov es,ax
mov bx,00h

;----------Lese Sektoren in den Speicher
mov ah,02h
mov al,01h     ;Anzahl der Sektoren, bei steigender Kernelgröße erhöhen!
mov ch,00h
mov cl,02h
mov dh,00h
mov dl,00h
int 013h

;----------Bereite den Sprung zu den ein gelesenen Daten vor
mov ax,01000h
mov ds,ax
mov es,ax
push ax
mov ax,00h
push ax

;----------DER ALLES ENTSCHEIDENE MOMENT: DER KERNEL WIRD GESTARTET
retf

;----------Wenn er irgendwie nix gemacht hat
call reboot

;---------------------------------------------------------------------------Daten

boot db 0
text_boot db "Bootloader wurde geladen",13,10,0
text_loadkernel db "Kernel wird geladen...",13,10,0



;---------------------------------------------------------------------------Funktionen

;----------sag
sag:
lodsb
or al,al
jz endesag
mov ah,0Eh
mov bx,07h
int 010h
jmp sag

endesag:
ret

;----------Reboot
reboot:
db 0EAh
dw 0000h
dw 0FFFFh
ret

;---------------------------------------------------------------------------Boot-Erlaubnis

;----------Dateigröße
times 512-($-$$)-2 db 0

;----------Bootsignatur
dw 0AA55h



[kernel2.asm]

;11.11.2005 22:54: Erster Boot mit dem Kernel

;---------------------------------------------------------------------------Code

;----------Unsere ersten Ausgaben
mov si,text_load
call sag
mov si,text_leer
call sag
mov si,text_leer
call sag
mov si,text_leer
call sag
mov si,text_os
call sag
mov si,text_copyright
call sag
mov si,text_reboot
call sag
mov si,text_shutdown
call sag

;----------Auswahl
auswahl:
mov si,text_eingabe
call sag
call anykey
cmp al,0Dh
je eingabetaste
push ax
call zeig
jmp auswahl

;----------Enter
eingabetaste:
pop ax
cmp al,072h
je auswahl_reboot
cmp al,073h
je auswahl_shutdown

;----------Neu starten
auswahl_reboot:
call reboot

;----------Shutdown
auswahl_shutdown:
call shutdown

;---------------------------------------------------------------------------Daten

text_leer db "",13,10,0
text_load db "Kernel wurde geladen",13,10,0
text_os db "AquanaSoft OS Codename 'Thaleia'",13,10,0
text_copyright db "Copyright 2005 Alexander S. Azim",13,10,0
text_reboot db "Dr?cken Sie 'R', um den Computer neu zu starten",13,10,0
text_shutdown db "Dr?cken Sie 'S', um den Computer auszuschalten",13,10,0
text_eingabe db "Eingabe: ",10,0

;---------------------------------------------------------------------------Funktionen

;----------sag
sag:
lodsb
or al,al
jz endesag
call zeig
jmp sag

endesag:
ret

;----------zeig
zeig:
mov ah,0Eh
mov bx,07h
int 010h
ret

;----------anykey
anykey:
mov ah,0
int 16h
ret

;----------Reboot
reboot:
db 0EAh
dw 0000h
dw 0FFFFh
ret

;----------Shutdown
shutdown:
mov ax,5301h ;Aktiviere RealMode APM Interface
xor bx,bx
int 15h

mov ax,530eh ;Waehle APM Version
xor bx,bx
mov cx,0102h ;v1.2
int 15h

mov ax,530fh ;Aktiviere APM fuer alle Geraete
mov bx,0001h ;ID 1=Alle Geraete
mov cx,0001h ;1=engage
int 15h

mov ax,5308h ;Aktiviere automatisches APM fuer alle Geraete
mov bx,0001h ;ID 1=Alle Geraete
mov cx,0001h ;1=enable
int 15h

mov ax,5307h ;Setze Geraetezustand
mov bx,0001h ;ID 1=Alle Geraete
mov cx,0003h ;Status 3=Ausgeschaltet
int 15h
ret

;----------Dateigröße anpassen, um genau in den Sektoren zu passen
times 1024-($-$$) db 0

6
Lowlevel-Coding / [Anfänger] Keine Ausgabe
« am: 08. November 2005, 16:47 »
Hab vor ca. einem halben Jahr entschieden, ein eigenes Betriebssystem zu schreiben. Jetzt wollte ich, erstmal zu Testzwecken, eine einfache Meldung ausgeben. Geht aber nicht.

;06.11.2005 21:56
;So, jetzt geht es los.
;Zuerst müssen wir die Adresse korregieren,
;damit wir auch alles an die richtige Stelle laden

org 07C00h

;Jetzt müssen wir unseren Stack anlegen
;Dazu müssen die Interrupts deaktiviert sein

cli
mov ax,0F000h
mov ss,ax
mov sp,0
sti

;So, da sind sie wieder
;Jetzt brauchen wir eine Ausgabe, um zu sehen, ob es gelappt hat

ausgabe db "boot gut",13,10,0

;Die wollen wir natürlich auch Ausgeben

mov si,ausgabe
sag:
lodsb
mov ah,0Eh
mov bx,07h
int 010h
or al,al
jz ende
jmp sag

;So, das wars.
;Jetzt noch eine kleine Endlosschleife

ende:
jmp ende

;Und zu guter letzt muss die Datei ja genau 512 Byte groß sein...

times 512-($-$$)-2 db 0

;...und natürlich die Boot-Signatur haben!

dw 0AA55h

Seiten: [1]

Einloggen