ROMモニタの機能でRAM上にコードを転送できますが、このときベタのバイナリデータを送っています。
先頭にデータサイズがセットされていたり、終端コードがあるわけではないので
ターミナルからファイルを転送すると、最後の1バイトを送り終わった後永久待ちになっていました。
ここでリセットボタンを押してモニタに戻ればそれで済むのですが、ここは少し手直し。
先頭にデータサイズがセットされていたり、終端コードがあるわけではないので
ターミナルからファイルを転送すると、最後の1バイトを送り終わった後永久待ちになっていました。
ここでリセットボタンを押してモニタに戻ればそれで済むのですが、ここは少し手直し。
int dllcom(int flg,unsigned char *data) { unsigned int t; t=0; while(1){ if(flg > 2 && t++ > 30000) return -1; /* リトライカウンタ */ outp(SIOBC,0x00); /* ステータスレジスタ SR0アタッチ */ if(cnv_tbl_in[inp(SIOBC)]&0x01){ /* 受信レディチェック */ break; /* 受信あり */ } }; *data = cnv_tbl_in[inp(SIOBD)] & 0xff; /* 受信バッファ読出し */ return 0; }
シリアル入力で受信レディを監視していますが、ここにリトライカウンタをおいて
次のキャラクタがなかなか来ないと(通常の1キャラクタ間時間以上)タイムアウトして抜けるようにしただけです。
ただし初めの1バイトはスタートするタイミングが手動のためチェックしないようフラグで制御します。
(LOADコマンドを入力してから転送開始のボタンを押すまでの間にタイムアウトしてしまうので)
次のキャラクタがなかなか来ないと(通常の1キャラクタ間時間以上)タイムアウトして抜けるようにしただけです。
ただし初めの1バイトはスタートするタイミングが手動のためチェックしないようフラグで制御します。
(LOADコマンドを入力してから転送開始のボタンを押すまでの間にタイムアウトしてしまうので)

見た目はダウンロード終了時にコマンドプロンプトに戻るだけですが、転送バイト数表示を付け加えました。
ここら辺のROMモニタの修正はICSPが可能になったので楽です。