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

Seiten: [1]
1
Lowlevel-Coding / Die IDT will nich so wie ich
« am: 09. June 2004, 16:25 »
moinmoin.
Ich wollte mal eine IDT aus c code heraus anlegen. Der PM läuft bereits und ich hab diesen Code geschrieben (ich habn segment, dass bei 0x00 anfängt)
Erstmal eine struct, die einen Selektor verkörpern soll ;)
struct IDT_desc
{
short  offset0_15;
short selektor;
char unused;
char P_DPL_TYPE;
short offset16_31;
};
Das dürfte soweit eindeutig sein.
dann als nächstes hab ich ein Pointer auf eine solche struktur erstellt und ihn nach 0x800 gucken lassen. Da soll die Tabelle später mal hin

struct IDT_desc IDT = 0x800;

Dann eine Funktion die später als interrupt handler aufgerufen werden soll. Dann noch eine, die den deskriptor einträgt


void testint ()
{
vidmemprint ("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"); //Diese Funktion schreibt den String ins videomommory

__asm__("iret");
};

void set_idt (void)
{
int offset = (int) &testint; //Die Adresse des Handlers in eine Variable kopieren
short value = (offset << 16)>>16; //nur den hinteren Teil der Adresse in value kopieren
IDT[0].offset0_15 = value; //die ersten 15 bit setzen
value = offset >> 16; //nur den vorderen Teil des offsets betrachten
IDT[0].offset16_31 =value;
IDT[0].selektor = 0x08;  //das codesegment ist das erste der GDT
IDT[0].P_DPL_TYPE = 0xAF;
idtset();
}

Die Funktion idtset ist in asm geschrieben und macht folgendes:
_idtset:
max dw 0x7ff  ;255 Slots
dd 0x800 ;Offset
LIDT [max] ;IDT laden
int 0 ;mal den int 0 ausprobieren. Dabei stürzt er ab
ret

Kann mir jemand sagen, was ich falsch mache?
2
Lowlevel-Coding / 3. Ausgabe von Lowlevel Code Corner
« am: 01. June 2004, 12:40 »
Da war mal beschrieben, wie ein APM Powerdown funktioniert. Ich habs auf verschiedenen Systemen ausprobiert und verhältnismäßig selten (vor allem auf neuen systemen) Erfolg gehabt. Aber manchmal hats tatsächlich funktioniert. Also habe ich mich lange über APM informiert und den Fehler gefunden. Man muss die AMP version noch auswählen. Hier der Code der (bei mir jedenfalls) gut funktioniert (AMP v.1.2 benötigt!)(für Realmode. Es gibt auhc ein Interface für den Protected mode einfach mal googeln)
;***********************Written by MCW**********************
Powerdown:
mov ax,5301h ;Aktiviere RealMode APM Interface
xor bx,bx
int 15h

mov ax,530eh ;Waehle APM Version
xor bx,bx
mov ch,01h ;v.:1.x
mov cl,02h    ;v.x.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
3
Lowlevel-Coding / Komisches Problem mit Bootloadern
« am: 31. May 2004, 14:52 »
Ich hab das Problem jetzt endlich gelöst. Das Problem war, dass org 0x7C00.
Jetzt wo ich es durch org 0 ersetzt hab und dann manuelle mit
mov ax ,0x7c00
mov ds,ax
mov es,ax
gemacht habe funktioniert der code wieder
4
Lowlevel-Coding / Komisches Problem mit Bootloadern
« am: 30. May 2004, 23:58 »
So ich hab mal wieder weiter gebastelt und bis jetzt rausgefunden, dass das Problem irgendwie von irgendwas bei der Parameter übergabe zusammenhängt. So langsam nervt mich das Problem schon. Passiert vor allem bei älteren Boards
5
Lowlevel-Coding / Komisches Problem mit Bootloadern
« am: 30. May 2004, 14:33 »
Nö den gibs. Vorher hatte ich nen Bootloader, der einfach den zweiten sektor der diskette ins ram lädt und ausführt. Da gings ja noch
6
Lowlevel-Coding / Komisches Problem mit Bootloadern
« am: 30. May 2004, 14:10 »
Ich benutze jetzt den Bootloader den TeeJay ins Resource Center gestellt hat. Als ich dann das Problem gelöst hatte, dass der vier Bytes zu groß ist hat er dann auch funktioniert. Als kernel benutze ich jetzt wieder einen einfachen realmode kernel, der nur ausgibt, dass er geladen wurde und dann neustartet sobald man eine Taste drückt. Den Kenle hab ich auch mit einem eigenen Bootloader getestet und der funktioniert. Wenn ich jetzt aber TeeJays Bootloader mit FAT12 unterstützung benutze, dann findet er die Kernel.bin auch und lädt sie auch. Sie wird auch gestartet und auf meinem Rechner funktioniert auch alles. Wen ich jetzt die Diskette in meinen anderen (deutlich älteren) P2 rechner tue, dann funktioniert auch ales, nur es wird kein text mehr ausgegeben. dumme sache. Ich bin mir aber sicher, dass der code trotzdem abläuft, da er neustartet, sobald ich eine Taste drücke (Es ist auf beiden Mainboards ein AWARD BIOS). Das selbe passiert unter VM-Ware. Das selbe gilt auch für die Meldung des Bootloaders, dass kernel.bin nicht gefunden wurde wenn sie nich da is.
7
Lowlevel-Coding / Real Mode Adressen -> PMode Adressen
« am: 02. March 2004, 18:20 »
Schau dir mal http://www.fh-zwickau.de/doc/prmo/pmtutor/text/ an. Ist sehr umfangreich. Aber wenn du keine Lust hast dir alles durchzulesen:
Interrupts stehen in der IDT
Segmente in der           GDT
Manipulieren lässt sich das ganze auf verschiedene Weisen. Bevor du in den PM wechselst musst du die beiden Tabellen ja eh anlegen. Ich hab als einfache Lösung es so gemacht, dass der erste Eintrag der GDT auf das Segment der GDT zeigt damit ich sie später einfach manipulieren kann (ist bestimmt eine blöde Lösung aber funzt ;))
Die Adresse funzen im PM etwas anders. Da schreibst du keine Adressen in die Register sondern sogenannte Selektoren, die weiderrum auf Deskriptoren in der GDT bzw. LDT stehen. In diesen Tabellen steht dann die Startadresse des Segments. Das wird dann aber Hardwaremäßig alles gemacht. Und um eine RM Adresse in eine flache Adresse umzuwandeln (wie deu sie im Deskriptor benötigen wirst) musst du einfach folgendes machen:

RM-Adresse:                  Segment:Offset
Physikalische Adresse = Segment*16+Offset
8
Das Wiki / Inhalte für nächstes Magazin
« am: 02. March 2004, 18:11 »
Was über PM wäre wirklich hilfreich. Es gibt kaum vernünftige seiten über PM (wer interesse hat kann ja mal hier gucken. Sehr umfangreich leider auch etwas abstrakt und die Beispiele sind nicht immer grad hilfreich http://www.fh-zwickau.de/doc/prmo/pmtutor/text/) Mit hilfe dieser Seite hab ich meine ersten Erfahrungen mit dem PM gemacht und ich muss sagen ich stoße immer wieder auf neue Probleme. So ist es mir z.B. noch nicht gelungen den Code von den Daten zu trennen. Meine Strings gehen immer hoffnungslos verloren wenn ich ein eigenes DS anlege (bin ich vielleicht zu dumm dazu?). Dazu würd ich mir auch was wünschen.
9
Das Wiki / gute grafik muss weg ?
« am: 01. March 2004, 15:18 »
Es ist meiner Meinung nach auch leider oft richtig, dass bei grafisch guten Spielen das Gameplay zu kurz kommt. Es gibt aber auch Außnahmen (ich finde zum Beispiel UT2004 super und UT2003 hat im Multiplayer eigendlich auch viel Spaß gemacht obwohl ich da das alte UT besser fand)
Ich find aber auch Spiele wie AVP2 einfach genial, obwohl die Grafik bestenfalls mittelmäßig ist. Ich schließ mich euch da an. Gute Grafik ist zwar ganz nett, muss aber nicht sein. Is genauso wie mit Powerpoint Präsentationen. Durch das Aussehen wird der Inhalt kein Stück besser und der Inhalt wird meißtens leider gegenüber dem Inhalt vernachlässigt
10
OS-Design / Memory Management
« am: 29. February 2004, 20:19 »
Mir ging es eigendlich mehr um den Code, der die Pages verwaltet ;).
Naja is ja auch egal. Das mit dem lokalen Speicherraum für alle Prozesse find ich eigendlich auch sinnvoll. Dal ließe sich ja auch leicht über eine LDT machen. Man sollte aber vielleicht darüber nachdenken, eine möglichkeit einzubauen, dass mehrere Threads sich einen Adressraum teilen können (ich glaub das nennt sich forken aber ich bin mir ehrlichgesagt in solchen Sachen nich so sicher)
11
OS-Design / Memory Management
« am: 29. February 2004, 17:54 »
Du sagst ja nur das jedes Programm seinen eigenen Adressraum haben soll. Das is ja auch ganz nett. Aber woher willst du wissen wo im Physikalischen Ram noch speicher frei ist?
12
Das Wiki / Danke und Klasse!
« am: 29. February 2004, 14:50 »
Genial. Die beste Seite, die ich bis jetzt zur OS Programmierung gefunden habe.
13
OS-Design / Memory Management
« am: 29. February 2004, 13:31 »
Irgendwie wurde nich alles oben angezeigt. Also hier der Rest:
genannten Kriterien mal überlegt. Die Problematik mit DMA war mir noch überhaupt nicht bewusst. Da muss ich mir auch mal was überlegen.
14
OS-Design / Memory Management
« am: 29. February 2004, 13:29 »
Ich denke mal, dass dein Betriebssystem Paging verwendet. Wenn nicht kannst du das Wort Page im folgenden auch als Sektor interpretieren. Ich halte auf jeden Fall Bitmaps für am schlechtesten, da man die Bitmap erstmal  durchsuchen muss, bevor man die nächste freie Page im Ram bekommt. Stacks sind meiner Meinung nach schon besser (Ich versteh unter Stack mal, dass die nächste freie Page immer oben drauf liegt). Für Paging sind leider auch Stacks nicht besonders toll, da man möglichst erstmal alles belegt haben will, bevor man anfängt auszulagern. Also sollte man vielleicht einen Stack für freie Pages verwenden und ein Speichermodell das ich gleich noch näher erläutere für Pages die ausgelagert werden können. Das Speichermodell, das die Pages, die ausgelagert werden können, verwaltet muss so funktionieren, dass jederzeit an einer beliebigen Stelle etwas eingefügt werden kann, da manche Pages seltener genutzt werden als andere und somit auch eher ausgelagert werden sollten. Ich bin grad mit der Entwicklung eines Memmory Managements für ein mein Betriebssystem beschäftigt und habe mir die oben
Seiten: [1]

Einloggen