<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>VCS Architecture on Programming the Atari VCS in Assembly</title><link>https://cdeever.github.io/atari-vcs/docs/architecture/</link><description>Recent content in VCS Architecture on Programming the Atari VCS in Assembly</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://cdeever.github.io/atari-vcs/docs/architecture/index.xml" rel="self" type="application/rss+xml"/><item><title>The Processor (CPU)</title><link>https://cdeever.github.io/atari-vcs/docs/architecture/cpu/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/atari-vcs/docs/architecture/cpu/</guid><description>&lt;h1 id="the-processor-cpu--a-6507"&gt;The Processor (CPU) — a 6507&lt;a class="anchor" href="#the-processor-cpu--a-6507"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The CPU runs your program. On most computers that makes it the star; on the VCS it&amp;rsquo;s deliberately the &lt;em&gt;least&lt;/em&gt; special of the four chips — a small, ordinary processor whose whole job is to operate the other three at exactly the right moments.&lt;/p&gt;
&lt;h2 id="a-6502-with-its-wings-clipped"&gt;A 6502 with its wings clipped&lt;a class="anchor" href="#a-6502-with-its-wings-clipped"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The 6507 is a cost-reduced version of the well-known &lt;a href="https://cdeever.github.io/atari-vcs/docs/6502-basics/"&gt;6502&lt;/a&gt;: the same instruction set, the same registers, the same programming model — but in a cheaper package with two consequential omissions:&lt;/p&gt;</description></item><item><title>The Video &amp; Sound Chip (TIA)</title><link>https://cdeever.github.io/atari-vcs/docs/architecture/programming-the-television/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/atari-vcs/docs/architecture/programming-the-television/</guid><description>&lt;h1 id="the-tia-programming-the-television"&gt;The TIA: Programming the Television&lt;a class="anchor" href="#the-tia-programming-the-television"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Every console has a graphics chip. What makes the TIA — the Television Interface Adapter — and therefore the VCS different is what it &lt;em&gt;doesn&amp;rsquo;t&lt;/em&gt; have: a frame buffer. That single absence is the source of both the machine&amp;rsquo;s notorious difficulty and its peculiar charm, and it&amp;rsquo;s why the right mental model is not &amp;ldquo;drawing graphics&amp;rdquo; but &lt;strong&gt;programming the television itself.&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="what-the-tia-handles"&gt;What the TIA handles&lt;a class="anchor" href="#what-the-tia-handles"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For one chip, it does a lot — and all of it in real time, in step with the beam:&lt;/p&gt;</description></item><item><title>Memory, I/O &amp; Timer (RIOT)</title><link>https://cdeever.github.io/atari-vcs/docs/architecture/riot/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/atari-vcs/docs/architecture/riot/</guid><description>&lt;h1 id="the-memory-io--timer-chip-riot--a-6532"&gt;The Memory, I/O &amp;amp; Timer chip (RIOT) — a 6532&lt;a class="anchor" href="#the-memory-io--timer-chip-riot--a-6532"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The RIOT (the 6532) — sometimes called the PIA — is the unglamorous but essential housekeeping chip. While the &lt;a href="https://cdeever.github.io/atari-vcs/docs/architecture/programming-the-television/"&gt;TIA&lt;/a&gt; gets the glory, the RIOT quietly provides the three things every program needs but the TIA doesn&amp;rsquo;t supply. Its name is an inventory of those jobs: &lt;strong&gt;R&lt;/strong&gt;AM, &lt;strong&gt;I&lt;/strong&gt;/&lt;strong&gt;O&lt;/strong&gt;, and &lt;strong&gt;T&lt;/strong&gt;imer.&lt;/p&gt;
&lt;h2 id="ram--your-128-bytes"&gt;RAM — your 128 bytes&lt;a class="anchor" href="#ram--your-128-bytes"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The RIOT holds the VCS&amp;rsquo;s &lt;em&gt;entire&lt;/em&gt; read/write memory: &lt;strong&gt;128 bytes&lt;/strong&gt;, at addresses &lt;code&gt;$80&lt;/code&gt;–&lt;code&gt;$FF&lt;/code&gt;. Every variable your game keeps — score, positions, velocities, game state — lives here, and nowhere else. Internalize how little that is: a single screen&amp;rsquo;s worth of modern data structures would not come close to fitting. Tight memory discipline isn&amp;rsquo;t an advanced topic on the VCS; it&amp;rsquo;s the baseline.&lt;/p&gt;</description></item><item><title>The Program ROM</title><link>https://cdeever.github.io/atari-vcs/docs/architecture/rom/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://cdeever.github.io/atari-vcs/docs/architecture/rom/</guid><description>&lt;h1 id="the-program-rom--your-cartridge"&gt;The Program ROM — your cartridge&lt;a class="anchor" href="#the-program-rom--your-cartridge"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Three of the four chips are inside the console. The &lt;strong&gt;ROM is the one you supply&lt;/strong&gt; — it&amp;rsquo;s the cartridge — and it holds your program and all of its constant data: code, sprite bitmaps, lookup tables, music.&lt;/p&gt;
&lt;h2 id="where-it-lives"&gt;Where it lives&lt;a class="anchor" href="#where-it-lives"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The CPU maps the cartridge into the &lt;strong&gt;top of the address space&lt;/strong&gt;, the &lt;code&gt;$F000&lt;/code&gt;–&lt;code&gt;$FFFF&lt;/code&gt; window, with the all-important &lt;strong&gt;reset vectors at &lt;code&gt;$FFFC&lt;/code&gt;&lt;/strong&gt;. When the console powers on, the 6507 reads that vector and jumps to it — so the very top of your ROM is where execution begins. The mechanics of that startup are in &lt;strong&gt;&lt;a href="https://cdeever.github.io/atari-vcs/docs/getting-started/minimal-rom/"&gt;Anatomy of a Minimal ROM&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;</description></item></channel></rss>