📄 new_smc_dtc_markpages256_fsm.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 + -