Skip to content

Instantly share code, notes, and snippets.

@electrum
Created November 3, 2016 00:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save electrum/76ac88de2e1d6c9254deaba003a74b6b to your computer and use it in GitHub Desktop.
Save electrum/76ac88de2e1d6c9254deaba003a74b6b to your computer and use it in GitHub Desktop.
Snake game for the TI-86 graphing calculator
; Snake 86 by David Phillips <david@acz.org>
; 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