]> pd.if.org Git - zos/blobdiff - ioport.s
ioport assembly routines
[zos] / ioport.s
diff --git a/ioport.s b/ioport.s
new file mode 100644 (file)
index 0000000..7e15f43
--- /dev/null
+++ b/ioport.s
@@ -0,0 +1,88 @@
+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