diff --git a/Drivers/CH341PAR.ZIP b/Drivers/CH341PAR.ZIP
new file mode 100644
index 0000000..0134440
Binary files /dev/null and b/Drivers/CH341PAR.ZIP differ
diff --git a/Drivers/CH341SER.zip b/Drivers/CH341SER.zip
new file mode 100644
index 0000000..140d255
Binary files /dev/null and b/Drivers/CH341SER.zip differ
diff --git a/Drivers/COMTransmit.ZIP b/Drivers/COMTransmit.ZIP
new file mode 100644
index 0000000..9de95c3
Binary files /dev/null and b/Drivers/COMTransmit.ZIP differ
diff --git a/Tools/AsProgrammer/AsProgrammer.exe b/Tools/AsProgrammer/AsProgrammer.exe
new file mode 100644
index 0000000..ec69a29
Binary files /dev/null and b/Tools/AsProgrammer/AsProgrammer.exe differ
diff --git a/Tools/AsProgrammer/CH341DLL.DLL b/Tools/AsProgrammer/CH341DLL.DLL
new file mode 100644
index 0000000..c9f2eb1
Binary files /dev/null and b/Tools/AsProgrammer/CH341DLL.DLL differ
diff --git a/Tools/AsProgrammer/Devices/FuseBits.xml b/Tools/AsProgrammer/Devices/FuseBits.xml
new file mode 100644
index 0000000..d22f4f9
--- /dev/null
+++ b/Tools/AsProgrammer/Devices/FuseBits.xml
@@ -0,0 +1,447 @@
+
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ TA0SEL,BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ TA0SEL,BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ TA0SEL,BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BOOTRST,BOOTSZ0,BOOTSZ1,,PSCRV,PSC0RB,PSC1RB,PSC2RB
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BOOTRST,BOOTSZ0,BOOTSZ1,,PSCRV,PSC0RB,,PSC2RB
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ ,,,,,,,
+ ,,,,,,,
+ ,,,,,,,
+ ,LB1,LB2,,,,,
+
+
+ ,,,,,,,
+ ,,,,,,,
+ ,,,,,,,
+ ,LB1,LB2,,,,,
+
+
+ ,,,,,,,
+ RCEN,,,,,,,
+ ,,,,,,,
+ ,LB2,LB1,,,,,
+
+
+ ,,,,,,,
+ ,,,,,,,
+ ,,,,,,,
+ ,LB2,LB1,,,,,
+
+
+ ,,,,,,,
+ ,,,,,,,
+ ,,,,,,,
+ ,LB2,LB1,,,,,
+
+
+ ,,,,,,,
+ ,,,,,,,
+ ,,,,,,,
+ ,LB2,LB1,,,,,
+
+
+ ,,,,,,,
+ ,,,,,,,
+ ,,,,,,,
+ ,LB2,LB1,,,,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,HWBE,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,RSTDSBL,DWEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,HWBE,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,HWBE,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,CKOPT,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,BODEN,BODLEVEL
+ WDTON,M103C,,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,CKOPT,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,BODEN,BODLEVEL
+ ,,,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,RSTDSBL,DWEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,HWBE,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,,CKDIV8
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,HWBE,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ ,,,,,,,
+ CKSEL0,CKSEL1,CKSEL2,,SUT,,BOOTRST,
+ ,,,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ ,BODLEVEL0,BODLEVEL1,BODLEVEL2,M161C,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,,,,,
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,,,BODEN,BODLEVEL
+ ,,,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BOOTRST,BOOTSZ0,BOOTSZ1,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BOOTRST,BOOTSZ0,BOOTSZ1,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ ,BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,CKOPT,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,BODEN,BODLEVEL
+ ,,,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,RSTDSBL,DWEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,HWBE,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0, SUT1,CKOUT,CUTUT,CKOUT,CKOUT
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,HWBE,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ RSTDISBL,BODLEVEL0,BODLEVEL1,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ RSTDISBL,BODLEVEL0,BODLEVEL1,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,SPIEN,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,SPIEN,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ RSTDISBL,BODLEVEL0,BODLEVEL1,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ RSTDISBL,BODLEVEL0,BODLEVEL1,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ JTAGEN,OCDEN,,,,,,
+ CKSEL,SUT0,SUT1,BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON
+ ,,,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ SELFPRGEN,,,,,,,
+ LB1,LB2,,,,,,
+
+
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ SELFPRGEN,,,,,,,
+ LB1,LB2,,,,,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,CKOPT,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,BODEN,BODLEVEL
+ WDTON,M103C,,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ RSTDISBL,BODLEVEL0,BODLEVEL1,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ RSTDISBL,BODLEVEL0,BODLEVEL1,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ RSTDISBL,BODLEVEL0,BODLEVEL1,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ RSTDISBL,BODLEVEL0,BODLEVEL1,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,CKOPT,,WDTON,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,BODEN,BODLEVEL
+ ,,,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,RSTDSBL,DWEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,HWBE,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,CKOPT,,WDTON,S8515C
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,BODEN,BODLEVEL
+ ,,,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,CKOPT,,WDTON,S8535C
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,BODEN,BODLEVEL
+ ,,,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BOOTRST,BOOTSZ0,BOOTSZ1,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ BOOTRST,BOOTSZ0,BOOTSZ1,,,,,
+ LB1,LB2,BLB01,BLB02,BLB11,BLB12,,
+
+
+ ,,,,,,,
+ CKSEL0,CKSEL1,CKSEL2,RSTDISBL,FSTRT,,,
+ ,,,,,,,
+ ,LB1,LB2,,,,,
+
+
+ ,,,,,,,
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,RSTDISBL,SPIEN,BODEN,BODLEVEL
+ ,,,,,,,
+ ,LB1,LB2,,,,,
+
+
+ RSTDISBL,BODLEVEL0,BODLEVEL1,DWEN,SELFPRGEN,,,
+ CKSEL0,CKSEL1,SUT0,SUT1,CKDIV8,WDTON,EESAVE,
+ ,,,,,,,
+ LB1,LB2,,,,,,
+
+
+ ,,,,,,,
+ CKSEL0,CKSEL1,,,RSTDISBL,SPIEN,BODEN,BODLEVEL
+ ,,,,,,,
+ ,LB1,LB2,,,,,
+
+
+ RSTDISBL,BODLEVEL0,BODLEVEL1,BODLEVEL2,WDTON,,EESAVE,DWEN
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ SELFPRGEN,,,,,,,
+ LB1,LB2,,,,,,
+
+
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ SELFPRGEN,,,,,,,
+ LB1,LB2,,,,,,
+
+
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ SELFPRGEN,,,,,,,
+ LB1,LB2,,,,,,
+
+
+ BODEN,BODLEVEL,EESAVE,,RSTDISBL,,,
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOPT,PLLCK
+ ,,,,,,,
+ LB1,LB2,,,,,,
+
+
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ SELFPRGEN,,,,,,,
+ LB1,LB2,,,,,,
+
+
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ SELFPRGEN,,,,,,,
+ LB1,LB2,,,,,,
+
+
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ SELFPRGEN,,,,,,,
+ LB1,LB2,,,,,,
+
+
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ SELFPRGEN,,,,,,,
+ LB1,LB2,,,,,,
+
+
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ SELFPRGEN,,,,,,,
+ LB1,LB2,,,,,,
+
+
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ SELFPRGEN,,,,,,,
+ LB1,LB2,,,,,,
+
+
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8
+ SELFPRGEN,,,,,,,
+ LB1,LB2,,,,,,
+
+
+ BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL
+ CKSEL0,CKSEL1,,,SUT0,SUT1,CKOUT,CKDIV8
+ SELFPRGEN,,,,,,,
+ LB1,LB2,,,,,,
+
+
diff --git a/Tools/AsProgrammer/Devices/StatBits.xml b/Tools/AsProgrammer/Devices/StatBits.xml
new file mode 100644
index 0000000..2d70fc0
--- /dev/null
+++ b/Tools/AsProgrammer/Devices/StatBits.xml
@@ -0,0 +1,227 @@
+
+
+
+
+
+ S0,S1,S2,S3,S4,S5,S6,S7
+ S8,S9,S10,S11,S12,S13,S14,S15
+ S16,S17,S18,S19,S20,S21,S22,S23
+
+
+
+
+ BUSY,WEL,BP0,BP1,BP2,BP3,TB,SRP0
+ ,,,,,,,
+ ,,,,,,,
+
+
+
+
+ SP,Comp,Inv,BP0,BP1,BP2,,BPRWD
+ QE,,,,ECC-E,,OTP-E,OTP-L
+ BUSY,WEL,E-FAIL,P-FAIL,ECC-S0,ECC-S1,CRBSY,
+
+
+ ,,,BP0,BP1,BP2,,BPRWD
+ QE,,,,ECC-E,,OTP-E,OTP-L
+ BUSY,WEL,E-FAIL,P-FAIL,ECC-S0,ECC-S1,,
+
+
+ SP,Comp,Inv,BP0,BP1,BP2,,BPRWD
+ QE,,,,,,OTP-E,OTP-L
+ BUSY,WEL,E-FAIL,P-FAIL,,,CRBSY,
+
+
+ SP,Comp,Inv,BP0,BP1,BP2,,BPRWD
+ QE,,,,,,OTP-E,OTP-L
+ BUSY,WEL,E-FAIL,P-FAIL,,,,
+
+
+ SP,Comp,Inv,BP0,BP1,BP2,,BPRWD
+ QE,,,,,,OTP-E,OTP-L
+ BUSY,WEL,E-FAIL,P-FAIL,,,,
+
+
+
+
+ BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0
+ SRP1,QE,,LB1,LB2,LB3,CMP,SUS
+ ,,WPS,,,DRV0,DRV1,HOLD/RST
+
+
+ BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0
+ SRP1,QE,,LB1,LB2,LB3,CMP,SUS
+ ,,WPS,,,DRV0,DRV1,HOLD/RST
+
+
+ BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0
+ SRP1,QE,,LB1,LB2,LB3,CMP,SUS
+ ,,WPS,,,DRV0,DRV1,HOLD/RST
+
+
+ BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0
+ SRP1,QE,,LB1,LB2,LB3,CMP,SUS
+ ,,WPS,,,DRV0,DRV1,HOLD/RST
+
+
+ BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0
+ SRP1,QE,,LB1,LB2,LB3,CMP,SUS
+ ,,WPS,,,DRV0,DRV1,HOLD/RST
+
+
+ BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0
+ SRP1,QE,,LB1,LB2,LB3,CMP,SUS
+ ,,WPS,,,DRV0,DRV1,HOLD/RST
+
+
+ BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0
+ SRP1,QE,,LB1,LB2,LB3,CMP,SUS
+ ,,WPS,,,DRV0,DRV1,HOLD/RST
+
+
+ BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0
+ SRP1,QE,,LB1,LB2,LB3,CMP,SUS
+ ,,WPS,,,DRV0,DRV1,HOLD/RST
+
+
+ BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0
+ SRP1,QE,,LB1,LB2,LB3,CMP,SUS
+ ,,WPS,,,DRV0,DRV1,HOLD/RST
+
+
+ BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0
+ SRP1,QE,,LB1,LB2,LB3,CMP,SUS
+ ,,WPS,,,DRV0,DRV1,HOLD/RST
+
+
+ BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0
+ SRP1,QE,,LB1,LB2,LB3,CMP,SUS
+ ,,WPS,,,DRV0,DRV1,HOLD/RST
+
+
+ BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0
+ SRP1,QE,,LB1,LB2,LB3,CMP,SUS
+ ,,WPS,,,DRV0,DRV1,HOLD/RST
+
+
+ BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0
+ SRP1,QE,,LB1,LB2,LB3,CMP,SUS
+ ,,WPS,,,DRV0,DRV1,HOLD/RST
+
+
+ BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0
+ SRP1,QE,,LB1,LB2,LB3,CMP,SUS
+ ,,WPS,,,DRV0,DRV1,HOLD/RST
+
+
+ BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0
+ SRP1,QE,,LB1,LB2,LB3,CMP,SUS
+ ADS,ADP,WPS,,,DRV0,DRV1,
+
+
+ BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0
+ SRP1,QE,,LB1,LB2,LB3,CMP,SUS
+ ADS,ADP,WPS,,,DRV0,DRV1,
+
+
+ SRP1,WP-E,TB,BP0,BP1,BP2,BP3,SRP0
+ ,,,BUF,ECC-E,SR1-L,OTP-E,OTP-L
+ BUSY,WEL,E-FAIL,P-FAIL,ECC-0,ECC-1,LUT-F,
+
+
+ SRP1,WP-E,TB,BP0,BP1,BP2,BP3,SRP0
+ ,,,BUF,ECC-E,SR1-L,OTP-E,OTP-L
+ BUSY,WEL,E-FAIL,P-FAIL,ECC-0,ECC-1,LUT-F,
+
+
+
+
+ BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0
+ SRP1,QE,,,,,,
+ ,,,,,,,
+
+
+ BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0
+ SRP1,QE,,,,,,
+ ,,,,,,,
+
+
+ BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0
+ SRP1,QE,,,,,,
+ ,,,,,,,
+
+
+ BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0
+ SRP1,QE,,,,,,
+ ,,,,,,,
+
+
+ BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0
+ SRP1,QE,,,,,,
+ ,,,,,,,
+
+
+ BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0
+ SRP1,QE,,,,,,
+ ,,,,,,,
+
+
+ BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0
+ SRP1,QE,,,,,,
+ ,,,,,,,
+
+
+ BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0
+ SRP1,QE,SUS2,LB1,LB2,LB3,CMP,SUS1
+ ,,,,HPF,DRV0,DRV1,
+
+
+ BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0
+ SRP1,QE,SUS2,LB1,LB2,LB3,CMP,SUS1
+ ,,,,HPF,DRV0,DRV1,
+
+
+ BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0
+ SRP1,QE,SUS2,LB1,LB2,LB3,CMP,SUS1
+ ,,,,,,,
+
+
+ BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0
+ SRP1,QE,SUS2,LB1,LB2,LB3,CMP,SUS1
+ ,,,,,,,
+
+
+ BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0
+ SRP1,QE,SUS2,EN4B,LB2,LB3,CMP,SUS1
+ ,,,,,,,
+
+
+
+
+ BUSY,WEL,BP0,BP1,BP2,BP3,AAI,BPL
+ ,,,,,,,
+ ,,,,,,,
+
+
+
+
+
+
+ BUSY,WEL,BP0,BP1,,,,
+
+
+ BUSY,WEL,BP0,BP1,INC,,UV,SRWD
+
+
+ BUSY,WEL,BP0,BP1,,,,SRWD
+
+
+ BUSY,WEL,BP0,BP1,,,,SRWD
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Tools/AsProgrammer/Drivers/CH341A/CH341A_setup.png b/Tools/AsProgrammer/Drivers/CH341A/CH341A_setup.png
new file mode 100644
index 0000000..84e96e8
Binary files /dev/null and b/Tools/AsProgrammer/Drivers/CH341A/CH341A_setup.png differ
diff --git a/Tools/AsProgrammer/Drivers/CH341A/CH341DLL.DLL b/Tools/AsProgrammer/Drivers/CH341A/CH341DLL.DLL
new file mode 100644
index 0000000..c9f2eb1
Binary files /dev/null and b/Tools/AsProgrammer/Drivers/CH341A/CH341DLL.DLL differ
diff --git a/Tools/AsProgrammer/Drivers/CH341A/CH341W64.SYS b/Tools/AsProgrammer/Drivers/CH341A/CH341W64.SYS
new file mode 100644
index 0000000..d890020
Binary files /dev/null and b/Tools/AsProgrammer/Drivers/CH341A/CH341W64.SYS differ
diff --git a/Tools/AsProgrammer/Drivers/CH341A/CH341WDM.CAT b/Tools/AsProgrammer/Drivers/CH341A/CH341WDM.CAT
new file mode 100644
index 0000000..9193156
Binary files /dev/null and b/Tools/AsProgrammer/Drivers/CH341A/CH341WDM.CAT differ
diff --git a/Tools/AsProgrammer/Drivers/CH341A/CH341WDM.INF b/Tools/AsProgrammer/Drivers/CH341A/CH341WDM.INF
new file mode 100644
index 0000000..b89166d
--- /dev/null
+++ b/Tools/AsProgrammer/Drivers/CH341A/CH341WDM.INF
@@ -0,0 +1,178 @@
+; CH341WDM.INF
+; Driver for CH341 (USB=>EPP/I2C/SPI... chip) V2.2
+; WDM for Windows 98/Me/2000/XP/Server2003/Vista/64bit Vista/Server2008/Win7/64bit Win7
+; Copyright (C) W.ch 2001-2009
+;
+
+[Version]
+Signature = "$Chicago$"
+Class = WCH
+ClassGuid = {77989ADF-06DB-4025-92E8-40D902C03B0A}
+Provider = %WinChipHead%
+DriverVer = 06/05/2009, 2.2.2009.06
+CatalogFile.NT = CH341WDM.CAT
+
+[ControlFlags]
+ExcludeFromSelect = USB\VID_1A86&PID_5512
+ExcludeFromSelect = USB\VID_4348&PID_5512
+;ExcludeFromSelect = USB\VID_1A86&PID_7523
+;ExcludeFromSelect = USB\VID_1A86&PID_5523
+;ExcludeFromSelect = USB\VID_4348&PID_5523
+;ExcludeFromSelect = USB\VID_4348&PID_5523&REV_0250
+
+[ClassInstall32]
+Addreg = WCHReg
+
+[ClassInstall]
+Addreg = WCHReg
+
+[WCHReg]
+HKR, , , 0, %ClassName%
+HKR, , Icon, , -5
+HKR, , NoInstallClass, , 1
+
+[Manufacturer]
+%WinChipHead% = WinChipHead,NT,NTamd64,NTia64
+
+[WinChipHead]
+%CH341A.DeviceDesc% = CH341.Install, USB\VID_1A86&PID_5512
+%CH341.DeviceDesc% = CH341.Install, USB\VID_4348&PID_5512
+;%CH340SER.DeviceDesc% = CH341.Install, USB\VID_1A86&PID_7523
+;%CH341ASER.DeviceDesc% = CH341.Install, USB\VID_1A86&PID_5523
+;%CH341SER.DeviceDesc% = CH341.Install, USB\VID_4348&PID_5523
+;%CH340SER.DeviceDesc% = CH341.Install, USB\VID_4348&PID_5523&REV_0250
+
+[WinChipHead.NT]
+%CH341A.DeviceDesc% = CH341.Install.NT, USB\VID_1A86&PID_5512
+%CH341.DeviceDesc% = CH341.Install.NT, USB\VID_4348&PID_5512
+;%CH340SER.DeviceDesc% = CH341.Install.NT.NTamd64, USB\VID_1A86&PID_7523
+;%CH341ASER.DeviceDesc% = CH341.Install.NT, USB\VID_1A86&PID_5523
+;%CH341SER.DeviceDesc% = CH341.Install.NT, USB\VID_4348&PID_5523
+;%CH340SER.DeviceDesc% = CH341.Install.NT, USB\VID_4348&PID_5523&REV_0250
+
+[WinChipHead.NTamd64]
+%CH341A.DeviceDesc% = CH341.Install.NTamd64, USB\VID_1A86&PID_5512
+%CH341.DeviceDesc% = CH341.Install.NTamd64, USB\VID_4348&PID_5512
+;%CH340SER.DeviceDesc% = CH341.Install.NTamd64, USB\VID_1A86&PID_7523
+;%CH341ASER.DeviceDesc% = CH341.Install.NTamd64, USB\VID_1A86&PID_5523
+;%CH341SER.DeviceDesc% = CH341.Install.NTamd64, USB\VID_4348&PID_5523
+;%CH340SER.DeviceDesc% = CH341.Install.NTamd64, USB\VID_4348&PID_5523&REV_0250
+
+[WinChipHead.NTia64]
+%CH341A.DeviceDesc% = CH341.Install.NTia64, USB\VID_1A86&PID_5512
+%CH341.DeviceDesc% = CH341.Install.NTia64, USB\VID_4348&PID_5512
+;%CH340SER.DeviceDesc% = CH341.Install.NTia64, USB\VID_1A86&PID_7523
+;%CH341ASER.DeviceDesc% = CH341.Install.NTia64, USB\VID_1A86&PID_5523
+;%CH341SER.DeviceDesc% = CH341.Install.NTia64, USB\VID_4348&PID_5523
+;%CH340SER.DeviceDesc% = CH341.Install.NTia64, USB\VID_4348&PID_5523&REV_0250
+
+[CH341.Install]
+CopyFiles = CH341.CopyFiles.SYS, CH341.CopyFiles.DLL
+AddReg = CH341.9X.AddReg, CH341.AddReg
+
+[CH341.Install.NT]
+CopyFiles = CH341.CopyFiles.SYS, CH341.CopyFiles.DLL
+AddReg = CH341.NT.AddReg, CH341.AddReg
+
+[CH341.Install.NTamd64]
+CopyFiles = CH341.CopyFiles.SYSA64, CH341.CopyFiles.DLL
+AddReg = CH341.NT.AddReg, CH341.AddReg
+
+[CH341.Install.NTia64]
+CopyFiles = CH341.CopyFiles.SYSI64, CH341.CopyFiles.DLL
+AddReg = CH341.NT.AddReg, CH341.AddReg
+
+[CH341.CopyFiles.SYS]
+CH341WDM.SYS, , , 2
+
+[CH341.CopyFiles.SYSA64]
+CH341W64.SYS, , , 2
+
+[CH341.CopyFiles.SYSI64]
+;CH341I64.SYS, , , 2
+
+[CH341.CopyFiles.DLL]
+CH341DLL.DLL, , , 2
+
+[CH341.9X.AddReg]
+HKR, , DevLoader, , *NTKERN
+HKR, , NTMPDriver, , CH341WDM.SYS
+
+[CH341.NT.AddReg]
+
+[CH341.AddReg]
+HKLM, SOFTWARE\WinChipHead\IC\CH341, WDM, 0x00010001, 0x00000022
+HKLM, SOFTWARE\WinChipHead\IC\CH341, DLL, 0x00010001, 0x00000021
+HKLM, SOFTWARE\WinChipHead\IC\CH341, Function, , "USB=>Parallel"
+
+[CH341.Install.NT.Services]
+AddService = CH341, 2, CH341.Service
+
+[CH341.Install.NTamd64.Services]
+AddService = CH341_A64, 2, CH341.ServiceA64
+
+[CH341.Install.NTia64.Services]
+AddService = CH341_I64, 2, CH341.ServiceI64
+
+[CH341.Service]
+DisplayName = "CH341WDM"
+ServiceType = 1
+StartType = 3
+ErrorControl = 1
+ServiceBinary = %10%\System32\Drivers\CH341WDM.SYS
+
+[CH341.ServiceA64]
+DisplayName = "CH341WDM_A64"
+ServiceType = 1
+StartType = 3
+ErrorControl = 1
+ServiceBinary = %10%\System32\Drivers\CH341W64.SYS
+
+[CH341.ServiceI64]
+DisplayName = "CH341WDM_I64"
+ServiceType = 1
+StartType = 3
+ErrorControl = 1
+ServiceBinary = %10%\System32\Drivers\CH341I64.SYS
+
+[DestinationDirs]
+DefaultDestDir = 10, System32\Drivers
+CH341.CopyFiles.DLL = 11
+CH341.CopyFiles.SYS = 10, System32\Drivers
+CH341.CopyFiles.SYSA64 = 10, System32\Drivers
+;CH341.CopyFiles.SYSI64 = 10, System32\Drivers
+
+[SourceDisksFiles]
+CH341WDM.SYS = 1
+CH341DLL.DLL = 1
+CH341W64.SYS = 1
+;CH341I64.SYS = 1
+
+[SourceDisksNames]
+1 = %DISK_NAME%, CH341WDM.SYS, ,
+
+[SourceDisksNames.amd64]
+1 = %DISK_NAME%, CH341W64.SYS, ,
+
+[SourceDisksNames.ia64]
+1 = %DISK_NAME%, CH341I64.SYS, ,
+
+[Strings]
+ClassName = "Interface"
+WinChipHead = "wch.cn"
+CH341.DeviceDesc = "USB-EPP/I2C... CH341"
+CH341A.DeviceDesc = "USB-EPP/I2C... CH341A"
+CH341SER.DeviceDesc = "USB-SERIAL CH341"
+CH340SER.DeviceDesc = "USB-SERIAL CH340"
+CH341ASER.DeviceDesc = "USB-SERIAL CH341A"
+DISK_NAME = "CH341 Parallel Installation Disk"
+
+[Strings.0804]
+ClassName = "ⲿӿ"
+WinChipHead = "wch.cn"
+CH341.DeviceDesc = "USB-EPP/I2C... CH341"
+CH341A.DeviceDesc = "USB-EPP/I2C... CH341A"
+CH341SER.DeviceDesc = "USB-SERIAL CH341"
+CH340SER.DeviceDesc = "USB-SERIAL CH340"
+CH341ASER.DeviceDesc = "USB-SERIAL CH341A"
+DISK_NAME = "CH341 Parallel Installation Disk"
diff --git a/Tools/AsProgrammer/Drivers/CH341A/CH341WDM.SYS b/Tools/AsProgrammer/Drivers/CH341A/CH341WDM.SYS
new file mode 100644
index 0000000..dbb47da
Binary files /dev/null and b/Tools/AsProgrammer/Drivers/CH341A/CH341WDM.SYS differ
diff --git a/Tools/AsProgrammer/Drivers/CH341A/DRVSETUP64/DRVSETUP64.exe b/Tools/AsProgrammer/Drivers/CH341A/DRVSETUP64/DRVSETUP64.exe
new file mode 100644
index 0000000..e262ef7
Binary files /dev/null and b/Tools/AsProgrammer/Drivers/CH341A/DRVSETUP64/DRVSETUP64.exe differ
diff --git a/Tools/AsProgrammer/Drivers/CH341A/SETUP.EXE b/Tools/AsProgrammer/Drivers/CH341A/SETUP.EXE
new file mode 100644
index 0000000..e3b8cca
Binary files /dev/null and b/Tools/AsProgrammer/Drivers/CH341A/SETUP.EXE differ
diff --git a/Tools/AsProgrammer/Drivers/ch341_jumper.jpg b/Tools/AsProgrammer/Drivers/ch341_jumper.jpg
new file mode 100644
index 0000000..9541f5c
Binary files /dev/null and b/Tools/AsProgrammer/Drivers/ch341_jumper.jpg differ
diff --git a/Tools/AsProgrammer/Pinouts/ISP.gif b/Tools/AsProgrammer/Pinouts/ISP.gif
new file mode 100644
index 0000000..73b221d
Binary files /dev/null and b/Tools/AsProgrammer/Pinouts/ISP.gif differ
diff --git a/Tools/AsProgrammer/Pinouts/schemeI2C.gif b/Tools/AsProgrammer/Pinouts/schemeI2C.gif
new file mode 100644
index 0000000..69968f2
Binary files /dev/null and b/Tools/AsProgrammer/Pinouts/schemeI2C.gif differ
diff --git a/Tools/AsProgrammer/Pinouts/schemeMW.gif b/Tools/AsProgrammer/Pinouts/schemeMW.gif
new file mode 100644
index 0000000..4fae3f9
Binary files /dev/null and b/Tools/AsProgrammer/Pinouts/schemeMW.gif differ
diff --git a/Tools/AsProgrammer/Pinouts/schemeSPI25.gif b/Tools/AsProgrammer/Pinouts/schemeSPI25.gif
new file mode 100644
index 0000000..874c823
Binary files /dev/null and b/Tools/AsProgrammer/Pinouts/schemeSPI25.gif differ
diff --git a/Tools/AsProgrammer/Pinouts/schemeSPI25_to_93Cxx.gif b/Tools/AsProgrammer/Pinouts/schemeSPI25_to_93Cxx.gif
new file mode 100644
index 0000000..71a2f18
Binary files /dev/null and b/Tools/AsProgrammer/Pinouts/schemeSPI25_to_93Cxx.gif differ
diff --git a/Tools/AsProgrammer/Pinouts/schemeSPI45.gif b/Tools/AsProgrammer/Pinouts/schemeSPI45.gif
new file mode 100644
index 0000000..39c3613
Binary files /dev/null and b/Tools/AsProgrammer/Pinouts/schemeSPI45.gif differ
diff --git a/Tools/AsProgrammer/chiplist.xml b/Tools/AsProgrammer/chiplist.xml
new file mode 100644
index 0000000..e3063eb
--- /dev/null
+++ b/Tools/AsProgrammer/chiplist.xml
@@ -0,0 +1,1015 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_25AA010A page="16" size="128" spicmd="95"/>
+ <_25AA020A page="16" size="256" spicmd="95"/>
+ <_25AA040 page="16" size="512" spicmd="95"/>
+ <_25AA040A page="16" size="512" spicmd="95"/>
+ <_25AA080 page="16" size="1024" spicmd="95"/>
+ <_25AA080A page="16" size="1024" spicmd="95"/>
+ <_25AA080B page="32" size="1024" spicmd="95"/>
+ <_25AA080C page="16" size="1024" spicmd="95"/>
+ <_25AA080D page="32" size="1024" spicmd="95"/>
+ <_25AA1024 page="256" size="131072" spicmd="95"/>
+ <_25AA128 page="64" size="16384" spicmd="95"/>
+ <_25AA160 page="16" size="2048" spicmd="95"/>
+ <_25AA160A page="16" size="2048" spicmd="95"/>
+ <_25AA160B page="32" size="2048" spicmd="95"/>
+ <_25AA256 page="64" size="32768" spicmd="95"/>
+ <_25AA320 page="32" size="4096" spicmd="95"/>
+ <_25AA512 page="128" size="65536" spicmd="95"/>
+ <_25AA640 page="32" size="8192" spicmd="95"/>
+ <_25C040 page="16" size="512" spicmd="95"/>
+ <_25C080 page="16" size="1024" spicmd="95"/>
+ <_25C160 page="16" size="2048" spicmd="95"/>
+ <_25C320 page="32" size="4096" spicmd="95"/>
+ <_25C640 page="32" size="8192" spicmd="95"/>
+ <_25LC010A page="16" size="128" spicmd="95"/>
+ <_25LC020A page="16" size="256" spicmd="95"/>
+ <_25LC040 page="16" size="512" spicmd="95"/>
+ <_25LC040A page="16" size="512" spicmd="95"/>
+ <_25LC080 page="16" size="1024" spicmd="95"/>
+ <_25LC080A page="16" size="1024" spicmd="95"/>
+ <_25LC080B page="32" size="1024" spicmd="95"/>
+ <_25LC080C page="16" size="1024" spicmd="95"/>
+ <_25LC080D page="32" size="1024" spicmd="95"/>
+ <_25LC128 page="64" size="16384" spicmd="95"/>
+ <_25LC160 page="16" size="2048" spicmd="95"/>
+ <_25LC160A page="16" size="2048" spicmd="95"/>
+ <_25LC160B page="32" size="2048" spicmd="95"/>
+ <_25LC320 page="32" size="4096" spicmd="95"/>
+ <_25LC640 page="32" size="8192" spicmd="95"/>
+ <_25LC256 page="64" size="32768" spicmd="95"/>
+ <_25LC512 page="128" size="65536" spicmd="95"/>
+ <_25LC1024 page="256" size="131072" spicmd="95"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_24LC515 page="64" size="65536" addrtype="5"/>
+ <_24LC1025 page="128" size="131072" addrtype="6"/>
+ <_24LC1026 page="128" size="131072" addrtype="6"/>
+
+
+
+
+
+
+
+
+
+ <_24C01 page="8" size="128" addrtype="1"/>
+ <_24C02 page="8" size="256" addrtype="1"/>
+ <_24C04 page="16" size="512" addrtype="2"/>
+ <_24C08 page="16" size="1024" addrtype="3"/>
+ <_24C16 page="16" size="2048" addrtype="4"/>
+ <_24C32 page="32" size="4096" addrtype="5"/>
+ <_24C64 page="32" size="8192" addrtype="5"/>
+ <_24C128 page="64" size="16384" addrtype="5"/>
+ <_24C256 page="64" size="32768" addrtype="5"/>
+ <_24C512 page="128" size="65536" addrtype="5"/>
+ <_24C1024 page="256" size="131072" addrtype="6"/>
+ <_24C2048 page="256" size="262144" addrtype="7"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Tools/AsProgrammer/lang/cn.po b/Tools/AsProgrammer/lang/cn.po
new file mode 100644
index 0000000..4e5a0b0
--- /dev/null
+++ b/Tools/AsProgrammer/lang/cn.po
@@ -0,0 +1,685 @@
+#简体中文
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+#: avrfuses.fus_str_msg
+msgid "AVR Fuses and Bit Lock "
+msgstr "AVR保险丝和位锁"
+
+#: msgstr.str_45page_powerof2
+msgid "Page size is power of 2!"
+msgstr "页面大小是2的倍数!"
+
+#: msgstr.str_45page_std
+msgid "Default page size is set"
+msgstr "已设置默认页面大小"
+
+#: msgstr.str_avr_init_error
+msgid "AVR initialisation failed"
+msgstr "AVR保险丝初始化失败"
+
+#: msgstr.str_block_en
+msgid "Possible protection is enabled. Press \"Unprotect\" and check datasheet"
+msgstr "可能启用了保护。按 \"去写保护\" 并检查数据表"
+
+#: msgstr.str_buff_empty
+msgid "No data in buffer"
+msgstr "缓冲区无数据"
+
+#: msgstr.str_changed
+msgid "Modified"
+msgstr "已修改"
+
+#: msgstr.str_changed_spi_speed
+msgid "Lower AVR SPI Speed"
+msgstr "降低 AVR SPI 速度"
+
+#: msgstr.str_check_settings
+msgid "Check settings"
+msgstr "请检查设置"
+
+#: msgstr.str_choose_avr
+msgid "Choose an AVR Component in list"
+msgstr "在列表中选择一个AVR组件"
+
+#: msgstr.str_choose_ic
+msgid "Choose a Component in list"
+msgstr "在列表中选择一个组件"
+
+#: msgstr.str_combo_warn
+msgid "IC will be erased and programmed. Continue?"
+msgstr "芯片内容将被全部擦除后重新写入/编程,是否继续?"
+
+#: msgstr.str_connection_error
+msgid "Connecting Error "
+msgstr "连接时出错"
+
+#: msgstr.str_curr_hw
+msgid "Current programmer: "
+msgstr "当前编程器: "
+
+#: msgstr.str_dlg_filechgd
+msgid "file modified"
+msgstr "文件已修改"
+
+#: msgstr.str_dlg_fileext
+msgid "File |*.bin;*.hex|File |*.bin|File |*.hex|Files |*.*"
+msgstr ""
+
+#: msgstr.str_dlg_savefile
+msgid "Save changes?"
+msgstr "保存更改?"
+
+#: msgstr.str_done
+msgid "Done"
+msgstr "完成"
+
+#: msgstr.str_erase_notice
+msgid "The process can take more than a minute on large flash memories!"
+msgstr "对于大容量闪存,此过程可能耗时一分钟以上!"
+
+#: msgstr.str_erasing_flash
+msgid "Erasing memory..."
+msgstr "正在擦除闪存..."
+
+#: msgstr.str_fail
+msgid "Unsuccess"
+msgstr "未成功"
+
+#: msgstr.str_goto_addr
+msgctxt "msgstr.str_goto_addr"
+msgid "Goto address"
+msgstr "跳转到地址"
+
+#: msgstr.str_chip_no_answer
+msgid "IC not responding"
+msgstr "芯片未响应"
+
+#: msgstr.str_id_unknown
+msgid "(Unknown ID)"
+msgstr "(未知的 ID)"
+
+#: msgstr.str_mini_eeprom_support
+msgid "This firmware do not support I2C and 93Cxx"
+msgstr "此固件不支持 I2C 和 93Cxx"
+
+#: msgstr.str_new_sreg
+msgid "New SREG: "
+msgstr "新 SREG: "
+
+#: msgstr.str_not_found_hex
+msgid "Value not found"
+msgstr "数值未找到"
+
+#: msgstr.str_no_eeprom_support
+msgid "This firmware do not support memory programming"
+msgstr "此固件不支持 EEPROM 编程"
+
+#: msgstr.str_no_hardw_support
+msgid "This hardware is not supported!"
+msgstr "不支持此硬件!"
+
+#: msgstr.str_old_sreg
+msgid "Old SREG: "
+msgstr "旧 SREG: "
+
+#: msgstr.str_reading_flash
+msgid "Reading memory..."
+msgstr "正在读取..."
+
+#: msgstr.str_script_no_section
+msgid "There is no section: "
+msgstr "没有区段: "
+
+#: msgstr.str_script_run_section
+msgid "Runs section: "
+msgstr "运行区段: "
+
+#: msgstr.str_script_sel_section
+msgid "Select section"
+msgstr "选择区段"
+
+#: msgstr.str_search_hex
+msgid "Search HEX value"
+msgstr "查找十六进制值"
+
+#: msgstr.str_sel_chip
+msgid "Selected CHIP: "
+msgstr "已选 CHIP"
+
+#: msgstr.str_set_speed_error
+msgid "Error setting SPI speed"
+msgstr "设置 SPI 速度时出错"
+
+#: msgstr.str_size
+msgid "Size: "
+msgstr " 大小: "
+
+#: msgstr.str_specify_hex
+msgid "Use HEX numbers"
+msgstr "使用十六进制数"
+
+#: msgstr.str_start_erase
+msgid "Erase IC?"
+msgstr "擦除芯片?"
+
+#: msgstr.str_start_write
+msgid "Start programming?"
+msgstr "开始写入/编程?"
+
+#: msgstr.str_time
+msgid "Execution time: "
+msgstr "执行时间: "
+
+#: msgstr.str_success
+msgid "Success"
+msgstr "成功"
+
+#: msgstr.str_usb_timeout
+msgid "USB_control_msg timeout!"
+msgstr "USB_control_msg 超时!"
+
+#: msgstr.str_user_cancel
+msgid "Canceled by user"
+msgstr "操作被用户取消"
+
+#: msgstr.str_using_script
+msgid "Script: "
+msgstr "脚本: "
+
+#: msgstr.str_verify
+msgid "Verify memory..."
+msgstr "正在校验..."
+
+#: msgstr.str_verify_error
+msgid "Verification error on address: "
+msgstr "在此地址处校验发生错误: "
+
+#: msgstr.str_writing_flash
+msgid "Programming memory..."
+msgstr "正在写入/编程..."
+
+#: msgstr.str_writing_flash_wchk
+msgid "Programming memory(verifying)..."
+msgstr "正在写入/编程及校验..."
+
+#: msgstr.str_wrong_bytes_read
+msgid "Number of bytes readed not equal IC size"
+msgstr "读取的字节数与芯片大小不符"
+
+#: msgstr.str_wrong_bytes_write
+msgid "Number of written bytes not equal IC size"
+msgstr "要写入的字节数与芯片大小不符"
+
+#: msgstr.str_wrong_file_size
+msgid "File size larger than IC size"
+msgstr "文件大小超过芯片容量"
+
+#: search.sfound
+msgid "Found: "
+msgstr "已找到:"
+
+#: search.sreplaced
+msgid "Replaced: "
+msgstr "已替换:"
+
+#: tavrfusesform.btcancel.caption
+msgctxt "tavrfusesform.btcancel.caption"
+msgid "Cancel"
+msgstr "取消"
+
+#: tavrfusesform.btfusecalc.caption
+msgid "Fus Calc"
+msgstr ""
+
+#: tavrfusesform.btloaddeffuses.caption
+msgid "Load Default"
+msgstr "载入默认"
+
+#: tavrfusesform.btreadfuses.caption
+msgid "Read"
+msgstr "读取"
+
+#: tavrfusesform.btwritefuses.caption
+msgid "Write"
+msgstr "写入"
+
+#: tavrfusesform.fuseextgroup.caption
+msgid "Extended Fuse Byte"
+msgstr "扩展保险丝字节"
+
+#: tavrfusesform.fusehighgroup.caption
+msgid "Fuse High Byte"
+msgstr "高熔丝字节"
+
+#: tavrfusesform.fuselockgroup.caption
+msgid "Lock Bit Byte"
+msgstr "锁定位字节"
+
+#: tavrfusesform.fuselockgroup.hint
+msgctxt "tavrfusesform.fuselockgroup.hint"
+msgid "Read Only"
+msgstr "只读"
+
+#: tavrfusesform.fuselowgroup.caption
+msgid "Fuse Low Byte"
+msgstr "低熔丝字节"
+
+#: tavrfusesform.lockencheckbox.caption
+msgid "Locked"
+msgstr "锁定"
+
+#: tfillbuffform.bt16bits.caption
+msgid "Value (16Bits):"
+msgstr "值 (16Bits)"
+
+#: tfillbuffform.bt8bits.caption
+msgid "Value (8Bits):"
+msgstr "值 (8Bits)"
+
+#: tfillbuffform.btcancel.caption
+msgid "Cancel"
+msgstr "取消"
+
+#: tfillbuffform.btfillbuff.caption
+msgid "OK"
+msgstr "确定"
+
+#: tfillbuffform.btincr.caption
+msgid "Incremental values (00..FF)"
+msgstr "增量值 (00..FF)"
+
+#: tfillbuffform.btrandom.caption
+msgid "Random values"
+msgstr "随机值"
+
+#: tfillbuffform.caption
+msgid "Fill Buffer"
+msgstr "填充缓冲区"
+
+#: tfillbuffform.groupbox1.caption
+msgid "HEX Values"
+msgstr "十六进制值"
+
+#: tfillbuffform.groupbox2.caption
+msgid "Limits"
+msgstr "范围"
+
+#: tfillbuffform.label2.caption
+msgid "Start Address:"
+msgstr "起始地址:"
+
+#: tfillbuffform.label3.caption
+msgid "End Address:"
+msgstr "至:"
+
+#: tmainform.appbutton.hint
+msgid "Access Protection Page (APP)"
+msgstr "进入保护页 (APP)"
+
+#: tmainform.autoblankcheck.caption
+msgid "Blank Check"
+msgstr "查空"
+
+#: tmainform.autocheck.caption
+msgid "Verify"
+msgstr "校验"
+
+#: tmainform.autoclear.caption
+msgid "Erase"
+msgstr "清空"
+
+#: tmainform.autowrite.caption
+msgctxt "tmainform.autowrite.caption"
+msgid "Write"
+msgstr "写入/编程"
+
+#: tmainform.avreepromtbutton.caption
+msgctxt "tmainform.avreepromtbutton.caption"
+msgid "EEPROM"
+msgstr ""
+
+#: tmainform.avrfusesbutton.caption
+msgctxt "tmainform.avrfusesbutton.caption"
+msgid "Fuses"
+msgstr "保险丝"
+
+#: tmainform.blankcheckmenuitem.caption
+msgid "BlankCheck"
+msgstr "查空"
+
+#: tmainform.buffermenuitem.caption
+msgid "Buffer"
+msgstr "缓冲区 (吾爱破解汉化版)"
+
+#: tmainform.buttonblock.hint
+msgid "Unprotect"
+msgstr "去写保护"
+
+#: tmainform.buttoncancel.hint
+msgid "Cancel"
+msgstr "取消操作"
+
+#: tmainform.buttonerase.hint
+msgid "Erase IC"
+msgstr "擦除 IC"
+
+#: tmainform.buttonopenfile.hint
+msgid "Open File"
+msgstr "打开文件"
+
+#: tmainform.buttonread.hint
+msgctxt "tmainform.buttonread.hint"
+msgid "Read IC"
+msgstr "读取 IC"
+
+#: tmainform.buttonreadid.hint
+msgid "Detect IC"
+msgstr "检测芯片型号"
+
+#: tmainform.buttonsavefile.hint
+msgctxt "tmainform.buttonsavefile.hint"
+msgid "Save File"
+msgstr "保存"
+
+#: tmainform.buttonverify.hint
+msgid "Verify IC"
+msgstr "校验 IC"
+
+#: tmainform.buttonwrite.hint
+msgctxt "tmainform.buttonwrite.hint"
+msgid "Write IC"
+msgstr "写入/编程 IC"
+
+#: tmainform.checkbox_i2c_a2.hint
+msgctxt "tmainform.checkbox_i2c_a2.hint"
+msgid "Set device address"
+msgstr "设置设备地址"
+
+#: tmainform.checkbox_i2c_byteread.caption
+msgid "R/W Byte by Byte"
+msgstr "逐字节读取/写入"
+
+#: tmainform.checkbox_i2c_byteread.hint
+msgid "Read & Write, Byte by Byte"
+msgstr "正在逐字节读取/写入"
+
+#: tmainform.clearlogmenuitem.caption
+msgid "Clear"
+msgstr "清空"
+
+#: tmainform.comboaddrtype.hint
+msgid "Type of addressing"
+msgstr "寻址类型"
+
+#: tmainform.comboboxavrspeed.hint
+msgid "AVR SPI frequency"
+msgstr ""
+
+#: tmainform.combochipsize.hint
+msgid "IC size in bytes"
+msgstr "芯片容量(字节)"
+
+#: tmainform.combomwbitlen.hint
+msgid "Address Lenght in bits"
+msgstr "地址长度(以字节为单位)"
+
+#: tmainform.combopagesize.hint
+msgid "Write Page size"
+msgstr "分页大小"
+
+#: tmainform.copylogmenuitem.caption
+msgctxt "tmainform.copylogmenuitem.caption"
+msgid "Copy"
+msgstr "复制"
+
+#: tmainform.i2cavancedbutton.caption
+msgid "i2cAvanced"
+msgstr "I2C 高级选项"
+
+#: tmainform.labelpage.caption
+msgid "Page"
+msgstr "分页大小"
+
+#: tmainform.labelsize.caption
+msgid "Size"
+msgstr "芯片容量"
+
+#: tmainform.labeltypead.caption
+msgid "Address type"
+msgstr "地址类型"
+
+#: tmainform.i2cadvancedbutton.hint
+msgid "I2C advanced settings access"
+msgstr "进入 I2C 高级设置"
+
+#: tmainform.labeladlength.caption
+msgid "Address lenght"
+msgstr "地址长度"
+
+#: tmainform.labelspicmd.caption
+msgid "SPI Family"
+msgstr "SPI 类型"
+
+#: tmainform.label_i2c_devaddr.caption
+msgid "Device address"
+msgstr "设备地址"
+
+#: tmainform.menuarduinospiclock.caption
+msgid "Clock"
+msgstr "时钟频率"
+
+#: tmainform.menuavrispspiclock.caption
+msgid "Clock"
+msgstr "时钟频率"
+
+#: tmainform.menuchip.caption
+msgid "IC"
+msgstr "芯片型号设置"
+
+#: tmainform.menuclearbuff.caption
+msgid "Clear the Buffer"
+msgstr "清空缓冲区(FF)"
+
+#: tmainform.menucopytoclip.caption
+msgctxt "tmainform.menucopytoclip.caption"
+msgid "Copy"
+msgstr "复制"
+
+#: tmainform.menufile.caption
+msgid "File"
+msgstr "文件"
+
+#: tmainform.menufileopen.caption
+msgid "Open"
+msgstr "打开"
+
+#: tmainform.menufilesave.caption
+msgid "Save"
+msgstr "保存"
+
+#: tmainform.menuexit.caption
+msgid "Exit"
+msgstr "退出"
+
+#: tmainform.menufillbuffer.caption
+msgid "Fill the Buffer"
+msgstr "填充缓冲区"
+
+#: tmainform.menufindchip.caption
+msgctxt "tmainform.menufindchip.caption"
+msgid "Search"
+msgstr "查找"
+
+#: tmainform.menufindreplace.caption
+msgid "Search/Replace"
+msgstr "查找/替换"
+
+#: tmainform.menugotooffset.caption
+msgctxt "tmainform.menugotooffset.caption"
+msgid "Goto address"
+msgstr "跳转到地址"
+
+#: tmainform.menuignorebusybit.caption
+msgid "Dont verify Busy bit"
+msgstr "不校验忙位"
+
+#: tmainform.menuitembenchmark.caption
+msgid "Benchmark"
+msgstr "测速"
+
+#: tmainform.menuitemeditsreg.caption
+msgid "Edit SREG"
+msgstr "修改 SREG"
+
+#: tmainform.menuitemhardware.caption
+msgid "Hardware"
+msgstr "切换编程器"
+
+#: tmainform.menuitemreadsreg.caption
+msgid "Read SREG"
+msgstr "读取 SREG"
+
+#: tmainform.menuloaddev.caption
+msgid "Load last device when starts"
+msgstr "启动时使用上次的设备"
+
+#: tmainform.menumicrowire.caption
+msgid "Microwire (soft)"
+msgstr ""
+
+#: tmainform.menumwclock.caption
+msgctxt "tmainform.menumwclock.caption"
+msgid "Clock"
+msgstr "时钟频率"
+
+#: tmainform.menuoptions.caption
+msgid "Options"
+msgstr "选项"
+
+#: tmainform.menupastefromclip.caption
+msgid "Paste"
+msgstr "粘贴"
+
+#: tmainform.menuskipff.caption
+msgid "Skip FF"
+msgstr "跳过 FF"
+
+#: tmainform.menuspiclock.caption
+msgctxt "tmainform.menuspiclock.caption"
+msgid "Clock"
+msgstr "时钟频率"
+
+#: tmainform.mwswapbutton.caption
+msgid "Swap <-->"
+msgstr "交换 <-->"
+
+#: tmainform.mwswapbutton.hint
+msgid "Swap High and Low Bytes"
+msgstr "交换高低位字节"
+
+#: tmainform.scriptsmenuitem.caption
+msgid "Скрипты"
+msgstr "脚本"
+
+#: tmainform.swapbytes.caption
+msgid "Swap High and Low Bytes"
+msgstr "交换高低位字节"
+
+#: tmainform.unprotbutton.caption
+msgid "UnProt"
+msgstr "去写保护"
+
+#: tmainform.unprotbutton.hint
+msgid "Removes protections in APP"
+msgstr "移除APP中的保护"
+
+#: tsearchform.caption
+msgctxt "tsearchform.caption"
+msgid "Search"
+msgstr "查找"
+
+#: tsearchform.casesensecheckbox.caption
+msgid "case sensitive"
+msgstr "区分大小写"
+
+#: tsearchform.findbutton.caption
+msgid "Search"
+msgstr "查找"
+
+#: tsearchform.hexcheckbox.caption
+msgid "Search HEX"
+msgstr "查找十六进制值"
+
+#: tsearchform.rcancelbutton.caption
+msgctxt "tsearchform.rcancelbutton.caption"
+msgid "Cancel"
+msgstr "取消"
+
+#: tsearchform.replaceallbutton.caption
+msgid "Repl. All"
+msgstr "全部替换"
+
+#: tsearchform.replacebutton.caption
+msgctxt "tsearchform.replacebutton.caption"
+msgid "Replace"
+msgstr "替换"
+
+#: tsearchform.replacecheckbox.caption
+msgctxt "tsearchform.replacecheckbox.caption"
+msgid "Replace:"
+msgstr "替换:"
+
+#: tsearchform.searchlabel.caption
+msgid "Search:"
+msgstr "查找:"
+
+#: tsregeditform.buttonreadsreg.caption
+msgctxt "tsregeditform.buttonreadsreg.caption"
+msgid "Read"
+msgstr "读取"
+
+#: tsregeditform.buttonwritesreg.caption
+msgctxt "tsregeditform.buttonwritesreg.caption"
+msgid "Write"
+msgstr "写入/编程"
+
+#: tchipsearchform.caption
+msgid "Search IC"
+msgstr "查找 IC"
+
+#: tchipsearchform.label1.caption
+msgid "Content:"
+msgstr "请输入FLASH型号(例如W25Q128):"
+
+#: tchipsearchform.ChipSearchSelectButton.caption
+msgid "Select IC"
+msgstr "选择 IC"
+
+#: msgstr.str_dlg_filechgd
+msgid "File modified"
+msgstr "文件已编辑"
+
+#: tscripteditform.menuitemfile.caption
+msgid "File"
+msgstr "文件"
+
+#: tscripteditform.menuitemopen.caption
+msgid "Open"
+msgstr "打开"
+
+#: tscripteditform.menuitemrun.caption
+msgid "Execute"
+msgstr "运行"
+
+#: tscripteditform.menuitemsave.caption
+msgid "Save"
+msgstr "保存"
+
+#: tscripteditform.menuitemsaveas.caption
+msgid "Save as..."
+msgstr "另存为..."
+
+#: tscripteditform.menuitemsection.caption
+msgid "Section ="
+msgstr "区段 ="
diff --git a/Tools/AsProgrammer/lang/en.po b/Tools/AsProgrammer/lang/en.po
new file mode 100644
index 0000000..43862cb
--- /dev/null
+++ b/Tools/AsProgrammer/lang/en.po
@@ -0,0 +1,681 @@
+#English
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+#: avrfuses.fus_str_msg
+msgid "AVR Fuses and Bit Lock "
+msgstr ""
+
+#: msgstr.str_45page_powerof2
+msgid "Page size is power of 2!"
+msgstr "Page size is power of 2!"
+
+#: msgstr.str_45page_std
+msgid "Default page size is set"
+msgstr "Default page size is set"
+
+#: msgstr.str_avr_init_error
+msgid "AVR initialisation failed"
+msgstr ""
+
+#: msgstr.str_block_en
+msgid "Possible protection is enabled. Press \"Unprotect\" and check datasheet"
+msgstr "Possible protection is enabled. Press \"Unprotect\" and check datasheet"
+
+#: msgstr.str_buff_empty
+msgid "No data in buffer"
+msgstr ""
+
+#: msgstr.str_changed
+msgid "Modified"
+msgstr "Modified"
+
+#: msgstr.str_changed_spi_speed
+msgid "Lower AVR SPI Speed"
+msgstr ""
+
+#: msgstr.str_check_settings
+msgid "Check settings"
+msgstr "Check settings"
+
+#: msgstr.str_choose_avr
+msgid "Choose an AVR Component in list"
+msgstr ""
+
+#: msgstr.str_choose_ic
+msgid "Choose a Component in list"
+msgstr ""
+
+#: msgstr.str_combo_warn
+msgid "IC will be erased and programmed. Continue?"
+msgstr "IC will be erased and programmed. Continue?"
+
+#: msgstr.str_connection_error
+msgid "Connecting Error "
+msgstr "Connecting Error "
+
+#: msgstr.str_curr_hw
+msgid "Current programmer: "
+msgstr "Current programmer: "
+
+#: msgstr.str_dlg_filechgd
+msgid "file modified"
+msgstr ""
+
+#: msgstr.str_dlg_fileext
+msgid "File |*.bin;*.hex|File |*.bin|File |*.hex|Files |*.*"
+msgstr ""
+
+#: msgstr.str_dlg_savefile
+msgid "Save changes?"
+msgstr "Save changes?"
+
+#: msgstr.str_done
+msgid "Done"
+msgstr "Done"
+
+#: msgstr.str_erase_notice
+msgid "The process can take more than a minute on large flash memories!"
+msgstr "The process can take more than a minute on large flash memories!"
+
+#: msgstr.str_erasing_flash
+msgid "Erasing memory..."
+msgstr "Erasing memory..."
+
+#: msgstr.str_fail
+msgid "Unsuccess"
+msgstr ""
+
+#: msgstr.str_goto_addr
+msgctxt "msgstr.str_goto_addr"
+msgid "Goto address"
+msgstr "Goto address"
+
+#: msgstr.str_chip_no_answer
+msgid "IC not responding"
+msgstr ""
+
+#: msgstr.str_id_unknown
+msgid "(Unknown ID)"
+msgstr "(Unknown ID)"
+
+#: msgstr.str_mini_eeprom_support
+msgid "This firmware do not support I2C and 93Cxx"
+msgstr "This firmware do not support I2C and 93Cxx"
+
+#: msgstr.str_new_sreg
+msgid "New SREG: "
+msgstr "New SREG: "
+
+#: msgstr.str_not_found_hex
+msgid "Value not found"
+msgstr "Value not found"
+
+#: msgstr.str_no_eeprom_support
+msgid "This firmware do not support memory programming"
+msgstr "This firmware do not support memory programming"
+
+#: msgstr.str_no_hardw_support
+msgid "This hardware is not supported!"
+msgstr ""
+
+#: msgstr.str_old_sreg
+msgid "Old SREG: "
+msgstr "Old SREG: "
+
+#: msgstr.str_reading_flash
+msgid "Reading memory..."
+msgstr "Reading memory..."
+
+#: msgstr.str_script_no_section
+msgid "There is no section: "
+msgstr "There is no section: "
+
+#: msgstr.str_script_run_section
+msgid "Runs section: "
+msgstr "Runs section: "
+
+#: msgstr.str_script_sel_section
+msgid "Select section"
+msgstr "Select section"
+
+#: msgstr.str_search_hex
+msgid "Search HEX value"
+msgstr "Search HEX value"
+
+#: msgstr.str_sel_chip
+msgid "Selected CHIP: "
+msgstr ""
+
+#: msgstr.str_set_speed_error
+msgid "Error setting SPI speed"
+msgstr "Error setting SPI speed"
+
+#: msgstr.str_size
+msgid "Size: "
+msgstr "Size: "
+
+#: msgstr.str_specify_hex
+msgid "Use HEX numbers"
+msgstr "Use HEX numbers"
+
+#: msgstr.str_start_erase
+msgid "Erase IC?"
+msgstr "Erase IC?"
+
+#: msgstr.str_start_write
+msgid "Start programming?"
+msgstr ""
+
+#: msgstr.str_time
+msgid "Execution time: "
+msgstr "Execution time: "
+
+#: msgstr.str_success
+msgid "Success"
+msgstr ""
+
+#: msgstr.str_usb_timeout
+msgid "USB_control_msg timeout!"
+msgstr "USB_control_msg timeout!"
+
+#: msgstr.str_user_cancel
+msgid "Canceled by user"
+msgstr "Canceled by user"
+
+#: msgstr.str_using_script
+msgid "Script: "
+msgstr "Script: "
+
+#: msgstr.str_verify
+msgid "Verify memory..."
+msgstr "Verify memory..."
+
+#: msgstr.str_verify_error
+msgid "Verification error on address: "
+msgstr "Verification error on address: "
+
+#: msgstr.str_writing_flash
+msgid "Programming memory..."
+msgstr "Programming memory..."
+
+#: msgstr.str_writing_flash_wchk
+msgid "Programming memory(verifying)..."
+msgstr "Programming memory(verifying)..."
+
+#: msgstr.str_wrong_bytes_read
+msgid "Number of bytes readed not equal IC size"
+msgstr "Number of bytes readed not equal IC size"
+
+#: msgstr.str_wrong_bytes_write
+msgid "Number of written bytes not equal IC size"
+msgstr "Number of written bytes not equal IC size"
+
+#: msgstr.str_wrong_file_size
+msgid "File size larger than IC size"
+msgstr "File size larger than IC size"
+
+#: search.sfound
+msgid "Found: "
+msgstr ""
+
+#: search.sreplaced
+msgid "Replaced: "
+msgstr ""
+
+#: tavrfusesform.btcancel.caption
+msgctxt "tavrfusesform.btcancel.caption"
+msgid "Cancel"
+msgstr ""
+
+#: tavrfusesform.btfusecalc.caption
+msgid "Fus Calc"
+msgstr ""
+
+#: tavrfusesform.btloaddeffuses.caption
+msgid "Load Default"
+msgstr ""
+
+#: tavrfusesform.btreadfuses.caption
+msgid "Read"
+msgstr ""
+
+#: tavrfusesform.btwritefuses.caption
+msgid "Write"
+msgstr ""
+
+#: tavrfusesform.fuseextgroup.caption
+msgid "Extended Fuse Byte"
+msgstr ""
+
+#: tavrfusesform.fusehighgroup.caption
+msgid "Fuse High Byte"
+msgstr ""
+
+#: tavrfusesform.fuselockgroup.caption
+msgid "Lock Bit Byte"
+msgstr ""
+
+#: tavrfusesform.fuselockgroup.hint
+msgctxt "tavrfusesform.fuselockgroup.hint"
+msgid "Read Only"
+msgstr ""
+
+#: tavrfusesform.fuselowgroup.caption
+msgid "Fuse Low Byte"
+msgstr ""
+
+#: tavrfusesform.lockencheckbox.caption
+msgid "Locked"
+msgstr ""
+
+#: tfillbuffform.bt16bits.caption
+msgid "Value (16Bits):"
+msgstr ""
+
+#: tfillbuffform.bt8bits.caption
+msgid "Value (8Bits):"
+msgstr ""
+
+#: tfillbuffform.btcancel.caption
+msgid "Cancel"
+msgstr ""
+
+#: tfillbuffform.btfillbuff.caption
+msgid "OK"
+msgstr ""
+
+#: tfillbuffform.btincr.caption
+msgid "Incremental values (00..FF)"
+msgstr ""
+
+#: tfillbuffform.btrandom.caption
+msgid "Random values"
+msgstr ""
+
+#: tfillbuffform.caption
+msgid "Fill Buffer"
+msgstr ""
+
+#: tfillbuffform.groupbox1.caption
+msgid "HEX Values"
+msgstr ""
+
+#: tfillbuffform.groupbox2.caption
+msgid "Limits"
+msgstr ""
+
+#: tfillbuffform.label2.caption
+msgid "Start Address:"
+msgstr "From:"
+
+#: tfillbuffform.label3.caption
+msgid "End Address:"
+msgstr "To:"
+
+#: tmainform.appbutton.hint
+msgid "Access Protection Page (APP)"
+msgstr ""
+
+#: tmainform.autoblankcheck.caption
+msgid "Blank Check"
+msgstr ""
+
+#: tmainform.autocheck.caption
+msgid "Verify"
+msgstr ""
+
+#: tmainform.autoclear.caption
+msgid "Erase"
+msgstr ""
+
+#: tmainform.autowrite.caption
+msgctxt "tmainform.autowrite.caption"
+msgid "Write"
+msgstr ""
+
+#: tmainform.avreepromtbutton.caption
+msgctxt "tmainform.avreepromtbutton.caption"
+msgid "EEPROM"
+msgstr ""
+
+#: tmainform.avrfusesbutton.caption
+msgctxt "tmainform.avrfusesbutton.caption"
+msgid "Fuses"
+msgstr ""
+
+#: tmainform.blankcheckmenuitem.caption
+msgid "BlankCheck"
+msgstr "Blank check"
+
+#: tmainform.buffermenuitem.caption
+msgid "Buffer"
+msgstr ""
+
+#: tmainform.buttonblock.hint
+msgid "Unprotect"
+msgstr "Unprotect"
+
+#: tmainform.buttoncancel.hint
+msgid "Cancel"
+msgstr "Cancel"
+
+#: tmainform.buttonerase.hint
+msgid "Erase IC"
+msgstr "Erase IC"
+
+#: tmainform.buttonopenfile.hint
+msgid "Open File"
+msgstr "Open File"
+
+#: tmainform.buttonread.hint
+msgctxt "tmainform.buttonread.hint"
+msgid "Read IC"
+msgstr "Read IC"
+
+#: tmainform.buttonreadid.hint
+msgid "Detect IC"
+msgstr "Detect Chip"
+
+#: tmainform.buttonsavefile.hint
+msgctxt "tmainform.buttonsavefile.hint"
+msgid "Save File"
+msgstr "Save"
+
+#: tmainform.buttonverify.hint
+msgid "Verify IC"
+msgstr "Verify IC"
+
+#: tmainform.buttonwrite.hint
+msgctxt "tmainform.buttonwrite.hint"
+msgid "Write IC"
+msgstr "Programm IC"
+
+#: tmainform.checkbox_i2c_a2.hint
+msgctxt "tmainform.checkbox_i2c_a2.hint"
+msgid "Set device address"
+msgstr ""
+
+#: tmainform.checkbox_i2c_byteread.caption
+msgid "R/W Byte by Byte"
+msgstr "R/W Byte by Byte"
+
+#: tmainform.checkbox_i2c_byteread.hint
+msgid "Read & Write, Byte by Byte"
+msgstr "Byte by Byte reading/writing"
+
+#: tmainform.clearlogmenuitem.caption
+msgid "Clear"
+msgstr "Clear"
+
+#: tmainform.comboaddrtype.hint
+msgid "Type of addressing"
+msgstr "Type of addressing"
+
+#: tmainform.comboboxavrspeed.hint
+msgid "AVR SPI frequency"
+msgstr ""
+
+#: tmainform.combochipsize.hint
+msgid "IC size in bytes"
+msgstr "IC size in bytes"
+
+#: tmainform.combomwbitlen.hint
+msgid "Address Lenght in bits"
+msgstr "Lenght of address in bits"
+
+#: tmainform.combopagesize.hint
+msgid "Write Page size"
+msgstr "Write Page size"
+
+#: tmainform.copylogmenuitem.caption
+msgctxt "tmainform.copylogmenuitem.caption"
+msgid "Copy"
+msgstr "Copy"
+
+#: tmainform.i2cavancedbutton.caption
+msgid "i2cAvanced"
+msgstr ""
+
+#: tmainform.labelpage.caption
+msgid "Page"
+msgstr "Page"
+
+#: tmainform.labelsize.caption
+msgid "Size"
+msgstr "Size"
+
+#: tmainform.labeltypead.caption
+msgid "Address type"
+msgstr "Address type"
+
+#: tmainform.i2cadvancedbutton.hint
+msgid "I2C advanced settings access"
+msgstr ""
+
+#: tmainform.labeladlength.caption
+msgid "Address lenght"
+msgstr "Address lenght"
+
+#: tmainform.labelspicmd.caption
+msgid "SPI Family"
+msgstr "SPI Family"
+
+#: tmainform.label_i2c_devaddr.caption
+msgid "Device address"
+msgstr "Device address"
+
+#: tmainform.menuarduinospiclock.caption
+msgid "Clock"
+msgstr "Clock"
+
+#: tmainform.menuavrispspiclock.caption
+msgid "Clock"
+msgstr "Clock"
+
+#: tmainform.menuchip.caption
+msgid "IC"
+msgstr "IC"
+
+#: tmainform.menuclearbuff.caption
+msgid "Clear the Buffer"
+msgstr "Clear Buffer(FF)"
+
+#: tmainform.menucopytoclip.caption
+msgctxt "tmainform.menucopytoclip.caption"
+msgid "Copy"
+msgstr "Copy"
+
+#: tmainform.menufile.caption
+msgid "File"
+msgstr "File"
+
+#: tmainform.menufileopen.caption
+msgid "Open"
+msgstr "Open"
+
+#: tmainform.menufilesave.caption
+msgid "Save"
+msgstr "Save"
+
+#: tmainform.menufillbuffer.caption
+msgid "Fill the Buffer"
+msgstr "Fill the Buffer"
+
+#: tmainform.menufindchip.caption
+msgctxt "tmainform.menufindchip.caption"
+msgid "Search"
+msgstr "Search"
+
+#: tmainform.menufindreplace.caption
+msgid "Search/Replace"
+msgstr ""
+
+#: tmainform.menugotooffset.caption
+msgctxt "tmainform.menugotooffset.caption"
+msgid "Goto address"
+msgstr "Goto address"
+
+#: tmainform.menuignorebusybit.caption
+msgid "Dont verify Busy bit"
+msgstr "Dont verify Busy bit"
+
+#: tmainform.menuitembenchmark.caption
+msgid "Benchmark"
+msgstr ""
+
+#: tmainform.menuitemeditsreg.caption
+msgid "Edit SREG"
+msgstr ""
+
+#: tmainform.menuitemhardware.caption
+msgid "Hardware"
+msgstr "Hardware"
+
+#: tmainform.menuitemreadsreg.caption
+msgid "Read SREG"
+msgstr "Read SREG"
+
+#: tmainform.menuloaddev.caption
+msgid "Load last device when starts"
+msgstr ""
+
+#: tmainform.menumicrowire.caption
+msgid "Microwire (soft)"
+msgstr ""
+
+#: tmainform.menumwclock.caption
+msgctxt "tmainform.menumwclock.caption"
+msgid "Clock"
+msgstr "Clock"
+
+#: tmainform.menuoptions.caption
+msgid "Options"
+msgstr "Options"
+
+#: tmainform.menupastefromclip.caption
+msgid "Paste"
+msgstr ""
+
+#: tmainform.menuskipff.caption
+msgid "Skip FF"
+msgstr "Skip FF"
+
+#: tmainform.menuspiclock.caption
+msgctxt "tmainform.menuspiclock.caption"
+msgid "Clock"
+msgstr "Clock"
+
+#: tmainform.mwswapbutton.caption
+msgid "Swap <-->"
+msgstr ""
+
+#: tmainform.mwswapbutton.hint
+msgid "Swap High and Low Bytes"
+msgstr ""
+
+#: tmainform.scriptsmenuitem.caption
+msgid "Скрипты"
+msgstr "Scripts"
+
+#: tmainform.swapbytes.caption
+msgid "Swap High and Low Bytes"
+msgstr ""
+
+#: tmainform.unprotbutton.caption
+msgid "UnProt"
+msgstr ""
+
+#: tmainform.unprotbutton.hint
+msgid "Removes protections in APP"
+msgstr ""
+
+#: tsearchform.caption
+msgctxt "tsearchform.caption"
+msgid "Search"
+msgstr "Search"
+
+#: tsearchform.casesensecheckbox.caption
+msgid "case sensitive"
+msgstr "case sensitive"
+
+#: tsearchform.findbutton.caption
+msgid "Search"
+msgstr "Search"
+
+#: tsearchform.hexcheckbox.caption
+msgid "Search HEX"
+msgstr "Search HEX"
+
+#: tsearchform.rcancelbutton.caption
+msgctxt "tsearchform.rcancelbutton.caption"
+msgid "Cancel"
+msgstr ""
+
+#: tsearchform.replaceallbutton.caption
+msgid "Repl. All"
+msgstr "Repl. All"
+
+#: tsearchform.replacebutton.caption
+msgctxt "tsearchform.replacebutton.caption"
+msgid "Replace"
+msgstr "Replace"
+
+#: tsearchform.replacecheckbox.caption
+msgctxt "tsearchform.replacecheckbox.caption"
+msgid "Replace:"
+msgstr "Replace:"
+
+#: tsearchform.searchlabel.caption
+msgid "Search:"
+msgstr "Search:"
+
+#: tsregeditform.buttonreadsreg.caption
+msgctxt "tsregeditform.buttonreadsreg.caption"
+msgid "Read"
+msgstr "Read"
+
+#: tsregeditform.buttonwritesreg.caption
+msgctxt "tsregeditform.buttonwritesreg.caption"
+msgid "Write"
+msgstr "Write"
+
+#: tchipsearchform.caption
+msgid "Search IC"
+msgstr "Search IC"
+
+#: tchipsearchform.label1.caption
+msgid "Content:"
+msgstr "Content:"
+
+#: tchipsearchform.ChipSearchSelectButton.caption
+msgid "Select IC"
+msgstr "Select IC"
+
+#: msgstr.str_dlg_filechgd
+msgid "File modified"
+msgstr "File modified"
+
+#: tscripteditform.menuitemfile.caption
+msgid "File"
+msgstr "File"
+
+#: tscripteditform.menuitemopen.caption
+msgid "Open"
+msgstr "Open"
+
+#: tscripteditform.menuitemrun.caption
+msgid "Execute"
+msgstr "Execute"
+
+#: tscripteditform.menuitemsave.caption
+msgid "Save"
+msgstr "Save"
+
+#: tscripteditform.menuitemsaveas.caption
+msgid "Save as..."
+msgstr "Save as..."
+
+#: tscripteditform.menuitemsection.caption
+msgid "Section ="
+msgstr "Section ="
diff --git a/Tools/AsProgrammer/lang/fr.po b/Tools/AsProgrammer/lang/fr.po
new file mode 100644
index 0000000..827915e
--- /dev/null
+++ b/Tools/AsProgrammer/lang/fr.po
@@ -0,0 +1,681 @@
+#French
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+#: avrfuses.fus_str_msg
+msgid "AVR Fuses and Bit Lock "
+msgstr ""
+
+#: msgstr.str_45page_powerof2
+msgid "Page size is power of 2!"
+msgstr "La taille de la page est définie sur un multiple de deux!"
+
+#: msgstr.str_45page_std
+msgid "Page size is power of 2!"
+msgstr "La taille de page par défaut est définie."
+
+#: msgstr.str_avr_init_error
+msgid "AVR initialisation failed"
+msgstr "Echec initialisation AVR"
+
+#: msgstr.str_block_en
+msgid "Possible protection is enabled. Press \"Unprotect\" and check datasheet"
+msgstr "Peut-être protection en écriture. Cliquez sur "Supprimer la protection" et vérifiez la fiche technique."
+
+#: msgstr.str_buff_empty
+msgid "No data in buffer"
+msgstr "Buffer vide"
+
+#: msgstr.str_changed
+msgid "Modified"
+msgstr "Changé(s)"
+
+#: msgstr.str_changed_spi_speed
+msgid "Lower AVR SPI Speed"
+msgstr "Abaissement fréquence SPI AVR"
+
+#: msgstr.str_check_settings
+msgid "Check settings"
+msgstr "Vérifier les paramètres"
+
+#: msgstr.str_choose_avr
+msgid "Choose an AVR Component in list"
+msgstr "Choisissez un AVR"
+
+#: msgstr.str_choose_ic
+msgid "Choose a Component in list"
+msgstr "Choisissez un composant"
+
+#: msgstr.str_combo_warn
+msgid "IC will be erased and programmed. Continue?"
+msgstr "La puce sera effacée et écrasée. Continuer?"
+
+#: msgstr.str_connection_error
+msgid "Connecting Error "
+msgstr "Erreur de connexion "
+
+#: msgstr.str_curr_hw
+msgid "Current programmer: "
+msgstr "Programmeur actuel: "
+
+#: msgstr.str_dlg_filechgd
+msgid "file modified"
+msgstr "Fichier modifié"
+
+#: msgstr.str_dlg_fileext
+msgid "File |*.bin;*.hex|File |*.bin|File |*.hex|Files |*.*"
+msgstr "Fichier |*.bin;*.hex|Fichier |*.bin|Fichier |*.hex|Fichiers |*.*"
+
+#: msgstr.str_dlg_savefile
+msgid "Save changes?"
+msgstr "Sauvegarder les changements?""
+
+#: msgstr.str_done
+msgid "Done"
+msgstr "Fait"
+
+#: msgstr.str_erase_notice
+msgid "The process can take more than a minute on large flash memories!"
+msgstr "Le processus peut prendre plus d’une minute sur de grandes mémoires flash!"
+
+#: msgstr.str_erasing_flash
+msgid "Erasing memory..."
+msgstr "Effacement..."
+
+#: msgstr.str_fail
+msgid "Unsuccess"
+msgstr "Echec"
+
+#: msgstr.str_goto_addr
+msgctxt "msgstr.str_goto_addr"
+msgid "Goto address"
+msgstr "Aller à l'addresse"
+
+#: msgstr.str_chip_no_answer
+msgid "IC not responding"
+msgstr "La puce ne répond pas"
+
+#: msgstr.str_id_unknown
+msgid "(Unknown ID)"
+msgstr "(ID Iconnu)"
+
+#: msgstr.str_mini_eeprom_support
+msgid "This firmware do not support I2C and 93Cxx"
+msgstr "Ce firmware ne supporte pas I2C et 93Cxx!"
+
+#: msgstr.str_new_sreg
+msgid "New SREG: "
+msgstr "Nouveau SREG: "
+
+#: msgstr.str_not_found_hex
+msgid "Value not found"
+msgstr "Valeur non trouvée"
+
+#: msgstr.str_no_eeprom_support
+msgid "This firmware do not support memory programming"
+msgstr "Ce firmware n'est pas supporté!"
+
+#: msgstr.str_no_hardw_support
+msgid "This hardware is not supported!"
+msgstr "Ce matériel n'est pas supporté!"
+
+#: msgstr.str_old_sreg
+msgid "Old SREG: "
+msgstr "Ancien SREG: "
+
+#: msgstr.str_reading_flash
+msgid "Reading memory..."
+msgstr "Lecture memoire..."
+
+#: msgstr.str_script_no_section
+msgid "There is no section: "
+msgstr "Il n'y a pas de section: "
+
+#: msgstr.str_script_run_section
+msgid "Runs section: "
+msgstr "Section en cours: "
+
+#: msgstr.str_script_sel_section
+msgid "Select section"
+msgstr "Choisissez une section"
+
+#: msgstr.str_search_hex
+msgid "Search HEX value"
+msgstr "Recherche valeur HEX"
+
+#: msgstr.str_sel_chip
+msgid "Selected CHIP: "
+msgstr "CHIP sélectionné: "
+
+#: msgstr.str_set_speed_error
+msgid "Error setting SPI speed"
+msgstr "Erreur de réglage de la vitesse SPI"
+
+#: msgstr.str_size
+msgid "Size: "
+msgstr "Taille: "
+
+#: msgstr.str_specify_hex
+msgid "Use HEX numbers"
+msgstr "Spécifiez les nombres hexadécimaux"
+
+#: msgstr.str_start_erase
+msgid "Erase IC?"
+msgstr "Effacement IC?"
+
+#: msgstr.str_start_write
+msgid "Start programming?"
+msgstr "Commencer la programmation?"
+
+#: msgstr.str_time
+msgid "Execution time: "
+msgstr "Délai d'exécution: "
+
+#: msgstr.str_success
+msgid "Success"
+msgstr "Succès"
+
+#: msgstr.str_usb_timeout
+msgid "USB_control_msg timeout!"
+msgstr "USB_control_msg est tombé en fin de timeout!"
+
+#: msgstr.str_user_cancel
+msgid "Canceled by user"
+msgstr "Interrompu par l'utilisateur"
+
+#: msgstr.str_using_script
+msgid "Canceled by user"
+msgstr "Script utilisé: "
+
+#: msgstr.str_verify
+msgid "Verify memory..."
+msgstr "Verification memoire..."
+
+#: msgstr.str_verify_error
+msgid "Verification error on address: "
+msgstr "Erreur de comparaison à: "
+
+#: msgstr.str_writing_flash
+msgid "Programming memory..."
+msgstr "Ecriture memoire..."
+
+#: msgstr.str_writing_flash_wchk
+msgid "Programming memory(verifying)..."
+msgstr "Ecriture memoire(verification)..."
+
+#: msgstr.str_wrong_bytes_read
+msgid "Number of bytes readed not equal IC size"
+msgstr "Le nombre d'octets lus n'est pas égal à la taille de la puce"
+
+#: msgstr.str_wrong_bytes_write
+msgid "Number of written bytes not equal IC size"
+msgstr "Le nombre d'octets écrits n'est pas égal à la taille de la puce"
+
+#: msgstr.str_wrong_file_size
+msgid "File size larger than IC size"
+msgstr "Taille de fichier supérieure à la taille de la puce"
+
+#: search.sfound
+msgid "Found: "
+msgstr "Trouvé: "
+
+#: search.sreplaced
+msgid "Replaced: "
+msgstr "Remplacé"
+
+#: tavrfusesform.btcancel.caption
+msgctxt "tavrfusesform.btcancel.caption"
+msgid "Cancel"
+msgstr "Abandon"
+
+#: tavrfusesform.btfusecalc.caption
+msgid "Fus Calc"
+msgstr ""
+
+#: tavrfusesform.btloaddeffuses.caption
+msgid "Load Default"
+msgstr ""
+
+#: tavrfusesform.btreadfuses.caption
+msgid "Read"
+msgstr "Lecture"
+
+#: tavrfusesform.btwritefuses.caption
+msgid "Write"
+msgstr "Ecriture"
+
+#: tavrfusesform.fuseextgroup.caption
+msgid "Extended Fuse Byte"
+msgstr ""
+
+#: tavrfusesform.fusehighgroup.caption
+msgid "Fuse High Byte"
+msgstr ""
+
+#: tavrfusesform.fuselockgroup.caption
+msgid "Lock Bit Byte"
+msgstr ""
+
+#: tavrfusesform.fuselockgroup.hint
+msgctxt "tavrfusesform.fuselockgroup.hint"
+msgid "Read Only"
+msgstr "Lecture seule"
+
+#: tavrfusesform.fuselowgroup.caption
+msgid "Fuse Low Byte"
+msgstr ""
+
+#: tavrfusesform.lockencheckbox.caption
+msgid "Locked"
+msgstr ""
+
+#: tfillbuffform.bt16bits.caption
+msgid "Value (16Bits):"
+msgstr "Valeur (16Bits):"
+
+#: tfillbuffform.bt8bits.caption
+msgid "Value (8Bits):"
+msgstr "Valeur (8Bits):"
+
+#: tfillbuffform.btcancel.caption
+msgid "Cancel"
+msgstr "Abandon"
+
+#: tfillbuffform.btfillbuff.caption
+msgid "OK"
+msgstr ""
+
+#: tfillbuffform.btincr.caption
+msgid "Incremental values (00..FF)"
+msgstr "Valeurs incrémentales (00..FF)"
+
+#: tfillbuffform.btrandom.caption
+msgid "Random values"
+msgstr "Valeurs aléatoires"
+
+#: tfillbuffform.caption
+msgid "Fill Buffer"
+msgstr "Emplir le Buffer"
+
+#: tfillbuffform.groupbox1.caption
+msgid "HEX Values"
+msgstr ""
+
+#: tfillbuffform.groupbox2.caption
+msgid "Limits"
+msgstr ""
+
+#: tfillbuffform.label2.caption
+msgid "Start Address:"
+msgstr "Addresse debut:"
+
+#: tfillbuffform.label3.caption
+msgid "End Address:"
+msgstr "Addresse Fin:"
+
+#: tmainform.appbutton.hint
+msgid "Access Protection Page (APP)"
+msgstr ""
+
+#: tmainform.autoblankcheck.caption
+msgid "Blank Check"
+msgstr "Test effacement"
+
+#: tmainform.autocheck.caption
+msgid "Verify"
+msgstr "Verifier"
+
+#: tmainform.autoclear.caption
+msgid "Erase"
+msgstr "Effacement"
+
+#: tmainform.autowrite.caption
+msgctxt "tmainform.autowrite.caption"
+msgid "Write"
+msgstr "Ecrire"
+
+#: tmainform.avreepromtbutton.caption
+msgctxt "tmainform.avreepromtbutton.caption"
+msgid "EEPROM"
+msgstr ""
+
+#: tmainform.avrfusesbutton.caption
+msgctxt "tmainform.avrfusesbutton.caption"
+msgid "Fuses"
+msgstr ""
+
+#: tmainform.blankcheckmenuitem.caption
+msgid "BlankCheck"
+msgstr "Vérification effacement"
+
+#: tmainform.buffermenuitem.caption
+msgid "Buffer"
+msgstr ""
+
+#: tmainform.buttonblock.hint
+msgid "Unprotect"
+msgstr "Supprimer la protection"
+
+#: tmainform.buttoncancel.hint
+msgid "Cancel"
+msgstr "Abandonner"
+
+#: tmainform.buttonerase.hint
+msgid "Erase IC"
+msgstr "Effacement IC"
+
+#: tmainform.buttonopenfile.hint
+msgid "Open File"
+msgstr "Ouvrir"
+
+#: tmainform.buttonread.hint
+msgctxt "tmainform.buttonread.hint"
+msgid "Read IC"
+msgstr "Lecture IC"
+
+#: tmainform.buttonreadid.hint
+msgid "Detect IC"
+msgstr "Detecter Chip"
+
+#: tmainform.buttonsavefile.hint
+msgctxt "tmainform.buttonsavefile.hint"
+msgid "Save File"
+msgstr "Sauver"
+
+#: tmainform.buttonverify.hint
+msgid "Verify IC"
+msgstr "Verification IC"
+
+#: tmainform.buttonwrite.hint
+msgctxt "tmainform.buttonwrite.hint"
+msgid "Write IC"
+msgstr "Programmer IC"
+
+#: tmainform.checkbox_i2c_a2.hint
+msgctxt "tmainform.checkbox_i2c_a2.hint"
+msgid "Set device address"
+msgstr ""
+
+#: tmainform.checkbox_i2c_byteread.caption
+msgid "R/W Byte by Byte"
+msgstr "Lect. Ecr. par octet"
+
+#: tmainform.checkbox_i2c_byteread.hint
+msgid "Read & Write, Byte by Byte"
+msgstr "Lecture/écriture octet par octet"
+
+#: tmainform.clearlogmenuitem.caption
+msgid "Clear"
+msgstr "Effacer"
+
+#: tmainform.comboaddrtype.hint
+msgid "Type of addressing"
+msgstr "Type d'adressage mémoire"
+
+#: tmainform.comboboxavrspeed.hint
+msgid "AVR SPI frequency"
+msgstr "Fréquence SPI AVR"
+
+#: tmainform.combochipsize.hint
+msgid "IC size in bytes"
+msgstr "Taille IC en bytes"
+
+#: tmainform.combomwbitlen.hint
+msgid "Address Lenght in bits"
+msgstr "Longueur d'adresse en bits"
+
+#: tmainform.combopagesize.hint
+msgid "Write Page size"
+msgstr "Taille de la page en écriture"
+
+#: tmainform.copylogmenuitem.caption
+msgctxt "tmainform.copylogmenuitem.caption"
+msgid "Copy"
+msgstr "Copier"
+
+#: tmainform.i2cavancedbutton.caption
+msgid "i2cAvanced"
+msgstr ""
+
+#: tmainform.labelpage.caption
+msgid "Page"
+msgstr "Page"
+
+#: tmainform.labelsize.caption
+msgid "Size"
+msgstr "Taille"
+
+#: tmainform.labeltypead.caption
+msgid "Address type"
+msgstr "Type d'adresse"
+
+#: tmainform.i2cadvancedbutton.hint
+msgid "I2C advanced settings access"
+msgstr "Accès aux paramètres avancés I2C"
+
+#: tmainform.labeladlength.caption
+msgid "Address lenght"
+msgstr "Longueur adresse"
+
+#: tmainform.labelspicmd.caption
+msgid "SPI Family"
+msgstr "SPI famille"
+
+#: tmainform.label_i2c_devaddr.caption
+msgid "Device address"
+msgstr "Device Address"
+
+#: tmainform.menuarduinospiclock.caption
+msgid "Clock"
+msgstr "Fréquence"
+
+#: tmainform.menuavrispspiclock.caption
+msgid "Clock"
+msgstr "Fréquence"
+
+#: tmainform.menuchip.caption
+msgid "IC"
+msgstr "IC"
+
+#: tmainform.menuclearbuff.caption
+msgid "Clear the Buffer"
+msgstr "RaZ Buffer"
+
+#: tmainform.menucopytoclip.caption
+msgctxt "tmainform.menucopytoclip.caption"
+msgid "Copy"
+msgstr "Copier"
+
+#: tmainform.menufile.caption
+msgid "File"
+msgstr "Fichier"
+
+#: tmainform.menufileopen.caption
+msgid "Open"
+msgstr "Ouvrir"
+
+#: tmainform.menufilesave.caption
+msgid "Save"
+msgstr "Sauver"
+
+#: tmainform.menufillbuffer.caption
+msgid "Fill the Buffer"
+msgstr "Emplir le Buffer"
+
+#: tmainform.menufindchip.caption
+msgctxt "tmainform.menufindchip.caption"
+msgid "Search"
+msgstr "Recherche"
+
+#: tmainform.menufindreplace.caption
+msgid "Search/Replace"
+msgstr "Trouver/Rempl."
+
+#: tmainform.menugotooffset.caption
+msgctxt "tmainform.menugotooffset.caption"
+msgid "Goto address"
+msgstr "Aller à l'adresse"
+
+#: tmainform.menuignorebusybit.caption
+msgid "Dont verify Busy bit"
+msgstr "Ne pas vérifier le Busy bit"
+
+#: tmainform.menuitembenchmark.caption
+msgid "Benchmark"
+msgstr ""
+
+#: tmainform.menuitemeditsreg.caption
+msgid "Edit SREG"
+msgstr "Edition SREG"
+
+#: tmainform.menuitemhardware.caption
+msgid "Hardware"
+msgstr "Matériel"
+
+#: tmainform.menuitemreadsreg.caption
+msgid "Read SREG"
+msgstr "Lecture SREG"
+
+#: tmainform.menuloaddev.caption
+msgid "Load last device when starts"
+msgstr "Utiliser le dernier composant au démarrage"
+
+#: tmainform.menumicrowire.caption
+msgid "Microwire (soft)"
+msgstr ""
+
+#: tmainform.menumwclock.caption
+msgctxt "tmainform.menumwclock.caption"
+msgid "Clock"
+msgstr "Frequence"
+
+#: tmainform.menuoptions.caption
+msgid "Options"
+msgstr "Options"
+
+#: tmainform.menupastefromclip.caption
+msgid "Paste"
+msgstr "Coller"
+
+#: tmainform.menuskipff.caption
+msgid "Skip FF"
+msgstr "Ne pas écrire les FF"
+
+#: tmainform.menuspiclock.caption
+msgctxt "tmainform.menuspiclock.caption"
+msgid "Clock"
+msgstr "Fréqence"
+
+#: tmainform.mwswapbutton.caption
+msgid "Swap <-->"
+msgstr ""
+
+#: tmainform.mwswapbutton.hint
+msgid "Swap High and Low Bytes"
+msgstr "Permuter les bytes H et L"
+
+#: tmainform.scriptsmenuitem.caption
+msgid "Скрипты"
+msgstr "Scripts"
+
+#: tmainform.swapbytes.caption
+msgid "Swap High and Low Bytes"
+msgstr "Permuter les bytes H et L"
+
+#: tmainform.unprotbutton.caption
+msgid "UnProt"
+msgstr ""
+
+#: tmainform.unprotbutton.hint
+msgid "Removes protections in APP"
+msgstr "Raz protections APP"
+
+#: tsearchform.caption
+msgctxt "tsearchform.caption"
+msgid "Search"
+msgstr "Recherche"
+
+#: tsearchform.casesensecheckbox.caption
+msgid "case sensitive"
+msgstr "Sensible à la case"
+
+#: tsearchform.findbutton.caption
+msgid "Search"
+msgstr "Trouver"
+
+#: tsearchform.hexcheckbox.caption
+msgid "Search HEX"
+msgstr "Recherche HEX"
+
+#: tsearchform.rcancelbutton.caption
+msgctxt "tsearchform.rcancelbutton.caption"
+msgid "Cancel"
+msgstr "Abandon"
+
+#: tsearchform.replaceallbutton.caption
+msgid "Repl. All"
+msgstr "Rempl. Tout"
+
+#: tsearchform.replacebutton.caption
+msgctxt "tsearchform.replacebutton.caption"
+msgid "Replace"
+msgstr "Remplacer"
+
+#: tsearchform.replacecheckbox.caption
+msgctxt "tsearchform.replacecheckbox.caption"
+msgid "Replace"
+msgstr "Remplacer"
+
+#: tsearchform.searchlabel.caption
+msgid "Search:"
+msgstr "Rechercher:"
+
+#: tsregeditform.buttonreadsreg.caption
+msgctxt "tsregeditform.buttonreadsreg.caption"
+msgid "Read"
+msgstr "Lire"
+
+#: tsregeditform.buttonwritesreg.caption
+msgctxt "tsregeditform.buttonwritesreg.caption"
+msgid "Write"
+msgstr "Ecrire"
+
+#: tchipsearchform.caption
+msgid "Search IC"
+msgstr "Recherche IC"
+
+#: tchipsearchform.label1.caption
+msgid "Content:"
+msgstr "Le marquage contient:"
+
+#: tchipsearchform.ChipSearchSelectButton.caption
+msgid "Select IC"
+msgstr "Selectionner IC"
+
+#: msgstr.str_dlg_filechgd
+msgid "File"
+msgstr "Fichier modifié"
+
+#: tscripteditform.menuitemfile.caption
+msgid "File"
+msgstr "Fichier"
+
+#: tscripteditform.menuitemopen.caption
+msgid "Open"
+msgstr "Ouvrir"
+
+#: tscripteditform.menuitemrun.caption
+msgid "Execute"
+msgstr "Executer"
+
+#: tscripteditform.menuitemsave.caption
+msgid "Save"
+msgstr "Enregistrer"
+
+#: tscripteditform.menuitemsaveas.caption
+msgid "Save as..."
+msgstr "Enregistrer sous..."
+
+#: tscripteditform.menuitemsection.caption
+msgid "Section ="
+msgstr "Section ="
diff --git a/Tools/AsProgrammer/lang/ru.po b/Tools/AsProgrammer/lang/ru.po
new file mode 100644
index 0000000..d1eae05
--- /dev/null
+++ b/Tools/AsProgrammer/lang/ru.po
@@ -0,0 +1,681 @@
+#Русский
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+#: avrfuses.fus_str_msg
+msgid "AVR Fuses and Bit Lock "
+msgstr ""
+
+#: msgstr.str_45page_powerof2
+msgid "Page size is power of 2!"
+msgstr "Установлен размер страницы кратный двум!"
+
+#: msgstr.str_45page_std
+msgid "Default page size is set"
+msgstr "Установлен стандартный размер страницы"
+
+#: msgstr.str_avr_init_error
+msgid "AVR initialisation failed"
+msgstr "Ошибка инициализации AVR"
+
+#: msgstr.str_block_en
+msgid "Possible protection is enabled. Press \"Unprotect\" and check datasheet"
+msgstr "Возможно включена защита на запись. Нажмите кнопку \"Снять защиту\" и сверьтесь с даташитом"
+
+#: msgstr.str_buff_empty
+msgid "No data in buffer"
+msgstr "Нет данных в буфере"
+
+#: msgstr.str_changed
+msgid "Modified"
+msgstr "Изменен"
+
+#: msgstr.str_changed_spi_speed
+msgid "Lower AVR SPI Speed"
+msgstr "Более низкая скорость AVR SPI"
+
+#: msgstr.str_check_settings
+msgid "Check settings"
+msgstr "Проверьте настройки"
+
+#: msgstr.str_choose_avr
+msgid "Choose an AVR Component in list"
+msgstr "выберите AVR в списке"
+
+#: msgstr.str_choose_ic
+msgid "Choose a Component in list"
+msgstr "выберите компонент в списке"
+
+#: msgstr.str_combo_warn
+msgid "IC will be erased and programmed. Continue?"
+msgstr "Чип будет стерт и перезаписан. Продолжить?"
+
+#: msgstr.str_connection_error
+msgid "Connecting Error "
+msgstr "Ошибка подключения к "
+
+#: msgstr.str_curr_hw
+msgid "Current programmer: "
+msgstr "Используется программатор: "
+
+#: msgstr.str_dlg_filechgd
+msgid "file modified"
+msgstr "файл изменён"
+
+#: msgstr.str_dlg_fileext
+msgid "File |*.bin;*.hex|File |*.bin|File |*.hex|Files |*.*"
+msgstr "файл |*.bin;*.hex|файл |*.bin|файл |*.hex|файлы |*.*"
+
+#: msgstr.str_dlg_savefile
+msgid "Save changes?"
+msgstr "Сохранить изменения?"
+
+#: msgstr.str_done
+msgid "Done"
+msgstr "Готово"
+
+#: msgstr.str_erase_notice
+msgid "The process can take more than a minute on large flash memories!"
+msgstr "Процесс может длиться больше минуты на больших флешках!"
+
+#: msgstr.str_erasing_flash
+msgid "Erasing memory..."
+msgstr "Стираю флэшку..."
+
+#: msgstr.str_fail
+msgid "Unsuccess"
+msgstr "неуспех"
+
+#: msgstr.str_goto_addr
+msgctxt "msgstr.str_goto_addr"
+msgid "Goto address"
+msgstr "Перейти по адресу"
+
+#: msgstr.str_chip_no_answer
+msgid "IC not responding"
+msgstr "Микросхема не отвечает"
+
+#: msgstr.str_id_unknown
+msgid "(Unknown ID)"
+msgstr "(Неизвестно)"
+
+#: msgstr.str_mini_eeprom_support
+msgid "This firmware do not support I2C and 93Cxx"
+msgstr "Данная версия прошивки не поддерживает I2C и MW!"
+
+#: msgstr.str_new_sreg
+msgid "New SREG: "
+msgstr "Стало Sreg: "
+
+#: msgstr.str_not_found_hex
+msgid "Value not found"
+msgstr "Значение не найдено"
+
+#: msgstr.str_no_eeprom_support
+msgid "This firmware do not support memory programming"
+msgstr "Данная версия прошивки не поддерживается!"
+
+#: msgstr.str_no_hardw_support
+msgid "This hardware is not supported!"
+msgstr "Это оборудование не поддерживается!"
+
+#: msgstr.str_old_sreg
+msgid "Old SREG: "
+msgstr "Было Sreg: "
+
+#: msgstr.str_reading_flash
+msgid "Reading memory..."
+msgstr "Читаю флэшку..."
+
+#: msgstr.str_script_no_section
+msgid "There is no section: "
+msgstr "Нет секции: "
+
+#: msgstr.str_script_run_section
+msgid "Runs section: "
+msgstr "Выполняется секция: "
+
+#: msgstr.str_script_sel_section
+msgid "Select section"
+msgstr "Выберите секцию"
+
+#: msgstr.str_search_hex
+msgid "Search HEX value"
+msgstr "Поиск HEX значения"
+
+#: msgstr.str_sel_chip
+msgid "Selected CHIP: "
+msgstr "выбранный микросхема: "
+
+#: msgstr.str_set_speed_error
+msgid "Error setting SPI speed"
+msgstr "Ошибка установки скорости SPI"
+
+#: msgstr.str_size
+msgid "Size: "
+msgstr "Размер: "
+
+#: msgstr.str_specify_hex
+msgid "Use HEX numbers"
+msgstr "Укажите шестнадцатеричные числа"
+
+#: msgstr.str_start_erase
+msgid "Erase IC?"
+msgstr "Точно стереть чип?"
+
+#: msgstr.str_start_write
+msgid "Start programming?"
+msgstr "Начать запись?"
+
+#: msgstr.str_time
+msgid "Execution time: "
+msgstr "Время выполнения: "
+
+#: msgstr.str_success
+msgid "Success"
+msgstr "успех"
+
+#: msgstr.str_usb_timeout
+msgid "USB_control_msg timeout!"
+msgstr "USB_control_msg отвалился по таймауту!"
+
+#: msgstr.str_user_cancel
+msgid "Canceled by user"
+msgstr "Прервано пользователем"
+
+#: msgstr.str_using_script
+msgid "Script: "
+msgstr "Используется скрипт: "
+
+#: msgstr.str_verify
+msgid "Verify memory..."
+msgstr "Проверяю флэшку..."
+
+#: msgstr.str_verify_error
+msgid "Verification error on address: "
+msgstr "Ошибка сравнения по адресу: "
+
+#: msgstr.str_writing_flash
+msgid "Записываю флэшку..."
+msgstr "Записываю флэшку..."
+
+#: msgstr.str_writing_flash_wchk
+msgid "Programming memory..."
+msgstr "Записываю флэшку с проверкой..."
+
+#: msgstr.str_wrong_bytes_read
+msgid "Number of bytes readed not equal IC size"
+msgstr "Количество прочитанных байт не равно размеру флэшки"
+
+#: msgstr.str_wrong_bytes_write
+msgid "Number of written bytes not equal IC size"
+msgstr "Количество записанных байт не равно размеру флэшки"
+
+#: msgstr.str_wrong_file_size
+msgid "File size larger than IC size"
+msgstr "Размер файла больше размера чипа"
+
+#: search.sfound
+msgid "Found: "
+msgstr "найденный: "
+
+#: search.sreplaced
+msgid "Replaced: "
+msgstr "Заменены: "
+
+#: tavrfusesform.btcancel.caption
+msgctxt "tavrfusesform.btcancel.caption"
+msgid "Cancel"
+msgstr "отменить"
+
+#: tavrfusesform.btfusecalc.caption
+msgid "Fus Calc"
+msgstr ""
+
+#: tavrfusesform.btloaddeffuses.caption
+msgid "Load Default"
+msgstr "умолчанию"
+
+#: tavrfusesform.btreadfuses.caption
+msgid "Read"
+msgstr "Читать"
+
+#: tavrfusesform.btwritefuses.caption
+msgid "Write"
+msgstr "Записать"
+
+#: tavrfusesform.fuseextgroup.caption
+msgid "Extended Fuse Byte"
+msgstr ""
+
+#: tavrfusesform.fusehighgroup.caption
+msgid "Fuse High Byte"
+msgstr ""
+
+#: tavrfusesform.fuselockgroup.caption
+msgid "Lock Bit Byte"
+msgstr ""
+
+#: tavrfusesform.fuselockgroup.hint
+msgctxt "tavrfusesform.fuselockgroup.hint"
+msgid "Read Only"
+msgstr "Режим только для чтения"
+
+#: tavrfusesform.fuselowgroup.caption
+msgid "Fuse Low Byte"
+msgstr ""
+
+#: tavrfusesform.lockencheckbox.caption
+msgid "Locked"
+msgstr ""
+
+#: tfillbuffform.bt16bits.caption
+msgid "Value (16Bits):"
+msgstr "значени (16Bits):"
+
+#: tfillbuffform.bt8bits.caption
+msgid "Value (8Bits):"
+msgstr "значени (8Bits):"
+
+#: tfillbuffform.btcancel.caption
+msgid "Cancel"
+msgstr "отменить"
+
+#: tfillbuffform.btfillbuff.caption
+msgid "OK"
+msgstr ""
+
+#: tfillbuffform.btincr.caption
+msgid "Incremental values (00..FF)"
+msgstr "Добавочные значения (00..FF)"
+
+#: tfillbuffform.btrandom.caption
+msgid "Random values"
+msgstr "Случайные значения"
+
+#: tfillbuffform.caption
+msgid "Fill Buffer"
+msgstr "Заполнить буфер"
+
+#: tfillbuffform.groupbox1.caption
+msgid "HEX Values"
+msgstr ""
+
+#: tfillbuffform.groupbox2.caption
+msgid "Limits"
+msgstr ""
+
+#: tfillbuffform.label2.caption
+msgid "Start Address:"
+msgstr "Начальный адрес:"
+
+#: tfillbuffform.label3.caption
+msgid "End Address:"
+msgstr "Конечный адрес:"
+
+#: tmainform.appbutton.hint
+msgid "Access Protection Page (APP)"
+msgstr ""
+
+#: tmainform.autoblankcheck.caption
+msgid "Blank Check"
+msgstr "Проверка на чистоту"
+
+#: tmainform.autocheck.caption
+msgid "Verify"
+msgstr "Сравнить содержимое"
+
+#: tmainform.autoclear.caption
+msgid "Erase"
+msgstr "Стереть"
+
+#: tmainform.autowrite.caption
+msgctxt "tmainform.autowrite.caption"
+msgid "Write"
+msgstr "Записать"
+
+#: tmainform.avreepromtbutton.caption
+msgctxt "tmainform.avreepromtbutton.caption"
+msgid "EEPROM"
+msgstr ""
+
+#: tmainform.avrfusesbutton.caption
+msgctxt "tmainform.avrfusesbutton.caption"
+msgid "Fuses"
+msgstr ""
+
+#: tmainform.blankcheckmenuitem.caption
+msgid "BlankCheck"
+msgstr "Проверка на чистоту"
+
+#: tmainform.buffermenuitem.caption
+msgid "Buffer"
+msgstr "буфер"
+
+#: tmainform.buttonblock.hint
+msgid "Unprotect"
+msgstr "Снять защиту"
+
+#: tmainform.buttoncancel.hint
+msgid "Cancel"
+msgstr "Прервать текущею операцию"
+
+#: tmainform.buttonerase.hint
+msgid "Erase IC"
+msgstr "Стереть"
+
+#: tmainform.buttonopenfile.hint
+msgid "Open File"
+msgstr "Открыть файл"
+
+#: tmainform.buttonread.hint
+msgctxt "tmainform.buttonread.hint"
+msgid "Read IC"
+msgstr "Читать чип"
+
+#: tmainform.buttonreadid.hint
+msgid "Detect IC"
+msgstr "Определить чип"
+
+#: tmainform.buttonsavefile.hint
+msgctxt "tmainform.buttonsavefile.hint"
+msgid "Save File"
+msgstr "Сохранить файл"
+
+#: tmainform.buttonverify.hint
+msgid "Verify IC"
+msgstr "Сравнить содержимое"
+
+#: tmainform.buttonwrite.hint
+msgctxt "tmainform.buttonwrite.hint"
+msgid "Write IC"
+msgstr "Записать"
+
+#: tmainform.checkbox_i2c_a2.hint
+msgctxt "tmainform.checkbox_i2c_a2.hint"
+msgid "Set device address"
+msgstr "Установить адрес устройства"
+
+#: tmainform.checkbox_i2c_byteread.caption
+msgid "R/W Byte by Byte"
+msgstr "Побайтовое чтение"
+
+#: tmainform.checkbox_i2c_byteread.hint
+msgid "Read & Write, Byte by Byte"
+msgstr "Читать байт за байтом"
+
+#: tmainform.clearlogmenuitem.caption
+msgid "Clear"
+msgstr "Очистить"
+
+#: tmainform.comboaddrtype.hint
+msgid "Type of addressing"
+msgstr "Тип адресации к памяти"
+
+#: tmainform.comboboxavrspeed.hint
+msgid "AVR SPI frequency"
+msgstr "SPI AVR частота"
+
+#: tmainform.combochipsize.hint
+msgid "IC size in bytes"
+msgstr "Размер чипа в байтах"
+
+#: tmainform.combomwbitlen.hint
+msgid "Address Lenght in bits"
+msgstr "Длинна адреса в битах"
+
+#: tmainform.combopagesize.hint
+msgid "Write Page size"
+msgstr "Размер страницы в письменном виде"
+
+#: tmainform.copylogmenuitem.caption
+msgctxt "tmainform.copylogmenuitem.caption"
+msgid "Copy"
+msgstr "Копировать"
+
+#: tmainform.i2cavancedbutton.caption
+msgid "i2cAvanced"
+msgstr ""
+
+#: tmainform.labelpage.caption
+msgid "Page"
+msgstr "Страница"
+
+#: tmainform.labelsize.caption
+msgid "Size"
+msgstr "Размер"
+
+#: tmainform.labeltypead.caption
+msgid "Address type"
+msgstr "Тип адреса"
+
+#: tmainform.i2cadvancedbutton.hint
+msgid "I2C advanced settings access"
+msgstr "Доступ к расширенным настройкам I2C"
+
+#: tmainform.labeladlength.caption
+msgid "Address lenght"
+msgstr "Длина адреса"
+
+#: tmainform.labelspicmd.caption
+msgid "SPI Family"
+msgstr "Команды SPI"
+
+#: tmainform.label_i2c_devaddr.caption
+msgid "Device address"
+msgstr "Адрес устройства"
+
+#: tmainform.menuarduinospiclock.caption
+msgid "Clock"
+msgstr "Частота"
+
+#: tmainform.menuavrispspiclock.caption
+msgid "Clock"
+msgstr "Частота"
+
+#: tmainform.menuchip.caption
+msgid "IC"
+msgstr "Микросхема"
+
+#: tmainform.menuclearbuff.caption
+msgid "Clear the Buffer"
+msgstr "Очистить буфер"
+
+#: tmainform.menucopytoclip.caption
+msgctxt "tmainform.menucopytoclip.caption"
+msgid "Copy"
+msgstr "Копировать"
+
+#: tmainform.menufile.caption
+msgid "File"
+msgstr "файл"
+
+#: tmainform.menufileopen.caption
+msgid "Open"
+msgstr "Открыть"
+
+#: tmainform.menufilesave.caption
+msgid "Save"
+msgstr "Сохранить"
+
+#: tmainform.menufillbuffer.caption
+msgid "Fill the Buffer""
+msgstr "Заполните буфер"
+
+#: tmainform.menufindchip.caption
+msgctxt "tmainform.menufindchip.caption"
+msgid "Search"
+msgstr "Поиск"
+
+#: tmainform.menufindreplace.caption
+msgid "Search/Replace"
+msgstr "Поиск"
+
+#: tmainform.menugotooffset.caption
+msgctxt "tmainform.menugotooffset.caption"
+msgid "Goto address"
+msgstr "Перейти по адресу"
+
+#: tmainform.menuignorebusybit.caption
+msgid "Dont verify Busy bit"
+msgstr "Не проверять Busy бит"
+
+#: tmainform.menuitembenchmark.caption
+msgid "Benchmark"
+msgstr ""
+
+#: tmainform.menuitemeditsreg.caption
+msgid "Edit SREG"
+msgstr "Изменить SREG"
+
+#: tmainform.menuitemhardware.caption
+msgid "Hardware"
+msgstr "Программатор"
+
+#: tmainform.menuitemreadsreg.caption
+msgid "Read SREG"
+msgstr "Прочитать SREG"
+
+#: tmainform.menuloaddev.caption
+msgid "Load last device when starts"
+msgstr "Используйте последний чип при запуске"
+
+
+#: tmainform.menumicrowire.caption
+msgid "Microwire (soft)"
+msgstr ""
+
+#: tmainform.menumwclock.caption
+msgctxt "tmainform.menumwclock.caption"
+msgid "Clock"
+msgstr "Частота"
+
+#: tmainform.menuoptions.caption
+msgid "Options"
+msgstr "Настройки"
+
+#: tmainform.menupastefromclip.caption
+msgid "Paste"
+msgstr "вставить"
+
+#: tmainform.menuskipff.caption
+msgid "Skip FF"
+msgstr "Не писать FF"
+
+#: tmainform.menuspiclock.caption
+msgctxt "tmainform.menuspiclock.caption"
+msgid "Clock"
+msgstr "Частота"
+
+#: tmainform.mwswapbutton.caption
+msgid "Swap <-->"
+msgstr ""
+
+#: tmainform.mwswapbutton.hint
+msgid "Swap High and Low Bytes"
+msgstr "Поменять местами байты High и Low"
+
+#: tmainform.scriptsmenuitem.caption
+msgid "Скрипты"
+msgstr "Скрипты"
+
+#: tmainform.swapbytes.caption
+msgid "Swap High and Low Bytes"
+msgstr "Поменять местами байты в буфере"
+
+#: tmainform.unprotbutton.caption
+msgid "UnProt"
+msgstr ""
+
+#: tmainform.unprotbutton.hint
+msgid "Removes protections in APP"
+msgstr "Снять защиту"
+
+#: tsearchform.caption
+msgctxt "tsearchform.caption"
+msgid "Search"
+msgstr "Поиск"
+
+#: tsearchform.casesensecheckbox.caption
+msgid "case sensitive"
+msgstr "Учитывать регистр"
+
+#: tsearchform.findbutton.caption
+msgid "Search"
+msgstr "Найти"
+
+#: tsearchform.hexcheckbox.caption
+msgid "Search HEX"
+msgstr "Искать HEX значение"
+
+#: tsearchform.rcancelbutton.caption
+msgctxt "tsearchform.rcancelbutton.caption"
+msgid "Cancel"
+msgstr "Прервать"
+
+#: tsearchform.replaceallbutton.caption
+msgid "Repl. All"
+msgstr "Отв. все"
+
+#: tsearchform.replacebutton.caption
+msgctxt "tsearchform.replacebutton.caption"
+msgid "Replace"
+msgstr "Заменить"
+
+#: tsearchform.replacecheckbox.caption
+msgid "Replace:"
+msgstr "Заменить:"
+
+#: tsearchform.searchlabel.caption
+msgid "Search:"
+msgstr "Искать:"
+
+#: tsregeditform.buttonreadsreg.caption
+msgctxt "tsregeditform.buttonreadsreg.caption"
+msgid "Read"
+msgstr "Прочитать"
+
+#: tsregeditform.buttonwritesreg.caption
+msgctxt "tsregeditform.buttonwritesreg.caption"
+msgid "Write"
+msgstr "Записать"
+
+#: tchipsearchform.caption
+msgid "Search IC"
+msgstr "Поиск микросхемы"
+
+#: tchipsearchform.label1.caption
+msgid "Content:"
+msgstr "Маркировка содержит:"
+
+#: tchipsearchform.ChipSearchSelectButton.caption
+msgid "Select IC"
+msgstr "Выбрать микросхему"
+
+#: msgstr.str_dlg_filechgd
+msgid "File modified"
+msgstr "файл изменён"
+
+#: tscripteditform.menuitemfile.caption
+msgid "File"
+msgstr "Файл"
+
+#: tscripteditform.menuitemopen.caption
+msgid "Open"
+msgstr "Открыть"
+
+#: tscripteditform.menuitemrun.caption
+msgid "Execute"
+msgstr "Выполнить"
+
+#: tscripteditform.menuitemsave.caption
+msgid "Save"
+msgstr "Сохранить"
+
+#: tscripteditform.menuitemsaveas.caption
+msgid "Save as..."
+msgstr "Сохранить как..."
+
+#: tscripteditform.menuitemsection.caption
+msgid "Section ="
+msgstr "Секция ="
diff --git a/Tools/AsProgrammer/libusb0.dll b/Tools/AsProgrammer/libusb0.dll
new file mode 100644
index 0000000..6e475b9
Binary files /dev/null and b/Tools/AsProgrammer/libusb0.dll differ
diff --git a/Tools/AsProgrammer/scripts/GD25Q64_128_SecRegisters.pas b/Tools/AsProgrammer/scripts/GD25Q64_128_SecRegisters.pas
new file mode 100644
index 0000000..a23e384
--- /dev/null
+++ b/Tools/AsProgrammer/scripts/GD25Q64_128_SecRegisters.pas
@@ -0,0 +1,176 @@
+// designed for GIGADEVICE GD25Q64 and GD25Q128
+// READ / WRITE / ERASE Security REGISTERS
+// script can be adapted for other brand and models by changing 'RegSize' value in each section
+{$ READ_JEDEC_ID}
+begin
+ ID:= CreateByteArray(3);
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start read JEDEC ID');
+
+ // read ID to test installation
+ SPIWrite (0, 1, $9F);
+ SPIRead(1, 3, ID);
+
+ logprint('Read ID: ' + inttohex((GetArrayItem(ID, 0)),2)+ inttohex((GetArrayItem(ID, 1)),2)+ inttohex((GetArrayItem(ID, 2)),2));
+ LogPrint ('End read JEDEC ID');
+ SPIExitProgMode ();
+end
+
+{$ READ_SECURITY_REGISTER_1_GD25Q64_128}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start read GD25Q64_128 security register #1');
+ RegSize :=1024;
+ // read register 1
+ SPIWrite (0, 5, $48, $00, $10, $00, $00);
+ SPIReadToEditor (1, RegSize);
+
+ LogPrint ('End read GD25Q64_128 security register #1');
+ SPIExitProgMode ();
+end
+
+{$ READ_SECURITY_REGISTER_2_GD25Q64_128}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start read GD25Q64_128 security register #2');
+ RegSize :=1024;
+ // read register 2
+ SPIWrite (0, 5, $48, $00, $20, $00, $00);
+ SPIReadToEditor (1, RegSize);
+
+ LogPrint ('End read GD25Q64_128 security register #2');
+ SPIExitProgMode ();
+end
+
+{$ READ_SECURITY_REGISTER_3_GD25Q64_128}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start read GD25Q64_128 security register #3');
+ RegSize :=1024;
+ // read register 3
+ SPIWrite (0, 5, $48, $00, $30, $00, $00);
+ SPIReadToEditor (1, RegSize);
+
+ LogPrint ('End read GD25Q64_128 security register #3');
+ SPIExitProgMode ();
+end
+
+{$ ERASE_SECURITY_REGISTER_1_GD25Q64_128}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start Erase GD25Q64_128 security register #1');
+ // write enable
+ SPIWrite (1, 1, $06);
+ // erase register 1
+ SPIWrite (1, 4, $44, $00, $10, $00);
+
+ LogPrint ('End Erase GD25Q64_128 security register #1');
+ SPIExitProgMode ();
+end
+
+{$ ERASE_SECURITY_REGISTER_2_GD25Q64_128}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start Erase GD25Q64_128 security register #2');
+
+ // write enable
+ SPIWrite (1, 1, $06);
+ // erase register 2
+ SPIWrite (1, 4, $44, $00, $20, $00);
+
+ LogPrint ('End Erase GD25Q64_128 security register #2');
+ SPIExitProgMode ();
+end
+
+{$ ERASE_SECURITY_REGISTER_3_GD25Q64_128}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start Erase GD25Q64_128 security register #3');
+
+ // write enable
+ SPIWrite (1, 1, $06);
+ // erase register 3
+ SPIWrite (1, 4, $44, $00, $30, $00);
+
+ LogPrint ('End Erase GD25Q64_128 security register #3');
+ SPIExitProgMode ();
+end
+
+{$ WRITE_SECURITY_REGISTER_1_GD25Q64_128}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start write GD25Q64_128 security register #1');
+ RegSize :=1024;
+ sreg := 0;
+
+ // write enable
+ SPIWrite (1, 1, $06);
+
+ // write register 1
+ SPIWrite (0, 4, $42, $00, $10, $00);
+ SPIWriteFromEditor(1, Regsize, 0);
+
+ //Busy
+ repeat
+ SPIWrite(0, 1, $05);
+ SPIRead(1, 1, sreg);
+ until((sreg and 1) <> 1);
+
+ // write disable
+ SPIWrite (1, 1, $04);
+ LogPrint ('End write GD25Q64_128 security register #1');
+ SPIExitProgMode ();
+end
+
+{$ WRITE_SECURITY_REGISTER_2_GD25Q64_128}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start write GD25Q64_128 security register #2');
+ RegSize :=1024;
+ sreg := 0;
+
+ // write enable
+ SPIWrite (1, 1, $06);
+
+ // write register 2
+ SPIWrite (0, 4, $42, $00, $20, $00);
+ SPIWriteFromEditor(1, Regsize, 0);
+
+ //Busy
+ repeat
+ SPIWrite(0, 1, $05);
+ SPIRead(1, 1, sreg);
+ until((sreg and 1) <> 1);
+
+ // write disable
+ SPIWrite (1, 1, $04);
+ LogPrint ('End write GD25Q64_128 security register #2');
+ SPIExitProgMode ();
+end
+
+{$ WRITE_SECURITY_REGISTER_3_GD25Q64_128}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start write GD25Q64_128 security register #3');
+ RegSize :=1024;
+ sreg := 0;
+
+ // write enable
+ SPIWrite (1, 1, $06);
+
+ // write register 3
+ SPIWrite (0, 4, $42, $00, $30, $00);
+ SPIWriteFromEditor(1, Regsize, 0);
+
+ //Busy
+ repeat
+ SPIWrite(0, 1, $05);
+ SPIRead(1, 1, sreg);
+ until((sreg and 1) <> 1);
+
+ // write disable
+ SPIWrite (1, 1, $04);
+ LogPrint ('End write GD25Q64_128 security register #3');
+ SPIExitProgMode ();
+end
+
diff --git a/Tools/AsProgrammer/scripts/blockerase.pas b/Tools/AsProgrammer/scripts/blockerase.pas
new file mode 100644
index 0000000..7620497
--- /dev/null
+++ b/Tools/AsProgrammer/scripts/blockerase.pas
@@ -0,0 +1,24 @@
+{$erase} //секция будет выполняться при нажатии кнопки "стереть"
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+
+ BlockSize := 65536; //Размер блока
+ sreg := 0;
+ ProgressBar(0, (_IC_SIZE / BlockSize)-1, 0);
+
+ for i:=0 to (_IC_SIZE / BlockSize)-1 do
+ begin
+ SPIWrite(1, 1, $06); //wren
+ SPIWrite(1, 4, $D8, i,0,0); //BE
+
+ //Busy?
+ repeat
+ SPIWrite(0, 1, $05);
+ SPIRead(1, 1, sreg);
+ until((sreg and 1) <> 1);
+ ProgressBar(1);
+ end;
+
+ ProgressBar(0, 0, 0);
+ SPIExitProgMode();
+end
diff --git a/Tools/AsProgrammer/scripts/i2c_example.pas b/Tools/AsProgrammer/scripts/i2c_example.pas
new file mode 100644
index 0000000..cd2a283
--- /dev/null
+++ b/Tools/AsProgrammer/scripts/i2c_example.pas
@@ -0,0 +1,59 @@
+{$read}
+//reading 24c08
+begin
+ ChipSize := 1024;
+ MemAddr := 0;
+ ReadBuff := CreateByteArray(ChipSize);
+ DevAddr := $A8;
+
+ if _IC_Name = '' then
+ begin
+ ShowMessage ('Choose a component in list');
+ exit;
+ end;
+
+ I2CEnterProgMode;
+
+ I2CReadWrite(DevAddr, 1, ChipSize, MemAddr, ReadBuff);
+ ReadToEditor(ChipSize, 0, ReadBuff);
+
+ I2CExitProgMode;
+end
+
+{$write}
+function I2CIsBusy(DevAdr): boolean;
+begin
+ I2CStart;
+ Result := not I2CWriteByte(DevAdr);
+ I2CStop;
+end;
+//writing 24c08
+begin
+ ChipSize := 1024;
+ MemAddr := 0;
+ WriteByte := 0;
+ DevAddr := $A0;
+ if _IC_Name = '' then
+ begin
+ ShowMessage ('Choose a component in list');
+ exit;
+ end;
+ ProgressBar(0, _IC_SIZE-1, 0);
+
+ I2CEnterProgMode;
+
+ for i:=0 to ChipSize-1 do
+ begin
+ WriteFromEditor(1, i, WriteByte);
+ I2CReadWrite(DevAddr, 2, 0, MemAddr, WriteByte);
+ while I2CIsBusy(DevAddr) do
+ MemAddr := MemAddr + 1;
+ if MemAddr = 256 then DevAddr := $A2;
+ if MemAddr = 512 then DevAddr := $A4;
+ if MemAddr = 768 then DevAddr := $A6;
+ ProgressBar(1);
+ end;
+
+ I2CExitProgMode;
+ ProgressBar(0, 0, 0);
+end
diff --git a/Tools/AsProgrammer/scripts/w25q32FV_64FV_128FV_SecRegisters.pas b/Tools/AsProgrammer/scripts/w25q32FV_64FV_128FV_SecRegisters.pas
new file mode 100644
index 0000000..fa63947
--- /dev/null
+++ b/Tools/AsProgrammer/scripts/w25q32FV_64FV_128FV_SecRegisters.pas
@@ -0,0 +1,192 @@
+// designed for WINBOND W25Q32FV/JV W25Q64FV/JV W25Q128FV/JV (not BV serie)
+// READ / WRITE / ERASE Security REGISTERS
+// script can be adapted for other brand and models by changing 'RegSize' value in each section
+{$ READ_JEDEC_ID}
+begin
+ ID:= CreateByteArray(3);
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start read JEDEC ID');
+
+ // read ID to test installation
+ SPIWrite (0, 1, $9F);
+ SPIRead(1, 3, ID);
+
+ logprint('Read ID: ' + inttohex((GetArrayItem(ID, 0)),2)+ inttohex((GetArrayItem(ID, 1)),2)+ inttohex((GetArrayItem(ID, 2)),2));
+ LogPrint ('End read JEDEC ID');
+ SPIExitProgMode ();
+end
+
+{$ READ_UNIQUE_ID}
+begin
+ UID:= CreateByteArray(8);
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start read UNIQUE ID');
+
+ // read 64bits UNIQUE ID
+ SPIWrite (0, 5, $4B, $00, $00, $00, $00);
+ SPIRead(1, 8, UID);
+
+ logprint('Read UID: ' + inttohex((GetArrayItem(UID, 0)),2)+ inttohex((GetArrayItem(UID, 1)),2)+ inttohex((GetArrayItem(UID, 2)),2)+ inttohex((GetArrayItem(UID, 3)),2)
+ + inttohex((GetArrayItem(UID, 4)),2)+ inttohex((GetArrayItem(UID, 5)),2)+ inttohex((GetArrayItem(UID, 6)),2)+ inttohex((GetArrayItem(UID, 7)),2));
+ LogPrint ('End read UNIQUE ID');
+ SPIExitProgMode ();
+end
+
+{$ READ_SECURITY_REGISTER_1}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start read security register #1');
+ RegSize := 256;
+ // read register 1
+ SPIWrite (0, 5, $48, $00, $10, $00, $00);
+ SPIReadToEditor (1, RegSize);
+
+ LogPrint ('End read security register #1');
+ SPIExitProgMode ();
+end
+
+{$ READ_SECURITY_REGISTER_2}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start read security register #2');
+ RegSize := 256;
+ // read register 2
+ SPIWrite (0, 5, $48, $00, $20, $00, $00);
+ SPIReadToEditor (1, RegSize);
+
+ LogPrint ('End read security register #2');
+ SPIExitProgMode ();
+end
+
+{$ READ_SECURITY_REGISTER_3}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start read security register #3');
+ RegSize := 256;
+ // read register 3
+ SPIWrite (0, 5, $48, $00, $30, $00, $00);
+ SPIReadToEditor (1, RegSize);
+
+ LogPrint ('End read security register #3');
+ SPIExitProgMode ();
+end
+
+{$ ERASE_SECURITY_REGISTER_1}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start Erase security register #1');
+ // write enable
+ SPIWrite (1, 1, $06);
+ // erase register 1
+ SPIWrite (1, 4, $44, $00, $10, $00);
+
+ LogPrint ('End Erase security register #1');
+ SPIExitProgMode ();
+end
+
+{$ ERASE_SECURITY_REGISTER_2}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start Erase security register #2');
+
+ // write enable
+ SPIWrite (1, 1, $06);
+ // erase register 2
+ SPIWrite (1, 4, $44, $00, $20, $00);
+
+ LogPrint ('End Erase security register #2');
+ SPIExitProgMode ();
+end
+
+{$ ERASE_SECURITY_REGISTER_3}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start Erase security register #3');
+
+ // write enable
+ SPIWrite (1, 1, $06);
+ // erase register 3
+ SPIWrite (1, 4, $44, $00, $30, $00);
+
+ LogPrint ('End Erase security register #3');
+ SPIExitProgMode ();
+end
+
+{$ WRITE_SECURITY_REGISTER_1}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start write security register #1');
+ RegSize := 256;
+ sreg := 0;
+
+ // write enable
+ SPIWrite (1, 1, $06);
+
+ // write register 1
+ SPIWrite (0, 4, $42, $00, $10, $00);
+ SPIWriteFromEditor(1, Regsize, 0);
+
+ //Busy
+ repeat
+ SPIWrite(0, 1, $05);
+ SPIRead(1, 1, sreg);
+ until((sreg and 1) <> 1);
+
+ // write disable
+ SPIWrite (1, 1, $04);
+ LogPrint ('End write security register #1');
+ SPIExitProgMode ();
+end
+
+{$ WRITE_SECURITY_REGISTER_2}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start write security register #2');
+ RegSize := 256;
+ sreg := 0;
+
+ // write enable
+ SPIWrite (1, 1, $06);
+
+ // write register 2
+ SPIWrite (0, 4, $42, $00, $20, $00);
+ SPIWriteFromEditor(1, Regsize, 0);
+
+ //Busy
+ repeat
+ SPIWrite(0, 1, $05);
+ SPIRead(1, 1, sreg);
+ until((sreg and 1) <> 1);
+
+ // write disable
+ SPIWrite (1, 1, $04);
+ LogPrint ('End write security register #2');
+ SPIExitProgMode ();
+end
+
+{$ WRITE_SECURITY_REGISTER_3}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start write security register #3');
+ RegSize := 256;
+ sreg := 0;
+
+ // write enable
+ SPIWrite (1, 1, $06);
+
+ // write register 3
+ SPIWrite (0, 4, $42, $00, $30, $00);
+ SPIWriteFromEditor(1, Regsize, 0);
+
+ //Busy
+ repeat
+ SPIWrite(0, 1, $05);
+ SPIRead(1, 1, sreg);
+ until((sreg and 1) <> 1);
+
+ // write disable
+ SPIWrite (1, 1, $04);
+ LogPrint ('End write security register #3');
+ SPIExitProgMode ();
+end
+
diff --git a/Tools/AsProgrammer/scripts/w25q32FV_64FV_128FV_read_SFDP.pas b/Tools/AsProgrammer/scripts/w25q32FV_64FV_128FV_read_SFDP.pas
new file mode 100644
index 0000000..8f77048
--- /dev/null
+++ b/Tools/AsProgrammer/scripts/w25q32FV_64FV_128FV_read_SFDP.pas
@@ -0,0 +1,55 @@
+// designed for WINBOND W25Q32FV/JV W25Q64FV/JV W25Q128FV/JV (not BV serie)
+// READ the 3 Serial Flash Discoverable Parameter (SFDP) REGISTERS
+// note: W25Q32FV have only one SFDP register
+// script can be adapted for other brand and models by changing 'RegSize' value in each section
+{$ READ_JEDEC_ID}
+begin
+ ID:= CreateByteArray(3);
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start read JEDEC ID');
+
+ // read ID to test installation
+ SPIWrite (0, 1, $9F);
+ SPIRead(1, 3, ID);
+
+ logprint('Read ID: ' + inttohex((GetArrayItem(ID, 0)),2)+ inttohex((GetArrayItem(ID, 1)),2)+ inttohex((GetArrayItem(ID, 2)),2));
+ LogPrint ('End read JEDEC ID');
+ SPIExitProgMode ();
+end
+
+{$ Read_SFDP_Register_1}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start read SFDP Register #1');
+ RegSize := 256;
+ // read register 1
+ SPIWrite (0, 5, $5A, $00, $10, $00, $00);
+ SPIReadToEditor (1, RegSize);
+ LogPrint ('End read SFDP Register #1');
+ SPIExitProgMode ();
+end
+
+
+{$ Read_SFDP_Register_2}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start read SFDP Register #2');
+ RegSize := 256;
+ // read register 2
+ SPIWrite (0, 5, $5A, $00, $20, $00, $00);
+ SPIReadToEditor (1, RegSize);
+ LogPrint ('End read SFDP Register #2');
+ SPIExitProgMode ();
+end
+
+{$ Read_SFDP_Register_3}
+begin
+ if not SPIEnterProgMode(_SPI_SPEED_MAX) then LogPrint('Error setting SPI speed');
+ LogPrint ('Start read SFDP Register #3');
+ RegSize := 256;
+ // read register 3
+ SPIWrite (0, 5, $5A, $00, $30, $00, $00);
+ SPIReadToEditor (1, RegSize);
+ LogPrint ('End read SFDP Register #3');
+ SPIExitProgMode ();
+end
diff --git a/Tools/AsProgrammer/settings.xml b/Tools/AsProgrammer/settings.xml
new file mode 100644
index 0000000..a2e8f90
--- /dev/null
+++ b/Tools/AsProgrammer/settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/Tools/CH341A Programmer V1.03.zip b/Tools/CH341A Programmer V1.03.zip
new file mode 100644
index 0000000..94419a6
Binary files /dev/null and b/Tools/CH341A Programmer V1.03.zip differ
diff --git a/Tools/COMTransmit/COMTransmit.exe b/Tools/COMTransmit/COMTransmit.exe
new file mode 100644
index 0000000..16804e3
Binary files /dev/null and b/Tools/COMTransmit/COMTransmit.exe differ
diff --git a/docs/CH341DS1.PDF b/docs/CH341DS1.PDF
new file mode 100644
index 0000000..30fcf41
Binary files /dev/null and b/docs/CH341DS1.PDF differ