void main() {
volatile unsigned int * start_flash = (volatile unsigned int *)0x00001000;
volatile unsigned int * end_flash = (volatile unsigned int *)0x0001ffff;
volatile unsigned char * flash_addr1 = (volatile unsigned char *)0x005555;
volatile unsigned char * flash_addr2 = (volatile unsigned char *)0x002aaa;
volatile unsigned char * flash_addr3 = (volatile unsigned char *)0x005555;
volatile unsigned char * flash_addr4 = (volatile unsigned char *)0x010000;
volatile unsigned int x = 0;
// Chip Erase
* flash_addr1 = 0xaa;
* flash_addr2 = 0x55;
* flash_addr1 = 0x80;
* flash_addr1 = 0xaa;
* flash_addr2 = 0x55;
* flash_addr1 = 0x10;
// Delay
for(x=0;x<=100000;x++);
// Byte Program
* flash_addr1 = 0xaa;
* flash_addr2 = 0x55;
* flash_addr3 = 0xa0;
// Data in the first address
* (start_flash) = 0xba;
for(x=0;x<=100000;x++);
// Data in the following address
* (start_flash+1) = 0xab;
while(1);
}