[index] [home]

Tweet

"Hello World!" on Atari 2600



A quick page about setting up a minimal development environment, and getting something to display on an Atari 2600.

Disclaimer: I'm basically following Atari 2600 Programming for Newbies and adding a few hacks/tries, that's all. So don't expect anything spectacular here :-)

References

Development-environment

Not sure if I want to continue using it, but the tutorial I follow uses the DASM macro-assembler, so that's what I'll use as well to get quick result.

I also want to look at 64tass/tass64 later, because it happens to ship as a Arch package, and I liked what I saw of its documentation.

(However, DASM is easy to build from source on Linux - just follow the instructions in the "README" file in the root of the source. Running "make" was enough here.)

Workflow and result

I started with the source from this page in aforementioned tutorial, and started modifying it. (It's been about 25 years since I used 6502 assembly :-)

I came up with something like this...

...which increments the 20-pixel playfield-pattern and scrolls a background-colour pattern upwards.

For reference, to assemble:

    ./dasm asm.asm -I../machines/atari2600 -f3

(I'm running from the "bin" dir in the DASM-tree.)

To run:

    stella -snapsavedir . a.out

(To make a snapshot, press F12.)

Source

(Again, this is just a modified example from aforementioned tutorial.)

                processor 6502

                include "vcs.h"
                include "macro.h"

                SEG

                ORG $F000

    start

                ; Start of vertical blank processing

                lda #0
                sta VBLANK

                lda #2
                sta VSYNC



                ; 3 scanlines of VSYNCH signal...

                sta WSYNC
                sta WSYNC
                sta WSYNC

                lda #0
                sta VSYNC           



                ; vertical blank

                ldx #45
    loop1
                sta WSYNC
                dex
                bne loop1



                ; visible area: 192 lines (NTSC) / 228 (PAL)

                ldx $80
                inx
                inx
                stx $80

                ldy #228
    loop2
                sta WSYNC

                stx PF0
                stx PF1
                stx PF2

                stx COLUBK
                inx

                dey
                bne loop2



                ; overscan

                lda #%01000010

                sta VBLANK

                ldx #36
    loop3
                sta WSYNC
                dex
                bne loop3

                jmp start



                ORG $FFFA

                .word start          ; NMI
                .word start          ; RESET
                .word start          ; IRQ

                END

To be continued - this is a fun platform :-)


Delivered to you by Vim, GNU Make, MultiMarkdown, bozohttpd, NetBSD, and 1 human.