My affinity for IBM PCs, starting with the first IBM PC 5150 is fairly well known in Maker circles. I have had several PCs now over the last few years but had pared back to one PC 5150, one XT 5160 and one AT 5170. Now that has changed, as I have a new PC, which I built. This one is considerably smaller than the others, and so much lighter in weight (it is definitely not a boat anchor).
I present my mini-IBM PC. It bears a striking resemblance to its big sister (background, to the right below), thanks to 3D printing. And the code emulates a PC up to a 386 class machine. I'll show you the details in this guide.
This build has some modular features, so you do not have to build all of the pieces shown. Possible builds:
- With all the features shown including the base system and monitor.
- Just the base system, use your own monitor.
- Optional parts of the base system include the LEDs on the front, the IBM joystick adapter and even the on/off button on the side if you wish.
- Use any USB keyboard you like.
You can start with the base system and build it up how you wish.
The project is open source under an MIT License.
A note from Anne Barela:
I have always loved IBM PCs since getting my hands on them in the early 1980s. It was not just the capabilities of a computer on a desk, it was also a whole network of programmers and enthusiasts sharing tips and hacks. The freeware software culture flourished, nurtured by the magazines of the era.
While I was able to use IBMs, my mainstream work was on compatibles such as COMPAQ. They often had better specifications but not the style of IBM's offerings.
When I contemplated getting into vintage computers, there was a clear goal: IBM PCs. Through Craigslist, I found a very complete IBM PC 5150 owned by a gentleman complete with upgrades and accessories. I then obtained an IBM PC/XT 5160 and IBM PC/AT 5170. Tinkering with these machines has been a joy.
Folks reached out to me and asked why I didn't use an IBM emulator on my desktop or on a Raspberry Pi. Both options work well but they do not have the complete aesthetic. The clicky beige keyboard, the disk drives, and the 4:3 monitor.
I have looked at microcontroller-based emulation for quite awhile but hardware limitations saddled those solutions with compromises.
When Adafruit developed the Fruit Jam board, I thought a contender for a tiny PC might be here. A handful of people looked to port emulators to the Fruit Jam and its beefy Raspberry Pi RP2350 microcontroller. Adafruit helped port the IBM emulator in the MCUME suite but further modification is not possible. I looked around for something more.
Charlie Birks (Daft-Freak) had started a 32 bit only version of an earlier RP2040 emulator, the Probably Average Computer Emulator (PACE). PACE-32 is documented well and Charlie is doing active development. And the emulator has support up to an 80386 microprocessor. With a bit of encouragement, Charlie has been gracious at making changes for the Fruit Jam.
With PACE-32 builds running on my Fruit Jam, I turned next to a case and display. Again luck was on my side as giobbino on Thingiverse has made a remix of an IBM PC case and display originally crafted by two other members. I liked the details. So I looked to adopt these cases for my PC build. In this, I enlisted my wife Amy Lendian, who has been working with 3D printing. She took the existing models into Fusion 360, along with the Fruit Jam board model. The ports for the board were placed in the back of the case and Adafruit extension cables were used to bring out the USB ports.
For the monitor, I decided to use the same LCD display as giobbino, available from AliExpress. It ticked all the boxes: 640x480 IBM resolution (VGA) and a 4:3 aspect ratio. Amy used the same techniques she had used on the system box, placing the ports out the back.
All 3D parts were printed in colors similar to the original IBM colors (finding beige PLA filament is getting easier, thanks to MicroCenter and Amazon).
After Amy printed the 3D parts, I assembled the electronics. I fabricated a custom solution for the drive light LEDs. Charlie added software support to light them appropriately. I found THE PERFECT on/off paddle switch which closely resembles the original IBM version from Jameco electronics for less than a dollar. This was also a requirement, in my mind, as the IBM switch is classic and tactile. All these were wired to a quick disconnect circuit board and then to the Fruit Jam GPIO expansion header.
Flipping that big switch, after ensuring Charlie's latest software was on the Fruit Jam microSD card, the mini-IBM booted to an MS-DOS prompt. My dream of a physical emulated PC, that is true (enough) to the original, was a reality.
Now that the system is built, there is, like in the vintage machine, a process to hone the software available. I have tested the mini-IBM with DOS commands and some games, including Wolfenstein 3D. So much fun!
And I've also enjoyed looking for appropriate keyboard(s) for this system. While it can use any USB keyboard and mouse, I wanted to try some more appropriate alternatives. Using a Soarer's adapter, I can use my IBM Model F (PC) and Model M (AT) keyboards with USB with proper keymapping. I have also used two mini keyboards, one from 8BitDo and another from Vortex, which look spectacular and are sized more towards the size of my build.
Overall I've made an emulated IBM PC with both the hardware power and good looks that I have always wanted. Could there be improvements? Yes. But I wanted to get the information in the hands of other makers, to get their ideas flowing on making and remixing the design to their own tastes. The ecosphere surrounding IBM computing is coming around full circle 40 years later and I'm very happy to encourage the process. Anne January, 2026
Two of the following
You only need one of each LED for the build, but having a couple extra in case of issues can be helpful.
The monitor enclosure was designed for a 4:3 aspect ratio 640x480 5 inch panel. You can look for other 3D designs suitable for other panels, or possibly model a new monitor case. Original IBM PC monitors used a 4:3 aspect ratio.
The Fruit Jam outputs an HDMI signal. Having an HDMI monitor is recommended. HDMI to VGA converters, etc. could always be utilized, but I did not do so.
Displays larger than 640x480 (IBM VGA, the best at the time) isn't supported well by Fruit Jam as it takes up a great deal of RAM, so it isn't coded. You may want to avoid the common 800x480 monitor as too wide and having too many pixels.
I know ordering from this display from AliExpress may be a bit more expensive due to tariffs, but this is a nice display for this build.
The specified monitor doesn't have enough cable length if the control board is mounted horizontally, as designed. The ribbon cable extension below will allow things to connect.
The Fruit Jam accepts USB keyboards, mice, and SNES style game controllers. It will not accept classic IBM PC Model F or PC/AT Model M keyboards or PS/2 devices without an active adapter.
I'm looking to use an original Model F or Model M with a XT/AT to USB Soarer's Converter available on Amazon US, eBay, and other retailers as it has active electronics to convert keystrokes. A straight "adapter cable" is not recommended.
Note original Model F and Model M keyboards can be somewhat pricey with prices US $125 and up.
Finding a mini keyboard and retro look keycaps could also be an alternative if you want a vintage look and feel. Here are some I found:
I hope to have a write-up on looking at various keyboards in another Playground Note.
The design of the mini-IBM PC supports an optional Adafruit PC Joystick "seesaw" adapter connected to the Fruit Jam STEMMA QT (Qwiic) I2C port.
The software for using this in the PACE-32 emulator is still in process and I consider it not tested.
To get the case, you will need a 3D printer with a bed size of 20cm x 16cm x 13cm (or larger) or you can send prints out to 3D print services (or look for a local makerspace).
You will need a soldering iron, solder, wire strippers, wire flat cutters, small files, screwdrivers, etc. for this build.
The following screws were used. One might consider a kit of various screws which might save money.
The system case and the monitor case are remixes of Thingiverse Thing 7149915 by Giovanni Verrua. It was heavily modified by Maker Amy Lendian. The original case was for the FabGL ESP32 board, which has VGA out (fed through the top of the PC case to the monitor case). This new design uses a short HDMI cable between the rear output of the Fruit Jam and the rear input to the monitor interface board.
The changes made by Amy include removing items specific to the FabGL ESP32 Module and making cutouts for:
- The Fruit Jam ports on the back
- Two panel mount USB ports (extended to the back)
- Adafruit IBM Joystick Board (out the back)
- Power ("Big red") Switch (on the right side)
- And an indentation for the IBM PC badge in the front
And for the monitor
- Bezel refinements
- The rear of VGA/HDMI board was placed in the back of the monitor.
All items were printed in PLA filament, sliced with Prusa Slicer and printed on a Prusa MK4S. Filament was sourced from Amazon and MicroCenter.
Download the design files in the green link below.
You'll want to decide on the color scheme you are looking for. There are many colors of PLA filament on the market. Here are the colors I used:
- PC Case: grey
- PC Faceplate: light beige
- PC Back panel and on/off Switch Surround: Black
- Monitor Back: Same color as PC faceplate
- Monitor Front: Tan to olive green
- Inside Monitor Screen Holder: any color, we used black.
Ensure all support material is removed from the prints. This will include near the screw holes on the base and there is material where the LEDs go in the drive plate. You can leave those in if you don't plan to have drive LEDs.
If you do not have a 3D printer, you can check out local Makerspaces or 3D printing shops. Some might be local, others are mail order.
You can choose whatever logo you wish for the small indentation on the upper left of the faceplate. If you want something that looks like the original IBM PC badge, the file is on Wikipedia. I printed it on paper with a color laser printer. A metal plate with black printing would be more accurate but I could not find one in a size appropriate for the PC case.
I decided on the classic IBM PC 5150 / XT 5160 look although the software is such that an AT 5170 or higher are nice. You are free to select the case style you like. Modifying an existing design saved time. Kudos to Amy Lendian who imported the STL files into Fusion 360 and did the modifications needed.
Adafruit has an emulator for IBM PC and 286 (AT) machines based on the MCUME emulator. You can learn more about that emulator with the guide Intel 286 Emulator on Fruit Jam.
Expectations of an Emulator
As Charlie provides the PACE-32 emulator, using his own time, under an open source MIT License, there is always the chance certain functionality may not be present, some programs fail to run, or a myriad of other issues. You can propose Pull Requests on GitHub for adding or changing things or propose something in an Issue. But implementation of an Issue or accepting a Pull Request is dependent on Charlie. This guide author asks that abuse of the emulation software and its author be avoided.
If you'd like another emulator, like FruitJam-286 or others, they will have their own set of requirements and it may not be ported to the Fruit Jam. The onus is on you to provide software for the Fruit Jam for your specific project.
Or you can just have the look and feel of a PC but put other software that isn't an IBM PC emulator on the Fruit Jam. The Doom game that came with AdaBox 022, Fruit Jam OS, games, or other software, it's your choice.
Obtaining the PACE-32 Emulator
Go to the GitHub repository Actions here. Under the latest work, click on the title, re. if the latest work is labeled something, hypothetically, like "Add Functionality", click that. Then under Artifacts, look for the file with "adafruit-fruit-jam" in the title. Click that filename and a Zip file will be downloaded to your computer. Open the Zip file, go into the bin directory and copy the PACEPico2.uf2 file to a location you can remember (outside the Zip file).
Hold on to the emulator file until the hardware is installed unless you'd like to try it out, which is fine, just skip to the loading the emulator section below after the construction sections.
Screw in the two USB-A panel mount connectors onto the back plate.
Optional: install the joystick board onto the bracket on the back of the back plate using a 5mm M2.5 stand-off with screw on one end and not on the other.
Install a STEMMA QT (qwiic) cable between the adapter and the Fruit Jam.
The only modification you might want to make is to add an external on/off button due to the case and for a retro look, feel, and sound. There are two places to do this:
If you want an external power off and on switch, take a 5 inch length of solid core wire, preferably black and strip 1/2" off each end. On one end make a tight loop so that it fits only the center pin of the switch on the back of the Fruit Jam. Check that it fits on the pin without touching the other pins next to it. Tin the loop with solder, then carefully solder the loop onto the pin.
Now turn over the Fruit fam and insert it horizontally into the back of the rear panel with the HDMI port facing out and the two USB ports facing the opposite way.
Now insert the back panel into the case bottom. The side with the USB ports should be held up by the two upright posts attached to the bottom plate. Attach the Fruit Jam to the bottom plate with the two M2 x 12mm screws (see orange circles areas below). They'll be too loose for the threads in the Fruit Jam but they'll cut into the posts in the bottom plate with a bit of torque.
Optional: If you installed the IBM PC joystick seesaw board, use a 5mm standoff between the adaptor board and the support jutting out the back of the back panel. Use a screw in one end, a nut in the other (orange rectangle).
The front panel consists of two 3D printed pieces. The black one which has images appearing to be a hard disk and a floppy drive. And the front bezel, shown in a beige or bamboo color. The two pieces snap together. There is a hole in the black part where the bezel has slots, that is for a speaker to be installed later.
There is support material you can remove to add colored LED lights for each drive. Carefully pry out the black cylinders from the back to reveal the holes.
The red LED fits perfectly on the right as seen from the front.
You might have to file the rectangular hole a bit to get the green LED in the hard drive, depending on the 3D print.
There is an indented square on the upper left corner of the bezel for a case badge. For an IBM. I chose an IBM Personal Computer badge by printing the public domain scan on Wikipedia and scaling it down, printing it on plain paper and gluing it in.
Feel free to put what you wish on or leave it blank.
To interface the LEDs to Fruit Jam along with the external on/off switch, I chose to put the circuitry on a small Adafruit perma-proto board. This takes a bit of wire cutting and some soldering.
Making the board is optional but a good way to get the LEDs connected as well as the switch. If you don't make the board, the LEDs won't light but the switch can be changed.
With the Fruit Jam mounted on the base and the power wire coming out of the bottom of the Fruit Jam (if you soldered it on previously), the small 1/4 size perma-proto wiring looks like the diagram above. The terminal blocks (actually quick release, not screw in, but Fritzing didn't have that in their database). The parts list:
- One 1/4 size Adafruit Perma-Proto board
- Two quick release terminal blocks, 3 positions
- Three 100 ohm resistors, 1/8 watt or higher.
- Black solid core wire.
- Red solid core wire
- Black silicone covered stranded wire
- Red silicone covered stranded wire
- Red 3mm round LED, per the Parts List
- Green 2x5mm LED, per the Parts List
- Heat Shrink, small diameter
- Solder and a soldering iron
- Wire cutters and strippers
Cut two 4 inch / 10cm lengths of red silicone stranded wire and two 4" / 10 cm lengths of black silicone wire and strip about 1/4" (5mm) off each end of the four wires.
The longer of the two LED leads (and the one NOT next to the flat part of the round LED) is the positive lead. Make a hook at the end of that lead. Twist the strands of wire and hook the red silicone wire to the hook of the LED. Use pliers to crimp them together and solder firmly. Do the same for the shorter lead and the black wire.
Cut a 1" / 2.5cm length of small heat shrink and feed it over the wires and heat them up to cover the bare metal of the solder joint and LED. Do the same for the other wire. Now you have the polarity of the wires set (red is positive, black negative).
Do the same procedure as above, solder the red wire to the longer lead of the LED, a black wire to the shorter lead and then cover with heat shrink.
That's it. The completed circuit board is placed on the bottom of the case equidistant between the green and red LED holes on the case bottom by the front panel. Use standoffs in the perma proto holes to secure the board to the bottom of the case.
The wiring to hook things to the Fruit Jam will be discussed later.
Proceed to make the wired Perma-Proto board:
- First solder on the two terminal blocks in holes 11-12-13 on either side of the board with the holes facing out.
- Cut pieces of solid black wire, strip the ends, and wire into the holes of the perma proto shown above. Solder each end. Be sure to trim any excess off the back of the circuit board.
- Cut two pieces of solid red wire (or one red, one green) and wire as shown for the small red and green jumper wires. Solder and trim the excess.
- Place the 100 ohm resistors on the board as shown, with the wires poking through the indicated pads. Solder and trim the excess wire off the back.
- Wire the red LED (which has the silicone colored wire on it) to the left side of the board where shown.
- Wire the green LED (which has the silicone colored wire on it) to the right side of the board where shown.
Take two short standoffs and secure the board to the bottom of the case between the two LEDs. Gently insert the red and green LEDs into place.
The power switch enclosure goes into the left side of the case. If you don't have the specified switch, you can source another or not install, leaving the PC powered when it has the USB power applied to the Fruit Jam.
The bottom rear of the switch cover has two protrusions to act as standoffs to screw it into the bottom of the case.
Take the switch and bend the mounting tabs with a stout pair of pliers so they are flat and facing out from the switch rather than in an L shape. Be careful that the switch is not damaged.
Before mounting the switch, cut two lengths of solid core wire to 6" / 15cm. Strip 10 mm of insulation from one end and 7mm from the other. Using pliers, crimp the 10mm end to the switch lugs, one on each. Solder and ensure a good connection.
The switch flat mounting tabs should now hug the exterior of the switch plate. Holding the switch against the plate, screw the bottom and top flat tabs into the mounting plate to secure the switch. Use short tapping screws so they are held in but don't protrude into the switching area. If the screws protrude, either use a very thin washer or shorter screws. If the screw has too large a head or too many screws, it will impede the case top.
Screw the switch assembly into the bottom half of the case.
Labels were made using a Brother labeler and a white on black cartridge.
Ideally the black space to the right would be wider than the space to the left as in the original IBM switch housings. Perhaps someone could remix the design to do this.
Cut three 13cm wires: red, black, and another color and strip 6mm from each end.
Following the diagram above, put the black wire from the top right terminal block to the Fruit Jam pin marked GND. For the terminal block end, gently lift the orange arm and stick the wire firmly in and release the orange arm. Gently tug on the wire to ensure it's firmly held.
Insert the red and green wires into the right middle and right bottom holes similarly. The red goes to Fruit Jam pin D7 and the green wire to D6.
The two switch wires (if using a switch, go in the left terminal block, top and middle (they can be swapped, no worries). Finally the black wire soldered onto the bottom of the Fruit Jam goes in the bottom of the left terminal block.
That's it, all wired up.
At this point you can test the exterior switch if you installed one. Plug the mounted Fruit Jam into a USB port on your computer with the Fruit Jam on-board switch set to OFF.
LED Test (Optional)
If you want to test the LEDs, you can load CircuitPython onto the Fruit Jam and then copy the following code to the CIRCUITYPY drive as code.py.
# SPDX-FileCopyrightText: 2025 Anne Barela
#
# SPDX-License-Identifier: MIT
#
import board
import time
import digitalio
led_green = digitalio.DigitalInOut(board.D9)
led_green.direction = digitalio.Direction.OUTPUT
led_red = digitalio.DigitalInOut(board.D10)
led_red.direction = digitalio.Direction.OUTPUT
while True:
led_red.value = True
led_green.value = False
time.sleep(1.0)
led_red.value = False
led_green.value = True
time.sleep(1.0)
The red and green LEDs should alternate flashing. If they do not, be sure the Fruit Jam is on (the power light is on) and the interface board wiring appears correct and all solder joints are good.
To enter the bootloader, hold down the BOOT/BOOTSEL button (highlighted in red above), and while continuing to hold it (don't let go!), press and release the reset button (highlighted in red or blue above). Continue to hold the BOOT/BOOTSEL button until the RP2350 drive appears!
If the drive does not appear, release all the buttons, and then repeat the process above.
You can also start with your board unplugged from USB, press and hold the BOOTSEL button (highlighted in red above), continue to hold it while plugging it into USB, and wait for the drive to appear before releasing the button.
A lot of people end up using charge-only USB cables and it is very frustrating! Make sure you have a USB cable you know is good for data sync.
You will see a new disk drive appear called RP2350.
Drag the PACEPico2.uf2 file to the RP2350 drive. The RP2350 drive will disappear and the emulator will be installed. Be sure there are valid disk image(s) on an inserted micro-SD card (explained below) to run the emulator when power is applied. There is a recent change that alerts when the card is missing or not installed correctly.
Insert a microSD card of 512MB or larger (HUGE cards are not needed, save your money).
Click the buttons below to download the files needed on the microSD card. Save the files on your computer until needed below. Rename PACE-32-Emulator-hd0.img to hd0.img after copying.
Copy the three files to the root (top level) directory of the microSD card (not in subdirectories).
The disk files you want to use can be configured with a config.txt file at the root of the micro-SD card.
ata0=hd0.img
floppy0=disk1.img
If there is no config.txt, hd0.img is loaded as the first hard drive (if it exists).
If you specify a valid floppy disk image and a valid hard drive image, the emulator will boot the floppy if it is bootable. This is consistent with how the original PC/XT/AT would boot. If the floppy is not bootable, an error message may be displayed saying such.
If a floppy and a hard drive is specified, the emulator, like the PC, will boot the floppy and it would be drive A>. The hard drive is available on drive C>. The autoexec.bat and config.sys would be executed from the floppy.
If the floppy is omitted in config.txt, the hard drive image would be booted with the hard drive autoexec.bat and config.sys. This is recommended for longer use once the hard drive image has all the files you want.
Ensure the Fruit Jam is off. Insert the microSD card with the images into the microSD card slot on the Fruit Jam, via the back of the case. You might have to feel for it and double check you have it in with a firm but gentle click.
This is why I said leave the top cover off, to ensure you get the card into the Fruit Jam.
Hook an HDMI monitor into the HDMI port on the back of the Fruit Jam and power the monitor on. It does NOT need to be the monitor that will be built later, any HDMI screen should do.
Plug in a USB keyboard. While not required, you'll likely wish to interact with MS-DOS.
With the Fruit Jam power switch and external power switch off (down), apply USB power to the Fruit Jam. No lights should be visible on the board.
- If you didn't install an external switch, switch the Fruit Jam on via the on-board slide switch
- If you installed the external power switch, flip it up to turn it on.
You should see a small green power LED on Fruit Jam.
On the monitor you should get messages as the emulator starts up.
This monitor is a remix of one on Thingiverse. For simplicity I went with the same AliExpress 640x480 (VGA resolution) LCD display. The 3D model was changed a bit by Amy Lendian to close up one hole and mount the control board flat inside so the connectors are accessible from the back. Doing so made the LCD connection ribbon cable too short to reach the monitor mounted in the front bezel so a 50 pin flat ribbon cable extension was used. It's a bit long but serviceable.
There are five 3D printed pieces. The main case, the bezel surrounding the display, a display retention frame, and two knobs which show in the front.
To get a color match to an IBM display, look to use a light beige for the main case, a more olive bezel, and black knobs. The retention frame will not be seen and can be any color.
The Display
Ensure the brown display ribbon cable is detached from the control board. Do ensure the button board (green) is still connected via the red button board wiring.
Attach two 1 inch / 2.5 cm standoffs to the bottom of the blue display control board on the side that the ribbon cable goes on (opposite the side all the connectors for video protrude).
Attach the monitor control board to the main case with appropriate flat screws to the standoffs. The back of the monitor will hold the other side.
Install the button board so that the buttons are accessible from the outside and screw in with short self tapping screws.
Things should look like the picture below (without the ribbon cable attached).
Note: this case design blocks the infrared remote receiver (the left side of the green button board, a silver component). You can make a hole in the case if you wish to use an appropriate infrared remote (like the one the vendor sells or provides with the display package).
Get the front bezel and insert the two knobs. While the design this was remixed from used these for changing the color to green or yellow, they are not used in this design. You can glue them or hold them with something like blue tack.
Insert the display into the front bezel with the ribbon cable pointed down, re. closer to the black buttons and the notch in the bottom of the bezel.
The LCD panel is a bit thinner than the bezel. You will want to loosely affix the LCD display to the bezel. I used some more Blue Tack. Just something non-permanent and that holds things. a measured cardboard insert would work also.
Get the LCD retention frame and screw it into the monitor bezel, making sure that the LCD display doesn't move around when complete. Again I used a bit of Blue Tack but a cardboard insert or other methods should work fine as long as you do not damage the LCD screen.
Unclip the extension cable from the green board connector by gently lifting the black retention clip. Flip it over as shown in the picture so the blank side of the cable is visible and the silver connectors are in the connector. Lower the retention clip to secure the cable.
Get the monitor extension cable. Carefully lift up the black retention bars on the white pin connectors. Using the pictures to guide you, attach the brown monitor ribbon cable to the green circuit board connector. Ensure the cable is slid all the way into the connector as far as it will go and then very carefully from both sides move the black retention clip back to hold the cable.
Undo the black cable retention clip on the 50 pin connector on the display board. Insert the free end of the cable extension into the connector with the orientation as shown below, ensuring the cable is into the connector as much as possible. Carefully move the black retention clip back to clamp onto the ribbon cable. Look to be sure the extension assembly is attached as shown in the pictures and each end if firmly clipped. If there is an issue, gently unclip the problem joint(s) and fix.
Place the front bezel assembly next to the monitor housing, being sure the cable extension is not bent too wildly. Insert the retention frame into the indentation of the monitor housing and close up the monitor.
Use a 12 volt center positive power supply in the back of the monitor. There is no on/off switch (this could be done with one of the knobs if you wish).
Feed the HDMI in to the HDMI output of the computer unit.
The monitor can also be used with other video sources. Switch between sources with the monitor control buttons.
Thank You
Thank you for looking at this guide. If you'd like to comment, tag me in a tweet @anne_engineer or on BlueSky @anneb.bsky.social.
This page (A mini-IBM PC Using an Adafruit Fruit Jam) was last updated on January 12, 2026.