Hi Siegfried, I think your analysis of the options is fair. I guess that something like the AN589 circuit is the best given your criteria, though it's not perfect. I doubt whether it is really necessary to switch VDD for in-circuit programming. Of course, there is really no _best_ solution to in-circuit programming. For many of the circuits I deal with it is not necessary to put RB6 or RB7 into Hi-Z state and I can use open collector outputs to drive these pins provided I leave the outputs in the off state after programming. Here is a circuit I devised recently for a simple RS232 based parallel interface that had only three outputs available. By the way, this RS232 based interface makes the programmer machine independent or at least makes it possible to use the programmer on any machine with an RS232 interface and a C compiler - I have used it on an IBM clone (both DOS and Linux) and a Sun workstation and I guess it will also work on a Mac. The interface is based on a few cheap CMOS chips and was designed as part of an ongoing project to produce a universal PIC programmer, like the ETI one, but one which could be constructed without needing access to an existing programmer. Really, a MAX232/16C84 combo makes a great 16CXX programmer. Note for this circuit to work the MCLR line is tied to the system VDD via a diode and 1k resistor on the target board: VIN +-------+ >17V | | _____ >--+----| 78L12 |----+-----+----+------------------+ +-[_____]--+ | | | | | | | | 2k2 | +__|__ +-------+ __|__ | | _____ | | _|_ _____ | _____ | +--[_____]--+ | | \ /^ RED 47u | _|_ 470n | | 10k | |E | --- LED | \ /^ | | _____ | |/ | | /// --- /// | +--[_____]--+----| | | GREEN | | | 10k |\ | /// LED | | | BC560 |C | _____ /// | +------------+ +--+-[_____]--+ | | | 100 | | | --- _|_ /DOUT2* >-------------------------+ 1N4148 /_\ 1N4148 \ / RB6 | | --- /DOUT0* >----+-----------> | _____ | _____ | | +-------[_____]---+ +--[_____]--+----> /DOUT1* >--+-------------> 22k | | 10k | MCLR | | _____ RB7 | /// |C | +--[_____]--+-------> | |/ | _____ | SYS VDD +-----------------| BC550 DIN0 <--+----[_____]--+ |C |\ 2 X 10k _____ |/ |E /DOUT0 >--------------------------[_____]---| BC550 | 10k |\ | |E BC560 PNP | Copyright (C) 1995 David Tait | BC550 NPN | /// /// This can be used with a standard parallel port by employing open collector buffers to provide the signals /DOUT0*-/DOUT2* (/DOUT0 has the same logical levels as /DOUT0* but is not open collector and can come directly from the port). The signals are decoded to give +13V, 0V or floating (i.e. +5V) for MCLR. With more signals available from the port the open collector signals could come from tri-state buffers instead. In short, I doubt if you'll have a problem devising a suitable circuit providing you are happy to provide the software to drive it yourself. Cheers, David -- david.tait@man.ac.uk