more accurate cursor blinking
This commit is contained in:
parent
cb7aeba5a9
commit
22f36f9187
|
@ -156,20 +156,24 @@ module display (
|
||||||
end
|
end
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
// Cursor blink
|
// Cursor blinking.
|
||||||
|
// On the real Apple-I it's made via a 555 configured to trigger 1.92 Hz
|
||||||
|
|
||||||
reg blink;
|
localparam blink_max = 7457385; // 14318180/2/(1.92/2)
|
||||||
reg [22:0] blink_div;
|
localparam blink_thr = blink_max * 3/4; // ~3/4 duty cycle
|
||||||
|
localparam blink_rewind = blink_thr - (455 * 262); // sets blinking 1 frame before cursor turns on
|
||||||
|
|
||||||
|
reg [31:0] blink_cnt;
|
||||||
|
wire cursor_on = blink_cnt > blink_thr;
|
||||||
always @(posedge sys_clock or posedge reset)
|
always @(posedge sys_clock or posedge reset)
|
||||||
begin
|
begin
|
||||||
if (reset)
|
if (reset)
|
||||||
blink_div <= 0;
|
blink_cnt <= 0;
|
||||||
else
|
else
|
||||||
if(pixel_clken) begin
|
if(pixel_clken) begin
|
||||||
blink_div <= blink_div + 1;
|
if(cpu_clken & w_en & ready) blink_cnt <= blink_rewind; // when a char is received, blinking is turned off briefly
|
||||||
|
else if(blink_cnt > blink_max) blink_cnt <= 0;
|
||||||
if (blink_div == 23'd0)
|
else blink_cnt <= blink_cnt + 1;
|
||||||
blink <= ~blink;
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -179,8 +183,10 @@ module display (
|
||||||
// vram to font rom to display pipeline assignments
|
// vram to font rom to display pipeline assignments
|
||||||
assign cursor = {v_cursor, h_cursor};
|
assign cursor = {v_cursor, h_cursor};
|
||||||
assign vram_r_addr = {vram_v_addr, vram_h_addr};
|
assign vram_r_addr = {vram_v_addr, vram_h_addr};
|
||||||
|
|
||||||
|
wire [5:0] cursor_character = cursor_on ? 6'd0 : 6'd32;
|
||||||
|
|
||||||
assign font_char = (vram_r_addr != cursor) ? vram_dout : (blink) ? 6'd0 : 6'd32;
|
assign font_char = (vram_r_addr != cursor) ? vram_dout : cursor_character;
|
||||||
assign font_pixel = h_dot;
|
assign font_pixel = h_dot;
|
||||||
|
|
||||||
assign font_line = v_dot * 2 + 4;
|
assign font_line = v_dot * 2 + 4;
|
||||||
|
|
Loading…
Reference in New Issue