;Copyright 2019 Benji Dial ;Permission to use, copy, modify, and/or distribute this ;software for any purpose with or without fee is hereby ;granted, provided that the above copyright notice and this ;permission notice appear in all copies. ;THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ;ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL ;IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO ;EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, ;INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER ;RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ;ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ;ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE ;OF THIS SOFTWARE. global send_byte global read_byte send_byte:;void send_byte(uint8_t value, uint8_t port) push ebp mov ebp, esp xor ecx, ecx mov cl, byte [ebp + 12];port test cl, 0xfc jnz .leave shl cl, 1 mov dx, word [ecx + com_ports] or dx, 5 .check_ready: in al, dx test al, 0x20 jz .check_ready and dx, 0xfff8 mov al, byte [ebp + 8];value out dx, al .leave: leave ret read_byte:;uint8_t read_byte(uint8_t port) push ebp mov ebp, esp xor eax, eax xor ecx, ecx mov cl, byte [ebp + 8];port test cl, 0xfc jnz .leave shl cl, 1 mov dx, word [ecx + com_ports] or dx, 5 .check_ready: in al, dx test al, 0x01 jz .check_ready and dx, 0xfff8 in al, dx .leave: leave ret section .rodata com_ports dw 0x03f8, 0x02f8, 0x03e8, 0x02e8