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

投稿

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

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

だいぶ古いけど、 元記事は 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にエラーも出さずにそのままスルーで出力してるから。同様に存在しない行番号を呼び出す文に出会っても何もしないので 大きな意味では不具合のもとになる。その辺は各自の判断で手を加えることを薦める。