SBCZ8が完成

ザイログZ8でBASICが動くシングルボードコンピュータSBCZ8が完成しました。これまで2度の試作に失敗し、今回も最初の回路図にいろいろと問題があったのですが、たくさんの人がこのブログやツイッターで助言を寄せてくださり、どうにか修正することができました。深く感謝します。SBCZ8のプリント基板はオレンジピコで頒布します。

SBCZ8_g_top

SBCZ8はZ8681(元祖Z8)とZ86C9116(高速・CMOS・レジスタ増量版Z8)で正常に動作することを確認しました。シリアル端子とパラレル端子を備え、BASICで制御することができます。回路図、部品表など技術的な内容はSBCZ8技術資料をご覧ください。BASICと応用プログラム例はSBCZ8データパックにまとめてあります。

SBCZ8技術資料(pdf)
SBCZ8データパック(zip)
・Z8のデータシート(pdf)-Z8 Famry Design Handbook
・BASICの文法(pdf)-BASIC/DEBUG Reference Manual

BASICはシリアル端末に接続したパソコンの端末ソフトで操作します。主要なレジスタとRAMの全域を操作できるのでZ8の機能をすべて引き出すことができます。下のプログラムはパラレル端子のPORT2を動かしていわゆるLチカをやるものです。

100 REM BLINK LED
110 @246=0 :REM SET P2 AS OUTPUT
120 @2=0   :REM OUT L
130 GOSUB 200
140 @2=255 :REM OUT H
150 GOSUB 200
160 GOTO 120
200 REM DELAY SUBROUTIN
210 I=0
220 I=I+1
230 IF I<20 GOTO 220
240 RETURN

実行結果を下に示します。標準Z8の場合、PORT2に接続したLEDが約1秒ごとに点滅します。なお、PORT2は自由に使うことができますが、PORT0はアドレスバス兼用、PORT3はシリアル端子兼用ですから、慎重に操作してください。

sbcz8_blink

ザイログのCPUはZ80が有名すぎてZ8がいくぶん過小評価されているように感じます。Z8は、Z80とよく似た命令体系を持ち、捉えようによってはARMより凄い124本の汎用レジスタを備えた近代的な設計です。これを機会にZ8の魅力に触れていただければ嬉しいことです。

広告
カテゴリー: Z8 | コメントをどうぞ

SBC6303BLの新スケッチ(暫定版)

SBC6303BL(ブートローダ)の新しいスケッチが出来た。手もとのSBC6303とSBC6303BLで正しく動作しているが、あらゆる状況で正しく動作するかどうかはわからない。みなさんにもテストしてもらったほうがいいと考え、暫定版として公開することにした。新スケッチとテスト用ファイルの一式をOneDriveに置いておく。スケッチを書き換えるだけで以下のとおり動くので、SBC6303BLをお持ちの方、よろしければご協力お願いします。

SBC6303BL新スケッチのテスト用ファイル一式-sbc6303bl2.zip

ハードウェアの設定は従来どおり。SBC6303はEPROMを抜いておく。SBC6303BLはモードスイッチをBL側にする。現状、モードスイッチをRAM側にする使いかたには対応しない。増設RAMモードはないという前提で、SDカードが見付からないとき挿し忘れを警告することにした。そのほうが便利だと思うが、もし不便であればすぐに修正できる。

sbc6303_bl2mode

実行ファイルのファイル名は、いわゆる8.3形式で、拡張子がHEXまたはSとする。従来版スケッチのようにファイル名をINITPROGに書き換える必要はないが、書き換えても構わないから、上位互換性がある。実行ファイルは最大16個まで保存しておけるし、実行ファイルでないものが一緒にいくつ保存されていても構わない。なお、これらのファイルはSDカードのルートに保存する必要がある。フォルダの中身は調べない。

sbc6303bl2_drive

SBC6303とSBC6303BLを接続し、SDカードを挿して電源を入れると、まずSDカードに保存された実行ファイルをすべて表示する。以降、SBC6303のリセットスイッチを押すたびに表示の順番で実行。一巡するとまた先頭から実行する。もしSDカードを挿し忘れたりSDカードに実行ファイルがひとつもなかったりしたときには警告を表示する。

sbc6303bl2_screen

新しいスケッチは、現時点では小さな数個の実行ファイルでテストしたに過ぎない。みなさんがもっているいろいろな実行ファイルがすべてうまく動くことを確認したい。また、操作性に関するご要望、気の利いたメッセージの案なども、できる限り取り入れたい。ちなみに、現在のメッセージでavobeとなっているのはaboveが正解。さっそくやらかしてますなぁ。

カテゴリー: 6800, 書き込み装置 | コメントをどうぞ

AVR CP/Mに苦戦中

つねづねCP/Mが動くコンピュータを作りたいと思っていた。その願望はくまちゃんがプリント基板をくれたZ80-MBC2で叶えられたし、間もなくとみちゃんのSBC8080_CP/Mでも実現するらしい。これらの名作がまだ発表されていない段階で取り組んだのがAVR CP/Mシールド。組み立てを終えたが動作させられなくて、いまだにもたついている。完成までまだしばらくかかりそうなので途中経過を報告しておく。

avrcpm_shield

原案はこちらで公開されているCP/M on a AVR。乱暴な手書きの回路図はさておき、本来は5Vで動かすべきAVRを、SDカードと共通の3.3Vで動かすなど驚きの設計。さすがにそれはまずいでしょうと思うかたわら極限まで部品を減らした執念に感服する。そのシンプルさを保ったまま仕様を順守して動かすため、Arduinoのシールドの形をとった。回路図を下に示す(画像をクリックすると別窓に拡大表示します)。

avrcpm_sch

シールドとはいっても今のところスケッチを書いてアップロードすればいいという形にはなっていない。さしあたってはAVRに直接ファームウェアを書いてArduino UnoのAVRと差し替えることにした。手短にいえばArduino Unoから電源とUSB-シリアルを借りているだけ。とにかく一度ちゃんと動かすまでは取り扱いの便利さに配慮する余裕がない。

ファームウェアはこちら(歴代の各バージョンはこちら)。HEXが配布されているが、それは部品点数が増えた新しいバージョンのやつで、極限まで部品を減らした初代のハードウェアには対応しない。そうでなくても、Arduino Unoで動かすには原案のクロック20MHzを16MHzに下げるなどするためソースを再アセンブルする必要がある。

再アセンブルのための開発環境は公式な説明が見当たらないのでボクが調べた結果を述べる。ファームウェアはWindowsで動くアセンブラavrasm2.exeの書式で書かれている。(こちらで探す)。にもかかわらず、MakefileはLinuxのツールチェインを使う。どうやらLinuxのもとでWindowsのエミュレータwineを使ってアセンブルするらしい。

再アセンブルにあたってはconfig.incを編集して、最低限、クロックを下げ、DRAMアクセスを4ビット単位に定義し直す。あとはmakeとやってみて足りないと言われたツールを追加する。あるいはそのツールを必要としない古いバージョンで試す。最悪の場合、そのツールを使わないようにMakefileを書き換える。ボクは足りないと言われたSVNをインストールできなくて、これを使わないようにMakefileを書き換えた。

avrcpm_asm

こうしていちおうエラーなくHEXを作るところまでは辿り着いた。警告が6件あるが、レジスタ名の再定義というものだからたぶん無視していい。ただし、そのHEXを書き込んでもうまく動作しない。何しろ起動メッセージが表示されないのだから話にならない。せめて修正の手がかりになるような事象が見えないと、この先へ進めない。

カテゴリー: Arduino | 3件のコメント

ザイログZ8に苦戦中

ザイログZ8の試作機は、このブログで過去に2回製作し、いずれも失敗している。1号機は電源の3端子レギュレータが焼き切れた。2号機はACアダプタ直結にして3端子レギュレータをなくしたが、手作りの感光基板に組み立てたせいでたぶん断線があり、プログラムがうまく起動しない。今回はSeeed Fusionの3枚1ドルキャンペーンに乗って普通のプリント基板を起こし、少なくとも製作の工程において、過去の問題をすべて払拭した。

sbcz8

Z8の構造はZ8 Family Design Handbookに詳しく説明されている。これがほぼ唯一の資料で、セカンドオピニオンが聞けない。心細さを抱きながら描いた回路図を下に示す。アドレスバスは16ビットに設定できるが、メモリをそんなに使わないと思うので、12ビットに設定してピンを節約した。こういう設定ができる柔軟性がZ8の特徴といえる。

sbcz8sch
別窓でPDFの回路図を開く

立派な解説をしているが、実をいうとこの回路は、hello, worldはおろかLチカより簡単なテストプログラムZ8START.ASMが動いていない。Z8START.ASMは最低限の初期設定をしたあとポート2を上下に振り続ける。正常ならポート2に周波数カウンタをあてて何がしかの周波数を測定できるはずだが、残念ながらまったく振れない。現状、回路図にもプログラムにも間違いが見付からず、動かない原因が判明していない。

Z8のファミリーには内蔵ROMにBASICを書き込んだZ8671があり、そのBASICがこちらで公開されている。まだBASICを動かす段階ではないが、テストプログラムの間違いを見付ける上で参考にしようと思っている。ハードウェアのほうは参考になるものがなく、もし回路図が間違っていたらSBCZ8が正しく動くのはしばらく先のことになる。

[追記]Softyというプロジェクトが見付かったが、ハードウェアを製作したところでなぜか諦めてしまったらしい。Softyの回路図は率直に言って雑な印象を受け、テストプログラムが動かなかった可能性がある。ボクのやつもテストプログラムが動かないのだから人様の製作物をとやかく言える立場ではない。

カテゴリー: Z8 | 39件のコメント

AKI-80でBASICを動かす

SBC8080のGrant’s BASICはオリジナルに含まれるZ80の独自命令を見付けては8080の命令へ巻き戻すという方法で移植した。こんな力わざが一発で成功するはずがないから、オリジナルをいったん秋月電子通商のAKI-80で動かし、随時、まだ動くことを確認しながら作業を進めた。そんなわけでいま手もとにGrant’s BASICが動くSBC8080と、あともうひとつAKI-80がある。以降、まだ紹介していなかったAKI-80のほうを紹介する。

AKI-80_base_top

AKI-80のZ80は東芝TMPZ84C015BF-15。Z80と一緒にSIO、PIO、CTCなどファミリー一式が集積されている。そのうちSIOのAに端末を接続し、CTCの2で通信用クロックを生成する。SIOは割り込みの設定をBのほうで受け付けるため、いっそのことBに端末を接続するべきだというのが『古典電脳物語』(絶版)の見解。だが、Aを使っておけば単体のSIOで構成されたコンピュータへ流用したときボンディングオプションの影響を避けられる。

AKI-80_sch

部品点数が少ないのでプリント基板を作るまでもない。秋月電子通商のタイプBユニバーサル基板に組み立てた。端末を接続するピンヘッダは一般的なUSB-シリアル変換アダプタが直結できるように配線してある。電源もここからとる。リセットスイッチはなくてもいいが、基板単体から組み立てた人がリセットICを入手できなかったとき(入手困難とされている)、マニュアルリセットできるように取り付けておいた。

AKI-80_base_bottom

AKI-80_base_top_fig

Grant’s BASICは、CPUがZ80なら、スタートアップルーチンを書き起こすだけで移植が完了する。スタートアップルーチンの勘どころは割り込みのやりかた。第1版はSBC8080のかわりだから最終調整のしやすさを考えて8080互換のモード1を採用。第2版はZ80とSIOが本領を発揮するモード2に変更した。どちらの版もGrant’s BASICのオリジナルにしたがい端末からの入力だけが割り込みで出力はポーリング。

・AKI-80用Grant’s BASIC第1版-OneDriveのmbakia.zip
・AKI-80用Grant’s BASIC第2版-OneDriveのmbakiai.zip

スタートアップルーチンを送受信とも割り込みでやれば、よくベンチマークテストに使われるASCIIARTが劇的に高速化すると思う。挑戦中だが、なかなかうまくいかない。参考になる前例が皆無に近いのも困っている。SIOを採用したコンピュータが少なくてモード2の割り込みなんか見たことがない。ネットを検索するとZ80が8080に対してこんなに凄いって話は見付かるが、現実にその凄いところはほとんど使われなかったんだよね。

カテゴリー: 8080, Z80 | コメントをどうぞ

SBC8080_CP/M Rev.01を勉強中

1970年代のCPUを手に入れると無性に動かしてみたくなる、その程度の単純な動機でCPUボードを作り散らかしているため、hello, worldが動いてからあとのことは人様の製作物が頼り。80系のCPUボードでいうとtomi9さんのSBC8080_CP/Mが最終的にはCP/Mを動かしてくれるらしい。ツイッターで「凄く興味があります」ってしつこいくらい繰り返したら、ありがたいことに実物を送ってくれた。ありがとう、お手数おかけします。

sbc8080_cpm_top

これだけの特別仕様かもしれないが、コネクタ3個を除いて組み立て済み。最低、拡張コネクタを取り付ければSBC8080/SBC8085と組み合わせてBASICを動かせる。さらにモジュール用コネクタ2個を取り付ければSDカードが使えるが、SDカードモジュールはあるものの、あいにくモジュール用コネクタがないので、これは近い将来のお楽しみ。

sbc8080_cpm_sd

SBC8080_CP/Mの働きはATmega128が実現している。ATmega128にArduino IDEのブートローダを書き込んでおいて、用途に応じたスケッチをアップロードする方式。ブートローダは、これだけの特別仕様かもしれないが、書き込み済みだった。スケッチをアップロードするには、Arduino IDEにMegaCoreのボードマネージャを追加したあと(こちらに具体的な手順が説明されている)、ATmega128を選択。

sbc8080_cpm_atmega128

J5をショートさせるとUSB-シリアル変換アダプタから電源を供給してスケッチを書き込むことができる。もしSDカードがあれば単体で8080だかZ80だかのエミュレーションをやってCP/Mが起動するらしい。それはとても魅力的だが、今はSDカードを使えないので、SBC8080/SBC8085と組み合わせてBASICを動かす。スケッチはsbccpm_mbasic.ino。

sbc8080_cpm_serial

以前やはりtomi9さんから送って頂いたSBC-BUSを使ってBASICが動くシステムを組み立てる。といってもただボード類を挿すだけだけどね。手前がSBC8080_CP/M Rev.01で、ここにsbccpm_mbasic.inoをアップロードしてある。次がSBC8085。奥がSBC8080 SUBボードからROMとRAMを取り外したやつ。

sbc8080_cpm_system

はい、BASICが起動。ボクの理解では、SBC8080_CP/M Rev.01が自分自身のRAMにBASICを転送し、それをSBC8085につないで実行させ、SBC8080 SUBボードの8251で通信をしているんだと思う。言葉で説明するとややこしいが、ROMから起動した場合とさほど変わらない時間で素早く起動した。

sbc8080_cpm_basic

SBC8080_CP/M Rev.01に興味を持った理由は同じものを作りたいからではない。ボクは今後もおもにCPUボードを作り散らかすと思う。とはいえ、できることなら人様の製作物にうまく乗っかってhello, worldからあとの発展性を持たせたい。SBC8080_CP/M Rev.01の構造、とりわけCPUからATmega128につながった機能を取り扱う方法がわかれば、ボクなりのデザインガイドを確立できるだろう。知らんけど。

カテゴリー: 8080, 8085, 書き込み装置 | コメントをどうぞ

SBC8085が完成

SBC8085のプリント基板が届き、組み立てを完了。最少の安価な部品で動くように設計してあり、狙ったとおり比較的短時間で完成。模範製作例の写真を撮るのも趣味のひとつだから部品がぴったり垂直/水平になるよう配慮したり抵抗の向きを揃えたりしたが、特段のこだわりがなければちゃっちゃと出来上がってしまうだろう。

sbc8085_top

機能上の目標はSBC8080 CPUボード互換。SBC8080のCPUボードをSBC8085に差し替え、SUBボードはROMごとそのまま動かしてみる。バスにバッファがないから大きなシステムだと駆動能力に問題が出るかもしれないが、このくらいは大丈夫。はい動作確認も成功。生まれて初めてプリント基板のリビジョン1がうまくいった。

sbc8085_wc

8085のクロックは標準版で最高3MHz。高速版も入手可能だが、SUBボードの8251がやはり最高3MHzなので、ここらへんが妥当だと思う。Grant’s BASICを動かし、よくベンチマークテストに使われるASCIIARTを走らせた。SBC8080 CPUボードの実行時間が10分10秒で、SBC8085は6分37秒。予想どおり1.5倍の速度。

sbc8085_ascii

同じものを作ってみたいという人がいるかもしれないからプリント基板をオレンジピコさんに頒布してもらう。技術資料を下に公開する。ソフトウェアはSBC8080と完全互換なので、今回、データパックはありません。

別窓でSBC8085技術資料(PDF)を開く

聞くところによると、取り立てて用もないのに8085を持っている人がたくさんいるらしい。ただ持っていてもつまらないから(いやそれは個人の自由なんだけど)、いちど動かしてみてはどうだろうか。ことによっては、8080を動かす自信がなくてSBC8080に手を出せない人が、これをきっかけに80系のソフトウェアを体験してくれるかもしれない。どんな形にせよ、SBC8085がお役に立てるならとても嬉しい。

カテゴリー: 8085 | コメントをどうぞ