CE-159/161でのライトプロテクト機能の使用方法 (2)

本日はCE-159/161で実際にライトプロテクト機能を利用する方法について書きたいと思います。(CE-159の英文マニュアルならこちらからダウンロードできますので、目を通しておいていただいた方がよいと思います。) 前回の記事ではメモリマップや簡単な動作原理について書きましたが、今回は実践編ということで、以下に具体的な手順を示します。

1. CE-159/161のライトプロテクトスイッチを書き込み可能(無印のほう)に切り替え(CE-159であれば容量切り替えスイッチも設定します)、PC本体の電源を切った状態で挿入します。PCの電源を投入後、NEW0 を実行します。

2. 機械語のプログラム(CE-153/CE-156なども含め)を使用するのであれば領域を確保(以下、ここではBASICエリアの先頭アドレスを XXYYH と仮定します)するため、NEW &XXYY を実行します。その後、機械語プログラムをロードまたは入力します(内部にワークエリアを持つ機械語プログラムは利用できません)。

3. 必要であればソフトウェアキーに内容を登録します。ライトプロテクトをONにするとリザーブエリアも書き込み禁止となるため、事前に登録しておく必要があります。

4. プログラムモジュールに保存するBASICプログラムをロードまたは入力します。STATUS 2 の値をチェックし、書きこみ禁止領域(ROM領域)の最終アドレス-6よりも小さいことを確認しておきます。次に、一旦プログラムを実行てから STATUS 3 の値をチェックし、ROM領域の最終アドレスより大きいことも確認しておけば確実です(配列および2文字変数がRAM領域に収まることを確認するため)。

5. 以下のプログラムを入力・実行します(実行は[DEF][=]です)。これはプログラムモジュールの空きエリアをFFHで埋め、最後に"65279 END"という行を追加します。実行時に"MEMORY OVER!"というエラーメッセージが表示される場合は、プログラムの容量がROM領域に収まりきらないということなので、プログラムを小さくする(あるいはCE-159の場合はROM領域の容量を増やす)必要があります。このプログラムは本体PC-1500/1501とも共通です。
CE-159のROM領域8KB または CE-161の場合(16377=3FF9H):
 65273:"=":IF STATUS 2>16377 THEN 65278
 65274:FOR A=STATUS 2 TO 16377
 65275:POKE A,255:NEXT A
 65276:POKE 16377,254,255,3,241,142,13,255
 65277:END
 65278:PRINT "MEMORY OVER!":END
CE-159のROM領域6KBの場合(14329=37F9H):
 65273:"=":IF STATUS 2>14329 THEN 65278
 65274:FOR A=STATUS 2 TO 14329
 65275:POKE A,255:NEXT A
 65276:POKE 14329,254,255,3,241,142,13,255
 65277:END
 65278:PRINT "MEMORY OVER!":END
CE-159のROM領域4KBの場合(12281=2FF9H):
 65273:"=":IF STATUS 2>12281 THEN 65278
 65274:FOR A=STATUS 2 TO 12281
 65275:POKE A,255:NEXT A
 65276:POKE 12281,254,255,3,241,142,13,255
 65277:END
 65278:PRINT "MEMORY OVER!":END

6. 最後に以下を実行します。これはROM状態情報領域(RAMの先頭8バイト)に適切なデータを書きこんでシステムから認識されるようにするために必要です。ROM容量を示す5バイト目のデータはなぜか0でいいようです。
CE-159の場合:
 POKE &2000, &55, &20, (&XX-&20), &YY, 0, 0, 0, &FF
CE-161の場合:
 POKE &0000, &55, &00, &XX, &YY, 0, 0, 0, &FF

7. PC本体の電源を切り、ライトプロテクトスイッチを書き込み禁止([.]側)に切り替えます。これで作業は終了です。

では、実際にやってみることにします。PC-1501+CE-159(ライトプロテクトエリア8KB)にて、カナテープ(CE-156)およびゲーム2種(ここでは、PC-1500 resource pageにある、”Donkey Kong"と"Invader"をロードしてみることにします。

NEW &2790 を実行後、CLOADM &2000 としてカナテープをロード。RESERVEモードで"!"キーの定義を消去(または CALL &20C5@ に変更)しておいたほうがよいと思います。(カナONのためのCALL命令のアドレスはいつものPEEK関数(RAMの先頭アドレスを参照している)を使用したものだと誤ったアドレスをコールすることになり、誤動作の原因となります。これはCE-153でも同様です。)
CE-156ロード中

CLOAD でDonkey Kongをロード。
Donky Kongロード中

1行目を、1:ARUN :CALL &20C5:END に変更します(カナを自動的にONにするため)。ゲーム自体は[DEF][D]で実行可能です。
CALL命令を修正

MERGE でInvaderをロード。[DEF][S]で実行可能です。
Invaderロード中

上記5.のプログラム(CE-159, 8KB用)を入力し、[DEF][=]で実行します。
ROM化準備プログラム

上記6.のPOKE命令を下記のように実行します。
 POKE &2000, 85, 32, 7, 144, 0, 0, 0, 255
その後PC本体の電源を切り、ライトプロテクトスイッチをONにして完了です。この状態でCE-159内のプログラムは見えません(ROM状態情報領域の最後の1バイトが0であるかFFHであるかにかかわらず見えない)が、実行することは可能です。
POKE命令

さらに本体RAM内に"TANK"もロードしてみました。実行可能とするためにプログラムの先頭にラベル"F"を加えます。ちゃんと3つともプログラムを起動して遊ぶことができました。また、プログラムモジュールを着脱したり、本体で NEW0 を実行したりしてもCE-159内のプログラムはカナ機能も含めて消えることはありませんでした。
Tank起動

最後に他のPC-1500にセットしてみました。PCの電源OFFの状態でCE-159をセットし、NEW0 を実行すれば使用可能となります。なぜかカナ機能がうまく動作しませんでしたが(カナキーは有効になるが、カナのフォントが表示されない)、BASICのプログラム自体は問題なく動作しました。カナテープはおそらく初回ロード時に本体内のワークエリアの初期設定を行っているのでしょう。なので、ワークエリアに適切な値が設定されていないと誤動作するのではないかと思います。
Invader起動

CE-159ではROM領域とRAM領域を混在させることが可能であることを利用して、一部の変数をプログラムモジュール内に置くことが可能ですので、次回はこの方法についても簡単に触れておきたいと思います。

※本サイトで紹介する内容は、すべて個人的研究の範囲内で行っていることです。ここに書かれた内容を実行したことによる、データ(クラウド上を含む)・ソフトウェア・ハードウェアの障害および金銭的損害について、私が責任を負うことはできません。重要なデータはあらかじめバックアップを行い、内容を十分に理解したうえで、ご自身の責任の下で行ってください。
関連記事
スポンサーサイト



テーマ : コンピュータ
ジャンル : コンピュータ

tag : SHARP ポケットコンピュータ プログラムモジュール CE-159 CE-161

コメント

非公開コメント

アクセスカウンタ
カレンダー
11 | 2021/12 | 01
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 -
最新記事
最新コメント
リンク
カテゴリ
楽天お勧め商品
検索フォーム
Kyoroのつぶやき
FC2掲示板
ブロとも申請フォーム

この人とブロともになる

RSSリンクの表示