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 - 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: 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.
Seiten: [1]

Einloggen