19-12-2022, Saat: 21:30
(Son Düzenleme: 19-12-2022, Saat: 21:34, Düzenleyen: ekremkocak.)
Bu codu delphide nasıl calıştırırm.. Nasm de obj link olarak calışıyor fakat delphi hata veriyor..
codun orjinali
EXTERN _IDT_RemapIRQPM
EXTERN _IDT_RemapIRQRM
EXTERN _IDT_RestoreIRQs
global BIOS_JumpToRM
BIOS_JumpToRM:
pusha
pushf
; Disable all IRQs
call _IDT_RemapIRQRM
mov al,0xFF
out 0xA1,al
out 0x21,al
mov ax,ss
mov [save_ss],ax ; Save SS
mov eax,esp
mov [save_esp],eax ; Save ESP
mov eax,cr3
mov [save_cr3],eax ; Save CR3
mov eax,cr0
mov [save_cr0],eax ; Save CR0
and eax,0x7FFFFFFF ; Disable PG.
mov cr0,eax
; Store the address of return code to 0x7CFC
mov esi,0x7CFC
mov [esi],dword .ReturnToPM
; Setup 16bit protected mode registers
mov ax,0x30
mov ds,ax
mov es,ax
mov fs,ax
mov gs,ax
jmp 0x28:0x7D00
.ReturnToPM:
; Restore protected-mode registers
mov ax,0x10
mov ds,ax
mov es,ax
mov ax, [save_ss]
mov ss,ax
mov eax,[save_esp]
mov esp,eax
mov eax,[save_cr3]
mov cr3,eax
mov eax,[save_cr0]
mov cr0,eax
; Enable all IRQs
call _IDT_RemapIRQPM
call _IDT_RestoreIRQs
mov al,0x20
out 0xA0,al
out 0x20,al
popf
popa
ret
save_cr0:
dd 0
save_cr3:
dd 0
save_esp:
dd 0
save_ss:
dw 0
Kod: (Select All)
mov [esi],dword @ReturnToPM // <----- HATA VEREN KISM
Kod: (Select All)
procedure JumpToRM(); stdcall;
var
save_ss:Word;
save_esp:Integer;
save_cr3:Integer;
save_cr0:Integer;
begin
asm
pusha
pushf
call _IDT_RemapIRQRM
mov al,$FF
out $A1,al
out $21,al
mov ax,ss
mov [save_ss],ax
mov eax,esp
mov [save_esp],eax
mov eax,cr3
mov [save_cr3],eax
mov eax,cr0
mov [save_cr0],eax
and eax,$7FFFFFFF
mov cr0,eax
mov esi,$7CFC
mov [esi],dword @ReturnToPM // <----- HATA VEREN KISIM
mov ax,$30
mov ds,ax
mov es,ax
mov fs,ax
mov gs,ax
db $EA
dd $7D00, $28
@@ReturnToPM:
mov ax,$10
mov ds,ax
mov es,ax
mov ax, [save_ss]
mov ss,ax
mov eax,[save_esp]
mov esp,eax
mov eax,[save_cr3]
mov cr3,eax
mov eax,[save_cr0]
mov cr0,eax
call _IDT_RemapIRQPM
call _IDT_RestoreIRQs
mov al,$20
out $A0,al
out $20,al
popf
popa
ret
end;
end;
codun orjinali
EXTERN _IDT_RemapIRQPM
EXTERN _IDT_RemapIRQRM
EXTERN _IDT_RestoreIRQs
global BIOS_JumpToRM
BIOS_JumpToRM:
pusha
pushf
; Disable all IRQs
call _IDT_RemapIRQRM
mov al,0xFF
out 0xA1,al
out 0x21,al
mov ax,ss
mov [save_ss],ax ; Save SS
mov eax,esp
mov [save_esp],eax ; Save ESP
mov eax,cr3
mov [save_cr3],eax ; Save CR3
mov eax,cr0
mov [save_cr0],eax ; Save CR0
and eax,0x7FFFFFFF ; Disable PG.
mov cr0,eax
; Store the address of return code to 0x7CFC
mov esi,0x7CFC
mov [esi],dword .ReturnToPM
; Setup 16bit protected mode registers
mov ax,0x30
mov ds,ax
mov es,ax
mov fs,ax
mov gs,ax
jmp 0x28:0x7D00
.ReturnToPM:
; Restore protected-mode registers
mov ax,0x10
mov ds,ax
mov es,ax
mov ax, [save_ss]
mov ss,ax
mov eax,[save_esp]
mov esp,eax
mov eax,[save_cr3]
mov cr3,eax
mov eax,[save_cr0]
mov cr0,eax
; Enable all IRQs
call _IDT_RemapIRQPM
call _IDT_RestoreIRQs
mov al,0x20
out 0xA0,al
out 0x20,al
popf
popa
ret
save_cr0:
dd 0
save_cr3:
dd 0
save_esp:
dd 0
save_ss:
dw 0