ZK-80 mini (PIC32MXを使った1チップTK-80互換機)
2013年7月10日
ZK-80 miniを紹介します。NECのTK-80互換機で、Microchip社のPIC32MX120F032Bを用いて1チップで構成されています。

実行中の動画です。
回路図は次の通りです(クリックで拡大表示)。

PIC32MX120F032Bと基本構成のコンデンサー以外には、7セグメントLED・スイッチ・抵抗だけのシンプルな構成です。水晶は使わずに、PIC内部のRC発振を用いています。
LEDのダイナミック点灯では、一度に点灯するLEDを一つだけに絞ることで、トランジスターを使わない回路構成にしてあります。そのため、表示が若干暗めですが、実用上は差し支えない範囲に収まりました。なお、R2-R5の抵抗値を220 Ωまで下げると若干明るくなるかも知れません(PICの最大定格出力になります)。
180529追記
このZK-80 miniのキットが、Yahooストアのオレンジピコにて販売されることになりました。ピコソフトの宇喜多さん、どうも有り難うございます。
オマケのZK-MIPS miniも、お試しください。
ZK-80 mini ver 0.2のダウンロードはこちらから。
ZK-80 mini ver 0.22のダウンロードはこちらから。
ZK-80 mini ver 0.23のダウンロードはこちらから。
ライセンスは、LGPL v2.0です。

実行中の動画です。
回路図は次の通りです(クリックで拡大表示)。

PIC32MX120F032Bと基本構成のコンデンサー以外には、7セグメントLED・スイッチ・抵抗だけのシンプルな構成です。水晶は使わずに、PIC内部のRC発振を用いています。
LEDのダイナミック点灯では、一度に点灯するLEDを一つだけに絞ることで、トランジスターを使わない回路構成にしてあります。そのため、表示が若干暗めですが、実用上は差し支えない範囲に収まりました。なお、R2-R5の抵抗値を220 Ωまで下げると若干明るくなるかも知れません(PICの最大定格出力になります)。
180529追記
このZK-80 miniのキットが、Yahooストアのオレンジピコにて販売されることになりました。ピコソフトの宇喜多さん、どうも有り難うございます。
オマケのZK-MIPS miniも、お試しください。
ZK-80 mini ver 0.23のダウンロードはこちらから。
ライセンスは、LGPL v2.0です。
コメント
Katsumi (2013年7月13日 14:02:54)
ver 0.22をアップロードしました。プログラムを微調整したので、動作安定性が向上しているはずです。また、リセットスイッチを押したときに編集したプログラムが変更されてしまわないようにしました。
e.naka (2013年7月18日 14:25:08)
アノードコモントカソードコモンの使い分けに目からうろこ。
スピーカーも欲しかった。
スピーカーも欲しかった。
Katsumi (2013年7月19日 07:57:11)
e.nakaさん、こんにちは。
スピーカーとか、追加の部品が要る実装に関しては、なかなか情報が無くて…。
考えようによっては、そういった物は実機のTK-80と同じく、皆さんで追加とコードの終生という事でどうでしょう(笑)。ポートが3つ(RA2-4)、空いていますし。
プログラムのセーブとロードもまだ対応できていませんが、これに関してはRB0/RB1を介したシリアル通信で実装しようと思っています。
スピーカーとか、追加の部品が要る実装に関しては、なかなか情報が無くて…。
考えようによっては、そういった物は実機のTK-80と同じく、皆さんで追加とコードの終生という事でどうでしょう(笑)。ポートが3つ(RA2-4)、空いていますし。
プログラムのセーブとロードもまだ対応できていませんが、これに関してはRB0/RB1を介したシリアル通信で実装しようと思っています。
T.YANA (2015年6月14日 02:13:03)
作ってみました。圧電ブザーもつないでペリフェラルに割り当てました。TK-80のプログラムがほぼそのまま動いてとってもいいですね。
ついでにTK-80のモニタリストを打ち込んで差し替え、PIC32MX150F128Bのプログラムメモリ余裕分にデモプログラムをいくつか入れて簡易ロード機能をつけてみました。
後はEEPROMをI2Cでつないでセーブ・ロードを実現しようと奮闘中です。
ついでにTK-80のモニタリストを打ち込んで差し替え、PIC32MX150F128Bのプログラムメモリ余裕分にデモプログラムをいくつか入れて簡易ロード機能をつけてみました。
後はEEPROMをI2Cでつないでセーブ・ロードを実現しようと奮闘中です。
Katsumi (2015年6月14日 13:37:20)
T.YANAさん
初めて製作の報告を頂いて、とっても嬉しいです。そうですか、TK-80のプログラムがそのまま動きますか。それは、良かったです。TK-80の実機を持っていない(購入を検討したことはありましたが)ので、そのあたりが分からなかったのです。
色々改造なさっているようで、このあたりもTK-80の醍醐味ですよね。もし良かったら、その様子も公開なさって頂けたらと思います。
今後ともどうぞよろしくお願いします。
初めて製作の報告を頂いて、とっても嬉しいです。そうですか、TK-80のプログラムがそのまま動きますか。それは、良かったです。TK-80の実機を持っていない(購入を検討したことはありましたが)ので、そのあたりが分からなかったのです。
色々改造なさっているようで、このあたりもTK-80の醍醐味ですよね。もし良かったら、その様子も公開なさって頂けたらと思います。
今後ともどうぞよろしくお願いします。
T.YANA (2015年6月23日 07:08:35)
私のスキルではEEPROMをI2Cでつなぐことができずに断念し、代わりにSD-CARDを乗せました。無駄に大容量ですが、セーブ、ロードできる上にSD-CARDを挿し替えればパソコンでも読み書きできるので便利となりました。
ところでひとつ教えていただければありがたいのですが、プログラムを修正しているうちにいつの間にか、実行中にリセットを掛けると8000hから数バイト(7~11Byte)がゼロクリアしてしまうという現象が現れるようになりました。
回避方法について情報があればうれしいのですが。
ところでひとつ教えていただければありがたいのですが、プログラムを修正しているうちにいつの間にか、実行中にリセットを掛けると8000hから数バイト(7~11Byte)がゼロクリアしてしまうという現象が現れるようになりました。
回避方法について情報があればうれしいのですが。
Katsumi (2015年6月23日 12:10:44)
SDカードに繋げられるというのは、面白いですね。
リセットしたときにすべてのコードが無くなってしまうのならともかく、一部だけ書き換わってしまうというのは、変ですね。もしかしたら、コードの追加によりヒープ領域が足りなくなってて、グローバル領域まで進入してしまっているのかも知れません。もしこれが原因なら、次のような解決策が考えられます。
1)メモリー容量の大きいPIC、例えばPIC32MX130F064BとかPIC32MX150F128Bなどに置き換える。
2)TK-80で使用するRAMの容量を減らす。main.hの18行目付近と23行目付近を、両方とも"RAM[0x1700]"、あるいは両方とも"RAM[0x1600]"、等とする。
試してみて下さい。
リセットしたときにすべてのコードが無くなってしまうのならともかく、一部だけ書き換わってしまうというのは、変ですね。もしかしたら、コードの追加によりヒープ領域が足りなくなってて、グローバル領域まで進入してしまっているのかも知れません。もしこれが原因なら、次のような解決策が考えられます。
1)メモリー容量の大きいPIC、例えばPIC32MX130F064BとかPIC32MX150F128Bなどに置き換える。
2)TK-80で使用するRAMの容量を減らす。main.hの18行目付近と23行目付近を、両方とも"RAM[0x1700]"、あるいは両方とも"RAM[0x1600]"、等とする。
試してみて下さい。
T.YANA (2015年6月23日 15:15:31)
1)2)とか、オプティマイズレベルを変えてみるとか、いろいろ試してみてはいたのですが、改善しませんでした。
ですが、RAM[0x1800]の前に同量のRAM2[0x1800]を追加してやると直りました。
無駄な領域宣言でなんで直るのかわかりませんが、直ったのでよしです。
HANDY TK-80として当分の間楽しく遊べそうです。
ありがとうございました。
ですが、RAM[0x1800]の前に同量のRAM2[0x1800]を追加してやると直りました。
無駄な領域宣言でなんで直るのかわかりませんが、直ったのでよしです。
HANDY TK-80として当分の間楽しく遊べそうです。
ありがとうございました。
Katsumi (2015年6月23日 16:50:40)
解決方法が見つかって、良かったですね。何かの領域が、RAM領域と重なっているのでしょう。その部分に別の使用しない領域を割り当てることで直っているのですね。
原因として考えられるのは、追加したコードのグローバル関数の割り当て部分でしょうか。あるいは、ヒープ領域をはみ出している可能性があるので、ヒープ領域を少し大きく取ることで改善するかも知れません。
原因として考えられるのは、追加したコードのグローバル関数の割り当て部分でしょうか。あるいは、ヒープ領域をはみ出している可能性があるので、ヒープ領域を少し大きく取ることで改善するかも知れません。
名無しさん (2015年11月10日 23:49:38)
カソードコモンのLEDを使いたいのですが、PICのIO足りませんよね。
BCDで出して74HC138でも付ければなんとかなりそうですが、極力外付けしたくありませんし、なにか良い案ありますでしょうか?
BCDで出して74HC138でも付ければなんとかなりそうですが、極力外付けしたくありませんし、なにか良い案ありますでしょうか?
Katsumi (2015年11月12日 13:16:53)
すみません。状況がよく分からないので、PICの種類や使用目的など、説明頂ければと思います。
純粋に、足の数の多いPICを使えば解決するのではと思うのですが…。
純粋に、足の数の多いPICを使えば解決するのではと思うのですが…。
T.YANA (2016年3月2日 04:24:09)
ふと、XC32を1.21にしてコンパイルしてみたところ、「8000hから数バイト(7~11Byte)がゼロクリアしてしまうという現象」がぴたりと直りました。
今まで1.31を使っていて特に不都合が無かったのでそんなところに問題があるとはちっとも思っていませんでした。
これでPIC32MX150F128BではTK-80として29kByteもの広大なメモリ空間が使えるようになるんですけど、どうしましょう(笑)。
今まで1.31を使っていて特に不都合が無かったのでそんなところに問題があるとはちっとも思っていませんでした。
これでPIC32MX150F128BではTK-80として29kByteもの広大なメモリ空間が使えるようになるんですけど、どうしましょう(笑)。
T.YANA (2016年3月2日 04:35:52)
ふと、XC32を1.21にしてコンパイルしてみたところ、「8000hから数バイト(7~11Byte)がゼロクリアしてしまうという現象」がぴたりと直りました。
今まで1.31を使っていて特に不都合が無かったのでそんなところに問題があるとはちっとも思っていませんでした。
これでPIC32MX150F128BではTK-80として29kByteもの広大なメモリ空間が使えるようになるんですけど、どうしましょう(笑)。
今まで1.31を使っていて特に不都合が無かったのでそんなところに問題があるとはちっとも思っていませんでした。
これでPIC32MX150F128BではTK-80として29kByteもの広大なメモリ空間が使えるようになるんですけど、どうしましょう(笑)。
Katsumi (2016年3月3日 11:37:59)
T.YANAさん
こんにちは。そうですか、コンパイラーのバージョンを下げるとうまく行ったわけですね。何が問題だったのかよく分かりませんが、とりあえず解決ということでしょうか。
29kByteもの広大なメモリ空間が出来てしまったのなら、それにぎりぎり収まる大きさのソフトを開発して、是非公開しましょう(笑)!
他には、こんな物をTwitterで教えて頂きました。試してみてはどうでしょうか?
http://triring.net/program/Assembler/Worm/index.html
こんにちは。そうですか、コンパイラーのバージョンを下げるとうまく行ったわけですね。何が問題だったのかよく分かりませんが、とりあえず解決ということでしょうか。
29kByteもの広大なメモリ空間が出来てしまったのなら、それにぎりぎり収まる大きさのソフトを開発して、是非公開しましょう(笑)!
他には、こんな物をTwitterで教えて頂きました。試してみてはどうでしょうか?
http://triring.net/program/Assembler/Worm/index.html
かんぱぱ (2016年12月31日 06:22:18)
本物のTK-80のキーボードを接続したものを作ってみました。
https://kanpapa.com/today/2016/12/zk80-tk80kbd.html
LOAD/SAVEは実装してみたいですね。あと音も鳴らしたいです。
これからコンパイル環境をつくってみます。
https://kanpapa.com/today/2016/12/zk80-tk80kbd.html
LOAD/SAVEは実装してみたいですね。あと音も鳴らしたいです。
これからコンパイル環境をつくってみます。
Katsumi (2018年5月13日 00:37:14)
Ver 0.23を公開しました。本体部分とファームウェアは、変更ありません。添付のZ80アセンブラー(HTML製)のバグ修正分への更新のみです。
nmk (2018年6月5日 02:27:24)
キットで販売されているのを見つけて、条件反射的にポチってしまいました。
昨日届き、さっそく組み立てて、夜を徹して遊びました。
いやー面白いですね!
マシン語打ち込むのなんて数十年ぶりでしたが、やるうちにいろいろ思い出してきます。
改めて自分は、脳ミソの一番深い部分、人格形成の一番大事な時期に、8080の命令セットを刻み付けて育ってしまった世代であることを痛感しました。
LEDが暗いので、何か工夫してみたいなー。
そういう部分も込みで、本当に面白いです。
ありがとうございます!
昨日届き、さっそく組み立てて、夜を徹して遊びました。
いやー面白いですね!
マシン語打ち込むのなんて数十年ぶりでしたが、やるうちにいろいろ思い出してきます。
改めて自分は、脳ミソの一番深い部分、人格形成の一番大事な時期に、8080の命令セットを刻み付けて育ってしまった世代であることを痛感しました。
LEDが暗いので、何か工夫してみたいなー。
そういう部分も込みで、本当に面白いです。
ありがとうございます!
Katsumi (2018年6月13日 13:11:24)
nmkさん
ご感想をどうも有り難うございます。表示が暗い件は、多くの方からコメントを頂いています。一番効果的なのが、スモーク版を使うことのようです。かんぱぱさんのページが参考になると思います。
https://kanpapa.com/today/2016/12/zk80-tk80kbd.html
LEDへの出力を上げるために回路を変更するのは、色々制限があって難しいですね。ちょっと思ったのは、74HC04を5V駆動で2つ使ってLEDの直前に挟む形で入れ、出力用の抵抗値を90Ωまで下げると50 mA程での駆動になりますので、3倍程度明るくなるはずです。多くの74HC04がピン当りの最大保証出力が25 mA程ですが、多分壊れないでしょう。なお、この変更では、LEDの左右の配置を逆にする必要があります。
ご感想をどうも有り難うございます。表示が暗い件は、多くの方からコメントを頂いています。一番効果的なのが、スモーク版を使うことのようです。かんぱぱさんのページが参考になると思います。
https://kanpapa.com/today/2016/12/zk80-tk80kbd.html
LEDへの出力を上げるために回路を変更するのは、色々制限があって難しいですね。ちょっと思ったのは、74HC04を5V駆動で2つ使ってLEDの直前に挟む形で入れ、出力用の抵抗値を90Ωまで下げると50 mA程での駆動になりますので、3倍程度明るくなるはずです。多くの74HC04がピン当りの最大保証出力が25 mA程ですが、多分壊れないでしょう。なお、この変更では、LEDの左右の配置を逆にする必要があります。
FUJIMOTO (2019年5月31日 16:59:43)
オレンジピコで購入したキットで遊んでいます。とっても楽しいです。せっかくなら外部に何かつなげてみようと思いOUT命令でRA2、RA3、RA4をon/offしてみようと試してみたのですが、うまく動いてくれません。この標準のファームウェアでこの3つのポートを動かすことはできますか?またその場合、ポート番号は何番になるでしょうか?00~FFのポート番号にそれぞれFFを出力するプログラムを作って試してはみたのですが、うまく動いてくれず…
Katsumi (2019年6月3日 11:08:31)
私の作製したファームウェアでは、RA2-RA4はコントロール出来ません。ソースコードの改変とコンパイル、及び改変したファームウェアのPICへの書き込みが必要です。仰るような動作をさせるには、peripheral.hの「void writeIO(」の辺りを変更する事になると思います。オレンジピコの宇喜多さんが、いろいろ改変ファームウエアを公開なさっているので、参考になるのではないかと思います。
こういった改変も楽しいと思いますので、ぜひトライしてみて下さい。
こういった改変も楽しいと思いますので、ぜひトライしてみて下さい。
FUJIMOTO (2019年6月5日 17:53:21)
Katsumiさん、ありがとうございます。試してみます。
T.YANA (2022年4月30日 22:21:37)
以前に作ったZK80miniを改変してSD-CARDが繋がるようにして遊んでいたのですが、最近プリント基板を起こす技が身についてきたのでプリント基板を起こしてみました。
この際、改変したソースコードも含めてGitHubに公開しようと思うのですが、公開してもよろしいでしょうか。
この際、改変したソースコードも含めてGitHubに公開しようと思うのですが、公開してもよろしいでしょうか。
Katsumi (2022年5月2日 12:17:53)
T.YANAさん、
もちろんです!そういった事をどんどんやってもらいたくてオープンソースにしています。ライセンスはLGPLなので、そのまま継承していただくか、GPLなどのアッパーコンパチブルのライセンスにしていただくか、してください。
もちろんです!そういった事をどんどんやってもらいたくてオープンソースにしています。ライセンスはLGPLなので、そのまま継承していただくか、GPLなどのアッパーコンパチブルのライセンスにしていただくか、してください。
T.YANA (2022年5月2日 16:21:27)
ありがとうございます。LGPLをそのまま継承したいと思います。
masuda (2022年5月6日 07:32:20)
素人質問ですいません。
学校でアセンブラの授業を履修し、興味を持ってaitendoのATD-B-001を組み立てたのですが、これは動作としてはz80ですか、それとも8080ですか?
学校でアセンブラの授業を履修し、興味を持ってaitendoのATD-B-001を組み立てたのですが、これは動作としてはz80ですか、それとも8080ですか?
Katsumi (2022年5月6日 11:24:58)
aitendoの商品については、私はいっさい関与しておりませんので、お答えできません。aitendoにお聞きいただければと思います。
masuda (2022年5月6日 17:28:25)
ごめんなさい
ありがとうございます
ありがとうございます