PageSourceSearch

https://8bitworkshop.com/docs/platforms/vcs/

html 8bitworkshop.com collected 2026-10-01 12:35:51 UTC 53,578 bytes, 1,085 lines download raw bytes

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 &#8212; 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> &#64; 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.