EMUZ80が完成

Z80とPIC18F47Q43で動く挑戦的なコンピュータEMUZ80が完成した。設計の目標は、できるだけ少数の安価な部品と簡素なソフトウェアで動かすこと。CPU以外のICが1個だけなので部品はもう減らない。Z80はジャンクが格安だしPIC18F47Q43も40ピンで最低の価格帯。ソフトウェアはあとでどうにかする、ってことで目標は完全に達成された。

納得のいく設計ができて試作機がうまく動いたらプリント基板を頒布してお祭り騒ぎをするのが恒例だ。その先に起きるかもしれない、ふたつの出来事に、いま期待を膨らませている。第1に、噂話でZ80を知っている人が実物を動かす面白さも知ってくれること。第2に、どこからか凄腕の週末プログラマが現れてソフトウェアを改善してくれること。

EMUZ80技術資料-emuz80_techdata.pdf(3.7Mバイト)
関連ファイル-https://github.com/vintagechips/emuz80
プリント基板頒布元-EMUZ80専用プリント基板
雑誌投稿(ボツ)記事PDF-EMUZ80の設計と製作(3.8Mバイト)

EMUZ80は虫のいい目標を達成するためにソフトウェアで多くの働きを実現している。そのソフトウェアは、ボクの力量不足で、速度に対する配慮がない。往年のCPUを現在のマイコンで動かす試みは界隈に素晴らしい先例が多数あり、精通した人も多いと思う。ボクのソフトウェアにあきれて、つい手本を示してくれちゃったりしたら嬉しい。

[2022/3/17追記]
入れ替え可能なソフトウェアが発表されましたら、順次、関連ファイルの配布元に追加いたします。emuz80_pic_~.hexは入れ替え可能なソフトウェアです。お好みでご利用いただくとともに、ソースをご覧になってアプローチの違いをお楽しみください。

カテゴリー: PIC, Z80 | 1件のコメント

CP/Mega88 on Picoを動かした

Norihiro Kumagaiさんが開発したCP/Mega88 on Picoは超シンプルなCP/Mマシン。どのくらいシンプルかっていうのが下の写真。まんまRaspberry pi Pico(以下Pico)だから、もはや電子工作ですらない。ボクは過去に何回かCP/Mマシンを作ろうとして挫折しているが、さすがにこれは失敗しない。簡単に動いてくれたので、ここに過程をまとめておく。

CP/Mega88 on Picoを作る流れは、概略、GithubのプロジェクトをクローニングしてPicoの開発環境でビルドする。公式な説明は開発環境をUbuntu20に構築しているが、ボクは初代Raspberry Piに構築した。Raspberry Pi OSであればシェルスクリプト1発で開発環境が出来上がる(Getting started with Raspberry Pi Pico参照)。まあ4時間ほどかかるけどね。

クローニングとビルドの手順を下に示す。必要な操作が濃い文字、それに対する反応が薄い文字。Picoの実行ファイルはcpmega88.uf2の名前で作成される。Raspberry Pi OSの場合、それを/bootへコピーしておくとSDカードをパソコンへ差し替えて取り出せる。パソコンでcpmega88.uf2をPicoへ入れ、とりあえずフロッピーなしのCP/Mマシンが完成。

pi@raspberrypi:~ $ git clone https://github.com/tendai22/cp-mega88-pico.git
Cloning into 'cp-mega88-pico'…
remote: Enumerating objects: 288, done.
remote: Counting objects: 100% (288/288), done.
remote: Compressing objects: 100% (132/132), done.
remote: Total 288 (delta 205), reused 232 (delta 153), pack-reused 0
Receiving objects: 100% (288/288), 128.67 KiB | 460.00 KiB/s, done.
Resolving deltas: 100% (205/205), done.
pi@raspberrypi:~ $ cd cp-mega88-pico
pi@raspberrypi:~/cp-mega88-pico $ git checkout develop
Branch 'develop' set up to track remote branch 'develop' from 'origin'.
Switched to a new branch 'develop'
pi@raspberrypi:~/cp-mega88-pico $ cmake .
Using PICO_SDK_PATH from environment ('/home/pi/pico/pico-sdk')
PICO_SDK_PATH is /home/pi/pico/pico-sdk
Defaulting PICO_PLATFORM to rp2040 since not specified.
Defaulting PICO platform compiler to pico_arm_gcc since not specified.
-- Defaulting build type to 'Release' since not specified.
PICO compiler is pico_arm_gcc
-- The C compiler identification is GNU 8.3.1
-- The CXX compiler identification is GNU 8.3.1
-- The ASM compiler identification is GNU
-- Found assembler: /usr/bin/arm-none-eabi-gcc
Defaulting PICO target board to pico since not specified.
Using board configuration from /home/pi/pico/pico-sdk/src/boards/include/boards/pico.h
-- Found Python3: /usr/bin/python3.9 (found version "3.9.2") found components: Interpreter
TinyUSB available at /home/pi/pico/pico-sdk/lib/tinyusb/src/portable/raspberrypi/rp2040; enabling build support for USB.
Using PICO_EXAMPLES_PATH from environment ('/home/pi/pico/pico-examples')
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pi/cp-mega88-pico
pi@raspberrypi:~/cp-mega88-pico $ make
Scanning dependencies of target ELF2UF2Build
[ 1%] Creating directories for 'ELF2UF2Build'
[ 2%] No download step for 'ELF2UF2Build'

《途中省略》

[ 96%] Building C object CMakeFiles/cpmega88.dir/home/pi/pico/pico-sdk/src/rp2_common/pico_unique_id/unique_id.c.obj
[ 98%] Building C object CMakeFiles/cpmega88.dir/home/pi/pico/pico-sdk/src/rp2_common/hardware_spi/spi.c.obj
[100%] Linking CXX executable cpmega88.elf
[100%] Built target cpmega88
pi@raspberrypi:~/cp-mega88-pico $ sudo cp cpmega88.uf2 /boot
pi@raspberrypi:~/cp-mega88-pico $

フロッピーに相当するのはディスクイメージ。これはz80packのGithubのプロジェクトからもらう。ボクは、公式の説明とは違うが、パソコンでプロジェクトごとDownload Zipし、展開し、z80pack-master > cpmsim > disks > libraryで見繕った。ディスクイメージはたくさんあり、もし選択に迷ったらcpm2-1.dskが無難だと思う。

Picoをパソコンに接続し、端末ソフトを開く。この時点でもうCP/Mega88 on Picoが動いているが、念のためPicoを抜き差しして再起動させるとあらためて一連のメッセージが読めるからわかりやすい。これが、フロッピーなしのCP/Mマシンに相当。そこへフロッピーを装着する。まず、プロンプトにxrを入力し、PicoでXMODEMの受信を開始する。

続いて端末でXMODEMの送信をやる。端末がTeraTermの場合、ファイル > 転送 > XMODEM > 送信と選択、ファイルチューザーでディスクイメージを選択。

これでディスクイメージがPicoのフラッシュメモリに書き込まれる。いわば、フロッピーの装着が完了した状態。プロンプトにbを入力するとブートしてCP/Mが起動する。

ボクが過去にCP/Mマシンを作ろうとして挫折したことは冒頭で述べたとおり。もうひとつ、Picoを動かすことにも挫折していて、買ってすぐLチカをやったきりになっていた。その両方をCP/Mega88 on Picoが実現してくれた。いやまだ独自のプログラムは書けないが、動く実例が与えられたのだからソースを見て研究しようと思う。

カテゴリー: 8080, Linux, RaspBerryPi, Z80 | 6件のコメント

PIC18F47Q43のUARTで悩む

PIC18F47Q43をZ80につないでIC2個のみのコンピュータを作ろうと考えている。PICはZ80に対し、NCOでクロックを生成、ポートでリセットして起動、Z80からアクセスが来たらCLCでウェイトを出しておいてベクタ割り込みでメモリやUARTの働きをする。UARTを除くモジュールの雑なテストはすでに成功。ところが、ちょろいと思ったUARTがダメ。PICで普通に動かしてみるだけの試みがいまだ成功していない。

UARTのテストは慣例にしたがい端末にハローワールドを表示したあと入力のエコーバックをやってみるやつ。ハローワールドは成功。しかし入力のエコーバックができない。見てもしかたがないと思うが、いちおうスクショを貼っておく。受信ピンは製造元推奨のRA7、初期設定から受信までマニュアルどおりの手順。不幸中の幸いで送信はできるからあちこちのフラグを表示してみたら入力をしても受信可フラグが立たない模様。

ソフトウェアに間違いが見付からないのでハードウェアをテスト。RA7にLEDをつなぎ、ビデオカメラで撮影しながら端末のキーを押し、コマ送りして見るとLEDが一瞬点灯している。すなわち、入力した信号はRA7に届いており、ハンダ不良などハードウェアに起因する誤りもなさそう。結局、思いつく限りの怪しいところを全部調べて何ひとつ間違いがないのに受信をやらないという、たいへん困った状況に直面している。

デバッグが難航するとついシリコンエラータを疑ってしまう。これはまずい。自分以外の何かが悪いと考える癖がついたら今後ほかの問題も解決できない。そろそろ決着を付けようと思い、最後にもう1回、余ったプリント基板で最初から組み立てた。部品は必要最小限にとどめてミスの紛れ込む余地を減らす。RA7には信号が電源へ回り込むのを防ぐ回路があり、これも確実に迂回したいので、安直な方法として受信ピンをRA5に切り替えた。

結果がこちら。あら不思議、RA5がちゃんと受信をやっている。信号が電源へ回り込むのを防ぐ回路が悪さをしていたのかと思い、RA5にもそれをつないでみたが、やはり正しく動く。その後あれこれ確認したら、RA7で受信したときだけがNGで、ほかはすべてOK。とにかく動いたのだから、それに沿ってプリント基板を作り直せばいい。現状のプリント基板は書き込み端子が裏返しになっていて、いずれにしろ作り直しが確定なのだ。

RA7で受信するとNGで、ほかがOKな理由は、まったくわからない。誰かが指摘してくれたら嬉しいから情報をまとめておく。ハードウェアは送受信とも信号をピンに直結したので間違えようがない。ソフトウェアは全体をGistに貼り抜粋を下に示す。抜粋はブログの調子がいいと行番号を表示する。その行番号で30~32のコメントアウトしてあるところがRA7による受信、34~36がRA5による受信。さあRA7とRA5の違いはどこだ。

#include <xc.h>
#include <stdio.h>

// UART3 Transmit
void putch(char c) {
    while(!U3TXIF); // Tx interrupt flag not set
    U3TXB = c;
}

// UART3 Recive
char getch(void) {
    while(!U3RXIF); // Rx interrupt flag not set
    return U3RXB;
}

void main(void) {
    // System initialize
    OSCFRQ = 0x08; // 64MHz internal OSC

    // UART3 initialize
    U3BRG = 416; // 9600bps @ 64MHz
    
    U3TXEN = 1; // Transmitter enable
    U3RXEN = 1; // Receiver enable
    
    RA6PPS = 0x26;  // RA6->UART3TX
    TRISA6 = 0; // TX set as output
    ANSELA6 = 0; // Disable analog function

//    U3RXPPS = 0x07; // UART3RX->RA7
//    TRISA7 = 1; // RX set as input
//    ANSELA7 = 0; // Disable analog function

    U3RXPPS = 0x05; // UART3RX->RA5
    TRISA5 = 1; // RX set as input
    ANSELA5 = 0; // Disable analog function
    
    U3ON = 1; // Serial port enable
    
    printf("hello, world\r\n");
    while(1) putch(getch()); 
}

ボクが間違っているという指摘がないか、間違っていないと言ってもらえたら、そのときはシリコンエラータを疑ってもいいと思う。今そういう報告をどこで受け付けているのか調査中。にしてもさ、世界中で無数に使われているであろう製品の、こんなにあからさまな問題をボクが最初に報告するなんて、ちょっと考えられないよね。ボクが間違っていたときごめんなさいをいう心の準備のほうが優先かもね。

[2022/1/14追記]
ツイッターのほうにskyriverさんからご指摘があり、ボクの間違いが判明しました。コンフィグのFEXTOSCをOFFにしたらRA7で受信しました。ありがとうございます。Gistに貼った全ソースの1行目(行番号5)でやらかしています。お騒がせ致しました。

カテゴリー: PIC, Z80, 世間話 | コメントをどうぞ

SBC6809Eが完成

[2022/2/2追記]
MC6883は高速モードだとDRAMのリフレッシュをしないようなのでEPROMには標準モードまたはマップタイプ#0アドレス依存モードのBASICを書き込んでください。その際EPROMにはBASICの先頭アドレスが$E000となるように書き込みます(SBC6809と同じ)。

レトロCPUがまだレトロではなかったころMC6809EとMC6883を入手した知人が自作のコンピュータを見せびらかしに来て以来ボクはずっとそれらに憧れがあった。MC6809Eは比較的入手しやすい。MC6883は少なくとも国内だと入手困難。何かの機会にそんな話をしたところRetro PC Galleryを運営するはせりんさんが手持ちのMC6883をプレゼントしてくださった。おかげで下のようなコンピュータを完成できたから情報をまとめておく。

SBC6809E全回路図(PDF)-SBC6809E_sch.pdf
SBC6809E部品表(PDF)-SBC6809E_bom.pdf
SBC6809Eデータパック(OneDriveからダウンロード)-sbc6809e_datapack.zip
プリント基板頒布元-オレンジピコショップのSBC6809E専用プリント基板

MC6883はくだんの知人からDRAMコントローラと聞かされていた。しかし、そういう観点で見るといろいろ親切すぎるし一部に役割不明なピンがある。改めて調べたら、これはCoCoの愛称で知られるタンディー・カラー・コンピュータのカスタムICらしい。役割不明なピンはビデオ表示用。ビデオ表示までやると10cm四方のプリント基板にはとうてい収まらないので、いつもどおり端末をつないで操作する形式をとった。

MC6883が要求する原発振周波数(クロックの16倍)とリフレッシュ頻度、MC6850が要求する通信クロック、MC6809Eが要求するリセット信号はPIC12F1822で作ることにした。ビデオ表示をやらないことはむしろ設計上のメリットになる。NTSCのタイミングに合わせる必要がないため、原発振周波数を上げてMC6809Eを最高速(1MHzまたは2MHz)で動かせるし、リフレッシュ頻度を下げて過剰なリフレッシュを避けられる。

MC6883はソフトウェアでマップタイプの#0と#1を切り替えられる。#0は簡単にいうとCoCo互換でRAMが32Kバイト×2バンク。#1はRAMがほぼ64Kバイトだが普通サイズのROMを取り付ける余地がなくてBASICは外部から読み込む想定。どっちもいまいち。ボクの理想はRAMが約56Kバイト、ROMが8Kバイト、IOが256バイトの、いわば普通の構成、しいて言えば変形#1。以上のどれでも実現できるようにアドレスデコーダをGALで作った。

MC6883はさらにMC6809Eへ出すクロックも標準モード1MHzと高速モード2MHzをソフトウェアで切り替えられる。試作機は高速モードに対応したMC68B09EとMC68B50を取り付けてあるが、情けない話、アクセスタイムの速いDRAMを買う経済的余裕がなくて高速モードを試していない。したがって推奨は標準モード。データパックには4種のBASICを用意してあり、そのうちBASIC9E_map1_slow.hexを使っていただくのが無難。

以上のとおり製作するとマップタイプは変形#1、RAMが約56Kバイトになる。BASICはリセット後にRAMの容量を調べるから起動まで少々(約1秒ほど)待たされる。実はこのBASICもCoCo由来で、RAMが32Kバイト以上あると空き容量を負の数字で表示する。正の数字に直せば約56Kバイトとなって実態と一致する。それ以外は今のところ問題なく動作している。今後もし新たな問題が発覚したらマップタイプ#0を推奨に変更しようと思う。

通信速度は9600bps、通信形式は8ビット、パリティーなし、ストップビット1です。

SBC6809Eのプリント基板は、当初、プリント基板CADの自動配線がネを上げたのを手配線で何とかまとめた労作。頑張った証として頒布することにしたが、みんなも作ってねと気楽に言うことはできない。MC6883が入手困難だし、DRAMを8個揃えると結構な出費になる。だから、すでにそれらを持っている人に言いたい。凄いだろ、DRAMが64Kバイトあるんだぜ、PIC12F1822でリフレッシュを最適化しているんだぜ、動かすと面白いぞ。

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

SD8031のハードだけ完成

日本電気が1979年に発売したパソコンPC-8001をいまだ後生大事に持っている。使う面白さはもう十分に味わって、ここ数年は電子工作の対象。その一環として製作した拡張基板のひとつが下に示すSD8031。フロッピーディスクドライブPC-8031のエミュレータでフロッピーディスクのかわりにSDカードを使う。見た目はまあまあカッコいいでしょ。

ファームウェアの開発効率を考慮してマイコンはATmega32A、回路の要所はMightyCore互換。したがってこちらの説明にしたがいArduino IDEが対応するし同ライブラリが使える。マイコンにブートローダを書き込むところが難関かと思うが、みんな持ってるTL866で書き込めた。これでSDカードの取り扱いもポートの振り方も自由自在(のはず)。

※画像の回路図をクリックするとPDFの回路図が開きます。

USB-シリアル変換アダプタとGroveがつながるようになっていて電源をこれらまたはACアダプタからとる。複数からとると炎上するのでUSB-シリアル変換アダプタの電源はソルダパットで切断できるようになっている。ちなみにUSB-シリアル変換アダプタのコネクタ取付穴は径を間違えている(配線のゆがみもある)が力任せに押し込めば挿さる。

ハードウェアに誤りがないことを確認するため豊四季タイニーBASICのArduino版をアップロードして起動に成功。このときのソースは紛失してしまったので配布できないがUnoのソースがあらかた通ったように記憶しているから必要になったらまた作ろうと思う。

さあファームウェアを作るぞというところでふと気付いたのだが、PC-8001にはこれが直接つながるコネクタが見当たらない。調べてみると中間に拡張ユニットか専用インタフェースを挟むらしい。そんなものは持っていないので開発にあたり動作確認ができない。ということで続きはまたいつか。はい、いつもどおり行き当たりばったりでやってます。

カテゴリー: Arduino, 世間話 | コメントをどうぞ

Z8試作基板が8年ぶりに完成

ザイログZ8はなかなかの難物で過去に試作基板を3台も製作している。初代は手作りの力作だったが電源が燃えて失敗、感光基板の2代目はプログラムが起動せず、プリント基板の3代目で無事に動作した。何はともあれ動いたのだから動かしかたは理解した。過去の間違いを振り返りながら、この8年ほど放置してあった初代をあらためて完成させた。

初代は2013年の設計で芸風が今とだいぶ違う。電源は今なら5VセンタープラスのACアダプタ直結だけど、これは整流と安定化をやっていて8V以上のACアダプタが全部OK。ただし、消費電流のデカいNMOSのZ8だと三端子レギュレータが燃える。だからCMOSのZ8を使い、燃えた三端子レギュレータを交換して、回路はそのまま。

Z8を外部ROMから起動させるにはP0/A8~P3/A11をプルダウンする必要がある。2代目でプログラムが起動しなかった理由はプルダウンの抵抗値が大きすぎたから。マニュアルに最適値が示されていなくて困ったが、3代目を製作する過程で試行錯誤により6.8kΩと判断。その結果を初代に反映し、取り付けてあった100kΩを6.8kΩに交換した。

修正した初代の回路図を下に示す。端末がつながるようにUSB-シリアル変換アダプタの端子を追加。3代目で74573に変更したアドレスラッチはまだ74374のままでアドレスの確定が微妙に遅れるが読み書きには間に合うから問題がない。あとは3代目と同じ。

修正した初代の回路図(PDF)─sbcz8v5_sch.pdf

この絶対に動くはずの回路でも最初の電源オンでは動作しないというジンクスが健在。配線を見直して間違いをひとつ発見、修正してようやくBASIC/DEBUGが起動した。下の画面はテストプログラムで400以下の素数を全部表示したところ。

久しぶりに手配線をやって独特の味わいに酔っている。といっても大部分は8年前にやったやつで今回はUSB-シリアル変換アダプタの接続と間違いの修正だけ。その数本で達成感が得られて誠に効率がいい。ほかにもやりかけの基板がないか探してみようと思う。

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

8752同等品でBASIC-52が動いた

インテルがMCS-51ファミリーのために作ったBASIC-52は組み込み用のCPUでここまでやるかってくらい高機能。ぜひ動かしてみたいと思い、先達の製作例を調べたら、ああそうか、高機能なんだから回路も複雑になるわけだ。でもさ、美味しいところだけ安直にいただきたいよね。てことで、機能の一部を捨てるかわりに回路をぐっと簡略化したのが下に示すMCS8051。うまいこと動いちゃったので、ここに情報をまとめておく。

MCS8051ではBASIC-52をCPUの内蔵ROMに持たせて外部ROMをなくした。その結果、外部ROMはもちろんのことアドレスデコーダやプルアップ抵抗など多くの部品がごっそり不要となった。詳細は下のMCS8051技術資料をご覧いただきたい。引き換えに捨てた機能は、外部ROMからデータを読み込むXFER命令とか、外部EPROMに書き込むPROG命令とか、まあだいたいそのあたりかな。こういうの、いらないでしょ(個人の感想です)。

MCS8051技術資料-PDFを別窓で開く
MCS8051データパック-ZIPをダウンロードする

CPUはEPROMを内蔵した8752ということになるが、今や入手困難だから同等品で代替する。最速はSTC89C52RC/40MHz、時間軸の正確さでは8752/11.0592MHz、なんだけどCPUと水晶振動子をソケットにしておいていろいろ差し替えられたらいいよね。問題は水晶のところのコンデンサ。規定にしたがうと10pF~47pFまで幅がある。ただ実際は何でもokみたい。試作機は33pFで全部の組み合わせが安定動作した。保証はしないけどさ。

BASIC-52は変数名が最大8文字(識別は先頭2文字)、浮動小数点計算ができる、などマイクロソフトBASICに近い。ASCIIART.BASがそのまま動くんじゃないかと思って試したら、機能的にはFOR~NEXTをGOTOで抜けるところがエラーになってしまった。ここと細部の書式を調整して修正終わり。実行したら57秒で完走してびっくりだよ。はせりんさんがまとめているASCIIART(マンデルブロ集合)ベンチマークでトップクラスの速度だもん。

10 FOR Y=-12 TO 12
20 FOR X=-39 TO 39
30 CA=X*0.0458
40 CB=Y*0.08333
50 A=CA
60 B=CB
70 I=0
80 T=A*A-B*B+CA
90 B=2*A*B+CB
100 A=T
110 IF (A*A+B*B)>4 THEN GOTO 150
120 I=I+1:IF I<=15 THEN GOTO 80
130 PRINT " ",
140 GOTO 170
150 IF I>9 THEN I=I+7
160 PRINT CHR(48+I),
170 NEXT X
180 PRINT
190 NEXT Y

とはいえBASIC-52の特徴は速度より各種レジスタの設定や割り込みなどでCPUの働きを細かく制御できること。ポート1を使ったLチカのプログラムを下に示す。この記述で1秒おきにタイマー割り込みが掛かってLEDの点灯/消灯が切り替わる。ただし、その1秒は水晶振動子が11.0592MHzの場合。実例は40MHzだからかなり早い。この点はシステム変数XTALに水晶振動子の周波数を代入することで調整できるようになっている。

10 CLOCK 1
20 PORT1=255
30 TIME=0
40 ONTIME 1,100
50 GOTO 50
100 REM TIMER INTERRUPT
110 PORT1=PORT1.XOR.255
120 ONTIME TIME+1,100
130 RETI

CPUが8752同等品なのにどうして名前がMCS8051かというと取っ掛かりのところで勘違いをして今さら変更できなくなったから。あと1か所シルクの間違いも指摘されているが、やはり内緒にしてそのまま行こうと思う。実用性に影響のないところでひとつふたつミスってるほうがかわいいでしょ。じゃあ恒例のお祭り騒ぎするね。このプリント基板はオレンジピコショップに頒布してもらいます。よろしくお願いします。

カテゴリー: 8051 | 1件のコメント

デジットのジャンク基板もう2枚を動かした

大阪・日本橋のデジットで大安売りされていたらしいジャンクのマイコンボード、前回の投稿のあとさらにもう2枚をT.Tomo JE6LVE/JP3AELさんから頂いてしまった。写真のKBC-Z11とTMP68301基板(正式名称不明)。どうもすみません、ありがとうございます。てわけで関東在住であるにもかかわらず工作机周辺がデジットのジャンクだらけになっている。

KBC-Z11のCPUはTMPZ84C011で、Z80とCTCと独自設計のポートをいっぱい持っている。蔵書の『プロセッサ』に解説があって、たちまちLチカのプログラムが完成。しかし、コネクタのピン配置とジャンパの設定を調べる作業に難航。写真を撮ってパターンをなぞるんだけど、何でまたこんなところにべったりとシルク印刷しちゃうかね。

なぁんて愚痴を言っているうちに前回と同様、みかんとひよどりさんが調査結果を公開してくれた。いやボクもそれなりのところまでは調べたんだけど、結局、果報は寝て待て、になっちゃった。プログラムを27256に書き、JP3のH側にジャンパを挿し、組み込みLEDでLチカに成功。シリアルがないCPUだからこれがすべて。はいミッションを完了。

TMP68301基板のCPUは68kと制御信号設定機能とシリアルとパラレルを組み込んだ凄いやつ。自慢じゃないけどボクは68kをまったく知らないから動かすのは無理、そのうちやってみる、なんて言ってたらcomonekoさんがちゃっちゃと動かしてROMのジャンパ設定RAMのジャンパ設定を教えてくれた。両方とも32Kバイトのタイプだとこんな感じ。

こうなったらもう他人の褌で相撲を取るわ。comonekoさんのプログラムをほぼそのままパクり、パラレルでLチカに成功。68kのプログラムを初めて書いた記念にソースをGistへ貼っておく。まだシリアルを動かしていないが、それは昔ながらの格好をしていて現在のパソコンだとつなぎにくいため先送り。てことでさしあたりのミッションを完了。

ことによっては廃棄されていたかもしれない基板で規則正しく点滅するLEDは、ちょっと感動的な光景だね。基板を進呈してくれたT.Tomo JE6LVE/JP3AELさん、KBC-Z11の情報をくれたみかんとひよどりさん、TMP68301基板のLチカでボクのやる気スイッチを押したばかりか最後は褌まで貸してくれたcomonekoさんに改めてお礼申し上げます。

カテゴリー: 68000, Z80 | 2件のコメント

デジットのKBC-Z84015Sを動かした

大阪・日本橋のデジットが移転にともなう閉店セールで大安売りをやっていると知った(6月13日まで)。一般的な部品は通販で買えるがマイコン基板はジャンクの扱いになって実店舗販売のみ。関東在住の身としては指をくわえて見てるだけ、かと思ったら、このブログにたびたびお越しになるDAIさんが進呈してくれた。どうもありがとうございます。

KBC-Z84015SはTMPZ84C015のマイコン基板、KBC-Z84015EMはそのICE対応版。コネクタのピン配置などは同じで、それをみかんとひよどりさんが公開してくれた。ボクはこれらの基板とよく似たKBC-Z84Sをもっていて、取り扱い説明書は多くの説明が共通にあてはまるようだ。両方を突き合わせ、全貌が判明。さあ端末をつないでBASICを動かすぞ。

CPUがTMPZ84C015だと動かしかたはどれもみな似たようなもの。すでに秋月電子通商のAKI-80でBASICが動いており、あとは微妙な差異を埋めるだけ。問題はCTCのタイマモードで通信速度を決めているところ。デジットのマイコン基板はクロックが6.144MHzで、その方法だと半端な通信速度になってしまうから、CTCをカウンタモードで使った。

KBC-Z84015Sで動くBASICのソースとHEX-MBKBC.zip(116Kバイト)

CN1(50ピン)の結線図を下に示す。 KBC-Z84015S/KBC-Z84015EMとも同じ。CLKはCN2(30ピン)の29番ピンから引っ張ってきてここへつなぐ。電源はUSB-シリアル変換アダプタからとっている(バスパワー)が、基板上のコンデンサがすべて放電した状態でつなぐと突入電流に耐えられないことがあるため、別にスイッチ付き電源を用意するほうが無難。

KBC-Z84015S/KBC-Z84015EMには32KバイトのSRAMが取り付けられているが、ソルダバッドの初期設定により8Kバイトのみが有効。ただし、ゴーストの影響でBASICからは32Kバイトに見え、起動時、フリーのサイズを間違って表示する。小さなプログラムはそのまま動かして問題がない。きちんとしたい場合はソルダバッドJ2のAを短絡、Bを開放。

上の画面表示例で起動メッセージに続いて入力しているのはいわゆるLチカ、基板上の2本のLEDを交互に点灯させるプログラム。実行結果を下に示す。ジャンクの扱いとはいえ機能は完璧、見た目もきれい。普通に売っていても魅力的なのに聞くところでは百数十円らしい。いけね、いただきものを値踏みしちゃった。ボクにとってはプライスレスです。

知らない土地の行ったことがないお店で段ボール箱に放り込まれていたジャンクが、こうして手もとで動いているのは、考えてみれば不思議なもんだね。あちこちに散らばる個人の思いや情報をネットが結びつけた結果だと思う。進呈してくれたDAIさんと貴重な資料を公開してくれたみかんとひよどりさんに改めてお礼申し上げます。

カテゴリー: Z80 | 1件のコメント

SBC1802最終版が完成

RCA(インターシル/ルネサス)のCDP1802、通称COSMACはレトロCPUの実物を動かしてみる趣味と相性がいいと思う。ガリレオに乗って木星へ行った実績があり、微妙に偏屈な仕様を備え、速度はともかく低消費電力を目指した点が個性的。すなわち、夢と壁と設計上の目標が揃っている。そりゃあ挑戦するよね。出来上がったのがこちら、SBC1802。

CDP1802はインテルのCPUを基準にすればプログラミングモデルが偏屈だがハードウェアはまあ普通。特に8085とよく似ていてメモリまわりはSBC8085のコピペで完成。32KバイトのROMとRAMをつなぐもっとも簡単な構成だからアドレスデコーダは74HC04の1素子しか使わない。残り5素子がもったいないのでステータス等のインジケータを付けた。

まだ消費電力がどのくらい低いかわからない段階で作った試作機がこちら。バスパワーで動くだろうとは思ったが、ぜんぜんダメだったときに備えてACアダプタがつながる。そしてもしギリギリでダメだったらインジケータを簡略化して消費電力を抑えようという魂胆。この配線は最終版に残してあるが、説明が面倒くさいから隠し機能ってことで。

ソフトウェアはRCA BASIC3。端末との通信速度を自動判別するためクロックは適当でいいやと思ったら一部のUSB-シリアル変換アダプタでうまくいかない。しかたなく1.79MHz指定、RCAの方針どおり速度より低消費電力を重視することになった。ASCIIARTの実行時間は45分48秒。遅い! んだけどクロックを2倍にしたところでやっぱりダンペコ。

はせりんさん集計のASCIIART(マンデルブロ集合)ベンチマーク

ソフトウェアは、狙ったわけではないが、The 1802 Membership Cardで配布しているバイナリのいくつかが使えると判明。yanatakaさんに教えてもらってEPROMにMCSMP20A.binを焼いたらBASIC3を含むモニタを起動することができた。ソフトウェアの勉強不足は認めよう。その分これから先もいろいろな発見があると思う。

SBC1802に関する技術的な資料とソフトウェアを下のリンクで公開する。プリント基板はスイッチサイエンスさんとオレンジピコショップさんで頒布している。

SBC1802技術資料-PDF直リンク
SBC1802データパック-ZIPダウンロード
プリント基板頒布元
スイッチサイエンス-SBC1802ルーズキット
オレンジピコショップ-SBC1802専用プリント基板

前回の投稿で述べたとおり、SBC1802の開発過程ではたくさんのかたにアドバイスをいただいた。まさか、リリースしたあともなおみなさんの力で機能が向上するとは思わなかった。ありがたい限り、といって気付いたのだが、過去の製作物でも多かれ少なかれボクのチョンボをみなさんに救ってもらってるよね、ごめんなさい、全部まとめてありがとう。

カテゴリー: COSMAC | 2件のコメント