BuildLog is Now Available

I just released a new (free) software application named BuildLog that makes it easy to track time worked while building an experimental aircraft. Please feel free to download it and let me know what you think. I created it for myself to use while building my Zenith CH650 kitplane and am hoping it may be useful to other homebuilders. The web site is https://toddosborne.net/BuildLog.aspx

New Tail Kit

In the last couple of weeks I received my new Zenith CH650 tail kit and started building the rudder skeleton. Since we now live at the beach, I decided to do a lot more corrosion protection than on previous planes. So I quickly got stopped because I needed to order Alumiprep 33 and Alodine 1201, both hazardous materials that had to be shipped on a slow truck. I now have both and am looking forward to making some good progress this weekend.

Back Home Again

Nope, I haven’t left Wisconsin in a while, though we will visit family next weekend. Home this time is the C programming language. I learned C a long time ago, moved to C++ in the early-mid 90’s, and then to C# around 2001, and barely looked back. I always missed it somewhat, and occasionally did little projects of my own in C/C++, but C# has paid the bills for years.

Recently however I had the chance to dust off the trusty old C compiler for a project at work, a cross platform email MTA for Lotus Domino. It took a day or so to get back into the language, and quite frankly I am still struggling to quickly recall some of the C runtime functions. but it is coming back quickly. And the application that I am developing is nearly done, and very high quality to boot. I am pleased.

Last weekend we (the family) also bought a new Apple Mac Mini to replace our aging iMac G4 home computer. We sold a bunch of stuff on Craigslist to buy it, and are mostly pleased. If iPhoto 09′ would quit taking a crap, all would be great. Apple quality is still very good, though their QA and past history of releasing nearly flawless software is just that, history. I do hope they get back to their old ways.

We copied all of our old pictures and other media from our server to the Mac for testing. All of our pictures and stuff are organized by the year, month and day they were taken. But, when copying the files over to the Mac, those original file time stamps were messed up. I could live it, but with my newly refound love of C, I decided to fix it.

About 800 lines of cross-platform bliss later, I have my first Macintosh program! It scans the media files and updates the dates to match. Nothing hard here, just a first for me. I still coded it on Windows and then ported (cleaned up really) the code to the Mac. First Mac application, first UNIX application in many years, and I am feeling good again. Now I am hunting for a good development environment on the Mac. By good I mean Visual Studio like, anyone? XCode still blows, though I guess I could get used to it.

Kentucky Ice, Windows 7, and Remodeling

This has been a busy week around the Osborne house. Last weekend I installed the beta of Windows 7 on my Media Center (DVR) computer and it worked great. So well in fact, that I also installed it on my home development computer, which is also working great. After totally hating Windows Vista (other than Media Center), it is refreshing to see Microsoft making some great improvements as they work closer to the next version of Windows. Windows 7 is much faster than Vista, and quite possible even faster than Windows XP, so far so good.

My family in Western Kentucky and Southern Indiana got hit hard by the big ice storm and have been without power for 5 days now. Those in Indiana are okay now, but my dad in KY is still without power. After not being able to contact him for 2 days I almost drove down to KY myself on Friday, but they were able to call just before I was going to leave. I planned to take them a generator, gasoline and other stuff. Instead, Missy and I were able to locate a generator for them in Champaign, IL and bought it yesterday at a Menards in Madison. My dad is going to drive the 4 hours today to get it, and then 4 hours back home. They have heard that it may be up to 3-4 weeks before they have electricity.

On the house front, I finished painting the upstairs bathroom yesterday, reinstalled the wood trim, a new toilet, replaced the electrical outlets and switches, and installed a new sink drain. Today I need to install the new shower doors and the bathroom will be finished. There are many more little jobs to do as well, but the house is looking very nice now.

They Get It!

They get it, my new company “gets it”. Granted, I have only been here a couple of days, but that has proven to be enough time to determine that Quest has a much better understanding of “correct” software development than most of the companies I have worked for in the past, especially recent past. The code that I have been reviewing is pretty darn good, has comments, is formatted consistently, and has unit and functional tests written for it. The style is not my own of course, but it is consitent and easy to read and follow.

My manager, like me, very much believes in Test Driven Development. That is developing code using this simple principle to create much less buggy software, giving the end-user a much better experience with the program. It takes a little bit longer initially to create the code, but the end result is high quality code that ultimately took less time to write because it was bug-free to begin with. It is nice to have a manager that see’s things this way, instead of one that I have to do constant battle with because he doesn’t “get it”.

I am just getting going here, but it appears I will soon be able to contribute a lot to the team and add significant value to the product. And the best part is, I don’t have to do any web development, ever! I am perfectly fine not creating boring old web pages and “web applications”. Give me the low-level grunt code any day and I will be happy.

On the personal front, it’s been a while since I have written about finances. I have just been so busy lately, my little hobbies tend to take a back seat. Missy and I did find a nice little gem on the Internet last night, a site called CreditKarma. It allows you to see your credit score and has a FICO simulator. It is not perfect, but it is still a very nice tool. The price is right too, 100% free, paid for my targetted advertising on the site. I highly recommend it.

We are hoping to refinance our house. Yes, already. The rates are nearly 2% lower now than when we purchased the home in July, and we can lower our payments by $250 every month! We are submitting the paperwork tonight and hopefully will have this wrapped up the first part of February, which would give us 2 months without a house payment!

The credit cards are, once again, completely paid off. I know I have said this before, but we (all of us) need to stop using them. However, CreditKarma also did some research that showed people that used 10-19% of their available credit had up to 60 point higher credit scores than people that had 0 credit utilization, literally the difference between a 720 FICO score and 660, which is huge. I think that should be illegal, but it appears that that is exactly how the credit scoring system works. So what is more evil here, having 0 credit card debt and a lower FICO score, or a little credit card debt and feeding those monsters? I don’t have an answer, though the new iMac and iLife suite from Apple is looking very appealing! 🙂

Another Magazine Going Down the Crapper

I just read on Slashdot that Dr. Dobbs Journal, a long-running magazine for computer programmers, will no longer be printed. It will be on the web only. That is a shame, as it is one of the last very good magazines and sources of quality information for professional programmers, and has been printed since 1976.

That means I officially have no magazine subscriptions any longer. I refuse to pay for web based magazines because that is not how I like to read them. I don’t sit at my computer and read that kind of stuff online, it’s just too hard on the eyes. And let’s be completely honest here, I read magazines in two places… in bed and on the crapper, neither of which has a computer anyway. Sure, I could take a laptop in those places, but I don’t personally own one, and refuse to buy one for myself until they make them as light as a magazine and don’t burn the crap out of my legs when I use them. And no, my Motorola Q or iPhone is not a suitable way to read a magazine either.

Newspapers are in trouble, magazines are going away, and we have the wonderful web to thank for it. Ultimately we will be left only with half-baked, half-assed news and information written by people that have no business writing or teaching. This is sad day in computer history.

The Timex Sinclair 1000

When I talk about growing up with computers, and my early programming days of my childhood, I usually recall fond memories of the Commodore VIC-20 and Commodore 64. But the truth is, my first computer was the Timex Sinclair 1000.

The one pictured here has the 16KB RAM expansion module. I had nowhere near the money to buy that at 12 years old, so the one I had contained the standard 2KB of RAM, and the BASIC programming language built into ROM. So I had basically 2KB to work with.

It also had a membrane keyboard and common BASIC programming language commands like GOTO and GOSUB could be entered by just pressing one key. These computers were TINY, much smaller than anything out today, and weighed just 12 ounces. They had a Zilog Z80 CPU that ran at 3.25Mhz, and video output using an RCA video connector to hook up to a TV where it displayed text only at 22×32 resolution. There were no disc drives available for it, so you had to store the programs that you wrote or bought on cassette tapes using a standard tape player, or in my case, a ghetto blaster.

This worked more or less, as long as you turned the treble way up, and the bass way down. You did tend to lose a lot of work, but it was better than nothing. The Timex Sinclair 1000 is the North American version of the Sinclair ZX-81, from British based Sinclair Research Ltd. They are nearly identical, except for the name on the front, and minor motherboard layout differences. The first Sinclair computer was the ZX-80, released in 1980 for $200.00. It was still very popular when they came out with the improved ZX-81 in 1981. By mid-1982, Timex was selling the ZX-81, renaming it as the ‘Timex Sinclair 1000’.

The motherboard of the Sinclair 1000 had only 4 Integrated Circuit chips, including the Z80 CPU. It would have been easy for even a kid to build from a kit, but Timex never offered the Sinclair 1000 in kit form, though it’s predecessor, the ZX80, could be bought in kit form for a $20 savings.

The rest of this entry is from BYTE magazine, the January 1983 issue.

The Timex/Sinclair 1000


Billy Garrett
POB 18806
Greenboro, NC 27419-8806


Many BYTE readers own a personal computer, just as I do. And like many readers, I justify the cost of the computer by using it for word processing, mathematical programs, job-related applications, and even games. But if you’re as addicted to computers as I am, you will eventually do something that you may never be able to explain – buy another one.

Sure, I could easily explain such a purchase if my old computer was too slow or unable to do the things that the new one could, but that’s not the case at all. That excuse is reserved for some 16- or 32-bit processor that isn’t on the market yet. The fact is I suddenly found myself buying a Timex/Sinclair 1000. And what’s worse, I already own a Sinclair ZX80! Clearly, this was going to take some creative explaining.

At first, I thought I could convince people that I bought it for experimentation, but that argument is a little shaky. I concluded that the only way to justify the purchase was to write a review of it.

As most of you know, the Timex/Sinclair 1000 is essentially the same as the Sinclair ZX81. What you might not know is that all along Timex has been building the ZX81 for Sinclair. Under either name, the Sinclair people seem to have outdone themselves in designing it. It is similar to the older ZX80, and ZXSO users can upgrade their computers to the full capabilities of a T/S 1000.

In this review, I will first give you a general idea of what the unit is like. I’ll then take you on a trip through the inner workings of the hardware. Finally, I’ll try to compare the BASIC interpreter against some known standards. When I’m finished, I hope you’ll see why the T/S 1000 fascinated me, and why I bought one.

General Characteristics
The T/S 1000 comes completely assembled and tested for $99.95. At one time, if you wanted to save $20 and spend a few hours assembling a computer, you could have ordered the Sinclair ZX81 kit. But Sinclair has now stopped selling the ZX81 and has allowed Timex an exclusive market in the United States. You can expect the new Sinclair Spectrum color computer to be handled in the same way. Sinclair will sell them exclusively for a while, and Timex will then take over the marketing.

The basic T/S 1000 package consists of the unit shown in photo 1 plus patch cords for a recorder, a connection wire and switch box for your TV, a manual, and a transformer. An optional 16K-byte RAM (random-access read/write memory) pack is also shown in photo 1.

The computer is easy to set up and use. Clear instructions show you what to do, and practically anyone should be able to set the computer up quickly. The accompanying manual is well written. Although it is not too simplistic, people with no knowledge of computers will be able to read it.

The T/S 1000 must of course be hooked up to a television set to be useful. The display, made up of black characters on a white background, has 24 lines with 32 characters per line. The two bottom lines, however, are used by the BASIC interpreter. Therefore, you really have only 22 lines. Within the character set are several graphics characters that are useful for games and charts, The cursor on the screen acts as a prompt and appears ar a reverse video K, L, F, G, or S, which shows how the computer is going to interpret the next key entered. It will be interpreted as either a keyword, a letter (or number or symbol), a function, a graphics symbol, or a letter to correct a syntax error (if you make one, that is!).

Photo 1: The Timex/Sinclair 1000 computer with the optional 16K-byte RAM pack, which attaches to a connector on the right rear of the computer. The basic unit powers the RAM pack. (Photo courtesy of Timex Computer Corporation.)

The cassette interface is simple and reliable. You can name programs when you save them, and have the computer search through the tape and find a specific one, or just load the next one found.

The most restricting thing about the computer is the keyboard. I am used to typing, and it is impossible to type on a keyboard as small as this one. Also, each key can signify up to four things (a letter, a BASIC keyword, a function, or a graphics symbol). Although the keys are well marked, it is hard to remember which key does what. Some of the keywords, like Delet’e and Edit, are in awkward places. The keys themselves provide almost no tactile feedback and are closely spaced; you constantly have to look at the screen to see if you have pressed the right key.

At A Glance

Name
Timex/Sinclair 1000

Manufacturer
Timex Computer Corporation
POB 2655
Waterbury, CT 06725
(203) 574-3331

Price
$99.95

Dimensions
6 5/8- inches wide by 7 inches long by 1 1/2-inches high (16.8 by 17.7 by 3.9 cm)

Processor
Z80A, 8-bit, 3.25-MHz clock frequency

Memory
2K-byte RAM standard; 16K-byte RAM optional ($49.95); 8K-byte ROM included

Mass Storage
Cassette I/O, only program storage and loading; no BASIC controlled I/O

Display Used
Standard television set (RF modulator included); 32 black-and-white characters per line,

24 lines; the user cannot use the bottom two lines, which are reserved for the BASIC interpreter’s use

Other Features
Membrane keyboard; built-in modulator (for TV); includes ail cables and transformer

Documentation
l54 pages, spiral-bound manual

Software Included
BASIC in ROM

Software Options
Various application programs avaitable on cassette

Hardware Options
16K-byte RAM ($49.95);
electrostatic printer ($99.95);
telephone modem ($99.95)

Audience
Students, businesspeople, or anyone else interested in learning about computers for a very low cost

Also, although it’s hard to use the keyboard as you would a typewriter, it is not very easy to use as a calculator either. Most calculators have a Function key that accesses a function written above certain keys. With a calculator, you just press the Function key and then the key you want. The Shift key on the T/S 1000 serves the same purpose, but you must hold it down while you press the key you want. This means you have to use two hands. It would be easier if the Shift key could be used as on a calculator.

T/S 1000 BASIC is fairly easy to use. BASIC keywords can be entered with just one keystroke, but that’s the only way these keywords can be entered. Line numbers from 1 to 9999 can be used. Multiple statements per line are not allowed. Error codes and program lines start on the bottom two lines of the display and work their way up the screen. Because the error codes are displayed as numbers, you will have to look them up in the manual to see which error occurred.

A nice feature is that the names of most variables can be any length. LONGNAME and LONGNAME2 are different and distinct variables. The T/S 1000’s string- handling capabilities are nonstandard, as will be explained later. All things considered though, T/S 1000 BASIC is powerful.

Finally, the T/S 1000 has a 90-day warranty, which should help most users if they find out that their computer is actually a lemon. Timex also offers a one-year extended warranty for $12. This offer is good only for people whose warranty hasn’t run out, or those who have just had their unit in for repair. Timex even provides a computer club, open to all T/S 1000 owners, that will keep them up to date on any new developments, hardware and software products, and special offers. One last thing, because the T/S 1000 is being marketed everywhere, a good shopper can probably find it for a bit less than $99.95. I haven’t even looked hard and I’ve seen it for $87.

The Insides: The Less, The Better
The T/S 1000 uses state-of-the-art circuitry. Only four ICs (integrated circuit chips) are inside the small enclosure, as is shown in photo 2. These four ICs, along with an IC voltage regulator; two transistors; several diodes, resistors, and capacitors; a video modulator; and the membrane keyboard, make up the entire unit. One big change between the ZX80 and the T/S 1000 (ZX81) is a custom 40-pin IC made by Ferranti (a large British semiconductor manufacturer), which replaces 18 ICs that were in the ZX80 and adds additional logic circuitry. This chip is called the SCL (Sinclair Computer Logic). The new logic circuitry inside the SCL allows the T/S 1000 to display a picture continuously on the TV, even when the computer is executing a program. This is a big improvement over the older ZX80 that couldn’t display a picture while executing a program; the screen would go blank every time a program was run or any time you pressed a key.


Photo 2: The small circuit board inside the Timex/Sinclair 1000. Note that in this photo some of the chips have been put in backward so that you could read what’s on top. The silver plate on the bottom left side is the heat sink. The connector in the right rear is for expansion. The three jacks on the left side are for power, tape in, and tape out. The two small connectors that are part of the right front of the board are where the keyboard is connected. The other parts are clearly labeled. (Photo courtesy of Timex Computer Corporation.)

The Microace company sells a modification for the ZX80 that allows a ZX80 owner to have the equivalent of a T/S 1000. Unfortunately, although the additional logic board is small and contains only seven ICs, the board won’t fit inside the ZX80’s case. But if you really want the continuous display, the upgrade is only $29.95 from Microace (see table 1). It works fairly well, but the board is not made by Sinclair, and I had problems with it. Microace was prompt in responding to my request for help, but its response was that I must have assembled something wrong or that something wasn’t working properly. The latter turned out to be the case. After I replaced a 74LS00 chip, the modification board worked fine.

The basic T/S 1000 unit comes with 2K bytes of static RAM (random-access read/write memory). This is the only difference between it and the Sinclair ZX81; the ZX81 had only 1K bytes. In either case, this is hardly enough to do any serious programming because the display shares this RAM with the program. A program that fills the TV screen will quickly run out of display room when the program is run. The BASIC interpreter uses 124 bytes of the RAM for its own internal processing, and the display can occupy a maximum of 727 bytes of memory. That leaves 173 bytes for a program in the ZX81 and 1197 bytes in the T/S 1000. Of course, because the display is not hard-mapped to one location in memory, it occupies only as much memory as it really requires.

In addition to the RAM, there is an 8K-byte ROM (read-only memory) chip in which the character generator for the display and the BASIC interpreter reside. The character generator occupies about 512 bytes of the ROM; the rest is used for the BASIC interpreter and the I/O (input/output) procedures.

The central processing unit not only has to execute the BASIC interpreter, but also must handle the TV display. This is accomplished through a clever arrangement. After each instruction is fetched from memory and executed, the display circuitry accesses the ROM and loads the bits

Information on the flicker-free board for the Sinclair ZX80:

Microace
1348 East Edinger
Santa Ana, CA 92705
(714) 547-2526

Monthly newsletter:
Syntax
The Harvard Group
RR 2, Box 457
Harvard, MA 01451
(617) 456-3661

Bimonthly magazine:
SYNC (Published by Creative Computing)
39 East Hanover Ave.
Morris Plains, NJ 07950
(201) 540-0445

Schematics, etc.:
Heuristics
25 Shute Path
Newton, MA 02159

Table 1: The addresses of some companies that might be of interest to owners of the Timex/Sinclair 1000 or the Sinclair ZX81.

of the character to be displayed on the screen. The bits are then serialized and sent to the TV with that custom-made 40-pin logic chip. The processor must coordinate this activity, which requires a lot of its time. Because of this, the T/S 1000 offers two modes of operation available to the user: SLOW and FAST. When the unit is turned on or when a NEW command is executed, the display enters the SLOW mode. This means that the display is on continuously, even during the execution of a program. If you do not need to have the display on all the time, you can use the FAST mode. In this mode, the display is on only when a program has finished running or when the unit is awaiting input. The manual states that the difference in execution speed of the two
modes is a factor of about four, but in every test that I have run the difference is almost a factor of six. I haven’t run any benchmark programs, but even in the FAST mode this is about the slowest BASIC interpreter I have ever used.

The design of the circuit board is interesting. The current revision has provisions for different types of RAM chips to be plugged into the board. The ZX81s came with two 2114 chips, for a total of 1K bytes. The T/S 1000 uses a single 2K-byte RAM chip. When you need more memory, you can buy the 16K-byte RAM pack for $49.95.

One of the most exciting things about the T/S 1000 circuit is that the ROM socket was designed so that larger-capacity ROM chips could be plugged in. If you are familiar with the standard ROM pin arrangements, you know that with a 24-pin package the maximum size of a standard, nonmultiplexed, byte-wide ROM chip is 8K bytes. Well, Sinclair has already wired the board for a 28-pin package, which would allow a 16K-byte ROM chip. Although Sinclair has not commented on the possibility of a 16K-byte ROM for the T/S 1000 or its successor, you can be sure that someone is thinking about it. A 16K-byte ROM would increase the capabilities of the T/S 1000 greatly, but it may be a while before we hear anything about that possibility.

Unlike the keyboard in the ZX80, the T/S 1000 keyboard is not an integral part of the main circuit board. It thus can be easily replaced, and Sinclair could design a more conventional “full-travel” keyboard and offer it as a replacement. I, for one, would like a better keyboard; and with more than 200,000 T/S 1000s and ZX81s in existence, Sinclair stands to make lots of money on any good accessories. Current plans, however, include only a printer and a modem.

T/S 1000 BASIC
The new 8K-byte BASIC included in the T/S 1000 is remarkably powerful for being just 7.5K bytes long (remember that the character generator occupies 512 bytes of ROM). Tables 2 through 5 list all the available commands, while table 6 includes some commands that are common for BASIC but not implemented in this version.

Function Type of Operand (x) Result
ABS number Absolute magnitude
ACS number
(-1 <= x <= 1)
Arc cosine in radians
AND binary operation
AND
A AND B
= A (if B0)
= 0 (if B = 0)
ASN number
(-1 <= x <= 1)
Arc sine in radians
ATN number Arc tangent in radians
CHR$ number (0 to 255) The character associated with a given code
CODE string The code of the first character in string (or 0 if x is the empty string)
COS number (in radians) Cosine
EXP number Exponential function (ex)
INKEY$ none Scans the keyboard once and returns the character if a key is pressed or returns the empty string if no key is pressed
INT number Integer part (always rounds down)
LEN string Length of string
LN number (x >= 0) Natural logarithm
NOT number NOT x
=0 (if x 0)
=1 (if x=0)
OR binary operation A OR B
=1 (if B0)
=A (if B=0)
PEEK number
(0 <= x <= 65535)
The value of the byte in memory whose address is x
PI none 3.14159265
RND none The next number in a pseudorandom sequence of 65,535 numbers
SGN number Sign of the number ( – 1, 0, 1)
SIN number (in radians) Sine
SQR number (x => 0) Square root of x
STR$ number The number x returned as a string
TAN number (in radians) Tangent
USR number
(0 <= x <= 65535)
Calls the machine-code subroutine whose start address is x; on return, the result is the contents of the BC register pair
VAL string Evaluates the string as a numerical expression
“-“ number Negation
Table 2: Some of the functions found in TlS 1000 BASIC.
Symbol Operation
+ addition
subtraction
* multiplication
/ division
** raising to a power
= equals
> greater than
< less than
<= less than or equal
>= greater than or equal
not equal
Table 3: The binary operations
included in TS/1000 BASIC.

The manual does a good job explaining the language, and it is interesting to note how this manual was developed. First, there was a British version for the Sinclair ZX81, which naturally tended to use British colloquial expressions. That manual was much more interesting than the subsequent American Sinclair or Timex versions, although all are equally informative. For example, at one point the author of the British version refers to photo 2 and writes, “As you can see, everything has a three letter abbreviation (TLA).” I thought this was a rather amusing comment, and most of the examples are humorous also. This is a good way of making the novice feel a little more relaxed while he or she is trying to learn what all those darn abbreviations are for. Unfortunately, the humor was carefully excised from the American manuals, even though the manuals are exactly the same in content and number of examples. Any one of these manuals, however, is an excellent introduction to BASIC. The many examples and exercises should make it easy and fun to learn.

The manual is mostly devoted to BASIC, but it also covers some rather intricate details of the BASIC interpreter. One interesting point about the manual is that it not only tells you which bytes in memory are used, but also what they are used for. This documentation is helpful if you are going to write any machine-language routines. This is a useful piece of information for them to include, something that many other companies can’t or won’t do because of their agreements with the authors of their BASIC interpreter.

T/S 1000 BASIC does differ substantially from the Microsoft variety that many of us are acquainted with. This BASIC was apparently written by a group of Cambridge (England) mathematicians. The biggest improvement that this 8K-byte ROM has over the 4K-byte ROM that was standard in the ZX80 is that this version handles floating-point numbers. Also included are the usual functions, such as SIN, COS, and LN, that are standard with most BASICs. This version, however, suffers from one really bad problem – string irregularities.

Most people who have used BASIC are accustomed to string functions like LEFT$, RIGHT$, MID$, or other functions like these. For example, LEFT$(NAME$) allows you to examine the first letter of a name. But the T/S 1000 uses what they call slicing notation. A few examples will clarify this immediately:

LET A$ = “SINCLAIR”

PRINT A$(1 TO 8)
would print: SINCLAIR

PRINT A$(3 TO )
would print: NCLAIR

PRINT A$(1 TO 1) + “ILLY”
would print: SILLY

Command Function
AT Used in a PRINT statement to specify the position of the cursor.
CLEAR Deletes all variables, freeing the space they occupied.
CLS Clears the display file.
CONT Continues if the program has any executable lines left.
COPY Copies the contents of the screen to the printer. The COPY command will not change the display.
DIM Reserves enough memory for an array of the given dimension and deletes any arrays already set up with that name.
FAST Increases execution speed by turning the display off when a program is running.
FOR a = x TO y STEP z Executes a FOR/NEXT loop and deletes any other variable that will conflict with the loop variable a; will count from x to y by increments of z.
GOSUB Pushes the line number of the GOSUB statement on a stack and calls the BASIC code starting at that line number.
GOTO Jumps to the specified line or the next one after that number.
IF exp THEN s If exp is true, then s is executed, and s must be a statement.
INPUT v Stops and waits for the user to input an expression.
LET The variable assignment statement.
LIST Lists the program on the screen.
LLIST Same as LIST, except that it goes to the printer.
LOAD f Loads a program called f. Loads the first program if f is null.
LPRINT Same as print, except routed to the printer.
NEW Deletes any program lines and variables, setting aside all memory up to the top of available RAM or to the system variable RAMTOP, whichever is lower. Also enters the SLOW mode.
NEXT Ends a FOR loop.
PAUSE n Stops computing and displays the display fiie for n frames (at 60 frames per second) or until a key is pressed.
PLOT x,y Blacks in pixel x,y and moves the print position one space to the right of that pixel (resolution: 64 by 44).
POKE m,n Replaces byte at location m in memory with byte n.
PRINT Prints whatever you specify in the print statement on the screen.
RAND Seeds the random-number generator.
REM Makes that line a comment statement, which is ignored by the computer. This is useful for placing machine-language subroutines in REM statements since they don’t move about in memory.
RETURN Pops the number from the GOSUB stack and returns to the line after it.
RUN Runs a program beginning with the line you specify, or the beginning if you don’t.
SAVE Saves the program, variables, and other system information on tape.
SCROLL Scrolls the display file up one line, replacing the bottom line with a NEWLINE character.
SLOW Leaves the display on all the time, even during the program execution. The computer powers up in this mode and returns to the SLOW mode whenever a NEW command is executed.
TAB Prints at this position, Must be used in a PRINT statement.
UNPLOT x,y Whitens out the pixel x,y.

As you can see, the slicing notation takes the number of characters that you specify in the range given in parentheses and prints them. If the first or last number is left off, it assumes the beginning or the end of the string respectively. This is not at all hard to get used to, but it is nonstandard.

One really good feature is that the strings can be any length, but string names are limited to one letter followed by the string symbol “$”. You can get more than 26 strings, though, by dimensioning them. When you do so, however, you must specify how many characters are going to be in each string. For example, if you type DIM X$(2,20), you get two strings each with a length of 20 characters. This too is nonstandard for BASIC.

One bad point about the T/S 1000 is its lack of compatibility with the old ZX80 programs (written using the 4K-byte ROM). The programs will run, of course, but the user must make some minor modifications, type them in again, and save them on cassette tape.

As a cassette-based machine, the T/S 1000 has certain limitations. For example, this BASIC does not allow you to save values of some of the variables without saving all the variables and the program too. In fact, the entire state of the machine is saved when you execute a SAVE command, so that you can get right back where you were after loading the program and typing CONT. This limitation of the SAVE command makes the T/S 1000 difficult to use with programs that require saving data, but it is convenient for the novice. One limitation is that the SAVE command must not be nested inside a GOSUB. Another limitation is that cassette I/O is slow, and the T/S 1000 is not a likely candidate for a floppy-disk interface mainly because of the expense. Certainly, a floppy disk could increase the capabilities of the T/S 1000, but who would buy a controller and disk for $400 when the basic computer was only $100? But we don’t know what Clive Sinclair will be up to next… a microfloppy for $100?

The actual process of entering a program is easy for the novice but exasperating for the experienced computer user, because BASIC keywords can be entered only by using a one-key abbreviation. If you want to enter RUN, you just press the R key and then the NEWLINE key, instead of pressing R, U, N, and then NEWLINE. It will take a while to learn the location of each keyword. Some are in awkward places. The RUBOUT (delete) key is a shifted 0. Frequently, I forget to press the Shift key before I press the 0 key.

Command Function
EDIT Edits the current line.
Up arrow Moves the current line back one.
Down arrow Moves the current line forward.
Right arrow Moves the cursor forward.
Left arrow Moves the cursor backward.
BREAK Stops execution of a program.
NEWLINE Terminates every line.
RUBOUT Deletes the last character or keyword.
GRAPHICS The next keys pressed will be interpreted as graphics symbols.
FUNCTION The next key pressed will be the function written below the key.
Table 5: Editing commands found in T/S 1000 BASIC.

AUTO LINEINPUT
DATA MEM
DEFSTR MID$
DEFINT ON ERROR
DEFSNG ON x GOTO
DEFDBL PRINT # (to cassette)
ELSE READ
FNDEF RESTORE
INPUT# RIGHT$
LEFT$ USING
Table 6: Some common BASIC commands
missing from T/S 1000 BASIC.

Like the ZX80, the T/S 10

00 has 40 keys. The keyboard can be accessed in a BASIC program either through an INPUT statement or through the INKEY$ function.

One more nonstandard feature is that the character code set is totally unique to the T/S 1000; it’s not ASCII (American Standard Code for Information Interchange). For example, in ASCII the letter “A” is represented by 41 (hexadecimal); the T/S 1000 refers to the same letter as 26 (hexadecimal). Making this unit into a terminal would take a little hardware and a considerable programming effort.

If you want more information on the T/S 1000, ZX80/ZX81, or the Microace computer (no longer made), see table 1 for addresses of these companies. Also, two other articles on these computers have appeared in BYTE. They are “The MicroAce Computer” by Delmar Searls, April 1981, page 46, and “The Sinclair Research ZX80” by John C. McCallum, January 1981, page 94.

Conclusions
Although T/S 1000 BASIC is different, it is powerful for such a small, low-priced computer. I think that anyone who buys it won’t be disappointed. It does, however, suffer from its lack of standardization and omission of powerful BASIC functions. The TV interface works very well, and the display can easily be read on almost any TV. The membrane keyboard makes the computer difficult to work with for long periods of time. The cassette is easy to use for simple program storage, but it is limited and will hamper many application programs. The major use for this computer will probably be for learning about BASIC or computers in general. The computer itself has limited expansion capabilities, and the keyboard is too small and cramped for any serious work.

The Definition of Cold Front

If you’ve ever wondered what a “Cold Front” is, maybe this picture can help to explain it. It’s going to be 47 degrees here in Wisconsin today, so a lot of our snow will probably melt. But look at tomorrow… Our high will be 9! Oh the joy of living here, you just never know what to expect from Mother Nature.
In other news… I am looking for a new job and had several phone interviews and one face-to-face interview last week, and now have many very good prospects. It looks like the career change to driving a truck may be on hold 🙂

The one real interview was very interesting. It was with Solidworks, a company that develops 3D CAD (Computer Aided Design) applications, something that I have always really loved. I would probably be placed in their Labs group, developing new ideas that may or may not make it into the product, testing new technology and developing it. This would be VERY cool, I am quite sure I would really love this type of work. Development would likely be done in C++ and C#, and I have a friend that has worked there for a year and a half and he really loves it. I may even have the opportunity to learn Macintosh development, something I have wanted to learn for years. It would also be a great chance to hone and develop my own complex math and geometry skills, something I have not used at all since college but was always told “you need to know this stuff”. Maybe they were right…

I also spoke with Inacom about an in-house development position. This is where Paul Heuring works and he referred me to this position. It too sounds fun, but we have not yet progressed to the actual interview stage, though I am hopeful that will happen this week. This position would be pretty close to ideal too, working on multiple short-term type projects in a wide variety of fields, using various development tools. It does not sound like it would get boring quickly at all.

After initially being contacted by their recruiter in California over a week ago, I finally did get the chance to speak with one of the two local hiring managers at Quest Software. Quest is where a very good friend of mine works, and they create some wonderful tools mostly to fill voids in major application vendor products (Microsoft, Oracle, etc). This would primarily be a C++ development position. The manager that I spoke with late Friday is not the one that I need to speak with. The manager that is looking for developers lost his voice, but the other one wanted to make contact with me to let me know the other definitely wants to talk to me, hopefully early this week. That was very nice of him to let me know that, and we had a very nice hour-long chat about the company and the type of development they do out of the Madison office. One very positive thing to come out of that conversation was learning that they practice and preach “Test Driven Development”. In essence, they practice quality, they do not just preach it!

So that is where things stand now. Nothing concrete just yet, but I am very hopeful that I will ultimately have a decision to make between multiple offers, possibly as early as this week.

In other news, my mom turns 60 tomorrow! That is wonderful, but it also means I turn 40 in 2 weeks! Not so wonderful 🙂 We went to Bill and Bonnie’s Christmas party yesterday. This was the first Christmas without Mike Gullickson, (Bonnie’s son, Heidi’s brother, and Halle’s dad), since he was killed last February in a snowmobile accident. Paul and Heidi Heuring were there with their kids, so Paul and I talked “shop” about the job above, but we also played Ping Pong and had a few “interesting” drinks. Everyone had a real good time, but I know Christmas this year without Mike will be hard on everyone in the Gullickson family, especially Halle.

I do wish money grew on tree’s! All of the girls want these new sub-notebook computers for Christmas, like the Acer One. They are real notebook computers, but have 9″ screens and run Windows XP. They are very cool! They also cost $350 each, which isn’t bad, until you multiple by 3! 🙂 All I want for Christmas is a good job, and an iPod Touch!

When Did Programming Become So Boring?

When I was a kid in the late 70’s and early 80’s I got addicted to computers. Not just computers, but programming specifically. Some of my friends were really into the hardware, contrasting the benefits of the 6809 processor in their Tandy to the “lowly” 6502 in my Commodore VIC-20. I countered that I had the same processor in mine that the great Apple IIe had, so my computer must be just fine. We were all wrong, and in the end all of our little spats amounted to nothing. The Intel 8086 and 8088 CPU were the best, though none of us could afford computers (the IBM PC) that had those chips.

But how we loved our little computers, and spent all of our waking hours (including those we should have been sleeping), hacking on them, learning fast and furious. My best friend Dave was seriously into hardware, so he was always messing with electronics and built his own Heathkit computer. I was obsessed with how to program these little beasts, and buried myself in 6502 assembly language programming and BASIC.

I had a few books and a lot more magazines, and learned how to program by having Dave read source code to me from Compute’s Gazette magazine while I furiously typed it into the VIC-20. We even developed our own variant of the English language to make this process go faster. For instance, Dave would say “Set C string to 1″, to which I would enter C$=”1”. The intended end result was usually a simple game we could play on the VIC-20. The actual end result was often a complete waste of time, because either the program did not work, the cassette tape drive failed while I was trying to save our work, or the game was just plain boring. So it was a waste of time, right?

Not at all. Even though the program may not have worked, I was learning to program a computer. As my own knowledge expanded, fixing the bugs became easier, and finally second nature. I learned to recognize them as soon as I typed them and would say “Dave, you sure about that?” To which he would normally respond, “Sorry dude, that should be GOSUB not GOTO”. The programs usually worked much better.

Eventually I got bored with typing in other peoples code and started coming up with my own creations. I learned about POKE and various other “advanced” programming concepts including CPU registers and memory mappings. So now I was changing the font that was displayed when I typed letters or making the screen show boobs in 4 colors. Life was good!

Then I learned a little more about hardware and made a circuit board with a relay (all purchased at Radio Shack for pennies of course) that I could send current to via a POKE into a memory address. Some address in the VIC-20 when set to 1 would cause a small voltage to go to the external expansion port. I learned it was enough current to switch a relay, which could then pass 12 volts from a car battery to a model rocket engine igniter. This was cool! Now I had a T Minue 10 Second counter program that when it got to 0 would launch a rocket! I was 12 years old and a freakin’ rocket scientist!

The I got my mom to buy me a 110 baud modem so that my computer could calls Dave’s, which was located 3 houses down from mine. We had to write our own communications software, so I wrote 2 versions, one for my VIC-20 and another I wrote on Dave’s Tandy Model 3. It only took about 1 day to write the software, but probably 3 more weeks before our computers could actually “talk” to each other, but they did. Holy crap this was fun! We had two computers talking to each other over a telephone line! This was crazy stuff back then.

Then Dave got a girlfriend, damn him. Never to fear, my other friend Evan was as big a geek as me, though his area of expertise was in electronics, and bomb making. A couple software changes later, from Evan’s computer we could launch a model rocket attached to my computer from the other side of St. Louis!

Could we put one of Evan’s bombs in a model rocket and launch it from the Apple IIe lab at our high school? We did not know the meaning of “rhetorical question” at that age. The answer is YES! YES you can put a small bomb in a model rocket that has enough Estes D12-0 engines, and launch it from the football field while safely in the confines of the school computer lab. And yes, when the bomb goes off at 500′ you can still REALLY hear it. Yes, even though we were laughing our asses off, we still managed to run all the way to my house before the cops showed up. We never got busted for that one, I’m pretty sure the statute of limitations is up by now.

That summer, probably the summer of 83′, I got my first real computer programming job at the age of 14. My dad ran a bunch of jewelry department stores and they needed a way to print those little price tag things that are attached to rings and watches and such. Not only would I get paid $2/hour (probably by my dad, not the company), but I would get to program on the most excellent computer EVER MADE, my dad’s company had an IBM PC! I could hardly wait for my first day of work.

My dad gave me the specifications, likely the first “Functional Spec” I ever had. 3 lines of text had to be printed on these little stickers, a stock or item number, some other number, and the price. I was sort of upset, it only took me an hour or so to create the software that would print those labels. I modified it to let people enter the information before printing, be able to print many of them at once, save their settings, etc. But in the end, it really only took me a couple of days before I had achieved what they needed. I fumbled around the office for a few more days, playing with the TTY machine and its thermal printer and 300 baud modem, and made my VIC-20 call the TTY and use it like a remote printer. It was fun, but the goal had been achieved. Back to $1.85/hour at Baskin-Robbins working for the child sex offender, Mr. Burns 🙂

In late 84′ we moved from St. Louis to Charlotte, NC. Nobody there was into computers. When I went to school I sort of learned why. I was in the 10th grade and they were learning the stuff I had learned in St. Louis in 3rd grade. For whatever reason, depression over moving, new friends that did not share my love of computers, something, I just quit playing with computers. I packed them up and put them away and did nothing with computers until 1988, when out of boredom in college I pulled my IBM PC Jr. out of storage and started banging away on it again. Fast-forward 20 years, I am still banging on computers.

I have often heard “The good old days were not as good as you remember”, and this is probably true. I look back at that period of my life as some of the best times I ever had, though at the time it probably did not seem that way. 20 years from now I will likely look back on today and remember it fondly, though that is now it feels right now.

I miss the challenges of constant and rapid learning. Sometimes I even think I lack the desire or even ability to grasp new things. Maybe my brain is full, I cannot fit anymore “stuff” in there. New programming languages come along, new environments to play in, but it is all the same, over and over again.

New ways of doing the exact same thing I have been doing for 20 years. Show a screen, get the user to enter some stuff, validate it, show errors, dump it into a database, repeat. We had DOS with text mode screens. Show a screen, get the user to enter some stuff, validate it, show errors, dump it into a database, repeat. Then we had Windows and Mac OS. Show a screen, get the user to enter some stuff, validate it, show errors, dump it into a database, repeat. Now we have the web. Show a screen, get the user to enter some stuff, validate it, show errors, dump it into a database, repeat.

Where is the fun? Where is the challenge? When Did Programming Become So Boring?