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

Seiten: [1]
1
Lowlevel-Coding / Re: sofortige reboots nach laden der GDT
« am: 02. October 2009, 07:38 »
Man bin ich schon blöd, irgendwie war ich gestern abend nicht ganz bei mir und hab "word" mit 32 bit und "byte" mit 16 bit gesetzt....

Herrzlichen Dank, ihr habt mich vor einem weiteren Tag debuggen gerettet.
2
Lowlevel-Coding / [solved] sofortige reboots nach laden der GDT
« am: 01. October 2009, 21:29 »
Hi!

Hab ein mittelschweres Problem beim Laden meiner GDT. Ich hab mittlerweile alles mögliche probiert, doch sofort nachdem ich die Segmentregister neu lade wird die CPU resetet (sprich qemu rebootet).

Hier folgt mein (hoffentlich nicht all zu grausamer) C Code:
#include <triplex.h>

#define GDT_SIZE 5

#define GDT_CODESEG 0x0A
#define GDT_DATASEG 0x02
#define GDT_TSS 0x09
#define GDT_PRESENT 0x80
#define GDT_SEGMENT 0x10
 
#define SYS_CODE_SEL 0x08
#define SYS_DATA_SEL 0x10
#define USER_CODE_SEL 0x18
#define USER_DATA_SEL 0x20
#define TSS_SEL 0x28

typedef struct {
uint32_t size;
uint32_t base;
uint16_t base2;
uint16_t access;
uint16_t size2;
uint16_t base3;
} segment_descriptor;

segment_descriptor gdt[GDT_SIZE];


void gdt_set_descriptor(int i, uint64_t size, uint64_t base, uint16_t access, int dpl)
{
gdt[i].size   = size & 0xFFFF;
gdt[i].size2  = ((size >> 16) & 0x0F) | 0xC0;
gdt[i].base   = base & 0xFFFF;
gdt[i].base2  = (base >> 16) & 0xFF;
gdt[i].base3  = ((base >> 24) & 0xFF);
gdt[i].access = access | ((dpl & 3) << 5);
}


void load_gdt()
{

 struct {
uint16_t size;
uint32_t base;
}  __attribute__((packed)) gdt_ptr = {
.size  = GDT_SIZE*8 - 1,
.base  = (uint32_t)gdt,
};


asm("lgdtl %0\n\t"
"ljmpl $0x08, $1f\n\t"
"1:\n\t"
"mov $0x10, %%eax\n\t"
"mov %%eax, %%ds\n\t"
"mov %%eax, %%es\n\t"
"mov %%eax, %%fs\n\t"
"mov %%eax, %%gs\n\t"
"mov %%eax, %%ss\n\t" : : "m" (gdt_ptr) : "eax");

}

void init_gdt(void)
{
gdt_set_descriptor(0, 0, 0, 0, 0);
gdt_set_descriptor(1, 0x000FFFFF, 0x00000000, GDT_SEGMENT | GDT_PRESENT | GDT_CODESEG, 0);
gdt_set_descriptor(2, 0x000FFFFF, 0x00000000, GDT_SEGMENT | GDT_PRESENT | GDT_DATASEG, 0);
gdt_set_descriptor(3, 0x000FFFFF, 0x00000000, GDT_SEGMENT | GDT_PRESENT | GDT_CODESEG, 3);
gdt_set_descriptor(4, 0x000FFFFF, 0x00000000, GDT_SEGMENT | GDT_PRESENT | GDT_DATASEG, 3);

 
    load_gdt();
}

Hoffe irgendjemand sieht den Fehler und kann mir helfen.

Danke

schneida
3
Das Wiki / Re: Neuauflage des Lowlevel Magazins
« am: 16. August 2008, 09:27 »
Ich find es auch besser das Wiki auszubauen, was spricht dafür:

*Man kann es besser Gliedern
*Man kann es als Nachschlage Werk benutzen
*Man kann es leichter Aktualisieren. Wenn man etwas zu einem Thema schreibt, kann man es leichter verändern als wenn das ein Magazin ist. Dort wird nämlich niemand so schnell merken das man noch was ergänzt hat, wenn man es einmal gelesen hat.

Dennoch finde ich wäre ein Art durchgehnder Tutorial Strang auch nicht schlecht. In etwa der Form wie OS-Dev für Einsteiger, aber doch etwas ausfürhlicher.
4
Hallo Leute.

Nachdem mein Speichermanager heute irgendwie nicht richtig wollte und ich ein wenig frustriert war, dachte ich mir ich mach etwas lustigeres. Da ich sowieso noch im Real-Mode agiere, dachte ich, schau ich mir mal die Bios-Interrupts ein wenig naeher an. Dabei stiess ich auf Interrupts zum zeichnen, also ran an ein kleines Zeichendemo.

Gesagt getan, nach ein paar Erkundigungen im Netz ueber Rastern von Linien, stand eine kurze Zeichensequenz da. Mit ein paar Linien, verschiedenen Farben und diversen Rechtecken.

Ich hau mir das also auf eine Diskette und aktiviere meinen P75 (mein Testrechner). Der brauchte fuer das Demo ca 25 Sekunden Zeichen-Zeit.

Da ich neugierige war, Diskette in alten AMD K6 Rechner ein --> Zeichendemo ca 10 sekunden.

Da ich so erpicht darauf war, auch zu wissen wie schnell mein Core 2 Duo mit 3 Ghz das wohl machen wuerde, startete ich auch hier mein kleines Demo. Satte 5 Minuten brauchte der Super-Rechner fuer die Zeichnungen.

Was glaubt ihr woran die schlechte Zeit liegt? An einer mangelnden Qualitaet der Award Biose oder am 2. Kern? Ich schaetze wohl eher am Bios, da das restliche System ja eigentlich recht flott lauft!

schneida
5
Lowlevel-Coding / Re: Bootsektor schreiben auf FAT12 Disk
« am: 03. June 2008, 20:07 »
Danke für die vielen Antworten!

@FreakyPenguin: Dein Code hat irgendwie nicht funktioniert. Also ich habs mit der dd Variante für Windows ausprobiert und gleich nachdem ich den Jump gespielt eingespielt habe ging es nicht mehr!

Partcopy geht leider auf meiner X64er XP Maschiene nicht (muss mir wohl noch eine Virtuelle 32 bit Varianter erstellen).

Ich glaub aber ich hab jetzt eh schon eine Möglichkeit gefunden. Ich hab mir mit Rawwirte ein Image einer frisch Formatierten Diskette gezogen und mir mit einem HexEditor angesehen. Anschließend den Jump befehl durch meinen eigenen Ersetzt und ab 0x3E gelöscht. Die Diskette lässt sich unter Windows immer noch öffnen, lädt halt jetzt nichts mehr. Wenn ich jetzt noch hinten meinen Bootcode schreibe, dann müsste eigentlich alles gehen!
6
Lowlevel-Coding / Re: Bootsektor schreiben auf FAT12 Disk
« am: 02. June 2008, 10:57 »
Ja aber wie ersetzt ich den Bootsektor? Auf den hab ich ja unter Windows keinen Zugriff.

Ich würde ja gerne Linux verwenden, allerdings kann ich darunter mein System nicht auf die Diskette speichern. Bin zu dumm für dd if=,... of... bs=... count=..
7
Lowlevel-Coding / Re: Bootsektor schreiben auf FAT12 Disk
« am: 01. June 2008, 14:01 »
Sprich also ich mach meinen Bootsektor Fat konform (wie muss ich noch nachschauen) und erstell damit eine *.img --> schreib diese mittels rawwrite auf die Disk und kann anschließend den Kernel dazukopieren.

Klingt bis auf den 1. Teil ja nicht so schwierig.

Danke für die rasche Antwort!
8
Lowlevel-Coding / Bootsektor schreiben auf FAT12 Disk
« am: 01. June 2008, 10:39 »
Hallo!

Nachdem ich mit meinem Triplex OS jetzt schon eine konsole habe und es befehle wie dir, type text.txt und ähnliches versteht, möchte ich meine Diskette  auf der sich der Bootloade befindet mit FAT12 formatieren und anschließend meinen eigenen Bootsektor und Kernel speichern, sodass der Bootloader nicht einfach von der Diskette lesen muss sondern anhand des Dateinamens den Kernel laden kann.

Wie mache ich das?
9
Offtopic / Re: Was hat mehr Zukunft?
« am: 26. April 2008, 15:38 »
Also beides ist Interessant, aber beides ist eine WIRKLICHE Menge arbeit.

Bei Egoshootern musst du allerdings berücksichtigen, dass das selbst mit moderenen Engines nicht so einfach ist. Denk an alle modelle die du erstellen musst, an alle Texturen, Spielmechanik und wenn du nicht nur Multiplayer für LAN machen willst brauchst du auch noch eine vernünftige KI.

Also von daher ist Spieleprogrammierung genause schwer, wenn nicht sogar ein wenig mehr arbeit, als ein kleines OS mit einer Shell zu programmieren.

Wenn es dir nur darum geht am Seriellen Port (oder auch auf USB oder sonstwo) Dinge anzusteuern, dann kannst du dass natürlich auch unter Windows/Linux realisieren.

Probier mal eine Led am parallel Port mithilfe deines eigenen Windows/Linux programmes anzusprechen und wenn dir sowas gefällt, dann kannst du es ja mal mit deinem eigenen OS probieren.
10
OS-Design / Assembler, C/C++, Pascal ??
« am: 23. April 2008, 07:56 »
Hallo!

Also ich schreib jetzt dieses Thema zum zweiten Mal. Beim ersten mal hat es wohl meine Leitung oder das Forum gegesssen.  :roll:

Meine Frage: Welche Sprache bevorzugt ihr für euren Kernel und warum?

Ich hab bisher meinen ersten Kernel samt bootloader in Assembler geschrieben, was auch gar nicht so schwer war wie ich am Anfang dachte. Leider spinnt jetzt der Bootloader (obwohl ich nur Änderungen am Kernel vollzogen hab) und deshalb wollt ich jetzt umsteigen auf Grub. Dieser funktioniert auch allerdings bootet er den Kernel noch nicht richtig.

Ich könnte mir vorstellen, dass ich einen effektiveren Kernel (nicht von der Ausführungsgeschwindigkeit, sondern viel mehr im Verhältnis Code zu daraus Resultierender Leistung) erhalte und viel schnell komplexere Dinge programmieren kann. Mit Assembler muss ich ja wegen jeder Kleinigkeit 10-20 Befehle schreiben und dann hoffen das das funktioniert und außerdem jede Zeile kommentieren (da man sonst so was von schnell den Überblick verliert).
Die meisten Erfahrungen hab ich allerdings bisher unter Windows sowie Linux (Lazarus) mit Pascal gemacht. Deshalb wäre es für mich auch interessant den Kernel in Pascal zu schreiben.

Was bevorzugt ihr?
11
Das Wiki / Re: Ausgabe 10
« am: 22. April 2008, 18:35 »
Also mir hat vorallem die 1. Ausgabe sehr gut gefallen. Aber auch die anderen waren nicht schlecht (hab sie gestern erst alle auf einmal gelesen).

Ich fände es gut, wenn es einen Einheitlichen Aufbau gebe. Außerdem wärs super wenns sich einen Linie durchziehen würde. Sowie Ausgabe 1 der Bootloader samt Kernel Einstieg. Dann sollte es natürlich auch weitergehen (wie auf Interrupts reagieren). Allerdings endet dieser Leitfaden damit schon wieder ein wenig und es wird auf viel kompliziertere Sachen wie Zugriff auf Fat12 eingegangen, was man aber glaub ich am anfang noch gar nicht sosehr benötigt.

Also ich könnte mir vorstellen ein paar News über OSes zu schreiben. Wenn interesse besteht bitte eine PN.
12
Das Wiki / Re: Sinkende Aktivität
« am: 22. April 2008, 18:31 »
Hi!

Naja, hier steht der Nachwuchs!  :-D

Nein, ich hab LowLevel erst gestern entdeckt. Wenn man im Internet sucht findet man schon wie eben erst gesagt meist Beiträge, oh das ist so schwer und und und...

Hab durch euch wirklich einen Anfang gefunden. Gestern Bootloader samt Kernel gemacht. Kann nun schon Text ausgeben. Außerdem hab ich nun eine Funktion zum Eingeben von Text erstellt sowie einen Wechsel in einen anderen Grafikmodus und zeichnen. Das ist schon allerhand, wobei man wirklich sagen muss das ich mich hierbei nicht an eure Tutorials halte wo steht ein Kernel soll nur Speicherverwaltung und sowas machen. Ich möchte einfach mal probieren und dabei hat mir die Seite hier sehr weiter geholfen.

Danke.

Mein Tipp: Macht wirklich mehr Werbung. Sucht euch genau solche Posts im Internet und verlinkt auf diese Seite als Tutorialseite...
Seiten: [1]

Einloggen