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

📄 new_smc_dtc_markpages256_fsm.hex

📁 HID-Ukey底层源码实现(st72651芯片) windows上层驱动
💻 HEX
字号:
 ; *****************************************************************
 ; * NOTICE: The information contained in this file is proprietary *
 ; * to SGS-THOMSON Microelectronics and is being made available   *
 ; * to ST customers under strict non-disclosure agreements.       *
 ; * Use or disclosure of this information is permissible only     *
 ; * under the terms of the existing non-disclosure agreement.     *
 ; *****************************************************************

 ; Written by Christophe BRICOUT
 ; Created by MPmanCompiler.exe (v3.0) Thu Oct 13 12:11:14 2005


 ;===================================================================
 ;
 ;                    SMART MEDIA CARD
 ;
 ;===================================================================
  
 ;----------------------
 ; dtc_smc_mark_page.fsm
 ;----------------------
  
 ;--------------------------
 ;init_write_number_of_block
 ;--------------------------
  
 0xa0,   ;   0 LD MSB 0
 0xb1,   ;   1 LD LSB 1
 0x81,   ;   2 LD X ; X<=1
  
 ;-----------------
 ;init_dtc_ctrl_reg
 ;-----------------
  
 0xa1,   ;   3 LD MSB 1 ; data_flash port = output
 0xb9,   ;   4 LD LSB 9 ; DATA_FLASH Port driven by FCI 
 0x8d,   ;   5 LD CTRL_FCI ; PARALLEL Port driven by FCI
  
 ;-------------------------------
 ;command_latch_cycle (Read2 CMD)
 ;-------------------------------
 ;for 256mb
 ;----------
 0xa0,   ;   6 LD MSB 0
 0xb0,   ;   7 LD LSB 0
 0x85,   ;   8 LD ADR_BUFFER01
 0x9f,   ;   9 LD BUFFER_MNGT
  
 0xad,   ;   a LD MSB 13
 0x84,   ;   b LD ADR_BUFFER00	;send first write command (0x80) from 0xd0
 0xdb,   ;   c LD A DATA_BUFFER0
 0x8c,   ;   d LD DATA_FLASH
  
 0xa0,   ;   e LD MSB 0
 0xba,   ;   f LD LSB 10
 0x90,   ;  10 LD DR_PARALLEL	; RD = 1, ALE = 0, WE = 1, CLE = 0
 0xbb,   ;  11 LD LSB 11
 0x90,   ;  12 LD DR_PARALLEL	; RD = 1, ALE = 0, WE = 1, CLE = 1
 0xb9,   ;  13 LD LSB 9
 0x90,   ;  14 LD DR_PARALLEL	; RD = 1, ALE = 0, WE = 0, CLE = 1
 ; :repeat
 0xbb,   ;  15 LD LSB 11
 0x90,   ;  16 LD DR_PARALLEL	; RD = 1, ALE = 0, WE = 1, CLE = 1
 0xba,   ;  17 LD LSB 10
 0x90,   ;  18 LD DR_PARALLEL	; RD = 1, ALE = 0, WE = 1, CLE = 0
  
 ;for 256mb
 ;----------
 0xac,   ;  19 LD MSB 12		;Set a Flag at 0xc0= 0x00 for the card with 2K page
 0xb0,   ;  1a LD LSB 0
 0x82,   ;  1b LD Y
 0xc0,   ;  1c LD A <Y>
 0x28,   ;  1d BCLR1		;if 256mb no second cmd is required, is 0 JP
 ;      LD Y
 ;      DECY
 ; JP :send_address
 0x51,   ;  1e JP  17
  
 ;send 0x80 cmd for other FLash
  
 ; :process_continue1
 ;------------------
 0xa1,   ;  1f LD MSB 1		; data_flash port = output
 0xb9,   ;  20 LD LSB 9		; DATA_FLASH Port driven by FCI 
 0x8d,   ;  21 LD CTRL_FCI	; PARALLEL Port driven by FCI
  
 0xa8,   ;  22 LD MSB 8
 0xb0,   ;  23 LD LSB 0
 0x8c,   ;  24 LD DATA_FLASH
 ; :send_nxt_cmd
 ;-------------
 0xba,   ;  25 LD LSB 10
 0x90,   ;  26 LD DR_PARALLEL	; WE = 1, CLE = 0
 0xbb,   ;  27 LD LSB 11
 0x90,   ;  28 LD DR_PARALLEL	; WE = 1, CLE = 1
 0xb9,   ;  29 LD LSB 9
 0x90,   ;  2a LD DR_PARALLEL	; WE = 0, CLE = 1
 0xbb,   ;  2b LD LSB 11
 0x90,   ;  2c LD DR_PARALLEL	; WE = 1, CLE = 1
 0xba,   ;  2d LD LSB 10
 0x90,   ;  2e LD DR_PARALLEL	; WE = 1, CLE = 0
  
 ;-----------------
 ;init_dtc_ctrl_reg
 ;-----------------
  
 ;     LD MSB 1		; data_flash port = output
 ;     LD LSB 9		; DATA_FLASH Port driven by FCI
 ;     LD CTRL_FCI	; PARALLEL Port driven by FCI
  
 ; :send_address
 0xa0,   ;  2f LD MSB 0
 0xb0,   ;  30 LD LSB 0
 0x85,   ;  31 LD ADR_BUFFER01
 0xae,   ;  32 LD MSB 14
 0xb6,   ;  33 LD LSB 06
 0x84,   ;  34 LD ADR_BUFFER00	; buffer pointer 0 = 0x00E6
 0xdb,   ;  35 LD A DATA_BUFFER0
 0x82,   ;  36 LD Y		; Y = number of address bytes
 0x3c,   ;  37 DECY
 0xbc,   ;  38 LD LSB 12
 0x89,   ;  39 LD CMP01		; CMP01 = 12, for send address toggling lines
  
 0xbe,   ;  3a LD LSB 14
 0x90,   ;  3b LD DR_PARALLEL	; ALE = 1, WE = 1
  
 ;      LD A ADR_BUFFER01	; clear A as the first byte, it is always 0,for 256mb
 ;      LD ADR_BUFFER10	; clear low byte of ADR1
 ;      LD CMP10		; clear low byte of CMP1
 ;      LD BUFFER_MNGT	; clear SEGment offset for using Y on ECC check 
 0x26,   ;  3c SUB16 ADR_BUFFER0	; send address from high byte to low byte
  
 ; :loop_send_address
 ;-----------------
  
 ;      SUB16 ADR_BUFFER0	; send address from high byte to low byte
 0xdb,   ;  3d LD A DATA_BUFFER0
 0x8c,   ;  3e LD DATA_FLASH	; Output the address bytes
 0xc9,   ;  3f LD A CMP01
 0x90,   ;  40 LD DR_PARALLEL	; ALE = 1, WE = 0
 0xbe,   ;  41 LD LSB 14
 0x90,   ;  42 LD DR_PARALLEL	; ALE = 1, WE = 1
  
 0x26,   ;  43 SUB16 ADR_BUFFER0	; send address from high byte to low byte
 ;      LD A DATA_BUFFER0
  
 0x3c,   ;  44 DECY
 ; JP :loop_send_address
 0x68,   ;  45 JP  -8
  
 0xa0,   ;  46 LD MSB 0
 0xba,   ;  47 LD LSB 10
 0x90,   ;  48 LD DR_PARALLEL	; ALE = 0, WE = 1 
  
 ;---------------------
 ;wait_sdi_addr_ready
 ;---------------------
  
 ; :init_timeout
 ;------------
 ;      LD LSB 00
 ;      LD ADR_BUFFER01		; buffer 0 address ( 8..15 )
 ;      LD ADR_BUFFER00		; buffer 0 address ( 0..7 )
 ;      LD CMP00
 ;      LD MSB 15
 ;      LD CMP01
  
 ; :wait_sdi_addr_ready
 ;---------------------
 ;      ADDER16 ADR_BUFFER0
 ;      CP ADR_BUFFER0<CMP0
 ;      JP :sdi_addr_no_timeout
 ;      STATUS STOP ERROR   ; timeout >20ms
  
 ; :sdi_addr_no_timeout
 ;---------------------
 ;      LD A DR_PARALLEL
 ;      EXCHANGE
 ;      BCLR1 //test R/B
 ;      JP :wait_sdi_addr_ready
  
 ;------------
 ; write_spare
 ;------------
  
 ;init_write_spare
 ;----------------
  
 0xa0,   ;  49 LD MSB 0
 0xb0,   ;  4a LD LSB 0
 0x85,   ;  4b LD ADR_BUFFER01		; buffer 0 address ( 15..8 )
 0x89,   ;  4c LD CMP01
  
 0xae,   ;  4d LD MSB 14
 0xb7,   ;  4e LD LSB 07
 0x84,   ;  4f LD ADR_BUFFER00
  
 0xaf,   ;  50 LD MSB 15
 0x88,   ;  51 LD CMP00
  
 ; :write_spare
 ;-----------
  
 0xdb,   ;  52 LD A DATA_BUFFER0
 0x8c,   ;  53 LD DATA_FLASH
  
 0xa0,   ;  54 LD MSB 0
 0xb8,   ;  55 LD LSB 8
 0x90,   ;  56 LD DR_PARALLEL
  
 0xba,   ;  57 LD LSB 10
 0x90,   ;  58 LD DR_PARALLEL
  
 0x27,   ;  59 ADDER16 ADR_BUFFER0
 0xd,   ;  5a CP ADR_BUFFER0<CMP0
 ; JP :write_spare
 0x69,   ;  5b JP  -9
  
 0xaf,   ;  5c LD MSB 15
 0xbf,   ;  5d LD LSB 15
 0x84,   ;  5e LD ADR_BUFFER00		;point to 0xff
  
 0xdb,   ;  5f LD A DATA_BUFFER0
 0x2,   ;  60 CLC
 0x24,   ;  61 SUB8 X
 0x9b,   ;  62 LD DATA_BUFFER0
 0x9,   ;  63 CP A<X			;changed for bug
 0xa9,   ;  64 LD MSB 9
 0xbf,   ;  65 LD LSB 15
 0x60,   ;  66 BRANCH :program_page
  
 0xac,   ;  67 LD MSB 12
 0xb0,   ;  68 LD LSB 0
 0x84,   ;  69 LD ADR_BUFFER00
 0xdb,   ;  6a LD A DATA_BUFFER0
 0x38,   ;  6b BSET1
  
 ;      JP :program_page
 0xa9,   ;  6c LD MSB 9
 0xbf,   ;  6d LD LSB 15
 ; :program_page1
 0x60,   ;  6e BRANCH :program_page
  
 0xae,   ;  6f LD MSB 14
 0xb4,   ;  70 LD LSB 4
 0x84,   ;  71 LD ADR_BUFFER00
  
 0xa0,   ;  72 LD MSB 0
 0xb2,   ;  73 LD LSB 2
 0x82,   ;  74 LD Y
  
 0xdb,   ;  75 LD A DATA_BUFFER0
 0x2,   ;  76 CLC
 0x2d,   ;  77 ADDER8 Y
 0x9b,   ;  78 LD DATA_BUFFER0
  
 0xa1,   ;  79 LD MSB 1
 0xb0,   ;  7a LD LSB 0
 0x82,   ;  7b LD Y
  
 ;      LD MSB 14
 ;      LD LSB 5
 0x27,   ;  7c ADDER16 ADR_BUFFER0
 ;      LD ADR_BUFFER00
 0xdb,   ;  7d LD A DATA_BUFFER0
 0x2,   ;  7e CLC
 0x2d,   ;  7f ADDER8 Y
 0x9b,   ;  80 LD DATA_BUFFER0
 0x33,   ;  81 EXCHANGE
 0x3a,   ;  82 BSET3
 ; JP :next_page
 0x4e,   ;  83 JP  14
  
 0xae,   ;  84 LD MSB 14
 0xb6,   ;  85 LD LSB 6
 0x84,   ;  86 LD ADR_BUFFER00
 ;      LD MSB 13
 ;      LD LSB 2			;reload address bytes into 0xd2
 ;      LD Y
 ;      LD A DATA_BUFFER0
 ;      LD <Y>
  
 0xa0,   ;  87 LD MSB 0
 0xb2,   ;  88 LD LSB 2
 0x9b,   ;  89 LD DATA_BUFFER0		;load 2 in 0xe6 to change number of add bytes
  
 ;send 0x85 command for random data output
 ;----------------------------------------
  
 0xa8,   ;  8a LD MSB 8
 0xb5,   ;  8b LD LSB 5
 0x8c,   ;  8c LD DATA_FLASH
 0xa2,   ;  8d LD MSB 2
 0xb5,   ;  8e LD LSB 5
 0xb,   ;  8f CP ALWAYS
 0x60,   ;  90 BRANCH :send_nxt_cmd
  
 ;      LD MSB 6
 ;      LD LSB 9
 ;      BRANCH :write_next_col
  
 ; :next_page
 0xad,   ;  91 LD MSB 13
 0xb2,   ;  92 LD LSB 2
 0x82,   ;  93 LD Y 
 0xae,   ;  94 LD MSB 14
 0xb6,   ;  95 LD LSB 6
 0x84,   ;  96 LD ADR_BUFFER00
 0xc0,   ;  97 LD A <Y>
 0x9b,   ;  98 LD DATA_BUFFER0		;reload again the number of address bytes
  
 ;      LD MSB 14
 ;      LD LSB 5
 0x26,   ;  99 SUB16 ADR_BUFFER0
 0xc5,   ;  9a LD A ADR_BUFFER01
 0x9b,   ;  9b LD DATA_BUFFER0
 0x26,   ;  9c SUB16 ADR_BUFFER0
 0xb2,   ;  9d LD LSB 2
 0x9b,   ;  9e LD DATA_BUFFER0
  
 ;----------------------------
 ; :Page_Pgm_command_latch_cycle
 ;----------------------------
 ; :program_page
 ;-------------
  
 0xa1,   ;  9f LD MSB 1
 0xb0,   ;  a0 LD LSB 0
 0x8c,   ;  a1 LD DATA_FLASH
  
 0xa0,   ;  a2 LD MSB 0
 0xba,   ;  a3 LD LSB 10
 0x90,   ;  a4 LD DR_PARALLEL
 0xbb,   ;  a5 LD LSB 11
 0x90,   ;  a6 LD DR_PARALLEL
 0xb9,   ;  a7 LD LSB 9
 0x90,   ;  a8 LD DR_PARALLEL
 0xbb,   ;  a9 LD LSB 11
 0x90,   ;  aa LD DR_PARALLEL
 0xba,   ;  ab LD LSB 10
 0x90,   ;  ac LD DR_PARALLEL
  
 ;---------------------------
 ; read_status & check_status
 ;---------------------------
  
 ;wait_card_ready
 ;---------------
  
 ;init_timeout
 ;------------
 0xb0,   ;  ad LD LSB 00
 0x85,   ;  ae LD ADR_BUFFER01
 0x84,   ;  af LD ADR_BUFFER00
 0x88,   ;  b0 LD CMP00
 0xaf,   ;  b1 LD MSB 15
 0x89,   ;  b2 LD CMP01
  
 ; :wait_card_ready
 ;---------------
 0x27,   ;  b3 ADDER16 ADR_BUFFER0
 0xd,   ;  b4 CP ADR_BUFFER0<CMP0
 ; JP :no_timeout
 0x42,   ;  b5 JP  2
 0x7,   ;  b6 STATUS STOP ERROR		; timeout 20ms
  
 ; :no_timeout
 ;----------
 0xd0,   ;  b7 LD A DR_PARALLEL
 0x33,   ;  b8 EXCHANGE
 0x28,   ;  b9 BCLR1 //test R/B
 ; JP :wait_card_ready
 0x67,   ;  ba JP  -7
  
 ; :read_status_command_latch_cycle
 ;-------------------------------
  
 0xa7,   ;  bb LD MSB 7
 0xb0,   ;  bc LD LSB 0
 0x8c,   ;  bd LD DATA_FLASH
  
 0xa0,   ;  be LD MSB 0
 0xba,   ;  bf LD LSB 10
 0x90,   ;  c0 LD DR_PARALLEL
 0xbb,   ;  c1 LD LSB 11
 0x90,   ;  c2 LD DR_PARALLEL
 0xb9,   ;  c3 LD LSB 9
 0x90,   ;  c4 LD DR_PARALLEL
 0xbb,   ;  c5 LD LSB 11
 0x90,   ;  c6 LD DR_PARALLEL
 0xba,   ;  c7 LD LSB 10
 0x90,   ;  c8 LD DR_PARALLEL
  
 ; :init_read_status_seq
 ;---------------------
  
 0xa0,   ;  c9 LD MSB 0
 0xb9,   ;  ca LD LSB 9		; DATA_FLASH Port driven by FCI
 0x8d,   ;  cb LD CTRL_FCI	; PARALLEL Port driven by FCI
  
 ; :read_status_seq
 ;----------------
  
 0xa0,   ;  cc LD MSB 0
 0xb2,   ;  cd LD LSB 2
 0x90,   ;  ce LD DR_PARALLEL
 0x0,   ;  cf NOP
 0xcc,   ;  d0 LD A DATA_FLASH		; load DATA_FLASH
  
 ; : check_status
 ;-------------
 ;      EXCHANGE
 ;      BCLR3
 ;      JP :error_status
 ;      BCLR4
 ;      JP :error_status
 ;      CP A<X
 0x28,   ;  d1 BCLR1
 ; JP :no_error
 0x42,   ;  d2 JP  2
  
 ; :error_status
 ;------------
 0x5,   ;  d3 STATUS STOP
  
 ; :no_error
 ;--------
 0xa0,   ;  d4 LD MSB 0
 0xba,   ;  d5 LD LSB 10
 0x90,   ;  d6 LD DR_PARALLEL
  
 ;------------
 ;end_of_block
 ;------------
  
 ;inc_addr
 ;-------- 
 ;for 256mb
  
 0xb0,   ;  d7 LD LSB 0
 0xa0,   ;  d8 LD MSB 0
 0x85,   ;  d9 LD ADR_BUFFER01		; buffer 0 address ( 8..15 )
  
 0xaf,   ;  da LD MSB 15
 0xbf,   ;  db LD LSB 15
 0x84,   ;  dc LD ADR_BUFFER00
  
 0xdb,   ;  dd LD A DATA_BUFFER0
 0x8,   ;  de CP A=>X
 ; JP :inc_page_addr
 0x42,   ;  df JP  2
 0x5,   ;  e0 STATUS STOP
  
 ; :inc_page_addr
 ;-------------
  
 0xac,   ;  e1 LD MSB 12
 0xb0,   ;  e2 LD LSB 0
 0x84,   ;  e3 LD ADR_BUFFER00
  
 0xdb,   ;  e4 LD A DATA_BUFFER0
 0x38,   ;  e5 BSET1
 ; JP :512bytes_page
 0x46,   ;  e6 JP  6
  
 0xae,   ;  e7 LD MSB 14
 0xb3,   ;  e8 LD LSB 03
 0x84,   ;  e9 LD ADR_BUFFER00		; buffer 0 address ( 0..7 )
 0xb,   ;  ea CP ALWAYS
 ; JP :process_continue
 0x44,   ;  eb JP  4
  
 ; :512bytes_page
 ;-------------
 0xae,   ;  ec LD MSB 14
 0xb4,   ;  ed LD LSB 04
 0x84,   ;  ee LD ADR_BUFFER00
  
 ; :process_continue
 ;-----------------
 0xdb,   ;  ef LD A DATA_BUFFER0
 0x2,   ;  f0 CLC
 0x25,   ;  f1 ADDER8 X
 0x9b,   ;  f2 LD DATA_BUFFER0
  
 0xa1,   ;  f3 LD MSB 1
 0xbf,   ;  f4 LD LSB 15
 ;      LD Y
 ;      LD A <Y>
 0xb,   ;  f5 CP ALWAYS
 0x60,   ;  f6 BRANCH :repeat

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -