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.

Thursday, June 20, 2013

TS1000 Meets a Modern TV

So you want a Timex Sinclair 1000 but need to hook it up to a modern TV (in the U.S.). Well, there's an RCA/phono jack on it, so you can just hook it up to the composite video connection on the TV, right? Not so fast! Phono plugs were used for many RF applications in the 80's. The video from the TS1000 is an RF signal that we would expect to see from a modern CATV/antenna cable (coax with an 'F' connector). We need an adapter to plug it into the CATV/antenna jack of a modern TV. The adapters provided with the TS1000 won't work. Fortunately, you can buy the correct 'F'/RCA adapter from RadioShack for less than $4. This adapter plugs into the back of the TS1000 and you can use a standard CATV/coax patch cable to connect from the adapter to the TV. Then set the TV to channel 2 or 3 depending on the position of the channel selection switch at the bottom of the TS1000.

You can modify the TS1000 to output composite video, but the RF signal is good enough for most purposes.

Ok, now you know you can buy a TS1000 for less than $40, and you know how to hook it up to your TV. So, if you don't have one, go out, get one, and join me for the RetroChallenge!

Sunday, June 16, 2013

Timex Sinclair 1000 Background

Yes, the power is overwhelming.

The Timex Sinclair 1000 is pretty much a Sinclair ZX81 made for the North American market with 2kB of RAM and NTSC RF video output. Like the ZX81, it has a 3.5 MHz Z80A 8-bit processor and 8kB ROM with a BASIC interpreter. Its quite simple and very small compared to an Apple II. It is about the size and weight of a Kindle Fire HD. At a list price of $99.95 when introduced in 1982, it also cost about the same as a Kindle in 2013 dollars. Its small size and low price led to some limitations, most notably the small membrane keyboard, limited graphics and no sound.

I don't think I had ever heard of a Timex Sinclair until very recently, most likely due to following some of the RetroChallenge entries. You can get a working TS1000 for about $40 on ebay without trying hard. I found a fairly complete setup, advertised as working (more on that later), for less than $25 shipped so I just bought it. A Zilog Z80 based computer at such a low price was too much for me to resist. Considering the prices Apple IIs are fetching on ebay, the TS1000 is an affordable introduction to retro-computing, just as it was an affordable introduction to modern computing back in the 80's. This is the first vintage computer I have owned that isn't an Apple. I don't think my marriage can afford me expanding my computer inventory, so I don't plan on keeping this guy very long. (It is small enough to hide inside an Apple II though...)

Friday, June 14, 2013

RetroChallenge 2013SC

Welcome to my new blog. The RetroChallenge inspired me to start a new retrocomputing specific blog here. I will be moving my previous retrochallenge stuff from my other blog MacLCD over to here in the coming weeks. First, a list of goals for RetroChallenge 2013 Summer Challenge:
  • Repair the Timex Sinclair 1000 that I recently bought on a whim (and for less than $25 shipped!) from ebay. Then I will try to write a game for it in BASIC. Assuming I get it all working I will offer the computer up as a prize in the RetroChallenge.
  • Finish fixing my Apple IIGS Upgrade computer.
Since I have a busy month at work I'm going to keep my goals within reach for this challenge.

Tuesday, February 5, 2013

Updated AII-SPI-DSK source

I uploaded an updated source code archive for AII-SPI-DSK. I accidently made an error that I didn't test when I transfered over to the Intel Mac. It should run fine now.

Friday, February 1, 2013

Quick Update

Updated the downloads for the USB_AII_Disk_Emulator after moving the project to an intel mac and recompiling.

Wednesday, January 30, 2013

RetroChallenge 2013WW Review

This has been a fun month. I am really excited that I completed one project and hopefully provided a useful tool to the Apple II community.

Disk ][ Emulator: I just uploaded the USB AII-SPI-DSK executable and schematic. The binary is compiled for x86_64.

AII-SPI-DSK project source code is now available too. The code requires user to have libusb, libftdi and libmpsse already compiled and installed. Once you get past the Xcode project format, the code should be pretty portable to other platforms. Most of the coding was done fast and dirty, so please excuse the unavoidable errors.

The USB AII_SPI_DSK Disk ][ Emulator is by far my most complex electronics project I have ever taken on. Fortunately, the Apple Disk ][ controller card is pretty flexible with the input it can take, or I would have never completed this.

I didn't quite reach my lofty goals on this project, but I did end up with a good proof of concept and a handy device in its own right. And, because this project uses a standard SPI stream, I should be able to easily create a micro-controller based solution that actually uses an SD card! The Retro icing on the cake for this project is using 2 ICs recycled from an old Apple II+ for my build.

Apple IIe Platinum: Living a new dust-free life.

Apple IIGS: Still rusty and in pieces. A little closer to living though.

Apple //c: Still neglected with 255 ROMS. I didn't even get to think about this project.

Take a minute to check out the RetroChallenge website and see what the other participants worked on.

Monday, January 28, 2013

Karateka! and Schematic



I can die happy. After spending most of last night and this evening making small speed refinements to get a Karateka disk image to work, with no success, I tried a different disk image file and... Kiai! I have no explanation why one works and the other doesn't, especially since they both work on Virtual ][. (UPDATE: Karateka only loads from Slot 6, Drive 1; I was trying to load from slot 7) In any event, my program can now transfer 2 disk sectors in a single USB transfer. Just about every disk image I have tried works now. If there is a disk image that doesn't work, there seems to be another copy of it out there that does. Not so different than loading up pirated games on an Apple IIe back in the 80's.

I forgot how fun the original Mario Bros. game is. I definitely need to invest in a color monitor though.
I cleaned up my schematic. I think I could probably reduce the part count a little more, but these ICs are cheap and easy to find. Note that I broke out the write protect signal. With every bit transfered out representing a data bit, I don't have room to multiplex the write protect signal into the SPI stream.  You can also pull this to ground or the Phase 2 signal for write protected or write enabled, respectively.