Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- BITS 16
- %define pci_addr(bus,dev,fun) ((1<<31) + (bus<<16) + (dev<<11) + (fun<<8))
- %define pci_reg(addr,reg) (addr+(reg<<2))
- mov bx, 0xFFFF
- mov sp, bx
- %define eth pci_addr(0,3,0)
- mov eax, pci_reg(eth, 0)
- call inp
- nop ; здесь eax = 0x100e8086, Intel 82540EM Gigabit Ethernet Controller
- mov eax, pci_reg(eth, 5)
- mov ebx, 0xFF00+1 ; отображаем регистры в I/O с базовым адресом IOBASE = 0xFF00
- call outp
- mov eax, pci_reg(eth, 1)
- mov ebx, 3 ; включаем I/O и Memory Mapping
- call outp
- mov dx, 0xFF00
- mov eax, 0x00
- out dx, eax ; IOADDR = 0x00 (Control Register)
- mov dx, 0xFF04
- mov eax, 0xFFFFFFFF
- out dx, eax ; IODATA <- 0xFFFFFFFF (пытаемся включить хоть что-то)
- mov dx, 0xFF00
- mov eax, 0x00
- out dx, eax ; IOADDR = 0x00
- mov dx, 0xFF04
- in eax, dx
- nop ; eax = Control Register = 0x00, почему?
- jmp $
- outp:
- pusha
- mov dx, 0xCF8
- out dx, eax
- mov eax, ebx
- mov dx, 0xCFC
- out dx, eax
- popa
- ret
- inp:
- push dx
- mov dx, 0xCF8
- out dx, eax
- mov dx, 0xCFC
- in eax, dx
- pop dx
- ret
- times 510-($-$$) db 00
- db 0x55, 0xAA
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement