Seltsames PMode Problem
-
Hi,
ich hab jetzt aus einem PMode Tutorial folgenden Code zum initalisieren des PMode geschrieben :
GDT dw 0x0000 GDT_ADD dd 0x00000000 times 2048-($-$$) db 0 DSTART: ; Dummy Descriptor dw 0x0000 dw 0x0000 dw 0x0000 dw 0x0000 ;------- ; Das Codesegment dw 0xFFFF dw 0x0000 db 0x02 db 10011011b db 11001111b db 0x00 ;---------------- ; Das Datensegment dw 0xFFFF dw 0x0000 db 0x02 db 10010011b db 11001111b db 0x00 ;---------------- ; Der Videoram dw 0x0FA0 dw 0x8000 dw 0x0B db 10010011b db 01000000b db 0x00 ;---------------- ; Das Stacksegment dw 0x837F dw 0xc800 db 0x07 db 10010011b db 01000000b db 0x00 ;---------------- GDTSIZE dw $-DSTART ;--------------------------------------------------------------------------------------- ; ; so Daten fertig :) ; start: ; setzt einen andern Videomodus ;) mov ah, 00h mov al, 02h int 10h ; zeigt OSINFO an mov si, OSINFO call message mov si, TEST386 call message call i386_test cmp ax, 0x0001 je no_386 mov si, OK call message mov si, PMODEI call message call enableA20 cmp eax, -1 je hang ; setzt die GDT mov word [ GDT ], GDTSIZE mov eax, ds and eax, 0xFFFF shl eax, 4 add eax, 2048 mov dword [ GDT_ADD ], eax LGDT [ GDT ] cli ; Interupts aus :) mov eax, cr0 or eax, 1 mov ebx, eax and ebx, 0x80000000 cmp ebx, 0x80000000 jne init_p call pageing_off init_p: mov cr0, eax jmp 1000b:0x0000
so jetzt startet er den Kernel:
; ; Datei : init.asm ; (c) 2004 by Johannes Schickel ; Day of creation : 11.2.2004 ; Last change : 11.2.2004 ; bits 32 ; ; Initalisiert alles ; init: ; setzt das Stack segment mov ax, 100000b mov ss, ax mov sp, 0x837F ; setzt den Selector mov ax, 10000b mov ds, ax mov ax, 11000b mov es, ax jmp start ;----------------------------------------------------------------------------------------------------------------------------------------- OK db "[ OK ]",13,10,0 FAILED db "[FAILED]",13,10,0 XPos db 0 YPos db 0 ;----------------------------------------------------------------------------------------------------------------------------------------- ; ; Startet alles :) ; start: ; ; Hängt sicht auf ; hang: jmpg
aber irgendwie immer wenn er ss setzten will bekomm ich ss, ds oder es
setzte startet der PC neu! ( wenn er ss setzen will bekomm ich von Bochs :
load_seg_reg() : no writable segment aber warum? bei den anderen kommt :
load_seg_reg() : valid bit cleared ) Was mache ich falsch?MFG
CrazyLinux
-
hat sich erledigt hab dw beim Grafikdeskriptor geschrieben und net db an einer Stelle
MFG
CrazyLinux