6503がようやく動いた報告

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

z80がリセットされない問題

先日、Z80の動きをArduinoで見れるようにする装置というものを作りましたがあの装置に問題がありました。それは、CPUをリセットできないというものでして…

■CPUのリセットとはどういうことか


 Z80やその他さまざまなCPUは、電源が入るとメモリの1番地、要は一番最初のデータから順番に読み込んでいきます。その命令をCPUの中にあるレジスタという記憶部分にしまったり、ジャンプ命令などでアドレスバスの出力やらデータの入出力を行います。そしてその途中でクロックを止めたり電源を切ったとしても、その時のデータがCPUの中に残っていると次に電源を入れた時に前回の途中から始めてしまうことがあるわけです。
 そこでこのZ80にはRESET端子というものが備わっていて、この端子を0V(アクティブ状態、)にするとCPUの中のデータやらもろもろが初期状態に戻り、また一から作動できる・・・というようになっています。が、今回自分の作った回路では何回もRESET端子に入力しても信号がうまく伝わってくれません。これでは思うように実験ができない。そこで、腹をくくってZ80のマニュアルを読み直してみました。全部英語。日本語版がほしい…(´・ω・`)

■リセット信号とクロック入力


 Z80のマニュアルを読んでみると、リセット信号をZ80が読み込んで理解し、リセットするにはリセット信号とは別でクロック信号を3クロック以上入力しなくてはならないということが書いてありました。インターネット上には様々なZ80のピン配列や命令表はありますが、それは見かけなかったなぁ…(あ、でも某ホームページを隅から隅まで読めばきっと書いてあったかも…)
 というわけで、もう一度今回はリセット信号をきちんと認識するかどうかのチェックだけなので簡単な実験装置を作りました。
RESET実験後に3Mhzの水晶発振器を取り付けました。

リセット信号は5Vラインにつながっている線をGNDにつなぐだけでいいので、動いているアドレス信号がまた0番地から始まれば成功というわけでして。リセット端子をアクティブモード(0V)にし、そのまま3クロック入力するとアドレス信号やM1信号などがすべて初期状態に戻りました。これでプログラムの実験などもまともにできるように!
 やはり、説明書はきちんと読むべきですね( `ー´)ノ
 でも、電源を入れてからリセット信号を3クロック分自動で入れるには(arduinoに頼らず)どうしたらいいんだろう…そうしないと、安定した起動後の動作は保証できないですよね…やっぱりそこは手動なのかな?
次の記事:
SRAMにDIPで直接データを書き込む装置をarduinoを使って作ってみた
前の記事:
arduinoでパラレルEEPROMリーダ・ライターもどきを作ってみた

コメント

このブログの人気の投稿

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

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

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