⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smc_dtc_upload256_end.hex

📁 HID-Ukey底层源码实现(st72651芯片) windows上层驱动
💻 HEX
📖 第 1 页 / 共 2 页
字号:
  
 // :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 + -