66 lines
2.6 KiB
Markdown
66 lines
2.6 KiB
Markdown
# 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
|
||
|
||
```sh
|
||
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
|
||
```
|