C64 Demo — main.asm
A Commodore 64 intro written in 6502 assembly (compiled with the ACME assembler). The screen shows:
- giant TTG letters in the top half (built from 8×8 bitmaps, drawn with solid block characters),
- TELETYPE GAMES centered below,
- a horizontally scrolling credits line (
MR.ZERO - TASNADI ZSOLT / MR.ONE - TARI BALAZS / MR.TWO - TIMAR ZOLTAN / MR.THREE - MEZO BELA), - WWW.TELETYPEGAMES.ORG,
- SZEGED, 2026.
Build and run
make build # produce main.prg
make run # build + launch in VICE (x64sc)
make rebuildrun # clean rebuild + run
make deps # on macOS: install acme + vice via Homebrew
Loading the .prg on a real or emulated C64:
LOAD"*",8,1
RUN
Structure of main.asm
1. BASIC stub (from $0801)
A hand-encoded one-line BASIC program (10 SYS 2064) so the user only has to type RUN; it jumps to the machine-code entry point at $0810.
2. Initialization
Border and background are set to black, then screen RAM ($0400) is filled with spaces and color RAM ($D800) with white. Everything is drawn by writing to screen RAM directly — the KERNAL CHROUT routine is not used.
3. Giant letters
Each big letter is an 8×8 bitmap (bigfont, one byte per row, MSB = left pixel). The drawing loop walks the three letters, shifts each bitmap row out bit by bit, and writes an inverse-space block ($A0) plus yellow into color RAM for every set bit. Letters are 8 columns wide with a 2-column gap, so the 28-column logo is centered starting at column 6, row 2.
4. Static texts
Null-loop copies place the screen-code strings (!scr) at fixed, centered screen offsets:
| Text | Row | Color |
|---|---|---|
TELETYPE GAMES |
12 | white |
| scroller line | 14 | cyan |
WWW.TELETYPEGAMES.ORG |
17 | light green |
SZEGED, 2026 |
19 | light grey |
5. Scroller (main loop)
The main loop synchronizes to the display by waiting for raster line $FE ($D012), giving one iteration per frame. Every SCROLL_SPEED (4) frames it shifts row 14 one character to the left and feeds the next character of scrolltext into the rightmost column; the index wraps at the end of the text, so the credits loop forever.
Memory map
$0801 .. $080F BASIC stub (10 SYS 2064)
$0810 .. ... machine code + font bitmaps + texts + variables
$0400 .. $07E7 screen RAM (written directly)
$D800 .. color RAM
$D012 raster line (frame sync)
$D020 / $D021 border / background color