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 #99 (214 is last):
From: xx004@cleveland.Freenet.Edu (Atari SIG)
Newsgroups: freenet.sci.comp.atari.product.8bit.zmag
Subject: Z*Magazine:  7-Mar-88 #96
Reply-To: xx004@cleveland.Freenet.Edu (Atari SIG)
Date: Sat Jul 24 09:24:11 1993


 
______________________________________
|////////////////////////////////////|
|////////////////////////////////////|
|//SYNDICATE ZMAGAZINE    ISSUE #95//|
|//--------------------------------//~
~//PUBLISHGR/EDITOR| March 7, 9988 //|
|//   RON KOVACS   |               //|
|////////////////////////////////////|
|////////////////////////////////////|
|____________________________________|
|Syndicate Publishing Company        |
|ZMagazine and ST-Report Magazines   |
|Post Office Box 74                  |
|Middlesex, New Jersey 08846-0074    |
|____________________________________|
|Syndicate BBS (201)968-8148 300/1200|
|Enter ZMAG, then 1988 for ZMAG and  |
|ST-Report downloading.              |
|____________________________________|
|Issue #96 INDEX                     |
|____________________________________|
|*|Editors Desk                      |
|*|Programming in Basic  Part 9      |
|*|ZMag Technique (Mr. Goodprobe)    |
|*|The Programmers Pal (Review)      |
|*|Whats Wrong With Atari  Part 2    |
|*|SPC Newswire (Atari News)         |
|*|BBS Watch                         |
|_|__________________________________|
______________________________________
Editors Desk
______________________________________
by Ron Kovacs

It is getting more and more difficult
to gather 8 bit news, reviews and
modification information.  As an Atari
publisher, I can understand why there
is an apparent disregarl for the Atari
8 Bit computer.

ZMag WILL NOT die!!  Even if we have 
to go to a bi-weekly format or even a
monthly report, we will do so, But we
will continue providing the best news
and information we can find.

If you are a GEnie subscriber, you can
gev to us |hrough the ST Roundtable.
We are part of the RT in the Bulletin
Board section, Catagoy #22.

Look for more GEnie news in future
editions of ZMag.

Check out ST-Report Issue #25 for a
confrence transcript with Sam Tramiel
of Atari.  It should open your eyes a
bit!  We hope for the better.

We are will be publishing another
newsletter later this month.  The
BBS Report will debut March 21, 1988.
This publication will contain news
and information about BBS systems,
BBS software, sysop interviews, and
BBS advertising.  All advertising will
be free of charge to all ZMAG
carriers! Stay tuned for details.

Thi{ weeks issue is brought to you
by Midtown Television, Atari 8/16 bit
sales and repair. Give them a call at
(216-622-0997) and mention you read
this ad in ZMagazine.

Please call these fine BBS Systems!
Phantasmal Alchemy  (203) 443-5200
EXTE                (616) 245-8259
CoaSTline           (201) 929-9351
Lions Den BBs       (312) 690-3724

Thanks for reading ZMAG!
______________________________________
LEARNING TO PROGRAM IN ATARI BASIC
..Part 9 of a continuing smries..
_____________________________________
(c)1987,1988 Jackson Beebe

Subroutines

CONTENTS:
---------
Subroutines
GOSUB Statement
RETURN Statement
POP Statement
Error Checking
ON_GOSUB Statement

Structure:
----------
As we have discussed before, BASIC
gets a 'bad rap' in the programming
community, owing mainly to:

1.  It's slow execution speed, as it's
    an INTERPRETED language.

2.  It's lack of 'structure.'

Execution speed is not really as big a
problem lately with the advent of
compilers that can compile a BASIC
program into object code and run it
rapidly, but 8 bit Atari's are not
receiving up-to-the-minute new
compilers, as are PC's.

We do have TurboBASIC, the fine PD
BASIC for XL's and XE's from Germany
that includes a compiler, but for now
we're learning about plain vanilla
Atari BASIC.

'Structured Programming' is the new
darling catch-phrase of the computer
world. Structured languages like
PASCAL and perhaps "C", have rigid
requirements for how we can code and
arrange code, to accomplish a job.
BASIC on the other hand is very, very
loose. It will let us just about write
anything any old way, and it will
probably work.  The drawback to
BASIC's lack of structure is that we
can write such a mish-mash of jumping
around kludged up code, that without
REMs, no one will ever be able to
trouble-shoot, decipher, or maintain
our code.

There are ways we can introduce some
structure into BASIC, that will allow
us to program in more modern
'modules.'  One of these techniques is
to use subroutines. Subroutines are
modules of code that we transfer
control to, within a program, execute
the code in the module, then return.

Subroutines:
------------
The most popular use for subroutines,
is to hold code that we use more than
once in a program. Instead of coding
it out three, or four or more times
throughout the program, we can code it
once, put it in a subroutine, and call
that subroutine whenever we need to
use that code. Isn't that clever? 

These subroutines may be placed
anywhere in a program, at the
beginning, in the middle, or at the
end of a program. I think it's best to
pick either the beginning, or end of a
program. By convention, we often
expect to find them there.  Putting
them in their own location, further
contributes to 'structure' which is
desirable, at least in 1987. More on
placement later.

Subroutines are smaller 'packets' of
code, that usually perform some
clearly defined function when called.
They are equivalent to 'blocks of
statements' or 'functions' in other
languages.

GOSUB and RETURN Statements:
----------------------------
We send the program to a subroutine
using the command GOSUB followed by
the line number of the beginning of
the subroutine.  The subroutine will
be made up of one or more lines of
BASIC code, with the last statement
being RETURN. Control returns to the
next executable statement after the
GOSUB that called the subroutine.
We'll restate this again later. It's
important.

For example, let's follow this
printing program through:

10 REM *** GOSUB DEMO ***
20 ? "I'm at line 20"
30 GOSUB 80
40 GOSUB 110
50 ? "Back at line 50 to END"
60 END
70 REM * * SUBROUTINE * *
80 ? "I'm at line 80"
90 RETURN
100 REM * * Subroutine * *
110 ? "I'm at line 110"
120 RETURN

This program produces the output:

I'm at line 20
I'm at line 80
I'm at line 110
Back at line 50 to END

It always prints at 20, then goes
directly to line 80's subroutine, and
prints there.  Line 90 causes a return
to line 40, the line following the
line it went gosub at (line 30.) It
then goes directly to line 110, the
second subroutine, prints, and line
120 causes a return to line 50, where
it prints, and falls into line 60 to
end.

You should be able to follow these
comings and goings. Again, it always
returns to the next executable
statement following the one it went
GOSUB at.  This could be in the MIDDLE
of a line like this:

90 REM  ** Another Demo **
100 GOSUB 200:? "end of line 100"
120 ? "At line 120"
130 END
200 ? "At line 200"
210 RETURN

OUTPUT:

At line 200
end of line 100
At line 120

This leaves at the beginning of line
100, prints at 200, returns back to
the remaining statement on line 100,
to print "end of line 100". It prints
at 120 and quits.  You should study
this until it makes sense.

Here's a longer example. Let's say we
have a program that brings in names
from the keyboard, and checks them
each to make sure only upper or lower
case letters were entered. (We
wouldn't necessarily go about things
this way in a formal program, but this
is just a subroutine example.)

10 REM *** Input Names Program ***
20 REM Dimension variables
30 DIM FNAME$(15), MNAME$(15),
LNAME$(15),IN$(15)
40 PRINT:PRINT:PRINT:PRINT
50 REM
60 PRINT "Input First Name  ";
70 INPUT IN$
80 GOSUB 1000
90 FNAME$=IN$
100 REM
110 PRINT "Input Middle Name  ";
120 INPUT IN$
130 GOSUB 1000
140 MNAME$=IN$
150 REM
160 PRINT "Input Last Name   ";
170 INPUT IN$
180 GOSUB 1000
190 LNAME$=IN$
200 PRINT:PRINT:PRINT
210 REM
220 PRINT FNAME;" ";MNAME;" ";LNAME
230 END
240 REM
990 REM  * * CHECK SUBROUTINE * *
1000 FOR X = 1 TO LEN(IN$)
1010 IF ASC(IN$(X)) < 64 OR
ASC(IN$(X)) > 123 OR (ASC(IN$(X)) > 90
AND ASC(IN$(X)) < 97) THEN 1050
1020 NEXT X
1030 RETURN:REM okay letters - return
1040 REM
1050 PRINT "Non-alphabetical input"
1060 FOR WAIT = 1 TO 350:NEXT WAIT
1070 POP:GOTO 40:REM error-pop stack

Okay, let's look at what we have here.
This program dimensions variables at
line 30. It brings in a string from
the keyboard at 70, in a variable
called IN$. Line 80 calls a subroutine
at line 1000, that checks each letter
in the string, from 1 to the length of
the string. It checks to see that each
character is either upper case (ASC
between 65 and 90) or lower case (ASC
between 97 and 122.)

If the input is good, line 1030 sends
control back to line 90. At this time,
the input in IN$ is assigned to
FNAME$, and held there. Next the
program brings in the middle name, as
IN$ again, and sends it to line 1000's
subroutine for checking. If good, it
returns, loads it into MNAME$, and
inputs and checks the last name.  The
reason I choose IN$ as the variable in
all the INPUT statements was so I
could use the same subroutine to error
check all three strings. To do that, I
had to pick a variable name in line
1000 and use it for each test
performed. The easiest way is to bring
each input in as IN$, and assign input
to another variable after checking. At
line 200, it prints out the total name
and END's.

If a subroutine test fails (is 'bad'
input), it jumps to line 1050, prints
an error message, waits a moment, and
starts itself over again. 

We were able to save a lot of code
here by putting the test in a
subroutine, and recycling it.  If this
were a 'real' program, I would move
the INPUT IN$ statements to the first
statement in the subroutine. I didn't,
for clarity of sections and function
in this lesson. Moving the INPUT to
the subroutine would save three lines.

Error Checking:
---------------
One thing that separates the real
programmers, from the wing and a
prayer kludgers, is the inclusion of
excellent error checking. This usually
involves checking for possible errors
in input, etc. that would crash the
program, and supplying user
informative messages.

It is my opinion, that programs should
always include error checking, as it
isn't fair to a new user for a program
to repeatedly crash, when trying to
learn to operate it. It's a lousy way
to learn, and only a few of us will
persevere through too many crashes.

There are many ways to accomplish
error checking. This program includes
a string character test. Using IF-THEN
statements, we can test whether a
'good' character is within a stated
range, in which case the IF-THEN
statement tests true and executes the
end of the statement, or we can test
whether a 'good' character is outside
a stated range, in which case the
statement tests false for a good
character. A statement set up like
that would only execute the end of the
IF-THEN statement if it is a bad
character. (This is the test I used.)
Many, many tests are possible with
AND, OR, <, >, =, and others in all
combinations.

Note the order of stating the ASC of
the string IN$, and the X'th character
of the string.  ASC(IN$(X)).  Also
note the way we must arrange the
parenthesis around the X. The FOR-NEXT
loop increments to check each place in
the string. This string error checking
routine is a genuine Handy Household
Hack for your collection. You can
include number checking, or other
punctuation commands easily, such as a
hyphen, colon, etc.

POP Statement:
--------------
Atari BASIC includes a POP command to
pop the stack if we jump out of a
subroutine, or leave it other than by
the RETURN statement.

Atari 8 bit computers use page one of
memory, locations 256-511 for the
'stack'. At bootup time, the computer
'points to' location 511. Each time we
call a subroutine, it puts new
information 'on the stack' which grows
downward toward 256 to keep track of
where it left from, and where to
RETURN to. After it accomplishes a
RETURN, it clears those addresses back
off the stack. When we jump out of a
subroutine, rather than RETURNing, we
need to (should) POP the old, no
longer needed addresses off the stack.

Here's a couple examples, and a new
topic, Nesting.

Nested Subroutines:
-------------------
We can go from one subroutine level to
another, to another, etc, going very
'deep.' Stack POPing, relates to
coming back correctly to a desired
place from nested levels, for example:

10 REM ** Nested Demo **
20 ? "I'm starting at 20"
30 GOSUB 1000
40 ? "I'm back at 40 to END"
50 END
60 REM
1000 ? "I'm gosub at 1000"
1010 GOSUB 2000
1020 ? "I've returned to 1020"
1030 RETURN
1030 REM
2000 "I'm gosub at 2000"
2010 GOSUB 3000
2020 ? "I've returned to 2020"
2030 RETURN
2040 REM
3000 ?"I'm gosub at 3000"
3010 RETURN

OUTPUT:

I'm starting at 20
I'm gosub at 1000
I'm gosub at 2000
I'm gosub at 3000
I've returned to 2020
I've returned to 1020
I'm back at 40 to END

Note that it goes one level at a time,
and returns one level at a time. Step
by step. Now let's try POP:

10 REM ** POP Demo **
20 ? "I'm starting at 20"
30 GOSUB 1000
40 ? "I'm back at 40 to END"
50 END
60 REM
1000 ? I'm gosub at 1000"
1010 GOSUB 2000
1020 ? "I've returned to 1020"
1030 RETURN
1040 REM
2000 ? "I'm gosub at 2000"
2010 GOSUB 3000
2020 ? "I've returned to 2020"
2030 RETURN
2040 REM
3000 ? "I'm gosub at 3000
3010 POP: POP: RETURN

OUTPUT:

I'm starting at 20
I'm gosub at 1000
I'm gosub at 2000
I'm gosub at 3000
I'm back at 40 to END

The thing to notice is that each time
we issued a POP command, it 'forgot'
it's last gosub address. Often
necessary to keep your returns
straight, but in small programs, not
necessary for single level subroutines
etc.

Fast/Slow Subroutines:
----------------------
BASIC is pretty straight forward about
finding a subroutine when called. It
goes to the very beginning of a
program, and looks at each line one at
a time, to see if it's the desired
line. Naturally if your subroutine is
at the bottom of a lengthy program,
there will be some delay before it
executes. This is an example of a slow
subroutine. 

The best applications for slow
subroutines may be introductory screen
messages, menus, etc. If speed is very
necessary, then put the subroutine as
near the beginning of the program as
possible. Usually we jump around fast
subroutines with GOTO's like this:

10 REM ** Fast Subroutine Demo **
20 REM
30 GOTO 200:REM Jump around SR
40 REM
100 REM * * * Fast Subroutine * *
110 FOR X = 1 to LEN(IN$(X))
120 IF IN$(X) = 65 THEN PRINT "A"
130 NEXT X
140 RETURN
150 REM
200 PRINT "WELCOME to EZ-LIST"
210 REM DIM IN$(15)
220 etc - rest of program

To use the fast subroutine in the
program, we would say:

335 GOSUB 110

The program would find it, execute it
and return at 140 deeper into the body
of the program to calling place. Kind
of fun to experiment with. Try this
for yourself.

Gosub to REMs:
--------------
I would caution you never to send a
program to a REM at the beginning of a
subroutine. It will work, but many
programmers don't believe in REMs. Not
only don't they write REMs in their
programs, but they'll remove REMs from
our programs to gain space, add a
hack, or just on principle.  If you've
used a REM for an address, it will
crash. Granted people perhaps
shouldn't do that, but believe me they
will, so always send to a good line,
and precede it with a REM.

ON_GOSUB Statement:
-------------------
This statement works like ON_GOTO
(Lesson 3.) The syntax is:

10 ON VALUE GOSUB 111,222,333,444

When the variable stated, in this case
VALUE has the value of 1, control goes
sub to the first line number
specified, in this case 111.  If the
variable is 2, it goes sub to the
second listed line number, etc. Of
course the big difference between this
and ON_GOTO, is that this one always
returns to the following line number,
and ON_GOTO does not return.

10 ON NUM GOSUB 935,25,250,190

This is a valid statement.  Line
numbers need not be in any particular
order.

There is more we could say about
subroutines, but this should get you
started, and on your way.  Many
programmers keep libraries of
subroutines for BASIC hacks, and use
them in future programs. This is an
excellent idea.

By now you should be able to write
quite a bit of straight down code to
do math, printing, etc. You should be
able to puzzle out much of what you
read in ANTIC and ANALOG magazines'
BASIC listings.  For reference you
should have a booklet or book or guide
of some kind next to you with ATASCII
codes, and perhaps Atari BASIC
commands and examples. Again I
recommend "The ANALOG Computing POCKET
REFERENCE CARD" for $7.95.  I
initially worried that I'd wear it out
at the seams, but it's still going
strong after almost two years!

If you plan to continue on with Atari
BASIC, or any other language for your
Atari 8 bit, I suggest you go out and
purchase a "Memory Map." Actually this
is a book, filled with each memory
location, and exactly what it does,
and what values will make it do which
things.  Don't get intimidated at it's
size, or initial complexity, just buy
it, and read it for pleasure. Keep it
by the john, or carry it to your
doctor's appointment, or read 1/2 hour
before bedtime.  Keep a list in the
back of your discoveries, for instance
that:

  621 controls the key click
  752     "        cursor on/off
  622     "        scroll speed
  580     "        coldstart
  82      "        left margin
         etc.

Check for "The Master Memory Map for
the Atari" by Craig Patchett & Robin
Sherer or "Mapping The Atari" by Ian
Chadwick.  After you buy a disk drive
and a printer, one of your next needs
is for a handy bookshelf. (Right after
you buy a modem !)

Sample Problems:
----------------
Problem 6

Write a program that displays a menu
on the screen at startup, that allows
you to choose Addition, Subtraction,
Multiplication or Division, then
prompts you correctly to input two
numbers, and add, subtracts, multiples
or divides them and displays the
numbers and the answer.

Use subroutines to accomplish each
math function. Use error checking to
check for numerical input, also in a
subroutine.

Problem 6A
----------
Write a program that brings in a
sentence from the keyboard, and counts
how many digits, spaces, upper case
letters and lower case letters the
sentence contains. It should print out
all this info plus the length of the
sentence.

Contact me at:

Jackson Beebe  Prairie Data Fields
807 West Hill Street
Urbana, IL 61801 or 72550,317 on
CompuServe
______________________________________
ZMAG TECHNIQUE
______________________________________
Save a printers life..it may be yours!

by Mr. Goodprobe

One of the qualities I would yearn to
have is the ability to forsee problems
before they happen. But since we will
never possess this ability, let me
share from the experience of some
printer owners, and hopefully spare
your printer some grief in the near
future.

I have seen the chip we will speak of
in Star, Panasonic and Epson printers,
and may possibly be in others. I have
no idea which printers do and do not
have it, so would be best to check.

You will find a socketed chip on the
PC board, usually of the 20 pin +
variety, and this is the critter of
which I wish to bring to your
attention. The feature of this chip
that makes it easy to spot is that the
legs are off-set, one is bent long,
and the next bent short...needless to
say easy to spot.

According to my experience, and that
of others who service printers on a
regular basis, the fact that the board
expands and contracts from heating and
cooling, the leads tend to break free
and develop intermittent connections.
Normally if the chip were soldered in
you would merely resolder the
connections and most likely all will
be well. But due to the presence of
sockets the end result is often fatal.
When one of these leads opens, the
accompanying printhead pin driver
transistor is driven to saturation,
causing it to fail, and also ruining
the print head. The resulting repair
bill is oftimes at or near the cost of
purchasing a new replacement printer.
Thus the advisability of preforming
this simple fix before tragedy
strikes.

The fix is simple, but will take
probably an hour to complete. Note the
direction that the desired IC is
facing and write it down. Then using a
jewelers screwdriver, gently pry the
IC out of its socket, and set it
aside. Using your favorite desoldering
apparatus, remove the socket from the
printer motherboard. Now solder the IC
directly to the motherboard, taking
great care to make sure the
connections look good, and there are
no traces inadvertently jumped
together by stray solder.

Keep those Ataris (and printers)
hummin'

 Mr.Goodprobe
 (on lend from)
Midtown TV 27 Midway Plaza Tallmadge,
Oh 44278 Atari 8/16 Repair/Sales
Also:Commodore 8/16 Repair

Many items have flat repair rate, call
for prices!

Zmag Midwest Headquaters bbs is:
        Stairway To Heaven
   216-784-0574 300/1200 24 hours
Featuring Zmag, 25 on-line games and
Public Domain downloads for Atari 8
bit, ST, and Amiga computers!

______________________________________
Programmers Pal Information
______________________________________
 S A M P L E R

Concept, and Programming by:
Chuck Steinman
Marketed by: Dataque Software


The Programmers Pal, was originally
derived from the concept, that every
time you needed a computer...the thing
you needed it for...ended up being the
computer... and unless you keep two
computers powered up all of the time..
it is just too much ofa hassle to
power-up one just to get a simple
address, or calculation.

FLASH!, IDEA.... what if I there was a
small program, that would allow me to
do some of these often needed and
difficult to remember tasks?? Well the
Programmer's Pal was designed to fit
that bill!

Not only is PAL (for short) small...it
is undetectable by most any BASIC &
Machine Language programs normally
encountered. If the program follows
normal guidelines .. the PAL will work
with it.

NOTE:
=====
The included file PROPAL.COM, is just
a SAMPLE of the REAL program. This
will allow many people to look at the
program & see if it is of any use to
them and then decide if they feel it
is worth the requested amount. If not,
they are only out the time and cost to
d/l it.  IF they like what they see...
and feel they would like to have a
copy... then they can order it using
the information, at the end of this
file.

Section 1:  Requirements

First, The PAL must be booted into an
XL, or XE series machine...... which
must have a minimum  of 64K bytes of
RAM.  Any additional RAM can be used
for any other applications (ramdisks
or whatever).

Second, The PAL was designed around
DOS 2.5...so using the PAL with a
different version or brand of DOS is
not guarenteed, or supported at this
time. (I would be interested in your
trials and tribulations here).

Third, The PAL uses about 25% of the
stack space for its own routines.  A
problem would only exist if there is a
program that uses an abnormally large
amount of stack space.  I have never
observed any program with this
problem, but anything is possible.

Most of the 8-bit programs only will
run the stack down to around $01C0,
$01B0 at the lowest. PAL will work. as
long as the stack never is pushed
below $0160.

Also, any other utility that uses the
extended banks of >64k machines must
not use the RAM under the BASIC
cartridge.  This is where the PAL is
hidden.... and beware.... if you get
too close, and uncover the PAL......

Lastly, if you exit BASIC to DOS, you
MUST! ONLY! return to BASIC using the
DOS [M] command. This command exits
DOS by jumping to an Absolute address
in memory.  You will want to "run" at
an address of A000.   This will start
BASIC as normal. Using the DOS [B]
command will remove the PAL.... as it
re-initializes the interrupts.

Section 2: Commands

There are 7 different screens for the
PAL. Depending on specific keys you
press, you will call up one of these
screens.  I will cover each screen in
detail. Remember this is a sampler, so
the screens are not functional, they
are just to give you a sample of what
can be done.

To EXIT any screen back to BASIC, or
DOS..... just hold down CONTROL, and
press the zero (0) key.

To perminantly REMOVE the PAL, just
hold down CONTROL, and then press the
ESCape key. (from BASIC or DOS)

SCREEN 1:
KEYPRESS: Hold CONTROL & press 4
FUNCTION: TRANSLATOR

This is the conversion table, it will
show you the ATASCII character, the
internal character that has the same
value, the 6502 Mnemonic, and the HEX
and decimal value for that character.

You can slide up, and down throught
all the 256 possible codes, just by
using the OPTION, and SELECT keys. If
you press the START key you will add
128 to all the character values on the
screen.

SCREEN 2:
KEYPRESS: Hold CONTROL & press 5
FUNCTION: BASIC Pointers

This screen will show you all of the
current values for many important
BASIC pointers, and locations. It is
displayed in both HEX, and decimal.

SCREEN 3:
KEYPRESS: Hold Control & press 6
FUNCTION: 16-bit Calculator/ALU

This was a fun one to code.... It is a
16-bit calculator, with many logic
functions too! It has:

2 16-bit operands, displayed in HEX 
  and decimal. The arrow keys will
  move the cursor...the OPTION key
  will increase, while the SELECT key
  will decrease the particular digit
  under the cursor. START is a clear
  for BOTH operands.

ADDITION, SUBTRACTION, MULTIPLICATION
DIVISION, AND, OR, XOR are all done at
the SAME time.... and all results are
displayed in seperate windows!!! in
BOTH HEX, and Decimal!! 

SCREEN 4:
KEYPRESS: Hold CONTROL & press 7
FUNCTION: Disk Sector Display

This screen will show the contents of
any of the 1040 possible sectors of a
1050 ED disk. (720 of a SD). You can
press OPTION, to increase the sector
number, or SELECT for a lower. START
will load that sector onto the screen
and display it in HEX, and ATASCII.
Pressing all three SELECT, OPTION and
START... will load the sector counter
with $0169 (+/- 1 sector, depending on
if you release them all 3 at once)
which is the Directory area of the
disk.

SCREEN 5:
KEYPRESS: Hold CONTROL & press 8
FUNCTION: Memory Peek/DisAssemble

This screen will show the contents of
any of the 65536 memory addresses on
the screen. It will show you both the
address, its contents, and an in-line
disassembly of all bytes on the screen
currently. Since there is no way of
specifying an origin here... I just 
start at the first valid opcode at the
top of the screen.  ALL of the phases
(or interpretations) of ALL of the
bytes on the screen are indicated This
as the translator screen uses OPTION
to increase the address, and SELECT to
deccrease it... but now the START will
select an increase of one byte, or one
PAGE (256 bytes) and is indicated in
the lower corner of the screen.

SCREEN 6:
KEYPRESS: Hold CONTROL & press 9
FUNCTION: O.S. Equate listing

This is a reference page, which lists
many of the hardware registers, and
other locations used by many BASIC/ML
routines. They are displayed in HEX,
and Decimal. 

PROGRAM SETUP:

All that needs to be done to get up &
running with the PAL, is to copy the
PROPAL.COM (or PROSAM.COM) file to a
DOS 2.5 disk with DOS. Rename the
PROPAL.COM file to AUTORUN.SYS To
start the fun, just boot the Atari
with the BASIC enabled. That is it!

You can even use the PAL when in the
DOS.DUP menu area! If you have other
AUTORUN files you wish to use... you
may have to experiment to see which
must come first. I would suggest the
PAL first.... but it may vary... just
append the files together using the
DOS copy command, with the /A option.

The Programmer's Pal.. is marketed by
DATAQUE Software (pronounced Duh-Tack
and the emphisis is on the Tee)

This project seemed to drag on forever
I would code for what seemed DAYS and
a few times there were a few over 48
hour marathons..It was started on 
10/1/86... and completed on 2/1/88 to
give you an idea....It was the ONLY
8-bit program I worked on during that
period.

Compare this to DISKFILE... which was
published in Analog #47... which took
a little over a week working only 2-5
hours maximum after my full-time job.
The main influence, and drive for the
PAL, was that I had several people in
the public eye.... connected with the
Atari crowd say "it can't be done....
not on an 8-bit"....... to them I can
now say HA!

A FULL copy of the BASIC Programmer's
PAL, is available for $20.00 by
writing the following address, and
requesting "The PAL".

     DATAQUE Software
     3308 Park Avenue West
     P.O. Box 134
     Ontario, Ohio   44862

If you have not tried the MTOS files
(Multi-Tasking OS) for the 8-bit.....
well.... what's your hold-up?  This
little gem will allow you to run 5
tasks (3 on XE) at the same time
(BASIC or ML). Each task can be up to
16k in size.

DATAQUE has REAL solutions for REAL
problems!

With your PAL disk, you will recieve a
password on the 24 hour HOT-LINE for
Atari trouble... aka MASTER-800 BBS...
this will allow you to recieve all
upgrades to the PAL.... FREE for one
full year from date of purchase
(except any phone tolls). also..... a
QUICK response to any of your problems
and questions... As new DATAQUE
program samplers are released they
will be at the Master-800 BBS FIRST. 

If you do not have a modem.... well I
will try to answer letters.... but it
may take a bit longer.  Upgrades that
must be mailed have a $5.00 charge to
cover postage, handling, and media. 

I can also be contacted via:

DELPHI:  MASTER800
CSERVE:  71777,3223
GEnie:   C.Steinman

Chuck Steinman/SysOp Master-800 BBS
(419) 529-5197 24hrs  300/1200 baud
______________________________________
Whats Wrong With Atari  Part 2
______________________________________
A Follow Up

by Robert E. Handley

Last month I wrote an article on
What's Wrong With Atari? Boy, did I
get feedback. Some thought I was out
to destroy Atari. Others thought I
said what was long over due. The sysop
on GEnie did not want to post my
article because it was negative Atari
and might cause others not to upgrade
or buy. Well folks, if no one ever
tells a company like Atari what is
wrong, they think everything is OK and
keep right on making mistake after
mistake-never knowing why things are
not selling the way they should. 

If you recall, I also made suggestions
on how to correct the mistakes and
make a better product. After all, we
are the users. We should know what we
like or do not like, right? I am told
that Atari is trying and that they are
listening. Well, time will tell. In a
few months I would expect to see
520FM/ST's with double-sided drives
and double-sided upgrade kits for the
ones already sold (with a trade-in or
return credit for single-sided
drives). Mega ST's will have an on/off
switch on the front panel and a reset
switch on the keyboard. Oh yes, Atari
will also annouce that they have
redone GEM and a full boat bug free
version is available to all registered
owners for under $50.00 in
appreciation for buying Atari and
keeping the company alive. They also
will announce new products and they
will be available the same day at many
Atari dealers in your area. Yes, time
will tell, won't it?

Oh yes, I almost forgot that this old
anti-Atari person just took the big
step this --yes, I went out and popped
for the big one. I now have a Mega/ST4
with both color and monochrome
monitors. I wish to thank Practical
Solutions for sending my Monitor
Master overnight. It works great. If
you have both monitors, get one. You
will not be sorry.  I found ways to
work around the on/off and reset
buttons for now but they are still a
pain in the behind, so close and yet
so far.
______________________________________
SPC Newswire
______________________________________
ATARI'S EARNINGS UP 

Atari Corp. says its fourth quarter
earnings were up 57 percent to $18.7
million. That represents 32 cents a
share on revenue of $277 million,
compared with earnings of $11.9
million, or 22 cents per share, on
revenue of $92.6 million in the same
period of the previous year. The
fourth quarter showed boosts the
profits for all of 1987 up 76% to
$44.1 million, or 76 cents per share,
from $25 million, or 53 cents in 1986.
At the same time, sales rose 91
percent, increasing to $493 million in
1987 compared with $258 million the
previous year. Atari spokesman Greg
Pratt told The Associated Press that
contributing the healthier financial
picture -- besides the buyout of
Federated, which now accounts for 25
percent of Atari -- were strengthened
computer sales in Europe and booming
video game sales in the US. "Video
games were obviously a hot category"
in 1987, he said. "There were no teddy
bears or laser guns to take those
dollars away. People went back to more
traditional stuff and bought video
games."

Atari's 4th quarter Earnings Report


_Atari Corp_   _4th Quarter_

 LATEST PERIOD            YEAR EARLIER
 ---------------------------------------
 $276,956,000             $92,667,000 
  $18,702,000 (.32)     a-$22,997,000 (.43) 

 a-Includes an extraordinary credit of $11,047,000. 
______________________________________
BBS Watch
______________________________________
News and Information captured from
BBS Systems.  This text captured from 
the StarBase I BBS (201) 938-6906

۠砣0073
All                 03/04/88
SYSOP!              
Trenton show

The upcoming Trenton ComputerFest will
be held, rain or shine, on April 23rd
and 24th. On Saturday, the show is
open from 9am to 6pm, and on Sunday
it's open from 10am to 4pm. Admission
is $7.00 for both days, unless you are
a senior or student, in which case the
admission is $3.00 (I believe that
figure is correct, but I am not
completely sure.)

For more information, call the Trenton
State College at 1-609-771-1855 and
ask to speak to the Electronic
Department. They handle the arrangment
of the show.
______________________________________
ZMAGAZINE   Issue #96    March 7, 1988
(c)1988 SPC/Ron Kovacs
______________________________________




Visit Atarimax Store