#63896 - Querdopleen - Sat Dec 17, 2005 11:09 am
.GLOBL ASM_DecompressRLData
.ARM
.SECTION .iwram
.ALIGN
.TEXT
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@
@ R0 = Source, R1 = Destination, R2 = Byte counter
@
@ R3 = St?tuszbyte, R4 = Adatbyte, R5 = Ugr?s c?m?hez haszn?lt regiszter
@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.macro PUTCOMPRESSEDBYTE byteszam, index
STRB R4,[R1,#\index]
.if \byteszam-1
PUTCOMPRESSEDBYTE "(\byteszam-1)","(\index-1)"
.endif
.endm
.macro PUTUNCOMPRESSEDBYTE byteszam, index
LDRSB R4,[R0,#\index]
STRB R4,[R1,#\index]
.if \byteszam-1
PUTUNCOMPRESSEDBYTE "(\byteszam-1)","(\index-1)"
.endif
.endm
ASM_DecompressRLData:
STMFD SP!,{R4-R5}
DRLDCIKLUS:
LDRSB R3,[R0],#1
AND R3,R3,#0xff @ előjel kiterjesztett ?s ?gy a felső 3 byte-ot t?r?lni kell, hogy j? sz?ml?l? legyen
TST R3,#0x80
BEQ UNCOMPRESSED
@ Compressed
LDRSB R4,[R0],#1 @ Sokszorozand? byte
SUB R3,R3,#0x7d @ Bytesz?m
RSB R5,R3,#130 @ 130-Bytesz?m
MOV R5,R5,LSL#2 @ (130-Bytesz?m)*4 - Ez m?r a c?mz?shez j?
ADD R15,R15,R5
MOV R2,R2 @ Dummy, kell a j? c?mz?shez
PUTCOMPRESSEDBYTE 65,129
PUTCOMPRESSEDBYTE 65,64
ADD R1,R1,R3
SUBS R2,R2,R3
BNE DRLDCIKLUS
BAL END
UNCOMPRESSED:
ADD R3,R3,#1 @ Bytesz?m
RSB R5,R3,#128 @ 128-Bytesz?m
MOV R5,R5,LSL#3 @ (128-Bytesz?m)*8 - Ez m?r a c?mz?shez j?
ADD R15,R15,R5
MOV R2,R2 @ Dummy, kell a j? c?mz?shez
PUTUNCOMPRESSEDBYTE 64,127
PUTUNCOMPRESSEDBYTE 64,63
ADD R0,R0,R3
ADD R1,R1,R3
SUBS R2,R2,R3
BNE DRLDCIKLUS
@ BAL END @ R?csorog a v?g?re
END:
LDMFD SP!,{R4-R5}
BX LR
.ARM
.SECTION .iwram
.ALIGN
.TEXT
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@
@ R0 = Source, R1 = Destination, R2 = Byte counter
@
@ R3 = St?tuszbyte, R4 = Adatbyte, R5 = Ugr?s c?m?hez haszn?lt regiszter
@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.macro PUTCOMPRESSEDBYTE byteszam, index
STRB R4,[R1,#\index]
.if \byteszam-1
PUTCOMPRESSEDBYTE "(\byteszam-1)","(\index-1)"
.endif
.endm
.macro PUTUNCOMPRESSEDBYTE byteszam, index
LDRSB R4,[R0,#\index]
STRB R4,[R1,#\index]
.if \byteszam-1
PUTUNCOMPRESSEDBYTE "(\byteszam-1)","(\index-1)"
.endif
.endm
ASM_DecompressRLData:
STMFD SP!,{R4-R5}
DRLDCIKLUS:
LDRSB R3,[R0],#1
AND R3,R3,#0xff @ előjel kiterjesztett ?s ?gy a felső 3 byte-ot t?r?lni kell, hogy j? sz?ml?l? legyen
TST R3,#0x80
BEQ UNCOMPRESSED
@ Compressed
LDRSB R4,[R0],#1 @ Sokszorozand? byte
SUB R3,R3,#0x7d @ Bytesz?m
RSB R5,R3,#130 @ 130-Bytesz?m
MOV R5,R5,LSL#2 @ (130-Bytesz?m)*4 - Ez m?r a c?mz?shez j?
ADD R15,R15,R5
MOV R2,R2 @ Dummy, kell a j? c?mz?shez
PUTCOMPRESSEDBYTE 65,129
PUTCOMPRESSEDBYTE 65,64
ADD R1,R1,R3
SUBS R2,R2,R3
BNE DRLDCIKLUS
BAL END
UNCOMPRESSED:
ADD R3,R3,#1 @ Bytesz?m
RSB R5,R3,#128 @ 128-Bytesz?m
MOV R5,R5,LSL#3 @ (128-Bytesz?m)*8 - Ez m?r a c?mz?shez j?
ADD R15,R15,R5
MOV R2,R2 @ Dummy, kell a j? c?mz?shez
PUTUNCOMPRESSEDBYTE 64,127
PUTUNCOMPRESSEDBYTE 64,63
ADD R0,R0,R3
ADD R1,R1,R3
SUBS R2,R2,R3
BNE DRLDCIKLUS
@ BAL END @ R?csorog a v?g?re
END:
LDMFD SP!,{R4-R5}
BX LR