📄 smc_dtc_format256_end_old.hex
字号:
0xa0, // 73 LD MSB 0
0xbb, // 74 LD LSB 11
0x90, // 75 LD DR_PARALLEL // WE = 1, CLE = 1
0xb9, // 76 LD LSB 9
0x90, // 77 LD DR_PARALLEL // WE = 0, CLE = 1
0xbb, // 78 LD LSB 11
0x90, // 79 LD DR_PARALLEL // WE = 1, CLE = 1
0xba, // 7a LD LSB 10
0x90, // 7b LD DR_PARALLEL // WE = 1, CLE = 0
0xca, // 7c LD A CMP10
0x33, // 7d EXCHANGE
0x39, // 7e BSET2 //if it was the 2nd read cmd,then stop
// JP :status_stop
0x5e, // 7f JP 30
0xc2, // 80 LD A Y
0x33, // 81 EXCHANGE
0x2b, // 82 BCLR4
// JP :end_of_cmd
0x4a, // 83 JP 10
// :wait_write_erase_busy
//---------------------
0xd0, // 84 LD A DR_PARALLEL
0x33, // 85 EXCHANGE
0x28, // 86 BCLR1
// JP :wait_write_erase_busy
0x63, // 87 JP -3
0xa7, // 88 LD MSB 7
0xb0, // 89 LD LSB 0
0x82, // 8a LD Y
0xb, // 8b CP ALWAYS
// JP :send_cmd2
0x7a, // 8c JP -26
// :end_of_cmd
//------------
0xa0, // 8d LD MSB 0 //data_flash port = input
0xb9, // 8e LD LSB 9 //DATA_FLASH Port driven by FCI
0x8d, // 8f LD CTRL_FCI //PARALLEL Port driven by FCI
0xb2, // 90 LD LSB 2
0x90, // 91 LD DR_PARALLEL
0xba, // 92 LD LSB 10
0x90, // 93 LD DR_PARALLEL
0xcc, // 94 LD A DATA_FLASH // read the status
0x28, // 95 BCLR1 // check the status bit,changed
// JP :erase_write_pass
0x42, // 96 JP 2
// :cluster_read_write_error
//------------------------
//NOP
0x7, // 97 STATUS STOP ERROR
// :erase_write_pass
//----------------
0xca, // 98 LD A CMP10
0x33, // 99 EXCHANGE
0x2b, // 9a BCLR4 //if erase cmd then 2nd cmd is 0xd0
0xc7, // 9b LD A ADR_BUFFER11 // ADR_BUFFER11 = 0x00
0x60, // 9c BRANCH :clear_cluster_pages
// :status_stop
//--------------
0x5, // 9d STATUS STOP
//:cluster_read_write_error
//------------------------
//NOP
//STATUS STOP ERROR
//:erase_write_pass
//----------------
//LD A CMP10
//EXCHANGE
//BCLR4 //if erase cmd then 2nd cmd is 0xd0
//LD A ADR_BUFFER01 // ADR_BUFFER01 = 0x00
//BRANCH :clear_cluster_pages
//:status_stop
//--------------
//STATUS STOP
//--------------------------------------------------------
// START ADDRESS FOR read and check all 0's
//--------------------------------------------------------
// :read_check_cluster
//------------------
0xa0, // 9e LD MSB 0 //data_flash port = input
0xb9, // 9f LD LSB 9 //DATA_FLASH Port driven by FCI
0x8d, // a0 LD CTRL_FCI //PARALLEL Port driven by FCI
0xb2, // a1 LD LSB 2
0x8b, // a2 LD CMP11
0xb8, // a3 LD LSB 8
0x89, // a4 LD CMP01
0xa4, // a5 LD MSB 4
0xb0, // a6 LD LSB 0 //CMP1 = 0x840
0x88, // a7 LD CMP00
//LD MSB 15
//LD LSB 15
//LD ADR_BUFFER00
//LD DATA_BUFFER0
//LD Y
//DECY
// :loop_read_all_pages
//-------------------
0xc5, // a8 LD A ADR_BUFFER01
0x84, // a9 LD ADR_BUFFER00
0x87, // aa LD ADR_BUFFER11 // ADR0 = 0x0000
// :wait_read_page
0xd0, // ab LD A DR_PARALLEL
0x33, // ac EXCHANGE
0x28, // ad BCLR1
// JP :wait_read_page
0x63, // ae JP -3
// :loop_read_page
//--------------
0xcb, // af LD A CMP11
0x90, // b0 LD DR_PARALLEL // RD = 0
0xba, // b1 LD LSB 10
0x90, // b2 LD DR_PARALLEL // RD = 1
0xcc, // b3 LD A DATA_FLASH
0x8, // b4 CP A=>X
// JP :cluster_read_write_error
0x7e, // b5 JP -30
0x27, // b6 ADDER16 ADR_BUFFER0
0xd, // b7 CP ADR_BUFFER0<CMP0
// JP :loop_read_page
0x69, // b8 JP -9
//DECY
0xb, // b9 CP ALWAYS
0xc7, // ba LD A ADR_BUFFER11 //to be changed
0x60, // bb BRANCH :clear_cluster_pages
//:stop_or_error
//-------------
//STATUS STOP
//---------------------------------------------------------------
// START ADDRESS FOR read_spare & check_spare
// redundant area is read to address of 1F0-1FF
//------------------------------------------------------------------------------------------------
// 1F0 | 1F1 | 1F2 | 1F3 | 1F4 | 1F5 | 1F6 | 1F7 | 1F8 | 1F9 | 1FA | 1FB | 1FC | 1FD | 1FE | 1FF |
// Reserved Field | DAT | BLK | Address1 | ECC Field-2 | Address2 | ECC Field-1 |
//------------------------------------------------------------------------------------------------
// :init_read_spare
//---------------
0xaf, // bc LD MSB 15
0xb0, // bd LD LSB 0
0x82, // be LD Y // Y = 0xF0
0xa2, // bf LD MSB 2
0x9f, // c0 LD BUFFER_MNGT // segment offset = 1, going to use <Y> for reading spare area
0x33, // c1 EXCHANGE
0x88, // c2 LD CMP00 // CMP00 = 0x02, used for toggling bit for reading
//LD MSB 0 // data_flash port = intput
0xb9, // c3 LD LSB 9 // DATA_FLASH Port driven by FCI
0x8d, // c4 LD CTRL_FCI // PARALLEL Port driven by FCI
// :test_busy_line
//--------------
0xd0, // c5 LD A DR_PARALLEL
0x33, // c6 EXCHANGE
0x28, // c7 BCLR1
// JP :test_busy_line
0x63, // c8 JP -3
// read_spare
//-----------
// :read_spare
0xc8, // c9 LD A CMP00
0x90, // ca LD DR_PARALLEL // RD = 0
0xba, // cb LD LSB 10
0x90, // cc LD DR_PARALLEL // RD = 1
0xcc, // cd LD A DATA_FLASH // load DATA_FLASH
0x80, // ce LD <Y>
0x3d, // cf INCY
// JP :read_spare
0x67, // d0 JP -7
//------------------------------------------
// check Block_Status has no more than one 0
//------------------------------------------
0xc5, // d1 LD A ADR_BUFFER01
0x89, // d2 LD CMP01
0xc1, // d3 LD A X
0x87, // d4 LD ADR_BUFFER11
0x88, // d5 LD CMP00 // CMP0 = 0x0001
0xb8, // d6 LD LSB 8 // Y = 0x08// points to a pattern array as following
0x82, // d7 LD Y // { ~0x00, ~0x01, ~0x02, ~0x04, ~0x08, ~0x10, ~0x20, ~0x40, ~0x80 }
0xaf, // d8 LD MSB 15
0xb5, // d9 LD LSB 5
0x86, // da LD ADR_BUFFER10 // pointer 1 = 0x01F5, points to Block_Status of the redundant area
// :check_Block_Status
//------------------
0xdc, // db LD A DATA_BUFFER1
0x81, // dc LD X
0xc0, // dd LD A <Y>
0x9, // de CP A<X
// JP :check_Block_Status_next
0x45, // df JP 5
0x81, // e0 LD X
0xdc, // e1 LD A DATA_BUFFER1
0x8, // e2 CP A=>X // we found one match on the array
// JP :good_Block_Status
0x44, // e3 JP 4
// :check_Block_Status_next
//-----------------------
0x3c, // e4 DECY
// JP :check_Block_Status
0x6a, // e5 JP -10
// :cluster_error
//-------------
0x7, // e6 STATUS STOP ERROR
// :good_Block_Status
//-----------------
0xc7, // e7 LD A ADR_BUFFER11
0x81, // e8 LD X // X = 1
0x2f, // e9 ADDER16 ADR_BUFFER1 // buffer pointer 1 = 0x01F6
0xdc, // ea LD A DATA_BUFFER1 // high byte of Address1
0x85, // eb LD ADR_BUFFER01
0x2f, // ec ADDER16 ADR_BUFFER1
0xdc, // ed LD A DATA_BUFFER1
0x84, // ee LD ADR_BUFFER00 // ADR_BUFFER0 = Address1-Field
0xd, // ef CP ADR_BUFFER0<CMP0 // check with 0x0001, it may be a CIS
// JP :cluster_error
0x6a, // f0 JP -10
0xaf, // f1 LD MSB 15
0xbb, // f2 LD LSB 11
0x86, // f3 LD ADR_BUFFER10 // skip the ECC Field-2
0xdc, // f4 LD A DATA_BUFFER1
0x89, // f5 LD CMP01
0x2f, // f6 ADDER16 ADR_BUFFER1
0xdc, // f7 LD A DATA_BUFFER1
0x88, // f8 LD CMP00 // CMP0 = Address2-Field
0xd, // f9 CP ADR_BUFFER0<CMP0
// JP :cluster_error
0x74, // fa JP -20
0x26, // fb SUB16 ADR_BUFFER0
0xc, // fc CP ADR_BUFFER0=>CMP0
// JP :cluster_error
0x77, // fd JP -23
0x5, // fe STATUS STOP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -