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

投稿

6月, 2026の投稿を表示しています

fortune用の日本語名言データ作成メモ

linuxなどUNIX系のガジェットにfortune(おみくじ)コマンドってのがある。 単純に呼び出すと、端末に一言 セリフを表示して終了する。ただそれだけのプログラム。 予め用意されたテキスト分の区切り位置をデータとして保持し 乱数で区画の文言を表示しているのだと推察する。 で、これ一般には英文を端末画面に表示するだけのように思われがちだが かなり昔から、日本語対応の端末なら日本語も表示できる。  以前に、むせる男の予告集や世紀末覇王の名言、天の道を往き総てを司る男の名言、蜘蛛男の名乗り口上など作ったりしたが 諸般の事情で「手控えておいたのさぁ」 今回 新たに「4次元殺法コンビの迷言」と「赤い宇宙海賊の名言」を追加して 圧縮書庫 にして出す。 その前に、fortune用のデータの作り方を まず、単純に名言、格言をまとめたテキストデータを作る。 横の文字数はあまり多くなく、ひとつあたりの行数も3行くらいに収める。 ファイルの先頭と終端は必要ないが、各名言の節目節目に「%」だけの行を入れて区切る。 本文中に「%」記号を使いたいときなどは-c オプションで区切り記号を別のものに変える。 $ strfile filename[enter] とだけ打てば、filename.datというdatファイルが作成されてる。 元データのfilenameというテキストファイルには拡張子.txtを付けないようにする。(ただし中身は単純なテキストファイル) 試しに その場で fortune filenameと打って、目的の名言が表示されれば完了。 ディレクトリを移動すれば。fortune filenameと打っても filenameというファイルがないと怒られるので /usr/share/games/fortune/ に テキスト文のfilenameとdatデータのfilename.datのセットをコピーする。 /usr以下の領域は管理者権限がないと書き込めないので su なり sudo で管理者としての資格で書き込むか 自分のローカル領域で使用するのなら。fortuneにファイルパスを指定して対象のファイルを呼び出せば管理者権限なしでも使える。 自分のシェルの.rcにでも ailas で 登録すれば fortune だけ打ち込めば出るようにもできる。 alias myfortun...

あの炭酸飲料のレシピの日本語訳

だいぶ古いけど、 元記事は https://gigazine.net/news/20260415-coca-cola-reproduction/   GIGAZINEからの引用。 GIGAZINEの方もYoutubeの https://www.youtube.com/watch?v=TDkH3EbWTYc  からの引用なんだが。 その動画の説明欄に出ていた レシピが英語表記で日本語で聞き慣れた素材とは違いすぎるので deepl翻訳で日本語化してみた。 FLAVOR SOLUTION A: dilute 20mL of the following oil mixture to a volume of 1 liter using food-grade 95% alcohol. 45.8mL lemon oil 36.5mL lime oil 8mL tea tree oil (from Australian tea tree, Melaleuca Alternifolia) 4.5mL cassia cinnamon oil 2.7mL nutmeg oil 1.2mL orange oil (regular sweet orange) 0.7mL coriander oil 0.6mL fenchol (any version of alpha-fenchol should work) フレーバー溶液A:以下のオイル混合液20mLを、食品用95%エタノールで1リットルになるまで希釈する。 45.8mL レモンオイル 36.5mL ライムオイル 8mL ティーツリーオイル(オーストラリア産ティーツリー、Melaleuca Alternifolia由来) 4.5mL カシアシナモンオイル 2.7mL ナツメグオイル 1.2mL オレンジオイル(一般的なスイートオレンジ) 0.7mL コリアンダーオイル 0.6mL フェンチョール(アルファ-フェンチョールのいずれのタイプでも可) FLAVOR SOLUTION B: dilute the following mixture to a volume of 1 liter using water. 185mL Durkee caramel color 150 grams food-grade vegetabl...

GAME言語用のリナンバーツール

GAMEでプログラムを作ってると出だしで割り振った行番号だと後から入れる追加のルーチンが入る場所が確保出来なかったりするケースに出会う。 BASICなんがでも、よく出会うケースなんだがBASICにはrenumコマンドが用意されていたりする。システムによってはBASICのスクリーンエディタを借りて入力したりしていてもrenumでの行番号再振り分けをしようにも、GAMEの文法にrenumが対応してないので使えない。 そこで、今回はyahoo!のAgent!の力を借りてpythonで組んでみた。 単純に、引数1に対象ファイル名、引数2に開始行番号、引数3に増加分を指定すると 標準出力に結果を表示してくれるだけのもの。ファイルの形で残したければリダイレクトでファイルに保存すれば良い。少なくとも元ファイルを読み込むだけにしてあるので上書きなど間違って破壊するリスクはない。 リンク 今のところ予想されるバグは、存在しない行番号を呼び出す!=文と#=文への対応はしていない。 インタプリタだと200行へのジャンプ文に出会ったときに、201行はあるけど200行はない場合、素直に201行にジャンプする判断をするけど このリナンバーツールは何もしない。エラーも出さない。存在しないはずの#=-1にエラーも出さずにそのままスルーで出力してるから。同様に存在しない行番号を呼び出す文に出会っても何もしないので 大きな意味では不具合のもとになる。その辺は各自の判断で手を加えることを薦める。 

主だったChatAIの能力比較

 duckduckgoのサービスの一つであるduckAIで使えるAIエンジンの4種類に同じ質問をして返ってきた答えの違いによる信頼性の比較 質問は 「70年代から80年代に日本で使われたコンピュータ言語のGAME言語について 説明して」  というのと そのあとに、「プログラムのサンプルを出してみて」って頼んでみた。 まずは「Mistral Small 4モデル」  この会話は、Mistral AIのMistral Small 4モデルを使用してDuck.ai(https://duck.ai)で生成されました。AIチャットでは不正確な情報や不快な情報が表示される場合があります(詳細についてはhttps://duckduckgo.com/duckai/privacy-termsを参照してください)。 ==================== ユーザープロンプト1/1 - 2026/6/5 17:19:22: 70年代から80年代に日本で使われたコンピュータ言語のGAME言語について 説明して Mistral Small 4: GAME言語(GAME Language)は、1970年代から1980年代にかけて日本で広く使用された、ゲーム開発やグラフィック処理に特化したプログラミング言語です。主にパーソナルコンピュータ(PC)やホビーパソコン向けに開発され、当時のゲーム開発者や教育現場で人気を博しました。以下に、GAME言語の特徴や歴史、用途について詳しく説明します。 --- ### **GAME言語の概要** 1. **開発背景**    - 1970年代後半から1980年代初頭にかけて、日本のパソコン市場は急速に成長し、多くのホビーパソコン(例:PC-8001、PC-9801、FM-7、X1、MZ-80Kなど)が発売されました。    - これらのコンピュータは、当時のゲーム開発者にとって魅力的なプラットフォームでしたが、グラフィックやサウンドを制御するための標準的なプログラミング手法が不足していました。    - GAME言語は、このようなニーズに応えるために、グラフィックやサウンド、入力処理を簡単に扱えるように設計されました。 2. **特徴**    - ...

同じく68系アセンブラA09の日本語マニュアル

A09は6800系のアセンブルもできる、強力なアセンブラで 読む限りasm6809とアセンブラとしてはソースの共用ができるっぽいのですが、使う人の好みにもよるかな? もとは、アーカイブに付属する.htm形式のモノなのでレイアウトをなるべく残すようにhtml形式にしてます。 リンク をクリックしてダウンロードするなりして見てください。

ASM6809のマニュアルの日本語化

翻訳というほどのだいそれた作業でもないけど、asm6809のman表示をDeepL翻訳で長文部分のみ日本語にしてみた。 純粋な テキスト文 だが、その都度引き出して読むのも面倒なのでメモ代わりにここにだす。  以下、テキスト文本文 ----------------------------------------------------  asm6809(1)                  General Commands Manual                 asm6809(1) NAME        asm6809--6809 cross-assembler SYNOPSIS        asm6809 [OPTION]... [SOURCE-FILE]... DESCRIPTION        asm6809 is a portable macro cross assembler targeting the Motorola 6809        and  Hitachi  6309  processors.  These  processors  are  most  commonly        encountered in the Dragon and Tandy Colour Computer.        asm6809は、Motorola 6809およびHitachi 6309プロセッサを対象とした     ポータブルなマクロクロスアセンブラです。     これらのプロセッサは、DragonおよびTandy Colour Computerで最もよく見られます。 OPTIONS       ...

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で書庫にしてますのでお好きにどうぞ。  冒頭に出してる、6809のOPコード表の更に見易いものをみつけたので上げてみる。 しかもHD6309の命令にも対応したものである。        svgz形式 png画像 の2種類で上げておく。 

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