Category Archives: Hardware

Getting started with Roger Taylor’s “CoCo on a Chip” FPGA CoCo 3

NOTE: This is a work-in-progress. Check back for updates. I will note any revisions at the top of this article.

Updates:

  • 2017-03-19 – Fixed a typo (thanks, Roger), and minor clean up.

Cyclone CoCo – Roger Taylor’s FPGA CoCo on a Chip

In July 2015, Roger Taylor began the process of recreating a CoCo 3 system in an FPGA (field programmable gate array). Using a low-cost (less than $80) Terasic DE0-Nano development board and a custom I/O add-on board, he quickly got a virtual CoCo running. He has been continually improving the system and adding more features. His “CoCo on a Chip” Facebook group has documented this every step of the way.

Last year, I had acquired one of these DE0-Nano development boards and the RGB22VGA add-on board from Ed Snider. I was planning on using it to hook my old CoCo 3 up to a borrowed VGA monitor. But, at last year’s 25th annual CoCoFEST! near Chicago, Mark Marlette of Cloud-9 was selling his all-in-one version of this RGB to VGA adapter. I picked on of those up, and never used the DE0-Nano.

Roger recently sent me one of his add-on boards so I can finally put together my own FPGA CoCo. Let’s see how it goes…

Hardware Required

  1. Terasic DE0-Nano Development and Education Board. These list for $79 on the manufacturer’s website ($61 for academic purchasers). It comes with a retractable USB Mini cable, which will be used to program the FPGA.
  2. Roger Taylor’s Terasic DE0-Nano Upgrade Daughter Board. He sometimes has these available completely assembled for around $99 (via his e-Bay store). You can also just buy the bare boards and build one yourself.
  3. SD memory card. Currently, the project does not support SDHC cards, so you have to find an older, smaller capacity SD (SDSC) card like a 2GB. I picked up a Transcend 2GB card on Amazon for about $7.
  4. PS/2 Keyboard (and optional mouse). I have never owned anything that used PS/2, so I didn’t have an old keyboard to use. I found a cheap Logitech Classic Keyboard K100 on Amazon for $11.99.
  5. VGA Monitor. I have one I borrowed to use with my CoCo, but I think VGA ports can still be found on some modern monitors.
  6. USB Power Supply for the DE0-Nano. You can use the included USB Mini cable and use a USB power port, or use a similar USB charging cable with a Mini connector.
A cheap PS/2 keyboard, 2GB SD card, DE0-Nano and Roger’s add-on card.

About Roger’s Terasic DE0-Nano Upgrade Daughter Board

Roger’s add-on board has RAM, two PS/2 style ports, a 1/8″ audio output jack, and VGA port. There are header connectors for plugging in a module that handles the SD card, and ones for WiFi and Bluetooth. My unit has The SD card and WiFi installed. I will be ordering a Bluetooth module for wireless serial ports (they are very cheap).

The card has writing along the bottom indicating which direction it should be plugged up tot he DE0-Nano: “Faces DE0-Nano USB connector –>>”:

Writing on the board points the way to proper installation…

You can also tell orientation by the cutout in the board, which lines up with some small 2-pin connector on the DE0-Nano below:

Cutout in the board allows access to a connector below.

Software Needed

  • Roger recommends installing the Quartus II programming app. (Smaller than having to install the full Quartus II IDE).
  • You will also need to install the USB Blaster device driver, which will be found in the install directory of the programming app.
  • You also want the latest Cyclone CoCo firmware from his Facebook group. He calls it Cyclone CoCo, for reasons that will become obvious once you start using it :)

Installing

It seems the first step will be to install the Terasic software, and then hook the DE0-Nano up and load Roger’s firmware. The software is only available for Windows and Linux. Since I am a Mac user, I will either have to run it via virtualization (I use Parallels Desktop and Windows 10) or find a PC to use. I have several Raspberry Pis running Linux, so maybe that is an option as well.

After that, you will have to install a driver, and lastly you will be able to load Roger’s firmware on to the device and turn it in to an FPGA CoCo. Here are the steps I took:

Step 1: Install the free programming app.

Download it here:

https://www.altera.com/downloads/software/prog-software/121.html

I am using the Windows version, so my screen shots will be from that version.

Installing the Stand-Alone Quantus II Programmer from Altera.

This will make available a program called “Quartus II 12.1 Programmer” in the Altera 12.1 Build 177 folder.

NOTE: Your version number may be different if you are using later or earlier versions than I have. If you are setting up one of these, I’m sure you can figure that out.

Step 2: Install the USB driver.

When you plug in the DE0-Nano to the computer, Windows should prompt you for a driver. My Windows 10 did not, so I had to manually install it. If yours does, you can skip the next step and go straight to how to browse to the driver.

First, I had to open the Device Manager and find the USB-Blaster in the Other devices section:

Device Manager showing the USB section, missing the driver.

Double clicking on USB-Blaster brings up information about the device:

USB-Blaster needs a driver.

Select “Update Driver…” and then choose “Browse my computer for driver software“. You have to manually tell it where the driver will be found (inside the programmer install directory):

Select the second option so you can browse to where the driver is located.

On my system, I used the default install location and the driver was located here:

C:\altera\12.1\qprogrammer\drivers\usb-blaster\
Browse to the drivers directory inside of the programmer software directory.

Your directory names may be different, depending on what version of the software you install. Browser there, and then click Next:

The system should find the driver and install it.

Step 3: Program the DE0-Nano

Plug in the DE0-Nano to a USB port using the included cable, then launch the Quartus II 12.1 Programmer application.

Quartus II 32-bit Programmer showing No Hardware.

If your Hardware Setup box says “No Hardware”, click the Hardware Setup button and select “USB-Blaster“:

Select the USB-Blaster device.

After you close that windows, you can use File->Open to browse to and load the FPGA firmware image you downloaded from Roger’s Facebook page:

Load Roger’s firmware image.

When it is loaded, you will need to check off “Program/Configure” and (probably optional) “Verify” to enable the Start button:

Firmware loaded and ready to program.

Once those two buttons are checked, you can then click Start to begin programming. After a few moments, you should see “100% (Successful)” in the top right green box:

Programming in progress. It only takes a few moments.

Congratulations! You now have an FPGA CoCo!

Hello, FPGA CoCo!

After these steps, I plugged the device up to a VGA monitor and plugged in my PS/2 keyboard to the left port, and powered it up. It should instantly come to life with a familiar green screen, but if you have not prepared the special SD card for it yet, it will hang, trying to boot from that card.

You can hold down ESCape when you power up to bypass that, and find yourself at a nice virtual CoCo:

Hello, FPGA CoCo!

In the next part, I will figure out how to configure the SD card so I can actually load some software on it, and save any programs I create.

Until then … wow. This was easy! I can’t wait to see what all it can do. Thanks, Roger!

Sir Sound prototype, version 2.

Now working without the crystal. This is using a Teensy and one of the pins to generate a 4mhz signal. I will post a video in coming days, hopefully, as soon as I have some CoCo BASIC code talking to it.

The green and black wires running off of it wold go to a headphone jack that the cassette cable could plug in to so you could feed Sound back to the CoCo without needing to use an external speaker. AUDIO ON!

Introducing the Sir Sound CoCo Sound Card

NEW “PRODUCT” ANNOUNCEMENT

The team that brought you* the CoCoPilot DriveWire Server is proud to announce their latest innovation:

“Sir Sound”

Sir Sound is a solid-state multi-voice audio synthesizer that operates over a serial transport mechanism**. It provides arcade-quality*** sound with up to three independent tonal voices plus one white noise channel all in an external module that doesn’t require voiding your warranty to install. In fact, you won’t even need tools!

Pricing is to be announced but hopefully it will be around $50. Or maybe $30. Or cheaper. Or less if you build it yourself. Heck, we’ll probably just make kit versions available since we don’t really like to solder.

Sir Sound Configurations

  • Turnkey – This is a “plug and go” version where you just plug it in and go. No special drivers are needed, as they are already built in to both BASIC and OS-9.****
  • BYOE – The bring-your-own-everything edition is shipped as a set of simple instructions containing a parts list and how to run wires between the parts.
  • Custom – Also planned to be available are various custom configurations, like what color of case it comes in.

Pricing

We estimate the thing is gonna cost us, like, ten or so bucks to make using off-the-shelf parts ordered in small quantities from China. But, to make it a product, we really should have an integrated circuit board and a case made, which will run the costs up dramatically. Rest assured, we’ll pass those unsavings along to you!

Availability

The first prototype is in the process of being tested. Quit rushing us. We’ll let you know when it’s done.

Specs

Basically it’s a Texas Instruments SN76489 sound chip hooked to a tiny Arduino micro-controller with a TTL-to-RS232 adapter. Here’s the prototype John Strong of StrongWare sent me:

SN76849 sound chip hooked to an Arduino Nano on a neat 3-D printed platform from StrongWare.

You kinda have to use some micro-controller since the sound chip turns on and starts making sound. Something has to issue the “shut up” instruction to it. If you just had hardware to translate a serial byte in to the command, and made the CoCo do all the work, the CoCo would have to load and run a program to shut the thing up every time you powered up. Fortunately, a custom-built Arduino that handles this can be done for like $5. There are cheaper PIC chips that could do it for less.

Then, you add a MAX232 type chip that goes from the TTL signal levels of the Arduino to RS232 signal levels, or using one of these $3 (or less) boards that’s already wired:

TTL-to-RS232 adapter.

Lastly, add a CoCo serial cable (4-pin DIN to DB9), and you are set.

Prototype “Sir Sound” sound module for the CoCo (or anything with a serial port, actually).

A small program on the Arduino will monitor the serial port for bytes and then relay them to the sound chip.

By doing some POKEs in BASIC to set the baud rate, you could make music by doing things like this:

REM PLAY MIDDLE C
PRINT #-2,CHR$(&H8E);CHR$(&H1D);CHR$(&H90);

FOR A=1 TO 1000:NEXT A

REM VOLUME OFF
PRINT #-2,CHR$(&H9F);

The notes always play, so you shut them off by setting volume off. There are different channel values for each of the four channels.

I envision having a “raw” mode where the device just translates the bytes from serial to the sound chip, and a “smart” mode where you could use an API and just send note values (like 1-88 of a piano keyboard, or MIDI note values).

“Smart” mode could simplify the control so it might look like this:

REM ALL DATA: PLAY CHANNEL 0, NOTE 10, AT VOLUME 15
PRINT #-2,CHR$(&H00);CHR$(&HA);CHR$(&HF);

REM NOTE ONLY: PLAY CHANNEL 0, NOTE 10
PRINT #-2,CHR$(&H01);CHR$(&HA);

REM NOTE ONLY: PLAY CHANNEL 1, NOTE 10
PRINT #-2,CHR$(&H11);CHR$(&HA);

REM VOLUME ONLY: CHANNEL 0, VOLUME 5
PRINT #-2,CHR$(&H20);CHR$(&H5);

And, I could also add a “super smart” mode where it could parse PLAY command-style strings, then spool them in the background while you do other things:

REM PLAY COMMAND, CHANNEL 0
PRINT #-2,CHR$(&H30);"CDEFGAB";

And, a “super super smart” mode could let it store string sequences, and play them by triggering with a simple byte:

REM STORE NOTE SEQUENCE 0
PRINT #-2,CHR$(&H40);"CCDCECFECCDCECFE";CHR$(0);

REM PLAY NOTE SEQUENCE 0
PRINT #-2,CHR$(&H50);

REM PLAY NOTE SEQUENCE 0 FIVE TIMES
PRINT #-2,CHR$(&H55);

…or whatever. You could sequence them together, like MIDI sequencers do, and have complex patterns that could play in the background while the program does other things.

There are lots of possibilities. We could even see about using the Carrier Detect line as a way to tell if the sound card was still playing something (rather than needing routines to read data back from the device, which would be doable but not from BASIC without assembly language code).

If this “sounds” fun to you, leave a comment…

Until then…


Notes:

* If you call making a blog post “bringing it” to you.

** It plugs in to the Serial I/O port. “Sir” sounds like “Ser”, get it? Marketing thought SerSound wasn’t friendly enough.

*** This part is true. The same sound hardware is used in the arcade mega-hits Congo Bongo and Mr. Do, among others.

**** PRINT#-2, yo.

Arduino and the Texas Instruments SN76489

You may have never heard of the Texas Instruments SN76489, but if you are reading this article, there’s a good chance you have heard it.

The SN76489 is a sound chip which, according to the Wikipedia entry, was used in systems such as:

…and in arcade games such as:

…and many more. I am just naming the machines and games I have heard of or seen/played.

Side Note: The Wikipedia entry also claims the Sega Genesis used one, but it had far fancier sound. A quick search shows the Genesis did not use this chip, so other systems may also be incorrect. Ah, Wikipedia…)

This chip is able to produce three tones and one white noise at a time, which sounds an awful lot like the audio capabilities of my first computer, the VIC-20.

The chip has none of the fancy synthesizer features found in other chips, such as the famous Commodore 64 SID chip. The only thing you can do is adjust the volume level of each channel of sound. Clever software uses this to produce bell sounds and other effects. (If Congo Bongo is really using this chip, it’s doing some fancy things to make those bongo sounds!)

Thanks to StrongWare‘s John Strong, I now have one of these chips to experiment with. It is wired up to an Arduino Nano clone. (NOTE: I had issues getting this clone recognized on my Mac, due to it using a different serial chip. I found the solution, and wrote about it earlier this week.)

SN76849 sound chip hooked to an Arduino Nano on a neat 3-D printed platform from StrongWare.

John pointed me to this short tutorial on how to use the chip:

Using sample code there, I was able to get the device making tones, and then expanded it to play a sequence of tones to make a tune.

The next day I added more code so it could do a multitrack sequence.

I thought it might be fun to share what I have learned the first two days of playing with the device, and share the code I have come up with.

I will do a full article on the chip and how it works (summarizing some overly complex explanations I have been reading), but until then, here is my sample project:

https://github.com/allenhuffman/MusicSequencerTest

It contains routines to poke bytes to the SN76489, plus a work-in-progress multitrack music sequence that currently plays the 2-voice intro music to Pac-Man :)

I’ve been fixing up the comments and squashing some bugs, so check back for the latest. I still have to add real/better support for the “noise” channel, but it works right now for playing simple tunes.

More to come…

Arduino Nano serial port not recognized on Mac 10.12

John Strong of StrongWare sent me an Arduino Nano to experiment with, and I was puzzled when it would not appear as a Port in the Arduino IDE. All I could select was “dev/cu.Bluetooth-Incoming-Port”.

I never had to install special drivers for Arduino on Mac before (but do on a PC) but I did some searching and decided to try the FTDI drivers (most recent release from 2015). No luck.

I then decided to try my UNO. I couldn’t find it, and had to open a brand new one up. It was also not recognized.

After some searching, I found out that many clone Arduino are using a different USB-to-Serial chip, and need special drivers. The “official” ones (from a Chinese website!) cause a kernel panic due to a bug in the current release.

I found this:

https://github.com/adrianmihalko/ch340g-ch34g-ch34x-mac-os-x-driver

These drivers work and I now can use this clone Arduino Nano:

Arduino Nano visible using replacement CH serial drivers.

I hope this helps someone else not waste an hour like I had to tonight to find this ;-)

Drobo (3rd gen) to Drobo 5C, part 3

This is part of a multi-part review of the Data Robotics Drobo 5C.

See also: Introductionpart 1 and part 2.

After having a Drobo 5C for a week, I’ve decided there are a few changes that I do not like, and one that I do like…

Don’t Like

Enclosure. As previously mentioned, the enclosure is now more of an outside shell that is no longer flush against the front of the device (when the removable face plate is on). Now, when the face plate is installed, there is a small gap running all around it. It just doesn’t seem as polished of a design. Also, when my laptop is set in front of the Drobo, if I open the lid too far, it now makes contact with the metal strip at the top rather than more gently rubbing against the plastic cover as it did with the previous 2nd and 3rd generation modules.

Power Supply. For some reason, the round power connector that goes in to the Drobo 5C now has a right-angle connector at the end. This causes extra tension on the cable (and probably power connector) as the chord is pulled at an angle a bit before running straight out the back and down behind my computer desk. I really don’t care for this, but if you put your Drobo at the far back of a desk (where the power cable would then point directly down), you may prefer this.

Drobo 5C right-angle power connector.

LED Status Lights. Since the front panel no longer covers the bottom row of status lights, the lights are brighter than the rest of the LEDs behind the panel. If I set the Drobo 5C brightness to 5, and have it next to a 3rd generation Drobo also set to 5, the blue LEDs on the 5C are much brighter because they are no longer being filtered out through the clear plastic of the face plate. It also means the 5C lights behind the faceplate are dimmer than the ones below it.

Drobo 5C (left) with brighter blue lights versus 3rd gen (right) with lights behind the face plate.

Can’t See LEDs. And, if your Drobo 5C sits a bit lower, the bottom row of blue LEDs can be hidden below/behind the face place. As I look down at the 5C and 3rd gen models, I can clearly see the front panel blue status LEDs on the 3rd gen, but cannot see the bottom row on the 5C. When sitting at a lower level, I can see them both. Not a big deal, but a change. I first noticed this when I walked in to where my computer is, and thought the 5C had locked up since all the blue capacity lights were off (or so I thought).

Drobo 5C (left) has recessed bottom lights, versus 3rd gen (right) that showed them through the face plate.

If they used the same power connector as they did on previous power supplies, and had kept the enclosure design the same, I would not have anything to gripe about.

Like

Face plate. There was one thing I did like, which I had not noticed before. In the previous photo, notice how the green drive lights on the 3rd generation (right) can be seen through the face plate. The black face plate is a bit transparent, and I had never noticed this until taking these photos. The 5C face place is opaque.

Drobo (3rd gen) transparent drive indicator lights.

Drobo 5C opaque drive indicator lights.

I expect I will have a few more things to say about this new Drobo (file copy speed, for example) so…

More to come…

Drobo 5C for $279 on Amazon

(Cross posting from my Appleause.com website. Over there, I post things related to Apple, Mac, iOS, etc.)

The Drobo 5C was introduced in October 2016 for $349. There has already been a $50 discount code ($299) and a one-day Amazon.com sale (also $299). Yesterday, the price tracking site, Camel Camel Camel, alerted me of a $279 price on Amazon:

http://camelcamelcamel.com/Drobo-5-Drive-Attached-Storage-DDR4A21/product/B01LWNHFBR?context=tracker

By the time you see this posting, the price may no longer be valid, but you might consider activating a Camel Camel Camel account to do your own tracking. You will receive an e-mail alert when the desired item (anything on Amazon) reaches the price you want. It also shows a historic graph of the price the item has been since tracking began.

Merry Christmas.

Drobo 5C for $279 on Amazon

The Drobo 5C was introduced in October 2016 for $349. There has already been a $50 discount code ($299) and a one-day Amazon.com sale (also $299). Yesterday, the price tracking site, Camel Camel Camel, alerted me of a $279 price on Amazon:

http://camelcamelcamel.com/Drobo-5-Drive-Attached-Storage-DDR4A21/product/B01LWNHFBR?context=tracker

By the time you see this posting, the price may no longer be valid, but you might consider activating a Camel Camel Camel account to do your own tracking. You will receive an e-mail alert when the desired item (anything on Amazon) reaches the price you want. It also shows a historic graph of the price the item has been since tracking began.

Merry Christmas.

Drobo volumes lose their names in Drobo Dashboard

Hey, other Drobo owners… Have you ever seen this happen?

Where, oh where have my Drobo volume names gone?

My volumes all have custom names, but occasionally I see Drobo Dashboard only show them as “Drobo”. I believe they always still show up as their proper names to Mac OS X, but Drobo Dashboard seems to have a problem reading them.

I have seen this on a 2nd generation Drobo, a 3rd generation Drobo, and on my brand new Drobo 5C (the second day I had it hooked up). I have seen it hooked to three different computers (all Macs) via FireWire, USB 2.0 and now USB 3.0.

I contacted Drobo support about this, and they asked me the typical list of support questions, which makes me wonder if I’m the only one this happens to.

Anyone else seen this happen?

Drobo (3rd gen) to Drobo 5C, part 2

This is part of a multi-part review of the Data Robotics Drobo 5C.

See also: Introduction and part 1.

Previously, I discussed the unboxing and setup of the new Drobo 5C. Today, I will walk through the migration process from an older 3rd generation 4-bay Drobo to this new 5-bay model.

Setting up Drobo 5C is no different than the previous models… Plug in the power cable, plug in the USB cable, insert drives, then turn it on.

Since the topic of this article is migrating from a 3rd gen model to the 5C, here are some important additional comments:

  1. APPLY FIRMWARE UPDATES FIRST. The code that came on my 5C was already out of date. The first thing you should do it hook up new new Drobo (with no drives inserted!) and power it on. Run the Drobo Dashboard software and it should recognize the new Drobo, and offer to update the firmware (if an update is available). Allow this to happen, and for the unit to reboot and be seen by Drobo Dashboard.
  2. Next, you want to power down the new Drobo, and move the “drive pack” (all the drives used together) from the previous Drobo to this one. DO NOT HAVE THE UNIT POWERED ON WHEN YOU INSERT THE HARD DRIVES! If you do this, the Drobo will see the drive inserted, and format it. You must have the new Drobo powered off, and then insert all the drives at the same time, then power it up. The Drobo should boot, then recognize the drives and have the same name and volume(s) you saw on the old Drobo.
  3. FOLLOW THE INSTRUCTIONS GIVEN ON THE DROBO WEBSITE! Don’t trust some random stranger’s website… The information I gave you may be incorrect and cause the total end of life as we know it.

Mine seemed to have some problem and it was not recognized by the computer after I did this. I had to power it down, and start it up again. It mounted just fine after that, and it showed up with the same device name and volume names since all of the information is contained on the drive pack itself.

At this point, the new 5-bay Drobo should act exactly the same as the former 4-bay model.

My next goal was to enable dual disk redundancy. When I looked at the Drobo Dashboard, the option to enable this was grayed out. I suppose that makes sense. My unit was quite full and there probably wouldn’t have been enough free space to make a third copy of all my data. However, my understanding is that as long as there is enough space available, you could switch over to dual disk redundancy. (But I may be misunderstanding.)

To get the needed space, I acquired a brand new 3TB Western Digital Red hard drive.

NOTE: When I get a new hard drive, I like to first zero-byte format the entire drive. By writing to every sector of the new drive, any severe problems can be located. I would rather spend the hours it takes to do this, than blindly put in a new drive only to find out it had some severe issue far at the end of the drive which doesn’t show up until months (or years) later when the drive finally fills up to the bad spot. (Yes, I have found bad drives this way, but only two so far.)

After I plugged in the new device, as expected, the option for dual disk redundancy was available:

Drobo 5C dual disk redundancy option.

I checked it, and the drive began the long process of migrating data so every bit existed on three different drives (thus, two could fail, and data would still be protected):

Drobo 5C rebuilding for dual disk redundancy.

It initially stay it would take over 40 hours to do this, but it was actually completed in about 24 hours. The newer Drobos certainly handle rebuilding much faster than the early models which could take all week even with much smaller hard drives.

The end result was a new Drobo with a few more volumes available and some extra peace-of-mind.

To be continued…