Skip to the content
2 layers130 × 91.5 mmMiSTer G3, the printed circuit board in 3D

A MiSTer FPGA inside of an iMac G3

Size
130 × 91.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
42
Nets
49
Pads
227
Tracks, vias
336, 15
Pours
1
Routed
Yes
KiCad
KiCad 6 (file 20211014)
Created
11 Jul 2021
Updated
23 Feb 2023

Overview

MiSTer G3 is an open-source printed circuit board by wickerwaka, from the wickerwaka/iMacSTer repository on GitHub, published under the LGPL-3.0 licence. It is a 2-layer board of 130 × 91.5 mm with 42 parts on 49 nets, routed with 336 tracks and 15 vias.

It is built around the TPA6021A4N and LCC110. Its parts include 12 capacitors, 11 resistors, 3 ICs, 3 connectors and 2 diodes. It belongs with the fPGA and programmable logic boards and the AVR (ATmega, ATtiny) boards of this library.

Main components

2

README

README.md

iMacSTer

The iMacSTer is an early 2000's Apple iMac G3 with a MiSTer FPGA multisystem emulator inside of it. It is intended to be a non-destructive modification so the iMac can be returned to it's original state if desired. The mainboard, drives and IO panel are removed and replace by custom hardware, but no cuts are made to the chassis and the new hardware connects to existing internal connections without the need for any soldering. That being said, I can make no guarantees about the long term implications of these modifications. The speakers are being driven by a different amplifier than they were intended for, the new hardware only uses the 5V output from a power supply which is expecting load on the 3.3V and 12V lines also, the monitor is being driven at a resolution higher than it was intended for, heat generation and dissipation characteristics have changed, etc, etc.

Past Work

None of this would be possible without the work of Rocky Hill and others to reverse engineer the iMac internals and design custom hardware and software to interface with it. I would not have attempted this project if the imac_g3_ivad_board_init project did not exist. My PCBs and software is all based on that work and I still use the down converter adaptor board from that project because there was no need to change it.

I also used the IO shield designs that @Diepzeevogel created as part of their replacement parts project as the basis for my own IO shield. The fit and quality that they were able to achieve is beyond my own skills.

Features

  • 2W x 2 Stereo amplifier
  • Dual headphone ports for two player fun
  • External volume control
  • 4 external USB ports
  • Built-in WiFi
  • Access to all MiSTer buttons and OSD
  • Sleek design for any modern home

Features Video

Other Random Photos

Assembly

Assembly Video

Main Board

The main board controls the whole system. It contains an I2S digital-to-analog audio converter, an audio amplifier and an Arduino Nano Every for controlling everything. It connects to the J20 connector inside the iMac which provides 5V to the microcontroller even when the system is powered down. The J20 port is also where the VGA signals are from the VGA connector on the board.

The amplifier is a Texas Instruments TPA6021A4 2W Stereo amplifier. I picked this one because it was in the power range I needed, it supported a headphone mode, the volume level could be controlled by a microcontroller and it came in a through-hole package. That last point really limits the options since most amplifier ICs with similar features come in surface mount packages. When I started this project I had no experience designing PCBs or using surface mount components, so I was limiting myself to through-hole parts. The decoupling, biasing and filtering capacitors in the amplifier section are all directly copied from the reference schematics in the datasheet, with the exception of the output capacitors which I switch from 330uF to 2200uF in order to get more bass.

The amplifier output is connected to the speakers and headphones via two JST connectors. The iMac has two separate headphone ports on the front and each has their own headphone sense signal. These signals need to be OR'd together to determine whether the amplifier should be in single ended (headphone) mode or not. This is done by the arduino rather than a separate IC, which has the added advantage of allowing separate volume settings for speaker and headphone mode.

The audio input to the amplifier comes from the UDA1334A breakout board from Adafruit. The UDA1334A decodes the I2S audio data from the MiSTer and converts it to an analog signal. I had assumed the output capacitors on the breakout board would block DC into the amplifier so an earlier version of the board did not have any capacitors protecting the input. That assumption cost me a pair of speakers, they literally ripped themselves apart.

The arduino controls the system power, the CRT configuration, the amplifier, the buttons and LEDs on the case and the three standard buttons on the MiSTer. I considered using an ATmega microcontroller directly instead of the Nano Every, however the Nano packs a lot of features into a small space. I want the convenience of a USB port without having to worry about whether I've hooked it all up correctly.

iMac video hardware requires a special initialization sequence to be sent via I2C before it will power on the CRT and start displaying an image (much more detailed explaination here). The I2C connection is also used to configure display properties like brightness and alignment. These settings are stored in EEPROM and can be modified using serial commands.

USB Hubs

There are two USB hubs inside, one is used for internal connections and one is mounted on the IO shield for external connections. The hub is based on the FE1.1 chip which does pretty much everything. Building my own USB hubs is not something I considered doing at the start of this project, I had never designed a PCB and I had never used surface mount components. I had deliberately avoided surface mount components when picking an amplifier for the main board. This seemed achievable though and I had watched enough videos at this point to not be terrified of surface mount soldering. It was pretty surprising when it worked!

The hub includes a current-limited switch, but I have not been able to get the power control from the FE1.1 to work correctly. For now it is latched one with a blob of solder. There is still some current limiting due to the thermal shutoff building into the switch, but it is not going to be reported to the hub correctly.

MiSTer

The MiSTer setup is the standard combo of DE-10 Nano, 128MB SDRAM and the analog IO board. The 5-pin button and I2S headers are connected to the matching headers on the main board. The MiSTer is mounted in the drive bay alongside one of the USB hubs. I drilled and tapped holes in the drive bay to allow both of them to be mounted. This is a destructive modification, though it is not externally visible and does not impact the functionality of the drive bay if the original drives ever needed to be added back in.

Power and Front Panel

The power for the system comes from the J22 connector as 24VAC. This 24VAC is feed into the down converter board which outputs 12V, 5V and 3.3V DC. The 5V output is used to power everything else in the system. The J22 connector also has connections for the speakers, headphones, power button and it's LEDs. This are all exposed through three JST connectors on the adaptor board.

IO Shield

The IO shield provides a mounting point for the external USB hub and the rotary encoder. Thanks to the work here it matches the curves of the case very closely. It is 3D printed using eSUN's Semi-transparent Gray PETG filament which matches well with the "Graphite" color of this iMac.

The metal plate that the IO shield is attached to has a lot of holes so finding suitable attachment points was not difficult. However getting access to the other side of that metal plate is extremely difficult so I opted to build in some plugs that expand when a bolt is screwed into them, similar to dry wall screws.

Video Modes

The CRT in the iMac is limited to a horizontal sync of 57-63KHz. The only mode suitable for 60Hz refresh rate is 1280x960. At this resolution the horizontal refresh rate is 1000x the vertical rate so when using vsync_adjust the vertical rate can be adjusted from 57-63Hz, which gives good coverage for NTSC and most arcade systems. The brightness and alignment of the screen does change across that frequency range, so at the extremes the picture will be slightly distorted. A future version of the board may sample the hsync signal and adjust the video settings based on it.

Parts

42
QtyValueFootprintReferences
6.47uCapacitor_THT:CP_Radial_D5.0mm_P2.50mmC1, C2, C4, C5, C6, C7
4100kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1, R2, R10, R11
4MountingHole_PadMountingHole:MountingHole_3.5mm_Pad_ViaH1, H2, H3, H4
2.47uCapacitor_THT:CP_Radial_D5.0mm_P2.00mmC11, C12
210kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR3, R6
21kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR4, R5
2330uCapacitor_THT:CP_Radial_D10.0mm_P5.00mmC8, C9
24.7kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR7, R8
2D_Schottky_ALTDiode_THT:D_DO-41_SOD81_P7.62mm_HorizontalD1, D2
1100nCapacitor_THT:C_Disc_D10.5mm_W5.0mm_P5.00mmC10
110uCapacitor_THT:CP_Radial_D5.0mm_P2.00mmC3
1220Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR9
1Apple J20Connector_PinHeader_2.54mm:PinHeader_2x10_P2.54mm_VerticalJ1
1Arduino_Nano_EveryModule:Arduino_NanoA1
1ButtonsConnector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalMISTER BUTTONS
1Front PanelConnector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalFRONT PANEL
1HeadphonesConnector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalHEADPHONES
1I2SConnector_JST:JST_XH_B5B-XH-A_1x05_P2.50mm_VerticalJ4
1LCC110Package_DIP:DIP-8_W7.62mmU3
1PowerConnector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalPOWER
1Rotary EncoderConnector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalROTARY ENCODER
1SpeakerConnector_JST:JST_XH_B4B-XH-A_1x04_P2.50mm_VerticalSPEAKERS
1TPA6021A4NMiSTer-G3:TPA6021A4U1
1UDA1334AMiSTer-G3:UDA1334_BreakoutU2
1VGA InputConnector_Dsub:DSUB-15-HD_Female_Horizontal_P2.29x1.98mm_EdgePinOffset8.35mm_Housed_MountingHolesOffset10.89mmJ2

More from wickerwaka/iMacSTer

2
  • 2 layers56.5 × 57.5 mmUSBHub, the printed circuit board in 3D

    USBHub

    wickerwaka/iMacSTer

    A MiSTer FPGA inside of an iMac G3

    35 parts34LGPL-3.0

Similar boards

  • 2 layers60 × 110 mmEmac Nano, the printed circuit board in 3D

    Emac Nano

    aaron-mueller-18/emac-mini

    Work in tricking the IVAD video controller on the Apple eMac to take regular VGA signal. Custom PCB with Arduino Nano controlling EDID handshake and passing VGA signal.

    22 parts1
  • 2 layers82.5 × 52.5 mmImac g3 333mhz slot loading J20 adapter board, the printed circuit board in 3D

    Imac g3 333mhz slot loading J20 adapter board

    JJaroll/MacBerry-Pi

    Mod del iMac G3 slot-loading (M5521) con Raspberry Pi 5: PCB maestra unificada, placas individuales (J20, J22, Down Converter), bezel interior y visores 3D. Todo en español.

    22 partsLGPL-3.0
  • 2 layers30 × 50 mmModuleV400, the printed circuit board in 3D

    ModuleV400

    stuartpittaway/diyBMSv4

    Version 4 of the diyBMS

    42 parts1.1k
  • 2 layers139.7 × 64.8 mmSprig console, the printed circuit board in 3D

    Sprig console

    hackclub/sprig

    🍃 Learn to code by making games in a JavaScript web-based game editor.

    42 parts1.1kMIT
  • 2 layers90.5 × 50 mmMain control board, the printed circuit board in 3D

    Main control board

    jamro/tiny-engineer

    A small desktop robot that brings an AI coding assistant to life, physically acting out when it reads files, thinks, writes code, and finishes work.

    42 parts1.1k
  • 2 layers67.6 × 30.5 mmRgb to hdmi, the printed circuit board in 3D

    Rgb to hdmi

    hoglet67/RGBtoHDMI

    Bare-metal Raspberry Pi project that provides pixel-perfect sampling of Retro Computer RGB/YUV video and conversion to HDMI

    42 parts1kGPL-3.0
  • 2 layers190 × 80 mmPcb shield, the printed circuit board in 3D

    Pcb shield

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    42 parts915

Questions

How big is the MiSTer G3 PCB?

It measures 130 × 91.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the MiSTer G3 use?

42 parts, built around the TPA6021A4N and LCC110. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the MiSTer G3 KiCad files?

From the wickerwaka/iMacSTer repository on GitHub, at the commit this page was made from: the board is schematics/MiSTer-G3/MiSTer-G3.kicad_pcb and its schematic schematics/MiSTer-G3/MiSTer-G3.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the MiSTer G3 design in my own project?

Its repository publishes it under the LGPL-3.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).