Programmer (hardware)

[3]: 3 Typically, the target device memory is one of the following types: PROM, EPROM, EEPROM, Flash memory, eMMC, MRAM, FeRAM, NVRAM, PLD, PLA, PAL, GAL, CPLD, FPGA.

In some cases, the target device is inserted into a socket (usually ZIF) on the programmer.

[4]: 642, pdf15  If the device is not a standard DIP packaging, a plug-in adapter board, which converts the footprint with another socket, is used.

It means the programmer was not an equipment but a human, who entered machine codes one by one, by setting the switches in a series of "on" and "off" positions.

These positions of switches corresponded to the machine codes, similar to today's assembly language.

Engineering Universal Programmer with two sockets
Pocket Programmer Galep-5 with a ZIF socket
Universal Gang Programmer with 16 sockets
BPM 3928 Automated Programming System
The 3928 , with up to seven sites,  is made for programming large data devices, such as  MCUs, eMMC HS400, NAND, NOR and Serial Flash devices.  High-speed signals support devices up to 200 MHz and the latest eMMC HS400 modes with data transfer rates of 2.5 nanoseconds per byte.
JTAG Connector -based
On-Board Programmer
for AVR microcontroller
with USB Port interface
A Gang Programmer with a Set of 4 Sockets .
Historical Programmer;
A shoebox size
Pocket-sized & USB Port interfaced " ICE for MCU " &
Flash memory Programmer