Thursday, July 25, 2013

Working BAM

I have a working game! Lots of features aren't implemented yet, like scoring and auto clearing areas, but it works! I learned some interesting tricks to reduce the memory size. One of the most novel I found online is for moving a cursor:

20 LET Y=Y+(INKEY$="6")-(INKEY$="7") 25 LET X=X+(INKEY$="8")-(INKEY$="5")

This little snippet replaces 4 lines of normal IF, THEN code by taking advantage of the fact that the INKEY$ comparison resolves to 1 or 0. Adding and subtracting the result for the various keys moves the stored cursor coordinates. I have to say, I really like the Sinclair implementation of BASIC. It has some printing and comparison features that are lacking in Applesoft BASIC. However, the only thing that made programming bearable was writing out the entire program before trying to enter it. Data entry and minor editing is not too bad, but trying to think out a program on the TS1000 is not fun. I will make the source and a download available shortly.

Wednesday, July 24, 2013

3 Revelations

Programming the TS1000 is like programming punch cards

Well, I have never programmed a punch card computer, but after several days of total frustration trying to enter, test and edit a BASIC program on the TS1000, I gave up. I haven't completely given up *BAM*, I am just writing it on my MacBook, in a text editor, and then entering it into the TS1000. This reminds me of how programmers used to have to write out their programs before trying to enter them on a punch card. The TS1000 is too slow to provide a good interface for stream of consciousness BASIC program editing. By the time I get a line entered, I forget what I was trying to do. I have spent many hours working on a simple program which I could have probably finished in just a few hours on an Apple II. I'm sure that machine language programs for the Z80 processor are really the TS1000's strong suit, but unfortunately, that's not what I'm working on.

Know your data types

I was running out of memory very quickly when setting up the game board for minesweeper. The board is represented by a 12x12 2-dimensional array of numbers with values 0 to 9. Little did I know that a number in Sinclair BASIC is represented by 5 bytes. As a result, I was using 720 bytes of memory, over a third of the memory of the TS1000, just to do some basic addition on the numbers. Instead I will use an array of strings. It too is a 2-dimensional array, but should only take up 144 bytes, plus some overhead. The result will be a slower program (to convert from character to number and back), but way less memory use.

Minesweeper has been done on the ZX81

Finding some existing minesweeper programs online for the ZX81 was a bit disappointing. However, I don't think either of them run in the standard 2k of memory for the TS1000 (although I haven't tried either of them). Even though I received my RAM chip for the upgrade, I really want to get this running in the standard configuration. So I'll keep working on this thing.

Sunday, July 21, 2013

Report Code 4

...means "Not enough room in memory." Great. My menus were working perfectly, and I started on the actual minesweeper game logic, when I started getting report code 4 errors. So, there isn't enough room in RAM for a menu and the game. Even reducing the size of the menu names didn't help much. I will be spending the next hour deleting my last 2 days worth of work. One last picture of completed menus for posterity:

Saturday, July 20, 2013

Even FAST is SLOW

My BAM minesweeper menu system is now fully functional. Ugh, I should be done with the whole program by now. Keyboard entry on the TS1000 BASIC editor is incredibly slow. I am used to the membrane keyboard now, but you still have to wait for the screen to refresh before entering a new character, even in fast mode. Also, the editor is acting funny lately and not allowing me to EDIT existing lines. Maybe I am having memory issues?

SAVEing and LOADing is working extremely well with Audacity. I have set up a sort of version control with the audio clips. Audacity lets you mute and minimize clips as you go, and save many clips in the same project. So, I can keep all of my old saves in one project, and still play and record just the latest audio clip.

Finally, I ordered the SRAM chip I need to upgrade the RAM on the TS1000. That should be a fun project, if it arrives in time.

Friday, July 19, 2013

BASIC Programming TS1000 Style

I've picked a name for my Minesweeper program: "**BAM**" (British American Minesweeper). This is a nod to the British/American collaboration that is the Timex/Sinclair 1000, the British/American nature of my American entry into the British organized Retrochallenge, and the British American Minesweepers of WWII, known as BAMs. And of course, when you hit a mine it goes "BAM!" Well, maybe not on the TS1000, because it doesn't have a speaker. The screenshot shows my menu system up and running.

I'm getting the hang of programming on the TS1000. Progress is SLOW. A few tips I have learned:

  • Enter the FAST command to greatly speed up screen refresh during BASIC program editing. Also, the resulting screen flash during redraw gives some feedback as to whether the computer received the key you are typing.
  • Use the LIST command with a line number to jump to that line and scroll the editor there.
  • If the program is no longer outputting text, it is probably because you spelled out "AT" or some other keyword, rather than using the correct key.

I really hope game play is faster than BASIC program editing.

Thursday, July 18, 2013

Success SAVEing & LOADing

I bought the adapter I needed to convert from the mono headphone jack on the TS1000 to the RCA/phono jack on my iGrabber USB audio/video capture device, and then I promptly lost it before I could get it home. I borrowed another one and was finally able to get everything hooked up to my satisfaction. After a lot of experimentation I figured out a setup that gave me reliable results on my MacBook Air. I used Audacity to record and playback the audio clips.

  1. On the TS1000, input SAVE "X"
  2. In Audacity, record with the "Input Volume" at 1.0 (max)
  3. Select the clip and use the "Amplify" effect with a setting of 40dB. This gives a "New Peak Amplitude" of about -10.8 dB. (How can you have negative dB?)
  4. On the TS1000, input LOAD "X"
  5. Back in Audacity, play back at 1.0 "Output Volume" (max) and full system volume.
You can get a pretty good idea of when the TS1000 is LOADing the data by when the video changes. However, using the full 50dB Amplify Effect caused the TS1000 to appear to LOAD without error, but no data was actually there when I pressed LIST. That could have been a SAVE error though.

Finally I can start writing an actual program!

Thursday, July 11, 2013

Harsh, High Pitched Buzz!

After a little research, I learned you can't break your TS1000 by putting the 9v power plug in the wrong jack. This makes sense considering the 3 identical jacks on the TS1000 and how close they are.

I couldn't find any help with my audio problem online, so I started experimenting with the mini phone plug to phono (headphone to RCA) adapter that connects to my USB A/V capture dongle. As it turns out, the problem is with how the stereo adapter connects to the mono jack of the TS1000. One of the lines is crossed or grounded which is making a humming buzz loud enough to cover up the data audio. Connecting the tip of one of the phono plugs to the collar of the phono jack on my USB capture device gets rid of the humming. The data audio is then clearly audible (sounds like a modem). In the end, I was eventually able to SAVE a program on my laptop using Audacity, amplify it, then play it back. I haven't been able to get the TS1000 to LOAD the data again though. I'm sure many people have done this before, so I will do some more research. Also, I will try to pick up the correct mono adapter plug tomorrow.

Wednesday, July 10, 2013

Stable at Last

Sorry for the lack of updates. I suffered a particularly gruesome injury to my finger this past weekend while working on another project. Nothing a little super glue and duct tape couldn't fix.

I fixed the loose ground strap tonight. I used a soldering attachment for a propane torch which worked perfectly. My little soldering iron was not going to get hot enough to heat everything up. The TS1000 is much more stable with the strap secured, but I still don't have audio output during a SAVE command.

The three jacks on the TS1000 are identical 3.5 mm phone connectors. It seems possible that a previous owner connected the 9v power cord to the MIC jack, frying some component. I will do some research and testing tonight to try and track down the problem.

Thursday, July 4, 2013

4th of July with the TS1000

10 PRINT "HAPPY 4TH OF JULY!"

Very close to 200 years after the end of the American Revolutionary War, the American Timex Corporation and the British company Sinclair Research came together to introduce the Timex Sinclair 1000 to America. Finally, the British had brought us affordable computer technology rather than exorbitant taxes on tea.

I spent some time today updating my blog and programming on the TS1000. I am still getting used to the membrane keyboard. It is hard to touch-type without any feedback. Although I like only having to hit one key for a BASIC command, I seem to usually end up spelling out the command anyway, then having to delete my extra typing. It can be a little hard to find some of the commands the first time also.

My biggest problem is figuring out how to save my programs. I have the MIC jack of the TS1000 hooked up to my laptop, but I just hear a "soft, humming buzz", not the "very harsh, high pitched buzz" I should expect. While the humming is certainly more pleasant sounding than the alternative, I am pretty sure there is no data in there. I haven't fixed that ground strap yet, besides taping it in place, so maybe that is part of the issue.

I think I may write a Mine Sweeper type game for this little guy. It would lend itself well to text and simple BASIC programming.

Wednesday, July 3, 2013

HELLO WORLD

Let's try this again. Type:
P "HELLO WORLD"
and the screen shows:
PRINT "HELLO WORLD"
Press the ENTER key and:
HELLO WORLD 0/0

Success!

Tuesday, July 2, 2013

Back From the Dead

Wow, the TS1000 almost went into the trash can tonight. After trying to repair the keyboard ribbon cable, I plugged it back in to test my work. Unfortunately, nothing happened. I couldn't get the TS1000 to do anything at all for about 20 minutes. I thought I had killed it for sure. As it turns out, the loose end of that poorly soldered ground strap was making a connection with another component and grounding out the TS1000. Repositioning the ground strap and applying some pressure caused it to spring back to life!

Back to the keyboard... I cut the ribbon connector back slightly to undamaged traces and cut back the the surrounding plastic to fit into the circuit board connectors.

The biggest challenge was getting the old broken bits of ribbon cable out of the circuit board connector. I kept trying to insert one of the ribbon cables into the connector but there were still some tiny plastic pieces in there blocking it. I used a thin blade to get the final bits out. I ran a test and everything but keys Q-T worked! Some continuity testing showed that the ribbon cable was not making contact on pin #2 of the connector. I had bent one of the pins slightly trying get the plastic bits out so that it was no longer making contact with the ribbon cable. I used a sewing needle to bend the pin back into place and... All the keys work! I will be adding some clear packing tape to the ribbon cable to re-enforce it for the future.

TS1000 Disassembly

Well, my statement regarding the ease of this keyboard repair was apparently premature.

I am going to stay optomistic that it is just the ribbon cable at fault because this unit looks practically new and was very complete. If the issue is stress on the ribbon cable rather than damage to the membrane, I hope I can still make a repair. Otherwise, I don't think I have the fortitude to fix this thing. Onwards...

I flip the little TS1000 over to investigate opening it up only to find the warning "No user serviceable parts inside." We'll see about that... Peel the feet off, remove the 5 screws and look inside.

At first glance, I see what appears to be a ground strap that is not connected properly. It looks like a dry solder joint due to insufficient heat on the thick strap. This is almost certainly not the cause of our keyboard issues, but it will get fixed before the TS1000 is reassembled. 2 more screws to remove the circuit board and the problem is apparent.

I had thought that the ribbon cable was a separate set of wires that connected the membrane to the circuit board. However the damaged ribbon cable is part of the membrane keyboard. Fortunately, it broke right at the circuit board, leaving plenty of good ribbon cable.

Early Problems

Turning on the TS1000 is a bit disappointing. There is no boot chime, no clattering of disk drives, not even the 'click' of a switch. You just plug it in and it's on. Very appliance-like. What you do get is black text on white screen with a [K] cursor. "Now you're ready to use your Timex/Sinclair 1000!"

The keyboard layout of the TS1000 is interesting and makes writing a BASIC program quite intuitive. Each of the letter keys, when pressed at the start of a line, represents a complete BASIC command. The keys are well marked so the keyboard acts as a summary of all the available BASIC commands.

To start, I type:
P "HELLO WORLD"
and the screen shows:
PRINT "HLLO OL"

Hmm, that's not right. Clearly my membrane keyboard is having problems. About half of the keyboard works. The number row does not work at all, the second row works starting at the 'Y' key, the third row work starting at the 'H' key, and the bottom row works until the 'B' key.

I hit the Enter key and:
HLLO OL
is dutifully printed at the top of the screen.

A review of a TS1000 keyboard wiring diagram indicates that the keys that don't work are consistent with damage to several wires on the keyboard ribbon connector. It seems my "working" TS1000 purchase doesn't work so well. Apparently, this is a pretty common problem and should be an easy fix.