見出し画像

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


この記事が気に入ったらサポートをしてみませんか?