I reworked the MCU selection code. The if-then structure was OK for dozen of devices, but with more than 200 supported MCUs, it became messy. So I rewrote it into simple plain text file database with entries like
# PP3 device database for version 0.92 # # name flash page ID mask family_type # flash size and page size in bytes 1 WORD = 2 BYTES # # PIC16 family 16f1503 4096 32 2CE0 FFE0 CF_P16F_A 16lf1503 4096 32 2DA0 FFE0 CF_P16F_A 16f1507 4096 32 2D00 FFE0 CF_P16F_A 16f1508 8192 32 2D20 FFE0 CF_P16F_A 16f1509 16384 32 2D40 FFE0 CF_P16F_A 16lf1507 4096 32 2DC0 FFE0 CF_P16F_A 16lf1508 8192 32 2DE0 FFE0 CF_P16F_A 16lf1509 16384 32 2E00 FFE0 CF_P16F_A 16f1454 16384 64 3020 FFFF CF_P16F_A 16f1455 16384 64 3021 FFFF CF_P16F_A ... ...so it is easy to edit (add new PIC devices or fix mistakes in existing) by hand without recompiling the code. The pp3 takes all the information about device to be programmed from here. The original source shrunk from 2700 to 900 lines of code.
I also added 67 more PIC18FxxJxx devices and one PIC16F, so it supports 273 devices in total. At last, I tested support for another 7 devices, all of them working on a first try. I feel like time for 1.0 release is near.
Everything is on github, as usual.