💾 Archived View for gemini.spam.works › mirrors › textfiles › magazines › ZNET › 0116.txt captured on 2022-06-12 at 15:32:29.
-=-=-=-=-=-=-
ZMAGAZINE WEEKLY ONLINE MAGAZINE Issue #118 Wednesday, August 10, 1988 PUBLISHER: Ron Kovacs American Publishing Enterprises, Inc. Post Office Box 74 Middlesex, New Jersey 08846 MANAGING EDITOR: R. F. Mariano ZMAG EDITOR: John Deegan REGIONAL HEADQUARTERS --------------------- NORTH SOUTH MIDWEST WEST (201) 343-1426 (904) 786-4176 (216) 784-0574 (916) 962-2566 ========================================================================= AVAILABLE EXCLUSIVELY ON: * COMPUSERVE * GENIE * DELPHI * THE SOURCE * ========================================================================= |TABLE OF CONTENTS| <*> Publishers Desk <*> Editors Desk <*> Whats New For Express! Pro <*> Basic Programming FINAL CHAPTER <*> Goin' South <*> ZMAG Extra <*> Rumors Revisited ====================================== PUBLISHERS DESK Ron Kovacs ====================================== I have been receiving Email lately requesting information on the return of the Syndicate BBS. I am presently retired from SysOp status until the fall. At that time I will leave details in ZMag and ST-Report on the re- opening of the BBS. We will NOT be running Carina II. (Just had to put that in) opppsss. The DOG DAYS are here and the community at-large is quiet. Except for the continued ramblings generated by past issues of ZMag, all seems quiet. On the ST front though, there is much rumbling going on. For the latest news and reviews on the ST side, read ST-Report Magazine. John Deegan, the new editor of this publication, has been doing a fine job and I hope you all find the continued support of John interesting. Next week in ZMagazine: The debut of our Official User Group Listing. Stay tuned for more details next week. ====================================== EDITORS DESK John Deegan ====================================== I have included another Carina II response. It was sent to Ron Kovacs via the Launch Pad BBS. (Zmag Hdqts North)... He has commented on parts of the commentary and I have also added my 2 cents after reading it. I want to stress here that we are closing this matter with this issue. If you have further commentary on the Carina II review/commentary, Please refrain from sending them in. On the ConmpuServe Pay Service, the following was captured and added shortly before publication: SPECIAL SUPRA MODEM OFFER!!! CompuServe's Atari Forums have made arrangements with Paramount Products Inc. to offer the members of our forums the chance to upgrade your system to 2400 baud service at a very special price. For a limited time, CompuServe subscribers may purchase the SUPRA CORP. 2400 baud Hayes- compatible modem for the very **LOW** price. These are brand new, not reconditioned units, with the full SUPRA CORP. warranty. The SUPRA MODEM uses the Hayes Smartmodem 'AT' command set and operates at 300-1200-2400 baud. It's an outboard unit (not an internal plug-in card) allowing ease of transfer to other computers. Connection is thru the standard RS-232 interface. (Just plug it into the back of your ATARI ST). To take advantage of this special offer, call CompuServes Atari 8/16 Forum and read the file in the News and Reviews sections. If you've been accessing CompuServe at 1200 baud, this is a great way to lower your total online bill since CIS does *NOT* charge a premium for 2400 baud access. (You can get the same amount of information or download the same amount of programs in approximately 1/2 the time as 1200 baud users!) This modem will PAY FOR ITSELF in just a few sessions. This is a worthwhile deal to jump on! So call CIS today!! Now, the Carina II Reader Response: by George Stevens I have read with interest the articles in Zmag 112, 114, 115, 116; regarding Carina II software, and some of the name calling that has taken place. Let me interrupt here by saying I have yet to purchase a BBS, or associate with one other than as a typical caller. I have more or less considered the idea, usually bagging the whole idea because of the expense and trouble involved. In any event, I was very interested in Ron Kovacs editorial in Zmag 112, since I call two Carina II BBS systems in my area. What concerned me the most was the troubles he related about the software, and figured -Hey ... he must know what he is talking about ... -. In retrospect, I find it was not the case. Ron admitted in Zmag 115 that he did nothing to rememdy his problems, and stated it cannot be the equipment, it MUST be the software. In ZMAG 112, he asked any others with the same problems to step forward and let the world know; we are still waiting for just one! Above all this, it seems Ron and the Zmag staff have taken to personal battles with those that did voice an opinion opposite the one Ron presented. Frankly I don't see how you deserve a reply, you still have not proven your point, and reflect not only unethical behavior, but quite a bit of immaturity. Well now you can attack me if you like, I expect you will since you have everyone else who has replied on this topic. From the user side, Carina II is a unique and highly functional Bulletin Board System, not only is it reliable, but fun to use. I can't see why Ron had the problems he had, and it is a shame he had them, but I disagree STRONGLY with his motives. George Stevens 1241 Palatine Rd, Arlington Heights IL. Reply from Ron Kovacs I want to thank you for taking the time in replying. I can see that we have another person from the Carina Defense Team at large. Please RE-READ the statements made by myself and those of the gentlemen you noted in your commentary. I removed the names to save another attack from them. I do have the right to respond to the critics just as much as they do. You are obviously in agreement with the views presented by them. You are entitled to do so. You do state you DO NOT run a BBS system. You are wise in your comments and we have atleast shed a little light on the matter. There are countless dollars invested in BBS Systems. The equipment, and software and the many hours add up to much! I have atleast discussed the problems that I encountered and reported. Though not a popular discussion with some readers, I have stood by it and will not change my original comments until proven otherwise. You are the user and have presented your facts. True or false they are here for all to read. Is this what you wanted? Editors Note: We have received 7 replies to the Jim Stiles article printed two weeks ago. We have been asked NOT to use the source name in the article and until we have the permission to use the names, we will NOT publish these comments. I also feel that we have discussed the issue at great length and will close the subject effective with this issue. Unless Mr. Kovacs decides otherwise, Carina II's future is in the public's hands. Pro or con, the argument will never reach a conclusive finding. And finally, to Mr. Stevens, I made the remarks in the most recent releases of ZMagazine. Ron Kovacs DID NOT edit or make the editorial commentary. Thank you again for submitting your comments. There you have it. Now lets discuss something else??? ====================================== Whats New For EXPRESS! Professional ====================================== by John Deegan In traveling through all of the Online Services, I noticed a few files that might be of interest to Express Professional SysOps. Just incase you may not have heard. In the Atari8 SIG on CIS, and GEnie's download section, there are NEW files uploaded for Express SysOps. I have them listed below. Please note that I have used the CompuServe filenames. CHESS.CMD A BBS game. ATARI.CMD File converter. Atascii->Ascii Ascii->Atascii DUMP.CMD Similiar to SpartaDos DUMP command FORMAT.CMD Formatter utility HAPPY.CMD Happy users initializer. PRTLOG.CMD Utility QSCAN.CMD Utility TOP10.CMD Utility VERSN.CMD Utility ====================================== LEARNING TO PROGRAM IN ATARI BASIC -FINAL INSTALLMENT- ====================================== LESSON 10 Version 1.06 (C) COPYRIGHT 1988 by Jackson Beebe [ED. This is the final installment of the Basic Programming series. All of the installments presented in past issues of ZMagazine were written and edited by Jackson Beebe. Your are encouraged to send your comments to Jackson at the address at the bottom of this column. Next week a contents page will be included. This will list all the topics covered in this series. Zmag presented all the articles between Jan 1988 and this issue. DIRECTORY from BASIC: Have you ever been working in BASIC, and wished you could see a directory of files on your disk without exiting BASIC to DOS, getting a directory, and re-entering BASIC? (Did I really need to ask?) Often I work in TurboBASIC (PD), just for this feature. Well, today I want to share a great -one line hack- from Kenny Ksajikian of Van Nuys, CA. I saw this in ANTIC magazine Volume 3 Number 7, November 1984, in the letters section, and hope that by giving credit to author and source, I may pass it along your way. This is a little program you put on disk under the name DIR. The program has no line numbers, and is used in Immediate mode in BASIC by ENTERing it into RAM with the command ENTER -D:DIR-. It will give you a directory, but will not stick around, nor graft onto your program source code already in RAM. When it's done listing files, it gives an Error 136, End-of-file (ignore this error) and returns you to BASIC. You may write this file onto disk in two ways. You may copy it using DOS, from the screen editor to disk, by: 1) Issuing a command to copy from the screen editor E:,to D:DIR and <RETURN>. This opens a file. 2) Type in the program. 3) Press CONTROL+3 which closes the file, and writes it to disk. A second method is to write the file in a text editor/word processor and use an ASCII save under the name D:DIR. The editor TEDIT normally does an ASCII save, but with AtariWriter Plus, you must go to the main menu and push CONTROL+S for an ASCII save. (An ASCII save eliminates the header of format and punctuation codes in a word processor file, and writes only the text.) Here's the program: CLR:DIM N$(15):CLOSE #5:OPEN #5,6,0,-D:*.*-:FOR I=1 TO 128:INPUT #5,N$:? N$:NEXT I:CLOSE #5 <RETURN> I added the CLR command at the beginning of Kenny's program, to avoid an Error 9 when using it over and over, caused by re-dimensioning N$. The CLR command undimensions all strings. Using DOS, put a copy of this on all your BASIC disks. Use this by issuing the command: ENTER -D:DIR- in Immediate mode in BASIC. Very handy. A big THANK YOU to Kenny for this tip! SOUND Statement: Okay, on to sound from your Atari. Atari 8 bit machines are rich in sound, having 4 built-in voices, numbered 0-3. Each of these may be turned on or off independently, or in combination with any others. Once a voice is turned on, it remains on until you turn it off manually, or the program encounters an END statement. The syntax of the SOUND statement is as follows: 10 SOUND N,F,D,V N = voice Number (0-3) F = Frequency (0-255) D = Distortion (0-14) even #'s V = Volume (0-15)total < 33 Voice Number may be an integer from 0 to 3. Frequency may be an integer between 0 and 255. Zero sounds a high note and 255, a low note. The formula is: Actual Frequency = 31960 divided by (our number (0-255) plus one.) Distortion works with even numbers only. 10 and 14 sound 'pure' tones. Experiment until you get a sound you like. Volume may be 0 to 15. 15 = maximum volume, and 0 = Off. You should keep the total volume of all voices added together, under 33, to avoid speaker distortion. If you wish to turn on two voices, it requires two SOUND statements (or a multi-statement line) as: 10 REM ** SOUND DEMO ** 20 REM 30 SOUND 0,126,10,10 40 SOUND 1,81,14,10 50 FOR X = 1 to 150:NEXT X 60 END This program turns on two voices, counts from 1 to 150, then turns both voices off. Here's what happens without an END statement in your program: Type this and RUN it. 10 SOUND 1,100,4,10 Note this continues to sound. How do you turn off a voice within a program? Well, like this: 20 SOUND 1,0,0,0 Issuing the SOUND statement with the correct voice #, and a zero for Volume, turns that voice off. It's standard practice to put zeros for all parameters, freq, distortion and volume, for quick recognition of an OFF statement. RUN, NEW and END will also shut SOUND off. Okay, let's do a few things. Let's play Yankee Doodle. We'll use one voice, and mess around a bit. We will need a little delay loop to slow BASIC down a little, and we may as well put the loop in a subroutine, and call it throughout the program. To facilitate hacking around with this without having to type each line over and over again, let's put the Distortion, Volume, and even the Frequency into variables in the SOUND statements,and initialize them up front in the program. We can easily alter them when experimenting, by changing these initialization statements. 10 REM *** SOUND DEMO *** 20 REM 30 REM ** Initialize ** 40 DIST=14:VOL=14:DELAY=100 50 FREQ1=63:FREQ2=57:FREQ3=50 60 REM 70 REM ** SOUND ** 80 SOUND 1,FREQ1,DIST,VOL 90 GOSUB 1000 100 SOUND 1,FREQ1,DIST,VOL 110 GOSUB 1000 120 SOUND 1,FREQ2,DIST,VOL 130 GOSUB 1000 140 SOUND 1,FREQ3,DIST,VOL 150 GOSUB 1000 160 SOUND 1,FREQ1,DIST,VOL 170 GOSUB 1000 180 SOUND 1,FREQ3,DIST,VOL 190 GOSUB 1000 200 SOUND 1,FREQ2,DIST,VOL 210 GOSUB 1000 220 END 230 REM 990 REM *** DELAY SUB *** 1000 FOR X=1 TO DELAY:NEXT X 1010 SOUND 1,0,0,0 1020 RETURN Experiment by changing the values of Distortion, Volume, Delay and Frequency in lines 40 and 50. Take out line 1010, and see the effect of NOT shutting off the sound between steps. ======== Sound Effects ======== We can make some neat sounds, by turning on a voice, then changing it's pitch, distortion, and/or frequency, up or down etc. FOR-NEXT loops are dandy for this. Here's a short demo of a lazer gun type sound: 10 REM ** EFFECT1.BAS ** 20 REM ** LAZER ** 30 FOR X=20 TO 200 STEP 4 40 SOUND 1,X,10,12 50 NEXT X 60 END Here's a demo of how the Distortions sound: 10 REM ** EFFECT2.BAS ** 20 REM ** Distortion Demo ** 30 REM 40 FOR DIST=0 TO 14 STEP 2 50 SOUND 1,100,DIST,10 60 ? -DISTORTION -;DIST 70 FOR X=1 TO 300:NEXT X 80 NEXT DIST 90 END Here's one I call a Plink: 10 FOR PLINK =16 TO 0 STEP -1 20 SOUND 0,30,10,PLINK 30 NEXT PLINK 40 END Or a tone: 10 FOR TONE = 20 TO 0 STEP -1 20 SOUND 0,53,14,TONE 30 NEXT TONE 40 END Finally here's a rising and falling siren: 10 REM ** EFFECT3.BAS ** 20 REM ** SIREN ** 30 FOR REPEAT=1 TO 2 40 REM ** RISE ** 60 FOR FREQ=255 TO 5 STEP -1 70 SOUND 1,FREQ,14,10 80 NEXT FREQ 90 REM ** FALL ** 100 FOR FREQ=5 TO 255 STEP 1 110 SOUND 1,FREQ,14,10 120 NEXT FREQ 130 NEXT REPEAT 140 END Poking Sounds: If you have been using your Memory Map very much, you have probably wondered by now, if you can POKE sound values directly into memory. Yes you can. Here are the locations (for you to read up on.) 53760 = Voice 0 Frequency 53761 - Dist / Volume 53762 = Voice 1 Frequency 53763 - Dist /Volume 53764 = Voice 2 Frequency 53766 = Voice 3 Frequency 53767 - Dist / Volume The formula for the value to POKE in the odd numbered location (Distortion and Volume) is: (Distortion * 16) + Volume For example: SOUND 2,121,10,10 is equal to: POKE 53762,121:POKE 53763,170 Well, this is the general idea. Try turning on more than one voice at once. Try one voice rising while one falls. Try different effects at different times with different voices going different directions. Save your favorite sounds for use in programs. There are many good sound demo programs available on Public Domain disks, from magazines by Type-In, or available for D/L on Bulletin Boards Systems (BBS.) Study these to see what makes them tick. Unfortunately, SOUND statements will slow down a program quite a bit. POKEs are faster, but will still have an effect on the speed of a program. SETCOLOR Statement: BASIC has good color control built right in. Options and colors vary with different graphics modes, but we will just cover Graphics Mode 0, BASIC's default mode. The familiar blue screen with white letters. The syntax for the SETCOLOR statement is: 10 SETCOLOR R,H,I R = Register (1,2,4) H = Hue (0-15) L = Intensity (0-14) even #'s These three parameters (in Graphics 0) control the color and intensity of 1 the Letters, Background and Border. The Letters are always the same color as the Background (screen), but may be varied in intensity from black to white. When they are the same intensity as the Background, they disappear. ====== REGISTER ====== This parameter of the SETCOLOR statement determines whether we alter: LETTERS 1 BACKGROUND 2 BORDER 4 ======== HUE ======== This sets the color of the Background or Border. Colors possible are: 0 = Gray 8 = Blue 1 = Gold 9 = Light Blue 2 = Orange 10 = Turquoise 3 = Red-Orange 11 = Green-Blue 4 = Pink 12 = Green 5 = Pink-Purple 13 = Yellow-Green 6 = Purple-Blue 14 = Orange-Green 7 = Dark Blue 15 = Light Orange Note that you can't change the hue in a SETCOLOR 1 statement. Letter color follows Background color. I usually put a zero in the HUE location of a SETCOLOR 1 statement. ====== INTENSITY ======= Intensities are roughly: Dark (0-2) Medium (4-8) Bright (10-14) Only the even numbers have an effect. Let's try some examples. Here's code to produce bright white letters on a black screen with a dark blue border. 10 REM ** White on Blk/Blu ** 20 SETCOLOR 1,0,14 30 SETCOLOR 2,0,0 40 SETCOLOR 4,7,4 50 END Here's white letters on a red-orange background, with a dark blue border. Isn't this fun? 10 REM ** Wht on Red-Or/Dk Bl ** 20 SETCOLOR 1,0,14 30 SETCOLOR 2,3,4 40 SETCOLOR 4,7,2 50 END Poking Color: Once again, you should realize that many of the functions you can accomplish with language statements, as SOUND or SETCOLOR, can be done by directly POKEing memory locations. There are three memory locations that correspond to the SETCOLOR statements. These are: POKE 709 LETTERS (0-14) POKE 710 BACKGROUND (0-238) POKE 712 BORDER (0-238) The relationship to the setcolor statements are: SETCOLOR's POKE first digit 1 709 2 710 4 712 The value to poke into RAM is determined by the formula: (HUE * 16) + INTENSITY For Example: SETCOLOR 1,0,0 = POKE 709,0 SETCOLOR 2,5,6 = POKE 710,86 SETCOLOR 4,12,8 = POKE 712,200 In the last example, 4 stands for Border, so we use POKE 712. Color times 16 plus intensity is (12 * 16) + 8 or 200. Hence POKE 712,200. I prefer using the POKE statements to control color in BASIC. You can always use SETCOLOR to develop a screen, then use a POKE statement in the finished program. SETCOLOR and POKE produce the same result. Of course, you can vary, flash and alter these colors by using a FOR-NEXT loop to alter the values of the SETCOLOR statement during program execution. This is especially nice on title screens. It's easy to change colors in different parts of your program, or from title screen to program, etc. You only need to put a few statements in, and it's done. It allows you to use colors you enjoy. As always, experiment with this, and see what you like. Keep a notebook, as you occasionally find good screen -recipes- by accident. Write them down for future use. JOYSTICK and TRIGGER: We can directly read the joysticks in BASIC, by checking STICK(0), STICK(1), 2, or 3, to determine the direction the stick is being pushed. See chart below. If the stick is resting in the middle, that's a 15. If it's pushed UP for example, it's now a 14. We can have our program fall through a pile of IF-THEN statements, testing for all these possible readings. 14 10 6 \ | / \ | / \ | / \ | / \ / 11 ------- 15 ------- 7 / \ / | \ / | \ / | \ / | \ 9 5 13 The trigger is read by the STRIG(0), or STRIG(1), 2, or 3 etc. If STRIG() is ZERO, the trigger is pressed. If it's 1, it isn't. (That always seemed a bit backwards to me but that's how it works.) * KIDSDRAW.BAS (an ENTER-IN Program) Okay. let's put some of this to work in a BASIC program that demonstrates these concepts. KIDSDRAW.BAS is a goodie I wrote for my own education, as well as to orient my 3 year old daughter to eye-hand coordination on the computer. Let's take a look. Lines 60 and 230, clear the screen, and set screen colors. The next section drew screen boxes using CONT+Q, CONT+E, Z,C,W, in my ORIGINAL program, but here,for ASCII printer purposes, I used dashes. Those control characters won't print out right, and may feed endless sheets of paper, or any number of odd things. You should by all means, be making up screens using these CONTROL characters. Look them up, and try them. One screen will addict you forever! You print BASIC listings then, with G:. All the control characters will print out correctly, and you get condensed print with 137 characters per line, making BASIC listings much more readable. We dimension a string variable, two characters in length at line 70, and bring in a string in line 160. Line 190 tests for a null input, which has a length of zero (less than 1.). If TRUE, it must have been a plain RETURN, so we -default- to a speed of 75, with the SPEED$=-75- statement. Note 75 is in quotes, as it's still a two character string at this point. Line 200 converts any string in SPEED$ to a number. Note that no error checking is done in this program. You could add error checking for the practice. The cursor is positioned in the middle of the screen, and the program falls through a pile of IF-THEN statements, and a SOUND statement, then prints on the screen (that's supposed to be an INVERSE SPACE between the quotes in line 500.) It loops back up to 290 to fall through the stack again. I used line 290 to save some typing at lines 310-380 by only having to type the letters ST for a variable. Try putting STICK(0) in lines 310- 380 and remove line 290. Change line 600 to read GOTO 310. Does it run faster? If the stick is not pushed (15), the program loops, awaiting a stick deflection. When that occurs, X or Y are incremented or decremented, depending on which way the stick was pushed. Note that we specified at line 310, that when STICK(0) = 7 (stick pushed to the right) it adds 1 to X. If it's pushed up and to the left (10), it adds 1 to Y, and subtracts 1 from X. These are directions referenced from the middle of the screen, as specified in line 260. UP (14), adds 1 to Y, DOWN (13), subtracts 1 from Y. LEFT (11), subtracts 1 from X, RIGHT (7), adds 1 to X etc. That's the plain vanilla joystick control. Pushing the trigger is checked for at line 500. If it is not being pressed (1), an inverse blank is printed (black on a white screen), and there's a jump around the -regular blank- print statement of line 510. If the trigger is pushed (0), line 500 is not executed, and the -regular blank- overprints whatever may have been on the screen. Line 540 creates a delay for low numbers, while a 75 gives maximum speed. Try removing line 570 (insert a REM at it's beginning) and see if it runs faster without the zero FOR-NEXT loop. Line 570 reads the memory location 53279 for a 6, which would mean that START is being pressed. (Got that location scope out in your Memory Map?). Line 600 zooms it back up to the top. 10 REM ** KIDSDRAW.BAS ** 20 REM Ver 1.07 6/88 30 REM Jackson Beebe 40 REM 50 REM ** Clear screen /Set color ** 60 ? CHR$(125):POKE 709,14:POKE 710,52:POKE 712,114 70 DIM SPEED$(2) 80 REM 90 REM ** Draw Opening Screen ** 100 ? :? -------------------------------------- 110 ? - KIDSDRAW by Jackson Beebe - 120 ? -------------------------------------- 130 ? - 1 Joystick * FIRE button erases - 140 ? -------------------------------------- 150 POSITION 4,20:? -Press START to erase screen- 160 POSITION 11,12:? -Set SPEED (1-75)-:POSITION 11,13:? -or push RETURN -;:INPUT SPEED$ 170 REM 180 REM ** Default to 75 ** 190 IF LEN(SPEED$)<1 THEN SPEED$=-75- 200 SPEED=VAL(SPEED$) 210 REM 220 REM ** Clear screen/Set color ** 230 ? CHR$(125):POKE 709,0:POKE 710,14:POKE 712,116 240 REM 250 REM ** Middle of Screen ** 260 X=19:Y=11 270 REM 280 REM ** READ STICK(0) assign to ST 290 ST=STICK(0) 300 REM ** Fall thru pile of tests ** 310 IF ST=7 THEN X=X+1 320 IF ST=14 THEN Y=Y-1 330 IF ST=13 THEN Y=Y+1 340 IF ST=6 THEN X=X+1:Y=Y-1 350 IF ST=10 THEN X=X-1:Y=Y-1 360 IF ST=11 THEN X=X-1 370 IF ST=9 THEN X=X-1:Y=Y+1 380 IF ST=5 THEN X=X+1:Y=Y+1 390 IF X>38 THEN X=38 400 IF Y>22 THEN Y=22 410 REM 420 REM ** Handle negative number ** 430 IF X<1 THEN X=1 440 IF Y<1 THEN Y=1 450 REM 460 REM ** Calc SOUND (Trigger-Off)** 470 SOUND 0,(ABS(X-Y)+2)*5,10,12:IF STRIG(0)=0 THEN SOUND 0,0,0,0 480 REM 490 REM ** Draw or Erase ** 500 POKE 752,1:POSITION X,Y:IF STRIG(0)=1 THEN ? - -:GOTO 540 510 ? - - 520 REM 530 REM ** Speed (Delay) Loop ** 540 FOR ZZ=1 TO 75-SPEED:NEXT ZZ:REM SLOWS 550 REM 560 REM ** Check for 'START' ** 570 IF PEEK(53279)=6 THEN 230 580 REM 590 REM ** Loop Back 600 GOTO 290