Created
November 3, 2016 00:05
-
-
Save electrum/76ac88de2e1d6c9254deaba003a74b6b to your computer and use it in GitHub Desktop.
Snake game for the TI-86 graphing calculator
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; Snake 86 by David Phillips <[email protected]> | |
; for the TI-86 graphing calculator | |
; written on January 28, 2000 | |
#include "ti86asm.inc" | |
VideoRam = $fc00 | |
SnakeBody = $9000 | |
.org _asm_exec_ram | |
nop | |
jp Start | |
.dw 0 | |
.dw Title | |
Start: | |
call _runindicoff | |
call _flushallmenus | |
call _clrLCD | |
sub a | |
ld (_asapvar+1),a | |
ld hl,VideoRam+128 | |
push hl | |
ld de,VideoRam+129 | |
ld bc,31 | |
ld (hl),%11111111 | |
ldir | |
inc hl | |
ld (hl),%11000000 | |
ld l,160+15 | |
ld (hl),%00000011 | |
inc hl | |
ex de,hl | |
ld bc,51*16 | |
ldir | |
pop hl | |
ld c,32 | |
ldir | |
ld hl,0 | |
ld (_curRow),hl | |
ld hl,Title | |
call _puts | |
call NewDot | |
Play: | |
call _get_key | |
cp K_EXIT | |
jp z,_clrWindow | |
dec a | |
cp 4 | |
jr nc,SkipKeys | |
ld (_@Direction),a | |
SkipKeys: | |
ld de,_@Head | |
ld bc,2 | |
_@Direction =$-2 | |
ld hl,DirTable | |
add hl,bc | |
add hl,bc | |
ld a,(de) | |
add a,(hl) | |
ld (de),a | |
inc hl | |
inc de | |
ld a,(de) | |
add a,(hl) | |
ld (de),a | |
ld hl,_@Grow | |
dec (hl) | |
jr nz,GrowSnake | |
inc (hl) | |
ld hl,SnakeBody | |
_@Tail =$-2 | |
ld c,(hl) | |
inc hl | |
ld b,(hl) | |
inc hl | |
res 4,h | |
ld (_@Tail),hl | |
call NukePixel | |
GrowSnake: | |
ld bc,(16<<8)+16 | |
_@Head =$-2 | |
ld hl,SnakeBody | |
_@HeadTop =$-2 | |
ld (hl),c | |
inc hl | |
ld (hl),b | |
inc hl | |
res 4,h | |
ld (_@HeadTop),hl | |
push bc | |
ld hl,0 | |
_@Dot =$-2 | |
or a | |
sbc hl,bc | |
call z,DoNewDot | |
pop bc | |
call CheckPixel | |
jr nz,Crash | |
call PutPixel | |
ld b,10 | |
Delay: | |
halt | |
djnz Delay | |
jr Play | |
DoNewDot: | |
call NukePixel | |
NewDot: | |
call Random | |
and %01111110 | |
cp 124 | |
jr nc,NewDot | |
add a,2 | |
ld b,a | |
call Random | |
and %00111110 | |
cp 52 | |
jr nc,NewDot | |
add a,10 | |
ld c,a | |
ld (_@Dot),bc | |
call PutPixel | |
ld a,1 | |
_@Grow =$-1 | |
add a,5 | |
ld (_@Grow),a | |
ld a,-1 | |
_@Score =$-1 | |
inc a | |
ld (_@Score),a | |
ld h,0 | |
ld l,a | |
DispA: | |
ld de,_OP1+5 | |
sub a | |
ld (de),a | |
Unpack: | |
dec de | |
call _divHLby10 | |
add a,'0' | |
ld (de),a | |
ld a,h | |
or l | |
jr nz,Unpack | |
ld hl,16<<8 | |
ld (_curRow),hl | |
ex de,hl | |
jp _puts | |
Crash: | |
ld hl,(8<<8)+3 | |
ld (_curRow),hl | |
ld hl,GameOver | |
call _puts | |
Wait: | |
call _get_key | |
or a | |
jr nz,Wait | |
jp _clrWindow | |
Random: | |
ld a,r | |
ld hl,_@Seed | |
_@Seed =$+1 | |
add a,0 | |
ld (hl),a | |
ret | |
CheckPixel: | |
call FindPixel | |
and (hl) | |
ret nz | |
ld de,16 | |
add hl,de | |
and (hl) | |
ret | |
PutPixel: | |
call FindPixel | |
push af | |
or (hl) | |
ld (hl),a | |
ld de,16 | |
add hl,de | |
pop af | |
or (hl) | |
ld (hl),a | |
ret | |
NukePixel: | |
call FindPixel | |
cpl | |
push af | |
and (hl) | |
ld (hl),a | |
ld de,16 | |
add hl,de | |
pop af | |
and (hl) | |
ld (hl),a | |
ret | |
FindPixel: | |
ld a,c | |
add a,a | |
add a,a | |
ld l,a | |
ld h,0 | |
add hl,hl | |
add hl,hl | |
ld a,b | |
and %11111000 | |
rra | |
rra | |
rra | |
add a,l | |
ld l,a | |
ld a,b | |
rra | |
and %00000011 | |
push hl | |
ld d,0 | |
ld e,a | |
ld hl,PixelMasks | |
add hl,de | |
ld a,(hl) | |
pop hl | |
ld de,VideoRam | |
add hl,de | |
ret | |
PixelMasks: | |
.db %11000000, %00110000, %00001100, %00000011 | |
DirTable: | |
.db 2,0, 0,-2, 0,2, -2,0 | |
Title: | |
.db "Snake 86",0 | |
GameOver: | |
.db "Game Over",0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment