The PC-8 Computer
Written March 9, 2004
the graphics operator for the Pirates Television Network in the late
1980s, I wanted to be able to prepare several bar graphs before each telecast.
Pirates Television Network Announcers
March 19, 1988
three or four baseball telecasts late last season, we displayed team-comparison
stats with the help of animated bar graphs like the one below.
We feel that this helps the viewers see what the stats mean, so we
plan to use these bar graphs on a regular basis this year.
avoid having any questions arise on the air, here are a few notes
about these stats.
numbers are based on the stats coming into the game.
Sometimes we might be able to update them to include what the teams
have done so far in tonight's game, but if we do so, we'll tell you
"this is updated" through your headset.
two exceptions, the #1 ranking goes to the team that has the largest
number in the league in the given category, regardless of whether
having a large number is good or bad. For example, the team
with the most errors is ranked #1 in errors. The two exceptions
are golf scores and team ERA. In those two categories only, the
team with the smallest number is ranked #1.
type of team comparison shows won-lost record under special
circumstances. For example, against lefthanded starters the
average N.L. team has a 5-6 record, while the Padres are 4-8 (ranked
#12) and the Bucs are 5-4 (ranked #2). For your information,
the rankings and the length of the bars are based on the won-lost percentages,
which are .454, .333, and .556 in this example. But we don't
show those percentages on the screen; there are enough numbers
already with the records themselves.
numbers were readily available from the printed league stats, but
how long should the bars be?
longest bar that would fit on the TV screen was about 32 characters
long. To make that represent 141 doubles would require one
character for 4.4 doubles. So the other two bars, for 130
doubles and 124 doubles, should be 30 and 28 characters long
respectively, like this:
those three bars are almost the same length. The graph would
reveal that there really wasn't that much difference among the
numbers, while as broadcasters we want to make a story out of
the stats. We want to make it seem as though any small
differences are significant. We'd like to ignore the left half
of the bars and magnify the right half.
would it be like if we exaggerated the difference by making the
longest bar 32 characters but the shortest just 8 characters,
regardless of the numbers they represent? The middle bar could
be made proportional to the other two. The result would look
gives us a definite and obvious difference, but it's perhaps too
exaggerated. I decided that the best compromise would to average
the results of these two methods of calculation.
fair amount of number-crunching would be required to do this, and I
didn't have a lot of spare time on the day of a game. The
problem called for a computer!
considered bringing my home computer along, a laptop-sized Tandy
Model 100, but I discovered that there was a smaller, more portable
device available the Tandy PC-8 Pocket Computer.
instruction manual called it "one of the most sophisticated
hand-held computers in the world today." It boasted a
four-bit processor and a whopping two kilobytes of RAM. On
February 6, 1988, in preparation for the upcoming baseball season, I
purchased one for $59.95 at the Radio Shack at the Monroeville Mall.
that year I spent an equal amount for a printer/cassette interface,
as shown below.
computer itself less than 5½" long, less than half
an inch thick, weighing only three ounces could be tucked into
a pocket of my briefcase and sit in a blank area on top of my Chyron keyboard.
(On the display is a boxing timer. More about that later.
I've used the PC-8 as a backup on boxing telecasts as recently as 2003!)
I wasn't on the road, the black accessory cradle offered AC power, a
thermal adding-machine printer, and an interface for storing programs
on an audio cassette recorder.
PC-8 is completely obsolete now, of course, compared to Palm Pilots
and such. But it could be programmed in BASIC, and I wrote
programs to do what I wanted.
Any Substitute Chyron Operators
March 19, 1988
present comparative team statistics using bar graphs, so that the
viewers can more easily grasp what the stats are telling us. A
typical lower-third panel looks like this:
panel is also animated. When you press a key, an autodisplay
causes the bars and numbers to reveal.
this autodisplay is fairly tricky. Here's how it's done.
raw data comes from the MLB/IBM Notes, the league statistics that
are available a few hours before game time. For each category
(doubles in our example), those notes list the totals for each of the
twelve teams in the National League. But you need to figure the
league average and the rankings of the two teams playing on tonight's telecast.
also need the proper lengths for the three bars on the graph.
Here's how I determine appropriate lengths.
G be the biggest of the three numbers (141 in our example).
The bar corresponding to G is 32 characters long, because that's the
longest that will comfortably fit on the screen.
E be the smallest of the three numbers (or 124). The bar
corresponding to E is always between 4 and 20 characters long, the
actual formula being 16E/G + 4. In our example, that formula
works out to 18 characters.
N be the middle number, or 130. The bar of middle length is
given by the formula 16N/G + 12(N-E)/(G-E) + 4. In our example,
that becomes 23.
make these computations much easier, we use a checkbook-size
computer, a Tandy PC-8. Here's how to run the program.
on the power switch. Press DEF and N.
computer asks for VISITORS.
If the visitors have 141 doubles, press 1, 4, 1, and ENTER.
computer asks for HOMETEAM.
Press 1, 2, 4, and ENTER.
the computer asks for numbers for the other ten teams in the
league. Enter these.
these numbers are entered without decimal points. If the
category is batting averages, enter 265, not .265, because the latter
would confuse the computer.
you can use a decimal point for a special purpose: categorical
won-lost records, for example on grass fields or in extra
innings. In that case, enter each record as if wins were
dollars and losses were cents. A 7-5 record would be entered as
7.05, for example.
all twelve numbers have been entered, the computer will give you
three sets of answers like this:
ENTER to see next set)
I S #4.32.141
ENTER to see next set)
ENTER to start another calculation)
numbers between the decimal points are the lengths of the bars.
The numbers on the right go at the end of the bars. (Of
course, if you've been entering "dollars and cents," the
numbers on the right will be something like 8.08,
which you would type as 8-8 on the screen). And the rankings
are indicated by # signs.
2294 from the message disk. Retype "BUCS" and
"PHILS" as necessary. Change the palette as
necessary; yellow should be the visitors' team color (normally 706
for the Pirates), and red should be the home team's color.
Re-record at 2294.
up the existing autodisplay from 2270. [An autodisplay is a
programmable routine used by the Chyron character generator to play
back "keystrokes" very rapidly for animation purposes.
In this case, a bar on the screen is printed out by typing as many
as 32 characters, each character being the letter I, shifted to the
left so that it's touching its neighbor.]
for each set of data, delete parts of the autodisplay and replace
them with new numbers. The parts to be deleted and replaced are underlined
in the listing below. When you're finished, check the operation
of the autodisplay. Then record it at an address between 2270
and 2292. (It's so long that it will take two addresses.)
M CURD DO CURR CURR 3 DO CTRL
G CNPG CLER AUX2 AUX1 SHRU CTRL
WHIT ERAS AUX2 AUX2 AUX9 AUX4 READ
and shift it
SHRR SHRR SHRR
for gray bar
FNT2 GREN DELY 0000 space
SHCL SHCL SHCL SCHL I DEFE
NL avg, pause
DELY 0030 TAB
SHCL SCHL SCHL space
SHCL SHCL SHCL 4
for yellow bar
SHCL SHCL SHCL SHCL I DEFE
visitors number, pause
4 1 DELY TAB
SHCL SHCL SHCL space SHCL
SHCL SHCL 8
for red bar
0018 SHCL SHCL SHCL SHCL I DEFE
WHITE 1 2 4
the next season, I had taught the PC-8 some new tricks.
Because of its very limited memory only 1,278 bytes for
programs and data I had to delete the feature where it could
rank teams' records like 7-5 and 8-8 by calculating the winning
percentage. However, I managed to squeeze in all of the
Instructions and PC-8 Basic programs for baseball
Earned Run Average
DEF = to begin. Computer asks twice for IP.X
X is thirds of an inning) and ER.
[One set of numbers refers to the pitcher's career coming into this
season, as listed in the press guide; the other set refers to this
season.] It adds the pairs of numbers and gives you the
I=1 TO 2
P is 44.1, that means 44 and one-third innings
INT P+3.3333*(P- INT P)
is P converted to decimal form as 44.33333 innings
is the earned run average, rounded to two decimal places
B to begin. The display reads 910.
is a Chyron address to identify the player, 0.0.
means that he's 0 for 0 in tonight's game, and the last number is his
updated season batting average.
the number keys to give commands as follows.
to other team
up on scorecard
hits (and AB)
outs (and AB)
you've called 8 to enter season at-bats and hits, the display will
show the batting average. If the player is replaced during the
game, call 8 again [to enter the new player's at-bats and hits].
you're not using the computer, turn off the power. When you
turn the power back on, use DEF Z (instead of DEF B) to resume
without erasing your old data.
is compressed data of the form 2.034, where 34 is at-bats for the
season (coming into the game), 2 is at-bats tonight, and Z ranges
from 1 to 18 for the eighteen players currently in the game
INT V:T= INT U
is hits tonight, T is at-bats tonight
and U are the season-plus-tonight hits and at-bats
U=0 THEN LET W=0:GOTO 750
is the updated batting average
B(0);" ";S;T;" ";W
the computer waits for the operator's command to go to a subroutine
U=0 THEN GOTO 755
makes V either +1 or -1
U GOSUB 810,820,830,810,820,830,870,880
Z=0 THEN LET Z=18
Z=19 THEN LET Z=1
changes Z, the player index
increments tonight's hits by either +1 or -1
this increments tonight's at-bats
changes Z by 9, which gets us to the other team
stores the season numbers in the A(Z) and B(Z) arrays
N to begin. Enter 12 numbers (without decimal points).
Then the computer will give you three answers of the form VIS
where the number between the periods is the length of the bar in the
bar graph and the other two numbers should appear before and after
the bar, respectively. Press ENTER to see the next answer, and
ENTER again to restart the program.
N(1)>N(2) THEN GOTO 926
the rank of the visitors #1, while the hometeam remains #0; the
smallest of the three bars is the visitors' stat; and the largest of
the three bars is the hometeam's stat
E=G THEN LET R(1)=0
both stats entered so far are the same, then the ranks of both teams
should be #0
the rank of the hometeam #1, while the visitors remain #0; the
smallest bar is the hometeam's stat; and the largest bar is the
accumulates the sum of all the stats; the average will be Z/12
I=0 TO 9
I=9 THEN INPUT "ONE MORE? ";D: GOTO 938
"N.L. TEAM ";D
J=1 TO 2
D>N(J) THEN LET R(J)=R(J)+1
the stat just entered is greater than the stat of visitor or
hometeam, then increment the rank of that team
J: NEXT I
is the league average, rounded to a whole number
N(0)>G THEN LET G=N(0)
the league average is greater than the largest bar G, then set the
largest bar to the league average
N(0)<E THEN LET E=N(0)
the league average is less than the smallest bar E, then set the
smallest bar to the league average
I=0 TO 2
N(1), and N(2) are the stats for the three bars
will range from 1, if N(I)=E, to 4, if N(I)=G
is the fraction that N(I) is of the largest bar
averages X and Y
L is the number of characters in the bar
soon found another use for the PC-8 besides baseball.
are no scoreboards at professional boxing matches. The sport
has stubbornly remained in the 19th century, announcing each round by
carrying a numbered card around the ring while refusing to let the
fans see the round-by-round judges' scores or a clock.
not as though the timing is complicated. Unless the referee
calls a time-out for an injury or something, the clock runs
continuously: three minutes for Round 1, a one-minute break,
three minutes for Round 2, another one-minute break, and so on.
a bout is televised, we in the television graphics department have
to generate our own clock and superimpose it on the screen. We
start it from 3:00 when the bell rings to begin a round, then count
down towards zero, when hopefully the bell will ring again.
(Because there's some uncertainty about all this, we remove our
unofficial clock from the screen with five seconds left. If it
shows "0:00" at some time other than the end of the round,
conspiracy-minded viewers might think that the ringside timekeeper
has cheated by sounding the bell early or late. Or worse, they
might think that the TV crew doesn't know how to keep time.)
PC-8 and I flew to Tokyo in February, 1990, to work the HBO telecast
of Mike Tyson's upset loss to Buster Douglas.
my graphics coordinator starts and stops a stopwatch. So does
someone at ringside. They tell me when to start and stop the
clock on the screen.
I want to have my own independent time indication, in case my
colleagues get distracted. And a simple stopwatch isn't really
good enough. It can't remind me which round we're in, nor can
it warn me how soon the next round will start.
solved all these problems in 1988 by writing another BASIC program
for the handy PC-8, turning it into a "smart" customized stopwatch.
it waits for my keystroke. When the first bell rings, I hit
ENTER, and the PC-8 starts counting down. After 0:00
it keeps on going; the next second is 3:59
and it counts down the minute intermission until 3:00
when the bell should signal the resumption of boxing.
PC-8 will keep going like this all night with no further
intervention from me. However, its time may need to be
corrected occasionally, and there are various buttons for that
purpose. The one that I use most often is B, for bell, which
reduces the seconds to zero and holds them there until the bell rings
and I release the button.
Program for Timing Boxing Matches
begin with DEF A
for start of match: 3 minutes, 0 seconds left in round 1
input if desired
for ENTER before proceeding
(to the LCD display) once a second
I$="A" THEN GOTO 100
A to restart with new parameters
I$="Z" THEN LET S=10*INT((S+5)/10)
Z to hack to nearest 10 seconds
I$="B" THEN LET S=0
B to zero the seconds; when bell rings, release
I$="H" THEN LET S=S+1
H to halt the count temporarily, adding one second back in each second
S>-1 THEN GOTO 140
seconds haven't gone below zero, loop another second; otherwise next minute:
M>-1 THEN GOTO 140
minutes haven't gone below zero, loop another second; otherwise next round:
STR$ (M)+":"+RIGHT$ ( STR$ (S+100),2)
" ";F$;D$;STR$ (R)
loved the fact that I could customize this little device to behave
in a special way that suited my purposes exactly. And that, in
fact, is the essence of a programmable computer.