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 - Spiderschwein13

Seiten: [1] 2
1
Lowlevel-Coding / Probleme RM VESA initialisierung
« am: 21. June 2009, 21:16 »
hey Leute,
nach einer langen Pause mach ich jetzt mit meinem Kumpel wieder an unserem kleinen OS weiter...

Zur Zeit sind wir dabei, den VESA Modus über das Bios zu initialisieren (RM)... das ganze machn wir per inline-ASM, allerdings bringt der gcc-compiler folgende Fehlermeldung:

Zitat
C:\DOKUME~1\Familie\LOKALE~1\Temp\ccRwH4rZ.s: Assembler messages:
C:\DOKUME~1\Familie\LOKALE~1\Temp\ccRwH4rZ.s:21: Error: junk `00h' after express
ion

Parameter für gcc
gcc -masm=intel -m32 -ffreestanding -o C:\IUse\tmp\main.o -c main.c  -Werror -nostdinc

Wir entwickeln jetzt unter Windoof, unter Linux kommt aber der selbe Fehler..........

Hier unser Code....
int main(){

//Die folgende Funktion switcht in den RM
asm("cli\n\t"

        "mov     eax,cr0\n\t"
        "and     al,not 1\n\t"
        "mov     cr0,eax\n\t"


        "sti\n\t");

 //Initialisiere VESA



asm("push ax\n\t"
"push bx\n\t"


"mov ax, 4f00h\n\t"  <-------- Die Anweisung macht nen Error :(
"mov bx, 0x7e0\n\t"
"mov es, bx\n\t"
"mov di, 0x0\n\t"
"int 0x10\n\t"

"cmp ax, 0x004f\n\t"
"jne .1\n\t"

"mov bx, 0x7e0\n\t"
"mov es, bx\n\t"
"mov di, 0x0\n\t"
"mov ax, [es:di+4]\n\t"

"mov ax, 0x4f01\n\t"
"mov di, 0x0\n\t"
"mov bx, 0x800\n\t"
"mov es, bx\n\t"
"mov cx, 0x0115\n\t"
"int 0x10\n\t"

"mov ax, 0x4f02\n\t"
"mov bx, 0x4115\n\t"
"int 0x10\n\t"

"cmp ax, 0x004f\n\t"
"je .3\n\t"
".1:\n\t"
".2:\n\t"
"jmp .2\n\t"
".3:\n\t"
"pop bx\n\t"
"pop ax\n\t"
"ret\n\t");
// ".1:\n\t" Dannach kommt eigtl eine Instruktion was er machen soll, wenns schiefgeht ...
       
}
2
OS-Design / Re: TeeJay's FAT12 Bootlader
« am: 12. February 2008, 21:46 »
Hmmm, ja, das müsst ich auch schonmal gesehen haben.
Irgendwie hab ich da aber nicht ganz durchgeblickt, jetzt check ichs..

Aber, hey FreakyPenguin, dein Kernel Bootloader + compiler.sh Packet is ja mal total geil!
Des hat sogar schon nen eingebauten VGA-Modus!
Genau das richtige für mich zum rumbasteln ;-)

Welche Auflösung und Farben hat denn der *g* 320*klein und 8bit oder?
Aber das is mir eigentlich egal ...
Also, ich nehm dein Ding vllt als "Basis". Steckt ja unter der "Macht damit, was ihr wollt"-Lizens.
Ich muss mich aber wohl trotzdem erstmal in dieses ganze Segment Zeugs einarbeiten ..
Dann versuch ich wahrscheinlich nen Maustreiber und ein paar Standard C Libs zu integrieren oda so ..
3
OS-Design / TeeJay's FAT12 Bootlader
« am: 12. February 2008, 20:56 »
Hallo,
so langsam hab ich jetz nen kleinen Überblick über die ganzen C Kernel und Protected Mode Tuts & co.
Ich würde nun endlich gern ein Hallo Welt mit einem C Kernel machen.
Dafür ist ja das "C-Kernel starten"-Tut ganz gut geeignet, in dem ein einfacher C-Kernel beschrieben wird.
Um diesen zu starten, brauch ich jetzt aber noch, wenn ich das richtig verstanden habe, eine FAT12 Diskette mit dem TeeJay Bootsector auf die ich den kompilieren "Kernel" als KERNEL.BIN kopieren muss?

Allerdings weiß ich nicht ganz, wie ich diese Diskette (oder besser das Image, hab nämlich kein Diskettenlaufwerk) erstell.
Ich bin so weit gekommen, den TeeJay-Boot-Loader zu einer 512 Byte großen bootsec.bin zu kompilieren und mir ein FAT12 Diskettenimage auf dem die kompilierte kernel.bin schlummert zu erstellen und unter Linux zu mounten.

Wie aber bring ich jetz den Bootloader auf das Diskettenimage? Ich kann ja schlecht die ersten 512 Byte meines Images mit der bootsec.bin überschreiben, denn dann ist ja das ganze FAT System futsch ...
4
OS-Design / Re: Graphische Oberfläche mit GRUB, C und VGA
« am: 11. February 2008, 17:08 »
In der Tat.
Also, ich würd in dem Tutorial als kleinen Tipp ergänzen:
Falls man ein Linux zur Verfügung hat, kann man sich 2 Stunden Zeit und Nerven sparen, indem man dies, anstatt wie der Autor Windows benutzt.

Also, trotzdem Danke an alle, werd jetzt noch schnell versuchen nen Bootloader dran zu pappen und dann lass ich des für heute
5
OS-Design / Re: Graphische Oberfläche mit GRUB, C und VGA
« am: 11. February 2008, 16:52 »
ich starte Linux, vllt hätte ich das gleich machen sollen
6
OS-Design / Re: Graphische Oberfläche mit GRUB, C und VGA
« am: 11. February 2008, 16:45 »
ja ... eben genauso, wie in dem Tutorial,
aber jetzt kommt ja auch noch beim Linken (nicht beim kompilieren!) von kernel32.obj "File Format not recognized".
Edit: Ach, ich hab bei dem Lost-Compiler Zeugs die LD-Exe geändert und jetzt auf die ld.exe, die im Dev-C\bin Verzeichnis liegt zurückgeändert, die gibt die obige Meldung aus, meine andre ld.exe, die ich in des Verzeichnis kopiert hab, wo meine kernel32.asm liegt, sagt des mit der ___main Funktion ...
und objdump mag ja meine kernel32.obj file auch nich (auch not recognized)

Wie gesagt, die kernel32.asm lautet
[Bits 32]
extern _main
global start
global _EnableA20Gate

start:

call _main

STOP:
jmp STOP

;#######################################################################

und ich mich plagt noch so n dummer Windowstrojaner, der die ganze Zeit mit irgendwelchen Meldungen von wegen, mein System sei beschädigt und ich müsste ihn installieren daherkommt ...
7
OS-Design / Re: Graphische Oberfläche mit GRUB, C und VGA
« am: 11. February 2008, 16:34 »
Also mit nem Dump von kernel32.obj wirds grad leida nix mehr :-(
Iwi meint er jetzt nurnoch Fileformat not recognized. Ich hab mal unter C:\compile das Lost Packet da einschließlich MinGW installiert, kann es daran liegen?

Dump vom ckernel:
ckernel.obj:     file format pe-i386

Disassembly of section .text:

00000000 <_main>:
   0: 55                    push   %ebp
   1: 89 e5                mov    %esp,%ebp
   3: e8 00 00 00 00        call   8 <_main+0x8>
   8: 80 3d 00 00 00 00 00 cmpb   $0x0,0x0
   f: b9 00 00 00 00        mov    $0x0,%ecx
  14: ba 00 80 0a 00        mov    $0xa8000,%edx
  19: 74 10                je     2b <_main+0x2b>
  1b: 0f b6 01              movzbl (%ecx),%eax
  1e: 41                    inc    %ecx
  1f: 88 02                mov    %al,(%edx)
  21: 42                    inc    %edx
  22: c6 02 07              movb   $0x7,(%edx)
  25: 42                    inc    %edx
  26: 80 39 00              cmpb   $0x0,(%ecx)
  29: eb ee                jmp    19 <_main+0x19>
  2b: 5d                    pop    %ebp
  2c: 31 c0                xor    %eax,%eax
  2e: c3                    ret   
  2f: 90                    nop   

Ist das dump tool sowas wie ein deassembler?
8
OS-Design / Re: Graphische Oberfläche mit GRUB, C und VGA
« am: 11. February 2008, 15:46 »
ich benutze die gcc.exe aus dem bin Verzeichnis meiner Dev-C Umgebung^^
Die gcc.exe aus dem DJGPPBuchstabenzeugs Zip Packer, die ich nach der Anleitung samt den ganzen Ordnern und Zeugs in das Verzeichnis C:\DJGPP entpackt hab, meldet, dass es keine zulässige Win32 Anwendung sei :-(
Also ich geh jetz mal davon aus, dass der Code von dem Lowlevel Tutorial da eigentlich stimmt und es an meinem C-Compiler (der ja eigentlich keine Fehlermeldung bring) oder an meinem Linker liegt.
Also, ich brauche doch nur den GCC Compiler unter Windows DJGPP, den LN-Linker und den NASMW (oda auch NASM) Assembler.
9
OS-Design / Re: Graphische Oberfläche mit GRUB, C und VGA
« am: 11. February 2008, 15:07 »
Bei Verwendung der -fno-leading-underscore Option kommt der selbe Error.
Eigentlich hab ich ja in meiner Assembler-Datei, die die C-Main Funktion aufruft eh einen Unterstricht (beim Verwenden der Funktion hab ich den natürlich jetz grad entfernt) ...
Also,
den kompletten Code hat ja der liebe Lowlevel-C-Tutorial-Ersteller schon sehr schön http://www.jay-code.de/files/ckernel.zip geuppt.

"Kernel16"
[BITS 16] ;16 Bit Code erstellen
jmp start ;GDT überspringen

NULL_Desc:
dd 0
dd 0

CODE_Desc:
dw 0xFFFF ;Segmentgröße Byte 0/1
dw 0 ;Segmentbasisadresse Byte 0/1
db 0 ;Segmentbasisadresse Byte 2
db 10011010b ;Zugriffsberechtigungen
db 11001111b ;Zusatz + Segmentgröße Bits 16 - 19
db 0 ;Segmentbasisadresse Byte 3


DATA_Desc:
dw 0xFFFF
dw 0
db 0
db 0x92
db 0xCF
db 0

gdt:
Limit dw 0 ;Größe der GDT (wird später eingetragen)
Base dd 0 ;Adresse der GDT (wird später eingetragen)


start:

cli ;Interrupts ausschalten

mov eax, cs ;EAX auf derzeitiges Codesegment setzen
mov ds, ax ;DS auf Codesegment setzen

shl eax, 4 ;EAX mit 16 multiplizieren (Lineare Adresse
;des Codesegments errechnen)
mov [CODE_Desc+2], ax ;Lineare Adresse des Codesegmentes als
mov [DATA_Desc+2], ax ;Startadresse des Code- und Datendeskriptors
shr eax, 16 ;eintragen
mov [CODE_Desc+4], al
mov [DATA_Desc+4], al

mov eax, cs ;Startadresse der GDT errechnen
shl eax, 4
add eax, NULL_Desc

mov [Base], eax ;Startadresse der GDT eintragen
mov [Limit], WORD gdt - NULL_Desc -1 ;Größe der GDT errechnen und eintragen

lgdt [gdt] ;GDT laden

mov eax, cr0 ;In den Protected Mode schalten,
or eax, 1 ;indem Bit 0 des CR0 Registers auf 1
mov cr0, eax ;gesetzt wird

db 0xea ;FAR-JUMP zum Codesegment
dw PMODE
dw 0x8


[BITS 32] ;32 Bit Code erstellen

PMODE:
mov WORD [CODE_Desc+2], 0 ;Code Segmentstartaddresse auf 0 setzen
mov WORD [DATA_Desc+2], 0 ;Daten Segmentstartadresse auf 0 setzen
mov BYTE [CODE_Desc+4], 0 ;Code Segmentstartaddresse auf 0 setzen
mov BYTE [DATA_Desc+4], 0 ;Daten Segmentstartadresse auf 0 setzen

mov eax, 2 ;Selektor für das Datensegment erstellen
shl eax, 3

mov ds, ax ;Daten- Stack- und Extrasegment mit
mov ss, ax ;Datensegmentdeskriptor laden
mov es, ax
mov eax, 0 ;FS und GS mit Null-Deskriptor laden
mov fs, ax
mov gs, ax
mov esp, 0x1FFFFF ;Stack auf unterhalb der 2 MB Grenze setzen

jmp 0x8:0x10000 + PMODE2 ;Sprung in das "neue" Codesegment

PMODE2:
jmp END ;Zum Ende Springen

times 512-($-$$) db 0; ;Da der Linker sich nicht mit ungeraden
;Dateigrößen verträgt, wird diese Datei auf 512
;gepaddet.

END:

Kernel32:
[Bits 32]
extern _main
global start
global _EnableA20Gate

start:

call _main

STOP:
jmp STOP

;#######################################################################
][Bits 32]
extern _main
global start
global _EnableA20Gate

start:

call _main

STOP:
jmp STOP

;#######################################################################

und die Kernel.c:
int main()
{
char *Text = "Welcome to Protected Mode"; 
char *VideoMem = (char*)0xA8000; 
 
while(*Text) 

*VideoMem = *Text; 
*VideoMem++; 
*VideoMem = 7; 
*VideoMem++; 
*Text++; 


return(0);
}


Mein System soll mehr so ein DAU-OS werden, soähnlich wie Windows ;-) KlickiBunti, intuitiv, also wahrscheinlich nix für die meisten von euch, die wissen wollen, was ihr System macht.
Wenn ich tatsächlich irgendwann auf ne Konsole verzichten würde, dann müsste ich die GUI eigentlich von Anfang an ziemlich in den Kernel integrieren, oder? Denn sonst hat man, wenns dumm läuft ja garkeine Eingabemöglichkeit...
10
OS-Design / Re: Graphische Oberfläche mit GRUB, C und VGA
« am: 11. February 2008, 13:32 »
Edit: Seh grad, dass es schon nen Thread mit dem gleichen Problem gibt, aber dort wurde nur festgestellt, dass unter Linux kein Unterstrich vor die Main Funktion gestellt wird! (bin hier unter Windows)
Hi,
hab grad das Tutorial http://lowlevel.brainsware.org/wiki/index.php/C-Kernel_starten
durchgelesen und mir ne Batch-Datei zum kompilieren erstellt.
Beim Linken
( ..\ld -T link.txt -o c32kernel.bin )
mekert er aber folgendes:
ckernel.obj<.text+0x4)=kernel_c: undefined reference to   main'

Weiß jmd woran das liegen könnte? Und das 0x4 zeigt doch auf die Stelle wo der Fehler in der Datei aufgetreten ist, oder? Das is ungefähr da, wo die Funktion int main() definiert wird.
Wie gesagt, das ist der Kernel aus dem C Tutorial.

Wenn ich den kompiliert hab, dacht ich fürn Anfang nehm ich den Windows Bootloader, der sollte ja auch gehn..

Und nochmal zum Thema GUI ;-):
Also, in wiefern hängen denn eigentlich GUI und Kernel zusammen?
Und kann eine GUI eine Konsole ersetzen?

Grüße
Keks
11
OS-Design / Re: Graphische Oberfläche mit GRUB, C und VGA
« am: 08. February 2008, 10:49 »
Hey,
hab jetzt einfach mal nach nem Tutorial gegoogelt und was ziemlich brauchbares, wie ich finde gefunden:
http://brackeen.com/vga
http://www.monstersoft.com/tutorial1/VESA_intro.html

Mir ist nur noch nicht klar, wie ich meiner Dev-C Laufzeitumgebung bzw. dem gcc Compiler die GLibC beibringen soll. Denn das Manual von der is ziemlich lang...
12
OS-Design / Re: Graphische Oberfläche mit GRUB, C und VGA
« am: 07. February 2008, 20:37 »
Achso,
das bedeutet also, ich brauch im PM am besten einen Graphikkartentreiber?
Aber warum steht dann bei Windows immer, wenn er keinen Treiber findet, dass er den Standard-VGA Treiber nutzt? Der VGA Treiber müsste doch immer gleich sein, da es ja um den VGA-Standard geht. Und wie werden Bootanimationen angezeigt? Da wird sich doch das OS schon im PM befinden oder?
Ich dachte mir, wenn ich meine "StartGUI" auf einem Graphikkartenstandard aufbaue, beeinflusst das nicht umbedingt gleich die Stabilität meines Kernels.
13
OS-Design / Graphische Oberfläche mit GRUB, C und VGA
« am: 07. February 2008, 19:32 »
Hallo,
alle sagen immer, dass man um ein OS mit GUI zu basteln min. 2 Jahre und ein Informatikstudium braucht.
Wenn ich mich aber auf vorhandenen Sachen, wie einem Standard VGA Treiber, der LibC und dem Bootloader GRUB aufbauen würde, wäre es doch kein sooo großer Aufwand oder? (Wenn bei irgendeiner bootbaren CD Grafiken, z.B. BMP Datein angezeigt werden, brauchen die doch auch nen Grafikkartentreiber, oder?)
Also, wenn ich mich zunächst auf den Standardmodus beschränke und eine freie C Bibliothek verwende, ist eine einfache GUI doch nicht sooo schwer, oder?
14
OS-Design / Re: Buch zum Einstieg in OS-Programmierung
« am: 06. January 2008, 16:58 »
Stimmt .. aber ich will auch ein neues OS schreiben, damit ich meine GUI konsequenter durchsetzen kann, also nich irgendjmd auf die Idee kommt ein (User-) Programm nur für die Konsole so schreiben.
  Aber ich hab hald leider sehr wenig Durchblick in dem ganzen Gebiet, deshalb würde ich mir in nächster Zeit, wenn es schon kein "OS-Entwicklungs-einstigbuch" gibt, einfach ein Assemblerbuch kaufen, dass aber weniger auf DOS-Programmierung, sondern eher auf Lowlevel eingeht.
  Kann mir da jmd eins empfehlen? (Am besten auch, wie ich später dann Headerdateien von C implementier, bzw. schreib oder abänder)

Gruß
Spiderschwein13
15
OS-Design / Re: Buch zum Einstieg in OS-Programmierung
« am: 06. January 2008, 14:09 »
Stimmt, das mit der Kompatibilität, is sogar total sinnvoll, dann könnte ich noch andre Desktop OSes, wie Ubuntu oda so parallel installieren.
  Dachte mir, vielleicht schau ich mir viel vom Linux Kernel ab, denn:
So gute, effiziente und durchdachte Prozessverwaltung & co. krieg ich nie in ner sinnvollen Zeit hin. Und dann noch die ganzen Treiber .. Dazu habe ich eine Frage:
Sind im aktuellen Linux Kernel schon "Grundtreiber" für nVidia und ATI enthalten? Sodass ich eine schnelle 2D Oberfläche mit geringer Prozessorlast aufbauen könnte?
... die Bash würde ich dann in meinem OS total vernachlässigen, damit möglichst alle Operationen über die Graphische Oberfläche ausgeführt werden können und auch müssen (es soll sozusagen ein DAU System werden, nicht für Server oder ähnliches)

.... Denn wenn ich beispielsweise meine UbuntuCD einleg, dann kommt da ca. 2 sec. Der Kernel wird gelanden und dannach darf ich 5min warten, bis die Oberfläche aufgebaut ist. Kann man das nicht schneller hinkriegen?
16
OS-Design / Re: Buch zum Einstieg in OS-Programmierung
« am: 06. January 2008, 12:48 »
Hallo,
ich hab das mit dem virtuallen Diskettenimage mitlerweile geschafft, hab mir einfach Qemu (mit Win Frontend) besorgt und mein Image wurde erkannt -> anders, als bei VirtualPC.
Grub werde ich wahrscheinlich verwenden, spricht ja eigentlich nichts dagegen, bzw. dafür einen eigenen neuen Bootloader zu programmieren, oder?
17
OS-Design / Re: Buch zum Einstieg in OS-Programmierung
« am: 05. January 2008, 18:55 »
Was willst du gerade überhaupt mit dem Programm erreichen?

Ich wollte mein Image noch mit nem andren Programm als VirtualPC testen
18
OS-Design / Re: Buch zum Einstieg in OS-Programmierung
« am: 05. January 2008, 17:57 »
Dann installier ich jetz mal VMWare
19
OS-Design / Re: Buch zum Einstieg in OS-Programmierung
« am: 05. January 2008, 17:55 »
hmm...du hast diese codezeile ganz am ende des kernels eingefügt?
Jo.
Sonst probier mal 1474048 für 1.44MB...
Funktioniert auch nicht.
Du hast gerechnet 1439,5 * 1024 oda?
.. ich versteh nich, warum des nich funktioniert.
Ihr habt wohl alle ein Diskettenlaufwerk am PC?^

20
OS-Design / Re: Buch zum Einstieg in OS-Programmierung
« am: 05. January 2008, 17:37 »
@noooooooooooooooooooooooooooooos
VDF (http://www.osdev.org/wiki/Virtual_Floppy_Disk) sagt dazu
Failed to mount the Virtual FD  image "%s".
Invalid image file size.

ich hab deine Berechnung ( times 736768-($-$$) db 0) genommen
Seiten: [1] 2

Einloggen