1
Lowlevel-Coding / Re: Global Descriptor Table
« am: 17. February 2013, 17:34 »
Keine Ahnung, aber besteht der Schutz nicht trotzdem noch, auch bei flexiblen Sementgrößen?
23. November 2024, 10:28
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.
outb(ataPositions[i][ataRStatus], ataCIdentify);
int j = 0;
for(; j < 128; j++){
uint32_t x = inb(ataPositions[i][ataRData]);
echo("[%d] %d: %d", i, j, x);
}
#define ataRData 0
#define ataRStatus 7
#define ataCIdentify 0xec
int ataPositions[ataSize][ataDeviceSize] = {
{0x1f0, 0x1f1, 0x1f2, 0x1f3, 0x1f4, 0x1f5, 0x1f6, 0x1f7, 0x3f6},
{0x170, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0x177, 0x376},
{0x1e8, 0x1e9, 0x1ea, 0x1eb, 0x1ec, 0x1ed, 0x1ee, 0x1ef, 0x3ee},
{0x168, 0x169, 0x16a, 0x16b, 0x16c, 0x16d, 0x16e, 0x16f, 0x36e}
};
Also - was mache ich falsch? jmp
zu tun?
_start:
// Stack initialisieren
mov $kernel_stack, %esp
call init_gdt
call init_intr
// VESA
mov $0x4f01, %ax
mov $1, %cx
int $0x10
call init_vesa
//protected mode
mov %cr0, %eax
or %eax, 1
mov %eax, %cr0
// C-Code aufrufen
call init
// Falls wir jemals aus init zurueckkommen sollten, sperren wir die Interrupts und
// halten einfach den Prozessor an. (man braucht ihn ja nicht unnötig heißlaufen lassen.)
_stop:
cli
hlt
// Sollte es doch weitergehen, probieren wir erneut die CPU schlafen zu lassen
jmp _stop
Informationen zu einem Grafikmodus: 4F01h
Man durchläuft also die obige Liste der unterstützten Modi und prüft dann mit folgender Funktion, welche Eigenschaften der entsprechende Grafikmodus besitzt:
AX = 4F01h
CX = Nummer des Grafikmodus
mov 0x4f01, %ax
mov 1, %cx
int $0x10 //<- Warum "$"? Anders compilert es nicht...
asm volatile("int $0xa");
oder?