;Program: Test reakcí pro Chipon 1
;*********************************
	LIST P = 16F84,	R = DEC
	#INCLUDE <P16F84.INC>
;---------------------------------
	ORG	H'2100'
 DE 2,4,14,1,15,17,15,0		;á (8)
 DE 10,4,14,16,16,17,14,0	;č (9)
 DE 2,4,12,4,4,4,14,0		;í (10)
 DE 6,6,17,17,17,19,13,0	;ů (11)
 DE 10,4,14,17,30,16,14,0	;ě (12)
 DE 2,4,17,17,15,1,14,0		;ý (13)
 DE 10,4,14,16,14,1,30,0	;š (14)
 DE 0,0,0,0,0,0,0,255		;první rekord 255 mS

 __CONFIG   _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
;*********************************
RAM	EQU	H'0C'
;---------------------------------
RBF	EQU	RAM
RBF_1	EQU	RAM+1
NUM	EQU	RAM+2
NUM_1	EQU	RAM+3
TMP	EQU	RAM+4
TM_0	EQU	RAM+5
TM_1	EQU	RAM+6
TM_2	EQU	RAM+7
POM	EQU	RAM+8
CGADR	EQU	RAM+9
ADRDD	EQU	RAM+10
ADRTX	EQU	RAM+11
RND	EQU	RAM+12
KOLO	EQU	RAM+13
P_H	EQU	RAM+14
HR_1	EQU	RAM+15
PRM	EQU	RAM+16
JEDN	EQU	RAM+17
DES	EQU	RAM+18
STA	EQU	RAM+19
CS_1	EQU	RAM+20
CS_0	EQU	RAM+21
cCS_1	EQU	RAM+22
cCS_0	EQU	RAM+23
PRUM	EQU	RAM+24
REK	EQU	RAM+25
HR_2	EQU	RAM+26

#define	Q	PORTB,0
#define	RS	PORTB,1	
#define	RW	PORTB,2
#define	E	PORTB,3
#define	BF	RBF,3
#define	ZVUK	PORTB,4
#define	B6	PORTB,6
#define	B7	PORTB,7
;xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
	ORG	0
	GOTO	START
	ORG	4
;****************************************************************************
				;přerušení
	CALL	VYMAZ		;vymazání displeje

	MOVFW	P_H
	XORLW	1
	BTFSS	STATUS,Z	;byli vybráni jeden nebo dva hráči?
	GOTO	$+6		;dva hráči
		
	MOVLW	131		;jeden hráč
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	82
	CALL	TEXT		;"Podvodníku!"
	GOTO	$-0		;věčná smyčka

	BTFSS	B7		;je stisknuto tlačítko hráče 1?
	GOTO	$+11		;ano

	CALL	HRACI		;"hráč 1  hráč 2"
	MOVLW	192
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	201
	CALL	TEXT		;"Vyhrál!"
	MOVLW	201
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	185
	CALL	TEXT		;"Podvádí"
	GOTO	$-0		;věčná smyčka

	CALL	HRACI		;"hráč 1  hráč 2"
	MOVLW	192
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	185
	CALL	TEXT		;"Podvádí"
	MOVLW	201
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	201
	CALL	TEXT		;"Vyhrál!"
	GOTO	$-0		;věčná smyčka


;****************************************************************************
;PODPROGRAMY
;****************************************************************************
INILCD	CALL	t15mS		;inicializace displeje
	BCF	RS
	BCF	RW
	CALL	A_OUT

	BSF	E
	MOVLW	B'00000011'
	MOVWF	PORTA
	BCF	E

	CALL	t4mS

	BSF	E
	MOVLW	B'00000011'
	MOVWF	PORTA
	BCF	E

	CALL	t100uS

	BSF	E
	MOVLW	B'00000011'
	MOVWF	PORTA
	BCF	E

	CALL	t100uS

	MOVLW	B'00101000'
	CALL	WRPRI

	MOVLW	B'00001000'
	CALL	WRPRI

	MOVLW	B'00001100'
	CALL	WRPRI

	MOVLW	B'00000110'
	CALL	WRPRI

	RETURN
;----------------------------------------------------------------------------
WRDATA	BSF	RS		;nastavení bitu RS pro zápis dat
	GOTO	WRI
WRPRI	BCF	RS		;nastavení bitů RS a RW pro zápis příkazu
WRI	BCF	RW
	MOVWF	TMP
	CALL	A_OUT		;portA jako výstup
	SWAPF	TMP,W
	BSF	E
	MOVWF	PORTA
	BCF	E
	MOVFW	TMP
	BSF	E
	MOVWF	PORTA
	BCF	E
	CALL	T_BF		;testování bitu BF
	RETURN
;----------------------------------------------------------------------------
T_BF	BCF	RS		;provede test bitu BF (je-li operace hotova)
	BSF	RW
	CALL	A_IN
T_BF1	BSF	E
	MOVFW	PORTA
	MOVWF	RBF
	BCF	E
	NOP
	BSF	E
	MOVFW	PORTA
	MOVWF	RBF_1
	BCF	E
	BTFSC	BF
	GOTO	T_BF1
;----------------------------------------------------------------------------
A_OUT	MOVLW	B'11110000'	;port a jako výstup
	GOTO	$+2
A_IN	MOVLW	B'11111111'	;port a jako vstup
	BSF	STATUS,RP0
	MOVWF	TRISA
	BCF	STATUS,RP0
	RETURN
;****************************************************************************
t15mS	MOVLW	49		;doba 15 milisekund
	MOVWF	TM_1
	GOTO	$+3
t4mS	MOVLW	14		;doba 4 milisekund
	MOVWF	TM_1
	MOVLW	255
	MOVWF	TM_2
	DECFSZ	TM_2,F
	GOTO	$-1
	DECFSZ	TM_1,F
	GOTO	$-5
	RETURN
;----------------------------------------------------------------------------
t100uS	MOVLW	83		;doba 100 mikrosekund
	MOVWF	TM_1
	DECFSZ	TM_1,F
	GOTO	$-1
	RETURN
;----------------------------------------------------------------------------
t1mS	MOVLW	2		;vyrovnávací smyčka 1 mS
	MOVWF	TM_1
	MOVLW	163
	MOVWF	TM_2
	DECFSZ	TM_2,F
	GOTO	$-1
	DECFSZ	TM_1,F
	GOTO	$-5
	RETURN
;----------------------------------------------------------------------------
t500mS	CLRF	TM_2		;doba 0,5 sekundy
	CLRF	TM_1
	NOP
	DECFSZ	TM_1,F
	GOTO	$-2
	NOP
	DECFSZ	TM_1,F
	GOTO	$-2
	DECFSZ	TM_2,F
	GOTO	$-7
	RETURN
;----------------------------------------------------------------------------
t4S	MOVLW	8		;doba 4 sekund
	GOTO	$+2
t2S	MOVLW	4		;doba 2 sekund
	MOVWF	TM_0
	CALL	t500mS
	DECFSZ	TM_0,F
	GOTO	$-2
	RETURN
;----------------------------------------------------------------------------
WRITE	BSF	STATUS,RP0	;zápis do paměti EEPROM
	BSF	EECON1,WREN
	MOVLW	H'55'
	MOVWF	EECON2
	MOVLW	H'AA'
	MOVWF	EECON2
	BSF	EECON1,WR
	BTFSC	EECON1,WR
	GOTO	$-1
	BCF	EECON1,WREN
	BCF	STATUS,RP0
	RETURN
;----------------------------------------------------------------------------
CTENI	BSF	STATUS,RP0	;čtení z paměti EEPROM
	BSF	EECON1,RD
	BCF	STATUS,RP0
	MOVFW	EEDATA
	RETURN
;----------------------------------------------------------------------------
TEXT	MOVWF	ADRTX		;provede zápis textu na vybranou adresu
TEXT1	CALL	KOD
	MOVWF	POM
	MOVF	POM,F
	BTFSC	STATUS,Z
	RETURN
	CALL	WRDATA
	INCF	ADRTX,F
	MOVFW	ADRTX
	GOTO	TEXT1

;----------------------------------------------------------------------------
CZ	CLRF	EEADR		;zápis češtiny do CG RAM
	MOVLW	B'01000000'
	CALL	WRPRI
CZ1	BSF	STATUS,RP0
	BSF	EECON1,RD
	BCF	STATUS,RP0
	MOVFW	EEDATA
	CALL	WRDATA
	INCF	EEADR,F
	BTFSC	EEADR,6
	RETURN
	GOTO	CZ1

;----------------------------------------------------------------------------
PIP	MOVLW	25		;pípnutí při stisku klávesy
	MOVWF	TM_2
	BSF	ZVUK
	CALL	P_1
	BCF	ZVUK
	CALL	P_1
	DECFSZ	TM_2,F
	GOTO	$-5
	RETURN

P_1	MOVLW	100
	MOVWF	TM_0
	MOVLW	150
	MOVWF	TM_1
	DECFSZ	TM_1,F
	GOTO	$-1
	DECFSZ	TM_0,F
	GOTO	$-1
	RETURN
;----------------------------------------------------------------------------
POMALU	CALL	VYMAZ		;zapíše text při pomalé reakci větší než 255 mS
	MOVLW	129
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	112
	CALL	TEXT		;"Pomalá reakce!"
	MOVLW	195
	GOTO	$-0		;nekonečná smyčka

;----------------------------------------------------------------------------
RND_T	CALL	t500mS		;doba dle obsahu RND
	DECFSZ	RND,F
	GOTO	$-2
	RETURN

;----------------------------------------------------------------------------
VYMAZ	MOVLW	1		;vymazání displeje
	CALL	WRPRI
	RETURN

;----------------------------------------------------------------------------
V_RND	MOVFW	TMR0		;získání náhodného čísla 0-255
	ANDLW	B'00001111'
	MOVWF	RND		;úprava náhodného čísla 0-15
	CALL	KODER
	MOVWF	RND		;registr RND = náhodné číslo 6-16
	RETURN	

;----------------------------------------------------------------------------
ZAPIS	CALL	WRPRI
	MOVLW	48		;převede registr NUM na jednotky,desítky a sta
	MOVWF	DES
	MOVWF	STA
	MOVLW	100
	SUBWF	NUM,W
	BTFSS	STATUS,C
	GOTO	$+4
	MOVWF	NUM
	INCF	STA,F
	GOTO	$-6
	MOVLW	10
	SUBWF	NUM,W
	BTFSS	STATUS,C
	GOTO	$+4
	MOVWF	NUM
	INCF	DES,F
	GOTO	$-6
	MOVFW	NUM
	ADDLW	48
	MOVWF	JEDN

	MOVFW	STA
	CALL	WRDATA
	MOVFW	DES
	CALL	WRDATA
	MOVFW	JEDN
	CALL	WRDATA
	MOVLW	32
	CALL	WRDATA
	MOVLW	109
	CALL	WRDATA		;"m"
	MOVLW	83
	CALL	WRDATA		;"S"

	RETURN

;----------------------------------------------------------------------------
HRACI	MOVLW	129
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	239
	CALL	TEXT		;"hráč-1  hráč-2"
	RETURN

;----------------------------------------------------------------------------
ZNOVA	CLRW
	MOVWF	PORTA
	BTFSS	Q		;je stisknuté tlačítko ENTER?
	GOTO	$-3		;ne
	CALL	VYMAZ		;vymazání displeje

ZN_1	MOVLW	128
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	209
	CALL	TEXT		;"Dáme novou hru?"
	
	MOVLW	198
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	225
	CALL	TEXT		;"ano"
	
	CALL	PIP
	CALL	t500mS		;doba 500 milisekund

	CLRW
	MOVWF	PORTA
	BTFSC	Q		;je stisknuté tlačítko ENTER?
	RETLW	1		;ano
	MOVLW	1		;ne
	MOVWF	PORTA
	BTFSS	Q		;je stisknuté tlačítko set?
	GOTO	$-7		;ne
	MOVLW	198		;ano
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	229
	CALL	TEXT		;"ne "
	
	CALL	PIP
	CALL	t500mS		;doba 500 milisekund

	CLRW
	MOVWF	PORTA
	BTFSC	Q		;je stisknuté tlačítko ENTER?
	RETLW	0		;ano
	MOVLW	1		;ne
	MOVWF	PORTA
	BTFSS	Q		;je stisknuté tlačítko SET?
	GOTO	$-7		;ne
	GOTO	ZN_1		;ano

;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;PROGRAM
;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
	
START	BSF	STATUS,RP0	;banka 1
	MOVLW	B'11100001'
	MOVWF	TRISB		;nastavení portu B
	MOVLW	B'01001000'
	MOVWF	OPTION_REG	;nastavení registru OPTION_REG
	BCF	STATUS,RP0	;banka 0

	CALL	INILCD		;inicializace displeje
	CALL	CZ		;zavedení češtiny

	CALL	VYMAZ		;nulování displeje

	CLRW
	CALL	TEXT		;"*** Program ****"
	MOVLW	192
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	17
	CALL	TEXT		;"* Test reakcí **"
;----------------------------------------------------------------------------
	CLRW
	MOVWF	PORTA
	BTFSC	Q		;bylo stisknuto tlačítko ENTER?
	GOTO	V_P_H		;ano

	MOVLW	7		;ne
	MOVWF	PORTA
	BTFSS	Q		;bylo stisknuto tlačítko MOD?
	GOTO	$-7		;ne
;----------------------------------------------------------------------------	
	CALL	VYMAZ		;ano

	MOVLW	129
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	105
	CALL	TEXT		;"Rekord"
	MOVLW	136
	CALL	WRPRI		;nastavení adresy DDRAM
	
	MOVLW	63		;načtení rekordu z adresy 63 EEPROM
	MOVWF	EEADR		;zadání adresy EEPROM
	CALL	CTENI
	MOVWF	NUM
	MOVLW	136
	CALL	ZAPIS

	MOVLW	193
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	127
	CALL	TEXT		;"Vymazat?"

	MOVLW	202
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	229
	CALL	TEXT		;"ne "
	CALL	PIP

	CALL	t500mS		;doba 0,5 sekundy
	
	CLRW
	MOVWF	PORTA
	BTFSC	Q		;je stisknuté tlačítko ENTER?
	GOTO	V_P_H		;ano
	MOVLW	1		;ne
	MOVWF	PORTA
	BTFSS	Q		;je stisknuté tlačítko SET?
	GOTO	$-7		;ne
	MOVLW	202		;ano
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	225
	CALL	TEXT		;"ano"
	CALL	PIP

	CALL	t500mS		;doba 0,5 sekundy

	CLRW
	MOVWF	PORTA
	BTFSC	Q		;je stisknuté tlačítko ENTER?
	GOTO	NUL_R		;ano
	MOVLW	1		;ne
	MOVWF	PORTA
	BTFSS	Q		;je stisknuté tlačítko SET?
	GOTO	$-7		;ne
	GOTO	$-28		;ano

NUL_R	CALL	PIP
	MOVLW	136		;nulování rekordu
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	45
	CALL	WRDATA		;"-"
	MOVLW	45
	CALL	WRDATA		;"-"
	MOVLW	45
	CALL	WRDATA		;"-"

	MOVLW	255		
	MOVWF	EEDATA		;zapíše číslo 255 na adresu 63 EEPROM
	MOVLW	63
	MOVWF	EEADR
	CALL	WRITE

	CALL	t500mS		;doba 0,5 sekundy
;----------------------------------------------------------------------------

V_P_H	CALL	V_RND		;vývěr náhodného čísla
	CALL	VYMAZ		;nulování displeje

	MOVLW	130
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	34
	CALL	TEXT		;"Počet hráčů?"
	MOVLW	197
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	233
	CALL	TEXT		;">   <"

VPH_1	MOVLW	199
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	49
	CALL	WRDATA		;"1"
	CALL	PIP		;pípnutí

	CALL	t500mS		;doba 0,5 S

	CLRW	
	MOVWF	PORTA
	BTFSC	Q		;je stisknuto tlačítko ENTER?
	GOTO	HRAC_1		;ano

	MOVLW	1		;ne
	MOVWF	PORTA
	BTFSS	Q		;je stisknuto tlačítko SET?
	GOTO	$-7		;ne

	MOVLW	199		;ano
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	50
	CALL	WRDATA		;"2"
	CALL	PIP		;ano (pípnutí)

	CALL	t500mS		;doba 500 milisekund

	CLRW	
	MOVWF	PORTA
	BTFSC	Q		;je stisknuto tlačítko ENTER?
	GOTO	HRAC_2		;ano

	MOVLW	1		;ne
	MOVWF	PORTA
	BTFSS	Q		;je stisknuto tlačítko SET?
	GOTO	$-7		;ne
	GOTO	VPH_1		;ano

;----------------------------------------------------------------------------
HRAC_1	MOVLW	1
	MOVWF	P_H		;registr P_H = 1
	MOVLW	49
	MOVWF	KOLO		;registr KOLO = 49
	CLRF	PRM		;registr PRM = 0
	BCF	ZVUK		;zvukový bit = 0
	CLRF	CS_1		;vynulování celkového součtu
	CLRF	CS_0

H_1	MOVFW	KOLO
	XORLW	59
	BTFSC	STATUS,Z	;je už více než deset kol?
	GOTO	V_VYH		;ano (provést velké vyhodnocení)

	CALL	VYMAZ		;nulování displeje

	MOVFW	KOLO
	XORLW	58
	BTFSS	STATUS,Z	;je desáté kolo?
	GOTO	$+6		;ne
	MOVLW	193
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	67
	CALL	TEXT		;"Poslední kolo!"
	GOTO	$+7

	MOVLW	197
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVFW	KOLO
	CALL	WRDATA		;zápis počtů kol
	MOVLW	61
	CALL	TEXT		;".kolo"

	CALL	t2S		;doba 2 sekundy

	MOVLW	129
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	47
	CALL	TEXT		;"**> START <**"

	MOVLW	B'10001000'
	MOVWF	INTCON		;přerušení povoleno od změny B6 nebo B7
	CALL	RND_T		;náhodný čas 3-8 sekund
	CLRF	HR_1		;vynulování registru HR_1
	CLRF	INTCON		;přerušení zakázáno

HRA_1	BSF	ZVUK		;zvukový bit = 1
	BTFSS	B7		;je stisknuto tlačítko 1.hráče?
	GOTO	M_VYH		;ano, proveď malé vyhodnocení
	INCF	HR_1,F		;ne, registr HR_1 = (HR_1 + 1)
	BTFSC	STATUS,Z	;nastalo přetečení registru HR_1?
	CALL	POMALU		;ano
	CALL	t1mS		;ne, proveď vyronávací časovou smyčku (1mS)
	NOP
	NOP
	NOP
	
	BCF	ZVUK		;zvukový bit = 0
	BTFSS	B7		;je stisknuto tlačítko 1.hráče?
	GOTO	M_VYH		;ano, poveď malé vyhodnocení
	INCF	HR_1,F		;ne, registr HR_1 = (HR_1 + 1)
	BTFSC	STATUS,Z	;nastalo přetečení registru HR_1?
	CALL	POMALU		;ano
	CALL	t1mS		;ne, proveď vyronávací časovou smyčku (1mS)
	NOP
	GOTO	HRA_1		;načítáme stále dokola

;----------------------------------------------------------------------------
M_VYH	CALL	V_RND		;výroba náhodného čísla (6-16)

	MOVFW	CS_0		;součet čísel CS_1/CS_0 + HR_1 = CS_1/CS_0
	ADDWF	HR_1,W
	BTFSC	STATUS,C
	INCF	CS_1,F
	MOVWF	CS_0

	MOVFW	CS_0		;kopírování čísla CS_1/CS_0 do cCS_1/cCS_0
	MOVWF	cCS_0
	MOVFW	CS_1
	MOVWF	cCS_1

	INCF	KOLO,F		;načítání počtu kol
	INCF	PRM,F		;načítání čísla průměru

	MOVFW	HR_1		;v HR_1 je čas reakce (v mS)
	MOVWF	NUM

	CALL	VYMAZ		;nulování displeje
	MOVLW	132
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	94
	CALL	TEXT		;"čas"

	MOVLW	136
	CALL	ZAPIS		;zápis času

	CLRF	NUM		;výpočet průměru
	MOVFW	PRM
	SUBWF	cCS_0,F
	BTFSC	STATUS,C
	GOTO	$+5
	MOVLW	1
	SUBWF	cCS_1,F
	BTFSS	STATUS,C
	GOTO	$+4
	INCF	NUM,F
	BTFSS	STATUS,Z
	GOTO	$-10

	MOVFW	NUM
	MOVWF	PRUM		;zkopíruje hodnotu průměru do registru PRUM

	MOVLW	193
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	98
	CALL	TEXT		;"Průměr"
	MOVLW	200
	CALL	ZAPIS		;zápis stovek,desítek a jednotek (průměru)

	CALL	t4S		;doba 4 sekundy
	GOTO	H_1

;----------------------------------------------------------------------------
V_VYH	MOVLW	63
	MOVWF	EEADR		;nastavení adresy EEPROM
	CALL	CTENI		;čte data z adresy EEPROM
	MOVFW	EEDATA
	MOVWF	NUM
	MOVFW	NUM
	MOVWF	REK	

	MOVLW	129
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	105
	CALL	TEXT		;"Rekord"

	MOVLW	136
	CALL	ZAPIS		;zápis rekordu

	CALL	t2S		;doba 2 sekundy
	CALL	VYMAZ		;vymazání displeje

	MOVFW	PRUM
	SUBWF	REK,W		;rekord - průměr
	BTFSS	STATUS,C	;je výsledek menší než nula?
	GOTO	SKODA		;ne
	
	MOVLW	129		;ano
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	136
	CALL	TEXT		;"** Výborně **"
	MOVLW	192
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	150
	CALL	TEXT		;"* Nový rekord *

	MOVFW	PRUM		;zápis nového rekordu do paměti EEPROM
	MOVWF	EEDATA		
	MOVLW	63
	MOVWF	EEADR		;výchozí adresa EEPROM = 61
	CALL	WRITE		;zápis stovek na adresu 61 EEPROM

	CALL	ZNOVA		;budeme pokračovat znova?
	XORLW	0
	BTFSS	STATUS,Z
	GOTO	HRAC_1		;ano
	GOTO	KONEC		;ne

SKODA	MOVLW	133
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	166
	CALL	TEXT		;"škoda"
	MOVLW	194
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	172
	CALL	TEXT		;"Nepovedlo se"
	GOTO	$-13

;----------------------------------------------------------------------------

HRAC_2	MOVLW	2
	MOVWF	P_H		;registr P_H = 2
	MOVLW	48
	MOVWF	HR_1		;číslo 0 do registru hráče 1
	MOVWF	HR_2		;číslo 0 do registru hráče 2

ZAS	CALL	V_RND		;získání náhodného čísla (3-8)
	CALL	VYMAZ		;vymazání displeje

	CALL	HRACI		;"hráč-1  hráč-2"
	MOVLW	193
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	233
	CALL	TEXT		;">   <"
	MOVLW	195
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVFW	HR_1
	CALL	WRDATA		;počet bodů hráče 1
	MOVLW	202
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	233
	CALL	TEXT		;">   <"
	MOVLW	204
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVFW	HR_2
	CALL	WRDATA		;počet bodů hráče 2

	CALL	t4S		;doba 4 sekundy
	CALL	VYMAZ		;vymazání displeje

	MOVLW	129
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	47
	CALL	TEXT		;"**> START <**"

	MOVLW	B'10001000'
	MOVWF	INTCON		;přerušení povoleno od změny B6 nebo B7
	CALL	RND_T		;náhodný čas 3-8 sekund
	CLRF	INTCON		;přerušení zakázáno

	BSF	ZVUK
	BTFSS	B7		;je stisknuté tlačítko na portu B7?
	GOTO	MV_H1		;ano
	CALL	t1mS		;ne - 1mS

	BCF	ZVUK
	BTFSS	B6		;je stisknuté tlačítko na portu B6?
	GOTO	MV_H2		;ano
	CALL	t1mS		;ne - 1mS
	GOTO	$-8

MV_H1	INCF	HR_1,F		;registr (hráče 1) + 1
	MOVFW	HR_1
	XORLW	58
	BTFSC	STATUS,Z	;má už deset bodů?
	GOTO	VV_H1		;ano
	GOTO	ZAS		;ne

MV_H2	INCF	HR_2,F		;registr (hráče 2) + 1
	MOVFW	HR_2
	XORLW	58
	BTFSC	STATUS,Z	;má už deset bodů?
	GOTO	VV_H2		;ano
	GOTO	ZAS		;ne - proveď zvukovou smyčku znovu

VV_H1	CALL	VYMAZ
	CALL	t500mS
	CALL	PIP
	CALL	HRACI		;"hráč-1  hráč-2"
	MOVLW	192
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	201
	CALL	TEXT		;"Vyhrál!"
	MOVLW	201
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	193
	CALL	TEXT		;"Prohrál"
	GOTO	$+12

VV_H2	CALL	VYMAZ
	CALL	t500mS
	CALL	PIP
	CALL	HRACI		;"hráč-1  hráč-2"
	MOVLW	192
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	193
	CALL	TEXT		;"Prohrál"
	MOVLW	201
	CALL	WRPRI		;nastavení adresy DDRAM
	MOVLW	201
	CALL	TEXT		;"Vyhrál!"

	CALL	ZNOVA		;budeme v programu pokračovat znova?
	XORLW	0
	BTFSS	STATUS,Z
	GOTO	HRAC_2		;ano

KONEC	CALL	VYMAZ		;ne
	GOTO	$-0
	
;****************************************************************************
	ORG	744		;nastavení adresy programu
KODER	MOVLW	2
	MOVWF	PCLATH		;registr PCLATH = 2
	MOVFW	RND
	ADDWF	PCL,F		;skok na adresu programu dle velikosti registru RND
	RETLW	6	;0
	RETLW	7	;1
	RETLW	8	;2
	RETLW	9	;3
	RETLW	10	;4
	RETLW	11	;5
	RETLW	12	;6
	RETLW	13	;7
	RETLW	14	;8
	RETLW	15	;9
	RETLW	16	;A
	RETLW	6	;B
	RETLW	8	;C
	RETLW	10	;D
	RETLW	12	;E
	RETLW	14	;F

KOD	MOVLW	3
	MOVWF	PCLATH		;registr PCLATH = 3
	MOVFW	ADRTX
	ADDWF	PCL,F		;skok na adresu programu dle velikosti registru ADRTX
	RETLW	42	;*
	RETLW	42	;*
	RETLW	42	;*
	RETLW	32	;mezera
	RETLW	80	;P
	RETLW	114	;r
	RETLW	111	;o
	RETLW	103	;g
	RETLW	114	;r
	RETLW	97	;a
	RETLW	109	;m
	RETLW	32	;mezera
	RETLW	42	;*
	RETLW	42	;*
	RETLW	42	;*
	RETLW	42	;*
	RETLW	0
	RETLW	42	;*
	RETLW	32	;mezera
	RETLW	84	;T
	RETLW	101	;e
	RETLW	115	;s
	RETLW	116	;t
	RETLW	32	;mezera
	RETLW	114	;r
	RETLW	101	;e
	RETLW	97	;a
	RETLW	107	;k
	RETLW	99	;c
	RETLW	10	;í
	RETLW	32	;mezera
	RETLW	42	;*
	RETLW	42	;*
	RETLW	0
	RETLW	80	;P
	RETLW	111	;o
	RETLW	9	;č
	RETLW	101	;e
	RETLW	116	;t
	RETLW	32	;mezera
	RETLW	104	;h
	RETLW	114	;r
	RETLW	8	;á
	RETLW	9	;č
	RETLW	11	;ů
	RETLW	63	;?
	RETLW	0
	RETLW	42	;*
	RETLW	42	;*
	RETLW	62	;>
	RETLW	32	;mezera
	RETLW	83	;S
	RETLW	84	;T
	RETLW	65	;A
	RETLW	82	;R
	RETLW	84	;T
	RETLW	32	;mezera
	RETLW	60	;<
	RETLW	42	;*
	RETLW	42	;*
	RETLW	0
	RETLW	46	;.
	RETLW	107	;k
	RETLW	111	;o
	RETLW	108	;l
	RETLW	111	;o
	RETLW	0
	RETLW	80	;P
	RETLW	111	;o
	RETLW	115	;s
	RETLW	108	;l
	RETLW	101	;e
	RETLW	100	;d
	RETLW	110	;n
	RETLW	10	;í
	RETLW	32	;mezera
	RETLW	107	;k
	RETLW	111	;o
	RETLW	108	;l
	RETLW	111	;o
	RETLW	33	;!
	RETLW	0
	RETLW	80	;P
	RETLW	111	;o
	RETLW	100	;d
	RETLW	118	;v
	RETLW	111	;o
	RETLW	100	;d
	RETLW	110	;n
	RETLW	10	;í
	RETLW	107	;k
	RETLW	117	;u
	RETLW	33	;!
	RETLW	0
	RETLW	9	;č
	RETLW	97	;a
	RETLW	115	;s
	RETLW	0
	RETLW	80	;P
	RETLW	114	;r
	RETLW	11	;ů
	RETLW	109	;m
	RETLW	12	;ě
	RETLW	114	;r
	RETLW	0
	RETLW	82	;R
	RETLW	101	;e
	RETLW	107	;k
	RETLW	111	;o
	RETLW	114	;r
	RETLW	100	;d
	RETLW	0
	RETLW	80	;P
	RETLW	111	;o
	RETLW	109	;m
	RETLW	97	;a
	RETLW	108	;l
	RETLW	8	;á
	RETLW	32	;mezera
	RETLW	114	;r
	RETLW	101	;e
	RETLW	97	;a
	RETLW	107	;k
	RETLW	99	;c
	RETLW	101	;e
	RETLW	33	;!
	RETLW	0
	RETLW	86	;V
	RETLW	121	;y
	RETLW	109	;m
	RETLW	97	;a
	RETLW	122	;z
	RETLW	97	;a
	RETLW	116	;t
	RETLW	63	;?
	RETLW	0
	RETLW	42	;*
	RETLW	42	;*
	RETLW	32	;mezera
	RETLW	86	;V
	RETLW	13	;ý
	RETLW	98	;b
	RETLW	111	;o
	RETLW	114	;r
	RETLW	110	;n
	RETLW	12	;ě
	RETLW	32	;mezera
	RETLW	42	;*
	RETLW	42	;*
	RETLW	0
	RETLW	42	;*
	RETLW	32	;mezera
	RETLW	78	;N
	RETLW	111	;o
	RETLW	118	;v
	RETLW	13	;ý
	RETLW	32	;mezera
	RETLW	114	;r
	RETLW	101	;e
	RETLW	107	;k
	RETLW	111	;o
	RETLW	114	;r
	RETLW	100	;d
	RETLW	32	;mezera
	RETLW	42	;*
	RETLW	0
	RETLW	14	;š
	RETLW	107	;k
	RETLW	111	;o
	RETLW	100	;d
	RETLW	97	;a
	RETLW	0
	RETLW	78	;N
	RETLW	101	;e
	RETLW	112	;p
	RETLW	111	;o
	RETLW	118	;v
	RETLW	101	;e
	RETLW	100	;d
	RETLW	108	;l
	RETLW	111	;o
	RETLW	32	;mezera
	RETLW	115	;s
	RETLW	101	;e
	RETLW	0
	RETLW	80	;P
	RETLW	111	;o
	RETLW	100	;d
	RETLW	118	;v
	RETLW	8	;á
	RETLW	100	;d
	RETLW	10	;í
	RETLW	0
	RETLW	80	;P
	RETLW	114	;r
	RETLW	111	;o
	RETLW	104	;h
	RETLW	114	;r
	RETLW	8	;á
	RETLW	108	;l
	RETLW	0
	RETLW	86	;V
	RETLW	121	;y
	RETLW	104	;h
	RETLW	114	;r
	RETLW	8	;á
	RETLW	108	;l
	RETLW	33	;!
	RETLW	0
	RETLW	68	;D
	RETLW	8	;á
	RETLW	109	;m
	RETLW	101	;e
	RETLW	32	;mezera
	RETLW	110	;n
	RETLW	111	;o
	RETLW	118	;v
	RETLW	111	;o
	RETLW	117	;u
	RETLW	32	;mezera
	RETLW	104	;h
	RETLW	114	;r
	RETLW	117	;u
	RETLW	63	;?
	RETLW	0
	RETLW	97	;a
	RETLW	110	;n
	RETLW	111	;o
	RETLW	0
	RETLW	110	;n
	RETLW	101	;e
	RETLW	32	;mezera
	RETLW	0
	RETLW	62	;>
	RETLW	32	;mezera
	RETLW	32	;mezera
	RETLW	32	;mezera
	RETLW	60	;<
	RETLW	0	
	RETLW	104	;h
	RETLW	114	;r
	RETLW	8	;á
	RETLW	9	;č
	RETLW	45	;-
	RETLW	49	;1
	RETLW	32	;mezera
	RETLW	32	;mezera
	RETLW	104	;h
	RETLW	114	;r
	RETLW	8	;á
	RETLW	9	;č
	RETLW	45	;-
	RETLW	50	;2
	RETLW	0

	END
