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 にデータを書き込んでいるところです。
参考文献
この記事が気に入ったらサポートをしてみませんか?