;######################################################
;　　　　FS-A1FX EPROMアドレス切り替え回路

;7p(GP0) /WAIT出力
;6p(GP1) キーボードX7入力　Lレベルで"B"キー押下
;5p(GP2) EPROM A14出力　Hでベーシッ君ぷらすモード
;4p(GP3) リセット信号入力
;3p(GP4) キーボードY2出力　キースキャン時=L
;2p(GP5) NC
;######################################################

	list p=12f629
	include <p12f629.inc>
	__config _MCLRE_OFF & _CP_OFF & _WDT_OFF & _INTRC_OSC_NOCLKOUT




;%%%%%%%%%% PIC 初期設定

RESET
	ORG	00H
	GOTO	START

START
	bsf	STATUS, RP0	;bank1

	call	3FFh		;補正値取得
	movwf	OSCCAL		;内部OSC校正

	movlw	b'00101010'	;GP0,GP2,GP4をoutput
	movwf	TRISIO

	movlw	b'00001000'	;GP3(/RESET)をpull up
	movwf	WPU

	movlw	b'00000000'	;GPIO Pull upイネーブル(bit7=0)
	movwf	OPTION_REG

	bcf	STATUS, RP0	;bank0

	movlw	b'00000000'	;割込みディセーブル
	movwf	INTCON

	movlw	b'00000111'	;コンパレータOFF(GPIO 0,1=digital)
	movwf	CMCON



;%%%%%%%%%% I/O 初期設定

SETUP
	MOVLW	11H		;0001 0001
	MOVWF	GPIO		;Y2出力,/WAITをHにする

;%%%%%%%%%% メインプログラム

;#### リセット信号監視
LOOP
	BTFSC	GPIO,3		;リセット信号アクティブなら２つ進む
 	GOTO 	LOOP
LOOP2	BTFSS	GPIO,3		;リセット信号解除なら２つ進む
	GOTO	LOOP2

;#### パルス出力

	MOVLW	00H		;0000 0000	；Y2=L,/WAIT=L　パルス出力
	MOVWF	GPIO
	NOP			;少しだけWAIT
	NOP
	NOP


;##判定

	BTFSS	GPIO,1		;X7＝HならBキー押されていない　２つ進む
	GOTO	BASICN

;##　FMBIOSモード
	MOVLW	11H		;0001 0001	；パルス出力解除＆A14=L
	MOVWF	GPIO
	GOTO	LOOP		;次のリセットが押されるまで待機

;##　べーしっ君モード	
BASICN	MOVLW	15H		;0001 0101	；パルス出力解除＆A14=H
	MOVWF	GPIO
	GOTO	LOOP		;次のリセットが押されるまで待機


	END



