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

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書き込んでるのは、リセット直後はFIRQの割り込みパルスを無視させてるの解除するためのポートなんですが、今は機能してません。このポート自体 開放して無効にしてます。 実機のSBCに今回改良したBASIC9をROM焼きして動くかはまた後日やることにします。
 
で、動画の終わりくらいにちょろっと出てくるのが マンデルブロ図形くらいだと地味すぎるんで matrixの文字の雨 を BASICでできないかとやってみたわけです。 遅いBASICでは期待したほどスムーズじゃなかったので別動画に撮り直して5倍速に加工したものが 


BASIC9,ExBasROMに共通の内部仕様なんだが、PRINT文で一文字だけ出力しても即時に送られるわけではなく、改行コードが来るか、バッファが溢れるかで送出を始める仕様なようで、しかもその際に勝手に改行コードを付加しているようでエスケープシーケンスの塊を送ってる最中に間に勝手に改行コードなんて入れられると意味が違って解釈され画面が乱れてしまう。tek4010へのグラフ表示のときにも引っかかった問題で今回もハマってます。もともとラインプリンタとの共用ルーチンだった名残でこうなっているんだと思うんだが 深く掘り下げるのには 自分では能力不足だから諦めた。長話になってきたのでこの辺で切り上げる。この次の機会には、今回のエミュづくりで見付けた 自分のやらかしのバグの話やBASICに潜んでたバグについて書こうと思う。 

コメント

このブログの人気の投稿

screen コマンドでの コピーペースト転送の実現について

 以前、GAME言語のあれこれについての中で、GAME80ICなどでZ80-MBC2とのscreenコマンドでのシリアル接続中にソーステキストのコピーペースト転送ができない事に触れていたが、単に使ってる環境に依存した所謂「おまかん」なのだが、回避したければ、素直にwindowsで使うか 若しくは linuxでもwine上でteratermを使えば済む話ではある。だが、我が家に於いては普段使いにできるwindows機など無い。棚の奥を探せばwin7の入った古PCが有るとは思うがボードマイコンとの接続の為だけに引っ張り出してきたいとまでは思わない。そこで ふと考えるにteratermにあってscreenやcu,minicomにないものはと、teratermには、テキスト転送中に行単位、文字単位でミリセカンドのディレイを挟む設定がある。対してlinux系のシリアル接続コマンドにそういった類のモノを知らない(単に自分が知らないだけの可能性もある) 。そこで、duckduckgo検索のサービスである「Duck.AI」に聞いてみた。自分の思いついた革新的なアイデアは大概は先人が既に思いついてる当たり前過ぎるモノというのはいつもの事であっさりと解決策を教えてくれた。

一部の関西の人にしか通じないネタ

たぶん「30年モノ」くらいだと思う?  拡大 値札に注目! ちなみに、ATMEGA32へのファーム書込用のアダプタを作るのに使用。

GAME言語 あれこれ

 MZ-700用にSDカードからMZTファイルの読み書きが出来る基板を入手して以降、MZ用のインタープリタやコンパイラの打ち込みをやってた延長でZ80-MBC2上のCPMで動作するGAMEインタープリタとコンパイラをいくつか発見。GAME-MZは国会図書館のコピーサービスで当時のアスキー誌の記事を入手済で打ち込みMZT化は済んでいるが動作の確認はしてない。 CP/M-80で動作するGAME80言語を3点ほど紹介する。 まず、動作環境は実機としては8Mhz動作のZ80-MBC2にXMODEMでPCからのファイル転送 PC側はFedora40の端末から「screen」コマンドでの接続、比較用に同じくFedora40の端末上で動作するCPMエミュレータ2種類。エミュレータで動作確認がとれたモノを実機に転送して最終動作させてみる流れ。    skyriverさんのGameOnCpm80 端末のエミュレータ上ではコピーペーストによるソースの転送もできるが ファイル読み書き用のコマンドが組み込まれているので、なぜか実機の方ではコピペに転送が出来ないのでありがたい。コンパイラも組み込まれているのでインタプリタで実行確認後、コンパイルもできる。 難点は、コンパイルの際にソース格納アドレスやデータエリア、オブジェクト格納エリアの指定をする必要がある。GAME-MZでもコンパイルの際は普通に必要な事ではあるが、自分の頭の中でシステムのメモリマップを把握しておくのが意外と面倒くさい。 コンパイルで 出来たオブジェクトをCOMファイルにするのにDDTなんかの別ツールでメモリ上に残ってるデータをCOMファイルとして保存するしかない。 COMファイル化とかを視野に入れずインタープリト、コンパイル、実行だけなら使いやすくお薦め。   ファイル操作コマンド例 files ファイル一覧表示 :\\ *.g 拡張子 .g のファイルの表示      \\のみ、\\ *.* での表示は出ない模様(単に自分の使い方が悪いだけかも?)  save(¥>FileName)とload(¥<FileName) 詳細は https://piclabo.blog.ss-blog.jp/CPM80GameCompiler...