Z80-CP/M ボードをつくる

SBC6809を作って遊ぶ過程でWebを見ていたら、いろいろなものがあることがわかりました。

4IC Z80 コンピューター を作りたくなって、オレンジピコからまたポチリ(病気がこじれた)。土日には配達されるまいと思っていたら、日曜の午後に郵便が届いていたので、我慢ができず作業開始。

1) ハードウェアの製作

まず、Z80のペリフェラルを引き受けているATmega32aにプログラム(Arduinoのスケッチ)を書き込むことが必要。

Atmega32a へ書き込みは下記の通り実行。

Arduino as ISP を使ってAtmega32a にブートローダーなどを書き込む方針に決めた。TL866CSライタを使っても良いみたいだけど、ヒューズの設定の仕方など不明点があったので、とりあえずみんながやっているやり方で!(あとで、こちらのDiscussions をよく読んだら書いてあったけど)。

1a) まず、arduino as ISP を作成する。

手持ちのFreeduinoを引っ張り出してきて、でも、いろいろの実験でどうなっているか不明だったので、Atmel ICE を使ってArduino のbootloader を書き込んでArduino化する。

次にArduino IDEのExamples からArduinoISPスケッチを開いて、Freeduinoの方に、ArduinoIDEを書き込もうとしたら、シリアル経由ではうまくいかなかった。しょうがないので、ブートローダー付きのArduinoIDEスケッチの.hexファイルを生成し、AtmelICEをICSP端子につないでAtmelICEから直接書き込んだ(2度手間をやっちゃった)。

そして、ArduinoISPとなった、Freeduinoを使っての書き込みを実行。

ブレッドボードにATmega32a を刺し、適当にググって下記の配線をジャンパーワイヤーでArduinoISPとなったFreeduinoと行った。

– Connect pins 10 and 30 on IC to 5V on Arduino

– Connect pins 11 and 31 to Ground on Arduino

– Connect pin 6 on IC to pin 11 on Arduino (MOSI)

– Connect pin 7 on IC to pin 12 on Arduino (MISO)

-Connect pin 8 on IC to pin 13 on Arduino (SCK)

-Connect pin 9 on IC to pin 10 on Arduino

そのうえで、まず、ArduinoISPを使って、ATmega32のブートローダーを書き込む。そして、Arduino IDEでATmega32Aで動かすスケッチ(S221116_R100218_Z80.ino)を開いて、アップロード実行。

不安なので、ATmega32aをブレッドボードから外して、TL866CSにつないでメモリの内容を読みだしたところ、ちゃんと書き込みできてそう。ちょっと不安だけど、この先はボードを完成させてからチェックすることにする。

1b) ボードの実装。

実装するLEDは、状態を見るだけなので、全部手持ちの赤でもいいのだけど、まあ、作った人の例に色も合わせてみようといろいろな色のLEDを秋月から購入。

ついでに、EEPROM (24LC1025)を2つ使ってi2c につなぐvirtual disk もCP/Mを走らせるのには必要なので、これもまた、人の実装例を見ながらおんなじように作った。さらに、I2CバスにつけるRTCモジュールもAmazonでポチり、これもまた、こちらのLogsにある通りのことをやって、接続した。Parallel I/O の例も載っていたが、こちらの方はi2c pio expander のICを買っておいた(未実装)。

1c) 火入れ。

電源は、PCのUSBから取る。あっさり、basic が起動できることを確かめた。

2) ソフト

2a) CP/M を動かす。

CP/M は8080で動く、MS-DOSの前からあるDOSです(自分の世代より前のことなのでわかりません。。。) MS-DOSがすでに理解してもらえないような気が。

中略。

ブートさせると、basic, forth, iLoad, 等を選べるようになっているが、iLoadを選び、iDiskという、i2cのvirtual diskにディスクイメージを書き込むためのユティリティをアップロードして動かすと、プロンプトがでるので、QPM271_DiskPack.zipを解凍したところに入っている4つの.hexファイルをteratermを使ってアップロード。ついでにCPMのディスクパックに含まれているdisk1 用のTurbo Pascal のイメージも書き込む。

Turbo Pascalなんて、学部1年の情報実習以来?懐かしい!というかPascalの文法も、TruboPascalの統合環境の使い方ももう忘れてる。

リブートして、QP/Mをロードしたところ。

QP/Mのディスクにはmicrosoft basic が入っていたのでそれでi2c RTCの動作確認(QP/Mで使っているけど)

OK!

ここでCコンパイラを動かしたりしたいけど、メモリとかディスクとかちょっと不足気味?

とりあえず、mbasic で遊ぶ。

Conway’s game of Life

いろんなbasicのゲームがwebで見つかるので、いろいろ遊んでみる。

game of life は、昔F-BASIC でも作って動かしていたように思います。

動かしてみたけど、有名なグライダーを入れると、グライダーが飛んでかないでいきなり消滅。。。?

3) 今後

特に目的もなく、作ってみましたが、basic でi2cポートも叩けるみたいなので、手持ちの24bit AD変換器などのセンサーを動かして高精度データをとりつつ、でも、データの表示はASCIIキャラクターのグラフで表示。みたいなのをやって遊びたいな、なんて思っています。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)