Reimplemented scrolling, still kind of jenky

This commit is contained in:
Dreaded_X 2020-04-21 22:06:44 +02:00
parent 2a6d26f7a4
commit 87d4c09c95

View File

@ -203,6 +203,8 @@ module mojo_top(
reg [13:0] addr_q, addr_d, addr_t, addr_n, addr_r;
reg[7:0] write_data_q, write_data_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;
wire[7:0] sram_read_data;
sram #(.SIZE(8), .DEPTH(CHAR_HMAX*CHAR_VMAX)) sram(
@ -221,7 +223,7 @@ module mojo_top(
charx = (hdmix >> (SCALE-1)) % 8;
chary = (hdmiy >> (SCALE-1)) % 8;
char_index_d = (hdmix >> (SCALE+2)) + CHAR_HMAX*(hdmiy >> (SCALE+2));
char_index_d = ((hdmix >> (SCALE+2)) + CHAR_HMAX*(hdmiy >> (SCALE+2)) + bottom_q*CHAR_HMAX*((scroll_q-1) % CHAR_VMAX)) % (CHAR_HMAX*CHAR_VMAX);
//char_color = char_index_d[5:0];
char_color = 6'b111111;
@ -280,14 +282,31 @@ module mojo_top(
addr_d = addr_t;
write_enable_c_d = 1;
end
bottom_d = bottom_t;
scroll_d = scroll_t;
end
end
// IO request starts
always @(negedge z80_ioreq) begin
addr_t = (addr_q + 1) % (CHAR_HMAX*CHAR_VMAX);
addr_n = (addr_q + CHAR_HMAX) % (CHAR_HMAX*CHAR_VMAX);
addr_t = (addr_q + 1);
addr_n = (addr_q + CHAR_HMAX);
addr_r = (addr_q - (addr_q % CHAR_HMAX)) % (CHAR_HMAX*CHAR_VMAX);
bottom_t = bottom_q;
scroll_t = scroll_q;
if ((addr_t >= (CHAR_HMAX*CHAR_VMAX)) || (addr_n >= (CHAR_HMAX*CHAR_VMAX)) || (addr_r >= (CHAR_HMAX*CHAR_VMAX))) begin
bottom_t = 1;
scroll_t = scroll_q + 1;
end else if ((bottom_q == 1) && ((addr_t >= (scroll_q*CHAR_HMAX)) || (addr_n >= (scroll_q*CHAR_HMAX)) || (addr_r >= (scroll_q*CHAR_HMAX)))) begin
scroll_t = scroll_q + 1;
end
scroll_t = scroll_t % CHAR_VMAX;
addr_t = addr_t % (CHAR_HMAX*CHAR_VMAX);
addr_n = addr_n % (CHAR_HMAX*CHAR_VMAX);
addr_r = addr_r % (CHAR_HMAX*CHAR_VMAX);
end
always @(posedge hdmi_clk) begin
@ -295,12 +314,16 @@ module mojo_top(
frame_q <= 1'b0;
char_index_q <= 1'b0;
addr_q <= 1'b0;
bottom_q <= 0;
scroll_q <= 1'b0;
write_data_q <= 0;
write_enable_c_q <= 0;
end else begin
frame_q <= frame_d;
char_index_q <= char_index_d;
addr_q <= addr_d;
bottom_q <= bottom_d;
scroll_q <= scroll_d;
write_data_q <= write_data_d;
write_enable_c_q <= write_enable_c_d;
end