1 2<!DOCTYPE html> 3 4 5<html lang="en" data-content_root="../../" data-theme="light"> 6 7 <head> 8 <meta charset="utf-8" /> 9 <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" /> 10<meta property="og:title" content="Atari 2600/VCS" /> 11<meta property="og:type" content="website" /> 12<meta property="og:url" content="https://8bitworkshop.com/docs/platforms/vcs/index.html" /> 13<meta property="og:site_name" content="8bitworkshop" /> 14<meta property="og:description" content="VCS Specifications: Lifespan, 1977â1992,, Media, ROM cartridge (2K-64K),, CPU 8-bit, MOS Technology 6507@ 1.19 MHz,, Memory, 128 bytes RAM (can be expanded by cartridge),, Controllers, Joystick, pa..." /> 15<meta property="og:image" content="https://8bitworkshop.com/docs/_static/icon.png" /> 16<meta property="og:image:alt" content="8bitworkshop" /> 17<meta name="description" content="VCS Specifications: Lifespan, 1977â1992,, Media, ROM cartridge (2K-64K),, CPU 8-bit, MOS Technology 6507@ 1.19 MHz,, Memory, 128 bytes RAM (can be expanded by cartridge),, Controllers, Joystick, pa..." /> 18 19 <title>Atari 2600/VCS — 8bitworkshop documentation</title> 20 21 22 23
23<script data-cfasync="false"> 24 document.documentElement.dataset.mode = localStorage.getItem("mode") || "light"; 25 document.documentElement.dataset.theme = localStorage.getItem("theme") || "light"; 26 </script>
26 27 28 <!-- Loaded before other Sphinx assets --> 29 <link href="../../_static/styles/theme.css?digest=dfe6caa3a7d634c4db9b" rel="stylesheet" /> 30<link href="../../_static/styles/bootstrap.css?digest=dfe6caa3a7d634c4db9b" rel="stylesheet" /> 31<link href="../../_static/styles/pydata-sphinx-theme.css?digest=dfe6caa3a7d634c4db9b" rel="stylesheet" /> 32 33 34 <link href="../../_static/vendor/fontawesome/6.5.2/css/all.min.css?digest=dfe6caa3a7d634c4db9b" rel="stylesheet" /> 35 <link rel="preload" as="font" type="font/woff2" crossorigin href="../../_static/vendor/fontawesome/6.5.2/webfonts/fa-solid-900.woff2" /> 36<link rel="preload" as="font" type="font/woff2" crossorigin href="../../_static/vendor/fontawesome/6.5.2/webfonts/fa-brands-400.woff2" /> 37<link rel="preload" as="font" type="font/woff2" crossorigin href="../../_static/vendor/fontawesome/6.5.2/webfonts/fa-regular-400.woff2" /> 38 39 <link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=a746c00c" /> 40 <link rel="stylesheet" type="text/css" href="../../_static/panels-main.c949a650a448cc0ae9fd3441c0e17fb0.css?v=2a6c4383" /> 41 <link rel="stylesheet" type="text/css" href="../../_static/panels-variables.06eb56fa6e07937060861dad626602ad.css?v=d290406d" /> 42 <link rel="stylesheet" type="text/css" href="../../_static/custom.css?v=43b60b34" /> 43 44 <!-- Pre-loaded scripts that we'll load fully later --> 45 <link rel="preload" as="script" href="../../_static/scripts/bootstrap.js?digest=dfe6caa3a7d634c4db9b" /> 46<link rel="preload" as="script" href="../../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b" /> 47
47<script src="../../_static/vendor/fontawesome/6.5.2/js/all.min.js?digest=dfe6caa3a7d634c4db9b"></script>
47 48 49
49<script src="../../_static/documentation_options.js?v=5929fcd5"></script>
49 50
50<script src="../../_static/doctools.js?v=9bcbadda"></script>
50 51
51<script src="../../_static/sphinx_highlight.js?v=dc90522c"></script>
51 52
52<script>DOCUMENTATION_OPTIONS.pagename = 'platforms/vcs/index';</script>
52 53 <link rel="icon" href="../../_static/favicon.ico"/> 54 <link rel="index" title="Index" href="../../genindex.html" /> 55 <link rel="search" title="Search" href="../../search.html" /> 56 <link rel="next" title="Atari 7800 ProSystem" href="../atari7800/index.html" /> 57 <link rel="prev" title="Platforms" href="../index.html" /> 58 <meta name="viewport" content="width=device-width, initial-scale=1"/> 59 <meta name="docsearch:language" content="en"/> 60<link 61 rel="alternate" 62 type="application/atom+xml" 63 href="../../blog/atom.xml" 64 title="8bitworkshop Blog" 65/> 66 67<style type="text/css"> 68 ul.ablog-archive { 69 list-style: none; 70 overflow: auto; 71 margin-left: 0px; 72 } 73 ul.ablog-archive li { 74 float: left; 75 margin-right: 5px; 76 font-size: 80%; 77 } 78 ul.postlist a { 79 font-style: italic; 80 } 81 ul.postlist-style-disc { 82 list-style-type: disc; 83 } 84 ul.postlist-style-none { 85 list-style-type: none; 86 } 87 ul.postlist-style-circle { 88 list-style-type: circle; 89 } 90</style> 91 92 </head> 93 94 95 <body data-bs-spy="scroll" data-bs-target=".bd-toc-nav" data-offset="180" data-bs-root-margin="0px 0px -60%" data-default-mode="light"> 96 97 98 99 <div id="pst-skip-link" class="skip-link d-print-none"><a href="#main-content">Skip to main content</a></div> 100 101 <div id="pst-scroll-pixel-helper"></div> 102 103 <button type="button" class="btn rounded-pill" id="pst-back-to-top"> 104 <i class="fa-solid fa-arrow-up"></i>Back to top</button> 105 106 107 <input type="checkbox" 108 class="sidebar-toggle" 109 id="pst-primary-sidebar-checkbox"/> 110 <label class="overlay overlay-primary" for="pst-primary-sidebar-checkbox"></label> 111 112 <input type="checkbox" 113 class="sidebar-toggle" 114 id="pst-secondary-sidebar-checkbox"/> 115 <label class="overlay overlay-secondary" for="pst-secondary-sidebar-checkbox"></label> 116 117 <div class="search-button__wrapper"> 118 <div class="search-button__overlay"></div> 119 <div class="search-button__search-container"> 120<form class="bd-search d-flex align-items-center" 121 action="../../search.html" 122 method="get"> 123 <i class="fa-solid fa-magnifying-glass"></i> 124 <input type="search" 125 class="form-control" 126 name="q" 127 id="search-input" 128 placeholder="Search this site..." 129 aria-label="Search this site..." 130 autocomplete="off" 131 autocorrect="off" 132 autocapitalize="off" 133 spellcheck="false"/> 134 <span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd>K</kbd></span> 135</form></div> 136 </div> 137 138 <div class="pst-async-banner-revealer d-none"> 139 <aside id="bd-header-version-warning" class="d-none d-print-none" aria-label="Version warning"></aside> 140</div> 141 142 143 <header class="bd-header navbar navbar-expand-lg bd-navbar d-print-none"> 144<div class="bd-header__inner bd-page-width"> 145 <button class="pst-navbar-icon sidebar-toggle primary-toggle" aria-label="Site navigation"> 146 <span class="fa-solid fa-bars"></span> 147 </button> 148 149 150 <div class="col-lg-3 navbar-header-items__start"> 151 152 <div class="navbar-item"><div class="navbar-logo"> 153<a class="logo-gradient" href="/">8bitworkshop</a> 154</div></div> 155 156 </div> 157 158 <div class="col-lg-9 navbar-header-items"> 159 160 <div class="me-auto navbar-header-items__center"> 161 162 <div class="navbar-item"> 163<nav> 164 <ul class="bd-navbar-elements navbar-nav"> 165 166<li class="nav-item "> 167 <a class="nav-link nav-internal" href="../../books/index.html"> 168 Books 169 </a> 170</li> 171 172 173<li class="nav-item current active"> 174 <a class="nav-link nav-internal" href="../../docs.html"> 175 Docs 176 </a> 177</li> 178 179 180<li class="nav-item "> 181 <a class="nav-link nav-internal" href="../../blog.html"> 182 Blog 183 </a> 184</li> 185 186 187<li class="nav-item "> 188 <a class="nav-link nav-internal" href="../../contact.html"> 189 Contact 190 </a> 191</li> 192 193 194<li class="nav-item "> 195 <a class="nav-link nav-external" href="https://8bitworkshop.com/redir.html"> 196 Start IDE 197 </a> 198</li> 199 200 <li class="nav-item dropdown"> 201 <button class="btn dropdown-toggle nav-item" type="button" data-bs-toggle="dropdown" aria-expanded="false" aria-controls="pst-nav-more-links"> 202 More 203 </button> 204 <ul id="pst-nav-more-links" class="dropdown-menu"> 205 206<li class=" "> 207 <a class="nav-link dropdown-item nav-external" href="https://8bitworkshop.com/projects/"> 208 Projects 209 </a> 210</li> 211 212 213<li class=" "> 214 <a class="nav-link dropdown-item nav-external" href="https://8bitworkshop.com/dithertron/"> 215 Dithertron 216 </a> 217</li> 218 219 </ul> 220 </li> 221 222 </ul> 223</nav></div> 224 225 </div> 226 227 228 <div class="navbar-header-items__end"> 229 230 <div class="navbar-item navbar-persistent--container"> 231 232 233
233<script> 234 document.write(` 235 <button class="btn search-button-field search-button__button" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip"> 236 <i class="fa-solid fa-magnifying-glass"></i> 237 <span class="search-button__default-text">Search</span> 238 <span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span> 239 </button> 240 `); 241 </script>
241 242 </div> 243 244 245 <div class="navbar-item"> 246
247<script> 248document.write(` 249 <button class="btn btn-sm nav-link pst-navbar-icon theme-switch-button" title="light/dark" aria-label="light/dark" data-bs-placement="bottom" data-bs-toggle="tooltip"> 250 <i class="theme-switch fa-solid fa-sun fa-lg" data-mode="light"></i> 251 <i class="theme-switch fa-solid fa-moon fa-lg" data-mode="dark"></i> 252 <i class="theme-switch fa-solid fa-circle-half-stroke fa-lg" data-mode="auto"></i> 253 </button> 254`); 255</script>
255</div> 256 257 <div class="navbar-item"><ul class="navbar-icon-links" 258 aria-label="Icon Links"> 259 <li class="nav-item"> 260 261 262 263 264 265 266 267 268 <a href="https://github.com/sehugg/8bitworkshop" title="GitHub" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-square-github fa-lg" aria-hidden="true"></i> 269 <span class="sr-only">GitHub</span></a> 270 </li> 271 <li class="nav-item"> 272 273 274 275 276 277 278 279 280 <a href="https://oldbytes.space/@8bitworkshop" title="Twitter" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-square-twitter fa-lg" aria-hidden="true"></i> 281 <span class="sr-only">Twitter</span></a> 282 </li> 283</ul></div> 284 285 </div> 286 287 </div> 288 289 290 <div class="navbar-persistent--mobile"> 291 292
292<script> 293 document.write(` 294 <button class="btn search-button-field search-button__button" title="Search" aria-label="Search" data-bs-placement="bottom" data-bs-toggle="tooltip"> 295 <i class="fa-solid fa-magnifying-glass"></i> 296 <span class="search-button__default-text">Search</span> 297 <span class="search-button__kbd-shortcut"><kbd class="kbd-shortcut__modifier">Ctrl</kbd>+<kbd class="kbd-shortcut__modifier">K</kbd></span> 298 </button> 299 `); 300 </script>
300 301 </div> 302 303 304 305 <button class="pst-navbar-icon sidebar-toggle secondary-toggle" aria-label="On this page"> 306 <span class="fa-solid fa-outdent"></span> 307 </button> 308 309</div> 310 311 </header> 312 313 314 <div class="bd-container"> 315 <div class="bd-container__inner bd-page-width"> 316 317 318 319 <div class="bd-sidebar-primary bd-sidebar"> 320 321 322 323 <div class="sidebar-header-items sidebar-primary__section"> 324 325 326 <div class="sidebar-header-items__center"> 327 328 329 330 <div class="navbar-item"> 331<nav> 332 <ul class="bd-navbar-elements navbar-nav"> 333 334<li class="nav-item "> 335 <a class="nav-link nav-internal" href="../../books/index.html"> 336 Books 337 </a> 338</li> 339 340 341<li class="nav-item current active"> 342 <a class="nav-link nav-internal" href="../../docs.html"> 343 Docs 344 </a> 345</li> 346 347 348<li class="nav-item "> 349 <a class="nav-link nav-internal" href="../../blog.html"> 350 Blog 351 </a> 352</li> 353 354 355<li class="nav-item "> 356 <a class="nav-link nav-internal" href="../../contact.html"> 357 Contact 358 </a> 359</li> 360 361 362<li class="nav-item "> 363 <a class="nav-link nav-external" href="https://8bitworkshop.com/redir.html"> 364 Start IDE 365 </a> 366</li> 367 368 369<li class="nav-item "> 370 <a class="nav-link nav-external" href="https://8bitworkshop.com/projects/"> 371 Projects 372 </a> 373</li> 374 375 376<li class="nav-item "> 377 <a class="nav-link nav-external" href="https://8bitworkshop.com/dithertron/"> 378 Dithertron 379 </a> 380</li> 381 382 </ul> 383</nav></div> 384 385 386 </div> 387 388 389 390 <div class="sidebar-header-items__end"> 391 392 <div class="navbar-item"> 393
394<script> 395document.write(` 396 <button class="btn btn-sm nav-link pst-navbar-icon theme-switch-button" title="light/dark" aria-label="light/dark" data-bs-placement="bottom" data-bs-toggle="tooltip"> 397 <i class="theme-switch fa-solid fa-sun fa-lg" data-mode="light"></i> 398 <i class="theme-switch fa-solid fa-moon fa-lg" data-mode="dark"></i> 399 <i class="theme-switch fa-solid fa-circle-half-stroke fa-lg" data-mode="auto"></i> 400 </button> 401`); 402</script>
402</div> 403 404 <div class="navbar-item"><ul class="navbar-icon-links" 405 aria-label="Icon Links"> 406 <li class="nav-item"> 407 408 409 410 411 412 413 414 415 <a href="https://github.com/sehugg/8bitworkshop" title="GitHub" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-square-github fa-lg" aria-hidden="true"></i> 416 <span class="sr-only">GitHub</span></a> 417 </li> 418 <li class="nav-item"> 419 420 421 422 423 424 425 426 427 <a href="https://oldbytes.space/@8bitworkshop" title="Twitter" class="nav-link pst-navbar-icon" rel="noopener" target="_blank" data-bs-toggle="tooltip" data-bs-placement="bottom"><i class="fa-brands fa-square-twitter fa-lg" aria-hidden="true"></i> 428 <span class="sr-only">Twitter</span></a> 429 </li> 430</ul></div> 431 432 </div> 433 434 </div> 435 436 <div class="sidebar-primary-items__start sidebar-primary__section"> 437 <div class="sidebar-primary-item"> 438<nav class="bd-docs-nav bd-links" 439 aria-label="Section Navigation"> 440 <p class="bd-links__title" role="heading" aria-level="1">Section Navigation</p> 441 <div class="bd-toc-item navbar-nav"><ul class="current nav bd-sidenav"> 442<li class="toctree-l1"><a class="reference internal" href="../../docs/faq.html">Frequently Asked Questions</a></li> 443<li class="toctree-l1"><a class="reference internal" href="../../docs/ide.html">8bitworkshop IDE</a></li> 444<li class="toctree-l1"><a class="reference internal" href="../../docs/tools.html">8bitworkshop Tools</a></li> 445<li class="toctree-l1 current active has-children"><a class="reference internal" href="../index.html">Platforms</a><details open="open"><summary><span class="toctree-toggle" role="presentation"><i class="fa-solid fa-chevron-down"></i></span></summary><ul class="current"> 446<li class="toctree-l2 current active"><a class="current reference internal" href="#">Atari 2600/VCS</a></li> 447<li class="toctree-l2"><a class="reference internal" href="../atari7800/index.html">Atari 7800 ProSystem</a></li> 448<li class="toctree-l2"><a class="reference internal" href="../nes/index.html">Nintendo Entertainment System (NES)</a></li> 449<li class="toctree-l2"><a class="reference internal" href="../arcade/index.html">Arcade Games</a></li> 450<li class="toctree-l2"><a class="reference internal" href="../coleco/index.html">ColecoVision</a></li> 451<li class="toctree-l2"><a class="reference internal" href="../msx/index.html">MSX</a></li> 452<li class="toctree-l2"><a class="reference internal" href="../sms/index.html">Sega Master System</a></li> 453<li class="toctree-l2"><a class="reference internal" href="../astrocade/index.html">Bally Astrocade</a></li> 454<li class="toctree-l2"><a class="reference internal" href="../c64/index.html">Commodore 64 (C64)</a></li> 455<li class="toctree-l2"><a class="reference internal" href="../vic20/index.html">Commodore VIC-20</a></li> 456<li class="toctree-l2"><a class="reference internal" href="../atari8/index.html">Atari PCS (8-bit Family)</a></li> 457<li class="toctree-l2"><a class="reference internal" href="../apple2/index.html">Apple ][+</a></li> 458<li class="toctree-l2"><a class="reference internal" href="../basic/index.html">BASIC Interpreter</a></li> 459<li class="toctree-l2"><a class="reference internal" href="../gameboy/index.html">Game Boy</a></li> 460<li class="toctree-l2"><a class="reference internal" href="../pce/index.html">PC Engine (TurboGrafx-16)</a></li> 461<li class="toctree-l2"><a class="reference internal" href="../zx/index.html">ZX Spectrum</a></li> 462<li class="toctree-l2"><a class="reference internal" href="../cpc/index.html">Amstrad CPC</a></li> 463<li class="toctree-l2"><a class="reference internal" href="../zmachine/index.html">Z-Machine</a></li> 464<li class="toctree-l2"><a class="reference internal" href="../verilog/index.html">Verilog</a></li> 465</ul> 466</details></li> 467</ul> 468</div> 469</nav></div> 470 </div> 471 472 473 <div class="sidebar-primary-items__end sidebar-primary__section"> 474 </div> 475 476 <div id="rtd-footer-container"></div> 477 478 479 </div> 480
481 <main id="main-content" class="bd-main" role="main"> 482 483 484 <div class="bd-content"> 485 <div class="bd-article-container"> 486 487 <div class="bd-header-article d-print-none"> 488<div class="header-article-items header-article__inner"> 489 490 <div class="header-article-items__start"> 491 492 <div class="header-article-item"> 493 494 495 496<nav aria-label="Breadcrumb" class="d-print-none"> 497 <ul class="bd-breadcrumbs"> 498 499 <li class="breadcrumb-item breadcrumb-home"> 500 <a href="../../index.html" class="nav-link" aria-label="Home"> 501 <i class="fa-solid fa-home"></i> 502 </a> 503 </li> 504 505 <li class="breadcrumb-item"><a href="../../docs.html" class="nav-link">Docs</a></li> 506 507 508 <li class="breadcrumb-item"><a href="../index.html" class="nav-link">Platforms</a></li> 509 510 <li class="breadcrumb-item active" aria-current="page">Atari 2600/VCS</li> 511 </ul> 512</nav> 513</div> 514 515 </div> 516 517 518</div> 519</div> 520 521 522 523 524<div id="searchbox"></div> 525 <article class="bd-article"> 526 <section id="atari-2600-vcs"> 527<h1>Atari 2600/VCS<a class="headerlink" href="#atari-2600-vcs" title="Link to this heading">#</a></h1> 528<div class="admonition-open-8bitworkshop-ide admonition"> 529<p class="admonition-title">Open 8bitworkshop IDE</p> 530<p><a class="reference external" href="https://8bitworkshop.com/redir.html?platform=vcs">Click here to program the Atari 2600 in the 8bitworkshop IDE now!</a></p> 531</div> 532<section id="vcs-specifications"> 533<h2>VCS Specifications<a class="headerlink" href="#vcs-specifications" title="Link to this heading">#</a></h2> 534<dl class="simple myst"> 535<dt>Lifespan</dt><dd><p>1977â1992</p> 536</dd> 537<dt>Media</dt><dd><p>ROM cartridge (2K-64K)</p> 538</dd> 539<dt>CPU 8-bit</dt><dd><p><a class="reference internal" href="../../chips/m6502/index.html"><span class="doc std std-doc">MOS Technology 6507</span></a> @ 1.19 MHz</p> 540</dd> 541<dt>Memory</dt><dd><p>128 bytes RAM (can be expanded by cartridge)</p> 542</dd> 543<dt>Controllers</dt><dd><p>Joystick, paddles, driving, keypad, Trak-Ball</p> 544</dd> 545<dt>Best-selling game</dt><dd><p>Pac-Man</p> 546</dd> 547</dl> 548<p><img alt="Atari 2600 (by Evan-Amos, public domain)" src="../../_images/atari-2600-wood-4sw-set.jpg" /></p> 549</section> 550<section id="history"> 551<h2>History<a class="headerlink" href="#history" title="Link to this heading">#</a></h2> 552<p>Atari was founded by Nolan Bushnell and Ted Dabney in 1972 to commercialize video games, which were at this time only found in university basements. 553They developed the arcade games <em>Computer Space</em> and <em>Pong</em>, the latter becoming a huge success. 554They also developed more complex games like <em>Tank</em> which included a ROM chip.</p> 555<p>Atari developed a Pong home console, but wanted to develop a console that could play more than one game. 556In 1975 MOS Technology announced the 6502 CPU, which at $5 (volume pricing) made a programmable home console feasible. 557To save money on RAM, theyâd omit the typical frame buffer, relying on the 6502 to program the TIA chip right before each scanline.</p> 558<p>By 1974, Atari had acquired Cyan Engineering, and hired Joe Decuir to help debug the first prototype, codenamed âStellaâ, and to demonstrate that it could play <em>Tank</em> (later released as the <em>Combat</em> cartridge.) 559Jay Miner worked on the ASIC design for the TIA chip, and they completed the second prototype by March 1976. 560The final system included these chips:</p> 561<ul class="simple"> 562<li><p>6507, a cost-reduced 6502 in a 28-pin package.</p></li> 563<li><p>6532, with 128 bytes of RAM, 16 I/O ports, and a programmable timer</p></li> 564<li><p>TIA, which generates video and audio</p></li> 565<li><p>a 2K or 4K ROM via cartridge slot</p></li> 566</ul> 567<p>Bushnell considered taking Atari public but instead sold the company to Warner Communications for US$28 million; subsequently, Warner provided approximately US$100 million in new funding, allowing Stella to be prioritized and fast-tracked.</p> 568<p>The Atari VCS (Video Computer System) was released in time for Christmas 1977 at $199 ($840 adjusted for inflation), and shipped with two joysticks and a Combat cartridge. 569Other launch titles included <em>Air-Sea Battle</em>, <em>Basic Math</em>, <em>Blackjack</em>, <em>Indy 500</em>, <em>Starship</em>, <em>Street Racer</em>, <em>Surround</em>, and <em>Video Olympics</em>.</p> 570<p>The VCS was the best-selling console during the 1979 holiday season, with more than 1 million units s
570old. 571It helped Atari earn more than $2 billion in 1980. 572In 1982 it was rebranded the Atari 2600.</p> 573<p>Activision, formed by four former Atari VCS programmers, led the vanguard of third-party game development thanks to a victory in court. 574But changing market conditions made the boom short-lived. 575By mid-1984, software development for the 2600 had essentially stopped except for that of Atari and Activision. 576Atariâs Consumer Division was sold to Commodore founder Jack Tramiel, who shifted the businessâ focus to home computers and ended all development of console games.</p> 577</section> 578<section id="programming"> 579<h2>Programming<a class="headerlink" href="#programming" title="Link to this heading">#</a></h2> 580<p>Because of the precise timing required, the VCS is usually programmed in 6502 assembly language. 581A âkernelâ runs while the video signal is active, setting up the TIA for each scanline. 582Other game logic usually runs during the blank portions of each frame.</p> 583<p>batariBASIC is also available.</p> 584</section> 585<section id="registers-vcs-h"> 586<h2>Registers (vcs.h)<a class="headerlink" href="#registers-vcs-h" title="Link to this heading">#</a></h2> 587<div class="pst-scrollable-table-container"><table class="table"> 588<thead> 589<tr class="row-odd"><th class="head"><p>Hex</p></th> 590<th class="head"><p>Name</p></th> 591<th class="head"><p>Bit Mask</p></th> 592<th class="head"><p>Description</p></th> 593</tr> 594</thead> 595<tbody> 596<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">00</span></code></p></td> 597<td><p><code class="docutils literal notranslate"><span class="pre">VSYNC</span></code></p></td> 598<td><p><code class="docutils literal notranslate"><span class="pre">......x.</span></code></p></td> 599<td><p>Vertical Sync</p></td> 600</tr> 601<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">01</span></code></p></td> 602<td><p><code class="docutils literal notranslate"><span class="pre">VBLANK</span></code></p></td> 603<td><p><code class="docutils literal notranslate"><span class="pre">xx....x.</span></code></p></td> 604<td><p>Vertical Blank / Latched Port Enable</p></td> 605</tr> 606<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">02</span></code></p></td> 607<td><p><code class="docutils literal notranslate"><span class="pre">WSYNC</span></code></p></td> 608<td><p><code class="docutils literal notranslate"><span class="pre">strobe</span></code></p></td> 609<td><p>Wait for Horizontal Blank</p></td> 610</tr> 611<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">04</span></code></p></td> 612<td><p><code class="docutils literal notranslate"><span class="pre">NUSIZ0</span></code></p></td> 613<td><p><code class="docutils literal notranslate"><span class="pre">..xx.xxx</span></code></p></td> 614<td><p>Number-size Player/Missile 0</p></td> 615</tr> 616<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">05</span></code></p></td> 617<td><p><code class="docutils literal notranslate"><span class="pre">NUSIZ1</span></code></p></td> 618<td><p><code class="docutils literal notranslate"><span class="pre">..xx.xxx</span></code></p></td> 619<td><p>Number-size Player/Missile 1</p></td> 620</tr> 621<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">06</span></code></p></td> 622<td><p><code class="docutils literal notranslate"><span class="pre">COLUP0</span></code></p></td> 623<td><p><code class="docutils literal notranslate"><span class="pre">xxxxxxx.</span></code></p></td> 624<td><p>Color â Player/Missile 0</p></td> 625</tr> 626<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">07</span></code></p></td> 627<td><p><code class="docutils literal notranslate"><span class="pre">COLUP1</span></code></p></td> 628<td><p><code class="docutils literal notranslate"><span class="pre">xxxxxxx.</span></code></p></td> 629<td><p>Color â Player/Missile 1</p></td> 630</tr> 631<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">08</span></code></p></td> 632<td><p><code class="docutils literal notranslate"><span class="pre">COLUPF</span></code></p></td> 633<td><p><code class="docutils literal notranslate"><span class="pre">xxxxxxx.</span></code></p></td> 634<td><p>Color â Playfield/Ball</p></td> 635</tr> 636<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">09</span></code></p></td> 637<td><p><code class="docutils literal notranslate"><span class="pre">COLUBK</span></code></p></td> 638<td><p><code class="docutils literal notranslate"><span class="pre">xxxxxxx.</span></code></p></td> 639<td><p>
639Color â Background</p></td> 640</tr> 641<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">0A</span></code></p></td> 642<td><p><code class="docutils literal notranslate"><span class="pre">CTRLPF</span></code></p></td> 643<td><p><code class="docutils literal notranslate"><span class="pre">..xx.xxx</span></code></p></td> 644<td><p>Control Playfield, Ball</p></td> 645</tr> 646<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">0B</span></code></p></td> 647<td><p><code class="docutils literal notranslate"><span class="pre">REFP0</span></code></p></td> 648<td><p><code class="docutils literal notranslate"><span class="pre">....x...</span></code></p></td> 649<td><p>Reflect Player 0</p></td> 650</tr> 651<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">0C</span></code></p></td> 652<td><p><code class="docutils literal notranslate"><span class="pre">REFP1</span></code></p></td> 653<td><p><code class="docutils literal notranslate"><span class="pre">....x...</span></code></p></td> 654<td><p>Reflect Player 1</p></td> 655</tr> 656<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">0D</span></code></p></td> 657<td><p><code class="docutils literal notranslate"><span class="pre">PF0</span></code></p></td> 658<td><p><code class="docutils literal notranslate"><span class="pre">xxxx....</span></code></p></td> 659<td><p>Playfield 0 (pixels 0-3)</p></td> 660</tr> 661<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">0E</span></code></p></td> 662<td><p><code class="docutils literal notranslate"><span class="pre">PF1</span></code></p></td> 663<td><p><code class="docutils literal notranslate"><span class="pre">xxxxxxxx</span></code></p></td> 664<td><p>Playfield 1 (pixels 4-11)</p></td> 665</tr> 666<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">0F</span></code></p></td> 667<td><p><code class="docutils literal notranslate"><span class="pre">PF2</span></code></p></td> 668<td><p><code class="docutils literal notranslate"><span class="pre">xxxxxxxx</span></code></p></td> 669<td><p>Playfield 2 (pixels 12-19)</p></td> 670</tr> 671<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">10</span></code></p></td> 672<td><p><code class="docutils literal notranslate"><span class="pre">RESP0</span></code></p></td> 673<td><p><code class="docutils literal notranslate"><span class="pre">strobe</span></code></p></td> 674<td><p>Reset Player 0</p></td> 675</tr> 676<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">11</span></code></p></td> 677<td><p><code class="docutils literal notranslate"><span class="pre">RESP1</span></code></p></td> 678<td><p><code class="docutils literal notranslate"><span class="pre">strobe</span></code></p></td> 679<td><p>Reset Player 1</p></td> 680</tr> 681<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">12</span></code></p></td> 682<td><p><code class="docutils literal notranslate"><span class="pre">RESM0</span></code></p></td> 683<td><p><code class="docutils literal notranslate"><span class="pre">strobe</span></code></p></td> 684<td><p>Reset Missile 0</p></td> 685</tr> 686<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">13</span></code></p></td> 687<td><p><code class="docutils literal notranslate"><span class="pre">RESM1</span></code></p></td> 688<td><p><code class="docutils literal notranslate"><span class="pre">strobe</span></code></p></td> 689<td><p>Reset Missile 1</p></td> 690</tr> 691<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">14</span></code></p></td> 692<td><p><code class="docutils literal notranslate"><span class="pre">RESBL</span></code></p></td> 693<td><p><code class="docutils literal notranslate"><span class="pre">strobe</span></code></p></td> 694<td><p>Reset Ball</p></td> 695</tr> 696<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">15</span></code></p></td> 697<td><p><code class="docutils literal notranslate"><span class="pre">AUDC0</span></code></p></td> 698<td><p><code class="docutils literal notranslate"><span class="pre">....xxxx</span></code></p></td> 699<td><p>Audio Control Channel 0</p></td> 700</tr> 701<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">16</span></code></p></td> 702<td><p><code class="docutils literal notranslate"><span class="pre">AUDC1</span></code></p></td> 703<td><p><code class="docutils literal notranslate"><span class="pre">....xxxx</span></code></p></td> 704<td><p>Audio Control Channel 1</p></td> 705</tr> 706<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">17</span></code></p></td> 707<td><p><code class="docutils literal notranslate"><span class="pre">AUDF0</span></code></p></td> 708<td><p><code class="docutils literal notranslate"><span class="pre">...xxxxx</span></code></p></td> 709<td><p>Audio Frequency Channel 0</p></td> 710</tr> 711<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">18</span></code></p></td> 712<td><p><code class="docutils literal notranslate"><span class="pre">AUDF1</span></code></p></td> 713<td><p><code class="docutils literal notranslate"><span class="pre">...xxxxx</span></code></p></td> 714<td><p>Audio Frequency Channel 1</p></td> 715</tr> 716<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">19</span></code></p></td> 717<td><p><code class="docutils literal notranslate"><span class="pre">AUDV0</span></code></p></td> 718<td><p><code class="docutils literal notranslate"><span class="pre">....xxxx</span></code></p></td> 719<td><p>Audio Volume Channel 0</p></td> 720</tr> 721<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">1A</span></code></p></td> 722<td><p><code class="docutils literal notranslate"><span class="pre">AUDV1</span></code></p></td> 723<td><p><code class="docutils literal notranslate"><span class="pre">....xxxx</span></code></p></td> 724<td><p>Audio Volume Channel 1</p></td> 725</tr> 726<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">1B</span></code></p></td> 727<td><p><code class="docutils literal notranslate"><span class="pre">GRP0</span></code></p></td> 728<td><p><code class="docutils literal notranslate"><span class="pre">xxxxxxxx</span></code></p></td> 729<td><p>Graphics Bitmap Player 0</p></td> 730</tr> 731<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">1C</span></code></p></td> 732<td><p><code class="docutils literal notranslate"><span class="pre">GRP1</span></code></p></td> 733<td><p><code class="docutils literal notranslate"><span class="pre">xxxxxxxx</span></code></p></td> 734<td><p>
734Graphics Bitmap Player 1</p></td> 735</tr> 736<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">1D</span></code></p></td> 737<td><p><code class="docutils literal notranslate"><span class="pre">ENAM0</span></code></p></td> 738<td><p><code class="docutils literal notranslate"><span class="pre">......x.</span></code></p></td> 739<td><p>Enable Missile 0</p></td> 740</tr> 741<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">1E</span></code></p></td> 742<td><p><code class="docutils literal notranslate"><span class="pre">ENAM1</span></code></p></td> 743<td><p><code class="docutils literal notranslate"><span class="pre">......x.</span></code></p></td> 744<td><p>Enable Missile 1</p></td> 745</tr> 746<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">1F</span></code></p></td> 747<td><p><code class="docutils literal notranslate"><span class="pre">ENABL</span></code></p></td> 748<td><p><code class="docutils literal notranslate"><span class="pre">......x.</span></code></p></td> 749<td><p>Enable Ball</p></td> 750</tr> 751<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">20</span></code></p></td> 752<td><p><code class="docutils literal notranslate"><span class="pre">HMP0</span></code></p></td> 753<td><p><code class="docutils literal notranslate"><span class="pre">xxxx....</span></code></p></td> 754<td><p>Horizontal Motion Player 0</p></td> 755</tr> 756<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">21</span></code></p></td> 757<td><p><code class="docutils literal notranslate"><span class="pre">HMP1</span></code></p></td> 758<td><p><code class="docutils literal notranslate"><span class="pre">xxxx....</span></code></p></td> 759<td><p>Horizontal Motion Player 1</p></td> 760</tr> 761<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">22</span></code></p></td> 762<td><p><code class="docutils literal notranslate"><span class="pre">HMM0</span></code></p></td> 763<td><p><code class="docutils literal notranslate"><span class="pre">xxxx....</span></code></p></td> 764<td><p>Horizontal Motion Missile 0</p></td> 765</tr> 766<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">23</span></code></p></td> 767<td><p><code class="docutils literal notranslate"><span class="pre">HMM1</span></code></p></td> 768<td><p><code class="docutils literal notranslate"><span class="pre">xxxx....</span></code></p></td> 769<td><p>Horizontal Motion Missile 1</p></td> 770</tr> 771<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">24</span></code></p></td> 772<td><p><code class="docutils literal notranslate"><span class="pre">HMBL</span></code></p></td> 773<td><p><code class="docutils literal notranslate"><span class="pre">xxxx....</span></code></p></td> 774<td><p>Horizontal Motion Ball</p></td> 775</tr> 776<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">25</span></code></p></td> 777<td><p><code class="docutils literal notranslate"><span class="pre">VDELP0</span></code></p></td> 778<td><p><code class="docutils literal notranslate"><span class="pre">.......x</span></code></p></td> 779<td><p>Vertical Delay Player 0</p></td> 780</tr> 781<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">26</span></code></p></td> 782<td><p><code class="docutils literal notranslate"><span class="pre">VDELP1</span></code></p></td> 783<td><p><code class="docutils literal notranslate"><span class="pre">.......x</span></code></p></td> 784<td><p>Vertical Delay Player 1</p></td> 785</tr> 786<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">27</span></code></p></td> 787<td><p><code class="docutils literal notranslate"><span class="pre">VDELBL</span></code></p></td> 788<td><p><code class="docutils literal notranslate"><span class="pre">.......x</span></code></p></td> 789<td><p>Vertical Delay Ball</p></td> 790</tr> 791<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">28</span></code></p></td> 792<td><p><code class="docutils literal notranslate"><span class="pre">RESMP0</span></code></p></td> 793<td><p><code class="docutils literal notranslate"><span class="pre">......x.</span></code></p></td> 794<td><p>Reset Missile 0 to Player 0</p></td> 795</tr> 796<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">29</span></code></p></td> 797<td><p><code class="docutils literal notranslate"><span class="pre">RESMP1</span></code></p></td> 798<td><p><code class="docutils literal notranslate"><span class="pre">......x.</span></code></p></td> 799<td><p>
799Reset Missile 1 to Player 1</p></td> 800</tr> 801<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">2A</span></code></p></td> 802<td><p><code class="docutils literal notranslate"><span class="pre">HMOVE</span></code></p></td> 803<td><p><code class="docutils literal notranslate"><span class="pre">strobe</span></code></p></td> 804<td><p>Apply Horizontal Motion (fine offsets)</p></td> 805</tr> 806<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">2B</span></code></p></td> 807<td><p><code class="docutils literal notranslate"><span class="pre">HMCLR</span></code></p></td> 808<td><p><code class="docutils literal notranslate"><span class="pre">strobe</span></code></p></td> 809<td><p>Clear Horizontal Motion Registers</p></td> 810</tr> 811<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">2C</span></code></p></td> 812<td><p><code class="docutils literal notranslate"><span class="pre">CXCLR</span></code></p></td> 813<td><p><code class="docutils literal notranslate"><span class="pre">strobe</span></code></p></td> 814<td><p>Clear Collision Latches</p></td> 815</tr> 816<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">30</span></code></p></td> 817<td><p><code class="docutils literal notranslate"><span class="pre">CXM0P</span></code></p></td> 818<td><p><code class="docutils literal notranslate"><span class="pre">xx......</span></code></p></td> 819<td><p>Collision M0-P1, M0-P0</p></td> 820</tr> 821<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">31</span></code></p></td> 822<td><p><code class="docutils literal notranslate"><span class="pre">CXM1P</span></code></p></td> 823<td><p><code class="docutils literal notranslate"><span class="pre">xx......</span></code></p></td> 824<td><p>Collision M1-P0, M1-P1</p></td> 825</tr> 826<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">32</span></code></p></td> 827<td><p><code class="docutils literal notranslate"><span class="pre">CXP0FB</span></code></p></td> 828<td><p><code class="docutils literal notranslate"><span class="pre">xx......</span></code></p></td> 829<td><p>Collision P0-PF, P0-BL</p></td> 830</tr> 831<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">33</span></code></p></td> 832<td><p><code class="docutils literal notranslate"><span class="pre">CXP1FB</span></code></p></td> 833<td><p><code class="docutils literal notranslate"><span class="pre">xx......</span></code></p></td> 834<td><p>Collision P1-PF, P1-BL</p></td> 835</tr> 836<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">34</span></code></p></td> 837<td><p><code class="docutils literal notranslate"><span class="pre">CXM0FB</span></code></p></td> 838<td><p><code class="docutils literal notranslate"><span class="pre">xx......</span></code></p></td> 839<td><p>Collision M0-PF, M0-BL</p></td> 840</tr> 841<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">35</span></code></p></td> 842<td><p><code class="docutils literal notranslate"><span class="pre">CXM1FB</span></code></p></td> 843<td><p><code class="docutils literal notranslate"><span class="pre">xx......</span></code></p></td> 844<td><p>Collision M1-PF, M1-BL</p></td> 845</tr> 846<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">36</span></code></p></td> 847<td><p><code class="docutils literal notranslate"><span class="pre">CXBLPF</span></code></p></td> 848<td><p><code class="docutils literal notranslate"><span class="pre">x.......</span></code></p></td> 849<td><p>Collision BL-PF</p></td> 850</tr> 851<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">37</span></code></p></td> 852<td><p><code class="docutils literal notranslate"><span class="pre">CXPPMM</span></code></p></td> 853<td><p><code class="docutils literal notranslate"><span class="pre">xx......</span></code></p></td> 854<td><p>Collision P0-P1, M0-M1</p></td> 855</tr> 856<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">38</span></code></p></td> 857<td><p><code class="docutils literal notranslate"><span class="pre">INPT0</span></code></p></td> 858<td><p><code class="docutils literal notranslate"><span class="pre">
858x.......</span></code></p></td> 859<td><p>Dumped Input Port 0</p></td> 860</tr> 861<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">39</span></code></p></td> 862<td><p><code class="docutils literal notranslate"><span class="pre">INPT1</span></code></p></td> 863<td><p><code class="docutils literal notranslate"><span class="pre">x.......</span></code></p></td> 864<td><p>Dumped Input Port 1</p></td> 865</tr> 866<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">3A</span></code></p></td> 867<td><p><code class="docutils literal notranslate"><span class="pre">INPT2</span></code></p></td> 868<td><p><code class="docutils literal notranslate"><span class="pre">x.......</span></code></p></td> 869<td><p>Dumped Input Port 2</p></td> 870</tr> 871<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">3B</span></code></p></td> 872<td><p><code class="docutils literal notranslate"><span class="pre">INPT3</span></code></p></td> 873<td><p><code class="docutils literal notranslate"><span class="pre">x.......</span></code></p></td> 874<td><p>Dumped Input Port 3</p></td> 875</tr> 876<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">3C</span></code></p></td> 877<td><p><code class="docutils literal notranslate"><span class="pre">INPT4</span></code></p></td> 878<td><p><code class="docutils literal notranslate"><span class="pre">x.......</span></code></p></td> 879<td><p>Latched Input Port 4</p></td> 880</tr> 881<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">3D</span></code></p></td> 882<td><p><code class="docutils literal notranslate"><span class="pre">INPT5</span></code></p></td> 883<td><p><code class="docutils literal notranslate"><span class="pre">x.......</span></code></p></td> 884<td><p>Latched Input Port 5</p></td> 885</tr> 886<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">80-FF</span></code></p></td> 887<td><p>â</p></td> 888<td><p><code class="docutils literal notranslate"><span class="pre">xxxxxxxx</span></code></p></td> 889<td><p>128 Bytes RAM</p></td> 890</tr> 891<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">0280</span></code></p></td> 892<td><p><code class="docutils literal notranslate"><span class="pre">SWCHA</span></code></p></td> 893<td><p><code class="docutils literal notranslate"><span class="pre">xxxxxxxx</span></code></p></td> 894<td><p>Joysticks/Controllers</p></td> 895</tr> 896<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">0281</span></code></p></td> 897<td><p><code class="docutils literal notranslate"><span class="pre">SWACNT</span></code></p></td> 898<td><p><code class="docutils literal notranslate"><span class="pre">xxxxxxxx</span></code></p></td> 899<td><p>Port A DDR (Data Direction Register)</p></td> 900</tr> 901<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">0282</span></code></p></td> 902<td><p><code class="docutils literal notranslate"><span class="pre">SWCHB</span></code></p></td> 903<td><p><code class="docutils literal notranslate"><span class="pre">xxxxxxxx</span></code></p></td> 904<td><p>Console Switches</p></td> 905</tr> 906<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">0283</span></code></p></td> 907<td><p><code class="docutils literal notranslate"><span class="pre">SWBCNT</span></code></p></td> 908<td><p><code class="docutils literal notranslate"><span class="pre">xxxxxxxx</span></code></p></td> 909<td><p>Port B DDR (hardwired as input)</p></td> 910</tr> 911<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">0284</span></code></p></td> 912<td><p><code class="docutils literal notranslate"><span class="pre">INTIM</span></code></p></td> 913<td><p><code class="docutils literal notranslate"><span class="pre">xxxxxxxx</span></code></p></td> 914<td><p>Timer Output</p></td> 915</tr> 916<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">0294</span></code></p></td> 917<td><p><code class="docutils literal notranslate"><span class="pre">TIM1T</span></code></p></td> 918<td><p><code class="docutils literal notranslate"><span class="pre">xxxxxxxx</span></code></p></td> 919<td><p>Set 1 Cycle Timer</p></td> 920</tr> 921<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">0295</span></code></p></td> 922<td><p><code class="docutils literal notranslate"><span class="pre">TIM8T</span></code></p></td> 923<td><p><code class="docutils literal notranslate"><span class="pre">xxxxxxxx</span></code></p></td> 924<td><p>Set 8 Cycle Timer</p></td> 925</tr> 926<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">0296</span></code></p></td> 927<td><p><code class="docutils literal notranslate"><span class="pre">TIM64T</span></code></p></td> 928<td><p><code class="docutils literal notranslate"><span class="pre">xxxxxxxx</span></code></p></td> 929<td><p>Set 64 Cycle Timer</p></td> 930</tr> 931<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">0297</span></code></p></td> 932<td><p><code class="docutils literal notranslate"><span class="pre">T1024T</span></code></p></td> 933<td><p><code class="docutils literal notranslate"><span class="pre">xxxxxxxx</span></code></p></td> 934<td><p>Set 1024 Cycle Timer</p></td> 935</tr> 936</tbody> 937</table> 938</div> 939</section> 940<section id="macros-macro-h"> 941<h2>Macros (macro.h)<a class="headerlink" href="#macros-macro-h" title="Link to this heading">#</a></h2> 942<dl class="simple myst"> 943<dt><code class="docutils literal notranslate"><span class="pre">CLEAN_START</span></code></dt><dd><p>Standardised start-up code at start of program.</p> 944</dd> 945<dt><code class="docutils literal notranslate"><span class="pre">VERTICAL_SYNC</span></code></dt><dd><p>Inserts the code required for a proper 3 scanline vertical sync sequence. Modifies A.</p> 946</dd> 947<dt><code class="docutils literal notranslate"><span class="pre">SLEEP</span></code> n</dt><dd><p>Sleep n cycles.</p> 948</dd> 949<dt><code class="docutils literal notranslate"><span class="pre">SET_POINTER</span></code> variable constant</dt><dd><p>Set a 2 byte pointer to an absolute address. Modifies A.</p> 950</dd> 951<dt><code class="docutils literal notranslate"><span class="pre">SKIP_SCANLINES</span></code> n</dt><dd><p>Skip a given # of scanlines. Sets X to 0.</p> 952</dd> 953</dl> 954</section> 955<section id="extra-macros-xmacro-h"> 956<h2>Extra Macros (xmacro.h)<a class="headerlink" href="#extra-macros-xmacro-h" title="Link to this heading">#</a></h2> 957<dl class="simple myst"> 958<dt><code class="docutils literal notranslate"><span class="pre">
958TIMER_SETUP</span></code> lines</dt><dd><p>The timer will be set so that it expires before <code class="docutils literal notranslate"><span class="pre">lines</span></code> scanlines. A WSYNC will be done first.</p> 959</dd> 960<dt><code class="docutils literal notranslate"><span class="pre">TIMER_WAIT</span></code></dt><dd><p>Use with <code class="docutils literal notranslate"><span class="pre">TIMER_SETUP</span></code> to wait for timer to complete. Performs a WSYNC afterwards.</p> 961</dd> 962</dl> 963</section> 964<section id="helpful-links"> 965<h2>Helpful Links<a class="headerlink" href="#helpful-links" title="Link to this heading">#</a></h2> 966<ul class="simple"> 967<li><p><a class="reference external" href="https://javatari.org/">Javatari.js</a>, the emulator used by 8bitworkshop</p></li> 968<li><p><a class="reference external" href="https://alienbill.com/2600/101/docs/stella.html">Stella Programmerâs Guide</a></p></li> 969<li><p><a class="reference external" href="http://6502.org/tutorials/">6502 Tutorials</a></p></li> 970<li><p><a class="reference external" href="http://blog.kevtris.org/blogfiles/Atari%202600%20Mappers.txt">Atari 2600 Mappers</a></p></li> 971<li><p><a class="reference external" href="https://alienbill.com/2600/basic/downloads/0.35/help.html">batari BASIC Reference</a></p></li> 972<li><p><a class="reference external" href="https://8bitworkshop.com/projects/?i=vcs">Browse 8bitworkshop VCS Projects</a></p></li> 973</ul> 974</section> 975</section> 976 977<div class="section"> 978 979 <div class="section"> 980 <h2>Comments</h2> 981
981<script src="https://giscus.app/client.js" 982 data-repo="sehugg/8bitworkshop" 983 data-repo-id="MDEwOlJlcG9zaXRvcnk3NjYwODUyMg==" 984 data-category="General" 985 data-category-id="MDE4OkRpc2N1c3Npb25DYXRlZ29yeTMyMDE2Mjgw" 986 data-mapping="title" 987 data-reactions-enabled="1" 988 data-emit-metadata="0" 989 data-theme="light" 990 crossorigin="anonymous" 991 async> 992 </script>
992 993 </div> 994</div> 995 996 </article> 997 998 999 1000 1001 1002 <footer class="prev-next-footer d-print-none"> 1003 1004<div class="prev-next-area"> 1005 <a class="left-prev" 1006 href="../index.html" 1007 title="previous page"> 1008 <i class="fa-solid fa-angle-left"></i> 1009 <div class="prev-next-info"> 1010 <p class="prev-next-subtitle">previous</p> 1011 <p class="prev-next-title">Platforms</p> 1012 </div> 1013 </a> 1014 <a class="right-next" 1015 href="../atari7800/index.html" 1016 title="next page"> 1017 <div class="prev-next-info"> 1018 <p class="prev-next-subtitle">next</p> 1019 <p class="prev-next-title">Atari 7800 ProSystem</p> 1020 </div> 1021 <i class="fa-solid fa-angle-right"></i> 1022 </a> 1023</div> 1024 </footer> 1025 1026 </div> 1027 1028 1029 1030 <div class="bd-sidebar-secondary bd-toc"><div class="sidebar-secondary-items sidebar-secondary__inner"> 1031 1032 1033 <div class="sidebar-secondary-item"> 1034<div 1035 id="pst-page-navigation-heading-2" 1036 class="page-toc tocsection onthispage"> 1037 <i class="fa-solid fa-list"></i> On this page 1038 </div> 1039 <nav class="bd-toc-nav page-toc" aria-labelledby="pst-page-navigation-heading-2"> 1040 <ul class="visible nav section-nav flex-column"> 1041<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#vcs-specifications">VCS Specifications</a></li> 1042<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#history">History</a></li> 1043<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#programming">Programming</a></li> 1044<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#registers-vcs-h">Registers (vcs.h)</a></li> 1045<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#macros-macro-h">Macros (macro.h)</a></li> 1046<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#extra-macros-xmacro-h">Extra Macros (xmacro.h)</a></li> 1047<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link" href="#helpful-links">Helpful Links</a></li> 1048</ul> 1049 </nav></div> 1050 1051</div></div> 1052 1053 1054 </div> 1055 <footer class="bd-footer-content"> 1056 1057 </footer> 1058 1059 </main> 1060 </div> 1061 </div> 1062 1063 <!-- Scripts loaded after <body> so the DOM is not blocked --> 1064
1064<script src="../../_static/scripts/bootstrap.js?digest=dfe6caa3a7d634c4db9b"></script>
vendor: 1 bytes, line 1064
1064
1065<script src="../../_static/scripts/pydata-sphinx-theme.js?digest=dfe6caa3a7d634c4db9b"></script>
1065 1066 1067 <footer class="bd-footer"> 1068<div class="bd-footer__inner bd-page-width"> 1069 1070 1071 1072 <div class="footer-items__end"> 1073 1074 <div class="footer-item"> 1075<p class="theme-version"> 1076 Built with the <a href="https://pydata-sphinx-theme.readthedocs.io/en/stable/index.html">PyData Sphinx Theme</a> 0.15.4. 1077</p></div> 1078 1079 </div> 1080 1081</div> 1082 1083 </footer> 1084 </body> 1085</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.