Files
novaos/kernel/arch/io/io.s

59 lines
1.0 KiB
ArmAsm

global outb
; out b - send a byte to an I/O port
; stack: [esp + 8] the data byte
; [esp + 4] the I/O port
; [esp ] return address
outb:
mov al, [esp + 8]
mov dx, [esp + 4] ; move the address into dx
out dx, al ; send the data to the I/O port
ret ; return to the calling function
global outb_16 ; TODO these are probably wrong, eh, the stack might need more bcs the variables are bigger? im not sure
outb_16:
mov ax, [esp + 8]
mov dx, [esp + 4]
out dx, ax
ret
global outb_32
outb_32:
mov eax, [esp + 8]
mov dx, [esp + 4]
out dx, eax
ret
global inb
; inb - returns a byte from the given I/O porot
; stack: [esp + 4] The address of the I/O port
; [esp ] The return address
inb:
mov dx, [esp + 4] ; move the address of the I/O port to the dx register
in al, dx ; read a byte from the I/O port and store it in the al register
ret ; return the read byte
global inb_16
inb_16:
mov dx, [esp + 4]
in ax, dx
ret
global inb_32
inb_32:
mov dx, [esp + 4]
in eax, dx
ret
global io_wait
io_wait:
mov al, 0x0
out 0x80, al
ret