home *** CD-ROM | disk | FTP | other *** search
- ;**************************************************************
- ;
- ; $mulaw.asm
- ;
- ; staff
- ;
- ; 06-25-88
- ;
- ; (C) Texas Instruments Inc., 1992
- ;
- ; Refer to the file 'license.txt' included with this
- ; this package for usage and license information.
- ;
- ;**************************************************************
- Example 26. u-law compression
- ;
- ;==============================================================================
- ; SUBROUTINE MUCMPR
- ;
- ;
- ; ARGUMENT ASSIGNMENTS:
- ; argument | function
- ; ---------+-----------------------
- ; R0 | number to be converted
- ;
- ; REGISTERS USED AS INPUT: R0
- ; REGISTERS MODIFIED: R0, R1, R2, SP
- ; REGISTER CONTAINING RESULT: R0
- ;
- ; NOTE: Since the stack pointer SP is used in the compression routine
- ; MUCMPR, make sure to inititalize it in the calling program.
- ;
- ;
- ; CYCLES: 20 WORDS: 17
- ;=============================================================================
- ;
- .global MUCMPR
- ;
- MUCMPR LDI R0,R1 ; Save sign of number
- ABSI R0,R0
- CMPI 1FDEH,R0 ; If R0>0x1FDE,
- LDIGT 1FDEH,R0 ; saturate the result
- ADDI 33,R0 ; Add bias
-
- FLOAT R0 ; Normalize: (seg+5)0WXYZx...x
- MPYF 0.03125,R0 ; Adjust segment number by 2^-5
- LSH 1,R0 ; (seg)WXYZx...x
- PUSHF R0
- POP R0 ; Treat number as integer
- LSH -20,R0 ; Right-justify
-
- LDI 0,R2
- LDI R1,R1 ; If number is negative,
- LDILT 80H,R2 ; set sign bit
- ADDI R2,R0 ; R0 = compressed number
- NOT R0 ; Reverse all bits for transmission
- RETS
-
-
-
-
- Example 27. u-law expansion
- ;
- ;==============================================================================
- ; SUBROUTINE MUXPND
- ;
- ;
- ; ARGUMENT ASSIGNMENTS:
- ; argument | function
- ; ---------+-----------------------
- ; R0 | number to be converted
- ;
- ; REGISTERS USED AS INPUT: R0
- ; REGISTERS MODIFIED: R0, R1, R2, SP
- ; REGISTER CONTAINING RESULT: R0
- ;
- ;
- ; CYCLES: 20 (worst case) WORDS: 14
- ;=============================================================================
- ;
- .global MUXPND
- ;
- MUXPND NOT R0,R0 ; Complement bits
- LDI R0,R1
- AND 0FH,R1 ; Isolate quantization bin
- LSH 1,R1
- ADDI 33,R1 ; Add implied 1 and rounding bit
- ; to introduce 1xxxx1
- LDI R0,R2 ; Store for sign bit
- LSH -4,R0
- AND 7,R0 ; Isolate segment code
- LSH3 R0,R1,R0 ; Shift and put result in R0
- SUBI 33,R0 ; Subtract bias
- TSTB 80H,R2 ; Test sign bit
- RETSZ
- NEGI R0 ; Negate if a negative number
- RETS
-