A snake game clone for Commodore home computers
Go to file
giomba bb17b78251 updated LICENSE 2020-10-04 17:59:30 +02:00
dist added distribution binary file .prg 2020-04-23 12:32:51 +02:00
liblzg@182b56cb36 compression routine for cartridge version, temporarily deprecates tape version 2020-10-04 17:51:35 +02:00
res.org compression routine for cartridge version, temporarily deprecates tape version 2020-10-04 17:51:35 +02:00
scrot added cute screenshot 2020-04-23 12:26:19 +02:00
src compression routine for cartridge version, temporarily deprecates tape version 2020-10-04 17:51:35 +02:00
util levels rotation (first -> second -> ... -> last -> first -> ...) 2020-04-08 11:36:18 +02:00
.gitignore added distribution binary file .prg 2020-04-23 12:32:51 +02:00
.gitmodules compression routine for cartridge version, temporarily deprecates tape version 2020-10-04 17:51:35 +02:00
LICENSE.md updated LICENSE 2020-10-04 17:59:30 +02:00
Makefile compression routine for cartridge version, temporarily deprecates tape version 2020-10-04 17:51:35 +02:00
README.md compression routine for cartridge version, temporarily deprecates tape version 2020-10-04 17:51:35 +02:00

README.md

snake6502

Gameplay screenshot

snake6502 is a snake-like game clone for Commodore home computers, written for fun because «I always wanted to code something for a computer of my retrocomputers collection actually, this is the main reason I collect them: to write programs».

Download the binary .prg.

Current development status here.

Compile

You need the GNU compiler collection and the dasm macro assembler, then:

$ make

You can also define the following environment variables:

$ DEBUG=1 make build with debugging artifacts

$ VERBOSE=1 make output useful info during compilation

Developer docs

Package

The whole program is assembled into a snake.pack binary blob with the following structure.

Absolute Offset Description
$1000 $0000 load address
$2800 $1800 entry point (start address)

Memory map

Address PRG Description
$0000 - $0001 no hardware
$0002 - $00FF no zero page pointers
$0100 - $01FF no stack page
$0200 - $07FF no free ram
$1000 - $1FFF yes SID tune
$2000 - $27FF yes custom char
$2800 - $xxxx yes Program segment (only needed part used)
$xxxx - $CCFF no free ram
$CD00 - $CDFF no data segment (not-initialized vars)
$CE00 - $CEFF no list X
$CF00 - $CFFF no list Y
$D000 - $DFFF no I/O
$E000 - $FFFF no Kernal

Compression

snake.pack is compressed into snake.pack.lz using liblzg, to save space in order to fit the game in a *PROM.

Decompression

cart.asm is located at $8000 (standard org address for C64 cartridges), and contains the decompression routine and the snake.pack.lz. It decompresses snake.pack.lz back to $1000, and jumps to its entry point at $2800.

Miscellanea

Custom charset

Index Description
$00 - $1F A-Z (space first)
$20 - $3F A-Z, reversed (space first)
$40 - $4F hex digits
$50 - $5F hex digits, reversed
$60 - game tiles