mirror of
https://github.com/alangarf/apple-one.git
synced 2026-10-22 02:02:34 +00:00
Added key_switch to choose keyboard type
This commit is contained in:
1 parent
67b0c26e31
commit
a0a2629169
13 files changed
+985
-947
No files matched your search
@@ -8,3 +8,6 @@ synlog.tcl
|
||||
*_tb
|
||||
*.vcd
|
||||
build
|
||||
gwsynthesis
|
||||
pnr
|
||||
temp
|
||||
+263
-246
@@ -23,282 +23,299 @@
|
||||
//
|
||||
|
||||
module apple1 #(
|
||||
parameter BASIC_FILENAME = "../../../roms/basic.hex",
|
||||
parameter FONT_ROM_FILENAME = "../../../roms/vga_font_bitreversed.hex",
|
||||
parameter RAM_FILENAME = "../../../roms/ram.hex",
|
||||
parameter VRAM_FILENAME = "../../../roms/vga_vram.bin",
|
||||
parameter WOZMON_ROM_FILENAME = "../../../roms/wozmon.hex"
|
||||
parameter string BASIC_FILENAME = "../../../roms/basic.hex",
|
||||
parameter string FONT_ROM_FILENAME = "../../../roms/vga_font_bitreversed.hex",
|
||||
parameter string RAM_FILENAME = "../../../roms/ram.hex",
|
||||
parameter string VRAM_FILENAME = "../../../roms/vga_vram.bin",
|
||||
parameter string WOZMON_ROM_FILENAME = "../../../roms/wozmon.hex"
|
||||
) (
|
||||
input clk25, // 25 MHz master clock
|
||||
input rst_n, // active low synchronous reset (needed for simulation)
|
||||
input clk25, // 25 MHz master clock
|
||||
input rst_n, // active low synchronous reset (needed for simulation)
|
||||
|
||||
// I/O interface to computer
|
||||
input uart_rx, // asynchronous serial data input from computer
|
||||
output uart_tx, // asynchronous serial data output to computer
|
||||
output uart_cts, // clear to send flag to computer
|
||||
input uart_rx, // asynchronous serial data input from computer
|
||||
output uart_tx, // asynchronous serial data output to computer
|
||||
output uart_cts, // clear to send flag to computer
|
||||
|
||||
// I/O interface to PS/2 keyboard
|
||||
input ps2_clk, // PS/2 keyboard serial clock input
|
||||
input ps2_din, // PS/2 keyboard serial data input
|
||||
input ps2_select, // Input to select the PS/2 keyboard instead of the UART
|
||||
input ps2_clk, // PS/2 keyboard serial clock input
|
||||
input ps2_din, // PS/2 keyboard serial data input
|
||||
|
||||
// I/O interface to USB keyboard
|
||||
input usb_clk, // 12MHz USB clock
|
||||
inout usb_dm, // USB data minus signal
|
||||
inout usb_dp, // USB data plus signal
|
||||
output usb_led_err, // USB connection error LED
|
||||
output usb_led_act, // USB activity LED
|
||||
input usb_clk, // 12MHz USB clock
|
||||
inout usb_dm, // USB data minus signal
|
||||
inout usb_dp, // USB data plus signal
|
||||
output usb_led_err, // USB connection error LED
|
||||
output usb_led_act, // USB activity LED
|
||||
|
||||
input [1:0] key_select, // Select the Apple 1 keyboard input
|
||||
// 2'b00 - UART RX
|
||||
// 2'b01 - USB Keyboard
|
||||
// 2'b10 - P/S Keyboard
|
||||
// 2'b11 - None / Other
|
||||
|
||||
// Outputs to VGA display
|
||||
output vga_h_sync, // hozizontal VGA sync pulse
|
||||
output vga_v_sync, // vertical VGA sync pulse
|
||||
output vga_red, // red VGA signal
|
||||
output vga_grn, // green VGA signal
|
||||
output vga_blu, // blue VGA signal
|
||||
input vga_cls, // clear screen button
|
||||
output vga_de, // display enable
|
||||
output vga_h_sync, // hozizontal VGA sync pulse
|
||||
output vga_v_sync, // vertical VGA sync pulse
|
||||
output vga_red, // red VGA signal
|
||||
output vga_grn, // green VGA signal
|
||||
output vga_blu, // blue VGA signal
|
||||
input vga_cls, // clear screen button
|
||||
output vga_de, // display enable
|
||||
|
||||
// Debugging ports
|
||||
output [15:0] pc_monitor // spy for program counter / debugging
|
||||
output [15:0] pc_monitor // spy for program counter / debugging
|
||||
);
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Registers and Wires
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Registers and Wires
|
||||
|
||||
wire [15:0] ab;
|
||||
wire [7:0] dbi;
|
||||
wire [7:0] dbo;
|
||||
wire we;
|
||||
wire [15:0] ab;
|
||||
wire [7:0] dbi;
|
||||
wire [7:0] dbo;
|
||||
wire we;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Clocks
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Clocks
|
||||
|
||||
wire cpu_clken;
|
||||
clock my_clock(
|
||||
.clk25(clk25),
|
||||
.rst_n(rst_n),
|
||||
.cpu_clken(cpu_clken)
|
||||
);
|
||||
wire cpu_clken;
|
||||
clock my_clock (
|
||||
.clk25(clk25),
|
||||
.rst_n(rst_n),
|
||||
.cpu_clken(cpu_clken)
|
||||
);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Reset
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Reset
|
||||
|
||||
wire rst;
|
||||
pwr_reset my_reset(
|
||||
.clk25(clk25),
|
||||
.rst_n(rst_n),
|
||||
.enable(cpu_clken),
|
||||
.rst(rst)
|
||||
);
|
||||
wire rst;
|
||||
pwr_reset my_reset (
|
||||
.clk25(clk25),
|
||||
.rst_n(rst_n),
|
||||
.enable(cpu_clken),
|
||||
.rst(rst)
|
||||
);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// 6502
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// 6502
|
||||
|
||||
arlet_6502 my_cpu(
|
||||
.clk (clk25),
|
||||
.enable (cpu_clken),
|
||||
.rst (rst),
|
||||
.ab (ab),
|
||||
.dbi (dbi),
|
||||
.dbo (dbo),
|
||||
.we (we),
|
||||
.irq_n (1'b1),
|
||||
.nmi_n (1'b1),
|
||||
.ready (cpu_clken),
|
||||
.pc_monitor (pc_monitor)
|
||||
);
|
||||
arlet_6502 my_cpu (
|
||||
.clk (clk25),
|
||||
.enable (cpu_clken),
|
||||
.rst (rst),
|
||||
.ab (ab),
|
||||
.dbi (dbi),
|
||||
.dbo (dbo),
|
||||
.we (we),
|
||||
.irq_n (1'b1),
|
||||
.nmi_n (1'b1),
|
||||
.ready (cpu_clken),
|
||||
.pc_monitor(pc_monitor)
|
||||
);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Address Decoding
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Address Decoding
|
||||
|
||||
wire ram_cs = (ab[15:13] == 3'b000); // 0x0000 -> 0x1FFF
|
||||
reg ram_cs, vga_cs, vga_mode_cs, rx_cs, tx_cs, uart_cs, usb_cs, ps2kb_cs, basic_cs, rom_cs;
|
||||
|
||||
// font mode, background and foreground colour
|
||||
wire vga_mode_cs = (ab[15:2] == 14'b11000000000000); // 0xC000 -> 0xC003
|
||||
always @(posedge clk25 or posedge rst) begin
|
||||
if (rst) begin
|
||||
ram_cs <= 1'd0;
|
||||
vga_mode_cs <= 1'd0;
|
||||
rx_cs <= 1'd0;
|
||||
tx_cs <= 1'd0;
|
||||
uart_cs <= 1'd0;
|
||||
usb_cs <= 1'd0;
|
||||
ps2kb_cs <= 1'd0;
|
||||
basic_cs <= 1'd0;
|
||||
rom_cs <= 1'd0;
|
||||
end else begin
|
||||
// RAM selection
|
||||
ram_cs <= (ab[15:13] == 3'b000); // 0x0000 -> 0x1FFF
|
||||
|
||||
// RX: Either keyboard or UART input
|
||||
// TX: Always VGA and UART output
|
||||
wire rx_cs = (ab[15:1] == 15'b110100000001000); // 0xD010 -> 0xD011
|
||||
wire tx_cs = (ab[15:1] == 15'b110100000001001); // 0xD012 -> 0xD013
|
||||
// font mode, background and foreground colour
|
||||
vga_mode_cs <= (ab[15:2] == 14'b11000000000000); // 0xC000 -> 0xC003
|
||||
|
||||
// select UART on transmit but only receive when PS/2 is not selected.
|
||||
wire uart_cs = tx_cs | ((~ps2_select) & rx_cs);
|
||||
// RX: Either keyboard or UART input
|
||||
// TX: Always VGA and UART output
|
||||
rx_cs <= (ab[15:1] == 15'b110100000001000); // 0xD010 -> 0xD011
|
||||
tx_cs <= (ab[15:1] == 15'b110100000001001); // 0xD012 -> 0xD013
|
||||
|
||||
// select PS/2 keyboard input when selected.
|
||||
wire ps2kb_cs = ps2_select & rx_cs;
|
||||
// select UART on transmit and only receive if key_select is UART
|
||||
uart_cs <= tx_cs | (rx_cs & (key_select == 2'b00));
|
||||
|
||||
// select PS/2 keyboard input when selected.
|
||||
wire usb_cs = rx_cs;
|
||||
// select USB keyboard input when selected.
|
||||
usb_cs <= rx_cs & (key_select == 2'b01);
|
||||
|
||||
// VGA always get characters when they are sent.
|
||||
wire vga_cs = tx_cs;
|
||||
// select PS/2 keyboard input when selected.
|
||||
ps2kb_cs <= rx_cs & (key_select == 2'b10);
|
||||
|
||||
wire basic_cs = (ab[15:12] == 4'b1110); // 0xE000 -> 0xEFFF
|
||||
wire rom_cs = (ab[15:8] == 8'b11111111); // 0xFF00 -> 0xFFFF
|
||||
// VGA always get characters when they are sent.
|
||||
vga_cs <= tx_cs;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// RAM and ROM
|
||||
|
||||
// RAM
|
||||
wire [7:0] ram_dout;
|
||||
ram #(
|
||||
.RAM_FILENAME (RAM_FILENAME)
|
||||
) my_ram(
|
||||
.clk(clk25),
|
||||
.address(ab[12:0]),
|
||||
.w_en(we & ram_cs),
|
||||
.din(dbo),
|
||||
.dout(ram_dout)
|
||||
);
|
||||
|
||||
// WozMon ROM
|
||||
wire [7:0] rom_dout;
|
||||
rom_wozmon #(
|
||||
.WOZMON_ROM_FILENAME (WOZMON_ROM_FILENAME)
|
||||
) my_rom_wozmon(
|
||||
.clk(clk25),
|
||||
.address(ab[7:0]),
|
||||
.dout(rom_dout)
|
||||
);
|
||||
|
||||
// Basic ROM
|
||||
wire [7:0] basic_dout;
|
||||
rom_basic #(
|
||||
.BASIC_FILENAME (BASIC_FILENAME)
|
||||
) my_rom_basic(
|
||||
.clk(clk25),
|
||||
.address(ab[11:0]),
|
||||
.dout(basic_dout)
|
||||
);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Peripherals
|
||||
|
||||
// UART
|
||||
wire [7:0] uart_dout;
|
||||
uart #(
|
||||
`ifdef SIM
|
||||
100, 10, 2 // for simulation don't need real baud rates
|
||||
`else
|
||||
25000000, 115200, 8 // 25MHz, 115200 baud, 8 times RX oversampling
|
||||
`endif
|
||||
) my_uart(
|
||||
.clk(clk25),
|
||||
.enable(uart_cs & cpu_clken),
|
||||
.rst(rst),
|
||||
|
||||
.uart_rx(uart_rx),
|
||||
.uart_tx(uart_tx),
|
||||
.uart_cts(uart_cts),
|
||||
|
||||
.address(ab[1:0]), // for uart
|
||||
.w_en(we & uart_cs),
|
||||
.din(dbo),
|
||||
.dout(uart_dout)
|
||||
);
|
||||
|
||||
// USB Keyboard
|
||||
wire [7:0] usb_dout;
|
||||
usb_keyboard my_usb_keyboard(
|
||||
.usb_clk(usb_clk),
|
||||
.rst(rst),
|
||||
.usb_dm(usb_dm),
|
||||
.usb_dp(usb_dp),
|
||||
.cs(usb_cs),
|
||||
.address(ab[0]),
|
||||
.dout(usb_dout),
|
||||
.led_connerr(usb_led_err),
|
||||
.led_activity(usb_led_act)
|
||||
);
|
||||
|
||||
// PS/2 keyboard interface
|
||||
wire [7:0] ps2_dout;
|
||||
ps2keyboard my_ps2_keyboard(
|
||||
.clk25(clk25),
|
||||
.rst(rst),
|
||||
.key_clk(ps2_clk),
|
||||
.key_din(ps2_din),
|
||||
.cs(ps2kb_cs),
|
||||
.address(ab[0]),
|
||||
.dout(ps2_dout)
|
||||
);
|
||||
|
||||
// VGA Display interface
|
||||
reg [2:0] fg_colour;
|
||||
reg [2:0] bg_colour;
|
||||
reg [1:0] font_mode;
|
||||
reg [7:0] vga_mode_dout;
|
||||
|
||||
vga #(
|
||||
.VRAM_FILENAME (VRAM_FILENAME),
|
||||
.FONT_ROM_FILENAME (FONT_ROM_FILENAME)
|
||||
) my_vga(
|
||||
.clk25(clk25),
|
||||
.enable(vga_cs & cpu_clken),
|
||||
.rst(rst),
|
||||
|
||||
.vga_h_sync(vga_h_sync),
|
||||
.vga_v_sync(vga_v_sync),
|
||||
.vga_red(vga_red),
|
||||
.vga_grn(vga_grn),
|
||||
.vga_blu(vga_blu),
|
||||
.vga_de(vga_de),
|
||||
|
||||
.address(ab[0]),
|
||||
.w_en(we & vga_cs),
|
||||
.din(dbo),
|
||||
.mode(font_mode),
|
||||
.fg_colour(fg_colour),
|
||||
.bg_colour(bg_colour),
|
||||
.clr_screen(vga_cls)
|
||||
);
|
||||
|
||||
// Handle font mode and foreground and background
|
||||
// colours. This so isn't Apple One authentic, but
|
||||
// it can't hurt to have some fun. :D
|
||||
always @(posedge clk25 or posedge rst)
|
||||
begin
|
||||
if (rst)
|
||||
begin
|
||||
font_mode <= 2'b0;
|
||||
fg_colour <= 3'd7;
|
||||
bg_colour <= 3'd0;
|
||||
end
|
||||
else
|
||||
begin
|
||||
case (ab[1:0])
|
||||
2'b00:
|
||||
begin
|
||||
vga_mode_dout = {6'b0, font_mode};
|
||||
if (vga_mode_cs & we & cpu_clken)
|
||||
font_mode <= dbo[1:0];
|
||||
end
|
||||
2'b01:
|
||||
begin
|
||||
vga_mode_dout = {5'b0, fg_colour};
|
||||
if (vga_mode_cs & we & cpu_clken)
|
||||
fg_colour <= dbo[2:0];
|
||||
end
|
||||
2'b10:
|
||||
begin
|
||||
vga_mode_dout = {5'b0, bg_colour};
|
||||
if (vga_mode_cs & we & cpu_clken)
|
||||
bg_colour <= dbo[2:0];
|
||||
end
|
||||
default:
|
||||
vga_mode_dout = 8'b0;
|
||||
endcase
|
||||
end
|
||||
// ROM selection
|
||||
basic_cs <= (ab[15:12] == 4'b1110); // 0xE000 -> 0xEFFF
|
||||
rom_cs <= (ab[15:8] == 8'b11111111); // 0xFF00 -> 0xFFFF
|
||||
end
|
||||
end
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// CPU Data In MUX
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// RAM and ROM
|
||||
|
||||
// link up chip selected device to cpu input
|
||||
assign dbi = ram_cs ? ram_dout :
|
||||
rom_cs ? rom_dout :
|
||||
basic_cs ? basic_dout :
|
||||
uart_cs ? uart_dout :
|
||||
ps2kb_cs ? ps2_dout :
|
||||
vga_mode_cs ? vga_mode_dout :
|
||||
8'hFF;
|
||||
// RAM
|
||||
wire [7:0] ram_dout;
|
||||
ram #(
|
||||
.RAM_FILENAME(RAM_FILENAME)
|
||||
) my_ram (
|
||||
.clk(clk25),
|
||||
.address(ab[12:0]),
|
||||
.w_en(we & ram_cs),
|
||||
.din(dbo),
|
||||
.dout(ram_dout)
|
||||
);
|
||||
|
||||
// WozMon ROM
|
||||
wire [7:0] rom_dout;
|
||||
rom_wozmon #(
|
||||
.WOZMON_ROM_FILENAME(WOZMON_ROM_FILENAME)
|
||||
) my_rom_wozmon (
|
||||
.clk(clk25),
|
||||
.address(ab[7:0]),
|
||||
.dout(rom_dout)
|
||||
);
|
||||
|
||||
// Basic ROM
|
||||
wire [7:0] basic_dout;
|
||||
rom_basic #(
|
||||
.BASIC_FILENAME(BASIC_FILENAME)
|
||||
) my_rom_basic (
|
||||
.clk(clk25),
|
||||
.address(ab[11:0]),
|
||||
.dout(basic_dout)
|
||||
);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Peripherals
|
||||
|
||||
// UART
|
||||
wire [7:0] uart_dout;
|
||||
uart #(
|
||||
`ifdef SIM
|
||||
.ClkFrequency(100),
|
||||
.Baud(10),
|
||||
.Oversampling(2) // for simulation don't need real baud rates
|
||||
`else
|
||||
.ClkFrequency(25000000),
|
||||
.Baud(115200),
|
||||
.Oversampling(8) // 25MHz, 115200 baud, 8 times RX oversampling
|
||||
`endif
|
||||
) my_uart (
|
||||
.clk(clk25),
|
||||
.enable(uart_cs & cpu_clken),
|
||||
.rst(rst),
|
||||
|
||||
.uart_rx (uart_rx),
|
||||
.uart_tx (uart_tx),
|
||||
.uart_cts(uart_cts),
|
||||
|
||||
.address(ab[1:0]), // for uart
|
||||
.w_en (we & uart_cs),
|
||||
.din (dbo),
|
||||
.dout (uart_dout)
|
||||
);
|
||||
|
||||
// USB Keyboard
|
||||
wire [7:0] usb_dout;
|
||||
usb_keyboard my_usb_keyboard (
|
||||
.usb_clk(usb_clk),
|
||||
.rst(rst),
|
||||
.usb_dm(usb_dm),
|
||||
.usb_dp(usb_dp),
|
||||
.cs(usb_cs),
|
||||
.address(ab[0]),
|
||||
.dout(usb_dout),
|
||||
.led_connerr(usb_led_err),
|
||||
.led_activity(usb_led_act)
|
||||
);
|
||||
|
||||
// PS/2 keyboard interface
|
||||
wire [7:0] ps2_dout;
|
||||
ps2keyboard my_ps2_keyboard (
|
||||
.clk25(clk25),
|
||||
.rst(rst),
|
||||
.key_clk(ps2_clk),
|
||||
.key_din(ps2_din),
|
||||
.cs(ps2kb_cs),
|
||||
.address(ab[0]),
|
||||
.dout(ps2_dout)
|
||||
);
|
||||
|
||||
// VGA Display interface
|
||||
reg [2:0] fg_colour;
|
||||
reg [2:0] bg_colour;
|
||||
reg [1:0] font_mode;
|
||||
reg [7:0] vga_mode_dout;
|
||||
|
||||
vga #(
|
||||
.VRAM_FILENAME(VRAM_FILENAME),
|
||||
.FONT_ROM_FILENAME(FONT_ROM_FILENAME)
|
||||
) my_vga (
|
||||
.clk25(clk25),
|
||||
.enable(vga_cs & cpu_clken),
|
||||
.rst(rst),
|
||||
|
||||
.vga_h_sync(vga_h_sync),
|
||||
.vga_v_sync(vga_v_sync),
|
||||
.vga_red(vga_red),
|
||||
.vga_grn(vga_grn),
|
||||
.vga_blu(vga_blu),
|
||||
.vga_de(vga_de),
|
||||
|
||||
.address(ab[0]),
|
||||
.w_en(we & vga_cs),
|
||||
.din(dbo),
|
||||
.mode(font_mode),
|
||||
.fg_colour(fg_colour),
|
||||
.bg_colour(bg_colour),
|
||||
.clr_screen(vga_cls)
|
||||
);
|
||||
|
||||
// Handle font mode and foreground and background
|
||||
// colours. This so isn't Apple One authentic, but
|
||||
// it can't hurt to have some fun. :D
|
||||
always @(posedge clk25 or posedge rst) begin
|
||||
if (rst) begin
|
||||
font_mode <= 2'b0;
|
||||
fg_colour <= 3'd7;
|
||||
bg_colour <= 3'd0;
|
||||
end else begin
|
||||
case (ab[1:0])
|
||||
2'b00: begin
|
||||
vga_mode_dout = {6'b0, font_mode};
|
||||
if (vga_mode_cs & we & cpu_clken) font_mode <= dbo[1:0];
|
||||
end
|
||||
2'b01: begin
|
||||
vga_mode_dout = {5'b0, fg_colour};
|
||||
if (vga_mode_cs & we & cpu_clken) fg_colour <= dbo[2:0];
|
||||
end
|
||||
2'b10: begin
|
||||
vga_mode_dout = {5'b0, bg_colour};
|
||||
if (vga_mode_cs & we & cpu_clken) bg_colour <= dbo[2:0];
|
||||
end
|
||||
default: vga_mode_dout = 8'b0;
|
||||
endcase
|
||||
end
|
||||
end
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// CPU Data In MUX
|
||||
|
||||
// link up chip selected device to cpu input
|
||||
assign dbi = ram_cs ? ram_dout :
|
||||
rom_cs ? rom_dout :
|
||||
basic_cs ? basic_dout :
|
||||
uart_cs ? uart_dout :
|
||||
ps2kb_cs ? ps2_dout :
|
||||
usb_cs ? usb_dout :
|
||||
vga_mode_cs ? vga_mode_dout :
|
||||
8'hFF;
|
||||
endmodule
|
||||
@@ -28,99 +28,99 @@ module apple1_top #(
|
||||
parameter VRAM_FILENAME = "../../../roms/vga_vram.bin",
|
||||
parameter WOZMON_ROM_FILENAME = "../../../roms/wozmon.hex"
|
||||
) (
|
||||
input clk, // 100 MHz board clock
|
||||
input clk, // 100 MHz board clock
|
||||
|
||||
// I/O interface to computer
|
||||
input uart_rx, // asynchronous serial data input from computer
|
||||
output uart_tx, // asynchronous serial data output to computer
|
||||
output uart_cts, // clear to send flag to computer - not used
|
||||
input uart_rx, // asynchronous serial data input from computer
|
||||
output uart_tx, // asynchronous serial data output to computer
|
||||
output uart_cts, // clear to send flag to computer - not used
|
||||
|
||||
// I/O interface to keyboard
|
||||
input ps2_clk, // PS/2 keyboard serial clock input
|
||||
input ps2_din, // PS/2 keyboard serial data input
|
||||
input ps2_clk, // PS/2 keyboard serial clock input
|
||||
input ps2_din, // PS/2 keyboard serial data input
|
||||
|
||||
// Outputs to VGA display
|
||||
output vga_h_sync, // hozizontal VGA sync pulse
|
||||
output vga_v_sync, // vertical VGA sync pulse
|
||||
output vga_h_sync, // hozizontal VGA sync pulse
|
||||
output vga_v_sync, // vertical VGA sync pulse
|
||||
|
||||
output [3:0] vga_r, // red VGA signal
|
||||
output [3:0] vga_g, // green VGA signal
|
||||
output [3:0] vga_b, // blue VGA signal
|
||||
output [3:0] vga_r, // red VGA signal
|
||||
output [3:0] vga_g, // green VGA signal
|
||||
output [3:0] vga_b, // blue VGA signal
|
||||
|
||||
// Debugging ports
|
||||
output [3:0] led,
|
||||
input [1:0] button // 2 buttons on board
|
||||
input [1:0] button // 2 buttons on board
|
||||
);
|
||||
|
||||
assign led[0] = 1;
|
||||
assign led[1] = reset_n;
|
||||
assign led[2] = clr_screen_n;
|
||||
assign led[3] = 0;
|
||||
assign led[0] = 1;
|
||||
assign led[1] = reset_n;
|
||||
assign led[2] = clr_screen_n;
|
||||
assign led[3] = 0;
|
||||
|
||||
wire clk25;
|
||||
wire clk25;
|
||||
|
||||
// ===============================================================
|
||||
// System Clock generation (25MHz)
|
||||
// ===============================================================
|
||||
// ===============================================================
|
||||
// System Clock generation (25MHz)
|
||||
// ===============================================================
|
||||
|
||||
reg [1:0] clkpre = 2'b00; // prescaler, from 100MHz to 25MHz
|
||||
reg [1:0] clkpre = 2'b00; // prescaler, from 100MHz to 25MHz
|
||||
|
||||
always @(posedge clk)
|
||||
begin
|
||||
clkpre <= clkpre + 1;
|
||||
end
|
||||
wire clk25 = clkpre[1];
|
||||
always @(posedge clk) begin
|
||||
clkpre <= clkpre + 1;
|
||||
end
|
||||
wire clk25 = clkpre[1];
|
||||
|
||||
wire vga_bit;
|
||||
wire vga_bit;
|
||||
|
||||
// set the monochrome base colour here..
|
||||
assign vga_r[3:0] = vga_bit ? 4'b1000 : 4'b0000;
|
||||
assign vga_g[3:0] = vga_bit ? 4'b1111 : 4'b0000;
|
||||
assign vga_b[3:0] = vga_bit ? 4'b1000 : 4'b0000;
|
||||
// set the monochrome base colour here..
|
||||
assign vga_r[3:0] = vga_bit ? 4'b1000 : 4'b0000;
|
||||
assign vga_g[3:0] = vga_bit ? 4'b1111 : 4'b0000;
|
||||
assign vga_b[3:0] = vga_bit ? 4'b1000 : 4'b0000;
|
||||
|
||||
// debounce reset button
|
||||
wire reset_n;
|
||||
debounce reset_button (
|
||||
.clk25(clk25),
|
||||
.rst(1'b0),
|
||||
.sig_in(button[0]),
|
||||
.sig_out(reset_n)
|
||||
);
|
||||
// debounce reset button
|
||||
wire reset_n;
|
||||
debounce reset_button (
|
||||
.clk25(clk25),
|
||||
.rst(1'b0),
|
||||
.sig_in(button[0]),
|
||||
.sig_out(reset_n)
|
||||
);
|
||||
|
||||
// debounce clear screen button
|
||||
wire clr_screen_n;
|
||||
debounce clr_button (
|
||||
.clk25(clk25),
|
||||
.rst(~reset_n),
|
||||
.sig_in(button[1]),
|
||||
.sig_out(clr_screen_n)
|
||||
);
|
||||
// debounce clear screen button
|
||||
wire clr_screen_n;
|
||||
debounce clr_button (
|
||||
.clk25(clk25),
|
||||
.rst(~reset_n),
|
||||
.sig_in(button[1]),
|
||||
.sig_out(clr_screen_n)
|
||||
);
|
||||
|
||||
// apple one main system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME (BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME (FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME (RAM_FILENAME),
|
||||
.VRAM_FILENAME (VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME (WOZMON_ROM_FILENAME)
|
||||
) my_apple1(
|
||||
.clk25(clk25),
|
||||
.rst_n(reset_n),
|
||||
// apple one main system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME(BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME(FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME(RAM_FILENAME),
|
||||
.VRAM_FILENAME(VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME(WOZMON_ROM_FILENAME)
|
||||
) my_apple1 (
|
||||
.clk25(clk25),
|
||||
.rst_n(reset_n),
|
||||
|
||||
.uart_rx(uart_rx),
|
||||
.uart_tx(uart_tx),
|
||||
.uart_cts(uart_cts),
|
||||
.uart_rx (uart_rx),
|
||||
.uart_tx (uart_tx),
|
||||
.uart_cts(uart_cts),
|
||||
|
||||
.ps2_clk(ps2_clk),
|
||||
.ps2_din(ps2_din),
|
||||
.ps2_select(1'b1), // PS/2 enabled, UART TX disabled
|
||||
//.ps2_select(1'b0), // PS/2 disabled, UART TX enabled
|
||||
.ps2_clk(ps2_clk),
|
||||
.ps2_din(ps2_din),
|
||||
|
||||
.vga_h_sync(vga_h_sync),
|
||||
.vga_v_sync(vga_v_sync),
|
||||
.vga_red(vga_bit),
|
||||
//.vga_grn(vga_bit),
|
||||
//.vga_blu(vga_bit),
|
||||
.vga_cls(~clr_screen_n),
|
||||
);
|
||||
// .key_select(2'b00), // UART enabled
|
||||
.key_select(2'b10), // PS/2 keyboard enabled
|
||||
|
||||
.vga_h_sync(vga_h_sync),
|
||||
.vga_v_sync(vga_v_sync),
|
||||
.vga_red(vga_bit),
|
||||
//.vga_grn(vga_bit),
|
||||
//.vga_blu(vga_bit),
|
||||
.vga_cls(~clr_screen_n),
|
||||
);
|
||||
endmodule
|
||||
@@ -23,135 +23,134 @@
|
||||
//
|
||||
|
||||
module apple1_top #(
|
||||
parameter BASIC_FILENAME = "../../../roms/basic.hex",
|
||||
parameter FONT_ROM_FILENAME = "../../../roms/vga_font_bitreversed.hex",
|
||||
parameter RAM_FILENAME = "../../../roms/ram.hex",
|
||||
parameter VRAM_FILENAME = "../../../roms/vga_vram.bin",
|
||||
parameter WOZMON_ROM_FILENAME = "../../../roms/wozmon.hex"
|
||||
parameter string BASIC_FILENAME = "../../../roms/basic.hex",
|
||||
parameter string FONT_ROM_FILENAME = "../../../roms/vga_font_bitreversed.hex",
|
||||
parameter string RAM_FILENAME = "../../../roms/ram.hex",
|
||||
parameter string VRAM_FILENAME = "../../../roms/vga_vram.bin",
|
||||
parameter string WOZMON_ROM_FILENAME = "../../../roms/wozmon.hex"
|
||||
) (
|
||||
input clk, // 12 MHz board clock
|
||||
input clk, // 12 MHz board clock
|
||||
|
||||
// I/O interface to computer
|
||||
input uart_rx, // asynchronous serial data input from computer
|
||||
output uart_tx, // asynchronous serial data output to computer
|
||||
output uart_cts, // clear to send flag to computer
|
||||
input uart_rx, // asynchronous serial data input from computer
|
||||
output uart_tx, // asynchronous serial data output to computer
|
||||
output uart_cts, // clear to send flag to computer
|
||||
|
||||
// I/O interface to keyboard
|
||||
input ps2_clk, // PS/2 keyboard serial clock input
|
||||
input ps2_din, // PS/2 keyboard serial data input
|
||||
input ps2_clk, // PS/2 keyboard serial clock input
|
||||
input ps2_din, // PS/2 keyboard serial data input
|
||||
|
||||
// Outputs to VGA display
|
||||
output vga_h_sync, // hozizontal VGA sync pulse
|
||||
output vga_v_sync, // vertical VGA sync pulse
|
||||
output vga_h_sync, // hozizontal VGA sync pulse
|
||||
output vga_v_sync, // vertical VGA sync pulse
|
||||
output reg vga_red, // red VGA signal
|
||||
output reg vga_grn, // green VGA signal
|
||||
output reg vga_blu, // blue VGA signal
|
||||
|
||||
// Debugging ports
|
||||
output [7:0] led, // 8 LEDs on the iCE40HX8K board
|
||||
output [7:0] ledx, // 8 LEDs on optionally attached YL-4 board
|
||||
input [3:0] button // 4 buttons on optionally attached YL-4 board
|
||||
output [7:0] led, // 8 LEDs on the iCE40HX8K board
|
||||
output [7:0] ledx, // 8 LEDs on optionally attached YL-4 board
|
||||
input [3:0] button // 4 buttons on optionally attached YL-4 board
|
||||
);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Registers and Wires
|
||||
wire clk25;
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Registers and Wires
|
||||
wire clk25;
|
||||
|
||||
wire [15:0] pc_monitor;
|
||||
assign led[7:0] = pc_monitor[7:0];
|
||||
assign ledx[7:0] = ~pc_monitor[15:8];
|
||||
wire [15:0] pc_monitor;
|
||||
assign led[7:0] = pc_monitor[7:0];
|
||||
assign ledx[7:0] = ~pc_monitor[15:8];
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Clocks
|
||||
// 12MHz up to 25MHz
|
||||
pll my_pll(
|
||||
.clock_in(clk),
|
||||
.clock_out(clk25)
|
||||
);
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Clocks
|
||||
// 12MHz up to 25MHz
|
||||
pll my_pll (
|
||||
.clock_in (clk),
|
||||
.clock_out(clk25)
|
||||
);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// PS/2 Keyboard
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// PS/2 Keyboard
|
||||
|
||||
// PS2 Pullups
|
||||
wire ps2__clk, ps2__din;
|
||||
SB_IO #(
|
||||
.PIN_TYPE(6'b000001),
|
||||
.PULLUP(1'b1)
|
||||
) my_ps2_clk (
|
||||
.PACKAGE_PIN(ps2_clk),
|
||||
.D_IN_0(ps2__clk),
|
||||
);
|
||||
// PS2 Pullups
|
||||
wire ps2__clk, ps2__din;
|
||||
SB_IO #(
|
||||
.PIN_TYPE(6'b000001),
|
||||
.PULLUP (1'b1)
|
||||
) my_ps2_clk (
|
||||
.PACKAGE_PIN(ps2_clk),
|
||||
.D_IN_0(ps2__clk),
|
||||
);
|
||||
|
||||
SB_IO #(
|
||||
.PIN_TYPE(6'b000001),
|
||||
.PULLUP(1'b1)
|
||||
) my_ps2_din (
|
||||
.PACKAGE_PIN(ps2_din),
|
||||
.D_IN_0(ps2__din),
|
||||
);
|
||||
SB_IO #(
|
||||
.PIN_TYPE(6'b000001),
|
||||
.PULLUP (1'b1)
|
||||
) my_ps2_din (
|
||||
.PACKAGE_PIN(ps2_din),
|
||||
.D_IN_0(ps2__din),
|
||||
);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Reset, Clear Screen and PS/2 mode selection toggle
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Reset, Clear Screen and PS/2 mode selection toggle
|
||||
|
||||
// debounce reset button
|
||||
wire reset_n;
|
||||
debounce reset_button (
|
||||
.clk25(clk25),
|
||||
.rst(1'b0),
|
||||
.sig_in(button[0]),
|
||||
.sig_out(reset_n)
|
||||
);
|
||||
// debounce reset button
|
||||
wire reset_n;
|
||||
debounce reset_button (
|
||||
.clk25(clk25),
|
||||
.rst(1'b0),
|
||||
.sig_in(button[0]),
|
||||
.sig_out(reset_n)
|
||||
);
|
||||
|
||||
// debounce clear screen button
|
||||
wire clr_screen_n;
|
||||
debounce clr_button (
|
||||
.clk25(clk25),
|
||||
.rst(~reset_n),
|
||||
.sig_in(button[1]),
|
||||
.sig_out(clr_screen_n)
|
||||
);
|
||||
// debounce clear screen button
|
||||
wire clr_screen_n;
|
||||
debounce clr_button (
|
||||
.clk25(clk25),
|
||||
.rst(~reset_n),
|
||||
.sig_in(button[1]),
|
||||
.sig_out(clr_screen_n)
|
||||
);
|
||||
|
||||
// debounce toggle button on PS2 select
|
||||
wire ps2_toggle;
|
||||
reg ps2_select;
|
||||
debounce ps2_button (
|
||||
.clk25(clk25),
|
||||
.rst(~reset_n),
|
||||
.sig_in(button[2]),
|
||||
.sig_out(ps2_toggle)
|
||||
);
|
||||
// debounce toggle button on PS2 select
|
||||
wire ps2_toggle;
|
||||
reg ps2_select;
|
||||
debounce ps2_button (
|
||||
.clk25(clk25),
|
||||
.rst(~reset_n),
|
||||
.sig_in(button[2]),
|
||||
.sig_out(ps2_toggle)
|
||||
);
|
||||
|
||||
// defaults to PS2 mode, but can toggle between
|
||||
// UART and PS2 per button press
|
||||
always @(posedge ps2_toggle)
|
||||
ps2_select <= ~ps2_select;
|
||||
// defaults to PS2 mode, but can toggle between
|
||||
// UART and PS2 per button press
|
||||
always @(posedge ps2_toggle) ps2_select <= ~ps2_select;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Core of system
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Core of system
|
||||
|
||||
// apple one main system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME (BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME (FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME (RAM_FILENAME),
|
||||
.VRAM_FILENAME (VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME (WOZMON_ROM_FILENAME)
|
||||
) my_apple1(
|
||||
.clk25(clk25),
|
||||
.rst_n(reset_n),
|
||||
.uart_rx(uart_rx),
|
||||
.uart_tx(uart_tx),
|
||||
.uart_cts(uart_cts),
|
||||
.ps2_clk(ps2__clk),
|
||||
.ps2_din(ps2__din),
|
||||
.ps2_select(ps2_select),
|
||||
.vga_h_sync(vga_h_sync),
|
||||
.vga_v_sync(vga_v_sync),
|
||||
.vga_red(vga_red),
|
||||
.vga_grn(vga_grn),
|
||||
.vga_blu(vga_blu),
|
||||
.vga_cls(~clr_screen_n),
|
||||
.pc_monitor(pc_monitor)
|
||||
);
|
||||
// apple one main system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME(BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME(FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME(RAM_FILENAME),
|
||||
.VRAM_FILENAME(VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME(WOZMON_ROM_FILENAME)
|
||||
) my_apple1 (
|
||||
.clk25(clk25),
|
||||
.rst_n(reset_n),
|
||||
.uart_rx(uart_rx),
|
||||
.uart_tx(uart_tx),
|
||||
.uart_cts(uart_cts),
|
||||
.ps2_clk(ps2__clk),
|
||||
.ps2_din(ps2__din),
|
||||
.key_select(ps2_select ? 2'b10 : 2'b00), // switch between PS/2 or UART
|
||||
.vga_h_sync(vga_h_sync),
|
||||
.vga_v_sync(vga_v_sync),
|
||||
.vga_red(vga_red),
|
||||
.vga_grn(vga_grn),
|
||||
.vga_blu(vga_blu),
|
||||
.vga_cls(~clr_screen_n),
|
||||
.pc_monitor(pc_monitor)
|
||||
);
|
||||
|
||||
endmodule
|
||||
@@ -28,93 +28,93 @@ module apple1_top #(
|
||||
parameter VRAM_FILENAME = "../../../roms/vga_vram.bin",
|
||||
parameter WOZMON_ROM_FILENAME = "../../../roms/wozmon.hex"
|
||||
) (
|
||||
input clk, // 50 MHz board clock
|
||||
input clk, // 50 MHz board clock
|
||||
|
||||
// I/O interface to computer
|
||||
input uart_rx, // asynchronous serial data input from computer
|
||||
output uart_tx, // asynchronous serial data output to computer
|
||||
output uart_cts, // clear to send flag to computer - not used
|
||||
input uart_rx, // asynchronous serial data input from computer
|
||||
output uart_tx, // asynchronous serial data output to computer
|
||||
output uart_cts, // clear to send flag to computer - not used
|
||||
|
||||
// I/O interface to keyboard
|
||||
input ps2_clk, // PS/2 keyboard serial clock input
|
||||
input ps2_din, // PS/2 keyboard serial data input
|
||||
input ps2_clk, // PS/2 keyboard serial clock input
|
||||
input ps2_din, // PS/2 keyboard serial data input
|
||||
|
||||
// Outputs to VGA display
|
||||
output vga_h_sync, // hozizontal VGA sync pulse
|
||||
output vga_v_sync, // vertical VGA sync pulse
|
||||
output vga_h_sync, // hozizontal VGA sync pulse
|
||||
output vga_v_sync, // vertical VGA sync pulse
|
||||
|
||||
// Outputs to the ADV7123 RGB DAC IC
|
||||
output vga_clk,
|
||||
output vga_blank_n,
|
||||
|
||||
output [3:0] vga_r, // red VGA signal
|
||||
output [3:0] vga_g, // green VGA signal
|
||||
output [3:0] vga_b, // blue VGA signal
|
||||
output [3:0] vga_r, // red VGA signal
|
||||
output [3:0] vga_g, // green VGA signal
|
||||
output [3:0] vga_b, // blue VGA signal
|
||||
|
||||
// Debugging ports
|
||||
output [2:0] led,
|
||||
input button, // 1 button on board
|
||||
input button // 1 button on board
|
||||
);
|
||||
|
||||
assign vga_clk = clk25;
|
||||
assign vga_blank_n = 1;
|
||||
assign vga_clk = clk25;
|
||||
assign vga_blank_n = 1;
|
||||
|
||||
// Active low
|
||||
assign led[0] = reset_n;
|
||||
assign led[1] = 1;
|
||||
assign led[2] = 1;
|
||||
// Active low
|
||||
assign led[0] = reset_n;
|
||||
assign led[1] = 1;
|
||||
assign led[2] = 1;
|
||||
|
||||
// ===============================================================
|
||||
// System Clock generation (25MHz)
|
||||
// ===============================================================
|
||||
// ===============================================================
|
||||
// System Clock generation (25MHz)
|
||||
// ===============================================================
|
||||
|
||||
reg clk25 = 1;
|
||||
reg clk25 = 1;
|
||||
|
||||
// generate 25MHz clock from 50MHz master clock
|
||||
always @(posedge clk)
|
||||
begin
|
||||
clk25 <= ~clk25;
|
||||
end
|
||||
// generate 25MHz clock from 50MHz master clock
|
||||
always @(posedge clk) begin
|
||||
clk25 <= ~clk25;
|
||||
end
|
||||
|
||||
wire vga_bit;
|
||||
wire vga_bit;
|
||||
|
||||
// set the monochrome base colour here..
|
||||
assign vga_r[3:0] = vga_bit ? 4'b1000 : 4'b0000;
|
||||
assign vga_g[3:0] = vga_bit ? 4'b1111 : 4'b0000;
|
||||
assign vga_b[3:0] = vga_bit ? 4'b1000 : 4'b0000;
|
||||
// set the monochrome base colour here..
|
||||
assign vga_r[3:0] = vga_bit ? 4'b1000 : 4'b0000;
|
||||
assign vga_g[3:0] = vga_bit ? 4'b1111 : 4'b0000;
|
||||
assign vga_b[3:0] = vga_bit ? 4'b1000 : 4'b0000;
|
||||
|
||||
// debounce reset button
|
||||
wire reset_n;
|
||||
debounce reset_button (
|
||||
.clk25(clk25),
|
||||
.rst(1'b0),
|
||||
.sig_in(button),
|
||||
.sig_out(reset_n)
|
||||
);
|
||||
// debounce reset button
|
||||
wire reset_n;
|
||||
debounce reset_button (
|
||||
.clk25(clk25),
|
||||
.rst(1'b0),
|
||||
.sig_in(button),
|
||||
.sig_out(reset_n)
|
||||
);
|
||||
|
||||
// apple one main system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME (BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME (FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME (RAM_FILENAME),
|
||||
.VRAM_FILENAME (VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME (WOZMON_ROM_FILENAME)
|
||||
) my_apple1(
|
||||
.clk25(clk25),
|
||||
.rst_n(reset_n),
|
||||
// apple one main system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME(BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME(FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME(RAM_FILENAME),
|
||||
.VRAM_FILENAME(VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME(WOZMON_ROM_FILENAME)
|
||||
) my_apple1 (
|
||||
.clk25(clk25),
|
||||
.rst_n(reset_n),
|
||||
|
||||
.uart_rx(uart_rx),
|
||||
.uart_tx(uart_tx),
|
||||
.uart_cts(uart_cts),
|
||||
.uart_rx (uart_rx),
|
||||
.uart_tx (uart_tx),
|
||||
.uart_cts(uart_cts),
|
||||
|
||||
.ps2_clk(ps2_clk),
|
||||
.ps2_din(ps2_din),
|
||||
.ps2_select(1'b1), // PS/2 enabled, UART TX disabled
|
||||
// .ps2_select(1'b0), // PS/2 disabled, UART TX enabled
|
||||
.ps2_clk(ps2_clk),
|
||||
.ps2_din(ps2_din),
|
||||
|
||||
.vga_h_sync(vga_h_sync),
|
||||
.vga_v_sync(vga_v_sync),
|
||||
.vga_red(vga_bit),
|
||||
.vga_cls(~reset_n),
|
||||
);
|
||||
.key_select(2'b10), // PS/2 enabled, UART TX disabled
|
||||
// .key_select(2'b00), // PS/2 disabled, UART TX enabled
|
||||
|
||||
.vga_h_sync(vga_h_sync),
|
||||
.vga_v_sync(vga_v_sync),
|
||||
.vga_red(vga_bit),
|
||||
.vga_cls(~reset_n),
|
||||
);
|
||||
endmodule
|
||||
@@ -29,18 +29,18 @@ module apple1_top #(
|
||||
parameter VRAM_FILENAME = "../../../roms/vga_vram.bin",
|
||||
parameter WOZMON_ROM_FILENAME = "../../../roms/wozmon.hex"
|
||||
) (
|
||||
input clk, // 50 MHz board clock
|
||||
input clk, // 50 MHz board clock
|
||||
|
||||
// I/O interface to computer
|
||||
input usb_rx, // asynchronous serial data input from computer
|
||||
output usb_tx, // asynchronous serial data output to computer
|
||||
input usb_rx, // asynchronous serial data input from computer
|
||||
output usb_tx, // asynchronous serial data output to computer
|
||||
|
||||
// I/O interface to keyboard
|
||||
input [1:0] usb_dp, // PS/2 keyboard serial clock input
|
||||
input [1:0] usb_dn, // PS/2 keyboard serial data input
|
||||
input [1:0] usb_dp, // PS/2 keyboard serial clock input
|
||||
input [1:0] usb_dn, // PS/2 keyboard serial data input
|
||||
|
||||
output [1:0] usb_pull_dp, // USB pullup/pulldown
|
||||
output [1:0] usb_pull_dn, // USB pullup/pulldown
|
||||
output [1:0] usb_pull_dp, // USB pullup/pulldown
|
||||
output [1:0] usb_pull_dn, // USB pullup/pulldown
|
||||
|
||||
// DVI port
|
||||
output [3:0] gpdi_dp,
|
||||
@@ -49,75 +49,91 @@ module apple1_top #(
|
||||
output [4:0] led,
|
||||
input [1:0] button
|
||||
);
|
||||
wire uart_cts; // No CTS pin
|
||||
wire uart_cts; // No CTS pin
|
||||
|
||||
wire clkp, clkt; // clkp: 25MHz, clkt: 250MHz
|
||||
dvi_pll pll(clk, clkp, clkt, led[0]);
|
||||
wire clkp, clkt; // clkp: 25MHz, clkt: 250MHz
|
||||
dvi_pll pll (
|
||||
clk,
|
||||
clkp,
|
||||
clkt,
|
||||
led[0]
|
||||
);
|
||||
|
||||
wire vsync, hsync, de;
|
||||
wire [7:0] vga_r, vga_g, vga_b;
|
||||
wire vsync, hsync, de;
|
||||
wire [7:0] vga_r, vga_g, vga_b;
|
||||
|
||||
// Active low
|
||||
assign led[1] = reset_n;
|
||||
assign led[2] = hsync;
|
||||
assign led[3] = 1'b1;
|
||||
assign led[4] = 1'b0;
|
||||
// Active low
|
||||
assign led[1] = reset_n;
|
||||
assign led[2] = hsync;
|
||||
assign led[3] = 1'b1;
|
||||
assign led[4] = 1'b0;
|
||||
|
||||
wire vga_bit;
|
||||
wire vga_bit;
|
||||
|
||||
// set the monochrome base colour here..
|
||||
assign vga_r = vga_bit ? 8'b10000000 : 4'b00000000;
|
||||
assign vga_g = vga_bit ? 8'b11111111 : 4'b00000000;
|
||||
assign vga_b = vga_bit ? 8'b10000000 : 4'b00000000;
|
||||
// set the monochrome base colour here..
|
||||
assign vga_r = vga_bit ? 8'b10000000 : 4'b00000000;
|
||||
assign vga_g = vga_bit ? 8'b11111111 : 4'b00000000;
|
||||
assign vga_b = vga_bit ? 8'b10000000 : 4'b00000000;
|
||||
|
||||
// debounce reset button
|
||||
wire reset_n;
|
||||
debounce reset_button (
|
||||
.clk25(clkp),
|
||||
.rst(1'b0),
|
||||
.sig_in(button[0]),
|
||||
.sig_out(reset_n)
|
||||
);
|
||||
// debounce reset button
|
||||
wire reset_n;
|
||||
debounce reset_button (
|
||||
.clk25(clkp),
|
||||
.rst(1'b0),
|
||||
.sig_in(button[0]),
|
||||
.sig_out(reset_n)
|
||||
);
|
||||
|
||||
// debounce clear button
|
||||
wire cls;
|
||||
debounce cls_button (
|
||||
.clk25(clkp),
|
||||
.rst(1'b0),
|
||||
.sig_in(~button[1]),
|
||||
.sig_out(cls)
|
||||
);
|
||||
// debounce clear button
|
||||
wire cls;
|
||||
debounce cls_button (
|
||||
.clk25(clkp),
|
||||
.rst(1'b0),
|
||||
.sig_in(~button[1]),
|
||||
.sig_out(cls)
|
||||
);
|
||||
|
||||
// apple one main system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME (BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME (FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME (RAM_FILENAME),
|
||||
.VRAM_FILENAME (VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME (WOZMON_ROM_FILENAME)
|
||||
) my_apple1(
|
||||
.clk25(clkp),
|
||||
.rst_n(reset_n),
|
||||
// apple one main system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME(BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME(FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME(RAM_FILENAME),
|
||||
.VRAM_FILENAME(VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME(WOZMON_ROM_FILENAME)
|
||||
) my_apple1 (
|
||||
.clk25(clkp),
|
||||
.rst_n(reset_n),
|
||||
|
||||
.uart_rx(usb_rx),
|
||||
.uart_tx(usb_tx),
|
||||
.uart_cts(uart_cts),
|
||||
.uart_rx (usb_rx),
|
||||
.uart_tx (usb_tx),
|
||||
.uart_cts(uart_cts),
|
||||
|
||||
.ps2_clk(usb_dp[0]),
|
||||
.ps2_din(usb_dn[0]),
|
||||
.ps2_select(1'b1), // PS/2 enabled, UART TX disabled
|
||||
// .ps2_select(1'b0), // PS/2 disabled, UART TX enabled
|
||||
.ps2_clk(usb_dp[0]),
|
||||
.ps2_din(usb_dn[0]),
|
||||
|
||||
.vga_h_sync(hsync),
|
||||
.vga_v_sync(vsync),
|
||||
.vga_red(vga_bit),
|
||||
.vga_cls(cls),
|
||||
.vga_de(de)
|
||||
);
|
||||
.key_select(2'b10), // PS/2 enabled, UART TX disabled
|
||||
// .key_select(2'b00), // PS/2 disabled, UART TX enabled
|
||||
|
||||
assign usb_pull_dn[0] = 1'b1; // PS/2 emulation mode
|
||||
assign usb_pull_dp[0] = 1'b1;
|
||||
.vga_h_sync(hsync),
|
||||
.vga_v_sync(vsync),
|
||||
.vga_red(vga_bit),
|
||||
.vga_cls(cls),
|
||||
.vga_de(de)
|
||||
);
|
||||
|
||||
// Convert the signal to DVI and send over HDMI
|
||||
vga2tmds tmds_generator(clkp, clkt, vsync, hsync, de, vga_r, vga_g, vga_b, gpdi_dp);
|
||||
assign usb_pull_dn[0] = 1'b1; // PS/2 emulation mode
|
||||
assign usb_pull_dp[0] = 1'b1;
|
||||
|
||||
// Convert the signal to DVI and send over HDMI
|
||||
vga2tmds tmds_generator (
|
||||
clkp,
|
||||
clkt,
|
||||
vsync,
|
||||
hsync,
|
||||
de,
|
||||
vga_r,
|
||||
vga_g,
|
||||
vga_b,
|
||||
gpdi_dp
|
||||
);
|
||||
endmodule
|
||||
@@ -28,78 +28,79 @@ module apple1_top #(
|
||||
parameter VRAM_FILENAME = "../../../roms/vga_vram.bin",
|
||||
parameter WOZMON_ROM_FILENAME = "../../../roms/wozmon.hex"
|
||||
) (
|
||||
input clk, // 100 MHz board clock
|
||||
input clk, // 100 MHz board clock
|
||||
|
||||
// I/O interface to computer
|
||||
input uart_rx, // asynchronous serial data input from computer
|
||||
output uart_tx, // asynchronous serial data output to computer
|
||||
output uart_cts, // clear to send flag to computer - not used
|
||||
input uart_rx, // asynchronous serial data input from computer
|
||||
output uart_tx, // asynchronous serial data output to computer
|
||||
output uart_cts, // clear to send flag to computer - not used
|
||||
|
||||
// I/O interface to keyboard
|
||||
input ps2_clk, // PS/2 keyboard serial clock input
|
||||
input ps2_din, // PS/2 keyboard serial data input
|
||||
input ps2_clk, // PS/2 keyboard serial clock input
|
||||
input ps2_din, // PS/2 keyboard serial data input
|
||||
|
||||
// Outputs to VGA display
|
||||
output vga_h_sync, // hozizontal VGA sync pulse
|
||||
output vga_v_sync, // vertical VGA sync pulse
|
||||
output vga_h_sync, // hozizontal VGA sync pulse
|
||||
output vga_v_sync, // vertical VGA sync pulse
|
||||
|
||||
output [3:0] vga_r, // red VGA signal
|
||||
output [3:0] vga_g, // green VGA signal
|
||||
output [3:0] vga_b, // blue VGA signal
|
||||
output [3:0] vga_r, // red VGA signal
|
||||
output [3:0] vga_g, // green VGA signal
|
||||
output [3:0] vga_b, // blue VGA signal
|
||||
|
||||
// Debugging ports
|
||||
output [1:0] led,
|
||||
input [1:0] button // 2 buttons on board
|
||||
input [1:0] button // 2 buttons on board
|
||||
);
|
||||
|
||||
assign led[0] = reset_n;
|
||||
assign led[1] = clr_screen_n;
|
||||
assign led[0] = reset_n;
|
||||
assign led[1] = clr_screen_n;
|
||||
|
||||
wire clk25;
|
||||
// 100MHz down to 25MHz
|
||||
pll my_pll(
|
||||
.clock_in(clk),
|
||||
.clock_out(clk25)
|
||||
);
|
||||
wire clk25;
|
||||
// 100MHz down to 25MHz
|
||||
pll my_pll (
|
||||
.clock_in (clk),
|
||||
.clock_out(clk25)
|
||||
);
|
||||
|
||||
wire vga_bit;
|
||||
wire vga_bit;
|
||||
|
||||
// set the monochrome base colour here..
|
||||
assign vga_r[3:0] = vga_bit ? 4'b1000 : 4'b0000;
|
||||
assign vga_g[3:0] = vga_bit ? 4'b1111 : 4'b0000;
|
||||
assign vga_b[3:0] = vga_bit ? 4'b1000 : 4'b0000;
|
||||
// set the monochrome base colour here..
|
||||
assign vga_r[3:0] = vga_bit ? 4'b1000 : 4'b0000;
|
||||
assign vga_g[3:0] = vga_bit ? 4'b1111 : 4'b0000;
|
||||
assign vga_b[3:0] = vga_bit ? 4'b1000 : 4'b0000;
|
||||
|
||||
wire reset_n;
|
||||
assign reset_n = ~button[0];
|
||||
wire reset_n;
|
||||
assign reset_n = ~button[0];
|
||||
|
||||
wire clr_screen_n;
|
||||
assign clr_screen_n = ~button[1];
|
||||
wire clr_screen_n;
|
||||
assign clr_screen_n = ~button[1];
|
||||
|
||||
// apple one main system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME (BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME (FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME (RAM_FILENAME),
|
||||
.VRAM_FILENAME (VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME (WOZMON_ROM_FILENAME)
|
||||
) my_apple1(
|
||||
.clk25(clk25),
|
||||
.rst_n(reset_n),
|
||||
// apple one main system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME(BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME(FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME(RAM_FILENAME),
|
||||
.VRAM_FILENAME(VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME(WOZMON_ROM_FILENAME)
|
||||
) my_apple1 (
|
||||
.clk25(clk25),
|
||||
.rst_n(reset_n),
|
||||
|
||||
.uart_rx(uart_rx),
|
||||
.uart_tx(uart_tx),
|
||||
.uart_cts(uart_cts),
|
||||
.uart_rx (uart_rx),
|
||||
.uart_tx (uart_tx),
|
||||
.uart_cts(uart_cts),
|
||||
|
||||
.ps2_clk(ps2_clk),
|
||||
.ps2_din(ps2_din),
|
||||
//.ps2_select(1'b1), // PS/2 not working, at the moment
|
||||
.ps2_select(1'b0), // PS/2 disabled, UART TX enabled
|
||||
.ps2_clk(ps2_clk),
|
||||
.ps2_din(ps2_din),
|
||||
|
||||
.vga_h_sync(vga_h_sync),
|
||||
.vga_v_sync(vga_v_sync),
|
||||
.vga_red(vga_bit),
|
||||
//.vga_grn(vga_bit),
|
||||
//.vga_blu(vga_bit),
|
||||
.vga_cls(~clr_screen_n),
|
||||
);
|
||||
// .key_select(2'b10), // PS/2 enabled, UART TX disabled
|
||||
.key_select(2'b00), // PS/2 disabled, UART TX enabled
|
||||
|
||||
.vga_h_sync(vga_h_sync),
|
||||
.vga_v_sync(vga_v_sync),
|
||||
.vga_red(vga_bit),
|
||||
//.vga_grn(vga_bit),
|
||||
//.vga_blu(vga_bit),
|
||||
.vga_cls(~clr_screen_n),
|
||||
);
|
||||
endmodule
|
||||
@@ -29,83 +29,84 @@ module apple1_top #(
|
||||
parameter VRAM_FILENAME = "../../../roms/vga_vram.bin",
|
||||
parameter WOZMON_ROM_FILENAME = "../../../roms/wozmon.hex"
|
||||
) (
|
||||
input clk, // 100 MHz board clock
|
||||
input clk, // 100 MHz board clock
|
||||
|
||||
// I/O interface to computer
|
||||
input uart_rx, // asynchronous serial data input from computer
|
||||
output uart_tx, // asynchronous serial data output to computer
|
||||
output uart_cts, // clear to send flag to computer
|
||||
input uart_rx, // asynchronous serial data input from computer
|
||||
output uart_tx, // asynchronous serial data output to computer
|
||||
output uart_cts, // clear to send flag to computer
|
||||
|
||||
// I/O interface to keyboard
|
||||
input ps2_clk, // PS/2 keyboard serial clock input
|
||||
input ps2_din, // PS/2 keyboard serial data input
|
||||
input ps2_clk, // PS/2 keyboard serial clock input
|
||||
input ps2_din, // PS/2 keyboard serial data input
|
||||
|
||||
// Outputs to VGA display
|
||||
output vga_h_sync, // hozizontal VGA sync pulse
|
||||
output vga_v_sync, // vertical VGA sync pulse
|
||||
output [2:0] vga_r, // red VGA signal
|
||||
output [2:0] vga_g, // green VGA signal
|
||||
output [2:0] vga_b, // blue VGA signal
|
||||
output vga_h_sync, // hozizontal VGA sync pulse
|
||||
output vga_v_sync, // vertical VGA sync pulse
|
||||
output [2:0] vga_r, // red VGA signal
|
||||
output [2:0] vga_g, // green VGA signal
|
||||
output [2:0] vga_b, // blue VGA signal
|
||||
|
||||
input [1:0] button // 2 buttons on board
|
||||
input [1:0] button // 2 buttons on board
|
||||
);
|
||||
|
||||
wire clk25;
|
||||
wire clk25;
|
||||
|
||||
// 100MHz to 25MHz
|
||||
pll pll(
|
||||
.clock_in(clk),
|
||||
.clock_out(clk25),
|
||||
);
|
||||
// 100MHz to 25MHz
|
||||
pll pll (
|
||||
.clock_in (clk),
|
||||
.clock_out(clk25),
|
||||
);
|
||||
|
||||
wire vga_red, vga_green, vga_blue;
|
||||
assign vga_r[2:0] = {vga_red, vga_red, vga_red};
|
||||
assign vga_g[2:0] = {vga_green, vga_green, vga_green};
|
||||
assign vga_b[2:0] = {vga_blue, vga_blue, vga_blue};
|
||||
wire vga_red, vga_green, vga_blue;
|
||||
assign vga_r[2:0] = {vga_red, vga_red, vga_red};
|
||||
assign vga_g[2:0] = {vga_green, vga_green, vga_green};
|
||||
assign vga_b[2:0] = {vga_blue, vga_blue, vga_blue};
|
||||
|
||||
// debounce reset button
|
||||
wire reset_n;
|
||||
debounce reset_button (
|
||||
.clk25(clk25),
|
||||
.rst(1'b0),
|
||||
.sig_in(button[0]),
|
||||
.sig_out(reset_n)
|
||||
);
|
||||
// debounce reset button
|
||||
wire reset_n;
|
||||
debounce reset_button (
|
||||
.clk25(clk25),
|
||||
.rst(1'b0),
|
||||
.sig_in(button[0]),
|
||||
.sig_out(reset_n)
|
||||
);
|
||||
|
||||
// debounce clear screen button
|
||||
wire clr_screen_n;
|
||||
debounce clr_button (
|
||||
.clk25(clk25),
|
||||
.rst(~reset_n),
|
||||
.sig_in(button[1]),
|
||||
.sig_out(clr_screen_n)
|
||||
);
|
||||
// debounce clear screen button
|
||||
wire clr_screen_n;
|
||||
debounce clr_button (
|
||||
.clk25(clk25),
|
||||
.rst(~reset_n),
|
||||
.sig_in(button[1]),
|
||||
.sig_out(clr_screen_n)
|
||||
);
|
||||
|
||||
// apple one main system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME (BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME (FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME (RAM_FILENAME),
|
||||
.VRAM_FILENAME (VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME (WOZMON_ROM_FILENAME)
|
||||
) my_apple1(
|
||||
.clk25(clk25),
|
||||
.rst_n(reset_n),
|
||||
// apple one main system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME(BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME(FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME(RAM_FILENAME),
|
||||
.VRAM_FILENAME(VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME(WOZMON_ROM_FILENAME)
|
||||
) my_apple1 (
|
||||
.clk25(clk25),
|
||||
.rst_n(reset_n),
|
||||
|
||||
.uart_rx(uart_rx),
|
||||
.uart_tx(uart_tx),
|
||||
.uart_cts(uart_cts),
|
||||
.uart_rx (uart_rx),
|
||||
.uart_tx (uart_tx),
|
||||
.uart_cts(uart_cts),
|
||||
|
||||
.ps2_clk(ps2_clk),
|
||||
.ps2_din(ps2_din),
|
||||
.ps2_select(1'b1), // PS/2 enabled, UART TX disabled
|
||||
//.ps2_select(1'b0), // PS/2 disabled, UART TX enabled
|
||||
.ps2_clk(ps2_clk),
|
||||
.ps2_din(ps2_din),
|
||||
|
||||
.vga_h_sync(vga_h_sync),
|
||||
.vga_v_sync(vga_v_sync),
|
||||
.vga_red(vga_red),
|
||||
.vga_grn(vga_green),
|
||||
.vga_blu(vga_blue),
|
||||
.vga_cls(~clr_screen_n),
|
||||
);
|
||||
.key_select(2'b10), // PS/2 enabled, UART TX disabled
|
||||
// .key_select(2'b00), // PS/2 disabled, UART TX enabled
|
||||
|
||||
.vga_h_sync(vga_h_sync),
|
||||
.vga_v_sync(vga_v_sync),
|
||||
.vga_red(vga_red),
|
||||
.vga_grn(vga_green),
|
||||
.vga_blu(vga_blue),
|
||||
.vga_cls(~clr_screen_n),
|
||||
);
|
||||
endmodule
|
||||
@@ -20,7 +20,7 @@
|
||||
//
|
||||
// Author.....: Niels A. Moseley
|
||||
// Date.......: 11-2-2018
|
||||
//
|
||||
//
|
||||
|
||||
|
||||
module apple1_s3e_starterkit_top #(
|
||||
@@ -29,64 +29,63 @@ module apple1_s3e_starterkit_top #(
|
||||
parameter RAM_FILENAME = "../../../roms/ram.hex",
|
||||
parameter VRAM_FILENAME = "../../../roms/vga_vram.bin",
|
||||
parameter WOZMON_ROM_FILENAME = "../../../roms/wozmon.hex"
|
||||
) (
|
||||
input CLK_50MHZ, // the 50 MHz master clock
|
||||
) (
|
||||
input CLK_50MHZ, // the 50 MHz master clock
|
||||
|
||||
// UART I/O signals
|
||||
output UART_TXD, // UART transmit pin on board
|
||||
input UART_RXD, // UART receive pin on board
|
||||
|
||||
input PS2_KBCLK,
|
||||
input PS2_KBDAT,
|
||||
output UART_TXD, // UART transmit pin on board
|
||||
input UART_RXD, // UART receive pin on board
|
||||
|
||||
input BUTTON, // Button for RESET
|
||||
input SWITCH, // Switch between PS/2 input and UART
|
||||
input PS2_KBCLK,
|
||||
input PS2_KBDAT,
|
||||
|
||||
output VGA_R,
|
||||
output VGA_G,
|
||||
output VGA_B,
|
||||
output VGA_HS,
|
||||
output VGA_VS
|
||||
input BUTTON, // Button for RESET
|
||||
input SWITCH, // Switch between PS/2 input and UART
|
||||
|
||||
output VGA_R,
|
||||
output VGA_G,
|
||||
output VGA_B,
|
||||
output VGA_HS,
|
||||
output VGA_VS
|
||||
);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Registers and Wires
|
||||
reg clk25;
|
||||
wire [15:0] pc_monitor;
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Registers and Wires
|
||||
reg clk25;
|
||||
wire [15:0] pc_monitor;
|
||||
|
||||
wire rst_n;
|
||||
assign rst_n = ~BUTTON;
|
||||
wire rst_n;
|
||||
assign rst_n = ~BUTTON;
|
||||
|
||||
// generate 25MHz clock from 50MHz master clock
|
||||
always @(posedge CLK_50MHZ) begin
|
||||
clk25 <= ~clk25;
|
||||
end
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Core of system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME(BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME(FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME(RAM_FILENAME),
|
||||
.VRAM_FILENAME(VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME(WOZMON_ROM_FILENAME)
|
||||
) apple1_top (
|
||||
.clk25 (clk25),
|
||||
.rst_n (rst_n), // we don't have any reset pulse..
|
||||
.uart_rx (UART_RXD),
|
||||
.uart_tx (UART_TXD),
|
||||
//.uart_cts(UART_CTS), // there is no CTS on the board :(
|
||||
.ps2_clk (PS2_KBCLK),
|
||||
.ps2_din (PS2_KBDAT),
|
||||
.key_select(SWITCH ? 2'b10 : 2'b00), // PS/2 or UART with switch
|
||||
.vga_h_sync(VGA_HS),
|
||||
.vga_v_sync(VGA_VS),
|
||||
.vga_red (VGA_R),
|
||||
.vga_grn (VGA_G),
|
||||
.vga_blu (VGA_B),
|
||||
.vga_cls (~rst_n),
|
||||
.pc_monitor(pc_monitor)
|
||||
);
|
||||
|
||||
// generate 25MHz clock from 50MHz master clock
|
||||
always @(posedge CLK_50MHZ)
|
||||
begin
|
||||
clk25 <= ~clk25;
|
||||
end
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Core of system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME (BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME (FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME (RAM_FILENAME),
|
||||
.VRAM_FILENAME (VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME (WOZMON_ROM_FILENAME)
|
||||
) apple1_top(
|
||||
.clk25(clk25),
|
||||
.rst_n(rst_n), // we don't have any reset pulse..
|
||||
.uart_rx(UART_RXD),
|
||||
.uart_tx(UART_TXD),
|
||||
//.uart_cts(UART_CTS), // there is no CTS on the board :(
|
||||
.ps2_clk(PS2_KBCLK),
|
||||
.ps2_din(PS2_KBDAT),
|
||||
.ps2_select(SWITCH),
|
||||
.vga_h_sync(VGA_HS),
|
||||
.vga_v_sync(VGA_VS),
|
||||
.vga_red(VGA_R),
|
||||
.vga_grn(VGA_G),
|
||||
.vga_blu(VGA_B),
|
||||
.vga_cls(~rst_n),
|
||||
.pc_monitor(pc_monitor)
|
||||
);
|
||||
|
||||
endmodule
|
||||
@@ -22,20 +22,20 @@
|
||||
//
|
||||
|
||||
module apple1_primer #(
|
||||
parameter BASIC_FILENAME = "../../../roms/basic.hex",
|
||||
parameter FONT_ROM_FILENAME = "../../../roms/vga_font_bitreversed.hex",
|
||||
parameter RAM_FILENAME = "../../../roms/ram.hex",
|
||||
parameter VRAM_FILENAME = "../../../roms/vga_vram.bin",
|
||||
parameter WOZMON_ROM_FILENAME = "../../../roms/wozmon.hex"
|
||||
parameter string BASIC_FILENAME = "../../../roms/basic.hex",
|
||||
parameter string FONT_ROM_FILENAME = "../../../roms/vga_font_bitreversed.hex",
|
||||
parameter string RAM_FILENAME = "../../../roms/ram.hex",
|
||||
parameter string VRAM_FILENAME = "../../../roms/vga_vram.bin",
|
||||
parameter string WOZMON_ROM_FILENAME = "../../../roms/wozmon.hex"
|
||||
) (
|
||||
input clk,
|
||||
input rst,
|
||||
input clk,
|
||||
input rst,
|
||||
|
||||
input uart_rx,
|
||||
output uart_tx,
|
||||
|
||||
inout usb_dm,
|
||||
inout usb_dp,
|
||||
inout usb_dm,
|
||||
inout usb_dp,
|
||||
output usb_led_err,
|
||||
output usb_led_act,
|
||||
|
||||
@@ -44,56 +44,57 @@ module apple1_primer #(
|
||||
output vga_red,
|
||||
output vga_grn,
|
||||
output vga_blu,
|
||||
input vga_cls,
|
||||
input vga_cls,
|
||||
output vga_de
|
||||
);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Registers and Wires
|
||||
wire uart_cts; // No CTS pin
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Registers and Wires
|
||||
wire uart_cts; // No CTS pin
|
||||
|
||||
wire clk25;
|
||||
wire usb_clk;
|
||||
wire clk25;
|
||||
wire usb_clk;
|
||||
|
||||
Gowin_PLL your_instance_name(
|
||||
.clkin(clk),
|
||||
.clkout0(clk25),
|
||||
.clkout1(usb_clk),
|
||||
.mdclk(1'd0)
|
||||
);
|
||||
Gowin_PLL your_instance_name (
|
||||
.clkin (clk),
|
||||
.clkout0(clk25),
|
||||
.clkout1(usb_clk),
|
||||
.mdclk (1'd0)
|
||||
);
|
||||
|
||||
apple1 #(
|
||||
.BASIC_FILENAME (BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME (FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME (RAM_FILENAME),
|
||||
.VRAM_FILENAME (VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME (WOZMON_ROM_FILENAME)
|
||||
) my_apple1(
|
||||
.clk25(clk25),
|
||||
.rst_n(!rst),
|
||||
apple1 #(
|
||||
.BASIC_FILENAME(BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME(FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME(RAM_FILENAME),
|
||||
.VRAM_FILENAME(VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME(WOZMON_ROM_FILENAME)
|
||||
) my_apple1 (
|
||||
.clk25(clk25),
|
||||
.rst_n(!rst),
|
||||
|
||||
.uart_rx(uart_rx),
|
||||
.uart_tx(uart_tx),
|
||||
.uart_cts(uart_cts),
|
||||
.uart_rx (uart_rx),
|
||||
.uart_tx (uart_tx),
|
||||
.uart_cts(uart_cts),
|
||||
|
||||
.ps2_clk(1'b0),
|
||||
.ps2_din(1'b0),
|
||||
.ps2_select(1'b0), // PS/2 disabled, UART TX enabled
|
||||
.key_select(2'b00), // USB keyboard selected
|
||||
|
||||
.usb_clk(usb_clk),
|
||||
.usb_dm(usb_dm),
|
||||
.usb_dp(usb_dp),
|
||||
.usb_led_err(usb_led_err),
|
||||
.usb_led_act(usb_led_act),
|
||||
.ps2_clk(1'b0),
|
||||
.ps2_din(1'b0),
|
||||
|
||||
.vga_h_sync(vga_h_sync),
|
||||
.vga_v_sync(vga_v_sync),
|
||||
.vga_red(vga_red),
|
||||
.vga_grn(vga_grn),
|
||||
.vga_blu(vga_blu),
|
||||
.vga_cls(vga_cls),
|
||||
.vga_de(vga_de),
|
||||
.usb_clk(usb_clk),
|
||||
.usb_dm(usb_dm),
|
||||
.usb_dp(usb_dp),
|
||||
.usb_led_err(usb_led_err),
|
||||
.usb_led_act(usb_led_act),
|
||||
|
||||
.pc_monitor()
|
||||
);
|
||||
.vga_h_sync(vga_h_sync),
|
||||
.vga_v_sync(vga_v_sync),
|
||||
.vga_red(vga_red),
|
||||
.vga_grn(vga_grn),
|
||||
.vga_blu(vga_blu),
|
||||
.vga_cls(vga_cls),
|
||||
.vga_de(vga_de),
|
||||
|
||||
.pc_monitor()
|
||||
);
|
||||
endmodule
|
||||
@@ -29,104 +29,104 @@ module apple1_de0_top #(
|
||||
parameter VRAM_FILENAME = "../../../roms/vga_vram.bin",
|
||||
parameter WOZMON_ROM_FILENAME = "../../../roms/wozmon.hex"
|
||||
) (
|
||||
input CLOCK_50, // the 50 MHz DE0 master clock
|
||||
input CLOCK_50, // the 50 MHz DE0 master clock
|
||||
|
||||
// UART I/O signals
|
||||
output UART_TXD, // UART transmit pin on DE0 board
|
||||
input UART_RXD, // UART receive pin on DE0 board
|
||||
output UART_CTS, // UART clear-to-send pin on DE0 board
|
||||
output UART_TXD, // UART transmit pin on DE0 board
|
||||
input UART_RXD, // UART receive pin on DE0 board
|
||||
output UART_CTS, // UART clear-to-send pin on DE0 board
|
||||
|
||||
output [7:0] LEDG, // monitoring for lower 8 address bits
|
||||
input [2:0] BUTTON, // BUTTON[0] for reset
|
||||
output [6:0] HEX0_D,
|
||||
output [6:0] HEX1_D,
|
||||
output [6:0] HEX2_D,
|
||||
output [6:0] HEX3_D,
|
||||
output [7:0] LEDG, // monitoring for lower 8 address bits
|
||||
input [2:0] BUTTON, // BUTTON[0] for reset
|
||||
output [6:0] HEX0_D,
|
||||
output [6:0] HEX1_D,
|
||||
output [6:0] HEX2_D,
|
||||
output [6:0] HEX3_D,
|
||||
|
||||
input PS2_KBCLK,
|
||||
input PS2_KBDAT,
|
||||
input PS2_KBCLK,
|
||||
input PS2_KBDAT,
|
||||
|
||||
output [3:0] VGA_R,
|
||||
output [3:0] VGA_G,
|
||||
output [3:0] VGA_B,
|
||||
output VGA_HS,
|
||||
output VGA_VS
|
||||
output [3:0] VGA_R,
|
||||
output [3:0] VGA_G,
|
||||
output [3:0] VGA_B,
|
||||
output VGA_HS,
|
||||
output VGA_VS
|
||||
);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Registers and Wires
|
||||
reg clk25;
|
||||
wire [15:0] pc_monitor;
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Registers and Wires
|
||||
reg clk25;
|
||||
wire [15:0] pc_monitor;
|
||||
|
||||
// generate 25MHz clock from 50MHz master clock
|
||||
always @(posedge CLOCK_50)
|
||||
begin
|
||||
clk25 <= ~clk25;
|
||||
end
|
||||
// generate 25MHz clock from 50MHz master clock
|
||||
always @(posedge CLOCK_50) begin
|
||||
clk25 <= ~clk25;
|
||||
end
|
||||
|
||||
wire r_bit, g_bit, b_bit;
|
||||
wire r_bit, g_bit, b_bit;
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Core of system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME (BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME (FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME (RAM_FILENAME),
|
||||
.VRAM_FILENAME (VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME (WOZMON_ROM_FILENAME)
|
||||
) apple1_top(
|
||||
.clk25(clk25),
|
||||
.rst_n(BUTTON[0]), // we don't have any reset pulse..
|
||||
.uart_rx(UART_RXD),
|
||||
.uart_tx(UART_TXD),
|
||||
.uart_cts(UART_CTS),
|
||||
.ps2_clk(PS2_KBCLK),
|
||||
.ps2_din(PS2_KBDAT),
|
||||
.ps2_select(1'b1),
|
||||
.vga_h_sync(VGA_HS),
|
||||
.vga_v_sync(VGA_VS),
|
||||
.vga_red(r_bit),
|
||||
.vga_grn(g_bit),
|
||||
.vga_blu(b_bit),
|
||||
.pc_monitor(pc_monitor)
|
||||
);
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Core of system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME(BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME(FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME(RAM_FILENAME),
|
||||
.VRAM_FILENAME(VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME(WOZMON_ROM_FILENAME)
|
||||
) apple1_top (
|
||||
.clk25 (clk25),
|
||||
.rst_n (BUTTON[0]), // we don't have any reset pulse..
|
||||
.uart_rx (UART_RXD),
|
||||
.uart_tx (UART_TXD),
|
||||
.uart_cts (UART_CTS),
|
||||
.ps2_clk (PS2_KBCLK),
|
||||
.ps2_din (PS2_KBDAT),
|
||||
.key_select(2'b10), // PS/2 enabled, UART TX disabled
|
||||
// .key_select(2'b00), // PS/2 disabled, UART TX enabled
|
||||
.vga_h_sync(VGA_HS),
|
||||
.vga_v_sync(VGA_VS),
|
||||
.vga_red (r_bit),
|
||||
.vga_grn (g_bit),
|
||||
.vga_blu (b_bit),
|
||||
.pc_monitor(pc_monitor)
|
||||
);
|
||||
|
||||
// set the monochrome base colour here..
|
||||
assign VGA_R[3:0] = {4{r_bit}};
|
||||
assign VGA_G[3:0] = {4{g_bit}};
|
||||
assign VGA_B[3:0] = {4{b_bit}};
|
||||
// set the monochrome base colour here..
|
||||
assign VGA_R[3:0] = {4{r_bit}};
|
||||
assign VGA_G[3:0] = {4{g_bit}};
|
||||
assign VGA_B[3:0] = {4{b_bit}};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Display 6502 address on 7-segment displays
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Display 6502 address on 7-segment displays
|
||||
|
||||
segmentdisplay seg1(
|
||||
.clk(clk25),
|
||||
.latch(1'b1),
|
||||
.hexdigit_in(pc_monitor[3:0]),
|
||||
.display_out(HEX0_D)
|
||||
);
|
||||
segmentdisplay seg1 (
|
||||
.clk(clk25),
|
||||
.latch(1'b1),
|
||||
.hexdigit_in(pc_monitor[3:0]),
|
||||
.display_out(HEX0_D)
|
||||
);
|
||||
|
||||
segmentdisplay seg2(
|
||||
.clk(clk25),
|
||||
.latch(1'b1),
|
||||
.hexdigit_in(pc_monitor[7:4]),
|
||||
.display_out(HEX1_D)
|
||||
);
|
||||
segmentdisplay seg2 (
|
||||
.clk(clk25),
|
||||
.latch(1'b1),
|
||||
.hexdigit_in(pc_monitor[7:4]),
|
||||
.display_out(HEX1_D)
|
||||
);
|
||||
|
||||
segmentdisplay seg3(
|
||||
.clk(clk25),
|
||||
.latch(1'b1),
|
||||
.hexdigit_in(pc_monitor[11:8]),
|
||||
.display_out(HEX2_D)
|
||||
);
|
||||
segmentdisplay seg3 (
|
||||
.clk(clk25),
|
||||
.latch(1'b1),
|
||||
.hexdigit_in(pc_monitor[11:8]),
|
||||
.display_out(HEX2_D)
|
||||
);
|
||||
|
||||
segmentdisplay seg4(
|
||||
.clk(clk25),
|
||||
.latch(1'b1),
|
||||
.hexdigit_in(pc_monitor[15:12]),
|
||||
.display_out(HEX3_D)
|
||||
);
|
||||
segmentdisplay seg4 (
|
||||
.clk(clk25),
|
||||
.latch(1'b1),
|
||||
.hexdigit_in(pc_monitor[15:12]),
|
||||
.display_out(HEX3_D)
|
||||
);
|
||||
|
||||
assign LEDG = 0;
|
||||
assign LEDG = 0;
|
||||
|
||||
endmodule
|
||||
@@ -29,75 +29,76 @@ module apple1_top #(
|
||||
parameter VRAM_FILENAME = "../../../roms/vga_vram.bin",
|
||||
parameter WOZMON_ROM_FILENAME = "../../../roms/wozmon.hex"
|
||||
) (
|
||||
input pin3_clk_16mhz,// 16 MHz board clock
|
||||
input pin3_clk_16mhz, // 16 MHz board clock
|
||||
|
||||
// Outputs to VGA display
|
||||
output pin4, // hozizontal VGA sync pulse
|
||||
output pin5, // vertical VGA sync pulse
|
||||
output pin4, // hozizontal VGA sync pulse
|
||||
output pin5, // vertical VGA sync pulse
|
||||
|
||||
input pin6, // PS/2 data input
|
||||
input pin7, // PS/2 clock
|
||||
input pin6, // PS/2 data input
|
||||
input pin7, // PS/2 clock
|
||||
|
||||
// I/O interface to computer
|
||||
input pin11, // asynchronous serial data input from computer
|
||||
output pin12, // asynchronous serial data output to computer
|
||||
output pin13, // clear to send flag to computer
|
||||
input pin11, // asynchronous serial data input from computer
|
||||
output pin12, // asynchronous serial data output to computer
|
||||
output pin13, // clear to send flag to computer
|
||||
|
||||
output reg pin24, // red VGA signal
|
||||
output reg pin23, // red VGA signal
|
||||
output reg pin22, // green VGA signal
|
||||
output reg pin21, // green VGA signal
|
||||
output reg pin20, // blue VGA signal
|
||||
output reg pin19 // blue VGA signal
|
||||
output reg pin24, // red VGA signal
|
||||
output reg pin23, // red VGA signal
|
||||
output reg pin22, // green VGA signal
|
||||
output reg pin21, // green VGA signal
|
||||
output reg pin20, // blue VGA signal
|
||||
output reg pin19 // blue VGA signal
|
||||
|
||||
);
|
||||
|
||||
wire clk25;
|
||||
wire clk25;
|
||||
|
||||
// 16MHz up to 25MHz
|
||||
clock_pll clock_pll_inst(
|
||||
.REFERENCECLK(pin3_clk_16mhz),
|
||||
.PLLOUTGLOBAL(clk25),
|
||||
.RESET(1'b1)
|
||||
);
|
||||
// 16MHz up to 25MHz
|
||||
clock_pll clock_pll_inst (
|
||||
.REFERENCECLK(pin3_clk_16mhz),
|
||||
.PLLOUTGLOBAL(clk25),
|
||||
.RESET(1'b1)
|
||||
);
|
||||
|
||||
wire [15:0] pc_monitor;
|
||||
wire [15:0] pc_monitor;
|
||||
|
||||
reg [1:0] button = 2'b01;
|
||||
reg [1:0] button = 2'b01;
|
||||
|
||||
wire vga_red;
|
||||
wire vga_grn;
|
||||
wire vga_blu;
|
||||
wire vga_red;
|
||||
wire vga_grn;
|
||||
wire vga_blu;
|
||||
|
||||
// apple one main system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME (BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME (FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME (RAM_FILENAME),
|
||||
.VRAM_FILENAME (VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME (WOZMON_ROM_FILENAME)
|
||||
) my_apple1(
|
||||
.clk25(clk25),
|
||||
.rst_n(button[0]),
|
||||
.ps2_clk(pin7), // PS/2 not working with my keyboard
|
||||
.ps2_din(pin6),
|
||||
.ps2_select(1'b0), // change to 1 in order to test with keyboard
|
||||
.uart_rx(pin11),
|
||||
.uart_tx(pin12),
|
||||
.uart_cts(pin13),
|
||||
.vga_h_sync(pin4),
|
||||
.vga_v_sync(pin5),
|
||||
.vga_red(vga_red),
|
||||
.vga_grn(vga_grn),
|
||||
.vga_blu(vga_blu),
|
||||
.pc_monitor(pc_monitor)
|
||||
);
|
||||
// apple one main system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME(BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME(FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME(RAM_FILENAME),
|
||||
.VRAM_FILENAME(VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME(WOZMON_ROM_FILENAME)
|
||||
) my_apple1 (
|
||||
.clk25(clk25),
|
||||
.rst_n(button[0]),
|
||||
.ps2_clk(pin7), // PS/2 not working with my keyboard
|
||||
.ps2_din(pin6),
|
||||
// .key_select(2'b10), // PS/2 enabled, UART TX disabled
|
||||
.key_select(2'b00), // PS/2 disabled, UART TX enabled
|
||||
.uart_rx(pin11),
|
||||
.uart_tx(pin12),
|
||||
.uart_cts(pin13),
|
||||
.vga_h_sync(pin4),
|
||||
.vga_v_sync(pin5),
|
||||
.vga_red(vga_red),
|
||||
.vga_grn(vga_grn),
|
||||
.vga_blu(vga_blu),
|
||||
.pc_monitor(pc_monitor)
|
||||
);
|
||||
|
||||
assign pin19 = vga_blu;
|
||||
assign pin20 = vga_blu;
|
||||
assign pin21 = vga_grn;
|
||||
assign pin22 = vga_grn;
|
||||
assign pin23 = vga_red;
|
||||
assign pin24 = vga_red;
|
||||
assign pin19 = vga_blu;
|
||||
assign pin20 = vga_blu;
|
||||
assign pin21 = vga_grn;
|
||||
assign pin22 = vga_grn;
|
||||
assign pin23 = vga_red;
|
||||
assign pin24 = vga_red;
|
||||
|
||||
endmodule
|
||||
@@ -30,16 +30,16 @@ module apple1_top #(
|
||||
parameter WOZMON_ROM_FILENAME = "../../../roms/wozmon.hex"
|
||||
) (
|
||||
// I/O interface to computer
|
||||
input uart_rx, // asynchronous serial data input from computer
|
||||
output uart_tx, // asynchronous serial data output to computer
|
||||
output uart_cts, // clear to send flag to computer
|
||||
input uart_rx, // asynchronous serial data input from computer
|
||||
output uart_tx, // asynchronous serial data output to computer
|
||||
output uart_cts, // clear to send flag to computer
|
||||
|
||||
// Outputs to VGA display
|
||||
output vga_h_sync, // hozizontal VGA sync pulse
|
||||
output vga_v_sync, // vertical VGA sync pulse
|
||||
output reg vga_red, // red VGA signal
|
||||
output reg vga_grn, // green VGA signal
|
||||
output reg vga_blu, // blue VGA signal
|
||||
output vga_h_sync, // hozizontal VGA sync pulse
|
||||
output vga_v_sync, // vertical VGA sync pulse
|
||||
output reg vga_red, // red VGA signal
|
||||
output reg vga_grn, // green VGA signal
|
||||
output reg vga_blu, // blue VGA signal
|
||||
|
||||
// Tricolor LED on the UPDuino
|
||||
output red_led,
|
||||
@@ -47,45 +47,45 @@ module apple1_top #(
|
||||
output blue_led
|
||||
);
|
||||
|
||||
wire [15:0] leds;
|
||||
assign red_led = ~leds[9];
|
||||
assign green_led = ~leds[8];
|
||||
assign blue_led = ~leds[7];
|
||||
wire [15:0] leds;
|
||||
assign red_led = ~leds[9];
|
||||
assign green_led = ~leds[8];
|
||||
assign blue_led = ~leds[7];
|
||||
|
||||
wire clk25;
|
||||
wire clk;
|
||||
wire clk25;
|
||||
wire clk;
|
||||
|
||||
SB_HFOSC inthosc (
|
||||
.CLKHFPU(1'b1),
|
||||
.CLKHFEN(1'b1),
|
||||
.CLKHF(clk)
|
||||
);
|
||||
SB_HFOSC inthosc (
|
||||
.CLKHFPU(1'b1),
|
||||
.CLKHFEN(1'b1),
|
||||
.CLKHF (clk)
|
||||
);
|
||||
|
||||
pll pll(
|
||||
.clock_in(clk),
|
||||
.clock_out(clk25),
|
||||
);
|
||||
pll pll (
|
||||
.clock_in (clk),
|
||||
.clock_out(clk25),
|
||||
);
|
||||
|
||||
// apple one main system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME (BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME (FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME (RAM_FILENAME),
|
||||
.VRAM_FILENAME (VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME (WOZMON_ROM_FILENAME)
|
||||
) my_apple1(
|
||||
.clk25(clk25),
|
||||
.rst_n(1'b1),
|
||||
.uart_rx(uart_rx),
|
||||
.uart_tx(uart_tx),
|
||||
.uart_cts(uart_cts),
|
||||
.vga_h_sync(vga_h_sync),
|
||||
.vga_v_sync(vga_v_sync),
|
||||
.vga_red(vga_red),
|
||||
.vga_grn(vga_grn),
|
||||
.vga_blu(vga_blu),
|
||||
.pc_monitor(leds),
|
||||
.ps2_select(1'b0), // no ps2 keyboard right now
|
||||
);
|
||||
// apple one main system
|
||||
apple1 #(
|
||||
.BASIC_FILENAME(BASIC_FILENAME),
|
||||
.FONT_ROM_FILENAME(FONT_ROM_FILENAME),
|
||||
.RAM_FILENAME(RAM_FILENAME),
|
||||
.VRAM_FILENAME(VRAM_FILENAME),
|
||||
.WOZMON_ROM_FILENAME(WOZMON_ROM_FILENAME)
|
||||
) my_apple1 (
|
||||
.clk25(clk25),
|
||||
.rst_n(1'b1),
|
||||
.uart_rx(uart_rx),
|
||||
.uart_tx(uart_tx),
|
||||
.uart_cts(uart_cts),
|
||||
.vga_h_sync(vga_h_sync),
|
||||
.vga_v_sync(vga_v_sync),
|
||||
.vga_red(vga_red),
|
||||
.vga_grn(vga_grn),
|
||||
.vga_blu(vga_blu),
|
||||
.pc_monitor(leds),
|
||||
.key_select(1'b00) // UART only for now
|
||||
);
|
||||
|
||||
endmodule
|
||||
Reference in new issue
Block a user