ポケコン(PC-G850V)でGAME言語(その6)LifeGame2 [ポケコン]
今回ポケコン(PC-G850V)に移植したGAME言語のインタプリタ及びコンパイラの動作確認として、前回の記事「ポケコン(PC-G850V)でGAME言語(その5)LifeGame」でライプゲームを動かしてみました。
この時は動作確認ということもあり、キャラクタベースで、かつ処理の最適化は考慮していませんでした。
今回はグラフィック機能を使い1キャラクタを4分割することで解像度を縦横それぞれ2倍にしてライフゲームを動かしてみました。
データ量が4倍になるのでGAME言語のソースも高速化を考慮し変更しています。
PC-G850でグラフィック表示するためにはIOCS(BIOS)コールの一つであるパターン表示(BFD0H)をコールするか、I/Oを直に制御するかのどちらかになりますが、今回はIOCSコールを使用しました。
パターン表示処理への引数はレジスタ経由で
B:パターン長、D:行位置、E:カラム位置、HL:パターンアドレス
なのでGAME言語からの直接コールではなく、アセンブラ経由でコールしています。
引数の位置情報はキャラクタ表示時のキャラクタ位置で書込み開始がキャラクタの左端の位置からになるので、1文字分より少ない書込みでは隙間が空いてしまいます。
このため、書込みは1文字単位(8bit x 6)とし、4ピクセル分なので16通りのビットパターンを持たせました。
今回作成したライフゲームが動作中のサンプル画面が下図です。前回のものと比べると表示領域がかなり広くなりました。^^
アセンブラのソースは次のとおりで1回のコールでキャラクタサイズでの一行分画面全体(2020/01/23変更)の表示処理を行っています。
★2020/01/23 変更 画面全体表示 & タイトル表示追加。
タイトルは適当に作ったこれ⇒
★2020/01/24 変更 MAX更新時のパターン追加
また、GAME言語のソースは下記になります。ループ内では乗算及び除算の計算回数を少なくする等の変更を行いました。
ソースサイズが小型で小メモリの環境向きであることもGAME言語の特徴ですね。
★2020/01/23 変更 タイトル表示対応
★2020/01/24 変更 乱数seed設定追加(Returnでデフォルト値)
尚、GAME言語のインタプリタやコンパイラ等は「ポケコン(PC-G850V)でGAME言語」からダウンロードできます。
Twitterにポストした動画付きメッセージを貼っておきます。
★2020/01/21 追記 {
Twitterにアップした動画は編集ミスやtypoが・・・・orz
編集時に何とかしようと思うと後が大変なので録画時に気合を入れてミスをなくすのがbetterですね(自分への教訓)
}
★2020/01/23 追記 {
今回のLifeGameのプログラムはソースエンド位置を保持する'&'の値の次のアドレスからテーブル用ワークとして使っています。
ビデオ内では実施していませんでしたが、ソース先頭アドレスである'='の設定だけでは'&'はアップデートされないため、'&'をアップデートするための == コマンドを行ってからプログラム実行するようにしてください。
}
以下は今回作成したライフゲームの自動起動HEXファイルの作成についての個人的なメモ書きです。
GAMEソースの開始アドレス(=空エリア)は0C00Hからで次のようにメモリに配置した。
更にGAME内に下記のパッチを入れ、コンパイルしたプログラムが自動起動するようにした。
GAMEインタプリタを含む自動起動HEXファイルは以下からダウンロードできます。
※使用メモリ領域は 0100H-1716H で、G100で起動します。
注意:インタプリタに上記のパッチを入れているので通常のGAME言語インタプリタを使用する場合は再度インタプリタのダウンロード(もしくは上記のパッチを元に戻す)が必要です。
・lifeAuto20200124.zip
★2020/01/24 変更 {
・いつも同じパターンだとつまらないので起動時に乱数のseed入力追加
・MAX記録時のドット表示を別パターン化
}
★2020/01/26 追記
起動時の乱数初期値を987で入力すると途中で面白い模様のパターンになるのを発見w
[TOP] [ 前へ ] 連載記事 [ 次へ ]
この時は動作確認ということもあり、キャラクタベースで、かつ処理の最適化は考慮していませんでした。
今回はグラフィック機能を使い1キャラクタを4分割することで解像度を縦横それぞれ2倍にしてライフゲームを動かしてみました。
データ量が4倍になるのでGAME言語のソースも高速化を考慮し変更しています。
PC-G850でグラフィック表示するためにはIOCS(BIOS)コールの一つであるパターン表示(BFD0H)をコールするか、I/Oを直に制御するかのどちらかになりますが、今回はIOCSコールを使用しました。
パターン表示処理への引数はレジスタ経由で
なのでGAME言語からの直接コールではなく、アセンブラ経由でコールしています。
引数の位置情報はキャラクタ表示時のキャラクタ位置で書込み開始がキャラクタの左端の位置からになるので、1文字分より少ない書込みでは隙間が空いてしまいます。
このため、書込みは1文字単位(8bit x 6)とし、4ピクセル分なので16通りのビットパターンを持たせました。
今回作成したライフゲームが動作中のサンプル画面が下図です。前回のものと比べると表示領域がかなり広くなりました。^^
GAME言語でライフゲーム(グラフィック版) |
|
アセンブラのソースは次のとおりで1回のコールで
PC-G850Vでライフゲーム(アセンブリ言語) |
|
タイトルは適当に作ったこれ⇒
★2020/01/24 変更 MAX更新時のパターン追加
また、GAME言語のソースは下記になります。ループ内では乗算及び除算の計算回数を少なくする等の変更を行いました。
ソースサイズが小型で小メモリの環境向きであることもGAME言語の特徴ですね。
PC-G850Vでライフゲーム(GAME言語) |
|
★2020/01/24 変更 乱数seed設定追加(Returnでデフォルト値)
尚、GAME言語のインタプリタやコンパイラ等は「ポケコン(PC-G850V)でGAME言語」からダウンロードできます。
Twitterにポストした動画付きメッセージを貼っておきます。
ポケコン(PC-G850V)へのGAME言語の移植が完了したのでグラフィック表示のライフゲームを作ってみた
— skyriver (@wcinp) January 21, 2020
グラフィック描画コール部は最小限のアセンブラを使いそこそこの速度で描画出来ている^^#PCG850V #G850V #ポケコン #GAME言語https://t.co/3DVwHh6fat pic.twitter.com/djNFgsAJ3X
★2020/01/21 追記 {
Twitterにアップした動画は編集ミスやtypoが・・・・orz
編集時に何とかしようと思うと後が大変なので録画時に気合を入れてミスをなくすのがbetterですね(自分への教訓)
}
★2020/01/23 追記 {
今回のLifeGameのプログラムはソースエンド位置を保持する'&'の値の次のアドレスからテーブル用ワークとして使っています。
ビデオ内では実施していませんでしたが、ソース先頭アドレスである'='の設定だけでは'&'はアップデートされないため、'&'をアップデートするための == コマンドを行ってからプログラム実行するようにしてください。
}
以下は今回作成したライフゲームの自動起動HEXファイルの作成についての個人的なメモ書きです。
GAMEソースの開始アドレス(=空エリア)は0C00Hからで次のようにメモリに配置した。
No. | start | end | contents |
---|---|---|---|
1 | 0C02H | 0D6DH | assembled object |
2 | 0D70H | 134AH | compiled object |
3 | 1350H | 1716H | work area |
更にGAME内に下記のパッチを入れ、コンパイルしたプログラムが自動起動するようにした。
・0406 21 0C 00 -> 21 4F 13 change '=' and '&' value ・0420 21 8D 0A -> C3 70 0D jump to compiled object
GAMEインタプリタを含む自動起動HEXファイルは以下からダウンロードできます。
※使用メモリ領域は 0100H-1716H で、G100で起動します。
注意:インタプリタに上記のパッチを入れているので通常のGAME言語インタプリタを使用する場合は再度インタプリタのダウンロード(もしくは上記のパッチを元に戻す)が必要です。
・lifeAuto20200124.zip
★2020/01/24 変更 {
・いつも同じパターンだとつまらないので起動時に乱数のseed入力追加
・MAX記録時のドット表示を別パターン化
GAME言語でライフゲーム(2020/01/24版) |
|
★2020/01/26 追記
起動時の乱数初期値を987で入力すると途中で面白い模様のパターンになるのを発見w
[TOP] [ 前へ ] 連載記事 [ 次へ ]