📄 ufstool.asm
字号:
invoke UpdateWindow,hWindow
.WHILE TRUE
invoke GetMessage,ADDR msg,NULL,0,0
.BREAK .IF (!eax)
invoke TranslateMessage,ADDR msg
invoke DispatchMessage,ADDR msg
.ENDW
mov eax,msg.wParam
ret
WinMain endp
MainDlgFunc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
LOCAL i:DWord
LOCAL j:DWord
LOCAL SN_Extension:DWord
LOCAL BytesWriten:DWord
LOCAL FTDI_SN:DWORD
LOCAL EEP_SN:DWORD
.IF uMsg==WM_INITDIALOG
push hWnd
pop hWindow
invoke CheckDlgButton,hWindow,IDC_CHK_EEPROM,BST_CHECKED
invoke SendDlgItemMessage,hWindow,IDC_CBO_Firmware,CB_ADDSTRING,NULL,addr szFwV2_5
invoke SendDlgItemMessage,hWindow,IDC_CBO_Firmware,CB_ADDSTRING,NULL,addr szFwV2_6
invoke SendDlgItemMessage,hWindow,IDC_CBO_Firmware,CB_SETCURSEL,1,0
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo1
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo2
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo3
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szSpace
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szSpace
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szSpace
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo5
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo6
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo7
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szSpace
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szSpace
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szSpace
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo8
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szDasher
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo9
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo10
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo11
;invoke GetDlgItem,hWindow,IDC_CHK_HWK
;invoke EnableWindow,eax,TRUE
xor ecx,ecx
mov ftHandle,ecx
mov FuseBits,ecx
mov dword_40D7A4,ecx
@@: invoke SendDlgItemMessage,hWindow,IDC_CBO_SelDevice,CB_RESETCONTENT,NULL,NULL
invoke FT_ListDevices,addr FTDeviceCount,NULL,FT_LIST_NUMBER_ONLY
.if (EAX)
xor eax,eax
.if (ftHandle != eax)
push ftHandle
mov ftHandle,eax
call FT_Close
.endif
invoke SetDlgItemText,hWindow,IDC_BTN_Connect,addr szConnect
invoke GetDlgItem,hWindow,IDC_BTN_Connect
invoke EnableWindow,eax,FALSE
invoke MessageBox,hWindow,addr szFT_ListDevices,addr szError,MB_OK or MB_ICONERROR
.else
mov i,eax
mov j,eax
mov eax,FTDeviceCount
.if (eax <= 0)
xor eax,eax
.if (ftHandle != eax)
push ftHandle
mov ftHandle,eax
call FT_Close
.endif
invoke SetDlgItemText,hWindow,IDC_BTN_Connect,addr szConnect
invoke GetDlgItem,hWindow,IDC_BTN_Connect
invoke EnableWindow,eax,FALSE
invoke MessageBox,hWindow,addr szUfxNotFound,addr szAttention,MB_OK or MB_ICONINFORMATION
.else
.REPEAT
xor eax,eax
mov ecx,50h
mov edi,offset FTDeviceStrSN
rep stosb
invoke FT_ListDevices,i,addr FTDeviceStrSN,FT_LIST_BY_INDEX or FT_OPEN_BY_SERIAL_NUMBER
.if (!EAX)
invoke FT_ListDevices,i,addr FTDeviceStrDES,FT_LIST_BY_INDEX or FT_OPEN_BY_DESCRIPTION
.if (!EAX)
mov eax,i
inc eax
invoke wsprintf,addr TempString ,addr szDesSN,eax,addr FTDeviceStrDES,addr FTDeviceStrSN
invoke SendDlgItemMessage,hWindow,IDC_CBO_SelDevice,CB_ADDSTRING,NULL,addr TempString
inc j
.endif
.endif
inc i
mov eax,i
.UNTIL (eax >= FTDeviceCount)
.if (j > 0)
invoke SendDlgItemMessage,hWindow,IDC_CBO_SelDevice,CB_SETCURSEL,0,NULL
invoke GetDlgItem,hWindow,IDC_BTN_Connect
invoke EnableWindow,eax,TRUE
.endif
.endif
.endif
.ELSEIF uMsg==WM_COMMAND
mov eax,wParam
and eax,0FFFFh
.if (eax == IDC_BTN_Close)
invoke SendMessage,hWindow,WM_CLOSE ,NULL,NULL
.elseif (eax == IDC_BTN_Refresh)
jmp @B
.elseif (eax == IDC_BTN_Connect)
mov eax,ftHandle
.if (EAX)
Init:
invoke FT_Close,ftHandle
.if (!EAX)
mov ftHandle,eax
invoke SetDlgItemText,hWindow,IDC_BTN_Connect,addr szConnect
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING ,0,addr szDeviceClosed
invoke SendDlgItemMessage,hWindow,IDC_EDT_SN ,EM_SETSEL,0,-1
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,WM_CLEAR,0,0
.endif
.else
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_RESETCONTENT,0,0
invoke SendDlgItemMessage,hWindow,IDC_EDT_SN,EM_SETSEL,0,-1
invoke SendDlgItemMessage,hWindow,IDC_EDT_SN,WM_CLEAR,0,0
invoke SendDlgItemMessage,hWindow,IDC_EDT_EnterSN,EM_SETSEL,0,-1
invoke SendDlgItemMessage,hWindow,IDC_EDT_EnterSN,WM_CLEAR,0,0
invoke SendDlgItemMessage,hWindow,IDC_CBO_SelDevice,CB_GETCURSEL,0,0
mov FTDeviceCount,eax
xor eax,eax
mov ecx,50h
mov edi,offset FTDeviceStrSN
rep stosb
invoke FT_ListDevices,FTDeviceCount,addr FTDeviceStrSN,FT_LIST_BY_INDEX or FT_OPEN_BY_SERIAL_NUMBER
or eax,eax
jnz Init
invoke FT_ListDevices,FTDeviceCount,addr FTDeviceStrDES,FT_LIST_BY_INDEX or FT_OPEN_BY_DESCRIPTION
or eax,eax
jnz Init
invoke FT_OpenEx,addr FTDeviceStrSN,FT_OPEN_BY_SERIAL_NUMBER,addr ftHandle
.if (EAX)
invoke FT_OpenEx,addr FTDeviceStrDES,FT_OPEN_BY_DESCRIPTION,addr ftHandle
.if (EAX)
invoke MessageBox,hWindow,addr szCanNotOpen,addr szError,MB_OK or MB_ICONERROR
jmp Init
.endif
.endif
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo1
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo2
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szInfo3
mov dword ptr TempString ,2D2D2Dh
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
invoke wsprintf,addr TempString ,addr szSNOpened,addr FTDeviceStrDES,addr FTDeviceStrSN
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
lea eax,FTDeviceStrSN
call Str2Int
invoke CheckBoxType,eax
.if (eax == BalckListBox)
lea eax,szBlackListSN
.elseif (eax == Tornado1Box)
lea eax,szTornado1
.elseif (eax == Tornado2Box)
lea eax,szTornado2
.elseif (eax == TwisterBox)
lea eax,szTwister
.elseif (eax == NBoxBox)
lea eax,szNBox
.elseif (eax == PowFlasherBox)
lea eax,szPowFlasher
.elseif (eax == SFlasherBox)
lea eax,szSFlasher
.else
lea eax,szUnknownBox
.endif
invoke wsprintf,addr TempString ,addr szManufacturer,eax
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
invoke FT_ResetDevice,ftHandle
or eax,eax
jnz Connected
invoke FT_SetTimeouts,ftHandle,2710h,2710h
or eax,eax
jnz Connected
invoke FT_ResetDevice,ftHandle
or eax,eax
jnz Connected
invoke FT_Purge,ftHandle,FT_PURGE_RX or FT_PURGE_TX
or eax,eax
jnz Connected
invoke FT_SetUSBParameters,ftHandle,8000h,8000h
or eax,eax
jnz Connected
invoke FT_SetEventNotification,ftHandle,FT_EVENT_RXCHAR,NULL
or eax,eax
jnz Connected
lea eax,FTDeviceStrSN
call Str2Int
lea edi,dword_40D504
mov [edi+0Ch],eax
mov byte ptr [edi+0Fh],6
lea edi,SHABuffer1
mov [edi],eax
invoke FT_SetDataCharacteristics,ftHandle,FT_DATA_BITS_8,FT_STOP_BITS_1,FT_PARITY_NONE
or eax,eax
jnz Connected
invoke FT_SetFlowControl,ftHandle,FT_FLOW_NONE,11h,13h
or eax,eax
jnz Connected
invoke FT_SetDivisor,ftHandle,4138h
or eax,eax
jnz Connected
invoke FT_ClrDtr,ftHandle
or eax,eax
jnz Connected
invoke FT_ClrRts,ftHandle
or eax,eax
jnz Connected
invoke FT_Purge,ftHandle,FT_PURGE_RX or FT_PURGE_TX
or eax,eax
jnz Connected
invoke Sleep,64h
invoke FT_SetRts,ftHandle
or eax,eax
jnz Connected
invoke Sleep,0C8h
invoke FT_ClrRts,ftHandle
or eax,eax
jnz Connected
invoke FT_SetRts,ftHandle
or eax,eax
jnz Connected
invoke FT_SetDtr,ftHandle
or eax,eax
jnz Connected
xor edi,edi
lea eax,FTInBuf
mov [eax],edi
lea eax,FTOutBuf
mov dword ptr [eax],3Fh ;Enter to BOOT
.REPEAT
invoke FT_Purge,ftHandle,FT_PURGE_RX or FT_PURGE_TX
invoke FT_Write,ftHandle,addr FTOutBuf,1,addr BytesWriten
invoke ReadBox,addr FTInBuf,2,10
cmp eax,2
jz @F
inc edi
.UNTIL (edi > 10)
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szCantIntoBoot
invoke MessageBox,hWindow,addr szNotCompatDevice,addr szError,MB_OK or MB_ICONERROR
jmp Init
@@:
lea esi,FTInBuf
movzx eax,byte ptr [esi]
movzx ebx,byte ptr [esi+1]
invoke wsprintf,addr TempString ,addr szInToBoot,eax,ebx
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
invoke SetDlgItemText,hWindow,IDC_EDT_SN,addr FTDeviceStrSN
invoke SetDlgItemText,hWindow,IDC_EDT_EnterSN,addr FTDeviceStrSN
lea edi,dword_40D504
lea esi,FTInBuf
mov ax,[esi]
mov [edi+4],ax
lea edi,FTOutBuf
mov byte ptr [edi],56h
invoke WriteThenRead,1,40h,100,1
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr FTInBuf
lea edi,FTOutBuf
mov byte ptr [edi],41h
invoke WriteThenRead,1,40h,100,1
lea esi,FTInBuf
mov al,[esi]
.if (al == 0FFh)
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr szFirmCleared
mov FirmwareCleared,1
.else
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr FTInBuf
mov FirmwareCleared,0
.endif
lea edi,FTOutBuf
mov word ptr [edi],1D55h ;Get Features
invoke WriteThenRead,2,3,100,0
lea esi,FTInBuf
movzx eax,byte ptr [esi+1]
mov ah,[esi]
invoke wsprintf,addr TempString ,addr szFeatures,eax
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
lea edi,FTOutBuf
mov word ptr [edi],1F55h ;Get 1F Section
invoke WriteThenRead,2,3,100,0
lea esi,FTInBuf
movzx eax,byte ptr [esi+1]
mov ah,[esi]
invoke wsprintf,addr TempString ,addr szSection,eax
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
lea edi,FTOutBuf
mov word ptr [edi],1C55h ;Get EEProm_SN_extension
invoke WriteThenRead,2,3,100,0
lea esi,FTInBuf
movzx ecx,byte ptr [esi+1]
mov ch,[esi]
push ecx
lea edi,FTOutBuf
mov byte ptr [edi],54h ;Get EEProm_SN
invoke WriteThenRead,1,3,100,0
lea esi,FTInBuf
movzx eax,byte ptr [esi+1]
mov ah,[esi]
push eax
invoke wsprintf,addr TempString ,addr szEEPromSN,eax,eax,ecx
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
pop ecx
pop eax
imul eax,0FDE8h
add eax,ecx
invoke wsprintf,addr TempString ,addr szEESN,eax,eax
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
lea edi,FTOutBuf
mov byte ptr [edi],53h ;Get FuseBits
invoke WriteThenRead,1,10,50,0
lea esi,FTInBuf
mov eax,[esi]
and eax,0FFFFFFh
mov FuseBits,eax
movzx eax,byte ptr [esi]
movzx ebx,byte ptr [esi+1]
movzx ecx,byte ptr [esi+2]
lea edi,dword_40D504
mov [edi+6],al
mov [edi+7],bl
mov [edi+8],cl
invoke wsprintf,addr TempString ,addr szFuseBits,eax,ebx,ecx
invoke SendDlgItemMessage,hWindow,IDC_LST_Info,LB_ADDSTRING,NULL,addr TempString
lea edi,FTOutBuf
mov word ptr [edi],1042h
invoke FT_Write,ftHandle,edi,2,addr BytesWriten
invoke Sleep,8
invoke FT_Purge,ftHandle,FT_PURGE_RX or FT_PURGE_TX
invoke FT_SetDivisor,ftHandle,50001Ah
invoke Sleep,32h
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh ;'>'
jz @F
lea edi,FTOutBuf
mov dword ptr [edi],1F1D1D4Ch
mov dword ptr [edi+4],980D02h
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jz @F
lea edi,FTOutBuf
mov dword ptr [edi],283EDC4Ch
mov dword ptr [edi+4],470D6Ah
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jz @F
lea edi,FTOutBuf
mov dword ptr [edi],283EDC4Ch
mov dword ptr [edi+4],480C6Ah
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jz @F
lea edi,FTOutBuf
mov dword ptr [edi],6D43D94Ch
mov dword ptr [edi+4],510224h
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jz @F
lea edi,FTOutBuf
mov dword ptr [edi],6D43D94Ch
mov dword ptr [edi+4],520124h
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jz @F
lea edi,FTOutBuf
mov dword ptr [edi],91EF8C4Ch
mov dword ptr [edi+4],0FD06F1h
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jz @F
lea edi,FTOutBuf
mov dword ptr [edi],91EF8C4Ch
mov dword ptr [edi+4],0FE05F1h
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jz @F
lea edi,FTOutBuf
mov dword ptr [edi],4152454Ch
mov dword ptr [edi+4],0D30154h
invoke WriteThenRead,7,1,20,1
lea esi,FTInBuf
movzx eax,byte ptr [esi]
cmp al,3Eh
jz @F
lea edi,FTOutBuf
mov dword ptr [edi],4152454Ch
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -