見出し画像

Tang Nano 9K で Apple II を再現する(9)拡張スロット

第六章 The 6502 and System Bus

回路図 C-11 を peripheral_io.sv として実装します。

`default_nettype none

module peripheral_io(
    input wire [15:0] ad,
    input wire ph0,
    input wire f12_15,
    output wire h12_15,
    output wire [7:0] iosel_n,
    output wire [7:0] devsel_n
);

// H2:74LS138
logic [7:0] h2_z_n;

assign h2_z_n[0] = (!h12_15 & !ph0) ? (ad[4] | ad[5] | ad[6]) : 1'b1;
assign h2_z_n[1] = (!h12_15 & !ph0) ? (!ad[4] | ad[5] | ad[6]) : 1'b1;
assign h2_z_n[2] = (!h12_15 & !ph0) ? (ad[4] | !ad[5] | ad[6]) : 1'b1;
assign h2_z_n[3] = (!h12_15 & !ph0) ? (!ad[4] | !ad[5] | ad[6]) : 1'b1;
assign h2_z_n[4] = (!h12_15 & !ph0) ? (ad[4] | ad[5] | !ad[6]) : 1'b1;
assign h2_z_n[5] = (!h12_15 & !ph0) ? (!ad[4] | ad[5] | !ad[6]) : 1'b1;
assign h2_z_n[6] = (!h12_15 & !ph0) ? (ad[4] | !ad[5] | !ad[6]) : 1'b1;
assign h2_z_n[7] = (!h12_15 & !ph0) ? (!ad[4] | !ad[5] | !ad[6]) : 1'b1;

assign devsel_n = h2_z_n;

// H12:74LS138
logic [7:0] h12_z_n;

assign h12_z_n[0] = !f12_15 ? (ad[8] | ad[9] | ad[10]) : 1'b1;
assign h12_z_n[1] = !f12_15 ? (!ad[8] | ad[9] | ad[10]) : 1'b1;
assign h12_z_n[2] = !f12_15 ? (ad[8] | !ad[9] | ad[10]) : 1'b1;
assign h12_z_n[3] = !f12_15 ? (!ad[8] | !ad[9] | ad[10]) : 1'b1;
assign h12_z_n[4] = !f12_15 ? (ad[8] | ad[9] | !ad[10]) : 1'b1;
assign h12_z_n[5] = !f12_15 ? (!ad[8] | ad[9] | !ad[10]) : 1'b1;
assign h12_z_n[6] = !f12_15 ? (ad[8] | !ad[9] | !ad[10]) : 1'b1;
assign h12_z_n[7] = !f12_15 ? (!ad[8] | !ad[9] | !ad[10]) : 1'b1;
assign h12_15 = h12_z_n[0];

assign iosel_n = h12_z_n;

endmodule

`default_nettype wire

拡張スロットへのアクセスの様子を観察してみます。
下図は、$C600 にデータを書き込んでいるところです。

参考文献


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