1210 lines
33 KiB
Plaintext
1210 lines
33 KiB
Plaintext
|
|
______________________________________
|
|
|////////////////////////////////////|
|
|
|////////////////////////////////////|
|
|
|//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, Catagory #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!! <Whew!>
|
|
|
|
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
|
|
|
|
[ Msg # ]0073
|
|
[Sent To]All 03/04/88
|
|
[Sent By]SYSOP!
|
|
[Subject]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
|
|
______________________________________
|