[Stage1] Add IRQ remapping [Stage1] Handle IRQ0 gracefully [Stage1] Add error output functions
50 lines
No EOL
1.2 KiB
NASM
50 lines
No EOL
1.2 KiB
NASM
|
|
section .text
|
|
|
|
; void outb(os_u16 port, os_u8 data);
|
|
global outb
|
|
outb:
|
|
MOV EDX, [ESP + 4] ; load parameter 'port'
|
|
MOV EAX, [ESP + 8] ; load parameter 'data'
|
|
OUT DX, AL ; output byte in AL to port in DX
|
|
RET ; return
|
|
|
|
; void outw(os_u16 port, os_u16 data)
|
|
global outw
|
|
outw:
|
|
MOV EDX, [ESP + 4] ; load parameter 'port'
|
|
MOV EAX, [ESP + 8] ; load parameter 'data'
|
|
OUT DX, AX ; output word in AX to port in DX
|
|
RET ; return
|
|
|
|
; void outd(os_u16 port, os_u32 data)
|
|
global outd
|
|
outd:
|
|
MOV EDX, [ESP + 4] ; load parameter 'port'
|
|
MOV EAX, [ESP + 8] ; load parameter 'data'
|
|
OUT DX, EAX ; output double word in EAX to port in DX
|
|
RET ; return
|
|
|
|
; os_u8 inb(os_u16 port)
|
|
global inb
|
|
inb:
|
|
MOV EDX, [ESP + 4] ; load parameter 'port'
|
|
XOR EAX, EAX ; reset EAX
|
|
IN AL, DX ; read byte from port 'DX'
|
|
RET ; return
|
|
|
|
; os_u16 inw(os_u16 port)
|
|
global inw
|
|
inw:
|
|
MOV EDX, [ESP + 4] ; load parameter 'port'
|
|
XOR EAX, EAX ; reset EAX
|
|
IN AX, DX ; read word from port 'DX'
|
|
RET ; return
|
|
|
|
; os_u32 ind(os_u16 port)
|
|
global ind
|
|
ind:
|
|
MOV EDX, [ESP + 4] ; load parameter 'port'
|
|
XOR EAX, EAX ; reset EAX
|
|
IN EAX, DX ; read double word from port 'DX'
|
|
RET ; return |