;QOPVNQXNxH̖vOQ
;Q̃rbgAlphaʂ̃rbgBetaA
;̈ʒurbgGammaŒuB
;-------------  
; ȉ MAIN ́Aӂɉ悤
; 삵BSRHĂяoR[h
MAIN START
	LAD GR1,ALP
	LD GR2,BET
	LD GR3,N
	LD GR4,GAM
	CALL BREP
	ST GR0,P
	RET
ALP	DC #00A0
	DC #00B0
BET	DC #A000
GAM 	DC #D000
N 	DC 4
P 	DS 1
    END
;---------------------
BREP 	START
	RPUSH
	CALL BSRH
	LD GR2,GR0
	JMI FIN
	LD GR6,=#FFFF ; }XN쐬
	SRL GR6,0,GR3
	XOR GR6,=#FFFF
	LD GR7,GR3 L ; GR7 <-- N
	LD GR3,=16
	SUBA GR3,GR2 ; GR3 <-- 16 - P
	JMI ONL2 ;
	JZE ONL2
	CPA GR3,GR7 ; (16 - P) and N Comparison
	JMI NEXT ; Qɂ܂鏈
	JUMP ONL1 ; v镔rbg񂪂Pڂ̂Ƃ
NEXT 	LD GR5,GR4 ; Gammaƃ}XNޔ
	LD GR7,GR6
	CALL S1 ; Pڂ̏
	LD GR4,GR5
	LD GR6,GR7
	SLL GR4,0,GR3 ; QڗpGamma̒
	SLL GR6,0,GR3 ; Qڗp}XN̒
	LAD GR1,1,GR1
	CALL S2 ; Qڂ̍ŏI
 	JUMP FIN
ONL1 	CALL S1
	JUMP FIN
ONL2 	LD GR2,=0 ; c@ @C
	SUBA GR2,GR3 ; GR2 <-- P - 16
	LAD GR1,1,GR1 ; ΏۂQڂɂāA
	CALL S1 ; Qڂ̏
FIN 	RPOP
	RET
S1	SRL GR4,0,GR2 ; Gamma̒
	SRL GR6,0,GR2 ; }XN̒
S2	LD GR2,0,GR1 ; Ώی̎o
	XOR GR6,=#FFFF
	AND GR2,GR6
	OR GR2,GR4 ; ₄@@C
	ST GR2,0,GR1
	RET
	END
;-----------------------------
BSRH 	START
    	RPUSH
	LD GR0,=-1
	LD GR6,=#FFFF ;
	SRL GR6,0,GR3
	XOR GR6,=#FFFF
	LD GR4,0,GR1 ; AA
	LD GR5,1,GR1
	LD GR1,=32
	SUBA GR1,GR3 ; gr1 <-- 32 - N
	LD GR3,GR1 ; gr3 <-- 32 - N
LP 	LD GR7,GR4
	AND GR7,GR6
	XOR GR7,GR2 ; o
	;LD GR7,GR7
	JZE FOUND ; ari
	SUBA GR1,=1
	JMI FIN ; nasi
	SLL GR4,1 ; shift aa right by 1bit
	SLL GR5,1
	JOV NEXT
	JUMP LP
NEXT 	OR GR4,=#0001
	JUMP LP
FOUND 	SUBA GR3,GR1 ; pp
	LD GR0,GR3
FIN 	RPOP
    RET
    END
;----------------------   -
