Compile the following ISA Option ROM source code using FASM. Inject the ISA Option ROM binary into your bios using cbrom182. Your MCHBAR will be unlocked at bootup unless you have a version of Windows that is locking it.
Code:use16 ; 16bit mode ROM_SIZE_IN_BLOCK = 1 ; 1 means ROM size is 1 block (512 bytes) ROM_SIZE_IN_BYTE = ROM_SIZE_IN_BLOCK * 512 ROMStart: db 0x055, 0x0AA ; ROM Header 55,AA -> Bootable rom db (ROMEnd - ROMStart)/512 ; ROM Size in 512byte jmp MAIN ;<------------ jump to main (Bug Fixed) db 0 ; checksum, to be filled in later times (256)-($-$$) db 0 MAIN: pushfd push eax push ecx push dx mov eax,080000048h ; (G)MCH Base Address Register mov ebx,000000001h ; copy register data for MCHBAR Enable 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 and eax,0FFFFFFF0h ; set data byte to zero or eax,ebx ; increase data by new setting out dx,eax ; send data through port data pop dx pop ecx pop eax popfd retf ; return far to system bios routine times (ROM_SIZE_IN_BYTE-$) db 0 ; use 00h as the padding bytes until we reach the ROM size ; The last byte (512th) will be the patch_byte for the checksum ; patch_byte is calculated and automagically inserted below PREV_CHKSUM = 0 repeat $ load CHKSUM byte from %-1 CHKSUM = (PREV_CHKSUM + CHKSUM) mod 0x100 PREV_CHKSUM = CHKSUM end repeat store byte (0x100 - CHKSUM) at ($-1) ; store the patch_byte ROMEnd:



Reply With Quote

Bookmarks