You need to understand how a "universal" programmer works before attempting to purchase one. The typical programmer has a 40-pin Zero Insertion Force (ZIF) socket with each of those 40 pins connected to a software programmable "pin driver" circuit. The pin driver is capable of receiving binary data presented to the pin by the device being programmed, or Device Under Test (DUT). The pin driver is also capable of providing a voltage to the pin, the nature of this voltage being dependent on function required.
For example, obviously power and ground or Vcc and Vdd must be supplied to the device. The software that controls the programmer chooses which of the 40 pins gets power and ground based on what the DUT is, whether it is a microprocessor, an EPROM, an EEPROM, or a FLASH memory. You have to specify the DUT when "setting up" the programmer.
Many devices, such as EPROMs and EEPROMs, require address lines (where is the data going to be stored?) as well as one or more data lines. Some devices have internal address registers that are incremented during the programming process. In addition to "setting up" the DUT to accept data bits and store those bits in specific locations, there is usually a requirement to provide one or more pulses of specific amplitude, duration, and timing (with respect to other things that are going on, such as address and data presentation). The logic circuits inside the programmer are set up by software to provide all these things, to the correct pin drivers, when the DUT is specified by the user. The software is also responsible for "reading back" or verifying that the data stored is "correct" and is stored in the "correct" locations.
There are several other "features" a modern "universal" programmer may choose to implement (in software of course!) such as DUT checking to ensure it is inserted with the correct orientation, that all the pins make good electrical contact, that the DUT is ready to accept data (internal "security" bits aren't set), and perhaps that the device is "erased" so it is ready to program. Some programmers will erase devices such as EEPROMs and FLASH memories prior to writing new data.
The capabilities of the "universal" programmer absolutely depend on the programmer manufacturer having a detailed description from the DUT manufacturer of exactly how to write (and read) data for the device. The exact method varies widely from one DUT to another. There are literally tens of thousands of devices (well, potentially an infinite number, actually) that a "universal" programmer can program... all that is needed is the appropriate setup and control software in the programmer for the DUT. Obviously there is some overlap within a DUT family, so even different part numbers may still use the same software for setup and control. But microprocessors are all over the map when it comes to how they are programmed, so the DUT part number has to be very specific.
But, you say, I only have this small number of devices to program. Why should I pay big bux for a "universal" programmer that programs zillions of parts I will never use? Well, that's the way the cookie crumbles. The hardware is there to program any DUT that fits in the ZIF socket and requires voltages the programmer can produce. The only thing that changes is the software controlling the programmer (those 40 pin-drivers, remember?). You just have to make sure that whichever "universal" programmer you choose actually has the software required to program your small number of devices. It helps if the programmer manufacturer has a good "track record" and adequate technical support to "upgrade" their programmer with software for the latest gee-whiz DUT, just in case you later decide to add to your small number of devices.

Google for reviews.
As a side note, back in the day, ultra-violet erasable EPROMs were used to store the program the microprocessor executed. I bought an inexpensive Asian programmer whose ZIF socket was controlled with a special interface card that plugged into an expansion card slot on a PC. The software was supplied as a binary executable that ran under MS-DOS. No schematics. No source code. A very limited number of EPROM types were supported. FLASH memory didn't exist yet, much less microprocessors with built-in FLASH program memory. IIRC, you could purchase μPs with one-time programmable ROM, but those were usually used as embedded processors for mass-market peripheral devices like printers or reel-to-reel 9-track magnetic tape drives... and maybe clocks.
A "universal" programmer usually requires a program development environment that (eventually) produces the binary image that will be downloaded or "burned" into the DUT and executed by a microprocessor. If all you have is the binary image someone else provided, you can use that image with the "universal" programmer, but it is very difficult to troubleshoot if the program doesn't work properly. Sometimes it can take years before a "bug" appears unexpectedly in a program that has been running successfully "in the field" and exists in hundreds if not thousands of product. Without a program development environment (and a person who knows how to use it) you are up the proverbial excrement-filled tributary in a flotation device without a means of propulsion. Good luck with that.