本改造記事は、シャープのポケットコンピュータPC−E500/E550のS3:を 増設しようというものです。 なお、増設に際して特別なソフトを必要としません。 注意…お決まりですが...。 本改造記事により、ポケコン本体が破壊されたとしても一切の責任を負わないも のとします。全て各人の責任においてやって下さいるようお願いいたします。 以下、転載記事です。 ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ -NUM- -R.DATE- -R.TIME- -SENDER- -CONTENTS- [W]WRITE [RET]READ [?]HELP 00016 95-01-07 20:06:35 2845 増設 208KBライト・プロテクトS3:(第二版)/Great ***************************************************** * ●機械式プロテクト“S3:”&0C000〜&3FFFFの増設 * * Great* ***************************************************** ★はじめに 私は、増設RAMとして、バンク切り換えと異る、ソフト依存性のない純正空きアドレ ス208KBと未使用チップイネイブル信号をデコードし直してS3:として使用していま すが、暴走・オールリセットしようと安全で便利なので、また、設計のノウハウも何か の参考になればと思いこのファイルををULします。 ★128KB−RAMの機能表(×は“H”または“L”)
CE1* |
CE2 |
OE* |
WE* |
動作モード |
入出力端子 |
|---|---|---|---|---|---|
H |
X |
X |
X |
非 選 択 |
高インピーダンス |
★CPUのメモリ制御信号
クロック -+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+
| | | | | | | | | | | | | | | | |
+--+ +--+ +--+ +--+ +--+ +--+ +--+ +--+ +
CE0〜CE7 -------+ ラ イ ト +-----------+ リ ー ド +------
のひとつ | | | |
+-----------+ +-----------+
WR* -------------+ +------------------------------
| |
+-----+
RD* -------------------------------+ +------
| |
+-----------+
MRQ* -------+ +-----------+ +------
| | | |
+-----------+ +-----------+
←---→
|
+-- 出力ディスエイブルにする必要がある
★ハードウェアの設計
@希望する動作
真 理 値 表
(×は“H”または“L”)
SEL* CE3* CE4* CE6* |
CE1*(A・B) CE2(A) CE2(B) EXT* |
|
|---|---|---|
S |
L L H H |
L H L H |
ロ |
|
|
PRT* WR* RD* |
WE*(A・B) OE*(A・B) |
動 作 |
|---|---|---|
L L H |
H H |
ライト・プロテクト |
これを実現する論理式
OE*(A・B)=RD*
WE*(A・B)=WR*+NOT(PRT*)=NAND(NOT(WR*),PRT*)
CE1*(A・B)=SEL*
CE2(A)=NOT(CE3*)
CE2(B)=NAND(CE4*,CE6*)
EXT*=NOT(SEL*)+CE6*=NAND(SEL*,NOT(CE6*))
RAM(A)・(B)のA0〜A16,D0〜D7は、S1:のRAMからジャンパ線で接続
(注)・RAMは128KBのものを2ケ使い、それぞれ(A)・(B)とし、(A・B)は両方を
意味する。
なお、仕様するメモリーはそのうち208KBで、48KBは使わない。
・その他に74HC00を1ケとS1:256KB化に使った74HC139の余ってるデコーダ
(入力端子をGNDに接続、出力端子がNC)または74HC00をもう1ケ、スイッチ
2ケを使う。
・上図表中 *マークはアクティブLowの信号。
・SEL*はS3:を使うかROMカードを使うかの切り換えスイッチにより作る信号。
・PRT*はプロテクト・スイッチにより作られる信号。
・CE3*はCPUから出力される &20000〜&3FFFF(128KB)の未使用チップセレクト
信号。SC62015の65番ピン。
・CE4*はCPUから出力される &0C000〜&0FFFF(16KB)の未使用チップセレクト信
号。SC62015の64番ピン。
・CE6*はROMカード用にスロットに出力される &10000〜&1FFFF(64KB)のチップセ
レクト信号。SC62015の62番ピン。
・RD*はCPUがリード動作をする為にいずれかのチップセレクトをON(Low)に
している間のみLowとなる信号。SC62015の72番ピン。
・WR*はCPUがライト動作をする為にチップセレクトより1クロックサイクル
遅れてLowになる信号。S1:のRAMの29番ピン。
ASEL*・PRT*信号の作り方
Vcc
●
| SW2
| _____
+―○ ○ ○―+―→SEL*
L| | H >
o+VVV+ i >1MΩ
w 1MΩ g >
・ h |
S ・ _
3 カ ////GND
|
ド
ス
ロ
ッ
ト
Vcc
●
| SW1
| _____
+―○ ○ ○―+―→PRT*
L| | H >
o+VVV+ i >1MΩ
w 1MΩ g >
・ h |
書 ・ _
込 書 ////GND
不 込
可 可
★ソフトウェアの設定
@スロットヘッダ
POKE &0C800,&10,&12,&67,0,0,1,0,0
POKE &0C808,0,0,0,0,0,0,0,0
POKE &0C810,0,&20,&18,0,0,0,0,0,&FF
Aパラメータ設定:ヘッダ・アドレス &0C800、S3:サイズ &6700バイト
POKE &BFC09,&,&C8,&,&67,&
(注)リセットするとAの設定が解除されます。
Aを1ラインプログラムとして
SAVE"F:S3.05#"[CR]
等としておくと、メニューから簡単に復帰出来て便利です。
なお、&0C000〜&0C0FFが何故かキーバッファのようになってしまって(原因と対
策の解る人はフォローお願いします)、プロテクトを解除してキー操作すると内
容が書き変わってしまうので、ここにはヘッダが置けません。
&0C100〜&0C7FFの1792バイトは使えますが、S3のサイズ設定が2KB単位なので、こ
の設定では使わないことになります。
ただし、S3:としては使わなくてもメモリーとしては使えるので、この空間にPOKE
したりLOADMしたりは出来ます。
私はここにリロケータブルのマシン語ソフトをLOADMすることをおすすめします。
S1:の機械語領域と異り、故意に書き変えない限りプログラムは壊れないので、
一々LOADMしなくてもCALLするだけで常駐型ソフトと同様に使えます。
私はSIモニタがリロケータブルの1757バイトで無駄がほとんど無いので
LOADM"SIMON",&0C100[CR]
を最初1回実行してからプロテクトしておいて、次からモニタを使う時は
CALL &C100[CR]
だけで使ってます。
★スイッチの取り付け
私はLCDの濃度調整ボリュームの上にクロック切り換えスイッチをつけてるので、
ROMカード切り換えスイッチを左側面11ピン端子の下に配置しました。
プロテクト・スイッチは容易には切り換え出来て、不用意には切り換えられない場所と
いうことで、電池ケースを開けたところのA-B切り換えスイッチとネジの間に配置しました。
また、この場所は、シャシのフタの方なので圧電ブザーのリード線と共にコネクタで切
り放せるようにしました。ブザーに来ているVccの線はPRT*を作るVccと共用できるので、
コネクタは3PでOKです。また、切り放し時もPRT*=Lなのでプロテクトとなります。
★機械式ライト・プロテクト
@リード・ライトということ
E500のCPUは、一般にリードまたはライト動作を行う時、アドレスが確定した直後に
そのアドレスに該当するチップイネーブル(CE0〜CE7)がONになります。
ライトを行う時にはそれから1クロックサイクル後にW/R(WR*と同一)が立ち下ると同
時にCPUからデータが出力されます。
この時RAMのCE1*=Low、CE2=High、WE*=Lowであればそのアドレスのデータが書き変えら
れます。
またリード時はアドレス信号がCPUから出力されてチップイネイブルがONになっても
WR*はHighのままでRAMからのデータを待ちます。
この時RAMのOE*=Low、WE*=High、CE1*=Low、CE2=HighならRAMからCPUへそのアドレス
のデータが出力されます。
このように、CPUとRAMのデータのやりとりをするための通り道(データバス:D0〜D7
の8本の線)は交互通行となっており、W/Rによって交通整理がされています。
Aライト・プロテクトということ
@で述べたように、RAMの内容はCE1*=L、CE2=H、WE*=Lが全て満たされないと書き変えら
れません。
RAMのWE*端子は通常CPUのWR*と接続していますが、スイッチによってCPUのコン
トロールから切り放してWE*=Hに固定すればCPUがライト動作(WR*=Lとなってデータ
をRAMに向かって出力)をしてもRAMの内容は書き変えられません。もちろんオールリセ
ットを行なってもメモリ内容は保持されます。
Bデータバス上でのデータの衝突ということ
E500では通常RAMのOE*=Lに固定してチップイネイブルとWE*のみでリード・ライトをコン
トロールしています。
ところで、スイッチでRAMのWE*=Hとしている時にCPUからアドレス信号を送ってきた
ら、どうでしょう。
その時はCPUからチップイネイブルもONにされているので、リード時かライト時かに
かかわらず@で言うOE*=L,WE*=H,CE1*=L,CE2=Hになってしまい、RAMからCPUに向かっ
てデータバスにデータを出力されることになります。これがCPUのライト動作だった
ら交互通行路の双方から同時にデータがやってくるということ…つまり衝突が起ります。
C衝突防止策 ― 出力ディスエイブル ―
ところでRAMの機能表を見ると、WE*=Hでもデータ出力を行わない「出力ディスエイブル」
というのがあります。
CPUがライト動作を行う時はOE*=Hになるようにしてやれば、RAMのライト動作には支
障なく(ライト時はOE*は"H"でも"L"でもよい)、プロテクト時のライト動作をリード
と誤解してRAMがデータを出力することは無くなります。(参考文献C)
DCPUの未使用端子 ― メモリ制御信号 ―
E500のCPUからはメモリ制御用の信号が3本出ています。このうち、WR*はW/Rとして
使われていますが、RD*(リード)とMRQ*(メモリ・リクエスト)は未使用です。タイ
ミング図のように、RD*はリード時のみ、MRQ*はリード時もライト時も、またRD*・MRQ*
共にCE0〜CE7*のどれかひとつが立ち下がれば同時に立ち下がります。(参考文献D)
EOE*信号の製作
OE*=NOT(WR*)ではNOTゲートひとつ分のタイムラグ(最大23ns)とOE*=Hから出力ディス
エイブルになるまでのRAMの動作上のタイムラグ(最大35ns)の間の衝突が回避できま
せん。OE*=NOR(MRQ*,NOT(RD*))でライト時のCE=Lの間だけ出力ディスエイブルに出来そ
うです。実際試してみましたが、しばしば入出力端子が高インピーダンスになり、リー
ドが出来ないことがありました。
よく考えてみると、RD*の方はMRQ*よりNOTひとつ分遅れるため、リードに入る瞬間NORゲ
ートの入力端子はMRQ*=LになってもRD*=Lのままの時間が出来るため(23ns)、一瞬OE*
=Hで出力ディスエイブルになってることが解りました。結局、リード時以外はOE*=Hつま
り、OE*=RD*とすることにしました。
★未使用アドレスとチップイネイブル
&0C000〜&3FFFFは未使用の空き領域です。
ただし、このうち、&10000〜&1FFFFはROMカード用としてカードスロットへ出力されて
いるものです。ROMカードは使わないと思いますが万一の場合もありうるので使えるよ
うにしておきたいのです。しかし、CPUの62番ピンからスロットへの配線(パターン)
はナイフでカットしないと、もしROMカードを使うとCE6*がONになるとS3:とROMカード
が同時にアクティブになってしまいます。
そこで切断したパターンのカードスロット側のレジストをはがしてここにリード線をハ
ンダ付けしてスイッチまで引っぱってきてCPUのCE6*をカードスロットへ接続するか、
S3:へ接続するかを選択するようにしました。
ただし、このCE6*はS3:のまんなかの&10000〜&1FFFFですのでROMカードを選択している
間にこの領域にまたがったファイルをアクセスしてしまうとまずいのでスイッチをROMカ
ード側にしている時はS3:の2ケのRAMとも非選択になるようにします(CE1*=H固定)。
これにより、この切り換えスイッチをプロテクトスイッチとして使用することも可能に
なります。ROMカード側にしている間はリードだけでなくライトも出来ないからです。
★設計上のちょっとした留意点
・基本的使用状態は書込不可・S3選択であるので、この時にPRT*とSEL*が電力を消費
しないように負論理とした。
・ ●Vcc
| SW
| ___
+VVV―○ ○ ○―+
1MΩ H | L |
| _GND
| ////
+―――――――→PRT*
上図のような信号の作り方ではスイッチがH側を放れてからL側の接点に接触するま
で、あるいはスイッチが接触不良をおこした時にPRT*はHでもLでもない不安定な状
態になるので、下記のように、接点がH側と接触する直前までPRT*=Lが維持されるよ
うにした。
これにより、スイッチの故障という最悪の事態でも“S3選択”・“ライト・プロテ
クト”状態が維持されるので、リード(バックアップ)可能となる。
Vcc
●
| SW
| _____
+―○ ○ ○―+―→PRT*
L| | H >
+VVV+ >1MΩ
1MΩ >
|
_
////GND
★参考文献
@PJ'92.7「32KBライト・プロテクトRAMカードの製作」/志鳥野小澄
A工学社「PC−E500*PC−1480U活用研究」
BPJ'93.2「市販のRAMカードを改造して128KB・RAMカードを作ろう」/みずほ
CSONY CXK581000P/M 仕様表
DPJ'91.12「PC-E500シリーズの信号引出しとCEのメモリ制御について」天野仁司+TOM
(注:後にバグ情報でアクティブHiはCE1,CE5,CE7のみに訂正)
★最後に
DSKF"S3:[CR]で210909と表示されれば成功です。これでS1:256KB、S2:256KBを合わせて
720KBです。そのうち464KBがハードプロテクト出来るのでオールリセットしても3分ほ
どでもと通りになるようにファイルを置けます。
詳細が知りたいとか、解りにくいとか…あればメールを下さい。
また、感想とか、これはまずいんじゃない?なんて意見もお待ちしてます。
IZE☆CARIどんさんのBBSE500へのメモリ増設の書き込みをきっかけにULして
みましたが、参考にはならない…?(^^;)
一応これだけでも作成出来るはずですが、やはり回路図があった方が解り易いと思うの
で、後程ULします。
#2845 Great
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
以上、転載記事でした。
本記事中のオリジナルアーティクルのみをダウンロードする。
本記事の執筆者からのコメント:
「改造は自分の責任でして下さい。Great(VEG00302@niftyserve.or.jp)
はアドバイスは可能な限りしますが責任は取れません」
スパムメール防止のため、お手数をおかけ致しますが、記載のメールアドレスから「@」を一つ外してメールの送付をお願いいたします。