#include "mem.h"

#define BDNZ    BC      16,0,
#define BDNE    BC      0,2,

TEXT    inb(SB), $0
       OR      $ISAMEM, R3
       MOVBZ   (R3), R3
       RETURN

TEXT    insb(SB), $0
       MOVW    v+4(FP), R4
       MOVW    n+8(FP), R5
       MOVW    R5, CTR
       OR      $ISAMEM, R3
       SUB     $1, R4
insb1:
       MOVBZ   (R3), R7
       MOVBU   R7, 1(R4)
       BDNZ    insb1
       RETURN

TEXT    outb(SB), $0
       MOVW    v+4(FP), R4
       OR      $ISAMEM, R3
       EIEIO
       MOVB    R4, (R3)
       RETURN

TEXT    outsb(SB), $0
       MOVW    v+4(FP), R4
       MOVW    n+8(FP), R5
       MOVW    R5, CTR
       OR      $ISAMEM, R3
       SUB     $1, R4
outsb1:
       EIEIO
       MOVBZU  1(R4), R7
       MOVB    R7, (R3)
       BDNZ    outsb1
       RETURN

TEXT    ins(SB), $0
       OR      $ISAMEM, R3
       EIEIO
       MOVHBR  (R3), R3
       RETURN

TEXT    inss(SB), $0
       MOVW    v+4(FP), R4
       MOVW    n+8(FP), R5
       MOVW    R5, CTR
       OR      $ISAMEM, R3
       SUB     $2, R4
inss1:
       EIEIO
       MOVHZ   (R3), R7
       MOVHU   R7, 2(R4)
       BDNZ    inss1
       RETURN

TEXT    outs(SB), $0
       MOVW    v+4(FP), R4
       OR      $ISAMEM, R3
       EIEIO
       MOVHBR  R4, (R3)
       RETURN

TEXT    outss(SB), $0
       MOVW    v+4(FP), R4
       MOVW    n+8(FP), R5
       MOVW    R5, CTR
       OR      $ISAMEM, R3
       SUB     $2, R4
outss1:
       EIEIO
       MOVHZU  2(R4), R7
       MOVH    R7, (R3)
       BDNZ    outss1
       RETURN

TEXT    inl(SB), $0
       OR      $ISAMEM, R3
       EIEIO
       MOVWBR  (R3), R3
       RETURN

TEXT    insl(SB), $0
       MOVW    v+4(FP), R4
       MOVW    n+8(FP), R5
       MOVW    R5, CTR
       OR      $ISAMEM, R3
       SUB     $4, R4
insl1:
       EIEIO
       MOVW    (R3), R7
       MOVWU   R7, 4(R4)
       BDNZ    insl1
       RETURN

TEXT    outl(SB), $0
       MOVW    v+4(FP), R4
       OR      $ISAMEM, R3
       EIEIO
       MOVWBR  R4, (R3)
       RETURN

TEXT    outsl(SB), $0
       MOVW    v+4(FP), R4
       MOVW    n+8(FP), R5
       MOVW    R5, CTR
       OR      $ISAMEM, R3
       SUB     $4, R4
outsl1:
       EIEIO
       MOVWU   4(R4), R7
       MOVW    R7, (R3)
       BDNZ    outsl1
       RETURN