--- /dev/null
+global outport8:function
+global outport16:function
+global outport32:function
+global inport8:function
+global inport16:function
+global inport32:function
+global outport_buf8:function
+global outport_buf16:function
+global outport_buf32:function
+global inport_buf8:function
+global inport_buf16:function
+global inport_buf32:function
+
+; rdi = buf len
+; rsi = buffer address
+; rdx = port addr
+
+inport_buf8:
+ mov rcx, rdi
+ cld
+ rep insb
+ ret
+
+inport_buf16:
+ mov rcx, rdi
+ cld
+ rep insw
+ ret
+
+inport_buf32:
+ mov rcx, rdi
+ cld
+ rep insd
+ ret
+
+outport_buf8:
+ mov rcx, rdi
+ cld
+ rep outsb
+ ret
+
+outport_buf16:
+ mov rcx, rdi
+ cld
+ rep outsw
+ ret
+
+outport_buf32:
+ mov rcx, rdi
+ cld
+ rep outsd
+ ret
+
+outport8:
+ mov rdx, rdi
+ mov rax, rsi
+ and rax, 0xff
+ out dx, al
+ ret
+
+outport16:
+ mov rdx, rdi
+ mov rax, rsi
+ and rax, 0xffff
+ out dx, ax
+ ret
+
+outport32:
+ mov rdx, rdi
+ mov rax, rsi
+ and rax, 0xffffffff
+ out dx, eax
+ ret
+
+inport8:
+ mov rdx, rdi
+ in al, dx
+ ret
+
+inport16:
+ mov rdx, rdi
+ in ax, dx
+ ret
+
+inport32:
+ mov rdx, rdi
+ in eax, dx
+ ret