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

投稿

GAME インタープリタとコンパイル後のバイナリの比較

fedora42の環境で動作する6809エミュレータの中で動作する GAMEインタプリタで実行したプログラムと GAME-CCでコンパイルした同じプログラムの動作比較です。 すべて同じ6809エミュレータ上での動作、実機のSBC6809などだと更に速度は落ちます。 最初はインタプリタでの実行  エミュレータには、ウェイトの掛からない実行状態での動作です。 次は、エミュレータにdebugオプションを付けた状態での コンパイルオブジェクトの実行動作です。  debugオプションを付ける状態だと、インタプリタで実行しているのに近い エミュレータのトレース機能が一部噛んでくるので速度が落ちます。引き換えに好きなタイミングで簡易debugerに入って、レジスタ、メモリの確認やステップトレースを掛けることも出来ます。残念ながら、メモリの書換えや指定アドレスからの実行コマンドがないので自由な作業ができるdebugerとは言えませんが、6809のメモリを消費すること無く必要最低限の動きを追うことは出来ます。 最後がdebugオプションを外した、エミュレータでの全力動作です。  画面の右にCPUの動作クロック、その下にCPU占有率、通信帯域、メモリ、HDDアクセスのグラフを出しているのだが、エミュとは言えtelnetでローカル通信をしてるので全力で端末とのやり取りをすると通信帯域を消費しているのが判る。  
最近の投稿

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

GAME-CC

5月5日の「GAME09」 で一部紹介した、 ttps://www.zukeran.org/shin/d/2024/06/04/bm-development-environment-8/ 「ず」さんのブログを見ていたら、6800用のGAME68関連のアーカイブにGAME言語のソースをアセンブラのソースの形で出すコンパイラが紹介されていたので、ダウンロードして6809用に書換えてみた。 ここに、一応 使い物になる程度の形になったので公開しょうと思う。 GAME-CC0_0531.zip  4shared.comのリンクなので気になる方はご遠慮ください。 先に、着手していたGAME09の方は、インテルHEX形式でのシリアル転送のルーチン部分が目処がたったので、GAME09インタプリタ内に内包させるすり合わせ作業中。 GAME-CC0は、それ以外にasm6809を使っていますのでa09などの他のアセンブラを使用の場合は、適宜makefileの修正を行ってください。  以下はGAME-CCオリジナルからの改変作業過程の作業メモです。何をどうイジったかの参考にでも どうぞ。 makefile  11から17行、gameオブジェクト生成ルール コメントアウト common.hの構造体宣言をmain.cに移動  print_string_t    STRING_FCC[10000];  opt_do_loop_t    odl[1000];  opt_for_loop_t    ofl[1000];  Node    *code[10000];  Token    *token; シリアル端末専用のSBC6809用のため 不要なBM-L2専用の音楽、タイマー、カーソル制御関係の機能をコメントアウト ここまでやると、linuxのgccでコンパイルが通る。 この時点で判るバグは、'=nn のRNDシード設定が何もコードを吐き出さない。 論理否定notが使えない。 文字列と改行のみのプリント文の行でエラーになる。 手持ちのアセンブラが「.」(ピリオド)「_」(アンダーバー)で始まるラベルをエラーとするので、「....

AppCloud対策メモ

悪名高い、スマホ ゴミアプリ AppCloudの対策メモ 概要はGIGAZINEの記事を参考  Samsungのスマホに削除不可能な情報収集アプリ「AppCloud」がプリインストールされて物議を醸す https://gigazine.net/news/20251118-samsung-appcloud-pre-install/   んで、対応策もGIGAZINEの記事から スマホから「AppCloud」「AppSelector」「MobileServices」「AppServices」などの不要ファイルを擬似的に消し去るadbコマンド  https://gigazine.net/news/20260401-appcloud-delete-adb-command/  とはいえ、GIGAZINEの記事も https://gist.github.com/reindex-ot/8d443acd06ae64b12e8740d86badf45c や Re*Index. (ot_inc) 氏による A ppCloudというかAura from Unityについてのお話。|Re*Index. (ot_inc) https://note.com/reindex/n/n56bff3bfb04f を引用してるだけなんだが 要は adb shell pm uninstall --user 0 com.aura.oobe.ntt adb shell pm uninstall --user 0 com.ironsource.appcloud.oobe.huawei adb shell pm uninstall --user 0 com.aura.oobe Shizuku + Cantaで削除。 ShizukuとはrootでなくともAPIで特権レベルな操作を簡易的に行える便利な存在です。ADBでコマンドを流す必要はありますが、Android単体で簡単に潰せます。Termuxを入れている場合はそれを使えばコマンドが流せます。 adb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/start.sh Cantaをインストール後にAuraのパッケージを検索してアンインストールしてください...

検索エンジン duckduckgo

なんでもかんでも、個人情報を抜きまくるgoogleじゃなく、普段遣いはduckduckgoを使っているんだが、検索結果に怪しいのがゴロゴロ出るのを排除したいときgoogleだとサードパーティのblockerプラグインがいくらでも出てくるんだが、duckduckgoではほとんど出てこない。 そもそも、duckduckgo自体が標準でブロック機能を持っているからなんだが、これが登録できるドメインが5つまでで救いようがない。Bang機能というのだが、ブラウザのプラグインもだいたいは、このBang機能にブロック登録するだけのお粗末なものばかり。 duckduckgoのヘルプにBangの数を増やせないのかと探してみたら、Bangとは別で一時的に特定ドメインを検索対象から除外するオプションが有ることを発見した。 「-site:」のあとに除外したいドメイン名を入れて 普通に検索ワードを入れて検索。複数ドメインを除外したい場合はカンマで区切って列挙できる。逆に特定ドメインだけを検索対象にする場合は頭のマイナスを外すと特定ドメイン内だけを検索するようになる。  「そば -site;tabelog.com,rakuten.co.jp」とか検索窓に入れるだけ。 

6809 エミュレータ アレコレ

6809のプログラムの動作確認環境について linux PC上でクロスアセンブルしたものを SBC6809やFM7などの6809マシンに持って行って動作させるのが単純な話なんだが、 パラメータを一つ変えては、SDカードやEEPROMに書き込んで、動作させてみてを繰り返すのは あまりにも非効率すぎる、プロならICEとかを使うのが王道だが趣味の道楽でそんな道具揃えてなど居られない。 そこで、PC上でエミュレータで動作させて、おおかた完成させてから実機に持ち込むやり方になる。 6809のエミュレータ環境を探すといろいろ有るが、懐かしのFMシリーズなどのPCエミュや 海外だとTRSなどの6809PCのものが結構出てくる。ただ そこまで多機能なモノは必要ではないのだ ACIAでのデータのやり取りをシミュレートしてくれるだけのボードマイコンを再現してくれるので十分なのだ web検索で探すと、6809tools,6809usim,6809 という3つが候補に上がる 6809toolsは、アセンブラのA09と実行環境のV09の組み合わせなんだが、 ROMエリアとACIAポートアドレスが固定で、ソースを変更しても動作させることが出来ない。 6809usimも同様にACIAポートが変更できない、動作させるためのROMを同梱のmakeROMで作るしか出来ないとか 今どきのlinux環境で素直にビルドできないとか問題山盛りすぎて話にならない。 最後の6809(正式名は6809 Assembler, Simulator, Debugger (in rust))で https://github.com/gorsat/6809 で公開されてる。 概要としては、ACIAポートを起動時のコマンドラインオプションで指定でき、 エミュレータ本体に簡易マクロアセンブラとデバッガが内蔵されており、 ブレークポイントだけじゃなく、ステップトレースまでこなし、 端末画面2つ必要なのを除けば、使い勝手は申し分ない。 他のアセンブラで作った、HEX、モトローラSレコード、BINも実行できるのも有り難い。 github経由でしか、作者にメッセージが送れないので残念。

ターミナル表示の録画、動画化について

端末上のテキスト表示を記録するには asciinemaを使うが、 これだけでは〇〇.castというあまり一般的ではないファイルができるだけで、 これを公開してもごく一部にしか通じない。 まず、 $ asciinema rec othello.cast などと、asciinemaを記録モードで起動 例としてcpmで動作するGAME80コンパイラGC80で作った オセロプログラム起動、終了、録画停止 $ asciinema play othello.cast   で記録の再生、確認 これを一般的なmp4動画にしたいと悩む。 おなじみのduck.aiにお伺いをたてるとasciinema-animとか言うのが有るらしい と言われるが見当たらない、普通にweb検索をかけても出ないところを見ると お約束の嘘解答に騙されてしまったようだ。 そこで、改めて探し出したのが sh2mp4 だ。 コレ単体で端末の表示の記録録画ができるらしいが 今回欲しいのは〇〇.castをmp4動画に変換する機能。 $ sh2mp4 --cast-file othello.cast othello.mp4 とかやって、できたmp4動画を見たら「*」記号が「.」と代わらんぐらい小さくて納得いかず。 オプションにフォントの種類とサイズが代えあられるらしいので試した結果 $ sh2mp4 --cast-file othello --font "Source Code Pro" --font-size 14 othello.mp4 で、できた動画がこんな感じ   が、ローカルで見ると内容が判るんだが、ブログに上げてみると上の動画はただの黒い画面に小さな点がチマチマしてるようにしか見えない。全く使えない。 別のやり方を探す、単純に画面を動画としてキャプチャするsimplescreenrecorderというの試す。