+ if j = 101 then
+ run_tc := false;
+ assert(false) report "wtf @ schleife";
+ next mainl;
+ end if;
+
+ new_data <= '1';
+
+ case input(j) is
+ when nul => data <= ascii2sc(x"1c"); -- $ (enter)
+ when '!' => data <= ascii2sc(x"0e"); -- ! (backspace)
+ when '/' =>
+ data <= x"e0";
+ icwait(sys_clk, 1);
+ new_data <= '0';
+ icwait(sys_clk, 1);
+ new_data <= '1';
+ data <= SC_KP_DIV;
+ when others => data <= ascii2sc(std_logic_vector(to_unsigned(character'pos(input(j)),8)));
+ end case;
+
+ -- ack'en skippen, falls es ein "spezielles" zeichen ist (steht
+ -- in abhaengigkeit zum vorherigen zeichen)
+ if(not valid_char(data)) then
+ next mainl;
+ end if;
+
+ -- wuenschswert waere das hier:
+ -- > wait on s_backspace, s_take, do_it;
+ -- geht aber leider nicht, weil sich die signale vllt schon
+ -- geaendert haben
+ run_inner := true;
+ main_inner : while run_inner loop
+ icwait(sys_clk, 1);
+
+ run_inner := false;
+ if s_backspace = '1' or s_take = '1' then
+ icwait(sys_clk, 1);
+ wait on s_take; -- = '0'
+ icwait(sys_clk, 1);
+ elsif do_it = '1' then
+ -- dauert normalweiser noch laenger (parser braucht
+ -- relativ lange)
+ icwait(sys_clk, 7);
+ wait on do_it; -- = '0'
+ icwait(sys_clk, 850);
+
+ run_tc := false;
+ else
+ -- assert(false) report "history_tb: kann passieren. wenn tb haengt, dann hier auskommentieren";
+ run_inner := true;
+ end if;
+ end loop;
+ end loop;
+ report "==================";
+ end loop f_loop;
+
+ -- uart ist ziemlich langsam...
+ icwait(sys_clk, 1000000000);