ある程度の機能を持つモニタをCで書いて、
原始モニタを使って数回実機上でデバッグしました。
機能としては以下のメニューのようなものです
これをROM化したので原始モニタは用済となりました
>h
<<HELP>>
*** uPD702236R(V53)SBC monitor program V0.05 ***
D:dump_memory.
E:edit_memory.
F:fill_memory.
G:goto_user_program.
I:input_from_port.
O:output_to_port.
L:load_user_program.
H:display_this.
>
あとはホスト側でヘキサファイルを解析、バイナリデータに変換して
Lコマンドでターゲットに送りこむツールを作成し開発環境は完成です。
モニタ上で動作させるプログラムは2000h番地からロードさせるものとして
たとえば次のようなメイクファイルでビルドします
TARGET=test1
RAM=02000
all : $(TARGET).hex
$(TARGET).hex : cram.obj $(TARGET).obj v53lib.obj
lcc $(CFLAGS) -g -k -Fh -a -o $@ $# -k'-T $(RAM)' -lmathlib -ldoslib
$(TARGET).obj : $(TARGET).c
lcc $(CFLAGS) -c -o $@ $#
cramはRAM初期化などを含むスタートアップルーチン、
v53libはボード上の入出力などの自作のライブラリです。
コンパイラ付属の書式制御や算術関数ライブラリをリンクすれば
void main(void)
{
int deg;
double phi,x,y,z;
devini();
for(deg=0;deg<=360;deg++){
phi=deg*3.1415925/180;
x=sin(phi);y=cos(phi);z=tan(phi);
sprintf(buf,"sin(%3d)= %10g cos(%3d)= %10g tan(%3d)= %10g\n\r",deg,x,deg,y,deg,z);
putstr(buf);
}
}
とやれば、
sin( 0)= 0 cos( 0)= 1 tan( 0)= 0
sin( 1)= 0.0174524 cos( 1)= 0.999848 tan( 1)= 0.0174551
sin( 2)= 0.0348995 cos( 2)= 0.999391 tan( 2)= 0.0349208
sin( 3)= 0.052336 cos( 3)= 0.99863 tan( 3)= 0.0524078
:
:
:
みたいのも容易にできます