CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

モニタプログラム完成

ある程度の機能を持つモニタを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



みたいのも容易にできます