mk2SRの割り込みについて調べました。
『Mr.PC Technical Collection』に書かれている割り込み関連のI/Oポートは以下の通りです。
0xB8:割り込みベクタ(SUB-CPU)
0xB9:割り込みベクタ(JOYSTICK)
0xBA:割り込みベクタ(TIMER)
0xBB:割り込みベクタ(VOICE)
0xBC:割り込みベクタ(VRTC)
0xBD:割り込みベクタ(RS-232C)
0xBE:割り込みベクタ(Printer)
0xBF:割り込みベクタ(EXT INT)
0xFA:割り込みコントロール
bit7-0:1の時、割り込み禁止。0の時、割り込み許可。
0xFB:割り込みベクタコントロール
bit7-0:1の時、割り込みベクタイネーブル。0の時、割り込みベクタディセーブル。
bit0:SUB-CPU
bit1:JOYSTICK
bit2:TIMER
bit3:VOICE
bit4:VRTC
bit5:RS-232C
bit6:Printer
bit7:EXT INT
この割り込み関連の情報は、SRモードの時のみに機能します。mk2/66 の割り込みの制御は、代わりにポート0xF3、0xF4、0xF5、0xF7を使います。
上記の情報だけだと、何が何だか、という感じだと思います(まあ、あまり触らないトコロではありますが)。
実際にプログラムで動かしてみました。モード6のみです。
srint.zip
プログラムの内容は、
・割り込みの飛び先を0xD100〜に設定する(Iレジスタの設定)
・割り込みが発生した時の飛び先になる、割り込みベクタを設定する(0xB8〜0xBF)
・その後、無限ループに入る
です。
SUB-CPUを除く、それぞれの割り込みが発生したら、画面上に文字が表示されます。
SUB-CPUからの割り込みが発生した場合、SUB-CPUにデータを読み込みに行ってそのデータを画面に表示します(キーボードを押すと、その内容が画面に表示されます)。同時に、SUB-CPU以外の割り込みが発生した時の、画面上の文字を消します。
Printerからの割り込みを禁止していますが、これは後述します。
プログラムを動かして、何がトリガになっているかを調べました。
SUB-CPU:
トリガは、サブCPUの割り込み要求信号(SUB-nINT)。"L"のレベルで割り込み発生。
JOYSTICK:
トリガは、ジョイスティックの7ピン(JOY-7)。"L"のレベルで割り込み発生。
TIMER:
カスタムLSI内部のため、トリガは不明。
VOICE:
トリガは、uPD7752のREQ信号の反転(VO-nREQ)。"L"のレベルで割り込み発生。
VRTC:
トリガは、垂直同期信号(nVSYNC)。"L"→"H"の立ち上がりで割り込み発生。
RS-232C:
トリガは、RS-232CのポートのRxRDY。"L"のレベルで割り込み発生。
Printer:
トリガは、プリンタからのBUSY信号の反転(nBUSY)。"L"のレベルで割り込み発生。
EXT INT:
トリガは、拡張カートリッジコネクタの8ピンのnEXINT。"L"のレベルで割り込み発生。
外部からの入力が4本もあります。これらの信号は、すべてレベルで動作します。例えば、JOYSTICK をつないで、ボタンを押したら割り込むようにしても、押している間はずっと割り込みが掛かってしまいます。
さらに、Printer からの割り込み信号ですが、論理が間違っているようで、プリンタに接続していない場合、nBUSY="L"となるため、常に割り込みが発生します。
66SRも同じ構成なので同じような結果になるはずですが、SUB-CPU関連に関しては調べていません。
SUB-CPUから出力される割り込みベクタが追加されている(TVR、DATE)と思いますが、その辺りは別の機会に。
2014年02月02日
2014年01月31日
mk2SRと66SRの回路図について
mk2SR と 66SR の回路図レベルでの、他の機種との差異についてです。
○mk2 → mk2SR
・CPUクロックが、14.31818MHz である。
これは、『サイクルスティール方式』を行うため、画面表示を行うクロックと同じにしているためです。
『サイクルスティール方式』とは、画面表示をするためにVRAMからデータを読み出す時にだけ、CPUにウエイトを掛けるものです。従来の「画面表示の期間は、バスリクエストを出して常にCPUを止める」よりもCPUが止まらないために、動作が速くなります。
・PSG(AY-3-8910)が、FM音源(YM-2203)になっている。
PSG部分はコンパチのようです。また、mk2までのPSGの動きをそのまま使えるようにするため、4MHzのクロック(セラミック発振子)をCPUクロックとは別に用意されています。
・カスタムLSI(メモリコントローラ、I/Oコントローラ、CRTコントローラ1,2)が、mk2から変更されている。
これは、まあ、機能とクロックが変わったからですね。
・アドレスバスの上位3ビットにセレクタが入っている。
SR の機能として、8Kバイトを単位として、自由に組み替えができます。その機能のためのようです。
・CRTコントローラからの映像出力が、メモリコントローラに入ってから、外部に出力されている。
パレット機能の実現のようです。しかし、なぜ16色中4色だけしかパレットが使えない仕様なのだろう...
・DRAMへの書き込みが、4ビット単位で出来るようになっている。
VRAMのアクセスで、1ドット(4ビット)単位でアクセスするため、このようになっているようです。
他にも細かい違いはありますが、大きくは変わっていません。
○mk2SR → 66SR
・フロッピー基板が追加された。
搭載されているカスタムLSIも、周辺回路も、ほとんどPC-6601の回路と同じです(WGATEにリセットが入った程度の変更)。
また、FDDコントローラのために、16MHzの水晶発振子が設けられています。
・SUB-CPU周りが変更されている。
接続方法と機能が変更されています。
他の機種:CPU = 8255 = SUB-CPU
66SR:CPU = 8255 = SUB-CPU(1) = SUB-CPU(2) = (キーボード内の)SUB-CPU(3)
他の機種では、SUB-CPU は、キーボード、CMT、RS-232C の処理を行っているが、66SRでは以下の通りになっている。
SUB-CPU(1):CMT、RS-232C、SUB-CPU(2)
SUB-CPU(2):カレンダーLSI、テレビコントロール、SUB-CPU(3)
SUB-CPU(3):キーボード
と分担している。
・電源系の変更。
STAND-BYモードの時に、通常の5Vは停止するが、STAND-BY用の電源のみが出力されるようになっている。
また、バッテリーを持っていて、サブ基板上のカレンダーLSIに供給している。
キーボード上のSUB-CPU(3)は、バッテリー駆動が可能になっている、本体とワイヤ接続されている時は、本体から電源を取っている。
・テレビコントロールの追加
66SRのキーボードやプログラムから、テレビのチャンネルの変更が可能になっている。
mk2SRには、テレビコントロールの回路自体がありません。
カスタムLSIや各種ROMは、mk2SRと66SRでは全く同じものが使われています。
ちなみに、mk2SRと66SRを判別するレジスタがありますが、これは、I/Oコントローラの56ピンの状態を出力しているようです。
○mk2 → mk2SR
・CPUクロックが、14.31818MHz である。
これは、『サイクルスティール方式』を行うため、画面表示を行うクロックと同じにしているためです。
『サイクルスティール方式』とは、画面表示をするためにVRAMからデータを読み出す時にだけ、CPUにウエイトを掛けるものです。従来の「画面表示の期間は、バスリクエストを出して常にCPUを止める」よりもCPUが止まらないために、動作が速くなります。
・PSG(AY-3-8910)が、FM音源(YM-2203)になっている。
PSG部分はコンパチのようです。また、mk2までのPSGの動きをそのまま使えるようにするため、4MHzのクロック(セラミック発振子)をCPUクロックとは別に用意されています。
・カスタムLSI(メモリコントローラ、I/Oコントローラ、CRTコントローラ1,2)が、mk2から変更されている。
これは、まあ、機能とクロックが変わったからですね。
・アドレスバスの上位3ビットにセレクタが入っている。
SR の機能として、8Kバイトを単位として、自由に組み替えができます。その機能のためのようです。
・CRTコントローラからの映像出力が、メモリコントローラに入ってから、外部に出力されている。
パレット機能の実現のようです。しかし、なぜ16色中4色だけしかパレットが使えない仕様なのだろう...
・DRAMへの書き込みが、4ビット単位で出来るようになっている。
VRAMのアクセスで、1ドット(4ビット)単位でアクセスするため、このようになっているようです。
他にも細かい違いはありますが、大きくは変わっていません。
○mk2SR → 66SR
・フロッピー基板が追加された。
搭載されているカスタムLSIも、周辺回路も、ほとんどPC-6601の回路と同じです(WGATEにリセットが入った程度の変更)。
また、FDDコントローラのために、16MHzの水晶発振子が設けられています。
・SUB-CPU周りが変更されている。
接続方法と機能が変更されています。
他の機種:CPU = 8255 = SUB-CPU
66SR:CPU = 8255 = SUB-CPU(1) = SUB-CPU(2) = (キーボード内の)SUB-CPU(3)
他の機種では、SUB-CPU は、キーボード、CMT、RS-232C の処理を行っているが、66SRでは以下の通りになっている。
SUB-CPU(1):CMT、RS-232C、SUB-CPU(2)
SUB-CPU(2):カレンダーLSI、テレビコントロール、SUB-CPU(3)
SUB-CPU(3):キーボード
と分担している。
・電源系の変更。
STAND-BYモードの時に、通常の5Vは停止するが、STAND-BY用の電源のみが出力されるようになっている。
また、バッテリーを持っていて、サブ基板上のカレンダーLSIに供給している。
キーボード上のSUB-CPU(3)は、バッテリー駆動が可能になっている、本体とワイヤ接続されている時は、本体から電源を取っている。
・テレビコントロールの追加
66SRのキーボードやプログラムから、テレビのチャンネルの変更が可能になっている。
mk2SRには、テレビコントロールの回路自体がありません。
カスタムLSIや各種ROMは、mk2SRと66SRでは全く同じものが使われています。
ちなみに、mk2SRと66SRを判別するレジスタがありますが、これは、I/Oコントローラの56ピンの状態を出力しているようです。
pc6601SRの回路図
続いて、PC-6601SRの回路図をアップします。
まず、メイン基板の回路図です。












FDD基板の回路図です。


サブ基板(タイマ処理、キーボード処理など)と、LED基板の回路図です。


キーボード基板の回路図です(キーマトリックスは除く)。


こちらもBSch3Vのファイルをアップします。
pc6601SR.zip
まず、メイン基板の回路図です。
FDD基板の回路図です。
サブ基板(タイマ処理、キーボード処理など)と、LED基板の回路図です。
キーボード基板の回路図です(キーマトリックスは除く)。
こちらもBSch3Vのファイルをアップします。
pc6601SR.zip
pc6001mk2SRの回路図
だいぶ間隔が空いてしまいました。
去年から作業を進めていた、PC-6001mk2SR の回路図をアップします。
カスタムLSIの動作がよく分からない部分があって、信号名がいい加減な箇所もあります。












BSch3Vを使って図面を書いています。元のファイルも圧縮してアップしておきます。
pc6001mk2SR.zip
去年から作業を進めていた、PC-6001mk2SR の回路図をアップします。
カスタムLSIの動作がよく分からない部分があって、信号名がいい加減な箇所もあります。
BSch3Vを使って図面を書いています。元のファイルも圧縮してアップしておきます。
pc6001mk2SR.zip
2013年04月01日
機種判別
BookwormさんのHPを読んでいて、そういえば機種判別のルーチンをちゃんと作ってなかったなーと思って、急遽作りました。
P6系の機種は、周知の通り、PC-6001、PC-6001mk2、PC-6601、PC-6001mk2SR、PC-6601SR と5種類ありますが、それらを同じプログラムで判別する必要がある場合があります。
一番手っ取り早いのはROMを読む事ですが、これはいろいろと問題がある場合があるので、通常は他の方法で行います。
今回は、以下のように判別しました。
初代機とそれ以外:ポート0xF6 が存在するかどうか?
mk2と66:ディスク用のバッファが存在するかどうか?
mk2SRと66SR:ディスク用のバッファが存在するかどうか?
SRとそれ以外:ポート0xA3 から値が読めるか?
初代機とそれ以外はいろいろと違うのですが、SR でモードによらずに読み書きが可能で、値を変更してもあまり影響がないポート0xF6(タイマ割り込みのタイマ値)を使っています。
mk2と66、mk2SRと66SRの判別は、全く同じものです。ディスク用バッファはディスクを内蔵側にした時に、ポート0xD0からアクセスが出来ます。
SRとそれ以外には、AY-3-8910とYM-2203 の違いを利用しています。ポート0xA3から値を何回か読み込んで、0xFF以外の値が返ってきたらSRと判断しています。AY-3-8910(非SR)の場合は、0xA3 が常に0xFFになります。
SR のI/O ポートはやっかいで、SR モードかそうでないかで、アクセスが出来たり出来なかったりするので、常にアクセスが出来るポートを選んでいます。
↓プログラムはコレです。
kishu.zip
〜.p6 ファイルが2つありますが、これはSRの中間コードが違うためです。
動作モード、ページに関係なく動作します。ただし、検証が甘いため、プログラムのアドレスが、ワークエリアに重なっているかも知れません。その場合は適宜変更して下さい。
P6系の機種は、周知の通り、PC-6001、PC-6001mk2、PC-6601、PC-6001mk2SR、PC-6601SR と5種類ありますが、それらを同じプログラムで判別する必要がある場合があります。
一番手っ取り早いのはROMを読む事ですが、これはいろいろと問題がある場合があるので、通常は他の方法で行います。
今回は、以下のように判別しました。
初代機とそれ以外:ポート0xF6 が存在するかどうか?
mk2と66:ディスク用のバッファが存在するかどうか?
mk2SRと66SR:ディスク用のバッファが存在するかどうか?
SRとそれ以外:ポート0xA3 から値が読めるか?
初代機とそれ以外はいろいろと違うのですが、SR でモードによらずに読み書きが可能で、値を変更してもあまり影響がないポート0xF6(タイマ割り込みのタイマ値)を使っています。
mk2と66、mk2SRと66SRの判別は、全く同じものです。ディスク用バッファはディスクを内蔵側にした時に、ポート0xD0からアクセスが出来ます。
SRとそれ以外には、AY-3-8910とYM-2203 の違いを利用しています。ポート0xA3から値を何回か読み込んで、0xFF以外の値が返ってきたらSRと判断しています。AY-3-8910(非SR)の場合は、0xA3 が常に0xFFになります。
SR のI/O ポートはやっかいで、SR モードかそうでないかで、アクセスが出来たり出来なかったりするので、常にアクセスが出来るポートを選んでいます。
↓プログラムはコレです。
kishu.zip
〜.p6 ファイルが2つありますが、これはSRの中間コードが違うためです。
動作モード、ページに関係なく動作します。ただし、検証が甘いため、プログラムのアドレスが、ワークエリアに重なっているかも知れません。その場合は適宜変更して下さい。
2013年01月12日
拡張コネクタとMSX
これもツイッターで見つけた発言からリンクを探したもの。
http://www.higuchi.com/item/337
これによると、PC-6001 の拡張スロットと、MSXのROMカートリッジは全く同じらしいです。
コメントも見ましたが、私の見解は意図的に同じにしているんだと思います。
Z80のアドレスバス、データバス以外に、電源(+5V、-12V、-5V)、GND、コネクタ装着時にONとなるための端子などまでが一致しています。多分、端子配列を同じにする事のメリットがあったのでしょう。
意図的かどうかはどうでもいいのですが、この情報はかなり有用です。
今、P6の拡張カートリッジに挿す基板を作る場合、かなり困難なんですね。
一番ネックになるのは、挿すコネクタ部分です。
昔は、サンハヤトから、ユニバーサル基板が出ていました。

・写真上:30年ほど前に作った、ROMカートリッジ
(mk2のため、ROM/RAMカートリッジは不要だった)
・写真下:最近作った、RAMカートリッジ(+VSYNC検出回路)
しかし、今では当然生産していません。
さらに、2.54mmピッチのコネクタ用端子を持っている基板も生産していないようです。
で、代わりに、ユニバーサル基板+コネクタ用端子とすると、何とか作る事ができます。
そのコネクタ用端子に、MSX-ROM が使えるんですね。
さっそく日本橋に行って、購入してきました。
購入ポイントは以下の通り。
・安いこと
・全部の端子がプリントされていること
です。特に端子が全部ないものが多いので、注意が必要です。
で、買ったのがコレ。

安かったので、2本買いました。合計200円〜♪
ちなみに減額していないものは、1本180円でした。

中の基板の写真です。上は左から、1、3、5、・・・、47、49ピン。下は、右から、2、4、6、・・・、48、50ピンです。
41ピンと43ピンがGNDで、45ピンと47ピンが+5Vのため、太く配線されているのがわかります。
また、44ピンと46ピンが接続されているのがわかります(ここを繋がないと、電源が切れる)。
コネクタ端子の部分だけ切断して使用すれば、問題なく使えそうです。
そういえば、MSXの16K-RAM とかもありましたが、これはさすがに使えないかな。
http://www.higuchi.com/item/337
これによると、PC-6001 の拡張スロットと、MSXのROMカートリッジは全く同じらしいです。
コメントも見ましたが、私の見解は意図的に同じにしているんだと思います。
Z80のアドレスバス、データバス以外に、電源(+5V、-12V、-5V)、GND、コネクタ装着時にONとなるための端子などまでが一致しています。多分、端子配列を同じにする事のメリットがあったのでしょう。
意図的かどうかはどうでもいいのですが、この情報はかなり有用です。
今、P6の拡張カートリッジに挿す基板を作る場合、かなり困難なんですね。
一番ネックになるのは、挿すコネクタ部分です。
昔は、サンハヤトから、ユニバーサル基板が出ていました。
・写真上:30年ほど前に作った、ROMカートリッジ
(mk2のため、ROM/RAMカートリッジは不要だった)
・写真下:最近作った、RAMカートリッジ(+VSYNC検出回路)
しかし、今では当然生産していません。
さらに、2.54mmピッチのコネクタ用端子を持っている基板も生産していないようです。
で、代わりに、ユニバーサル基板+コネクタ用端子とすると、何とか作る事ができます。
そのコネクタ用端子に、MSX-ROM が使えるんですね。
さっそく日本橋に行って、購入してきました。
購入ポイントは以下の通り。
・安いこと
・全部の端子がプリントされていること
です。特に端子が全部ないものが多いので、注意が必要です。
で、買ったのがコレ。
安かったので、2本買いました。合計200円〜♪
ちなみに減額していないものは、1本180円でした。
中の基板の写真です。上は左から、1、3、5、・・・、47、49ピン。下は、右から、2、4、6、・・・、48、50ピンです。
41ピンと43ピンがGNDで、45ピンと47ピンが+5Vのため、太く配線されているのがわかります。
また、44ピンと46ピンが接続されているのがわかります(ここを繋がないと、電源が切れる)。
コネクタ端子の部分だけ切断して使用すれば、問題なく使えそうです。
そういえば、MSXの16K-RAM とかもありましたが、これはさすがに使えないかな。
2012年04月12日
拡張コネクタ
ついでに拡張コネクタについてもまとめました。
拡張コネクタ
端子名は、I/O の回路図と、MORIYAさんの所を参考にしました。
http://p6ers.net/mm/pc-6001/
P6初代機と、mk2/66 では、端子機能が変わっているものがあり、注意が必要です。
7、8、16ピンがそれに当たります。
また、表では書いていませんが、外付けDRAM関連もP6初代機と、mk2/66 では動作が違います。
これは、外付けDRAMが、初代機が16Kバイトに対して、mk2/66 が64Kバイトな事によるものです。
あまり知られていないと思いますが、BASIC-ROM を切り離す端子があります。
これを利用して、1からBIOSを書く事が可能です(するかどうかは別ですが)。
拡張コネクタ
端子名は、I/O の回路図と、MORIYAさんの所を参考にしました。
http://p6ers.net/mm/pc-6001/
P6初代機と、mk2/66 では、端子機能が変わっているものがあり、注意が必要です。
7、8、16ピンがそれに当たります。
また、表では書いていませんが、外付けDRAM関連もP6初代機と、mk2/66 では動作が違います。
これは、外付けDRAMが、初代機が16Kバイトに対して、mk2/66 が64Kバイトな事によるものです。
あまり知られていないと思いますが、BASIC-ROM を切り離す端子があります。
これを利用して、1からBIOSを書く事が可能です(するかどうかは別ですが)。
P6/mk2/P66 I/O表
ディスク関連が大体分かったので、ついでにI/O をまとめました。
I/O表
『PC-Techknow6001』『PC-6001mkII 解析マニュアル』を参考にしていますが、
記載されていない所や間違いなどを修正したつもりです。
記載されていないのは、次のようなものです。
・ポート0xA2 (mk2/P66)ポートAに垂直同期(bit7)、水平同期(bit6) が接続されている
・ポート0xB1 内蔵FDD関連。
・ポート0xB2 CMT1、CMT3出力。
・ポート0xB3 ポート0xB2 の方向レジスタ(0xC3 と同じようなもの)。
・ポート0xE0〜0xE3 音声合成LSI。
・ポート0xFC〜0xFF 拡張漢字ROM。
ポート0xB1 bit2=0の時の
・ポート0xD0〜0xDE 内蔵FDD関連(μPD765AC とディスク用バッファ関連)
また、『PC-6001mkII 解析マニュアル』では、INT1/INT2 について記載がありません。
表に記載したとおり、INT1 がSUB-CPU(8049)、INT2 が外部割込み(JOYSTICK7ピン)です。
外部割り込みに関しては、以下のようにして確認できます。
1)2トリガのJOY-STICK を1P側につなぐ
2)mode2 page4 で立ち上げる
3)タイマ割り込みをOFF にする → OUT &HB0,5
→タイマ割り込みが停止したため、カーソルの点滅が止まります。
4)外部割込みのアドレスを、タイマ割り込みと同じ値に設定する → OUT &HF5,6
5)外部割込みを有効にする → OUT &HF3,&HD0
この状態でトリガ2を押すと、カーソルが点滅します。
何かに使えそうな、使えなさそうな割り込みです。
I/O表
『PC-Techknow6001』『PC-6001mkII 解析マニュアル』を参考にしていますが、
記載されていない所や間違いなどを修正したつもりです。
記載されていないのは、次のようなものです。
・ポート0xA2 (mk2/P66)ポートAに垂直同期(bit7)、水平同期(bit6) が接続されている
・ポート0xB1 内蔵FDD関連。
・ポート0xB2 CMT1、CMT3出力。
・ポート0xB3 ポート0xB2 の方向レジスタ(0xC3 と同じようなもの)。
・ポート0xE0〜0xE3 音声合成LSI。
・ポート0xFC〜0xFF 拡張漢字ROM。
ポート0xB1 bit2=0の時の
・ポート0xD0〜0xDE 内蔵FDD関連(μPD765AC とディスク用バッファ関連)
また、『PC-6001mkII 解析マニュアル』では、INT1/INT2 について記載がありません。
表に記載したとおり、INT1 がSUB-CPU(8049)、INT2 が外部割込み(JOYSTICK7ピン)です。
外部割り込みに関しては、以下のようにして確認できます。
1)2トリガのJOY-STICK を1P側につなぐ
2)mode2 page4 で立ち上げる
3)タイマ割り込みをOFF にする → OUT &HB0,5
→タイマ割り込みが停止したため、カーソルの点滅が止まります。
4)外部割込みのアドレスを、タイマ割り込みと同じ値に設定する → OUT &HF5,6
5)外部割込みを有効にする → OUT &HF3,&HD0
この状態でトリガ2を押すと、カーソルが点滅します。
何かに使えそうな、使えなさそうな割り込みです。
2011年12月22日
66回路図(3)
BSch3V で作成した回路図もアップします。
mk2回路図
66回路図
また、mk2、66 に搭載されているカスタムLSIの端子の一覧表もアップします。
カスタムLSI端子一覧
個人的に解析しているものなので、間違いなどあるかも知れません。
mk2回路図
66回路図
また、mk2、66 に搭載されているカスタムLSIの端子の一覧表もアップします。
カスタムLSI端子一覧
個人的に解析しているものなので、間違いなどあるかも知れません。
2011年12月21日
66解析(2)
ロジアナを使って調べた所、カスタムLSIの動作がほぼ理解できました。
I/O ポートなどの資料については、mk2以降ではほぼこの一冊しかないと思われる『 PC-6001mkII_解析マニュアル_I 』を参考にしていますが、この本にも記載されていないものがかなりあるようです。
ジョイスティックの7ピンから割り込みが発生できるとか、CMT1、CMT3に出力が可能だとか、結構変な(?)仕様のものもあります。
I/O ポートなどの情報に関しては、後日まとめるつもりです。
今の所、理解できていないのは、
・IOC (PCZ80-2)から、FDC(PCZ80-5)へ出力されている信号の内の1本の詳細が不明(全然変化してくれない)。
・MEMC(PCZ80-1)から、CRTC2(PCZ80-7)へ、SUB-CPUの割り込み応答信号がナゼか出力されている。
の2点です。
特に2つ目が気になります。描画するのと、SUB-CPUの動作は無関係のはずなのに...
I/O ポートなどの資料については、mk2以降ではほぼこの一冊しかないと思われる『 PC-6001mkII_解析マニュアル_I 』を参考にしていますが、この本にも記載されていないものがかなりあるようです。
ジョイスティックの7ピンから割り込みが発生できるとか、CMT1、CMT3に出力が可能だとか、結構変な(?)仕様のものもあります。
I/O ポートなどの情報に関しては、後日まとめるつもりです。
今の所、理解できていないのは、
・IOC (PCZ80-2)から、FDC(PCZ80-5)へ出力されている信号の内の1本の詳細が不明(全然変化してくれない)。
・MEMC(PCZ80-1)から、CRTC2(PCZ80-7)へ、SUB-CPUの割り込み応答信号がナゼか出力されている。
の2点です。
特に2つ目が気になります。描画するのと、SUB-CPUの動作は無関係のはずなのに...
2011年12月17日
66解析(1)
mk2、66 の回路図は一応出来ましたが、カスタムLSIの動作で分からない部分も多いのも事実です。
で、実機がせっかくあるので、実機を動かしながらモニタリングすることにしました。
ロジアナは、カメレオンUSBのロジアナで、myLA で表示させます。
モニタリングしたい箇所が多いので、半田付けして引き出しました。

見た目がすごい事になってます。
とりあえず取った波形がコチラ。

画面波形.mla
これは、モード5のSCREEN3 で、以下のプログラムを実行した結果を表示させた時のものです。
10 SCREEN 3,2,2:CLS
20 FOR I=0 TO 16
30 LINE (0,I*10)-(319,I*19+9),I,BF
40 NEXT
また、よく分からなかったCMT1、CMT3と、AY-3-8910 のIOA6、IOA7 を一緒にモニタリングしました。
IOA6、IOA7 ですが、VSYNC、HSYNC が出力されているようです(もしかしてよく知られてる?)
実際に、AY-3-8910 から読み出しする事も出来ました。
HSYNC はイマイチですが、VSYNC は使えそうな信号です。
で、実機がせっかくあるので、実機を動かしながらモニタリングすることにしました。
ロジアナは、カメレオンUSBのロジアナで、myLA で表示させます。
モニタリングしたい箇所が多いので、半田付けして引き出しました。
見た目がすごい事になってます。
とりあえず取った波形がコチラ。
画面波形.mla
これは、モード5のSCREEN3 で、以下のプログラムを実行した結果を表示させた時のものです。
10 SCREEN 3,2,2:CLS
20 FOR I=0 TO 16
30 LINE (0,I*10)-(319,I*19+9),I,BF
40 NEXT
また、よく分からなかったCMT1、CMT3と、AY-3-8910 のIOA6、IOA7 を一緒にモニタリングしました。
IOA6、IOA7 ですが、VSYNC、HSYNC が出力されているようです(もしかしてよく知られてる?)
実際に、AY-3-8910 から読み出しする事も出来ました。
HSYNC はイマイチですが、VSYNC は使えそうな信号です。
2011年12月15日
66回路図(1)
PC-6601 についても回路図を作成しました。
が、多分訂正が入るので、最終版になった時にアップしたいと思います。
実は、mk2 と66 では、基本的な回路がほとんど同じです。mk2から66への変更点は、以下の通りです。
○FDD周り
・FDDユニットとのインタフェースに使っていた8255がなくなり、FDDコントローラ(PCZ80-05)が追加されている。
・FDDの制御用に、μPC765A が追加されている。
・FDDコントローラ(PCZ80-05)は、8255相当の動作と、μPC765Aの周辺の回路を取り込んでいると思われる。
○その他
・カスタムLSIの使い方など、ほぼ同じ。
・I/Oコントローラ(PCZ80-02)に、FDDコントローラ(PCZ80-05)からの信号線が数本追加されている。
・CPUのクロックを生成している発信器の周波数が、15.9744MHzから、16.000MHzに変更されている。
・リセット用IC(電源が降下したときにリセットする)が追加されている。
・音声合成LSIからの出力を増幅しているアンプに、コンデンサが追加されている。これは、ジャンパレベルの追加で、何か問題があったのだろう。
・3.5MHzのクロックラインの一部に、コンデンサが追加されている。これもジャンパレベルの追加で、遅延値を稼ぐ目的だと思われる。
音声出力に音階が付けられる変更に関しては、ソフトウエアレベル(ROMの変更など)で行われているようです。
ちなみに、FDD周りの回路は、66SRの回路とほぼ同じでした。他のカスタムLSIは、全然違うようです。
が、多分訂正が入るので、最終版になった時にアップしたいと思います。
実は、mk2 と66 では、基本的な回路がほとんど同じです。mk2から66への変更点は、以下の通りです。
○FDD周り
・FDDユニットとのインタフェースに使っていた8255がなくなり、FDDコントローラ(PCZ80-05)が追加されている。
・FDDの制御用に、μPC765A が追加されている。
・FDDコントローラ(PCZ80-05)は、8255相当の動作と、μPC765Aの周辺の回路を取り込んでいると思われる。
○その他
・カスタムLSIの使い方など、ほぼ同じ。
・I/Oコントローラ(PCZ80-02)に、FDDコントローラ(PCZ80-05)からの信号線が数本追加されている。
・CPUのクロックを生成している発信器の周波数が、15.9744MHzから、16.000MHzに変更されている。
・リセット用IC(電源が降下したときにリセットする)が追加されている。
・音声合成LSIからの出力を増幅しているアンプに、コンデンサが追加されている。これは、ジャンパレベルの追加で、何か問題があったのだろう。
・3.5MHzのクロックラインの一部に、コンデンサが追加されている。これもジャンパレベルの追加で、遅延値を稼ぐ目的だと思われる。
音声出力に音階が付けられる変更に関しては、ソフトウエアレベル(ROMの変更など)で行われているようです。
ちなみに、FDD周りの回路は、66SRの回路とほぼ同じでした。他のカスタムLSIは、全然違うようです。
2011年12月10日
mk2回路図(3)
mk2の回路図で、ある程度分かっている事を書いておきます。
・画像出力
Hと記載しているのは、15色出力するための信号(RGB以外)です。
RFモジュールへの出力の端子名は、RFモジュール内に書かれていたものを参考にしました。
・サブCPU
PC-6001とほとんど同じです。ちなみにキーボードのコネクタも同じなので、PC-6001のキーボードがそのまま使えます。
・音声出力
PC-6001では、AY-3-8910 の3本の出力を直結していましたが、mk2 ではC結しています。また、音声合成LSIの出力は小さいのか、アンプ2段を入れた後に、C結しています。
・DRAM/ROM
DRAM周りは容量が増えた以外は、PC-6001とあまり変わっていません(制御がカスタムLSIになっていますが)。
ROMは詳しく調べていませんが、回路図と容量から内容を判断しました。
漢字ROMとBASICROMが32Kバイト、音声データとキャラクラデータが16Kバイトです。
漢字ROMは、ROM内部は左右に分かれていないようです。アドレスを1つずらす事で、左右を分けているみたいです。
音声合成LSI もここに置きました。クロックがなぜか3.5MHzです。ちょっと違和感あり。
・PSG
PC-6001とほとんど同じです。ただし、IOA6、IOA7 にカスタムLSIからナゾの出力があります。
・電源部
特に情報はありません。ICの入力終端で、電源直結を嫌って、プルアップ抵抗を付けています。
・メモリコントローラ、I/Oコントローラ
詳細はまだ調査中です。
・CRTコントローラ
詳細はまだ調査中です。CRTコントローラ1から、DRAMに対してアドレスを出力しているようです(画面描画時)。
また、CRTコントローラ1のクロックが見当たりません。見落としている線があるかも。
・CPU/拡張コネクタ/FDDインタフェース
CPU、FDDインタフェースは、特に目立ったものはありません。
拡張コネクタは、PC-6001と若干変わっているようです。
(FDD、拡張コネクタの端子は、MORIYAさんトコのものを参考にしました)
また、各電源とGNDの間に、タンタルコンデンサが入っていますが、これが劣化して電源ショートすることがあります。
電解コンデンサに替えた方がいいかなー、と思います(責任持てませんが)。
・CMT
1,3ピンに、カスタムLSIから出力されている事と、MOTORONにつながっている抵抗が変わった事を除けば、PC-6001と全く同じです。
また、電源-GND間のタンタルコンデンサ(C33)は、上記と同様、電源ショートの可能性があります。
・16M系クロック
クロック回路、リセット回路は、特に目立ったものはありません。
CN10、CN11 は、RS-232C ボードへのコネクタです。PC-6001と比べて、信号が一部変わっています(nWR、nRD)。ですので、同じ232Cボードが使えないかも知れません。
・14M系クロック
画像系のクロックです。スーパーインポーズ回路から入力されるクロックとのセレクタになっています。
・画像出力
Hと記載しているのは、15色出力するための信号(RGB以外)です。
RFモジュールへの出力の端子名は、RFモジュール内に書かれていたものを参考にしました。
・サブCPU
PC-6001とほとんど同じです。ちなみにキーボードのコネクタも同じなので、PC-6001のキーボードがそのまま使えます。
・音声出力
PC-6001では、AY-3-8910 の3本の出力を直結していましたが、mk2 ではC結しています。また、音声合成LSIの出力は小さいのか、アンプ2段を入れた後に、C結しています。
・DRAM/ROM
DRAM周りは容量が増えた以外は、PC-6001とあまり変わっていません(制御がカスタムLSIになっていますが)。
ROMは詳しく調べていませんが、回路図と容量から内容を判断しました。
漢字ROMとBASICROMが32Kバイト、音声データとキャラクラデータが16Kバイトです。
漢字ROMは、ROM内部は左右に分かれていないようです。アドレスを1つずらす事で、左右を分けているみたいです。
音声合成LSI もここに置きました。クロックがなぜか3.5MHzです。ちょっと違和感あり。
・PSG
PC-6001とほとんど同じです。ただし、IOA6、IOA7 にカスタムLSIからナゾの出力があります。
・電源部
特に情報はありません。ICの入力終端で、電源直結を嫌って、プルアップ抵抗を付けています。
・メモリコントローラ、I/Oコントローラ
詳細はまだ調査中です。
・CRTコントローラ
詳細はまだ調査中です。CRTコントローラ1から、DRAMに対してアドレスを出力しているようです(画面描画時)。
また、CRTコントローラ1のクロックが見当たりません。見落としている線があるかも。
・CPU/拡張コネクタ/FDDインタフェース
CPU、FDDインタフェースは、特に目立ったものはありません。
拡張コネクタは、PC-6001と若干変わっているようです。
(FDD、拡張コネクタの端子は、MORIYAさんトコのものを参考にしました)
また、各電源とGNDの間に、タンタルコンデンサが入っていますが、これが劣化して電源ショートすることがあります。
電解コンデンサに替えた方がいいかなー、と思います(責任持てませんが)。
・CMT
1,3ピンに、カスタムLSIから出力されている事と、MOTORONにつながっている抵抗が変わった事を除けば、PC-6001と全く同じです。
また、電源-GND間のタンタルコンデンサ(C33)は、上記と同様、電源ショートの可能性があります。
・16M系クロック
クロック回路、リセット回路は、特に目立ったものはありません。
CN10、CN11 は、RS-232C ボードへのコネクタです。PC-6001と比べて、信号が一部変わっています(nWR、nRD)。ですので、同じ232Cボードが使えないかも知れません。
・14M系クロック
画像系のクロックです。スーパーインポーズ回路から入力されるクロックとのセレクタになっています。
mk2回路図(2)
先にアップしたのは、png ファイルでしたが、BSch3V という回路図エディタで作成しています。
これだと拡大しても見やすいので、必要な方はこちらをどうぞ。
mk2回路図(BSch3V)
回路図ですがまだ解析途中なので、将来的に修正すると思います(特にカスタムLSI周り)。
昔に取扱説明書を捨ててしまったので(本体も捨てたんですが...)、以下の事を教えてくれるとありがたいです。
・スーパーインポーズ端子の端子機能(mk2の取扱説明書に書かれていると思います)
・CMT端子の端子機能(これもmk2の取扱説明書に書かれていると思います)
(CMT端子の1、3pinに、カスタムLSIからの出力が接続されています。詳細不明)
・AY-3-8910 のIOA6、IOA7に出力されている内容。
(ジョイスティックポートの上位2ビットに、カスタムLSIからの出力が接続されています。これも詳細不明)
2011年09月28日
PC-6001の回路図の解析について
PC-6001 の回路図の解析は一通り終わりました。
書き直した図面は、個人的には公開してもいいんですが、まずいかもしれませんのでとりあえず止めておきます。
しかし文章ばっかりで、回路図がないため、読んでる人はちんぷんかんぷんかも...
書き直した図面は、個人的には公開してもいいんですが、まずいかもしれませんのでとりあえず止めておきます。
しかし文章ばっかりで、回路図がないため、読んでる人はちんぷんかんぷんかも...
PC-6001の回路図の解析(6)
(回路図が手元にあることを前提に書いています)
・VDG関連(メイン・ブロック左半分)
左側の下の方に鎮座しているM5C6847が、VDG(Video Display Generator)で、画面表示を一手に担っているチップである。
その上のμPD2332が、キャラクタROMで、6847からとCPUからと両方アクセスが可能なようにセレクタやらバスドライバーなどが付いている。
μPD2332の左のLS157×2が、キャラクタROMのデータとグラフィックのデータを選ぶセレクタである。
μPD2332の右のIC63、IC4(LS367)がバスドライバー、その下のLS161は、キャラクタROMの縦方向のアドレスを生成しているカウンタ、LS161の右のLS157が、6847とCPUのアドレスを選択しているセレクタである。
6847 の右のLS374のさらに右のLS374 は、DRAMから読み出したデータをラッチするFFである。
(この辺りの回路はドンくさいようで、無駄な回路があるようです)
6847 のすぐ右のLS374は、DRAMから読み込んだアトリビュートデータをラッチするFFである。
この辺りが、PC-6001独特のようで、元々6847 にはアトリビュートという概念はないようである。
つまり、アトリビュートは元々固定値で、画面の一部で変えるようには出来ていないようである。
そのため、6847 は、読み出しアドレスを1回しか出力しない。
PC-6001の回路では、この読み出しアドレスを加工して、1アクセスに対して2回アクセスを行って、アトリビュートと画面データを読み出している。
そのための回路の1つは、6847 の左のLS257とその間のゲート数個で、これはアドレスを加工している。
アドレスの加工は、次の通り。
6847 アドレス → A(12:9)="0000" 固定 → アトリビュートアドレス
6847 アドレス → A(12:9) を+1する → データアドレス
例えば、6847 アドレスが、17FFHの場合(スクリーン3、4の最終アドレス)、
アトリビュートアドレス → 01FFH
データアドレス → 19FFH
となって、マニュアルなどに記載されている値と一致する。
2回読み出しのためのもう一つは、1アクセス時に、CASを2回出力することで実現している。
一番左下のLS161が、RAS、CASの生成や、各ラッチの生成のためのタイミングを作っている。このカウンタの出力をデコードすることにより、1アクセス(4clock@3.58MHz)でRASを1回、CASを2回出力している。この辺りの回路が、下の方のLS74が2つ並んでいる箇所である。
で、また回路図の間違い。下の方ある、BUSRQN を出力している LS74のクロック信号をドライブする素子がない。
前の間違いと同様に、十字交差のドット抜けのようで、下の方に2つ並んでいるLS74の右の上のLS04の出力が、そのクロックになる。
6847 のすぐ下のμPD4040、その右のNANDたすきがけ×2、その右のμPD4040は、それぞれ BUSRQN を生成する回路である。
6847 のHSN、FSN から、描画するタイミング(=DRAMにアクセスしたいタイミング)を作っている。左のμPD4040 が垂直側の描画エリアを生成し、右のμPD4040 が垂直側の描画エリアを生成している。
垂直側は、エリアのデコード値がぴったり描画エリアと同じになるが、水平側は、描画エリアより若干広くなっている。これは、BUSRQN → BUSACKN のタイミングが遅れる事を想定しているようである。
・VDG関連(メイン・ブロック左半分)
左側の下の方に鎮座しているM5C6847が、VDG(Video Display Generator)で、画面表示を一手に担っているチップである。
その上のμPD2332が、キャラクタROMで、6847からとCPUからと両方アクセスが可能なようにセレクタやらバスドライバーなどが付いている。
μPD2332の左のLS157×2が、キャラクタROMのデータとグラフィックのデータを選ぶセレクタである。
μPD2332の右のIC63、IC4(LS367)がバスドライバー、その下のLS161は、キャラクタROMの縦方向のアドレスを生成しているカウンタ、LS161の右のLS157が、6847とCPUのアドレスを選択しているセレクタである。
6847 の右のLS374のさらに右のLS374 は、DRAMから読み出したデータをラッチするFFである。
(この辺りの回路はドンくさいようで、無駄な回路があるようです)
6847 のすぐ右のLS374は、DRAMから読み込んだアトリビュートデータをラッチするFFである。
この辺りが、PC-6001独特のようで、元々6847 にはアトリビュートという概念はないようである。
つまり、アトリビュートは元々固定値で、画面の一部で変えるようには出来ていないようである。
そのため、6847 は、読み出しアドレスを1回しか出力しない。
PC-6001の回路では、この読み出しアドレスを加工して、1アクセスに対して2回アクセスを行って、アトリビュートと画面データを読み出している。
そのための回路の1つは、6847 の左のLS257とその間のゲート数個で、これはアドレスを加工している。
アドレスの加工は、次の通り。
6847 アドレス → A(12:9)="0000" 固定 → アトリビュートアドレス
6847 アドレス → A(12:9) を+1する → データアドレス
例えば、6847 アドレスが、17FFHの場合(スクリーン3、4の最終アドレス)、
アトリビュートアドレス → 01FFH
データアドレス → 19FFH
となって、マニュアルなどに記載されている値と一致する。
2回読み出しのためのもう一つは、1アクセス時に、CASを2回出力することで実現している。
一番左下のLS161が、RAS、CASの生成や、各ラッチの生成のためのタイミングを作っている。このカウンタの出力をデコードすることにより、1アクセス(4clock@3.58MHz)でRASを1回、CASを2回出力している。この辺りの回路が、下の方のLS74が2つ並んでいる箇所である。
で、また回路図の間違い。下の方ある、BUSRQN を出力している LS74のクロック信号をドライブする素子がない。
前の間違いと同様に、十字交差のドット抜けのようで、下の方に2つ並んでいるLS74の右の上のLS04の出力が、そのクロックになる。
6847 のすぐ下のμPD4040、その右のNANDたすきがけ×2、その右のμPD4040は、それぞれ BUSRQN を生成する回路である。
6847 のHSN、FSN から、描画するタイミング(=DRAMにアクセスしたいタイミング)を作っている。左のμPD4040 が垂直側の描画エリアを生成し、右のμPD4040 が垂直側の描画エリアを生成している。
垂直側は、エリアのデコード値がぴったり描画エリアと同じになるが、水平側は、描画エリアより若干広くなっている。これは、BUSRQN → BUSACKN のタイミングが遅れる事を想定しているようである。
PC-6001の回路図の解析(5)
(回路図が手元にあることを前提に書いています)
・CPU、DRAM、BASICROM関連(メイン・ブロック右半分)
右下のμPD2364×2は、BASICROMで、その右のLS138は、アドレスデコーダ。このデコーダで、0000H〜、2000H〜、4000H〜、6000H〜のイネーブル信号を生成している。
その上のμPD4116×8は、DRAMで、その下の157は、row/column のアドレスの切り替え用のセレクタである。
μPD780の下、μPD4116の左上のLS367は、DRAMの出力イネーブル用のトライステートバッファである。
その右のLS75で、MREQNでアドレスA15、A14をラッチしている。
ここまではいいとして、その上のLS74とゲートの山がすごくわかりにくい。しかも回路に一部間違いがある。
回路の間違いは、図面の右側中央のVRASN(図面上は、V.RASの上にバー)、のすぐ左のLS04の入力信号を、ドライブする素子がない。追っていくと、全部入力にしかつながっていない。
結論からいうと、この信号は、VRAMSW2から接続されるべきで、十字交点のドットが抜けているようである。
LS74の内、下の2つで、μPD780がDRAMにアクセスするためのCAS、RASの元を生成している。それをA15、A14のラッチした値で、どのDRAMに対して、RAS、CASを生成するかを決めている。
μPD4116×8の右横に書かれているRASN(図面上は、RASの上にバー)の信号が、内蔵DRAM(C000H〜FFFFH)へのRAS信号、外部に出力しているRASNが、PC-6006上のDRAM(8000H〜BFFFH)のRAS信号である。CASは共通である。
CAS、RASは、μPD780からのアクセス以外に、6847からのアクセスのための信号があるが、単純にL有意のORを取っているだけである。これは、同時に発生することがないためである。
DRAMの出力イネーブルも、DRAMごと(8000H〜BFFFH、C000H〜FFFFH)に生成されており、μPD780からの読み出し要求に対する出力イネーブルがごちゃごちゃしたゲートの中で実現されている。ちなみにPC-6006上のDRAMに対する出力イネーブルは、外部に出力しているVRDN(図面上は、V.RDの上にバー)である。
出力イネーブルも、CAS、RASと同様に6847からの信号と単純にORされている。
・CPU、DRAM、BASICROM関連(メイン・ブロック右半分)
右下のμPD2364×2は、BASICROMで、その右のLS138は、アドレスデコーダ。このデコーダで、0000H〜、2000H〜、4000H〜、6000H〜のイネーブル信号を生成している。
その上のμPD4116×8は、DRAMで、その下の157は、row/column のアドレスの切り替え用のセレクタである。
μPD780の下、μPD4116の左上のLS367は、DRAMの出力イネーブル用のトライステートバッファである。
その右のLS75で、MREQNでアドレスA15、A14をラッチしている。
ここまではいいとして、その上のLS74とゲートの山がすごくわかりにくい。しかも回路に一部間違いがある。
回路の間違いは、図面の右側中央のVRASN(図面上は、V.RASの上にバー)、のすぐ左のLS04の入力信号を、ドライブする素子がない。追っていくと、全部入力にしかつながっていない。
結論からいうと、この信号は、VRAMSW2から接続されるべきで、十字交点のドットが抜けているようである。
LS74の内、下の2つで、μPD780がDRAMにアクセスするためのCAS、RASの元を生成している。それをA15、A14のラッチした値で、どのDRAMに対して、RAS、CASを生成するかを決めている。
μPD4116×8の右横に書かれているRASN(図面上は、RASの上にバー)の信号が、内蔵DRAM(C000H〜FFFFH)へのRAS信号、外部に出力しているRASNが、PC-6006上のDRAM(8000H〜BFFFH)のRAS信号である。CASは共通である。
CAS、RASは、μPD780からのアクセス以外に、6847からのアクセスのための信号があるが、単純にL有意のORを取っているだけである。これは、同時に発生することがないためである。
DRAMの出力イネーブルも、DRAMごと(8000H〜BFFFH、C000H〜FFFFH)に生成されており、μPD780からの読み出し要求に対する出力イネーブルがごちゃごちゃしたゲートの中で実現されている。ちなみにPC-6006上のDRAMに対する出力イネーブルは、外部に出力しているVRDN(図面上は、V.RDの上にバー)である。
出力イネーブルも、CAS、RASと同様に6847からの信号と単純にORされている。
PC-6001の回路図の解析(4)
(回路図が手元にあることを前提に書いています)
・割り込み関連(サブ・ブロック右側)
右下のLS75は、CS3Nがアクティブの時に、データのbit3-0をラッチしている。これは、I/OポートBxHに出力した値を保持するためのもの。
bit3は、CMTのモーターON。
bit2、1は、6847が参照するRAMのアドレスを決定するもの(ページ1〜4のどのページを表示するかの切り替え)
bit0は、その上にある2msタイマの停止'L'で停止)。
その上のLS367は、Z80が割り込みを認識した時に返してくるM1N='L'とIORQ='L'のパルスを用いて、タイマ割り込みが発生した場合は、固定値"06H"をデータバスに返している。
その上のμPD4040は12ビットカウンタで、2msを数えているカウンタ。タイマが満了すると、タイマを停止し、割り込みラッチに出力する。Z80が割り込みを認識して、値を読み出した後に、再起動する。
その上の怪しいたすきがけORが、割り込みをラッチ+優先制御を行っている回路である。
割り込みは、8049からと、タイマの2種類があり、片方が割り込みが発生して、Z80が認識する前に逆の方の割り込みが発生しても、無視するようになっている。全く同時の場合は、8049が優先となるようである。
・割り込み関連(サブ・ブロック右側)
右下のLS75は、CS3Nがアクティブの時に、データのbit3-0をラッチしている。これは、I/OポートBxHに出力した値を保持するためのもの。
bit3は、CMTのモーターON。
bit2、1は、6847が参照するRAMのアドレスを決定するもの(ページ1〜4のどのページを表示するかの切り替え)
bit0は、その上にある2msタイマの停止'L'で停止)。
その上のLS367は、Z80が割り込みを認識した時に返してくるM1N='L'とIORQ='L'のパルスを用いて、タイマ割り込みが発生した場合は、固定値"06H"をデータバスに返している。
その上のμPD4040は12ビットカウンタで、2msを数えているカウンタ。タイマが満了すると、タイマを停止し、割り込みラッチに出力する。Z80が割り込みを認識して、値を読み出した後に、再起動する。
その上の怪しいたすきがけORが、割り込みをラッチ+優先制御を行っている回路である。
割り込みは、8049からと、タイマの2種類があり、片方が割り込みが発生して、Z80が認識する前に逆の方の割り込みが発生しても、無視するようになっている。全く同時の場合は、8049が優先となるようである。
PC-6001の回路図の解析(3)
(回路図が手元にあることを前提に書いています)
・μPD8255、μPD8049周辺(サブ・ブロック右側)
μPD8255の入力側は、怪しいNANDのRSラッチの出力(実は『μPD8049が割り込みを起こしましたよ』信号)がアクティブでない場合は、通常のアクセス(アドレス=9xHのI/Oへのリードライトアクセス)をする。
アクティブの場合は、強制的にA1='L'、A0='L'、CSN='L'として、RDNをINTACKNにしている。
これで、Z80が割り込みを認識した時に返してくるM1N='L'とIORQ='L'のパルスを用いて、8255からの読み出しを行っているようである。
μPD8255の出力側は、ポートBとポートCのbit0がプリンタポートで、後ろのバッファがついているため、出力しか出来ない。
ポートAは、μPD8049との通信用、ポートCのbit7〜3も、μPD8049である。
ネットでいろいろ調べると、ポートA、ボートCのbit7〜3は、8255のmode2を使っているらしい。
ここで図面に間違いを発見。ポートCの3,4,6,7 がμPD8049につながれているようだが、線が3本しか書かれていない。どのポートがどこにつながっているのか?PC3がつながれていないように見えるが、確証は取れず。保留。
ポートCのbit1は、CRTKILLNで、6847のDMA転送の禁止(正確には、BUSRQNを禁止する)。
ポートCのbit2は、CGSWNで、キャラクタROMのチップセレクトとなっている。
ポートCのbit2〜0のアクセスは、8255の「Single Bit/Reset」を使う。アドレス 90H〜93H が8255のI/O空間で、93Hは制御用のアドレスになる。
そのため、おなじみの(?) OUT &H93,2 は、ポートCのbit1 を 'L'にする(CRTKILLN を 'L'にする)コマンド、OUT &H93,4 は、ポートCのbit2 を 'L'にする(CSGWM を 'L'にする→6000Hからのバンクを変更する)コマンドとなる。
μPD8049のポート1は出力専門、ポート2は入力専門となっている。入力が2ビット足りなかったのか、セレクタで切り替えて使用している。
ポート1のbit3-0はBCDデコーダの後、キーマトリックスのY方向に出力している。そのキーマトリックスのX方向からの入力8本がそのままポート2に入ってくる(セレクタがキーマトリックス側の場合)。
ポート1のbit4は、入力セレクタの切り替え信号で、'L'の場合、ポート2のbit3にカセットからの入力が、bit1にRS-232CからのRxRDYが入力される。
ポート1のbit5はカセットへの出力。
ポート1のbit6はキーマトリックスへの出力(多分、かなキーのLEDの点灯用)。
ポート1のbit7は、割り込み発生を通知する信号で、怪しいNANDのRSラッチへ出力されている。
・μPD8255、μPD8049周辺(サブ・ブロック右側)
μPD8255の入力側は、怪しいNANDのRSラッチの出力(実は『μPD8049が割り込みを起こしましたよ』信号)がアクティブでない場合は、通常のアクセス(アドレス=9xHのI/Oへのリードライトアクセス)をする。
アクティブの場合は、強制的にA1='L'、A0='L'、CSN='L'として、RDNをINTACKNにしている。
これで、Z80が割り込みを認識した時に返してくるM1N='L'とIORQ='L'のパルスを用いて、8255からの読み出しを行っているようである。
μPD8255の出力側は、ポートBとポートCのbit0がプリンタポートで、後ろのバッファがついているため、出力しか出来ない。
ポートAは、μPD8049との通信用、ポートCのbit7〜3も、μPD8049である。
ネットでいろいろ調べると、ポートA、ボートCのbit7〜3は、8255のmode2を使っているらしい。
ここで図面に間違いを発見。ポートCの3,4,6,7 がμPD8049につながれているようだが、線が3本しか書かれていない。どのポートがどこにつながっているのか?PC3がつながれていないように見えるが、確証は取れず。保留。
ポートCのbit1は、CRTKILLNで、6847のDMA転送の禁止(正確には、BUSRQNを禁止する)。
ポートCのbit2は、CGSWNで、キャラクタROMのチップセレクトとなっている。
ポートCのbit2〜0のアクセスは、8255の「Single Bit/Reset」を使う。アドレス 90H〜93H が8255のI/O空間で、93Hは制御用のアドレスになる。
そのため、おなじみの(?) OUT &H93,2 は、ポートCのbit1 を 'L'にする(CRTKILLN を 'L'にする)コマンド、OUT &H93,4 は、ポートCのbit2 を 'L'にする(CSGWM を 'L'にする→6000Hからのバンクを変更する)コマンドとなる。
μPD8049のポート1は出力専門、ポート2は入力専門となっている。入力が2ビット足りなかったのか、セレクタで切り替えて使用している。
ポート1のbit3-0はBCDデコーダの後、キーマトリックスのY方向に出力している。そのキーマトリックスのX方向からの入力8本がそのままポート2に入ってくる(セレクタがキーマトリックス側の場合)。
ポート1のbit4は、入力セレクタの切り替え信号で、'L'の場合、ポート2のbit3にカセットからの入力が、bit1にRS-232CからのRxRDYが入力される。
ポート1のbit5はカセットへの出力。
ポート1のbit6はキーマトリックスへの出力(多分、かなキーのLEDの点灯用)。
ポート1のbit7は、割り込み発生を通知する信号で、怪しいNANDのRSラッチへ出力されている。
PC-6001の回路図の解析(2)
(回路図が手元にあることを前提に書いています)
図面を見ていても、ごちゃごちゃしたゲートや、実体配線図みたいに書かれているセレクタなどがあって、すごく読みづらい。なので、自分で回路を解釈しつつ、回路を書き直してみることにする。
とりあえず簡単そうなサブ・ブロックから...
・AY-3-8910周辺(サブ・ブロック左側)
出力(ANALOG、A、B、C)にぶら下がっているμPC575は、多分アンプだろう。なのでとりあえず無視。FPGAでの実現方法はとりあえず後回しにする。
ポートA、Bには、ジョイスティックポートがつながっているだけ。セレクタで1Pと2Pを切り替えている。出力も出来るみたいだ。知らなかった。
真ん中上部のLS138は、I/Oポートのデコーダで、CS0N、CS1N、〜が、I/Oポートの8xH、9xH、〜を選択した時にアクティブになる。
ちょうど中央のLS90は、2進+5進カウンタで、AY-3-8910へのアクセスタイミングとCPUへのウエイトのタイミングを生成している。なぜ2進+5進カウンタなのか不明。AY-3-8910をもうちょっと詳しく見る必要がありそうではある。
上記のアクセスタイミングの回路とアドレス線より、AY-3-8910へアクセスしている。
アドレス=0xA0 の時、LATCH ADDRESS
アドレス=0xA1 の時、WRITE TO PSG
アドレス=0xA2 の時、READ FROM PSG
アドレス=0xA3 の時、INACTIVE
となる。INACTIVE以外は、4クロックに1クロックの割合で'H'になるパルスを上記のアクセスタイミング回路が生成している。
図面を見ていても、ごちゃごちゃしたゲートや、実体配線図みたいに書かれているセレクタなどがあって、すごく読みづらい。なので、自分で回路を解釈しつつ、回路を書き直してみることにする。
とりあえず簡単そうなサブ・ブロックから...
・AY-3-8910周辺(サブ・ブロック左側)
出力(ANALOG、A、B、C)にぶら下がっているμPC575は、多分アンプだろう。なのでとりあえず無視。FPGAでの実現方法はとりあえず後回しにする。
ポートA、Bには、ジョイスティックポートがつながっているだけ。セレクタで1Pと2Pを切り替えている。出力も出来るみたいだ。知らなかった。
真ん中上部のLS138は、I/Oポートのデコーダで、CS0N、CS1N、〜が、I/Oポートの8xH、9xH、〜を選択した時にアクティブになる。
ちょうど中央のLS90は、2進+5進カウンタで、AY-3-8910へのアクセスタイミングとCPUへのウエイトのタイミングを生成している。なぜ2進+5進カウンタなのか不明。AY-3-8910をもうちょっと詳しく見る必要がありそうではある。
上記のアクセスタイミングの回路とアドレス線より、AY-3-8910へアクセスしている。
アドレス=0xA0 の時、LATCH ADDRESS
アドレス=0xA1 の時、WRITE TO PSG
アドレス=0xA2 の時、READ FROM PSG
アドレス=0xA3 の時、INACTIVE
となる。INACTIVE以外は、4クロックに1クロックの割合で'H'になるパルスを上記のアクセスタイミング回路が生成している。
PC-6001の回路図の解析(1)
(回路図が手元にあることを前提に書いています)
RFモジュレータ部と電源部は、関係ないので無視。
メインとなるのが、A3よりちょっと大きな紙の「メイン・ブロック」と「サブ・ブロック」。
メイン・ブロック
・μPD780(Z80相当品)とその周辺回路とBASICROM
・M5C6847(MC6847相当品)とその周辺回路とキャラクタROM
・DRAM とチップセレクタ回路
サブ・ブロック
・AY-3-8910 とその周辺回路
・μPD8255とその周辺回路と、プリンタポート
・μPD8049(サブCPU)とサブCPUが制御しているキーマトリックス、カセットインタフェース
・2msタイマと、割り込み優先制御回路
・チップセレクタ回路
結構多いようにも見えるが、実はこれだけしかない。
RFモジュレータ部と電源部は、関係ないので無視。
メインとなるのが、A3よりちょっと大きな紙の「メイン・ブロック」と「サブ・ブロック」。
メイン・ブロック
・μPD780(Z80相当品)とその周辺回路とBASICROM
・M5C6847(MC6847相当品)とその周辺回路とキャラクタROM
・DRAM とチップセレクタ回路
サブ・ブロック
・AY-3-8910 とその周辺回路
・μPD8255とその周辺回路と、プリンタポート
・μPD8049(サブCPU)とサブCPUが制御しているキーマトリックス、カセットインタフェース
・2msタイマと、割り込み優先制御回路
・チップセレクタ回路
結構多いようにも見えるが、実はこれだけしかない。

