Peripherals/ascii_to_HD44780_driver: Added support for the \e[H and \e[2J escape codes to clear the screen after the i2c_bootloader is done
This commit is contained in:
parent
aac55f7038
commit
c527a053a6
@ -84,6 +84,10 @@ jz rom_read_end
|
||||
jmp rom_read_loop
|
||||
|
||||
rom_read_end:
|
||||
|
||||
mov bx,#clear_code
|
||||
call print
|
||||
|
||||
MOV AX,#0xC000
|
||||
JMP AX
|
||||
|
||||
@ -173,6 +177,7 @@ sixty_prc_txt: .ASCII '60%\r\0'
|
||||
seventy_prc_txt: .ASCII '70%\r\0'
|
||||
eighty_prc_txt: .ASCII '80%\r\0'
|
||||
ninty_prc_txt: .ASCII '90%\r\0'
|
||||
clear_code: DB 0x1B,0x5B,0x48,0x1B,0x5B,0x32,0x4a,0x00
|
||||
|
||||
.ORG 0xFFF0
|
||||
MOV AX,#0xF800
|
||||
|
@ -67,6 +67,8 @@ reg [7:0] driver_state =0;
|
||||
|
||||
reg next_line;
|
||||
|
||||
reg [7:0]clear_count;
|
||||
|
||||
always @(posedge clock) begin
|
||||
if(rst_n==0)begin
|
||||
in_data_ready<=0;
|
||||
@ -97,14 +99,18 @@ always @(posedge clock) begin
|
||||
cmd_data<=1'b0;
|
||||
next_line<=1;
|
||||
end else if(data_write_req==1)begin
|
||||
if(in_ascii_data==8'h0A)begin
|
||||
if(in_ascii_data==8'h0A)begin // '\n'
|
||||
driver_state<=8'd6;
|
||||
cmd_data<=1'b0;
|
||||
next_line<=1;
|
||||
end else if(in_ascii_data==8'h0D)begin
|
||||
end else if(in_ascii_data==8'h0D)begin // '\r'
|
||||
driver_state<=8'd6;
|
||||
cmd_data<=1'b0;
|
||||
next_line<=0;
|
||||
end else if(in_ascii_data==8'h1b)begin // '\e'
|
||||
driver_state<=8'd13;
|
||||
cmd_data<=1'b1;
|
||||
in_data_ready<=0;
|
||||
end else begin
|
||||
if (in_ascii_data[7:5]==3'b000||in_ascii_data[7:7]==1'b1)
|
||||
if(in_ascii_data==8'h00)
|
||||
@ -204,12 +210,139 @@ always @(posedge clock) begin
|
||||
if(done_writing)
|
||||
driver_state<=8'd0;
|
||||
end
|
||||
8'd13:begin // Escape sequence start
|
||||
if(data_write_req==1'b0)begin
|
||||
driver_state<=8'd14;
|
||||
in_data_ready<=1;
|
||||
end
|
||||
end
|
||||
8'd14:begin
|
||||
if(data_write_req==1'b1)begin
|
||||
in_data_ready<=1'b0;
|
||||
case(in_ascii_data[7:0])
|
||||
8'h5b:begin// '['
|
||||
driver_state<=8'd16;
|
||||
end
|
||||
default:begin
|
||||
driver_state<=8'd15;
|
||||
end
|
||||
endcase
|
||||
end
|
||||
end
|
||||
8'd15:begin
|
||||
if(data_write_req==1'b0)begin
|
||||
driver_state<=8'd0;
|
||||
end
|
||||
end
|
||||
8'd16:begin // Second part of escape sequency
|
||||
if(data_write_req==1'b0)begin
|
||||
in_data_ready<=1'b1;
|
||||
driver_state<=8'd17;
|
||||
end
|
||||
end
|
||||
8'd17:begin
|
||||
if(data_write_req==1'b1)begin
|
||||
driver_state<=8'd17;
|
||||
in_data_ready<=1'b0;
|
||||
case(in_ascii_data[7:0])
|
||||
8'h48:begin// 'H'
|
||||
driver_state<=8'd25;
|
||||
cmd_data<=1'b0;
|
||||
clear_count<=8'd80;
|
||||
end
|
||||
8'h32:begin// '2'
|
||||
driver_state<=8'd23;
|
||||
end
|
||||
default: begin
|
||||
driver_state<=8'd15;
|
||||
end
|
||||
endcase
|
||||
end
|
||||
end
|
||||
8'd18:begin
|
||||
data<=4'h2;
|
||||
if(!done_writing)begin
|
||||
driver_state<=8'd19;
|
||||
write_req<=1'b0;
|
||||
end else
|
||||
write_req<=1'b1;
|
||||
end
|
||||
8'd19:begin
|
||||
if(done_writing==1)
|
||||
driver_state<=8'd20;
|
||||
end
|
||||
8'd20:begin
|
||||
data<=4'h0;
|
||||
if(!done_writing)begin
|
||||
driver_state<=8'd21;
|
||||
write_req<=1'b0;
|
||||
end else
|
||||
write_req<=1'b1;
|
||||
end
|
||||
8'd21:begin
|
||||
if(done_writing)begin
|
||||
driver_state<=8'd22;
|
||||
clear_count<=clear_count-8'd1;
|
||||
end
|
||||
end
|
||||
8'd22:begin
|
||||
if(clear_count==8'd0)begin
|
||||
driver_state<=8'd0;
|
||||
end else begin
|
||||
driver_state<=8'd18;
|
||||
end
|
||||
end
|
||||
8'd23:begin
|
||||
if(data_write_req==1'b0)begin
|
||||
in_data_ready<=1'b1;
|
||||
driver_state<=8'd24;
|
||||
end
|
||||
end
|
||||
8'd24:begin
|
||||
if(data_write_req==1'b1)begin
|
||||
driver_state<=8'd17;
|
||||
in_data_ready<=1'b0;
|
||||
case(in_ascii_data[7:0])
|
||||
8'h4a:begin// 'J'
|
||||
driver_state<=8'd18;
|
||||
clear_count<=8'd80;
|
||||
end
|
||||
default:begin
|
||||
driver_state<=8'd0;
|
||||
end
|
||||
endcase
|
||||
end
|
||||
end
|
||||
8'd25:begin
|
||||
data<=4'h8;
|
||||
if(!done_writing)begin
|
||||
driver_state<=8'd26;
|
||||
write_req<=1'b0;
|
||||
end else
|
||||
write_req<=1'b1;
|
||||
end
|
||||
8'd26:begin
|
||||
if(done_writing==1)
|
||||
driver_state<=8'd27;
|
||||
end
|
||||
8'd27:begin
|
||||
data<=4'h0;
|
||||
if(!done_writing)begin
|
||||
driver_state<=8'd28;
|
||||
write_req<=1'b0;
|
||||
end else
|
||||
write_req<=1'b1;
|
||||
end
|
||||
8'd28:begin
|
||||
if(done_writing)begin
|
||||
driver_state<=8'd0;
|
||||
col<=0;
|
||||
line<=0;
|
||||
end
|
||||
end
|
||||
default: begin driver_state<=0; end
|
||||
endcase
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
|
||||
endmodule
|
||||
|
Loading…
Reference in New Issue
Block a user