; -------------------------------------------------------------------------------- ; @Title: STR9 Flash Dialog for programming additional Flash bits. ; @Description: ; STR9 Flash Dialog for programming additional Flash bits, which are only ; accessible via an extra TAP ; @Author: WRD ; @Chip: STR91* ; @Copyright: (C) 1989-2022 Lauterbach GmbH, licensed for use with TRACE32(R) only ; -------------------------------------------------------------------------------- ; $Rev: 12049 $ ; $Id: str91x-isc.cmm 12049 2023-04-20 12:32:16Z bschroefel $ ; History: ; ; 2008-04-08, STK: ; - Correction in testing the different JTAG clock settings. ; ; 2008-01-30, STK: ; - Smaller bug fixed. ; - Support targets, that do not provide RTCK. ; ; 2007-09-26, STK: ; - New buttons for loading main and secondary flash content by a Intel ; hex file. ; - New button for storing the object file. The object file now must have ; the ending *.OBJ. ; - Modified OTP access. ; - "Program Sectors" and "Erase Sectors" buttons are only enabled, if at ; least one sector is selected to be programmed or erased. ; - Add default system option for the case, that they are changed by the user. ; ; 2007-07-09, STK: ; Flash content is read on startup, if the device is not locked. ; ; 2007-07-09, STK: ; - Added check, if the values in the edit fields are valid. ; - Bug fixed in "Update from Flash" function. ; ; 2007-07-04, STK: ; Public release. ; - New sub window for selecting the flash areas for programming replaces ; the three buttons for programming. ; - Target Power Down check added. This prevents a Practice Stack Overflow ; message. ; - Disabling buttons, when a sub window is open to keep the coherency ; between the windows. ; - Save termination of the main window added. ; ; 2007-06-15, STK: ; First test release. ; Create local macros LOCAL &id_code LOCAL &user_code LOCAL &configuration LOCAL &revision LOCAL &part_number LOCAL &manufacturer LOCAL &status LOCAL &file LOCAL &flashtype LOCAL &temp LOCAL &cpu LOCAL &vtref LOCAL &jtagclock &file_load="" &flashtype=4 ; Basic checks ; Checking CPU selection &cpu=SYStem.CPU() &cpu=STRing.MID("&cpu",0.,5.) IF "&cpu"!="STR91" ( ; Better check for STR9* DIALOG.OK "CPU selection not supported!" SYStem.View ENDDO ) IF SYStem.MODE()>=5 ( DIALOG.YESNO "This dialog need to close the current debug session! Proceed?" ENTRY &result IF !&result ENDDO ) WinCLEAR ; Settings for flash access SYStem.Down SYStem.Option TRST ON SYStem.Option EnReset ON SYStem.Option ResBreak OFF SYStem.Option WaitReset OFF SYStem.Option TURBO OFF ; Checking best JTAG clock settings ON ERROR GOSUB ( RETURN ) &jtagclock="RTCK" SYStem.JtagClock &jtagclock SYStem.Up IF SYStem.MODE()<5 ( PRINT "RTCK not available" PRINT "Trying 20MHz..." SYStem.JtagClock 20MHZ SYStem.Mode Attach IF SYStem.MODE()<5 ( PRINT "20MHz JTAG clock too high." PRINT "Trying 10MHz..." SYStem.JtagClock 10MHZ SYStem.Mode Attach IF SYStem.MODE()<5 ( PRINT "10MHz JTAG clock too high." PRINT "Trying 5MHz..." SYStem.JtagClock 5MHZ SYStem.Mode Attach IF SYStem.MODE()<5 ( PRINT "5MHz JTAG clock too high." PRINT "Trying 2MHz..." SYStem.JtagClock 2MHZ SYStem.Mode Attach IF SYStem.MODE()<5 ( PRINT "2MHz JTAG clock too high." PRINT "Trying 1MHz..." SYStem.JtagClock 1MHZ SYStem.Mode Attach IF SYStem.MODE()<5 ( PRINT "1MHz JTAG clock too high." PRINT "Trying 500KHz..." SYStem.JtagClock 500KHZ SYStem.Mode Attach IF SYStem.MODE()<5 ( PRINT "500KHz JTAG clock too high." PRINT "Trying 100KHz..." SYStem.JtagClock 100KHZ SYStem.Mode Attach IF SYStem.MODE()<5 ( DIALOG.OK "All JTAG setting have failed." "Please contact technical support!" END ) ELSE ( &jtagclock="100KHZ" ) ) ELSE ( &jtagclock="500KHZ" ) ) ELSE ( &jtagclock="1MHZ" ) ) ELSE ( &jtagclock="2MHZ" ) ) ELSE ( &jtagclock="5MHZ" ) ) ELSE ( &jtagclock="10MHZ" ) ) ELSE ( &jtagclock="20MHZ" ) ) ELSE ( &jtagclock="RTCK" ) ; Basic checks ON POWERDOWN GOSUB ( DIALOG.OK "Target Power Fail!" WinCLEAR END ) ON ERROR GOSUB ( ; Check Power Down ; Otherwise a practice overflow occurs &vtref=JTAG.PIN(VTREF) IF &vtref==0 ( DIALOG.OK "Target Power Fail!" WinCLEAR END ) IF SYStem.MODE()<5 ( DIALOG.OK "Unexpected error! System is down." WinCLEAR END ) SYStem.Mode Prepare RETURN ) SYStem.JtagClock 1MHz SYStem.Mode Prepare ; Checking ID code register of the flash TAP &id_code=Data.Long(DBG:0x00600000) ; Reading the ID code IF (&id_code!=0x4570041)&&(&id_code!=0x14570041) ( DIALOG.OK "The ID code of the flash does not match: "+FORMAT.HEX(8.,&id_code) SYStem.Down ENDDO ) &revision=(&id_code>>28.)&0xF &part_number=(&id_code>>12.)&0xFFFF &manufacturer=(&id_code>>1.)&0x7FF ; Clear VM memory Data.Set VM:0x0000000++0x520008 %Byte 0xFF Data.Set VM:0x0520000++0x000007 %Byte 0x00 Data.Set VM:0x0520008 %Byte 0x00 ; Creating the dialog WinPOS 50. 5. 70. 30. DIALOG.view (& HEADER "STR9 Flash Programming Settings" POS 3. 1. 10. 1. TEXT ""+FORMAT.HEX(8.,&id_code) POS 12. 1. 10. 1. TEXT "Revision:" POS 18. 1. 3. 1. TEXT ""+FORMAT.HEX(1.,&revision) POS 22. 1. 10. 1. TEXT "Part Number:" POS 31. 1. 8. 1. TEXT ""+FORMAT.HEX(4.,&part_number) POS 37. 1. 10. 1. TEXT "Manufacturer:" POS 46. 1. 4. 1. TEXT ""+FORMAT.HEX(3.,&manufacturer) POS 1. 0. 50. 3. BOX "Flash ID Code" POS 1. 3. 50. 3. BOX "User Code" POS 3. 4. 15. 1. EDIT_UC: EDIT "" "GOSUB UpdateUC" POS 1. 6. 50. 18. BOX "Configuration" POS 3. 8. 15. 1. CHK_OTP: CHECKBOX "OTP Lock" "GOSUB LockOTP" POS 20. 8. 15. 1. CHK_SEC: CHECKBOX "Secure Device" "GOSUB UpdateSec" POS 3. 10. 15. 1. CHK_LVDWS: CHECKBOX "LVD Warning Select" "GOSUB UpdateConfig" POS 20. 10. 15. 1. CHK_LVDRS: CHECKBOX "LVD Reset Select" "GOSUB UpdateConfig" POS 37. 10. 10. 1. CHK_LVDTH: CHECKBOX "LVD TH" "GOSUB UpdateConfig" POS 3. 12. 15. 1. TEXT "Bank 1 Sector Protection" POS 3. 13. 4. 1. CHK_B1SP0: CHECKBOX "0" "GOSUB UpdateConfig" POS 9. 13. 4. 1. CHK_B1SP1: CHECKBOX "1" "GOSUB UpdateConfig" POS 15. 13. 4. 1. CHK_B1SP2: CHECKBOX "2" "GOSUB UpdateConfig" POS 21. 13. 4. 1. CHK_B1SP3: CHECKBOX "3" "GOSUB UpdateConfig" POS 27. 13. 4. 1. CHK_B1SP4: CHECKBOX "4" "GOSUB UpdateConfig" POS 33. 13. 4. 1. CHK_B1SP5: CHECKBOX "5" "GOSUB UpdateConfig" POS 39. 13. 4. 1. CHK_B1SP6: CHECKBOX "6" "GOSUB UpdateConfig" POS 45. 13. 4. 1. CHK_B1SP7: CHECKBOX "7" "GOSUB UpdateConfig" POS 3. 15. 15. 1. TEXT "Bank 0 Sector Protection" POS 3. 16. 4. 1. CHK_B0SP0: CHECKBOX "0" "GOSUB UpdateConfig" POS 9. 16. 4. 1. CHK_B0SP1: CHECKBOX "1" "GOSUB UpdateConfig" POS 15. 16. 4. 1. CHK_B0SP2: CHECKBOX "2" "GOSUB UpdateConfig" POS 21. 16. 4. 1. CHK_B0SP3: CHECKBOX "3" "GOSUB UpdateConfig" POS 27. 16. 4. 1. CHK_B0SP4: CHECKBOX "4" "GOSUB UpdateConfig" POS 33. 16. 4. 1. CHK_B0SP5: CHECKBOX "5" "GOSUB UpdateConfig" POS 39. 16. 4. 1. CHK_B0SP6: CHECKBOX "6" "GOSUB UpdateConfig" POS 45. 16. 4. 1. CHK_B0SP7: CHECKBOX "7" "GOSUB UpdateConfig" POS 3. 17. 4. 1. CHK_B0SP8: CHECKBOX "8" "GOSUB UpdateConfig" POS 9. 17. 4. 1. CHK_B0SP9: CHECKBOX "9" "GOSUB UpdateConfig" POS 15. 17. 4. 1. CHK_B0SP10: CHECKBOX "10" "GOSUB UpdateConfig" POS 21. 17. 4. 1. CHK_B0SP11: CHECKBOX "11" "GOSUB UpdateConfig" POS 27. 17. 4. 1. CHK_B0SP12: CHECKBOX "12" "GOSUB UpdateConfig" POS 33. 17. 4. 1. CHK_B0SP13: CHECKBOX "13" "GOSUB UpdateConfig" POS 39. 17. 4. 1. CHK_B0SP14: CHECKBOX "14" "GOSUB UpdateConfig" POS 45. 17. 4. 1. CHK_B0SP15: CHECKBOX "15" "GOSUB UpdateConfig" POS 3. 18. 4. 1. CHK_B0SP16: CHECKBOX "16" "GOSUB UpdateConfig" POS 9. 18. 4. 1. CHK_B0SP17: CHECKBOX "17" "GOSUB UpdateConfig" POS 15. 18. 4. 1. CHK_B0SP18: CHECKBOX "18" "GOSUB UpdateConfig" POS 21. 18. 4. 1. CHK_B0SP19: CHECKBOX "19" "GOSUB UpdateConfig" POS 27. 18. 4. 1. CHK_B0SP20: CHECKBOX "20" "GOSUB UpdateConfig" POS 33. 18. 4. 1. CHK_B0SP21: CHECKBOX "21" "GOSUB UpdateConfig" POS 39. 18. 4. 1. CHK_B0SP22: CHECKBOX "22" "GOSUB UpdateConfig" POS 45. 18. 4. 1. CHK_B0SP23: CHECKBOX "23" "GOSUB UpdateConfig" POS 3. 19. 4. 1. CHK_B0SP24: CHECKBOX "24" "GOSUB UpdateConfig" POS 9. 19. 4. 1. CHK_B0SP25: CHECKBOX "25" "GOSUB UpdateConfig" POS 15. 19. 4. 1. CHK_B0SP26: CHECKBOX "26" "GOSUB UpdateConfig" POS 21. 19. 4. 1. CHK_B0SP27: CHECKBOX "27" "GOSUB UpdateConfig" POS 27. 19. 4. 1. CHK_B0SP28: CHECKBOX "28" "GOSUB UpdateConfig" POS 33. 19. 4. 1. CHK_B0SP29: CHECKBOX "29" "GOSUB UpdateConfig" POS 39. 19. 4. 1. CHK_B0SP30: CHECKBOX "30" "GOSUB UpdateConfig" POS 45. 19. 4. 1. CHK_B0SP31: CHECKBOX "31" "GOSUB UpdateConfig" POS 3. 21. 10. 1. TEXT "Boot Flash Bank:" POS 16. 21. 12. 1. CHSB.B0: CHOOSEBOX "Flash Bank 0" "GOSUB UpdateConfig" CHSB.B1: CHOOSEBOX "Flash Bank 1" "GOSUB UpdateConfig" POS 1. 24. 50. 6. BOX "OTP" POS 3. 25. 4. 1. TEXT "0x00" POS 7. 25. 4. 1. EDIT_OTP00: EDIT "" "GOSUB UpdateOTP" POS 12. 25. 4. 1. EDIT_OTP01: EDIT "" "GOSUB UpdateOTP" POS 17. 25. 4. 1. EDIT_OTP02: EDIT "" "GOSUB UpdateOTP" POS 22. 25. 4. 1. EDIT_OTP03: EDIT "" "GOSUB UpdateOTP" POS 27. 25. 4. 1. EDIT_OTP04: EDIT "" "GOSUB UpdateOTP" POS 32. 25. 4. 1. EDIT_OTP05: EDIT "" "GOSUB UpdateOTP" POS 37. 25. 4. 1. EDIT_OTP06: EDIT "" "GOSUB UpdateOTP" POS 42. 25. 4. 1. EDIT_OTP07: EDIT "" "GOSUB UpdateOTP" POS 3. 26. 4. 1. TEXT "0x08" POS 7. 26. 4. 1. EDIT_OTP08: EDIT "" "GOSUB UpdateOTP" POS 12. 26. 4. 1. EDIT_OTP09: EDIT "" "GOSUB UpdateOTP" POS 17. 26. 4. 1. EDIT_OTP0A: EDIT "" "GOSUB UpdateOTP" POS 22. 26. 4. 1. EDIT_OTP0B: EDIT "" "GOSUB UpdateOTP" POS 27. 26. 4. 1. EDIT_OTP0C: EDIT "" "GOSUB UpdateOTP" POS 32. 26. 4. 1. EDIT_OTP0D: EDIT "" "GOSUB UpdateOTP" POS 37. 26. 4. 1. EDIT_OTP0E: EDIT "" "GOSUB UpdateOTP" POS 42. 26. 4. 1. EDIT_OTP0F: EDIT "" "GOSUB UpdateOTP" POS 3. 27. 4. 1. TEXT "0x10" POS 7. 27. 4. 1. EDIT_OTP10: EDIT "" "GOSUB UpdateOTP" POS 12. 27. 4. 1. EDIT_OTP11: EDIT "" "GOSUB UpdateOTP" POS 17. 27. 4. 1. EDIT_OTP12: EDIT "" "GOSUB UpdateOTP" POS 22. 27. 4. 1. EDIT_OTP13: EDIT "" "GOSUB UpdateOTP" POS 27. 27. 4. 1. EDIT_OTP14: EDIT "" "GOSUB UpdateOTP" POS 32. 27. 4. 1. EDIT_OTP15: EDIT "" "GOSUB UpdateOTP" POS 37. 27. 4. 1. EDIT_OTP16: EDIT "" "GOSUB UpdateOTP" POS 42. 27. 4. 1. EDIT_OTP17: EDIT "" "GOSUB UpdateOTP" POS 3. 28. 4. 1. TEXT "0x18" POS 7. 28. 4. 1. EDIT_OTP18: EDIT "" "GOSUB UpdateOTP" POS 12. 28. 4. 1. EDIT_OTP19: EDIT "" "GOSUB UpdateOTP" POS 17. 28. 4. 1. EDIT_OTP1A: EDIT "" "GOSUB UpdateOTP" POS 22. 28. 4. 1. EDIT_OTP1B: EDIT "" "GOSUB UpdateOTP" POS 27. 28. 4. 1. EDIT_OTP1C: EDIT "" "GOSUB UpdateOTP" POS 32. 28. 4. 1. EDIT_OTP1D: EDIT "" "GOSUB UpdateOTP" POS 37. 28. 4. 1. EDIT_OTP1E: EDIT "" "GOSUB UpdateOTP" POS 42. 28. 4. 1. EDIT_OTP1F: EDIT "" "GOSUB UpdateOTP" POS 53. 0. 16. 6. BOX "" POS 54. 1. 14. 1. BT_PROG: BUTTON "Program Flash..." "GOSUB ProgramFlashDialog" POS 54. 4. 14. 1. BT_ERASE: BUTTON "Erase Flash..." "GOSUB EraseFlashDialog" POS 53. 6. 16. 14. BOX "" POS 54. 7. 14. 1. BT_LOAD: BUTTON "Load OBJ File..." "GOSUB LoadOBJ" POS 54. 9. 14. 1. BT_LOAD_B0: BUTTON "Load Main Flash..." "GOSUB LoadMainFlash" POS 54. 11. 14. 1. BT_LOAD_B1: BUTTON "Load Secondary Flash..." "GOSUB LoadSecondaryFlash" POS 54. 13. 14. 1. BT_SAVE: BUTTON "Save OBJ File..." "GOSUB SaveOBJ" POS 54. 16. 14. 1. BT_UPDATE: BUTTON "Update From Flash" "GOSUB UpdateFromFlash" POS 54. 18. 14. 1. BT_VIEW: BUTTON "View OBJ File..." "GOSUB ViewOBJ" POS 53. 24. 16. 3. BOX "Flash Type" POS 54. 25. 14. 1. COMB.SEL: COMBOBOX "STR91xFAxx2,STR91xFAxx4,STR91xFAxx6,STR91xFAxx7" "GOSUB CheckFlashType" CLOSE "CONTinue" ) ; Update data ; Try autodetect flash settings: DIALOG.Set COMB.SEL "STR91xFAxx4" &cpu=SYStem.CPU() IF (STRing.LENgth("&cpu")==11.) ( &cpu=STRing.MID("&cpu",10.,1.) IF "&cpu"=="2" ( DIALOG.Set COMB.SEL "STR91xFAxx2" &flashtype=2 ) ELSE IF "&cpu"=="4" ( DIALOG.Set COMB.SEL "STR91xFAxx4" &flashtype=4 ) ELSE IF "&cpu"=="6" ( DIALOG.Set COMB.SEL "STR91xFAxx6" &flashtype=6 ) ELSE ( DIALOG.Set COMB.SEL "STR91xFAxx7" &flashtype=7 ) ) &status=Data.Byte(DBG:0x600004) GOSUB UpdateConfigFromFlash GOSUB CheckFlashType GOSUB SecureCheck ; Wait until The close button was pressed. STOP DIALOG.END SYStem.Down ENDDO ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Erase Flash Dialog ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EraseFlashDialog: &status=Data.Byte(DBG:0x600004) ; Check, if device locked, then immediatly perform a full chip erase. IF (&status&0x40)!=0 ( GOSUB FullChipErase Data.Set DBG:0x600004 %Byte 0x00 GOSUB SecureCheck RETURN ) ; Disable Buttons in the main window to keep the coherency between the two windows. DIALOG.Disable BT_PROG DIALOG.Disable BT_ERASE DIALOG.Disable BT_LOAD DIALOG.Disable BT_LOAD_B0 DIALOG.Disable BT_LOAD_B1 DIALOG.Disable BT_SAVE DIALOG.Disable BT_UPDATE DIALOG.Disable BT_VIEW DIALOG.Disable COMB.SEL ; Open the dialog WinPOS 55. 10. 60. 16. DIALOG.view (& HEADER "STR9 Flash erase" POS 1. 0. 58. 14. BOX "Sector Selection" POS 7. 2. 5. 1. CHK_EOTP: CHECKBOX "OTP" "GOSUB EraseUpdateWindow" POS 24. 2. 14. 1. CHK_ECONF: CHECKBOX "Configuration" "GOSUB EraseUpdateWindow" POS 43. 2. 14. 1. CHK_EUC: CHECKBOX "User Code" "GOSUB EraseUpdateWindow" POS 7. 4. 15. 1. TEXT "Bank 1 Sector Erase" POS 7. 5. 4. 1. CHK_EB1SP0: CHECKBOX "0" "GOSUB EraseUpdateWindow" POS 13. 5. 4. 1. CHK_EB1SP1: CHECKBOX "1" "GOSUB EraseUpdateWindow" POS 19. 5. 4. 1. CHK_EB1SP2: CHECKBOX "2" "GOSUB EraseUpdateWindow" POS 25. 5. 4. 1. CHK_EB1SP3: CHECKBOX "3" "GOSUB EraseUpdateWindow" POS 31. 5. 4. 1. CHK_EB1SP4: CHECKBOX "4" "GOSUB EraseUpdateWindow" POS 37. 5. 4. 1. CHK_EB1SP5: CHECKBOX "5" "GOSUB EraseUpdateWindow" POS 43. 5. 4. 1. CHK_EB1SP6: CHECKBOX "6" "GOSUB EraseUpdateWindow" POS 49. 5. 4. 1. CHK_EB1SP7: CHECKBOX "7" "GOSUB EraseUpdateWindow" POS 7. 7. 15. 1. TEXT "Bank 0 Sector Erase" POS 7. 8. 4. 1. CHK_EB0SP0: CHECKBOX "0" "GOSUB EraseUpdateWindow" POS 13. 8. 4. 1. CHK_EB0SP1: CHECKBOX "1" "GOSUB EraseUpdateWindow" POS 19. 8. 4. 1. CHK_EB0SP2: CHECKBOX "2" "GOSUB EraseUpdateWindow" POS 25. 8. 4. 1. CHK_EB0SP3: CHECKBOX "3" "GOSUB EraseUpdateWindow" POS 31. 8. 4. 1. CHK_EB0SP4: CHECKBOX "4" "GOSUB EraseUpdateWindow" POS 37. 8. 4. 1. CHK_EB0SP5: CHECKBOX "5" "GOSUB EraseUpdateWindow" POS 43. 8. 4. 1. CHK_EB0SP6: CHECKBOX "6" "GOSUB EraseUpdateWindow" POS 49. 8. 4. 1. CHK_EB0SP7: CHECKBOX "7" "GOSUB EraseUpdateWindow" POS 7. 9. 4. 1. CHK_EB0SP8: CHECKBOX "8" "GOSUB EraseUpdateWindow" POS 13. 9. 4. 1. CHK_EB0SP9: CHECKBOX "9" "GOSUB EraseUpdateWindow" POS 19. 9. 4. 1. CHK_EB0SP10: CHECKBOX "10" "GOSUB EraseUpdateWindow" POS 25. 9. 4. 1. CHK_EB0SP11: CHECKBOX "11" "GOSUB EraseUpdateWindow" POS 31. 9. 4. 1. CHK_EB0SP12: CHECKBOX "12" "GOSUB EraseUpdateWindow" POS 37. 9. 4. 1. CHK_EB0SP13: CHECKBOX "13" "GOSUB EraseUpdateWindow" POS 43. 9. 4. 1. CHK_EB0SP14: CHECKBOX "14" "GOSUB EraseUpdateWindow" POS 49. 9. 4. 1. CHK_EB0SP15: CHECKBOX "15" "GOSUB EraseUpdateWindow" POS 7. 10. 4. 1. CHK_EB0SP16: CHECKBOX "16" "GOSUB EraseUpdateWindow" POS 13. 10. 4. 1. CHK_EB0SP17: CHECKBOX "17" "GOSUB EraseUpdateWindow" POS 19. 10. 4. 1. CHK_EB0SP18: CHECKBOX "18" "GOSUB EraseUpdateWindow" POS 25. 10. 4. 1. CHK_EB0SP19: CHECKBOX "19" "GOSUB EraseUpdateWindow" POS 31. 10. 4. 1. CHK_EB0SP20: CHECKBOX "20" "GOSUB EraseUpdateWindow" POS 37. 10. 4. 1. CHK_EB0SP21: CHECKBOX "21" "GOSUB EraseUpdateWindow" POS 43. 10. 4. 1. CHK_EB0SP22: CHECKBOX "22" "GOSUB EraseUpdateWindow" POS 49. 10. 4. 1. CHK_EB0SP23: CHECKBOX "23" "GOSUB EraseUpdateWindow" POS 7. 11. 4. 1. CHK_EB0SP24: CHECKBOX "24" "GOSUB EraseUpdateWindow" POS 13. 11. 4. 1. CHK_EB0SP25: CHECKBOX "25" "GOSUB EraseUpdateWindow" POS 19. 11. 4. 1. CHK_EB0SP26: CHECKBOX "26" "GOSUB EraseUpdateWindow" POS 25. 11. 4. 1. CHK_EB0SP27: CHECKBOX "27" "GOSUB EraseUpdateWindow" POS 31. 11. 4. 1. CHK_EB0SP28: CHECKBOX "28" "GOSUB EraseUpdateWindow" POS 37. 11. 4. 1. CHK_EB0SP29: CHECKBOX "29" "GOSUB EraseUpdateWindow" POS 43. 11. 4. 1. CHK_EB0SP30: CHECKBOX "30" "GOSUB EraseUpdateWindow" POS 49. 11. 4. 1. CHK_EB0SP31: CHECKBOX "31" "GOSUB EraseUpdateWindow" POS 1. 14. 13. 1. BT_ERASESEC: BUTTON "Erase Sectors" ( GOSUB SectorErase CONTinue ) POS 15. 14. 13. 1. BUTTON "Full Chip Erase" ( GOSUB FullChipErase CONTinue ) POS 32. 14. 13. 1. BUTTON "Select All" "GOSUB EraseSelectAll" POS 46. 14. 13. 1. BUTTON "Select None" "GOSUB EraseSelectNone" CLOSE "CONTinue" ) GOSUB EraseUpdateWindow IF (&flashtype==2) ( ; Bank 0 settings DIALOG.Disable CHK_EB0SP4 DIALOG.Disable CHK_EB0SP5 DIALOG.Disable CHK_EB0SP6 DIALOG.Disable CHK_EB0SP7 DIALOG.Disable CHK_EB0SP8 DIALOG.Disable CHK_EB0SP9 DIALOG.Disable CHK_EB0SP10 DIALOG.Disable CHK_EB0SP11 DIALOG.Disable CHK_EB0SP12 DIALOG.Disable CHK_EB0SP13 DIALOG.Disable CHK_EB0SP14 DIALOG.Disable CHK_EB0SP15 DIALOG.Disable CHK_EB0SP16 DIALOG.Disable CHK_EB0SP17 DIALOG.Disable CHK_EB0SP18 DIALOG.Disable CHK_EB0SP19 DIALOG.Disable CHK_EB0SP20 DIALOG.Disable CHK_EB0SP21 DIALOG.Disable CHK_EB0SP22 DIALOG.Disable CHK_EB0SP23 DIALOG.Disable CHK_EB0SP24 DIALOG.Disable CHK_EB0SP25 DIALOG.Disable CHK_EB0SP26 DIALOG.Disable CHK_EB0SP27 DIALOG.Disable CHK_EB0SP28 DIALOG.Disable CHK_EB0SP29 DIALOG.Disable CHK_EB0SP30 DIALOG.Disable CHK_EB0SP31 DIALOG.Set CHK_EB0SP4 " " DIALOG.Set CHK_EB0SP5 " " DIALOG.Set CHK_EB0SP6 " " DIALOG.Set CHK_EB0SP7 " " DIALOG.Set CHK_EB0SP8 " " DIALOG.Set CHK_EB0SP9 " " DIALOG.Set CHK_EB0SP10 " " DIALOG.Set CHK_EB0SP11 " " DIALOG.Set CHK_EB0SP12 " " DIALOG.Set CHK_EB0SP13 " " DIALOG.Set CHK_EB0SP14 " " DIALOG.Set CHK_EB0SP15 " " DIALOG.Set CHK_EB0SP16 " " DIALOG.Set CHK_EB0SP16 " " DIALOG.Set CHK_EB0SP18 " " DIALOG.Set CHK_EB0SP19 " " DIALOG.Set CHK_EB0SP20 " " DIALOG.Set CHK_EB0SP21 " " DIALOG.Set CHK_EB0SP22 " " DIALOG.Set CHK_EB0SP23 " " DIALOG.Set CHK_EB0SP24 " " DIALOG.Set CHK_EB0SP25 " " DIALOG.Set CHK_EB0SP26 " " DIALOG.Set CHK_EB0SP27 " " DIALOG.Set CHK_EB0SP28 " " DIALOG.Set CHK_EB0SP29 " " DIALOG.Set CHK_EB0SP30 " " DIALOG.Set CHK_EB0SP31 " " ; Bank 1 settings DIALOG.Disable CHK_EB1SP4 DIALOG.Disable CHK_EB1SP5 DIALOG.Disable CHK_EB1SP6 DIALOG.Disable CHK_EB1SP7 DIALOG.Set CHK_EB1SP4 " " DIALOG.Set CHK_EB1SP5 " " DIALOG.Set CHK_EB1SP6 " " DIALOG.Set CHK_EB1SP7 " " ) ELSE IF (&flashtype==4) ( ; Bank 0 settings DIALOG.Enable CHK_EB0SP4 DIALOG.Enable CHK_EB0SP5 DIALOG.Enable CHK_EB0SP6 DIALOG.Enable CHK_EB0SP7 DIALOG.Disable CHK_EB0SP8 DIALOG.Disable CHK_EB0SP9 DIALOG.Disable CHK_EB0SP10 DIALOG.Disable CHK_EB0SP11 DIALOG.Disable CHK_EB0SP12 DIALOG.Disable CHK_EB0SP13 DIALOG.Disable CHK_EB0SP14 DIALOG.Disable CHK_EB0SP15 DIALOG.Disable CHK_EB0SP16 DIALOG.Disable CHK_EB0SP17 DIALOG.Disable CHK_EB0SP18 DIALOG.Disable CHK_EB0SP19 DIALOG.Disable CHK_EB0SP20 DIALOG.Disable CHK_EB0SP21 DIALOG.Disable CHK_EB0SP22 DIALOG.Disable CHK_EB0SP23 DIALOG.Disable CHK_EB0SP24 DIALOG.Disable CHK_EB0SP25 DIALOG.Disable CHK_EB0SP26 DIALOG.Disable CHK_EB0SP27 DIALOG.Disable CHK_EB0SP28 DIALOG.Disable CHK_EB0SP29 DIALOG.Disable CHK_EB0SP30 DIALOG.Disable CHK_EB0SP31 DIALOG.Set CHK_EB0SP8 " " DIALOG.Set CHK_EB0SP9 " " DIALOG.Set CHK_EB0SP10 " " DIALOG.Set CHK_EB0SP11 " " DIALOG.Set CHK_EB0SP12 " " DIALOG.Set CHK_EB0SP13 " " DIALOG.Set CHK_EB0SP14 " " DIALOG.Set CHK_EB0SP15 " " DIALOG.Set CHK_EB0SP16 " " DIALOG.Set CHK_EB0SP16 " " DIALOG.Set CHK_EB0SP18 " " DIALOG.Set CHK_EB0SP19 " " DIALOG.Set CHK_EB0SP20 " " DIALOG.Set CHK_EB0SP21 " " DIALOG.Set CHK_EB0SP22 " " DIALOG.Set CHK_EB0SP23 " " DIALOG.Set CHK_EB0SP24 " " DIALOG.Set CHK_EB0SP25 " " DIALOG.Set CHK_EB0SP26 " " DIALOG.Set CHK_EB0SP27 " " DIALOG.Set CHK_EB0SP28 " " DIALOG.Set CHK_EB0SP29 " " DIALOG.Set CHK_EB0SP30 " " DIALOG.Set CHK_EB0SP31 " " ; Bank 1 settings DIALOG.Disable CHK_EB1SP4 DIALOG.Disable CHK_EB1SP5 DIALOG.Disable CHK_EB1SP6 DIALOG.Disable CHK_EB1SP7 DIALOG.Set CHK_EB1SP4 " " DIALOG.Set CHK_EB1SP5 " " DIALOG.Set CHK_EB1SP6 " " DIALOG.Set CHK_EB1SP7 " " ) ELSE IF (&flashtype==6) ( ; Bank 0 settings DIALOG.Enable CHK_EB0SP4 DIALOG.Enable CHK_EB0SP5 DIALOG.Enable CHK_EB0SP6 DIALOG.Enable CHK_EB0SP7 DIALOG.Enable CHK_EB0SP8 DIALOG.Enable CHK_EB0SP9 DIALOG.Enable CHK_EB0SP10 DIALOG.Enable CHK_EB0SP11 DIALOG.Enable CHK_EB0SP12 DIALOG.Enable CHK_EB0SP13 DIALOG.Enable CHK_EB0SP14 DIALOG.Enable CHK_EB0SP15 DIALOG.Disable CHK_EB0SP16 DIALOG.Disable CHK_EB0SP17 DIALOG.Disable CHK_EB0SP18 DIALOG.Disable CHK_EB0SP19 DIALOG.Disable CHK_EB0SP20 DIALOG.Disable CHK_EB0SP21 DIALOG.Disable CHK_EB0SP22 DIALOG.Disable CHK_EB0SP23 DIALOG.Disable CHK_EB0SP24 DIALOG.Disable CHK_EB0SP25 DIALOG.Disable CHK_EB0SP26 DIALOG.Disable CHK_EB0SP27 DIALOG.Disable CHK_EB0SP28 DIALOG.Disable CHK_EB0SP29 DIALOG.Disable CHK_EB0SP30 DIALOG.Disable CHK_EB0SP31 DIALOG.Set CHK_EB0SP16 " " DIALOG.Set CHK_EB0SP16 " " DIALOG.Set CHK_EB0SP18 " " DIALOG.Set CHK_EB0SP19 " " DIALOG.Set CHK_EB0SP20 " " DIALOG.Set CHK_EB0SP21 " " DIALOG.Set CHK_EB0SP22 " " DIALOG.Set CHK_EB0SP23 " " DIALOG.Set CHK_EB0SP24 " " DIALOG.Set CHK_EB0SP25 " " DIALOG.Set CHK_EB0SP26 " " DIALOG.Set CHK_EB0SP27 " " DIALOG.Set CHK_EB0SP28 " " DIALOG.Set CHK_EB0SP29 " " DIALOG.Set CHK_EB0SP30 " " DIALOG.Set CHK_EB0SP31 " " ; Bank 1 settings DIALOG.Enable CHK_EB1SP4 DIALOG.Enable CHK_EB1SP5 DIALOG.Enable CHK_EB1SP6 DIALOG.Enable CHK_EB1SP7 ) ELSE IF (&flashtype==7) ( ; Bank 0 settings DIALOG.Enable CHK_EB0SP4 DIALOG.Enable CHK_EB0SP5 DIALOG.Enable CHK_EB0SP6 DIALOG.Enable CHK_EB0SP7 DIALOG.Enable CHK_EB0SP8 DIALOG.Enable CHK_EB0SP9 DIALOG.Enable CHK_EB0SP10 DIALOG.Enable CHK_EB0SP11 DIALOG.Enable CHK_EB0SP12 DIALOG.Enable CHK_EB0SP13 DIALOG.Enable CHK_EB0SP14 DIALOG.Enable CHK_EB0SP15 DIALOG.Enable CHK_EB0SP16 DIALOG.Enable CHK_EB0SP17 DIALOG.Enable CHK_EB0SP18 DIALOG.Enable CHK_EB0SP19 DIALOG.Enable CHK_EB0SP20 DIALOG.Enable CHK_EB0SP21 DIALOG.Enable CHK_EB0SP22 DIALOG.Enable CHK_EB0SP23 DIALOG.Enable CHK_EB0SP24 DIALOG.Enable CHK_EB0SP25 DIALOG.Enable CHK_EB0SP26 DIALOG.Enable CHK_EB0SP27 DIALOG.Enable CHK_EB0SP28 DIALOG.Enable CHK_EB0SP29 DIALOG.Enable CHK_EB0SP30 DIALOG.Enable CHK_EB0SP31 ; Bank 1 settings DIALOG.Enable CHK_EB1SP4 DIALOG.Enable CHK_EB1SP5 DIALOG.Enable CHK_EB1SP6 DIALOG.Enable CHK_EB1SP7 ) STOP EraseDialogClose: DIALOG.END ; Reenable the dialog buttons. DIALOG.Enable BT_PROG DIALOG.Enable BT_ERASE DIALOG.Enable BT_LOAD DIALOG.Enable BT_LOAD_B0 DIALOG.Enable BT_LOAD_B1 DIALOG.Enable BT_SAVE DIALOG.Enable BT_UPDATE DIALOG.Enable BT_VIEW DIALOG.Enable COMB.SEL Data.Set DBG:0x600004 %Byte 0x00 GOSUB SecureCheck RETURN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Program Flash Dialog ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ProgramFlashDialog: ; Disable buttons in the main window to keep the coherency between the two windows. DIALOG.Disable BT_PROG DIALOG.Disable BT_ERASE DIALOG.Disable BT_LOAD DIALOG.Disable BT_LOAD_B0 DIALOG.Disable BT_LOAD_B1 DIALOG.Disable BT_SAVE DIALOG.Disable BT_UPDATE DIALOG.Disable BT_VIEW DIALOG.Disable COMB.SEL ; Open the dialog WinPOS 60. 10. 36. 13. DIALOG.view (& HEADER "Select Sectors" POS 1. 0. 20. 13. BOX "Sector Selection" POS 4. 2. 11. 1. CHK_POTP: CHECKBOX "OTP" "GOSUB ProgramUpdateWindow" POS 4. 4. 11. 1. CHK_PCONF: CHECKBOX "Configuration" "GOSUB ProgramUpdateWindow" POS 4. 6. 11. 1. CHK_PUC: CHECKBOX "User Code" "GOSUB ProgramUpdateWindow" POS 4. 8. 11. 1. CHK_PB0: CHECKBOX "Flash Bank 0" "GOSUB ProgramUpdateWindow" POS 4. 10. 11. 1. CHK_PB1: CHECKBOX "Flash Bank 1" "GOSUB ProgramUpdateWindow" POS 22. 1. 13. 1. BT_PROGSEC: BUTTON "Program Sectors" ( GOSUB Program CONTinue ) POS 22. 5 13. 1. BUTTON "Select All" "GOSUB ProgramSelectAll" POS 22. 7. 13. 1. BUTTON "Select None" "GOSUB ProgramSelectNone" CLOSE "CONTinue" ) GOSUB ProgramUpdateWindow STOP ProgramDialogClose: DIALOG.END ; Reenable the dialog buttons. DIALOG.Enable BT_PROG DIALOG.Enable BT_ERASE DIALOG.Enable BT_LOAD DIALOG.Enable BT_LOAD_B0 DIALOG.Enable BT_LOAD_B1 DIALOG.Enable BT_SAVE DIALOG.Enable BT_UPDATE DIALOG.Enable BT_VIEW DIALOG.Enable COMB.SEL GOSUB SecureCheck RETURN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Lock GUI Elements, if device is secured ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SecureCheck: &status=Data.Byte(DBG:0x600004) IF (&status&0x40)==0 ( ; Device is unsecured DIALOG.Enable EDIT_UC &configuration=Data.Quad(DBG:0x520000) IF (&configuration&0x8000000000000000)!=0x0 ( DIALOG.Disable CHK_OTP DIALOG.Disable EDIT_OTP00 DIALOG.Disable EDIT_OTP01 DIALOG.Disable EDIT_OTP02 DIALOG.Disable EDIT_OTP03 DIALOG.Disable EDIT_OTP04 DIALOG.Disable EDIT_OTP05 DIALOG.Disable EDIT_OTP06 DIALOG.Disable EDIT_OTP07 DIALOG.Disable EDIT_OTP08 DIALOG.Disable EDIT_OTP09 DIALOG.Disable EDIT_OTP0A DIALOG.Disable EDIT_OTP0B DIALOG.Disable EDIT_OTP0C DIALOG.Disable EDIT_OTP0D DIALOG.Disable EDIT_OTP0E DIALOG.Disable EDIT_OTP0F DIALOG.Disable EDIT_OTP10 DIALOG.Disable EDIT_OTP11 DIALOG.Disable EDIT_OTP12 DIALOG.Disable EDIT_OTP13 DIALOG.Disable EDIT_OTP14 DIALOG.Disable EDIT_OTP15 DIALOG.Disable EDIT_OTP16 DIALOG.Disable EDIT_OTP17 DIALOG.Disable EDIT_OTP18 DIALOG.Disable EDIT_OTP19 DIALOG.Disable EDIT_OTP1A DIALOG.Disable EDIT_OTP1B DIALOG.Disable EDIT_OTP1C DIALOG.Disable EDIT_OTP1D DIALOG.Disable EDIT_OTP1E DIALOG.Disable EDIT_OTP1F ) ELSE ( ;DIALOG.ENABLE CHK_OTP DIALOG.Disable CHK_OTP DIALOG.Enable EDIT_OTP00 DIALOG.Enable EDIT_OTP01 DIALOG.Enable EDIT_OTP02 DIALOG.Enable EDIT_OTP03 DIALOG.Enable EDIT_OTP04 DIALOG.Enable EDIT_OTP05 DIALOG.Enable EDIT_OTP06 DIALOG.Enable EDIT_OTP07 DIALOG.Enable EDIT_OTP08 DIALOG.Enable EDIT_OTP09 DIALOG.Enable EDIT_OTP0A DIALOG.Enable EDIT_OTP0B DIALOG.Enable EDIT_OTP0C DIALOG.Enable EDIT_OTP0D DIALOG.Enable EDIT_OTP0E DIALOG.Enable EDIT_OTP0F DIALOG.Enable EDIT_OTP10 DIALOG.Enable EDIT_OTP11 DIALOG.Enable EDIT_OTP12 DIALOG.Enable EDIT_OTP13 DIALOG.Enable EDIT_OTP14 DIALOG.Enable EDIT_OTP15 DIALOG.Enable EDIT_OTP16 DIALOG.Enable EDIT_OTP17 DIALOG.Enable EDIT_OTP18 DIALOG.Enable EDIT_OTP19 DIALOG.Enable EDIT_OTP1A DIALOG.Enable EDIT_OTP1B DIALOG.Enable EDIT_OTP1C DIALOG.Enable EDIT_OTP1D DIALOG.Enable EDIT_OTP1E DIALOG.Enable EDIT_OTP1F ) DIALOG.Enable CHK_LVDWS DIALOG.Enable CHK_LVDRS DIALOG.Enable CHK_LVDTH DIALOG.Enable CHK_B1SP0 DIALOG.Enable CHK_B1SP1 DIALOG.Enable CHK_B1SP2 DIALOG.Enable CHK_B1SP3 DIALOG.Enable CHK_B0SP0 DIALOG.Enable CHK_B0SP1 DIALOG.Enable CHK_B0SP2 DIALOG.Enable CHK_B0SP3 IF &flashtype>=4 ( DIALOG.Enable CHK_B0SP4 DIALOG.Enable CHK_B0SP5 DIALOG.Enable CHK_B0SP6 DIALOG.Enable CHK_B0SP7 ) IF &flashtype>=6 ( DIALOG.Enable CHK_B0SP8 DIALOG.Enable CHK_B0SP9 DIALOG.Enable CHK_B0SP10 DIALOG.Enable CHK_B0SP11 DIALOG.Enable CHK_B0SP12 DIALOG.Enable CHK_B0SP13 DIALOG.Enable CHK_B0SP14 DIALOG.Enable CHK_B0SP15 DIALOG.Enable CHK_B1SP4 DIALOG.Enable CHK_B1SP5 DIALOG.Enable CHK_B1SP6 DIALOG.Enable CHK_B1SP7 ) IF &flashtype>=7 ( DIALOG.Enable CHK_B0SP16 DIALOG.Enable CHK_B0SP17 DIALOG.Enable CHK_B0SP18 DIALOG.Enable CHK_B0SP19 DIALOG.Enable CHK_B0SP20 DIALOG.Enable CHK_B0SP21 DIALOG.Enable CHK_B0SP22 DIALOG.Enable CHK_B0SP23 DIALOG.Enable CHK_B0SP24 DIALOG.Enable CHK_B0SP25 DIALOG.Enable CHK_B0SP26 DIALOG.Enable CHK_B0SP27 DIALOG.Enable CHK_B0SP28 DIALOG.Enable CHK_B0SP29 DIALOG.Enable CHK_B0SP30 DIALOG.Enable CHK_B0SP31 ) DIALOG.Enable CHSB.B0 DIALOG.Enable CHSB.B1 DIALOG.Enable CHK_SEC DIALOG.Enable BT_PROG DIALOG.Enable BT_UPDATE ) ELSE ( ; Device is securred DIALOG.Disable EDIT_UC DIALOG.Disable CHK_OTP DIALOG.Disable CHK_LVDWS DIALOG.Disable CHK_LVDRS DIALOG.Disable CHK_LVDTH DIALOG.Disable CHK_B1SP0 DIALOG.Disable CHK_B1SP1 DIALOG.Disable CHK_B1SP2 DIALOG.Disable CHK_B1SP3 DIALOG.Disable CHK_B1SP4 DIALOG.Disable CHK_B1SP5 DIALOG.Disable CHK_B1SP6 DIALOG.Disable CHK_B1SP7 DIALOG.Disable CHK_B0SP0 DIALOG.Disable CHK_B0SP1 DIALOG.Disable CHK_B0SP2 DIALOG.Disable CHK_B0SP3 DIALOG.Disable CHK_B0SP4 DIALOG.Disable CHK_B0SP5 DIALOG.Disable CHK_B0SP6 DIALOG.Disable CHK_B0SP7 DIALOG.Disable CHK_B0SP8 DIALOG.Disable CHK_B0SP9 DIALOG.Disable CHK_B0SP10 DIALOG.Disable CHK_B0SP11 DIALOG.Disable CHK_B0SP12 DIALOG.Disable CHK_B0SP13 DIALOG.Disable CHK_B0SP14 DIALOG.Disable CHK_B0SP15 DIALOG.Disable CHK_B0SP16 DIALOG.Disable CHK_B0SP17 DIALOG.Disable CHK_B0SP18 DIALOG.Disable CHK_B0SP19 DIALOG.Disable CHK_B0SP20 DIALOG.Disable CHK_B0SP21 DIALOG.Disable CHK_B0SP22 DIALOG.Disable CHK_B0SP23 DIALOG.Disable CHK_B0SP24 DIALOG.Disable CHK_B0SP25 DIALOG.Disable CHK_B0SP26 DIALOG.Disable CHK_B0SP27 DIALOG.Disable CHK_B0SP28 DIALOG.Disable CHK_B0SP29 DIALOG.Disable CHK_B0SP30 DIALOG.Disable CHK_B0SP31 DIALOG.Disable CHSB.B0 DIALOG.Disable CHSB.B1 DIALOG.Disable EDIT_OTP00 DIALOG.Disable EDIT_OTP01 DIALOG.Disable EDIT_OTP02 DIALOG.Disable EDIT_OTP03 DIALOG.Disable EDIT_OTP04 DIALOG.Disable EDIT_OTP05 DIALOG.Disable EDIT_OTP06 DIALOG.Disable EDIT_OTP07 DIALOG.Disable EDIT_OTP08 DIALOG.Disable EDIT_OTP09 DIALOG.Disable EDIT_OTP0A DIALOG.Disable EDIT_OTP0B DIALOG.Disable EDIT_OTP0C DIALOG.Disable EDIT_OTP0D DIALOG.Disable EDIT_OTP0E DIALOG.Disable EDIT_OTP0F DIALOG.Disable EDIT_OTP10 DIALOG.Disable EDIT_OTP11 DIALOG.Disable EDIT_OTP12 DIALOG.Disable EDIT_OTP13 DIALOG.Disable EDIT_OTP14 DIALOG.Disable EDIT_OTP15 DIALOG.Disable EDIT_OTP16 DIALOG.Disable EDIT_OTP17 DIALOG.Disable EDIT_OTP18 DIALOG.Disable EDIT_OTP19 DIALOG.Disable EDIT_OTP1A DIALOG.Disable EDIT_OTP1B DIALOG.Disable EDIT_OTP1C DIALOG.Disable EDIT_OTP1D DIALOG.Disable EDIT_OTP1E DIALOG.Disable EDIT_OTP1F DIALOG.Disable CHK_SEC DIALOG.Disable BT_PROG DIALOG.Disable BT_UPDATE DIALOG.OK "Device Locked!" ) RETURN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Routines, called from the GUI to update the VM from the GUI data ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CheckFlashType: IF DIALOG.STRing(COMB.SEL)=="STR91xFAxx2" ( DIALOG.Disable CHK_B0SP4 DIALOG.Disable CHK_B0SP5 DIALOG.Disable CHK_B0SP6 DIALOG.Disable CHK_B0SP7 DIALOG.Disable CHK_B0SP8 DIALOG.Disable CHK_B0SP9 DIALOG.Disable CHK_B0SP10 DIALOG.Disable CHK_B0SP11 DIALOG.Disable CHK_B0SP12 DIALOG.Disable CHK_B0SP13 DIALOG.Disable CHK_B0SP14 DIALOG.Disable CHK_B0SP15 DIALOG.Disable CHK_B0SP16 DIALOG.Disable CHK_B0SP17 DIALOG.Disable CHK_B0SP18 DIALOG.Disable CHK_B0SP19 DIALOG.Disable CHK_B0SP20 DIALOG.Disable CHK_B0SP21 DIALOG.Disable CHK_B0SP22 DIALOG.Disable CHK_B0SP23 DIALOG.Disable CHK_B0SP24 DIALOG.Disable CHK_B0SP25 DIALOG.Disable CHK_B0SP26 DIALOG.Disable CHK_B0SP27 DIALOG.Disable CHK_B0SP28 DIALOG.Disable CHK_B0SP29 DIALOG.Disable CHK_B0SP30 DIALOG.Disable CHK_B0SP31 DIALOG.Disable CHK_B1SP4 DIALOG.Disable CHK_B1SP5 DIALOG.Disable CHK_B1SP6 DIALOG.Disable CHK_B1SP7 &flashtype=2 ) ELSE IF DIALOG.STRing(COMB.SEL)=="STR91xFAxx4" ( DIALOG.Enable CHK_B0SP4 DIALOG.Enable CHK_B0SP5 DIALOG.Enable CHK_B0SP6 DIALOG.Enable CHK_B0SP7 DIALOG.Disable CHK_B0SP8 DIALOG.Disable CHK_B0SP9 DIALOG.Disable CHK_B0SP10 DIALOG.Disable CHK_B0SP11 DIALOG.Disable CHK_B0SP12 DIALOG.Disable CHK_B0SP13 DIALOG.Disable CHK_B0SP14 DIALOG.Disable CHK_B0SP15 DIALOG.Disable CHK_B0SP16 DIALOG.Disable CHK_B0SP17 DIALOG.Disable CHK_B0SP18 DIALOG.Disable CHK_B0SP19 DIALOG.Disable CHK_B0SP20 DIALOG.Disable CHK_B0SP21 DIALOG.Disable CHK_B0SP22 DIALOG.Disable CHK_B0SP23 DIALOG.Disable CHK_B0SP24 DIALOG.Disable CHK_B0SP25 DIALOG.Disable CHK_B0SP26 DIALOG.Disable CHK_B0SP27 DIALOG.Disable CHK_B0SP28 DIALOG.Disable CHK_B0SP29 DIALOG.Disable CHK_B0SP30 DIALOG.Disable CHK_B0SP31 DIALOG.Disable CHK_B1SP4 DIALOG.Disable CHK_B1SP5 DIALOG.Disable CHK_B1SP6 DIALOG.Disable CHK_B1SP7 &flashtype=4 ) ELSE IF DIALOG.STRing(COMB.SEL)=="STR91xFAxx6" ( DIALOG.Enable CHK_B0SP4 DIALOG.Enable CHK_B0SP5 DIALOG.Enable CHK_B0SP6 DIALOG.Enable CHK_B0SP7 DIALOG.Enable CHK_B0SP8 DIALOG.Enable CHK_B0SP9 DIALOG.Enable CHK_B0SP10 DIALOG.Enable CHK_B0SP11 DIALOG.Enable CHK_B0SP12 DIALOG.Enable CHK_B0SP13 DIALOG.Enable CHK_B0SP14 DIALOG.Enable CHK_B0SP15 DIALOG.Disable CHK_B0SP16 DIALOG.Disable CHK_B0SP17 DIALOG.Disable CHK_B0SP18 DIALOG.Disable CHK_B0SP19 DIALOG.Disable CHK_B0SP20 DIALOG.Disable CHK_B0SP21 DIALOG.Disable CHK_B0SP22 DIALOG.Disable CHK_B0SP23 DIALOG.Disable CHK_B0SP24 DIALOG.Disable CHK_B0SP25 DIALOG.Disable CHK_B0SP26 DIALOG.Disable CHK_B0SP27 DIALOG.Disable CHK_B0SP28 DIALOG.Disable CHK_B0SP29 DIALOG.Disable CHK_B0SP30 DIALOG.Disable CHK_B0SP31 DIALOG.Enable CHK_B1SP4 DIALOG.Enable CHK_B1SP5 DIALOG.Enable CHK_B1SP6 DIALOG.Enable CHK_B1SP7 &flashtype=6 ) ELSE IF DIALOG.STRing(COMB.SEL)=="STR91xFAxx7" ( DIALOG.Enable CHK_B0SP4 DIALOG.Enable CHK_B0SP5 DIALOG.Enable CHK_B0SP6 DIALOG.Enable CHK_B0SP7 DIALOG.Enable CHK_B0SP8 DIALOG.Enable CHK_B0SP9 DIALOG.Enable CHK_B0SP10 DIALOG.Enable CHK_B0SP11 DIALOG.Enable CHK_B0SP12 DIALOG.Enable CHK_B0SP13 DIALOG.Enable CHK_B0SP14 DIALOG.Enable CHK_B0SP15 DIALOG.Enable CHK_B0SP16 DIALOG.Enable CHK_B0SP17 DIALOG.Enable CHK_B0SP18 DIALOG.Enable CHK_B0SP19 DIALOG.Enable CHK_B0SP20 DIALOG.Enable CHK_B0SP21 DIALOG.Enable CHK_B0SP22 DIALOG.Enable CHK_B0SP23 DIALOG.Enable CHK_B0SP24 DIALOG.Enable CHK_B0SP25 DIALOG.Enable CHK_B0SP26 DIALOG.Enable CHK_B0SP27 DIALOG.Enable CHK_B0SP28 DIALOG.Enable CHK_B0SP29 DIALOG.Enable CHK_B0SP30 DIALOG.Enable CHK_B0SP31 DIALOG.Enable CHK_B1SP4 DIALOG.Enable CHK_B1SP5 DIALOG.Enable CHK_B1SP6 DIALOG.Enable CHK_B1SP7 &flashtype=7 ) RETURN UpdateUC: &temp=DIALOG.STRing(EDIT_UC) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "User code value must be an hex value with a maximum of 4 bytes!" DIALOG.Set EDIT_UC "0xFFFFFFFF" Data.Set VM:0x510000 %Long 0xFFFFFFFF ) ELSE IF &temp>0xFFFFFFFF ( DIALOG.OK "User code value must be an hex value with a maximum of 4 bytes!" DIALOG.Set EDIT_UC "0xFFFFFFFF" Data.Set VM:0x510000 %Long 0xFFFFFFFF ) ELSE ( Data.Set VM:0x510000 %Long &temp DIALOG.Set EDIT_UC "0x"+FORMAT.HEX(8.,Data.LONG(VM:0x510000)) ) RETURN UpdateSec: IF DIALOG.BOOLEAN(CHK_SEC) Data.Set VM:0x520008 %Byte 0x01 ELSE Data.Set VM:0x520008 %Byte 0x00 RETURN UpdateConfig: IF DIALOG.BOOLEAN(CHK_OTP) Data.Set VM:0x520007 %Byte 0x80 ELSE Data.Set VM:0x520007 %Byte 0x00 IF DIALOG.BOOLEAN(CHK_LVDWS) Data.Set VM:0x520006 %Byte Data.Byte(VM:0x520006)|0x08 ELSE Data.Set VM:0x520006 %Byte Data.Byte(VM:0x520006)&0xF7 IF DIALOG.BOOLEAN(CHK_LVDRS) Data.Set VM:0x520006 %Byte Data.Byte(VM:0x520006)|0x04 ELSE Data.Set VM:0x520006 %Byte Data.Byte(VM:0x520006)&0xFB IF DIALOG.BOOLEAN(CHK_LVDTH) Data.Set VM:0x520006 %Byte Data.Byte(VM:0x520006)|0x02 ELSE Data.Set VM:0x520006 %Byte Data.Byte(VM:0x520006)&0xFD IF DIALOG.BOOLEAN(CHSB.B1) Data.Set VM:0x520006 %Byte Data.Byte(VM:0x520006)|0x01 ELSE Data.Set VM:0x520006 %Byte Data.Byte(VM:0x520006)&0xFE IF DIALOG.BOOLEAN(CHK_B1SP7) Data.Set VM:0x520004 %Byte Data.Byte(VM:0x520004)|0x80 ELSE Data.Set VM:0x520004 %Byte Data.Byte(VM:0x520004)&0x7F IF DIALOG.BOOLEAN(CHK_B1SP6) Data.Set VM:0x520004 %Byte Data.Byte(VM:0x520004)|0x40 ELSE Data.Set VM:0x520004 %Byte Data.Byte(VM:0x520004)&0xBF IF DIALOG.BOOLEAN(CHK_B1SP5) Data.Set VM:0x520004 %Byte Data.Byte(VM:0x520004)|0x20 ELSE Data.Set VM:0x520004 %Byte Data.Byte(VM:0x520004)&0xDF IF DIALOG.BOOLEAN(CHK_B1SP4) Data.Set VM:0x520004 %Byte Data.Byte(VM:0x520004)|0x10 ELSE Data.Set VM:0x520004 %Byte Data.Byte(VM:0x520004)&0xEF IF DIALOG.BOOLEAN(CHK_B1SP3) Data.Set VM:0x520004 %Byte Data.Byte(VM:0x520004)|0x08 ELSE Data.Set VM:0x520004 %Byte Data.Byte(VM:0x520004)&0xF7 IF DIALOG.BOOLEAN(CHK_B1SP2) Data.Set VM:0x520004 %Byte Data.Byte(VM:0x520004)|0x04 ELSE Data.Set VM:0x520004 %Byte Data.Byte(VM:0x520004)&0xFB IF DIALOG.BOOLEAN(CHK_B1SP1) Data.Set VM:0x520004 %Byte Data.Byte(VM:0x520004)|0x02 ELSE Data.Set VM:0x520004 %Byte Data.Byte(VM:0x520004)&0xFD IF DIALOG.BOOLEAN(CHK_B1SP0) Data.Set VM:0x520004 %Byte Data.Byte(VM:0x520004)|0x01 ELSE Data.Set VM:0x520004 %Byte Data.Byte(VM:0x520004)&0xFE IF DIALOG.BOOLEAN(CHK_B0SP31) Data.Set VM:0x520003 %Byte Data.Byte(VM:0x520003)|0x80 ELSE Data.Set VM:0x520003 %Byte Data.Byte(VM:0x520003)&0x7F IF DIALOG.BOOLEAN(CHK_B0SP30) Data.Set VM:0x520003 %Byte Data.Byte(VM:0x520003)|0x40 ELSE Data.Set VM:0x520003 %Byte Data.Byte(VM:0x520003)&0xBF IF DIALOG.BOOLEAN(CHK_B0SP29) Data.Set VM:0x520003 %Byte Data.Byte(VM:0x520003)|0x20 ELSE Data.Set VM:0x520003 %Byte Data.Byte(VM:0x520003)&0xDF IF DIALOG.BOOLEAN(CHK_B0SP28) Data.Set VM:0x520003 %Byte Data.Byte(VM:0x520003)|0x10 ELSE Data.Set VM:0x520003 %Byte Data.Byte(VM:0x520003)&0xEF IF DIALOG.BOOLEAN(CHK_B0SP27) Data.Set VM:0x520003 %Byte Data.Byte(VM:0x520003)|0x08 ELSE Data.Set VM:0x520003 %Byte Data.Byte(VM:0x520003)&0xF7 IF DIALOG.BOOLEAN(CHK_B0SP26) Data.Set VM:0x520003 %Byte Data.Byte(VM:0x520003)|0x04 ELSE Data.Set VM:0x520003 %Byte Data.Byte(VM:0x520003)&0xFB IF DIALOG.BOOLEAN(CHK_B0SP25) Data.Set VM:0x520003 %Byte Data.Byte(VM:0x520003)|0x02 ELSE Data.Set VM:0x520003 %Byte Data.Byte(VM:0x520003)&0xFD IF DIALOG.BOOLEAN(CHK_B0SP24) Data.Set VM:0x520003 %Byte Data.Byte(VM:0x520003)|0x01 ELSE Data.Set VM:0x520003 %Byte Data.Byte(VM:0x520003)&0xFE IF DIALOG.BOOLEAN(CHK_B0SP23) Data.Set VM:0x520002 %Byte Data.Byte(VM:0x520002)|0x80 ELSE Data.Set VM:0x520002 %Byte Data.Byte(VM:0x520002)&0x7F IF DIALOG.BOOLEAN(CHK_B0SP22) Data.Set VM:0x520002 %Byte Data.Byte(VM:0x520002)|0x40 ELSE Data.Set VM:0x520002 %Byte Data.Byte(VM:0x520002)&0xBF IF DIALOG.BOOLEAN(CHK_B0SP21) Data.Set VM:0x520002 %Byte Data.Byte(VM:0x520002)|0x20 ELSE Data.Set VM:0x520002 %Byte Data.Byte(VM:0x520002)&0xDF IF DIALOG.BOOLEAN(CHK_B0SP20) Data.Set VM:0x520002 %Byte Data.Byte(VM:0x520002)|0x10 ELSE Data.Set VM:0x520002 %Byte Data.Byte(VM:0x520002)&0xEF IF DIALOG.BOOLEAN(CHK_B0SP19) Data.Set VM:0x520002 %Byte Data.Byte(VM:0x520002)|0x08 ELSE Data.Set VM:0x520002 %Byte Data.Byte(VM:0x520002)&0xF7 IF DIALOG.BOOLEAN(CHK_B0SP18) Data.Set VM:0x520002 %Byte Data.Byte(VM:0x520002)|0x04 ELSE Data.Set VM:0x520002 %Byte Data.Byte(VM:0x520002)&0xFB IF DIALOG.BOOLEAN(CHK_B0SP17) Data.Set VM:0x520002 %Byte Data.Byte(VM:0x520002)|0x02 ELSE Data.Set VM:0x520002 %Byte Data.Byte(VM:0x520002)&0xFD IF DIALOG.BOOLEAN(CHK_B0SP16) Data.Set VM:0x520002 %Byte Data.Byte(VM:0x520002)|0x01 ELSE Data.Set VM:0x520002 %Byte Data.Byte(VM:0x520002)&0xFE IF DIALOG.BOOLEAN(CHK_B0SP15) Data.Set VM:0x520001 %Byte Data.Byte(VM:0x520001)|0x80 ELSE Data.Set VM:0x520001 %Byte Data.Byte(VM:0x520001)&0x7F IF DIALOG.BOOLEAN(CHK_B0SP14) Data.Set VM:0x520001 %Byte Data.Byte(VM:0x520001)|0x40 ELSE Data.Set VM:0x520001 %Byte Data.Byte(VM:0x520001)&0xBF IF DIALOG.BOOLEAN(CHK_B0SP13) Data.Set VM:0x520001 %Byte Data.Byte(VM:0x520001)|0x20 ELSE Data.Set VM:0x520001 %Byte Data.Byte(VM:0x520001)&0xDF IF DIALOG.BOOLEAN(CHK_B0SP12) Data.Set VM:0x520001 %Byte Data.Byte(VM:0x520001)|0x10 ELSE Data.Set VM:0x520001 %Byte Data.Byte(VM:0x520001)&0xEF IF DIALOG.BOOLEAN(CHK_B0SP11) Data.Set VM:0x520001 %Byte Data.Byte(VM:0x520001)|0x08 ELSE Data.Set VM:0x520001 %Byte Data.Byte(VM:0x520001)&0xF7 IF DIALOG.BOOLEAN(CHK_B0SP10) Data.Set VM:0x520001 %Byte Data.Byte(VM:0x520001)|0x04 ELSE Data.Set VM:0x520001 %Byte Data.Byte(VM:0x520001)&0xFB IF DIALOG.BOOLEAN(CHK_B0SP9) Data.Set VM:0x520001 %Byte Data.Byte(VM:0x520001)|0x02 ELSE Data.Set VM:0x520001 %Byte Data.Byte(VM:0x520001)&0xFD IF DIALOG.BOOLEAN(CHK_B0SP8) Data.Set VM:0x520001 %Byte Data.Byte(VM:0x520001)|0x01 ELSE Data.Set VM:0x520001 %Byte Data.Byte(VM:0x520001)&0xFE IF DIALOG.BOOLEAN(CHK_B0SP7) Data.Set VM:0x520000 %Byte Data.Byte(VM:0x520000)|0x80 ELSE Data.Set VM:0x520000 %Byte Data.Byte(VM:0x520000)&0x7F IF DIALOG.BOOLEAN(CHK_B0SP6) Data.Set VM:0x520000 %Byte Data.Byte(VM:0x520000)|0x40 ELSE Data.Set VM:0x520000 %Byte Data.Byte(VM:0x520000)&0xBF IF DIALOG.BOOLEAN(CHK_B0SP5) Data.Set VM:0x520000 %Byte Data.Byte(VM:0x520000)|0x20 ELSE Data.Set VM:0x520000 %Byte Data.Byte(VM:0x520000)&0xDF IF DIALOG.BOOLEAN(CHK_B0SP4) Data.Set VM:0x520000 %Byte Data.Byte(VM:0x520000)|0x10 ELSE Data.Set VM:0x520000 %Byte Data.Byte(VM:0x520000)&0xEF IF DIALOG.BOOLEAN(CHK_B0SP3) Data.Set VM:0x520000 %Byte Data.Byte(VM:0x520000)|0x08 ELSE Data.Set VM:0x520000 %Byte Data.Byte(VM:0x520000)&0xF7 IF DIALOG.BOOLEAN(CHK_B0SP2) Data.Set VM:0x520000 %Byte Data.Byte(VM:0x520000)|0x04 ELSE Data.Set VM:0x520000 %Byte Data.Byte(VM:0x520000)&0xFB IF DIALOG.BOOLEAN(CHK_B0SP1) Data.Set VM:0x520000 %Byte Data.Byte(VM:0x520000)|0x02 ELSE Data.Set VM:0x520000 %Byte Data.Byte(VM:0x520000)&0xFD IF DIALOG.BOOLEAN(CHK_B0SP0) Data.Set VM:0x520000 %Byte Data.Byte(VM:0x520000)|0x01 ELSE Data.Set VM:0x520000 %Byte Data.Byte(VM:0x520000)&0xFE RETURN UpdateOTP: &temp=DIALOG.STRing(EDIT_OTP00) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP00 "0xFF" Data.Set VM:0x500000 %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP00 "0xFF" Data.Set VM:0x500000 %Long 0xFF ) ELSE ( Data.Set VM:0x500000 %Byte &temp DIALOG.Set EDIT_OTP00 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500000)) ) &temp=DIALOG.STRing(EDIT_OTP01) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP01 "0xFF" Data.Set VM:0x500001 %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP01 "0xFF" Data.Set VM:0x500001 %Long 0xFF ) ELSE ( Data.Set VM:0x500001 %Byte &temp DIALOG.Set EDIT_OTP01 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500001)) ) &temp=DIALOG.STRing(EDIT_OTP02) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP02 "0xFF" Data.Set VM:0x500002 %Long 0xFF DIALOG.Set EDIT_OTP02 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500002)) ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP02 "0xFF" Data.Set VM:0x500002 %Long 0xFF ) ELSE ( Data.Set VM:0x500002 %Byte &temp DIALOG.Set EDIT_OTP02 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500002)) ) &temp=DIALOG.STRing(EDIT_OTP03) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP03 "0xFF" Data.Set VM:0x500003 %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP03 "0xFF" Data.Set VM:0x500003 %Long 0xFF ) ELSE ( Data.Set VM:0x500003 %Byte &temp DIALOG.Set EDIT_OTP03 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500003)) ) &temp=DIALOG.STRing(EDIT_OTP04) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP04 "0xFF" Data.Set VM:0x500004 %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP04 "0xFF" Data.Set VM:0x500004 %Long 0xFF ) ELSE ( Data.Set VM:0x500004 %Byte &temp DIALOG.Set EDIT_OTP04 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500004)) ) &temp=DIALOG.STRing(EDIT_OTP05) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP05 "0xFF" Data.Set VM:0x500005 %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP05 "0xFF" Data.Set VM:0x500005 %Long 0xFF ) ELSE ( Data.Set VM:0x500005 %Byte &temp DIALOG.Set EDIT_OTP05 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500005)) ) &temp=DIALOG.STRing(EDIT_OTP06) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP06 "0xFF" Data.Set VM:0x500006 %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP06 "0xFF" Data.Set VM:0x500006 %Long 0xFF ) ELSE ( Data.Set VM:0x500006 %Byte &temp DIALOG.Set EDIT_OTP06 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500006)) ) &temp=DIALOG.STRing(EDIT_OTP07) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP07 "0xFF" Data.Set VM:0x500007 %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP07 "0xFF" Data.Set VM:0x500007 %Long 0xFF ) ELSE ( Data.Set VM:0x500007 %Byte &temp DIALOG.Set EDIT_OTP07 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500007)) ) &temp=DIALOG.STRing(EDIT_OTP08) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP08 "0xFF" Data.Set VM:0x500008 %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP08 "0xFF" Data.Set VM:0x500008 %Long 0xFF ) ELSE ( Data.Set VM:0x500008 %Byte &temp DIALOG.Set EDIT_OTP08 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500008)) ) &temp=DIALOG.STRing(EDIT_OTP09) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP09 "0xFF" Data.Set VM:0x500009 %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP09 "0xFF" Data.Set VM:0x500009 %Long 0xFF ) ELSE ( Data.Set VM:0x500009 %Byte &temp DIALOG.Set EDIT_OTP09 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500009)) ) &temp=DIALOG.STRing(EDIT_OTP0A) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP0A "0xFF" Data.Set VM:0x50000A %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP0A "0xFF" Data.Set VM:0x50000A %Long 0xFF ) ELSE ( Data.Set VM:0x50000A %Byte &temp DIALOG.Set EDIT_OTP0A "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50000A)) ) &temp=DIALOG.STRing(EDIT_OTP0B) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP0B "0xFF" Data.Set VM:0x50000B %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP0B "0xFF" Data.Set VM:0x50000B %Long 0xFF ) ELSE ( Data.Set VM:0x50000B %Byte &temp DIALOG.Set EDIT_OTP0B "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50000B)) ) &temp=DIALOG.STRing(EDIT_OTP0C) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP0C "0xFF" Data.Set VM:0x50000C %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP0C "0xFF" Data.Set VM:0x50000C %Long 0xFF ) ELSE ( Data.Set VM:0x50000C %Byte &temp DIALOG.Set EDIT_OTP0C "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50000C)) ) &temp=DIALOG.STRing(EDIT_OTP0D) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP0D "0xFF" Data.Set VM:0x50000D %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP0D "0xFF" Data.Set VM:0x50000D %Long 0xFF ) ELSE ( Data.Set VM:0x50000D %Byte &temp DIALOG.Set EDIT_OTP0D "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50000D)) ) &temp=DIALOG.STRing(EDIT_OTP0E) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP0E "0xFF" Data.Set VM:0x50000E %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP0E "0xFF" Data.Set VM:0x50000E %Long 0xFF ) ELSE ( Data.Set VM:0x50000E %Byte &temp DIALOG.Set EDIT_OTP0E "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50000E)) ) &temp=DIALOG.STRing(EDIT_OTP0F) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP0F "0xFF" Data.Set VM:0x50000F %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP0F "0xFF" Data.Set VM:0x50000F %Long 0xFF ) ELSE ( Data.Set VM:0x50000F %Byte &temp DIALOG.Set EDIT_OTP0F "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50000F)) ) &temp=DIALOG.STRing(EDIT_OTP10) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP10 "0xFF" Data.Set VM:0x500010 %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP10 "0xFF" Data.Set VM:0x500010 %Long 0xFF ) ELSE ( Data.Set VM:0x500010 %Byte &temp DIALOG.Set EDIT_OTP10 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500010)) ) &temp=DIALOG.STRing(EDIT_OTP11) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP11 "0xFF" Data.Set VM:0x500011 %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP11 "0xFF" Data.Set VM:0x500011 %Long 0xFF ) ELSE ( Data.Set VM:0x500011 %Byte &temp DIALOG.Set EDIT_OTP11 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500011)) ) &temp=DIALOG.STRing(EDIT_OTP12) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP12 "0xFF" Data.Set VM:0x500012 %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP12 "0xFF" Data.Set VM:0x500012 %Long 0xFF ) ELSE ( Data.Set VM:0x500012 %Byte &temp DIALOG.Set EDIT_OTP12 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500012)) ) &temp=DIALOG.STRing(EDIT_OTP13) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP13 "0xFF" Data.Set VM:0x500013 %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP13 "0xFF" Data.Set VM:0x500013 %Long 0xFF ) ELSE ( Data.Set VM:0x500013 %Byte &temp DIALOG.Set EDIT_OTP13 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500013)) ) &temp=DIALOG.STRing(EDIT_OTP14) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP14 "0xFF" Data.Set VM:0x500014 %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP14 "0xFF" Data.Set VM:0x500014 %Long 0xFF ) ELSE ( Data.Set VM:0x500014 %Byte &temp DIALOG.Set EDIT_OTP14 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500014)) ) &temp=DIALOG.STRing(EDIT_OTP15) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP15 "0xFF" Data.Set VM:0x500015 %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP15 "0xFF" Data.Set VM:0x500015 %Long 0xFF ) ELSE ( Data.Set VM:0x500015 %Byte &temp DIALOG.Set EDIT_OTP15 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500015)) ) &temp=DIALOG.STRing(EDIT_OTP16) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP16 "0xFF" Data.Set VM:0x500016 %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP16 "0xFF" Data.Set VM:0x500016 %Long 0xFF ) ELSE ( Data.Set VM:0x500016 %Byte &temp DIALOG.Set EDIT_OTP16 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500016)) ) &temp=DIALOG.STRing(EDIT_OTP17) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP17 "0xFF" Data.Set VM:0x500017 %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP17 "0xFF" Data.Set VM:0x500017 %Long 0xFF ) ELSE ( Data.Set VM:0x500017 %Byte &temp DIALOG.Set EDIT_OTP17 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500017)) ) &temp=DIALOG.STRing(EDIT_OTP18) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP18 "0xFF" Data.Set VM:0x500018 %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP18 "0xFF" Data.Set VM:0x500018 %Long 0xFF ) ELSE ( Data.Set VM:0x500018 %Byte &temp DIALOG.Set EDIT_OTP18 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500018)) ) &temp=DIALOG.STRing(EDIT_OTP19) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP19 "0xFF" Data.Set VM:0x500019 %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP19 "0xFF" Data.Set VM:0x500019 %Long 0xFF ) ELSE ( Data.Set VM:0x500019 %Byte &temp DIALOG.Set EDIT_OTP19 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500019)) ) &temp=DIALOG.STRing(EDIT_OTP1A) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP1A "0xFF" Data.Set VM:0x50001A %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP1A "0xFF" Data.Set VM:0x50001A %Long 0xFF ) ELSE ( Data.Set VM:0x50001A %Byte &temp DIALOG.Set EDIT_OTP1A "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50001A)) ) &temp=DIALOG.STRing(EDIT_OTP1B) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP1B "0xFF" Data.Set VM:0x50001B %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP1B "0xFF" Data.Set VM:0x50001B %Long 0xFF ) ELSE ( Data.Set VM:0x50001B %Byte &temp DIALOG.Set EDIT_OTP1B "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50001B)) ) &temp=DIALOG.STRing(EDIT_OTP1C) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP1C "0xFF" Data.Set VM:0x50001C %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP1C "0xFF" Data.Set VM:0x50001C %Long 0xFF ) ELSE ( Data.Set VM:0x50001C %Byte &temp DIALOG.Set EDIT_OTP1C "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50001C)) ) &temp=DIALOG.STRing(EDIT_OTP1D) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP1D "0xFF" Data.Set VM:0x50001D %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP1D "0xFF" Data.Set VM:0x50001D %Long 0xFF ) ELSE ( Data.Set VM:0x50001D %Byte &temp DIALOG.Set EDIT_OTP1D "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50001D)) ) &temp=DIALOG.STRing(EDIT_OTP1E) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP1E "0xFF" Data.Set VM:0x50001E %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP1E "0xFF" Data.Set VM:0x50001E %Long 0xFF ) ELSE ( Data.Set VM:0x50001E %Byte &temp DIALOG.Set EDIT_OTP1E "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50001E)) ) &temp=DIALOG.STRing(EDIT_OTP1F) Eval &temp IF EVAL.TYPE()!=0x0004 ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP1F "0xFF" Data.Set VM:0x50001F %Long 0xFF ) ELSE IF &temp>0xFF ( DIALOG.OK "OTP value must be an hex value of one byte!" DIALOG.Set EDIT_OTP1F "0xFF" Data.Set VM:0x50001F %Long 0xFF ) ELSE ( Data.Set VM:0x50001F %Byte &temp DIALOG.Set EDIT_OTP1F "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50001F)) ) RETURN LockOTP: IF DIALOG.BOOLEAN(CHK_OTP) ( DIALOG.YESNO "DO YOU REALLY WANT TO LOCK THE OTP CONTENT? Any change will be impossible after programming!" ENTRY &result IF !&result ( DIALOG.Set CHK_OTP " " ) ) GOSUB UpdateConfig RETURN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Routines, called from the GUI to update the window data from VM ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; UpdateFromVM: DIALOG.Set EDIT_OTP00 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500000)) DIALOG.Set EDIT_OTP01 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500001)) DIALOG.Set EDIT_OTP02 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500002)) DIALOG.Set EDIT_OTP03 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500003)) DIALOG.Set EDIT_OTP04 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500004)) DIALOG.Set EDIT_OTP05 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500005)) DIALOG.Set EDIT_OTP06 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500006)) DIALOG.Set EDIT_OTP07 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500007)) DIALOG.Set EDIT_OTP08 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500008)) DIALOG.Set EDIT_OTP09 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500009)) DIALOG.Set EDIT_OTP0A "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50000A)) DIALOG.Set EDIT_OTP0B "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50000B)) DIALOG.Set EDIT_OTP0C "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50000C)) DIALOG.Set EDIT_OTP0D "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50000D)) DIALOG.Set EDIT_OTP0E "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50000E)) DIALOG.Set EDIT_OTP0F "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50000F)) DIALOG.Set EDIT_OTP10 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500010)) DIALOG.Set EDIT_OTP11 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500011)) DIALOG.Set EDIT_OTP12 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500012)) DIALOG.Set EDIT_OTP13 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500013)) DIALOG.Set EDIT_OTP14 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500014)) DIALOG.Set EDIT_OTP15 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500015)) DIALOG.Set EDIT_OTP16 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500016)) DIALOG.Set EDIT_OTP17 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500017)) DIALOG.Set EDIT_OTP18 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500018)) DIALOG.Set EDIT_OTP19 "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x500019)) DIALOG.Set EDIT_OTP1A "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50001A)) DIALOG.Set EDIT_OTP1B "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50001B)) DIALOG.Set EDIT_OTP1C "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50001C)) DIALOG.Set EDIT_OTP1D "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50001D)) DIALOG.Set EDIT_OTP1E "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50001E)) DIALOG.Set EDIT_OTP1F "0x"+FORMAT.HEX(2.,Data.Byte(VM:0x50001F)) &temp=Data.Quad(VM:0x00520000) ; Reading the Configuration ; Parsing the config data IF (&temp&0x8000000000000000)!=0x0 DIALOG.Set CHK_OTP "" ; OTP Lock bit is set ELSE DIALOG.Set CHK_OTP " " IF (&temp&0x0008000000000000)!=0x0 DIALOG.Set CHK_LVDWS "" ; LVD Warning Select is set ELSE DIALOG.Set CHK_LVDWS " " IF (&temp&0x0004000000000000)!=0x0 DIALOG.Set CHK_LVDRS "" ; LVD Reset Select is set ELSE DIALOG.Set CHK_LVDRS " " IF (&temp&0x0002000000000000)!=0x0 DIALOG.Set CHK_LVDTH "" ; LVD TH is set ELSE DIALOG.Set CHK_LVDTH " " IF (&temp&0x0001000000000000)!=0x0 DIALOG.Set CHSB.B1 ; Boot bank is bank 1 ELSE DIALOG.Set CHSB.B0 ; Boot bank is bank IF (&temp&0x0000008000000000)!=0x0 DIALOG.Set CHK_B1SP7 "" ; Bank1 Sector7 Protection ELSE DIALOG.Set CHK_B1SP7 " " IF (&temp&0x0000004000000000)!=0x0 DIALOG.Set CHK_B1SP6 "" ; Bank1 Sector6 Protection ELSE DIALOG.Set CHK_B1SP6 " " IF (&temp&0x0000002000000000)!=0x0 DIALOG.Set CHK_B1SP5 "" ; Bank1 Sector5 Protection ELSE DIALOG.Set CHK_B1SP5 " " IF (&temp&0x0000001000000000)!=0x0 DIALOG.Set CHK_B1SP4 "" ; Bank1 Sector4 Protection ELSE DIALOG.Set CHK_B1SP4 " " IF (&temp&0x0000000800000000)!=0x0 DIALOG.Set CHK_B1SP3 "" ; Bank1 Sector3 Protection ELSE DIALOG.Set CHK_B1SP3 " " IF (&temp&0x0000000400000000)!=0x0 DIALOG.Set CHK_B1SP2 "" ; Bank1 Sector2 Protection ELSE DIALOG.Set CHK_B1SP2 " " IF (&temp&0x0000000200000000)!=0x0 DIALOG.Set CHK_B1SP1 "" ; Bank1 Sector1 Protection ELSE DIALOG.Set CHK_B1SP1 " " IF (&temp&0x0000000100000000)!=0x0 DIALOG.Set CHK_B1SP0 "" ; Bank1 Sector0 Protection ELSE DIALOG.Set CHK_B1SP0 " " IF (&temp&0x0000000080000000)!=0x0 DIALOG.Set CHK_B0SP31 "" ; Bank0 Sector31 Protection ELSE DIALOG.Set CHK_B0SP31 " " IF (&temp&0x0000000040000000)!=0x0 DIALOG.Set CHK_B0SP30 "" ; Bank0 Sector30 Protection ELSE DIALOG.Set CHK_B0SP30 " " IF (&temp&0x0000000020000000)!=0x0 DIALOG.Set CHK_B0SP29 "" ; Bank0 Sector29 Protection ELSE DIALOG.Set CHK_B0SP29 " " IF (&temp&0x0000000010000000)!=0x0 DIALOG.Set CHK_B0SP28 "" ; Bank0 Sector28 Protection ELSE DIALOG.Set CHK_B0SP28 " " IF (&temp&0x0000000008000000)!=0x0 DIALOG.Set CHK_B0SP27 "" ; Bank0 Sector27 Protection ELSE DIALOG.Set CHK_B0SP27 " " IF (&temp&0x0000000004000000)!=0x0 DIALOG.Set CHK_B0SP26 "" ; Bank0 Sector26 Protection ELSE DIALOG.Set CHK_B0SP26 " " IF (&temp&0x0000000002000000)!=0x0 DIALOG.Set CHK_B0SP25 "" ; Bank0 Sector25 Protection ELSE DIALOG.Set CHK_B0SP25 " " IF (&temp&0x0000000001000000)!=0x0 DIALOG.Set CHK_B0SP24 "" ; Bank0 Sector24 Protection ELSE DIALOG.Set CHK_B0SP24 " " IF (&temp&0x0000000000800000)!=0x0 DIALOG.Set CHK_B0SP23 "" ; Bank0 Sector23 Protection ELSE DIALOG.Set CHK_B0SP23 " " IF (&temp&0x0000000000400000)!=0x0 DIALOG.Set CHK_B0SP22 "" ; Bank0 Sector22 Protection ELSE DIALOG.Set CHK_B0SP22 " " IF (&temp&0x0000000000200000)!=0x0 DIALOG.Set CHK_B0SP21 "" ; Bank0 Sector21 Protection ELSE DIALOG.Set CHK_B0SP21 " " IF (&temp&0x0000000000100000)!=0x0 DIALOG.Set CHK_B0SP20 "" ; Bank0 Sector20 Protection ELSE DIALOG.Set CHK_B0SP20 " " IF (&temp&0x0000000000080000)!=0x0 DIALOG.Set CHK_B0SP19 "" ; Bank0 Sector19 Protection ELSE DIALOG.Set CHK_B0SP19 " " IF (&temp&0x0000000000040000)!=0x0 DIALOG.Set CHK_B0SP18 "" ; Bank0 Sector18 Protection ELSE DIALOG.Set CHK_B0SP18 " " IF (&temp&0x0000000000020000)!=0x0 DIALOG.Set CHK_B0SP17 "" ; Bank0 Sector17 Protection ELSE DIALOG.Set CHK_B0SP17 " " IF (&temp&0x0000000000010000)!=0x0 DIALOG.Set CHK_B0SP16 "" ; Bank0 Sector16 Protection ELSE DIALOG.Set CHK_B0SP16 " " IF (&temp&0x0000000000008000)!=0x0 DIALOG.Set CHK_B0SP15 "" ; Bank0 Sector15 Protection ELSE DIALOG.Set CHK_B0SP15 " " IF (&temp&0x0000000000004000)!=0x0 DIALOG.Set CHK_B0SP14 "" ; Bank0 Sector14 Protection ELSE DIALOG.Set CHK_B0SP14 " " IF (&temp&0x0000000000002000)!=0x0 DIALOG.Set CHK_B0SP13 "" ; Bank0 Sector13 Protection ELSE DIALOG.Set CHK_B0SP13 " " IF (&temp&0x0000000000001000)!=0x0 DIALOG.Set CHK_B0SP12 "" ; Bank0 Sector12 Protection ELSE DIALOG.Set CHK_B0SP12 " " IF (&temp&0x0000000000000800)!=0x0 DIALOG.Set CHK_B0SP11 "" ; Bank0 Sector11 Protection ELSE DIALOG.Set CHK_B0SP11 " " IF (&temp&0x0000000000000400)!=0x0 DIALOG.Set CHK_B0SP10 "" ; Bank0 Sector10 Protection ELSE DIALOG.Set CHK_B0SP10 " " IF (&temp&0x0000000000000200)!=0x0 DIALOG.Set CHK_B0SP9 "" ; Bank0 Sector9 Protection ELSE DIALOG.Set CHK_B0SP9 " " IF (&temp&0x0000000000000100)!=0x0 DIALOG.Set CHK_B0SP8 "" ; Bank0 Sector8 Protection ELSE DIALOG.Set CHK_B0SP8 " " IF (&temp&0x0000000000000080)!=0x0 DIALOG.Set CHK_B0SP7 "" ; Bank0 Sector7 Protection ELSE DIALOG.Set CHK_B0SP7 " " IF (&temp&0x0000000000000040)!=0x0 DIALOG.Set CHK_B0SP6 "" ; Bank0 Sector6 Protection ELSE DIALOG.Set CHK_B0SP6 " " IF (&temp&0x0000000000000020)!=0x0 DIALOG.Set CHK_B0SP5 "" ; Bank0 Sector5 Protection ELSE DIALOG.Set CHK_B0SP5 " " IF (&temp&0x0000000000000010)!=0x0 DIALOG.Set CHK_B0SP4 "" ; Bank0 Sector4 Protection ELSE DIALOG.Set CHK_B0SP4 " " IF (&temp&0x0000000000000008)!=0x0 DIALOG.Set CHK_B0SP3 "" ; Bank0 Sector3 Protection ELSE DIALOG.Set CHK_B0SP3 " " IF (&temp&0x0000000000000004)!=0x0 DIALOG.Set CHK_B0SP2 "" ; Bank0 Sector2 Protection ELSE DIALOG.Set CHK_B0SP2 " " IF (&temp&0x0000000000000002)!=0x0 DIALOG.Set CHK_B0SP1 "" ; Bank0 Sector1 Protection ELSE DIALOG.Set CHK_B0SP1 " " IF (&temp&0x0000000000000001)!=0x0 DIALOG.Set CHK_B0SP0 "" ; Bank0 Sector0 Protection ELSE DIALOG.Set CHK_B0SP0 " " &temp=Data.Long(VM:0x00510000) ; Reading the user code DIALOG.Set EDIT_UC "0x"+FORMAT.HEX(8.,&temp) &temp=Data.Byte(VM:0x520008) IF (&temp&0x01)==0x01 DIALOG.Set CHK_SEC "" ELSE DIALOG.Set CHK_SEC " " RETURN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Routines, called from the GUI to update the VM from the flash ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; UpdateFromFlash: ; Update Flash TAP content Data.COPY DBG:0x510000++0x03 VM:0x510000 /Long Data.COPY DBG:0x520000++0x07 VM:0x520000 /Quad Data.COPY DBG:0x520008++0x00 VM:0x520008 /Byte ; Update flash memory &status=Data.Byte(DBG:0x600004) &configuration=Data.Quad(DBG:0x520000) IF (&status&0x40)==0x00 ( SYStem.Down SYStem.JtagClock &jtagclock SYStem.Option ResBreak OFF SYStem.Up GOSUB FlashSetup ; Copy data blocks to VM IF &flashtype==1 Data.COPY SD:0x00000000++0x7FFFF VM:0x00 /Long ELSE IF &flashtype==0. Data.COPY SD:0x00000000++0x3FFFF VM:0x00 /Long Data.COPY SD:0x00080000++0x7FFF VM:0x400000 /Long ; Read OTP Data.Set SD:0x00080000 %Word 0x98 Data.COPY SD:0x00080000++0x1F VM:0x500000 /Long Data.Set SD:0x00080000 %Word 0xFF ; Switch back to PREPARE SYStem.Down SYStem.JtagClock 1MHz SYStem.Mode PREPARE ) ELSE ( DIALOG.OK "Device Secured!" ) GOSUB UpdateFromVM RETURN UpdateConfigFromFlash: ; Update Flash TAP content Data.COPY DBG:0x510000++0x03 VM:0x510000 /Long Data.COPY DBG:0x520000++0x07 VM:0x520000 /Quad Data.COPY DBG:0x520008++0x00 VM:0x520008 /Byte ; Update flash memory &status=Data.Byte(DBG:0x600004) &configuration=Data.Quad(DBG:0x520000) IF (&status&0x40)==0x00 ( SYStem.Down SYStem.JtagClock &jtagclock SYStem.Option ResBreak OFF SYStem.Up GOSUB FlashSetup ; Read OTP Data.Set SD:0x00080000 %Word 0x98 Data.COPY SD:0x00080000++0x1F VM:0x500000 /Long Data.Set SD:0x00080000 %Word 0xFF ; Switch back to PREPARE SYStem.Down SYStem.JtagClock 1MHz SYStem.Mode PREPARE ) GOSUB UpdateFromVM RETURN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Routines, to load OBJ and HEX files ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; LoadOBJ: DIALOG.File *.OBJ ENTRY &file IF "&file"!="" ( Data.LOAD.IntelHex &file /VM GOSUB UpdateFromVM ) RETURN LoadMainFlash: DIALOG.File *.HEX ENTRY &file IF "&file"!="" ( Data.LOAD.IntelHex &file 0x00 /VM GOSUB UpdateFromVM ) RETURN LoadSecondaryFlash: DIALOG.File *.HEX ENTRY &file IF "&file"!="" ( Data.LOAD.IntelHex &file 0x400000 /VM GOSUB UpdateFromVM ) RETURN SaveOBJ: Data.SAVE.IntelHex *.OBJ VM:0x000000++0x520008 /TYPE4 RETURN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Routines, called from the GUI to progam the flash sectors ; The content of the windows and VM is not commpared to the programmed memory ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Programming the flash banks, OTP, Configuration and UserCode from the Virtual memory. The sectors are erased before. ; Cannot be used in full chip secure mode. This Sub is called from the Program dialog. Program: DIALOG.YESNO "The flash memory will be programmed. Continue?" ENTRY &result IF &result ( IF (DIALOG.BOOLEAN(CHK_PB0)&&DIALOG.BOOLEAN(CHK_PB1)) GOSUB ProgramFlashMemory ELSE IF DIALOG.BOOLEAN(CHK_PB0) GOSUB ProgramFlashBank0 ELSE IF DIALOG.BOOLEAN(CHK_PB1) GOSUB ProgramFlashBank1 IF DIALOG.BOOLEAN(CHK_POTP) ( Data.Set DBG:0x600010 %Quad 0x0008000000000000 ; Erase sector GOSUB ProgramOTP ) IF DIALOG.BOOLEAN(CHK_PUC) ( Data.Set DBG:0x600010 %Quad 0x0004000000000000 ; Erase sector GOSUB ProgramUserCode ) IF DIALOG.BOOLEAN(CHK_PCONF) ( Data.Set DBG:0x600010 %Quad 0x0002000000000000 ; Erase sector GOSUB ProgramConfig GOSUB ProgramSecurity ) ) RETURN ; Enable progam button only, if at least on check box is set. ProgramUpdateWindow: DIALOG.Disable BT_PROGSEC IF DIALOG.BOOLEAN(CHK_PCONF) DIALOG.Enable BT_PROGSEC IF DIALOG.BOOLEAN(CHK_PUC) DIALOG.Enable BT_PROGSEC IF DIALOG.BOOLEAN(CHK_POTP) DIALOG.Enable BT_PROGSEC IF DIALOG.BOOLEAN(CHK_PB0) DIALOG.Enable BT_PROGSEC IF DIALOG.BOOLEAN(CHK_PB1) DIALOG.Enable BT_PROGSEC RETURN ; Select All sectors for flash erasing ProgramSelectAll: DIALOG.Set CHK_PCONF "" DIALOG.Set CHK_PUC "" DIALOG.Set CHK_POTP "" DIALOG.Set CHK_PB0 "" DIALOG.Set CHK_PB1 "" GOSUB ProgramUpdateWindow RETURN ; Deselect All sectors for flash erasing ProgramSelectNone: DIALOG.Set CHK_PCONF " " DIALOG.Set CHK_PUC " " DIALOG.Set CHK_POTP " " DIALOG.Set CHK_PB0 " " DIALOG.Set CHK_PB1 " " GOSUB ProgramUpdateWindow RETURN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Helper sub routines for flash programming. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Program flash bank 0 and 1 from virtual memory ProgramFlashMemory: ; Program Flash sectors SYStem.Down SYStem.JtagClock &jtagclock SYStem.Up GOSUB FlashSetup ; Bank 0 IF &flashtype==7 FLASH.Create 1. 0x00000000++0x001FFFFF 0x10000 TARGET Word ELSE IF &flashtype==6 FLASH.Create 1. 0x00000000++0x000FFFFF 0x10000 TARGET Word ELSE IF &flashtype==4 FLASH.Create 1. 0x00000000++0x0007FFFF 0x10000 TARGET Word ELSE IF &flashtype==2 FLASH.Create 1. 0x00000000++0x0003FFFF 0x10000 TARGET Word ; Bank 1 IF &flashtype>4 FLASH.Create 2. 0x00200000++0x1FFFF 0x2000 TARGET Word ELSE FLASH.Create 2. 0x00200000++0x7FFF 0x2000 TARGET Word FLASH.TARGET 0x40000000 0x40001000 0x1000 ~~/demo/arm/flash/word/str9.bin FLASH.UNLOCK ALL FLASH.Erase ALL FLASH.Program ALL IF &flashtype==7 Data.COPY VM:0x00000000++0x001FFFFF SD:0x00000000 ELSE IF &flashtype==6 Data.COPY VM:0x00000000++0x000FFFFF SD:0x00000000 ELSE IF &flashtype==4 Data.COPY VM:0x00000000++0x0007FFFF SD:0x00000000 ELSE IF &flashtype==2 Data.COPY VM:0x00000000++0x0003FFFF SD:0x00000000 IF &flashtype>4 Data.COPY VM:0x00400000++0x0001FFFF SD:0x00200000 ELSE Data.COPY VM:0x00400000++0x00007FFF SD:0x00200000 FLASH.Program off SYStem.Down SYStem.JtagClock 1MHz SYStem.Mode Prepare RETURN ; Program flash bank 0 from virtual memory ProgramFlashBank0: ; Program Flash sectors SYStem.Down SYStem.JtagClock &jtagclock SYStem.Up GOSUB FlashSetup ; Bank 0 IF &flashtype==7 FLASH.Create 1. 0x00000000++0x001FFFFF 0x10000 TARGET Word ELSE IF &flashtype==6 FLASH.Create 1. 0x00000000++0x000FFFFF 0x10000 TARGET Word ELSE IF &flashtype==4 FLASH.Create 1. 0x00000000++0x0007FFFF 0x10000 TARGET Word ELSE IF &flashtype==2 FLASH.Create 1. 0x00000000++0x0003FFFF 0x10000 TARGET Word FLASH.TARGET 0x40000000 0x40001000 0x1000 ~~/demo/arm/flash/word/str9.bin FLASH.UNLOCK ALL FLASH.Erase ALL FLASH.Program ALL IF &flashtype==7 Data.COPY VM:0x00000000++0x001FFFFF SD:0x00000000 ELSE IF &flashtype==6 Data.COPY VM:0x00000000++0x000FFFFF SD:0x00000000 ELSE IF &flashtype==4 Data.COPY VM:0x00000000++0x0007FFFF SD:0x00000000 ELSE IF &flashtype==2 Data.COPY VM:0x00000000++0x0003FFFF SD:0x00000000 FLASH.Program off SYStem.Down SYStem.JtagClock 1MHz SYStem.Mode Prepare RETURN ; Program flash bank 1 from virtual memory ProgramFlashBank1: ; Program Flash sectors SYStem.Down SYStem.JtagClock &jtagclock SYStem.Up GOSUB FlashSetup ; Bank 1 IF &flashtype>4 FLASH.Create 2. 0x00200000++0x1FFFF 0x2000 TARGET Word ELSE FLASH.Create 2. 0x00200000++0x7FFF 0x2000 TARGET Word FLASH.TARGET 0x40000000 0x40001000 0x1000 ~~/demo/arm/flash/word/str9.bin FLASH.UNLOCK ALL FLASH.Erase ALL FLASH.Program ALL IF &flashtype>4 Data.COPY VM:0x00400000++0x0001FFFF SD:0x00200000 ELSE Data.COPY VM:0x00400000++0x00007FFF SD:0x00200000 FLASH.Program off SYStem.Down SYStem.JtagClock 1MHz SYStem.Mode Prepare RETURN ; Program OTP from VM ProgramOTP: ; Program OTP SYStem.Down SYStem.JtagClock &jtagclock SYStem.Up GOSUB FlashSetup LOCAL &OTP_BASE &OTP_BASE=0x80000 Data.Set SD:&OTP_BASE %Word 0xC0 Data.Set SD:&OTP_BASE %Word Data.Word(VM:0x500000) WAIT 50ms Data.Set SD:&OTP_BASE %Word Data.Word(VM:0x500002) WAIT 50ms Data.Set SD:&OTP_BASE %Word Data.Word(VM:0x500004) WAIT 50ms Data.Set SD:&OTP_BASE %Word Data.Word(VM:0x500006) WAIT 50ms Data.Set SD:&OTP_BASE %Word Data.Word(VM:0x500008) WAIT 50ms Data.Set SD:&OTP_BASE %Word Data.Word(VM:0x50000A) WAIT 50ms Data.Set SD:&OTP_BASE %Word Data.Word(VM:0x50000C) WAIT 50ms Data.Set SD:&OTP_BASE %Word Data.Word(VM:0x50000E) WAIT 50ms Data.Set SD:&OTP_BASE %Word Data.Word(VM:0x500010) WAIT 50ms Data.Set SD:&OTP_BASE %Word Data.Word(VM:0x500012) WAIT 50ms Data.Set SD:&OTP_BASE %Word Data.Word(VM:0x500014) WAIT 50ms Data.Set SD:&OTP_BASE %Word Data.Word(VM:0x500016) WAIT 50ms Data.Set SD:&OTP_BASE %Word Data.Word(VM:0x500018) WAIT 50ms Data.Set SD:&OTP_BASE %Word Data.Word(VM:0x50001A) WAIT 50ms Data.Set SD:&OTP_BASE %Word Data.Word(VM:0x50001C) WAIT 50ms Data.Set SD:&OTP_BASE %Word Data.Word(VM:0x50001E) WAIT 50ms Data.Set SD:&OTP_BASE %Word 0xFF Data.Set SD:&OTP_BASE %Word 0x70 &temp=Data.Byte(SD:&OTP_BASE) Data.Set SD:&OTP_BASE %Word 0xFF Data.Set SD:&OTP_BASE %Word 0x50 Data.Set SD:&OTP_BASE %Word 0x70 &temp=Data.Byte(SD:&OTP_BASE) Data.Set SD:&OTP_BASE %Word 0xFF SYStem.Down SYStem.JtagClock 1MHz SYStem.Mode Prepare RETURN ; Program Config from VM ProgramConfig: Data.Set DBG:0x520000 %Quad Data.Quad(VM:0x520000) RETURN ; Set Security bit from VM ProgramSecurity: Data.Set DBG:0x520008 %Byte Data.Byte(VM:0x520008) RETURN ; Program UserCode ProgramUserCode: Data.Set DBG:0x510000 %Long Data.Long(VM:0x510000) RETURN ; Setup the flash memory FlashSetup: IF (&configuration&0x0001000000000000)!=0x0 ( IF &flashtype==2. ( Data.Set SD:0x54000004 %Long 0x05 ; FMI_NBBSR = 256 kByte ) ELSE IF &flashtype==4. ( Data.Set SD:0x54000004 %Long 0x06 ; FMI_NBBSR = 512 kByte ) IF &flashtype==6. ( Data.Set SD:0x54000004 %Long 0x07 ; FMI_NBBSR = 1024 kByte ) ELSE IF &flashtype==7. ( Data.Set SD:0x54000004 %Long 0x08 ; FMI_NBBSR = 2048 kByte ) IF &flashtype<=4 Data.Set SD:0x54000000 %Long 0x00 ; FMI_BBSR = 32 kByte ELSE Data.Set SD:0x54000000 %Long 0x10 ; FMI_BBSR = 128 kByte Data.Set SD:0x5400000C %Long 0x00100000 ; FMI_BBADR Data.Set SD:0x54000010 %Long 0x00000000 ; FMI_NBBADR ) ELSE ( IF &flashtype==2. ( Data.Set SD:0x54000000 %Long 0x03 ; FMI_BBSR = 256 kByte ) ELSE IF &flashtype==4. ( Data.Set SD:0x54000000 %Long 0x04 ; FMI_BBSR = 512 kByte ) IF &flashtype==6. ( Data.Set SD:0x54000000 %Long 0x05 ; FMI_BBSR = 1024 kByte ) ELSE IF &flashtype==7. ( Data.Set SD:0x54000000 %Long 0x06 ; FMI_BBSR = 2048 kByte ) IF &flashtype<=4 Data.Set SD:0x54000004 %Long 0x02 ; FMI_NBBSR = 32 kByte ELSE Data.Set SD:0x54000004 %Long 0x04 ; FMI_NBBSR = 128 kByte Data.Set SD:0x5400000c %Long 0x00000000 ; FMI_BBADR Data.Set SD:0x54000010 %Long 0x00200000 ; FMI_NBBADR ) Data.Set SD:0x54000018 %Long Data.Long(SD:0x54000018)|0x18 ; FMI_CR enable Bank1 Data.Set SD:0x5C002034 %Long Data.Long(SD:0x5C002034)&0xfffffffe ; Disable PFQBC Data.Set SD:0x5c002000 %Long Data.Long(SD:0x5c002000)&0xfffeffff ; Clock Control Register FMISEL=RCLK RETURN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Sub routines for erasing the flash ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Enable the Erase biuutton only if a check box is selected EraseUpdateWindow: DIALOG.Disable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EOTP) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EUC) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_ECONF) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB1SP7) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB1SP6) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB1SP5) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB1SP4) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB1SP3) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB1SP2) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB1SP1) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB1SP0) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP31) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP30) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP29) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP28) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP27) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP26) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP25) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP24) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP23) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP22) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP21) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP20) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP19) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP18) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP17) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP16) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP15) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP14) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP13) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP12) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP11) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP10) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP9) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP8) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP7) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP6) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP5) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP4) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP3) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP2) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP1) DIALOG.Enable BT_ERASESEC IF DIALOG.BOOLEAN(CHK_EB0SP0) DIALOG.Enable BT_ERASESEC RETURN ; Select All sectors for flash erasing EraseSelectAll: DIALOG.Set CHK_ECONF "" DIALOG.Set CHK_EUC "" DIALOG.Set CHK_EOTP "" DIALOG.Set CHK_EB1SP0 "" DIALOG.Set CHK_EB1SP1 "" DIALOG.Set CHK_EB1SP2 "" DIALOG.Set CHK_EB1SP3 "" DIALOG.Set CHK_EB0SP0 "" DIALOG.Set CHK_EB0SP1 "" DIALOG.Set CHK_EB0SP2 "" DIALOG.Set CHK_EB0SP3 "" IF &flashtype>=4 ( DIALOG.Set CHK_EB0SP4 "" DIALOG.Set CHK_EB0SP5 "" DIALOG.Set CHK_EB0SP6 "" DIALOG.Set CHK_EB0SP7 "" ) IF &flashtype>=6 ( DIALOG.Set CHK_EB0SP8 "" DIALOG.Set CHK_EB0SP9 "" DIALOG.Set CHK_EB0SP10 "" DIALOG.Set CHK_EB0SP11 "" DIALOG.Set CHK_EB0SP12 "" DIALOG.Set CHK_EB0SP13 "" DIALOG.Set CHK_EB0SP14 "" DIALOG.Set CHK_EB0SP15 "" DIALOG.Set CHK_EB1SP4 "" DIALOG.Set CHK_EB1SP5 "" DIALOG.Set CHK_EB1SP6 "" DIALOG.Set CHK_EB1SP7 "" ) IF &flashtype>=7 ( DIALOG.Set CHK_EB0SP16 "" DIALOG.Set CHK_EB0SP17 "" DIALOG.Set CHK_EB0SP18 "" DIALOG.Set CHK_EB0SP19 "" DIALOG.Set CHK_EB0SP20 "" DIALOG.Set CHK_EB0SP21 "" DIALOG.Set CHK_EB0SP22 "" DIALOG.Set CHK_EB0SP23 "" DIALOG.Set CHK_EB0SP24 "" DIALOG.Set CHK_EB0SP25 "" DIALOG.Set CHK_EB0SP26 "" DIALOG.Set CHK_EB0SP27 "" DIALOG.Set CHK_EB0SP28 "" DIALOG.Set CHK_EB0SP29 "" DIALOG.Set CHK_EB0SP30 "" DIALOG.Set CHK_EB0SP31 "" ) GOSUB EraseUpdateWindow RETURN ; Deselect All sectors for flash erasing EraseSelectNone: DIALOG.Set CHK_ECONF " " DIALOG.Set CHK_EUC " " DIALOG.Set CHK_EOTP " " DIALOG.Set CHK_EB1SP0 " " DIALOG.Set CHK_EB1SP1 " " DIALOG.Set CHK_EB1SP2 " " DIALOG.Set CHK_EB1SP3 " " DIALOG.Set CHK_EB1SP4 " " DIALOG.Set CHK_EB1SP5 " " DIALOG.Set CHK_EB1SP6 " " DIALOG.Set CHK_EB1SP7 " " DIALOG.Set CHK_EB0SP0 " " DIALOG.Set CHK_EB0SP1 " " DIALOG.Set CHK_EB0SP2 " " DIALOG.Set CHK_EB0SP3 " " DIALOG.Set CHK_EB0SP4 " " DIALOG.Set CHK_EB0SP5 " " DIALOG.Set CHK_EB0SP6 " " DIALOG.Set CHK_EB0SP7 " " DIALOG.Set CHK_EB0SP8 " " DIALOG.Set CHK_EB0SP9 " " DIALOG.Set CHK_EB0SP10 " " DIALOG.Set CHK_EB0SP11 " " DIALOG.Set CHK_EB0SP12 " " DIALOG.Set CHK_EB0SP13 " " DIALOG.Set CHK_EB0SP14 " " DIALOG.Set CHK_EB0SP15 " " DIALOG.Set CHK_EB0SP16 " " DIALOG.Set CHK_EB0SP17 " " DIALOG.Set CHK_EB0SP18 " " DIALOG.Set CHK_EB0SP19 " " DIALOG.Set CHK_EB0SP20 " " DIALOG.Set CHK_EB0SP21 " " DIALOG.Set CHK_EB0SP22 " " DIALOG.Set CHK_EB0SP23 " " DIALOG.Set CHK_EB0SP24 " " DIALOG.Set CHK_EB0SP25 " " DIALOG.Set CHK_EB0SP26 " " DIALOG.Set CHK_EB0SP27 " " DIALOG.Set CHK_EB0SP28 " " DIALOG.Set CHK_EB0SP29 " " DIALOG.Set CHK_EB0SP30 " " DIALOG.Set CHK_EB0SP31 " " GOSUB EraseUpdateWindow RETURN ; Full Chip Erase FullChipErase: DIALOG.YESNO "Do you really want to erase the flash?" ENTRY &result IF &result Data.Set DBG:0x600008 %Byte 0xA5 RETURN ; Erase selected sectors SectorErase: DIALOG.YESNO "Do you really want to erase the selected sectors?" ENTRY &result IF &result ( §ormask=0x0000000000000000 IF DIALOG.BOOLEAN(CHK_EOTP) §ormask=§ormask+0x0008000000000000 IF DIALOG.BOOLEAN(CHK_EUC) §ormask=§ormask+0x0004000000000000 IF DIALOG.BOOLEAN(CHK_ECONF) §ormask=§ormask+0x0002000000000000 IF DIALOG.BOOLEAN(CHK_EB1SP7) §ormask=§ormask+0x0000008000000000 IF DIALOG.BOOLEAN(CHK_EB1SP6) §ormask=§ormask+0x0000004000000000 IF DIALOG.BOOLEAN(CHK_EB1SP5) §ormask=§ormask+0x0000002000000000 IF DIALOG.BOOLEAN(CHK_EB1SP4) §ormask=§ormask+0x0000001000000000 IF DIALOG.BOOLEAN(CHK_EB1SP3) §ormask=§ormask+0x0000000800000000 IF DIALOG.BOOLEAN(CHK_EB1SP2) §ormask=§ormask+0x0000000400000000 IF DIALOG.BOOLEAN(CHK_EB1SP1) §ormask=§ormask+0x0000000200000000 IF DIALOG.BOOLEAN(CHK_EB1SP0) §ormask=§ormask+0x0000000100000000 IF DIALOG.BOOLEAN(CHK_EB0SP31) §ormask=§ormask+0x0000000080000000 IF DIALOG.BOOLEAN(CHK_EB0SP30) §ormask=§ormask+0x0000000040000000 IF DIALOG.BOOLEAN(CHK_EB0SP29) §ormask=§ormask+0x0000000020000000 IF DIALOG.BOOLEAN(CHK_EB0SP28) §ormask=§ormask+0x0000000010000000 IF DIALOG.BOOLEAN(CHK_EB0SP27) §ormask=§ormask+0x0000000008000000 IF DIALOG.BOOLEAN(CHK_EB0SP26) §ormask=§ormask+0x0000000004000000 IF DIALOG.BOOLEAN(CHK_EB0SP25) §ormask=§ormask+0x0000000002000000 IF DIALOG.BOOLEAN(CHK_EB0SP24) §ormask=§ormask+0x0000000001000000 IF DIALOG.BOOLEAN(CHK_EB0SP23) §ormask=§ormask+0x0000000000800000 IF DIALOG.BOOLEAN(CHK_EB0SP22) §ormask=§ormask+0x0000000000400000 IF DIALOG.BOOLEAN(CHK_EB0SP21) §ormask=§ormask+0x0000000000200000 IF DIALOG.BOOLEAN(CHK_EB0SP20) §ormask=§ormask+0x0000000000100000 IF DIALOG.BOOLEAN(CHK_EB0SP19) §ormask=§ormask+0x0000000000080000 IF DIALOG.BOOLEAN(CHK_EB0SP18) §ormask=§ormask+0x0000000000040000 IF DIALOG.BOOLEAN(CHK_EB0SP17) §ormask=§ormask+0x0000000000020000 IF DIALOG.BOOLEAN(CHK_EB0SP16) §ormask=§ormask+0x0000000000010000 IF DIALOG.BOOLEAN(CHK_EB0SP15) §ormask=§ormask+0x0000000000008000 IF DIALOG.BOOLEAN(CHK_EB0SP14) §ormask=§ormask+0x0000000000004000 IF DIALOG.BOOLEAN(CHK_EB0SP13) §ormask=§ormask+0x0000000000002000 IF DIALOG.BOOLEAN(CHK_EB0SP12) §ormask=§ormask+0x0000000000001000 IF DIALOG.BOOLEAN(CHK_EB0SP11) §ormask=§ormask+0x0000000000000800 IF DIALOG.BOOLEAN(CHK_EB0SP10) §ormask=§ormask+0x0000000000000400 IF DIALOG.BOOLEAN(CHK_EB0SP9) §ormask=§ormask+0x0000000000000200 IF DIALOG.BOOLEAN(CHK_EB0SP8) §ormask=§ormask+0x0000000000000100 IF DIALOG.BOOLEAN(CHK_EB0SP7) §ormask=§ormask+0x0000000000000080 IF DIALOG.BOOLEAN(CHK_EB0SP6) §ormask=§ormask+0x0000000000000040 IF DIALOG.BOOLEAN(CHK_EB0SP5) §ormask=§ormask+0x0000000000000020 IF DIALOG.BOOLEAN(CHK_EB0SP4) §ormask=§ormask+0x0000000000000010 IF DIALOG.BOOLEAN(CHK_EB0SP3) §ormask=§ormask+0x0000000000000008 IF DIALOG.BOOLEAN(CHK_EB0SP2) §ormask=§ormask+0x0000000000000004 IF DIALOG.BOOLEAN(CHK_EB0SP1) §ormask=§ormask+0x0000000000000002 IF DIALOG.BOOLEAN(CHK_EB0SP0) §ormask=§ormask+0x0000000000000001 Data.Set DBG:0x600010 %Quad §ormask ) RETURN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Open additional windows ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; View the virtual memory ViewOBJ: Data.dump VM:0x00000000--0x00520008 /Byte /SpotLight RETURN ; View the PER file ViewRegister: PER.view ~~/perstr9flash.per RETURN ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; Helper sub to mark unimplemented functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MissingImpl: DIALOG.OK "Implementation Missing!" RETURN ENDDO