Reimplemented scrolling, still kind of jenky
This commit is contained in:
parent
2a6d26f7a4
commit
87d4c09c95
|
@ -203,6 +203,8 @@ module mojo_top(
|
||||||
|
|
||||||
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;
|
||||||
reg[7:0] write_data_q, write_data_d;
|
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;
|
reg write_enable, write_enable_c_q, write_enable_c_d;
|
||||||
wire[7:0] sram_read_data;
|
wire[7:0] sram_read_data;
|
||||||
sram #(.SIZE(8), .DEPTH(CHAR_HMAX*CHAR_VMAX)) sram(
|
sram #(.SIZE(8), .DEPTH(CHAR_HMAX*CHAR_VMAX)) sram(
|
||||||
|
@ -221,7 +223,7 @@ module mojo_top(
|
||||||
charx = (hdmix >> (SCALE-1)) % 8;
|
charx = (hdmix >> (SCALE-1)) % 8;
|
||||||
chary = (hdmiy >> (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 = char_index_d[5:0];
|
||||||
char_color = 6'b111111;
|
char_color = 6'b111111;
|
||||||
|
@ -280,14 +282,31 @@ module mojo_top(
|
||||||
addr_d = addr_t;
|
addr_d = addr_t;
|
||||||
write_enable_c_d = 1;
|
write_enable_c_d = 1;
|
||||||
end
|
end
|
||||||
|
bottom_d = bottom_t;
|
||||||
|
scroll_d = scroll_t;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
// IO request starts
|
// IO request starts
|
||||||
always @(negedge z80_ioreq) begin
|
always @(negedge z80_ioreq) begin
|
||||||
addr_t = (addr_q + 1) % (CHAR_HMAX*CHAR_VMAX);
|
addr_t = (addr_q + 1);
|
||||||
addr_n = (addr_q + CHAR_HMAX) % (CHAR_HMAX*CHAR_VMAX);
|
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);
|
||||||
|
|
||||||
|
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
|
end
|
||||||
|
|
||||||
always @(posedge hdmi_clk) begin
|
always @(posedge hdmi_clk) begin
|
||||||
|
@ -295,12 +314,16 @@ module mojo_top(
|
||||||
frame_q <= 1'b0;
|
frame_q <= 1'b0;
|
||||||
char_index_q <= 1'b0;
|
char_index_q <= 1'b0;
|
||||||
addr_q <= 1'b0;
|
addr_q <= 1'b0;
|
||||||
|
bottom_q <= 0;
|
||||||
|
scroll_q <= 1'b0;
|
||||||
write_data_q <= 0;
|
write_data_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;
|
||||||
char_index_q <= char_index_d;
|
char_index_q <= char_index_d;
|
||||||
addr_q <= addr_d;
|
addr_q <= addr_d;
|
||||||
|
bottom_q <= bottom_d;
|
||||||
|
scroll_q <= scroll_d;
|
||||||
write_data_q <= write_data_d;
|
write_data_q <= write_data_d;
|
||||||
write_enable_c_q <= write_enable_c_d;
|
write_enable_c_q <= write_enable_c_d;
|
||||||
end
|
end
|
||||||
|
|
Reference in New Issue
Block a user