#------------------------------------------------------------
# atmega165a
#------------------------------------------------------------
 
part
    id            = "m165a";
    desc          = "ATMEGA165A";
    has_jtag      = yes;
    has_debugwire = no;
    has_pdi       = no;
    has_tpi       = no;
    signature     = 0x1e 0x94 0x10;
#    stk500_devcode = 0x??;
#    avr910_devcode = 0x??;
    reset            =  io;
     pgm_enable       = "1 0 1 0  1 1 0 0  1 0 0 1  0 0 1 1   x x x x  x x x x  x x x x  x x x x ";#AC53
     chip_erase       = "1 0 1 0  1 1 0 0  1 0 0 x  x x x x   x x x x  x x x x  x x x x  x x x x";#AC80
    chip_erase_delay=9000;

#STK500 parameters, from datasheet, parralel programming
    pagel            = 0xd7;# pin name in hex, i.e., 0xD7
    bs2              = 0xa0;

#STK500v2 parameters, from Atmel's XML files
    timeout     = 200;
    stabdelay   = 100;
    cmdexedelay = 25;
    synchloops  = 32;
    bytedelay   = 0;
    pollindex   = 3;
    pollvalue   = 0x53;
    predelay    = 1;
    postdelay   = 1;
    pollmethod  = 1;

# STK500v2 HVSP/PP programming parameters, from XML
    hventerstabdelay       = 100;
    latchcycles            = 6;
    togglevtg              = 0;
    poweroffdelay          = 0;
    resetdelayms           = 0;
    resetdelayus           = 0;
    hvleavestabdelay       = 15;
    resetdelay             = 15;
    chiperasepolltimeout   = 10;
    programfusepolltimeout = 5;
    programlockpolltimeout = 5;
  #PP only
    pp_controlstack      = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
	                   0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
	                   0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
	                   0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    progmodedelay         = 0;
    chiperasepulsewidth   = 0;
    programfusepulsewidth = 0;
    programlockpulsewidth = 0;

# JTAG ICE mkII parameters, from datasheet, register summary
    idr   =0x31;
    spmcr = 0x57 ; 
    eecr  = 0x3f ; 
    allowfullpagebitstream  = no;
    is_avr32   = no;

#memory information, adapt the commands with datasheet
    memory "flash"
      paged      =yes;
      size       =0x4000;
      page_size  =0x80;
      num_pages  =0x80;
      min_write_delay = 4500;
      max_write_delay = 4500;
      read_lo       = "0 0 1 0  0 0 0 0   x x x a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      read_hi       = "0 0 1 0  1 0 0 0   x x x a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      loadpage_lo   = "0 1 0 0  0 0 0 0   0 0 0 0  x x x x   x x a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_hi   = "0 1 0 0  1 0 0 0   0 0 0 0  x x x x   x x a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      writepage     = "0 1 0 0  1 1 0 0   x x x a12  a11 a10 a9 a8   a7 a6 x x  x x x x   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 128;
    delay       = 10;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "eeprom"
      paged      =no;#leave this no
      size       =0x0200;
      page_size  =0x04;
      num_pages  =0x80;
      min_write_delay = 3600;
      max_write_delay = 3600;
      read        = "1 0 1 0  0 0 0 0   0 0 0 0  0 0 x a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      write       = "1 1 0 0  0 0 0 0   0 0 0 0  0 0 x a8   a7 a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_lo = "1 1 0 0  0 0 0 1   0 0 0 0  0 0 0 0   0 0 0 0  0 0 a1 a0   i i i i  i i i i";
      writepage   = "1 1 0 0  0 0 1 0   0 0 0 0  0 0 x a8   a7 a6 a5 a4  a3 a2 0 0   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 4;
    delay       = 20;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "lfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "hfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  1 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "efuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 1 0 0   x x x x  x x x x   i i i i  i i i i";
     ;

    memory "lock"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 1 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "signature"
      size   = 3;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x a1 a0   o o o o  o o o o";
    ;

    memory "calibration"
      size   = 1;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
    ;


;
#------------------------------------------------------------
# atmega165pa
#------------------------------------------------------------

part
    id            = "m165pa";
    desc          = "ATMEGA165PA";
    has_jtag      = yes;
    has_debugwire = no;
    has_pdi       = no;
    has_tpi       = no;
    signature     = 0x1e 0x94 0x07;
#    stk500_devcode = 0x??;
#    avr910_devcode = 0x??;
    reset            =  io;
     pgm_enable       = "1 0 1 0  1 1 0 0  1 0 0 1  0 0 1 1   x x x x  x x x x  x x x x  x x x x ";#AC53
     chip_erase       = "1 0 1 0  1 1 0 0  1 0 0 x  x x x x   x x x x  x x x x  x x x x  x x x x";#AC80
    chip_erase_delay=9000;

#STK500 parameters, from datasheet, parralel programming
    pagel            = 0xd7;# pin name in hex, i.e., 0xD7
    bs2              = 0xa0;

#STK500v2 parameters, from Atmel's XML files
    timeout     = 200;
    stabdelay   = 100;
    cmdexedelay = 25;
    synchloops  = 32;
    bytedelay   = 0;
    pollindex   = 3;
    pollvalue   = 0x53;
    predelay    = 1;
    postdelay   = 1;
    pollmethod  = 1;

# STK500v2 HVSP/PP programming parameters, from XML
    hventerstabdelay       = 100;
    latchcycles            = 6;
    togglevtg              = 0;
    poweroffdelay          = 0;
    resetdelayms           = 0;
    resetdelayus           = 0;
    hvleavestabdelay       = 15;
    resetdelay             = 15;
    chiperasepolltimeout   = 10;
    programfusepolltimeout = 5;
    programlockpolltimeout = 5;
  #PP only
    pp_controlstack      = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
	                   0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
	                   0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
	                   0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    progmodedelay         = 0;
    chiperasepulsewidth   = 0;
    programfusepulsewidth = 0;
    programlockpulsewidth = 0;

# JTAG ICE mkII parameters, from datasheet, register summary
    idr   =0x31;
    spmcr = 0x57 ; 
    eecr  = 0x3f ; 
    allowfullpagebitstream  = no;
    is_avr32   = no;

#memory information, adapt the commands with datasheet
    memory "flash"
      paged      =yes;
      size       =0x4000;
      page_size  =0x80;
      num_pages  =0x80;
      min_write_delay = 4500;
      max_write_delay = 4500;
      read_lo       = "0 0 1 0  0 0 0 0   x x x a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      read_hi       = "0 0 1 0  1 0 0 0   x x x a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      loadpage_lo   = "0 1 0 0  0 0 0 0   0 0 0 0  x x x x   x x a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_hi   = "0 1 0 0  1 0 0 0   0 0 0 0  x x x x   x x a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      writepage     = "0 1 0 0  1 1 0 0   x x x a12  a11 a10 a9 a8   a7 a6 x x  x x x x   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 128;
    delay       = 10;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "eeprom"
      paged      =no;#leave this no
      size       =0x0200;
      page_size  =0x04;
      num_pages  =0x80;
      min_write_delay = 3600;
      max_write_delay = 3600;
      read        = "1 0 1 0  0 0 0 0   0 0 0 0  0 0 x a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      write       = "1 1 0 0  0 0 0 0   0 0 0 0  0 0 x a8   a7 a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_lo = "1 1 0 0  0 0 0 1   0 0 0 0  0 0 0 0   0 0 0 0  0 0 a1 a0   i i i i  i i i i";
      writepage   = "1 1 0 0  0 0 1 0   0 0 0 0  0 0 x a8   a7 a6 a5 a4  a3 a2 0 0   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 4;
    delay       = 20;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "lfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "hfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  1 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "efuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 1 0 0   x x x x  x x x x   i i i i  i i i i";
     ;

    memory "lock"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 1 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "signature"
      size   = 3;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x a1 a0   o o o o  o o o o";
    ;

    memory "calibration"
      size   = 1;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
    ;


;
#------------------------------------------------------------
# atmega165p
#------------------------------------------------------------

part
    id            = "m165p";
    desc          = "ATMEGA165P";
    has_jtag      = yes;
    has_debugwire = no;
    has_pdi       = no;
    has_tpi       = no;
    signature     = 0x1e 0x94 0x07;
#    stk500_devcode = 0x??;
#    avr910_devcode = 0x??;
    reset            = io;
     pgm_enable       = "1 0 1 0  1 1 0 0  1 0 0 1  0 0 1 1   x x x x  x x x x  x x x x  x x x x ";#AC53
     chip_erase       = "1 0 1 0  1 1 0 0  1 0 0 x  x x x x   x x x x  x x x x  x x x x  x x x x";#AC80
    chip_erase_delay=9000;

#STK500 parameters, from datasheet, parralel programming
    pagel            = 0xd7;
    bs2              = 0xa0;

#STK500v2 parameters, from Atmel's XML files
    timeout     = 200;
    stabdelay   = 100;
    cmdexedelay = 25;
    synchloops  = 32;
    bytedelay   = 0;
    pollindex   = 3;
    pollvalue   = 0x53;
    predelay    = 1;
    postdelay   = 1;
    pollmethod  = 1;

# STK500v2 HVSP/PP programming parameters, from XML
    hventerstabdelay       = 100;
    latchcycles            = 6;
    togglevtg              = 0;
    poweroffdelay          = 0;
    resetdelayms           = 0;
    resetdelayus           = 0;
    hvleavestabdelay       = 15;
    resetdelay             = 15;
    chiperasepolltimeout   = 10;
    programfusepolltimeout = 5;
    programlockpolltimeout = 5;
  #PP only
    pp_controlstack      = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
	                   0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
	                   0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
	                   0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    progmodedelay         = 0;
    chiperasepulsewidth   = 0;
    programfusepulsewidth = 0;
    programlockpulsewidth = 0;

# JTAG ICE mkII parameters, from datasheet, register summary
    idr   =0x31;
    spmcr = 0x57 ; 
#    rampz = num ;  # IO addr of RAMPZ reg
    eecr  = 0x3f ;  
    allowfullpagebitstream  = no;
    is_avr32   = no;

#memory information, adapt the commands with datasheet
    memory "flash"
      paged      =yes;
      size       =0x4000;
      page_size  =0x80;
      num_pages  =0x80;
      min_write_delay = 4500;#t_wd_flash
      max_write_delay = 4500;
      read_lo   	= "0 0 1 0  0 0 0 0   x x x a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      read_hi   	= "0 0 1 0  1 0 0 0   x x x a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      loadpage_lo	= "0 1 0 0  0 0 0 0   0 0 0 0  x x x x   x x a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_hi	= "0 1 0 0  1 0 0 0   0 0 0 0  x x x x   x x a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      writepage 	= "0 1 0 0  1 1 0 0   x x x a12  a11 a10 a9 a8   a7 a6 x x  x x x x   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 128;
    delay       = 10;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "eeprom"
      paged      =no;#leave this no
      size       =0x0200;
      page_size  =0x04;
      num_pages  =0x80;
      min_write_delay = 3600;#t_wd_eeprom
      max_write_delay = 3600;
      read   		= "1 0 1 0  0 0 0 0   0 0 0 0  0 0 x a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      write  		= "1 1 0 0  0 0 0 0   0 0 0 0  0 0 x a8   a7 a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_lo	= "1 1 0 0  0 0 0 1   0 0 0 0  0 0 0 0   0 0 0 0  0 0 a1 a0   i i i i  i i i i";
      writepage	= "1 1 0 0  0 0 1 0   0 0 0 0  0 0 x a8   a7 a6 a5 a4  a3 a2 0 0   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 4;
    delay       = 20;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "lfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "hfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  1 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "efuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 1 0 0   x x x x  x x x x   i i i i  i i i i";
     ;

    memory "lock"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 1 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "signature"
      size   = 3;
      read   = "0 0 1 1  0 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x a1 a0   o o o o  o o o o";
    ;

    memory "calibration"
      size   = 1;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
    ;


;
#------------------------------------------------------------
# atmega3250a
#------------------------------------------------------------

part
    id            = "m3250a";
    desc          = "ATMEGA3250A";
    has_jtag      = yes;
    has_debugwire = no;
    has_pdi       = no;
    has_tpi       = no;
    signature     = 0x1e 0x95 0x0e;
#    stk500_devcode = 0x??;
#    avr910_devcode = 0x??;
    reset            =  io;
     pgm_enable       = "1 0 1 0  1 1 0 0  1 0 0 1  0 0 1 1   x x x x  x x x x  x x x x  x x x x ";#AC53
     chip_erase       = "1 0 1 0  1 1 0 0  1 0 0 x  x x x x   x x x x  x x x x  x x x x  x x x x";#AC80
    chip_erase_delay=9000;

#STK500 parameters, from datasheet, parralel programming
    pagel            = 0xd7;# pin name in hex, i.e., 0xD7
    bs2              = 0xa0;

#STK500v2 parameters, from Atmel's XML files
    timeout     = 200;
    stabdelay   = 100;
    cmdexedelay = 25;
    synchloops  = 32;
    bytedelay   = 0;
    pollindex   = 3;
    pollvalue   = 0x53;
    predelay    = 1;
    postdelay   = 1;
    pollmethod  = 1;

# STK500v2 HVSP/PP programming parameters, from XML
    hventerstabdelay       = 100;
    latchcycles            = 6;
    togglevtg              = 0;
    poweroffdelay          = 0;
    resetdelayms           = 0;
    resetdelayus           = 0;
    hvleavestabdelay       = 15;
    resetdelay             = 15;
    chiperasepolltimeout   = 10;
    programfusepolltimeout = 5;
    programlockpolltimeout = 5;
  #PP only
    pp_controlstack      = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
	                   0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
	                   0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
	                   0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    progmodedelay         = 0;
    chiperasepulsewidth   = 0;
    programfusepulsewidth = 0;
    programlockpulsewidth = 0;

# JTAG ICE mkII parameters, from datasheet, register summary
    idr   =0x31;
    spmcr = 0x57 ; 
    eecr  = 0x3f ; 
    allowfullpagebitstream  = no;
    is_avr32   = no;

#memory information, adapt the commands with datasheet
    memory "flash"
      paged      =yes;
      size       =0x8000;
      page_size  =0x80;
      num_pages  =0x100;
      min_write_delay = 4500;
      max_write_delay = 4500;
      read_lo       = "0 0 1 0  0 0 0 0   x x a13 a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      read_hi       = "0 0 1 0  1 0 0 0   x x a13 a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      loadpage_lo   = "0 1 0 0  0 0 0 0   0 0 0 0  x x x x   x x a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_hi   = "0 1 0 0  1 0 0 0   0 0 0 0  x x x x   x x a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      writepage     = "0 1 0 0  1 1 0 0   x x a13 a12  a11 a10 a9 a8   a7 a6 x x  x x x x   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 128;
    delay       = 10;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "eeprom"
      paged      =no;#leave this no
      size       =0x0400;
      page_size  =0x04;
      num_pages  =0x100;
      min_write_delay = 3600;
      max_write_delay = 3600;
      read        = "1 0 1 0  0 0 0 0   0 0 0 0  0 0 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      write       = "1 1 0 0  0 0 0 0   0 0 0 0  0 0 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_lo = "1 1 0 0  0 0 0 1   0 0 0 0  0 0 0 0   0 0 0 0  0 0 a1 a0   i i i i  i i i i";
      writepage   = "1 1 0 0  0 0 1 0   0 0 0 0  0 0 a9 a8   a7 a6 a5 a4  a3 a2 0 0   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 4;
    delay       = 10;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "lfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "hfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  1 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "efuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 1 0 0   x x x x  x x x x   i i i i  i i i i";
     ;

    memory "lock"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 1 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "signature"
      size   = 3;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x a1 a0   o o o o  o o o o";
    ;

    memory "calibration"
      size   = 1;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
    ;


;
#------------------------------------------------------------
# atmega3250pa
#------------------------------------------------------------

part
    id            = "m3250pa";
    desc          = "ATMEGA3250PA";
    has_jtag      = yes;
    has_debugwire = no;
    has_pdi       = no;
    has_tpi       = no;
    signature     = 0x1e 0x95 0x0e;
#    stk500_devcode = 0x??;
#    avr910_devcode = 0x??;
    reset            =  io;
     pgm_enable       = "1 0 1 0  1 1 0 0  1 0 0 1  0 0 1 1   x x x x  x x x x  x x x x  x x x x ";#AC53
     chip_erase       = "1 0 1 0  1 1 0 0  1 0 0 x  x x x x   x x x x  x x x x  x x x x  x x x x";#AC80
    chip_erase_delay=9000;

#STK500 parameters, from datasheet, parralel programming
    pagel            = 0xd7;# pin name in hex, i.e., 0xD7
    bs2              = 0xa0;

#STK500v2 parameters, from Atmel's XML files
    timeout     = 200;
    stabdelay   = 100;
    cmdexedelay = 25;
    synchloops  = 32;
    bytedelay   = 0;
    pollindex   = 3;
    pollvalue   = 0x53;
    predelay    = 1;
    postdelay   = 1;
    pollmethod  = 1;

# STK500v2 HVSP/PP programming parameters, from XML
    hventerstabdelay       = 100;
    latchcycles            = 6;
    togglevtg              = 0;
    poweroffdelay          = 0;
    resetdelayms           = 0;
    resetdelayus           = 0;
    hvleavestabdelay       = 15;
    resetdelay             = 15;
    chiperasepolltimeout   = 10;
    programfusepolltimeout = 5;
    programlockpolltimeout = 5;
  #PP only
    pp_controlstack      = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
	                   0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
	                   0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
	                   0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    progmodedelay         = 0;
    chiperasepulsewidth   = 0;
    programfusepulsewidth = 0;
    programlockpulsewidth = 0;

# JTAG ICE mkII parameters, from datasheet, register summary
    idr   =0x31;
    spmcr = 0x57 ; 
    eecr  = 0x3f ; 
    allowfullpagebitstream  = no;
    is_avr32   = no;

#memory information, adapt the commands with datasheet
    memory "flash"
      paged      =yes;
      size       =0x8000;
      page_size  =0x80;
      num_pages  =0x100;
      min_write_delay = 4500;
      max_write_delay = 4500;
      read_lo       = "0 0 1 0  0 0 0 0   x x a13 a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      read_hi       = "0 0 1 0  1 0 0 0   x x a13 a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      loadpage_lo   = "0 1 0 0  0 0 0 0   0 0 0 0  x x x x   x x a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_hi   = "0 1 0 0  1 0 0 0   0 0 0 0  x x x x   x x a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      writepage     = "0 1 0 0  1 1 0 0   x x a13 a12  a11 a10 a9 a8   a7 a6 x x  x x x x   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 128;
    delay       = 10;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "eeprom"
      paged      =no;#leave this no
      size       =0x0400;
      page_size  =0x04;
      num_pages  =0x100;
      min_write_delay = 3600;
      max_write_delay = 3600;
      read        = "1 0 1 0  0 0 0 0   0 0 0 0  0 0 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      write       = "1 1 0 0  0 0 0 0   0 0 0 0  0 0 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_lo = "1 1 0 0  0 0 0 1   0 0 0 0  0 0 0 0   0 0 0 0  0 0 a1 a0   i i i i  i i i i";
      writepage   = "1 1 0 0  0 0 1 0   0 0 0 0  0 0 a9 a8   a7 a6 a5 a4  a3 a2 0 0   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 4;
    delay       = 10;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "lfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "hfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  1 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "efuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 1 0 0   x x x x  x x x x   i i i i  i i i i";
     ;

    memory "lock"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 1 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "signature"
      size   = 3;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x a1 a0   o o o o  o o o o";
    ;

    memory "calibration"
      size   = 1;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
    ;


;
#------------------------------------------------------------
# atmega325a
#------------------------------------------------------------

part
    id            = "m325a";
    desc          = "ATMEGA325A";
    has_jtag      = yes;
    has_debugwire = no;
    has_pdi       = no;
    has_tpi       = no;
    signature     = 0x1e 0x95 0x05;
#    stk500_devcode = 0x??;
#    avr910_devcode = 0x??;
    reset            =  io;
     pgm_enable       = "1 0 1 0  1 1 0 0  1 0 0 1  0 0 1 1   x x x x  x x x x  x x x x  x x x x ";#AC53
     chip_erase       = "1 0 1 0  1 1 0 0  1 0 0 x  x x x x   x x x x  x x x x  x x x x  x x x x";#AC80
    chip_erase_delay=9000;

#STK500 parameters, from datasheet, parralel programming
    pagel            = 0xd7;# pin name in hex, i.e., 0xD7
    bs2              = 0xa0;

#STK500v2 parameters, from Atmel's XML files
    timeout     = 200;
    stabdelay   = 100;
    cmdexedelay = 25;
    synchloops  = 32;
    bytedelay   = 0;
    pollindex   = 3;
    pollvalue   = 0x53;
    predelay    = 1;
    postdelay   = 1;
    pollmethod  = 1;

# STK500v2 HVSP/PP programming parameters, from XML
    hventerstabdelay       = 100;
    latchcycles            = 6;
    togglevtg              = 0;
    poweroffdelay          = 0;
    resetdelayms           = 0;
    resetdelayus           = 0;
    hvleavestabdelay       = 15;
    resetdelay             = 15;
    chiperasepolltimeout   = 10;
    programfusepolltimeout = 5;
    programlockpolltimeout = 5;
  #PP only
    pp_controlstack      = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
	                   0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
	                   0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
	                   0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    progmodedelay         = 0;
    chiperasepulsewidth   = 0;
    programfusepulsewidth = 0;
    programlockpulsewidth = 0;

# JTAG ICE mkII parameters, from datasheet, register summary
    idr   =0x31;
    spmcr = 0x57 ; 
    eecr  = 0x3f ; 
    allowfullpagebitstream  = no;
    is_avr32   = no;

#memory information, adapt the commands with datasheet
    memory "flash"
      paged      =yes;
      size       =0x8000;
      page_size  =0x80;
      num_pages  =0x100;
      min_write_delay = 4500;
      max_write_delay = 4500;
      read_lo       = "0 0 1 0  0 0 0 0   x x a13 a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      read_hi       = "0 0 1 0  1 0 0 0   x x a13 a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      loadpage_lo   = "0 1 0 0  0 0 0 0   0 0 0 0  x x x x   x x a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_hi   = "0 1 0 0  1 0 0 0   0 0 0 0  x x x x   x x a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      writepage     = "0 1 0 0  1 1 0 0   x x a13 a12  a11 a10 a9 a8   a7 a6 x x  x x x x   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 128;
    delay       = 10;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "eeprom"
      paged      =no;#leave this no
      size       =0x0400;
      page_size  =0x04;
      num_pages  =0x100;
      min_write_delay = 3600;
      max_write_delay = 3600;
      read        = "1 0 1 0  0 0 0 0   0 0 0 0  0 0 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      write       = "1 1 0 0  0 0 0 0   0 0 0 0  0 0 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_lo = "1 1 0 0  0 0 0 1   0 0 0 0  0 0 0 0   0 0 0 0  0 0 a1 a0   i i i i  i i i i";
      writepage   = "1 1 0 0  0 0 1 0   0 0 0 0  0 0 a9 a8   a7 a6 a5 a4  a3 a2 0 0   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 4;
    delay       = 10;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "lfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "hfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  1 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "efuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 1 0 0   x x x x  x x x x   i i i i  i i i i";
     ;

    memory "lock"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 1 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "signature"
      size   = 3;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x a1 a0   o o o o  o o o o";
    ;

    memory "calibration"
      size   = 1;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
    ;


;
#------------------------------------------------------------
# atmega325pa
#------------------------------------------------------------

part
    id            = "m325pa";
    desc          = "ATMEGA325PA";
    has_jtag      = yes;
    has_debugwire = no;
    has_pdi       = no;
    has_tpi       = no;
    signature     = 0x1e 0x95 0x05;
#    stk500_devcode = 0x??;
#    avr910_devcode = 0x??;
    reset            =  io;
     pgm_enable       = "1 0 1 0  1 1 0 0  1 0 0 1  0 0 1 1   x x x x  x x x x  x x x x  x x x x ";#AC53
     chip_erase       = "1 0 1 0  1 1 0 0  1 0 0 x  x x x x   x x x x  x x x x  x x x x  x x x x";#AC80
    chip_erase_delay=9000;

#STK500 parameters, from datasheet, parralel programming
    pagel            = 0xd7;# pin name in hex, i.e., 0xD7
    bs2              = 0xa0;

#STK500v2 parameters, from Atmel's XML files
    timeout     = 200;
    stabdelay   = 100;
    cmdexedelay = 25;
    synchloops  = 32;
    bytedelay   = 0;
    pollindex   = 3;
    pollvalue   = 0x53;
    predelay    = 1;
    postdelay   = 1;
    pollmethod  = 1;

# STK500v2 HVSP/PP programming parameters, from XML
    hventerstabdelay       = 100;
    latchcycles            = 6;
    togglevtg              = 0;
    poweroffdelay          = 0;
    resetdelayms           = 0;
    resetdelayus           = 0;
    hvleavestabdelay       = 15;
    resetdelay             = 15;
    chiperasepolltimeout   = 10;
    programfusepolltimeout = 5;
    programlockpolltimeout = 5;
  #PP only
    pp_controlstack      = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
	                   0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
	                   0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
	                   0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    progmodedelay         = 0;
    chiperasepulsewidth   = 0;
    programfusepulsewidth = 0;
    programlockpulsewidth = 0;

# JTAG ICE mkII parameters, from datasheet, register summary
    idr   =0x31;
    spmcr = 0x57 ; 
    eecr  = 0x3f ; 
    allowfullpagebitstream  = no;
    is_avr32   = no;

#memory information, adapt the commands with datasheet
    memory "flash"
      paged      =yes;
      size       =0x8000;
      page_size  =0x80;
      num_pages  =0x100;
      min_write_delay = 4500;
      max_write_delay = 4500;
      read_lo       = "0 0 1 0  0 0 0 0   x x a13 a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      read_hi       = "0 0 1 0  1 0 0 0   x x a13 a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      loadpage_lo   = "0 1 0 0  0 0 0 0   0 0 0 0  x x x x   x x a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_hi   = "0 1 0 0  1 0 0 0   0 0 0 0  x x x x   x x a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      writepage     = "0 1 0 0  1 1 0 0   x x a13 a12  a11 a10 a9 a8   a7 a6 x x  x x x x   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 128;
    delay       = 10;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "eeprom"
      paged      =no;#leave this no
      size       =0x0400;
      page_size  =0x04;
      num_pages  =0x100;
      min_write_delay = 3600;
      max_write_delay = 3600;
      read        = "1 0 1 0  0 0 0 0   0 0 0 0  0 0 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      write       = "1 1 0 0  0 0 0 0   0 0 0 0  0 0 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_lo = "1 1 0 0  0 0 0 1   0 0 0 0  0 0 0 0   0 0 0 0  0 0 a1 a0   i i i i  i i i i";
      writepage   = "1 1 0 0  0 0 1 0   0 0 0 0  0 0 a9 a8   a7 a6 a5 a4  a3 a2 0 0   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 4;
    delay       = 10;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "lfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "hfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  1 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "efuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 1 0 0   x x x x  x x x x   i i i i  i i i i";
     ;

    memory "lock"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 1 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "signature"
      size   = 3;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x a1 a0   o o o o  o o o o";
    ;

    memory "calibration"
      size   = 1;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
    ;


;
#------------------------------------------------------------
# atmega6450a
#------------------------------------------------------------

part
    id            = "m6450a";
    desc          = "ATMEGA6450A";
    has_jtag      = yes;
    has_debugwire = no;
    has_pdi       = no;
    has_tpi       = no;
    signature     = 0x1e 0x96 0x06;
#    stk500_devcode = 0x??;
#    avr910_devcode = 0x??;
    reset            =  io;
     pgm_enable       = "1 0 1 0  1 1 0 0  1 0 0 1  0 0 1 1   x x x x  x x x x  x x x x  x x x x ";#AC53
     chip_erase       = "1 0 1 0  1 1 0 0  1 0 0 x  x x x x   x x x x  x x x x  x x x x  x x x x";#AC80
    chip_erase_delay=9000;

#STK500 parameters, from datasheet, parralel programming
    pagel            = 0xd7;# pin name in hex, i.e., 0xD7
    bs2              = 0xa0;

#STK500v2 parameters, from Atmel's XML files
    timeout     = 200;
    stabdelay   = 100;
    cmdexedelay = 25;
    synchloops  = 32;
    bytedelay   = 0;
    pollindex   = 3;
    pollvalue   = 0x53;
    predelay    = 1;
    postdelay   = 1;
    pollmethod  = 1;

# STK500v2 HVSP/PP programming parameters, from XML
    hventerstabdelay       = 100;
    latchcycles            = 5;
    togglevtg              = 1;
    poweroffdelay          = 15;
    resetdelayms           = 1;
    resetdelayus           = 0;
    hvleavestabdelay       = 15;
    resetdelay             = 15;
    chiperasepolltimeout   = 10;
    programfusepolltimeout = 5;
    programlockpolltimeout = 5;
  #PP only
    pp_controlstack      = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
	                   0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
	                   0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
	                   0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    progmodedelay         = 0;
    chiperasepulsewidth   = 0;
    programfusepulsewidth = 0;
    programlockpulsewidth = 0;

# JTAG ICE mkII parameters, from datasheet, register summary
    idr   =0x31;
    spmcr = 0x57 ; 
    eecr  = 0x3f ; 
    allowfullpagebitstream  = no;
    is_avr32   = no;

#memory information, adapt the commands with datasheet
    memory "flash"
      paged      =yes;
      size       =0x10000;
      page_size  =0x100;
      num_pages  =0x100;
      min_write_delay = 4500;
      max_write_delay = 4500;
      read_lo       = "0 0 1 0  0 0 0 0   x a14 a13 a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      read_hi       = "0 0 1 0  1 0 0 0   x a14 a13 a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      loadpage_lo   = "0 1 0 0  0 0 0 0   0 0 0 0  x x x x   x a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_hi   = "0 1 0 0  1 0 0 0   0 0 0 0  x x x x   x a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      writepage     = "0 1 0 0  1 1 0 0   x a14 a13 a12  a11 a10 a9 a8   a7 x x x  x x x x   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 128;
    delay       = 10;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "eeprom"
      paged      =no;#leave this no
      size       =0x0800;
      page_size  =0x08;
      num_pages  =0x100;
      min_write_delay = 3600;
      max_write_delay = 3600;
      read        = "1 0 1 0  0 0 0 0   0 0 0 0  0 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      write       = "1 1 0 0  0 0 0 0   0 0 0 0  0 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_lo = "1 1 0 0  0 0 0 1   0 0 0 0  0 0 0 0   0 0 0 0  0 a2 a1 a0   i i i i  i i i i";
      writepage   = "1 1 0 0  0 0 1 0   0 0 0 0  0 0 a9 a8   a7 a6 a5 a4  a3 0 0 0   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 4;
    delay       = 10;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "lfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "hfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  1 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "efuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 1 0 0   x x x x  x x x x   i i i i  i i i i";
     ;

    memory "lock"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 1 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "signature"
      size   = 3;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x a1 a0   o o o o  o o o o";
    ;

    memory "calibration"
      size   = 1;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
    ;


;
#------------------------------------------------------------
# atmega6450p
#------------------------------------------------------------

part
    id            = "m6450p";
    desc          = "ATMEGA6450P";
    has_jtag      = yes;
    has_debugwire = no;
    has_pdi       = no;
    has_tpi       = no;
    signature     = 0x1e 0x96 0x06;
#    stk500_devcode = 0x??;
#    avr910_devcode = 0x??;
    reset            =  io;
     pgm_enable       = "1 0 1 0  1 1 0 0  1 0 0 1  0 0 1 1   x x x x  x x x x  x x x x  x x x x ";#AC53
     chip_erase       = "1 0 1 0  1 1 0 0  1 0 0 x  x x x x   x x x x  x x x x  x x x x  x x x x";#AC80
    chip_erase_delay=9000;

#STK500 parameters, from datasheet, parralel programming
    pagel            = 0xd7;# pin name in hex, i.e., 0xD7
    bs2              = 0xa0;

#STK500v2 parameters, from Atmel's XML files
    timeout     = 200;
    stabdelay   = 100;
    cmdexedelay = 25;
    synchloops  = 32;
    bytedelay   = 0;
    pollindex   = 3;
    pollvalue   = 0x53;
    predelay    = 1;
    postdelay   = 1;
    pollmethod  = 1;

# STK500v2 HVSP/PP programming parameters, from XML
    hventerstabdelay       = 100;
    latchcycles            = 5;
    togglevtg              = 1;
    poweroffdelay          = 15;
    resetdelayms           = 1;
    resetdelayus           = 0;
    hvleavestabdelay       = 15;
    resetdelay             = 15;
    chiperasepolltimeout   = 10;
    programfusepolltimeout = 5;
    programlockpolltimeout = 5;
  #PP only
    pp_controlstack      = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
	                   0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
	                   0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
	                   0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    progmodedelay         = 0;
    chiperasepulsewidth   = 0;
    programfusepulsewidth = 0;
    programlockpulsewidth = 0;

# JTAG ICE mkII parameters, from datasheet, register summary
    idr   =0x31;
    spmcr = 0x57 ; 
    eecr  = 0x3f ; 
    allowfullpagebitstream  = no;
    is_avr32   = no;

#memory information, adapt the commands with datasheet
    memory "flash"
      paged      =yes;
      size       =0x10000;
      page_size  =0x100;
      num_pages  =0x100;
      min_write_delay = 4500;
      max_write_delay = 4500;
      read_lo       = "0 0 1 0  0 0 0 0   x a14 a13 a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      read_hi       = "0 0 1 0  1 0 0 0   x a14 a13 a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      loadpage_lo   = "0 1 0 0  0 0 0 0   0 0 0 0  x x x x   x a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_hi   = "0 1 0 0  1 0 0 0   0 0 0 0  x x x x   x a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      writepage     = "0 1 0 0  1 1 0 0   x a14 a13 a12  a11 a10 a9 a8   a7 x x x  x x x x   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 128;
    delay       = 10;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "eeprom"
      paged      =no;#leave this no
      size       =0x0800;
      page_size  =0x08;
      num_pages  =0x100;
      min_write_delay = 3600;
      max_write_delay = 3600;
      read        = "1 0 1 0  0 0 0 0   0 0 0 0  0 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      write       = "1 1 0 0  0 0 0 0   0 0 0 0  0 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_lo = "1 1 0 0  0 0 0 1   0 0 0 0  0 0 0 0   0 0 0 0  0 a2 a1 a0   i i i i  i i i i";
      writepage   = "1 1 0 0  0 0 1 0   0 0 0 0  0 0 a9 a8   a7 a6 a5 a4  a3 0 0 0   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 4;
    delay       = 10;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "lfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "hfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  1 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "efuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 1 0 0   x x x x  x x x x   i i i i  i i i i";
     ;

    memory "lock"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 1 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "signature"
      size   = 3;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x a1 a0   o o o o  o o o o";
    ;

    memory "calibration"
      size   = 1;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
    ;


;
#------------------------------------------------------------
# atmega645a
#------------------------------------------------------------

part
    id            = "m645a";
    desc          = "ATMEGA645A";
    has_jtag      = yes;
    has_debugwire = no;
    has_pdi       = no;
    has_tpi       = no;
    signature     = 0x1e 0x96 0x05;
#    stk500_devcode = 0x??;
#    avr910_devcode = 0x??;
    reset            =  io;
     pgm_enable       = "1 0 1 0  1 1 0 0  1 0 0 1  0 0 1 1   x x x x  x x x x  x x x x  x x x x ";#AC53
     chip_erase       = "1 0 1 0  1 1 0 0  1 0 0 x  x x x x   x x x x  x x x x  x x x x  x x x x";#AC80
    chip_erase_delay=9000;

#STK500 parameters, from datasheet, parralel programming
    pagel            = 0xd7;# pin name in hex, i.e., 0xD7
    bs2              = 0xa0;

#STK500v2 parameters, from Atmel's XML files
    timeout     = 200;
    stabdelay   = 100;
    cmdexedelay = 25;
    synchloops  = 32;
    bytedelay   = 0;
    pollindex   = 3;
    pollvalue   = 0x53;
    predelay    = 1;
    postdelay   = 1;
    pollmethod  = 1;

# STK500v2 HVSP/PP programming parameters, from XML
    hventerstabdelay       = 100;
    latchcycles            = 5;
    togglevtg              = 1;
    poweroffdelay          = 15;
    resetdelayms           = 1;
    resetdelayus           = 0;
    hvleavestabdelay       = 15;
    resetdelay             = 15;
    chiperasepolltimeout   = 10;
    programfusepolltimeout = 5;
    programlockpolltimeout = 5;
  #PP only
    pp_controlstack      = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
	                   0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
	                   0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
	                   0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    progmodedelay         = 0;
    chiperasepulsewidth   = 0;
    programfusepulsewidth = 0;
    programlockpulsewidth = 0;

# JTAG ICE mkII parameters, from datasheet, register summary
    idr   =0x31;
    spmcr = 0x57 ; 
    eecr  = 0x3f ; 
    allowfullpagebitstream  = no;
    is_avr32   = no;

#memory information, adapt the commands with datasheet
    memory "flash"
      paged      =yes;
      size       =0x10000;
      page_size  =0x100;
      num_pages  =0x100;
      min_write_delay = 4500;
      max_write_delay = 4500;
      read_lo       = "0 0 1 0  0 0 0 0   x a14 a13 a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      read_hi       = "0 0 1 0  1 0 0 0   x a14 a13 a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      loadpage_lo   = "0 1 0 0  0 0 0 0   0 0 0 0  x x x x   x a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_hi   = "0 1 0 0  1 0 0 0   0 0 0 0  x x x x   x a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      writepage     = "0 1 0 0  1 1 0 0   x a14 a13 a12  a11 a10 a9 a8   a7 x x x  x x x x   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 128;
    delay       = 10;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "eeprom"
      paged      =no;#leave this no
      size       =0x0800;
      page_size  =0x08;
      num_pages  =0x100;
      min_write_delay = 3600;
      max_write_delay = 3600;
      read        = "1 0 1 0  0 0 0 0   0 0 0 0  0 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      write       = "1 1 0 0  0 0 0 0   0 0 0 0  0 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_lo = "1 1 0 0  0 0 0 1   0 0 0 0  0 0 0 0   0 0 0 0  0 a2 a1 a0   i i i i  i i i i";
      writepage   = "1 1 0 0  0 0 1 0   0 0 0 0  0 0 a9 a8   a7 a6 a5 a4  a3 0 0 0   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 4;
    delay       = 10;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "lfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "hfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  1 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "efuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 1 0 0   x x x x  x x x x   i i i i  i i i i";
     ;

    memory "lock"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 1 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "signature"
      size   = 3;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x a1 a0   o o o o  o o o o";
    ;

    memory "calibration"
      size   = 1;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
    ;


;
#------------------------------------------------------------
# atmega645p
#------------------------------------------------------------

part
    id            = "m645p";
    desc          = "ATMEGA645P";
    has_jtag      = yes;
    has_debugwire = no;
    has_pdi       = no;
    has_tpi       = no;
    signature     = 0x1e 0x96 0x05;
#    stk500_devcode = 0x??;
#    avr910_devcode = 0x??;
    reset            =  io;
     pgm_enable       = "1 0 1 0  1 1 0 0  1 0 0 1  0 0 1 1   x x x x  x x x x  x x x x  x x x x ";#AC53
     chip_erase       = "1 0 1 0  1 1 0 0  1 0 0 x  x x x x   x x x x  x x x x  x x x x  x x x x";#AC80
    chip_erase_delay=9000;

#STK500 parameters, from datasheet, parralel programming
    pagel            = 0xd7;# pin name in hex, i.e., 0xD7
    bs2              = 0xa0;

#STK500v2 parameters, from Atmel's XML files
    timeout     = 200;
    stabdelay   = 100;
    cmdexedelay = 25;
    synchloops  = 32;
    bytedelay   = 0;
    pollindex   = 3;
    pollvalue   = 0x53;
    predelay    = 1;
    postdelay   = 1;
    pollmethod  = 1;

# STK500v2 HVSP/PP programming parameters, from XML
    hventerstabdelay       = 100;
    latchcycles            = 5;
    togglevtg              = 1;
    poweroffdelay          = 15;
    resetdelayms           = 1;
    resetdelayus           = 0;
    hvleavestabdelay       = 15;
    resetdelay             = 15;
    chiperasepolltimeout   = 10;
    programfusepolltimeout = 5;
    programlockpolltimeout = 5;
  #PP only
    pp_controlstack      = 0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
	                   0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
	                   0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
	                   0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    progmodedelay         = 0;
    chiperasepulsewidth   = 0;
    programfusepulsewidth = 0;
    programlockpulsewidth = 0;

# JTAG ICE mkII parameters, from datasheet, register summary
    idr   =0x31;
    spmcr = 0x57 ; 
    eecr  = 0x3f ; 
    allowfullpagebitstream  = no;
    is_avr32   = no;

#memory information, adapt the commands with datasheet
    memory "flash"
      paged      =yes;
      size       =0x10000;
      page_size  =0x100;
      num_pages  =0x100;
      min_write_delay = 4500;
      max_write_delay = 4500;
      read_lo       = "0 0 1 0  0 0 0 0   x a14 a13 a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      read_hi       = "0 0 1 0  1 0 0 0   x a14 a13 a12  a11 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      loadpage_lo   = "0 1 0 0  0 0 0 0   0 0 0 0  x x x x   x a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_hi   = "0 1 0 0  1 0 0 0   0 0 0 0  x x x x   x a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      writepage     = "0 1 0 0  1 1 0 0   x a14 a13 a12  a11 a10 a9 a8   a7 x x x  x x x x   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 128;
    delay       = 10;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "eeprom"
      paged      =no;#leave this no
      size       =0x0800;
      page_size  =0x08;
      num_pages  =0x100;
      min_write_delay = 3600;
      max_write_delay = 3600;
      read        = "1 0 1 0  0 0 0 0   0 0 0 0  0 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   o o o o  o o o o";
      write       = "1 1 0 0  0 0 0 0   0 0 0 0  0 a10 a9 a8   a7 a6 a5 a4  a3 a2 a1 a0   i i i i  i i i i";
      loadpage_lo = "1 1 0 0  0 0 0 1   0 0 0 0  0 0 0 0   0 0 0 0  0 a2 a1 a0   i i i i  i i i i";
      writepage   = "1 1 0 0  0 0 1 0   0 0 0 0  0 0 a9 a8   a7 a6 a5 a4  a3 0 0 0   x x x x  x x x x";
    mode        = 0x41;
    blocksize   = 4;
    delay       = 10;
    readback_p1 = 0x00;
    readback_p2 = 0x00;
    readsize    = 256;
   ;

    memory "lfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "hfuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  1 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "efuse"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  0 0 0 0   0 0 0 0  1 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 0 1 0  0 1 0 0   x x x x  x x x x   i i i i  i i i i";
     ;

    memory "lock"
      size   = 1;
      min_write_delay   = 4500;
      max_write_delay   = 4500;
      read   = "0 1 0 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
      write  = "1 0 1 0  1 1 0 0   1 1 1 0  0 0 0 0   x x x x  x x x x   i i i i  i i i i";
    ;

    memory "signature"
      size   = 3;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x a1 a0   o o o o  o o o o";
    ;

    memory "calibration"
      size   = 1;
      read   = "0 0 1 1  1 0 0 0   0 0 0 0  0 0 0 0   x x x x  x x x x   o o o o  o o o o";
    ;


;
