リンク先ボードのメモリに読み書きができたので今度はそのボード上でプログラムの実行を指示する必要があります。
リセット後最初に受け取る制御コードが0x00のときはPOKE、0x01のときはPEEKでしたが1より大きい(2以上)ときは続くコードを制御コードの数だけMemStart(=0x8000070番地)からセットして先頭から実行するとあります
ということはブートのために転送できるプログラムは255byte以下に制限されてしまう・・となりそうですが本当に実行させたいユーザプログラムの本体はPOKEコマンドでボード上の任意のアドレスにあらかじめ転送しておき(メモリ上限までサイズは制限なし)、ブート用プログラムはユーザプログラムの先頭番地に飛ぶだけのものにしておけばOKそうです
具体的なメモリマップはこのようにしました。
先ず①DLLではPOKEコマンドを使ってtransputer2ボード上の外付けメモリの先頭番地0x00000000からユーザプログラムを転送しておきます。次に②BOOTで0x80000070番地から0x00000000番地にジャンプするコード列を転送、転送完了と同時に自動的にコード③JUMPが実行されてユーザプログラムの先頭に制御が移ります
もちろんユーザプログラムの格納場所をオンチップRAMにしておけば外付けRAMも必要なくなりCPUだけがびっしり並んだボードも実現できますが、プログラムが4kB以下に制限されることとリロケーションアドレスを0x00000000にしておけばROMモニタでロードするバイナリと共用できるメリットもあります
ブート処理を組み立てるためにまず「J 0x00000000」のコードをアセンブルしておきます。「0x27,0x2f,0x2f,0x2f,0x2f,0x2f,0x28,0x08」の8バイトのコードが得られました
一気に約2GBの空間を跳躍するのでオフセットが大きくなります