	.nolist		
	#include "ion.inc"
	.list

#define	wall	saferam1
#define	score	saferam1+1


#ifdef TI83P		
	.org progstart-2
	.db $BB,$6D
#else		
	.org progstart
#endif		
	ret
	jr nc,Start
	.db "Walls",0
reseths:
	sbc hl,hl
	ld (highscore),hl
start:	sbc hl,hl
	ld (score),hl
	xor a
	ld (countp+1),a
	ld a,24
	ld (wall),a
	ld a,40
	ld (diffp+1),a
	ld a,41
	ld (drwcar+1),a
	ld de,5*256
	ld hl,t1s
	call puts
	ld de,1*256+2
	call puts
	ld de,1*256+4
	call puts
	ld de,39*256
	ld (pencol),de
	bcall(_vputs)
	ld de,7
	call puts
	ld de,2567
	ld (currow),de
	ld hl,(highscore)
	bcall(_disphl)
gskl:	bcall(_getcsc)
	ld de,12000
	cp $38
	ret z
	cp $0F
	jr z,reseths
	cp $22
	jr z,strt
	ld de,6000
	cp $1A
	jr z,strt
	ld de,3000
	cp $12
	jr z,strt
	ld de,1500
	cp $23
	jr z,strt
	ld de,1
	cp $1B
	jr nz,gskl
strt:	ld (loop+1),de
	call ionfastcopy
	ld hl,Plotsscreen+3	; <-- Thanks: Jonah Cohen --+
	ld bc,64*256+$ff	;			    |
draw_lines:			;			    |
	ld (hl),c		;			    |
	ld de,5			;			    |
	add hl,de		;			    |
	ld (hl),c		;			    |
	ld e,7			;			    |
	add hl,de		;			    |
	djnz draw_lines		; <---- End Thanks, hah ----+
main:	call drwcar
	call ionfastcopy
	call drwcar
loop:	ld bc,1
wait:	dec bc
	ld a,b
	or c
	jr nz,wait
	ld hl,(score)
	inc hl
	ld (score),hl
countp:	ld a,0
	inc a
	ld (countp+1),a
	cp 150
	jr nz,maine
	ld a,(diffp+1)
	dec a
	ld (diffp+1),a
	xor a
	ld (countp+1),a
maine:  ld hl, Plotsscreen+743
        ld de, Plotsscreen+767
        ld bc, 744
        LDDR
	ld hl, plotsscreen
	ld de, plotsscreen+1
	ld bc, 23
	ld (hl),0
	ldir
rloop:	ld b,10
	call ionrandom
	or a
	jr z,invdir
noch:	ld a,(wall)
	or a
	jr z,invdir
	ld bc,(diffp+1)
	add a,c
	cp 87
	jr nz,cdir
invdir:	ld a,(cdir+4)
	neg
	ld (cdir+4),a
cdir:	ld a,(wall)
	add a,1
	ld (wall),a
	call putwall
	ld a,(wall)
diffp:	add a,35
	call putwall
	ld a,0FFh
        out (1),a
	ld a,0FEh
        out (1),a
	in a,(1)
	cp 253
	jr z,mleft
	cp 251
	jr z,mright
	ld a,0FFh
        out (1),a
	ld a,0BFh
	out (1),a
	in a,(1)
	cp 191
	call z,wkey
        cp 127
	jr z,gmovr
ckr:	ld a,(drwcar+1)
	ld e,59
	call iongetpixel
	and (hl)
	jr nz,gmovr
ck1r:	ld a,(drwcar+1)
	add a,6
	ld e,59
	call iongetpixel
	and (hl)
	jp z,main
gmovr:	bcall(_clrlcdf)
	ld de,770
	ld hl,gover
	call puts
	ld de,515
	ld (currow),de
	bcall(_puts)
	ld hl,(score)
	bcall(_disphl)
	call chs
wkey:	bcall(_getcsc)
	cp $36
	jr nz,wkey
	ret
mright:	ld a,(drwcar+1)
	inc a
	jr mx
mleft:	ld a,(drwcar+1)
	dec a
mx:	ld (drwcar+1),a
	jr ckr
chs:	ld de,(highscore)
	ld hl,(score)
	bcall(_cphlde)
	ret z
	ret c
	ld (highscore),hl
	ld de,6
	ld hl,nhs
puts:	ld (currow),de
	bcall(_puts)
	ret
putwall:
	ld b,2
	ld l,0
	ld ix,walls
	jp ionputsprite
drwcar:	ld a,33
	ld b,4
	ld l,55
	ld ix,cars
	jp ionputsprite
t1s:	.db "Walls",0
t2s:	.db "By:Jonathan T.",0
t3s:	.db "1 - 5 : speed",0
t4s:	.db "slow   -   fast",0
t5s:	.db "HighScore:",0
gover:	.db "Game Over",0
scr:	.db "Score:",0
nhs:	.db "New High Score!!",0
walls:	.db %11111111
	.db %11111111
cars:	.db %00010000
	.db %00101000
	.db %01111100
	.db %11000110
highscore:	.dw	0000h
.end 
.end