	.nolist
	#include "ion.inc"
	#include "Input.inc"
	.list
#ifdef TI83P
	.org	progstart-2
	.db	$BB,$6D

TEXT_MEM  = $8508
APD_BUF   = $86EC
TEXT_MEM2 = $8A3A

#else		
	.org progstart

TEXT_MEM  = $80c9
APD_BUF   = $8265
TEXT_MEM2 = $858f
#endif
	ret
	jr	nc,start
	.db	"Rock Paper Scissors v1.00",0

SmallX = TEXT_MEM
SmallY = TEXT_MEM+2
LargeX = TEXT_MEM+4
LargeY = TEXT_MEM+6
You = TEXT_MEM+8
OldYou = TEXT_MEM+10
Computer = TEXT_MEM+12
Outcome = TEXT_MEM+14

start:
	bcall(_clrlcdf)
	bcall(_grbufclr)
	bcall(_indicatorOff)
	ld hl,Title
	ld de,plotsscreen
	ld bc,768
	ldir
	bcall(_grbufcpy)
Starting:
	bcall(_grbufclr)
	ld a,4
	ld (Computer),a
	ld a,1
	ld (You),a
	ld a,0
	ld (OldYou),a
	bcall(_getkey)
	call Begin
	ret

Begin:
	call PutPics
	call Game
	ret

Game:
	call Sprites
	call PutText
	call Input
	ret

Input:
	ld a,0ffh 			;resets the keypad.
	out (1),a			;'Required syntax' :)
	ld a,0feh
	out (1),a
	in a,(1)
	cp kLeft
	jp z, NextLeft
	cp kRight
	jp z, NextRight
	ld a,0ffh
	out (1),a
	ld a,0fdh 			;Enable group 2.
	out (1),a 			
	in a,(1) 			;'Required Syntax'
	cp kClear
	jp z, Quit
	ld a,0ffh
	out (1),a
	ld a,0bfh
	out (1),a
	in a,(1)
	cp k2nd
	jp z, Chosen
	jp nz, Input
	ret

NextLeft:
	ld a,(You)
	ld (OldYou),a
	dec a
	ld (You),a
	ld a,(You)
	cp 0
	jp z,NoLeft
	call Pics
	ret

NextRight:
	ld a,(You)
	ld (OldYou),a
	inc a
	ld (You),a
	ld a,(You)
	cp 4
	jp z,NoRight
	call Pics
	ret

NoLeft:
	ld a,3
	ld (You),a
	call Pics
	ret

NoRight:
	ld a,1
	ld (You),a
	call Pics
	ret
	
Pics:
	call Delay
	ld a,(OldYou)
	cp 1
	jp z,RockGone
	cp 2
	jp z,PaperGone
	cp 3
	jp z,ScissorsGone
	ret

RockGone:
	call PutRock
	call Game
	ret

PaperGone:
	call PutPaper
	call Game
	ret

ScissorsGone:
	call PutScissors
	call Game
	ret

Chosen:
	call Delay
	call Delay
CompChoose:
	ld b,3
	call ionRandom
	cp 1
	jp z,ComputerRock
	cp 2
	jp z,ComputerPaper
	cp 3
	jp z,ComputerScissors
	jp nz,CompChoose
	call WinLose
	ret

WinLose:
	call PutText
	ld a,(You)
	cp 1
	jp z,RockYou
	cp 2
	jp z,PaperYou
	cp 3
	jp z,ScissorsYou
	ret

RockYou:
	ld a,(Computer)
	cp 1
	jp z,YouTie
	cp 2
	jp z,YouLose
	cp 3
	jp z,YouWin
	jp nz,Begin

PaperYou:
	ld a,(Computer)
	cp 1
	jp z,YouWin
	cp 2
	jp z,YouTie
	cp 3
	jp z,YouLose
	jp nz,Begin
	
ScissorsYou:
	ld a,(Computer)
	cp 1
	jp z,YouLose
	cp 2
	jp z,YouWin
	cp 3
	jp z,YouTie
	jp nz,Begin

YouWin:
	ld a,3
	ld (CURROW),a
	ld a,4
	ld (CURCOL),a
	ld hl,txtWin
	bcall(_puts)
	call Wins
	bcall(_getkey)
	call Stats
	ret

YouLose:
	ld a,3
	ld (CURROW),a
	ld a,4
	ld (CURCOL),a
	ld hl,txtLose
	bcall(_puts)
	call Losses
	bcall(_getkey)
	call Stats
	ret

YouTie:
	ld a,3
	ld (CURROW),a
	ld a,4
	ld (CURCOL),a
	ld hl,txtTie
	bcall(_puts)
	call Ties
	bcall(_getkey)
	call Stats
	ret

PutPics:
	call PutLeft
	call PutRight
	call PutComputer
	ret

PutText:
	ld a,0
	ld (CURCOL),a
	ld (CURROW),a
	ld hl,txtComputer
	bcall(_puts)
	ld a,12
	ld (CURCOL),a
	ld a,7
	ld (CURROW),a
	ld hl,txtYou
	bcall(_puts)
	ret

Sprites:
	ld a,(You)
	cp 1
	jp z,PutRock
	cp 2
	jp z,PutPaper
	cp 3
	jp z,PutScissors
	ret

PutLeft:
	ld b,8
	ld l,54
	ld a,12
	ld ix,Left
	call ionPutSprite
	call ionFastCopy
	ret

PutRight:
	ld b,8
	ld l,54
	ld a,45
	ld ix,Right
	call ionPutSprite
	call ionFastCopy
	ret

PutComputer:
	ld b,16
	ld c,2
	ld a,52
	ld l,0
	ld ix,Unknown
	call ionLargeSprite
	bcall(_grbufcpy)
	ret

PutPaper:
	ld b,16
	ld c,2
	ld a,25			;X-Coord
	ld l,48			;Y-Coord
	ld ix,Paper
	call ionLargeSprite
	bcall(_grbufcpy)
	ret

PutScissors:
	ld b,16
	ld c,2
	ld a,25
	ld l,48
	ld ix,Scissors
	call ionLargeSprite
	bcall(_grbufcpy)
	ret

PutRock:
	ld b,16
	ld c,2
	ld a,25
	ld l,48
	ld ix,Rock
	call ionLargeSprite
	bcall(_grbufcpy)
	ret

ComputerPaper:
	call PutComputer
	ld b,16
	ld c,2
	ld a,52
	ld l,0
	ld ix,Paper
	call ionLargeSprite
	bcall(_grbufcpy)
	ld a,2
	ld (Computer),a
	call WinLose
	ret

ComputerScissors:
	call PutComputer
	ld b,16
	ld c,2
	ld a,52
	ld l,0
	ld ix,Scissors
	call ionLargeSprite
	bcall(_grbufcpy)
	ld a,3
	ld (Computer),a
	call WinLose
	ret

ComputerRock:
	call PutComputer
	ld b,16
	ld c,2
	ld a,52
	ld l,0
	ld ix,Rock
	call ionLargeSprite
	bcall(_grbufcpy)
	ld a,1
	ld (Computer),a
	call WinLose
	ret

Delay:
	ld b,16
	ei
	call Delay2
	ret

Delay2:
	halt
	djnz Delay2
	ret

Stats:
	bcall(_clrlcdf)
	ld a,0
	ld (CURCOL),a
	ld (CURROW),a
	ld hl,ScoreText
	bcall(_puts)
	ld      a,(win)
	ld	l,a
	ld      h,0
	bcall(_dispHL)		; Display high score
	ld      a,(lose)
	ld	l,a
	ld      h,0
	bcall(_dispHL)		; Display high score
	ld      a,(tie)
	ld	l,a
	ld      h,0
	bcall(_dispHL)		; Display high score
	call PlayAgain
	ret

Wins:
	ld a,(win)
	inc a
	ld (win),a
	ret
Losses:
	ld a,(lose)
	inc a
	ld (lose),a
	ret
Ties:
	ld a,(tie)
	inc a
	ld (tie),a
	ret

PlayAgain:
	ld a,0
	ld (CURCOL),a
	ld a,3
	ld (CURROW),a
	ld hl,txtPlayAgain
	bcall(_puts)
	call PlayInput
	ret

PlayInput:
	ld a,0ffh 			;resets the keypad.
	out (1),a			;'Required syntax' :)
	ld a,0efh
	out (1),a
	in a,(1)
	cp kOne
	jp z,Starting
	ld a,0ffh
	out (1),a
	ld a,0dfh
	out (1),a 			
	in a,(1) 
	cp kLog
	jp z, Quit
	jp nz, PlayInput


Quit:
	bcall(_getkey)
	ret

txtComputer:
	.db "Computer",0
txtYou:
	.db "You",0
txtWin:
	.db "You Win!",0
txtLose:
	.db "You Lose!",0
txtTie:
	.db "You Tied!",0
txtPlayAgain:
	.db "Play Again? Y/N",0
ScoreText:
	.db "Wins Losses Ties",0
Win:	.dw 0
Lose:	.dw 0
Tie:	.dw 0

Left:
.db %00010000
.db %00100000
.db %01000000
.db %11111111
.db %01000000
.db %00100000
.db %00010000
.db %00000000
Right:
.db %00001000
.db %00000100
.db %00000010
.db %11111111
.db %00000010
.db %00000100
.db %00001000
.db %00000000
Unknown:
.db %11111111, %11111111
.db %10000111, %11110001
.db %10001111, %11111001
.db %10011110, %00111101
.db %10011100, %00111101
.db %10011100, %00111101
.db %10011100, %01111001
.db %10000000, %11110001
.db %10000001, %11100001
.db %10000001, %11000001
.db %10000001, %11000001
.db %10000001, %11000001
.db %10000001, %11000001
.db %10000000, %00000001
.db %10000001, %11000001
.db %11111111, %11111111
Rock:
.db %11111111, %11111111
.db %10000000, %00000001
.db %10001111, %11110001
.db %10011111, %11111001
.db %10111111, %11111101
.db %11111111, %11111111
.db %11111111, %11111111
.db %11111111, %11111111
.db %11111111, %11111111
.db %11111111, %11111111
.db %11111111, %11111111
.db %10111111, %11111101
.db %10000000, %00000001
.db %10000000, %00000001
.db %10000000, %00000001
.db %11111111, %11111111
Paper:
.db %00000000, %00000000
.db %01111111, %11111110
.db %01000000, %00000010
.db %01001010, %10101010
.db %01010101, %01010010
.db %01000000, %00000010
.db %01001010, %10101010
.db %01010101, %01010010
.db %01000000, %00000010
.db %01001010, %10000010
.db %01010101, %01111010
.db %01000000, %00000010
.db %01000000, %00000010
.db %01000000, %00000010
.db %01111111, %11111110
.db %00000000, %00000000
Scissors:
.db %11111111, %11111111
.db %11110000, %00010011
.db %10001000, %00101101
.db %11000100, %00101101
.db %10100010, %01000011
.db %10010001, %10001101
.db %10001001, %00010001
.db %10000111, %10100001
.db %10000101, %11100001
.db %10001000, %10010001
.db %10010001, %10001101
.db %10100010, %01000011
.db %11000100, %00101101
.db %10001000, %00101101
.db %11110000, %00010011
.db %11111111, %11111111

Title:
 .db $00,$1f,$ff,$f0,$00,$00,$30,$00,$00,$00,$00,$00
 .db $00,$1f,$ff,$f8,$00,$00,$30,$00,$00,$00,$00,$00
 .db $00,$00,$30,$38,$00,$00,$60,$00,$00,$ff,$87,$fc
 .db $00,$3f,$f0,$18,$00,$00,$60,$00,$00,$ff,$87,$fc
 .db $00,$7f,$e0,$30,$00,$00,$c3,$00,$00,$08,$84,$44
 .db $00,$00,$c0,$60,$00,$01,$8e,$00,$00,$08,$84,$44
 .db $00,$00,$c0,$e0,$00,$01,$fc,$00,$00,$08,$87,$fc
 .db $01,$ff,$ff,$80,$00,$03,$e0,$00,$00,$ff,$83,$b8
 .db $01,$ff,$ff,$00,$00,$03,$e0,$00,$00,$f7,$00,$00
 .db $00,$03,$0c,$07,$81,$e6,$c0,$00,$00,$00,$10,$00
 .db $00,$03,$0c,$0f,$c3,$f6,$60,$00,$02,$00,$11,$e0
 .db $07,$fe,$0c,$39,$ce,$6c,$c0,$00,$02,$3c,$1f,$e0
 .db $0f,$fc,$0c,$61,$98,$18,$c0,$00,$03,$fc,$0e,$00
 .db $00,$0c,$0c,$61,$98,$18,$c0,$00,$01,$c0,$03,$e0
 .db $00,$18,$0c,$e7,$39,$b0,$c0,$00,$00,$7c,$01,$e0
 .db $1f,$f8,$0e,$7e,$1f,$b0,$e0,$00,$00,$3c,$00,$00
 .db $3f,$f0,$0c,$78,$1e,$60,$c0,$00,$00,$00,$00,$00
 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$60,$00,$00
 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$f4,$00,$00
 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$94,$00,$00
 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$94,$07,$fc
 .db $00,$00,$0f,$ff,$80,$00,$00,$00,$00,$fc,$07,$fc
 .db $00,$00,$1f,$ff,$c0,$00,$00,$00,$00,$f8,$00,$f0
 .db $00,$00,$00,$c1,$e0,$00,$00,$00,$00,$00,$03,$c0
 .db $00,$00,$00,$c0,$e0,$00,$00,$00,$00,$fc,$03,$c0
 .db $00,$00,$7f,$80,$c0,$00,$00,$00,$00,$fc,$00,$f0
 .db $00,$00,$7f,$80,$c0,$00,$00,$00,$00,$0c,$07,$fc
 .db $00,$00,$03,$07,$86,$7c,$1f,$cf,$c0,$04,$07,$fc
 .db $00,$00,$03,$3f,$0e,$7e,$1f,$cf,$e0,$fc,$00,$00
 .db $00,$01,$ff,$f0,$1c,$ce,$30,$18,$e0,$f8,$00,$00
 .db $00,$03,$ff,$80,$79,$8e,$60,$30,$c0,$00,$03,$00
 .db $00,$00,$0c,$00,$f9,$8e,$78,$31,$c0,$00,$07,$a0
 .db $00,$00,$18,$01,$b3,$f8,$f0,$67,$00,$00,$04,$a0
 .db $00,$07,$f8,$03,$33,$e0,$c0,$7e,$00,$00,$04,$a0
 .db $00,$0f,$f0,$07,$e6,$01,$80,$fc,$00,$00,$07,$e0
 .db $00,$00,$60,$0f,$cc,$03,$01,$98,$00,$00,$07,$c0
 .db $00,$00,$60,$18,$cc,$03,$01,$9c,$00,$00,$00,$00
 .db $00,$3f,$c0,$71,$98,$07,$f3,$1c,$00,$00,$07,$e0
 .db $00,$3f,$c0,$61,$98,$07,$f3,$0c,$00,$00,$07,$e0
 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$20
 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$03,$c0
 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$07,$e0
 .db $00,$00,$00,$3f,$80,$00,$00,$00,$00,$00,$04,$20
 .db $00,$00,$00,$7f,$c0,$00,$00,$00,$00,$00,$04,$20
 .db $00,$00,$00,$39,$c0,$00,$00,$00,$00,$00,$06,$60
 .db $00,$00,$01,$f0,$c0,$00,$00,$00,$00,$00,$02,$40
 .db $00,$00,$03,$c0,$00,$00,$00,$00,$00,$00,$00,$00
 .db $00,$00,$01,$e0,$00,$00,$1c,$1c,$00,$3f,$07,$00
 .db $00,$00,$00,$e0,$00,$0c,$7c,$7c,$00,$3f,$8f,$80
 .db $00,$00,$0f,$e0,$00,$19,$d9,$d8,$00,$63,$bb,$00
 .db $00,$00,$1f,$f0,$00,$01,$81,$80,$00,$c3,$30,$00
 .db $00,$00,$00,$70,$3e,$33,$83,$80,$f0,$c7,$70,$00
 .db $00,$00,$00,$38,$7f,$31,$c1,$c1,$f9,$9c,$70,$00
 .db $00,$00,$ff,$f9,$c6,$61,$c1,$c7,$39,$f8,$38,$00
 .db $00,$01,$ff,$f3,$00,$c1,$c1,$cc,$33,$f0,$38,$00
 .db $00,$00,$00,$73,$00,$c0,$c0,$cc,$36,$60,$18,$00
 .db $00,$00,$01,$c7,$19,$9b,$9b,$9c,$e6,$73,$70,$00
 .db $00,$07,$ff,$83,$f9,$9f,$1f,$0f,$cc,$73,$e0,$00
 .db $00,$0f,$fe,$03,$e3,$1c,$1c,$0f,$0c,$33,$80,$00
 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
 .db $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00


.end
END