PasocomMiniに関するメモ
HAL研究所のPasocomMini MZ-80Cに関する自作ツールや覚え書きなど。
目次
モニタルーチンによるロード・セーブ
PasocomMiniでのテープへのアクセスは、基本的にHAL-MONITORのコマンドとSP-5030初期バージョン (ファイル名が「BASIC SP-5030」のもの) にしか対応していないようです。KM-BASICや多段ロードなど、独自にモニタルーチンを呼ぶプログラムではうまく動きません。
そこで、モニタルーチンを使ってテープアクセスするプログラム全般に対して、SmileBASIC側でテープアクセスを肩代わりするプログラムを書いてみました。ロード・セーブを行うモニタルーチンである$0021〜$002Aにブレイクポイントを仕掛け、呼ばれたらMZエミュレータのメモリに対して読み書きを行ってリターンする、というものです。KM-BASIC、S-OS SWORD、HAL-MONITORでの「ネ木1 ネ木4 → 」などで動作確認を行いました。モニタルーチン$002D (VERIFY) には未対応です。
残念ながら、SP-5030後期バージョン (ファイル名が「SP-5030」のもの) では動かないと思われます。I/O1982年4月号「カンフルZP-5039B」記事によると、後期バージョンではモニタルーチンを呼ばずに独自プログラムでロードを行っているそうです。
参考: http://retropc.net/ohishi/museum/mz80k2.htm
使い方
- MZ上でロードしたい.mztファイルを、SDカードの/PCM/SB/以下に保存します。
- 多段ロードなど複数のインフォメーションブロックを持つファイルの場合は、インフォメーションブロックごとにファイルを分割してください。
- SmileBASIC上でテープアクセスプログラムをload,runしておきます。
- F12キーで制御をMZエミュレータ側に移し、ロードやセーブを行います。
- F12キーで制御をSmileBASIC側に移し、「load file name?」や「save file name?」に対しファイル名を入力します。
オートスタート
PasocomMini付属のHAL-MONITORでは、MZT形式のファイルをロードした後、Gコマンドで実行を指示する必要があります。これをオートスタート動作に変更するパッチを書きました。リセットするごとにパッチを当てないといけないので、実用性はあまりなさそうですが。
- SmileBASIC上でパッチをload,runします。
- MZエミュレータ上でLDコマンドを使い、MZTファイルをロードします。
テープダイアログについてのメモ
LOADやSAVE用のダイアログが表示される条件を調べてみました。
- $05A0のNOP($00)が実行されるとLOADダイアログが出る
- $0475もしくは$05C0のNOPが実行されるとSAVEダイアログが出る
- $05E0のNOPが実行されるとKILLダイアログが出る
- $00以外の値になっていると出ない
- $0475からだとマシン語かBASICでセーブできる
- $05C0からだとマシン語かバイナリ(=ベタイメージ)でセーブできる
- .MZTファイルのロード先が$D000以降にかかっていると、.MZT形式でないと判断されてバイナリ扱いになる(ZEPLIS3の配布イメージなど)
- マシン語かバイナリでセーブする場合、ダイアログでのアドレス入力値でインフォメーションブロックの値は上書きされる
- BASICでセーブする場合、メモリ$1020-$1021の値がスタートアドレスとしてインフォメーションブロックにコピーされる。ただし$1201以上$CFFC以下でないと$4806になる。サイズはSP-5030用プログラムが格納されているとして自動計算される
MZエミュレータ用の簡単なデバッガです。
デバッガのコマンド
help, ? | コマンド一覧
|
quit | デバッガ終了
|
reset | エミュレータのリセット
|
d[ump] | メモリダンプ
|
write | メモリへの書き込み
|
dis[asm] | 逆アセンブル
|
load | ファイルからメモリにロード
|
save | メモリをファイルにセーブ
|
reg[ister] | Z80レジスタのセット
|
stack | スタック表示
|
b[reak] | ブレイクポイント設定/解除
|
s[tep] | 1命令実行
|
t[race] | 1命令実行 (CALLも1命令として扱う)
|
g[o] | ブレイクがかかるのを待つ
|
run | エミュレータ実行開始
|
stop | エミュレータ一時停止
|
files | SBファイル表示
|
win[dow] | エミュレータ表示位置を簡易指定
|
SmileBASIC上で動くBASICインタプリタです。テキストファイルを読み込んで、MZエミュレータ上で動作しているかのように入出力を行います。SP-5030互換を目指したのですが、実物を持っていないので互換性の度合いについては不明です。マイコンBASICマガジンなどに掲載されたMZ-80C用プログラムがいくつか動くのを確認しました。
(※2017.12.20追記:INPUTとPEEKに不具合があったので修正しました)
(※2018.2.27追記:DIMとONに不具合があったので修正しました)
使い方
- 実行したいBASICプログラムを入力します。文法はSP-5030準拠です。
- SmileBASICエディタで入力する場合: そのままsaveしてください。
- 他のパソコンなどで入力する場合: SDカードの/PCM/SB/以下にUTF-8形式で保存してください。BOMはあってもなくても良いようです。改行コードもあまり気にしなくて良さそうです。
- SmileBASIC上でBASICインタプリタをload、runします。
- 実行速度を聞かれるので答えます。Enterのみだとデフォルト速度になります。
- 1で保存したプログラムのファイル名を入力します。(長いプログラムは読み込みに少々時間がかかります)
- F12キーを押してMZ側に制御を移します。
BASICプログラムの入力方法
- 共通
- アスキーコード$20-$5E ( !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]) はそのまま入力してください。
- アルファベットは小文字で入力しても大文字として扱われます。
- ^は↑と判定されます。
- 2ドット下線 ($CF) と2ドット上線 ($D7) は「_」と「~」で入力できます。(例: MUSIC"_CC~C")
- {}の中に2桁の16進数を書くと、対応するアスキーコードとして扱われます。16進数以外の文字は無視されます。(例: {79}{7a}{7b}、{797A7B}、{{79,7a,7b}はいずれも時分秒となる)
- SmileBASICエディタで入力する場合
- ソフトウェアキーボードからの入力をある程度は受け付けます。MZアスキーコード表に存在しない文字は使えません。
- 他のパソコンなどで入力する場合
- アスキーコード$20-$5Eは半角でも全角でも入力できますが、対応が怪しい記号もあるので半角の方が無難かも。
- 片仮名、漢字、πはそのまま全角で入力してください。
- 平仮名を入力しても片仮名として扱われます。
- 仮名の濁音半濁音は自動的に分離解釈されます。
- $85のドットは全角の「・」(中黒、中点) で入力してください。「.」は$2Eのドットになります。
- アスキーコード$5E,$5F,$C8,$CC,$F1,$F6,$F7は「↑←■□●×○」で入力できます。
- 罫線 ($CB,$CD,$CE,$D0,$D1,$D2,$D3,$DD,$E0,$FB,$FD) は細線でも太線でも入力できます。
- チェッカー ($C6) は「網」で入力できます。
- コントロール用反転矢印 ($11-$14) は「下上左右」で入力できます。
- トランプマーク ($E1,$F3,$F8,$FA) は「▲▼★◆」で入力できます。
その他注意事項
- shift+BREAKで一時停止、もう一度押すと動作再開します。
- LIST,NEW,LOAD,SAVE,VERIFY,WOPEN,ROPEN,CLOSE,PRINT/P,PRINT/T,INPUT/Tは未実装です。実行時エラーになります。
- デフォルト速度では1命令あたり5msのウェイトが入ります。
- 速度を変更しても、TI$の変化する速度は変わりません。実時間に同期します。
- 手元のPasocomMiniに入っていたRaspberry Pi A+は、Revision:900021 (製造Sony UK,メモリ512MB) だった
- 電源を入れる時点でHDMI出力がつながっていないと、Segmentation Faultで落ちるっぽい。config.txtにhdmi_ignore_edid=0xa5000080などと書いて設定を固定すれば落ちない
- emubpの0番でブレイクすると、その設定は消える
- SDカード経由で読んだファイルに全角バックスラッシュ(\)があると、円記号(¥)で表示される。print chr$(&hff3c)は本来ならバックスラッシュのはずだが、¥が表示される。chr$(&h5c)と同じフォント実体を指しているのではないか。全角円記号がファイル中にある場合は表示されない
- 起動直後の最初のBEEPは鳴らない?
トップ > 雑多なもの > PasocomMiniに関するメモ