まごころせいじつ堂

浜町庄金 研究開発  マイコンで遊んでばっかりで

RAM

TIMEX Sinclair 1000(ZX81)の内蔵RAMを16Kにする

 TIMEX Sinclair 1000は2KバイトのRAMを内蔵している。RAMのサイズはワークエリアRAMTOPを読み出すことで確認できる。

PRINT PEEK 16388+256*16389
これで18432(0x4800)と表示されれば2KB、16K RAM PACKを接続していれば32768(0x8000)と表示される。また、このRAMTOPワークエリアに値を書き込むことでBASICのワークエリアを縮小してユーザー向けの機械語の領域を確保できる。マイクロソフト系BASICのCLEAR文に似てますね。

 さてRAMを拡張するにはいくつかの方法がある。エッジコネクタに出ている*RAMCS信号をHにすれば内蔵RAMをdisableにできるので、アドレスデコードを自前で行うことにより任意のメモリ配置ができる。ZX81のメモリマップは以下のとおり。

0x0000-0x1fff ROM 8KB
0x2000-0x3fff 上記ROMのイメージ 8KB
0x4000-0x7fff RAM領域16KB VRAM領域 (*RAMCSはこの領域)
0x8000-0xffff 未使用 32KB

RAM領域16KBに加えROMイメージ領域と未使用の領域を合わせて最大56KBのRAMを設定可能。

作例を探してみる。

Internal 32K RAM for ZX81
32K SRAMを使い、前半を標準の16K RAM領域に、後半を未使用の0x8000~から16KB割り当てる。未使用領域は初期化されないためメモリバックアップが可能。

32k Speichererweiterung Selbstbau
同じく32KB SRAMを使うがROMのイメージ領域8KBと0x8000~から8KBを割り当てている。74HC251 1個によるデコードが巧妙だがこれオープンドレインでない74HC151でないといかんのでは?

https://quix.us/timex/rigter/Thanks@20for@20all@20the@20Memories.html
32K SRAMを2個使い、56KBのRAM領域を実現。バッテリバックアップ付き。

128KB SRAMを使えば1個でフルカバー、GALを使うかなどいろいろ考えたが本体内蔵なら*RAMCSの範囲内、つまり16KBにしたほうがRAMのみで済みシンプルでよい。複雑なのはエッジコネクタでいくらでも外に増設したらよかろうと判断。32KB SRAMを使った改造を行う。

 まず内蔵の2KB SRAMを外す。いつもは外したいICの足に低融点はんだを盛って全体を溶かしながら外していたが、これをすると外したICの足にはんだが糸を引く。そこで通常のはんだを端子ごとに少量追加してはんだ吸い取り器で吸い切り、全部吸い取ったらペンチで足をいじりスルーホールから外していく。こうしてピンセットなどをICと基板の間に差し込んでこじると簡単に外すことができた。
2022-03-31 01.19.17

16KBにするために必要なアドレス線はダイオードD1~D8のカソード側に出ているのでここから結線する。32K SRAM 62256のピン1,23,26を起こしてそれぞれをダイオードD1(A11),D3(A12),D5(A13)のカソードと接続。TIMEX Sinclair 1000の場合はA10が配線済みなのでこのままでよいが、1K RAMのZX81ではジャンパLK1からLK2への切り替えが必要。
2022-03-31 02.43.07

 ということで割と簡単に内蔵16KB化ができた。外付けRAM PACKが不要になったので消費電力も300mA程度に下がるだろう。

ZX81 16K RAM PACKと消費電力

 ZX81は1KB(TIMEX Sinclair 1000は2KB)のRAMを内蔵している。これを拡張する16K RAM PACKはZX81背面のエッジコネクタに接続することで内蔵RAMをdisableし16KBの空間を提供する。
2022-03-28 18.29.46

 2枚の基板がカートリッジ内に収めてある。
2022-03-28 18.28.01

16K DRAMと昇圧回路など。NECのuPD416C-1(アイルランド製)が8個無理やり詰めてある感じ。必要な+12Vと-5Vは電源(DC9V)から生成されている。
2022-03-28 18.28.22

 制御回路。内蔵RAMの~CSにはカスタムチップZX81 ULAの~RAMCS信号が抵抗を経由して接続されている。このRAM の~CSがエッジコネクタに出ており、16K RAM PACK内で直接+5Vに接続することで内蔵RAMをdisableしている。エッジコネクタにはZ80の信号が直接出ているのでそこからDRAMの制御信号を生成。
2022-03-28 18.28.32

 本題。当初16K RAM PACKを接続した状態では起動しなかった。ACアダプタの容量が足らなかったせいで、9V250mA品から9V650mA品に交換したら動いた。
2022-03-28 21.54.12

 16K RAM PACKありでは約500mA。
2022-03-28 22.03.56

  本体のみでは約280mA。
2022-03-28 22.05.13

 ACアダプタの容量からみても妥当な動作。プログラムは乱数を繰り返し表示するものだが消費電力に大きな変動は見られなかった。これはZX81が画面表示のタイミングやCGROMの表示もZ80のソフトウェアでやっているので常に全力で動いているからだと思われる。


記事検索
プロフィール

hardyboy

カテゴリ別アーカイブ
月別アーカイブ
QRコード
QRコード
  • ライブドアブログ