OSDN Git Service

定期コミット
[oca1/test.git] / VGADisplay / src / from_ctrl.nsl
index e7eeb96..9f84681 100644 (file)
@@ -1,4 +1,4 @@
-#include "font_rom.nsh"
+#include "font_rom.nsl"
 
 /**
 *      font control module
@@ -33,7 +33,7 @@ declare from_ctrl {
        func_out fo_write_vram(o_vram_adrs, o_vram_wdata) ;     // VRAM\82É8\83r\83b\83g\8f\91\82«\82±\82Þ
        func_out fo_read_vram(o_vram_adrs) : i_vram_rdata ; // VRAM\82Ì8\83r\83b\83g\93Ç\82Ý\8d\9e\82Ý
 
-       func_out fo_complete_call() ;   // font rom control\83R\83}\83\93\83h\8a®\97¹
+       func_out busy_call() ;
 }
 module from_ctrl {
        font_rom U_FONT_ROM ;   // FONT ROM SUB MODULE
@@ -44,33 +44,71 @@ module from_ctrl {
        wire w_vram_adrs[14] ;
        func_self fs_font_read( w_code_num ):w_font_data ;
        func_self fs_adrs_exec( w_word_adrs, w_line_adrs ) : w_vram_adrs ;
+       func_self fs_complete_call() ;  // font rom control\83R\83}\83\93\83h\8a®\97¹
        wire w_line_value[14] ;
 
        reg r_word[64] = 0 ;
        reg r_start_adrs[14] = 0 ;
-       reg r_cnt[3] = 0 ;
+       reg r_cnt[14] = 0 ;
+       reg busy_flag = 0 ;
 
+       if(
+               fi_write_word | fi_delete_word | fi_delete_line | fi_delete_display |
+               fi_slide_line | busy_flag
+       ) {
+               busy_call() ;
+       }
+
+       if(
+               fi_write_word | fi_delete_word | fi_delete_line | fi_delete_display |
+               fi_slide_line
+       ) {
+               busy_flag := 1 ;
+       } else if(fs_complete_call) {
+               busy_flag := 0 ;
+       }
+
+       // VRAM\82É1\95\8e\9a\8f\91\82­
        func fi_write_word seq {
                {
                        r_word := fs_font_read( i_code_num ) ;
                        r_start_adrs := fs_adrs_exec(i_word_adrs, i_line_adrs) ;
                }
                for(r_cnt:=0;r_cnt<=7;r_cnt++) {
+                       fo_write_vram(r_start_adrs, 8'd0) ;
                        fo_write_vram(r_start_adrs, r_word[63:56]) ;
                        {
                                r_start_adrs := r_start_adrs + 14'd40 ;
                                r_word := r_word<<8 ;
                        }
                }
+               fs_complete_call() ;
        }
 
        func fi_delete_word seq {
+               r_start_adrs := fs_adrs_exec(i_word_adrs, i_line_adrs) ;
+               
+               for(r_cnt:=0;r_cnt<=7;r_cnt++) {
+                       fo_write_vram(r_start_adrs, 8'd0) ;
+                       r_start_adrs := r_start_adrs + 14'd40 ;
+               }
+               fs_complete_call() ;
        }
 
        func fi_delete_line seq {
+               r_start_adrs := fs_adrs_exec(6'd0, i_line_adrs) ;
+               for(r_cnt:=0;r_cnt<320;r_cnt++){
+                       fo_write_vram(r_start_adrs, 8'd0) ;                     
+                       r_start_adrs++ ;
+               }
+               fs_complete_call() ;
        }
 
        func fi_delete_display seq {
+               for(r_cnt:=0;r_cnt<9600;r_cnt++){
+                       fo_write_vram(r_cnt, 8'd0) ;                    
+               }
+               fs_complete_call() ;
        }
        
        func fi_slide_line seq {