ブログとかに書こうと思って書けてないネタ
— Izumi Tsutsui (@tsutsuii) 2017年8月17日
・PC-6001 内蔵32KB改造
・タイニーあぴミクさんデモ実装
・PSGドライバLUNA移植実装
・OSC京都デモ実装詳細
実はあまりないのか ネタすら忘れているのか
とりあえず PC-6001 32KB改造の記事は今晩書くか(絵というか回路図を書くのがめんどくさいという問題)
— Izumi Tsutsui (@tsutsuii) 2017年8月17日
というわけで、実際に作ってから一年以上経過してますが、重い腰を上げて記事にまとめてみます。
8/18 19:45追記: 続きで「PC-6001 拡張スロット DRAM制御用信号」のエントリも書きました
PC-6001の増設RAM
初代PC-6001の標準のRAM容量は 16KBです。
7100 Bytes free
— Izumi Tsutsui (@tsutsuii) 2016年5月6日
さすがパピコンは格が違った pic.twitter.com/SBd8hkLvU8
オプションの PC-6006 ROM/RAMカートリッジを取り付けると 16KBの RAMが追加されて合計 32KBになります。
なぜか手元にある PC-6006 増設 ROM/RAMカートリッジ pic.twitter.com/jCIahaAE4H
— Izumi Tsutsui (@tsutsuii) 2017年8月17日
RAM 16KBのときは RAMが C000h番地から、 32KBのときは RAMが 8000h番地から始まるので、ソフトによっては 16KBでしか動かないものもあったようです。このため、 PC-6001mkII 以降の起動時の MODE選択では初代PC-6001 (N60-BASIC) について 16KBのモードと 32KBのモードとが選べるようになっています。
増設RAM回路図
PC-6001 の 32KB化改造ってどこかに情報ないんかな。62256辺りのSRAMが使えるんならバスとチップセレクトつなぐだけという気はするけど
— Izumi Tsutsui (@tsutsuii) 2016年5月9日
などと Twitter でつぶやいてみたところ BELUGA Cartridge の回路図 を教えていただいたりしましたが、検索してみるとすでに PC-6006 相当の増設RAMカートリッジを作られている方がいました。FPGA版 PC-6001 を作られているえすびさんによる「P6つくろうブログ」の中の「PC6001用拡張RAM」の記事がそれで、自作の増設RAMが回路図付きで解説されています。
増設RAM回路の概要
SRAMなので、基本は「アドレスバスとデータバスをそれぞれすべて直結」ということになります。ただし、 62256 の SRAMは 256bit÷8bit=32KB ありますが、必要なのは半分の 16KBだけなので、最上位の A14 は L (=0) に固定されています。前述の BELUGAカートリッジのようにそれなりの回路を組めば残りも使えますが、専用ソフトが必要なのでどこまで工数をかけるかというのが微妙なところ
OE (Output Enable, つまり読み出し) および WE (Write Enable) についても拡張スロットに出ている DRAM用の ^DRD2 および ^WE の信号と直結です。
CS (Chip Select) に関しては DRAM用信号の RAS と CAS の AND (負論理なので TTLロジックとしては LS32 の ORゲート) となっていますが、この信号の詳細については別エントリで書く予定です。
増設RAMの本体内蔵
増設ROM/RAMカートリッジとはいえ、電気的にはコネクタ上の信号と各部品が接続されているだけです。なので、本体内部のどこかのスペースに部品を載せて、本体のマザーボード上のカートリッジスロットのランドから直接信号線を引っ張り出して配線すればそのまま内蔵可能、ということになります。
ただし、増設ROM/RAMカートリッジの場合は「挿せば 32KBモード、抜けば 16KBモード」という切り替えが可能であったのに対し、本体で直接配線して内蔵してしまうと「抜いて 16KBモード」ということができなくなってしまいます。
いまどき(?)の PC-6001用のソフトでは 32KB 専用のものはあっても 16KB (いわゆる MODE 1) でないと動かないものはほとんど無いようですが、せっかく(?)なのでスイッチで 16KBと 32KBとを切り替えられるようにしました。最初はいろいろ手抜きをしてハマったのですが、そのへんも追って書く予定
切り替えといっても大したことはなくて、 16KBモードのときは SRAMの CSがアクティブにならないようにするだけです。元の回路図の SRAMの CS入力にスイッチを挟むだけでもよかったのですが、アクセスタイミングに影響する信号線を引っ張り回すことになると微妙に気持ち悪いのと、万一静電気等でSRAMが壊れると交換がめんどくさいよな、ということで、元の 74LS32 の代わりに 74HCT139 で CS有効無効を切り替える回路にしました。
オリジナルの回路図左下にある LS32 のゲート部分を上記の回路図で置き換えればOKです。
論理としては RAS, CAS, 拡張RAM有効無効切り替えスイッチ入力のすべてが Lの時に SRAMの CSが Lになる 3入力 AND (負論理なのでロジックゲートとしては 3入力OR) でいいのですが、ロジック的につぶしが利くというのと配線的にもピン配列がわかりやすいという理由で 74139 を使いました。
74139のロジックは以下のとおりです。
- 入力 G が L の時に出力有効 (G が H の時は Y0〜Y3 のいずれも H)
- 入力 A,B の2入力を二進数として対応する Y0〜Y3 のいずれかが L
74LS139 ではなく C-MOS の HCTを使っているのはもはや LS の SOPパッケージ品が入手不可能になっているからです。LS139の手持ちがあるのであれば、未使用入力端子(1G, 1A, 1B)の GND接続も不要になるのでそちらのほうが楽だと思います。
部品入手
256ビットSRAMは今でも普通に売っています。私はいつも通販で利用している マルツ で他の部品の手配のついでで取り寄せで購入しました。
32KB SRAM CY62256NLL pic.twitter.com/wuYuO51OyG
— Izumi Tsutsui (@tsutsuii) 2016年5月14日
値段優先なら 秋月電子のもの のほうが安いです。 いずれにせよ通販だと送料のほうが高いですが……
SRAMの品種によっては A0〜A14 のアドレスバスのピン配置が微妙に異なる場合がありますが、ICソケットを使うわけでもないので、信号名通りにつなげば問題ないはずです。
74HCT139 (もしくは 74LS139) については標準ロジックでよく使われている品種なので、半導体を扱っている店なら問題なく入手可能だと思います。
内蔵工作
本体分解
PC-6001を扱った記事はたくさんあるのでググればいろいろ出てくると思いますが、ざっと分解手順をメモると以下:
- 本体裏のネジ 5本を外す
- ネジを外したら、本体をひっくり返してキーボードを上になる向きにして、本体上側のカバー(NECロゴのある側)を持ち上げる
- 上側カバーのスピーカーとメインボードを接続しているコネクタを外す
- キーボードとメインボードを接続しているコネクタ2つを外してキーボードを外す
- 電源とメインボードを接続しているコネクタ2つを外す
ここまで外した時の写真が以下:
電源が載ってるシールド板とメインボードが共締めしてる六角頭の3mmネジ5つを外してシールド板一式を電源トランス側に開くように外せばOK。ネジの1つは電源スイッチの下に隠れてるのでスイッチも嵌め込みを外しておく必要あり。 pic.twitter.com/gueeyJOaZY
— Izumi Tsutsui (@tsutsuii) 2016年5月14日
上記のツイートでは ネジ5本 と書いていますが、写真の右側のトランスと拡張スロットの間にも本体とシールド板を固定できるネジ穴があります。私の入手した PC-6001 だとここにネジは付いていなかったのですが、本来ネジが付けられていたのかどうかは確認できていません。カセット抜き差し時の応力を考えるとネジがあるべきという気はする
シールド板とメインボードを共締めしているネジ(と、上記のトランスと拡張スロットの間のネジ)を外して、シールド板を電源ごと持ち上げて拡張スロット側に折り返すように置くと、メインボードを外すのに支障ない程度にアクセスできるようになります。(トランスを外す必要は無し)
こんな感じ(テキトーにつき真似しないでください pic.twitter.com/2QsZyZi1T1
— Izumi Tsutsui (@tsutsuii) 2016年5月14日
部品配置 その1
拡張スロットのコネクタはメインボードの表側にあり、信号ランドは裏側からしかアクセスできません。なので、配線を最短にするなら SRAMその他の部品もメインボード裏側に配置する必要があります。
メインボード裏側に配置するとなると、固定時に干渉しないように配置する場所を選ぶ必要があるのですが、SOPといえど SRAMはピン数も多くそれなりにパッケージが大きいので、拡張スロット近辺で配置できる場所は限られます。ざっとながめて、スペースがあって +5Vのパターンランドに直接 SRAMのVCC端子が接続できるところ、というところで以下に置くことにしました。微妙に狭くて配線が大変という問題はありますが
微妙に場所がナイ pic.twitter.com/5Qde5VuwfZ
— Izumi Tsutsui (@tsutsuii) 2016年5月14日
直接パターンランド配線する VCC以外のピンについては、ピンを真横に伸ばして配線をはんだづけする根本部分だけを残して切断しておきます。
ハイパーいきあたりばったり工作モード pic.twitter.com/DMIPi3mIsZ
— Izumi Tsutsui (@tsutsuii) 2016年5月14日
拡張スロットのパターンランドは基板外側が奇数番(カートリッジコネクタとしては下側)、内側が偶数番(同上側)のピンになります。
アドレスバス配線中の写真がこの辺のツイート
いきあたりばったり途中経過(残りデータバス8本) pic.twitter.com/QnRSIw6qS9
— Izumi Tsutsui (@tsutsuii) 2016年5月14日
データバス8本も配線してこれで完成のはず。取り付け場所の問題で予想よりちと面倒くさかった…… pic.twitter.com/THwa7rH8SU
— Izumi Tsutsui (@tsutsuii) 2016年5月14日
厚さ方向をチェック。ま、大丈夫でしょう…… pic.twitter.com/sVeuoPEn7U
— Izumi Tsutsui (@tsutsuii) 2016年5月14日
なお、この時点では手抜きで CSの配線について EXCAS直結にしていたので 74HCT139 の配線がありません。 このあたりの経過についても詳細は別エントリで
部品配置その2
CS信号生成の 74HCT139 については場所に余裕がないので SRAMの上に2階建てで配置しました。
土地が足りないので杜撰に2階建て違法建築 pic.twitter.com/mKmrK8O9X2
— Izumi Tsutsui (@tsutsuii) 2016年5月17日
電源のVCCピンについてはそのまま SRAM の VCC ピンの真上に来るようにしてそのままはんだづけして固定。未使用出力ピンの 1Y0〜1Y3 は邪魔なのでピンを根本から折ってしまい、未使用入力ピンの 1G, 1A, 1B と GND はまとめて配線します。
CMOSロジックだと未使用入力端子処理がめんどいという問題 pic.twitter.com/MEGDVc6vRq
— Izumi Tsutsui (@tsutsuii) 2016年5月17日
RAS, CAS, CS もそのまま配線します。
いちいち写真撮るから時間がかかる罠 pic.twitter.com/FZ7LwaYjM0
— Izumi Tsutsui (@tsutsuii) 2016年5月17日
拡張RAM有効無効のスイッチを付ける 2G端子のプルアップ抵抗については、ゴミ箱に入っていた HDDから 1608サイズの抵抗を外して取り付け。これはあまり無茶せず普通に付けたほうがよいかも
土地活用プルアップ抵抗 pic.twitter.com/rjwn87j8nj
— Izumi Tsutsui (@tsutsuii) 2016年5月17日
部品配置 その3
拡張RAM有効無効のスイッチについて、片側の接続先が GNDなのでいい場所はないかと探したところ、カートリッジコネクタ横に電源コンデンサのランドがあり「あわよくば外からON/OFFできるかも」ということでそこに配置。
いいところに GNDパターンあるじゃん、ということでスイッチは表側のここに。 pic.twitter.com/sdmRVoF88d
— Izumi Tsutsui (@tsutsuii) 2016年5月17日
ツイート写真ではスイッチの接続先のコンデンサが電解コンデンサですが、これは交換後の部品で、オリジナルはタンタルコンデンサです
コテ先が入らないという問題(ハンダが汚い) pic.twitter.com/jVDJ1WgDXS
— Izumi Tsutsui (@tsutsuii) 2016年5月17日
題名「中に入れたらどうせ見えない」 pic.twitter.com/5XkK1WbraH
— Izumi Tsutsui (@tsutsuii) 2016年5月17日
ICの2階建て構造で干渉したりしないか、という点についてはもともと DIPサイズの余裕があり問題ありませんでした。
基板の裏側なんで建築限界がキツいのでした pic.twitter.com/2rdf8SCRwe
— Izumi Tsutsui (@tsutsuii) 2016年5月17日
とりあえずケースに当たったりはしてないみたいだけど、スイッチは外からは入れ切りできんなコレは(「ズサンな計画・結果オーライ」が座右の銘) pic.twitter.com/DHsHqlJ6Fl
— Izumi Tsutsui (@tsutsuii) 2016年5月17日
頑張れば外からでもスイッチ切り替えられるか? たぶんそんな機会はそう来ないと思うけど pic.twitter.com/TN5HaB166m
— Izumi Tsutsui (@tsutsuii) 2016年5月17日
動作テスト
実際にはここまで作成する前に 74HCT139 無しで CSと EXCASを直結したバージョンを動かしていたのでここでいきなりテストをしたわけではないのですが、とりあえず当時のツイートを引用しておきます。 そのへんの詳細も別エントリで
仮組みしてテスト。
— Izumi Tsutsui (@tsutsuii) 2016年5月17日
「電源は刺さってますか?」をやらかしてビビった(ヽ´ω`)
— Izumi Tsutsui (@tsutsuii) 2016年5月17日
昨日と同じテストをすると 32KB認識した上で後半アドレスに書いても落ちないのでオッケーっぽい ( ゚∀゚)o彡° pic.twitter.com/SPHEyU2M0V
— Izumi Tsutsui (@tsutsuii) 2016年5月17日
スイッチ切り替えて電源入れるとちゃんと 16KBで起動。完璧と言えよう(自画自賛実況プレイ) pic.twitter.com/XxdmYoy3bV
— Izumi Tsutsui (@tsutsuii) 2016年5月17日
作成当時は 32KB 必須、かつフリーでダウンロード可能、というソフトがあまりよくわかっておらずきちんとテストができていなかったのですが、動いた時の感動も含め Tiny野郎さんのドルアーガの塔デモ がテストに最適です。
自己満足の余韻にひたってないで、とっととふた閉めてドルアーガの塔デモをテストしよう
— Izumi Tsutsui (@tsutsuii) 2016年5月17日
「コンセントは刺さってますか?」ふたたび
— Izumi Tsutsui (@tsutsuii) 2016年5月17日
(作業時は安全のためコンセントは抜きましょう)
ロード中…… pic.twitter.com/EeFa5hbcWZ
— Izumi Tsutsui (@tsutsuii) 2016年5月17日
PC-6001初代実機起動キタ━━━━(゚∀゚)━━━━!! pic.twitter.com/8s4OWUfcw3
— Izumi Tsutsui (@tsutsuii) 2016年5月17日
作成まとめ
とりあえず、拡張スロットの信号詳細 (具体的には RAS2, EXCAS, DRD2 あたりの DRAM用信号) という設計的なところを別にすれば特に難しいところはなく、「回路図通りにつなげば動く」という感じではあります。
部品をどこに配置してどう配線するか、というところは各自の経験値と手持ち部品に合わせて決めればいいと思いますが、バス配線は本数が多いのであまり離れたところに置いてしまうとそれはそれで大変になるという気はします。
DRAM用信号線について
今回拡張RAM改造を記事にまとめるにあたって初代PC-6001のDRAM用信号についてもいろいろ調べたのですが、例によって自己満足モードで長くなってしまったので別エントリでまとめます。