KM-Z80 mini version 0.3
2013年7月27日
PIC32MXを用いたMZ-80K互換機の3号機が完成し、ほぼ安定して動くようになった。なお、回路図及びPICプログラムが若干変更になり、ver 0.3としている。
表側は、こんな感じ。左から、電源スイッチ、パイロットランプ(カナの時は赤)、PS/2キーボードコネクタ、テープレコーダー(もしくはiPod)入力端子。
裏は、こうなっている。左が音声、右がビデオ端子。
筐体の中身はこんな感じ。
ゲーム(Bug Fire)をロードしたところ。
前回、水晶発振が不安定であると書いたが、複数の方々からご助言を頂いて、回路図を若干変更した。
ver 0.2では、RA1とRB14に入っているクロック入力を水晶発振用の端子から直接取っていた。これが良くないのではないかということで、ver 0.3では、RB2にREFCLKOを出力することでこれを回避し、それに伴って使用ピンの見直しを行った。加えて、水晶発振子の周波数を、8 MHz から 4 MHz に落とした。これは、様々な周波数の発振子を試した結果、周波数が低い方が安定性が増すことが分かったため。
これに従って3号機を制作したのだが、実は相変わらず水晶発振が不安定なまま。色々考えたところ、以前ZilogのZ80を用いたminiではないKM-Z80を作成していたときに同様の現象に遭遇し、その原因をあれこれ考えたことを思い出した。以前の記事にもあるように「Z80や他の部品をすべて装着した状態では、問題なく稼動したのかもしれない(今は、そんな気がしている)」という結論を得ていた。考えていたことは、Z80が動作中に発する信号がノイズとなって、PICの入力端子から入力されるために、水晶発振が停止することを防ぐのではないかということ。つまり、PICからの出力が何か定期的な形で行われた際(NTSCビデオシグナルの生成がそれに相当する)、何かしらの良くないフィードバックが水晶発振子もしくは周辺回路に蓄積し、それが原因で発振が停止するのではないかということ。
ならば、何かしらのノイズを発生させればよいのではないかと考え、以下のルーチンをプログラム内に挿入した。
ver 0.3は、ここからダウンロードできます。
表側は、こんな感じ。左から、電源スイッチ、パイロットランプ(カナの時は赤)、PS/2キーボードコネクタ、テープレコーダー(もしくはiPod)入力端子。
裏は、こうなっている。左が音声、右がビデオ端子。
ゲーム(Bug Fire)をロードしたところ。
前回、水晶発振が不安定であると書いたが、複数の方々からご助言を頂いて、回路図を若干変更した。
ver 0.2では、RA1とRB14に入っているクロック入力を水晶発振用の端子から直接取っていた。これが良くないのではないかということで、ver 0.3では、RB2にREFCLKOを出力することでこれを回避し、それに伴って使用ピンの見直しを行った。加えて、水晶発振子の周波数を、8 MHz から 4 MHz に落とした。これは、様々な周波数の発振子を試した結果、周波数が低い方が安定性が増すことが分かったため。
これに従って3号機を制作したのだが、実は相変わらず水晶発振が不安定なまま。色々考えたところ、以前ZilogのZ80を用いたminiではないKM-Z80を作成していたときに同様の現象に遭遇し、その原因をあれこれ考えたことを思い出した。以前の記事にもあるように「Z80や他の部品をすべて装着した状態では、問題なく稼動したのかもしれない(今は、そんな気がしている)」という結論を得ていた。考えていたことは、Z80が動作中に発する信号がノイズとなって、PICの入力端子から入力されるために、水晶発振が停止することを防ぐのではないかということ。つまり、PICからの出力が何か定期的な形で行われた際(NTSCビデオシグナルの生成がそれに相当する)、何かしらの良くないフィードバックが水晶発振子もしくは周辺回路に蓄積し、それが原因で発振が停止するのではないかということ。
ならば、何かしらのノイズを発生させればよいのではないかと考え、以下のルーチンをプログラム内に挿入した。
static unsigned int r_seed=0,r_data=0; // periodically but randomly change output current for the stable oscillation if (0xffff<r_data) { if (read825x[2]&0x04) { LATBbits.LATB5=0; LATBbits.LATB4=1; } else { LATBbits.LATB5=1; LATBbits.LATB4=0; } r_data=((unsigned short*)monitor)[r_seed]; r_data|=0xf000; r_data&=0xfeff; r_seed++; r_seed&=0x7ff; } else { r_data++; if (0xffff<r_data) { LATBbits.LATB5=1; LATBbits.LATB4=1; } }パイロットランプのLEDを利用して、ノイズを出力している。このルーチンの挿入により、ほとんど問題なく動くようになった。現在、私以外の環境で水晶発振が不安定になっているという報告は頂いていないので、とりあえずこれで対策は出来たと考えている。
ver 0.3は、ここからダウンロードできます。
コメント
e.naka (2013年8月1日 19:12:29)
フィードバックが安定化しちゃってクロックが消失する傍から、周期的にノイズで不安定化させてクロックを再発振させる感じ? とってもハックです。
発振した後に止まるのであれば、どこかでクロックに容量がつきすぎているのがクロック消失の原因と思うんですが。
発振した後に止まるのであれば、どこかでクロックに容量がつきすぎているのがクロック消失の原因と思うんですが。
Katsumi (2013年8月1日 20:56:43)
発振は、PICに水晶を抱かせていうる時だけではなく、スタンドアローンの水晶発振器を使用したときでも、止まります。水晶発振器を使用した時は、単にPICのクロック入力端子に入力しているだけなので、容量を多く取りすぎているという事ではなさそうなんです。
NTSCビデオ信号を作成する時になるので、その周波数とPICの何かの特性の問題のような気がしています。
NTSCビデオ信号を作成する時になるので、その周波数とPICの何かの特性の問題のような気がしています。
sibu2 (2013年8月6日 04:20:13)
発振回路の問題はLEDを点灯消灯させると解決するんですか。
その程度で解決するとますます不思議ですね。
ソースも公開されているので私も基板だけ組んでみようと思うのですが、From PlayerとTo Recorderはどちらもテープのインタフェースだと思うのですが、Katsumiさんは一つの3.5mm3極ジャックにどちらも接続していますか?
その程度で解決するとますます不思議ですね。
ソースも公開されているので私も基板だけ組んでみようと思うのですが、From PlayerとTo Recorderはどちらもテープのインタフェースだと思うのですが、Katsumiさんは一つの3.5mm3極ジャックにどちらも接続していますか?
Katsumi (2013年8月6日 10:01:03)
sibu2さん、こんにちは。
発振の件、そうなんです。よく分からないので、試行錯誤で解決するしかなかった感じです。
カセットテープインターフェースですが、カセットへの保存機能の動作がまだ確認できていないし、まず使う事はないので、上記3号機では「From Player」の方だけしか接続していません。原理的には、一つのジャックに330Ωをつけて、PICから10kΩで両方接続して、大丈夫のはずです。
発振の件、そうなんです。よく分からないので、試行錯誤で解決するしかなかった感じです。
カセットテープインターフェースですが、カセットへの保存機能の動作がまだ確認できていないし、まず使う事はないので、上記3号機では「From Player」の方だけしか接続していません。原理的には、一つのジャックに330Ωをつけて、PICから10kΩで両方接続して、大丈夫のはずです。
antibyte (2013年11月15日 06:11:26)
Hi Katsumi
based on your video and PS/2 routines i build a Nascom 2 emulator.
Video modified for PAL standard, as the Nascom needs 384*255 resolution.
Download and try here :
http://www.mikrocontroller.net/attachment/197412/n2mini.zip
based on your video and PS/2 routines i build a Nascom 2 emulator.
Video modified for PAL standard, as the Nascom needs 384*255 resolution.
Download and try here :
http://www.mikrocontroller.net/attachment/197412/n2mini.zip
Katsumi (2013年11月15日 17:34:20)
Warning: comments::cb1_tag_body(): Argument #1 ($m) must be passed by reference, value given in /home/u109394186/domains/rad51.net/public_html/jeans/jeans/libs/comments.php on line 51
Hi antibyte,
Greate! Thank you for being interested in my project. As my code is provided under the LGPL license, using my code in your project requires LGPL or GPL license. Everyone and I appreciate the source code of your project, at least for PS/2 and PAL routines (the other routines doesn't have to be LGPL).
Katsumi
antibyte (2013年11月16日 09:47:27)
Hi Katsumi,
i will realease it soon, just need to fix a few things and add RS232 handling.
Maybe later i will try to change to your Z80 emulation, as the emulation from Marat Fayzullin is free for non-profit use but not GPL compatible.
I just wanted to see how well a Z80 emulation would run on this nice DIL-28 chip. So i used the emulator from Marat Fayzullin and adapted Grant Searle's modified Microsoft Z80 Basic, built from released Nasom sources.
http://searle.hostei.com/grant/z80/SimpleZ80.html
This worked very well over USB CDC serial.
Then i thought it would be cool to emulate a full Nascom and searched
if someone had done composite video on the PIC32 ... and found you ;)
antibyte
i will realease it soon, just need to fix a few things and add RS232 handling.
Maybe later i will try to change to your Z80 emulation, as the emulation from Marat Fayzullin is free for non-profit use but not GPL compatible.
I just wanted to see how well a Z80 emulation would run on this nice DIL-28 chip. So i used the emulator from Marat Fayzullin and adapted Grant Searle's modified Microsoft Z80 Basic, built from released Nasom sources.
http://searle.hostei.com/grant/z80/SimpleZ80.html
This worked very well over USB CDC serial.
Then i thought it would be cool to emulate a full Nascom and searched
if someone had done composite video on the PIC32 ... and found you ;)
antibyte
Katsumi (2013年11月20日 10:16:09)
Hi antibyte,
Thanks for the reply. I'm looking forward completion of your project.
Yes, my Z80 emulation code has been provided under the LGPL license, It can be used for any purpose; it can be also used with proprietary program if the source code of modification of my code will be open.
Katsumi
Thanks for the reply. I'm looking forward completion of your project.
Yes, my Z80 emulation code has been provided under the LGPL license, It can be used for any purpose; it can be also used with proprietary program if the source code of modification of my code will be open.
Katsumi
antibyte (2013年11月23日 12:09:05)
Video:
http://www.youtube.com/watch?v=HImyfPlwfYM&feature=youtu.be
Files:
https://github.com/antibyte/NasMini.X
http://www.youtube.com/watch?v=HImyfPlwfYM&feature=youtu.be
Files:
https://github.com/antibyte/NasMini.X
Katsumi (2013年11月24日 23:19:39)
Hi antibyte,
Great!
Thank you for sharing the codes between your's and my project!
Katsumi!
Great!
Thank you for sharing the codes between your's and my project!
Katsumi!