Add files via upload

This commit is contained in:
SomniferumLocator 2023-11-16 17:36:02 +01:00 committed by GitHub
parent b8a19a3e58
commit 18d7f4155b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
35 changed files with 5597 additions and 0 deletions

Binary file not shown.

BIN
AsProgrammer/CH341DLL.DLL Normal file

Binary file not shown.

View file

@ -0,0 +1,435 @@
<?xml version="1.0" encoding="utf-8"?>
<fuseBits>
<mcu signature="1E9781" name="AT90CAN128">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>TA0SEL,BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9581" name="AT90CAN32">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>TA0SEL,BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9681" name="AT90CAN64">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>TA0SEL,BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9381" name="AT90PWM2">
<high>BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BOOTRST,BOOTSZ0,BOOTSZ1,,PSCRV,PSC0RB,PSC1RB,PSC2RB</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9383" name="AT90PWM2B">
<high>BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BOOTRST,BOOTSZ0,BOOTSZ1,,PSCRV,PSC0RB,,PSC2RB</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9001" name="AT90S1200">
<high>,,,,,,,</high>
<low>,,,,,,,</low>
<ext>,,,,,,,</ext>
<lock>,LB1,LB2,,,,,</lock>
</mcu>
<mcu signature="1E9101" name="AT90S2313">
<high>,,,,,,,</high>
<low>,,,,,,,</low>
<ext>,,,,,,,</ext>
<lock>,LB1,LB2,,,,,</lock>
</mcu>
<mcu signature="1E9103" name="AT90S2343">
<high>,,,,,,,</high>
<low>RCEN,,,,,,,</low>
<ext>,,,,,,,</ext>
<lock>,LB2,LB1,,,,,</lock>
</mcu>
<mcu signature="1E9201" name="AT90S4414">
<high>,,,,,,,</high>
<low>,,,,,,,</low>
<ext>,,,,,,,</ext>
<lock>,LB2,LB1,,,,,</lock>
</mcu>
<mcu signature="1E9203" name="AT90S4433">
<high>,,,,,,,</high>
<low>,,,,,,,</low>
<ext>,,,,,,,</ext>
<lock>,LB2,LB1,,,,,</lock>
</mcu>
<mcu signature="1E9301" name="AT90S8515">
<high>,,,,,,,</high>
<low>,,,,,,,</low>
<ext>,,,,,,,</ext>
<lock>,LB2,LB1,,,,,</lock>
</mcu>
<mcu signature="1E9303" name="AT90S8535">
<high>,,,,,,,</high>
<low>,,,,,,,</low>
<ext>,,,,,,,</ext>
<lock>,LB2,LB1,,,,,</lock>
</mcu>
<mcu signature="1E9782" name="AT90USB1286/1287">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BODLEVEL0,BODLEVEL1,BODLEVEL2,HWBE,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9482" name="AT90USB162">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,RSTDSBL,DWEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BODLEVEL0,BODLEVEL1,BODLEVEL2,HWBE,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9682" name="AT90USB646/647">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BODLEVEL0,BODLEVEL1,BODLEVEL2,HWBE,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9702" name="ATmega128">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,CKOPT,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,BODEN,BODLEVEL</low>
<ext>WDTON,M103C,,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9703" name="ATmega1280">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9704" name="ATmega1281">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9705" name="ATmega1284P">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9403" name="ATmega16">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,CKOPT,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,BODEN,BODLEVEL</low>
<ext>,,,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9489" name="ATmega16U2">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,RSTDSBL,DWEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BODLEVEL0,BODLEVEL1,BODLEVEL2,HWBE,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9401" name="ATmega161">
<high>,,,,,,,</high>
<low>CKSEL0,CKSEL1,CKSEL2,,SUT,,BOOTRST,</low>
<ext>,,,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9404" name="ATmega162">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>,BODLEVEL0,BODLEVEL1,BODLEVEL2,M161C,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9402" name="ATmega163">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,,,,,</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,,,BODEN,BODLEVEL</low>
<ext>,,,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E940a" name="ATmega164P">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9406" name="ATmega168">
<high>BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BOOTRST,BOOTSZ0,BOOTSZ1,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E940b" name="ATmega168P">
<high>BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BOOTRST,BOOTSZ0,BOOTSZ1,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9405" name="ATmega169">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>,BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9801" name="ATmega2560">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9802" name="ATmega2561">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9502" name="ATmega32">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,CKOPT,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,BODEN,BODLEVEL</low>
<ext>,,,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E958A" name="ATmega32U2">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,RSTDSBL,DWEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BODLEVEL0,BODLEVEL1,BODLEVEL2,HWBE,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9508" name="ATmega324P">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9505" name="ATmega325">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>RSTDISBL,BODLEVEL0,BODLEVEL1,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9506" name="ATmega3250">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>RSTDISBL,BODLEVEL0,BODLEVEL1,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9514" name="ATmega328">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,SPIEN,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E950f" name="ATmega328P">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,SPIEN,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9503" name="ATmega329">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>RSTDISBL,BODLEVEL0,BODLEVEL1,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9504" name="ATmega3290">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>RSTDISBL,BODLEVEL0,BODLEVEL1,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9507" name="ATmega406">
<high>JTAGEN,OCDEN,,,,,,</high>
<low>CKSEL,SUT0,SUT1,BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON</low>
<ext>,,,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9205" name="ATmega48">
<high>BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>SELFPRGEN,,,,,,,</ext>
<lock>LB1,LB2,,,,,,</lock>
</mcu>
<mcu signature="1E920a" name="ATmega48P">
<high>BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>SELFPRGEN,,,,,,,</ext>
<lock>LB1,LB2,,,,,,</lock>
</mcu>
<mcu signature="1E9602" name="ATmega64">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,CKOPT,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,BODEN,BODLEVEL</low>
<ext>WDTON,M103C,,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9608" name="ATmega640">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9609" name="ATmega644">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E960a" name="ATmega644P">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BODLEVEL0,BODLEVEL1,BODLEVEL2,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9605" name="ATmega645">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>RSTDISBL,BODLEVEL0,BODLEVEL1,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9606" name="ATmega6450">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>RSTDISBL,BODLEVEL0,BODLEVEL1,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9603" name="ATmega649">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>RSTDISBL,BODLEVEL0,BODLEVEL1,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9604" name="ATmega6490">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,JTAGEN,OCDEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>RSTDISBL,BODLEVEL0,BODLEVEL1,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9307" name="ATmega8">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,CKOPT,,WDTON,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,BODEN,BODLEVEL</low>
<ext>,,,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9389" name="ATmega8U2">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,WDTON,,RSTDSBL,DWEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BODLEVEL0,BODLEVEL1,BODLEVEL2,HWBE,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9306" name="ATmega8515">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,CKOPT,,WDTON,S8515C</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,BODEN,BODLEVEL</low>
<ext>,,,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9308" name="ATmega8535">
<high>BOOTRST,BOOTSZ0,BOOTSZ1,EESAVE,CKOPT,,WDTON,S8535C</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,BODEN,BODLEVEL</low>
<ext>,,,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E930a" name="ATmega88">
<high>BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BOOTRST,BOOTSZ0,BOOTSZ1,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E930f" name="ATmega88P">
<high>BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>BOOTRST,BOOTSZ0,BOOTSZ1,,,,,</ext>
<lock>LB1,LB2,BLB01,BLB02,BLB11,BLB12,,</lock>
</mcu>
<mcu signature="1E9004" name="ATtiny11">
<high>,,,,,,,</high>
<low>CKSEL0,CKSEL1,CKSEL2,RSTDISBL,FSTRT,,,</low>
<ext>,,,,,,,</ext>
<lock>,LB1,LB2,,,,,</lock>
</mcu>
<mcu signature="1E9005" name="ATtiny12">
<high>,,,,,,,</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,RSTDISBL,SPIEN,BODEN,BODLEVEL</low>
<ext>,,,,,,,</ext>
<lock>,LB1,LB2,,,,,</lock>
</mcu>
<mcu signature="1E9007" name="ATtiny13">
<high>RSTDISBL,BODLEVEL0,BODLEVEL1,DWEN,SELFPRGEN,,,</high>
<low>CKSEL0,CKSEL1,SUT0,SUT1,CKDIV8,WDTON,EESAVE,</low>
<ext>,,,,,,,</ext>
<lock>LB1,LB2,,,,,,</lock>
</mcu>
<mcu signature="1E9006" name="ATtiny15">
<high>,,,,,,,</high>
<low>CKSEL0,CKSEL1,,,RSTDISBL,SPIEN,BODEN,BODLEVEL</low>
<ext>,,,,,,,</ext>
<lock>,LB1,LB2,,,,,</lock>
</mcu>
<mcu signature="1E910a" name="ATtiny2313">
<high>RSTDISBL,BODLEVEL0,BODLEVEL1,BODLEVEL2,WDTON,,EESAVE,DWEN</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>SELFPRGEN,,,,,,,</ext>
<lock>LB1,LB2,,,,,,</lock>
</mcu>
<mcu signature="1E910b" name="ATtiny24">
<high>BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>SELFPRGEN,,,,,,,</ext>
<lock>LB1,LB2,,,,,,</lock>
</mcu>
<mcu signature="1E9108" name="ATtiny25">
<high>BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>SELFPRGEN,,,,,,,</ext>
<lock>LB1,LB2,,,,,,</lock>
</mcu>
<mcu signature="1E9109" name="ATtiny26">
<high>BODEN,BODLEVEL,EESAVE,,RSTDISBL,,,</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOPT,PLLCK</low>
<ext>,,,,,,,</ext>
<lock>LB1,LB2,,,,,,</lock>
</mcu>
<mcu signature="1E910c" name="ATtiny261">
<high>BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>SELFPRGEN,,,,,,,</ext>
<lock>LB1,LB2,,,,,,</lock>
</mcu>
<mcu signature="1E9207" name="ATtiny44">
<high>BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>SELFPRGEN,,,,,,,</ext>
<lock>LB1,LB2,,,,,,</lock>
</mcu>
<mcu signature="1E9206" name="ATtiny45">
<high>BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>SELFPRGEN,,,,,,,</ext>
<lock>LB1,LB2,,,,,,</lock>
</mcu>
<mcu signature="1E9208" name="ATtiny461">
<high>BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>SELFPRGEN,,,,,,,</ext>
<lock>LB1,LB2,,,,,,</lock>
</mcu>
<mcu signature="1E930c" name="ATtiny84">
<high>BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>SELFPRGEN,,,,,,,</ext>
<lock>LB1,LB2,,,,,,</lock>
</mcu>
<mcu signature="1E930b" name="ATtiny85">
<high>BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>SELFPRGEN,,,,,,,</ext>
<lock>LB1,LB2,,,,,,</lock>
</mcu>
<mcu signature="1E930d" name="ATtiny861">
<high>BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>SELFPRGEN,,,,,,,</ext>
<lock>LB1,LB2,,,,,,</lock>
</mcu>
<mcu signature="1E9311" name="ATtiny88">
<high>BODLEVEL0,BODLEVEL1,BODLEVEL2,EESAVE,WDTON,,DWEN,RSTDISBL</high>
<low>CKSEL0,CKSEL1,,,SUT0,SUT1,CKOUT,CKDIV8</low>
<ext>SELFPRGEN,,,,,,,</ext>
<lock>LB1,LB2,,,,,,</lock>
</mcu>
</fuseBits>

View file

@ -0,0 +1,224 @@
<?xml version="1.0" encoding="utf-8"?>
<StatusBits>
<FLASH25>
<DEFAULT>
<flash signature="FFFFFF" name="default">
<sreg1>S0,S1,S2,S3,S4,S5,S6,S7</sreg1>
<sreg2>S8,S9,S10,S11,S12,S13,S14,S15</sreg2>
<sreg3>S16,S17,S18,S19,S20,S21,S22,S23</sreg3>
</flash>
</DEFAULT>
<MICRON>
<flash signature="20BA20" name="MT25Q512">
<sreg1>BUSY,WEL,BP0,BP1,BP2,BP3,TB,SRP0</sreg1>
<sreg2>,,,,,,,</sreg2>
<sreg3>,,,,,,,</sreg3>
</flash>
</MICRON>
<MACRONIX>
<flash signature="C212" name="MX35LF1GE4AB">
<sreg1>SP,Comp,Inv,BP0,BP1,BP2,,BPRWD</sreg1>
<sreg2>QE,,,,ECC-E,,OTP-E,OTP-L</sreg2>
<sreg3>BUSY,WEL,E-FAIL,P-FAIL,ECC-S0,ECC-S1,CRBSY,</sreg3>
</flash>
<flash signature="C222" name="MX35LF2GE4AB">
<sreg1>,,,BP0,BP1,BP2,,BPRWD</sreg1>
<sreg2>QE,,,,ECC-E,,OTP-E,OTP-L</sreg2>
<sreg3>BUSY,WEL,E-FAIL,P-FAIL,ECC-S0,ECC-S1,,</sreg3>
</flash>
<flash signature="C220" name="MX35LF2G14AC">
<sreg1>SP,Comp,Inv,BP0,BP1,BP2,,BPRWD</sreg1>
<sreg2>QE,,,,,,OTP-E,OTP-L</sreg2>
<sreg3>BUSY,WEL,E-FAIL,P-FAIL,,,CRBSY,</sreg3>
</flash>
<flash signature="C290" name="MX35UF1G14AC_1.8V">
<sreg1>SP,Comp,Inv,BP0,BP1,BP2,,BPRWD</sreg1>
<sreg2>QE,,,,,,OTP-E,OTP-L</sreg2>
<sreg3>BUSY,WEL,E-FAIL,P-FAIL,,,,</sreg3>
</flash>
<flash signature="C2A0" name="MX35UF2G14AC_1.8V">
<sreg1>SP,Comp,Inv,BP0,BP1,BP2,,BPRWD</sreg1>
<sreg2>QE,,,,,,OTP-E,OTP-L</sreg2>
<sreg3>BUSY,WEL,E-FAIL,P-FAIL,,,,</sreg3>
</flash>
</MACRONIX>
<WINBOND>
<flash signature="EF4012" name="W25Q20">
<sreg1>BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0</sreg1>
<sreg2>SRP1,QE,,LB1,LB2,LB3,CMP,SUS</sreg2>
<sreg3>,,WPS,,,DRV0,DRV1,HOLD/RST</sreg3>
</flash>
<flash signature="EF6012" name="W25Q20_1.8V">
<sreg1>BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0</sreg1>
<sreg2>SRP1,QE,,LB1,LB2,LB3,CMP,SUS</sreg2>
<sreg3>,,WPS,,,DRV0,DRV1,HOLD/RST</sreg3>
</flash>
<flash signature="EF4013" name="W25Q40">
<sreg1>BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0</sreg1>
<sreg2>SRP1,QE,,LB1,LB2,LB3,CMP,SUS</sreg2>
<sreg3>,,WPS,,,DRV0,DRV1,HOLD/RST</sreg3>
</flash>
<flash signature="EF6013" name="W25Q40_1.8V">
<sreg1>BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0</sreg1>
<sreg2>SRP1,QE,,LB1,LB2,LB3,CMP,SUS</sreg2>
<sreg3>,,WPS,,,DRV0,DRV1,HOLD/RST</sreg3>
</flash>
<flash signature="EF4014" name="W25Q80">
<sreg1>BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0</sreg1>
<sreg2>SRP1,QE,,LB1,LB2,LB3,CMP,SUS</sreg2>
<sreg3>,,WPS,,,DRV0,DRV1,HOLD/RST</sreg3>
</flash>
<flash signature="EF6014" name="W25Q80_1.8V">
<sreg1>BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0</sreg1>
<sreg2>SRP1,QE,,LB1,LB2,LB3,CMP,SUS</sreg2>
<sreg3>,,WPS,,,DRV0,DRV1,HOLD/RST</sreg3>
</flash>
<flash signature="EF4015" name="W25Q16">
<sreg1>BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0</sreg1>
<sreg2>SRP1,QE,,LB1,LB2,LB3,CMP,SUS</sreg2>
<sreg3>,,WPS,,,DRV0,DRV1,HOLD/RST</sreg3>
</flash>
<flash signature="EF6015" name="W25Q16_1.8V">
<sreg1>BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0</sreg1>
<sreg2>SRP1,QE,,LB1,LB2,LB3,CMP,SUS</sreg2>
<sreg3>,,WPS,,,DRV0,DRV1,HOLD/RST</sreg3>
</flash>
<flash signature="EF4016" name="W25Q32">
<sreg1>BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0</sreg1>
<sreg2>SRP1,QE,,LB1,LB2,LB3,CMP,SUS</sreg2>
<sreg3>,,WPS,,,DRV0,DRV1,HOLD/RST</sreg3>
</flash>
<flash signature="EF6016" name="W25Q32_1.8V">
<sreg1>BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0</sreg1>
<sreg2>SRP1,QE,,LB1,LB2,LB3,CMP,SUS</sreg2>
<sreg3>,,WPS,,,DRV0,DRV1,HOLD/RST</sreg3>
</flash>
<flash signature="EF4017" name="W25Q64FV">
<sreg1>BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0</sreg1>
<sreg2>SRP1,QE,,LB1,LB2,LB3,CMP,SUS</sreg2>
<sreg3>,,WPS,,,DRV0,DRV1,HOLD/RST</sreg3>
</flash>
<flash signature="EF6017" name="W25Q64FW_1.8V">
<sreg1>BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0</sreg1>
<sreg2>SRP1,QE,,LB1,LB2,LB3,CMP,SUS</sreg2>
<sreg3>,,WPS,,,DRV0,DRV1,HOLD/RST</sreg3>
</flash>
<flash signature="EF4018" name="W25Q128FV">
<sreg1>BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0</sreg1>
<sreg2>SRP1,QE,,LB1,LB2,LB3,CMP,SUS</sreg2>
<sreg3>,,WPS,,,DRV0,DRV1,HOLD/RST</sreg3>
</flash>
<flash signature="EF6018" name="W25Q128FW_1.8V">
<sreg1>BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0</sreg1>
<sreg2>SRP1,QE,,LB1,LB2,LB3,CMP,SUS</sreg2>
<sreg3>,,WPS,,,DRV0,DRV1,HOLD/RST</sreg3>
</flash>
<flash signature="EF4019" name="W25Q256FV">
<sreg1>BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0</sreg1>
<sreg2>SRP1,QE,,LB1,LB2,LB3,CMP,SUS</sreg2>
<sreg3>ADS,ADP,WPS,,,DRV0,DRV1,</sreg3>
</flash>
<flash signature="EF6019" name="W25Q256FW_1.8V">
<sreg1>BUSY,WEL,BP0,BP1,BP2,TB,SEC,SRP0</sreg1>
<sreg2>SRP1,QE,,LB1,LB2,LB3,CMP,SUS</sreg2>
<sreg3>ADS,ADP,WPS,,,DRV0,DRV1,</sreg3>
</flash>
<flash signature="EFAA21" name="W25N01GV">
<sreg1>SRP1,WP-E,TB,BP0,BP1,BP2,BP3,SRP0</sreg1>
<sreg2>,,,BUF,ECC-E,SR1-L,OTP-E,OTP-L</sreg2>
<sreg3>BUSY,WEL,E-FAIL,P-FAIL,ECC-0,ECC-1,LUT-F,</sreg3>
</flash>
<flash signature="EFAB21" name="W25N02GV">
<sreg1>SRP1,WP-E,TB,BP0,BP1,BP2,BP3,SRP0</sreg1>
<sreg2>,,,BUF,ECC-E,SR1-L,OTP-E,OTP-L</sreg2>
<sreg3>BUSY,WEL,E-FAIL,P-FAIL,ECC-0,ECC-1,LUT-F,</sreg3>
</flash>
</WINBOND>
<GIGADEVICE>
<flash signature="C84010" name="GD25Q512">
<sreg1>BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0</sreg1>
<sreg2>SRP1,QE,,,,,,</sreg2>
<sreg3>,,,,,,,</sreg3>
</flash>
<flash signature="C84011" name="GD25Q10">
<sreg1>BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0</sreg1>
<sreg2>SRP1,QE,,,,,,</sreg2>
<sreg3>,,,,,,,</sreg3>
</flash>
<flash signature="C84012" name="GD25Q20">
<sreg1>BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0</sreg1>
<sreg2>SRP1,QE,,,,,,</sreg2>
<sreg3>,,,,,,,</sreg3>
</flash>
<flash signature="C84013" name="GD25Q40">
<sreg1>BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0</sreg1>
<sreg2>SRP1,QE,,,,,,</sreg2>
<sreg3>,,,,,,,</sreg3>
</flash>
<flash signature="C84014" name="GD25Q80">
<sreg1>BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0</sreg1>
<sreg2>SRP1,QE,,,,,,</sreg2>
<sreg3>,,,,,,,</sreg3>
</flash>
<flash signature="C84015" name="GD25Q16">
<sreg1>BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0</sreg1>
<sreg2>SRP1,QE,,,,,,</sreg2>
<sreg3>,,,,,,,</sreg3>
</flash>
<flash signature="C84016" name="GD25Q32">
<sreg1>BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0</sreg1>
<sreg2>SRP1,QE,,,,,,</sreg2>
<sreg3>,,,,,,,</sreg3>
</flash>
<flash signature="C84017" name="GD25Q64">
<sreg1>BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0</sreg1>
<sreg2>SRP1,QE,SUS2,LB1,LB2,LB3,CMP,SUS1</sreg2>
<sreg3>,,,,HPF,DRV0,DRV1,</sreg3>
</flash>
<flash signature="C84018" name="GD25Q128">
<sreg1>BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0</sreg1>
<sreg2>SRP1,QE,SUS2,LB1,LB2,LB3,CMP,SUS1</sreg2>
<sreg3>,,,,HPF,DRV0,DRV1,</sreg3>
</flash>
<flash signature="C86017" name="GD25LQ64_1.8V">
<sreg1>BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0</sreg1>
<sreg2>SRP1,QE,SUS2,LB1,LB2,LB3,CMP,SUS1</sreg2>
<sreg3>,,,,,,,</sreg3>
</flash>
<flash signature="C86018" name="GD25LQ128_1.8V">
<sreg1>BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0</sreg1>
<sreg2>SRP1,QE,SUS2,LB1,LB2,LB3,CMP,SUS1</sreg2>
<sreg3>,,,,,,,</sreg3>
</flash>
<flash signature="C86019" name="GD25LQ256_1.8V">
<sreg1>BUSY,WEL,BP0,BP1,BP2,BP3,BP4,SRP0</sreg1>
<sreg2>SRP1,QE,SUS2,EN4B,LB2,LB3,CMP,SUS1</sreg2>
<sreg3>,,,,,,,</sreg3>
</flash>
</GIGADEVICE>
<SST>
<flash signature="FFFFFF" name="default">
<sreg1>BUSY,WEL,BP0,BP1,BP2,BP3,AAI,BPL</sreg1>
<sreg2>,,,,,,,</sreg2>
<sreg3>,,,,,,,</sreg3>
</flash>
</SST>
</FLASH25>
<EEPROM>
<EEP95>
<eep name="default">
<sreg1>BUSY,WEL,BP0,BP1,,,,</sreg1>
</eep>
<eep name="M95M01">
<sreg1>BUSY,WEL,BP0,BP1,,,,SRWD</sreg1>
</eep>
<eep name="M95M02">
<sreg1>BUSY,WEL,BP0,BP1,,,,SRWD</sreg1>
</eep>
</EEP95>
<EEP45DB>
</EEP45DB>
</EEPROM>
</StatusBits>

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -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"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

View file

@ -0,0 +1,34 @@
This file has been downloaded from khandishnetwork.com
For More Software and Video Tutorials visit our website and youtube channel:
### khandishnetwork.com ###
ANDROID APP: https://play.google.com/store/apps/details?id=com.softwarebox.app
Youtube Channel:
https://www.youtube.com/Ikram dirujii
Facebook Page:
https://facebook.com/groups/khandishnetwork
)|(
(o o)
+-------------------------------ooO--(_)--oo-------------------------------------+
| |
| |
| All the files available on khandishnetwork.com are kept for educational |
| purpose only! |
| Nobody is responsible for any of the files stored on khandishnetwork.com, |
| their content can damage your system! |
| |
+--------------------------------------------------------------------------------+

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View file

@ -0,0 +1,8 @@
kb9012 -> UsbAsp
59 EDI_CS -> CS(RST)
60 EDI_CLK -> SCK
61 EDI_DIN -> MOSI
62 EDI_DO -> MISO
42 TP_PLL_LOCK -> GND

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

1002
AsProgrammer/chiplist.xml Normal file

File diff suppressed because it is too large Load diff

681
AsProgrammer/lang/en.po Normal file
View file

@ -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 ="

681
AsProgrammer/lang/fr.po Normal file
View file

@ -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 dune 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 ="

681
AsProgrammer/lang/ru.po Normal file
View file

@ -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 "Секция ="

BIN
AsProgrammer/libusb0.dll Normal file

Binary file not shown.

View file

@ -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

View file

@ -0,0 +1,456 @@
1. Description
-------------------
The module PASCALC.DCU is the Pascal-like language interpreter for Delphi.
The basic differences from standard Pascal the following:
- All variables stored as variants.
- It's no need to declare variables, labels and functions. PASCALC creates
variables dynamically on first assignment. Variable type depends on the
last value assigned, type checking is not carried out.
- Expressions syntax:
Arithmetic operators: +, -, *, /, ^ (power), SHL, SHL
Bitwise operators: BITOR,BITAND,BITXOR,BITNOT
Logical operators: >, <, >=, <=, =, <>, AND, OR, NOT,
constants TRUE and FALSE.
Operators precedence standard, you can use parentheses.
- Statements supported:
BEGIN... END
IF... THEN... ELSE
CASE
FOR... TO/DOWNTO... DO
WHILE... DO
REPEAT... UNTIL
BREAK
CONTINUE
GOTO
EXIT
USES
INCLUDE
- All reserved words are declared in interface section as string array.
You can change them to anyone others. All identifiers should be different
(except assignment and equation, they may be the same).
- Multi-dimensional arrays supported. Array items are variables whose names
consist from array name and indexes (in brackets). Array items properties
same as the simple variables. It's no need to declare arrays. Array index
continuity is not requred. It's possible to access string as char array.
You can assign chars or numbers in range 0..255 to string characters.
Array name should be unique, simple variable MyArr and array item MyArr[1]
can't exist at the same time. This rule allows to distinguish access to
1-st character of string variable MyArr (MyArr[1]) from the accees to
the first item of array MyArr. To access character of string array item,
character index should be written in brackets after item name, for example
MyArr[1,2][3].
- All build-in functions are user-defined. Module pasfunc.pas contain
example of PASCALC implementations for common Delphi functions. You can use
this functions and write your own implementations for necessary functions.
There is no need to declare parameters for user-defined functions, therefore
it's types and amount are not limited. If necessary you can provide type
checking inside function code. Interpreter calculates all parameter values
and creates temporary values list (TVarList). Names of var-parameters in this
list are 'VAR', otherwise 'VALUE'. After function call interpreter updates
values for var-parameters. Function result type not checked, one function can
return number as well as string. Functions can be called as procedures (without
result usage).
- Procedures and functions (in sense of the subroutines on interpreter language)
are supported. The function heading specifies only names of formal parameters,
without parameters types and pass method (var or value). Also, function's result
types are not declared. To return function result you should assign value to
variable "result".
If actual parameter is variable (not expression), it considered as var-parameter.
In this case assigning new value to this parameter inside procedure or function
will affect the actual parameter variable.
At the same time, all interpreter global variables inside a function or procedures
looks like local variables, with the same initial values as global ones.
You can change this values inside procedures (functions), but it's don't affect
the global variables. All new variables created inside procedures and functions
are local, and will be destroyed after exiting.
Therefore, it is possible to use any names for local variables, without conflicts
with the global variables.
For libraries implementation, it is possible to use operators USES and INCLUDE.
Syntax: USES 'filename';
INCLUDE 'filename';
INCLIDE and USES are parsed by pre-processor before script execution.
INCLUDE inserts text from file 'filename' into the script, USES loads
procedures and functions declarations.
2. License
----------
This software is provided as it is, without any kind of warranty given.
The author can not be held responsible for any kind of damage, problems etc,
arised from using this software. PASCALC interpreter is shareware product.
Unregistered version has no time or functionality limitations, but can
show info screen.
If you want get source code, you should register PASCALC and get registration code.
Use your registration code as password for source archive (Source\pascsrc.zip).
Address for online registration (price $20):
https://www.regnow.com/softsell/nph-softsell.cgi?item=2608-2
You can modify PASCALC source code as you need, distribute executable files
compiled with PASCALC source. But you can't distribute original or modified
PASCALC source code, .DCU units or libraries based on PASCALC source code.
3. PASCALC inteface
-------------------
unit pascalc;
{$F+,B-,R-}
interface
uses
Windows, Messages, SysUtils, Classes, Math;
type TToken =
(tEMPTY, tVR, tCON, tTRUE, tFALSE,
tEQU, tOR, tAND, tNOT, tXOR,
tCOMMA, tLBL, tNEQ, tGT, tLS,
tGTE, tLSE, tADD, tSUB, tMUL,
tDIV, tPWR, tLBR, tRBR, tLARR,
tRARR, tSEMI, tREM, tREMB, tREME,
tASSIGN, tBEGIN, tEND, tIF, tTHEN,
tELSE, tFOR, tTO, tDOWNTO, tDO,
tWHILE, tREPEAT, tUNTIL, tBREAK, tCONTINUE,
tEXIT, tGOTO, tSHL, tSHR, tPROC,
tFUNCT, tUSES, tINCLUDE, tCASE, tOF,
tCOMMA2);
type TTokenSet = set of TToken;
const
ResWords : array[TToken] of string[10] =
('', '', '', 'TRUE', 'FALSE',
'=', 'OR', 'AND', 'NOT', 'XOR',
',', ':', '<>', '>', '<',
'>=', '<=', '+', '-', '*',
'/', '^', '(', ')', '[',
']', ';', '//', '{', '}',
':=', 'BEGIN', 'END', 'IF', 'THEN',
'ELSE', 'FOR', 'TO', 'DOWNTO', 'DO',
'WHILE', 'REPEAT', 'UNTIL', 'BREAK', 'CONTINUE',
'EXIT', 'GOTO', 'SHL', 'SHR', 'PROCEDURE',
'FUNCTION', 'USES', 'INCLUDE', 'CASE', 'OF',
'..');
const
Alpha : set of char = ['_','0'..'9','a'..'z','A'..'Z','à'..'ÿ','¸','À'..'ß','¨'];
StrDelimiter : char = '''';
DecimalPoint : char = '.';
TokenDelimiter : char = #127;
type TVar = record
Name : string;
Value : variant;
end;
type TPVar = ^TVar;
type TVarList = class (TList)
destructor Destroy; override;
procedure ClearAll;
function AddVar(V:TVar) : boolean;
function AddValue(N:string; V:variant) : boolean;
function VarExist(N:string):boolean;
function VarIndex(N:string):integer;
function VarByName(N:string;var V:TVar) : boolean;
function SetVar(V:TVar) : boolean;
function SetValue(N:string; V:variant) : boolean;
procedure CopyTo(VL:TVarList);
end;
type TPVarList = ^TVarList;
type PProcessProc = procedure;
type PFunction = function(Sender:TObject; var A:TVarList; var R:TVar) : boolean;
type TFunc = record
Name : string;
Func : Pointer;
end;
type TPFunc = ^TFunc;
type TFuncList = class (TList)
destructor Destroy; override;
procedure ClearAll;
function AddFunction(N:string; F:Pointer) : boolean;
end;
type TProcedure = record
Name : string;
Body : string;
Params : string;
Result : boolean;
end;
type TPProcedure = ^TProcedure;
type TProcList = class(TList)
destructor Destroy; override;
procedure ClearAll;
function AddProc(Proc:TProcedure):boolean;
function ProcIndex(Name:string):integer;
function ProcByName(Name:string; var Proc:TProcedure):boolean;
end;
type TPasCalc = class
constructor Create;
destructor Destroy; override;
procedure ClearVars;
function VarCount : integer;
function VarIndex(N:string) : integer;
function VarByName(N:string; var V:TVar) : boolean;
function VarByIndex(I:integer; var V:TVar) : boolean;
function SetVar(V:TVar) : boolean;
function SetValue(N:string; V:variant):boolean;
procedure ClearFuncs;
function SetFunction(N:string; F:Pointer) : boolean;
procedure SetProcessProc(P:Pointer);
function Parse(S:string) : string;
function Calculate(S:string; var R:TVar) : boolean;
function Execute(S:string):boolean;
private
Expr : string;
ExprIndex : integer;
Token : string;
TokenCode : TToken;
BlockLevel : integer;
BlockCmd : TToken;
GotoLabel : string;
VarList : TVarList;
FuncList : TFuncList;
ProcList : TProcList;
ProcessProc : PProcessProc;
LastString : string;
LastParsed : string;
procedure Clear;
procedure Process;
procedure Error(Msg,Line:string; Code:integer);
procedure Level1(var R:TVar);
procedure Level2(var R:TVar);
procedure Level3(var R:TVar);
procedure Level4(var R:TVar);
procedure Level5(var R:TVar);
procedure Level6(var R:TVar);
procedure Level7(var R:TVar);
procedure Level8(var R:TVar);
procedure Arith(o : TToken; var R,H:TVar);
procedure Unary(o : TToken; var R:TVar);
function GetIndex(S:string; var Index:integer; var T:TToken) : string;
function GetFuncParams(S:string; var Index:integer) : string;
function FindFunc(N:string) : integer;
function FindArray(N:string) : boolean;
procedure SetVarDirect(var R:TVar);
function CallFunc(N:string; A:string; var V:TVar) : boolean;
function CallProc(N:string; A:string; var V:TVar) : boolean;
function GetTextToken(S: string; var Index : integer; var Code : TToken) : string;
function TokenStr(T:TToken;S:string) : string;
function GetToken(S:string; var Index : integer; var Code : TToken) : string;
function GetTokenCode(S: string; var Index:integer; var Code:TToken) : integer;
function GetTokenLine(S:string; var Index:integer; var Code:TToken;
StopToken:TTokenSet) : string;
function NextToken(S:string; Index:integer) : TToken;
function GetOperator(Txt:string; var Index : integer; EndToken:TTokenSet) : string;
function ParseOperator(Txt:string; var Cmd,Line,Lbl : string) : TToken;
function DelRemarks(S:string) : string;
function UnParse(S:string; Show:boolean) : string;
function PreProcess(Txt:string):string;
function Calc(S:string; var R:TVar) : boolean;
procedure Exec(Txt:string);
procedure DoSet(CmdLine,Cmd,Line:string);
procedure DoIf(CmdLine,Line:string);
procedure DoBegin(CmdLine,Line:string);
procedure DoFor(CmdLine,Line:string);
procedure DoBreak(CmdLine,Line:string);
procedure DoContinue(CmdLine,Line:string);
procedure DoExit(CmdLine,Line:string);
procedure DoWhile(CmdLine,Line:string);
procedure DoRepeat(CmdLine,Line:string);
procedure DoGoto(CmdLine,Line:string);
procedure DoCase(CmdLine,Line:string);
public
Stop : boolean;
ErrCode : integer;
ErrMsg : string;
ErrLine : string;
end;
4. Functions (unit PASFUNC.PAS)
------------------------------
// String functions
Val
IntToStr
StrToInt
FloatToStr
StrToFloat
Copy
Pos
Length
Insert
Delete
Trim
TrimLeft
TrimRight
UpperCase
LowerCase
Format
// DateTime functions
Now
Date
Time
DateToStr
StrToDate
TimeToStr
StrToTime
FormatDateTime
DayOfWeek
IncMonth
DecodeDate
DecodeTime
EncodeDate
EncodeTime
YearDays
YearFrac
// Math functions
Abs
Int
Frac
Round
Ceil
Floor
Trunc
Sin
Cos
Tan
ArcSin
ArcCos
ArcTan
Exp
Ln
IntPower
Sqr
Sqrt
Min
Max
Inc
Dec
// Variable handling functions.
// Allows get or set variable value by calculated variable name.
SetVar
GetVar
// Misc functions
Decode (simular with the Oracle Decode function)
5. Interpreter usage
--------------------
See usage example in demo program (demo.dpr). At first you should write
user-defined functions you want to use in scripts and expressions. Function
should set result value (field Value of variable R:TVar) and return true.
On errors (wrong parameters, etc) function should return false. In your
program you should create an instance of TPasCalc class.
Then associate functions with names (TPasCalc.SetFunction).
To register pasfunc.pas function library, call SetFunctions.
You can set predefined variables (TPasCalc.SetVarNum or TPasCalc.SetVarStr).
Method TPasCalc.Calculate evaluates expression and returns result in variable
R:TVar. Method TPasCalc.Execute executes script and fills variable list.
You can access variables using TPasCalc.VarCount, TPasCalc.VarByIndex or
TPasCalc.VarByName methods. TPasCalc.ErrCode, TPasCalc.ErrMsg and
TPasCalc.ErrLine indicates last error code, error message and line that
raises error. Variable list not cleared in Calculate and Execute methods.
You can reset all variables using TPasCalc.ClearVars. TPasCalc.ClearFuncs
resets function list. Method TPasCalc.SetProcessProc sets pointer to
user-defined callback procedure. Interpreter calls this procedure in internal
cycles. In this procedure you can check some condition (timeout for example)
and break execution by assigning TPasCalc.Stop:=TRUE. It is useful to call
Application.ProcessMessages in this procedure. If callback procedure not
assigned, interpreter uses Process method instead. Process method performs
only messages processing.
To improve perfomance you can prepare script using Parse method, and then
execute previously prepared script.
6. Error codes
--------------
0 - O.K.
1 - Error in expression
2 - Unpaired parentheses
3 - Variable not found
4 - Invalid variable/function/procedure name
5 - Invalid typecast
6 - Invalid string constant
7 - Incorrect function call
8 - Function not found
9 - Invalid operator
10 - END expected
11 - Too many END
12 - TO or DOWNTO expected
13 - FOR-loop variable expected
14 - DO expected
15 - BREAK outside a loop
16 - UNTIL expected
17 - Too many UNTIL
18 - Label not found
19 - Index out of range
20 - Value out of range
21 - ']' expected
22 - Too many '['
23 - Division by zero
24 - Variable or array name duplicated
25 - File îpen error
26 - Function must return result
27 - CASE without OF
28 - Too many ELSE in CASE statement
29 - Case range expected
7. Author
---------
Alex Boiko
alexboiko@mtu-net.ru
http://alexboiko.da.ru
http://alexboiko.chat.ru

View file

@ -0,0 +1,463 @@
1. Описание
-----------
Модуль pascalc.dcu представляет собой интерпретатор Pascal - подобного
языка для Delphi. Основные отличия его от стандартного Паскаля следующие:
- Для значений переменных используеися тип Variant, что позволяет хранить
разнообразные типы данных.
- Переменные обьявлять не надо, они при небходимости создаются динамически
при присваивании им значений. Тип определяется по последнему присвоенному
значению, типовый контроль при присваивании не выполняется. То есть если
существующей числовой переменной присвоить строку, ее тип изменится.
Символам строки можно присваивать числовые значения в диапазоне 0..255 или
символы (строки длиной 1).
- В выражениях поддерживаются следующие операции:
арифметические: +, -, *, /, ^ (возведение в степень), SHL, SHR
операции с битами: BITOR,BITAND,BITXOR,BITNOT
логические: >, <, >=, <=, =, <>, AND, OR, NOT, константы TRUE и FALSE.
Tакже можно использовать скобки. Порядок выполненния операций стандартный.
- В интерпретаторе поддерживаются операторы:
BEGIN ... END
IF ... THEN ... ELSE
CASE
FOR ... TO/DOWNTO ... DO
WHILE ... DO
REPEAT ... UNTIL
CONTINUE
BREAK
GOTO
EXIT
USES
INCLUDE
- Все зарезервированные слова объявлены в interface как массив строк.
При желании вы можете изменить их на любые другие, например сделать
русскими. Допускаются одинаковые операторы присваивания и равенства.
Интерпретатор может сам различать их в зависимости от контекста. Все
остальные зарезервированные слова должны отличаться друг от друга.
- Поддерживаются многомерные массивы, которые хранятся как набор переменных.
Имена таких переменных состоят из имени массива и индексов в квадратных
скобках. Имя массива должно быть уникальным, не допускается одновременное
существование обычной переменной и переменной массива с тем же именем.
(например переменная с именем MyArr и элемент массива MyArr[1]).
Так как элементы массивов хранятся как обычные переменные, на них
распространяются все правила применимые к обычным переменнм. Массивы не надо
обьявлять, элементы одного массива могут хранить как строки так и числа.
Для диапазона индексов массивов нет никаких ограничений. Непрерывность
элементов массива также не обязательна. Чтобы создать непрерывную
последовательность элементов массива им надо просто присвоить (например в цикле)
какие - либо значения. Кроме того, к символам строк можно обращаться как к
массиву символов. Так например MyArr[1][2] значит обрашение ко 2-му символу
1-й строки массива MyArr. Запись MyArr[1] может значить либо первый символ
обычной строковой переменной MyArr, либо первый элемент массива. Но так как
элемент массива и переменная с таким же именем одновременно существовать не могут,
неоднозначность не возникает.
- Все встроенные функции интерпретатора user-defined. Mодуль pasfunc.pas содержит
библиотеку в которую включены аналоги многих функций Delphi. Пример ее
использования есть в demo-программе. Вы можете использовать эту библиотеку,
дополнив при необходимости любым количеством своих функций снужными вам
параметрами. Параметры функций заранее не описываются, поэтому их количество
и типы ничем не ограничены (подобно процедуре write паскаля). Интерпретатор
вычисляет все параметры конкретного вызова и передает их функции как список
значений. При необходимости вы можете реализовать типовый контроль внутри
своей реализации функции. Если в качестве параметра функции передается
переменная интерпретатора, этот пареметр считается VAR-параметром, и его
изменение в коде функции вызовет изменение значения соответствующей переменной
интерпретатора. Тип возвращаемого функцией значения тоже может быть разным при
разных параметрах вызова. В модуле pasfunc.pas есть пример реализации таких
функций (ф-ции Max, Min). Функции можно вызывать как процедуры, не используя
возвращаемое значение.
- Поддерживаются процедуры и функции на языке интерпретатора. В списке параметров
процедур и функций необходимо только перечислить имена формальных параметров.
Типы параметров и способ передачи указывать не надо, также в объявлении функций
не надо указывать тип возвращаемого значения. Для возврата значения функции
используется переменная "result". Если в качестве параметра функции или процедуры
передается глобальная переменная интерпретатора, этот параметр для данного вызова
считается VAR-параметром и его изменение внутри функции изменит значение
глобальной переменной. В то же время все глобальные переменные интерпретатора
внутри функции или процедуры ведут себя, как локальные переменные, которым
присвоены начальные значения совпадающие со значениями одноименных глобальных
переменных. Их значения доступны в процедурах и функциях, их можно изменить,
но после выхода из процедуры или функции значение глобальной переменной не
изменится. Все новые переменные, созданные внутри процедур и функций являются
локальными, и после выхода из процедуры/функции исчезнут. Таким образом, в
процедурах и функциях можно использовать любые имена для локальных переменных,
не опасаясь что они совпадут с именами глобальных переменных.
Для реализации библиотек процедур можно использовать операторы USES и INCLUDE.
Их синтаксис : USES 'имя файла';
INCLUDE 'имя файла';
Операторы USES и INCLUDE обрабатываются препроцессором, до начала выполнения
скрипта. Оператор INCLUDE вставляет в скрипт текст из файла. Оператор USES
только загружает реализации процедур и функций, чтобы их можно было
использовать при выполнении скрипта.
2. Лицензия.
------------
Интерпретатор PASCALC распространяется по принципу "как есть".
При этом не предусматривается никаких гарантий, явных или подразумеваемых.
Вы используете его на свой собственный риск. Автор не отвечает за потери
данных, повреждения, потери прибыли или любые другие виды потерь, связанные
с использованием (правильным или неправильным) этого программного продукта.
http://alexboiko.da.ru
http://alexboiko.chat.ru
3. Интерфейс модуля интерпретатора:
-----------------------------------
unit pascalc;
{$F+,B-,R-}
interface
uses
Windows, Messages, SysUtils, Classes, Math;
type TToken =
(tEMPTY, tVR, tCON, tTRUE, tFALSE,
tEQU, tOR, tAND, tNOT, tXOR,
tCOMMA, tLBL, tNEQ, tGT, tLS,
tGTE, tLSE, tADD, tSUB, tMUL,
tDIV, tPWR, tLBR, tRBR, tLARR,
tRARR, tSEMI, tREM, tREMB, tREME,
tASSIGN, tBEGIN, tEND, tIF, tTHEN,
tELSE, tFOR, tTO, tDOWNTO, tDO,
tWHILE, tREPEAT, tUNTIL, tBREAK, tCONTINUE,
tEXIT, tGOTO, tSHL, tSHR, tPROC,
tFUNCT, tUSES, tINCLUDE, tCASE, tOF,
tCOMMA2);
type TTokenSet = set of TToken;
const
ResWords : array[TToken] of string[10] =
('', '', '', 'TRUE', 'FALSE',
'=', 'OR', 'AND', 'NOT', 'XOR',
',', ':', '<>', '>', '<',
'>=', '<=', '+', '-', '*',
'/', '^', '(', ')', '[',
']', ';', '//', '{', '}',
':=', 'BEGIN', 'END', 'IF', 'THEN',
'ELSE', 'FOR', 'TO', 'DOWNTO', 'DO',
'WHILE', 'REPEAT', 'UNTIL', 'BREAK', 'CONTINUE',
'EXIT', 'GOTO', 'SHL', 'SHR', 'PROCEDURE',
'FUNCTION', 'USES', 'INCLUDE', 'CASE', 'OF',
'..');
const
Alpha : set of char = ['_','0'..'9','a'..'z','A'..'Z','а'..'я','ё','А'..'Я','Ё'];
StrDelimiter : char = '''';
DecimalPoint : char = '.';
TokenDelimiter : char = #127;
type TVar = record
Name : string;
Value : variant;
end;
type TPVar = ^TVar;
type TVarList = class (TList)
destructor Destroy; override;
procedure ClearAll;
function AddVar(V:TVar) : boolean;
function AddValue(N:string; V:variant) : boolean;
function VarExist(N:string):boolean;
function VarIndex(N:string):integer;
function VarByName(N:string;var V:TVar) : boolean;
function SetVar(V:TVar) : boolean;
function SetValue(N:string; V:variant) : boolean;
procedure CopyTo(VL:TVarList);
end;
type TPVarList = ^TVarList;
type PProcessProc = procedure;
type PFunction = function(Sender:TObject; var A:TVarList; var R:TVar) : boolean;
type TFunc = record
Name : string;
Func : Pointer;
end;
type TPFunc = ^TFunc;
type TFuncList = class (TList)
destructor Destroy; override;
procedure ClearAll;
function AddFunction(N:string; F:Pointer) : boolean;
end;
type TProcedure = record
Name : string;
Body : string;
Params : string;
Result : boolean;
end;
type TPProcedure = ^TProcedure;
type TProcList = class(TList)
destructor Destroy; override;
procedure ClearAll;
function AddProc(Proc:TProcedure):boolean;
function ProcIndex(Name:string):integer;
function ProcByName(Name:string; var Proc:TProcedure):boolean;
end;
type TPasCalc = class
constructor Create;
destructor Destroy; override;
procedure ClearVars;
function VarCount : integer;
function VarIndex(N:string) : integer;
function VarByName(N:string; var V:TVar) : boolean;
function VarByIndex(I:integer; var V:TVar) : boolean;
function SetVar(V:TVar) : boolean;
function SetValue(N:string; V:variant):boolean;
procedure ClearFuncs;
function SetFunction(N:string; F:Pointer) : boolean;
procedure SetProcessProc(P:Pointer);
function Parse(S:string) : string;
function Calculate(S:string; var R:TVar) : boolean;
function Execute(S:string):boolean;
private
Expr : string;
ExprIndex : integer;
Token : string;
TokenCode : TToken;
BlockLevel : integer;
BlockCmd : TToken;
GotoLabel : string;
VarList : TVarList;
FuncList : TFuncList;
ProcList : TProcList;
ProcessProc : PProcessProc;
LastString : string;
LastParsed : string;
procedure Clear;
procedure Process;
procedure Error(Msg,Line:string; Code:integer);
procedure Level1(var R:TVar);
procedure Level2(var R:TVar);
procedure Level3(var R:TVar);
procedure Level4(var R:TVar);
procedure Level5(var R:TVar);
procedure Level6(var R:TVar);
procedure Level7(var R:TVar);
procedure Level8(var R:TVar);
procedure Arith(o : TToken; var R,H:TVar);
procedure Unary(o : TToken; var R:TVar);
function GetIndex(S:string; var Index:integer; var T:TToken) : string;
function GetFuncParams(S:string; var Index:integer) : string;
function FindFunc(N:string) : integer;
function FindArray(N:string) : boolean;
procedure SetVarDirect(var R:TVar);
function CallFunc(N:string; A:string; var V:TVar) : boolean;
function CallProc(N:string; A:string; var V:TVar) : boolean;
function GetTextToken(S: string; var Index : integer; var Code : TToken) : string;
function TokenStr(T:TToken;S:string) : string;
function GetToken(S:string; var Index : integer; var Code : TToken) : string;
function GetTokenCode(S: string; var Index:integer; var Code:TToken) : integer;
function GetTokenLine(S:string; var Index:integer; var Code:TToken;
StopToken:TTokenSet) : string;
function NextToken(S:string; Index:integer) : TToken;
function GetOperator(Txt:string; var Index : integer; EndToken:TTokenSet) : string;
function ParseOperator(Txt:string; var Cmd,Line,Lbl : string) : TToken;
function DelRemarks(S:string) : string;
function UnParse(S:string; Show:boolean) : string;
function PreProcess(Txt:string):string;
function Calc(S:string; var R:TVar) : boolean;
procedure Exec(Txt:string);
procedure DoSet(CmdLine,Cmd,Line:string);
procedure DoIf(CmdLine,Line:string);
procedure DoBegin(CmdLine,Line:string);
procedure DoFor(CmdLine,Line:string);
procedure DoBreak(CmdLine,Line:string);
procedure DoContinue(CmdLine,Line:string);
procedure DoExit(CmdLine,Line:string);
procedure DoWhile(CmdLine,Line:string);
procedure DoRepeat(CmdLine,Line:string);
procedure DoGoto(CmdLine,Line:string);
procedure DoCase(CmdLine,Line:string);
public
Stop : boolean;
ErrCode : integer;
ErrMsg : string;
ErrLine : string;
end;
4. Функции (unit PASFUNC.PAS)
------------------------------
// Функции для работы со строками
Val
IntToStr
StrToInt
FloatToStr
StrToFloat
Copy
Pos
Length
Insert
Delete
Trim
TrimLeft
TrimRight
UpperCase
LowerCase
Format
// Функции для работы с датой и временем
Now
Date
Time
DateToStr
StrToDate
TimeToStr
StrToTime
FormatDateTime
DayOfWeek
IncMonth
DecodeDate
DecodeTime
EncodeDate
EncodeTime
// Математические функции
Abs
Int
Frac
Round
Ceil
Floor
Trunc
Sin
Cos
Tan
ArcSin
ArcCos
ArcTan
Exp
Ln
IntPower
Sqr
Sqrt
Min
Max
Inc
Dec
// Функции PASCALC для работы с переменными.
// Позволяют обращаться к переменной по вычисляемому имени.
SetVar
GetVar
5. Использование интерпретатора
-------------------------------
Пример использования есть в demo-программе. В скриптах интерпретатора вы
можете использовать готовую библиотеку функций из модуля pasfunc.pas, или
напиcать собственную реализацию нужных вам функций, которых нет в библиотеке.
Функция должна записать результат в поле Value переменной R:TVar и вернуть true.
В случае ошибки (например при вызове с недопустимыми параметрами) функция
должна вернуть false.
Потом создайте экземпляр класса TPasCalc. С помошью метода SetProcessProc
можно задать указатель на процедуру которая будет регулярно вызываться в
циклах интерпретатора. С ее помощью можно например реализовать таймаут.
Если вы задали такую процедуру, то в ней стоит предусмотреть вызов обработчика
сообщений (Application.ProcessMessages например). Если ее не задали, то вместо
нее будет использоваться метод Process, в котором предусмотрена обработка сообщений.
Затем вызовами TPasCalc.SetFunction надо зарегистрировать функции которые вы
хотите использовать и задать им имена. В модуле pasfunc.pas регистрация делается
вызовом процедуры SetFunctions. Также можно задать предопределенные переменные
вызовами SetVarNum или SetVarStr.
Метод Calculate вычисляет значение математического выражения и возвращает
результат в переменной R:TVar, а метод Execute выполняет текст скрипта и
заполняет список переменных. С помощью методов VarCount, VarByIndex или
VarByName вы можете получить их значения. При возникновении ошибок их код
возврашается в ErrCode. В ErrMsg и ErrLine возвращается сообщение об ошибке
и строка ее вызвавшая.
При следуюших вызовах Calculate и Execute список переменных не очищается и
их значения можно использовать в выражениях. При желании вы можете сами
очистить список переменных вызвав ClearVars. Очистить список функций можно с
помощью ClearFuncs. Если возникла необходимость принудительно прервать
интерпретацию, надо присвоить значение true перменной TPasCalc.Stop.
Чтобы ускорить выполнение скриптов их можно предварительно подготовить
с помощью метода Parse, который возвращает разобранную строку.
Ее можно сохранить и затем выполнять теми же методами Calculate и Execute.
6. Коды ошибок (ErrCode)
------------------------
0 - O.K.
1 - ошибка в выражении
2 - непарные скобки
3 - переменная не найдена
4 - недопустимое имя переменной или функции
5 - неверный тип операнда
6 - невернaя строковая константе
7 - неверный вызов функции
8 - функция не найдена
9 - неизвестный оператор
10 - нехватает END
11 - лишний END
12 - нехватает TO или DOWNTO
13 - нет переменной цикла
14 - нехватает DO
15 - BREAK вне цикла
16 - нехватает UNTIL
17 - лишний UNTIL
18 - метка не найдена
19 - индекс за границей диапазона
20 - значение за границей диапазона
21 - нехватает ']'
22 - нехватает '['
23 - деление на 0
24 - Дублируется имя переменной/массива
25 - Ошибка открытия файла
26 - Функция должна возвращать значение
27 - нет OF в операторе CASE
28 - несколько ELSE в операторе CASE
29 - неверный диапазон значений в операторе CASE
7. Автор:
---------
Алексей Бойко
alexboiko@mtu-net.ru
http://alexboiko.da.ru

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,242 @@
<html lang="ru">
<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Content-Language" content="ru"> </head>
<table border="1" cellpadding="5" cellspacing="0">
<tbody>
<tr>
<td colspan="2" style="text-align: center;"><font size="5"><b>Секции</b></font></td>
</tr>
<tr>
<td style="text-align: center;"><b>{$read}</b></td>
<td>Код секции выполняется при нажатии кнопки чтении памяти</td>
</tr>
<tr>
<td style="text-align: center;"><b>{$write}</b></td>
<td>Код секции выполняется при нажатии кнопки записи памяти</td>
</tr>
<tr>
<td style="text-align: center;"><b>{$erase}</b></td>
<td>Код секции выполняется при нажатии кнопки стирания памяти</td>
</tr>
<tr>
<td style="text-align: center;"><b>{$verify}</b></td>
<td>Код секции выполняется при нажатии кнопки сравнения памяти</td>
</tr>
<tr>
<td style="text-align: center;"><b>{$unlock}</b></td>
<td>Код секции выполняется при нажатии кнопки снятия защиты</td>
</tr>
<tr>
<td colspan="2" style="text-align: center;"><font size="5"><b>Предопределенные переменные</b></font></td>
</tr>
<tr>
<td style="text-align: center;"><b>_IC_Name</b></td>
<td>Название текущей выбранной микросхемы&nbsp;</td>
</tr>
<tr>
<td style="text-align: center;"><b>_IC_Size</b></td>
<td>Размер, в байтах, текущей выбранной микросхемы</td>
</tr>
<tr>
<td style="text-align: center;"><b>_IC_Page</b></td>
<td>Размер&nbsp;страницы,&nbsp;в байтах,&nbsp;текущей выбранной микросхемы&nbsp;</td>
</tr>
<tr>
<td style="text-align: center;"><b>_SPI_SPEED_MAX</b></td>
<td>Максимально возможная частота для&nbsp;<b style="text-align: center;">SPISetSpeed</b></td>
</tr>
<tr>
<td colspan="2" style="text-align: center;"><b><font size="5">Основные функции</font></b></td>
</tr>
<tr>
<td style="text-align: center;"><b>ShowMessage(<font color="#0000FF">text</font>);</b></td>
<td style="text-align: center;">
<p align="left">Аналог ShowMessage</p>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>LogPrint(<font color="#0000FF">text</font>, <font color="#0000FF">color</font>);</b></td>
<td style="text-align: center;">
<p align="left">Выводит сообщение в лог<br>
Параметры:<br>
&nbsp;&nbsp; <b><font color="#0000FF">text</font></b> текст сообщения<br>
Необязательные параметры:<br>
&nbsp;&nbsp;<b style="text-align: center; color: #0000ff;">color&nbsp;</b>цвет bgr</p>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>IntToHex(<font color="#0000FF">value</font>, <font color="#0000FF">digits</font>): string;</b></td>
<td style="text-align: center;">
<p align="left">&nbsp;Аналог IntToHex</p>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>ProgressBar(<font color="#0000FF">inc</font>, <font color="#0000FF">max</font>, <font color="#0000FF">pos</font>);</b></td>
<td style="text-align: center;">
<p align="left">&nbsp;Устанавливает состояние ProgressBar<br>
Параметры:<br>
&nbsp;&nbsp; <b><font color="#0000FF">inc </font></b>насколько увиличить позицию<br>
Необязательные параметры:<br>
&nbsp;&nbsp; <font color="#0000FF"><b>max</b></font> максимальная позиция ProgressBar<br>
&nbsp;&nbsp; <font color="#0000FF"><b>pos</b></font> устанавливает конкретную позицию ProgressBar</p>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>CreateByteArray(<font color="#0000FF">size</font>): variant;</b></td>
<td style="text-align: center;">
<p align="left">Создает массив с типом элементов varbyte</p>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>GetArrayItem(<font color="#0000FF">array</font>, <font color="#0000FF">index</font>): variant;</b></td>
<td style="text-align: center;">
<p align="left">Возвращает значение элемента массива</p>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>SetArrayItem(<font color="#0000FF">array</font>, <font color="#0000FF">index</font>, <font color="#0000FF">value</font>);</b></td>
<td style="text-align: center;">
<p align="left">Устанавливает значение элемента массива</p>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>ReadToEditor(<font color="#0000FF">size</font>, <font color="#0000FF">position</font>, <font color="#0000FF">buffer, ...</font>);</b></td>
<td style="text-align: center;">
<p align="left">Записывает данные из буфера в редактор размером size в позицию position</p>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>WriteFromEditor(<font color="#0000FF">size</font>, <font color="#0000FF">position</font>, <font color="#0000FF">buffer, ...</font>);</b></td>
<td style="text-align: center;">
<p align="left">Записывает данные из редактора размером size с позиции position</p>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>GetEditorDataSize: longword;</b></td>
<td style="text-align: center;">
<p align="left">Возвращает размер данных в редакторе</p>
</td>
</tr>
<tr>
<td colspan="2" style="text-align: center;"><font size="5"><b>Работа с SPI</b></font></td>
</tr>
<tr>
<td style="text-align: center;"><b>SPIEnterProgMode(<font color="#0000FF">speed</font>): boolean;</b></td>
<td>
<p>Инициализирует состояние пинов для SPI и устанавливает частоту SPI &nbsp;<br>
&nbsp; Параметры:<br>
&nbsp; &nbsp; <font color="#0000FF"><b>speed</b></font><br>
&nbsp; &nbsp; <b>_SPI_SPEED_MAX</b>&nbsp;= AvrIsp 8(4) MHz / USbAsp 3 MHz<br>
&nbsp;Если частота не установлена возвращает false<br>
&nbsp;Игнорируется для устройств с фиксированной частотой</p>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>SPIExitProgMode();</b></td>
<td>
<p>Отключает пины SPI</p>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>SPIRead(<font color="#0000FF">cs</font>, <font color="#0000FF">size</font>, <font color="#0000FF">buffer</font></b><b>, ...</b><b>): integer;</b></td>
<td>
<p>Читает данные в буфер&nbsp;&nbsp;<br>
&nbsp;&nbsp; Параметры:&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; <font color="#0000FF"><b>cs</b></font> если <font color="#0000FF"><b>cs</b></font>=1 отпускать Chip Select после чтения данных&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; <font color="#0000FF"><b>size </b></font>размер данных в байтах&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; <font color="#0000FF"><b>buffer</b></font> переменные для хранения данных или массив созданный <b>CreateByteArray</b>&nbsp;&nbsp;<br>
&nbsp;&nbsp; Возвращает количество прочитанных байт</p>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>SPIWrite(<font color="#0000FF">cs</font>, <font color="#0000FF">size</font>, <font color="#0000FF">buffer</font></b><b>, ...</b><b>): integer;</b></td>
<td>
<p>Записывает данные из буфера&nbsp;&nbsp;<br>
&nbsp;&nbsp; Параметры:&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; <b><font color="#0000FF">cs</font> </b>если <b><font color="#0000FF">cs</font></b>=1 отпускать Chip Select после записи данных&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; <b><font color="#0000FF">size </font></b>размер данных в байтах&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; <b><font color="#0000FF">buffer </font></b>переменные с&nbsp;данными&nbsp;или массив созданный <b>CreateByteArray&nbsp;&nbsp;</b><br>
&nbsp;&nbsp; Возвращает количество записанных байт</p>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>SPIReadToEditor(<font color="#0000FF">cs</font>, <font color="#0000FF">size</font>): integer;</b></td>
<td>
<p>Читает данные в редактор&nbsp;&nbsp;<br>
&nbsp;&nbsp; Параметры:&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; <b><font color="#0000FF">cs </font></b>если <b><font color="#0000FF">cs</font></b>=1 отпускать Chip Select после чтения данных&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; <b><font color="#0000FF">size</font> </b>размер данных в байтах&nbsp;&nbsp;<br>
&nbsp;&nbsp; Возвращает количество прочитанных байт</p>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>SPIWriteFromEditor(<font color="#0000FF">cs</font>, <font color="#0000FF">size</font>, <font color="#0000FF">position</font>): integer;</b></td>
<td>
<p>Записывает данные из редактора размером <b><font color="#0000FF">size </font></b>с позиции <b><font color="#0000FF">position&nbsp;&nbsp;</font></b><br>
&nbsp;&nbsp; Параметры:&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; <b><font color="#0000FF">cs </font></b>если <b><font color="#0000FF">cs</font></b>=1 отпускать Chip Select после записи данных&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; <b><font color="#0000FF">size </font></b>размер данных в байтах&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; <b><font color="#0000FF">position</font> </b>позиция в редакторе&nbsp;&nbsp;<br>
&nbsp;&nbsp; Возвращает количество записанных байт</p>
</td>
</tr>
<tr>
<td colspan="2" style="text-align: center;"><font size="5"><b>Работа с I2C</b></font></td>
</tr>
<tr>
<td style="text-align: center;"><b>I2CEnterProgMode();</b></td>
<td style="text-align: center;">
<p align="left">&nbsp;Инициализирует состояние пинов</p>
</td>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>I2cExitProgMode();</b></td>
<td style="text-align: center;">
<p align="left">&nbsp;Отключает пины</p>
</td>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>I2CReadWrite(<font color="#0000FF">DevAddr</font>, <font color="#0000FF">wsize</font>, <font color="#0000FF">rsize</font>, <font color="#0000FF">wbuffer</font>, <font color="#0000FF">rbuffer</font></b><b>): integer;</b></td>
<td>
<p>Записывает/читае данные из буферов&nbsp;&nbsp;<br>
&nbsp;&nbsp; Параметры:&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; <b><font color="#0000FF">DevAddr</font></b> адрес устройства&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; <b><font color="#0000FF">size </font></b>размер данных в байтах&nbsp;&nbsp;<br>
&nbsp;&nbsp;&nbsp;&nbsp; <b><font color="#0000FF">buffer </font></b>переменные с&nbsp;данными&nbsp;или массив созданный <b>CreateByteArray&nbsp;&nbsp;</b><br>
&nbsp;&nbsp; Возвращает количество записанных + прочитанных байт<br>
&nbsp;&nbsp; *Если <b><font color="#0000FF">rsize</font></b>=0 можно опустить параметр <b><font color="#0000FF">rbuffer</font></b></p>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>I2CStart();</b></td>
<td style="text-align: center;">
<p align="left">Используется вместе с I2CReadByte и I2CWriteByte</p>
</td>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>I2CStop();</b></td>
<td style="text-align: center;">
<p align="left">Используется вместе с I2CReadByte и I2CWriteByte</p>
</td>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>I2CReadByte(<font color="#0000FF">ack</font>: boolean): byte;</b></td>
<td style="text-align: center;">
<p align="left">Читает байт данных и отправляет ack/nack</p>
</td>
</td>
</tr>
<tr>
<td style="text-align: center;"><b>I2CWriteByte(<font color="#0000FF">data</font>): boolean;</b></td>
<td style="text-align: center;">
<p align="left">Записывает байт данных и возвращает ack/nack</p>
</td>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<settings>
<locale lang="en"/>
<options hw="ch341a" CHIP="" clear="0" skipff="1" unprot="0" verify="0" busyskip="0" mw_speed="32Khz" spi_speed="1_5Mhz" blankcheck="0" LoadLastDev="1" arduino_comport="" arduino_baudrate="1000000"/>
<Windows DPI="96" Top="110" Left="369" LogH="101" Width="766" Height="489"/>
</settings>