Before getting back to work on the MAXI000 board, I thought it would be interesting to document three other little projects I’ve been working on, none of which required the picking up of a soldering iron, or writing any programmable logic. None the less they are pretty neat and were a lot of fun.
I’ve been a Logitech SqueezeBox user and fan since around 2003, when they were made by the original small team of engineers known as Slim Devices. They were pretty much the first players in the network music player game, and certainly were the first to do multiroom synchronised playback at a reasonable cost. The other thing that initially attracted me to the system was and is the Open Source nature of the server software used. It’s also been interesting seeing that though Logiech has stopped making new Squeezebox models, the server continues to be extended with support for third party music services, like Spotify.
I own three players:
- An original Squeezebox
- A Squeezebox Boom
- A Squeezebox Radio
The original Squeezebox is actually an ebay replacement for the one I bought in 2004 which developed a fault in its VFD display and RCA outputs. The Boom is a bit tatty now; the strange black rubbery coating found commonly on computer mice has worn off in places, but it is still batting out tunes. The Radio doesn’t get much use; it is used as a glorified alarm clock mostly.
Wanting something nicer to look at in the kitchen, where I’ve had the Boom, I thought it would be interesting to build a Raspberry Pi-based Squeezebox player.
piCorePlayer is essentially a Linux distribution that turns a Pi into a Squeezebox player. It can be run either headless or with a TFT touchscreen, which uses the same open source software as the Squeezebox Radio. It can also run the Logictech Media Server software itself, if the music is to be held on locally attached storage.
I’ve had a spare Pi3 kicking about for a couple of years now. It’s been used for various things including a controller for my Ender3 3D printer, but as I gave up with that solution it was available for this project. Other things I’d need:
- A TFT screen: I went for the “official” 7″ touch screen
- Some kind of case: the SmartPi touch 2 looked like a good solution
- Digital audio outputs: the HiFiBerry Digi+ optical audio hat
- A PSU Walwart: I could have used any random phone charger but went for the “official” Pi3 PSU
- Speakers: I decided on a soundbar type solution, specifically the Panoramic SC HTB8EB K
Instead of taking my chances on ebay, and maybe saving a few pounds, I went with the official UK Pi distributor, The Pi Hut for the Pi-related parts. I can’t fault their website or the service I received.
Putting it all together was fairly trivial, though the instructions for the screen did not exactly match the part that I bought as there were some screws to remove etc.
Installing and setting up the software was trivial and is the usual Pi method of dd-ing a disk image onto a microSD card and booting it up. piCorePlayer has a nice web interface for configuring the output settings (whether to use a particular output Hat, or the onboard sound etc), enabling the server (if you want it) and other things.
The only issue I had was with the Pi’s WLAN; it just wasn’t reliable enough. I’m not sure if it’s improved in the Pi4, but in the end I solved it with yet another homeplug adapter. Here’s a picture of it sat on the kitchen dresser:
The Lego strip is intended for attaching a web cam, but for this application I think some little Lego men look better.
The next project combines my interest in retro computing and FPGAs: a build of the MiSTer emulation platform.
MiSTer takes an off the shelf FPFA development board, the Terasic DE10-nano and turns it into a system that can emulate retro hardware in FPGA hardware instead of using traditional software emulation techniques which are usually employed.
The DE10-mini is a pretty neat board in and of itself:
- Intel Cyclone® V SE SoC 5CSEBA6U23I7 (PDF) FPGA+MPU
- Configuration and Debug
- Serial configuration device – EPCS128 (PDF) on FPGA
- Onboard USB-Blaster II (PDF) (Mini-B USB connector)
- Memory
- 1GB (2x256Mx16) DDR3 SDRAM on HPS
- Micro SD card socket on HPS
- Display
- HDMI TX, compatible with DVI v1.0 and HDCP v1.4
- Connections
- Expansion connector on FPGA
- Gigabit networking on HPS
- USB on HPS
So the FPGA and ARM processor are in the same package, a variant on the System on Chip scheme. It’s also interesting to note that the FPGA resources: logic, memory bits, PLLs etc, are approximately the same as in the FPGA on the DE2-115 (PDF) board I’ve previously used (also made by Terasic) which was used in my softcore project.
The split nature of the Cyclone V SE SoC does present some challenges though, as this diagram shows:
So logic in the FPGA has direct access to the HDMI port, but cannot access the network or USB ports without bridging via the processor. It also does not have access to the systems main memory. This can be done, but it adds complexity and is one of the reasons my softcore processor project was targeted at the older, more conventional, and more expensive DE2-115 board.
In any case I have not, at least initially, obtained this development board for experimenting with my own designs; it’s for running MiSTer and playing with the different emulator “cores” available.
MiSTer runs the Linux kernel and a minimal userland in the ARM processor (the HPS).
Without additional physical hardware the DE10-nano makes a fairly limited MISTer platform. Add-on boards are needed:
- SDRAM board: because the main system memory is attached to the hard processor side, most of the soft processor cores, in the FPGA, such as the 68000 in the Amiga core, need directly attached memory.
- USB board: this is technically an optional board, but is handy as it adds more ports (via a FE2.1 (PDF) USB hub IC), which are handy for joystick and a keyboard etc.
- IO board: VGA is included on this board, as an alternative to the HDMI port on the DE10-nano itself. This board also includes a fan for providing cooling to the Cyclone V package.
Here’s a picture of my “MiSter board stack” under my TV next to the XBox:
I did initially toy with buying up the parts to build these boards, and even went as far as buying some bare boards from a UK-based supplier. Then I ran into a bit of a problem: sketchy documentation. I couldn’t find a clear BoM for the boards I had. Information seems to be located in random forum posts. In the end I found an ebay auction which sold all three boards for less than it would have probably cost to buy the boards and the parts. A shame really, as it would have been a nice test of my newly acquired SMT construction skills.
There’s also a couple of extra peripherals for the MiSTer:
- A wireless keyboard/trackpad combination
- A USB “arcade style” joystick
The keyboard was bought from ebay. I deliberately didn’t get a keyboard that used bluetooth as I’ve never found Linux’s bluetooth support particularly reliable.
The joystick was made out of an arcade style micro-switched stick and buttons, USB controller board, and 3D printed case.
I built this joystick for a RetroPie setup a few years ago, but I wasn’t particularly impressed with the Pi-based platform and found it difficult to setup.
Installing MISTer is similar to installing a Pi Linux distribution: dd an image onto a MicroSD card and boot up the DE10-nano. There is some setup involved, to copy core images, ROMs and disk images across, but it is fairly simple.
In terms of how it’s implemented, the Linux side of MISTer is used, roughly, for the following things:
- Joystick and keyboard input (with a completely configurable mapping arrangement)
- File system access for ROMs, virtual floppy disk images, system snapshots etc
- Virtual serial ports
- FTP and SFTP access to the micro SD card file system via the LAN port
- Presenting an OSD overlay for choosing which core to start, and other things
The Linux kernel also programs the FPGA with the selected system hardware image, which is a part of what makes the DE10-nano become the particular hardware platform.
All told it works very well. So far I’ve only played with the ZX Spectrum core and the Amiga core. It’s quite strange figuring out the layers involved in, say, reading the USB joystick position via the Linux kernel from within a Speccy game running on hardware, including the Z80, within an FPGA. It’s also fantastic playing my favorite old games on a huge TV!
Lastly I’ve built myself a new desktop PC. This is the first PC I’ve built from parts in about 18 years, and it was a fun experience. This PC replaces the HP tower server I’ve previously repurposed as a Linux desktop.
The major parts are:
- Asus ROG STRIX B450-F motherboard
- AMD Ryzen 3700X processor with stock fan
- 32 GB of 3600MHz DDR4 memory
- 1TB M.2 storage
- Radeon RX 550 4GT LP OC graphics card
- Corsair CX-F 750W PSU
- In-Win 101 Midi-Tower Case
Putting the parts together was pretty easy; the processor cooler even came with thermal paste preapplied. I struggled a bit with clipping the fan down on the motherboard but after a second try achieved a good result.
The other problem I had was I needed a new PSU. I originally planned to use a Coolermaster part I had laying around but it lacked the proper 8 pin CPU power connector that the motherboard needed, so I had to buy the Corsair unit. This actually worked out well; I’m a complete convert for the modular power leads it employs.
The case is a bit cheap looking but does the job. In retrospect I probably should have spent a bit more money on it. It has a funky LED strip as a power indicator but for some reason the wire is not long enough to reach the motherboard connector. No matter as the glass side means the LEDs on the processor cooler are visible when the computer is turned on.
(I have no idea why the modern fascination with shiny LEDs and glass in computer cases exists…)
I also treated myself to a new monitor: a 34 inch AOC CU34G2 screen.
In all I’m extremely pleased with the new PC. It’s overkill for what I need, but what the hell. The screen, in particular, is gorgeous. For fun I fired up some 3D games via Steam and they played great, not that I have any interest in modern gaming. It was a bit tricky picking a graphics card that would work well on Linux. I went for an AMD-based part, as they generally work better then NVidia’s.
The motherboard, CPU, memory, SSD, case and PSU were bought from ebuyer.com. The graphics card and screen were bought from Amazon. The total cost was about £1350 including the screen. I’m currently running Ubuntu 20.04 LTS and it seems to run it very well.
I’ve also switched over my retro development from my Core 2 Duo fileserver to this machine. This involved purchasing, from good old ebay, a PCIe Dual UART card since the one in my fileserver is plain old parallel PCI. As expected this particular card, which Linux reports has an XR16850 on it, works fine in Linux.
It’s nice to tinker with electronics without getting dirty with a soldering iron or writing HDL, but the next post will return to the more usual themes of retro computing, board construction and programmable logic…