📄 smc_dtc_upload256_end.hex
字号:
// :read_spare
//----------
0x27, // 8c ADDER16 ADR_BUFFER0
0xb2, // 8d LD LSB 2
0x90, // 8e LD DR_PARALLEL // RD = 0// WE = 1// ALE=CLE=0
0xba, // 8f LD LSB 10
0x90, // 90 LD DR_PARALLEL // RD = 1// WE = 1// ALE=CLE=0
0xcc, // 91 LD A DATA_FLASH // Save one byte of redundant area
0x9b, // 92 LD DATA_BUFFER0
0x3c, // 93 DECY
// JP :read_spare
0x68, // 94 JP -8
//------------------------------------------------------
// Check the calculated ECC againest with redundant area
//------------------------------------------------------
// :init_ecc2_check
//---------------
0xaf, // 95 LD MSB 15
0xba, // 96 LD LSB 10
0x82, // 97 LD Y // Y = 0xFA, points to ECC2[2]
0xb4, // 98 LD LSB 4
0x88, // 99 LD CMP00 // CMP0 = 0x00F4
// :ecc2_check
//----------
0xdb, // 9a LD A DATA_BUFFER0 // ADR0 = spare area = 0x00F6, 0x00F5, 0x00F4
0x83, // 9b LD MASK
0xc0, // 9c LD A <Y> // Y = 0xFA, 0xF9, 0xF8
0x31, // 9d XOR
0x8, // 9e CP A=>X
// JP :ecc_error
0x52, // 9f JP 18
0x26, // a0 SUB16 ADR_BUFFER0
0x3c, // a1 DECY
0xc, // a2 CP ADR_BUFFER0=>CMP0
// JP :ecc2_check
0x69, // a3 JP -9
// :init_ecc1_check
//---------------
0xaf, // a4 LD MSB 15
0xbd, // a5 LD LSB 13
0x82, // a6 LD Y // Y = 0xFD, points to ECC1[2]
0xb0, // a7 LD LSB 0
0x88, // a8 LD CMP00 // CMP0 = 0x00F0
0x26, // a9 SUB16 ADR_BUFFER0 // buffer pointer 0 = 0x00F2
// :ecc1_check
//----------
0x26, // aa SUB16 ADR_BUFFER0
0xdb, // ab LD A DATA_BUFFER0 // buffer pointer 0 = 0x00F1, 0x00F0, 0x00EF
0x83, // ac LD MASK
0xc0, // ad LD A <Y> // Y = 0xFD, 0xFC, 0xFB
0x31, // ae XOR
0x9, // af CP A<X
// JP :no_ecc_error
0x42, // b0 JP 2
// :ecc_error
//---------
0x5, // b1 STATUS STATUS STOP
// :no_ecc_error
//------------
0x3c, // b2 DECY
0xc, // b3 CP ADR_BUFFER0=>CMP0
// JP :ecc1_check
0x6a, // b4 JP -10
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//// After the ECC check is verified. Submit the buffer read
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
0xc7, // b5 LD A ADR_BUFFER11 // The value is either 0011 or 0101
0x3a, // b6 BSET3
// JP :Set_buffer1_full
0x43, // b7 JP 3
// :Set_buffer0_full
//----------------
0xb1, // b8 LD LSB 1
// JP :Set_Buffer_Full
0x42, // b9 JP 2
// :Set_buffer1_full
//----------------
0xb2, // ba LD LSB 2
// :Set_Buffer_Full
//---------------
0x9f, // bb LD BUFFER_MNGT
0xb0, // bc LD LSB 0
0x9f, // bd LD BUFFER_MNGT
// :next_page
//---------
//for 256MB
0xac, // be LD MSB 12 //Set a Flag at 0xc0= 0x00 for the card with 2K page
0xb0, // bf LD LSB 0
0x82, // c0 LD Y
0xc0, // c1 LD A <Y>
0x82, // c2 LD Y
0x3c, // c3 DECY
0xaf, // c4 LD MSB 15
0xb3, // c5 LD LSB 3
0x60, // c6 BRANCH :512Bytes_Page
// JP :2kpage
// CP ALWAYS
// LD MSB 14
// LD LSB 11
// BRANCH :512Bytes_Page
// :2kpage
0xaf, // c7 LD MSB 15
0xbf, // c8 LD LSB 15
0x83, // c9 LD MASK
0x84, // ca LD ADR_BUFFER00 // buffer pointer 0 = 0x00FF, points the counter
0xdb, // cb LD A DATA_BUFFER0
0x2, // cc CLC
0x24, // cd SUB8 X
0x9b, // ce LD DATA_BUFFER0 // update the page counter
0x8, // cf CP A=>X
// JP :increment_page
0x42, // d0 JP 2
0x5, // d1 STATUS STOP
// :increment_page
0xac, // d2 LD MSB 12 //Set a Flag at 0xc1 for the coloumn nos.
0xb1, // d3 LD LSB 1
0x84, // d4 LD ADR_BUFFER00
0xdb, // d5 LD A DATA_BUFFER0
0x2, // d6 CLC
0x24, // d7 SUB8 X
0x9b, // d8 LD DATA_BUFFER0 // update the page counter
0x8, // d9 CP A=>X
0xa4, // da LD MSB 4
0xb8, // db LD LSB 8
0x60, // dc BRANCH :wait_smc_ready
0xac, // dd LD MSB 12 //Set a Flag at 0xc1 for the coloumn nos.
0xb1, // de LD LSB 1
0x82, // df LD Y
0xa0, // e0 LD MSB 0
0xb4, // e1 LD LSB 4
0x80, // e2 LD <Y> //Reload coloumn nos.
//Increment page address
0xae, // e3 LD MSB 14
0xb5, // e4 LD LSB 5
0x84, // e5 LD ADR_BUFFER00 //make 0xe5 and 0xe4 both 0, for start of nxt page
0xc5, // e6 LD A ADR_BUFFER01
0x9b, // e7 LD DATA_BUFFER0
0x26, // e8 SUB16 ADR_BUFFER0
0x9b, // e9 LD DATA_BUFFER0
// LD Y
// CLC
0x26, // ea SUB16 ADR_BUFFER0
0x2, // eb CLC
0xdb, // ec LD A DATA_BUFFER0
0x25, // ed ADDER8 X
0x9b, // ee LD DATA_BUFFER0
0xb, // ef CP ALWAYS
0xa0, // f0 LD MSB 0
0xbe, // f1 LD LSB 14
0x60, // f2 BRANCH :next_page256
//decrement page counter
// LD MSB 15
// LD LSB 15
// LD MASK
// LD ADR_BUFFER00 // buffer pointer 0 = 0x00FF, points the counter
// LD A DATA_BUFFER0
// CLC
// SUB8 X
// LD DATA_BUFFER0 // update the page counter
// CP A=>X
// LD MSB 3
// LD LSB 3
// BRANCH :send_address
// STATUS STOP
// :512Bytes_Page
//---------------
//debug
//LD MSB 13
// LD LSB 0
// LD Y
// LD MSB 5
// LD LSB 5
// LD <Y>
0xaf, // f3 LD MSB 15
0xbf, // f4 LD LSB 15
0x83, // f5 LD MASK
0x84, // f6 LD ADR_BUFFER00 // buffer pointer 0 = 0x00FF, points the counter
0xdb, // f7 LD A DATA_BUFFER0
0x2, // f8 CLC
0x24, // f9 SUB8 X
0x9b, // fa LD DATA_BUFFER0 // update the page counter
0x8, // fb CP A=>X
0xa4, // fc LD MSB 4
0xb8, // fd LD LSB 8
0x60, // fe BRANCH :Wait_SMC_Ready
// :all_pages_read
//--------------
// ** LD A BUFFER_MNGT // wait for 2 buffers are free
// ** BSET3
// ** JP :all_pages_read
// ** BSET4
// ** JP :all_pages_read
0x5, // ff STATUS STOP // FINISH SUCCESSFULLY!
//------------------------------------------------------------------
// START ADDRESS FOR read data FF to USB
// ST7: Give number of pages
// 0x163F = Number of pages (counter), it should be 0 on exit
// On return: Counter = 0 means no error
// Counter !=0 means ECC error on that page
//------------------------------------------------------------------
// LD MSB 0
// LD LSB 0
// LD ADR_BUFFER10 // low byte of pointer 1
// LD ADR_BUFFER01 // high byte of pointer 0
// LD CMP10
// LD LSB 1
// LD ADR_BUFFER11 // ADR1 = 0x0100
// LD X // X = 1
// LD LSB 5
// LD CMP11 // CMP1 = 0x0500
// LD MSB 15
// LD LSB 15
// LD ADR_BUFFER00 // ADR00 = 0x00FF
//:fill_buffer_with_FF
// LD DATA_BUFFER1
// ADDER16 ADR_BUFFER1
// CP ADR_BUFFER1<CMP1
// JP :fill_buffer_with_FF
// LD A DATA_BUFFER0
// LD Y // load the page counter
//:FFsend_2_pages
//--------------
// DECY
// JP :FFwait_for_buffer_0
// JP :FF_finish
//:FFwait_for_buffer_0
//-----------------
// LD A BUFFER_MNGT
// BSET3
// JP :FFwait_for_buffer_0
// LD LSB 1
// LD BUFFER_MNGT // mark buffer0 full
// LD LSB 0
// LD BUFFER_MNGT // mark buffer0 full
// DECY
// JP :FFwait_for_buffer_1
//:FF_finish
// INCY
// LD A Y
// LD DATA_BUFFER0 // clear the page counter
// STATUS STOP
//:FFwait_for_buffer_1
//-----------------
// LD A BUFFER_MNGT
// BSET4
// JP :FFwait_for_buffer_1
// LD LSB 2
// LD BUFFER_MNGT // mark buffer1 full
// LD LSB 0
// LD BUFFER_MNGT // mark buffer1 full
// JP :FFsend_2_pages
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -