User:Superleaf1995/PCI in assembly: Difference between revisions
Jump to navigation
Jump to search
Content deleted Content added
Added the entire code for PCI ReadWord |
m Bot: Replace deprecated source tag with syntaxhighlight |
||
Line 1: | Line 1: | ||
< |
<syntaxhighlight lang="asm"> |
||
; AL = BUS |
; AL = BUS |
||
; BL = SLOT |
; BL = SLOT |
||
Line 66: | Line 66: | ||
.lfunc dd 0 |
.lfunc dd 0 |
||
.tmp dw 0 |
.tmp dw 0 |
||
</syntaxhighlight> |
|||
</source> |
|||
'''WARNING''': Code untested, Ctr+C and Ctr+V at your own risk! |
'''WARNING''': Code untested, Ctr+C and Ctr+V at your own risk! |
Latest revision as of 06:53, 9 June 2024
; AL = BUS
; BL = SLOT
; CL = FUNC
; DL = OFFSET
; Returns AX as TMP
pciConfigReadWord:
mov byte [.off], dl
xor edx, edx
mov byte [.tmp], al
xor eax, eax ; Only leave AL (assume we are using 386+)
mov al, byte [.tmp]
mov dword [.lbus], eax
mov byte [.tmp], bl
xor ebx, ebx
mov bl, byte [.tmp]
mov dword [.lslot], ebx
mov byte [.tmp], cl
xor ecx, ecx
mov cl, byte [.tmp]
mov dword [.lfunc], ecx
; Everything set, now calculate address
xor eax, eax
xor ebx, ebx
xor ecx, ecx
mov ecx, [.lfunc]
mov ebx, [.lslot]
mov eax, [.lbus]
shl eax, 16
shl ebx, 11
shl ecx, 8
mov dl, byte [.off]
and dl, 0FCh
or eax, ebx
or eax, ecx
or eax, edx
mov ebx, 080000000h
or eax, ebx
mov dword [.addr], eax
mov eax, dword [.addr]
out 0CF8h, eax
in eax, 0CFCh
mov cl, [.off]
and cl, 2
shr eax, cl
mov ebx, 8
mul ebx
and ax, 0FFFFh
ret
.off db 0
.addr dd 0
.lbus dd 0
.lslot dd 0
.lfunc dd 0
.tmp dw 0
WARNING: Code untested, Ctr+C and Ctr+V at your own risk!