OSDN Git Service

font rom 追加
[oca1/test.git] / VGADisplay / src / from_ctrl.nsl
index 0c8695c..e7eeb96 100644 (file)
@@ -1,4 +1,119 @@
-declare from_ctrl{
+#include "font_rom.nsh"
+
+/**
+*      font control module
+*
+       \83R\83}\83\93\83h\83\81\83\82
+       \88ê\95\8e\9a\8f\91\82­              : write_word
+       1\95\8e\9a\8fÁ\82·               : delete_word
+       1\8ds\8fÁ\82·                 : delete_line
+       \91S\8ds\8fÁ\82·                        : delete_display
+       \88ê\8ds\8fã\82É\83X\83\89\83C\83h\82·\82é : slide_line
+       
+       busy flag 1
+       line adrs 0-29
+       word adrs 0-39
+       40[char] x 24[line]
+*
+**/
+
+declare from_ctrl {
+       input  i_word_adrs[6] ;
+       input  i_line_adrs[5] ;
+       input  i_code_num[8] ;
+       func_in fi_write_word( i_word_adrs, i_line_adrs, i_code_num ) ;         //\88ê\95\8e\9a\8f\91\82­
+       func_in fi_delete_word( i_word_adrs, i_line_adrs ) ;    //\88ê\95\8e\9a\8fÁ\82·
+       func_in fi_delete_line( i_line_adrs ) ;                                 //\88ê\8ds\8fÁ\82·
+       func_in fi_delete_display() ;                                                   //\88ê\89æ\96Ê\8fÁ\82·
+       func_in fi_slide_line() ;                                                               //\88ê\8ds\82¸\82ç\82·
+       
+       output o_vram_adrs[14] ;        // VRAM\82Ì\83A\83h\83\8c\83X\90ü
+       output o_vram_wdata[8] ;        // VRAM\82Ì\8f\91\82«\82±\82Ý\83f\81[\83^\90ü
+       input  i_vram_rdata[8] ;        // VRAM\82Ì\93Ç\82Ý\8d\9e\82Ý\83f\81[\83^\90ü
+       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¹
 }
-module from_ctrl{
+module from_ctrl {
+       font_rom U_FONT_ROM ;   // FONT ROM SUB MODULE
+       wire w_code_num[8] ;
+       wire w_font_data[64] ;
+       wire w_word_adrs[6] ;
+       wire w_line_adrs[5] ;
+       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 ;
+       wire w_line_value[14] ;
+
+       reg r_word[64] = 0 ;
+       reg r_start_adrs[14] = 0 ;
+       reg r_cnt[3] = 0 ;
+
+       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, r_word[63:56]) ;
+                       {
+                               r_start_adrs := r_start_adrs + 14'd40 ;
+                               r_word := r_word<<8 ;
+                       }
+               }
+       }
+
+       func fi_delete_word seq {
+       }
+
+       func fi_delete_line seq {
+       }
+
+       func fi_delete_display seq {
+       }
+       
+       func fi_slide_line seq {
+       }
+       
+       func fs_font_read {
+                return(U_FONT_ROM.fi_font_read( w_code_num )) ;
+       }
+       
+       func fs_adrs_exec {
+               any {
+                       w_line_adrs == 5'd0 :  w_line_value = 14'd0 ;
+                       w_line_adrs == 5'd1 :  w_line_value = 14'd320 ;
+                       w_line_adrs == 5'd2 :  w_line_value = 14'd640 ;
+                       w_line_adrs == 5'd3 :  w_line_value = 14'd960 ;
+                       w_line_adrs == 5'd4 :  w_line_value = 14'd1280 ;
+                       w_line_adrs == 5'd5 :  w_line_value = 14'd1600 ;
+                       w_line_adrs == 5'd6 :  w_line_value = 14'd1920 ;
+                       w_line_adrs == 5'd7 :  w_line_value = 14'd2240 ;
+                       w_line_adrs == 5'd8 :  w_line_value = 14'd2560 ;
+                       w_line_adrs == 5'd9 :  w_line_value = 14'd2880 ;
+                       w_line_adrs == 5'd10 : w_line_value = 14'd3200 ;
+                       w_line_adrs == 5'd11 : w_line_value = 14'd3520 ;
+                       w_line_adrs == 5'd12 : w_line_value = 14'd3840 ;
+                       w_line_adrs == 5'd13 : w_line_value = 14'd4160 ;
+                       w_line_adrs == 5'd14 : w_line_value = 14'd4480 ;
+                       w_line_adrs == 5'd15 : w_line_value = 14'd4800 ;
+                       w_line_adrs == 5'd16 : w_line_value = 14'd5120 ;
+                       w_line_adrs == 5'd17 : w_line_value = 14'd5440 ;
+                       w_line_adrs == 5'd18 : w_line_value = 14'd5760 ;
+                       w_line_adrs == 5'd19 : w_line_value = 14'd6080 ;
+                       w_line_adrs == 5'd20 : w_line_value = 14'd6400 ;
+                       w_line_adrs == 5'd21 : w_line_value = 14'd6720 ;
+                       w_line_adrs == 5'd22 : w_line_value = 14'd7040 ;
+                       w_line_adrs == 5'd23 : w_line_value = 14'd7360 ;
+                       w_line_adrs == 5'd24 : w_line_value = 14'd7680 ;
+                       w_line_adrs == 5'd25 : w_line_value = 14'd8000 ;
+                       w_line_adrs == 5'd26 : w_line_value = 14'd8320 ;
+                       w_line_adrs == 5'd27 : w_line_value = 14'd8640 ;
+                       w_line_adrs == 5'd28 : w_line_value = 14'd8960 ;
+                                                        else : w_line_value = 14'd9280 ;
+               }
+               
+               return( w_line_value + { 0b00000000, w_word_adrs } ) ;
+       }
 }