6503がようやく動いた報告

イメージ
  回路図まで載っけて作りましたと宣言した前回。 いざ色々動かそうとしたものの、 プログラムがまともに動かないので試行錯誤してたら何年たってたんですかねこれ 。月日が経つのは怖いですね。 今回ようやく6503と6532が無事に動きました。 何につまづいたのかというと、多分アセンブラの文法です。 6502系のアセンブラって結構豊富で、 いろんなところから出てるんですがそれぞれアドレスの表記とか微 妙に違うんですね。 で、 今回久しぶりにca65というアセンブラを使用してみたのがつま づいた原因でした。 一度設定すれば大体の6502系には対応できるのが魅力ですが、 本当よくわからないmakeファイルの設定とかで地獄を見ました 。 以下何やってたのか簡単にまとめていきます。 新しい道具も作ったよ! ■:まず動かない いや、電気は通ってるしクロックは走ってるんですよ。 なのに6532の挙動がおかしくてIRQはでっぱなしだしcpu は止まるし訳がわかりません。 そこで今一度6532のデータシートを読むと、 「 NMIとIRQはオープンコレクタなので 必ずプルアップすること 」 ってあるんですね。何その罠。 というわけでプルアップ抵抗を追加しました。 これでcpuがすぐに止まる事故は解決… と思いきやまだ止まります。というか出力がよくわからない。 そこで大昔に作りかけてやめた出力確認用LEDパネルを作成する ことにしました。 ■:めちゃくちゃ便利なLEDパネル 5年くらい前にこんなの作ったら便利やろってLEDだけ並べて、 回路に不備があることに気がついてなげたもの。 今ならなんとかできそうってことで抵抗とトランジスタ をばーっと取り付けて、 カードエッジからも表のポートからも入力できるようにしました。 これまでは毎回ブレッドボードでled回路組んでたんでクソめん どくさいし抜けるしで散々だったのですが、 これで見やすい簡単出力もicに負担がなく万々歳になりました。 やったぜ。 まあ回路図書かずにえいやっと作ったので裏はすごいことになって ます。ちゃんと整えて、 入力スイッチもつけて体裁整えたら普通に便利道具になりそう。 クロックパルスも出せるようにしたいですね。 ledドライブのために2sc1815を贅沢に使用してます。 意外と高いですがいつ買ったのか結構あったので奮発...

arduinoにz80の疑似ROMとRAMを担当させてみようとしたら、DIPタイプのパラレルSRAMとEEPROMを入手したお話

右の本、超良書です。

前回、クロック入力と電源をarduinoにさせることによってz80の動作を見ることができる装置を作りましたが、あのままでは単純に「動くところ」だけしか見ることができません。そこで、まだ余っているarduinoのピンにメモリアドレスのピンと、アドレスバスのピンをつなげようとしたのですが、

ピンがどうやっても足りません。(見ればわかるか・・・)
そこでひとまず余っているアナログピンを(たったの三本!)arduinoとつないであげます。3本しかないので、A0~A2の3ビット、つまりアドレスの7番地までしか確保できません。
まあすごく短いプログラムなら何とかなるだろうと考え、こちらのサイトを参考にしまして、実行したい命令を見よう見まねでハンドアセンブルしようとしたのですが、何が何だかわかりませんでした。

そこでひとまず意味の分かるアセンブラ命令を機械語と配置まで決めてくれるソフトを探していたのですが、みんな古くて今のパソコンで動いてくれません。なので、開発ソフトはないのかと探していたらもろもろを解決してくれる最高のサイトを見つけました。アセンブラでソフトを開発しようというサイトです。
本当に助かりました。このなかに古いウインドウズをエミュレートする部分があるのですが、そのexeファイルをコンパイラとかの入っているフォルダに入れるのを忘れないでください。動きませんから。

さて、いざ書いたプログラムも本当に動いているのか確かめたいけど、まずはこのPC6001エミュレーターとやらの使い方をわからないといけない。それはちょっとしんどいです。すごく面白そうだし、そちらにはまってしまって抜け出せない可能性もあるし。
と、ここでとあるサイトのことを思い出しました。TK80というコンピューターが昔あったのですがそのコンピューターをWEB上で再現してしまったというものです。それがこちら。すごい人がいるんですね…。こうなってみたいものです。
それから、操作方法はこちらのサイトと、こちらの動画を見ていただくとお分かりいただけると思います。

では、これをどうするかというと、先ほどのアセンブラソフトで出力された16進数を指定された番地にエミュレーター上で書き込んでいって、実行。その結果が思い通りだったらプログラミングは成功ってわけです。いまは非常に小さいプログラムしか組んでいないのでできることですね(´・ω・`)
そして確認してみたのですが、特に問題はありませんでした。なので、arduinoに書き込んで実行したのですが…

暴走しました。

HALT命令も、なにもききません。0~順番に番地を読んでいくらしいのですが、突然飛んでしまいどうにもなりません。これは、やはり足りないピンをつなぐしかないのか。でもarduinoの足はすべて使い切ってしまっている。

このピンの不足を解決するにはピンの本数を何かしらの方法で増やす以外にありません。そこで、74HC165というICと、74HC595というICを使えば解決できそうだということがわかりました。

(参考にしましたサイトはこちらです。http://www.geocities.jp/zattouka/GarageHouse/micon/circuit/HC595.htm

このICで増やした足を、Z80のパラレルピンにつなぐことができれば一度読み込んだ後にarduino側で別で読み込んでしまえばいいというわけです。しかし、これにも問題があって、書き出しの場合であれば送り出すデータが74HC595(出力ピンを増やすためのIC)に準備できるまでWAIT信号をZ80側に出していれば問題はないと思うのですが、問題はアドレスバスの読み込みです。一応WAIT信号を出している間はすべての動作がストップするようなので同じように処理すればいいかもしれませんが、arduino側でどのように判定を取るかも問題になります。ピンの処理とプログラムも前回とはまるで違うものになるのは明白ですし…


■そもそも、なんでarduinoにやらせるのか

 まずなんでこのRAMとROMの役割をarduinoにさせるのかというと、まず一つ目は
「Z80の動作のすべてが見たい!」
というものだったのと、もう一つに
「周辺機器が手に入らない」
というものでした。ネットで調べても、大学生がちょっと秋葉原に行って入手しようにもDIPタイプのSRAM(パラレルバージョン)のはありませんし、EEPROMなんてありませんでした。あのときまでは。

上のSRAMは、もう廃盤だそうです。そんなぁ・・・
でも手に入った。2017年現在。


あの時までは!!!!

衝撃です。ありました。もう廃盤だそうで、そのためなのか200円単位で値上がりしていました。256kbitのSRAMが700円、同じく256kbitのEEPROMが1100円!Z80一個より高いんです。びっくり。(ちなみにその隣にはあのMC68000が!!1700円でした。買えばよかったかも。)
ちなみに買うことのできたお店はインターネットなどにはサイトを出していないみたいなので、心当たりのある人は探してみてください。たぶんすぐわかるかも。

なので、ひとまず74HCたちで回路を作ったのち、EEPROMにarduinoで書き込んでプログラムを実行してみようと思います。そして、シリアルモニター代わりにarduinoのモニターを使ったらちょうどいいかもしれません。TeraTarmに表示させるのが一般的なようですが。
それでは、今回はここまで。どんどんarduinoとつなぐケーブルが増えていくので、もうそろそろ何にどれをつないでいるのかわからなくなってきた…
次の記事:
74HC595を使ってarduinoの16ビットパラレル出力に挑んでみた
前の記事:
Z80はどう動いているのか見れる装置をarduinoで作ってみた

コメント

このブログの人気の投稿

ファミコンの完全自作ROM&カセットを作ろう!!その1~立ちはだかるコンパイラの壁~

ファミリーベーシックでゲームプログラミング

ファミコンの完全自作ROM&カセット作ろう!〜cc65で起動ROMをつくる〜