お久しぶりです。最近はWindowsをパフォーマンス優先に設定して動作させています。
デザイン優先にしてエラーが発生する場合にパフォーマンスをあわせることでアプリケーションのメモリ使用率が下がります。
全体的に抑えることでマルチタスク(死語!?)などを使う場合は作業効率が上がるといった逆転現象が起こります。
これは遅いCPUでGPUもフルに使うとアプリケーションのパフォーマンスを上げすぎると余力がなくなりエラーが発生します。
全体のパフォーマンスを下げることでPCの負荷が下がりマルチタスクの余力が上がります。
遅いパソコンはこれがよいです。
IntelのAtomと比べると使用率が高くてそれでも下がった感じですが、
動作が若干上がった感じがします。
今使っているPCは2.1Gまで上がる感じです。
メモリ使用率は100%超えているのでメモリが足りていない感じです。
もしかしたらオートチューニングでMAXが3Gまで上がるといった感じですね。
CPUが3Gの富士通の中古PCで試しましたが速度的に変わりませんでしたね;
とまぁ、長くなってしまいました;
これはWindowsに限ったことではなくMSXパソコンなら漢字BASICを使うとメモリ不足になることがあります。
後述すると富士通の中古PCは断片率が30%(え!)になっていました。
仕事用PCでメンテナンスしてなかったようです;
今回はフリーエリアについて書きたいと思います。
メモリの使い方はシステムエリア、プログラムエリアと数値などを記憶するワークエリア、画面表示などのデータエリアが必要になってきます。
実行するとデータがたまってきます。入力中に全く動かなくなるのは入力したデータが記憶できないために止まったりします。
Windowsの場合は何かデバイスに障害があって例えばメールサーバーの新着確認なども考えられます。
MSXBASICではディスクアクセス中やテープをロード、プリンタなどですね。
こんなふうに何か別のプログラムを使っている場合でも止まりますがここではメモリ不足で止まることです。
フリーエリアがないとパソコンは止まります。
画面ではフリーエリアの空き容量を表示させました。
この数値がゼロになると止まるわけではなくゼロに近い数値になるとパソコンが止まります。
マシン語はうまく使うことでコンパクトになります。さらっと説明しますと
コマンドを入力するだけのコンソールならBASICのIOシステム(BIOS)を使えばMSXBASICプログラムよりもコンパクトになります。
MSXBASICのデータは実行すると新たにメモリにいちいちデータ転送するインタプリタの弱い部分があります。
入力した文字を表示させて表示したデータを記憶するといった感じですね。
マシン語モニタではあらかじめメモリにデータを書くことでメモリへの転送処理を省くことができます。
昔のMSXBASICのマシン語のプログラムはメモリへの読み込みに数分かかっていました。
そこでASCII文字を使ってプログラムの領域でマシン語プログラムを実行できるようなプログラム技法が生まれましたが、
メモリに直接書くことが一般的です。だからMSXマガジンには簡易なマシン語モニタでプログラムしていた感じがします。
特にテープの時代を経験しているかたはBLOAD<BASIC<アスキー(テキスト)の順番にロードが遅いので、
バイナリ形式以外のデータはロードに時間がかなりかかっていました。
特にテキストデータは1行ごとに初代のパソコン通信のようにピーピー鳴る音(キャリア音)は遅いイメージがかなり強いと思います。
ですからROMBASICのマシン語はロードも早く、実行も早いと優位な感じでしたね。
ザナドゥとかデータロードに30分くらいかかっていました;さて、
ちなみにDOSのプログラムならシステムコールを使用します。このシステムコールのコードはMS-DOS3.1と同じです。
前処理でデータがBASICシステムでクリアされない領域を使って実行できればMSXBASICプログラムが消えても動かすことができます。
というわけで、お待たせしました。
独自のプログラミングしたMSXアーカイブ(FULLMSXアーカイブ)で体験できるような流れにしていきます。
また、リンク切れなどもありましたのでZ80のコードを載せることしましたのでスマホで見ながらできます。
FULLMSXアーカイブ:
https://fullmsx.web.fc2.com/mon.html
★こんなことも
久しぶりのおまけです。
試しにバグを覚悟で漢字BASICに変えてみるとどうなのか?やってみました。
MSX2+から使うことができます。モードが4つありフォントも変わります。
こんなふうになりました。#はりつけが# 笙(つけ)に変わりました。
これはMSXひらがながシフトJISに変わります。
変換処理ではCLSはエラーが出るので_CLSに変える必要があります。
どちらのモードでもCLSしたい場合はPRINT CHR$(12)でも同じです。
CHR$(13)がCRコードなので一緒に覚えるとよいですね。
エラーを直してトライしてみると
DB 'おけ'
に変えてみましたがCHPUTではちゃんと2バイト処理してくれるんですね。
「お」が82A8で「け」が82AFになりD104hに00を書くことで文字の終わりにしています。
文字は50音順になっています。「お」がA8、「か」がAA、「き」がAC、「く」がAEで
並べると「おかがきぎくぐけ」となります。
漢字BASICでもBIOSを使うことができました。思っているよりも日本語をカンタンに処理できるんですね。
BlueMSXで漢字を入力することができないのでプログラミングしてテキストで書けばできます。
とりあえず漢字を直接入れたい場合は
まずWindowsのテキストファイルで1行書きそのファイルを仮想のBドライブに保存して
プログラムでBドライブのファイルを読み込むようにして貼り付けする感じです。
WORD(b:word.txt)をロードすると1行目を読み込み「新規作成」が漢字BASICに文字が入ります。
FTPのようにb:word.txtを差し替えして更新をする必要があったり面倒ですが、こんな方法もありますね。
左はMSXの画面、右はWindowsのメモ帳です。
コードがUTF-8になっている場合があるのでANSIで保存します。
モードにするにはCALL KANJIでCALL ANKで戻ります。
ロード形式は16進数(00h-ffh)はマシン語になり、記号の場合は疑似命令になります。
”'LD A,03h ;新規作成”という感じです。次回アップデートで対応になります。
あとは日本語ラベルも
アセンブラツールズでは試用目的(モニタ)でエディタまたはメモ帳でプログラミングできるようにします。
さらにSCREEN5など漢字グラフィックモードにもできますがJEが不安定になることがあります。
ググってみると面白いです。さらに!
intel8080Aニーモニック記述も選択できるようにしました。
このツールはハンドアセンブルの補助として、
アセンブル記述をコメントとして書くだけの機能です。
ここでは3Eの後に16進数でAレジスタの数値を書いていきます。
16進数の数値があっていれば例えば極端な例にすると
10000 DATA"'Aレジスタに16を入れる","3E16"でも動きます。
文頭にダッシュ(’)は入れてください。
まぁ88のMONの表示をMSXでしたかったので加えてみました。
Z80は上位互換ですがZ80のJR命令、EX命令は残しています。
この新しい命令がわかればZ80をマスターした感じになります。
B2は1バイト数値、B3B2はアドレスの上位(B3)、下位(B2)の2バイト数値です。
では。
参考ページ:
Z80アセンブルツール 操作説明 倉庫整理 セブンでDS NEWラブプラス体験版 - [FM]FULLMSX for BLOG (goo.ne.jp)
※コメント投稿者のブログIDはブログ作成者のみに通知されます