Z80カードのハード廻りはOKになったのでソフト作成の準備としてS1にデータをロードする環境を準備します。
現在私が使っている開発環境はCygwin上に作ったクロスアセンブラで、
m6809-as
Z88dk
を使用しています。
デバッガはS1エミュレータのデバッガなので完全なクロス開発環境です。
S1実機でのデバッグとS1エミュでデバッグでは使いやすさが全然違うのである程度エミュ上でデバッグしてからバイナリをS1実機にロードする方法で進める予定です。
S1のメモリへのロード方法は
①ディスクイメージを実イメージに書き戻す方法(DITT)
②シリアルポート経由で直接データを送る方法
が考えられますが、貴重なS1/30を使い始めるのはもう少しソフトが出来てからの方が良さそうなので、シリアルポート経由でメモリにデータをロードできるメモリローダを作ってみました。
ロード先の物理アドレスを指定する方法としてS1のモニタで設定してもいいのですが、
面倒なのでメモリローダ内に物理メモリの先頭番地を指定できるようにしてみました^^
そこで、このメモリローダをS1に入力しないといけないのですが、最初はダンプを入力するしかないので最小サイズになるまで整理・・^^
もう少し減らせる可能性もありそうですが、とりあえず204バイトになりました。
これならS1モニタのEコマンドでも楽々入力できます。
かなりのポンコツソフトですが一応使えるので晒しておきます
位置独立ではありません D000番地からロードして実行できます^^
使い方RS232Cでバイナリ通信できるターミナルと接続しN81で1200bpsにセットします。
S1モニタでバイナリを入力しD000から実行。
実行すると1が出るので物理アドレスの先頭番地を2桁で入力。
2が出ると先頭アドレスを4桁で入力。
3が出ると終了するデータ長を入力。
Rが出ると受信待ちになるので外部からバイナリを送り込む。
(このメモリローダは物理アドレスの先頭番地をインクリしないので最大でロードできるサイズは最大で4KBです)
とりあえず、これがあれば4KBまでのデータは自由にロードできるので、カセットにセーブしておきます。
メモリに自由にデータがロードできるようになったので、整理していないフルバージョンのメモリローダを転送してCMTに保存。
こちらは位置独立なので任意の番地からロード可能です。
こちらもかなりのポンコツプログラムですが晒してみます(アドバイス下さい^^)
使い方は。
①Physical Memory Top Address で物理メモリ先頭を入力。
②Receive Top Address で該当の4KBエリアの先頭番地を入力。
③Receive Length でロードしたいデータ長を入力。
④*** Receive Readyになったらデータ受信待ち。
⑤指定バイト数受信するかBREAKキーを押すことで *** Receive Completeになる。
例えば
Physical Memory Top Address = 00
Receive Top Address = 0010
Receive Length = 0020
だとマップ領域0が00で物理メモリ$00000から割当され、その$0010から$20バイト分データをロードします。
(系列はそのままFを使っています)
このメモリローダは最大4KBしか扱えないので4KB以上のロードはバイナリを分割して数回行う必要があります。
まぁ、私のような素人はこれでも十分役に立ちそうです^^
こんな感じでTeratermとの組み合わせが良さそう^^
そんなメモリローダ整備の記録・・・