From 957c8803443fdb6553aee8c543cfd522fe9b09e2 Mon Sep 17 00:00:00 2001
From: Alexander Mandera <alexander@mandera.eu>
Date: Mon, 26 Jun 2023 19:17:13 +0200
Subject: [PATCH] Add support for V10x

---
 minichlink/minichlink.exe  | Bin 96768 -> 98816 bytes
 minichlink/minichlink.h    |  12 +++-
 minichlink/pgm-wch-linke.c | 118 ++++++++++++++++++++++++++++++++++---
 3 files changed, 120 insertions(+), 10 deletions(-)

diff --git a/minichlink/minichlink.exe b/minichlink/minichlink.exe
index 41c7a0961ea714c1698c7f42a519ef9283b9b923..64720779b1a4060fc876e65c9be7c39ce9fe6f80 100644
GIT binary patch
delta 21747
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

delta 19649
zcmcJ1dwfjS*Zw&t8A-^PAVY$X#Dusf2nj+$!h}f$q3%LlqIHRyQTLfhQclMZwp&%(
z(2G{x+8}7PAqc93s-jwPsh$z7Yf;MiJ?oqkr0x5DzwaNvd_HTQXRo#P+LyC$XV2is
zsp7b&%Uf8t=43X8)BbL8t%PcV5XSul#q_1?+k1SliC_9-QjHXSg$tnvw`gfdJza25
zo(o?ZQj2Bq;nmEKVDN+d#j&^fp!N=)()bX793`Ir#c^CwtJlVivX0`oh#2UDVebeO
z*zbJZ_DW%CP*sPj^FOl2wVI)3_4kE6Q}gS^x(I#vL2R+mgdfIs;&U?l8K0S~iboUv
zHP*_buGb>?qxMV|0@!$uZFXB1o{KzEqSVgp)J;e7Sz_jki5syzH!dqWd5FzmPEYA<
z=1a4pQxZAOIu6+y!c)}mp2BlZF1N_qeK)mOTKX$Ku9k6}*=hU<9?qJgUqyPeny%(2
z-OC~eU2H5{=V=sP`jzeS?CzBXvvgx26Le9+fG#XX*Q)9-s6c|#Tgtu0rs~=@IE!9M
za2gVGj~H^-qPVeUr)O9MiZwffd}G;uT?gSxXZBbZGf?WpL&=#@G2g_<qCHf%$Rl#8
zWXK_JeE<T>#>?vkB#c85*6h+Re<I6fQIP(+h$cKxYq*W#h&pi+s&?;Z_GXne!r5O~
zW3S-GPk%umS0-;3Z%Z4&lf+wQ(eq-GGxaCr*k{fz=B4$&u!&yve14gyw028Jmgf~D
zbp4fW^|A<;I<hBT0m1SWj&oMYe#jegbx%>g)A&nAs=EF-K=QfDqP$xS`huKvyI+MN
z>%eL>W$1{J!{dj=4=*+}OrY4tPt;7y03}su=tvuo$L&Cq#C_6T@Vs%Y3=PqE{F$?F
zgroNl#<1Pq4TKM4*g5a|!pJKH54<n(!Zjy5TeX0{#1>Tx=8M?oYH#x<mgKvfU&4O&
z?ag;*&GZp`O*T}Y%pYK%=$r6s*-8CXzOZ0tbw7dsh?V#~<u?=@s!@&S-)5(3KH=YC
zrM2$x8w-m4!+Ac7-7xm6+3F_8S)2)`aEo{ueI-qH6r|MN$@Ak1yaK-G`MiRk0^j9@
z+io_uUUT8V$%2jbth~^wlm!Qc2-QkicYt()jRPD!!9>9N6KoT}euA9{vhqy}5*l3K
zc}qb^@Ft#rj~x%0%{OAbLL2fP?3K_J{G?@#TJUiNEgN0p`4P+z)`E{@ox>jT(JZQQ
zgitbtjc@Gc>lgHG(o5h^7OZVrPvCd3UCr<E``D%yEqPXOzQw14ed}Hh<KE^a_4enu
z@-}9d@uzY$OS~klsIaVP21@`erJ7~7YN;jdX-OmI0LG^w*MR3$-V$D)YhD8?^3Uo5
z%UM{~X_iik#d-~M&70#ABd^NFQOq|Yz<Wn68U{h}tVKja;Z9SQ9MOQU!6qW{Lo9Pe
zL<)blW<`LvzbLpH;TD9l(af($RL#LBD?f<0MzgSXVYTM(;kbD5KyJ~@P-RxjMn5*Z
zU27qF4_n->uHe6iZEP2r`sZ%y0BgA7A|{wREA^RO%3+Qog=#mwgIeMF?!m||pJH}e
zOoJj%N$ZeLiEeGKMem6`iQ=XBU6WYrsM<oGLe?{?nb2uBn-(=nIJ=9TiAoTb?PB%Y
zx8g%t@AjPq{Z1yfpT$oo@a)iv=Q|d(jb1OL#BTl#fp>Xggj>W%7Uu+Si!;*f+GKJ-
zQ-aaP!DM#LG0jO5kD0}Zrr;#;PmAb=X%0L%Y3d_d0G{btSf}Q`hMn6@*)XDWYp~&+
z8rcV_b^b1aS`&{+?=ps>Tr{(Ma=hcAr*#TGYZ`KMktsoh&p-VqY5raQ2m7Zt)OZd4
z#Xgz}yr4QrJ0754`~Qm<IbG7CoFn@%r4|Vb6HJ3-rRu{H3_Fp4pO;!2@(PZ}VwT26
zb*^o9o6#-7Xajo8_!mM+^218KQ_-Pnhr{V7aykzu$CoAt@@3iDfngct2H2W`%?IOc
z!C=&%ysfs@G03_>t*X1F2gkjcV?x*2IqG;?t`x5#$#dT|Ps7e4{#MpC8KViqO=*bQ
zgr#bJX~lh6&U#8)uh|)u>&bJrUe61et2t%DNqO*(@a)YlT>})VHA3u>7GKgM7#pMg
z`GBDTA$g)*@w+fl9eZfA$1Im?|K~L4#c_LTSNPLD6i|_f-^KZba(n7jq!BUll)UmV
z(p2SinpxH5@6b6l)q0ovDk*=h6`TI}-=D@~tQb-sjE`)LcYo^(oqY`!j8=CstJbxt
z{fwHDq7l!qbGb>>D!^fUtTj220$FZ)QzeV&*^nkjc{cQn-XMiI%rp_&4@?V`RH`Wh
zsV_|nkrGo)V`yxpCE%G2qrpeMPPm9xQ?MBX<}s#lREefk8m%3}D4;n3S>qtl=!71q
zW`a1!6d~o^ql#`fEk<nR;VR`WVNbh;+Mng8&}vkdv9Z>|j#|cLFJxR~T1pkB_T;JL
z0}~@sslpYtdL9+~yUTd{I=cAkUF|twFxfGz{xL0Xk=FwBE<FfOrN-9U%A@=d7Fr$G
zBSiLLxxDAIsi8i2NwsSa{+{M-h4(mTjxwFzC^Hlm?JKJqFZM8@+jLludW5r}_*6Zk
zQiG^&F5O->FFwGuPI^Af&q+Qso}B}N<6Q|RIWh8x;kd;Wb(QUjZzc4-$F9dW5yJ1W
zTHRv!-&k_DVEZR-s_HrE03yc3PTS9M^M)rnlY=ekCCbqXHj9TY9eQg2LTpAB>MUvZ
zCR*xCp6wE{aeOf?^?%0iYD=@!WwiXFb;4~~P7wbrpAqjdH@N)mud3oHm|b&AEw0!|
zx1D_En1YkV+gRCASmj=pT2T+qE%LMlIOdklx7BpaJt^3H9dl3dwknRf-+5WX<>R)!
z>QZ35hFYTFOXv^k{bne5H<M*q`r{MYQjb)u1?LhYWu+XBYd{&!Q3fc2Q8P~Z@($|T
zY3`Q>*Y6w~**!3j#$!_Yz9jLAIlIVU5r=OxXP4cQ!uqqN-8<XIe@Ywe@NKz8;vs7@
zttK^56Rf!LyZTUHC}Zm06~s=yg$3@mI|P-oh!@H`D}9OcWkpw4^s!U}QN=^(-9Rm3
z(LOC=e>GzHrbKk7+ndcw2(c$3taj$eS&rK7ro~9&(P|tZ_dJ233bjEjiY&5-C3io?
z(6OUqlf^XeWE@q*Zr;#LM7wcF23vTOST{e=xmZ#`gFz!y8V-6zS)#f{fW86R9v+y=
zy7sC%1@s!GB(&ItbcrgBvxsHp>;vH=<A)XJDSxb2qE#4}&WaKPf{vvNToNXExU^=2
zvIvvw(D-3)Cz5R2=s;maUpm(`{^4utZVW~3fLW(68kv0{4pIB#^qXQ9zmbiP*sDDv
z_|Mqd9!>2RN7I`?g2`+ay9dBCWoWT_O4bi(jZ=5-5o;CM_zIjNiw@~xpu$klwI{?M
z)k29I99iUutw&lz?hNvA>0ABE;YDKxg%@=`6bsK8r@ovNvO9y?lf`8>8p!WE_)t*A
zAwqG`pJ|1(%P3UXt5?|lRQpcV{^XjL{~D#KfLl~Er+%ese^_Dvs=|&l7uly%+U_#`
zUg4l*pa9!chk<H<pH({<R;h+q)$n~q#sO+%>uf{~QEewGY>}F6By2j>cBI0lZ^d_0
z-qgCo=x(Vr_dtbFNn?aJf$dw>wxhy!kkYVKJEZ%hCCf4I;LBOZq`LfJHXtdrZZ`F-
zHi0?$42I1dtm+w3`TMLmDY{x9JxnZ*Ej#?es`Tn@yfR9_o{PpQGv_*%bII{O8`mpR
zcxM!Qt5;iL&<J+CR}*1LbM~OuOTvS7tY`1gdgaY{E~m)a&Foxca!|LpmYb;KW#c}U
z)4O@icVIV{^oWKEPu?v>t!Mjs*J(axojN`<%;I&kScTT1!1c5~(-GAoqVzuxc?KZL
z>}D*&Vhp%2g2qn|zZV^3V-MB1RW$}zHr7y#!u%1;YH8{9{$)({aqHN}mZqJ$qi}P~
zT4i_MgEdArB<vS^v@?r$QLJn<4HHm>+fq(Gnvq~iaS!^7)}c$XQ5ea5liM}#3<J$V
zKdFtzf~9bcg-Z><;GHC1kZR?#SChL6%id#~lKTrmLmB^4+ZMNmU=E9(CYlG?4`plU
zo;Z&B>sAw`Cu=1+eNARps>v)H|6pk^1@R?p-b;aa0bBi2h%bYaTD1FJcJQUKg76+|
z(Py@xdzXFEr&ZNt#1@NXWA0#fsZZNlg9g(hwVq0fxncE2ourrFVNFto34I5%+?0@@
z#){b%CL6a861do3a1OKvQ1P;{_aIiB(p;D~h}}vF6siqo)%q^QuzII&hHvYaDX6Wk
zY#i`1tI;o9X!|nj)GyZOg93W`#-kTlR=?EXo=DM2rUg_BFVM5!CwXHr-Hj8OEcIQ(
z{^-}v_wMJk7nZ@L{e^<4{)`tMoo7c=8wev#u<NPag`^X#^#G&KSxiLuq@HKV1NsYd
zwz2gCW(#pUSi^y?>PrvN3i_v*ur^w%zl!Y{*k!QSIV$eFR151fHM+-RxVVfyiu#;v
z{1SUZym$~}J@<X|Jl3eYXE8Xg{*FELsi(aY7NtvDw6j(GUaGHhTDg6e^?li22s_8d
zzdXs;438x7EaHwkS5WryHeQ(1hb<f2QrOGbzQO*&d-YkvA+1@JA$5d4M0*HzRLx3g
zw$@`?hl~^kond}M1AVe_Aj1aK`PYIrLo<0{&ocJGuvlUCGInKHUm<)MYd^fbaBC@>
zJltg*h0_{tK<HRW%QGDe=Y7ZgM${1!V_4G>_0u}QL49!z({{vz*csG5ZvGwh%RXrh
z8kB&3`3^fay^==9?`nsDd)^2{FI1rtM4em*(^griZC;T@ZaNg>#dTjE`*1{)21PI)
zN-)LcOK;>UR{&q&XxA>zwjFmWIak>A5uJqbby$;;;X+U}>pL<?sJ@tGj%-pR_amy@
z*<{y56LwN#?NjXIk%_|AUhL+`I>NZi%sXwY(7G3!k~S7Y?fbN5!lX-#AJweIrc&(k
z7)sLWMYsk6DQ}E@W{#<Ah&4!S<?#<tZI^LDDSLTTGy4}#dN_2sV5@=0I|KQp4#?|%
zfOaJ3{$}+_at^@CdCFD~<}@-($YK`vQx-1->I|JyPpm2XdCX_GRF}3Jmp%a&xyTwr
zst{Ebt*RQ6>MT~zo^WfX>S~crz{HZ(ssuqTZAMwRDkz_%RsJ^&LzGz+HhMnyu-u?0
zo0PGhqvs3nw`1Ro4i-+fW511VEpYF%2I*}=d{3yZsd$tYXEh66;-HCl#0;}}ArWwb
zO-+wB&Q7F7v%4QXNUSurSlRe-BKs=6f&Z4{YW~A`lT<1pwQ9?5r3VWA6Irz}p~BWg
z)_P0}K}=-B$21q#CbBojv~T2#aPeXhPU?wRR6Ow@I%DHE7Z0Qp1@6<L(i7N~G4Vlp
z2?B@vyuhO8#{wKT%+4e~*?5}8kDXg{M1JMd$-9xPbZn?FE0WzCJEgu4hIgczIX-p3
z%S!m*$opnjZ0lppJ}yegc#rKI*GOOs*pK5Z!k6E$rsGqECC8b4e46mvx9rmRBw_To
ztVPBfLfvoK_KYFI(__qU!dxNu2wO6to^a|Y+caT@ka3hXer1Z#;V4`6N_XM>e0JfL
zK0?S**7DW9Li_p5@oH-!=m`7l)t<taS?tlPQNr-UEOKH`!v}BCD0U}`5}w(IhuDIN
zD{7uSg#JwToR14)xs0CvA=YYAy}=$Oc-p0S)1YO@|4-aiq-c+P_iAKt8UHw_Jcn|l
zre3eAt57(M1Pij3R}AqtV8iS|u6Bpm`bjhEHs49(B&gSE<rb=Td0&fohYFgwlSNGq
z_x&2D6s?j6*@Vf-!oWjp*W|@M<CM!-W5e$X`b?S13+?8z{h4V#YZ{}->;uuo$|>?}
zW94>i9ZtzFo+2-W(Q|6OH%#-T=dRU!FkDf!`3KaR7hz!T#%+=;Wz1$jPYr0lr6YDG
z-EtouZ8$)Kv7wexuV#Ej%V<R&w-NKo;tYGGBWv+mC!whioA6pk`^gyEmM@#r^;f(R
zWtSi3@;EFD-DKmtFlk{c?(2Fp^wzFYFQryR#cHiK(KTE<L|BIidvpjO8|OdI+g7WR
z0eR7ukF{LWk;|NJ&`&}p+1LsGCA#6>EOJ`?`XhB%8(g|UURW*DPgz_RQ;P(re;#J9
z?gX1KEhen02P{rqG0it;TpFB`UA}q9avPU3iEstI#!99|)Y~E8=Grq4bwb&?4Y<QT
z<mpFrttYE#Z4&UsOe})?bAPnXwWRM)a>W^xw<}jD>ua4__axi}Tb+2Z6ph=51YYCN
zSF-UlcEQ@RefJK^IY52wqLoxOa#-gp_UCQ;)b1ILg@>+qxN<{@u74HQ)mF#uUV^k?
zc~NnEsy5AoJidi{_7_T3agk^<Y2EfVH0ZY1v}gjN?Z(zCOB-LO^-jI}k!!(a9d#QH
zR4gCCv6j@;A`Dg|jMX9(J(k(`w)(YaAA6o31u7wW>X_H`2qEeii<xc`49D2W>EWR}
zu%po*Ej)NDLY*-}BNCjtwY1f_j9ZJ?C)1k+zx54L&Ny$n1;u(FqLtnTO@-5|MeOeM
za67N2vWuX^RLsC&F7H8`k64^_g-)rRbdx;=&RRv(jRVF6-E-miWXk=~R+lCrk3j=0
z(R~j!jWnqVx<U*(jwH=9s-C)VX2<S^4&&#%1+T{Ry~LTL9M{2&vwEC5MpMkRO~*-F
z@MT7cP9$&qWj_wKdSyTMo99(t;|o71FjnSzu#>L`+M}@;&qEM%_B=B-!ejB`_s^bE
zZM7@9eg!kyH5aRrI#I)H9OvrxG`sAHA-4?S@aA9wa86@?4C2V5`0Q_SjM9(8<sb&_
zNDS8)|16tNyrVN+ASFs>xyT&rKn7deU*of%$krAKbdJ9ynJ@@|%55RHhsKw@avMH1
z^Cs%qNi1XLVEal0^(@zqixu*0UfH?@NDA?Lv7>U4KO!V=c(1rqP-AT5)&>+18oQSi
ziE&o0lRgKi5#@nqF^Geg($6E5uZgtLD}INAR*fTcKrc!Z4_lo5GLmr$&`F6{X_Lam
zed76e`ILHqs#td!B5CWc)@Kh`&a4o_O>{)OcsfBW#-O?Ulx?5Y46k1oXN81%QrRx!
zH~6lCy7*NbA>9r%A~E+Wy&LM<9cH1kErE@nQsDZu1k}U#uJNL09vUEh_>e7_-MIY*
z>>bLIfe~6ox`bPWJQ~(!xhy_a-4kic&4QOQNFsm4{#YQh+H*o94xlk+x!9cbm`b%>
z&5reZlZf&P@CmwGxko_{qNhr9w?&pQr;&j!ePv_gNbKFQbvT}_nbXC7CP6GQ<R(?Y
zrSuTq;_4?@!~tf<<5`9!<rvbA$D{2A$Kzys569y!_D1d>pmTM9r*j>{f@7fQf$}f0
zcI+&AwlliA@9SLMuwaX7ZHfMQ(du|S$dK~{XC=quA%>jS=nmSQ16PZ960yGi0&~bj
zmn1Izm*8}K-}ubBiL6yr>qgDG=$Tc?E8*<}d3R{m$<M4CDDP3#N}M96kkzgfyqe6L
zR5Nihw}BaTaw3V^NsD2{GUiXCJr)xR#W-McS5w`lQ-oJkp9vPHt_==2X7P$e+-DJU
z2hj>ynu)GU3C8wdc6C!%_74L&wt8N(q>qq~4v{l3ip=5#_i8LX77>2>sucDR%<f3&
zB2PIUcSi*b%lErdYYI|4p0m3ldQ*zRvf&=($+p_t*b8xcg$67PKn}Ar(QJ05@Q&yf
zW;|Czt_PIaM`epEHxrejLKkZ8Zp8VA`)MduciObceX!=f2bRcF2~H&ro~BwYsn=t@
zQhM&&u)ALt*kng|jE9zI%)b@U=O0C!#%(1vAj*TCaMTn2sKahJ>NYo{v826+wZbf(
zm5$V*CBx!snY$Z`rUxvpF{X%^pABzh2`n<pC|teG%vsG|YN7>ONZJ108`GeC-WzoJ
z`w;hsRLbB=?j6<6OAuI5R)FADhn>%AR&|BudY@<2=UePuwPZe4zkd|ugtBr!`f2V{
zHFt~4jHlGmA|~T04TBP0OMUKKk*W0jB}vdapeyBY>3=9h2ji=7ZSL4hk(O4{eWgo(
z6dbL{tq-#sn*{uKP%!GR9TYD~`~z#r7Puvgw?ynpm!vURekji+xI10sB;%GLt~tG5
z+&1GzI{T0}UJWESipYLk!*&Rx!HwaG*vV##%bq(CIh0jLYOmH}fLe=%t0>|MGCv!3
zm!$i+A;q%yx>}UQ^&!<yHlA#T@?1tEvZ7K{-YoSMzdTjCa1Xmce>Cr>ojAWFSX@1L
zRLiBmgJh)rM`;>)y273y8FO)7O~Y5IZLykN!ZIlhf~ovEe6PVM^-}A1f%rL$%{;Ss
z1HU$)T_k?Q@Z#*)hS{jHwHDU#ZbjPSi*?$Jg}FF>z_S;YaC%`0O8XO4b+xodqRM9R
zL=tTm2V?#)ES`+ck2mb}Z|BrCg^zgB@yKMWi#E3?(FH(3e<ixAU~uHhYiB?5u+@NB
zkGl?OCOX4yf+4}FD}RVU*$+MJdVKPBtF@WCD#gxz=wryG%;t36H+DE>-wwuHU+C*0
z8oxx+{R`s4whcV?iOg}Yhh{&TYs0~BB{V)Tx{L9V;EJO>38HQR#dy@nkh=-$5?v;e
zm<F8t9efzRIwIBi4PU5aKNM_6oE>4r%;ol#c`nrTdx(X+e3m)gm<V-MU3YxqG`LXL
z5yUK>Jmgsmi-ml|EboswIj>5B;90BuZbEd?9(v|@{l=dy7*FTYc07@6%nY>p@dL_w
zo;pLqx>$~#%`J_GtweVLCi*MU9oLvyZg$B1CLQAGSXlAHk@x|-;^NRzsr{wjYa&|H
z1L%#_57>f*P3<vg8P3{8GksC+z#S;pAFaEeVCv{$or)87G9t^ydf@_ol#&RJo_}_}
z+M9)7E@KnqqRrogjJt6(k)>l9<S5u8XhIFdgu+EI^5SM)C&j^5qPufnsX14xM0W!e
z508@~kl(4hbf0w-o7z8zmTq)WZ<Uyd$i@*(Ffr2gjLdZXM`@HI24z80qMMCRdR8Sm
z8yNjbwDOgwQ+1|Ta2*qeevU)tbbTLqC@&A!Wn%|~!7RhDYejXocgM7J>RZ7>nlzrm
zHPphD=mNo%`VPN=z}1u++)L6%G(0<&gH2EmA5CtvmTxw&zk@*T)|hD8R~&hHa@gp`
z0!P?S!)_Y3(J)lQni{UxaG8elHGECO(Hi#Cu$zW$8VjS8f<iS#O$`MN?}Vupxvb#d
zelqmE^75=)x`!%1J(5eY5PVHqSBf{iRG3BMwt1|Tvp)X?>+S3!yg#2golR<PyvJkJ
zwN_Dou!LE5j~#Fh<oB?8i^6^S#?rzT)hm`+7Ks5E=g&?|hK3G$URX*>3)pXqTJhUi
zeOGicE?3J}KDWI^={KIICm`*fhCyd&7)N=JP&)m2dMTy*BMsY?0=CXIlrLaUTwVNg
z@8Eh_JeK>TVR3C*JDj@L@320LQ-rWPY~A7(H6Pr@>n!f3gYk9}5Fi`BZpbb!4iUb-
z&4eW_hpr&2*c<Ov=geY%-1ek4RIZA5%EpZisD*kD6fEwS#$Ym1)gpgXzT-nNLy*-u
z5VwN*k8vlAJBNS(sf+Robs0MA=j_cTErWD$%Dr#JmEKtIXG?PY$l=8$x@))C=_QRr
z3aQRP7C?z^=PeqLP+(@`OWp{xsQdI5tCwft3t2|qqedfcBHAg#;=Z&pIAa?H;p-4=
zfn)#Dep053zsYi!HWC7EvW-i>LB~&D);<L9Et0SDK7$`cV0%R6!btZJ`!D!sTiLhE
z>I%R7#@x$#32*(zqF6G&m1VO9!sQzUzRLwZtojY*I#D+62tb!OgMKbYr{T3e3U$Eu
zcThzY2e7s)ItqmWY|4uI!pw5!S`pP^2>irovzSSzc-i>44!P<~&?1c&p1KqVmwmD^
zI)MGYqIrw*>&Wm8?HTH28ohBE8e%&NbHkzp$y0*pcVB0TE89-kgw%7_7k(`#>LwsZ
z`S;oYqkDkh>_>vN$LlR}Pgzr(x_&U@c#wlfhmMa!in?C8O2C>MJX9U@w1<^Dbz#@p
zrIjH8f|AEJ(5ZXq=9Lw+0KIY5&FZcS?OFyEUQKoY=&wXqpfTAvwzj~zGiX758|T{c
z_s2b(p)UO=@RE&h*JiU<ZAG^?UoG-m*pAh9d`7+1mEX*4Z%x7HFA5J^vxMJNuw%_q
zLAW-t!2AyL;MW&i$nR5!cNVnRb-oIpQ{eS=FP_h4{fb8L^9w#Jy2<m7f_3{ldhqsw
z3kMT;ejW=c2{+E=xI2cyx&y!jgZb1Q!ysMJTsER4n4in+C4+efJ6AH4pTnXKx8~;*
zj6J-X=V!C0M*{H~aI`&~`W$TpKJ91+pIH>jFNn>0zu+j(&n(#f%?J;EI;(ZU6fhmP
zU1r1N!{ZFC_Zb#U!wx;p@Up()bk^rYTYd)1KGA}=6>K{(-;<xl+Mb@kXBND3dNYq7
z!}dNigr8jS(HR?Gcajob-we1HJt(8vhf!U9$RyOHVL|HIKRkuv&8+uNfpvmU@?1sF
z?xv?8f9KS(&208hrpQT~>2ceVuzI`(ih-M6N`vp5{DaxmJDfiCgONoV6G1z2$IYzt
zr+W5FCwMLoS(+jXHXduKQ&(M~ydh^GD&u|)AF%sCS-$thv9^oO5({)?o79ZeUKmpt
zGBXhu1)hSHzNgXO2EjXk;)FxlIBg)aSAI?qhHqlqer`0<{V811aV70}l)gS~X>sDE
zw-NH;Na%UgcG!$NvT%e7p_s--Q~+*%!ppbPq9vaDiuwa@?d#X`+;`VpJ$%fo%`V?u
z>QPL|`psFJi%o>P&DhY332lQ=RCeq*d<tf#Z>dEzl_rV4CaX8q4>J-yq907vQIcjk
zEcG}$b@4<%qm9s^ZmrBtzwFpyND0_k^c&gkvQVF?O|h)G^yl;0)v|VxcRx{#Dc-g<
z6&1e?m2A9wtfJys>PC<fju^V81xc3{^YstDOC`vLoFQmVvUmgE1fSYKcRMYcf6VS)
z&T6p=DZ#cB1swvDjrm9MVCG}KCE!SXMEV3Tx=HB?ChzRnNgG)Hm4?FDqio-mm-tc4
z?`o%zzV9gEtqrqdcYK6EhTLpgXkGd;q-5isBW&W;#<i=Gm)O(aT!NcgY+|2b*56rM
z@bT5ZbRolOG3V4H0{YcGtaAFuFm~{IN8#K3j4z)o?AXtymbWpUdynU^+T>6$1U_tD
zpgZ&)+f}|u$k<=d<Hi|Y;EGs--@6E9U$YUvuN2H*v-`g<74&PFcr#i!@peJ+&DOlI
zW(~V{tCfBIUW`~AN&Y9?sM-IHpKJQR;~q`F|Gz_f*njEx|H;oT|9=YnU&ghg>;JDk
zaQO@Mk)6_TzlNV{xL(6$8qU}7H4R5=*biu@XWvazw9znB!<rfj8s5RhCi!31@RWx8
zHT+z|^%^eIaK47GX*gQLetUSk60n=5Xrp1MhBY-5G`xdVTB(4Br!?HJ;pZCm(+1yv
zMtt2t0sHM`rh9{hnk||A-oW|?x>o##%2sh}f51qqk?}@zcKhDPaUPg^v~bO#6GkcC
zp(?%}c;v6Rooh}LbDtDl7hg79#FFVAsV9T}0t}KZjGg-<yvC=h@2b|SuRD;{yx-nu
zjH=CS&idXDo#<*;`T9`1#Sev3g5j$}s8N5ds9}L9<qzzbSVbPs$I*8URy^<r#22gl
z3OK55$m!yX)$Np0dG}m3&x!f$;{Cezf?9BK89mgf?ta*n5adG&@)<a?NZYXCx&KlP
zYbzrDPz~1vv}GvYr69}v3d>%y(B@V?1L{{R)E|*rAoVDyQ&qK9@1<1>x(V}H?t@0P
z>sRD>895?Pl^bF5p3lB|5M*~}DebYokm+Zr+{cyEuI}hR&0j-R9)k#5{%QM^vNAR6
zl7E^PsVYNGVO6cEcK1~B&W`;PCeD!a9t?4gr#)>!)J;DurTZN^$m>7ERwf+`MYp{T
zmp8lfoqO7<L%)gio1rhS**Vo#{n?GRu?7N4rf}TmI9vW!1I-4B%Grr+1n;pa6x}CF
zmILTlfri|5C_GoTHHw$dpu9R#mvDCbVVh<#h#?-LAK#?D@Du-Oh^GFYy*3J`F}kHT
zOa3#_{&^m%*B(PP`=AiB$&}CI=h+p5|EZrcDE5XcIh5NFOZsnnJW+5jr{(5D=_$VV
z>E-mj8F|Vq9+GY$g<e^OA9UhH>!2a0t~$g>p$xyONGpR6A904AXYdVfifo(!Gii;P
zAnrD}ke3fu)C6Dl1kFS()bUS0n4YFqM%re?-2;sy<@YPgH0>HA8}-P){vg!E;?#R1
zAbt#!jDJy-<M2i$vSa_6$Cf?{u6-7r5RXn^!D#&oy2*Cx7T8(Iqws*e2Bcg@dPe9b
z_b_w~uC>S8nb+fHc1AD5=<TY?_Yz859JBF7S;ZH=L)FYSHM8`VKf=>}x+{^-KIqX&
z?cX_dwCUVZ^|q?s<)w7gYIhKA!b@W35_~V#!CQK}F&(@t9sJC=M(v6l5Gjx};`t=;
zklAPdE>ur8$Lyb8QG@f<mFjoVY7js*$VNmoDYYrP`M6H|kKlpFQ%?VeBNA@-U6?ck
zS2j5H8nKRYoN@$|jq@}=fB02v$~ym5&wl_^$>KvOe$_fWuNHgtue!p>xop8-jqHM2
z_#Vv|R}0G^?k;8bcs$hv@eaoRcG#p@4N%;D>)^=y;+>?J`_^u8_YWCtjq$>T!u0uY
z!7sxjr2cTjPsk(q^UyA$jPcOW)nW%I=2I#1A*m&F<%LjWR3Vp!4Or_ZO@x7ZHt5M|
z9|u-ER5!l~i+Va(7|?{}Jq`5tfKqKn+a@q$9CWF{_C9?@sMClwmFvZ3V8x-I21Fp|
zw#KT*IzNoJ(`ZY1SbVn3TPs%n&hUlXhnm|gKb9p2`B#Tl{a$U6W=Qg5pUV;TFVBQK
z22gbhg7Fi0D*Lidxo0Vxi8aX7<V~y;h!>@0J8VD~;%gAueG`Knjf{ao($!m$#5cAF
zX~A^LK%}2pL4mhiy!q$62X|7R!Y`Z{WpxHsN9gBM=3*F>XnG<_c&@#oX<Jv){-tRH
zD{1YVR!NUa>c^V%Z`EH6d{5K<P)U1B)9$OJy{>6Lt)#7`mA0ZnYgeW|bqKY?UZGaB
zZ8hzLO4^EE?f<XZ*nibFsick5;?{uH{=D0IXlnWr=(*OSX@9At?WJi?RMPg-w7dUR
z`+g;DAJx|`xhkoXwGgjY()QQ1qbg~KXxiSDw4$bss-(TBX&YA3CN$})cDzp|^$cxB
z-Sx#(saTZW!V6Hvg!)8tIOV&lsRth(__!**hj{*np|1S-RbBOp2fwl~ZUi64uk_^2
zy7xMOts3sh_pa)b2#S>|PH}3ms??KD8<2LJQ<Tsvf0=(vJN}mD?x_BGnm$cSXKLsm
zWK%tyJFD;qYS`C*gC`Ezq9O7BMs^&N<xY@`@V^V30HJ(Czx~hoTRr!&Kg;B=1)v~j
zPyFW~>);;(p$eP^_Jf=Or~IqFm*ubi79-?^v_Y#tvr_CMtB&J)E@bjX0Lnb^RN<Kb
z{<_e-V{lkR+Zk24?&h{_2DXiu5j^F!V1>5<PwqY-c+6Pq*mUdIF|C3N9rgKF`9i-2
zd@rFeEtLOQS9^O5zMq4Pfy{=if^3f|Y!J?W<*}+)3;x}eE%^?CT%X=tSVWr{T=yxH
ztzEh41f4picj~n2=azgMdwzl}pEo}juNOG!O-ZUPEAhEcI`jj(tLYc>U+wwahw>I9
z_A9_yFGw78gCUwONFh^SaHw#8f&vTuTJzz8u5_6?pz0TnisZ-efxTsU5yS-91o;wj
z46?R&;m>XObUv)FEOUR8j1*ND0X=b+vT9sAzPWuSk~USC#<yu$@`5dDmMl+#knfwo
z4H_@jup-9)744LvObe1XTP@%)keegR(Gaq?o1r4{(Jxf$?}csG{9n|UA<v8Hzj3=_
z9R0fLbaA>Y4}uIsfp;LyP}p)H>Ea-ic{|dlAtvOZ;P<q=WGm48UM#eNQ+`@qk|vLv
zFnNM?Cil{)m$-<+>g{<!=vV5eE=%hA!*OMQO9xl2Y>ycHzo)sLt42rj#|4LFRht-o
z1YfjjX$;@6Cb#Bq3mq%mAH#R8${ZeXg?s{U@UUlDIIi6^o+JFJ4;Ei=!sRI(mjRv+
z+z+vW6JCYP04Mb9%W-qS2@@d>aKiDBMc{<nAj`oC!~1dET5!UbAs<Y`+dUC?e~#M(
z1L5m~IBq*QVF~0IIAP2XjynrZxEmsY6D}UgaSy=>i*PySXXO?A7Tg3*cpefCPN>I)
zS_^Q(^}})Qk49oW5}QY0mjWle2T27dY&VkQ(!dF~Kr+Ayxis_&IAMoTXgxS#U&v~3
z!dZ}faKc{c9QQFe;m?pS!GE@c)EI+SB0-n{ISo#j1GxZB_$@>NC;Ss~51g?6Sp1h0
z;Dlo!o;F^=P2j%Zg!dr+;DnvWArClVJj8B7g2>MC=pyhUU@@c}IN?)BG&o^w1~yV~
z!des1Ti}E*Lk58pIv{D_gpOCxTf~9ckW6sGHy~DUpq={|i5W-`egkoU6Ha@T;}(Jw
zo`b9gC+sm10|%V&3&=Kb!rQpc-v!Q1=D1ME0dT?u$T4uj5s=g1ghf*@o@{os7~~d2
zf`KqR6KQb5v5<%0g!3Vu(|HBAg8PDR1AYtf2PdRoFa>}Ueg~-!PFMyB1}AJf6$2BT
zu(ur_Es*F9d=1hLoNzs)GdST_kOXkTw_d{(1t;8K<+x$sggYQsaKd893~<7ekU8Ll
z_3+b12RPw_*U`J+b|S_Z7^O%Mwu5{OPS_8!4V<tlUKn<P6Y3!czzN6A;<&@$gsWy_
zz=G!k4?-kx!t0P5;DjUQpm)IuXV1a&=U(TDaPL68!3nQH{J;sl=b}r&2_qrF;DjsZ
z;ZcDT-h@Pe6GkCqG&tc@NM~@uXa{-`oUjKZ6}*Q7hV@7cLV|EBBn_OfLl&kKIH3cQ
z2~PMvWDYptuaF#Y!od0X-!;Gqk3&|26GmoZz=9LLmxCS!Cwv4cvLivH`WqOf;DoIq
z7r+TOL#~1oZiU<fCzK!$!3ih3I6QD(K__?sIAPl*7=Yk}-b>L#;DmZe95|u9CO#67
zAglv1gA)coEZ{}JN01b7ZW+hD0vQCJ30wjh1D*$DkPPsA;0ee?a2#W}z6=8sJPnu*
zae!w6GnS+0W?=o#1epd|3xflA9g+`z3)pWZ_65oeT=5nLAb39T5~P%TfPX>Gf@81a
z_PmXr11|zbu0_v*#{u_2?tzyA2fu@9JQFd2-QLCX_d_D(T|84r0JsBq7*Zd+6gcHQ
z3_9>kpaf|Fehb(%A6*I_0el<M4m=-t1`-Wk2Ar@C0}wnD*lInxojA}5NdV8YgA_n4
zNE89R-p9xU_XAFXq)`UoJCKRs`M@O~pi9B?fWJcKfZqb9eS|IrC(PS`0Z2Z;A0Quq
zmjPWLV*rvKxO_97|1Ko*K}?^aOTi<6d7q=D<OFQC6J1PtpaH)q@STOq0k=T{zzOqq
zAwM`Fw+FofPT27)v>rSTIPD0=5V!+a2+061I)eG%`6#9qIRS@3=76UGkAH)~0$vLI
z=rURZz76=%6`T)<1Mfl(fOA)|M?emPmjOe6!8#8f0Svu{F+m)-93p||1CxKnLNp8O
ze+r0RLd|ERWxxq;Oc(G>;Pi4ldvFJE@eMp<@I2sIh#9;L_~Gw(eBj%FU)@9_z>9zf
zZ((+TmjdrVGQqjqShOHk@Ce`lJ3eM0kp_GfG6x*5qugwW1Ka_0LUO?I`pG?jECk0Z
zDTmikE)SeA1F{+%ucX{;$Xal`mU8bw^1<_gP48l92af<wg=_=w>j0U452q2z0DSTX
z#sN6}Tqy%`0X!3Edw?~Ze1PX6+#C$LNBBuoRUA<8D`h{R5#qOMYG3>xK@Jbo%6@!A
zn=-f}7`NRYr#T4CQbHg6!w=7H*cdhYY3P1c?1iKI@%_E3jjj@*OY<xeO0lh!4(7vF
z@k99NRk!=|{)K&q@C7=Q5bS~fyla(L8XwYwjzx5Mq+<=8F6r<{2Ru6RR2+@yC`5-%
zIzZBak`9Y>Xrx0S9TImBDV&_fA2sTgw=Yx`OIaLW*mpX=*JEjfZ(;RW{3D$`d?PIQ
zH`l=cbN=f5{CvN4!RsQ{#jQ(OH)vhjx{P(0>v0%WuyY%NH-vA9*bu#;Xmjc2vdy<P
zb6fnj1aFDh61OE~OWKyqEsiaDTk^MT+fuZpbW7QmTU)rTep`dLMr@7SnzA)*YvxwR
Y*1WBVQz~$N0Pp<ZLgwHn@u<%K1A@q>hX4Qo

diff --git a/minichlink/minichlink.h b/minichlink/minichlink.h
index 1433f6d..a46793c 100644
--- a/minichlink/minichlink.h
+++ b/minichlink/minichlink.h
@@ -104,6 +104,16 @@ struct ProgrammerStructBase
 
 #define MAX_FLASH_SECTORS 262144
 
+enum RiscVChip {
+	CH32V10x = 0x01,
+	CH57x = 0x02,
+	CH56x = 0x03,
+	CH32V20x = 0x05,
+	CH32V30x = 0x06,
+	CH58x = 0x07,
+	CH32V003 = 0x09
+};
+
 struct InternalState
 {
 	uint32_t statetag;
@@ -116,7 +126,7 @@ struct InternalState
 	uint32_t ram_size;
 	int sector_size;
 	int flash_size;
-	int target_chip_type; // 0 for unknown (or 003), otherwise a part number.
+	enum RiscVChip target_chip_type;
 	uint8_t flash_sector_status[MAX_FLASH_SECTORS];  // 0 means unerased/unknown. 1 means erased.
 };
 
diff --git a/minichlink/pgm-wch-linke.c b/minichlink/pgm-wch-linke.c
index 6034f24..6db9750 100644
--- a/minichlink/pgm-wch-linke.c
+++ b/minichlink/pgm-wch-linke.c
@@ -16,6 +16,48 @@ struct LinkEProgrammerStruct
 	int lasthaltmode; // For non-003 chips
 };
 
+static void printChipInfo(enum RiscVChip chip) {
+	switch(chip) {
+		case CH32V10x:
+			fprintf(stderr, "Detected: CH32V10x\n");
+			break;
+		case CH57x:
+			fprintf(stderr, "Detected: CH57x\n");
+			break;
+		case CH56x:
+			fprintf(stderr, "Detected: CH56x\n");
+			break;
+		case CH32V20x:
+			fprintf(stderr, "Detected: CH32V20x\n");
+			break;
+		case CH32V30x:
+			fprintf(stderr, "Detected: CH32V30x\n");
+			break;
+		case CH58x:
+			fprintf(stderr, "Detected: CH58x\n");
+			break;
+		case CH32V003:
+			fprintf(stderr, "Detected: CH32V003\n");
+			break;
+	}
+}
+
+static int checkChip(enum RiscVChip chip) {
+	switch(chip) {
+		case CH32V003:
+			return 0; // Use direct mode
+		case CH32V10x:
+		case CH32V20x:
+		case CH32V30x:
+			return 1; // Use binary blob mode
+		case CH56x:
+		case CH57x:
+		case CH58x:
+		default:
+			return -1; // Not supported yet
+	}
+}
+
 // For non-ch32v003 chips.
 //static int LEReadBinaryBlob( void * d, uint32_t offset, uint32_t amount, uint8_t * readbuff );
 static int InternalLinkEHaltMode( void * d, int mode );
@@ -230,26 +272,36 @@ static int LESetupInterface( void * d )
 
 	// This puts the processor on hold to allow the debugger to run.
 	wch_link_command( dev, "\x81\x0d\x01\x02", 4, (int*)&transferred, rbuff, 1024 ); // Reply: Ignored, 820d050900300500
-	if (rbuff[0] == 0x81 && rbuff[1] == 0x55 && rbuff[2] == 0x01 && rbuff[3] == 0x01)
+	if (rbuff[0] == 0x81 && rbuff[1] == 0x55)
 	{
 		fprintf(stderr, "link error, nothing connected to linker\n");
 		return -1;
 	}
 
-	uint32_t mcu_series = rbuff[4] << 4;
-    uint32_t target_chip_type = mcu_series + (rbuff[5] >> 4);
-	fprintf(stderr, "Chip Type: %03x\n", target_chip_type);
+	if(rbuff[3] == 0x08 || rbuff[3] > 0x09) {
+		fprintf( stderr, "Chip Type unknown. Aborting...\n" );
+		return -1;
+	}
 
-	if( mcu_series == 0x300 || mcu_series == 0x200 )
+	enum RiscVChip chip = (enum RiscVChip)rbuff[3];
+	printChipInfo(chip);
+
+	int result = checkChip(chip);
+	if( result == 1 ) // Using blob write
 	{
-		fprintf( stderr, "CH32V30x or CH32V20x MCU detected. Using binary blob write for operation.\n" );
+		fprintf( stderr, "Using binary blob write for operation.\n" );
 		MCF.WriteBinaryBlob = LEWriteBinaryBlob;
 
 		iss->sector_size = 256;
 
 		wch_link_command( dev, "\x81\x0d\x01\x03", 4, (int*)&transferred, rbuff, 1024 ); // Reply: Ignored, 820d050900300500
+	} else if( !result ) {
+		fprintf( stderr, "Chip type not supported. Aborting...\n" );
+		return -1;
 	}
 
+	iss->target_chip_type = chip;
+
 	// For some reason, if we don't do this sometimes the programmer starts in a hosey mode.
 	MCF.WriteReg32( d, DMCONTROL, 0x80000001 ); // Make the debug module work properly.
 	MCF.WriteReg32( d, DMCONTROL, 0x80000001 ); // Initiate a halt request.
@@ -299,7 +351,6 @@ static int LESetupInterface( void * d )
 	}
 
 	iss->flash_size = ((rbuff[2]<<8) | rbuff[3])*1024;
-	iss->target_chip_type = target_chip_type;
 
 	return 0;
 }
@@ -405,7 +456,41 @@ void * TryInit_WCHLinkE()
 
 // Flash Bootloader for V20x and V30x series MCUs
 
-const uint8_t * bootloader = (const uint8_t*)
+const uint8_t * bootloader_v1 = (const uint8_t*)
+"\x93\x77\x15\x00\x41\x11\x99\xCF\xB7\x06\x67\x45\xB7\x27\x02\x40" \
+"\x93\x86\x36\x12\x37\x97\xEF\xCD\xD4\xC3\x13\x07\xB7\x9A\xD8\xC3" \
+"\xD4\xD3\xD8\xD3\x93\x77\x25\x00\x9D\xC7\xB7\x27\x02\x40\x98\x4B" \
+"\xAD\x66\x37\x38\x00\x40\x13\x67\x47\x00\x98\xCB\x98\x4B\x93\x86" \
+"\xA6\xAA\x13\x67\x07\x04\x98\xCB\xD8\x47\x05\x8B\x63\x1F\x07\x10" \
+"\x98\x4B\x6D\x9B\x98\xCB\x93\x77\x45\x00\xA9\xCB\x93\x07\xF6\x07" \
+"\x9D\x83\x2E\xC0\x2D\x68\x81\x76\x3E\xC4\xB7\x08\x02\x00\xB7\x27" \
+"\x02\x40\x37\x33\x00\x40\x13\x08\xA8\xAA\xFD\x16\x98\x4B\x33\x67" \
+"\x17\x01\x98\xCB\x02\x47\xD8\xCB\x98\x4B\x13\x67\x07\x04\x98\xCB" \
+"\xD8\x47\x05\x8B\x71\xEF\x98\x4B\x75\x8F\x98\xCB\x02\x47\x13\x07" \
+"\x07\x08\x3A\xC0\x22\x47\x7D\x17\x3A\xC4\x69\xFB\x93\x77\x85\x00" \
+"\xED\xC3\x93\x07\xF6\x07\x2E\xC0\x9D\x83\x37\x27\x02\x40\x3E\xC4" \
+"\x1C\x4B\xC1\x66\x37\x08\x08\x00\xD5\x8F\x1C\xCB\xA1\x48\x37\x17" \
+"\x00\x20\xB7\x27\x02\x40\x37\x03\x04\x00\x94\x4B\xB3\xE6\x06\x01" \
+"\x94\xCB\xD4\x47\x85\x8A\xF5\xFE\x82\x46\x3A\x8E\x36\xC2\x46\xC6" \
+"\x92\x46\x83\x2E\x07\x00\x41\x07\x23\xA0\xD6\x01\x92\x46\x83\x2E" \
+"\x47\xFF\x23\xA2\xD6\x01\x92\x46\x83\x2E\x87\xFF\x23\xA4\xD6\x01" \
+"\x92\x46\x03\x2E\xCE\x00\x23\xA6\xC6\x01\x94\x4B\xB3\xE6\x66\x00" \
+"\x94\xCB\xD4\x47\x85\x8A\xF5\xFE\x92\x46\x3A\x8E\xC1\x06\x36\xC2" \
+"\xB2\x46\xFD\x16\x36\xC6\xCD\xFE\x82\x46\xD4\xCB\x94\x4B\x93\xE6" \
+"\x06\x04\x94\xCB\xD4\x47\x85\x8A\xF5\xFE\xD4\x47\xD1\x8A\x85\xC6" \
+"\xD8\x47\xB7\x06\xF3\xFF\xFD\x16\x13\x67\x47\x01\xD8\xC7\x98\x4B" \
+"\x21\x45\x75\x8F\x98\xCB\x41\x01\x02\x90\x23\x20\xD8\x00\xE9\xBD" \
+"\x23\x20\x03\x01\x31\xBF\x82\x46\x93\x86\x06\x08\x36\xC0\xA2\x46" \
+"\xFD\x16\x36\xC4\xB9\xFA\x98\x4B\xB7\x06\xF3\xFF\xFD\x16\x75\x8F" \
+"\x98\xCB\x41\x89\x15\xC9\x2E\xC0\x0D\x06\x02\xC4\x09\x82\x32\xC6" \
+"\xB7\x17\x00\x20\x98\x43\x13\x86\x47\x00\xA2\x47\x82\x46\x8A\x07" \
+"\xB6\x97\x9C\x43\x63\x1C\xF7\x00\xA2\x47\x85\x07\x3E\xC4\xA2\x46" \
+"\x32\x47\xB2\x87\xE3\xE0\xE6\xFE\x01\x45\x71\xBF\x41\x45\x61\xBF" \
+"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" \
+"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff" \
+"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff";
+
+const uint8_t * bootloader_v2 = (const uint8_t*)
 "\x93\x77\x15\x00\x41\x11\x99\xcf\xb7\x06\x67\x45\xb7\x27\x02\x40" \
 "\x93\x86\x36\x12\x37\x97\xef\xcd\xd4\xc3\x13\x07\xb7\x9a\xd8\xc3" \
 "\xd4\xd3\xd8\xd3\x93\x77\x25\x00\x95\xc7\xb7\x27\x02\x40\x98\x4b" \
@@ -442,6 +527,18 @@ const uint8_t * bootloader = (const uint8_t*)
 int bootloader_len = 512;
 #endif
 
+static const uint8_t * GetFlashLoader( enum RiscVChip chip )
+{
+	switch(chip) {
+		case CH32V10x:
+			return bootloader_v1;
+		case CH32V20x:
+		case CH32V30x:
+		default:
+			return bootloader_v2;
+	}
+}
+
 static int InternalLinkEHaltMode( void * d, int mode )
 {
 	libusb_device_handle * dev = ((struct LinkEProgrammerStruct*)d)->devh;
@@ -556,7 +653,10 @@ static int LEWriteBinaryBlob( void * d, uint32_t address_to_write, uint32_t len,
 	wch_link_command( (libusb_device_handle *)dev, rksbuff, 11, 0, 0, 0 );
 	
 	wch_link_command( (libusb_device_handle *)dev, "\x81\x02\x01\x05", 4, 0, 0, 0 );
-	
+
+	uint32_t mcu_series = iss->target_chip_type & 0xf00;
+	const uint8_t *bootloader = GetFlashLoader(mcu_series);
+
 	int pplace = 0;
 	for( pplace = 0; pplace < bootloader_len; pplace += iss->sector_size )
 	{
-- 
GitLab