[ Go to Stephen's Entry Page ]

[ My TI Book   |   TI99/4a Articles to read   |   TI Resources Page |   PC99 Review   |   PC99 Programs   |   TI Lines 8    |   TI Lines 10 ]
contact - please use subject="pc99 page" to avoid spam trap!

TI-Lines was published from Oxford by Peter Brooks (as Oxon TI Users), for British users of the Texas Instruments TI-99/4A Home Computer. This is issue 9, cover dated December 1st 1984.

Spaces Spaceless error
Many moons ago the daughter of an erstwhile TIHOME member drew my attention to an unusual error which she had uncovered. An apparently perfect IF … THEN … ELSE statement kept coming up with an error, and she could see absolutely nothing wrong with it on screen. It wasn't until the program was listed out on the TI Thermal Printer that the nature of the error became apparent. Any guesses?

On screen, what she saw was:
nnn IF blah blah THEN 360 ELSE
After listing (to a 32-column printer mind, from a 28-column display), what she saw was:
nnn IF blah blah THEN 360 ELSE580
Bingo! No space between the ELSE and the 580. If she had resequenced the program so that the line numbers were longer or shorter, that would also have shown up the error. Odd, isn't it?

MBX System Review MBX review
by Peter Brooks, November 1984

At the Manchester Meeting on November 3 I bought an MBX Speech Recognition Unit, together with an adaptor (from UK to US mains) and two MB cartridges: "I'm Hiding" and "Championship Baseball". I had intended to investigate the likelihood of being able to make use of the apparently astounding facilities of the unit as an aid for the vocally handicapped, but so far such a project seems doomed to fall at the first fence.

In the meantime I have had the unit farmed out to two families, with children ranging in ages from 4 to 13 years old. At the same time I provided a few "standard" TI modules: Video Games 1, Parsec (not always with speech), and TI Invaders. Joysticks were not provided (and the MBX joystick is incompatible with the TI console [when not used with the MBX unit] ).

This is a summary of the experiences of the parents of both families, and it may be of some help to those debating whether to part with the large bundle of folding stuff necessary to buy such a system.

To begin with, a short description of the unit which I obtained through Howard Greenberg of Arcade Hardware, Fallowfield, Manchester

I understand that the price I paid was a 'special' for the show, so the GBP 125 I paid may not be typical. For that, I received an MBX console, a fearsome-looking joystick which would have flummoxed Luke Skywalker, a mains adaptor to alter the UK mains to that of the USA, a headset consisting of a collapsible headband with microphone, and two games cartridges (detailed above).

The MBX console [keypad - optional use] is not touch sensitive but "thump" or "finger-roll" sensitive, very much like the keyboard of the Sinclair ZX80 and ZX81 (which appears in the States as the Timex TS1000 I believe). The games supplied came with overlays to fit on to the MBX keypad.

The connection to the TI console is made through the joystick and cassette ports.

After ten days with one family, and one evening with another, the general consensus of opinion was identical: Very impressive as far as speech recognition goes (although the children were not in the least impressed, and in fact became quite frustrated when the machine did not recognize their carefully-enunciated commands) but after only a short time boredom set in, and in fact the modules which stole the show were Video Games 1, Parsec (even without speech), and TI Invaders.

It is possible to play any of the three TI games on a monochrome TV, which one family had, while I'm Hiding demands a colour set. The Championship Baseball game also suffered on the monochrome set, but the longest trials were carried out on the colour TV (just in case anyone was going to comment).

After having played with the system myself for a while now, I find that I agree with the findings of the two families. In particular, the game I'm Hiding was far too slow for the younger kiddies (at whom it's aimed) and both families said that the screen generation and the I'm Hiding sequence needed to be sped up considerably.

Interestingly, everyone on whom I have tried the unit has gone through virtually the same procedure: voice-training using silly voices, odd sounds, and wrong words, followed by a spate of coughing, squawking, and playing of rubber lips during the use of the speech recognition. Eventually they settle down to using the unit "properly", which is when the disenchantment sets in.

The voices provided during I'm Hiding also came in for severe criticism as being irritating (even the kids were taking the mickey out of them at one point) and largely unhelpful.

I should point out that both of the families are "computer-naive", although one already owns a 4A (but no modules) and the other has had very limited experience on a minimal-system Commodore VIC-20.

I understand that at least one Oxon TI User member with young children has an MBX system, and I would be interested in any feedback from members with regard to the results presented here.

Enhanced Basic An enhancement of TI Basic available through the Statistics and PRK modules by Peter Brooks, December 1984

Note: Insert either the Stats or PRK module and then select TI Basic. The additiona; calls are then available.

We will begin this discussion of CALL H(), the Header Subprogram, with a brief examination in general terms of the function and use of all of the remaining subprograms:


Having created a "reserved" area in memory with CALL P() last issue, we can now emulate some of the processes of PRK and Stats. When you create a file using either of the modules, you first have to define what the layout of each record will be. This layout is then superimposed, if you like, upon the reserved memory (or the reserved memory is re-arranged to conform to this layout) through the use of CALL H(), the HEADER subprogram.

Headers, in computer terms, tend to contain information about information — how much there is, in what form it is stored, and so forth — and CALL H() here stores the characteristics or specifications of the records.

The use of CALL H() is equivalent to designing a form on which data is to be entered, but where each entry is contained within little boxes, one letter or punctuation mark per box.

You may have noticed that on some commercial circulars addressed to you, your details have been abbreviated — to make them fit into the boxes.

Note that CALL H() isn't used to fill in the form, only to create the layout. Filling it in is the function performed by CALL G(), the GETPUT subprogram. This subprogram can also be used to read entries in the file, hence GET (read) PUT (write).

The transfer of the entire file (i.e. bunch of filled-in forms, where each group of boxes is a field, and each group of fields is a record, and each group of records is a file) either from an external storage device into the reserved area, or vice versa, is performed by CALLs L and S. These two subprograms transfer data files using the same format as that used for storing Basic programs (called PROGRAM format), so that they are both much faster and more powerful than INPUT # and PRINT #.

These program format files can appear as programs to Basic's OLD, so it is possible to successfully OLD a PRK or Stats data file, or even to use CALL L() to load a Basic program as if it were a PRK or Stats data file. Having OLDed a program format data file into Basic you cannot then LIST or RUN it, because the necessary locations in memory, which Basic refers to when looking for the extent of a program, have not been updated and, anyway, the structure of the data file would be totally different to that of a program.

Rarely, you may be able to CALL L() a Basic program into memory and "examine" it in detail, but what you will see is largely garbage, and you would need to understand the use of tokens in Basic anyway (which has been covered in earlier issues of TI-Lines).

Now to examine CALL H() in more detail.
The best way of describing what CALL H() does is to follow through the opening sequence which either PRK or Stats requires before you can enter data when using those modules. I will use PRK for this example, but Stats differs only in some minor respects so the general principle still applies. The first thing that happens when you select PRK from the menu is that the PRK title appears.

You can either wait or press ENTER and get into the opening sequence. After waiting for the module to set itself up, you are then asked for the date. Contrary to what you will read in the rewrite of TI's own document elsewhere in TI-Lines, you can enter a number between 1 and 31 for both month and day, so that either American or European date formats can be used (i.e. month/day/year or day/month/year). The system won't let you get by without entering a date.

You must also enter a year, and the PRK has been set up to force an entry between 79 and 99, so don't try using the module to keep track of your earnings before this time!

After that, you are asked whether a printer is attached and for its name if one is, and then it asks you if you want to create a new file or load an existing one.

Assuming that you want to create a fresh file, you make your selection, whereupon the module prompts you for the name of the file.

An interesting thing here is that the [ and ] keys will return up and down arrows (bear in mind my PRK was written in the days of the 99/4 when ALPHA LOCK, FCTN, and CTRL were but a twinkle on somebody's drawing board), both of which form valid file name characters. (And yet the FCTN C open single quote (') is not regarded as existing at all. Odd, innit ? Not only that, but the underline (_) is redefined as well).

So, we have entered a date and a file name — items which will be used when the file header is written using CALL H().

From this point on, you will be defining the names and characteristics of the fields in the records in the file (puff, puff). Each field is called an item, and there can be up to 15 of them in a PRK record. For example, one field might be labeled FORENAME, while another might be SURNAME, or AGE, or whatever.
A set of such fields — full name and age — would then constitute one record.
Entering data for one set of fields would be the same as filling in one form.
Put the forms together (or records) and you have a file.
In the "General Description of the Header Subprogram" there are two forms of CALL H() — one for numbers and one for strings:
R stands for Read,
W for Write,
INFO for the Header Item Number (an integer between 1 and 14 (details in the General Description),
FLD for the Field Number — a number between 1 and 15 on the PRK and 1 and 99 on the Stats module, and
V or V$ for the variable which is used to receive/provide data from/for the storage area in memory.

The "General Description" also provides the information on what each of the codes and numbers stands for — for example, in the R/W entry, zero means Write and one means Read.
Note that in some cases the subprogram automatically updates some of the header items without requiring your intervention, and by and large the only INFO items which would concern you are 1 to 4, 9 to 12.

Also see: TIdings No 10 and also TI*MES 21

These cover the file name and the date, and the field names and their attributes, and would be defined at the start of the production of your database.

I must confess that I have had little use for anything other than CALLs A and D, and therefore this section of the Enhanced Basic discussion is sketchy to say the least.

Call KEY CALL KEY revisited by Peter Brooks, December 1984

Recently I had cause to re-examine CALL KEY() when answering a query from a local TI owner, and after having checked the use of CALL KEY with key-unit 3 as a way of avoiding some of the problems with the dreaded ALPHA LOCK key (but not alas with the joystick) I played around with key-units 4 and 5, and rediscovered something which I must have known for some time and not discussed at all. (This is not an unusual state for we scientific types to find ourselves in …).

A quick recap on CALL KEY(3, …) for those not already familiar with the information originally presented in the UK by Stephen Shaw in the TIHOME newsletter Tidings.

Type in this single statement:
110 INPUT A$
and run it. Type in anything you like, with the ALPHA LOCK key up, and use the SHIFT key to make sure that you can obtain both the upper case and the so-called lower case (really small upper case).

Now add this line:
100 CALL KEY(3,K,K)
This is called a "dummy" statement, which means that you are not interested in the results of its execution. What it does do is to set the console into 99/4 mode, which means that the computer will behave as if it is a 99/4. This early model, you may remember, has no CTRL or FCTN keys, and does not possess "lower-case" letters.

Run again, and notice how the SHIFT key has no effect, nor does the ALPHA LOCK key. This is one way of getting around the problem of input validation when both upper and lower case letters can be entered, but only one is needed.

Don't forget that if you break the program, or if any other CALL KEY() command is executed (except using key-unit 0, which essentially keeps the machine in whatever mode it was set to — useful for subroutines which are accessed by different sections of a main program — you will need to execute the dummy CALL KEY() again.

Now to key-unit 4. The TI manual states that key-unit 4 "remaps the keyboard in the Pascal mode". What this means is obscure, but the effect is to disable the normal function keys bar QUIT during an INPUT. You can check this out for yourself. Change line 100 to this:
100 CALL KEY(4,K,K)

Now when you RUN, note how the keyboard behaves. Try breaking with the usual FCTN 4 during the INPUT. In fact, try editing your input line with the usual FCTN keys. Nothing works — all you get are "spaces" on the screen — but both upper and "lower" case characters are usable.

You will find the alternative editing keys are hidden away in the User's Reference Guide on page 93. In Basic and TI-99/4 modes the function keys have codes of 1 to 15. If you look under the control key table however, you will find that in Pascal mode the same codes are generated by the CTRL key with the letters A to O inclusive. Thus moving the cursor left and right during INPUT is achieved through CTRL H and CTRL I while BREAK is performed by CTRL B.

It's not earth-shattering, I know, but I bet you weren't aware of it until now. Whether it has any practical use is entirely up to you.

End of issue 9
[ TI Book front page   |    TI Resources Page    |   PC99 Review    |   PC99 Programs   ]