Z80

バス・アービトレーション

水平/垂直帰線期間中はVRAM/PCGにCPUがアクセスできるよう、両者のアドレス端子とデータ端子をバスにつなぎます。 一方、モニタが可視範囲を走査中はVRAMのD0~7からキャラクタID(文字ならASCIIコード)が出て、PCGのA3~A10に入っていきます。 ここにデー…

引き続きZ80用グラフィックボード検討

そろそろ回路設計したい! 要件まとめて来週中にハード実装に移りたく思います。 VRAMの容量は1Byte/文字の32*24表示で、最低限768Bytes必要。 マルチスクリーンとか画面外バッファとか後々のオプションで考えるとしても、2kBあればOK。 文字のビットマップ…

HD6445+XGAディスプレイ

HD6445の使い方を勉強中です。 グラフィックボード(CRTC)その1 こちらのページを大いに参考にさせてもらってます。もちろんデータシートも。 で、気付いたことメモ。 同期信号のタイミング指定がキャラ単位なので、先日PSoC5でうまくいったタイミングと同…

キャラクタディスプレイ考

1文字8*8pxを256*192のスクリーンに敷き詰めると32*24文字。1文字(の1ラスタ)のデータを用意するのに使える時間は16MHz/8の逆数で500ns。85nsのSRAMで3メモリサイクルはいける? VRAMから文字コード読み込み キャラクタROMからシフトレジスタへ8bitのラス…

Z80システムのグラフィックボード

解像度256*192でスペック下げたつもりでしたが、8bitCPUのゲーム機と考えたら限界近いサイズな気がしてきました。 ハードで相当工夫しないとMSXとかファミコンみたいにならないですね。当たり前か。 目下の問題は、VRAMから映像信号作るのに、使用予定のSRAM…

BREAK実験

PCからZ80プログラムのデバッグができるよう、BREAKサブルーチンを作ってみました。 call BREAKを実行するとレジスタの内容をRAMにダンプしてHALTします。 PCからはBUSRQでRAMを覗くなり書き換えるなりして、気が済んだらNMIでZ80の実行を再開させます。 ORG…

SRAMの初期状態

前々々回の記事で電源投入直後のSRAMの中身が全部ゼロだと思ってCPUの動作確認したことを書きましたが、実際に確かめてみました。 Z80ボードをON Arduinoをアタッチ(即BUSRQ) PCでRAM全領域を吸い出してdump バイナリエディタで内容確認 結果は… どう見て…

Z80アセンブラでFizzBuzz

レジスタ内容をダンプするシステムコール云々などと言ってましたが、もうちょっと複雑なアセンブラの動作確認がどうしてもしたくなって、BUSRQしてRAMを見にいく方法をさくっと試してみました。 今回のプログラムは遂にLチカを卒業して、FizzBuzzをやってみ…

ブートロード成功

システムとしてはまだ完成してませんが、とりあえずArduinoからZ80のブートロード(と言っていいのか)が上手くいきました。 BUSRQでバス権を取る RAMにプログラムを転送 Z80をリセット(RESETアクティブ中にBUSRQを落とす) 動かしたプログラムはやっぱりL…

Z80カツドウ再開!

仕事落ち着いてきたようなそうでもないような。いろいろ中途半端にぶん投げておりますので、順に消化していきたいと思います。 まずは「Z80コンピュータを作ろう」企画から。 前回、といっても半年…!?近く前ですが、ブレッドボードで作っていた最小構成を…

今後の展望

先週は忙しいのもあって工作にあまり手をつけられませんでした…。「Z80コンピュータを作ろう」企画の現状は、CPU・ROM・RAM・PIOという最小構成でシステムを動かせたところ。しかし本格的にゲーム機なりのシステムを作ろうと思ったら勉強すべきことが山積み…

RAMが仲間になった!

東芝のSRAM、TC55257DPL-85Lです。これ1個で32kBあり、アクセスタイムも85nsとおそらく速い部類で、やはりZ80基準だと未来のデバイスなのでしょう。まぁ、気にせず組み込んでいきます。 ROMとRAMでチップが1個ずつだけあって、それぞれに32kBのアドレス空間…

水晶発振の罠(レベル1)

先日とりあえず完成したミニマルなZ80システムは電源投入時の動作に問題がありました。手持ちの測定器具であれやこれやと調べてるうち、Analog Discovery 2のオシロスコープで次のような波形が… 水色がRESET#信号で、パワーオンリセットが500msほど続いた後…

Z80でLチカ!

思ったより簡単に動いてくれました。手こずったのはICのGNDつなぎ忘れなどの凡ミスばかり。 Lチカプログラムはとてもシンプルです。 PIOAD: equ 0 PIOAC: equ 1 org 0 ; ; PIO初期設定 ld a,11001111b ;ビットモードで動作 out PIOAC,a ld a,00001111b ;出力…

UbuntuでZ80アセンブラを書く

選択肢は色々あるようですが、次のサイトの zasm というZ80専用アセンブラを使うことにしました。 zasm - z80 assembler - download page オプションでCPUサイクル付きのリストが出せるのが面白そうです。導入方法は、Archiveから実行バイナリをダウンロード…

ROM(EN29F002)ライタ完成

RubyでPC側のソフトも作って、ROM書き込み環境が整いました! PC側書き込みソフト Arduino側ファームウェア 64kBまでのバイナリファイルをROMに書き込めます。64kBというのはPC側ソフトを簡単に実装にするための制限(かつ、Z80で使うには十分な容量)で、フ…

ROMライタのファームウェアひとまず完成

EN29F002用ROMライタ ファームウェア ファームウェアのソースだけあってもしょうがないんですが、共有してみます。書き込み、読み込み、チップ全消去できるのは確認済み。 ROMに対する各操作シーケンスのタイミングがイメージしやすいよう、特に構造化もせず…

ROMライタ製作中

オーソドックスなROMライタというのがどんなものか分からないまま作ってます。データシートのタイミング通りに「コマンド書き込み→データ書き込み→書き込み完了をポーリング(異常検出したらリトライor終了)」を繰り返せばいいとは思うのですが。 ターゲッ…

手動クロックで動かすZ80

ようやくZ80(LH0080A)の動作確認できました。 課題になっていた手動クロックは 74HC123 で無事解決。C=0.001μF(1000pF)× R=470Ω の時定数で、タクトスイッチを押したときに 1μsec 弱のLパルスが出る回路を作ってLH0080Aを動作させました。 角のギザギザ…

クロックまわり下調べ

Z80の動作の理解にあたって手動クロックで各マシンサイクルを追いかけていこうと思っているので、そのために調べたことをメモ。 資料を読んでいると「nMOS版は最低クロック周波数がある」という記述あり。WikipediaによるとnMOS版はダイナミック・ラッチとい…

メモリまわり下調べ

Z80写真再掲。 これは純粋にCPUというだけのICで、メモリもありません。メモリがなければプログラムもありません(ストアドプログラム方式ってヤツだ!)。というわけで、まずはメモリについて学ばなければいけません。 「メモリ」というだけだと相当に意味…