フリーソフトとして公開されている inpout32.dll を用いると,x86 CPU の I/O ポート入出力ができます。
32ビット版Windowsおよび64ビット版Windowsのいずれでも動作します。
64ビット版Windowsの場合でも,以下の手順で実行してください。
http://www.highrez.co.uk/downloads/inpout32/default.htm
の中ほどにある
Binaries only - x86 & x64 DLLs and libs
をクリックして
InpOutBinaries_1500.zip
をダウンロードし,適宜のフォルダに展開してください。
win32フォルダにある inpout32.dllを十進BASICがインストールされたフォルダ(BASIC.EXEが存在するフォルダ)にコピーしてください。
次に示すプログラムは,
PC/AT互換機
(いわゆるDOS/V機)用のテストプログラムです。PC/AT互換機は,16進表記で61番のI/Oポートにブザーが接続されていて,このプログラムを実行するとブザーがなります。
PC/AT互換機以外でこのプログラムを実行するのは危険を伴います。その場合は230行以降をハードウェアに適合するものに書き換えてください。
100 SUB OutB(port, dat) 110 ASSIGN "inpout32.dll","DlPortWritePortUchar" 120 END SUB 130 FUNCTION InpB(port) 140 ASSIGN "inpout32.dll","DlPortReadPortUchar" 150 END FUNCTION 160 SUB OutW(port, dat) 170 ASSIGN "inpout32.dll","Out32" 180 END SUB 190 FUNCTION InpW(port) 200 ASSIGN "inpout32.dll","Inp32" 210 END FUNCTION 220 230 LET port=BVAL("61",16) 240 LET n=InpB(port) 250 PRINT BSTR$(n,2) 260 CALL OutB(port,INT(n/4)*4+3) !鳴らす 270 PAUSE 280 CALL OutB(port,INT(n/4)*4) !止める 290 300 END
CPU I/Oを実行したいプログラムに上のテストプログラムの100〜210行をコピーしてください。
8ビットの入出力には,InpB関数と副プログラムOutBを用います。
16ビットの入出力には,InpW関数と副プログラムOutWを用います。
OutB, OutWは,第1引数がポート番号,第2引数が出力したい値です。