スキップしてメイン コンテンツに移動

GAME言語 あれこれ

 MZ-700用にSDカードからMZTファイルの読み書きが出来る基板を入手して以降、MZ用のインタープリタやコンパイラの打ち込みをやってた延長でZ80-MBC2上のCPMで動作するGAMEインタープリタとコンパイラをいくつか発見。GAME-MZは国会図書館のコピーサービスで当時のアスキー誌の記事を入手済で打ち込みMZT化は済んでいるが動作の確認はしてない。

CP/M-80で動作するGAME80言語を3点ほど紹介する。

まず、動作環境は実機としては8Mhz動作のZ80-MBC2にXMODEMでPCからのファイル転送

PC側はFedora40の端末から「screen」コマンドでの接続、比較用に同じくFedora40の端末上で動作するCPMエミュレータ2種類。エミュレータで動作確認がとれたモノを実機に転送して最終動作させてみる流れ。

 

 skyriverさんのGameOnCpm80

端末のエミュレータ上ではコピーペーストによるソースの転送もできるが
ファイル読み書き用のコマンドが組み込まれているので、なぜか実機の方ではコピペに転送が出来ないのでありがたい。コンパイラも組み込まれているのでインタプリタで実行確認後、コンパイルもできる。

難点は、コンパイルの際にソース格納アドレスやデータエリア、オブジェクト格納エリアの指定をする必要がある。GAME-MZでもコンパイルの際は普通に必要な事ではあるが、自分の頭の中でシステムのメモリマップを把握しておくのが意外と面倒くさい。

コンパイルで 出来たオブジェクトをCOMファイルにするのにDDTなんかの別ツールでメモリ上に残ってるデータをCOMファイルとして保存するしかない。 COMファイル化とかを視野に入れずインタープリト、コンパイル、実行だけなら使いやすくお薦め。

 

ファイル操作コマンド例

files ファイル一覧表示

:\\ *.g 拡張子 .g のファイルの表示
     \\のみ、\\ *.* での表示は出ない模様(単に自分の使い方が悪いだけかも?)

 save(¥>FileName)とload(¥<FileName)

詳細は https://piclabo.blog.ss-blog.jp/CPM80GameCompiler#gamec を参照

記事中の迷路探索プログラムをコンパイラの動作テストに有難く使わせていただいてます。


もう一方、Githubの  akih-san 謹製の GAME-and-VTL-for-CP-M

実行ファイルはGAME80IC.COM単体で動作して、インタープリタもコンパイラも内蔵ですので
端末のエミュレータへのコピペはできるので、エミュレーションでの使用だと
こちらの方が若干使いやすい。
ただ、
skyriverさんのGameOnCpm80のようなファイル読み書きのコマンドを
持ち合わせていないのでコピペでのソース転送がうまくできていない実機では使い辛い。

が、それでも捨てがたいのはコンパイル時に細かなアドレス入力を省略できる点
直前のソースデータの格納状況にあわせてコンパイル時の
デフォルト値を設定してくれている感じかな?

akih-san の Githubへのリンクは

https://github.com/akih-san/GAME-and-VTL-for-CP-M を参照

 

さいごに「たけおか ぼちぼち日記」の

ブログアドレス
https://ameblo.jp/takeoka/entry-11004344172.html

アーカイブアドレス(リンク消滅中)
ftp://www.takeoka.org/pub/micro/gc80.tgz

残念ながら、以前は公開していたFTPサーバが現在は非公開なのかアーカイブにアクセスできません。
私自身がアーカイブを持っているので以前は誰でも入手出来るように公開していただいていたのは確かなんですが。

内容としては、C言語で組まれたアセンブラソースを吐き出すGAME80コンパイラです。
GC80.COMとランタイムパッケージGAME80.GGGとソースファイル.Gを同じディスクに入れて実行すると
ソースファイル.ASMというアセンブラソースができます。(オリジナルはMACファイル)

具体的には

A>GC80FIX.COM MAZE[enter]
A>ASM MAZE[enter]
A>LOAD MAZE[enter]
A>MAZE[enter]

以上で、ASMソース、HEX、PRN,COMファイルが出来る。アセンブラはたけおかさんのポリシーに合わせて8080用のコードしか使わずZ80用の拡張命令は一切無いのでアセンブラソースからさらに高速化、コンパクト化のできる余地は有りますが十分な速度が出てると判断して、そのままにしてます。

ただ、オリジナルのGC80はバグが有って先のMAZEプログラムがコンパイルできません。
調べたところ@-@=(式)形式のDO-UNTIL文と@=式の形式のNEXT文の切り分けがうまくできてなく
そこが原因でコンパイルが出来てません。対処法として@=の次に(が有ればUNTIL,何もなく数値や式の時はNEXTとして処理としました。副作用で@=0とか@=1とかのUNTILの省略形が使えません。きちんと@=(0)とか@=(1)とする必要が有ります。
また1バイト配列の内部での読み出しの際に内部ではHLレジスタに2バイトデータとして取り込まれているのですが、1バイトの負数でも上位のHレジスタに無条件で0を入れるため、1バイトの配列に-1を保存しても 結果としては 正の数の255が返ってくるバグの2点。

式が込み入ると想定した結果と違う物になることもある。
配列の添字の中で別の配列との計算をさせたりとか。これは、仮の変数に添字の部分の計算を分散するとかで回避できることも有ります。

 

GC80FIXのバイナリとランタイムパッケージのgame80.gggとお試しの迷路探索、リバーシ、ライフゲームをまとめた書庫ファイルのリンクは

https://www.4shared.com/s/fTGjsqx6wge

4sharedなんで、公開から数日で消える可能性ありです。

ソースに関してはオリジナルのたけおかさんと連絡がつけば
たけおかさん経由で公開する形にできればと考えているのでソースの公開は控えます。


コメント

このブログの人気の投稿

IS01文鎮化からの復旧

androidロゴのあと、黒画面で、左下にカーソル状態からの復旧 状態について ※リカバリーキットはインストールしていない(泣 ※adbでPC側からシェルに入れる ※adbでPCからファイルをIS01にプッシュできる ※root権限を奪取できない(泣 ※ベースバンド7 以上、最悪の状況からの脱出に成功 必要な物 psneuter busybox insmod+ msm_nand_ex.ko flash_image recovery_kit.img まず、上記のファイルを用意し adb で、PCからIS01の/data/bootkit 辺りに転送して、一旦電源を落とす。 次に、 IS01の電源を入れる、この時点で正常起動せず、 画面真っ黒、左下でカーソルらしきモノ有りの状態で PC側からadb shellでIS01に入る 一般ユーザープロンプトが出るのが確認できれば、 先ほどのファイルを転送したフォルダに移動  lsとかして、ファイル一覧をだし必要なファイルが揃っているか確認する。 揃っているのが確認できたなら、 ./psneuter とか打ち込んで実行、一旦adb接続が解除されてPC側に戻ってきてれば多分成功、 再度adb shellで接続を試みる。 うまく接続できて、プロンプトがroot権限を表す#になっていれば第一段階クリア root状態で、つぎに書き込み専用 パーティションの呼び出しのために カーネルモジュールを組み込む、 ./insmod+ -f ./msm_nand_ex.ko recovery_wrパーティションが見えるようになったか確認 cat /proc/mtd mtd8,9,10が見えてれば成功 あとは、 ./flash_image recovery_wr ./recovery_kit.img とかして、 リカパリーパーティションにリカバリーキットを書き込み reboot recovery して、リカバリーキットから、破損したsystem,dataをバックアップから復元する。

screen コマンドでの コピーペースト転送の実現について

 以前、GAME言語のあれこれについての中で、GAME80ICなどでZ80-MBC2とのscreenコマンドでのシリアル接続中にソーステキストのコピーペースト転送ができない事に触れていたが、単に使ってる環境に依存した所謂「おまかん」なのだが、回避したければ、素直にwindowsで使うか 若しくは linuxでもwine上でteratermを使えば済む話ではある。だが、我が家に於いては普段使いにできるwindows機など無い。棚の奥を探せばwin7の入った古PCが有るとは思うがボードマイコンとの接続の為だけに引っ張り出してきたいとまでは思わない。そこで ふと考えるにteratermにあってscreenやcu,minicomにないものはと、teratermには、テキスト転送中に行単位、文字単位でミリセカンドのディレイを挟む設定がある。対してlinux系のシリアル接続コマンドにそういった類のモノを知らない(単に自分が知らないだけの可能性もある) 。そこで、duckduckgo検索のサービスである「Duck.AI」に聞いてみた。自分の思いついた革新的なアイデアは大概は先人が既に思いついてる当たり前過ぎるモノというのはいつもの事であっさりと解決策を教えてくれた。