JR−100 サウンド、テープ
JR−100ではVIA6522のタイマ1、2を使用して方形波を出力します。 T1(タイマ1)はフリーランイングモード(ACR6=1)にしてPB7を方形波出力 T2(タイマ2)はパルス計数モードでPB6(PB7で出力した方形波)をカウントします。
BEEPの実行例 1.IFR $C80Dに$00を書き込む 2.ACR $C80Bに$E0(Bit7−5=1)を書き込む 3.T2L−L $C808に波形を出力する回数の下位を書き込む T2L−H $C809に波形を出力する回数の上位を書き込む 4.T1L−L $C804に方形波の下位を書き込む T1L−H $C805に方形波の上位を書き込む 5.IFR $C80DのBit5をみてT2がタイムアウト(Bit5=1)になるまで待つ 6.終了 1.IFR($C80D)に$00を書き込む 割り込みが起きた事を知らせるレジスタをクリアします。 JR−100では割り込みは使用しませんがT2の状態を見る為にフラグをクリアします。 2.ACR($C80B)に$E0を書き込む Bit7−6を11でT1をフリーランニング、PB7に方形波出力をするようにします。 Bit5を1にしてPB6の入力パルスを設定した分だけカウントします。 ACRのBit7=1とDDRBのBit7=1になっていると T1がPB7をコントロールするのでORBのBit7は無効になります。 3.T2の設定を書き込む PB6へのパルスをカウントするデータを書き込みます。 T2L−L($C808)にカウントの下位を書き込み、 T2L−H($C809)にカウントの上位を書き込みを行います。 この時、T2L−LからT2L−Hの順に書き込みをするのですがT2L−Hに書き込みを行った時に すぐ、カウントダウンする為なのでT2L−H,T2L−Lの順に書き込みを行います またT2が0(タイムアウト)になると/IRQ(割り込み)が発生します JR−100では割り込みは使用しませんがIFRを覗く事でタイムアウトを知る事が出来ます。 T2がタイムアウトになって割り込みが発生してもPB6に入力パルスがあればカウンタはダウンされます。 新たにT2L−Hを書き込まれないと/IRQは1になりません。 PB6はPB7の方形波の出力と直接に繋がっていおり PB7が1→0に変るとT2のカウンタがダウンされます。 4.T1の設定を書き込む ACRで設定したPB7に出力する方形波(周波数)を書き込みます。 T1L−L($C804)にカウントの下位を書き込み、 T1L−H($C805)にカウントの上位を書き込みを行います。 この時、T1L−LからT1L−Hの順に書き込みをするのですがT1L−Hに書き込みを行った時に すぐ、カウントダウンする為なのでT1L−H,T1L−Lの順に書き込みを行います T1はフリーランニングモードなので一定間隔で連続で割り込みが掛かります(JR−100では関係ありません) T1のカウンタが0(タイムアウト)になる度に割り込みフラグがセットされPB7の出力が反転されます。 T1がタイムアウトになった後はT1L−LとT1L−Hの内容が 再びカウンタに自動的セットされカウントダウンを行います このように自動的にカウントダウンされ、T1のタイミングでPB7を反転出力の繰り返しを行います。 割り込みフラグのクリアはT1C−Hの書き込みか、T1C−Lの読み込みか、IERに直接書き込みになりますが JR−100では割り込みは使用しません (894886Hz÷(T1+3.5))÷2=出力する周波数 フリーランニングモードで実行するためL nn+1.5サイクル、H nn+2サイクルになる 5.IFR($C80D)のT2がタイムアウトになるまで待つ PB7の方形波(T1)をどれだけの時間(T2)だけ鳴らすかのチェックになります。
テープ 1s÷894886Hz=0.00000111746…s 0.00000111746×T2の値 93×2=0.00020784576s(208μs) 208μs×2=416μs (2400Hz 1サイクル) フォーマット ヘッダー部分 スタート ’1’×4080 ファイルネーム 16バイト スタートアドレス 2バイト 長さ 2バイト ファイルタイプ 1バイト $00=BASIC、$4D=マシン語 空き 11バイト チェックサム 1バイト プログラム部分 スタート ’1’×255 プログラムデータ チェックサム 1バイト FSK方式の600ボー ’0’=1200Hz×1サイクル(スペース) ’1’=2400Hz×2サイクル(マーク) 1バイト分のデータ ’0’、d0、d1、d2、d3、d4、d5、d6、d7、’1’、’1’
JR−100のコーナへ Home へ戻る