A2PDP11 (12) バイト書き込み
バイト書き込みを試してみます。
前回の HDL コードでは、RAM からの読み出しデータを DAL に出力したままになることがあったので、下記のように修正しました。
always_ff@(posedge clk) begin
if (mbs == BS_MEM) begin
ram_addr <= mdal;
if ((maio[3:2] == 2'b10) || (maio == REQUEST_READ)) begin
miss_n <= (!ale_n && !bufctl_n) ? 1'b0 : 1'b1;
ram_read <= (!ale_n && !bufctl_n) ? 1'b1 : 1'b0;
mem_out <= (ale_n && !bufctl_n) ? ram_rdata : 16'bz;
dv <= !sctl_n;
end
end
end
R0 の下位バイトを (R1) に書き込むプログラムを実行してみます。
1 .ASECT
2 000000 .=0
3 000000 110011 MOVB R0,(R1)
4 000002 000000 HALT
5 .END
00000 からプログラムを書き込み、R0 に書き込みデータ 111222 を設定し、R1 に書き込みアドレス 000004 を設定します。
実行すると、000004 番地に R0 の下位バイト 222 が書き込まれます。
R1 を 000005 に変更し、実行すると、000005 番地(000004 番地の上位バイト)に、R0 の上位バイト 111 が書き込まれます。
実行時の信号を観察します。
赤マーカー部で、000000 番地の命令 110011 が読み込まれます。
白マーカー部で、000002 番地の命令 000000 が先読みされます。
オレンジマーカー部で、000004 番地にデータ 222 が書き込まれます。
その後、000004 番地の命令が先読みされ(実行はされません)、続いて、GP CODE 000 が生成されます。
参考文献
DCJ11 Microprocessor User's Guide, 6.3.3 BYTE INSTRUCTION, 1983
この記事が気に入ったらサポートをしてみませんか?