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 へ戻る