MZ−1R12の仕様

MZ-700には発売予定も含めて様々な周辺機器が用意されていました。(本体価格を下げるため不当に削られたインターフェースを補完するものという陰口もたたかれていましたが。)かの有名な「アイビット電子」がまだあった頃(昭和62年ぐらい?)、MZ関係の在庫整理のため多数の周辺機器が売りに出されたことがありました。そのチャンスをずっと待っていた私は、首尾良くMZ-700用の増設RAMを一枚、拡張ユニットを一台ゲットし、別に中古で入手できた5インチディスクを動かすことができたのです。(DISK BASICがなかなか手に入らなくて少々焦りましたが。)
(ちなみに拡張ユニットはMZ-1500と共用のタイプになってしまいました。MZ-700専用タイプMZ-1U03?には3スロットもあり、いろいろついていてそっちの方が良かったんですが。)
この増設RAMボードは、たしか4000円ぐらいだったような。
 

機能

1.システムソフトをブートさせることが可能。
2.C-MOS RAMで構成され、バッテリでバックアップされているので不揮発性。
3.I/Oポートで読み書きする。この辺はX1のEMMボードといっしょですな。
4.自動インクリメントのアドレスカウンタ内蔵。
 

仕様

記憶容量 32kbytes
BOOT用ROM 4kbytes
データ保持時間 約1.5ヶ月(150%充電した場合)
充電時間 100%充電 29時間
     150%充電 43時間
電源 DC5V±10%
使用素子 CMOS STATIC RAM 2kbytes×16個

利用法

MZ-700のときとMZ-2000のときではちょっと違うんですが、それはMZ-700のときだけ利用されるBOOT用のROMを切り離すかどうかだけのことのようです。ボード上にはディップスイッチ×8があって、
 1   2   3   4   5   6   7   8
A2B A3B A4B A5B A6B A7B MSEL A11

a.A2BからA7Bで使用するポートアドレスを指定
b.MSELでBOOT ROMの切り離し
c.A11でBOOT ROMのバンク選択(前半・後半の選択)

できるようになっていました。
ポートアドレスは指定された番地から連続する3バイトを使用します。
その役割は
出荷時&hF8:OUT命令でカウンタアドレスの上位書き込み、INP命令でカウンタのリセット
   &hF9:OUT命令でカウンタアドレスの下位書き込み、INP命令でデータの読み出し
   &hFA:OUT命令でデータの書き込み、INP命令は無効
というようになっています。(この辺もEMMとほぼ一緒です。)
 

1)MZ-700でBOOT LOADERとして使用されるときは

MSEL ON、ポートアドレス&hF8(A2B OFF、A3B〜A7B ON)で、A11 ONで固定になります。
それはBOOT用のP-ROMのプログラムが&hF8から使うように決めうちされているためで、MSELによりメモりアドレスの&hE800〜&hEFFF(2kbytes)にROM(の半分)が呼び出されます。A11はP-ROMの前半と後半を選択するためのもので、結局後半は未使用のためここがOFF(後半を選択)にされることはないようです。
このように設定されたボードが存在している場合、MZ-700は起動時すぐにBOOT ROMのプログラムにジャンプし、次のようなメニューを出します。

Press R,W or M
R:read S-RAM
W:write S-RAM
M:monitor

Rを押すとS-RAMからBOOTします。
Wを押すとテープからプログラムを読み込んでS-RAMに格納することができます。
Mはいつものモニタに飛ぶだけです。
こうやって書き込めるプログラムは、ボード一枚分の32kbytesまでの大きさのものを一つだけ、という制限がありました。ROMの解析では、S-RAMのアドレス&h0000からヘッダ込みでべた書きをしているようで、ちゃんとチェックサム計算もしています。(テープと一緒です。)
この機能はあんまり使わなかったので...ウソ書いてるかも。
 

2)MZ-700で外部メモリとして使用するときは

S-OSにおけるRAMディスクやその他BASICから利用できるメモリ領域として使用するにはこちらの使い方になります。不揮発性なので初めて使うときもそうでないときも自分で初期化しないといけないわけですが、RAMディスクでなくてHDのように扱えるわけで、よく使うコマンドをここに格納できればフロッピーよりも断然早くて便利です。1)と併用できれば(I/Oが重ならない限り併用は可能です。)ALL RAMディスクによる運用も可能となると思われますが、いかんせんスロットが足らないので...私は試すことができませんでした。(FDのインターフェースも挿さってますから。)
#ここにいろいろ書いておいたらありがたいことにエミュレータを作っていただき
#このC-MOSメモリを実装してもらってしまいました。感謝感謝。
#まるくんさん開発ご苦労様でした。
まずディップスイッチMSEL OFFにして、自分で使用したいI/OアドレスをA2B〜A7Bに設定します。だいたいシャープ純正のカードはアドレスの後半を使用しているので、&h00あたりから順番に決めていくのが良いようです。(全部のI/Oアドレスを利用できるのなら64枚挿せるので、64×32kbytes=2Mbytesが仕様上の限界? でも、X1のように16bitsアドレスを使えれば...。)ただ、一枚ずつのアドレスはつながっていないので、大きなデータを書き込んで利用しようとしても、32kbytesずつのアドレス計算をしないといけません。(なんだかセグメント計算みたいだ。)
取扱説明書のプログラムの例を示します。
 
REM S-RAMの0000H〜00FFH番地に0〜255の数値を書き込む
REM I/Oアドレスは&hF8からに設定

INP #$F8,A      'アドレスカウンタのリセット(変数は何でもよい)
FOR A=0 TO 255
OUT #$FA,A      'データ0〜255の書き込み(オートインクリメントなのでこれだけ)
NEXT A
END

REM S-RAMの01FFH〜02FEH番地に記憶されているデータを表示させる

OUT #$F8,$01    'アドレス上位設定
OUT #$F9,$FF    'アドレス下位設定
FOR I=0 TO 255
INP #$F9,A      'データを読み出しA変数に入れる(オートインクリメント!)
PRINT A,        'A変数の表示
NEXT I
END
そういうわけでMZ-700用のS-OS"SWORD"にRAMディスク機能を付加し、S-RAMを利用する例を用意しました。もう実機を持っている人も少ないと思うのでぜひmz700win(MZ-700エミュレータ)でそのあたりを試してみて下さい。
New Version! ここからダウンロードできます。
 

3)MZ-2000のときは

持ってないので確認できませんが、MSEL OFFの状態でも、あることをしておくと、/キーを押しながら起動するだけでBOOT用に使えるそうです。MZ-2000のことは詳しくないのでその方法がどういう意味を持っているのか分かりかねますが、取説の例では、MZ-1Z001(BASIC)の内部ルーチンを使った設定法がマシン語のプログラム付きで載っています。外部メモリとして使う分にはMZ-700と全く同じみたいです。(BASICの文法がちがうが。)


ここのmenuへ