Redid z80 integration from start, duplicate chars have been fixed
This commit is contained in:
parent
bd9a0f03d8
commit
2a6d26f7a4
|
@ -201,17 +201,16 @@ module mojo_top(
|
|||
.new_rx_data(new_rx_data)
|
||||
);
|
||||
|
||||
reg [13:0] addr_q, addr_d;
|
||||
reg [6:0] scroll_q, scroll_d;
|
||||
reg[7:0] write_data;
|
||||
reg write_enable;
|
||||
reg [13:0] addr_q, addr_d, addr_t, addr_n, addr_r;
|
||||
reg[7:0] write_data_q, write_data_d;
|
||||
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(
|
||||
.clk(hdmi_clk),
|
||||
.read_address(char_index_q),
|
||||
.write_address(addr_q),
|
||||
.write_address(addr_q-1),
|
||||
.read_data(sram_read_data),
|
||||
.write_data(write_data),
|
||||
.write_data(write_data_q),
|
||||
.write_en(write_enable)
|
||||
);
|
||||
|
||||
|
@ -222,7 +221,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_HMAX*scroll_q) % (CHAR_HMAX*CHAR_VMAX);
|
||||
char_index_d = (hdmix >> (SCALE+2)) + CHAR_HMAX*(hdmiy >> (SCALE+2));
|
||||
|
||||
//char_color = char_index_d[5:0];
|
||||
char_color = 6'b111111;
|
||||
|
@ -256,76 +255,54 @@ module mojo_top(
|
|||
if (hdmix == WIDTH-1 && hdmiy == HEIGHT-1) begin
|
||||
frame_d = frame_q + 1'b1;
|
||||
end
|
||||
|
||||
// new_tx_data = 1'b0;
|
||||
// write_enable = 1'b0;
|
||||
// write_data = 1'b0;
|
||||
// addr_d = addr_q;
|
||||
// if (new_rx_data) begin
|
||||
// new_tx_data = 1'b1;
|
||||
// tx_data = rx_data;
|
||||
//
|
||||
// if (rx_data == "\r") begin
|
||||
// end else if (rx_data == "\n") begin
|
||||
// addr_d = addr_q - (addr_q % CHAR_HMAX) + CHAR_HMAX;
|
||||
// end else if (rx_data == 8) begin
|
||||
// addr_d = addr_q - 1'b1;
|
||||
// end else begin
|
||||
// write_enable = 1'b1;
|
||||
// write_data = rx_data - 32;
|
||||
// addr_d = addr_q + 1'b1;
|
||||
// end
|
||||
// end
|
||||
|
||||
// Disable write during IO request
|
||||
write_enable = z80_ioreq && write_enable_c_q;
|
||||
end
|
||||
|
||||
reg bottom_of_screen_q, bottom_of_screen_d;
|
||||
|
||||
always @(posedge z80_clk) begin
|
||||
write_enable = 1'b0;
|
||||
write_data = 1'b0;
|
||||
addr_d = addr_q;
|
||||
scroll_d = scroll_q;
|
||||
bottom_of_screen_d = bottom_of_screen_q;
|
||||
write_data_d = write_data_q;
|
||||
write_enable_c_d = write_enable_c_q;
|
||||
addr_d = addr_q;
|
||||
|
||||
// @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
|
||||
if (z80_data == "\r") begin
|
||||
addr_d = addr_q - (addr_q % CHAR_HMAX);
|
||||
addr_d = addr_r;
|
||||
write_enable_c_d = 0;
|
||||
end else if (z80_data == "\n") begin
|
||||
addr_d = addr_q + CHAR_HMAX;
|
||||
addr_d = addr_n;
|
||||
write_enable_c_d = 0;
|
||||
end else begin
|
||||
write_enable = 1'b1;
|
||||
write_data = z80_data - 32;
|
||||
addr_d = addr_q + 1'b1;
|
||||
write_data_d = z80_data - 32;
|
||||
addr_d = addr_t;
|
||||
write_enable_c_d = 1;
|
||||
end
|
||||
|
||||
if (bottom_of_screen_d == 1 && addr_d >= CHAR_HMAX*scroll_q) begin
|
||||
scroll_d = (scroll_q + 1'b1) % CHAR_VMAX;
|
||||
end
|
||||
|
||||
if (addr_d >= CHAR_HMAX*CHAR_VMAX) begin
|
||||
bottom_of_screen_d = 1'b1;
|
||||
addr_d = addr_d - CHAR_HMAX*CHAR_VMAX;
|
||||
end
|
||||
|
||||
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_r = (addr_q - (addr_q % CHAR_HMAX)) % (CHAR_HMAX*CHAR_VMAX);
|
||||
end
|
||||
|
||||
always @(posedge hdmi_clk) begin
|
||||
if (rst) begin
|
||||
frame_q <= 1'b0;
|
||||
char_index_q <= 1'b0;
|
||||
addr_q <= 1'b0;
|
||||
scroll_q <= 1'b0;
|
||||
bottom_of_screen_q <= 1'b0;
|
||||
write_data_q <= 0;
|
||||
write_enable_c_q <= 0;
|
||||
end else begin
|
||||
if (z80_ioreq == 1) begin
|
||||
addr_q <= addr_d;
|
||||
scroll_q <= scroll_d;
|
||||
bottom_of_screen_q <= bottom_of_screen_d;
|
||||
end
|
||||
frame_q <= frame_d;
|
||||
char_index_q <= char_index_d;
|
||||
addr_q <= addr_d;
|
||||
write_data_q <= write_data_d;
|
||||
write_enable_c_q <= write_enable_c_d;
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Reference in New Issue
Block a user