Skip to the content
PCBKitNew board
2 layers20.3 × 118.1 mmEMP-20Module, the printed circuit board in 3D

Universal EMP-20 Family Module

Size
20.3 × 118.1 mm
Copper layers
2
Thickness
1.6 mm
Parts
152
Nets
152
Pads
458
Tracks, vias
224, 4
Routed
Yes
KiCad
KiCad 5 (file 20171130)
Created
13 Aug 2019
Updated
2 Mar 2022

Overview

EMP-20Module is an open-source printed circuit board by schlae, from the schlae/EMP-20Module repository on GitHub. It is a 2-layer board of 20.3 × 118.1 mm with 152 parts on 152 nets, routed with 224 tracks and 4 vias.

README

README.md

Universal EMP-20 Family Module

The Needham Electronics EMP-20 is an older parallel-port connected device programmer that can be found fairly inexpensively and supports a wide range of older devices, so it is particularly useful for retrocomputing.

The EMP-20 requires a set of family modules to rewire the socket for particular types of target devices. Typically only power, ground, and VPP signals route through the family module.

Unfortunately many used EMP-20 devices are missing many family modules, making them much less useful -- until now!

I've designed a universal family module that can be wired up as many different modules by following the chart further down the page.

Fabrication

You can download the fabrication files here.

Please note that this board is NOT the normal 1.6mm thickness. To fit in the SIMM socket, you will need to fabricate it with a 1.2mm thickness. Some fab vendors offer this thickness and are relatively affordable -- take a look at pcbway.com for example.

Dimensions are 20.32mm x 118.11mm. Two layers, 1oz copper finish. You can go for ENIG if you wish, but the originals were HASL so that's probably fine too.

Module Wiring Chart

Each module has two sets of wiring, one for the A side and the other for the B side. For example, if you want to build module 01, you will need to assemble both rows 01A and 01B from the table below.

To begin wiring a module, orient the board so the text on the right side is not upside down. First thing to assemble is the ID code. Convert the ID code from the table into binary. Wherever there is a logical '1', solder across the appropriate IDx jumpers on the top right of the board. For example, if you're assembling module 09A, you have module ID 17, which is 10001 in binary. This means that you will solder jumpers on ID0 and ID4.

Next, go through the list of grounds and solder a short across that pin. For example, if the number '2' is in the list of grounds, solder a jumper wire or place a 0 ohm resistor across the two pads labeled '2' on the board.

For the point-to-point wiring, solder a wire from the right-most pad next to the number called out, then run it to the right-most pad next to the other number that is called out. For example, 17->72 means you have to solder a jumper wire from the right-most pad next to the number 17 and run it to the right-most pad next to the number 72.

Some modules have passive components on them. 14->150pF->GND means that you need to solder a 150pF surface mount capacitor across the pads next to the number 14. 12->100 ohm->70 means that you need to solder a 100 ohm resistor to the right-most pad next to number 12, then solder a jumper wire to the other terminal of the resistor (DO NOT let it touch the left pad) and run it to the right-most pad next to number 70. It's basically just a jumper wire with a resistor in series.

Photo of a card

In the picture, the family module is partially assembled. Only the A side has any wiring, and it is set to ID 5. A 150pF capacitor to ground is installed at pad 14, and a jumper wire goes from pad 16 to pad 72.

When you've finished that side, you may want to check it with a multimeter to make sure you didn't make any mistakes. Then rotate the board 180 degrees and repeat the process with side B.

You'll want to test the module first with a device that you don't care about just in case something's not wired correctly. If you can program and verify successfully, then congratulations!

Module IDNameID codeGroundsPoint-to-pointSpecial
01AStandard EPROM1217->72, 19->62, 25->70, 28->58, 29->68, 32->56, 33->66
01B16 bit EPROMS221, 213->68, 23->62, 40->58, 45->70
02AIntel 8048/49/51/52 uP32, 1911->72, 13->70, 23->68, 28->62, 32->58, 45->54
02B87X7xx4662->70, 6->68, 14->72, 18->58, 25->56, 29->54
03APAL 16V8/20V8/22V10526->62, 16->72, 18->68, 20->58, 21->56, 22->70, 25->54,14->150pF->GND
03BGAL 16V8/22V10, etc623->62, 5->55, 7->61, 18->72, 21->70, 22->58, 24->56, 25->68, 28->64, 29->66
04APIC16C5x family745, 6410->72, 11->62, 22->58, 26->56, 33->6612->100 ohm->70, 29->100 ohm->68
04BSerial EEPROMS816, 19, 662->70, 3->68, 5->56, 7->72, 9->62, 17->18->54, 21->58
05AZilog Z86
05BZilog Z86
06AZilog Z86
06BZilog Z86
07AXicor PAL
07Bn/a
08ACypress EPROMS
08BLarge EPROM/flash
09A68HC705, MACH172, 464->72, 19->70, 26->58, 29->62, 36->68, 38->60, 45->56
09B67HC7111841, 643->44->56, 10->70, 11->62, 13->72, 22->68, 40->58
10AEEPROM
10Bn/a
11APEEL devices2123->68, 4->70, 14->72, 18->58, 20->62, 21->56, 24->60, 25->54
11BTMS77822245, 642->72, 11->68, 15->58, 16->70, 18->62, 28->56, 33->54
12APSD
12Bn/a
13AAltera EP devices
13BAltera
14AAtmel 22V102724->72, 14->70, 16->58, 24->56, 25->603-> -|<- 1N5818 ->68
14BATV250028213->56, 5->58, 22->60, 36->72, 37->702-> -|<- 1N5818 ->68
15A29F100/200
15BEP1800
16AGAL26V12311516->68, 26->58
16BPIC16C6x/PIC17Cxx3222, 2325->54, 40->68
17A62Txx
17B62T/Exx
18APEEL/ATTiny/X763525->68, 6->70, 8->62, 9->56, 16->72, 24->60, 25->54
18BPIC16Cxx366613->58, 14->68, 18->23->70, 20->25->72, 28->56, 40->54
19AXC72xx
19BXC95xx (Xilinx)
20AXC72xx
20Bn/a
21An/a
21BAT17Cxx
22A29F002
22B29F1xx
23AAtmel 150x family
23BATV2500
24ACOP87xx
24BCOP87xx
25AAT22V10B
25BP51-XA-G1
26APIC14000
26B22V10
27A26C512
27BZ86
28APIC12C families5520, 21, 642->56, 3->68, 8->70, 9->72, 46->62
28BP28F002566, 3218->20->68, 23->62, 25->58
29A29F070-psop44
29B27SF010

This chart is incomplete. I have ohmed out all the modules I have, but I am counting on the community to provide the rest. If you have a module that's not on the list, ohm out the connections! You can submit a pull request or contact me directly.

License

This work is licensed under a Creative Commons Attribution 4.0 International License. See https://creativecommons.org/licenses/by/4.0/.

Parts

152
QtyValueFootprintReferences
210Passive:RESC1608X55_HandSolderingJP66, JP140
211Passive:RESC1608X55_HandSolderingJP65, JP139
212Passive:RESC1608X55_HandSolderingJP64, JP138
213Passive:RESC1608X55_HandSolderingJP63, JP137
214Passive:RESC1608X55_HandSolderingJP62, JP136
215Passive:RESC1608X55_HandSolderingJP61, JP135
216Passive:RESC1608X55_HandSolderingJP60, JP134
217Passive:RESC1608X55_HandSolderingJP59, JP133
218Passive:RESC1608X55_HandSolderingJP58, JP132
219Passive:RESC1608X55_HandSolderingJP57, JP131
22Passive:RESC1608X55_HandSolderingJP74, JP148
220Passive:RESC1608X55_HandSolderingJP56, JP130
221Passive:RESC1608X55_HandSolderingJP55, JP129
222Passive:RESC1608X55_HandSolderingJP54, JP128
223Passive:RESC1608X55_HandSolderingJP53, JP127
224Passive:RESC1608X55_HandSolderingJP52, JP126
225Passive:RESC1608X55_HandSolderingJP51, JP125
226Passive:RESC1608X55_HandSolderingJP50, JP124
227Passive:RESC1608X55_HandSolderingJP49, JP123
228Passive:RESC1608X55_HandSolderingJP48, JP122
229Passive:RESC1608X55_HandSolderingJP47, JP121
23Passive:RESC1608X55_HandSolderingJP73, JP147
230Passive:RESC1608X55_HandSolderingJP46, JP120
231Passive:RESC1608X55_HandSolderingJP45, JP119
232Passive:RESC1608X55_HandSolderingJP44, JP118
233Passive:RESC1608X55_HandSolderingJP43, JP117
234Passive:RESC1608X55_HandSolderingJP42, JP116
235Passive:RESC1608X55_HandSolderingJP41, JP115
236Passive:RESC1608X55_HandSolderingJP40, JP114
237Passive:RESC1608X55_HandSolderingJP39, JP113
238Passive:RESC1608X55_HandSolderingJP38, JP112
239Passive:RESC1608X55_HandSolderingJP37, JP111
24Passive:RESC1608X55_HandSolderingJP72, JP146
240Passive:RESC1608X55_HandSolderingJP36, JP110
241Passive:RESC1608X55_HandSolderingJP35, JP109
242Passive:RESC1608X55_HandSolderingJP34, JP108
243Passive:RESC1608X55_HandSolderingJP33, JP107
244Passive:RESC1608X55_HandSolderingJP32, JP106
245Passive:RESC1608X55_HandSolderingJP31, JP105
246Passive:RESC1608X55_HandSolderingJP30, JP104
247Passive:RESC1608X55_HandSolderingJP29, JP103
248Passive:RESC1608X55_HandSolderingJP28, JP102
249Passive:RESC1608X55_HandSolderingJP27, JP101
25Passive:RESC1608X55_HandSolderingJP71, JP145
254Passive:RESC1608X55_HandSolderingJP26, JP100
255Passive:RESC1608X55_HandSolderingJP25, JP99
256Passive:RESC1608X55_HandSolderingJP24, JP98
257Passive:RESC1608X55_HandSolderingJP23, JP97
258Passive:RESC1608X55_HandSolderingJP22, JP96
259Passive:RESC1608X55_HandSolderingJP21, JP95
26Passive:RESC1608X55_HandSolderingJP70, JP144
260Passive:RESC1608X55_HandSolderingJP20, JP94
261Passive:RESC1608X55_HandSolderingJP19, JP93
262Passive:RESC1608X55_HandSolderingJP18, JP92
263Passive:RESC1608X55_HandSolderingJP17, JP91
264Passive:RESC1608X55_HandSolderingJP16, JP90
265Passive:RESC1608X55_HandSolderingJP15, JP89
266Passive:RESC1608X55_HandSolderingJP14, JP88
267Passive:RESC1608X55_HandSolderingJP13, JP87
268Passive:RESC1608X55_HandSolderingJP12, JP86
269Passive:RESC1608X55_HandSolderingJP11, JP85
27Passive:RESC1608X55_HandSolderingJP69, JP143
270Passive:RESC1608X55_HandSolderingJP10, JP84
272Passive:RESC1608X55_HandSolderingJP8, JP82
28Passive:RESC1608X55_HandSolderingJP68, JP142
29Passive:RESC1608X55_HandSolderingJP67, JP141
2ID0Conn:JMP1608JP1, JP75
2ID1Conn:JMP1608JP2, JP76
2ID2Conn:JMP1608JP3, JP77
2ID3Conn:JMP1608JP4, JP78
2ID4Conn:JMP1608JP5, JP79
2ID5Conn:JMP1608JP6, JP80
2ID6Conn:JMP1608JP7, JP81
2ID7Conn:JMP1608JP9, JP83
2MountingHoleConn:MH_125H1, H2
1SIDE AConn:EDGE_DIMM_80_127J1
1SIDE BConn:EDGE_DIMM_80_127J2

Questions

How big is the EMP-20Module PCB?

It measures 20.3 × 118.1 mm and has 2 copper layers, 1.6 mm thick.

What parts does the EMP-20Module use?

152 parts. 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 EMP-20Module KiCad files?

From the schlae/EMP-20Module repository on GitHub, at the commit this page was made from: the board is EMP-20 Module.kicad_pcb. PCBKit opens the board in the browser, with nothing to install.

Can I use the EMP-20Module design in my own project?

Its repository states no licence, so its author keeps all rights: ask schlae before reusing the design.

Similar boards

  • 2 layers101.6 × 32.4 mmStimulator, the printed circuit board in 3D

    Stimulator

    rusefi/rusefi

    rusefi - GPL internal combustion engine control unit

    152 parts1.2k
  • 2 layers100 × 69.5 mmModulAdapterBasic, the printed circuit board in 3D

    ModulAdapterBasic

    GaudiLabs/OpenDrop

    Open Source Digital Microfluidics Bio Lab

    152 parts492GPL-3.0
  • 2 layers139.1 × 107.7 mmLotus58 Glow 142, the printed circuit board in 3D

    Lotus58 Glow 142

    TweetyDaBird/Lotus-58-Classic

    A split ergo linear keyboard derived from the Lily58 family

    152 parts390
  • 2 layers92 × 94.5 mmPicoCNC, the printed circuit board in 3D

    PicoCNC

    phil-barrett/PicoCNC

    Raspberry Pi Pico based grblHAL Controller

    152 parts173
  • 2 layers182.8 × 158.9 mmErgoDone, the printed circuit board in 3D

    ErgoDone

    ktec-hq/ErgoDone

    ErgoDox using pro micro. Original work by Dox. Brainhole association present

    152 parts123GPL-3.0
  • 2 layers309.4 × 145.3 mmAtreyu pcb2, the printed circuit board in 3D

    Atreyu pcb2

    climent/atreyu

    Making a Lily58fied version of the Atreis keyboard.

    152 parts63MIT
  • 2 layers100 × 116 mmQPCR main, the printed circuit board in 3D

    QPCR main

    hisashin/qNinja

    Open source Real-Time Quantitative PCR Implementation

    152 parts48GPL-3.0