📄 smc_dtc_download2562k_end.hex
字号:
// Save the ECC code
//------------------
0xde, // 85 LD A TMP_ECC // first read (Line parity 1)
0x9b, // 86 LD DATA_BUFFER0
0xdd, // 87 LD A ECC_CRC // -- INCR CRC_ECC_STATE --
0x27, // 88 ADDER16 ADR_BUFFER0
0xde, // 89 LD A TMP_ECC // second read (Line parity 2)
0x9b, // 8a LD DATA_BUFFER0
0xdd, // 8b LD A ECC_CRC // -- INCR CRC_ECC_STATE --
0x27, // 8c ADDER16 ADR_BUFFER0
0xde, // 8d LD A TMP_ECC // third read ( column parity)
0x9b, // 8e LD DATA_BUFFER0
0xaf, // 8f LD MSB 15
0xb8, // 90 LD LSB 8
0x84, // 91 LD ADR_BUFFER00 // Load pointer of ECC2 (0x00F8)
0xc7, // 92 LD A ADR_BUFFER11 // Write buf0: 0001=>0010, =>0011
0x28, // 93 BCLR1
// JP :Write_256_Bytes
0x7c, // 94 JP -28
//============================================================================
//// Write 16 bytes of the redundant area
0xaf, // 95 LD MSB 15
0xb0, // 96 LD LSB 0
0x82, // 97 LD Y // Y = 0xF0// pointer of redundant area (0x00F0)
// :Write_Spare_Area
//----------------
0xc0, // 98 LD A <Y>
0x8c, // 99 LD DATA_FLASH
0xb8, // 9a LD LSB 8
0x90, // 9b LD DR_PARALLEL // WE = 0
0xba, // 9c LD LSB 10
0x90, // 9d LD DR_PARALLEL // WE = 1
0x3d, // 9e INCY
// JP :Write_Spare_Area
0x67, // 9f JP -7
//-----------------------------------------------------------------
//testing
//----------------------------------------------------------------
// :Release_Buffer
//--------------
0xc7, // a0 LD A ADR_BUFFER11 // Buf0: 0001=>0010=>0011
0x2a, // a1 BCLR3 // Wrap the segment pointer
0x87, // a2 LD ADR_BUFFER11 // Reload for the next page writing
// JP :Free_Buffer0
0x43, // a3 JP 3
0xb2, // a4 LD LSB 2
// JP :Free_Buffer
0x42, // a5 JP 2
// :Free_Buffer0
//------------
0xb1, // a6 LD LSB 1
// :Free_Buffer
//-----------
0x9f, // a7 LD BUFFER_MNGT
0xb0, // a8 LD LSB 0
0x9f, // a9 LD BUFFER_MNGT
//-----------------end testing-------------------------------------
//-------------
//For 256MB
//-------------
0xae, // aa LD MSB 14
0xb0, // ab LD LSB 0
0x84, // ac LD ADR_BUFFER00 //point to 0xe0
0xdb, // ad LD A DATA_BUFFER0
0x2, // ae CLC
0x24, // af SUB8 X
0x9b, // b0 LD DATA_BUFFER0
0x9, // b1 CP A<X
// JP :pgm_page
0x52, // b2 JP 18
0xae, // b3 LD MSB 14
0xb4, // b4 LD LSB 4
0x84, // b5 LD ADR_BUFFER00
0xa0, // b6 LD MSB 0
0xb2, // b7 LD LSB 2
0x82, // b8 LD Y
0xdb, // b9 LD A DATA_BUFFER0
0x2, // ba CLC
0x2d, // bb ADDER8 Y
0x2b, // bc BCLR4
0x9b, // bd LD DATA_BUFFER0
// BCLR4
0xa6, // be LD MSB 6
0xb9, // bf LD LSB 9
0x60, // c0 BRANCH :write_next_col
0xc5, // c1 LD A ADR_BUFFER01
// LD DATA_BUFFER0
0x27, // c2 ADDER16 ADR_BUFFER0 //Reload both 0xe5 and 0xe4 for nxt page
0x9b, // c3 LD DATA_BUFFER0
//============================================================================
// :pgm_page
//----------
0xa1, // c4 LD MSB 1 // Send the "Page Program" command - 0x10
// JP :Send_CMD2
0x42, // c5 JP 2
// :Send_Erase_CMD
//--------------
0xad, // c6 LD MSB 13 // Send the "Block Erase" command - 0xD0
// :Send_CMD2
//---------
0xb0, // c7 LD LSB 0
0x8c, // c8 LD DATA_FLASH
0xbb, // c9 LD LSB 11
0x90, // ca LD DR_PARALLEL // WE = 1, CLE = 1
0xb9, // cb LD LSB 9
0x90, // cc LD DR_PARALLEL // WE = 0, CLE = 1
0xbb, // cd LD LSB 11
0x90, // ce LD DR_PARALLEL // WE = 1, CLE = 1, ALE = 0, RD = 1
//============================================================================
//// Wait on busy line
//============================================================================
// :Wait_On_Busy
//------------
// ADDER16 ADR_BUFFER0
// CP ADR_BUFFER0=>CMP0
// JP :No_Timeout
// STATUS ERROR STOP // timeout of 19ms
0x0, // cf NOP
0x0, // d0 NOP
0x0, // d1 NOP
//:No_Timeout
//----------
0xd0, // d2 LD A DR_PARALLEL
0x33, // d3 EXCHANGE
0x28, // d4 BCLR1 // Test R/-B line
// JP :Wait_On_Busy
0x66, // d5 JP -6
//============================================================================
//// Read the status byte
0xa7, // d6 LD MSB 7
0xb0, // d7 LD LSB 0
0x8c, // d8 LD DATA_FLASH // Send "Status Read" command
0xb9, // d9 LD LSB 9
0x90, // da LD DR_PARALLEL // WE = 0, CLE = 1
0xbb, // db LD LSB 11
0x90, // dc LD DR_PARALLEL // WE = 1, CLE = 1, ALE = 0, RD = 1
0xba, // dd LD LSB 10
0x90, // de LD DR_PARALLEL // WE = 1, CLE = 0, ALE = 0, RD = 1
0xa0, // df LD MSB 0 // DATA_FLASH port = input
0xb9, // e0 LD LSB 9 // DATA_FLASH Port driven by FCI
0x8d, // e1 LD CTRL_FCI // PARALLEL Port driven by FCI
0xb2, // e2 LD LSB 2
0x90, // e3 LD DR_PARALLEL // WE = 1, CLE = 0, ALE = 0, RD = 0
0xba, // e4 LD LSB 10
0x90, // e5 LD DR_PARALLEL // WE = 1, CLE = 0, ALE = 0, RD = 1
0xcc, // e6 LD A DATA_FLASH // Get the status byte
0x28, // e7 BCLR1
// JP :Status_Good
0x42, // e8 JP 2
////// Status "FAIL" Stop the DTC
0x7, // e9 STATUS ERROR STOP
//============================================================================
// :Status_Good
//-----------
0xc7, // ea LD A ADR_BUFFER11 // Buf0: 0001=>0010=>0011
0x38, // eb BSET1
// JP :Release_Buffer
// JP :increment_page
0x42, // ec JP 2
0x5, // ed STATUS STOP // Return if it is a BLOCK_ERASE
//:Release_Buffer
//--------------
// BCLR3 // Wrap the segment pointer
// LD ADR_BUFFER11 // Reload for the next page writing
// JP :Free_Buffer0
// LD LSB 2
// JP :Free_Buffer
//:Free_Buffer0
//------------
// LD LSB 1
// :Free_Buffer
//-----------
// LD BUFFER_MNGT
// LD LSB 0
// LD BUFFER_MNGT
//============================================================================
// :increment_page
//---------------
//// Decrease the page number and increase the page address
0xc9, // ee LD A CMP01
0x85, // ef LD ADR_BUFFER01
0xae, // f0 LD MSB 14
0xb3, // f1 LD LSB 3
0x84, // f2 LD ADR_BUFFER00 //0xe5 = 1st col. byte
// LD MSB 1
// LD LSB 0
// LD Y
// LD A DATA_BUFFER0
// CLC
// ADDER8 Y
// LD DATA_BUFFER0
// SUB16 ADR_BUFFER0 //0xe4 = 2nd col byte
// LD MSB 0
// LD LSB 2
// LD Y
// LD A DATA_BUFFER0
// CLC
// ADDER8 Y
// BCLR4
// LD DATA_BUFFER0
// JP :dec_page
// ADDER16 ADR_BUFFER0 // 1st col = 0 at page change
// LD A ADR_BUFFER01
// LD DATA_BUFFER0
// SUB16 ADR_BUFFER0
// SUB16 ADR_BUFFER0 // 0xe3 = 1st row byte
// :next_page
//------------
// LD A <Y>
0xdb, // f3 LD A DATA_BUFFER0
0x2, // f4 CLC
0x25, // f5 ADDER8 X
// LD <Y> // Increase the page address and save it back
0x9b, // f6 LD DATA_BUFFER0
//For 256mb
// :dec_page
0xae, // f7 LD MSB 14
0xb0, // f8 LD LSB 0
0x82, // f9 LD Y
0xc0, // fa LD A <Y>
// CLC
// SUB8 X
// LD <Y> //new
0x8, // fb CP A=>X
0xa3, // fc LD MSB 3
0xbd, // fd LD LSB 13
0x60, // fe BRANCH :Loop_Write_Pages
0x5, // ff STATUS STOP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -