L.Entisの日記: Z80 7
日記 by
L.Entis
昔のことだし、私が機械語をいじくり倒すようになったのは 386 以降だったというのもあって、うろ覚えなのですが、子供のときに父が友人から安く貰ってきた初代 X1 の Z80 は、レジスタを使った out 命令は bc レジスタでアドレッシングするのだったのに対して、高校のときに学校で買わされたポケコンの Z80 の out 命令は b レジスタでした。
命令コードは同じで。
X1 はポートのアドレスが16ビットで、実質128kByteのメモリ空間(といってもポートのほうはVRAM中心だけど)が扱えるってのが売りだったと思うので、X1 の Z80 が特殊なのかと思っていたのですが、よくよく考えると、同時代のほかのパソコン(マイコン)のグラフィック制御ってどうなってたんだろうと、少し疑問になってきた。
普通の I/O を考えると、ポート(コントローラー)にVRAMのアドレス書き込んでから、データを out/in?
GDC が、PC-9801 で画期的だったってことを考えると、それ以前にグラフィック処理用のチップが乗っかってるとは思えないし(グラフィックチップに対して命令を発行するのではなく、CPU側から直接VRAMへの制御をするしかなかっただろうし…)
あとは、バンク切り替え?
狭っ!
(ポケコンのメモリは32kByteで、後半はROMとかのバンク切り替えになっていたような)
(ワイヤーフレームの3DダンジョンRPGをポケコンで作ろうとしたのはいいけど、容量が足りなくて、頑張って削ってなんとか完成させた覚えが…w)
命令コードは同じで。
X1 はポートのアドレスが16ビットで、実質128kByteのメモリ空間(といってもポートのほうはVRAM中心だけど)が扱えるってのが売りだったと思うので、X1 の Z80 が特殊なのかと思っていたのですが、よくよく考えると、同時代のほかのパソコン(マイコン)のグラフィック制御ってどうなってたんだろうと、少し疑問になってきた。
普通の I/O を考えると、ポート(コントローラー)にVRAMのアドレス書き込んでから、データを out/in?
GDC が、PC-9801 で画期的だったってことを考えると、それ以前にグラフィック処理用のチップが乗っかってるとは思えないし(グラフィックチップに対して命令を発行するのではなく、CPU側から直接VRAMへの制御をするしかなかっただろうし…)
あとは、バンク切り替え?
狭っ!
(ポケコンのメモリは32kByteで、後半はROMとかのバンク切り替えになっていたような)
(ワイヤーフレームの3DダンジョンRPGをポケコンで作ろうとしたのはいいけど、容量が足りなくて、頑張って削ってなんとか完成させた覚えが…w)
Re: Z80 (スコア:1)
前者はZ80の隠し仕様をX1のハードウェアが前提にしていただけです。Z80のI/Oポートは8ビット分しかなく、直接アドレッシング OUT (nn),Aでは8ビット分しか指定できませんが、Cレジスタ (Bじゃないですよ) での間接アドレッシング OUT (C),A では、アドレスバスの上位にBレジスタの内容が出力され、実質的に OUT (BC),A として扱えることを利用していました。
# だからX1ではBレジスタをカウンタとして使うOTDRなんかは事実上使えなかった。
あとはうろおぼえですが、メモリマップドI/O (バンク切り替え) でVRAMを配置している機種の方が多かったような気がします。参考:Wikipedia: X1 [wikipedia.org]
Re: Z80 (スコア:1)
> メモリマップドI/O (バンク切り替え) でVRAMを配置している機種の方が多かった
PC-8801はバンク切り替えでしたね。
Iレジスタが0F3Hなのに0C000H以降がVRAMだったので、
知らずに割り込み止めないでVRAMに書こうとしてフリーズさせた覚えがあります。
Re: Z80 (スコア:1)
RGBの3プレーンで16KBずつのバンク切替えでした。
グラフィック用コントローラ (スコア:1)
あとうろ覚えですがFM-8より前にグラフィック、I/O制御用のマイコンを乗せたコンピュータもあったと聞いています。
※FM-8:1981年、PC-9801:1982年、X1:1982年
それは単に (スコア:0)
内蔵I/OかメモリマップドのI/Oかってだけじゃ?
Re:それは単に (スコア:1)
Re:それは単に (スコア:1)
詰まる所、ポートアドレスI/Oか、メモリマップドI/Oなのかと言えばそういうことではあるのですが、私が興味があるのは、ポートアドレスI/Oなら、どの程度のアドレス空間が使われていたのか(ポートアドレスが8ビットだと空間が狭いので、あるいは同時期のほかの8ビットパソコンのI/Oアドレスも16ビットだったのか)、メモリマップドI/Oだと、メインメモリはどのくらいでどのくらいの領域をVRAMに割り当てていたのか、とか、そういう具体的な話です。
X1 の Z80 の16ビットI/Oアドレスと、後にポケコンの8ビットI/Oアドレスを見比べると、X1 同時期のほかの8ビットパソコンがどうだったのか(メモリとI/Oのアドレス空間がX1と比べると余りに狭すぎるように感じられるので)疑問に思うわけです。