Added backspace support
This commit is contained in:
parent
87d4c09c95
commit
5e1e3bbbcc
|
@ -201,8 +201,9 @@ avr_interface #(.CLK_FREQ(75000000)) vr_interface (
|
||||||
.new_rx_data(new_rx_data)
|
.new_rx_data(new_rx_data)
|
||||||
);
|
);
|
||||||
|
|
||||||
reg [13:0] addr_q, addr_d, addr_t, addr_n, addr_r;
|
reg [13:0] addr_q, addr_d, addr_t, addr_n, addr_r, addr_b;
|
||||||
reg[7:0] write_data_q, write_data_d;
|
reg[7:0] write_data_q, write_data_d;
|
||||||
|
reg[7:0] last_input_q, last_input_d;
|
||||||
reg[16:0] bottom_q, bottom_d, bottom_t;
|
reg[16:0] bottom_q, bottom_d, bottom_t;
|
||||||
reg[16:0] scroll_q, scroll_d, scroll_t;
|
reg[16:0] scroll_q, scroll_d, scroll_t;
|
||||||
reg write_enable, write_enable_c_q, write_enable_c_d;
|
reg write_enable, write_enable_c_q, write_enable_c_d;
|
||||||
|
@ -271,12 +272,17 @@ always @(posedge z80_clk) begin
|
||||||
// @todo Hook up address lines
|
// @todo Hook up address lines
|
||||||
// if (z80_ioreq != 1 && z80_m1 != 0 && z80_address[7:0] == 8'h10) begin
|
// if (z80_ioreq != 1 && z80_m1 != 0 && z80_address[7:0] == 8'h10) begin
|
||||||
if (z80_ioreq != 1 && z80_m1 != 0 && z80_wr != 1) begin
|
if (z80_ioreq != 1 && z80_m1 != 0 && z80_wr != 1) begin
|
||||||
|
last_input_d = z80_data;
|
||||||
if (z80_data == "\r") begin
|
if (z80_data == "\r") begin
|
||||||
addr_d = addr_r;
|
addr_d = addr_r;
|
||||||
write_enable_c_d = 0;
|
write_enable_c_d = 0;
|
||||||
end else if (z80_data == "\n") begin
|
end else if (z80_data == "\n") begin
|
||||||
addr_d = addr_n;
|
addr_d = addr_n;
|
||||||
write_enable_c_d = 0;
|
write_enable_c_d = 0;
|
||||||
|
end else if (z80_data == 8) begin
|
||||||
|
write_data_d = 0;
|
||||||
|
addr_d = addr_b;
|
||||||
|
write_enable_c_d = 1;
|
||||||
end else begin
|
end else begin
|
||||||
write_data_d = z80_data - 32;
|
write_data_d = z80_data - 32;
|
||||||
addr_d = addr_t;
|
addr_d = addr_t;
|
||||||
|
@ -292,6 +298,7 @@ always @(negedge z80_ioreq) begin
|
||||||
addr_t = (addr_q + 1);
|
addr_t = (addr_q + 1);
|
||||||
addr_n = (addr_q + CHAR_HMAX);
|
addr_n = (addr_q + CHAR_HMAX);
|
||||||
addr_r = (addr_q - (addr_q % CHAR_HMAX)) % (CHAR_HMAX*CHAR_VMAX);
|
addr_r = (addr_q - (addr_q % CHAR_HMAX)) % (CHAR_HMAX*CHAR_VMAX);
|
||||||
|
addr_b = addr_q;
|
||||||
|
|
||||||
bottom_t = bottom_q;
|
bottom_t = bottom_q;
|
||||||
scroll_t = scroll_q;
|
scroll_t = scroll_q;
|
||||||
|
@ -304,9 +311,16 @@ always @(negedge z80_ioreq) begin
|
||||||
|
|
||||||
scroll_t = scroll_t % CHAR_VMAX;
|
scroll_t = scroll_t % CHAR_VMAX;
|
||||||
|
|
||||||
|
if (last_input_q == 8) begin
|
||||||
|
addr_t = addr_t - 1;
|
||||||
|
addr_n = addr_n - 1;
|
||||||
|
addr_b = addr_b - 1;
|
||||||
|
end
|
||||||
|
|
||||||
addr_t = addr_t % (CHAR_HMAX*CHAR_VMAX);
|
addr_t = addr_t % (CHAR_HMAX*CHAR_VMAX);
|
||||||
addr_n = addr_n % (CHAR_HMAX*CHAR_VMAX);
|
addr_n = addr_n % (CHAR_HMAX*CHAR_VMAX);
|
||||||
addr_r = addr_r % (CHAR_HMAX*CHAR_VMAX);
|
addr_r = addr_r % (CHAR_HMAX*CHAR_VMAX);
|
||||||
|
addr_b = addr_b % (CHAR_HMAX*CHAR_VMAX);
|
||||||
end
|
end
|
||||||
|
|
||||||
always @(posedge hdmi_clk) begin
|
always @(posedge hdmi_clk) begin
|
||||||
|
@ -317,6 +331,7 @@ always @(posedge hdmi_clk) begin
|
||||||
bottom_q <= 0;
|
bottom_q <= 0;
|
||||||
scroll_q <= 1'b0;
|
scroll_q <= 1'b0;
|
||||||
write_data_q <= 0;
|
write_data_q <= 0;
|
||||||
|
last_input_q <= 0;
|
||||||
write_enable_c_q <= 0;
|
write_enable_c_q <= 0;
|
||||||
end else begin
|
end else begin
|
||||||
frame_q <= frame_d;
|
frame_q <= frame_d;
|
||||||
|
@ -325,6 +340,7 @@ always @(posedge hdmi_clk) begin
|
||||||
bottom_q <= bottom_d;
|
bottom_q <= bottom_d;
|
||||||
scroll_q <= scroll_d;
|
scroll_q <= scroll_d;
|
||||||
write_data_q <= write_data_d;
|
write_data_q <= write_data_d;
|
||||||
|
last_input_q <= last_input_d;
|
||||||
write_enable_c_q <= write_enable_c_d;
|
write_enable_c_q <= write_enable_c_d;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Reference in New Issue
Block a user