TK80/BSの
シンセシステムを復活/拡張したい〜
その49
SBC8080ボードを使った
TK80BS互換機の作製
2020年
2月29日
TK80BSのモニタプログラムの逆アセンブルリストから、再アセンブルできるソースを作成しました。左は元同僚先輩のYさんに貰ったコメント付き逆アセンブルリストです。これを手持ちのアセンブラでアセンブルできるように修正して右側のソースを作りました。
・先頭部のアドレスと機械語をコメントに移動。
・$XXXXは0xXXXXに変更。
・stax XXXXはsta XXXXに変更。
・ldax XXXXはlda XXXXに変更。
・push aはpush pswに変更。
・pop aはpop pswに変更。
・ラベルは赤枠のようにL_xxxx(xxxxは絶対番地)を使用。
・開始番地の指定はORGを使用せず、リンカのコマンドで#CSEG=F000で先頭アドレスを指定。
などの修正を行い、再アセンブルできるようになりました。


下はアセンブラのリストファイルです。アドレスは0番地からのリロケータブルになっています。生成されたバイナリをコンペアしてモニタと差分がないことを確認しました。未使用領域が460バイト以上あり、簡単なコマンドであれば追加できます。

秋月で購入したフロントパネル用の6Pのトグルスイッチとプッシュスイッチ付きボリューム、ブザー用の圧電スピーカです。その他、半田付けグッズです。

仮の中点付きトグルスイッチを上記のスイッチに交換してFPGAまで配線しました。ボリュームもプッシュスイッチ付きに交換します。スイッチはPS/2パラレル変換のPSoCのリセットに配線します。

フロントパネルのスイッチは左からBASICのレベル切り替え、ROM/RAM切り替え、モニタのROM/RAM切り替え、キャラジネの切り替えです。キャラジネは擬似ROMフォントに切り替えられます。これらは実装済みです。BASICを使わず、RAMに設定すれば、8000〜EFFFがRAMとして使えます。ただし、モニタのワークが84xx番地にあるので、実質は8500〜EFFFの26Kバイトです。赤枠のSYSスイッチはモニタとBASICの双方を擬似ROMに切り替えるスイッチですが未実装です。

マザーとボードをケースに戻して、動作確認を行います。動作良好です。

3月1日
電源スイッチ下の照光スイッチがフロントパネルのレタリングと違っていたので直しました。上からSBC8080のリセット、FPGAの再コンフィギュレーションです。

先週のフロントパネルのアドレス/データLEDが眩しかった件です。PS/2パラレル変換のPSoCにPWMを追加して、LEDの輝度調整を行います。PWM出力はLEDドライバのHCT245のイネーブル端子に接続します。


輝度調整はキーのCtrl−[とCtrl−]にマップしました。左が最低時、右が最高時です。


各ボードにマザーボードから抜きやすいように、引き抜き用のワイヤを付けました。ボードエジェクタの代わりです。

拡張I/Fボードのケーブルを作製します。接続先は本家の拡張I/Fです。拡張I/Fにはフロッピコントローラ、グラフィックディスプレイコントローラ、下位メモリが接続されていますが、下位メモリはすでに互換機に載っているので、取り外して使用します。


リアパネルに拡張コネクタを仮止めして、各コネクタにラベルを貼りました。ラベルは透明黒字テープにした方が良さそうです。

互換機の電流を測定します。拡張I/Fボード無しの9V電源で、0.37Aでした。電力は3.47Wです。フロントパネルの輝度を変えても電流ほとんど変化しませんでした。

3月7日
PS/2パラレル変換のヒストリ機能の動作が本家TK80BSと互換機で違う件です。PSoCにUSBケーブルを接続してデバッグします。本家の方が正しい動作で、微妙なタイミングで互換機の動作が異なってました。プログラムを修正して、双方で同じ動作になるように修正しました。


早速、本家用のPSoCにも新しいプログラムを書き込みました。

本家のPS/2パラレル変換の動作確認をしていると、ビデオ信号が出なくなくなり、一瞬、本家TK80BSのビデオ回路が壊れたかと思いましたが、リアパネルのケーブルの断線でした。ケーブルを半田付けし直しました。


ビデオが出るようになりました。良かった〜

本家のPS/2パラレル変換にもLEDとブザーを取り付けます。ベースボードにLEDを仮り止めして、ケースにマーキングします。

STB(正論理)は8255に繋がっているので、デジトラでLEDを駆動し、その他は電流制限抵抗を付けてポートに接続します。黄色のLEDが無いので、マクロWAIT中のLEDは白色に変更しました。圧電スピーカはここを参考にデジトラで電流増幅します。


ケースにLEDの穴を開け、ラベルを貼って本家用のPS/2パラレル変換器が完成しました。LEDは左からSTB、マクロ記録中、マクロ再生中、マクロWAIT中です。

3月8日
本家の拡張I/F(フロッピコントローラ:MB8877、シンセI/F:8255、グラフィックコントローラ:TMS9918)を接続できるように、拡張I/Fボードの作製を進めます。FPGAに拡張I/Fのセレクトロジックを追加して拡張I/Fボードからケーブルを引き出します。ICソケットにHCT245とHCT04を実装しました。

マザーボードに拡張I/Fボードを挿して、簡易ICEとロジアナでデータバスバッファの選択と方向制御が正しいか確認します。バッファが選択されるのはI/Oアクセスでアドレスの2ビット目が1の時(TK80の8255が選択されていない時)と、メモリアクセスでアドレス範囲が7D00〜7DF7の時(USERエリア)です。

簡易ICEでUSERエリアの先頭の7D00番地に55をライトし、続いて7D00番地からリードします。

7D00番地にライトした時のバッファの選択信号とバス方向制御の波形です。

7D00番地からリードした時のバッファの選択信号とバス方向制御の波形です。正しく動作しているようです。

フロッピコントローラボードで使うREADY信号はスイッチを付けて確認します。モニタのダンプコマンド実行中にスイッチでWAIT状態にした時に動作が停止、READY状態にした時に再開されることを確認しました。次回、互換機に拡張I/Fを接続して確認します。

3月14日
アマゾンで購入の互換機の拡張I/F用の+−5Vの降圧電源と5極の航空コネクタが来ました。


こちらもアマゾンのアパートのPC用のDDR4メモリです。ノートのメモリは合計で16GBになりました。互換機は64KBなのでメモリの容量は約26万倍。一方、クロックは8080が2MHz、ノートPCは2.5GHzで1250倍。メモリに比べたら大きな倍率じゃないです。

+−5V電源は+12Vから作ります。早速、動作確認を行います。これで+12と+−5Vの3電源が用意できました。


PS/2キーボードパラレル変換にカナ文字を実装します。PSoCにUSBケーブルを接続してデバッグします。TK80BSには”カナ”というオルタネートキーがあり、一度押すとカナモードになり、再度押してカナモードを抜けます。PS/2キーには”カタカナ、ひらがな"キーがあるので、これにカナキーにマップし、オルタネート動作させました。”カナ記号”はシフトキーで入力します。右はカナが入力できるようになったので、BASIC内でカナを表示させているところです。当然ですが、カナも半角文字で、濁点と半濁点は1つの文字です。小文字、濁点、半濁点、句読点が入力できることを確認しました。カナはほぼ使わないですが。


3月15日
本家のTK80BSのPS/2パラレル変換もカナ対応の新しいプログラムを書き込みました。

3月22日
3連休の1日目は4Cで伊豆半島一周、中日はトライトンで射撃のOFF会があり、最終日の日曜のみガレージに来ました。TK80BS互換機に本家の拡張ボードを接続するために、ケーブルの接続確認を行います。

問題なさそうなので、拡張I/Fボードを介して、本家の拡張ボードを接続します。拡張ボードには8255が2個載っているシンセI/Fボードのみにします。


8255は制御ポートに80を書くとA〜Cポートが出力になり、書き込んだデータと同じ値がリードできるようになります。早速、確認してみましたが、正常に動作せず、必ず00が読めます。バスバッファが開いていないと思われます。この日は別のやぼ用があり、調査は次回に持ち越しです。

3月28日
つくば方面に出張のしたので帰りに秋葉原に寄って、秋月でピンヘッダなどを購入しました。

先週動作しなかったシンセの8255ですが、拡張I/Fのデータバスバッファのイネーブルのアドレス範囲が間違っていました。シンセ用8255の先頭アドレスは7c08ですが、7d00〜7df7でイネーブルにしていました。正しくは7c00〜7df7が正解です。


修正して、再確認します。制御ポートに80を書いた後、各ポートに書いた値が読めるようになりました。

早速、シンセに出力してみます。フロッピシステムは動作していないので、必要なプログラムはすべて簡易ICE経由で本家からコピーしました。動作確認の動画を撮りました。約6MBのMP4をダウンロードします。

3月29日
PS/2パラレル変換のPSoCのプログラムを修正し、ヒストリを修正した入力もヒストリに追加するようにしました。右は入力した後ろのアドレスの800Fを802Fに修正して、実行し引き戻したところです。修正した入力もヒストリに入るようになりました。


シンセが動作したので、次はフロッピで
す。フロッピコントローラはI/Oアクセス制御です。動作確認を行ったところ、一番簡単なドライブセレクトも正常に動作していないことが分かりました。下
はドライブ0を選択する時のOUT命令の波形で、上は74LS74のラッチパルス、下がデータのD0です。D0が浮いています。他のI/Oアク
セスはTK80上に載っている8255のみでA2信号がCS−に接続されています。外部I/Fのデータバスイネーブルにする条件はA2が1の時です。本家では正しく動作しているので、他のバッファとぶつかっている、バスバッファのイネーブル信号が正しくないのどちらかの不具合と思われます。次回、再確認します。

4月4日
先週からの続きです。TK80BS互換機のフロッピの不具合です。本家の動作と制御信号線の再確認を行います。

本家のドライブセレクトの波形です。浮いているところはなく、キレイです。制御信号線を確認したところ、拡張バッファボードのデータバスバッファの選択制御にI/Oエリアの条件が入っていないこと、TKROMー(0000〜00ff)とBSIOー(7df8〜7dff)の2つがデータバスバッファの禁止条件に、USERー(7c00〜7df7)が許可条件になっていました。

4月5日
拡張バッファボードのバスバッファの制御条件が本家と同じになるように、TKROMーとBSIOーをORしたTKROM_BSIOーとUSERーをFPGA内で生成し、拡張I/Fボードを介して拡張バッファボードに接続するようにします。

修正後のドライブセレクトの波形です。浮いているところは無く、キレイになりました。

早速、フロッピドライブを接続して、μーDOSを起動してみます。

互換機で本家のフロッピが動作するようになりました。Levelー1のBASICの時計プログラムをロードして実行してみます。クリックすると約4Gのmp4動画をダウンロードします。2016年の10月にも本家BSでも動作確認の動画を撮っていました。この下の10月9日で動画が観られます。

フロッピが動作したので、ケースのリアパネルに拡張I/Fコネクタを固定しました。レタリングも透明に黒文字のラベルシールに変更しました。

PS/2キーボードにμーDOSオペレーションのカーソル移動用の矢印シールを貼りました。キーは1:左、2:下、3:上、4:右です。もし当時、VIを知っていたら、同じ移動キーにしたと思います(笑)。μーDOSを作ったのは83年で、unixを知るのはその翌年だったと思います。

拡張I/F用の+−5V電源は青LEDの輝度が高過ぎなので、少し暗くしました。次回は+12V、+−5V電源を使用しているTIのVDP(TMS9918)を使ったグラフィックボードの動作確認を行う予定です。



