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

投稿

77AVEMUのGUIを使いたい

 githubで公開されてる、FM-7/77/AV系のエミュレータでlinux環境でも直で使える エミュとして唯一あるのが 77AVEMUであるが、ビルドの為のライブラリ導入のため目的のエミュ本体よりデカいTOWNSEMUを必要としたり、GUIが使えますと案内するが肝心のGUIのビルド方法については全く説明がないとか 謎仕様の塊で なかなか敷居の高いエミュなんだが 決して完成度の低いわけではないので ターミナルからCUIで使うか、pythonでも使って自前でフロントエンドでも作るかすれば済む話ではあるが、せっかく作者の方が用意してくれたのに使わないのはストレージの肥やしとしても勿体なさ過ぎるので、chatGPTとアレコレ対話しながら悪戦苦闘して 何をどう修正したとか 細かく説明したり、diffとってパッチファイルにするとかとてもじゃないが面倒なので、必要なファイル放り込んだフォルダごとZIPにしたので約240Mとデカいファイルだが 必要なら各自で ダウンロード して試してみて。最低限やった内容はHowToってテキストに書いてるけど あとは 各自でchatGPTにでも相談して解決して。    
最近の投稿

SBC6809モドキを作ろうとしたら、MZ-6809が出来ていた件 その3

 今回も動画からですが、物凄い地味な動画からです。とは言え、内容的には大きな成果ではあります。  地味な割にじっくり見てもらいたい部分があるので、 ダウンロード推奨 です。 お馴染みのBASIC9を読み込んで起動させ、time.bsという数行の簡単なBASICプログラムを走らせてます。一見ただ画面の左端を数字がカウントアップしてるだけの5秒位の動きですが、  --------------------------- 1 POKE &H0219,0:POKE &H0218,0 10 POKE &H8000,0 20 PRINT PEEK(&H0218)*256+PEEK(&H0219) 30 GOTO 20 ---------------------------- 中身はこんな感じです。メモリの0x0218と0x0219に0を書き込んで後は繰り返し読み出して表示しているだけです。これESP32からおよそ100ミリ秒のタイマー割り込みを受けて。1秒毎にカウントアップするようになってます。 動画編集ソフトのAvidemuxで1から2に変わる境目が 1:14.333 2から3に変わる境目が1.15.366 なんで おおよそ 1秒で1カウントアップする感じになってます。   でそれを踏まえて、アスキー文字でマンデルブロ図形を表示するプログラムの開始と終了の時間差を出して 130秒前後 の結果が出ました。 このタイマーの元ネタは  JR2XZY ブログ  の シリアル通信速度自動設定編  に出てくるPICの出力を見てたら、GPIOピンが一本空いてるのに気が付いて、見たらおおよそ100ミリ秒のパルス出てるのを見付けて、タイマーモドキに使えない?って考えて 実機のSBCのFIRQに送ってイロイロやっては見たけど 結局動かず。FIRQの処理中に次のパルスが来て無限ループしてるからかとか考えて、FIRQの処理中はパルス止める手段を加えないと無理かななんて思っていたんですよ で、エミュレータの中ならその辺はどうとでもなるかなとやってみたんですが 特に パルス止める処理とか必要なかったです。上に出てるBASICプログラムの10行にある 0x8000番地に0書き込んでるのは、リセット直後...

SBC6809モドキを作ろうとしたら、MZ-6809が出来ていた件 その2

    まずは、動画を上げてみる。これはシリアル接続での実際の使い方の参考例動画で 全部で10分ほどです。音も字幕による解説も何も入れてません。googleの都合で、画質を落とされるので、端末の文字などをくっきり見たい方は 4shared で 上げているので、22メガ程のサイズですがダウンロードしてローカルで再生してみてください。 おおまかな流れとしては、SDの中身をDIRコマンドで一覧したり。LOADコマンドでGAME09インタプリタをロードして、GAME09にはリセットベクタなどの情報は含まれないのでVSETでスタートアドレス(0x9000)を設定して。一度 起動させます。そのまま CTRL+D で コマンドプロンプトに一度戻ります。 そこで GAME用のソースファイル MAZE.GB をLOADコマンドで読み込み。テキストデータの従来のGAMEプログラムソースはGAMEインタプリタの扱うメモリ空間に直接与えても受け付けてくれませんのでそれ用に変換した言わばGame source Binaryということで拡張子にGBを付けて区別してます。同様にBASICのソースもメモリ上では中間コードに変換して保持されるので従来のBAS形式では受け付けてくれません。GAMEの.gbファイルは簡単なpythonプログラムで変換できるのですが、BASICの中間コードの変換はかなり面倒なので、端末上のコピペ転送で一度読ませて、BASIC自体に変換させて保存する方法で間に合わせてます。 さて maze.gbファイルの読み込みが済んだら。そのままGOコマンドで戻るとソースエリアをクリアされて消えるので、VSETで0x9003(GAME09のホットスタート番地)を設定してGOコマンドで戻ります。0と打ってリスト表示を確認して、#=1で実行。適当に数回ループさせて CTRL+D で コマンドプロンプトに戻ります。CTRL+CだとGAMEインタプリタに戻ります。次にLOADでsieve.gb lifegame.gb othello.gb と読み込んでは実行の流れを繰り返してます。CTRL+D は キー入力部で判読してるので 数値入力待ちのときに打てば強制的にプログラムを終了してコマンドプロンプトに戻ってこれます。GAMEインタプリタでの動作の後は同じものをコンパイルしたオブジ...

SBC6809モドキを作ろうとしたら、MZ-6809が出来ていた件

 これまでも、何度かPIC32を使ってMZ-80を再現するのとか挑んできたんですがPCGや320x200のグラフィック機能とか再現したりも、ただ8253周りの動作が怪しく 実機だと音が出るところで音が出ないとか在ったりで 現状保留中。しかも画面出力がコンポジット出力なのでその辺の改善も含めてVGAで出せないかと思案中に こんなモノを発見。       VGA出力のあるPIC32のduinomiteってのも持ってはいるんだが、これも いずれはMZ-80モドキにする前提で保留中。 で、これで何がやりたいかと言うと SBC6809の上位互換マイコンでも作ろうかと fabglなどを入れなくとも、arduino-ESP32としてだけでも、シリアル端末接続で SDカードの利用も可能で 先々fabglも組み合わせれば VGAでグラ表示もできるし、単音だが音も出せる。PS2キーボードやマウスも使える。ESP32のタイマーで6809にタイマー割り込みをかけて疑似時計モドキの機能も載せれる。ヘッドセット用に開けてあるピンはGPIOなので 使い方によってはLEDチカチカもできるかも? で、いざ6809エミュレータを誰か作ってるだろうと探してみたら 一人しかいないw 試しに入れてみたんだが、作者謹製のモニタ機能が6809コア部分にまで食い込んでいてシンプルなSBC6809の再現に激しく邪魔になる。そりゃバグ取りとかには重宝するかもしれないけど、棲み分けできるならしておきたいなと思うわけでして。そこでPC用の6809エミュレーターで端末動作前提のソースファイル構成がなるべく単純なものを探して行き着いたのが virtual-multicomp  Z80,6502,6809の複合エミュだがそれぞれ独立しているので 3つのエミュレータが一つに入ったお徳用パックみたいなものだ。しかも 6809用のフォルダ以下の部分だけで独立してビルドできるし必要なファイルも整理すると6809本体部、ヘッダ、端末処理部の3つで済む。   最初に6809部の動きとUARTの入出力を組み込んで BASICROMを 組み込んで 動作することが確認が取れたので、そこからアレコレ試行錯誤というドロ沼での悪あがきが始まる。       ...

前回の補足説明

現在使用しているCPMエミュレーターは2種類 一つは、 https://github.com/jhallen/cpm から cpm を紹介します。 最後の更新から3年経過してますが、それでも まだ新しい部類の方です。 $ ./cpm #### で linuxのカレントディレクトリにあるCPMコマンドを直接起動して端末画面上で動作させることが出来ます。 $ ./cpm だけの場合は、linuxのカレントディレクトリを cpmの A> として扱います。 これは、BDOSエミュレーション機能によるものだそうです。 難点は、tek4010のコードを素通しできないので、一部改変が必要なことと。 BDOSエミュレーション機能のもとではhi-tech-Cがエラー出して、利用できません。 BDOSエミュレーション機能を切って、用意されたディスクイメージ上に hi-tech-Cの諸々をコピーしてやれば使えるやもしれませんが、 そこまでの手間を掛けるのも如何なものかと思われるので試すことすらしていません。 tek4010対応 改変版のリンクは https://www.4shared.com/s/flRE-X7-pfa 二つ目は、 https://github.com/serge-404/CPM32 から 「CP/M-80 program EXEcutor for LINUX」を紹介します。 こちらは、先の「cpm」と同じようですが A>のような コマンドプロンプトモードはありません。 linuxのシェル プロンプトから、カレントディレクトリにあるcpmコマンド 拡張子 COMかCPM のファイルを実行します。 難点は、tek4010のコードを素通しできないので、一部改変が必要なことと。 こちらではhi-tech-Cでのコンパイルはできるのですが、 逆にMBASICがBDOS・BIOSの機能の一部が対応してないとエラーで動作しない。 C言語より当時メジャーだったBASICが動かないのはかなり痛い問題なんだが この問題は、既に作者のもとに報告されているので そう遠くなく改善されると期待する。 あと、動作異常でターミナルに戻ってくるとターミナルの表示が乱れる場合は $ stty saneで解消されるらしい。 tek4010対応 改変版のリンクは https://www.4sh...

テクトロニクス グラフィックターミナルエミュレータ tek4010

大昔のメインフレームとかには、出力装置はプリンタぐらいしかなく。シリアル接続の端末の画面に出すのは、一時的な作業状況程度の文字情報のみだった。記憶装置としては紙や磁気のテープやハードドライブがついてる程度かな。音楽も演奏できないし、3DグラフィックスをリアルタイムでFPSいくらでとかありえない世界だった。そんな中でもゲームを作ってやってた連中がいた。文字だけで構成されたログーとかのRPGやスタートレックなんかが有名だが、アステロイドのようなワイヤーフレームグラフィックを使ったゲームをやっていた連中もいる。そこで使われたのがテクトロニクスのTEK4010シリーズの端末。純粋にコンピュータからシリアル経由で送られてくるテキストデータを利用して、画面上にプロッタのような描画をこなす。WindowsだとTeratermにこれの機能が組み込まれてるので普通に使える。実はlinuxでもXtermに「-t」オプションで この機能が内蔵されてる。が 残念なことにfedora40辺りから Xterm -t で起動しても即落ちして全く使えない状態になってる。Xtem自体が永らく更新が滞ってるらしく。X11のサーバーなどの更新に追随できてないようだ。 で、このTek4010の有り難いのは、グラフィック機能のないワンボードマイコンにシリアル接続さえできれば、計算結果のグラフ程度なら描画させることができる。流石にインベーダーゲームとかは無理っぽいけど、昔あった「ミステリーハウス」的なゲームならやる気が有ればできるかも? と、前置きはこれくらいで Z80-MBC2のCPM上で動作する グラフ描画プログラムの出力をTek4010エミュで受けた時の動きの動画を     MBC2から送られたデータで、円とひし形、最後に3Dハットの点画を描画します。 そのあと、GAME-CCのMAZEを動作させてみましたが、グラフモードだとANSIやVTのエスケープシーケンス受け付けないので、画面が崩れてダメでした。   そこで改めて、通常端末でのGAME-CCのMAZEの動作動画を以下に   以前、あげた動画と同じ内容ですがこちらは Z80 実機 8Mhz動作、USBシリアル115200 での接続状態での動作です。 画面だけで、音もBGMも解説も何もない動画です。  ...

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