$B


        Linux I/O $B%]!<%H%W%m%0%i%_%s%0(B $B%_%K%O%&%D!<(B

        $BCx\:Y$K4X$7$F$ODL>o$N(B Linux $B$N(B HOWTO COPYRIGHT $B$r$4Mw2<$5$$!#(B

$B$3$N(B $B%O%&%D!<$G$O!"%$%s%F%k$N(B x86 $B%W%m%;%C%5>e$GAv$k%W%m%0%i%`>e$N!"(B
$B%O!<%I%&%(%"(B I/O $B%]!<%H$N%W%m%0%i%_%s%0$H!"(BLinux $B$N%f!<%6%b!<%I$GC;$$;~4V(B
$BBT$A$r$*$3$J$&%W%m%0%i%`!"$J$I$K$D$$$F=R$Y$^$9!#(B

$B;d$OA0$K$bF1$8$h$&$J(B($B$H$F$b>.$5$J(B) IO-Port-mini-HOWTO $B$r=q$-$^$7$?$,!"(B
$B$3$NJ8=q$O$=$NB3JT$G$9!#(B

$B$b$7!"$J$K$+4V0c$$$,$"$C$?$j!"IU$12C$($k$3$H$J$I$"$j$^$7$?$i$<$R(B
$B;d$K%a%$%k$7$F$/$@$5$$!#(B(rjs@spider.compart.fi)...

$BA0$N%P!<%8%g%s(B (Dec 26 1995) $B$+$i$NJQ99E@$O(B:
        * $B%2!<%`%]!<%H$N%W%m%0%i%_%s%0$K4X$9$k>pJs(B
        * C $B0J30$N8@8l(B
        * nanosleep()
        * $B%Z%s%F%#%"%`%W%m%;%C%5$N%?%$%_%s%0(B
        * $B%3!<%G%$%s%0Nc$rDI2C(B
        * $B$?$/$5$s$N>.$5$J=$@5(B
$B$J$I$G$9!#(B




        C $B%W%m%0%i%`$+$i(B I/O $B%]!<%H$r;H$&(B ... $BIaDL$NJ}K!(B

I/O $B%]!<%H$r%"%/%;%9$9$k$?$a$N%k!<%A%s$O(B/usr/include/asm/io.h ($B$^$?$O(B
$B%+!<%M%k$N%=!<%9%Q%C%1!<%8$NCf$N(B linux/include/asm-i386/io.h)$B$KDj5A$5$l$F(B
$B$$$^$9!#I,MW$J%k!<%A%s$O!"$3$NCf$G%$%s%i%$%s%^%/%m$H$7$FDj5A$5$l$F$$$^$9$N$G!"(B
        #include <asm/io.h>
$B$H$9$k$@$1$G==J,$G$7$g$&!#(B
$BFCJL$J%i%$%V%i%j$J$I$OITMW$G$9!#(B

$B$3$l$i$N%k!<%A%s$r;H$&%=!<%9$G$O!"(Bgcc ($B>/$J$/$H$b(B 2.7.2 $B$^$?$O$=$l$h$j$b(B
$BA0$N%P!<%8%g%s(B)$B$r;H$&$H$-$K!"e(B)$B$+!"(B
$B$=$&$G$J$1$l$P(B asm/io.h $B$r%$%s%/%k!<%I$9$kA0$K(B
        #define extern
$B$H$$$&6u$N@k8@$r$*$3$J$C$F$*$/I,MW$,$"$j$^$9!#(B

$B%G%P%C%0$N$?$a$K!"!V(Bgcc -g -O$B!W$r;H$&$3$H$,$G$-$^$9(B($B>/$J$/$H$b:G6a$N(B
gcc$B$G$O(B) $B$,!":GE,2=$5$l$?%3!<%I$G$O%G%P%C%,$,JQ$J5sF0$r<($9$3$H$b(B
$B$"$j$^$9!#$3$N$h$&$J>l9g$K$O!"(BI/O $B%]!<%H%"%/%;%9$r4^$s$@%3!<%I$rFHN)(B
$B$7$?%U%!%$%k$K$7$F$*$$$F!"$=$N%U%!%$%k$N%3%s%Q%$%k$N;~$K$@$1:GE,2=$r(B
$B%*%s$K$9$k$H$$$&J}K!$r;H$&$3$H$b$G$-$^$9!#(B



$B%]!<%H$r%"%/%;%9$9$kA0$K!"$=$N%]!<%H$r%"%/%;%9$9$k5v2D$r%W%m%0%i%`$KM?$((B
$B$J$1$l$P$J$j$^$;$s!#$3$l$K$O!"(Bioperm(2) $B4X?t(B(unistd.h $B$G@k8@$5$l!"%+!<%M%k(B
$B$NCf$GDj5A$5$l$F$$$k(B)$B$r8F$S=P$7$^$9!#(B
$B$3$N4X?t$O%W%m%0%i%`$N:G=i$NJ}$G8F$S=P$9I,MW$,$"$j$^$9!#(B(I/O $B%]!<%H%"%/%;%9$r(B
$B$9$kA0$K(B)
$B$3$N4X?t$N=q<0$O(B ioperm(from, num, turn_on) $B$G$9!#(B
        from $B$O(B $B%"%/%;%9$r5v$9%]!<%H$N:G=i$N%"%I%l%9!#(B
        num $B$O!"(Bfrom $B$+$i$$$/$D$NO"B3%"%I%l%9$N%"%/%;%9$r5v$9$+!#(B
$B$r;XDj$7$^$9!#(B
$BNc$($P!"(Bioperm(0x300, 5, 1) $B$O!"(B0x300 $B$+$i(B 0x304 ($B9g7W$G(B5$B$D$N%]!<%H(B)
$B$KBP$9$k5v2D$r;XDj$7!":G8e$N%Q%i%a!<%?$G$O!"$=$N%]!<%H$KBP$9$k%"%/%;%95v2D$r(B
$BM?$($k$N$+6X;_$9$k$N$+$rO@M}CM(B(true : 1 = $B5v2D$rM?$($k(B, false : 0 = $B5v2D$r(B
$B6X;_$9$k(B)$B$G;XDj$7$^$9!#(B
$BO"B3$7$F$$$J$$%]!<%H$N>l9g$K$O!"J#?t2s(B ioperm() $B$r8F$S=P$7$F!"E,@Z$J5v2D$r(B
$B;XDj$7$^$9!#(B
ioperm() $B$N>\:Y$JJ8K!$K4X$7$F$O(B ioperm(2) $B$N%^%K%e%"%k%Z!<%8$r;2>H$7$F2<$5$$!#(B



ioperm() $B$r8F$S=P$9$K$O!"$=$N%W%m%0%i%`$,(B root $BFC8"$GAv$C$F$$$k$3$H$,(B
$BI,MW$G$9!#$D$^$j!"$=$N%W%m%0%i%`$r%k!<%H%f!<%6$Ge$N%]!<%H$KBP$7$F$O!"(Biopl(2) $B$r(B
$B;H$&I,MW$,$"$j$^$9!#(B(iopl(2) $B$r;H$&$H0lEY$K$9$Y$F$N%]!<%H$KBP$9$k(B
$B%"%/%;%95v2D$rM?$($k$3$H$K$J$j$^$9!#(B)
$B$9$Y$F$N%]!<%H$KBP$7$F%"%/%;%95v2D$rM?$($k$K$O!"%l%Y%k%Q%i%a!<%?$H$7$F(B
$B!V(B3$B!W$r;H$$$^$9!#$D$^$j!"!V(Biopl(3);$B!W$H$$$&4X?t8F$S=P$7$r$7$^$9!#(B
$B$b$A$m$s!"(Biopl() $B$r8F$S=P$9;~$K$O(B root $BFC8"$,I,MW$G$9!#(B



$B$5$F!"l9g$K$O(Binb(port); $B$r8F$S=P$7$^$9!#(B
$B$3$l$OF~NO%]!<%H$+$i$H$C$F$-$?%P%$%H%G!<%?$rJV$7$^$9!#(B

$B%]!<%H$K=PNO$9$k$K$O!"(Boutb(value, port); $B$r8F$S=P$7$^$9!#(B
($B%Q%i%a!<%?$N=gHV$KCm0U$7$F2<$5$$!#(B)($BLuCm(B:$B%"%;%s%V%i$d!"(BMS-DOS $B$N%3%s%Q%$%i(B
$B%i%$%V%i%j$J$I$N>l9g$H$O5U$G$9!#(B) 

$B%]!<%H%"%I%l%9(B x $B$H(B x+1 $B$+$i%o!<%I%G!<%?$rF~NO$9$k>l9g$K$O(B inw(x);
$B$r8F$S=P$7$^$9!#(B($B%"%;%s%V%i$N(BINW $B$H$^$C$?$/F1$8$h$&$K$=$l$>$l$N%]!<%H$+$i(B
1$B%P%$%H$:$DFI$s$G$-$F!"%o!<%I%G!<%?$r9=@.$9$k$o$1$G$9$,(B)
$B$U$?$D$N%]!<%H$K%o!<%I(B(2$B%P%$%H(B)$B$r=PNO$9$k$K$O(B outw(value, x); $B$r;H$$$^$9!#(B

inb_p(), outb_p(), inw_p(), outw_p() $B$H$$$C$?%^%/%m$O!">e$K=R$Y$?$N$H(B
$BF1$8F0:n$r$7$^$9$,!"%]!<%H$K%"%/%;%9$7$?8e$K>/$7$@$1(B($BLs(B1$B%^%$%/%mIC(B)
$B%&%(%$%H$7$^$9!#(B
asm/io.h $B$r%$%s%/%k!<%I$9$kA0$K(B REALLY_SLOW_IO $B$r(B #define $B$9$k$H!"(B
$B$3$N%&%(%$%H;~4V$r(B4$B%^%$%/%mIC$KJQ$($k$3$H$,$G$-$^$9!#(B

$B$3$l$i$N%^%/%m$ODL>o!"(B0x80 $BHVCO$N(B I/O $B%]!<%H$K=PNO$9$k$3$H$G%&%(%$%H$r(B
$Bl9g$K$OJL$NJ}K!$,(B
$B;H$o$l$^$9$,!"$3$l$O$"$^$j@53N$JCY1d$r$*$3$J$&$3$H$,$G$-$J$$$O$:$G$9!#(B)
$B$3$N$h$&$JM}M3$+$i!"(B0x80 $BHVCO$N%]!<%H$KBP$9$k(B ioperm()$B$r@h$Ke$K=R$Y$?DL>o$NJ}K!$h$j$b$*$=$i$/CY$$$G$7$g$&$,!"(B($B%3%s%Q%$%k;~$N(B)
$B:GE,2=$d(B ioperm() $B$,ITMW$G$"$k$H$$$&MxE@$,$"$j$^$9!#(B





        $B3d$j9~$_(B (IRQ) $B$H(B DMA $B%"%/%;%9(B

$B%f!<%6%b!<%I$N%W%m%0%i%`$+$iD>@\$K3d$j9~$_$d(B DMA $B$r;H$&$3$H$O$G$-$^$;$s!#(B
$B$3$l$K$O!"%+!<%M%k%I%i%$%P$r:n@.$9$kI,MW$,$"$j$^$9!#$=$N>\:Y$K$D$$$F$O(B
$B!V(BLinux $B%+!<%M%k%O%C%+!<%:(B $B%,%$%I!W$r!"$^$?$=$NNc$H$7$F$O!"%+!<%M%k$N(B
$B%=!<%9%3!<%I$rFI$s$G2<$5$$!#(B

$B$^$?!"%f!<%6%b!<%I%W%m%0%i%`$NCf$G3d$j9~$_$r6X;_$9$kZ(B
$B$r$9$k$3$H$O$G$-$^$;$s!#$3$l$O!"(BLinux $B$,%^%k%A%?%9%/!&%W%j%(%s%W%F%#%V(B
$B$J%7%9%F%`$@$+$i$G$9!#$"$J$?$N%W%m%;%9$,!"Ls(B20m$BIC$+$i?tIC(B($BHs>o$KIi2Y$N(B
$B9b$$%7%9%F%`$J$I$G(B)$B$KEO$C$F$J$s$i$+$NM}M3$G%9%1%8%e!<%j%s%0BP>]$+$i(B
$B30$5$l$k$3$H$O!"$$$D$G$b$"$jF@$^$9!#(B

$B$7$+$7!"(BI/O $B%]!<%H$r;H$&$[$H$s$I$N%"%W%j%1!<%7%g%s$G$O!"$3$l$O.$5$/$9$k$?$a$K$O!"(Bnice $B$r;H$C$F!"%W%m%;%9$NM%@h=g0L(B
$B$r9b$/$9$k$H$$$&$3$H$b$G$-$^$9!#(B($BLuCm(B: $B%9%i%C%7%s%0$,$*$-$F$$$k$h$&$J>u67(B
$B$G$O(B nice $B$N8z2L$O$[$H$s$I$J$$$H;W$$$^$9$,!"$?$@C1$KIi2Y$,9b$$$h$&$J>l9g(B
($B$D$^$j!"(BCPU $B%j%=!<%9$@$1$,B-$j$J$$!"$H$$$&>u67(B)$B$K$O8z2L$,$"$k$N$+$J!#(B)

Linux $B%+!<%M%k$K%j%"%k%?%$%`5!G=$rDI2C$9$k$H$$$&7W2h$b$"$j$^$9!#(B
$B$3$l$K$D$$$F$O!"(Bhttp://luz.cs.nmt.edu/~rtlinux $B$r8fMw2<$5$$!#(B

$B$5$F!"$b$C$H4JC1$J%?%$%_%s%0$K$D$$$F$*OC$7$^$7$g$&!#?tIC$N%G%#%l%$$,(B
$BM_$7$$>l9g$K$O!"$*$=$i$/(B sleep(3) $B$,$$$$$G$7$g$&!#?t==%_%jIC0J>e$N(B
$B%G%#%l%$(B($B:G>.$N%G%#%l%$$OLs(B20$B%_%jIC$N$h$&$G$9!#(B)$B$N>l9g$K$O(B usleep(3)
$B$,$*A&$a$G$9!#(B

$B$3$l$i$N4X?t$r8F$S=P$9$H!"(BCPU $B$OB>$N%W%m%;%9$K3d$jEv$F$i$l$^$9$N$G!"(B
CPU $B%?%$%`$,L5BL$K$J$k$3$H$O$"$j$^$;$s!#(B
$B>\:Y$K$D$$$F$O(B man $B%Z!<%8$r8fMw2<$5$$!#(B



$BLs(B 20 $B%_%jIC$h$j$b>.$5$$%G%#%l%$$K4X$7$F$O(B($B$*$=$i$/%W%m%;%C%5$d%^%7%s$N(B
$BB.EY!"%7%9%F%`$NIi2Y$K$b0MB8$7$^$9$,(B)$B!">e$K=R$Y$?$h$&$J(B CPU $B$rJ|$7$F$7$^$&(B
$B$H$$$&%"%W%m!<%A$G$O$&$^$/$$$-$^$;$s!#DL>o!"(BLinux $B$N%9%1%8%e!<%i$,$"$J$?$N(B
$B%W%m%;%9$KBP$7$F@)8f$rLa$9A0$K>/$J$/$H$b(B 20 $B%_%jIC$O$+$+$k$+$i$G$9!#(B

$B$3$NM}M3$+$i!">.$5$JCY1d$N>l9g$K$O(B usleep(3) $B$K;XDj$7$?CY1d$h$j$b$$$/$V$s(B
$BD9$$;~4VCY1d$9$k$3$H$K$J$j$^$9!#$^$?!";XDj$9$k%Q%i%a!<%?$N:G>.CM$,(B 20 $B%_%jIC(B
$B$G$"$k$N$b!"$3$l$,M}M3$G$9!#(B

$BC;$$%G%#%l%$(B($B?t==%^%$%/%mIC$+$i(B 20 $B%_%jIC(B)$B$,I,MW$J>l9g$K0lHV4JC1$J(B
$BJ}K!$O!"(B/usr/include/asm/delay.h (linux/include/asm-i386/delay.h)$B$KDj5A(B
$B$5$l$F$$$k(B udelay() $B$r;H$&$H$$$&J}K!$G$9!#(B

udelay() $B$KEO$9%Q%i%a!<%?$O!"2?%^%$%/%mIC%G%#%l%$$9$k$+!"$H$$$&CM(B (unsigned
long)$B$G$9!#%Q%i%a!<%?$O$R$H$D$@$1$G!"JV$jCM$O$"$j$^$;$s!#(B
$B$I$l$/$i$$%G%#%l%$$9$Y$-$+$r7W;;$9$k$?$a$N%*!<%P!<%X%C%I$,$"$k$?$a!"(B
$B;XDj$7$?CM$h$j$b?t%^%$%/%mICM>7W$K%G%#%l%$$7$F$7$^$&2DG=@-$,$"$j$^$9!#(B
($B>\:Y$O(B delay.h $B$r;2>H$N$3$H!#(B)

$B%+!<%M%k0J30$+$i(B udelay() $B$r;H$&$K$O!"(Bunsigned long $B$NJQ?t(B loops_per_sec $B$r(B
$BE,@Z$JCM$K@_Dj$7$F$*$/I,MW$,$"$j$^$9!#(B

$B$3$NCM$r%+!<%M%k$+$i0z$CD%$C$F$/$kJ}K!$O!"(B($B;d$NCN$k8B$j$G$O(B)$B!"(B/proc/cpuinfo
$B$rFI$_$@$7$F!"(BBogoMips $B$NCM$rCN$j!"$3$l$K(B 500000 $B$r>h$8$F!"$3$l$r(B
loops_per_sec $B$NCM$K$9$k$H$$$&J}K!$G$9!#(B($BIT@53N$G$9$1$I!#(B)
($BLuCm(B: Linux 2.0.20 $B$N;d$N4D6-$G(B cat /proc/cpuinfo $B$9$k$H!"(B
        processor       : 0
        cpu             : 586
        model           : 7
        vendor_id       : GenuineIntel
        stepping        : unknown
        fdiv_bug        : no
        hlt_bug         : no
        fpu             : yes
        fpu_exception   : yes
        cpuid           : yes
        wp              : yes
        flags           : fpu vme de pse tsc msr mce cx8
        bogomips        : 40.03
$B$H$J$j$^$9!#(B)



Linux $B%+!<%M%k(B 2.0.x $B%7%j!<%:$K$O!"(Bnanosleep(2) $B$H$$$&?7$7$$%7%9%F%`%3!<%k(B
$B$,DI2C$5$l$^$7$?!#$3$l$r;H$&$H!"$=$N;~4V$K1~$8$F!"%9%j!<%W(B/$B%G%#%l%$$r(B
$B;H$$J,$1$F$/$l$^$9!#8=:_$Nl9g$K$O(B udelay()
$B$r!"$=$l0J>e$N>l9g$K$O%9%j!<%W$9$k$H$$$&$U$&$K$J$C$F$$$k$h$&$G$9!#(B
$B$G$9$+$i!"@:EY$OAjJQ$o$i$:?t%^%$%/%mIC$@$H;W$o$l$^$9$,!"$5$i$K?7$7$$%+!<%M%k(B
$B$G$O2~A1$5$l$k$@$m$&$H;W$$$^$9!#(B

$B;d$O(B nanosleep(2) $B$N%I%-%e%a%s%H$r8+$D$1$k$3$H$,$G$-$^$;$s$G$7$?$,!"(B
/usr/src/linux/kernel/sched.c $B$r8+$k8B$j!"$=$N=q<0(B($B8F$S=P$7J}(B)$B$O(B:
   int nanosleep(struct timespec *rqtp, struct timespec *rmtp);
$B$N$h$&$G$9!#(B

$B$3$3$G!"9=B$BN(B rqtp $B$K$h$C$F!"$I$l$@$1BT$A$?$$$+$r;XDj$7$^$9!#(B
$B$^$?!"$b$7(B rmtp $B$,(B NULL $B0J30$NCM$G!"(Bnanaosleep() $B$,%"%\!<%H$5$l$?>l9g(B
$B$K$O(B(errno $BJQ?t$,(B EINTR $B$K@_Dj$5$l!"JV$jCM$O(B -1 $B$H$J$j(B)$B!";D$j;~4V$,(B
$B9=B$BN(B rmtp $B$NCf$K3JG<$5$l$^$9!#(B
$B%G%#%l%$$,@5>o$K40N;$7$?>l9g$K$O(B 0 $B$,JV$5$l!"$J$s$i$+$NM}M3$G40N;$7$J$+$C$?(B
$B>l9g$K$O(B -1 $B$,JV$5$l$^$9!#(B($B$3$N>l9g$K$O(B errno $B$,E,@Z$JCM$K@_Dj$5$l$^$9!#(B)

$B$5$i$KC;$$%G%#%l%$$,I,MW$J>l9g$K$O!"$$$/$D$+J}K!$,$"$j$^$9!#(B

$B%]!<%H(B 0x80 $B$K=PNO(B($BCM$O$J$s$G$b$$$$$G$9!#(B)$B$9$k$H!"%W%m%;%C%5$No$K;H$o$l$F$$$kJ}K!(B
$B$G$9!#(B(asm/io.h $B$r8+$F2<$5$$!#(B)



$B$=$N%W%m%0%i%`$,Av$k%^%7%s$N%W%m%;%C%5$Nl9g$K$O!"FCDj$N%"%;%s%V%iL?Na$r%O!<%I%3!<%I$9$k$3$H$G!"$b$C$HC;$$%G%#%l%$(B
$B$r$l$NL?Na$G2?%/%m%C%/(B($BFbIt%/%m%C%/(B)$B>CHq$5$l$k$+$r<($7$F(B
$B$$$^$9!#$3$l$K$h$C$F$I$l$/$i$$$N;~4V$r>CHq$9$k$+$rCN$k$3$H$,$G$-$^$9!#(B
$BNc$($P(B 50MHz $B$N%W%m%;%C%5(B (486DX-50 $B$H$+!"(B486DX2-50) $B$N>l9g$K$O(B 1 $B%/%m%C%/$O(B
1/50000000 $BIC$G$9!#(B

Instruction   i386 clock cycles   i486 clock cycles
nop                   3                   1
xchg %ax,%ax          3                   3
or %ax,%ax            2                   1
mov %ax,%ax           2                   1
add %ax,0             2                   1
[$B=PE8(B: Borland Turbo Assembler 3.0 Quick Reference]
($B?=$7Lu$J$$$N$G$9$,!"%Z%s%F%#%"%`%W%m%;%C%5$K$D$$$F$O;d$O$o$+$j$^$;$s!#(B
 $B$*$=$i$/!"(Bi486 $B$K6a$$$H;W$$$^$9!#(B)
(i386 $B$G(B 1 $B%/%m%C%/$NL?Na$O$_$D$1$i$l$^$;$s$G$7$?!#(B)

$B>e$NI=$G!"(Bnop $B$H(B xchg $B$O2?$bI{:nMQ$O$J$$$O$:$G$9!#$=$NB>$NL?Na$O%U%i%0(B
$B%l%8%9%?$rJQ99$9$k2DG=@-$,$"$j$^$9!#$G$b!"(Bgcc $B$O$=$l$r8!=P$7$F$/$l$^$9(B
$B$+$i!"LdBj$K$O$J$i$J$$$O$:$G$9!#(B



$B$3$l$i$r;H$&$K$O!"%W%m%0%i%`$NCf$G(B asm("$BL?Na(B"); $B$H$$$&=q<0$r;H$C$F!"(B
$B>e$NI=$NL?Na$rKd$a9~$_$^$9!#$R$H$D$N(B asm() $BJ8$GJ#?t$NL?Na$rKd$a9~$`(B
$B$K$O!"(Basm("$BL?Na(B; $BL?Na(B; $BL?Na(B"); $B$H$$$&=q<0$r;H$$$^$9!#(B

asm() $BJ8$O!"(Bgcc $B$K$h$C$F!"%$%s%i%$%s%"%;%s%V%i%3!<%I$KJQ49$5$l$k$N$G(B
$B4X?t8F$S=P$7$N%*!<%P!<%X%C%I$O$"$j$^$;$s!#(B

$B$^$?!"%Z%s%F%#%"%`%W%m%;%C%5$G$O!"%j%V!<%H$+$i8=:_$^$G$N7P2a%/%m%C%/(B
$B%5%$%/%k$rCN$k$3$H$,$G$-$^$9!#0J2<$N%3!<%I$G$9(B:

   extern __inline__ unsigned long long int rdtsc()
   {
     unsigned long long int x;
     __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
     return x;
   }

$B$$$:$l$K$;$h!"8=:_$N%$%s%F%k(B x86 $B%"!<%-%F%/%A%c$G$O!"(B1 $B%/%m%C%/%5%$%/%k(B
$B$h$j$bC;$$%G%#%l%$$OIT2DG=$G$9!#(B




        $B9b$$@:EY$N%?%$%_%s%0@)8f(B: $B;~4V$NB,Dj(B

1 $BIC$/$i$$$N@:EY$N;~4V$J$i$P!"(Btime(2) $B$r;H$&$N$,0lHV4JC1$G$7$g$&!#(B
$B$b$C$H@53N$J;~4V$,I,MW$J>l9g$K$O!"(Bgettimeofday(2) $B$r;H$&$H(B $BBgBN!"%^%$%/%mIC(B
$B$N@:EY$,$"$j$^$9!#(B($B$G$b!"A0$NJ}$G=R$Y$?!"%9%1%8%e!<%j%s%0$N$3$H$OK:$l$J$$(B
$B$G$/$@$5$$!#(B)$B%Z%s%F%#%"%`%W%m%;%C%5$N>l9g$K$O!">e$N%3!<%I$r;H$&$H(B 1 $B%/%m%C%/(B
$B%5%$%/%k$N@:EY$,=P$^$9!#(B

$B%W%m%;%9$,!"$"$k;~4V7P2a$7$?8e$K%7%0%J%k$rl9g$K$O!"(Bsetitimer(2)
$B$r;H$$$^$9!#$3$N4X?t$N>\:Y$K$D$$$F$O(B man $B%Z!<%8$r8fMw2<$5$$!#(B




        $B$=$NB>$N%W%m%0%i%_%s%08@8l$K$D$$$F(B

$B0J>e$N@bL@$G$O(B C $B8@8l$KFC2=$7$F=R$Y$^$7$?$,!"(BC++ $B$d(B Objective C $B$G$b(B
$BF1$8$h$&$K$G$-$k$O$:$G$9!#(B
$B%"%;%s%V%i$N>l9g!"(BC $B$N>l9g$HF1MM$K(B ioperm() $B$d(Biopl() $B$r8F$S=P$5$J$1$l$P(B
$B$J$j$^$;$s$,!"$=$N8e$K$OD>@\(B I/O $B%]!<%H$KBP$9$k%j!<%I(B/$B%i%$%HL?Na(B($BLuCm(B:
in, out $BL?Na(B)$B$r;H$&$3$H$,$G$-$^$9!#(B

$B$=$NB>$N8@8l$G!"$b$7%$%s%i%$%s%"%;%s%V%i$d(B C $B$N%3!<%I$rKd$a9~$`$3$H$,(B
$B$G$-$J$$>l9g$K$b$C$H$b4JC1$JJ}K!$O!"I,MW$J(B I/O $B%]!<%H%"%/%;%9$N$?$a$N(B
$B%=!<%9%3!<%I$r(B C $B$G5-=R$7$F%3%s%Q%$%k$7!"%W%m%0%i%`$NB>$NItJ,$H%j%s%/$7$F(B
$B$7$^$&$H$$$&J}K!$G$7$g$&!#(B




        $B$h$/;H$o$l$k%]!<%H(B

$B0J2<$O!"HFMQ(B TTL $BO@M}$N(B I/O $B%]!<%H$K$D$$$F$N%W%m%0%i%_%s%0>pJs$G$9!#(B


$B%Q%i%l%k%]!<%H(B($B%Y!<%9%"%I%l%9(B = /dev/lp0 $B$O(B 0x3bc$B!"(B/dev/lp1 $B$O(B 0x378$B!"(B
/dev/lp2 $B$O(B 0x278): [$B=PE8(B: IBM PS/2 model 50/60 Technical Reference $B$H!"(B
$Bo$N%W%j%s%?%]!<%H$H$7$FF0:n$5$;$?$$$@$1$G$7$?$i!"(BPrinting-HOWTO $B$r(B
$BFI$`$N$,$$$$$G$7$g$&!#(B)

$B$[$H$s$I$N%Q%i%l%k%]!<%H$K$O!"I8=`E*$J=PNO@lMQ%b!<%I$K2C$($F!"!V3HD%!W(B
$BAPJ}8~%b!<%I$,$"$j$^$9!#$3$N%b!<%I$G$O!"J}8~%S%C%H$r@_Dj$9$k$3$H$K$h$C$F(B
$BF1$8%]!<%H$r=PNO$^$?$OF~NO$K@ZBX$($k$3$H$,$G$-$^$9!#(B
$B$G$b!";d$O$I$&$d$C$?$i3HD%%b!<%I$r%*%s$K$G$-$k$N$+CN$j$^$;$s!#(B
($B%G%U%)!<%k%H$G$O%*%U$N$O$:$G$9!#(B)...$B$b$7CN$C$F$$$kJ}$,$$$?$i%a%$%k2<$5$$!#(B

BASE + 0 ($B%G!<%?%]!<%H(B) $B$O!"%]!<%H$N%G!<%??.9f$r@)8f$7$^$9!#(B(D0 $B!A(B D7 $B$O(B
$B%S%C%H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$B!#(B
$B$3$N%]!<%H$KBP$9$k%i%$%H$O%G!<%?$r9!#$^H(B0 $B!A(B 7 $B$KBP1~$7$^$9!#>uBV(B : 0 = low (0V)$B!"(B1 = high (5V))$