Also, ich habe mal wieder (wie sooft) ein Problem: Der PMode funktioniert einwandfrei (noch immer BlueXSevens Code aus dem Pmode-Thread, wenn er was dagegen hat, soll er sich bitte per PM oder einfach hier melden
) doch wenn ich in einen VBE-Modus (0x0100 + LFB = 0x4100) schalte, geht auch das, nur dann geht der Jump in den PMode nimmer.
Hier der Bochs-Error:
und nun der Code:
Absolut nicht schön, aber ich wollte erstmal das es funktioniert bevor ich den Code schöner mache und ihn eventuell in ein Tut einbaue (daher sind auch ALLE Bytes "belabelt" (was für eine Tipp-Arbeit!).
) doch wenn ich in einen VBE-Modus (0x0100 + LFB = 0x4100) schalte, geht auch das, nur dann geht der Jump in den PMode nimmer.Hier der Bochs-Error:
Code: [Auswählen]
00000697755i[VGA ] VBE enabling x 640, y 400, bpp 8, 256000 bytes visible
00000697856p[CPU ] >>PANIC<< jump_protected: task gate.p == 0
und nun der Code:
Code: [Auswählen]
[bits 16]
jmp Start
; ---------------------------------------
; - Global Descriptor Table. -
; ---------------------------------------
Descriptors dw 0x0000
dw 0x0000
db 0x00
db 0x00
db 0x00
db 0x00
dw 0xFFFF
dw 0x0000
db 0x00
db 0x9A
db 0xCF
db 0x00
dw 0xFFFF
dw 0x0000
db 0x00
db 0x92
db 0xCF
db 0x00
GDT dw 23
dd 0
; ---------------------------------------
; - VESA block. -
; ---------------------------------------
VbeSignature db "VBE2"
VbeVersion dw 0x0200
OemStringPtr dd 0x0
Capabilities dd 0x0
VideoModePtr dd 0x0
TotalMemory dw 0x0
OemSoftwareRev dw 0x0
OemVendorNamePtr dd 0x0
OemProductNamePtr dd 0x0
OemProductRevPtr dd 0x0
Reserved times 222 db 0x0
OemData times 256 db 0x0
SixtyFourBytes times 64 db 0x0
; ---------------------------------------
; - ModeInfo block. -
; ---------------------------------------
ModeAttributes dw 0x0
WinAAttributes db 0x0
WinBAttributes db 0x0
WinGranularity dw 0x0
WinSize dw 0x0
WinASegment dw 0x0
WinBSegment dw 0x0
WinFuncPtr dd 0x0
BytesPerScanLine dw 0x0
XResolution dw 0x0
YResolution dw 0x0
XCharSize db 0x0
YCharSize db 0x0
NumberOfPlanes db 0x0
BitsPerPixel db 0x0
NumberOfBanks db 0x0
MemoryModel db 0x0
BankSize db 0x0
NumberOfImagePages db 0x0
Reserved2 db 0x0
RedMaskSize db 0x0
RedFieldPosition db 0x0
GreenMaskSize db 0x0
GreenFieldPosition db 0x0
BlueMaskSize db 0x0
BlueFieldPosition db 0x0
RsvdMaskSize db 0x0
RsvdFieldPosition db 0x0
DirectColorModeInfo db 0x0
PhysBasePtr dd 0x0
Reserved3 dw 0x0, 0x0, 0x0
LinBytesPerScanLine dw 0x0
BnkNumberOfImagePages db 0x0
LinRedMaskSize db 0x0
LinRedFieldPosition db 0x0
LinGreenMaskSize db 0x0
LinGreenFieldPosition db 0x0
LinBlueMaskSize db 0x0
LinBlueFieldPosition db 0x0
LinRsvdMaskSize db 0x0
LinRsvdFieldPosition db 0x0
MaxPixelClock dd 0x0
Reserved4 times 189 db 0x0
Start:
; ---------------------------------------
; - VBE. -
; ---------------------------------------
mov ax, VbeSignature
stosw
mov ax, 0x4F00
int 0x10
cmp al, 0x004F
je .1
.1:
mov ax, SixtyFourBytes
stosw
mov ax, 0x4F02
mov bx, 0x4100 ; # of the Mode.
int 0x10
; ---------------------------------------
; - Protected Mode Start. -
; ---------------------------------------
mov ax, cs
mov ds, ax
cli
xor eax, eax
mov ax, ds
shl eax, 4
add eax, Descriptors
mov dword [GDT+2], eax
lgdt [GDT]
mov eax, cr0
or al, 00000001b
mov cr0, eax
jmp 0x0008:dword 0x10000+ProtectedMode
; =======================================
; = Here starts 32bit protected mode. =
; =======================================
[bits 32]
ProtectedMode:
mov ax, 0x0010
mov ds, ax
mov es, ax
mov ss, ax
mov fs, ax
mov gs, ax
mov esp, 0x1FFFFF
mov edi, 0x000B8000
mov Byte [edi ], 'L'
mov Byte [edi+2], 'O'
mov Byte [edi+4], 'W'
; ---------------------------------------
; - Functions and variables. -
; ---------------------------------------
Absolut nicht schön, aber ich wollte erstmal das es funktioniert bevor ich den Code schöner mache und ihn eventuell in ein Tut einbaue (daher sind auch ALLE Bytes "belabelt" (was für eine Tipp-Arbeit!).

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert

(eh fast das gleiche wie oben):