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

投稿

Z80のOPコード表

昨日の続きの話みたいなもんですが、30年ほど昔に技術評論社から出ている「プロセッサ」という雑誌に、エッセイだったか、コラムを書いてる現役のSEの方のちょっとした小技的な話にZ80のOPコード一覧を16x16の方眼目に並べたモノを作って 手元に置いてると言う話があった。当時は「ふーん」ってな感じで右から左だったワケだが、同様なものを誰かが作っているかと検索したが、A4の用紙に区切りよく配置されたモノは全く無かった。 6809だと、ASCII出版の名著「6809ハンドブック」の巻末に付録として最高の出来のOPコードテーブルがあるのでコレに勝てるものはないと思う。 私も買って持っているが、実家に置いたままで手元にはない。 近いものだと、モトローラのデータシートにできの荒い一覧がある。 こんな感じ 実際のモトローラのデータシートのものは90度回転して縦長だったのでA4横に再配置してみた inkscapeで扱うSVGZ形式で良ければ リンク に上げるのでどうぞ。 こんな感じ、現物はA4用紙に配置して作ったが、A6のシステム手帳サイズに縮小して使おうと試しに縮小したのを印刷したら。悲しいことに文字が小さすぎて老眼にはまともに使えない細かさだった。ぎりぎりA5サイズが限界だった。 こちらも、 リンク 先に上げと置くので必要ならどうぞ。 メイン以外の拡張命令の部分の一覧も作っているので適当に加工して使ってください。 元データはlibreofficeで扱うODS形式なのでexcelで読めるかどうかは不明。ods,svg,pdfで書庫にしてますのでお好きにどうぞ。 
最近の投稿

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のパッケージを検索してアンインストールしてください...