78K0R Assembler W1.31 Date:13 Jun 2010 Page: 1 Command: -c9F0104 -yC:\Program Files\NEC Electronics Tools\DEV -_msgoff inter_asm\self_flash.asm Para-file: In-file: inter_asm\self_flash.asm Obj-file: self_flash.rel Prn-file: self_flash.prn Assemble list ALNO STNO ADRS OBJECT M I SOURCE STATEMENT 1 1 ; 78K0R C Compiler V2.10 Assembler Source Date:13 Jun 2010 Time:19:31:25 2 2 3 3 ; Command : -c9F0104 -yC:\Program Files\NEC Electronics Tools\DEV -_msgoff -i 4 4 ; renge -iC:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\ 5 5 ; V1.20\inc78k0r -ms -qvjl3wt -sainter_asm -zp -no self_flash.c 6 6 ; In-file : self_flash.c 7 7 ; Asm-file : inter_asm\self_flash.asm 8 8 ; Para-file : 9 9 10 10 $PROCESSOR(9F0104) 11 11 $DEBUG 12 12 $NODEBUGA 13 13 $KANJICODE SJIS 14 14 $TOL_INF 03FH, 0210H, 02H, 00H, 00H, 00H, 00H 15 15 16 16 $DGS FIL_NAM, .file, 0B4H, 0FFFEH, 03FH, 067H, 01H, 00H 17 17 $DGS AUX_FIL, self_flash.c 18 18 $DGS MOD_NAM, self_flash, 00H, 0FFFEH, 00H, 077H, 00H, 00H 19 19 $DGS SEC_NAM, @@BITS, U, U, 00H, 078H, 00H, 00H 20 20 $DGS SEC_NAM, @@CNST, U, U, 00H, 078H, 00H, 00H 21 21 $DGS SEC_NAM, @@R_INIT, U, U, 00H, 078H, 00H, 00H 22 22 $DGS SEC_NAM, @@INIT, U, U, 00H, 078H, 00H, 00H 23 23 $DGS SEC_NAM, @@DATA, U, U, 00H, 078H, 00H, 00H 24 24 $DGS SEC_NAM, @@R_INIS, U, U, 00H, 078H, 00H, 00H 25 25 $DGS SEC_NAM, @@INIS, U, U, 00H, 078H, 00H, 00H 26 26 $DGS SEC_NAM, @@DATS, U, U, 00H, 078H, 00H, 00H 27 27 $DGS SEC_NAM, LDR_CNSL, U, U, 00H, 078H, 00H, 00H 28 28 $DGS SEC_NAM, @@RLINIT, U, U, 00H, 078H, 00H, 00H 29 29 $DGS SEC_NAM, @@INITL, U, U, 00H, 078H, 00H, 00H 30 30 $DGS SEC_NAM, @@DATAL, U, U, 00H, 078H, 00H, 00H 31 31 $DGS SEC_NAM, @@CALT, U, U, 00H, 078H, 00H, 00H 32 32 $DGS SEC_NAM, LDR_CODE, U, U, 00H, 078H, 00H, 00H 33 33 $DGS SEC_NAM, LDR_CODL, U, U, 00H, 078H, 00H, 00H 34 34 $DGS SEC_NAM, @@BASE, U, U, 00H, 078H, 00H, 00H 35 35 $DGS ENM_TAG, .2fake, 00H, 0FFFEH, 0AH, 0FH, 01H, 00H 36 36 $DGS AUX_TAG, 01H, 019H 37 37 $DGS MEB_ENM, _ERR_FINISED, 00H, 0FFFFH, 04H, 010H, 00H, 00H 38 38 $DGS MEB_ENM, _ERR_CONTINUE, 01H, 0FFFFH, 04H, 010H, 00H, 00H 39 39 $DGS END_STR, .eos, 01H, 0FFFFH, 00H, 066H, 01H, 00H 40 40 $DGS AUX_EOS, 013H, 01H 41 41 $DGS LAB_SYM, bs_F0064, U, U, 00H, 06H, 00H, 00H 42 42 $DGS LAB_SYM, es_F0064, U, U, 00H, 06H, 00H, 00H 43 43 $DGS LAB_SYM, bs_S0062, U, U, 00H, 06H, 00H, 00H 44 44 $DGS LAB_SYM, es_S0062, U, U, 00H, 06H, 00H, 00H 45 45 $DGS LAB_SYM, bs_F0063, U, U, 00H, 06H, 00H, 00H 46 46 $DGS LAB_SYM, es_F0063, U, U, 00H, 06H, 00H, 00H 47 47 $DGS LAB_SYM, bs_F0061, U, U, 00H, 06H, 00H, 00H 48 48 $DGS LAB_SYM, es_F0061, U, U, 00H, 06H, 00H, 00H 49 49 $DGS LAB_SYM, bs_S0060, U, U, 00H, 06H, 00H, 00H 50 50 $DGS LAB_SYM, es_S0060, U, U, 00H, 06H, 00H, 00H 51 51 $DGS GLV_SYM, _firm_update, U, U, 0CH, 026H, 01H, 02H 52 52 $DGS AUX_FUN, 00H, U, U, 063H, 00H, 00H 53 53 $DGS BEG_FUN, ??bf_firm_update, U, U, 00H, 065H, 01H, 00H 54 54 $DGS AUX_BEG, 061H, 06H, 029H 55 55 $DGS AUT_VAR, _target_block, 05H, 0FFFFH, 0CH, 01H, 00H, 00H 56 56 $DGS AUT_VAR, _split_write_count, 04H, 0FFFFH, 0CH, 01H, 00H, 00H 57 57 $DGS BEG_BLK, ??bb00_firm_update, U, U, 00H, 064H, 01H, 00H 58 58 $DGS AUX_BEG, 015H, 00H, 02DH 59 59 $DGS END_BLK, ??eb00_firm_update, U, U, 00H, 064H, 01H, 00H 60 60 $DGS AUX_END, 017H 61 61 $DGS BEG_BLK, ??bb01_firm_update, U, U, 00H, 064H, 01H, 00H 62 62 $DGS AUX_BEG, 01FH, 00H, 02FH 63 63 $DGS BEG_BLK, ??bb02_firm_update, U, U, 00H, 064H, 01H, 00H 64 64 $DGS AUX_BEG, 028H, 00H, 035H 65 65 $DGS AUT_VAR, _p_buffer, 02H, 0FFFFH, 0CH, 01H, 01H, 01H 66 66 $DGS AUX_STR, 00H, 029H, 02H, 00H, 00H, 00H, 00H, 01H 67 67 $DGS AUT_VAR, _buffer_fill, 01H, 0FFFFH, 0CH, 01H, 01H, 00H 68 68 $DGS AUX_STR, 00H, 02AH, 01H, 00H, 00H, 00H, 00H, 00H 69 69 $DGS BEG_BLK, ??bb03_firm_update, U, U, 00H, 064H, 01H, 00H 70 70 $DGS AUX_BEG, 030H, 00H, 037H 71 71 $DGS BEG_BLK, ??bb04_firm_update, U, U, 00H, 064H, 01H, 00H 72 72 $DGS AUX_BEG, 031H, 00H, 03DH 73 73 $DGS END_BLK, ??eb04_firm_update, U, U, 00H, 064H, 01H, 00H 74 74 $DGS AUX_END, 031H 75 75 $DGS END_BLK, ??eb03_firm_update, U, U, 00H, 064H, 01H, 00H 76 76 $DGS AUX_END, 037H 77 77 $DGS BEG_BLK, ??bb05_firm_update, U, U, 00H, 064H, 01H, 00H 78 78 $DGS AUX_BEG, 043H, 00H, 043H 79 79 $DGS END_BLK, ??eb05_firm_update, U, U, 00H, 064H, 01H, 00H 80 80 $DGS AUX_END, 04AH 81 81 $DGS END_BLK, ??eb02_firm_update, U, U, 00H, 064H, 01H, 00H 82 82 $DGS AUX_END, 04CH 83 83 $DGS BEG_BLK, ??bb06_firm_update, U, U, 00H, 064H, 01H, 00H 84 84 $DGS AUX_BEG, 04EH, 00H, 047H 85 85 $DGS END_BLK, ??eb06_firm_update, U, U, 00H, 064H, 01H, 00H 86 86 $DGS AUX_END, 051H 87 87 $DGS BEG_BLK, ??bb07_firm_update, U, U, 00H, 064H, 01H, 00H 88 88 $DGS AUX_BEG, 054H, 00H, 04DH 89 89 $DGS END_BLK, ??eb07_firm_update, U, U, 00H, 064H, 01H, 00H 90 90 $DGS AUX_END, 056H 91 91 $DGS END_BLK, ??eb01_firm_update, U, U, 00H, 064H, 01H, 00H 92 92 $DGS AUX_END, 057H 93 93 $DGS BEG_BLK, ??bb08_firm_update, U, U, 00H, 064H, 01H, 00H 94 94 $DGS AUX_BEG, 05CH, 00H, 053H 95 95 $DGS AUT_VAR, _i, 03H, 0FFFFH, 0CH, 01H, 01H, 00H 96 96 $DGS AUX_STR, 00H, 05DH, 01H, 00H, 00H, 00H, 00H, 00H 97 97 $DGS AUT_VAR, _comp, 02H, 0FFFFH, 0CH, 01H, 01H, 00H 98 98 $DGS AUX_STR, 00H, 05EH, 01H, 00H, 00H, 00H, 00H, 00H 99 99 $DGS BEG_BLK, ??bb09_firm_update, U, U, 00H, 064H, 01H, 00H 100 100 $DGS AUX_BEG, 062H, 00H, 057H 101 101 $DGS END_BLK, ??eb09_firm_update, U, U, 00H, 064H, 01H, 00H 102 102 $DGS AUX_END, 064H 103 103 $DGS BEG_BLK, ??bb0A_firm_update, U, U, 00H, 064H, 01H, 00H 104 104 $DGS AUX_BEG, 066H, 00H, 05BH 105 105 $DGS END_BLK, ??eb0A_firm_update, U, U, 00H, 064H, 01H, 00H 106 106 $DGS AUX_END, 06CH 107 107 $DGS BEG_BLK, ??bb0B_firm_update, U, U, 00H, 064H, 01H, 00H 108 108 $DGS AUX_BEG, 06EH, 00H, 00H 109 109 $DGS END_BLK, ??eb0B_firm_update, U, U, 00H, 064H, 01H, 00H 110 110 $DGS AUX_END, 075H 111 111 $DGS END_BLK, ??eb08_firm_update, U, U, 00H, 064H, 01H, 00H 112 112 $DGS AUX_END, 076H 113 113 $DGS END_FUN, ??ef_firm_update, U, U, 00H, 065H, 01H, 00H 114 114 $DGS AUX_END, 077H 115 115 $DGS GLV_SYM, _firm_restore, U, U, 0CH, 026H, 01H, 02H 116 116 $DGS AUX_FUN, 00H, U, U, 069H, 00H, 00H 117 117 $DGS BEG_FUN, ??bf_firm_restore, U, U, 00H, 065H, 01H, 00H 118 118 $DGS AUX_BEG, 0E3H, 00H, 069H 119 119 $DGS END_FUN, ??ef_firm_restore, U, U, 00H, 065H, 01H, 00H 120 120 $DGS AUX_END, 013H 121 121 $DGS STA_SYM, _FSL_Open, U, U, 01H, 03H, 01H, 02H 122 122 $DGS AUX_FUN, 00H, U, U, 077H, 00H, 00H 123 123 $DGS BEG_FUN, ??bf_FSL_Open, U, U, 00H, 065H, 01H, 00H 124 124 $DGS AUX_BEG, 0FCH, 00H, 06DH 125 125 $DGS BEG_BLK, ??bb00_FSL_Open, U, U, 00H, 064H, 01H, 00H 126 126 $DGS AUX_BEG, 014H, 00H, 071H 127 127 $DGS END_BLK, ??eb00_FSL_Open, U, U, 00H, 064H, 01H, 00H 128 128 $DGS AUX_END, 014H 129 129 $DGS BEG_BLK, ??bb01_FSL_Open, U, U, 00H, 064H, 01H, 00H 130 130 $DGS AUX_BEG, 01BH, 00H, 00H 131 131 $DGS END_BLK, ??eb01_FSL_Open, U, U, 00H, 064H, 01H, 00H 132 132 $DGS AUX_END, 01BH 133 133 $DGS END_FUN, ??ef_FSL_Open, U, U, 00H, 065H, 01H, 00H 134 134 $DGS AUX_END, 01CH 135 135 $DGS STA_SYM, _FSL_Close, U, U, 01H, 03H, 01H, 02H 136 136 $DGS AUX_FUN, 00H, U, U, 081H, 00H, 00H 137 137 $DGS BEG_FUN, ??bf_FSL_Close, U, U, 00H, 065H, 01H, 00H 138 138 $DGS AUX_BEG, 011FH, 00H, 07BH 139 139 $DGS BEG_BLK, ??bb00_FSL_Close, U, U, 00H, 064H, 01H, 00H 140 140 $DGS AUX_BEG, 04H, 00H, 00H 141 141 $DGS END_BLK, ??eb00_FSL_Close, U, U, 00H, 064H, 01H, 00H 142 142 $DGS AUX_END, 04H 143 143 $DGS END_FUN, ??ef_FSL_Close, U, U, 00H, 065H, 01H, 00H 144 144 $DGS AUX_END, 0EH 145 145 $DGS STA_SYM, _firm_duplicate, U, U, 0CH, 03H, 01H, 02H 146 146 $DGS AUX_FUN, 00H, U, U, 0A8H, 00H, 00H 147 147 $DGS BEG_FUN, ??bf_firm_duplicate, U, U, 00H, 065H, 01H, 00H 148 148 $DGS AUX_BEG, 0139H, 0AH, 08AH 149 149 $DGS FUN_ARG, _p_rom, 06H, 0FFFFH, 0CH, 09H, 01H, 01H 150 150 $DGS AUX_STR, 00H, 00H, 04H, 00H, 00H, 00H, 00H, 02H 151 151 $DGS FUN_ARG, _block_dest, 010H, 0FFFFH, 0CH, 09H, 00H, 00H 152 152 $DGS AUT_VAR, _target_block, 05H, 0FFFFH, 0CH, 01H, 00H, 00H 153 153 $DGS AUT_VAR, _split_write_count, 04H, 0FFFFH, 0CH, 01H, 00H, 00H 154 154 $DGS BEG_BLK, ??bb00_firm_duplicate, U, U, 00H, 064H, 01H, 00H 155 155 $DGS AUX_BEG, 09H, 00H, 08CH 156 156 $DGS BEG_BLK, ??bb01_firm_duplicate, U, U, 00H, 064H, 01H, 00H 157 157 $DGS AUX_BEG, 0DH, 00H, 090H 158 158 $DGS END_BLK, ??eb01_firm_duplicate, U, U, 00H, 064H, 01H, 00H 159 159 $DGS AUX_END, 0FH 160 160 $DGS BEG_BLK, ??bb02_firm_duplicate, U, U, 00H, 064H, 01H, 00H 161 161 $DGS AUX_BEG, 015H, 00H, 096H 162 162 $DGS AUT_VAR, _buffer_fill, 03H, 0FFFFH, 0CH, 01H, 01H, 00H 163 163 $DGS AUX_STR, 00H, 016H, 01H, 00H, 00H, 00H, 00H, 00H 164 164 $DGS AUT_VAR, _p_buff, 00H, 0FFFFH, 0CH, 01H, 01H, 01H 165 165 $DGS AUX_STR, 00H, 017H, 02H, 00H, 00H, 00H, 00H, 01H 166 166 $DGS BEG_BLK, ??bb03_firm_duplicate, U, U, 00H, 064H, 01H, 00H 167 167 $DGS AUX_BEG, 01DH, 00H, 09AH 168 168 $DGS END_BLK, ??eb03_firm_duplicate, U, U, 00H, 064H, 01H, 00H 169 169 $DGS AUX_END, 022H 170 170 $DGS BEG_BLK, ??bb04_firm_duplicate, U, U, 00H, 064H, 01H, 00H 171 171 $DGS AUX_BEG, 02CH, 00H, 0A0H 172 172 $DGS END_BLK, ??eb04_firm_duplicate, U, U, 00H, 064H, 01H, 00H 173 173 $DGS AUX_END, 02FH 174 174 $DGS END_BLK, ??eb02_firm_duplicate, U, U, 00H, 064H, 01H, 00H 175 175 $DGS AUX_END, 030H 176 176 $DGS BEG_BLK, ??bb05_firm_duplicate, U, U, 00H, 064H, 01H, 00H 177 177 $DGS AUX_BEG, 033H, 00H, 00H 178 178 $DGS END_BLK, ??eb05_firm_duplicate, U, U, 00H, 064H, 01H, 00H 179 179 $DGS AUX_END, 036H 180 180 $DGS END_BLK, ??eb00_firm_duplicate, U, U, 00H, 064H, 01H, 00H 181 181 $DGS AUX_END, 037H 182 182 $DGS END_FUN, ??ef_firm_duplicate, U, U, 00H, 065H, 01H, 00H 183 183 $DGS AUX_END, 03AH 184 184 $DGS STA_SYM, _my_FSL_Init, U, U, 0CH, 03H, 01H, 02H 185 185 $DGS AUX_FUN, 00H, U, U, 0AEH, 00H, 00H 186 186 $DGS BEG_FUN, ??bf_my_FSL_Init, U, U, 00H, 065H, 01H, 00H 187 187 $DGS AUX_BEG, 0179H, 00H, 0AEH 188 188 $DGS END_FUN, ??ef_my_FSL_Init, U, U, 00H, 065H, 01H, 00H 189 189 $DGS AUX_END, 0CH 190 190 $DGS GLV_SYM, _tski_mcu_reset, U, U, 0AH, 026H, 01H, 02H 191 191 $DGS AUX_FUN, 013H, U, U, 0B4H, 00H, 00H 192 192 $DGS BEG_FUN, ??bf_tski_mcu_reset, U, U, 00H, 065H, 01H, 00H 193 193 $DGS AUX_BEG, 0188H, 00H, 0B4H 194 194 $DGS END_FUN, ??ef_tski_mcu_reset, U, U, 00H, 065H, 01H, 00H 195 195 $DGS AUX_END, 0BH 196 196 $DGS GLV_SYM, _fsl_fx_MHz_u08, U, U, 0500CH, 026H, 00H, 00H 197 197 $DGS GLV_SYM, _fsl_low_voltage_u08, U, U, 0500CH, 026H, 00H, 00H 198 198 $DGS GLV_SYM, _FSL_Erase, U, U, 0CH, 02H, 01H, 02H 199 199 $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H 200 200 $DGS GLV_SYM, _FSL_IVerify, U, U, 0CH, 02H, 01H, 02H 201 201 $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H 202 202 $DGS GLV_SYM, _@RTARG0, U, U, 00H, 02H, 00H, 00H 203 203 $DGS GLV_SYM, _@RTARG2, U, U, 00H, 02H, 00H, 00H 204 204 $DGS GLV_SYM, _FSL_Write, U, U, 0CH, 02H, 01H, 02H 205 205 $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H 206 206 $DGS GLV_SYM, _pool, U, U, 0DH, 02H, 01H, 03H 207 207 $DGS AUX_STR, 00H, 00H, 02H, 01H, 00H, 00H, 00H, 00H 208 208 $DGS GLV_SYM, _WDT_Restart, U, U, 01H, 02H, 01H, 02H 209 209 $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H 210 210 $DGS GLV_SYM, _FSL_SwapBootCluster, U, U, 01H, 02H, 01H, 02H 211 211 $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H 212 212 $DGS GLV_SYM, _FSL_InvertBootFlag, U, U, 0CH, 02H, 01H, 02H 213 213 $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H 214 214 $DGS GLV_SYM, @@iscmp, U, U, 00H, 02H, 00H, 00H 215 215 $DGS GLV_SYM, _FSL_BlankCheck, U, U, 0CH, 02H, 01H, 02H 216 216 $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H 217 217 $DGS GLV_SYM, _FSL_Init, U, U, 0CH, 02H, 01H, 02H 218 218 $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H 219 219 $DGS GLV_SYM, _FSL_ModeCheck, U, U, 0CH, 02H, 01H, 02H 220 220 $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H 221 221 $DGS GLV_SYM, _FSL_ForceReset, U, U, 01H, 02H, 01H, 02H 222 222 $DGS AUX_FUN, 00H, U, U, 00H, 00H, 00H 223 223 224 224 EXTRN _FSL_Erase 225 225 EXTRN _FSL_IVerify 226 226 EXTRN _@RTARG0 227 227 EXTRN _@RTARG2 228 228 EXTRN _FSL_Write 229 229 EXTRN _pool 230 230 EXTRN _WDT_Restart 231 231 EXTRN _FSL_SwapBootCluster 232 232 EXTRN _FSL_InvertBootFlag 233 233 EXTRN @@iscmp 234 234 EXTRN _FSL_BlankCheck 235 235 EXTRN _FSL_Init 236 236 EXTRN _FSL_ModeCheck 237 237 EXTRN _FSL_ForceReset 238 238 PUBLIC _fsl_fx_MHz_u08 239 239 PUBLIC _fsl_low_voltage_u08 240 240 PUBLIC _firm_update 241 241 PUBLIC _firm_restore 242 242 PUBLIC _tski_mcu_reset 243 243 244 244 ----- @@BITS BSEG 245 245 246 246 ----- @@CNST CSEG MIRRORP 247 247 00000 08 _fsl_fx_MHz_u08: DB 08H ; 8 248 248 00001 01 _fsl_low_voltage_u08: DB 01H ; 1 249 249 250 250 ----- @@R_INIT CSEG UNIT64KP 251 251 252 252 ----- @@INIT DSEG BASEP 253 253 254 254 ----- @@DATA DSEG BASEP 255 255 256 256 ----- @@R_INIS CSEG UNIT64KP 257 257 258 258 ----- @@INIS DSEG SADDRP 259 259 260 260 ----- @@DATS DSEG SADDRP 261 261 262 262 ----- LDR_CNSL CSEG PAGE64KP 263 263 264 264 ----- @@RLINIT CSEG UNIT64KP 265 265 266 266 ----- @@INITL DSEG UNIT64KP 267 267 268 268 ----- @@DATAL DSEG UNIT64KP 269 269 270 270 ----- @@CALT CSEG CALLT0 271 271 272 272 ; Sub-Routines created by CC78K0R 273 273 274 274 ----- LDR_CODE CSEG BASE 275 275 00000 bs_F0064: 276 276 00000 8C05 mov a,[hl+5] ;[INF] 2, 1 277 277 00002 318E shrw ax,8 ;[INF] 2, 1 278 278 00004 RED0000 br !_FSL_Erase ;[INF] 3, 3 279 279 00007 es_F0064: 280 280 281 281 ----- LDR_CODE CSEG BASE 282 282 00007 bs_S0062: 283 283 00007 C7 push hl ;[INF] 1, 1 284 284 00008 364105 movw hl,#0541H ; 1345 ;[INF] 3, 1 285 285 0000B 7184 mov1 CY,[hl].0 ;[INF] 2, 1 286 286 0000D C6 pop hl ;[INF] 1, 1 287 287 0000E D7 ret ;[INF] 1, 6 288 288 0000F es_S0062: 289 289 290 290 ----- LDR_CODE CSEG BASE 291 291 0000F bs_F0063: 292 292 0000F 8C05 mov a,[hl+5] ;[INF] 2, 1 293 293 00011 318E shrw ax,8 ;[INF] 2, 1 294 294 00013 RFD0000 call !_FSL_IVerify ;[INF] 3, 3 295 295 00016 D2 cmp0 c ;[INF] 1, 1 296 296 00017 D7 ret ;[INF] 1, 6 297 297 00018 es_F0063: 298 298 299 299 ----- LDR_CODE CSEG BASE 300 300 00018 bs_F0061: 301 301 00018 RBD00 movw _@RTARG0,ax ;[INF] 2, 1 302 302 0001A 31FF sarw ax,15 ;[INF] 2, 1 303 303 0001C RBD00 movw _@RTARG2,ax ;[INF] 2, 1 304 304 0001E RDA00 movw bc,_@RTARG2 ;[INF] 2, 1 305 305 00020 RAD00 movw ax,_@RTARG0 ;[INF] 2, 1 306 306 00022 RED0000 br !_FSL_Write ;[INF] 3, 3 307 307 00025 es_F0061: 308 308 309 309 ----- LDR_CODE CSEG BASE 310 310 00025 bs_S0060: 311 311 00025 8C05 mov a,[hl+5] ;[INF] 2, 1 312 312 00027 318E shrw ax,8 ;[INF] 2, 1 313 313 00029 31AD shlw ax,10 ;[INF] 2, 1 314 314 0002B 12 movw bc,ax ;[INF] 1, 1 315 315 0002C 8C04 mov a,[hl+4] ;[INF] 2, 1 316 316 0002E 318E shrw ax,8 ;[INF] 2, 1 317 317 00030 318D shlw ax,8 ;[INF] 2, 1 318 318 00032 03 addw ax,bc ;[INF] 1, 1 319 319 00033 D7 ret ;[INF] 1, 6 320 320 00034 es_S0060: 321 321 322 322 ; *** Sub-Routine Information *** 323 323 ; 324 324 ; $SUB bs_S0060 325 325 ; CODE SIZE= 15 bytes 326 326 ; 327 327 ; $SUB bs_F0061 328 328 ; CODE SIZE= 13 bytes 329 329 ; 330 330 ; $SUB bs_S0062 331 331 ; CODE SIZE= 8 bytes 332 332 ; 333 333 ; $SUB bs_F0063 334 334 ; CODE SIZE= 9 bytes 335 335 ; 336 336 ; $SUB bs_F0064 337 337 ; CODE SIZE= 7 bytes 338 338 339 339 ; End of Sub-Routines 340 340 341 341 ; line 1 : /* ======================================================== 342 342 ; line 2 : 自己アップデータ 343 343 ; line 3 : ======================================================== */ 344 344 ; line 4 : #pragma SFR 345 345 ; line 5 : #pragma di 346 346 ; line 6 : #pragma ei 347 347 ; line 7 : #pragma nop 348 348 ; line 8 : #pragma stop 349 349 ; line 9 : #pragma halt 350 350 ; line 10 : 351 351 ; line 11 : 352 352 ; line 12 : #include "incs_loader.h" 353 353 ; line 13 : 354 354 ; line 14 : #include 355 355 ; line 15 : #include "fsl_user.h" 356 356 ; line 16 : #include "i2c_ctr.h" 357 357 ; line 17 : 358 358 ; line 18 : 359 359 ; line 19 : 360 360 ; line 20 : // ======================================================== 361 361 ; line 21 : const u8 fsl_fx_MHz_u08 = 8; 362 362 ; line 22 : const u8 fsl_low_voltage_u08 = 1; 363 363 ; line 23 : 364 364 ; line 24 : 365 365 ; line 25 : // 自己フラッシュパラメータ 366 366 ; line 26 : #define SAM_BLOCK_SIZE 1024 367 367 ; line 27 : #define SELF_UPDATE_BUFF_SIZE 256 368 368 ; line 28 : #define SELF_UPDATE_SPLIT_WRITE_NUM ( SAM_BLOCK_SIZE / SELF_U 369 369 ; PDATE_BUFF_SIZE ) 370 370 ; line 29 : #define SAM_WORD_SIZE 4 371 371 ; line 30 : 372 372 ; line 31 : // ↓ブロック番号(1ブロック= 373 373 ; 1kB) 374 374 ; line 32 : #define INACTIVE_BOOTSECT_TOP 4 375 375 ; line 33 : #define FIRM_TOP 8 376 376 ; line 34 : #define FIRM_SIZE 12 377 377 ; line 35 : #define UPDATE_BLOCK_LAST ( FIRM_TOP + FIRM_SIZE - 1 378 378 ; ) 379 379 ; line 36 : 380 380 ; line 37 : 381 381 ; line 38 : #ifdef _MCU_BSR_ 382 382 ; line 39 : 383 383 ; line 40 : 384 384 ; line 41 : #define ACKD ACKD1 385 385 ; line 42 : #define ACKE ACKE1 386 386 ; line 43 : #define COI COI1 387 387 ; line 44 : #define IICAEN IICA1EN 388 388 ; line 45 : #define IICAPR0 IICAPR10 389 389 ; line 46 : #define IICRSV IICRSV1 390 390 ; line 47 : #define IICA IICA1 391 391 ; line 48 : #define IICAIF IICAIF1 392 392 ; line 49 : #define IICAMK IICAMK1 393 393 ; line 50 : #define IICAPR1 IICAPR11 394 394 ; line 51 : #define IICCTL0 IICCTL01 395 395 ; line 52 : #define IICE IICE1 396 396 ; line 53 : #define IICF IICF1 397 397 ; line 54 : #define IICS IICS1 398 398 ; line 55 : #define IICWH IICWH1 399 399 ; line 56 : #define IICWL IICWL1 400 400 ; line 57 : #define LREL LREL1 401 401 ; line 58 : #define SPD SPD1 402 402 ; line 59 : #define SPIE SPIE1 403 403 ; line 60 : #define STCEN STCEN1 404 404 ; line 61 : #define STD STD1 405 405 ; line 62 : #define SVA SVA1 406 406 ; line 63 : #define WREL WREL1 407 407 ; line 64 : #define WTIM WTIM1 408 408 ; line 65 : #endif 409 409 ; line 66 : 410 410 ; line 67 : 411 411 ; line 68 : 412 412 ; line 69 : // ======================================================== 413 413 ; line 70 : static void FSL_Open( void ); 414 414 ; line 71 : static void FSL_Close( void ); 415 415 ; line 72 : err firm_restore( ); 416 416 ; line 73 : 417 417 ; line 74 : static err my_FSL_Init(); 418 418 ; line 75 : static err firm_duplicate( __far u8 * p_rom, u8 block_dest ); 419 419 ; line 76 : 420 420 ; line 77 : 421 421 ; line 78 : 422 422 ; line 79 : // ======================================================== 423 423 ; line 80 : extern u16 pool[]; 424 424 ; line 81 : 425 425 ; line 82 : 426 426 ; line 83 : // 0.D以降 新アップデータ向け 427 427 ; line 84 : #define N_MGC_L 0x1FF6 428 428 ; line 85 : #define N_MGC_T 0x4FF6 429 429 ; line 86 : 430 430 ; line 87 : 431 431 ; line 88 : 432 432 ; line 89 : /* ======================================================== 433 433 ; line 90 : I2Cで受信して、 434 434 ; line 91 : 書き込み、 435 435 ; line 92 : チェックOK → 新ファームに切り替えて再起動 436 436 ; line 93 :     NG → 旧(現)ファームに戻して再起動 437 437 ; line 94 : (この関数からは戻りません) 438 438 ; line 95 : ======================================================== */ 439 439 ; line 96 : err firm_update( ) 440 440 ; line 97 : { 441 441 442 442 ----- LDR_CODE CSEG BASE 443 443 00034 _firm_update: 444 444 $DGL 1,35 445 445 00034 C7 push hl ;[INF] 1, 1 446 446 00035 2006 subw sp,#06H ;[INF] 2, 1 447 447 00037 FBF8FF movw hl,sp ;[INF] 3, 1 448 448 0003A ??bf_firm_update: 449 449 ; line 98 : u8 target_block; 450 450 ; line 99 : u8 split_write_count; // ブロックへちまちま書き込むカウ 451 451 ; ンタ 452 452 ; line 100 : 453 453 ; line 101 : // 書き替え前準備 ///////////////////////////////////// 454 454 ; line 102 : my_FSL_Init(); 455 455 $DGL 0,6 456 456 0003A RFDD001 call !_my_FSL_Init ;[INF] 3, 3 457 457 ; line 103 : 458 458 ; line 104 : /* ファームのバックアップ 459 459 ; line 105 : 0x2000 - 0x4FFF を 460 460 ; line 106 : 0x5000 - 0x7FFF (ブロック 20 - 31) にコピー 461 461 ; line 107 : */ 462 462 ; line 108 : firm_duplicate( ( __far u8 * ) 0x2000, 463 463 ; line 109 : ( 0x5000 / 0x0400 ) ); 464 464 $DGL 0,13 465 465 0003D 301400 movw ax,#014H ; 20 ;[INF] 3, 1 466 466 00040 C1 push ax ;[INF] 1, 1 467 467 00041 300020 movw ax,#02000H ; 8192 ;[INF] 3, 1 468 468 00044 F7 clrw bc ;[INF] 1, 1 469 469 00045 RFD4801 call !_firm_duplicate ;[INF] 3, 3 470 470 00048 C0 pop ax ;[INF] 1, 1 471 471 ; line 110 : 472 472 ; line 111 : // 全ブロック削除 ///////////////////////////////////// 473 473 ; line 112 : // 電源断を判定するため、最初に全クラスタ消去する 474 474 ; line 113 : //(新ファームが書かれるところに残ってる、以前のファームのフ 475 475 ; ッタを消したい) 476 476 ; line 114 : for( target_block = INACTIVE_BOOTSECT_TOP; 477 477 $DGL 0,18 478 478 00049 CC0504 mov [hl+5],#04H ; target_block,4 ;[INF] 3, 1 479 479 0004C ?L0003: 480 480 ; line 115 : target_block <= UPDATE_BLOCK_LAST; 481 481 $DGL 0,19 482 482 0004C 8C05 mov a,[hl+5] ; target_block ;[INF] 2, 1 483 483 0004E 4C14 cmp a,#014H ; 20 ;[INF] 2, 1 484 484 00050 DE08 bnc $?L0004 ;[INF] 2, 4 485 485 ; line 116 : target_block += 1 ) 486 486 ; line 117 : { 487 487 00052 ??bb00_firm_update: 488 488 ; line 118 : FSL_Erase( target_block ); 489 489 $DGL 0,22 490 490 00052 RFD0000 call !bs_F0064 ;[INF] 3, 3 491 491 00055 ??eb00_firm_update: 492 492 ; line 119 : } 493 493 $DGL 0,23 494 494 00055 615905 inc [hl+5] ; target_block ;[INF] 3, 2 495 495 00058 EFF2 br $?L0003 ;[INF] 2, 3 496 496 0005A ?L0004: 497 497 ; line 120 : 498 498 ; line 121 : // 書き替え /////////////////////////////////////////// 499 499 ; line 122 : // ●ストップコンディションが来るまで続ける 500 500 ; line 123 : // ●終わったら、スタートアップルーチンに飛ぶ 501 501 ; line 124 : for( target_block = INACTIVE_BOOTSECT_TOP; 502 502 $DGL 0,28 503 503 0005A CC0504 mov [hl+5],#04H ; target_block,4 ;[INF] 3, 1 504 504 0005D ?L0006: 505 505 ; line 125 : target_block <= UPDATE_BLOCK_LAST; 506 506 $DGL 0,29 507 507 0005D 8C05 mov a,[hl+5] ; target_block ;[INF] 2, 1 508 508 0005F 4C14 cmp a,#014H ; 20 ;[INF] 2, 1 509 509 00061 DE6C bnc $?L0007 ;[INF] 2, 4 510 510 ; line 126 : target_block += 1 ) 511 511 ; line 127 : { 512 512 00063 ??bb01_firm_update: 513 513 ; line 128 : // 新ファーム領域削除 514 514 ; line 129 : FSL_Erase( target_block ); 515 515 $DGL 0,33 516 516 00063 RFD0000 call !bs_F0064 ;[INF] 3, 3 517 517 ; line 130 : 518 518 ; line 131 : // 分割書き込み 519 519 ; line 132 : for( split_write_count = 0; 520 520 $DGL 0,36 521 521 00066 CC0400 mov [hl+4],#00H ; split_write_count,0 ;[INF] 3, 1 522 522 00069 ?L0009: 523 523 ; line 133 : ( ( split_write_count < SELF_UPDATE_SPLIT_WRITE_NUM 524 524 ; ) 525 525 ; line 134 : && ( !SPD ) ); 526 526 $DGL 0,38 527 527 00069 8C04 mov a,[hl+4] ; split_write_count ;[INF] 2, 1 528 528 0006B 4C04 cmp a,#04H ; 4 ;[INF] 2, 1 529 529 0006D DE50 bnc $?L0010 ;[INF] 2, 4 530 530 0006F RFD0700 call !bs_S0062 ;[INF] 3, 3 531 531 00072 DC4B bc $?L0010 ;[INF] 2, 4 532 532 ; line 135 : split_write_count += 1 ) 533 533 ; line 136 : { 534 534 00074 ??bb02_firm_update: 535 535 ; line 137 : u8* p_buffer = pool; 536 536 $DGL 0,41 537 537 00074 R300000 movw ax,#loww (_pool) ;[INF] 3, 1 538 538 00077 BC02 movw [hl+2],ax ; p_buffer ;[INF] 2, 1 539 539 ; line 138 : u8 buffer_fill = 0; 540 540 $DGL 0,42 541 541 00079 CC0100 mov [hl+1],#00H ; buffer_fill,0 ;[INF] 3, 1 542 542 ; line 139 : 543 543 ; line 140 : WDT_Restart( ); 544 544 $DGL 0,44 545 545 0007C RFD0000 call !_WDT_Restart ;[INF] 3, 3 546 546 ; line 141 : 547 547 ; line 142 : // I2Cから書き込みデータをバッファにためる 548 548 ; line 143 : do 549 549 0007F ?L0012: 550 550 ; line 144 : { 551 551 0007F ??bb03_firm_update: 552 552 ; line 145 : while( !IICAIF && !SPD ){;} 553 553 $DGL 0,49 554 554 0007F 31B2D105 bt IF2H.3,$?L0016 ;[INF] 4, 5 555 555 00083 RFD0700 call !bs_S0062 ;[INF] 3, 3 556 556 00086 DEF7 bnc $?L0012 ;[INF] 2, 4 557 557 00088 ??bb04_firm_update: 558 558 00088 ??eb04_firm_update: 559 559 00088 ?L0016: 560 560 ; line 146 : IICAIF = 0; 561 561 $DGL 0,50 562 562 00088 713BD1 clr1 IF2H.3 ;[INF] 3, 2 563 563 ; line 147 : *p_buffer = IICA; 564 564 $DGL 0,51 565 565 0008B AC02 movw ax,[hl+2] ; p_buffer ;[INF] 2, 1 566 566 0008D 14 movw de,ax ;[INF] 1, 1 567 567 0008E 8F4005 mov a,!IICA1 ;[INF] 3, 1 568 568 00091 99 mov [de],a ;[INF] 1, 1 569 569 ; line 148 : WREL = 1; 570 570 $DGL 0,52 571 571 00092 71505005 set1 !IICCTL01.5 ;[INF] 4, 2 572 572 ; line 149 : p_buffer += 1; 573 573 $DGL 0,53 574 574 00096 617902 incw [hl+2] ; p_buffer ;[INF] 3, 2 575 575 ; line 150 : buffer_fill += 1; 576 576 $DGL 0,54 577 577 00099 615901 inc [hl+1] ; buffer_fill ;[INF] 3, 2 578 578 0009C ??eb03_firm_update: 579 579 ; line 151 : } 580 580 ; line 152 : while( ( buffer_fill != ( u8 ) SELF_UPDATE_BUFF_SIZE 581 581 ; ) && !SPD ); 582 582 $DGL 0,56 583 583 0009C 8C01 mov a,[hl+1] ; buffer_fill ;[INF] 2, 1 584 584 0009E D1 cmp0 a ;[INF] 1, 1 585 585 0009F DD05 bz $?L0017 ;[INF] 2, 4 586 586 000A1 RFD0700 call !bs_S0062 ;[INF] 3, 3 587 587 000A4 DED9 bnc $?L0012 ;[INF] 2, 4 588 588 000A6 ?L0017: 589 589 ; line 153 : 590 590 ; line 154 : // 書き込み 591 591 ; line 155 : // 最後だと、ゴミをパディングするが別にかまわない 592 592 ; line 156 : if( FSL_Write( ( fsl_u32 ) ( target_block * SAM_BLOC 593 593 ; K_SIZE 594 594 ; line 157 : + 595 595 ; line 158 : split_write_count * 596 596 ; line 159 : SELF_UPDATE_BUFF_SIZE 597 597 ; ), 598 598 ; line 160 : ( fsl_u08 ) ( SELF_UPDATE_BUFF_SIZE 599 599 ; / SAM_WORD_SIZE ) ) 600 600 ; line 161 : 601 601 ; line 162 : != FSL_OK ) 602 602 $DGL 0,66 603 603 000A6 304000 movw ax,#040H ; 64 ;[INF] 3, 1 604 604 000A9 C1 push ax ;[INF] 1, 1 605 605 000AA RFD2500 call !bs_S0060 ;[INF] 3, 3 606 606 000AD RFD1800 call !bs_F0061 ;[INF] 3, 3 607 607 000B0 C0 pop ax ;[INF] 1, 1 608 608 000B1 D2 cmp0 c ;[INF] 1, 1 609 609 000B2 DD06 bz $?L0018 ;[INF] 2, 4 610 610 ; line 163 : { 611 611 000B4 ??bb05_firm_update: 612 612 ; line 164 : // 書き込み後のチェックエラー 613 613 ; line 165 : // リブートののち、リストア 614 614 ; line 166 : // FSL_ForceReset(); // リセット 615 615 ; line 167 : FSL_SwapBootCluster( ); 616 616 $DGL 0,71 617 617 000B4 RFD0000 call !_FSL_SwapBootCluster ;[INF] 3, 3 618 618 ; line 168 : // FSL_Close( ); 619 619 ; line 169 : return ( ERR_ERR ); 620 620 $DGL 0,73 621 621 000B7 E7 onew bc ;[INF] 1, 1 622 622 000B8 EF59 br $?L0030 ;[INF] 2, 3 623 623 000BA ??eb05_firm_update: 624 624 ; line 170 : } 625 625 000BA ?L0018: 626 626 000BA ??eb02_firm_update: 627 627 ; line 171 : 628 628 ; line 172 : } 629 629 $DGL 0,76 630 630 000BA 615904 inc [hl+4] ; split_write_count ;[INF] 3, 2 631 631 000BD EFAA br $?L0009 ;[INF] 2, 3 632 632 000BF ?L0010: 633 633 ; line 173 : // 1ブロック書き込み完了。内部ベリファイを行う 634 634 ; line 174 : if( FSL_IVerify( target_block ) != FSL_OK ){ 635 635 $DGL 0,78 636 636 000BF RFD0F00 call !bs_F0063 ;[INF] 3, 3 637 637 000C2 61E8 skz ;[INF] 2, 1 638 638 000C4 ??bb06_firm_update: 639 639 ; line 175 : // todo 再度消去→書き込み ベリファイを繰り返すだけじ 640 640 ; ゃダメでした... 641 641 ; line 176 : NOP(); 642 642 $DGL 0,80 643 643 000C4 00 nop ;[INF] 1, 1 644 644 000C5 ??eb06_firm_update: 645 645 ; line 177 : } 646 646 000C5 ?L0020: 647 647 ; line 178 : 648 648 ; line 179 : if( SPD ) 649 649 $DGL 0,83 650 650 000C5 RFD0700 call !bs_S0062 ;[INF] 3, 3 651 651 000C8 DC05 bc $?L0007 ;[INF] 2, 4 652 652 ; line 180 : { 653 653 000CA ??bb07_firm_update: 654 654 ; line 181 : break; 655 655 000CA ??eb07_firm_update: 656 656 ; line 182 : } 657 657 000CA ??eb01_firm_update: 658 658 ; line 183 : } 659 659 $DGL 0,87 660 660 000CA 615905 inc [hl+5] ; target_block ;[INF] 3, 2 661 661 000CD EF8E br $?L0006 ;[INF] 2, 3 662 662 000CF ?L0007: 663 663 ; line 184 : 664 664 ; line 185 : LREL = 1; 665 665 $DGL 0,89 666 666 000CF 71605005 set1 !IICCTL01.6 ;[INF] 4, 2 667 667 ; line 186 : 668 668 ; line 187 : // 書き込んだファームのチェック // 669 669 ; line 188 : { 670 670 000D3 ??bb08_firm_update: 671 671 ; line 189 : u8 i; 672 672 ; line 190 : u8 comp = 0; 673 673 $DGL 0,94 674 674 000D3 CC0200 mov [hl+2],#00H ; comp,0 ;[INF] 3, 1 675 675 ; line 191 : 676 676 ; line 192 : // ローダーのマジックと、本文の末尾のマジックは同じか確認 677 677 ; line 193 : for( i = 0; i < sizeof( __TIME__ ); i++ ) 678 678 $DGL 0,97 679 679 000D6 CC0300 mov [hl+3],#00H ; i,0 ;[INF] 3, 1 680 680 000D9 ?L0024: 681 681 000D9 8C03 mov a,[hl+3] ; i ;[INF] 2, 1 682 682 000DB 4C09 cmp a,#09H ; 9 ;[INF] 2, 1 683 683 000DD DE24 bnc $?L0025 ;[INF] 2, 4 684 684 ; line 194 : { 685 685 000DF ??bb09_firm_update: 686 686 ; line 195 : comp += ( *( u8 * ) ( N_MGC_L + i ) == *( u8 * ) ( N 687 687 ; _MGC_T + i ) ) ? 0 : 1; 688 688 $DGL 0,99 689 689 000DF 8C03 mov a,[hl+3] ; i ;[INF] 2, 1 690 690 000E1 318E shrw ax,8 ;[INF] 2, 1 691 691 000E3 12 movw bc,ax ;[INF] 1, 1 692 692 000E4 49F61F mov a,8182[bc] ;[INF] 3, 1 693 693 000E7 72 mov c,a ;[INF] 1, 1 694 694 000E8 8C03 mov a,[hl+3] ; i ;[INF] 2, 1 695 695 000EA 318E shrw ax,8 ;[INF] 2, 1 696 696 000EC 04F64F addw ax,#04FF6H ; 20470 ;[INF] 3, 1 697 697 000EF 14 movw de,ax ;[INF] 1, 1 698 698 000F0 89 mov a,[de] ;[INF] 1, 1 699 699 000F1 6142 cmp c,a ;[INF] 2, 1 700 700 000F3 DF03 bnz $?L0027 ;[INF] 2, 4 701 701 000F5 F6 clrw ax ;[INF] 1, 1 702 702 000F6 EF01 br $?L0028 ;[INF] 2, 3 703 703 000F8 ?L0027: 704 704 000F8 E6 onew ax ;[INF] 1, 1 705 705 000F9 ?L0028: 706 706 000F9 60 mov a,x ;[INF] 1, 1 707 707 000FA 0E02 add a,[hl+2] ; comp ;[INF] 2, 1 708 708 000FC 9C02 mov [hl+2],a ; comp ;[INF] 2, 1 709 709 000FE ??eb09_firm_update: 710 710 ; line 196 : } 711 711 $DGL 0,100 712 712 000FE 615903 inc [hl+3] ; i ;[INF] 3, 2 713 713 00101 EFD6 br $?L0024 ;[INF] 2, 3 714 714 00103 ?L0025: 715 715 ; line 197 : if( comp == 0 ) 716 716 $DGL 0,101 717 717 00103 8C02 mov a,[hl+2] ; comp ;[INF] 2, 1 718 718 00105 D1 cmp0 a ;[INF] 1, 1 719 719 00106 DF08 bnz $?L0029 ;[INF] 2, 4 720 720 ; line 198 : { 721 721 00108 ??bb0A_firm_update: 722 722 ; line 199 : FSL_InvertBootFlag( ); 723 723 $DGL 0,103 724 724 00108 RFD0000 call !_FSL_InvertBootFlag ;[INF] 3, 3 725 725 ; line 200 : FSL_SwapBootCluster( ); // リセットせずに頭から。F 726 726 ; SL_Closeは不要 727 727 $DGL 0,104 728 728 0010B RFD0000 call !_FSL_SwapBootCluster ;[INF] 3, 3 729 729 0010E ??eb0A_firm_update: 730 730 ; line 201 : // FSL_ForceReset(); // リセット 731 731 ; line 202 : // FSL_SwapActiveBootCluster(); // ←スワップされてし 732 732 ; まうので、続けられず暴走! 733 733 ; line 203 : // 戻ってこない // 734 734 ; line 204 : } 735 735 $DGL 0,108 736 736 0010E EF03 br $?L0030 ;[INF] 2, 3 737 737 00110 ?L0029: 738 738 ; line 205 : else 739 739 ; line 206 : { 740 740 00110 ??bb0B_firm_update: 741 741 ; line 207 : // データエラー 742 742 ; line 208 : // リブートののち、リストア 743 743 ; line 209 : // FSL_ForceReset(); // リセット 744 744 ; line 210 : FSL_SwapBootCluster( ); 745 745 $DGL 0,114 746 746 00110 RFD0000 call !_FSL_SwapBootCluster ;[INF] 3, 3 747 747 00113 ??eb0B_firm_update: 748 748 ; line 211 : // FSL_Close( ); 749 749 ; line 212 : // 戻ってこない // 750 750 ; line 213 : } 751 751 00113 ?L0030: 752 752 00113 ??eb08_firm_update: 753 753 ; line 214 : } 754 754 ; line 215 : } 755 755 $DGL 0,119 756 756 00113 ??ef_firm_update: 757 757 00113 1006 addw sp,#06H ;[INF] 2, 1 758 758 00115 C6 pop hl ;[INF] 1, 1 759 759 00116 D7 ret ;[INF] 1, 6 760 760 00117 ??ee_firm_update: 761 761 ; line 216 : 762 762 ; line 217 : 763 763 ; line 218 : 764 764 ; line 219 : 765 765 ; line 220 : /* ======================================================== 766 766 ; line 221 :  ■ファームをバックアップ領域からリストアします。 767 767 ; line 222 :  チェック後、最後の最後でブートスワップするので、 768 768 ; line 223 :  ここではブートスワップは不要です。 769 769 ; line 224 : 770 770 ; line 225 : ======================================================== */ 771 771 ; line 226 : err firm_restore( ) 772 772 ; line 227 : { 773 773 00117 _firm_restore: 774 774 $DGL 1,99 775 775 00117 ??bf_firm_restore: 776 776 ; line 228 : my_FSL_Init(); 777 777 $DGL 0,2 778 778 00117 RFDD001 call !_my_FSL_Init ;[INF] 3, 3 779 779 ; line 229 : 780 780 ; line 230 : /* ファームのリストア 781 781 ; line 231 : 0x4800 - 0x7FFF (ブロック 18 - 27) から 782 782 ; line 232 : 0x2000 - 0x47FF (ブロック 8 - 17) へコピー 783 783 ; line 233 : */ 784 784 ; line 234 : firm_duplicate( ( __far u8 * ) 0x5000, 785 785 ; line 235 : FIRM_TOP ); 786 786 $DGL 0,9 787 787 0011A 300800 movw ax,#08H ; 8 ;[INF] 3, 1 788 788 0011D C1 push ax ;[INF] 1, 1 789 789 0011E 300050 movw ax,#05000H ; 20480 ;[INF] 3, 1 790 790 00121 F7 clrw bc ;[INF] 1, 1 791 791 00122 RFD4801 call !_firm_duplicate ;[INF] 3, 3 792 792 00125 C0 pop ax ;[INF] 1, 1 793 793 ; line 236 : 794 794 ; line 237 : // todo 795 795 ; line 238 : //  リストア失敗したら、LEDちかちかとかさせて、サービス送 796 796 ; りにしてもらう 797 797 ; line 239 : 798 798 ; line 240 : // リブート 799 799 ; line 241 : // スワップは不要です! 800 800 ; line 242 : FSL_SwapBootCluster(); 801 801 $DGL 0,16 802 802 00126 RFD0000 call !_FSL_SwapBootCluster ;[INF] 3, 3 803 803 ; line 243 : // FSL_ForceReset( ); 804 804 ; line 244 : return ( ERR_SUCCESS ); 805 805 $DGL 0,18 806 806 00129 F7 clrw bc ;[INF] 1, 1 807 807 ; line 245 : } 808 808 $DGL 0,19 809 809 0012A ??ef_firm_restore: 810 810 0012A D7 ret ;[INF] 1, 6 811 811 0012B ??ee_firm_restore: 812 812 ; line 246 : 813 813 ; line 247 : 814 814 ; line 248 : 815 815 ; line 249 : 816 816 ; line 250 : // ======================================================== 817 817 ; line 251 : static void FSL_Open( void ) 818 818 ; line 252 : { 819 819 0012B _FSL_Open: 820 820 $DGL 1,105 821 821 0012B ??bf_FSL_Open: 822 822 ; line 253 : /* save the configuration of the interrupt controller and se 823 823 ; t */ 824 824 ; line 254 : #ifdef FSL_INT_BACKUP 825 825 ; line 255 : fsl_MK0L_bak_u08 = MK0L; /* if (interrupt backup required 826 826 ; ) */ 827 827 ; line 256 : fsl_MK0H_bak_u08 = MK0H; /* { 828 828 ; */ 829 829 ; line 257 : fsl_MK1L_bak_u08 = MK1L; /* 830 830 ; */ 831 831 ; line 258 : fsl_MK1H_bak_u08 = MK1H; /* save interrupt control 832 832 ; ler */ 833 833 ; line 259 : fsl_MK2L_bak_u08 = MK2L; /* configuration 834 834 ; */ 835 835 ; line 260 : fsl_MK2H_bak_u08 = MK2H; /* 836 836 ; */ 837 837 ; line 261 : MK0L = FSL_MK0L_MASK; /* 838 838 ; */ 839 839 ; line 262 : MK0H = FSL_MK0H_MASK; /* 840 840 ; */ 841 841 ; line 263 : MK1L = FSL_MK1L_MASK; /* prepare interrupt cont 842 842 ; roller */ 843 843 ; line 264 : MK1H = FSL_MK1H_MASK; /* for selfprogramming 844 844 ; */ 845 845 ; line 265 : MK2L = FSL_MK2L_MASK; /* 846 846 ; */ 847 847 ; line 266 : MK2H = FSL_MK2H_MASK; /* } 848 848 ; */ 849 849 ; line 267 : #endif 850 850 ; line 268 : 851 851 ; line 269 : // 何か前準備? 852 852 ; line 270 : // todo DMAを止める 853 853 ; line 271 : while( DST1 ){;} 854 854 $DGL 0,20 855 855 0012B ?L0035: 856 856 0012B 3184BD02 bf DRC1.0,$?L0036 ;[INF] 4, 5 857 857 0012F ??bb00_FSL_Open: 858 858 0012F ??eb00_FSL_Open: 859 859 0012F EFFA br $?L0035 ;[INF] 2, 3 860 860 00131 ?L0036: 861 861 ; line 272 : DEN1 = 0; 862 862 $DGL 0,21 863 863 00131 717BBD clr1 DRC1.7 ;[INF] 3, 2 864 864 ; line 273 : 865 865 ; line 274 : MK0 = 0xFFFF; 866 866 $DGL 0,23 867 867 00134 CBE4FFFF movw MK0,#0FFFFH ; -1 ;[INF] 4, 1 868 868 ; line 275 : MK1 = 0xFFFF; 869 869 $DGL 0,24 870 870 00138 CBE6FFFF movw MK1,#0FFFFH ; -1 ;[INF] 4, 1 871 871 ; line 276 : MK2 = 0xFFFF; 872 872 $DGL 0,25 873 873 0013C CBD4FFFF movw MK2,#0FFFFH ; -1 ;[INF] 4, 1 874 874 ; line 277 : 875 875 ; line 278 : FSL_FLMD0_HIGH; // フラッシュ書き替え許可 876 876 $DGL 0,27 877 877 00140 ??bb01_FSL_Open: 878 878 00140 717ABE set1 BECTL.7 ;[INF] 3, 2 879 879 00143 ??eb01_FSL_Open: 880 880 ; line 279 : } 881 881 $DGL 0,28 882 882 00143 ??ef_FSL_Open: 883 883 00143 D7 ret ;[INF] 1, 6 884 884 00144 ??ee_FSL_Open: 885 885 ; line 280 : 886 886 ; line 281 : 887 887 ; line 282 : 888 888 ; line 283 : /*-------------------------------------------------------------- 889 889 ; --------------------------------*/ 890 890 ; line 284 : /* leave the "user room" and restore previous conditions 891 891 ; */ 892 892 ; line 285 : /*-------------------------------------------------------------- 893 893 ; --------------------------------*/ 894 894 ; line 286 : static void FSL_Close( void ) 895 895 ; line 287 : { 896 896 00144 _FSL_Close: 897 897 $DGL 1,119 898 898 00144 ??bf_FSL_Close: 899 899 ; line 288 : // 何か後始末? 900 900 ; line 289 : 901 901 ; line 290 : FSL_FLMD0_LOW; // フラッシュライトプロテクト 902 902 $DGL 0,4 903 903 00144 ??bb00_FSL_Close: 904 904 00144 717BBE clr1 BECTL.7 ;[INF] 3, 2 905 905 00147 ??eb00_FSL_Close: 906 906 ; line 291 : 907 907 ; line 292 : #ifdef FSL_INT_BACKUP 908 908 ; line 293 : MK0L = fsl_MK0L_bak_u08; /* do{ 909 909 ; */ 910 910 ; line 294 : MK0H = fsl_MK0H_bak_u08; /* restore interrupt cont 911 911 ; roller */ 912 912 ; line 295 : MK1L = fsl_MK1L_bak_u08; /* configuration 913 913 ; */ 914 914 ; line 296 : MK1H = fsl_MK1H_bak_u08; /* 915 915 ; */ 916 916 ; line 297 : MK2L = fsl_MK2L_bak_u08; /* 917 917 ; */ 918 918 ; line 298 : MK2H = fsl_MK2H_bak_u08; /* } 919 919 ; */ 920 920 ; line 299 : #endif 921 921 ; line 300 : } 922 922 $DGL 0,14 923 923 00147 ??ef_FSL_Close: 924 924 00147 D7 ret ;[INF] 1, 6 925 925 00148 ??ee_FSL_Close: 926 926 ; line 301 : 927 927 ; line 302 : 928 928 ; line 303 : 929 929 ; line 304 : /* ======================================================== 930 930 ; line 305 :  マイコン内でファームをコピーします。 931 931 ; line 306 : __far u8 * p_rom コピー元の先頭アドレス 932 932 ; line 307 : block_dest コピー先の先頭ブロック 933 933 ; line 308 : 934 934 ; line 309 : コピー先に書けるようにmy_FSL_Initをあらかじめ実行する必要があり 935 935 ; ます。 936 936 ; line 310 : ======================================================== */ 937 937 ; line 311 : static err firm_duplicate( __far u8 * p_rom, 938 938 ; line 312 : u8 block_dest ) 939 939 ; line 313 : { 940 940 00148 _firm_duplicate: 941 941 $DGL 1,129 942 942 00148 C7 push hl ;[INF] 1, 1 943 943 00149 C3 push bc ;[INF] 1, 1 944 944 0014A C1 push ax ;[INF] 1, 1 945 945 0014B 2006 subw sp,#06H ;[INF] 2, 1 946 946 0014D FBF8FF movw hl,sp ;[INF] 3, 1 947 947 00150 ??bf_firm_duplicate: 948 948 ; line 314 : u8 target_block; 949 949 ; line 315 : u8 split_write_count; // ブロックへちまちま書き込むカウ 950 950 ; ンタ 951 951 ; line 316 : 952 952 ; line 317 : // 書き込み先ブロックの数だけ繰り返す 953 953 ; line 318 : for( target_block = block_dest; 954 954 $DGL 0,6 955 955 00150 8C10 mov a,[hl+16] ; block_dest ;[INF] 2, 1 956 956 00152 9C05 mov [hl+5],a ; target_block ;[INF] 2, 1 957 957 00154 ?L0041: 958 958 ; line 319 : target_block < block_dest + FIRM_SIZE; 959 959 $DGL 0,7 960 960 00154 8C10 mov a,[hl+16] ; block_dest ;[INF] 2, 1 961 961 00156 318E shrw ax,8 ;[INF] 2, 1 962 962 00158 040C00 addw ax,#0CH ; 12 ;[INF] 3, 1 963 963 0015B 12 movw bc,ax ;[INF] 1, 1 964 964 0015C 8C05 mov a,[hl+5] ; target_block ;[INF] 2, 1 965 965 0015E 318E shrw ax,8 ;[INF] 2, 1 966 966 00160 RBD00 movw _@RTARG0,ax ;[INF] 2, 1 967 967 00162 13 movw ax,bc ;[INF] 1, 1 968 968 00163 RFD0000 call !@@iscmp ;[INF] 3, 3 969 969 00166 DE63 bnc $?L0042 ;[INF] 2, 4 970 970 ; line 320 : target_block += 1 ) 971 971 ; line 321 : { 972 972 00168 ??bb00_firm_duplicate: 973 973 ; line 322 : WDT_Restart( ); 974 974 $DGL 0,10 975 975 00168 RFD0000 call !_WDT_Restart ;[INF] 3, 3 976 976 ; line 323 : // ブロック消去 977 977 ; line 324 : while( FSL_BlankCheck( target_block ) != FSL_OK ) 978 978 $DGL 0,12 979 979 0016B ?L0044: 980 980 0016B 8C05 mov a,[hl+5] ; target_block ;[INF] 2, 1 981 981 0016D 318E shrw ax,8 ;[INF] 2, 1 982 982 0016F RFD0000 call !_FSL_BlankCheck ;[INF] 3, 3 983 983 00172 D2 cmp0 c ;[INF] 1, 1 984 984 00173 DD05 bz $?L0045 ;[INF] 2, 4 985 985 ; line 325 : { 986 986 00175 ??bb01_firm_duplicate: 987 987 ; line 326 : FSL_Erase( target_block ); 988 988 $DGL 0,14 989 989 00175 RFD0000 call !bs_F0064 ;[INF] 3, 3 990 990 00178 ??eb01_firm_duplicate: 991 991 ; line 327 : } 992 992 $DGL 0,15 993 993 00178 EFF1 br $?L0044 ;[INF] 2, 3 994 994 0017A ?L0045: 995 995 ; line 328 : 996 996 ; line 329 : // 分割書き込み分繰り返す 997 997 ; line 330 : for( split_write_count = 0; 998 998 $DGL 0,18 999 999 0017A CC0400 mov [hl+4],#00H ; split_write_count,0 ;[INF] 3, 1 1000 1000 0017D ?L0046: 1001 1001 ; line 331 : split_write_count < SELF_UPDATE_SPLIT_WRITE_NUM; 1002 1002 $DGL 0,19 1003 1003 0017D 8C04 mov a,[hl+4] ; split_write_count ;[INF] 2, 1 1004 1004 0017F 4C04 cmp a,#04H ; 4 ;[INF] 2, 1 1005 1005 00181 DE3E bnc $?L0047 ;[INF] 2, 4 1006 1006 ; line 332 : split_write_count += 1 ) 1007 1007 ; line 333 : { 1008 1008 00183 ??bb02_firm_duplicate: 1009 1009 ; line 334 : u8 buffer_fill; 1010 1010 ; line 335 : u8* p_buff; 1011 1011 ; line 336 : 1012 1012 ; line 337 : // 書き込みデータをバッファにためる 1013 1013 ; line 338 : buffer_fill = 0; 1014 1014 $DGL 0,26 1015 1015 00183 CC0300 mov [hl+3],#00H ; buffer_fill,0 ;[INF] 3, 1 1016 1016 ; line 339 : p_buff = pool; 1017 1017 $DGL 0,27 1018 1018 00186 R300000 movw ax,#loww (_pool) ;[INF] 3, 1 1019 1019 00189 BB movw [hl],ax ; p_buff ;[INF] 1, 1 1020 1020 ; line 340 : do 1021 1021 0018A ?L0049: 1022 1022 ; line 341 : { 1023 1023 0018A ??bb03_firm_duplicate: 1024 1024 ; line 342 : *p_buff = *p_rom; 1025 1025 $DGL 0,30 1026 1026 0018A AC06 movw ax,[hl+6] ; p_rom ;[INF] 2, 1 1027 1027 0018C 14 movw de,ax ;[INF] 1, 1 1028 1028 0018D 8C08 mov a,[hl+8] ; p_rom ;[INF] 2, 1 1029 1029 0018F 9EFD mov ES,a ;[INF] 2, 1 1030 1030 00191 1189 mov a,ES:[de] ;[INF] 2, 2 1031 1031 00193 72 mov c,a ;[INF] 1, 1 1032 1032 00194 AB movw ax,[hl] ; p_buff ;[INF] 1, 1 1033 1033 00195 14 movw de,ax ;[INF] 1, 1 1034 1034 00196 62 mov a,c ;[INF] 1, 1 1035 1035 00197 99 mov [de],a ;[INF] 1, 1 1036 1036 ; line 343 : p_rom += 1; 1037 1037 $DGL 0,31 1038 1038 00198 AC06 movw ax,[hl+6] ; p_rom ;[INF] 2, 1 1039 1039 0019A A1 incw ax ;[INF] 1, 1 1040 1040 0019B BC06 movw [hl+6],ax ; p_rom ;[INF] 2, 1 1041 1041 ; line 344 : p_buff += 1; 1042 1042 $DGL 0,32 1043 1043 0019D 617900 incw [hl+0] ; p_buff ;[INF] 3, 2 1044 1044 ; line 345 : buffer_fill +=1; 1045 1045 $DGL 0,33 1046 1046 001A0 615903 inc [hl+3] ; buffer_fill ;[INF] 3, 2 1047 1047 001A3 ??eb03_firm_duplicate: 1048 1048 ; line 346 : } 1049 1049 ; line 347 : while( buffer_fill != ( u8 ) SELF_UPDATE_BUFF_SIZE ) 1050 1050 ; ; 1051 1051 $DGL 0,35 1052 1052 001A3 8C03 mov a,[hl+3] ; buffer_fill ;[INF] 2, 1 1053 1053 001A5 D1 cmp0 a ;[INF] 1, 1 1054 1054 001A6 DFE2 bnz $?L0049 ;[INF] 2, 4 1055 1055 ; line 348 : 1056 1056 ; line 349 : // 書き込み 1057 1057 ; line 350 : if( FSL_Write( ( fsl_u32 ) ( target_block * SAM_BLOC 1058 1058 ; K_SIZE 1059 1059 ; line 351 : + 1060 1060 ; line 352 : split_write_count * 1061 1061 ; line 353 : SELF_UPDATE_BUFF_SIZE 1062 1062 ; ), 1063 1063 ; line 354 : ( fsl_u08 ) ( SELF_UPDATE_BUFF_SIZE 1064 1064 ; / SAM_WORD_SIZE ) ) 1065 1065 ; line 355 : != FSL_OK ) 1066 1066 $DGL 0,43 1067 1067 001A8 304000 movw ax,#040H ; 64 ;[INF] 3, 1 1068 1068 001AB C1 push ax ;[INF] 1, 1 1069 1069 001AC RFD2500 call !bs_S0060 ;[INF] 3, 3 1070 1070 001AF RFD1800 call !bs_F0061 ;[INF] 3, 3 1071 1071 001B2 C0 pop ax ;[INF] 1, 1 1072 1072 001B3 D2 cmp0 c ;[INF] 1, 1 1073 1073 001B4 DD06 bz $?L0052 ;[INF] 2, 4 1074 1074 ; line 356 : { 1075 1075 001B6 ??bb04_firm_duplicate: 1076 1076 ; line 357 : FSL_Close( ); 1077 1077 $DGL 0,45 1078 1078 001B6 RFD4401 call !_FSL_Close ;[INF] 3, 3 1079 1079 ; line 358 : return ( ERR_ERR ); 1080 1080 $DGL 0,46 1081 1081 001B9 E7 onew bc ;[INF] 1, 1 1082 1082 001BA EF10 br $?L0040 ;[INF] 2, 3 1083 1083 001BC ??eb04_firm_duplicate: 1084 1084 ; line 359 : } 1085 1085 001BC ?L0052: 1086 1086 001BC ??eb02_firm_duplicate: 1087 1087 ; line 360 : } 1088 1088 $DGL 0,48 1089 1089 001BC 615904 inc [hl+4] ; split_write_count ;[INF] 3, 2 1090 1090 001BF EFBC br $?L0046 ;[INF] 2, 3 1091 1091 001C1 ?L0047: 1092 1092 ; line 361 : 1093 1093 ; line 362 : // 1ブロック書き込み完了。内部電圧チェックを行う 1094 1094 ; line 363 : while( FSL_IVerify( target_block ) != FSL_OK ){ 1095 1095 $DGL 0,51 1096 1096 001C1 RFD0F00 call !bs_F0063 ;[INF] 3, 3 1097 1097 001C4 DFFB bnz $?L0047 ;[INF] 2, 4 1098 1098 001C6 ??bb05_firm_duplicate: 1099 1099 ; line 364 : // todo 1100 1100 ; line 365 : ; 1101 1101 001C6 ??eb05_firm_duplicate: 1102 1102 ; line 366 : } 1103 1103 001C6 ??eb00_firm_duplicate: 1104 1104 ; line 367 : } 1105 1105 $DGL 0,55 1106 1106 001C6 615905 inc [hl+5] ; target_block ;[INF] 3, 2 1107 1107 001C9 EF89 br $?L0041 ;[INF] 2, 3 1108 1108 001CB ?L0042: 1109 1109 ; line 368 : return( ERR_SUCCESS ); 1110 1110 $DGL 0,56 1111 1111 001CB F7 clrw bc ;[INF] 1, 1 1112 1112 ; line 369 : 1113 1113 ; line 370 : } 1114 1114 001CC ?L0040: 1115 1115 $DGL 0,58 1116 1116 001CC ??ef_firm_duplicate: 1117 1117 001CC 100A addw sp,#0AH ;[INF] 2, 1 1118 1118 001CE C6 pop hl ;[INF] 1, 1 1119 1119 001CF D7 ret ;[INF] 1, 6 1120 1120 001D0 ??ee_firm_duplicate: 1121 1121 ; line 371 : 1122 1122 ; line 372 : 1123 1123 ; line 373 : 1124 1124 ; line 374 : /* ======================================================== 1125 1125 ; line 375 : ======================================================== */ 1126 1126 ; line 376 : static err my_FSL_Init() 1127 1127 ; line 377 : { 1128 1128 001D0 _my_FSL_Init: 1129 1129 $DGL 1,168 1130 1130 001D0 ??bf_my_FSL_Init: 1131 1131 ; line 378 : RTCE = 0; 1132 1132 $DGL 0,2 1133 1133 001D0 717B9D clr1 RTCC0.7 ;[INF] 3, 2 1134 1134 ; line 379 : 1135 1135 ; line 380 : // 書き替え前準備 // 1136 1136 ; line 381 : DI( ); 1137 1137 $DGL 0,5 1138 1138 001D3 717BFA di ;[INF] 3, 4 1139 1139 ; line 382 : FSL_Open( ); // 割り込み禁止など 1140 1140 $DGL 0,6 1141 1141 001D6 RFD2B01 call !_FSL_Open ;[INF] 3, 3 1142 1142 ; line 383 : 1143 1143 ; line 384 : FSL_Init( pool ); // ライブラリ初期化。割り込み中断考慮 1144 1144 ; せず 1145 1145 $DGL 0,8 1146 1146 001D9 R300000 movw ax,#loww (_pool) ;[INF] 3, 1 1147 1147 001DC RFD0000 call !_FSL_Init ;[INF] 3, 3 1148 1148 ; line 385 : FSL_ModeCheck( ); // ライトプロテクトチェック。失敗するこ 1149 1149 ; とを考慮せず 1150 1150 $DGL 0,9 1151 1151 001DF RFD0000 call !_FSL_ModeCheck ;[INF] 3, 3 1152 1152 ; line 386 : 1153 1153 ; line 387 : return( ERR_SUCCESS ); 1154 1154 $DGL 0,11 1155 1155 001E2 F7 clrw bc ;[INF] 1, 1 1156 1156 ; line 388 : } 1157 1157 $DGL 0,12 1158 1158 001E3 ??ef_my_FSL_Init: 1159 1159 001E3 D7 ret ;[INF] 1, 6 1160 1160 001E4 ??ee_my_FSL_Init: 1161 1161 ; line 389 : 1162 1162 ; line 390 : 1163 1163 ; line 391 : task_status_immed tski_mcu_reset() 1164 1164 ; line 392 : { 1165 1165 001E4 _tski_mcu_reset: 1166 1166 $DGL 1,174 1167 1167 001E4 ??bf_tski_mcu_reset: 1168 1168 ; line 393 : // 普通に再起動 1169 1169 ; line 394 : my_FSL_Init(); 1170 1170 $DGL 0,3 1171 1171 001E4 RFDD001 call !_my_FSL_Init ;[INF] 3, 3 1172 1172 ; line 395 : FSL_Close( ); 1173 1173 $DGL 0,4 1174 1174 001E7 RFD4401 call !_FSL_Close ;[INF] 3, 3 1175 1175 ; line 396 : // FSL_SwapBootCluster(); 1176 1176 ; line 397 : FSL_ForceReset(); // リセット 1177 1177 $DGL 0,6 1178 1178 001EA RFD0000 call !_FSL_ForceReset ;[INF] 3, 3 1179 1179 ; line 398 : 1180 1180 ; line 399 : // 保険? // 1181 1181 ; line 400 : WDTE = 0xAA; // WDTで再起動(テスト向け) 1182 1182 $DGL 0,9 1183 1183 001ED CEABAA mov WDTE,#0AAH ; 170 ;[INF] 3, 1 1184 1184 ; line 401 : return( ERR_SUCCESS ); // no reach 1185 1185 $DGL 0,10 1186 1186 001F0 F7 clrw bc ;[INF] 1, 1 1187 1187 ; line 402 : } 1188 1188 $DGL 0,11 1189 1189 001F1 ??ef_tski_mcu_reset: 1190 1190 001F1 D7 ret ;[INF] 1, 6 1191 1191 001F2 ??ee_tski_mcu_reset: 1192 1192 1193 1193 ----- LDR_CODL CSEG 1194 1194 1195 1195 ----- @@BASE CSEG BASE 1196 1196 END 1197 1197 1198 1198 1199 1199 ; *** Code Information *** 1200 1200 ; 1201 1201 ; $FILE C:\78k_data\yav-mcu-basara\branches\0.10(fix)\self_flash.c 1202 1202 ; 1203 1203 ; $FUNC firm_update(97) 1204 1204 ; bc=(void) 1205 1205 ; CODE SIZE= 227 bytes, CLOCK_SIZE= 287 clocks, STACK_SIZE= 16 bytes 1206 1206 ; 1207 1207 ; $CALL my_FSL_Init(102) 1208 1208 ; bc=(void) 1209 1209 ; 1210 1210 ; $CALL firm_duplicate(109) 1211 1211 ; bc=(pointer:ax,bc, int:[sp+4]) 1212 1212 ; 1213 1213 ; $CALL FSL_Erase(118) 1214 1214 ; bc=(unsigned int:ax) 1215 1215 ; 1216 1216 ; $CALL FSL_Erase(129) 1217 1217 ; bc=(unsigned int:ax) 1218 1218 ; 1219 1219 ; $CALL WDT_Restart(140) 1220 1220 ; void=(void) 1221 1221 ; 1222 1222 ; $CALL FSL_Write(162) 1223 1223 ; bc=(unsigned long:ax,bc, int:[sp+4]) 1224 1224 ; 1225 1225 ; $CALL FSL_SwapBootCluster(167) 1226 1226 ; void=(void) 1227 1227 ; 1228 1228 ; $CALL FSL_IVerify(174) 1229 1229 ; bc=(unsigned int:ax) 1230 1230 ; 1231 1231 ; $CALL FSL_InvertBootFlag(199) 1232 1232 ; bc=(void) 1233 1233 ; 1234 1234 ; $CALL FSL_SwapBootCluster(200) 1235 1235 ; void=(void) 1236 1236 ; 1237 1237 ; $CALL FSL_SwapBootCluster(210) 1238 1238 ; void=(void) 1239 1239 ; 1240 1240 ; $FUNC firm_restore(227) 1241 1241 ; bc=(void) 1242 1242 ; CODE SIZE= 20 bytes, CLOCK_SIZE= 21 clocks, STACK_SIZE= 6 bytes 1243 1243 ; 1244 1244 ; $CALL my_FSL_Init(228) 1245 1245 ; bc=(void) 1246 1246 ; 1247 1247 ; $CALL firm_duplicate(235) 1248 1248 ; bc=(pointer:ax,bc, int:[sp+4]) 1249 1249 ; 1250 1250 ; $CALL FSL_SwapBootCluster(242) 1251 1251 ; void=(void) 1252 1252 ; 1253 1253 ; $FUNC FSL_Open(252) 1254 1254 ; void=(void) 1255 1255 ; CODE SIZE= 25 bytes, CLOCK_SIZE= 21 clocks, STACK_SIZE= 0 bytes 1256 1256 ; 1257 1257 ; $FUNC FSL_Close(287) 1258 1258 ; void=(void) 1259 1259 ; CODE SIZE= 4 bytes, CLOCK_SIZE= 8 clocks, STACK_SIZE= 0 bytes 1260 1260 ; 1261 1261 ; $FUNC firm_duplicate(313) 1262 1262 ; bc=(pointer p_rom:ax,bc, unsigned char block_dest:[sp+4]) 1263 1263 ; CODE SIZE= 136 bytes, CLOCK_SIZE= 161 clocks, STACK_SIZE= 20 bytes 1264 1264 ; 1265 1265 ; $CALL WDT_Restart(322) 1266 1266 ; void=(void) 1267 1267 ; 1268 1268 ; $CALL FSL_BlankCheck(324) 1269 1269 ; bc=(unsigned int:ax) 1270 1270 ; 1271 1271 ; $CALL FSL_Erase(326) 1272 1272 ; bc=(unsigned int:ax) 1273 1273 ; 1274 1274 ; $CALL FSL_Write(355) 1275 1275 ; bc=(unsigned long:ax,bc, int:[sp+4]) 1276 1276 ; 1277 1277 ; $CALL FSL_Close(357) 1278 1278 ; void=(void) 1279 1279 ; 1280 1280 ; $CALL FSL_IVerify(363) 1281 1281 ; bc=(unsigned int:ax) 1282 1282 ; 1283 1283 ; $FUNC my_FSL_Init(377) 1284 1284 ; bc=(void) 1285 1285 ; CODE SIZE= 20 bytes, CLOCK_SIZE= 23 clocks, STACK_SIZE= 4 bytes 1286 1286 ; 1287 1287 ; $CALL FSL_Open(382) 1288 1288 ; void=(void) 1289 1289 ; 1290 1290 ; $CALL FSL_Init(384) 1291 1291 ; bc=(pointer:ax) 1292 1292 ; 1293 1293 ; $CALL FSL_ModeCheck(385) 1294 1294 ; bc=(void) 1295 1295 ; 1296 1296 ; $FUNC tski_mcu_reset(392) 1297 1297 ; bc=(void) 1298 1298 ; CODE SIZE= 14 bytes, CLOCK_SIZE= 17 clocks, STACK_SIZE= 4 bytes 1299 1299 ; 1300 1300 ; $CALL my_FSL_Init(394) 1301 1301 ; bc=(void) 1302 1302 ; 1303 1303 ; $CALL FSL_Close(395) 1304 1304 ; void=(void) 1305 1305 ; 1306 1306 ; $CALL FSL_ForceReset(397) 1307 1307 ; void=(void) 1308 1308 1309 1309 ; Target chip : uPD79F0104 1310 1310 ; Device file : E1.00b Segment informations: ADRS LEN NAME 00000 00000H.0 @@BITS 00000 00002H @@CNST 00000 00000H @@R_INIT 00000 00000H @@INIT 00000 00000H @@DATA 00000 00000H @@R_INIS 00000 00000H @@INIS 00000 00000H @@DATS 00000 00000H LDR_CNSL 00000 00000H @@RLINIT 00000 00000H @@INITL 00000 00000H @@DATAL 00000 00000H @@CALT 00000 001F2H LDR_CODE 00000 00000H LDR_CODL 00000 00000H @@BASE Target chip : uPD79F0104 Device file : E1.00b Assembly complete, 0 error(s) and 0 warning(s) found. ( 0)