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)
|
.new_rx_data(new_rx_data)
|
||||||
);
|
);
|
||||||
|
|
||||||
reg [13:0] addr_q, addr_d;
|
reg [13:0] addr_q, addr_d, addr_t, addr_n, addr_r;
|
||||||
reg [6:0] scroll_q, scroll_d;
|
reg[7:0] write_data_q, write_data_d;
|
||||||
reg[7:0] write_data;
|
reg write_enable, write_enable_c_q, write_enable_c_d;
|
||||||
reg write_enable;
|
|
||||||
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(
|
||||||
.clk(hdmi_clk),
|
.clk(hdmi_clk),
|
||||||
.read_address(char_index_q),
|
.read_address(char_index_q),
|
||||||
.write_address(addr_q),
|
.write_address(addr_q-1),
|
||||||
.read_data(sram_read_data),
|
.read_data(sram_read_data),
|
||||||
.write_data(write_data),
|
.write_data(write_data_q),
|
||||||
.write_en(write_enable)
|
.write_en(write_enable)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -222,7 +221,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_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 = char_index_d[5:0];
|
||||||
char_color = 6'b111111;
|
char_color = 6'b111111;
|
||||||
|
@ -257,58 +256,38 @@ module mojo_top(
|
||||||
frame_d = frame_q + 1'b1;
|
frame_d = frame_q + 1'b1;
|
||||||
end
|
end
|
||||||
|
|
||||||
// new_tx_data = 1'b0;
|
// Disable write during IO request
|
||||||
// write_enable = 1'b0;
|
write_enable = z80_ioreq && write_enable_c_q;
|
||||||
// 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
|
|
||||||
end
|
end
|
||||||
|
|
||||||
reg bottom_of_screen_q, bottom_of_screen_d;
|
|
||||||
|
|
||||||
always @(posedge z80_clk) begin
|
always @(posedge z80_clk) begin
|
||||||
write_enable = 1'b0;
|
write_data_d = write_data_q;
|
||||||
write_data = 1'b0;
|
write_enable_c_d = write_enable_c_q;
|
||||||
addr_d = addr_q;
|
addr_d = addr_q;
|
||||||
scroll_d = scroll_q;
|
|
||||||
bottom_of_screen_d = bottom_of_screen_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_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
|
||||||
if (z80_data == "\r") 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
|
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
|
end else begin
|
||||||
write_enable = 1'b1;
|
write_data_d = z80_data - 32;
|
||||||
write_data = z80_data - 32;
|
addr_d = addr_t;
|
||||||
addr_d = addr_q + 1'b1;
|
write_enable_c_d = 1;
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if (bottom_of_screen_d == 1 && addr_d >= CHAR_HMAX*scroll_q) begin
|
// IO request starts
|
||||||
scroll_d = (scroll_q + 1'b1) % CHAR_VMAX;
|
always @(negedge z80_ioreq) begin
|
||||||
end
|
addr_t = (addr_q + 1) % (CHAR_HMAX*CHAR_VMAX);
|
||||||
|
addr_n = (addr_q + CHAR_HMAX) % (CHAR_HMAX*CHAR_VMAX);
|
||||||
if (addr_d >= CHAR_HMAX*CHAR_VMAX) begin
|
addr_r = (addr_q - (addr_q % CHAR_HMAX)) % (CHAR_HMAX*CHAR_VMAX);
|
||||||
bottom_of_screen_d = 1'b1;
|
|
||||||
addr_d = addr_d - CHAR_HMAX*CHAR_VMAX;
|
|
||||||
end
|
|
||||||
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
always @(posedge hdmi_clk) begin
|
always @(posedge hdmi_clk) begin
|
||||||
|
@ -316,16 +295,14 @@ 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;
|
||||||
scroll_q <= 1'b0;
|
write_data_q <= 0;
|
||||||
bottom_of_screen_q <= 1'b0;
|
write_enable_c_q <= 0;
|
||||||
end else begin
|
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;
|
frame_q <= frame_d;
|
||||||
char_index_q <= char_index_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
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Reference in New Issue
Block a user