ebook img

Making Games for the Atari 2600 PDF

235 Pages·2016·2.317 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Making Games for the Atari 2600

MAKING GAMES FOR THE ATARI 2600 An 8bitworkshop Book by Steven Hugg Making Games for the Atari 2600 Copyright©2016byStevenE.Hugg All rights reserved. No part of this book may be reproduced withoutwrittenpermissionfromtheauthor. ISBN-13: 978-1541021303 ISBN-10: 1541021304 Firstprinting: December2016 Disclaimer Although every precaution has been taken in the preparation ofthisbook,thepublisherandauthorassumenoresponsibility forerrorsoromissions,norisanyliabilityassumedfordamages resulting from the use of the information contained herein. No warrantiesofanykindareexpressedorimplied. Making Games for the Atari 2600 is an independent publication andhasnotbeenauthorized,sponsored,orotherwiseapproved byAtari,Inc. Trademarks Brands and product names mentioned in this work are trade- marks or service marks of their respective companies. Use of a term in this work should not be regarded as affecting the validityofanytrademarkorservicemark. Inquiries [email protected]. Contents Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xii 1 Introductionto6502 . . . . . . . . . . . . . . . . . . . 1 1.1 Bits,Bytes,andBinary . . . . . . . . . . . . . . . 2 1.2 HexadecimalNotation . . . . . . . . . . . . . . . 3 1.3 Signedvs. UnsignedBytes . . . . . . . . . . . . . 3 1.4 TheCPUandtheBus . . . . . . . . . . . . . . . . 4 1.5 WritingLoops . . . . . . . . . . . . . . . . . . . . 7 1.6 ConditionFlagsandBranching. . . . . . . . . . . 10 1.7 AdditionandSubtraction . . . . . . . . . . . . . . 12 1.8 TheStack . . . . . . . . . . . . . . . . . . . . . . . 12 1.9 LogicalOperations . . . . . . . . . . . . . . . . . 13 1.10 ShiftOperations . . . . . . . . . . . . . . . . . . . 15 2 The8bitworkshopIDE . . . . . . . . . . . . . . . . . . . 17 2.1 DebugWindow . . . . . . . . . . . . . . . . . . . . 20 2.2 KeyboardShortcuts . . . . . . . . . . . . . . . . . 21 3 VCSMemoryMap . . . . . . . . . . . . . . . . . . . . . 22 3.1 Equates . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2 Segments . . . . . . . . . . . . . . . . . . . . . . . 24 4 WritingYourFirstAssemblyCode . . . . . . . . . . . . 26 5 PaintingontheCRT . . . . . . . . . . . . . . . . . . . . 29 5.1 TimingisEverything . . . . . . . . . . . . . . . . . 31 5.2 MakingRainbows . . . . . . . . . . . . . . . . . . 33 6 PlayfieldGraphics . . . . . . . . . . . . . . . . . . . . . 37 iii Contents 7 PlayersandSprites . . . . . . . . . . . . . . . . . . . . 41 7.1 HorizontalPositioning . . . . . . . . . . . . . . . . 43 8 ColorSprites . . . . . . . . . . . . . . . . . . . . . . . . 46 9 SpriteFinePositioning . . . . . . . . . . . . . . . . . . . 51 10 Player/MissileGraphics . . . . . . . . . . . . . . . . . . 56 11 TheSetHorizPosSubroutine . . . . . . . . . . . . . . . 58 12 ThePIATimer . . . . . . . . . . . . . . . . . . . . . . . 61 13 JoysticksandSwitches . . . . . . . . . . . . . . . . . . 65 13.1 ConsoleSwitches . . . . . . . . . . . . . . . . . . 65 13.2 Joysticks . . . . . . . . . . . . . . . . . . . . . . . 67 14 IndirectAddressing . . . . . . . . . . . . . . . . . . . . 69 14.1 Pointers . . . . . . . . . . . . . . . . . . . . . . . . 69 14.2 IndirectIndexedAddressing . . . . . . . . . . . . 70 14.3 IndexedIndirectAddressing . . . . . . . . . . . . 71 15 AComplexScene,PartI . . . . . . . . . . . . . . . . . . 72 16 AComplexScene,PartII . . . . . . . . . . . . . . . . . 78 17 NUSIZandOtherDelights. . . . . . . . . . . . . . . . . 82 17.1 PlayerReflection . . . . . . . . . . . . . . . . . . . 82 17.2 NUSIZandMultiplePlayerCopies . . . . . . . . . 83 17.3 VDELP:VerticalDelay . . . . . . . . . . . . . . . . 83 17.4 CTRLPFandObjectPriority . . . . . . . . . . . . . 84 17.5 Two-PlayerScoreMode . . . . . . . . . . . . . . . 85 18 Scoreboard . . . . . . . . . . . . . . . . . . . . . . . . . 86 19 Collisions . . . . . . . . . . . . . . . . . . . . . . . . . . 90 20 AsynchronousPlayfields: Bitmap . . . . . . . . . . . . 92 21 AsynchronousPlayfields: Bricks . . . . . . . . . . . . . 95 iv Contents 22 ABig(48pixel)Sprite . . . . . . . . . . . . . . . . . . . 104 23 TinyText . . . . . . . . . . . . . . . . . . . . . . . . . . 108 24 Six-DigitScoreboard . . . . . . . . . . . . . . . . . . . . 114 25 ABigMoveableSprite . . . . . . . . . . . . . . . . . . . 118 26 SpriteFormations . . . . . . . . . . . . . . . . . . . . . 122 27 AdvancedTimerTricks . . . . . . . . . . . . . . . . . . 127 27.1 TimerTables . . . . . . . . . . . . . . . . . . . . . 129 28 Multisprites . . . . . . . . . . . . . . . . . . . . . . . . . 133 28.1 Variables . . . . . . . . . . . . . . . . . . . . . . . 135 28.2 Position . . . . . . . . . . . . . . . . . . . . . . . . 136 28.3 Display . . . . . . . . . . . . . . . . . . . . . . . . 138 28.4 TheMainLoop . . . . . . . . . . . . . . . . . . . . 141 28.5 Sort . . . . . . . . . . . . . . . . . . . . . . . . . . 142 28.6 Improvements . . . . . . . . . . . . . . . . . . . . 143 29 RandomNumberGeneration . . . . . . . . . . . . . . . 144 30 ProceduralGeneration . . . . . . . . . . . . . . . . . . 148 31 DrawingLines . . . . . . . . . . . . . . . . . . . . . . . 153 32 TheSoundandMusic . . . . . . . . . . . . . . . . . . . 158 32.1 MusicPlayer . . . . . . . . . . . . . . . . . . . . . 160 33 Pseudo-3D:SunsetsandStarryNights . . . . . . . . . 165 33.1 Sky,Clouds,andSunset . . . . . . . . . . . . . . . 165 33.2 Mountains . . . . . . . . . . . . . . . . . . . . . . 167 33.3 StarsatNight . . . . . . . . . . . . . . . . . . . . 168 34 Pseudo-3D:DrivingDowntheRoad . . . . . . . . . . . 171 35 BankSwitching . . . . . . . . . . . . . . . . . . . . . . . 181 35.1 Trampolines . . . . . . . . . . . . . . . . . . . . . 182 35.2 CommonBankswitchingMethods . . . . . . . . . 184 v Contents 35.3 ORGvs. RORG . . . . . . . . . . . . . . . . . . . . 184 35.4 BankswitchingExample . . . . . . . . . . . . . . . 185 36 WavetableAudio . . . . . . . . . . . . . . . . . . . . . . 188 36.1 AudioWaveforms . . . . . . . . . . . . . . . . . . 188 36.2 GeneratingSamples . . . . . . . . . . . . . . . . . 189 37 Paddles . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 38 IllegalOpcodes . . . . . . . . . . . . . . . . . . . . . . 195 39 TimingAnalysis . . . . . . . . . . . . . . . . . . . . . . 197 40 MakingGames . . . . . . . . . . . . . . . . . . . . . . . 199 40.1 GameDesign . . . . . . . . . . . . . . . . . . . . . 199 40.2 GameProgramming . . . . . . . . . . . . . . . . . 200 40.3 DistributingYourGame . . . . . . . . . . . . . . . 201 41 Troubleshooting . . . . . . . . . . . . . . . . . . . . . . 203 AppendixA:VCSMemoryMap . . . . . . . . . . . . . . . . 205 AppendixB:VCSColors . . . . . . . . . . . . . . . . . . . . 208 AppendixC:6502Opcodes . . . . . . . . . . . . . . . . . . 209 AppendixD:6502InstructionFlags . . . . . . . . . . . . . 216 Bibliography . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 vi List of Figures 1.1 CPUCycle . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2 Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.3 LDACycle . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.4 Shiftandrotatebitflow . . . . . . . . . . . . . . . . . 15 2.1 8bitworkshop.comIDE . . . . . . . . . . . . . . . . . . 17 2.2 IDEFlow . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.3 IDEPulldown . . . . . . . . . . . . . . . . . . . . . . . 19 2.4 DebuggingFunctions . . . . . . . . . . . . . . . . . . 19 2.5 DebugWindow . . . . . . . . . . . . . . . . . . . . . . 20 2.6 EmulatorKeyboardShortcuts . . . . . . . . . . . . . 21 3.1 MemoryMap . . . . . . . . . . . . . . . . . . . . . . . 23 5.1 AnatomyofaScanline . . . . . . . . . . . . . . . . . 30 5.2 SettinguptheTIAforascanline . . . . . . . . . . . . 31 5.3 AnofficialNTSC-compliantvideoframe . . . . . . . 32 6.1 LayoutofPlayfieldRegisterPixels . . . . . . . . . . . 38 6.2 ExampleSymmetricPlayfield . . . . . . . . . . . . . . 39 6.3 XYCoordinateSystems . . . . . . . . . . . . . . . . . 40 7.1 PongandTank . . . . . . . . . . . . . . . . . . . . . . 41 7.2 Players0and1overbackground . . . . . . . . . . . 43 7.3 InstructionTimingofSettingPlayerPosition . . . . . 45 8.1 Bottom-to-topSpriteLayout . . . . . . . . . . . . . . 48 8.2 SpriteBitmapandColorTableExample . . . . . . . . 50 9.1 HorizontalMotionRegisterValues . . . . . . . . . . . 53 vii ListofFigures 9.2 FineHorizontalPositioningwithHMOVE . . . . . . . 54 12.1 BlankNTSCFrameExample . . . . . . . . . . . . . . 64 15.1 Twospritesoverplayfield . . . . . . . . . . . . . . . . 72 15.2 TimingofDouble-HeightKernelWithPlayfield . . . . 77 16.1 Timingof4-PhaseDouble-HeightKernel . . . . . . . 79 17.1 NUSIZNumber-SizeRegisterSpacing . . . . . . . . . 83 18.1 Examplescoreboard. . . . . . . . . . . . . . . . . . . 86 18.2 ScoreboardDisplay . . . . . . . . . . . . . . . . . . . 89 20.1 TimingofAsynchronousPlayfieldKernel . . . . . . . 93 20.2 PlayfieldBitmapofAdaLovelace . . . . . . . . . . . 94 21.1 Brickgame . . . . . . . . . . . . . . . . . . . . . . . . 95 21.2 LayoutofBricksArray . . . . . . . . . . . . . . . . . . 96 21.3 TimingofBrickPlayfieldandBallKernel . . . . . . . 98 22.1 48-pixelsprite . . . . . . . . . . . . . . . . . . . . . . 104 22.2 OverlappingPlayers’HorizontalPosition . . . . . . . 105 22.3 TimingDiagramforOverlappingPlayers . . . . . . . 107 23.1 Tinytext . . . . . . . . . . . . . . . . . . . . . . . . . 108 23.2 Example48-pixelfontdata . . . . . . . . . . . . . . . 109 24.1 Six-digitscoreboardexample . . . . . . . . . . . . . 114 25.1 WSYNC-FreeBigSpriteKernel . . . . . . . . . . . . . 121 26.1 Spriteretriggeringexamplegame . . . . . . . . . . . 122 27.1 PIATimerScanlineTiming . . . . . . . . . . . . . . . 129 27.2 Timerworst-casescenario . . . . . . . . . . . . . . . 131 27.3 Timer-to-ScanlineLookupTable . . . . . . . . . . . . 131 28.1 Multiplespritesexample . . . . . . . . . . . . . . . . 134 28.2 Phases . . . . . . . . . . . . . . . . . . . . . . . . . . 134 30.1 Procedurally-generatedroom . . . . . . . . . . . . . 148 viii ListofFigures 31.1 Alinedrawnwithplayerobjects . . . . . . . . . . . . 153 32.1 AudioChannelstoOutput . . . . . . . . . . . . . . . 159 33.1 Sunsetwithcloudsandmountains . . . . . . . . . . 166 33.2 Pseudo-3droadwithstars . . . . . . . . . . . . . . . 169 34.1 Pseudo-3droadwithsunset . . . . . . . . . . . . . . 172 ix List of Tables 1.1 BitValuesinHexadecimalNotation . . . . . . . . . . 3 1.2 ExampleHexConversion . . . . . . . . . . . . . . . . 3 1.3 ConditionFlags . . . . . . . . . . . . . . . . . . . . . 10 1.4 BranchInstructions . . . . . . . . . . . . . . . . . . . 11 1.5 LogicalInstructions . . . . . . . . . . . . . . . . . . . 13 1.6 Shiftandrotateinstructions . . . . . . . . . . . . . . 15 5.1 FrameandScanlineSyncRegisters . . . . . . . . . . 33 6.1 PlayfieldRegisters . . . . . . . . . . . . . . . . . . . . 39 7.1 PlayerRegisters . . . . . . . . . . . . . . . . . . . . . 42 7.2 ExampleTimingofHorizontalPositioningLoop . . . 45 9.1 HorizontalMotionRegisters . . . . . . . . . . . . . . 55 10.1 RegistersforMissilesandBall . . . . . . . . . . . . . 57 12.1 TimerRegisters . . . . . . . . . . . . . . . . . . . . . 62 13.1 InputPortsRegisters . . . . . . . . . . . . . . . . . . 65 13.2 SWCHBSwitches . . . . . . . . . . . . . . . . . . . . 66 13.3 SWCHASwitches . . . . . . . . . . . . . . . . . . . . 67 16.1 VerticalDelayRegisters . . . . . . . . . . . . . . . . . 81 17.1 NUSIZ,Control,ReflectRegisters . . . . . . . . . . . 82 17.2 NormalCTRLPFPriorityAssignments . . . . . . . . . 84 17.3 CTRLPFPriorityAssignmentswhenBit2isSet . . . . 85 19.1 CollisionRegisters . . . . . . . . . . . . . . . . . . . . 91 x

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.