; --------------------------------------------------------------------------------
; @Title: Find SPI flash definition (=type) on TRACE32
; @Description: Script to find the NAND Flash type using TRACE32
; @Author: jjeong
; @Copyright: (C) 1989-2014 Lauterbach GmbH, licensed for use with TRACE32(R) only
; --------------------------------------------------------------------------------
; $Id: find_spidef.cmm 4745 2017-09-19 14:44:24Z jjeong $

LOCAL &arg1
ENTRY &arg1
&arg1=STRing.UPpeR("&arg1")  // for example "PREPAREONLY"



LOCAL &addr_cycles
LOCAL &erase_size
LOCAL &support_pageprogram
LOCAL &support_flagstatus
LOCAL &support_bankregister

//Initial DIALOG set "SPI64"
&addr_cycles=3.   ;bytes
&erase_size=64.   ;kbytes
&support_pageprogram=0x1
&support_flagstatus=0x0
&support_bankregister=0x0

&base_dir=OS.PPD()   //return Dialog directory

&base_y_step1=1. 

DIALOG.view
(&
	HEADER " Find SPI flash code " 
	POS 0. 0. 55. 13.
	LINE " "

; --------------------------------------------------------------------------------
; Step1
; --------------------------------------------------------------------------------

    POS 3. &base_y_step1+7. 25. 4.
    BOX  "code"

    POS 5. &base_y_step1+8. 22. 2.
    typeBox: DYNLTEXT ""

	POS 2. &base_y_step1 20. 1.
	TEXT "spi flash parameters"

	POS 3. &base_y_step1+1. 17. 1.
	TEXT "- Address Cycle:"
	POS 24. &base_y_step1+1. 7. 1.
	ADDR_CYCLE: PULLDOWN "3.,4." ""
	POS 32. &base_y_step1+1. 7. 1.
	TEXT "Byte"

	POS 3. &base_y_step1+2. 19. 1.
	TEXT "- Erase size by cmd (D8h):"
	POS 24. &base_y_step1+2. 7. 1.
	ERASE_SIZE: PULLDOWN "32.,64.,256." ""
	POS 32. &base_y_step1+2. 7. 1.
	TEXT "KByte"

  POS 3. &base_y_step1+4. 26. 1.
  TEXT  "- Support Page Program cmd (02h):"
  POS 32. &base_y_step1+4. 5.
  pageprogram.on: CHOOSEBOX "ON"  ""
  POS 38. &base_y_step1+4. 5.
  pageprogram.off: CHOOSEBOX "OFF" ""

  POS 3. &base_y_step1+5. 28. 1.
  TEXT  "- Support Read Flag Status cmd (70h)"
  POS 32. &base_y_step1+5. 5.
  flagstatus.on: CHOOSEBOX "ON"  ""
  POS 38. &base_y_step1+5. 4.
  flagstatus.off: CHOOSEBOX "OFF" ""
  POS 43. &base_y_step1+5. 11.
  TEXT  "(ex. Numonyx)"

  POS 3. &base_y_step1+6. 28. 1.
  TEXT  "- Support Read Bank Register cmd (16h)"
  POS 32. &base_y_step1+6. 5.
  bankregister.on: CHOOSEBOX "ON"  ""
  POS 38. &base_y_step1+6. 4.
  bankregister.off: CHOOSEBOX "OFF" ""
  POS 43. &base_y_step1+6. 11.
  TEXT  "(ex. Spansion)"

	POS 38. &base_y_step1+8. 12. 2.
	BUTTON "Find" 
	(
		GOSUB FIND_FLASHTYPE
	)
	POS 38. &base_y_step1+10. 12. 1.
	BUTTON "End" "goto END"
	
	CLOSE "jumpto END"
)

GOSUB REFRESH_DIALOG

STOP


REFRESH_DIALOG:

DIALOG.Set ADDR_CYCLE "&addr_cycles"
DIALOG.Set ERASE_SIZE "&erase_size"

IF &support_pageprogram==0x1
  DIALOG.Set pageprogram.on
ELSE
  DIALOG.Set pageprogram.off
  
IF &support_flagstatus==0x1
  DIALOG.Set flagstatus.on
ELSE
  DIALOG.Set flagstatus.off  


IF &support_bankregister==0x1
  DIALOG.Set bankregister.on
ELSE
  DIALOG.Set bankregister.off  

RETURN


INPUT_PARAM:
&addr_cycles=DIALOG.STRing(ADDR_CYCLE)   ;bytes
&erase_size=DIALOG.STRing(ERASE_SIZE)   ;kbytes

IF DIALOG.BOOLEAN(pageprogram.on)
  &support_pageprogram=0x1
ELSE
  &support_pageprogram=0x0

IF DIALOG.BOOLEAN(flagstatus.on)
  &support_flagstatus=0x1
ELSE
  &support_flagstatus=0x0

IF DIALOG.BOOLEAN(bankregister.on)
  &support_bankregister=0x1
ELSE
  &support_bankregister=0x0

RETURN


SELECT_PAGESIZE_MAIN:
	LOCAL &arg
	ENTRY &arg

GOSUB REFRESH_DIALOG

RETURN


FIND_FLASHTYPE:

	GOSUB INPUT_PARAM

&str_spiTYPE="SPI"   ; default name

; step1. number of address cycle

IF &addr_cycles>3.
&str_spiTYPE="&str_spiTYPE"+"4B"

; step2. erased block size
IF &erase_size>=256.
&str_spiTYPE="&str_spiTYPE"+"256"
ELSE IF &erase_size>=64.
&str_spiTYPE="&str_spiTYPE"+"64"
ELSE 
&str_spiTYPE="&str_spiTYPE"+"32"

; step3. support extra options
IF &support_pageprogram!=1.     ; not support page program, only byte program
&str_spiTYPE="&str_spiTYPE"+"P0"

IF &support_flagstatus==1.   ; 
&str_spiTYPE="&str_spiTYPE"+"FS"

IF &support_bankregister==1.   ; 
&str_spiTYPE="&str_spiTYPE"+"BR"

PRINT "Flash code: &str_spiTYPE"
DIALOG.Set typeBox "&str_spiTYPE"

RETURN

END:
	DIALOG.END
	ENDDO


