;***** BrailleTranslator.asm **********************************************
;
;	点字翻訳機（点字と読みがなとの対応表示）
;
;	Copyright (C) 2006   by M.Yamamoto. All rights reserved.
;
;     ( coding:  Ver. 0.00   2006/03/30  by M.Yamamoto )
;	bugfix:  Ver. 0.10   2006/04/11  スタックオーバーフローの回避
;	coding:  Ver. 1.00   2006/04/13  初期バージョン
;	update:  Ver. 1.10   2006/05/10  ハードウェア変更に伴う変更
;	update:  Ver. 1.20   2006/05/11  キー入力方法の改善
;	update:  Ver. 1.30   2006/05/11  AUTO モードの速度変更機能
;	update:  Ver. 1.31   2006/05/11  comment <機能と操作法>を追加
;	update:  Ver. 1.32   2006/07/03  コメントの一部変更
;
;******************************************************* PicAsm 0202 ******

;	Device: PIC16F877A	Clock: 10MHz (セラロック)

#ifdef comment

 <各キースイッチの機能と操作法>
　　自動(AUTO)モード中には、 ←左(LEFT)、→右(RIGHT)、取消(CANCEL)スイッチ入力のみ
　を受け付け、その他のスイッチ入力は受け付けない。

・左１～６スイッチ
　　点字から読みがなに変換するときに使用し、１桁目の点字の６個の各点に対応している。
　１度押すとＯＮになり対応する点字ＬＥＤ(緑)が点灯する。もう１度押すとＯＦＦになり
　対応する点字ＬＥＤは消灯する。以降それを繰り返すトグル動作を行う。

・右１～６スイッチ
　　点字から読みがなに変換するときに使用し、２桁目の点字の６個の各点に対応している。
　各スイッチの動作は左１～６スイッチと同様であり、トグル動作を行う。

・入力(ENTER)スイッチ
　　左および右１～６スイッチで指定した、点字のマス(６個の点)が正しいかどうかをチェ
　ックする。正しい場合には、読みがながドットマトリクスＬＥＤ(赤)に表示される。また
　指定が誤っている場合には、キーボードのＬＥＤ(橙)が細かく１０回点滅を繰り返しエラ
　ー表示をする。

・←左(LEFT)スイッチ
　　現在表示されている点字ＬＥＤ(緑)、および読みがなドットマトリクスＬＥＤ(赤)が、
　（あいうえお順で）１つ前の文字に更新される。
　　また自動(AUTO)モードの場合には、現在表示速度の２倍に更新される。

・→右(RIGHT)スイッチ
　　現在表示されている点字ＬＥＤ(緑)、および読みがなドットマトリクスＬＥＤ(赤)が、
　（あいうえお順で）１つ後の文字に更新される。
　　また自動(AUTO)モードの場合には、現在表示速度の１／２倍に更新される。

・↑上(UPPER)スイッチ
　　現在表示されている点字ＬＥＤ(緑)、および読みがなドットマトリクスＬＥＤ(赤)が、
　（あいうえお順で）５つ前の文字に更新される。

・↓下(LOWER)スイッチ
　　現在表示されている点字ＬＥＤ(緑)、および読みがなドットマトリクスＬＥＤ(赤)が、
　（あいうえお順で）５つ後の文字に更新される。

・自動(AUTO)スイッチ
　　現在表示されている点字ＬＥＤ(緑)、および読みがなドットマトリクスＬＥＤ(赤)が、
　約１秒おきに自動的に（あいうえお順で）１つづつ次の文字に更新表示されていく。
　　なお、約１秒というのは初期値であり、自動(AUTO)モード中に、←左(LEFT)、→右(RIG
　HT) スイッチを操作した場合には、表示速度はそのときの設定値(1/2, 1, 2, 4)となる。

・取消(CANCEL)スイッチ
　　現在表示されている点字ＬＥＤ(緑)、および読みがなドットマトリクスＬＥＤ(赤)が、
　クリアされ各ＬＥＤは消灯する。
　　また自動(AUTO)モードの場合には、自動(AUTO)モードは解除されるが、各ＬＥＤは表示
　され続ける。

#endif

;	PIC16F877A のピンと用途

;	 (1) MCLR マスター・クリア入力		(40) RB7  出力: LED7
;	 (2) RA0  入力: 予備			(39) RB6  出力: LED6
;	 (3) RA1  入力: 予備	　		(38) RB5  出力: LED5
;	 (4) RA2  入力: 予備			(37) RB4  出力: LED4
;	 (5) RA3  入力: CANCEL スイッチ		(36) RB3  出力: LED3
;	 (6) RA4  入力: AUTO  スイッチ		(35) RB2  出力: LED2
;	 (7) RA5  入力: ENTER スイッチ		(34) RB1  出力: LED1
;　	 (8) RE0  出力: パイロットLED 表示	(33) RB0  出力: LED0
;	 (9) RE1  出力: 予備			(32) VDD  電源 +5V DC
;	(10) RE2  出力: 予備			(31) VSS  電源 GND
;	(11) VDD  電源 +5V DC			(30) RD7  出力: 2 桁目スイッチ指定
;	(12) VSS  電源 GND			(29) RD6  出力: 1 桁目スイッチ指定
;	(13) OSC1 オシレータ水晶入力		(28) RD5  入力: 1  スイッチ
;	(14) OSC2 オシレータ水晶入力		(27) RD4  入力: 2  スイッチ
;	(15) RC0  出力: BCD コード A		(26) RC7  入力: ↓ スイッチ
;	(16) RC1  出力: BCD コード B		(25) RC6  入力: ↑ スイッチ
;	(17) RC2  出力: BCD コード C		(24) RC5  入力: → スイッチ
;	(18) RC3  出力: BCD コード D		(23) RC4  入力: ← スイッチ
;	(19) RD0  入力: 6  スイッチ		(22) RD3  入力: 3  スイッチ
;	(20) RD1  入力: 5  スイッチ		(21) RD2  入力: 4  スイッチ

;==========================================================================

	list		P=PIC16F877A	;デバイス情報
	include        "P16F877A.INC"	;インクルードファイル
	errorlevel	-302		;Eliminate bank warning

	__config _CP_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC

;==========================================================================
;	変数の定義とレジスタ割付け
;==========================================================================

#define   _new_hard

		cblock  h'20'
wcnt1					;ウェイト用ループカウンタ
wcnt2					;ウェイト用ループカウンタ
wcnt3					;ウェイト用ループカウンタ
lpcnt1					;ループカウンタ
lpcnt2					;ループカウンタ
lpcnt3					;ループカウンタ
lpcnt4					;ループカウンタ
tmpflag					;仮パタンフラグ
autoflag				;自動(AUTO)(1)(2)フラグ
dgtflag					;スクリーン桁数フラグ
convwk					;パタンに変換する点字データ番号
fontwk					;変換データ元の退避用
setbit					;縦横変換用のセットビット
chatcnt					;チャッタリング吸収カウンタ
tmoutwk					;仮タイムアウトカウンタ
tmoutcnt				;タイムアウトカウンタ
brailexwk				;仮の点字データ拡張番号
brailnowk				;仮の点字データ番号
brailex					;点字データ拡張番号
brailno					;点字データ番号
xaddr_high				;文字フォント対応データの先頭 high アドレス
xaddr_low				;文字フォント対応データの先頭 low アドレス
addr_high				;文字フォントデータの high アドレス
addr_low				;文字フォントデータの low アドレス
fontidx					;読み込みエリアのインデックス
fonthd	;(00)				;フォントデータの読み込みエリアの先頭アドレス
	;  :
	;  :
	;(07)
		endc
		cblock  fonthd + d'8'
scrnidx					;スクリーンインデックス
scrnidxwk				;スクリーンインデックスの退避用
scrnidx2				;ＬＥＤスクリーン表示用
scrnhd	;(00)				;スクリーンテーブル（16 個）の先頭アドレス
	;  :
	;  :
	;(14)				;1 桁目点字パタン
	;(15)				;2 桁目点字パタン
		endc

		cblock	h'70'
w_save					;W レジスタの保存用（割り込み処理で使用）
s_save					;STATUS レジスタの保存用（割り込み処理で使用）
		endc

cancelsw	equ	3		;RA3: 取消(CANCEL)スイッチ
autosw		equ	4		;RA4: 自動(AUTO)スイッチ
entersw		equ	5		;RA5: 入力(ENTER)スイッチ
leftsw		equ	4		;RC4: ←左(LEFT)スイッチ
rightsw		equ	5		;RC5: →右(RIGHT)スイッチ
uppersw		equ	6		;RC6: ↑上(UPPER)スイッチ
lowersw		equ	7		;RC7: ↓下(LOWER)スイッチ
pilot		equ	0		;RE0: パイロットLED 表示
tm_adj		equ	d'38'		;タイムアウトスキップ回数 (26.2msec x 38)
chatt		equ	d'15'		;チャッタリング吸収用ウエイト時間
					;200μ*(2+16)=3.6msec --> (3.6 x 15 = 54msec)

;==========================================================================
;	プログラム開始
;==========================================================================

		org	0		;リセットベクタ
		goto	init
		org	4		;割り込みベクタ
		goto	interrupt

;==========================================================================
;	初期化処理
;==========================================================================

init
		bcf	STATUS,RP0	;バンク 0
		bcf	STATUS,RP1
		clrf	PORTA		;ポートA をクリア
		clrf	PORTB		;ポートB をクリア
		clrf	PORTC		;ポートC をクリア
		clrf	PORTD		;ポートD をクリア
		clrf	PORTE		;ポートE をクリア
		clrf	ADCON0		;ADCON0 の設定, A/D 未使用

		bsf	STATUS,RP0	;バンク 1
;		bcf	STATUS,RP1
		movlw	h'06'		;ポートA, E を ディジタルモード
		movwf	ADCON1		;ADCON1 の設定
		movlw	h'3f'		;RA5-0: 入力
		movwf	TRISA		;TRISA の設定
		clrf	TRISB		;RB7-0: 出力 の設定
		movlw	h'f0'		;RC7-4: 入力, RC3-0: 出力
		movwf	TRISC		;TRISC の設定
		movlw	h'3f'		;RD7-6: 出力, RD5-0: 入力
		movwf	TRISD		;TRISD の設定
		clrf	TRISE		;RE2-0: 出力 の設定
		movlw	h'87'		;プルアップ抵抗を使用しない, プリスケーラ 1:256
		movwf	OPTION_REG	;OPTION_REG の設定

		bcf	STATUS,RP0	;バンク 0
;		bcf	STATUS,RP1
		bcf	INTCON,T0IE	;T0IE タイマー０割り込み禁止
		bsf	INTCON,GIE	;GIE 全割り込み許可
		movlw	tm_adj		;タイムアウトスキップ回数 (26.2*38=996.1472msec=1s)
		movwf	tmoutwk		;仮タイムアウトカウンタに設定
		clrf	autoflag	;自動(AUTO)フラグ(1)(2)をクリア

		call	scrntbl_clear	;スクリーンテーブルをクリア
		clrf	brailno		;点字データ番号の初期設定
		clrf	brailex		;点字データ拡張番号の初期設定
		bsf	PORTE,pilot	;パイロットLED 点灯

;==========================================================================
;	メイン・ルーチン
;==========================================================================

		; 各スイッチの動作監視

main
		movf	autoflag,W
		btfss	STATUS,Z	;自動(AUTO)フラグ(1) or (2) = ON か？
		goto	main01		;Yes

		call	get_keyptn	;キーパタンを取得

		btfss	PORTA,entersw	;入力(ENTER)スイッチ = ON か？
		call	enter_switch	;Yes

		btfss	PORTA,autosw	;自動(AUTO)スイッチ = ON か？
		call	auto_switch	;Yes

		btfss	PORTC,uppersw	;↑上(UPPER)スイッチ = ON か？
		call	upper_switch	;Yes

		btfss	PORTC,lowersw	;↓下(LOWER)スイッチ = ON か？
		call	lower_switch	;Yes

main01		btfss	PORTC,leftsw	;←左(LEFT)スイッチ = ON か？
		call	left_switch	;Yes

		btfss	PORTC,rightsw	;→右(RIGHT)スイッチ = ON か？
		call	right_switch	;Yes

		btfss	PORTA,cancelsw	;取消(CANCEL)スイッチ = ON か？
		call	cancel_switch	;Yes

		; ＬＥＤスクリーン表示

screen
		movlw	d'16'
		movwf	lpcnt1		;ループカウンタ = 16 を設定
		clrf	scrnidx2	;スクリーンインデックス = 0 を設定

scrnlp		movlw	scrnhd
		addwf	scrnidx2,W	;スクリーンインデックス値 + テーブル先頭アドレス
		movwf	FSR		;FSR に設定
		movf	INDF,W		;テーブル値を読み出し
#ifdef _new_hard
		xorlw	h'ff'		;全ビットを反転する
#endif
		movwf	PORTB		;ポートB に出力
		movf	scrnidx2,W	;スクリーンインデックスを
		movwf	PORTC		;ポートC に出力
		call	wait_200us	;200μ 秒待機
#ifndef _new_hard
		clrf	PORTB		;LED 消灯データを ポートB に出力
#else
		movlw	h'ff'		;LED 消灯データを
		movwf	PORTB		;ポートB に出力
#endif

		incf	scrnidx2,F	;スクリーンインデックス + 1
		decfsz	lpcnt1,F	;ループカウンタ - 1 = 0 か？
		goto	scrnlp		;No

		btfss	autoflag,1	;自動(AUTO)フラグ(2) = ON か？
		goto	main		;No

		call	br_table_inc	;インクリメント読み出し
					;;(タイマー割り込み処理中からここに引越し)
		bsf	PORTE,pilot	;パイロット LED 点灯
		call	wait_10ms	;10m 秒待機
		bcf	PORTE,pilot	;パイロット LED 消灯
		bcf	autoflag,1	;自動(AUTO)フラグ(2)をクリア
		goto	main

		; スクリーンテーブルをクリア

scrntbl_clear
		movlw	d'16'
		movwf	lpcnt1		;ループカウンタ = 16 を設定
		clrf	scrnidx		;スクリーンインデックス = 0 を設定

clrlp		movlw	scrnhd
		addwf	scrnidx,W	;スクリーンインデックス値 + テーブル先頭アドレス
		movwf	FSR		;FSR に設定
		movlw	h'00'
		movwf	INDF		;スクリーンテーブルに書き込む
		incf	scrnidx,F	;スクリーンインデックス + 1
		decfsz	lpcnt1,F	;ループカウンタ - 1 = 0 か？
		goto	clrlp		;No
		return

;==========================================================================
;	入力(ENTER)スイッチの処理
;==========================================================================

enter_switch
		movf	chatcnt,W
		btfss	STATUS,Z	;チャッタリング吸収カウンタ <> 0 か?
		goto	entsw01		;Yes

		movlw	chatt + 1	;チャッタリング吸収用ウエイト時間を
		movwf	chatcnt		;チャッタリング吸収カウンタに設定

entsw01		decfsz	chatcnt,F	;チャッタリング吸収カウンタ - 1 = 0 か？
		goto	entsw12		;No

		; 1 桁／2 桁データの振り分け

		clrf	brailnowk	;仮の点字データ番号の初期設定
		clrf	brailexwk	;仮の点字データ拡張番号の初期設定
		clrf	tmpflag		;仮パタンフラグの初期設定

		movf	scrnhd + d'14',W
		btfss	STATUS,Z	;1 桁目スイッチパタン = h'00' か？
		goto	entsw02		;No

		movf	scrnhd + d'15',W
		btfsc	STATUS,Z	;2 桁目スイッチパタン <> h'00' か？
		goto	entsw09		;No. Error

		movwf	scrnhd + d'14'	;1 桁目データに移して
		clrf	scrnhd + d'15'	;2 桁目データをクリア
		bsf	tmpflag,0	;仮パタンフラグを設定
		goto	entsw03

entsw02		movf	scrnhd + d'15',W
		btfss	STATUS,Z	;2 桁目スイッチパタン = h'00' か？
		goto	entsw04		;No

		; 1 桁データの検索

entsw03		movf	brailnowk,W	;仮の点字データ番号から
		call	brail_table_1	;点字データパタンを取得
		subwf	scrnhd + d'14',W
		btfsc	STATUS,Z	;スイッチパタン = テーブルパタン か？
		goto	entsw11		;Yes

		incf	brailnowk,F	;仮の点字データ番号の更新
		movf	brailnowk,W
		sublw	brail_tbl_1_ed - brail_tbl_1_st - 1
		btfsc	STATUS,C	;(brailnowk > 最終点字データ番号) か？
		goto	entsw03		;No
		goto	entsw09		;Yes. Error

		; 2 桁データ(1)の検索

entsw04		incf	brailexwk,F	;仮の点字データ拡張番号の更新

entsw05		bcf	STATUS,C	;C フラグをクリア
		rlf	brailnowk,W	;仮の点字データ番号を 2 倍する
		call	brail_table_2	;1 桁目点字データパタンを取得
		subwf	scrnhd + d'14',W
		btfss	STATUS,Z	;スイッチパタン = テーブルパタン か？
		goto	entsw06		;No

		bcf	STATUS,C	;C フラグをクリア
		rlf	brailnowk,W	;仮の点字データ番号を 2 倍して
		addlw	d'1'		;+1 する
		call	brail_table_2	;2 桁目点字データパタンを取得
		subwf	scrnhd + d'15',W
		btfsc	STATUS,Z	;スイッチパタン = テーブルパタン か？
		goto	entsw11		;Yes

entsw06		incf	brailnowk,F	;仮の点字データ番号の更新
		movf	brailnowk,W
		sublw	((brail_tbl_2_ed - brail_tbl_2_st) >> 1) - 1
		btfsc	STATUS,C	;(brailnowk > 最終点字データ番号) か？
		goto	entsw05		;No

		; 2 桁データ(2)の検索

		clrf	brailnowk	;仮の点字データ番号の初期設定
		incf	brailexwk,F	;仮の点字データ拡張番号の更新

entsw07		bcf	STATUS,C	;C フラグをクリア
		rlf	brailnowk,W	;仮の点字データ番号を 2 倍する
		call	brail_table_3	;1 桁目点字データパタンを取得
		subwf	scrnhd + d'14',W
		btfss	STATUS,Z	;スイッチパタン = テーブルパタン か？
		goto	entsw08		;No
		
		bcf	STATUS,C	;C フラグをクリア
		rlf	brailnowk,W	;仮の点字データ番号を 2 倍して
		addlw	d'1'		;+1 する
		call	brail_table_3	;2 桁目点字データパタンを取得
		subwf	scrnhd + d'15',W
		btfsc	STATUS,Z	;スイッチパタン = テーブルパタン か？
		goto	entsw11		;Yes

entsw08		incf	brailnowk,F	;仮の点字データ番号の更新
		movf	brailnowk,W
		sublw	((brail_tbl_3_ed - brail_tbl_3_st) >> 1) - 1
		btfsc	STATUS,C	;(brailnowk > 最終点字データ番号) か？
		goto	entsw07		;No

		; エラー処理

entsw09		movlw	d'10'
		movwf	lpcnt2		;ループカウンタを設定

entsw10		call	led_50ms_clr	;パイロット LED 50m 秒消灯
		call	wait_50ms	;50m 秒待機
		decfsz	lpcnt2,F	;ループ終了か?
		goto	entsw10		;No

		movf	tmpflag,W
		btfsc	STATUS,Z	;仮パタンフラグ = ON か？
		goto	entsw12		;No

		movf	scrnhd + d'14',W ;1 桁目データを
		movwf	scrnhd + d'15'	;2 桁目データに戻して
		clrf	scrnhd + d'14'	;1 桁目データをクリア
		goto	entsw12

		; 点字データ番号, 文字フォントデータの格納

entsw11		movf	brailnowk,W	;仮の点字データ番号を
		movwf	brailno		;点字データ番号に移す
		movf	brailexwk,W	;仮の点字データ拡張番号を
		movwf	brailex		;点字データ拡張番号に移す
		call	char_font_set	;文字フォントデータを設定
		call	led_50ms_clr	;パイロット LED 50m 秒消灯

entsw12		return

		; パイロット LED 50m 秒消灯

led_50ms_clr
		bcf	PORTE,pilot	;パイロット LED 消灯
		call	wait_50ms	;50m 秒待機
		bsf	PORTE,pilot	;パイロット LED 点灯
		movf	lpcnt2,W
		btfsc	STATUS,Z	;ループカウンタ <> 0 か?
		call	wait_200ms	;No. 200m 秒待機
		return

;==========================================================================
;	自動(AUTO)スイッチの処理
;==========================================================================

auto_switch
		movf	chatcnt,W
		btfss	STATUS,Z	;チャッタリング吸収カウンタ <> 0 か?
		goto	autsw01		;Yes

		movlw	chatt + 1	;チャッタリング吸収用ウエイト時間を
		movwf	chatcnt		;チャッタリング吸収カウンタに設定

autsw01		decfsz	chatcnt,F	;チャッタリング吸収カウンタ - 1 = 0 か？
		goto	autsw02		;No

		movf	tmoutwk,W	;仮タイムアウトカウンタ(スキップ回数)を
		movwf	tmoutcnt	;タイムアウトカウンタに設定
		clrf	TMR0		;TMR0 = 0 (256カウント) の設定
					;(4/10MHz*256*256=26.2144msec)
		bsf	INTCON,T0IE	;T0IE タイマー０割り込み許可

		bcf	PORTE,pilot	;パイロット LED 消灯
		call	wait_200ms	;200m 秒待機

autsw02		return

;==========================================================================
;	取消(CANCEL)スイッチの処理
;==========================================================================

cancel_switch
		movf	chatcnt,W
		btfss	STATUS,Z	;チャッタリング吸収カウンタ <> 0 か?
		goto	cansw01		;Yes

		movlw	chatt + 1	;チャッタリング吸収用ウエイト時間を
		movwf	chatcnt		;チャッタリング吸収カウンタに設定

cansw01		decfsz	chatcnt,F	;チャッタリング吸収カウンタ - 1 = 0 か？
		goto	cansw02		;No

		bcf	INTCON,T0IE	;T0IE タイマー０割り込み禁止
		movf	autoflag,W
		btfsc	STATUS,Z	;自動(AUTO)フラグ(1) or (2) = ON か？
		call	scrntbl_clear	;No. スクリーンテーブルをクリア

		bsf	PORTE,pilot	;パイロット LED 点灯
		clrf	autoflag	;自動(AUTO)フラグ(1)(2)をクリア
		call	wait_200ms	;200m 秒待機

cansw02		return

;==========================================================================
;	←左(LEFT)スイッチの処理
;==========================================================================

left_switch
		movf	chatcnt,W
		btfss	STATUS,Z	;チャッタリング吸収カウンタ <> 0 か?
		goto	lefsw01		;Yes

		movlw	chatt + 1	;チャッタリング吸収用ウエイト時間を
		movwf	chatcnt		;チャッタリング吸収カウンタに設定

lefsw01		decfsz	chatcnt,F	;チャッタリング吸収カウンタ - 1 = 0 か？
		goto	lefsw04		;No

		movf	autoflag,W
		btfsc	STATUS,Z	;自動(AUTO)フラグ(1)(2) = 0 か?
		goto	lefsw02		;Yes

		movlw	tm_adj << 2
		subwf	tmoutwk,W	;tmoutwk = tm_adj*4 か？
		btfsc	STATUS,Z
		goto	lefsw04		;Yes

		bcf	STATUS,C	;C フラグをクリア
		rlf	tmoutwk,F	;Yes. タイムアウトカウンタを 2 倍
		goto	lefsw03

lefsw02		decf	brailno,F	;点字データ番号 - 1
		call	br_table_dec	;デクリメント読み出し

lefsw03		call	led_50ms_clr	;パイロット LED 50m 秒消灯

lefsw04		return

;==========================================================================
;	→右(RIGHT)スイッチの処理
;==========================================================================

right_switch
		movf	chatcnt,W
		btfss	STATUS,Z	;チャッタリング吸収カウンタ <> 0 か?
		goto	rigsw01		;Yes

		movlw	chatt + 1	;チャッタリング吸収用ウエイト時間を
		movwf	chatcnt		;チャッタリング吸収カウンタに設定

rigsw01		decfsz	chatcnt,F	;チャッタリング吸収カウンタ - 1 = 0 か？
		goto	rigsw04		;No

		movf	autoflag,W
		btfsc	STATUS,Z	;自動(AUTO)フラグ(1)(2) = 0 か?
		goto	rigsw02		;Yes

		movlw	tm_adj >> 1
		subwf	tmoutwk,W	;tmoutwk = tm_adj/2 か？
		btfsc	STATUS,Z
		goto	rigsw04		;Yes

		bcf	STATUS,C	;C フラグをクリア
		rrf	tmoutwk,F	;Yes. タイムアウトカウンタを 1/2 倍
		goto	rigsw03

rigsw02		incf	brailno,F	;点字データ番号 + 1
		call	br_table_inc	;インクリメント読み出し

rigsw03		call	led_50ms_clr	;パイロット LED 50m 秒消灯

rigsw04		return

;==========================================================================
;	↑上(UPPER)スイッチの処理
;==========================================================================

upper_switch
		movf	chatcnt,W
		btfss	STATUS,Z	;チャッタリング吸収カウンタ <> 0 か?
		goto	uppsw01		;Yes

		movlw	chatt + 1	;チャッタリング吸収用ウエイト時間を
		movwf	chatcnt		;チャッタリング吸収カウンタに設定

uppsw01		decfsz	chatcnt,F	;チャッタリング吸収カウンタ - 1 = 0 か？
		goto	uppsw02		;No

		movf	brailex,W	;点字データ拡張番号をチェック
		sublw	d'2'
		movlw	d'3'		;(フラグ変化無し) 
		btfss	STATUS,Z	;拡張番号 = 2 か？
		movlw	d'5'
		subwf	brailno,F	;点字データ番号 - W
		call	br_table_dec	;デクリメント読み出し
		call	led_50ms_clr	;パイロット LED 50m 秒消灯

uppsw02		return

;==========================================================================
;	↓下(LOWER)スイッチの処理
;==========================================================================

lower_switch
		movf	chatcnt,W
		btfss	STATUS,Z	;チャッタリング吸収カウンタ <> 0 か?
		goto	lowsw01		;Yes

		movlw	chatt + 1	;チャッタリング吸収用ウエイト時間を
		movwf	chatcnt		;チャッタリング吸収カウンタに設定

lowsw01		decfsz	chatcnt,F	;チャッタリング吸収カウンタ - 1 = 0 か？
		goto	lowsw02		;No

		movf	brailex,W	;点字データ拡張番号をチェック
		sublw	d'2'
		movlw	d'3'		;(フラグ変化無し) 
		btfss	STATUS,Z	;拡張番号 = 2 か？
		movlw	d'5'
		addwf	brailno,F	;点字データ番号 + W
		call	br_table_inc	;インクリメント読み出し
		call	led_50ms_clr	;パイロット LED 50m 秒消灯

lowsw02		return

;==========================================================================
;	押されたキーパタンを取得（キーマトリックス）
;		(bit5-bit0): 押されているキーパタンを返す
;	出力:	scrnhd(14):  1 桁目スイッチパタン
;		scrnhd(15):  2 桁目スイッチパタン
;==========================================================================

get_keyptn
		movlw	h'bf'		;RD7:RD6:RD5:RD4 = HLHH
		call	key_scan
		btfsc	STATUS,Z	;キー ON か？
		goto	gkey01		;No

		xorwf	scrnhd + d'14',F
		goto	gkey02		;1 桁目スイッチパタンを取得

gkey01		movlw	h'7f'		;RD7:RD6:RD5:RD4 = LHHH
		call	key_scan
		btfsc	STATUS,Z	;キー ON か？
		goto	gkey03		;No

		xorwf	scrnhd + d'15',F
					;2 桁目スイッチパタンを取得
gkey02		call	led_50ms_clr	;パイロット LED 50m 秒消灯

gkey03		return

		; キーマトリックスの１列をチェック

key_scan
		movwf	PORTD		;PORTD に W 値を出力
		call	wait_200us	;ピンが安定するまで待つ	
		movf	PORTD,W		;PORTD を読み出す
		xorlw	h'ff'		;全ビットを反転する
		andlw	h'3f'		;下 6 ビット(bit5-0)を取り出す
		return

;==========================================================================
;	点字データテーブルのインクリメント
;	入出力:	brailex: 点字データ拡張番号
;		brailno: 点字データ番号
;	出力:	scrnhd(00)～scrnhd(07): 1 桁目文字フォントデータ
;		scrnhd(08)～scrnhd(13): 2 桁目文字フォントデータ
;		scrnhd(14):		1 桁目点字パタン
;		scrnhd(15):		2 桁目点字パタン
;==========================================================================

br_table_inc
		movf	brailex,W	;点字データ拡張番号をチェック
		btfss	STATUS,Z	;拡張番号 = 0 か？
		goto	btinc04		;No

		; 拡張番号 = 0

btinc01		movf	brailno,W
		sublw	brail_tbl_1_ed - brail_tbl_1_st - 1
		btfsc	STATUS,C	;(brailno > 最終点字データ番号) か？
		goto	btinc02		;No

		incf	brailex,F	;点字データ拡張番号 + 1 を設定
		clrf	brailno		;点字データ番号を設定
		goto	btinc06

btinc02		movf	brailno,W	;点字データ番号から
		call	brail_table_1	;点字データパタンを取得
		andlw	h'ff'
		btfss	STATUS,Z	;パタン = h'00' か？
		goto	btinc03		;No

		incf	brailno,F	;点字データ番号 + 1
		goto	btinc01

btinc03		movwf	scrnhd + d'14'	;1 桁目点字パタンを設定
		clrf	scrnhd + d'15'	;2 桁目点字パタンをクリア
		goto	btinc11

		; 拡張番号 = 1, 2

btinc04		sublw	d'1'
		btfss	STATUS,Z	;拡張番号 = 1 か？
		goto	btinc08		;No

		; 拡張番号 = 1

btinc05		movf	brailno,W
		sublw	((brail_tbl_2_ed - brail_tbl_2_st) >> 1) - 1
		btfsc	STATUS,C	;(brailno > 最終点字データ番号) か？
		goto	btinc06		;No

		incf	brailex,F	;点字データ拡張番号 + 1 を設定
		clrf	brailno		;点字データ番号を設定
		goto	btinc09

btinc06		bcf	STATUS,C	;C フラグをクリア
		rlf	brailno,W	;点字データ番号を 2 倍する
		call	brail_table_2	;1 桁目点字データパタンを取得
		andlw	h'ff'
		btfss	STATUS,Z	;パタン = h'00' か？
		goto	btinc07		;No

		incf	brailno,F	;点字データ番号 + 1
		goto	btinc05

btinc07		movwf	scrnhd + d'14'	;1 桁目点字パタンを設定
		
		bcf	STATUS,C	;C フラグをクリア
		rlf	brailno,W	;点字データ番号を 2 倍して
		addlw	d'1'		;+1 する
		call	brail_table_2	;2 桁目点字データパタンを取得
		movwf	scrnhd + d'15'	;2 桁目点字パタンを設定
		goto	btinc11

		; 拡張番号 = 2

btinc08		movf	brailno,W
		sublw	((brail_tbl_3_ed - brail_tbl_3_st) >> 1) - 1
		btfsc	STATUS,C	;(brailno > 最終点字データ番号) か？
		goto	btinc09		;No

		clrf	brailex		;点字データ拡張番号 = 0 を設定
		clrf	brailno		;点字データ番号を設定
		goto	btinc02

btinc09		bcf	STATUS,C	;C フラグをクリア
		rlf	brailno,W	;点字データ番号を 2 倍する
		call	brail_table_3	;1 桁目点字データパタンを取得
		andlw	h'ff'
		btfss	STATUS,Z	;パタン = h'00' か？
		goto	btinc10		;No

		incf	brailno,F	;点字データ番号 + 1
		goto	btinc08

btinc10		movwf	scrnhd + d'14'	;1 桁目点字パタンを設定

		bcf	STATUS,C	;C フラグをクリア
		rlf	brailno,W	;点字データ番号を 2 倍して
		addlw	d'1'		;+1 する
		call	brail_table_3	;2 桁目点字データパタンを取得
		movwf	scrnhd + d'15'	;2 桁目点字パタンを設定

btinc11		call	char_font_set	;文字フォントデータを設定
		return

;==========================================================================
;	点字データテーブルのデクリメント
;	入出力:	brailex: 点字データ拡張番号
;		brailno: 点字データ番号
;	出力:	scrnhd(00)～scrnhd(07): 1 桁目文字フォントデータ
;		scrnhd(08)～scrnhd(13): 2 桁目文字フォントデータ
;		scrnhd(14):		1 桁目点字パタン
;		scrnhd(15):		2 桁目点字パタン
;==========================================================================

br_table_dec
		movf	brailex,W	;点字データ拡張番号をチェック
		btfss	STATUS,Z	;拡張番号 = 0 か？
		goto	btdec03		;No

		; 拡張番号 = 0

		rlf	brailno,W
		btfss	STATUS,C	;マイナス (brailno < 0) か？
		goto	btdec01		;No

		movlw	d'2'
		movwf	brailex		;点字データ拡張番号 = 2 を設定
		movlw	((brail_tbl_3_ed - brail_tbl_3_st) >> 1) - 1
		movwf	brailno		;最終点字データ番号を設定
		goto	btdec07

btdec01		movf	brailno,W	;点字データ番号から
		call	brail_table_1	;点字データパタンを取得
		andlw	h'ff'
		btfss	STATUS,Z	;パタン = h'00' か？
		goto	btdec02		;No

		decf	brailno,F	;点字データ番号の更新
		goto	btdec01

btdec02		movwf	scrnhd + d'14'	;1 桁目点字パタンを設定
		clrf	scrnhd + d'15'	;2 桁目点字パタンをクリア
		goto	btdec09

		; 拡張番号 = 1, 2

btdec03		sublw	d'1'
		btfss	STATUS,Z	;拡張番号 = 1 か？
		goto	btdec06		;No

		; 拡張番号 = 1

		rlf	brailno,W
		btfss	STATUS,C	;マイナス (brailno < 0) か？
		goto	btdec04		;No

		decf	brailex,F	;点字データ拡張番号 - 1 を設定
		movlw	brail_tbl_1_ed - brail_tbl_1_st - 1
		movwf	brailno		;最終点字データ番号を設定
		goto	btdec01

btdec04		bcf	STATUS,C	;C フラグをクリア
		rlf	brailno,W	;点字データ番号を 2 倍する
		call	brail_table_2	;1 桁目点字データパタンを取得
		andlw	h'ff'
		btfss	STATUS,Z	;パタン = h'00' か？
		goto	btdec05		;No

		decf	brailno,F	;点字データ番号の更新
		goto	btdec04

btdec05		movwf	scrnhd + d'14'	;1 桁目点字パタンを設定
		
		bcf	STATUS,C	;C フラグをクリア
		rlf	brailno,W	;点字データ番号を 2 倍して
		addlw	d'1'		;+1 する
		call	brail_table_2	;2 桁目点字データパタンを取得
		movwf	scrnhd + d'15'	;2 桁目点字パタンを設定
		goto	btdec09

		; 拡張番号 = 2

btdec06		rlf	brailno,W
		btfss	STATUS,C	;マイナス (brailno < 0) か？
		goto	btdec07		;No

		decf	brailex,F	;点字データ拡張番号 - 1 を設定
		movlw	((brail_tbl_2_ed - brail_tbl_2_st) >> 1) - 1
		movwf	brailno		;最終点字データ番号を設定
		goto	btdec04

btdec07		bcf	STATUS,C	;C フラグをクリア
		rlf	brailno,W	;点字データ番号を 2 倍する
		call	brail_table_3	;1 桁目点字データパタンを取得
		andlw	h'ff'
		btfss	STATUS,Z	;パタン = h'00' か？
		goto	btdec08		;No

		decf	brailno,F	;点字データ番号の更新
		goto	btdec07

btdec08		movwf	scrnhd + d'14'	;1 桁目点字パタンを設定

		bcf	STATUS,C	;C フラグをクリア
		rlf	brailno,W	;点字データ番号を 2 倍して
		addlw	d'1'		;+1 する
		call	brail_table_3	;2 桁目点字データパタンを取得
		movwf	scrnhd + d'15'	;2 桁目点字パタンを設定

btdec09		call	char_font_set	;文字フォントデータを設定
		return

;==========================================================================
;	文字フォントデータの設定
;	入力:	brailex: 点字データ拡張番号
;		brailno: 点字データ番号
;	中間:	fonthd(00)～fonthd(07): 文字フォントデータ
;	出力:	scrnhd(00)～scrnhd(07): 1 桁目スクリーン表示データ
;		scrnhd(08)～scrnhd(13): 2 桁目スクリーン表示データ
;==========================================================================

char_font_set
		movf	brailex,W	;点字データ拡張番号をチェック
		btfss	STATUS,Z	;拡張番号 = 0 か？
		goto	chfo01		;No

		; 拡張番号 = 0

		movlw	high brail_font_tbl_1
		movwf	xaddr_high	;文字フォント対応データテーブルの先頭 high アドレス
		movlw	low brail_font_tbl_1
		movwf	xaddr_low	;文字フォント対応データテーブルの先頭 low アドレス
		call	xaddr_set_1	;点字データ番号対応の文字フォントデータ先頭アドレス
		call	xaddr_read	;文字フォントデータの先頭アドレスを取得
		movwf	addr_high	;文字フォントデータの high アドレスを設定

		movlw	high (brail_font_tbl_1 + 1)
		movwf	xaddr_high	;文字フォント対応データテーブルの先頭 +1 high アドレス
		movlw	low (brail_font_tbl_1 + 1)
		movwf	xaddr_low	;文字フォント対応データテーブルの先頭 +1 low アドレス
		call	xaddr_set_1	;点字データ番号対応の文字フォントデータ先頭アドレス
		call	xaddr_read	;文字フォントデータの先頭アドレスを取得
		movwf	addr_low	;文字フォントデータの low アドレスを設定

		call	font_scrn1_set	;1 桁目フォントデータパタンを取得
		call	clr_scrn2_set	;2 桁目スクリーンをクリア
		goto	chfo04

		; 拡張番号 = 1, 2

chfo01		sublw	d'1'
		btfss	STATUS,Z	;拡張番号 = 1 か？
		goto	chfo03		;No

		movf	brailno,W
		sublw	((brail_font_tbl_2x - brail_font_tbl_2) >> 1) - 1
		btfss	STATUS,C	;(brailno <= 最終点字データ番号') か？
		goto	chfo02		;No

		; 拡張番号 = 1, データ番号 <= 最終点字データ番号'

		movlw	high brail_font_tbl_2
		movwf	xaddr_high	;文字フォント対応データテーブルの先頭 high アドレス
		movlw	low brail_font_tbl_2
		movwf	xaddr_low	;文字フォント対応データテーブルの先頭 low アドレス
		call	xaddr_set_1	;点字データ番号対応の文字フォントデータ先頭アドレス
		call	xaddr_read	;文字フォントデータの先頭アドレスを取得
		movwf	addr_high	;文字フォントデータの high アドレスを設定

		movlw	high (brail_font_tbl_2 + 1)
		movwf	xaddr_high	;文字フォント対応データテーブルの先頭 +1 high アドレス
		movlw	low (brail_font_tbl_2 + 1)
		movwf	xaddr_low	;文字フォント対応データテーブルの先頭 +1 low アドレス
		call	xaddr_set_1	;点字データ番号対応の文字フォントデータ先頭アドレス
		call	xaddr_read	;文字フォントデータの先頭アドレスを取得
		movwf	addr_low	;文字フォントデータの low アドレスを設定

		call	font_scrn1_set	;1 桁目フォントデータパタンを取得
		call	clr_scrn2_set	;2 桁目スクリーンをクリア
		goto	chfo04

		; 拡張番号 = 1, データ番号 > 最終点字データ番号'

chfo02		movlw	high brail_font_tbl_2x
		movwf	xaddr_high	;文字フォント対応データテーブルの先頭 high アドレス
		movlw	low brail_font_tbl_2x
		movwf	xaddr_low	;文字フォント対応データテーブルの先頭 low アドレス
		call	xaddr_set_2	;点字データ番号対応の文字フォントデータ先頭アドレス
		call	xaddr_read	;文字フォントデータの先頭アドレスを取得
		movwf	addr_high	;文字フォントデータの high アドレスを設定

		movlw	high (brail_font_tbl_2x + 1)
		movwf	xaddr_high	;文字フォント対応データテーブルの先頭 +1 high アドレス
		movlw	low (brail_font_tbl_2x + 1)
		movwf	xaddr_low	;文字フォント対応データテーブルの先頭 +1 low アドレス
		call	xaddr_set_2	;点字データ番号対応の文字フォントデータ先頭アドレス
		call	xaddr_read	;文字フォントデータの先頭アドレスを取得
		movwf	addr_low	;文字フォントデータの low アドレスを設定

		call	font_scrn1_set	;1 桁目フォントデータパタンを取得

		movlw	high (brail_font_tbl_2x + 2)
		movwf	xaddr_high	;文字フォント対応データテーブルの先頭 +2 high アドレス
		movlw	low (brail_font_tbl_2x + 2)
		movwf	xaddr_low	;文字フォント対応データテーブルの先頭 +2 low アドレス
		call	xaddr_set_2	;点字データ番号対応の文字フォントデータ先頭アドレス
		call	xaddr_read	;文字フォントデータの先頭アドレスを取得
		movwf	addr_high	;文字フォントデータの high アドレスを設定

		movlw	high (brail_font_tbl_2x + 3)
		movwf	xaddr_high	;文字フォント対応データテーブルの先頭 +3 high アドレス
		movlw	low (brail_font_tbl_2x + 3)
		movwf	xaddr_low	;文字フォント対応データテーブルの先頭 +3 low アドレス
		call	xaddr_set_2	;点字データ番号対応の文字フォントデータ先頭アドレス
		call	xaddr_read	;文字フォントデータの先頭アドレスを取得
		movwf	addr_low	;文字フォントデータの low アドレスを設定

		call	font_scrn2_set	;2 桁目フォントデータパタンを取得
		goto	chfo04

		; 拡張番号 = 2

chfo03		movlw	high brail_font_tbl_3
		movwf	xaddr_high	;文字フォント対応データテーブルの先頭 high アドレス
		movlw	low brail_font_tbl_3
		movwf	xaddr_low	;文字フォント対応データテーブルの先頭 low アドレス
		call	xaddr_set_3	;点字データ番号対応の文字フォントデータ先頭アドレス
		call	xaddr_read	;文字フォントデータの先頭アドレスを取得
		movwf	addr_high	;文字フォントデータの high アドレスを設定

		movlw	high (brail_font_tbl_3 + 1)
		movwf	xaddr_high	;文字フォント対応データテーブルの先頭 +1 high アドレス
		movlw	low (brail_font_tbl_3 + 1)
		movwf	xaddr_low	;文字フォント対応データテーブルの先頭 +1 low アドレス
		call	xaddr_set_3	;点字データ番号対応の文字フォントデータ先頭アドレス
		call	xaddr_read	;文字フォントデータの先頭アドレスを取得
		movwf	addr_low	;文字フォントデータの low アドレスを設定

		call	font_scrn1_set	;1 桁目フォントデータパタンを取得

		movlw	high (brail_font_tbl_3 + 2)
		movwf	xaddr_high	;文字フォント対応データテーブルの先頭 +2 high アドレス
		movlw	low (brail_font_tbl_3 + 2)
		movwf	xaddr_low	;文字フォント対応データテーブルの先頭 +2 low アドレス
		call	xaddr_set_3	;点字データ番号対応の文字フォントデータ先頭アドレス
		call	xaddr_read	;文字フォントデータの先頭アドレスを取得
		movwf	addr_high	;文字フォントデータの high アドレスを設定

		movlw	high (brail_font_tbl_3 + 3)
		movwf	xaddr_high	;文字フォント対応データテーブルの先頭 +3 high アドレス
		movlw	low (brail_font_tbl_3 + 3)
		movwf	xaddr_low	;文字フォント対応データテーブルの先頭 +3 low アドレス
		call	xaddr_set_3	;点字データ番号対応の文字フォントデータ先頭アドレス
		call	xaddr_read	;文字フォントデータの先頭アドレスを取得
		movwf	addr_low	;文字フォントデータの low アドレスを設定

		call	font_scrn2_set	;2 桁目フォントデータパタンを取得

chfo04		return

;==========================================================================

		; 1 桁目フォントデータパタンを取得
		; 入力:	addr_high: 文字フォントデータアドレス high
		; 	addr_low:  文字フォントデータアドレス low
		; 中間:	fonthd(00)～fonthd(07): 文字フォントデータ
		;	dgtflag = 1:            スクリーン桁数フラグ
		; 出力:	scrnhd(00)～scrnhd(07): 1 桁目スクリーン表示データ

font_scrn1_set
		movlw	d'1'
		goto	foscr01

		; 2 桁目フォントデータパタンを取得
		; 入力:	addr_high: 文字フォントデータアドレス high
		; 	addr_low:  文字フォントデータアドレス low
		; 中間:	fonthd(00)～fonthd(07): 文字フォントデータ
		;	dgtflag = 2:            スクリーン桁数フラグ
		; 出力:	scrnhd(08)～scrnhd(13): 2 桁目スクリーン表示データ

font_scrn2_set
		movlw	d'2'

foscr01		movwf	dgtflag		;スクリーン桁数フラグを設定
		movlw	d'8'
		movwf	lpcnt2		;ループカウンタ = 8 を設定
		clrf	fontidx		;読み込みエリアのインデックス = 0 を設定

foscr02		movlw	fonthd
		addwf	fontidx,W	;読み込みエリアのインデックス値 + テーブル先頭アドレス
		movwf	FSR		;FSR に設定

		call	font_read	;文字フォントデータの読み出し
		bcf	PCLATH,3	;ページ 0 に戻す
;		bcf	PCLATH,4

		movwf	INDF		;読み込みエリアに書き込む
		incf	fontidx,F	;読み込みエリアのインデックスの更新

		incf	addr_low,F	;文字フォントデータアドレス low の更新
		btfsc	STATUS,Z	;オーバーフローした場合は
		incf	addr_high,F	;文字フォントデータアドレス high の更新

		decfsz	lpcnt2,F	;ループカウンタ - 1 = 0 か？
		goto	foscr02		;No

;		call	font_convert	;文字フォントデータの縦横ビットの変換
;		return			;;(スタックが深くなるのを防ぐ)

;==========================================================================

		; 文字フォントデータの縦横ビットの変換
		; 入力:	fonthd(00)～fonthd(07): 文字フォントデータ
		;	dgtflag:                スクリーン桁数フラグ
		; 出力:	scrnhd(00)～scrnhd(07): 1 桁目スクリーン表示データ
		;	scrnhd(08)～scrnhd(13): 2 桁目スクリーン表示データ

font_convert
		movlw	h'80'
		movwf	setbit		;セットするビットを初期設定
		movlw	d'8'
		movwf	lpcnt2		;ループカウンタ = 8 を設定

		decfsz	dgtflag,W	;スクリーン桁数フラグ = 1 か？
		goto	fconv01		;No

		call	clr_scrn1_set	;1 桁目スクリーンをクリア
		movlw	scrnhd		;1 桁目の先頭アドレス
		goto	fconv02

fconv01		call	clr_scrn2_set	;2 桁目スクリーンをクリア
		movlw	scrnhd + d'8'	;2 桁目の先頭アドレス

fconv02		movwf	scrnidx		;スクリーンエリアのインデックスを設定
		movwf	scrnidxwk	;スクリーンインデックスを退避
		movlw	fonthd
		movwf	fontidx		;読み込みエリアのインデックスを設定

fconv03		movf	fontidx,W	;変換前データアドレス
		movwf	FSR		;FSR に設定
		movf	INDF,W		;読み込みエリアから読み出し
		movwf	fontwk		;退避

		movlw	d'8'
		movwf	lpcnt3		;ループカウンタ = 8 を設定
		decf	dgtflag,W
		btfsc	STATUS,Z	;スクリーン桁数フラグ = 1 か？
		goto	fconv04		;Yes

		movlw	d'6'		;スクリーン桁数フラグ = 2 のとき
		movwf	lpcnt3		;ループカウンタ = 6 を設定
		rlf	fontwk,F	;1 ビット左へ進めておく

fconv04		rlf	fontwk,F	;上位ビットからチェック
		btfss	STATUS,C	;C フラグ = 1 か？
		goto	fconv05		;No

		movf	scrnidx,W	;変換後データアドレス
		movwf	FSR		;FSR に設定
		movf	INDF,W		;現在のデータを読み出し
		iorwf	setbit,W	;セットするビットを加えて
		movwf	INDF		;スクリーンエリアに書き込む

fconv05		incf	scrnidx,F	;スクリーンエリアのインデックスを更新
		decfsz	lpcnt3,F	;ループカウンタ - 1 = 0 か？
		goto	fconv04		;No

		bcf	STATUS,C	;C フラグをクリア
		rrf	setbit,F	;セットするビットを更新

		incf	fontidx,F	;読み込みエリアのインデックスを更新
		movf	scrnidxwk,W	;スクリーンインデックスを復帰
		movwf	scrnidx		;スクリーンエリアのインデックスを設定
		decfsz	lpcnt2,F	;ループカウンタ - 1 = 0 か？
		goto	fconv03		;No
		return

;==========================================================================

		; 1 桁目スクリーンをクリア
		; 出力:	scrnhd(00)～scrnhd(07) = h'00': 1 桁目スクリーン表示データ

clr_scrn1_set
		movlw	d'8'
		movwf	lpcnt4		;ループカウンタ = 8 を設定
		movlw	scrnhd
		goto	clrs01		;No

		; 2 桁目スクリーンをクリア
		; 出力:	scrnhd(08)～scrnhd(13) = h'00': 2 桁目スクリーン表示データ

clr_scrn2_set
		movlw	d'6'
		movwf	lpcnt4		;ループカウンタ = 6 を設定
		movlw	scrnhd + d'8'

clrs01		movwf	scrnidx		;スクリーンインデックスに設定

clrs02		movf	scrnidx,W
		movwf	FSR		;FSR に設定
		movlw	h'00'
		movwf	INDF		;スクリーンテーブルに書き込む
		incf	scrnidx,F	;スクリーンインデックス + 1
		decfsz	lpcnt4,F	;ループカウンタ - 1 = 0 か？
		goto	clrs02		;No
		return

;==========================================================================

		; 文字フォントデータの先頭アドレスの設定
		; 入力:	brailno:    点字データ番号
		; 出力:	xaddr_high: 文字フォント対応データの先頭 high アドレス
		;	xaddr_low:  文字フォント対応データの先頭 low アドレス

		; brail_font_tbl_1, brail_font_tbl_2 テーブル用
xaddr_set_1
		bcf	STATUS,C	;C フラグをクリア
		rlf	brailno,W	;点字データ番号を 2 倍して
		goto	xad02

		; brail_font_tbl_2x テーブル用
xaddr_set_2
		movlw	(brail_font_tbl_2x - brail_font_tbl_2) >> 1
		subwf	brailno,W
		goto	xad01

		; brail_font_tbl_3 テーブル用
xaddr_set_3
		movf	brailno,W

xad01		movwf	brailnowk
		bcf	STATUS,C	;C フラグをクリア
		rlf	brailnowk,F
		rlf	brailnowk,W	;点字データ番号を 4 倍して

xad02		addwf	xaddr_low,F	;
		btfsc	STATUS,C	;オーバーフローした場合は
		incf	xaddr_high,F	;
		return

;==========================================================================

		; 文字フォントデータの先頭アドレスの読み出し
		; 入力:	xaddr_high: 文字フォント対応データの先頭 high アドレス
		;	xaddr_low:  文字フォント対応データの先頭 low アドレス
		; 出力:	W: 文字フォントデータの先頭アドレス high or low

xaddr_read
		movf	xaddr_high,W	;文字フォント対応データの先頭 high アドレス
		movwf	PCLATH
		movf	xaddr_low,W	;文字フォント対応データの先頭 low アドレス
		movwf	PCL

		; 文字フォントデータの読み出し
		; 入力:	addr_high: 文字フォントデータ high アドレス
		;	addr_low:  文字フォントデータ low アドレス
		; 出力:	W: 文字フォントデータ

font_read
		movf	addr_high,W	;文字フォントデータの high アドレス
		movwf	PCLATH
		movf	addr_low,W	;文字フォントデータの low アドレス
		movwf	PCL

;==========================================================================
;	ソフトタイマーサブルーチン (10 MHz)
;==========================================================================

		; 200μ 秒 ウェイトルーチン

wait_200us
		movlw	d'1'		;1
		movwf	wcnt1		;1
		nop			;1
		movlw	d'100'		;1
		goto	w1m02 - 1	;2	1+1+1+1+2+1+(1+1+1+2)*97+(1+1+2+0)+2+0+2=500
					;Total	500/10MHz*4 = 0.0002 S = 200 μS

		; 1m 秒 ウェイトルーチン

wait_1ms
		movlw	d'2'		;1
		movwf	wcnt1		;1
w1m01		movlw	d'249'		;1
		movwf	wcnt2		;1
w1m02		nop			;1
		nop			;1
		decfsz	wcnt2,F		;1,2
		goto	w1m02		;2,0	1+1+(1+1+1+2)*248+(1+1+2+0)=1246

		decfsz	wcnt1,F		;1,2
		goto	w1m01		;2,0	1+1+(1246+1+2)*1+(1246+2+0)=2499
		return			;2	2499+2=2501
					;Total	2501/10MHz*4 = 1.0004 mS = 1 mS

		; 5m 秒 ウェイトルーチン

wait_5ms
		movlw	d'5'		;1
		goto	w00m01		;2

		; 10m 秒 ウェイトルーチン

wait_10ms
		movlw	d'10'		;1
		goto	w00m01		;2

		; 50m 秒 ウェイトルーチン

wait_50ms
		movlw	d'50'		;1
		goto	w00m01		;2

		; 200m 秒 ウェイトルーチン

wait_200ms
		movlw	d'200'		;1
;		goto	w00m01		;2

w00m01		movwf	wcnt3		;1
w00m02		call	wait_1ms	;2	2+2501=2503
		decfsz	wcnt3,F		;1,2
		goto	w00m02		;2,0	1+2+1+(2503+1+2)*(W-1)+(2503+2+0)=3+2506*W
		return			;2	2+3+2506*W=5+2506*W
					;       (5+2506*W)/10MHz*4 = 5, 10, 50, 200 mS

;==========================================================================
;	タイマー割り込み処理
;==========================================================================

interrupt
		; レジスタの保存

		movwf	w_save		;W レジスタの保存
		movf	STATUS,W
		movwf	s_save		;STATUS レジスタの保存

		bcf	STATUS,RP0	;バンク 0
		bcf	STATUS,RP1
		btfss	INTCON,T0IF	;タイマ０オーバフロー か？
		goto	init		;No. Reset(Illegal interrupt)

		; タイムアウト割り込み処理

		bcf	INTCON,T0IF	;タイマオーバフロー解除
		clrf	TMR0		;TMR0 = 0 (256カウント) の設定
		decfsz	tmoutcnt,F	;タイムアウトカウンタ - 1 = 0 か？
		goto	int01		;No

		movf	tmoutwk,W	;仮タイムアウトカウンタ(スキップ回数)を
		movwf	tmoutcnt	;タイムアウトカウンタに設定

		incf	brailno,F	;点字データ番号の更新
;;		call	br_table_inc	;;(ここで実行すると
					;; スタックがオーバーフローする)
		bsf	autoflag,0	;自動(AUTO)フラグ(1)を設定
		bsf	autoflag,1	;自動(AUTO)フラグ(2)を設定

		; レジスタの復帰

int01		movf	s_save,W
		movwf	STATUS		;STATUS レジスタの復帰
		swapf	w_save,F
		swapf	w_save,W	;W レジスタの復帰

		retfie			;割り込みからの復帰

;==========================================================================
;	点字データテーブル
;==========================================================================

		org	h'400'		;

		; 点字データ拡張番号 brailex = 0

brail_table_1
		movwf	convwk		;点字データ番号を保存
		movlw	high $		;この場所の high アドレスを
		movwf	PCLATH		;PCLATH に設定
		movf	convwk,W	;点字データ番号を復帰
		addwf	PCL,F		;PC = PC + W

brail_tbl_1_st
		;	 '--123456'	; 母音
		retlw 	b'00100000'	;あ
		retlw 	b'00110000'	;い
		retlw	b'00100100'	;う
		retlw	b'00110100'	;え
		retlw	b'00010100'	;お

		;	 '--123456'	; 子音
		retlw 	b'00100001'	;か
		retlw 	b'00110001'	;き
		retlw	b'00100101'	;く
		retlw	b'00110101'	;け
		retlw	b'00010101'	;こ

		;	 '--123456'
		retlw 	b'00100011'	;さ
		retlw 	b'00110011'	;し
		retlw	b'00100111'	;す
		retlw	b'00110111'	;せ
		retlw	b'00010111'	;そ

		;	 '--123456'
		retlw 	b'00101010'	;た
		retlw 	b'00111010'	;ち
		retlw	b'00101110'	;つ
		retlw	b'00111110'	;て
		retlw	b'00011110'	;と

		;	 '--123456'
		retlw 	b'00101000'	;な
		retlw 	b'00111000'	;に
		retlw	b'00101100'	;ぬ
		retlw	b'00111100'	;ね
		retlw	b'00011100'	;の

		;	 '--123456'
		retlw 	b'00101001'	;は
		retlw 	b'00111001'	;ひ
		retlw	b'00101101'	;ふ
		retlw	b'00111101'	;へ
		retlw	b'00011101'	;ほ

		;	 '--123456'
		retlw 	b'00101011'	;ま
		retlw 	b'00111011'	;み
		retlw	b'00101111'	;む
		retlw	b'00111111'	;め
		retlw	b'00011111'	;も

		;	 '--123456'
		retlw 	b'00001100'	;や
		retlw 	b'00000000'	;
		retlw	b'00001101'	;ゆ
		retlw	b'00000000'	;
		retlw	b'00001110'	;よ

		;	 '--123456'
		retlw 	b'00100010'	;ら
		retlw 	b'00110010'	;り
		retlw	b'00100110'	;る
		retlw	b'00110110'	;れ
		retlw	b'00010110'	;ろ

		;	 '--123456'
		retlw 	b'00001000'	;わ
		retlw 	b'00011000'	;ゐ
		retlw	b'00000000'	;
		retlw	b'00011010'	;ゑ
		retlw	b'00001010'	;を

		;	 '--123456'
		retlw 	b'00001011'	;ん
		retlw 	b'00010000'	;っ: 促音
		retlw	b'00010010'	;ー: 長音
		retlw	b'00000011'	;、: 読点
		retlw	b'00010011'	;。: 句点
brail_tbl_1_ed

;==========================================================================

		; 点字データ拡張番号 brailex = 1

brail_table_2
		movwf	convwk		;点字データ番号を保存
		movlw	high $		;この場所の high アドレスを
		movwf	PCLATH		;PCLATH に設定
		movf	convwk,W	;点字データ番号を復帰
		addwf	PCL,F		;PC = PC + W

brail_tbl_2_st
		;	 '--123456'	; 濁音
		retlw	b'00000010'	;
		retlw 	b'00100001'	;が
		retlw	b'00000010'	;
		retlw 	b'00110001'	;ぎ
		retlw	b'00000010'	;
		retlw	b'00100101'	;ぐ
		retlw	b'00000010'	;
		retlw	b'00110101'	;げ
		retlw	b'00000010'	;
		retlw	b'00010101'	;ご

		;	 '--123456'
		retlw	b'00000010'	;
		retlw 	b'00100011'	;ざ
		retlw	b'00000010'	;
		retlw 	b'00110011'	;じ
		retlw	b'00000010'	;
		retlw	b'00100111'	;ず
		retlw	b'00000010'	;
		retlw	b'00110111'	;ぜ
		retlw	b'00000010'	;
		retlw	b'00010111'	;ぞ

		;	 '--123456'
		retlw	b'00000010'	;
		retlw 	b'00101010'	;だ
		retlw	b'00000010'	;
		retlw 	b'00111010'	;ぢ
		retlw	b'00000010'	;
		retlw	b'00101110'	;づ
		retlw	b'00000010'	;
		retlw	b'00111110'	;で
		retlw	b'00000010'	;
		retlw	b'00011110'	;ど

		;	 '--123456'
		retlw	b'00000010'	;
		retlw 	b'00101001'	;ば
		retlw	b'00000010'	;
		retlw 	b'00111001'	;び
		retlw	b'00000010'	;
		retlw	b'00101101'	;ぶ
		retlw	b'00000010'	;
		retlw	b'00111101'	;べ
		retlw	b'00000010'	;
		retlw	b'00011101'	;ぼ

		;	 '--123456'	; 半濁音
		retlw	b'00000001'	;
		retlw 	b'00101001'	;ぱ
		retlw	b'00000001'	;
		retlw 	b'00111001'	;ぴ
		retlw	b'00000001'	;
		retlw	b'00101101'	;ぷ
		retlw	b'00000001'	;
		retlw	b'00111101'	;ぺ
		retlw	b'00000001'	;
		retlw	b'00011101'	;ぽ

		;	 '--123456'	; 数字
		retlw	b'00001111'	;
		retlw 	b'00100000'	;１
		retlw	b'00001111'	;
		retlw 	b'00110000'	;２
		retlw	b'00001111'	;
		retlw 	b'00100100'	;３
		retlw	b'00001111'	;
		retlw 	b'00100110'	;４
		retlw	b'00001111'	;
		retlw 	b'00100010'	;５

		retlw	b'00001111'	;
		retlw 	b'00110100'	;６
		retlw	b'00001111'	;
		retlw 	b'00110110'	;７
		retlw	b'00001111'	;
		retlw 	b'00110010'	;８
		retlw	b'00001111'	;
		retlw 	b'00010100'	;９
		retlw	b'00001111'	;
		retlw 	b'00010110'	;０

		;	 '--123456'	; 外来発音
		retlw	b'00010001'	;
		retlw 	b'00100000'	;うぁ
		retlw	b'00010001'	;
		retlw 	b'00110000'	;うぃ
		retlw	b'00000000'	;
		retlw 	b'00000000'	;
		retlw	b'00010001'	;
		retlw 	b'00110100'	;うぇ
		retlw	b'00010001'	;
		retlw 	b'00010100'	;うぉ

		;	 '--123456'
		retlw	b'00010001'	;
		retlw 	b'00100001'	;くぁ
		retlw	b'00010001'	;
		retlw 	b'00110001'	;くぃ
		retlw	b'00000000'	;
		retlw 	b'00000000'	;
		retlw	b'00010001'	;
		retlw 	b'00110101'	;くぇ
		retlw	b'00010001'	;
		retlw 	b'00010101'	;くぉ

		;	 '--123456'
		retlw	b'00010001'	;
		retlw 	b'00101010'	;つぁ
		retlw	b'00010001'	;
		retlw 	b'00111010'	;つぃ
		retlw	b'00010001'	;
		retlw 	b'00101110'	;とぅ
		retlw	b'00010001'	;
		retlw 	b'00111110'	;つぇ
		retlw	b'00010001'	;
		retlw 	b'00011110'	;つぉ

		;	 '--123456'
		retlw	b'00010001'	;
		retlw 	b'00101001'	;ふぁ
		retlw	b'00010001'	;
		retlw 	b'00111001'	;ふぃ
		retlw	b'00000101'	;
		retlw 	b'00001101'	;ふゅ
		retlw	b'00010001'	;
		retlw 	b'00111101'	;ふぇ
		retlw	b'00010001'	;
		retlw 	b'00011101'	;ふぉ

		;	 '--123456'
		retlw	b'00010011'	;
		retlw 	b'00101001'	;ヴぁ
		retlw	b'00010011'	;
		retlw 	b'00111001'	;ヴぃ
		retlw	b'00000111'	;
		retlw 	b'00001101'	;ヴゅ
		retlw	b'00010011'	;
		retlw 	b'00111101'	;ヴぇ
		retlw	b'00010011'	;
		retlw 	b'00011101'	;ヴぉ

		;	 '--123456'
		retlw	b'00000000'	;
		retlw 	b'00000000'	;
		retlw	b'00000000'	;
		retlw 	b'00000000'	;
		retlw	b'00010011'	;
		retlw 	b'00101110'	;どぅ
		retlw	b'00000100'	;
		retlw 	b'00110100'	;いぇ
		retlw	b'00000000'	;
		retlw 	b'00000000'	;

		;	 '--123456'
		retlw	b'00010011'	;
		retlw 	b'00100001'	;ぐぁ
		retlw	b'00000000'	;
		retlw 	b'00000000'	;
		retlw	b'00000101'	;
		retlw 	b'00101110'	;てゅ
		retlw	b'00000100'	;
		retlw 	b'00110111'	;しぇ
		retlw	b'00000000'	;
		retlw 	b'00000000'	;

		;	 '--123456'
		retlw	b'00000000'	;
		retlw 	b'00000000'	;
		retlw	b'00000100'	;
		retlw 	b'00111010'	;てぃ
		retlw	b'00000111'	;
		retlw 	b'00101110'	;でゅ
		retlw	b'00000100'	;
		retlw 	b'00111110'	;ちぇ
		retlw	b'00000000'	;
		retlw 	b'00000000'	;

		;	 '--123456'
		retlw	b'00000000'	;
		retlw 	b'00000000'	;
		retlw	b'00000110'	;
		retlw 	b'00111010'	;でぃ
		retlw	b'00000010'	;
		retlw 	b'00100100'	;ヴ
		retlw	b'00000110'	;
		retlw 	b'00110111'	;じぇ
		retlw	b'00000000'	;
		retlw 	b'00000000'	;
brail_tbl_2_ed

;==========================================================================

		org	h'500'		;

		; 点字データ拡張番号 brailex = 2

brail_table_3
		movwf	convwk		;点字データ番号を保存
		movlw	high $		;この場所の high アドレスを
		movwf	PCLATH		;PCLATH に設定
		movf	convwk,W	;点字データ番号を復帰
		addwf	PCL,F		;PC = PC + W

brail_tbl_3_st
		;	 '--123456'	; 拗音
		retlw 	b'00000100'	;
		retlw 	b'00100001'	;きゃ
		retlw 	b'00000100'	;
		retlw	b'00100101'	;きゅ
		retlw	b'00000100'	;
		retlw	b'00010101'	;きょ

		;	 '--123456'
		retlw 	b'00000100'	;
		retlw 	b'00100011'	;しゃ
		retlw 	b'00000100'	;
		retlw	b'00100111'	;しゅ
		retlw	b'00000100'	;
		retlw	b'00010111'	;しょ

		;	 '--123456'
		retlw 	b'00000100'	;
		retlw 	b'00101010'	;ちゃ
		retlw 	b'00000100'	;
		retlw	b'00101110'	;ちゅ
		retlw	b'00000100'	;
		retlw	b'00011110'	;ちょ

		;	 '--123456'
		retlw 	b'00000100'	;
		retlw 	b'00101000'	;にゃ
		retlw 	b'00000100'	;
		retlw	b'00101100'	;にゅ
		retlw	b'00000100'	;
		retlw	b'00011100'	;にょ

		;	 '--123456'
		retlw 	b'00000100'	;
		retlw 	b'00101001'	;ひゃ
		retlw 	b'00000100'	;
		retlw	b'00101101'	;ひゅ
		retlw	b'00000100'	;
		retlw	b'00011101'	;ひょ

		;	 '--123456'
		retlw 	b'00000100'	;
		retlw 	b'00101011'	;みゃ
		retlw 	b'00000100'	;
		retlw	b'00101111'	;みゅ
		retlw	b'00000100'	;
		retlw	b'00011111'	;みょ

		;	 '--123456'
		retlw 	b'00000100'	;
		retlw 	b'00100010'	;りゃ
		retlw 	b'00000100'	;
		retlw	b'00100110'	;りゅ
		retlw	b'00000100'	;
		retlw	b'00010110'	;りょ

		;	 '--123456'	; 拗濁音
		retlw 	b'00000110'	;
		retlw 	b'00100001'	;ぎゃ
		retlw 	b'00000110'	;
		retlw	b'00100101'	;ぎゅ
		retlw	b'00000110'	;
		retlw	b'00010101'	;ぎょ

		;	 '--123456'
		retlw 	b'00000110'	;
		retlw 	b'00100011'	;じゃ
		retlw 	b'00000110'	;
		retlw	b'00100111'	;じゅ
		retlw	b'00000110'	;
		retlw	b'00010111'	;じょ

		;	 '--123456'
		retlw 	b'00000110'	;
		retlw 	b'00101010'	;ぢゃ
		retlw 	b'00000110'	;
		retlw	b'00101110'	;ぢゅ
		retlw	b'00000110'	;
		retlw	b'00011110'	;ぢょ

		;	 '--123456'
		retlw 	b'00000110'	;
		retlw 	b'00101001'	;びゃ
		retlw 	b'00000110'	;
		retlw	b'00101101'	;びゅ
		retlw	b'00000110'	;
		retlw	b'00011101'	;びょ

		;	 '--123456'	; 拗半濁音
		retlw 	b'00000101'	;
		retlw 	b'00101001'	;ぴゃ
		retlw 	b'00000101'	;
		retlw	b'00101101'	;ぴゅ
		retlw	b'00000101'	;
		retlw	b'00011101'	;ぴょ
brail_tbl_3_ed

;==========================================================================
;	点字データ,文字フォントデータ対応テーブル
;==========================================================================

		org	h'600'		;

		; 点字データ拡張番号 brailex = 0

brail_font_tbl_1

		retlw	high font_a	;あ
		retlw	low  font_a
		retlw	high font_i	;い
		retlw	low  font_i
		retlw	high font_u	;う
		retlw	low  font_u
		retlw	high font_e	;え
		retlw	low  font_e
		retlw	high font_o	;お
		retlw	low  font_o

		retlw	high font_ka	;か
		retlw	low  font_ka
		retlw	high font_ki	;き
		retlw	low  font_ki
		retlw	high font_ku	;く
		retlw	low  font_ku
		retlw	high font_ke	;け
		retlw	low  font_ke
		retlw	high font_ko	;こ
		retlw	low  font_ko

		retlw	high font_sa	;さ
		retlw	low  font_sa
		retlw	high font_si	;し
		retlw	low  font_si
		retlw	high font_su	;す
		retlw	low  font_su
		retlw	high font_se	;せ
		retlw	low  font_se
		retlw	high font_so	;そ
		retlw	low  font_so

		retlw	high font_ta	;た
		retlw	low  font_ta
		retlw	high font_ti	;ち
		retlw	low  font_ti
		retlw	high font_tu	;つ
		retlw	low  font_tu
		retlw	high font_te	;て
		retlw	low  font_te
		retlw	high font_to	;と
		retlw	low  font_to

		retlw	high font_na	;な
		retlw	low  font_na
		retlw	high font_ni	;に
		retlw	low  font_ni
		retlw	high font_nu	;ぬ
		retlw	low  font_nu
		retlw	high font_ne	;ね
		retlw	low  font_ne
		retlw	high font_no	;の
		retlw	low  font_no

		retlw	high font_ha	;は
		retlw	low  font_ha
		retlw	high font_hi	;ひ
		retlw	low  font_hi
		retlw	high font_hu	;ふ
		retlw	low  font_hu
		retlw	high font_he	;へ
		retlw	low  font_he
		retlw	high font_ho	;ほ
		retlw	low  font_ho

		retlw	high font_ma	;ま
		retlw	low  font_ma
		retlw	high font_mi	;み
		retlw	low  font_mi
		retlw	high font_mu	;む
		retlw	low  font_mu
		retlw	high font_me	;め
		retlw	low  font_me
		retlw	high font_mo	;も
		retlw	low  font_mo

		retlw	high font_ya	;や
		retlw	low  font_ya
		retlw	0		;
		retlw	0
		retlw	high font_yu	;ゆ
		retlw	low  font_yu
		retlw	0		;
		retlw	0
		retlw	high font_yo	;よ
		retlw	low  font_yo

		retlw	high font_ra	;ら
		retlw	low  font_ra
		retlw	high font_ri	;り
		retlw	low  font_ri
		retlw	high font_ru	;る
		retlw	low  font_ru
		retlw	high font_re	;れ
		retlw	low  font_re
		retlw	high font_ro	;ろ
		retlw	low  font_ro

		retlw	high font_wa	;わ
		retlw	low  font_wa
		retlw	high font_wi	;ゐ
		retlw	low  font_wi
		retlw	0		;
		retlw	0
		retlw	high font_we	;ゑ
		retlw	low  font_we
		retlw	high font_wo	;を
		retlw	low  font_wo

		retlw	high font_n	;ん
		retlw	low  font_n
		retlw	high font_ltu	;っ
		retlw	low  font_ltu
		retlw	high font_cyo	;ー
		retlw	low  font_cyo
		retlw	high font_ten	;、
		retlw	low  font_ten
		retlw	high font_maru	;。
		retlw	low  font_maru

;==========================================================================

		; 点字データ拡張番号 brailex = 1
		; 点字データ番号     brailno < 35

brail_font_tbl_2

		retlw	high font_ga	;が
		retlw	low  font_ga
		retlw	high font_gi	;ぎ
		retlw	low  font_gi
		retlw	high font_gu	;ぐ
		retlw	low  font_gu
		retlw	high font_ge	;げ
		retlw	low  font_ge
		retlw	high font_go	;ご
		retlw	low  font_go

		retlw	high font_za	;ざ
		retlw	low  font_za
		retlw	high font_zi	;じ
		retlw	low  font_zi
		retlw	high font_zu	;ず
		retlw	low  font_zu
		retlw	high font_ze	;ぜ
		retlw	low  font_ze
		retlw	high font_zo	;ぞ
		retlw	low  font_zo

		retlw	high font_da	;だ
		retlw	low  font_da
		retlw	high font_di	;ぢ
		retlw	low  font_di
		retlw	high font_du	;づ
		retlw	low  font_du
		retlw	high font_de	;で
		retlw	low  font_de
		retlw	high font_do	;ど
		retlw	low  font_do

		retlw	high font_ba	;ば
		retlw	low  font_ba
		retlw	high font_bi	;び
		retlw	low  font_bi
		retlw	high font_bu	;ぶ
		retlw	low  font_bu
		retlw	high font_be	;べ
		retlw	low  font_be
		retlw	high font_bo	;ぼ
		retlw	low  font_bo

		retlw	high font_pa	;ぱ
		retlw	low  font_pa
		retlw	high font_pi	;ぴ
		retlw	low  font_pi
		retlw	high font_pu	;ぷ
		retlw	low  font_pu
		retlw	high font_pe	;ぺ
		retlw	low  font_pe
		retlw	high font_po	;ぽ
		retlw	low  font_po

		retlw	high font_1	;１
		retlw	low  font_1
		retlw	high font_2	;２
		retlw	low  font_2
		retlw	high font_3	;３
		retlw	low  font_3
		retlw	high font_4	;４
		retlw	low  font_4
		retlw	high font_5	;５
		retlw	low  font_5

		retlw	high font_6	;６
		retlw	low  font_6
		retlw	high font_7	;７
		retlw	low  font_7
		retlw	high font_8	;８
		retlw	low  font_8
		retlw	high font_9	;９
		retlw	low  font_9
		retlw	high font_0	;０
		retlw	low  font_0

;==========================================================================

		; 点字データ拡張番号 brailex = 1
		; 点字データ番号     brailno >= 35

brail_font_tbl_2x

		retlw	high font_u	;う
		retlw	low  font_u
		retlw	high font_la	;ぁ
		retlw	low  font_la
		retlw	high font_u	;う
		retlw	low  font_u
		retlw	high font_li	;ぃ
		retlw	low  font_li
		retlw	0		;
		retlw	0
		retlw	0		;
		retlw	0
		retlw	high font_u	;う
		retlw	low  font_u
		retlw	high font_le	;ぇ
		retlw	low  font_le
		retlw	high font_u	;う
		retlw	low  font_u
		retlw	high font_lo	;ぉ
		retlw	low  font_lo

		retlw	high font_ku	;く
		retlw	low  font_ku
		retlw	high font_la	;ぁ
		retlw	low  font_la
		retlw	high font_ku	;く
		retlw	low  font_ku
		retlw	high font_li	;ぃ
		retlw	low  font_li
		retlw	0		;
		retlw	0
		retlw	0		;
		retlw	0
		retlw	high font_ku	;く
		retlw	low  font_ku
		retlw	high font_le	;ぇ
		retlw	low  font_le
		retlw	high font_ku	;く
		retlw	low  font_ku
		retlw	high font_lo	;ぉ
		retlw	low  font_lo

		retlw	high font_tu	;つ
		retlw	low  font_tu
		retlw	high font_la	;ぁ
		retlw	low  font_la
		retlw	high font_tu	;つ
		retlw	low  font_tu
		retlw	high font_li	;ぃ
		retlw	low  font_li
		retlw	high font_to	;と
		retlw	low  font_to
		retlw	high font_lu	;ぅ
		retlw	low  font_lu
		retlw	high font_tu	;つ
		retlw	low  font_tu
		retlw	high font_le	;ぇ
		retlw	low  font_le
		retlw	high font_tu	;つ
		retlw	low  font_tu
		retlw	high font_lo	;ぉ
		retlw	low  font_lo

		retlw	high font_hu	;ふ
		retlw	low  font_hu
		retlw	high font_la	;ぁ
		retlw	low  font_la
		retlw	high font_hu	;ふ
		retlw	low  font_hu
		retlw	high font_li	;ぃ
		retlw	low  font_li
		retlw	high font_hu	;ふ
		retlw	low  font_hu
		retlw	high font_lyu	;ゅ
		retlw	low  font_lyu
		retlw	high font_hu	;ふ
		retlw	low  font_hu
		retlw	high font_le	;ぇ
		retlw	low  font_le
		retlw	high font_hu	;ふ
		retlw	low  font_hu
		retlw	high font_lo	;ぉ
		retlw	low  font_lo

		retlw	high font_vu	;ヴ
		retlw	low  font_vu
		retlw	high font_la	;ぁ
		retlw	low  font_la
		retlw	high font_vu	;ヴ
		retlw	low  font_vu
		retlw	high font_li	;ぃ
		retlw	low  font_li
		retlw	high font_vu	;ヴ
		retlw	low  font_vu
		retlw	high font_lyu	;ゅ
		retlw	low  font_lyu
		retlw	high font_vu	;ヴ
		retlw	low  font_vu
		retlw	high font_le	;ぇ
		retlw	low  font_le
		retlw	high font_vu	;ヴ
		retlw	low  font_vu
		retlw	high font_lo	;ぉ
		retlw	low  font_lo

		retlw	0		;
		retlw	0
		retlw	0		;
		retlw	0
		retlw	0		;
		retlw	0
		retlw	0		;
		retlw	0
		retlw	high font_do	;ど
		retlw	low  font_do
		retlw	high font_lu	;ぅ
		retlw	low  font_lu
		retlw	high font_i	;い
		retlw	low  font_i
		retlw	high font_le	;ぇ
		retlw	low  font_le
		retlw	0		;
		retlw	0
		retlw	0		;
		retlw	0

		retlw	high font_gu	;ぐ
		retlw	low  font_gu
		retlw	high font_la	;ぁ
		retlw	low  font_la
		retlw	0		;
		retlw	0
		retlw	0		;
		retlw	0
		retlw	high font_te	;て
		retlw	low  font_te
		retlw	high font_lyu	;ゅ
		retlw	low  font_lyu
		retlw	high font_si	;し
		retlw	low  font_si
		retlw	high font_le	;ぇ
		retlw	low  font_le
		retlw	0		;
		retlw	0
		retlw	0		;
		retlw	0

		retlw	0		;
		retlw	0
		retlw	0		;
		retlw	0
		retlw	high font_te	;て
		retlw	low  font_te
		retlw	high font_li	;ぃ
		retlw	low  font_li
		retlw	high font_de	;で
		retlw	low  font_de
		retlw	high font_lyu	;ゅ
		retlw	low  font_lyu
		retlw	high font_ti	;ち
		retlw	low  font_ti
		retlw	high font_le	;ぇ
		retlw	low  font_le
		retlw	0		;
		retlw	0
		retlw	0		;
		retlw	0

		retlw	0		;
		retlw	0
		retlw	0		;
		retlw	0
		retlw	high font_de	;で
		retlw	low  font_de
		retlw	high font_li	;ぃ
		retlw	low  font_li
		retlw	high font_vu	;ヴ
		retlw	low  font_vu
		retlw	high font_dmy	;
		retlw	low  font_dmy
		retlw	high font_zi	;じ
		retlw	low  font_zi
		retlw	high font_le	;ぇ
		retlw	low  font_le
		retlw	0		;
		retlw	0
		retlw	0		;
		retlw	0

;==========================================================================

		; 点字データ拡張番号 brailex = 2

brail_font_tbl_3

		retlw	high font_ki	;き
		retlw	low  font_ki
		retlw	high font_lya	;ゃ
		retlw	low  font_lya
		retlw	high font_ki	;き
		retlw	low  font_ki
		retlw	high font_lyu	;ゅ
		retlw	low  font_lyu
		retlw	high font_ki	;き
		retlw	low  font_ki
		retlw	high font_lyo	;ょ
		retlw	low  font_lyo

		retlw	high font_si	;し
		retlw	low  font_si
		retlw	high font_lya	;ゃ
		retlw	low  font_lya
		retlw	high font_si	;し
		retlw	low  font_si
		retlw	high font_lyu	;ゅ
		retlw	low  font_lyu
		retlw	high font_si	;し
		retlw	low  font_si
		retlw	high font_lyo	;ょ
		retlw	low  font_lyo

		retlw	high font_ti	;ち
		retlw	low  font_ti
		retlw	high font_lya	;ゃ
		retlw	low  font_lya
		retlw	high font_ti	;ち
		retlw	low  font_ti
		retlw	high font_lyu	;ゅ
		retlw	low  font_lyu
		retlw	high font_ti	;ち
		retlw	low  font_ti
		retlw	high font_lyo	;ょ
		retlw	low  font_lyo

		retlw	high font_ni	;に
		retlw	low  font_ni
		retlw	high font_lya	;ゃ
		retlw	low  font_lya
		retlw	high font_ni	;に
		retlw	low  font_ni
		retlw	high font_lyu	;ゅ
		retlw	low  font_lyu
		retlw	high font_ni	;に
		retlw	low  font_ni
		retlw	high font_lyo	;ょ
		retlw	low  font_lyo

		retlw	high font_hi	;ひ
		retlw	low  font_hi
		retlw	high font_lya	;ゃ
		retlw	low  font_lya
		retlw	high font_hi	;ひ
		retlw	low  font_hi
		retlw	high font_lyu	;ゅ
		retlw	low  font_lyu
		retlw	high font_hi	;ひ
		retlw	low  font_hi
		retlw	high font_lyo	;ょ
		retlw	low  font_lyo

		retlw	high font_mi	;み
		retlw	low  font_mi
		retlw	high font_lya	;ゃ
		retlw	low  font_lya
		retlw	high font_mi	;み
		retlw	low  font_mi
		retlw	high font_lyu	;ゅ
		retlw	low  font_lyu
		retlw	high font_mi	;み
		retlw	low  font_mi
		retlw	high font_lyo	;ょ
		retlw	low  font_lyo

		retlw	high font_ri	;り
		retlw	low  font_ri
		retlw	high font_lya	;ゃ
		retlw	low  font_lya
		retlw	high font_ri	;り
		retlw	low  font_ri
		retlw	high font_lyu	;ゅ
		retlw	low  font_lyu
		retlw	high font_ri	;り
		retlw	low  font_ri
		retlw	high font_lyo	;ょ
		retlw	low  font_lyo

		retlw	high font_gi	;ぎ
		retlw	low  font_gi
		retlw	high font_lya	;ゃ
		retlw	low  font_lya
		retlw	high font_gi	;ぎ
		retlw	low  font_gi
		retlw	high font_lyu	;ゅ
		retlw	low  font_lyu
		retlw	high font_gi	;ぎ
		retlw	low  font_gi
		retlw	high font_lyo	;ょ
		retlw	low  font_lyo

		retlw	high font_zi	;じ
		retlw	low  font_zi
		retlw	high font_lya	;ゃ
		retlw	low  font_lya
		retlw	high font_zi	;じ
		retlw	low  font_zi
		retlw	high font_lyu	;ゅ
		retlw	low  font_lyu
		retlw	high font_zi	;じ
		retlw	low  font_zi
		retlw	high font_lyo	;ょ
		retlw	low  font_lyo

		retlw	high font_di	;ぢ
		retlw	low  font_di
		retlw	high font_lya	;ゃ
		retlw	low  font_lya
		retlw	high font_di	;ぢ
		retlw	low  font_di
		retlw	high font_lyu	;ゅ
		retlw	low  font_lyu
		retlw	high font_di	;ぢ
		retlw	low  font_di
		retlw	high font_lyo	;ょ
		retlw	low  font_lyo

		retlw	high font_bi	;び
		retlw	low  font_bi
		retlw	high font_lya	;ゃ
		retlw	low  font_lya
		retlw	high font_bi	;び
		retlw	low  font_bi
		retlw	high font_lyu	;ゅ
		retlw	low  font_lyu
		retlw	high font_bi	;び
		retlw	low  font_bi
		retlw	high font_lyo	;ょ
		retlw	low  font_lyo

		retlw	high font_pi	;ぴ
		retlw	low  font_pi
		retlw	high font_lya	;ゃ
		retlw	low  font_lya
		retlw	high font_pi	;ぴ
		retlw	low  font_pi
		retlw	high font_lyu	;ゅ
		retlw	low  font_lyu
		retlw	high font_pi	;ぴ
		retlw	low  font_pi
		retlw	high font_lyo	;ょ
		retlw	low  font_lyo

;==========================================================================
;	文字フォントデータテーブル
;==========================================================================

		org	h'800'		;Page1

font_a		retlw 	b'00010000'	;あ
		retlw 	b'01111110'
		retlw 	b'00010000'
		retlw 	b'00010010'
		retlw 	b'00111110'
		retlw 	b'01010101'
		retlw 	b'01011001'
		retlw 	b'00110010'

font_i		retlw 	b'01000000'	;い
		retlw 	b'01000100'
		retlw 	b'01000010'
		retlw 	b'01000010'
		retlw 	b'01000001'
		retlw 	b'01000001'
		retlw 	b'01001001'
		retlw 	b'00110000'

font_u		retlw	b'00111100'	;う
		retlw 	b'00000000'
		retlw 	b'01111100'
		retlw 	b'00000010'
		retlw 	b'00000010'
		retlw 	b'00000010'
		retlw 	b'00000100'
		retlw 	b'00011000'

font_e		retlw	b'00111000'	;え
		retlw 	b'00000000'
		retlw 	b'01111110'
		retlw 	b'00000100'
		retlw 	b'00001000'
		retlw 	b'00011000'
		retlw 	b'00101000'
		retlw 	b'01000111'

font_o		retlw	b'00100000'	;お
		retlw 	b'11111010'
		retlw 	b'00100001'
		retlw 	b'00111100'
		retlw 	b'01100010'
		retlw 	b'10100001'
		retlw 	b'10100001'
		retlw 	b'01100110'

font_ka		retlw 	b'00100000'	;か
		retlw 	b'00100000'
		retlw 	b'11111010'
		retlw 	b'00100101'
		retlw 	b'00100101'
		retlw 	b'00100100'
		retlw 	b'00100100'
		retlw 	b'01001000'

font_ki		retlw 	b'00010000'	;き
		retlw 	b'01111110'
		retlw 	b'00001000'
		retlw 	b'01111110'
		retlw 	b'00000100'
		retlw 	b'00111100'
		retlw 	b'01000000'
		retlw 	b'00111110'

font_ku		retlw	b'00000100'	;く
		retlw 	b'00001000'
		retlw 	b'00010000'
		retlw 	b'00100000'
		retlw 	b'00100000'
		retlw 	b'00010000'
		retlw 	b'00001000'
		retlw 	b'00000100'

font_ke		retlw	b'00000100'	;け
		retlw 	b'10000100'
		retlw 	b'10011111'
		retlw 	b'10000100'
		retlw 	b'10000100'
		retlw 	b'10000100'
		retlw 	b'10000100'
		retlw 	b'01001000'

font_ko		retlw	b'00000000'	;こ
		retlw 	b'00111100'
		retlw 	b'00000010'
		retlw 	b'00000000'
		retlw 	b'00000000'
		retlw 	b'01000000'
		retlw 	b'01000000'
		retlw 	b'00111110'

font_sa		retlw 	b'00010000'	;さ
		retlw 	b'01111110'
		retlw 	b'00001000'
		retlw 	b'00000100'
		retlw 	b'00111110'
		retlw 	b'01000000'
		retlw 	b'01000000'
		retlw 	b'00111110'

font_si		retlw 	b'00100000'	;し
		retlw 	b'00100000'
		retlw 	b'00100000'
		retlw 	b'00100000'
		retlw 	b'00100000'
		retlw 	b'00100000'
		retlw 	b'00100010'
		retlw 	b'00011100'

font_su		retlw	b'00001000'	;す
		retlw 	b'11111110'
		retlw 	b'00001000'
		retlw 	b'00111000'
		retlw 	b'01001000'
		retlw 	b'00111000'
		retlw 	b'00001000'
		retlw 	b'00110000'

font_se		retlw	b'00000100'	;せ
		retlw 	b'00100100'
		retlw 	b'11111111'
		retlw 	b'00100100'
		retlw 	b'00100100'
		retlw 	b'00100000'
		retlw 	b'00100000'
		retlw 	b'00011110'

font_so		retlw	b'00111100'	;そ
		retlw 	b'00001000'
		retlw 	b'00010000'
		retlw 	b'01111110'
		retlw 	b'00001000'
		retlw 	b'00010000'
		retlw 	b'00010000'
		retlw 	b'00001100'

font_ta		retlw 	b'00100000'	;た
		retlw 	b'01111100'
		retlw 	b'00100000'
		retlw 	b'00100111'
		retlw 	b'00100000'
		retlw 	b'01000000'
		retlw 	b'01001000'
		retlw 	b'01000111'

font_ti		retlw 	b'00100000'	;ち
		retlw 	b'11111100'
		retlw 	b'00100000'
		retlw 	b'00100000'
		retlw 	b'00111100'
		retlw 	b'00000010'
		retlw 	b'00000010'
		retlw 	b'00111100'

font_tu		retlw	b'00000000'	;つ
		retlw 	b'00011110'
		retlw 	b'11100001'
		retlw 	b'00000001'
		retlw 	b'00000001'
		retlw 	b'00000001'
		retlw 	b'00011110'
		retlw 	b'00000000'

font_te		retlw	b'00000000'	;て
		retlw 	b'11111110'
		retlw 	b'00001000'
		retlw 	b'00010000'
		retlw 	b'00010000'
		retlw 	b'00010000'
		retlw 	b'00001000'
		retlw 	b'00000110'

font_to		retlw	b'00100000'	;と
		retlw 	b'00100000'
		retlw 	b'00010110'
		retlw 	b'00011000'
		retlw 	b'00100000'
		retlw 	b'01000000'
		retlw 	b'01000000'
		retlw 	b'00111110'

font_na		retlw 	b'00100000'	;な
		retlw 	b'11110000'
		retlw 	b'01000010'
		retlw 	b'01001001'
		retlw 	b'10001000'
		retlw 	b'00111100'
		retlw 	b'01001010'
		retlw 	b'00111000'

font_ni		retlw 	b'01000000'	;に
		retlw 	b'01011110'
		retlw 	b'01000001'
		retlw 	b'01000000'
		retlw 	b'01000000'
		retlw 	b'01010000'
		retlw 	b'01001111'
		retlw 	b'00100000'

font_nu		retlw	b'00001000'	;ぬ
		retlw 	b'01001000'
		retlw 	b'01111100'
		retlw 	b'01001010'
		retlw 	b'10101010'
		retlw 	b'10010110'
		retlw 	b'10101011'
		retlw 	b'01000100'

font_ne		retlw	b'00100000'	;ね
		retlw 	b'00100000'
		retlw 	b'11101100'
		retlw 	b'00110010'
		retlw 	b'00100010'
		retlw 	b'01100110'
		retlw 	b'10101010'
		retlw 	b'00100101'

font_no		retlw	b'00000000'	;の
		retlw 	b'00011100'
		retlw 	b'00101010'
		retlw 	b'01001001'
		retlw 	b'01001001'
		retlw 	b'01001001'
		retlw 	b'01001001'
		retlw 	b'00110010'

font_ha		retlw 	b'00000100'	;は
		retlw 	b'10000100'
		retlw 	b'10011111'
		retlw 	b'10000100'
		retlw 	b'10000100'
		retlw 	b'10011110'
		retlw 	b'10100101'
		retlw 	b'01011100'

font_hi		retlw 	b'00000000'	;ひ
		retlw 	b'11100000'
		retlw 	b'00100110'
		retlw 	b'00100101'
		retlw 	b'01000100'
		retlw 	b'01000100'
		retlw 	b'01000100'
		retlw 	b'00111000'

font_hu		retlw	b'00000000'	;ふ
		retlw 	b'00010000'
		retlw 	b'00001000'
		retlw 	b'00010000'
		retlw 	b'00010000'
		retlw 	b'01001010'
		retlw 	b'01001001'
		retlw 	b'10010001'

font_he		retlw	b'00000000'	;へ
		retlw 	b'00000000'
		retlw 	b'00110000'
		retlw 	b'01001000'
		retlw 	b'10000100'
		retlw 	b'00000011'
		retlw 	b'00000000'
		retlw 	b'00000000'

font_ho		retlw	b'00000000'	;ほ
		retlw 	b'10011111'
		retlw 	b'10000100'
		retlw 	b'10011111'
		retlw 	b'10000100'
		retlw 	b'10011110'
		retlw 	b'10100101'
		retlw 	b'01011100'

font_ma		retlw 	b'00001000'	;ま
		retlw 	b'01111110'
		retlw 	b'00001000'
		retlw 	b'01111110'
		retlw 	b'00001000'
		retlw 	b'00111100'
		retlw 	b'01001010'
		retlw 	b'00111000'

font_mi		retlw 	b'00000000'	;み
		retlw 	b'01110000'
		retlw 	b'00010010'
		retlw 	b'00010010'
		retlw 	b'01111110'
		retlw 	b'10010011'
		retlw 	b'10010010'
		retlw 	b'01100100'

font_mu		retlw	b'00100000'	;む
		retlw 	b'11111010'
		retlw 	b'00100001'
		retlw 	b'01100000'
		retlw 	b'10100000'
		retlw 	b'01100010'
		retlw 	b'00100010'
		retlw 	b'00011100'

font_me		retlw	b'00000000'	;め
		retlw 	b'01001000'
		retlw 	b'01111110'
		retlw 	b'01001001'
		retlw 	b'10101001'
		retlw 	b'10010001'
		retlw 	b'10110001'
		retlw 	b'01000110'

font_mo		retlw	b'00010000'	;も
		retlw 	b'01111110'
		retlw 	b'00010000'
		retlw 	b'01111110'
		retlw 	b'00010000'
		retlw 	b'00010000'
		retlw 	b'00010010'
		retlw 	b'00001100'

font_ya		retlw 	b'00000000'	;や
		retlw 	b'00101000'
		retlw 	b'11111110'
		retlw 	b'00101001'
		retlw 	b'00100001'
		retlw 	b'00100010'
		retlw 	b'00010000'
		retlw 	b'00010000'

font_yu		retlw	b'00001000'	;ゆ
		retlw 	b'00001000'
		retlw 	b'10111110'
		retlw 	b'11001001'
		retlw 	b'10001001'
		retlw 	b'10001001'
		retlw 	b'01001010'
		retlw 	b'00010000'

font_yo		retlw	b'00001000'	;よ
		retlw 	b'00001000'
		retlw 	b'00001110'
		retlw 	b'00001000'
		retlw 	b'00001000'
		retlw 	b'00111100'
		retlw 	b'01001010'
		retlw 	b'00110000'

font_ra		retlw 	b'00001000'	;ら
		retlw 	b'00100100'
		retlw 	b'00100000'
		retlw 	b'00100000'
		retlw 	b'00111100'
		retlw 	b'00000010'
		retlw 	b'00000010'
		retlw 	b'00111100'

font_ri		retlw 	b'00000100'	;り
		retlw 	b'00100010'
		retlw 	b'00100010'
		retlw 	b'00100010'
		retlw 	b'00100010'
		retlw 	b'00000010'
		retlw 	b'00000100'
		retlw 	b'00011000'

font_ru		retlw	b'00111110'	;る
		retlw 	b'00000100'
		retlw 	b'00001000'
		retlw 	b'00111100'
		retlw 	b'00000010'
		retlw 	b'00011010'
		retlw 	b'00100110'
		retlw 	b'00011100'

font_re		retlw	b'00100000'	;れ
		retlw 	b'00101000'
		retlw 	b'11110100'
		retlw 	b'00100100'
		retlw 	b'00100100'
		retlw 	b'01100100'
		retlw 	b'10100101'
		retlw 	b'00100010'

font_ro		retlw	b'00111110'	;ろ
		retlw 	b'00000100'
		retlw 	b'00001000'
		retlw 	b'00111100'
		retlw 	b'00000010'
		retlw 	b'00000010'
		retlw 	b'00100010'
		retlw 	b'00011100'

font_wa		retlw 	b'00100000'	;わ
		retlw 	b'00100000'
		retlw 	b'11101110'
		retlw 	b'00110001'
		retlw 	b'00100001'
		retlw 	b'01100001'
		retlw 	b'10100001'
		retlw 	b'00100110'

font_wi		retlw 	b'00111100'	;ゐ
		retlw 	b'00001000'
		retlw 	b'00111100'
		retlw 	b'01010010'
		retlw 	b'10010001'
		retlw 	b'10100111'
		retlw 	b'01001001'
		retlw 	b'00000110'

font_we		retlw	b'00111100'	;ゑ
		retlw 	b'00001000'
		retlw 	b'00111100'
		retlw 	b'00000010'
		retlw 	b'00111100'
		retlw 	b'00100000'
		retlw 	b'01101100'
		retlw 	b'10010011'

font_wo		retlw	b'00100000'	;を
		retlw 	b'01111100'
		retlw 	b'00100000'
		retlw 	b'00110110'
		retlw 	b'01001000'
		retlw 	b'00011000'
		retlw 	b'00100000'
		retlw 	b'00011110'

font_n		retlw	b'00001000'	;ん
		retlw 	b'00010000'
		retlw 	b'00010000'
		retlw 	b'00100000'
		retlw 	b'00110000'
		retlw 	b'01001001'
		retlw 	b'01001001'
		retlw 	b'01000110'

font_ga		retlw 	b'00100011'	;が
		retlw 	b'00100000'
		retlw 	b'11111010'
		retlw 	b'00100101'
		retlw 	b'00100101'
		retlw 	b'00100100'
		retlw 	b'00100100'
		retlw 	b'01001000'

font_gi		retlw 	b'00010011'	;ぎ
		retlw 	b'01111110'
		retlw 	b'00001000'
		retlw 	b'01111110'
		retlw 	b'00000100'
		retlw 	b'00111100'
		retlw 	b'01000000'
		retlw 	b'00111110'

font_gu		retlw	b'00000100'	;ぐ
		retlw 	b'00001011'
		retlw 	b'00010000'
		retlw 	b'00100000'
		retlw 	b'00100000'
		retlw 	b'00010000'
		retlw 	b'00001000'
		retlw 	b'00000100'

font_ge		retlw	b'00000111'	;げ
		retlw 	b'10000100'
		retlw 	b'10011111'
		retlw 	b'10000100'
		retlw 	b'10000100'
		retlw 	b'10000100'
		retlw 	b'10000100'
		retlw 	b'01001000'

font_go		retlw	b'00000011'	;ご
		retlw 	b'00111100'
		retlw 	b'00000010'
		retlw 	b'00000000'
		retlw 	b'00000000'
		retlw 	b'01000000'
		retlw 	b'01000000'
		retlw 	b'00111110'

font_za		retlw 	b'00010011'	;ざ
		retlw 	b'01111110'
		retlw 	b'00001000'
		retlw 	b'00000100'
		retlw 	b'00111110'
		retlw 	b'01000000'
		retlw 	b'01000000'
		retlw 	b'00111110'

font_zi		retlw 	b'00100110'	;じ
		retlw 	b'00100000'
		retlw 	b'00100000'
		retlw 	b'00100000'
		retlw 	b'00100000'
		retlw 	b'00100000'
		retlw 	b'00100010'
		retlw 	b'00011100'

font_zu		retlw	b'00001011'	;ず
		retlw 	b'11111110'
		retlw 	b'00001000'
		retlw 	b'00111000'
		retlw 	b'01001000'
		retlw 	b'00111000'
		retlw 	b'00001000'
		retlw 	b'00110000'

font_ze		retlw	b'00000111'	;ぜ
		retlw 	b'00100100'
		retlw 	b'11111111'
		retlw 	b'00100100'
		retlw 	b'00100100'
		retlw 	b'00100000'
		retlw 	b'00100000'
		retlw 	b'00011110'

font_zo		retlw	b'00111100'	;ぞ
		retlw 	b'00001011'
		retlw 	b'00010000'
		retlw 	b'01111110'
		retlw 	b'00001000'
		retlw 	b'00010000'
		retlw 	b'00010000'
		retlw 	b'00001100'

font_da		retlw 	b'00100011'	;だ
		retlw 	b'01111100'
		retlw 	b'00100000'
		retlw 	b'00100111'
		retlw 	b'00100000'
		retlw 	b'01000000'
		retlw 	b'01001000'
		retlw 	b'01000111'

font_di		retlw 	b'00100011'	;ぢ
		retlw 	b'11111100'
		retlw 	b'00100000'
		retlw 	b'00100000'
		retlw 	b'00111100'
		retlw 	b'00000010'
		retlw 	b'00000010'
		retlw 	b'00111100'

font_du		retlw	b'00000011'	;づ
		retlw 	b'00011110'
		retlw 	b'11100001'
		retlw 	b'00000001'
		retlw 	b'00000001'
		retlw 	b'00000001'
		retlw 	b'00011110'
		retlw 	b'00000000'

font_de		retlw	b'00000000'	;で
		retlw 	b'11111110'
		retlw 	b'00001000'
		retlw 	b'00010011'
		retlw 	b'00010000'
		retlw 	b'00010000'
		retlw 	b'00001000'
		retlw 	b'00000110'

font_do		retlw	b'00100011'	;ど
		retlw 	b'00100000'
		retlw 	b'00010110'
		retlw 	b'00011000'
		retlw 	b'00100000'
		retlw 	b'01000000'
		retlw 	b'01000000'
		retlw 	b'00111110'

font_ba		retlw 	b'00000011'	;ば
		retlw 	b'10000100'
		retlw 	b'10011111'
		retlw 	b'10000100'
		retlw 	b'10000100'
		retlw 	b'10011110'
		retlw 	b'10100101'
		retlw 	b'01011100'

font_bi		retlw 	b'00000011'	;び
		retlw 	b'11100000'
		retlw 	b'00100110'
		retlw 	b'00100101'
		retlw 	b'01000100'
		retlw 	b'01000100'
		retlw 	b'01000100'
		retlw 	b'00111000'

font_bu		retlw	b'00000011'	;ぶ
		retlw 	b'00010000'
		retlw 	b'00001000'
		retlw 	b'00010000'
		retlw 	b'00010000'
		retlw 	b'01001010'
		retlw 	b'01001001'
		retlw 	b'10010001'

font_be		retlw	b'00000011'	;べ
		retlw 	b'00000000'
		retlw 	b'00110000'
		retlw 	b'01001000'
		retlw 	b'10000100'
		retlw 	b'00000011'
		retlw 	b'00000000'
		retlw 	b'00000000'

font_bo		retlw	b'00000011'	;ぼ
		retlw 	b'10011110'
		retlw 	b'10000100'
		retlw 	b'10011111'
		retlw 	b'10000100'
		retlw 	b'10011110'
		retlw 	b'10100101'
		retlw 	b'01011100'

font_pa		retlw 	b'00000010'	;ぱ
		retlw 	b'10000101'
		retlw 	b'10011110'
		retlw 	b'10000100'
		retlw 	b'10000100'
		retlw 	b'10011110'
		retlw 	b'10100101'
		retlw 	b'01011100'

font_pi		retlw 	b'00000010'	;ぴ
		retlw 	b'11100101'
		retlw 	b'00100010'
		retlw 	b'00100110'
		retlw 	b'01000101'
		retlw 	b'01000100'
		retlw 	b'01000100'
		retlw 	b'00111000'

font_pu		retlw	b'00000010'	;ぷ
		retlw 	b'00010101'
		retlw 	b'00001010'
		retlw 	b'00010000'
		retlw 	b'00010000'
		retlw 	b'01001010'
		retlw 	b'01001001'
		retlw 	b'10010001'

font_pe		retlw	b'00000010'	;ぺ
		retlw 	b'00000101'
		retlw 	b'00110010'
		retlw 	b'01001000'
		retlw 	b'10000100'
		retlw 	b'00000011'
		retlw 	b'00000000'
		retlw 	b'00000000'

font_po		retlw	b'00000010'	;ぽ
		retlw 	b'10011101'
		retlw 	b'10000110'
		retlw 	b'10011111'
		retlw 	b'10000100'
		retlw 	b'10011110'
		retlw 	b'10100101'
		retlw 	b'01011100'

font_vu		retlw	b'00010011'	;ヴ
		retlw 	b'00010000'
		retlw 	b'11111110'
		retlw 	b'10000010'
		retlw 	b'10000010'
		retlw 	b'00000010'
		retlw 	b'00000100'
		retlw 	b'00011000'

font_cyo	retlw	b'00000000'	;ー: 長音
		retlw 	b'00000000'
		retlw 	b'00000000'
		retlw 	b'00000000'
		retlw 	b'11111110'
		retlw 	b'00000000'
		retlw 	b'00000000'
		retlw 	b'00000000'

font_ten	retlw	b'00000000'	;、: 読点
		retlw 	b'00000000'
		retlw 	b'00000000'
		retlw 	b'00000000'
		retlw 	b'01000000'
		retlw 	b'00100000'
		retlw 	b'00010000'
		retlw 	b'00010000'

font_maru	retlw	b'00000000'	;。: 句点
		retlw 	b'00000000'
		retlw 	b'00000000'
		retlw 	b'00000000'
		retlw 	b'00110000'
		retlw 	b'01001000'
		retlw 	b'01001000'
		retlw 	b'00110000'

font_1		retlw	b'00001000'	;１
		retlw 	b'00011000'
		retlw 	b'00001000'
		retlw 	b'00001000'
		retlw 	b'00001000'
		retlw 	b'00001000'
		retlw 	b'00001000'
		retlw 	b'00011100'

font_2		retlw	b'00111100'	;２
		retlw 	b'01000010'
		retlw 	b'00000010'
		retlw 	b'00001100'
		retlw 	b'00010000'
		retlw 	b'00100000'
		retlw 	b'01000000'
		retlw 	b'01111110'

font_3		retlw	b'00111100'	;３
		retlw 	b'01000010'
		retlw 	b'00000010'
		retlw 	b'00111100'
		retlw 	b'00000010'
		retlw 	b'00000010'
		retlw 	b'01000010'
		retlw 	b'00111100'

font_4		retlw	b'00000100'	;４
		retlw 	b'00001100'
		retlw 	b'00010100'
		retlw 	b'00100100'
		retlw 	b'01000100'
		retlw 	b'01111110'
		retlw 	b'00000100'
		retlw 	b'00000100'

font_5		retlw	b'01111110'	;５
		retlw 	b'01000000'
		retlw 	b'01000000'
		retlw 	b'01111100'
		retlw 	b'00000010'
		retlw 	b'00000010'
		retlw 	b'01000010'
		retlw 	b'00111100'

font_6		retlw	b'00111100'	;６
		retlw 	b'01000010'
		retlw 	b'01000000'
		retlw 	b'01111100'
		retlw 	b'01000010'
		retlw 	b'01000010'
		retlw 	b'01000010'
		retlw 	b'00111100'

font_7		retlw	b'01111110'	;７
		retlw 	b'00000010'
		retlw 	b'00000100'
		retlw 	b'00001000'
		retlw 	b'00001000'
		retlw 	b'00010000'
		retlw 	b'00010000'
		retlw 	b'00010000'

font_8		retlw	b'00111100'	;８
		retlw 	b'01000010'
		retlw 	b'01000010'
		retlw 	b'00111100'
		retlw 	b'01000010'
		retlw 	b'01000010'
		retlw 	b'01000010'
		retlw 	b'00111100'

font_9		retlw	b'00111100'	;９
		retlw 	b'01000010'
		retlw 	b'01000010'
		retlw 	b'00111110'
		retlw 	b'00000010'
		retlw 	b'00000010'
		retlw 	b'01000010'
		retlw 	b'00111100'

font_0		retlw	b'00111100'	;０
		retlw 	b'01000010'
		retlw 	b'01000010'
		retlw 	b'01000010'
		retlw 	b'01000010'
		retlw 	b'01000010'
		retlw 	b'01000010'
		retlw 	b'00111100'

font_la		retlw 	b'00000000'	;ぁ
		retlw 	b'00010000'
		retlw 	b'01111100'
		retlw 	b'00010010'
		retlw 	b'00111100'
		retlw 	b'01011010'
		retlw 	b'00110010'
		retlw 	b'00000000'

font_li		retlw 	b'00000000'	;ぃ
		retlw 	b'00000000'
		retlw 	b'00000000'
		retlw 	b'01000100'
		retlw 	b'01000010'
		retlw 	b'01000010'
		retlw 	b'00100000'
		retlw 	b'00000000'

font_lu		retlw	b'00000000'	;ぅ
		retlw 	b'00011100'
		retlw 	b'00000000'
		retlw 	b'00111100'
		retlw 	b'00000010'
		retlw 	b'00000010'
		retlw 	b'00011100'
		retlw 	b'00000000'

font_le		retlw	b'00000000'	;ぇ
		retlw 	b'00011000'
		retlw 	b'00000000'
		retlw 	b'00111100'
		retlw 	b'00001000'
		retlw 	b'00011000'
		retlw 	b'00100110'
		retlw 	b'00000000'

font_lo		retlw	b'00000000'	;ぉ
		retlw 	b'00010100'
		retlw 	b'01111010'
		retlw 	b'00010000'
		retlw 	b'00111100'
		retlw 	b'01010010'
		retlw 	b'01110100'
		retlw 	b'00000000'

font_lya	retlw 	b'00000000'	;ゃ
		retlw 	b'00101000'
		retlw 	b'01111100'
		retlw 	b'00101010'
		retlw 	b'00100010'
		retlw 	b'00010100'
		retlw 	b'00010000'
		retlw 	b'00000000'

font_lyu	retlw	b'00000000'	;ゅ
		retlw 	b'00010000'
		retlw 	b'01011100'
		retlw 	b'01110010'
		retlw 	b'01010010'
		retlw 	b'00010100'
		retlw 	b'00100000'
		retlw 	b'00000000'

font_lyo	retlw	b'00000000'	;ょ
		retlw 	b'00001000'
		retlw 	b'00001110'
		retlw 	b'00001000'
		retlw 	b'00111100'
		retlw 	b'01001010'
		retlw 	b'00111000'
		retlw 	b'00000000'

font_ltu	retlw 	b'00000000'	;っ: 促音
		retlw 	b'00000000'
		retlw 	b'00000000'
		retlw 	b'00011100'
		retlw 	b'01100010'
		retlw 	b'00000010'
		retlw 	b'00011100'
		retlw 	b'00000000'

font_dmy	retlw 	b'00000000'	;dummy
		retlw 	b'00000000'
		retlw 	b'00000000'
		retlw 	b'00000000'
		retlw 	b'00000000'
		retlw 	b'00000000'
		retlw 	b'00000000'
		retlw 	b'00000000'

		end			;プログラムの終了
