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程度に下がるだろう。