Visit Atarimax Store


Free-Net Logo
The Atari SIG Historical Archive
Created and hosted by: atarimax.com
[ HOME | GO ATARI | 8-BIT | ST/TT | PORTFOLIO | LYNX | JAGUAR | LIBRARY ]


Article #121 (214 is last):
From: xx004@cleveland.Freenet.Edu (Atari SIG)
Newsgroups: freenet.sci.comp.atari.product.8bit.zmag
Subject: Z*Magazine: 10-Aug-88 #118
Reply-To: xx004@cleveland.Freenet.Edu (Atari SIG)
Date: Thu Jul 29 10:02:45 1993


                     ZMAGAZINE WEEKLY ONLINE MAGAZINE
                                Issue #118
                        Wednesday, August 10, 1988

                          PUBLISHER: Ron Kovacs
                  American Publishing Enterprises, Inc.
                            Post Office Box 74
                       Middlesex, New Jersey 08846

                      MANAGING EDITOR: R. F. Mariano
                         ZMAG EDITOR: John Deegan

                          REGIONAL HEADQUARTERS
                          ---------------------
      NORTH              SOUTH             MIDWEST             WEST
 (201) 343-1426     (904) 786-4176     (216) 784-0574     (916) 962-2566
=========================================================================
 AVAILABLE EXCLUSIVELY ON:  * COMPUSERVE * GENIE * DELPHI * THE SOURCE *
=========================================================================
                           |TABLE OF CONTENTS|
<*> Publishers Desk                 <*> Editors Desk
<*> Whats New For Express! Pro      <*> Basic Programming FINAL CHAPTER
<*> Goin' South                     <*> ZMAG Extra
<*> Rumors Revisited

======================================
PUBLISHERS DESK             Ron Kovacs
======================================

I have been receiving Email lately requesting information on the return of 
the Syndicate BBS.  I am presently retired from SysOp status until the 
fall.  At that time I will leave details in ZMag and ST-Report on the re-
opening of the BBS.  We will NOT be running Carina II.  (Just had to put 
that in) opppsss.

The DOG DAYS are here and the community at-large is quiet.  Except for the 
continued ramblings generated by past issues of ZMag, all seems quiet.  On 
the ST front though, there is much rumbling going on.  For the latest news 
and reviews on the ST side, read ST-Report Magazine.

John Deegan, the new editor of this publication, has been doing a fine job 
and I hope you all find the continued support of John interesting.

Next week in ZMagazine:  The debut of our Official User Group Listing.  
Stay tuned for more details next week.

======================================
EDITORS DESK               John Deegan
======================================

I have included another Carina II response.  It was sent to Ron Kovacs via 
the Launch Pad BBS. (Zmag Hdqts North)...  He has commented on parts of 
the commentary and I have also added my 2 cents after reading it.  I want 
to stress here that we are closing this matter with this issue.  If you 
have further commentary on the Carina II review/commentary, Please refrain 
from sending them in.

On the ConmpuServe Pay Service, the following was captured and added 
shortly before publication:

                       SPECIAL SUPRA MODEM OFFER!!!

CompuServe's Atari Forums have made arrangements with Paramount Products
Inc. to offer the members of our forums the chance to upgrade your system
to 2400 baud service at a very special price.  For a limited time,
CompuServe subscribers may purchase the SUPRA CORP. 2400 baud Hayes-
compatible modem for the very **LOW** price.  These are brand new, not
reconditioned units, with the full SUPRA CORP. warranty.

The SUPRA MODEM uses the Hayes Smartmodem 'AT' command set and operates at
300-1200-2400 baud.  It's an outboard unit (not an internal plug-in card)
allowing ease of transfer to other computers.  Connection is thru the
standard RS-232 interface. (Just plug it into the back of your ATARI ST).
To take advantage of this special offer, call CompuServes Atari 8/16 Forum
and read the file in the News and Reviews sections.

If you've been accessing CompuServe at 1200 baud, this is a  great way to
lower your total online bill since CIS does *NOT*  charge a premium for
2400 baud access.  (You can get the same amount of information or download
the same amount of programs in approximately 1/2 the time as 1200 baud
users!) This modem will PAY FOR ITSELF in just a few sessions.

This is a worthwhile deal to jump on!  So call CIS today!!

Now, the Carina II Reader Response:   by George Stevens

I have read with interest the articles in Zmag 112, 114, 115, 116;
regarding Carina II software, and some of the name calling that has taken
place.

Let me interrupt here by saying I have yet to purchase a BBS, or associate
with one other than as a typical caller.  I have more or less considered
the idea, usually bagging the whole idea because of the expense and trouble
involved.

In any event, I was very interested in Ron Kovacs editorial in Zmag 112,
since I call two Carina II BBS systems in my area.  What concerned me the
most was the troubles he related about the software, and figured "Hey ...
he must know what he is talking about ... ".

In retrospect, I find it was not the case.  Ron admitted in Zmag 115 that
he did nothing to rememdy his problems, and stated it cannot be the
equipment, it MUST be the software.  In ZMAG 112, he asked any others with
the same problems to step forward and let the world know; we are still
waiting for just one!

Above all this, it seems Ron and the Zmag staff have taken to personal
battles with those that did voice an opinion opposite the one Ron presented.

Frankly I don't see how you deserve a reply, you still have not proven your 
point, and reflect not only unethical behavior, but quite a bit of
immaturity.

Well now you can attack me if you like, I expect you will since you have 
everyone else who has replied on this topic.  

From the user side, Carina II is a unique and highly functional Bulletin
Board System, not only is it reliable, but fun to use.  I can't see why
Ron had the problems he had, and it is a shame he had them, but I disagree
STRONGLY with his motives.

George Stevens 1241 Palatine Rd, Arlington Heights IL.

Reply from Ron Kovacs

I want to thank you for taking the time in replying.  I can see that we 
have another person from the Carina Defense Team at large.

Please RE-READ the statements made by myself and those of the gentlemen 
you noted in your commentary.  I removed the names to save another attack 
from them.  I do have the right to respond to the critics just as much as 
they do.  You are obviously in agreement with the views presented by them.  
You are entitled to do so.

You do state you DO NOT run a BBS system.  You are wise in your comments 
and we have atleast shed a little light on the matter.  There are 
countless dollars invested in BBS Systems.  The equipment, and software 
and the many hours add up to much!  I have atleast discussed the problems 
that I encountered and reported.  Though not a popular discussion with 
some readers, I have stood by it and will not change my original comments 
until proven otherwise.

You are the user and have presented your facts.  True or false they are 
here for all to read.  Is this what you wanted?

Editors Note:
We have received 7 replies to the Jim Stiles article printed two weeks 
ago.  We have been asked NOT to use the source name in the article and 
until we have the permission to use the names, we will NOT publish these 
comments.  I also feel that we have discussed the issue at great length 
and will close the subject effective with this issue.  Unless Mr. Kovacs 
decides otherwise, Carina II's future is in the public's hands.  Pro or 
con, the argument will never reach a conclusive finding.

And finally, to Mr. Stevens, I made the remarks in the most recent 
releases of ZMagazine.  Ron Kovacs DID NOT edit or make the editorial 
commentary.  Thank you again for submitting your comments.

There you have it.  Now lets discuss something else???

======================================
Whats New For EXPRESS! Professional
======================================
by John Deegan

In traveling through all of the Online Services, I noticed a few files 
that might be of interest to Express Professional SysOps.  Just incase you 
may not have heard.

In the Atari8 SIG on CIS, and GEnie's download section, there are NEW 
files uploaded for Express SysOps.  I have them listed below.  Please note 
that I have used the CompuServe filenames.

CHESS.CMD  A BBS game.
ATARI.CMD  File converter.  Atascii->Ascii  Ascii->Atascii
DUMP.CMD   Similiar to SpartaDos DUMP command
FORMAT.CMD Formatter utility
HAPPY.CMD  Happy users initializer.
PRTLOG.CMD Utility
QSCAN.CMD  Utility
TOP10.CMD  Utility
VERSN.CMD  Utility
======================================
LEARNING TO PROGRAM IN ATARI BASIC       "FINAL INSTALLMENT"
======================================
LESSON 10              Version 1.06
(C) COPYRIGHT 1988 by Jackson Beebe

[ED. This is the final installment of the Basic Programming series.  All 
of the installments presented in past issues of ZMagazine were written and 
edited by Jackson Beebe.  Your are encouraged to send your comments to 
Jackson at the address at the bottom of this column.  Next week a contents 
page will be included.  This will list all the topics covered in this 
series.  Zmag presented all the articles between Jan 1988 and this issue.

                          DIRECTORY from BASIC:

Have you ever been working in BASIC, and wished you could see a directory
of files on your disk without exiting BASIC to DOS, getting a directory,
and re-entering BASIC? (Did I really need to ask?) Often I work in
TurboBASIC (PD), just for this feature.

Well, today I want to share a great "one line hack" from Kenny Ksajikian
of Van Nuys, CA. I saw this in ANTIC magazine Volume 3 Number 7, November
1984, in the letters section, and hope that by giving credit to author
and source, I may pass it along your way.

This is a little program you put on disk under the name DIR. The program
has no line numbers, and is used in Immediate mode in BASIC by ENTERing
it into RAM with the command ENTER "D:DIR". It will give you a directory,
but will not stick around, nor graft onto your program source code
already in RAM. When it's done listing files, it gives an Error 136,
End-of-file (ignore this error) and returns you to BASIC.

You may write this file onto disk in two ways. You may copy it using DOS,
from the screen editor to disk, by:

  1) Issuing a command to copy from the screen editor E:,to D:DIR and
     . This opens a file.

  2) Type in the program.

  3) Press CONTROL+3 which closes the file, and writes it to disk.

A second method is to write the file in a text editor/word processor and
use an ASCII save under the name D:DIR. The editor TEDIT normally does an
ASCII save, but with AtariWriter Plus, you must go to the main menu and
push CONTROL+S for an ASCII save. (An ASCII save eliminates the header of
format and punctuation codes in a word processor file, and writes only
the text.) Here's the program:

CLR:DIM N$(15):CLOSE #5:OPEN #5,6,0,"D:*.*":FOR I=1 TO 128:INPUT #5,N$:?
N$:NEXT I:CLOSE #5   

I added the CLR command at the beginning of Kenny's program, to avoid an
Error 9 when using it over and over, caused by re-dimensioning N$. The
CLR command undimensions all strings.

Using DOS, put a copy of this on all your BASIC disks. Use this by issuing
the command:  ENTER "D:DIR"  in Immediate mode in BASIC. Very handy. A
big THANK YOU to Kenny for this tip!

                             SOUND Statement:

Okay, on to sound from your Atari. Atari 8 bit machines are rich in sound,
having 4 built-in voices, numbered 0-3.  Each of these may be turned on or
off independently, or in combination with any others. Once a voice is
turned on, it remains on until you turn it off manually, or the program
encounters an END statement.

The syntax of the SOUND statement is as follows:

     10 SOUND N,F,D,V   N = voice Number  (0-3)
                        F = Frequency     (0-255)
                        D = Distortion    (0-14) even #'s
                        V = Volume        (0-15)total < 33

Voice Number may be an integer from 0 to 3.

Frequency may be an integer between 0 and 255. Zero sounds a high note
and 255, a low note. The formula is: Actual Frequency = 31960 divided by
(our number (0-255) plus one.)

Distortion works with even numbers only. 10 and 14 sound 'pure' tones.
Experiment until you get a sound you like.

Volume may be 0 to 15. 15 = maximum volume, and 0 = Off. You should keep
the total volume of all voices added together, under 33, to avoid speaker
distortion.

If you wish to turn on two voices, it requires two SOUND statements (or
a multi-statement line) as:

   10 REM ** SOUND DEMO **
   20 REM
   30 SOUND 0,126,10,10
   40 SOUND 1,81,14,10
   50 FOR X = 1 to 150:NEXT X
   60 END

This program turns on two voices, counts from 1 to 150, then turns both
voices off.

Here's what happens without an END statement in your program: Type this
and RUN it.

     10 SOUND 1,100,4,10

Note this continues to sound. How do you turn off a voice within a
program? Well, like this:

     20 SOUND 1,0,0,0

Issuing the SOUND statement with the correct voice #, and a zero for
Volume, turns that voice off. It's standard practice to put zeros for all
parameters, freq, distortion and volume, for quick recognition of an OFF
statement. RUN, NEW and END will also shut SOUND off.

Okay, let's do a few things. Let's play Yankee Doodle. We'll use one
voice, and mess around a bit. We will need a little delay loop to slow
BASIC down a little, and we may as well put the loop in a subroutine, and
call it throughout the program.

To facilitate hacking around with this without having to type each line
over and over again, let's put the Distortion, Volume, and even the
Frequency into variables in the SOUND statements,and initialize them up
front in the program. We can easily alter them when experimenting, by
changing these initialization statements.

10 REM *** SOUND DEMO ***
20 REM 
30 REM ** Initialize **
40 DIST=14:VOL=14:DELAY=100
50 FREQ1=63:FREQ2=57:FREQ3=50
60 REM
70 REM ** SOUND **
80 SOUND 1,FREQ1,DIST,VOL
90 GOSUB 1000
100 SOUND 1,FREQ1,DIST,VOL
110 GOSUB 1000
120 SOUND 1,FREQ2,DIST,VOL
130 GOSUB 1000
140 SOUND 1,FREQ3,DIST,VOL
150 GOSUB 1000
160 SOUND 1,FREQ1,DIST,VOL
170 GOSUB 1000
180 SOUND 1,FREQ3,DIST,VOL
190 GOSUB 1000
200 SOUND 1,FREQ2,DIST,VOL
210 GOSUB 1000
220 END 
230 REM
990 REM *** DELAY SUB ***
1000 FOR X=1 TO DELAY:NEXT X
1010 SOUND 1,0,0,0
1020 RETURN 

Experiment by changing the values of Distortion, Volume, Delay and
Frequency in lines 40 and 50. Take out line 1010, and see the effect of
NOT shutting off the sound between steps.

                     ======== Sound Effects ========

We can make some neat sounds, by turning on a voice, then changing it's
pitch, distortion, and/or frequency, up or down etc. FOR-NEXT loops are
dandy for this.

Here's a short demo of a lazer gun type sound:

10 REM ** EFFECT1.BAS **
20 REM ** LAZER **
30 FOR X=20 TO 200 STEP 4
40 SOUND 1,X,10,12
50 NEXT X
60 END 

Here's a demo of how the Distortions sound:

10 REM ** EFFECT2.BAS **
20 REM ** Distortion Demo **
30 REM
40 FOR DIST=0 TO 14 STEP 2
50 SOUND 1,100,DIST,10
60 ? "DISTORTION ";DIST
70 FOR X=1 TO 300:NEXT X
80 NEXT DIST
90 END 

Here's one I call a Plink:

10 FOR PLINK =16 TO 0 STEP -1
20 SOUND 0,30,10,PLINK
30 NEXT PLINK
40 END

Or a tone:

10 FOR TONE = 20 TO 0 STEP -1
20 SOUND 0,53,14,TONE
30 NEXT TONE
40 END

Finally here's a rising and falling siren:

10 REM ** EFFECT3.BAS **
20 REM ** SIREN **
30 FOR REPEAT=1 TO 2
40 REM ** RISE **
60 FOR FREQ=255 TO 5 STEP -1
70 SOUND 1,FREQ,14,10
80 NEXT FREQ
90 REM ** FALL **
100 FOR FREQ=5 TO 255 STEP 1
110 SOUND 1,FREQ,14,10
120 NEXT FREQ
130 NEXT REPEAT
140 END 

                              Poking Sounds:

If you have been using your Memory Map very much, you have probably
wondered by now, if you can POKE sound values directly into memory. Yes
you can. Here are the locations (for you to read up on.)

   53760  = Voice 0   Frequency
   53761       "      Dist / Volume
   53762  = Voice 1   Frequency
   53763       "      Dist /Volume
   53764  = Voice 2   Frequency
   53766  = Voice 3   Frequency
   53767       "      Dist / Volume

The formula for the value to POKE in the odd numbered location (Distortion
and Volume) is:

     (Distortion * 16) + Volume

For example:

   SOUND 2,121,10,10  is equal to:  POKE 53762,121:POKE 53763,170

Well, this is the general idea. Try turning on more than one voice at
once. Try one voice rising while one falls. Try different effects at
different times with different voices going different directions. Save
your favorite sounds for use in programs. There are many good sound demo
programs available on Public Domain disks, from magazines by Type-In, or
available for D/L on Bulletin Boards Systems (BBS.) Study these to see
what makes them tick.

Unfortunately, SOUND statements will slow down a program quite a bit.
POKEs are faster, but will still have an effect on the speed of a program.

                           SETCOLOR Statement:

BASIC has good color control built right in. Options and colors vary with
different graphics modes, but we will just cover Graphics Mode 0, BASIC's
default mode. The familiar blue screen with white letters.

The syntax for the SETCOLOR statement is:

 10 SETCOLOR R,H,I      R = Register   (1,2,4)
                        H = Hue        (0-15)
                        L = Intensity  (0-14) even #'s

These three parameters (in Graphics 0) control the color and intensity of
1 the Letters, Background and Border. The Letters are always the same
color as the Background (screen), but may be varied in intensity from
black to white. When they are the same intensity as the Background, they
disappear.

                        ======   REGISTER   ======

This parameter of the SETCOLOR statement determines whether we alter:

   LETTERS       1
   BACKGROUND    2
   BORDER        4

                        ========   HUE   ========

This sets the color of the Background or Border. Colors possible are:

                       0 = Gray           8 = Blue
                       1 = Gold           9 = Light Blue
                       2 = Orange        10 = Turquoise
                       3 = Red-Orange    11 = Green-Blue
                       4 = Pink          12 = Green
                       5 = Pink-Purple   13 = Yellow-Green
                       6 = Purple-Blue   14 = Orange-Green
                       7 = Dark Blue     15 = Light Orange

Note that you can't change the hue in a SETCOLOR 1 statement. Letter
color follows Background color. I usually put a zero in the HUE location
of a SETCOLOR 1 statement.

                       ======   INTENSITY  =======

Intensities are roughly:

     Dark     (0-2)
     Medium   (4-8)
     Bright   (10-14)

Only the even numbers have an effect. Let's try some examples.

Here's code to produce bright white letters on a black screen with a dark blue border.

     10 REM ** White on Blk/Blu **
     20 SETCOLOR 1,0,14
     30 SETCOLOR 2,0,0
     40 SETCOLOR 4,7,4
     50 END


Here's white letters on a red-orange background, with a dark blue border.
Isn't this fun?

     10 REM ** Wht on Red-Or/Dk Bl **
     20 SETCOLOR 1,0,14
     30 SETCOLOR 2,3,4
     40 SETCOLOR 4,7,2
     50 END

                              Poking Color:

Once again, you should realize that many of the functions you can
accomplish with language statements, as SOUND or SETCOLOR, can be done by
directly POKEing memory locations. There are three memory locations that
correspond to the SETCOLOR statements. These are:

   POKE 709   LETTERS     (0-14)
   POKE 710   BACKGROUND  (0-238)
   POKE 712   BORDER      (0-238)

The relationship to the setcolor statements are:

   SETCOLOR's        POKE
   first digit

       1              709
       2              710
       4              712

The value to poke into RAM is determined by the formula:

      (HUE * 16) + INTENSITY

   For Example:

    SETCOLOR 1,0,0   =  POKE 709,0
    SETCOLOR 2,5,6   =  POKE 710,86
    SETCOLOR 4,12,8  =  POKE 712,200

In the last example, 4 stands for Border, so we use POKE 712. Color times
16 plus intensity is (12 * 16) + 8 or 200. Hence POKE 712,200.

I prefer using the POKE statements to control color in BASIC. You can
always use SETCOLOR to develop a screen, then use a POKE statement in the
finished program. SETCOLOR and POKE produce the same result.

Of course, you can vary, flash and alter these colors by using a FOR-NEXT
loop to alter the values of the SETCOLOR statement during program
execution. This is especially nice on title screens. It's easy to change
colors in different parts of your program, or from title screen to program,
etc. You only need to put a few statements in, and it's done. It allows
you to use colors you enjoy.

As always, experiment with this, and see what you like. Keep a notebook,
as you occasionally find good screen "recipes" by accident. Write them
down for future use.

                          JOYSTICK and TRIGGER:

We can directly read the joysticks in BASIC, by checking STICK(0),
STICK(1), 2, or 3, to determine the direction the stick is being pushed.
See chart below. If the stick is resting in the middle, that's a 15. If
it's pushed UP for example, it's now a 14. We can have our program fall
through a pile of IF-THEN statements, testing for all these possible
readings.

               14
        10              6
          \     |     /
           \    |    /
            \   |   /
             \  |  /
              \   /
     11 ------- 15 ------- 7
              /   \
             /  |  \
            /   |   \
           /    |    \
          /     |     \
         9              5
               13


The trigger is read by the STRIG(0), or STRIG(1), 2, or 3 etc.  If STRIG()
is ZERO, the trigger is pressed. If it's 1, it isn't. (That always seemed
a bit backwards to me but that's how it works.)

                   * KIDSDRAW.BAS (an ENTER-IN Program)

Okay. let's put some of this to work in a BASIC program that demonstrates
these concepts. KIDSDRAW.BAS is a goodie I wrote for my own education, as
well as to orient my 3 year old daughter to eye-hand coordination on the
computer. Let's take a look.

Lines 60 and 230, clear the screen, and set screen colors. The next
section drew screen boxes using CONT+Q, CONT+E, Z,C,W, in my ORIGINAL
program, but here,for ASCII printer purposes, I used dashes. Those control
characters won't print out right, and may feed endless sheets of paper,
or any number of odd things. You should by all means, be making up screens
using these CONTROL characters. Look them up, and try them. One screen
will addict you forever! You print BASIC listings then, with G:. All the
control characters will print out correctly, and you get condensed print
with 137 characters per line, making BASIC listings much more readable.

We dimension a string variable, two characters in length at line 70, and
bring in a string in line 160. Line 190 tests for a null input, which has
a length of zero (less than 1.). If TRUE, it must have been a plain
RETURN, so we "default" to a speed of 75, with the SPEED$="75" statement.
Note 75 is in quotes, as it's still a two character string at this point.
Line 200 converts any string in SPEED$ to a number. Note that no error
checking is done in this program. You could add error checking for the
practice.

The cursor is positioned in the middle of the screen, and the program
falls through a pile of IF-THEN statements, and a SOUND statement, then
prints on the screen (that's supposed to be an INVERSE SPACE between the
quotes in line 500.) It loops back up to 290 to fall through the stack
again. I used line 290 to save some typing at lines 310-380 by only having
to type the letters ST for a variable. Try putting STICK(0) in lines 310-
380 and remove line 290. Change line 600 to read GOTO 310. Does it run
faster?

If the stick is not pushed (15), the program loops, awaiting a stick
deflection. When that occurs, X or Y are incremented or decremented,
depending on which way the stick was pushed. Note that we specified at
line 310, that when STICK(0) = 7 (stick pushed to the right) it adds 1 to
X. If it's pushed up and to the left (10), it adds 1 to Y, and subtracts
1 from X. These are directions referenced from the middle of the screen,
as specified in line 260.

UP (14), adds 1 to Y, DOWN (13), subtracts 1 from Y. LEFT (11), subtracts
1 from X, RIGHT (7), adds 1 to X etc. That's the plain vanilla joystick control.

Pushing the trigger is checked for at line 500. If it is not being pressed
(1), an inverse blank is printed (black on a white screen), and there's a
jump around the "regular blank" print statement of line 510. If the
trigger is pushed (0), line 500 is not executed, and the "regular blank"
overprints whatever may have been on the screen. Line 540 creates a delay
for low numbers, while a 75 gives maximum speed. Try removing line 570
(insert a REM at it's beginning) and see if it runs faster without the
zero FOR-NEXT loop.

Line 570 reads the memory location 53279 for a 6, which would mean that
START is being pressed. (Got that location scope out in your Memory
Map?). Line 600 zooms it back up to the top.

10 REM ** KIDSDRAW.BAS **
20 REM Ver 1.07  6/88
30 REM Jackson Beebe
40 REM 
50 REM ** Clear screen /Set color **
60 ? CHR$(125):POKE 709,14:POKE 710,52:POKE 712,114
70 DIM SPEED$(2)
80 REM 
90 REM ** Draw Opening Screen **
100 ? :? "------------------------------------"
110 ? "     KIDSDRAW     by Jackson Beebe  "
120 ? "------------------------------------"
130 ? "   1 Joystick * FIRE button erases  "
140 ? "------------------------------------"
150 POSITION 4,20:? "Press  START  to  erase screen"
160 POSITION 11,12:? "Set  SPEED  (1-75)":POSITION 11,13:? "or push RETURN   ";:INPUT SPEED$
170 REM 
180 REM **  Default to 75 **
190 IF LEN(SPEED$)<1 THEN SPEED$="75"
200 SPEED=VAL(SPEED$)
210 REM 
220 REM ** Clear screen/Set color **
230 ? CHR$(125):POKE 709,0:POKE 710,14:POKE 712,116
240 REM 
250 REM ** Middle of Screen **
260 X=19:Y=11
270 REM 
280 REM ** READ STICK(0) assign to ST
290 ST=STICK(0)
300 REM ** Fall thru pile of tests **
310 IF ST=7 THEN X=X+1
320 IF ST=14 THEN Y=Y-1
330 IF ST=13 THEN Y=Y+1
340 IF ST=6 THEN X=X+1:Y=Y-1
350 IF ST=10 THEN X=X-1:Y=Y-1
360 IF ST=11 THEN X=X-1
370 IF ST=9 THEN X=X-1:Y=Y+1
380 IF ST=5 THEN X=X+1:Y=Y+1
390 IF X>38 THEN X=38
400 IF Y>22 THEN Y=22
410 REM 
420 REM ** Handle negative number **
430 IF X<1 THEN X=1
440 IF Y<1 THEN Y=1
450 REM 
460 REM ** Calc SOUND (Trigger-Off)**
470 SOUND 0,(ABS(X-Y)+2)*5,10,12:IF STRIG(0)=0 THEN SOUND 0,0,0,0
480 REM 
490 REM ** Draw or Erase **
500 POKE 752,1:POSITION X,Y:IF STRIG(0)=1 THEN ? " ":GOTO 540
510 ? " "
520 REM 
530 REM ** Speed (Delay) Loop **
540 FOR ZZ=1 TO 75-SPEED:NEXT ZZ:REM SLOWS
550 REM 
560 REM ** Check for 'START' **
570 IF PEEK(53279)=6 THEN 230
580 REM 
590 REM ** Loop Back
600 GOTO 290

** NOTE **  If you D/L'ed this file from CompuServe, it will be modified
to contain CR/LF at the end of each line, rather than the Atari EOL
character. (Copy the file to the screen using DOS, and see if it breaks
correctly by line, or if it has inverse rectangles and triangles at the
end of each line.) Before using a word processor as described below,
convert the CR/LF back to Atari EOL characters using FILEFIX.COM by Glenn
K. Smith, or a similar program.)

                               Conclusion:

I hope you have enjoyed LEARNING TO PROGRAM IN ATARI BASIC.  This series
was intended to "turn you on" to BASIC programming, get you over any
program phobia you may have had, and hook your curiosity.

There are many opinions about BASIC, programming, and learning. Some folks
say you will be ruined forever if you learn BASIC as your initial
language. They feel you will learn a mish-mash approach, and never again
be able to train your brain to think in "structured" language approaches.
I believe you may teach yourself to write structured BASIC code if you
choose.

I am aware that most do-it-yourself self-taught programmers will quit
before they struggle months with a complex language, before producing
meaningful output. 

I'm not kidding about struggling a long time. It takes dedication for
instance, to teach yourself "C" at home from a book. BASIC will get you
up and running with immediate feedback, and meaningful error messages
right away. I believe immediate feedback while learning is of prime
importance. BASIC will allow you to write and use a program you need,
right away.  It will make you feel like a programmer. It will build your
confidence. It is important to note that you can find help with BASIC
problems almost anywhere around you. Try asking those around you for help
with ASSEMBLER, or C language problems, and note the blank stares on their
faces.

If a true hacker begins with BASIC, I believe that person will find their
way to other languages as needed.  When learning a second or third
language, you will know enough to ask "How do I bring in a string?", or
"How do I test for 'null' input?" or similar questions. You're not
starting from scratch.

Many beginners feel that it is a hardship to have to use more than one
kind of computer at once, or to learn more than one language. Their brain
fixates on the DIFFERENCE between machines or languages, and they tell
themselves it is too confusing and too hard. I believe this is a fatal
thinking trap that you can easily overcome. If you stop and think for a
moment, you will note that a person may encounter as many as 3 or 4 types
of computer between home, school, work and friends. It is futile to demand
the world standardize. This is never going to happen, and why be left
behind in the dust? I have used a mainframe while teaching college, a mini
at work, and an Atari 8 bit and a PC-AT clone at home. I lived to tell
about it! You can too.

It is important to focus on the SAMENESS of all the computers or software
you use. This is the secret. Realize the importance of knowing you may
BLOCK text in a word processor, and asking "How do you BLOCK and MOVE in
WordPerfect, or PC-Write, or Atariwriter Plus" etc. Apply this thinking to
programming. Believe that more rather than fewer machines and programs
will crop up in the future. Let your mind catch on to the basic feel and
style of "how computers think." Develop a hacker approach. Be brave enough
to learn, but also be smart enough to develop a feel for what will damage
or delete your files. Back up frequently !

This series of ten lessons does not cover all of BASIC's possibilities.
It will get you up and running, and expose you to a core of programming
ideas and techniques. It's a firm foundation to build on. Read magazines.
Borrow books. Join a user group. Subscribe to ANALOG and ANTIC magazine.
Buy a modem and call Bulletin Board Systems. Download programs. Write
programs and Upload them to a BBS. Keep trying. Drink cokes (beer), eat
cold french fries, and stay up until all hours hacking on your computer.
Tell your wife "I'll be done here in just a minute honey." Upgrade your
memory. Invent a clever hack. Become a computer nerd and write articles,
or even a series of lessons. 

Above all, enjoy yourself, and give your computer a hug today! Hang in
there. Thanks for listening.

This concludes LEARNING TO PROGRAM IN ATARI BASIC. I hope you have enjoyed
this series, and have found some useful information here. Write me.

Contact me at:

                              Jackson Beebe
                           Prairie Data Fields
                           807 West Hill Street
                            Urbana, IL   61801
                          CompuServe  72550,317

======================================
Goin' South          by John Lewis Orr
======================================

[ED. The following article was captured from the online services and is 
seemingly presented as a regular release.  The subject matter detailed 
here is in no way reflective of the staff of Zmagazine or APEinc.  This 
article has NOT been re-edited.]

Volume I   Preview                          August ,1988

NOW IS THE TIME FOR ALL GOOD MEN TO COME TO THE AID OF THEIR COUNTRY

That line from my high school typing days keeps ringing in the back of my
head lately.  When I saw it appear on the screen as I gave a demonstration
of a computer program to someone, I realized I had never stopped to give
the sentence and its implications a first thought, that is until lately.
But, in light of the general political/moral drift of the country, "Now is
the time for all good men to come to the aid of their country." has taken
on an entirely different meaning.  My "silent minority" behavior must
change, and I have chosen to start with a series of personal/political
editorials and observations.  As editor-in-chief-, publisher, writer, et
al of "Goin' South", I need the readers' comments and involvement in order
not to lose sight of the purpose of this publication.  I even hope to
enlist the overt aid of some of you by adding your input to the content
of future issues.  I've chosen to keep this first issue as a simple text
file in order to make it universally available.  Again, user input will
determine its format as time goes by; that's assuming this draws any
attention.

What is "Goin' South"? It is a personal political awareness effort.  It
is hoped that it will become a public political awareness publication.
There are no enticements offered other than the one about personal growth.
There are no special interests served other than those of the person(s)
who contribute(s) to its content.

Ever since I became involved in using a personal computer (1979), I've
been drawn by the idea that it is a tool meant for the enhancement of
human freedom.  I've also been very frightened by its potential for
infesting our lives through governmental abuses.  But I had never
considered using the process myself to help encourage the first and hinder
the second.  A line from the movie "Inherit the Wind" comes to mind; 'The
purpose of the press is to comfort the afflicted and afflict the
comfortable'. I see "Goin' South" as a member of a free press.  Be it
know, that on the 8th of August, 1988 (8-8-88) "Goin' South" was born to:

A.   Comfort the afflicted
B.   Afflict the comfortable
C.   Provide a forum for the proliferation of minority ideas
D.   Defend the Constitution of the United States of America against all
     enemies foreign and domestic by exposing those who would erase any
     portion of its ideas from the American scene.

And who am I?

My name is John Lewis Orr.  I am 39 years old and live on the Big Island
of Hawaii.  I am married and have one child with another on the way.  I am
a teacher by trade who has been running his own business for the past
three years. I am a veteran, having voluntarily served in Vietnam. I lean
toward the liberal persuasion politically and toward the conservative
persuasion economically.  Based on the general directions this country has
taken in the last few years, I am evidently in the minority.  I don't feel
comfortable about many things I see happening in this country today.

The following biography is made available to those who would label my
effort as communist or subversive...

I perceive myself to be intensely loyal to the most noble document ever
written by man, the Constitution of the United States and its Bill of
Rights.  Remember, the Bible was written by God, or so many would believe.
My family history winds backward through American history to Meriwether
Lewis and George Washington.  I am NOT a white supremist and have NO
tolerance for such attitutdes, but I am at the same time very proud of my
family history.  From what I know of my family, someone has served in
every conflict bought by the United States.

Okay, so what?

This work is an effort at political awareness and responsibilty.  I hope
that others will join in this effort.  There are political realities today
that scare me; and I am frightened for my children.  If you share that
concern and feel a bit powerless, join me in creating a vehicle which can
become a voice against the storm.  Drop me a note at ED.SOFT.  Let's see
what we can create.

======================================
ZMAG EXTRA
======================================
Captured text...

                               ACTION'S LAW
       Power tends to corrupt; absolute power corrupts absolutely.

                              ALBRECHT'S LAW
  Social innovations tend to the level of minimum tolerable well-being.

                        ALLEN'S (or CANN'S) AXIOM
               When all else fails, read the instructions.

                            BOREN'S FIRST LAW
                          When in doubt, mumble.

                              BOVE'S THEOREM
The remaining work to finish in order to reach your goal increases as the
deadline approaches.

                             BOWIE'S THEOREM
      If an experiment works, you must be using the wrong equipment.

                               BROOK'S LAW
        Adding manpower to a late software project makes it later.

                         CANADA BILL JONES' MOTTO
     It's morally wrong to allow naive end users to keep their money.

                        CANN'S (or ALLEN'S) AXIOM
               When all else fails, read the instructions.

                          CARLSON'S CONSOLATION
Nothing is ever a complete failure; it can always serve as a bad example.

                            CLARKE'S THIRD LAW
  Any sufficiently advanced technology is indistinguishable from magic.

++++++++++++++++++++++++++++++++++++++
Rumors Revisited
++++++++++++++++++++++++++++++++++++++
From ST-REPORT Magazine

ED. Just in case you might have missed past rumors around the community, 
here are a few to keep you up to date.]

@ SUNNYVALE: A 68000 "GAME MACHINE" is in the works...Atari will "try" to 
  make sure it is not associated with the ST line...

@ 60md Hards: By year's end, most ST hard drives will be looking to 
  upgrade or will already have 60md hard drives...

@ HOUSTON: It looks like this will be the area ATARI's "NEW" factory will 
  appear...

_________________________________________________________________________
ZMAGAZINE   ISSUE #118   AUGUST 10, 1988   Copyright (C) 1988 APEInc.
All Rights Reserved.
_________________________________________________________________________

 




Visit Atarimax Store