c0d3m4st4, no se como has hecho tu programa, tal vez esto ya lo tienes hecho así.
Pero, se me ocurre una idea genial si tienes tiempo.
Que el programa carge el HEX original, parsee el código (eliminando el checksum, y todo lo redundante, ya sabes a lo que me refiero)
Busque la cadena del PSJ original, si no la encuentra diga: "HEX sin payload de PSJ original, no se puede parchear"
Y si la encuentra, que te pida el payload nuevo.
Luego copypastee dentro de la cadena interna, y vuelva a generar el HEX, añadiendo los checks de nuevo, y todo el formato necesario (cabeceras, etc).
Así, por sea caso, te valdría el mismo programa para HEX totalmente muy distintos. De varios clones diferentes, incluso de chips que no sean ATMEGA16A, pero que se programen por LPT.
Es solo una idea, bastante buena
Yo no tengo tiempo para ponerme a programar.
Saludos!