--------------------------------------------------------------------------- BASIC PROGRAMME EXAMPLES FOR ATARI 2600 (BASIC PROGRAMMING & CompuMate). --------------------------------------------------------------------------- AUTHOR: Graham.J.Percy EMAIL: gjp57@yahoo.com PHONE: (61) 03 5978 7198 FAQ Version 1.0, 25th September, 1998. Copyright (c) 1998 Graham.J.Percy All rights reserved. This document may be reproduced, in whole or in part, provided the copyright notice remains intact and no fee is charged. The data contained herein is provided for informational purposes only. No warranty is made with regards to the accuracy of the information. --------------------------------------------------------------------------- INTRODUCTION Having dabbled in basic programming for some years I was fascinated to learn that there are two basic programming interpreters available for use on the Atari 2600. This presents a tantalizing challenge to see what can be achieved on the 2600. This FAQ documents the results of several weeks of pondering. Hope you enjoy! --------------------------------------------------------------------------- BASIC PROGRAMMES FOR "BASIC PROGRAMMING" Atari CX2620 The simple keypad input using four-colour cursor selection is really user friendly and you have complete control over which elements are displayed during programme execution. I love it! It came as a blow then to discover that there is a tiny sixty-four character limit to programme size. Economical use of commands is therefore priority-one. Armed with this knowledge it is still possible to come up with some new and worthwhile programmes :-) NOTE:- I have not shown line wrap-around since this does not affect the way in which the instructions are actually entered. Also, the convention for showing the left pointing arrow and the divide sign is as per "BASIC PROGRAMMING" instructions from Greg Chance's 2600 ROM library at http://www.videogames.org Quote:- " This manual contains numerous uses of a left-arrow symbol. Because there is no ASCII equivalent, I will use an exclamation point (!) to represent the left-arrow. Also, wherever the division sign is used (a - with dots over and below it), I will use a /. " *************************** SAMPLE PROGRAMME #1 *************************** BALL AND PADDLE (with two-directional control of paddle) Use number keypad to control paddle. <4> = Left, <6> = Right Try to keep the white ball from passing. (Set speed to 60). 1 A!Key 2 Hor1!Hor1 + 10xA - A/Ax50 3 Hor2!Hor2 + 8 4 Ver2!Ver2 - 3 5 If Hit Then Ver2!24 6 Goto 1 NOTE:- the term A/Ax50 in line #2 is used to prevent the graphics dot from moving when there is no keyboard input.ie. when A=0. Most other Basic Programming interpreters would return a divide overflow error in this instance but Basic Programming (2600) returns a value of 0/0x50 = 0 . This saves adding one more conditional if-then statement. *************************** SAMPLE PROGRAMME #2 *************************** MOVING DOT (demonstration of Four-directional control of graphics dot) Use number keypad to control the graphics dot. <4> = Left, <6> = Right, <2> = Up, <8> = Down 1 A!Key 2 If A Mod6=2 Then Goto 5 3 Hor1!Hor1 + 8xA - A/Ax40 4 Goto 1 5 Ver1!Ver1 + 3xA - 15 6 Goto 1 --------------------------------------------------------------------------- BASIC PROGRAMMES FOR THE SPECTRAVIDEO CompuMate The CompuMate has two built-in programmes, namely a music programme and a paint programme. These are completely seperate from the text based interpreter which cannot access music/sound or graphic functions. Not withstanding this the basic programming function of the CompuMate allows for a very much larger programme size (2K) and therefore a greater scope in programming. There is also the added advantage of being able to save your work on audio tape at any time. The manual supplied with the CompuMate provides only an introduction to the use of basic programming on the CompuMate. (Some of the available functions are not even mentioned in the manual. eg. Int, Step, <> (does not equal)). I have therefore experimented with command usage and found the commands to be far more flexible than the manual suggests. The sample program "QUEST-A" shows this best. Anyway, check these out :-) *************************** SAMPLE PROGRAMME #3 *************************** NUMBER GUESS 5 LetA=Rnd[19] 10 LetB=A+1 15 IfD<5Goto30 20 Prt"NO MORE GUESSES THE","NUMBER WAS",B,"" 25 Goto80 30 Prt"GUESS NUMBR,1 TO 20" 35 InpC 40 LetD=D+1 45 IfC=BGoto75 50 IfC1Goto76 74 LetA=N,B=1 75 Goto78 76 LetA=1,B=N 77 Rem ITERATE TO SOLUTION 78 LetC=[A+B]/2 79 LetD=C*C 80 LetE=D-N 81 PrtC 82 IfE<0.000ThenLetE=-E 83 IfE<.003ThenGoto90 84 IfD1ThenPrt"3=GET KEY" 25 Inp"ACTION=",B 26 IfB=2ThenGoto12 27 IfB=1ThenGoto48 28 IfB<>3ThenGoto25 29 IfK=0ThenPrt"YOU GOT KEY" 30 LetK=1 31 Goto18 32 PrtS$,R$,"[",Q$,"A DARK HALL" 33 IfP=1ThenGoto38 34 LetG=Rnd[2],F=Rnd[3] 35 IfG<>2ThenGoto38 36 Prt"OGRE HERE","1=UP 2=RGHT","3=FIGHT" 37 Goto39 38 Prt"1=UP 2=RGHT" 39 Inp"ACTION=",B 40 IfB=3ThenIfG=2ThenIfF=3ThenGoto96 41 IfB=2ThenGoto12 42 IfB=1ThenGoto48 43 IfB<>3ThenGoto39 44 Prt"GOT THE OGREGOT ARMOUR" 45 LetP=1 46 Goto32 48 IfD=1ThenIfE=3ThenGoto70 49 IfD=0ThenIfE=3ThenGoto77 50 PrtV$,R$,"[",R$,S$ 51 Prt"TROLL, DOOR",Y$,"3=OPN 4=FGT" 52 Inp"ACTION=",B 53 IfB=1ThenGoto32 54 IfB=2ThenGoto18 55 IfB=3ThenIfK=1ThenGoto60 56 IfB=3ThenPrt"NEED A KEY" 57 IfB=4ThenGos88 59 Goto48 60 Prt"TROL SAY NO" 61 Goto48 70 PrtS$,R$,"[",R$,S$,"OPEN DOOR",Y$,"3=UP" 71 Inp"ACTION=",B 72 IfB=1ThenGoto32 73 IfB=2ThenGoto18 74 IfB<>3ThenGoto71 75 Prt"* * *"," *","",R$,R$,S$,"YOU,RE FREE" 76 Goto97 77 PrtV$,R$,"[",R$,S$,"A DOOR",Y$,"3=OPEN DOOR" 79 Inp"ACTION=",B 80 IfB=1ThenGoto32 81 IfB=2ThenGoto18 82 IfB=3ThenIfK=1ThenGoto85 83 IfB=3ThenPrt"NEED A KEY" 84 Goto79 85 Prt"YOU OPEN IT" 86 LetD=1 87 Goto70 88 IfP=0ThenLetF=Rnd[1],E=E+1 89 IfP=1ThenLetF=Rnd[14],E=E+1 90 Prt"YOU ATTACK," 91 IfF=0ThenGoto96 92 IfE=3ThenPrt"GOT HIM" 93 Rtn 96 Prt"HE GOT YOU" 97 Prt"BYE" NOTES:- Add one more line to the above programme and you will get an ERR 2 message (programme too big). Character variables are assigned fixed values and are then used to help with text style graphics! Wow! :o) Number variables are used to control programme flow. B is used to nominate an action by the player K = 1 when you have the key P = 1 when you have killed the ogre and have gained armour D = 1 after you open the door E is the damage inflicted on the troll, he dies when E = 3 Also, random numbers are generated for a little unpredictability. G is used to determine the ogre's presence F decides who will win a fight with the ogre or troll (when you have the armour, your chances against the troll are much better) --------------------------------------------------------------------------- There must be plenty of programmers out there who have programmes of their own for BASIC PROGRAMMING or CompuMate, so how about emailing them to me for inclusion in this FAQ. (With due credit of course). I also invite any comments you might otherwise have regarding this FAQ. Happy gaming! GP ---------------------------------------------------------------------------