// DataFlash reset port pin (PB 0)
#define DF_RESET PORTB.6

// DataFlash boot sector write protection (PB 2)
#define DF_WRITE_PROTECT 0x04

// DataFlash chip select port pin (PB 4)
#define DF_CHIP_SELECT PORTB.6

// buffer 1 
#define BUFFER_1 0x00

// buffer 2
#define BUFFER_2 0x01

// defines for all opcodes

// buffer 1 write 
#define BUFFER_1_WRITE 0x84

// buffer 2 write 
#define BUFFER_2_WRITE 0x87

// buffer 1 read
#define BUFFER_1_READ 0xD4

// buffer 2 read
#define BUFFER_2_READ 0xD6

// buffer 1 to main memory page program with built-in erase
#define B1_TO_MM_PAGE_PROG_WITH_ERASE 0x83

// buffer 2 to main memory page program with built-in erase
#define B2_TO_MM_PAGE_PROG_WITH_ERASE 0x86

// buffer 1 to main memory page program without built-in erase
#define B1_TO_MM_PAGE_PROG_WITHOUT_ERASE 0x88

// buffer 2 to main memory page program without built-in erase
#define B2_TO_MM_PAGE_PROG_WITHOUT_ERASE 0x89

// main memory page program through buffer 1
#define MM_PAGE_PROG_THROUGH_B1 0x82
 
// main memory page program through buffer 2
#define MM_PAGE_PROG_THROUGH_B2 0x85
 
// auto page rewrite through buffer 1
#define AUTO_PAGE_REWRITE_THROUGH_B1 0x58
 
// auto page rewrite through buffer 2
#define AUTO_PAGE_REWRITE_THROUGH_B2 0x59
 
// main memory page compare to buffer 1
#define MM_PAGE_TO_B1_COMP 0x60

// main memory page compare to buffer 2
#define MM_PAGE_TO_B2_COMP 0x61
 
// main memory page to buffer 1 transfer
#define MM_PAGE_TO_B1_XFER 0x53

// main memory page to buffer 2 transfer
#define MM_PAGE_TO_B2_XFER 0x55

// DataFlash status register for reading density, compare status, 
// and ready/busy status
#define STATUS_REGISTER 0x57

// main memory page read
#define MAIN_MEMORY_PAGE_READ 0x52

#define MAIN_MEMORY_PAGE_READ2 0xD2

// erase a 528 byte page
#define PAGE_ERASE 0x81

// erase 512 pages
#define BLOCK_ERASE 0x50

//#define TRUE                0xff
//#define FALSE               0x00


#define v_0               0
#define v_1               1
#define v_2               2
#define v_3               3
#define v_4               4
#define v_5               5
#define v_6               6
#define v_7               7
#define v_8               8
#define v_9               9
#define v_10              10
#define v_11              11
#define v_12              12
#define v_13              13
#define v_14              14
#define v_15              15
#define v_16              16
#define v_17              17
#define v_18              18
#define v_19              19
#define v_20              20
#define v_30              21
#define v_40              22
#define v_50              23
#define v_60              24
#define v_70              25
#define v_80              26
#define v_90              27
#define v_100             28
#define v_200             29
#define v_300             30
#define v_400             31
#define v_500             32
#define v_600             33
#define v_700             34
#define v_800             35
#define v_900             36
#define v_1000            37
#define v_startup         38
#define v_card_capacity   39 
#define v_nocard          40
#define v_wrongcard       41 
#define v_play            42
#define v_stop            43
#define v_overbook        44 
#define v_overtrack       45
#define v_book            46
#define v_track           47
#define v_gb              48
#define v_mb              49
#define v_cancel          50
#define v_repeat          51
#define v_autostop1       52
#define v_autostop2       53
#define v_fwupdate        54
#define v_version         55
#define v_hwversion       56
#define v_lobatt          57
#define v_endread         58
#define v_lastbook        59
#define v_lasttrack       60
#define v_endcard         61
#define v_blockoff        62
#define v_blockon         63
#define v_flagon          64
#define v_gotoflag        65

// prototypes
unsigned char SPI(unsigned char data);
void Voiceout(unsigned int Startpage, unsigned int Endpage);
unsigned char Corresp(unsigned int T);
void Say(unsigned char ptr);
void Buffer_write(unsigned char Buffer);
void Dfprog(void);