 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;		ＰＩＣ１６Ｆ１８２９　グラフィックＬＣＤ制御ボード
;
;							2016年10月	Ver1.0	JA0QON
;
;		パラレル接続グラフィックＬＣＤをＩ２Ｃ接続で使う
;		コマンドでキャラクタ表示や図形描画を行う
;
;	ターゲットディスプレイ
;		SG12864A パラレル接続128dot×64dot液晶モジュール
;
;	現在機能描画ルーチン
;		8dot×6dotのフォントパターンを縦8行横21行で表示
;		16dot×8dotのフォントパターンを縦4行横16桁で表示
;		16dot×16dotのフォントパターンを縦4行横8桁で表示
;	搭載フォントパターン
;		8dot×6dotFONT	英数カナ
;		16dot×8dotFONT	英数カナ
;	ＬＣＤコントロール
;		PIC16F1829 32MHZ 内部発振
;		コマンドワード間ウエイトは考慮されていない
;	ＭＳＳＰ　Ｉ２Ｃスレーブモード低レベルルーチン Ver0.1
;		マスタへのデータ送信は未対応
;		受信機能もI2C機能のすべてを網羅していない
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

		LIST	P=PIC16F1829
		INCLUDE	P16F1829.INC

;
;CONFIGURATION WORD 1(ADDRESS:8007H)
;					設定
;bit13		FCMEN	0	Fail-Safe Clock Monitor
;						1=有効,0=無効
;bit12		IESO	0	内部･外部切替スイッチモード
;			________	1=有効,0=無効
;bit11		CLKOUTEN 1	クロック出力イネーブルビット
;						1=無効　RA4I/O使用可
;						0=有効　クロックがCLKPUTピンに出力される
;bit10-9	BOREN	00	ブラウンアウト設定
;						11=有効
;						10=スリープ時以外有効
;			___			00=無効
;bit8		CPD		1	データメモリプロテクション
;			__			1=無効,0=有効
;bit7		CP		1	プログラムメモリプロテクション　
;						1=無効,0=有効
;bit6		MCLRE	0	RA3/MCLRピン選択ビット
;			_____		1=MCLR有効,0=RA3有効(Digital input)
;bit5		PWRTE	0	power_up timer　使います。
;						1=無効,0=有効
;bit4-3		WDTE	00	Watchdog Timer
;						11=有効
;						10=ランニング中に有効、スリープ中は無効
;						01=レジスタによるコントロール
;						00=無効
;bit2-0		FOSC	100	発振器選択ビット
;						111=ECH:外部クロック入力（4-32MHZ)、RA4I/O可
;						110=ECM:外部クロック入力（0.5-4MHZ)、RA4I/O可
;						101=ECL:外部クロック入力（0-0.5MHZ)、RA4I/O可
;						100=INTOSC:内部発振、RA4-RA5I/O可
;						011=EXTRC:外部RC発振、RA4I/O可、RA5不可
;						010=HS：外部発振子、I/O不可
;						001=XT：　〃
;						000=LP：　〃
;
;bit	15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
;data    0  0  0  0  1  0  0  1  1  0  0  0  0  1  0  0
;
;
	__CONFIG _CONFIG1,	B'0000100110000100'
;
;CONFIGURATION WORD 2(ADDRESS:8008H)マニュアル52ページ
;					設定
;bit13		LVP		0	低電圧プログラミング設定
;						1=有効
;			_____		0=無効、高電圧必要
;bit12		DEBUG	1	インサーキット･デバッガ モード設定
;						1=無効
;						0=有効、RA0-1をデバッガに使用
;bit11					Unimplemented(read = 1)
;bit10		BORV	0	ブラウンアウト･リセット電圧選択ビット（Vbor参照)
;						1=低電圧で動作
;						0=高電圧で動作
;bit9		STVREN	0	スタック･オーバーフロー･リセット設定
;						1=有効
;						0=無効
;bit8		PLLEN	0	PLL設定
;						1=4xPLL有効
;						0=4xPLL無効
;bit7-5					Unimplemented(read = 1)
;bit4					Reserved (read = 1)
;bit3-2					Unimplemented(read = 1)
;bit1-0		WRT		11	フラッシュメモリ プロテクション設定（EECONレジスタ参照)
;						11=無効
;						10=0h-1FFh有効
;						01=0h-3FFh有効
;						00=0h-7FFh有効
;
;bit	15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
;data    0  0  0  1  1  0  0  0  1  1  1  1  1  1  1  1
;
;
	__CONFIG _CONFIG2,	B'0001100011111111'



;		ワークエリア定義
;
;		BANK0	20h-7Fh
;
;		使用していないのもあります
;

;演算引数・戻り値用
hex0		equ		020h		;32ビットバイナリ演算用
hex1		equ		021h		;
hex2		equ		022h
hex3		equ		023h
hexw0		equ		024h		;32ビットバイナリ演算用
hexw1		equ		025h
hexw2		equ		026h
hexw3		equ		027h
;ウエイト用専用ワーク
cnt0		equ		028h		;時間待ちルーチン用専用ワーク
cnt1		equ		029h
cnt2		equ		02ah
cnt3		equ		02bh
;汎用ローカルワーク
tmp0		equ		02ch		;汎用ワーク、その場所限定
tmp1		equ		02dh		;移動した場合、破壊されること有
tmp2		equ		02eh
tmp3		equ		02fh
;機能専用広域ワーク
FLG			equ		030h		;エラー＆設定フラグ
MSAD0		equ		031h		;実行モード設定
hexd		equ		032h		;小数部分
ASC0		equ		033h		;ASCIIデータ下位ビット
ASC1		equ		034h		;ASCIIデータ上位ビット
DCM0		equ		035h		;基数演算用ワーク
DCM1		equ		036h		;
DCM2        equ     037h        ;
DSP_MODE	equ		038h		;ディスプレイモード スイッチフラグ
DSP_ADR		equ		039h		;キャラクタ表示アドレス
DSP_CHAR	equ     03Ah        ;キャラクタ表示文字コード
MSAD1		equ     03Bh        ;
;BCD用広域ワーク
digit12     equ     03Ch        ;BCD変換出力1，2桁
digit34     equ     03Dh		;BCD変換出力3，4桁
digit56     equ     03Eh        ;BCD変換出力5，6桁
digit78     equ     03Fh        ;BCD変換出力7，8桁
digit9A     equ     040h        ;BCD変換出力9，10桁
bcdw0		equ		041h		;BCD補正処理ワーク
bcdw1		equ		042h
;汎用広域ワーク
wrk0		equ		043h        ;演算用汎用ワーク
wrk1		equ		044h
wrk2		equ		045h
wrk3		equ		046h
shift       equ     047h        ;ビットシフト用ワーク
colum		equ		048h		;現在の桁位置
colw0		equ		049h		;桁位置処理ワーク
colw1		equ		04ah		;
;8桁7セグLED専用広域ワーク
CMD0		equ		04bh		;コマンドパケット下位8ビット
CMD1		equ		04ch		;コマンドパケット上位8ビット
DBUF0		equ		04dh		;SPI送信データ編集用バッファ
DBUF1		equ		04eh
DBUF2		equ		04fh
DBUF3		equ		050h
DBUF4		equ		051h
DBUF5		equ		052h
DBUF6		equ		053h
DBUF7		equ		054h
;FIFOバッファ専用ワーク
BFAD0		equ		055h		;バッファアドレス下位8bit
BFAD1		equ		056h		;バッファアドレス上位8bit
BFPT0		equ		057h		;バッファポインタ0
BFPT1		equ		058h
;I2C操作用ワーク
LDWR		equ		059h		;Wreg退避用
I2C_MODE	equ		05Ah		;I2C受信フラグ
I2C_DATA	equ		05bh		;I2C受信データバイト
CTRL		equ		05ch		;コマンドワードのCTRLバイト
icw0        equ     05dh		;専用ワーク
icw1        equ     05eh
;メインループ用広域ワーク
FDA0        equ     060h		;32ビット アップダウン カウンタ
FDA1        equ     061h		;基本動作周波数用
FDA2		equ     062h		;
FDA3		equ     063h		;
;GLCD用ワーク
WIDTH		equ		064h		;
PGAD		equ		065h		;ページ（Y軸）保持ワーク
CGAD		equ		066h		;X軸データ保持ワーク
DPX0		equ		067h		;X軸座標保持ワーク
DPX1		equ		068h
DPY0		equ		069h		;Y軸座標保持ワーク
DPY1		equ		06ah
DCC			equ		06bH		;文字コード保持用ワーク
GPUC		equ		06ch		;GPUコマンド保持ワーク
;
;
			ORG		0h			;リセットベクタ
			goto	init
			ORG		04h			;割り込みベクタ

;
;		割込み処理ルーチン（ＭＳＳＰモジュールで発生)
;
;
;	割込み要件１	アドレスの受信および一致
;		I2Cアドレスが一致すると、マスタに／ＡＣＫを送信、
;		SSP1IFがセットされ、割り込み発生
;		SSP1IFがセットされているのを確認
;		SSP1BUFのデータを読み込む
;		SSP1IFをリセットする
;
;	割込み要件２	データバイトの受信
;		受信するとマスタに／ＡＣＫを送信
;		SSP1IFがセットされ、割り込み発生
;		SSP1IFを確認
;		SSP1BUFのデータを読み込む
;		SSP1IFをリセットする
;
;	割込み要件３	ＳＴＯＰの受信
;		SSP1IFがセットされ、割り込み発生
;		SSP1IFを確認
;		SSP1STATのPビットを確認
;		SSP1IFをリセットする
;		MSSPモジュールをディセーブルにする
;
;	ＬＥＤ制御
;		I2Cアドレス受信すると、LED(RB7)を点灯
;		ストップビットを検出すると、LEDを消灯
;
;	使用ワーク
;		I2C_DATA	受信したI2Cデータ(1バイト)を格納
;		I2C_MODE	I2C受信進行状況を示すフラグ
;					割込みルーチンでは、bit3-1を設定する
;					消去はここでは行わないので注意
;		bit4-6	予約
;		bit3	I2C_STOP
;					1=I2Cストップビットを検出
;					0=コマンドワード受信継続中
;		bit2	I2C_DATA
;					1=I2Cデータバイトを受信
;					0=データは無効
;		bit1	I2C_ADRESS
;					1=I2Cスレーブアドレスを受信
;					0=受信待ち、あるいは現在データは無効
;		bit0	I2C_START（現在未使用）
;					1=I2Cスタートビットを検出
;					0=MSSP1はアイドル
;
INT
;	割込み要件の確認
			movlb	04h			;BANK4
;			btfsc	SSP1STAT,S	;現在割込み設定していない
;			goto	RCV_STA
			btfsc	SSP1STAT,P
			goto	RCV_STP
			btfsc	SSP1STAT,D_NOT_A
			goto	RCV_DATA
;	I2Cアドレスの受信
RCV_ADRS
			movlb	0h
			bcf		PIR1,SSP1IF	;割り込み原因クリア
			movlb	04h
			movf	SSP1BUF,W	;アドレスは破棄
			clrf	BSR
			bsf		I2C_MODE,1	;I2Cアドレス受信フラグ セット
			bcf		PORTB,7		;LED ON
			bra		INTOUT
;	I2Cデータの受信
RCV_DATA
			movlb	0h
			bcf		PIR1,SSP1IF	;割り込み原因クリア
			movlb	04h			;BANK4 SSP1関連
			movf	SSP1BUF,W	;受信データ取得
			clrf	BSR			;BANK0
			movwf	I2C_DATA
			bsf		I2C_MODE,2	;I2Cデータ受信フラグ セット
			bra		INTOUT
;	スタートビットの受信
RCV_STA
			clrf	BSR
			bsf		I2C_MODE,0	;START_BIT
			goto	INTOUT
;	ストップビットの受信
RCV_STP
			clrf	BSR
			bsf		I2C_MODE,3	;STOP_BIT
			bsf		PORTB,7		;LED OFF
;	割込み終了処理
INTOUT
			clrf	BSR
			bcf		PIR1,SSP1IF
			retfie				;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			PIC16F1829　イニシャライズ
;
;		OSCCON(BANK1　099H)
;			bit7	SPLLEN	ソフトウエアPLL設定ビット
;							1 = 4xPLL有効
;							0 = 4xPLL無効(リセット後)
;			＊コンフィグレーションワードPLLEN=1の時、この設定は無視される。
;			bit6-3	IRCF	内部発振器クロック選択ビット
;							000x = 31KHZ LF
;							0010 = 31.25KHZ MF
;							0011 = 31.25KHZ HF
;							0100 = 62.5KHZ MF
;							0101 = 125KHZ MF
;							0110 = 250KHZ MF
;							0111 = 500KHZ MF（デフォルト）
;							1000 = 125kHZ HF
;							1001 = 250kHZ HF
;							1010 = 500kHZ HF
;							1011 = 1MHZ HF
;							1100 = 2MHZ HF
;							1101 = 4MHZ HF
;							1110 = 8MHZ or 32MHZ HF
;							1111 = 16MHZ HF
;			bit2			Unimplemented
;			bit1-0	SCS		システムクロック選択ビット
;							1x = 内部発振器
;							01 = タイマ1発振器
;							00 = FOSCで指定された発振器(リセット後)
;			(注)詳細はマニュアルあるいは当局HP内解説を参照
;							HF=HFINTOSC（16MHZ)
;							MF=MFINTOSC(500KHZ)
;							LF=LFINTOSC(32KHZ)
;
;
;			32MHZ内部発振設定
;		コンフィグレーションワード1		FOSC=100
;		OSCCON				SCS=00
;		OSCCON				IRCF=1110
;		OSCCON				SPLLEN=1(#1)
;		コンフィグレーションワード2		PLLEN=1(#1)
;						(#1)設定はどちらかでOKだが、PLLEN=1とすると、
;							OSCCONのSPLLEN=0の設定は無効となる。
;							また、8MHZのHFINTOSCは選択の余地が無い。
;
;		各ポートのデジタル入出力は、TTL入力、CMOS出力が基本
;		PORTA(BANK0　00CH）
;			bit7-6	Unimplemented(read=0)
;			bit5	RA5		デジタルI/O
;			bit4	RA4		デジタルI/O、アナログ入力
;			bit3	RA3		デジタルInputのみ(TTL)
;			bit2	RA2		デジタルI/O（CMOSシュミット）、アナログ入力
;			bit2	RA1		デジタルI/O、アナログ入力
;			bit0	RA0		デジタル･アナログI/O,DAコンバータ出力
;
;		PORTB(BANK0　00DH）
;			bit7-6	RB7-6	デジタルI/O
;			bit5-4	RB5-4	デジタルI/O、アナログ入力
;			bit3-0	Unimplemented(read=0)
;
;		PORTC(BANK0　00EH）
;			bit7-6	RC7-6	デジタルI/O、アナログ入力
;			bit5-4	RC5-4	デジタルI/O
;			bit3	RC3-0	デジタルI/O、アナログ入力
;
;		TRISA(BANK1　08CH)
;			bit7-6	Unimplemented(read=0)
;			bit5-4	RA5-4	1=入力、0=出力
;			bit3	RA3		常に1
;			bit2	RA2-0	1=入力、0=出力
;
;		TRISB(BANK1　08DH)
;			bit7-6	Unimplemented(read=0)
;			bit5-4	RB7-4	1=入力、0=出力
;
;		TRISC(BANK1　08EH)　マニュアル130ページ
;			bit7-6	Unimplemented(read=0)
;			bit5-4	RA5-0	1=入力、0=出力
;
;		LATA(BANK2　10CH)
;			bit7-6	Unimplemented(read=0)
;			bit5-4	RA5-4	出力データ保持
;			bit3	Unimplemented(read=0)
;			bit2	RA2-0	出力データ保持
;			（このラッチデータはTRISAレジスタ設定で各ピンに反映される）
;
;		LATB(BANK2　10DH)
;			bit7-4	RAB7-4	出力データ保持
;			bit3-0	Unimplemented(read=0)
;			（このラッチデータはTRISBレジスタ設定で各ピンに反映される）
;
;		LATC(BANK2　10EH)
;			bit7-6	Unimplemented(read=0)
;			bit5-0	RA5-4	出力データ保持
;			（このラッチデータはTRISCレジスタ設定で各ピンに反映される）
;
;
;		ANSELA(BANK3　18CH)
;			bit7-5	Unimplemented(read=0)
;			bit4	ANSA3/RA4	アナログ/デジタル選択ビット
;								1=アナログ入力
;								0=デジタルI/O
;			bit3	Unimplemented(read=0)
;			bit2-0	ANA2-0/RA2-0アナログ/デジタル選択ビット
;								1=アナログ入力
;								0=デジタルI/O
;			＊デフォルトでは、すべて1(アナログ入力)となっている
;
;		ANSELB(BANK3　18DH)
;			bit7-4	ANSC3-0/RC3-0　アナログ/デジタル選択ビット
;								1=アナログ入力
;								0=デジタルI/O
;			bit3-0	Unimplemented(read=0)
;			＊デフォルトではアナログ入力となっている
;
;		ANSELC(BANK3　18EH)　マニュアル131ページ
;			bit7-4	Unimplemented(read=0)
;			bit3-0	ANSC3-0/RC3-0　アナログ/デジタル選択ビット
;								1=アナログ入力
;								0=デジタルI/O
;			＊デフォルトではアナログ入力となっている
;
;		WPUA(BANK4　20CH)　ポートAプルアップ設定ビット
;			bit7-6	Unimplemented(read=0)
;			bit5-0			1=PORTA各ビットプルアップ有効
;					 _____	0=PORTA各ビットプルアップ無効
;					*WPUENビットが有効の時のみ、設定有効となる。
;
;		WPUB(BANK4　20DH)　ポートBプルアップ設定ビット
;			bit7-4			1=PORTB各ビットプルアップ有効
;					 _____	0=PORTB各ビットプルアップ無効
;			bit3-0	Unimplemented(read=0)
;					*WPUENビットが有効の時のみ、設定有効となる。
;
;		WPUC(BANK4　20EH)　ポートCプルアップ設定ビット
;			bit7-0			1=PORTC各ビットプルアップ有効
;					 _____	0=PORTC各ビットプルアップ無効
;					*WPUENビットが有効の時のみ、設定有効となる。
;
;		INLVLA(BANK7　38CH)　ポートA入力レベル設定レジスタ
;			bit7-6	Unimplemented(read=0)
;			bit5-0	RA5-0	ST/TTL選択ビット
;								1=シュミットトリガー(ST)入力
;								0=TTL入力
;
;		INLVLB(BANK7　38DH)　ポートB入力レベル設定レジスタ
;			bit7-4	RB7-4	ST/TTL選択ビット
;								1=シュミットトリガー(ST)入力
;								0=TTL入力
;			bit3-0	Unimplemented(read=0)
;
;		INLVLB(BANK7　38EH)　ポートC入力レベル設定レジスタ
;			bit7-0	RC7-0	ST/TTL選択ビット
;								1=シュミットトリガー(ST)入力
;								0=TTL入力
;
;	ADCON0レジスタ(BANK1　09DH)
;		bit7	Unimplemented(read=0)
;		bit6-2	CHS		アナログ入力チャンネル選択ビット
;						00000 = AN0/RA0
;						00001 = AN1/RA1
;						00010 = AN2/RA2
;						00011 = AN3/RA4
;						00100 = AN4/RC0
;						00101 = AN5/RC1
;						00110 = AN6/RC2
;						00111 = AN7/RC3
;						01000 = AN8/RC6
;						01001 = AN9/RC7
;						01010 = AN10/RB4
;						01011 = AN11/RB5
;						11101 = 温度インジケータ
;						11110 = DAC出力
;						11111 = FVRバッファ1出力
;		bit1	GO/DONE	A/D変換ステータスビット
;						1=変換開始指令（１にすると変換動作開始）
;						0=変換完了(変換完了すると０になる）
;		bit0	ADON	A/D変換ステータスビット
;						1=A/Dコンバータ動作
;						0=A/Dコンバータ停止
;
;	ADCON1レジスタ(BANK1　09EH)
;		bit7	ADFM	変換結果格納指定
;						1=右詰
;						0=左詰め
;		bit6-4	ADCS	A/D変換クロック選択ビット
;						000	= Fosc/2
;						001 = Fosc/8
;						010 = Fosc/32
;						011 = Frc
;						100 = Fosc/4
;						101 = Fosc/16
;						110 = Fosc/64
;						111 = Frc
;		bit3	Unimplemented(read=0)
;		bit2	ADNREF	参照負電圧指定
;						0 = VSS
;						1 = 外部VREF- (RA0)
;		bit1-0	ADPREF	参照正電圧指定
;						00 = VDD
;						01 = Reserved
;						10 = 外部VREF+ (RA1)
;						11 = 内部FVRモジュール
;
;		FVRCONレジスタ(BANK2　117H)
;			bit7	FVREN	FVRイネーブルビット
;							1有効、0無効
;			bit6	FVRRDY	FVR準備フラグビット(#1)書込み不可
;							1使用可能、0使用不可能あるいは禁止されている
;			bit5	TSEN	温度表示器イネーブルビット
;							1有効、0無効
;			bit4	TSRNG	温度表示器測定レンジ選択ビット
;							1=High Range:Vout=VDD-4VT
;							0=Low Range:Vout=VDD-2VT
;			bit3-2	CDAFVR	コンパレータとDACへのFVR電圧選択ビット
;							00 = FVR出力OFF
;							01 = FVR出力 1x(1.024V)
;							10 = FVR出力　2x(2.048V)#2
;							11 = FVR出力　4x(4.096V)#2
;			bit1-0	ADFVR	ADCへのFVR電圧選択ビット
;							00 = FVR出力OFF
;							01 = FVR出力 1x(1.024V)
;							10 = FVR出力　2x(2.048V)#2
;							11 = FVR出力　4x(4.096V)#2
;
;							#1)12F1824/16F1828では常に"1"
;							#2)FVR電圧出力はVDDを超える事は出来ない
;
;
;	OPTION_REG(BANK1　095H)
;				_____
;		bit7=1	WPUEN	プルアップ グローバル設定ビット
;						0=有効,1=無効
;		bit6=0	INTEDG	INTピン割り込み信号エッジ↑
;						1=↑
;						0=↓
;		bit5=1	TMR0CS	TMR0クロックソース選択ビット
;						1=外部入力RA2/T0CKI
;						0=内部システムクロック(Fosc/4)
;		bit4=0	TMR0SE	TMR0ソースエッジ選択ビット
;						1=RA2/T0CKIピンが↑の時インクリメント
;						0=RA2/T0CKIピンが↓の時インクリメント
;		bit3=0	PSA		プリスケーラ割当ビット
;						1=WDT
;						0=TMR0
;		bit2-0	PS		プリスケーラ分周比
;						000 1/2
;						001	1/4
;						010	1/8
;						011	1/16
;						100	1/32
;						101	1/64
;						110	1/128
;						111	1/256
;
;	CPSCON0(BANK0　01EH)
;		bit7=0	CPSON	CPSモジュール･イネーブルビット
;						1=有効
;						0=無効
;		bit6=0	CPSRM	静電容量式センシング参照電圧モードビット
;						1=CPSモジュールをHIレンジに設定
;						　　オシレータの参照電圧にDACとFVRを使用
;						0=CPSモジュールをLOWレンジに設定
;						　　オシレータ内蔵の参照電圧を使用
;		bit5-4	Unimplemented(read=0)
;		bit3-2	CPSRNG	静電容量式センシング電流レンジビット
;						CPSRM=0の場合
;						00=オシレータはOFF
;						01=オシレータをLOWレンジに設定、充放電電流は0.1uA
;						10=オシレータをMediumレンジに設定、充放電電流は1.2uA
;						11=オシレータをHighレンジに設定、充放電電流は18uA
;						CPSRM=1の場合
;						00=オシレータはON、ノイズ検出モード
;							充放電電流は供給されない
;						01=オシレータをLOWレンジに設定、充放電電流は9uA
;						10=オシレータをMediumレンジに設定、充放電電流は30uA
;						11=オシレータをHighレンジに設定、充放電電流は100uA
;		bit1=0	CPSOUT	静電容量式センシングオシレータ ステータスビット
;						1=オシレータが電流をソース（ピンから電流を出力）
;						0=オシレータが電流をシンク（ピンから電流を入力）
;		bit0=0	T0XCS	Timer0外部クロック源選択ビット
;						TMR0CS=1の場合
;						コア/Timer0モジュールのどの外部クロックからTimer0に
;						クロックを供給するかをTOXCSビットで制御する
;						1=Timer0のクロック源に静電容量式センシングオシレータ使用
;						0=Timer0のクロック源にT0CKIピンを使う
;						TMR0CS=0の場合
;						Timer0のクロック源にコア/Timer0モジュールで制御する
;						すなわち、Fosc/4
;
;
;		DACCON0レジスタ(BANK2　11AH)　
;		bit7	DACEN	DACイネーブルビット　P156 Fig17-1参照
;						1=許可
;						0=禁止
;		bit6	DACLPS	電圧指定
;						1=DAC出力電圧は+sourecと同等
;						0=DAC出力電圧は-sourceと同等
;		bit5	DACOE	DAC電圧出力イネーブルビット
;						1=DAC出力電圧をDACOUTピンに接続される
;						0=DAC出力電圧はDACOUTピンに接続されない
;		bit4	Un		Read as '0'
;		bit3-2	DACPSS	DAC Vsource+接続選択ビット
;						00 = VDD
;						01 = VREF+ピン(RA1)
;						10 = FVRバッファ2出力
;						11 = 使用不可
;		bit1-0	Un		Read as '0'
;
;
;
;
;	SSP1CON1	SSP制御レジスタ１	BSR=4
;		bit7	WCOL：書込みコリジョン検出ビット
;				マスタの場合
;				1=I2Cの送信開始条件が無効の時にSSP1BUFレジスタへ書込みが行われた
;				0=問題無
;				スレーブの場合
;				1=前のワードの送信中にSSP1BUFレジスタへの書き込みが行われた
;				0=問題無
;					*ソフトウエアでクリアする必要あり
;		bit6	SSP1OV：受信オーバーフロー インジケータービット(注1)
;				1=オーバーフロー発生
;				2=問題無
;					*ソフトウエアでクリアする必要あり
;		bit5	SSP1EN：同期シリアルポートイネーブルビット
;				1=シリアルポート有効(注2)
;				0=シリアルポート無効、I/Oポート使用可
;		bit4	CKP：クロック極性選択ビット
;				1=クロックを有効化
;				0=クロックをLOWに保持（クロックストレッチ）
;					*マスタモードでは使用しない
;		bit3-0  SSP1M：同期シリアルポート モード選択ビット
;				0110=スレーブモード、7ビットアドレス
;				0111=スレーブモード、10ビットアドレス
;				1000=マスターモード、クロック=FOSC/(4*SP1ADD+1))(注3)
;				1011=ファームウエア制御のマスターモード（スレーブアイドル）
;				1110=スレーブモード、7ビットアドレス、
;					スタートビットとストップビットの割込み有効
;				1111=スレーブモード、10ビットアドレス、
;					スタートビットとストップビットの割込み有効
;
;		注1)マスターモードの場合、新たな送受信はSSP1BUFへの書込みによって
;			開始するため、オーバーフロービットはセットされない
;		注2)SDAピンとSCLピンは入力としてTRIS=1設定
;		注3)SP1ADDの値、0,1,2はサポートされない
;
;	SSP1CON2	SSP制御レジスタ２
;		bit7	GCEN：ジェネラルコールイネーブルビット
;				1=SSP1SRでGCアドレス(00H)を受信した時の割込みを有効にする
;				0=GCアドレスを無効にする
;		bit6	ACKSTAT：肯定応答(ACK)ステータスビット
;				1=ACK受信した
;				0=ACK受信していない
;		bit5	ACKDT：ACKデータビット（受信モード）
;				1=ACKしない
;				0=ACKあり
;		bit4	ACKEN：ACKシーケンス イネーブルビット（マスタ受信モード）（注1）
;				1=ACKシーケンスを開始し、ACKDTビットを送信する
;				0=ACKシーケンスをアイドルにする
;		bit3	RCEN：受信イネーブルビット（マスターモードのみ）（注1）
;				1=受信モードを有効にする
;				0=受信をアイドルにする
;		bit2	PEN：ストップ条件イネーブルビット（注1）
;				SCK解放制御
;				1=ストップ条件を開始する、ハードウエアによって自動でクリアされる
;				0=ストップ条件をアイドルにする
;		bit1	RSEN：反復スタート条件イネーブルビット（注1）
;				1=反復スタート条件を開始する
;					ハードウエアによって自動でクリアされる
;				0=反復スタート条件をアイドルにする
;		bit0	SEN：スタート条件イネーブルビット（注1）
;				マスターモードの場合
;				1=スタート条件を開始する、ハードウエアによって自動でクリアされる
;				0=スタート条件をアイドルにする
;
;		注1）I2Cモジュールがアイドルで無い場合、これらのビットはセットされず、
;			 SSP1BUFに書き込まれない場合がある（SSP1BUFへの書込み無効）
;
;	SSP1CON3	SSP1制御レジスタ３
;		bit7	ACKTIM：肯定応答(ACK)タイムステータスビット（注1）
;				1=ACKシーケンスを実行中。
;				　SCLクロックの8番目の立下りエッジでセットされる
;				0=ACKシーケンスではない。
;				　SCLクロックの9番目の立上がりエッジでクリアされる
;		bit6	PCIE：ストップ条件割込みイネーブルビット
;				1=ストップ条件検出時の割込みを有効にする
;				0=ストップ条件検出時の割込みを無効にする
;		bit5	SCIE：スタート条件割込みイネーブルビット
;				1=スタート／リスタート条件検出時の割込みを有効にする
;				0=スタート条件検出時の割込みを無効にする
;		bit4	BOEN：バッファ上書きイネーブルビット
;				1=SSP1BUFは更新され、受信したアドレス／データバイトに対して
;				　ACK信号が生成される。
;				　BFビットが0の場合のみSSP1OVビットの状態を無視する。
;				0=SSP1OVがクリアされている時のみSSP1BUFが更新される
;				*マスタモードの場合、このビットは無視される
;		bit3	SDAHT：SDAホールド時間の選択ビット
;				1=SDAのホールド時間はSCLの立下りエッジから最小300ns
;				0=SDAのホールド時間はSCLの立下りエッジから最小100ns
;		bit2	SBCDE：スレーブモードのバスコリジョン検出イネーブルビット
;				1=スレーブバスコリジョン割込みを有効にする
;				0=スレーブバスコリジョン割込みを無効にする
;		bit1	AHEN：アドレスホールドイネーブルビット（スレーブモードのみ）
;				1=一致受信アドレスバイトのSCLの8番目の立下りエッジ後、SSP1CON1
;				　レジスタのCKPビットをクリアし、SCLがLOWに保持される
;				0=アドレスホールド機能を無効にする
;		bit0	DHEN：データホールドイネーブルビット（スレーブモードのみ）
;				1=受信データバイトのSCLの8番目の立下りエッジ後、スレーブハードウ
;				エアがSSP1CON1レジスタのCKPビットをクリアし、SCLがLOWに保持される
;				0=データホールド機能を無効にする
;		*注1）ACKTIMステータスビットがアクティブになるのは、AHENビットまたは、
;             DHENビットがセットされている場合のみ
;
;	SSP1MSK		SSP1マスクレジスタ
;		bit7-1	MSK：マスクビット
;				1=受信アドレスbitnをSSP1ADD(n)と比較して、I2Cアドレス一致を検出
;				0=受信アドレスbitnをI2Cアドレス一致の検出に使わない
;		bit0	I2Cスレーブモードのマスクビット、10ビットアドレス
;				I2Cスレーブモード、10ビットアドレス（SSP1M3-0=0111または1111)
;				1=受信アドレスbit0をSSP1ADD(0)と比較して、I2Cアドレス一致を検出
;				0=受信アドレスbit0をI2Cアドレス一致の検出に使わない
;				*スレーブモード、7ビットアドレスでは、このビットは無視される
;
;	SSP1ADD		MSSP1アドレス／ボーレートジェネレータ
;				マスターモードの場合
;		bit7-0	ADD：ボーレートクロック分周ビット（(ADD(7-0)+1)*4）/FOSC
;				スレーブモードの場合
;		bit7-1	ADD：7ビットのアドレス
;		bit0	未使用
;		*10ビットアドレスモードでの状態は割愛します
;
;	SSP1STAT	SSP1ステータスレジスタ
;		bit7	SMP：スルーレート制御
;				1=スルーレート制御の標準速度モード(100KHZ,1MHZ)を無効にする
;				0=スルーレート制御の高速モード(100KHZ)を有効にする
;		bit6	CKE：SMBus仕様互換入力
;				1=しきい値がSMBus仕様に準拠する入力
;				0=無効
;		bit5	D_NOT_A：データ/アドレスビット
;				1=最後に送受信したバイトがデータ
;				0=最後に送受信したバイトがアドレス
;		bit4	P：ストップビット
;				1=最後にストップビットが検出された事を示す
;				0=最後にストップビットが検出されなかった事を示す
;		bit3	S：スタートビット
;				1=最後にスタートビットが検出された事を示す
;				0=最後にスタートビットが検出されなかった事を示す
;		bit2	R_NOT_W：READ/WRITEビット情報
;				スレーブモード
;				1=読み出し
;				0=書込み
;				マスタモード
;				1=送信動作中
;				0=送信動作中で無い
;		*このビットとSEN,RSEN,PEN,RCEN,ACKENのどれかをORするとMSSP1がアイドル中
;		 かどうかが判る
;		bit1	UA：交信アドレスビット（10ビットアドレスモードのみ）
;				1=アドレスの更新が必要
;				0=アドレスの更新が不要
;		bit0	BF：バッファフル ステータスビット
;				受信
;				1=受信が完了、SSP1BUFがフルである
;				0=受信が完了していない、SSP1BUFがエンプティ
;				送信
;				1=データ送信中(ACK及びｽﾄｯﾌﾟﾋﾞｯﾄを含まない)SSP1BUFはフル
;				0=データ送信完了(ACK及びｽﾄｯﾌﾟﾋﾞｯﾄを含まない)SSP1BUFはエンプティ
;
;
;
;		INTCONレジスタ(#2)　コア　00BH
;			bit7	GIE		全割込制御
;							1許可、0禁止
;			bit6	PEIE	周辺装置割込制御
;							1許可、0禁止
;			bit5	TMR0IE	タイマ0割込許可制御
;							1許可、0禁止
;			bit4	INTE	RA2外部割込許可制御
;							1許可、0禁止
;			bit3	IOCIE	I/Oポート状態変化割込許可制御
;							1許可、0禁止
;			bit2	TMR0IF	タイマ0割込みフラグ(#1)
;							1オーバーフロー
;							0オーバーフローなし
;			bit1	INTF	RA2外部割込みフラグ(#1)
;							1割込み発生
;							0割込み発生なし
;			bit0	IOCIF	I/Oポート状態変化割込フラグ(#1)
;							1割込発生
;							0割込無
;
;							#1)ソフトウエアでリセット必要
;							#2)初期値=0なので、初期設定で0設定する必要は無い
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

init
;			各レジスタ初期設定(PIC16F1829)
			movlb	0h			;BANK0
			movlw	040h		;01000000B
			movwf	INTCON		;全割込みOFF、PEIE_ON
			movlb	01h			;BANK1
			bsf		PIE1,SSP1IE	;MSSP割込み有効
			;クロック設定
			movlb	01h			;BANK１に切替
			movlw	0f0h		;1111000B
			movwf	OSCCON		;内部発振器は8MHZに設定
								;4xPLL=ON
			;I/Oポート初期化
			movlb	0h			;BANK0
			clrf	PORTA		;Init PORT
			clrf	PORTB
			clrf	PORTC
			movlb	02h			;BANK2
			clrf	LATA		;出力ラッチレジスタ
			clrf	LATB
			clrf	LATC
			movlb	03h			;BANK3
			clrf	ANSELA		;RA0-7デジタルI/O
			clrf	ANSELB		;RB4-7デジタルI/O
			clrf	ANSELC		;RC0-7デジタルI/O
			movlb	01h			;BANK1
			movlw	0h			;TRISx=0は出力
			movwf	TRISA		;RA0-7出力
			movlw	050h		;50H=01010000B
			movwf	TRISB		;RB4,RB6入力(I2C)、RB5,RB7出力
			movlw	0h			;
			movwf	TRISC		;RC0-RC7出力

			;TMR0およびプルアップ設定
			movlb	01h			;BANK1
			movlw	0a7H		;10100111B
			movwf	OPTION_REG	;プルアップOFF
								;割込みエッジ↓
								;クロックソース外部
								;TMR0カウントエッジ↓
								;プリスケーラ割当→TMR0
								;プリスケーラ分周1/256にセット

			;ADC
;			movlb	01h			;BANK1
;			movlw	0E0h		;11100000B
;			movwf	ADCON1		;10bit変換、左詰め、基準電圧VDD
								;ADCクロック　Fosc/64=2us(32MHZ)

			;FVR
;			movlb	02h			;BANK2
;			movlw	082h		;10000010B
;			movwf	FVRCON		;FVRイネーブル
								;DACとCPSはOFF
								;ADCに4.096V
			;MSSP1
			movlb	04h			;BANK4
			movlw	050h
			movwf	SSP1CON3	;STOP検出割込み有効
			movlw	07ch		;I2Cアドレス 7CH(7bit 3EH+LSB(0))
			movwf	SSP1ADD		;
;			movlw	0FFH
;			movwf	SSP1MSK

;			設定終了
			movlb	0h



;			初期値セット
			clrf    hex0
			clrf    hex1
			clrf    hex2
			clrf    hex3
			bsf		PORTB,7		;LED_OFF

;
;		メイン プログラム
;
;

coldst
			movlw	0a0h		;
;			movwf	BFAD0		;FIFOバッファアドレス初期値
;			clrf	BFAD1		;BFAx=00A0H
;			clrf	BFPT0		;バッファポインタ初期値
;			clrf	BFPT1
			call	INIT_LCD	;SC12864初期設定
			call	CLR_SCRA	;LCDオールクリア
			bsf		INTCON,GIE	;全割込み許可

;			goto	DEBUG01


;
;	コマンドワード（スレーブアドレスの後に送信される２バイト）
;		コントロールバイト＋データバイトで構成される
;
;	コントロールバイト(CTRL)のビット構成
;
;	bit7	CO:連続送信、最終送信の指定
;			1= 連続コマンドワード
;			0= 最終コマンドワード
;	bit6	D/I:データの属性
;			1= データバイトはデータ
;			0= データバイトはコマンド
;	bit5	CPU：PICの動作
;			1= CPU描画制御(bit4-0はGPUコマンド)
;			0= ダイレクト描画制御(bit4-0はダイレクトモード)
;
;	ダイレクトモード(bit5=0)
;	bit4	Reserved
;	bit3	Reserved
;	bit2	CS2
;			1= CS2イネーブル
;			0= CS2ディセーブル
;	bit1	CS1
;			1= CS1イネーブル
;			0= CS1ディセーブル
;	bit0	RESET
;			1=LCDリセット
;			0=通常動作
;
;	GPUコマンド(bit5=1の時)
;	bit4-0	00H:NOP
;			01H	CLR_PAGE
;				DATA= 00H-07H 左０-７指定ページ
;				DATA= 08H-0FH 右０-７指定ページ
;				DATA= 10H 左右全ページ（オールクリア）
;				DATA= 11H 左全ページ
;				DATA= 12H 右全ページ
;			02H	SET_DSP_MODE
;				DATA=00H 8x6dot
;				DATA=01H 8x8dot
;				DATA=02H 16x8dot
;				DATA=03H 16x16dot
;			03H	SET_DSP_ADR（データはVRAMアドレス）
;				DATA=00H-A7H
;			04H	WRITE_CHAR（データは文字コード）
;				DATA=20H-DFH
;


;
;		I2C受信進行フラグ
;		MODE bit7-0
;		bit7	予約
;		bit6	予約
;		bit5	LCD_DATA
;					1=液晶データバイトを保留
;					0=コマンドワード受信継続中
;		bit4	LCD_INST
;					1=液晶コントロールバイトを保留
;					0=コマンドワード受信継続中
;		bit3	I2C_STOP
;					1=I2Cストップビットを検出
;					0=コマンドワード受信継続中
;		bit2	I2C_DATA
;					1=I2Cデータバイトを受信
;					0=データは無効
;		bit1	I2C_ADRESS
;					1=I2Cスレーブアドレスを受信
;					0=受信待ち、あるいは現在データは無効
;		bit0	I2C_START
;					1=I2Cスタートビットを検出
;					0=MSSP1はアイドル
;
;	START-ADRS-(CTRL-CMD-CTRL-DATA)-STOP or NEXT WORD
;
hotst
			call	MSSP_SLV		;MSSP1起動
			clrf	I2C_MODE
;		I2Cアドレス受信待ち
LV11		btfsc	I2C_MODE,3		;STOP_BIT
			goto	LV31			;MSSP1ディセーブル
			btfss	I2C_MODE,1		;I2Cアドレス受信フラグ
			bra		LV11			;LV1ループ

;		コントロールバイト受信待ち
LV21		btfsc	I2C_MODE,3		;ストップビット検出フラグ
			goto	LV31			;MSSP1ディセーブル
			btfss	I2C_MODE,2		;I2C_DATA受信フラグ
			bra		LV21			;LV2ループ
			bcf		I2C_MODE,2		;I2C_DATAフラグクリア
;		コントロールバイト処理　(CO+D/I+CPU+00000)
;
;	bit7	CO:連続送信、最終送信の指定
;			1= 連続コマンドワード
;			0= 最終コマンドワード
;	bit6	D/I:データの属性
;			1= データバイトはデータ
;			0= データバイトはコマンド
;	bit5	CPU：PICの動作
;			1= CPU描画制御
;			0= ダイレクト描画制御(bit2-0有効)
;	bit4	Reserved
;	bit3	Reserved
;	bit2	CS2
;			1= CS2イネーブル
;			0= CS2ディセーブル
;	bit1	CS1
;			1= CS1イネーブル
;			0= CS1ディセーブル
;	bit0	RESET
;			1=LCDリセット
;			0=通常動作

			movf	I2C_DATA,W		;受信I2Cデータ
			movwf	CTRL			;CMD_CTRLとして保存
;
			btfsc	CTRL,5			;CPUモードをチェック
			goto	LV51			;CPU描画モード

;			ダイレクト描画モード
			btfsc	CTRL,0			;RESET
			goto	LV32
			call	RST_CS			;CS OFF
			btfsc	CTRL,1			;CS1
			call	SET_CS1
			btfsc	CTRL,2			;CS2
			call	SET_CS2
			btfsc	CTRL,6			;1=Data、0=Inst
			goto	LV23			;表示データ書き込み

;			インストラクションコード待ち
LV22
			bcf		I2C_MODE,2		;I2C_DATAフラグクリア
			btfss	I2C_MODE,2		;I2C_DATA受信フラグ
			bra		$-1				;CMD_DATA受信待ち
;
			movf	I2C_DATA,W		;I2C_DATAはLCD_INSTとみなす
			bcf		I2C_MODE,2		;I2C_DATAフラグクリア
			call	SEND_CMD		;Wreg=液晶命令
			goto	LV21			;次のCMD_WORD受信へ

;			LCDデータバイト待ち	
LV23
			bcf		I2C_MODE,2		;I2C_DATAフラグクリア
			btfss	I2C_MODE,2		;I2C_DATAフラグ
			bra		$-1
;
			movf	I2C_DATA,W		;I2C_DATAはLCD_DATAとみなす
			bcf		I2C_MODE,2		;I2C_DATAフラグクリア
			call	SEND_DATA
			goto	LV21			;I2C_DATA受信待ち

;
;			受信終了、MSSP1リセット
;
LV31		movlb	04h
			bsf		SSP1CON1,SSPEN
			clrf	BSR
			clrf	I2C_MODE
			goto	hotst

;
;			LCDをリセット
;
LV32
			call	LCD_RST
			goto	LV21			;


;			GPUモード
;
;	GPUコマンド(CMD_WORD)	Ver1.0
;
;	CMD_CTRL+CMD_DATAの16ビット構成
;
;	bit7	CO:連続送信、最終送信の指定
;			1= 連続コマンドワード
;			0= 最終コマンドワード
;	bit6	D/I:データの属性
;			1= データバイトはデータ
;			0= データバイトはコマンド
;	bit5	CPU：CPUの動作
;			1= CPU描画制御(bit4-0はGPUコマンド)
;			0= ダイレクト描画制御(bit4-0はダイレクトモード)
;
;	bit4-0	GPUコマンド(bit5=1の時)
;			00H:NOP
;			01H	CLR_PAGE
;				DATA= 00H-07H 左0-7指定ページ
;				DATA= 08H-0FH 右0-7指定ページ
;				DATA= 10H 左右全ページ（オールクリア）
;				DATA= 11H 左全ページ
;				DATA= 12H 右全ページ
;			02H	SET_DSP_MODE
;				DATA=00H 8x6dot
;				DATA=01H 8x8dot
;				DATA=02H 16x8dot
;				DATA=03H 16x16dot
;			03H	SET_DSP_ADR（データはVRAMアドレス）
;				DATA=00H-A7H
;			04H	WRITE_CHAR（データは文字コード）
;				DATA=20H-DFH
;

;		CMD_CTRLチェック、分岐　CTRLバイトは保存される
LV51
			andlw	01FH			;W=CTRL、1FH=00011111B
			movwf	icw0			;GPUコマンドのみにする
			iorlw	0				;GPU-NOP?
			btfsc	STATUS,Z
			goto	LV21			;NOP
			movlw	01h
			xorwf	icw0,W			;CLR_PAGE?
			btfsc	STATUS,Z
			goto	LV52			;CLR_PAGE
			movlw	02H				;
			xorwf	icw0,W			;
			btfsc	STATUS,Z
			goto	LV53			;SET_DSP_MODE
			movlw	03H
			xorwf	icw0,W			;
			btfsc	STATUS,Z
			goto	LV54			;SET_DSP_ADR
			movlw	04H
			xorwf	icw0,W			;
			btfsc	STATUS,Z
			goto	LV55			;WRITE_CHAR
			goto	LV21			;ERR

;
;		CMD_DATAチェック
;

;		CLR_PAGE
;
;		CMD_DATA= 00H-07H 左０-７指定ページ
;		CMD_DATA= 08H-0FH 右０-７指定ページ
;		CMD_DATA= 10H 左右全ページ（オールクリア）
;		CMD_DATA= 11H 左全ページ
;		CMD_DATA= 12H 右全ページ
LV52
			bcf		I2C_MODE,2		;I2C_DATAフラグクリア
			btfss	I2C_MODE,2		;I2C_DATA受信フラグ
			bra		$-1				;受信待ち
;
			bcf		I2C_MODE,2		;I2C_DATAフラグクリア
			movf	I2C_DATA,W		;I2C_DATAはGPU_DATAとみなす
			movwf	icw0			;GPU_DATA
			btfsc	icw0,4			;CLR_ALL?
			bra		LV522
LV521;		指定PAGEのみクリア
			movf	icw0,W
			call	CLR_PAGE
			goto	LV21			;次のコマンドワード受信へ
LV522;		CLR_ALL
			movlw	010H
			xorwf	icw0,W
			btfss	STATUS,Z
			bra		LV523
			call	CLR_SCRA
			goto	LV21
LV523		movlw	011H
			xorwf	icw0,W
			btfss	STATUS,Z
			bra		LV524
			call	CLR_SCRL
			goto	LV21
LV524		movlw	012H
			xorwf	icw0,W
			btfss	STATUS,Z
			goto	LV21
			call	CLR_SCRR
			goto	LV21
;
;		SET_DSP_MODE
;
;		CMD_DATA=00H 8x6dot
;		CMD_DATA=01H Reserved
;		CMD_DATA=02H 16x8dot
;		CMD_DATA=03H 16x16dot
LV53
			bcf		I2C_MODE,2		;I2C_DATAフラグクリア
			btfss	I2C_MODE,2		;I2C_DATA受信フラグ
			bra		$-1				;受信待ち
;
			bcf		I2C_MODE,2		;I2C_DATAフラグクリア
			movf	I2C_DATA,W		;I2C_DATAはGPU_DATAとみなす
			movwf	DSP_MODE		;GPU_DATA
			goto	LV21			;処理終了
;
;		SET_DSP_ADR（データはVRAMアドレス）
;
;		CMD_DATA=00H-A7H
LV54
			bcf		I2C_MODE,2		;I2C_DATAフラグクリア
			btfss	I2C_MODE,2		;I2C_DATA受信フラグ
			bra		$-1				;受信待ち
;
			bcf		I2C_MODE,2		;I2C_DATAフラグクリア
			movf	I2C_DATA,W		;I2C_DATAはGPU_DATAとみなす
			movwf	DSP_ADR			;GPU_DATA
			goto	LV21			;処理終了
;
;		WRITE_CHAR（データは文字コード）
;
;		CMD_DATA=20H-DFH
;
LV55
			bcf		I2C_MODE,2		;I2C_DATAフラグクリア
			btfss	I2C_MODE,2		;I2C_DATA受信フラグ
			bra		$-1				;受信待ち
;
			bcf		I2C_MODE,2		;I2C_DATAフラグクリア
			movf	I2C_DATA,W		;I2C_DATAはGPU_DATAとみなす
			movwf	DSP_CHAR		;GPU_DATA
			call	PUTW			;指定フォント、指定位置で1文字表示
			goto	LV21			;処理終了



			
;
;	I2C受信用デバッグ プログラム
;
;		受信したコマンドワードをLCDに16進表示
;		CTRL+CMD_DATA
;		
;	8×6dot		1行21文字
;		0行		00H-14H(0-20)
;		1行		15H-29H(21-41)
;		2行		2AH-3EH(42-62)
;		3行		3FH-53H(63-83)
;		4行		54H-68H(84-104)
;		5行		69H-7DH(105-125)
;		6行		7EH-92H(126-146)
;		7行		93H-A7H(147-167)
;
DEBUG03
			clrf	DSP_ADR
			movlw	0h				;8x6
			movwf	DSP_MODE
DBG030		call	MSSP_SLV		;MSSP1起動
			clrf	I2C_MODE

;		I2Cアドレス受信待ち
DBG031		btfsc	I2C_MODE,3		;STOP_BIT
			goto	DBG033			;MSSP1ディセーブル
			btfss	I2C_MODE,1		;I2Cアドレス受信チェック
			bra		DBG031

;		I2C DATA 受信待ち
DBG032		btfsc	I2C_MODE,3		;ストップビット検出
			goto	DBG033			;
			btfss	I2C_MODE,2		;I2C_DATA受信チェック
			bra		DBG032			;受信待ちループ
			movf	I2C_DATA,W		;受信I2Cデータ

;		16進I2Cデータを文字コードに変換、LCDへ出力
			bcf		I2C_MODE,2		;I2C_DATAフラグクリア
			call	NUTOASC			;16進数値を文字コードに変換
			movlw	"0"
			call	PUTW			;
			incf	DSP_ADR,F

			movf	ASC1,W
			call	PUTW
			incf	DSP_ADR,F

			movf	ASC0,W
			call	PUTW
			incf	DSP_ADR,F

			movlw	0A7H
			subwf	DSP_ADR,W		;W=F-W
			btfss	STATUS,C
			goto	DBG032			;次のI2C_DATA受信へ
			call	CLR_SCRA
			clrf	DSP_ADR
			goto	DBG032

;			受信終了、MSSP1リセット
DBG033		movlb	04h
			bsf		SSP1CON1,SSPEN
			clrf	BSR
			clrf	I2C_MODE
			goto	DBG030



;			;デバッグ１　ＬＣＤ基本動作
DEBUG01
			call	CLR_SCRA
dbg010		
			movlw	0H
			movwf	DSP_ADR
;			movlw	' '
			movlw	'0'
			movwf	DBUF0
dbg0111
			movf	DBUF0,W
;			call	PUTW_8X6
;			call	PUTW_16X8
			call	PUTW_16X16
			bcf		PORTB,7		;デバッグ用
			call	wait100m
			bsf		PORTB,7		;
			incf	DSP_ADR,F
			incf	DBUF0,F
			call	wait1s
			movf	DBUF0,W
;			sublw	0DFH		;W=K-W
			sublw	05AH		;5AH="Z"
			btfsc	STATUS,C
			goto	dbg0112
;			movlw	020H		;DFH以上になった
			movlw	030H		;5AH以上になった
			movwf	DBUF0
dbg0112		movf	DSP_ADR,W
;			sublw	0A7H		;8X6mode LastADR
;			sublw	03FH		;16X8mode LastADR
			sublw	01FH		;16X16mode
			nop
			btfss	STATUS,C
			goto	dbg0113
			goto	dbg0111
dbg0113		clrf	DSP_ADR
			call	CLR_SCRA
			goto	dbg0111
;


;
;	ＭＳＳＰモジュール　Ｉ２Ｃモード制御サブルーチン
;
;
;	PIC16F1828
;   I2C　スレーブモード初期化サブルーチン
;
;		RB6		SCL			I2Cクロック
;		RB4		SDA			I2Cデータ
;		TRISB	RB4,RB6はデジタル入力モードに設定

MSSP_SLV
			movlb   04h			;BANK4
			movlw   036h		;36H=00110110
			movwf   SSP1CON1	;SSP1イネーブル
								;シリアルポート有効化
								;クロック有効
								;I2Cスレーブモード、7ビットアドレス
			clrf	BSR
			return

　
;
;       ＬＣＤ　ＤＩＳＰＬＡＹ　ＳＧ１２８６４Ａ
;
;       書込みサブルーチン群　Ver1.0　JA0QON
;
;       Set DDRAM address = RS=0 + R/W=0 + DB7=1,DB6-DB0=00H-4FH
;		Write data to RAM = RS=1 + R/W=0 + DB7-DB0=CGRAM or DDRAM data
;                   RS=1の時、液晶の表示データあるいはCGRAMのデータ
;                   RS=0の時、液晶のインストラクションコード
;                   R/W=1の時、データ読込み
;                   R/W=0の時、データ書込み
;
;       DSP_ADR     80H-8FH 1行目　表示位置アドレス(DDRAM)
;                   C0H-CFH 2行目　同じ
;					※これは機能ビット(DB7=1)+DDRAMアドレスで表現されている
;
;
;		画面モード設定
;
;		文字描画 位置アドレス
;
;	DSP_ADR		00H-A7H(167)
;	8×6dot		1行21文字
;		0行		00H-14H(0-20)
;		1行		15H-29H(21-41)
;		2行		2AH-3EH(42-62)
;		3行		3FH-53H(63-83)
;		4行		54H-68H(84-104)
;		5行		69H-7DH(105-125)
;		6行		7EH-92H(126-146)
;		7行		93H-A7H(147-167)
;
;	8×8dot
;		0行		00H-0FH(0-15)
;		1行		10H-1FH(16-31)
;		2行		20H-2FH(32-47)
;		3行		30H-3FH(48-63)
;		4行		40H-4FH(64-79)
;		5行		50H-5FH(80-95)
;		6行		60H-6FH(96-111)
;		7行		70H-7FH(112-127)
;
;	16×8dot
;		0行		00H-0FH(0-15)
;		1行		10H-1FH(16-31)
;		2行		20H-2FH(32-47)
;		3行		30H-3FH(48-63)
;
;	16×16dot
;		0行		00H-07H(0-7)
;		1行		08H-0FH(8-15)
;		2行		10H-17H(16-23)
;		3行		18H-1FH(24-31)


;		グラフィック画面ドットアドレス
;
;	Y軸(画面縦軸)	DPY0-7bytes
;	DPY0	bit7	LINE Y00
;			bit6	LINE Y01
;			bit5
;			bit4
;			bit3
;			bit2
;			bit1
;			bit0	LINE Y07
;
;	DPY7	bit7	LINE Y56
;			bit6	LINE Y57
;			bit5
;			bit4
;			bit3
;			bit2
;			bit1
;			bit0	LINE Y63
;
;	X軸(画面横軸)	DPX000-127


;
;   ＬＣＤにＷレジスタの文字コードを単発で書込表示
;
;		画面モード指定	DSP_MODEにて指定
;		DSP_MODE
;			00H 8x6dot
;			01H 8x8dot(使用不可)
;			02H 16x8dot
;			03H 16x16dot
;		表示位置指定	DSP_ADRに入れて呼び出す

PUTW
;			モード分別
			movwf	tmp0
			movlw	0H			;8X6mode?
			xorwf	DSP_MODE,W
			btfss	STATUS,Z
			goto	putw01
			movf	tmp0,W
			goto	PUTW_8X6
putw01		movlw	01H			;8X8?
			xorwf	DSP_MODE,W
			btfss	STATUS,Z
			goto	putw02
			movf	tmp0,W
			goto	PUTW_8X8
putw02		movlw	02H			;16X8?
			xorwf	DSP_MODE,W
			btfss	STATUS,Z
			goto	putw03
			movf	tmp0,W
			goto	PUTW_16X8
putw03		movlw	03H			;16X16?
			xorwf	DSP_MODE,W
			btfss	STATUS,Z
			goto	putw04
			movf	tmp0,W
			goto	PUTW_16X16
putw04		retlw	0FFH



;
;		8X6dot描画モード
;	入力
;	Wreg		表示される文字コード
;	DSP_ADR	00H-A7H	1行21文字、表示位置アドレス
;		0行		00H-14H(0-20)
;		1行		15H-29H(21-41)
;		2行		2AH-3EH(42-62)
;		3行		3FH-53H(63-83)
;		4行		54H-68H(84-104)
;		5行		69H-7DH(105-125)
;		6行		7EH-92H(126-146)
;		7行		93H-A7H(147-167)
;
PUTW_8X6
;		8X5FONT格納アドレスをFSR0にセット

;		Wregの文字コードをレコードナンバーに変換
			movwf	hex0		;hex(0-1)=文字コード
			clrf	hex1		;SP(20H)を0番レコードとする
			movlw	020h		;
			movwf	hexw0
			clrf	hexw1
			call	SUB16B		;hex(0-1)=hex(0-1)-hexw(0-1)
;			レコードナンバーを5倍(1レコードは５バイト)
			movf	hex0,W
			movwf	hexw0
			movf	hex1,W
			movwf	hexw1		;レコードナンバーをhexw)0-1)に一時保存
			bcf		STATUS,C	;Cフラグクリア
			rlf		hex0,F		;左ローテート（下位8ビット×２）
			rlf		hex1,F		;左ローテート（上位8ビット×２）
			bcf		STATUS,C
			rlf		hex0,F		;
			rlf		hex1,F		;X4
			call	ADD16B		;加算でX5とする
								;hex(0-1)=レコード相対アドレス
;			GPAT_C8X5 文字パターン格納アドレス計算
			movlw	LOW GPAT_C8X5	;PAT_8X5dot START_LOW_ADR
			movwf	hexw0
			movlw	HIGH GPAT_C8X5	;PAT_8X5dot START_HIGH_ADR
			movwf	hexw1		;hexw(0-1)=8X5データ先頭アドレス
			call	ADD16B		;ビットパターンアドレス計算
			movf	hex0,W
			movwf	FSR0L
			movf	hex1,W
			movwf	FSR0H		;FSR0に指定フォント格納アドレスセット


;			G-RAM スタートアドレス設定
;		PGAD=ページアドレス(Y軸)およびコマンド合成
;		CGAD=桁アドレス(X軸)、bit7=CSx、bit0-6=コマンド合成(bit7=0にする事)
			call	GET_CAX6	;W=X軸アドレス+(bit6=1)+CS(bit7)
			movwf	CGAD		;CS1=RA0、CS2=RA1
			btfss	CGAD,7		;CS設定bit
			bra		ptw86cs1
ptw86cs2	call	SET_CS2		;CS2_ON
			bra		ptw861
ptw86cs1	call	SET_CS1		;CS1_ON
ptw861
			call	GET_PG8X6	;W=PAGEアドレス設定コマンド
			movwf	PGAD		;PGAD=ページアドレス(Y軸)保存
			call	SEND_CMD	;PAGEアドレス送信
			movf	CGAD,W		;X軸アドレス送信コマンド+CS
			andlw	07FH		;CSフラグクリア
			call	SEND_CMD	;X軸スタートアドレス設定

;			ビットデータ連続送信(6bytes)
			movlw	05h
			movwf	icw0
ptw862
;			CSを跨ぐ処理
;			DPX=60から始まる6dotFONTは64-65の2dot不足
;			その部分はCS2最初の2dotを使う
			movlw	040h		;64
			xorwf	DPX0,W
			btfss	STATUS,Z	;DPX=64
			goto	ptw863
			call	SET_CS2
			movf	PGAD,W
			call	SEND_CMD
			movlw	040h		;DPX=64の時、CS=2、桁アドレス=0とする
			call	SEND_CMD
;
ptw863		moviw	FSR0++		;ビットパターン読み込み
			call	SEND_DATA	;ビットパターン書込み
			incf	DPX0,F
			decfsz	icw0,F
			bra		ptw862
ptw864		movlw	0h			;6バイト目(必ず0H）
			call	SEND_DATA	;ビットパターン書込み
			incf	DPX0,F
			return

PUTW_8X8	return

;
;		16X8dot描画モード
;
PUTW_16X8
;		16X8FONT格納連続番号セット
;		文字コードをレコードナンバーに変換
			movwf	hex0		;hex(0-1)=ASCIIコード
			clrf	hex1		;SP(20H)を0番レコードとする
			movlw	020h		;
			movwf	hexw0
			clrf	hexw1
			call	SUB16B		;hex(0-1)=hex(0-1)-hexw(0-1)
;			レコードナンバーを16倍(1レコードは16バイト)
			bcf		STATUS,C	;Cフラグクリア
			rlf		hex0,F		;左ローテート（下位8ビット×２）
			rlf		hex1,F		;左ローテート（上位8ビット×２）
			bcf		STATUS,C
			rlf		hex0,F		;
			rlf		hex1,F		;
			bcf		STATUS,C
			rlf		hex0,F		;
			rlf		hex1,F		;
			bcf		STATUS,C	;
			rlf		hex0,F		;
			rlf		hex1,F		;hex(0-1)=レコード相対アドレス
;			GPAT_C16X8 格納アドレス計算
			movlw	LOW GPAT_C16X8	;PAT_16X8dot START_LOW_ADR
			movwf	hexw0
			movlw	HIGH GPAT_C16X8	;PAT_16X8dot START_HIGH_ADR
			movwf	hexw1
			call	ADD16B		;hex(0-1)=16X8FONT格納実アドレス
			movf	hex0,W
			movwf	FSR0L
			movf	hex1,W
			movwf	FSR0H		;FSR0に16X8FONTアドレスセット

;			G-RAM スタートアドレス設定
;		PGAD=ページアドレス(Y軸)およびコマンド合成
;		CGAD=桁アドレス(X軸)、bit7=CSx、bit0-6=コマンド合成(bit7=0にする事)
			call	GET_CAX8	;X軸アドレス+bit6=1+CS(bit7)
			movwf	CGAD		;CS1=RA0、CS2=RA1
			btfss	CGAD,7		;CS設定bit
			bra		ptw168cs1
ptw168cs2	call	SET_CS2		;CS2_ON
			bra		ptw1681
ptw168cs1	call	SET_CS1		;CS1_ON
ptw1681
			call	GET_PG16X8	;PAGEアドレス設定コマンド
			movwf	PGAD		;PGAD=ページアドレス(Y軸)保存
			call	SEND_CMD	;FONT上位PAGEアドレス送信
			bcf		CGAD,7		;CSフラグクリア
			movf	CGAD,W		;X軸アドレス送信コマンド
			call	SEND_CMD	;X軸スタートアドレス設定

;			ビットデータ連続送信(8X2bytes)
			movlw	08h
			movwf	icw0
ptw1682		moviw	FSR0++		;ビットパターン読み込み
			call	SEND_DATA	;ビットパターン書込み
			decfsz	icw0,F
			bra		ptw1682
;
			incf	PGAD,W		;下位8バイト
			call	SEND_CMD
			movf	CGAD,W		;X軸アドレス送信コマンド
			call	SEND_CMD	;X軸スタートアドレス設定
			movlw	08h
			movwf	icw0
ptw1683		moviw	FSR0++		;ビットパターン読み込み
			call	SEND_DATA	;ビットパターン書込み
			decfsz	icw0,F
			bra		ptw1683
			return

;
;		16X16dot描画モード
;
;	現在の存在文字
;		30H-5AHまで（数字、英大文字のみ）
PUTW_16X16
;		16X16FONT格納連続番号セット
;		文字コードをレコードナンバーに変換
			movwf	hex0		;hex(0-1)=ASCIIコード
			clrf	hex1		;数字0(30H)を0番レコードとする
			movlw	030h		;
			movwf	hexw0
			clrf	hexw1
			call	SUB16B		;hex(0-1)=hex(0-1)-hexw(0-1)
;			レコードナンバーを32倍(1レコードは32バイト)
			bcf		STATUS,C	;Cフラグクリア
			rlf		hex0,F		;左ローテート（下位8ビット×２）
			rlf		hex1,F		;左ローテート（上位8ビット×２）
			bcf		STATUS,C
			rlf		hex0,F		;
			rlf		hex1,F		;
			bcf		STATUS,C
			rlf		hex0,F		;
			rlf		hex1,F		;
			bcf		STATUS,C
			rlf		hex0,F		;
			rlf		hex1,F		;
			bcf		STATUS,C	;
			rlf		hex0,F		;
			rlf		hex1,F		;hex(0-1)=レコード相対アドレス
;			GPAT_C16X16 格納アドレス計算
			movlw	LOW GPAT_C16X16	;PAT_16X8dot START_LOW_ADR
			movwf	hexw0
			movlw	HIGH GPAT_C16X16;PAT_16X8dot START_HIGH_ADR
			movwf	hexw1
			call	ADD16B		;hex(0-1)=16X16FONT格納実アドレス
			movf	hex0,W
			movwf	FSR0L
			movf	hex1,W
			movwf	FSR0H		;FSR0に16X8FONTアドレスセット

;			G-RAM スタートアドレス設定
;		PGAD=ページアドレス(Y軸)およびコマンド合成
;		CGAD=桁アドレス(X軸)、bit7=CSx、bit0-6=コマンド合成(bit7=0にする事)
			call	GET_CAX16	;X軸アドレス+bit6=1+CS(bit7)
			movwf	CGAD		;CS1=RA0、CS2=RA1
			btfss	CGAD,7		;CS設定bit
			bra		ptw169cs1
ptw169cs2	call	SET_CS2		;CS2_ON
			bra		ptw1691
ptw169cs1	call	SET_CS1		;CS1_ON
ptw1691
			call	GET_PG16X16	;PAGEアドレス設定コマンド
			movwf	PGAD		;PGAD=ページアドレス(Y軸)保存
			call	SEND_CMD	;FONT上位PAGEアドレス送信
			bcf		CGAD,7		;CSフラグクリア
			movf	CGAD,W		;X軸アドレス送信コマンド
			call	SEND_CMD	;X軸スタートアドレス設定

;			ビットデータ連続送信(16X2bytes)
			movlw	010h
			movwf	icw0
ptw1692		moviw	FSR0++		;ビットパターン読み込み
			call	SEND_DATA	;ビットパターン書込み
			decfsz	icw0,F
			bra		ptw1692
;
			incf	PGAD,W		;下位8バイト
			call	SEND_CMD
			movf	CGAD,W		;X軸アドレス送信コマンド
			call	SEND_CMD	;X軸スタートアドレス設定
			movlw	010h
			movwf	icw0
ptw1693		moviw	FSR0++		;ビットパターン読み込み
			call	SEND_DATA	;ビットパターン書込み
			decfsz	icw0,F
			bra		ptw1693
			return



;		8x6dot DSP_ADRアドレスから、PAGE実アドレスを提示
;		すなわち縦軸のアドレス
;		入力	DSP_ADR
;		出力	Wreg(SET_PAGE COMMAND,B8H+Page(0-7))
;
;	DSP_ADR		00H-A7H(167)
;	8×6dot		1行21文字
;		0行		00H-14H(0-20)
;		1行		15H-29H(21-41)
;		2行		2AH-3EH(42-62)
;		3行		3FH-53H(63-83)
;		4行		54H-68H(84-104)
;		5行		69H-7DH(105-125)
;		6行		7EH-92H(126-146)
;		7行		93H-A7H(147-167)
;

GET_PG8X6
			movf	DSP_ADR,W	;表示キャラクタアドレス
			sublw	092H		;W=K-W
			btfss	STATUS,C	;
			retlw	0BFH		;PAGE7 (B8H+07H=BFH)

			movf	DSP_ADR,W	;表示キャラクタアドレス
			sublw	07DH		;
			btfss	STATUS,C	;
			retlw	0BEH		;PAGE6

			movf	DSP_ADR,W	;表示キャラクタアドレス
			sublw	068H		;
			btfss	STATUS,C	;
			retlw	0BDH		;PAGE5

			movf	DSP_ADR,W	;表示キャラクタアドレス
			sublw	053H		;
			btfss	STATUS,C	;
			retlw	0BCH		;PAGE4

			movf	DSP_ADR,W	;表示キャラクタアドレス
			sublw	03EH		;
			btfss	STATUS,C	;
			retlw	0BBH		;PAGE3

			movf	DSP_ADR,W	;表示キャラクタアドレス
			sublw	029H		;
			btfss	STATUS,C	;
			retlw	0BAH		;PAGE2

			movf	DSP_ADR,W	;表示キャラクタアドレス
			sublw	014H		;
			btfss	STATUS,C	;
			retlw	0B9H		;PAGE1
			retlw	0B8H		;PAGE0


;		16x8dot DSP_ADRアドレスから、PAGE実アドレスを提示
;		すなわち縦軸のアドレス
;		入力	DSP_ADR
;		0行		00H-0FH(0-15)
;		1行		10H-1FH(16-31)
;		2行		20H-2FH(32-47)
;		3行		30H-3FH(48-63)
;		出力	Wreg(SET_PAGE COMMAND,B8H+Page(0-7))
GET_PG16X8
			movf	DSP_ADR,W	;表示キャラクタアドレス
			sublw	02FH		;W=K-W(W=2FH-W)
			btfss	STATUS,C	;
			retlw	0BEH		;PAGE6

			movf	DSP_ADR,W	;表示キャラクタアドレス
			sublw	01FH		;
			btfss	STATUS,C	;
			retlw	0BCH		;PAGE4

			movf	DSP_ADR,W	;表示キャラクタアドレス
			sublw	0FH			;
			btfss	STATUS,C	;
			retlw	0BAH		;PAGE2
			retlw	0B8H		;PAGE0

;		16x16dot DSP_ADRアドレスから、PAGE実アドレスを提示
;		すなわち縦軸のアドレス
;		入力	DSP_ADR
;		0行		00H-07H(0-7)
;		1行		08H-0FH(8-15)
;		2行		10H-17H(16-23)
;		3行		18H-1FH(24-31)
;		出力	Wreg(SET_PAGE COMMAND,B8H+Page(0-7))
GET_PG16X16
			movf	DSP_ADR,W	;表示キャラクタアドレス
			sublw	017H		;W=K-W(W=2FH-W)
			btfss	STATUS,C	;
			retlw	0BEH		;PAGE6

			movf	DSP_ADR,W	;表示キャラクタアドレス
			sublw	0FH			;
			btfss	STATUS,C	;
			retlw	0BCH		;PAGE4

			movf	DSP_ADR,W	;表示キャラクタアドレス
			sublw	07H			;
			btfss	STATUS,C	;
			retlw	0BAH		;PAGE2
			retlw	0B8H		;PAGE0



;
;		DSP_ADRから実X軸アドレスおよびCSを提示
;		横6ドットパターン用
;
;	入力		DSP_ADR
;	DSP_ADR		00H-A7H(167)
;	8×6dot
;		0行		00H-14H(0-20)
;		1行		15H-29H(21-41)
;		2行		2AH-3EH(42-62)
;		3行		3FH-53H(63-83)
;		4行		54H-68H(84-104)
;		5行		69H-7DH(105-125)
;		6行		7EH-92H(126-146)
;		7行		93H-A7H(147-167)
;
;	出力		Wreg
;				bit7	CS
;						0=CS1
;						1=CS2
;				bit6	1
;				bit5-0	X軸アドレス
;				6dot幅で進行、64dot以上からはCS=1で0dotから
;			DPX	スタートX軸座標(0-127)

GET_CAX6
			movf	DSP_ADR,W
			movwf	tmp0
			sublw	0A7H		;W=A7H-(DSP_ADR)
			btfss	STATUS,C
			retlw	0FFH		;入力値エラー(DSP_ADR>A7H)
			movf	tmp0,W
			sublw	092H		;W=K-W
			btfsc	STATUS,C	;ボローチェック
			goto	gcx61		;行数未定
			movlw	093h		;7行目決定（ボロー）
			subwf	tmp0,W		;W=F-W、桁位置計算0-21桁
			call	CAX6D		;桁位置によるX軸実アドレス
			movwf	tmp0
			andlw	03FH		;bit7-6=0
			movwf	DPX0		;X軸実アドレス座標セット
			movf	tmp0,W		;W=LCDコマンド+CS(bit7)
			return
gcx61
			movf	tmp0,W		;tmp0=DSP_ADR
			sublw	07DH		;W=K-W
			btfsc	STATUS,C	;ボローチェック
			goto	gcx62		;行数未定
			movlw	07Eh		;6行目決定（ボロー）
			subwf	tmp0,W		;W=F-W
			call	CAX6D
			movwf	tmp0
			andlw	03FH		;bit7-6=0
			movwf	DPX0		;X軸座標セット
			movf	tmp0,W
			return
gcx62
			movf	tmp0,W		;tmp0=DSP_ADR
			sublw	068H		;W=K-W
			btfsc	STATUS,C	;ボローチェック
			goto	gcx63		;行数未定
			movlw	069h		;5行目決定（ボロー）
			subwf	tmp0,W		;W=F-W
			call	CAX6D
			movwf	tmp0
			andlw	03FH		;bit7-6=0
			movwf	DPX0		;X軸座標セット
			movf	tmp0,W
			return
gcx63
			movf	tmp0,W		;tmp0=DSP_ADR
			sublw	053H		;W=K-W
			btfsc	STATUS,C	;ボローチェック
			goto	gcx64		;行数未定
			movlw	054h		;4行目決定（ボロー）
			subwf	tmp0,W		;W=F-W
			call	CAX6D
			movwf	tmp0
			andlw	03FH		;bit7-6=0
			movwf	DPX0		;X軸座標セット
			movf	tmp0,W
			return
gcx64
			movf	tmp0,W		;tmp0=DSP_ADR
			sublw	03EH		;W=K-W
			btfsc	STATUS,C	;ボローチェック
			goto	gcx65		;行数未定
			movlw	03Fh		;3行目決定（ボロー）
			subwf	tmp0,W		;W=F-W
			call	CAX6D
			movwf	tmp0
			andlw	03FH		;bit7-6=0
			movwf	DPX0		;X軸座標セット
			movf	tmp0,W
			return
gcx65
			movf	tmp0,W		;tmp0=DSP_ADR
			sublw	029H		;W=K-W
			btfsc	STATUS,C	;ボローチェック
			goto	gcx66		;行数未定
			movlw	02Ah		;2行目決定（ボロー）
			subwf	tmp0,W		;W=F-W
			call	CAX6D
			movwf	tmp0
			andlw	03FH		;bit7-6=0
			movwf	DPX0		;X軸座標セット
			movf	tmp0,W
			return
gcx66
			movf	tmp0,W		;tmp0=DSP_ADR
			sublw	014H		;W=K-W
			btfsc	STATUS,C	;ボローチェック
			goto	gcx67		;行数未定
			movlw	015h		;1行目決定（ボロー）
			subwf	tmp0,W		;W=F-W
			call	CAX6D
			movwf	tmp0
			andlw	03FH		;bit7-6=0
			movwf	DPX0		;X軸座標セット
			movf	tmp0,W
			return
gcx67
			movf	tmp0,W		;tmp0=DSP_ADR
			call	CAX6D
			movwf	tmp0
			andlw	03FH		;bit7-6=0
			movwf	DPX0		;X軸座標セット
			movf	tmp0,W
			return

CAX6D
			brw					;(PC)+W
;								 DSP_ADR	   DPX
			retlw	040H		;00H(000)  X軸 00H(000)　CS=1
			retlw	046H		;01H(001)　X軸 06H(006)
			retlw	04CH		;02H(002)　X軸 0CH(012)
			retlw	052H		;03H(003)　X軸 12H(018)
			retlw	058H		;04H(004)　X軸 18H(024)
			retlw	05EH		;05H(005)　X軸 1EH(030)
			retlw	064H		;06H(006)　X軸 24H(036)
			retlw	06AH		;07H(007)　X軸 2AH(042)
			retlw	070H		;08H(008)　X軸 30H(048)
			retlw	076H		;09H(009)　X軸 36H(054)
			retlw	07CH		;0AH(010)　X軸 3CH(060)
;
			retlw	0C2H		;0BH(011)　X軸 42H(066)　CS=2
			retlw	0C8H		;09H(012)　X軸 48H(072)
			retlw	0CEH		;0AH(013)　X軸 4EH(078)
			retlw	0D4H		;0BH(014)　X軸 54H(084)
			retlw	0DAH		;0CH(015)　X軸 5AH(090)
			retlw	0E0H		;0DH(016)　X軸 60H(096)
			retlw	0E6H		;0EH(017)　X軸 66H(102)
			retlw	0ECH		;0FH(018)　X軸 6CH(108)
			retlw	0F2H		;0DH(019)　X軸 72H(114)
			retlw	0F8H		;0EH(020)　X軸 78H(120)


;
;		DSP_ADRから実X軸アドレスおよびCSを提示
;		横8ドットパターン用(8X8)
;
;	入力		DSP_ADR
;	8×8dot
;		0行		00H-0FH(0-15)
;		1行		10H-1FH(16-31)
;		2行		20H-2FH(32-47)
;		3行		30H-3FH(48-63)
;		4行		40H-4FH(64-79)
;		5行		50H-5FH(80-95)
;		6行		60H-6FH(96-111)
;		7行		70H-7FH(112-127)
;	出力		Wreg
;				bit7	CS
;						0=CS1
;						1=CS2
;				bit6	1
;				bit5-0	X軸アドレス（0-63）
;				8dot幅で進行、64dot以上からはCS=1で0dotから
;				FFH=描画領域以外エラー
GET_CAX8
			movf	DSP_ADR,W
			movwf	tmp0
			sublw	07FH		;W=7FH-(DSP_ADR)
			btfss	STATUS,C
			retlw	0FFH		;入力値エラー
			movf	tmp0,W
			sublw	06FH		;W=K-W
			btfsc	STATUS,C	;ボローチェック
			goto	gcx82		;行数未定
			movlw	070h		;7行目決定（ボロー）
			subwf	tmp0,F		;F=F-W
			goto	gcx89
gcx82
			movf	tmp0,W		;tmp0=DSP_ADR
			sublw	05FH		;W=K-W
			btfsc	STATUS,C	;ボローチェック
			goto	gcx83		;行数未定
			movlw	060h		;6行目決定（ボロー）
			subwf	tmp0,F		;F=F-W
			goto	gcx89
gcx83
			movf	tmp0,W		;tmp0=DSP_ADR
			sublw	04FH		;W=K-W
			btfsc	STATUS,C	;ボローチェック
			goto	gcx84		;行数未定
			movlw	050h		;5行目決定（ボロー）
			subwf	tmp0,F		;F=F-W
			goto	gcx89
gcx84
			movf	tmp0,W		;tmp0=DSP_ADR
			sublw	03FH		;W=K-W
			btfsc	STATUS,C	;ボローチェック
			goto	gcx85		;行数未定
			movlw	040h		;4行目決定（ボロー）
			subwf	tmp0,F		;F=F-W
			goto	gcx89
gcx85
			movf	tmp0,W		;tmp0=DSP_ADR
			sublw	02FH		;W=K-W
			btfsc	STATUS,C	;ボローチェック
			goto	gcx86		;行数未定
			movlw	030h		;3行目決定（ボロー）
			subwf	tmp0,F		;F=F-W
			goto	gcx89
gcx86
			movf	tmp0,W		;tmp0=DSP_ADR
			sublw	01FH		;W=K-W
			btfsc	STATUS,C	;ボローチェック
			goto	gcx87		;行数未定
			movlw	020h		;2行目決定（ボロー）
			subwf	tmp0,F		;F=F-W
			goto	gcx89
gcx87
			movf	tmp0,W		;tmp0=DSP_ADR
			sublw	0FH			;W=K-W
			btfsc	STATUS,C	;ボローチェック
			goto	gcx89		;1行目決定
			movlw	010h		;1行目決定（ボロー）
			subwf	tmp0,F		;F=F-W

gcx89		movf	tmp0,W		;00H-0FH
			brw					;(PC)+W
;								 DSP_ADR
			retlw	040H		;00H(000)　X軸 00H(000)　CS=1
			retlw	048H		;01H(001)　X軸 08H(008)
			retlw	050H		;02H(002)　X軸 10H(016)
			retlw	058H		;03H(003)　X軸 18H(024)
			retlw	060H		;04H(004)　X軸 20H(032)
			retlw	068H		;05H(005)　X軸 28H(040)
			retlw	070H		;06H(006)　X軸 30H(048)
			retlw	078H		;07H(007)　X軸 38H(056)
;
			retlw	0C0H		;08H(008)　X軸 40H(064)　CS=2
			retlw	0C8H		;09H(009)　X軸 48H(072)
			retlw	0D0H		;0AH(010)　X軸 50H(080)
			retlw	0D8H		;0BH(011)　X軸 58H(088)
			retlw	0E0H		;0CH(012)　X軸 60H(096)
			retlw	0E8H		;0DH(013)　X軸 68H(104)
			retlw	0F0H		;0EH(014)　X軸 70H(112)
			retlw	0F8H		;0FH(015)　X軸 78H(120)
;

;
;		DSP_ADRから実X軸アドレスおよびCSを提示
;		縦16ドット、横8ドットパターン用(16X8)
;
;	入力		DSP_ADR
;	16×8dot
;		0行		00H-0FH(0-15)
;		1行		10H-1FH(16-31)
;		2行		20H-2FH(32-47)
;		3行		30H-3FH(48-63)
;	出力		Wreg
;				bit7	CS
;						0=CS1
;						1=CS2
;				bit6	1
;				bit5-0	X軸アドレス（0-63）
;				8dot幅で進行、64dot以上からはCS=1で0dotから
;				FFH=描画領域以外エラー
GET_CAX168
			movf	DSP_ADR,W
			movwf	tmp0
			sublw	03FH		;W=3FH-(DSP_ADR)
			btfss	STATUS,C
			retlw	0FFH		;入力値エラー
			goto	gcx85

;
;		DSP_ADRから実X軸アドレスおよびCSを提示
;		縦16ドット、横16ドットパターン用(16X16)
;
;	入力		DSP_ADR
;	16×16dot
;		0行		00H-07H(0-7)
;		1行		08H-0FH(8-15)
;		2行		10H-17H(16-23)
;		3行		18H-1FH(24-31)
;	出力		Wreg
;				bit7	CS
;						0=CS1
;						1=CS2
;				bit6	1
;				bit5-0	X軸アドレス（0-63）
;				16dot幅で進行、64dot以上からはCS=1で0dotから
;				FFH=描画領域以外エラー
GET_CAX16
			movf	DSP_ADR,W
			movwf	tmp0
			sublw	01FH		;W=1FH-(DSP_ADR)
			btfss	STATUS,C
			retlw	0FFH		;入力値エラー

			movf	tmp0,W		;tmp0=DSP_ADR
			sublw	017H		;W=K-W
			btfsc	STATUS,C	;ボローチェック
			goto	gcx91		;行数未定
			movlw	018h		;3行目決定（ボロー）
			subwf	tmp0,F		;F=F-W
			goto	gcx93
gcx91
			movf	tmp0,W		;tmp0=DSP_ADR
			sublw	0FH			;W=K-W
			btfsc	STATUS,C	;ボローチェック
			goto	gcx92		;行数未定
			movlw	010H		;2行目決定（ボロー）
			subwf	tmp0,F		;F=F-W
			goto	gcx93
gcx92
			movf	tmp0,W		;tmp0=DSP_ADR
			sublw	07H			;W=K-W
			btfsc	STATUS,C	;ボローチェック
			goto	gcx93		;1行目決定
			movlw	08h			;1行目決定（ボロー）
			subwf	tmp0,F		;F=F-W

gcx93		movf	tmp0,W		;00H-0FH
			brw					;(PC)+W
;								 DSP_ADR
			retlw	040H		;00H(000)　X軸 00H(000)　CS=1
			retlw	050H		;01H(001)　X軸 10H(016)
			retlw	060H		;02H(002)　X軸 20H(032)
			retlw	070H		;03H(003)　X軸 30H(048)
;
			retlw	0C0H		;04H(004)　X軸 40H(064)　CS=2
			retlw	0D0H		;05H(005)　X軸 50H(080)
			retlw	0E0H		;06H(006)　X軸 60H(096)
			retlw	0F0H		;07H(007)　X軸 70H(112)
;


;
;		スクリーン クリア
;
CLR_SCRA;	SCREEN ALL CLR
			movlw	010h
			movwf	tmp2

cls01		decf	tmp2,W
			call	CLR_PAGE
			decfsz	tmp2,F		;
			bra		cls01
;			Set Display Start Line
			call	SET_CS		;CS1=CS2=1
			movlw	0c0h		;(X0,Y0)
			call	SEND_CMD	;
;			Column Adress 0
			movlw	040H
			call	SEND_CMD
;			Page Address 0
			movlw	0B8H
			call	SEND_CMD
			call	RST_CS
			return
CLR_SCRL;	Left SCR CLR
			movlw	08H
			movwf	tmp2
			bra		cls01
CLR_SCRR;	Right SCR CLR
			movlw	08H
			movwf	tmp2
csr01		call	CLR_PAGE
			movlw	1
			addwf	tmp2,F
			btfsc	STATUS,DC
			return
			movf	tmp2,W
			bra		csr01

;
;		指定ページクリア
;
;	Wregにページ指定
;	00H-07H		CS1 page0-page7
;	08H-0FH		CS2 page0-page7
;	使用ワーク	tmp(0-1)
CLR_PAGE
			movwf	tmp1
			sublw	07h			;W=K-W
			btfsc	STATUS,C	;ボローチェック
			bra		clp01		;C=1
			call	SET_CS2		;C=0
			movlw	08h
			subwf	tmp1,W
			bra		clp02
clp01		call	SET_CS1
			movf	tmp1,W
clp02		addlw	0b8h		;W=B8H+W
			call	SEND_CMD	;Page指定
			movlw	040h		;Start Pos
			call	SEND_CMD	;桁位置=0
			movlw	040H		;桁幅=64
			movwf	tmp0
clp03
			movlw	0h
			call	SEND_DATA	;address auto increment
			decfsz	tmp0,F
			bra		clp03
			return


;
;       ＳＧ１２８６４Ａイニシャライズ
;
INIT_LCD
			call	wait10m		;LCDパワーオン ウエイト
			bsf		PORTB,5		;/RESET NORMAL
			call	wait10m	
			call	wait10m
			call	wait10m
;			Display OFF
			movlw	03EH		;
			call	SEND_CMD
;			Set Display Start Line
			call	SET_CS		;CS1=CS2=1
			movlw	0c0h		;(X0,Y0)
			call	SEND_CMD	;
;			Column Adress 0
;			movlw	040H
;			call	SEND_CMD
;			Page Address 0
;			movlw	0B8H
;			call	SEND_CMD
;			call	RST_CS
;			Display ON
			movlw	03fh		;
			call	SEND_CMD
            return

;
;		ＳＧ１２８６４Ａ　低レベル サブルーチン　Ver0.1
;
;		使用ポート
;		RA5=Enable（H→L)
;		RA4=R/W
;			1=読み出し
;			0=書込み
;		RA2=RS　データorインストラクション レジスタ選択
;			1=データレジスタ
;			0=制御レジスタ
;		RA1-RA0　チップセレクト
;			RA0=1　CS1　左画面横64dotアクセス
;			RA1=1　CS2　右画面横64dotアクセス
;		RB5=RESET
;			NORMAL	RB5=1
;			RESET	RB5=0
;		データバス
;			RC7-0=DB7-0
;
;		インストラクションコマンド送信
;		事前にWregに8ビットデータを用意して呼び出し
;
;		送信シークェンス
;		SG12864
;		(1)E=0(RA5)
;		(2)R/W=0（RA4)
;		(3)RS=0(RA2)、DATAの時はRS=1
;		(4)ｳｪｲﾄ140ns以上
;		(5)E=0→E=1(RA5)
;		(6)DB7-DB0を提示（RC7-RC0)
;		(7)ｳｪｲﾄ200ns以上
;		(8)E=1→E=0(RA5)
;		(9)ｳｪｲﾄ10ns以上
;		※桁アドレス送信の場合、アドレスは自動インクリメントされる
;		　PAGEアドレスとCSは指定されるまでアドレス保存
;		　CSは同時指定可能
;
;		使用ワーク
;			wrk0	データ保存

;
;		Ｗレジスタのインストラクションコマンドを送出
;
;	（１）Display ON/OFF
;		RS	R/W	DB7	DB6	DB5	DB4	DB3	DB2	DB1	DB0
;		0	0	0	0	1	1	1	1	1	D
;												D=1:Display ON(3FH)
;												D=0:Display OFF(3EH)
;	（２）Set Column Address
;		RS	R/W	DB7	DB6	DB5	DB4	DB3	DB2	DB1	DB0
;		0	0	0	1	A5	A2	A3	A2	A1	A0
;												Column Address(40H-7FH)
;												A(5-0)=00H-3FH
;	（３）Set Page Address
;		RS	R/W	DB7	DB6	DB5	DB4	DB3	DB2	DB1	DB0
;		0	0	1	0	1	1	1	A2	A1	A0
;												Page Address(B8H-BFH)
;												A(2-0)=00H-07H
;	（４）Display Start Line
;		RS	R/W	DB7	DB6	DB5	DB4	DB3	DB2	DB1	DB0
;		0	0	1	1	A5	A2	A3	A2	A1	A0
;												Start Line Address(C0H-FFH)
;												A(5-0)=00H-3FH
;	（５）Status Read
;		RS	R/W	DB7		DB6	DB5		DB4		DB3	DB2	DB1	DB0
;		0	0	BUSY	0	ON/OFF	RESET	0	0	0	0
;												BUSY=1 コマンド処理中
;												ON/OFF=1 画面OFF中
;												RESET=1 リセット中
;	（６）Write Display Data
;		RS	R/W	DB7	DB6	DB5	DB4	DB3	DB2	DB1	DB0
;		1	0	Write Data
;
;	（７）Read Display Data
;		RS	R/W	DB7	DB6	DB5	DB4	DB3	DB2	DB1	DB0
;		1	1	Read Data
;
SEND_CMD	;コマンド送信(Wreg)
			movwf	wrk0		;push Wreg
			bcf		PORTA,5		;E=0
			call	SET_RSC		;コマンド書き込み
			bsf		PORTA,5		;E=1
			movf	wrk0,W		;pop Wreg
			movwf	PORTC		;コマンド提示
			nop					;
			bcf		PORTA,5		;E=0
s_c01		call	READ_STA
			andlw	080H		;bit7=STATUS/BUSY
			btfss	STATUS,Z
			bra		s_c01		;BUSY=1
			return

SEND_DATA	;データ送信(Wreg)
			movwf	wrk0		;push Wreg
			bcf		PORTA,5		;E=0
			call	w01u
			call	SET_RSD
			bsf		PORTA,5		;E=1
			movf	wrk0,W		;pop Wreg
			movwf	PORTC		;データ提示
			nop					;
			bcf		PORTA,5		;E=0
s_d01		call	READ_STA
			andlw	080H		;bit7=STATUS/BUSY
			btfss	STATUS,Z
			bra		s_d01		;BUSY=1
			return

READ_STA
			movlb	01h			;BANK1
			movlw	0FFH
			movwf	TRISC		;PORTC=INPUT
			clrf	BSR
			bcf		PORTA,5		;E=0
			movlb	02h
			bsf		LATA,4		;R/W=1(READ)
			bcf		LATA,2		;D/I=0(CMD)
			clrf	BSR			;BANK0
			bsf		PORTA,5		;E=1
;			movf	PORTC,W
			nop					;wait
			nop
			nop
			nop
			bcf		PORTA,5		;E=0
			nop
			movf	PORTC,W
			movlb	01h
			clrf	TRISC		;PORTC OUTPUT
			clrf	BSR
			return

READ_DATA
			movlb	01h			;BANK1
			movlw	0FFH
			movwf	TRISC		;PORTC=INPUT
			clrf	BSR
			bcf		PORTA,5		;E=0
			movlb	02h
			bsf		LATA,4		;R/W=1(READ)
			bsf		LATA,2		;D/I=1(DATA)
			clrf	BSR			;BANK0
			bsf		PORTA,5		;E=1
;			movf	PORTC,W
			nop					;wait
			nop
			nop
			nop
			bcf		PORTA,5		;E=0
			nop
			movf	PORTC,W
			movlb	01h
			clrf	TRISC		;PORTC OUTPUT
			clrf	BSR
			return

;		Display Start Line Reset 
OFSET_ZPOS
			movlw	0C0H
			call	SEND_CMD
			return

;
;		ＬＣＤ制御ビット
;
SET_RSC		;制御レジスタ選択
			movlb	02h
			bcf		LATA,2		;D/I=0 制御レジスタを選択
			bcf		LATA,4		;R/W=0 書込みモードセット
			clrf	BSR
			return
SET_RSD		;データレジスタ選択
			movlb	02h
			bsf		LATA,2		;D/I=1 データレジスタを選択
			bcf		LATA,4		;R/W=0 書込みモードセット
			clrf	BSR
			return
SET_CS1		;画面１（左画面）選択
			movlb	02h
			bsf		LATA,0
			bcf		LATA,1
			clrf	BSR
			return
SET_CS2		;画面２（右画面）選択
			movlb	02h
			bcf		LATA,0
			bsf		LATA,1
			clrf	BSR
			return
SET_CS
			movlb	02h
			bsf		LATA,0
			bsf		LATA,1
			clrf	BSR
			return
RST_CS1
			movlb	02h
			bcf		LATA,0
			clrf	BSR
			return
RST_CS2
			movlb	02h
			bcf		LATA,1
			clrf	BSR
			return
RST_CS
			movlb	02h
			bcf		LATA,0
			bcf		LATA,1
			clrf	BSR
			return
LCD_RST
			bcf		PORTB,5
			call	wait10m	
			bsf		PORTB,5
			call	wait10m
			return

;
;		16進8bitバイナリ数値をASCIIコードに変換
;
;		入力	Wreg:00H-FFH
;		出力	ASC0:下位4bit分のASCIIコード'0-9'、'A-F'
;			ASC1:上位4bit分のASCIIコード'0-9'、'A-F'
;
;		使用ワーク	wrk0,wrk1
;
NUTOASC
			movwf	wrk0		;Wreg退避
			andlw	0FH
			movwf	wrk1		;下位4bit分のみ
			movlw	0Ah
			subwf	wrk1,W		;W=F-W
			btfsc	STATUS,C	;/borrow
			bra		NUA1
NUA0		movf	wrk1,W
			addlw	030h
			movwf	ASC0
			bra		NUA2
NUA1;		下位4bit A-F
			movf	wrk1,W
			addlw	037h
			movwf	ASC0

NUA2		;上位4bitチェック
			swapf	wrk0,W
			andlw	0FH
			movwf	wrk1		;上位4bit分のみ
			movlw	0Ah
			subwf	wrk1,W		;W=F-W
			btfsc	STATUS,C	;/borrow
			bra		NUA4
NUA3		movf	wrk1,W
			addlw	030H
			movwf	ASC1
			return
NUA4;		上位4bit A-F
			movf	wrk1,W
			addlw	037H
			movwf	ASC1
			return


;
;			32ビットバイナリ10倍演算(符号無整数)
;
;		入力	hex(0-3)	32ビット
;		出力	hex(0-3)
;
;		使用ワーク	hexw0-3	4バイト
;

MLT32_X10
;			データ保存
			movf	hex0,W
			movwf	hexw0
			movf	hex1,W
			movwf	hexw1
			movf	hex2,W
			movwf	hexw2
			movf	hex3,W
			movwf	hexw3

;			32ビットデータを8倍
			bcf		STATUS,C	;
			rlf		hex0,F		;2倍を3回実行する
			rlf		hex1,F
			rlf		hex2,F
			rlf		hex3,F
			bcf		STATUS,C	;
			rlf		hex0,F
			rlf		hex1,F
			rlf		hex2,F
			rlf		hex3,F
			bcf		STATUS,C
			rlf		hex0,F
			rlf		hex1,F
			rlf		hex2,F
			rlf		hex3,F

			call	ADD32B		;元データを加算
			call	ADD32B


			btfss	STATUS,C	;オーバーフローか？
			retlw   0h
            retlw   01h

;
;       16ビットバイナリ　4倍演算（符号無整数)
;
;       hex0,hex1=(hex0,hex1)*2
;		W=0の時、正常終了
;		W=1の時、エラー発生、演算結果は保障されない
;
MLT16_X4
			bcf		STATUS,C	;Cフラグクリア
			rlf		hex0,F		;左ローテート（下位8ビット×２）
			rlf		hex1,F		;左ローテート（上位8ビット×２）
			btfsc	STATUS,C
			retlw	01h			;演算オーバーフロー発生
			rlf		hex0,F		;左ローテート（下位8ビット×２）
			rlf		hex1,F		;左ローテート（上位8ビット×２）
			btfss	STATUS,C
			retlw	0h			;演算正常終了
			retlw	01h			;演算オーバーフロー発生

;
;       16ビットバイナリ　16倍演算（符号無整数)
;
;       hex0,hex1=(hex0,hex1)*2
;		W=0の時、正常終了
;		W=1の時、エラー発生、演算結果は保障されない
;
MLT16_X16
			bcf		STATUS,C	;Cフラグクリア
			rlf		hex0,F		;左ローテート（下位8ビット×２）
			rlf		hex1,F		;左ローテート（上位8ビット×２）
			btfsc	STATUS,C
			retlw	01h			;演算オーバーフロー発生
			rlf		hex0,F		;
			rlf		hex1,F		;
			bcf		STATUS,C	;
			rlf		hex0,F		;
			rlf		hex1,F		;
			btfsc	STATUS,C
			retlw	01h			;演算オーバーフロー発生
			rlf		hex0,F		;
			rlf		hex1,F		;
			btfss	STATUS,C
			retlw	0h			;演算正常終了
			retlw	01h			;演算オーバーフロー発生

;			32ビットバイナリ加算(整数符号無）
;
;		事前に(hex0-3)、(hexw0-3)に数値を入れておく事
;		演算結果でエラー(桁上がり）が発生しても対処はしない
;
;		演算
;		hex(0-3) = hex(0-3) + hexw(0-3)
;

ADD32B
			movf	hexw0,W		;hex0=hex0+hexw0
			addwf	hex0,F		;桁上がりでC=1
			movlw	01h			;この命令はフラグ変化しない
			btfss	STATUS,C	;if c=1 then hex1=hex1+1
			goto	ad31		;桁上がり無
;			(hex0+W)に桁上がり発生、処理
			addwf	hex1,F		;hex1=hex1+1
			btfsc	STATUS,C	;桁上がり無なら、goto ad31
			addwf	hex2,F		;桁上がり発生、hex2=hex2+1
			btfsc	STATUS,C	;桁上がり無なら、goto ad31
			addwf	hex3,F		;桁上がり発生、hex3=hex3+1
								;ここで桁上がり発生しても対処しない
ad31		movf	hexw1,W
			addwf	hex1,F
			movlw	01h
			btfsc	STATUS,C
			addwf	hex2,F
			btfsc	STATUS,C
			addwf	hex3,F

ad32		movf	hexw2,W
			addwf	hex2,F
			movlw	01h
			btfsc	STATUS,C
			addwf	hex3,F
			movf	hexw3,W
			addwf	hex3,F
			retlw	0h


;
;
;			32ビットバイナリ減算(整数符号無)
;
;		事前にhex(0-3)、hexw(0-3)に数値を入れておく事
;		演算結果でエラー(マイナス）の場合W=1、OKの時はW=0でリターン
;		W=1の場合、演算結果は保障されない
;
;		演算
;		hex(0-3) = hex(0-3) - hexw(0-3)
;

SUB32B
;			hex0-hexw0の減算
			movf	hexw0,W		;hex0=hex0-W(hexw0)
			subwf	hex0,F		;W>HEX0の時、ボロー(C=0)
								;W<=HEX0の時、無(C=1)
			movlw	01h			;この命令はフラグ変化しない
			btfss	STATUS,C	;C=1なら、hex1-hexw1へ
;			(hex0-W)にボロー発生、hex1に桁借り処理
			subwf	hex1,F		;hex1=hex1-1
			btfss	STATUS,C	;C=1なら、goto sb31
			subwf	hex2,F		;(hex1-1)にボロー発生、hex2に桁借り
			btfss	STATUS,C	;C=1なら、goto sb31
			subwf	hex3,F		;(hex2-1）ボロー発生、hex3に桁借り
			btfss	STATUS,C
			retlw	01h			;hex3にボロー発生、エラー終了

;			hex1-hexw1の減算
sb31		movf	hexw1,W		;
			subwf	hex1,F
			movlw	01h
			btfss	STATUS,C
			subwf	hex2,F
			btfss	STATUS,C
			subwf	hex3,F
			btfss	STATUS,C
			retlw	01h
;			hex2-hexw2の減算
			movf	hexw2,W
			subwf	hex2,F
			movlw	01h
			btfss	STATUS,C
			subwf	hex3,F
			btfss	STATUS,C
			retlw	01h
;			hex3-hexw3の減算
			movf	hexw3,W
			subwf	hex3,F
			btfss	STATUS,C
			retlw	01h
			retlw	0h

;		16ビットバイナリ加算　ver1.1(バグ修正版)
;		hex(0-1)=hex(0-1)+hexw(0-1)
;		W=0の時、正常終了
;		W=FFHの時、エラー発生（キャリー）、演算結果は保障されない
;		hexw(0-1)は保存される
ADD16B
			movf	hexw0,W		;W=hexw0
			addwf	hex0,F		;hex0=hex0+hexw0
			movlw	01h			;この命令はフラグ変化しない
			btfss	STATUS,C
			goto	ad11		;キャリー無で次の加算
			addwf	hex1,F		;キャリー発生、hex1=hex1+1
			btfsc	STATUS,C
			retlw	01h			;桁上がり発生、加算エラー終了
ad11		movf	hexw1,W		;W=hexw1
			addwf	hex1,F		;hex1=hex1+hexw1
			btfsc	STATUS,C
			retlw	0FFh		;キャリー発生、加算エラー終了
			retlw	0h			;加算正常終了


;		16ビットバイナリ減算
;		hex(0-1)=hex(0-1)-hexw(0-1)
;		W=0の時、正常終了
;		W=1の時、エラー発生（ボロー）、演算結果は保障されない
SUB16B
			movf	hexw0,W		;W=hexw0
			subwf	hex0,F		;hex0=hex0-hexw0
			movlw	01h			;フラグ変化しない
			btfsc	STATUS,C
			goto	sb11		;ボロー無で次の減算
			subwf	hex1,F		;ボロー発生、hex1=hex1-1
			btfss	STATUS,C
			retlw	01h			;ボロー発生、減算エラー終了

sb11		movf	hexw1,W		;W=hexw1
			subwf	hex1,F		;hex1=hex1-hexw1
			btfss	STATUS,C
			retlw	01h			;ボロー発生、減算エラー終了
			retlw	0h			;減算正常終了


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			遅延時間サブルーチン	32MHZ用
;
;		1cycle	= 0.125us
;		使用レジスタ	= cnt2,cnt3
;		BSR		=0(BANK0)
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

wait100u						;呼び出しも含めて、100us
								;call is 2cycles
			movlw	09h			;1
			movwf	cnt2		;1
			movlb	0h
			nop
			nop					;3
w100u		nop					;
			call	w10u		;10*9=90us(ここだけ命令ステップを数えない）
			decfsz	cnt2,F		;4*8+3=31cycles
			goto	w100u
			return				;2+5+31+2=40cycles=20us

wait50u							;呼び出しも含めて、50us
			call	wait25u
wait25u							;呼び出しも含めて、25us
			call	w10u
			call	w10u
			movlw	0bh			;5us=0.125us*40cycles
			movwf	cnt2		;
w25u		decfsz	cnt2,F		;ループ 2+10*3+2=34cycles
			goto	w25u
			nop
			nop
			return				;2+34+2+2=40cycles=5us

wait5m							; 5ms
			movlb	0h
			movlw	05h
			movwf	cnt2
w5m			call	w1m
			decfsz	cnt2,F
			goto	w5m
			return

wait10m							; 10ms
			movlb	0h
			movlw	d'10'
			movwf	cnt2
w10m		call	w1m
			decfsz	cnt2,F
			goto	w10m
			return

wait20m							; 20ms
			movlb	0h
			movlw	d'20'
			movwf	cnt2
w20m		call	w1m
			decfsz	cnt2,F
			goto	w20m
			return
wait50m							; 50ms
			movlb	0h
			movlw	d'50'
			movwf	cnt2
w50m		call	w1m
			decfsz	cnt2,F
			goto	w50m
			return

wait100m						; 100ms
			movlb	0h
			movlw	d'100'
			movwf	cnt2
w100m		call	w1m
			decfsz	cnt2,F
			goto	w100m
			return

wait500m						; 500ms
			movlb	0h
			movlw	05h
			movwf	cnt3
w500m		call	wait100m
			decfsz	cnt3,F
			goto	w500m
			return

wait1s							; 1s
			movlb	0h
			movlw	d'10'
			movwf	cnt3
w1s			call	wait100m
			decfsz	cnt3,F
			goto	w1s
			return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			1ms 基本ウェイト
;			呼び出しを含めて1msとなる。
;
;		clock	= 32MHz(0.03125usec)
;		1cycle	= 0.125usec
;		1ms		= 0.125usec * 8000cycles
;
;			使用変数　cnt0,cnt1
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
w1m
			movlb	0h
			movlw	08h
			movwf	cnt0		;
;			外周ループ
w1m0		movlw	0c7h		;199d
			movwf	cnt1		;
;			内周ループ
w1m1		nop					;
			nop					;5cycles*cnt1
			decfsz	cnt1,F		;2+5*198+4=996c/s
			goto	w1m1		;
;
			decfsz	cnt0,F		;
			goto	w1m0		;2+7*999+998=7993cycles
			nop
			return					;other=(3+4)cycles
									;Total 8000*0.125us=1ms


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			10us 基本ウェイト
;			呼び出し（call　w10u)も含めて、10usとなる。
;
;		clock	= 32MHZ(0.03125us)
;		1cycle	= 0.125us
;		10us	= 0.125us * 80cycles
;		使用変数　cnt0,cnt1
;		'goto','call','return'は2サイクル消費する
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

w10u
			movlb	0h
			movlw	018h		;18H=24
			movwf	cnt0		;
w10u0		decfsz	cnt0,F		;3*23+2=71
			goto	w10u0		;
			nop
			nop
			return				;2+3+71+2+2=80cycles

w05u
			movlw	0bh			;5us=0.125us*40cycles
			movwf	cnt0		;
w05u0		decfsz	cnt0,F		;ループ 2+3*10+2=34cycles
			goto	w05u0
			nop
			nop
			return				;2+34+2+2=40cycles=5us

w02u
			movlw	04h			;2us=0.125us*16cycles
			movwf	cnt0		;
w02u0		decfsz	cnt0,F		;2+3*3+2+1+2=16cycles
			goto	w02u0
			nop
			return				;
w01u
			nop					;1us=0.125us*8cycles
			nop					;2+4+2=8cycles
			nop
			nop
			return

;
;	８×５ドットキャラクタパターン
;

GPAT_C8X5

; NO 0  ＳＰ
	DW 00H,00H,00H,00H,00H
; NO 1  ！
	DW 00H,00H,04FH,00H,00H
; NO 2  ”
	DW 00H,07H,00H,07H,00H
; NO 3  ＃
	DW 014H,07FH,014H,07FH,014H
; NO 4  ＄
	DW 024H,02AH,07FH,02AH,012H
; NO 5  ％
	DW 023H,013H,08H,064H,062H
; NO 6  ＆
	DW 036H,049H,055H,022H,050H
; NO 7  ’
	DW 00H,05H,03H,00H,00H
; NO 8  （
	DW 00H,01CH,022H,041H,00H
; NO 9  ）
	DW 00H,041H,022H,01CH,00H
; NO 10  ＊
	DW 014H,08H,03EH,08H,014H
; NO 11  ＋
	DW 08H,08H,03EH,08H,08H
; NO 12  、
	DW 00H,050H,030H,00H,00H
; NO 13  ?
	DW 08H,08H,08H,08H,08H
; NO 14  ．
	DW 00H,060H,060H,00H,00H
; NO 15  ／
	DW 020H,010H,08H,04H,02H
; NO 16  ０
	DW 03EH,051H,049H,045H,03EH
; NO 17  １
	DW 00H,042H,07FH,040H,00H
; NO 18  ２
	DW 042H,061H,051H,049H,046H
; NO 19  ３
	DW 021H,041H,045H,04BH,031H
; NO 20  ４
	DW 018H,014H,012H,07FH,010H
; NO 21  ５
	DW 027H,045H,045H,045H,039H
; NO 22  ６
	DW 03CH,04AH,049H,049H,030H
; NO 23  ７
	DW 01H,071H,09H,05H,03H
; NO 24  ８
	DW 036H,049H,049H,049H,036H
; NO 25  ９
	DW 06H,049H,049H,029H,01EH
; NO 26  ：
	DW 00H,036H,036H,00H,00H
; NO 27  ；
	DW 00H,056H,036H,00H,00H
; NO 28  ＜
	DW 08H,014H,022H,041H,00H
; NO 29  ＝
	DW 014H,014H,014H,014H,014H
; NO 30  ＞
	DW 00H,041H,022H,014H,08H
; NO 31  ？
	DW 02H,01H,051H,09H,06H
; NO 32  ＠
	DW 032H,049H,079H,041H,03EH
; NO 33  Ａ
	DW 07EH,011H,011H,011H,07EH
; NO 34  Ｂ
	DW 07FH,049H,049H,049H,036H
; NO 35  Ｃ
	DW 03EH,041H,041H,041H,022H
; NO 36  Ｄ
	DW 07FH,041H,041H,022H,01CH
; NO 37  Ｅ
	DW 07FH,049H,049H,049H,041H
; NO 38  Ｆ
	DW 07FH,09H,09H,09H,01H
; NO 39  Ｇ
	DW 03EH,041H,049H,049H,07AH
; NO 40  Ｈ
	DW 07FH,08H,08H,08H,07FH
; NO 41  Ｉ
	DW 00H,041H,07FH,041H,00H
; NO 42  Ｊ
	DW 020H,040H,041H,03FH,01H
; NO 43  Ｋ
	DW 07FH,08H,014H,022H,041H
; NO 44  Ｌ
	DW 07FH,040H,040H,040H,040H
; NO 45  Ｍ
	DW 07FH,02H,0CH,02H,07FH
; NO 46  Ｎ
	DW 07FH,04H,08H,010H,07FH
; NO 47  Ｏ
	DW 03EH,041H,041H,041H,03EH
; NO 48  Ｐ
	DW 07FH,09H,09H,09H,06H
; NO 49  Ｑ
	DW 03EH,041H,051H,021H,05EH
; NO 50  Ｒ
	DW 07FH,09H,019H,029H,046H
; NO 51  Ｓ
	DW 046H,049H,049H,049H,031H
; NO 52  Ｔ
	DW 01H,01H,07FH,01H,01H
; NO 53  Ｕ
	DW 03FH,040H,040H,040H,03FH
; NO 54  Ｖ
	DW 01FH,020H,040H,020H,01FH
; NO 55  Ｗ
	DW 03FH,040H,038H,040H,03FH
; NO 56  Ｘ
	DW 063H,014H,08H,014H,063H
; NO 57  Ｙ
	DW 07H,08H,070H,08H,07H
; NO 58  Ｚ
	DW 061H,051H,049H,045H,043H
; NO 59  ［
	DW 00H,07FH,041H,041H,00H
; NO 60  ￥
	DW 015H,016H,07CH,016H,015H
; NO 61  ］
	DW 00H,041H,041H,07FH,00H
; NO 62  ＾
	DW 04H,02H,01H,02H,04H
; NO 63  ＿
	DW 040H,040H,040H,040H,040H
; NO 64  `
	DW 00H,01H,02H,04H,00H
; NO 65  ａ
	DW 020H,054H,054H,054H,078H
; NO 66  ｂ
	DW 07FH,048H,044H,044H,038H
; NO 67  ｃ
	DW 038H,044H,044H,044H,020H
; NO 68  ｄ
	DW 038H,044H,044H,048H,07FH
; NO 69  ｅ
	DW 038H,054H,054H,054H,018H
; NO 70  ｆ
	DW 08H,07EH,09H,01H,02H
; NO 71  ｇ
	DW 0CH,052H,052H,052H,03EH
; NO 72  ｈ
	DW 07FH,08H,04H,04H,078H
; NO 73  ｉ
	DW 00H,044H,07DH,040H,00H
; NO 74  ｊ
	DW 020H,040H,044H,03DH,00H
; NO 75  ｋ
	DW 07FH,010H,028H,044H,00H
; NO 76  ｌ
	DW 00H,041H,07FH,040H,00H
; NO 77  ｍ
	DW 07CH,04H,018H,04H,078H
; NO 78  ｎ
	DW 07CH,08H,04H,04H,078H
; NO 79  ｏ
	DW 038H,044H,044H,044H,038H
; NO 80  ｐ
	DW 07CH,014H,014H,014H,08H
; NO 81  ｑ
	DW 08H,014H,014H,08H,07CH
; NO 82  ｒ
	DW 07CH,08H,04H,04H,08H
; NO 83  ｓ
	DW 048H,054H,054H,054H,020H
; NO 84  ｔ
	DW 04H,03FH,044H,040H,020H
; NO 85  ｕ
	DW 03CH,040H,040H,020H,07CH
; NO 86  ｖ
	DW 01CH,020H,040H,020H,01CH
; NO 87  ｗ
	DW 03CH,040H,020H,040H,03CH
; NO 88  ｘ
	DW 044H,028H,010H,028H,044H
; NO 89  ｙ
	DW 0CH,050H,050H,050H,03CH
; NO 90  ｚ
	DW 044H,064H,054H,04CH,044H
; NO 91  ｛
	DW 00H,08H,036H,041H,00H
; NO 92  ｜
	DW 00H,00H,07FH,00H,00H
; NO 93  }
	DW 00H,041H,036H,08H,00H
; NO 94  →
	DW 08H,08H,02AH,01CH,08H
; NO 95  ←
	DW 08H,01CH,02AH,08H,08H
; NO 96  ↑
	DW 04H,02H,07FH,02H,04H
; NO 97  ↓
	DW 010H,020H,07FH,020H,010H
; NO 98  ×
	DW 022H,014H,08H,014H,022H
; NO 99  ÷
	DW 08H,08H,02AH,08H,08H
; NO 100  ≦
	DW 040H,044H,04AH,051H,040H
; NO 101  ≧
	DW 040H,051H,04AH,044H,040H
; NO 102  ≪
	DW 08H,014H,02AH,014H,022H
; NO 103  ≫
	DW 022H,014H,02AH,014H,08H
; NO 104  ＼
	DW 02H,04H,08H,010H,020H
; NO 105  ≠
	DW 014H,074H,01CH,017H,014H
; NO 106  √
	DW 010H,020H,07FH,01H,01H
; NO 107  ?
	DW 060H,050H,048H,044H,07EH
; NO 108  Σ
	DW 041H,063H,055H,049H,041H
; NO 109  プサイ　Ψ
	DW 0FH,010H,07FH,010H,0FH
; NO 110  π
	DW 044H,03CH,04H,07CH,044H
; NO 111  Ω
	DW 04EH,071H,01H,071H,04EH
; NO 112  μ
	DW 040H,03FH,020H,020H,03FH
; NO 113  ファイ　φ
	DW 05CH,032H,02AH,026H,01DH
; NO 114  α
	DW 038H,044H,044H,038H,044H
; NO 115  ベータ　β
	DW 07FH,025H,025H,025H,01AH
; NO 116  ℃
	DW 01H,03EH,041H,041H,022H
; NO 117  アンテナ
	DW 03H,05H,079H,05H,03H
; NO 118  ハート?
	DW 01EH,03EH,078H,03EH,01EH
; NO 119  ダイヤ?
	DW 08H,01CH,03EH,01CH,08H
; NO 120  ▼
	DW 02H,0EH,03EH,0EH,02H
; NO 121  ▲
	DW 020H,038H,03EH,038H,020H
; NO 122  ■
	DW 07FH,07FH,07FH,07FH,07FH
; NO 123  □
	DW 07FH,041H,041H,041H,07FH
; NO 124  傘マーク
	DW 0CH,02H,07FH,02H,0CH
; NO 125  晴れマーク
	DW 049H,03EH,01CH,03EH,049H
; NO 126  雨マーク
	DW 057H,00H,057H,00H,057H
; NO 127  ￣
	DW 01H,01H,01H,01H,01H
; NO 128  SP
	DW 00H,00H,00H,00H,00H
; NO 129  。
	DW 070H,050H,070H,00H,00H
; NO 130  「
	DW 00H,00H,0FH,01H,01H
; NO 131  」
	DW 040H,040H,078H,00H,00H
; NO 132  、
	DW 010H,020H,040H,00H,00H
; NO 133  ・
	DW 00H,018H,018H,00H,00H
; NO 134  ヲ
	DW 0AH,0AH,04AH,02AH,01EH
; NO 135  ァ
	DW 04H,044H,034H,014H,0CH
; NO 136  ィ
	DW 020H,010H,078H,04H,00H
; NO 137  ゥ
	DW 018H,08H,04CH,048H,038H
; NO 138  ェ
	DW 050H,050H,070H,050H,050H
; NO 139  ォ
	DW 048H,028H,018H,07CH,08H
; NO 140  ャ
	DW 08H,07CH,08H,028H,018H
; NO 141  ュ
	DW 040H,048H,048H,078H,040H
; NO 142  ョ
	DW 054H,054H,054H,07CH,00H
; NO 143  ッ
	DW 018H,00H,058H,040H,038H
; NO 144  ー
	DW 08H,08H,08H,08H,08H
; NO 145  ア
	DW 01H,041H,03DH,09H,07H
; NO 146  イ
	DW 010H,08H,07CH,02H,01H
; NO 147  ウ
	DW 06H,02H,043H,022H,01EH
; NO 148  エ
	DW 041H,041H,07FH,041H,041H
; NO 149  オ
	DW 022H,012H,0AH,07FH,02H
; NO 150  カ
	DW 042H,03FH,02H,042H,03EH
; NO 151  キ
	DW 0AH,0AH,07FH,0AH,0AH
; NO 152  ク
	DW 08H,046H,042H,022H,01EH
; NO 153  ケ
	DW 04H,03H,042H,03EH,02H
; NO 154  コ
	DW 042H,042H,042H,042H,07EH
; NO 155  サ
	DW 02H,04FH,022H,01FH,02H
; NO 156  シ
	DW 04AH,04AH,040H,020H,01CH
; NO 157  ス
	DW 042H,022H,012H,02AH,046H
; NO 158  セ
	DW 02H,03FH,042H,04AH,046H
; NO 159  ソ
	DW 06H,048H,040H,020H,01EH
; NO 160  タ
	DW 08H,046H,04AH,032H,01EH
; NO 161  チ
	DW 0AH,04AH,03EH,09H,08H
; NO 162  ツ
	DW 0EH,00H,04EH,020H,01EH
; NO 163  テ
	DW 04H,045H,03DH,05H,04H
; NO 164  ト
	DW 00H,07FH,08H,010H,00H
; NO 165  ナ
	DW 044H,024H,01FH,04H,04H
; NO 166  ニ
	DW 040H,042H,042H,042H,040H
; NO 167  ヌ
	DW 042H,02AH,012H,02AH,06H
; NO 168  ネ
	DW 022H,012H,07BH,016H,022H
; NO 169  ノ
	DW 00H,040H,020H,01FH,00H
; NO 170  ハ
	DW 078H,00H,02H,04H,078H
; NO 171  ヒ
	DW 03FH,044H,044H,044H,044H
; NO 172  フ
	DW 02H,042H,042H,022H,01EH
; NO 173  へ
	DW 04H,02H,04H,08H,030H
; NO 174  ホ
	DW 032H,02H,07FH,02H,032H
; NO 175  マ
	DW 02H,012H,022H,052H,0EH
; NO 176  ミ
	DW 00H,02AH,02AH,02AH,040H
; NO 177  ム
	DW 038H,024H,022H,020H,070H
; NO 178  メ
	DW 040H,028H,010H,028H,06H
; NO 179  モ
	DW 0AH,03EH,04AH,04AH,04AH
; NO 180  ヤ
	DW 04H,07FH,04H,014H,0CH
; NO 181  ユ
	DW 040H,042H,042H,07EH,040H
; NO 182  ヨ
	DW 04AH,04AH,04AH,04AH,07EH
; NO 183  ラ
	DW 04H,05H,045H,025H,01CH
; NO 184  リ
	DW 0FH,040H,020H,01FH,00H
; NO 185  ル
	DW 07CH,00H,07EH,020H,018H
; NO 186  レ
	DW 07EH,040H,020H,010H,08H
; NO 187  ロ
	DW 07EH,042H,042H,042H,07EH
; NO 188  ワ
	DW 06H,02H,042H,022H,01EH
; NO 189  ン
	DW 042H,042H,040H,020H,018H
; NO 190  濁点　゛
	DW 02H,04H,01H,02H,00H
; NO 191  半濁点　゜
	DW 07H,05H,07H,00H,00H


;
;	１６ｘ８ドットキャラクタパターン
;

GPAT_C16X8
; NO 0  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 1  ！
	DW 00H,00H,00H,0FFH,00H,00H,00H,00H
	DW 00H,00H,00H,067H,04H,00H,00H,00H
; NO 2  ”
	DW 00H,08H,07H,00H,08H,07H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 3  ＃
	DW 08H,0FEH,08H,08H,08H,0FEH,08H,00H
	DW 010H,07FH,010H,010H,010H,07FH,010H,00H
; NO 4  ＄
	DW 038H,044H,082H,0FFH,082H,02H,04H,00H
	DW 010H,020H,020H,07FH,020H,011H,0EH,00H
; NO 5  ％
	DW 0EH,0AH,0EH,080H,060H,018H,06H,00H
	DW 060H,018H,06H,01H,070H,050H,070H,00H
; NO 6  ＆
	DW 01CH,022H,0C1H,041H,022H,01CH,00H,00H
	DW 01EH,021H,040H,041H,026H,01CH,012H,00H
; NO 7  ’
	DW 010H,0BH,07H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 8  （
	DW 00H,00H,0F0H,08H,04H,02H,01H,00H
	DW 00H,00H,07H,08H,014H,020H,040H,00H
; NO 9  ）
	DW 00H,01H,02H,04H,08H,0F0H,00H,00H
	DW 00H,040H,020H,010H,08H,07H,00H,00H
; NO 10  ＊
	DW 090H,0A0H,0C0H,0F8H,0C0H,0A0H,090H,00H
	DW 04H,02H,01H,0FH,01H,02H,04H,00H
; NO 11  ＋
	DW 080H,080H,080H,0F8H,080H,080H,080H,00H
	DW 00H,00H,00H,0FH,00H,00H,00H,00H
; NO 12  ，
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 040H,02CH,01CH,00H,00H,00H,00H,00H
; NO 13  ?
	DW 080H,080H,080H,080H,080H,080H,080H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 14  ．
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,060H,060H,00H,00H,00H,00H,00H
; NO 15  ／
	DW 00H,00H,00H,080H,060H,018H,06H,00H
	DW 060H,018H,06H,01H,00H,00H,00H,00H
; NO 16  ０
	DW 0FEH,01H,01H,0C1H,031H,0DH,0FEH,00H
	DW 03FH,04CH,043H,040H,040H,040H,03FH,00H
; NO 17  １
	DW 08H,04H,02H,0FFH,00H,00H,00H,00H
	DW 040H,040H,040H,07FH,040H,040H,040H,00H
; NO 18  ２
	DW 0CH,02H,01H,01H,01H,082H,07CH,00H
	DW 070H,048H,044H,042H,041H,040H,040H,00H
; NO 19  ３
	DW 00H,01H,021H,051H,089H,05H,03H,00H
	DW 020H,040H,040H,040H,040H,041H,03EH,00H
; NO 20  ４
	DW 00H,080H,060H,018H,06H,0FFH,00H,00H
	DW 06H,05H,04H,04H,04H,07FH,04H,00H
; NO 21  ５
	DW 03FH,021H,021H,021H,021H,041H,081H,00H
	DW 020H,040H,040H,040H,040H,040H,03FH,00H
; NO 22  ６
	DW 0FCH,042H,041H,041H,041H,041H,082H,00H
	DW 03FH,040H,040H,040H,040H,040H,03FH,00H
; NO 23  ７
	DW 01H,01H,081H,041H,021H,011H,0FH,00H
	DW 00H,00H,07FH,00H,00H,00H,00H,00H
; NO 24  ８
	DW 07EH,081H,081H,081H,081H,081H,07EH,00H
	DW 03FH,040H,040H,040H,040H,040H,03FH,00H
; NO 25  ９
	DW 03CH,042H,081H,081H,081H,042H,0FCH,00H
	DW 00H,00H,040H,030H,018H,06H,01H,00H
; NO 26  ：
	DW 00H,018H,018H,00H,00H,00H,00H,00H
	DW 00H,018H,018H,00H,00H,00H,00H,00H
; NO 27  ；
	DW 00H,0CH,0CH,00H,00H,00H,00H,00H
	DW 00H,058H,038H,00H,00H,00H,00H,00H
; NO 28  ＜
	DW 080H,040H,020H,010H,08H,04H,02H,00H
	DW 00H,01H,02H,04H,08H,010H,020H,00H
; NO 29  ＝
	DW 040H,040H,040H,040H,040H,040H,040H,00H
	DW 02H,02H,02H,02H,02H,02H,02H,00H
; NO 30  ＞
	DW 02H,04H,08H,010H,020H,040H,080H,00H
	DW 020H,010H,08H,04H,02H,01H,00H,00H
; NO 31  ？
	DW 04H,02H,01H,01H,01H,082H,07CH,00H
	DW 00H,00H,00H,05EH,05H,00H,00H,00H
; NO 32  ＠
	DW 04H,0C2H,021H,021H,0C1H,02H,0FCH,00H
	DW 00H,0FH,010H,010H,01FH,020H,01FH,00H
; NO 33  Ａ
	DW 0FCH,082H,081H,081H,081H,082H,0FCH,00H
	DW 07FH,00H,00H,00H,00H,00H,07FH,00H
; NO 34  Ｂ
	DW 01H,0FFH,081H,081H,081H,042H,03CH,00H
	DW 040H,07FH,040H,040H,040H,021H,01EH,00H
; NO 35  Ｃ
	DW 0FCH,02H,01H,01H,01H,02H,04H,00H
	DW 01FH,020H,040H,040H,040H,020H,010H,00H
; NO 36  Ｄ
	DW 01H,0FFH,01H,01H,02H,04H,0F8H,00H
	DW 040H,07FH,040H,040H,020H,010H,0FH,00H
; NO 37  Ｅ
	DW 0FFH,081H,081H,081H,081H,081H,01H,00H
	DW 07FH,040H,040H,040H,040H,040H,040H,00H
; NO 38  Ｆ
	DW 0FFH,081H,081H,081H,081H,081H,01H,00H
	DW 07FH,00H,00H,00H,00H,00H,00H,00H
; NO 39  Ｇ
	DW 0FCH,02H,01H,01H,01H,02H,04H,00H
	DW 01FH,020H,040H,042H,042H,022H,07EH,00H
; NO 40  Ｈ
	DW 0FFH,080H,080H,080H,080H,080H,0FFH,00H
	DW 07FH,00H,00H,00H,00H,00H,07FH,00H
; NO 41  Ｉ
	DW 00H,00H,01H,0FFH,01H,00H,00H,00H
	DW 00H,00H,040H,07FH,040H,00H,00H,00H
; NO 42  Ｊ
	DW 00H,00H,00H,00H,01H,0FFH,01H,00H
	DW 010H,020H,040H,040H,020H,01FH,00H,00H
; NO 43  Ｋ
	DW 0FFH,080H,0C0H,030H,08H,06H,01H,00H
	DW 07FH,00H,01H,06H,0CH,030H,040H,00H
; NO 44  Ｌ
	DW 0FFH,00H,00H,00H,00H,00H,00H,00H
	DW 07FH,040H,040H,040H,040H,040H,040H,00H
; NO 45  Ｍ
	DW 0FFH,06H,018H,060H,018H,06H,0FFH,00H
	DW 07FH,00H,00H,00H,00H,00H,07FH,00H
; NO 46  Ｎ
	DW 0FFH,06H,038H,0C0H,00H,00H,0FFH,00H
	DW 07FH,00H,00H,01H,0EH,030H,07FH,00H
; NO 47  Ｏ
	DW 0FCH,02H,01H,01H,01H,02H,0FCH,00H
	DW 01FH,020H,040H,040H,040H,020H,01FH,00H
; NO 48  Ｐ
	DW 0FFH,081H,081H,081H,081H,042H,03CH,00H
	DW 07FH,00H,00H,00H,00H,00H,00H,00H
; NO 49  Ｑ
	DW 0FCH,02H,01H,01H,01H,02H,0FCH,00H
	DW 01FH,020H,040H,044H,028H,030H,04FH,00H
; NO 50  Ｒ
	DW 0FFH,081H,081H,081H,081H,042H,03CH,00H
	DW 07FH,01H,02H,04H,0CH,010H,020H,00H
; NO 51  Ｓ
	DW 03CH,042H,081H,081H,081H,02H,04H,00H
	DW 010H,020H,040H,040H,040H,021H,01EH,00H
; NO 52  Ｔ
	DW 01H,01H,01H,0FFH,01H,01H,01H,00H
	DW 00H,00H,00H,07FH,00H,00H,00H,00H
; NO 53  Ｕ
	DW 0FFH,00H,00H,00H,00H,00H,0FFH,00H
	DW 01FH,020H,040H,040H,040H,020H,01FH,00H
; NO 54  Ｖ
	DW 0FFH,00H,00H,00H,00H,00H,0FFH,00H
	DW 01H,06H,018H,060H,018H,06H,01H,00H
; NO 55  Ｗ
	DW 0FFH,00H,00H,0C0H,00H,00H,0FFH,00H
	DW 07FH,070H,0EH,01H,0EH,070H,07FH,00H
; NO 56  Ｘ
	DW 03H,0CH,030H,0C0H,030H,0CH,03H,00H
	DW 060H,018H,06H,01H,06H,018H,060H,00H
; NO 57  Ｙ
	DW 03H,0CH,030H,0C0H,030H,0CH,03H,00H
	DW 00H,00H,00H,07FH,04H,00H,00H,00H
; NO 58  Ｚ
	DW 01H,01H,041H,081H,061H,019H,07H,00H
	DW 070H,04CH,043H,040H,041H,040H,040H,00H
; NO 59  ［
	DW 00H,00H,0FEH,02H,02H,02H,00H,00H
	DW 00H,00H,07FH,040H,040H,040H,00H,00H
; NO 60  ￥
	DW 083H,08CH,0B0H,0C0H,0B0H,08CH,083H,00H
	DW 04H,04H,04H,07FH,04H,04H,04H,00H
; NO 61  ］
	DW 00H,00H,02H,02H,02H,0FEH,00H,00H
	DW 00H,00H,040H,040H,040H,07FH,00H,00H
; NO 62  ＾
	DW 08H,04H,02H,01H,02H,04H,08H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 63  ＿
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 040H,040H,040H,040H,040H,040H,040H,00H
; NO 64  `
	DW 01H,02H,04H,08H,010H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 65  ａ
	DW 080H,040H,020H,020H,020H,040H,080H,00H
	DW 018H,024H,042H,042H,042H,024H,07FH,00H
; NO 66  ｂ
	DW 0FCH,00H,00H,00H,00H,00H,00H,00H
	DW 07FH,022H,041H,041H,041H,022H,01CH,00H
; NO 67  ｃ
	DW 00H,080H,040H,040H,040H,080H,00H,00H
	DW 01FH,020H,040H,040H,040H,020H,011H,00H
; NO 68  ｄ
	DW 00H,00H,00H,00H,00H,00H,0FCH,00H
	DW 01CH,022H,041H,041H,041H,022H,07FH,00H
; NO 69  ｅ
	DW 00H,080H,040H,040H,040H,080H,00H,00H
	DW 01FH,022H,042H,042H,042H,022H,013H,00H
; NO 70  ｆ
	DW 080H,080H,0FCH,082H,081H,01H,02H,00H
	DW 00H,00H,07FH,00H,00H,00H,00H,00H
; NO 71  ｇ
	DW 080H,040H,020H,020H,020H,040H,0E0H,00H
	DW 011H,022H,044H,044H,044H,022H,01FH,00H
; NO 72  ｈ
	DW 0FCH,00H,00H,080H,080H,00H,00H,00H
	DW 07FH,02H,01H,00H,00H,01H,07EH,00H
; NO 73  ｉ
	DW 00H,00H,020H,0E4H,00H,00H,00H,00H
	DW 00H,00H,040H,07FH,040H,00H,00H,00H
; NO 74  ｊ
	DW 00H,00H,00H,00H,00H,0E4H,00H,00H
	DW 010H,020H,040H,040H,020H,01FH,00H,00H
; NO 75  ｋ
	DW 0FFH,00H,00H,080H,040H,020H,010H,00H
	DW 07FH,02H,05H,08H,04H,020H,040H,00H
; NO 76  ｌ
	DW 00H,01H,01H,0FFH,00H,00H,00H,00H
	DW 00H,00H,00H,07FH,00H,00H,00H,00H
; NO 77  ｍ
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 07FH,01H,01H,07EH,01H,01H,07EH,00H
; NO 78  ｎ
	DW 080H,00H,00H,080H,080H,00H,00H,00H
	DW 07FH,02H,01H,00H,00H,01H,07EH,00H
; NO 79  ｏ
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 01CH,022H,041H,041H,041H,022H,01CH,00H
; NO 80  ｐ
	DW 0E0H,040H,020H,020H,020H,040H,080H,00H
	DW 07FH,04H,08H,08H,08H,04H,03H,00H
; NO 81  ｑ
	DW 080H,040H,020H,020H,020H,040H,0E0H,00H
	DW 03H,04H,08H,08H,08H,04H,07FH,00H
; NO 82  ｒ
	DW 0E0H,080H,040H,020H,020H,020H,040H,00H
	DW 07FH,00H,00H,00H,00H,00H,00H,00H
; NO 83  ｓ
	DW 080H,040H,040H,040H,040H,040H,080H,00H
	DW 023H,044H,044H,044H,044H,044H,038H,00H
; NO 84  ｔ
	DW 020H,020H,0F8H,020H,020H,00H,00H,00H
	DW 00H,00H,03FH,040H,040H,020H,010H,00H
; NO 85  ｕ
	DW 0C0H,00H,00H,00H,00H,00H,0C0H,00H
	DW 01FH,020H,040H,040H,040H,020H,07FH,00H
; NO 86  ｖ
	DW 0C0H,00H,00H,00H,00H,00H,0C0H,00H
	DW 0FH,010H,020H,040H,020H,010H,0FH,00H
; NO 87  ｗ
	DW 080H,00H,00H,00H,00H,00H,080H,00H
	DW 01FH,020H,040H,03CH,020H,040H,03FH,00H
; NO 88  x
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 041H,022H,014H,08H,014H,022H,041H,00H
; NO 89  ｙ
	DW 0E0H,00H,00H,00H,00H,00H,0E0H,00H
	DW 011H,022H,044H,044H,044H,022H,01FH,00H
; NO 90  ｚ
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 041H,061H,051H,049H,045H,043H,041H,00H
; NO 91  ｛
	DW 00H,080H,07CH,02H,01H,01H,00H,00H
	DW 00H,01H,03EH,040H,080H,080H,00H,00H
; NO 92  ｜
	DW 00H,00H,00H,0FFH,00H,00H,00H,00H
	DW 00H,00H,00H,07FH,00H,00H,00H,00H
; NO 93  ｝
	DW 00H,00H,01H,01H,02H,07CH,080H,00H
	DW 00H,00H,080H,080H,040H,03EH,01H,00H
; NO 94  ￣
	DW 01H,01H,01H,01H,01H,01H,01H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 95  π
	DW 040H,040H,0C0H,040H,040H,0C0H,040H,00H
	DW 040H,020H,01FH,00H,00H,07FH,040H,00H
; NO 96  →
	DW 080H,080H,080H,090H,0A0H,0C0H,080H,00H
	DW 00H,00H,00H,04H,02H,01H,00H,00H
; NO 97  ←
	DW 080H,0C0H,0A0H,090H,080H,080H,080H,00H
	DW 00H,01H,02H,04H,00H,00H,00H,00H
; NO 98  ↑
	DW 08H,04H,02H,0FFH,02H,04H,08H,00H
	DW 00H,00H,00H,07FH,00H,00H,00H,00H
; NO 99  ↓
	DW 00H,00H,00H,0FFH,00H,00H,00H,00H
	DW 08H,010H,020H,07FH,020H,010H,08H,00H
; NO 100  Ω
	DW 0C0H,020H,010H,010H,010H,020H,0C0H,00H
	DW 043H,044H,038H,00H,038H,044H,043H,00H
; NO 101  ×
	DW 020H,040H,080H,00H,080H,040H,020H,00H
	DW 08H,04H,02H,01H,02H,04H,08H,00H
; NO 102  ÷
	DW 080H,080H,080H,090H,080H,080H,080H,00H
	DW 00H,00H,00H,04H,00H,00H,00H,00H
; NO 103  ＼
	DW 06H,018H,060H,080H,00H,00H,00H,00H
	DW 00H,00H,00H,01H,06H,018H,060H,00H
; NO 104  ℃
	DW 0EH,08AH,04EH,020H,020H,020H,040H,00H
	DW 00H,01FH,020H,040H,040H,040H,020H,00H
; NO 105  アンテナ
	DW 0CH,014H,024H,0C4H,024H,014H,0CH,00H
	DW 00H,00H,00H,07FH,00H,00H,00H,00H
; NO 106  ハート
	DW 070H,0F8H,0F0H,0E0H,0F0H,0F8H,070H,00H
	DW 00H,01H,07H,0FH,07H,01H,00H,00H
; NO 107  ダイヤ
	DW 080H,0C0H,0E0H,0F0H,0E0H,0C0H,080H,00H
	DW 00H,01H,03H,07H,03H,01H,00H,00H
; NO 108  雪だるま
	DW 09CH,022H,0C9H,0C1H,0C9H,022H,09CH,00H
	DW 01EH,021H,040H,040H,040H,021H,01EH,00H
; NO 109  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 110  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 111  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 112  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 113  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 114  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 115  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 116  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 117  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 118  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 119  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 120  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 121  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 122  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 123  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 124  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 125  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 126  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 127  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 128  SP
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 129  。
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,078H,048H,078H,00H,00H,00H,00H
; NO 130  「
	DW 00H,00H,00H,00H,0FFH,01H,01H,01H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 131  」
	DW 00H,00H,00H,080H,00H,00H,00H,00H
	DW 040H,040H,040H,07FH,00H,00H,00H,00H
; NO 132  、
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 08H,010H,020H,040H,00H,00H,00H,00H
; NO 133  ・
	DW 00H,00H,0C0H,0C0H,0C0H,00H,00H,00H
	DW 00H,00H,03H,03H,03H,00H,00H,00H
; NO 134  ヲ
	DW 024H,024H,024H,024H,024H,024H,0FCH,00H
	DW 00H,00H,040H,020H,018H,06H,01H,00H
; NO 135  ァ
	DW 00H,040H,040H,040H,040H,040H,0C0H,00H
	DW 00H,040H,020H,01FH,04H,02H,01H,00H
; NO 136  ィ
	DW 00H,00H,00H,00H,00H,080H,040H,00H
	DW 010H,08H,04H,07EH,01H,00H,00H,00H
; NO 137  ゥ
	DW 080H,080H,080H,0C0H,080H,080H,080H,00H
	DW 01H,00H,040H,020H,010H,08H,07H,00H
; NO 138  ェ
	DW 040H,040H,040H,0C0H,040H,040H,040H,00H
	DW 040H,040H,040H,07FH,040H,040H,040H,00H
; NO 139  ォ
	DW 080H,080H,080H,080H,0C0H,080H,080H,00H
	DW 040H,030H,0CH,03H,07FH,00H,00H,00H
; NO 140  ャ
	DW 080H,080H,0C0H,080H,080H,080H,080H,00H
	DW 00H,00H,07FH,00H,08H,04H,03H,00H
; NO 141  ュ
	DW 00H,080H,080H,080H,080H,00H,00H,00H
	DW 040H,040H,040H,040H,07FH,040H,040H,00H
; NO 142  ョ
	DW 080H,080H,080H,080H,080H,080H,080H,00H
	DW 044H,044H,044H,044H,044H,044H,07FH,00H
; NO 143  ッ
	DW 080H,00H,00H,080H,00H,00H,080H,00H
	DW 03H,00H,040H,023H,010H,08H,07H,00H
; NO 144  ー
	DW 080H,080H,080H,080H,080H,080H,080H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 145  ア
	DW 04H,04H,04H,0E4H,04H,084H,07CH,00H
	DW 040H,020H,018H,07H,00H,00H,00H,00H
; NO 146  イ
	DW 080H,040H,020H,0F0H,08H,04H,02H,00H
	DW 00H,00H,00H,07FH,00H,00H,00H,00H
; NO 147  ウ
	DW 01CH,04H,04H,07H,04H,04H,0FCH,00H
	DW 00H,00H,040H,020H,018H,06H,01H,00H
; NO 148  エ
	DW 04H,04H,04H,0FCH,04H,04H,04H,00H
	DW 040H,040H,040H,07FH,040H,040H,040H,00H
; NO 149  オ
	DW 04H,04H,0C4H,034H,0FFH,04H,04H,00H
	DW 0CH,03H,00H,00H,07FH,00H,00H,00H
; NO 150  カ
	DW 04H,04H,0FFH,04H,04H,04H,0FCH,00H
	DW 04H,02H,041H,020H,010H,08H,07H,00H
; NO 151  キ
	DW 084H,084H,084H,0FFH,084H,084H,084H,00H
	DW 00H,00H,00H,07FH,00H,00H,00H,00H
; NO 152  ク
	DW 040H,030H,0CH,04H,04H,04H,0FCH,00H
	DW 00H,00H,040H,020H,018H,06H,01H,00H
; NO 153  ケ
	DW 010H,0FH,04H,04H,0FCH,04H,04H,00H
	DW 00H,040H,020H,018H,07H,00H,00H,00H
; NO 154  コ
	DW 04H,04H,04H,04H,04H,04H,0FCH,00H
	DW 040H,040H,040H,040H,040H,040H,07FH,00H
; NO 155  サ
	DW 04H,03FH,04H,04H,04H,0FFH,04H,00H
	DW 00H,040H,020H,018H,06H,01H,00H,00H
; NO 156  シ
	DW 084H,084H,084H,00H,00H,00H,0F0H,00H
	DW 00H,040H,040H,020H,018H,06H,01H,00H
; NO 157  ス
	DW 04H,04H,04H,04H,04H,084H,07CH,00H
	DW 060H,018H,04H,02H,05H,018H,060H,00H
; NO 158  セ
	DW 04H,0FFH,04H,04H,044H,024H,01CH,00H
	DW 00H,03FH,040H,040H,040H,040H,040H,00H
; NO 159  ソ
	DW 01CH,020H,040H,00H,00H,00H,0FCH,00H
	DW 00H,040H,040H,020H,018H,06H,01H,00H
; NO 160  タ
	DW 040H,030H,02CH,044H,084H,04H,0FCH,00H
	DW 00H,00H,040H,020H,018H,07H,01H,00H
; NO 161  チ
	DW 084H,084H,084H,0FCH,084H,084H,082H,00H
	DW 00H,040H,020H,01FH,00H,00H,00H,00H
; NO 162  ツ
	DW 03CH,00H,00H,03CH,00H,00H,0FCH,00H
	DW 00H,00H,040H,020H,018H,06H,01H,00H
; NO 163  テ
	DW 020H,024H,024H,0E4H,024H,024H,020H,00H
	DW 00H,040H,020H,01FH,00H,00H,00H,00H
; NO 164  ト
	DW 00H,00H,0F8H,080H,00H,00H,00H,00H
	DW 00H,00H,07FH,00H,01H,02H,04H,00H
; NO 165  ナ
	DW 04H,04H,04H,0FFH,04H,04H,04H,00H
	DW 040H,020H,018H,07H,00H,00H,00H,00H
; NO 166  ニ
	DW 00H,04H,04H,04H,04H,04H,00H,00H
	DW 040H,040H,040H,040H,040H,040H,040H,00H
; NO 167  ヌ
	DW 04H,024H,044H,084H,04H,0C4H,03CH,00H
	DW 040H,020H,010H,0CH,07H,04H,08H,00H
; NO 168  ネ
	DW 04H,04H,084H,0C7H,0A4H,014H,0CH,00H
	DW 02H,01H,00H,07FH,00H,01H,02H,00H
; NO 169  ノ
	DW 00H,00H,00H,00H,00H,0FCH,00H,00H
	DW 040H,020H,010H,0CH,03H,00H,00H,00H
; NO 170  ハ
	DW 0C0H,00H,04H,08H,010H,020H,0C0H,00H
	DW 07FH,00H,00H,00H,00H,00H,07FH,00H
; NO 171  ヒ
	DW 0FCH,040H,040H,040H,040H,040H,040H,00H
	DW 03FH,040H,040H,040H,040H,040H,040H,00H
; NO 172  フ
	DW 04H,04H,04H,04H,04H,04H,0FCH,00H
	DW 00H,00H,040H,020H,018H,06H,01H,00H
; NO 173  へ
	DW 040H,020H,010H,020H,0C0H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,03H,0CH,00H
; NO 174  ホ
	DW 04H,084H,04H,0FFH,04H,084H,04H,00H
	DW 07H,00H,00H,07FH,00H,00H,07H,00H
; NO 175  マ
	DW 04H,04H,04H,04H,04H,04H,0FCH,00H
	DW 00H,02H,04H,08H,014H,022H,01H,00H
; NO 176  ミ
	DW 00H,00H,084H,084H,084H,08H,00H,00H
	DW 00H,00H,010H,010H,010H,021H,040H,00H
; NO 177  ム
	DW 00H,00H,0C0H,030H,0CH,00H,00H,00H
	DW 03CH,023H,020H,020H,020H,020H,078H,00H
; NO 178  メ
	DW 00H,020H,040H,080H,00H,0E0H,01EH,00H
	DW 040H,020H,018H,06H,03H,04H,08H,00H
; NO 179  モ
	DW 084H,084H,0FCH,084H,084H,084H,084H,00H
	DW 00H,00H,03FH,040H,040H,040H,040H,00H
; NO 180  ヤ
	DW 04H,04H,0FFH,04H,084H,044H,03CH,00H
	DW 00H,00H,07FH,00H,00H,00H,00H,00H
; NO 181  ユ
	DW 00H,04H,04H,04H,04H,0FCH,00H,00H
	DW 040H,040H,040H,040H,044H,07FH,040H,00H
; NO 182  ヨ
	DW 084H,084H,084H,084H,084H,084H,0FCH,00H
	DW 040H,040H,040H,040H,040H,040H,07FH,00H
; NO 183  ラ
	DW 020H,024H,024H,024H,024H,024H,0E0H,00H
	DW 00H,00H,040H,020H,018H,06H,01H,00H
; NO 184  リ
	DW 03CH,00H,00H,00H,00H,0FCH,00H,00H
	DW 00H,040H,020H,018H,06H,01H,00H,00H
; NO 185  ル
	DW 0E0H,00H,00H,0F8H,00H,00H,00H,00H
	DW 07FH,00H,00H,07FH,040H,020H,010H,00H
; NO 186  レ
	DW 0F8H,00H,00H,00H,00H,00H,00H,00H
	DW 07FH,040H,020H,010H,08H,04H,02H,00H
; NO 187  ロ
	DW 0FCH,04H,04H,04H,04H,04H,0FCH,00H
	DW 07FH,040H,040H,040H,040H,040H,07FH,00H
; NO 188  ワ
	DW 00H,03CH,04H,04H,04H,04H,0FCH,00H
	DW 00H,00H,040H,020H,018H,06H,01H,00H
; NO 189  ン
	DW 04H,04H,04H,00H,00H,00H,00H,00H
	DW 040H,040H,040H,020H,010H,08H,06H,00H
; NO 190  濁点　゛
	DW 04H,08H,011H,02H,04H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 191  半濁点　゜
	DW 06H,09H,09H,06H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
;

GPAT_C16X16
; NO 0  ０
	DW 0FEH,0FEH,01H,01H,01H,01H,01H,081H
	DW 081H,061H,061H,019H,019H,0FEH,0FEH,00H
	DW 03FH,03FH,048H,04CH,046H,046H,041H,041H
	DW 041H,040H,040H,040H,040H,03FH,03FH,00H
; NO 1  １
	DW 00H,00H,00H,04H,04H,02H,02H,0FFH
	DW 0FFH,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,040H,040H,040H,040H,07FH
	DW 07FH,040H,040H,040H,040H,00H,00H,00H
; NO 2  ２
	DW 0CH,0CH,02H,02H,01H,01H,01H,01H
	DW 01H,081H,081H,042H,042H,03CH,03CH,00H
	DW 070H,070H,048H,044H,044H,042H,042H,041H
	DW 041H,040H,040H,040H,040H,040H,040H,00H
; NO 3  ３
	DW 00H,00H,041H,061H,061H,051H,051H,049H
	DW 049H,045H,045H,083H,083H,00H,00H,00H
	DW 010H,010H,020H,020H,040H,040H,040H,040H
	DW 040H,040H,040H,020H,020H,01FH,01FH,00H
; NO 4  ４
	DW 00H,00H,00H,00H,0C0H,0C0H,030H,030H
	DW 0CH,0CH,0FFH,0FFH,00H,00H,00H,00H
	DW 01CH,01CH,013H,013H,010H,010H,010H,010H
	DW 010H,010H,07FH,07FH,010H,010H,010H,00H
; NO 5  ５
	DW 07FH,07FH,041H,041H,021H,021H,021H,021H
	DW 021H,021H,041H,041H,01H,081H,081H,00H
	DW 010H,010H,020H,020H,040H,040H,040H,040H
	DW 040H,040H,040H,020H,020H,01FH,01FH,00H
; NO 6  ６
	DW 0FCH,0FCH,082H,082H,041H,041H,041H,041H
	DW 041H,041H,041H,082H,082H,04H,04H,00H
	DW 01FH,01FH,020H,020H,040H,040H,040H,040H
	DW 040H,040H,040H,020H,020H,01FH,01FH,00H
; NO 7  ７
	DW 03H,03H,01H,01H,01H,01H,0C1H,0C1H
	DW 041H,021H,021H,011H,011H,0FH,0FH,00H
	DW 00H,00H,00H,00H,00H,00H,07FH,07FH
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 8  ８
	DW 03CH,03CH,042H,042H,081H,081H,081H,081H
	DW 081H,081H,081H,042H,042H,03CH,03CH,00H
	DW 01EH,01EH,01H,021H,040H,040H,040H,040H
	DW 040H,040H,040H,021H,021H,01EH,01EH,00H
; NO 9  ９
	DW 03CH,03CH,042H,042H,081H,081H,081H,081H
	DW 081H,081H,081H,042H,042H,0FCH,0FCH,00H
	DW 010H,010H,020H,020H,040H,040H,040H,040H
	DW 040H,040H,040H,020H,020H,01FH,01FH,00H
; NO 10  ：
	DW 00H,00H,00H,00H,00H,00H,038H,038H
	DW 038H,038H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,01CH,01CH
	DW 01CH,01CH,00H,00H,00H,00H,00H,00H
; NO 11  ＋
	DW 00H,00H,080H,080H,080H,080H,080H,0FCH
	DW 0FCH,080H,080H,080H,080H,080H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,03FH
	DW 03FH,00H,00H,00H,00H,00H,00H,00H
; NO 12  ?
	DW 00H,00H,080H,080H,080H,080H,080H,080H
	DW 080H,080H,080H,080H,080H,080H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 13  ％
	DW 06H,06H,09H,09H,06H,06H,00H,080H
	DW 080H,060H,020H,018H,08H,04H,04H,00H
	DW 010H,010H,08H,08H,06H,02H,01H,00H
	DW 00H,030H,030H,048H,048H,030H,030H,00H
; NO 14  ℃
	DW 0FH,09H,09H,0FH,00H,0F8H,0FCH,02H
	DW 01H,01H,01H,01H,01H,02H,04H,00H
	DW 00H,00H,00H,00H,00H,0FH,01FH,020H
	DW 040H,040H,040H,040H,040H,020H,010H,00H
; NO 15  ＵＭＡ
	DW 00H,0F0H,010H,0A0H,040H,040H,020H,020H
	DW 020H,020H,040H,040H,020H,090H,060H,00H
	DW 00H,01EH,021H,040H,04BH,053H,050H,054H
	DW 054H,050H,04BH,043H,020H,01FH,00H,00H
; NO 16  ＳＰ
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 17  Ａ
	DW 0F8H,0F8H,04H,04H,02H,02H,01H,01H
	DW 01H,02H,02H,04H,04H,0F8H,0F8H,00H
	DW 07FH,07FH,01H,01H,01H,01H,01H,01H
	DW 01H,01H,01H,01H,01H,07FH,07FH,00H
; NO 18  Ｂ
	DW 01H,01H,0FFH,0FFH,081H,081H,081H,081H
	DW 081H,081H,081H,042H,042H,03CH,03CH,00H
	DW 040H,040H,07FH,07FH,040H,040H,040H,040H
	DW 040H,040H,040H,041H,021H,03EH,01EH,00H
; NO 19  Ｃ
	DW 0F8H,0F8H,04H,04H,02H,02H,01H,01H
	DW 01H,01H,01H,02H,02H,04H,04H,00H
	DW 0FH,0FH,010H,010H,020H,020H,040H,040H
	DW 040H,040H,040H,020H,020H,010H,010H,00H
; NO 20  Ｄ
	DW 01H,01H,0FFH,0FFH,01H,01H,01H,01H
	DW 01H,01H,01H,02H,02H,0FCH,0FCH,00H
	DW 040H,040H,07FH,07FH,040H,040H,040H,040H
	DW 040H,040H,040H,020H,020H,01FH,01FH,00H
; NO 21  Ｅ
	DW 0FFH,0FFH,081H,081H,081H,081H,081H,081H
	DW 081H,081H,081H,081H,01H,01H,01H,00H
	DW 07FH,07FH,040H,040H,040H,040H,040H,040H
	DW 040H,040H,040H,040H,040H,040H,040H,00H
; NO 22  Ｆ
	DW 0FFH,0FFH,081H,081H,081H,081H,081H,081H
	DW 081H,081H,081H,081H,01H,01H,01H,00H
	DW 07FH,07FH,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 23  Ｇ
	DW 0F8H,0F8H,04H,04H,02H,02H,01H,01H
	DW 01H,01H,01H,02H,02H,04H,04H,00H
	DW 0FH,0FH,010H,010H,020H,020H,040H,040H
	DW 040H,041H,041H,021H,021H,07FH,07FH,00H
; NO 24  Ｈ
	DW 0FFH,0FFH,080H,080H,080H,080H,080H,080H
	DW 080H,080H,080H,080H,080H,0FFH,0FFH,00H
	DW 07FH,07FH,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,07FH,07FH,00H
; NO 25  Ｉ
	DW 00H,00H,00H,00H,00H,01H,01H,0FFH
	DW 0FFH,01H,01H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,040H,040H,07FH
	DW 07FH,040H,040H,00H,00H,00H,00H,00H
; NO 26  Ｊ
	DW 00H,00H,00H,00H,00H,00H,00H,01H
	DW 01H,0FFH,0FFH,01H,01H,00H,00H,00H
	DW 030H,030H,040H,040H,040H,040H,040H,040H
	DW 040H,03FH,03FH,00H,00H,00H,00H,00H
; NO 27  Ｋ
	DW 0FFH,0FFH,080H,080H,080H,080H,080H,040H
	DW 040H,030H,030H,0CH,0CH,03H,03H,00H
	DW 07FH,07FH,00H,00H,00H,00H,00H,01H
	DW 01H,06H,06H,018H,018H,060H,060H,00H
; NO 28  Ｌ
	DW 0FFH,0FFH,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
	DW 07FH,07FH,040H,040H,040H,040H,040H,040H
	DW 040H,040H,040H,040H,040H,040H,040H,00H
; NO 29  Ｍ
	DW 0FFH,0FFH,06H,06H,018H,018H,060H,0C0H
	DW 060H,018H,018H,06H,06H,0FFH,0FFH,00H
	DW 07FH,07FH,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,07FH,07FH,00H
; NO 30  Ｎ
	DW 0FFH,0FFH,0CH,030H,030H,0C0H,0C0H,00H
	DW 00H,00H,00H,00H,00H,0FFH,0FFH,00H
	DW 07FH,07FH,00H,00H,00H,00H,00H,03H
	DW 03H,0CH,0CH,030H,030H,07FH,07FH,00H
; NO 31  Ｏ
	DW 0FCH,0FCH,02H,02H,01H,01H,01H,01H
	DW 01H,01H,01H,02H,02H,0FCH,0FCH,00H
	DW 01FH,01FH,020H,020H,040H,040H,040H,040H
	DW 040H,040H,040H,020H,020H,01FH,01FH,00H
; NO 32  Ｐ
	DW 0FFH,0FFH,081H,081H,081H,081H,081H,081H
	DW 081H,081H,081H,042H,042H,03CH,03CH,00H
	DW 07FH,07FH,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,00H
; NO 33  Ｑ
	DW 0FCH,0FCH,02H,02H,01H,01H,01H,01H
	DW 01H,01H,01H,02H,02H,0FCH,0FCH,00H
	DW 01FH,01FH,030H,030H,048H,048H,048H,048H
	DW 048H,048H,048H,030H,030H,04FH,04FH,00H
; NO 34  Ｒ
	DW 0FFH,0FFH,081H,081H,081H,081H,081H,081H
	DW 081H,081H,081H,042H,042H,03CH,03CH,00H
	DW 07FH,07FH,00H,00H,00H,00H,00H,01H
	DW 01H,06H,06H,018H,018H,060H,060H,00H
; NO 35  Ｓ
	DW 03CH,03CH,042H,042H,081H,081H,081H,081H
	DW 081H,081H,081H,02H,02H,04H,04H,00H
	DW 010H,010H,020H,020H,040H,040H,040H,040H
	DW 040H,040H,040H,021H,021H,01EH,01EH,00H
; NO 36  Ｔ
	DW 01H,01H,01H,01H,01H,01H,01H,0FFH
	DW 0FFH,01H,01H,01H,01H,01H,01H,00H
	DW 00H,00H,00H,00H,00H,00H,00H,07FH
	DW 07FH,00H,00H,00H,00H,00H,00H,00H
; NO 37  Ｕ
	DW 0FFH,0FFH,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,0FFH,0FFH,00H
	DW 01FH,01FH,020H,020H,040H,040H,040H,040H
	DW 040H,040H,040H,020H,020H,01FH,01FH,00H
; NO 38  Ｖ
	DW 0FFH,0FFH,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,0FFH,0FFH,00H
	DW 01H,01H,06H,06H,01CH,018H,020H,060H
	DW 020H,018H,018H,06H,06H,01H,01H,00H
; NO 39  Ｗ
	DW 0FFH,0FFH,00H,00H,00H,00H,00H,00H
	DW 00H,00H,00H,00H,00H,0FFH,0FFH,00H
	DW 01FH,01FH,060H,060H,0CH,018H,06H,07H
	DW 06H,018H,018H,060H,060H,01FH,01FH,00H
; NO 40  Ｘ
	DW 03H,03H,0CH,0CH,030H,030H,0C0H,080H
	DW 0C0H,030H,030H,0CH,0CH,03H,03H,00H
	DW 060H,060H,018H,018H,06H,06H,01H,00H
	DW 01H,06H,06H,018H,018H,060H,060H,00H
; NO 41  Ｙ
	DW 0FH,0FH,030H,030H,0C0H,0C0H,00H,00H
	DW 00H,0C0H,0C0H,030H,030H,0FH,0FH,00H
	DW 00H,00H,00H,00H,04H,00H,01H,07FH
	DW 07FH,00H,00H,00H,00H,00H,00H,00H
; NO 42  Ｚ
	DW 01H,01H,01H,01H,01H,01H,081H,081H
	DW 0C1H,031H,031H,0DH,0DH,03H,03H,00H
	DW 060H,060H,058H,058H,046H,046H,041H,040H
	DW 040H,040H,040H,040H,040H,040H,040H,00H

            END

