shit not working lcd
authorMartin Perner <martin@perner.cc>
Sun, 16 Jan 2011 14:52:57 +0000 (15:52 +0100)
committerMartin Perner <martin@perner.cc>
Sun, 16 Jan 2011 14:52:57 +0000 (15:52 +0100)
cpu/src/extension_lcd_b_8.vhd
progs/testbench.s

index 119a1bd4a929a1c81cc9e751a5c3792558cd9775..7016a1953fbd2502014000f0f37374cfa5f05fd9 100644 (file)
@@ -15,6 +15,8 @@ use work.extension_lcd_pkg_8.all;
 architecture behav of extension_lcd_8 is
 
 constant CLK_Divide : integer := 16;
+constant LCD_Delay : std_logic_vector(19 downto 0) := x"3fffe";
+--constant LCD_Delay : std_logic_vector(19 downto 0) := x"0000e"; -- for simulation
 
 --w1_st_co(0) == 1 => ready for data
 --w1_st_co(1) == 1 => setup finished
@@ -184,7 +186,7 @@ begin
                                end if;
 
                        when DO_WAIT =>
-                               if lcd_set_delay < x"3fffe" then
+                               if lcd_set_delay < LCD_Delay then
                                        lcd_set_delay_nxt <= lcd_set_delay + 1;
                                else
                                        lcd_set_delay_nxt <= (others => '0');
@@ -216,7 +218,7 @@ begin
                                end if;
 
                        when DO_WAIT =>
-                               if lcd_set_delay < x"3fffe" then
+                               if lcd_set_delay < LCD_Delay then
                                        lcd_set_delay_nxt <= lcd_set_delay + 1;
                                else
                                        lcd_set_delay_nxt <= (others => '0');
@@ -267,6 +269,7 @@ begin
                        lcd_done_nxt  <= '1';
                        lcd_count_nxt <= 0;
                        lcd_st_nxt <= "00";
+               when others => null;
        end case;
 
 
@@ -283,6 +286,7 @@ begin
                when "100" => lcd_rom_data <= x"001";
                when "101" => lcd_rom_data <= x"006";
                when "110" => lcd_rom_data <= x"080";
+               when "111" => lcd_rom_data <= x"13C";
                when others => lcd_rom_data <= x"0b0"; --goto 0,0
                --      Line 1
                --when "000111" => lcd_rom_data <= x"120";      --      Welcome to the
index cc8b4dc58ef1fb7057769e4b36cca4e5756dc266..cc86e478d132b5626190157237f90c34824fedda 100644 (file)
@@ -1,5 +1,9 @@
 #include "dt_inc.s"
 .text
+       .define LCDBASE, 0x2060
+       .define LCDSTATUS, 0x0
+       .define LCDADDR, 0x4
+
 .org 0x0
 start:
        br+ main
@@ -18,12 +22,14 @@ main:
 
 loop:
        call u_recv_byte
-       cmpi r0, 0x42
-       breq reset_timer
-       call t_valget
-       addi r1, r0, 0
-       call u_send_uint
-       call u_send_newline
+       ldi r0, LCDBASE@lo
+       ldih r0, LCDBASE@hi
+       ldw r1, LCDSTATUS(r0)
+       call u_send_byte
+       ldi r0, LCDBASE@lo
+       ldih r0, LCDBASE@hi
+       ldis r1, 0x141
+       stw r1, LCDADDR(r0)
        br loop
 
 reset_timer: