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

投稿

Z80のニーモニック検索

Z80や8080のバイナリダンプをつらつら眺めてると、C3やCDを見つけてはジャンプ、コール命令だなとか、FEで比較処理してるなとか、01,11,21でレジスタペアに代入してるなってのは慣れてくると読めるようになるんだが、咄嗟に74とか出てもホイホイと出るほどには仙人になれない。 z80_mnemonic.py   z80_mnemonic.sh  いつもの4shared サーバーです。 nikohon@b553:~/ダウンロード/Works$ python ./z80_mnemonic.py 2桁の16進数を入力してください: 80 オペコード 80 に対応するニーモニック: ADD A,B nikohon@b553:~/ダウンロード/Works$ ./z80_mnemonic.sh 80 Error: Argument must be a hex value in the format 0x00 to 0xFF. nikohon@b553:~/ダウンロード/Works$ ./z80_mnemonic.sh 0x80 Mnemonic for 0x80: ADD A,B nikohon@b553:~/ダウンロード/Works$  使い方としては、python版は作業フォルダにでも入れて python ./z80_mnemonic.pyと打てば メッセージに従い、2桁の16進数を $や0xなど抜きで入れれば 該当するOPコードを表示してくれる。ただそれだけ。 同じことを、シェルスクリプトでもできるだろうと作ったのが、z80_mnemonic.sh こちらは 引数として0x付きで16進数2桁を入れて呼び出せば 該当するOPコードを表示してくれる。ただそれだけ。 
最近の投稿

GAME80FIXのソース

本家のたけおかさんの方でGC80の公開を再開していただけたようなので こちらも改変したソースの公開をしようと思う。 ファイルは gc80_fix-source.zip  おなじみの4sharedのサーバーです。 cp/m-80用 GAME-80コンパイラ GC80について 元のアーカイブから、必要なファイルだけ抜き出して再構成してます。 makefileとかありましたが、linuxなどの環境でビルドできる訳でもないので抜きました。 普通にcp/mの環境でhi-tech-Cのあるドライブ上に、 gc80.cとgame80.GGGファイルを持ってきてコンパイルすれば使えます。 linuxの端末上からhi-tech-Cでビルドする場合 私の環境だと、エミュレータはcpmとcpm32があるが cpm32経由でしかビルドが出来ない。 エミュレータcpmはlinux上のドライブを、そのまま地続きの仮想ドライブとしてcpmのA:に仮定して動作してくれるが hi-tech-Cのファイル読み取りのやり方がオーソドックスなCPMのファイルアクセスとは違うようで ライブラリの一部が読めないとエラーになる。 A>c309-17 gc80_fix Hi-Tech Z80 C Compiler (CP/M-80) V3.09-17 Copyright (C) 1984-87 HI-TECH SOFTWARE Updated from https://github.com/agn453/HI-TECH-Z80-C error: cannot find fp entry for FCB at dbae fctn 35, FCB named P1      COM C309-17 COM d49b 一方、エミュレーターcpm32は 立ち位置的にはwineに似た動作なので ~/cpm_works/hi-tech-C$ ./cpm32 -h C309-17.COM gc80_fix.c などと、linuxのシェルからビルドできてしまう。 これで GC80_FIX.COMができているので cpmのコマンド処理系が「_」(アンダーバー)を受け付けないのでgc80_fix.comからgc80fix.comに名前を変えて 実行させると A>gc80fix maz...

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」とか検索窓に入れるだけ。