CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

TMS9995

外部リセット追加

シリアルポートを介してボードにリセットをかける回路は、パタンはあるのですがトランジスタQ1のパタンを裏返しに作ってしまったので未実装のまま放置していました。DRAMを交換するために久しぶりに基板を出してきたのでこの際、直しておきました。パタンに…

メモリ換装

懐かしの64kbitのDRAM、uPD4164を入手しました。65536×1ビット幅なのでこれを8個並べるとZ80の全メモリ空間をカバーするのでこれとシャドーROMを組み合わせた8ビットパソコンがあった気がします。 セラミックパッケージと金属のハーメチックシールがいい感じ…

画像データ変換

TMS9918VDPの描画上の制約内で思った通りの絵を描くことは難しいのですが TMS9995のツールを集めたサイトで面白いものを見つけました。 Convert9918という名前の通り任意の画像ファイルをTMS9918のデータフォーマットに合わせた形に変換するもので、解像度に…

ビデオ出力キャプチャ

VDPのビデオ出力を確認するときデスクトップPCの開発環境から別の部屋にあるアナログTVのところにCPUボード、ノートPCを運んでやっていましたがこれがえらい面倒 それでコンポジットビデオ信号をVGAに変換するアダプターを買ってデスクトップのVGAモニタを切…

マルチカラーモード

TMS9918にはもう一つ、マルチカラーモードという設定があり、このグラフィックモードでは画面の解像度を落として、その代わりにドット単位に任意の着色ができるようになります。 解像度は一気に下がって横64ピクセル、縦48ピクセル。ピクセルのサイズは…

テキスト表示

昔の8ビットPCの画像がはっきりしない中間色ばかりだなーと思ってたのですが TMS9918のカラーパレットがそもそもそういう仕様のようです。 昔のことですから専用のモニタがあるわけでもなく、家庭用のテレビ、しかもコンポジットビデオ入力端子すらなく、RF…

表示テスト(2)

別プロジェクトで使ったLCD表示用の8×8ドットのフォントデータをパタンテーブルに埋め込んでみました。 これはグラフィックモードⅡで表示していますが、文字だけであれば別にテキストモードというのもあってこれであれば横40桁×縦24行まで表示できます。…

表示テスト

VRAMへ意味のあるデータを書き込んで表示テストを行います まずVDPレジスタの初期化を行い、16kbyteのVARM空間を以下のように用途を 決めてやります ネームテーブルに0~255のインクリメントデータをセットしてやると 768個のパタンデータが1画面の…

VDP制御

8×8ドットの定義済パタンをタイル状に横32×縦24個(計768個)敷き詰めるだけというとずいぶん制約があるように感じますが、実は定義済パタンも768個定義できるので結局(32×8)×(24×8)=256×192のフルグラフィック!で任意の点に…

VRAM接続(3)

DRAMを残り全部実装しました。 ボード上は256kbyteの大容量ですが、そのうちVDPが管理できるのはたった16分の1の 16kbyteだけです。 フルグラフィックのCRTCであればVRAMの1アドレスが1ピクセルに対応していて操作は簡単なのですが、TMS9918ではこの少ない…

VRAM接続(2)

たまたま256kbitDRAMは手持ちがありました。 これも富士通のMB81256で、たぶんジャンク基板から引き抜いて使う当てもなくとっておいたものですがようやく陽の目を見ます とりあえず1ビット分だけ実装。 電源は不要になったVBB=-5VはGNDへ接続、VCC=12Vは+…

VRAM接続

電源が用意できたのでいよいよビデオ出力周りの確認をします。 いままで未実装だったVRAMを取り付けますが、今時古典的な16kbitDRAMは希少品です。以前、オークションでジャンク扱いで入手した富士通の互換品MB8116はあるのですが。 ところがここまで来て、…

サブ電源

16kbitDRAM4116を駆動するための12VですがDC-DCで生成させることにします。 DRAM1個あたりデータシート上で35mA、8個で280mA、約4Wですから結構な消費です。 ストロベリーリナックスでLTC3124 昇圧型DC-DCコンバータモジュールを見つけて きました。こんな…

コンパイラドライバ(2)

プロセス→「EDIT」でエディタが起動しソースファイルが読み込まれるので編集して保存。プロセス→「BUILD」でターゲットに合わせたコンパイルのためのコマンドラインを実行します。 TMS9995だとこのような関数を呼んでいるだけで、コンパイルオプション等はす…

コンパイラドライバ

VRAMを実装しようとしたところでずいぶん放置していました。 というのも初期のDRAMである4116は+5V,+12V,-5Vと3電源も必要で、もちろん定電圧電源、ACアダプタをかき集めれば可能なんですけどセッティングが毎回めんどくさそうでそのうち専用電源でも作ろう…

画面表示

実はまだブラウン管テレビを持っていたりします。 当然地上アナログチューナしか内蔵してないのでハードディスクレコーダのモニタにしかなっていませんがフラットスクエアの画面でまだまだ映るのでなんとなく持っていたものです VDPの内部レジスタを適宜セッ…

ビデオ信号出力

これはもうVDP専用の水晶を付けるのが手っ取り早いしパタンカットのみでジャンパも飛ばさなくて済みます。 「こんなこともあろうかと」VDPの直近に水晶を付けるパタンを用意しておいたのが正解でした。 CPUは現状通り12MHz原振、内部3MHzで最高速度で動作…

VDP実装

VDP(Video Display Processor)TMS9918を実装しました。 VRAMは電源の準備も必要なのでまだですがVDP単体でもレジスタアクセスやビデオ信号の出力の確認くらいはできると思っていました ところがVDPをつないだとたんボード自体がウンともスウとも言わなくな…

モニタ書込み

Cで書いたモニタのコードをROMにアサインするのはかなりめんどくさそうなので、もうRAM上で動かすことと割り切ることにします。 ただ毎回原始モニタから本番モニタのロード、アプリケーションのロードと手順を踏むのもおっくうなのでモニタの実行可能バイナ…

ロジックIC入手

SN76489のREADY回路に使う幅の狭い74HC74を探していたのですが、昨今の秋葉原では店頭で品名を指定して購入できる店なんて壊滅状態だし、メーカ指定なんてありえません。 もうdigikeyや海外オークションが手っ取り早いです。秋葉原も衰退するわけですが でも…

モニタ作成

V50や386ボードに搭載したC言語で記述した高機能なモニタプログラムをTMS9995用のコンパイラでコンパイル、できたバイナリを原始モニタでボードに転送して動作を確認しています。 x86用に対してデバイスの初期化、文字入出力の部分を変更するのみで移植は…

パラレル入出力

TMS9901 PSI(Programmable System Interface)を実装しデバッグを始めました。このICは割込み専用入力ピンが6本、パラレル入出力ピンが7本、パラレル/割込み兼用ピンが9本、14ビットインターバルタイマを内蔵した複合機能チップです。 インテル80系なら8155…

SOP14

SN76489は内部レジスタの書き込みに結構時間がかかるようでREADYピンがLOWになっている期間、/CEと/WEをホールドしておかなければならないようです。 単純にそのままCPUのREADYピンへ接続してウェイトをかければいいのですが、念のためクロックで抜いて同期…

チップイネーブル

DCSGのピンアウトで6番ピンに/OEというピンがあります。 これ普通に考えて、メモリと同じように/WE(ライトイネーブル)と対になる/OE(アウトプットイネーブル)な訳で、アドレスデコーダの出力とそれぞれ論理積をとった書込み信号/PSG_WR…

DCSG取付け

SN76489をソケットに実装しました。 それにしても今見るとことごとくDIPのシルクの向きが逆ですね まぁ機能には関係ないですけど。 ところで、このIC、テキサスの標準ロジックSN74シリーズみたいな型式ついてますけど元々はTMS9919という石の改良…

ジャック取付け

次のハードデバッグのターゲットはDCSG. (Digital Complex Sound Generator) SN76489A です。 オーディオ出力が取り出せるようにRCAジャックを取付けておきます。 このRCAジャックのフットプリントは自分でカスタムで作ったものですがうまく収まるかどうか…

ビット送出修正

set_7219()関数を修正しておきます。 ここは簡単にmskの値が0になったら1に書き換えるだけです。 これで最下位が「1」の値も正しくビット送出できるようになりました。 初期化設定をプログラミングした後各桁にデータをおくることで数字表示…

シフトゼロ

おかしいのはset_7219()関数の中で16回目のループ;i=15の時です。 このときの入力データのビット状態を見るマスク: msk=(1<<(15-i)); が怪しいということになります。 1<<0=??? 1のゼロ回左シフトっていくつなんでしょうか。 そこで左シ…

ビット列送出

8桁ディスプレイコントローラMAX7219の初期化部分はTLCS90にボードで実績のある設定をそのまま持ってきました。 前述のset_7219()関数で制御レジスタにコードを送ります。 この後、デジットごとに表示データを送ればLEDが点灯するはずなのですが、まずは案の…

7セグLED取り付け

7セグLEDとコントローラMAX7219を実装しました 右下のイクラのようなLEDがチープでノスタルジック感を醸し出しています 昔のTIの関数電卓にこんなLEDが使われていたような気がします。 パラレル出力の74VHC574は上位5ビットに単体のLEDが接続されていますが…