diff --git a/rtl/apple1.v b/rtl/apple1.v index d96560d..1e25531 100644 --- a/rtl/apple1.v +++ b/rtl/apple1.v @@ -43,13 +43,12 @@ module apple1( // interrupt signa input INT_n, - // 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 + // video outputs + output vga_h_sync, // hozizontal sync pulse + output vga_v_sync, // vertical sync pulse + output [5:0] vga_red, // red signal + output [5:0] vga_grn, // green signal + output [5:0] vga_blu, // blue signal output reset_key, // keyboard shortcut for reset output poweroff_key // keyboard shortcut for poweroff/on diff --git a/rtl/apple1_mist.sv b/rtl/apple1_mist.sv index d3eb726..d46b599 100644 --- a/rtl/apple1_mist.sv +++ b/rtl/apple1_mist.sv @@ -15,10 +15,10 @@ // TODO keyboard: isolate ps2 keyboard from apple1 // TODO keyboard: check ps2 clock // TODO keyboard: make a true ascii keyboard +// TODO keyboard: why can't be reset hit twice ? // TODO osd menu yellow, why it doesn't work? // TODO display: check NTSC AD724 hsync problem -// TODO display: powerup values -// TODO display: simplify rom font +// TODO display: blinking at powerup // TODO display: reduce to 512 bytes font // TODO display: check parameters vs real apple1 // TODO display: check cursor blinking vs 555 timings @@ -88,10 +88,6 @@ localparam conf_str_len = $size(CONF_STR)>>3; wire st_reset_switch = buttons[1]; - -wire r, g, b; -wire hs, vs; - wire [31:0] status; wire [1:0] buttons; wire [1:0] switches; @@ -306,6 +302,11 @@ wire [7:0] bus_dout = rom_cs ? rom_dout : wire reset_key; wire poweroff_key; +wire [5:0] r; +wire [5:0] g; +wire [5:0] b; +wire hs, vs; + // detects the rising edge of the keyboard reset key // otherwise keyboard stays in reset mode wire reset_key_edge = reset_key_old == 0 && reset_key == 1; @@ -357,7 +358,7 @@ apple1 apple1 mist_video #( - .COLOR_DEPTH(1), // 1 bit color depth + .COLOR_DEPTH(6), // 1 bit color depth .OSD_AUTO_CE(1), // OSD autodetects clock enable .OSD_COLOR(3'b110), // yellow menu color .SYNC_AND(1), diff --git a/rtl/display.v b/rtl/display.v index e0b6a5f..1f63986 100644 --- a/rtl/display.v +++ b/rtl/display.v @@ -8,11 +8,11 @@ module display ( input clr_screen, // clear screen button // video output - output vga_h_sync, // horizontal 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 + output vga_h_sync, // horizontal sync pulse + output vga_v_sync, // vertical sync pulse + output [5:0] vga_red, // red signal + output [5:0] vga_grn, // green signal + output [5:0] vga_blu, // blue signal output reg ready, // display ready (PB7 of CIA) @@ -184,11 +184,15 @@ module display ( assign font_pixel = h_dot; assign font_line = v_dot * 2 + 4; + + wire cross_talk_artifact = (h_active & v_active) && v_dot == 0 && h_dot == 0; + + wire [5:0] pixel_out = { font_out, font_out, font_out, font_out, font_out | cross_talk_artifact, font_out }; // vga signals out to monitor - assign vga_red = (h_active & v_active) ? font_out : 1'b0; - assign vga_grn = (h_active & v_active) ? font_out : 1'b0; - assign vga_blu = (h_active & v_active) ? font_out : 1'b0; + assign vga_red = (h_active & v_active) ? pixel_out : 6'b0; + assign vga_grn = (h_active & v_active) ? pixel_out : 6'b0; + assign vga_blu = (h_active & v_active) ? pixel_out : 6'b0; assign vga_h_sync = (h_cnt < h_pulse) ? 0 : 1; assign vga_v_sync = (v_cnt < v_pulse) ? 0 : 1; diff --git a/rtl/font_rom.v b/rtl/font_rom.v index 2384b1f..df69331 100644 --- a/rtl/font_rom.v +++ b/rtl/font_rom.v @@ -30,12 +30,14 @@ module font_rom ( ); reg [7:0] rom[0:1023]; + //reg [7:0] rom[0:511]; initial $readmemh("roms/vga_font_bitreversed.hex", rom, 0, 1023); + //$readmemb("roms/s2513.bin", rom, 0, 511); // double height of pixel by ignoring bit 0 - wire [3:0] line_ptr = line[4:1]; + wire [3:0] line_ptr = line[4:1]; // Note: Quartus II reverses the pixels when we do: // @@ -53,6 +55,7 @@ module font_rom ( always @(posedge clk) begin romout = rom[(character * 10) + {2'd0, line_ptr}]; + //romout = rom[(character * 8) + {2'd0, line_ptr}]; out <= romout[pixel]; end