📄 smc_dtc_copypages256_end.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) Mon Sep 26 17:56:49 2005
//===================================================================
//
// SMART MEDIA CARD
//
//===================================================================
//----------------------
// dtc_smc_copy_page.fsm
//----------------------
//--------------------------
//init_write_number_of_block
//--------------------------
0xa0, // 0 LD MSB 0
0xb1, // 1 LD LSB 1
0x81, // 2 LD X // X<=1
0xb0, // 3 LD LSB 0
0x85, // 4 LD ADR_BUFFER01
0x88, // 5 LD CMP00
0x9f, // 6 LD BUFFER_MNGT
//-----------------
//init_dtc_ctrl_reg
//-----------------
0xa1, // 7 LD MSB 1 // data_flash port = output
0xb9, // 8 LD LSB 9 // DATA_FLASH Port driven by FCI
0x8d, // 9 LD CTRL_FCI // PARALLEL Port driven by FCI
//-------------------------------
//command_latch_cycle (Read1 CMD)
//-------------------------------
// LD MSB 0
// LD LSB 0
0xc5, // a LD A ADR_BUFFER01
0x8c, // b LD DATA_FLASH
// LD MSB 0
0xba, // c LD LSB 10
0x90, // d LD DR_PARALLEL
0xbb, // e LD LSB 11
0x90, // f LD DR_PARALLEL
0xb9, // 10 LD LSB 9
0x90, // 11 LD DR_PARALLEL
0xbb, // 12 LD LSB 11
0x90, // 13 LD DR_PARALLEL
//send address, set ALE high
//------------------------------
0xbe, // 14 LD LSB 14
0x90, // 15 LD DR_PARALLEL
//-------------------------
// read_address_latch_cycle
//-------------------------
//read_address_latch_cycle_nb_Bytes
//---------------------------------
0xae, // 16 LD MSB 14
0xb6, // 17 LD LSB 06
0x84, // 18 LD ADR_BUFFER00 // buffer pointer 0 = 0x00E6
0xdb, // 19 LD A DATA_BUFFER0
0x82, // 1a LD Y // Y = number of address bytes
0x3c, // 1b DECY
0x26, // 1c SUB16 ADR_BUFFER0 // send address from high byte to low byte
// :loop_send_address
//-----------------
0xdb, // 1d LD A DATA_BUFFER0
0x8c, // 1e LD DATA_FLASH // Output the address bytes
0xbc, // 1f LD LSB 12
0x90, // 20 LD DR_PARALLEL // ALE = 1, WE = 0
0xbe, // 21 LD LSB 14
0x90, // 22 LD DR_PARALLEL // ALE = 1, WE = 1
0x26, // 23 SUB16 ADR_BUFFER0 // send address from high byte to low byte
0x3c, // 24 DECY
// JP :loop_send_address
0x68, // 25 JP -8
0xba, // 26 LD LSB 10
0x90, // 27 LD DR_PARALLEL // ALE = 0, WE = 1
//end of send address
//---------------------
//wait_read1_addr_ready
//---------------------
0xa3, // 28 LD MSB 3
0xb5, // 29 LD LSB 5
0x8c, // 2a LD DATA_FLASH
0xbb, // 2b LD LSB 11
0x90, // 2c LD DR_PARALLEL
0xb9, // 2d LD LSB 9
0x90, // 2e LD DR_PARALLEL
0xbb, // 2f LD LSB 11
0x90, // 30 LD DR_PARALLEL
0xba, // 31 LD LSB 10
0x90, // 32 LD DR_PARALLEL
// :wait_read1_addr_ready
//---------------------
// NOP
// NOP
//:read1_addr_no_timeout
//---------------------
0xd0, // 33 LD A DR_PARALLEL
0x33, // 34 EXCHANGE
0x28, // 35 BCLR1 // test R/B
// JP :wait_read1_addr_ready
0x63, // 36 JP -3
//send next command for copy operation 0x85
//-------------------------------------------
0xa8, // 37 LD MSB 8
0xb5, // 38 LD LSB 5
0x8c, // 39 LD DATA_FLASH
0xbb, // 3a LD LSB 11
0x90, // 3b LD DR_PARALLEL
0xb9, // 3c LD LSB 9
0x90, // 3d LD DR_PARALLEL
0xbb, // 3e LD LSB 11
0x90, // 3f LD DR_PARALLEL
//send address bytes
0xbe, // 40 LD LSB 14
0x90, // 41 LD DR_PARALLEL
//send the address of destination block
//--------------------------------------
// :send_address
//-------------
0xae, // 42 LD MSB 14
0xb6, // 43 LD LSB 06
0x84, // 44 LD ADR_BUFFER00 // buffer pointer 0 = 0x00E6
0xdb, // 45 LD A DATA_BUFFER0
0x82, // 46 LD Y // Y = number of address bytes
0x3c, // 47 DECY
0x27, // 48 ADDER16 ADR_BUFFER0 // send address from high byte to low byte
// :loop_send_address1
//-----------------
0xdb, // 49 LD A DATA_BUFFER0
0x8c, // 4a LD DATA_FLASH // Output the address bytes
0xbc, // 4b LD LSB 12
0x90, // 4c LD DR_PARALLEL // ALE = 1, WE = 0
0xbe, // 4d LD LSB 14
0x90, // 4e LD DR_PARALLEL // ALE = 1, WE = 1
0x27, // 4f ADDER16 ADR_BUFFER0 // send address from high byte to low byte
0x3c, // 50 DECY
// JP :loop_send_address1
0x68, // 51 JP -8
0xba, // 52 LD LSB 10
0x90, // 53 LD DR_PARALLEL // ALE = 0, WE = 1
//end of send address
//---------------------
//chk if the first page is not from the start of coloumn
//-------------------------------------------------------
//chk the flag set in the 0xfd to get the no. of blocks
//-------------------------------------------------------
0xaf, // 54 LD MSB 15
0xbd, // 55 LD LSB 13
0x84, // 56 LD ADR_BUFFER00
0xc5, // 57 LD A ADR_BUFFER01
0x87, // 58 LD ADR_BUFFER11
0x86, // 59 LD ADR_BUFFER10 // ADR1 = 0x0000
0xdb, // 5a LD A DATA_BUFFER0
0x27, // 5b ADDER16 ADR_BUFFER0
0x27, // 5c ADDER16 ADR_BUFFER0 // point ADR0 = 0x00ff
0x38, // 5d BSET1
// JP :chk_nxt_bit
0x46, // 5e JP 6
0x39, // 5f BSET2
// JP :2_block_ff
0x4a, // 60 JP 10
0xa0, // 61 LD MSB 0
0xb0, // 62 LD LSB 0
// JP :start_pgm_cycle
0x60, // 63 BRANCH :start_pgm_cycle
// :chk_nxt_bit
0x39, // 64 BSET2
// JP :3_block_ff
0x49, // 65 JP 9
// :1_block_ff
//--------------
0xb2, // 66 LD LSB 2
0x8b, // 67 LD CMP11 // only one block so CMP1 = 0x210 = 528 bytes
0xa1, // 68 LD MSB 1
// JP :send_ff
0x48, // 69 JP 8
// :2_block_ff
//------------
0xb4, // 6a LD LSB 4
0x8b, // 6b LD CMP11
0xa2, // 6c LD MSB 2
// JP :send_ff
0x44, // 6d JP 4
// :3_block_ff
//-----------
0xb6, // 6e LD LSB 6
0x8b, // 6f LD CMP11
0xa3, // 70 LD MSB 3 //CMP1 = 0x630
// :send_ff
0xb0, // 71 LD LSB 0
0x8a, // 72 LD CMP10
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
0xa8, // 73 LD MSB 8
0xb5, // 74 LD LSB 5
0x8c, // 75 LD DATA_FLASH
0xbb, // 76 LD LSB 11
0x90, // 77 LD DR_PARALLEL
0xb9, // 78 LD LSB 9
0x90, // 79 LD DR_PARALLEL
0xbb, // 7a LD LSB 11
0x90, // 7b LD DR_PARALLEL
//send address bytes
0xbe, // 7c LD LSB 14
0x90, // 7d LD DR_PARALLEL
//send the address of destination block
//--------------------------------------
0xae, // 7e LD MSB 14
0xb6, // 7f LD LSB 06
0x84, // 80 LD ADR_BUFFER00 // buffer pointer 0 = 0x00E6
0xdb, // 81 LD A DATA_BUFFER0
0x82, // 82 LD Y // Y = number of address bytes
0x3c, // 83 DECY
0x27, // 84 ADDER16 ADR_BUFFER0 // send address from high byte to low byte
// :loop_send_address2
//-----------------
0xdb, // 85 LD A DATA_BUFFER0
0x8c, // 86 LD DATA_FLASH // Output the address bytes
0xbc, // 87 LD LSB 12
0x90, // 88 LD DR_PARALLEL // ALE = 1, WE = 0
0xbe, // 89 LD LSB 14
0x90, // 8a LD DR_PARALLEL // ALE = 1, WE = 1
0x27, // 8b ADDER16 ADR_BUFFER0 // send address from high byte to low byte
0x3c, // 8c DECY
// JP :loop_send_address2
0x68, // 8d JP -8
0xba, // 8e LD LSB 10
0x90, // 8f LD DR_PARALLEL // ALE = 0, WE = 1
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
//write data on to page, generate 528 write pulses
//------------------------------------------------
//:gen_more_pulses
//---------------
// :write_dat_sec
//-------------
0xc4, // 90 LD A ADR_BUFFER00
0x8c, // 91 LD DATA_FLASH
0xb8, // 92 LD LSB 8
0x90, // 93 LD DR_PARALLEL
0xba, // 94 LD LSB 10
0x90, // 95 LD DR_PARALLEL
0x2f, // 96 ADDER16 ADR_BUFFER1
0xf, // 97 CP ADR_BUFFER1<CMP1
// JP :write_dat_sec
0x68, // 98 JP -8
//----------------------------
// :Page_Pgm_command_latch_cycle
//----------------------------
// :start_pgm_cycle
//----------------
0xa1, // 99 LD MSB 1
0xb0, // 9a LD LSB 0
0x8c, // 9b LD DATA_FLASH // Send CMD: 0x10
0xbb, // 9c LD LSB 11
0x90, // 9d LD DR_PARALLEL
0xb9, // 9e LD LSB 9
0x90, // 9f LD DR_PARALLEL
0xbb, // a0 LD LSB 11
0x90, // a1 LD DR_PARALLEL
0xba, // a2 LD LSB 10
0x90, // a3 LD DR_PARALLEL
//---------------------------
// read_status & check_status
//---------------------------
// :wait_card_ready
//---------------
// NOP
// NOP
0xd0, // a4 LD A DR_PARALLEL
0x33, // a5 EXCHANGE
0x28, // a6 BCLR1 // test R/B
// JP :wait_card_ready
0x63, // a7 JP -3
//-------------------------------
0xa7, // a8 LD MSB 7 // read_status_command_latch_cycle
0xb0, // a9 LD LSB 0
0x8c, // aa LD DATA_FLASH
0xbb, // ab LD LSB 11
0x90, // ac LD DR_PARALLEL
0xb9, // ad LD LSB 9
0x90, // ae LD DR_PARALLEL
0xbb, // af LD LSB 11
0x90, // b0 LD DR_PARALLEL
0xba, // b1 LD LSB 10
0x90, // b2 LD DR_PARALLEL
// :init_read_status_seq
//---------------------
0xb9, // b3 LD LSB 9 // DATA_FLASH Port driven by FCI
0x8d, // b4 LD CTRL_FCI // PARALLEL Port driven by FCI
// :read_status_seq
//----------------
0xb2, // b5 LD LSB 2
0x90, // b6 LD DR_PARALLEL
0xba, // b7 LD LSB 10
0x90, // b8 LD DR_PARALLEL
0xcc, // b9 LD A DATA_FLASH // load DATA_FLASH
0x28, // ba BCLR1 // check_status
// JP :no_error
0x42, // bb JP 2
// :error_status
//------------
0x7, // bc STATUS ERROR STOP
// :no_error
//------------
//end_of_block
//------------
0xdb, // bd LD A DATA_BUFFER0 // ADR0 = 0x00ff, contains 2K page pointer
0x8, // be CP A=>X
// JP :dec_512_page
0x42, // bf JP 2
// :stop
0x5, // c0 STATUS STOP // if 0 then stop
//-------------------------------
//-------------------------------
// :dec_512_page
0xa0, // c1 LD MSB 0
0xb4, // c2 LD LSB 4
0x82, // c3 LD Y
0x26, // c4 SUB16 ADR_BUFFER0
0xdb, // c5 LD A DATA_BUFFER0
0x2, // c6 CLC
0x2c, // c7 SUB8 Y // decrement by 4
0x9b, // c8 LD DATA_BUFFER0
//---------------
//:increment_page
//---------------
//// Decrease the page number and increase the page address
0xae, // c9 LD MSB 14
0xb3, // ca LD LSB 3
0x82, // cb LD Y
// :next_page
//-----------------------------------
0xc0, // cc LD A <Y>
0x2, // cd CLC
0x25, // ce ADDER8 X
0x80, // cf LD <Y> // Increase the page address and save it back
0xae, // d0 LD MSB 14
0xb9, // d1 LD LSB 9
0x82, // d2 LD Y
0xc0, // d3 LD A <Y>
0x2, // d4 CLC
0x25, // d5 ADDER8 X
0x80, // d6 LD <Y>
0x3c, // d7 DECY //Y = 0xe8
// JP :end_of_page
0x5f, // d8 JP 31
// :last_page
//---------------
0x26, // d9 SUB16 ADR_BUFFER0 // ADR0 =0xfe
0xdb, // da LD A DATA_BUFFER0
0x9, // db CP A<X
// JP :stop
0x7c, // dc JP -28
// :partial_page_pgm
//-----------------
0x26, // dd SUB16 ADR_BUFFER0 // ADR0 = 0xfd
0x38, // de BSET1
// JP :chk_nxtbit
0x43, // df JP 3
0x39, // e0 BSET2
// JP :2_block_extra
0x4a, // e1 JP 10
// :chk_nxtbit
0x39, // e2 BSET2
// JP :1_block_extra
0x4e, // e3 JP 14
// :3_block_extra
0xb3, // e4 LD LSB 3
0x9b, // e5 LD DATA_BUFFER0
0xb2, // e6 LD LSB 2
0x8b, // e7 LD CMP11 // col 1
0xa1, // e8 LD MSB 1
0xb, // e9 CP ALWAYS
// JP :end1
0x46, // ea JP 6
// :2_block_extra
0xb2, // eb LD LSB 2
0x9b, // ec LD DATA_BUFFER0
0xb4, // ed LD LSB 4
0x8b, // ee LD CMP11 // col 1
0xa2, // ef LD MSB 2
// :end1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -