2021年9月5日日曜日

Z280MB ASCIIART(マンデルブロ集合)を実行してみて思うこと

 Z280MBにCP/Mを移植できたので、この界隈で試す人の多いASCIIARTを試してみました。


実行環境は、内部クロック12MHz / 外部クロック6MHz / MBASIC rev.5.21です。

結果は、キャッシュONで2分38秒、キャッシュOFFで5分11秒でした。結果をTwitterにあげたところ、Electrelicさんからリフレッシュを止めるともうちょっと速くなるとアドバイスをもらい試したところ、2分8秒まで改善しました。Z280MBはDRAMを使っていないので、リフレッシュは不要なのですが、こんなにリフレッシュサイクルが負荷になるとは思ってもいませんでした。

参考にさせてもらったElectrelicさんの記事はこちらです。Z280固有の初期化(その1)

結果は、はせりんさん 番外編:ASCIIART(マンデルブロ集合)ベンチマーク に掲載されたのですが、他のZ80系CPUに比べてお世辞にも速いとは言えません。同じクロックだと、確実に高速版Z80やHD64180に負けるでしょうし、キャッシュOFFの結果は悲惨です。

これ以上の高速化は、外部バスクロックの12MHz化とバーストモードを使うことが必要ですが、ハードウェアの改造や新規設計が必要になるのでやめておきます。

Z280には、ユーザ/システムの分離とか仮想メモリが可能なMMUとかI/D分離とか、他にも面白い機能があるので、浪漫あふれた古の石ということで良いのではないでしょうか。

CP/Mの次はFUZIXを移植してみたいと思っています。

Z280MB CP/Mを移植

ここしばらく、Z280MB に CP/M を移植していました。移植したバージョンは 2.2 です。EDでコードを書きASMでアセンブルできることを確認しています。

CP/M-8000 の移植は経験済みだったので、大して難しくないのかなと思っていたのですが、ディスクアクセス周りで苦戦して結構時間がかかってしまいました。かなり悩んだすえ、結局使っていたコンパクトフラッシュカードの問題だったようなのですが、おかげで、8-bit から16-bit PIOモードにコードを書き換えたりできたので良しとします。ディスクアクセスのブロッキング・デブロッキングは思いっきり手抜きです。気が向いたら書き換えることにします。

CP/M-8000と違って、CCPがコマンドで上書きされたり、メモリーの配置が全然違ったりで最初とまどったのですが、ネット上に情報が豊富にあり助けられました。今回の移植作業で、参考にしたサイトを上げておきます。

pineconeの電子工作 

 BIOSの作成過程が楽しく詳しく語られています。非常に参考になりました。

nekoJavaさんのCP/Mコーナー

 CP/M-8000のときも参考にさせてもらいました。CP/Mど素人の私にはありがたいサイトです。

Grant's homebuilt electronics

 コンパクトフラッシュをつなぐのに参考にさせてもらっています。

移植の成果は、Github にあげておきました。CP/Mのライセンスの関係でBIOSのソースコードのみを上げることにしました。BIOSをアセンブルし、できたバイナリをCPM.SYSと結合するMakefileとディスクイメージを作るシェルスクリプトを入れておきました。

まあ、試す人はいないと思いますが。


2021年7月24日土曜日

Z280MB CFカードを接続と回路図公開

 Z280MBにCFカードを接続できるように拡張しました。Z8002MBで作ったIDEインターフェースボードをそのまま流用し、その先にIDE-CF変換アダプタを接続しています。


CFカードのセクター読み書きができることは確認できているので、まずはCP/Mを移植してみようと思っています。

ハードウェアは一段落したので、GitHubに回路図を上げておきました。これを見て作ろうとする酔狂な人はいないとおもいますが。

Z280MB GitHubリポジトリ


2021年6月19日土曜日

Z280MB 起動する

Z280 MPU Boardは、はんだ不良などでかなり苦戦していたのですが、安定して動作するようになりました。

現在は簡単なマシン語モニタが動作しています。

  • メモリダンプ
  • メモリ書き換え
  • ジャンプ
  • インテルHEXファイルのロード
の必要最低限のことしかできませんが、EEPROMの書き換えが必要なくなり、だいぶ作業が楽になります。これからは、このモニターでテストコードを走らせながら、Z280特有の機能を試していきたいと思います。


その先にはボードを拡張して、CP/M や FUZIX を移植してみたいとも考えています。

2021年5月19日水曜日

Z280MB 組み立て

 GWを目一杯使って、Z280ボードを組み立てました。


16bit CPUは配線量が多く、老眼が進んできている自分にはかなりきついです。特にPLCCソケットのピンへのはんだ付けは、線同士が重なるので見づらくて正直あまり好きではありません。よく順番を考えながらはんだ付けしていかないと、あとで後悔します。白のラッピングワイヤがデータバス、オレンジがアドレスバス、青がバス制御とその他の信号ラインです。


ユニバーサル基板で作るのは、自分にはそろそろ限界なのかもしれません。次回はPCBを起こせるようになりたいものです。

このMPUボードは、CPUクロックが12MHz、SRAMが256kバイト、EEPROMが16kバイトの構成です。ROMは実際には2Mビット×2なのですが、そんなにもいらないので、16kバイト分だけ使えるようにしてあります。リセット直後は、64kバイトのメモリ空間にはROMしか現れず、MMUをつかってアドレス上位に置かれているSRAMをマッピングして使えるようにします。

現状では、UARTから”hello world"が出力できているレベルで、MMUなどの確認はできていません。回路図は動作が確認できたら公開するつもりです。



2021年5月2日日曜日

Z280のZ-BUS

当初、Z280を8-bitのZ80-Busで動かそうと思っていたのですが、はんだを始めたら調子が乗ってきたのと、あとで変更するのが結構面倒なことに気づいたので、はじめから16-bitのZ-BUSで行くことに変更しました。


Z-BUSでもアドレスとデータバスはマルチプレクスされているので、アドレス用の8-bitラッチが2個必要になります。
データバスの接続は、偶数番地がAD15-AD8に、奇数番地がAD7-AD0になります。バイトリードの場合は、Z280がAD15-AD0の上位と下位を選んでデータを読み込んでくれますが、バイトライトの場合は、AD15-AD0の上位と下位には同じデータが出されますので、A0で書き込むメモリチップを選択をする必要があります。ワードのリードライトでは、Z280がリトルエンディアンなので、上位と下位を入れ替えてくれます。

B/Wはバイトかワードアクセスを示し、R/Wはリードかライトを示します。/DSはデータの読み書きのタイミングをとる信号です。Z8000のZ-BUSと違うところは、メモリアクセスを示す/MREQがありません。ST3-ST0をデコードしてメモリアクセスかを判断する必要があり、1000と1001の場合がメモリアクセスを示します。

Z-BUSでのメモリアクセスのタイミングは下図のようになっています。Z8000と同じです。

2021年4月19日月曜日

Z280のクロック

 Z280のクロックは少し複雑です。チップからは、XTALI, XTALO, CLK の3本もクロック関係のピンが出ています。

Z280は内部にクロックオシレータを持っており、水晶振動子をXTALIとXTALOにつなぐか、XTALIに外部からクロック信号を入れると動作することになっています。内蔵オシレータからのクロックは1/2に分周され、CPUクロックになります。今手持ちのCPUは12MHz品なので、クロックは24MHzまで入れることができます。

外部バスのクロックは、CPUクロックを更に1/2, 1/4分周にすることができ、CLKピンから出力されます。デフォルトでリセット後は1/2にセットされるのですが、この分周比は、データシートによるとソフトウェアからでは変更できません。

これは、アクセススピードが遅いメモリやI/Oを接続することを考慮したものなのでしょうが、Z280を最速で動かすには、バスクロックをCPUクロックと同一にする必要があります。厄介なことに、この分周比を変更できるのは、リセット時にデータバス経由で値を渡す方法だけのようです。