Index

COMPUTER SHOPPER / JANUARY 1985 / PAGE 119 

Applying The Atari

by Jeff Brenner

Hello 1985! 1984 brought some more rough times to Atari. First there was the realization that profits were gone for good. Then there was Atari’s typical management confusion followed by massive layoffs and more layoffs. Later in the year, Jack Tramiel, the former president of Commodore who killed Atari in the first place, bought the company with its multi-million dollar debt from Warner Communications. In his efforts to consolidate Atari, more layoffs were made and Atari divisions around the country were shut down. Even Atari’s famed toll-free telephone number was eliminated. Then we witnessed more layoffs and still more layoffs. By the end of the year, I would guess that Atari employed maybe five workers, a telephone operator and 150 lawyers.

Atari has told us that they’ll be bringing out new 16-bit and 32-bit machines with incredibly low prices this year. Well, I can’t even be 100% certain that Atari will still exist by the time you read this. Let’s think positively, though, and hope that Atari will be able to change things around in 1985.

Last month we concluded with Program Perfect, a routine to prevent, typing errors in programs entered from this column. This month we’ll learn how to use Program Perfect and we’ll test it on a program dedicated to the new year. Before we do that, let’s take a look at the reader mail and some new books.

Reader Mail

There are two errors in the first ATARI disk directory program (August). First, the line, 6 IF FILE$(5,16)="FREE" THEN 8, blows up with an ERROR message! It should be IF FILE$(5,8)="FREE" Second, the DIM FILE$(15) is too short and you lose the size of files in sector count. I would suggest DIM FILE$(99).

Tom Snow
W. Lafayette, Indiana

You’re absolutely right, and I apologize for the error. As you suggest, line 6 could be changed to:

IF FILE$(5,8)="FREE" THEN 8 

However, this will cause the program to stop if it happens to encounter a file name such as “AZFREEZE.BAS.” The line should have read:

IF FILE$(5,16)="FREE SECTORS" THEN 8 
The “SECTORS” was omitted.

You’re also correct in stating that FILE$ is not dimensioned at a large enough value. It should have been dimensioned at 17 for proper operation. Any larger value, such as 99, will work as well. Following is the complete corrected routine:

1 REM DIRECTORY PROGRAM 
2 DIM FILE$(17) 
3 OPEN #1,6,0,"D:*.*" 
4 INPUT #1:FILE$ 
5 PRINT FILE$ 
6 IF FILE$(5,16)="FREE SECTORS" THEN 8 
7 GOTO 4 
8 CLOSE #1:END 
Those of you with DOS III should change line 6 to:
6 IF FILE$(5,15)="FREE BLOCKS" THEN 8 
since this DOS works with blocks instead of sectors.

I am using the Atari assembler-editor cartridge and want to combine two source files I have created separately. When I use ENTER, it loads in the second file, but erases the first. Any ideas?

A. Robinson
New York, New York

Yes. In BASIC, the ENTER command will merge a program with the program residing in memory. When using the assembler/editor, you must tack on a “,M” for merging files. For example, to merge SOURCE.ASM with a source code already in memory, use:

ENTER #D:SOURCE.ASM,M for disk or ENTER #C:,M for cassette.

Books

I received two books for the Atari from Little, Brown and Company (Boston, MA) which might interest you. The first is Let’s Learn BASIC—a kid’s introduction to BASIC programming on ATARI home computers by Ben Shnejderman (194 pages, softcover, $8.95). Intended for eight through 14 year olds, adults interested in learning BASIC should find it equally helpful. The book discusses the PRINT command, the INPUT command, the FOR-NEXT loop, the IF-THEN statement and other BASIC commands in a relatively straightforward style. The random and integer functions are described, as well as strings and variable.arrays. However, the Atari’s graphics and sound, which the young appreciate the most, are not covered. Other versions of this book are available for IBM, Commodore 64, and Apple users.

Home Applications and Games for the ATARI Home Computers by Timothy P. Banse (134 pages, softcover, $14.50) contains 31 short BASIC programs such as Checkbook Balancer, Home Inventory Log, Trip Cost Tabulator, and games such as Beowulf versus Grendel, and, of course, Ghost Town Vampire Girls. Some are useful, though others seem to be there to take up space. The book shows how each program works by explaining important lines, and listing the variables used. The author offers a disk of all the programs for $9.95. If you lay out the $14.50 for the book, I’d suggest spending another $9.95 for the disk to save you the time of entering the programs.

Using Program Perfect

Now we’ll learn how to use Program Perfect, which was listed here last month. If you’re new to Computer Shopper and did not get last month’s issue, send me a self addressed stamped envelope for a listing of this program.

If you haven’t entered last month’s program yet, why not? If you have entered it, check it over a few times and make sure there are no mistakes. A mistake in a program which checks other programs is bad news!

Since last month, I’ve made a few minor, improvements to the program, so change lines 30000, 30070, 30020, 30250 and 30260 to the following:

30000 CLR:CLOSE #1:CLOSE #2:N1=1:N2=N1+N1:N84=84:N85=N84+N1:N39=39:N65=65 
30070 POKE 702,64:POKE 694,0:GET #N2,N:IF N=126 AND I>N1 THEN PRINT CHR$(30);" - ";CHR$(30);:I=I-N1:GOTO 30070 
30220 POSITION N2,10:PRINT CHR$(156);LN$(5,LEN(LN$)):PRINT :PRINT :PRINT CHR$(157);"CONT" 
30250 T=NL:POSITION N2,10:INPUT #N1;LN$:FOR I=N1 TO LEN(LN$):T=T+ASC(LN$(I,I)) 
30260 IF T>650 THEN T=T-650 

You must make these changes for the program to be compatible with the codes we’ll be entering. Note that in effect, CLR:CLOSE #1:CLOSE #2 is added to line 30000 while N676=676 is deleted, POKE 702,64:POKE 694,0: is added to line 30070, CHR$(156); and a PRINT : are added to line 30220, T=NO is Changed to T=NL in line 30250, and the two N676s in line 30260 are changed to 650s.

Now Program Perfect should be ready to use, and we’ll first test it with a short. four-line program. Before you do anything, though, SAVE it to cassette or diskette. Since Program Perfect erases itself from memory after it helps you enter a program, it is important that you save it before you use it.

Following is the program we will enter with Program Perfect:

CTJ 10 REM TEST OF PROGRAM PERFECT 
LAJ 20 PRINT "THIS IS A TEST" 
WMJ 30 GOTO 20 
OJZ 40 END 

Note the three letters to the left of each line number. This is the code used by Program Perfect to check the line for errors, and to determine the next line of the program for its automatic line numbering feature.

When you RUN Program Perfect, you are asked to enter the Starting line. This is the first line of the program you are entering. Since the first line of our demonstration program is ten, enter 10 for this prompt. The line below will now show the following:

--- 10 

The three hyphens preceeding the 10 are for the three-letter code. Type the code for line 10, CTJ. The display will now show:

CTJ-10 ■ 

The cursor will have moved past the line number to allow you to enter the line. Type in the remainder of line ten. The display should show:

CTJ 10 REM TEST OF PROGRAM PERFECT■ 

Press RETURN. Program Perfect will perform a few screen manipulations below the line you have entered as it checks the line for errors and places it in the computer’s memory as a real program line. You’ll get a buzz with an “ERROR - TRY AGAIN” message if you’ve made a syntax error, or if the line does not check against the code. The line doesn’t necessarily have to be in error; a mistake in the three-letter code will also trigger the error message. You’ll have to re-enter the three-letter code, but the rest of the line will remain intact so you may correct it using the cursor control keys. To erase the entire line and the code, press SHIFT-CLEAR. Program Perfect, will not allow you to move the cursor out of its three-line entry area.

If the line is entered correctly, the program will automatically display the next line number of-the program. Enter the codes and program lines for each line number that appears until the entire program is entered.

Program Perfect allows you to use all abbreviations, such as GR. for GRAPHICS and G. for GOTO. However, do not use ? for PRINT or vice versa as the computer treats these as two different commands. The same goes for GOTO and GO TO. Use PR. as an abbreviation for PRINT, and stick to the one-word GOTO, as this is the only form that will appear in the programs in this column:

You do not have to follow the exact spacing of the program line unless the spacing is within quotes. For example:

10 PRINT "HELLO":GOTO 10 
can be entered as:
10 PRINT   "HELLO"  : GOTO 10 
following:
10 PRINT  " HELLO ": GOTO 10 
you’ll get an error message.

If you like to leave out all spaces (which, incidentally, does not save you any memory on the Atari) you could enter:

10PRINT"HELLO":GOT010 
and it will be accepted. But be careful, of lines such as:
10IFA=BTHENGOTO10 
as the computer will interpret BTHENGOTO10 as a single variable and will give you an error. In this case, you must put a space after the variable:
10IFA=B THENGOTO10 

This does not only apply when you are using Program Perfect, but whenever you are using Atari BASIC.

After you enter the last line of the program (which has a three-letter code ending with a “Z”), Program Perfect will print “END OF PROGRAM - STAND BY.” It will then take about five seconds while it erases itself from memory and leaves you only with the lines you have entered. You can then list, save or run your program.

What if you don’t enter the whole program in one sitting? You can press BREAK and SAVE what you’ve already typed. Since Program Perfect is in memory, you will be saving it as well as the lines of the program you have entered. When you are ready to enter more of the program, simply LOAD it back in and type GOTO 30000 (the beginning line of Program Perfect). Then enter the line number at which you left off for the “Starting number:” prompt and enter the rest of the program.

If you tried to enter the four-line sample program but couldn’t, you’ve probably made some mistakes in entering Program Perfect. Re-check it carefully—make sure you’ve made all the changes that were mentioned previously. Remember to save any corrections you make to Program Perfect before you run it.

New Year’s Program

HAPPY NEW YEAR!

Now, how would you like a longer program with which to test Program Perfect? Our program for the new year is one which prints banners. You can use it to make giant “HAPPY NEW YEAR” signs if you want. It requires a printer and fan-fold paper.

Enter the banner program with Program Perfect. If you are not using Program Perfect, ignore the three letters preceding each line number when you type the program. When you RUN the program, you are asked for the height. This is the height of each letter of the banner. Since the banner’s letters are printed sideways, an 80-column printer can produce letters which are 80 characters in height, so enter 80. If you have a 40-column printer, or if you want smaller sized letters, enter a smaller number.

Next, you are asked for the length. This is the number of lines of characters which form the length of each letter. 24 is a typical value. Enter a greater or lesser number for wider or thinner letters.

Now the program asks for a character. This is the character the printer will use to form the letters of the banner. An asterisk or the letter X are good choices.

When the “ENTER MESSAGE” prompt appears, enter what you want to be printed on the banner, such as HAPPY NEW YEAR. Your banner will be printed.

Next time, we’ll learn where the banner program gets its characters from, we’ll enter a test/study program for teachers and students, and more.

Readers’ questions, comments and contributions welcome. Address all correspondence to:

Jeff Brenner’s
“Applying the Atari”
c/o Computer Shopper
P.O. Box F
Titusville, FL 32781
EBJ 10 REM BANNER PROGRAM 
GHJ 20 OPEN #1,4,0,"P:":DIM A$(100),S$(20),Z$(20),C$(20),B(7),S(7),H(7) 
VYJ 30 CS=PEEK(756)*256:FOR I=0 TO 7:B(I)=INT(2^I+0.5):S(I)=0:NEXT I 
XFJ 40 PRINT "HEIGHT (80)";:INPUT H:PRINT "LENGTH (24)";:INPUT L:H=H/8:L=L/8 
UUJ 50 PRINT "CHARACTER (*)";:INPUT S$:S$(20)=S$:S$(2)=S$ 
MDJ 60 Z$(1)=CHR$(32):Z$(20)=CHR$(32):Z$(2)=Z$ 
BDJ 70 Z$=Z$(1,H):S$=S$(1,H):PRINT "ENTER MESSAGE";:INPUT A$:FOR I=1 TO LEN(A$) 
QSJ 80 D=ASC(A$(I,I)):INV=0:IF D>128 THEN D=D-128:INV=1 
TYJ 90 IF D<32 THEN D=D+96:GOTO 110 
ALJ 100 IF D>96 THEN D=D+32 
NYJ 110 A=(D-32)*8:FOR C=0 TO 7:S(C)=0:NEXT C:FOR B=7 TO 0 STEP -1 
XLJ 120 FOR T=7 TO 0 STEP -1:PK=ABS(255*INV-PEEK(T+CS+A)) 
FAJ 130 IF PK-B(B)-S(T)>=0 THEN S(T)=S(T)+B(B):H(T)=1:GOTO 150 
URJ 140 H(T)=0 
SIJ 150 NEXT T:FOR D=1 TO L:FOR J=7 TO 0 STEP -1:IF H(J)=1 THEN PRINT #1;S$; 
UIJ 160 IF H(J)=0 THEN PRINT #1;Z$; 
NFZ 170 NEXT J:PRINT #1:NEXT D:NEXT B:NEXT I:RUN 
COMPUTER SHOPPER / FEBRUARY 1985 / PAGE 113 

Applying The Atari

by Jeff Brenner

This month we’ve got an interesting test/study program for students and teachers. We’ll also look into January’s banner program, reader mail and DOS 3, plus I’ll reveal Atari’s new address. But first let’s see what has been going on in Sunnyvale, CA.

Atari News

$119.95—that’s the retail price of the Atari 800XL announced by Jack Tramiel in the midst of the holiday buying season. That’s quite an unbelievable price (several years ago, a 48K Atari 800 would have cost over ten times the amount) and I would find it even more unbelievable if Atari were actually making money from them.

The Atari people tell us that the price break is the result of “lower production costs.” Maybe, but let’s look at the real situation that resulted in the dramatic price change: The data is November 1984. Atari is in debt—it seems like they owe millions to every company in the United States. While these companies are trying to quickly get their money from what they perceive to be a good Chapter 11 candidate. Jack Tramiel and his crew are drowning in unsold Atari 800XLs. So, Tramiel proudly announces his “$119.95 Atari 800XL” plan (or more accurately, his “quick-cash” plan), Commodore headquarters explodes in confusion and perspiration, and everybody runs out to get the lowest-priced 64K computer on the market.

Atari probably drew away a significant portion of sales from Commodore over the holiday season, but no one can really be sure. The new price had an even more important effect for Atari in that many retailers who had dropped their line resumed selling Atari products with the irresistible prices. This means that Atari might have a wider distribution network for its newer computers. Incidentally, we’ll have complete information on Atari’s new units as soon as it becomes available.

Programming Tips

Every few months I’ll be printing a Programming Tips section in which useful hints and ideas sent in by readers will be listed. If you have any programming suggestions or short, handy programs from which others may benefit, send them in. If your idea is printed, I’ll send you a three-dimensional laser-etched hologram sticker. Some of these fascinating stickers were produced under license from Atari when designers were attempting to develop a holographic video game.

Reader Mail

Please send me some literature pertaining to software for the Atari Home Computer 800. Software programs are limited here in Panama. Therefore, we must rely on computer supplies from companies abroad.

Candida B. Carteret
Panama—APO Miami

I am sending you a list of some Atari software distributors and manufacturers that sell to the public. Others who want this list should send a self-addressed stamped envelope. Your best bet is to write to these companies and request their catalogs. You also might want to make some contacts with Atari users groups in the United States. Many of these groups have public domain software which they trade or sell at inexpensive prices. Computer Shopper’s “Users Groups” section has a generous listing of these groups.


I am trying to translate a short BASIC program into assembly language. My problem is that I cannot figure out how to translate a BASIC line such as “IF A>B THEN GOTO 100.” I know I need to use a CMP and a branch statement, but I become confused with the carry bit. Both A and B are less than 256 so there is no need for comparisons greater than one byte. I am relatively new to assembly language, so any help you can give me would be greatly appreciated.

Bill Foster
Fayetteville, NC

The CMP operation compares the quantity following the CMP with the value in the accumulator. When one quantity is compared with another, the computer, in effect, subtracts one from the other, although neither quantity is actually changed. The result of this subtraction determines the combination of internal flags that are set. If the two quantities are equal, the result of the subtraction is zero and the zero flag is set. Thus, a BEQ or BNE instruction causes the computer to refer to the zero flag to determine whether or not to branch.

What you need to be concerned with is the carry flag. When a larger quantity is compared to a smaller quantity, as in:

LDA #50 
CMP #100 
the carry bit is cleared. This condition can therefore be checked with the BCC, or Branch if Carry Clear, operand. On the other hand, when a smaller quantity is compared to an equal or larger quantity, as in:
LDA #100 
CMP #50 
or in:
LDA #100 
CMP #100 
the carry bit is set, and the condition can be checked with the BCS, or Branch if Carry Set, operand. Since the computer performs its own subtraction when comparing two quantities, these same carry flag rules apply when subtracting one quantity from another. Figure 1 gives sample IF-THEN statements and their assembly language equivalents.
IF-THEN
MACHINE LANGUAGE EQUIVALENTS
BASIC ASSEMBLY
IF A>B THEN NUM 
(or IF B<A) 
LDA #B 
CMP #A 
BCC NUM 
IF A>=B THEN NUM 
(or IF B<=A) 
LDA #A 
CMP #B 
BCS NUM 
Figure 1

DOS 3

I finally received DOS 3 from Atari a few weeks ago and will be answering questions about it in the future. I purchased my 1050 drive months before DOS 3 was released and have been waiting for it ever since. Those of you who have a 1050 drive but do not have DOS 3, you’re entitled to it. I managed to discover Atari’s customer relations address, so write to them, tell them your drive’s serial number, and ask for a copy:

ATARI Customer Relations
390 Caribbean Drive
Sunnyvale, CA 94089
(408) 745-4851
Figure 2

Regarding DOS 3, many have questioned as to whether a DOS 3 disk can be converted to DOS 2. While it is possible to convert DOS 2 files into DOS 3 files (by selecting the ACCESS DOS 2 function), as of yet I know of no program to do the opposite. However, I see no reason why such a program cannot be produced. If any readers know of such a program or have developed one, tell us about it. Meanwhile, here is a simple solution for those of you who are reluctant to permanently “DOS 3” a program: Use DOS 3 to create your programs. When you want to change a DOS 3 program to a DOS 2 one, save the program to cassette. Then turn off the computer, boot up with DOS 2 and load the program from cassette. You can then save it on the DOS 2 disk. Let’s hope a faster solution is available soon.

Banner Program Mystery

For those of you who have been wondering how January’s 17-line banner program produces its characters, the mystery is hereupon solved. Observant individuals will have noticed that the characters look remarkably similar to those which appear on your Atari’s screen. The reason is that the banner program actually uses the character data to plot its characters. Now, that’s clever! More on this topic in upcoming months.

Computer Assisted Study

Here’s the program thousands of students across the country have been waiting for: A program designed to make studying more efficient and enjoyable. Teachers will find this program equally useful for teaching and testing purposes. The three-letter codes preceeding each program line are to be used with December’s “Program Perfect,” which checks for typing errors. If you do not have “Program Perfect” send me a SASE and request a listing.

This program is most effective with study material that can be arranged in question/answer form. Foreign languages, vocabulary, social studies facts, math formulas, and the like work excellently. It might be necessary, especially when studying foreign languages, to substitute another character for one not existing on the keyboard. For example, the Spanish word for music is MUSICA, with an accent over the “U.” It can be entered into this program as “MU’SICA,” with an apostrophe following the “U.”

After you type in the Computer Assisted Study program, RUN it. A menu will be displayed with the following options:

ENTER NEW DATA
SAVE
LOAD
TEST
ADD DATA
CHANGE DATA
DISPLAY DATA
Enter New Data

When you first RUN this program, you will want to enter some study material. Press the “E” key. You are asked to enter question #1, and then answer #1. Enter a question you want to be asked when you are being tested. If you are entering a vocabulary list, you can just enter one of your vocabulary words. Press RETURN and then enter the answer. If you had typed in a vocabulary word as a question, then you would enter the definition as the answer.

Continue entering questions and answers until you reach a desired number of questions. You may enter up to 100 questions and answers, depending upon the amount of memory your Atari has. A 16K Atari will allow about 21 questions and answers. It is recommended that you test yourself on less than 30 at a time for the best effectiveness. After the last question and answer is entered, enter an asterisk “*” for the “QUESTION” prompt. This returns you to the menu.

Save

After you enter your study data, you can save it on a cassette or diskette. Press the “S” key to select the save option. When asked, specify cassette or disk, and if using a disk, enter a file name. The data you entered previously is saved, and you are returned to the menu.

Load From Cassette/Disk

Whenever you wish to load a previously saved file, press “L.” You can save files on all your subjects, and recall them at the end of the year to study for finals! As with the “Save” option, you must specify cassette or disk. If you are loading from disk, enter the name of the file you wish to load. When the file is loaded completely, you are returned to the main menu.

Test

After you enter your study material, press the “T” key. Now you will begin to study. One question is selected at a time from all that you entered. The questions are given in a random order; not in the order in which they were entered. You simply enter the correct answer to each question. If you answer correctly, the computer will print “CORRECT” and will continue with the next word. If, however, you do not enter the right answer, the computer will print “INCORRECT. CORRECT ANSWER:” followed by the answer you should have typed. One powerful feature of this program is that it will give you an incorrectly answered question again at a later time in the testing period. The question will continue to be given until it is correctly answered, thus impressing the answer in your mind. You are not additionally penalized, however, for getting the same question wrong more than once (to prevent negative scores). When all questions are correctly answered, a score is given. The score is the percentage of the number of questions answered correctly the first time given out of the total number of questions. The score allows you to see your progress and to determine how much more studying you need. A score above 90 is given an “EXCELLENT SCORE” reward. After the test is over, you are asked if you wish to take it again. You should continue retaking the test until you get a satisfying score.

Add Data

Press “A” on the menu screen when you want to add more questions and answers to the ones already in memory. Enter an asterisk when you finish entering the data.

Change Data

Press “C” when you wish to change a question or answer in memory. Enter the number of the question/answer that you wish to change. If you want to change the question, enter a “Y” for the “DO YOU WANT TO CHANGE THIS” prompt. To change the answer, enter an “N” for the first prompt, and a “Y” for the second. After a question/answer is changed, you are asked if you wish to make more changes. Enter “Y” to make more changes or “N” to return to the menu.

Display Data

Press “D” to see the data that is currently in memory. Each question and answer is displayed with its corresponding number. You can use this option to make sure the correct data was loaded from cassette or diskette, and to check for errors after material has been entered.

Final Notes

A good rule of thumb is to study the same material over a period of days. Of course, the more you try to study at once, the less effective your studying becomes.

“Isn’t it cheating?” concerned parents and teachers might ask. No. Studying by computer is simply another alternative for a student. The material is actually learned, but can be done so in a shorter period of time due to an interest in studying with a computer.

Good luck with Computer Assisted Study. After using it, you might discover that studying does not have to be such a tedious, boring task.

Next Month

We’ll have a software alarm clock, more reader mail and some surprises. Stay tuned.

Readers’ questions, comments and contributions are welcome. Address all correspondence to:
Jeff Brenner’s
“Applying the Atari”
c/o Computer Shopper
P.O. Box F
Titusville, FL 32781
FXJ 10 REM COMPUTER ASSISTED STUDY 
EWJ 20 REM BY JEFF BRENNER 
PAJ 30 N1=1:N2=N1+N1:N4=N2*N2:N8=N4*N2:N75=75:N76=N75+N1:N100=100:N152=N76*N2 
WAJ 40 N151=N152-N1:FM=FRE(N0)-600:DIM A$(FM),I$(N100),QU$(N76),AN$(N76) 
SQJ 50 DIM IN$(N76),NAME$(11),K$(11),TEST$(N100) 
UVJ 60 OPEN #N1,N4,N0,"K:":I$(N100)=CHR$(N0):A$(FM)=CHR$(N0) 
LGJ 70 GRAPHICS N0:POSITION N4,N0:PRINT " COMPUTER ASSISTED STUDY PROGRAM" 
QSJ 80 POSITION N2,N4:PRINT "PRESS KEY:" 
XEJ 90 PRINT :PRINT "ENTER NEW DATA":PRINT :PRINT "SAVE":PRINT :PRINT "LOAD" 
AKJ 100 PRINT :PRINT "TEST":PRINT :PRINT "ADD DATA":PRINT :PRINT "CHANGE DATA" 
JWJ 110 PRINT :PRINT "DISPLAY DATA":PRINT :PRINT ">";:GET #N1,K:PRINT CHR$(K) 
FUJ 120 RESTORE 130:FOR I=N1 TO 7:READ T:IF T<>K THEN NEXT I:GOTO 70 
LZJ 130 ON I GOTO 140,250,370,440,680,700,840:DATA 69,83,76,84,65,67,68 
DFJ 140 GRAPHICS N0:PRINT "ENTER NEW DATA":IF NUM=N0 THEN GOTO 170 
KXJ 150 PRINT "ERASE OLD DATA";:INPUT IN$:IF IN$(N1,N1)="N" THEN GOTO 70 
XWJ 160 NUM=N0 
IAJ 170 PRINT "CAN ENTER UP TO ";INT(FM/N152);" QUESTIONS." 
QQJ 180 FOR D=NUM+N1 TO N100:I=D*N152-N151:PRINT :PRINT :PRINT 
FOJ 190 IF FM-D*N152<N0 THEN PRINT "OUT OF MEMORY":NUM=D-N1:GOTO 920 
IYJ 200 PRINT "QUESTION #";D;":":INPUT QU$:IF QU$="*" THEN NUM=D-N1:GOTO 70 
HVJ 210 PRINT :PRINT "ANSWER #";D;":":INPUT AN$ 
OEJ 220 QU=LEN(QU$):AN=LEN(AN$) 
PLJ 230 A$(I,I+QU)=QU$:A$(I+N76,I+N76+AN)=AN$ 
XIJ 240 I$(D*N2-N1)=CHR$(QU-N1):I$(D*N2)=CHR$(AN-N1):NEXT D 
GKJ 250 GRAPHICS N0:PRINT "SAVE TO CASSETTE/DISK":GOSUB 950:PRINT 
AQJ 260 GOSUB 270:GOTO 330 
FDJ 270 PRINT "CASSETTE OR DISK>";:GET #N1,K:K$=CHR$(K):PRINT K$ 
YOJ 280 IF K$<>"C" AND K$<>"D" THEN PRINT CHR$(28);:GOTO 270 
ITJ 290 IF K$="C" THEN NAME$="C:":GOTO 320 
FZJ 300 POKE 764,255:NAME$="D:":PRINT "FILE NAME:";:INPUT K$ 
KHJ 310 NAME$(LEN(NAME$)+N1)=K$ 
AVJ 320 RETURN 
AOJ 330 TRAP 360:OPEN #N2,N8,N0,NAME$ 
LNJ 340 PUT #N2,NUM:PRINT #N2;I$:FOR I=1 TO NUM*N152 STEP N76 
RTJ 350 PRINT #N2;A$(I,I+N75):NEXT I:CLOSE #N2:GOTO 70 
ADJ 360 CLOSE #N2:PRINT "SAVING ERROR #";PEEK(195):PRINT :GOTO 270 
IYJ 370 GRAPHICS N0:PRINT "LOAD FROM CASSETTE/DISK":PRINT :IF NUM=N0 THEN 390 
LCJ 380 PRINT "ERASE OLD DATA";:INPUT IN$:IF IN$(N1,N1)="N" THEN GOTO 70 
ENJ 390 GOSUB 270 
AGJ 400 TRAP 430:OPEN #N2,N4,N0,NAME$ 
NPJ 410 GET #N2,NUM:INPUT #N2;I$:FOR I=N1 TO NUM*N152 STEP N76 
LTJ 420 INPUT #N2;IN$:A$(I,I+N75)=IN$:NEXT I:CLOSE #N2:GOTO 70 
CGJ 430 CLOSE #N2:PRINT "LOADING ERROR #";PEEK(195):PRINT :GOTO 390 
QMJ 440 GRAPHICS N0:PRINT "TEST - ";NUM;" QUESTIONS/ANSWERS":GOSUB 950 
MFJ 450 TEST$(N1)=CHR$(N0):TEST$(N100)=CHR$(N0):TEST$(N2)=TEST$ 
RBJ 460 WRONG=N0:D=N0 
OBJ 470 RM=INT(RND(N0)*NUM)+N1:I=RM*N152-N151:IF TEST$(RM,RM)="A" THEN 470 
RPJ 480 IF TEST$(RM,RM)=CHR$(N0) THEN TEST$(RM,RM)="A" 
UUJ 490 QU=ASC(I$(RM*N2-N1)):AN=ASC(I$(RM*N2)) 
YZJ 500 PRINT :PRINT "QUESTION":PRINT A$(I,I+QU) 
YYJ 510 PRINT "ANSWER":INPUT IN$ 
HZJ 520 IF IN$=A$(I+N76,I+N76+AN) THEN 570 
NMJ 530 PRINT "INCORRECT. CORRECT ANSWER":PRINT A$(I+N76,I+N76+AN):D=D-N1 
SLJ 540 IF TEST$(RM,RM)="A" THEN WRONG=WRONG+1:TEST$(RM,RM)="B" 
YNJ 550 FOR I=N100 TO 255 STEP N4:SOUND N1,I,10,N8:NEXT I 
TFJ 560 SOUND N1,10,N0,N8:GOTO 590 
NVJ 570 PRINT "CORRECT!":TEST$(RM,RM)="A" 
SJJ 580 FOR I=10 TO N0 STEP -N1:SOUND N1,N2,6,I:NEXT I 
REJ 590 FOR T=N1 TO N100:NEXT T:SOUND N1,N0,N0,N0:D=D+N1:IF D<NUM THEN 470 
YQJ 600 SC=INT(((NUM-WRONG)/NUM)*N100+0.5):? "TESTING OVER. YOUR SCORE: ";SC 
VIJ 610 IF SC<90 THEN 640 
QPJ 620 PRINT "EXCELLENT SCORE":FOR I=200 TO N0 STEP -N2:SOUND N0,I,10,N8 
FQJ 630 SOUND N1,I+30,10,N8:NEXT I:SOUND N0,N0,N0,N0:SOUND N1,N0,N0,N0 
SFJ 640 PRINT "DO YOU WANT TO TRY AGAIN";:INPUT IN$ 
AKJ 650 IF IN$(N1,N1)="N" THEN GOTO 70 
CTJ 660 IF IN$(N1,N1)="Y" THEN GOTO 440 
BWJ 670 GOTO 640 
CTJ 680 GRAPHICS N0:PRINT "ADD DATA" 
BWJ 690 GOTO 170 
KHJ 700 GRAPHICS N0:PRINT "CHANGE DATA":GOSUB 950 
FEJ 710 PRINT "QUESTION/ANSWER NUMBER YOU WANT":PRINT "TO CHANGE":INPUT D 
VTJ 720 IF D>NUM OR D<N0 THEN PRINT "THAT NUMBER DOES NOT EXIST":GOTO 710 
TRJ 730 I=D*N152-N151:QU=ASC(I$(D*N2-N1)):AN=ASC(I$(D*N2)) 
VBJ 740 PRINT "QUESTION #";D;":":PRINT A$(I,I+QU) 
HCJ 750 PRINT "DO YOU WANT TO CHANGE THIS";:INPUT IN$:IF IN$(N1,N1)="N" THEN 780 
QZJ 760 PRINT "ENTER NEW QUESTION:":INPUT IN$:QU=LEN(IN$)-N1 
CYJ 770 I$(D*N2-N1,D*N2-N1)=CHR$(QU):A$(I,I+QU)=IN$:PRINT "QUESTION NOW READS:" 
QJJ 780 PRINT IN$:PRINT :PRINT "ANSWER #";D;":":PRINT A$(I+N76,I+N76+AN) 
SKJ 790 PRINT "CHANGE THIS";:INPUT IN$:IF IN$(N1,N1)="N" THEN 820 
SXJ 800 PRINT "NEW ANSWER:":INPUT IN$:AN=LEN(IN$)-N1:I$(D*N2,D*N2)=CHR$(AN) 
YNJ 810 A$(I+N76,I+N76+AN)=IN$:PRINT "ANSWER NOW READS:":PRINT IN$ 
HMJ 820 PRINT "MORE CHANGES";:INPUT IN$:IF IN$(N1,N1)="N" THEN GOTO 70 
BSJ 830 GOTO 710 
OUJ 840 GRAPHICS N0:PRINT "DISPLAY DATA":GOSUB 950 
BPJ 850 FOR D=N1 TO NUM:I=D*N152-N151 
NVJ 860 QU=ASC(I$(D*N2-N1)):AN=ASC(I$(D*N2)) 
XWJ 870 PRINT :PRINT "QUESTION #";D;":" 
VQJ 880 PRINT A$(I,I+QU) 
NXJ 890 PRINT "ANSWER #";D;":" 
NEJ 900 PRINT A$(I+N76,I+N76+AN) 
XRJ 910 NEXT D 
OLJ 920 PRINT "PRESS RETURN FOR MENU" 
UWJ 930 GET #N1,K:IF K<>155 THEN 920 
YXJ 940 GOTO 70 
NMJ 950 IF NUM>N0 THEN RETURN 
YGZ 960 PRINT :PRINT "NO DATA HAS BEEN ENTERED.":PRINT :GOTO 920 
COMPUTER SHOPPER / MARCH 1985 / PAGE 60 

Applying The Atari

by Jeff Brenner

This month’s feature program is an on-screen alarm clock, ideal for those of you who have difficulty pulling away from your Atari to sleep, eat, work, etc. We’ll also enter a joystick-tester program and a printer utility, and we’ll look at two children’s programs from Mindscape.

Adios Adam

At this writing, Coleco Industries Inc. officially dropped its Adam computer. It had been a tough, long year and a half for the Adam from the day of its planned introduction in June of 1983. If not for their Cabbage Patch Kids, Coleco’s story might have been a much, much sadder one. So you see, folks. Atari has lived to witness the fall of yet another competing computer product.

Atari News

A few days after Coleco’s announcement, Atari displayed several of its new computers at the Las Vegas Winter Consumer Electronics Show. The new machines make up the “XE” line. One is a 64K, XL-compatible portable. The others are Atari’s first 16-bit units. We’ll have more details on these models next month.

Reader Mail

I got this idea for a joystick testing program after an incident I had with a new game program. For days I tried to figure out why the game wasn’t working like it was supposed to. Just when I was ready to bring the game back to the store, I found out that my joystick was not registering the up, or diagonally-up directions! Just run the program and move the joystick to each of the positions shown in the picture on the screen. If the joystick is O.K. the program will say so. Otherwise, it will not let you go on past the non-working direction. It also checks the joystick trigger. I hope your readers find it handy.

Ricky Freeman
Baton Rouge, Louisiana

I’m sure they will. The program is listed under the “JOYSTICK TESTER” heading and has been slightly modified to facilitate its printing in the magazine. Thanks for writing.

JOYSTICK TESTER 
INE 10 REM JOYSTICK TESTER 
PNE 15 POKE 82,15:PRINT CHR$(125) 
MJJ 20 READ A:IF A=-1 THEN PRINT :GOTO 20 
NEE 30 IF A>-2 THEN PRINT CHR$(A);:GOTO 20 
SNE 35 POKE 82,2:PRINT 
MOJ 40 FOR I=1 TO 8:READ VALUE 
CKJ 50 PRINT "MOVE JOYSTICK TO POSITION #";I 
HPJ 60 IF STICK(0)<>VALUE THEN GOTO 60 
OEJ 70 SOUND 0,10,12,8:FOR J=1 TO 50:NEXT J 
KTJ 80 SOUND 0,0,0,0:PRINT "GOOD":NEXT I 
FMJ 90 PRINT :PRINT "PRESS TRIGGER" 
VAE 100 IF STRIG(0)=1 THEN GOTO 100 
MTE 105 PRINT "GOOD" 
YUJ 110 PRINT :PRINT "JOYSTICK IS WORKING!" 
POJ 120 END 
MKJ 130 DATA 49,32,32,50,32,32,51,-1 
EWJ 140 DATA 32,7,32,124,32,6,-1 
YIJ 150 DATA 32,32,7,124,6,-1 
MWJ 160 DATA 52,18,18,20,18,18,53,-1 
YKJ 170 DATA 32,32,6,124,7,-1 
FAJ 180 DATA 32,6,32,124,32,7,-1 
MXJ 190 DATA 54,32,32,55,32,32,56,-2 
FLZ 200 DATA 10,14,6,11,7,9,13,5 

I’m a novice Atari user and recently bought an Epson RX-80 printer. I’m very interested in using the printer to create graphics. A salesman told me I need a “screen dump,” but since I am not familiar with this I am asking for your help.

B.E. Grant Newark,
New Jersey

Very simply, a screen dump is a routine which prints, or “dumps,” the contents of the screen to the printer. The best way to draw graphics on your printer is to first create the image on the screen and then transfer the contents of the screen to the printer. Many graphics programs on the market contain a built-in screen dump that allows you to print displays created with the program. A screen dump to print displays created by your own BASIC programs is not difficult to design, and one is listed under the “GRAPHICS DUMP UTILITY” heading.

This program will print graphics created in GRAPHICS 6, 7, 8, 9, 10, 11, 14 and 15. GRAPHICS 8 works best. As is, it will work with most Epson, Gemini, or graphics-compatible printers. To use, simply GOTO 31000 after creating a display on a graphics screen. If your printer is properly connected and its power on, the graphics will be printed. The program will automatically compensate for graphics modes with or without a text window.

Higher horizontal resolution on the printer is possible by changing the MODE variable on line 31020. When MODE = 1, the resolution is 60 dots-per-inch. When MODE = 2, the resolution is 120 dots-per-inch. On the Epson FX-80 and RX-80, and on the Gemini 10X and 15X, two additional modes (MODE = 3 and MODE = 4) may be used by adding the appropriate characters to the data in line 31080 of the subroutine. When MODE = 3, the double-speed, 120 dots-per-inch mode is activated. Quadruple density is available when MODE = 4. This gives a resolution of 240 dots-per-inch.

If you have an Epson, add ,Y,Z to the data statement in line 31080 so it reads:

31080 DATA K,L,Y,Z 

If you have a Gemini, the two additional letters must be lower-case. Line 31080 will read:

31080 DATA K,L,y,z 

Demo 1 and Demo 2 are sample BASIC graphics listed under their respective printer outputs. Enter Demo 1 without erasing lines 31000-31220 of the Graphics Dump Utility and run it. Your printer should display the same output. For the second demonstration, type NEW, load the Graphics Dump Utility into memory again, add Demo 2 and run it.

The Graphics Dump Utility differs from other screen dumps in that it prints horizontally on the paper, as it appears on the screen. Normally, a graphics dump would print the image on its side. To correct this, our utility reads the screen sideways to yield an upright image printout.

GRAPHICS DUMP UTILITY 
EXJ 31000 REM GRAPHICS DUMP UTILITY 
KNJ 31010 REM BY JEFF BRENNER 
VNJ 31020 MODE=2:DIM A$(150),B$(320),S$(1):OPEN #1,8,0,"P:":RESTORE 31040 
OXJ 31030 FOR I=1 TO PEEK(87)-4:READ BPL,VERT:NEXT I 
ULJ 31040 IF BPL=0 THEN PRINT "UNSUPPORTED MODE":END 
SJJ 31050 DATA 0,0,20,80,40,80,40,160,40,160,40,160,40,160,0,0,0,0,20,160,40,160 
DZJ 31060 IF PEEK(703)<>4 THEN VERT=VERT+VERT/5 
UEJ 31070 RESTORE 31080:FOR I=1 TO MODE:READ S$:NEXT I 
FXJ 31080 DATA K,L 
RQJ 31090 RESTORE 31160:FOR I=0 TO 91:READ A:POKE 1536+I,A:NEXT I 
BQJ 31100 S=PEEK(88)+256*PEEK(89):PRINT #1;CHR$(27);CHR$(64);:BPL=BPL*8 
LYJ 31110 PRINT #1;CHR$(27);CHR$(65);CHR$(8);:HI=INT(BPL/256):LO=BPL-HI*256 
SRJ 31120 FOR I=1 TO INT(VERT/8+0.5):POKE 207,INT(S/256) 
RLJ 31130 POKE 206,S-PEEK(207)*256:B$(1)=CHR$(0):B$(320)=CHR$(0):B$(2)=B$ 
VFJ 31140 A=USR(1536,ADR(B$)):PRINT #1;CHR$(27);S$;CHR$(LO);CHR$(HI); 
CPJ 31150 PRINT #1;B$(1,BPL):S=S+BPL:NEXT I:END 
TLJ 31160 DATA 104,104,133,205,104,133,204,160,0,162,8,177,206,157 
NYJ 31170 DATA 92,6,24,165,206,105,40,133,206,165,207,105,0,133 
YNJ 31180 DATA 207,202,208,235,198,207,56,165,206,233,64,133,206,165 
ONJ 31190 DATA 207,233,0,133,207,169,8,133,203,162,8,177,204,62 
RZJ 31200 DATA 92,6,42,145,204,202,208,245,198,203,165,203,240,16 
PJJ 31210 DATA 24,165,204,105,1,133,204,165,205,105,0,133,205,76 
XJZ 31220 DATA 51,6,200,192,40,208,174,96 
Demo 1 
10 REM DEMO 1 
20 GRAPHICS 24:COLOR 1:X=0:Y=191:I=X 
30 TRAP 70 
40 PLOT X,Y:DRAWTO 319-X,191-Y 
50 PLOT X,191-Y:DRAWTO 319-X,Y 
60 X=X+Y:Y=Y+X 
70 IF X>319 THEN X=X-319:GOTO 70 
80 IF Y>191 THEN Y=Y-191:GOT0 80 
90 I=I+1:IF I<30 THEN GOTO 30 
100 GOTO 31000 
Demo 2 
10 REM DEMO 2 
20 GRAPHICS 24:COLOR 1:TRAP 90 
30 FOR X=0 TO 300 STEP 10 
40 Y=INT(X/2+0.5) 
50 PLOT X,Y:DRAWTO X,Y+50 
60 DRAWTO X+80,Y+70:DRAWTO X,Y 
70 DRAWTO X+80,Y+20:DRAWTO X+80,Y+70 
80 NEXT X 
90 GOTO 31000 

Reminder

Next month’s column will contain our first “Programming Tips” section. Programming hints and ideas sent in by readers will be included here. If you have any programming suggestions, or short, handy programs from which others may benefit, send them in. Contributors whose ideas are printed will receive three-dimensional, laser-etched hologram stickers. Let me hear from you.

Imperfect Program Perfect

January’s column contained some modifications to Program Perfect which originally appeared here in December. If you followed the article carefully, you should have had no problems in making the changes. However, I would understand if there was some confusion, as two lines of the program got squashed together in the typesetting department. Line 30260 should read as follows:

30260 IF T>650 THEN T=T-650 

Program Perfect is used to prevent typing errors in programs entered from this column. It makes use of a three-letter code which precedes each line of the longer programs which appear here. If you’re new to Computer Shopper (and I understand we’re still gaining new readers at an amazing rate), you will find a complete listing of Program Perfect in next month’s column. If you can’t wait, you can send me a self-addressed, stamped envelope for a listing, or send a cassette or formatted disk and $2.00 for handling and return postage and I will make a copy for you. Make sure you specify DOS II or DOS III if you send a disk.

Tink!Tonk!

Several months ago, I reviewed “Tonk in the Land of Buddy-Bots,” an excellently designed children’s program from Mindscape, Inc. Well, the Mindscape people have sent me two of their newer programs from their Tink!Tonk! software line which are equally appealing.

“Tuk Goes to Town” is intended to build spelling, vocabulary, and shape and pattern recognition skills through five games. “Tink’s Adventure” is designed to teach ABC order and the computer keyboard layout through five games. Both of these programs combine an interactive story with an animated character controlled by the child. They also feature attractive, colorful graphics, and music.

The instruction manuals are easy to understand and well-illustrated, although I can’t resist mentioning one small item that appeared in the “Tuk Goes to Town” manual. It gives the software copyright date as the year 1874. Either these people have been preparing this program quite some time, or, more likely, someone made a typographical error. I should point out, however, that this typo is in no way indicative of the overall quality of the manual or the game itself. If you have some four to eight year olds at home, I highly recommend that you consider these Mindscape programs.

Alarm Clock

Beep-beep-beep. It’s time for our alarm clock program (yes, pun intended). Not only will it provide a constant display of the time on the screen while you program, but it can sound its alarm at any time you select.

The program is listed under the “ALARM CLOCK” heading. Enter it, save it and then run it. You are first asked to enter the current hour. That’s easy enough — type the hour and press RETURN. Next, you’re asked for the current minute. Since the clock will not start immediately, enter a value one minute past the current minute.

Once the current hour and minute have been specified, you are asked to enter the alarm hour. Type the hour of the time you wish the alarm to sound. Following this, you’re asked for the alarm minute. Enter the minute of the alarm time.

Now you’ll get a “PRESS RETURN TO START THE CLOCK” message. When you press RETURN, the clock will appear on the top line of the screen and will start at zero seconds of the time you have entered. A flashing colon indicates that the clock is working. Since the clock lies on the first line of the display, you will not be able to type on this line — the machine language routine contained within Alarm Clock will automatically move the cursor off this line, so you need not worry about it.

Granted, the clock is not 100% precise; it may lose about six seconds per hour. But for the time period you would be using your computer, this time loss is not very significant. The clock will also slow down somewhat while the disk drive is being accessed, and even more so while the cassette recorder is being used, so you should limit these operations if you desire to keep the clock more accurate.

When the clock reaches the time set for the alarm time, the alarm will begin beeping through the television speaker. Out of kindness, I will tell you that you can turn the alarm off by pressing the START key. The clock itself will remain operational.

You don’t need to keep the alarm clock program in BASIC’s memory for the clock to function. Alarm Clock stores a machine language routine onto page six of the computer’s memory (a relatively safe area of RAM) where it is executed as part of the Atari’s vertical blank routine. Therefore, you can type NEW and begin your own programming projects.

One more note: Alarm Clock should only be used with a Graphics 0 screen as it was designed to be used while programming in this mode.

Next Month

We’ll learn how the alarm clock program works, and I’ll include an assembly language listing. Also, we’ll start our exciting Programming Tips section. And, don’t be too surprised if you encounter an April Fools’ program!

Readers’ questions, comments and contributions are welcome. Address all correspondence to:

Jeff Brenner’s
“Applying The Atari”
P.O. Box F
Titusville, FL 32781-9990
ALARM CLOCK 
TQJ 10 REM ALARM CLOCK 
EWJ 20 REM BY JEFF BRENNER 
YGJ 30 RESTORE 100:TOT=0 
NEJ 40 FOR I=0 TO 192:READ N:POKE 1536+I,N:TOT=TOT+I+N:NEXT I 
YTJ 50 IF TOT<>42303 THEN PRINT "ERROR - CHECK DATA":END 
PVJ 60 PRINT "CURRENT HOUR";:INPUT A:GOSUB 140:POKE 207,A:IF E=1 THEN 60 
VQJ 70 PRINT "CURRENT MINUTE";:INPUT A:GOSUB 160:POKE 206,A:IF E=1 THEN 70 
LCJ 80 PRINT "ALARM HOUR";:INPUT A:GOSUB 140:POKE 1726,A:IF E=1 THEN 80 
QZJ 90 PRINT "ALARM MINUTE";:INPUT A:GOSUB 160:POKE 1727,A:IF E=1 THEN 90 
EOJ 100 PRINT "PRESS RETURN TO START CLOCK":POKE 764,255 
MQJ 110 IF PEEK(764)=255 THEN 110 
MTJ 120 POKE 204,0:POKE 205,0:SOUND 0,0,0,0:A=USR(1536) 
PPJ 130 END 
WUJ 140 E=0:IF A<0 OR A>12 THEN A=0:E=1:RETURN 
WYJ 150 E=0:IF A<0 OR A>60 THEN A=0:E=1:RETURN 
QXJ 160 B=INT(A/10):C=A-B*10:A=B*16+C:RETURN 
YOJ 170 DATA 104,162,6,160,16,169,7,32,92,228,169,0,141,192,6,96,248 
EDJ 180 DATA 162,0,181,204,24,105,1,149,204,201,96,208,24,169,0,149,204 
GEJ 190 DATA 232,224,3,208,236,165,207,24,105,1,133,207,201,19,208,4,169 
FQJ 200 DATA 1,133,207,224,2,144,17,165,207,205,190,6,208,10,165,206,205 
YCJ 210 DATA 191,6,208,3,238,192,6,216,160,18,162,1,181,206,74,74,74 
EIJ 220 DATA 74,9,144,145,88,200,181,206,41,15,9,144,145,88,200,200,202 
OSJ 230 DATA 16,232,136,136,136,136,169,154,166,204,224,48,144,2,169,128,145 
FQJ 240 DATA 88,136,136,177,88,201,144,208,4,169,0,145,88,173,192,6,240 
FDJ 250 DATA 23,165,204,201,48,144,12,169,32,141,0,210,169,200,141,1,210 
BUJ 260 DATA 208,5,169,160,141,1,210,173,31,208,201,6,208,11,169,0,141 
ZAJ 270 DATA 0,210,141,1,210,141,192,6,165,84,208,5,169,143,141,252,2 
XUZ 280 DATA 76,98,228,0,0,0 
COMPUTER SHOPPER / APRIL 1985 / PAGE 55 

Applying The Atari

by Jeff Brenner

This month we’ve got all the exciting details on Atari’s new products, which Atari expects to begin shipping to stores this month. We’ll learn how last month’s Alarm Clock Program works, have a look at the reader mail and take some programming tips from readers. Also, I’ll list the complete version of Program Perfect.

Atari News

So, it looks as though Jack Tramiel did keep his promises. With the introduction of the 130ST and 520ST, Atari’s first non-8 bit computer products. Atari has shown that it is indeed alive. Let’s get a brief run-down of the new units.

The XE Line

Atari describes the XE line as the 1985 Atari XL models. Basically, the 65XE is an 800XL with an attractively redesigned case, a sculptured, high-quality keyboard, and a lower price. The PIO connector of the XL models, which was intended for future hardware expansion, is not included on the XE models. The 130XE has the same features as the 65XE, but contains 128K RAM. The 65XE and 130XE are to retail for approximately $100 and $180 respectively. Other Atari products, announced at the Winter CES in Las Vegas but not as official, are the 65XEM, a 65XE with 8-voice, music synthesizer capabilities, and the 65XEP, a portable XE with a built-in 3.5 inch disk drive and 5-inch screen.

A variety of printers were announced for the XE models, including a dot matrix impact, a letter quality daisy wheel, and a dot matrix thermal transfer printer. The impact and thermal printers offer near-letter quality print styles.

The ST Line

The ST models will no doubt put Atari in the spotlight for 1985. The big question is whether any Atari model can tackle the seemingly impervious Apple Macintosh, even if the ST proves superior and costs a fraction of the price. Also, what happens if and when Commodore brings out its Macintosh-like Amiga computer? The battle is beginning all over again, folks. Whether the ST line is a success or a failure will depend largely upon the quantity and quality of software that is developed for it, as well as Jack Tramiel’s marketing strategy.

The 130ST and 520ST offer 128K and 512K RAM (actually 131,072 and 524,288 bytes), respectively. The units use the same MC68000 CPU as the Macintosh, although Atari more accurately calls it a 16/32 bit microprocessor; Apple advertises the Macintosh as a 32-bit machine. The ST models use the CP/M-68K operating system and Graphics Enviroment Manager, developed by Digital Research, to give the icons, pull-down menus, windows and mouse-controlled operation that have brought the Macintosh so much acclaim. The Atari ST brings this all one step further by offering color graphics, a capability not available on the Macintosh. The three graphics modes on the ST consist of a 320-by-200 pixel, 16 color mode, a 640-by-200, four color mode, and a 640-by-400, one color mode.

Other features of the ST models include both an RS232C serial input/output port and a Centronics-type parallel port, a high-speed (1.3 megabytes/second) hard disk interface, monitor jacks for TV, RGB and monochrome, A sculptured keyboard with numeric keypad, a three-voice sound generator and a Musical Instrument Digital Interface (MIDI). Including the MIDI interface was a great idea and may make the ST models extremely practical musician’s tools. Many of the newest synthesizers and electronic instruments utilize the MIDI standard.

A 500K, 3.5 inch disk drive will be sold in a separate component for the ST units. A 10-megabyte, 3.5 inch hard disk drive is to be available for the ST for under $600. Utilizing the 1.3 megabytes/second data transfer rate, this drive should be incredible at the price.

Atari has talked about even another computer to be introduced in Hannover, Germany this month. This one is to have a true 32-bit microprocessor and over 1 megabyte of RAM storage (1 megabyte is 1000K). It’s surely an Atari product I’m anxious to see.

Reader Mail

Are there any POKE commands which would allow older cartridges (for 400/800 series) to run on an 800XL?

John B. Neff
East Brunswick, NJ

Many older programs for the 400/800 will still run on the XL models, especially software produced by Atari. For those that are incompatible, there are no simple POKE commands to make them work on an XL, but you can get a “translator” disk. This disk gives your XL the operating system of the 400/800 and allows it to run almost all of the older software. It’s available from Atari (Customer Relations, P.O. Box 61657, Sunnyvale, CA 94088, Attn: Translator Disk) for $9.95 + $2.50 postage and handling. You can also purchase one from Dynacomp (1064 Gravel Road, Webster, 65 XE PERSONAL COMPUTER NY 14580) for $5.00 + $3.00 p. & h.


I have run into problems due to the format my writing must be in. Simply, I write scripts, i.e., screenplays. The format demands whole page action description, smaller margin dialog, and approximately centered but left-justified names. My problem is that with AtariWriter, I must continually use control codes for screen directions for action descriptions. The TAB won’t work because I don’t know of a way to, say, insert a few new lines of dialog later when editing. I think I need an 80-column card (to be able to see exactly where I am tabbing). Do you know where a good 80-column card for the 800XL can be got, or do you have any other suggestions, say in the area of my getting another word processor?

Fred Walters
Oklahoma City, OK

Your use of the control codes to change the printing margins is probably the best way to get the format that you need when using AtariWriter. As you realized, the tab is not appropriate for your needs since you would have to tab at the beginning of each printed line for a dialog of more than one line. During editing, there’s no easy way to know where the next line will begin on a 40-column screen.

I assume that your problem is the inconvenience of constantly adding control codes for your ever-changing margins. I see no easier way of doing this with your present system. An 80-column card, by itself, is not the answer. AtariWriter and almost all other word processors for the Atari were designed for a 40-column screen, so an 80-column card would make things worse, not better. However, an 80-column card combined with a compatible word processor might simplify your problem by making tabbing feasible, since you would be able to see exactly what will appear on paper without the tedious, scrolling preview mode of AtariWriter. One word processor that supports 80-columns that I have seen advertised recently is Atari PaperClip from Batteries Included. It works with their Atari B.I. 80-column display adapter for XL systems. (Contact: Batteries Included, 17875 Sky Park North, Suite P, Irvine, CA 92714, 416 596-1405).

Another alternative is Home Word from Sierra On-Line. At $69.95/disk it might be just what you are looking for. In the lower, right-hand corner of the screen, HomeWord gives you a smaller screen that shows you how the finished page will look. Each character is represented by a small graphics pixel. A flashing cursor on this mini-screen lets you see your position on the page as you type your document. Thus, it would let you see the exact position to which you are tabbing. Additionally, it gives you a preview of the printed page, as AtariWriter does, but has the advantage of giving you an 80-column display. No adapter is needed since it uses the Atari’s high resolution graphics to form the letters. (Contact: Sierra On-Line, Inc., P.O. Box 458, Coarsegold, CA 93614.)


I’d just love to have an Atari 800XL computer. But I hesitate getting one because on every one I’ve seen being demonstrated, the letters on the screen are “fuzzy”. They seem to look fuzzy even on a monitor. I thought maybe my eyes were going away so I had a friend check it out and he noticed that when letters are typed on the screen they are not sharp. He even went to another store — same story! Any idea what’s going on? All the 800XLs I looked at did not have any software running. Maybe the picture is sharper with software running. I don’t want to have to purchase a Commodore if possible.

M.L. McCrery
Lewiston, ID

Your problem is a most unusual one in that the Atari has always been noted for its excellent display. You should be able to tune the television to get a sharp, clear image. Or, perhaps it is the blue background. If that is the case, try typing:

POKE 710,0 
and press return. This will turn the background black. You can POKE 710 with other values for other background colors. Aside from changing the screen color or the brightness of the text, running software will make no difference on the letters.

Personally, I own both Atari and Commodore systems and have always been more satisfied with my Atari’s display.

If you are interested in the 800XL, I suggest at this time that you look into the newer 65XE or 130XE which should be available this month.

Programming Tips

This section contains programming hints and suggestions sent in by readers. If your tip is printed, you’ll receive a three-dimensional holograph sticker.

From M. Rose (Cambridge, MA):

If you need a fast, reliable renumbering program for Atari BASIC programs, and if you own Microsoft BASIC, you can use Microsoft to renumber Atari BASIC! First, LIST your Atari BASIC program on cassette or diskette. Boot up with Microsoft and LOAD the program. Execute the RENUM command and SAVE the renumbered program back to cassette or diskette. Then, ENTER the program back in with the Atari BASIC. Microsoft will renumber all Atari BASIC statements with line numbers except for TRAP.

From Marvin Oppenheim (Monsey, NY):

In order to make it easier for me to type in program listings (especially long ones) I do the following: (1) I first dictate the entire listing into a tape recorder. (2) I then play it back while listening to it through a pair of headphones. (3) Since I am not a speed typist, I control the playback with the use of a foot pedal activator (available at any Radid Shack).

This sure makes typing in listings a lot easier.

Users Groups

I received an issue of the Pokey Press, “the official newsletter” of the Atari Computer Club of the Palm Beaches (Contact: Jim Woodward, 15993 S.W. 8th Ave. B-101, Delray Beach, FL 33444, Editor: Marvin Cox). It’s interesting to see what’s happening in Atari users groups around the country. Many of these newsletters have been useful and important information to share with the rest of the Atari world. I’d like to receive newsletters from other Atari users groups. Send them in. I’ll try to mention as many as I can in the column. Hopefully, this column can serve as a national communications link among the many Atari users groups across the country.

Alarm Clock Operation

Let’s take a brief look at how last month’s Alarm Clock program works. The BASIC program you entered for the Alarm Clock contains a machine language program which is placed on Page 6 of memory. Page 6 is the area which does not interfere with your BASIC program memory.

The machine language program is then set up as part of the Atari’s vertical blank routine. Every 1/60th of a second, the Atari jumps to a program in its operating system which updates the color registers, increments or decrements internal counters, and performs a variety of other tasks. This program is called the vertical blank routine. The clock program is added as an extension of this routine, and thus it runs 60 times per second.

The machine language clock routine keeps track of the number of times it has been executed. When it counts to 60, the program updates a counter containing the number of seconds which have elapsed. When the second-counter reaches 60, a minute counter is incremented, and, in turn, when the minute-counter reaches 60, the hour-counter is increased. Collectively displayed, these counters tell you the time.

In addition to incrementing counters, the routine checks if the current time is the same as the time set for the alarm. If they are equal, the alarm sounds and continues to beep until it detects that the START button has been depressed.

For those interested in assembly language, an assembly listing of this routine appears under the “Alarm Clock Assembly Code” heading.

ALARM CLOCK ASSEMBLY LISTING 

10  *=$600 
20  PLA 
30  LDX #START/256 
40  LDY #START&255 
50  LDA #$07 
60  JSR $E45C 
70  LDA #$00 
80  STA VAR3 
90  RTS 
0100 START SED 
0110  LDX #0 
0120 BACK LDA $CC,X 
0130  CLC 
0140  ADC #$01 
0150  STA $CC,X 
0160  CMP #$60 
0170  BNE NONE 
0180  LDA #$00 
0190  STA $CC,X 
0270 SKIP INX 
0280  CPX #3 
0290  BNE BACK 
0300  LDA $CF 
0310  CLC 
0320  ADC #1 
0330  STA $CF 
0340  CMP #$13 
0350  BNE NONE 
0360  LDA #$01 
0370  STA $CF 
0380 NONE CPX #2 
0381  BCC NONE2 
0382  LDA $CF 
0383  CMP VAR1 
0384  BNE NONE2 
0385  LDA $CE 
0386  CMP VAR2 
0387  BNE NONE2 
0388  INC VAR3 
0389 NONE2 CLD 
0390  LDY #$12 
0400  LDX #1 
0410 LOOP LDA $CE,X 
0420  LSR A 
0430  LSR A 
0440  LSR A 
0450  LSR A 
0460  ORA #144 
0470  STA ($58),Y 
0480  INY 
0490  LDA $CE,X 
0500  AND #$0F 
0510  ORA #144 
0520  STA ($58),Y 
0530  INY 
0540  INY 
0550  DEX 
0560  BPL LOOP 
0570  DEY 
0580  DEY 
0581  DEY 
0582  DEY 
0590  LDA #154 
0600  LDX $CC 
0610  CPX #$30 
0620  BCC COLON 
0630  LDA #128 
0640 COLON STA ($58),Y 
0650  DEY 
0660  DEY 
0670  LDA ($58),Y 
0680  CMP #144 
0690  BNE NOTHING 
0700  LDA #0 
0710  STA ($58),Y 
0720 NOTHING LDA VAR3 
0730  BEQ JUMP 
0740  LDA $CC 
0750  CMP #$30 
0760  BCC SOUND1 
0770  LDA #$20 
0780  STA $D200 
0790  LDA #$C8 
0800  STA $D201 
0810  BNE JUMP 
0820 SOUND1 LDA #$A0 
0830  STA $D201 
0840 JUMP LDA $D01F 
0850  CMP #$06 
0860  BNE NOPRESS 
0870  LDA #0 
0880  STA $D200 
0890  STA $D201 
0900  STA VAR3 
0910 NOPRESS LDA $54 
0920  BNE NOTOP 
0930  LDA #$8F 
0940  STA $2FC 
0950 NOTOP JMP $E462 
0960 VAR1 .BYTE 0 
0970 VAR2 .BYTE 0 
0980 VAR3 .BYTE 0 
0990  .END 

Program Perfect

For the benefit of those new to Computer Shopper, and to those who had difficulty in entering this program due to its listing and revision over two issues, a complete, final, never-to-be-changed listing appears under “Program Perfect.”

Next Month

We’ll have a program to liven up your Graphics 0 display, plus we’ll start entering a business applications program for those who keep mailing lists. As usual, we’ll cover reader mail and learn more programming tips.

Reader’s questions, comments and contributions are welcome. Please enclose a self-addressed, stamped envelope for a personal reply.

A cassette or diskette of any program appearing in this column is available from the author for $5.00 per program, postpaid. Specify DOS 2 or DOS 3 when requesting a disk.

Address all correspondence to:

Jeff Brenner’s
“Applying the Atari”
c/o Computer Shopper
P.O. Box F
Titusville, FL 32781
PROGRAM PERFECT 
30000 CLR :CLOSE #1:CLOSE #2:N1=1:N2=N1+N1:N84=84:N85=N84+N1:N39=39:N65=65 
30010 DIM LN$(120):OPEN #N1,9,N0,"E:":OPEN #N2,4,N0,"K:" 
30020 PRINT CHR$(125):POSITION 12,N0:PRINT "PROGRAM PERFECT":POSITION 12,N1 
30030 PRINT "By Jeff Brenner":IF ST THEN PRINT :PRINT "Current line: ";ST 
30040 IF NOT ST THEN PRINT :PRINT "Starting line: ";:INPUT #16;ST 
30050 POSITION N39,5:? " ":POSITION N39,6:? " ":POSITION N39,7:? " " 
30060 POSITION N2,5:PRINT "--- ";ST;:POKE N85,N2:PRINT "-";CHR$(30);:FOR I=N1 TO 3 
30070 POKE 702,64:POKE 694,0:GET #N2,N:IF N=126 AND I>N1 THEN PRINT CHR$(30);"-";CHR$(30);:I=I-N1:GOTO 30070 
30080 IF N<N65 OR N>90 THEN GOSUB 30310:GOTO 30070 
30090 PRINT CHR$(N);:NEXT I:SP=LEN(STR$(ST)) 
30100 FOR I=N1 TO SP+N2:? CHR$(31);:NEXT I:Y=PEEK(N84):X=PEEK(N85):ES=N0 
30110 GET #N2,N:IF N=155 THEN POSITION N2,5:INPUT #N1;LN$:GOTO 30200 
30120 IF N=156 OR N=157 THEN 30110 
30130 IF ES THEN 30160 
30140 IF (N=29 AND PEEK(N84)=Y+N2) OR (N=28 AND PEEK(N84)=Y) THEN 30110 
30150 IF N=125 THEN 30020 
30160 PRINT CHR$(N);:ES=N0:IF PEEK(N84)>Y+N2 THEN 30190 
30170 IF PEEK(N84)=5 AND PEEK(N85)=SP+6 THEN 30060 
30180 GOTO 30110 
30190 GOSUB 30310:POKE N85,N39:POKE N84,Y+N2:PRINT CHR$(28);CHR$(29);:GOTO 30110 
30200 POSITION N39,10: ? " ":POSITION N39,11:? " ":POSITION N39,12:? " " 
30210 T2=26*(ASC(LN$(N1,N1))-N65)+ASC(LN$(N2,N2))-N65:NL=ASC(LN$(3,3))-N65+N1 
30220 POSITION N2,10:PRINT CHR$(156);LN$(5,LEN(LN$)):PRINT :PRINT :PRINT CHR$(157);"CONT" 
30230 POSITION N2,8:POKE 842,13:STOP 
30240 POKE 842,12:POSITION N2,10:PRINT CHR$(156);:POSITION N2,9:LIST ST 
30250 T=NL:POSITION N2,10:INPUT #N1;LN$:FOR I=N1 TO LEN(LN$):T=T+ASC(LN$(I,I)) 
30260 IF T>650 THEN T=T-650 
30270 NEXT I:IF T=T2 AND NL<26 THEN ST=ST+NL:GOTO 30020 
30280 IF T=T2 AND NL=26 THEN 30320 
30290 POSITION N2,9:FOR I=N1 TO 5:PRINT CHR$(156);:NEXT I 
30300 PRINT :PRINT "ERROR - TRY AGAIN":GOSUB 30310:GOTO 30060 
30310 SOUND N0,N85,12,8:IF N1^N1 THEN SOUND N0,N0,N0,N0:RETURN 
30320 PRINT CHR$(125);"END OF PROGRAM - STAND BY..." 
30330 FOR I=30000 TO 30320 STEP 10:POSITION 2,4:PRINT I:PRINT "CONT" 
30340 POSITION 2,2:POKE 842,13:STOP 
30350 NEXT I:PRINT CHR$(125):FOR I=30300 TO 30370 STEP 10:PRINT I:NEXT I 
30360 LN$="PROGRAM ENTRY COMPLETED.":PRINT "POKE 842,12:PRINT CHR$(125);LN$" 
30370 POSITION 2,0:POKE 842,13:STOP 
COMPUTER SHOPPER / MAY 1985 / PAGE 53 

Applying The Atari

by Jeff Brenner

This month’s feature program utilizes a capability of the Atari called the display list interrupt to help you liven up your Graphics 0 display. We’ll also look at the reader mail, programming tips, and a recap of instructions for Program Perfect for our newer readers.

Reader Mail

While readers’ questions are far from in short supply, I would like to see more letters with contributions, such as short programs or helpful advice, from which other readers may benefit. A three-dimensional, holograph sticker will be sent to each contributor of an item printed in this column. Also, if you have an idea for a program but cannot implement it yourself, send me a program request. If the program will be useful to other readers, it may be developed and printed in a future issue.


I have a Trade-Wind Instruments model A-1 Anemometer I would like to interface with an old Atari 600XL I have. The anemometer has a generator on it so when the wind spins it around it produces a variable voltage which translates into wind speed in mph.

I asked the Trade-Wind folks if they knew anything about doing this but they didn’t. They sent me the enclosed reprint from BYTE magazine, but I can’t understand what the article is talking about.

I would like to get the wind speed from the anemometer through one of the joystick ports. Then have a program to get the wind speed say once an hour and store it for later retrieval.

I have no idea how to go about doing this; maybe it’s impossible? Any help you can give me would be greatly appreciated.

Greg Matlock
Hays, Kansas

The joystick ports on the Atari can be used to read a wide variety of instruments, including your anemometer, providing that interfacing is properly done. A digital anemometer might be the easiest to interface to the Atari since its output is binary-coded decimal data. This could be read through the ports with a minimum amount of extra circuitry; however, you would have to write a routine to interpret the incoming data.

Since you did not specify whether or not your unit is a digital anemometer, I am assuming that your model simply generates a voltage relative to the wind speed. In that case, you would have to either use a circuit to convert the signal to binary-coded decimal data, or convert the varying voltage into a varying resistance, which could then be read like a game paddle. Specific details for doing this are beyond the scope of this column.

I recommend that you try contacting the author of the article enclosed with your letter. His article discussed interfacing an anemometer to an S-100 system, and he might be able to help you to do the same with your Atari.

I also recommend that you and any other readers interested in interfacing external devices with their Atari computers read “Control Your Environment with the Atari 400/800” (by David Alan Hayes, BYTE, July 1983). This gives some general information on controlling and monitoring devices through the joystick ports. Most of what is discussed applies to the XL and newer XE Atari units as well.

You might also attempt to contact a technician at Atari (1265 Borregas Ave., Sunnyvale, CA 94086) to assist you or direct you to other sources.

Interfacing your anemometer to your computer is not an impossibility. First get the details on doing so. Then, if you are not experienced in constructing circuits, get the help of a friend familiar with electronics.


I am strongly considering buying one of the new Atari ST machines when they are released. I have two questions: (1) Are they Macintosh compatible? (2) Would you support the new machines in your “Applying The Atari” column?

Rob Murray
Montgomery, Pennsylvania

Although the Atari ST is known as the “Jackintosh” in certain circles (after Jack Tramiel), it is not software compatible with Apple’s Macintosh. Come on now — ultra-high resolution color graphics, multiple ports and interfaces, sound capatibilities, and Macintosh compatibility for under $1000? That would be too much to ask for!

If the new Atari units catch on and if there is demand among readers for information on them, I would certainly devote space to these new models.

Programming Tips

It isn’t necessary to go to DOS when you want to format a disk to save a program. Loading DOS (if no MEM.SAV is present) will wipe out the program you’re working on. A truly useful method of formatting a disk without leaving BASIC is the XIO command. To format a disk in single density, enter:

XIO 253,#1,33,87,"D:" 
For double density (available on the 1050 drive only), enter:
XIO 253,#1,33,127,"D:" 
If you do this on a disk that already has programs on it, you will erase the disk, so be careful.
Herb Collins
Long Beach, California

I have discovered one cause of the infamous Atari 400/800 BASIC hang-up in which the Atari refuses to process user input. It seems that pressing SYSTEM RESET while the computer is in the middle of certain operations can mess things up.

For example: you type PRINT A$ to print out A$, a long string. The computer hesitates, and you, fearing that a system crash might be developing, press SYSTEM RESET in your attempt to avert disaster. However, when you now try to enter a line, the computer hangs up. Had you waited two to three seconds for the string to be printed out, everything would have been fine — Atari BASIC normally hesitates when printing out a long string while it rearranges its memory. But pressing SYSTEM RESET might leave the Atari in some kind of half-rearranged memory state — probably sufficient cause for a BASIC crash.

You should wait for the READY prompt before pressing SYSTEM RESET, and use BREAK instead of the reset key to interrupt program execution to greatly reduce the occurrence of the hang-up. [Atari says that this bug has been rectified in the BASIC in the XL and XE models, so this tip applies only to 400 and 800 owners.]

G. Scott
Bronx, New York

Program Perfect Recap

Last month, Program Perfect was listed in its entirety for those new to Computer Shopper and for those who missed the revision that followed the original listing. This also allows us to point to one single issue (April 1985) when referring to this program. This month we’ll review the features of Program Perfect and how to use them. If you are already familiar with Program Perfect, you can skip to the “Multi-Luminance Graphics 0” section to start entering this months program.

Before we start using Program Perfect, check over your typing a few times to be sure there are no errors. You don’t want a bug in a program that checks other programs for errors!

We’ll use the short program listed under the “SAMPLE PROGRAM” heading to test Program Perfect. The three letters to the left of each line number is the code used by Program Perfect to check the line for errors, and to determine the next line for its automatic line numbering feature.

SAMPLE PROGRAM 
CTJ 10 REM TEST OF PROGRAM PERFECT 
LAJ 20 PRINT "THIS IS A TEST" 
WMJ 30 GOTO 20 
OJZ 40 END 

RUN Program Perfect. When you’re asked to enter the starting line, enter the first line of the program you are entering. In the case of this demonstration program, enter 10 and press RETURN. Figure 1 shows how the line below will now appear.

--- 10 
FIGURE 1 

The three hyphens preceding the 10 are for the three-letter code. When you type the code for line 10, the display will appear as in Figure 2.

CTJ-10 ■ 
FIGURE 2 

The cursor will have moved past the line number to allow you to enter the program line. Type in the remainder of line 10 and press RETURN. Program Perfect will perform a few screen manipulations below the line you have entered as it checks the line for errors and places it in the Atari’s memory as a real program line. You’ll get a buzz and an “ERROR - TRY AGAIN” message if you’ve made a syntax error, or if the line does not otherwise check against its three-letter code. An error in typing the three-letter code will also trigger the error message. After the error message is printed, you’ll have to enter the three-letter code again, but the rest of the line will remain intact so you may correct it using the cursor control keys. To erase the entire line and the code, press SHIFT-CLEAR. Program Perfect will not allow you to move the cursor out of its three-line entry area.

If the line is entered correctly, the program will automatically display the next line number of the program. Enter the codes and program lines for each line number that appears until the entire program is entered.

Program Perfect allows you to use all abbreviations, such as GR. for GRAPHICS and G. for GOTO. However, do not use ? for PRINT or vice versa as the computer treats these as two different commands. The same goes for GOTO and GO TO. Use PR. as an abbreviation for PRINT, and stick to the one-word GOTO, as this is the only form that will appear in the programs in this column.

You do not have to follow the exact spacing of the program line unless the spacing is within quotes.

After you enter the last line of the program (which has a three-letter code ending with a “Z”), Program Perfect will print “END OF PROGRAM - STAND BY.” It will then take about five seconds while it erases itself from memory and leaves you only with the lines you have entered. You can then list, save or run your program.

If you don’t enter the whole program in one sitting, you can press BREAK and SAVE what you’ve already typed. Since Program Perfect is in memory, you will be saving it along with the lines of the program you have entered. When you are ready to enter more of the program, simply LOAD it back in and type GOTO 30000 (the beginning line of Program Perfect). Then enter the line number from which you want to continue for the “Starting number:” prompt and enter the rest of the program.

Multi-Luminance
Graphics 0 Screen

This month’s program gives you the chance to enhance your Atari’s Graphics 0 screen. Graphics 0 is the mode in which you program. With the SETCOLOR command, characters on the Graphics 0 screen can be set to any one of eight luminance levels. However, the Atari operating system does not provide for mixing text of different luminance on the same screen; a feature which can greatly add to the visual appeal of the display. To accomplish this, a display list interrupt could be set up.

The display list is a section of computer memory which contains a series of mode-display instructions for each line of the screen. A Graphics 0 screen would contain 24 instructions to display a line of graphics mode zero text, thereby creating a 24 line display. A display list interrupt is an instruction in this display list which causes the computer to temporarily halt its current operation and to instead jump to some routine in memory. After this routine is executed, the Atari resumes its normal activities. The most important aspect of this display list interrupt routine is that it is executed while the screen is being drawn. Therefore, the Atari’s color registers could be changed mid-screen if desired, and the change would be visually apparent on the video display.

The Multi-Luminance program that follows works on this principle. It uses 24 interrupts, one for each line of the screen, and is therefore able to assign a new luminance level to each line of text.

Enter the Multi-Luminance program under Program 1 and LIST it to cassette or diskette so that you may merge it with other BASIC programs. Now, without erasing Program 1, enter Program 2. Program 2 is a sample application program which shows off one use of a display with multi-luminances.

RUN the program. After a few seconds, a display is generated which takes advantage of the many different intensities available. The sample menu shows CHOICE 1 illuminated, while the other choices are dark. By pressing the SELECT key, the next choice is illuminated, and so forth. Pressing START would initiate a particular selection if this menu were being used in a full-length program. In this demonstration, pressing START will tell you what choice was selected.

This attractive method of menu operation could not have been done on the normal Graphics 0 screen. The Multi-Luminance routine (Program 1) sets the line containing the selected choice at the highest intensity, while it sets the other at the lowest intensity, to obtain this interesting effect.

Next Month

You’ll learn how to use the Multi-Luminance program to set each screen line to the luminance of your choice, and how to incorporate this into your own BASIC program. Next month’s feature program is a powerful mailing list keeper (name/address/category) for disk systems with search, editing, and double-width label printing capabilities. It works with either single or double density (DOS 2 or DOS 3). This program is one you won’t want to miss.

Readers’ questions, comments and contributions are welcome. Please enclose a self-addressed stamped envelope (SASE) for a personal reply.

A cassette or diskette of any program listed in this column is available from the author for $5, postpaid. Specify DOS 2 or DOS 3 when requesting a diskette.

Program Perfect is a utility used to check for typing errors in programs entered from this column. Readers may send a SASE for listing.

Address all correspondence to:

Jeff Brenner’s
“Applying The Atari”
c/o Computer Shopper
P.O. Box F
Titusville, FL 32781-9990
PROGRAM 1 
KLJ 30000 REM MULTI-LUMINANCE PROGRAM 
KMJ 30010 REM BY JEFF BRENNER 
CFJ 30020 RESTORE 30070:I=0 
FHJ 30030 READ NUM:IF NUM=-1 THEN 30050 
YDJ 30040 TOT=TOT+NUM+1:POKE 1664+I,NUM:I=I+1:GOTO 30030 
RAJ 30050 IF TOT<>13108 THEN PRINT "ERROR-CHECK PROGRAM":STOP 
HNJ 30060 A=USR(1664):RETURN 
TTJ 30070 DATA 104,173,48,2,133,204,173,49,2,133,205,160,26,169,10 
XPJ 30080 DATA 153,230,6,136,208,250,160,0,177,204,9,128,145,204,160 
UKJ 30090 DATA 3,177,204,9,128,145,204,160,6,177,204,9,128,145,204 
OBJ 30100 DATA 200,192,28,208,245,169,197,141,0,2,169,6,141,1,2 
TPJ 30110 DATA 173,14,212,9,128,141,14,212,96,72,152,72,173,11,212 
TBJ 30120 DATA 201,7,240,18,201,8,240,14,230,204,164,204,185,231,6 
SBZ 30130 DATA 141,23,208,104,168,104,64,169,0,133,204,240,238,-1 
PROGRAM 2 
WQJ 10 REM MULTI-LUMINANCE DEMONSTRATION 
MHJ 20 GRAPHICS 0:GOSUB 30000:RESTORE 50 
EGJ 30 FOR I=1767 TO 1791:READ N:POKE I,N:NEXT I 
OOJ 40 SETCOLOR 2,5,2:POKE 752,1 
NZJ 50 DATA 4,6,8,10,12,14,0,0,0,0,0,0,0,0,0,0,0,0,14,12,10,8,6,4 
KJJ 60 FOR I=0 TO 5:POSITION 19-I,I:PRINT CHR$(8); 
BLJ 70 IF I<>0 THEN FOR J=1 TO I*2:PRINT CHR$(160);:NEXT J 
JRJ 80 PRINT CHR$(10);:NEXT I 
TYJ 90 FOR I=0 TO 5:POSITION 19-I,23-I:PRINT CHR$(138); 
DBJ 100 IF I<>0 THEN FOR J=1 TO I*2:PRINT CHR$(160);:NEXT J 
NMJ 110 PRINT CHR$(136);:NEXT I 
UWJ 120 FOR I=1 TO 4:POSITION 16,(I-1)*3+7:PRINT "CHOICE ";I:NEXT I:CHOICE=1 
EDJ 130 FOR I=1774 TO 1783 STEP 3:POKE I,0:NEXT I 
MIJ 140 POKE 1774+(CHOICE-1)*3,14 
DFJ 150 CONSOL=PEEK(53279):IF CONSOL=7 THEN 150 
PRJ 160 IF CONSOL=5 THEN SOUND 0,100,10,8:CHOICE=CHOICE+1:IF CHOICE=5 THEN CHOICE=1 
PPJ 170 IF PEEK(53279)<>7 THEN 170 
CXJ 180 IF CONSOL<>6 THEN SOUND 0,0,0,0:GOTO 130 
BJJ 190 PRINT CHR$(125):POSITION 6,5 
RWJ 200 PRINT "YOU HAVE SELECTED CHOICE #";CHOICE;"." 
ULZ 210 STOP 
COMPUTER SHOPPER / JUNE 1985 / PAGE 47 

Applying The Atari

by Jeff Brenner

This month we have a handy mailing list program featuring search, editing and double-width label printing capabilities. Well also learn more about last month’s Multi-Luminance program and answer some reader mail.

Programming Tip Correction

M. Rose’s programming tip printed in April’s column (page 56) said to SAVE a renumbered program from Microsoft BASIC and then ENTER it back in with Atari BASIC. However, as several readers keenly discovered, in order for Atari BASIC to read the program, Microsoft BASIC must have saved the program in an untokenized format. The LIST command, not the SAVE command, must be used for the program to be stored on disk or cassette in the untokenized form. The corrected procedure for using Microsoft BASIC to renumber a program written in Atari BASIC follows:

First, LIST your Atari BASIC program on cassette or diskette. Boot up with Microsoft and LOAD the program. Execute the RENUM command and LIST the renumbered program back to cassette or diskette (LIST“C:” or LIST“D:filename”). Then ENTER the program back in with Atari BASIC. Microsoft will renumber all Atari BASIC statements with line numbers except for the TRAP statement.

Reader Mail

I hesitate buying disk programs that can’t be copied. If I pay that kind of money for a program, then I feel that I should have the right to make a backup copy, as I did with my DOS 3. If you are familiar with a method that will produce backups, please let me know.

Elwood Ethridge
Georgetown, SC

For making backup copies without expensive disk drive modifications, independent diskette duplicating machinery, and the like, I can only recommend that you try using the “Duplicate File” option from DOS. Today’s computer software for the Atari is highly protected from most copying schemes, and the majority of so called “copy programs” that I have tested in the past are not any more successful than DOS in making backups.

A program’s ability to be copied should not be of consequence when deciding whether or not to purchase the program. In many cases, the better a program is, the more difficult it is to copy, since the manufacturer puts more work into protecting it.

I have always supported manufacturers’ use of copy-protection methods except in cases where the legitimate user is inconvenienced.

Software piracy makes copy-protection a necessity. Indeed, piracy has contributed to the decline in good software titles being released for the Atari today. It is also responsible for the high cost of new computer programs. Ultimately, copy-protection is in the best interests of both the software manufacturers and the legitimate users.


MAILING LIST PROGRAM 

ADD NAMES 

EDIT 

PRINT 

LIST NAMES 

FREE DISK MEMORY 

SELECT: 

Figure 1 
EDIT 


Computer Shopper         
FULL NAME 

P.O. BOX F               
ADDRESS 

Titusville, FL 32781     
CITY/STATE/ZIP 

MAGAZINE 
CATEGORY 


SEARCH FOR WHAT NAME?Shopper 
FOUND 
PRESS > TO MOVE FORWARD 
PRESS < TO MOVE BACKWARD 
PRESS ESC FOR MENU 

Figure 2 

As a former owner of an Atari 800 system who has recently purchased an Atari 800XL, I am very upset with the lack of documentation included with the XL. My 800, I recall, came with a manual describing the BASIC commands and other useful information. My XL, however, included basically a set-up guide and that’s all. I am mainly interested in learning about the POKEs and the PEEKs unique to the XL but don’t want to start spending hundreds of dollars on books. I hope you can include this topic in your column. I think many of your other readers would also appreciate this information on the XL.

Douglas Mann
Santa Rosa, CA

As the price of Atari computers declined, so did the amount of documentation included with the machines. This is unfortunate, but don’t fear… Next month I’ll list some of the important memory locations on the XL and how to use them.

More on Multi-Luminance

Those of you who entered last month’s Multi-Luminance program might be interested in adding this attractive shading capability to your own BASIC programs and Graphics 0 screens. The sample application program demonstrated two of the many uses of the simultaneously displayed screen tints. It printed a menu, bordered on top and bottom by triangles composed of varying shades of color. This makes for a truly appealing display, otherwise unattainable without the use of the display list interrupts employed by the Multi-Luminance routine. The menu operation further illustrates this ability to mix luminances on the screen by highlighting the selected option.

To use the Multi-Luminance program in your own BASIC program, your program must first GOSUB 30000 to initialize the routine. The routine must be reinitialized after a GRAPHICS statement, and therefore a GOSUB 30000 should follow every GRAPHICS 0 command.

The luminance values are stored in memory locations 1767 through 1790, one location for each line of the screen. There are eight possible luminance levels ranging from zero through 14 on every even number (two, four, six, and so forth). Upon initialization, all locations are loaded with a luminance level of ten, the value that is normally used for the GRAPHICS 0 display.

Let’s try changing some luminances. Enter the Multi-Luminance program (Program 1 of last month) and type GOSUB 30000. When you get the READY prompt, type:

POKE 1767,0 

This will set characters on the first line of the screen to the lowest intensity. This corresponds to the command, SETCOLOR 1,0,0, but affects only the line controlled by location 1767 — the first line. Now when you type or print on the first line, the characters will be darker than those on the other lines of the screen.

The following formula can be used to set a specific line of the screen to a certain luminance, where LINE is the line of the screen (zero through 23) and TINT is the luminance value (zero through 14, even numbers):

POKE 1767+LINE,TINT 

Note that the first line of the display is numbered line zero; the second line, line one; etc.

Dynamic luminance changes are possible as well. Type in this example and RUN it:

10 FOR I=0 TO 23 
20 POKE 1767+I,PEEK(20) 
30 NEXT I 
40 GOTO 10 

Have fun with the Multi-Luminance routine. If you dream up any fascinatingly unique applications for this program, please write and tell us about it.

Mailing List Program

This month’s feature program, Mailing List, is our longest one ever — over 130 lines. It’s a program that stores names and addresses, allows user categorization, searches by name, and prints by category on mailing labels. You’ll truly appreciate this program whenever you have to send anything to anybody — greeting cards to friends and relatives, letters to clientele, etc. In future months, we might add additional routines to this program to make it even more powerful.

Disk Drive Required

Since Mailing List relies extensively on random access storage, a disk drive is needed.

Random access means that any portion of the data can be read at any time. In the mailing list program, random access allows the program to read one of the last names on the disk, and then go back and read one of the first names if necessary.

Names on a cassette tape can only be read sequentially, or in the order in which they were saved on the tape. For searching or editing to be feasible, all of the data on cassette would have to be loaded into the computer memory and then resaved when operations on the data were finished. This would limit the amount of data storage to the amount of memory remaining in the computer.

Even if the memory limitations are of no concern to you, the cassette recorder is far too slow for comfortable mailing list work.

The Program

Type in Mailing List. It is highly recommended that you use Program Perfect to enter this one, since there is a great chance for error. When you’ve entered the entire program, SAVE it to diskette. (See the end of this article for information on Program Perfect and on purchasing a diskette of Mailing List. Since Mailing List stores its data on diskette. You might want to insert a blank, formatted diskette into the disk drive before running the program. This will let you store the greatest number of names and addresses. This disk will be referred to as the data disk. You can use the disk on which you’ve saved the program, if you really want to, but you’ll have less room remaining for storage.

Now RUN the program. Figure 1 shows the menu screen that is displayed if everything is working properly.

Adding Names

Naturally, little can be done with a mailing list program without the names and addresses. Hence, the first thing you’ll want to do is select the ADD NAMES option. Press A for this operation. A data file will be created on the diskette. In a few seconds you’ll be on the ADD DATA screen.

If you want to use both upper and lower case letters for your mailing list, press the CAPS/LOWR key (or the CAPS key on the XL/XE) before you start typing. Don’t use all capitals for some names and a combination of capitals and lower case for others or you’ll run into problems when searching for a name. A maximum of 32 characters can be typed for each data line. The CTRL (CONTROL on the XL/XE) and arrow keys can be used to move the cursor around to change anything you have typed. Use the BACK SPACE and CONTROL-INSERT keys for their respective, one-character operations. To delete an entire line, use SHIFT-DELETE. The inverse video and graphics characters cannot be typed so as to facilitate the use of the search feature and also because the majority of printers cannot print these characters.

Now type in a name and press RETURN. Next type in the street address, press RETURN, and enter the city, state and zip code.

The next line is the category. Up to eight characters can be entered as a category name to classify the name you have entered. Later, names can be printed out according to category. For example: You can classify your relatives as RELATIVE, and your clients as CLIENT. Then, to invite your relatives to a get-together, you would specify the RELATIVE category when printing labels. To send out information to your clientele, you would specify the CLIENT category.

You could put the category name to good use in a birthday-oriented mailing list: All acquaintances with a birthday in, say, March, would be given the name MARCH as a category. Then, just before March comes around, you could print out labels with the names and addresses of those with a birthday in that month. Stick the labels on some card envelopes and no more late or forgotten birthdays! As you can see, this program’s ability to categorize is an extremely practical and versatile feature.

After you’ve typed the category, press RETURN. You’ll get a “MORE NAMES (Y/N)?” prompt. If you’ve got more names to enter, press Y and type them in, otherwise press N to get back to the menu.

Editing

Once you’ve built your mailing list, you might have to go back to change some entries, especially if you’ve discovered a typographical error or someone has changed his address. Press E for the Edit screen.

On the Edit screen you’ll get a “CYCLE OR SEARCH (C/S)?” prompt. Press C if you want to cycle back and forth among the various entries. The “<” and “>” keys are used to move backwards and forwards, respectively. Attempting to go beyond the last entry will give you a nasty “LAST NAME IN FILE” message, while trying to move ahead of the first entry will give you a “FIRST NAME IN FILE” message. At any point, you can use the editing keys to change an entry. The changes will automatically be recorded on disk.

Deleting a name is accomplished by changing the category of the name to DELETED. The name isn’t actually deleted (thus you can reinstate it at a later time if necessary) but it is ignored when printing out labels. You can replace a name in the DELETED category with a new name if you so desire, but be sure to change the category name.

Press ESC when you’ve finished making changes and you’ll be returned to the menu screen.

Search Feature

Pressing S for the “CYCLE OR SEARCH” prompt lets you search for a name. You’ll be asked whether you want to “SEARCH BY FULL NAME OR LAST (F/L)?”; Press F to search for an entire name, or for any portion of the beginning of the full name. For example: to find our editor-in-chief, Stan Veit, we could search for “Stan Veit” or, if there’s only one Stan in our list, we could search for “Stan.” If we are using only capital letters, then we’d search for “STAN.” (Now you can see why it is important to be consistent with the use of either all capitals, or both capitals and lower case.)

Your other option is to search for the last name (Press L). This time, to find Stan, we’d enter “VEIT.” Figure 2 shows how we can find “Computer Shopper” by searching for “Shopper.”

Once you find the name you’ve searched for, you can make changes in the data with the editing keys, or you can use the “<” and “>” keys to move to see (and change if desired) the data preceding and following the displayed data.

Printing The Names

Now for the fun stuff. Of course, you’ll need a printer — any land will do. Position your mailing labels in your printer. If you are using double-width labels (two labels horizontally) then press 2 for the “NUMBER OF LABELS ACROSS (1/2)?” prompt, otherwise press 1. Next you’ll be asked to input the spacing between horizontal labels (if you have two labels across) and the spacing between vertical labels. Six and four are the values for these inputs, respectively, for labels of standard size and spacing. If you are using labels of other sizes, you should experiment to find the correct values for proper printing.

Mr. J. Smith 
100 Disk Drive 
Baltimore, MD 21219 

Mrs. C. Douglas 
100 RAM Road 
Pawcatuck, CT 06379 

Mr. B. Rogers 
100 BASIC Blvd. 
Floral Park, NY 11004 

Ms. S. Jackson 
100 POKE Place 
Lima, OH 45805 

Mr. E. Carson 
100 LIST Lane 
Burlington, IA 52601 

Figure 3 

Once all spacing has been set, you’re asked which category to print out. If you want to print every name and address on the data disk, regardless of its category (except for those marked DELETED), enter “ALL,” otherwise type the specific category of the names you want printed (i.e. “CLIENTS”). When the “PRESS RETURN WHEN READY” prompt appears, press RETURN and your labels will be printed. Figure 3 shows a sample output.

List Names

For a simple list of the names stored on the data disk, press L on the menu. Only the names, not the addresses, will be printed. Those names that have been deleted will also be printed, but they will be preceded by an asterisk (*).

Free Disk Memory

This will tell you how many sectors or blocks are remaining on your diskette. When this number becomes very low, you are running out of room and should begin using an additional diskette. Incidentally, the data diskette should only be changed when on the main menu screen so that the proper files will be opened on the new disk.

Next Month

We’ll get into more detail on Mailing List, look at some POKEs and PEEKs on the XL, learn how to add a numeric keypad to the Atari, enter a new program called ATASCII Lister, and (whew!) look at some more reader mail.

Readers questions, comments and contributions are welcome. Please enclose a self-addressed, stamped envelope (SASE) for a personal reply.

A cassette or diskette of any program listed in this column is available from the author for $5.00, postpaid. Specify DOS 2 or DOS 3 when requesting a diskette.

Program Perfect is a utility used to check for typing errors in programs entered from this column. Readers may send a SASE for a listing or $5.00 for a cassette or diskette.

Address all correspondence to:

Jeff Brenner’s
“Applying The Atari”
c/o Computer Shopper
P.O. Box F
Titusville, FL 32781-9990
MAILING LIST 

UIJ 10 REM MAILING LIST PROGRAM 
KFJ 20 REM COPYRIGHT 1985 JEFF BRENNER 
WQJ 30 DIM NAME$(32),ADDR$(32),CSZ$(32),CAT$(8),Q$(1),KB$(255),SP$(32),L$(1) 
QMJ 40 DIM NAME2$(32),ADDR2$(32),CSZ2$(32),CAT2$(8),NUL$(1) 
BHJ 50 SP$(1)=CHR$(32):SP$(32)=CHR$(32):SP$(2)=SP$:L$=CHR$(155) 
VRJ 60 KB$(1)=CHR$(0):KB$(255)=CHR$(0):KB$(2)=KB$:RESTORE 80 
XNJ 70 KB$(30)="K":KB$(122)="K":KB$(31)=KB$(30):KB$(60,60)=SP$:KB$(62,62)=SP$ 
LFJ 80 FOR I=1 TO 7:READ J:KB$(J,J)="K":NEXT I:DATA 95,155,156,126,127,254,255 
EBJ 90 DIM A$(110),B$(2),C$(1),FILE$(30),FILE2$(30),E$(2) 
QHJ 100 E$=CHR$(156):E$(2,2)=CHR$(157):FILE$="D:FILE.DAT":FILE2$="D:POINT.DAT" 
CYJ 110 B$=CHR$(30):B$(LEN(B$)+1)=CHR$(31) 
KIJ 120 OPEN #1,4,0,"K:":OPEN #3,4,0,"E:":OPEN #4,9,0,"E:" 
RVJ 130 CLOSE #5:CLOSE #2:PRINT CHR$(125);"MAILING LIST PROGRAM":POKE 84,4 
QZJ 140 RESTORE 160:FOR I=1 TO 5:READ A$:PRINT CHR$(ASC(A$)+128);A$(2,LEN(A$)) 
LEJ 150 PRINT :PRINT :NEXT I 
WDJ 160 DATA ADD NAMES,EDIT,LIST NAMES,PRINT,FREE DISK MEMORY 
RAJ 170 POKE 694,0:POKE 702,64:PRINT CHR$(156);"SELECT: ";:GET #1,A 
RGJ 180 RESTORE 150:FOR I=1 TO 6:READ A$:IF ASC(A$)<>A THEN NEXT I:GOTO 170 
UEJ 190 PRINT CHR$(125); 
QKJ 200 FOR J=1 TO LEN(A$):PRINT CHR$(ASC(A$(J))+128);:NEXT J:PRINT :PRINT 
QXJ 210 PRINT :ON I GOTO 230,650,1040,1120,1350 
CPJ 220 POKE 85,2:FOR I=1 TO 32-(J=4)*24:PRINT CHR$(13);:NEXT I:POKE 85,2:RETURN 
PCJ 230 TRAP 250:OPEN #2,9,0,FILE$:OPEN #5,4,0,FILE2$:TRAP 40000:INPUT #5;S,B 
WVJ 240 CLOSE #5:GOTO 280 
QYJ 250 IF PEEK(195)<>170 THEN PRINT "ERROR #";PEEK(195):GOTO 1020 
BPJ 260 CLOSE #2:B=-1:S=-1:OPEN #2,8,0,FILE$:CLOSE #2:OPEN #2,8,0,FILE2$ 
SBJ 270 PRINT #2;S;L$;B;L$:CLOSE #2:GOTO 230 
SMJ 280 GOSUB 290:EDIT=0:GOTO 320 
MSJ 290 POKE 84,6:RESTORE 310:FOR J=1 TO 4:GOSUB 220 
WPJ 300 READ A$:GOSUB 640:PRINT A$:PRINT :PRINT :NEXT J:GOSUB 1030:RETURN 
GRJ 310 DATA FULL NAME,ADDRESS,CITY/STATE/ZIP,CATEGORY 
OKJ 320 X=0:POKE 84,5:PRINT B$;:Y=PEEK(84) 
OZJ 330 POKE 694,0:CC=CC+1:M=0:IF PEEK(84)=14 THEN M=24 
ODJ 340 GET #1,K:IF KB$(K,K)="K" AND PEEK(85)<34-M+(K=155) THEN PRINT CHR$(K); 
OZJ 350 IF K>64 AND K<123 THEN 330 
HFJ 360 IF K=27 AND EDIT=1 THEN RETURN 
SJJ 370 IF K=27 THEN 130 
YTJ 380 IF (K=60 OR K=62) AND EDIT=1 THEN TRAP 880:RETURN 
KLJ 390 IF PEEK(85)>34-M THEN POKE 85,34-M:PRINT B$; 
OOJ 400 IF (K=126 OR K=30) AND PEEK(85)=34-M THEN POKE 85,34-M:PRINT CHR$(K); 
RVJ 410 Y=Y-(K=28)*3:Y=Y+(K=29)*3:Y=Y+(K=155)*3:IF Y<4 OR Y>14 THEN Y=PEEK(84) 
BZJ 420 IF Y<>PEEK(84) THEN POKE 84,Y:PRINT B$; 
KTJ 430 IF PEEK(84)=14 AND PEEK(85)>10 THEN POKE 85,10:PRINT B$; 
ULJ 440 IF K<255 THEN 460 
ATJ 450 X=PEEK(85):POKE 85,34-M:PRINT CHR$(254);:POKE 85,X:PRINT B$; 
CLJ 460 IF K=156 THEN PRINT CHR$(157); 
TDJ 470 IF PEEK(84)=15 AND EDIT THEN GOTO 320 
QHJ 480 IF PEEK(84)=15 THEN NAME$=SP$:ADDR$=SP$:CAT$=SP$:CSZ$=SP$:GOTO 500 
BSJ 490 GOTO 330 
YYJ 500 POKE 84,5:INPUT #4;NAME$:POKE 84,8:INPUT #4;ADDR$ 
XZJ 510 POKE 84,11:INPUT #4;CSZ$:POKE 84,14:INPUT #4;CAT$ 
NEJ 520 IF LEN(NAME$)<32 THEN NAME$(32)=SP$ 
MTJ 530 IF LEN(ADDR$)<32 THEN ADDR$(32)=SP$ 
JMJ 540 IF LEN(CSZ$)<32 THEN CSZ$(32)=SP$ 
EFJ 550 IF LEN(CAT$)<8 THEN CAT$(8)=SP$ 
DJJ 560 IF EDIT=1 THEN POINT #2,IS,IB 
GGJ 570 NOTE #2,S1,B1:PRINT #2;S;L$;B;L$;NAME$;L$;ADDR$;L$;CSZ$;L$;CAT$ 
MNJ 580 IF EDIT=1 THEN RETURN 
EWJ 590 S=S1:B=B1 
EUJ 600 POKE 84,21:PRINT "MORE NAMES (Y/N)?";:GET #1,Q:IF Q=89 THEN 630 
WWJ 610 OPEN #5,8,0,FILE2$:PRINT #5;S;L$;B;L$;:NOTE #2,S,B 
OIJ 620 PRINT #5;S;L$;B;L$:CLOSE #5:CLOSE #2:GOTO 130 
QOJ 630 PRINT CHR$(125);:GOTO 280 
DLJ 640 FOR I=1 TO LEN(A$):A$(I,I)=CHR$(ASC(A$(I,I))+128):NEXT I:RETURN 
BSJ 650 TRAP 670:OPEN #2,12,0,FILE$:NOTE #2,IS,IB:TRAP 40000 
QYJ 660 CLOSE #5:OPEN #5,4,0,FILE2$:INPUT #5;FS,FB,FS,FB:GOTO 680 
PHJ 670 PRINT "ERROR #";PEEK(195):GOTO 1020 
FNJ 680 POKE 84,19 
RJJ 690 PRINT "CYCLE OR SEARCH (C/S)?";:GET #1,Q:IF Q=83 THEN SE=1:GOTO 720 
LTJ 700 PRINT CHR$(Q);:IF Q<>67 THEN PRINT CHR$(156);:GOTO 680 
LGJ 710 PRINT :SE=0 
KQJ 720 IF SE=1 THEN GOSUB 890 
WEJ 730 PRINT "PRESS > TO MOVE FORWARD":PRINT "PRESS < TO MOVE BACKWARD" 
EOJ 740 GOSUB 290 
FDJ 750 ST=IS:BT=IB:NOTE #2,IS,IB:INPUT #2;S,B,NAME$,ADDR$,CSZ$,CAT$ 
DJJ 760 POKE 85,2 
RXJ 770 POKE 84,5:PRINT NAME$:POKE 84,8:PRINT ADDR$:POKE 84,11:PRINT CSZ$ 
IUJ 780 POKE 84,14:PRINT CAT$ 
EWJ 790 POKE 84,3:PRINT SP$ 
IOJ 800 CC=0:EDIT=1:GOSUB 320 
HNJ 810 IF CC>1 THEN POKE 85,2:POKE 84,15:PRINT B$;:GOSUB 480 
SJJ 820 IF K=27 THEN 130 
ECJ 830 IF K=60 AND (S>=0 OR B>=0) THEN POINT #2,S,B:GOTO 750 
JTJ 840 IF K=62 THEN NOTE #2,S1,B1:IF S1<>FS OR B1<>FB THEN 750 
NCJ 850 IF K=62 THEN A$="LAST NAME IN FILE":GOTO 1010 
NKJ 860 IF K=60 AND S+B<0 THEN A$="FIRST NAME IN FILE":GOTO 1010 
BWJ 870 GOTO 800 
PFJ 880 TRAP 40000:PRINT "ERROR #";PEEK(195):GOTO 1020 
ROJ 890 POKE 85,2:PRINT E$;"SEARCH BY FULL NAME OR LAST (F/L)?"; 
OAJ 900 GET #1,Q:IF Q<>76 AND Q<>70 THEN 890 
IHJ 910 POKE 85,2:PRINT E$;"SEARCH FOR WHAT NAME";:INPUT A$ 
OVJ 920 POINT #2,IS,IB:TRAP 1000 
OQJ 930 NOTE #2,ST,BT 
OCJ 940 INPUT #2;S,B,NAME$,ADDR$,CSZ$,CAT$ 
IEJ 950 IF Q=70 THEN IF NAME$(1,LEN(A$))<>A$ THEN 930 
TGJ 960 IF Q=70 THEN 990 
NGJ 970 FOR I=1 TO LEN(NAME$):IF NAME$(I,I)<>CHR$(32) THEN NEXT I:GOTO 930 
IJJ 980 TRAP 930:IF NAME$(I+1,I+LEN(A$))<>A$ THEN 930 
YTJ 990 PRINT "FOUND":POINT #2,ST,BT:RETURN 
BOJ 1000 PRINT "NOT FOUND":GOTO 1090 
UVJ 1010 POKE 85,2:POKE 84,3:GOSUB 640:PRINT A$:GOTO 800 
FMJ 1020 FOR I=1 TO 500:NEXT I:GOTO 130 
IRJ 1030 POKE 84,23:A$="PRESS ESC FOR MENU":GOSUB 640:PRINT A$;:POKE 85,2:RETURN 
IHJ 1040 TRAP 1090:OPEN #2,4,0,FILE$:OPEN #5,4,0,FILE2$:INPUT #5;I,I,FS,FB 
SIJ 1050 NOTE #2,S,B:INPUT #2;I,I,NAME$,ADDR$,CSZ$,CAT$ 
UYJ 1060 IF CAT$(1,7)="DELETED" THEN PRINT "*"; 
UWJ 1070 PRINT NAME$:IF PEEK(764)=28 THEN 1100 
FGJ 1080 GOTO 1050 
BRJ 1090 PRINT :GOSUB 1030 
TJJ 1100 GET #1,Q:IF Q<>27 THEN 1100 
DCJ 1110 GOTO 130 
OEJ 1120 NAME$=NUL$:NAME2$=NUL$ 
FBJ 1130 PRINT E$;"NUMBER OF LABELS ACROSS (1/2)?";:GET #1,Q:? CHR$(Q); 
PHJ 1140 IF Q<49 OR Q>50 THEN 1120 
FQJ 1150 Q=Q-49:PRINT :IF Q=0 THEN 1170 
QCJ 1160 PRINT :PRINT "SPACING BETWEEN HORIZONTAL":PRINT "LABELS (6)";:INPUT HS 
JVJ 1170 PRINT :PRINT "SPACING BETWEEN VERTICAL":PRINT "LABELS (4)";:INPUT VS 
OVJ 1180 CAT2$=SP$:PRINT :PRINT "CATEGORY (ALL)";:INPUT CAT2$ 
VDJ 1190 IF CAT2$<>"ALL" THEN IF LEN(CAT2$)<8 THEN CAT2$(8,8)=CHR$(32) 
SSJ 1200 PRINT :PRINT "TURN PRINTER ON AND POSITION LABELS." 
FPJ 1210 A$="PRESS RETURN WHEN READY":GOSUB 640:PRINT A$; 
UVJ 1220 INPUT #1;A$:OPEN #5,8,0,"P:" 
TZJ 1230 TRAP 1330:OPEN #2,4,0,FILE$ 
PSJ 1240 INPUT #2;S,B,NAME$,ADDR$,CSZ$,CAT$ 
BRJ 1250 IF CAT2$<>"ALL" AND CAT$<>CAT2$ THEN 1240 
FRJ 1260 IF CAT$(1,7)="DELETED" THEN 1240 
XYJ 1270 IF Q=0 THEN NAME2$=NAME$:ADDR2$=ADDR$:CSZ2$=CSZ$:GOTO 1290 
VUJ 1280 IF LEN(NAME2$)=0 THEN NAME2$=NAME$:ADDR2$=ADDR$:CSZ2$=CSZ$:GOTO 1240 
LRJ 1290 PRINT #5;NAME2$;:IF Q THEN PRINT #5;SP$(1,HS);NAME$;:NAME$=NUL$ 
TKJ 1300 PRINT #5;L$;ADDR2$;:IF Q THEN PRINT #5;SP$(1,HS);ADDR$;:NAME2$=NUL$ 
LOJ 1310 PRINT #5;L$;CSZ2$;:IF Q THEN PRINT #5;SP$(1,HS);CSZ$; 
FLJ 1320 FOR I=1 TO VS:PRINT #5:NEXT I:GOTO 1240 
VRJ 1330 IF LEN(NAME$)*LEN(NAME2$)*Q=0 THEN 130 
PSJ 1340 NAME$=NUL$:TRAP 1330:Q=0:GOTO 1290 
WFJ 1350 OPEN #5,6,0,"D:*.*" 
XCJ 1360 INPUT #5;A$:IF A$(1,1)=CHR$(32) THEN 1360 
DSZ 1370 PRINT A$:GOTO 1090 

[END OF LISTING] 
COMPUTER SHOPPER / JULY 1985 / PAGE 57 

Applying The Atari

by Jeff Brenner

In store for this month is a routine for using a numeric keypad, some much needed info of PEEKs and POKEs on the XL, and a printer utility called ATASCII Lister. But first, let’s look at some readers’ questions...

Reader Mail

Q. I have recently become the proud owner of the Atari 800XL, an Atari 1050 disc drive and an Okimate 10 printer. I purchased the Synapse series, Syncalc, Synfile and Syntrend and this is where my problem lies. My Okimate 10 printer will not print the graphs in the Syntrend program. Mechanically the printer is sound but apparently it is incompatible with the program.

Although Okidata has not responded to my questions, Synapse has told me “You can print your graphs on the Okimate if you use a screen dump program for the Okimate that works with Graphics Mode 8 disk files—possibly available from Okidata.” I called Okidata and they have never heard of “Graphics Mode 8 disk files” and neither have I. However, in an advertisement I did see an ad for “Printwiz” which seems to be what I am looking for, but I am not sure. Is this the answer or is there something else, and if there is what is it?

Robert Lavoie
Chicopee, MA

A “Graphics Mode 8 disk file” is the data of a Graphics 8 screen which has been saved on disk. Therefore, to print Syntrend graphs, you can save the screens to disk and then use a dump program to print the disk files.

While Printwiz, ($29.95 from Allen Macroware, P.O. Box 2205, Redondo Beach, CA 90278, 213-376-4105) is advertised to work with Okidata printers, this does not necessarily mean it is compatible with the newer Okimate printers. Remember, Okidata makes and has made many other printer models besides its new Okimate color units. To find out for sure, I contacted Jerry Allen of Allen Macroware. Allen said that the program seems to work with the Okimate 10 and 20, although it was not specifically designed for those units. He assured me that a fully compatible version would be available by May (1985), which means it should be out by the time you read this.

If you decide to purchase this program, I suggest you enclose a note with your order describing exactly what you need it for: printing the graphs from Syntrend on an Okimate 10.

I have requested an Okimate manual from Okidata and hopefully I’ll be able to publish a Graphics 8 disk file printer dump in a future column. If you can’t wait, though, Printwiz looks like it should help you. In addition to its screen dump capability, the program offers several other useful features.


Q. I’m new to Atari and to Computer Shopper and it’s good to have published resources and personal replies to questions. One question that may be useful to all your readers: For those of us who have invested in the Atari touch tablet (for its more appropriate features for the Atari, as opposed to the Koala), we now find there is no new software (despite earlier rumors) and there are no published listings for incorporating it into our BASIC (or other) programs. How can I program the Touch Tablet into my own programs and other graphic modes? It would be extremely useful if the touch tablet could be made to work with graphics software such as Reston’s Movie Maker and Epyx’s Fun with Art. Is it possible to do this with the touch tablet?

Lattie Smart
Havre de Grace, MD

Q. I was wondering if you know the code of an Atari touch tablet. For example, a joystick code is A=STRIG(0). Could you please give information on the touch tablet code?

Charles Flanders
Ottuma, IA

The touch tablet can be read as if it were two paddles, with PADDLE(0) and PADDLE(1). As you move the stylus horizontally over the pad, PADDLE(0) changes; vertically, PADDLE(1) changes. The values of PADDLE(0) and PADDLE(1) range from 0 through 228. When the stylus is removed from the tablet, both values are zero. The touch tablet buttons can be read in a similar manner as they correspond to the paddles’ triggers. PTRIG(0) or PTRIG(1) returns a value of zero when the corresponding button is depressed, and a value of one when it is not depressed.

By multiplying or dividing PADDLE(0) and PADDLE(1) and subtracting an offset value from them, you can make the pad “fit” into any graphics mode screen.

Since the touch tablet is an extremely sensitive device, the values of PADDLE(0) and PADDLE(1) will often vary slightly even while the stylus is held at one point on the pad. This same effect occurs with a paddle or a light pen. To compensate for this, you must choose a threshold level of movement, below which any movement is ignored. This threshold level is the least value that PADDLE(0) and PADDLE(1) must change by before the movement is recorded on the screen. This usually involves storing the previous PADDLE values, and then checking them against the new values. For example, if you decide on a threshold of five, you might use a program segment as follows:

10 IF ABS(OLDPAD0-PADDLE(0))>=5 THEN GOTO 60 
20 IF ABS(OLDPAD1-PADDLE(1))>=5 THEN GOTO 60 
30 OLDPAD0=PADDLE(0):REM Did not make threshold; store old values. 
40 OLDPAD1=PADDLE(1) 
50 GOTO 10:REM Go back and try again. 
60 REM Routine to plot the changes would go here. 

Lines 10 and 20 check if the difference between either of the new PADDLE values and the corresponding old values (stored in the OLDPAD variables) are at least five. If this minimum is achieved, the plotting is performed. Otherwise, the new PADDLE values become the old values and the program attempts to read the tablet again.

I don’t have room this month, but in a future column I’ll list a complete touch tablet routine in BASIC.

Regarding the use of the touch tablet with other software, programs not specifically designed for the touch tablet generally will not work with it. The touch tablet is a much more complicated device than the joystick and hence requires a more elaborate routine to incorporate it into software. However, programs which are compatible with game paddles can be used with the touch tablet; horizontal and vertical motion on the tablet correspond to the rotation of the first and second paddles, respectively. This is not to say that the touch tablet can effectively replace the paddles; indeed, in most cases, the tablet will be terribly cumbersome to use in place of the paddles.

Typesetter Update

In the November 1984 issue of Computer Shopper I reviewed Typesetter. I gave it a two-star overall rating (fair), and among my many comments were that users should be able to design their own typefaces and that the program should support the higher resolution modes available on the current Epson, Gemini, and compatible printers. Sure enough, the manufacturer (DataArts Software, P.O. Box 1613, Troy, NY 12181) has released a font editor ($24.95) and a new double-density version of Typesetter ($29.95). If you’ve already purchased the lower density version, you can get an update from DataArts for $9.95.

Typesetter offers a variety of additional typefaces (at $11.95 for 5) and has an advantage over The Print Shop ($44.95 from Broderbund Software, 17 Paul Drive, San Rafael, CA 94903) in that it can print lower case characters. Therefore, it is better suited for some applications. But for ease-of-use and specific applications such as printing greeting cards, banners and signs, The Print Shop is hard to beat.

Numeric Keypad

Many readers took advantage of a recent B.G. Micro advertisement in Computer Shopper which offered Atari numeric keypads for $7.95. Considering that the keypad originally sold for over ten times the price, this is a great buy. If you can still get one at this price and haven’t gotten one yet…GET ONE! There is a catch, however; no supporting software or documentation is included except for a schematic and a truth table. Fortunately, I’m here to make it easier for you to apply your Atari, and a numeric keypad is often a welcomed convenience when programming. So get out your Atari CX85 Numeric Keypad, plug it into Port 1, enter the program listed under Program 1, save it, press SYSTEM RESET, and run it! It is necessary to press SYSTEM RESET at any time before the program is run to properly initialize the joystick port.

When you run this BASIC program, it incorporates a machine language program into the Atari’s vertical blank routine, which is executed each time a screen frame is drawn, or 60 times per second. The machine language program decodes any key pressed on the keypad. It then makes the Atari think that the key has been pressed on the keyboard by storing an appropriate value into the keyboard register at location 764. As a result, the keypad functions like your Atari keyboard, except a key pressed on the keypad will not repeat when held down. The YES and NO keys return Y and N respectively, and the +/RETURN key is interpreted as the RETURN key. DELETE is used to back space, and ESCAPE functions like the Atari ESC key.

Once you’ve run Program 1, you can erase it from memory with NEW and proceed with your own BASIC programming. The keypad will be active. If SYSTEM RESET is pressed, it will be necessary to reinitialize the keypad program by typing A=USR(1536).

Program 2 contains the same program except when the YES key is pressed, a comma is printed instead of a Y. You’ll truly appreciate this when entering many lines of data statements. With your right hand on the keypad you can type in the line number, use your left hand to type DATA on the regular keyboard, and use your right hand again to type the numbers, commas and RETURN. Next month you’ll learn how to redefine any key on the numeric keypad.

PROGRAM 1 
FMJ 10 REM NUMERIC KEYPAD PROGRAM #1 
KFJ 20 REM COPYRIGHT 1985 JEFF BRENNER 
JWJ 30 TOT=0:FOR I=1536 TO 1607:READ NUM 
OOJ 40 POKE I,NUM:TOT=TOT+I+NUM:NEXT I 
KQJ 50 IF TOT=120212 THEN A=USR(1536):END 
FBJ 60 PRINT "ERROR - CHECK DATA":END 
LCJ 70 DATA 104,162,006,160,011,169 
LUJ 80 DATA 007,032,092,228,096,174 
LAJ 90 DATA 016,208,240,006,202,134 
MWJ 100 DATA 204,076,051,006,165,204 
MIJ 110 DATA 240,002,208,023,230,204 
MJJ 120 DATA 173,000,211,041,015,170 
MBJ 130 DATA 173,001,210,201,001,240 
NCJ 140 DATA 002,162,016,189,054,006 
NLJ 150 DATA 141,252,002,076,098,228 
NAJ 160 DATA 052,024,029,027,035,051 
MWJ 170 DATA 053,048,043,031,030,026 
NMZ 180 DATA 050,034,012,014,028,155 
PROGRAM 2 
FNJ 10 REM NUMERIC KEYPAD PROGRAM #2 
KFJ 20 REM COPYRIGHT 1985 JEFF BRENNER 
JWJ 30 TOT=0:FOR I=1536 TO 1607:READ NUM 
OOJ 40 POKE I,NUM:TOT=TOT+I+NUM:NEXT I 
KOJ 50 IF TOT=120201 THEN A=USR(1536):END 
FBJ 60 PRINT "ERROR - CHECK DATA":END 
LCJ 70 DATA 104,162,006,160,011,169 
LUJ 80 DATA 007,032,092,228,096,174 
LAJ 90 DATA 016,208,240,006,202,134 
MWJ 100 DATA 204,076,051,006,165,204 
MIJ 110 DATA 240,002,208,023,230,204 
MJJ 120 DATA 173,000,211,041,015,170 
MBJ 130 DATA 173,001,210,201,001,240 
NCJ 140 DATA 002,162,016,189,054,006 
NLJ 150 DATA 141,252,002,076,098,228 
NAJ 160 DATA 052,024,029,027,035,051 
MUJ 170 DATA 053,048,032,031,030,026 
NMZ 180 DATA 050,034,012,014,028,155 

XL Pokes and Peeks

As I promised last month, I’m including a list of a few PEEKs and POKEs unique to the XL. Table 1 shows whether the location is generally PEEKed or POKEd, the values to POKE and their effects or the meaning of values which are PEEKed. We’ll get into the more complicated PEEKs/POKEs in future months.

SELECTED PEEKS AND POKES FOR THE XL
PEEK/POKE LOCATION(S) NAME VALUE=EFFECT/MEANING
PEEK/POKE 621 KEYDIS 55 =Keyboard use disabled.
0 =Keyboard use enabled.
POKE 622 FINE 255=Prepare for fine scrolling.
0=Prepare for normal scrolling.
Takes effect after GRAPHICS 0 command.
PEEK/POKE 731 NOCLIK 255=Keyboard click disabled.
0 =Keyboard click enabled.
PEEK 732 HELPFG 17=Help key pressed.
Clear with POKE 732,0 after reading.
PEEK/POKE 756 CHBAS 224=Normal character set.
204=International character set.
“Table 1”

ATASCII Lister

Listing BASIC programs to the printer can present a problem to the programmer, especially when the program is written in Atari BASIC. The reason is that the Atari features numerous non-ASCII characters which can be placed in a program. ASCII characters form the American Standard Code for Information Interchange. Virtually all printers can print the ASCII characters. “ATASCII” is short for Atari ASCII, and includes most of the ASCII characters but also contains Atari’s special characters. These characters include all the control key graphics characters, the inverse video characters, and the cursor control characters. Often a program uses inverse video to highlight words, or a wide variety of characters representing machine language code in a USR statement. When these are listed to the printer, the printer might substitute its own characters for the codes it receives, or it might interpret some of the characters as control codes and do unpredictable things.

The non-printable Atari characters presented a problem to me, as a programmer, when copyrighting Software. To obtain a copyright, the Library of Congress requires, among other things, a listing of the program. (Unfortunately, they don’t deal with disks or cassettes yet.) However, my program was 20% BASIC and 80% machine language stored as characters in USR statements. I needed a routine to print these characters, and thus the ATASCII Lister evolved. It can, of course, be used for any application requiring an exact listing of an Atari program.

The ATASCII Lister uses the high-resolution graphics capability available on most of today’s printers to print the Atari’s characters. It will work with the Epson MX-80, MX-100, FX-80, RX-80, Gemini 10X, 15X or graphics-compatible printer.

10 REM This program listing was generated by ATASCII Lister. 
20 REN Note how all of the Atari's characters can be printed. 
30 REM Even graphics characters are printed: 
40 REM ...... 
50 REM Control characters too: 
60 REM ...... 
"Figure 1" 

Using the Program

Enter the program and SAVE it to cassette or disk. Next, load in the program that you wish to list and LIST it to cassette or disk with the LIST“C” or LIST“D:filename” command. When you SAVE a program, the program is saved in its tokenized form, which means that BASIC words such as PRINT and GOTO saved as single byte codes. By LISTing the program, each character is saved as is (i.e. PRINT is saved as five bytes for the “P,” “R,” “I,” “N,” and “T”), thus making it readable by our ATASCII Lister program.

ATASCII Lister 

EEJ 10 REM ATASCII LISTER 
KFJ 20 REM COPYRIGHT 1985 JEFF BRENNER 
NTJ 30 OPEN #3,8,0,"P:" 
KYJ 40 RESTORE 290:FOR I=0 TO 218:READ N:POKE 1536+I,N:NEXT I 
RJJ 50 DIM N$(15),DN$(17),TMP$(2040),C$(120),D$(1),E$(1),MS$(30):POKE 766,0 
HGJ 60 DN$="D:":OPEN #1,4,0,"E:" 
VVJ 70 PRINT "CASSETTE OR DISK";:INPUT E$:IF E$="C" THEN DN$="C":GOTO 90 
QCJ 80 PRINT "FILENAME: D:";:INPUT #1;N$:IF N$(1,2)="D:" THEN N$=N$(3,LEN(N$)) 
AHJ 90 DN$(LEN(DN$)+1)=N$:OPEN #2,4,0,DN$:GOTO 110 
LIJ 100 PRINT "ERROR #";PEEK(195):GOTO 80 
LZJ 110 TRAP 110:PRINT "DENSITY (1-2) :";:INPUT #1;D:IF D<1 OR D>2 THEN 110 
YZJ 120 RESTORE 120:FOR I=1 TO D:READ C:NEXT I:D$=CHR$(C):DATA 75,76 
HZJ 130 TRAP 130:PRINT "CHARACTERS PER LINE (NORM=38) ";:INPUT #1;CPL 
QFJ 140 CL=CPL*8:H1=INT(CL/256):L1=CL-H1*256 
MQJ 150 TRAP 260:POKE 766,1:INPUT #2;C$:PRINT C$:LN=LEN(C$):C=1 
LVJ 160 C$(LEN(C$)+1)=CHR$(155):TMP$(1)=CHR$(0):TMP$(2040)=CHR$(0):TMP$(2)=TMP$ 
SXJ 170 A=USR(1536,ADR(C$),ADR(TMP$)):I=0:L=1:A=USR(1716,ADR(TMP$)) 
IEJ 180 TRAP 270:PRINT #3;CHR$(27);CHR$(64);:I=0:L=1 
HPJ 190 IF LN<(CPL+1) THEN 230 
GTJ 200 LN=LN-CPL 
EXJ 210 TRAP 270:PRINT #3;CHR$(27);CHR$(64);CHR$(27);D$;CHR$(L1);CHR$(H1); 
NAJ 220 PRINT #3;TMP$(I*8+1,(I+CPL)*8);CHR$(10);:I=I+CPL:GOTO 190 
ABJ 230 K=LN*8:H=INT(K/256):L=K-H*256 
BGJ 240 TRAP 270:PRINT #3;CHR$(27);CHR$(64);CHR$(27);D$;CHR$(L);CHR$(H); 
MHJ 250 PRINT #3;TMP$(I*8+1,I*8+K+1);CHR$(10);:GOTO 150 
WEJ 260 PRINT "END OF LISTING.":CLOSE #3:END 
GJJ 270 PRINT "RESET PRINTER - PRESS RETURN":INPUT #1;E$ 
VEJ 280 GOTO PEEK(186)+256*PEEK(187) 
JJJ 290 DATA 104,104,133,205,104,133,204,104,133,207,104,133,206,169,0,168 
AOJ 300 DATA 133,203,177,204,170,232,224,156,208,3,76,169,6,10,38,203 
UEJ 310 DATA 74,201,96,176,22,201,64,176,9,201,32,176,11,105,64,76 
OWJ 320 DATA 59,6,56,233,32,76,59,6,56,233,32,133,208,169,0,133 
WBJ 330 DATA 209,24,162,3,24,38,208,38,209,202,208,248,24,173,244,2 
COJ 340 DATA 101,209,133,209,160,7,162,1,177,208,157,171,6,136,232,224 
SOJ 350 DATA 9,208,245,169,8,141,170,6,160,0,162,8,177,206,62,171 
CWJ 360 DATA 6,42,145,206,202,208,245,165,203,240,6,177,206,73,255,145 
DVJ 370 DATA 206,24,165,206,105,1,133,206,165,207,105,0,133,207,206,170 
PTJ 380 DATA 6,173,170,6,240,3,76,106,6,24,165,204,105,1,133,204 
BPJ 390 DATA 165,205,105,0,133,205,76,13,6,96,0,0,0,0,0,0 
GWJ 400 DATA 0,0,0,0 
JJJ 410 DATA 104,104,133,205,104,133,204,169,154,133,206,230,206,162,8,160 
CKJ 420 DATA 0,177,204,197,206,208,4,169,151,145,204,200,192,0,208,241 
TOZ 430 DATA 230,205,202,208,234,96,155 
Figure 2 

Once the program has been listed, load the ATASCII Lister and RUN it. You are asked whether you are using a cassette or disk. If you are loading from disk, you are asked for the filename.

Next, you are asked to enter the print density. This can be a value of one or two, which corresponds to a resolution of 60 dots per inch (d.p.i.) and 120 d.p.i., respectively. Quadruple density produces characters too thin to be legible and is thus not supported by the program. Figure 1 shows a sample program listing printed by ATASCII Lister in density 2.

Next, you are asked for the number of characters per line. Make sure you don’t select too many characters per line for the particular resolution you chose. Each character requires eight dots. Thus, an eight-inch line printer using a 60 d.p.i. resolution can print a total of 480 (8 inches x 60 d.p.i.) dots, or 60 characters per line (480 dots per line/8 dots per character). This computation can be used to determine the maximum number of characters per line for your particular printer and for the resolution you are using.

When the number of characters per line has been entered, the listing will be printed — in the Atari’s own characters! If you get an “ERROR - CHECK DATA” message, then check the program carefully for errors. You’ll get a “RESET PRINTER - PRESS RETURN” message if your printer goes off-line for some reason, such as when the paper is out. Press RETURN when the printer is back on-line.

The ATASCII Lister makes your printer and your Atari fully compatible. No longer will you have restrictions when you need to list programs to your printer.

Next Month

Well learn how ATASCII Lister works, enter a program to read a light pen, learn how to redefine the keys of the numeric keypad, answer more reader mail, and look at some other good stuff.

Reader’s questions, comments and contributions are welcome. Please enclose a self-addressed, stamped envelope (SASE) for a personal reply.

A cassette or diskette of any program listed in this column is available from the author for postpaid. Specify DOS 2 or DOS 3 when requesting a diskette.

Program Perfect is a utility used to check for typing errors in programs entered from this column. Readers may send a SASE for a listing or $5.00 for a cassette or diskette.

Address all correspondence to:

Jeff Brenner’s
“Applying The Atari”
c/o Computer Shopper
P.O. Box F
Titusville, FL 32781-9990
(Atari is a trademark of Atari Corp.)
COMPUTER SHOPPER / AUGUST 1985 / PAGE 54 

Applying The Atari

by Jeff Brenner

This month marks the first anniversary of the “Applying The Atari” column. A lot of work has gone into this column over the past year to develop practical applications for your Atari for the home, office and school, and to teach you more about the capabilities of this versatile machine. Of course, some bugs and errors have been made along the way, but the overwhelming support from individual readers and from users groups indicates that this column has been a success and, makes writing it all the more worthwhile to me personally.

Responses to this column in the form of questions, contributions and comments from readers have increased more than ten fold over the past six months and indeed this is a healthy sign. Hopefully more advertisers for Atari products will recognize this growing audience and will place their ads in Computer Shopper. This will not only add more interest to the Atari section (many Atari owners read computer magazines for the ads as much as the articles) but will enable Computer Shopper to devote more space for Atari articles in the future.

The new Atari computers have created a great deal of enthusiasm among Atari fans and among many software developers. Yet with the Commodore Amiga slated to be out by the time you read this, there is some caution and concern out there as Computer War II, battle of the Mac lookalikes approaches. In any event, I won’t be giving up any column space to programs for the new Atari units until there is a significant number of them out there.

Even more exciting stuff is in store for your Atari in the months ahead. In fact, next month we embark upon our grandest project ever, an artificial intelligence program. This month, we’ll discover how ATASCII Lister works, incorporate a light pen into a BASIC drawing program, and redefine keys on the Atari numeric keypad. Ah, but first your letters…

Reader Mail

Q. I have an Atari 800XL and would like to use it with an Olympia Compact 2 built-in Centronics parallel port. Do you know of any interface cable which would connect the Olympia Compact 2 to the parallel processor bus which is in the back of the Atari 800XL? In general, what interfaces work well between the Atari 800XL and printers with Centronics parallel ports?

Jack Epstein
Kingston, NY

To my knowledge, there are no printer interfaces available which connect to the parallel processor bus of the XL. Unfortunately, the newer XE line, which replaces the XL computers, does not have this parallel processor bus, which makes it unlikely that any products will be developed to utilize this bus. The available interfaces plug into the serial port on the Atari.

Any Atari printer interface should work well between your XL and your Olympia. An interface either works or doesn’t work, so there is no real way to judge how good one is compared to another. You can, however, spend a little extra to get an interface equipped with a buffer. This would allow the computer to quickly transfer its data to the buffer and then be free for programming while the buffer independently sends the data at a slower rate to the printer. Some interfaces for the Atari for parallel printers (aside from Atari’s 850): ape Face, Microbits 1150, Cardco AT, Interfast.


A suggestion for two paragraphs in your next “Applying The Atari” column:

One would cover how the multi-luminance program presented in the May 1985 issue on page 54 could have Program Perfect checksums listed as both programs contain line numbers 30000 - 30130. (It is not a pretty sight watching one program eat up the other.)

The other paragraph, of course, would cover why you didn’t tell us your method in the June issue.

Your column is interesting and informative and I enjoy reading it. I hope Atari’s new machinery revives all kinds of interest in Atari.

Donald McEntee
Webster Groves, MO

Indeed, both the multi-luminance program and Program Perfect contain identical line numbers. You are one of the few readers who realized that the problem in entering typewriter/printer which has a the multi-luminance program was due to the coinciding line numbers and not from an error in Program Perfect itself.

The multi-luminance program was created prior to the development of Program Perfect and unfortunately the conflicting line numbers were not apparent until after publication. I apologize for any inconvenience this may have caused you or other readers.

Each line of the multi-luminance program that is entered will take the place of a line of the executing Program Perfect — a mess. The whole ordeal eventually ends in an error message. I agree that the sight of one program being consumed by another is ugly, at best. To the novice Atarian, such an occurrence can be a terrifying experience. Listed under the heading, “Multi-Luminance Revision,” is a renumbered version of the original program. This version can be entered with Program Perfect. Note that this renumbered version begins at line 25000. Therefore, if the demonstration program (Program 2 in May column) is being used with this renumbered version, line 20 of the demo should be changed from:

20 GRAPHICS 0:GOSUB 30000:RESTORE 50 
to:
20 GRAPHICS 0:GOSUB 25000:RESTORE 50 

I only wish this could have happened in the April issue so I could have dismissed it as an April Fools’ joke. Oh well...there’s always next year!

MULTI-LUMINANCE PROGRAM 

KPJ 25000 REM MULTI-LUMINANCE PROGRAM 
KQJ 25010 REM BY JEFF BRENNER 
CNJ 25020 RESTORE 25070:I=0 
FPJ 25030 READ NUM:IF NUM=-1 THEN 25050 
YLJ 25040 TOT=TOT+NUM+1:POKE 1664+I,NUM:I=I+1:GOTO 25030 
REJ 25050 IF TOT<>13108 THEN PRINT "ERROR-CHECK PROGRAM":STOP 
HRJ 25060 A=USR(1664):RETURN 
TXJ 25070 DATA 104,173,48,2,133,204,173,49,2,133,205,160,26,169,10 
XTJ 25080 DATA 153,230,6,136,208,250,160,0,177,204,9,128,145,204,160 
UOJ 25090 DATA 3,177,204,9,128,145,204,160,6,177,204,9,128,145,204 
OFJ 25100 DATA 200,192,28,208,245,169,197,141,0,2,169,6,141,1,2 
TTJ 25110 DATA 173,14,212,9,128,141,14,212,96,72,152,72,173,11,212 
TFJ 25120 DATA 201,7,240,18,201,8,240,14,230,204,164,204,185,231,6 
SFZ 25130 DATA 141,23,208,104,168,104,64,169,0,133,204,240,238,-1 

First I want to state how much I enjoy your column and the friendly attitude of your approach. I think the software presented is intelligently selected and more useful to the serious beginner than the childish nonsense found in the pop Atari mags. Pity I can’t do an accurate job of entering the programs.

Part of the problem, in addition to my own shortcomings, is the minisclule amount of space allotted for the program listing. I cannot read the list without a magnifier and then I find it difficult to debug and/or adapt due to the lack of REM statements. All of this I attribute to the publishers of Computer periodicals selling Atari down the river and counting them out instead of down. Their lack of support for Jack Tramiel is self-defeating because he is one dynamic guy who can breathe new life into the dying so called “low-end” computer industry.

I believe that in the future the Atari section will be significantly expanded as well as the respect the computer so greatly deserves.

Donald Nadler
New Hempstead, NY

Many readers have written that the small space provided for the program listings makes it difficult to read the programs. However, enlarging the program listing would mean less room for other items in the column. Program Perfect was developed to help readers to enter the programs and I highly recommend that you take advantage of this utility when you enter programs from this column.

CHESSBOARD PAYOFF 

MGJ 10 REM CHESSBOARD PAYOFF 
VCJ 20 REM BY CARL WADE 
UTJ 30 OPEN #1,12,0,"E:":PRINT "Press RETURN to continue" 
AXJ 40 N=1:POW=1:SUM=1:H=100:T=10*H:MIL=T*T:BIL=MIL*T:TRIL=BIL*T 
GZJ 50 DIM SP$(1):SP$=CHR$(32):TRAP 70:INPUT #1;ZK 
EAJ 60 N=N+1:POW=POW*2:SUM=SUM+POW 
YHJ 70 PRINT N;".";SP$;:IF SUM<H*TRIL THEN 90 
NLJ 80 PRINT SP$;"$";INT(SUM/H)/TRIL;SP$;"TRILLION":GOTO 170 
GNJ 90 IF SUM<H*BIL THEN 110 
HIJ 100 PRINT SP$;"$";INT(SUM/H)/BIL;SP$;"BILLION":GOTO 170 
IPJ 110 IF SUM<H*MIL THEN 130 
IGJ 120 PRINT SP$;"$";INT(SUM/H)/MIL;SP$;"MILLION":GOTO 170 
XLJ 130 IF SUM<H THEN 150 
AKJ 140 PRINT SP$;"$";SUM/H:GOTO 170 
XFJ 150 PRINT SUM;SP$;"CENT";:IF SUM>1 THEN PRINT "S"; 
WSJ 160 PRINT 
PVZ 170 TRAP 60:INPUT #1,ZK:END 

I agree with your comments about the lack of support given to Atari by most computer magazines. Unfortunately, this has always been the case, Names such as “game machine” and “toy computer,” branded on the Atari in its first years of existence, have obscured the true power and versatility of this machine. I feel, though, that there is currently some genuine interest and support among these magazines for Jack Tramiel and for the new Atari. If the new Atari computers prove successful, we may witness a change in the way the Atari computers (the new ones, at least) are treated. Meanwhile, we should give much credit to Computer Shopper’s editor-in-chief, Stan Veit, for realizing the existence of a large base of Atari users in need of information and for providing a section in this magazine for them.

I too hope that, with the rebirth of Atari, we’ll see a growth in Atari related articles and advertisements in this magazine and in others as well.

Chess is said to have originated in India, and one of its early proponents is said to have taught his king how to play. The monarch, pleased with his new knowledge, asked his teacher to name his own payment, and the teacher made a very simple request. He asked to have a grain of wheat placed on the first square of the chessboard, two grains of wheat on the second square, four on the square after that, and so on, doubling the previous amount of each successive square. That seemed like an easy request and the satrap ordered his aides to start carrying it out, but of course they could not finish. There was not enough wheat in the whole kingdom.

I thought that you or your readers might like to see a simple BASIC program that describes the situation. I have used pennies instead of grains of wheat, and the amount soon exceeds the Gross National Product. To use the program, just press the RETURN key repeatedly and the accumulated total for successive squares will appear on the screen. To end the program just type in 99 or any other number before pressing the RETURN key.

Carl Wade
Fort Collins, CO

The program is listed under the “Chessboard Payoff” heading. You are being sent a 3-D Holographic Sticker for your interesting contribution. Thanks for writing.

ATASCII Lister

Let’s get an idea of how last month’s ATASCII Lister program worked.

The ATASCII Lister does not require any character data of its own, as it uses the data stored in the Atari’s character-set ROM. Actually, ATASCII Lister lists programs in the character set pointed to by location 756 (the character base address), thus enabling you to list programs in your own custom character set, or in any character set you load into the computer.

ATASCII Lister reads a program from cassette or disk. Through a machine language subroutine, each character is converted into a series of numbers which the printer interprets as graphics data. The printed graphics look exactly like the Atari’s characters with one exception — the inverse “A.” It just so happens that when the inverse “A” is broken down into bytes to be sent to the printer, two of the bytes equal 155. This value is automatically converted to a 13 before it reaches the printer, since the Atari’s line feed code is 155, and the printer is 13. The altered pieces of data would make a mess of the character. To solve this problem, the bar of the inverse “A” is moved up one line by the program. Figure 1 illustrates this. The result is a routine which can list programs that utilize all the Atari’s special characters.

 ■ ■ ■ ■ ■ ■ ■ ■  128  ■ ■ ■ ■ ■ ■ ■ ■ 
 ■ ■ ■ □ □ ■ ■ ■  64   ■ ■ ■ □ □ ■ ■ ■ 
 ■ ■ □ □ □ □ ■ ■  32   ■ ■ □ □ □ □ ■ ■ 
 ■ □ □ ■ ■ □ □ ■  16   ■ □ □ ■ ■ □ □ ■ 
 ■ □ □ ■ ■ □ □ ■   8   ■ □ □ □ □ □ □ ■ 
 ■ □ □ □ □ □ □ ■   4   ■ □ □ ■ ■ □ □ ■ 
 ■ □ □ ■ ■ □ □ ■   2   ■ □ □ ■ ■ □ □ ■ 
 ■ ■ ■ ■ ■ ■ ■ ■   1   ■ ■ ■ ■ ■ ■ ■ ■ 
 2 2 1 1 1 1 2 2       2 2 1 1 1 1 2 2 
 5 2 9 5 5 9 2 5       5 2 9 5 5 9 2 5 
 5 5 3 5 5 3 5 5       5 5 3 1 1 3 5 5 

NORMAL INVERSE "A"  REVISED INVERSE "A" 

Light Pen Drawing Program

Last month we discussed incorporating a touch tablet into your BASIC programs. This month, a program is presented to allow you to draw with a light pen. Many of the techniques mentioned in last month’s column for reading the touch tablet have been employed in this light pen program. Of course, you must have a light pen in order to use the program. The program is listed under the “Light Pen Program” heading.

This program lets you draw in four colors on a Graphics 7 mode screen. If you have the Graphics Dump Utility listed in the March 1985 column, you could merge it with the Light Pen Program and print your artistic creations on a printer.

Before you run the program, you must determine a way for the computer to detect when you press the button on the light pen, since some light pens differ in this regard. To do this, type in this short program:

10 IF STICK(0)<>15 THEN PRINT "IF STICK(0)=15":END 
20 IF STRIG(0)=0 THEN PRINT "IF STRIG(0)=1":END 
30 IF PTRIG(0)=0 THEN PRINT "IF PTRIG(0)=1":END 
140 GOTO 10 

RUN this program, plug in the light pen, and press the button on the light pen. If IF STICK(0) = 15 is printed, you can use the light pen program as listed. If IF STRIG(0)=1 is printed, then replace the IF STICK(0)<>15 in line 100 of the Light Pen Program with this segment so that line 100 reads as follows:

100 IF STRIG(0)=1 THEN OX=200:FLAG=0:GOTO 90 

If IF PTRIG(0)=1 is printed, then change line 100 to read as follows:

100 IF PTRIG(0)=1 THEN OX=200:FLAG=0:GOTO 90 

Now the program is ready for use.

Turn the brightness level of your television up, plug in the light pen, unplug everything else from the other joystick ports and RUN the Light Pen Program. You’ll be asked to position the light pen on a white dot in the center of the screen. While holding the light pen over this dot, press RETURN. This sets the light pen for proper vertical and horizontal alignment.

Now the screen will turn white since the light pen can only read bright colors on the screen. Put the light pen to the screen and press the button when you want to draw. You can press 1, 2 or 3 for the colors sets by lines 40, 50 and 60 respectively. Pressing 4 gives you the background color and its effect is to erase the other colors. You can change the SETCOLOR statements on lines 40 through 60 to obtain the colors of your choice, but remember to use bright colors so that the light pen will be able to read them. If you’ve added the Graphics Dump Utility, you can press P to get a printout of the screen. If using the MPP-1100 printer interface (the kind that plugs into the third joystick port of the Atari 400 or 800) you’ll have to unplug it from the joystick port while using the light pen. But be sure to plug it back in again when you are ready to print. Those using other interfaces need not worry about this. If you want to use your own BASIC graphics dump utility, merge your utility with the Light Pen Program and change the GOSUB 31000 in line 210 to GOSUB to the beginning line of your graphics dump. Or, if you have a machine language commercial printer dump utility, follow the directions for using it in conjunction with a BASIC program.

The sensitivity of the program to the light pen can be decreased or increased by respectively lowering or raising the value for the variable THRESHOLD on line 80. Generally, the better the quality of your light pen, the lower you should be able to set the THRESHOLD. As described last month, the threshold value is the amount of movement the light pen must register before the movement is actually plotted on the screen. If you are getting erratic plotting on the screen when you draw, you should raise the THRESHOLD level.

Figure 2 shows what happens when Jeff Brenner gets his hands on a light pen. The drawings were created with the Light Pen Program and printed out using the Graphics Dump Utility. (Yes, the third drawing was an attempt at the Atari logo.)

Have fun. If you print anything really nice, send it in and we’ll try to print it.

LIGHT PEN PROGRAM 

IAJ 10 REM LIGHT PEN DRAWING PROGRAM 
IIJ 20 REM COPYRIGHT 1985 JB 
LIJ 30 OPEN #2,4,0,"K:":GOSUB 230:GRAPHICS 7+16:COL=1 
QMJ 40 SETCOLOR 0,4,10 
QSJ 50 SETCOLOR 1,8,10 
SMJ 60 SETCOLOR 2,13,10 
QTJ 70 SETCOLOR 4,0,14 
LIJ 80 THRESHOLD=4 
SAJ 90 X=PEEK(564):Y=PEEK(565):IF PEEK(764)<255 THEN 200 
FEJ 100 IF STICK(0)=15 THEN OX=200:FLAG=0:GOTO 90 
NQJ 110 IF OLDX+OLDY=0 THEN 140 
UXJ 120 IF ABS(OX-X)<THRESHOLD AND ABS(OY-Y)<THRESHOLD THEN 90 
IYJ 130 OX=X:OY=Y 
YOJ 140 POSX=X-XFIX:POSY=Y-YFIX 
TFJ 150 TRAP 90:COLOR COL:PLOT POSX,POSY 
DHJ 160 IF FLAG THEN PLOT OLDX,OLDY 
DSJ 170 DRAWTO POSX,POSY 
GDJ 180 OLDX=POSX:OLDY=POSY:FLAG=1 
YWJ 190 GOTO 90 
DQJ 200 GET #2,N:N=N-48:IF N>0 AND N<5 THEN COL=N 
IJJ 210 IF CHR$(N+48)="P" THEN GOSUB 31000 
YQJ 220 GOTO 90 
FMJ 230 GRAPHICS 7:POKE 710,0:POKE 708,14:COLOR 1:PLOT 80,48 
TPJ 240 PRINT "POSITION LIGHT PEN ON DOT AND PRESS" 
DDJ 250 PRINT "PRESS THE SPACE BAR." 
AHJ 260 GET #2,N 
MHJ 270 X=PEEK(564):Y=PEEK(565) 
QSJ 280 XFIX=PEEK(564)-80:YFIX=PEEK(565)-48 
BRZ 290 RETURN 

Programmable Numeric Keypad

Last month we typed in a program which let us use the Atari Numeric Keypad while programming. This month’s program lets you redefine any of the keys on the keypad to your liking.

Type in the program listed under “Programmable Keypad” and plug in your Atari CX85 keypad. Before you run the program, press SYSTEM RESET to reset a register used by the keypad.

When the program is run, all the keys on the keypad will be listed on the left side of the screen. The computer will print “PRESS KEYPAD.” Press the key on the keypad that you want to redefine. The particular key you press is highlighted on the left side of the screen and the message “PRESS KEYBOARD” is displayed. Now press the key on the keyboard that is to be defined by the key you pressed on the keypad. This key will be printed on the right side of the screen. You can program keys to function as the inverse video and the caps/lower keys as well as any of the others.

You only need to program the keys you wish to redefine. Keys which you do not program will retain their standard characters. Hence, you need not reprogram numbers one through nine, for example, each time you program the keypad.

When you’ve finished programming, press the START key and the redefined key data will be saved in memory and the program will end. Pressing keys on the keypad will now display the redefined characters.

Next Month

We’ll look at more reader mail, plus we’ll enter an amazing artificial intelligence program. You won’t want to miss this one.

Readers questions, comments and original contributions are welcome. Please enclose a self-addressed, stamped envelope (SASE) for a personal reply.

A cassette or diskette of the programs listed in this month’s column is available from the author for $5.00, postpaid. Specify DOS 2 or DOS 3 when requesting a diskette.

Program Perfect is a utility used to check for typing errors in programs entered from this column. Readers may send a SASE for a listing or $5.00 for a cassette or diskette.

Address all correspondence to:

Jeff Brenner’s
“Applying The Atari 8/85”
C/O Computer Shopper
P.O. Box F
Titusville, FL 32781-9990
PROGRAMMABLE KEYPAD 

OPJ 10 REM PROGRAMMABLE NUMERIC KEYPAD 
KFJ 20 REM COPYRIGHT 1985 JEFF BRENNER 
PHJ 30 DIM DEF(16),PR(16),KEY$(10),SP$(10):OPEN #1,4,0,"K:" 
XGJ 40 SP$(1)=CHR$(32):SP$(10)=CHR$(32):SP$(2)=SP$ 
PMJ 50 RESTORE 200:FOR I=0 TO 16 
SNJ 60 READ NUM:DEF(I)=NUM:PR(I)=-1:NEXT I 
JOJ 70 RESTORE :TOT=0:FOR I=1536 TO 1607:READ NUM 
OSJ 80 POKE I,NUM:TOT=TOT+I+NUM:NEXT I 
VPJ 90 IF TOT=120212 THEN A=USR(1536):GOTO 250 
GSJ 100 PRINT "ERROR - CHECK DATA":END 
MTJ 110 DATA 104,162,006,160,011,169 
NLJ 120 DATA 007,032,092,228,096,174 
MRJ 130 DATA 016,208,240,006,202,134 
NAJ 140 DATA 204,076,051,006,165,204 
MMJ 150 DATA 240,002,208,023,230,204 
MNJ 160 DATA 173,000,211,041,015,170 
MFJ 170 DATA 173,001,210,201,001,240 
NGJ 180 DATA 002,162,016,189,054,006 
NPJ 190 DATA 141,252,002,076,098,228 
MVJ 200 DATA 052,024,029,027,035,051 
MRJ 210 DATA 053,048,043,031,030,026 
MRJ 220 DATA 050,034,012,014,028,155 
CPJ 230 DATA DELETE,4,5,6,NO,7,8,9,YES 
ALJ 240 DATA 1,2,3,0,.,+ENTER,-,ESCAPE 
ADJ 250 PRINT CHR$(125);"KEYPAD";CHR$(127);"KEYBOARD":PRINT 
IHJ 260 FOR I=0 TO 16:READ KEY$:PRINT KEY$;:PRINT CHR$(127); 
PLJ 270 IF PR(I)>-1 THEN PRINT CHR$(PR(I)); 
RPJ 280 PRINT :NEXT I 
WAJ 290 POKE 84,23:PRINT "PRESS START WHEN FINISHED"; 
HDJ 300 POKE 85,2:POKE 84,21:PRINT CHR$(156);CHR$(157);"PRESS KEYPAD"; 
EFJ 310 GOSUB 450 
LWJ 320 FOR I=0 TO 16:IF DEF(I)<>PEEK(764) THEN NEXT I:GOTO 300 
JRJ 330 RESTORE 230:FOR J=0 TO I:READ KEY$:NEXT J 
BCJ 340 POKE 85,2:POKE 84,I+2:FOR K=1 TO LEN(KEY$):CHR=ASC(KEY$(K,K)) 
XTJ 350 PRINT CHR$(CHR+128);:NEXT K:POKE 84,21 
FNJ 360 POKE 85,2:PRINT "PRESS KEYBOARD"; 
TAJ 370 GOSUB 450:PR(I)=PEEK(764):POKE 84,I+2:POKE 85,15 
XYJ 380 IF PR(I)=39 THEN PRINT "INV";:GOTO 440 
CCJ 390 IF PR(I)=60 THEN PRINT "LOWR";:GOTO 440 
COJ 400 IF PR(I)=124 THEN PRINT "CAPS";:GOTO 440 
ADJ 410 GET #1,N 
ATJ 420 IF N=155 THEN PRINT "RETURN";:GOTO 440 
CAJ 430 POKE 766,1:PRINT CHR$(N);SP$;:POKE 766,0 
FRJ 440 POKE 85,2:PRINT KEY$;:GOTO 300 
JHJ 450 POKE 764,255 
NMJ 460 IF PEEK(53279)=6 THEN 490 
NHJ 470 IF PEEK(764)=255 THEN 460 
BCJ 480 RETURN 
RWJ 490 FOR I=0 TO 16:IF PR(I)>-1 THEN POKE 1590+I,PR(I) 
XRJ 500 NEXT I 
TOJ 510 A=USR(1536):PRINT :PRINT :PRINT :PRINT "PROGRAMMING COMPLETED" 
QIZ 520 END 
COMPUTER SHOPPER / SEPTEMBER 1985 / PAGE 59 

Applying The Atari

by Jeff Brenner

Our feature program this month is a long one and will take some time to type in, but I think you’ll enjoy it. I had to forcefully pull myself away from playing with it so I could write this month’s column. Before we discover what this program is, let’s answer some reader mail and take care of a few other matters.

Reader Mail

Q. I have an Atari 800XL, the AtariWriter cartridge and a Gorilla Banana Printer. I understand there is some sort of utility floating around (a driver routine?) that makes the AtariWriter cartridge and the Banana more compatible. If you know anything about it, I would appreciate some information.

Jim Cassoutt
Pensacola, FL

Originally, Atari was to distribute these “printer driver routines” for various printers through the Atari Program Exchange. However, the Atari Program Exchange has long been shut down and Atari users have since been complaining that they are unable to get these routines.

But there is still hope. A company called At-A-Glance (86 Ridgedale Avenue, Cedar Knolls, NJ 07927) produces a “Printer Formatted Data Disk,” essentially the driver routine you are interested in. The price is $14.95. The company claims that this program “will give you all the available options possible with your printer and AtariWriter.” Their ad lists the availability of versions for the following dot-matrix printers: “BMC, C-ITOH, EPSON, GEMINI, LEGEND, OKIDATA, PANASONIC, ATARI, RITEMAN, CITIZEN, plus others.” Hopefully, the “plus others” includes your Banana Gorilla.

I recommend that you write a letter to them before ordering to see whether a version is available specifically for your model.


Q. My wife and I have recently gotten involved in doing lineage charts (genealogical trees) of our families and realized it would be so much simpler to do this on our computer (Atari 800XL).

Somewhere I remember seeing some software just for that purpose, but was disappointed to find it was for a computer other than my Atari. It may have been for a Commodore 64 but I’m not exactly sure of that. However, if you know of one for the Atari, please let me know or ask your readers if they know of such a program.

Darwin K. Garrison
Lee’s Summit, MO

Although I have seen several genealogical programs for other computers, I am sorry to say I am not familiar with any available for the Atari. The following companies have produced genealogical software for other computers:

Acorn Software Products, 7655 Leesburg Pike, Falls Church, VA 22043: Family Tree
Array Systems, P.O. Box 295, Brigham City, UT 84302: Treesearch
Comsoft, 655 Maybell Avenue, Palo Alto, CA 94306: Roots
Quinsept, P.O. Box 216, Lexington, MA 02173: Family Roots
Soft-Gene, 11 John Swift Road, Acton, MA 01720: Ancestry
Wagstaff Computer Services, 1050 E. 800 South, Provo, UT 84601: Family Ties

Most of these addresses are more than a year old, and in that time versions might have been developed for the Atari. (Several of these companies have probably gone out of business during this time as well.) I recommend that you write to these companies and ask if an Atari version is available.

You also might be interested in the following companies:

Data Transfer Associates, Inc., 5102 Pommeroy Drive, Fairfax, VA 22032, (703) 938-8490: Publishes bimonthly newsletter, Genealogical Computing
National Genealogical Society’s Computer Interest Group, 1921 Sunderland Place, NW Washington, DC 20036
Posey Enterprises, P.O. Box 338, Orem, UT 84057, (801) 374-6168: Publishes quarterly Genealogical Computer Pioneer

If any readers produce or know of a genealogical program for Atari computers, please write and tell us.

>I'M CHECKING TO SEE IF YOU WORK PROPERLY. RAP: FOR HOW LONG HAVE YOU BEEN CHECKING TO SEE IF I WORK PROPERLY? >I'VE JUST BEGUN. RAP: TELL ME MORE. >YOU'RE BEING QUOTED FOR A MAGAZINE. RAP: WHY DO YOU.THINK I AM BEING QUOTED FOR A MAGAZINE? >BECAUSE I'M DOING THE QUOTING! RAP: IS IT REALLY BECAUSE YOU'RE DOING THE QUOTING? >YES IT IS. RAP: ARE YOU CERTAIN? >I'M ABSOLUTELY POSITIVE. RAP: ARE YOU WORRIED BECAUSE YOU ARE ABSOLUTELY POSITIVE? >WHAT DO YOU MEAN? RAP: WHAT DO YOU THINK DO I MEAN? >YOU GOT ME - DO YOU MIND IF I PRINT WHAT YOU ARE SAYING? RAP: DO YOU THINK I KNOW WHAT I AM SAYING? >THAT'S TRUE - YOU ARE A COMPUTER PROGRAM. RAP: HAVE YOU EVER WANTED TO BE A COMPUTER PROGRAM? >NEVER! RAP: NEVER AT ALL? >THAT'S RIGHT. RAP: THAT IS INTERESTING - GO ON. >CAN YOU THINK? RAP: DO YOU THINK I CAN THINK? >THAT'S WHAT I AM TRYING TO FIND OUT. RAP: WHAT DO YOU THINK YOU ARE TRYING TO FIND OUT? >I WANT TO SEE IF YOU CAN IMITATE HUMAN INTELLIGENCE. RAP: WHAT IF YOU CAN'T GET TO SEE IF I CAN IMITATE HUMAN INTELLIGENCE? >THEN I MAY GET MAD AT YOU. RAP: IT'S UNHEALTHY TO BE ANGRY OFTEN. >I SELDOM GET ANGRY. RAP: WHAT DOES ANGER DO TO YOU? >I DON'T WANT TO DISCUSS THIS IN FRONT OF MY READERS. RAP: ARE YOU SURE YOU DON'T WANT TO DISCUSS THIS IN FRONT OF YOUR READERS? >ABSOLUTELY SURE - INSTEAD I WANT TO GO FINISH MY COLUMN. RAP: IS THAT WHAT YOU REALLY WANT? >YES, SO GOODBYE! RAP: IT'S BEEN A PLEASURE TALKING WITH YOU.
Figure 1
"Conversation with RAP."

Q. I’ve been having some problems with Atari’s customer service. The problem concerns their form letter and non-response, mostly. I bought a 130XE and I asked them simply how to access the additional memory that they have advertised and how to use it with their AtariWriter program. The reason I bought a 130XE was because I wanted the additional memory to keep more pages at a time in the computer. They sent me a form letter with the address of Atari associations in my area and no further response. I really got upset at that point and wrote a letter to the president and told him that I thought their “there’s 130K available but you can’t use it” philosophy was false advertising and Consumer Reports and the Federal Trade Commission ought to know about it. I got another “the user associations in your area are as follows:” form letter about one month later—really user-unfriendly if you compare this with their former helpfulness.

So much for preamble. Can you help me—how do you get the full 130K. I don’t understand their instructions in their manual.

Terry Joslin
Oakton, VA

It is unfortunate that it is so difficult to correspond with Atari, but you are one of the lucky ones. Many readers have complained that they have not received any response—not even a form letter. Ironically, calling Atari by phone gives a recording which tells the caller that the phone lines are too busy and suggests that the caller mail in his question. I had hoped that once Atari settled down with its new management, its toll-free “help” line would be set up again. But the new Atari has apparently remained negligent in the area of consumer support and I do hope this changes in the future.

Regarding your questions about the 130K RAM in the 130XE, the full 130K is indeed in your machine and 64K of it can be used as a RAM “disk drive.” You can save data or programs to this area and then access them when desired. I intend to cover various aspects of Atari’s newer computers in a future column.

Since AtariWriter was not designed with the 130XE in mind, it cannot access the additional memory. Therefore you must wait until a word processor is released that is compatible with the 130XE. As of this writing I know of no 130K word processors for the Atari 130XE, but will inform you if I hear of one being developed.

Newsletters

I recently received two more well-designed newsletters from Atari user’s groups. One is Pokey, printed by the Western New York Atari User’s Group (P.O. Box 59, Buffalo, NY 14216). The other is Bits, Bytes & Pieces Computer Digest printed by the Bits, Bytes, & Pieces Atari user’s group (1103 Arrowbend Drive, Williamson, NY 14589). If your user’s group prints a regular newsletter, send it in and I’ll try to mention it.

Contributions

Readers are invited to submit short, original programs from which others may benefit. All readers whose contributions are printed will receive 3-D holograph stickers. Additionally, this month I have two cartridge games from Sega and from Epyx for the best original programs that are received and published. If you have any nifty little programs of your own creation that others will enjoy, send them in!

Numeric Keypad Decoder

Several readers have requested an assembly listing of July’s numeric keypad program. It is listed under the “Numeric Keypad Decoder Assembly Listing” heading for those who want to modify it for use with machine language programs, or for those simply interested in seeing more clearly how it works.

Mailing List Update

I’ve gotten such a fantastic response to June’s Mailing List program from readers who are using it that we’ll begin adding more features to this program next month to make it even more practical. So far only one minor bug has surfaced. When searching for a name that does not exist, an error message will be generated. Add the following line:

935 TRAP 1000 

This will cause the program to print a “Name not found” message instead, and will allow you to continue. Some readers who have requested diskettes of this program will find that this line has already been added to the program.

Response Analysis Program

Now the program that we’ve all been waiting for. It’s called the Response Analysis Program, or RAP for short. It requires a minimum of 24K RAM.

Inspired by the program, Eliza, which was created at the Massachusetts Institute of Technology way back in 1966, RAP will sometimes startle you with apparently intelligent responses to your statements, or will make you laugh with its hilarious retorts. Eliza was a computer psychotherapist; RAP is the center of a rap session. Some have found that “talking” to such a program (as ridiculous as it sounds) has actually helped them to relieve some pressures and tensions.

Figure 1 gives you an idea of what RAP is all about. This is a sample conversation between me and the program. My entries are preceded by “>” while the program’s responses are preceded by “RAP:.” You can obviously have a lot of fun with this program.

The program has been divided into two parts. Part I (lines 10 through 1350) and Part II (lines 4960 through 5590) both with the heading, “Response Analysis Program.” RAP is a long program, so you might want to enter it in over a period of several days. It’s a good idea to use Program Perfect to enter this program to avoid making errors which will affect its operation. (See the end of this article for information on Program Perfect.)

Type in both parts of RAP. If you are using Program Perfect, first enter Part I. Then list this part to cassette or disk (LIST “C:” or LIST “D:PART1”). Now type NEW and reload Program Perfect. Type 4960 for the “Starting line” prompt and begin entering Part II. When this part is completed, merge Part I with it by entering Part I from cassette or disk (ENTER “C:” or ENTER “D:PART1”). Now the entire program will be in memory, and you can SAVE it to cassette or disk (CSAVE or SAVE “D.RAP.BAS”). You can also delete the Part I file from disk once you have saved the completed program.

NUMERIC KEYPAD DECODER ASSEMBLY LISTING 

10  *=$600 
20 ; NUMERIC KEYPAD DECODER 
30 ; (C) 1985 JEFF BRENNER 
40 PORTA=54016 
50 POT1=53761 
60 TRIG0=53264 
70 SETVBV=58460 
80 XITVBV=58466 
90 CH=764 
0100 FLAG=204 
0110  PLA 
0120  LDX #START/256    ; Load X with high byte of START. 
0130  LDY #START&255    ; Load Y with low byte of START. 
0140  LDA #7 
0150  JSR SETVBV        ; Set vectors to point to START address. 
0160  RTS               ; Return to BASIC. 
0170 START LDX TRIG0 
0180  BEQ PRESSED       ; IF TRIG0=0 then key has been pressed. 
0190  DEX 
0200  STX FLAG          ; Otherwise key is released - store zero in FLAG. 
0210  JMP END           ; Jump to end. 
0220 PRESSED LDA FLAG   ; If FLAG=0 then last key has been released. 
0230  BEQ READKEY       ; Ready to read next key. 
0240  BNE END           ; Cannot read key yet - jump to the end. 
0250 READKEY INC FLAG   ; Set flag to non-zero value since key is pressed. 
0260  LDA PORTA         ; Check which key is pressed. 
0270  AND #15 
0280  TAX 
0290  LDA POT1          ; Check if ESCAPE pressed. 
0300  CMP #1 
0310  BEQ NOESC         ; If POT1=1 then ESCAPE was not pressed. 
0320  LDX #16           ; Load X with offset for ESC key. 
0330 NOESC LDA DATA,X   ; Get data determined by X offset. 
0340  STA CH            ; Store data in keyboard code register. 
0350 END JMP XITVBV     ; Exit vertical blank routine. 
0360 DATA .BYTE 0       ; Data for keys stored after this address. 
0370  .END 
RESPONSE ANALYSIS PROGRAM - PART I 

KYJ 10 REM RESPONSE ANALYSIS PROGRAM 
KFJ 20 REM COPYRIGHT 1985 JEFF BRENNER 
CTJ 30 DIM SUM$(120):LAST=5000:PRINT "STAND BY...":DELAY=5 
MBJ 40 TRAP 30:RESTORE LAST:READ SUM$:LAST=LAST+10:GOTO 40 
HBJ 50 KEYS=INT(LAST/10)-501 
UCJ 60 DIM INP$(120),RAP$(120),REV$(100),OLD$(120),SP$(10),M$(7),FIND$(77) 
KTJ 70 DIM TMP$(120),V1$(20),V2$(20),REF$(KEYS),KEY$(20) 
IKJ 80 RESTORE 90:FOR I=1 TO 7:READ M:M$(I,I)=CHR$(M):NEXT I 
ONJ 90 DATA 32,211,212,193,210,212,32 
QRJ 100 FOR I=1 TO 77:READ M:FIND$(I,I)=CHR$(M):NEXT I 
ZAJ 110 SP$(1)=CHR$(32):SP$(10)=CHR$(32):SP$(2)=SP$ 
NIJ 120 REF$(1)=CHR$(0):REF$(KEYS)=CHR$(0):REF$(2)=REF$ 
DWJ 130 POKE 205,2:POKE 204,0:POKE 206,8 
IVJ 140 DATA 104,104,133,205,104,133,204,104,133,207,104,133,206,169,0,133 
JMJ 150 DATA 208,133,212,133,213,160,0,177,206,200,201,155,208,249,136,132 
EEJ 160 DATA 208,160,0,177,204,201,155,240,31,209,206,208,8,200,196,208 
BTJ 170 DATA 208,241,230,212,96,24,165,204,105,1,133,204,165,205,105,0 
GFJ 180 DATA 133,205,230,212,160,0,240,219,169,0,133,212,96 
NQJ 190 RESTORE 210:FOR I=1 TO 47:READ N:POKE 1535+I,N:NEXT I:A=USR(1572) 
EGJ 200 POKE 204,0:POKE 206,8 
XTJ 210 DATA 72,169,0,141,182,2,169,64,141,190,2,230,204,165,204,197 
ACJ 220 DATA 206,208,13,169,0,133,204,169,2,229,205,133,205,141,243,2 
LHJ 230 DATA 104,76,98,228,104,162,6,160,0,169,7,32,92,228,96 
IMJ 240 L=0:K=0:GRAPHICS 5:SETCOLOR 2,0,0:COLOR 1 
GDJ 250 OX=11:OY=38:RESTORE 380:PLOT OX,OY:FOR I=1 TO 37:READ X,Y:FOR J=0 TO 4 
YYJ 260 IF I=15 OR I=26 OR I=29 THEN PLOT X+J,Y:OX=X:OY=Y:GOTO 290 
YLJ 270 PLOT OX+J,OY:DRAWTO X+J,Y 
NXJ 280 IF PEEK(53279)=6 THEN SOUND 2,0,0,0:SOUND 3,0,0,0:GOTO 370 
MGJ 290 M=L+I+J:SETCOLOR 0,I,8 
DKJ 300 SOUND 0,M,10,8:SOUND 1,M*2,10,8:SOUND 2,M*3,10,8:SOUND 3,M*4,10,8 
JDJ 310 POKE 53768,1 
YNJ 320 NEXT J:OX=X:OY=Y:NEXT I:L=L+37:SOUND 2,0,0,0:SOUND 3,0,0,0 
IZJ 330 SOUND 0,255,10,8:SOUND 1,254,10,8:POKE 53768,1 
YYJ 340 PRINT SP$(8);"RESPONSE";SP$(7);"ANALYSIS";SP$(7);"PROGRAM" 
DJJ 350 POKE 752,1:POKE 656,3:POKE 657,10:PRINT "PRESS";M$;"TO BEGIN"; 
QXJ 360 FOR I=0 TO 15:SETCOLOR 0,I,8:IF PEEK(53279)<>6 THEN NEXT I:GOTO 360 
XSJ 370 SOUND 0,0,0,0:SOUND 1,0,0,0:OPEN #1,4,0,"E:":GOTO 540 
OUJ 380 DATA 11,38,9,34,5,23,4,14,5,6,10,2,20,4,20,10,19,17,9,21 
AHJ 390 DATA 7,22,13,24,20,28,24,33,31,39,31,36,30,27,28,17,28,8,33,5 
EJJ 400 DATA 35,6,40,13,45,23,46,34,47,37,43,23,40,23,32,25,57,36,57,29 
PCJ 410 DATA 53,15,47,7,48,2,55,1,67,5,67,12,58,18 
SNJ 420 POKE 559,34:IF P<2 THEN 460 
VMJ 430 PRINT #2;"RAP: ";:FOR I=1 TO LEN(RAP$) 
YFJ 440 IF RAP$(I,I)<>"/" THEN PRINT #2;RAP$(I,I);:GOTO 450 
RVJ 450 NEXT I:PRINT #2:PRINT #2 
PJJ 460 RAP$(LEN(RAP$)+1)=CHR$(32) 
OHJ 470 C=0:FOR I=1 TO LEN(RAP$) 
YMJ 480 FOR J=0 TO LEN(RAP$)-1:IF RAP$(I+J,I+J)<>CHR$(32) THEN NEXT J 
ATJ 490 C=C+J+1:IF C>38 THEN PRINT CHR$(126):C=J 
GIJ 500 FOR K=I TO I+J:SOUND 0,15,8,8:SOUND 0,0,0,0 
WNJ 510 IF RAP$(K,K)<>"/" THEN PRINT RAP$(K,K); 
JFJ 520 FOR D=1 TO DELAY:NEXT D:NEXT K 
CXJ 530 I=I+J:NEXT I:PRINT :RETURN 
RTJ 540 CLOSE #2:PRINT "WOULD YOU LIKE A PRINTOUT (Y/N)":INPUT TMP$:P=0 
OKJ 550 IF TMP$(1,1)<>"Y" THEN 580 
ISJ 560 P=1:TRAP 570:PRINT "TURN PRINTER ON.":OPEN #2,8,0,"P:":GOTO 580 
WBJ 570 PRINT "PRINTER NOT READY.":GOTO 540 
FGJ 580 RAP$="I'M RAP.":GOSUB 420:RAP$="TALK TO ME BUT ANSWER IN ONE" 
YUJ 590 RAP$(LEN(RAP$)+1)=" SENTENCE AT A TIME.":GOSUB 420 
BPJ 600 RAP$="WHEN YOU SEE THIS PROMPT: ":RAP$(LEN(RAP$)+1)=CHR$(27) 
RHJ 610 RAP$(LEN(RAP$)+1)=CHR$(127) 
AJJ 620 RAP$(LEN(RAP$)+1)=", TYPE IN YOUR WORDS AND PRESS RETURN.":GOSUB 420 
LTJ 630 PRINT :IF P=1 THEN P=2 
QFJ 640 IF LEN(KEY$)>3 THEN IF KEY$(1,3)="BYE" THEN POKE 752,0:END 
VZJ 650 TRAP 1190:POKE 752,0:PRINT CHR$(27);CHR$(127);:OLD$=INP$:INPUT #1;INP$ 
VDJ 660 IF P THEN PRINT #2;">";INP$ 
KYJ 670 POKE 559,0:IF LEN(INP$)<7 THEN 690 
JUJ 680 IF INP$(1,6)="SPEED=" THEN DELAY=VAL(INP$(7,LEN(INP$))):GOTO 1170 
IUJ 690 IF INP$=OLD$ THEN 1140 
FUJ 700 TMP$=INP$(LEN(INP$)) 
EIJ 710 IF TMP$<"A" OR TMP$>"Z" THEN INP$=INP$(1,LEN(INP$)-1) 
RKJ 720 TMP$=CHR$(32):TMP$(LEN(TMP$)+1)=INP$:INP$=TMP$ 
DCJ 730 INP$(LEN(INP$)+1)=CHR$(32):INP$(LEN(INP$)+1)=CHR$(155) 
XJJ 740 POKE 752,1:PRINT :INP$(LEN(INP$)+1)=SP$:LN=LEN(INP$):TOT=0 
PFJ 750 IF INP$(1,1)=CHR$(127) THEN INP$=INP$(2,LEN(INP$)):LN=LN-1 
YVJ 760 FOR D=1 TO LN-1:TOT=TOT+ASC(INP$(D,D)) 
WGJ 770 IF INP$(D,D)=CHR$(39) THEN INP$(D)=INP$(D+1,LN):LN=LN-1:D=D+1 
XWJ 780 NEXT D 
IVJ 790 IF INP$=OLD$ THEN 1140 
NPJ 800 IF INP$(5,5)<>"K" THEN 820 
TRJ 810 IF TOT=1089 AND LEN(INP$)=21 THEN 1160 
ELJ 820 AA=300:AKEY=0:RESTORE 1200:A=0:FOR KEY=1 TO KEYS-1 
KMJ 830 READ KEY$:IF KEY$>="0" AND KEY$<="9" THEN LINE=VAL(KEY$):GOTO 830 
FJJ 840 KEY$(LEN(KEY$)+1)=CHR$(155):NM=0 
TRJ 850 A=USR(ADR(FIND$),ADR(INP$),ADR(KEY$)):POKE 205,2:POKE 204,0:POKE 206,8 
DXJ 860 IF A AND KEY$(1,LEN(KEY$)-1)="BYE" THEN 930 
SLJ 870 IF NM=0 AND A>0 AND A<AA THEN AA=A+LEN(KEY$)-1:AKEY=KEY:ALINE=LINE 
MDJ 880 IF A=0 OR INT(RND(0)*3)+1<3 THEN 900 
MGJ 890 AA=A+LEN(KEY$)-1:AKEY=KEY:ALINE=LINE:NM=1 
CKJ 900 READ KEY$:IF KEY$<"0" OR KEY$>"9" THEN 840 
SEJ 910 LINE=VAL(KEY$):NEXT KEY 
IVJ 920 IF AKEY>0 THEN A=AA:KEY=AKEY:LINE=ALINE 
TAJ 930 RESTORE 4960:REV$=INP$(A) 
ULJ 940 FOR I=1 TO 20:READ TMP$,V2$:V1$=CHR$(32):V1$(LEN(V1$)+1)=TMP$ 
NMJ 950 V1$(LEN(V1$)+1)=CHR$(32):V1$(LEN(V1$)+1)=CHR$(155) 
IOJ 960 V2$(LEN(V2$)+1)=CHR$(32) 
QHJ 970 B=USR(ADR(FIND$),ADR(REV$),ADR(V1$)):POKE 205,2:POKE 204,0:POKE 206,8 
YSJ 980 IF B=0 THEN NEXT I:GOTO 1020 
JWJ 990 OLD$=REV$(B+LEN(V1$)-1) 
VBJ 1000 REV$=REV$(1,B):REV$(LEN(REV$)+1)=V2$:REV$(LEN(REV$)+1)=OLD$ 
DNJ 1010 GOTO 970 
OBJ 1020 IF LEN(REV$)<2 THEN 1060 
LNJ 1030 I=ASC(REV$(LEN(REV$))) 
MSJ 1040 IF I=155 OR I=32 THEN REV$=REV$(1,LEN(REV$)-1):GOTO 1020 
STJ 1050 IF REV$(1,1)=CHR$(32) THEN REV$=REV$(2,LEN(REV$)):GOTO 1040 
WXJ 1060 L=ASC(REF$(KEY)) 
VYJ 1070 RESTORE LINE+L:READ OLD$ 
CKJ 1080 L=L+1:I=PEEK(183)+256*PEEK(184):IF I>LINE+9 THEN L=0:GOTO 1070 
KHJ 1090 REF$(KEY,KEY)=CHR$(L) 
GDJ 1100 IF ASC(OLD$(LEN(OLD$)-1))<>43 THEN RAP$=OLD$:GOSUB 420:GOTO 630 
XPJ 1110 RAP$=OLD$(1,LEN(OLD$)-2):RAP$(LEN(RAP$)+1)=CHR$(32) 
KPJ 1120 RAP$(LEN(RAP$)+1)=REV$ 
EXJ 1130 RAP$(LEN(RAP$)+1)=OLD$(LEN(OLD$)):OLD$=RAP$:GOSUB 420:GOTO 630 
WZJ 1140 RAP$="YOU ARE REPEATING YOURSELF." 
CLJ 1150 GOSUB 420:GOTO 630 
VUJ 1160 RAP$="SAME TO YOU, BUSTER!":GOSUB 420:GOTO 630 
DUJ 1170 RAP$="SPEED NOW AT ":RAP$(LEN(RAP$)+1)=STR$(DELAY) 
COJ 1180 GOSUB 420:GOTO 630 
YRJ 1190 TRAP 1190:KEY=KEYS:RESTORE 1350:READ LINE,TMP$:GOTO 1060 
YLJ 1200 DATA 5000,YOURE,YOU ARE,5010,I AM, IM,5020,CAN YOU,5030,CAN I 
AXJ 1210 DATA 5040,ARE YOU,5050,WOULD YOU,5060,WHY DONT YOU,5070,WHY SHOULD I 
QMJ 1220 DATA 5080,WHY CANT I,5090,I DONT,5100,I CANT,5110,I WILL NOT,I WONT 
NWJ 1230 DATA 5120,I WILL,5130,I COULDNT,5140,I FELL,5150,I THINK 
QCJ 1240 DATA 5160,I WANT TO,5170,I WANT,5180,I LIKE,5190,I LOVE,5200,I WOULD 
OPJ 1250 DATA 5210,I HATE,5220,I WISH,5230,WHO,5240,WHAT,5250,WHEN 
AWJ 1260 DATA 5260,WHERE,5270,WHY,5280,HOW,5290,NEVER,5300,SOMETIMES 
HDJ 1270 DATA 5310,USUALLY,5320,ALWAYS,5330,MAYBE,5340,CAUSE 
RBJ 1280 DATA 5350,YES, 5360, NO,5370,SAD,5380,HAPPY,5390,ANGRY,MAD 
WNJ 1290 DATA 5400,SICK,5410,SCARE,5420,DREAM,5430,PROBLEM,5440,LOVE 
UQJ 1300 DATA 5450,DOCTOR,BOSS,WIFE,HUSBAND,CHILD,SPOUSE,FATHER,MOTHER 
KNJ 1310 DATA 5460,FAMILY,KIDS,5470,MOVIE,5480,BOOK 
PYJ 1320 DATA 5490,POLITIC,5500,MUSIC,5510,SPORT,5520,MONEY,5530,COMPUTER 
HOJ 1330 DATA 5540,DEATH,5550,JOB,WORK,5560,SCHOOL 
OTJ 1340 DATA 5570,BYE 
IEZ 1350 DATA 5580,# 

RUN the program. The first display is the title screen, designed with the help of a slightly modified version of last month’s light pen program. You can press START at any time while this screen is being drawn to get to the next screen. Here you are asked if you want to record your conversation on a printer. It can be tremendously entertaining to look back at an entire conversation. Type Y or N for this prompt. If you don’t have a printer, of course, you cannot get a printout—sorry.

Now RAP will give you a few introductory statements and will display the triangle prompt for your input. You can say whatever you like; discuss a problem, talk about your fears, ask questions about the program itself, etc. RAP will do its best to respond to your statements. Remember, though, that RAP is just a computer program, so be forgiving with its occasional awkward grammatical use. There are a few “rules” to know when using RAP.

RESPONSE ANALYSIS PROGRAM — PART II 

IKJ 4960 DATA ARE,AM/,WERE,WAS/,YOU,I/,YOUR,MY/,IVE,YOU'VE,IM,YOU'RE,ME,YOU/ 
ILJ 4970 DATA AM,ARE/,WAS,WERE/,I,YOU/,MY,YOUR/,YOUVE,I'VE,YOURE,I'M,YOU,ME/ 
NLJ 4980 DATA OUR,YOUR/,WE,YOU/,YOURSELF,MYSELF/,MYSELF,YOURSELF/ 
KQJ 4990 DATA YOURS,MINE/,MINE,YOURS/ 
EBA 5000 DATA WHY DO YOU THINK I AM+? 
RTA 5001 DATA HAVE YOU EVER WANTED TO BE+? 
CTA 5002 DATA DO YOU REALLY BELIEVE THAT I'M+? 
EPG 5003 DATA DO YOU KNOW ANYONE ELSE WHO IS+? 
RTA 5010 DATA FOR HOW LONG HAVE YOU BEEN+? 
HMA 5011 DATA ARE YOU WORRIED BECAUSE YOU ARE+? 
MSA 5012 DATA DO YOU LIKE THAT YOU ARE+? 
TFG 5013 DATA ARE YOU HAPPY THAT YOU ARE+? 
UZA 5020 DATA DO YOU THINK I CAN+? 
RTA 5021 DATA WHAT MAKES YOU WANT TO KNOW IF I CAN+? 
OBH 5022 DATA ARE YOU ABLE TO+? 
UOA 5030 DATA WHY WOULDN'T YOU BE ABLE TO+? 
INA 5031 DATA ARE YOU SURE YOU REALLY WANT TO+? 
OEH 5032 DATA WHY DO YOU WANT TO KNOW IF YOU CAN+? 
YEA 5040 DATA DOES IT REALLY MATTER IF I AM+? 
CWA 5041 DATA WOULD YOU BE HAPPIER IF I WERE+? 
CQH 5042 DATA DO YOU OFTEN WONDER WHETHER OTHERS ARE+? 
GWA 5050 DATA WOULD YOU BE PLEASED TO HEAR THAT I WOULD+? 
GXA 5051 DATA I MIGHT JUST+. 
BLH 5052 DATA HOW WOULD YOU FEEL IF I WOULD+? 
NIA 5060 DATA DO YOU REALLY WANT ME TO+? 
VLA 5061 DATA WHY DO YOU FEEL THAT I DON'T+? 
OSH 5062 DATA IT IS POSSIBLE THAT SOMEDAY I WILL+. 
AWA 5070 DATA CAN YOU THINK OF A GOOD REASON WHY YOU SHOULDN'T+? 
SMI 5071 DATA HOW OFTEN DO YOU+? 
OWA 5080 DATA ARE YOU SURE YOU WANT TO+? 
ENA 5081 DATA WHAT MAKES YOU THINK YOU CAN'T+? 
VBH 5082 DATA HAVE YOU TRIED TO+? 
ISA 5090 DATA ARE YOU SURE YOU DON'T+? 
FJA 5091 DATA IN YOUR OPINION, WHY DON'T YOU+? 
MWA 5092 DATA DO YOU WANT TO+? 
QDG 5093 DATA IS IT IMPORTANT THAT YOU+? 
PFA 5100 DATA ARE YOU REALLY TRYING TO+? 
TMA 5101 DATA TELL YOURSELF THAT YOU CAN+! 
CYH 5102 DATA IS IT SO IMPORTANT FOR YOU TO+? 
KYA 5110 DATA WHY WON'T YOU+? 
NVI 5111 DATA TELL ME WHY YOU WILL NOT+. 
ASA 5120 DATA YOU SEEM QUITE POSITIVE THAT YOU WILL+. 
IVI 5121 DATA HOW WILL YOU+? 
SOA 5130 DATA WHY NOT? 
AYI 5131 DATA WHAT IF YOU WERE SOON ABLE TO+? 
DMA 5140 DATA HOW LONG HAVE YOU BEEN FEELING+? 
HDA 5141 DATA DO YOU WANT TO CONTINUE TO FEEL+? 
ALA 5142 DATA HOW ELSE DO YOU FEEL? 
GLG 5143 DATA DO YOU FIND THAT YOU OFTEN FEEL+? 
BUA 5150 DATA HAVE YOU ALWAYS THOUGHT THAT+? 
TUA 5151 DATA HOW DO YOU FEEL ABOUT THESE THOUGHTS? 
HFH 5152 DATA WHAT ELSE DO YOU THINK? 
EYA 5160 DATA DO YOU TRULY WANT TO+? 
DJA 5161 DATA ARE YOU SURE YOU CAN+? 
JKA 5162 DATA WHAT MAKES YOU WANT TO+? 
JSG 5163 DATA WOULD YOU BE HAPPY IF YOU GOT TO+? 
DTA 5170 DATA WHAT IF YOU CAN'T GET+? 
XVA 5171 DATA IS THAT WHAT YOU REALLY WANT? 
BYA 5172 DATA HOW WOULD YOU FEEL IF YOU SUDDENLY GOT+? 
JNG 5173 DATA DON'T OTHERS ALSO WANT+? 
KOA 5180 DATA HOW OFTEN DO YOU GET TO+? 
KEI 5181 DATA WHAT WOULD YOU GIVE TO+? 
XRA 5190 DATA WHEN DID YOU DECIDE YOU LOVE+? 
SJA 5191 DATA IS THAT LOVE REAL? 
DSH 5192 DATA HOW MUCH DO YOU LOVE+? 
SKA 5200 DATA WOULD YOU REALLY? 
MJI 5201 DATA WHY WOULD YOU+? 
YNA 5210 DATA SINCE WHEN HAVE YOU DISLIKED+? 
PMA 5211 DATA HOW STRONGLY DO YOU HATE+? 
HAH 5212 DATA YOU THINK IT IS HEALTHY TO HATE+? 
PUA 5220 DATA I'M SURE OTHERS ALSO WISH+. 
PZA 5221 DATA WOULD THAT MAKE YOU HAPPY? 
LVH 5222 DATA PERHAPS YOUR WISHES WILL SOON BE FULFILLED. 
YYA 5230 DATA WHO DO YOU SUPPOSE+? 
DVI 5231 DATA I'M NOT SURE I CAN TELL YOU WHO+. 
UWA 5240 DATA WHAT DO YOU THINK+? 
NTI 5241 DATA DO YOU THINK I KNOW WHAT+? 
OXA 5250 DATA I CAN'T KNOW EXACTLY WHEN+. 
VEI 5251 DATA WHEN DO YOU THINK+? 
FYA 5260 DATA I WOULDN'T KNOW WHERE+. 
NDI 5261 DATA DO YOU KNOW AT ALL WHERE+? 
AHA 5270 DATA I COULDN'T TELL WHY+? 
TAI 5271 DATA WHY DO YOU THINK+? 
VLA 5280 DATA DO YOU WONDER HOW+? 
YKI 5281 DATA DO YOU EXPECT ME TO KNOW HOW+? 
FCA 5290 DATA NEVER AT ALL? 
SWA 5291 DATA WHY NOT? 
SFH 5292 DATA GIVE IT SOME TIME. 
CQA 5300 DATA DO YOU WISH IT WERE MORE OFTEN? 
LGA 5301 DATA HOW OFTEN WOULD YOU SAY? 
LIH 5302 DATA WOULD YOU RATHER NEVER+? 
JJJ 5310 DATA HOW OFTEN NOT? 
FAJ 5320 DATA ALL THE TIME? 
AKA 5330 DATA YOU ARE APPARENTLY UNCERTAIN. 
CJA 5331 DATA DO YOU KNOW FOR SURE? 
RFA 5332 DATA COULD YOU BE MORE DEFINITE? 
TKG 5333 DATA I WISH YOU WOULD BE CERTAIN. 
CZA 5340 DATA IS IT REALLY BECAUSE+? 
KLI 5341 DATA IS THAT THE ONLY REASON - BECAUSE+? 
OCA 5350 DATA ARE YOU CERTAIN? 
QDA 5351 DATA THAT MAKES SENSE. 
QDA 5352 DATA YOU'RE POSITIVE? 
ETA 5353 DATA TELL ME MORE. 
KSA 5354 DATA I SEE. 
RGE 5355 DATA NOW I UNDERSTAND. 
QHA 5360 DATA REALLY? 
SUA 5361 DATA WHY NOT? 
GKA 5362 DATA I UNDERSTAND. 
HOG 5363 DATA WHY DON'T YOU THINK SO? 
RSA 5370 DATA NOBODY LIKES TO BE UNHAPPY. 
DHI 5371 DATA HOW DO YOU THINK THIS SADNESS COULD BE ELIMINATED? 
XOA 5380 DATA WE'RE ALL LOOKING FOR HAPPINESS, RIGHT? 
JFI 5381 DATA WHAT HAS MADE YOU REALLY CONTENT RECENTLY? 
HMA 5390 DATA IT'S UNHEALTHY TO BE ANGRY OFTEN. 
OBA 5391 DATA WHAT DOES ANGER DO TO YOU? 
NMH 5392 DATA SOMETIMES WE LOSE CONTROL WHEN WE ARE ANGRY. 
JBA 5400 DATA PERHAPS SOMEDAY WE WILL ELIMINATE ILLNESS. 
SRA 5401 DATA HOW WOULD YOU DESCRIBE THIS ILLNESS? 
HJH 5402 DATA LET'S HOPE FOR A SPEEDY RECOVERY. 
NLA 5410 DATA TELL ME ABOUT THESE FEARS. 
MII 5411 DATA WHAT ELSE WOULD BE SCARY? 
ROA 5420 DATA LET'S DISCUSS THESE DREAMS. 
THI 5421 DATA DOES THIS DREAM MEAN ANYTHING TO YOU? 
XMA 5430 DATA EXACTLY WHAT KIND OF PROBLEM? 
TLI 5431 DATA HOW DO YOU FEEL ABOUT THESE PROBLEMS? 
SGA 5440 DATA LOVE IS A POWERFUL EMOTION. 
VWA 5441 DATA TELL ME MORE ABOUT THIS LOVE. 
FUH 5442 DATA WHAT DOES THIS LOVE MEAN TO YOU? 
MLA 5450 DATA LET ME HEAR MORE ABOUT THIS PERSON. 
LOA 5451 DATA WHAT DO YOU REALLY THINK ABOUT THIS PERSON? 
OYA 5452 DATA WHAT COMES TO YOUR MIND WHEN YOU THINK OF THIS PERSON? 
EDG 5453 DATA WHAT WOULD YOU CHANGE ABOUT THIS PERSON? 
IHA 5460 DATA WHAT ELSE SHOULD I KNOW ABOUT YOUR FAMILY? 
VAI 5461 DATA COULD YOUR FAMILY CHANGE TO MAKE THINGS BETTER? 
BHA 5470 DATA WHAT MOVIE HAVE YOU SEEN MOST RECENTLY? 
PUI 5471 DATA I TAKE IT YOU USUALLY ENJOY MOVIES? 
DVA 5480 DATA HOW OFTEN DO YOU READ? 
MHA 5481 DATA WHAT BOOK WOULD YOU RECOMMEND FOR ME (IF I WERE HUMAN)? 
JJH 5482 DATA TELL ME ABOUT YOUR FAVORITE BOOK. 
SQA 5490 DATA DO YOU WANT TO TALK SERIOUSLY ABOUT POLITICS? 
HDI 5491 DATA LET'S HEAR YOUR POLITICAL VIEWS. 
PXA 5500 DATA HOW IMPORTANT IS THIS MUSIC TO YOU? 
TFA 5501 DATA DO YOU HAVE A FAVORITE SONG? 
YYH 5502 DATA TELL ME MORE ABOUT THIS MUSIC. 
KXA 5510 DATA DO YOU LIKE PLAYING OR WATCHING THAT SPORT? 
QMI 5511 DATA ARE YOU A FAN OF ANY PARTICULAR TEAM? 
SZA 5520 DATA IT SEEMS LIKE EVERYONE'S AFTER MONEY. 
FQA 5521 DATA IS MONEY THAT IMPORTANT TO YOU? 
BHH 5522 DATA LIFE IS INDEED MORE THAN MONEY. 
LQA 5530 DATA I HOPE YOU'RE NOT REFERRING TO ME IN ANY WAY. 
BNA 5531 DATA HAVE COMPUTERS AFFECTED YOUR LIFE SIGNIFICANTLY? 
XMH 5532 DATA MANY HAVE FEARS OF COMPUTERS. 
RUA 5540 DATA GIVE ME YOUR IDEAS ON DEATH. 
AEA 5541 DATA WOULD YOU TAKE THE OPPORTUNITY TO LIVE FOREVER? 
QGH 5542 DATA WE BECOME MORE REALISTIC ABOUT DEATH AS WE AGE. 
PXA 5550 DATA DO YOU KNOW MANY PEOPLE WHO ENJOY THEIR JOBS? 
WTI 5551 DATA TELL ME MORE ABOUT THIS WORK. 
LQA 5560 DATA WHAT WOULD YOU CHANGE ABOUT THIS SCHOOL IF YOU COULD? 
EXI 5561 DATA HOW DO YOU REALLY FEEL ABOUT THIS SCHOOL? 
UJJ 5570 DATA IT'S BEEN A PLEASURE TALKING WITH YOU. 
EVA 5580 DATA TELL ME MORE. 
SDA 5581 DATA THAT IS INTERESTING - GO ON. 
GTA 5582 DATA LET'S HEAR ALL ABOUT IT. 
PVA 5583 DATA EXPLAIN FURTHER. 
HTA 5584 DATA AND WHAT DO YOU THINK ABOUT THAT? 
VHA 5585 DATA I DON'T UNDERSTAND. 
KEA 5586 DATA WHAT ELSE SHOULD I KNOW? 
CJC 5587 DATA YOU SEEM UNCOMFORTABLE WITH THIS TOPIC. 
FSZ 5590 DATA END 

First, answer in one sentence at a time. Longer sentences are preferable since they give RAP more to work with. Unlike other BASIC artificial intelligence programs, there will not be any significant increase in the amount of time the program takes to respond with longer sentences. Since RAP uses a machine language subroutine to search your input for key words, both short and long sentences will take approximately the same amount of time to be processed; about seven seconds. But don’t go overboard; sentences longer than three lines will not be entered properly. Entering more than one sentence at a time or run-on sentences will make RAP more likely to give you a nonsensical response. Note that the screen goes blank while RAP thinks. This helps to speed up its response.

Second, RAP is more suited to understanding what you feel and what you do. It won’t necessarily understand if you talk about what your brother-in-law is doing, for example.

Third, the speed with which RAP “types” out its characters can be changed by typing “SPEED=” followed by a number from zero through 30. Zero is the fastest speed and eliminates the “typewriter” effect. Numbers above 30, such as 4000, will make you wait days for a response, so keep the number under 30. RAP will print out a confirmation of the new speed. The speed of processing your responses in not affected; only the speed at which the characters are printed is changed.

Fourth, be careful of what you say to RAP. Computer circuitry is extremely sensitive. Have fun!

Next Month

We’ll learn all about the workings of RAP and how to add additional key words and responses. We’ll also enter a few routines for June’s Mailing List program, and we’ll take a look at some more reader mail.

Reader’s questions, comments and original contributions are welcome. Please enclose a self-addressed, stamped envelope (SASE) for a personal reply.

A cassette or diskette of the programs listed in this month’s column is available from the author for $7.00, postpaid. Specify DOS 2 or DOS 3; when requesting a diskette.

Program Perfect is a utility used to check for typing errors in programs entered from this column. Readers may send a SASE for a listing or $5.00 for a cassette or diskette of this program.

Address all correspondence to:

Jeff Brenner’s
“Applying The Atari 9/85”
c/o Computer Shopper
P.O. Box F Titusville, FL
32781-9990
COMPUTER SHOPPER / OCTOBER 1985 / PAGE 63 

Applying The Atari

by Jeff Brenner

I hope you’ve given your fingers a rest since typing RAP, last month’s 304-line artificial intelligence program. This month we’ll discover how RAP works and learn how to add additional key words and responses. Our feature program for this month is a giant “analog” clock. The clock shows off an interesting aspect of the Atari’s graphics capabilities and keeps good time as well.

The 520ST vs. Amiga

At this writing Commodore’s Amiga computer has been officially announced and unveiled in New York City. Even I, an avid Atari fan, must admit that I was impressed with the Amiga’s features, most notably its sound and graphics capabilities. But while the Amiga can outperform the Atari 520ST in several areas, the Amiga costs a lot more than I expected. The story apparently goes as follows: The Commodore people wanted to release the Amiga at $895 retail, but they figured they could sell a lot more at $1295 (reaching the business market). So the price was raised $400. While this price is still lower than that of the Apple Macintosh (at least until the Mac’s expected price reduction comes), people who hesitate buying the Mac are probably looking for something a lot cheaper, such as the $800 Atari 520ST system. Compared to the Amiga, the ST includes twice the amount of memory and a monochrome monitor for almost $500 less. But then, what if there really is no longer a market for these more expensive, new generation, home computers? Will the millions of 8-bit home computer owners readily part with hundreds of dollars for a Mac-like 16/32-bit system? I think we 8-bit users and the software/peripheral market for 8-bit machines is here to stay for a while.

Reader Mail

Q. About your Computer Assisted Study program published in February 1985, please help. The program scrambles the question and answer data to or from the disk drive. I need a fix! This program is ideal for exams of just brushing up for our unit aviators. The program works fine until trying to reload the data. The questions and answers are then scrambled! I appreciate any help.

David A. Brown
A.P.O. New York

A. Many readers have written about this data scramble that occurs when reloading questions and answers. For a while I could not see any problem, since the program worked perfectly on the Atari 800 that I programmed it on. Yet I was surprised at the number of readers who were experiencing the same problem, which led me to believe that something other than readers’ typing errors was to blame. Even more interesting was that in all cases, those having this problem owned a 600XL or 800XL; apparently the scramble did not occur with Atari 800 or XE users. Sure enough, when I tried the program on an 800XL, I got the data scramble.

This scrambling of data is not caused by a bug in Computer Assisted Study, but rather by a bug in the Atari BASIC cartridge. A large number of XLs were manufactured with “revision B” of Atari BASIC. This revision contains an error which causes the scrambled data that you describe. This error does not exist in “revision A” BASIC of the Atari 400/800, nor in “revision C” BASIC, found on the 65XE/130XE and some XL units.

For all Atari 600XL or 800XL owners experiencing this data scramble problem, I highly recommend that you purchase a “revision C” BASIC cartridge from Atari, since this “scramble bug” is likely to interfere with some other BASIC programs and with your own BASIC programming. This BASIC plugs into the cartridge port of the XL and automatically disables the “revision B” BASIC. It’s $15.00, postpaid. Write to:

Atari Customer Relations
390 Caribbean Drive
Sunnyvale, CA 94088

Q. I am writing to find out if you can locate a company called Amiga. They manufactured a product called the “Power Stick.” It was a very small joystick that I found to be the best of ANY kind. Even though people made the remarks that it looks funny and how could a thing that small really work so good, after they tried it, they wanted one! I purchased one about a year ago and haven’t seen it in local stores, or advertised anywhere for quite some time. I am arthritic and most of the joysticks, especially if they have a stiff spring in them or if they are oversized, seem to give my hands and fingers cramps. But the “Power Stick” has just the right “feel” for most of my needs, and I think many other people could benefit by trying one. If they are still available, could you tell me where I might find another (nothing lasts forever). Can you also have more keypad control programs available, as there have been places selling the Atari CX85 very cheaply lately, without support software. I would like to be able to configure one to print commonly used key words in BASIC programs. Keep up the good work, with your excellent writings in a super magazine! I enjoy every issue.

Ken Rogers
Melrose, MA

A. I do remember a joystick called the “Power Stick,” but have not seen the product advertised for a long time. Amiga has since went on to bigger and better things.

About two years ago, the market was glutted with almost every conceivable type of joystick. Today, a variety is still available and chances are good that if you sample some at your local store, you may find one that will suit your needs. If any readers produce or know of a joystick comparable to the “Power Stick,” please write and let us know about it.

Regarding your request for more keypad control programs, such as one to print BASIC key words, this is a possibility. I don’t know how useful such a program would be, though, since Atari BASIC words can all be abbreviated. Watch for other keypad programs in future columns.

Q. I have a little question about ATASCII Lister (July’s column). I like to print out copies of my files and store the hard copy in typical three ring notebooks or file folders. My question is, how can I modify the program so that I have enough margin to punch holes for the notebook?

Also I have noticed one small bit of strange behavior on the part of your CX-85 Programmable Keypad program (August’s column). I like to change the ESCAPE key to DELETE. For some reason, the escape key seems to want to be “0.” In other words, if I press ESCAPE on the keypad, zero is changed. I found that I could stop this interaction by changing ESCAPE to ESC in data line 240. I don’t know why, but it seems to work. I typed in this file with Program Perfect and tried it on two computers and two different keypads just in case it was a hardware problem. Where did I go wrong?

I have been telling everyone that a subscription to the Computer Shopper is the cheapest Atari publication available with your column alone being worth the price of admission. ...Keep up the good work!

Aaron G. Todd, Jr.
Los Angeles, CA

A. Adding a left-hand margin to ATASCII Lister is a good idea. The program lines listed under the “ATASCII - Lister Additions” heading will do the trick.

ATASCII LISTER ADDITIONS 

35 DIM LM$ (188) 
145 PRINT "LEFT MARGIN: ";:INPUT #1;LM 
146 FOR I=1 TO LM:LM$(LEN(LM$)+1)=CHR$(32):NEXT I 
210 TRAP 270:PRINT #3;CHR$(27);CHR$(64);LM$;CHR$(27);D$;CHR$(L1);CHR$(H1); 
240 TRAP 270:PRINT #3;CHR$(27);CHR$(64);LM$;CHR$(27);D$;CHR$(L);CHR$(H); 

You add lines 35, 145 and 146 to the program, while you modify lines 210 and 240. On 210 and 240, an “LM$;” is slipped in. This moves the listing over to the desired position.

When you run the program with these additions, you’ll be asked to enter a “LEFT MARGIN” in addition to the other inputs. Entering “10” would give you ten spaces before each line of the listing. You can have a smaller or larger margin by entering a lesser or greater value.

Concerning the “0” that you get instead of the ESC on the keypad, this is not due to an error in the keypad program. The July and August columns mention that the SYSTEM RESET key must be pressed before the program is run for the first time.. This resets a register used by the joystick port. If you do not press SYSTEM RESET. before running the keypad program, you get the zero instead of the ESC, as you describe. The reason why it seemed that changing ESCAPE to ESC (in the program data) worked is because you probably pressed SYSTEM RESET at some time before running the program again.

RAP — How It Works

Before we learn how last month’s Response Analysis Program works, make one small correction in the program. On line 1230, change the “I FELL” to “I FEEL.” This misprint shouldn’t have caused you any trouble, although if you told RAP that you fell down, it would think that you were feeling down. It’s best to fix these things up.

Now we’ll get an idea of how RAP works, and we’ll learn how to add to its vocabulary.

Whenever you enter a line, RAP searches the entire sentence for key words. These key words are found in the data statements on lines 1200 through 1330 and on lines 4960 through 4990. RAP can quickly search the entire sentence for each one of these key words because it uses a machine language search subroutine.

The key words on lines 4960 through 4990 are used to change the verbs and pronouns in your input to the proper form for RAP’s response. For example, “I” is change to “YOU” and “AM” is changed to “ARE.” Hence an input containing a segment such as, “...THAT I AM TIRED OF...” can generate a response segment like, “... THAT YOU ARE TIRED OF...”

The key words on lines 1200 through 1330 are subject key words and are used to determine which response RAP should use. Lines 5000 through 5590 contain the responses. Segments of your input are added to responses having a “+” before the final punctuation mark. This serves to personalize RAP’s answers and is what makes some of the responses seem humanly intelligent.

When more than one subject key word is found in a sentence, the key word that appears first on data lines 1200 through 1330 usually has precedence, but a random element is used so that the second or even the third key word can be selected on occasion. Hence, RAP won’t always “interpret” similar sentences in the same way.

Adding Your Own Responses

The response segments on lines 5000 through 5590 are grouped according to their key words. Note that each key word on lines 1200 through 1330 is preceded by a number. This is the line number of the first data line containing the response for that key word. This line number is always divisible by ten (i.e. 5000, 5010,5020). Additional responses to the same key word follow this line in increments of one. When the first response is used for a key word and the same key word is found again at another time, the next response is used. For example, line 5000 contains the: first response for the key word “YOURE.” This response is, “WHY DO YOU THINK I AM...” If you type “YOURE SICK,” RAP would respond, “WHY DO YOU THINK IAM SICK.” (Apostrophes are automatically removed, so YOU’RE and YOURE are the same to RAP.) If you later type “YOU’RE CRAZY,” RAP would use the next response, on line 5001, and would say, “HAVE YOU EVER WANTED TO BE CRAZY.”

To add your own key words and responses, first pick a key word. We’ll use “I ATE” as an example. Find the next line (multiple of ten) that could be used for a response. This line is the last data line and has an END as the data. In this case, line 5590 is available. Add this line number and key word to the data in lines 1200 through 1340. Those key words near the beginning of the data have a higher precedence; those near the end have a lower precedence. We’ll put our “I ATE” in the middle, on line 1245:

1245 DATA 5590,I ATE 

Next, we must put the first response to this key word on line 5590. We’ll use the following line:

5590 DATA WHY DID YOU EAT+? 

By putting the slits after “EAT” the program will add on a grammatically modified segment of the input that follows the key word. Hence, an input such as “I ATE MY CHOCOLATE TELEPHONE?” will receive “WHY DID YOU EAT YOUR CHOCOLATE TELEPHONE?” as a response.

Now we can add up to nine additional responses on lines 5591 through 5599 for the same key word. We’ll add one more:

5591 DATA MAYBE YOU SHOULDN’T HAVE EATEN+. 

Now if the key word is entered again at a later time, as in “I ATE ANOTHER ONE OF THOSE PHONES.” RAP will respond, “MAYBE YOU SHOULDN’T HAVE EATEN ANOTHER ONE OF THOSE PHONES.”

A “DATA END” statement must follow the last data line of the program, so the next (multiple of ten) line 5600 should read as follows:

5600 DATA END 

More key words and their responses can be added in this manner. You can add as many as your computer’s memory allows. Just be sure that the last data line contains the DATA END. This last data line must be the very next multiple-of-ten line of the program. For example, if the last line of your data is 6354, make the DATA END line 6360—no greater.

You can also add more responses to key words already in the program by simply adding them as data lines. For example, additional responses for the first key word can be added as lines 5004 through 5009. When you add key words or additional replies, remember to think of all the possible uses of the key word and make sure the response covers as many uses of the key word as possible. The responses on lines 5000 through 5587 of RAP represent a lot of effort since they have been carefully chosen to work well with a wide variety of key word usages.

Mailing List Update

We don’t have room this month for the additions to June’s Mailing List program, but you’ll see them here next month. The additions include a search feature that can search by name, street name, city or zip code. Nine digit zip codes are supported. Additionally, an “ID #” feature will be added which allows you to instantly access a particular name and address with a six digit code that can be printed on the labels.

Meanwhile, you can make a few modifications to Mailing List which are listed under the “Mailing List Modifications” heading. These include the correction to the bug mentioned last month, for those who may have missed last month’s column.

As mentioned last month, line 935 will make the program print “NOT FOUND” instead of an error message when a name is not found. Line 345 enables the shift-delete key to function properly when the cursor is at the rightmost position. Lines 970 and 975 allow the program to find the last name instead of the middle name in entries with three or more names.

MAILING LIST MODIFICATIONS 

345 IF PEEK(85)=34-M AND K=156 THEN PRINT CHR$(K); 
935 TRAP 1000 
970 FOR I=LEN(NAME$) TO 1 STEP -1:IF NAME$(I,I)=CHR$(32) THEN NEXT I 
975 FOR I=I TO 1 STEP -1:IF NAME$(I,I)<>CHR$(32) THEN NEXT I 

Back Issue Diskettes

Many readers have asked about obtaining copies of previous columns and diskettes. I cannot provide reprints of previous columns, but Computer Shopper has mentioned offering these for a small fee. The reprints may have to be purchased in quantity (as for a user’s group). Write to Computer Shopper if you are interested in this.

Regarding “back-issue diskettes,” I will be offering these and documentation to readers and am in the process of compiling a list that will be sent to readers who have requested it. Any other readers who want this list should send a self-addressed, stamped envelope.

Super Clock

Analog watches are back in style after several years of a digital-dominated. Super Clock will give you the time in analog form, on the face of a full screen clock, and in digital form, in the center of the face while bands of color stream out from the center of the clock. It’s accurate enough to serve as a real time-piece, although I wouldn’t recommend leaving your computer on for more than a day. When guests arrive, let them be surprised to see your computer screen functioning as an analog clock. A unique aspect of this program is that it mixes color graphics and 40-column text on the same screen. This is done by spreading the Atari’s player-missile graphics across the width of the Graphics 0 text mode. Both the graphics and the text are really there, on the same screen and at the same time — this is no alternating screens trick. We’ll learn how this works next month.

Type in the program listed under the “Super Clock Listing” heading and RUN it. The screen will become dark for a few seconds as everything is set up and then the clock will be drawn. Enter the hour, minute and second as you would see it on a digital clock (i.e. 4:08:00). The minute and the second values must take up two spaces, so if either is less than ten, add a zero (for example, don’t enter 4:8:0). As soon as you press RETURN to enter the time, the clock begins. The “hands” are updated every second. Note how the hour hand moves along with the minute hand to create a realistic effect. Hence, at 5:30, the hour hand is between the five and the six, as on a real analog clock.

Pressing the space bar at any time lets you enter a new time.

Super Clock can easily be converted into an alarm clock (hey—good idea for a future column!) made to tick every second or to chime on the hour. Have fun!

Next Month

We’ll learn how Super Clock works, add routines to Mailing List, enter a program for the home, and answer more reader mail.

Reader’s questions, comments and original contributions are welcome. Please enclose a self-addressed, stamped envelope (SASE) for a personal reply.

A cassette or diskette of all programs listed in this month’s column is available from the author for $7.00, postpaid.

Program Perfect is a utility used to check for typing errors in programs entered from this column. Readers may send a SASE for a listing or $5.00 for a cassette or diskette of this program.

Address all correspondence to:

Jeff Brenner’s
“Applying The Atari 10/85”
c/o Computer Shopper
P.O. Box F
Titusville, FL 32781-9990
SUPER CLOCK 

UYJ 10 REM SUPER CLOCK 
KFJ 20 REM COPYRIGHT 1985 JEFF BRENNER 
WHJ 30 GRAPHICS 0:PRINT "STAND BY...":GOSUB 500:DIM TIME$(8),T1$(8) 
YRJ 40 A=USR(CLS):POKE 203,1:PRINT CHR$(125):XREF=19:YREF=92:FX=18:FY=84:DEG 
RMJ 50 FOR T=0 TO 360 STEP 30:POSITION 19+SIN(T)*16,11-COS(T)*9.75 
CDJ 60 PRINT T/30;:NEXT T 
CLJ 70 FOR T=0 TO 90 STEP 2 
PHJ 80 X=SIN(T)*FX:Y=COS(T)*FY 
HEJ 90 X2=XREF+X:Y2=YREF+Y 
AXJ 100 IF T=0 THEN XP=X2:YP=Y2:GOSUB 470:XP=38-X2:YP=183-Y2:GOSUB 470:OLDX=X2:OLDY=Y2:GOTO 180 
AHJ 110 XP=OLDX:YP=OLDY:GOSUB 470 
MBJ 120 XP=X2:YP=Y2:GOSUB 480 
NYJ 130 XP=38-OLDX:YP=183-OLDY:GOSUB 470 
ASJ 140 XP=38-X2:YP=183-Y2:GOSUB 480 
TDJ 150 XP=38-OLDX:YP=OLDY:GOSUB 470:XP=38-X2:YP=Y2:GOSUB 480 
WYJ 160 XP=OLDX:YP=183-OLDY:GOSUB 470:XP=X2:YP=183-Y2:GOSUB 480 
YAJ 170 OLDX=X2:OLDY=Y2 
YGJ 180 NEXT T 
TDJ 190 ST=PEEK(18)*65536+PEEK(19)*256+PEEK(20) 
LUJ 200 OXH=0:OYH=0:OXM=0:OYM=0:OM=-1:POSITION 2,22:T1$="0":POKE 764,255 
HMJ 210 POKE 752,0:TRAP 210:PRINT "TIME (EXAMPLE: 5:03:11)";:INPUT TIME$:POKE 20,0 
AFJ 220 POKE 19,0:POKE 18,0:TRAP 40000:POKE 752,1:POSITION 2,22:PRINT CHR$(156); 
CYJ 230 IF TIME$(2,2)=":" THEN T1$(LEN(T1$)+1)=TIME$:TIME$=T1$ 
VTJ 240 H1=VAL(TIME$(1,2)):M1=VAL(TIME$(4,5)):S1=VAL(TIME$(7,8)):FL=1 
TAJ 250 REF=(PEEK(18)*65536+PEEK(19)*256+PEEK(20))/59.923334 
SGJ 260 H=H1+INT(TIME/3600):REF=REF-3600*INT(TIME/3600) 
LCJ 270 M=M1+INT(REF/60):REF=REF-60*INT(REF/60):S=S1+INT(REF) 
QQJ 280 IF S>59 THEN M=M+1:S=S-60 
PPJ 290 IF M>59 THEN H=H+1:M=M-60 
ANJ 300 IF H>12 THEN H=H-12 
DJJ 310 POSITION 16,11:PRINT H;":";:IF M<10 THEN PRINT "0"; 
QTJ 320 PRINT M;":";:IF S<10 THEN PRINT "0"; 
KMJ 330 PRINT S;" "; 
VMJ 340 IF OM>-1 THEN IF OM<>M THEN GOSUB 400 
XKJ 350 OM=M:IF FL=1 THEN GOSUB 400 
SUJ 360 N=N+1:IF N<2 THEN GOTO 250 
TEJ 370 N=0:POKE 711,PEEK(704):POKE 707,PEEK(704):POKE 704,PEEK(705) 
ITJ 380 POKE 706,PEEK(705):POKE 705,S*4:IF PEEK(764)=33 THEN 200 
BSJ 390 GOTO 250 
DHJ 400 HA=30*(H+M/60):MA=6*M 
YZJ 410 IF FL=0 THEN POKE 203,0:XP=OXH:YP=OYH:GOSUB 490 
BAJ 420 IF FL=0 THEN XP=OXM:YP=OYM:GOSUB 490 
SBJ 430 POKE 203,1:XP=XREF+SIN(HA)*FX/2.2:YP=YREF-COS(HA)*FY/2.2:GOSUB 490 
UUJ 440 OXH=XP:OYH=YP 
TAJ 450 XP=XREF+SIN(MA)*FX/1.2:YP=YREF-COS(MA)*FY/1.2:GOSUB 490 
DZJ 460 OXM=XP:OYM=YP:FL=0:RETURN 
YMJ 470 A=USR(PLOT,XP,YP):RETURN 
FDJ 480 A=USR(DRAWTO,XP,YP):RETURN 
OLJ 490 A=USR(PLOT,XREF,YREF):A=USR(DRAWTO,XP,YP):RETURN 
JFJ 500 REM ATARI GRAPHICS OVERLAY SUBROUTINE 
MEJ 510 REM COPYRIGHT 1984 JEFF BRENNER 
TOJ 520 DIM PL$(100),DR$(300),CLS$(24) 
NDJ 530 FOR I=1 TO 91:READ NUM:TOT=TOT+I+NUM:PL$(I,I)=CHR$(NUM):NEXT I 
FFJ 540 POKE 559,0 
PDJ 550 FOR I=1 TO 198:READ NUM:TOT=TOT+I+NUM:DR$(I,I)=CHR$(NUM):NEXT I 
PUJ 560 FOR I=1 TO 24:READ NUM:TOT=TOT+I+NUM:CLS$(I,I)=CHR$(NUM):NEXT I 
HLJ 570 POKE 559,34 
TUJ 580 IF TOT<>69182 THEN PRINT "CHECK DATA LINES 770-1220":STOP 
BDJ 590 LET PLOT=ADR(PL$) 
GFJ 600 LET DRAWTO=ADR(DR$) 
OYJ 610 CLS=ADR(CLS$) 
IFJ 620 I=PLOT+27:H=INT(I/256):L=I-H*256 
SRJ 630 DR$(180,180)=CHR$(L):DR$(181,181)=CHR$(H) 
TMJ 640 DR$(194,194)=CHR$(L):DR$(195,195)=CHR$(H) 
AUJ 650 IF PEEK(106)/32>INT(PEEK(106)/32) THEN 670 
XVJ 660 POKE 106,PEEK(106)-16:GRAPHICS PEEK(87) 
ENJ 670 GOSUB 710 
SIJ 680 I=PEEK(106)*256:H=INT(I/256):L=I-H*256 
GKJ 690 POKE 204,L:POKE 205,H 
AXJ 700 RETURN 
CBJ 710 POKE 54279,PEEK(106):POKE 711,0 
NBJ 720 POKE 559,62:POKE 53277,3:POKE 623,17 
YNJ 730 FOR I=53256 TO 53259:POKE I,3:NEXT I:POKE 53260,255 
YIJ 740 FOR I=0 TO 5:POKE 53248+I,80+I*32:NEXT I 
EIJ 750 FOR I=0 TO 3:POKE 53252+I,48+(3-I)*8:NEXT I 
BDJ 760 RETURN 
UJJ 770 DATA 104,104,104,048,081,201,040 
VBJ 780 DATA 176,077,105,024,133,206,104 
UPJ 790 DATA 104,201,000,144,069,201,192 
UZJ 800 DATA 176,065,105,032,133,207,166 
VKJ 810 DATA 205,165,206,074,074,074,168 
URJ 820 DATA 240,007,166,205,230,205,136 
UIJ 830 DATA 208,251,010,010,010,056,229 
VMJ 840 DATA 206,073,255,168,169,128,200 
VAJ 850 DATA 240,004,074,136,208,252,164 
USJ 860 DATA 203,240,007,164,207,017,204 
VOJ 870 DATA 056,176,006,164,207,073,255 
VDJ 880 DATA 049,204,145,204,134,205,056 
UWJ 890 DATA 176,004,104,104,104,104,096 
TYJ 900 DATA 104,104,104,048,111,201,040 
UYJ 910 DATA 176,107,105,024,133,097,104 
TWJ 920 DATA 104,201,000,144,100,201,192 
VJJ 930 DATA 176,096,105,032,133,096,162 
UNJ 940 DATA 000,134,214,134,217,232,134 
VNJ 950 DATA 219,134,215,134,216,165,097 
VXJ 960 DATA 056,229,206,176,009,198,216 
WDJ 970 DATA 198,216,165,206,056,229,097 
VPJ 980 DATA 133,212,165,096,056,229,207 
WFJ 990 DATA 176,009,198,215,198,215,165 
WWJ 1000 DATA 207,056,229,096,133,213,165 
WPJ 1010 DATA 212,197,213,176,023,166,212 
WGJ 1020 DATA 165,213,133,212,138,133,213 
WOJ 1030 DATA 165,216,133,214,165,215,133 
WKJ 1040 DATA 217,169,000,133,216,133,215 
WRJ 1050 DATA 165,212,074,133,218,165,212 
WWJ 1060 DATA 240,070,208,006,056,176,076 
WVJ 1070 DATA 056,176,075,165,206,024,101 
WKJ 1080 DATA 216,133,206,165,207,024,101 
WYJ 1090 DATA 217,133,207,230,219,165,218 
VZJ 1100 DATA 024,101,213,133,218,165,212 
XEJ 1110 DATA 197,218,176,021,165,218,056 
WOJ 1120 DATA 229,212,133,218,165,206,024 
WEJ 1130 DATA 101,214,133,206,165,207,024 
WOJ 1140 DATA 101,215,133,207,165,212,197 
VYJ 1150 DATA 219,144,006,032,000,000,056 
XNJ 1160 DATA 176,194,165,096,133,207,165 
WGJ 1170 DATA 097,133,206,076,000,000,104 
KAJ 1180 DATA 104,096 
WRJ 1190 DATA 104,165,106,133,209,169,000 
WBJ 1200 DATA 133,208,162,016,160,000,145 
WCJ 1210 DATA 208,200,208,251,230,209,202 
SGZ 1220 DATA 208,244,096 
COMPUTER SHOPPER / NOVEMBER 1985 / PAGE 63 

Applying The Atari

by Jeff Brenner

With Thanksgiving Day this month and the holiday season approaching, lots of you will appreciate this month’s feature program — a recipe manager/calculator. This month’s column also brings the Mailing List additions that I promised and ties up some loose ends on the numeric keypad program.

New Listings

Whenever a lengthy program is listed in this column, I get letters complaining about the difficulty of typing them in. One clever reader, John M. Doyle (Atlanta, GA), even sent in a miniature letter to make his point (see Letter 1).

The Weather Channel Some Unreadable Address Suite 300 Atlanta, Georgia (xxx) xxx-xxxx August 13, 1985 Dear Jeff, I suspect this is a little hard on your eyes, but I wonder if you realize how very, very small the listings in “Computer Shopper” suddenly become where it’s time to TYPE it in! — Especially the three-letter codes that preceed the line! I’m in the process of typing in “RAP”, and had to redo several lines, not because of a code error, but because it is almost IMPOSSIBLE to tell Ms, Ws and Ns apart in the three-letter prefix. Your comments and programs are very interesting. I have been an Atari fan for close to four years and know just enough about programming to be dangerous. I’m one of the on-camera guys here at the Weather Channel (based in Atlanta), and believe me, doing NATIONAL weather will certainly give you a broad outlook. I’m on afternoons and evenings, Eastern time. Tune in if you have a chance. Keep up the great programs... and ENLARGE those listings! Sincerely, John M. Boyle
Letter 1
(Actual Size)

As I have mentioned in the past, after I submit the program listings for publication, they’re at the mercy of the editorial department, which shrinks listings to fit into the available space. Program Perfect was developed to help readers enter programs accurately despite the small size, but apparently the smaller Program Perfect codes become almost unreadable when they are reduced. This month, I have implemented two changes in the program listings: The Program Perfect codes are larger than usual, and the program lines have been spaced further apart. Let’s hope this makes program entry a little easier until we can get more space for listings. If any readers’ have other suggestions for making the listings more readable, please let me know.

Newsletters

Two more Atari users’ groups newsletters came in the mail recently. The S.T.A.T.U.S. Newsletter is printed by the Southside Tidewater Atari Technical Users Society (4836 Honeygrove Road, Virginia Beach, VA 23455). The CAUG Newsletter is printed by the Charlotte Atari Users Group (5911 Brookhaven Road, Charlotte, NC 28210). Both of these users’ groups participate in a newsletter exchange program — they will send a copy of their newsletter to any group that sends in its newsletter. This is a great idea as it allows groups to exchange information and ideas and to see what is going on with other Atari users’ groups across the country.

Info From Readers
And BeyondQues

The mail for this month brings answers and updates to all the questions published in September’s column. Jim Cassout had asked about the driver routine to make his printer more compatible with AtariWriter. I suggested a “Printer Formatted Data Disk” from At-A-Glance. Thanks to Gordon C. Willis (Morehead City, NC) for informing me that the original author of the printer driver routines is making them available for $10 each, postpaid. Gary W. Furr (P.O. Box 1073, Mountain View, Ca 94042) has driver routines for over 60 printers. If you have been unable to get a printer driver for your particular printer, there’s a good chance that Mr. Furr will have one that’s compatible.

Darwin K. Garrison’s letter had asked about a genealogical program for Atari computers. Thanks to Leo H. Kordsmeier, Jr. (Little Rock, AR) and to Al Crespo (Bakersfield, CA) for writing to tell me about The Family Tree by Harry Koons. Mr. Crespo says that “you can record and access six generations and save up to 24 generations on one disk.” The program also lets you print out your pedigree charts. The Family Tree is $19.95 plus $3.00 shipping from Antic Publishing (524 Second Street, San Francisco, CA 94107). Additionally, Dan Sweda (Brookville, OH), treasurer of the A-BUG-BYTE users’ group, says his group has a genealogical program available for $5.00, postpaid. That’s from A-BUG-BYTE (10790 W. National Road, Brookville, OH 45309).

In September’s column, Terry Joslin asked how to access the full 128K RAM on the Atari 130XE. Atari itself provided the answer by sending me the DOS 2.5 disk, which contains a routine that lets you use the 130XE’s extra memory as a RAM disk. Unlike DOS 3, DOS 2.5 supports both single and enhanced density modes and is compatible with DOS 2. DOS 3 owners can obtain DOS 2.5 by sending the DOS 3 diskette to Atari (Atari Customer Relations, P.O. Box 61657, Sunnyvale, CA 94088). There is no charge for the swap. The DOS 2.5 diskette also contains a utility to convert DOS 3 files to DOS 2.5, so your DOS 3 files can be made fully compatible with DOS 2.5. A small booklet, included with DOS 2.5, summarizes the various options available on DOS 2.5. More detailed instructions are in the ATARI DOS 2.5 Manual available from the Atari address above for $10 plus $2.50 shipping.

Atari 130XE Word Processors

In addition to a utility on the new DOS 2.5 diskette that allows the use of the Atari 130XE’s full memory, two 130XE-compatible word processors should be available this month. AtariWriter Plus, from Atari, contains a 48K/64K version on one side of the diskette and a 128K version on the other side. It features a built-in spelling checker, a mailmerge data base, double column printing and a printer driver editor so you can make the program compatible with your printer. It’s under $50. PaperClip, from Batteries included (17875 Sky Park North, SuitP, Irving, CA 92714), will be available in a 130XE version. For $10, owners of the 48K PaperClip can trade it in for the 130XE version.

Numeric Keypad Problem Resolved

In the July and August columns, I published three programs for the numeric keypad. While the programs worked fine on the older Atari 400 and 800, there was a problem on the XL and some XE machines. The ESC key was being read as a zero. Strike one. In my haste to correct the problem and to end a flood of letters from readers who “tried typing in the program eight times on two different computers and with three different keypads,” I published in October’s column what I believed to be a simple solution. A little further testing however, revealed that this did not completely fix the problem — any key pressed after the ESC key would be read as the ESC key. Strike two. I get one more chance, right? This time I am presenting a completely rewritten keypad program that will read the ESC key perfectly. In addition, the new program allows the numeric keypad’s keys to respond better, so we’re not just making corrections — we’re making improvements! The new keypad program responds to a key that has been pressed before the previous one had been fully released. This could happen if you entered, say, the numbers four, five, and six in a row very quickly. As soon as the previous key is released, the character for the new key is displayed. On the older keypad programs, any key pressed before the previous one was released would be ignored.

The program listed under Keypad Program 3 takes the place of Program 1 and Program 2 in July’s column. To make Program 3 read the Y key as a comma (as Program 2 did so that you can enter data lines easily), change line 160 to:

160 DATA 32 

Programmable Keypad Revision contains the lines to be changed on August’s Programmable Keypad program for this correction. If you’re using Program Perfect, first enter lines 90 through 220. When Program Perfect erases itself from memory, LIST“C:” (for cassette) or LIST“D:TEMP” (for diskette) the program. Next, load in the old Programmable Keypad program. Type ENTER “C:” or ENTER “D:TEMP” and the new lines will automatically be merged with the old program. Now you can SAVE the revised program on cassette or disk.

KEYPAD PROGRAM 3 

FOJ 10 REM NUMERIC KEYPAD PROGRAM #3 
KFJ 20 REM COPYRIGHT 1985 JEFF BRENNER 
JWJ 30 TOT=0:FOR I=1536 TO 1616:READ NUM 
OOJ 40 POKE I,NUM:TOT=TOT+I+NUM:NEXT I 
TDJ 50 IF TOT=134774 OR TOT=134789 THEN A=USR(1536):END 
FBJ 60 PRINT "ERROR - CHECK DATA":END 
PFJ 70 DATA 104,162,6,160,10,169,7,76 
QWJ 80 DATA 92,228,174,132,2,240,5,202 
UKJ 90 DATA 134,204,240,40,174,120,2,228 
WSJ 100 DATA 206,208,4,165,204,208,29,165 
WCJ 110 DATA 205,240,4,198,205,240,21,230 
XVJ 120 DATA 204,134,206,230,205,173,113,2 
QPJ 130 DATA 201,1,240,2,162,16,189,63 
PLJ 140 DATA 6,141,252,2,76,98,228,52 
HUJ 150 DATA 24,29,27,35,51,53,48 
XMJ 160 DATA 43 
MRJ 170 DATA 31,30,26,50,34,12,14,28 
BEZ 180 DATA 155 
PROGRAMMABLE KEYPAD REVISION 

WVT 90 IF TOT=136785 THEN A=USR(1536):GOTO 250 
KZJ 110 DATA 104,162,6,160,10,169,7 
NHJ 120 DATA 76,92,228,174,132,2,240 
ONJ 130 DATA 5,202,134,204,240,40,174 
MYJ 140 DATA 120,2,228,206,208,4,165 
PAJ 150 DATA 204,208,29,165,205,240,4 
SQJ 160 DATA 198,205,240,21,230,204,134 
QJJ 170 DATA 206,230,205,173,113,2,201 
JLJ 180 DATA 1,240,2,162,16,189,63 
JZJ 190 DATA 6,141,252,2,76,98,228 
HLJ 200 DATA 52,24,29,27,35,51,53 
HDJ 210 DATA 48,43,31,30,26,50,34 
RVZ 220 DATA 12,14,28,155 

Mailing List Enhancements

June’s Mailing List program has generated an enormous amount of interest, and this month we have additional routines for this program to make it even more practical.

Part I contains changes that are to be made in existing lines. Load the original Mailing List and type in the lines listed in Part I. Part II contains lines to be added to the program. Type in these lines. Once Part I and Part II have been entered, LIST“C:” or LIST “D:TEMP” the program.

Now, enter lines 1380 through 1800 listed under Part III. If you have Program Perfect, you can use it to enter these lines. When all lines have been entered, ENTER “C:” or ENTER “D:TEMP” the rest of the program to merge it with Part III. Now you can SAVE the complete updated Mailing List, which we’ll call Mailing List II.

Using Mailing List II

Now, when adding names, you won’t have to constantly respond to the “MORE NAMES (Y/N)” prompt. The program will automatically assume that you are adding more names. When you are finished adding names, press the ESC key and you’ll be returned to the main menu.

PART I 

140 RESTORE 160:FOR I=1 TO 6:READ A$:PRINT CHR$(ASC(A$)+128);A$(2,LEN(A$)) 
160 DATA ADD NAMES,EDIT,LIST NAMES,PRINT,FREE DISK MEMORY,SEARCH 
210 PRINT :ON I GOTO 230,650,1040,1120,1350,1380 
370 IF K=27 AND CC<2 THEN 610 
600 IF K<>27 THEN 630 
690 PRINT E$;"CYCLE OR ID$ (C/I)?";:GET #1,Q:PRINT CHR$(Q):IF Q=67 THEN 710 
700 IF Q>73 THEN PRINT CHR$(156);:GOTO 680 
940 GOSUB 1740:INPUT #2;S,B,NAME$,ADDR$,CSZ$,CAT$ 
970 FOR I=LEN(NAME$) TO 1 STEP -1:IF NAME$(I,I)=CHR$(32) THEN NEXT I 
990 PRINT "FOUND":GOTO 1640 
1000 PRINT :PRINT "NOT FOUND":GOTO 1090 
1050 GOSUB 1740:NOTE #2,S,B:INPUT #2;I,I,NAME$,ADDR$,CSZ$,CAT$ 
1070 PRINT "PRINT "  ID #";ID$:PRINT NAME$:IF PEEK(764)=28 THEN 1100 
1240 GOSUB 1740:INPUT #2,S,B,NAME$,ADDR$,CSZ$,CAT$ 
1270 IF Q=0 THEN NAME2$=NAME$:ADDR2$=ADDR$:CSZ2$=CSZ$:GOTO 1285 
1340 NAME$=NUL$:TRAP 1330:Q=0:GOTO 1285 
PART II 

45 DIM ID$(6),ID2$(6) 
295 CC=0 
345 IF PEEK(85)=34-M AND K=156 THEN PRINT CHR$(K); 
355 IF K>47 AND K<58 THEN 330 
375 IF K=27 THEN POKE 84,15:POKE 85,2:GOTO 480 
702 TRAP 680 
705 PRINT "ENTER 6-DIGIT ID: ";:INPUT #3;A$:IS=VAL(A$(1,3)):IB=VAL(A$(4,6)) 
706 POINT #2,IS,IB 
935 TRAP 1000 
945 NAME2$=NAME$:ADDR2$=ADDR$:CSZ2$=CSZ$ 
975 FOR I=I TO 1 STEP -1:IF NAME$(I,I)<>CHR$(32) THEN NEXT I 
1175 PRINT :PRINT "PRINT FROM WHAT ID# (0=START)";:INPUT ID$ 
1176 ID1=0:IF LEN(ID$)=6 THEN ID1=VAL(ID$(1,3)):ID2=VAL(ID$(4,6)) 
1185 PRINT :PRINT "PRINT ID NUMBERS (Y/N)";INPUT Q$:IF Q$="Y" THEN VS=VS-1 
1235 IF ID1>0 THEN POINT #2,ID1,ID2 
1265 IF Q=0 THEN ID2$=ID$ 
1275 IF LEN(NAME2$)=0 THEN ID2$=ID$ 
1282 IF Q<>"Y" THEN 1290 
1285 PRINT #5;SP$(1,5);ID2$(SP$(12);:IF Q THEN PRINT #5;SP$(1,HS+5);ID$; 
1286 PRINT #5 

You’ll notice on the menu the addition of another option — SEARCH. When you choose this option, another menu appears which asks if you want to search by name, street, city or zip code. The name search functions the same as it did on the original program. However, whenever a name (or street, city, or zip) is found, you are asked if you want to edit that entry or if you want to continue searching for another match. With any search, you can enter only a part of what you want to find and the program will pick out all items that match that part. For example, if your address is 10 MAIN STREET, but you can’t remember whether it was 10 MAIN STREET or 10 MAIN ROAD, just enter “10 MAIN.” All address entries beginning with “10 MAIN” will be displayed one at a time. This technique can also be used when searching by zip code. Searching for the five digits of a zip code will also display any nine-digit codes that match those first five digits.

When searching for an entry, remember to use the same format, (all-capitals or capital and lower-case letters), as you used when you originally entered the entry. For example, if you search for “Computer Shopper,” the program can not find “Computer Shopper” so be sure to stay with one form or the other.

Another feature added is a six-digit identification code. This code is actually composed of the byte and sector number of the location on the disk where the particular name and address is being stored. Hence, by referring to the six-digit code, the program can instantly access any name on the disk without having to look through each name.

Whenever you choose the LIST NAMES option from the main menu, each name will be listed with its respective six-digit code. You could then jot down codes that you want to refer to later.

When you select the EDIT option, Mailing List II will ask you if you want “CYCLE or ID#.” The CYCLE option works as it did before — it lets you move back and forth among the addresses on your disk with the “▲” and “>” keys. You can freely change information on the names and addresses as you move through the entries. The ID# option enables you to enter the six-digit code to gain instant access to a particular name/address.

The PRINT option now has two additional features. You can enter an ID# from which to begin printing address labels. Hence, if you only want to print labels for, say, the last ten names you have entered, you would simply enter the six-digit code for the tenth to last name/address. Additionally, you’re given the option of printing the six-digit codes on the labels themselves. Many mailing list programs used by businesses have this feature. A client who responds to a mailout is asked to give his code numbers, or to return a form with this code number printed on it. When the business receives the response, the number can be used to instantly call up the client’s file, or to generate a new label.

PART III 

DUJ 1380 TRAP 670:OPEN #2,12,0,FILE$:NOTE #2,IS,IB 
WGJ 1390 CLOSE #5:OPEN #5,4,0,FILE2$:INPUT #5;FS,FB,FS,FB 
WSJ 1400 FOUND=0:PRINT "SEARCH BY":RESTORE 1420:PRINT :FOR I=1 TO 4:READ A$ 
CJJ 1410 PRINT CHR$(ASC(A$)+128);A$(2,LEN(A$)):PRINT :NEXT I 
CBJ 1420 DATA NAME,STREET,CITY,ZIP 
TMJ 1430 POKE 694,0:POKE 702,64:PRINT CHR$(156);"SELECT: ";:GET #1,Q 
VDJ 1440 IF Q=78 THEN 890 
TRE 1450 IF Q<>83 AND Q<>67 AND Q<>90 THEN 1430 
EAE 1455 PRINT :PRINT "FIND: ";:INPUT #3;A$:POINT #2,IS,IB 
OPJ 1460 TRAP 1710:NOTE #2,ST,BT 
QUE 1470 GOSUB 1740:INPUT #2;S,B,NAME$,ADDR$,CSZ$,CAT$ 
WNE 1475 NAME2$=NAME$:ADDR2$=ADDR$:CSZ2$=CSZ$ 
ZAJ 1480 IF Q<>83 THEN 1530 
WEJ 1490 A=ASC(ADDR$):IF LEN(ADDR$)<3 THEN 1505 
GWE 1500 IF A>47 AND A<58 OR A=32 THEN ADDR$=ADDR$(2,LEN(ADDR$)):GOTO 1490 
ETE 1505 IF LEN(ADDR$)<LEN(A$) THEN 1460 
QZJ 1510 IF ADDR$(1,LEN(A$))=A$ THEN GOTO 1640 
FKJ 1520 GOTO 1460 
ACJ 1530 IF Q<>67 THEN 1570 
OPJ 1540 FOR I=1 TO LEN(CSZ$):IF CSZ$(I,I)<>CHR$(32) THEN NEXT I 
LWE 1550 IF I>1 AND I<LEN(CSZ$) THEN CSZ$=CSZ$(1,I-1) 
QSA 1555 IF CSZ$(LEN(CSZ$))=CHR$(44) THEN CSZ$=CSZ$(1,LEN(CSZ$)-1) 
DHD 1556 IF LEN(CSZ$)<LEN(A$) THEN 1460 
PIE 1560 IF CSZ$(1,LEN(A$))=A$ THEN GOTO 1640 
FOE 1565 GOTO 1460 
HXJ 1570 IF CSZ$(LEN(CSZ$))<>" " THEN 1590 
AZJ 1580 FOR I=LEN(CSZ$) TO 1 STEP -1 
JTJ 1590 IF CSZ$(I,I)<"0" OR CSZ$(I,I)>"9" THEN NEXT I:GOTO 1460 
XMJ 1600 FOR I=I TO 1 STEP -1:IF CSZ$(I,I)<>" " THEN NEXT I:GOTO 1460 
QEE 1610 CSZ$=CSZ$(I+1,LEN(CSZ$)) 
DEE 1615 IF LEN(CSZ$)<LEN(A$) THEN 1460 
PKJ 1620 IF CSZ$(1,LEN(A$))=A$ THEN GOTO 1640 
FMJ 1630 GOTO 1460 
PMJ 1640 FOUND=1:PRINT "ID#";ID$ 
ANJ 1650 PRINT NAME2$:PRINT ADDR2$:PRINT CSZ2$:PRINT CAT$:PRINT 
VQE 1660 PRINT "<E>DIT, <C>ONTINUE SEARCH, <M>ENU?";:GET #1,A:PRINT CHR$(A) 
LWE 1665 IF (Q=76 OR Q=70) AND A=67 THEN 940 
WHJ 1670 IF A=67 THEN 1470 
KZJ 1680 IF A=69 THEN PRINT CHR$(125):POKE 84,20:POINT #2,ID1,ID2:GOTO 730 
YUJ 1690 IF A<>77 THEN 1660 
DHJ 1700 GOTO 130 
KHJ 1710 IF FOUND=0 THEN PRINT :PRINT "NOT FOUND":GOTO 1730 
YOJ 1720 PRINT :PRINT "END OF DATA" 
LEJ 1730 A$="PRESS ESC FOR MENU":GOSUB 640:PRINT A$:GOTO 1100 
HYJ 1740 NOTE #2,ID1,ID2:ID$="" 
JEJ 1750 IF ID1<100 THEN ID$="0" 
HNJ 1760 IF ID1<10 THEN ID$(LEN(ID$)+1)="0" 
PHJ 1770 ID$(LEN(ID$)+1)=STR$(ID1) 
JMJ 1780 IF ID2<100 THEN ID$(LEN(ID$)+1)="0" 
HRJ 1790 IF ID2<10 THEN ID$(LEN(ID$)+1)="0" 
LKZ 1800 ID$(LEN(ID$)+1)=STR$(ID2):RETURN 

Recipe Program

This month’s feature program is Recipe Manager. Recipe Manager can store your favorite recipes in electronic form. As you browse through recipes on your screen, you can pick one and print it on the printer. Two additional features will be added to the program next month, as there was not enough room to include them this month. (Those who request a diskette of this program will receive the entire program in one part.) The two features that will be listed here next month are the FIND CATEGORY/RECIPE option, which lets you search for a particular category of recipe or recipe name, and the CALCULATE RECIPE option. This interesting option will automatically double, triple, halve, etc. the measurement of ingredients of any recipe so that you may instantly adjust recipes for different quantities. You can then print out the recalculated recipe and take it into the kitchen. If you select these options with this month’s listings, you’ll get a “THAT COMMAND IS NOT AVAILABLE YET” message.

Use Program Perfect to type in Recipe Manager. Since the program stores recipes on the diskette, you’ll want to save the program on a blank diskette so you’ll have as much room as possible for storing recipes.

When you RUN the program, you’ll get a specially designed Graphics 0 screen. The top two and bottom two text lines are dark, while the remaining lines are blue. The blue center is where the recipes are typed. This is a mini-screen in itself, consisting of 20 lines of 36 characters each. The top two lines display the Recipe Manager title and the particular menu function currently being used. The bottom two lines are prompt lines and tell you what keys are active (i.e. PRESS RETURN TO PRINT THE RECIPE) or special messages (i.e. NO RECIPE FILE ON DISK-ADD RECIPES). These lines also display the menu options: ADD, BROWSE/EDIT, FIND, PRINT, CALCULATE. The ADD, BROWSE/EDIT and PRINT options can be used with this month’s listing.

When you run the program for the first time, you’ll want to add recipes. When you press A (for ADD) the cursor moves to the recipe screen and you’re asked to enter a CATEGORY. Type the category that you want to place the particular recipe in, such as appetizers, soups, main dishes, holiday recipes, etc. Next you’re asked to enter the RECIPE NAME. Be sure to use capital letters only when entering the CATEGORY and NAME so that you will be able to search for a particular category or recipe.

RECIPE MANAGER 

DAJ 10 REM RECIPE MANAGER 
KFJ 20 REM COPYRIGHT 1985 JEFF BRENNER 
YGJ 30 DIM SP$(36),FILE$(15),FILE2$(15),A$(40),LF$(1),Q$(1),F$(20) 
ORJ 40 DIM LINE$(36),DE$(2),CL$(60),MV$(2),S$(1) 
JGJ 50 FILE$="D:RECIPE.DAT":FILE2$="D:RECIPE.PNT" 
WYJ 60 A$=CHR$(32):A$(2,2)=CHR$(29):A$(3,3)=CHR$(30):S$=CHR$(32) 
KAJ 70 CL$=A$:FOR I=1 TO 19:CL$(LEN(CL$)+1)=A$:NEXT I 
EQJ 80 SP$(1)=S$:SP$(36)=S$:SP$(2)=SP$:LF$=CHR$(155) 
OJJ 90 DE$=CHR$(156):DE$(2,2)=CHR$(157):MV$=CHR$(30):MV$(2,2)=CHR$(31) 
LFJ 100 OPEN #1,4,0,"K:":OPEN #3,4,0,"E:":OPEN #4,9,0,"E:":GOSUB 1620 
BMJ 110 POKE 53277,3:POKE 53248,48:POKE 53277,0:POKE 53261,255 
UIJ 120 POKE 53249,200:POKE 53262,255 
DGJ 130 GOTO 1330 
NVJ 140 GOSUB 1190:TRAP 610:OPEN #2,12,0,FILE$:SKP=IS 
FUJ 150 IF IS=0 THEN NOTE #2,IS,IB:PRINT CHR$(125);:GOTO 170 
QVJ 160 POINT #2,IS,IB 
TQJ 170 OPEN #5,4,0,FILE2$:INPUT #5;X,X,FS,FB 
VWJ 180 PRINT CHR$(125);:GOSUB 1100:GOSUB 1190 
DFJ 190 ST=IS:BT=IB:NOTE #2,IS,IB:INPUT #2;S,B 
IGJ 200 FOR I=2 TO 21:INPUT #2;LINE$:POSITION 2,I:PRINT LINE$:NEXT I 
XVJ 210 CC=0:POSITION 2,2:A=USR(1664):GOTO 300 
RIJ 220 GOSUB 1100:A=USR(1664):GOSUB 1210:POSITION 2,2:POKE 752,0 
SNJ 230 POKE 694,0:PRINT "CATEGORY: ";:GOSUB 1240:INPUT #3;LINE$ 
OYJ 240 PRINT CHR$(28);DE$;LINE$ 
YQJ 250 PRINT "RECIPE NAME: ";:GOSUB 1240:INPUT #3;LINE$ 
PAJ 260 PRINT CHR$(28);DE$;LINE$ 
LHJ 270 POKE 752,1:IF PEEK(85)>37 AND PEEK(84)=21 THEN POKE 85,37 
REJ 280 IF PEEK(85)>37 THEN POKE 85,2:POKE 84,PEEK(84)+1 
ASJ 290 IF PEEK(84)>21 THEN POKE 84,21 
JEJ 300 SOUND 0,0,0,0:TRAP 1330 
VMJ 310 POKE 694,0:CC=CC+1:POKE 752,0:PRINT MV$;:GET #1,K:POKE 752,1 
NBJ 320 IF K>31 AND K<60 THEN 580 
PEJ 330 IF K>62 AND K<125 THEN 580 
RDJ 340 IF EDIT=1 THEN IF K=60 OR K=62 OR K=27 THEN 1020 
SNJ 350 IF K=27 THEN 730 
EJJ 360 IF K<>126 OR PEEK(85)>2 THEN 390 
GWJ 370 IF PEEK(84)<3 THEN 300 
HAJ 380 POKE 84,PEEK(84)-1:POKE 85,38:PRINT CHR$(K);:GOTO 580 
PEJ 390 IF K=30 AND PEEK(85)=2 THEN POKE 85,37:GOTO 270 
OXJ 400 IF K=31 AND PEEK(85)=37 THEN POKE 85,2:GOTO 270 
CWJ 410 IF K=127 THEN PRINT CHR$(K);:IF PEEK(85)>37 THEN 410 
EEJ 420 IF PEEK(84)>21 THEN POKE 84,21:PRINT MV$; 
UKJ 430 IF K<255 THEN 460 
FXJ 440 PRINT CHR$(K);:GOSUB 1200:POSITION 38,2:POKE 752,1:PRINT CL$; 
MOJ 450 POSITION X,Y:POKE 752,0:GOTO 270 
SOJ 460 IF K=62 THEN 730 
UJJ 470 IF K=125 THEN PRINT CHR$(K);:GOTO 220 
WVJ 480 IF K<>156 THEN 510 
SEJ 490 GOSUB 1200:PRINT CHR$(K);:POSITION 2,21:PRINT CHR$(157); 
AXJ 500 POKE 84,Y:GOTO 270 
WSJ 510 IF K<>157 THEN 530 
BYJ 520 GOSUB 1200:POSITION 2,21:PRINT CHR$(156);:POKE 84,Y:GOTO 580 
OYJ 530 IF K=28 AND PEEK(84)=2 THEN POKE 84,21:GOTO 270 
PAJ 540 IF K=29 AND PEEK(84)=21 THEN POKE 84,2:GOTO 270 
FTJ 550 IF K=155 AND PEEK(84)=21 THEN 270 
PTJ 560 IF K>27 AND K<32 OR K=155 OR K=126 OR K=254 OR K=61 THEN 580 
BOJ 570 GOTO 300 
JGJ 580 IF PEEK(85)=32 THEN SOUND 0,0,2,14 
NTJ 590 PRINT CHR$(K);:GOTO 270 
JBJ 600 CLOSE #2:IF PEEK(195)=170 THEN 660 
NYJ 610 IF EDIT=1 AND PEEK(195)=170 THEN 710 
GWJ 620 POSITION 2,22:PRINT DE$;"ERROR #";PEEK(195);:EDIT=0:GOSUB 1110 
WOJ 630 POKE 752,1:PRINT 
NRJ 640 IF PEEK(764)<>28 THEN 640 
DNJ 650 GOTO 1330 
INJ 660 OPEN #2,8,0,FILE$:CLOSE #2:OPEN #2,8,0,FILE2$ 
FOJ 670 PRINT #2;"0";LF$;"0";LF$:CLOSE #2 
RUJ 680 GOSUB 1190:TRAP 600:OPEN #2,9,0,FILE$ 
APJ 690 OPEN #5,4,0,FILE2$:INPUT #5;S,B:CLOSE #5 
QGJ 700 PRINT CHR$(125);:GOTO 220 
OUJ 710 POSITION 2,22:PRINT DE$;S$;"NO RECIPE FILE ON DISK-ADD RECIPES" 
UDJ 720 EDIT=0:GOSUB 1110:GOTO 630 
ARJ 730 POKE 752,0:GOSUB 1190:IF EDIT=0 THEN IF K=27 AND CC<2 THEN 820 
DJJ 740 IF EDIT=1 THEN POINT #2,IS,IB 
LRJ 750 NOTE #2,S1,B1:PRINT #2;S;LF$;B:POSITION 2,2 
XKJ 760 FOR I=2 TO 21:LINE$=SP$:POKE 84,I:INPUT #4;LINE$ 
XNJ 770 IF LEN(LINE$)<36 THEN LINE$(36)=CHR$(32) 
LCJ 780 PRINT #2;LINE$:NEXT I 
MQJ 790 IF EDIT=1 THEN RETURN 
EQJ 800 S=S1:B=B1 
XEJ 810 IF EDIT=0 AND K=62 THEN PRINT CHR$(125);:GOSUB 1100:GOTO 220 
NBJ 820 CLOSE #5:OPEN #5,8,0,FILE2$:PRINT #5;S;LF$;B:NOTE #2,S,B 
UEJ 830 PRINT #5;S;LF$;B:GOTO 1330 
VNJ 840 GOSUB 1110:POSITION 2,22:A$="RETURN":GOSUB 1080:POKE 752,1 
CCJ 850 TRAP 990 
SFJ 860 PRINT DE$;SP$(35);"PRESS";CHR$(32);A$;CHR$(32);"TO PRINT THE RECIPE" 
PIJ 870 GET #1,K:IF K<>27 AND K<>155 THEN 870 
UHJ 880 POKE 752,0:IF K=27 THEN 1330 
QHJ 890 OPEN #7,8,0,"P:" 
YVJ 900 POKE 84,2:INPUT #4;LINE$:PRINT #7;LINE$:PRINT #7 
PMJ 910 POKE 84,3:INPUT #4;LINE$ 
MFJ 920 I=LEN(LINE$) 
VOJ 930 IF I>2 AND LINE$(I)=CHR$(32) THEN LINE$=LINE$(1,I-1):GOTO 920 
YSJ 940 PRINT #7;SP$(1,(36-I)/2);LINE$ 
OEJ 950 PRINT #7;SP$(1,(36-I)/2);:FOR I=1 TO LEN(LINE$):PRINT #7;"-";:NEXT I 
CSJ 960 PRINT #7 
ORJ 970 FOR I=4 TO 21:POSITION 2,I:INPUT #4;LINE$:PRINT #7;LINE$:NEXT I 
GNJ 980 PRINT #7;LF$:CLOSE #7:GOTO 1330 
ICJ 990 CLOSE #7:IF PEEK(195)<>5 THEN 620 
SKJ 1000 POSITION 2,22:PRINT DE$;S$;"NO RECIPE ON SCREEN-BROWSE OR FIND" 
VSJ 1010 EDIT=0:GOSUB 1110:GOTO 630 
LIJ 1020 IF CC>1 THEN GOSUB 730 
VYJ 1030 IF K=27 THEN 1330 
IKJ 1040 IF S>0 AND K=60 THEN GOSUB 1190:POINT #2,S,B:GOTO 180 
HDJ 1050 IF K=60 THEN A$="FIRST RECIPE IN FILE":I=1:GOSUB 1280:GOTO 210 
GFJ 1060 NOTE #2,S1,B1:IF S1<>FS OR B1<>FB THEN 180 
XZJ 1070 A$="LAST RECIPE IN FILE":I=1:GOSUB 1280:GOTO 210 
JOJ 1080 FOR I=1 TO LEN(A$):A$(I,I)=CHR$(ASC(A$(I,I))+128):NEXT I 
CWJ 1090 RETURN 
PXJ 1100 CC=0:A$="RECIPE MANAGER":GOSUB 1080:POSITION 2,0:PRINT SP$(26);A$ 
MNJ 1110 POSITION 2,23:A$="ESC":GOSUB 1080 
TKJ 1120 PRINT SP$(28);"PRESS";CHR$(32);A$;CHR$(32);"FOR MENU";:POSITION 2,22 
DGJ 1130 IF EDIT=0 THEN 1160 
SKJ 1140 A$="<":GOSUB 1080:PRINT DE$;A$;S$;"MOVES BACKWARD";S$;A$; 
FNJ 1150 POKE 85,21:A$=">":GOSUB 1080:PRINT A$;S$;"MOVES FORWARD";S$;A$ 
QQJ 1160 POSITION 2,1:PRINT SP$ 
JPJ 1170 POSITION 2,1:I=LEN(F$):IF I/2>INT(I/2) THEN F$(I+1)=S$ 
UKJ 1180 PRINT SP$(1,(36-LEN(F$))/2);F$:POKE 752,0:RETURN 
MRJ 1190 POKE 54286,64:POKE 710,148:RETURN 
FRJ 1200 X=PEEK(85):Y=PEEK(84):RETURN 
OAJ 1210 IF EDIT=1 THEN RETURN 
NHJ 1220 POSITION 2,22:PRINT DE$;SP$(33);"PRESS > TO ENTER NEXT RECIPE" 
CSJ 1230 RETURN 
LBJ 1240 POKE 764,255 
BZJ 1250 I=PEEK(764):IF I=255 THEN 1250 
VHJ 1260 IF I=28 THEN POP :GOTO 730 
CWJ 1270 RETURN 
LBJ 1280 IF I=1 THEN GOSUB 1080 
ULJ 1290 X=PEEK(85):Y=PEEK(84):POSITION 2,22 
AWJ 1300 I=LEN(A$):IF I/2>INT(I/2) THEN A$(I+1)=S$ 
IIJ 1310 PRINT DE$;SP$(1,(36-LEN(A$))/2);A$ 
NWJ 1320 POSITION X,Y:RETURN 
TWJ 1330 EDIT=0:GOSUB 1190:CLOSE #2:CLOSE #5:F$="MENU":GOSUB 1100:A=USR(1664) 
YFJ 1340 POKE 752,0:POSITION 2,22:RESTORE 1350 
SNJ 1350 DATA ADD,BROWSE/EDIT,FIND,PRINT,CALCULATE 
RCJ 1360 FOR I=1 TO 5:READ A$:A$(1,1)=CHR$(ASC(A$(1,1))+128) 
TUJ 1370 PRINT A$;CHR$(32);:NEXT I 
UQJ 1380 POSITION 2,23:PRINT DE$;"SELECT: "; 
IZJ 1390 POKE 694,0:POKE 702,64 
KDJ 1400 GET #1,N:IF N<65 OR N>90 THEN 1400 
HPJ 1410 Q$=CHR$(N):PRINT Q$; 
BUJ 1420 IF Q$="A" THEN F$="ADD RECIPES":GOTO 680 
VGJ 1430 IF Q$="B" THEN F$="BROWSE/EDIT":EDIT=1:GOTO 140 
ECJ 1440 IF Q$="F" THEN F$="FIND CATEGORY/RECIPE":GOTO 1730 
GTJ 1450 IF Q$="P" THEN F$="PRINT RECIPE":GOTO 840 
SBJ 1460 IF Q$="C" THEN F$="CALCULATE RECIPE":GOTO 1750 
FKJ 1470 GOTO 1330 
RBJ 1480 DATA 104,173,48,2,133,204,173 
NKJ 1490 DATA 49,2,133,205,160,3,177 
QWJ 1500 DATA 204,9,128,145,204,160,25 
TFJ 1510 DATA 177,204,9,128,145,204,173 
GRJ 1520 DATA 0,2,133,204,173,1,2 
PDJ 1530 DATA 133,205,169,0,141,198,2 
QYJ 1540 DATA 141,14,212,169,196,141,0 
HHJ 1550 DATA 2,169,6,141,1,2,162 
USJ 1560 DATA 192,173,11,212,201,128,208 
ROJ 1570 DATA 249,142,14,212,96,72,173 
QJJ 1580 DATA 11,212,105,1,106,106,106 
UMJ 1590 DATA 106,144,245,141,10,212,141 
PFJ 1600 DATA 10,212,173,198,2,73,148 
WPJ 1610 DATA 141,198,2,141,24,208,104,64 
IIJ 1620 POKE 559,0:DL=PEEK(560)+256*PEEK(561):FOR I=DL TO DL+8 
NKJ 1630 POKE I-1,PEEK(I):NEXT I:POKE DL+8,0:DL=DL-1 
QOJ 1640 H=INT(DL/256):L=DL-H*256:POKE 560,L:POKE 561,H 
USJ 1650 POKE DL+31,L:POKE DL+32,H:POKE 559,34 
PJJ 1660 RESTORE 1480:PRINT "STAND BY..."; 
GZJ 1670 POKE 752,1:FOR I=1 TO 99:READ N 
RRJ 1680 POSITION 13,0:PRINT 100-I;CHR$(32); 
PXJ 1690 POKE 1663+I,N:TOT=TOT+I+N:NEXT I 
MYJ 1700 IF TOT<>16577 THEN PRINT "ERROR - CHECK DATA LINES 2000-2130":END 
MVJ 1710 POKE 16,64:POKE 53774,64:POKE 752,0 
FSJ 1720 A=USR(1664):RETURN 
QFJ 1730 POSITION 2,22:PRINT DE$;S$;"THAT COMMAND IS NOT AVAILABLE YET" 
EJJ 1740 GOSUB 1110:GOTO 630 
GFZ 1750 GOTO 1730 

Next, you get to type in your recipe. You can type anywhere you like on the recipe screen. A gentle beep will remind you when you near the end of the line so you can press RETURN. You can put “Ingredients” and “Instructions” headings in wherever you want. All the Atari’s editing keys work so you can quickly and accurately create your recipe “card.” The screen space is ample for most recipes. For extra long ingredients’ lists, you can shorten the instructions, or you can even put the same recipe on two or more separate “cards” — i.e. SUPERBURGER PART 1 and SUPERBURGER PART 2. Part 1 could contain the ingredients, and Part 2 could contain the instructions. In this way, your recipe space is virtually unlimited.

The only restriction you have when entering recipes is that quantities should always be at the leftmost side of the screen and in parentheses, such as: (2) pounds beef. This will allow the CALCULATE function (to be implemented next month) to change these quantities when multiplying or dividing recipes. To use fractions, use the slash (i.e. for one-half, type 1/2, not .5). For a value such as one and three quarters, separate the whole number from the fraction with a space or other character, as in the following formats: (3 1/4), (3-1/4), (3+1/4), (3&1/4), etc.

Press “>” to enter the next recipe, or “ESC” when you’ve finished entering recipes.

The BROWSE/EDIT option lets you look through your computer recipe file by pressing the “▲” and “>” keys to move backward and forward, respectively. You can also change any recipe as you move through your file. All changes are recorded on the disk. If you find a recipe that you want to print, press the ESC key for the menu. Then press “P” for the PRINT option and the recipe is neatly printed with a centered title. If you again select the BROWSE option, you will be able to browse from where you left off. Happy cooking!

Next Month

We’ll get into more details on Recipe Manager, and enter the next part of the program. We’ll also have some holiday programs.

Readers’ questions, comments and original contributions are welcome. Please enclose a self-addressed, stamped envelope (SASE) for a personal reply.

A diskette of all programs listed in this month’s column is available from the author for $7.00, postpaid. Please specify your disk drive model.

Program Perfect is a utility used to check for typing errors while entering programs from this column. Readers may send a SASE for a listing or $5.00 for diskette of this program.

Address all correspondence

Jeff Brenner
“Applying the Atari 11/85”
c/o Computer Shopper
P.O. Box F
Titusville, FL 32781-9990
COMPUTER SHOPPER / DECEMBER 1985 / PAGE 65 

Applying The Atari

by Jeff Brenner

This month’s column brings the second part of Recipe Manager — just in time to organize your holiday recipes. The second part adds two useful features to the section listed last month. The first is a “FIND” option, which lets you search for a particular recipe or category. The other is the “CALCULATE” option, which automatically halves, doubles, triples, etc. the measures for any recipe. This month we also have several utility programs submitted by readers, and more reader mail.

Clarifications/Corrections

I had the unusual opportunity to see last month’s column in print before completing this month’s article. I’ll take advantage of this by correcting two confusing typographical errors that appeared here last month.

In November’s column, a triangle symbol appears on page 180 and on page 184: In both these cases, this triangle should have been the less-than symbol. On both Mailing List and Recipe Manager, the greater-than symbol (same as INSERT key) moves forward among the entries, and the less-than symbol (same as the CLEAR key) moves backward. How did the triangles get there? I wish I knew.

On page 180, I seem to say that if you try to search for “Computer Shopper” the program cannot find “Computer Shopper.” The first “Computer Shopper” should have been in all capital letters: If you try to search for something that is all capitals, the program will not find the same word that contains both capitals and lower case letters.

Also in November issue, I say that a keypad program correction was published in October. However, this program was left out of October’s issue. November’s keypad program is therefore the correction to the keypad program.

Reader Mail

Q. First I’d like to say thank you for an extremely good section for Atari home computers. I’m writing to ask you a few questions: (1) Is the Atari 400 totally compatible with 800 and 800XL software? (2) Is the Atari 400 compatible with the 810 disk drive? The 1050 disk drive? (3) Where may I obtain DOS 2.5? (4) Can I piggy-back eight 2K chips on the back of each 2K memory chip in my Atari 400 to expand its memory to 32K? Can the same process be used to expand the memory to 48K or 64K? (6) Could you provide me with a listing for a memory test program? Your answers will be greatly appreciated by my users’ group.

Kuniki Lockett
Sweetwater, AL

A. (1) The 400, provided it contains sufficient memory to run the programs, is completely compatible with 800 software. A 16K Atari 400, however, cannot run a 32K program for any machine. Software released specifically for the XL/XE machines cannot be used with the 400 and 800, but almost all Atari (8-bit) software will run on the 400/800 models.

(2) Again, provided the 400 contains at least 16K of memory, it can be used with the 810 or 1050 disk drives.

(3) As mentioned in last month’s column, you can send Atari your DOS 3 diskette and you will be sent DOS 2.5 at no charge (Atari Customer Relations, P.O. Box 61657, Sunnyvale, CA 94088).

(4) Unfortunately, expanding the 400’s memory is not as simple as piggybacking RAM chips to the existing ones. You’ll probably be better off buying an inexpensive Atari XL or XE than buying hard-to-find memory boards for the Atari 400.

(5) A memory test program is listed under “SIMPLE MEMORY TESTER.” This BASIC program contains a machine language program that checks all memory above page 6 (location 1536). Each location is checked by setting all bits to zero (storing a zero in the location) and then setting all bits to one (storing a 255 in the location). At both points, the program verifies that the location contains the zero or the 255. If the memory location does not contain the value that was stored in it, the program will end and will print the faulty memory address.

SIMPLE MEMORY TESTER 
VTJ 10 REM SIMPLE MEMORY TESTER 
IIJ 20 REM COPYRIGHT 1985 JB 
ICJ 30 FOR I=1536 TO 1595:READ N:T=T+I+N 
TKJ 40 POKE I,N:NEXT I 
OQJ 50 IF T=10 THEN 70 
WHJ 60 PRINT "ERROR-CHECK DATA LINES 100-170" 
ROJ 70 PRINT CHR$(125);"CHECKING MEMORY..." 
FSJ 80 POKE 207,0:A=USR(1536) 
CKJ 90 IF PEEK(207) THEN 110 
PSJ 100 PRINT "MEMORY O.K.":END 
QXJ 110 BAD=PEEK(205)*256+PEEK(204) 
YTJ 120 POKE BAD,PEEK(206) 
OQJ 130 PRINT "BAD BYTE AT LOCATION ";BAD 
PQJ 140 END 
UXJ 150 DATA 104,169,168,141,1,210,169,7 
UFJ 160 DATA 133,205,169,0,133,204,160,0 
YQJ 170 DATA 177,204,133,206,169,0,145,204 
CFJ 180 DATA 177,204,208,29,169,255,145,204 
BWJ 190 DATA 177,204,201,255,208,19,165,206 
CXJ 200 DATA 145,204,200,208,227,230,205,165 
YCJ 210 DATA 205,141,0,210,197,106,208,216 
UGZ 220 DATA 96,230,207,96 

Q. I have played around with the Atari 130XE and DOS 2.5. I tried to use the DOS in a double density drive and cannot find if it will support DD. None of the menu options seem to support DD. Why would Atari write a “new” DOS in this day that doesn’t support DD? The documentation only says that it supports “dual density” and most users have abandoned this format long ago.

Sears V. Tanner
Leesville, LA

A. The Atari 1050 is more like a “one-and-a-half” density drive than a double density drive. Several companies sell modifications that can give you “true double density.” Normally, however, the 1050 can not operate beyond what Atari now calls “enhanced density,” Dos 2.5 can detect whether an 810 or 1050 is being used and automatically adjusts to function in single or in enhanced density. Thus, all commands on DOS 2.5 support enhanced density when used with the 1050. When you say many users have abandoned the “dual density” format, I take it that you are referring to DOS 3. When Atari released DOS 3, it used the terms “double density” and “dual density.” But, like DOS 2.5, DOS 3 does not actually work in double density — it also is an enhanced density DOS. Many Atari users stopped using DOS 3, not because of its density, but because of its incompatibility with DOS 2 and with some commercial software.


Q. Some of my friends and I have the Atari 5200 Super System and we would like to know if Jack Tramiel has plans to continue making the Super System and/or cartridges for the Super System.

Rudy Romero
Riverside, CA

A. I’m sorry to be the one to break the news, but an Atari spokesperson has told me that production of the 5200 game system and cartridges has been “put on hold indefinitely.” Atari says it is now dedicating all of its effort to marketing its new computers.

Reader’s Utilities

This month we are presenting three utilities submitted by readers. Each contributor has been sent a holograph sticker. If you have created a short program or have a public domain program that others may be interested in, send it in. The two best original programs received before the end of the year will earn their authors a program from Epyx or Sega.

Dave Garvin, of Medford, Oregon, writes: “I liked your program for the printers [ATASCII Lister, July 1985]. I am sending you a modified version that I made from your program. Program #1 is for the older Atari computers and Program #2 is for the XL/XE.”

These programs are listed under the “PRINTER UTILITY” heading. 400/800 owners should enter the first listing, and XL/XE owners should enter the second. The program allows you to LPRINT or LIST“P” a program containing inverse video or graphics characters. Compared to ATASCII Lister, the inverse video and graphics characters are printed more slowly, and quite violently - the printhead jerks back and forth for each character. However, Mr. Garvin’s utility offers an advantage in that programs can be listed directly from the computer to the printer without having to first LIST the programs to disk.

PRINTER UTILITY - 400/800 VERSION 

BCJ 10 REM 400/800 VERSION 
FEJ 20 REM BY DAVID GARVIN 
AQJ 30 PRINT CHR$(125);"DENSITY (1-2) ";:INPUT D:IF D<1 OR D>2 THEN 10 
RWJ 40 FOR X=1 TO 208:READ A:POKE 1535+X,A:NEXT X:POKE 1741,74+D:X=USR(1536) 
QYJ 50 PRINT :PRINT "THIS PRINTER IS NOW READY TO USE.":PRINT :PRINT 
BSJ 60 PRINT "IF SYSTEM RESET IS PRESSED, REACTIVATE" 
LYJ 70 PRINT "PROGRAM BY TYPING X=USR(1536).":END 
LHJ 80 DATA 104,169,12,141,27,3,169,6,141,28,3,96,158,238,219 
TAJ 90 DATA 238,157,238,26,6,128,238,157,238,76,120,238,160,0,132 
NNJ 100 DATA 203,201,155,208,3,76,192,6,201,32,144,4,201,91,144 
RTJ 110 DATA 245,201,97,144,4,201,123,144,237,10,38,203,74,201,96 
JDJ 120 DATA 176,16,201,64,176,9,201,32,176,5,105,64,76,78,6 
OEJ 130 DATA 56,233,32,133,208,169,0,133,209,24,162,3,24,38,208 
TXJ 140 DATA 38,209,202,208,248,24,173,244,2,101,209,133,209,160,7 
QRJ 150 DATA 162,1,177,208,157,195,6,169,0,153,208,6,136,232,224 
IWJ 160 DATA 9,208,240,160,0,162,8,185,208,6,62,195,6,42,153 
SLJ 170 DATA 208,6,202,208,243,165,203,240,8,185,208,6,73,255,153 
QKJ 180 DATA 208,6,185,208,6,201,155,208,5,169,151,153,208,6,200 
RRJ 190 DATA 192,8,208,212,160,0,132,203,185,204,6,132,203,32,167 
VZJ 200 DATA 238,230,203,164,203,192,12,208,240,160,1,96,76,167,238 
XFZ 210 DATA 0,0,0,0,0,0,0,0,128,27,75,8,0 
XL/XE VERSION 

BXJ 10 REM XL/XE VERSION 
FEJ 20 REM BY DAVID GARVIN 
AQJ 30 PRINT CHR$(125);"DENSITY (1-2) ";:INPUT D:IF D<1 OR D>2 THEN 10 
RVJ 40 FOR X=1 TO 212:READ A:POKE 1535+X,A:NEXT X:POKE 1745,74+D:X=USR(1536) 
QYJ 50 PRINT :PRINT "THIS PRINTER IS NOW READY TO USE.":PRINT :PRINT 
BSJ 60 PRINT "IF SYSTEM RESET IS PRESSED, REACTIVATE" 
LYJ 70 PRINT "PROGRAM BY TYPING X=USR(1536).":END 
HGJ 80 DATA 104,169,12,141,27,3,169,6,141,28,3,96,193,254,6 
STJ 90 DATA 255,192,254,26,6,162,254,192,254,76,153,254,160,0,132 
NRJ 100 DATA 203,201,155,208,3,76,196,6,201,32,144,4,201,91,144 
RTJ 110 DATA 245,201,97,144,4,201,123,144,237,10,38,203,74,201,96 
JDJ 120 DATA 176,16,201,64,176,9,201,32,176,5,105,64,76,78,6 
PTJ 130 DATA 56,233,32,133,208,134,204,169,0,133,209,24,162,3,24 
WAJ 140 DATA 38,208,38,209,202,208,248,24,173,244,2,101,209,133,209 
MXJ 150 DATA 160,7,162,1,177,208,157,199,6,169,0,153,212,6,136 
KRJ 160 DATA 232,224,9,208,240,160,0,162,8,185,212,6,62,199,6 
PZJ 170 DATA 42,153,212,6,202,208,243,165,203,240,8,185,212,6,73 
UAJ 180 DATA 255,153,212,6,185,212,6,201,155,208,5,169,151,153,212 
PWJ 190 DATA 6,200,192,8,208,212,160,0,132,203,166,204,185,208,6 
WSJ 200 DATA 132,203,32,203,254,230,203,164,203,192,12,208,238,160,1 
NAJ 210 DATA 96,76,203,254,0,0,0,0,0,0,0,0,0,27,75 
ASZ 220 DATA 8,0 

Richard Fleagle, of Fairbanks, Alaska, sends a renumbering utility (listed under the “RENUMBERING UTILITY” heading) and writes: “I am a subscriber to the Computer Shopper and I read the Atari section in each issue. I wonder what has happened to all of the old utility programs that were so plentiful so many years ago. I guess it was in January of 1981. I am enclosing a utility I have used for years. As with all of the renumbering utilities I have used, this one is no exception as it will not renumber lines referred to by variables.

“To load the utility, have the program you wish to renumber in computer memory and type EN.“D:RENUMBER.LST.” To run it, type G.32100.

“The program asks you for the file name you wish to have for the finished product. It may be a good idea to use the original program name with the extender of “.LST” since the renumbered program is saved in a LIST format. Next question is the starting line number and what line number increment you want. Maybe you want to start at line 10 and have the next line 20, etc. Just answer 10,10 at that prompt.

“The program keeps you posted as to what is happening as it goes along and plays a bit of music. If there are lines that refer to variable names or lines that are not in the program being renumbered, the line number and a message [SR-Symbolic reference or NF-not found] will appear on the screen. Write these line numbers down since you will want to go back to them and enter the correct line numbers manually. When renumbering is complete, the screen will show how many lines were renumbered. Pressing RETURN will LIST the program to disk. Then type NEW and ENTER your new renumbered program. If there were error - reference lines, check these out and make corrections. When all is done, SAVE the file.

EDITING UTILITY 

SYJ 31000 REM SPECIAL EDIT PROGRAM/A. TODD 
QOJ 31010 PRINT "TO ADVANCE, PRESS START" 
TFJ 31020 PRINT "TO BACK UP, PRESS SELECT." 
WKJ 31030 PRINT "PRESS BREAK FOR EDIT MODE." 
MIJ 31040 PRINT "TYPE 'CONT' AND PRESS RETURN WHEN YOU HAVE FINISHED EDITING." 
YUJ 31050 PRINT "WHEN THROUGH, PRESS OPTION TO ERASE" 
PZJ 31060 PRINT "THIS PROGRAM." 
HUJ 31070 PRINT "INCREMENT BY HOW MANY LINES";:INPUT LIN 
CHJ 31080 FOR LST=9 TO 31760 STEP LIN 
UGJ 31090 IF LST>-1 THEN LIST LST+1,LST+LIN 
IUJ 31100 IF PEEK(53279)=6 THEN GOTO 31140 
RRJ 31110 IF PEEK(53279)=5 THEN LST=LST-LIN:GOTO 31090 
IUJ 31120 IF PEEK(53279)=3 THEN GOTO 31150 
IWJ 31130 GOTO 31100 
JHJ 31140 NEXT LST:GOTO 31090 
EWJ 31150 PRINT CHR$(125):POSITION 2,4 
WEJ 31160 FOR Y=31000 TO 31170 STEP 10:PRINT Y:NEXT Y:PRINT "GR.0:POKE 842,12" 
FBZ 31170 POSITION 2,0:POKE 842,13:END 
RECIPE MANAGER ADDITIONS 

WTJ 1730 PRINT CHR$(125);:GOSUB 1100 
FLJ 1740 GOTO 2150 
GBJ 1750 GOSUB 1100:TRAP 1330 
UDJ 1760 POSITION 2,23:PRINT DE$; 
WCJ 1770 POSITION 2,22:PRINT DE$;"CURRENT NUMBER OF SERVINGS"; 
GVJ 1780 INPUT CN 
UVJ 1790 POSITION 2,22:PRINT DE$;"NUMBER OF SERVINGS DESIRED"; 
GUJ 1800 INPUT SD 
CQJ 1810 F=SD/CN 
CSE 1820 FOR Y=4 TO 21:POSITION 2,Y:INPUT #4;A$ 
PAE 1825 IF LEN(A$)=0 THEN NEXT Y:GOTO 1300 
QNJ 1830 IF A$(1,1)<>"(" THEN NEXT Y:GOTO 2000 
QYJ 1840 A$=A$(2,LEN(A$)) 
OMJ 1850 FOR X=2 TO LEN(A$):IF A$(X,X)<>")" THEN NEXT X:GOTO 1880 
IKJ 1860 A$=A$(1,X-1) 
FZJ 1870 GOTO 1890 
AQJ 1880 POSITION 2,Y:PRINT "*";:POSITION 2,23:GOTO 2130 
IMJ 1890 J=LEN(A$)+1:DN=1:NM=0 
OQJ 1900 FOR I=LEN(A$) TO 1 STEP -1:IF A$(I,I)<>"/" THEN NEXT I:I=2:GOTO 1940 
JWJ 1910 DN=VAL(A$(I+1,LEN(A$))) 
JWE 1920 FOR J=I-1 TO 1 STEP -1 
DIE 1925 IF A$(J,J)>="0" AND A$(J,J)<="9" THEN NEXT J:W=VAL(A$) 
BEJ 1930 NM=VAL(A$(J+1,I-1)) 
VXJ 1940 W=0:IF J>1 THEN W=VAL(A$(1,J-1))+NM/DN 
GOJ 1950 IF J<1 THEN W=NM/DN 
YBJ 1960 W=W*F:LN=LEN(A$) 
GFJ 1970 IF INT(W)=0 THEN A$="":FR=W:W=0:GOTO 1990 
UJJ 1980 A$=STR$(INT(W)):FR=W-INT(W):W=W-FR 
UDJ 1990 R=FR:DH=1:NH=0 
YBJ 2000 FOR D=2 TO 5:IF D=5 THEN D=8 
MVJ 2010 FOR N=1 TO D 
AVJ 2020 IF ABS(FR-(N/D))<R THEN R=ABS(FR-(N/D)):DH=D:NH=N 
TBJ 2030 NEXT N:NEXT D 
SJJ 2040 IF DH=NH THEN NH=0:W=W+1 
WZJ 2050 IF W THEN A$=STR$(W):IF NH=0 THEN 2090 
QGJ 2060 IF W THEN A$(LEN(A$)+1)="+" 
RUJ 2070 A$(LEN(A$)+1)=STR$(NH):A$(LEN(A$)+1)="/" 
HIJ 2080 A$(LEN(A$)+1)=STR$(DH) 
HZJ 2090 POSITION 3,Y:J=LEN(A$)-LN:SOUND 1,25,10,8 
YIJ 2100 IF J>0 THEN FOR I=1 TO J:PRINT CHR$(255);:NEXT I 
CVJ 2110 IF J<0 THEN FOR I=J+2 TO 1:PRINT CHR$(254);:NEXT I 
MYJ 2120 PRINT A$;:SOUND 1,0,0,0 
BEJ 2130 NEXT Y 
FFJ 2140 GOTO 1330 
QYJ 2150 POKE 752,0:POSITION 2,22 
YRJ 2160 PRINT DE$;"FIND ";CHR$(195);"ATEGORY OR ";CHR$(210);"ECIPE?"; 
PQJ 2170 GET #1,A:IF A<>82 AND A<>67 THEN 1330 
SSJ 2180 PRINT CHR$(A); 
DNJ 2190 IF A=67 THEN POSITION 2,22:PRINT DE$;"FIND WHAT CATEGORY"; 
JBJ 2200 IF A=82 THEN POSITION 2,22:PRINT DE$;"FIND WHAT RECIPE NAME"; 
CUJ 2210 INPUT A$:L=LEN(A$) 
VEJ 2220 GOSUB 1190:TRAP 2360:OPEN #2,4,0,FILE$ 
NXJ 2230 CLOSE #5:OPEN #5,4,0,FILE2$:INPUT #5;X,X,FS,FB:CLOSE #5 
PRJ 2240 IF PEEK(764)=28 THEN PRINT CHR$(125):GOTO 1330 
TAJ 2250 NOTE #2,S,B:INPUT #2,X,X:INPUT #2;LINE$:POSITION 2,2:PRINT LINE$ 
HZJ 2260 J=19:IF A=67 THEN IF A$=LINE$(1,L) THEN 2430 
MIJ 2270 J=18:INPUT #2;LINE$:PRINT LINE$ 
VLJ 2280 IF A=82 THEN IF A$=LINE$(1,L) THEN 2430 
SYJ 2290 FOR I=1 TO J:INPUT #2;LINE$:NEXT I 
FEJ 2300 GOTO 2240 
UAJ 2310 POSITION 2,23:A=USR(1664) 
EWJ 2320 PRINT DE$;CHR$(195);"ONTINUE SEARCHING OR ";CHR$(211);"TOP?"; 
FFJ 2330 GET #1,A:PRINT CHR$(A);:IF A<>67 THEN 1330 
UEJ 2340 IF S=FS AND B=FB THEN 2370 
OKJ 2350 PRINT CHR$(125);:LINE$=A$:GOSUB 1100:A$=LINE$:GOSUB 1190:GOTO 2240 
RFJ 2360 IF PEEK(195)<>136 THEN 610 
UNJ 2370 PRINT CHR$(125):GOSUB 1100 
PIJ 2380 POKE 752,1:A$="END OF RECIPES":GOSUB 1080:POSITION 13,22:PRINT A$ 
KEJ 2390 A=USR(1664) 
LAJ 2400 POKE 764,255 
RDJ 2410 IF PEEK(764)<>28 THEN 2410 
FGJ 2420 GOTO 1330 
AHJ 2430 FOR I=1 TO J:INPUT #2;LINE$:PRINT LINE$:NEXT I 
JXZ 2440 IS=S:IB=B:NOTE #2,S,B:GOTO 2310 

Aaron Todd of Los Angeles, CA, submits “EDITING UTILITY.” This program should be LISTed to diskette. Then it can be ENTERed and merged with your BASIC programs. Type GOTO 31000 to run it. You’ll be asked to “INCREMENT BY HOW MANY LINES?” If your program is generally numbered by ten (i.e. 10, 20, 30, etc.) enter 10 for this prompt. Then, pressing START will list the next line(s) of your BASIC program. Pressing SELECT will list the previous line(s). To edit a line on the screen, press BREAK and use the control keys to reenter. Then type CONT and press RETURN. When you are finished using this utility, press OPTION and it will erase itself from memory, leaving you with your BASIC program.

Thanks to all readers who have submitted programs.

Genealogy Programs And More Genealogy Programs.

Last month I mentioned two genealogy programs that readers had written in about in response to Darwin K. Garrison’s request for a genealogical program for the Atari. This month Computer Shopper readers have discovered even more. Antic Publishing, which claims that its genealogy program, The Family Tree, is “the only genealogy program for the Atari” had better take note:

1) Ancestors for the 800/XL/XE. $39.95 plus a formatted DOS 2 diskette from Velma Prochter (Box 2434, Harbor, OR 97415).
2) Branches and Twigs for the 400/600/800/XL/XE, (companion programs). $55.00 from Sysco Software (3595 Cloverleaf Drive, Boulder, CO 80302).
3) Family History. $59.95 plus $2.00 shipping from Direct Lines Software (4816 Forrestal St., Fair Oaks, CA 95628).
4) Genealogical Database Manager and Family Tree Organizer for the 800/XL/XE, (soon for 520ST). $29.95 from Caledonia Enterprises (490A Abelia Street, Sumter, SC 29152-1403).
The following were listed last month:
5) The Family Tree. $19.95 plus $3.00 shipping from Antic Publishing (524 Second St., San Francisco, CA 94107)
6) Genealogical Program from A-BUG-BYTE users group. $5.00 from A-BUG-BYTE (10790 W. National Road, Brookville, OH 45309).

Now we have enough genealogy programs to last us for, well, generations! Several readers found these programs described in genealogy publications; others contacted organizations such as the National Genealogical Society. My sincerest thanks to all readers and genealogists who wrote, including Jim Cox, (APO New York), Al Crespo (Bakersfield, California), Y. Feiner (Orange, New Jersey), Louis J. Goldman (Middleburg Heights, Ohio), James M. Herzberg (Toledo, Ohio), John P. Kirkpatrick (Sumter, South Carolina), Leo H. Kordsmeier, Jr. (Little Rock, Arkansas), Dixie Sandy (Lafayette, Colorado), and Dan Sweda (Brookville, Ohio).

In October, a letter from Ken Rogers (Melrose, Massachusetts) was printed in which he asked where he could find the “Power Stick,” a joystick that was made by a company called Amiga. My thanks to Patrick Campbell (Birmingham, Alabama) for writing to say that he recently purchased the Amiga “Power Stick” at a Birmingham Toys ’R Us store. I have seen the “Power Stick” in Toys ’R Us stores in the New York area, and there is a good chance that other Toys ’R Us stores around the country are selling this joystick.

RENUMBERING UTILITY 

YPJ 32350 REM RENUMBER PROGRAM/DICK FLEAGLE 
GWJ 32360 DIM B$(12):PRINT CHR$(125);CHR$(29):T8=256:I=1:Z=32350 
EJJ 32370 WM=0:X=PEEK(138)+PEEK(139)*T8 
HRJ 32380 Y=PEEK(134)+PEEK(135)*T8+8*(PEEK(X+5)-128)+2 
PXJ 32390 PRINT "ENTER FILENAME FOR PROGRAM: ":PRINT "(NAME AND EXTENSION ONLY)" 
IQJ 32400 INPUT B$:PRINT "START #, BY (INCREMENT): ":INPUT FR,BY:PRINT CHR$(125) 
OIJ 32410 B=PEEK(136)+PEEK(137)*T8:X=B:M=FR 
ADJ 32420 LN=PEEK(X)+PEEK(X+I)*T8:SOUND 0,LN,10,8:IF LN=Z THEN 32460 
FEJ 32430 PL=PEEK(X+2):C=X+3 
GVJ 32440 LL=PEEK(C):C=C+I:GOSUB 32500:IF LL<PL THEN C=X+LL:GOTO 32440 
VLJ 32450 X=X+PL:M=M+BY:GOTO 32420 
OEJ 32460 M=FR:X=B:SOUND 1,0,0,0 
MIJ 32470 LN=PEEK(X)+PEEK(X+I)*T8:SOUND 0,32768-LN,10,8:IF LN=Z THEN 32740 
BGJ 32480 MH=INT(M/T8):ML=M-MH*T8:POKE X,ML:POKE X+I,MH 
MDJ 32490 M=M+BY:X=X+PEEK(X+2):GOTO 32470 
LRJ 32500 TK=PEEK(C) 
AQJ 32510 IF (TK>9 AND TK<14) OR TK=35 THEN C=C+I:GOSUB 32640:RETURN 
GSJ 32520 IF TK<>30 THEN 32580 
GUJ 32530 C=C+I:D=PEEK(C):IF D=23 OR D=24 THEN 32560 
CIJ 32540 IF D=14 THEN C=C+6 
JLJ 32550 GOTO 32530 
QJJ 32560 C=C+I:GOSUB 32640:D=PEEK(C):IF D<>20 AND D<>22 THEN 32560 
EZJ 32570 RETURN 
NUJ 32580 IF TK<>7 THEN RETURN 
ONJ 32590 C=C+I:D=PEEK(C):IF D=27 THEN 32620 
CFJ 32600 IF D=14 THEN C=C+6 
JOJ 32610 GOTO 32590 
QCJ 32620 C=C+I:IF C<(X+LL) THEN GOSUB 32640 
EWJ 32630 RETURN 
PHJ 32640 D=PEEK(C):IF D=20 OR D=22 THEN C=C+I:RETURN 
OHJ 32650 IF D<>14 THEN PRINT M;" SR,";:C=C+I:RETURN 
SIJ 32660 C=C+I:FOR J=0 TO 3:POKE Y+J,PEEK(C+J):NEXT J 
AQJ 32670 IF WM<LN THEN WX=B:RN=FR:GOTO 32690 
MTJ 32680 WX=X:RN=M 
NLJ 32690 WN=PEEK(WX)+PEEK(WX+I)*T8:SOUND 1,WN,10,8 
LZJ 32700 IF WN<Z AND WN<WM THEN RN=RN+BY:WX=WX+PEEK(WX+2):GOTO 32690 
KCJ 32710 IF WN<>WM THEN PRINT M;" NF,";:GOTO 32730 
VBJ 32720 WM=RN:FOR J=0 TO 3:POKE C+J,PEEK(Y+J):NEXT J 
SJJ 32730 C=C+6:RETURN 
UVJ 32740 PRINT :POKE 85,10:PRINT ">";(M-FR)/BY;" LINES" 
GJJ 32750 PRINT "LIST";CHR$(34);"D:";B$;CHR$(34);",";FR;",";M-BY 
HFZ 32760 FOR K=1 TO 3:PRINT CHR$(28);:NEXT K:POKE 766,0:END 

Recipe Manager, Part II

Use Program Perfect to type in the Part II of Recipe Manager listed under the “Recipe Manager Additions” heading. Then LIST these additions to diskette (i.e. LIST “D:TEMP”), load in the original Recipe Manager, and ENTER the additions (ENTER “D:TEMP”) to merge them with the original program. You can then SAVE the complete program under one name (i.e. SAVE “D:RECIPE.BAS”).

The additions add the routines necessary for the FIND and the CALCULATE options. A description of each of these options follows:

FIND Recipes/Categories

This option lets you find a particular recipe that you’ve stored in Recipe Manager. It also enables you to look through recipes in a specific category only, such as “main dishes.”

When F is pressed for the “SELECT:” prompt, you are asked, “FIND CATEGORY OR RECIPE?” If you have the name of a particular recipe in mind, press R, and you’ll be asked to enter the name of the recipe. When you type the name and press RETURN, the program will look through each recipe stored on the diskette unil a match is found. If you are not sure of the entire name of the recipe, you can enter only a part of the name and the program will find all receipt names that match that part. For example, if you only type “CHICKEN,” Recipe Manager would find any entires beginning with “CHICKEN,” such as “CHICKEN A LA KING” and “CHICKEN CACCIATORE.”

When a match is found, the recipe is displayed on the screen and you are asked if you want to “CONTINUE SEARCHING OR STOP.” Press C to continue finding recipe names that match the one you entered, or press S to return to the menu screen. From the menu screen, you can then print the recipe, or use the CALCULATE feature (discussed later.)

If you choose to find a category, rather than a particular recipe, type in the name of the category you want to look through. Again, you can only enter a part of the category if you are unsure of the complete name. After a match is found, it is displayed on the screen and you are asked if you want to continue searching or to stop. Press C to find the next recipe in the category you specified. When you’ve found the recipe you want, press S and the menu will appear.

When finding either a recipe name or a category name, an “END OF RECIPES” message will be displayed when all recipes on the diskette have been examined for a match.

If you want to change a recipe that you have found, press S to stop searching and press B on the menu for the BROWSE/EDIT option. The last recipe that was found will be reprinted on the screen for you to change it as you please.

CALCULATE Feature

This option enables you to automatically multiply or divide the measurements of a particular recipe. Only the recipe that is on the screen is affected by this command — the original recipe on the diskette will not be changed.

When C is pressed for the “SELECT: ” prompt, you are asked, “CURRENT NUMBER OF SERVINGS?” Type the number of servings that the original recipe makes and press RETURN. It is a good idea to label the recipe itself with the number of servings. The best way to do this is by placing the number of servings in parenthesis at the leftmost position on a line, such as: (4) SERVINGS. This will enable the “4” to be changed along with the measurements when a recipe is multiplied or divided.

Next you are asked, “NUMBER OF SERVINGS DESIRED?” Type the number of servings you would like to make and press RETURN. Recipe Manager will then examine the recipe on the screen, line by line, multiplying or dividing each measurement as appropriate. Remember, in order for a measurement to be re-calculated, it must be in parenthesis and at the left-most position on the screen. An asterisk will be printed on any line that generates an error when the CALCULATE option is used. Such an error might result if a closed-parenthesis is forgotten or if numbers are not in the correct format.

The CALCULATE feature will put mixed numbers in a form such as: 1 + 1/4. Recipe Manager uses 1/8 as the smallest fraction and will round measurements up or down to the nearest 1/8. If you would like the minimum measurement to be ¼, change line 2000 to:

2000 FOR D=2 TO 4 

It is important to note that only the measurements will be changed — baking times, for instance, must be lengthened or shortened by you, since these times cannot simply be multiplied or divided along with the measurements of the recipe.

Sample Recipe

Figure 1 shows a sample Recipe Manager screen on which a recipe (thanks to Sandra B.) has been placed. The first line of the mini-screen contains the category, “MAIN DISHES” and the second line contains the recipe name, “MEAT LOAF.” Note the format of the numbers for the measurements and the “(4) serving?” near the bottom of the recipe.

            RECIPE MANAGER 
                 MENU 
MAIN DISHES 
MEAT LOAF 

Ingredients: 
(1+1/2) cups seasoned stuffing mix 
(1/2) cup water 
(1) can tomato sauce (8 oz. can) 
(2) lbs ground beef 
(1) egg 
(1) packet onion soup mix 

Directions: 
Mix stuffing with water until moist. 
Stir in remaining ingredients. 
Form into a loaf in shallow baking 
pan. Bake 60 minutes at 
350 degrees F. 

(4) servings 
ADD BROWSE/EDIT FIND PRINT CALCULATE 
SELECT: 
Figure 1

Figure 2 shows how this recipe looks when printed with the PRINT option. The top recipe is the original one, while the bottom one was recalculated, with the CALCULATE option, for eight servings. Note how the categories are placed in the upper, left-hand corner and how the recipe names are automatically centered and underlined. This allows you to cut out the recipes and paste them on recipe cards, if desired.

MAIN DISHES MEAT LOAF Ingredients: (1+½) cups seasoned stuffing mix (½) cup water (1) can tomato sauce (8 oz. can) (2) lbs ground beef (1) egg (1) packet onion soup mix Directions: Mix stuffing with water until moist. Stir in remaining ingredients. Form into a loaf in shallow baking pan. Bake 60 minutes at 350° F. (4) servings MAIN DISHES MEAT LOAF Ingredients: (3) cups seasoned stuffing mix (1) cup water (2) cans tomato sauce (8 oz. can) (4) lbs ground beef (2) eggs (2) packet onion soup mix Directions: Mix stuffing with water until moist. Stir in remaining ingredients. Form into a loaf in shallow baking pan. Bake 60 minutes at 350° F. (8) servings.
Figure 2

Next Month

We’ll have programs for the new year, reader mail, a look back to 1985, and more.

Readers’ questions, comments and contributions are welcome. Please enclose a self-addressed, stamped envelope for a personal reply.

A diskette of all programs listed in this month’s column is available from the author for $7.00, postpaid. Please specify your disk drive model.

Program Perfect is a utility used to check for typing errors while entering programs from this column. Readers may send $5.00 for a diskette of this program and documentation.

Address all correspondence to: Jeff Brenner, “Applying The Atari 12/85” c/o Computer Shopper, P.O. Box F, Titusville, FL 32781-9990.

COMPUTER SHOPPER / DECEMBER 1985 / PAGE 65 

Atari Help

by Jeff Brenner

Q. When using my Atari 1200XL with a monitor, the image is very unclear. There is ghosting to the left of the characters. This double image makes it quite impossible to use comfortably. I have tried several different types of monitors, amber, green, color (an interesting note: with the color monitor, it looked like the convergence was badly off). In all cases, the monitors worked well on other computers (not Atari). Can you shed some light on this?

Robert Davis
Yorba Linda, CA

A. What is unusual about your problem is that you have tried other computers with your monitor and have been able to get a good picture. I assume you are using the proper cable (and of good quality) between the 1200XL’s monitor jack and your monitor, that you have tried adjusting all controls on your monitor, and that you are not using an 80-column board.

Have you tried using an ordinary color or black and white television set? See if you still get the double image.

Is the image unclear when you are using BASIC, or only when you are using a particular program, such as your word processor? If this only happens with a particular program, it is probable that the colors used for the text and the background do not blend smoothly and are causing this ghosting.

Although a hardware problem is least likely, you can see if this is the case by trying another Atari with your monitor. It does not have to be another 1200XL; a 600XL, 800XL or even and XE should give you the same result. If you get a clear picture with another Atari computer, this would indicate that your 1200XL does indeed have some type of hardware problem.


Q. I read your column (Applying The Atari) for the first time this week and would like to compliment you on its content and style.

I couldn’t resist an ad for an Atari word-processing set, comprising 800XL, 1027, 1050 and a monitor. Later, I bought an 850 interface from a member of the local SIG.

My problem centers around using the extraordinary 1027 printer. It seems to have been made to the same philosophy as the Model A Ford. I don’t know if it will last as long.

There must be thousands of 1027s around the country. Do they all have such miserable documentation as I received with mine? The problem seems to be that all the textbooks on the Atari were printed before this printer was put on the market.

You would do me a huge service by telling me where I can find all there is to know about operating and looking after the 1027, particularly when connected to AtariWriter software.

How does it work? It spins so fast I haven’t yet fathomed it! Where precisely does one put the oil? Assuming one won’t be able to buy spare ink cartridges forever, how does one revive them? Can one print special letters from AtariWriter without using the cumbersome Control-O sequence?

One of these days I want to try to use the 800XL as a robot controller, specifically to input analog voltages relative to its coordinates via the paddle ports, and output instructions through the RS232 interface. Has anything been published on this yet?

I do hope it’s not imposing on you to ask all these questions. Even members of my SIG can’t help — they are mainly interested in games or chatting on bulletin boards!

A. While books have been written on Atari computers, BASIC and even DOS, I don’t know if there’s any supplemental documentation available for Atari’s printers. Occasionally, updates to documentation are released by Atari, so you may want to write and ask if more information is available for the 1027 (Atari Customer Relations, P.O. Box 61657, Sunnyvale, CA 94088).

How the 1027 works? Basically, an electric current spins a band of characters to the proper letter or number which is then “stamped” onto the ink ribbon, leaving an impression on the paper. Compared to a typewriter, the 1027 seems amazingly fast, but you may be surprised to hear that it is actually one of the slowest printers. Dot-matrix printers, while offering lower-quality type, can churn out characters six to eight times faster than letter quality printers. The slower, letter-quality printers have an advantage, of course, in that their print is indistinguishable from that of a typewriter.

Unless your manual specifically tells you to oil the 1027, do not oil it. Most of today’s printers are designed to run without user-oiling, and by oiling it you may do more harm than good.

Cartridges are more difficult to “revive” than are ribbons, but it is possible. One common method for extending the life of a cartridge is to take a part of the ribbon, twist it so the back of the ribbon faces the front, (180 degrees), and then completely wind the ribbon to the end. Some cartridge users open up the cartridge, apply a solvent, and then wind everything back up again when dry, but others say there may be undesirable “side-effects” to this technique.

Regardless of your printer, the Control-O sequence is necessary to send special character codes to the printer.

A good article to read on controlling external devices with the Atari computers is “Control Your Environment with the Atari 400/800” by David Alan Hayes (BYTE Magazine, July 1983, p. 428). It discusses using the joystick ports for input/output. While written for the Atari 400 and 800, most of what is discussed pertains to the XL and XE computers as well. Remember, however, that the XL and XE have only two joystick ports instead of four.


Q. Do you have any advice on a modem that would be compatible with Atari XE, Franklin, Commodore and T.I.? I would like to be one modem and use individual cables.

Stan Morris
Kula, HI

A. Your best bet is to buy any of the RS232C-compatible modems and use the appropriate cables/interfaces for each computer. You’ll need to buy an Atari 850 interface to use such as a modem with the Atari XE.


Q. Thanks for all the nice articles on ATARI along with the great utility programs. They are proving very helpful in my computing! I have a ton of questions for you: 1) I have some customized business software packages written in BASIC which I would like to use the numeric keypad for entries. Is there a particular technique to inserting your keypad program as a subroutine? 2) I would like to compile this business software into machine language. Is there a program like MAC/65 or some other which could do the job? Or should I use something like the ACTION! language to speed up the process?

John Palhof
West Palm Beach, FL

A. Adding the keypad subroutine to a BASIC program is easily done. First, renumber the keypad program (with a renumbering utility or manually) so that the line numbers do not interfere with the line numbers of your business program. Next, you must change the program into a subroutine. This is done by changing the END on line 50 to a RETURN. LIST“C:” (for cassette) or LIST“D:TEMP” (for diskette) the renumbered keypad program. LOAD in your business software and ENTER“C:” or ENTER“D:TEMP” the keypad program. By ENTERing the LISTed keypad program, it is merged with your business program in memory. Now, to activate the keypad, place a GOSUB to the keypad subroutine at the beginning of your business program. For example, if you renumbered the keypad program to begin at line 20000, line 5 of your business program could read:

5 GOSUB 20000 

After the keypad routine is initialized, control returns to your BASIC program and the numeric keypad responds to your input.

Regarding your question on compiling your BASIC business programs into machine language, you would want a BASIC compiler, such as Monarch Data System’s ABC. A compiler will take a program written in BASIC and convert it into machine language code so that it may run several times faster. MAC/65 is only an assembler/editor and would require you to completely rewrite your programs into assembly language; a far from simple task, regardless of your programming experience. A language such as Action! would speed things up, but again you would have to rewrite the entire program in the new language.


Q. On the Mailing List program (“Applying The Atari,” June 1984) how do I change the left margin on my Okidata 92? As you know, the tractor is fixed so you can’t shift the position of the paper.

Mitchell J. Macieski
Nutley, NJ

A. The lines listed under “Left-Hand Margin for Mailing List” will allow you to enter a value for the left margin. This will work on any printer since it prints spaces to move the margin over. Lines 1155 and 1266 are added, while 1285, 1290, 1300 and 1310 are changed. Line 1285 is one of the new lines recently added as an enhancement to Mailing List. If you did not enter the enhancements to Mailing List, then do not type this line.

When you choose to print labels, you’ll now be asked to enter a left margin. Enter the number of spaces that you want the print head to move over before it begins printing.

LEFT-HAND MARGIN FOR MAILING LIST 

1155 PRINT "LEFT MARGIN";:INPUT LM 
1266 A$=SP$(1,LM) 
1285 PRINT #5;SP$(1,5+LM);ID2$;SP$(12);:IF Q THEN PRINT #5;SP$(1,HS+5);ID$; 
1290 PRINT #5;A$;NAME2$;:IF Q THEN PRINT #5;SP$(1,HS);NAME$;:NAME$=NUL$ 
1300 PRINT #5;L$;A$;ADDR2$;:IF Q THEN PRINT #5;SP$(1,HS);ADDR$;:NAME2$=NUL$ 
1310 PRINT #5;L$;A$;CSZ2$;:IF Q THEN PRINT #5;SP$(1,HS);CSZ$; 

Address Atari-related questions to:

Jeff Brenner
“Atari Help”
c/o COMPUTER SHOPPER
P.O. Box F
Titusville, FL 32781-9990
COMPUTER SHOPPER / JANUARY 1986 / PAGE 57 

Applying The Atari

by Jeff Brenner

Yes, we’ve made it to 1986, and what could be a more appropriate way to start the year than with a computerized appointment calendar program? With PACE, the Personal Appointment Calendar & Editor, you’ll never have an excuse for missing an appointment again. This month we’ll also read some reader mail, look back on 1985, and get a glimpse of some Halley’s Comet software available for the Atari.

Retrospect

Surely, 1985 will be remembered for both the Atari ST and the Commodore Amiga, regardless of how well each has sold during this holiday season. As I write this column in November, everybody is talking about the amazing capabilities of the Amiga. Even A.N.A.L.O.G. has acknowledged that many Atari-users consider the Amiga to be the real next-generation Atari machine. For those less interested in the Amiga’s graphics and sound capabilities, however, most would agree that the Atari 520ST offers comparable performance at a much more affordable price. Maybe everybody should buy both machines. Or, how about neither. Many computer-users dislike the notion of upgrading to a new computer when the industry tells them to; i.e. “now’s the time to dump that 8-bit antique and get a Mac-like machine.” Many 8-bit Atari owners have put a significant investment in their machines in software and hardware, and are less than thrilled about starting over from scratch with a brand new system.

One thing is for certain, though. The prices for software and hardware for the 8-bit line have dropped considerably. Many Atari users have finally been able to expand to fully-equipped Atari systems with disk drives, modems, and more versatile printers. The lower disk drive prices have made the cassette-based Atari system almost extinct.

Well, by 1986 you’ll know the score. I’m still hoping to see a true 32-bit, multi-megabyte machine from Atari—maybe they could add some Amiga-rivaling graphics and sound effects while they’re at it. We’ll have to wait and see what 1986 brings.

Reader Mail

Q. I purchased the first issue ever of Computer Shopper in September and came across your Response Analysis Program (9/85, page 59), which I spent 3 and 1/2 hours typing in. I was intrigued with this program and looked forward to demonstrating it to friends and relatives to show that computers can be programmed to simulate artificial intelligence.

After keying it in, it did not work properly. Enclosed I give you a printout showing an example of the responses I get. The program only responds with the statements contained in the last few lines, i.e. 5580 to 5587. It does not pick up on the key words the way it is supposed to. Any suggestions?

H. G. Hittenberg
Toronto, Ont. Canada

A. The printout that H.G. Wittenberg sent me was quite humorous and a portion of it follows:

>I WANT TO TALK ABOUT WORK RAP: EXPLAIN FURTHER >WORK - YOU KNOW - WHERE ONE GOES TO EARN MONEY RAP: AND WHAT DO YOU THINK ABOUT THAT? >I THINK WORK IS NECESSARY AND ENOBLING RAP: I DON’T UNDERSTAND >WELL, YOU ARE NOT PICKING UP THE KEY WORD WORK! RAP: WHAT ELSE SHOULD I KNOW? >YOU ARE MAKING ME ANGRY RAP: YOU SEEM UNCOMFORTABLE WITH THIS TOPIC! >NO, I AM ANGRY AND MAD THAT YOU DO NOT PICK UP THE KEY WORDS RAP: TELL ME MORE. >LOOK UP DATA STATEMENT IN LINE 1280--THAT’S WHERE YOU FIND ANGRY, MAD RAP: THAT IS INTERESTING--GO ON. >YOU ARE SUPPOSED TO COME UP WITH RESPONSE IN LINES 5390-5392! RAP: LETS HEAR ALL ABOUT IT!

While it may seem that RAP is putting up a good fight with H. Wittenberg, RAP is answering only with its dummy responses, such as “AND WHAT DO YOU THINK ABOUT THAT?”; and “TELL ME MORE.”

The Response Analysis Program as listed in the September 1985 column, has been thoroughly tested on an Atari 800, 800XL, and 130XE, and will work perfectly if it has been entered correctly. The cause of H. Wittenberg’s problem is most definitely a typing error. However, a TRAP statement in the program makes it difficult to spot errors since a faulty program will still run without error messages; the program is directed to give a dummy response whenever an error occurs in the program. Therefore, readers who are not getting proper responses from RAP, should change the TRAP 1190 on line 650 to a TRAP 40000. This disables the trap command and will let the program stop executing when an error occurs.

The best way to check RAP is to type in some lines from the sample conversation provided on page 59 of September’s issue. For example, if you type:

I’M CHECKING TO SEE IF YOU WORK PROPERLY.
RAP should give a response such as:
FOR HOW LONG HAVE YOU BEEN CHECKING TO SEE IF I WORK PROPERLY.

If you enter H. Wittenberg’s statement, “I WANT TO TALK ABOUT WORK,” a properly entered RAP will respond with a response such as:

DO YOU KNOW MANY PEOPLE WHO ENJOY THEIR JOBS?

As I have stressed in the past, the best insurance against typing errors when entering programs from this column is the Program Perfect utility, which uses the three-letter codes preceding each program line to verify lines as they are entered into the computer. See April’s column (1985) for a listing of Program Perfect (the instructions are printed in May’s column), or readers can purchase a Program Perfect diskette with documentation (see the end of this article).


Q. Regarding the small print in the manual supplied by Optimized Systems Software for their Basic XE cartridge (and presumably for their other products as well). It seems I, with overworked and less than perfect eyesight, trustingly ordered Basic XE by mail. Now, I have no gripe with the product. A recently published benchmark sort took nine minutes on my 130XE. When I plugged in the Basic XE cartridge, just to see what would happen (since I can’t read the tiny print in their manual) the same exact benchmark ran in 3:30 flat. This is clearly a powerful product but, alas, I may never get full use of it, despite having paid full price. Oh, I know I could have gotten a refund. That’s not the point. I want everything this product can do for me—the full capability I paid for. So, I wrote a strong gripe on the warranty form when I sent it in. The response from OSS to date has been a big round zilch. Ironically, they have other products I’d like and can afford to buy. Will I? Will you?

I’ve spent many years in marketing and advertising and there’s a moral here. The smart marketers today know that it’s not enough merely to make the initial sale of complex hardware, software or firmware products. You must support (and keep on selling) every customer after the sale if you want to build your company. The only practical way to do that for sales that doesn’t amount to big hucks is by providing manuals that are practical, understandable and readable. In fact, good manuals are powerful marketing tools for high-tech products. We get them from Synapse, from Datasoft and others. Even the tiny “one guy and a bright idea” operators are putting out documentation that’s readable, even if they don’t spell too well.

Unfortunately, OSS saw a chance to save a few bucks on printing and paper; a decision that may be good finance but is lousy marketing. It cheats every customer who doesn’t have the eyes of an eagle. So, watch yourselves, all near-sighted hackers. Caveat emptor is alive and well in the marketplace.

Roy Hutchins
Rochester, NY

A. I’m well aware of how annoying small print can be, even for those of us with the best eyesight, as I have received numerous letters about the small size of the program listings in this column. I can imagine that this would be even more frustrating when one pays good money for a commercial software product from a respectable company such as Optimized Systems Software. But perhaps an even more serious problem lies with the manufacturers that print manuals that are legible, but make no sense to the average computer user. This is seen frequently in the computer industry with companies that let their programmers and engineers write the manuals, instead of hiring a professional writer. Even worse are the companies that do not provide enough documentation, or none at all. Such was the case for a long time with Atari’s XL computers. The machines came with a little booklet that gave instructions for setting up the machine and disk drives—a far cry from the reference manual and BASIC book that were included with my original Atari 800 several years ago. Now Atari is including a much more substantial 130-page booklet and hopefully other companies, such as OSS, will move in this direction, for their own good as well as for their customers’.

RAP Intelligence Expansion

October’s (1985) column contained instructions for adding your own keywords and responses to RAP. For those readers who still want to teach RAP some new tricks, I have put together over 30 more keywords and more than 100 additional responses. I don’t have space to print it in the column, but the “Intelligence Expansion” is available on diskette to readers for $5. (See address at end of this article.) You must have at least a 48K Atari to run RAP with the expanded vocabulary.

Halley’s Comet

1986 is, of course, the year of Halley’s Comet, and a few software packages on the Halley’s Comet theme are available for the Atari astronomers out there. They are:

Halley Patrol, which includes an almanac and observing aid. A diskette for the 800/XL/XE is $19.95. (Urania Systems, Box 4890, Richmond, VA 23220).

Urania Systems (address above) all produces Spacebase, which is an astronomy program that turns your television screen into a planetarium. Over 400 heavenly objects can be plotted on the screen. $17.95 for a diskette for the 800/XL/XE.

The Halley Project is a recreational program which teaches characteristics of planets and moons. On diskette for the 800/XL/XE. (Mindscape, 3444 Dundee Road, Northbrook, IL 60062).

Corrections/Clarifications

In November’s column, the first and last lines were mysteriously omitted from the Programmable Keypad Revision. These changes are necessary for the program to function properly with the XL/XE revisions:

70 RESTORE:TOT=0:FOR I=1536 TO 1616:READ NUM 
490 FOR I=0 TO 16:IF PR(I)>-1 THEN POKE 1599+I,PR(I) 

Additionally, change the following line in the Recipe Manager program:

1260 IF I=28 THEN POP :K=27:GOTO 730 
This enables the ESC key to return you to the menu when you are on the CATEGORY: prompt.

In last, month’s column, the program segment that is labeled the “continued” section of the Simple Memory Tester is actually the remaining lines of the Recipe Manager Additions. Hence, the first part of Recipe Manager Additions appears on page 162 of December’s column, and the continuation appears on page 66—confusion, confusion!

520 ST Newsletter

The Jackintosh Boston Users’ Group is a part of The Boston Computer Society for Atari 520ST users and has sent me its latest newsletter for ST users. Their address: The Boston Computer Society, Jackintosh User Group, One Center Plaza, Boston, MA 02108. Other groups: Let’s see your newsletters—send them in to me.

PACE

Now it’s time to enter PACE, the Personal Appointment Calendar & Editor. PACE will keep you in step with your latest plans and will remind you days in advance when important occasions, such as birthdays or exams, are approaching so you’ll have time to prepare (i.e. buy and send out cards, or study). PACE can also provide you with a printout of your daily schedule each day.

Since the program is over 300 lines long, you should be prepared to spend some time typing it in. It’s a practical, user-friendly program, and it’ll be worth the effort. PACE requires a minimum of 32K and will work with diskette system only. Since PACE takes advantage of the random-access capabilities of the disk drive, a cassette recorder cannot be used.

Enter the program listed under the “Personal Appointment Calendar & Editor” heading and save it to diskette. Remember to use Program Perfect so you don’t get stuck with inumerable typing errors.

PRESS ESC FOR TOMORROW'S 

Appointments for today, 
WEDNESDAY, JAN. 15, 1986 

9:18AM Staff meeting in 
conference room 
11AM Appt. at L.F. & Co. 
5PM Presentation-rm 310 
5:15PM Dentist, room 105 
5:45PM Dinner at Rd Lbst 
8:30PM Theatre 
*Sandra's birthday 
*Presentation/report due 
Photo 3

When you run the program, you’ll be asked to “INSERT YOUR DATA DISKETTE.” If you are using a single-density format, you’ll need a separate blank diskette to store the data. If you’re using dual-density format, you have room to store the data file and the program on the same diskette. If you place an unformatted diskette into the drive, the program will format it for you if you answer Y to the “Want to format diskette?” prompt.

Next, PACE will create an appointment file on the data diskette. Type Y for the “Create an appointment file?” prompt and enter your name and today’s date as directed. Then you will be asked to enter a password. Since this will be your personal appointment calendar, you may want to prevent others from peering at your plans. You can enter any password you want, or you can just press RETURN if you would rather not have a password. If you opt for the password, be sure it’s one you’ll remember!

You’ll be given the opportunity to correct any errors and then will be brought to the main screen (see Photo 2).

This is the screen that you’ll see each time you run the program. If you have chosen a password, you’ll have to enter the password correctly before you can access this screen.

Your name is displayed along with the date that you last used PACE. The date in the center of the screen is used to display the current date. Since you just created a data file, the previous date and the current date will be the same. When you use PACE in the future, use the START, SELECT and OPTION keys to set the new date. The day of the week is automatically calculated by the program for any day of the year. You’ll probably want to use PACE at least once a day to see your daily plans, upcoming plans, and to enter new appointments.

HELLO, JEFF BRENNER! 
The last time you used PACE was on 
TUESDAY, JAN. 14, 1986. 

Use the START, SELECT, and OPTION KEYS 
to set today's month, day and year. 
PRESS RETURN WHEN THE DATE IS SET 
         ┌───┐┌──┐┌────┐ 
         │JAN││15││1986│ 
         └───┘└──┘└────┘ 
Photo 2

Press RETURN when the current date is set and the PACE Appointment Display is shown. This mini-screen is where your daily appointments are read. Since you have not yet entered any appointments, this screen will be blank, but Photo 3 shows what a typical schedule might look like. The asterisks denote important occasions that are to be brought to our attention days in advance, such as birthdays or deadlines. If you have a printer, CONTROL-P can be used at any time to print out the schedule on paper. You could also make changes on this screen at any time and they will be recorded on the diskette.

Upcoming important entries: 

FRI 1/17: *2nd Payment due 

SAT 1/18: 
SUN 1/19: *ANNIVERSARY-GET GIFT!!! 

MON 1/20: *Lora's birthday 

TUE 1/21: *Project deadline 

WED 1/22: *ENGR Exam - STUDY! 

      Press RETURN to continue. 

Photo 4

Pressing ESC will show you the following day’s schedule. You can revise or print out this schedule too.

Another press of the ESC key brings you to the “Upcoming important entries” screen. Here the program gives you a look at important occasions (those that had been preceded by an asterisk) that are approaching within the next seven days (see Photo 4).

When you press RETURN, you are asked if you want to enter appointments. If you type Y for this prompt, you will be returned to the main screen where you will be asked to set the date for which you want to enter appointments. You will then be brought to the PACE Appointment Display where you can enter appointments for that date. You can type freely on the mini-screen as you choose, using the Atari’s control and cursor keys for positioning and editing.

You can continue entering appointments for any number of future dates by answering Y each time to the “Add or change more appointments?” prompt.

When you’re done, the program will take a few seconds to save its reference data to the data diskette and will give you the option of stopping or rerunning the program. Up to 366 days of schedules can be stored on a diskette.

Happy New Year to all readers, and may you never miss a dentist appointment, birthday, anniversary, studying for an exam, etc., again!

Next Month

We’ll have more details on PACE and hopefully a Halley’s Comet program, more reader mail and surprises too. Stay tuned.

Readers’ questions, comments and contributions are welcome. Please enclose a self-addressed, stamped envelope for a personal reply.

A diskette of the programs listed in this month’s column is available from the author for $7.00, postpaid. Please specify your disk drive model.

Program Perfect” is utility used to check for typing errors while entering programs from this column. Readers may send $5.00 for a diskette of this program and documentation.

Address all correspondence to:

Jeff Brenner
“Applying The Atari 1/86”
c/o Computer Shopper
P.O. Box F
Titusville, FL
32781-9990
PERSONAL APPOINTMENT CALENDAR & EDITOR 

PEJ 10 REM PERSONAL APPOINTMENT CALENDAR/EDITOR 
KGJ 20 REM COPYRIGHT 1986 JEFF BRENNER 
YVJ 30 MIN=1985 
FXJ 40 DIM DISK$(3),FILE$(20):DISK$="D1:" 
EPJ 50 FILE$=DISK$:FILE$(LEN(FILE$)+1)="PACE.DAT" 
YBJ 60 DIM TEXT$(200),A$(200),SP$(24),NAME$(30),DATE$(24),DAYS(30),SUM(11) 
AUJ 70 DIM PW$(20),LS$(366),HS$(366),BYTE$(366),IN$(27),MR$(4),DEL$(23),S$(5) 
LXJ 80 DIM MSG$(240):MSG$=CHR$(32):MSG$(240)=CHR$(32):MSG$(2)=MSG$ 
NUJ 90 TEXT$="START":GOSUB 1610:S$=TEXT$ 
DVJ 100 DEL$(1)=CHR$(156):DEL$(23)=CHR$(156):DEL$(2)=DEL$:DEL$(1,1)=CHR$(157) 
LLJ 110 DIM MONTH$(36):RESTORE 2740:FOR I=1 TO 12:READ A$,DAYS 
AUJ 120 MONTH$(LEN(MONTH$)+1)=A$(1,3):DAYS(I)=DAYS:NEXT I 
GDJ 130 DIM DAY$(21):FOR I=1 TO 7:READ A$:DAY$(LEN(DAY$)+1)=A$(1,3):NEXT I 
JXJ 140 SP$(1)=CHR$(32):SP$(24)=CHR$(32):SP$(2)=SP$:A$=CHR$(32):A$(2,2)=CHR$(29) 
TVJ 150 A$(3,3)=CHR$(30):IN$=A$:FOR I=1 TO 8:IN$(LEN(IN$)+1)=A$:NEXT I 
QHJ 160 RESTORE 2770:FOR I=0 TO 11:READ SUM:SUM(I)=SUM:NEXT I 
JHJ 170 DL=PEEK(560)+256*PEEK(561):MR$=CHR$(28):MR$(2,2)=CHR$(156) 
IQJ 180 MR$(3,4)=MR$ 
MEJ 190 OPEN #1,4,0,"K:":PRINT CHR$(125);"STAND BY...":GOSUB 2560:GOSUB 2920 
EEJ 200 GOSUB 1450:POKE 85,8 
UDJ 210 PRINT "INSERT YOUR DATA DISKETTE" 
UOJ 220 TEXT$="RETURN":GOSUB 1610 
BDJ 230 POKE 752,1:POKE 85,10:PRINT "PRESS ";TEXT$;" TO BEGIN":POKE 764,255:D=25 
RJJ 240 POKE 1771,10:GOSUB 1500:IF PEEK(764)<255 THEN 260 
PQJ 250 POKE 1771,4:GOSUB 1500:IF PEEK(764)=255 THEN 240 
XHJ 260 GET #1,N:POSITION 2,3:PRINT CHR$(156);CHR$(156);:POKE 1771,10 
GVJ 270 A$=DISK$:A$(LEN(A$)+1)="PACE.PNT" 
JIJ 280 TRAP 1940:OPEN #2,4,0,A$:INPUT #2;NAME$,DATE$,M,D,Y,PW$:TRAP 40000 
XMJ 290 FOR I=1 TO 3:INPUT #2,A$:LS$(LEN(LS$)+1)=A$:NEXT I 
WWJ 300 FOR I=1 TO 3:INPUT #2,A$:HS$(LEN(HS$)+1)=A$:NEXT I 
FUJ 310 FOR I=1 TO 3:INPUT #2,A$:BYTE$(LEN(BYTE$)+1)=A$:NEXT I:CLOSE #2 
HXJ 320 IF LEN(PW$)=0 THEN 390 
SLJ 330 FOR I=1 TO 3:POSITION 2,2 
LRJ 340 POKE 1770,4:POKE 694,0:POKE 702,64:PRINT "PASSWORD:":INPUT #16;A$ 
XIJ 350 IF A$=PW$ THEN 380 
CGJ 360 PRINT CHR$(28);CHR$(156);CHR$(29);CHR$(156);"(";3-I;") TRY AGAIN." 
NUJ 370 PRINT CHR$(253);:NEXT I 
SQJ 380 IF I=4 THEN GRAPHICS 0:PRINT "Access denied.":NEW 
YCJ 390 POKE 1770,10:POKE 84,2:PRINT "HELLO, ";NAME$;"!":TEXT$="PACE":GOSUB 1610 
OQJ 400 PRINT "The last time you used ";TEXT$;" was on":PRINT DATE$;"." 
ANJ 410 GOSUB 420:GOTO 450 
VFJ 420 PRINT SP$:PRINT "Use the ";S$;", "; 
XMJ 430 TEXT$="SELECT":GOSUB 1610:PRINT TEXT$;" and "; 
RAJ 440 TEXT$="OPTION":GOSUB 1610:PRINT TEXT$;" KEYS":RETURN 
XYJ 450 PRINT " to set today's month, day and year." 
SUJ 460 TEXT$="RETURN":GOSUB 1610:POKE 85,4 
MNJ 470 PRINT "PRESS ";TEXT$;" WHEN THE DATE IS SET":GOSUB 480:GOTO 720 
OFJ 480 POKE 764,255:PRINT :T=PEEK(84):FOR I=1776 TO 1778:POKE I,14:NEXT I 
UNJ 490 FOR I=1779 TO 1781:POKE I,0:NEXT I:FOR I=1782 TO 1790:POKE I,4:NEXT I 
PLJ 500 POKE 84,9:RESTORE 2420:FOR I=1 TO 3:POKE 85,13 
WMJ 510 FOR J=1 TO 15:READ N:PRINT CHR$(N);:NEXT J:PRINT :NEXT I 
DSJ 520 FOR I=DL+17 TO DL+19:POKE I,146:NEXT I:POKE 54276,10 
MBJ 530 FOR I=1 TO 3:READ X:POKE 85,X:FOR J=1 TO 5:READ N:PRINT CHR$(N); 
LDJ 540 NEXT J:PRINT :NEXT I 
LBJ 550 POKE 84,10:SOUND 0,0,0,0 
TFJ 560 POKE 85,14:PRINT MONTH$(M*3-2,M*3);:POKE 85,19:IF D<10 THEN PRINT "0"; 
QCJ 570 PRINT D;:POKE 85,23:PRINT Y;:SR=0 
RVJ 580 NUM=SUM(M-1)+D+INT((Y-1752-(M<3))/4)+365*(Y-1753)-2 
PIJ 590 YH=Y-(M<3):NUM=NUM-INT(YH/100)+INT(YH/400)-13 
DPJ 600 WD=NUM-7*INT(NUM/7):IF SR THEN RETURN 
CEJ 610 POSITION 28,13:PRINT DAY$(WD*3+1,WD*3+3) 
KJJ 620 A=PEEK(53279):IF A=7 AND PEEK(764)=255 THEN W=0:GOTO 620 
IKJ 630 IF A<>7 THEN SOUND 0,INT(A/2),6,4 
WVJ 640 LP=0:IF M=2 AND Y/4=INT(Y/4) THEN LP=1 
JHJ 650 IF Y/100=INT(Y/100) THEN IF Y/400<>INT(Y/400) THEN LP=0 
LQJ 660 IF A=6 THEN M=M+1:IF M>12 THEN M=1 
GXJ 670 IF A=5 THEN D=D+1:IF D>DAYS(M)+LP THEN D=1 
FWJ 680 IF A=3 THEN Y=Y+1:IF Y>MIN+15 THEN Y=MIN 
UGJ 690 IF W<20 AND PEEK(53279)<>7 THEN W=W+1:SOUND 0,0,0,0:GOTO 690 
OHJ 700 GOSUB 2530:IF PEEK(764)<>12 THEN 550 
AYJ 710 RETURN 
NKJ 720 SOUND 0,0,0,0:GOSUB 1520:GOSUB 1580 
PRJ 730 TEXT$="PRESS":TEXT$(LEN(TEXT$)+1)=CHR$(2):POSITION 8,1 
JQJ 740 TEXT$(LEN(TEXT$)+1)="ESC":TEXT$(LEN(TEXT$)+1)=CHR$(22) 
HAJ 750 TEXT$(LEN(TEXT$)+1)="FOR TOMORROW'S":GOSUB 1610:PRINT TEXT$ 
SGJ 760 CLOSE #2:OPEN #2,12,0,FILE$ 
RZJ 770 POSITION 8,2:PRINT "Appointments for today,":GOSUB 780:GOTO 810 
HAJ 780 RESTORE 2760:FOR I=0 TO WD:READ A$:NEXT I:POKE 85,8 
WOJ 790 PRINT A$;CHR$(44);CHR$(32);MONTH$(M*3-2,M*3);CHR$(46);CHR$(32); 
DGJ 800 PRINT D;CHR$(44);CHR$(32);Y;:PRINT SP$(1,33-PEEK(85));:RETURN 
TPJ 810 GOSUB 2530:IF SEC+BYTE THEN POINT #2,SEC,BYTE 
BBJ 820 GOSUB 830:GOTO 850 
CBJ 830 FOR I=1 TO 9:A$=SP$:IF SEC+BYTE>0 THEN INPUT #2;A$ 
FEJ 840 POSITION 8,I+3:PRINT A$:NEXT I:RETURN 
VQJ 850 POKE 764,255:POSITION 8,4:GOSUB 1920:IF CT THEN GOSUB 1350 
CBJ 860 POSITION 8,2:PRINT "Tomorrow's Appointments." 
APJ 870 TEXT$="TO CONTINUE":TEXT$(LEN(TEXT$)+1)=SP$(1,3):GOSUB 1610 
RXJ 880 POSITION 18,1:PRINT TEXT$;:POSITION 8,1:PRINT CHR$(255);CHR$(160) 
BIJ 890 POSITION 32,1:PRINT CHR$(32) 
XEJ 900 REC2=REC:D2=D:M2=M:Y2=Y:WD2=WD:WD=WD+1:IF WD=7 THEN WD=0 
WMJ 910 D=D+1:IF D>DAYS(M)+LP THEN D=1:M=M+1:IF M>12 THEN M=1:Y=Y+1 
NEJ 920 POSITION 8,3:GOSUB 780 
TSJ 930 GOSUB 2530:IF SEC+BYTE THEN POINT #2,SEC,BYTE 
EQJ 940 GOSUB 830 
VRJ 950 POKE 764,255:POSITION 8,4:GOSUB 1920:IF CT THEN GOSUB 1350 
HAJ 960 GOSUB 1450:PRINT "Upcoming important entries:" 
MTJ 970 POKE 752,1:PRINT :WD=WD+1:IF WD=7 THEN WD=0 
RSJ 980 LN=LN+1:D=D+1:IF D>DAYS(M)+LP THEN D=1:M=M+1:IF M>12 THEN M=1:Y=Y+1 
IZJ 990 RESTORE 2760:FOR I=0 TO WD:READ A$:NEXT I 
JRJ 1000 PRINT A$(1,3);CHR$(32);M;"/";D;": "; 
CZJ 1010 GOSUB 2530:IF SEC+BYTE=0 THEN GOTO 1060 
CLJ 1020 POINT #2,SEC,BYTE 
YIJ 1030 FOR J=1 TO 9:INPUT #2;A$:IF A$(1,1)<>"*" THEN NEXT J:GOTO 1100 
YIJ 1040 PRINT A$:LN=LN+1:IF LN<16 THEN NEXT J:GOTO 1060 
COJ 1050 GOSUB 1080:GOSUB 1450:NEXT J 
RCJ 1060 IF LN>15 THEN GOSUB 1080:GOSUB 1450 
FBJ 1070 GOTO 1100 
OMJ 1080 PRINT :POKE 85,8:TEXT$="RETURN":GOSUB 1610 
HBJ 1090 PRINT "Press ";TEXT$;" for more.":GET #1,A:LN=0:RETURN 
KWJ 1100 IF REC<REC2+7 THEN 970 
DHJ 1110 D=D2:M=M2:Y=Y2:WD=WD2:TEXT$="RETURN":GOSUB 1610 
DNJ 1120 PRINT :POKE 85,8:PRINT "Press ";TEXT$;" to continue.":GET #1,A 
EQJ 1130 GOSUB 1450:PRINT :PRINT "Want to enter appointments? ";:GOSUB 2460 
WMJ 1140 IF N=78 THEN 2800 
XWJ 1150 PRINT "Want to define the control keys? ";:GOSUB 2460 
WJJ 1160 IF N=78 THEN 1220 
IPJ 1170 PRINT "Type up to 24 characters for each":PRINT "control key." 
OSJ 1180 TEXT$="RETURN":GOSUB 1610:PRINT "Press ";TEXT$;" by itself when you've" 
UFJ 1190 PRINT "finished defining control keys." 
HVJ 1200 PRINT :PRINT :FOR I=65 TO 74:PRINT MR$;"CONTROL-";CHR$(I);":" 
JMJ 1210 INPUT #16;A$:IF LEN(A$) THEN MSG$((I-65)*24+1,(I-65)*24+24)=A$:NEXT I 
GFJ 1220 GOSUB 1450:GOSUB 420:PRINT "to select date to add appointments." 
OFJ 1230 PRINT :POKE 85,4:TEXT$="RETURN":GOSUB 1610 
SPJ 1240 PRINT "PRESS ";TEXT$;" WHEN THE DATE IS SET" 
NYJ 1250 POKE 752,1:GOSUB 480:POKE 752,0:SOUND 0,0,0,0:GOSUB 1520:GOSUB 1580 
UVJ 1260 TEXT$="PRESS":TEXT$(LEN(TEXT$)+1)=CHR$(2):TEXT$(LEN(TEXT$)+1)="ESC" 
JCJ 1270 TEXT$(LEN(TEXT$)+1)=CHR$(22):TEXT$(LEN(TEXT$)+1)="TO CONTINUE" 
MJJ 1280 GOSUB 1610:POSITION 8,1:PRINT CHR$(160);TEXT$;CHR$(160);CHR$(160) 
CYJ 1290 POSITION 8,2:PRINT "Appointments for: ":GOSUB 780 
YMJ 1300 IF SEC+BYTE>0 THEN POINT #2,SEC,BYTE 
SJJ 1310 GOSUB 830:POSITION 8,4:GOSUB 1920:IF CT THEN GOSUB 1350 
BAJ 1320 GOSUB 1450:PRINT "Add or change more appointments? ";:GOSUB 2460 
WNJ 1330 IF N=78 THEN 2800 
FEJ 1340 GOTO 1220 
XIJ 1350 NF=1:GOSUB 2530:IF SEC+BYTE>0 THEN NF=0:POINT #2,SEC,BYTE:GOTO 1390 
SJJ 1360 CLOSE #2:OPEN #2,9,0,FILE$ 
NJJ 1370 NOTE #2,SEC,BYTE:H=INT(SEC/256):L=SEC-H*256 
UIJ 1380 HS$(REC,REC)=CHR$(H):LS$(REC,REC)=CHR$(L):BYTE$(REC,REC)=CHR$(BYTE) 
HOJ 1390 POKE 842,13:FOR I=1 TO 9:POSITION 8,3+I:INPUT #16;A$ 
WRJ 1400 IF LEN(A$)>24 THEN A$=A$(1,24) 
SQJ 1410 IF LEN(A$)<24 THEN A$(LEN(A$)+1,24)=SP$ 
FLJ 1420 PRINT #2;A$:NEXT I:POKE 842,12 
VLJ 1430 IF NF THEN CLOSE #2:OPEN #2,12,0,FILE$ 
PBJ 1440 CT=0:RETURN 
TCJ 1450 GRAPHICS 0:POKE 16,64:POKE 53774,64:A=USR(1664) 
HXJ 1460 POKE 559,0:POKE 1767,0:POKE 1768,0:TEXT$=CHR$(32):SETCOLOR 4,9,0 
OTJ 1470 POKE 53248,0:POKE 53249,0 
NFJ 1480 PRINT CHR$(125);:POSITION 0,0:PRINT M1$:POSITION 0,1:PRINT M2$ 
FBJ 1490 POKE 559,34:RETURN 
GBJ 1500 FOR I=1 TO D:IF PEEK(764)=255 THEN NEXT I 
CTJ 1510 RETURN 
NSJ 1520 GOSUB 1450:POKE 559,0:PRINT CHR$(125);:POKE 623,0:POKE 764,255:CT=0 
QHJ 1530 FOR I=1771 TO 1790:POKE I,10:NEXT I 
UWJ 1540 POKE 1767,1:POKE 1768,8:POKE 1769,14:POKE 1770,14:POKE 1788,1 
MLJ 1550 RESTORE 2780:FOR I=0 TO 31:READ N:POKE DL+I,N:NEXT I 
DIJ 1560 POSITION 8,0:PRINT M3$;:POSITION 8,13:PRINT M4$ 
FAJ 1570 POKE 559,34:RETURN 
LIJ 1580 SETCOLOR 4,9,0:POKE 704,144:POKE 705,144:POKE 53277,3:POKE 53248,48 
JPJ 1590 POKE 53277,0:POKE 53261,255:POKE 53249,176:POKE 53262,255 
KKJ 1600 POKE 53256,3:POKE 53257,3:RETURN 
KUJ 1610 FOR I=1 TO LEN(TEXT$) 
GOJ 1620 TEXT$(I,I)=CHR$(ASC(TEXT$(I,I))+128):NEXT I:RETURN 
TMJ 1630 POKE 85,(40-LEN(TEXT$))/2:PRINT TEXT$:RETURN 
TGJ 1640 TRAP 40000:CT=0 
PVJ 1650 GET #1,K:IF PEEK(694)>0 THEN K=K-128:POKE 694,0 
XIJ 1660 IF K>27 AND K<123 OR K=127 OR K=154 OR K=155 OR K=126 THEN 1840 
LVJ 1670 IF K=16 THEN GOSUB 2650:GOTO 1920 
YNJ 1680 IF K=254 THEN 1840 
BWJ 1690 IF K<>157 THEN 1720 
UNJ 1700 POKE 752,1:PRINT CHR$(K);:V=PEEK(84):POSITION 8,13:PRINT CHR$(156); 
WQJ 1710 CT=CT+1:POKE 84,V:POKE 85,8:GOTO 1920 
BSJ 1720 IF K<>156 THEN 1750 
RCJ 1730 POKE 752,1:POKE 1787,4:PRINT CHR$(K);:V=PEEK(84):CT=CT+1 
JQJ 1740 POSITION 8,12:PRINT CHR$(157);:POKE 1787,10:GOTO 1710 
ICJ 1750 IF K=27 THEN RETURN 
YQJ 1760 IF K<255 THEN 1790 
GPJ 1770 PRINT CHR$(K);:H=PEEK(85):V=PEEK(84):POSITION 32,4:POKE 752,1 
REJ 1780 PRINT IN$:POSITION H,V:GOTO 1850 
WIJ 1790 IF K>10 THEN 1820 
MHJ 1800 POKE 752,1:PRINT MSG$(K*24-23,K*24-PEEK(85)+8) 
QEJ 1810 POKE 85,8:CT=5:GOTO 1850 
WMJ 1820 SOUND 1,60,6,8:FOR I=1 TO 40:NEXT I:SOUND 1,0,0,0 
FPJ 1830 GOTO 1650 
NVJ 1840 CT=CT+1:POKE 752,1:PRINT CHR$(K);:IF K=156 OR K=157 THEN POKE 85,8 
TEJ 1850 IF PEEK(85)>31 THEN POKE 85,8:POKE 84,PEEK(84)+1 
AXJ 1860 IF PEEK(84)>12 THEN POKE 84,4 
LJJ 1870 IF PEEK(85)>7 THEN 1910 
RPJ 1880 IF K=126 THEN POKE 85,32:POKE 84,PEEK(84)-1:PRINT CHR$(K);:GOTO 1910 
KZJ 1890 IF K=155 THEN POKE 85,8:GOTO 1910 
ADJ 1900 POKE 85,31:POKE 84,PEEK(84)-1 
ARJ 1910 IF PEEK(84)<4 THEN POKE 84,12 
NXJ 1920 POKE 752,0:PRINT CHR$(31);CHR$(30); 
FQJ 1930 GOTO 1650 
GEJ 1940 CLOSE #2:E=PEEK(195) 
BJJ 1950 IF E<>144 THEN 2060 
XNJ 1960 POSITION 2,2:PRINT DEL$;"Diskette must be formatted." 
OYJ 1970 POKE 752,0:PRINT "Want to format this diskette? ";:GOSUB 2460 
UUJ 1980 IF N=78 THEN 200 
HHJ 1990 POKE 752,1 
GKJ 2000 PRINT MR$;"Press ";S$;" to format disk in drive ";DISK$(2,2) 
IPJ 2010 TEXT$="OPTION":GOSUB 1610:PRINT "or press ";TEXT$;" to cancel." 
XGJ 2020 A=PEEK(53279):IF A<>3 AND A<>6 THEN 2020 
OPJ 2030 IF PEEK(53279)=3 THEN 200 
YAJ 2040 PRINT "Formatting...":XIO 253,#7,33,87,DISK$ 
BYJ 2050 POSITION 2,2:PRINT DEL$;"Formatting completed.":GOTO 2080 
BGJ 2060 IF E<>170 THEN 2380 
RRJ 2070 POSITION 2,2:PRINT DEL$;"No appointment file on this disk." 
GYJ 2080 POKE 752,0:PRINT "Create an appointment file? ";:GOSUB 2460 
UNJ 2090 IF N=78 THEN 200 
TXJ 2100 POSITION 2,2:PRINT DEL$;"Enter your name.":INPUT #16;NAME$ 
TJJ 2110 PRINT MR$;"Enter the date (Example: 1/12/86).":INPUT #16;A$ 
LMJ 2120 TRAP 2110:FOR I=2 TO LEN(A$):IF A$(I,I)<>"/" THEN NEXT I 
EOJ 2130 M=VAL(A$(1,I-1)):FOR J=I+2 TO LEN(A$):IF A$(J,J)<>"/" THEN NEXT J 
VUJ 2140 D=VAL(A$(I+1,J-1)):Y=VAL(A$(J+1)):IF Y>99 THEN 2150 
FOJ 2150 TRAP 40000:C=INT(MIN/100)*100:IF Y>=MIN-C THEN Y=Y+C:GOTO 2170 
FAJ 2160 Y=Y+C+100 
NNJ 2170 PRINT MR$;"Enter a password (RETURN for none).":INPUT #16;PW$ 
THJ 2180 SR=1:GOSUB 580 
GLJ 2190 RESTORE 2760:FOR I=0 TO WD:READ A$:NEXT I:DATE$=A$ 
LFJ 2200 DATE$(LEN(DATE$)+1)=CHR$(44):DATE$(LEN(DATE$)+1)=CHR$(32) 
HJJ 2210 DATE$(LEN(DATE$)+1)=MONTH$(M*3-2,M*3):DATE$(LEN(DATE$)+1)=CHR$(46) 
KZJ 2220 DATE$(LEN(DATE$)+1)=CHR$(32):DATE$(LEN(DATE$)+1)=STR$(D) 
LIJ 2230 DATE$(LEN(DATE$)+1)=CHR$(44):DATE$(LEN(DATE$)+1)=CHR$(32) 
WHJ 2240 DATE$(LEN(DATE$)+1)=STR$(Y) 
SBJ 2250 PRINT MR$;"NAME: ";NAME$:PRINT "DATE: ";DATE$ 
GNJ 2260 IF LEN(PW$) THEN PRINT "PASSWORD: ";PW$ 
GGJ 2270 IF LEN(PW$)=0 THEN PRINT "NO PASSWORD." 
FTJ 2280 PRINT "Is all of the above correct? ";:GOSUB 2460 
KTJ 2290 IF N=78 THEN GOTO 2100 
RMJ 2300 PRINT "Saving this data..." 
IOJ 2310 A$=DISK$:A$(LEN(A$)+1)="PACE.PNT" 
JRJ 2320 OPEN #2,8,0,A$:PRINT #2;NAME$;CHR$(155);DATE$;CHR$(155); 
SRJ 2330 PRINT #2;M;CHR$(155);D;CHR$(155);Y;CHR$(155);PW$ 
EZJ 2340 A$=CHR$(0):A$(122)=CHR$(0):A$(2)=A$ 
FHJ 2350 FOR I=1 TO 9:PRINT #2;A$:NEXT I:CLOSE #2 
KDJ 2360 A$=DISK$:A$(LEN(A$)+1)="PACE.DAT":OPEN #2,8,0,A$:CLOSE #2:POKE 752,1 
JYJ 2370 GOSUB 1450:POKE 85,4:PRINT "Appointment file has been made.":GOTO 220 
PLJ 2380 TEXT$="ERROR #":TEXT$(LEN(TEXT$)+1)=STR$(E):GOSUB 1610:GOSUB 1630 
NUJ 2390 TEXT$="START":GOSUB 1610:PRINT "Press ";TEXT$;" to start again." 
TCJ 2400 IF PEEK(53279)<>6 THEN 2400 
DEJ 2410 GOTO 200 
YOJ 2420 DATA 17,18,18,18,5,17,18,18,5,17,18,18,18,18,5 
OYJ 2430 DATA 124,32,32,32,124,124,32,32,124,124,32,32,32,32,124 
YKJ 2440 DATA 26,18,18,18,3,26,18,18,3,26,18,18,18,18,3 
VXJ 2450 DATA 19,17,18,18,18,5,27,124,32,32,32,124,35,26,18,18,18,3 
IEJ 2460 H=PEEK(85) 
ELJ 2470 POKE 694,0:POKE 702,64:GET #1,N:IF N>128 THEN N=N-128 
KWJ 2480 IF N=78 THEN PRINT "NO":RETURN 
OFJ 2490 IF N=89 THEN PRINT "YES":RETURN 
YOJ 2500 PRINT 
HPJ 2510 PRINT CHR$(156);CHR$(253);"Y OR N";CHR$(28); 
LFJ 2520 POKE 85,H:PRINT CHR$(30);CHR$(31);:GOTO 2470 
VNJ 2530 REC=SUM(M-1)+D:IF M>2 THEN REC=REC+1 
KHJ 2540 SEC=ASC(HS$(REC,REC))*256+ASC(LS$(REC,REC)) 
POJ 2550 BYTE=ASC(BYTE$(REC,REC)):RETURN 
JHJ 2560 I=40:DIM M1$(I),M2$(I),M3$(I),M4$(I) 
RRJ 2570 TEXT$=CHR$(32) 
XHJ 2580 TEXT$(LEN(TEXT$)+1)="Personal Appointment Calendar & Editor" 
APJ 2590 TEXT$(LEN(TEXT$)+1)=CHR$(32):GOSUB 1610:M1$=TEXT$ 
LCJ 2600 TEXT$=SP$(1,7):TEXT$(LEN(TEXT$)+1)="Copyright 1986 Jeff Brenner" 
YXJ 2610 TEXT$(LEN(TEXT$)+1)=SP$(1,6):GOSUB 1610:M2$=TEXT$ 
UIJ 2620 TEXT$="PACE APPOINTMENT DISPLAY":GOSUB 1610:M3$=TEXT$ 
UHJ 2630 TEXT$="PRESS CONTROL-P TO PRINT":GOSUB 1610:M4$=TEXT$ 
CYJ 2640 RETURN 
NHJ 2650 TRAP 2680:OPEN #3,8,0,"P:":PRINT #3 
CJJ 2660 FOR I=2 TO 12:POKE 842,13:POSITION 8,I:INPUT #16;A$:PRINT #3;A$:NEXT I 
IPJ 2670 POSITION 8,4:PRINT #3:RETURN 
QVJ 2680 CLOSE #3:TEXT$="PRINTER DOES NOT RESPOND":GOSUB 1610 
CTJ 2690 H=PEEK(85):V=PEEK(84):POSITION 8,13:PRINT TEXT$ 
BJJ 2700 POKE 1788,14:SOUND 1,50,6,8:FOR I=1 TO 40:NEXT I:SOUND 1,0,0,0 
YNJ 2710 POSITION H,V:PRINT CHR$(31);CHR$(30); 
RAJ 2720 IF PEEK(764)=255 THEN 2720 
AUJ 2730 POSITION 8,13:PRINT M4$:POKE 1788,1:POSITION H,V:RETURN 
BHJ 2740 DATA JANUARY,31,FEBRUARY,28,MARCH,31,APRIL,30,MAY,31,JUNE,30,JULY,31 
PRJ 2750 DATA AUGUST,31,SEPTEMBER,30,OCTOBER,31,NOVEMBER,30,DECEMBER,31 
EMJ 2760 DATA SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY 
BAJ 2770 DATA 0,31,59,90,120,151,181,212,243,273,304,334 
MXJ 2780 DATA 240,112,112,194,64,156,130,112,130,130,112,130,128,130,128,130 
LUJ 2790 DATA 128,130,128,130,128,130,128,130,128,130,128,130,130,65,32,156 
SZJ 2800 GOSUB 1450:PRINT "Saving appointment data...":CLOSE #2 
NDJ 2810 M=M2:D=D2:Y=Y2:WD=WD2 
HIJ 2820 GOSUB 780:POKE 842,13:POSITION 8,4:INPUT #16;DATE$:POKE 842,12 
PHJ 2830 A$=DISK$:A$(LEN(A$)+1)="PACE.PNT":OPEN #2,8,0,A$ 
EZJ 2840 PRINT #2;NAME$;CHR$(155);DATE$ 
SYJ 2850 PRINT #2;M;CHR$(155);D;CHR$(155);Y;CHR$(155);PW$ 
XTJ 2860 FOR I=0 TO 2:PRINT #2;LS$(I*122+1,I*122+122):NEXT I 
XQJ 2870 FOR I=0 TO 2:PRINT #2;HS$(I*122+1,I*122+122):NEXT I 
EOJ 2880 FOR I=0 TO 2:PRINT #2;BYTE$(I*122+1,I*122+122):NEXT I 
NKJ 2890 CLOSE #2:PRINT "Run this program again? ";:GOSUB 2460 
CNJ 2900 IF N=89 THEN GRAPHICS 0:RUN 
UWJ 2910 GRAPHICS 0:END 
SNJ 2920 REM MULTI-LUMINANCE SUBROUTINE 
OJJ 2930 REM COPYRIGHT 1985 JEFF BRENNER 
AOJ 2940 IF PEEK(1664)>0 THEN RETURN 
XRJ 2950 RESTORE 3000:I=0 
CLJ 2960 READ NUM:IF NUM=-1 THEN 2980 
VHJ 2970 TOT=TOT+NUM+1:POKE 1664+I,NUM:I=I+1:GOTO 2960 
VQJ 2980 IF TOT<>13108 THEN PRINT "ERROR-CHECK DATA LINES":STOP 
GCJ 2990 A=USR(1664):RETURN 
RQJ 3000 DATA 104,173,48,2,133,204,173,49,2,133,205,160,26,169,10 
VMJ 3010 DATA 153,230,6,136,208,250,160,0,177,204,9,128,145,204,160 
SHJ 3020 DATA 3,177,204,9,128,145,204,160,6,177,204,9,128,145,204 
MHJ 3030 DATA 200,192,28,208,245,169,197,141,0,2,169,6,141,1,2 
RVJ 3040 DATA 173,14,212,9,128,141,14,212,96,72,152,72,173,11,212 
RHJ 3050 DATA 201,7,240,18,201,8,240,14,230,204,164,204,185,231,6 
QHZ 3060 DATA 141,23,208,104,186,104,64,169,0,133,204,240,238,-1 

[END OF LISTING] 
COMPUTER SHOPPER / JANUARY 1986 / PAGE 57 

Atari Help

by Jeff Brenner

Q. The August 1984 issue of Computer Shopper included a program for alphabetizing words and then storing and retrieving these words. This program has turned out to be very handy. Is there a way to delete words from the alphabetized list?

John M. Hirsch
Normal, IL

A. There are two easy ways to delete an entry from an alphabetized list. Consider the following string, which represents five words A, B, C, D and E; WORDS$ = “ABCDE”. Each “word” has its own position in the string; “A” is in position 1, “B” is in position 2, and so forth. Deleting an entry is then a simple matter if you are familiar with the way Atari BASIC handles strings. If you wanted to delete the “B” entry above, for example, the following command would do the trick: LET WORDS$(2)=WORDS$(3,5). This tells the computer to place in position 2 (where the “B” resides) the entries in positions 3 through 5. Thus, WORDS$ now contains: “ACDE”. The “B” has been deleted.

A similar procedure can be used to delete an entry in August’s alphabetizing program. For example, to delete entry number X, use the following:

LET WORDS$(X*20-19)=WORDS$(X*20+1,LEN(WORDS$)). 

A more creative technique for deleting an entry in an alphabetized list is to assign the entry to be deleted a string such as “ZZZZZZZZZZZ.” When the words are realphabetized, the entry with the Z’s will be sorted to the bottom of the list where it can be conveniently ignored or discarded.


Q. I am interested in finding any information concerning the ability of expanding the memory on my 800XL Atari. It would be greatly appreciated if you could tell me if this is possible and, if so, who I may purchase these components from to further the use of my system.

Andrew Leo Eddings
Alabaster, AL

A. Over a year ago I recall that Axlon and one other company had been manufacturing a 128K memory expansion for the 800 (although this would not necessarily be compatible with the XL). The extra memory was accessed through bank switching of a 4K address area. I haven’t heard anything about it since then, although I can tell you that it would not be compatible with the DOS 2.5 RAMDISK for the 130XE. If any readers produce or know of a 128K memory expansion currently available for the 800XL. Please write and tell us.


Q. I recently purchased a Percom disk for my Atari 800XL because of an article in the June 1983 issue of Creative Computing (pp. 114-116). However, the two Percom manuals refer only to the TI 99/4A. Will this drive work with my Atari 800XL?

Paul T. Johnson
Ellenville, NY

A. Unless you know of an electronics engineer who owes you a lot of favors, you’re going to have a rough time trying to get a TI 99/4A Percom to work with the Atari. If you can somehow return the drive to where you purchased it, do so. I don’t think you can still get an Atari Percom drive, but you may want to consider an Atari 1050 disk drive. Prices on this disk drive have dropped greatly in recent months.


Q. Do you know what’s involved hooking up my Atari 130XE to my shortwave communications-receiver to decode morse on-line?

Robert Harren
Pueblo, CO

A. I suggest you contact Cantronics (1202 E. 23rd Street, Lawrence, KS 66044). I am told that this company sells various Atari-compatible interfaces and software for shortwave communications. Good luck.


Q. Thanks for the keyboard programs (latest version in November 1985 Computer Shopper, page 180). How can I change the program to make it operate with joystick port #2 instead of #1?

Donald Parsons
Delmar, NY

A. The following lines can be changed to read from joystick port 2 instead of port 1:

80 DATA 92,228,174,133,2,240,5,202 
90 DATA 134,204,240,40,174,121,2,228 
120 DATA 204,134,206,230,205,173,115,2 

Address Atari-related questions to: Jeff Brenner, “Atari Help” c/o Computer Shopper, P.O. Box F, Titusville, FL 32781-9990.

COMPUTER SHOPPER / FEBRUARY 1986 / PAGE 69 

Applying The Atari

by Jeff Brenner

Machine Language Alphabetize,
Halley’s Comet Program

I hope you’re putting last month’s Personal Appointment Calendar/Editor to good use. This month we’ll learn more about PACE, calculate data on Halley’s Comet, and enter an alphabetizing program that features machine language sorting and storage capability. Let’s first take a look at some letters…

Reader Mail

Q. I am a first time reader of your column — I am very impressed. I would like to make another comment. It’s in the form of a question: Why is the Program Perfect code a three-digit or three-letter code when they all end in “J”? Why not truncate the third letter and you’ll have more room than your readers are asking for? I was just wondering about that.

Michael Bonkowski
Madison Heights, MI

A. You ask a very good question, since it does appear that the last character of the Program Perfect codes is always the same. This third character is used by Program Perfect to determine the next program line number for the automatic line numbering feature. Not only does this make it unnecessary to type line numbers when using Program Perfect, but it ensures that all lines of the program are entered.

Since line numbers of the programs in this column usually step by 10 (10, 20, 30, etc.), this third character is most often a “J” (the tenth character of the alphabet). But there are times when the line numbers do not continuously step by 10; September’s Response Analysis Program is one example. In this program, the line numbers of the data statements (above 5000) step by varying amounts, and you can see that the third character in this listing changes appropriately. Additionally, the Program Perfect code of the last line of a program ends in a “Z”. The “Z” signals Program Perfect to erase itself from memory.


Comment: I noticed in the 10/85 issue the problem you have had with the Basic B bug in the 800XL. Instead of getting the $15 cartridge from Atari, I got a program from First Byte called Enhancements to BASIC. It not only eliminates the bug, but also upgrades Atari BASIC by adding some excellent functions such as TRACE and DIR (disk listing straight from BASIC). And best of all, it was only $14.95. Their address is First Byte, P.O. Box 32, Rices Landing, PA 15357.
John A. Dunaway
Goodlettsville, TN

A. Thanks for the info!

Newsletters

Another two newsletters were in the mail for this month. SPACE Probes is printed by the South-Central Pennsylvania Atari Computer Enthusiasts (P.O. Box 11446, Harrisburg, PA 17108-1446). A-BUG-BYTE Newsletter is printed by the Atari - Brookville Users Group (10781 West National Road, Brookville, OH 45309).

Halley’s Comet Program

There are still a few months left to catch a glimpse of Halley’s comet. Halley’s Comet is a public domain program and is listed this month for those interested in calculating information about the comet. When it is run, the program will ask you to enter the year, the month and the day. It will take about 20 seconds to calculate and will then display the comet’s geocentric right ascension (RA) and declination (DEC), distance from the sun and earth in astronomical units, predicted magnitude of brightness, and days to perihelion (the closest point to the sun). Angles are referred to the ecliptic and equinox of 1950.

After the calculations are displayed, you are given the option of making another calculation or getting a printout. Figure 1 shows a sample calculation printout for the date February 6, 1986.

DATA FOR COMET HALLEY 
DATE: M/D/Y-2/6/1986 
DAYS TO PERIHELION.....-4 

COORDINATES: epoch 1950 
RA:....................21HRS  8MIN 
DEC:...................-9DEG  41MIN 

DISTANCES: 
COMET TO SUN...........0.591   AU 
COMET TO EARTH.........1.62    AU 

PREDICTED MAG..........3.5 
Figure 1

You astronomers out there may want to personalize the program to calculate data for your particular latitude and longitude, or add additional features and calculations, such as data for a specific time of day. Have fun and good luck comet-gazing!

HALLEY’S COMET PROGRAM 

YUJ 10 REM HALLEY'S COMET PROGRAM 
CIJ 20 REM ORIGINAL PROGRAM BY ROGER BROWNE 
NJJ 30 OPEN #2,4,0,"K:" 
BIJ 40 DIM CO$(15),SP$(20),DT$(20),DA$(40) 
XIJ 50 SP$(1)=CHR$(32):SP$(20)=CHR$(32):SP$(2)=SP$ 
WBJ 60 DT$(1)=CHR$(46):DT$(20)=CHR$(46):DT$(2)=DT$ 
TEJ 70 DA$(1)=CHR$(45):DA$(40)=CHR$(45):DA$(2)=DA$ 
IQJ 80 PI=3.14159265 
ANJ 90 CO$="COMET HALLEY" 
EGJ 100 PH=1986.11 
DVJ 110 PL=170.011 
DZJ 120 AN=58.1453 
EWJ 130 PY=76.0081 
EVJ 140 SM=17.9435 
GOJ 150 EO=0.967267 
EJJ 160 IO=162.239 
IJJ 170 GRAPHICS 0 
SLJ 180 PRINT CHR$(125);:POKE 85,14:PRINT CO$:POSITION 20,0:PRINT CHR$(255) 
XZJ 190 FOR I=1 TO 18:PRINT CHR$(45);CHR$(32);:NEXT I:PRINT CHR$(45) 
CPJ 200 POKE 85,11:PRINT "EPHEMERIS FOR DATES" 
XYJ 210 POKE 85,10:PRINT "BETWEEN 1946 AND 2026" 
XFJ 220 POKE 85,13:PRINT "by Roger Browne":PRINT 
GBJ 230 PRN=0:PRINT "INPUT YEAR: ";:INPUT #16;Y 
UCJ 240 IF Y<1946 OR Y>2026 THEN 230 
SHJ 250 PRINT "INPUT MONTH: ";:INPUT #16;M 
JCJ 260 IF M<1 OR M>12 THEN 250 
LOJ 270 PRINT "INPUT DAY: ";:INPUT #16;D 
OWJ 280 PRINT CHR$(125);:POSITION 15,10:PRINT "CALCULATING..." 
TEJ 290 X=PH 
IQJ 300 IF Y>=1986 THEN Z=1984 
GKJ 310 IF Y<1986 THEN Z=1988 
CBJ 320 IF Y>=1986 THEN S=0 
YSJ 330 IF Y<1986 THEN S=1 
GFJ 340 GOSUB 1720 
SQJ 350 DS=N 
BBJ 360 B=(360/PY)*(N/365.25) 
PIJ 370 K=B 
GNJ 380 GOSUB 1850 
ISJ 390 B=(K*PI)/180 
OWJ 400 E=B 
USJ 410 Y1=EO 
VIJ 420 Q=E-(Y1*SIN(E))-B 
RKJ 430 IF ABS(Q)<=1.7E-05 THEN 470 
YJJ 440 U=Q/(1-(Y1*COS(E))) 
UEJ 450 E=E-U 
BPJ 460 GOTO 420 
XCJ 470 V=(SQR((1+Y1)/(1-Y1))*(SIN(E/2)/COS(E/2))) 
GZJ 480 V=2*ATN(V) 
LVJ 490 V1=(V*180)/PI 
AMJ 500 L=V1+PL 
XJJ 510 R=SM*(1-(Y1*Y1))/(1+Y1*COS(V)) 
WQJ 520 F=L-AN 
UHJ 530 F2=IO 
KLJ 540 F1=(F*PI)/180 
MLJ 550 F2=(F2*PI)/180 
AXJ 560 I=(SIN(F1)*SIN(F2)) 
EIJ 570 I=ATN(I/SQR(-I*I+1)) 
GFJ 580 P=ATN((SIN(F1)/COS(F1))*COS(F2)) 
SOJ 590 P1=(P*180)/PI+AN 
IIJ 600 IF F>=90 AND F<=270 THEN P1=P1+180 
HFJ 610 IF P1<0 THEN P1=P1+360 
LEJ 620 P=(P1*PI)/180 
JLJ 630 R2=R*COS(I) 
VNJ 640 X=1975 
DXJ 650 IF Y>=X THEN Z=1972 
BRJ 660 IF Y<X THEN Z=1976 
WLJ 670 IF Y>=X THEN S=0 
UCJ 680 IF Y<X THEN S=1 
GNJ 690 GOSUB 1720 
IFJ 700 T=(360/365.25)*(N/1.00004) 
PYJ 710 K=T 
GLJ 720 GOSUB 1850 
QAJ 730 T=K 
LPJ 740 T1=(T*PI)/180 
BAJ 750 C=0.01672 
YTJ 760 J=T+(360/PI)*C*SIN(T1-0.051943) 
GNJ 770 J=J+99.5343 
FJJ 780 IF J>360 THEN J=J-360 
BFJ 790 IF J<0 THEN J=J+360 
FUJ 800 H=((J-102.51044)*PI)/180 
FTJ 810 R1=(1-C*C)/(1+C*COS(H)) 
VAJ 820 U1=((P1-J)*PI)/180 
VCJ 830 U2=((J-P1)*PI)/180 
KBJ 840 IF R2<R1 THEN GOTO 900 
RBJ 850 Q1=(R1*SIN(U1)) 
IQJ 860 Q1=Q1/(R2-(R1*COS(U1))) 
GYJ 870 Q1=ATN(Q1) 
UCJ 880 Q2=(Q1*180)/PI+P1 
CDJ 890 GOTO 940 
RBJ 900 Q3=(R2*SIN(U2)) 
IRJ 910 Q3=Q3/(R1-(R2*COS(U2))) 
GYJ 920 Q3=ATN(Q3) 
ALJ 930 Q2=(Q3*180)/PI+J+180 
LWJ 940 IF Q2>360 THEN Q2=Q2-360 
HSJ 950 IF Q2<0 THEN Q2=Q2+360 
NOJ 960 Q4=(Q2*PI)/180 
IIJ 970 Q5=(R2*(SIN(I)/COS(I))*SIN(Q4-P)) 
YIJ 980 Q5=Q5/(R1*SIN(U1)) 
HJJ 990 Q5=ATN(Q5) 
KQJ 1000 E1=0.40893064 
ESJ 1010 L1=(SIN(Q5)*COS(E1)) 
FBJ 1020 L1=L1+(COS(Q5)*SIN(E1)*SIN(Q4)) 
NXJ 1030 M1=ATN(L1/SQR(-L1*L1+1)) 
PBJ 1040 Y2=(M1*180)/PI 
BKJ 1050 B1=((SIN(Q4)/COS(Q4))*COS(E1)) 
EVJ 1060 B1=B1-(((SIN(Q5)/COS(Q5))*SIN(E1))/COS(Q4)) 
FRJ 1070 G=ATN(B1) 
MKJ 1080 H1=(G*180)/PI 
OMJ 1090 I1=INT(Q2/90) 
NVJ 1100 J1=INT(H1/90) 
NSJ 1110 IF I1-J1=4 OR I1-J1=1 THEN H1=H1+360 
NTJ 1120 IF I1-J1=2 OR I1-J1=3 THEN H1=H1+180 
QMJ 1130 IF I1-J1=-4 THEN H1=H1+360 
QNJ 1140 IF I1-J1=-2 THEN H1=H1-180 
BXJ 1150 N1=H1/15 
QUJ 1160 W=INT((N1-INT(N1))*60+0.5) 
FMJ 1170 IF W=60 THEN N1=N1+1 
WKJ 1180 IF W=60 THEN W=0 
IGJ 1190 K1=ABS(Y2) 
SGJ 1200 W1=INT((K1-INT(K1))*60+0.5) 
GQJ 1210 IF W1=60 THEN G1=G1+1 
AZJ 1220 IF W1=60 THEN W1=0 
IDJ 1230 G1=INT(K1) 
XOJ 1240 IF Y2<0 AND G1<1 THEN W1=-W1 
QHJ 1250 D1=R1*R1+R2*R2 
JNJ 1260 D1=D1-(2*R1*R2*COS(U1)) 
IJJ 1270 D2=SQR(D1) 
MZJ 1280 R3=D2/COS(I) 
UBJ 1290 K9=R 
ICJ 1300 GOSUB 1940 
TUJ 1310 R=K9 
CIJ 1320 K9=R3/10 
IFJ 1330 GOSUB 1940 
CFJ 1340 R3=K9*10 
KJJ 1350 M0=4.1:N=3.1 
OTJ 1360 IF DS<0 THEN M0=5:N=4.44 
HLJ 1370 MA=M0+5*0.4343*LOG(R3) 
OMJ 1380 MA=MA+N*2.5*0.4343*LOG(R) 
XYJ 1390 MA=(INT(10*MA))/10 
CWJ 1400 IF Y2<0 THEN G1=-G1 
ENJ 1410 PRINT CHR$(125);:PRINT DA$(1,38):IF PRN THEN PRINT #1;DA$(1,38) 
CCJ 1420 POKE 85,10:PRINT "DATA FOR ";CO$:PRINT 
LFJ 1430 IF PRN THEN PRINT #1;SP$(1,8);"DATA FOR ";CO$:PRINT #1 
MCJ 1440 PRINT "DATE: M/D/Y=";M;"/";D;"/";Y 
WSJ 1450 IF PRN THEN PRINT #1;"DATE: M/D/Y=";M;"/";D;"/";Y 
GZJ 1460 PRINT "DAYS TO PERIHELION.....";INT(DS) 
OOJ 1470 IF PRN THEN PRINT #1;"DAYS TO PERIHELION.....";INT(DS):PRINT #1 
YUJ 1480 PRINT 
SKJ 1490 PRINT "COORDINATES: epoch 1950" 
DRJ 1500 IF PRN THEN PRINT #1;"COORDINATES: epoch 1950" 
DXJ 1510 PRINT "RA :";DT$(1,19);INT(N1);"HRS";SP$(1,2);W;"MIN" 
ONJ 1520 IF PRN THEN PRINT #1;"RA :";DT$(1,19);INT(N1);"HRS";SP$(1,2);W;"MIN" 
SHJ 1530 PRINT "DEC:";DT$(1,19);G1;"DEG";SP$(1,2);W1;"MIN" 
DXJ 1540 IF PRN THEN PRINT #1;"DEC:";DT$(1,19);G1;"DEG";SP$(1,2);W1;"MIN" 
CZJ 1550 PRINT :IF PRN THEN PRINT #1 
QNJ 1560 PRINT "DISTANCES:":IF PRN THEN PRINT #1;"DISTANCES:" 
PXJ 1570 PRINT "COMET TO SUN";DT$(1,11);R;SP$(1,3);"AU" 
BNJ 1580 IF PRN THEN PRINT #1;"COMET TO SUN";DT$(1,11);R;SP$(1,3);"AU" 
VGJ 1590 PRINT "COMET TO EARTH";DT$(1,9);R3;SP$(1,4);"AU" 
GNJ 1600 IF PRN THEN PRINT #1;"COMET TO EARTH";DT$(1,9);R3;SP$(1,4);"AU" 
CWJ 1610 PRINT :IF PRN THEN PRINT #1 
PYJ 1620 PRINT "PREDICTED MAG";DT$(1,10);MA 
BOJ 1630 IF PRN THEN PRINT #1;"PREDICTED MAG";DT$(1,10);MA 
OUJ 1640 PRINT DA$(1,37):IF PRN THEN PRINT #1;DA$(1,37) 
OBJ 1650 POKE 85,9:PRINT "PRESS 0 FOR ANOTHER DATE" 
IUJ 1660 POKE 85,9:PRINT "PRESS P FOR PRINT OUT" 
KJJ 1670 GET #2,DATE 
UMJ 1680 IF DATE=ASC("0") THEN PRINT CHR$(125);:GOTO 1710 
EAJ 1690 IF DATE=ASC("P") THEN PRN=1:CLOSE #1:OPEN #1,8,0,"P:":GOTO 1410 
SEJ 1700 PRINT CHR$(253):GOTO 1670 
DJJ 1710 GOTO 230 
EUJ 1720 A=(Y-Z)/4 
KRJ 1730 A1=INT(A+S) 
UBJ 1740 N=365*(Y-X+S)+A1 
XLJ 1750 IF INT(A)<>A THEN GOTO 1770 
NEJ 1760 IF (M=2 AND D<29) OR M=1 THEN N=N-1 
ITJ 1770 IF M>2 THEN GOTO 1810 
XLJ 1780 M2=M-1 
CGJ 1790 M2=31*M2 
FMJ 1800 GOTO 1830 
XDJ 1810 M2=M+1 
XTJ 1820 M2=INT(30.6*M2)-63 
QGJ 1830 N=N+M2+D-365*S 
CZJ 1840 RETURN 
ISJ 1850 IF K<0 THEN GOTO 1870 
MQJ 1860 IF K>360 THEN GOTO 1900 
AHJ 1870 K=K+360 
LDJ 1880 IF K>=0 THEN GOTO 1930 
FZJ 1890 GOTO 1870 
ADJ 1900 K=K-360 
OWJ 1910 IF K<=360 THEN GOTO 1930 
FNJ 1920 GOTO 1900 
CZJ 1930 RETURN 
GCZ 1940 K9=INT(K9*1000+0.5)/1000:RETURN 

More About PACE

Now we’ll learn about the remaining features of last month’s feature program, the Personal Appointment Calendar/Editor.

Password

As mentioned last month, when you create an appointment file when you use PACE for the first time, you’re asked to enter a password. You can enter a password to protect your appointment calendar from peering eyes, or you can just press RETURN if you do not want a password. If you do choose a password, you’ll be given three chances to enter it correctly whenever you run the program. After the third try, the program will erase itself (the data — namely your appointments — is saved on the disk and will not be erased). This is why it is a good idea to choose a password you can remember, or otherwise choose no password at all. Each member of the family can have his or her own “plan diskette,” and password, if wanted.

Defining Control Keys

One feature that was not discussed last month is the control-key redefinition. After you enter “Y” to the “Want to enter appointments?” prompt, you’re asked if you want to define the control keys. You can define up to ten control keys, from CONTROL-A to CONTROL-J, and each key can be programmed to “hold” up to 24 characters. This feature is ideal for plans that repeat often during the month or year. For example, if you play tennis every Thursday, you could define CONTROL-A to be “8:30 PM Tennis club.” Then, when entering appointments for any Thursday, you could press CONTROL-A and “8:30PM Tennis club” will be added to the screen. You could also define other keys for “Pay bills,” “10:00AM Chemistry Class,” etc.

Important Entries

As mentioned briefly last month, you can place an asterisk (*) at the beginning of any appointment line on the PACE Appointment Display, and you will be reminded of that appointment when it is within seven days away. Such plans will be displayed on the “Upcoming Important Entries” screen that follows the “Tomorrow’s Appointments” display. This feature is perfect to use with birthdays, deadlines, or any other dates for which you would need a reminder several days in advance.

Setting the Year

When setting the present date or choosing a date to enter appointments, the display shows the year 1985 and can be moved up to 2000 with the OPTION key. To make the program start by displaying 1986, change line 30 to:

30 MIN=1986 
This will save you from having to press the OPTION key to change the year each time you enter the date. The original program started with 1985 since most Computer Shopper subscribers received the January 1986 in 1985. Next year you could change this line to MIN=1987, and so forth.

Since the program uses 366 records, a particular day of any year is stored in a record for that day. Hence, February 15, 1986 and February 15, 1987 are the same record. It is still possible however, to make appointments for more than one year in advance. In this case, you either label a line of February 15, 1986 screen “1987:.” Then when PACE cycled back around the February in the year 1987, you could delete the 1986 data and make note of the 1987. Or, you can use a completely different data diskette that you could label, “1987.”

Instant Alphabetizer

This month’s feature program is a data alphabetizer that uses a machine language sort for super fast operation. The program also allows you to save and load alphabetized lists to and from diskette or cassette, delete items from an alphabetized list, add items to the list, or print the alphabetized list on the printer.

INSTANT ALPHABETIZER 

VVJ 10 REM INSTANT ALPHABETIZER 
QGJ 20 REM WITH MACHINE LANGUAGE SORTER 
KHJ 30 REM COPYRIGHT 1986 JEFF BRENNER 
RWJ 40 LN=38 
HLJ 50 DIM ABC$(109),IN$(257),SP$(255),D$(25),IO$(7):IN$(257)=CHR$(0) 
AKJ 60 MAX=INT((FRE(0)-500)/LN):DIM DAT$(MAX*LN):DAT$(MAX*LN)=CHR$(0) 
YIJ 70 TRAP 1010:GOSUB 1040:SP$(1)=CHR$(32):SP$(255)=CHR$(32):SP$(2)=SP$ 
NNJ 80 OPEN #1,4,0,"K:" 
WMJ 90 TRAP 1010:CLOSE #3 
PKJ 100 PRINT CHR$(125);:POKE 85,10:IN$="INSTANT ALPHABETIZER" 
IRJ 110 FOR I=1 TO LEN(IN$):PRINT CHR$(ASC(IN$(I,I))+128);:NEXT I:PRINT 
AWJ 120 POKE 85,10:PRINT CHR$(40);CHR$(99);CHR$(41);"1986 JEFF BRENNER" 
TCJ 130 POSITION 2,4:PRINT "<E>NTER NEW LIST TO BE ALPHABETIZED":PRINT 
YLJ 140 PRINT "<L>OAD A PREVIOUSLY SAVED LIST":PRINT 
SIJ 150 PRINT "<D>ISPLAY ALPHABETIZED LIST ON SCREEN":PRINT 
SSJ 160 PRINT "<P>RINT ALPHABETIZED LIST ON PRINTER.":PRINT 
VVJ 170 PRINT "<A>DD ITEMS AND RE-ALPHABETIZE":PRINT 
JDJ 180 PRINT "<R>EMOVE ITEMS FROM LIST":PRINT 
IWJ 190 PRINT "<S>AVE ALPHABETIZED LIST":PRINT 
EJJ 200 GOSUB 960 
KPJ 210 IF C=0 AND N<>69 AND N<>76 THEN 310 
TYJ 220 PRINT CHR$(125); 
PWJ 230 IF N=69 THEN C=0:GOTO 330 
UAJ 240 IF N=65 THEN C=C+1:GOTO 330 
SWJ 250 IF N=68 THEN 480 
SMJ 260 IF N=80 THEN 520 
SZJ 270 IF N=76 THEN 590 
SRJ 280 IF N=82 THEN 710 
SWJ 290 IF N=83 THEN 830 
AGJ 300 GOSUB 1000:GOTO 90 
GRJ 310 PRINT CHR$(125);"NO ITEMS IN MEMORY YET" 
MCJ 320 PRINT "MUST ENTER OR LOAD ITEMS":GOTO 500 
JPJ 330 PRINT "YOU CAN ENTER UP TO ";MAX;" LINES" 
OQJ 340 PRINT "OF ";LN;" CHARACTERS EACH." 
DJJ 350 IF C>MAX THEN PRINT "YOU HAVE REACHED MAXIMUM # OF ENTRIES":GOTO 500 
KYJ 360 PRINT "TYPE EACH ITEM AND PRESS RETURN." 
RVJ 370 PRINT "PRESS RETURN ON AN EMPTY LINE WHEN" 
QOJ 380 PRINT "FINISHED ENTERING ITEMS." 
RBJ 390 IF C=0 THEN C=1 
KAJ 400 FOR C=C TO MAX:PRINT 
KWJ 410 PRINT :PRINT "ENTRY #";C;":":INPUT #16;IN$:IF LEN(IN$)=0 THEN 450 
XCJ 420 IF LEN(IN$)<LN THEN IN$(LEN(IN$)+1)=SP$ 
QRJ 430 DAT$(C*LN-LN+4,C*LN+3)=IN$ 
AFJ 440 NEXT C:PRINT "MAXIMUM ITEMS REACHED.":GOTO 470 
YVJ 450 C=C-1:IF C>1 THEN A=USR(ADR(ABC$),ADR(DAT$)+3,C,LN) 
YWJ 460 GOTO 90 
SLJ 470 C=C-1:A=USR(ADR(ABC$),ADR(DAT$)+3,C,LN):GOTO 500 
OQJ 480 POKE 85,4:PRINT "PRESS CONTROL-1 TO PAUSE/CONTINUE" 
XQJ 490 PRINT :FOR I=1 TO C:PRINT I;":";CHR$(32);DAT$(I*LN-LN+4,I*LN+3):NEXT I 
MOJ 500 PRINT :POKE 85,9:PRINT "PRESS <RETURN> FOR MENU";:POKE 764,255 
TSJ 510 GET #1,N:GOTO 90 
RCJ 520 PRINT "PRINT WITH NUMBERED LINES (Y/N)?";:GET #1,N:PRINT CHR$(N) 
SYJ 530 SKIP=0:IF N=78 THEN SKIP=1:GOTO 550 
VFJ 540 IF N<>89 THEN 520 
XDJ 550 PRINT "TURN PRINTER ON AND PRESS <RETURN>":POKE 764,255 
NQJ 560 GET #1,N:OPEN #3,8,0,"P:":PRINT #3:FOR I=1 TO C 
XBJ 570 IF SKIP=0 THEN PRINT #3;I;":";CHR$(32); 
PAJ 580 PRINT #3;DAT$(I*LN-LN+4,I*LN+3):NEXT I:PRINT #3:GOTO 90 
JFJ 590 PRINT "LOAD FROM CASSETTE OR DISK (C/D)"; 
QCJ 600 GET #1,N:PRINT CHR$(N):IF N=67 THEN D$="C:":I=128:GOTO 650 
TGJ 610 IF N<>68 THEN 90 
EIJ 620 I=0:D$="D:":PRINT "ENTER FILENAME: ";:INPUT #16;IN$ 
SEJ 630 IF IN$(2,2)=":" OR IN$(3,3)=":" THEN D$=IN$:GOTO 650 
SLJ 640 D$(LEN(D$)+1)=IN$ 
QYJ 650 POKE 881,0:OPEN #3,4,I,D$:POKE 889,255 
VPJ 660 H=INT(ADR(DAT$)/256):L=ADR(DAT$)-H*256:POKE 885,H:POKE 884,L 
YWJ 670 POKE 882,7:A=USR(ADR(IO$),48) 
JHJ 680 LN=ASC(DAT$(1)):H=ASC(DAT$(2)):L=ASC(DAT$(3)) 
CRJ 690 C=L+256*H 
TDJ 700 PRINT "DATA HAS BEEN LOADED":CLOSE #3:GOTO 500 
OLJ 710 IF C<=1 THEN PRINT "ONLY ONE ITEM IN MEMORY":GOTO 500 
KSJ 720 PRINT :PRINT "ENTER NUMBER OF ITEM TO REMOVE OR 0" 
EKJ 730 PRINT "FOR MENU: "; 
DIJ 740 TRAP 90:INPUT #16;NUM:IF NUM<=0 THEN 90 
AKJ 750 IF NUM>C THEN PRINT "NO SUCH NUMBER - USE DISPLAY OPTION":GOTO 500 
SCJ 760 PRINT "ITEM #";NUM;" IS: " 
MFJ 770 PRINT DAT$(NUM*LN-LN+4,NUM*LN+3) 
VRJ 780 PRINT "SURE YOU WANT TO DELETE THIS (Y/N)";:GET #1,N:PRINT CHR$(N) 
VNJ 790 IF N<>89 THEN 710 
EZJ 800 IN$(1)=CHR$(255):IN$(257)=CHR$(255):IN$(2)=IN$ 
IOJ 810 DAT$(NUM*LN-LN+4,NUM*LN+3)=IN$:A=USR(ADR(ABC$),ADR(DAT$)+3,C,LN) 
JVJ 820 C=C-1:PRINT "THAT ENTRY HAS BEEN REMOVED.":GOTO 500 
ECJ 830 PRINT "SAVE TO CASSETTE OR DISK (C/D)"; 
QOJ 840 GET #1,N:PRINT CHR$(N):IF N=67 THEN D$="C:":I=128:GOTO 890 
TMJ 850 IF N<>68 THEN 90 
YYJ 860 I=0:D$="D:":PRINT "FILENAME TO SAVE UNDER: ";:INPUT #16;IN$ 
SQJ 870 IF IN$(2,2)=":" OR IN$(3,3)=":" THEN D$=IN$:GOTO 890 
SRJ 880 D$(LEN(D$)+1)=IN$ 
NHJ 890 H=INT(C/256):L=C-H*256:DAT$(1,1)=CHR$(LN):DAT$(2,2)=CHR$(H) 
TGJ 900 DAT$(3,3)=CHR$(L) 
SZJ 910 POKE 881,0:OPEN #3,8,I,D$:PRINT #3;DAT$(1,C*LN+10) 
GOJ 920 REM H=INT(ADR(DAT$)/256):L=ADR(DAT$)-H*256:POKE 885,H:POKE 884,L 
HCJ 930 REM H=(C*LN+10)/256:L=(C*LN+10)-H:POKE 889,H:POKE 888,L 
LNJ 940 REM POKE 882,11:A=USR(ADR(IO$),48) 
RIJ 950 CLOSE #3:PRINT "DATA HAS BEEN SAVED":GOTO 500 
GKJ 960 H=PEEK(84) 
HGJ 970 POKE 702,64:POKE 694,0 
YGJ 980 POSITION 2,H:PRINT "SELECT: ";CHR$(32);CHR$(126); 
IIJ 990 GET #1,N:PRINT CHR$(N);:RETURN 
ROJ 1000 SOUND 0,50,6,4:FOR I=1 TO 50:NEXT I:SOUND 0,0,0,0:RETURN 
WAJ 1010 PRINT "ERROR #";PEEK(195);" AT LINE ";PEEK(186)+256*PEEK(187) 
SXJ 1020 PRINT "TYPE ";CHR$(34);"CONT";CHR$(34);" TO RECOVER.":CLOSE #3:STOP 
BMJ 1030 GOTO 90 
NTJ 1040 DATA 104,104,133,204,104,133,203,104,133,212,104,133,211,104,104,133 
LGJ 1050 DATA 209,165,203,133,207,165,204,133,208,162,0,134,210,134,213,232 
JLJ 1060 DATA 165,207,133,205,24,101,209,133,207,165,208,133,206,105,0,133 
CVJ 1070 DATA 208,160,0,177,207,209,205,240,4,144,9,176,27,200,196,209 
OLJ 1080 DATA 176,22,144,239,164,209,132,210,136,177,207,133,214,177,205,145 
JTJ 1090 DATA 207,165,214,145,205,136,16,241,232,208,2,230,213,228,211,208 
JIJ 1100 DATA 191,165,212,197,213,208,185,165,210,208,166,96 
BKJ 1110 PRINT CHR$(125);"STAND BY..." 
UCJ 1120 FOR I=1 TO 108:READ N:TOT=TOT+N:ABC$(I,I)=CHR$(N):NEXT I 
WLJ 1130 IF TOT<>17407 THEN PRINT "CHECK DATA LINES 1040-1100":STOP 
SYJ 1140 DATA 104,104,104,170,76,86,228 
LLJ 1150 FOR I=1 TO 7:READ N:IO$(I,I)=CHR$(N):NEXT I 
DKZ 1160 RETURN 

A similar type of program was the subject of the very first “Applying The Atari” column (August 1984), but this program took a very long time to alphabetize, save or load data. It also did not provide for deleting entries from the alphabetized list. A question from reader John M. Hirsch (Normal, IL) who asked how to delete entries from the August 1984 program inspired me to create a vastly superior version. With Instant Alphabetizer, alphabetization takes a few seconds at most, data is saved to or loaded from the disk drive or cassette much faster, and a delete function has been implemented. Now you can get those names, book titles, record albums, computer programs, etc. in alphabetical order more efficiently than ever.

Use Program Perfect to enter the program under the “Instant Alphabetizer” heading. When you run the program, a menu will appear with the following options: Enter new listing to be alphabetized, Load a previously saved list, Display the alphabetized list on screen, Print the alphabetized list on the printer, Add items and realphabetize, Remove items from list, Save alphabetized list.

When you use the program for the first time, you’ll want to use the “Enter new list” function, so press E. Depending upon the memory of your machine, you will be able to enter a certain number of lines of 38 characters each to be alphabetized. A 48K or 64K Atari can handle over 600 entries of 38 characters each, which is probably more than you’ll ever need. If you do need more entries, you can make the size of each entry smaller by changing the value of LN on line 40 from 38 to a lower value. For example, if you want to enter twice as many items, change line 40 to:

LN=19 
You will now have a maximum of 19 characters per item. Similarly, you can increase LN if you need more characters per item but fewer items.

Enter each item and press RETURN on a blank line when done. Your list will be alphabetized and you’ll be brought back to the menu screen. You can now save the data to cassette or diskette by pressing S.

Once an alphabetized list is in memory, you can press D to display the list on the screen, or you can press P to print it on your printer. When displaying on the screen, each item will be numbered so that you may refer to it if you want to delete it from the list. When you print the list to the printer, you’ll be asked if you want to number each entry. Type Y if you want the entries to be numbered.

To delete an item, first display the list and get the number of the item you want to remove. Then press R for the remove operation and enter the number of that item. The item will be deleted from the list.

If you want to load a previously saved file, press L. You might then want to add items to this list by pressing A for the Add Items option. Add each item and press RETURN on an empty line when done. The added entries will be alphabetized together with the old entries and you can display, print, or save the new list.

Next Month

Well enter an entertaining graphics program that will make you go to pieces. A digitized picture and more reader mail are in store too.

Readers’ questions, comments and contributions are welcome. Please enclose a self-addressed, stamped envelope (SASE) for a personal reply.

A diskette of the programs listed in this month’s column is available from the author for $7.00, postpaid. Please make checks payable to “Jeff Brenner” and specify your disk drive model.

Program Perfect” is a utility used to check for typing errors while entering programs from this column. Readers may send a SASE for a listing or $5.00 for a diskette of this program.

Address all correspondence to Jeff Brenner, “Applying The Atari 2/86”, c/o Computer Shopper, P.O. Box F, Titusville, FL 32781-9990.

COMPUTER SHOPPER / FEBRUARY 1986 / Page 70 

Atari Help

by Jeff Brenner

Q. I have an Atari 400 computer which is used by my preschool children. They easily use the cartridge programs available but cannot load our cassette programs. They also have trouble waiting for me to load them. Since we have several good programs on cassette, I am looking for a way to convert these cartridges. Is there such a procedure? If so, where may I have it done and what would be the approximate cost?

Glenda York
Prattville, AL

A. Unfortunately, it is impractical to store your cassette programs in cartridge form. First of all, the progams would have to be in machine language (programs that load by pressing START when you turn on the computer). BASIC programs (those that load with CLOAD) could not be placed in cartridge form. Second, even if the programs were in machine language, they would have to be relocated to run in the memory area that the cartridge uses. Relocating a program is a tedious, complicated task and you would need to know a good deal about machine language to do it. Third, the cartridge making procedure itself (you would need an EPROM burner and blank EPROMs) is not simple.

A disk drive is a much more feasible solution, although I do not know if you had this kind of investment in mind — the Atari 1050 is currently being sold for around $150. With a disk drive, programs could be loaded by turning the disk drive on, inserting the diskette and turning the computer on. Diskette programs can be made to run automatically once they are loaded. I know of several families in which the preschool children have learned to use the disk drive. The disk drive is also much faster than the cassette recorder, has a greater variety of software available for it, and lends itself to more serious applications.


Q. We bought an Atari computer set-up comprised of the following: Atari 800XL, (2) 1050 disk drives, 1027 printer, 1010 recorder and modem. My question to you is about this modem. Will it work with this system? The box containing my modem says “THE COMMUNICATOR II Atari 400/800 Computer System.” It contains a TELELINK II program cartridge, an Atari 835 direct-connect modem plus literature.

Also, I would like to brag about Atari: I complained about the “B BASIC” in my 800XL and they promptly sent me a cartridge of “C” BASIC — YEAH ATARI! Computer Shopper is great, very helpful and informative.

Kenneth W. Faries
Nacogdoches, TX

A. The Atari 835 modem was released when the Atari 400 and 800 models were still in production, and was designed to match the color and style of the Atari 400/800. The newer Atari 1030 direct-connect modem was designed to match the XL series. The 835 is otherwise compatible with the 1030 and should work fine with your 800XL and the Telelink II cartridge. Of course, the best way to see if the modem works is to hook it up and try it out! You can start by calling some Atari bulletin boards listed in Computer Shopper’s bulletin board section. Good luck!

I’m glad to hear that Atari sent you the revision C BASIC cartridge at no charge. Unfortunately, many Atari owners, including myself, had to part with fifteen bucks to get it. I have always felt that Atari should have provided revision C BASIC at no charge to those Atari owners who got stuck with revision B.


Q. I am a fairly new reader of Computer Shopper and I think your Atari column is great. Can you tell me if it is possible with an Atari 800 and a modem to access any BBS or data bank or can you only reach other Atari systems?

Jerry Burt
Greenville, PA

A. One of the most important aspects of the modem is that it converts the output from a computer to a standarized signal that can be sent along the phone lines and interpreted by any other modem (using the same baud rate, of course). This allows virtually any two computers to communicate with each other. Hence, your Atari 800 can send and receive text to and from an Apple II+, a Commodore 64, or an IBM PC. You can even communicate with an Amiga, an Atari ST, or a Macintosh. Sometimes a specialized terminal program is used by both the receiving and sending computers to provide features such as special text formatting or graphics images. For the majority of BBS’s however, any communications software, such as Telelink, will be adequate.

If you want to download software you would have to be sure the programs are Atari compatible, since you would be running the actual program on your computer. There are plenty of BBS’s that cater specifically to Atari owners and offer Atari-compatible public domain programs that can be downloaded. See Computer Shopper’s “Bulletin Board” section this issue.


Q. I won an Atari 1027 printer and, as you know, this will not use more than one sheet in the rollers. Consequently, adhesive address labels are out. Instead I use Avery labels (nr. 5357) making a master sheet of the addresses and then photocopying them. The problem: If there is a list of more than 30 addresses (or one sheet) the printer must be stopped to allow for inserting a fresh sheet of paper, but how am I going to resume printing where I left off? Is there a way to do so?

Niek Vanerlee
Kingston, ON, Canada

A. Here is a simple one-line solution that will allow you to interrupt printing and continue at any time:

1241 IF PEEK(764)=33 THEN 1241 

To pause printing, press the space bar. Printing will stop as soon as the program finishes printing the current address. Printing can be resumed by pressing any other key.

This will allow you to change label sheets when you are printing more than a page of addresses. Just press the space bar while the last address on the sheet is being printed. When this address has been printed, the program will pause and you will be able to insert and position a new sheet. Pressing any other key will then continue the printing.


Q. I have typed in Super Clock (Computer Shopper, October 1985) and have attempted to change the clock to a 24-hour format. I have not been successful so-far. (HELP!)

Hendell Helfrick
Springfield, OH

A. Following is a listing of modifications and additions that can be made to Super Clock for a 24-hour format. To change the clock display, modify lines 50, 60, 300, 380 and 400 and add line 425.

CHANGES FOR 24-HOUR CLOCK: 

50 FOR T=0 TO 360 STEP 15:POSITION 19+SIN(T)*16,11-COS(T)*9.75 
60 PRINT T/15;:NEXT T 
300 IF H>24 THEN H=H-24 
380 POKE 706,PEEK(705):POKE 705,S*4:IF PEEK(764)=33 THEN FL=0:GOTO 410 
400 HA=15*(H+M/120):MA=6*M 
425 IF PEEK(764)=33 THEN 200 

Listing 1 

Q. How can I change Mailing List (Computer Shopper, June 1985) to a four-line program. I would like to have, say, a principal’s name on one line and a school’s on another.

Eugene Curtis
Toledo, OH

A. The entire architecture of Mailing List’s data structure is based on the three line format (plus additional characters for the category). Therefore it is not a simple task to modify the program for four lines. However, there is a way around this, and it involves splitting the first line up into two or more lines. Here’s how it works: First add or modify the following lines on your Mailing List program (Lines 1270 and 1320 are changed, while lines 1245 and 1246 are added). Now, when entering the name on the first line, you can use the slash (/) to specify the beginning of a new line. When printing labels, the program will now change these slashes into line-feeds so the data following it will be printed on the next line. The program will automatically adjust for the extra line when printing so that the labels following are not “pushed” down by the additional line.

While this is a clever method of obtaining the four lines, there are two limitations: First, the total number of characters on the first and “extra” lines cannot exceed the number of characters (32) normally allocated for the first line. Second, whenever labels utilizing this extra line technique are to be printed, only single-column printing can be used; the extra line will interfere with double-column label printing.

CHANGES FOR 4-LINE MAILING LIST: 

1245 SKP1=0:FOR J=1 TO LEN(NAME$):IF NAME$(J,J)<>"/" THEN NEXT J:GOTO 125 
1246 NAME$(J,J)=CHR$(155):SKP1=SKP1+1:NEXT J 
1270 IF Q=0 THEN NAME2$=NAME$:ADDR2$=ADDR$:CSZ2$=CSZ$:GOTO 1282 
1320 FOR I=1 TO VS-SKP1:PRINT #5:NEXT I:GOTO 1240 

Listing 2 

Address Atari-related questions to: Jeff Brenner, “Atari Help”, c/o Computer Shopper, P.O. Box F, Titusville, FL 32781-9990.

COMPUTER SHOPPER / MARCH 1986 / PAGE 63 

Applying The Atari

by Jeff Brenner

Puzzle Generator,
Digitized Picture

This month’s feature program is PixMix, a high-resolution puzzle generator. Not only is this an excellent way to show off your Atari’s graphics capabilities, but it’s real entertaining and challenging as well. And to test it out, we’ll type in data for a digitized picture.

The 520ST

Apparently Jack Tramiel has the right touch. Atari says that by the end of 1985 it had shipped about 100,000 ST units, though many of these were to Europe. And Atari has had continued success with the 800XL and the newer 130XE. Many distributors have been selling the 130XE in a package with the 1050 disk drive, 1027 letter-quality printer and AtariWriter Plus for an incredible $400. Indeed, 1986 looks like a very promising year for the new Atari.

Incidentally, out editor, Stan Veit, has told me that Computer Shopper plans to cover the 520ST in a separate column. Therefore, my “Applying The Atari” column will remain devoted to the Atari 400/800/XL/XE.

It’s Never Too Late
For Corrections

Those of you using the February 1985 Computer Assisted Study program may still have problems saving and loading question and answer data, depending on what was residing in memory before Computer Assisted Study was run. To fix this for good, we can simply force the string memory to clear with the following line:

105 A$(1)=CHR$(0):A$(FM)=CHR$(0):A$(2)=A$ 

PixMix

Recently, I attended an Atari users group meeting in New York where several members displayed digitized images that they had captured with their Atari computers. A digitized image, for those of you unfamiliar with the term, is created when a signal from a video camera or videotape recorder is converted into numeric data that the computer can store. The computer can then regenerate the video image to the limits of its graphics resolution. A slow-scan device, such as Ditital Visions’ “ComputerEyes,” is used to convert the video signal into the data that the computer can understand.

The idea of storing realistic images in my Atari was particularly exciting to me, and I set out to design a few routines for processing and modifying captured digital images. One of these routines enabled a block of the screen to be moved to another section of the screen. On one digitized image, I had plenty of on-screen fun rearranging a young woman’s eyes and nose. In a few minutes the entire image was hopelessly scrambled and the idea for the PixMix Puzzle Machine instantly evolved.

PixMix turns any Graphics 8 format screen (Graphics 9 through 11, or Graphics 15 or “7.5”, i.e. MicroPainter screens) into a 30-piece puzzle that you can mix up as much or as little as you like. Use the joystick to move the “pieces” around the screen to reconstruct the original image. Press the space bar when you get stuck and you’ll see the completed puzzle for as long as you like. When you think that you’ve solved the puzzle, hit the START key and hope that you’ll get the short, congratulatory tune instead of the low buzz that tells you to look more carefully.

The faster you complete the puzzle, the better your time and the higher your score. PixMix is a great solitary game, but since a score is given, as many people as you like can compete against each other.

PixMix is listed under the “PixMix Puzzle Machine” heading and will run on any 8-bit Atari with a minimum of 40K RAM.

Sample Digitized Picture

Before you test out PixMix, you might want to type in and run the “Digitized Picture Data” program. This program creates a cassette or diskette file of a digitized picture of a watch. Since a full-resolution digitized Graphics 8 image is about 8K in data alone, we had to halve its vertical resolution so that it could be typed into the computer in a feasible amount of time. The image still looks realistic, though, and takes up the full length of the screen.

Using PixMix

When you RUN PixMix, the animated title screen will fall into place and the Atari will take a few seconds to set up the data and to load the machine language routines.

You’ll be asked if you’re using a cassette or diskette (press C or D). If you’re using a diskette you’ll be asked to enter the file name for the picture you want to load. To load the digitized watch file created with the “Digitized Picture Data” program, type “CLOCK.PIC” and press RETURN. If you want to load a picture from a diskette with several files on it, you can press RETURN to the “LOAD WHAT PICTURE FILE?” You’ll then be shown each file on the diskette. To see the next file, press RETURN. To load the file that is displayed, press y.

The screen will remain blank until the picture is fully loaded. The picture will then appear on the screen along with a flashing cursor. Photo 1 shows how the full-resolution watch picture looks like when it is loaded into PixMix. The light box in the upper left-hand corner of the screen is the cursor. Plug in a joystick and you can move the cursor to any part of the screen. The cursor was designed to be visible yet semi-transparent to the screen underneath, regardless of whether you are using a color or a black and white screen.

By pressing the trigger, you can “pick up” any piece of the picture and move it to wherever you like. Try it: Push the joystick trigger. You’ll hear a beep. Now when you move the cursor, the piece of screen that was under the cursor will move with it! You can now place this piece of screen down wherever you like by pressing the trigger again. What happens to the section of the image that you just covered with the moved piece, you ask? It is automatically placed in the blank space that the original piece was taken from. Hence, when you move one piece to another, the two exchange places.

Scrambling The Screen

Now for the fun stuff. When you press and hold down the OPTION key, the image on the screen will be mixed up. The longer you hold down the OPTION key, the more the pieces of the picture will be mixed up. Photo 2 shows the picture of the watch after a few seconds of scrambling. When you release the OPTION key, the timer starts. Now use the joystick to put the picture back together.

The Space Bar

At any time while solving the puzzle, you can press and hold down the space bar to see the completed puzzle. When you release the space bar, your unsolved puzzle will return to the screen. The space bar is particularly useful when you first start solving the puzzle, since it allows you to check that you’re putting the pieces in their correct positions.

Solving The Puzzle

As soon as you think you’ve solved the puzzle, press the START key. If your Atari responds with a menacing buzz, you’ll know that you’ve left some pieces out of place. A short, pleasant melody tells you when you’ve correctly solved the puzzle, and your time and score will be displayed. Photo 3 shows a puzzle that has just been solved. The time was 7 minutes and 43.71 seconds.

After a puzzle has been solved, you are given the option of trying the same puzzle again, or a new one. If you’re playing with a group of people, you’ll want each person to try to get the best score on the same puzzle, since each puzzle varies in complexity and difficulty.

Hints and Strategies

Naturally, it’s a good idea to look for recognizable pieces when you begin solving a puzzle. For example, if the puzzle is the face of a person, you’ll want to look for the eyes and get those into place before continuing with the rest of the puzzle. In the watch picture, the Roman numerals are of great help in putting the picture together, which is why this puzzle is particularly well suited for beginners.

You’ll find that some pictures make easy puzzles, while others make incredibly difficult puzzles. Generally, the more defined and clear the original image is, the easier the puzzle will be to solve. In any case, the more you solve a particular puzzle, the faster you’ll be able to do it. You may find that you can do a thoroughly mixed watch puzzle in close to a minute after enough practice.

Take advantage of the fact that the cursor returns to the opposite side of the screen when it is moved past an edge. For example, if the cursor is on the right side of the screen and you want to move it to the left side, pushing the joystick to the right is the fastest way, since the cursor will return to the left side of the screen once it passes the right edge.

Certainly make use of the space bar, not only when you start solving a puzzle, but near the end too when you may easily miss those few pieces that are out of place. By pressing and releasing the space bar, you can flip back and forth between the original image and your puzzle screen so that any differences become visible to you.

Picture Diskette

I have assembled a disk full of specially centered, high-resolution digitized pictures that you can use with PixMix. Also included on the diskette is an add-on utility that allows PixMix to load compressed MicroIllustrator files (for Atari Touch Tablet and Koalapad) in Graphics 15 (“Graphics 7.5”) four-color format. The “Picture Diskette” is available to readers for $5.00, postpaid. (See address at end of article.)

Next Month

Readers questions, comments and contributions are welcome. Please enclose a self-addressed, stamped envelope (SASE) for a personal reply.

A diskette of the programs listed in this months column is available from the author for $7.00, postpaid. Please make checks payable to “Jeff Brenner” and specify your disk drive model.

Program Perfect” is a utility used to check for typing errors while entering programs from this column. Readers may send $5 for a diskette or a SASE for a listing of this program.

Address all correspondence to Jeff Brenner, “Applying The Atari 3/86” c/o Computer Shopper, PO Box F, Titusville, FL 32781-9990.

DIGITIZED PICTURE DATA 

SCE 10 REM DIGITIZED PICTURE DATA LOADER 
ESE 15 S=1:C=0:PRINT CHR$(125);"COUNTDOWN: ":POKE 752,1:OPEN #1,4,0,"K:" 
QNE 20 DIM A$(3840),C0$(40),C255$(40):C0$=CHR$(0):C0$(40)=CHR$(0):C0$(2)=C0$ 
GTE 25 C255$=CHR$(255):C255$(40)=CHR$(255):C255$(2)=C255$ 
DHE 30 POSITION 14,0:PRINT 3840-S;"   " 
KDE 35 READ N:IF N>0 AND N<255 THEN A$(S)=CHR$(N):S=S+1:GOTO 30 
CLE 40 IF N=-1 THEN GOTO 55 
MJE 45 READ A:IF N=0 THEN A$(S)=C0$(1,A):S=S+A:GOTO 30 
VLE 50 A$(S)=C255$(1,A):S=S+A:GOTO 30 
RXE 55 POKE 752,0:PRINT :PRINT "SAVE TO CASSETTE OR DISK (C/D)?";:GET #1,N 
MWE 60 PRINT CHR$(N) 
IGE 65 IF N<67 OR N>68 THEN 55 
BSE 70 PRINT "PRESS START TO SAVE" 
LZE 75 IF PEEK(53279)<>6 THEN 75 
OEE 80 IF N=68 THEN PRINT "SAVING AS CLOCK.PIC":OPEN #2,8,0,"D:CLOCK.PIC" 
WXE 85 IF N=67 THEN OPEN #2,8,128,"C:" 
PKE 90 FOR I=1 TO LEN(A$) STEP 40 
MDE 95 PRINT #2;A$(I,I+39);A$(I,I+39);:NEXT I:CLOSE #2 
NWE 100 PRINT "COMPLETED.":POKE 752,0:END 
DDE 105 DATA 0,6,16,0,3,48,0,1,1,240,3,255,1,191,255,1,251 
MPE 110 DATA 255,4,184,0,23,128,0,2,192,0,1,22,0,1,255,1,216,47 
CDE 115 DATA 255,6,193,128,0,21,129,0,2,7,128,0,1,192,15,148,127,255,8 
ROE 120 DATA 27,32,0,23,52,0,2,1,224,15,255,10,248,0,23,112,24,0,1 
JQE 125 DATA 8,6,255,3,7,255,8,32,0,18,16,0,3,128,224,0,2,127 
BEE 130 DATA 255,1,252,61,143,255,3,223,255,3,254,253,0,21,1,7,136,0,1 
VWE 135 DATA 7,255,2,254,29,199,255,3,227,255,4,223,192,0,16,16,0,3 
BIE 140 DATA 12,62,32,0,1,31,255,3,131,227,255,3,227,220,127,255,3,252 
VJE 145 DATA 0,6,16,0,13,48,248,6,11,255,4,227,225,255,3,224,120,67 
GTE 150 DATA 255,4,128,0,19,67,224,48,15,255,4,240,241,255,3,241,248,199 
TAE 155 DATA 255,4,240,0,2,1,64,0,14,1,15,128,128,127,255,4,240,56 
IZE 160 DATA 255,3,225,240,135,255,4,254,0,5,1,0,6,2,0,4,16,4 
VQE 165 DATA 63,131,3,255,6,8,127,255,2,177,225,143,255,5,192,0,1,2 
AHE 170 DATA 128,0,3,64,0,11,255,1,136,15,252,255,4,239,255,3,254,248 
WWE 175 DATA 225,15,255,5,240,0,2,128,0,14,3,250,64,31,223,127,255,5 
DWE 180 DATA 143,191,255,1,254,195,31,255,6,0,12,32,0,4,7,253,192,255,1 
XVE 185 DATA 3,255,4,247,239,255,3,127,248,63,255,6,160,0,1,248,0,13 
XAE 190 DATA 1,31,219,3,255,1,240,31,255,2,251,255,1,247,2,7,127,254 
PGE 195 DATA 63,255,7,237,0,1,16,0,12,8,0,1,127,254,15,255,2,131 
VGE 200 DATA 255,1,254,255,1,248,255,4,188,254,255,7,241,0,1,4,0,14 
JWE 205 DATA 254,220,31,255,2,224,23,255,1,254,127,255,5,125,255,7,252,128 
ANE 210 DATA 16,0,13,3,253,176,63,255,3,31,63,159,255,6,251,248,255,3 
CAE 215 DATA 241,255,3,0,1,12,0,13,39,248,65,255,5,253,255,8,231,255,3 
YWE 220 DATA 193,255,3,128,11,0,10,32,0,2,79,244,195,255,4,231,255,12 
DUE 225 DATA 254,15,255,3,224,1,0,13,31,241,135,255,4,252,127,255,9,223 
BTE 230 DATA 255,1,240,63,255,3,242,0,14,63,207,15,255,3,252,255,2,207 
GPE 235 DATA 255,9,191,193,255,4,248,0,14,127,254,31,255,4,207,255,1,225 
YLE 240 DATA 255,10,231,255,4,252,32,128,0,9,4,0,2,255,1,204,63,255,3 
JVE 245 DATA 223,191,255,1,240,127,255,1,253,255,6,252,127,255,5,2,96,0,11 
ECE 250 DATA 1,255,1,252,127,255,3,254,255,2,252,31,255,1,251,239,255,5 
XUE 255 DATA 249,255,6,128,32,0,11,1,255,1,248,127,255,6,254,7,255,2 
NRE 260 DATA 221,155,255,11,196,96,0,11,11,255,1,240,248,255,2,253,247,255,3 
EQE 265 DATA 129,255,2,249,196,255,5,207,255,5,224,48,0,11,15,255,1,113 
KPE 270 DATA 255,8,224,255,3,237,246,207,255,9,249,0,12,23,254,227,247,231 
AME 275 DATA 255,6,248,31,255,3,238,31,255,4,223,255,4,248,24,0,11,31 
HWE 280 DATA 255,1,227,224,0,1,1,239,255,4,254,15,255,3,253,147,111,255,8 
YWE 285 DATA 253,64,0,7,32,0,3,31,253,231,207,255,1,127,223,255,5,131 
XJE 290 DATA 255,4,248,111,255,4,252,7,255,2,254,4,0,11,63,255,1,227 
TNE 295 DATA 192,127,255,1,191,255,5,0,1,255,9,240,0,1,15,255,3,16 
YWE 300 DATA 0,11,63,255,1,199,252,0,1,247,129,255,4,252,0,1,63,255,7 
XDE 305 DATA 254,0,2,255,4,144,0,11,63,253,207,255,1,248,7,125,255,4 
QPE 310 DATA 252,0,1,15,255,7,0,2,15,255,4,128,0,11,127,255,1,207 
TSE 315 DATA 255,2,239,255,6,128,3,255,6,0,2,96,31,255,1,240,255,2 
BXE 320 DATA 136,0,11,127,255,1,239,255,3,99,255,5,240,1,255,5,128,0,1 
PEE 325 DATA 127,255,1,254,0,2,127,255,1,196,0,9,1,0,1,127,255,1 
BUE 330 DATA 223,255,9,254,0,1,127,255,3,192,0,1,255,4,15,252,63,255,1 
HCE 335 DATA 226,0,11,127,255,1,239,255,10,224,31,255,2,240,0,1,127,255,3 
YJE 340 DATA 7,0,2,31,255,1,224,0,11,63,255,1,127,255,2,254,103,255,6 
ULE 345 DATA 252,0,1,31,224,0,1,63,255,5,131,255,3,224,0,11,127,254 
WWE 350 DATA 127,255,11,0,3,31,255,5,253,255,4,241,0,11,63,255,4,254 
VRE 355 DATA 247,255,7,0,2,7,255,6,129,255,4,243,0,11,127,255,1,127 
YRE 360 DATA 255,2,254,87,255,7,0,2,127,255,11,241,0,11,63,255,13,0,2 
HLE 365 DATA 127,255,11,240,0,11,31,255,1,127,255,2,239,251,255,7,128,0,1 
TIE 370 DATA 15,255,6,192,255,4,240,0,11,31,255,1,63,255,1,192,7,3 
VFE 375 DATA 255,7,224,0,1,195,255,11,248,0,11,31,255,2,192,0,1,247 
GNE 380 DATA 255,8,254,7,248,63,255,10,248,128,0,10,31,255,1,223,199,240 
DKE 385 DATA 3,255,11,135,255,5,230,255,4,248,0,11,15,255,1,223,224,0,1 
HRE 390 DATA 123,192,255,10,240,255,5,224,255,4,249,128,0,10,15,255,1,231 
EUE 395 DATA 224,254,1,223,255,10,254,31,255,4,239,199,255,3,249,0,7,32 
SME 400 DATA 0,3,15,255,1,231,240,0,1,2,255,12,195,255,4,207,255,1 
AHE 405 DATA 15,255,2,240,0,11,7,255,1,247,248,47,255,1,246,63,255,10 
BVE 410 DATA 248,127,255,3,223,255,1,252,31,255,1,241,0,11,7,255,1,249 
DZE 415 DATA 248,255,2,251,255,12,15,255,3,155,255,2,248,255,1,240,0,11 
LNE 420 DATA 3,255,1,253,255,2,128,125,255,12,241,255,3,191,255,2,253,255,1 
LUE 425 DATA 240,128,0,10,3,255,1,252,127,248,7,254,247,255,11,254,63,255,2 
BFE 430 DATA 60,231,255,1,249,255,1,224,0,11,3,255,1,254,127,0,1,255,2 
ALE 435 DATA 127,255,5,253,255,6,199,255,2,127,242,3,255,2,224,0,11,1 
IIE 440 DATA 255,2,143,143,255,8,248,255,1,127,255,4,248,255,1,254,124,12 
HRE 445 DATA 127,251,255,1,230,0,11,1,255,2,207,255,3,254,255,6,126,255,6 
JKE 450 DATA 31,252,249,255,1,231,247,255,1,206,128,0,10,1,255,2,231,255,8 
EFE 455 DATA 63,255,1,240,255,6,227,248,63,205,247,247,255,1,140,0,11,1 
EKE 460 DATA 255,2,241,255,9,162,127,255,6,252,127,153,255,1,7,255,2,20 
CSE 465 DATA 0,12,255,2,252,255,4,159,255,3,247,255,1,206,63,255,6,135 
EME 470 DATA 191,231,255,1,239,255,1,12,0,12,255,2,254,95,255,9,254,253 
NPE 475 DATA 255,6,128,255,2,143,223,254,142,15,128,0,10,127,255,2,143,255,2 
LNE 480 DATA 193,254,31,255,5,231,255,6,120,31,255,2,159,252,240,0,12,255,3 
FPE 485 DATA 203,255,2,6,120,255,12,253,255,1,231,255,3,253,252,0,12,127 
IEE 490 DATA 255,2,243,255,1,248,24,31,252,255,11,247,255,1,252,255,3,243 
NXE 495 DATA 248,0,12,127,255,2,253,255,1,224,224,255,13,223,255,2,159,255,2 
LPE 500 DATA 231,248,0,12,127,255,3,62,7,135,255,2,243,255,10,207,248,255,4 
KHE 505 DATA 207,224,0,12,127,255,1,247,255,1,239,156,31,241,254,239,255,9 
ICE 510 DATA 251,247,224,63,255,3,63,192,0,12,127,255,1,207,255,1,247,192 
BXE 515 DATA 126,7,255,2,231,255,10,135,15,255,2,254,63,0,13,127,255,1 
MHE 520 DATA 129,255,1,252,121,239,15,255,2,191,255,9,124,112,195,255,2,249 
WXE 525 DATA 255,1,1,224,0,11,63,255,1,128,127,255,1,62,126,31,255,3 
JSE 530 DATA 191,255,6,191,255,1,242,28,48,255,1,254,224,200,0,13,63,255,1 
ELE 535 DATA 128,31,255,1,3,252,63,255,2,254,127,63,255,4,207,255,1,127 
UBE 540 DATA 225,135,12,31,255,1,130,120,0,13,127,255,1,0,1,7,255,1 
SBE 545 DATA 225,224,127,255,3,252,127,254,127,159,227,255,1,231,255,1,248,112 
VBE 550 DATA 193,31,254,5,224,0,13,127,255,1,0,2,255,1,252,29,255,3 
KBE 555 DATA 252,127,230,255,3,243,243,255,2,254,12,48,63,184,118,224,0,13 
CEE 560 DATA 127,255,1,0,2,31,255,1,195,255,3,254,31,255,1,248,125,253 
DWE 565 DATA 131,255,4,195,132,254,224,125,128,0,13,127,254,0,2,3,255,1 
EQE 570 DATA 249,255,3,252,63,63,255,8,240,231,255,1,3,178,0,14,127,254 
ANE 575 DATA 0,3,255,2,63,255,2,252,126,63,255,3,254,255,4,252,31,252 
EDE 580 DATA 2,188,0,14,127,252,0,3,15,255,1,247,255,2,248,124,63,255,3 
JYE 585 DATA 254,127,255,5,224,31,248,0,14,127,252,0,4,255,1,254,127,255,1 
ETE 590 DATA 248,248,63,255,3,254,31,255,5,128,238,160,0,14,127,248,0,4 
ENE 595 DATA 31,255,1,231,255,1,240,254,63,255,3,254,15,255,4,248,1,219 
WRE 600 DATA 128,0,14,255,1,240,0,4,3,255,1,254,127,225,222,63,255,4 
RHE 605 DATA 199,255,4,128,0,1,43,0,15,255,1,240,0,5,63,255,1,243 
VDE 610 DATA 252,62,63,255,4,225,255,3,248,0,1,1,248,0,15,255,1,224 
STE 615 DATA 0,5,3,255,2,143,254,63,255,4,248,255,3,0,2,1,112,0,15 
XLE 620 DATA 255,1,192,0,6,63,255,1,252,51,255,5,248,63,255,1,224,32 
LGE 625 DATA 0,1,1,64,0,15,255,1,192,0,6,3,255,2,252,255,7,240 
UIE 630 DATA 31,224,0,1,51,0,16,255,1,128,0,7,31,255,2,252,31,255,4 
RBE 635 DATA 240,15,255,1,224,0,1,62,0,16,255,1,128,0,8,127,255,3 
HIE 640 DATA 192,0,2,7,255,3,128,0,1,120,0,16,62,0,9,1,255,9 
MQE 645 DATA 254,0,2,32,0,16,14,0,10,7,255,8,192,0,1,1,128,0,16 
FAE 650 DATA 12,0,12,255,6,0,3,6,0,36,1,128,0,1,62,0,37,128 
XVE 655 DATA 0,1,16,0,36,1,0,2,160,0,36,1,0,1,3,192,0,36 
WYZ 660 DATA 2,0,1,2,0,37,2,0,1,14,0,12,-1 
PIXMIX PUZZLE MACHINE 

YJJ 10 REM PIXMIX PUZZLE MACHINE 
KGJ 20 REM COPYRIGHT 1986 JEFF BRENNER 
ENJ 30 DIM PM$(176),C1$(48),C2$(48),TEMP$(25),FILE$(25),A$(10),B$(10) 
MKJ 40 OPEN #1,4,0,"K:":GOSUB 160 
TCJ 50 C1$=PM$:C1$(17)=CHR$(255):C1$(32)=CHR$(255) 
MAJ 60 C1$(18,31)=C1$(17,32):C1$(LEN(C1$)+1)=PM$ 
YWJ 70 DIM GT$(57),PT$(53),SCR$(7680),MOVE$(56),CMP$(65),SWAP$(62),CIO$(7) 
IUJ 80 GOSUB 930:DIM P$(320),HOLD$(320):P$(320)=CHR$(0) 
KKJ 90 POKE 106,PEEK(106)-16:GRAPHICS 24:GOSUB 720:J=PEEK(88)+256*PEEK(89) 
NXJ 100 RESTORE 110:FOR I=1664 TO 1684:READ N:POKE I,N:NEXT I:A=USR(1664) 
PIJ 110 DATA 104,162,6,160,138,169,7,76,92,228,165 
YVJ 120 DATA 20,41,247,141,192,2,76,98,228 
BRJ 130 PM=PEEK(106):POKE 54279,PM:POKE 53277,3:POKE 53248,0 
FSJ 140 V=PEEK(134)+256*PEEK(135):A=PEEK(140)+256*PEEK(141):OS=PM*256+512-A 
NDJ 150 H=INT(OS/256):L=OS-H*256:POKE V+2,L:POKE V+3,H:GOSUB 160:GOTO 170 
SGJ 160 PM$(1)=CHR$(0):PM$(176)=CHR$(0):PM$(2)=PM$:RETURN 
YMJ 170 X=48:Y=48:PM$(Y-47,Y+48)=C1$:POKE 53256,3 
UAJ 180 DIM JX(10),JY(10) 
FAJ 190 RESTORE 200:FOR I=0 TO 9:READ X1,Y1:JX(I)=X1:JY(I)=Y1:NEXT I 
FUJ 200 DATA 32,16,32,-16,32,0,0,0,-32,16,-32,-16,-32,0,0,0,0,16,0,-16,0,0 
NDJ 210 GRAPHICS 8+32:GOSUB 720 
PNJ 220 TEMP$="":CLOSE #3:PRINT "CASSETTE OR DISKETTE (C/D)? "; 
OWJ 230 GET #1,D:PRINT CHR$(D):IF D<67 OR D>68 THEN 220 
PNJ 240 IF D=68 THEN PRINT "LOAD WHAT PICTURE FILE? D:";:INPUT #16;TEMP$ 
EHJ 250 IF LEN(TEMP$) OR D<>68 THEN 340 
PUJ 260 TRAP 330:PRINT "DIRECTORY (PRESS RETURN OR Y)":OPEN #2,6,0,"D:*.*" 
NRJ 270 INPUT #2;FILE$:IF FILE$(2,2)<>CHR$(32) THEN 330 
VVJ 280 A$=FILE$(1,10):PRINT A$;".";FILE$(11,13);"?";CHR$(32); 
BCJ 290 GET #1,N:PRINT CHR$(N):IF N<>89 THEN 270 
CCJ 300 IF A$(LEN(A$))=CHR$(32) THEN A$=A$(1,LEN(A$)-1):GOTO 300 
ETJ 310 TEMP$=A$(3):TEMP$(LEN(TEMP$)+1)=".":TEMP$(LEN(TEMP$)+1)=FILE$(11) 
WOJ 320 CLOSE #2:GOTO 340 
QCJ 330 TRAP 40000:PRINT :CLOSE #2:GOTO 240 
EOJ 340 FILE$=CHR$(D):FILE$(2,2)=":":FILE$(LEN(FILE$)+1)=TEMP$ 
QDJ 350 POKE 881,0:TRAP 220:OPEN #3,4,0,FILE$ 
WQJ 360 H=INT(ADR(SCR$)/256):L=ADR(SCR$)-H*256:POKE 884,L:POKE 885,H 
ASJ 370 POKE 888,0:POKE 889,30:POKE 882,7:A=USR(ADR(CIO$),48):CLOSE #3 
XCJ 380 TRAP 40000:A=USR(ADR(MOVE$),ADR(SCR$)) 
ADJ 390 GRAPHICS 8+16+32:GOSUB 720:POKE 53248,48 
KHJ 400 POKE 18,0:POKE 19,0:POKE 20,0:TF=0 
HQJ 410 I=0:D=STICK(0)-5:IF D=10 THEN 540 
PRJ 420 SOUND 3,0,1,6:SOUND 3,0,1,0:POKE 77,0 
YZJ 430 X=X+JX(D):Y=Y+JY(D):IF X<48 THEN X=176 
ABJ 440 IF X>176 THEN X=48 
YAJ 450 IF Y<48 THEN Y=128:GOSUB 160 
YDJ 460 IF Y>128 THEN Y=48:GOSUB 160 
YXJ 470 IF HOLD$="" THEN FOR DL=1 TO 14:NEXT DL 
KRJ 480 POKE 53248,X 
VPJ 490 PM$(Y-47,Y+48)=C1$ 
MSJ 500 IF LEN(HOLD$)=0 THEN 540 
QMJ 510 A=USR(ADR(PT$),ADR(P$),S) 
OIJ 520 S=J+(X-48)/4+(Y-48)*80:A=USR(ADR(GT$),ADR(P$),S) 
YVJ 530 A=USR(ADR(PT$),ADR(HOLD$),S) 
IEJ 540 SOUND 0,0,0,0:IF PEEK(764)=33 THEN GOSUB 730 
QJJ 550 FL=0:IF PEEK(53279)=3 THEN GOSUB 660 
ENJ 560 IF PEEK(53279)=6 THEN GOSUB 760 
EHJ 570 IF STRIG(0) THEN 410 
LYJ 580 SOUND 0,0,6,6 
AGJ 590 S=J+(X-48)/4+(Y-48)*80:IF HOLD$="" THEN 620 
KJJ 600 HOLD$="":IF S<>OS THEN S=OS:A=USR(ADR(PT$),ADR(P$),S) 
BQJ 610 GOTO 640 
FFJ 620 OS=S:A=USR(ADR(GT$),ADR(P$),S) 
CFJ 630 HOLD$=P$:P$=CHR$(0):P$(320)=CHR$(0):P$(2)=P$ 
IPJ 640 IF STRIG(0)=0 THEN 640 
BWJ 650 GOTO 480 
DAJ 660 XX=INT(RND(0)*5):YY=INT(RND(0)*6):S=J+XX*8+YY*1280 
PGJ 670 IF FL=0 THEN FL=1:A=USR(ADR(GT$),ADR(P$),S):S1=S:HOLD$=P$:GOTO 660 
RMJ 680 A=USR(ADR(GT$),ADR(P$),S):A=USR(ADR(PT$),ADR(P$),S1):S1=S 
NNJ 690 IF PEEK(53279)=3 THEN 660 
DFJ 700 IF TF=0 THEN TF=1:POKE 18,0:POKE 19,0:POKE 20,0:SOUND 0,11,12,10 
RIJ 710 A=USR(ADR(PT$),ADR(HOLD$),S1):HOLD$="":RETURN 
MPJ 720 POKE 559,46:POKE 710,0:POKE 16,64:POKE 53774,64:POKE 764,255:RETURN 
XKJ 730 A=USR(ADR(SWAP$),ADR(SCR$)) 
RGJ 740 IF PEEK(53775)=251 THEN 740 
XEJ 750 POKE 764,255:A=USR(ADR(SWAP$),ADR(SCR$)):RETURN 
XSJ 760 A=USR(ADR(CMP$),ADR(SCR$)):IF PEEK(208)=0 THEN 780 
SFJ 770 SOUND 0,45,6,8:FOR I=1 TO 100:NEXT I:SOUND 0,0,0,0:RETURN 
NKJ 780 TM=(PEEK(20)+256*PEEK(19)+256*PEEK(18))/60-0.21:RESTORE 820 
JDJ 790 FOR I=0 TO 3:READ N:FOR V=12 TO 0 STEP -1:SOUND I,N,10,V:NEXT V 
LYJ 800 NEXT I:FOR I=53761 TO 53767 STEP 2 
ASJ 810 POKE I,166:NEXT I:FOR I=1 TO 90:POKE 712,I:NEXT I 
XFJ 820 DATA 243,193,162,121 
EWJ 830 SOUND 1,29,10,8:SOUND 3,11,10,8:POKE 710,12:FOR I=1 TO 100:NEXT I 
KBJ 840 POKE 710,0:POKE 712,0:FOR I=0 TO 3:SOUND I,0,0,0:NEXT I 
ANJ 850 GRAPHICS 8+32:GOSUB 720:PRINT CHR$(125);"TIME: ";:POKE 559,46 
LHJ 860 M=INT(TM/60):S=TM-M*60 
HRJ 870 PRINT M;" MINUTES AND ";INT(S*100+0.5)/100;" SECONDS." 
TFJ 880 PRINT "SCORE: ";INT((1000-TM)*1000+0.5) 
XZJ 890 PRINT "SAME OR NEW PUZZLE (S/N)? ";:GET #1,N:PRINT CHR$(N) 
SXJ 900 IF N<>83 AND N<>78 THEN 890 
SSJ 910 IF N=78 THEN 220 
TUJ 920 A=USR(ADR(MOVE$),ADR(SCR$)):GOTO 390 
RLJ 930 POKE 559,0:RESTORE 940:FOR I=1 TO 57:READ N:GT$(I,I)=CHR$(N):NEXT I 
KXJ 940 DATA 104,104,133,205,104,133,204,104,133,207,104,133,206,162,32,160 
DCJ 950 DATA 7,177,206,145,204,169,0,145,206,136,16,245,24,165,206,105 
EEJ 960 DATA 40,133,206,165,207,105,0,133,207,165,204,105,8,133,204,165 
FEJ 970 DATA 205,105,0,133,205,202,208,215,96 
NCJ 980 GOSUB 1210:FOR I=1 TO 53:READ N:PT$(I,I)=CHR$(N):NEXT I 
LCJ 990 DATA 104,104,133,205,104,133,204,104,133,207,104,133,206,162,32,160 
GIJ 1000 DATA 7,177,204,145,206,136,16,249,24,165,206,105,40,133,206,165 
DGJ 1010 DATA 207,105,0,133,207,165,204,105,8,133,204,165,205,105,0,133 
FRJ 1020 DATA 205,202,208,219,96 
TLJ 1030 FOR I=1 TO 56:READ N:MOVE$(I,I)=CHR$(N):NEXT I 
LYJ 1040 DATA 104,104,133,205,104,133,204,165,88,133,206,165,89,133,207,162 
ILJ 1050 DATA 192,160,39,177,204,145,206,136,16,249,24,165,204,105,40,133 
HMJ 1060 DATA 204,165,205,105,0,133,205,24,165,206,105,40,133,206,165,207 
YKJ 1070 DATA 105,0,133,207,202,208,218,96 
QHJ 1080 FOR I=1 TO 65:READ N:CMP$(I,I)=CHR$(N):NEXT I 
JYJ 1090 DATA 104,104,133,205,104,133,204,169,0,133,208,165,88,133,206,165 
IXJ 1100 DATA 89,133,207,162,192,160,39,177,204,209,206,208,33,136,16,247 
FHJ 1110 DATA 24,165,204,105,40,133,204,165,205,105,0,133,205,24,165,206 
NMJ 1120 DATA 105,40,133,206,165,207,105,0,133,207,202,208,216,96,230,208,96 
TNJ 1130 FOR I=1 TO 62:READ N:SWAP$(I,I)=CHR$(N):NEXT I 
LZJ 1140 DATA 104,104,133,205,104,133,204,165,88,133,206,165,89,133,207,162 
KOJ 1150 DATA 192,160,39,177,204,72,177,206,145,204,104,145,206,136,16,243 
FMJ 1160 DATA 24,165,204,105,40,133,204,165,205,105,0,133,205,24,165,206 
RNJ 1170 DATA 105,40,133,206,165,207,105,0,133,207,202,208,212,96 
ODJ 1180 FOR I=1 TO 7:READ N:CIO$(I,I)=CHR$(N):NEXT I 
TDJ 1190 DATA 104,104,104,170,76,86,228 
CPJ 1200 RETURN 
NPJ 1210 A$="PIXMIX":DIM X(6),Y(6),C(2):GRAPHICS 2:POKE 710,0:N=0 
QQJ 1220 POKE 708,66:POKE 709,216:POKE 711,148 
FAJ 1230 C(0)=0:C(1)=32:C(2)=160 
GFJ 1240 FOR I=1 TO 6:X(I)=5+INT(RND(0)*10):Y(I)=INT(RND(0)*10) 
RRJ 1250 POSITION X(I),Y(I):PRINT #6;CHR$(ASC(A$(I,I))+C(N)):N=N+1 
TSJ 1260 IF N=3 THEN N=0 
ASJ 1270 NEXT I 
VKJ 1280 B=1:FOR I=1 TO 6 
QWJ 1290 X=X(I):Y=Y(I) 
USJ 1300 SOUND 1,X(I)*4,10,8:SOUND 2,Y(I)*4,10,8 
CLJ 1310 IF Y(I)>5 THEN Y(I)=Y(I)-1:B=0 
CIJ 1320 IF Y(I)<5 THEN Y(I)=Y(I)+1:B=0 
GXJ 1330 IF X(I)>I+6 THEN X(I)=X(I)-1:B=0 
GUJ 1340 IF X(I)<I+6 THEN X(I)=X(I)+1:B=0 
AWJ 1350 POSITION X,Y:PRINT #6;CHR$(32);:POSITION X(I),Y(I):PRINT #6;A$(I,I); 
NFJ 1360 POSITION X(I),Y(I):A=ASC(A$(I,I)):PRINT #6;CHR$(A+C(N)) 
IXJ 1370 N=N+1:IF N>2 THEN N=0 
NKJ 1380 NEXT I:IF B=0 THEN 1280 
TQJ 1390 POKE 752,1:POKE 657,13:PRINT "PUZZLE MACHINE" 
XHJ 1400 POKE 657,7:PRINT "Copyright 1986 Jeff Brenner":POKE 53768,1 
OEJ 1410 FOR I=1 TO 36 
WNJ 1420 N=PEEK(711):POKE 711,PEEK(709):POKE 709,PEEK(708):POKE 708,N 
VZJ 1430 NEXT I:PRINT :POKE 657,15:PRINT "STAND BY..."; 
TIJ 1440 SOUND 1,0,0,0:SOUND 2,0,0,0 
DFZ 1450 POKE 752,0:RETURN 
COMPUTER SHOPPER / MARCH 1986 / PAGE 63 

Atari Help

by Jeff Brenner

In January’s “Atari Help” column, Andrew Leo Eddings of Alabaster, AL had asked about memory expansion for the Atari 800XL. Since I was not familiar with the latest memory expansions available for the 800XL, I asked those readers who produced or were familiar with 800XL memory expansion to write. This month we will all learn about the latest memory expansion available, thanks to the many readers who responded to my call for help.

The treasurer of the Memphis Atari Systems Hobbyists was kind enough to give us a brief history of the recent activity in the 800XL memory expansion area. He writes:

Claus Buchholz published an article in the September 1985 issue of BYTE which described the use of 41256 256K-bit dynamic RAMs to expand the 800XL to a full 256K RAM! I built that modification (for under $30.00) as have many others. Unfortunately, it bank selected 32K pages ($0000-$7FFF) unlike both the 130XE and Axlon and Mosaic expansion mods for the older 800, which bank selects 16K. Buchholz’s handler was modified by a CompuServe user named John Radigan. Then Tom Harker of ICD got together with Buchholz and developed a SpartaDOS-compatible ramdisk handler for the “256K XL.” Now single, enhanced and double densities were supported but no existing software existed for this bank select scheme.

Enter ICD and CDY consulting. Harker (ICD) has introduced the “RAMBO XL” mod which, unlike the original Buchholz mod, allows both the 800XL and 1200XL to be expanded to 256K RAM plus providing the same 16K ($4000-$7FFF) selection as the 130XE. These mods produced a pseudo 130XE with 256K instead of 128K of banked memory. The ICD unit retails for $49.95 without DRAMs and the CDY upgrade sells for $99.95 with DRAMs (although it too is available without DRAMs for much less).

With the minimal cost of 41256-150ns dynamic RAMs, Atari ought to give serious consideration to producing a “260XE” as both the manufacturing changes would be minimal and now there is little reason for XL owners to buy XEs! The modified XLs are the most powerful 8-bit Ataris in existence! Add two 50k-baud drives (ICD US Doubler or Happy-Modified 1050’s) and the Supra Xebic 1410 based controller with a suitable 10MB hard drive and voila! Now what we need is a printer spooler program like that just released for the 520ST!

Bob Allman
Millington, TN

Thomas Harker, president of ICD (1220 Rock Street, Suite 310, Rockford, IL 61101-1437), writes that ICD’s RAMBO XL upgrade “is indeed 130XE compatible in the CPU mode. A computer fitted with this upgrade can run the DOS 2.5 RAMdisk, BASIC XE, PaperClip word processor, and Synfile+, as if it was the 130XE.” CDY’s upgrade is similarly compatible (CDY, 421 Hanbee, Richardson, TX 75080). Garrett Computing (117 Drury Lane, Slidell, LA 70460) offers yet another “Quarter Megabyte Atari 800XL” upgrade for $59.95, which includes RAMs. Dan Garrett says his upgrade runs “some 130XE software” although he doesn’t mention whether his upgrade performs 16K or 32K bank switching.

I suspect that all of these 256K upgrades were based on Claus Buchholz’s original article in BYTE, “The Quarter-Meg Atari,” but modified to perform 16K bank switching to make it compatible with the 130XE. I should stress that these upgrades are not completely 130XE compatible. The 130XE has the ability to control whether the 6502 or Antic (or both) sees the extra RAM banked through locations $4000 through $7FFF. This permits, for example, a graphics screen to reside in the Atari’s normal memory between $4000 and $7FFF while a RAMDISK is in operation. The above mentioned 256K upgrades forgo this feature for the ability to bank in the additional 128K of memory. In most cases, the screen memory is above location $7FFF and there is no problem. But programs that place graphics data between locations $4000 and $7FFF will not work properly. Similarly, some 800 or 800XL programs that utilize this memory area for graphics will not work properly unless the additional RAM is disabled (i.e. not using a RAMDISK).

For those of you have read Claus Buchholz’s article in BYTE and are comfortable with soldering or have a friend who will help you out (an Atari users group member, for example) Claus has prepared a special treat for us: A modification to his original article that uses 16K bank switching like the 130XE. It is 130XE compatible except as mentioned earlier. Claus writes:

“The procedure for this upgrade is basically the same as in the article except for the following points: If your Antic (U7) part number is CO21697, use the circuit of the figure [Figure 1], excluding the area inside the dotted lines. If it is CO12296, include the circuit inside the dotted lines. The circuit requires five connects to the PIA (U23). So, pins 12 through 16 must be bent up and connected to the circuit. The rest of the procedure is the same. Notice that this circuit has one more chip than the article’s circuit. This is the price of compatibility.

“With the 256K dynamic RAMs in your XL, be sure to wait at least ten seconds after turning the computer off. Otherwise it may not coldstart properly when you turn it back on. My original RAMdisk software doesn’t work with this new mod. You may download [the new version] from the Capital Hill Atari Owners’ Society BBS at 517-371-1106 or from the Castle Communications board at 517-371-4234. The source file is called QMEGXLD.SRC for Quarter-MEG XL Double. Also available is a RAMdisk program that sets up one single-density RAMdisk and leaves the XE-equivalent banks free for XE software. This is quite useful with BASIC XE, DOS 2.5, or the new Synapse software. Its name is QMEGXLS.SRC.

“I ask one thing in return for this information: Please pass it around to all your interested friends. Put it in your club’s library or on your favorite BBS. Encouraging software support of 256K will result in many interesting uses for it. Thank you and enjoy — Claus Buchholz.”

We owe a thousand thanks to Claus Buchholz and the C.H.A.O.S. users group of Lansing, Michigan. Figure 1 shows the parts list, the memory control register, and the schematic diagram.

Other upgrades: Inspired by Claus Buchholz’s article, David G. Byrd (1513 Commanche Drive, Las Vegas, NV 89109) has written a public domain article, “The Atari 800-Plus 256K,” which gives 288K total memory for the Atari 800.

Tiny Tek (Rt. 1, Box 795, Quinlan, TX 75474) still offers its 48/52K upgrade for the Atari 400. “Sandy” Sandberg of Azure Electronics (1020 Price St. “E,” Pismo Beach, CA 93449) writes of the Tiny Tek board “I have been installing these boards for customers for several years. Please inform your readers of this memory replacement board which makes the 400 actually have a larger memory than the 800 (unexpanded) due to the hidden 4K at $C000 to $CFFF.

In response to Robert Harren’s question on interfacing his Atari to a shortwave communications receiver (in the January 1986 “Atari Help”) Bob Allman and Patrick Campbell wrote to recommend an article published in the November 1985 issue of ANTIC, “Morse Code Receiver by Steve Stuntz.” Bob also suggests a look at the December 1985 issue of 73 for Radio Amateurs, which published another one-chip tone detector circuit for facsimile transmissions.

My thanks to all readers who wrote in to Help including R.J. Allman of M.A.S.H. (Millington, TN), Patrick Campbell (Birmingham, AL), Dan Garrett of Garrett Computing (Slidell, LA) Thomas Harker of ICD (Rockford, IL), John Kirkpatrick of Caledonia Enterprises (Sumter, SC), Dick Litchfield of STATUS (Virginia Beach, VA), S.D. Martin (Washington D.C.), Newell Industries (Wylie, TX), “Sandy” Sandberg (Pismo Beach, CA), and Jeffrey R. Wilson of SSI Software (Orem, UT).

PARTS LIST 

8  41256  256K-bit dynamic RAM (200ns or less) 
1 74LS1S3 Dual 4-to-1 multiplexer 
1 74LS139 Dual 2-to-4 decoder 
1    -    33 ohm, 1/4 watt resistor 

ADDITIONAL PARTS FOR ANTIC CO12296 

1 74LS158 Quad inverting 2-to-1 Multiplexer 
1 74LS393 Dual 4-bit counter 

DEFINITION OF MEMORY CONTROL REGISTER AT $D301 (54017 DECIMAL) 

XL MOD 

bit: 7 6 5 4 3 2 1 0 
     D a b E c d B R 

D=0 enables diagnostic ROM 
B=0 enables BASIC ROM 
R=1 enables OS ROM 
E=0 enables extended RAM 
abcd is 4-bit extended RAM bank # 
    - ranges from 4 to 15 
    - banks 12 to 15 are equivalent 
    to XE's banks 0 to 3 

130XE 

bit: 7 6 3 4 3 2 1 0 
     D   V C x y B R 

D=0 enables diagnostic ROM 
B=0 enables BASIC ROM 
R=1 enables OS ROM 
V=0 enables extended RAM for video 
C=0 enables extended RAM for CPU 
xy is 2-bit extended RAM bank # 
    - ranges from 0 to 3 

Q. Thanks for a great column in Computer Shopper. I have several questions about the 800XL:

1) I cannot get the MicroProse Solo Flight to load. The program will go as far as the title screen and freeze up. I’ve tried every combination of switch (down, up, same time) I can think of. That Atari Translator doesn’t do anything either.

2) I have a MicroPeripheral Corp. modem. The problem is I cannot locate any software that will access this modem. The only software that works is the one that came with it that I typed in. I have tried Amodem, HomeTerm, etc. and they all give me a modem error.

3) Last question: Is the keypad program for 11/85 for the external keypad that connects to the joystick ports?

H. Wayne Shiver
Powder Springs, GA

A. We didn’t have any trouble loading Solo Flight on our 800XL. You should only need to hold down the OPTION key while you turn on your computer (with the diskette in the disk drive). The translator disk is not needed. If you continue to have problems, it could be your diskette. Contact MicroProse for a replacement (10616 Beaver Dam Road, Hunt Valley, MD 21030, 301-667-1151).

Regarding your question about software for the MPP modem series, several programs that support this modem are in the public domain. These include MSCOPE MPP, which lets you download from CompuServe, VT100 Terminal Emulator, which features an 80-column, DEC-compatible display, and HomePak Customizer Disk which includes a special handler for the MPP modem. Your local users group may have these programs available, or a friend can download them for you from an Atari BBS. ANTIC (524 Second St., San Francisco, CA 94107) also offers these on diskette for $10.00 per program.

November’s Keypad program is indeed for the Atari CX85 keypad that plugs into the joystick ports. I have more information on this keypad planned for future months.


Q. The joystick ports on the XL are able to supply a +5vdc switched output to an external device. I remember reading this at some time, but do not remember the details; and whatever the publication, it is now long gone. Would you know how to control this output?

A. David Alan Hayes’ article, “Control Your Environment with the Atari 400/800,” (BYTE, July 1983) is exactly what you are looking for, and I have recommended this well-written article in the past. You can probably find it in your local library. David discusses using the four joystick ports on the Atari 400 or 800, but what is said also applies to the two joystick ports on the XL/XE units. (Incidentally, the XL and XE machines use the other two ports internally to control the switching in and out of RAM and ROM, and to specify the memory banks on the 130XE.)

Address Atari-related questions to:

Jeff Brenner “Atari Help”
c/o Computer Shopper
P.O. Box F
Titusville, FL 32781-9990
COMPUTER SHOPPER / APRIL 1986 / PAGE 45 

Applying The Atari

by Jeff Brenner

Still puzzled over how March’s PixMix program works? This month we’ll take a look at the machine language routines essential to this programs operation. Well also enter a program that gives us a disk-based BASIC language (and fixes up Atari’s Revision B BASIC to boot!). And, for all you CX-85 numeric keypad fans, this month’s column presents a special keypad driver that lets you use the keypad with some commercial software.

Did You Say 1040ST?

The Atari 1040ST should be in stores by the time you read this. Reaping the benefits of falling RAM chip prices, the 1040ST is an Atari 520ST-compatible computer with 1 megabyte (a megabyte is a million bytes) of memory, standard. The big news is, of course, the price: $999 suggested retail, which includes a monochrome monitor and an internal disk drive.

The 1040ST is essentially a 520ST with an additional 512K RAM. 520ST owners can get equivalent power by getting any of the 512K upgrades that are available (see article in this months Computer Shopper.) A few design changes have been made in the 1040ST: The case is deeper, since the disk drive and power supplies are internal. The internal disk drive is double-sided, and an RF modulator is built-in (for using the ST with a standard color television). Additionally, the operating system (TOS) has been completed and (hopefully) fully debugged and is now in ROM. This eliminates much of the boot-up waiting time, since TOS no longer needs to be loaded from disk. The newer 520ST models now contain TOS in ROM also. (Incidentally, the TOS ROM chips are currently being installed at Atari service centers for 520ST owners who presently boot TOS from disks.)

The 1040ST may prove to be the most serious threat to the Apple Macintosh yet. The standard 1M RAM (say goodbye to Ks) combined with a hard disk (to be released soon at under $700) gives this machine enormous potential for serious business applications. Atari may have still even greater plans for reaching the upscale markets; sources say Atari is investigating the user of National Semiconductor’s 32-bit “superchip,” the 32332, in a personal computer.

Reader Mail

Dear Jeff,

In the January 1985 column you had a short disk directory program that I’ve relied on ever since it was published. I put it on all my disks along with an AUTORUN.SYS command that boots the directory program. Eventually I was having trouble on a couple of my disks, because they contained as many as 20 or more short utility files. When the directory program booted and ran on power up, it displayed all the files, but the first few scrolled off the screen (I had to be quick to read them).

To solve this problem, I made a few small changes in your original directory program. Now when the program is booted on power up, or run from BASIC, it displays the disk files in two columns, instead of just on the left hand side of the screen. After it has listed the file names and free sectors, the program asks “RUN AGAIN (Y/N)?” If you press the “Y” key and hit RETURN, the program will prompt you to insert the disk (use only drive one) and press RETURN. When you do this, the screen clears and the program reruns, displaying you files in a double column.

If you answer the “RUN AGAIN” prompt with the “N” key and RETURN, the program erases itself from memory and leaves the file directory on the screen. I find this especially handy as a boot-up program, because it leaves me a list of disk files in plain view to reference when I type in my LOAD, ENTER or RUN command.

Keep up the great work and I hope this program will be of help to your other readers.

Nicholas J. Worth
Heber, AZ

A. I’m sure many readers will appreciate your modification. A holographic sticker is on its way to you for your contribution.

Those readers who want the directory program to RUN when a disk is booted, use the SETUP.COM utility on DOS 2.5 to automatically run a BASIC program utility. See Program 1. Next month I’ll print a short listing that creates this AUTORUN.SYS file.

Dear Jeff,

One thing I do about Computer Shopper’s microprint listings is to enlarge them to legible size on an enlarging photocopier (lots of them around.) This also works well for visually impaired folks, by successively copying the enlargement to a size they can read.

Paul Sentner
Pittsburgh, PA

A. Great idea! thanks for sharing it.

Dear Jeff,

We’ve developed a design for business software that differs from traditional designs in two ways. First, it meets a list of objections we compiled from a survey of operators of small businesses who had investigated computers but were not presently using one. Secondly, because we eliminated many features which were of no value to this group, all design specs are increased dramatically — application speed, functions, flexibility, friendliness, and especially capabity, We developed the design to sell to software developers and manufacturers. Because of its low cost, availability, and to prove the design would work on any system, we chose the 64K Atari w/1050 drive for our demo system. A byproduct of all this is that we have a program for Atari computers which accomplishes the design goals mentioned. I enclose a booklet documenting the comparative advantages of the MICROMOD program for a user seeking utility from a file manager/word processor. There are not enough of these customers using Ataris to make mass marketing feasible, but we’d like to make it available to those who are.

Steve Boduc
MicroMiser Software
Orlando, FL

A. I’m mentioning your product because of the relative scarcity of true business-dedicated programs available for the Atari. Readers should be aware that MicroMiser calls MICROMOD an Integrated Modular Business System that is not suitable for the hobbyist (as is HomePak and SynFile), but rather for business persons “seeking utility only.” While the specs that MicroMiser sent me look good, I have not seen the actual program in use and thus cannot give an evaluation of its performance. The price is $39.95. Those wanting more information should write to MicroMiser Software, 1635-A Holden Ave., Orlando, FL 32809.

Newsletters

A well designed newsletter was in the mail this month from H.A.C.E., the Houston Atari Computer Enthusiasts (P.O. Box 562, Katy, TX 77492, BBS: 713-644-6400). If your users group publishes a newsletter, send it in and let me know if you participate in a newsletter exchange program. In this way, your group will be able to swap newsletters with other groups reading this column. It’s truly interesting to see the Atari newsletters of groups from other parts of the country, Canada and beyond, and I highly recommend that users’ groups participate in a newsletter exchange.

Prizes

Cartridge games from Epyx and Sega are being sent to Ricky Freeman, for his Joystick Tester published in the March 1985 issue, and to David Garvin, for his printer utilities published in the December 1985 issue. More prizes will be given away for the best contributions of 1986, and hopefully I’ll have even more room this year to print readers’ contributions.

For April I have a copy of WSI’s 360-page Atari XL User’s Handbook ($15.95, Weber Systems Incorporated, 8437 Mayfield Road, Cleveland, OH 44026) just waiting to be given away to a lucky reader in our first random (as in RND(0)) drawing. Anyone who writes with a question, comments, contribution, order, etc. before 4/31/86 will automatically be entered in the drawing, or you can simply send me a postcard with your name and address.

New Products

Still looking for a modem? Atari’s new XM301, might be just the answer. The XM301 is an auto-dial, auto-answer, 300-baud modem that connects directly to the serial port (or daisy chains with the disk drive) and requires no interface. Included is XE-Term, an excellently designed communications program that supports the 130XE’s additional memory. At $49.95 suggested retail, XM301/XE-Term package is a great buy. Contact: Atari Corp., 1196 Borregas Ave., Sunnyvale, CA 94086.

Your Atari 400/800/XL/XE can be just like its big brother ST with a mouse from Zobian Controls. Actually, it’s called the “RAT” and includes a mouse-controlled drawing program and a routine that lets your “RAT” move your cursor. A booklet shows you how to use the mouse in your own BASIC programs, but be advised that it won’t work with commercial software not designed specifically for it. The “RAT” is about $100. Contact: Zobian Controls, P.O. Box 6406, Wyomissing, PA 19610.

Atari Writer Plus Is Here

Has PaperClip met its match? Months after Atari’s press announcement of AtariWriter Plus, I’ve finally had a chance to try out the new word processor, and my initial impressions are highly positive. AtariWriter Plus has all the features that made the original AtariWriter popular, plus a lot more: word alphabetization and counting, double column printing (on any printer), “insert” and “typeover” modes, the ability to write a customized printer driver fot virtually any printer, an 80-column editor (expandable up to 249 columns), a mail merge, and a 36,000-word spelling checker on a separate diskette. A 130XE version of AtariWriter Plus is included on the reverse side of the main diskette. The two-diskette package is supported by a 66-page manual. Look for a formal review in an upcoming Computer Shopper issue. Contact: Atari Corp., 1196 Boregas Ave., Sunnyvale, CA 94086.

PixMix — How It Works

Last month’s feature program, the PixMix Puzzle Machine, was built around five machine language routines that enable the program to function quickly and effectively. The assembly listings of these routines are being listed this month for those of you who wish to study them, or to incorporate them into your own programs.

When PixMix loads the digitized watch picture (or any screen) from disk or cassette, it stores the data in a string (SCR$), rather than directly in screen memory. This allows the program to have continuous access to the original picture data, regardless of what is done to the picture on the screen (i.e. scrambling). Once the data is loaded into the string, the “STRING TO SCREEN” routine is used to transfer the data to the screen. leaving the contents of the string intact. See Program 2.

The “GET SCREEN PIECE” and “PUT SCREEN PIECE” routines allow high-speed manipulation of the graphics screen. The “GET” routine picks up a 64 by 32 pixel area and stores it in P$. Conversely, the “PUT” routine transfers this area from P$ to a specified section of the screen. The two routines together allow PixMix to “mix up the pieces” of the screen, and enable you to pick up screen pieces and move them around with your joystick. See Programs 3 and 4.

Pressing the space bar while solving a puzzle lets you see how the completed puzzle should look. This feature involves the “STRING/SCREEN SWAP” routine. Essentially, this routine simply exchanges the data saved in SCR$ (the original screen image) with the scrambled image on the screen. When the space bar is released, the swap routine is called again, bringing the scrambled image back to screen, and the completed puzzle image back to SCR$. See Program 5.

When you solve the puzzle and press the START key, how does PixMix know you’ve solved the puzzle correctly? Once again the program refers to the original image data stored in SCR$, but this time through the “STRING/SCREEN COMPARE” routine. If the screen contents and the string data do not match, the puzzle has not been solved and location 208 ($D0) is set to one to flag this to the BASIC program. PixMix then generates its ominous, disapproving hum. On the other hand, if the screen does match the string, the flag is left at zero and the congratulatory tune is played by the BASIC program. See Program 6.

These five routines are the vital organs of PixMix. BASIC serves as glue to hold it all together. PixMix serves as a good example of the power and flexibility of the BASIC/machine language combination.

Operating System Keypad Driver

Ever since the CX-85 keypad drivers for BASIC programming were published in the July and August 1985 issues, I’ve been inundated with requests for drivers to work with just about every commercial software product imaginable. Unfortunately, finding a place in memory for the keypad driver is not easy; each commercial program would have to be looked at as an individual case. But XL and 130XE owners will be happy to know that the extra RAM in your machines (“underneath” the OS ROM”) is the ideal place for such a keypad driver. This is precisely where we install this month’s keypad driver.

Type in the “CX-85 Driver Creator” using Program Perfect and SAVE the program to diskette. If you’re not using Program Perfect, recheck your typing several times, since one small mistake in the data statements can blow the whole program. See Program 7.

Now place a formatted diskette (containing DOS files) into the drive and RUN the program. You’ll be instructed to press the START key to write an AUTORUN.SYS file — when you’re ready, press it.

When the “COMPLETED” message is printed, you’re finished. You now have keypad driver that takes up none of your Atari’s normal memory and will work with some commercial software.

Using The New Driver

The best way to test out the new driver is by booting up a BASIC disk. Turn off your computer and insert the keypad driver diskette into the disk drive. Now turn on the computer. If everything is O.K. you’ll soon get an “INSERT PROGRAM DISKETTE AND PRESS SELECT” prompt. Replace the keypad driver with a regular BASIC diskette and press SELECT. The computer will reboot, and when finished, your Atari will work normally with one exception: It will now respond to a CX-85 keypad plugged into joystick port 2. Joystick port 2 was chosen instead of port 1 since many readers wrote that they like to keep a joystick, plugged into port 1.

Using Commercial Software

To use the keypad with a commercial product, boot up the keypad driver diskette as described before and remove the diskette. Now place the program you want to load into the drive. If BASIC must be disabled, then hold the OPTION key down while you press SELECT. Otherwise, just press SELECT. The Atari will simulate being turned off and then on and the program should load.

In most instances, you should be able to use the keypad with a commercial software product, but there are exceptions — namely, some heavily protected software and programs that read the Atari’s keyboard register directly, bypassing location 764. In these cases, the program will either not run, or will not respond to the keypad.

I’m asking readers who try this keypad driver with commercial programs to please write and let me know which of your programs are compatible with the driver and which aren’t (you could even jot the names down on the postcard if you’re entering our drawing!) I’ll report the findings in a future column.

How It Works

When the keypad driver is loaded into an XL or XE, it transfers the Atari’s ROM operating system (OS) into the RAM that lies underneath it. Next, the actual keypad decoding routine is loaded into the Atari’s international character set memory at $CC00 to $CCD3. The Atari’s actual vertical blank interrupt routine is then rerouted to execute the keypad routine. This is the beauty of having a RAM OS — we can add extensions to the actual Atari OS without having to worry about vectors that might be utilized or changed by the next program loaded in. None of the application RAM is used, and thus the keypad driver is transparent to most programs.

The next step is to display the introductory message on the screen and wait for the SELECT key to be pressed. When it’s pressed, a jump is made to the Atari’s cold start vector (COLDSV, $E477) so that the next diskette can be booted. Necessary portions of the OS are changed before jumping to COLDSV to prevent the ROM OS from being reenabled and to prevent the COLDSV routine from clearing the RAM OS when the rest of the memory is zeroed.

Next Month

We’ll take a look at the assembly listing for the keypad routine, plus we’ll enter a personal budget program, designed in response to readers’ requests.

Readers’ questions, comments and contributions are welcome. Please enclose a self-addressed, stamped envelope (SASE) for a personal reply.

A diskette of the programs listed in this months column is available from the author for $7.00, postpaid. Please make checks payable to “Jeff Brenner” and specify your disk drive model.

Program Perfect” is a utility used to check for typing errors while entering programs from this column. Readers may send $5.00 for a diskette or a SASE for a listing of this program. Address all correspondence to:

Jeff Brenner
“Applying The Atari 4/86”
c/o Computer Shopper
PO Box F Titusville, FL 32781-9990
Improved Directory Program 

1 REM DIRECTORY PROGRAM MOD. BY N. WORTH 
2 DIM FILE$(17),R$(1) 
3 OPEN #1,6,0,"D:*.*" 
4 INPUT #1,FILE$ 
5 PRINT FILE$;CHR$(32);CHR$(32); 
6 IF FILE$(5,8)="FREE" THEN 8 
7 GOTO 4 
8 CLOSE #1 
9 ? :? :? "RUN AGAIN (Y/N):INPUT R$ 
10 IF R$="Y" THEN ? :? "INSERT DISK AND PRESS RETURN";:INPUT 
11 IF R$="N" THEN ? CHR$(125):NEW 
12 GOTO 3 

PROGRAM 1 
STRING TO SCREEN ROUTINE 

10  *=$600 ; RELOCATABLE 
20 ; STRING TO GR.8 SCREEN 
30 ; (C)1986 JEFF BRENNER 
40 ; FORM: A=USR(ADR(STS$),ADR(A$)) 
50  PLA 
60  PLA 
70  STA $CD  ; SAVE STRING ADR 
80  PLA 
90  STA $CC 
0100  LDA 88 
0110  STA $CE ; SAVE SCREEN ADR 
0120  LDA 89 
0130  STA $CF 
0140  LDX #192  ; 192 LINES 
0150 LOOP2 LDY #39 ; 40 BYTES/LINE 
0160 LOOP LDA ($CC),Y 
0170  STA ($CE),Y 
0180  DEY 
0190  BPL LOOP 
0200  CLC 
0210  LDA $CC 
0220  ADC #40 
0230  STA $CC 
0240  LDA $CD 
0250  ADC #0 
0260  STA $CD 
0270  CLC 
0280  LDA $CE 
0290  ADC #40 
0300  STA $CE 
0310  LDA $CF 
0320  ADC #0 
0330  STA $CF 
0340  DEX 
0350  BNE LOOP2 
0360  RTS 
0370  .END 

PROGRAM 2 
GET SCREEN PIECE ROUTINE 

10  *=$600 ; RELOCATABLE 
20 ; GET BLOCK ROUTINE 
30 ; (c)1986 JEFF BRENNER 
40 ; TRANSFER SECTION OF GR.8 SCREEN TO STRING 
50 ; (FOR 8 BYTE BY 32 LINE SECTION) 
60 ; FORM A=USR(GET,ADR(P$),SCREEN) 
70 ; DIM P$(320), P$ STORES DATA 
80 ; SCREEN=SCREEN LOC. TO START GET 
90  PLA 
0100  PLA 
0110  STA $CD  ; SAVE STRING ADR 
0120  PLA 
0130  STA $CC 
0140  PLA 
0150  STA $CF  ; SAVE SCREEN ADR 
0160  PLA 
0170  STA $CE 
0180  LDX #32 
0190  LDX #32  ; VERTICAL BYTES (LINES) FOR PIECE 
0190 AGAIN LDY #7  ; * HORIZ BYTES FOR PIECE-1 
0200 LOOP1 LDA ($CE),Y ; GET BYTE FROM SCREEN 
0210  STA ($CC),Y ; STORE IN STRING 
0220  LDA #0 
0230  STA ($CE),Y ; ERASE BYTE OF SCREEN 
0240  DEY 
0250  BPL LOOP1 
0260  CLC 
0270  LDA $CE 
0280  ADC #40     ; NEXT SCREEN LINE 
0290  STA $CE 
0300  LDA $CF 
0310  ADC #0 
0320  STA $CF 
0330  LDA $CC 
0340  ADC #8      ; * HORIZ BYTES PER PIECE 
0350  STA $CC 
0360  LDA $CD 
0370  ADC #0 
0380  STA $CD 
0390  DEX 
0400  BNE AGAIN 
0410  RTS 
0420  .END 

PROGRAM 3 
PUT SCREEN PIECE ROUTINE 

10  *=$600 ; RELOCATABLE 
20 ; PUT BLOCK ROUTINE 
30 ; (c) 1986 JEFF BROWNER 
40 ; TRANSFER STRING TO SECTION OF GR.8 SCREEN 
50 ; (8 BYTE BY 32 LINE SECTION) 
60 ; FORM A=USR(PUT,ADR(P$),SCREEN) 
70 ; DIM P$(320), P$ STORES DATA 
80 ; SCREEN=SCREEN LOC. TO START PUT 
90  PLA 
0100  PLA 
0110  STA $CD  ; SAVE STRING ADR 
0120  PLA 
0130  STA $CC 
0140  PLA 
0150  STA $CF  ; SAVE SCREEN ADR 
0160  PLA 
0170  STA $CE 
0180  LDX #32  ; VERTICAL BYTES (LINES) FOR PIECE 
0190 AGAIN LDY #7  ; * HORIZONTAL BYTES FOR PIECE-1 
0200 LOOP1 LDA ($CC),Y 
0210  STA ($CE),Y 
0220  DEY 
0230  BPL LOOP1 
0240  CLC 
0250  LDA $CE 
0260  ADC #40   ; NEXT SCREEN LINE 
0270  STA $CE 
0280  LDA $CF 
0290  ADC #0 
0300  STA $CF 
0310  LDA $CC 
0320  ADC #8    ; * HORIZONTAL BYTES FOR PIECE 
0330  STA $CC 
0340  LDA $CD 
0350  ADC #0 
0360  STA $CD 
0370  DEX 
0380  BNE AGAIN 
0390  RTS 
0400 .END 

PROGRAM 4 
STRING/SCREEN SWAP ROUTINE 

10  *=$600 ; RELOCATABLE 
20 ; STRING/SCREEN SWAP 
30 ; SWAPS 7680 BYTES OF STRING W/GR.8 SCREEN 
40 ; FORM: A=USR(ADR(SWAP$),ADR(A$)) 
50 ; WHERE SWAP$ IS THIS ROUTINE 
55 ; AND A$ IS STRING TO SWAP 
60  PLA 
70  PLA 
80  STA $CD  ; SAVE STRING ADR 
90  PLA 
0100  STA $CC 
0110  LDA 88 
0120  STA $CE ; SAVE SCREEN ADR 
0130  LDA 89 
0140  STA $CF 
0130  LDX #192 ; 192 LINES 
0160 LOOP2 LDY 439 ; 40 BYTES/LINE 
0170 LOOP LDA ($CC),Y ; GET BYTE OF STRING 
0180  PHA          ; SAVE IT 
0190  LDA ($CE),Y  ; GET BYTE OF SCREEN DATA 
0200  STA ($CC),Y  ; STORE IN STRING 
0210  PLA          ; RETRIEVE STRING BYTE 
0220  STA ($CE),Y  ; STORE IN SCREEN MEM 
0230  DEY 
0240  BPL LOOP 
0230  CLC 
0260  LDA $CC 
0270  ADC #40  ; NEXT STRING "LINE" 
0280  STA $CC 
0290  LDA $CD 
0300  ADC #0 
0310  STA $CD 
0320  CLC 
0330  LDA $CE  
0340  ADC #40  ; NEXT SCREEN LINE 
0330  STA $CE 
0360  LDA $CF 
0370  ADC 40 
0380  STA $CF 
0390  DEX 
0400  BNE LOOP2 
0410  RTS 
0420  .END 

PROGRAM 5 
STRING/SCREEN COMPARE ROUTINE 

10  *=$600 ; RELOCATABLE 
20 ; COMPARE STRING W/GR.8 SCREEN 
30 ; (C)1986 JEFF BRENNER 
40 ; FORM: A=USR(ADR(SSC$)),ADR(A$)) 
50 ; WHERE SSC$ IS THIS ROUTINE 
60 ; AND A$ IS STRING TO COMPARE 
70 ; RESULTS IF PEEK(208)>0, NO MATCH 
80  PLA 
90  PLA 
0100  STA $C0 
0110  PLA 
0120  STA $CC 
0130  LDA 40 
0140  STA 400 ; CLEAR 400 
0150  LDA 88 
0160  STA $CE ; SAVE SCREEN ADR 
0170  LDA 89 
0180  STA $CF 
0190  LDX #192 ; 192 LINES 
0200 LOOP2 LDY #39  ; 40 BYTES/LINE 
0210 LOOP LDA($CC),Y;GET STRING VALUE 
0220  CMP ($CE),Y;COMP. W/SCREEN VALUE 
0230  BNE END ; IF NOT EQUAL, END 
0240  DEY 
0250  BPL LOOP 
0260  CLC 
0270  LDA $CC 
0280  ADC #40 ; NEXT STRING "LINE" 
0290  STA $CC 
0300  LDA $CD 
0310  ADC #0 
0320  STA $CD 
0330  CLC 
0340  LDA $CE 
0350  ADC #40 ; NEXT SCREEN LINE 
0360  STA $CE 
0370  LDA $CF 
0380  ADC #0 
0390  STA $CF 
0400  DEX 
0410  BNE LOOP2 
0420  RTS 
0430 END INC $D0 ; SET $D0 TO 1 
0440  RTS 
0450  .END 

PROGRAM 6 
CX-85 DRIVER CREATOR 

HTJ 10 REM CX-85 NUMERIC KEYPAD DRIVER CREATOR 
KGJ 20 REM COPYRIGHT 1986 JEFF BRENNER 
TPJ 30 PRINT CHR$(125);"INSERT FORMATTED DISKETTE INTO DRIVE" 
PNJ 40 PRINT :PRINT "PRESS <START> TO WRITE AUTORUN FILE." 
LQJ 50 IF PEEK(53279)<>6 THEN 50 
FAJ 60 PRINT "CREATING AUTORUN.SYS...":OPEN #3,8,0,"D:AUTORUN.SYS" 
TFJ 70 FOR I=1 TO 402:READ N:PUT #3,N:NEXT I 
YOJ 80 CLOSE #3 
MUJ 90 PRINT "COMPLETED.":END 
QAJ 100 DATA 255,255,0,6,167,6,120,169,0,141,14,212 
RKJ 110 DATA 174,1,211,160,0,185,0,192,206,1,211,153 
TOJ 120 DATA 0,192,142,1,211,200,208,241,238,13,6,238 
UHJ 130 DATA 19,6,173,13,6,240,14,201,208,208,226,169 
RUJ 140 DATA 216,141,13,6,141,19,6,208,216,206,1,211 
SFJ 150 DATA 88,96,169,0,141,14,212,162,5,141,10,212 
DRJ 160 DATA 202,208,253,169,76,141,138,194,169,0,141,139 
JTJ 170 DATA 194,169,204,141,140,194,169,146,141,133,196,169 
YTJ 180 DATA 6,141,134,196,160,9,185,85,204,153,220,194 
EDJ 190 DATA 136,16,247,160,26,185,94,204,153,169,196,136 
BHJ 200 DATA 16,247,169,64,141,14,212,160,79,185,132,204 
UUJ 210 DATA 56,233,32,9,128,145,88,136,16,243,173,31 
WGJ 220 DATA 208,41,2,208,249,76,119,228,173,1,211,141 
DJJ 230 DATA 255,207,32,218,196,169,254,141,1,211,173,255 
ICJ 240 DATA 207,141,1,211,96,0,226,2,227,2,0,6 
NZJ 250 DATA 224,2,225,2,56,6,0,204,211,204,174,17 
VUJ 260 DATA 208,240,6,202,142,82,204,240,47,174,121,2 
WVJ 270 DATA 236,84,204,208,5,173,82,204,208,34,173,83 
XYJ 280 DATA 204,240,5,206,83,204,240,24,238,82,204,142 
RYJ 290 DATA 84,204,238,83,204,173,3,210,201,1,240,2 
AXJ 300 DATA 162,16,189,64,204,141,252,2,104,168,104,170 
MTJ 310 DATA 104,64,52,24,29,27,35,51,53,48,43,31 
IDJ 320 DATA 30,26,50,34,12,14,28,155,0,0,0,169 
QHJ 330 DATA 4,133,1,169,0,76,121,204,169,160,133,6 
TQJ 340 DATA 173,0,160,73,255,141,0,160,205,0,160,208 
SZJ 350 DATA 9,73,255,141,0,160,169,192,133,6,96,160 
MZJ 360 DATA 0,153,0,6,200,208,250,76,3,195,67,88 
MNJ 370 DATA 45,56,53,32,75,69,89,80,65,68,32,68 
LYJ 380 DATA 82,73,86,69,82,32,45,32,40,67,41,49 
MQJ 390 DATA 57,56,54,32,74,46,32,66,82,69,78,78 
MPJ 400 DATA 69,82,73,78,83,69,82,84,32,80,82,79 
MNJ 410 DATA 71,82,65,77,32,68,73,83,75,69,84,84 
MFJ 420 DATA 69,32,65,78,68,32,80,82,69,83,83,32 
DUZ 430 DATA 83,69,76,69,67,84 

PROGRAM 7 
COMPUTER SHOPPER / APRIL 1986 / PAGE 46 

Atari Help

by Jeff Brenner

In last month’s “Atari Help” column, I listed several manufacturers of memory expansion products for the 800XL. I inadvertently omitted Newell Industries (600 E. Hwy. 78, #602, Wylie, TX 75098). Newell also produces a 256K upgrade for the 800XL ($99.95 complete, or $49.95 without RAM chips). In addition to those readers credited in last month’s column for contributing information on the memory expansion topic, let me also thank Danny L. Becker (APO NY) and Karel C. Sysala (Los Angeles, CA), whose letters arrived too late to be included in that issue.

XL “Video Smears”

Q. I write in response to the letter in “Atari Help” from Robert Davis of Yorba Linda, California, printed in the December 1985 Computer Shopper.

I am having the same trouble using a monitor with my Atari 800XL: namely, a “video smear” such that characters appear blurred. I switched monitors; same effect. Monitor works beautifully on a friend’s Apple. Switched cables; no improvement.

Is this an inherent defect in the 800XL series, then? I was able to try a new 130XE and found that characters are much sharper, I was planning to add Omniview to my XL, but am no longer interested: things are bad enough with 40 columns.

I’d appreciate other readers’ experiences.

Alan McPherron
Pittsburgh, PA

A. Several readers have commented about an apparent blurred Atari 800XL image and in the past I have suggested checking cables, switching monitors, etc. But I am beginning to suspect that the 800XL itself may be at fault. (Apparently, some 800XLs, 1200XLs and 600XLs suffer from the blurred image, but not the 130XE). One theory is that a pixel shift, introduced by the earlier GTIA chip, is responsible for the blurred image. Or had Atari used inferior components in its financially troubled days? An Atari spokesperson said she did not know of any problem. Hopefully we’ll hear from other readers on this topic.

Data Files

Q. In experimenting with the DOS files, I tried making a complete record with several strings. What I mean is linking strings together to make one long string: Ex. LET REC$(1,20)=NAME$, LET ADDR$=REC$(21,40), etc. This seemed to have worked but I got garbage in the blanks. I tried filling the string with blanks before filling it and it still didn’t work. How do I accomplish one record from several prompts, and is there a way to view the records in a data file? I’ve worked with FMS on Data General and we could view the records in the file to verify them.

David Bucci
N. Kingsville, OH

A. You should not get garbage (unwanted data) in the blanks if you properly cleared the main string before assigning the smaller strings to it. I assume that NAME$ and ADDR$ are obtained through normal screen input (i.e. INPUT ADDR$) and are not the source of the garbage. Here’s a simple and fast technique that takes advantage of the way Atari BASIC handles its string memory to clear the main string:

REC$=CHR$(32):REC$(MAX)=CHR$(32):REC$(2)=REC$ 
where MAX is the total number of characters that REC$ is dimensioned for. The entire string will be filled with character 32, the space character, and subsequent additions to the string will be surrounded by the blank spaces.

To view the records in a data file, you could have your main program read them from disk in the same way they were written (i.e. INPUT #2;TEMP$:PRINT TEMP$;). The maximum number of characters you should read in at one time from a diskette file should not exceed 128 characters. (While up to 256 bytes can be read at a time without an error, anything over 128 bytes will be stored in page 6 of memory, which might upset any machine language routines that you may have stored there.) The best way to do this is to write the main string to disk in chunks of 128 bytes at a time into a temporary string which you can transfer to the main string:

REC$(I,I+127)=TEMP$. 

Another way you can examine a data file is with DOS. Specify the COPY FILE option. When you’re asked “FROM, TO?” type the name of your data file, followed by a comma and an “E:” (i.e. DATAFILE,E:). This will transfer the diskette file to the screen editor.

For a good example of creating and using data file, take a look at the Mailing List listing in the June 1985 “Applying The Atari.”

Q. A friend has damaged his BASIC cartridge for an Atari 1200XL. Is there any way I can copy the BASIC from my 800XL to disk for him to use. My machine runs the “C” BASIC.

William R. Pew
Everett, WA

A. The program listed under the “DISK-BASED BASIC” heading will allow you to create a diskette which loads the actual BASIC language when booted. It can be used on any 8-bit Atari with a minimum of 48K RAM. (DISK-BASED BASIC will be included on this month’s “Applying The Atari” diskette). See Program 1.

Type in the program and save it to disk. Place a formatted diskette (containing DOS files) into the drive and run the program. When you press START, the program will write a special AUTORUN.SYS loader to your diskette, and will then save the code for the BASIC ROM in your machine. If you own revision B of Atari BASIC, the program will automatically convert the data into revision C, to eliminate the dreaded revision B bugs.

When it’s completed, turn off your computer. Now unplug your BASIC cartridge (or hold down the OPTION key on the 800XL/130XE) and turn the computer on again. The diskette will automatically load the BASIC language into your Atari’s RAM, and when the READY prompt appears, you have a RAM-based BASIC.

Once your BASIC is in RAM, you can have some fun with it. Experienced users can examine the memory in locations 40960 through 49151, find where the BASIC commands reside and change them to whatever is desired (the last character of each command must be an inverse video character — bit 7 set — and any replaced commands should be the same number of characters in length as the original command). Just be careful where you poke, since you can easily crash the BASIC or make it function improperly. When you run the “CHANGE THE READY PROMPT” program with your RAM-based BASIC, you can change the familiar “READY” prompt to your nickname, or whatever you want. See Program 2.

The “Disk-Based BASIC” loader has been specially designed to permit the SYSTEM RESET key to operate normally. Additionally, DOS 2 and DOS 2.5 users can specify the B. RUN CARTRIDGE option when in DOS and BASIC will be executed, despite the fact that no cartridge is in place!

For those interested in how the RAM BASIC is implemented, two difficulties had to be overcome to make it function properly. First, whenever the RESET key is pressed, a GRAPHICS 0 screen is set up at the top of free RAM. Normally, when the BASIC ROM is in place, the screen is set up directly below the BASIC ROM, at the top of RAM (in systems with 40K or more RAM). But when BASIC is in RAM, this screen is set upon top of part of our BASIC language itself! Unless the disturbed BASIC code is replaced, our BASIC routine is likely to crash.

To solve this problem, a special SYSTEM RESET handler was put into place which automatically replaces 1K of the damaged BASIC code. The result is 1K less of free BASIC RAM (MEMLO is reset upon initialization to provide the 1K of memory for our use) but we are able to use the RESET key normally.

The second difficulty involves DOS. When you call up DOS and choose the “RUN BASIC” option, DOS checks if a cartridge is installed and would normally respond “NO CARTRIDGE” is our RAM-based BASIC is there instead. To get around this, you could press the RESET key to return to BASIC, but if you’re using DOS 2 or DOS 2.5, you’ll be able to use the “RUN CARTRIDGE” option. An interrupt routine is set up that automatically modifies DOS 2 or DOS 2.5 when it is called up to trick it into believing a cartridge is in place.

The assembly listing of the BASIC loader will be listed here next month.

Requests

If you have been looking for a particular product that others may also be looking for, send me a letter.

Address Atari-related questions to: Jeff Brenner, “Atari Help”, c/o Computer Shopper, P.O. Box F, Titusville, FL 32781-9990.

DISK-BASED BASIC 

YCJ 10 REM DISK-BASED BASIC INITIALIZATION 
KGJ 20 REM COPYRIGHT 1986 JEFF BRENNER 
RDJ 30 DIM BASIC$(8192),S$(35),CIO$(7):BASIC$(8192)=CHR$(0) 
KFJ 40 FOR I=1 TO 7:READ N:CIO$(I,I)=CHR$(N):NEXT I 
GXJ 50 FOR I=1 TO 35:READ N:S$(I,I)=CHR$(N):NEXT I 
QVJ 60 PRINT CHR$(125);"THIS PROGRAM CREATES AN AUTORUN.SYS" 
NXJ 70 PRINT "FILE ON THE DISK, ALONG WITH A FILE," 
XFJ 80 PRINT CHR$(34);"BASIC";CHR$(34);", WHICH CONTAINS THE BASIC" 
QEJ 90 PRINT "LANGUAGE.":PRINT :PRINT "INSERT BLANK FORMATTED DISK INTO DRIVE" 
XTJ 100 POKE 85,7:PRINT "PRESS <START> TO CREATE FILE" 
PCJ 110 IF PEEK(53279)<>6 THEN 110 
HJJ 120 PRINT :PRINT "CREATING AUTORUN.SYS..." 
THJ 130 CLOSE #1:OPEN #3,8,0,"D:AUTORUN.SYS" 
WRJ 140 RESTORE 240:FOR I=1 TO 309:READ N:PUT #3,N:NEXT I:CLOSE #3 
JGJ 150 A=USR(ADR(S$),ADR(BASIC$)):IF ASC(BASIC$(2272))=202 THEN GOSUB 500 
MUJ 160 POKE 881,0:OPEN #3,8,0,"D:BASIC":PRINT "SAVING BASIC..." 
RSJ 170 H=INT((ADR(BASIC$)-6)/256):L=ADR(BASIC$)-6-H*256:POKE 884,L:POKE 885,H 
GOJ 180 POKE 888,0:POKE 889,32:POKE 882,11:I=USR(ADR(CIO$),48) 
HQJ 190 CLOSE #3:PRINT "FINISHED.":END 
QYJ 200 DATA 104,104,104,170,76,86,228 
EEJ 210 DATA 104,104,133,205,104,133,204,169,0,133,206,169 
EMJ 220 DATA 160,133,207,160,0,177,206,145,204,200,208,249 
YOJ 230 DATA 230,205,230,207,166,207,224,192,208,239,96 
UPJ 240 DATA 255,255,215,5,255,6,165,12,141,108,6,165 
UGJ 250 DATA 13,141,109,6,169,107,133,12,169,6,133,13 
UHJ 260 DATA 162,0,142,68,2,232,134,9,169,160,133,106 
OLJ 270 DATA 32,175,6,78,197,2,160,3,140,114,3,200 
VZJ 280 DATA 140,122,3,169,220,141,116,3,169,6,141,117 
RIJ 290 DATA 3,162,48,32,86,228,169,7,141,114,3,169 
VTJ 300 DATA 250,141,116,3,169,159,141,117,3,206,121,3 
UUJ 310 DATA 32,86,228,14,197,2,169,119,141,252,2,173 
NVJ 320 DATA 231,2,133,2,141,229,6,173,232,2,133,3 
TPJ 330 DATA 141,230,6,24,105,4,141,232,2,169,214,141 
WIJ 340 DATA 250,191,169,6,141,251,191,162,4,160,0,185 
QSJ 350 DATA 0,188,145,2,200,208,248,230,3,238,86,6 
URJ 360 DATA 202,208,240,169,188,141,86,6,208,44,32,0 
QEJ 370 DATA 0,169,160,133,106,32,175,6,32,200,6,24 
OAJ 380 DATA 105,4,141,232,2,162,4,160,0,177,2,153 
WGJ 390 DATA 0,188,200,208,248,230,3,238,134,6,202,208 
UMJ 400 DATA 240,169,188,141,134,6,173,34,2,141,254,6 
QOJ 410 DATA 173,33,2,141,293,6,162,6,160,231,169,6 
PHJ 420 DATA 32,92,228,76,0,160,169,3,141,98,3,169 
TTJ 430 DATA 228,141,100,3,169,6,141,101,3,169,12,141 
QYJ 440 DATA 106,3,162,32,76,86,228,173,229,6,133,2 
OBJ 450 DATA 141,231,2,173,230,6,133,3,96,32,200,6 
MRJ 460 DATA 76,80,6,68,58,66,65,83,73,67,155,83 
SUJ 470 DATA 0,0,173,249,38,201,253,208,5,206,249,38 
VGJ 480 DATA 208,10,173,89,39,201,253,208,3,206,89,39 
OQJ 490 DATA 76,0,0,224,2,225,2,215,5 
MZJ 500 PRINT "CONVERTING REV.B TO REV.C BASIC..." 
BRJ 510 BASIC$(2272)=CHR$(234):BASIC$(2273)=CHR$(240):BASIC$(2274)=CHR$(17) 
AQJ 520 BASIC$(2275)=CHR$(234):BASIC$(6954)=CHR$(0) 
DCZ 530 FOR J=8180 TO 8186:BASIC$(J)=CHR$(0):NEXT J:RETURN 

PROGRAM 1 
CHANGE THE "READY" PROMPT 

ELJ 10 REM CHANGE THE "READY" PROMPT 
RVJ 20 M=48504:IF PEEK(48498)=169 THEN M=48493 
YDJ 30 DIM A$(6) 
GAJ 40 PRINT "WHAT'S THE NEW PROMPT";:INPUT A$ 
NMJ 50 IF LEN(A$)>5 THEN PRINT "5 CHARACTERS MAXIMUM":GOTO 40 
UUJ 60 IF LEN(A$)<5 THEN FOR I=LEN(A$)+1 TO 5:A$(I,I)=CHR$(32):NEXT I 
CBJ 70 FOR I=1 TO 5:POKE M-I,ASC(A$(I,I)):NEXT I 
MAZ 80 PRINT "PROMPT HAS BEEN CHANGED!" 

PROGRAM 2 
COMPUTER SHOPPER / JUNE 1986 / PAGE 75 

Applying The Atari

by Jeff Brenner

This month’s feature program is BudgetMate, our longest “Applying The Atari” program ever. The program was designed specifically in response to requests (in some cases pleadings and threats) from readers for a home budget program. Well also take a look at some new products and reader mail.

New Products

In the March 1986 column we learned about all of the latest memory expansion products available for the Atari 800XL. For Atari 800 owners, Magna Systems announces the RAMCHARGER, a plug-in memory expansion board. While it’s not 130XE-compatible, it does offer full Axlon compatibility and gives the user up to 288K of memory for Synfile + and Syncalc. The popular MYDOS ramdisk software is included with the board. 256K, 512K and 1 megabyte versions are available for under $150, $200 and $300, respectively. Contact: Magna Systems, 147-05 Sandford Ave. Suite 4E, Flushing, NY 11355.

Datamost, Inc. is marketing a line of educational software called MindWare. Each package consists of two cassettes containing voice-tracks that sound through the television speaker and complement the visual display. Reading, Math, English, Science, Personal Skills and Business development are the topics available. They’re $24.95 per package. Contact DataMost, 21040 Nordhoff Street, Chatsworth, CA 91311.

Reader Mail

Dear Jeff,

Q. I plan to send at least 200 letters per week (for a mail order business). I want to keep all letters on file and correspondence (who did or did not correspond). I currently have: an Atari 800XL, 1050 Disk Drive, 1027 printer.

My questions: (1) Do you think I need another printer for more speed; if so, what would you recommend? (2) Is there a buffer for this printer or other printers which you recommend? (3) Can I still exchange DOS 3 for DOS 2.5?

Stuart G. Fowler
Anderson, South Carolina

A. The 1027 is an economical printer, but remember, it can only print 20 characters per second, so you can calculate how long it will take to print 200 letters per week. There are faster letter-quality printers available, but they are more costly, and you’ll need a printer interface. Near Letter Quality (NLQ) is somewhat faster and various printer models offer both NLQ and draft modes. The Gemini SG10, for example, is very cost-effective, and features near-letter quality in addition to its draft mode. The Epson LQ series is even faster and has nicer looking output, but again, this model is more costly. Thus it all depends on how much you’re willing to spend. Whatever you decide, you should visit a computer store before you buy and take a careful look at the print quality of each printer you are interested in to insure that you’re satisfied with the print quality.

A printer buffer will help free up computer time while printing, and this would be particularly practical if you needed to change or add to each letter between printings. If you’re buying an interface, you should certainly consider one with a built-in buffer. 16K, 32K, and 64K buffers are the most common sizes, and they vary in price according to memory size. The direct-connect 1027 cannot use the interface-buffer combination products since it does not require an interface.

To get DOS 2.5, send your DOS 3 disk to Atari Customer Relations, P.O. Box 61657, Sunnyvale, CA 94088.

Dear Jeff,

Q. Recently I learned through one of the local BBS’s a particular game could be modified by changing a couple of locations and the program would be enhanced to perform better. This is great...but how do you get into the locations? When the program is listed, all you get are the typical Atari arrow, hearts, squares, etc. How do you convert it to something that can be made sense of?

Gary Robinson
Cedar, Minnesota

A. Since you are not specific about what “locations” you were directed to change, it is difficult for me to determine what you need to do. What you can do is write me again describing specifically what you were told to change and I’ll help you personally. For other readers, I’ll briefly discuss a couple of techniques that are involved in changing various types of programs.

For a BASIC program (and I assume your program is in BASIC since you say you can list it), you should be told a particular line to change, or shown a group of characters to change on a specific line. A “location” can’t really tell you anything in a BASIC program; you need a line number. What a location can mean, though, is a memory location that you should POKE with a particular value. For example, you might be instructed to store a five in location 82, in which case you’d type POKE 82,5 before running a program. This particular poke would change the left-hand screen margin.

A machine language program presents an entirely different situation. In such a case you would generally need a disk utility to be able to change specified portions or bytes on a disk. For example, you might be told to alter a specific sector/byte location, or to change a series of values at a particular section/byte location. In both cases, a disk sector utility is necessary.

Dear Jeff,

Q. Your answer to H. Wayne Shiver in the Computer Shopper for March 1986 is not quite correct. Microperipheral modems were made by the Microperipheral Corporation in Redmond, Washington. In other words, “It ain’t MPP!”

A friend here has one of these and is having the same problems finding programs to work with it. There seems to be little available information on these modems, indicating that they were not very popular or that many are confused with the name similarity.

Aaron G. Todd
Los Angeles, California

A. Oops! You’re absolutely right, Aaron. Microperipheral Corp. is not Microbits Perpipheral Products. That’s the problem with a lot of computer company names; they sound too much alike. Nevertheless, I apologize to Wayne Shiver and to anyone I might have caused only more confusion. You and the following reader were the only ones who caught my goof:

Dear Jeff,

Q. I was just reading your March “Atari Help” column and I believe you misread the letter from H. Wayne Shiver of Powder Springs, GA.

He stated he owned a Microperipheral Corp. modem. This company has often been confused with the formerly named “MPP Corp.” but it is a different company from Washington, not Oregon. They used to manufacture modems under the name “Microconnection” for various computers, two models for the Atari. One was an 850 connected model and the other was for use without the 850, either a joystick port or I/O daisy chain connection. I’m not sure which.

I owned an 850 connect model for years and was completely satisfied with its operation. It used its own autodial routine, not compatible with Hayes, but several public domain Amodem programs supported it, namely the earlier versions of Amodem Plus v. 1.85 and variants, up to Amodem 6.3 which was the best. Later versions like Amodem 7.1 worked fine but did support the autodial.

I suspect that Mr. Shiver may be using the non-850 version of the modem which explains why Amodem and HomeTerm give a modem error. You are correct that he needs the correct handler for his modem, but it may not be the MPP handler, although if his modem uses the joystick port, one of the MPP handlers might get his modem recognized.

Without more specific information on the model of his modem, I cannot think of any more ideas to help him. The Microperipheral Corp. produced a number of early terminal programs which they did not ship with the modem called T Smart and S Smart, and required that the proper AUTORUN.SYS handler be booted for the modem. I recommend neither program. In fact, I recommend none of the commercial terminal software for Atari. Public domain terminal software is far superior to anything you can buy on the market.

Frank Halters
Panama City, Florida
A. Thanks for your help.

Atari 800XL Display Fix

In April’s column, in response to a letter about blurred characters on the 800XL from Alan McPherron (Pittsburgh, Pennsylvania), I asked other readers experiencing the same problem to write in. Many wrote in with similar complaints, but Ricky J. Burgett (Humboldt, Nebraska) wrote in with a solution. Ricky writes: “I am writing in reply to the question on the 800XL’s poor monitor performance. Both the 800 and the 130XE have separate chrominance and luminance outputs, but the 800XLs do not have an output to the chroma pin. There is a solution for this. (See Figure 1). The chroma output is at the emitter of Q5. You need to purchase a 200 ohm resistor and solder on one side at the junction of R67 and R68. The other side goes to pin 5 on the monitor connector. You will have to extend the 200 ohm resistor by means of an insulated wire. The Chicago Atari Users Group and Antic get credit for this solution. Several in my local users group have tried this modification and have seen a marked improvement in their monitor performance. Hope this helps.”

Many thanks to Ricky for writing in with, this solution. Readers who want to make this modification but are uncomfortable with soldering or electronics can probably find assistance at a users’ group.

Reader Requests

Readers have been so responsive and helpful in the past in discovering software items such as genealogical programs, and hardware products, such as memory expansion boards, that beginning next month I will be including a “Reader Request” section to help readers locate hard-to-find Atari items, or even to see if such items exist. Have a particular request? Let me know.

PixMix Picture Diskette, Volume II

March’s PixMix Puzzle Machine program had proved to be a very popular one, and I have been receiving numerous requests for “Volume II” of the PixMix picture diskette, despite the fact that I never offered a Volume II! Well, this month I’m happy to announce that Volume II is available, and best of all, it’s still $5.00 (see address at end of article). Volume II consists of several specially-centered digitized pictures and other high-resolution images that can be used with the March 1985 PixMix program.

BudgetMate

Now for this month’s feature program, BudgetMate. BudgetMate allows you to define up to nineteen different expense categories (and one income category) and has features that make it simple to plan your monthly budget. For example, the actual amount spent in each expense category in the previous month is displayed as you plan the next month’s budget. Additionally, the planned budget of the previous month can be copied into this month’s budget. A single diskette can hold a full year’s worth of data. Printer output and the numeric keypad are both supported. 32K minimum memory required.

Special Monthly Diskette

In the past I have offered diskettes containing the programs listed in this column for those who did not have the time or the desire to type in programs. This month’s diskette will be a little different in that it will contain a modified version of the listed BudgetMate. Since I have much more freedom when I design a program that will be saved directly to diskette rather than be printed in the column, I decided to create a more powerful version of BudgetMate for my personal use, which I will include for my readers on this month’s diskette (see end of article). In addition to the original BudgetMate features, the enhanced version needs no initial set-up time, allows up to 20 transaction details for each category (including income), records dollars and cents on the transaction detail screen, and features an end-of-year summary of transaction details and expenditures. Six months worth of data can be stored on a single diskette. Two diskettes, or two sides of a diskette, can hold a full year’s data. The main use of these extra features is, of course, for tax purposes, since a record of all purchases, medical expenses, contributions, business expenses, etc. can be retrieved and conveniently printed by category at any time. Therefore, those who intend to use BudgetMate to keep detailed income/expense records should consider this version. Supplementary instructions will be included with this monthly diskette.

Using BudgetMate

If you’re typing in the program, be sure to use Program Perfect, since this is a long one. The listing appears under the “BUDGETMATE” heading.

When you RUN the program, the title screen soon appears (See Photo 1). If you have the Atari CX-85 numeric keypad, plug it into joystick port 1.

Next, you’re asked to “INSERT THIS YEAR’S DATA DISKETTE OR A BLANK, FORMATTED DISK FOR A NEW YEAR.” Since you do not yet have a data diskette for this year, insert a blank, formatted disk and press START. Use this diskette to store your budget data for the remainder of the year. At the beginning of a new year, you should use a new data diskette, unless you want to erase over the previous year’s data.

Next, you’re asked to enter the date. Type the month, day and year (i.e. 6/4/86) and press RETURN. If the month is January and you are starting a new data diskette, you are asked to insert the previous year’s diskette so that BudgetMate can load in the data from December of that year. You won’t have to do this until next year.

Once the date has been entered, the appropriate files are opened or created on the data diskette and the budget screen is displayed. On the left-hand side of the screen is a menu of the commands (see Photo 2). Press ESC and the full budget screen will be displayed, with the names of any categories you have entered (see Photo 3). You can toggle between the command menu and the full screen at any time by pressing the ESC key.

The elongated cursor can be moved around the screen by using the cursor-control arrow keys. You do not need to hold down the control key to move the cursor. On the numeric keypad, the four keys on the left-side of the keypad will move the cursor up, down, left and right, respectively (from top to bottom). Changing or adding items to the screen is easy. Simply position the cursor over the data that you want to change, or over the position to which you want to add data. Then use the keyboard or the numeric keypad to enter the information. BudgetMate will automatically switch to its input mode and will display your entry on the screen when you press RETURN. To enter a negative number, press RETURN first and then the negative sign, otherwise pressing the negative sign would move the cursor up (since it is the same key as the up arrow).

The first thing you’ll want to do is enter the categories. The same category data is used for each month’s budget data, so you should avoid changing categories in which you have already entered data in the months before. You can and should, however, add categories as you discover that you need more. Move the cursor over to the category column and position it on top of the next empty “block,” type the name of the category you want to place there and press RETURN. You can add more categories or change any category in the same manner. You should not change the ***INCOME*** category to an expense category, since it is treated differently by the program (the INCOME category is assigned a positive value internally while the expense categories are assigned negative values).

The other two columns you can change or add to are this month’s BUDGET and ACTUAL columns. Numeric values for each category can range from -9,999 to 99,999. The total monthly balance can range from -99,999 to 999,999. Your first task is to design a balanced budget that will give you a zero or positive balance (the balance is displayed at the bottom of the column). Then, as the month progresses, use the ACTUAL column to record the actual expenditures that you make over the course of the month. By comparing the ACTUAL column to the BUDGET column, you can see exactly where you need to cut back, and where you can spend more freely. On the diskette version of BudgetMate, changes or additions to the ACTUAL column will bring you to a detail screen (see Photo 4) where you can record the actual transaction.

Last month’s ACTUAL column will be empty when you first start using the program, but after the first month this column will show you what you actually spent in each category (and how much you earned in the income category) in the previous month. This will help you to plan a much more easily adhered-to budget for the current month, since last month’s actual figures should give you a good estimation of the current month’s requirements for most of the categories.

Five control commands are used for your budget planning and actual record keeping. Press CONTROL-A to add a value to an existing one. On the numeric keypad, the minus sign (-) has been redefined to be the CONTROL-A key, since this feature is used often. For example, if you just went out and bought $100 worth of clothing, you would move the cursor down to the CLOTHING category line and then over to the ACTUAL column. Then you would press CONTROL-A (or - on the keypad), type 100 and press RETURN. 100 dollars will be automatically added to the existing amount in that category. The subtract command, CONTROL-S, does just the opposite. The add and subtract commands can be used on both the BUDGET and the ACTUAL columns.

The CONTROL-T command allows you to switch in last month’s budget. Thus, if you were able to adhere to last month’s budget well, you can copy it for this month’s budget and modify whatever amounts are necessary. Pressing CONTROL-T again will return the original current budget, should you change your mind once you see last month’s budget.

The CONTROL-P command gives you a printout of the budget screen. You can obtain a hardcopy of any month’s data by loading in that month’s data (enter a date in that month when asked to type in the current date). Then use the CONTROL-P command to print out the budget screen.

The CONTROL-Q command is the quit command. It is extremely important that you remember to press CONTROL-Q once you have finished adding/changing data, since this command tells BudgetMate to save all changes and additions to diskette. If you forget to press the CONTROL-Q command and turn off your computer, you will lose whatever additions you made for that day, so always remember to use this command when you are finished. You can use BudgetMate on a daily, weekly, or monthly basis, depending on how often you need to add to the expense categories and how much you want to monitor your budget.

Next Month

We’ll learn how BudgetMate works, plus we’ll enter some reader-modified utility programs.

Readers’ questions, comments and contributions are welcome. Please enclose a self-addressed, stamped envelope (SASE) for a personal reply.

The BudgetMate diskette is available from the author for $7.00, postpaid. Please make checks payable to Jeff Brenner; and specify your disk drive model.

Program Perfect” is a utility used to check for typing errors while entering programs from this column. Readers may send $5.00 for a diskette or a SASE for a listing of this program.

Address all correspondence to: Jeff Brenner, “Applying The Atari 6/86”, c/o Computer Shopper, P.O. Box F, Titusville, FL 32781-9990. •

BUDGETMATE 

STJ 10 REM BUDGETMATE 
KGJ 20 REM COPYRIGHT 1986 JEFF BRENNER 
YSJ 30 CYR=1900 
UBJ 40 DIM INVERSE$(59),WINDOW$(130),SCR$(960),MENU$(960) 
FDJ 50 DIM HEADING$(240),LAST(20),BUDGET(20),ACTUAL(20),LB(20) 
VWJ 60 DIM DATE$(15),IN$(100),TEMP$(100),FILE$(20),Z$(1),Z1$(1) 
JMJ 70 DIM XP(2):XP(0)=2:XP(1)=23:XP(2)=31 
PYJ 80 INVERSE=ADR(INVERSE$):WINDOW=ADR(WINDOW$) 
XMJ 90 DIM SP$(100):SP$=CHR$(32):SP$(100)=CHR$(32):SP$(2)=SP$ 
LCJ 100 DIM D$(2):D$=CHR$(156):D$(2)=CHR$(157) 
ACJ 110 GOSUB 3400:GOSUB 700:OPEN #1,4,0,"K:":OPEN #2,9,0,"E:":POKE 559,0 
HCJ 120 SETCOLOR 4,9,0:SX=85 
IJJ 130 FOR I=704 TO 707:POKE I,0:NEXT I 
RXJ 140 RESTORE 160:FOR I=1 TO 59:READ N:TOT=TOT+I+N 
BWJ 150 INVERSE$(I,I)=CHR$(N):NEXT I 
PEJ 160 DATA 104,104,104,170,165,88,133,208,165,89 
OSJ 170 DATA 133,209,104,104,168,240,16,24,165,208 
MNJ 180 DATA 105,40,133,208,165,209,105,0,133,209 
QRJ 190 DATA 136,208,240,24,138,101,208,133,208,165 
ONJ 200 DATA 209,105,0,133,209,104,104,168,136,177 
FXJ 210 DATA 208,73,128,145,208,136,16,247,96 
THJ 220 RESTORE 240:FOR I=1 TO 130:READ N:TOT=TOT+I+N 
YFJ 230 WINDOW$(I,I)=CHR$(N):NEXT I 
RGJ 240 DATA 104,104,133,212,104,133,211,104,104,170 
PJJ 250 DATA 165,88,133,208,165,89,133,209,104,104 
MZJ 260 DATA 168,240,29,24,165,208,105,40,133,208 
MOJ 270 DATA 165,209,105,0,133,209,24,165,211,105 
MAJ 280 DATA 40,133,211,165,212,105,0,133,212,136 
QYJ 290 DATA 208,227,24,138,101,208,133,208,165,209 
NUJ 300 DATA 105,0,133,209,138,101,211,133,211,165 
NUJ 310 DATA 212,105,0,133,212,104,104,168,136,132 
SDJ 320 DATA 213,104,104,170,164,213,177,208,133,214 
QRJ 330 DATA 177,211,145,208,165,214,145,211,136,16 
OSJ 340 DATA 241,24,165,208,105,40,133,208,165,209 
LZJ 350 DATA 105,0,133,209,165,211,105,40,133,211 
MHJ 360 DATA 165,212,105,0,133,212,202,208,211,96 
GGJ 370 GOSUB 1670:POKE 752,1 
UPJ 380 POSITION 4,5:PRINT "INSERT THIS YEAR'S DATA DISKETTE" 
HSJ 390 POKE SX,4:PRINT "OR A BLANK, FORMATTED DISK FOR A" 
ATJ 400 POKE SX,16:PRINT "NEW YEAR" 
KAJ 410 POSITION 3,4:L=34:H=4:GOSUB 2020 
BQJ 420 IF TOT<>187386 THEN GOSUB 620 
URJ 430 POSITION 9,9:PRINT "PRESS START WHEN READY" 
VXJ 440 A=USR(ADR(INVERSE$),9,9,22) 
UGJ 450 FOR I=1 TO 20:IF PEEK(53279)=6 THEN 470 
UFJ 460 NEXT I:GOTO 440 
NTJ 470 TRAP 1700:CLOSE #3:OPEN #3,4,0,"D:HEADING.DAT" 
DHJ 480 INPUT #3;YEAR:GOSUB 1670:IF MONTH+DAY<>0 THEN 510 
XGJ 490 POSITION 10,4:PRINT CYR+YEAR;" DATA DISKETTE" 
LDJ 500 POSITION 9,3:L=21:H=1:GOSUB 2020:GOSUB 1770 
BFJ 510 GOSUB 1100:GOSUB 520:GOTO 610 
CUJ 520 HEADING$="":FOR I=1 TO 19:INPUT #3;TEMP$ 
WCJ 530 HEADING$(LEN(HEADING$)+1)=TEMP$:NEXT I:CLOSE #3 
KSJ 540 GOSUB 820:POSITION 2,2:PRINT "***INCOME***" 
VKJ 550 A=USR(ADR(INVERSE$),2,2,12) 
WBJ 560 FOR I=1 TO 19:PRINT HEADING$(I*12-11,I*12):NEXT I 
XJJ 570 FOR I=0 TO 19:NUM=LAST(I):POSITION 21-LEN(STR$(NUM)),I+2:PRINT NUM 
VTJ 580 NUM=BUDGET(I):POSITION 29-LEN(STR$(NUM)),I+2:PRINT NUM 
PGJ 590 NUM=ACTUAL(I):POSITION 37-LEN(STR$(NUM)),I+2:PRINT NUM:NEXT I 
XEJ 600 COL=1:GOSUB 2750:COL=2:GOSUB 2750:COL=0:RETURN 
UAJ 610 YP=2:GOSUB 1440:GOSUB 2220 
TCJ 620 RESTORE 650:FOR I=1536 TO 1616:READ N:TOT=TOT+I+N:POKE I,N:NEXT I 
XUJ 630 IF TOT=187386 THEN A=USR(1536):RETURN 
ONJ 640 GRAPHICS 0:PRINT "PROGRAM ENTRY ERROR - CHECK DATA LINES":END 
SBJ 650 DATA 104,162,6,160,10,169,7,76,92,228,174,132,2,240,5,202 
CNJ 660 DATA 134,206,240,40,174,120,2,228,203,208,4,165,206,208,29,165 
DWJ 670 DATA 207,240,4,198,207,240,21,230,206,134,203,230,207,173,113,2 
ORJ 680 DATA 201,1,240,2,162,16,189,63,6,141,252,2,76,98,228,52 
QFJ 690 DATA 24,29,27,15,51,53,48,7,31,30,26,50,34,12,191,14,155 
KXJ 700 RESTORE 750:I=0:TOT=0 
XBJ 710 READ NUM:IF NUM=-1 THEN 730 
QXJ 720 TOT=TOT+NUM+1:POKE 1664+I,NUM:I=I+1:GOTO 710 
XXJ 730 IF TOT<>13247 THEN PRINT "ERROR - CHECK LINES 3000-3060":END 
POJ 740 FOR I=1767 TO 1790:POKE I,148:NEXT I:A=USR(1664):RETURN 
SLJ 750 DATA 104,173,48,2,133,204,173,49,2,133,205,160,26,169,148 
TZJ 760 DATA 153,230,6,136,208,250,160,0,177,204,9,128,145,204,160 
QUJ 770 DATA 3,177,204,9,128,145,204,160,6,177,204,9,128,145,204 
KUJ 780 DATA 200,192,28,208,245,169,197,141,0,2,169,6,141,1,2 
QIJ 790 DATA 173,14,212,9,128,141,14,212,96,72,152,72,173,11,212 
PLJ 800 DATA 201,7,240,18,201,8,240,14,230,204,164,204,185,231,6 
NWJ 810 DATA 141,24,208,104,168,104,64,169,0,133,204,240,238,-1 
MFJ 820 GOSUB 1670:DM=PEEK(559):POKE 559,0 
TXJ 830 Z$="":IF YEAR<10 THEN Z$="0" 
WUJ 840 Z1$="":IF YEAR-(MONTH=1)<10 THEN Z1$="0" 
EUJ 850 POSITION 16,0:RESTORE 6500+MONTH-1:READ TEMP$,IN$ 
YNJ 860 PRINT CHR$(8);TEMP$(1,3);CHR$(32);Z1$;YEAR-(MONTH=1);CHR$(8); 
KOJ 870 FOR I=1 TO 2 
OVJ 880 PRINT CHR$(136);IN$(1,3);CHR$(32);Z$;YEAR;CHR$(8);:NEXT I 
XTJ 890 A=USR(ADR(INVERSE$),17,0,23) 
IEJ 900 POSITION 4,1:PRINT "CATEGORY" 
VKJ 910 A=USR(ADR(INVERSE$),2,1,13) 
ETJ 920 POSITION 1,22:PRINT CHR$(2);"ESC FOR MENU";CHR$(22) 
XKJ 930 A=USR(ADR(INVERSE$),2,22,12) 
MGJ 940 POSITION 15,1:PRINT CHR$(8);"ACTUAL";CHR$(8);CHR$(136); 
VUJ 950 PRINT "BUDGET";CHR$(8);CHR$(136);"ACTUAL";CHR$(8) 
XRJ 960 A=USR(ADR(INVERSE$),16,1,23) 
WWJ 970 IN$=CHR$(2):IN$(2,13)=SP$:IN$(14)=CHR$(22) 
WHJ 980 TEMP$=CHR$(130):TEMP$(2,8)=SP$:TEMP$(7,7)=CHR$(150) 
SCJ 990 POSITION 1,1:PRINT CHR$(2):POSITION 14,1:PRINT CHR$(22) 
CUJ 1000 FOR I=1 TO 20:POKE 85,1:PRINT IN$;TEMP$;TEMP$;TEMP$:NEXT I 
TYJ 1010 FOR X=15 TO 35 STEP 8:POSITION X,22 
MQJ 1020 FOR I=1 TO 7:PRINT CHR$(13);:NEXT I:NEXT X 
IJJ 1030 A=USR(1664):POKE 1767,144:POKE 1768,144:POKE 1789,144:POKE 1790,144 
QCJ 1040 POKE 1769,144:FOR I=1770 TO 1788 STEP 2:POKE I,146:NEXT I 
WHJ 1050 POKE 53260,213:POKE 53265,255 
OIJ 1060 FOR I=704 TO 706:POKE I,144:NEXT I 
MMJ 1070 POKE 53252,104:POKE 53253,136:POKE 53254,168:POKE 53255,200 
UWJ 1080 POKE 53248,48:POKE 53261,255 
GNJ 1090 POKE 559,DM:RETURN 
XHJ 1100 FILE$="D:MONTH":FILE$(LEN(FILE$)+1)=STR$(MONTH) 
YIJ 1110 TRAP 1390:CLOSE #4:OPEN #4,4,0,FILE$:INPUT #4;ACTUAL:INPUT #4;BUDGET 
DDJ 1120 FOR I=0 TO 19:INPUT #4;TMP:ACTUAL(I)=TMP:NEXT I 
DFJ 1130 FOR I=0 TO 19:INPUT #4;TMP:BUDGET(I)=TMP:NEXT I 
DBJ 1140 CLOSE #4:IF MONTH=1 THEN 1210 
QAJ 1150 IN$="D:MONTH":IN$(8)=STR$(MONTH-1) 
FYJ 1160 TRAP 1200:OPEN #4,4,0,IN$:INPUT #4;LAST:INPUT #4;LB 
XEJ 1170 FOR I=0 TO 19:INPUT #4;TMP:LAST(I)=TMP:NEXT I 
QVJ 1180 FOR I=0 TO 19:INPUT #4;TMP:LB(I)=TMP:NEXT I 
CXJ 1190 RETURN 
EBJ 1200 FOR I=0 TO 19:LAST(I)=0:LB(I)=0:NEXT I:LB=0:LAST=LB:RETURN 
LSJ 1210 TY=PEEK(84) 
NRJ 1220 POSITION 2,TY:PRINT D$;"DO YOU HAVE DISK FOR ";CYR+YEAR-1;"?"; 
OAJ 1230 GET #1,N:PRINT CHR$(N); 
WGJ 1240 IF N<>78 AND N<>89 THEN 1210 
IGJ 1250 IF N=78 THEN RETURN 
MBJ 1260 POKE 752,1:PRINT :PRINT :POKE 85,6:PRINT "INSERT LAST YEAR'S DISKETTE" 
JAJ 1270 POKE 85,5:PRINT "PRESS START WHEN READY TO LOAD"; 
OZJ 1280 A=USR(ADR(INVERSE$),11,PEEK(84),5) 
TOJ 1290 IF PEEK(53279)<>6 THEN 1290 
FEJ 1300 TRAP 1380:CLOSE #4:OPEN #4,4,0,"D:MONTH12" 
XFJ 1310 INPUT #4;LAST:INPUT #4;LB 
XBJ 1320 FOR I=0 TO 19:INPUT #4;TMP:LAST(I)=TMP:NEXT I 
MXJ 1330 FOR I=0 TO 19:INPUT #4;TMP:LB(I)=TMP:NEXT I:CLOSE #4 
MCJ 1340 PRINT :PRINT :PRINT :POKE 85,9:PRINT "REPLACE NEW DISKETTE" 
OHJ 1350 POKE 85,8:PRINT "PRESS START WHEN READY"; 
ASJ 1360 A=USR(ADR(INVERSE$),14,PEEK(84),5):POKE 85,8:L=22:GOSUB 1940 
TMJ 1370 IF PEEK(53279)<>6 THEN 1370 
CYJ 1380 RETURN 
SPJ 1390 CLOSE #4:OPEN #4,8,0,FILE$ 
PDJ 1400 FOR I=0 TO 41:PRINT #4;0 
UMJ 1410 IF I<20 THEN BUDGET(I)=0:ACTUAL(I)=0 
VUJ 1420 NEXT I:CLOSE #4 
FFJ 1430 GOTO 1140 
RXJ 1440 MENU$=CHR$(0):MENU$(960)=CHR$(0):MENU$(2)=MENU$ 
VXJ 1450 POSITION 0,0:POKE 752,1:PRINT CHR$(30);CHR$(31); 
CNJ 1460 A=USR(ADR(WINDOW$),ADR(MENU$),2,1,12,22) 
KOJ 1470 POSITION 2,1:PRINT "COMMAND MENU":A=USR(ADR(INVERSE$),2,1,12) 
LXJ 1480 POSITION 2,2:PRINT "HOLD CONTROL":POKE 85,4:PRINT "KEY DOWN" 
GRJ 1490 POKE 85,6:PRINT "WHEN":POKE 85,4:PRINT "PRESSING" 
JIJ 1500 POKE 85,2:PRINT "COMMAND KEYS" 
ADJ 1510 POSITION 3,8:PRINT CHR$(193);"DD AMOUNT":PRINT 
GOJ 1520 PRINT CHR$(32);CHR$(211);"UBTRACT":PRINT 
YEJ 1530 PRINT CHR$(32);CHR$(212);"OGGLE LAST":PRINT "MONTH'S BDGT" 
ICJ 1540 PRINT CHR$(32);CHR$(208);"RINTOUT":PRINT 
MPJ 1550 PRINT CHR$(32);CHR$(209);"UIT AND" 
VMJ 1560 PRINT CHR$(32);"SAVE DATA" 
QLJ 1570 PRINT :PRINT CHR$(32);"PRESS ESC" 
XZJ 1580 A=USR(ADR(INVERSE$),9,19,3) 
YTJ 1590 PRINT "TO CONTINUE":POSITION 0,0:PRINT CHR$(30);CHR$(31); 
ABJ 1600 A=USR(ADR(INVERSE$),2,22,12) 
RFJ 1610 POKE 764,255:POKE 1769,148 
QWJ 1620 IF PEEK(764)=255 THEN 1620 
CMJ 1630 A=USR(ADR(WINDOW$),ADR(MENU$),2,1,12,22) 
JBJ 1640 IF PEEK(764)=28 THEN POKE 764,255 
PFJ 1650 A=USR(ADR(INVERSE$),XP(COL),YP,7+5*(COL=0)):POKE 1769,144:RETURN 
AUJ 1660 A=USR(ADR(WINDOW$),ADR(MENU$),2,1,12,22):GOTO 1610 
WYJ 1670 GRAPHICS 0:POKE 711,144:POKE 623,17:POKE 710,144:POKE 712,144 
NIJ 1680 POKE 16,64:POKE 53774,64 
DCJ 1690 RETURN 
QQJ 1700 IF PEEK(195)=170 THEN 1720 
RRJ 1710 PRINT "ERROR #";PEEK(195);:GOTO 370 
YWJ 1720 POKE 84,12:PRINT "OPEN NEW FILE ON THIS DISKETTE (Y/N)?"; 
IUJ 1730 T=PEEK(SX):L=37:POSITION 2,12:GOSUB 1940 
RRJ 1740 GET #1,N:IF N<>89 AND N<>78 THEN 1720 
UXJ 1750 IF N=78 THEN 370 
HAJ 1760 GOSUB 1770:GOTO 1870 
TUJ 1770 POSITION 2,14:PRINT D$;"ENTER THE DATE (ex: 5/8/86): ";:T=PEEK(SX) 
FHJ 1780 POSITION 2,14:L=28:GOSUB 1940 
TQJ 1790 TRAP 1770:INPUT #16;DATE$ 
AHJ 1800 MONTH=VAL(DATE$):GOSUB 1810:GOTO 1830 
KYJ 1810 IF DATE$(2,2)="/" THEN DATE$=DATE$(3):RETURN 
MJJ 1820 DATE$=DATE$(4):RETURN 
TPJ 1830 DAY=VAL(DATE$) 
IHJ 1840 GOSUB 1810 
VYJ 1850 YEAR=VAL(DATE$):IF YEAR<0 OR YEAR>99 THEN 1770 
DBJ 1860 RETURN 
WAJ 1870 GOSUB 1670:POSITION 9,5:PRINT "OPENING FILE - STAND BY" 
HFJ 1880 POKE 752,1 
MLJ 1890 POSITION 8,4:L=25:H=1:GOSUB 2020 
RPJ 1900 CLOSE #3:OPEN #3,8,0,"D:HEADING.DAT" 
LLJ 1910 PRINT #3;YEAR:FOR I=1 TO 19:PRINT #3;SP$(1,12):NEXT I 
DKJ 1920 CLOSE #3 
DTJ 1930 GOTO 470 
FEJ 1940 IF KBH THEN POKE 764,KBH:KBH=0:GOTO 2010 
VJJ 1950 H=PEEK(SX):POKE 764,255:POKE 752,1:PRINT CHR$(30);CHR$(31); 
NTJ 1960 POKE SX,H:FOR I=1 TO 6 
FXJ 1970 A=USR(ADR(INVERSE$),PEEK(85),PEEK(84),L) 
NCJ 1980 FOR W=1 TO 3 
HNJ 1990 IF I/2=INT(I/2) AND PEEK(764)<>255 THEN 2010 
TMJ 2000 NEXT W:NEXT I 
KWJ 2010 POKE 752,0:POKE SX,T:PRINT CHR$(30);CHR$(31);:RETURN 
DQJ 2020 XI=PEEK(85):YI=PEEK(84):PRINT CHR$(17); 
HAJ 2030 FOR I=1 TO L-2:PRINT CHR$(18);:NEXT I:PRINT CHR$(5) 
EYJ 2040 FOR J=1 TO H:POKE 85,XI:PRINT CHR$(124); 
AYJ 2050 POKE SX,XI+L-1:PRINT CHR$(124):NEXT J 
YRJ 2060 POKE SX,XI:PRINT CHR$(26); 
HCJ 2070 FOR I=1 TO L-2:PRINT CHR$(18);:NEXT I:PRINT CHR$(3) 
CWJ 2080 RETURN 
SIJ 2090 DATA DECEMBER 
QXJ 2100 DATA JANUARY 
TQJ 2110 DATA FEBRUARY 
KGJ 2120 DATA MARCH 
KUJ 2130 DATA APRIL 
FGJ 2140 DATA MAY 
IEJ 2150 DATA JUNE 
IXJ 2160 DATA JULY 
ORJ 2170 DATA AUGUST 
WQJ 2180 DATA SEPTEMBER 
QUJ 2190 DATA OCTOBER 
WFJ 2200 DATA NOVEMEBER 
SCJ 2210 DATA DECEMBER 
AZJ 2220 COL=0:POKE 764,255 
NJJ 2230 A=USR(ADR(INVERSE$),XP(COL),YP,7+5*(COL=0)) 
NDJ 2240 SOUND 0,0,0,0 
HHJ 2250 KB=PEEK(764):IF KB=255 THEN 2250 
CCJ 2260 POKE 764,255:IF ER=0 THEN 2280 
SWJ 2270 POSITION 0,23:ER=0:PRINT SP$(1,35); 
VYJ 2280 SOUND 0,8,12,4:POKE 53768,64 
YTJ 2290 IF KB=12 THEN 2450 
NHJ 2300 A=USR(ADR(INVERSE$),XP(COL),YP,7+5*(COL=0)) 
IXJ 2310 IF KB=7 OR KB=135 THEN COL=COL+1:IF COL>2 THEN COL=0 
EGJ 2320 IF KB=6 OR KB=134 OR KB=52 THEN COL=COL-1:IF COL<0 THEN COL=2 
EMJ 2330 IF KB=14 OR KB=142 THEN YP=YP-1:IF YP<2 THEN YP=21 
EQJ 2340 IF KB=15 OR KB=135 THEN YP=YP+1:IF YP>21 THEN YP=2 
OFJ 2350 IF KB=28 THEN GOSUB 1660:GOTO 2250 
UWJ 2360 IF KB=191 AND COL THEN 3240 
UYJ 2370 IF KB=190 AND COL THEN 3350 
SFJ 2380 IF KB=175 THEN GOSUB 2870 
RRJ 2390 IF KB=138 THEN GOSUB 3000 
RQJ 2400 IF KB=173 THEN GOSUB 3170 
YPJ 2410 IF KB>127 OR KB=6 OR KB=7 OR KB=14 OR KB=15 OR KB=52 THEN 2230 
GPJ 2420 KBH=KB:A=USR(ADR(INVERSE$),XP(COL),YP,7+5*(COL=0)) 
FLJ 2430 GOTO 2450 
FIJ 2440 GOTO 2230 
LDJ 2450 SCR$(1)=CHR$(0):SCR$(960)=CHR$(0):SCR$(2)=SCR$ 
YXJ 2460 A=USR(ADR(WINDOW$),ADR(SCR$),1,22,39,1) 
AYJ 2470 IF COL=0 THEN 2640 
CBJ 2480 POSITION 2,22:PRINT D$;"NEW VALUE: ";:T=PEEK(85) 
EWJ 2490 POSITION 2,22:L=10:GOSUB 1940 
YTJ 2500 TRAP 2730:INPUT #16;VALUE:VALUE=INT(VALUE+0.5) 
VVJ 2510 POKE 752,1:POSITION 0,0:PRINT CHR$(30);CHR$(31); 
CGJ 2520 IF VALUE<-9999 OR VALUE>99999 THEN 2480 
RIJ 2530 A=USR(ADR(INVERSE$),XP(COL),YP,7) 
OSJ 2540 FL=1:IF YP=2 THEN FL=-1 
DJJ 2550 IF COL<>1 THEN 2570 
IHJ 2560 BUDGET=BUDGET+FL*BUDGET(YP-2)-FL*VALUE:BUDGET(YP-2)=VALUE 
DOJ 2570 IF COL<>2 THEN 2590 
IFJ 2580 ACTUAL=ACTUAL+FL*ACTUAL(YP-2)-FL*VALUE:ACTUAL(YP-2)=VALUE 
OXJ 2590 POSITION XP(COL)+1,YP 
EXJ 2600 I=LEN(STR$(VALUE)) 
SZJ 2610 IF I<5 THEN PRINT SP$(1,5-I);VALUE; 
UWJ 2620 IF I=5 THEN PRINT VALUE; 
FPJ 2630 GOTO 2740 
NAJ 2640 POSITION 2,22:PRINT D$;"NEW CATEGORY: ";:T=PEEK(SX) 
EXJ 2650 POSITION 2,22:L=13:GOSUB 1940 
FRJ 2660 INPUT #16;IN$:POKE 752,1:POSITION 0,0:PRINT CHR$(30);CHR$(31); 
LJJ 2670 IF LEN(IN$)=0 THEN 2730 
HUJ 2680 IF LEN(IN$)>12 THEN IN$=IN$(1,12) 
DTJ 2690 IF LEN(IN$)<12 THEN IN$(LEN(IN$)+1,12)=SP$ 
MBJ 2700 HEADING$((YP-2)*12-11,(YP-2)*12)=IN$ 
EHJ 2710 POSITION XP(COL),YP:PRINT IN$;:POSITION 0,0:PRINT CHR$(30);CHR$(31); 
FPJ 2720 GOTO 2740 
NOJ 2730 A=USR(ADR(INVERSE$),XP(COL),YP,7+5*(COL=0)) 
YGJ 2740 A=USR(ADR(WINDOW$),ADR(SCR$),1,22,39,1):GOSUB 2750:GOTO 2230 
IFJ 2750 POSITION XP(COL)-1,22:IF COL<>1 THEN 2800 
LDJ 2760 I=LEN(STR$(BUDGET))+2 
UKJ 2770 IF I<9 THEN PRINT SP$(1,9-I);BUDGET;:GOTO 2850 
WDJ 2780 IF I=9 THEN PRINT BUDGET;:GOTO 2850 
FXJ 2790 GOTO 2840 
NWJ 2800 IF COL<>2 THEN RETURN 
KYJ 2810 I=LEN(STR$(ACTUAL))+2 
UFJ 2820 IF I<9 THEN PRINT SP$(1,9-I);ACTUAL;:GOTO 2850 
VYJ 2830 IF I=9 THEN PRINT ACTUAL;:GOTO 2850 
SOJ 2840 PRINT CHR$(32);"OVRFLW"; 
EMJ 2850 POSITION 15,22:PRINT "TOTALS:":A=USR(ADR(INVERSE$),15,22,7) 
RVJ 2860 POKE 752,1:POSITION 0,0:PRINT CHR$(30);CHR$(31);:RETURN 
POJ 2870 TRAP 2970:POKE 54286,64:POKE 710,144 
EBJ 2880 CLOSE #4:OPEN #4,8,0,"D:HEADING.DAT":PRINT #4;YEAR 
EVJ 2890 FOR I=1 TO 19:PRINT #4;HEADING$(I*12-11,I*12):NEXT I 
SNJ 2900 CLOSE #4:OPEN #4,8,0,FILE$ 
OZJ 2910 PRINT #4;ACTUAL:PRINT #4;BUDGET 
FGJ 2920 FOR I=0 TO 19:PRINT #4;ACTUAL(I):NEXT I 
FIJ 2930 FOR I=0 TO 19:PRINT #4;BUDGET(I):NEXT I 
DOJ 2940 CLOSE #4 
WGJ 2950 FOR I=53252 TO 53255:POKE I,0:NEXT I:POKE 53248,0 
ISJ 2960 POP :GRAPHICS 0:END 
TEJ 2970 POKE 710,148:POKE 54286,192 
MVJ 2980 POSITION 2,23:PRINT "SAVING ERROR #";PEEK(195);:ER=1 
KSJ 2990 POSITION 2,23:L=17:T=0:GOSUB 1940:RETURN 
LCJ 3000 POKE 54286,64:TRAP 3140 
VRJ 3010 POKE 752,1:POSITION 0,0:PRINT CHR$(30);CHR$(31); 
AHJ 3020 A=USR(ADR(INVERSE$),15,22,7) 
NUJ 3030 CLOSE #4:OPEN #4,8,0,"P:" 
KQJ 3040 FOR Y=0 TO 22:IF Y<2 THEN A=USR(ADR(INVERSE$),0,Y,40) 
PXJ 3050 POSITION 2,Y:INPUT #2;IN$:A=USR(ADR(INVERSE$),0,Y,40) 
PQJ 3060 IF Y>1 AND Y<22 THEN 3110 
PGJ 3070 FOR I=1 TO LEN(IN$):A=ASC(IN$(I,I)) 
VQJ 3080 IF A>31 AND A<97 THEN PRINT #4;CHR$(A);:GOTO 3100 
ATJ 3090 PRINT #4;CHR$(32); 
URJ 3100 NEXT I:PRINT #4:GOTO 3120 
JLJ 3110 IN$(13,14)=SP$:IN$(20,22)=SP$:IN$(28,30)=SP$:PRINT #4;IN$ 
DCJ 3120 IF Y>1 THEN A=USR(ADR(INVERSE$),0,Y,40) 
XFJ 3130 NEXT Y:POKE 54286,192:A=USR(ADR(INVERSE$),15,22,7):RETURN 
IKJ 3140 POKE 54286,192:A=USR(ADR(INVERSE$),15,22,7) 
SSJ 3150 POSITION 2,23:PRINT "PRINTING ERROR #";PEEK(195);:ER=1 
KKJ 3160 POSITION 2,23:T=0:L=19:GOSUB 1940:RETURN 
PIJ 3170 FOR I=0 TO 19:TMP=LB(I):LB(I)=BUDGET(I):BUDGET(I)=TMP 
DAJ 3180 A=USR(ADR(INVERSE$),24,I+2,5) 
NRJ 3190 POSITION 24,I+2:IF TMP=0 THEN J=1:GOTO 3210 
YLJ 3200 J=LEN(STR$(TMP)) 
JMJ 3210 IF J<5 THEN PRINT SP$(1,5-J);TMP:GOTO 3230 
NDJ 3220 IF J=5 THEN PRINT TMP 
QIJ 3230 NEXT I:TMP=LB:LB=BUDGET:BUDGET=TMP:COL=1:GOTO 2750 
LBJ 3240 SCR$(1)=CHR$(0):SCR$(960)=CHR$(0):SCR$(2)=SCR$ 
YVJ 3250 A=USR(ADR(WINDOW$),ADR(SCR$),1,22,39,1) 
DFJ 3260 POSITION 2,22:PRINT D$;"ADD WHAT VALUE: ";:FL=1:T=PEEK(SX) 
EYJ 3270 POSITION 2,22:L=15:GOSUB 1940 
VDJ 3280 VALUE=0:TRAP 3290:INPUT #16;VALUE:VALUE=INT(VALUE+0.5) 
WBJ 3290 POKE 752,1:POSITION 0,0:PRINT CHR$(30);CHR$(31); 
NSJ 3300 IF COL=1 THEN VALUE=BUDGET(YP-2)+VALUE*FL 
NTJ 3310 IF COL=2 THEN VALUE=ACTUAL(YP-2)+VALUE*FL 
QQJ 3320 POSITION 2,23:PRINT SP$(1,14);:POSITION 2,23 
XNJ 3330 IF VALUE<-9999 OR VALUE>99999 THEN PRINT "VALUE TOO BIG";:GOTO 3260 
FMJ 3340 GOTO 2540 
LDJ 3350 SCR$(1)=CHR$(0):SCR$(960)=CHR$(0):SCR$(2)=SCR$ 
YXJ 3360 A=USR(ADR(WINDOW$),ADR(SCR$),1,22,39,1) 
UZJ 3370 POSITION 2,22:PRINT D$;"SUBTRACT WHAT VALUE: ";:FL=-1:T=PEEK(SX) 
EWJ 3380 POSITION 2,22:L=20:GOSUB 1940 
FTJ 3390 GOTO 3280 
EJJ 3400 DATA 124,102,120,62,126,126,99,24,126,126,102,102,108,96,96,24 
DPJ 3410 DATA 119,60,24,96,124,102,102,96,124,24,127,102,24,124,102,102 
CHJ 3420 DATA 102,110,96,24,107,102,24,96,102,102,108,102,96,24,99,126 
YHJ 3430 DATA 24,96,124,126,120,62,126,24,99,102,24,126 
WFJ 3440 GRAPHICS 4:SETCOLOR 2,9,0:SETCOLOR 4,9,0:SETCOLOR 0,9,10 
COJ 3450 S=PEEK(88)+256*PEEK(89)+80:DL=PEEK(560)+256*PEEK(561) 
HFJ 3460 POKE 559,0 
MGJ 3470 RESTORE 3400:FOR I=0 TO 59:READ N:POKE S+I,N:NEXT I:POKE 559,34 
PHJ 3480 POKE DL+23,6:POKE DL+24,6:POKE 87,1 
XGJ 3490 IN$="COPYRIGHT 1986":POSITION 3,9:PRINT #6;IN$ 
ULJ 3500 IN$="JEFF BRENNER":POSITION 4,10:PRINT #6;IN$ 
HCJ 3510 POKE 752,1:PRINT SP$(1,9);"Please stand by..." 
DMZ 3520 RETURN 
COMPUTER SHOPPER / JANUARY 1987 / PAGE 111 

Applying The Atari

by Jeff Brenner

Wow...1987 is upon us already, and the 8-bit Atarians are clamoring louder than ever! Let me hear from you, folks, with your ideas for “Applying The Atari” in 1987. Anything goes—applications software, hardware projects, reviews, etc. We’ve had some terrific programs listed here in 1986, as is evident from readers’ responses, and 1987 promises to be equally exciting. This month we’ll enter the final part to November’s feature program, Forms Generator and we’ll also answer some reader mail.

Reader Mail

Dear Jeff:

I have an Atari 800XL and have recently become interested in assembly language programming. I am presently working on a project which involves changing some routines in Atari BASIC. For this reason, I read with interest your column concerning copying the ROM BASIC to disk (“Atari Help,” April 1986). Could you print the assembly listing of the program? Also, I would like to add line numbering to Atari BASIC and would appreciate if you could give me some advice about how and where to start this routine.

Gary Harren
Anniston, Alabama

You’ll find the assembly listing under the “Disk-Based BASIC” heading. This routine runs as an AUTORUN. SYS file and loads the BASIC language from the file D:BASIC. The routine also contains a special SYSTEM RESET handler. Normally, whenever the RESET key is pressed, a GRAPHICS 0 screen is set up at the top of free RAM. When the BASIC in ROM is being used (internal BASIC on XL/XE or BASIC cartridge), the screen is set up directly below the BASIC ROM, at the top of RAM (in systems with at least 40K memory). But when BASIC is in RAM, as it is when it is loaded from the disk, this screen is set up right on top of a portion of the BASIC language, and causes a system crash. The SYSTEM RESET handler eliminates this problem by automatically replacing 1K of the damaged BASIC code after RESET is pressed.

An additional activity of this routine is to trick DOS into believing a cartridge is present. Normally, when you call up DOS and choose the “RUN CARTRIDGE” option (to return to BASIC), DOS checks if a cartridge is present and will give a “NO CARTRIDGE” message if it doesn’t find one. The Disk-Based BASIC routine changes specific memory locations in either DOS 2 or DOS 2.5 whenever DOS is called to make the DOS believe that a cartridge is actually present. This way, the “RUN CARTRIDGE” function returns you to the RAM-based BASIC.

I’ve added many comments to the assembly listing so you, Gary, and other readers interested in assembly language can see precisely how the above-described functions are implemented. Additionally, I’ve listed another routine for your interest, under the “BASIC TO STRING CONVERTER’” heading. This short routine is used to transfer the BASIC ROM into a string (i.e. A = USR(1536,ADR($)). The string can then be saved to the disk as the “D:BASIC” file. April’s Disk-Based BASIC program used this short routine for exactly this purpose.

Regarding your question about creating an autonumbering program for the Atari, the upper half of page six (location 1792 or $680) is a safe place for the routine (or the entire page six if you need more than 128 bytes). I don’t know if you are familiar yet with interrupt vectors, but you would probably want to install your routine into the keyboard handler, or the vertical blank routine. This way you can check when RETURN is pressed or when the keyboard register (764) is cleared (containing a 255 after having contained the internal code for the RETURN key, 12), and then display the next line number. A number of autonumbering routines have already been created and you can probably find one in the public domain, should you decide not to embark on this programming task yourself.

Dear Jeff:

Is there a program somewhere for word processing that uses SCRIPT type of letters? My wife would like to use something like that for some of her correspondence and I said I’d find out. I am enclosing a clipping that has the typestyle I’m thinking of. It wouldn’t have to be that exact style but something like it.

Along with my Atari 800XL, I use an Epson Spectrum LX-80 printer. The Epson, as versatile as it is, should be able to do the work if there is such a program available. Many thanks for all the good work and I love to read your column.

Darwin K. Garrison
Olathe, Kansas

I don’t know of any Atari word processor that allows the printing of script type (unless, of course, the printer itself supports this typestyle). However, there are still a couple of ways in which you can send out correspondence in cursive print. First of all, you’ll need a word processor, such as AtariWriter Plus, that can “print” to a disk file. The original AtariWriter cannot be used for this purpose since it does not support printing to devices other than the printer. When you “print” the file to diskette, you are instructing the word processor to save your text in the exact way it would send the data to your printer. Therefore, your “printed” file will fit your specified margins, will have been centered where instructed to be centered, will number pages in the file, etc. Once the diskette file is in printed form, you could use XLENT Software’s MegaFont to print the file with a cursive font. You could also use ATASCII Lister (published in the July 1985 “Applying The Atari), along with a character set of your own design or a public domain script character. Be forewarned, however, that with either of these programs, the characters will probably not be as readable as you would like, since these characters are defined by the same number of bytes (eight) as the standard Atari characters.

Completed Forms Generator

Load your Forms Generator program from November and make the modifications or additions shown under the “Forms Generator Changes/Additions” heading. (Important note: These and the following modifications apply only to those using the listing version of the program. The standard and enhanced diskette versions have already incorporated these additions and should not be modified.)

SAVE the partially updated Forms Generator. Now load Program Perfect and use it to enter lines 4560 through 5560 under the “FORMS GENERATOR Enter Data Function” heading. These lines add the “Enter Data and Calculate” feature to Forms Generator. When these lines have been entered, LIST them temporarily to disk (i.e. LIST “D:TEMP”). Now, load the partially updated Forms Generator (with the changes/additions incorporated) and ENTER the temporary file (i.e. ENTER “D:TEMP”). The result will be the complete standard Forms Generator program in memory, and you can now SAVE this program under a name of your choice.

Program Changes

After you’ve entered the additions and modifications (lines 25 to 3760), you will notice a difference when Forms Generator is run: Before the “PLEASE STAND BY” message appears, a column of numbers is displayed, twice, and the cursor will be seen moving from the top to the bottom of the screen. Actually, what is happening is that the program is deleting some of the initialization lines of the program. This frees up enough memory for the rest of the program, along with the added “ENTER DATA” function, to operate. Once the lines have been deleted, the program displays the “PLEASE STAND BY” and then operates as normal, However there is one important note you should be aware of: Once you have run the updated Forms Generator, do not SAVE it. Since many lines of the program essential to the initialization procedure are deleted to free up more memory, you will be saving an incomplete program. Therefore, if you discover you need to make additional changes to the program after you run it, first load in the complete program, make the changes, and save the program before running it.

Another change made in the program is the replacement of the CONSTANT definition with the FORMS definition (used in the DEFINE CALCULATIONS mode). Essentially, the two definitions are equivalent; the name was changed to more accurately reflect the function of the definition. When you are defining calculation and want to incorporate a constant that appears on the form, you would now type F instead of C for the “DECIMAL PLACES, N, $...” prompt. Hence, if you want to multiply a subtotal on a form by a tax percentage, you would define the tax amount (such as .06) as a FORMS variable—signifying to the program that the value is taken from the form itself and not from user input.

The more important reason for the name change, however, is that values that Forms Generator itself places on the screen can be used in future calculations. For example, let’s say you define the first line of your form as quantity * unit price = extended price. Then you copy this definition for the next 30 lines of your form (by pressing “C” for the “COMMAND OR RETURN TO MARK FIELD BEGIN” prompt). When you later enter the quantity and unit price information for each line, Forms Generator will automatically calculate the extended price and place it on the form. Hence, you can tell Forms Generator to sum up the extended price column to give you a subtotal or total. To do this, you would go back to each extended price box and define it now as a FORMS variable, while adding them together. This tells Forms Generator to go back and take the value that it put in the extended price box and use that in an additional calculation (calculating the total).

One other feature added: When you have a form with a lot of lines of “copied” definitions, but have finished entering your data, simply press RETURN to the ENTRY prompt and Forms Generator will skip the remaining copied lines. For example, if you copied thirty lines of the quantity * unit price = extended price formula, but only have four lines of information to enter, you would type in the data for those four lines and then press RETURN by itself. Forms Generator will then bypass the remaining copied lines and will proceed with the next definitions (such as calculating a subtotal).

Using “Enter Data” Function

This function enables you to actually enter the data according to the calculation definitions you defined. For numerical definitions, you’ll see an “ENTRY” line on the bottom of the screen. Type in your entry and press RETURN. The value will be reproduced on the form in its proper format. As you enter the necessary data, the defined calculations will be performed and the results will appear on the form. For text definitions, the cursor will be positioned on the form itself, allowing you to type the text directly onto the form at the specified position.

Notes on Defining Calculations

Defining calculations for a form can get quite complicated, and unless you are experienced with defining formulas (in programs such as VisiCalc, SynCalc, etc.) you will probably want to practice and experiment to best learn how to properly and efficiently define calculations for your forms.

And a note for more experienced users: If you are creating a complicated form, with numerous calculation-definitions, it is wise to save your form (definitions are automatically saved with the form) after every major string of operations. This way, in the event that you accidentally enter an incorrect formula, or make any mistake, you can always reload the form and begin where you last saved the definitions (by selecting ADD after choosing the DEFINE CALCULATIONS option).

Next Month

We’ll give the completed Forms Generator a practical test by entering a programmed form. Another form will be included that takes advantage of the graphics capabilities of the enhanced diskette-version of Forms Generator. Plus, we have a special hardware project for you loyal 800 owners, thanks to Roger E. King of SPACE (Harrisburg, Pennsylvania). (More reader mail too!)

Readers’ questions, comments and contributions are welcome. Please enclose a self-addressed, stamped envelope (SASE) for a personal reply. Due to volume of letters received, only a selected number of personal responses can be given each month.

The Forms Generator program disk, from the November 1986 issue is available for Computer Shopper readers from the author for $7.00 for the standard version, or $11.00 for the enhanced version with documentation. Please make checks payable to “Jeff Brenner” and specify your disk drive model.

“Program Perfect” is a utility used to check for typing errors while entering programs from this column. Readers can send $5 for a diskette or a SASE for a listing of this program.

Address all correspondence to: Jeff Brenner, “Applying The Atari 1/87”, c/o Computer Shopper, P.O. Box F, Titusville, FL 32781-9990. •

DISK-BASED BASIC Assembly Listing 

10 ; BASIC LOADER 
20 ; COPYRIGHT 1986 JEFF BRENNER 
30 ; Supports SYSTEM RESET, 130XE RAMDISK, and the "RUN CARTRIDGE" 
40 ; option on DOS 2 and DOS 2.5. 
50 ; When saved as AUTORUN.SYS, will load and execute cartridge file 
60 ; saved as "D:BASIC" 
70 ; 48K minimum RAM required. 
80 ; Page six can be used (if SYSTEM RESET not pressed and RUN CARTRIDGE 
90 ; DOS option not used) by resetting $222 and $223. Original val ues 
0100 ; stored in $6FE and $6FF. To do this in BASIC: 
0110 ; POKE 54266,0:? :POKE 546,PEEK(1792):POKE 547,PEEK(1793):POKE 54286,64 
0120  *=$5D7 ; Locations $5D7 to $5FF are used only temporarily for 
0130 ; the powerup routine. 
0140 MEMLO=$2E7 
0150 POWERUP LDA $0C ; This section executed when run for first time 
0160  STA INIT+1 
0170  LDA $0D 
0180  STA INIT+2 
0190  LDA #INIT&255 
0200  STA $0C       ; Point DOSINI vector to our INIT routine. 
0210  LDA #INIT/256 ; INIT will be executed after every SYSTEM RESET. 
0220  STA $0D 
0230 DOS25 LDX #0 
0240  STX 580 
0250  INX 
0260  STX 9 
0270  LDA #160 
0280  STA 106     ; Reserve 8K RAM 
0290  JSR SCREEN  ; Setup GRAPHICS 0 screen 
0300  LSR 709  ; Blank screen while loading 
0310  LDY #3 
0320  STY $342+$30 
0330  INY 
0340  STY $34A+$30 
0350  LDA #FILE&255 ; FILE holds "D:BASIC" file name 
0360  STA $344+$30 
0370  LDA #FILE/254 
0380  STA $345+$30 
0390  LDX #48 
0400  JSR $E456     ; Open file 
0410  LDA #7 
0420  STA $342+$30 
0430  LDA #250 
0440  STA $344+$30 
0450  LDA #159 
0460  STA $345+$30 
0470  DEC $349+$30 
0480  JSR $E456     ; Load BASIC 
0490  ASL 709       ; Restore screen 
0500  LDA #$77 
0510  STA 764       ; Force SHIFT-INSERT to clear last screen line 
0520  LDA MEMLO 
0530  STA $02 
0540  STA HOLD 
0550  LDA MEMLO+1 
0560  STA $03 
0570  STA HOLD+1 
0580  CLC 
0590  ADC #4 
0600  STA MEMLO+1    ; Move low memory pointer up 1K 
0610  LDA #DOSJUMP&255 ; Set RUN CARTRIDGE address 
0620  STA $BFFA 
0630  LDA #DOSJUMP/256 
0640  STA $BFFB 
0650 CONT LDX #4 ; Temporarily save 1K of BASIC below new MEMLO 
0660  LDY #0 
0670 LOOP LDA $BC00,Y 
0680  STA ($02),Y 
0690  INY 
0700  BNE LOOP 
0710  INC $03 
0720  INC LOOP+2     ; Increment high byte of $BC00 at LOOP+2 
0730  DEX 
0740  BNE LOOP 
0750  LDA #$BC 
0760  STA LOOP+2  ; Restore original value at LOOP+2 
0770  BNE RETURN ; Go to run BASIC 
0780 ; The following section is executed each time SYSTEM RESET is pressed: 
0790 INIT JSR $0000 ; $0000 is replaced with DOSINI address 
0800  LDA #160 
0810  STA 106   ; Set RAMTOP back again to reserve 8K 
0820  JSR SCREEN ; Open GRAPHICS 0 screen 
0830  JSR RESET  ; Restore MEMLO to original value 
0840  CLC 
0850  ADC #4 
0860  STA MEMLO+1 ; Reserve 1K again 
0870  LDX #4 
0880  LDY #0 
0890 LOOP2 LDA ($02),Y ; Restore last 1024 bytes of BASIC 
0900 ADR STA $BC00,Y 
0910  INY 
0920  BNE LOOP2 
0930  INC $03 
0940  INC ADR+2 ; Increment high byte of $BC00 above 
0950  DEX 
0960  BNE LOOP2 
0970  LDA #$BC 
0980  STA ADR+2  ; Restore original value at ADR+2 
0990 RETURN LDA $222 
1000  STA VB+1      ; Save original vblank routine address 
1010  LDA $223 
1020  STA VB+2 
1030  LDX #NEWVB/256 
1040  LDY #NEWVB&255 
1050  LDA #$06 
1060  JSR $E45C ; Install NEWVB routine into vbliank 
1070  JMP $A000 
1080 SCREEN LDA #3 ; Subroutine to open GRAPHICS 6 screen 
1090  STA $342+$20 
1100  LDA #SCHAR&255 
1110  STA $344+$20 
1120  LDA #SCHAR/256 
1130  STA $345+$20 
1140  LDA #12 
1150  STA $34A+$20 
1160  LDX #$20 
1170  JMP $E456  ; RTS after $E456 ends this subroutine 
1180 RESET LDA HOLD  ; Subroutine to restore original MEMLO value 
1190  STA 2      ; Use locations 2 and 3 as a page zero address 
1200  STA MEMLO 
1210  LDA HOLD+1 
1220  STA 3 
1230  RTS 
1240 DOSJUMP JSR RESET 
1250  JMP CONT 
1260 FILE .BYTE "D:BASIC",$9B ; File name of BASIC file 
1270 SCHAR .BYTE "S" ; "S" used to open to screen 
1288 HOLD .BYTE 0,0  ; Reserve two bytes to hold MEMLO address 
1298 NEWVB LDA $26F9 ; Vblank routine (executed continuously) 
1300  CMP #$FD       ; Check if DOS 2 is being used 
1310  BNE NEXTDOS    ; Nope - Check for DOS 2.5 
1320  DEC $26F9      ; Make DOS 2 think cartridge is present 
1330  BNE VB 
1348 NEXTDOS LDA $2759 ; Check if DOS 2.5 is being used 
1350  CMP #$FD 
1368  BNE VB         ; Nope 
1378  DEC $2759      ; Make DOS 2.5 think cartridge is present 
1380 VB JMP $0000    ; $0000 is replaced with original imm. vblank address 
1390  .END 
FORMS GENERATOR "Enter Data" Function 

IHJ 4560 POKE C559,N0:PRINT CLS$:POKE 53250,N0:POKE 53251,N0:POKE 704,144 
FBJ 4570 POKE 53248,120:FOR I=1767 TO 1790:POKE I,144:NEXT I:POKE 712,144 
VJJ 4580 POKE 1778,150:POKE 710,154:POKE 752,1:POKE C559,46 
CBJ 4590 SHOW$(36,36)=CHR$(21):GRAB$(36,36)=CHR$(21) 
WPJ 4600 DX=N0:DY=N1:IX=-4:CALC=N0 
KRJ 4610 IF DEF$=NUL$ THEN 4780 
BEJ 4620 TOT=N0 
NMJ 4630 IX=IX+5:IF IX>LEN(DEF$) THEN 4800 
MFJ 4640 OP=ASC(DEF$(IX)):X=ASC(DEF$(IX+N1)):Y=ASC(DEF$(IX+N2)) 
BHJ 4650 IF CPY THEN Y=CY 
IFJ 4660 LN=ASC(DEF$(IX+N3)):TYPE=ASC(DEF$(IX+N4)) 
LTJ 4670 IF TYPE>47 AND TYPE<55 THEN TYPE=TYPE-48 
JTJ 4680 IF TYPE<>67 THEN 4820 
ETJ 4690 IF CPY=N0 THEN 4720 
RSJ 4700 IF IX>=CPYH THEN CPY=N0:GOTO 4630 
BIJ 4710 IX=IX+5:GOTO 4640 
OQJ 4720 CPYH=IX:CPY=N1:CY=Y:IF IX>5 THEN IX=IX-5 
GDJ 4730 IF DEF$(IX,IX)=SP1$ AND DEF$(IX+4,IX+4)<>"C" THEN 4750 
BNJ 4740 IX=IX-5:GOTO 4730 
CAJ 4750 Y=ASC(DEF$(IX+N2)) 
SNJ 4760 IF IX>5 THEN IF ASC(DEF$(IX-3))=Y THEN IX=IX-5:GOTO 4760 
FXJ 4770 GOTO 4640 
OGJ 4780 POKE 53248,N0 
IUJ 4790 POSITION 10,11:PRINT "NO DATA IN MEMORY":GOTO 4470 
JJJ 4800 POSITION 10,21:PRINT "ALL DATA ENTERED"; 
IUJ 4810 POSITION N0,22:PRINT SP$(N1,39):POKE 84,21:GOTO 4470 
DIJ 4820 POSITION N0,22:PRINT CHR$(31);CHR$(30);:GOSUB 1280 
JPJ 4830 IF TYPE=C84 THEN 5210 
LPJ 4840 POSITION 19,11:IF OP=61 THEN A=TOT:TOT=N0:GOTO 5040 
JRJ 4850 IF TYPE<>70 THEN 4960 
FDJ 4860 INPUT #N3;A$:A$(LEN(A$)+N1)=SP$ 
PVJ 4870 IF A$(N1,N1)="$" THEN A$=A$(N2,LEN(A$)) 
OZJ 4880 TRAP 4890:A=VAL(A$(1,LN)):GOTO 4900 
RTJ 4890 A=N0:TRAP 4430 
HBJ 4900 IF OP=32 THEN TOT=A 
SIJ 4910 IF OP=43 THEN TOT=TOT+A 
SNJ 4920 IF OP=45 THEN TOT=TOT-A 
SIJ 4930 IF OP=42 THEN TOT=TOT*A 
STJ 4940 IF OP=47 THEN TOT=TOT/A 
FWJ 4950 GOTO 4630 
WBJ 4960 TRAP 4430:POSITION N0,22:PRINT SP$(N1,39):POSITION N0,22 
XKJ 4970 PRINT "ENTRY:";:LIMIT=19:GOSUB 5360 
COJ 4980 POKE 752,N1:POSITION 19,11:PRINT SP$(N1,LN);:POSITION 19,11:TRAP 4960 
SRJ 4990 IF A$<>NUL$ THEN A=VAL(A$):GOTO 5040 
EGJ 5000 IF CPY=N0 THEN A=N0:GOTO 5040 
EQJ 5010 IX=CPYH 
CBJ 5020 IF ASC(DEF$(IX+N4))=67 THEN IX=IX+5:IF IX<LEN(DEF$) THEN 5020 
TSJ 5030 IX=IX-5:CPY=N0:GOTO 4630 
XDJ 5040 TRAP 4430:IF TYPE=N0 THEN A=INT(A+0.5):A$=STR$(A):GOTO 5140 
USJ 5050 DM=N0:IF TYPE=36 THEN TYPE=2:DM=N1 
JOJ 5060 IF TYPE<>78 THEN 5090 
MMJ 5070 IF A$(LEN(A$))=CHR$(32) THEN A$=A$(N1,LEN(A$)-N1):GOTO 5070 
FNJ 5080 GOTO 5130 
FHJ 5090 IF TYPE<1 OR TYPE>5 THEN 5430 
LLJ 5100 A=INT(A*(10^TYPE)+0.5)/10^TYPE:A$=STR$(A):I=LEN(STR$(INT(A)))+N1 
ILJ 5110 IF A=INT(A) THEN A$(LEN(A$)+N1)=".":I=LEN(A$) 
NRJ 5120 IF LEN(A$(I-N1))<TYPE+N2 THEN A$(LEN(A$)+N1)="0":GOTO 5120 
EVJ 5130 IF LEN(A$)>LN THEN A$=A$(N1,LN) 
VYJ 5140 I=LEN(A$):T$=A$:A$=SP$(1,LN) 
TLJ 5150 IF DM=N0 THEN A$(LN-I+1)=T$:GOTO 5180 
YYJ 5160 IF (LN-I)>N0 THEN A$(LN-I)="$" 
MMJ 5170 A$(LN-I+1)=T$ 
KHJ 5180 A$=A$(N1,LN) 
PZJ 5190 PRINT A$;:A=USR(ADR(GRAB$),ADR(DAT$),Y*120+X) 
FRJ 5200 GOTO 4870 
UOJ 5210 POSITION N0,22:PRINT SP$(N1,39):POSITION 14,22:PRINT "ENTER DATA" 
AEJ 5220 POKE SK,255:XI=X 
XGJ 5230 POSITION 19,11:POKE SK,255 
IDJ 5240 POKE 694,N0:GET #N1,N 
YNJ 5250 IF N=155 THEN 4630 
ASJ 5260 IF N>31 AND N<125 THEN PRINT #N2;CHR$(N);:XA=XA+N1:GOTO 5300 
SCJ 5270 IF X>XI AND (N=126 OR N=30) THEN 5290 
FRJ 5280 GOTO 5240 
WIJ 5290 X=X-N1:A=USR(ADR(SHOW$),ADR(DAT$),Y*120+X):PRINT #N2;SP1$ 
DAJ 5300 POSITION 19,11:A=USR(ADR(GRAB$),ADR(DAT$),Y*120+X) 
DAJ 5310 X=X+XA:XA=N0:IF X>79 THEN X=N0:Y=Y+N1 
KFJ 5320 Y=Y+YA:YA=N0:IF Y>48 THEN Y=N1 
RJJ 5330 A=USR(ADR(SHOW$),ADR(DAT$),Y*120+X) 
KEJ 5340 IF X-XI>=LN THEN 4630 
FPJ 5350 GOTO 5240 
BBJ 5360 POKE 752,N1:HX=PEEK(C85):POKE C85,HX+LIMIT:PRINT CHR$(25); 
VTJ 5370 POKE C85,HX:POKE 752,N0:PRINT CHR$(30);CHR$(31); 
KCJ 5380 POKE 694,N0:POKE 702,64:GET #N1,N 
NOJ 5390 IF PEEK(93)=89 THEN 5420 
GCJ 5400 IF N<>155 AND N<>156 AND N>128 THEN N=N-128 
UYJ 5410 IF N>30 AND N<125 THEN PRINT CHR$(N); 
QOJ 5420 IF N=126 AND PEEK(C85)>HX THEN PRINT CHR$(N); 
ONJ 5430 IF N=30 AND PEEK(C85)>HX THEN PRINT CHR$(N); 
CAJ 5440 IF N<>156 THEN 5460 
CIJ 5450 POKE C85,HX:PRINT SP$(1,LIMIT);:POKE C85,HX:PRINT NUL$;:POKE SK,255 
CCJ 5460 IF N<>155 THEN 5380 
FFJ 5470 POKE C85,HX:INPUT #N3;A$:A$=A$(N1,LIMIT) 
KQJ 5480 IF A$=SP$(N1,LIMIT) THEN A$=NUL$ 
MMJ 5490 POKE 752,N0:PRINT NUL$;:RETURN 
KRJ 5500 PRINT CHR$(125):POSITION N2,N2:POKE 842,13 
SBJ 5510 POSITION N2,N2:FOR I=480 TO 660 STEP 10:PRINT I:NEXT I 
VKJ 5520 PRINT 680:PRINT "CONT";:POSITION N2,N0:STOP 
SKJ 5530 POSITION N2,N2:FOR I=690 TO 880 STEP 10:PRINT I:NEXT I 
PTJ 5540 PRINT 890;CHR$(32):PRINT "CONT";:POSITION N2,N0:STOP 
JBJ 5550 POKE 842,12 
DSZ 5560 RETURN 
COMPUTER SHOPPER / FEBRUARY 1987 / PAGE 105 

Applying The Atari

by Jeff Brenner

This month we’ll be entering a sample purchase order form for use with November’s Forms Generator program. The purchase order forms are listed for the standard version (the listed magazine version), the text mode of the enhanced version and the graphics mode of the enhanced version (for supported printers.) We also have a special treat for you Atari 800 owners—a super hardware project from Roger E. King of SPACE that allows you to expand your 800 to 256K, 512K, and beyond!

News

MicroMiser Software has announced the release of Micromod 4.0, which it describes as follows: “Micromod 4.0 is a fully integrated database management system, including general ledger, billing, inventory, directory database, scheduling, payroll, and word processing. Though it lacks some features of file manager or spreadsheet programs not widely used in a small business, it incorporates elements of each to meet practical needs of small businesses including powerful options not normally found in 8-bit software, such a “open ended” invoicing. Separation of dated and undated records, and variable record size allow exceptional storage capacity in all functions and minimal disk-switching. Fully utilizes RAM upgrades including the 130XE RAMdisk. 1 drive required, supports up to 4. Compatible with SpartaDOS, MYDOS, DOS XL, DOS 2.5, R-TIME-8, BASIC XE.” Micromod 4.0 lists for $159.95. The company’s customer support has been outstanding. Look for a formal review in an upcoming issue (if I ever get through the 400+ pages of documentation!).

Reader Mail

Dear Jeff:

I have the Atari 800XL computer, 1027 printer and 1050 disk drive. I am trying to “chain print” files [AtariWriter or AtariWriter Plus]. Following instructions, I’ve named two files REPORT.001 and REPORT.002. At the end of the first file, I’ve pressed CTRL V and typed D:REPORT.002. I have saved these two files on disk. However I’ve been unsuccessful in my attempts to load the two files chained in the computer. I can load them one at a time, but then they are not chained. Can you tell me how to load the two files chained into the computer?

Duane Moen
Park Ridge, IL

The chain file command (CTRL-V) is used to combine two or more files (generally files that won’t fit into memory at the same time) into a single document when printing. The important words here are “when printing.” The files are not automatically chained in computer memory when the CTRL-V command is used. Rather, the computer first prints out the document residing in memory (such as REPORT.001), and then prints the chained file (REPORT.002) as it reads the file from disk. Therefore, if you print out your REPORT.001 file, you should find that both REPORT.001 and REPORT.002 are printed, although they will not appear in computer memory at the same time.

If both REPORT.001 and REPORT.002 can fit into memory together, and you want to merge the two files together into one file, use the OPTION-L command. To merge REPORT.001 and REPORT.002, which is apparently what you are trying to do, you would load REPORT.001 and move the cursor to the bottom of the file. Then type OPTION-L. When asked for the file name, enter REPORT.002. Providing there is enough room for both files to coexist, REPORT.002 will be loaded in from disk and appended to the existing REPORT.001. You could then save this combined file as a new name, if you want.

Dear Jeff:

My name is Chuck Leazott. I’m the president of the *PAC* User Group in Rantoul, IL. Recently, you did us a great service by talking about our newsletter in the November “Applying The Atari” column (page 85). Our User Group has done nothing but praise you for this article. We want to take this opportunity to thank you for your work. Since the article hit the newsstands, we have received letters and requests from folks nationwide. Most of the requests have been requests for copies of the newsletters, which we’ve done. Some, however, have been callers to the Bulletin Board (Network: Atari Express!), and they have stated that they saw your article, and wanted to join the user group long distance.

Chuck Leazott
Rantoul, IL

Terrific! I’m glad to be of help I hope your letter will inspire other users’ groups to send in their newsletters.

Newsletters

In the mail for this month comes “The Atari Information Digest,” the newsletter of the Atari Boosters League East (ABLE). ABLE’s newsletter is packed with both 8-bit and 16-bit Atari information and has sections for new games, news and rumors, new software, and unique hardware.

November’s 35-page issue listed an artificial-intelligence type program for use with Computereyes that counts the value of loose change placed in front of the video camera. Contact: Atari Boosters League, P.O. Box 1172, Winter Park, FL 32790.

Does your group publish a newsletter that we haven’t heard about yet? If so, send it in!

Purchase Order for Forms Generator

Here’s a predefined purchase order that you can use with November’s Forms Generator program (the listed or enhanced version). Type in the program for your version of the program. For the listed magazine version, enter the program under “PURCHASE ORDER FOR STANDARD VERSION.” For the enhanced diskette version, enter either of the programs under “PURCHASE ORDER FOR ENHANCED.” One of these is for graphics and another is for text. If you are using enhanced Forms Generator with a supported graphics printer, then type in the graphics version (you could also use the text version for faster printing). If you have another printer, such as a letter quality printer, you must use the text version. The enhanced version can also use the standard version’s program, if a shorter form (in text mode) is needed.

Once you type in the program (using Program Perfect, of course), save the program on disk and insert a blank, formatted disk that you want to use to store forms, When you RUN the purchase order program, you’ll be instructed to “PRESS START TO SAVE.” Press START and the program will create a file on your diskette that can be loaded directly into Forms Generator. Depending on whether you are using the standard version, enhanced text version or enhanced graphics version, the file will be named PURCHS.FRM, PURCHS1.FRM, or PURCHS2.FRM.

Using The Form

Load Forms Generator and select the LOAD DATA option. Type the file name of the form that you created to load the form into memory. Select the ENTER DATA AND CALCULATE option to begin entering data. The cursor will move to the “TO” box and you can type in the name and address of the company to which you are sending the purchase order. Enter each line and press RETURN. Next, enter the information for the SHIP TO box, ORDER NUM box, ORDER DATE box, etc. You can leave any box blank by pressing RETURN by itself. Once data for the first line of boxes has been entered, the cursor moves to the QuanTITY box. An “ENTRY:” prompt will be printed on the bottom of the screen. Type the quantity of the first product that you want to order. This quantity is typed on the bottom of the screen but is then transferred in the proper format to the correct location on the form itself. Next, enter the ITEM #/DESCRIPTION, and the UNIT PRICE. Forms Generator will automatically calculate and put the extended price in the EXTENDED PRICE column.

Continue entering quantities, product description and unit prices until you have completed your purchase order. Then press RETURN by itself in response to the entry prompt for the next QUANTITY box. Forms Generator will then move to the EXTENDED PRICE column and add up all of the prices. It will put the subtotal on the form, add in 5% shipping, and put the total in the total box, all automatically! It’s a lot of fun to watch Forms Generator perform its on-screen calculation.

You can use the EDIT FORM option to modify any part of the form (i.e. change “THE COMPUTER COMPANY” to your own name at the top of the form, or change the shipping charge rate). Or, you can easily convert the purchase order into an order form by changing the title on the top right of the screen, and changing SHIPPING at the bottom to SALES TAX. You can easily keep a record of your orders by either printing out a duplicate form, or saving the filled form onto diskette.

Monthly Diskette

This month’s diskette will contain the purchase order form files described above, as well as several other forms (statements, memos, etc.) for use with Forms Generator. Versions will be included for both the standard and enhanced (text and graphics) versions.

Atari 800+++ rek 256-512-1-2-4 MEG!

In the March 1986 “Atari Help” column, I published Claus Buchholz’s modification to his article in BYTE, “The Quarter-Meg Atari.” The project expanded the memory of an Atari 800XL to 256K, while maintaining 16K bank switching like the 130XE (as opposed to 32K bank switching). Numerous readers wrote in that they had added the circuit to their XLs and loved it. But to this day I am still receiving letters from Atari 800 owners requesting that a similar project for the 800 be presented, Well, this month we have a memory expansion project specifically for you 800 owners, thanks to Roger E. King of SPACE. Roger writes:

First, credit where credit is due. D.G. Byrd must be recognized for his truly logical approach to more memory in the 800 thru bankswitching, David Lloyd brought us AXLON compatibility and Kurt Grittener and his MAAUG members showed us the XL’s could support more than 256K. Terry Shingara and Steve Jones were my cohorts in simplifying and redesigning areas to make them easier to install.

In order to make the original 256K mod a one-board affair, the following was accomplished. “Reset” from the processor board was replaced with a resistor/cap circuit. Pins “18” to “s” is now a RAMboard jumper. “D7xx” is now a board-to-board jumper. That’s all folks...for the 256K portion of our update.

For AXLON compatibility, this circuit needed a little help because it hung up on programs requiring warmstarts. This new design supports “D7xx and AXLON” very well. The circuit will falter if “D8xx” is accessed, which is very unlikely.

Can you put more than 256K on your 800+? You bet’cha! I’ve been installing and helping fellow Atarians perform this update since January. My scheme uses Mr. Byrd’s “D7xx,” the data going there and a signal called “CAS.” In this design using the data (MBD0 through MBD6) will enable the addressing of two megaytes of memory. By using MBD7 further, you can access an additional two megabytes. Theoretically, I’m just using the “D7” decode to gate the addresses. If I used the “xx” portion as well, I’d have 00-ff (0-225) gates. This could mean 255x4 meg. This is a lot more ambitious than most of us are willing to attempt. I bring this out so you can get a glimpse of the hidden powers still available for future enhancements.

Like others before me, I present these circuits and ideas as is, free. I would like to see an expansion like this attract programs that put it to not only efficient, but inspiring use. Here’s hoping your inspiration is in this space next time around.

Note: Since writing this, Steve Jones (JonesWare, P.O. Box 7037, Mechanicsburg, PA 17055-7037) has come up with modifications to SmartDOS allowing one or two RAMdisks, SS or SD, and Archiver, allowing one pass copying. These mods recognize AXLON/D7xx/D301 addressing schemes. They’re fortuitive buys at a modest sum.

Roger E. King SPACE
P.O. Box 1446
Harrisburg, PA 17108-1446

On behalf of the many memory-hungry Atari 800 users out there, I thank you, Roger, for sharing your project. The traditional holographic sticker is on its way to you for your contribution.

WARNING: Neither the author or Computer Shopper is responsible for any damage to computers caused by performing memory expansion modifications.

THE PREMIER OF THE 800++++++++ (2 MEG/ 4 MEG AXLON/D7xx COMPATIBLE) 

Figure REK 7 
Axlon/D7xx Wiring Diagram 
(Piggyback this chip onto 2402 of 
personality bd w/pins 7,14) 

Figure REK 8 
256k-4MEG Diagram 

Figure 6 
Modified 256k Diagram 

D7/AXLON - 256K 

D7/AXLON - 256K ++++++++ 

NOTE: Unlike David Byrd’s 256K, all wiring is on the ram and personality 
boards with one jumper between them to provide "D7xx and/or Axlon". 
Figure 6 may be used alone with jumper to 2401-7 for 256K. 
REK 8 may be used to enable from one to 8-256K banks of additional 
memory. And lastly, Figure REK 7 can be implemented with either 
setup to provide Axlon/D7xx usage. To go beyond the 8 additional 
banks, gate MBD7 with circuit outputs in Figure REK8. GOOD LUCK! 

REK 

Next Month

More reader mail, news, and graphics—yeah!

Readers’ questions, comments and contributions are welcome. Please enclose a self-addressed, stamped envelope (SASE) for a personal reply.

Due to volume of letters received, only a selected number of personal responses can be given each month.

The forms diskette, for use with Forms Generator is available from the author for $7.00, postpaid. Please make checks payable to “Jeff Brenner” and specify your disk drive model.

“Program Perfect” is a utility used to check for typing errors while entering programs from this column. Readers can send $5 for a diskette or a SASE for a listing of this program.

Address all correspondence to: Jeff Brenner, “Applying The Atari 2/87”, c/o Computer Shopper, P.O. Box F, Titusville, FL 32781-9990. •

PURCHASE ORDER FOR ENHANCED (GRAPHICS) 

THE 10 REM PURCHASE ORDER FORM - GRAPHICS 
PWE 15 REM FOR ENHANCED FORMS GENERATOR 
KGJ 20 REM COPYRIGHT 1986 JEFF BRENNER 
TPJ 30 GRAPHICS 0:PRINT :PRINT "INSERT DISK ON WHICH YOU WANT TO SAVE" 
DBJ 40 POKE 85,9:PRINT "THE PURCHASE ORDER FORM":PRINT :POKE 85,11:POKE 752,1 
ESJ 50 PRINT "PRESS ";CHR$(211);CHR$(212);CHR$(193);CHR$(210);CHR$(212);" "; 
SVJ 60 PRINT "TO SAVE" 
LUJ 70 IF PEEK(53279)<>6 THEN 70 
STE 80 OPEN #1,8,0,"D:PURCHS2.FRM" 
KIE 85 J=0:READ N:IF N=-1 THEN CLOSE #1:PRINT "FINISHED":END 
EFA 90 IF N=0 OR N=13 OR N=63 OR N=128 THEN READ J 
IUD 91 IF N=1000 THEN READ N,J 
SPE 95 FOR I=1 TO J:PUT #1,N:NEXT I:GOTO 85 
NYJ 100 DATA 73,68,45,70,71,16,45,82,69,86,49,155 
SCJ 110 DATA 0,80,155,0,1,128,5,180,168,165,128,1,163,175,173,176 
NKJ 120 DATA 181,180,165,178,128,1,163,175,173,176,161,174,185 
WAJ 130 DATA 128,5,0,18,72,128,1,74,0,1,128,1,0,1,128,1,0,1,128,2,74 
OFJ 140 DATA 0,1,72,128,1,74,0,1,128,1,0,1,128,1,0,1,72,128,1,74 
PDJ 150 DATA 0,1,72,128,1,74,0,1,128,3,155,0,1,128,8,145,144,144 
FKB 160 DATA 128,1,164,169,179,171,128,1,164,178,169,182,165,128,8,0,18 
KIB 162 DATA 128,1,0,1,128,1,0,1,128,1,0,1,128,1,0,1,128,1,0,1,128,1,0,1,128 
GIB 164 DATA 1,0,1,128,1,0,1,128,1,0,1,128,1,0,1,128,1,0,1,128,1,0,1,128,1 
BBD 166 DATA 0,3,128,1,0,2,155 
NGJ 170 DATA 0,1,179,169,172,169,163,175,174,128,1,182,161,172  
GMJ 180 DATA 172,165,185,140,128,1,163,161,128,2,1000,144,5  
LAJ 190 DATA 141,1000,144,4,0,18,128,2,200,0,1,128,1,0,1,128,1,0,1,128,2,200 
MPJ 200 DATA 0,1,128,1,0,3,128,3,0,1,128,3,0,1,202,128,1,74,0,1,128,2,0,1,155 
VCB 210 DATA 0,49,128,1,0,3,128,1,0,1,128,1,0,1,128,1,202,74,0,1,128 
TYB 212 DATA 1,0,1,128,1,0,1,128,1,0,1,128,1,0,1,128,1,0,1,128,1,0,3 
MBF 214 DATA 128,1,0,1,128,1,0,2,155 
WRJ 220 DATA 0,49,128,1,0,3,202,128,1,200,0,1,128,1,0,1,128,1,0,1,202 
YEJ 230 DATA 128,1,200,0,1,128,1,0,1,128,1,0,1,128,1,0,1,128,1,0,1,202 
KOJ 240 DATA 128,1,200,0,1,128,3,155,0,80,155,0,55,72,128,1,74,0,1,128,2,74 
JPB 250 DATA 0,1,128,2,74,0,1,128,3,0,1,128,2,74,0,6,155,0,55,128,1,0,1,128 
UCB 252 DATA 1,0,1,128,1,0,1,128,1,0,1,128,1,0,1,128,1,0,1,128,1,0,3 
MJF 254 DATA 128,1,0,1,128,1,0,6,155 
IVE 260 DATA 0,1,52,47,0,52,128,1,0,1,128,1,0,1,128,2,200,0,1,128,1,0,1,128 
POE 265 DATA 1,0,1,128,2,0,2,128,2,200 
LXJ 270 DATA 0,6,155,0,1,81,82,0,35,82,69,0,15,128,1,0,1,128,1,0,1,128,1,202 
AJJ 280 DATA 74,0,1,128,1,0,1,128,1,0,1,128,1,0,3,128,1,202,74,0,6,155 
DHJ 290 DATA 0,1,124,0,37,124,0,15,202,128,1,200,0,1,128,1,0,1,128,1,0,1 
GHJ 300 DATA 128,2,200,0,1,128,3,0,1,128,1,0,1,128,1,0,6,155,0,3,77,77,77 
NST 310 DATA 1000,77,32 
BPJ 330 DATA 0,42,155,0,48,217 
DTJ 340 DATA 128,12,179,168,169,176,128,1,180,175,128,11,89,155,0,3,77 
NYT 350 DATA 1000,77,34 
JKJ 370 DATA 0,10,124 
KXJ 380 DATA 0,30,124,155,0,48,124,0,30,124,155,0,1,124,0,1,77 
OCT 390 DATA 1000,77,34 
BFT 410 DATA 0,1,124,0,8,124,0,30,124,155,0,1,90,82,0,35,82,67,0,8,124 
WNJ 430 DATA 0,30,124,155,0,48,90,82,82,82,82,82,82,82 
NST 440 DATA 1000,82,23 
STJ 460 DATA 67,155,0,80,155,0,80,155,0,1,217,175,178,164,165,178 
DQJ 470 DATA 128,1,174,181,173,128,1,252,175,178,164,165,178,128,1,164 
YMJ 480 DATA 161,180,165,128,1,252,164,165,172,169,182,142,128,1,164 
RSJ 490 DATA 161,180,165,252,128,1,179,168,169,176,128,1,182,169 
TWJ 500 DATA 161,128,1,252,128,1,166,142,175,142,162,142,128,1,176 
RMJ 510 DATA 175,169,174,180,128,1,252,128,5,180,165,178,173,179 
XMJ 520 DATA 128,6,89,155,0,1,124,0,10,124,0,11,124,0,11,124,0,10,124 
ANJ 530 DATA 0,14,124,0,16,124,155,0,1,90,82,82,82,82,82 
LEJ 540 DATA 1000,82,5,88,1000,82,6 
LFJ 550 DATA 1000,82,5,88,1000,82,6 
LGJ 560 DATA 1000,82,5,88,1000,82,6 
LHJ 570 DATA 1000,82,4,88,1000,82,7 
LIJ 580 DATA 1000,82,7,88,1000,82,4 
NMJ 590 DATA 1000,82,12 
KYJ 600 DATA 67,155,0,1,217,128,1,177,181,161,174,180,169,180 
UOJ 610 DATA 185,128,1,252,128,9,169,180,165,173,128,1,131,143,164 
OMJ 620 DATA 165,179,163,178,169,176,180,169,175,174,128,9,252 
ROJ 630 DATA 181,174,169,180,128,1,176,178,169,163,165,128,4,252 
OAJ 640 DATA 165,184,180,165,174,164,165,164,128,1,176,178,169 
ENJ 650 DATA 163,165,89,155,0,1,124,33,16,0,8,124,0,36,124 
OMJ 660 DATA 34,16,0,12,124,35,16,0,12,124,155,0,1,124,13,10,124 
EOJ 670 DATA 13,36,124,13,14,124,13,14,124,155,0,1,124,0,10,124,0,36,124 
ELJ 680 DATA 0,14,124,0,14,124,155,0,1,124,13,10,124,13,36,124,13,14,124 
AMJ 690 DATA 13,14,124,155,0,1,124,0,10,124,0,36,124,0,14,124,0,14,124 
WFJ 700 DATA 155,0,1,124,13,10,124,13,36,124,13,14,124,13,14,124,155 
VFJ 710 DATA 0,1,124,0,10,124,0,36,124,0,14,124,0,14,124,155,0,1,124 
GCJ 720 DATA 13,10,124,13,36,124,13,14,124,13,14,124,155,0,1,124,0,10,124 
CLJ 730 DATA 0,36,124,0,14,124,0,14,124,155,0,1,124,13,10,124,13,36,124 
CIJ 740 DATA 13,14,124,13,14,124,155,0,1,124,0,10,124,0,36,124,0,14,124 
GJJ 750 DATA 0,14,124,155,0,1,124,13,10,124,13,36,124,13,14,124,13,14,124 
OLJ 760 DATA 155,0,1,124,0,10,124,0,36,124,0,14,124,0,14,124,155 
ELJ 770 DATA 0,1,124,13,10,124,13,36,124,13,14,124,13,14,124,155,0,1,124 
AIJ 780 DATA 0,10,124,0,36,124,0,14,124,0,14,124,155,0,1,124,13,10,124 
ERJ 790 DATA 13,36,124,13,14,124,13,14,124,155,0,1,124,0,10,124,0,36,124 
EFJ 800 DATA 0,14,124,0,14,124,155,0,1,124,13,10,124,13,36,124,13,14,124 
AGJ 810 DATA 13,14,124,155,0,1,124,0,10,124,0,36,124,0,14,124,0,14,124 
WIJ 820 DATA 155,0,1,124,13,10,124,13,36,124,13,14,124,13,14,124,155 
VIJ 830 DATA 0,1,124,0,10,124,0,36,124,0,14,124,0,14,124,155,0,1,124 
GFJ 840 DATA 13,10,124,13,36,124,13,14,124,13,14,124,155,0,1,124,0,10,124 
COJ 850 DATA 0,36,124,0,14,124,0,14,124,155,0,1,124,13,10,124,13,36,124 
CLJ 860 DATA 13,14,124,13,14,124,155,0,1,124,0,10,124,0,36,124,0,14,124 
GMJ 870 DATA 0,14,124,155,0,1,124,13,10,124,13,36,124,13,14,124,13,14,124 
OOJ 880 DATA 155,0,1,124,0,10,124,0,36,124,0,14,124,0,14,124,155 
EOJ 890 DATA 0,1,124,13,10,124,13,36,124,13,14,124,13,14,124,155,0,1,124 
ACJ 900 DATA 0,10,124,0,36,124,0,14,124,0,14,124,155,0,1,124,13,10,124 
ELJ 910 DATA 13,36,124,13,14,124,13,14,124,155,0,1,124,0,10,124,0,36,124 
AQJ 920 DATA 0,14,124,0,14,124,155,0,1,65,82,82,82,82,82 
LHJ 930 DATA 1000,82,5,88,1000,82,6 
NLJ 940 DATA 1000,82,12 
NMJ 950 DATA 1000,82,12 
LFJ 960 DATA 1000,82,6,83,1000,82,5  
LMJ 970 DATA 1000,82,9,68,13,14,124 
XRJ 980 DATA 155,0,1,124,0,47,124,0,5,51,53,34,52,47,52 
JNJ 990 DATA 33,44,0,1,124,36,16,0,12,124,155,0,1,124,0,47,65  
NRJ 1000 DATA 82,82,82,82,82,82,82,82,82,82,82,82 
FVJ 1010 DATA 82,82,68,13,14,124,155,0,1,124,0,47,124,51,40 
WQJ 1020 DATA 41,48,48,41,46,39,0,1,32,0,1,21,5,0,1,124 
LST 1030 DATA 37,16,0,12,124,155,0,1,124,0,47,65,1000,82,14,68 
KYJ 1050 DATA 13,14,124,155,0,1,124,33,117,116,104,111,114,105  
FDJ 1060 DATA 122,101,100,0,1,51,105,103,110,97,116,117,114 
CFJ 1070 DATA 101,63,27,124,0,8,52,47,52,33,44,0,1,124,38 
WLJ 1080 DATA 16,0,12,124,155,0,1,90,82,82,82,87,87,82 
PGJ 1090 DATA 1000,82,14 
CIT 1100 DATA 87,87,1000,82,25 
DTT 1120 DATA 88,1000,82,14,88,1000,82,14,67 
RAT 1140 DATA 155,0,5,90,67,47,50,41,39,41,46,33,44 
OYJ 1160 DATA 0,7,90,67,36,53,48,44,41,35,33,52,37 
IDJ 1170 DATA 0,47,155,128,2,190,128,10,190,128,23,190,128,10,190,190,128 
SGJ 1180 DATA 9,190,128,3,190,128,16,155,155,50,55,53,155,32,3,12 
JMJ 1190 DATA 29,84,32,3,14,29,84,32,3,16,29,84 
MWJ 1200 DATA 32,49,15,30,84,32,49,16,30,84,32,49 
KIJ 1210 DATA 17,30,84,32,49,18,30,84,32,2,23,10 
PSJ 1220 DATA 84,32,13,1,23,11,84,32,25,23,11,84,32 
QDJ 1230 DATA 37,23,10,84,32,48,23,14,84,32,63,1,23 
OLJ 1240 DATA 16,84,32,2,26,10,78,42,13,1,26,36,84 
TNJ 1250 DATA 42,50,26,14,50,61,65,26,14,50,32,0,1,28 
UFJ 1260 DATA 0,1,67,32,0,1,30,0,1,67,32,0,1,32,0,1,67  
UUJ 1270 DATA 155,32,0,1,34,0,1,67,32,0,1,36,0,1,67,32 
UHJ 1280 DATA 0,1,38,0,1,67,32,0,1,40,0,1,67,32,0,1,42 
USJ 1290 DATA 0,1,67,32,0,1,44,0,1,67,32,0,1,46,0,1,67 
ASJ 1300 DATA 32,0,1,48,0,1,67,32,0,1,50,0,1,67,32,0,1,52 
UNJ 1310 DATA 0,1,67,32,0,1,54,0,1,67,32,0,1,56,0,1,67 
MWJ 1320 DATA 32,65,26,14,70,43,65,28,14,70,43,65 
MJJ 1330 DATA 30,14,70,43,65,32,14,70,43,65,34,14 
MYJ 1340 DATA 70,43,65,36,14,70,43,65,38,14,70,43 
OTJ 1350 DATA 65,40,14,70,155,43,65,42,14,70,43,65 
NBJ 1360 DATA 44,14,70,43,65,46,14,70,43,65,48,14 
MTJ 1370 DATA 70,43,65,50,14,70,43,65,52,14,70,43 
NMJ 1380 DATA 65,54,14,70,43,65,56,14,70,61,65,58 
KSJ 1390 DATA 14,50,32,65,58,14,70,42,60,60,3,70 
MUJ 1400 DATA 61,65,60,14,50,32,65,58,14,70,43,65 
DNZ 1410 DATA 60,14,70,61,65,62,14,36,155,-1 
PURCHASE ORDER FOR STANDARD VERSION 

RHE 10 REM PURCHASE ORDER FORM 
OIE 15 REM FOR STANDARD LISTED VERSION 
KGJ 20 REM COPYRIGHT 1986 JEFF BRENNER 
TPJ 30 GRAPHICS 0:PRINT :PRINT "INSERT DISK ON WHICH YOU WANT TO SAVE" 
DBJ 40 POKE 85,9:PRINT "THE PURCHASE ORDER FORM":PRINT :POKE 85,11:POKE 752,1 
ESJ 50 PRINT "PRESS ";CHR$(211);CHR$(212);CHR$(193);CHR$(210);CHR$(212);" "; 
SVJ 60 PRINT "TO SAVE" 
LUJ 70 IF PEEK(53279)<>6 THEN 70 
QVE 80 OPEN #1,8,0,"D:PURCHS.FRM" 
KIE 85 J=0:READ N:IF N=-1 THEN CLOSE #1:PRINT "FINISHED":END 
EJE 90 IF N=0 OR N=13 OR N=63 OR N=128 THEN READ J 
SPE 95 FOR I=1 TO J:PUT #1,N:NEXT I:GOTO 85 
OEJ 100 DATA 73,68,45,70,71,49,45,82,69,86,49,155 
TRJ 110 DATA 0,80,155,0,6,52,40,37,0,1,35,47,45,48,53 
WBJ 120 DATA 52,37,50,0,1,35,47,45,48,33,46,57,0,23,48 
QVJ 130 DATA 48,48,0,1,53,0,1,53,0,1,50,50,0,2,35,35 
QBJ 140 DATA 35,0,1,40,0,1,40,0,1,33,33,33,0,1,51,51 
RTJ 150 DATA 51,0,1,37,37,37,155,0,9,17,16,16,0,1,36 
XFJ 160 DATA 41,51,43,0,1,36,50,41,54,37,0,26,48,0,1,48 
TMJ 170 DATA 0,1,53,0,1,53,0,1,50,0,1,50,0,1,35,0,1,35 
TJJ 180 DATA 0,1,40,0,1,40,0,1,33,0,1,33,0,1,51,0,3,37 
RLJ 190 DATA 0,2,155,0,1,51,41,44,41,35,47,46,0,1,54 
NQJ 200 DATA 33,44,44,37,57,12,0,1,35,33,0,2,16,16 
SEJ 210 DATA 16,16,16,13,1,16,16,16,16,0,18,48,48,48 
RSJ 220 DATA 0,1,53,0,1,53,0,1,50,50,0,2,35,0,3,40,40 
OWJ 230 DATA 40,0,1,33,33,33,0,1,51,51,51,0,1,37,37 
XXJ 240 DATA 0,1,155,0,49,48,0,3,53,0,1,53,0,1,50,0,1,50 
TFJ 250 DATA 0,1,35,0,1,35,0,1,40,0,1,40,0,1,33,0,1,33 
WXJ 260 DATA 0,3,51,0,1,37,0,2,155,0,49,48,0,3,53,53,53 
RUJ 270 DATA 0,1,50,0,1,50,0,1,35,35,35,0,1,40,0,1,40 
QUJ 280 DATA 0,1,33,0,1,33,0,1,51,51,51,0,1,37,37,37 
HNJ 290 DATA 155,0,80,155,0,56,47,0,2,50,50,0,2,36,36,0,2,37 
DFJ 300 DATA 37,37,0,1,50,50,0,7,155,0,55,47,0,1,47,0,1,50 
TLJ 310 DATA 0,1,50,0,1,36,0,1,36,0,1,37,0,3,50,0,1,50 
WMJ 320 DATA 0,6,155,0,1,52,47,0,52,47,0,1,47,0,1,50,50 
UMJ 330 DATA 0,2,36,0,1,36,0,1,37,37,0,2,50,50,0,7,155 
FTJ 340 DATA 0,1,13,2,0,35,13,2,0,15,47,0,1,47,0,1,50,0,1,50 
VWJ 350 DATA 0,1,36,0,1,36,0,1,37,0,3,50,0,1,50,0,6,155 
CPJ 360 DATA 0,1,124,0,37,124,0,16,47,0,2,50,0,1,50,0,1,36 
XSJ 370 DATA 36,0,2,37,37,37,0,1,50,0,1,50,0,6,155,0,3,13,35,0,42,155 
CCJ 380 DATA 0,48,14,63,12,51,40,41,48,0,1,52,47,63,11,14 
SEJ 390 DATA 155,0,3,13,35,0,10,124,0,30,124,155,0,48,124,0,30,124 
MAJ 400 DATA 155,0,1,124,0,1,13,35,0,1,124,0,8,124,0,30,124,155 
CCJ 410 DATA 0,1,13,2,0,35,13,2,0,8,124,0,30,124,155,0,48,124,63,30,124 
AJJ 420 DATA 155,0,80,155,0,80,155,0,1,14,47,50,36,37,50 
RUJ 430 DATA 0,1,46,53,45,63,2,47,50,36,37,50,0,1,36 
QEJ 440 DATA 33,52,37,63,2,36,37,44,41,54,14,0,1,36 
PXJ 450 DATA 33,52,37,63,2,51,40,41,48,0,1,54,41,33 
QLJ 460 DATA 63,3,38,14,47,14,34,14,0,1,48,47,41,46 
XWJ 470 DATA 52,63,7,52,37,50,45,51,63,6,14,155,0,1,124 
RGJ 480 DATA 0,10,124,0,11,124,0,11,124,0,10,124,0,14,124,0,16,124 
IVJ 490 DATA 155,0,1,124,63,10,124,63,11,124,63,11,124,63,10,124,63,14,124 
AMJ 500 DATA 63,16,124,155,0,1,14,63,1,49,53,33,46,52,41 
QCJ 510 DATA 52,57,63,11,41,52,37,45,0,1,3,15,36,37 
QQJ 520 DATA 51,35,50,41,48,52,41,47,46,63,12,53,46 
QHJ 530 DATA 41,52,0,1,48,50,41,35,37,63,3,37,56,52 
MVJ 540 DATA 37,46,36,37,36,0,1,48,50,41,35,37,14 
OIJ 550 DATA 155,0,1,124,0,10,124,0,36,124,0,14,124,0,14,124,155 
EIJ 560 DATA 0,1,124,13,10,124,13,36,124,13,14,124,13,14,124,155,0,1,124 
AFJ 570 DATA 0,10,124,0,36,124,0,14,124,0,14,124,155,0,1,124,13,10,124 
EOJ 580 DATA 13,36,124,13,14,124,13,14,124,155,0,1,124,0,10,124,0,36,124 
ELJ 590 DATA 0,14,124,0,14,124,155,0,1,124,13,10,124,13,36,124,13,14,124 
ADJ 600 DATA 13,14,124,155,0,1,124,0,10,124,0,36,124,0,14,124,0,14,124 
WFJ 610 DATA 155,0,1,124,13,10,124,13,36,124,13,14,124,13,14,124,155 
VFJ 620 DATA 0,1,124,0,10,124,0,36,124,0,14,124,0,14,124,155,0,1,124 
GCJ 630 DATA 13,10,124,13,36,124,13,14,124,13,14,124,155,0,1,124,0,10,124 
CLJ 640 DATA 0,36,124,0,14,124,0,14,124,155,0,1,124,13,10,124,13,36,124 
CIJ 650 DATA 13,14,124,13,14,124,155,0,1,124,0,10,124,0,36,124,0,14,124 
GJJ 660 DATA 0,14,124,155,0,1,124,13,10,124,13,36,124,13,14,124,13,14,124 
OLJ 670 DATA 155,0,1,124,0,10,124,0,36,124,0,14,124,0,14,124,155 
FFJ 680 DATA 0,1,124,63,10,124,63,36,124,63,14,124,63,14,124,155,0,1,124 
UEJ 690 DATA 0,47,124,0,6,51,53,34,52,47,52,33,44,124 
SVJ 700 DATA 0,14,124,155,0,1,124,0,47,124,63,14,124,63,14,124,155 
TYJ 710 DATA 0,1,124,0,47,124,51,40,41,48,48,41,46,39 
AVJ 720 DATA 0,1,32,0,1,14,16,21,124,0,14,124,155,0,1,124 
YPJ 730 DATA 0,47,124,63,14,124,63,14,124,155,0,1,124,0,47,124,0,9,52 
GEJ 740 DATA 47,52,33,44,124,0,14,124,155,0,1,124,63,47,124 
DZJ 750 DATA 63,14,124,63,14,124,155,0,7,8,0,1,9,0,1,47,50 
MDJ 760 DATA 41,39,41,46,33,44,0,6,8,0,1,9,0,1,36 
BDJ 770 DATA 53,48,44,41,35,33,52,37,0,42,155,128,10,190 
IBJ 780 DATA 128,9,190,128,9,190,128,9,190,128,9,190,128,9,190,128,9,190 
VJJ 790 DATA 128,9,155,155,49,57,53,155,32,3,12,35,84 
QYJ 800 DATA 32,0,1,14,0,1,67,32,0,1,16,0,1,67,32,49 
WPJ 810 DATA 15,30,84,32,0,1,16,0,1,67,32,0,1,17,0,1,67 
URJ 820 DATA 32,0,1,18,0,1,67,32,2,23,10,84,32,13,1,23 
KPJ 830 DATA 11,84,32,25,23,11,84,32,37,23,10,84 
MPJ 840 DATA 32,48,23,14,84,32,63,1,23,16,84,32,2 
OPJ 850 DATA 26,10,78,42,13,1,26,36,84,42,50,26,14 
OAJ 860 DATA 50,61,65,26,14,50,32,0,1,28,0,1,67,32 
BAJ 870 DATA 0,1,30,0,1,67,32,0,1,32,0,1,67,155,32,0,1,34 
TCJ 880 DATA 0,1,67,32,0,1,36,0,1,67,32,0,1,38,0,1,67 
OFJ 890 DATA 32,0,1,40,0,1,67,32,65,26,14,70,43,65 
KSJ 900 DATA 28,14,70,43,65,30,14,70,43,65,32,14 
LAJ 910 DATA 70,43,65,34,14,70,43,65,36,14,70,43 
LDJ 920 DATA 65,38,14,70,43,65,40,14,70,61,65,42 
IRJ 930 DATA 14,50,32,65,42,14,70,42,61,44,3,70 
LBJ 940 DATA 61,65,44,14,50,32,65,42,14,70,43,65 
CDZ 950 DATA 44,14,70,61,65,46,14,36,155,-1 
PURCHASE ORDER FOR ENHANCED (TEXT) 

IZE 10 REM PURCHASE ORDER FORM - TEXT 
PWE 15 REM FOR ENHANCED FORMS GENERATOR 
KGJ 20 REM COPYRIGHT 1986 JEFF BRENNER 
TPJ 30 GRAPHICS 0:PRINT :PRINT "INSERT DISK ON WHICH YOU WANT TO SAVE" 
DBJ 40 POKE 85,9:PRINT "THE PURCHASE ORDER FORM":PRINT :POKE 85,11:POKE 752,1 
ESJ 50 PRINT "PRESS ";CHR$(211);CHR$(212);CHR$(193);CHR$(210);CHR$(212);" "; 
SVJ 60 PRINT "TO SAVE" 
LUJ 70 IF PEEK(53279)<>6 THEN 70 
SSE 80 OPEN #1,8,0,"D:PURCHS1.FRM" 
KBE 85 J=0:READ N:IF N=-1 THEN CLOSE #1:POKE 752,0:PRINT "FINISHED":END 
EJE 90 IF N=0 OR N=13 OR N=63 OR N=128 THEN READ J 
SPE 95 FOR I=1 TO J:PUT #1,N:NEXT I:GOTO 85 
NYJ 100 DATA 73,68,45,70,71,16,45,82,69,86,49,155 
TRJ 110 DATA 0,80,155,0,6,52,40,37,0,1,35,47,45,48,53 
WBJ 120 DATA 52,37,50,0,1,35,47,45,48,33,46,57,0,23,48 
QVJ 130 DATA 48,48,0,1,53,0,1,53,0,1,50,50,0,2,35,35 
QBJ 140 DATA 35,0,1,40,0,1,40,0,1,33,33,33,0,1,51,51 
RTJ 150 DATA 51,0,1,37,37,37,155,0,9,17,16,16,0,1,36 
XFJ 160 DATA 41,51,43,0,1,36,50,41,54,37,0,26,48,0,1,48 
TMJ 170 DATA 0,1,53,0,1,53,0,1,50,0,1,50,0,1,35,0,1,35 
TJJ 180 DATA 0,1,40,0,1,40,0,1,33,0,1,33,0,1,51,0,3,37 
RLJ 190 DATA 0,2,155,0,1,51,41,44,41,35,47,46,0,1,54 
NQJ 200 DATA 33,44,44,37,57,12,0,1,35,33,0,2,16,16 
SEJ 210 DATA 16,16,16,13,1,16,16,16,16,0,18,48,48,48 
RSJ 220 DATA 0,1,53,0,1,53,0,1,50,50,0,2,35,0,3,40,40 
OWJ 230 DATA 40,0,1,33,33,33,0,1,51,51,51,0,1,37,37 
XXJ 240 DATA 0,1,155,0,49,48,0,3,53,0,1,53,0,1,50,0,1,50 
TFJ 250 DATA 0,1,35,0,1,35,0,1,40,0,1,40,0,1,33,0,1,33 
WXJ 260 DATA 0,3,51,0,1,37,0,2,155,0,49,48,0,3,53,53,53 
RUJ 270 DATA 0,1,50,0,1,50,0,1,35,35,35,0,1,40,0,1,40 
QUJ 280 DATA 0,1,33,0,1,33,0,1,51,51,51,0,1,37,37,37 
HNJ 290 DATA 155,0,80,155,0,56,47,0,2,50,50,0,2,36,36,0,2,37 
DFJ 300 DATA 37,37,0,1,50,50,0,7,155,0,55,47,0,1,47,0,1,50 
TLJ 310 DATA 0,1,50,0,1,36,0,1,36,0,1,37,0,3,50,0,1,50 
WMJ 320 DATA 0,6,155,0,1,52,47,0,52,47,0,1,47,0,1,50,50 
UMJ 330 DATA 0,2,36,0,1,36,0,1,37,37,0,2,50,50,0,7,155 
FTJ 340 DATA 0,1,13,2,0,35,13,2,0,15,47,0,1,47,0,1,50,0,1,50 
VWJ 350 DATA 0,1,36,0,1,36,0,1,37,0,3,50,0,1,50,0,6,155 
CPJ 360 DATA 0,1,124,0,37,124,0,16,47,0,2,50,0,1,50,0,1,36 
XSJ 370 DATA 36,0,2,37,37,37,0,1,50,0,1,50,0,6,155,0,3,13,35,0,42,155 
CCJ 380 DATA 0,48,14,63,12,51,40,41,48,0,1,52,47,63,11,14 
SEJ 390 DATA 155,0,3,13,35,0,10,124,0,30,124,155,0,48,124,0,30,124 
MAJ 400 DATA 155,0,1,124,0,1,13,35,0,1,124,0,8,124,0,30,124,155 
CCJ 410 DATA 0,1,13,2,0,35,13,2,0,8,124,0,30,124,155,0,48,124,63,30,124 
AJJ 420 DATA 155,0,80,155,0,80,155,0,1,14,47,50,36,37,50 
RUJ 430 DATA 0,1,46,53,45,63,2,47,50,36,37,50,0,1,36 
QEJ 440 DATA 33,52,37,63,2,36,37,44,41,54,14,0,1,36 
PXJ 450 DATA 33,52,37,63,2,51,40,41,48,0,1,54,41,33 
QLJ 460 DATA 63,3,38,14,47,14,34,14,0,1,48,47,41,46 
XWJ 470 DATA 52,63,7,52,37,50,45,51,63,6,14,155,0,1,124 
RGJ 480 DATA 0,10,124,0,11,124,0,11,124,0,10,124,0,14,124,0,16,124 
IVJ 490 DATA 155,0,1,124,63,10,124,63,11,124,63,11,124,63,10,124,63,14,124 
AMJ 500 DATA 63,16,124,155,0,1,14,63,1,49,53,33,46,52,41 
QCJ 510 DATA 52,57,63,11,41,52,37,45,0,1,3,15,36,37 
QQJ 520 DATA 51,35,50,41,48,52,41,47,46,63,12,53,46 
QHJ 530 DATA 41,52,0,1,48,50,41,35,37,63,3,37,56,52 
MVJ 540 DATA 37,46,36,37,36,0,1,48,50,41,35,37,14 
KZJ 550 DATA 155,0,1,124,33,16,0,8,124,0,36,124,34,16,0,12,124 
XZJ 560 DATA 35,16,0,12,124,155,0,1,124,13,10,124,13,36,124,13,14,124 
AJJ 570 DATA 13,14,124,155,0,1,124,0,10,124,0,36,124,0,14,124,0,14,124 
WLJ 580 DATA 155,0,1,124,13,10,124,13,36,124,13,14,124,13,14,124,155 
VLJ 590 DATA 0,1,124,0,10,124,0,36,124,0,14,124,0,14,124,155,0,1,124 
FZJ 600 DATA 13,10,124,13,36,124,13,14,124,13,14,124,155,0,1,124,0,10,124 
CIJ 610 DATA 0,36,124,0,14,124,0,14,124,155,0,1,124,13,10,124,13,36,124 
CFJ 620 DATA 13,14,124,13,14,124,155,0,1,124,0,10,124,0,36,124,0,14,124 
GGJ 630 DATA 0,14,124,155,0,1,124,13,10,124,13,36,124,13,14,124,13,14,124 
OIJ 640 DATA 155,0,1,124,0,10,124,0,36,124,0,14,124,0,14,124,155 
EIJ 650 DATA 0,1,124,13,10,124,13,36,124,13,14,124,13,14,124,155,0,1,124 
AFJ 660 DATA 0,10,124,0,36,124,0,14,124,0,14,124,155,0,1,124,13,10,124 
EOJ 670 DATA 13,36,124,13,14,124,13,14,124,155,0,1,124,0,10,124,0,36,124 
ELJ 680 DATA 0,14,124,0,14,124,155,0,1,124,13,10,124,13,36,124,13,14,124 
AMJ 690 DATA 13,14,124,155,0,1,124,0,10,124,0,36,124,0,14,124,0,14,124 
WFJ 700 DATA 155,0,1,124,13,10,124,13,36,124,13,14,124,13,14,124,155 
VFJ 710 DATA 0,1,124,0,10,124,0,36,124,0,14,124,0,14,124,155,0,1,124 
GCJ 720 DATA 13,10,124,13,36,124,13,14,124,13,14,124,155,0,1,124,0,10,124 
CLJ 730 DATA 0,36,124,0,14,124,0,14,124,155,0,1,124,13,10,124,13,36,124 
CIJ 740 DATA 13,14,124,13,14,124,155,0,1,124,0,10,124,0,36,124,0,14,124 
GJJ 750 DATA 0,14,124,155,0,1,124,13,10,124,13,36,124,13,14,124,13,14,124 
OLJ 760 DATA 155,0,1,124,0,10,124,0,36,124,0,14,124,0,14,124,155 
ELJ 770 DATA 0,1,124,13,10,124,13,36,124,13,14,124,13,14,124,155,0,1,124 
AIJ 780 DATA 0,10,124,0,36,124,0,14,124,0,14,124,155,0,1,124,13,10,124 
ERJ 790 DATA 13,36,124,13,14,124,13,14,124,155,0,1,124,0,10,124,0,36,124 
EFJ 800 DATA 0,14,124,0,14,124,155,0,1,124,13,10,124,13,36,124,13,14,124 
AGJ 810 DATA 13,14,124,155,0,1,124,0,10,124,0,36,124,0,14,124,0,14,124 
XCJ 820 DATA 155,0,1,124,63,10,124,63,36,124,63,14,124,63,14,124,155 
VKJ 830 DATA 0,1,124,0,47,124,0,5,51,53,34,52,47,52,33 
FJJ 840 DATA 44,0,1,124,36,16,0,12,124,155,0,1,124,0,47,124 
LNJ 850 DATA 63,14,124,63,14,124,155,0,1,124,0,47,124,51,40,41 
PQJ 860 DATA 48,48,41,46,39,0,1,32,0,1,21,5,0,1,124 
WVJ 870 DATA 37,16,0,12,124,155,0,1,124,0,47,124,63,14,124,63,14,124 
FPJ 880 DATA 155,0,1,124,33,117,116,104,111,114,105,122,101 
PFJ 890 DATA 100,0,1,51,105,103,110,97,116,117,114,101,63,27,124 
VIJ 900 DATA 0,8,52,47,52,33,44,0,1,124,38,16,0,12,124 
PPJ 910 DATA 155,0,1,124,63,47,124,63,14,124,63,14,124,155,0,4,8 
KPJ 920 DATA 0,1,9,47,50,41,39,41,46,33,44,0,6,8 
WHJ 930 DATA 0,1,9,36,53,48,44,41,35,33,52,37,0,47,155 
TWJ 940 DATA 128,2,190,128,10,190,128,23,190,128,10,190,190,128,9,190,128,3,190 
WUJ 950 DATA 128,16,155,155,50,55,53,155,32,3,12,29,84 
HPJ 960 DATA 32,3,14,29,84,32,3,16,27,84,52,49 
LGJ 970 DATA 15,30,84,32,49,16,30,84,32,49,17,30 
JFJ 980 DATA 84,32,49,18,30,84,32,2,23,10,84,32 
OHJ 990 DATA 13,1,23,11,84,32,25,23,11,84,32,37,23 
QCJ 1000 DATA 10,84,32,48,23,14,84,32,63,1,23,16,84 
NYJ 1010 DATA 32,2,26,10,78,42,13,1,26,36,84,42,50 
VDJ 1020 DATA 26,14,50,61,65,26,14,50,32,0,1,28,0,1,67 
UGJ 1030 DATA 32,0,1,30,0,1,67,32,0,1,32,0,1,67,155,32 
UHJ 1040 DATA 0,1,34,0,1,67,32,0,1,36,0,1,67,32,0,1,38 
UEJ 1050 DATA 0,1,67,32,0,1,40,0,1,67,32,0,1,42,0,1,67 
BBJ 1060 DATA 32,0,1,44,0,1,67,32,0,1,46,0,1,67,32,0,1,48 
UIJ 1070 DATA 0,1,67,32,0,1,50,0,1,67,32,0,1,52,0,1,67 
TBJ 1080 DATA 32,0,1,54,0,1,67,32,0,1,56,0,1,67,32,65 
MSJ 1090 DATA 26,14,70,43,65,28,14,70,43,65,30,14 
MKJ 1100 DATA 70,43,65,32,14,70,43,65,34,14,70,43 
MUJ 1110 DATA 65,36,14,70,43,65,38,14,70,43,65,40 
OMJ 1120 DATA 14,70,155,43,65,42,14,70,43,65,44,14 
MXJ 1130 DATA 70,43,65,46,14,70,43,65,48,14,70,43 
MUJ 1140 DATA 65,50,14,70,43,65,52,14,70,43,65,54 
MXJ 1150 DATA 14,70,43,65,56,14,70,61,65,58,14,50 
KVJ 1160 DATA 32,65,58,14,70,42,60,60,3,70,61,65 
MRJ 1170 DATA 60,14,50,32,65,58,14,70,43,65,60,14 
RMZ 1180 DATA 70,61,65,62,14,36,155,-1 
COMPUTER SHOPPER / MAY 1987 / PAGE 127 

Applying The Atari

by Jeff Brenner

This month we have reader mail and newsletters, and, in response to reader requests, a special 800XL memory project from March 1986.

Reader Mail

Dear Jeff,

In your January 1987 “Applying The Atari” column, reader Darwin K. Garrison asked you about a printer utility which would allow him to print a script font on his Epson LX-80. I have just completed a program, Daisy-Dot, that prints user-created fonts in Near Letter Quality mode on Epson and Star printers. Here’s a list of features: Compatible with most word processors; allows up to four different graphic densities; prints proportional fonts at up to eight times the density of draft mode; offers flexible character spacing manipulation; includes five fonts: Roman, Sans-Serif, Script, Block, and Ohio. You can revise and generate fonts using the Daisy-Dot Font Editor with: joystick control, printer module, proportional font design, characters up to 19 columns wide and 16 rows high, range of 91 ASCII characters, and 14 commands. The program is for XL/XE systems only and is $12.95 + $1.50 shipping from Roy Goldman, 2440 South Jasmine, Denver, CO 80222.

Roy Goldman
Denver, Colorado

I am printing your letter to supplement my answer to Darwin K. Garrison’s question in the January column, and for other readers interested in using other fonts with their printer. The five fonts included with Daisy-Dot are shown in Figure 1. Readers should be aware that I have not yet received a review copy of Roy’s program and therefore cannot make an evaluation of the program’s performance at this time.

Dear Jeff,

I read your article in Computer Shopper, 2/87, which mentioned an article that allowed the Atari 800XL memory to be upgraded to 256K. Where can I get a reprint to allow me to make this modification to my 800XL?

Charles Wesockes Hollywood, Florida

February’s mention of Claus Buchholz’s 256K upgrade brought a deluge of requests for reprints of the original article published in my March 1986 “Atari Help” column. Unfortunately, supplying reprints is a tedious, time-consuming, and expensive process, and I have not been able to offer this service to my readers (Computer Shopper does not have back-issues to sell). This month, however, because of the demand for this particular project, and in recognition of an Atari audience that has more than doubled since the original article appeared, I am reprinting Claus Buchcholz’s memory expansion project for those interested in expanding their Atari 800XL to 256K. For 600XL owners, an enterprising Canadian reader has successfully modified the circuit to expand a 600XL to 256K. Contact Gordon Filion, #26-249 Kitchener Cr., Kamloops, B.C. Canada. The 800XL project follows:

256K Atari 800XL

WARNING: Neither Computer Shopper nor the author is responsible for any damages resulting from the construction of this memory expansion project.

This upgrade is based on Claus Buchholz’s original article in BYTE, “The Quarter-Meg Atari,” which he has modified to perform 16K bank switching to make it compatible with the 130XE. It should be stressed that the upgrade is not 100% 130XE compatible: The 130XE has the ability to control whether the 6502 or Antic (or both) sees the extra RAM banked through locations $4000 through $7FFF. This permits, for example, a graphics screen to reside in the Atari’s normal memory between $4000 and $7FFF while a RAMdisk is in operation. In most cases, the screen memory is above location $7FFF and there is no problem. But programs that place graphics data between location $4000 and $7FFF will not work properly. Similarly, some 800 or 800XL programs that utilize this memory area for graphics will not work properly unless the additional RAM is disabled (i.e. not using a RAMdisk). The majority of 130XE programs currently available will work with the upgrade with no incidence.

For those of you who have read Claus Buchholz’s article in BYTE (September 1985—check your library) and are comfortable with soldering or have a friend who will help you out (an Atari user group member, for example), Claus writes:

“The procedure for this upgrade is basically the same as in the article except for the following points: If your Antic (U7) part number is CO21697, use the circuit of the figure [Figure 2] excluding the area inside the dotted lines. If it is CO12296, include the circuit inside the dotted lines. The circuit requires five connects to the PIA (U23). So, pins 12 through 16 must be bent up and connected to the circuit. The rest of the procedure is the same. Notice that this circuit has one more chip than the article’s circuit. This is the price of compatibility.

“With the 256K dynamic RAMs in your XL, be sure to wait at least ten seconds after turning the computer off. Otherwise it may not coldstart properly when you turn it back on. My original RAMdisk software doesn’t work with this new mod. You may download [the new version] from the Capitol Hill Atari Owners’ Society BBS at 517-371-1106 or from the Castle Communications board at 517-371-4234. The source file is called QMEGXLD.SRC for Quarter-Meg XL Double. Also available is a RAMdisk program that sets up on single-density RAMdisk and leaves the XE-equivalent banks free for XE software. This is quite useful with BASIC XE, DOS 2.5 or the newer Synapse software. Its name is QMEGXLS.SRC.”

“I ask one thing in return for this information: Please pass it around to all your interested friends. Put it in your club’s library or on your favorite BBS. Encouraging software support of 256K will result in many interesting uses for it. Thank you and enjoy—

Claus Buchholz

We owe a thousand thanks to Claus Buchholz and the C.H.A.O.S. users group of Lansing, Michigan. Figure 2 shows the parts list, the memory control register and the schematic diagram.

Newsletters

In the mail this month comes the Michigan Atari Magazine, the newsletter of the Capitol Hill Atari Owners’ Society, and a number of other independent groups including the Washtenaw Atari Users Group, the Tri-City Atari Group, the Greater Kalamazoo Atari Users Group, the Cascades Atari Computer Enthusiasts, the Genesee Atari Group, and the Battle Creek Atari Users Group. Through their combined resources, the group has produced one of the most attractive and professionally prepared newsletters I have ever seen. The 30-page February 1987 issue contains “Rumors,” “Atari News,” and articles for the 8-bit and ST written by the independent groups supporting the newsletter. ($12/yr. subscription, C.H.A.O.S., Michigan Atari Magazine, P.O. Box 16132, Lansing, MI 48901.)

F.L.A.G. is the newsletter of the First Lawton Atari Group. The February issue contains “8-bit News” and some ST articles. (F.L.A.G. Newsletter, First Lawton Atari Group, 2506 N.W. 7th St., Lawton, OK 73507.)

Network: Atari and the Progressive Atari Computing (PAC) Users Group have announced two interesting newsletters. The Hard Disk Users Group (HDUG) Newsletter is a special interest newsletter for 8-bit and 16-bit Atari owners using hard drives. The group is taking free advertisements for its first two issues. NANN, the National Atari Newsletter Newsletter, is the group’s other venture. Chuck Leazott, president of PAC, describes NANN as a compendium of the best articles, reviews and notefiles from all the newsletters sent in to PAC. (Network: Atari and PAC Users Group, P.O. Box 196, Rantoul, IL 61866-0196.)

Next Month

We’ll begin entering the bank account recordkeeping and checkwriting program mentioned last month. Meanwhile, if you’re interested in the program, you might want to start looking at continuous checks for computer printers. Well-known national suppliers are NEBS (1-800-637-0118) and MOORE (1-800-828-7946). Request their “Computer Forms” catalog when you call.

Reader’s questions, comments and contributions are welcome. Please enclose a self-addressed, stamped envelope (SASE) for a personal reply. Due to volume of letters received, only a selected number of personal responses can be given each month.

Program Perfect” is a utility used to check for typing errors while entering programs from this column. Readers can send $5 for a diskette or a SASE for a listing of this program.

Address all correspondence to: Jeff Brenner, “Applying The Atari 5/87”, c/o Computer Shopper, P.O. Box F, Titusville, FL 32781-9990. •


Roman:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
1234567890
Ohio:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
1234567898
Sans-Serif:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
1234567890
Block:
ABCDEFGHIJKLMNOPQRSTUVWXVZ
abcdefghijklmnapqrstuvwxyz
1234567890
Script:
ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
1254567890
Figure 1. Daisy Dot type styles.

PARTS LIST 

8  41256  256K-bit dynamic RAM (200ns or less) 
1 74LS153 Dual 4-to-1 multiplexor 
1 74LS139 Dual 2-to-4 decoder 
1         33 ohm, 1/4 watt resistor 

ADDITIONAL PARTS FOR ANTIC #CO12296 

1 74LS158 Quad inverting 2-to-1 Multiplexer 
1 74LS393 Dual 4-bit counter 

DEFINITION OF MEMORY CONTROL REGISTER AT $D301 (54017 DECIMAL). 

XL MOD. 

bit: 7 6 5 4 3 2 1 0 
     D a b E c d B R 

D=0 enables diagnostic ROM 
B=0 enables BASIC ROM 
R=1 enables OS ROM 
E=0 enables extended RAM 
abcd is 4-bit extended RAM bank # 
    - ranges from 4 to 15 
    - banks 12 to 15 are equivalent 
    to XE’s banks 0 to 3 

130XE 

bit: 7 6 5 4 3 2 1 0 
     D   V C x y B R 

D=0 enables diagnostic ROM 
B=0 enables BASIC ROM 
R=1 enables OS ROM 
V=0 enables extended RAM for video 
C=0 enables extended RAM for CPU 
xy is 2-bit extended RAM bank # 
    - ranges from 0 to 3 
Figure 2
COMPUTER SHOPPER / JUNE 1987 / PAGE 141 

Applying The Atari

by Jeff Brenner

This month we’ll begin entering another major program—a program that writes checks for you on continuous check forms. We will also examine a number-to-English subroutine and read some reader mail and newsletters.

Reader Mail

Dear Jeff,

A few weeks ago I received an Atari 600XL as a gift (no books or manuals with it), and even though I use a computer at work, I know little about this computer stuff so I have some questions for you: (1) Where can I find a manual for this computer? (2) How can I know how much RAM memory I have on it? (3) If I have, let’s say 16K, where can I find something to extend it to 48K or 64K memory?

Luis E. Cazares
Eagle Pass, Texas

(1) The Atari XL User’s Handbook ($15.95, published by Weber Systems, 8437 Mayfield Rd., Cleveland, OH 44026) is a fine book on the 600XL and 800XL which I have reviewed and recommended in the past. The book includes everything covered by Atari’s original manual and many more topics. Weber Systems also publishes the Atari XE User’s Handbook for the newer 65XE and 130XE computers. (2) To determine the RAM in your computer, type:

PRINT PEEK(106) 

If the computer responds with a 64, then you have a 16K computer. If the response is a 160, then you have a 48K (on a 400/800), 64K (on 600XL/800XL) or 128K (on an 130XE). On the 600XL, unless the memory expansion unit is installed, I doubt that you have more than 16K. (3) Many have had difficulty finding the 64K upgrade for the 600XL. American TV (15338 Inverness St., San Leandro, CA 94579) carries the upgrade, along with other hard-to-find 8-bit Atari components. I would highly recommend that any 16K 600XL owner upgrade to 64K, since the vast majority of Atari programs (including those published in this column) require more than 16K RAM.

Dear Jeff,

The programs I have seen in your column have actually encouraged me to buy an Atari 130XE over a competing model. Great job! Being new to the Atari I have two questions for you: Will a printer advertised to work on an 800XL work with my 130XE? Will all 800XL software work with the 130XE?

I. Morgan
Atlanta, Georgia

I am printing your question to address the general problem of compatibility-confusion that has erupted, mostly among newer Atari owners, due to the numerous models of Atari computers floating around. Currently, Atari’s line can be divided into two major categories: the 8-bit machines and the ST-machines. Generally, software designed for one group is not compatible with the other. For example, a 5 1/4" diskette containing an 8-bit utility cannot be loaded into an ST. Some hardware is also compatible with only one group. Among the 8-bit machines, the 1200XL, expanded 600XL, 800XL, and 65XE all have 64K RAM and are compatible with each other and with most software and all hardware designed for the original Atari 400 and 800 machines. (An unexpanded 600XL has only 16K and therefore a more limited number of programs can be used with it.) The 130XE is also fully hardware compatible with the 1200XL, 600XL, 800XL and 65XE. In fact, the 130XE is essentially a 65XE with an extra 64K memory (for a total of 128K), so it can run any software that works with the 65XE or XL machines. 130XE software, however, cannot necessarily be used with the 65XE or XLs since there is a good chance that the program advertised for the 130XE will take advantage of the extra memory found only in the 130XE. (However, a 65XE or XL that has been expanded to 128K or 256K will run most 130XE software).

In answer to your specific question, then: Yes, a printer that works with an 800XL will work with the 130XE. More important, a printer interface that works with the 800XL will work with the 130XE. (The only interface that would not be compatible among all 8-bit Ataris is the older MPP 1100 parallel printer interface for the Atari 800 from Microbits Peripheral Products. This interface required a modification to the computer and had to be plugged into the third joystick port, which does not exist on the XL/XE.) And yes, 800XL software will work on the 130XE, but not necessarily vice versa.

Dear Jeff,

Suggestion: Could you use your column to request that all Atari BBS sysops send new and accurate information for inclusion in the bulletin board section of Computer Shopper.

George T. Fuller
Lexington, North Carolina

You just did—good idea. Too often we have to put up with numerous “the number you have reached is not in service” recordings before an operating bulletin board is reached. So please, sysops or bulletin board users, keep us updated.

Newsletters

This month’s mail brings H.A.C.E. News, the newsletter of the Hickory Atari Computer Enthusiasts (H.A.C.E., P.O. Box 12, Hickory, NC 28603). Heavier on the technical side than most newsletters, the March 1987 issue contained an article on modems, a “Tech Tips” column that described how to get 1/2 K more out of your 64K Atari through a hardware modification, and a “Gizzmos and Gadgets” column that discussed using the joystick ports for output.

Electronic Checkbook

This month we will begin entering Electronic Checkbook, a program that lets you position all information as: desired, thereby allowing you to use virtually any continuous check format available. As mentioned last month, both NEBS (1-800-637-0118) and MOORE (1-800-828-7946) are two companies that offer continuous checks in their computer forms catalog.

Electronic Checkbook lets you define up to twenty names and addresses of companies/utilities that you often write checks to. Writing checks then merely involves pressing the number of the payment recipient and entering the dollar amount. Your account balance is maintained and displayed throughout the session. The first part is listed under the “Electronic Checkbook” heading. Enter the program using Program Perfect and SAVE it to diskette. The second part, which contains the functions, will be listed next month.

Enhanced Version

Due to the popularity of the enhanced version of Forms Generator offered in the November column (a new version of which is currently being commercially marketed) and to requests from readers, I have promised more enhanced versions of listed programs in the future. This month, a diskette version of Electronic Checkbook with complete documentation will be available. As I have explained in the past, I have much more freedom when writing a program that will be distributed on disk rather than listed in the column. I can take more steps to compress the program (and therefore squeeze in more features) and I can add more machine language routines, both of which tend to make magazine listings unreadable and impossible to enter.

The enhanced version of Electronic Checkbook will offer the following additional features not contained in the standard listed version: a record of each check written and an on-going balance will be automatically kept on diskette, a greater number of predefined names and addresses will be allowed, a second formatting screen will be provided for printing information on the “stub” or second page of the continous check, and general speed and error handling will be improved. See end of this column for information on purchasing either the standard or enhanced version of the program.

Number To English Converter

One important component of this month’s checkwriting program is an interesting subroutine that converts a numeric value into its written English equivalent. The written amount can be placed on the check along with the numeric amount. This is an important safeguard, since computer-printed numbers can be easily modified or overwritten. Unfortunately, some checks do not provide for a written-amount line, and some commercial check writing programs for various computers will only reiterate the number value, albeit embedded in asterisks, instead of providing an amount in words.

Enter the program listed under the “Number to English Converter” and RUN it. You’ll be asked to enter a numeric value. When you enter the number and press RETURN, the program will display the amount in words, as it would print it on a check. Following are some examples:

ENTER A NUMBER: 325 
THREE HUNDRED 
TWENTY-FIVE AND 00/100 

ENTER A NUMBER: 1050.35 
ONE THOUSAND FIFTY 
AND 3/100 

ENTER A NUMBER: 17.90 
SEVENTEEN AND 90/100 

ENTER A NUMBER: 
999999999.99 

ENTER A NUMBER: 
24535.20 
TWENTY-FOUR THOUSAND 
FIVE HUNDRED 
THIRTY FIVE AND 20/100 

The program works by breaking up the integer value of the entered number into three digit chunks (the cents amount is retained until the end). Therefore, 24535.20 is converted into 024 and 535. Each three digit chunk is then converted to words based on its value. Word amounts for three digit number chunks under 20 are read directly from the data statements on line 500 and 510. Greater values are converted to words based upon the placement of the digits. For example, in 024, the 2 is converted to TWENTY- and the 4 is converted to FOUR. Therefore 024 and 535 become TWENTY-FOUR and FIVE HUNDRED THIRTY-FIVE, respectively. In the event of a number such as 020 or 530, the hyphen is removed from the last word so we would have TWENTY and FIVE HUNDRED THIRTY, rather than TWENTY- and FIVE HUNDRED THIRTY-, with the unnecessary trailing hyphens.

Next, the program takes into consideration the placement of each of the three-digit chunks. Since the left-most digit of 024 is in the thousands place, a THOUSAND is added to the TWENTY-FOUR to give us TWENTY-FOUR THOUSAND. The left-most digit of 535 is in the ones place, so the FIVE HUNDRED THIRTY-FIVE is left as is.

Finally, the cents value is rounded to two places if necessary (i.e. if the entered amount were 24535.198, the cents amount would be rounded to 20), a “/100” is tacked on to it, and the fraction is added to the word amount for the final amount in words: TWENTY-FOUR THOUSAND FIVE HUNDRED THIRTY FIVE AND 20/100.

Have fun trying different values. An interesting programming idea: write a program that converts written words to numeric values! Next month, we’ll see how the number-to-English routine is used in the Electronic Checkbook program.

Next Month

We will enter the second part of Electronic Checkbook and begin to test the program.

Reader’s questions, comments and contributions are welcome. Please enclose a self-addressed, stamped envelope. (SASE) for a personal reply. Due to volume of letters received, only a selected number of personal responses can be given each month.

The complete listed version of Electronic Checkbook on diskette is available from the author for $7, postpaid. The special enhanced version, with corresponding documentation is available for $11. Please make checks payable to “Jeff Brenner” and specify your disk drive model. Please allow 4-8 weeks for delivery.

“Program Perfect” is a utility used to check for typing errors while entering programs from this column. Readers can send $5 for a diskette or a SASE for a listing of this program.

Address all correspondence to: Jeff Brenner, “Applying The Atari 6/87” c/o Computer Shopper, P.O. Box F, Titusville, FL 32781-9990. •

ELECTRONIC CHECK BOOK 

UEJ 10 REM ELECTRONIC CHECKBOOK 
KHJ 20 REM COPYRIGHT 1987 JEFF BRENNER 
XNJ 30 GOSUB 60:GOSUB 430:GOSUB 540 
ODJ 40 GOSUB 760:GOSUB 860:OLD=1773:L=OLD 
BIJ 50 GOTO 1030 
LKJ 60 VNTP=PEEK(130)+256*PEEK(131):VNTD=PEEK(132)+256*PEEK(133) 
USJ 70 DIM P$(512),T$(130),NUL$(1):PM=PEEK(106)-8 
NRJ 80 DIM NN$(100),TMP$(130),A$(130),TXT$(150) 
YGJ 90 VT=PEEK(134)+256*PEEK(135):AT=PEEK(140)+256*PEEK(141) 
YJJ 100 VAR=N0:FOR I=VNTP TO VNTD 
RRJ 110 IF PEEK(I)>128 THEN T$(LEN(T$)+1)=CHR$(PEEK(I)-128):GOTO 140 
RKJ 120 T$(LEN(T$)+1)=CHR$(PEEK(I)) 
EFJ 130 NEXT I:PRINT "ERROR - CHECK BEGINNING PROGRAM LINES.":END 
JJJ 140 IF T$<>"P$" THEN VAR=VAR+1:T$=NUL$:GOTO 130 
GWJ 150 IF PEEK(VT+1)<>VAR THEN VT=VT+8:GOTO 150 
RYJ 160 A=PM*256+512-AT:H=INT(A/256):L=A-H*256 
OVJ 170 POKE VT+2,L:POKE VT+3,H 
DFJ 180 DIM C128$(1),CLS$(1),DN$(10),SCRL$(40):C128$=CHR$(128):CLS$=CHR$(125) 
LIJ 190 C85=85:C84=84 
BPJ 200 SCRL$(1)=CHR$(254):SCRL$(40)=CHR$(254):SCRL$(2)=SCRL$ 
FMJ 210 C84=84:C85=C85:SK=764 
TZJ 220 DIM DSN$(84):FOR I=1 TO 7:RESTORE 250 
AXJ 230 FOR J=1 TO 12:READ N:DSN$(LEN(DSN$)+1)=CHR$(N):NEXT J:NEXT I 
PVJ 240 DSN$=DSN$(1,80) 
WFJ 250 DATA 255,126,60,24,60,126,255,126,60,24,60,126 
CDJ 260 DIM X(32),Y(32):FOR I=1 TO 32:X(I)=0:Y(I)=0:NEXT I:RESTORE 290 
SWJ 270 FOR I=1 TO 8:READ N,V:X(N)=V:NEXT I 
SYJ 280 FOR I=1 TO 8:READ N,V:Y(N)=V:NEXT I 
PQJ 290 DATA 30,-1,31,1,10,-1,11,-1,9,-1,5,1,6,1,7,1 
RSJ 300 DATA 28,-1,29,1,10,-1,14,-1,6,-1,9,1,13,1,5,1 
RTJ 310 DATA 28,-1,29,1,10,-1,14,-1,6,-1,9,1,13,1,5,1 
IXJ 320 DIM TAB$(82),SHOW$(74),GRAB$(74),INVERSE$(59) 
KLJ 330 P$(1)=CHR$(0):P$(512)=CHR$(0):P$(2)=P$ 
EWJ 340 P$(61)=CHR$(15):P$(64)=CHR$(15):P$(62,64)=P$(61) 
MMJ 350 DIM DAT$(2880),SP$(100),SP1$(1),W$(120) 
XXJ 360 SP$(1)=CHR$(32):SP1$=SP$:SP$(100)=CHR$(32):SP$(2)=SP$ 
MWJ 370 OPEN #1,4,0,"K:":OPEN #3,9,0,"E:":OPEN #2,12,0,"S:" 
TOJ 380 POKE 559,46:POKE 54279,PM:POKE 53277,3 
MUJ 390 POKE 710,192:POKE 712,192 
VAJ 400 ML=PEEK(560)+256*PEEK(561)+16:POKE ML,7 
TSJ 410 POKE 752,1:POKE 708,204:POSITION 0,11:PRINT "ELECTRONIC CHECKBOOK" 
AWJ 420 RETURN 
CVJ 430 DAT$(1)=CHR$(0):DAT$(2880)=CHR$(0):DAT$(2)=DAT$:W$=DAT$ 
ELJ 440 DAT$(1)=C128$:DAT$(240)=C128$:DAT$(2,239)=DAT$ 
HCJ 450 DAT$(2641)=C128$:DAT$(2880)=C128$:DAT$(2642,2879)=DAT$(2641) 
FFJ 460 W$(1)=C128$:W$(20)=C128$:W$(2,20)=W$ 
ANJ 470 W$(101)=C128$:W$(120)=C128$:W$(102,119)=W$(101) 
WGJ 480 W$(21,100)=SP$(1,80) 
KCJ 490 FOR Y=3 TO 22:DAT$(Y*120,Y*120+119)=W$:NEXT Y 
TOJ 500 TAB$(1)=C128$:TAB$(82)=C128$:TAB$(2)=TAB$ 
TQJ 510 FOR I=11 TO 71 STEP 10:TAB$(I,I)=CHR$(190):NEXT I 
PIJ 520 DAT$(241,360)=TAB$:DAT$(2520,2639)=TAB$ 
AYJ 530 RETURN 
KWJ 540 RESTORE 580 
MTJ 550 FOR I=1 TO 59:READ N:TOT=TOT+I+N 
INJ 560 INVERSE$(I,I)=CHR$(N) 
XYJ 570 NEXT I 
PKJ 580 DATA 104,104,104,170,165,88,133,208,165,89 
OYJ 590 DATA 133,209,104,104,168,240,16,24,165,208 
MKJ 600 DATA 105,40,133,208,165,209,105,0,133,209 
QOJ 610 DATA 136,208,240,24,138,101,208,133,208,165 
OTJ 620 DATA 209,105,0,133,209,104,104,168,136,177 
LLJ 630 DATA 208,73,128,145,208,136,16,247,96,-1 
KXJ 640 RESTORE 670 
MRJ 650 FOR I=1 TO 74:READ N:TOT=TOT+I+N 
SRJ 660 SHOW$(I,I)=CHR$(N):NEXT I 
RXJ 670 DATA 104,104,133,251,104,133,250,104,133,253 
PSJ 680 DATA 104,133,252,165,89,133,255,165,88,133 
QSJ 690 DATA 254,24,165,250,101,252,133,250,165,251 
OPJ 700 DATA 101,253,133,251,162,23,160,39,177,250 
OVJ 710 DATA 145,254,136,16,249,24,165,250,105,120 
ONJ 720 DATA 133,250,165,251,105,0,133,251,165,254 
MRJ 730 DATA 105,40,133,254,165,255,105,0,133,255 
TRJ 740 DATA 202,16,219,96 
DKJ 750 GRAB$=SHOW$:GRAB$(40,40)=CHR$(254):GRAB$(42,42)=CHR$(250):RETURN 
KWJ 760 RESTORE 810 
NVJ 770 FOR I=1536 TO 1616:READ N:TOT=TOT+I+N:POKE I,N:NEXT I 
WJJ 780 POKE 1547,133:POKE 1557,121:POKE 1582,115 
XMJ 790 IF TOT=161532 THEN A=USR(1536):RETURN 
BQJ 800 GOTO 900 
RZJ 810 DATA 104,162,6,160,10,169,7,76,92,228,174,132,2,240,5,202 
CLJ 820 DATA 134,206,240,40,174,120,2,228,203,208,4,165,206,208,29,165 
DUJ 830 DATA 207,240,4,198,207,240,21,230,206,134,203,230,207,173,113,2 
QMJ 840 DATA 201,1,240,2,162,16,189,63,6,141,252,2,76,98,228,134 
VRJ 850 DATA 24,29,27,143,51,53,48,135,31,30,26,50,34,12,14,142,155 
LEJ 860 RESTORE 930:I=0:TOT=0 
KVJ 870 READ N:IF N=-1 THEN 900 
IJJ 880 TOT=TOT+N+1:POKE 1664+I,N:I=I+1 
CFJ 890 GOTO 870 
IBJ 900 POKE 559,0:POKE 712,0:POKE 710,192:POKE ML,2 
UXJ 910 IF TOT<>13247 THEN GRAPHICS 0:PRINT "ERROR - CHECK DATA LINES":END 
PNJ 920 FOR I=1767 TO 1790:POKE I,192:NEXT I:A=USR(1664):RETURN 
SLJ 930 DATA 104,173,48,2,133,204,173,49,2,133,205,160,26,169,148 
TZJ 940 DATA 153,230,6,136,208,250,160,0,177,204,9,128,145,204,160 
QUJ 950 DATA 3,177,204,9,128,145,204,160,6,177,204,9,128,145,204  
KUJ 960 DATA 200,192,28,208,245,169,197,141,0,2,169,6,141,1,2 
QIJ 970 DATA 173,14,212,9,128,141,14,212,96,72,152,72,173,11,212 
PUJ 980 DATA 201,7,240,18,201,8,240,14,230,204,164,204,185,231,6 
OFJ 990 DATA 141,24,208,104,168,104,64,169,0,133,204,240,238,-1 
QXJ 1000 POKE 53250,0:POKE 53251,0:GRAPHICS 0 
MVJ 1010 POKE 16,64:POKE 53774,64 
CPJ 1020 RETURN 
TSJ 1030 XL=X:YL=Y:POKE 559,0:PRINT CLS$:POKE 53248,0:POKE 694,0:POKE 702,64 
MFJ 1040 GOSUB 1000:POKE 559,0:A=USR(1664):POKE 752,1:POKE 710,196:TRAP 1370 
SPJ 1050 FOR I=1769 TO 1788:POKE I,0:NEXT I:POKE 1755,23 
WEJ 1060 POKE 1767,12:POKE 1768,10:POKE 1789,10:POKE 1790,12 
TKJ 1070 POSITION 10,0:PRINT "ELECTRONIC  CHECKBOOK" 
YBJ 1080 POKE C85,7:PRINT "COPYRIGHT 1987 JEFF BRENNER" 
ODJ 1090 A=USR(ADR(INVERSE$),0,0,40):A=USR(ADR(INVERSE$),0,1,40) 
YVJ 1100 A=USR(ADR(INVERSE$),0,22,40) 
AFJ 1110 POSITION 4,23:PRINT "SELECT FUNCTION AND PRESS START"; 
VXJ 1120 POSITION 0,0:PRINT CHR$(30);CHR$(31); 
QNJ 1130 A=USR(ADR(INVERSE$),4,23,6):A=USR(ADR(INVERSE$),30,23,5) 
ZAJ 1140 A=USR(ADR(INVERSE$),0,23,40) 
CWJ 1150 POKE 53250,56:POKE 53251,186:POKE 623,1:POKE 53258,1:POKE 53259,1 
OTJ 1160 POKE 706,128:POKE 707,128 
SAJ 1170 P$(281,360)=DSN$ 
SOJ 1180 P$(409,488)=DSN$ 
OZJ 1190 POSITION 14,6:PRINT "WRITE A CHECK":PRINT 
NMJ 1200 POKE C85,13:PRINT "ADJUST  ACCOUNT":PRINT  
QJJ 1210 POKE C85,7:PRINT "DEFINE OR EDIT CHECK FORMAT":PRINT 
QPJ 1220 POKE C85,13:PRINT "SAMPLE PRINTOUT":PRINT 
SIJ 1230 POKE C85,12:PRINT "DEFINE/EDIT NAMES":PRINT 
CJJ 1240 POKE C85,7:PRINT "SETUP/ENTER ACCOUNT BALANCE" 
NGJ 1250 POKE 559,46:POKE 764,255 
UAJ 1260 POKE OLD,0:POKE L,12:SOUND 0,0,0,0:SOUND 1,0,0,0 
EEJ 1270 SOUND 2,0,0,0:IF FL=0 THEN C=PEEK(53279):IF C<5 OR C>6 THEN 1270 
UAJ 1280 IF C=6 THEN 1350 
RSJ 1290 SOUND 0,17,12,8 
XVJ 1300 DL=0:OLD=L:L=L+2:IF L>1783 THEN L=1773 
OGJ 1310 IF FL=0 AND PEEK(53279)=C THEN DL=DL+1:IF DL<12 THEN 1310 
TCJ 1320 FL=1 
VVJ 1330 IF PEEK(53279)<>C THEN FL=0 
FIJ 1340 GOTO 1260 
QBJ 1350 LL=(L-1771)/2:POKE 764,255 
FTJ 1360 GOTO 1890 
SKJ 1370 POKE 559,0:PRINT CLS$:FOR I=1767 TO 1790:POKE I,0:NEXT I 
OQJ 1380 POKE 710,198:POKE 752,1:POKE 53248,0 
FSJ 1390 POSITION 9,6:PRINT "ERROR #";PEEK(195);" AT LINE "; 
BBJ 1400 PRINT PEEK(187)*256+PEEK(186) 
JOJ 1410 PRINT :POKE C85,9:I=PEEK(C84):PRINT "PRESS RETURN FOR MENU" 
FLJ 1420 A=USR(ADR(INVERSE$),15,I,6):POKE 764,255:POKE 559,46 
QVJ 1430 IF PEEK(SK)<>12 THEN 1430 
DKJ 1440 TRAP 1370:GOTO 1030 
RSJ 1450 IN=INT(IN*100+0.5)/100:NN=INT(IN):DD=NN:NN$=STR$(NN):LMT=0:SKIP=0 
BRJ 1460 IF NN=0 THEN TXT$="ZERO":TXT$(5,5)=SP1$:GOTO 1770 
ORJ 1470 IF NN<10 THEN GOSUB 1740:GOTO 1770 
QPJ 1480 IF NN<100 THEN GOSUB 1660:GOTO 1770 
CRJ 1490 IF NN>=1000*1000*1000 THEN TXT$="OVERFLOW":RETURN 
LMJ 1500 IF LEN(NN$)>LMT*3 THEN LMT=LMT+1:GOTO 1500 
NPJ 1510 A$="000":IF LMT*3=LEN(NN$) THEN 1530 
NOJ 1520 A$=A$(1,LMT*3-LEN(NN$)):A$(LEN(A$)+1)=NN$:NN$=A$ 
IOJ 1530 LMT=LMT-1 
TNJ 1540 A$=NN$(1,3):IF LEN(NN$)>3 THEN NN$=NN$(4,LEN(NN$)):GOTO 1560 
ETJ 1550 NN$=NUL$ 
KXJ 1560 IF A$="000" THEN SKIP=1 
YAJ 1570 RESTORE 1850:IF VAL(A$(1,1))=0 THEN 1610 
DIJ 1580 FOR I=1 TO VAL(A$(1,1)):READ TMP$:NEXT I 
SIJ 1590 TXT$(LEN(TXT$)+1)=TMP$:TXT$(LEN(TXT$)+1)=SP1$ 
FBJ 1600 TXT$(LEN(TXT$)+1)="HUNDRED":TXT$(LEN(TXT$)+1)=SP1$ 
RLJ 1610 DD=VAL(A$(2,3)):GOSUB 1660 
BMJ 1620 IF LMT=0 THEN 1770 
UOJ 1630 RESTORE 1880:FOR I=1 TO LMT:READ TMP$:NEXT I 
FEJ 1640 IF SKIP=0 THEN TXT$(LEN(TXT$)+1)=TMP$:TXT$(LEN(TXT$)+1)=SP1$ 
XWJ 1650 SKIP=0:GOTO 1530 
YUJ 1660 IF DD>19 THEN 1710 
YNJ 1670 IF DD<10 THEN 1740 
WSJ 1680 IF DD=0 THEN 1830 
XGJ 1690 RESTORE 1850:FOR I=1 TO DD:READ TMP$ 
HHJ 1700 NEXT I:TXT$(LEN(TXT$)+1)=TMP$:TXT$(LEN(TXT$)+1)=SP1$:RETURN 
MXJ 1710 RESTORE 1870:FOR I=1 TO INT(DD/10)-1:READ TMP$:NEXT I 
MYJ 1720 TXT$(LEN(TXT$)+1)=TMP$:TXT$(LEN(TXT$)+1)="-" 
ASJ 1730 DD=DD-INT(DD/10)*10:GOTO 1680 
WPJ 1740 IF DD=0 THEN 1830 
QRJ 1750 RESTORE 1850:FOR I=1 TO DD:READ TMP$:NEXT I 
NZJ 1760 TXT$(LEN(TXT$)+1)=TMP$:TXT$(LEN(TXT$)+1)=SP1$:RETURN 
RRJ 1770 DD=IN-INT(IN) 
SLJ 1780 TXT$(LEN(TXT$)+1)="AND":TXT$(LEN(TXT$)+1)=SP1$ 
HNJ 1790 IF DD=0 THEN TMP$="00":GOTO 1810 
BWJ 1800 TMP$=STR$(DD):TMP$(LEN(TMP$)+1)="00":TMP$=TMP$(3,4) 
SPJ 1810 TXT$(LEN(TXT$)+1)=TMP$:TXT$(LEN(TXT$)+1)="/100" 
HVJ 1820 TXT$(LEN(TXT$)+1)=SP1$:RETURN 
XLJ 1830 IF TXT$(LEN(TXT$))="-" THEN TXT$(LEN(TXT$))=SP1$ 
CZJ 1840 RETURN 
PRJ 1850 DATA ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,ELEVEN,TWELVE 
QNJ 1860 DATA THIRTEEN,FOURTEEN,FIFTEEN,SIXTEEN,SEVENTEEN,EIGHTEEN,NINETEEN 
YRJ 1870 DATA TWENTY,THIRTY,FORTY,FIFTY,SIXTY,SEVENTY,EIGHTY,NINETY 
RNJ 1880 DATA THOUSAND,MILLION 
SRJ 1890 POKE 559,0:PRINT CLS$:FOR I=1767 TO 1790:POKE I,0:NEXT I 
OOJ 1900 POKE 710,198:POKE 752,1:POKE 53248,0 
LUJ 1910 POSITION 13,6:PRINT "NOT AVAILABLE YET"; 
FZZ 1920 GOTO 1410 
NUMBER TO ENGLISH CONVERTER 

OTJ 10 REM NUMBER TO ENGLISH CONVERTER 
KHJ 20 REM COPYRIGHT 1987 JEFF BRENNER 
WAJ 30 DIM TXT$(130),NN$(130),TMP$(130),A$(130),SP1$(1),NUL$(1) 
MJJ 40 GRAPHICS 0:SP1$=CHR$(32) 
SZJ 50 PRINT "ENTER A NUMBER: ";:TXT$=NUL$ 
KOJ 60 INPUT #16;IN 
CEJ 70 GOSUB 100 
IJJ 80 PRINT TXT$ 
KHJ 90 PRINT :PRINT :GOTO 50 
PNJ 100 IN=INT(IN*100+0.5)/100:NN=INT(IN):DD=NN:NN$=STR$(NN):LMT=0:SKIP=0 
WHJ 110 IF NN=0 THEN TXT$="ZERO":TXT$(5,5)=SP1$:GOTO 420 
ILJ 120 IF NN<10 THEN GOSUB 390:GOTO 420 
KAJ 130 IF NN<100 THEN GOSUB 310:GOTO 420 
AMJ 140 IF NN>=1000*1000*1000 THEN TXT$="OVERFLOW":RETURN 
HUJ 150 IF LEN(NN$)>LMT*3 THEN LMT=LMT+1:GOTO 150 
JXJ 160 A$="000":IF LMT*3=LEN(NN$) THEN 180 
LSJ 170 A$=A$(1,LMT*3-LEN(NN$)):A$(LEN(A$)+1)=NN$:NN$=A$ 
GSJ 180 LMT=LMT-1 
PMJ 190 A$=NN$(1,3):IF LEN(NN$)>3 THEN NN$=NN$(4,LEN(NN$)):GOTO 210 
COJ 200 NN$=NUL$ 
ISJ 210 IF A$="000" THEN SKIP=1 
RUJ 220 RESTORE 500:IF VAL(A$(1,1))=0 THEN 260 
BDJ 230 FOR I=1 TO VAL(A$(1,1)):READ TMP$:NEXT I 
QDJ 240 TXT$(LEN(TXT$)+1)=TMP$:TXT$(LEN(TXT$)+1)=SP1$ 
DFJ 250 TXT$(LEN(TXT$)+1)="HUNDRED":TXT$(LEN(TXT$)+1)=SP1$ 
NKJ 260 DD=VAL(A$(2,3)):GOSUB 310 
WLJ 270 IF LMT=0 THEN 420 
QNJ 280 RESTORE 530:FOR I=1 TO LMT:READ TMP$:NEXT I 
DIJ 290 IF SKIP=0 THEN TXT$(LEN(TXT$)+1)=TMP$:TXT$(LEN(TXT$)+1)=SP1$ 
TVJ 300 SKIP=0:GOTO 180 
UTJ 310 IF DD>19 THEN 360 
UMJ 320 IF DD<10 THEN 390 
SRJ 330 IF DD=0 THEN 480 
SWJ 340 RESTORE 500:FOR I=1 TO DD:READ TMP$ 
FLJ 350 NEXT I:TXT$(LEN(TXT$)+1)=TMP$:TXT$(LEN(TXT$)+1)=SP1$:RETURN 
IWJ 360 RESTORE 520:FOR I=1 TO INT(DD/10)-1:READ TMP$:NEXT I 
LCJ 370 TXT$(LEN(TXT$)+1)=TMP$:TXT$(LEN(TXT$)+1)="-" 
VRJ 380 DD=DD-INT(DD/10)*10:GOTO 330 
SXJ 390 IF DD=0 THEN 480 
MHJ 400 RESTORE 500:FOR I=1 TO DD:READ TMP$:NEXT I 
LUJ 410 TXT$(LEN(TXT$)+1)=TMP$:TXT$(LEN(TXT$)+1)=SP1$:RETURN 
PMJ 420 DD=IN-INT(IN) 
QGJ 430 TXT$(LEN(TXT$)+1)="AND":TXT$(LEN(TXT$)+1)=SP1$ 
DMJ 440 IF DD=0 THEN TMP$="00":GOTO 460 
ZAJ 450 TMP$=STR$(DD):TMP$(LEN(TMP$)+1)="00":TMP$=TMP$(3,4) 
QTJ 460 TXT$(LEN(TXT$)+1)=TMP$:TXT$(LEN(TXT$)+1)="/100" 
FZJ 470 TXT$(LEN(TXT$)+1)=SP1$:RETURN 
VPJ 480 IF TXT$(LEN(TXT$))="-" THEN TXT$(LEN(TXT$))=SP1$ 
BDJ 490 RETURN 
NMJ 500 DATA ONE,TWO,THREE,FOUR,FIVE,SIX,SEVEN,EIGHT,NINE,TEN,ELEVEN,TWELVE 
OIJ 510 DATA THIRTEEN,FOURTEEN,FIFTEEN,SIXTEEN,SEVENTEEN,EIGHTEEN,NINETEEN 
WMJ 520 DATA TWENTY,THIRTY,FORTY,FIFTY,SIXTY,SEVENTY,EIGHTY,NINETY 
PYZ 530 DATA THOUSAND,MILLION 
COMPUTER SHOPPER / JULY 1987 / PAGE 141 

Applying The Atari

by Jeff Brenner

We’ll enter the remainder of our checkbook program this month, and we’ll set up the program for your particular continuous check format. We’ll also take a look at reader mail.

New Products

Synergy Concepts has announced the release of a new operating system for the Atari XL/XE computers. The Expander is an operating system in ROM that Synergy says was developed to answer the needs of extended memory XL/XE users. The author, Raymond G. Tonkin, writes, “This powerful enhancement gives the user abilities that until now have been unavailable to millions of Atari owners. A resident Executive Program gives the user control over the System, and allows the utilization of the memory upgrades all the way up to 512K (130XE compatible).”

Synergy lists the following features of the Expander: Control BASIC through Reset or keyboard; menu-driven commands; configure and control multiple RAM-drives: built-in mini-DOS; boot any RAM-drive as drive #1; boot on any drive up to drive #5; break from any program and re-boot drive or system; 35 user controllable conditions/functions available.

The list price of the Expander is $49.95. Since I have not seen the actual product as of this writing, I cannot yet offer any observations on its usefulness or performance. For more information, contact: Synergy Concepts, 1404 Brewerton Dr. #354, Sacramento, CA 95833.

Reader Mail

Dear Jeff:

I just finished reading your column in the May 1987 issue of Computer Shopper. I was thrilled to find that there is still so much interest in expanding the memory of the Atari 8-bit. I have been collecting articles on the subject and will be adding the documentation on expanding the model 600 you referenced in the near future. I have included a copy of every one I have at present. If you can help spread these around the Atari community it would be great. I realize it is a giant undertaking, so we here at Status would like to extend our help. If you could put the word out, we will be happy to send copies of these memory mods to anyone who sends us a request along with a SASE.

Status would also like to take this opportunity to thank Computer Shopper and you for your continued support of all Atari computers. We look forward to each new issue and the news and applications for all Atari computers.

Dick Litchfield, Secretary
Virginia Beach, Virginia

Many thanks for the copies of the memory expansion articles. Interest in memory expansion projects for the 8-bit Atari is at an all-time high, which I attribute mainly to 8-bit owners’ desires to compete with the big memories of the ST machines. Achieving 130XE compatibility is another important factor.

I greatly appreciate your group’s generous offer of providing copies of the memory expansion projects to interested readers. I know that many readers will be happy to hear of your offer since I have received many requests for specific reprints in the past that I have not had the time to fulfill.

To interested readers, copies of the following projects are available from Status: “The WindHover Atari 400 SuperRAM Modification,” by Jay Torres and Jerry Rombert; “The WindHover 288K SuperRAM Modification for the Atari 800,” by Torres; “32K Board For the WindHover SuperRAM System,” by Thompson: “SuperRAM Series Revisited—Adding Axlon Compatibility,” by Torres; “The Atari 800XE/256K Modification,” by Gary Moni; “The Atari 130XE Memory Upgrade,” by Rich Andrews; “The 130XE/320K Upgrade,” by Scott Peterson; and “The WindHover SuperRAM 130XE Upgrade,” by Torres. For those of you with a real hunger for memory, there’s also “The 576K Mod—Muscle for your 130XE” and “The 1088XE,” both by Scott Peterson. Status also has two 520ST upgrades (to one megabyte) for ST owners who missed the upgrade published in Computer Shopper.

Readers who are interested in any of these projects can write to the Southside Tidewater Atari Technical Users Society, 1805 Saint Regis Circle, Virginia Beach, VA 23456. In addition to a SASE, I would recommend including a dollar for the group’s trouble and photocopying expense. And once again, a big Thank You to Dick Litchfield and the members of Status of Virginia Beach for their kind help.

Dear Jeff:

Thank you very much for publishing the Daisy-Dot information in the May issue of Computer Shopper. During March, I decided to place Daisy-Dot in the public domain. Those who don’t have direct access to it (such as through CompuServe) may receive it from me for $5.00.

Enclosed for your review, is a disk with the latest version of Daisy-Dot, including a fix for the Star/Gemini printers and a new sixth font.

Roy Goldman
Denver, Colorado

Thanks for the update. Those interested in the Daisy-Dot program can write to Roy at 2440 South Jasmine Street, Denver, CO 80222. I’ll print a review of the software in an upcoming column.

Correction

If you’ve typed in the “Program Perfect Coder” published in April 1987, you’ll need to change the following two lines to make the program function properly:

15 D$(LEN(D$)+1)=NAME$:OPEN #3,8,0,"P:" 
100 PRINT #3;CHR$(32);D$ 

Electric Checkbook

Using Program Perfect, enter the second part of the checkbook program found under the “Electric Checkbook, Part II” heading and List the program to diskette by typing LIST“D:PARTII.LST.” Now, load Part I of the program (listed here last month) and ENTER the second part by typing ENTER “D:PARTII.LST.” The two parts will be merged in memory. Now type in the lines listed under the “Additions/Modifications to Part I” (lines, 10, 35, 410, 1035 and 1220). The program is now complete and can be saved under a new name (i.e. SAVE “D:CHECK.BAS”). Save the program on a relatively empty diskette so that the program will have enough room to store its data files (leave approximately 50 sectors).

Using The Program

The first thing you’ll want to do is to define a check format that is compatible with the continuous checks you are using. One particularly nice feature of the Electric Checkbook is that it accommodates virtually any check format, since all fields can be positioned as desired.

Defining the Format

When you run the program for the first time, you’ll be asked to insert a data diskette. You can use the program diskette as a data diskette (provided that the diskette is not write protected and has at least 50 free sectors available). Press RETURN.

Soon the main menu screen will appear with the following options: Write A Check, Adjust Account, Define Or Edit Check Format, Grid Printout, Define/Edit Names, Setup/ Enter Account Balance. Select the Grid Printout option on the menu by using the Select key and press Start to initiate the function. The Grid Printout will print an X-Y grid directly on one of your checks so you can determine precisely where each field is located. Insert your continuous checks into the printer and position the first check for printing at a point where you can easily remember. To ensure proper alignment, you will have to reposition the first check to this point each time you reload your printer with continuous checks—so make sure you take note of the point at which you begin printing the grid (i.e. notice where the top of printhead is in relation to the top of the form). You may want to obtain some leading pinfeed strips from your continuous check supplier if these were not included with your order. These attach to the top form so that the first form need not be wasted each time the printer is reloaded.

Once the check is in position, type 21 for the check height. This is the standard number of lines for a continuous check. If you are using a non-standard linefeed amount, or if your continuous forms are of non-standard height, you will have to experiment with different values for the check height.

When the height has been selected, press RETURN and a grid will be printed directly over your check. The X coordinates are displayed on the top of the grid, while the Y coordinates are displayed on the left. Figure 1 shows how this grid appears.

If the grid is not properly centered over the first continuous check, you should try a new starting position and reprint the grid until it properly overlays one continuous check.

00000000001111111111222222222233333333334444444444555555555566666666667777777777 
01234567890123456789012345678901234567890123456789012345678901234567890123456789 
02++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
03++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
04++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
05++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
06++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
07++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
08++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
09++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
10++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
11++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
12++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
13++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
14++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
15++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
16++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
17++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
18++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
19++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
20++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
Figure 1. Formatting Grid

Marking The Fields

Now, with the grid-covered check in hand, circle all of the points where a field begins or ends. For example, circle the first “+” on the “Pay To The Order Of:” line (at the point where you would begin filling in the payee’s name). Also circle the final “+” on this line. Do the same for the space for the date, the amount, the check number (if needed), comments, etc.

Once the proper locations on the grid have been marked, select the Define or Edit Check Format option. Here you will see a screen containing all of the fields available on a typical check (check number, date, pay to name, address, city, state and zip, dollar amount, word amount, and comments). Each field is followed by an X value, a Y value, a length and a status value, You can use the arrow keys to freely move the cursor about the screen for changing any of the various numbers.

STATUS 1:      268.71 

STATUS 2:     $268.71 

STATUS 3: *****268.71 

STATUS 4: *****268.71 

STATUS 5: *****268.71 

STATUS 6: *****268.71 
Figure 2 Status Values

Defining the check format is now a simple matter. Pick a field and find its X and Y value on the gridded check. (To find the X value, select the number at the top of the grid that is directly above the circled “+ .” For the Y value, select the number on the left side of the grid that is on the same horizontal line as the circled “+.”) These are the same X and Y values that are to be placed on-screen. Move the cursor up or down to select the field you have chosen, and then move left or right to select the X “window.” Type the value of the X coordinate and press RETURN. The input will be accepted at the bottom of the screen and will be reproduced in the window. Now, enter the Y coordinate value in the Y window.

The next variable to be entered for a particular field is the length. The value can be obtained by subtracting the X coordinate of the beginning point on the grid from the X coordinate of the ending point. Therefore, if the “Pay to” line begins at X = 10 and ends at X = 75, the length is 75 minus 10 or 65. Enter this value i in the length window.

The status window indicates whether a particular field is “on” or “off.” A “1” in the status box specifies that the field is to be printed, while a “0” specifies not to print the particular field at all. For example, if your checks are preprinted with sequential numbers, you might not want to print the check number on your checks. Therefore, you would place a zero in the status box for the Check Number field. Or, if your check does not leave room for the payee’s address, you can prevent the address from being printed by placing zeroes in the Address and City, State & Zip status boxes. Each of the other fields should contain a “1” in its status box if it is to be printed. Don’t forget to enter these 1s or you’ll wind up with a completely blank check.

The status box for the Dollar Amount serves the additional function of specifying the format of the printed dollar amount. Figure 2 shows the various status values available, and their respective formats. A status of 1 simply prints the amount (without a dollar sign); a status of 2 adds the dollar sign; a status of 3 fills the blank spaces of the field with asterisks; a status of 4 is the same as status 3, but a dollar sign is added to the beginning of the number; a status of 5 is the same as 4, but the dollar sign is placed at the beginning of the field space; a status of 6 fills the blank spaces of the field with dollar signs. (The greater the specified length of the Dollar amount field is, the greater the number of blank spaces will be.) The dollar amount is automatically right-justified. Continue defining the X and Y coordinates, the length and the status numbers until all fields have been defined. When done, press ESC and the format data will be saved to disk.

Next Month

We’ll learn how to define the names of companies and utilities you pay on a regular basis, and we’ll start printing checks!

Readers’ questions, comments and contributions are welcome. Please enclose a self-addressed, stamped envelope (SASE) for a personal reply.

The complete listed version of Electric Checkbook on diskette is available from the author for $7, postpaid. The special enhanced version, with corresponding documentation is available for $11. Please make checks payable to “Jeff Brenner” and specify your disk drive model. Please allow 4-6 weeks for delivery.

“Program Perfect” is a utility used to check for typing errors while entering programs from this column. Readers can send $5 for a diskette or a SASE for a listing of this program.

Address all correspondence to: Jeff Brenner, “Applying The Atari 7/87” c/o Computer Shopper, P.O. Box F,f Titusville, FL 32781-9990.

ADDITIONS/MODIFICATIONS TO PART I 

10 REM ELECTRIC CHECKBOOK 
35 GOSUB 3000 
410 POKE 752,1:POKE 708,204:POSITION 1,11:PRINT "ELECTRIC CHECKBOOK" 
1035 POKE 82,2:L=OLD+2:IF L=1785 THEN L=1773 
1220 POKE C85,14:PRINT "GRID PRINTOUT":PRINT 
ELECTRIC CHECKBOOK, PART II 

RYJ 1890 ON LL GOTO 4250,3660,2620,3940,1930,3330 
OOJ 1900 POKE 710,198:POKE 752,1:POKE 53248,0 
LUJ 1910 POSITION 13,6:PRINT "NOT AVAILABLE YET"; 
FJJ 1920 GOTO 1410 
GZJ 1930 GOSUB 1940:GOTO 1970 
UVJ 1940 POKE 559,0:POKE 53248,0:POKE 53249,0:PRINT CLS$; 
SNJ 1950 FOR I=1768 TO 1790:POKE I,0:NEXT I:POKE 710,198:POKE 752,1 
KBJ 1960 POKE 53250,0:POKE 53251,0:RETURN 
XRJ 1970 POKE 85,12:PRINT "DEFINE/EDIT NAMES" 
XLJ 1980 A=USR(ADR(INVERSE$),0,0,40) 
LUJ 1990 PRINT :PRINT "NAMES CURRENTLY IN MEMORY:":PRINT :GOSUB 2000:GOTO 2050 
GTJ 2000 FOR I=1 TO 15:POSITION 2,3+I:IF I<10 THEN PRINT "0"; 
WXJ 2010 PRINT I;NAME$(I*36-34,I*36); 
HRJ 2020 POSITION 4,3+I:PRINT CHR$(255);NAME$(I*36-35,I*36-35); 
AJJ 2030 NEXT I:POKE 559,34:POKE 82,2 
SPJ 2040 FOR I=4 TO 18:A=USR(ADR(INVERSE$),2,I,2):NEXT I:RETURN 
JKJ 2050 POKE 84,18:PRINT :PRINT D$(1,2); 
QTJ 2060 POKE 752,0:TRAP 1030:PRINT "DEFINE/EDIT WHICH NUMBER";:INPUT EN 
JRJ 2070 POKE 84,19:PRINT D$;"ENTER NEW NAME";:L=14:POKE 85,2:GOSUB 4160 
AHJ 2080 PRINT :LIMIT=36:GOSUB 5060 
XCJ 2090 POSITION 4,3+EN:PRINT A$(2);:POSITION 4,3+EN:PRINT CHR$(255);A$(1,1); 
BAJ 2100 IF A$<>NUL$ THEN NAME$(EN*36-35,EN*36)=A$ 
XJJ 2110 POKE 84,19:PRINT D$;"CURRENT STREET ADDRESS:" 
PJJ 2120 PRINT AD$(EN*36-35,EN*36) 
VBJ 2130 PRINT "ENTER STREET ADDRESS";:POKE 85,2:L=20:GOSUB 4160 
OYJ 2140 PRINT :GOSUB 5060:IF A$<>NUL$ THEN AD$(EN*36-35,EN*36)=A$ 
DIJ 2150 POKE 84,19:PRINT D$(1,2);D$(1,2);D$(3);D$(3); 
HNJ 2160 PRINT "CURRENT CITY, STATE, ZIP:":PRINT CSZ$(EN*36-35,EN*36) 
ACJ 2170 PRINT "ENTER CITY, STATE, ZIP";:L=22 
AYJ 2180 POKE 85,2:GOSUB 4160:PRINT :GOSUB 5060 
YMJ 2190 IF A$<>NUL$ THEN CSZ$(EN*36-35,EN*36)=A$ 
KDJ 2200 POKE 84,19:PRINT D$(1,2);D$(1,2);"MORE NAMES?";:GET #1,N 
RNJ 2210 IF N<>89 THEN POKE 195,170:GOSUB 2400:GOTO 1030 
XXJ 2220 PRINT :GOTO 2050 
RPJ 2230 DIM NAME$(540),AD$(540),CSZ$(540),D$(4),DATE$(20),H$(80),CMT$(80) 
XQJ 2240 NAME$(1)=CHR$(32):NAME$(540)=CHR$(32):NAME$(2)=NAME$ 
DEJ 2250 DIM DEF$(32):DEF$=CHR$(0):DEF$(32)=CHR$(0):DEF$(2)=DEF$ 
FXJ 2260 DIM N1$(36),A1$(36),C1$(36),NUM$(10) 
XTJ 2270 NAME$(1)=CHR$(32):NAME$(540)=CHR$(32):NAME$(2)=NAME$ 
JBJ 2280 AD$(1)=CHR$(32):AD$(540)=CHR$(32):AD$(2)=AD$:DATE$="00/00/00" 
QHJ 2290 CSZ$(1)=CHR$(32):CSZ$(540)=CHR$(32):CSZ$(2)=CSZ$ 
HPJ 2300 D$=CHR$(156):D$(2)=CHR$(156):D$(3)=CHR$(157):D$(4)=CHR$(157) 
PWJ 2310 TRAP 2400:POKE 54286,64:CLOSE #4:OPEN #4,4,0,"D:CHECK.DAT" 
HDJ 2320 NAME$=NUL$:AD$=NUL$:CSZ$=NUL$ 
KYJ 2330 FOR I=1 TO 5:INPUT #4;A$:NAME$(LEN(NAME$)+1)=A$:NEXT I 
XZJ 2340 FOR I=1 TO 5:INPUT #4;A$:AD$(LEN(AD$)+1)=A$:NEXT I 
HGJ 2350 FOR I=1 TO 5:INPUT #4;A$:CSZ$(LEN(CSZ$)+1)=A$:NEXT I 
QAJ 2360 INPUT #4;DEF$ 
HBJ 2370 CLOSE #4:OPEN #4,4,0,"D:BAL.DAT":INPUT #4,BALANCE,DATE$,SERIAL 
DMJ 2380 CLOSE #4 
FTJ 2390 GOTO 2480 
HKJ 2400 TRAP 2510:CLOSE #4:POKE 54286,64 
PHJ 2410 IF PEEK(195)=170 THEN OPEN #4,8,0,"D:CHECK.DAT" 
YDJ 2420 FOR I=1 TO 5:A$=NAME$(I*128-127):IF LEN(A$)>128 THEN A$=A$(1,128) 
DXJ 2430 PRINT #4;A$:NEXT I 
SFJ 2440 FOR I=1 TO 5:A$=AD$(I*128-127):IF LEN(A$)>128 THEN A$=A$(1,128) 
DZJ 2450 PRINT #4;A$:NEXT I 
WKJ 2460 FOR I=1 TO 5:A$=CSZ$(I*128-127):IF LEN(A$)>128 THEN A$=A$(1,128) 
MTJ 2470 PRINT #4;A$:NEXT I:PRINT #4;DEF$ 
LMJ 2480 CLOSE #4:OPEN #4,8,0,"D:BAL.DAT":PRINT #4;BALANCE:PRINT #4;DATE$ 
UDJ 2490 PRINT #4;SERIAL:CLOSE #4 
CTJ 2500 RETURN 
SYJ 2510 GOSUB 1000:POKE 559,0:PRINT CLS$:FOR I=1767 TO 1790:POKE I,0:NEXT I 
SHJ 2520 POKE 710,198:POKE 752,1:POKE 53248,0:POKE 53249,0 
PCJ 2530 PRINT :PRINT :PRINT :POKE C85,9:PRINT "INSERT DATA DISKETTE" 
SUJ 2540 PRINT :I=PEEK(C84):POKE C85,8:PRINT "PRESS RETURN TO CONTINUE" 
FPJ 2550 A=USR(ADR(INVERSE$),14,I,6):POKE 764,255:POKE 559,46 
RFJ 2560 IF PEEK(SK)<>12 THEN 2560 
FLJ 2570 GOTO 2310 
RRJ 2580 IN=INT(IN*100+0.5)/100:NUM$=STR$(IN) 
CHJ 2590 IF IN=INT(IN) THEN NUM$(LEN(NUM$)+1)=".00":RETURN 
NJJ 2600 IF IN*10=INT(IN*10) THEN NUM$(LEN(NUM$)+1)="0" 
CVJ 2610 RETURN 
IIJ 2620 GOSUB 1940 
VOJ 2630 POKE 85,7:PRINT "DEFINE OR EDIT CHECK FORMAT" 
XFJ 2640 A=USR(ADR(INVERSE$),0,0,40) 
FGJ 2650 POKE 84,4 
ICJ 2660 A$=CHR$(17):A$(2)=CHR$(18):A$(37)="18":A$(3)=A$(2) 
INJ 2670 A$(17)=CHR$(5):A$(18)=CHR$(17):A$(22)=CHR$(5):A$(23)=CHR$(17) 
ISJ 2680 A$(27)=CHR$(5):A$(28)=CHR$(17):A$(32)=CHR$(5):A$(33)=CHR$(17) 
DGJ 2690 A$(37)=CHR$(5):PRINT A$:PRINT 
KMJ 2700 A$(1)=CHR$(1) 
EAJ 2710 A$(17)=CHR$(4):A$(18)=CHR$(1):A$(22)=CHR$(4):A$(23)=CHR$(1) 
EFJ 2720 A$(27)=CHR$(4):A$(28)=CHR$(1):A$(32)=CHR$(4):A$(33)=CHR$(1) 
MXJ 2730 A$(37)=CHR$(4) 
WKJ 2740 FOR I=1 TO 7:PRINT A$:PRINT :NEXT I 
GIJ 2750 A$(1)=CHR$(26):A$(17)=CHR$(3):A$(18)=CHR$(26):A$(22)=CHR$(3) 
IMJ 2760 A$(23)=CHR$(26):A$(27)=CHR$(3):A$(28)=CHR$(26):A$(32)=CHR$(3) 
SDJ 2770 A$(33)=CHR$(26):A$(37)=CHR$(3):PRINT A$ 
YQJ 2780 A$(1)=SP$:A$=CHR$(124):A$(17)=CHR$(124):A$(18)=CHR$(124) 
KKJ 2790 A$(22)=CHR$(124):A$(23)=CHR$(124):A$(27)=CHR$(124) 
TRJ 2800 A$(28)=CHR$(124):A$(32)=CHR$(124):A$(33)=CHR$(124):A$(37)=CHR$(124) 
UJJ 2810 POKE 84,5:FOR I=1 TO 8:PRINT A$:PRINT :NEXT I 
JIJ 2820 DATA CHECK NO.,DATE,PAY TO NAME,ADDRESS,C,DOLLAR AMOUNT,WORD AMOUNT 
UFJ 2830 DATA COMMENTS 
ENJ 2840 RESTORE 2820:FOR I=1 TO 8:READ A$:POSITION 3,3+2*I 
QBJ 2850 IF A$="C" THEN A$="CITY, STATE ZIP" 
CWJ 2860 PRINT A$;:NEXT I:POKE 559,34 
JCJ 2870 POSITION 2,3:PRINT "FIELD DESCRIPTION" 
CIJ 2880 POSITION 21,2:PRINT "X":POSITION 26,2:PRINT "Y" 
OEJ 2890 POSITION 20,3:PRINT "POS":POSITION 25,3:PRINT "POS" 
UAJ 2900 POSITION 30,3:PRINT "LEN":POSITION 33,3:PRINT "STAT."; 
HMJ 2910 POSITION 33,3:PRINT CHR$(255); 
PAJ 2920 FOR I=1 TO 8:XPOS=ASC(DEF$(I*4-3)):YPOS=ASC(DEF$(I*4-2)) 
RZJ 2930 LN=ASC(DEF$(I*4-1)):ST=ASC(DEF$(I*4)) 
RQJ 2940 POSITION 20,3+I*2:PRINT XPOS;:POKE 85,25:PRINT YPOS;:POKE 85,30 
FHJ 2950 PRINT LN;:POKE 85,35:PRINT ST;:NEXT I 
QFJ 2960 POSITION 11,23:PRINT "PRESS ESC FOR MENU"; 
ATJ 2970 A=USR(ADR(INVERSE$),17,23,3) 
LZJ 2980 XX=20:YY=5:OX=XX:OY=YY:CNT=0 
GOJ 2990 A=USR(ADR(INVERSE$),XX,YY,3) 
OLJ 3000 IF OX=XX THEN A=USR(ADR(INVERSE$),3,YY,15) 
FQJ 3010 IF OY<>YY THEN 3030 
COJ 3020 A=USR(ADR(INVERSE$),XX-1,2,5):A=USR(ADR(INVERSE$),XX-1,3,5) 
RRJ 3030 OX=XX:OY=YY 
HPJ 3040 KH=PEEK(764):IF KH=255 THEN 3040 
CVJ 3050 GET #1,N:CNT=CNT+1 
CJJ 3060 IF N=28 OR N=45 THEN YY=YY-2 
CHJ 3070 IF N=29 OR N=61 THEN YY=YY+2 
CBJ 3080 IF N=43 OR N=30 THEN XX=XX-5 
CAJ 3090 IF N=42 OR N=31 THEN XX=XX+5 
WHJ 3100 IF N=27 THEN 3280 
CNJ 3110 IF N=155 OR (XX=OX AND YY=OY) THEN 3210 
GDJ 3120 IF XX>35 THEN XX=20 
GCJ 3130 IF XX<20 THEN XX=35 
EQJ 3140 IF YY<5 THEN YY=19 
ETJ 3150 IF YY>19 THEN YY=5 
FLJ 3160 A=USR(ADR(INVERSE$),OX,OY,3) 
OJJ 3170 IF OX=XX THEN A=USR(ADR(INVERSE$),3,OY,15) 
GMJ 3180 IF OY<>YY THEN 2990 
CEJ 3190 A=USR(ADR(INVERSE$),OX-1,2,5):A=USR(ADR(INVERSE$),OX-1,3,5) 
FQJ 3200 GOTO 2990 
UEJ 3210 IF N<>155 THEN POKE 764,KH 
RKJ 3220 POSITION 2,22:PRINT CHR$(156);CHR$(157);"ENTER VALUE: "; 
DYJ 3230 LIMIT=3:GOSUB 5060:POSITION 2,22:PRINT SP$(1,37); 
JXJ 3240 TRAP 3220:A=VAL(A$):IF A>255 OR A<0 THEN 3210 
DRJ 3250 POSITION XX,YY:PRINT SP$(1,3);:POSITION XX,YY:POKE 752,1:PRINT A; 
MTJ 3260 TMP=(YY-5)*2+(XX-20)/5+1 
IIJ 3270 DEF$(TMP,TMP)=CHR$(A):GOTO 3170 
AYJ 3280 IF CNT<2 THEN 1030 
RZJ 3290 TRAP 2400:POKE 54286,64:CLOSE #4:OPEN #4,12,0,"D:CHECK.DAT" 
KYJ 3300 FOR I=1 TO 15:INPUT #4;A$:NEXT I 
LYJ 3310 PRINT #4;DEF$:CLOSE #4 
FDJ 3320 GOTO 1030 
IHJ 3330 GOSUB 1940 
CMJ 3340 POKE C85,7:PRINT "SETUP/ENTER ACCOUNT BALANCE" 
RSJ 3350 A=USR(ADR(INVERSE$),0,0,40):POKE 559,34:PRINT 
TXJ 3360 I=PEEK(84):PRINT "CURRENT BALANCE: ";BALANCE 
YKJ 3370 A=USR(ADR(INVERSE$),2,I,16) 
DBJ 3380 POKE 84,5:PRINT "CURRENT DATE: ";DATE$ 
XIJ 3390 A=USR(ADR(INVERSE$),2,5,22):POKE 752,0 
TQJ 3400 PRINT :PRINT "NEXT SERIAL NUMBER: ";SERIAL 
EVJ 3410 POKE 84,10:PRINT "CHANGE DATE (Y/N)? ";:GET #1,N:PRINT CHR$(N) 
WSJ 3420 IF N=78 THEN 3550 
QLJ 3430 DATE$="00/00/00" 
YGJ 3440 PRINT "ENTER MONTH (1-12): ";:LIMIT=2:GOSUB 5060 
WOJ 3450 TRAP 1030:MO=VAL(A$):IF MO<0 THEN 3440 
TEJ 3460 PRINT "ENTER DAY (1-31): ";:GOSUB 5060:DAY=VAL(A$):IF DAY<0 THEN 3460 
BPJ 3470 PRINT "ENTER YEAR (87,88, etc.): ";:GOSUB 5060:YEAR=VAL(A$) 
EGJ 3480 IF YEAR<0 THEN 3470 
JMJ 3490 IF MO>9 THEN DATE$(1,2)=STR$(MO) 
KRJ 3500 IF MO<10 THEN DATE$(2,2)=STR$(MO) 
ONJ 3510 IF DAY>9 THEN DATE$(4,5)=STR$(DAY) 
QBJ 3520 IF DAY<10 THEN DATE$(5,5)=STR$(DAY) 
VFJ 3530 IF YEAR>9 THEN DATE$(7,8)=STR$(YEAR) 
WTJ 3540 IF YEAR<10 THEN DATE$(8,8)=STR$(YEAR) 
NPJ 3550 IF BALANCE<>0 THEN 3580 
NXJ 3560 PRINT "ENTER ";DATE$;" BALANCE: ";:LIMIT=11:GOSUB 5060 
TSJ 3570 TRAP 3560:BALANCE=VAL(A$) 
CTJ 3580 PRINT "CHANGE CURRENT SERIAL NUMBER (Y/N)? ";:GET #1,N:PRINT CHR$(N) 
AJJ 3590 IF N<>89 THEN 3620 
IRJ 3600 PRINT "ENTER SERIAL NUMBER: ";:LIMIT=8:GOSUB 5060 
RWJ 3610 TRAP 3600:SERIAL=VAL(A$) 
MRJ 3620 CLOSE #4:POKE 54286,64:OPEN #4,8,0,"D:BAL.DAT" 
DPJ 3630 PRINT #4;BALANCE:PRINT #4;DATE$:PRINT #4;SERIAL 
DMJ 3640 CLOSE #4 
FJJ 3650 GOTO 1030 
WEJ 3660 OLDBAL=BALANCE 
VKJ 3670 GOSUB 1940:POKE C85,13:PRINT "ADJUST ACCOUNT" 
XKJ 3680 A=USR(ADR(INVERSE$),0,0,40) 
VAJ 3690 PRINT :PRINT DATE$;" CURRENT BALANCE: ";BALANCE:POKE 82,12:PRINT 
XOJ 3700 POKE 84,4:PRINT "+ ADD AMOUNT":PRINT "- SUBTRACT AMOUNT" 
BZJ 3710 PRINT "= ENTER NEW BALANCE" 
ONJ 3720 A=USR(ADR(INVERSE$),12,4,1):A=USR(ADR(INVERSE$),12,5,1) 
XMJ 3730 A=USR(ADR(INVERSE$),12,6,1) 
RTJ 3740 PRINT "RETURN TO MENU" 
XKJ 3750 A=USR(ADR(INVERSE$),12,7,6):POKE 82,2:POKE 559,34:POKE 752,1 
DVJ 3760 PRINT :POKE C85,6:PRINT "PRESS DESIRED HIGHLIGHTED KEY"; 
UTJ 3770 POKE C85,6:L=29:GOSUB 4160 
OEJ 3780 POKE 752,1:PRINT CHR$(30);CHR$(31); 
CNJ 3790 GET #1,N 
YZJ 3800 IF N<>45 THEN 3840 
GZJ 3810 POKE 752,0 
JZJ 3820 POKE 84,8:PRINT D$;"SUBTRACT HOW MUCH? ";:LIMIT=12:GOSUB 5060 
NOJ 3830 TRAP 3820:BALANCE=BALANCE-VAL(A$):GOTO 3670 
AEJ 3840 IF N<>43 THEN 3870 
TDJ 3850 POKE 84,8:PRINT D$;"ADD HOW MUCH? ";:LIMIT=12:GOSUB 5060 
NSJ 3860 TRAP 3850:BALANCE=BALANCE+VAL(A$):GOTO 3670 
ABJ 3870 IF N<>61 THEN 3900 
PPJ 3880 POKE 84,8:PRINT D$;"NEW BALANCE: ";:LIMIT=12:GOSUB 5060:TRAP 3880 
UBJ 3890 BALANCE=VAL(A$):GOTO 3670 
ALJ 3900 IF OLDBAL=BALANCE THEN 1030 
KSJ 3910 TRAP 1030:POKE 54286,64:CLOSE #4:OPEN #4,8,0,"D:BAL.DAT" 
YWJ 3920 PRINT #4;BALANCE:PRINT #4;DATE$:PRINT #4;SERIAL:CLOSE #4 
FKJ 3930 GOTO 1030 
IOJ 3940 GOSUB 1940 
SPJ 3950 POKE C85,14:PRINT "GRID PRINTOUT" 
WZJ 3960 A=USR(ADR(INVERSE$),0,0,40):GOSUB 3970:GOTO 4040 
HOJ 3970 POKE 84,5:POKE 559,34 
TXJ 3980 PRINT "CHECK HEIGHT (21)? ";:LIMIT=3:GOSUB 5060:TRAP 1030 
IGJ 3990 CH=VAL(A$) 
XGJ 4000 PRINT :PRINT "1) INSERT CHECKS INTO PRINTER" 
NTJ 4010 PRINT "2) PROPERLY POSITION FIRST CHECK":POKE 752,1 
FEJ 4020 I=PEEK(84):PRINT "3) PRESS RETURN FOR PRINTOUT" 
TVJ 4030 A=USR(ADR(INVERSE$),11,I,6):RETURN 
VJJ 4040 GET #1,N:IF N<>155 THEN 1030 
FEJ 4050 PRINT :PRINT "PRINTING...":POKE 54286,0 
WJJ 4060 IF Q=70 THEN 6200 
MFJ 4070 TRAP 1370:CLOSE #4:OPEN #4,8,0,"P:" 
PVJ 4080 FOR I=0 TO 7:A$(1)=STR$(I):A$(9)=STR$(I):A$(2)=A$ 
GIJ 4090 PRINT #4;A$;:NEXT I 
YXJ 4100 PRINT #4:J=0:FOR I=1 TO 80:PRINT #4;J; 
JWJ 4110 J=J+1:IF J=10 THEN J=0 
AYJ 4120 NEXT I:A$(1)="+":A$(78)="+":A$(2)=A$:A$(78)="+" 
EZJ 4130 FOR I=2 TO CH-1:IF I<10 THEN PRINT #4;"0"; 
IZJ 4140 PRINT #4;I;A$:NEXT I 
BKJ 4150 CLOSE #4:GOTO 1030 
TIJ 4160 IF PEEK(764)<>255 THEN 4240 
NYJ 4170 POKE 752,1:PRINT CHR$(30);CHR$(31); 
MOJ 4180 FOR I=1 TO 8 
FUJ 4190 A=USR(ADR(INVERSE$),PEEK(85),PEEK(84),L) 
MQJ 4200 FOR W=1 TO 3 
HIJ 4210 IF I/2=INT(I/2) AND PEEK(764)<>255 THEN 4240 
TSJ 4220 NEXT W:NEXT I 
NUJ 4230 POKE 752,0:PRINT CHR$(30);CHR$(31); 
CWJ 4240 RETURN 
IJJ 4250 GOSUB 1940 
KYJ 4260 POKE C85,14:PRINT "WRITE CHECK" 
XGJ 4270 A=USR(ADR(INVERSE$),0,0,40) 
VRJ 4280 PRINT "NAMES IN MEMORY:" 
IBJ 4290 GOSUB 2000 
WRJ 4300 PRINT :PRINT "ENTER NUMBER OR PRESS RETURN TO ENTER" 
VYJ 4310 PRINT "AN UNLISTED NAME: ";:LIMIT=2:GOSUB 5060:IF A$=NUL$ THEN 4350 
ARJ 4320 TRAP 1030:IND=VAL(A$):IF IND<0 OR IND>15 THEN 4250 
YTJ 4330 N1$=NAME$(IND*36-35,IND*36):A1$=AD$(IND*36-35,IND*36) 
QFJ 4340 C1$=CSZ$(IND*36-35,IND*36):GOSUB 4410:GOTO 4430 
CGJ 4350 GOSUB 4410:PRINT :I=PEEK(84):PRINT "ENTER NAME":PRINT ">"; 
NGJ 4360 A=USR(ADR(INVERSE$),2,I,10):LIMIT=35:GOSUB 5060:N1$=A$ 
CZJ 4370 PRINT :PRINT :PRINT "ENTER ADDRESS":PRINT ">"; 
QPJ 4380 A=USR(ADR(INVERSE$),2,I+4,13):LIMIT=35:GOSUB 5060:A1$=A$ 
BEJ 4390 PRINT :PRINT :PRINT "ENTER CITY, STATE & ZIP":PRINT ">"; 
QPJ 4400 A=USR(ADR(INVERSE$),2,I+8,23):GOSUB 5060:C1$=A$:GOTO 4430 
CYJ 4410 GOSUB 1940:POKE C85,14:PRINT "WRITE CHECK":A=USR(ADR(INVERSE$),0,0,40) 
EXJ 4420 POKE 559,34:RETURN 
SPJ 4430 PRINT :I=PEEK(84):PRINT "AMOUNT OF CHECK: "; 
YJJ 4440 A=USR(ADR(INVERSE$),2,I,16) 
HXJ 4450 LIMIT=12:GOSUB 5060:TRAP 1030:IN=VAL(A$):TXT$=NUL$:GOSUB 1450 
OFJ 4460 PRINT "NEW BALANCE: ";:BALANCE=BALANCE-IN:TEMP=IN:IN=BALANCE 
KFJ 4470 GOSUB 2580:PRINT NUM$:IN=TEMP 
GVJ 4480 BALANCE=BALANCE+IN 
SDJ 4490 PRINT :I=PEEK(84):PRINT "COMMENTS: ";:A=USR(ADR(INVERSE$),2,I,9) 
ACJ 4500 LIMIT=26:GOSUB 5060:CMT$=A$ 
IDJ 4510 GOSUB 4410 
CQJ 4520 PRINT :POKE C85,10:PRINT "VERIFICATION SCREEN" 
AKJ 4530 A=USR(ADR(INVERSE$),10,2,19) 
HOJ 4540 PRINT :PRINT "NAME AND ADDRESS:":A=USR(ADR(INVERSE$),2,4,17) 
GKJ 4550 PRINT N1$:PRINT A1$:PRINT C1$ 
HIJ 4560 PRINT :PRINT "AMOUNT:":A=USR(ADR(INVERSE$),2,9,7) 
MYJ 4570 GOSUB 2580:PRINT NUM$ 
MKJ 4580 PRINT TXT$ 
ORJ 4590 PRINT :I=PEEK(84):PRINT "COMMENTS:":A=USR(ADR(INVERSE$),2,I,9) 
KUJ 4600 PRINT CMT$:POKE 752,0 
QBJ 4610 POKE 84,22:PRINT D$;"OK (Y/N)? ";:GET #1,N:PRINT CHR$(N); 
WSJ 4620 IF N<>89 AND N<>78 THEN 4610 
WUJ 4630 IF N=78 THEN 4250 
IHJ 4640 GOSUB 4410 
HDJ 4650 POKE 752,1 
ITJ 4660 GOSUB 3970 
VSJ 4670 GET #1,N:IF N<>155 THEN 1030 
SOJ 4680 TRAP 1370:POKE 54286,64:CLOSE #4:OPEN #4,8,0,"P:" 
HAJ 4690 BALANCE=BALANCE-IN 
TGJ 4700 FOR I=0 TO CH-1 
MOJ 4710 FOR J=1 TO 8 
EZJ 4720 IF ASC(DEF$(J*4-2))<>I OR ASC(DEF$(J*4))=0 THEN NEXT J:GOTO 4790 
XSJ 4730 H$=SP$ 
LYJ 4740 FOR J2=1 TO 8:JJ=J2*4-3 
IYJ 4750 IF ASC(DEF$(JJ+1))<>I OR ASC(DEF$(JJ+3))=0 THEN NEXT J2:GOTO 4780 
BRJ 4760 GOSUB 4830:H$(ASC(DEF$(JJ)),ASC(DEF$(JJ))+ASC(DEF$(JJ+2)))=TMP$ 
CZJ 4770 NEXT J2 
NHJ 4780 PRINT #4;H$; 
WYJ 4790 PRINT #4:NEXT I:POKE 752,1 
MXJ 4800 GOSUB 4410:POKE 752,0:PRINT :PRINT "ANOTHER PRINTOUT (Y/N)? "; 
RZJ 4810 GET #1,N:IF N=89 THEN 4640 
FEJ 4820 SERIAL=SERIAL+1:POKE 54286,64:GOSUB 2480:GOTO 1030 
WRJ 4830 IF J2=6 THEN 4940 
IUJ 4840 IF J2=1 THEN TMP$=STR$(SERIAL) 
OYJ 4850 IF J2=2 THEN TMP$=DATE$ 
IXJ 4860 IF J2=3 THEN TMP$=N1$ 
IMJ 4870 IF J2=4 THEN TMP$=A1$ 
IQJ 4880 IF J2=5 THEN TMP$=C1$ 
ODJ 4890 IF J2=7 THEN TMP$=TXT$ 
MUJ 4900 IF J2=8 THEN TMP$=CMT$ 
JFJ 4910 TMP$(LEN(TMP$)+1)=SP$ 
BTJ 4920 IF LEN(TMP$)>ASC(DEF$(JJ+2)) THEN TMP$=TMP$(1,ASC(DEF$(JJ+2))) 
DCJ 4930 RETURN 
SCJ 4940 TMP$=SP$:ST=ASC(DEF$(JJ+3)):LN=ASC(DEF$(JJ+2)) 
GGJ 4950 GOSUB 2580:NN$=NUM$ 
JIJ 4960 TRAP 1370:LNP=LN-LEN(NN$):TMP$(LNP+1)=NN$ 
JTJ 4970 IF ST=1 THEN RETURN 
BWJ 4980 IF ST=2 THEN TMP$(LNP,LNP)="$":RETURN 
MPJ 4990 IF ST=6 OR LN<=LEN(NN$) THEN 5040 
NFJ 5000 TMP$(1,1)="*":TMP$(LNP,LNP)="*":TMP$(2,LNP)=TMP$(1,LNP-1) 
JHJ 5010 IF ST=3 THEN RETURN 
BKJ 5020 IF ST=4 THEN TMP$(LNP,LNP)="$":RETURN 
MGJ 5030 IF ST=5 THEN TMP$(1,1)="$":RETURN 
MXJ 5040 TMP$(1,1)="$":TMP$(LNP,LNP)="$":TMP$(2,LNP-1)=TMP$(1,LNP) 
CWJ 5050 RETURN 
TXJ 5060 HX=PEEK(85):POKE 85,HX+LIMIT:PRINT CHR$(25);:POKE 85,HX:POKE 752,0 
OEJ 5070 PRINT CHR$(30);CHR$(31); 
BEJ 5080 POKE 694,0:GET #1,N:IF N<>155 AND N<>156 AND N>128 THEN N=N-128 
NHJ 5090 IF PEEK(93)=89 THEN 5110 
UUJ 5100 IF N>30 AND N<125 THEN PRINT CHR$(N); 
NVJ 5110 IF N=126 AND PEEK(85)>HX THEN PRINT CHR$(N); 
LUJ 5120 IF N=30 AND PEEK(85)>HX THEN PRINT CHR$(N); 
SSJ 5130 IF N=156 THEN POKE 85,HX:PRINT SP$(1,LIMIT);:POKE 85,HX 
XRJ 5140 IF N=156 THEN PRINT CHR$(30);CHR$(31);:POKE 764,255:GOTO 5080 
BVJ 5150 IF N<>155 THEN 5080 
VRJ 5160 POKE 85,HX:INPUT #3;A$:A$=A$(1,LIMIT):IF A$=SP$(1,LIMIT) THEN A$=NUL$ 
DPZ 5170 RETURN 
COMPUTER SHOPPER / AUGUST 1987 / PAGE 149 

Applying The Atari

by Jeff Brenner

The “Applying The Atari” column reaches another milestone as you read these very words. Yes, I’m talking about none other than the third anniversary of the “Applying The Atari” column. Time to reminisce!

Looking back over these past three years I am reminded of the glory days of the 8-bit Atari, before the STs stole the spotlight, and when Atari was on the brink of complete financial ruin. The new Atari has undoubtedly come a long way in recent years. With the guidance of Jack Tramiel and the success of the ST computer line, some long-deserved respect has finally been won for the Atari computer name. And the eight-bit machines still live on! A 65XE-compatible game machine, Atari’s new 80-column adapter, one of the widest variety of memory expansion options available (with some expansions now into the megabyte range), continued 8-bit hardware and software support from the smarter companies and the ongoing 8-bit loyalty among the many great Atari users’ groups are all living proof that the 8-bit machine is far from dead.

The 8-bit Emulator for the ST

In a message on GEnie, Atari spokesman Neil Harris has given the okay for use of the 8-bit operating system code in an 8-bit emulator being designed by Canadian student Darek Mihocka for the ST, provided that Darek publishes the source code for his emulator. The permission may ultimately mean that we’ll see a commercially distributed 8-bit emulator for the ST, provided that necessary components of Darek’s emulator can be re-coded for more speed (the emulator at present runs anywhere from 20 to 40 percent of the speed of a real 8-bit Atari). Initially, Darek’s emulator project was not greeted with much affection by Atari, nor by the ST software producers who want new ST owners to start their software collections by buying their $49.95 ST games and $159.95 applications, instead of using the abundance of low cost, time-proven 8-bit software already out there.

Atari’s original announcement that the 8-bit operating system was copyrighted and could not be used without the company’s consent had stirred quite a debate among 8-bit and ST owners alike. Many had realized that Atari had placed the XL Translator diskette into the public domain a number of years ago. The Translator diskette contains the original operating system of the Atari 800 computers and allows XL/XE owners to make use of some older 8-bit software that is incompatible with the XL/XE operating systems. By placing the Translator diskette in the public domain, some argue, the company had effectively placed the operating system of the 8-bit Atari into the public domain, and as public domain material, anybody can use or adapt the code for personal or commercial use. (Atari has since attempted to “take back” the translator disk and renounce its public domain status.)

In any event, the 8-bit emulator, if successfully completed and released will add the needed element of compatibility between the 8-bit and 16-bit machines, thereby allowing 8-bit owners to upgrade while still maintaining their familiar 8-bit software libraries into which many have invested several times the value of their entire 8-bit systems!

Like the Magic Sac, a Macintosh emulator for the ST designed by David Small, any 8-bit software to be used on an ST would have to be ported over to the STs diskette format on 3.25" disk, thereby raising the issue of whether ST owners will begin to freely distribute (pirate) 8-bit software on the ST-format diskettes or via modem. But that’s a topic for another column.

Reader Mail

Dear Jeff,

Thank you so very much for your review of the YEMACYB software. You were most accurate and fair in your review of the software (June 1987). We know that you don’t have very much space available in your section and we really appreciate your support more than we can show. We assume that you don’t want to alienate your advertisers, many of whom carry color printers, but we feel that the Atari 8-bit user has been slighted by the offerings from the major manufacturers. The Atari 8-bit user really has only the Okimate 10 as an alternative to YEMACYB for quality color printouts, and you probably know how slow the Okimate software is. Even third party programs for the Okimate 10 are three times slower than YEMACYB for a dump of about 60% the size of YEMACYBs, Only 4 colors per print is standard on all other software also. We feel that these points maybe should have been emphasized more.

We are enclosing the latest deluxe version of YEMACYB that was released this spring. The main changes have occurred in the utilities. We have addressed most of your concerns expressed in your review of the original software. Now the software doesn’t require a Translator either. It now occupies 2 full disk sides and we had to increase the price ($29.95) to cover the costs. We feel that this package, along with the YEMACYB/4 software for the color printers, is the most significant and innovative printer software for any 8-bit machine.

Michael L. Clayton
Electronical Software
Rochester, Michigan

I thank you for the update on your product. In response to your letter, I should first mention that my reviews are written completely independently, with no consideration whatsoever of Computer Shopper’s advertisers (as I would hope is the policy of any reviewer for any magazine with regard to its advertisers.) Consequently, I am always happy to clarify a statement or a point made in my review. You are correct that I should have stressed the slowness of the Okimate, since I did complain about the time it took to print a picture with YEMACYB. The Okimate 10 is indeed slow; very slow, in fact, as you said. Still, changing the ribbon cartridge four times during the printout and repositioning the paper each time made the printing job with YEMACYB seem a lot more burdensome than the Okimate’s mere time-consumption factor; at least I could walk away from the Okimate while it was doing its job. And as I said in my review, I might forget about the program if I was limited to a printer with a spool-type ribbon (such as on the older STAR Gemini’s), since it used to take me what seemed like a half-hour just to thread the darned thing on my original Gemini 10X. The YEMACYB user would have to thread a new ribbon four times per picture...for me, that’s a nightmare!

Of course, for those who are proficient spool threaders, and for those with cartridge ribbons, if we compare YEMACYB to the Okimate strictly in terms of printing time, YEMACYB does definitely have the advantage in printing color images—and yes, all without the need to give up your b/w dot matrix printer.

Dear Jeff,

I read with great interest your response to the software compatibility issue between the Atari XLs and the XEs (Computer Shopper, June 1987). You mention that the 130XE can run any software designed for the XLs. I beg to differ as I have experienced the following problem: I bought the Electronic Arts game, “One-on-One.” The instructions for the XE said to “hold down the option key while booting until the Electronic Arts logo appeared.” Well, all that seems to happen is that the logo keeps reappearing. The actual game never boots. When I called Electronic Arts about the problem, they told me that I needed a Translator disk, but did not know where I could purchase one. With a little more research I found out that the same condition exists on an 800XL.

Have you heard of any similar problems between the operating systems of the XEs and XLs?

Ben Bembenek
Boston, Massachusetts

Actually, you do not appear to be describing a compatibility problem between the XL and XE, but rather between the 800 and the XL/XE machines. Remember, the 65XE is essentially an 800XL in a redesigned case. To a computer program, a 65XE is identical to an 800XL. A 130XE differs by only some bytes in ROM, and the fact that it has an additional 64K of RAM that can be banked into an allocated memory area. Therefore, any program that runs on the XL or 65XE should run on the 130XE, except for the hypothetical case where a program has been copy-protected to the extent that it does an operating system checksum or fiddles with the memory control register to insure that the program is being run only on an 800 or XL and not on some hacker’s experimentation board. However, I have yet to find a program that works on an XL but does not work on the 130XE. (If such a program existed—one that runs on an 800 or XL but not on the 130XE—then a Translator disk would probably not achieve compatibility since the heavily protected program would undoubtedly detect and/or disable the newly loaded operating system.)

When you are told you need a translator disk, this means that the program you are using was designed for the original 800 operating system and will not work on the XL or XE machines. The Translator disk loads the 800 operating system into your XL/XE, thereby allowing you to use the older software. (Frankly, I am puzzled as to why Electronic Arts told you that you need a translator disk for One-on-One if the documentation instructed you to hold down the Option key, since the Option key procedure is only done on an XL/XE, and therefore the documentation implies XL/XE compatibility. I will have to check on this with Electronic Arts.)

Had your problem existed on the 130XE but not on the 800XL, then you would have correctly diagnosed an incompatibility, but apparently the incompatibility you are experiencing is indeed the same incompatibility I discussed in the June column (between the 800 and the XL/XE). I am therefore sending you a Translator disk so you can determine if this will correct the problem. Other readers interested in the Translator disk will most likely be able to obtain a copy from a local users’ group, or I will supply a copy with instructions at the standard $7 monthly diskette price to readers who request the “Translator Disk.”

There is another specific incompatibility among the 8-bit machines that I should have addressed in June, and it concerns hardware compatibility on the 1200XL. While the 400, 800, 600XL, 800XL, 65XE and 130XE are all hardware compatible, the 1200XL is a special case since its serial port does not provide the standard power output found in the other 8-bit models. Therefore, a number of 8-bit compatible external peripherals (specifically, interfaces and other peripherals that draw power from the serial port) will not work on the 1200XL.

Dear Jeff,

I have a Star Micronics NX-10 printer, a P:R:Connection, and an Atari 130XE computer. I use AtariWriter Plus as my word processor. I have found that you do not have to use a printer driver with this system. When asked what printer you use, answer H for Other and at the next menu answer E for Epson FX-80. All of the extra printer functions will work fine.

The super and subscripts can be accessed by [CONTROL] [G4 & G5] as you would on the Atari XMM801 printer.

Randy Hefner, Vice-President
Hickory Atari Computer Enthusiasts
Hickory, North Carolina

Thanks for the tip, which applies to the Gemini 10/15/X models as well. One of the reasons why the Star/Gemini printers have been so popular is that aside from their low prices, they are compatible to a large degree with the popular Epson codes.

Newsletters

In the mail this month: T.A.C.E. Hardcopy is the new newsletter of the Tinker Atari Computer Enthusiasts ($20/yr, P.O. Box 19456, Oklahoma City, OK 73144). The premier issue, June 1987, was heavy on local club news but also featured a question and answer column, DOS tips for the XL/XE, and a graphics article for the ST.

The L.I.A.U.G. Lighthouse is the newsletter of the Long Island Atari User Group. ($20/yr, P.O. Box 835, Lindenhurst, NY 11757). The May 1987 issue contained Atari news, tips on the Action! programming language, and a number of reviews.

SPACE probes is the newsletter of Southcentral Pennsylvania Atari Computer Enthusiasts (P.O. Box 11446, Harrisburg, PA 17108-1446). The June 1987 column contained an article on porting data from the 800/XL/XE computes to the STs, reviews, and an article on improving the XLs monitor pinout.

GLITCH is the newsletter of the Progressive Atari Computing User Group (P.O. Box 196, Rantoul, IL 61866-0196). The May 1987 issue contained articles detailing visits some members made to software companies, including Sublogic and Xanth. Also included was an extensive interview with ICD President Tom Harker, articles on data censorship, backup utilities, and learning Atari BASIC.

Electric Checkbook Instructions

This month we’ll learn about the remaining features of the Electric Checkbook program presented in the June and July columns. We’ll get to define names and addresses, adjust the account balance, and begin writing checks.

Entering Names

Select the Define/Edit Names option to enter the names and addresses of companies, individuals, associations, etc. to whom you write checks on a regular basis. The screen will show all of the names currently in memory (or no names if nothing has been entered yet.) A name can be stored on any one of the fifteen lines by typing in a number to the “Define/Edit which #?” prompt. You’ll first be asked to enter the name, such as “County Water District,” which will then be displayed on the line that you specified. Next, you’ll be asked to enter the street address, followed by the city, state and zip. The address information is not displayed on the screen, but is stored by the program. To continue entering more names and addresses, enter “Y” for the “More Names?” prompt.

To change a name or address once it has been entered, type the line number of the name in response to the “Define/Edit which #?” prompt. You’ll be shown the current name in memory and asked for the new name (simply press RETURN for no change.) Then you’ll be shown the current address and asked for the new address. Finally, you’ll be shown the current city, state and zip and be asked for the new city, state and zip. If the information is to remain the same as is currently in memory, you can simply press Return.to any of the prompts, and the data will remain unchanged.

When you have finished entering or editing names and addresses, answer “N” to the “More Names” prompt and the data you entered/modified will be saved to diskette.

Setting Up

Before you begin writing checks, you will want to tell the program your account balance, the current date, and the serial number of the next check you will be printing on. Select the Setup/Enter Account Balance option and press Start. The first time you use the program, you’ll be asked for the current balance, serial number and date. This information will be saved on the disk. When you use Electric Checkbook in the future, you’ll be asked if you want to change the date, to which you would type “Y” and enter the new date. You’ll also be asked if you want to change the current balance or serial number, but these values are automatically maintained by the program, so you probably will not have to adjust them again.

Adjusting The Account

To update the current balance maintained by the program to reflect service charges, deposits, withdrawals or interest earned, select the Adjust Account option. You’ll be shown the current balance and asked to press the plus key (+), minus key (-) or equal key. Press + to add an amount to your balance (such as interest earned or deposits) and then enter the value. The current balance displayed will be increased by the amount you entered. Press - to subtract an amount from your balance (such as service charges or withdrawals). To enter a new balance entirely, press = and type in the new balance. Press Return when you have finished adjusting your account.

Writing Checks

Select the Write Check option on the main menu screen and press Start. You’ll be shown the screen containing the names that have been preprogrammed. If you are making the check out to one of these names, simply press the number preceeding the name. Otherwise, simply press Return to enter an unlisted name and you’ll be asked to enter the name followed by the address, city, state and zip. The address can be omitted if you did not define it to be printed on your check (or if there is no space provision for an address on your checks.)

Next you’ll be asked to enter the comments and the amount of the check. Before printing begins, you’ll be shown a verification screen which displays the name and address of the firm or individual the check is being written for, the amount of the check in both numeric and word format, and the comments you have entered. Press Y at the “OK?” prompt if this information is correct, otherwise press N and you’ll be asked to re-enter the information.

Position the check in the printer as described last month and press RETURN to print the check. When the check has been printed, you’ll be asked if you want “Another printout (Y/N)?” Type Y to this prompt to reprint the check information on the second part (the stub) of the continuous check for your records.

Enhanced Version

As mentioned last month, an enhanced version of the listed Electric Checkbook program is available to readers who desire a full-featured checkwriting program. The enhanced version offers greater pre-programmed name storage capability, keeps disk records of all checks written and all account adjustments (service charges, deposits, etc.), allows a second set of format definitions for the check stub, can provide a listing of all account activity (for tax purposes) or of outstanding checks (for balancing purposes), and offers general improvements in speed and error-handling. The enhanced version includes documentation. See end of column for information on purchasing the enhanced version.

Next Month

We’ll learn how to simulate some MicroSoft BASIC commands in Atari BASIC, look at reader mail, newsletters, and more. •

COMPUTER SHOPPER / NOVEMBER 1987 / PAGE 187 

Applying The Atari

by Jeff Brenner

This month we’ll read some reader mail, learn about more memory expansion articles, look at some user group newsletters, and learn of one reader’s idea for a new 8-bit dream product.

Reader Mail

Dear Jeff:

I recently discovered Computer Shopper, and I find your Atari articles most informative and interesting. Can you please send me a listing of the program disks you have offered through your column and their prices? Thank you and keep up the excellent work!

John Doherty
Canoga Park, California

Back-issue diskettes are no longer available from me, as I have stated in the past, but a number of my programs (enhanced versions) are being distributed by Twenty-Fifth Century (P.O. Box 8042, Hicksville, NY 11802). You can obtain a free 28-page catalog by mentioning that you are an “Applying The Atari” reader and enclosing a 39-cent stamp for postage.

Dear Jeff:

In regard to Ben Bembenek’s letter (August 1987) concerning Electronic Art’s One-on-One, I was fortunate enough to notice either in Analog or Antic some time ago that a booting problem with the 130XE exists with One-on-One. The Translator Disk is of no help unless you follow these steps exactly:

(1) Boot Side B of the Translator Disk with the Option button depressed.
(2) Replace with One-on-One and follow on-screen instructions.
(3) As soon as the I/O noise stops (you can also wait until the busy light goes out), and while holding down the option key with the right hand, quickly cut off and on the 130XE power switch with the left hand. This works about 80% of the time.
(4) If the program is going to load properly, the EA logo will get very white (in color).
(5) Repeat if the program does not load with one try. Timing and a fast left hand are important.
(6) Do not hit the reset key or you will have to reboot the program as described earlier.

Here are some game hints: To play better defense, keep the button depressed as you maneuver on defense. To play better offense, back the defensive player in, and occasionally use “fade away” shots by pulling the stick toward you or toward the corners as you shoot.

Kenneth Hudson
Indianola, Mississippi

Many thanks for writing and supplementing John Soquel’s response printed last month. Hopefully Ben and other 130XE owners will now be able to load and run One-on-One.

Dear Jeff:

I just got the September issue of Computer Shopper and read your note concerning “credit where credit is due” (with regard to memory expansion projects designed by David Byrd). It’s ironic that I was just about to drop you a line with the latest mods we have received. Enclosed you will find three modifications. As you can see, one is the latest revision of the David Byrd mod. It is the latest in the 800/Axlon compatible modifications. It is also the easiest to do in that no internal mods are required to the computer other than the second memory board and the ROM board. There is even a kit available from Best Electronics in San Jose, California.

I’m not sure what to say about the “credit” issue. Many moons ago I got a copy of the original D.G. Byrd modification and it was the first one I installed. It was a Big success at Status and my review of the procedure was published in our newsletter. Shortly after our exchange newsletters went out, I got a letter from Dr. Jay Torres of the WindHover Project. He proceeded to inform me that the modification by D.G. Byrd was “a direct copy and compilation of the WindHover articles.” Since then I have been very careful to “pass on” information as received and tried not to get into the fray between Mr. Byrd and Dr. Torres. For a while I passed out both copies to anyone requesting an 800 modification. When the Axlon compatible revision by WindHover came out I discontinued dispensing the Byrd mod. Since receiving “Revision D” by Mr. Byrd and encouraging reviews of its installation by a fellow club member, I have started sending it out with a note to emphasize it as the latest and easiest to install.

Let me thank you, Jeff, for suggesting that readers enclose $1 for the memory mod reprints offered in the July 1987 column. I have received over 100 letters requesting the memory mods. We had requests from as far west as Hawaii and as far east as Spain. The problem has been that most requests asked for All the mods. The one hundred requests equate to 700+ individual copies of modifications as I now have 17 mods that I have been sending out. To say the least, a dollar doesn’t cover the cost of reproducing all of them. Add to that the postage (I finally went 3rd class printed matter rates) and cost of large envelopes and we could have had some negative cash flow. But thanks to the generosity of many Atarians who sent contributions over and above the recommended one dollar, we have been ablt to respond to every request and have not had to dig into our treasury (yet)! Oh, yes, I must not forget the half price special on copies really helped a lot too! It’s been a lot of work, but it’s also been enjoyable.

Dick Litchfield
Virginia Beach, Virginia

As readers may remember in the July 1987 column, Dick Litchfield and STATUS (the Southside Tidewater Atari Technical Users Society) offered to send copies of any of the memory modification projects they had to interested readers. The newer modifications are “The 800 Plus 256K, Revision D” by David G. Byrd, the “320K/576K Memory Upgrade for the 1200XL” by Thomas H. Lawless, and the “320K/576K Upgrade for the 800XL” by Lawless. Readers interested in these reprints or in the reprints listed in the July column can write to the Southside Tidewater Atari Technical Users Society at 1805 Saint Regis Circle, Virginia Beach, VA 93456. In addition to a SASE, I would highly recommend including an appropriate contribution to cover the group’s time, trouble and photocopying expense for the number of reprints you request. And once again, I thank Dick Litchfield and STATUS for taking on the task of making these memory modifications available to all of those individuals interested in making the most out of their Ataris.

As for the “credit” issue, there have been many conflicts over who exactly is responsible for certain modifications, and the David Byrd-Jay Torres conflict is one of them. Each of these authors has placed notices on their articles barring the other from reprinting or modifying any portion due to failure to give proper credit in the past. That many authors work on these projects and place them in the public domain for others to use and share is terrific. And one of the benefits of the public domain status is that others can improve upon an individual’s work and ideas so that perhaps an even better project evolves. As long as the original author is credited and the improved modification is not being sold for a profit, everybody is usually happy. Many of the conflicts and accusations of plagiarism that I have seen in this area result from the failure of an author of a project article to give credit to the originator of the project concept. Over the past year, I have seen maybe twenty XL/XE memory expansion modifications in various user group newsletters all with essentially the same design concepts, but with different authors and illustrations.

I am in no position to judge who was first with any particular idea and when I list projects and their authors, as I did this month, in July and in September, I am merely passing along the title/author information that appeared at the top of the project reprints for identification purposes.

To current and future project designers who intend to place material in the public domain but want to ensure that proper credit is given them, I offer the following advice: Copyright your project articles. The cost is $10 to register a copyright, and you can obtain the necessary forms by writing to the Library of Congress, Copyright Office, Washington, DC 20559. Then, along with the copyright notice on your article, include a message stating that your project may be freely reprinted or modified provided that you are given credit. Should you later find that someone has copied your work without giving you credit, you will now have legal recourse, and more importantly, a means to verify the date of creation.

While on the topic of memory expansion projects, and having mentioned Dr. Jay Torres, the following is a letter I received from Dr. Torres:

Dear Jeff:

I was very pleasantly surprised to see both myself and our group, The WindHover Project, mentioned in your July 87 column of Applying The Atari. Our group is primarily involved in the advanced applications of the Atari computer. These applications include, but are not limited to, robotics, telecommunications, education, higher languages, artificial intelligence, hardware enhancements and software development. We publish a bimonthly newsletter containing mostly original material and try to shy away from reprints of other newsletters whenever possible. We also operate a BBS system for the benefit of our members.

I became interested in the Atari PCs in 1979 with an Atari 800 which became the keystone of my first system. At that time I had a whopping 16K of RAM which quickly got used up. Even when I expanded it to 48K I found that this still was not enough to do what I wanted.

In 1980, Axlon first introduced their 128K RamPower board but at $300 I, along with many other Atarians, was left out in the cold. Rather than give in, I gathered information on bank switching and built a 64K memory board for the 800. This was adapted for the Atari 400 as well with the help of Jerry Rombert, also of the WindHover Project.

As time went by I continued to build on the modifications for the Atari 800 until it reached its final form as the WindHover SuperRam 256K Expansion Modification yielding a total of 288K. This extra memory is controlled by a disk operating system-based on DOS 2.0.

Although I own the copyrights on the SuperRam Modification series for the Atari 400, 800, 130XE and Atari 520ST, I have placed these in the public domain to be used and further worked on by other members of the Atari community.

Individuals interested in obtaining a copy of the flyer containing all the information needed to build any of these modifications are invited to send a SASE to me and request it, A double sided disk containing the DOS needed to run the memory modifications is available for $10. This will provide a double density ramdisk or two single density ramdisks.

The information is made available freely to all user groups provided full credit is, of course, given both to myself and the WindHover Project.

By the way, if you are interested in publishing any portion of the SuperRam Series just let me know. With the declining level of support we eight bit users are getting, it’s up to us to put the world on notice, we won’t just go away.

Dr. Jay Torres, President
The WindHover Project
Bellevue, Nebraska

Newsletters

In the mail for this month comes the PACUS Report, the newsletter of the Packerland Atari Computer Users Society ($15/yr, 2714 S. Eleventh Pl., Sheboygan, WI 53081). The August/September issue contains an article on DOS 2.0/2.5 file structure, game tips and hints for a variety of 8-bit programs, a player/missile graphics article, news and reviews, and ST articles on GFA BASIC and Avant-Garde’s PC-Ditto.

The August issue of JACG, the Jersey Atari Computer Group ($25/yr, 8 Crescent Rd. Pine Brook, NJ 07058) had reviews of ICD’s Multi I/O Board and 221B Baker Street and articles on artificial intelligence, desktop publishing, and translating Pascal and BASIC into C.

The POKEY PRESS is the newsletter of Atari Computer Club of the Palm Beaches (P.O. Box 1526, Boynton Beach, FL 33435). The August issue contained details on the Summer C.E.S., 8-bit product reviews, and an article on ST desktop publishing.

The ACORN KERNEL is the newsletter of the Atari Computer Owners of Rochester, New York (P.O. Box 23676, Rochester, NY 14692). The August issue contained numerous articles on the 8-bit and ST including reviews of Sub Battle Simulator and of the Astra System HD+, and 8-bit short-cut programming tips.

The August newsletter of the Atari Users Group of Knoxville (9553 Roderick Rd., Knoxville, TN 37923) contained articles on surge protection, DBASIC for the ST and a book review of Atari Player-Missile Graphics in BASIC.

The Michigan Atari Magazine (P.O. Box 16132, Lansing, MI 48901) is a cooperative publication of CHAOS, GAG, TAG, BKAUG, WAUG, CKAUG and GRASS. The August issue contains Atari news, reviews of 8-bit and ST software, and an ST articles on C Language and disk directories.

Pie In The Sky

With many software and hardware manufacturers concentrating their efforts on the ST machines, pouring out an endless stream of new ST software products and peripherals, many 8-bit Atari owners have felt somewhat abandoned, or at least neglected. But as Joseph Ennis of Niceville, Florida demonstrates, many of us are still hooked on our 8-bit machines and continue to dream up new ways to utilize or improve this low-cost wonder. Joseph writes:

“I want to buy a product that doesn’t exist! I can visualize what it looks like, what it will do, and a lot of its schematic. I know why I want it. I want it because I want to keep my 8-bit Atari computer! My Atari computer is quite comfortable to use, its cost is already paid for and I have a lot of useful software, which has cost me many times the cost of the computer. I am far from finished exploring the 8-bit Atari’s capabilities. I like the 6502 assembly code better than the 68000 code and far, far better than 8088 code! Finally, I have spent a lot of time learning the machine, and until it starts to bore me, I do not wish to relearn another machine. So what is the problem? Well, I have always felt restricted in the area of Atari graphics, disk speed and sound. Mostly the graphics. I keep wishing that Atari had put at least one more bit in the GTIA registers. I really want (and need) more than 320 pixels per line and more than 3 foreground colors plus one background color. I would like more colors in a player and more pixels. So what’s the solution? I think someone should design a hardware add-on that provides the XLs and XEs with the capabilities that they appear to lack. I think it can be done but I don’t know if it can be done cheap enough to have a market. I’ll probably build one for my own: entertainment, but it won’t really help unless lots of Atari owners have this enhancement board—I can’t write all of the software that I would like to have by myself! So I would want hundreds of thousands of other 8-bit Atari owners to also buy this product.

What is the product? The design specifications for my “GRAPHICS BOARD for Product Life Extension of Atari 8-bit Computers” are as follows:

(1) Compatible with all Atari 8-bit computer programs,
(2) Output is to be RBG with four new formats as well as the 16 current Atari graphics formats: 640×200 (normal 80 column), 640×400 (two 640×200 for screen flipping or one HiRes screen), 640×350, 720×348 (EGA type screen). The graphics board will provide up to 16 colors per scan line of a palette of 4096. There will also be a monochrome composite video output and a color composite.
(3) Regarding physical size, power and weight, the circuit will reside on a 6×12 double sided printing wiring board inside a 7×3×1 3/8 plastic case. The case is sized and styled to match and fit under the 1050 disk drive. Power regulation is on the pwb and the power transformer is in the power cord as is customarily found on Atari components. Weight is not specified, but chip count should be 36 or less.
(4) The interface between the Graphics Board and the 8-bit computers: For the 800, there is the possibility that the board will be internal. The interface to the XL will be a 36-conductor ribbon cable connecting to the bus extension connector on the back of the XL. On the XE, the interface will be a 36 conductor ribbon cable that connects both to the bus extension and cartridge jack. A special connector, one similar to the one ICD uses on their R-TIME 8 module, will be needed.
(5) For the software interface, cooperation is needed from a software house that currently provides a custom DOS for the Atari. My choice would be OSS with DOS XL or ICD with Sparta DOS. It is planned that the I/O part of the Graphics Board interface will look like a “full track” Disk I/O buffer to the DOS software.
(6) For the system interface, the Graphics Board will have an 8K static RAM sitting on both the Atari CPU bus and the Graphics Board bus. It will be at different physical address space on the two buses. On the CPU bus it will be located in the area where the disk buffers are located and try to appear to DOS as if it were a full track buffer. DOS would support READ’s and WRITE’s to it like it was a disk buffer. This 8K SRAM has been designed to have a LS157 acting as a digital switch on its address and data lines. The LS157 normally connects the SRAM to the Video Bus except when the Atari CPU wants to read or write to this address, at which time the LS157 snatches the 8K SRAM away from the Video Bus and gives it to the CPU Bus for a few clock cycles. The 8K SRAM will have the lowest physical memory locations on the Video Bus. The 8K SRAM is logically divided into two 4K blocks, the low 4K block transfers machine language code between the Atari CPU and the Slave Processor on the Graphics Board. The upper 4K block transfers a 4K block of video data between Video RAM and the Atari main memory. Once the Atari CPU has transferred video processing to the Graphics Board, it disables its own video processing interrupts (with a write to memory location $22F) so it can run faster. Upon RESET the Atari will resume video processing until program control returns control to the Graphics Board. The Slave Processor on the Graphics Board has a ROM that gives it a translation table to Display List code into 6502 machine language instructions. The Slave Processor is designed so that on a hardware reset it jumps to the highest memory and reads an absolute JMP that jumps it a little lower in memory, but still within the ROM. First it finds its initialization instructions, then it finds the initialization instructions for the CRT controller chip (6545) then for the Video Palette chip (TMS 34070). After initialization, the Slave Processor jumps to the Video Bus address 0000 and starts executing the Display List it finds there. During initialization, the Slave Processor wrote a Graphics 0 display List into this location. As the Atari CPU, under program control, needs other graphics modes, it rewrites the appropriate Display List into the low 4K of the 8K SRAM starting at the lowest address. The RESET key on the Atari computer forces hardware reset on the Graphics Board.
(7) The target cost is set to be the same as the list price of the 1050 disk drive, or otherwise functions would have to be traded off to lower the price. I would cancel the project if the cost were expected to go three times above this cost.
(8) Hardware Realization: the principal chips are the 8K SRAM (150 nsec), 6264, the Slave Processor (65C02 or 65C816), the CRT controller (65B45), 256K dedicated DRAM (if Allen Macroware of Redondo Beach, California can sell a 256K memory board for $82.95 then there is a chance that the Graphics Board can be brought to market at $160), the Video Palette is a TRM 34070-66 (Texas Instruments), the RGB to composite chip is a MC1377P (Motorola), the Dot Clock module is a 14.318181MHz clock module from Hughes Crystal, Huntsville, Alabama. There will also be a 5-LS157, 4-LS244, 3-LS373, 3-LS166, 4-LS153, a LS151, a LS193 and a 2764 with possibly some additional glueware chips plus 3-2N2222 as emitter followers to protect the 34070 from accidents on the video output lines.
(9) Hardware Realization, Other functions: Add a floppy disk and hard disk controller port. The floppy port is to be SASI and targeted to allow the use of the double density double sided drives used by the IBM PC and clones (twice as good, many times faster and half the price of the 1050). The object is the higher cost of the Graphics Board could be justified by allowing these SASI drives to be the second and above disk drives (keep one 1050 so new Atari software could be read into the system). If an Atari owner is going to buy a second or third drive, there would be a saving and a great boost in performance to go with the Graphics Board and a Tandon or Teac or other DSDD SASI drive. The floppy controller chip will be a Western Digital FD1770 (or maybe a 2793). Add track and socket on the pwb for a Real Time Clock chip to be used by DOS for dating. Something like ICD uses in their R-TIME 8. Add track and socket for a Math Coprocessor chip such as the National MM57409 (40 pin, costs a tenth as much as the Intel chip). And finally, add track and socket for the Sonic chip and a MIDI interface.
Joseph Ennis
Niceville, Florida

Those ideas are interesting and exciting. We would have quite a system if we could add one of your Graphics Boards for $160. But you realize, of course, that there are a number of technical obstacles that would have to be overcome (with both the hardware and software interface) to make this idea a reality. And realistically, when both hardware and software development is considered, I’m afraid we may be looking at a market price much greater than the price of a 1050 drive. But it was fun to be teased with these potential features, and who knows, maybe the folks at ICD have already put one of these things together!

Next Month

Our holiday column is next month and we’ll have information on some of the newest prodcts available for the 8-bit Atari for this holiday season. We’ll also have more reader mail and newsletters.

Reader’s questions, comments and contributions are welcome. Please enclose a self-addressed, stamped envelope (SASE) for a personal reply. Due to volume of mail, only a selected number of personal responses, can be given each month.

“Program Perfect” is a utility used to check for typing errors when entering programs from this column. Readers can send $5 for a diskette or a SASE for a listing of this program.

Address all correspondence to: Jeff Brenner “Applying The Atari 11/87” c/o Computer Shopper, P.O. Box F, Titusville, FL 32781-9990.

COMPUTER SHOPPER / JANUARY 1988 / PAGE 185 

Applying The Atari

by Jeff Brenner

Happy New Year, readers! And now for the big annual question: What does 1988 hold in store for the many new 8-bit Atari owners, the occasional 8-bit “word processing” users, the faithful. 8-bit users’ group attendees, and the die-hard 8-bit hackers? Are the 8-bit machines destined to become closet ornaments, or to face death by starvation as the software supply shrivels up? Are 8-bit owners dumping their hardware and software investments and running out to get hold of an ST (preferably a new Mega-ST)? While the 8-bit owners scream “No!” to these questions, many magazines and software manufacturers (and maybe even Atari Corp. itself) seem to believe that the 8-bit is gone for good. Never mind, say 8-bit owners, that unlike “orphan computers” or discontinued models, three 8-bit models are still being sold on store shelves this very day; namely the 65XE, the 130XE and the new XE game machine. Never mind that the 8-bit Atari community gained thousands of brand new members over this holiday season. And never mind that overseas the 8-bit Atari computers are still the most popular machines in several countries.

While there has most definitely been a decline in software and hardware support for the 8-bits as the STs have been gaining popularity, and while magazines such as the Atari Explorer have been dropping 8-bit pages as fast as they can put in ST pages, the situation for 8-bit owners is far from hopeless. Many new releases for the 8-bit Atari have appeared over the past few months (see last month’s holiday column for a listing) and several manufacturers continue to release 8-bit Atari versions of programs. At this writing, for example, I received the home version of the arcade game Gauntlet, from Mindscape, for the XL/XE, and PaperBoy is also due for release for the 8-bit. (Reviews will be forthcoming in Computer Shopper.) As far as 8-bit information goes, Computer Shopper continues to support the 8-bit, being one of the only magazines among the top ten (by circulation) computer publications to do so. And Antic and ANALOG magazines, which have spun off independent publications for the ST computers, have continued to maintain a consistent balance of 8-bit and ST content, without the appearance of ST domination.

Well, enough talk about theoretical 8-bit computer doom. Let’s instead think positively and look towards the future. The new XE game machine promises to bring back the attention of some software makers to the 8-bits, and the strength of the 8-bit community will assure that the 800, XL and XEs are not soon forgotten. And with that said, let’s move on to some reader mail.

Reader Mail

Dear Jeff:

Would you please set the record straight? I own an 800XL and a 1050 disk drive. I want to hook all my computer components to one main power switch so that I can turn everything on with one flick of a switch (all the power switches of each component would be left “on”). This would mean that I would need to place my disk in the disk drive before I turn the power on, or else the computer would start—“BOOT ERROR...BOOT ERROR...BOOT ERROR” etc. Now my question: I have heard conflicting stories that it is either safe, or unsafe, to turn the power on when a disk is in the drive. What’s the story? My friend swears that she destroyed a disk by doing just that. At work, though, I’ve been doing that for years with no problems. I would appreciate your advice.

S. Markman
Norfolk, Virginia

Leaving a disk in an Atari 810 or 1050 disk drive and turning the power on and off is NOT RECOMMENDED. Atari drives (as well as some others) when turned on or off often send enough of a surge to the engaged read/write head to damage a portion of the disk. Whether or not the diskette will then be usable depends upon how much of a surge the read/write head received and the location of the head with respect to the disk when the power is turned either on or off. I have received numerous letters from readers who have suddenly found one of their diskettes or a commercial diskette wouldn’t load, and in many cases these readers admitted to leaving diskettes in the disk drive. Also, I have personally had programs damaged or destroyed after power outages. The disk does not need to be spinning or “busy” for damage to occur (although losing power when the drive is writing is almost certain to be damaging).

You can go ahead and plug all of your components into one power switch, but just be sure the disk drive is on before you insert your diskette, and not vice versa. Even if the screen begins to show “BOOT ERROR” (when the power switch is initially turned on and the drive has no diskette in it) you can insert your diskette at this point and it should commence to load normally. Better yet, continue to use the power switch on your computer in addition to your main power switch (which would send power to your disk drive, printer, modem, monitor, etc.), insert the diskette into the drive and then turn on the computer itself. This practice may even make it more convenient or easier to remember when you have to hold down the OPTION key.

Dear Jeff:

I sent for and received information for the Ramcharger from Future Systems (formerly Indus). I am still deciding whether or not to buy it. I have not seen any reviews on the Ramcharger. I would like your opinion of Ramcharger. (The Ramcharger is a CP/M emulator for the 8-bit Atari computers with Indus disk drives.)

Cal DeGroot
Rock Falls, Illinois

I have not used the Ramcharger, but if any readers are using the product and want to comment on it, I’d be glad to lend some column space.

Newsletters

The PACUS Report is the newsletter of the Packerland Atari Computer Users Society ($15/yr, 2714 South Eleventh Place, Sheboygan, WI 53081.) The October 1987 issue contains an informative article on the features and bugs of the Atari BASIC, a player/missile graphics tutorial, game reviews, and an article on SPRITES in GFA BASIC for the ST.

RUNES is the newsletter of the Midwest Atari Group, Iowa Chapter ($15/yr, P.O. Box 1982, Ames, IA 50010-1982.) The September issue contains Atari news, a review of Ace of Aces, and an article on a 1050 repair.

The September 1987 issue of JACG, the newsletter of the Jersey Atari Computer Group ($25/yr, 8 Crescent Road, Pine Brook, NJ 07058), contains game reviews, Atari news, a review of the UPRINT interface/buffer and a light-pen project.

The Sourcerer’s Apprentice is the newsletter of the MAGIC, the Michigan Atari General Information Conference ($15/yr, 28111 Imperial Drive, Warren, MI 48093). The August 1987 issue contains a machine language string utility, articles on choosing software and on Atari controllers, plus ST section.

The September 1987 issue of POKEY, the newsletter of the Western New York Atari Users Group ($15/yr, P.O. Box 59, Buffalo, NY 14216) contains a tutorial on ACTION!, and book and software reviews.

Hard Disk Newsletter

The Hard Disk User Group newsletter is a unique publication for 8-bit and ST owners who use hard disk drives ($18/yr, quarterly issues, Network: HDUG, 5831 Sun Bay, San Antonio, TX 78244). The October 1987 issue (volume II) contains articles on ICD’s “ST Host Adapter,” interviews with BBS Express’ professional author Keith Ledbetter and Z-Magazine editor Ron Kovacs, a hard disk question and answer section, and a comparison of 8-bit BBS software. The hard disk advertisements are interesting as well.

Daisy-Dot II

The Command Headquarters BBS, ([216] 758-0284) has improved upon Roy Goldman’s Daisy-Dot program to produce Daisy Dot II, an even more exciting public domain printer utility. Daisy Dot II lets you print in near-letter-quality with your Epson, Gemini, ProWriter, or compatible printers and supports underlining, double width, incorporating picture files, using multiple fonts, etc. See Figure 1 for a sample printout.

Next Month

We’ll have more reader mail, Atari news, and some surprises, too. Stay tuned.

Readers’ questions, comments and contributions are welcome. Please enclose a self-addressed, stamped envelope for a personal response. Due to volume of mail, only a selected number of personal responses can be answered each month. Address all correspondence to: Jeff Brenner, “Applying The Atari 1/88”, c/o Computer Shopper, P.O. Box F, Titusville, FL 32781. •

COMPUTER SHOPPER / FEBRUARY 1988 / PAGE 193 

Applying The Atari

by Jeff Brenner

Welcome to another month of “Applying The Atari” for your 8-bit Atari computer. February’s column brings with it the buildup of holiday mail, particularly the questions and reader requests. This month we’ll take a look at some reader mail and some reader requests that you may be able to help with.

Reader Mail

Dear Jeff:

The “Applying The Atari” column in the October 1987 issue of Computer Shopper included a program for converting an English input to a decimal number. The first example on page 348 states:

You Type: Two Hundred Sixty Three Thousand

Computer: 163,000.00

Now that is exactly the kind of program we don’t need. I presume that a misprint is involved.

Palmer O. Hanson, Jr.
Largo, Florida

The misprints always manage to pop up in the most critical places, such as in typeset program listings and output examples. (Computer Shopper now directly reprints program listings instead of typesetting them, thank goodness.) You along with more than a dozen other readers caught the error and wrote in. The misprint occurred during typesetting of the output sheet I submitted. The program does work properly, however and will output the correct response. The example should have read:

You Type: Two Hundred Sixty Three Thousand

Computer: 263,000

Now I hope the typesetting department gets those lines correct, or I’m going to have a lot more explaining to do.

Dear Jeff:

Thank you for including my question concerning a driver for using the Atari Trakball. Enclosed is an article from the Spring 1984 issue of Atari Connection magazine. Can this be modified to numerically display acceleration and angular position?

Also, beginning in January 1985 Earl Rice wrote a four-part article on the Parallel Bus Interface Revealed in Antic Magazine. I wrote to him in care of Antic with no reply. How can I get in touch with him? Also he refers to some technical notes released by Atari specifically on the PBI; where can these be purchased? Maybe one of your readers can help!

John Palhof
West Palm Beach, Florida

A number of readers had sent me this article, “Tracking Your TrakBall,” by Bill Bartlett, after your request appeared. (The Atari Connection was the old name for the Atari Explorer.) The article discusses how the Porta register (location 54016, $D300) is used to read the trakball and contains machine language routines that display the contents of this register and that converts the trakball movement into horizontal and vertical velocity components. Bit 4 is used to register the vertical rate of motion (the bit alternates between 1 and 0 at a rate dependent upon the speed at which the trakball is moving); Bit 3 specifies the direction of vertical movement (0 is up, 1 is down); Bit 2 registers the horizontal rate of motion (also an alternating bit); and Bit 1 gives the direction of horizontal movement (0 = left, 1 = right). Velocity is determined by sampling Bit 4 and Bit 2 over a short period (through a machine language routine) and summing up the changes in the bits for each direction component over the given period of time. Calculating acceleration, as you want to do, would be somewhat tricky. You would need to take two samples of the velocity over a given time (the velocity having been obtained by sampling the movement bits as described above). This would have to be done in machine language to assure a fast enough sampling rate. Angular position could be calculated directly through BASIC based on the horizontal and vertical components (which must have been previously calculated based on the velocities determined by the machine language routine). If any trakball owners have written such a routine or would like to write one, I would be happy to print it for Mr. Palhof and other trakball owners. Frankly, I don’t know how popular the trakball controls are among Atari computer owners, but if there is enough interest expressed by readers, I may develop a couple of trakball routines and drivers for the column.

Regarding your second question, Antic would most likely have forwarded any letters to the author. You might try Atari regarding the technical notes, although I’m sure availability has changed since January 1985. Perhaps some readers can help out.

Dear Jeff:

My user’s group is interested in submitting some of the programs we wrote in the hopes that you can publish them in your column. Would you be interested in seeing our work? If so, how should we submit the programs? (i.e. do you require hardcopy in addition to the diskette?)

Barry Chase
Tacoma, Washington

I would certainly be interested in seeing your group’s programs. This applies, of couse, to all users’ groups or individual program authors. Space limitations do not always permit the publication of lengthy programs, but I would consider publication of short and medium length programs that are useful to other readers. You can submit the programs on diskette (we’ll generate the program listing from the diskette if needed along with a letter stating the programs are your own (or a modification of a public domain program). If your users’ group sells a diskette with the programs, let me know and I will mention this fact for readers who dislike typing. Additionally, I’ll award an 8-bit software product to the author whose program is selected for publication.

Reader Requests

I often receive letters from individuals who are looking for a particular program or for a particular piece of information. This month I have published several of these requests and ask any readers that can help to please write in. I will forward the information to the individual requesting it, and will publish any interesting or useful responses in a future column for the benefit of other interested readers.

Dear Jeff:

I am interested in obtaining a Lotto program. Has anybody written one? Is it in the public domain? If not, how can I obtain a copy?

John Ellington
Vandenberg AFB, California
Dear Jeff:

I was reading in the September issue and I too am interested in getting Atari 5200 cartridges to work on my 800XL. I recently bought some 5200 game ROMS. I took apart Qix and took out the ROM and put in the 5200 ROM. When I turned on the 800XL it went to the self-test menu as if there were no ROM in the cartridge. I tried putting it in both sides and upside down. Then I decided that since Qix is a 16K cartridge, I would try it in Star Raiders since it is only an 8K cartridge. To my disappointment, the results were the same with all the 5200 ROMS, in either cartridge. Is there any way I can get these ROMS to work? Has any of your readers had success in doing this?

Paul Strutz
Bismarck, North Dakota
Dear Jeff:

I am looking for a VT-100 emulator that will work with an 850 interface box with a Courier 1200 modem hooked to it. The system consists of the following:

1) Atari 800 CPU; 48K RAM; 40/80 Col Board (Bit 3)
2) Two 810 type disk drives
3) Atari 850 interface box
4) 410 recorder
5) US Robotics Courier 1200 Modem
6) Gemini 10X printer

If there is anybody who knows of a program that will work with the 850 and a non-Atari modem, plese let me know.

Robert Davis
Tampa, Florida
Dear Jeff:

Have you or your readers ever come across any information on ways to modify the 1200XL and 800XL audio, video and TV circuitry, so that the output resembles that of the 800? I have a 130XE (320K), 800XL (Rambo), 1200XL (Rambo), and an 800 (Axlon). The 130XE is almost as good as the 800 for video and TV, but the audio needs boosting. The 800XL also needs the audio boosted, and the video and TV have color smear, and lack contrast and brightness. It has no monitor jack chroma signal. The 1200XL is the worst of the lot. It has adequate audio output, but the video and TV contrast are boosted to the point of ghosting, the brightness is too low, and there is also no monitor jack chroma signal.

Michael Bernard Pook
Niagra Falls, Ontario

The remedy for the 800XL video smear has been discussed in a previous column, a copy of which I am sending you. Regarding the other audio and video changes you are interested in making, I do recall seeing an article in a user’s group newsletter quite some time ago on this very subject. If the author or user’s group would send in another copy of the article, I would be grateful.

Dear Jeff:

We’re looking for a computer game similar to Milton Bradley’s “Connect Four,” that I believe you mentioned had been published in a user group newsletter. We would really appreciate it if someone could advise us how to get a copy of the program.

Bill Peet
Ocean, New Jersey

Best Newsletter Contest

Next month is the start of our monthly newsletter contest, where I select the best newsletters that have been submitted during the month. The addresses of the newsletters and all club information will be provided for readers interested in subscribing to the newsletter or joining the respective clubs. If your group puts out a well designed newsletter that makes use of assorted type sizes and graphics, and contains a good balance of news, reviews, projects and programs, send it to me at the address below. Important note: I have received several newsletters from groups very eager to be judged “best newsletter” that have submitted the best newsletters the group has ever published—some several years old! But we’re looking for consistent quality as well as newsletter masterpieces, so as a rule, newsletters submitted for the contest must be recent. Newsletters dated more than two months behind the month of receipt cannot be considered. •

COMPUTER SHOPPER / APRIL 1988 / PAGE 208 

Applying The Atari

by Jeff Brenner

Atari’s recent announcement that it has decided to stop the production of the ST machines in favor of a reintroduction of the 8-bit line hasn’t surprised many in the industry. The plan is to convert existing ST inventory into new ST Game Systems and to convert the current XE Game Systems in inventory into electric typewriters and compact disc players. The highlight of the new 8-bit line will be the remake of the wonderful Atari 800. While internally, the new Atari 800s will be almost identical to the original 800 machines (except for the addition of 35 MIDI ports), the plastic housing will not be the same since the original molds were allegedly bent up by a disgruntled employee of the old Atari corp. Instead, in a cost-saving move, Jack Tramiel has decided to use the VIC-20 molds that he found “lying around in the attic.” A 4 megabyte expander/adapter will allow the new 800 to run all ST software, as well as IBM, Macintosh, Amiga and all TRS-80 Pocket computer software. In addition to dropping the ST line, Atari also cancelled its plans to mass market a Macintosh clone (the “Mac Tramiel”) with the sales slogan “price without the power.”

Yes, it’s the April Fool’s column again, and while Atari isn’t really remaking the Atari 800, it has assured the 8-bit community that it will continue to support the 800/XL/XE line. This stuff is real, folks. In a letter to ZMagazine, issue #77, Atari’s Neil Harris explained how Atari still has interest in the 8-bits and how the release of the Atari XE Game System would prove to be beneficial to 8-bit Atari owners. Following are some excerpts from Neil’s interesting letter:

“...Atari U.S. has a substantial supply of 8-bit computers in stock. Very substantial. We have every motivation to sell 8-bit computers. At times we’ve been accused of trying to kill the line. Why would we want to? Because many of us came from Commodore, where we competed fiercely with Atari? Most of us had substantial respect for the Atari computers as competitors (as opposed to, say, Texas Instruments and Radio Shack).”

“...when we showed the XE Game System to the buyers, they were totally enthusiastic... We have something like 50 cartridges in inventory from the old days and are feverishly working on converting disk games to cartridge. With some clever programming, we can now get 256K of ROM on a cartridge, instead of the 16K in the old games. That’s how we got Flight Simulator II plus a scenery disk onto a single cartridge. There is nothing different about the XE Game System to make this work—existing 8-bit computer owners can use the very same cartridges.

“So what does this mean to you? In the beginning, all it will mean is that more games will be coming in 8-bit Atari format. But, what we hope is that this will be the springboard to revitalizing the 8-bit Atari computer line. Once the XE Game Systems start selling (and they have just begun arriving in stores this past week), we have a potential market of hundreds of thousands of consumers. At this time, Commodore is selling around 300,000 C64s annually. With a market this size, the motivation for software developers to bring out new titles in our format is enormous.

“Remember, the XE Game System is totally compatible with your 8-bit computers. Once the customer takes the XE Game System home, he discovers in the manual that the system includes the Atari BASIC language and that there is an SIO port for computer peripherals. We expect that people who may have been frightened of computers, or leary of spending the money on a computer with a drive (over $400) may very well upgrade to a fuller system. And we hope that they will then demand the kind of software that we need to see developed—serious applications software.”

Neil denies the reports that Atari is removing the motherboards from the 65XE inventory for use in manufacturing XE Game Systems. “It’s a different board,” he says. In addition, Neil states that Jack Tramiel plans to stock the Federated stores (in California, Texas, Arizona and Kansas) with a full line of 8-bit Ataris.

Judging by the increase in 8-bit software releases in recent months and Atari’s position as defined by Neil Harris, I think we are witnessing an 8-bit turnaround of significant magnitude. Let’s hope the XE Game Machine is as successful as it promises to be.

Reader Mail

Dear Jeff:

Thank you for helping keep the Atari 8-bits going, with your column. We at Innovative Concepts specialize in products for the Atari 8-bit computers. At present, we are a small company, building all of our products by hand. We have a lot of “neat” little products, which we would appreciate any of them being mentioned in the column. Most noteworthy is the Easy Scan (yes, an image scanner for the 8-bits) and the ICX-85 keypad.

I have seen in your column several times handlers for the CX-85 as you seem to concentrate on applicational use of the Atari. For absolute convenience, we developed the ICX-85 (and Deluxe ICX-85) keypads, which do not require handler and work with all software.

Mark Elliott
Innovative Concepts
Warren, Michigan

I’m happy to lend you the column space and am always glad to hear from small firms devoted to supporting the 8-bit Atari. It is these companies, such as yours, that will be keeping the 8-bit machines alive and happy for a long time to come. Following is a description of some of Innovative Concept’s interesting products:

The ICX-85 keypad is the answer to software incompatibility with a keypad handler. The keypad is wired directly into the keyboard, so that pressing a key on the keypad has the same effect as pressing the key on the keyboard with any software. Installation consists of soldering a 12 wire connector into the computer and plugging the keypad into the connector, so you might want to have a friend help you out if you’re not handy with the soldering iron. The price is $44.95. The company offers a $10 discount when a CX-85 is sent in as a trade-in towards the ICX-85.

The RAMdrive + XE-GM1 is a $34.95 memory upgrade that allows owners of the new Atari Game System to expand the internal memory to 128K RAM and thereby run 130XE compatible software, such as AtariWriter Plus and Typesetter. Soldering and desoldering is required for installation.

Easy Scan allows 8-bit owners with a minimum of 128K RAM and most graphics capable printers, to transform an image from the printer to the computer. Using Fiber-Optics to link the computer and the printer, Easy Scan interfaces via the cartridge port and digitally scans an image up to 75% of the area of an 8½ by 11 inch sheet. Digitized pictures are saved in standard 62 sector file format. Display color, size, clarity and graphics mode can be controlled with the included software. Also supplied are conversion utilities to convert the images to other popular formats, such as Print Shop. Easy Scan is $79.95.

For more information on these 8-bit products, contact: Innovative Concepts, 31172 Shawn Drive, Warren, MI 48093, (313) 293-0730.

Dear Jeff:

I really enjoy your articles in Computer Shopper. Please keep up the good work. My thanks to Computer Shopper for its continuing support of the Atari.

I typed in your program “Number to English Converter” in the June 1987 issue. When I ran the program, I found it did not handle negative numbers, so I wrote this short program which can be typed in and LISTed as “D1:TEMP.” Then, load the June 1987 “Number to English Convert Program” and ENTER “D1:TEMP.” You will then have a program that will handle either positive or negative numbers.

Lt. Col. Frank P. Dunkelberg
Mentor on the Lake, Ohio

Good idea. I didn’t consider the possibility (or better, probability) that someone would enter a negative number. An 8-bit software product is on its way to you for your contribution. Replace (or add) the following lines to the June 1987 program (or follow the LIST/ENTER procedure described above.):

25 REM Modified By Lt. Col. Frank Dunkelberg 
60 INPUT #16;IN:IF IN<0 THEN GOSUB 600 
80 IF X=0 THEN GOTO 90 
85 PRINT "<MINUS>";TXT$:GOTO 95 
90 PRINT TXT$ 
95 X=0:PRINT :PRINT :GOTO 50 
600 X=-1:IN=IN*X:RETURN 

Answers To Reader Requests

In the February 1988 column, reader John Ellington requested information on the availability of a commercial or public domain Lotto program. I mentioned Soft-Byte’s Lotto program in last month’s column, and reader Carl Tribble has sent in some information on Soft-Byte’s program and on his own Shareware lotto program:

Dear Jeff:

I just received the February issue of Computer Shopper and read the note from John Ellington. Well, John is in luck—I know of only two Lotto programs for the 8-bit Atari. One from Soft-Byte called (Lotto Program) and mine.

Lotto Program ($24.95) from Soft-Byte is more of a utility type program (see sample output in Figure 1). It is fully menu driven. Look in the February 1988 issue of Antic, page 76, for more information. (Contact: Soft-Byte, P.O. Box 556, Forest Park, Dayton, OH 45405, 513-278-8044).

My program was written in BASIC and then compiled to add speed. It will pick lotto numbers for you from six number files that you create (see sample output in Figure 2 on page 393). The program is set around SpartaDOS and an XL or XE computer. It will not work on the older Atari computers as is. I have also sent a new program along that I have just written that will let you know what numbers are in the number files.

I have used my program on the Michigan Lottery for the past four months and I have hit four number winners four times for over a hundred dollar each time. If anyone else would like a copy of my program, please send $5 to cover costs to me at 2813 Elwood Ave., South Bend, IN 46628.

Carl Tribble
South Bend, IN
TRENDS AND PATTERNS CHART 

TWO CONSECUTIVE APPERANCES: 

THREE SHOWS IN THE LAST 6 DRAWINGS: 
31 
OVER THREE SHOWS IN THE LAST 6 DWGS: 

NO SHOW IN THE LAST 6 DRAWINGS: 
3 4 5 6 7 8 9 18 11 13 14 16 19 23 28 32 33 34 38 
FOUR SHOWS IN THE LAST NINE DRAWINGS: 

NO SHOW IN THE LAST NINE DRAWINGS; 
4 6 7 9 11 19 23 28 32 38 
NO SHOW IN THE LAST TWELVE DRAWINGS: 
7 9 11 19 23 32 

THIS IS THE NUMBER OF APPERANCES 
FOR EACH NUMBER IN 30 DRAWINGS; 

1-6 2-2 3-4 4-1 5-5 6-3 
7-3 8-3 9-2 10-1 11-2 12-6 
13-5 14-6 15-5 16-6 17-4 18-6 
19-3 20-3 21-2 22-4 23-3 24-3 
25-3 26-6 27-4 28-4 29-4 30-5 
31-5 32-5 33-5 34-4 35-3 36-3 
37-5 38-2 39-8 40-4 41-3 42-5 
43-6 44-8 

GROUPS  1-9 10-17 18-24 25-31 32-44 

LAST DWG 1    0    0     3     2 
2ND BACK 0    0    3     1     2 
3RD BACK 0    1    1     1     3 
4TH BACK 0    1    1     1     3 
5TH BACK 1    1    0     1     3 
        --------------------------- 
         2    3    3     7     13 

(AVERGE IS 6 PER GROUP) 

ODD/EVEN DIGIT CHART 

                EVEN  ODD 
PAST  5 WINNERS  13   17 
PAST 10 WINNERS  33   27 
PAST 20 WINNERS  63   37 
PAST 30 WINNERS  90   92 

Figure 1 
        LOTTO V1.5 

      (C) CARL TRIBBLE 

         SHAREWARE 

If you feel this program is any 
help to you send a Donation to 

        Carl Tribble 
        2613 Elwood Ave 
        South Bend, IN 
                 46628 

I wrote Lotto for the Michigan 6 
of 44 but it shourd work for any 
lottery that is 6 of 44. 

  If you have any questions or 
  comments I can be reached on 
    MOUSE BBS (219)674-9288 
   MIKE'S MOUSE (219)282-1307 
both boards are 3/12 baud 24hrs. 

If you find this program useful, 
a Donation can be sent to: 

         Carl Tribble 
         2613 Elwood Ave. 
         South Bend, IN 
         46628 

  The program is setup to get 
numbers from six datafiles A - F 
The files at this time are setup 
as follows. 

          A=1 to 39 
          B=2 to 40 
          C=3 to 41 
          D=4 to 42 
          E=5 to 43 
          F=6 to 44 

  If the number is not in the 
 datafile it cannot be picked. 

Draw Lotto Numbers from 1 - 44 
The program is setup to read 
six data files from D: and put 
them in D8: 

I have also set the program up 
for the ATARI XL and ATARI XE 

If you are using an XL TYPE 
-XL 

If you are using a mod. XL or 
an XE TYPE 
-XE 

By doing this you will be 
setting up the proper RAM DISK 
for your computer 

CARD # 1 OF 5 

16 20 26 32 34 36 = 164 
1  15 22 27 29 38 = 132 
2  26 29 30 43 44 = 174 
4  5  33 35 37 39 = 153 
18 29 32 36 38 42 = 195 

CARD # 2 OF 5 

10 15 32 33 39 40 = 169 
10 26 31 37 41 43 = 188 
6  9  15 28 33 43 = 134 
1  26 28 33 41 44 = 173 
8  17 25 29 42 43 = 164 

CARD # 3 OF 5 

10 26 27 28 33 37 = 161 
21 28 32 36 40 41 = 198 
6  17 26 34 38 44 = 165 
15 26 30 34 41 42 = 182 
14 26 32 33 34 39 = 178 

CARD # 4 OF 5 

21 28 32 37 40 43 = 201 
4  17 28 29 39 43 = 160 
3  12 31 37 42 43 = 168 
14 24 27 37 39 41 = 182 
12 22 29 37 42 44 = 186 

CARD # 5 OF 5 

1  11 21 37 40 42 = 152 
18 25 33 35 38 43 = 192 
9  29 32 34 41 43 = 188 
3  27 32 33 48 44 = 179 
10 26 31 33 39 44 = 183 

Figure 2 

In the January 1988 column Cal DeGroot had asked for comments on the RAMcharger (the CP/M emulator for the 8-bit Atari and Indus drive owners). In addition to Marvin Bleiberg’s comments published last month, here is another user’s view of the RAMcharger:

Dear Jeff:

I was glad to see Cal DeGroot’s question about the RAMcharger for the Indus GT disk drive. I have one installed in my GT and it is an excellent product. Besides CP/M (not really an “emulator” since the GT is based on a real Z-80 chip), the RAMcharger enhances normal Atari operations because it buffers the disk I/O, giving lightning fast responses like a RAMdisk when the same part of the disk is reaccessed.

I only have two reservations in recommending it. First is the quality of CP/M software. Do you really want to run WordStar and dBase II? No thanks, I prefer AtariWriter Plus and Synfile +. Except for relational sorts and memory intensive applications, Atari programs generally do the job easier and better than CP/M and MSDOS counterparts. I bought the RAMcharger because my church publishes a genealogy program in Apple, Commodore, IBM and CP/M formats. So for me, RAMcharger was the answer. If you have a particular CP/M program you need to run, it is well worth the $129. I selected the Commodore 128 option from the CONFIG menu and my program ran with no problems.

The second reservation is that every dollar I put into enhancing the 8-bit Atari brings it closer to the price of an ST. (The CP/M emulator for the ST is in the public domain.) Yet I have mixed feelings since I started on the 800XL and many of my XL programs are my favorites.

But the RAMcharger is great and Future Systems’ customer service is great. They have a good working relationship with Bill Roch at Elliam Associates, a CP/M and MSDOS software distributor. Bill gives great personal attention and provides CP/M software in GT disk format. They can also convert CP/M disks you may have purchased in other disk formats. [Elliam Associates, 6101 Kentland Ave., Woodland Hills, CA 91367, (818)348-4278.] Also, if you get the RAMchager utilities disk to move files back and forth between Atari and CP/M disks, be sure to upgrade all your working disks to the CP/M 2.2/1.1 because it took me a long time to figure out that the utility wasn’t working because I booted with 2.2/1.0 supplied with the RAMcharger and then inserted the utility disk which I didn’t know I should have booted because it had 2.2/1.1.

John Kolak
Fort Polk, LA

Thanks for writing. Indus drive owners interested in the RAMcharger should also have a look at the potential compatibility problems discussed by Marvin Bleiberg in last month’s column.

Next Month

That’s all the space we have for this month. We’ll pick a newsletter winner next month, and we’ll also take a look at the “real” Daisy Dot II, from the original Daisy Dot author.

Reader’s questions, comments and contributions are welcome. Address all correspondence to: Jeff Brenner, “Applying The Atari 4/88”, c/o Computer Shopper, P.O. Box F, Titusville, FL 32781. •

COMPUTER SHOPPER / JULY 1988 / PAGE 232 

Applying The Atari

by Jeff Brenner

This month we’ll answer reader mail, publish some reader requests, hear about some new products for the 8-bit Atari, and learn how to add an earphone jack to those television sets or monitors lacking one.

Due to space limitations, the review of the Six-Systems Box from Irata Verlag planned for this issue will be reviewed along with other products from Irata Verlag in a separate review next month.

New Publication

From Technitron comes a report for constructing a power supply for the XL/XE machines that not only imitates Atari’s power supply, but also offers battery-backup.

Dear Jeff:

First of all our Atari Group wishes to thank you for all the fine articles you have written in Computer Shopper. We are avid readers of your column and look forward to each new edition. It’s good to see a dedicated column for the Atari. Your exceptional software articles are the best. We hope to see more of this type of coverage. We also have enjoyed the offers of various Upgrade Plans (the ones offered by STATUS of Thom Lawless 320K-576K 800XL) and the Mods, Fixes and upgrades by the Midwest Atari Group. After seeing these publications and using them we decided to create a publication ourselves.

We are enclosing a copy of our “8-bit Power Supply.” We found that often under stress the power supply of the 8-bit gives out. We designed a new power supply and then added not only the convenience of being able to repair it, but the ability of battery backup. The plans are simple and use Radio Shack parts with the exception of two pieces, (a 7-pin DIN plug and some mica insulators which can be obtained easily at local Electronics Wholesale Houses).

This unit has been tried and tested under BBS conditions for some time now with no difficulties whatsoever. We have found it to be very dependable and really a big plus to the BBS since the power often drops off or even out completely in our area from just seconds to hours. With this power supply, there’s no need to re-boot the system, the Ramdisk stays active and no memory is lost

We would like to make this report available to other Atari User Groups and interested persons. With this offer we ask that three dollars be sent to each copy to help cover printing and postage. Write: Technitron, PO Box 1033, Wilkes Barre, PA 18702.

William Culver
Technitron

Reader Mail

Dear Jeff:

In reading your column in the February 1988 issue, I noticed a request for a Lotto program, and in your March column, notification of a trend analysis program for use in tracking Lotto numbers.

Our program, “Win At Lotto!” is a computerized implementation of one of the most popular (and successful) wheeling systems currently available. The Atari 8-bit version incorporates five separate wheels, plus win detection routines. The program is 100% machine language, is very user friendly, and has full on-screen documentation.

Since our 8-bit version does not include trend analysis and number selection routines, it may be the perfect companion program for the program you mentioned in March. The list price is $24.95 and we’ll cover shipping.

Vern Smith
Phantasy Software
Portland, Oregon

Readers interested in “Win At Lotto!” can write to Phantasy Software and Electronics, Inc., PO Box 13474, Portland, OR 97213.

Dear Jeff:

This letter is to inform you of a small company that makes MIDI interfaces for Atari 8-bit computers. The owner and I talked and I mentioned some sources for selling his product. The MIDI interfaces are compatible with all 8-bit Atari MIDI software and MIDI ports. The interface sells for $135; the cheapest I’ve seen. Mr. Maki said if there are orders for multiples of six or more from a user group, the prices are $95 each. I’ve seen this MIDI interface in action and it is what it claims to be, and cheaper compared to other manufactureres. For information contact: Jim Maki, Phas One Engineering, PO Box 773, 537 Camino Ct., Altamonte Springs, FL 32701.

Kenneth Rogers
Melrose, Massachusetts
Dear Kenneth:

Thanks for sharing the information. Readers may also be able to find a good deal on Hybrid Arts’ MIDI interface for the 8-bit since this has been discounted heavily in recent months. (Hybrid Arts produces the popular MidiTrack software for the 8-bit.)

Reader Requests

Dear Jeff:

For the past 15 months I have been trying to get my Panasonic 1091i printer to print subscripts and superscripts as described in the AtariWriter Plus instructions. The instructions say it can be done by using the select key with the up and down arrow keys. The select-up arrow combination should put you in the superscript mode and the select-down arrow combination would restore the original font. The opposite combinations would be used for subscripts.

I am told that it happens with Epson printers and the Panasonic is “100 %” Epson compatible. Epson and Panasonic do have the same control codes for subscript and superscript modes. The control code is Escape plus T for cancellation of both modes for both printers. It does not seem possible that one mode can cancel out the other because neither mode sends the cancellation code to the printer.

If there is a printer driver in existence that can allow the printer to follow the keystroke instructions, I have been unable to find it. I am able to enter subscripts and superscripts with control codes and font commands but I would like to use the keystrokes if it is possible. Any assistance you and your readers can provide would be greatly appreciated.

Dominick J. Defazio
Rochester, Michigan

Embedding control codes into the text is always an option to utilize the features of your printer. For printer drivers for various printers (with AtariWriter), here are two sources:

Gary W. Furr
PO Box 1073
Mountain View, CA 94042.

Gary is the original author of the printer driver routines; over 60 drivers are available.

At-A-Glance
86 Ridgedale Ave.
Cedar Knolls, NJ 07927

At-A-Glance produced “Printer Formatted Data Disk” for AtariWriter with various printers.

In the May 1988 column, reader Richard Cooke had asked if any readers knew of a program to perform bowling league secretary duties. Thanks to Dave Brehm of Mishawaka, Indiana for suggesting a program called Bowling Secretary. Other readers interested in this program might try some user’s groups, since it may be difficult to find.

Earphone Jack

From John Baum comes this simple project for adding an earphone jack to your television or monitor.

Dear Jeff:

So the kids are asleep and the computer is in their room? Your little brother has to go to bed before you’re through saving the world? Or the wife can’t sleep with the warning horns on your favorite flying program blaring? The solution is an earphone jack, easily installed in your monitor. Radio Shack part 4247-248 at $1.39 for two is just what you need to silence the speaker but still hear the action.

By splicing one wire from the existing speaker wire to the jack (so that there is a common wire for both the speaker and the jack), and hooking up the other wire (two wires to make a speaker work, remember?) in series to the jack and then to the existing speaker, you’ll have an earphone jack that cuts off the internal speaker when the earphone is plugged in. Make sure you hook the wires to the right places. There are three tabs on the back of the jack. With the threads facing away from you, the left tab gets the common wire, the top tab gets the wire from the monitor to the speaker, and the right tab gets a wire from the jack to the existing speaker.

My Commodore 1702 monitor has the jack located behind the little front door and the left corner, but anywhere there is enough room for a quarter hold would be okay.

John Baum
Lisbon, Ohio

Newsletters

We’ll pick more winning newsletters in next month’s column. Meanwhile, here’s a letter I received regarding the newsletter contest.

Dear Jeff:

While I appreciate greatly the fine column you write for Computer Shopper, the March ’88 column made me bristle!

In the evaluation of the user group newsletters, you stated that “too many newsletters have pages overloaded with often inappropriate or meaningless Printshop and other icons.” Your bias towards slick, magazine-like newsletters is apparent; such productions are well deserving of praise, since it is obvious the effort that goes into them is a labor of love. However, the Pinellas Atari Computer Enthusiasts’ (PACE) newsletter is equally deserving of praise, produced completely on an 8-bit Atari engine (PACE is a group dedicated to the 8-bit Atari). While there may be laser printers that will tie to an 8-bit (although I doubt it), it is of interest to our group to keep the newsletter within the confines of the machines we deal with; as a result the “meaningless” Printshop icons have definite appeal.

Your selection of the “best newsletter” appears fully deserved; PACE would love to include advertising (there are no retailers in the area) and to include photographs of our activities in the newsletter—but this is overstepping the capabilities of our machines. Don’t lose sight of two things: new owners still find “old” articles interesting (there are new 8-bit owners at each of our meetings), and the information contained in the newsletter may very well be “news” to the group, if the editor is aware of his readership.

Once again, I enjoy your column very much. But maybe instead of bashing the “poor” quality newsletters, give them credit for at least producing a banner that their organization finds worthy. I cannot speak highly enough of our newsletter editor, Thomas Davis, and his dedicated staff. Each issue of the P.A.C.E.SETTER gets better than the last, and I sincerely look forward to its delivery with anticipation—even without ads or pictures, and containing meaningless icons—because it has material that I find.interesting. Thanks for your Atari support.

Alan Frazer, President
Pinellas Atari Computer Enthusiasts
Clearwater, Florida
Dear Alan:

I thank you for writing and hope I can clarify what qualities I look for when I select a winning newsletter. First of all, “meaningless Printshop icons” was not meant as a generalization of Printshop icons and I hope that others did not similarly misinterpret my statement. What I was referring to was the context in which specific icons are used. For example, I have just picked up a newsletter that has what appears to be a Mickey Mouse icon introducing a “Technical Notes” column. This is what I call a “meaningless” icon, in light of the fact that the image has absolutely nothing to do with the accompanying text. Upon browsing through your P.A.C.E.SETTER newsletter, I see a film projector with the “Next Meeting Preview” heading, a voltmeter icon for the “Local Repair” article, a pair of glasses with the “Library News” article. Now these are NOT meaningless icons, but are fine examples of how Printshop icons can be used.

Additionally, the amount of advertising in a newsletter is mentioned only as an indication of how successful the newsletter is in attracting advertisers, and is not used as a measure of the quality of the newsletter. For example, one recent newsletter winner had several full page advertisements from advertisers across the country. The advertisements did not make the newsletter a winner, but rather the reputation of being an exceptionally well-designed newsletter had attracted the advertisers.

Some of the best looking newsletters I have seen were produced entirely on the 8-bit Atari. Photos can always be directly incorporated into a newsletter to add more excitement, or they can be digitized via an 8-bit ComputerEyes. Any number of the dozens of 8-bit printing utilities can be used to further enhance the image of the newsletter. Don’t feel that your newsletter is limited by an 8-bit machine; instead, seek out new ways for your 8-bit to churn out attention grabbing text and graphics.

Finally, I realize that many newsletters are produced on very tight budgets or with very few people, and I would never intentionally “bash” any of them. Unfortunately, space does not permit me to list all of the newsletters in which groups gave it their best shot. Therefore, the “best newsletter” title goes to the newsletter that combines a wide range of non-reprinted articles, useful graphics and illustrations, excellent organization, etc.

Next Month

More reader mail and requests, news and reviews for your 8-bit Atari.

Address all correspondence to: Jeff Brenner, “Applying The Atari 7/88,” c/o Computer Shopper, PO Box F Titusville, FL 32781.

COMPUTER SHOPPER / AUGUST 1988 / PAGE 232 

Applying The Atari

by Jeff Brenner

This month marks the fourth anniversary of the “Applying The Atari” column! It’s been four fast-paced years of news, reviews, programs and projects (and reader mail, of course) specifically for your 8-bit wonder. And while the 8-bits may have long past their heyday, the 8-bit community has remained strong and very much interested in discovering new ways to use the power of these versatile machines.

A number of readers wrote in about an article in the June 1988 issue, “The State Of The Eight: 8-Bits Alive And Running” wondering what happened to a portion on the Atari 8-bit computers that I wrote for the article, since part of my segment appeared to be missing after a continuation on another page. This was a layout error, and was not, as one reader suggested, an “anti-Atari conspiracy among magazine editors.” The short piece appears below in its entirety. Actually, the piece is quite appropriate for this anniversary column, since we can reflect upon the changes that have occurred over the years, and gain some insight into the direction the 8-bits are heading to in the future.

The Atari 8-Bits

A common misconception about the 8-bit Atari computer line, which consists of the original Atari 400 and 800, the 600XL and 800XL and 1200XL, the 65XE and 130XE, and the new XE Game System, is that the 8-bits are “orphan” computers, abandoned by their manufacturers in favor of different (specifically, more profitable) ventures. In Atari’s case, the shift of company attention and resources to the ST line as a result of the success of the ST computers has been cited as proof of Atari’s apathy towards the 8-bit line. But, as Atari will say itself, nothing could be further from the truth, and the cost-effective power of the 8-bits (such as its versatile graphics capabilities) combined with its wide base of third-party software and hardware products have made this machine a valuable tool to this very day.

Unlike true orphan computers, such as the TI-99/4A and the Timex Sinclair, the newer 8-bit Ataris continue to be sold in retail and mail order outlets (the 65XE, 130XE and XE Game System). In fact, Jack Tramiel has said that he will stock his newly acquired Federated stores with 8-bit Atari products. And while 8-bit support from the big software companies has been waning, dozens of small, independent firms and programmers have acted quickly and anxious to fill the demand for 8-bit software and hardware products. The result has been commercial products such as TurboBase, one of the most powerful and versatile database programs available for any 8-bit machine; Daisy Dot and Daisy Dot II, new public domain multi-font typesetting programs that would put some commercially marketed IBM programs to shame; BASIC TurboCharger, a new book and diskette set that lets Atari programmers make the most out of Atari BASIC; and an endless stream of fascinating hardware products and peripherals, such as an inexpensive picture digitizer, a multi-system box, high-speed disk drive modifications, and memory expansion kits to take the 8-bit computers to 1 Megabyte and beyond. Magazines such as Antic and Analog (and Computer Shopper, of course) continue to feed Atari owners with 8-bit articles, programs and information.

Atari, too, has shown that it recognizes the strength and magnitude of the 8-bit community. The company recently released the XE Game System, which is fully compatible with 8-bit computer software (with a disk drive) and promises to revitalize major software manufacturer interest in the 8-bit machines in a very big way. Atari has also recently released the SX212, an inexpensive 300/1200 baud modem that’s fully compatible with the 8-bit machines, and will soon be releasing the XF551 disk drive, a double sided, true double-density drive featuring a specially designed DOS called ADOS.

But it is undoubtedly in the active Atari user’s groups where one will see how very much alive the 8-bit is. These users groups and their dedicated members develop and share programming ideas, hardware projects, software reviews and recommendations, technical and compatibility information and much more. Many publish newsletters and maintain public domain software libraries. Several 8-bit software products have been designed as a result of letter-writing campaigns by users’ groups urging manufacturers to continue developing software for the 8-bit machines. These groups are also the ideal place for the new Atari 8-bit owner to learn about his or her machine.

New Products

From Merrill Ward & Associates comes The Celebrity Cookbook, volume 1 and the Graphics Operating Environment for the 8-bit Ataris. Shelly Merrill, president of Merrill Ward & Associates, writes:

In reference to your April 1988 column, I thought that you might be interested in the latest enhancement of the 8-bit Atari operating system, a Graphics Operating Environment (GOE), developed by our company. Our first external program to use the GOE format is The Celebrity Cookbook, Vol. 1, a home catering program (retail $34.99), The Graphics Operating Environment and the 8-bit cookbook both use the ST mouse plugged into user port 1 of the 8-bit computer. The GOE (ST, Jr.) program was released in June 1988 and it is in a cartridge (retail $49.99 to 59.99).

The catering program contains approximately 50 celebrity recipes collected by such notables as Sophia Loren, Frank Sinatra, Bob Hope, Ronald Reagan, etc., a wine and bar guide, party tips, diet secrets of the celebrities and a personal recipe filer.

The ST/8-bit cookbook is being purchased from us by Atari Corporation and is carried in all of their Federated outlets.

Shelly Merrill, president
Merrill Ward & Assoc.
Palm Springs, California

A demo disk of the Graphics Operating Environment that I received from Merrill Ward & Associates was quite interesting, although the majority of the features had not yet been implemented. The program uses the same mouse used by the ST, plugged into joystick port 1 on the 8-bit, and lets you control files and load programs using a desktop and icons very much like the ST. The demonstration disk also contained a sample drawing program and word processor which looked very much like the ST’s Neochrome and Newword. I’m anxious to see the completed cartridge version of GOE. The Celebrity Cookbook, Vol. 1, utilizes this graphics environment and looks very much like an ST program when running on the 8-bit. The Celebrity Cookbook, Vol. 1, will be reviewed in a future issue. For additional information, contact: Merrill Ward & Associates, 255 North El Cielo Road, Suite 222, Palm Springs, CA 92262.

Another new title released for the 8-bit machines is Cross-Town Crazy Eights, from XLENT Software. You can play against one to three computer opponents, or, if you have a friend with an Atari, modem and Cross-Town Crazy Eights you can play against each other and up to two computer opponents. The program allows you to make an “answer only” copy of the program to give to a friend so that you can play against your friends without the need for them to buy their own copies. The “answer only” copies will function only when playing by modem against the owner of an original disk. Contact: XLENT Software, P.O. Box 5228, Springfield, VA 22150.

Thanks to a letter writing campaign by 8-bit Atari owners and user’s groups, Springboard has finally released an XL/XE version of The Newsroom, its popular newsletter designing program. The Newsroom features over 600 clip art pieces that can be incorporated into newsletters, a built-in word processor that uses up to five fonts, and automatic layout such as wrapping text around pictures. The Newsroom is $49.95. Also available are three volumes of additional clip art pieces. Clip Art Collection Volume 1 contains over 600 pieces of general occasion art; Volume 2, over 800 pieces of business related clip art; and Volume 3, over 600 pieces of sports/recreation art. Each clip art collection retails for $29.95. Contact: Springboard, P.O. Box 141079, Minneapolis, MN 55414.

Reader Requests

Reader Richard Cooke had requested information on software for bowling league secretaries. In addition to the Bowling Secretary mentioned last month, two additional programs are available. Reader Stanley W. Wood writes, “I wrote software for my league two years ago which was very helpful for myself. I’m sure he, and any other inquirers, may be interested in it. If you could send me his address, I could send him some information on my software. Also, any other inquiries would be welcome.” Others interested in this program can write to: Stanley W. Wood, 5473 S. Afton Pkwy., Baton Rouge, LA 70806.

Reader Scott Sheck writes, “In regards to a reader’s search for a Bowling League Secretary program, I currently sell such a package. It will run on any of the Atari 8-bit computers with at least 48K and requires a disk drive and a dot-matrix printer. It will handle just about any league and over 200 secretaries currently use it each week. For pricing information and sample output sheets, write to LeagueSoft, 9075 Centerway Rd., Gaithersburg, MD 20879.” Scott’s software handles an unlimited number of leagues; Mens, Womens and Mixed leagues; up to 110 bowlers per team; up to 40 roving substitutes; bowler and team forfeits, vacancies, blind scores and absentees; adding, deleting or moving bowlers and subs to different teams; and can produce summary reports any time during a league.

Now that we have plenty of bowling league secretary software, how about some software for other types of record keeping, as the following readers requests:

Dear Jeff:

I’m writing to see if you or your readers can help me find a philatelic program for my Atari 800XL. I need a program to inventory and keep track of thousands of stamps.

Ronald Santiago
APO New York

In the past I’ve recommended any of several database programs available for the 8-bit Atari for any type of filing purposes, but there’s a good chance that there is 8-bit software available specifically for stamp categorizing. If any readers are using any good philatelic software or know of any, please write in and let us know.

Next Month

That’s all the space we have this month. Next month we’ll have more reader mail, new products and newsletters.

Readers’ questions, comments and contributions are welcome. Address all correspondence to:

Jeff Brenner
“Applying The Atari 8/88”
c/o Computer Shopper
P.O. Box F
Titusville, FL 32781 •
COMPUTER SHOPPER / DECEMBER 1988 / PAGE 298 

Applying The Atari

by Jeff Brenner

Welcome to our annual holiday column, where we’ll take a look at many of the fine new products that have become available for the 8-bit Atari computers and the XE game machine during 1988. But first, a quick look at some reader mail.

Reader Mail

Dear Jeff:

Your August 1988 column was of great interest to me. I use an Atari 800XL with a 1050 disk drive and a Panasonic KX-10801 printer.

This letter is written using the revised PaperClip (without key), which is a gem. I also purchased the Synapse trio—SynCalc, SynFile+ and SynTrend. SynCalc and SynTrend meet my current needs. SynFile+ gives me a lot of grief.

Your column mentioned TurboBase, which could be a solution to my problem. Where can I find some information about it and where can I purchase it?

Aaron J. Blumberg
Boyne Falls, MI

TurboBase is a full-featured database from MicroMiser Software. It offers an integrated file manager, report generator and word processor and handles open invoicing, statements, accounts, receivable/payable, inventory, payroll and more. The program can utilize the ICD Multi-I/O Board’s RAMdisk capability to provide up to 1MB of quickly accessible data storage. For an 8-bit program, it is remarkably versatile and powerful, but at the same time will require a substantial investment of learning time to make the most of its features. The switch from SynFile+ to TurboBase will be far from a natural one, since the two use very different approaches in setting up applications. The benefits of TurboBase, however, may be well worth the switch, depending upon your needs in a database. The complete program with extensive documentation sells for $179. A review of TurboBase appeared in the August 1987 Computer Shopper. For additional information on TurboBase, contact: MicroMiser Software, Inc., 1635-A Holden Ave., Orlando, FL 32809.

Dear Jeff:

I want to add an Epson parallel printer to my system and wanted to use the MPP1150 interface only to find out that it will not work with the 1200XL. I was told by a dealer that the computer has to be modified by adding a wire to the board. I can make this modification myself if it could tell me where to add this wire. Any help or advice you or your readers could give will be greatly appreciated.

Lorenzo Gasperini
Towaco, NJ

I assume the dealer would not be more specific in describing the necessary 1200XL modifications. There were a number of quirks found in the 1200XL that made the machine incompatible in some respect with the other 8-bit models, and the discoveries of the bugs were often followed by suggested remedies or hardware fixes. I don’t recall nor have documentation on the fix that you mention so I’ll have to leave this one to my readers. If anyone can provide information on any such modifications, please write in and let us know. Otherwise I would recommend one of two things: Pick up an interface that will function properly with the 1200XL; or, buy yourself an inexpensive 65XE (or even a 130XE) to eliminate the 1200XL headaches while still maintaining compatibility with your software base.

1988 Holiday Shopping List For The 8-Bit Atari

Here is a compilation of many of the new 8-bit software products that have appeared during the year. All of the following products are to be in stores by December 1988 (except public domain programs, or course), although some products have not yet been released as of this writing. Readers are reminded that while some of my comments on the programs that follow are based on my own observations of the program, many are also based on manufacturers’ product descriptions, particularly in cases where the product has not yet been released. The products are listed in alphabetical order:

Alfcrunch is a remarkably efficient file compacter that saves both time and disk space. It is public domain software and can generally be found on bulletin boards.

BASIC TurboCharger by J. Bader is actually a combination book and diskette package. The 128-page book and its accompanying diskette contain dozens of short machine language routines that you can incorporate into your own BASIC programs to allow your BASIC programs to perform various operations at machine language speed. The routines include memory movers, screen data manipulators, data searches, sorts, Display List Interrupt and Vertical Blank Interrupt routines, disk operations, player/missile graphics routines, number systems conversions, bit operations and many others. The package is $24.95. Contact: Alpha Systems, 1012 Skyland Drive, Macedonia, OH 44056, 216-467-5665.

The Celebrity Cookbook, Vol. I from Merrill Ward and Associates, is a home catering program that contains approximately 50 celebrity recipes collected by such notables as Sophia Loren, Frank Sinatra, Bob Hope, Ronald Reagan, and others. A wine and bar guide, party tips, diet secrets of the celebrities and a personal recipe filer are included. The program is $34.99 from Shelly Ward and Associates, 255 North El Cielo Road, Suite 222, Palm Springs, CA 92262. 619-320-5828.

The Converter is a utility program for Atari users of The Print Shop, Newsroom, Awardware and Printpower. The Converter will allow icons for these programs to be converted from their original format to other formats needed by these programs. The Converter also allows materials to be added to your Print Shop icons to add details beyond the Print Shop format so that the icons will improve their look for these “larger format” picture programs. This is accomplished by using the Converter’s graphics editor, which will also allow the creation of your own graphics from scratch to be used with the higher resolution printing programs. The Converter is $19.95. Contact: No Frills Software, 800 East 23rd Street, Kearney, NE 68847, 308-234-6250.

Cross-Town Crazy Eights from XLENT Software lets you play against one of three computer opponents. Or, if you have a friend with an Atari, modem and Cross-Town Crazy Eights, you can play against each other and up to two computer opponents. The program lets you make an “answer only” copy of the program to give to your friends so that you can play against them even if they don’t own a copy of the program. The “answer only” copies function only when playing by modem against the owner of an original disk. Contact: XLENT Software, PO Box 5228, Springfield, VA 22150, 703-644-8881.

Daisy-Dot II is an excellent near-letter quality printer driver for the 8-bit Atari which works with Epson, Star Genini, or graphics compatible printers. This is the newest version of Daisy Dot by the original author, Roy Goldman. The program consists of the Print Processor, which handles the actual printer of text; the Font Editor, which allows you to create and edit Daisy-Dot fonts; and the Font Utilities program, which converts standard Atari fonts into the Daisy-Dot format. Fourteen fonts are included on the Daisy-Dot II diskette. The most surprising aspect of Daisy-Dot II is that it is public domain software! The author relies on contributions to encourage him to continue programming other 8-bit goodies. Contact: Roy Goldman, 2440 South Jasmine, Denver, CO 80222.

Determ is a new terminal program in the public domain with versions for the XM301/1030, 850, MPP and SX212 modems. The program features drop down menus and a breakout game that can be played while downloading. It is generally available on bulletin boards for downloading.

Diamond is a graphic operating system for the 8-bit Atari. The program offers cursor control with the keyboard, joystick, touch tablet or mouse and also features drop-down menus, desk accessories, dialog boxes, windows, and more. Diamond includes the DeskTop software which allows the use of all DOS functions without the need for typed commands. Diamond is $29.95 and will apparently be distributed by Merrill Ward and Associates (address previously listed) after the company dropped plans for its own Graphics Operating Environment.

Enhancements to BASIC II by Ronald C. Hathaway, adds many useful commands to revisions A, B and C of Atari BASIC including program traces, variable name changes, string searches, multiple line deleting, line renumbering, automatic line numbering, DOS commands and more. The 48K diskette includes a 27-page instruction booklet and reference card and sells for $24.95. Contact: Hathaway Electronics, PO Box 168, Rices Landing, PA 15357, 412-592-5981.

The Lotto Program analyzes past winning lotto numbers and gives probability charts on the frequency with which specific numbers are chosen. Graphs let you see trends and patterns, odd/even numbers, sum totals, number frequency, digit groups and more. The 48K diskette is $24.95. Contact: Soft-Byte, PO Box 556, Forest Park, Dayton, OH 45405, 513-233-2200.

The Newsroom was finally released thanks to a letter writing campaign by thousands of 8-bit Atari owners and users groups. The popular newsletter designing program features over 600 clip art pieces that can be incorporated into newsletters, a built-in word processor that uses up to five fonts, and automatic layout such as wrapping text around pictures. Newsroom is $49.95. Also available from Springboard are three volumes of additional Clip Art collections. Clip Art Collection, Vol. I contains over 600 pieces of general occasion art; Vol. II contains over 800 pieces of business related clip art; and Vol. III contains over 600 pieces of sports/recreation art. Each clip art collection retails for $29.95. Contact: Springboard Software, PO Box 141079, Minneapolis, MN 55414-6079.

No Frills Software released a number of new graphics diskettes for PrintShop users. The Fonts & Borders Disk #3 includes the first upper/lowercase font commercially available for PrintShop. Fonts & Borders Disk #4 includes nine new upper/lowercase versions of fonts from previous disks. Many other disks are available and all of the graphics images are reproduced in a catalog available from the company. Contact: No Frills Software, (address previously listed).

The RAMdisk Protector is a hardware and software package for XL/XE computers that simulates a power-up for immediate exit from programs or lock-ups. The software then enables DOS to recognize and provide immediate access to the RAMdisk, thereby recovering the RAMdisk’s contents. Both the hardware and software are entirely transparent. Included with the product are DOS enhancements for support of Atari DOS 2.5 and SpartaDOS. The RAMdisk Protector is $22.95. Contact: Logic One, Hardware/Software Development, PO Box 18123, Cleveland, OH 44118-0123.

Video Title Shop was at last released early this year, after a delay of ten months. Created by DataSoft/Intellicreations and distributed by Electronic Arts, Video Title Shop allows you to create colorful, animated title screens to add to your business, school or home videos. The program supports numerous font styles and sizes and lets you incorporate picture backdrops from other pain programs. The MicroPainter plus program and the Graphics Companion I diskette are included with the program. It’s $29.95. Contact: Electronic Arts, 1820 Gateway Drive, San Mateo, CA 94404, 415-571-7171.

Win At Lotto is a computerized implementation of one of the most popular wheeling systems currently available, according to Vern Smith of Phantasy Software. The program incorporates five separate wheels, plus win detection routines. It is 100% machine language and has on-screen documentation. It’s $24.95 from Phantasy Software and Electronics, Inc., P.O. Box 13474, Portland, OR 97213.

New Hardware Products

New software isn’t the only thing that has appeared for the 8-bit Atari over the past year. Here are some interesting new 8-bit hardware products:

Easy-Scan is a digitizer that transforms an image from your printer to the computer screen. Using fiber-optics to link the computer and the printer, Easy-Scan interfaces via the cartridge port and digitally scans an image up to 75% of the area of an 8½×11″ sheet. Digitized pictures are saved in standard 62 sector file format. The included software allows for the control of display color, size, clarity and graphics mode. Also supplied are conversion utilities to convert the images to other popular formats, such as Print Shop. Easy-Scan is $79.95 from Innovative Concepts, 31172 Shawn Drive, Warren, MI 48093; (313) 293-0730.

ICX-85 Keypad is the answer to software incompatibility with a keypad handler. The ICX-85 keypad is wired directly to the 8-bit keyboard—a press on the keypad has the same effect as pressing the corresponding key on the keyboard and thus works with any software. Installation requires soldering a 12 wire connector into the computer and plugging the keypad into the connector, so get help with this one if you tend to be dangerous with a soldering iron in your hand. The keypad is $44.95 from Innovative Concepts (address previously listed).

MIDIMax is a MIDI interface for the 8-bit Atari that is compatible with all existing 8-bit MIDI software and also includes MIDI Music System software (MMS), an AMS (Advanced Music System) to MMS converter, sample song files, and two six-foot MIDI cables. MIDIMax has a built-in I/O port for daisy chaining with other Atari peripherals. It’s $225. Contact: Wizztronics, P.O. Box 122, Port Jefferson Station, NY 11776.

P.O.S. Net, or Point-Of-Sale Network program, from Xenia Research, is a barcode reader for the 130XE (or any 8-bit Atari expanded to 128K) that includes software for point-of-sale applications, invoice generation, barcode reading and printing and reports. Another program, entitled XR-100, is included, which allows you to incorporate the barcode reading into your own software. Other 8-bit Atari computers can be used as terminals for a main system. The complete package, which consists of P.O.S. Net, the barcode handler and reader, and XR-100 software with documentation is $189. Alternative packages are available. Contact: Xenia Research, P.O. Box 4675, Federal Way, WA 98003; (206) 927-7108.

RAMdrive + XE-GM1 is a memory upgrade for the Atari XE Game System that expands the memory of the machine to 128K, thereby enabling the XT Game System to run 130XE compatible software. Soldering and desoldering is required for installation. The upgrade is $34.95 from Innovative Concepts (address previously listed).

The Six System Box from Irata Verlag is for XL/XE computer owners who use multiple operating systems or who intend to acquire additional operating systems. The box lets you select from among six different XL/XE operating systems (you must obtain the OS chips) with the flip of a switch. Six LED lamps on the front of the box indicate which operating system is currently in use. Some of the OS chips offered by Irata Verlag include the High Chip XL ($70), for owners of Happy drives, which lets the computer run slightly faster and provides a special menu for shutting off, slowing down, or slow-loading with the Happy on; The High Chip XE ($120) is another OS chip available. This one sets up a RAM disk in the computer as soon as the computer is turned on. Contact: Irata Verlag, 1272B Potter Drive, Colorado Springs, CO 80909.

The SX212, the 300/1200 baud modem from Atari was finally released this year. The SX212 features full Hayes compatibility, an SIO port for connection to Atari 8-bit computers, an RS-232 port, built-in speaker, and the Hayes standard array of eight LEDs. It’s $99.95. Contact: Atari Corp., 1196 Borregas Ave., Sunnyvale, CA 94086; (408) 745-2000.

The Super Turbo Interface is a printer interface for the 8-bit with an 8-bit buffer that allows the addition of two drives (such as IBM or ST 3.5 or IBM 5.25) and a booster system that allows speeds of 150,000 baud. Contact: Irata Verlag (address previously listed).

The XF551 is another long awaited product from Atari that finally reached store shelves this year. The XF551 is a double-sided true double-density disk drive (5¼″). The drive runs almost three times the speed of the 1050 and includes ADOS, a specially designed DOS from Optimized Systems Software that takes advantage of the double-sided, double-density capacity. The drive retails for $199.95. Contact: Atari Corp. (address previously listed).

Next Month

We’ll explore what’s in store for your 8-bit Atari in 1989 and beyond. And we’ll look at more reader mail and user groups’ newsletters.

Readers’ questions, comments and contributions are welcome. Address all correspondence to:

Jeff Brenner
Applying The Atari, 12/88
P.O. Box F
Titusville, FL 32781 •
COMPUTER SHOPPER / MARCH 1989 / PAGE 262 

Applying The Atari

by Jeff Brenner

This month, we’ll take a look at some new products for the 8-bit Atari, solve a 1200XL incompatibility problem, and learn about repair services for the 8-bit Atari.

AutoPrep

AutoPrep is a new product for all 8-bit machines that automatically formats blank disks without the need for calling DOS. Helpways, the manufacturer, describes the product as follows:

A unique utility program for all Atari 8-bit machines, AutoPrep completely eliminates the need to call DOS and suffer its endless repetition of prompts and slow copying procedures when initializing disks.

AutoPrep automatically formats blank disk in single or dual (enhanced) density and writes your choice of DOS and autorun files to them. You can choose to initialize with DOS.SYS alone, the usual DOS.SYS and DUP.SYS (either DOS 2.5 or 2.0), or no DOS files. Autorun file choices include almost any AUTORUN.SYS, RAMDISK.COM, both, or none. You can even initialize with a BASIC program by temporarily renaming it AUTORUN.SYS.

After the title screens, AutoPrep asks a series of questions to learn how you want disks initialized, then follows your instructions until told to change. After initializing one side of a disk, the program beeps and asks if you wish to do the other side the same way, do another disk, or change your instructions. Answer no to all three and the program ends.

AutoPrep brings you major benefits in convenience and speed, since you can do something else while disks are initialized. It also spares you a lot of typing and annoyance by automating the whole procedure. In fact, the more disks you initialized, the more you’ll appreciate your new freedom from the tyranny of DOS.

At $14.95 plus shipping, the cost is somewhat steep for a program that essentially formats disks for you, but may be worth the price in speed and convenience if you usually have many disks to format. A significant limitation is that it is currently compatible only with DOS 2.0 or DOS 2.5. A more detailed review will appear in a future issue. For more information, contact: Helpways, PO Box H, Rochester, NY 14623.

SpartaDOS X

For XF-551 disk drive owners who have been patiently waiting for XE-DOS and all other disk drive owners who yearn for a better DOS, SpartaDOS X from ICD Corporation might be the perfect solution. As a ROM cartridge, SpartaDOS X is instantly active and does not eat up any valuable user memory. Plus, the DOS supports the Atari 800 (unlike SpartaDOS 3.2) in addition to the XL and XE machines, and can handle virtually any Atari-compatible drives, including the XF-551, with its unique features.

Reader Mail

A number of readers wrote in with information on the 1200XL in response to Lorenzo Gasperini’s question in the December 1987 column regarding using the MPP1150 interface with the 1200XL.

Dear Jeff:

I read in the December issue of Computer Shopper that Lorenzo Gasperini is having some difficulty making the MPP1150 work with his 1200XL. I believe that the modification required is the very simple one described. I have excerpted it from the P:R: Connection owners manual. My thanks to ICD for this information.

Carefully disassemble the computer case and locate resistor R63 on the printed circuit board and replace it with a jumper wire. Resistor R63 is near the top of the board and near the center; it is to the right of the transistor Q3. R3 is a current limiting resistor and will prevent any device from drawing power from the serial port. Devices which do this are the P:R: Connection, the XM301 modem and the MPP1150.

Keep up the fine column.

Eric Andersen
Dover, Delaware
Dear Jeff:

This is in response to the letter concerning a modification requirement for the 1200XL computer for the MPP1150 interface to work. This letter was printed through a P:R: Connection using a 1200XL system. I am assuming that the modification for the MPP1150 is the same one that is required for the P:R: Connection. The 1200XL uses a current limit resistor to limit current going out the I/O port in the rear of the computer. This resistor prevents the 1200XL from using any peripheral which draws power from the computer. To alleviate this problem you must remove the resistor (R63) and replace it with a jumper wire. A small piece of 24-30 gauge wire should do the trick. Most peripherals that require power from the computer will now work. With the comment about buying a 65XE or 130XE to eliminate the “problems” of the 1200XL, I have yet to have any problems with my system. I’m really happy with my 1200XL. So happy that I’ve decided to NOT purchase an MSDOS clone. The Atari (with the software that I have) will do everything those clones will do, and with the memory upgrade that I have installed, I can run the 130XE software, like the 130XE version of PaperClip that I’m using to write this letter. So all I have to say is that the 1200XL is a great computer. Now if we could only get Atari Corp. to acknowledge that the 8-bit is not dead, we’ll be in great shape. P.S. This letter was printed using Daisy Dot II.

Robert A. Baczek
Egling AFB, Florida

Thanks for writing. My comment about replacing one’s 1200XL with a 65XE or 130XE was perhaps a bit premature, and should apply only to those experiencing substantial software and/or hardware incompatibilities, although this modification and other fixes may correct any problems. Let me also thank readers Walter Korzyk, of Albany, New York, Paul Siu of Darby, Pennsylvania, Edward Liao of Brooklyn, New York, and an anonymous reader from Brighton, Colorado for providing additional detailed information, as well as readers who wrote in to help. Mr. Siu sent along information from the booklet, “Mods, Fixes and Upgrades.” 1200XL owners will be interested in the booklet’s “Souping Up the 1200XL” article by Paul Smith. The article describes the modification discussed above for printer interfaces and also discusses fixing the Serial I/O Connector, adding chroma output and adding an XE-compatible 256K upgrade. The “Mods, Fixes and Upgrades” booklet also contains articles on expanding the memory of the 800, 800XL and 130XE, fixing the XE console keys, hardwiring the CX-85 keypad, adding a 1050 write-enable switch, using four joysticks with the XL/XE and more. The booklet was compiled by the Midwest Atari Group—Iowa Chapter (MAGIC), PO Box 1982, Ames, IA 50010-1982.

Dear Jeff:

I’ve been trying to locate where I can get my 800XL repaired, with no luck. Do you know of any repair centers where I can get service?

Stephen Mattick
Tacoma, Washington

Atari Corp. will repair or replace your 8-bit computer (at its option) for a flat rate of $50 (or $65 for an Atari 130XE). The flat rate for repair/replacement of an 810, 1050 or XF551 disk drive is $75. A unit sent for repair should be securely packaged and insured for its value. For additional information, contact: Atari Corp., Customer Service, 390 Caribbean Dr., Sunnyvale, CA 94089.

A number of independent companies also provide 8-bit repair service, such as American Techna-Vision (15338 Inverness St., San Leandro, CA 94579) and Innovative Concepts (31772 Shawn Dr., Warren, MI 48093.) Other companies providing repair service or parts for the 8-bit Atari’s can write in to be listed.

Recently, I’ve printed several letters from satisfied ATR-8000 users. In fairness, here’s one with another point of view:

Dear Jeff:

I see the ATR-8000 is surfacing in your column. I had one, so I can’t resist a comment about it.

InfoWorld gave this unit a nice writeup when it first came out, but I found it frustrating. Most of its capabilities are outmoded. Yes, it’s a modem interface, and offers a printer port: so does the 850, or the P:R: Connection. Yes, you can connect 8″ drives (ever tried to find desk space for an 8″?) and standard drives, but who needs them with the Indus and now the double-sided Atari unit available? Ah, yes...you can run CP/M. Now, before you buy this—stroll into your favorite computer store and ask to see their CP/M selection. Commercial CP/M software is deader than commercial 8-bit Atari software! The public domain stuff was written by hackers with “a user-friendly interface substantially ignored.” And the best part—CP/M was written for an 80 column screen. The ATR-8000 jockey gets to enjoy horizontally scrolling his 40 column window, unless he has an 80-column card.

The ATR-8000, to me, was less useful than a RAM expansion card for my old 800. At least I can—with the right DOS—use that for a RAM disk.

My advice would be to pass up ALL expansion—enjoy your 800 in its pristine 48K glory. You’ll have some nice programs (PaperClip, SynCalc, SynFile, Print Shop, 1030 Express) which work and are a joy to use. If you outgrow that, you don’t need an upgrade—you are buying frustration and wasting your money. Go to MSDOS. You’ll get 640K and all the fine software modern talent can provide. It’ll be well integrated, and “transparent.” Like your old 800, a joy!

The ATR-8000 and its twin Shugarts were discarded long ago. My old 800 with its single Indus GT sits proudly underneath its Zenith monitor, right by my IBM. It’s still used, though not as often as before. For me, MSDOS has picked up where it left off.

Bill E. Barry
Tampa, Florida

And now, a letter on the 8-bit “dead or alive?” controversy.

Dear Jeff:

We’re tired of hearing all the talk by magazines and software developers that the 8-bit Atari’s are dead and would like to share our story of how we get along with our “outdated” 8-bit Atari. We use our AtariWriter Plus, in combination with a letter quality printer that we got as a “steal” from an advertiser in Computer Shopper. The program is easy enough to use by all members of our family and its gets our writing tasks done in record time. But most importantly, you couldn’t tell the finished document from one that came from out of a Commodore, an Apple, or even an IBM for that matter. What amazes us is how stand-alone consumer word processors these days sell for around $500, yet our 8-bit Atari system with disk drive and printer cost less, yet can do so much more besides word processing. We keep mailing lists for our personal and business needs, and use an old but quite adequate database program to keep records for our home business. The kids get games at closeout prices that are just as entertaining as they were when they were originally released. And they’ve also been introduced to programming by learning how to use the BASIC language built into the machine.

We believe that Atari Corp. wants to see the 8-bit Atari’s die because they think that we’ll all run out and buy brand new ST computers. Not us—never. Our 130XE system offers us everything we need from a computer system. Anyone who suggests that we would be better off dumping our useful software collection and data disks and buying a brand new ST (or an Amiga, or an IBM) where we would have to start all over again, with more expensive software, is crazy. The 8-bit Atari is very much alive in our house, and will continue to be so until its operating life has truly ended, completely beyond repair. And even then, we’ll have to find another 8-bit machine to take its place.

The Albert Family
Lakewood, California

What a comforting, reassuring letter for the 8-bit community! Let’s hope the software manufacturers begin to get the message.

Are You Applying Your Atari?

In the months ahead, I’ll be publishing other letters from 8-bit Atari owners who are making the most of their machines for home, business, and/or educational applications. If you would like to share your experiences using your 8-bit Atari system with other readers, please write it down and send it in. Please describe your system in full and specify the software packages you are using. Photos are welcome, and will be used when space permits.

Readers’ questions, comments and contributions are welcome. Send all correspondence to:

Jeff Brenner “Applying The Atari, 3/89” c/o Computer Shopper PO Box F Titusville, FL 32781-9990 •
COMPUTER SHOPPER / MAY 1989 / PAGE 272 

Applying The Atari

by Jeff Brenner

This month we’ll take a look at some new products for the 8-bit Atari, answer some reader mail, and enter a mathematics program for multiplying matrices. See Listing 1.

New Products

From No Frills Software comes the PS Users Utility Disk, a set of utility programs for The Print Shop owners. Ed Kielbasinski, the designer, writes:

Dear Jeff:

No Frills Software has completed work on its second Atari 8-bit program, the PS User Utility Disk. The Converter, which we released last fall, has been well received by Atari users, and we feel this program is a much better one, both in design and features. While some of the features of the program are for utility use in dealing with Print Shop, two features are basically programs unto themselves. These are the label maker and the bookmark/coupon maker. Each of these sections could actually stand on its own, to a certain degree, as a separate program.

We are now finishing testing on our third program, The Converter Companion, which together with the Converter can bridge Print Shop, Newsroom, Awardware, PrintPower, MicroPainter (and therefore Video Title Shop) and MicroIllustrator, plus more.

Ed Kielbasinski
Kearney, NE

According to No Frills Software, the new PS Users Utility Disk (or PSUUD) contains the following functions that enhance the usefulness of The Print Shop:

The PS Users Utility Disk sells for $29.95 and works with an 8-bit Atari with 48K memory or more. One or two disk drives and an Epson or Prowriter compatible printer is required. For more information, contact: No Frills Software, 800 E. 23rd St., Kearney, NE 68847, (308) 234-6250.

Turboword +

MicroMiser Software brings us Turboword +, an improvement on its Turboword word processor for owners of the XEP80 80-column screen adapter. The program features a What You See Is What You Get (WYSIWYG) display, automatic formatting during text entry, macros, mail merge, spelling checker, and more, including all standard editing commands. The program is data-compatible with the MicroMiser’s Turbobase 80 program. For XEP80 owners tired of waiting for an 80-column Paperclip or AtariWriter Plus, Turboword may be a good alternative, and users will certainly appreciate the 80-column display. Look for a full review in a forthcoming issue. Turboword + is $49.00. For additional information, contact: MicroMiser Software, Inc., 1635-A Holden Ave., Orlando, FL 32809, (407) 857-6014.

Antic All 8-Bit

In a victory for 8-bit Atari users upset with the growing ST portion of the Antic magazine, Antic Publishing announced that the publication would now be exclusively devoted to 8-bit computers. A few months earlier, Analog Computing also rededicated itself to the 8-bit Ataris, and it’s terrific to see the two major Atari-dedicated publications competing for 8-bit readers.

DOS XE

Several readers have requested information on the availability of DOS XE, the long-awaited Disk Operating System designed for the Atari XF551 double sided disk drive. DOS XE features date stamping, BASIC program auto-run, RS-232 auto-load, 130XE RAM disk auto-load, directory/subdirectory file structure, batch files, view file, command line entry, and more. The DOS is fully compatible with DOS 2.0 and 2.5, and supports all of the formats offered by the XF551. Any XF551 owner who is using DOS 2.5 will definitely want to get hold of DOS XE to fully utilize all of the features of this disk drive. If you cannot obtain a copy from your local users’ group, you can get the disk and manual for $13.50 from Atari. Write to: Atari Corp., 1196 Borregas Ave., Sunnyvale, CA 94086. Attn: Customer Relations.

Reader Mail

Dear Jeff:

Many thanks to you and your readers for the solution to my problem of typing sub/superscripts with the AtariWriter Plus and a Panasonic printer. The explanation and sample drives cleared up my problem and gave me an insight to the operation that I may never have had if I had been able to purchase a drive program with my printer. Thanks again and continued success with your column.

Dominick J. Defazio
Rochester, MI

I’m happy to pass along your thank you to the many readers who wrote in to solve your problem. This spirit of cooperation and willingness to help us is what makes the community of 8-bit Atari users a superb lot among computer users.

Now here are two more requests from readers. If you can help these readers in any way, please write in and share your knowledge.

Dear Jeff:

Do you or your readers know where I can find SWP, the company that produced the ATR 8000? There are two ATR related products that I need. The first is an adapter to run an 8-inch drive on the ATR, and the second is a program called DiskDef II that allowed two drives to be set to different formats.

Tony Venticinque
Bolingbrook, IL
Dear Jeff:

Do any of your readers have any information on Advanced Interface Devices, Inc., a company that was based in Melbourne, Florida which (in 1984) sold the R-Verter serial bus modem cable adapter and drive handlers?

Michael Nixon
United Computer Sys.
Los Angeles, CA

Readers?

Dear Jeff:

I’ve been a subscriber to Computer Shopper for four years now and I have always especially enjoyed your columns. My first computer was an Atari 800 and I have subsequently added the 130XE, 520ST, SX-64, Amiga 500 and an IBM-XT clone through the years. I’ve gotten the most pleasure out of my 800, though.

In response to your recent request for those selling 8-bit software: I had the opportunity a couple of years ago to purchase the Atari 800 software stock of Pacific Stereo when they went out of business at $5/program. I had hoped I would be able to sell these at swap meets but that hasn’t been very successful. I would like to offer them at cost to any of your readers who might be interested. They can send a SASE for the product list to: Charles T. French, 27202 Corcubion, Mission Viejo, CA 92692.

Charles T, French
Mission Viejo, CA
Dear Jeff:

I’m learning about matrices in school and would like to know how to go about writing a program that will multiply two matrices of any size. We’re using IBM computers at school to perform the operations on large matrices, but I would like to be able to do the operations at home on my 130XE. I have not been successful in transferring the program over to my 130XE. I would be grateful if you could provide a short program or if you could direct me on writing such a program in Atari BASIC.

Sandra Dreyfus
Northbrook, IL

One important aspect of Atari BASIC is that all subscripted variables must be dimensioned in advance. This may have presented a problem to you when converting from another BASIC. Listed under “Matrix Multiplier” you’ll find a program that will multiply two matrices that you enter. The only limitations to the size of the matrices is the amount of memory available in BASIC (subscripted variables consume memory rapidly) and the requirement that the number of columns of matrix A must equal the number of rows of matrix B. This program should prove useful to students of linear algebra, teachers, and anyone else interested in the power of the computer to perform tedious operations with relative ease and speed.

The program’s operation is straightforward, with on-screen prompts to guide you through entering the sizes of the matrices, and the individual elements. When both matrices have been,entered, the computer will pause for a few moments and will then display the product of the two matrices. Due to limitations of the screen width, the values display may be truncated if the product contains a large number of columns, or when the individual elements contain many digits. The solution matrix, along with matrix A and matrix B, can be displayed in its entirety on the printer by pressing “Y” in response to the “Would you like a printout (Y/N)?” prompt. A sample output is given under Figure 1.

Next Month

More Atari news and information, reader mail and new products.

Reader’s questions, comments and contributions are welcome. Address all correspondence to: Jett Brenner, “Applying The Atari, 5/89,” c/o Computer Shopper, P.O. Box F, Titusville, FL 32781.

MATRIX A: 
3.5       6.5       2.25      1.85      3.6       5.3 
9.2       7.26      3.5       1.44      0         1.8 
3.1       1.9       4.33      6.2       1.25      3.4 
5.42      5.68      4.25      1.9       9.88      7.65 
1.5       6.5       8.15      9.35      3.2       1.4 

MATRIX B: 
7         4         2 
2         9         1 
5         6         2 
0         9         3 
5         1         2 
4         1         7 

MATRIX C (A*B): 
87.95     111.55    78.35 
103.62    137.9     77.18 
67        115.95    790.96 
150.55    132.93    120.29 
85.85     202.15    74.55 

Figure 1 
OLJ 10 REM MATRIX MULTIPLIER 
EWJ 20 REM BY JEFF BRENNER 
NJJ 30 OPEN #2,4,0,"K:" 
MVJ 40 DIM A$(100):A$="MATRIX MULTIPLIER" 
BSJ 50 GOSUB 730:GOSUB 760 
KYJ 60 POSITION 12,0:PRINT A$ 
QPJ 70 POKE 82,3:POKE 84,2:PRINT 
DDJ 80 PRINT "This program will multiply any two" 
QNJ 90 PRINT "matrices A and B and will show the" 
WRJ 100 PRINT "result C on the screen or printer." 
UIJ 110 POKE 82,2:PRINT 
QHJ 120 A$="ENTER DIMENSIONS OF MATRIX A" 
OMJ 130 GOSUB 730:POSITION 6,9:PRINT A$:POKE 764,255 
HSJ 140 PRINT "rows,columns";:INPUT R1,C1 
BKJ 150 A$(LEN(A$))=CHR$(194) 
NBJ 160 POSITION 6,12:PRINT A$ 
HXJ 170 PRINT "rows,columns";:INPUT R2,C2 
VDJ 180 IF C1=R2 THEN 270 
CKJ 190 A$="INVALID MATRIX":GOSUB 730:PRINT A$ 
HSJ 200 PRINT "The number of columns of A must equal" 
BTJ 210 PRINT "the number of rows of B. Enter again." 
GSJ 220 A$="RETURN":GOSUB 730:POKE 85,8:POKE 752,1 
PTJ 230 PRINT :PRINT :POKE 85,8 
PJJ 240 PRINT "PRESS ";A$;" TO CONTINUE":POKE 764,255 
NEJ 250 IF PEEK(764)<>12 THEN 250 
QQJ 260 POKE 752,0:RUN 
MNJ 270 TRAP 700:DIM A(R1,C1):DIM B(R2,C2):DIM C(R1,C2):TRAP 40000 
YOJ 280 A$="MATRIX ENTRY":GOSUB 730:GOSUB 760 
NBJ 290 POSITION 14,0:PRINT A$ 
FOJ 300 PRINT :PRINT "Input matrix entries one element at a" 
KZJ 310 PRINT "time as requested:":PRINT 
UXJ 320 FOR I=1 TO R1:FOR J=1 TO C1 
OOJ 330 POKE 84,8:PRINT CHR$(156);CHR$(156); 
VUJ 340 PRINT "ENTER ELEMENT A(";I;",";J;"): "; 
FZJ 350 INPUT #16;X:A(I,J)=X 
RKJ 360 NEXT J:NEXT I 
VEJ 370 FOR I=1 TO R2:FOR J=1 TO C2 
OTJ 380 POKE 84,8:PRINT CHR$(156);CHR$(156); 
WAJ 390 PRINT "ENTER ELEMENT B(";I;",";J;"): "; 
FWJ 400 INPUT #16;X:B(I,J)=X 
RGJ 410 NEXT J:NEXT I 
WVJ 420 A$="MULTIPLYING":GOSUB 730:GOSUB 760 
FLJ 430 POSITION 15,0:PRINT A$:PRINT 
LQJ 440 PRINT "Please stand by..." 
XFJ 450 FOR I=1 TO R1:FOR J=1 TO C2:C(I,J)=0:FOR K=1 TO C1 
PIJ 460 C(I,J)=C(I,J)+A(I,K)*B(K,J) 
LCJ 470 NEXT K:NEXT J:NEXT I 
OKJ 480 A$="SOLUTION":GOSUB 730:GOSUB 760 
YLJ 490 POSITION 16,0:PRINT A$:PRINT :PRINT 
FEJ 500 PRINT "MATRIX C:":PRINT :LIM=INT(39/C2) 
UZJ 510 FOR I=1 TO R1:FOR J=1 TO C2 
GRJ 520 POKE 85,LIM*(J-1):A$=STR$(C(I,J)) 
VRJ 530 IF LEN(A$)>LIM-1 THEN PRINT A$(1,LIM-1);:GOTO 550 
FEJ 540 PRINT A$; 
XXJ 550 NEXT J 
LJJ 560 PRINT :PRINT :NEXT I 
AVJ 570 PRINT :PRINT "Would you like a printout (Y/N)?";:GET #2,N 
KYJ 580 IF CHR$(N)<>"Y" THEN 220 
MEJ 590 CLOSE #3:OPEN #3,8,0,"P:" 
GCJ 600 PRINT #3;"MATRIX A:" 
JYJ 610 FOR I=1 TO R1:FOR J=1 TO C1:PRINT #3;A(I,J), 
OKJ 620 NEXT J:PRINT #3:NEXT I 
DHJ 630 PRINT #3:PRINT #3;"MATRIX B:" 
KEJ 640 FOR I=1 TO R2:FOR J=1 TO C2:PRINT #3;B(I,J), 
ONJ 650 NEXT J:PRINT #3:NEXT I 
OLJ 660 PRINT #3:PRINT #3;"MATRIX C (A*B):" 
KHJ 670 FOR I=1 TO R1:FOR J=1 TO C2:PRINT #3;C(I,J), 
OQJ 680 NEXT J:PRINT #3:NEXT I 
BSJ 690 GOTO 220 
IYJ 700 PRINT "Not enough memory for matrix of that" 
IOJ 710 PRINT "size.  Enter smaller matrices." 
BMJ 720 GOTO 220 
YAJ 730 FOR I=1 TO LEN(A$) 
UOJ 740 A$(I,I)=CHR$(ASC(A$(I,I))+128) 
TQJ 750 NEXT I:RETURN 
WXJ 760 CLOSE #1:OPEN #1,4,0,"E:":SETCOLOR 2,4,2 
NNJ 770 POSITION 0,0 
UVJ 780 FOR I=1 TO 40:PRINT CHR$(160);:NEXT I 
BWZ 790 RETURN 

Listing 1 
COMPUTER SHOPPER / JUNE 1989 / PAGE 282 

Applying The Atari

by Jeff Brenner

This month we’ll take a look at the new Express! cartridge for the 8-bit Ataris, answer reader mail, and hear from more 8-bit users who are making the most of their Atari computers.

New Products

From Orion Micro Systems comes Express!, a new terminal program in a 64K cartridge. The company writes:

“The Express! cartridge is a brand new terminal program written by Keith Ledbetter, the author of the popular Express! series of communication programs. The new Express! cartridge sports 64K of banked memory and is written in 100% assembler language, allowing Keith to pack in features that are not available in any other terminal program for the Atari 8-bit. Even though the program has been totally rewritten, you can still sense the user-friendly and bullet-proof environment that has always been a favorite feature of the Express! series of programs.

“The cartridge will work with any modem that has a corresponding “R:” handler available for it. This list includes (a) any Hayes-compatible modem used with an 850, P:R: Connection, or MIO, (b) Atari 1030 modem, (c) Atari XM301 modem, (d) Atari SX212 modem, and (e) Supra MPP modem.

“The Express! cartridge is built around a drop-down menu system identical to those that are popular on many other machines like the IBM PC and the Atari ST. The XEP-80 80 column cartridge is also fully supported. If you are using an XEP-80, the dropdown menuing system is replaced with a text-based, 80-column menu. This means you will no longer need two monitors (i.e. one for the terminal mode, one for the menus).

“Express! also has a full-screen, Action!-type text editor built-in. This is a great feature to have, allowing you to edit the capture buffer or compose messages for uploading to Bulletin Boards. Supported features include cut and paste, line tagging, find and search/replace.

“The Express! cartridge also allows you to piggyback another cartridge on top of it. Then, at your command, you can turn off the Express! cartridge and run the cartridge plugged into the top of it! Or, you can turn off the Express! cartridge and the cartridge above it, making the OS think there are NO cartridges in your machine. You may never have to pull the cartridge out of your machine.”

Other Express! features: supports any DOS (including the new SpartaDOS X cartridge); supports expanded 130XEs or 800XL allowing up to a 528K capture buffer; includes a DOS shell for quick access to common DOS commands; offers a full-screen text editor; supports any modem with the “R:” handler; supports 300/1200/2400/4800 or 9600 baud rates; supports Xmodem, Xmodem-CRC, Xmodem-1K (Ymodem), Ymodem Batch, ASCII and external windowed transfer protocols; runs external, disk-based programs; exits to DOS without loss of carrier to run programs while on-line; and more.

Express! is to be released June 1, and will retail for $69.95. For more information, contact: Orion Micro Systems, 2211 Planters Row Drive, Midlothian, VA 23113.

June Atari Show

ST-World Magazine will be sponsoring a number of “World Of Atari” shows supporting all Atari computers, including the 8-bit machines, the ST and Mega machines. The shows will feature seminars, workshops, computers and software, and have the backing of Atari Corp. The next shows will be June 24-25 at the Hyatt Regency Hotel in Dearborn, Michigan. For more information, contact Rich Taukijiat 503-673-2259. If your organization or club is sponsoring a show featuring or including 8-bit Atari computers, please write in and let us know about it (at least three months in advance).

Reader Mail

Dear Jeff:

I have been reading your column for several years now, and enjoyed the tips and information it has given me. I have run a BBS now for two years and its main objective is to have the information on doing your own upgrades, fixes, and other self-help projects on line. I have written to many of the users groups and gained their information and have found other sources as well. I run the board 24 hours and have an extensive library of back issues to ANALOG, Antic, and even some mags that are off the market to refer to if need be. I even have information on where to get dot-matrix printheads rebuilt—I admit I don’t have a hard drive but I do have 8 drives plugging away, as well as a 1200 baud modem with the software of Express Pro!

I read the articles of the problem with the DMP 105 printer, and it does have addressable dots, however it would not work with Print Shop or other programs that require a special character set. Trent Dudly had made a printer driver which allowed me to make a list of a program with the special character set—I don’t use it often but I do have a copy in my files.

I hope that you can use this information. Incidentally, I have used technitron’s power supply instructions that you mentioned in the column and the board has not gone down in over a year. I even added a few bells and whistles, such as a Radio Shack one-inch fan to keep it much cooler, and the MIO upgrade they had available.

L. A. Sneeringer
Ft. Lupton, Colorado

In response to the excuses offered by several major software manufacturers for cancelling their 8-bit software titles (because the 8-bit was “obsolete” or “dead,” and that 8-bit owners should and would readily switch over to new machines) I invited letters from readers who were benefiting greatly from their 8-bit machines. Here are a few:

Dear Jeff:

My system consists of an 800XL (Newell 256K), two 1050 drives (both with Doublers), Hitachi color monitor, P:R: Connection, Supra 2400 baud modem, MicroStuffer (Supra), 64K printer buffer, and an Epson-compatible 9-pin dot-matrix printer.

In addition to working, I am the Business Manager of a local Drum & Bugle Corps and am a member of my Unions executive. This makes me a very busy person, but Atari helps me manage things more effectively.

Word processing is my main use (AtariWriter +) but not far behind is telecommunications (keeping up to date on the local BBSs as well as nationally with a networked BBS (run on an 8-bit Atari using Express Pro). My noted activities keep me busy with mail/membership lists (Synfile +), posters and other flyers (Printshop and Newsroom).

My home uses include all of the aforementioned with the inclusion of an up-to-date inventory.

This system is so well used (almost daily) that it was necessary to buy another complete system so that the kids could do their things without an argument. The kids regularly do school word processing for their homework assignments.

The Atari is “famous” for its reputation as a games computer. I, however, find that the only time we play games is when company comes over!

There has been much talk of the 8-bit Atari being dead. Admittedly, it is in critical condition, but I can assure you and your readers that my Atari computers lead very full and useful lives and will continue to do so for long into the forseeable future. Now, if only hard drives were a little more reasonably priced, hmmm.

Lastly, keep up the good work in Computer Shopper. I consider it my premier source of current 8-bit news. Bravo!!

Bob Berberick
Hamilton, Ontario
Dear Jeff:

I have been happily applying my Atari 800 since it first came out. I use AtariWriter, various games, and a communications program for Packet Amateur Radio, besides my own programming efforts. The 800 is great for morse code, teaching music theory, and publishing my ham radio newsletter. Where are the Atari ads in Computer Shopper? My friends with Commodore and Radio Shack computers have had to get them repaired over and over but my old 800 keeps right on working (the space bar needed lubrication once, though). I use a 1050 drive, ADS 2000 printer, Xetec interface, Pac-comm TNC modem for ham radio, and an Atari 400 with Big Blue printer and Protecto interface for the kids using the junky 410 tape unit (yuk!).

Larry W. Garens
Brady, Texas
Dear Mr. Brenner:

The letters you printed in the March issue of Computer Shopper were encouraging, but especially the one from the Albert family. I feel the same way about the XL/XE computers as they do.

I have been using Atari 8-bit computers for about five years. Presently, my system includes a 130XE, two double-density 1050 disk drives, a Star NX-1000 printer, and an SX-212 modem. A 13” color TV (with antenna removed) serves very well for a monitor.

Before I purchased my first Atari, several of my science students (I am a secondary school science teacher) began asking questions about computers in general. This was “way back” in 1984 when the average home computer system cost something less than $1000. With my very limited exposure to computers, I couldn’t answer many questions and determined to buy a home computer to “learn on” for myself. Then as I learned, I would pass my knowledge along to the kids.

The popular and affordable computers on the market in those days were Commodore 64s, Tandy 8-bit models, the TI, and the Atari models. IBM and Macintosh models were out of the question financially, so I studied as much information about the various models as possible. Then around Christmas, the XL computers were released and I bought a 600XL with a 1010 cassette device on Christmas eve. How well I remember that Christmas vacation of late-night sessions with my Atari and Atari BASIC. My greatest achievements were in producing a BASIC program to computerize the charts and logistics of a favorite war game and another program that tracked and automatically averaged my student’s grades. What had previously taken from 3 to 4 hours to do was then done in about 30 minutes! Later when the disk drive was added to the system and the program rewritten, the time further decreased to about 5 minutes! While all the other teachers were sweating it out the night before grades were due, I was playing Star Raiders!

Our school had nothing in the way of computer instructions and my physics students were begging me to do something for them, so after much arm-twisting and pleading, I managed to persuade our administrator to allocate funds to set up five 600XL cassette systems and a time slot for me to teach BASIC programming. The next year, the class grew and we were forced to incorporate other aspects of computer usage besides programming to accommodate non-math oriented students. Now our school has a computer laboratory with twelve 64K Ataris, each with its own disk drive and color TV. We also have three XMM801 printers.

In the process of developing the computer lab, a curriculum was also needed. Taking notes from various magazines, books, and personal experience, I used TextPro to type up a 140+ page curriculum for our high school students. It covers elementary programming, word processing, spreadsheets, databases, and graphics. It also includes complete instructions for the public domain software that is used during the coursework. In addition to a high school curriculum, an elementary curriculum was added to teach rudimentary aspects of BASIC and LOGO.

Word spread to other schools of the success we were having at a fraction of the cost that most schools were spending for Apple or IBM computer labs (we spent about $5,000 for the entire lab of 12 computer systems). Two other schools asked me to come and set up similar labs in their facilities and to train a staff member to use and teach with the Atari computers. At last report, they are doing just fine and one school has continued to add hardware.

The 130XE does everything I need it to do. Perhaps the newfangled 16- and 32-bit computers can do the same things my 8-bit can do in a fraction of the time, but I am perfectly happy with my system and intend to stick with it, come what may.

Michael E. Bennett
Augusta, Georgia

Readers who are interested in the curriculum materials developed by Michael (including programs and documentation) can send him a long, self-addressed, stamped envelop for more information. Write to: Michael E. Bennett, 2207 Glynn Arven Court, Augusta, GA 30906.

8-bit Software

If you are trying to locate 8-bit software that has been discontinued or cancelled, please write in and let me know. I will be coordinating requests from individuals and users’ groups to see if arrangements can be made with various manufacturers to re-release discontinued products or to locate old inventory. Also, if you’re a software manufacturer or distributor with a substantial inventory of 8-bit software, please let me know. I’ll print further details in a future column.

Next Month

We’ll have more Atari 8-bit information, new products, reader mail, and a reader-submitted utility program. Readers’ questions, comments and contributions are welcome. Address all correspondence to: Jeff Brenner, “Applying The Atari 6/89” c/o Computer Shopper P.O. Box F, Titusville, FL 32781.

COMPUTER SHOPPER / SEPTEMBER 1989 / PAGE 607 

Applying The Atari

by Jeff Brenner

Several brand new software products make their way to the Atari 8-bit market this month, and we’ll take a look at some of them in this month’s column. We’ll also answer some reader mail, including some thought-provoking letters about the future of 8-bit computer software.

New Products

From UltraBasic, Inc., comes a group of new programs for the 8-bit Atari computers: Superfrogs, Superfrogs Funspeller, Tank Math and Track Stack 2.0. Best of all, each program retails for only $10. Some of the product information which follows was provided by the manufacturer, and I will print more details and evaluations of these programs in next month’s column.

Superfrogs is a “seven game arcade with over 10,000 variations.” The game features one and two player options, assorted playfields and racetracks, time and lap options, handicap options, and save high score feature, and autoplay mode and a demo mode. 48K memory is required.

Superfrogs Funspeller consists of six education games for one or two players. Included on the diskette are fifteen 50-word sets in the following subjects: U.S. States, U.S. Capitols, U.S. Nicknames, Animals, Astronomy, Calendar, Computer, Countries, Elements, Foods, Hand Tools, Boys’ Names, Girls’ Names, Sports, Vocations. In addition, up to 40 of your own 20-word sets can be incorporated into the program for spelling practice. The program requires 48K memory.

Tank Math is another educational program which builds addition, subtraction, multiplication, and division skills and helps teach multiplication and division tables as well as Roman numerals. 12 difficulty levels are supported and a timer can be used to encourage speedy problem solving. Incorrectly answered problems are worked out on screen step-by-step. Tank Math requires 32K memory.

Track Stack 2.0 bills itself as a “user-friendly utility” which lets you transfer up to 15 non-protected machine language programs to the Track Stack disk. Track Stack then lets you load these programs at the touch of a key. Each program on the Track Stack disk can be identified with a 20-character name. A “proportional timer” gives estimated loading times for each program. Track Stack is not copy-protected so as to allow transfer of the utility to your other diskettes. The utility requires 48K memory.

For more information on these products, contact: UltraBasic, Inc., 10 East 10th St., Bloomsburg, PA 17815.

Winter Challenge

The biggest challenge about Thunder Mountain’s Winter Challenge game is getting the company to release program for the 8-bit Atari. The company originally announced that it would be releasing an 8-bit version nearly a year ago, but soon after that the 8-bit release was cancelled. This month, out of the blue, I received the 800/XL/XE version and the program is now officially released!

Winter Challenge features five winter events: Ski Jump, Downhill, Bobsled, Giant Slalom and Biathlon. One to six players can compete, each representing a nation of his choice, The retails for $14.95.

Although I had feared I would find a sloppy, rushed 8-bit version (perhaps half-completed), a quick look at the program reveals some excellent graphics, and animation, superb music and sound effects and a high level of playability. I will be writing a thorough evaluation of the 8-bit version in an upcoming issue. For more information about Winter Challenge, write to: Thunder Mountain, PO Box 1167, Northbrook, IL 60065-1167.

Reader Mail

Dear Jeff:

This is a comment on the letter from Peter Shefsky of the Packerland Atari Computer Society which you printed in your April 1989 column. Mr. Shefsky complains, with understandable irritation, of “a constant request from communist bloc nations for donations of books, magazines, computers, disk drives, software, etc. They apparently believe that the United States is the “Land of Plenty” and we have warehouses full of these items just waiting for shipment.”

For reasons of price and Atari’s enterprising marketing, the little 8-bit Ataris are very, very big in Eastern Europe. A 1988 poll by the Polish magazine Komputer found approximately 200,000 800/XL/XE users there (as against one-third the number of 8-bit Commodores, about 15,000 ST’s, 1,000 Amigas and a negligible number of PC compatibles in private hands). A new 65XE with a tape drive costs about 250,000 zlotys in Poland, or six months “average wages”: direct wage comparisons are misleading (more on this in a moment), but if you think in terms of a Mega ST4 and hard disk at U.S. prices you won’t be far wrong, So these are some very dedicated Atarians! There are a lot of them out there, and we’re going to be hearing more from them in the future. Let’s try to understand the problems they face, and what some of them don’t understand about us.

To someone who doesn’t know our cost of housing, medical care, education, insurance, etc., the U.S. does seem like the “Land of Plenty:” This is what I meant about direct wage comparisons being misleading, and misconceptions are reinforced by emigres and Western tourists flashing bankrolls of precious hard currency. Communist news reporting focuses on economic and social problems in the US, and it is common for people there to believe the opposite of what they’re told. An impression does exist (not universally, but it’s widespread) that anyone who wants to here, can and does have a split-level ranch house, swimming pool, two or three new cars, etc.

Another source of confusion is the difference in economic system. Communist block nations practice what is actually a form of “state capitalism”: the main sectors of economic and social life are controlled by a vast corporate conglomerate which calls itself the state. Think about the U.S. run by AT&T, Exxon or IBM (I won’t mention Atari) and you’ll get a pretty accurate picture—sudden disappearance in the upper leadership and lack of communication with citizen-consumers are easy to understand, and there are other parallels, Well, an Eastern block Atari would be a state enterprise, and its official, state-sanctioned user groups would probably offer state-financed discounts and freebies to politically interesting foreigners. Ridiculous, no? But people aren’t born knowing things don’t work like that here. Some of them need to be told.

What would I suggest? Answer serious-sounding but misguided requests with a simple form letter explaining the true situation—that your users group is voluntary association not “sponsored” by Atari and chronically strapped for funds—and suggesting an exchange of public domain software. Because commercial software publishers don’t distribute in Eastern Europe, there are lots of homebrew programs circulating. Translation/adaption is a good exercise in international relations and fortunately for us, English is a popular second language. More 8-bit software is what it’s all about, here and there; unusual and interesting friends and even vacations are further possibilities. Save political discussion until you know who you’re talking to and what they’re interested in. Send person correspondence on disk with the software you’re swapping: this saves postage, and so does archiving. I would also suggest that special consideration be shown to anyone with a marked interest in word processing and desktop publishing. The affordable personal microcomputer is a truly revolutionary labor-saving device, and a word to the wise is sufficient.

David Lefly,
Chicago, Illinois

Thank you for an intelligent, thought-provoking letter that provides good advice for users groups in the United States that are bombarded with foreign donation-requests. The topic of overseas 8-bit Atari owners is particularly significant because of the amazing success of the 8-bit overseas relative to other personal computers. In fact, many feel that Atari has been neglecting the U.S. market for its ST machines because the company feels that its sales and market leadership potential is far greater outside of the United States.

There are many advantages in establishing contacts with Atari users groups overseas, not one of which is access to new software, I’ve seen some wonderful 8-bit software from Europe and elsewhere, many with definite commercial potential. Where computers and hardware are expensive and costly to ship overseas, software (commercial or public domain) is quite reasonable and foreign users groups will often be more than willing to send some of their own programs in return. I know of many groups in the United States that have swapped software programs for some excellent, or at least interesting, software from overseas.

A word of warning to those U.S. users groups that do donate hardware products to overseas users groups: it is common, particularly in communist nations, for such hardware to be confiscated by a government agency before ever reaching the addressee. Even an 8-bit Atari 800 is considered state of the art in many of these countries (and there are export restrictions in the U.S. on some 16/32-bit personal computers). So if you are going to help out these overseas groups, at least make sure that your shipments are reaching their destination before making further donations.

Dear Jeff:

I enjoyed your article in the June 1989 Computer Shopper. I use my 130XE at home for mailing lists, letters and several other applications. I have two (2) Indus disk drives, a Panasonic color monitor and a Panasonic 1080i printer. A modem is next on my list for acquisition.

I am encouraged to see that you are trying to orchestrate the re-release of discontinued 8-bit software. From what I hear at my local users group, there seems to be a continuing demand for PaperClip, Synfile, BGRAPH, Syncalc and similar applications. There also seems to bea real need for a good commercial-quality bookkeeping system (there are several in the public domain, but the documentation leaves something to be desired). Keep up the good work.

Robert D. Shutts
Joliet, Minois

I have received a number of overwhelmingly supportive letters for the idea of bringing back some popular 8-bit titles, and will be discussing this with some manufacturers that have stopped distributing 8-bit software. Meanwhile, I am very much interested in hearing additional suggestions from readers. We’ve already printed an exciting suggestion for developing a user-owned Atari 8-bit cooperative, which has generated substantial interest from readers, and there are undoubtedly many more great ideas out there for reviving 8-bit software. Here’s another:

Dear Jeff:

I like your idea of re-introducing “dead” titles. If we are going to keep the 8-bits useful, new owners will have to be provided with reasonable applications.

I would like to think that Synapse’s Synfile and Syncalc, along with Batteries Include’s PaperClip and B-Graph, would do the job. Might throw in Homepak and Antic’s Sherlock 1050 as well.

Wouldn’t it be nice if these programs could be offered (with simplified docs on the disk) for downloading via a BBS? It would seem to me that the copyright owners would have nothing to lose—there would be no development, marketing, or distribution costs—all fees generated would be pure “gravy.” They might be surprised at how much rolled in (at, say, $25 a crack)! Get AtariWriter Plus and Print Shop too, and the board’s lines would stay busy. There should be a way to quickly check and bill a credit card number prior to starting the download.

I have a pretty good Atari software library, but I’d still jump at a chance to get a copy of Data Perfect or Letter Perfect.

Good luck! I think that the Atari community would support your plan, and with a whoop of joy!

Bill E. Barry
Tampa, Florida

We wouldn’t even necessarily have to limit the software availability to BBS’s. A small company, or designated users group, could be assigned the right to distribute the cancelled 8-bit titles of a software manufacturer. The company or group could then sell the software manufacturer. The company or group could then sell the software (and perhaps on-disk documentation) for an amount that would include a royalty for the original manufacturer or copyright owner, distribution and production costs, and a reasonable profit for the firm or group.

Next Month

I’ve been receiving a large number of letters from new Atari computer owners: those who have purchased an XE game machine and want to add a disk drive to utilize 8-bit software; those who have purchased an 8-bit system from previous owners; and those who have purchased brand new Atari 65XE’s or 130XE’s. We’ll read a few letters from the newest members of the 8-bit Atari community and discuss where they can best find information, assistance and software to build their collections. We’ll also look at new products and users group newsletters.

Readers’ questions, comments and contributions are welcome. Address all correspondence to: Jeff Brenner “Applying The Atari, 9/89” c/o Computer Shopper PO Box F, Titusville, FL 32781-9990.

COMPUTER SHOPPER / OCTOBER 1989 / PAGE 672 

Applying The Atari

by Jeff Brenner

This month we’ll answer reader mail and review some excellent user’s group newsletters. Our planned reviews of new software products will be published in next month’s column.

Reader Mail

Dear Jeff:

I am an avid Atari 8-bit user. I am getting very discouraged with the lack of new software. I’d like to keep my 130XE as long as possible. The ST has emulators that allow it to run IBM and Mac software. I would think that someone would be developing an Apple IIe/c or Commodore 64/128 emulator for the comparable 8-bit machines. The market potential for such emulators would be very great. Also, the Atari 8-bit needs an easy to use hand scanner that saves graphics in one of the standard Atari formats such as MicroIllustrator or Micro-Painter. Again, I think the sales potential for such a device would be great.

Nelson Pollack
Columbia, Maryland

While the concept of an Apple or Commodore emulator for the 8-bit Ataris is undoubtedly appealing, the idea is not as feasible as it seems. While the 8-bit 6502 microprocessors at the heart of the machines are compatible, this is where the similarity ends, from a software point of view. Most of the emulators designed for the Atari ST are actually complex programs that analyze each line of incoming code (from, say, an IBM compatible program) and translate the code into an ST compatible instruction that will achieve the same result. The ST’s microprocessor, therefore, does not “run” the IBM program execution. Since program interpretation is a step away from the actual microprocessor, execution speed is greatly reduced, and this has been one of the biggest problems with using a software-based emulator. Since the ST’s processing speed is very fast to begin with, many emulated programs are still quite usable. The fact that the microprocessors are compatible among the 8-bit machines is of little help since memory locations, operating systems, interrupt routines, data handling, and graphics and sound functions are very different. Incorporating all of these components into a hardware/software emulator would likely cost more than the machines they were intended to emulate.

Regarding scanners for the 8-bit Ataris, there have been several projects published in the past about adapting your computer printer for scanning. I’ll discuss this further in next month’s column.

Dear Jeff:

I’ve recently become aware of the fact that my cable company offers “X * Press.” Would you or any of your readers know if this can be accessed through my130XE? If not, would it be possible that someone could write the proper software for an 8-bit to use it? I guess you would also have to adapt the 8-bit to the cable coming out of the “X * Press” receiver. It seems like such a waste to be missing out on all that information, sports, etc. Keep up the great work in the “Shopper.” You pack a lot of info in the space allotted. And please list my address as I’d love to hear from anyone on this matter.

Douglas W. Melloh
Hamilton, Ohio

I am not familiar with the details of the “X * Press” service, but I suggest that you contact your cable company about using the service with your 130XE, if you haven’t already done so. If the system is only graphics-based, you will definitely need software to receive the service. If text-only service is available, you should be able to use your 130XE and a standard interface, along with any cable interfaces that your cable company may supply. Anyone familiar with or using the “X * Press” service is invited to write in and tell us about it. Douglas can be written to at: 439 South Second St., Hamilton, OH 45011.

Dear Jeff:

Several years ago I bought an AT clone and pretty much stopped using my Atari 800. I mostly use my PC for work, but lately I have need of a computer at home. I still have my old Atari system I could use if I could somehow transfer files back and forth between my AT and Atari without the bother of modem transfer. Do you or your readers know of a disk drive or hardware that I could purchase for either computer that would allow the reading/writing of the other format? Needless to say, I want to keep this inexpensive or I would just buy a cheap clone for my home.

Alan J. Anderson
APO San Francisco, CA

Modem transfers may seem like a bother but are probably the most inexpensive way to transfer your files. If your AT clone is in the same room as your Atari, you can interface the two directly via the modem ports (with a null cable) without the bother of going over the phone lines. Otherwise, you could store your AT files on a local bulletin board with storage abilities, and then retrieve it later with your 800 (or vice versa). This would allow your bulletin board to serve as a common “storage device” for both of your computers. Readers with other inexpensive proposals are invited to write in and share them.

Dear Jeff:

The other day I dug out my old Atari 800 to recapture some memories that I stored on a calendar program many years ago (when the 800 series first introduced the disk drive). Much to my despair, I seem to have misplaced one of the power supplies (9-volt transformer) that powers either the keyboard or the disk drive. I tried a generic unit with several plugs and tried reversing polarity on each, but no luck. Can you help me? Are there sources for this old hardware? Is there another way to get power to both the keyboard and the drive? Help!

Jerry C. Hren
Tampa, Florida

Atari computers and peripherals require adapters that provide nine to 12 volts AC. Any power supply with reversible polarity supplies DC current which will not work with your computer. You may be able to locate an appropriate AC power supply at an electronics hobbyist shop, or you can contact American Techna-Vision (15338 Inverness St., San Leanardo, Ca 94579). This company carries the original transformers for 8-bit computers and peripherals.

Newsletter Update

The June 1989 issue of The ACORN Kernel, the newsletter of the Atari Computer Owners of Rochester New York (P.O. Box 23676, Rochester, NY 14692), contains articles on Atari BASIC and 8-bit software. ACORN reports in this issue that SubLogic has informed them that it has “discontinued all of our Atari line products due to an incompatibility between SubLogic software and the XF551 disk drive.”

The Atari Interface Magazine (Unicorn Publications, 3487 Braeburn Circle, Ann Arbor, MI 48108) serves as newsletter for the Cascades Atari Computer Enthusiasts (CACE), the Capitol Hill Atari Owners Society (CHAOS), the Genesee Atari Group, The Greater Kalamzoo Atari Users Group (GKAUG), the Grand Rapids Atari Systems Supporters (GRASS), the Michigan Atari Computer Enthusiasts (MACE), Tinker ACE of Oklahoma (TACE), the Tri-City Atari Group, and the Washtenaw Atari Users Group. The May 1989 issue contains Atari news and information, articles on computers and education and desktop publishing on the 130XE, and a type-in calculator program.

The May 1989 issue of the LCACE News Journal, the newsletter of the Lake County Atari Computer Enthusiasts (P.O. Box 8788, Waukegan, IL 60079-8788), contains articles on 8-bit public domain software, Atari news, and the Spring 89 Comdex.

The May 1989 issue of the PACUS Report, the newsletter of the Packerland Atari Computer Users Society ( 2714 S. Eleventh PIL, Sheboygan, WI 53081), contains Atari news and program reviews.

Phoenix is the publication of the Toronto Atari Federation (5334 Yonge St., Suite 1527, Willowdale, Ontario, Canada M2N 6M2.) The May 1989 issue contains Atari news and other articles.

Readers’ questions, comments and contributions are welcome. Address all correspondence to: Jeff Brenner, “Applying The Atari 10/89,” c/o Computer Shopper, P.O. Box F, Titusville, FL 32781-9990