Hab mir jetzt DJGPP runtergeladen, selbes Ergebnis. Danach hab ich noch ein wenig geändert, hier und da, und nun tut sich ein neues problem auf: Bochs shreibt in seine Logfile, dass the PMode eingeschaltet ist, aber auch, das irgendwie von der Floppy gelesen wird, und alles angehaltend ist. Dass muss nun noch for dem C-Kernel sein, da die Bildschirmausgabe nix liefert... Das A20 ist es auch nicht, habs mal auskommentiert, das selbe. So hier der Code, das meiste ist einfach von TeeJay's page (is'n bisschen lang, sorry admins):
Kernel16.asm:
[BITS 16]
jmp start
NULL_Desc:
dd 0
dd 0
CODE_Desc:
dw 0xFFFF
dw 0
db 0
db 0x9A
db 0xCF
db 0
DATA_Desc:
dw 0xFFFF
dw 0
db 0
db 0x92
db 0xCF
db 0
gdt:
Limit dw 0
Base dd 0
start:
cli
mov eax, cs
mov ds, ax
shl eax, 4
mov [CODE_Desc+2], ax
mov [DATA_Desc+2], ax
shr eax, 16
mov [CODE_Desc+4], al
mov [DATA_Desc+4], al
mov eax, cs
shl eax, 4
add eax, NULL_Desc
mov [Base], eax
mov [Limit], WORD gdt - NULL_Desc - 1
lgdt [gdt]
mov eax, cr0
or eax, 1
mov cr0, eax
db 0xea
dw PMODE
dw 0x8
[BITS 32]
PMODE:
jmp PMODE
mov word [CODE_Desc+2],0
mov word [DATA_Desc+2],0
mov byte [CODE_Desc+4],0
mov byte [DATA_Desc+4],0
mov eax, 2
shl eax, 3
mov ds, ax
mov es, ax
mov ss, ax
mov eax, 0
mov fs, ax
mov gs, ax
mov esp, 0x1FFFFF
jmp 0x8:0x10000 + PMODE2
PMODE2:
A20:
.1:
in al, 0x64
test al, 00000010b
jnz .1
mov al, 0xD0
out 0x64, al
.2:
in al, 0x64
test al, 00000001b
jz .2
in al, 0x60
or al, 00000010b
push eax
.3:
in al, 0x64
test al, 00000010b
jnz .3
mov al,0xD1
out 0x64, al
.4:
in al, 0x64
test al, 00000010b
jnz .4
pop eax
out 0x60, al
jmp END
times 512-($-$$) db 0
END:
Kernel32.asm:
[BITS 32]
extern _main
global start
start:
call _main
stop:
jmp stop
main.c:
unsigned char *VID_MEM = (unsigned char*)0xB8000;
int main()
{
VID_MEM[0] = 'S';
VID_MEM[1] = 0x1B;
return 0;
}