The apocalypse is coming, and the last time I checked, not many people have a semiconductor fab in their garage. We’ll need computers after the end of the world, and [matseng]’s project for the Hackaday Prize is just that – a framework to build computers out of discrete components.
The apocalyptic spin on this project is slightly exaggerated, but there is a lot someone can learn by building digital devices out of transistors, resistors, and diodes. The building blocks of [matseng]’s computer are as simple as they come: he’s using three resistors, four diodes, and one NPN transistor to build a single NAND gate. These NAND gates can then be assembled into any form of digital logic. You’re never going to get a better visual example of functional completeness.
A project like this must be approached from both the top down and bottom up. To go from a high level to ones and zeros, [matseng] built an assembler and an emulator. Some ideas of what the instruction set will be are laid out in this project log, and for now [matseng] is going for a Harvard architecture with eight registers. It’s a lot of work for a computer that will be limited by how much memory [matseng] can be wired up, but as far as ambition goes, there aren’t many projects in the Hackaday Prize that can match this tiny, huge computer.
No, that’s not a Playstation Vita up there, it’s a “Yinlips YDPG18A” portable game system. [Ian] found that his Yinlips was lacking in the flash memory department, so he fired up his soldering iron. The Yinlips is based on an Allwinner Sunxi series processor, and uses a standard TSOP48 footprint flash. There is some standardization in flash pin out and packages, so [Ian] picked up the largest pin compatible chips he could find – a pair of 256 gigabit (32 gigabyte) chips from Micron. Desoldering the existing flash proved to be a bit of an adventure as the flash was glued down. [Ian] also didn’t have his hot air gun handy, making things even more interesting. Careful work with a razor blade broke the glue bond.
It turns out that the soldering was the easy part. All flash chips have geometry, die count, page size, block count, sector size, etc. The geometry is similar to the geometry in a hard drive. In fact, just like in modern hard drives, a system will read some basic information before accessing the full storage array. In the case of NAND flash, the processor can access the first page of memory, and query the flash for its part number. Once the part number is known, the geometry can be determined via a lookup table. [Ian] checked the NAND table on github, so he knew going in that his flash chips were not supported. Due to the complexities of booting Allwinner processors into Linux or Android, the table and the NAND driver that uses it exist in several places. The bootloader’s axf file, U-Boot, and several flash application binaries sent from the PC based LiveSuit flash app all required modification. Most of these files were packed into a single flash image. [Ian] used imgrepacker to unpack the image, then opened the hex files. The fact that he knew what the original flash parameter tables looked like was key. He searched for an existing Micron flash table entry, and replaced the parameters with those of his new chips.
With all the files modified, [Ian] re-packed his flash image and sent it over. The Yinlips rewarded his hard work by continually resetting in a bootloop. [Ian] wasn’t going to give up though. He wired into the boot console, and discovered that a CRC check failure on one of his modified files was causing the reset. He then disassembled binary issuing the reset. Changing the return value of the CRC to always pass fixed the issue. [Ian’s] now has a collagen infused Yinlips with 58GB of internal storage. Pretty good for a device that only started with 2GB.
We’ve seen NAND and NOR logic gates – the building blocks of everything digital – made out of everything from marbles to Minecraft redstone. [kos] has outdone himself this time with a logic circuit we’ve never seen before. It’s based on magnets and induction, making a NOR gate out of nothing but a ferrite core, some wire, and a diode.
The theory of operations for this magnetic NOR gate goes as follows: If two of the input windings around the core have current passing in different directions, the fields cancel out. This could either be done by positive or negative voltages, or by simply changing the phase of the winding. To keep things simple, [kos] chose the latter. The truth table for a simple two-input, one-output gate gets pretty complicated (or exceedingly cool if you’d like to build a trinary computer), so to get absolute values of 1 and 0, a separate ‘clock’ winding was also added to the core.
One thing to note about [kos]’ gate is its innovation on techniques described in the relevant literature. Previously, these kinds of magnetic gates were built with square ferrites, while this version can work with any magnetic core.
While this isn’t a very practical approach towards building anything more complex than a memory cell, it is an exercise of what could have been in an alternate universe where tube technology and the transistor just didn’t happen.
We would wager that by weight this project is mostly wiring. We might go as far as betting that the wire outweighs the rest of the components 2 to 1. We’ll keep our fingers crossed that there’s never a loose connection, but for now it seems that [Kevin Horton’s] NAND-based computer project is up and running. Very nearly ever part of the build is based on NAND gates, which is why the point-to-point wiring is so crazy. There is one peripheral board which uses some non-NAND components, but he eventually plans on replacing that to make the system…. pure?
Now get ready for the crazy part. This is just one half of the program counter! There’s another board that looks just like it. The two join at least a half-dozen other boards of similar size and complexity to make a functioning computer. Crazy! The post shares a ton of details, but you can also just skip down after the break to see a video of it running a program.
If you’re wondering how a NAND-based computer works you should make your way through this online course.
Continue reading “NANDputer is mostly wiring”
This wooden box is a wireless pinball controller and tablet stand. The idea is to set it on a workbench to give you some of the thrill of standing and playing the real thing. [Jeff] has been rather addicted to playing a pinball app on Android lately, and started the journey because he needed a way to give his thumbs some relief.
An Arduino monitors buttons on either side of this wooden controller. [Jeff] is new to working with hardware (he’s a Linux Kernel developer by trade) and was immediately struck with button debouncing issues. Rather than handle this in software (we’ve got a super-messy thread on that issue with our favorite at the bottom) he chose a hardware solution by building an SR latch out of two NAND gates.
With the inputs sorted out he added a BlueSMiRF board to the project which allowed him to connect a Nexus 7 tablet via Bluetooth. At this point he ran into some problems getting the device to respond to his control as if it were an external keyboard. His stop-gap solution was to switch to a Galaxy Tab 10.1 which wasn’t throwing cryptic errors. Hopefully he’ll fix this in the next iteration which will also include adding a plunger to launch the pinball, a part which just arrived in the mail as he was writing up this success.
We’ve embedded his quick demo video after the break.
Continue reading “Wireless pinball controller for tablet gaming”
Hone your fundamental understanding of computer systems by completing this online course called NAND to Tetris. The idea is to develop each fundamental unit that goes into making computer programs a reality. This starts with logic gates, which are put together into modules that eventually become a functioning computer. From there you need an operating system, a compiler, and eventually you’ll be playing a game of Tetris which you programmed yourself.
It’s certainly not an easy journey, but if you have a computer at your disposal you should be able to make it all the way through the course. There’s a software suite which includes a hardware simulator so that the computer you’re building can be assembled using HDL instead physical components.
The concept is discussed in this TED talk given by [Shimon Schocken]. It is also embedded after the break and in addition to the NAND to Tetris project he shows off some self learning software on the iPad. To us it seems very much like the learning software [Neal Stephenson] envisions in the Young Lady’s Illustrated Primer from his Diamond Age novel.
Continue reading “Programming Tetris by first building a logic gate, then a computer, then…”
NAND flash, the same memory chips found in everything from USB thumb drives to very expensive solid state disk drives, are increasingly common. As they (partially) serve as the storage for cellphones, Wiis, routers and just about every piece of consumer electronic devices, you’re probably surrounded by dozens of NAND chips at any one time.
[Sprite_tm], hacker extraordinaire, put up a build a few years ago where he was able to read the contents of NAND Flash chips using a PC parallel port. It’s getting rather hard to find a parallel port on a PC anymore, so he updated his build to read Flash chips off of a USB port.
There are two main components of [Sprite_tm]’s build. First, to read the Flash chip, he needed a way to break out the pins on the very tiny TSOP48 package. [Sprite] found a neat little socket for these chips on eBay for about 10 Euros.
Communicating with the Flash chip via USB was a little harder. [Sprite] knew he needed USB 2.0, but not many microcontrollers have that implemented. Luckily, the FTDI FT2232H has USB 2.0, along with the very nice feature of being able to read data and address pins directly from the Flash chip. After a bit of soldering, [Sprite_tm] was left with the device seen above.
[Sprite_tm] found a nice library to bitbang the pins on the FTDI chip and request one page of memory from the Flash chip at a time. The device works as advertised, but it’s still a bit slow at 250 kBps. [Sprite] figures he can increase the speed of reading a Flash chip by requesting multiple pages at a time, but it’s still orders of magnitude faster than the old parallel port solution.
There’s a good bit of software [Sprite] posted to help him (and possibly others) read bare NAND flash chips via USB. This means if you have a broken USB Flash drive or SD card, it’s possible to desolder the chip and read it with your own controller. Interpreting the blocks of data recovered from a Flash drive as a file system is another story, but it’s still a fairly remarkable build.