When I moved from my Commodore VIC-20 to a TRS-80 Color Computer, I spent much time going through the “Getting Started with Color BASIC” and “Getting Started with Extended Color BASIC” manuals that came with it.
If you had the original manual revision, you may have been taught things slightly different from later editions. For instance, clearing the screen. The CLS command can be followed by a number to fill the screen with a color.
But the early edition manual demonstrated this using parenthesis, which I’ve never seen done:
CLS(3)
It works. Try it :)
After a moment of thinking about this, I realized it’s just normal math grouping for numbers, like this:
PRINT 3*(5-1)
The parenthesis make sense there. But they sure look odd if you do this:
PRINT (42)
It works. Try it :)
And whoever wrote the manual was using them for CLS too. But why?
Not too long ago, I learned that the BASIC ROMs had other undocumented syntax. For instance, there is a Syntax for the PRINT command where you give a screen position using the @ symbol:
PRINT @96,"HELLO"
But the BASIC ROMs also look for (but do not require) the @ symbol after keywords LINE@, PAINT@, GET@ and PUT@. But I’ve never seen anyone code:
LINE@(0,0)-(255,191),PSET
It works. Try it :)
I expect there are other oddities in there, as well. One I recently discovered, just by trying it, had to do with device numbers.
Device numbers
I was surprised to find that the original Color BASIC manual did not cover all of the commands available. For example, printer listing with LLIST and PRINT#-2, or opening and reading/writing to/from cassettes. I expect later revisions may have added these, and maybe other, missing commands.
Folks using a printer learned that, while PRINT by itself goes to the screen, doing PRINT#-2 makes the output go to the printer.
#-2 is a device number. When accessing a cassette file, device #-1 is used:
OPEN "O",#-1,"TAPEFILE" PRINT #-1,"THIS GOES TO THE CASSETTE FILE" CLOSE #-1
Disk Extended Color BASIC added disk device numbers, and allowed opening up to ten files at a time using devices #1 to #10.
OPEN "O",#1,"DISKFILE.TXT" PRINT #1,"THIS GOES TO A DISK FILE" CLOSE #1
At some point, I became aware that device #0 was the screen. The use of it was optional, since PRINT by itself assumed screen.
PRINT "THIS GOES TO THE SCREEN" PRINT #0,"SO DOES THIS"
It works. Try it :)
But, it was useful when creating a program that allowed the user to select output to screen or printer.
10 INPUT "OUTPUT TO S)CREEN OR P)RINTER";A$ 20 IF A$="S" THEN DV=0 30 IF A$="P" THEN DV=-2 40 PRINT #DV,"THIS GOES TO SCREEN OR PRINTER"
I recall writing programs that would also allow outputting to a tape or disk file, so if one of those options was chosen, I would make sure to create the output file:
10 INPUT "OUTPUT TO S)CREEN, P)RINTER, T)APE OR D)ISK";A$ 20 IF A$="S" THEN DV=0 30 IF A$="P" THEN DV=-2 40 IF A$="T" THEN DV=-1:OPEN "O",#-1,"TAPEFILE" 50 IF A$="D" THEN DV=1:OPEN "O",#1,"DISKFILE.TXT" 60 PRINT #DV,"THIS GOES TO... SOMEWHERE!" 70 IF DV=-1 THEN CLOSE #-1 80 IF DV=1 THEN CLOSE #1
Yuck. But you get the idea.
On a whim, I wondered what happened if you tried to CLOSE #0 (nothing). Or CLOSE #-2 (nothing). Then I wondered what happened if you tried to open those devices:
10 OPEN "O",#0,"SCREEN" 20 PRINT #0,"HELLO, SCREEN" 30 CLOSE #0
It appears BASIC just ignores OPEN/CLOSE to the screen device. And the printer:
10 OPEN "O",#-2,"PRINTER" 20 PRINT #-2,"HELLO, PRINTER" 30 CLOSE #-2
This means my multi-output program could have been made much, much simpler:
10 INPUT "OUTPUT TO S)CREEN, P)RINTER, T)APE OR D)ISK";A$ 20 IF A$="S" THEN DV=0 30 IF A$="P" THEN DV=-2 40 IF A$="T" THEN DV=-1 50 IF A$="D" THEN DV=1 60 OPEN "O",#DV,"OUTFILE" 60 PRINT #DV,"THIS GOES TO... SOMEWHERE!" 70 CLOSE #DV
The only extra thing one might want to do is name the file different if going to disk (adding an extension), though you can do that to a tape file without error:
OPEN "O",#-1,"TAPE.TXT"
For tape, the filename can be up to 8 characters, with no extension. So the name would be “TAPE.TXT”. But if you had done “OUTPUT.TXT”, the tape name would be “OUTPUT.T” (8 characters). Not pretty, but it works.
Maybe we take care of that with:
10 INPUT "OUTPUT TO S)CREEN, P)RINTER, T)APE OR D)ISK";A$ 20 IF A$="S" THEN DV=0 30 IF A$="P" THEN DV=-2 40 IF A$="T" THEN DV=-1 50 IF A$="D" THEN DV=1:EX$=".TXT" 60 OPEN "O",#DV,"OUTFILE"+EX$ 60 PRINT #DV,"THIS GOES TO... SOMEWHERE!" 70 CLOSE #DV
That would add an extension (“.TXT”) only for disk files.
Anyway, I thought it was interesting that BASIC allowed OPEN/CLOSE on printer and screen devices, and I expect if I looked at the ROM disassembly, I’d find extra code there that just returns (not doing anything) when those device numbers are used.
Oh, and there is also a device #-3 in Extended Color BASIC, but you can’t do anything with it. That device number seems to be associated with the DLOAD command (which was removed on the CoCo 3) and is just used internally. But that’s the subject of a potential future article…
Until next time…

						
						

						


						

						




















						




