-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 } ) ;
+ }
}