本改造記事は、バンクメモリD:を768Kバイトまで増設しようというものです。 (この記事はPC-E650/U6000には非対応ですので、注意して下さい。) 増設したメモリをポケコンに認識させるためには、別途、デバイスドライバ(s_delt a.lzh)が必要です。お持ちでない方は、ここからs_delta.lzhをダウンロードしておいてください。
注意…お決まりですが...。
本改造記事により、ポケコン本体が破壊されたとしても一切の責任を負わないも
のとします。全て各人の責任においてやって下さいるようお願いいたします。
以下がS_DELTA.HEDの内容です。
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
E500/EMSメモリ増設/superDELTA/1.00/ [ソース付]
------------------------------------------------------------
【タイトル】 E500/EMSメモリ増設/superDELTA/1.00/ [ソース付]
【ファイル】 S_DELTA1.LZH
【製 作 者】 Great,きゃぱ
【動作機種】 PC-1480U/E500系(除E650)
【転載可否】 ご連絡下さい
------------------------------------------------------------
【補足説明】
PC-E500にバンクメモリD:768KBを増設する為のハード及びソフトです。
ソフトはきゃぱさん作のDELTA Ver3.5の改造版です。
詳しくは、S_DELTA1.LZHを解凍して得られる、README.DOC及びS_DELTA.DOC
を見てください。
【S_DELTA1.LZH】でD/Lしてください。
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
以上がS_DELTA.HEDの内容です。
以下がS_DELTA.DOCの内容です。
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
----------------------------------------------------------------------
superDELTAの概要 by Great
----------------------------------------------------------------------
●はじめに
E500のメインメモリはS1:、RAMカードはS2:、ROMがS3:で、それぞれにRAMディ
スク(ブロックデバイス)E:,F:,G:が設定出来ます。バンクメモリはD:、パ
ソコンをポケコンのディスクとして使うドライブがL:,A:,B:,C:,M:となってま
す。
E:,F:,G:は使う前にサイズを宣言(初期化)する必要があります。ただし、G:は
エンジニアソフトウェアの入ったROMのデバイスです。
ここでS1:は&80000〜&BFFFF(CE0*)256KB
S2:は&40000〜&7FFFF(CE1) 256KB
S3:は&C0000〜&FFFFF(CE2*)256KB←ROM
未使用:&20000〜&3FFFF(CE3*)128KB
未使用:&10000〜&1FFFF(CE6*)64KB
となっています。
通常のD:は窓として&20000〜&3FFFFの128KBを使い、CPUの未使用ポートKo15と
E5をコントロールしてそれらを74HC139に入力してデコードしたものを4ケの
128KB・RAMのチップイネーブルとして4バンクさせたEMSで512KBのD:としていま
す。
それを今回は窓のサイズを&10000〜&3FFFFの192KBに変更することD:768KBに変
更しようというものです。
superDELTAの名前は原作者のきゃぱさんに敬意を表して付けさせて頂きました。
しかし、128KBのRAMを使っていてはジャンパだらけで大変です。D:768KBと同じ
内蔵RAMであるS1:256KBと合わせて1024KBであることに着目して、2ケの512KB・
RAMをD:とS1:で共用させてしまおうという考えです。窓の大きさがハンパなので
アドレスのデコードなど細工をやってます。
S1:もD:もRAM2ケで同時にやってしまうので、全ピンジャンパのようなアクロバチックな
ことをやらなくても、RAMの2階建のみで作れるので、S1:256KB化+α程度の技
術があれば誰でもS1:とD:だけで1MBが作れます。
また、ハードプロテクトを採用していますので、いかなる暴走やオールリセット
においても電池を抜かない限り内容を失うことはありません(^^)v。
●パッキング・リスト
本アーカイブには以下のファイルが同梱されています。
README.DOC ご覧のファイル。
INST_220.INC きゃぱさん作のそのままです。S_DELTA.ASMのアセンブルに必要。
S_DELTA.ASM S_DELTAのソースリスト(下記参照)
S_BNKTST.ASM S_BNKTSTのソースリスト(下記参照)
S_DELTA. デバイスドライバのインストーラ(965Bytes CRC32=1A1BF6A8)
S_BNKTST. ハードウェアのチェックプログラム(463Bytes CRC32=3FF8670C)
D_PARMTR.BAS きゃぱさんに戴いたパラメータ計算のBASICプログラム
S_DELTA.とS_BNKTST.はDELTA Ver3.5のDELTA.とBANKTEST.のパラメータを変更しただけ
のものです。使い方はDELTA Ver3.5,Ver2.3に準じますのでそちらのDOCを御覧下さい。
ソースはXASM形式で書いてあります。DELTA Ver3.5の
オリジナルソースと見比べて貰えれば変更
した値が解ると思いますので、自由な空間を窓とした4バンクのD:を誰でも作ることが
可能です。DELTA Ver3.5では大容量にもかかわらずディレクトリ数の制限が96でしたので、
これが苦しかった人もあったのでは無いでしょうか?
superDELTAはディレクトリを360ケまで使えるようにしています。
この部分についてはハードが全くDELTA Ver3.5そのものであってもパラメータを変更して
扱えるファイル数だけを増加させることも出来ますのでS_DELTA.ASMの変更箇所を参考に
D_PARMTR.BASでパラメータを計算して変更してみるのも面白いと思います。
superDELTAの改造に成功した場合のD:の空きは770304Bytresです
これだけあると大きなBMPファイルでも扱えますよね(^^)。
S1:の内容を丸ごと
SAVEM"D:MEMORY.S1",&80000,&BFFFF[CR]
としてバックアップすることさえ可能ですよね(笑)。
是非皆さんにもこの広大なメモリ空間を手に入れて下さい(^^)。
なおDSKF"D:"という命令が凄く時間がかかるのはDSKF"G:"が遅いのと同様にセクタ
数が多いのが原因です。これが気になる人は1セクタ256Bytesの現状から512Bytes
か1024Bytesにパラメータの変更をしてみるのもいいかもしれません。
●最後に
本ソフトウェア及びハードウェアを使用することはフリーですが、改造や使用は個
人の責任において行なって下さい。
アドバイス等は可能な限り行ないたいと思いますが、その義務は負わず、本アーカ
イブに含まれるものを使用したことによる損害等については一切免責とさせて頂き
ます。
また転載などをされる場合はご一報下さいませ(__)。
●連絡先
ポケット通信Ver.3:ID=2845
E-mail:VEG00302@niftyserve.or.jp
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
以上がREADME.DOCの内容です。
以下がS_DELTA.DOCの内容です。
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
*******************************************************************
* *
* super DELTA Ver1.00 for "BANK MEMORY 768KB" *
* by Great(#2845) *
* *
*******************************************************************
【ハードウェアの設計】
きゃぱさん作のDELTA Ver.3.5を拡張して、1バンク192KB×4バ
ンク=768KBのD:を実現する為のハードウェアを設計します。
なお、この改造はRAMの空アドレスを使ってS1:の256KB化も同時に
行われますので、S2:256KBと合わせて約1.2MBのRAMとなりま
す(^^)。
●アドレスの割当て
デバイスD:はCPUのアドレス&10000〜&1FFFF(CE6*=L),&20000〜&3FFFF(CE3*=L)、
システムスロットS1:はCPUのアドレス&80000〜&BFFFF(CE0*=L)に割当てる。
ここで、
&10000=0 001 0000000000000000
&3FFFF=0 011 1111111111111111
&80000=1 000 0000000000000000
&BFFFF=1 011 1111111111111111
^ ^ ^
A19 A15 A0
※スペースは見やすいように入れているだけです。
さて、4MbitのSRAMはA0〜A18までありますが、これらを2ケのSRAMの下記のア
ドレスに割当ててみました。
D:
バンク@A
RAM@A|&10000:001 0000000000000000〜
|&3FFFF:011 1111111111111111
バンクBC
RAM@A|&50000:101 0000000000000000〜
|&7FFFF:111 1111111111111111
^ ^ ^
A18 A15 A0
S1:の |&80000:1 000 0000000000000000〜
|&8FFFF:1 000 1111111111111111
を
RAM@ |&00000: 000 0000000000000000〜
|&0FFFF: 000 1111111111111111
S1:の |&90000:1 001 0000000000000000〜
|&9FFFF:1 001 1111111111111111
を
RAM@ |&40000: 100 0000000000000000〜
|&4FFFF: 100 1111111111111111
S1:の |&A0000:1 010 0000000000000000〜
|&AFFFF:1 010 1111111111111111
を
RAMA |&00000: 000 0000000000000000
|&0FFFF: 000 1111111111111111
S1:の |&B0000:1 011 0000000000000000〜
|&BFFFF:1 011 1111111111111111
を
RAMA |&40000: 100 0000000000000000〜
|&4FFFF: 100 1111111111111111
^ ^ ^
A19 A15 A0
●真理値表と回路図
以上を真理値表にまとめてみました。
なお、表中の
・Ko15とE5はバンク制御に使うポート
・PRT*はプロテクトスイッチによって作ら れる信号
・WR*,RD*はCPUのそれぞれライト動作・リード動作時Lowとなるメモリ制御信号
・CE6*はアドレスが&10000〜&1FFFFで、CE3*は&20000〜&3FFFFで、CE0*は&80000
〜&BFFFFの時にLowになるCPUのチップセレクト信号
・CS1*はアクティブLow・CS2はアクティブHighのRAMのチップセレクト端子
です。
※表の左側はCPUの信号、右側はRAMの信号で、@・Aは4MbitRAMの番号
※*マークはアクティブLowの信号
※×はLまたはH
-----------------------------------------------------------------------
●superDELTAのハードウェア
E550のフレキシブル基板に乗ってるTC7W32F(2入力OR×2)と74HC00(2入力NAND×4),
74HC08(2入力AND×4),74HC32(2入力OR×4),74HC11(3入力AND×3),74HC20(4入力NAND
×2)各1ケと4MbitのSRAM(CXK584000M-70L等:神和電機で\5.6K)2ケを使います。
RAMROMとsuperDELTAを併用しない場合は74HC00は使わずにフレキシブル基板に付属
の5ピンのIC(TC7S00F:2入力NAND×1)を使います。
(ICはフラットパッケージ(SOP)のものを使って下さい)
(1)ライトプロテクト
-------------+-------
CE0* PRT WR*|WE*@A
-------------+-------
L L L | L
L L H | H
L H L | L
L H H | H
H L L | L
H L H | H
H H L | H
H H H | H
-------------+-------
CE0*---OR--AND---4M・WE*(1)(2)
| |
WR*----+ |
| |
PRT----OR--+
※CE0*=L(S1:)の時はプロテクトせず、WR*に従う。それ以外は(アドレス&80000〜
&BFFFF以外)PRT=Hの時WR*に無関係にWE*をH(プロテクト)
(2)S1:のアドレス変更
--------------+-------
CE0* A17 A16 |A17 A16
--------------+-------
L L L | L L
L L H | L L
L H L | L L
L H H | L L
H L L | L L
H L H | L H
H H L | H L
H H H | H H
--------------+-------
A16---AND---4M・A16(1)(2)
|
CE0*--+
|
A17---AND---4M・A17(1)(2)
※S1:についてはRAM上ではCPUと別のアドレスに割当る為,CE0*=L(S1:)の時はA16・
A17は常にL。それ以外(D:)はCPUのA16・A17に従う。
(3)バンクとRAMチップセレクト
------------------------+------------------------
CE6* CE3* CE0* A17 Ko15 | RAM(1)のCS* RAM(2)のCS*
------------------------+------------------------
H H L L L | L H
H H L L H | L H
H H L H L | H L
H H L H H | H L
H L H L L | L H
H L H L H | H L
H L H H L | L H
H L H H H | H L
L H H L L | L H
L H H L H | H L
L H H H L | L H
L H H H H | H L
H H H × × | H H
------------------------+------------------------
A17---------OR--+-----+
| | |
CE0*------+-+ | |
| | |
CE3*----+-|-OR--|--+--AND---4M・CS*(2)
| | | | | |
Ko15----|-|-+ | | |
| | | | | |
CE6*--+-|-|-OR--|--|--+
| | | | +-+|
| | | | ||
| ++| +----NAND---4M・CS*(1)
| || |
+--NAND--------+
| |
+----+
※CE6*かCE3*かCE0*がLの時(アドレス&10000〜&3FFFF及び&80000〜&BFFFFの時)以外は
RAM非選択
※なお、CE0*,CE3*,CE6*は同時にLOWにはならない。
また、S1:のとき(CE0*=L)はA17に従い、D:のとき(CE3*=LまたはCE6*=L)は、Ko15に
従って2つのRAMを切り替えて選択する。
(4)バンクとA18
------------+-------
CE0* A16 E5 |A18@A
------------+-------
L L L | L
L L H | L
L H L | H
L H H | H
H L L | L
H L H | H
H H L | L
H H H | H
------------+-------
A16---OR----AND---4M・A18(1)(2)
| |
CE0*--+ |
| |
E5--+-NAND--+
|
>
>470kΩ ←プルダウン抵抗
>
_|_
/// GND
※S1:の時(CE0*=L)はCPUのA16をRAMのA18とし、それ以外(D:)ではE5ポートの値を
A18とする。
(5)アウトプットイネーブル
---+-------
RD*|OE*@A
---+-------
L | L
H | H
---+-------
RD*---------4M・OE*(1)(2)
※プロテクト中にWR*=Lとなり、CPUからRAMに向けてデータバスにデータが出力さ
れた場合に、OE*=Lで固定されていたら、アドレスが確定してチップセレクトが
Lになった時点てRAMからもCPUに向けて同じバス上にデータを出力してしまうの
で、読み出し動作時しかLにならないRD*を利用した。
----------------------------------------------------------------------------
例えばCPUが&90000をアクセスすべくアドレス信号とCE0*=Lを送ります。
&90000=1 001 0000000000000000
^ ^ ^
A19 A17 A0
です。
CE0*=LかつA16=Hなので表(5)からE5の値にかかわらずRAMのA18は1、
CE0*=LかつA17=LかつA16=Hなので表(3)から、RAMのA17・A16は00、
A15〜A0はCPUと直結なので全て0です。
また、表(4)よりCE0*=LかつA17=LなのでKo15がHでもLでもRAM@がアクティブ
になります。
つまり、このCPUの&90000とCE0*によってRAM@の
100 0000000000000000=&40000
^ ^ ^
A18 A15 A0
番地がアクセスされるということです。
(ホントは逆ですよ。そうなるように表を作ったのです ^^;)
●ICのピン配置
74HC??のI?ピンは入力ピンです。使わない足はGNDかVccに接続して下さい。
+--U--+ +--U--+
I1--| |--Vcc I1--| |--Vcc
I2--| 7 |--I8 I2--| 7 |--I3
NAND(I1,I2)--| 4 |--I7 I4--| 4 |--AND(I1,I2,I3)
I3--| H |--NAND(I7,I8) I5--| H |--I7
I4--| C |--I6 I6--| C |--I8
NAND(I3,I4)--| 0 |--I5 AND(I4,I5,I6)--| 1 |--I9
GND--| 0 |--NAND(I5,I6) GND--| 1 |--AND(I7,I8,I9)
+-----+ +-----+
+--U--+ +--U--+
I1--| |--Vcc I1--| |--Vcc
I2--| 7 |--I8 I2--| 7 |--I8
AND(I1,I2)--| 4 |--I7 OR(I1,I2)--| 4 |--I7
I3--| H |--AND(I7,I8) I3--| H |--OR(I7,I8)
I4--| C |--I6 I4--| C |--I6
AND(I3,I4)--| 0 |--I5 OR(I3,I4)--| 3 |--I5
GND--| 8 |--AND(I5,I6) Vcc--| 2 |--OR(I5,I6)
+-----+ +-----+
+--U--+ +----U----+
I1--| |--Vcc A18--| |--Vcc
I2--| 7 |--I8 A16--| C |--A15
NC--| 4 |--I7 A14--| X |--A17
I3--| H |--NC A12--| K |--WE*
I4--| C |--I6 A7 --| 5 |--A13
NAND(I1,I2,I3,I4)--| 2 |--I5 A6 --| 8 |--A8
GND--| 0 |--NAND(I5,I6,I7,I8) A5 --| 4 |--A9
+-----+ A4 --| 0 |--A11
A3 --| 0 |--OE*
+--U--+ A2 --| 0 |--A10
I1--| |--Vcc A1 --| M |--CS*
I2--| E | A0 --| | |--D8
GND--| 1 |--NAND(I1,I2) D1 --| 7 |--D7
+-----+ D2 --| 0 |--D6
TC7S00F D3 --| L |--D5
GND--| |--D4
+--U--+ +---------+
I1--| |--Vcc
I2--| |--OR(I1,I2)
OR(I3,I4)--| |--I4
GND--| |--I3
+-----+
TC7W32F
【ソフトについて】
このプログラムは、きゃぱさん作のDELTA Ver3.5 のパラメータ変更版で、768KB の
RAMDISK を実現させるためのデバイスドライバです。
-[ プログラム ]-
S_DELTA. -- デバイスドライバ (v1.0) exec : call &be000
* note *
きゃぱさん作 DELTA Ver3.5のパラメータ変更版です。
* インストールに成功するとS1:S_DELTA.SYS 408Bytesが出来ます。
* 初期化するには? init "D:I [cr]
* デバイス登録を外すには? init "D:! [cr]
S_DELTAではバンクを切り替えたまま、バンクメモリの物理アドレスを、
アプリケーションに返します。 つまりアプリはバンクメモリに直接アクセス
することになります。 (MS-DOS で言う EMS の様なノリです)
S_BNKTST -- バンクRAMテストプログラム (v1.0) exec : call &be000
* note *
きゃぱさん作 BANKTEST Ver1.2のパラメータ変更版です。
メモリチェックで、"o" が出れば正常で、"*" が出れば異常である事を示す。
MEMORY CHECKING : oooo
||||
Bank Number 0123
"*" が出てしまったら 配線を良くチェックする事。
バンクメモリに異常があっても S_DELTA をインストールでき、フリーエリアも
正しく表示されますが、使っているうちに、だんだんおかしくなって来ます。
BANKTEST で "o" が 4 つ付くまで、追いつめてください。
-[ デバイス・スペック ]-
1Sector : 256 bytes
1Cluster : 1sector = 256 bytes
FAT sector : 18 * 256 = 4,608 bytes
DIR sector : 45 * 256 = 11,520 bytes
DATA sector : 3009 * 256 = 770,304 bytes
------------------------------------------
TOTAL : 3072 * 256 = 786,432 bytes
* ディレクトリ数をDELTA Ver3.5 の96に対して360と大幅に増やしています。
これは当時のHMF Ver1.xx(*1)が最大ファイル数96という制約があった為です。
* note * 470kΩ の抵抗でのプルダウンを忘れない事。
(2.304MHzマシンでは1MΩでも可)
74HC?? の使わない方の入力ピンはGNDかVCCに電位を固定する事。
(*1)HiMさん作のFDライクなファイラー。現在はVer2.xx。
●謝礼
きゃぱさんにはソース改造の折は殆どつきっきりで指導して下さり、大変お世話
になりました。また改造したプログラムの公開を快く承諾して下さり、本当にあ
りがとうございました(_o_)。なお、このソフト部分のDOCは殆どDELTA Ver3.5の
数字を変更しただけに近いものです(^^;)。流用してすみません(__;)。
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
以上がS_DELTA.DOCの内容です。
本記事の執筆者からのコメント:
「改造は自分の責任でして下さい。Great(VEG00302@niftyserve.or.jp)
はアドバイスは可能な限りしますが責任は取れません」
スパムメール防止のため、お手数をおかけ致しますが、記載のメールアドレスから「@」を一つ外してメールの送付をお願いいたします。