[ Go to Stephen's Entry Page ]
[ TI99/4a Articles index |    TI Book front page |    TI Resources Page |   PC99 Programs ||    TI*MES 32-33 ||    TI*MES 37 ]
contact - please use subject="pc99 page" to avoid spam trap!

Jump to:
Basic:Using cassette player remote
Basic: Huge Arrays
Pilot: Pilot 99 (Weithofer)

This web page contains the text of articles for owners of the TI-99/4a from Issues 35 and 36 TI*MES (1991 and later). It is of use to users of the TI-99/4a emulators.

Items from TI*MES Issue 35 & 36

NOTE: Following the 1991 AGM of the group, the committee called a special meeting in August 1991 to which I was summoned. I was advised that TI*MES was changing and my output must change. In the next magazine the editorial indicated that nobody could recommend or discommend any purchase without pre-censorship by The Committee.
I was personally given much more detailed instructions such that additionally I could not voice any opinions, or state any fact which was negative. No committee member and subsequently no member gave me their support.

After ten years of writing for TI users, I continued to contribute to TI*MES until 1999 but my output was affected by what was perceived by me as a personalised hatchet job. You will see this change in the extracts which follow from now, most of my input was program listings, which do not scan well and are largely omitted. The print quality seemed to drop rather sharply at this time. Does not leave much to republish. Issue 36 of Spring 1992 contained a letter for free speech and against censorship.
The minutes of the 1992 AGM show a resolution that any complaint will need the support of at least two people on the committee and no complaint will be considered valid if it concerns any item of software. No I didn't understand it either. This was followed by "however, it is not the intention of the committee to stop free speech". Sweet.


From Issue 35

GAMES PLAYERS SPECIAL... with thanks to Robert Brown of the Sydney (Australia) group.

Many games modules have a "cheat" mode, reported before but not for a while, and not such an extensive list...

In general, to enter cheat mode, when you have the title screen displayed, you must hold down SHIFT and press 8 then 3 then 8. There is often a time-out which means you have to do this fairly promptly from the time the title screen appears.
Available with: ALPINER, MUNCHMAN, MUNCHMOBILE, MOONMINE
After pressing the required keys you are able to enter the game at any level you require.

TI released TI Invaders OFFICIALLY on disk, and only the disk version has the cheat mode, allowing you not only to select level but ALSO speed.

STAR TREK will give you unlimited lives after you press the required keys from the title screen.

CHISHOLM TRAIL, instead of starting from the title screen, wait until it asks you for LEVEL 1-9 then quickly make the required key presses.

HOPPER you only need type SHIFT 8

TI RUNNER was only released on disk. when your man is flashing before the game starts, you can press FCTN 5 to skip to next level; or press SHIFT 3 followed by a two digit number to go to any screen ( 6 is typed 06 ).



Go to top of page

Control of CS1 by program:

This program requires Extended Basic and 32k ram.

The following small program will turn your cassette recorder or other device on and off under software control.

The program has appeared widely, not always with the authors name attached (rectified here) - below you will also find some hints on the practicalities of its use!
10 ! program by Ed Hall
11 ! to control the
12 ! "CS1" remote control
13 ! put in a music tape
14 ! plug in the remote
15 ! and press keys P and S
16 !
17 ! reverse polarity of
18 ! remote if it won't
19 ! operate your recorder
20 !
100 CALL INIT
110 CALL LOAD(16368,79,70
,70,32,32,32,36,252)
120 CALL LOAD(16376,79,78
,32,32,32,32,36,244)
130 CALL LOAD(8194,37,4,63
,240)
140 CALL LOAD(9460,2,12,0,45
,29,0,4,91,2,12,0,45,30,0,4
,91,203,78)
150 PRINT "PRESS:":" P P1ay"
:" S Stop "
160 CALL KEY(3,A,B)
170 IF B<1 THEN 160
180 ON POS("PS",CHR$(A),1)+1
GOTO 160,190,200
190 CALL LINK("ON"):: GOTO 160
200 CALL LINK("OFF") :: GOTO 160
210 END


This program can operate the cassette player to provide audio-visual tuition, with cassette ports triggered at the appropriate stage by the program.

Note l. The remote control is an electronic switch (for the technically minded, most consoles use a Darlington driver controlled by an optically isolated device). The polarity of its connection to the remote device MATTERS! If it does not work, try reversing the wires to the 2.5mm plug.

Note 2. As an electronic device, it uses up some of the voltage available to the remote device, a minimum of one volt. Some devices may be unhappy to have a whole volt removed - use mains supply for your recorders if possible and note that rechargeable batteries only start with a lower open circuit voltage than other cells! Not too much lower but if the one volt drop counts...

Of course you are not limited to turning just a cassette recorder on and off!!! You can turn anything on and off... provided you observe the correct polarity and do not try to switch too great a load!

For the technically minded, most consoles use a TIL119 isolator, and add to it a TIS92 NPN transistor with the collecter connected (normally!) to the tip of the plug. Thanks to Ross Mudie of Australia for this detail.



Go to top of page

Extended Basic Huge Arrays

(Using 32k ram)

When programming in extended basic, you do NOT have as much room as you may need for some exotic programs requiring large dimensioned arrays. Just try a program with one line - DIM F(8000) and run it!!! It is however possible to have an effective array of 8000 cells (or less of course) as demonstrated below...

1 ! HOW TO HAVE A NUMERIC AR
RAY
2 ! OF 8000 VALUES
3 ! WITHOUT GETTING
4 ! OUT OF MEMORY
5 ! (just try DIM A(8000)!
6 !
7 ! S SHAW OCT 1991
8 ! STOCKPORT ENGLAND
9 !
10 !
11 ! USES 8K LOW MEMORY
12 ! IN 32K RAM EXPANSION
13 ! which is required
14 ! and assumes no machine
code is loaded!
15 !
16 ! set up with CALL DIM
17 ! and used with
18 ! CALL S(cell#,value) to
store
19 ! CALL R(ce11#,va1ue_out
) to read value
20 ! eg instead of A=B(254)
21 ! use CALL R(254,A)
22!
96 ! call init allows access
to 32k ram
97 ! only needed once, then
even after RUN "DSK1.P" pro
vided you
99 ! dont use it again, all
the stored values are avai
lable
99 ! to program P
100 CALL INIT
110 PRINT "SIZE OF ARRAY?" ::
INPUT "FROM 0 TO ?":HIGH
120 CALL DIM(HIGH)
121 ! line 120 stores values
of 0 in the necessary addre
sses
122 ! only need to use once
or to reset whole array
130 INPUT "ARRAY CELL NUMBER
?":ADR :: IF ADR>HIGH THEN 1
30
140 INPUT "Read OR Save?":A$
:: IF POS("RS",A$,1)<1 THEN
140
150 PRINT
160 IF A$="r" THEN 180
170 INPUT "ARRAY CELL VALUE?
":V :: IF V>250 THEN 170
180 IF A$="R" THEN CALL READ
(ADR,V):: PRINT "VALUE IS ":
V ELSE CALL SAVE(ADR,V)
190 PRINT "--------------"
200 GOTO 130
210 SUB DIM(N)
211 ! Fill array with value
0 in blocks of 10 cells for
speed
220 IF NI>8100 THEN DISPLAY
AT(24.1)BEEP:"ARRAY TOO LARG
E" :: BREAK
230 START=8200
231 ! we have available addr
esses 8192 to 16384 actually!
240 FOR T=0 TO N/10+2
250 CALL LOAD(START+T*10,0,
0,0,0,0,0,0,0,0,0)
260 NEXT T
270 SUBEND
280 SUB READ(A,V) :: A=ABS(A)
290 IF A>8100 THEN BREAK
300 CALL PEEK(8200+A,V)
310 SUBEND
320 SUB SAVE(A,V):: A=ABS(A)
:: V=ABS(V):: IF V2>250 THEN
BREAK
330 IF A>8100 THEN BREAK
340 CALL LOAD (8200+A,V)
350 SUBEND
351 ! values stored must fit
into one byte hence maximum
value 2^8-1= 255
352 ! store a value -9 and i
t reads as 247 which is
256-9 so no negatives!
353 ! store a vaiue of 600 a
nd it reads as 88, which is
600-int (600/256)*256
354 ! so no values over 255!
355 !
360 END

While there are restrictions- values stored must be positive and below 256- these limitations are usually not exceeded in most arrays.

The above program uses the 8k low memory block which is not used by Extended Basic, unless you are running some machine code routines. If you can write machine code for ExBas you don't need this tip...

You are not limited to single dimensioned arrays, but will need to formulate an equation to address second and higher dimensions....

For example, a two dimensioned array of 30,30 could be used in a form R(A,B) where memory location = 8200+A*30+B and so on and so on.

If you need to store values for more than 8000 cells, then this is possible if you further restrict the possible values and construct an encoding/decoding formula. For 16000 values, you could store values from 0 to 15, with two values per memory location ( technically speaking, one value stored in the low nibble and one in the high nibble). The ultimate in storage is at bit level, where you can store 8 values per memory location for a total array of 64000 cells, more than enough for anyone, although restricted to 0 and 1 values only.


Go to top of page


PILOT 99
The language from Thomas Weithofer

(Available from this site from my programs page as part of an 11 disk collection towards the top of the page)

As requested by Mark Wills in the last issue, something on Pilot
PILOT 99 DEMO by WESLEY R. RICHARDSON
BLUEGRASS 99 COMPUTER SOCIETY, INC
Additions by S Shaw

PILOT 99 was written by Thomas P. Weithofer and is being distributed as Fairware for $10 - donations to your national Cystic Fibrosis charity. PILOT 99 is an adaptation of PILOT for the TI-99/4a. Additional features have been included for using sprites, bit-map graphics, sound and files. PILOT 99 was written in FORTH, although the user does not need to know FORTH to be able to use it.

PILOT99 is on two disks. The demo listed below is a demonstration of some of the commands in PILOT 99. Many of the ideas were adapted from the examples in the PILOT 99 documentation and have been combined into one program. To key in the program, use the Editor/ Assembler editor and save the file as a DIS/VAR 80 file. To run the program, use the Editor/ Assembler and put the PILOT 99 program disk in drive 1.

Use option 3 to Load and Run, and give DSK1.PILOT as the file name. At the program name prompt, put the disk containing the P:PILOTDEMO, that you keyed in, in drive 1, and type DSK1.P:PILOTDEMO and then press enter.

At the printer prompt, just press enter. CAUTION: the program P:PILOTDEMO will create a file TEST1 on disk 1. If you have another file by that name, be sure to change the filename in the demo.

The positive aspects of PILOT 99 are that it demonstrates the power of FORTH and shows disk accessing and string manipulations that can be done. To see how it was done you would need the source code. I do not believe that PILOT 99 in its present form will catch on as a popular programming language, but I do feel that PILOT 99 could be an excellent instructional example.

[ sjs note: there is no guarantee that Wesley fully understood the program and his code may cause problems but will act as a starting point ]

The PILOT 99 author, Thomas P. Weithofer, died in April, 1986 from complications associated with cystic fibrosis.

[comments in square brackets like this must be ignored when keying in, they are there just to help you -follow the code!]

R: P:PILOTDEMO PILOT 99 DEMO APRIL, 1986
R: WESLEY R RICHARDSON [ R: = Remark]
R: BLUEGRASS 99 COMPUTER SOCIETY, INC
IT:
T: PUT PILOT-DEMO IN DRIVE 1
T: TYPE ANY TEXT [ T: = Type = Print]
A: $B [A: = Answer = Input]
T: $B
OF: DSK1.TEST1 [OF: = Open File]
T: WRITE TO DISK 1
WR: BLUEGRASS 99 COMPUTER SOCIETY
RF: 0
T: READ DISK 1
RE: $C [RE: = READ file]
CF: [CF = close file]
TC= 9,2
T: $C
T: MAKE A SPRITE MOVE
GP: 1,1898,FF3D, 3C3C,E404
SP: 3,1
SC: 3,14 [SC = Sprite Colour]
SL: 3,100,125 [SL = Sprite Location]
SM: 3,10,15 [SM = Sprite Motion]
SS: 2 [SS = Sprite Speed]
LP: 500
EL:
SG:
C: #N<-5
T: DEMONSTRATE SUBROUTINES
LP: 9 [LP = loop to EL n times]
C: #N<-#N+1
U: *CALC
T:
EL: [EL= End Loop]
T: CALC FINISHED
LP: 200
EL:
J: *GRAPH [J = Jump = Goto]
*CALC
C: #A<-SQR(#N) [make A=SQR(N)]
C: #B<-#N^2 [make B=N*N]
T: N IS #N [use of numeric variables]
T: SQR(N) IS #A
T: N^2 IS #B
E:
*GRAPH
IG:
T: GRAPH MODE
T: DRAW 6 CIRCLES
C: #N<-50 [make N=50]
LP: 6 [loop 6 times]
DC: 55,125,#N [draw circle centre 55,125 radius N]
C: #N<-#N-7
EL:
TG: 15,1,DRAW DIAGONAL LINE
DL: 15,15,80,100
LP: 200
EL:
IT:
E:

[this next part by S Shaw]
Historically PILOT was a tutorial language reading an input, checking it against a series of answers, and incrementing a counter if the answer matched. The commands were therefore either unconditional (always do...) or conditional upon a match (do if true, do if false).

The magic of Pilot lay in the checking of answers against a data list, and the fairly easy conditional reactions to the answers. Very primitive Pilots were able to either Match (Y matches Yellow) and Match Exactly.

Stephen's Pilot Language

Stephen Shaw wrote a simple PILOT interpreter in Extended Basic way back in 1982 and this is also in the Group library with docs on disk. Available for download from my programs page- in an 11 disk collection towards the top of the page.

Here is an extract from those docs

Note that these commands only apply to THIS version of Pilot by Stephen!

T/HELLO WHAT IS YOUR NAME?
A/@NAME
T/ HI @NAME
T/LIKE TO DO THAT AGAIN?
ME/Y;YES;YEP;OK;O.K.;YEAH;
RY/ [no outstanding JUMP so return ]
[will RUN program again from line 1]
T/YOU ANSWERED IN THE NEGATIVE!
T/LETS USE A SUBROUTINE
J/ *GOODBYE
T/THATS ALL FOLKS
E/
*GOODBYE
T/IT HAS BEEN GOOD TALKING WITH YOU
T/PLEASE PLAY AGAIN
R/
E/

=====================

From TI*MES 36 Spring 1992

Mike Goddard advised connections for an audio amplifier to the video out socket on the console:
European PAL:
5           1
      6
 4         2
      3
Earth is pin 6 (central pin). Audio out is pin 5. If required there is +12v DC on pin 1. Do not confuse pins 1 and 5!

American NTSC:
3           1
 5         4
      2
Earth is pin 2 (bottom pin), Audio out is pin 3, +12v dc is available at pin 1. Do not confuse pin 1 and pin 3

From TI*MES 36:

Popcorn graphics

1 ! for Extended Basic and The Missing Link
2 ! from Clifford Pickover
3 ! via A K Dewdney
4 ! for TI99/4a
5 ! by Stephen Shaw 12/91
6 !
100 CALL LINK("CLEAR")
110 H=0.05
120 FOR J=1 TO 26
130 FOR K=1 TO 26
140 X=-4.3+J/3
150 Y=-4.3+K/3
160 REM
170 FOR N=1 TO 50
180 XX=X-H*SIN(Y+TAN(3*Y))
190 YY=Y-H*SIN(X+TAN(3*X))
200 X=XX :: Y=YY
210 CALL LINK("PIXEL",X+90,Y+96)
220 NEXT N :: NEXT K :: NEXT J
230 GOTO 230


Go to top of page

[ TI Book front page    |    TI Resources Page    |   PC99 Review    |   PC99 Programs ]