ワンボードマイコンをつくろう!(パソコンの原点はここから始まった)
TK80ソフトコンパチブル!8080、Z80マシン語からBASICまでこれ1台でこなせます
当記事は2009年11月から「TTLでCPUをつくろう!」というタイトルの もとにほとんど毎日連載をしてきたものを再編集したものです。 2011.6.28
前へ
次へ
目次へ戻る
ホームページトップへ戻る
☆特注品Z80ボードND80ZHの機能説明
TK80コンパチブルで、その上中日電工オリジナルのND80Zとしても動作するというZ80CPUのワンボードマイコンを企画し、その開発準備をしていたところに、ND80Zの特注品の開発依頼をいただきました。製品名はND80ZHです。
新企画のZ80ボード(ND80ZV)はこのあとで製作することになりますが、基本的な機能はND80ZHと共通していますから、まずはND80ZHの機能を説明します。

[第17回]

●TK80との互換性について

このところZ80版TK80ボード(ND80ZH)についての説明をしております。
TK80と同じ動きをさせるために、TK80に搭載されていたモニタプログラムと一部を除いて同じものを載せ、さらにND80Zモニタプログラムも搭載するように考えました。
基本的な動作テストも終わったところなのでしたが。

むむ。
いや、やっぱり、なんとかしたいなあ。
ちょいと、考え込んでしまいました。

●システムワークエリアの問題

TK80のCPUは8080でしたが、アクセスできるメモリアドレスはZ80と同じ0000〜FFFFの64KBです。
しかしなにしろメモリの集積度も低く、当然高価でしたので、TK80にはROM0.75KB、RAM1KB(確か標準では0.5KB)しか搭載していませんでした。
問題はRAMのアドレスについてです。
TK80はRAM0.5KBを8200〜83FFに実装していました(8000〜81FFはオプション)。
システムワークエリアも83xx番地にありました。

ところで、われらがMYCPU80はROM32KB、RAM32KBを搭載しています。
RAMのアドレスは8000〜FFFFの32KBです。

TK80は7セグメントLEDの表示を行う、DMAのメモリアドレスとして、実装メモリの一番後ろのアドレス、83F8〜83FFを使用していました。DMAで直接コントロールするA0〜A2のアドレス線以外をプルアップしておくだけで、この83F8〜83FFをDMAアクセスすることができて、都合がよいからです。

MYCPU80の場合にも、同じ動作原理の回路を使いますから、DMAの対象となる、7セグメントLED表示バッファのアドレスは、FFF8〜FFFFになっています。
システムのワークエリアも、RAMの後ろに集めてしまうのが自然ですから、MYCPU80ではそのようにしました。

TK80とMYCPU80のメモリマップです。


[2010.3.7追記]
TK80はROM、RAMともにボード上最大実装時のメモリマップです。
TK80はメモリのアドレスデコード回路が不完全ですから、「未実装」と書いたメモリ範囲は、実際には、ROM、RAMそれぞれのイメージになります。
イメージとは、未実装のメモリアドレス範囲でも、実装部分のメモリがアクセスされてしまうことをいいます。
[追記ここまで]

TK80のモニタプログラムとMYCPU80に搭載したモニタプログラムは、たとえばLED表示とかキー入力ルーチンなどのエントリアドレスは同じですから、TK80のために書かれたプログラムで、モニタプログラムのサブルーチンをCALLしているようなプログラムも、MYCPU80で同じように実行することができる、はずです。

しかし、RAMのアドレスは違うのですよねえ。
7セグメントLEDバッファは、これはちょっとどうしようもありませんから、TK80用に書かれたプログラムで83F8〜83FFを直接アクセスしているところがもしあれば、そこはFFF8〜FFFFに書き直すしかありません(7セグメントLEDに0〜F以外の表示を行っているようなプログラムでは、83F8〜83FFを直接アクセスしています)。
でも、よくよく考えてみましたら、そのほかにも、LED表示のためのアドレスバッファとかデータバッファなどは、多分多くのプログラムでアクセスしているに違いありません。

その点については、当社のND80Zも、当初はRAMは1KBからスタートしましたし、ずっとあとになってからでも、せいぜい8KBくらいしか載せていませんでしたから、ワークエリアもTK80のそれと同じでやってきていました。
ところが、MYCPU80で、ごく自然に32KBのRAM62256を使うことにして、そしてことの成り行きで、TK80モニタを搭載するところまで考えた段階で、そのRAMワークエリアの互換性については、あまり深く考えないで、さきほどのメモリマップのような仕様にしてしまいました。

うーん。
で、考え込んでしまった次第です。

まあ、MYCPU80ユーザーの皆様は、8080アセンブラも供給いたしましたことでもありますから、なんとかそれでそこの部分は対応していただけたら、とそのように考えております。

そこで、やっとお話をもとに戻しまして、今回のZ80版TK80ボード(ND80ZH)についてです。
ND80ZHにはアセンブラは附属しません(プリンタに出力できる逆アセンブラはモニタ機能としてついていますけれど)。
当然、16進コードでキーボードから入力することになります。
その場合、もしもTK80用のプログラム(16進コードの)を入力して実行してみよう、と考えたら、このメモリマップでは、やっぱりまずいでしょうねえ。

ということで、実は昨日から、せっかく動作テストまで済んだND80ZHのモニタプログラムを、もう一度再編集する作業をしていたのです。
その作業の結果については、というところで、本日は時間がなくなってしまいましたので、それについては、次回に説明させていただきます。
CPUをつくろう!第449回(2010.3.6upload)を再編集

ワンボードマイコンをつくろう![第17回]
2011.6.28upload

前へ
次へ
目次へ戻る
ホームページトップへ戻る