190 lines
4.5 KiB
NASM
190 lines
4.5 KiB
NASM
|
|
; A "Hello, World!" which illustrates an Atari 2600 programming
|
|
; introduction talk (slides at http://slideshare.net/chesterbr).
|
|
;
|
|
; This is free software (see license below). Build it with DASM
|
|
; (http://dasm-dillon.sourceforge.net/), by running:
|
|
;
|
|
; dasm hello.asm -ohello.bin -f3
|
|
;
|
|
|
|
PROCESSOR 6502
|
|
INCLUDE "vcs.h"
|
|
|
|
ORG $F000
|
|
StartFrame:
|
|
lda #%00000010
|
|
sta VSYNC
|
|
REPEAT 3
|
|
sta WSYNC
|
|
REPEND
|
|
lda #0
|
|
sta VSYNC
|
|
|
|
PreparePlayfield:
|
|
lda #$00
|
|
sta ENABL
|
|
sta ENAM0
|
|
sta ENAM1
|
|
sta GRP0
|
|
sta GRP1
|
|
sta COLUBK
|
|
sta PF0
|
|
sta PF2
|
|
lda #$FF
|
|
sta COLUPF
|
|
lda #$00
|
|
sta CTRLPF
|
|
ldx #0
|
|
REPEAT 37
|
|
sta WSYNC
|
|
REPEND
|
|
lda #0
|
|
sta VBLANK
|
|
|
|
Scanline:
|
|
cpx #174
|
|
bcs ScanlineEnd
|
|
txa
|
|
lsr
|
|
tay
|
|
lda Phrase,y
|
|
sta PF1
|
|
ScanlineEnd:
|
|
sta WSYNC
|
|
inx
|
|
cpx #191
|
|
bne Scanline
|
|
|
|
Overscan:
|
|
lda #%01000010
|
|
sta VBLANK
|
|
REPEAT 30
|
|
sta WSYNC
|
|
REPEND
|
|
jmp StartFrame
|
|
|
|
Phrase:
|
|
.BYTE %00000000
|
|
.BYTE %01000010
|
|
.BYTE %01111110
|
|
.BYTE %01000010
|
|
.BYTE %01000010
|
|
.BYTE %01000010
|
|
.BYTE %00000000
|
|
.BYTE %00000000
|
|
.BYTE %01111110
|
|
.BYTE %01000000
|
|
.BYTE %01111100
|
|
.BYTE %01000000
|
|
.BYTE %01000000
|
|
.BYTE %01111110
|
|
.BYTE %00000000
|
|
.BYTE %00000000
|
|
.BYTE %01000000
|
|
.BYTE %01000000
|
|
.BYTE %01000000
|
|
.BYTE %01000000
|
|
.BYTE %01000000
|
|
.BYTE %01111110
|
|
.BYTE %00000000
|
|
.BYTE %00000000
|
|
.BYTE %01000000
|
|
.BYTE %01000000
|
|
.BYTE %01000000
|
|
.BYTE %01000000
|
|
.BYTE %01000000
|
|
.BYTE %01111110
|
|
.BYTE %00000000
|
|
.BYTE %00000000
|
|
.BYTE %00111100
|
|
.BYTE %01000010
|
|
.BYTE %01000010
|
|
.BYTE %01000010
|
|
.BYTE %01000010
|
|
.BYTE %00111100
|
|
.BYTE %00000000
|
|
.BYTE %00000000
|
|
.BYTE %00000000
|
|
.BYTE %00000000
|
|
.BYTE %00000000
|
|
.BYTE %00000000
|
|
.BYTE %00000000
|
|
.BYTE %00000000
|
|
.BYTE %00000000
|
|
.BYTE %00000000
|
|
.BYTE %01000010
|
|
.BYTE %01000010
|
|
.BYTE %01000010
|
|
.BYTE %01000010
|
|
.BYTE %01011010
|
|
.BYTE %00100100
|
|
.BYTE %00000000
|
|
.BYTE %00000000
|
|
.BYTE %00111100
|
|
.BYTE %01000010
|
|
.BYTE %01000010
|
|
.BYTE %01000010
|
|
.BYTE %01000010
|
|
.BYTE %00111100
|
|
.BYTE %00000000
|
|
.BYTE %00000000
|
|
.BYTE %01111100
|
|
.BYTE %01000010
|
|
.BYTE %01000010
|
|
.BYTE %01111100
|
|
.BYTE %01000100
|
|
.BYTE %01000010
|
|
.BYTE %00000000
|
|
.BYTE %00000000
|
|
.BYTE %01000000
|
|
.BYTE %01000000
|
|
.BYTE %01000000
|
|
.BYTE %01000000
|
|
.BYTE %01000000
|
|
.BYTE %01111110
|
|
.BYTE %00000000
|
|
.BYTE %00000000
|
|
.BYTE %01111000
|
|
.BYTE %01000100
|
|
.BYTE %01000010
|
|
.BYTE %01000010
|
|
.BYTE %01000100
|
|
.BYTE %01111000
|
|
.BYTE %00000000)
|
|
|
|
ORG $FFFA
|
|
.WORD StartFrame
|
|
.WORD StartFrame
|
|
.WORD StartFrame
|
|
|
|
END
|
|
|
|
;
|
|
; Copyright 2011-2013 Carlos Duarte do Nascimento (Chester). All rights reserved.
|
|
;
|
|
; Redistribution and use in source and binary forms, with or without modification, are
|
|
; permitted provided that the following conditions are met:
|
|
;
|
|
; 1. Redistributions of source code must retain the above copyright notice, this list of
|
|
; conditions and the following disclaimer.
|
|
;
|
|
; 2. Redistributions in binary form must reproduce the above copyright notice, this list
|
|
; of conditions and the following disclaimer in the documentation and/or other materials
|
|
; provided with the distribution.
|
|
;
|
|
; THIS SOFTWARE IS PROVIDED BY CHESTER ''AS IS'' AND ANY EXPRESS OR IMPLIED
|
|
; WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
|
; FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> OR
|
|
; CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
|
; ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
|
; ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
;
|
|
; The views and conclusions contained in the software and documentation are those of the
|
|
; authors and should not be interpreted as representing official policies, either expressed
|
|
; or implied, of Chester.
|
|
;
|