 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;		ＰＩＣ１６Ｆ１８２８　ナンバーズシミュレータ
;
;							2017年11月	Ver2.0	JA0QON
;
;		ナンバーズ３４の回転盤による抽選を擬似的に行う
;		擬似抽選盤は実物より少々速く回転します
;		桁によって数字並びが違い、実物を模倣しています
;		抽選の擬似矢は人間が発射します
;
;
;	ディスプレイ
;		SC1602D パラレル接続16桁2行液晶モジュール
;		4bitモードで使用します
;	ロータリーDIPスイッチ
;		RBポート4bit使用して16モードを選択できます
;		現在は5モードを用意
;	擬似矢のタクトスイッチ
;		RA2ポートの外部割り込みを使用
;		これを矢の発射と見立てます
;
;	抽選方法をインタバル割り込みに変更
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

		LIST	P=PIC16F1828
		INCLUDE	P16F1828.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)
;					設定
;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		;移動した場合、破壊されること有
;機能専用広域ワーク
DPFLG		equ		02eh		;ディスプレイ機能設定フラグ
MODE		equ		02fh		;実行モード設定フラグ
INFLG		equ		030h		;割り込み要因フラグ
;	INFLG		割り込み要件を示すフラグ
;		bit7-2	予約、常に0に設定
;		bit1	周辺割り込みフラグ
;					1=状態変化割り込みが発生した
;					0=状態変化割り込みは発生していない
;		bit0	外部割り込み(RA2)フラグ
;					1=外部割り込みが発生した
;					0=外部割り込みが発生していない

;抽選用ワーク
LOCT		equ		031h		;ローカルカウンタ
TMRW0		equ		032h		;タイマ用ワーク
;TMRW1		equ		033h		;
;LOC7		equ		034h		;LOTO7カウンタ
LCAD0		equ		035H		;LOTO用抽選変数アドレス下位8bit
LCAD1		equ		036H		;LOTO用抽選変数アドレス上位8bit
LCMD		equ		037H		;割り込みモードフラグ
;	LCMD		抽選動作モードフラグ
;		bit7-4	予約、常に0に設定
;		bit3=1	LOTO7用の抽選中、それ以外の時は0に設定
;		bit2=1	LOTO6用の抽選中、それ以外の時は0に設定
;		bit1=1	LOTO5用の抽選中、それ以外の時は0に設定
;		bit0=1	NUMBERS用の抽選中、それ以外の時は0に設定
LCSLN		equ		038H		;NUMBERS用抽選配列データ選択フラグ
;	LCSLN		NUMBERS用抽選配列データ選択フラグ
;		bit7-4	予約、常に0に設定
;		bit3=1	1000桁(N4)用の抽選中、それ以外の時は0に設定
;		bit2=1	100桁(N3)用の抽選中、それ以外の時は0に設定
;		bit1=1	10桁(N2)用の抽選中、それ以外の時は0に設定
;		bit0=1	1桁用(N1)の抽選中、それ以外の時は0に設定
LCSLL		equ		039H		;LOTO用抽選配列データ選択フラグ
;	LCSLL		LOTO用抽選配列データ選択フラグ
;		bit7	予約
;		bit6=1	LOTO7用の抽選中、それ以外の時は0に設定
;		bit5=1	LOTO6用の抽選中、それ以外の時は0に設定
;		bit4=1	LOTO5用の抽選中、それ以外の時は0に設定
;		bit0-3	現在抽選回数、0,1-7

;BCD用広域ワーク
digit12     equ     03ah        ;BCD変換出力1，2桁
digit34     equ     03bh		;BCD変換出力3，4桁
digit56     equ     03ch        ;BCD変換出力5，6桁
digit78     equ     03dh        ;BCD変換出力7，8桁
digit9A     equ     03eh        ;BCD変換出力9，10桁
bcdw0		equ		03fh		;BCD補正処理ワーク
bcdw1		equ		040h
;汎用広域ワーク
wrk0		equ		041h        ;演算用汎用ワーク
wrk1		equ		042h
shift       equ     043h        ;ビットシフト用ワーク
blk			equ		044h		;ゼロブランキング制御フラグ
colum		equ		045h		;現在の桁位置
colw0		equ		046h		;桁位置処理ワーク
colw1		equ		047h		;
;8桁7セグLED専用広域ワーク
CMD0		equ		048h		;コマンドパケット下位8ビット
CMD1		equ		049h		;コマンドパケット上位8ビット
DBUF0		equ		04ah		;SPI送信データ編集用バッファ
DBUF1		equ		04bh
DBUF2		equ		04ch
DBUF3		equ		04dh
DBUF4		equ		04eh
DBUF5		equ		04fh
DBUF6		equ		050h
DBUF7		equ		051h
;ロータリーエンコーダ専用ワーク
REDAT       equ     052h        ;ロータリーエンコーダ・ビットデータ
RESP0       equ     053h        ;変化ステップ量 下位バイト
RESP1		equ		054h		;
RESP2		equ		055h		;
rew0        equ     056h        ;専用ワーク
rew1        equ     057h        ;専用ワーク
;メインループ用広域ワーク
FDA0        equ     058h		;32ビット アップダウン カウンタ
FDA1        equ     059h		;基本動作周波数用
FDA2		equ     05ah		;
FDA3		equ     05bh		;
;ＬＣＤ制御関連ワーク
DSP_ADR     equ     064h		;ディスプレイVRAM用ワーク
icw0        equ     065h		;通信制御用ワーク
icw1        equ     066h		;
BSLW0		equ		067h		;横スクロール用ワーク
BSLW1		equ		068h		;
BSLSP		equ		069h		;横スクロール停止位置
BSLST		equ		06ah		;横スクロール開始位置
MSAD0		equ		06bh		;MSG用アドレスポインタ
MSAD1		equ		06ch
LDWR		equ		06dh		;Wreg退避用
I2C_DATA	equ		06eh		;I2C受信データ
CTRL		equ		06fh		;I2C受信動作制御フラグ
;LOTO用抽選変数(BANK1)
LOT00		equ		0A0H		;
LOT01		equ		0A1H
LOT02		equ		0A2H
LOT03		equ		0A3H
LOT04		equ		0A4H
LOT05		equ		0A5H
LOT06		equ		0A6H
LOT07		equ		0A7H
LOT08		equ		0A8H
LOT09		equ		0A9H
LOT10		equ		0AAH
LOT11		equ		0ABH
LOT12		equ		0ACH
LOT13		equ		0ADH
LOT14		equ		0AEH
LOT15		equ		0AFH
LOT16		equ		0B0H
LOT17		equ		0B1H
LOT18		equ		0B2H
LOT19		equ		0B3H
LOT20		equ		0B4H
LOT21		equ		0B5H
LOT22		equ		0B6H
LOT23		equ		0B7H
LOT24		equ		0B8H
LOT25		equ		0B9H
LOT26		equ		0BAH
LOT27		equ		0BBH
LOT28		equ		0BCH
LOT29		equ		0BDH
LOT30		equ		0BEH		;LOTO5はここまで
LOT31		equ		0BFH
LOT32		equ		0C0H
LOT33		equ		0C1H
LOT34		equ		0C2H
LOT35		equ		0C3H
LOT36		equ		0C4H		;LOTO7はここまで
LOT37		equ		0C5H
LOT38		equ		0C6H
LOT39		equ		0C7H
LOT40		equ		0C8H
LOT41		equ		0C9H
LOT42		equ		0CAH		;LOTO6はここまで
;
GOF1H		equ		0CBH
GOF2L		equ		0CCH		;
GOF2H		equ		0CDH
GOF3L		equ		0CEH		;
GOF3H		equ		0CFH


;
			ORG		0h			;リセットベクタ
			goto	init
			ORG		04h			;割り込みベクタ

;
;		割込み処理ルーチン
;
;	関連レジスタ
;	INTCON(BANK0)
;		bit2	TMR0IF	タイマ0割込みフラグ
;					1=オーバーフロー
;					0=オーバーフローなし
;		bit1	INTF INT割り込みフラグ
;					1=INT割り込みが発生した
;					0=INT割り込みは発生していない
;		bit0	IOCIF 状態変化割り込みフラグ
;					1=状態変化割り込みピンの少なくとも1つが変化した
;					0=IOC割り込みは発生していない
;
;	IOCBF(BANK7)
;		bit7	IOCBF7
;					1=RB7ピン状態変化割り込みが発生した
;					0=RB7ピン状態変化割り込みは発生していない
;		bit6	IOCBF6
;					1=RB6ピン状態変化割り込みが発生した
;					0=RB6ピン状態変化割り込みは発生していない
;		bit5	IOCBF5
;					1=RB5ピン状態変化割り込みが発生した
;					0=RB5ピン状態変化割り込みは発生していない
;		bit7	IOCBF4
;					1=RB4ピン状態変化割り込みが発生した
;					0=RB4ピン状態変化割り込みは発生していない
;
;	使用ワーク
;	INFLG		割り込み要件を示すフラグ
;		bit7-2	予約、常に0に設定
;		bit1	周辺割り込みフラグ
;					1=状態変化割り込みが発生した
;					0=状態変化割り込みは発生していない
;		bit0	外部割り込み(RA2)フラグ
;					1=外部割り込みが発生した
;					0=外部割り込みが発生していない
;	LCMD		抽選動作モードフラグ
;		bit7-4	予約、常に0に設定
;		bit3=1	LOTO7用の抽選中、それ以外の時は0に設定
;		bit2=1	LOTO6用の抽選中、それ以外の時は0に設定
;		bit1=1	LOTO5用の抽選中、それ以外の時は0に設定
;		bit0=1	NUMBERS用の抽選中、それ以外の時は0に設定
;
INT
;	割込み要件の確認
			clrf	BSR			;BANK0
			clrf	INFLG		;Reset INFLG
			btfsc INTCON,IOCIF	;INTCON.bit0
			bsf		INFLG,1		;MODE_SW INT
			btfsc	INTCON,INTF	;INTCON.bit1
			bsf		INFLG,0		;START_SW INT
			btfss INTCON,TMR0IF	;INTCON.bit2
			bra		INTOUT
;	TMR0割り込み処理分岐
			btfsc	LCMD,0		;NUMBERS_bit
			bra		LCTUP		;NUMBERS
			btfsc	LCMD,1		;LOTO5
			bra		LCUP5
			btfsc	LCMD,2		;LOTO6
			bra		LCUP6
			btfsc	LCMD,3		;LOTO7
			bra		LCUP7
			bra		INTOUT		;INT_MODE_ERR
;	NUMBRES抽選カウント処理
LCTUP
			;NUMBERS(0-9)
			incf	LOCT,F
			movlw	0AH
			subwf	LOCT,W		;W=F-W
			btfsc	STATUS,C
			clrf	LOCT
			bra		INTOUT
;	LOTO5抽選カウント処理
LCUP5		;INPUT 00-30DEC,OUTPUT 01-31DEC
			movf	LCAD0,W
			movwf	FSR1L
			movf	LCAD1,W
			movwf	FSR1H		;抽選変数アドレス リロード
			moviw	FSR1++		;抽選変数より抽選データを取得
			movwf	LOCT		;抽選データ保存
			btfss	LOCT,7		;抽選済みフラグチェック
			bra		LCUP53		;データ未使用
LCUP51		;LOTO5使用済みデータ パス処理
			movlw	0BFH
			subwf	FSR1L,W		;W=F-W
			btfss	STATUS,C	;
			bra		LCUP52		;ボロー(F<W)なのでアドレスそのまま
			movlw	0A0H		;F>=W
			movwf	FSR1L		;アドレスを先頭にリセット
LCUP52		moviw	FSR1++		;抽選変数よりデータを再取得
			movwf	LOCT		;抽選データ保存
			btfsc	LOCT,7		;抽選済みフラグチェック
			bra		LCUP51		;使用済みデータなので再々取得
LCUP53		;データアドレス末端処理
			movlw	0BFH
			subwf	FSR1L,W		;W=F-W
			btfss	STATUS,C	;C=0でボロー
			bra		LCUP54		;ボローなのでアドレスそのまま
			movlw	0A0H
			movwf	FSR1L		;アドレスを先頭にリセット
LCUP54
			movf	FSR1L,W
			movwf	LCAD0
			movf	FSR1H,W
			movwf	LCAD1
			goto	INTOUT

;	LOTO6抽選カウント処理
LCUP6		;LOTO6(INPUT 00-42,OUTPUT 01-43DEC)
			movf	LCAD0,W
			movwf	FSR1L
			movf	LCAD1,W
			movwf	FSR1H		;抽選変数アドレス リロード
			moviw	FSR1++		;抽選変数より抽選データを取得
			movwf	LOCT		;抽選データ保存
			btfss	LOCT,7		;抽選済みフラグチェック
			bra		LCUP63		;データ未使用
LCUP61		;LOTO6使用済みデータ パス処理
			movlw	0CBH		;次のアドレスがCBHならばA0Hにする
			subwf	FSR1L,W		;W=F-W
			btfss	STATUS,C	;
			bra		LCUP62		;ボロー(F<W)なのでアドレスそのまま
			movlw	0A0H		;F>=W
			movwf	FSR1L		;先頭アドレスにリセット
LCUP62		moviw	FSR1++		;次の抽選変数アドレスよりデータを再取得
			movwf	LOCT		;抽選データ保存
			btfsc	LOCT,7		;抽選済みフラグ再チェック
			bra		LCUP61		;使用済みデータなので再々取得
LCUP63		;データアドレス末端処理
			movlw	0CBH		;次のアドレスがCBHならばA0Hにする
			subwf	FSR1L,W		;W=F-W
			btfss	STATUS,C	;C=0でボロー
			bra		LCUP64		;ボローなのでアドレスそのまま
			movlw	0A0H
			movwf	FSR1L		;アドレスを先頭にリセット
LCUP64
			movf	FSR1L,W
			movwf	LCAD0
			movf	FSR1H,W
			movwf	LCAD1		;次の抽選変数アドレスを保存
			goto	INTOUT

LCUP7		;LOTO7(INPUT 00-36,OUTPUT 01-37DEC)
			movf	LCAD0,W
			movwf	FSR1L
			movf	LCAD1,W
			movwf	FSR1H		;抽選変数アドレス リロード
			moviw	FSR1++		;抽選変数より抽選データを取得
			movwf	LOCT		;抽選データ保存
			btfss	LOCT,7		;抽選済みフラグチェック
			bra		LCUP73		;データ未使用
LCUP71		;LOTO7使用済みデータ パス処理
			movlw	0C5H
			subwf	FSR1L,W		;W=F-W
			btfss	STATUS,C	;
			bra		LCUP72		;ボロー(F<W)なのでアドレスそのまま
			movlw	0A0H		;F>=W
			movwf	FSR1L		;アドレスを先頭にリセット
LCUP72		moviw	FSR1++		;抽選変数よりデータを再取得
			movwf	LOCT		;抽選データ保存
			btfsc	LOCT,7		;抽選済みフラグチェック
			bra		LCUP71		;使用済みデータなので再々取得
LCUP73		;データアドレス末端処理
			movlw	0C5H
			subwf	FSR1L,W		;W=F-W
			btfss	STATUS,C	;C=0でボロー
			bra		LCUP74		;ボローなのでアドレスそのまま
			movlw	0A0H
			movwf	FSR1L		;アドレスを先頭にリセット
LCUP74
			movf	FSR1L,W
			movwf	LCAD0
			movf	FSR1H,W
			movwf	LCAD1		;次の抽選変数アドレスを保存
;	割込み終了処理
INTOUT
			movlb	07H
			clrf	IOCAF
			clrf	IOCBF
			clrf	BSR
			clrf	TMR0
			bcf		INTCON,INTF
			bcf		INTCON,TMR0IF
INTOUT10
			retfie				;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			PIC16F1828　イニシャライズ
;
;		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
;			各レジスタ初期設定(PIC16F1828)
			movlb	0h			;BANK0
			movlw	000h		;00000000B
			movwf	INTCON		;全割込みOFF
			;クロック設定
			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
;	I/Oポート設定
;		RA0:入力　機能設定無
;		RA1:入力　機能設定無
;		RA2:入力　タクトスイッチ（プルアップ）
;		RA3:入力　機能設定無（プルアップ）
;		RA4:出力　LED(GREEN)
;		RA5:出力　LED(YELLOW)
;		RB4:入力　R-DIP bit0（プルアップ）
;		RB5:入力　R-DIP bit1（プルアップ）
;		RB6:入力　R-DIP bit2（プルアップ）
;		RB7:入力　R-DIP bit3（プルアップ）
;		RC0:入力　（出力　ブザー）未配線
;		RC1:出力　LCD RS
;		RC2:出力　LCD R/W
;		RC3:出力　LCD E
;		RC4:出力　LCD DB4
;		RC5:出力　LCD DB5
;		RC6:出力　LCD DB6
;		RC7:出力　LCD DB7
			movlb	01h			;BANK1
			movlw	0FH			;00001111B
			movwf	TRISA		;RA0-3入力、RA4-5出力
			movlw	0F0H
			movwf	TRISB		;RB4-7入力
			movlw	01H			;01H＝00000001B
			movwf	TRISC		;RC0入力、RC1-RC7出力

			;TMR0およびプルアップ設定
			movlb	01h			;BANK1
			movlw	084H		;10000100B
			movwf	OPTION_REG	;プルアップOFF
								;割込みエッジ↓
								;クロックソース内部
								;TMR0カウントエッジ↓
								;プリスケーラ割当→TMR0
								;プリスケーラ分周1/32にセット

			;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
;			設定終了
			movlb	0h
			goto	coldst
;
;		メイン プログラム
;
;
coldst
			movlw	038H		;00111000B
			movwf	INTCON		;全0FF、TMR0 ON、状態ON、INT ON
			call	wait100m	;システム安定化
			bsf		PORTA,4		;LED_OFF
			clrf	INFLG		;割り込み要因フラグ
			bsf		PORTA,5
			clrf	MODE		;動作モードフラグ
			clrf	LOCT		;ローカルカウンタ
			movlw	0A0H
			movwf	LCAD0		;抽選変数群先頭アドレス(16bit)
			clrf	LCAD1
			movlb	07H			;BANK7
			movlw	0F0H		;RB4-RB7を指定
			movwf	IOCBP		;PORTB立上がりエッジ状態変化割り込みレジスタ
			movwf	IOCBN		;PORTB立下りエッジ状態変化割り込みレジスタ
			clrf	BSR			;BANK0
			call	INIT4_LCD	;SC1602D初期設定
;			goto	DEBUG02
			;タイトル画面表示
			movlw	LOW MSG01	;MSG01間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG01	;MDG01間接アドレス値上位8ビット
			movwf	MSAD1
			call	CLRLCD		;LCD画面全クリア
			call	PUTL1		;"    NUMBERS     "
			movlw	LOW MSG02
			movwf	MSAD0
			movlw	HIGH MSG02
			movwf	MSAD1
			call	PUTL2		;"   SIMULATOR"
			call	wait1s
			call	wait1s

;
;		ロータリーDIP取得データによるモード
;		MODE=0	スタンバイ
;		MODE=1	NUMBERS3 上位桁から下位桁へ3連続抽選モード
;		MODE=2	NUMBERS4 上位桁から下位桁へ4連続抽選モード
;		MODE=3	MINILOTO 5数字連続抽選モード
;		MODE=4	LOTO6 6数字連続抽選モード
;		MODE=5	LOTO7 7数字連続抽選モード
;		MODE=6	1桁目抽選モード
;				連続抽選で過去値16個までLCD2行目に表示
;		MODE=7	2桁目抽選モード
;				連続抽選で過去値16個までLCD2行目に表示
;		MODE=8	3桁目抽選モード
;				連続抽選で過去値16個までLCD2行目に表示
;		MODE=9	4桁目抽選モード
;				連続抽選で過去値16個までLCD2行目に表示
;
hotst
			;メニュー画面
			call	CLRLCD
			movlw	LOW MSG03	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG03	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	PUTL1		;"NANBA-KUN Ver1"
			movlw	LOW MSG19	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG19	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	PUTL2		;"SELECT MODE"
			;モード選択
hst01		call	GET_RDIP	;Wreg=RDIP DATA
			movwf	MODE
			iorlw	0H
			btfss	STATUS,Z
			goto	CK_MODE
			bra		hst01
			
;		モードチェック
CK_MODE
			movlw	01H			;MODE1
			xorwf	MODE,W		;MUNBERS3
			btfsc	STATUS,Z	;
			goto	NUMBERS3	;
;
			movlw	02H			;MODE2
			xorwf	MODE,W		;NUMBERS4
			btfsc	STATUS,Z	;
			goto	NUMBERS4	;
;
			movlw	03H			;MODE3
			xorwf	MODE,W		;LOTO5
			btfsc	STATUS,Z	;
			goto	LOT5		;
;
			movlw	04H			;MODE4
			xorwf	MODE,W		;LOTO6
			btfsc	STATUS,Z	;
			goto	LOT6		;
;
			movlw	05H			;MODE5
			xorwf	MODE,W		;LOTO7
			btfsc	STATUS,Z	;
			goto	LOT7		;
;
			movlw	06H			;MODE6
			xorwf	MODE,W		;
			btfsc	STATUS,Z	;
			goto	SIM01		;
;
			movlw	07H			;MODE7
			xorwf	MODE,W		;
			btfsc	STATUS,Z	;
			goto	SIM02		;
;
			movlw	08H			;MODE8
			xorwf	MODE,W		;
			btfsc	STATUS,Z	;
			goto	SIM03		;
;
			movlw	09H			;MODE9
			xorwf	MODE,W		;
			btfsc	STATUS,Z	;
			goto	SIM04		;
;
MODE_ERR
			goto	hotst

;		1桁目抽選モード
SIM01
			movlb	01H			;BANK01
			movlw	085H		;PS=64
			movwf	OPTION_REG	;
			clrf	BSR
			movlw	01H
			movwf	LCMD		;割り込みモード設定
			movlw	01H
			movwf	LCSLN		;N1_MODE
			movlw	LOW MSG05	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG05	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	CLRLCD		;LCD画面全クリア
			call	PUTL1		;LCD1行目に"   1ｹﾀ ｶｲﾃﾝﾁｭｳ"
			movlw	LOW MSG20	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG20	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	PUTL2		;"PUSH START"
SIM011		movlw	0CFH
			call	BLINK_ON
			call	INTFLGCLR
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0
			bsf		INTCON,GIE	;割り込み禁止解除
loop01		btfsc	INFLG,0		;RA2INTフラグチェック
			bra		LP01_TRG	;PUSH_SW ON
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LP01_EXIT
			bra		loop01		;ボローなのでループ
LP01_TRG	;抽選スイッチが押された
			call	NUM_TRG
			goto	SIM011		;再抽選へ

LP01_EXIT	;モード終了処理
			bcf		INTCON,GIE	;割り込み禁止
			clrf	INFLG		;割り込み結果フラグクリア
			call	LED0_OFF	;抽選可能LED_OFF
			call	BLINK_OFF
			goto	hotst		;MODE選択へ

;		2桁目抽選モード
SIM02
			movlb	01H			;BANK01
			movlw	085H		;PS=64
			movwf	OPTION_REG	;
			clrf	BSR
			movlw	01H
			movwf	LCMD		;割り込みモード設定
			movlw	02H
			movwf	LCSLN		;N2_MODE
			movlw	LOW MSG06	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG06	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	CLRLCD		;LCD画面全クリア
			call	PUTL1		;LCD1行目に"  10ｹﾀ ｶｲﾃﾝﾁｭｳ V"
			movlw	LOW MSG20	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG20	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	PUTL2		;"PUSH START"
SIM021
			movlw	0CFH
			call	BLINK_ON
			call	INTFLGCLR
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0
			bsf		INTCON,GIE	;割り込み禁止解除

loop02		btfsc	INFLG,0		;RA2INTフラグチェック
			bra		LP02_TRG	;PUSH_SW ON
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LP01_EXIT
			bra		loop02		;ボローなのでループ
LP02_TRG	;抽選スイッチが押された
			call	NUM_TRG
			goto	SIM021		;再抽選へ

;		3桁目抽選モード
SIM03
			movlb	01H			;BANK01
			movlw	085H		;PS=64
			movwf	OPTION_REG	;
			clrf	BSR
			movlw	01H
			movwf	LCMD		;割り込みモード設定
			movlw	04H
			movwf	LCSLN		;N3_MODE
			movlw	LOW MSG07	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG07	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	CLRLCD		;LCD画面全クリア
			call	PUTL1		;LCD1行目に" 100ｹﾀ ｶｲﾃﾝﾁｭｳ V"
			movlw	LOW MSG20	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG20	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	PUTL2		;"PUSH START"
SIM031
			movlw	0CFH
			call	BLINK_ON
			call	INTFLGCLR
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0
			bsf		INTCON,GIE	;割り込み禁止解除

loop03		btfsc	INFLG,0		;RA2INTフラグチェック
			bra		LP03_TRG	;PUSH_SW ON
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LP01_EXIT
			bra		loop03		;ボローなのでループ
LP03_TRG	;抽選スイッチが押された
			call	NUM_TRG
			goto	SIM031		;再抽選へ

;		4桁目抽選モード
SIM04
			movlb	01H			;BANK01
			movlw	085H		;PS=64
			movwf	OPTION_REG	;
			clrf	BSR
			movlw	01H
			movwf	LCMD		;割り込みモード設定
			movlw	08H
			movwf	LCSLN		;N4_MODE
			movlw	LOW MSG08	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG08	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	CLRLCD		;LCD画面全クリア
			call	PUTL1		;LCD1行目に"1000ｹﾀ ｶｲﾃﾝﾁｭｳ V"
			movlw	LOW MSG20	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG20	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	PUTL2		;"PUSH START"
SIM041
			movlw	0CFH
			call	BLINK_ON
			call	INTFLGCLR
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0
			bsf		INTCON,GIE	;割り込み禁止解除

loop04		btfsc	INFLG,0		;RA2INTフラグチェック
			bra		LP04_TRG	;PUSH_SW ON
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LP01_EXIT
			bra		loop04		;ボローなのでループ
LP04_TRG	;抽選スイッチが押された
			call	NUM_TRG
			goto	SIM041		;再抽選へ

;	NUMBRES4抽選モード
;	スタートボタンを押す度に4桁目抽選、3桁目抽選、2桁目抽選、1桁目抽選と進行
;	さらに押すと、再抽選を行います
;
;	(SIM05)
NUMBERS4
			movlb	01H			;BANK01
			movlw	085H		;PS=64
			movwf	OPTION_REG	;
			clrf	BSR
			movlw	01H
			movwf	LCMD		;割り込みモード設定
			movlw	LOW MSG09	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG09	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	CLRLCD		;LCD画面全クリア
			call	PUTL1		;LCD1行目に"NUMBERS4 "
			movlw	LOW MSG20	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG20	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	PUTL2		;"PUSH START"

;			4桁目抽選
SIM051
			movlw	08H
			movwf	LCSLN		;N4_MODE
			movlw	LOW MSG13	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG13	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			movlw	089H
			movwf	DSP_ADR
			call	PUTL		;LCD1行目に"1000"
			movlw	089H
			call	BLINK_ON
			call	INTFLGCLR
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0
			bsf		INTCON,GIE	;割り込み禁止解除

loop054		btfsc	INFLG,0		;RA2INTフラグチェック
			bra		LP054_TRG	;PUSH_SW ON
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LP01_EXIT
			bra		loop054		;ボローなのでループ
LP054_TRG	;抽選スイッチが押された
			call	NUM_TRG

;			3桁目抽選
			movlw	04H
			movwf	LCSLN		;N3_MODE
			movlw	LOW MSG12	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG12	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			movlw	089H
			movwf	DSP_ADR
			call	PUTL		;LCD1行目に"0100"
			movlw	08AH
			call	BLINK_ON
			call	INTFLGCLR
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0
			bsf		INTCON,GIE	;割り込み禁止解除

loop053		btfsc	INFLG,0		;RA2INTフラグチェック
			bra		LP053_TRG	;PUSH_SW ON
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LP01_EXIT
			bra		loop053		;ボローなのでループ
LP053_TRG	;抽選スイッチが押された
			call	NUM_TRG

;			2桁目抽選
			movlw	02H
			movwf	LCSLN		;N2_MODE
			movlw	LOW MSG11	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG11	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			movlw	089H
			movwf	DSP_ADR
			call	PUTL		;LCD1行目に"0010"
			movlw	08BH
			call	BLINK_ON
			call	INTFLGCLR
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0
			bsf		INTCON,GIE	;割り込み禁止解除

loop052		btfsc	INFLG,0		;RA2INTフラグチェック
			bra		LP052_TRG	;PUSH_SW ON
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LP01_EXIT
			bra		loop052		;ボローなのでループ
LP052_TRG	;抽選スイッチが押された
			call	NUM_TRG

;			1桁目抽選
			movlw	01H
			movwf	LCSLN		;N1_MODE
			movlw	LOW MSG10	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG10	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			movlw	089H
			movwf	DSP_ADR
			call	PUTL		;LCD1行目に"ﾚﾝｿﾞｸ 0001"
			movlw	08CH
			call	BLINK_ON
			call	INTFLGCLR
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0
			bsf		INTCON,GIE	;割り込み禁止解除

loop051		btfsc	INFLG,0		;RA2INTフラグチェック
			bra		LP051_TRG	;PUSH_SW ON
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LP01_EXIT
			bra		loop051		;ボローなのでループ
LP051_TRG	;抽選スイッチが押された
			call	NUM_TRG
			movlw	" "
			call	L2BSL
			goto	SIM051		;再抽選へ

;	NUMBERS3抽選モード
;	スタートボタンを押す度に3桁目抽選、2桁目抽選、1桁目抽選と進行
;	さらに押すと、再抽選を行います
;
;	(SIM06)
NUMBERS3
			movlb	01H			;BANK01
			movlw	085H		;PS=64
			movwf	OPTION_REG	;
			clrf	BSR
			movlw	01H
			movwf	LCMD		;割り込みモード設定
			movlw	LOW MSG14	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG14	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	CLRLCD		;LCD画面全クリア
			call	PUTL1		;LCD1行目に"NUMBERS3 "
			movlw	LOW MSG20	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG20	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	PUTL2		;"PUSH START"

;			3桁目抽選
SIM061
			movlw	04H
			movwf	LCSLN		;N3_MODE
			movlw	LOW MSG17	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG17	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			movlw	089H
			movwf	DSP_ADR
			call	PUTL		;LCD1行目に"100"
			movlw	089H
			call	BLINK_ON
			call	INTFLGCLR
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0
			bsf		INTCON,GIE	;割り込み禁止解除

loop063		btfsc	INFLG,0		;RA2INTフラグチェック
			bra		LP063_TRG	;PUSH_SW ON
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LP01_EXIT
			bra		loop063		;ボローなのでループ
LP063_TRG	;抽選スイッチが押された
			call	NUM_TRG

;			2桁目抽選
			movlw	02H
			movwf	LCSLN		;N2_MODE
			movlw	LOW MSG16	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG16	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			movlw	089H
			movwf	DSP_ADR
			call	PUTL		;LCD1行目に"010"
			movlw	08AH
			call	BLINK_ON
			call	INTFLGCLR
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0
			bsf		INTCON,GIE	;割り込み禁止解除

loop062		btfsc	INFLG,0		;RA2INTフラグチェック
			bra		LP062_TRG	;PUSH_SW ON
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LP01_EXIT
			bra		loop062		;ボローなのでループ
LP062_TRG	;抽選スイッチが押された
			call	NUM_TRG

;			1桁目抽選
			movlw	01H
			movwf	LCSLN		;N1_MODE
			movlw	LOW MSG15	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG15	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			movlw	089H
			movwf	DSP_ADR
			call	PUTL		;LCD1行目に"001"
			movlw	08BH
			call	BLINK_ON
			call	INTFLGCLR
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0
			bsf		INTCON,GIE	;割り込み禁止解除

loop061		btfsc	INFLG,0		;RA2INTフラグチェック
			bra		LP061_TRG	;PUSH_SW ON
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LP01_EXIT
			bra		loop061		;ボローなのでループ
LP061_TRG	;抽選スイッチが押された
			call	NUM_TRG
			movlw	" "
			call	L2BSL
			goto	SIM061		;再抽選へ

NUM_TRG		;NUMBRES抽選スイッチが押された
			bcf		INTCON,GIE	;割り込み禁止
			clrf	INFLG		;割り込み結果フラグクリア
			call	LED0_OFF	;抽選可能LED_OFF
			call	LED1_ON		;抽選決定LED_ON
			;Nxデータ選択
			btfsc	LCSLN,0		;N1?
			bra		NUMT01
			btfsc	LCSLN,1		;N2?
			bra		NUMT01
			btfsc	LCSLN,2		;N3?
			bra		NUMT01
			btfsc	LCSLN,3		;N4?
			bra		NUMT01
			return				;NUMT_ERR
NUMT01		movf	LOCT,W		;ローカルカウンタ値
			call	NMD1		;Wreg=N1データ、カウンタ値を抽選値に変換	
			bra		NUMT05
NUMT02		movf	LOCT,W		;ローカルカウンタ値
			call	NMD2		;Wreg=N2データ、カウンタ値を抽選値に変換	
			bra		NUMT05
NUMT03		movf	LOCT,W		;ローカルカウンタ値
			call	NMD3		;Wreg=N3データ、カウンタ値を抽選値に変換	
			bra		NUMT05
NUMT04		movf	LOCT,W		;ローカルカウンタ値
			call	NMD4		;Wreg=N4データ、カウンタ値を抽選値に変換	
NUMT05		call	L2BSL
			call	wait100m	;ﾀｸﾄSWﾁｬﾀﾘﾝｸﾞ防止用、ON/0FF両方でﾁｬﾀﾘﾝｸﾞします
			call	wait100m	;これが短いと2-3回連続抽選します
			call	LED1_OFF	;抽選決定LED_OFF
			return

			;割り込み発生フラグクリア
INTFLGCLR	movlb	07H			;BANK7
			clrf	IOCAF
			clrf	IOCBF		;IOCBフラグクリア
			clrf	BSR			;BANK0
			bcf		INTCON,INTF	;RA2INTフラグクリア
			bcf		INTCON,TMR0IF
			return

LED1_ON		bcf		PORTA,5
			return
LED1_OFF	bsf		PORTA,5
			return
LED0_ON		bcf		PORTA,4
			return
LED0_OFF	bsf		PORTA,4
			return


;		ミニロト用抽選モード
;
;	連続5回抽選で抽選数字は00-31
;	1度抽選された数値は外れる
LOT5
			;TMR0プリスケーラ変更
			movlb	01H			;BANK01
			movlw	080H		;PS=2
			movwf	OPTION_REG	;
			clrf	BSR
			;割り込み抽選モードをLOTO5に設定
			movlw	02H			;bit1=1、他=0
			movwf	LCMD		;割り込みモード設定
			;抽選変数への抽選データ プリセット
LOT501		movlw	0A0H
			movwf	FSR1L
			clrf	FSR1H		;抽選変数群先頭アドレスセット
			clrf	LOCT		;データ配列先頭番号
LOT502		movf	LOCT,W		;収納されている1次元データ配列は00-30DEC
			call	NMD5		;Wreg=LOTO5抽選データ
			movwi	FSR1++		;抽選変数用データを抽選変数に転送
			incf	LOCT,F
			movlw	.31			;データ配列最後尾判定
			xorwf	LOCT,W
			btfss	STATUS,Z	;
			bra		LOT502		;
			;LOTO5基本表示設定
			movlw	LOW MSG23	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG23	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	CLRLCD		;LCD画面全クリア
			call	PUTL1		;LCD1行目に"LOTO5 "
			movlw	LOW MSG20	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG20	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	PUTL2		;"PUSH START"
;			1回目抽選
LOT511
			movlw	LOW MSG31	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG31	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			movlw	086H
			movwf	DSP_ADR
			call	PUTL		;LCD1行目に"NO1"
			movlw	0CFH
			call	BLINK_ON	;'1'BLINK
			call	INTFLGCLR	;割り込み発生フラグクリア
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0		;
			bsf		INTCON,GIE	;割り込み禁止解除
loop511		;PUSH_SW操作待ちループ、R-DIP操作でループ抜け出し
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LOT_EXIT	;R-DIP操作されたのでループ抜け
			btfsc	INFLG,0		;RA2INTフラグチェック
			bra		loop512		;SW_ON
			bra		loop511		;SW_OFF
loop512		call	LOT_TRG		;PUSH(START)スイッチ押された処理
;			2回目抽選
LOT521
			movlw	088H
			movwf	DSP_ADR
			movlw	'2'
			call	PUTW		;LCD1行目に"NO2"
			movlw	0CFH
			call	BLINK_ON	;'1'BLINK
			call	INTFLGCLR	;割り込み発生フラグクリア
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0		;
			bsf		INTCON,GIE	;割り込み禁止解除
loop521		;PUSH_SW操作待ちループ、R-DIP操作でループ抜け出し
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LOT_EXIT	;R-DIP操作されたのでループ抜け
			btfsc	INFLG,0		;RA2INTフラグチェック
			bra		loop522		;SW_ON
			bra		loop521		;SW_OFF
loop522		call	LOT_TRG		;PUSH(START)スイッチ押された処理
;			3回目抽選
LOT531
			movlw	088H
			movwf	DSP_ADR
			movlw	'3'
			call	PUTW		;LCD1行目に"NO2"
			movlw	0CFH
			call	BLINK_ON	;'1'BLINK
			call	INTFLGCLR	;割り込み発生フラグクリア
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0		;
			bsf		INTCON,GIE	;割り込み禁止解除
loop531		;PUSH_SW操作待ちループ、R-DIP操作でループ抜け出し
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LOT_EXIT	;R-DIP操作されたのでループ抜け
			btfsc	INFLG,0		;RA2INTフラグチェック
			bra		loop532		;SW_ON
			bra		loop531		;SW_OFF
loop532		call	LOT_TRG		;PUSH(START)スイッチ押された処理
;			4回目抽選
LOT541
			movlw	088H
			movwf	DSP_ADR
			movlw	'4'
			call	PUTW		;LCD1行目に"NO2"
			movlw	0CFH
			call	BLINK_ON	;'1'BLINK
			call	INTFLGCLR	;割り込み発生フラグクリア
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0		;
			bsf		INTCON,GIE	;割り込み禁止解除
loop541		;PUSH_SW操作待ちループ、R-DIP操作でループ抜け出し
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LOT_EXIT	;R-DIP操作されたのでループ抜け
			btfsc	INFLG,0		;RA2INTフラグチェック
			bra		loop542		;SW_ON
			bra		loop541		;SW_OFF
loop542		call	LOT_TRG		;PUSH(START)スイッチ押された処理
;			5回目抽選
LOT551
			movlw	088H
			movwf	DSP_ADR
			movlw	'5'
			call	PUTW		;LCD1行目に"NO2"
			movlw	0CFH
			call	BLINK_ON	;'1'BLINK
			call	INTFLGCLR	;割り込み発生フラグクリア
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0		;
			bsf		INTCON,GIE	;割り込み禁止解除
loop551		;PUSH_SW操作待ちループ、R-DIP操作でループ抜け出し
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LOT_EXIT	;R-DIP操作されたのでループ抜け
			btfsc	INFLG,0		;RA2INTフラグチェック
			bra		loop552		;SW_ON
			bra		loop551		;SW_OFF
loop552		call	LOT_TRG		;PUSH(START)スイッチ押された処理
			call	LOT_RST
loop553		btfss	PORTA,2
			goto	LOT501		;PUSH_ON再抽選へ
			call	GET_RDIP	;Wreg=RDIP DATA
			xorwf	MODE,W
			btfss	STATUS,Z
			goto	hst01
			bra		loop553


;		ＬＯＴＯ６用抽選モード
;
;	連続6回抽選で抽選数字は00-42(01-43)
;	1度抽選された数値は外れる
LOT6
			;TMR0プリスケーラ変更
			movlb	01H			;BANK01
			movlw	088H		;PS=OFF
			movwf	OPTION_REG	;
			clrf	BSR
			;割り込み抽選モードをLOTO6に設定
			movlw	04H			;bit2=1、他=0
			movwf	LCMD		;割り込みモード設定
			;スクロール停止位置
			movlw	08DH		;1行11桁目(8BH)14(8EH)
			movwf	BSLSP
			;抽選変数への抽選データ プリセット
LOT601		movlw	0A0H
			movwf	FSR1L
			clrf	FSR1H		;抽選変数群先頭アドレスセット
			clrf	LOCT		;データ配列先頭番号
LOT602		movf	LOCT,W		;収納されている1次元データ配列は00-42DEC
			call	NMD6		;Wreg=LOTO6抽選データ
			movwi	FSR1++		;抽選変数用データを抽選変数に転送
			incf	LOCT,F
			movlw	.43			;データ配列最後尾判定
			xorwf	LOCT,W
			btfss	STATUS,Z	;
			bra		LOT602		;
			;LOTO6基本表示設定
			movlw	LOW MSG24	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG24	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	CLRLCD		;LCD画面全クリア
			call	PUTL1		;LCD1行目に"LOTO6 "
			movlw	LOW MSG20	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG20	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	PUTL2		;"PUSH START"
;			1回目抽選
LOT611
			movlw	LOW MSG31	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG31	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			movlw	086H
			movwf	DSP_ADR
			call	PUTL		;LCD1行目に"NO1"
			movlw	0CFH
			call	BLINK_ON	;
			call	INTFLGCLR	;割り込み発生フラグクリア
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0		;
			bsf		INTCON,GIE	;割り込み禁止解除
loop611		;PUSH_SW操作待ちループ、R-DIP操作でループ抜け出し
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LOT_EXIT	;R-DIP操作されたのでループ抜け
			btfsc	INFLG,0		;RA2INTフラグチェック
			bra		loop612		;SW_ON
			bra		loop611		;SW_OFF
loop612		call	LOT_TRG		;PUSH(START)スイッチ押された処理
;			2回目抽選
LOT621
			movlw	088H
			movwf	DSP_ADR
			movlw	'2'
			call	PUTW		;LCD1行目に"NO2"
			movlw	0CFH
			call	BLINK_ON	;
			call	INTFLGCLR	;割り込み発生フラグクリア
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0		;
			bsf		INTCON,GIE	;割り込み禁止解除
loop621		;PUSH_SW操作待ちループ、R-DIP操作でループ抜け出し
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LOT_EXIT	;R-DIP操作されたのでループ抜け
			btfsc	INFLG,0		;RA2INTフラグチェック
			bra		loop622		;SW_ON
			bra		loop621		;SW_OFF
loop622		call	LOT_TRG		;PUSH(START)スイッチ押された処理
;			3回目抽選
LOT631
			movlw	088H
			movwf	DSP_ADR
			movlw	'3'
			call	PUTW		;LCD1行目に"NO2"
			movlw	0CFH
			call	BLINK_ON	;
			call	INTFLGCLR	;割り込み発生フラグクリア
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0		;
			bsf		INTCON,GIE	;割り込み禁止解除
loop631		;PUSH_SW操作待ちループ、R-DIP操作でループ抜け出し
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LOT_EXIT	;R-DIP操作されたのでループ抜け
			btfsc	INFLG,0		;RA2INTフラグチェック
			bra		loop632		;SW_ON
			bra		loop631		;SW_OFF
loop632		call	LOT_TRG		;PUSH(START)スイッチ押された処理
;			4回目抽選
LOT641
			movlw	088H
			movwf	DSP_ADR
			movlw	'4'
			call	PUTW		;LCD1行目に"NO2"
			movlw	0CFH
			call	BLINK_ON	;
			call	INTFLGCLR	;割り込み発生フラグクリア
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0		;
			bsf		INTCON,GIE	;割り込み禁止解除
loop641		;PUSH_SW操作待ちループ、R-DIP操作でループ抜け出し
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LOT_EXIT	;R-DIP操作されたのでループ抜け
			btfsc	INFLG,0		;RA2INTフラグチェック
			bra		loop642		;SW_ON
			bra		loop641		;SW_OFF
loop642		call	LOT_TRG		;PUSH(START)スイッチ押された処理
;			5回目抽選
LOT651
			movlw	088H
			movwf	DSP_ADR
			movlw	'5'
			call	PUTW		;LCD1行目に"NO2"
			movlw	0CFH
			call	BLINK_ON	;
			call	INTFLGCLR	;割り込み発生フラグクリア
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0		;
			bsf		INTCON,GIE	;割り込み禁止解除
loop651		;PUSH_SW操作待ちループ、R-DIP操作でループ抜け出し
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LOT_EXIT	;R-DIP操作されたのでループ抜け
			btfsc	INFLG,0		;RA2INTフラグチェック
			bra		loop652		;SW_ON
			bra		loop651		;SW_OFF
loop652		call	LOT_TRG		;PUSH(START)スイッチ押された処理
;			6回目抽選
LOT661
			movlw	088H
			movwf	DSP_ADR
			movlw	'6'
			call	PUTW		;LCD1行目に"NO6"
			movlw	0CFH
			call	BLINK_ON	;
			call	INTFLGCLR	;割り込み発生フラグクリア
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0		;
			bsf		INTCON,GIE	;割り込み禁止解除
loop661		;PUSH_SW操作待ちループ、R-DIP操作でループ抜け出し
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LOT_EXIT	;R-DIP操作されたのでループ抜け
			btfsc	INFLG,0		;RA2INTフラグチェック
			bra		loop662		;SW_ON
			bra		loop661		;SW_OFF
loop662		call	LOT_TRG		;PUSH(START)スイッチ押された処理
			call	LOT_RST
loop663		btfss	PORTA,2
			goto	LOT601		;PUSH_ON再抽選へ
			call	GET_RDIP	;Wreg=RDIP DATA
			xorwf	MODE,W
			btfss	STATUS,Z
			goto	hst01
			bra		loop663

LOT_EXIT	;LOTOx終了処理
			bcf		INTCON,GIE	;割り込み禁止
			clrf	INFLG		;割り込み結果フラグクリア
			call	LED0_OFF	;抽選可能LED_OFF
			call	BLINK_OFF
			goto	hotst		;MODE選択へ

LOT_RST
			movlw	LOW MSG26	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG26	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			movlw	086H
			movwf	DSP_ADR
			call	PUTL		;LCD1行目,６桁から"RST?"
			movlw	089H
			call	SEND4C
			return



LOT_TRG		;抽選スイッチが押された
			bcf		INTCON,GIE	;割り込み禁止
			clrf	INFLG		;割り込み結果フラグクリア
			call	LED0_OFF	;抽選可能LED_OFF(GREEN)
			call	LED1_ON		;抽選決定LED_ON(YELLOW)
			movf	LOCT,W		;抽選値取得01-43DEC
			movwf	hex0
			clrf	hex1
			clrf	hex2
			clrf	hex3
			;抽選数値使用済み処理
			decf	LCAD0,W		;取得抽選変数ｱﾄﾞﾚｽはISRでｲﾝｸﾘﾒﾝﾄされている
			movwf	FSR1L		;FSR1に一応セット
			xorlw	09FH		;補正必要かチェック
			btfss	STATUS,Z	;
			bra		LTT01		;補正不要
			call	CKRAD		;抽選変数アドレスA0Hの補正は末端値
			movwf	FSR1L
LTT01		movf	LCAD1,W		;常に00Hのため補正は不要
			movwf	FSR1H		;抽選変数アドレス リロード
			movf	INDF1,W		;抽選変数よりデータを取得
			iorlw	080H		;BCF Wreg,7
			movwf	INDF1
			;抽選数値表示処理 入力hex0-hex3の32bit
			call	BCD			;2進化10進数に変換
			movf	digit12,W	;BCD出力、下位2桁を使用
			call	NUTOASC		;Wregの0-9数値を文字コードに変換
			movf	DBUF1,W		;変換出力DBUF1=上位4bit
			call	L21BSL		;10の位をLCDに表示
			movf	DBUF0,W		;変換出力DBUF0=下位4bit、
			call	L21BSL		;1の位をLCDに表示
			call	wait100m	;ﾀｸﾄSWﾁｬﾀﾘﾝｸﾞ防止用、ON/0FF両方でﾁｬﾀﾘﾝｸﾞします
			call	wait100m	;これが短いと2-3回連続抽選します
			call	LED1_OFF	;抽選決定LED_OFF(YELLOW)
			movlw	" "			;数値分離用SP挿入
			call	L21BSL
			return				;

;			抽選アドレス末端値+1をWregで返す
;
;		入力	LCMD
;
CKRAD
			btfsc	LCMD,1		;LOTO5
			movlw	0BEH
			btfsc	LCMD,2		;LOTO6
			movlw	0CAH
			btfsc	LCMD,3		;LOTO7
			movlw	0C4H
			return

;		ＬＯＴＯ７用抽選モード
;
;	連続6回抽選で抽選数字は00-36(01-37)
;	1度抽選された数値は外れる
LOT7
			;TMR0プリスケーラ変更
			movlb	01H			;BANK01
			movlw	088H		;PS=OFF
			movwf	OPTION_REG	;
			clrf	BSR
			;割り込み抽選モードをLOTO7に設定
			movlw	08H			;bit3=1、他=0
			movwf	LCMD		;割り込みモード設定
			;スクロール停止位置
			movlw	08AH		;1行11桁目
			movwf	BSLSP
			;抽選変数への抽選データ プリセット
LOT701		movlw	0A0H
			movwf	FSR1L
			clrf	FSR1H		;抽選変数群先頭アドレスセット
			clrf	LOCT		;データ配列先頭番号
LOT702		movf	LOCT,W		;収納されている1次元データ配列は00-36DEC
			call	NMD7		;Wreg=LOTO7抽選データ
			movwi	FSR1++		;抽選変数用データを抽選変数に転送
			incf	LOCT,F
			movlw	.37			;データ配列最後尾判定
			xorwf	LOCT,W
			btfss	STATUS,Z	;
			bra		LOT702		;
			;LOTO7基本表示設定
			movlw	LOW MSG25	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG25	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	CLRLCD		;LCD画面全クリア
			call	PUTL1		;LCD1行目に"LOTO7 "
			movlw	LOW MSG20	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG20	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			call	PUTL2		;"PUSH START"
;			1回目抽選
LOT711
			movlw	LOW MSG31	;間接アドレス値下位8ビット
			movwf	MSAD0
			movlw	HIGH MSG31	;間接アドレス値上位8ビット
			movwf	MSAD1		;
			movlw	086H
			movwf	DSP_ADR
			call	PUTL		;LCD1行目に"NO1"
			movlw	0CFH
			call	BLINK_ON	;
			call	INTFLGCLR	;割り込み発生フラグクリア
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0		;
			bsf		INTCON,GIE	;割り込み禁止解除
loop711		;PUSH_SW操作待ちループ、R-DIP操作でループ抜け出し
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LOT_EXIT	;R-DIP操作されたのでループ抜け
			btfsc	INFLG,0		;RA2INTフラグチェック
			bra		loop712		;SW_ON
			bra		loop711		;SW_OFF
loop712		call	LOT_TRG		;PUSH(START)スイッチ押された処理
;			2回目抽選
LOT721
			movlw	088H
			movwf	DSP_ADR
			movlw	'2'
			call	PUTW		;LCD1行目に"NO2"
			movlw	0CFH
			call	BLINK_ON	;
			call	INTFLGCLR	;割り込み発生フラグクリア
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0		;
			bsf		INTCON,GIE	;割り込み禁止解除
loop721		;PUSH_SW操作待ちループ、R-DIP操作でループ抜け出し
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LOT_EXIT	;R-DIP操作されたのでループ抜け
			btfsc	INFLG,0		;RA2INTフラグチェック
			bra		loop722		;SW_ON
			bra		loop721		;SW_OFF
loop722		call	LOT_TRG		;PUSH(START)スイッチ押された処理
;			3回目抽選
LOT731
			movlw	088H
			movwf	DSP_ADR
			movlw	'3'
			call	PUTW		;LCD1行目に"NO2"
			movlw	0CFH
			call	BLINK_ON	;
			call	INTFLGCLR	;割り込み発生フラグクリア
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0		;
			bsf		INTCON,GIE	;割り込み禁止解除
loop731		;PUSH_SW操作待ちループ、R-DIP操作でループ抜け出し
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LOT_EXIT	;R-DIP操作されたのでループ抜け
			btfsc	INFLG,0		;RA2INTフラグチェック
			bra		loop732		;SW_ON
			bra		loop731		;SW_OFF
loop732		call	LOT_TRG		;PUSH(START)スイッチ押された処理
;			4回目抽選
LOT741
			movlw	088H
			movwf	DSP_ADR
			movlw	'4'
			call	PUTW		;LCD1行目に"NO2"
			movlw	0CFH
			call	BLINK_ON	;
			call	INTFLGCLR	;割り込み発生フラグクリア
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0		;
			bsf		INTCON,GIE	;割り込み禁止解除
loop741		;PUSH_SW操作待ちループ、R-DIP操作でループ抜け出し
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LOT_EXIT	;R-DIP操作されたのでループ抜け
			btfsc	INFLG,0		;RA2INTフラグチェック
			bra		loop742		;SW_ON
			bra		loop741		;SW_OFF
loop742		call	LOT_TRG		;PUSH(START)スイッチ押された処理
;			5回目抽選
LOT751
			movlw	088H
			movwf	DSP_ADR
			movlw	'5'
			call	PUTW		;LCD1行目に"NO2"
			movlw	0CFH
			call	BLINK_ON	;
			call	INTFLGCLR	;割り込み発生フラグクリア
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0		;
			bsf		INTCON,GIE	;割り込み禁止解除
loop751		;PUSH_SW操作待ちループ、R-DIP操作でループ抜け出し
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LOT_EXIT	;R-DIP操作されたのでループ抜け
			btfsc	INFLG,0		;RA2INTフラグチェック
			bra		loop752		;SW_ON
			bra		loop751		;SW_OFF
loop752		call	LOT_TRG		;PUSH(START)スイッチ押された処理
;			6回目抽選
LOT761
			movlw	088H
			movwf	DSP_ADR
			movlw	'6'
			call	PUTW		;LCD1行目に"NO6"
			movlw	0CFH
			call	BLINK_ON	;
			call	INTFLGCLR	;割り込み発生フラグクリア
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0		;
			bsf		INTCON,GIE	;割り込み禁止解除
loop761		;PUSH_SW操作待ちループ、R-DIP操作でループ抜け出し
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LOT_EXIT	;R-DIP操作されたのでループ抜け
			btfsc	INFLG,0		;RA2INTフラグチェック
			bra		loop762		;SW_ON
			bra		loop761		;SW_OFF
loop762		call	LOT_TRG		;PUSH(START)スイッチ押された処理
;			7回目抽選
LOT771
			movlw	088H
			movwf	DSP_ADR
			movlw	'7'
			call	PUTW		;LCD1行目に"NO6"
			movlw	0CFH
			call	BLINK_ON	;
			call	INTFLGCLR	;割り込み発生フラグクリア
			call	LED0_ON		;抽選可能LED_ON
			clrf	TMR0		;
			bsf		INTCON,GIE	;割り込み禁止解除
loop771		;PUSH_SW操作待ちループ、R-DIP操作でループ抜け出し
			btfsc	INFLG,1		;IOCフラグチェック
			goto	LOT_EXIT	;R-DIP操作されたのでループ抜け
			btfsc	INFLG,0		;RA2INTフラグチェック
			bra		loop772		;SW_ON
			bra		loop771		;SW_OFF
loop772		call	LOT_TRG		;PUSH(START)スイッチ押された処理
			call	LOT_RST
loop773		btfss	PORTA,2
			goto	LOT701		;PUSH_ON再抽選へ
			call	GET_RDIP	;Wreg=RDIP DATA
			xorwf	MODE,W
			btfss	STATUS,Z
			goto	hst01
			bra		loop773

;
;	ロータリーDIPのデータ取得
;
;	Wreg=取得データ(下位4bit)
;	R-DIPはPORTBのbit4-bit7に接続されている事を想定
;
GET_RDIP
;			bcf		INTCON,GIE	;割り込み禁止
			movf	PORTB,W
			andlw	0F0H
			movwf	tmp0
			call	wait50m
			movf	PORTB,W
			andlw	0F0H
			xorwf	tmp0,W
			btfss	STATUS,Z
			bra		GET_RDIP
			swapf	tmp0,W
			return

;
;		PUSH SW ON待ち
;		R-DIPもチェックします
WAIT_PUSH
			btfsc	PORTA,2
			bra		$-1
			retlw	00H


;
;       ＬＣＤ　ＤＩＳＰＬＡＹ　ＳＣ１６０２Ｂ／Ｄ
;
;       制御サブルーチン群			2017年11月版
;		メッセージメモリが256ワード境目の表示不良のバグフィックスしてあります
;		VRAMアドレスとはDDRAMアドレス+コマンドビットで事実上の位置アドレスを言う
;		PORTC使用、パラレル接続 4bitデータバス、制御3bit
;
;		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の時、データ書込み
;		コマンド間には37us以上、あるいは1.52ms以上のウエイトが必要
;		使用専用変数
;			DSP_ADR		80H-8FH 1行目　表示位置アドレス(DDRAM)
;						C0H-CFH 2行目　同じ
;					※これは機能ビット(DB7=1)+DDRAMアドレスで表示されている

;
;   Ｗレジスタの「データ」を単発で読み書き
;		表示位置指定	DSP_ADR
;	使用ワーク	icw0,icw1

PUTW
			movwf	icw0		;PUSH Wreg
			movf	DSP_ADR,W	;表示アドレス
			call	SEND4C
            call    wait50u
			movf	icw0,W		;POP Wreg
			call	SEND4D		;表示文字コード
			call	wait50u
			return
GETW
			movf	DSP_ADR,W	;
			call	SEND4C
            call    wait50u
			call	RECV4D		;
			movwf	icw0		;
			call	wait50u
			movf	icw0,W
			return
;
;	指定の文字列をＬＣＤ1行目に先頭から連続書込み
;
;		MSAD0	指定データ格納アドレス下位8ビット
;		MSAD1	指定データ格納アドレス上位7ビット
;		LCD最左側から表示、位置指定はできない
PUTL1
			movlw	080h		;1行目DDRAM先頭アドレス
			movwf	DSP_ADR		;DDRAMアドレス
			movf	MSAD0,W
			movwf	FSR0L
			movf	MSAD1,W
			movwf	FSR0H

PTL11
			moviw	FSR0++		;MSGアドレスよりデータを取得
			iorlw	0h			;エンドコードチェック
			btfsc	STATUS,Z
			bra		PTL12		;end of msg
			call	PUTW		;コマンドワード送信（W=DATA、DSP_ADR=CMD）
			incf	DSP_ADR,F
			movlw	090h		;データアドレス オーバー
			xorwf	DSP_ADR,W
			btfss	STATUS,Z
			bra		PTL11
PTL12		return				;
;
;	指定の文字列をＬＣＤ2行目に連続書込み
;
;		MSAD0	データアドレス下位8ビット
;		MSAD1	データアドレス上位7ビット
;
PUTL2
			movlw	0c0h		;２行目DDRAM先頭アドレス
			movwf	DSP_ADR		;DDRAMアドレス
			movf	MSAD0,W
			movwf	FSR0L
			movf	MSAD1,W
			movwf	FSR0H

PTL21
			moviw	FSR0++		;MSGアドレスよりデータを取得
			iorlw	0h			;エンドコードチェック
			btfsc	STATUS,Z
			bra		PTL22		;end of msg
			call	PUTW		;コマンドワード送信（W=DATA、DSP_ADR=CMD）
			incf	DSP_ADR,F
			movlw	0d0h		;データアドレス オーバー
			xorwf	DSP_ADR,W
			btfss	STATUS,Z
			bra		PTL21
PTL22		return				;

;
;	指定の文字列をＬＣＤに連続書込み
;	最大32文字
;		MSAD0	指定データ格納アドレス下位8ビット
;		MSAD1	指定データ格納アドレス上位7ビット
;		DSP_ADR	書き込み開始VRAMアドレス
;
PUTL
			movf	MSAD0,W
			movwf	FSR0L
			movf	MSAD1,W
			movwf	FSR0H

PTL01
			moviw	FSR0++		;MSGアドレスよりデータを取得
			iorlw	0h			;エンドコードチェック
			btfsc	STATUS,Z
			bra		PTL03		;end of msg
			call	PUTW		;コマンドワード送信（W=DATA、DSP_ADR=CMD）
			incf	DSP_ADR,F
			movlw	090h		;1行目データアドレス オーバー
			xorwf	DSP_ADR,W
			btfss	STATUS,Z
			bra		PTL11
			;
			movlw	0C0H		;2行目先頭VRAMアドレス
			movwf	DSP_ADR
PTL02		moviw	FSR0++		;MSGアドレスよりデータを取得
			iorlw	0h			;エンドコードチェック
			btfsc	STATUS,Z
			bra		PTL03		;end of msg
			call	PUTW		;コマンドワード送信（W=DATA、DSP_ADR=CMD）
			incf	DSP_ADR,F
			movlw	0D0h		;2行目データアドレス オーバー
			xorwf	DSP_ADR,W
			btfss	STATUS,Z
			bra		PTL11
PTL03		return				;




;
;		2(1)行目左シフト(2行16文字モードのみ有効)
;	Wregのデータを最右側に1文字表示（表示開始位置）
;	既存の表示データは左側にシフトされる
;	最左側のデータは破棄される
;
;	使用ワーク	BSLW0
L2BSL		;２行目
			movwf	BSLW0		;表示データ保存
			movlw	0C1H
			movwf	DSP_ADR		;シフト開始アドレス
L2BSL01
			call	GETW		;シフトデータ読み込み
			decf	DSP_ADR,F	;移動先アドレス
			call	PUTW		;シフトデータ書き込み
			incf	DSP_ADR,F
			incf	DSP_ADR,F	;次の読み込みアドレス
			movlw	0D0H
			xorwf	DSP_ADR,W	;最終アドレスチェック
			btfss	STATUS,Z
			bra		L2BSL01
;
L2BSL02		decf	DSP_ADR,F
			movf	BSLW0,W
			call	PUTW
			return

L1BSL		;１行目
			movwf	BSLW0		;表示データ保存
			movlw	081H
			movwf	DSP_ADR		;シフト開始アドレス
L1BSL01
			call	GETW		;シフトデータ読み込み
			decf	DSP_ADR,F	;移動先アドレス
			call	PUTW		;シフトデータ書き込み
			incf	DSP_ADR,F
			incf	DSP_ADR,F	;次の読み込みアドレス
			movlw	090H
			xorwf	DSP_ADR,W	;最終アドレスチェック
			btfss	STATUS,Z
			bra		L1BSL01
			bra		L2BSL02

;
;		2行目-1行目左シフト(2行16文字モードのみ有効)
;	Wregのデータを2行目最右側に1文字表示（表示開始位置）
;	既存の表示データは左側にシフトされる
;	2行目最左側のデータは1行目最右側にシフト
;	1行目最右側のデータは左側にシフト
;	左シフトは停止位置までで、それ以降は破棄される
;	停止位置アドレスは１行目のみ指定可能
;
;	スクロール停止位置	BSLSP
;	使用ワーク	BSLW0,BSLW1
L21BSL
			;１行目処理
			movwf	BSLW0		;表示データ保存
			movf	BSLSP,W		;スクロール停止位置VRAMアドレス
			iorlw	0H			;ゼロチェック
			btfsc	STATUS,Z
			movlw	080H
			movwf	DSP_ADR		;シフト開始アドレス
			incf	DSP_ADR,F
L21BSL01
			call	GETW		;シフトデータ読み込み
			decf	DSP_ADR,F	;移動先アドレス
			call	PUTW		;シフトデータ書き込み
			incf	DSP_ADR,F
			incf	DSP_ADR,F	;次の読み込みアドレス
			movlw	090H
			xorwf	DSP_ADR,W	;1行目最終アドレスチェック
			btfss	STATUS,Z
			bra		L21BSL01	;最終アドレス以下
			;行間処理
			movlw	0C0H
			movwf	DSP_ADR
			call	GETW
			movwf	BSLW1
			movlw	08FH
			movwf	DSP_ADR
			movf	BSLW1,W
			call	PUTW
			;２行目処理
			movlw	0C1H
			movwf	DSP_ADR		;シフト開始アドレス
L21BSL02
			call	GETW		;シフトデータ読み込み
			decf	DSP_ADR,F	;移動先アドレス
			call	PUTW		;シフトデータ書き込み
			incf	DSP_ADR,F
			incf	DSP_ADR,F	;次の読み込みアドレス
			movlw	0D0H
			xorwf	DSP_ADR,W	;最終アドレスチェック
			btfss	STATUS,Z
			bra		L21BSL02
			;
L21BSL03	decf	DSP_ADR,F
			movf	BSLW0,W
			call	PUTW
			return




;
;	Ｗｒｅｇのキャラクタデータをチェック
;	ヌルデータはスペース(20H)に置き換える
;
CKCW
			iorlw	0h
			btfsc	STATUS,Z
			retlw	020h
			return
;
;		ＬＣＤ画面クリア
;
CLRLCD		;全画面クリア
			movlw	01h			;画面クリアコマンド
			call	SEND4C
			call	wait5m
			return
CLRLCD1		;1行目クリア
			movlw	080H
			movwf	DSP_ADR
CLD11		movf	DSP_ADR,W
			call	SEND4C
			call	wait50u
			movlw	020H
			call	SEND4D
			call	wait50u
			movlw	090H
			incf	DSP_ADR,F
			xorwf	DSP_ADR,W
			btfss	STATUS,Z
			bra		CLD11
			return
CLRLCD2		;2行目クリア
			movlw	0C0H
			movwf	DSP_ADR
CLD21		movf	DSP_ADR,W
			call	SEND4C
			call	wait50u
			movlw	020H
			call	SEND4D
			call	wait50u
			movlw	0D0H
			incf	DSP_ADR,F
			xorwf	DSP_ADR,W
			btfss	STATUS,Z
			bra		CLD21
			return

;
;		指定の位置の文字をブリンク
;
;		位置指定	Wreg
BLINK_ON
			call	SEND4C		;VRAMアドレス移動
			movlw   0DH			;Display on、カーソルOFF、ブリンクON
			call    SEND4C		;
			return
BLINK_OFF
			movlw   0CH			;Display on、カーソルOFF、ブリンクON
			call    SEND4C		;
			return


;
;       ＳＣ１６０２Ｄイニシャライズ
;			４ビットモード用
;
INIT4_LCD
			call	wait100m	;LCDパワーオン ウエイト
;			4bitモード 移行ファンクションセット
			movlw	030h		;ファンクションセット　8bitモード
			call	SEND_HFCD	;
			call	wait5m
			movlw	030h		;ファンクションセット　8bitモード
			call	SEND_HFCD	;
			call	wait100u
			movlw	030h		;ファンクションセット　8bitモード
			call	SEND_HFCD	;
			call	wait100u
			movlw	020h		;FUNCTION SET 4BIT MODE
			call	SEND_HFCD	;データバイト送信
			call	wait100u
;			ファンクション セット
			movlw	028h		;5*8dot、2行表示、4bitモード
			call	SEND4C		;コントロールバイト送信
;			表示ON/OFFコントロール
			movlw   0CH			;Display on、カーソルOFF、
			call    SEND4C		;カーソル ブリンクOFF
;			Display clear
			movlw	01h			;クリアコマンド
			call	SEND4C
			call	wait5m
;			Entry mode set
			movlw	06h			;右インクリメント、表示シフトOFF
			call	SEND4C
			call	wait5m
			return

;
;		Wregの上位4bitをLCDにコマンドとして送信
;			RS=RC1	RS=0制御レジスタ選択、RS=1データレジスタ選択
;			R/W=RC2
;			E=RC3
;			DB7-4=RC7-RC4
SEND_HFCD
			andlw	0F0H		;上位4bit
			movwf	PORTC		;書き込みデータ提示、RS=0,R/W=0,E=0
			call	wait10u		;
			bsf		PORTC,3		;E=1（データ イネーブル）
			call	wait10u
			bcf		PORTC,3		;E=0
			call	wait10u
			return


;
;		ＳＣ１６０２Ｄ　アクセス サブルーチン
;
;		使用ポート
;		RC3=Enable（L-H-L)
;		RC2=R/W
;			1=読み出し
;			0=書込み
;		RC1=RSレジスタ選択
;			1=データレジスタ
;			0=制御レジスタ
;		RC7-4=DB7-4
;
;		送信
;		事前にWregに8ビットデータを用意して呼び出し
;
;		4bitモード データ送信シークェンス
;		上位4bit
;		(1)DB7-DB4を提示（RC7-RC4)
;		(2)R/W=0(RC2)
;		(3)RS=1(RC1)
;		(4)ｳｪｲﾄ40ns以上
;		(5)E=0からE=1(RC3)
;		(6)ｳｪｲﾄ230ns以上
;		(7)E=1→E=0(RC3)
;		(8)ｳｪｲﾄ10ns以上
;		下位4bit
;		(10)DB3-DB0を提示（RC7-RC4)
;		(14)E=0からE=1(RC3)
;		(15)ｳｪｲﾄ230ns以上
;		(16)E=1→E=0(RC3)
;		(17)ｳｪｲﾄ10ns以上
;		(18)RS=0
;
;
;		使用ワーク
;			wrk0,wrk1	データ保存

;
;		Ｗレジスタの8ビット分送出（4bitモード）
;
SEND4D		;上位4bitをBD4-BD7に提示
			movwf	wrk0		;push Wreg
			andlw	0F0H		;下位4bit切り捨て
			movwf	PORTC		;書き込みデータ提示、RS=0,R/W=0,E=0
			call	wait10u		;
			;送信処理
			bsf		PORTC,1		;RS=1
			call	wait10u
			bsf		PORTC,3		;E=1（データ イネーブル）
			call	wait10u
			bcf		PORTC,3		;E=0
			call	wait10u
			;下位4bitをBD4-DB7に提示
			swapf	wrk0,W		;W=SEND_DATA
			andlw	0F0H		;下位4bit切り捨て
			movwf	PORTC		;書き込みデータ提示、RS=0,R/W=0,E=0
			call	wait10u		;
			;送信処理
			bsf		PORTC,1		;RS=1
			call	wait10u
			bsf		PORTC,3		;データ イネーブル
			call	wait10u
			bcf		PORTC,3		;ディセーブル
			call	wait50u
			return

SEND4C		;コマンド送信
			movwf	wrk0		;push Wreg
			andlw	0F0H		;上位4bit
			movwf	PORTC		;書き込みデータ提示、RS=0,R/W=0,E=0
			call	wait10u		;
			;
			bsf		PORTC,3		;E=1（データ イネーブル）
			call	wait10u
			bcf		PORTC,3		;E=0
			call	wait10u
			;
			swapf	wrk0,W		;pop Wreg
			andlw	0F0H		;上位4bit
			movwf	PORTC		;書き込みデータ提示、RS=0,R/W=0,E=0
			call	wait10u		;
;
			bsf		PORTC,3		;データ イネーブル
			call	wait10u
			bcf		PORTC,3		;ディセーブル
			call	wait50u
			return

RECV4D
			movlb	01H			;BANK01
			movlw	0F1H		;RC7-4=READ,RC3-1=WRITE,RC0=READ
			movwf	TRISC		;
			clrf	BSR
			movlw	06H			;RS=1,R/W=1,E=0
			movwf	PORTC
			call	wait10u
			bsf		PORTC,3		;Enable
			call	wait50u
			movf	PORTC,W		;上位4bit読み込み
			andlw	0F0H
			movwf	wrk0
			bcf		PORTC,3		;Disable
			call	wait10u
;
			bsf		PORTC,3		;Enable
			call	wait50u
			movf	PORTC,W
			andlw	0F0H
			movwf	wrk1
			bcf		PORTC,3
			movlb	01H			;BANK01
			movlw	01H			;PORTC1-7出力
			movwf	TRISC		;
			clrf	BSR
;
			swapf	wrk1,W
			iorwf	wrk0,W
			return


;
;		16進8bitバイナリ数値をASCIIコードに変換
;
;		入力	Wreg:00H-FFH
;		出力	DBUF0:下位4bit分のASCIIコード
;			DBUF1:上位4bit分のASCIIコード
NUTOASC
			movwf	LDWR		;Wreg退避
			andlw	0fh
			addlw	030h
			movwf	DBUF0
			;
			swapf	LDWR,W
			andlw	0fh
			addlw	030h
			movwf	DBUF1
			return
			


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;		４バイトバイナリの10桁BCDへの変換
;		MicroChip社のアプリケーションノートより
;
;		入力		4バイト(32ビット)16進バイナリ
;				hex0
;				hex1
;				hex2
;				hex3
;
;		出力		5バイト(10桁)ＢＣＤ
;				digit12
;				digit34
;				digit56
;				gidit78
;				gidit9A
;
;		使用ワーク
;				hexw0	入力データ保存用
;				hexw1
;				hexw2
;				hexw3
;				shift	シフトカウンタ
;				bcdw0	補正処理ワーク
;				bcdw1
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BCD
			BCF		STATUS,C	;キャリーリセット
			MOVLW	020H		;シフトカウンタ初期化
			MOVWF	shift		;4バイト分32回の指定
			CLRF	digit12		;BCDデータエリア初期化
			CLRF	digit34
			CLRF	digit56
			CLRF	digit78
			CLRF	digit9A
			movf	hex0,W
			movwf	hexw0
			movf	hex1,W
			movwf	hexw1
			movf	hex2,W
			movwf	hexw2
			movf	hex3,W
			movwf	hexw3

			;変換ループ処理
loop
			RLF		hexw0,F		;16進データ左シフト
			RLF		hexw1,F
			RLF		hexw2,F
			RLF		hexw3,F
			RLF		digit12,F	;BCDデータ左シフト
			RLF		digit34,F
			RLF		digit56,F
			RLF		digit78,F
			RLF		digit9A,F
			DECFSZ	shift,F		;
			GOTO	adjst		;BCD調整処理へ
			RETURN

			;BCDデータ全桁補正処理
adjst
			MOVF	digit12,W	;digit12
			CALL	adjbcd
			MOVWF	digit12
			MOVF	digit34,W	;digit34
			CALL	adjbcd
			MOVWF	digit34
			MOVF	digit56,W	;digit56
			CALL	adjbcd
			MOVWF	digit56
			MOVF	digit78,W	;digit78
			CALL	adjbcd
			MOVWF	digit78
			MOVF	digit9A,W	;digit9A
			CALL	adjbcd
			MOVWF	digit9A
			GOTO	loop

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			1バイト2桁分必要に応じて+3補正処理
;
;			入力		W_reg
;			出力		W_reg
;
;			使用ワーク	bcdw0
;					bcdw1
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
adjbcd
			MOVWF	bcdw0		;元データをbcdw0に保存
			MOVLW	3			;W=3
			ADDWF	bcdw0,W		;W=3+bcdw0
			MOVWF	bcdw1		;下桁を+3した上下桁をbcdw1に保存
			BTFSC	bcdw1,3		;if 下桁<7 then next_skip
			MOVWF	bcdw0		;下桁を+3した上下桁をbcdw0に保存

			MOVLW	030H		;W+30
			ADDWF	bcdw0,W		;W=上桁+3
			MOVWF	bcdw1		;それをいったんbcdw1に保存
			BTFSC	bcdw1,7		;if 上桁<7 then next_skip
			MOVWF	bcdw0		;上桁を+3した上下桁をbcdw0に保存
			MOVF	bcdw0,W		;W_regに入れてリターン
			RETURN


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
;			遅延時間サブルーチン	32MHZ用
;									Ver 1.0
;		1cycle	= 0.125us
;		使用レジスタ	= cnt2,cnt3
;		BSR		=0(BANK0)
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

wait100u						;呼び出しも含めて、100us
								;call is 2cycles
			clrf	BSR
			movlw	09h			;1
			movwf	cnt2		;1
			movlb	0h
;			nop
			nop					;3
w100u		nop					;
			call	wait10u		;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
			clrf	BSR
			call	wait10u
			call	wait10u
			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
			clrf	BSR
			movlw	05h
			movwf	cnt2
w5m			call	wait1m
			decfsz	cnt2,F
			goto	w5m
			return

wait10m							; 10ms
			clrf	BSR
			movlw	d'10'
			movwf	cnt2
w10m		call	wait1m
			decfsz	cnt2,F
			goto	w10m
			return

wait20m							; 20ms
			clrf	BSR
			movlw	d'20'
			movwf	cnt2
w20m		call	wait1m
			decfsz	cnt2,F
			goto	w20m
			return
wait50m							; 50ms
			clrf	BSR
			movlw	d'50'
			movwf	cnt2
w50m		call	wait1m
			decfsz	cnt2,F
			goto	w50m
			return

wait100m						; 100ms
			clrf	BSR
			movlw	d'100'
			movwf	cnt2
w100m		call	wait1m
			decfsz	cnt2,F
			goto	w100m
			return

wait500m						; 500ms
			clrf	BSR
			movlw	05h
			movwf	cnt3
w500m		call	wait100m
			decfsz	cnt3,F
			goto	w500m
			return

wait1s							; 1s
			clrf	BSR
			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
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
wait1m
			clrf	BSR
			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サイクル消費する
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

wait10u
			clrf	BSR
			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

wait05u
			clrf	BSR
			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

wait02u
			clrf	BSR
			movlw	04h			;2us=0.125us*16cycles
			movwf	cnt0		;
w02u0		decfsz	cnt0,F		;2+3*3+2+1+2=16cycles
			goto	w02u0
;			nop
			return				;
wait01u
			clrf	BSR			;1us=0.125us*8cycles
			nop					;2+4+2=8cycles
			nop
			nop
			return
;
;	1桁目のデータ配列
;	入力はWreg、出力もWreg
;
NMD1
			andlw	0FH			;下位4bit取り出し
			brw
			retlw	'0'			;
			retlw	'1'			;
			retlw	'2'			;
			retlw	'3'			;
			retlw	'4'			;
			retlw	'5'			;
			retlw	'6'			;
			retlw	'7'			;
			retlw	'8'			;
			retlw	'9'			;

;
;	2桁目のデータ配列
;	入力はWreg、出力もWreg
;
NMD2
			andlw	0FH			;下位4bit取り出し
			brw
			retlw	'0'			;
			retlw	'3'			;
			retlw	'6'			;
			retlw	'9'			;
			retlw	'2'			;
			retlw	'5'			;
			retlw	'8'			;
			retlw	'1'			;
			retlw	'4'			;
			retlw	'7'			;

;
;	3桁目のデータ配列
;	入力はWreg、出力もWreg
;
NMD3
			andlw	0FH			;下位4bit取り出し
			brw
			retlw	'9'			;
			retlw	'8'			;
			retlw	'7'			;
			retlw	'6'			;
			retlw	'5'			;
			retlw	'4'			;
			retlw	'3'			;
			retlw	'2'			;
			retlw	'1'			;
			retlw	'0'			;

;
;	4桁目のデータ配列
;	入力はWreg、出力もWreg
;
NMD4
			andlw	0FH			;下位4bit取り出し
			brw
			retlw	'0'			;
			retlw	'7'			;
			retlw	'4'			;
			retlw	'1'			;
			retlw	'8'			;
			retlw	'5'			;
			retlw	'2'			;
			retlw	'9'			;
			retlw	'6'			;
			retlw	'3'			;

NMD5		;ミニロト用 INPUT W=0-30,OUTPUT W=1-31
			andlw	01FH		;下位5bit取り出し
			brw
			retlw	.01			;W=0
			retlw	.06			;
			retlw	.11			;
			retlw	.16			;
			retlw	.21			;
			retlw	.26			;
			retlw	.31			;W=6
			retlw	.02			;
			retlw	.07			;
			retlw	.12			;
			retlw	.17			;
			retlw	.22			;
			retlw	.27			;W=0CH(12)
			retlw	.03			;
			retlw	.08			;
			retlw	.13			;
			retlw	.18			;
			retlw	.23			;
			retlw	.28			;W=12H
			retlw	.04			;
			retlw	.09			;
			retlw	.14			;
			retlw	.19			;
			retlw	.24			;
			retlw	.29			;W=18H
			retlw	.05			;
			retlw	.10			;
			retlw	.15			;
			retlw	.20			;
			retlw	.25			;
			retlw	.30			;W=1E

NMD6		;LOTO6用 INPUT W=0-42,OUTPUT W=1-43
			andlw	03FH		;下位6bit取り出し
			brw
			retlw	.01			;W=0
			retlw	.09			;
			retlw	.16			;
			retlw	.23			;
			retlw	.30			;
			retlw	.37			;
			retlw	.02			;W=6
			retlw	.10			;
			retlw	.17			;
			retlw	.24			;
			retlw	.31			;
			retlw	.38			;
			retlw	.03			;W=0CH(12)
			retlw	.11			;
			retlw	.18			;
			retlw	.25			;
			retlw	.32			;
			retlw	.39			;
			retlw	.04			;W=12H
			retlw	.12			;
			retlw	.19			;
			retlw	.26			;
			retlw	.33			;
			retlw	.40			;
			retlw	.05			;W=18H
			retlw	.13			;
			retlw	.20			;
			retlw	.27			;
			retlw	.34			;
			retlw	.41			;
			retlw	.06			;W=1E
			retlw	.14			;
			retlw	.21			;
			retlw	.28			;
			retlw	.35			;
			retlw	.42			;
			retlw	.07			;W=24H
			retlw	.15			;
			retlw	.22			;
			retlw	.29			;
			retlw	.36			;
			retlw	.43			;
			retlw	.08			;W=2AH

NMD7		;LOTO7用 INPUT W=0-36,OUTPUT W=1-37
			andlw	03FH		;下位6bit取り出し
			brw
			retlw	.01			;W=0
			retlw	.08			;
			retlw	.14			;
			retlw	.20			;
			retlw	.26			;
			retlw	.32			;
			retlw	.02			;W=6
			retlw	.09			;
			retlw	.15			;
			retlw	.21			;
			retlw	.27			;
			retlw	.33			;
			retlw	.03			;W=0CH(12)
			retlw	.10			;
			retlw	.16			;
			retlw	.22			;
			retlw	.28			;
			retlw	.34			;
			retlw	.04			;W=12H
			retlw	.11			;
			retlw	.17			;
			retlw	.23			;
			retlw	.29			;
			retlw	.35			;
			retlw	.05			;W=18H
			retlw	.12			;
			retlw	.18			;
			retlw	.24			;
			retlw	.30			;
			retlw	.36			;
			retlw	.06			;W=1E
			retlw	.13			;
			retlw	.19			;
			retlw	.25			;
			retlw	.31			;
			retlw	.37			;
			retlw	.07			;W=24H

;	メッセージ エリア
MSG01		DT	"    NUMBERS     "
			DW	0H
MSG02		DT	"   SIMULATOR"
			DW	0H
MSG03		DT	"NANBA-KUN Ver1"
			DW	0H
MSG04		DT	"JA0QON NOV/2017"
			DW	0H
MSG05		DT	"   1ｹﾀ ｶｲﾃﾝﾁｭｳ"
			DW	0H
MSG06		DT	"  10ｹﾀ ｶｲﾃﾝﾁｭｳ"
			DW	0H
MSG07		DT	" 100ｹﾀ ｶｲﾃﾝﾁｭｳ"
			DW	0H
MSG08		DT	"1000ｹﾀ ｶｲﾃﾝﾁｭｳ"
			DW	0H
MSG09		DT	"NUMBERS4 "
			DW	0H
MSG10		DT	"0001"
			DW	0H
MSG11		DT	"0010"
			DW	0H
MSG12		DT	"0100"
			DW	0H
MSG13		DT	"1000"
			DW	0H
MSG14		DT	"NUMBERS3 "
			DW	0H
MSG15		DT	"001"
			DW	0H
MSG16		DT	"010"
			DW	0H
MSG17		DT	"100"
			DW	0H
MSG18		DT	"ﾀｲｷ ﾁｭｳ"
			DW	0H
MSG19		DT	"SELECT MODE"
			DW	0H
MSG20		DT	"PUSH START"
			DW	0H
MSG21		DT	"RES "
			DW	0H
MSG22		DT	"      "
			DW	0H
MSG23		DT	"LOTO5 "
			DW	0H
MSG24		DT	"LOTO6 "
			DW	0H
MSG25		DT	"LOTO7 "
			DW	0H
MSG26		DT	"RST?"
			DW	0H
MSG31		DT	"NO1 "
			DW	0H
MSG32		DT	"NO2 "
			DW	0H
MSG33		DT	"NO3 "
			DW	0H
MSG34		DT	"NO4 "
			DW	0H
MSG35		DT	"NO5 "
			DW	0H
MSG36		DT	"NO6 "
			DW	0H
MSG37		DT	"NO7 "
			DW	0H


			END


