※このサイト内の情報は一切保証されません。参考にする際はすべて自己責任となります。
2023/07/02 Misskeyリンクの追加(内容に変更ありません)
2023/02/11 アクセスカウンタ・アクセス解析タグ入れ替え(内容に変更ありません)
2020/09/13 HTMLタグ修正(内容に変更ありません)
2016/01/30 解析タグ追加(内容に変更ありません)
2015/03/01 一部レイアウト変更

目次

1. 概要
2. パーツ
3. 回路
4. 製作
5. 実験
6. あとがき
7. 参考にさせていただいたサイト・情報

1. 概要

初代PC-6001用に、16KB拡張RAM+24ビットPPIを製作しました。特に使い道はないのですが、8255や62256(55257)が大量に手に入ったのでそれの試験もかねて作ってみました。

2. パーツ

SRAMである55257は、16KiB以上のSRAMであれば代用できます。
また、プルアップ用の抵抗は値を計算せず、4.7kΩの抵抗がたくさんあったからという理由だけで使用しています。集合抵抗(抵抗アレイ)を使用したほうがはんだ付けが楽だと思います。
ファミコンのカートリッジはPC-6001の拡張バスに差し込む2.54mmピッチ50pinのカードエッジコネクタの代用です。
カートリッジを叩き割って、内部から基板を取り出し、部品をすべて取り払った後、端5列(裏表併せて10pin)分を切り落として使用します。

3. 回路

回路はさまざまなサイトを参考にして次のようになりました。


PC-6001の拡張バスには外部RAMをアサートする端子がすでに出ているため、それを利用することが可能です。
もともとDRAMを使うように想定されているため、CAS端子とRAS端子が拡張バス側に用意されています。
DRAMはCASとRASがアサートされた際にデータバスにデータが出力されるため、これをANDゲート(負論理)を通してRAMのCS端子へ入れることでSRAMを使用できます。

一方で、初代PC-6001では外部のI/O機器を使用するためには外部でのI/Oアドレスデコードが必要になります。
Z80のI/Oアドレスは下位8bit(A0〜A7)に出力されるため、これをデコードします。
8255のA,B,CポートおよびCWRを7CH-7FHに割り当てるために次のようにデコードしました。

アドレスバス結線先IC結線端子
A774LS138G2A
A6,A5,A474LS138C,B,A
A3,A274LS00A,B
A1,A08255A1,A0


また、IORQ端子は74LS138のG2B端子につなぎ、74LS138のY7出力と、A3,A2をデコードした74LS00の出力のAND(負論理)を取ることで、8255を選択する信号とします。
これはそれぞれWR端子・RD端子とのAND(負論理)を取って8255のWR端子・RD端子に接続します。
WR端子・RD端子がどちらもアサートされていない場合(=IORQ、8255はCPU側のデータバス(D0-D7)はHi-Zになるため、CS端子は常にアサートされた状態にしておきます。
拡張バスから出力されるRESET信号は負論理であるのに対し、8255のRESET端子は正論理のため、間に74LS00を用いたNOTゲートを挟みます。

ICはLSタイプを用いました。HCタイプではHレベルの入力電圧がmin.3〜4Vなのに対し、80年代に用いられていたLSタイプの出力電圧ではHレベルの出力電圧がmin.2.7Vであるため、HCタイプでは誤動作の可能性があります。
また、8255はRESET直後の状態では全ポートが入力になっているためプルアップ抵抗を入れました。

4. 製作

製作には72x95mmのユニバーサル基板を用いました。ちょうどPC-6001の拡張スロットに納まり、外に端子を出すことのできるサイズです。

まず、ファミコンカセットを破壊します。
カセットをドライバーでこじ開け、内部の基板を取り出します。基板上の部品はすべてニッパー等で取り払います。
そして、どちらかの端から5pin分の幅を切り落とします。私はノコギリを持っていなかったので金ヤスリをノコギリの代わりに使いました。
そして各pinをパターンカットしたものがこちらです。(私が入手したカセットはROMがモールドされていたため、取り外していません。)



これをユニバーサル基板に適当に固定します。ガムテープのぐるぐるまきで十分でした。
次に部品のマウント・はんだ付けをしていきます。ICを直付けして壊さない自信がなかったためICソケットを使用しました。

配線は0.26mm径のUEWを用いました。はんだごてを当てると被覆が簡単に溶けます。
カードエッジコネクタは、PC-6001の拡張バスを覗き込んで、左下→左上→...→右下→左上の順に1,2,...,49,50と並んでいます。(上側が偶数、下側が奇数)
必要な端子はほぼ奇数番の端子ですが、偶数番の端子は穴を通して裏側へ通しています。
中古のファミコンカセットはカセットの差込痕がだいたい端子に残っているので、そこを超えないようにはんだ付けをしていけば大丈夫です。

8255のポートはピンヘッダを使って外に出しています。また、回路図にはありませんがPC-6001から供給される5VやGND端子も同じく外に出しています。
すべての配線が終わったら、テスターで導通・絶縁をチェックしてICをソケットにはめ込みます。
最終的に次のようになりました。



(左:表面 右:裏面)
UEWのおかげで配線はスムーズにいきましたが、結局最終的にはぐちゃぐちゃのスパゲティ(細いから素麺?)になりました(^^;;

また、この基板だけでは8255が動作しているかどうかのテストができないため、簡単な入出力ボードも作りました。



Aポートには8bit入力としてDIPスイッチを、Bポートには8bit出力としてLEDをつないでいます。(CWR(IO 7FH)は90Hに指定)
DIPスイッチは熱素子破壊なんておこさないのにこれも16pinICソケットを使って実装しています(^^;;;;;

5. 実験

まずはRAMの実験です。なにも装着していない場合は、電源投入後にページ数4を指定しても"?FC Error"を返されます。
製作したボードを装着すると、ページ数4を指定後にN60-BASICのプロンプトに移ります。



(左:未装着 右:装着)
RAMの動作が確認できたところで、つぎは8255 PPIの試験です。
入出力ボードを接続し、"OUT &H7F,&H90"と入力すると、Aポートが入力、Bポートが出力に指定され、全てのLEDが消灯します。
"?INP(&H7C)"でディップスイッチの内容が10進数で画面に表示され、"OUT &H7D,&Hxx"でxx(16進数)が2進数に変換されLEDに表示されます。

次のBASICリストを実行した様子です。

10 OUT&H7F,&H90
20 FORI=0TO255
30 FORT=0TO10:NEXTT
40 OUT&H7D,I
50 NEXTI
60 GOTO20

6. あとがき

実は今回が、初めてUEW使用・デジタルIC使用・マイコン使用の製作でした。そのため、「一発で動くことはないだろう」と思いながら作ってましたが、本当に一発では動きませんでした。(
回路図の右下に"Rev 1.1"とあるように、初期状態から、実際に使用して不具合が見つかり改造しています。
Z80に外部のRAMや機器をつなぐ場合、デコードされたMREQ/IORQとWR/RDのANDをとって、機器のWR/RDにつながなければならないのですが、それをすっかり忘れて8255のWR/RDに直接拡張バスのWR/RDをつないでいました。
幸いにも74LS32(OR=負論理AND)が2素子分余っていたため、そこにつないで動作させました。
また、慣れないはんだ付けをしたためか非常に目が疲れました。24bitが12x2に2.54mmピッチで並んでいるところでこれではSOPのはんだ付けは到底無理なのでは・・・と思いました。

今回の製作は、先人方が公開してくださっている多くの貴重な情報によって完成させることができました。この場を借りてお礼を申し上げます。

7. 参考にさせていただいたサイト・情報


上へ
戻る