FX-890P / Z-1 / GR / GRAのRAMを640Kにする(Part3)

※2018/11/23修正
チェックプログラムに1か所誤りがありましたので修正しました。

その他細かいこと
-------------------------------------------------------------
RAM側で起動しているときは、ROMエリアも書き換えし放題ですのでプログラムミスには注意です。
(ROMルーチン改造し放題という利点もありますが)
暴走等でROMエリアのRAMの内容が破壊されてしまった場合、切り替えスイッチをROM側にして、前回の記事の内容をふたたび実施すれば大丈夫です。
-------------------------------------------------------------
本改造によって、RAMから起動した際のメモリマップは以下のようになります。

00000H~3FFFFH
RAM#0(LCS)

40000H~7FFFFH
RAM#1(GCS0)

80000H~9FFFFH
増設RAM(GCS1)

A0000H~AFFFFH
LCD(GCS3)

B0000H~BFFFFH
空き

C0000H~FFFFFH
RAM化ROMエリア(UCS)

RAM側で起動すると、もともとのROMはGCS2に接続される形になります。
というわけでGCS2にパラメータを設定すると、元のROMを出現させることができるのですが・・・

空きエリアのB0000H~BFFFFHに出現させると、元でいうところのF0000H~FFFFFHが出現します。
前半はアクセスする方法がありませんので、その場合は・・・

①RAM化ROMエリアをE0000H~FFFFFHにして、C0000H~DFFFFHに元のROMを出現させる
この場合は、C0000H~DFFFFHが、元のE0000H~FFFFFHになります。

②RAM化ROMエリアをD0000H~FFFFFHにして、B0000H~CFFFFHに元のROMを出現させる
この場合は、B0000H~BFFFFHが、元のF0000H~FFFFFHに、C0000H~CFFFFHが、元のE0000H~EFFFFHになります。
ちょっとややっこしいですが、アドレスバスA17の関係でこうなります。

※記事書いてて気がついたのですけど、4MbitROMの機体だとどう出現するか不明です(めんどくさくて試してない・・・)
予想では128KB毎に同じ内容が書かれていると思ってます。
-------------------------------------------------------------
RAMが全容量分正しく独立して認識されているかの簡単なチェックプログラムです(元のROMルーチンを変更した容量判定は、実際には判定していないも同然ですので)。
不安でしたらALL RESET直後にやってみてください。
実行後、念のため&HE0000と&HF0000を読みだして、どちらも&H9Aであることを確認してください。
なお、非常によろしくないことをやっていますので(もともと何が格納されていたのか一切考慮してない)、おわったらALL RESETしてください。
厳密にチェックするには、すべてのPOKEした箇所の読み出しをしたほうがいいのですが、各セグメントの先頭番地の値が上書きされてなかったら大丈夫でしょう、ということで先頭のみ読み出しています。
厳密にチェックされたいかたはそれなりに改造してみてください。

10 DEFSEG=0
20 POKE &H4000,1:POKE &H7FFF,2:POKE &H8000,3:POKE &HBFFF,4:POKE &HC000,5:POKE &HFFFF,6
30 DEFSEG=&H1000
40 POKE &H0000,16:POKE &H3FFF,17:POKE &H4000,18:POKE &H7FFF,19:POKE &H8000,20:POKE &HBFFF,21:POKE &HC000,22:POKE &HFFFF,23
50 DEFSEG=&H2000
60 POKE &H0000,32:POKE &H3FFF,33:POKE &H4000,34:POKE &H7FFF,35:POKE &H8000,36:POKE &HBFFF,37:POKE &HC000,38:POKE &HFFFF,39
70 DEFSEG=&H3000
80 POKE &H0000,48:POKE &H3FFF,49:POKE &H4000,50:POKE &H7FFF,51:POKE &H8000,52:POKE &HBFFF,53:POKE &HC000,54:POKE &HFFFF,55
90 DEFSEG=&H4000
100 POKE &H0000,64:POKE &H3FFF,65:POKE &H4000,66:POKE &H7FFF,67:POKE &H8000,68:POKE &HBFFF,69:POKE &HC000,70:POKE &HFFFF,71
110 DEFSEG=&H5000
120 POKE &H0000,80:POKE &H3FFF,81:POKE &H4000,82:POKE &H7FFF,83:POKE &H8000,84:POKE &HBFFF,85:POKE &HC000,86:POKE &HFFFF,87
130 DEFSEG=&H6000
140 POKE &H0000,96:POKE &H3FFF,97:POKE &H4000,98:POKE &H7FFF,99:POKE &H8000,100:POKE &HBFFF,101:POKE &HC000,102:POKE &HFFFF,103
150 DEFSEG=&H7000
160 POKE &H0000,112:POKE &H3FFF,113:POKE &H4000,114:POKE &H7FFF,115:POKE &H8000,116:POKE &HBFFF,117:POKE &HC000,118:POKE &HFFFF,119
170 DEFSEG=&H8000
180 POKE &H0000,128:POKE &H3FFF,129:POKE &H4000,130:POKE &H7FFF,131:POKE &H8000,132:POKE &HBFFF,133:POKE &HC000,134:POKE &HFFFF,135
190 DEFSEG=&H9000
200 POKE &H0000,144:POKE &H3FFF,145:POKE &H4000,146:POKE &H7FFF,147:POKE &H8000,148:POKE &HBFFF,149:POKE &HC000,150:POKE &HFFFF,151
210 DEFSEG=&HC000
220 POKE &H0000,192:POKE &H3FFF,193:POKE &H4000,194:POKE &H7FFF,195:POKE &H8000,196:POKE &HBFFF,197:POKE &HC000,198:POKE &HFFFF,199
230 DEFSEG=&HD000
240 POKE &H0000,208:POKE &H3FFF,209:POKE &H4000,210:POKE &H7FFF,211:POKE &H8000,212:POKE &HBFFF,213:POKE &HC000,214:POKE &HFFFF,215
999 PRINT "Check START!":BEEP
1000 DEFSEG=0
1001 IF PEEK(&H4000)<>1 THEN 9000
1100 DEFSEG=&H1000
1101 IF PEEK(&H0)<>16 THEN 9000
1200 DEFSEG=&H2000
1201 IF PEEK(&H0)<>32 THEN 9000
1300 DEFSEG=&H3000
1301 IF PEEK(&H0)<>48 THEN 9000
1400 DEFSEG=&H4000
1401 IF PEEK(&H0)<>64 THEN 9000
1500 DEFSEG=&H5000
1501 IF PEEK(&H0)<>80 THEN 9000
1600 DEFSEG=&H6000
1601 IF PEEK(&H0)<>96 THEN 9000
1700 DEFSEG=&H7000
1701 IF PEEK(&H0)<>112 THEN 9000
1800 DEFSEG=&H8000
1801 IF PEEK(&H0)<>128 THEN 9000
1900 DEFSEG=&H9000
1901 IF PEEK(&H0)<>144 THEN 9000
2000 DEFSEG=&HC000
2001 IF PEEK(&H0)<>192 THEN 9000
2100 DEFSEG=&HD000
2101 IF PEEK(&H0)<>208 THEN 9000
3000 PRINT "Check OK!(^o^)":BEEP:END
9000 PRINT "Check NG...(ToT)":BEEP:END
-------------------------------------------------------------
FX-890Pで拡張コネクタ部分のフタを簡単に開けるようにする方法
画像

画像

(こちらの写真は加工後です)
こんな感じでツメの柱を切って、さらに指の爪をひっかける部分を微妙に彫れば簡単に開くようになります。
分解したらフタは外せますので、そのときについでに加工してしまいましょう。
下の出っ張りは削っても削らなくてもいいと思います(写真では削ってしまっていますが)。
-------------------------------------------------------------
この機構を利用すると、Z-1なのにZ-1GRとか、FX-890PなのにZ-1GRとかにすることができます(もちろんROM吸出し対象機種を持っていることが前提ですよ?)。
機種判別用のジャンパが違っていますので、なんかの判定で失敗するかもですが、そのあたりはROM内の判定箇所を変更しちゃえばOKです(本体改造ついでにジャンパを変更してしまうのもありといえばありです。方法はCPU基板上のカードエッジコネクタ付近にかかれています)。
GR系は、RAMファイル機能が使えますのでなにかと便利です。
-------------------------------------------------------------
改造中に気が付いたのですけど、Z-1GRAのROMって4Mbit(512KB)ですね。
起動時にUCSの範囲をE0000H~FFFFFHの128KBに設定していますので、ほかの部分はつかってなさげですが・・・
A17自体は(たぶん)配線されていますので、CSレジスタをいじれば256KBまではアクセスできます。A18は配線されているのか不明です・・・
-------------------------------------------------------------
GCS2を使いましたが、起動時は使わない設定になっています。
このとき端子状態がどうなっているかですが、i80C186/80C188のリファレンスマニュアルを参照すると、High固定になるっぽいです。
また、PowerSave時は最後の状態を保持してるっぽいですので、ANDゲートの入力がFloat状態になることはなさそうです。
(~っぽい、になっているのは、元の資料が英語ですので・・・(^^;))

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント