os3/stage1/io.asm
John Stefanelli dad4ff6a34
[Stage1] Complete IDT implementation
[Stage1] Add IRQ remapping
[Stage1] Handle IRQ0 gracefully
[Stage1] Add error output functions
2023-01-18 17:11:28 +01:00

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