Posted Mon Feb 20, 2006 2:19 AM
batari BASIC for Beginners -- Session 1: Introduction
The goal of this tutorial is to help beginners learn how to write their own programs (presumably games) for the Atari 2600. Unfortunately, it isn't feasible to teach computer programming or computer game design in a tutorial such as this, so the emphasis in that first sentence should be on "to help beginners learn"-- i.e., not "to teach beginners." I'll introduce you to the essential concepts as best as I can, but you're strongly encouraged to supplement any information in this tutorial with information from elsewhere-- BASIC programming tutorials or books, 6502 assembly programming tutorials or books, other Atari 2600 tutorials or documentation, articles or documents about TV displays, etc.
This tutorial will be presented as a series of posts in the AtariAge forums, but at some point in the future I hope to revise it into a sort of HTML-formatted e-book that can be saved to your computer and read offline, complete with plenty of nice illustrations, etc. But for now, posting the sessions to AtariAge will make it easier for me to get the ball rolling, and will of course allow everyone to contribute their comments or questions.
The title of the tutorial suggests that it's about using batari BASIC to write Atari 2600 games, but it's also going to be about using 6502 assembly language. I intend to cover both languages more or less in parallel, but since the tutorial is aimed at beginners, the main focus will usually be on batari BASIC.
For those who don't know yet, batari BASIC (a.k.a. "Atari 2600 BASIC") is a high-level programming language created by Fred Quimby ("batari"), primarily to make it easy for beginners to get started in Atari 2600 game programming, but also to help serve as a stepping-stone toward learning 6502 assembly. To quote from the batari BASIC "readme" file, "Atari 2600 BASIC is intended as a beginner's platform so that one may become accustomed to the intricacies of the system. Although Atari 2600 BASIC is a viable development platform on its own, its real purpose is as a stepping stone toward 2600 programming using assembly language. Atari 2600 BASIC 'lowers the bar' so that others with limited programming experience can write games that can run on a real Atari 2600 or an emulator."
However, it should be noted that batari BASIC itself doesn't run on an Atari 2600 (e.g., in the same way that Atari BASIC runs on an Atari 800 computer). Instead, batari BASIC is actually a compiler that runs on a computer, therefore you must use a computer to write game programs in the batari BASIC language, then compile them into ROM image files that can be run on an Atari 2600 emulator (on a computer), or loaded and run on an actual Atari 2600 or 7800 using a device such as a Supercharger, Cuttle Cart, Cuttle Cart 2, or Krokodile Cartridge. This means you'll need to start by downloading and installing all of the necessary tools on your computer, which will be the focus of Sessions 2 and 3.
It should also be noted that batari BASIC isn't a "hacking tool"; you can't use batari BASIC to modify existing game ROMs, nor is it really possible to disassemble existing game ROMs into batari BASIC code and then hack the source code. On the other hand, if you happen to have the program listing for a game that was written in batari BASIC, you can modify the program listing and then recompile it with batari BASIC (assuming the original programmer doesn't mind you doing that). Thus, you won't be able to use batari BASIC to hack Atari 2600 "Adventure" by Warren Robinett, but you will be able to use batari BASIC to modify my own "Reventure" game, which I'll be working on as one of the example games in this tutorial.
Since the purpose of this tutorial is to help you write games or other types of programs for the Atari 2600, I'll include some actual games for illustration. However, there are many different kinds of games, and each kind of game tends to have its own types of "issues" that need to be dealt with-- indeed, different games in the same category can have their own individual issues-- so it will be impossible to cover every sort of issue that might arise. Nevertheless, I'll include a variety of sample games, to help ensure that a variety of issues get discussed. Most of the sample games will probably be very simple, possibly not even complete "games" per se, and you're welcome to use them as a basis for creating games of your own.
In addition, there will be a lot of snippets of code, and programming samples that by no stretch of the imagination could be classified as "games," to illustrate different ideas or to help you explore different features of the Atari 2600.
Finally, I want to stress up front that I intend to keep the pace of this tutorial slow and methodical. For example, I intend to cover each of the Atari's features in one or more sessions of their own, rather than trying to present everything at once. This means you shouldn't expect to be able to start programming a game right away. I apologize in advance for this, but there are other tutorials about programming the Atari 2600 that you can refer to if you get impatient and want to jump ahead to something I haven't covered yet.
In Session 2, I'll discuss the minimum required tools that you'll need to get started. And in Session 3, I'll discuss the process of getting these tools set up on your system.