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

前回に引き続き、プログラムモジュールの活用方法です。今回は、CE-159の一部のみを書きこみ禁止に設定し、変数データをCE-159内部に保持する(=バッテリバックアップが効く)方法について書きたいと思います。(今回の内容のみ、CE-161では使用できません)

メモリマップを参照していただければわかるとおり、PC-1500シリーズでは配列変数および2文字得変数はRAMの後方から確保されていきます。これを逆手にとって、本体内RAM(PC-1500で2KB, PC-1501で6KB)を埋め尽くすような大きなダミーの変数を確保し、使用する変数を強制的にCE-159内に収めてしまう、というのが動作原理です。マニュアルに従うなら、具体的にはZY$()という配列変数を本体RAM容量分確保(PC-1500なら16バイト×128, PC-1501なら16バイト×384)し、変数ポインタ(STATUS 3に相当)をCE-159内に保存するためにZZ$(0)という変数を確保するという方法です。この状態でのメモリマップを示します。
変数保存時のメモリマップ

実際には次のような配列宣言を最初に行います。これによりZZ$(0)のデータは3FF7H~3FF8Hに格納されます。そして、RAM領域の先頭(3000Hまたは3800H)から3FEFHまでが実際に利用できる変数領域となります。
PC-1500: DIM ZY$(127), ZZ$(0)*2
PC-1501: DIM ZY$(127, 2), ZZ$(0)*2
  (※配列の添え字は255までしか使用できないので2次元にします)

そして、ワークエリアの変数ポインタ(7899H~789AH)の内容を、ZZ$(0)にコピーすることにより、データを回復できるようにします。
POKE &3FF7, PEEK &7899, PEEK &789A または POKE 16375, PEEK 30783, PEEK 30784

逆に、CE-159内のデータを回復するためにはZZ$(0)の内容を変数ポインタに書き戻します。
POKE &7899, PEEK &3FF7, PEEK &3FF8 または POKE 30783, PEEK 16375, PEEK 16376

実際には最初に変数ポインタを初期化(PC-1500なら4800H, PC-1501なら5800H)してから上記の操作を行うため、マニュアルでは下記のようなプログラムが示されています。先頭のSTOPステートメントは誤実行を防止するためのようですが、プログラム中に挿入する位置によっては不要かと思います。
PC-1500:
10 STOP
20 "A":POKE 30783, PEEK 16375, PEEK 16376
30 END
40 "B":POKE 30783, 72, 0
50 DIM ZY$(127), ZZ$(0)*2
60 END
70 "C":POKE 16375, PEEK 30783, PEEK 30784
80 END
90 ~ メインプログラム
PC-1501:
10 STOP
20 "A":POKE 30783, PEEK 16375, PEEK 16376
30 END
40 "B":POKE 30783, 88, 0
50 DIM ZY$(127,2), ZZ$(0)*2
60 END
70 "C":POKE 16375, PEEK 30783, PEEK 30784
80 END
90 ~ メインプログラム

上記のプログラムを含めたBASICプログラムを入力し、前回の記事に書いてある手順で書き込み禁止にします。その後[DEF][B]を実行して初期設定を行います。これにより2文字変数と配列変数はすべてクリアされ、ダミーの変数ZY$()とポインタ保存用の変数ZZ$(0)が確保された状態となります。このZY$()はプログラム内で通常の文字列変数として利用することは可能です。
上記の準備が終われば通常通りプログラムを実行できます。メインプログラムを実行して必要な変数を確保したのち、CE-159を取り外す前に[DEF][C]で変数ポインタを保存、CE-159を再装着したときに NEW0 に引き続いて[DEF][A]で変数ポインタを復帰させることで、プログラム内の2文字変数と配列変数はすべてCE-159内で保存可能となります。ただし、プログラムの実行にRUNコマンドを利用してしまうと変数が消去されてしまうため、注意が必要です。

いろいろと制限はありますし、本体内のRAMが無駄になるという欠点はありますが、この方法を利用すればバッテリバックアップ可能なデータベースプログラムなどを作成することもできそうですね。興味をもたれた方は試してみられてはいかがでしょうか。

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

関連記事
スポンサーサイト



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

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

コメント

非公開コメント

アクセスカウンタ
カレンダー
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リンクの表示