MAIN:
pushfd ; Push Flags Register onto the Stack (use 32)
push eax
push ebx
push dx
call flatmode ; first, set up FS to access all 4G
xor edx,edx ; clear edx
xor eax,eax ; clear edx
mov eax,080000048h ; (G)MCH Base Address Register
mov dx,0CF8h ; set port address
out dx,eax ; send address through the port
mov dx,0CFCh ; set port data
in eax,dx ; fetch data
mov ebx,eax ; save the old value
and eax,0FFFFFFFEh ; set enable bit to zero
or eax,000000001h ; set bit to enable
;or eax,000000000h ; set bit to disable
out dx,eax ; send data through port data
and ebx,0FFFFC000h ; mask off bits 31:14 inclusive
add ebx,250h ; point to the relevant part
mov ax,[fs:ebx] ; fetch data at 250h address
and ax,07FFh ; set Tras data bit to zero
or ax,8800h ; copy data for Tras 17T
mov [fs:ebx],ax ; send data with 17T change
pop dx
pop ebx
pop eax
popfd ; Pop Stack into Eflags Register
retf ; Return Far from Procedure
;----------------------------------------------------------------------
flatmode:
; first, calculate the linear address of GDT
push ds
push fs
xor edx,edx ; clear edx
xor eax,eax ; clear edx
mov dx,ds ; get the data segment
shl edx,4 ; shift it over a bit
add [cs:dword GDT+2],edx ; store as GDT linear base addr
; now load the GDT into the GDTR
lgdt fword ptr cs:GDT ; load GDT base (286-style 24-bit load)
mov bx,8 ;1 * size DESC386 ; point to first descriptor
mov eax,cr0 ; prepare to enter protected mode
or al,1 ; flip the PE bit
cli ; turn off interrupts
mov cr0,eax ; we're now in protected mode
jmp short $+2
mov fs,bx ; load the FS segment register
and al,0FEh ; clear the PE bit again
mov cr0,eax ; back to real mode
jmp short $+2
pop fs
pop ds
sti ; resume handling interrupts
ret ;
;----------------------------------------------------------------------
GDT:
dw 000fh ; limit low
dw GDT ; base lo
db 0 ; base mid
db 0 ; dpltype
db 0 ; lim hi
db 0 ; base hi
; this is the setup for the 4G segment
dw 0ffffh ; limit low
dw 0 ; base lo
db 0 ; base mid
db 092h ; dpltype
db 0cfh ; lim hi
db 0 ; base hi
GDT_END:
Мой прокол - я не ушел во flat-режим. Хотя они там так и не догадались сами, просто пришел наш индонезийский гуру Пинчакко и наставил на путь истинный
С форума по ссылке Санты похоже работающий код.
Мой прокол - я не ушел во flat-режим. Хотя они там так и не догадались сами, просто пришел наш индонезийский гуру Пинчакко и наставил на путь истинный
Cсылка:
rebelshavenforum.com/sis-bin/ultimatebb.cgi?ubb=get_topic;f=52;t=000069
Скопированный код где-то в середине 4-ой страницы