.nolist
#include "asm.inc"
#include "ion.inc"
.list
#define correct saferam1 ;100 bytes
#define user saferam1+102 ;100 bytes
#define number saferam1+105
.org $9D93
	.db $BB,$6D
	ret
	jr nc,start
	.db "Simon",0
start:
	bcall(_clrscrnfull)
	ld a,-1
	ld (number),a
mainloop:
	call IncrementNumber
	call DisplayPattern
	call InputPattern
	ld b,110
pause4:
	ei \ halt
	djnz pause4
	ld a,$ff
	out (1),a
	ld a,Group7
	out (1),a
	in a,(1)
	cp kMode
	jr nz,mainloop
	ret
InputPattern:
	ld ix,user
	ld a,(number)
	inc a
	ld b,a
inputloop:
	push bc
	push ix
pause:
	bcall(_getcsc)
	or a
	jr z,pause
	push af
	bcall(_grbufclr)
	call DisplayPiece
	pop af
	pop ix
	ld (ix),a
	inc ix
	pop bc
	djnz inputloop
	ld hl,correct
	ld de,user
	ld a,(number)
	inc a
	ld b,a
compare:
	ld c,(hl)
	ld a,(de)
	cp c
	jr nz,nomatch
	inc hl
	inc de
	djnz compare
	ret
nomatch:
	pop hl
	ret
DisplayPattern:
	ld a,(number)
	inc a
	ld b,a
	ld hl,correct
disploop:
	push bc
	push hl
	ld a,(hl)
	call DisplayPiece
	ld b,100
temppause:
	ei \ halt
	djnz temppause
	bcall(_grbufclr)
	pop hl
	inc hl
	pop bc
	djnz disploop
	call ionFastCopy
	ret
DisplayPiece:
	cp 2
	jr z,leftpiece2
	cp 1
	jr z,downpiece2
	cp 3
	jr z,rightpiece2
uppiece2:
	ld ix,Up
	xor a
	ld l,a
	ld a,16
	ld b,16
	ld c,4
	call ionLargeSprite
	jr dispdone2
leftpiece2:
	ld ix,Left
	ld a,16
	ld l,a
	xor a
	ld b,32
	ld c,2
	call ionLargeSprite
	jr dispdone2
downpiece2:
	ld ix,Down
	ld a,48
	ld l,a
	ld a,16
	ld b,16
	ld c,4
	call ionLargeSprite
	jr dispdone2
rightpiece2:
	ld ix,Right
	ld a,16
	ld l,a
	ld a,32
	ld b,32
	ld c,2
	call ionLargeSprite
dispdone2:
	call ionFastCopy
	ld b,70
tmppause:
	ei \ halt
	djnz tmppause
	bcall(_grbufclr)
	call ionFastCopy
	ret
IncrementNumber:
	ld a,(number)
	inc a
	ld (number),a
	ld b,4
	call ionRandom
	inc a
	push af
	ld a,(number)
	ld e,a
	ld d,0
	ld hl,correct
	add hl,de
	pop af
	ld (hl),a
	ret
Up:
	.db %00000000,%00000001,%00000000,%00000000
	.db %00000000,%00000011,%10000000,%00000000
	.db %00000000,%00000111,%11000000,%00000000
	.db %00000000,%00001111,%11100000,%00000000
	.db %00000000,%00011111,%11110000,%00000000
	.db %00000000,%00111111,%11111000,%00000000
	.db %00000000,%01111111,%11111100,%00000000
	.db %00000000,%11111111,%11111110,%00000000
	.db %00000001,%11111111,%11111111,%00000000
	.db %00000011,%11111111,%11111111,%10000000
	.db %00000111,%11111111,%11111111,%11000000
	.db %00001111,%11111111,%11111111,%11100000
	.db %00011111,%11111111,%11111111,%11110000
	.db %00111111,%11111111,%11111111,%11111000
	.db %01111111,%11111111,%11111111,%11111100
	.db %11111111,%11111111,%11111111,%11111110
Down:
	.db %11111111,%11111111,%11111111,%11111110
	.db %01111111,%11111111,%11111111,%11111100
	.db %00111111,%11111111,%11111111,%11111000
	.db %00011111,%11111111,%11111111,%11110000
	.db %00001111,%11111111,%11111111,%11100000
	.db %00000111,%11111111,%11111111,%11000000
	.db %00000011,%11111111,%11111111,%10000000
	.db %00000001,%11111111,%11111111,%00000000
	.db %00000000,%11111111,%11111110,%00000000
	.db %00000000,%01111111,%11111100,%00000000
	.db %00000000,%00111111,%11111000,%00000000
	.db %00000000,%00011111,%11110000,%00000000
	.db %00000000,%00001111,%11100000,%00000000
	.db %00000000,%00000111,%11000000,%00000000
	.db %00000000,%00000011,%10000000,%00000000
	.db %00000000,%00000001,%00000000,%00000000
Left:
	.db %00000000,%00000001
	.db %00000000,%00000011
	.db %00000000,%00000111
	.db %00000000,%00001111
	.db %00000000,%00011111
	.db %00000000,%00111111
	.db %00000000,%01111111
	.db %00000000,%11111111
	.db %00000001,%11111111
	.db %00000011,%11111111
	.db %00000111,%11111111
	.db %00001111,%11111111
	.db %00011111,%11111111
	.db %00111111,%11111111
	.db %01111111,%11111111
	.db %11111111,%11111111
	.db %01111111,%11111111
	.db %00111111,%11111111
	.db %00011111,%11111111
	.db %00001111,%11111111
	.db %00000111,%11111111
	.db %00000011,%11111111
	.db %00000001,%11111111
	.db %00000000,%11111111
	.db %00000000,%01111111
	.db %00000000,%00111111
	.db %00000000,%00011111
	.db %00000000,%00001111
	.db %00000000,%00000111
	.db %00000000,%00000011
	.db %00000000,%00000001
	.db %00000000,%00000000
Right:
	.db %10000000,%00000000
	.db %11000000,%00000000
	.db %11100000,%00000000
	.db %11110000,%00000000
	.db %11111000,%00000000
	.db %11111100,%00000000
	.db %11111110,%00000000
	.db %11111111,%00000000
	.db %11111111,%10000000
	.db %11111111,%11000000
	.db %11111111,%11100000
	.db %11111111,%11110000
	.db %11111111,%11111000
	.db %11111111,%11111100
	.db %11111111,%11111110
	.db %11111111,%11111111
	.db %11111111,%11111110
	.db %11111111,%11111100
	.db %11111111,%11111000
	.db %11111111,%11110000
	.db %11111111,%11100000
	.db %11111111,%11000000
	.db %11111111,%10000000
	.db %11111111,%00000000
	.db %11111110,%00000000
	.db %11111100,%00000000
	.db %11111000,%00000000
	.db %11110000,%00000000
	.db %11100000,%00000000
	.db %11000000,%00000000
	.db %10000000,%00000000
	.db %00000000,%00000000

.end

