diff --git a/source/mojo_top.v b/source/mojo_top.v index 7113da8..90c3af1 100644 --- a/source/mojo_top.v +++ b/source/mojo_top.v @@ -201,8 +201,9 @@ avr_interface #(.CLK_FREQ(75000000)) vr_interface ( .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] last_input_q, last_input_d; reg[16:0] bottom_q, bottom_d, bottom_t; reg[16:0] scroll_q, scroll_d, scroll_t; 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 // 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 + last_input_d = z80_data; if (z80_data == "\r") begin addr_d = addr_r; write_enable_c_d = 0; end else if (z80_data == "\n") begin addr_d = addr_n; 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 write_data_d = z80_data - 32; addr_d = addr_t; @@ -292,6 +298,7 @@ always @(negedge z80_ioreq) begin addr_t = (addr_q + 1); addr_n = (addr_q + CHAR_HMAX); addr_r = (addr_q - (addr_q % CHAR_HMAX)) % (CHAR_HMAX*CHAR_VMAX); + addr_b = addr_q; bottom_t = bottom_q; scroll_t = scroll_q; @@ -304,9 +311,16 @@ always @(negedge z80_ioreq) begin 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_n = addr_n % (CHAR_HMAX*CHAR_VMAX); addr_r = addr_r % (CHAR_HMAX*CHAR_VMAX); + addr_b = addr_b % (CHAR_HMAX*CHAR_VMAX); end always @(posedge hdmi_clk) begin @@ -317,6 +331,7 @@ always @(posedge hdmi_clk) begin bottom_q <= 0; scroll_q <= 1'b0; write_data_q <= 0; + last_input_q <= 0; write_enable_c_q <= 0; end else begin frame_q <= frame_d; @@ -325,6 +340,7 @@ always @(posedge hdmi_clk) begin bottom_q <= bottom_d; scroll_q <= scroll_d; write_data_q <= write_data_d; + last_input_q <= last_input_d; write_enable_c_q <= write_enable_c_d; end end