2022年07月04日

PC-6011回路図

  PC-6011の回路図

  修正版をアップします。

  写真だけでは判別できない部分がありますので、間違っている可能性があります。
 (ICの下の配線は見えないので)

  回路図の説明に関しても、加筆/修正しています。



  PC-6011回路図
220704_01_PC6011_1.PNG
220704_01_PC6011_2.PNG


○1枚目
  3つのスロットにP6からの信号をばらまいている回路です。

  通常の信号は、ほとんどP6の拡張コネクタから出ている線がそのまま3つの拡張スロットに繋がっています。
  違うのは以下の4種類の信号です。

 ・アドレスバス
  74LS367 を使って、ドライブし直しています。
  データバスには、ドライバは入っていません(8255に接続されている方はドライバが入っている)。

 ・nCS3、nCS2
  74LS125 を使って、ドライブし直しています。
  ドライバを入れている理由や、ドライバの回路などについてはよくわかりません。
  (回路に関しては、合っているかどうかも不明)

 ・nDRD2
  CPUCLK で叩き直しています。
  アドレスバスにドライバを挿入しているため、その遅延で誤動作をするのを防ぐ目的だと思われます。

 ・MSW1、MSW2
  カートリッジの抜き挿し時に、電源がOFFになるようにする信号です。

  3つの拡張スロットが、それぞれ

   ○基板が挿さっていない
   ○挿している基板のMSW1とMSW2の信号がつながっている

  のどちらかを満たしている場合にのみ、MSW1とMSW2が導通するような回路になっています。



  もしPC-6011を自作する場合は、

  ○アドレスバス、nCS3、nCS2、にはドライバを入れる。
   74LS244/74LS245でもよさそうだが、74LS367の方が駆動能力が大きい。
   (244/245はIOL=-24mA、367はIOL=-32mA)

  ○nDRD2をCPUCLKで叩き直す。

  ○MSW1、MSW2は、P6からの信号をそのまま全てのスロットに接続する。
  (PC-6011上では、MSW1とMSW2は導通させない)

  ○その他の信号線は、すべてP6からの信号をそのまま全てのスロットに接続。

  でいいかなと思います。



○2枚目
  フロッピードライブとのI/Fの回路です。
  以前に公開した予想図と、論理的には同じようです。

  やっている事は、

  A7-4 = 1101、nIORQ = "L"、nRD = "L" の時に、8255から読み出す。
  A7-4 = 1101、nIORQ = "L"、nWR = "L" の時に、8255から読み出す。

  です。


  CPUから見ると、

  I/Oポートの0xD0〜0xD3から読み出すと、8255からデータを読み出す。
  I/Oポートの0xD0〜0xD3に書き込むと、8255へデータを書き込む。

  の動作をします(0xD4〜0xD7への読み書きも同様の動きになります。いわゆるイメージです)。


  8255のA/B/Cポートについては、P6の回路と同じはずです(基板のパターンも追えないので未確認です)。


posted by えすび at 20:00| Comment(1) | P6解析:その他 | このブログの読者になる | 更新情報をチェックする

2022年07月03日

PC-6011回路図(途中版)

  PC-6011の回路図


  基板の写真の表裏がいろいろアップされたので、とりあえず途中まで作りました。


  PC-6011回路図(途中版)
220703_01_PC-6011途中.PNG


  フロッピーのI/F部分以外は大体書けているかと思います。

  通常の信号は、ほとんどP6の拡張コネクタから出ている線がそのまま3つの拡張スロットに繋がっています。
  違うのは以下の3種類の信号です。

 ・アドレスバス
  74LS367 を使って、ドライブし直しています。
  データバスには、ドライバは入っていません。

 ・nCS3、nCS2
  74LS125 を使って、ドライブし直しています。

 ・MSW1、MSW2
  カートリッジの抜き挿し時に、電源がOFFになるようにする信号です。

  3つの拡張スロットが、それぞれ

   ○基板が挿さっていない
   ○挿している基板のMSW1とMSW2の信号がつながっている

  のどちらかを満たしている場合にのみ、MSW1とMSW2が導通するような回路になっています。



  もしPC-6011を自作する場合は、

  ○アドレスバス、nCS3、nCS2、にはドライバを入れる。
   74LS244/74LS245でもよさそうだが、74LS367の方が駆動能力が大きい。
   (244/245はIOL=-24mA、367はIOL=-32mA)

  ○MSW1、MSW2は、P6からの信号をそのまま全てのスロットに接続。
  (PC-6011上では、MSW1とMSW2は導通させない)

  ○その他の信号線は、すべてP6からの信号をそのまま全てのスロットに接続。

  でいいかなと思います。



  フロッピーのI/F部分は、以前に勝手に予想した回路図と多少違うようです(本質的には同じ)。74LS74 が入っているのがちょっと気になる...


posted by えすび at 22:50| Comment(0) | P6解析:その他 | このブログの読者になる | 更新情報をチェックする

2022年03月19日

P6の-5V電源についての注意点

  P6の-5V電源についての注意点

  P6には、拡張コネクタに出力している電源が4種類あります。+5V、+12V、-5V、-12V ですが、このうち、+5V、+12V、-12V は電源ユニット内で生成されています。


  残りの -5V は、メイン基板上で、以下のような回路で生成されています。
220319_02_−5V生成回路.PNG


  この回路は、P6 の全機種でほぼ同じ回路です。

  ツェナーダイオードの諸元はわかりませんが、多分ツェナー電圧が5V程度だと思われます。


  この回路だと、-5V に流せる電流は

  (12-5)/150 = 47mA

  程度で、それ以上流すと電圧が 0V に近くなってきます。


  今回、そのままコンバータにこの -5V を使ったのですが、実測値では、-3.26V まで下がりました。


  この -5V は、P6内部と拡張RAMの DRAM の電源に使われていますが、消費電流がすごく小さいので上のような回路になっているのだと思われます。

  そのため、その他の用途で使用される事を想定していないので、使用時には注意が必要です。

posted by えすび at 21:35| Comment(0) | P6解析:その他 | このブログの読者になる | 更新情報をチェックする

2015年11月07日

151107_03_テクノウ3草案(能書き)

  最近、P6へのソフトウエア移植ばっかりやっていて、解析記事などがおろそかになっていました。テクノウ Vol.2(回路図篇)も発行してしまったので、次のテクノウvol.3をそろそろ作っていこうかと思います。

  テクノウvol.3をいきなり作っていくのは結構大変なので(挫折が見えている)、あんまりまとまらない感じでブログに書き溜めていき、それを編集するような格好にしたいと思います。

  過去に書いた内容など、重複した部分も出てきますがご容赦を。



posted by えすび at 15:56| Comment(0) | P6解析:その他 | このブログの読者になる | 更新情報をチェックする

2014年05月26日

SRのピギーバックROMについて

  ツイッターで話題になっていたのを調べました(^^;)


  初期の、というか大抵のmk2SR、66SRに搭載されているROMで、なぜか2階建てのROMがあります。
  親子亀みたいに、ROMの上にROMを実装しているものです(ピギーバックという)。

  mk2SR だと IC6、66SRだと IC9 です。


  なぜわざわざこういう事をしているかですが、どうも不具合対応のようです。
  ROMなのでプログラムが入っているワケですが、そのプログラムに致命的なバグがあったので、急遽EPROMを使って改修したのだと思います。


  ちゃんとバグなしの、普通のROMのmk2SR/66SRも存在するようです(うちのmk2SR/66SRは、両方とも親子亀でした)。


  バグありの方は、型番が HN613256 N63 で、バグなしの方は、HN613256 N95 です。
  N63とかN95とかいうのはマスク番号と呼ばれるもので、マスクROMの場合はROMのバージョン番号のようなものです。


  で、面白そうなので、どんなバグだったのかを調べてみました。


  そのままでは調べられないので、ちょっと加工します。

  これがその親子亀のROMです。見づらいですが2階建てです。

piggy1.jpg



  さらにソケットに挿して3階建てにします。そして、上のマスクROMからのみ出力がるように加工します。

piggy2.jpg



  後は通常通り、saver3で吸い出し、普通のROMと比較しました。


  修正された箇所は、音声合成のルーチンです(SYSROM2.64の0x4000〜)。
  FD周りが修正されたのかと思ったのですが、音声合成のルーチンが変更されています。

  比較した結果ですが、処理が増えている場所があり、その影響でアドレスがずれたりしていました。
  しかし、本質的には、5箇所のようです。


 1)66-BASIC と SR-BASIC の区別方法の修正(0x4016〜0x401C)
  音声合成ルーチンは、66-BASICでもSR-BASICでも、同じものが使われるようです。この際、どちらのBASICで動いているかの区別をしているような

のですが、その判別方法に問題があったようです。

  修正前は、アドレス0x0000のデータが0xC3ならばSR-BASICと判断してます。完全に間違いですが(^^;)...


 2)0x40D5〜0x40FFが0x00に変更されている
  修正前は何かのプログラムが入っています。

  CALL 0x0ADC とか、LD HL,(37C1H) とかあるので、どうもROMではない他のソフトのルーチンが入っているように思えます。
  CP/Mのプログラムかなぁ...


 3)何かのルーチンで分岐条件が一つ削除されている(0x42D5〜0x42D8)
  詳細はよく分かりません。


 4)0x43A8の後に処理が追加されている
  追加されている処理は、66-BASICの時のリード側のバンク切り替え処理です。

  SR-BASICでは、リード側のバンク切り替えは、ポート0x60〜0x67で行いますが、66-BASICでは、ポート0xF0、0xF1で行います。
  66-BASICでの、リードのバンク切り替え処理を追加しているみたいです。


 5)0x56B2〜0x56BFが0x00に変更されている。
  修正前は何かのプログラムが入っています。

  こっちは音声合成処理の一部のようなんですが、未使用なので上記4)の処理を追加するために削除されたようですね。



  多分...66-BASICでの音声合成のテストが不十分だったのか、工程的に後回しだったために、かなり後に発見されたバグのようですね...

posted by えすび at 22:18| Comment(2) | P6解析:その他 | このブログの読者になる | 更新情報をチェックする

2014年05月17日

mk2SRで66SRのメニュー画面を出す

  タイトル通りです(^^;)


  66SRとmk2SRのROM内容は、キャラクタROMやBASIC-ROMなど、全て同じです。

  じゃあ、という事で、mk2SR上で、66SRの起動メニューを表示させてみます。


・やり方

  1)SR-BASICを起動します(MODE=6)。
  2)mon コマンドでモニタに入ります。
  3)SA000 で、A000から以下のデータを入力します。

   FD 21 03 E2 DD 21 53 62 AF 3C C3 76 E6

  4)B でモニタを抜けて、EXEC&HA000 を実行します。


LD IY,0E203H
LD IX,06253H
XOR A
INC A
JP 0E607H ; ポート0x63=0xE2にして、JP 6253Hをする




  当然、66SRでmk2SRの起動メニューも出せます。

  1)SR-BASICを起動します(MODE=6)。
  2)mon コマンドでモニタに入ります。
  3)SA000 で、A000から以下のデータを入力します。

   FD 21 03 E2 DD 21 53 62 AF C3 76 E6

  4)B でモニタを抜けて、CLS:EXEC&HA000 を実行します。


LD IY,0E203H
LD IX,06253H
XOR A
JP 0E607H ; ポート0x63=0xE2にして、JP 6253Hをする



  一発ネタですね(^^;)

posted by えすび at 19:10| Comment(2) | P6解析:その他 | このブログの読者になる | 更新情報をチェックする

2014年04月12日

ROMカートリッジユーティリティ

  ROMカートリッジのユーティリティを作りました。

 ・ROMカートリッジからデータを読み出して、ディスクにセーブする。
 ・ディスクにセーブしたデータを読み出し、立ち上げる。

  が出来ます。


exrom.zip


  ただし、ROMカートリッジからデータを読み出すためには、P6の改造が一部必要になる場合があります。
  詳しくは同梱のマニュアルを参照して下さい。


  制御プログラム(BASIC)の方は手抜きのため、ファイル名などのチェックは行っていません。
  単純にBLOAD/BSAVEをしているだけです。



  BASICに返ってこないゲームなどは特に問題なく起動しますが、起動した後にBASICが起動するようなものは、BASICが起動してから不安定になる事があります(原因不明)。

  動作機種がmk2以降対応のため、初代機専用の画面モードを使用しているもの(ex:GHOST HUNTER)や、初代機専用のもの(ex:EXAS-BASICコンパイラ)は、うまく動作しません。


140412_01_exrom改造部分.JPG

  mk2に簡易版の改造回路を組み込んだ写真です。下の基板のキズが入っている箇所がパターンカットした部分です。

posted by えすび at 13:49| Comment(0) | P6解析:その他 | このブログの読者になる | 更新情報をチェックする

2014年04月09日

ROMカートリッジについて

  ROMカートリッジについてまとめました。結構知らないことがありました。


1.ROMカートリッジの種類
  プログラムの動き方から分類すると、以下の3つになります。

 1)本体BASICの起動時に、自動的にROM内のプログラムに移り、そのまま帰ってこないもの。ほとんどのROMカートリッジのゲームがこれに当たります。
 2)本体BASICの起動時に、ROM内の初期設定ルーチンだけが走り、BASICに戻ってくるもの。拡張BASICなどがこれに当たります。
 3)本体BASICの起動時には、ROM内のルーチンは全く通らないもの。EXAS-BASICコンパイラなどがこれに当たります。

 また、ROMには、初代PC-6001用、初代PC-6001+拡張BASIC用、mk2/66用、mk2SR/66SR用があります。

 基本的に、先発の機種対応のものは、後発の機種で動作させる事が可能です。
 しかし、特定の起動方法があったり、バグがあったりします(後述します)。

 以下、1)2)についてです。3)は起動時にMODEを適切に選択すれば、普通に使用できます。



2.初代PC-6001用カートリッジ

 本体BASIC起動時にROM内プログラムが走るROMの先頭には、以下の特定の情報が書かれています。

 0x4000=0x41("A")、0x4001=0x42("B")
 0x4002、0x4003 に書かれたアドレスをCALLします。

 例えば、0x4000〜のデータが、

 0x41、0x42、0x00、0x41、・・・

 となっている場合、BASIC起動時、CALL 0x4100 が実行されます。

 ゲームなどでは、そのままBASICに帰らずにプログラムが実行されますが、ツールなどの場合は、起動時の初期設定の後、RET 命令で、元のBASICに戻ります。

 カートリッジ内のプログラムからRETURNしたら、BASIC起動の続きを行います。”How Many Pages?”のページ設定やワークエリアの設定などが行われます。

 ROMカートリッジ内にRAMがある場合や、ROM/RAMカートリッジにROMを挿して使う場合は、RAMが32Kで起動します。



3.初代PC-6001用カートリッジをmk2/66/mk2SR/66SRで使用する

 初代PC-6001用カートリッジをmk2以降で使用した場合、以下のような動作になります。

 BASIC初期設定
 ↓
 RAMサイズの設定
 ↓
 ROM内ルーチンのチェック(0x4000、0x4001="AB"の時、CALL (4002H) )
 ↓
 ページ設定(”How Many Pages?”)
 ↓
 BASIC起動


 0x4000、0x4001="AB"になっている場合は、RETURNした後には、N60m/N66-BASICには戻りません。そのため、MODEを選択するメニュー表示がありません。

 デフォルトでは、RAMは16Kになります。RAMを32Kにしたい場合は、"2"キーを押したまま、リセットを押して再起動させます(mk2のマニュアルに記載があります)。

 エミュレータで実行する場合は、一度16Kで起動した後に、BASIC上で

 FOR I=0 TO 999:NEXT:EXEC 0

 と直接実行して、すぐに"2"キーを押しっぱなしにするといいでしょう。



4.初代PC-6001+拡張BASIC用カートリッジ

 拡張BASIC起動時にROM内プログラムが走るROMの先頭には、以下の特定の情報が書かれています。

 0x6000=0x41("A")、0x6001=0x42("B")
 0x6002、0x6003 に書かれたアドレスをCALLします。

 上記2.のは、アドレスが違うだけです。


 カートリッジ内のプログラムからRETURNしたら、BASIC起動の続きを行います。フロッピー関連の初期設定(フロッピーからの起動や”How Many Files?”など)、”How Many Pages?”のページ設定やワークエリアの設定などが行われます。

 ROMカートリッジ内にRAMがある場合や、ROM/RAMカートリッジにROMを挿して使う場合は、RAMが32Kで起動します。



5.初代PC-6001+拡張BASIC用カートリッジをmk2/66/mk2SR/66SRで使用する

 初代PC-6001+拡張BASIC用カートリッジをmk2以降で使用した場合、以下のような動作になります。

 BASIC初期設定
 ↓
 RAMサイズの設定
 ↓
 ROM内ルーチンのチェック1(0x4000、0x4001のチェック。ここでは"AB"ではないはず)
 ↓
 ROM内ルーチンのチェック2(0x6000、0x6001="AB"の時、CALL (6002H) )
 ↓
 フロッピー関連の初期設定
 ↓
 ページ設定(”How Many Pages?”)
 ↓
 BASIC起動


 0x6000、0x6001="AB"になっている場合は、RETURNした後には、N60m/N66-BASICには戻りません。そのため、MODEを選択するメニュー表示がありません。

 拡張BASICカートリッジの代わりに、N60m/N66-BASICの拡張BASIC部分を使用します。
 拡張BASICカートリッジとN60m/N66-BASICの拡張BASIC部分では、アドレスがずれているため、ROM内ルーチンを使っているものは使用できません。

 デフォルトでは、RAMは16Kになります。RAMを32Kにしたい場合は、"2"キーか"4"キーを押したまま、リセットを押して再起動させます。



6.mk2/66用カートリッジ

 本体BASIC起動時にROM内プログラムが走るROMの先頭には、以下の特定の情報が書かれています。

 0x4000=0x43("C")、0x4001=0x44("D")
 この時は、0x4002、0x4003 に書かれたアドレスをCALLします。

 0x6000=0x43("C")、0x6001=0x44("D")
 この時は、0x6002、0x6003 に書かれたアドレスをCALLします。


 ゲームなどでは、そのままBASICに帰らずにプログラムが実行されますが、ツールなどの場合は、起動時の初期設定の後、RET 命令で、元のBASIC初期設定に戻ります。

 戻ったら、フロッピーの初期設定の後、モード設定、ページ設定やワークエリアの設定などが行われます。

 モード設定(MODE1〜5)は、通常はメニュー画面が出ますが、ROM内ルーチンやフロッピー起動の時、メニューをスキップする事が可能です。

 0xFF4E に『MODE - 1』を書き込むと、RETURNした時にそのモードを選択した状態になって、BASICが起動します。


 例えば、ROMの0x4000〜

 0x43、0x44、0x04、0x40、0x3E、0x04、0x32、0x4E、0xFF、0xC9

 とした場合、MODE5で起動します。ただし、ページ設定は別に設定する必要があります。



7.mk2/66用カートリッジをmk2SR/66SRで使用する

 mk2/66用カートリッジをmk2SR/66SRで使用した場合、以下のような動作になります。

 SR-BASIC初期設定
 ↓
 ROM内ルーチンのチェック(0x4000、0x4001と0x6000、0x6001のチェック)
 ↓
 (※)SR-BASICのモード選択
 ↓
 N66-BASICの初期設定
 ↓
 ROM内ルーチンのチェック(0x4000、0x4001と0x6000、0x6001のチェック)
 ↓
 フロッピー関連の初期設定
 ↓
 モード選択(MODE1〜5)
 ↓
 ページ設定(”How Many Pages?”)
 ↓
 BASIC起動


 mk2/66用カートリッジなので、本来はSR-BASICのモード選択はスキップするべきなのですが、SR-BASICのバグによりモード選択画面が出てしまいます(上記※)。

 ※バグ内容:SR-BASICの0x1D9B〜で、(4000H)、(6000H)と"AB"、"CD"、の比較を行っているんですが、"CD"の方の比較を行っていません( RST 20Hが抜けている)。


 そのため、モード選択画面では、使用する1〜5のMODEを選択します。
 ROM内でモード設定を行っているもの(0xFF4Eに『MODE - 1』を書き込んでいるもの)に関しては、1〜5のどのMODEを選択しても、そのMODEになります(上書きされる)。



8.mk2SR/66SR用カートリッジ

 本体BASIC起動時にROM内プログラムが走るROMの先頭には、以下の特定の情報が書かれています。

 0x4000=0x45("E")、0x4001=0x46("F")
 この時は、0x4002、0x4003 に書かれたアドレスをCALLします。

 0x6000=0x45("E")、0x6001=0x46("F")
 この時は、0x6002、0x6003 に書かれたアドレスをCALLします。


 ゲームなどでは、そのままBASICに帰らずにプログラムが実行されますが、ツールなどの場合は、起動時の初期設定の後、RET 命令で、元のBASIC初期設定に戻ります。

 戻ったら、フロッピーの初期設定の後、SR-BASICモード設定、ページ設定やワークエリアの設定などが行われます。

 SR-BASICモード設定は、普通ではスキップする事ができません(BASICの初期設定の一部をROM内ルーチンに書くことで実現はできますが...)


posted by えすび at 19:16| Comment(0) | P6解析:その他 | このブログの読者になる | 更新情報をチェックする