📄 avrsms_zip.s90
字号:
//////////////////////////////////////////////////////////////////////////////
// /
// 24/Sep/2005 02:15:51 /
// IAR Atmel AVR C/C++ Compiler V4.10A/W32, Evaluation Version /
// Copyright 1996-2005 IAR Systems. All rights reserved. /
// /
// Source file = C:\Documents and Settings\vemund\Desktop\AVRGSM\Files\ /
// AVRSMS_zip.c /
// Command line = --cpu=m128 -ms -o "C:\Documents and /
// Settings\vemund\Desktop\AVRGSM\Debug\Obj\" -lCN /
// "C:\Documents and Settings\vemund\Desktop\AVRGSM\Debug /
// \List\" -lA "C:\Documents and /
// Settings\vemund\Desktop\AVRGSM\Debug\List\" -y /
// --initializers_in_flash -z3 --no_cse --no_inline /
// --no_code_motion --no_cross_call --no_clustering /
// --no_tbaa --debug -DENABLE_BIT_DEFINITIONS -e -I /
// D:\Programs\iar\avr\INC\ -I /
// D:\Programs\iar\avr\INC\CLIB\ --eeprom_size 4096 /
// "C:\Documents and Settings\vemund\Desktop\AVRGSM\Files /
// \AVRSMS_zip.c" /
// List file = C:\Documents and Settings\vemund\Desktop\AVRGSM\Debug\ /
// List\AVRSMS_zip.s90 /
// /
// /
//////////////////////////////////////////////////////////////////////////////
NAME AVRSMS_zip
RTMODEL "__64bit_doubles", "disabled"
RTMODEL "__cpu", "3"
RTMODEL "__cpu_name", "ATmega128"
RTMODEL "__enhanced_core", "enabled"
RTMODEL "__has_elpm", "true"
RTMODEL "__memory_model", "2"
RTMODEL "__no_rampd", "enabled"
RTMODEL "__rt_version", "3"
RSEG CSTACK:DATA:NOROOT(0)
RSEG RSTACK:DATA:NOROOT(0)
EXTERN ?C_SHL_L01
EXTERN ?EPILOGUE_B13_L09
EXTERN ?EPILOGUE_B4_L09
EXTERN ?EPILOGUE_B6_L09
EXTERN ?PROLOGUE13_L09
EXTERN ?PROLOGUE4_L09
EXTERN ?PROLOGUE6_L09
EXTERN ?Register_R10_is_cg_reg
EXTERN ?Register_R11_is_cg_reg
EXTERN ?Register_R12_is_cg_reg
EXTERN ?Register_R4_is_cg_reg
EXTERN ?Register_R5_is_cg_reg
EXTERN ?Register_R6_is_cg_reg
EXTERN ?Register_R7_is_cg_reg
EXTERN ?Register_R8_is_cg_reg
EXTERN ?Register_R9_is_cg_reg
EXTERN ?SS_SHR_L02
EXTERN ?S_EC_MUL_L02
PUBLIC ZIP_atoi
FUNCTION ZIP_atoi,0203H
LOCFRAME CSTACK, 4, STACK
LOCFRAME RSTACK, 4, STACK
PUBLIC ZIP_compress
FUNCTION ZIP_compress,0203H
LOCFRAME CSTACK, 6, STACK
LOCFRAME RSTACK, 4, STACK
PUBLIC ZIP_decompress
FUNCTION ZIP_decompress,021203H
LOCFRAME CSTACK, 13, STACK
LOCFRAME RSTACK, 4, STACK
PUBLIC ZIP_htoi
FUNCTION ZIP_htoi,0203H
LOCFRAME RSTACK, 2, STACK
PUBLIC ZIP_isNmbr
FUNCTION ZIP_isNmbr,0203H
LOCFRAME RSTACK, 2, STACK
PUBLIC ZIP_itoh
FUNCTION ZIP_itoh,0203H
LOCFRAME RSTACK, 2, STACK
PUBWEAK __?EEARH
PUBWEAK __?EEARL
PUBWEAK __?EECR
PUBWEAK __?EEDR
PUBLIC hex_lookup
PUBLIC mask
PUBLIC power
CFI Names cfiNames0
CFI StackFrame CFA_Y Y DATA
CFI StackFrame CFA_SP SP DATA
CFI VirtualResource ?RetPad:1, ?RetHigh:8, ?RetLow:8, ?Ret:17
CFI Resource R0:8, R1:8, R2:8, R3:8, R4:8, R5:8, R6:8, R7:8, R8:8, R9:8
CFI Resource R10:8, R11:8, R12:8, R13:8, R14:8, R15:8, R16:8, R17:8
CFI Resource R18:8, R19:8, R20:8, R21:8, R22:8, R23:8, R24:8, R25:8
CFI Resource R26:8, R27:8, R28:8, R29:8, R30:8, R31:8
CFI Resource ?RetHighByteMask:8, SP:16, SPH:8, SPL:8, Y:16
CFI ResourceParts ?Ret ?RetHigh, ?RetLow, ?RetPad
CFI ResourceParts SP SPH, SPL
CFI ResourceParts Y R29, R28
CFI EndNames cfiNames0
CFI Common cfiCommon0 Using cfiNames0
CFI CodeAlign 1
CFI DataAlign 1
CFI ReturnAddress ?Ret CODE
CFI CFA_Y Y+0
CFI CFA_SP SP+2
CFI ?RetPad 0
CFI ?RetHigh and(load(1, DATA, sub(CFA_SP, 1)), ?RetHighByteMask)
CFI ?RetLow Frame(CFA_SP, 0)
CFI ?Ret Concat
CFI R0 Undefined
CFI R1 Undefined
CFI R2 Undefined
CFI R3 Undefined
CFI R4 SameValue
CFI R5 SameValue
CFI R6 SameValue
CFI R7 SameValue
CFI R8 SameValue
CFI R9 SameValue
CFI R10 SameValue
CFI R11 SameValue
CFI R12 SameValue
CFI R13 SameValue
CFI R14 SameValue
CFI R15 SameValue
CFI R16 Undefined
CFI R17 Undefined
CFI R18 Undefined
CFI R19 Undefined
CFI R20 Undefined
CFI R21 Undefined
CFI R22 Undefined
CFI R23 Undefined
CFI R24 SameValue
CFI R25 SameValue
CFI R26 SameValue
CFI R27 SameValue
CFI R28 Undefined
CFI R29 Undefined
CFI R30 Undefined
CFI R31 Undefined
CFI ?RetHighByteMask SameValue
CFI SPH Undefined
CFI SPL Undefined
CFI EndCommon cfiCommon0
// C:\Documents and Settings\vemund\Desktop\AVRGSM\Files\AVRSMS_zip.c
// 1 /*! \file ********************************************************************
// 2 *
// 3 * Atmel Corporation
// 4 *
// 5 * - File : AVRSMS_zip.c
// 6 * - Compiler : IAR EWAAVR 4.10A
// 7 *
// 8 * - Support mail : avr@atmel.com
// 9 *
// 10 * - Supported devices : The example is written for ATmega169
// 11 *
// 12 *
// 13 * - AppNote : AVR323 - Interfacing Cellphones
// 14 *
// 15 * - Description : Example of how to use AVR Butterfly as Mobilephone controller
// 16 *
// 17 * $Revision: 1.1 $
// 18 * $Date: Tuesday, November 08, 2005 12:26:20 UTC $
// 19 *****************************************************************************/
// 20 #include"AVRSMS_zip.h"
// 21
// 22
// 23 //Flash constant
RSEG NEAR_F:CODE:NOROOT(0)
// 24 const unsigned char __flash hex_lookup[] = hex_nmbr; //!< Lookup table -> int 2 hex
hex_lookup:
DB "0123456789ABCDEF"
RSEG NEAR_F:CODE:NOROOT(0)
// 25 const unsigned char __flash mask[7] = {1,3,7,15,31,63,127}; //!< Lookup table -> mask
mask:
DB 1, 3, 7, 15, 31, 63, 127
RSEG NEAR_F:CODE:NOROOT(0)
// 26 const unsigned char __flash power[7] = {128,64,32,16,8,4,2}; //!< Lookup table -> 2^( 7 - i )
power:
DB 128, 64, 32, 16, 8, 4, 2
// 27
// 28
RSEG CODE:CODE:NOROOT(1)
// 29 int ZIP_compress( unsigned char *in, unsigned char *discarded, unsigned char ret[] )
ZIP_compress:
CFI Block cfiBlock0 Using cfiCommon0
CFI Function ZIP_compress
// 30 {
CALL ?PROLOGUE6_L09
CFI R5 Frame(CFA_Y, -1)
CFI R4 Frame(CFA_Y, -2)
CFI R27 Frame(CFA_Y, -3)
CFI R26 Frame(CFA_Y, -4)
CFI R25 Frame(CFA_Y, -5)
CFI R24 Frame(CFA_Y, -6)
CFI CFA_Y Y+6
REQUIRE ?Register_R4_is_cg_reg
REQUIRE ?Register_R5_is_cg_reg
MOVW R23:R22, R17:R16
MOVW R5:R4, R19:R18
MOVW R27:R26, R21:R20
// 31 //Local variables
// 32 int i,ii,iii;
// 33 unsigned char encode_c, now_c, next_c;
// 34
// 35 //Initialization
// 36 *discarded = 0;
LDI R16, 0
MOVW R31:R30, R5:R4
ST Z, R16
// 37
// 38 for( i = ii = iii = 0; in[i] != '\0' && ( i < MESSAGE_LENGTH ); ) //Run through whole string
LDI R16, 0
LDI R17, 0
MOVW R3:R2, R17:R16
MOVW R25:R24, R17:R16
MOVW R19:R18, R17:R16
RJMP ??ZIP_compress_0
// 39 {
// 40 now_c = in[i++]; //This char
// 41 next_c = in[i]; //Next potentially '\0'
// 42
// 43 //Last char?
// 44 if( next_c == '\0' )
// 45 {
// 46 next_c = 0;
// 47 }
// 48
// 49
// 50 encode_c = (now_c >> ii)+ (mask[ii] & next_c)*power[ii];
// 51 ret[iii++] = hex_lookup[(encode_c>>4)&0x0F]; //Insert first hex part
// 52 ret[iii++] = hex_lookup[(encode_c&0x0F)]; //Insert last hex part
// 53
// 54 if( ii == 6 ) //We have read a chunk of 7 chars, the next one will be discarded
// 55 {
// 56 ii=0;
??ZIP_compress_1:
LDI R24, 0
LDI R25, 0
// 57 i++;
SUBI R18, 255
SBCI R19, 255
// 58 (*discarded)++;
MOVW R31:R30, R5:R4
LD R16, Z
INC R16
ST Z, R16
// 59 }
??ZIP_compress_0:
MOVW R31:R30, R23:R22
ADD R30, R18
ADC R31, R19
LD R16, Z
TST R16
BRNE $+2+2
RJMP ??ZIP_compress_2
CPI R18, 80
LDI R16, 0
CPC R19, R16
BRLT $+2+2
RJMP ??ZIP_compress_2
MOVW R31:R30, R23:R22
ADD R30, R18
ADC R31, R19
LD R16, Z
SUBI R18, 255
SBCI R19, 255
MOVW R31:R30, R23:R22
ADD R30, R18
ADC R31, R19
LD R21, Z
TST R21
BRNE ??ZIP_compress_3
LDI R21, 0
??ZIP_compress_3:
LDI R17, 0
MOV R20, R24
CALL ?SS_SHR_L02
LDI R30, LOW(mask)
LDI R31, (mask) >> 8
ADD R30, R24
ADC R31, R25
LPM R20, Z
AND R20, R21
LDI R30, LOW(power)
LDI R31, (power) >> 8
ADD R30, R24
ADC R31, R25
LPM R17, Z
MUL R20, R17
ADD R0, R16
LDI R30, LOW(hex_lookup)
LDI R31, (hex_lookup) >> 8
MOV R16, R0
SWAP R16
ANDI R16, 0x0F
LDI R17, 0
ADD R30, R16
ADC R31, R17
LPM R16, Z
MOVW R31:R30, R27:R26
ADD R30, R2
ADC R31, R3
ST Z, R16
LDI R16, 1
ADD R2, R16
LDI R16, 0
ADC R3, R16
LDI R30, LOW(hex_lookup)
LDI R31, (hex_lookup) >> 8
MOV R16, R0
LDI R17, 0
ANDI R16, 0x0F
ANDI R17, 0x00
ADD R30, R16
ADC R31, R17
LPM R16, Z
MOVW R31:R30, R27:R26
ADD R30, R2
ADC R31, R3
ST Z, R16
LDI R16, 1
ADD R2, R16
LDI R16, 0
ADC R3, R16
CPI R24, 6
LDI R16, 0
CPC R25, R16
BRNE $+2+2
RJMP ??ZIP_compress_1
// 60
// 61 else
// 62 {
// 63 ii++;
ADIW R25:R24, 1
RJMP ??ZIP_compress_0
// 64 }
// 65 }
// 66
// 67 ret[iii] = '\0';
??ZIP_compress_2:
LDI R16, 0
ADD R26, R2
ADC R27, R3
ST X, R16
// 68
// 69 return i;
MOVW R17:R16, R19:R18
LDI R30, 6
JMP ?EPILOGUE_B6_L09
CFI EndBlock cfiBlock0
// 70 }//end ZIP_compress
// 71
// 72
RSEG CODE:CODE:NOROOT(1)
// 73 int ZIP_decompress( unsigned char *compressed, unsigned char *decompressed )
ZIP_decompress:
CFI Block cfiBlock1 Using cfiCommon0
CFI Function ZIP_decompress
// 74 {
FUNCALL ZIP_decompress, ZIP_htoi
LOCFRAME CSTACK, 13, STACK
LOCFRAME RSTACK, 2, STACK
FUNCALL ZIP_decompress, ZIP_htoi
LOCFRAME CSTACK, 13, STACK
LOCFRAME RSTACK, 2, STACK
CALL ?PROLOGUE13_L09
CFI R12 Frame(CFA_Y, -1)
CFI R11 Frame(CFA_Y, -2)
CFI R10 Frame(CFA_Y, -3)
CFI R9 Frame(CFA_Y, -4)
CFI R8 Frame(CFA_Y, -5)
CFI R7 Frame(CFA_Y, -6)
CFI R6 Frame(CFA_Y, -7)
CFI R5 Frame(CFA_Y, -8)
CFI R4 Frame(CFA_Y, -9)
CFI R27 Frame(CFA_Y, -10)
CFI R26 Frame(CFA_Y, -11)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -