aki_iic’s blog

己の欲せざる処人に施す事無かれ、狂人の真似するは即ち狂人なり

トラブルはやってる人間のレベルに応じて起きる(その2)

 トラブルはやってる人間のレベルに〜の続き。

aki-iic.hatenablog.com

 と言っても#2号機は部品は集めたが手つかず(気力が・・・)で#1のA10とA11がくっついた(いや私のバグですが)条件、つまりは1KBの制限でターゲットのプログラムで何とかメモリリード/ライトと実行ぐらい出来ないものかと思案して作ったのがこれ↓

m68030_v0 tool v0.01(2025/05/09)

 何とも質素な画面で出来ることは画面下段にある、

・表示:所謂メモリダンプ、アドレスから256バイトを表示(上図のとおり)

・実行:アドレスからサブルーチン形式でプログラム呼び出し(実行)

・書込:アドレスにパラメタの値を書き込む

・終了:tool終了

 な代物です。使用言語はPython3でTkEasyGUI(PySimpleGUI)でUI部分を頼れるので90行程度のPython3のプログラムです。ターゲット側は前回試みたアセンブラで書いたメモリダンプのプログラムに上記機能の為のコマンドを1バイト追加した様なアセンブラプログラム↓

t3b.asm(抜粋)

 21世紀のご時世に68000アセンブラも無いでしょうからコマンド部分を少々。でコードサイズは偶然ですが256byte(0x00000000〜0x000000ff)に収まっております。実は上記のメモリダンプ画面がそのプログラム全て(=256バイト)でありました。

 このサイズで済んだのはFT245のおかげでバイナリでやり取りするからコード変換も不要で実はワークも無く68030のレジスタで済ませております(いや、そこまで考えなかっただけですが)。

 次は実行ですが jsr (a1) するだけ。

go cmd

 まあ、ステータスの実行しました・・・と表示するだけですが。

 最後は書込

memory write cmd

 アドレスのメモリにパラメタの値を書き込む、それだけ。

 とはいえこれでもメモリのリード/ライト/プログラム実行が曲りなりにも出来るので取り敢えずこれで進みます。

 TkEasyGUIはPySimpleGUIが有償化されたので日本人の開発者の方がMITライセンスで互換のGUIフレームワークを提供して下さったものです(感謝)。

 

 開発者が書かれた本がこれで久々に紙の本を購入したのですが読み応えがあるというか・・・結局PySimpleGUIで作った小さなプログラム(mp3再生)と昔Tkinterで作ったプログラムを参照しつつ(思い出しつつ)、Gemini2.0を知恵袋として書きました。

 もうGemini2.0(今後は2.5 or later)無しでは生きていけない私:)

 

20250511 06:53更新:折角68030使ってるのだからi-cacheを使ってみようという事でCACRのIE(bit0)をonにしてみました↓

aslで特権命令を使う場合はsupmode onにしないと警告が出る

 CACRはmovec(特権命令)でアクセスするのでリスト上のsupmode on疑似命令を記述しないとアセンブル時に警告が出る様です。i-chacheをonしてるのはリストの26〜28行目。今回はd-cacheはonにしません。僅か256byte(単位間違ってません。256バイトです:)でも今回は254byte(現在)なのでコードの多くはi-cacheに収まる筈。

m68030_v0 i-cache on (CACR.EI(bit0)=on)

 /asがassertされない期間はi-cache内の命令実行と推測。psdのpb7(LED)とpbin(FT245のrxf,txe)とFT245の各i/oをアクセスとram test領域(今回は0x00044000から256byte)のwrite/readで/asがassertされている模様。

m68030_v0 tool v0.02(2025/05/10)

 tool(仮称)に、

・開始:アドレスから256byteを0x00,01,・・・0xffのパタンでwrite/readしデータコンペアを回数繰り返す(上図では10000回)。結果はステータス欄にOK/NG回数を表示。

この対応で90行→120行にコードが増えました(ちょこちょこ気分次第で追加するパタン:)

 

20250514 12:37追記:必要に迫られロード(ターゲットへのデータ転送)ボタン追加。

dram area zero write(longword) routine

 dram領域をlognword(32bit)で0x00000000を書く小さなサブルーチン。バイナリデータにするにはaslの場合はp2bin dram1等として .binファイルを生成します(今回は30バイト)。 .binファイルが出来たらそれをターゲットにロードする為に画面下のロードボタンを押下

ロードボタン押下でターゲットに送るバイナリファイルを選択

ファイル選択ダイヤログ

 ダイヤログが出るので選択。この辺のUIはTkEasyGUI(PySimpleGUI)が面倒見てくれるので大変楽です。選択するとアドレスの番地からロードされ、終了したらメッセージが表示されます↓

ターゲットへのロード終了

 ターゲットにロードされたプログラムは実行ボタンでアドレスの番地からサブルーチンとして実行されます。ここまででPython3で137行でTkEasyGUI(PySimpleGUI)の有り難みを痛感する次第。当方開発にはWing Personal(無償版ですね)を使用しておりますが個人的にはPyCharmより軽量で操作も単純な私の頭に合ってる様です:)

Wing Personal