›()()()()()()()()()()()()()()()()()()()›› (This is an old article, full of info›and well worth reprinting today. Ye Ol›Editor)›› TURBO-BASIC› THE FIRST REPORT› By Ken Ward› The Norwich Users›Group›Norwich, England›Febuary, 1987››The biggest problem we've had in the›past was with alternative BASIC's for›the Atari has been the cost. OSS›produced an excellent range of›language cartridges, but they have›been very expensive. Now, Turbo-BASIC›has changed all that. It's a low›cost, (found in any Users Cub Library,›Editor) extended BASIC which not only›offers a fantastic range of new›commands, but also speeds up all your›existing Atari BASIC programs.››When we offered it as part of the›"World of Atari" collection, we had›only had time for a quick look at it.›Here is a our first report.››TESTING ITS SPEED››Turbo-BASIC flies! It runs all Atari›BASIC programs 3 to 5 times faster!›To try to assess the speed difference,›we ran a simple test program:›› 10 FOR X=0 TO 2:POKE›18+X,0:NEXT X› 20 FOR X=1 TO 1000› 30 KEN=1256*22/7› 40 NEXT X› 50 7 PK(18)››This program was tried in both Atari›and Turbo BASICs, with different line›30's. In most cases, Turbo BASIC was›at least 3 times faster. We also›tagged the routine to the front of a›lengthy program, and a GOSUB to the›end of the program as line 30. Turbo›BASIC came out of this test an›incredible 11 times faster!!››In fact, its speed seems to be the›main problem you'll have running Atari›BASIC programs in Turbo BASIC! In›some programs, you will have to add›delay loops to slow it down!››PROBLEMS WITH BAD PROGRAMMING››I have come across one program that›was a bit of trouble, but that was due›to poor programming (which was›surprising, because it was an›"A.N.A.L.O.G." program).››In the initializing section of the›program there was the usual modifying›of the display list by using:›› ›DLIST=PEEK(560)+256*PEEK(561)››and then at the end of the init he had›added another mod. By POKEing›directly into where the display list›would have been in Atari BASIC instead›of using the DLIST pointer!››The other problem was more intriguing.› It centered around aloop like this:›› 10 POKE 764,255:POKE›53279,10› 20 IF PEEK(764)=20 THEN 100› 30 IF PEEK(764)=20 THEN 200› 40 IF PEEK(53279)=5 THEN›300› 50 IF PEEK(53279)=4 THEN›400› 60 GOTO 10››It worked OK in Atari BASIC but in›Turbo it popped straight out of the›loops at line 40, even though the›SELECT key had not been touched! We›found that adding a short delay loop›at line 15 allowed the loop to work›correctly, as did POKEing 53279 with›8in line 10, which is the correct›value to clear the CONSOLE keys.››TURBO BASIC MEMORY MAP››Turbo BASIc is a full 16K of code, yet›it gives you another 1.5K of free›memory over Atari BASIC!››The bulk of Turbo BASIc is hidden›under the Operating System ROM at the›top of memory. The VBLANK routine has›been modified to flip between the›twinned memory blocks, allowing access›to both areas.››The rest of Turbo BASIc sits in the›block from 8320($2080) to›13864($9018). This is in the area›normally used by DOS(and DUP when›loaded), which explains why after›calling DOS you cannot go back to›Turbo BASIC...which in turn explains›why DOS commands have been added to›the language.››Note that because of the›re-arrangement of memory, the area›occupied by the screen and display›list at the top, and the variable›tables, etc. at the bottom, are in new›positions. Providing you use the›pointers to find their new locations›you'll be OK.››FORMATTING DISKS››The only useful DOS command that is›missing from Turbo BASIC is FORMAT.›However, if you do get stuck and need›to format another disk, the XIO›commands still work.››XIO 254,#1,0,0,"D:" formats in the›default drive format. If you have a›1050 and you need to format in single›density, use 253.››CHANGING VARIABLE NAMES››The major problem I've found with my›own programs isthat I have been using›variable names that are commands in›Turbo BASIC! Names like MOVE, TEXT,›DIR, MOD, DEC, and HEX$ are among my›favorites.! And, of course, it means›I've had to rename them to stop Turbo›BASIC erroring out.››Going through the programs modifying›every occurrance of a name can be time›consuming if there is a lot of them.›One way out is to use a word processor›in "Search and Replace" mode, but that›means LISTing the program out and›booting in the word processor. Again,›time consuming. In the end, it›prompted me to write my first routine›in Turbo BASIC.››Type in the program and LIST it to›disk. You then load the program you›need to modify, ENTER the Renamer›routine, and run it with G.32000.››HOW IT WORKS››In line 32070 we find the length of›the variable table and dimension KEN$›accordingly. The next two lines fill›KEN$ with complete list of variables.››The end of a variable is marked by›being an inverse character, so in the›next loo, which prints all the›variables onto the screen, we check›for an inverse character at line›32120, and convert it before printing›it. If there are a lot of variables,›use CONTROL-1 to freeze/unfreeze the›screen.››You are then asked for the variable›you want to rename. Include the '('›if it's an array, and the '$' if it's›a string.››By printing the name you've typed in›and positioning the cursor before›getting an input, saves you the bother›of typing in the complete name. Just›modify one or two letters and hit›RETURN.››A check is then made to make sure the›names are the same length. (This›subroutine only modifies the›particular name - it doens't re-write›the complete variable table).››The last character of our first input›is then inversed before using the›INSTR command to find its position in›the variable table. If X= then you've›tried to modify a variable that›doesn't exist!››If all is well, the last character of›the new name is inversed before using›the MOVE command to move the new name›into the table area.››And, that's all there is to it. Don't›forget the programs you modify must be›SAVEd files. LISTed files won't put›the names into the variable table in›the first place - the lines will just›error out.››We haven't bothered with TYPO codes on›this one - the easiest way to check it›is to run it by itself(after you've›LISTed out a copy to disk, of›course!). After you've run the›program, LIST it on the screen to›check the changed names.››32000 REM ************************›32010 REM * VARIABLE RENAMER FOR *›32020 REM * USE WITH TURBO BASIC *›32030 REM * KEN WARD 8TH JAN 87 *›32040 REM * NORWICH USERS GROUP *›32050 REM ************************›32060 REM›32070 CLR :CLS›:N=DPEEK(132)-DPEEK(130):DIM›KEN$(N),VAR$(30),NXT$(30)›32080 KEN$=" ":KEN$(N)="›":KEN$(2)=KEN$›32090 MOVE DPEEK(130),ADR(KEN$),N›32100 POSITION 2,0›32110 FOR X=1 TO LEN(KEN$)›32120 Y=ASC(KEN$(X,X)):IF Y>127 THEN›Y=7-128:? CHR$(Y):GOTO 32140›32130 ? CHR$(Y);›32140 NEXT X›32150 ? "What is the name of the›variable you":? "want to rename›";:INPUT VAR$›32160 ? "Please type in new name -›REMEMBER -":? "name must be same›length!":? " ";VAR$;:POSITION›2,PEEK(84)›32170 INPUT NXT$:IF›LEN(NXT$)<>LEN(VAR$) THEN ? "<-":GOTO›32160›32180›Y=ASC(VAR$(LEN(VAR$)))+128:VAR$(LEN(VA›$))=CHR$(Y)›32190 X=INSTR(KEN$,VAR$):IF X=0 THEN ?›"<-":GOTO 32150›32200›Y=ASC(NXT$(LEN(NXT$)))+128:NXT$(LEN(NX›$))=CHR$(Y)›32210 MOVE›ADR(NXT$),DPEEK(130)+X-1,LEN(NXT$)›› ......****......*****.......****.....›› ›