Errata: Making Games for the Atari 2600#
Chapter 1, page 7: The “LDA Cycle” diagram should show LDA $34
instead
of LDA $23
. The Data Bus values should be $AD, $34, $12, and $7F.
Chapter 3, page 25: The DataArray variable starts at $83, not $82.
Chapter 4, page 28: The ZeroZP loop clears every zero-page value except for address $0.
(One way to fix this is to add a STA $0
after the loop ends.)
Also, the VCS contains the 6507 CPU, not the 6509.
Chapters 6 and up: The VERTICAL_SYNC
macro takes 4 scanlines to complete, not 3.
Therefore most of the examples add up to 263 scanlines, not 262.
Change TIMER_SETUP 30
to TIMER_SETUP 29
to fix them.
Chapter 6, page 40: The comment for the sta PF0
line should read “set the
PF0 playfield pattern register”.
Chapter 8, page 52: lda ColorFrame,y
should be lda ColorFrame0,y
; also
the comments on the Frame0 color table can be ignored.
Chapter 9, page 57: Says “We’ve timed everything so that the store will place exactly on cycle 23 when zero is passed” but the example shows A (the horizontal position) loaded with #70, not #0.
Chapter 9, page 58: The Atari 2600 game “Raiders of the Lost Ark” was designed by Howard Scott Warshaw, not Warren Robinett.
Chapter 12, page 69: The target timer value is computed by
(N ∗ 76 - 13) / 64
.
There is also a special case for two timer events in a line (see xmacro.h
)
Chapter 17: Forgot to describe NUSIZ register bits in detail:
Binary |
Hex Value |
Description |
---|---|---|
00xxxx |
$00 |
1 pixel wide |
01xxxx |
$10 |
2 pixels wide |
10xxxx |
$20 |
4 pixels wide |
11xxxx |
$30 |
8 pixels wide |
Chapter 22-24: “A Big 48-Pixel Sprite”, “Tiny Fonts”
and “6-Digit Score” examples.
There is a sta HMCLR
immediately following the sta HMOVE
instruction.
This causes problems on actual hardware, as the TIA requires you
wait 24 cycles after a write to HMOVE
before writing to HMCLR
(or HMP0
, HMP1
, HMM0
, HMM1
, or HMBL
.)
This can be fixed by adding a SLEEP 24
between the two instructions.
Chapter 35: The bank switching examples should set the S (Stack) register to #$FF at startup. (The real NMOS 6502 sets the stack pointer to #$FD at power-up, but the emulator doesn’t emulate this undocumented behavior.) The example has also been rewritten with additional macros to make it a bit clearer, and the origin moved to $1000.
Appendix D: 6502 instruction Flags list is missing the BPL
instruction.