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

GAME-CC 修正箇所の説明 追加分

GAME_CCの作者の「ず」さんのリクエストに答えて、先方のブログに回答したのですが

単に省略されただけで、「ず」さんに伝わっていればよいのですが

うまく表示されて無いようなので こちらにも 

 

codegen.cファイルの

関数 void epilogue(){ 内の

    for(int i=1; i<odl_n+1; i++){
        if(odl[i].opt==0){    //if(ofl[i].opt==0){
            continue;
        }
        for(int j=0; j<odl[i].n; j++){
            printf("V_%s\tRMB\t2\t; do loop pseudo array\n",odl[i].label[j]);
        }
    }

--------------------------------------------------------------------------------
optimize.cファイルの
関数 void optimize_do_loop(){ 内の

                if(node_u->kind==ND_SETVAR
                && strcmp(node_u->str,odl[n].var)==0){    // 制御変数への代入がある
                    odl[n].opt = 0;    //ofl[n].opt = 0;
//                    printf("; break control var '%s':",odl[n].var);

--------------------------------------------------------------------------------



分かりづらい提示で申し訳ないのですが、
コメント「//ofl[n].opt 」が含まれる行が修正箇所です。
アセンブラソース出力の終わりの方に出てくる

V_F_DZ2_8    RMB    2    ; for loop pseudo array
V_D_BI1_2    RMB    2    ; do loop pseudo array

for文とdo文の為の疑似関数のバッファ確保文の オリジナルで言うところの「_D_BI1_」の名を冠した一行が
修正しないと出力されない症状があって見つけました。
for文の方は出ていたので、for文の出力に影響を与えている変数などと対になるdo文側の変数を追いかけて、
私が使っているGeanyエディタだと同一フォルダ内のファイルに対して指定したキーワードが使われている箇所を
検索で弾き出す機能があるのでそれで見つけました。

オリジナルのソースから、削除したり前後の位置を変えたりしているので
diffを取っても参考にならない気がするので申し訳ないです。

ただ、これもバイナリ実行形式じゃなく アセンブラのソースで出す形だから見つけられたのが
大きな利点だと思います。

コメント

このブログの人気の投稿

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

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

一部の関西の人にしか通じないネタ

たぶん「30年モノ」くらいだと思う?  拡大 値札に注目! ちなみに、ATMEGA32へのファーム書込用のアダプタを作るのに使用。

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...