We bought an ATARI 1020 printer earlier
this year. Since then the price has fallen considerably! We have used
the printer a great deal, mainly for programming but we have written one
or two graphics programs ourselves.
A printer makes writing large programs
feasible on a home computer, no more scribbling down odd lines of code
on scraps of paper. You can debug your programs as they ought to be
debugged. Get a listing, retire to an armchair, read and think.
In general, we are satisfied with the
printer. In general that is. It gives clear, readable text, easier on
the eyes than that produced on many mainframes, flexible graphics and is
fast enough for the applications we wanted. A business user would
probably find speed a drawback though. There is however one problem with
the printer - the documentation is terrible. It is so bad that even a
casual perusal reveals its inadequacies. We have therefore spent some
time trying to find out how far you can stretch the printer, with some
success, and this article records some of our findings.
Since, as far as we know, there are no
programs on sale which use the 1020 printer, one of the first ways in
which you can use your printer is to list your own programs.
Early on it struck us how inappropriate
is the size of text for program listings, it is too large. Our
bookshelves began to look like Roman libraries with scrolls of code many
feet long. To get to the subroutine you wanted in a long program meant
unravelling many feet of paper. How much nicer if the text could be
printed in the smallest character size available, 80 characters per
line. Ideal for assembler listings and a great improvement for BASIC
We set about trying to do this. Our first
attempt, successful but cumbersome, was to write the listing file to
disc and then use a program to read in the file and write it to the
printer, preceded by ESC-CNTL-S, the magic formula for getting small
letters on the printer. This involved reading and writing large files -
slow. We tried various other tacks, including ESC-CNTL-S as a comment in
the program and using a vertical blank interrupt to write ESC-CNTL-S,
until we finally came up with a workable solution.
The problem is that when confronted with
a command LIST "P:" to print a listing the Operating System
first closes then re-opens the printer, thus setting default values and
defeating any chicanery you may have been up to. The solution was to
define a new input handler "L:" whose only function is to
print in small letters. We steal most of the code provided by the
Operating System for the printer, "P:", but substitute our own
code for the OPEN routine. When we set up "L:", we open the
printer then print ESC-CNTL-S. (Note that because "P"' and
"L:" share code and buffers, it is dangerous to have them OPEN
at the same time - not that I can see any reason for doing so.)
There are a couple of additional frills.
How about being able to forget about setting up "L:" each time
we turn on the computer? We can do this by making the program into a
"D:AUTORUN.SYS" file which is executed automatically by DOS on
power up. (This of course works only if you have a disc drive). In
addition, we do not want our facility ruined by pressing SYSTEM RESET
and we can stop this by placing the address of the set up routine in
RUNAD ($2E0,$2E1), which is executed when SYSTEM RESET is pressed.
For those with assembler editors, a
listing of the code is included. Save the object code as "D:AUTORUN.SYS".
The print out is of the assembler listing rather than the source so that
the BASIC program may be more understandable.
The program occupies the end of page 6 -
$6A0 to $6FF. If you don't mind SYSTEM RESET destroying "L:",
$6DC to $6FF is all that needs preserving.
The BASIC program does the same thing. The first two numbers in line
1070 are a header for the file. The following four numbers are the
addresses of the start and end of the routine in decimal. There follows
the machine code down to line 1200. Line 1210 inserts the address of the
routine in place so that SYSTEM RESET will restore "L:".
Type in the program as listed. SAVE it as
"L.BAS" and then RUN the program with a disk in the drive
containing DOS. Turn off the computer and turn it on again. If all has
gone well you should now have set up "L:". Try LOAD "L.BAS"
then LIST "L:" and you should get a listing of the program in
letters 80 characters to a line.
LPRINT does not appear to work very well
with the 1020. While you can print normal size (40 characters per line),
the special facilities, such as changing print size, do not work. I
suspect that this is because when BASIC meets an LPRINT statement, it
closes and opens the printer, so destroying control commands that you
have sent it previously. The solution
is to amend programs containing LPRINT as follows:
a. Precede the first LPRINT statement
executed in the program by CLOSE #7: OPEN #7, 8, 0,
b. Replace all LPRINTs by PRINT #7;
I have amended the TINYTEXT program to
enable it to use the 1020 printer. In my version, lines 700, 725, 727,
830, 870, 885 and 3130 require changing in the way that I have
explained. I hope that this updated version of TINYTEXT can be made
available to readers of PAGE 6.
(I hope to publish a revised and
updated version of TINYTEXT early next year. If any other readers have
modified or improved the program I would appreciate a copy. Ed.)