?? dp_shmap.c
字號:
/* * PCM decoding stuff? * * Copyright (c) 2000 Richard J.M. Close * * Can be distributed under GPL */#include "dp_shmap.h"// 568 version.unsigned short pack_KQ_bits (unsigned short num_bits, unsigned char arg2, unsigned char* buff){ unsigned short var_12; unsigned char* ptrKBuff; unsigned char bit_ctr; // ebx in places. unsigned int ebp; unsigned char edi; // OK I know edi is not really 8 bits, but that's how it's used. edi = arg2; ptrKBuff = buff; var_12 = num_bits; // cx bit_ctr = lo_bit_ctr - 8; ebp = 0; if (bit_ctr == 0) goto loc_1559f; // No bits? if (var_12 < 8) { //goto loc_15556; lo_demap_data = lo_demap_data | (arg2 << bit_ctr); lo_bit_ctr = bit_ctr + var_12; lo_demap_data = (lo_demap_data << (8 - lo_bit_ctr)) & 0xff; lo_demap_data = (unsigned char)(lo_demap_data >> (8 - lo_bit_ctr)); return 0; } //loc_15556: *ptrKBuff = lo_demap_data | ((arg2 <<(lo_bit_ctr)) & 0xff); // byte ptrKBuff++; ebp = 1; var_12 = var_12 - 8; edi = arg2 >> 8; // shrl %cl,%edi goto loc_1559f; // looploc_15590: *ptrKBuff = edi & 0xff; ptrKBuff++; ebp++; edi = edi >> 8; var_12 = var_12 - 8;loc_1559f: if (var_12 > 7) goto loc_15590; lo_bit_ctr = var_12; if (var_12 == 0) goto loc_155e0; lo_demap_data = (edi << (8 - var_12)) & 0xff; lo_demap_data = lo_demap_data >> (8 - var_12); goto loc_155e7;loc_155e0: lo_demap_data = 0;loc_155e7: return (ebp & 0xff);}// Being brave here, using 568 version. 535 version differs slightly!// Initialise VPCM decoding process.void dp_init_vpcm_decoder(void){ unsigned char al; unsigned int ecx; old_K_bytes_num = 0; // Clear first 6 bytes of arrays. for (ecx=0; ecx <=5; ecx++) { stored_K_bytes[ecx] = 0; J1[ecx] = 0; } al = cpcpt_value[0xb38]; vpcm_rx_K_size = al + VpcmRate + 14; num_sign_bits = 6 - al; vpcmModulus[0] = 1; // 32 bits! // What is Vpcm_M_Level[0] really set to? Vpcm_M_Level[0] = 0; for (ecx=1; ecx <=5; ecx++) Vpcm_M_Level[ecx] = Vpcm_M_Level[ecx - 1] * vpcmModulus[ecx - 1]; lo_demap_data = 0; lo_bit_ctr = 0; scramLong = 0x1b2; descramLong = 0x1b2;}// Being brave again, using 568 version. 535 version differs slightly!void dp_vpcm_decoder(void){ unsigned int eax, ebx, edi; unsigned char* ptrDescramBuff; edi = 0; if (io_pdm_rx_rptr == io_pdm_rx_wptr) return; //goto 156efloop1: // 156c3: dp_sh_buffer[edi] = *io_pdm_rx_rptr; edi++; io_pdm_rx_rptr = io_pdm_rx_rptr + 1; if (io_pdm_rx_rptr >= io_pdm_rx_eptr) io_pdm_rx_rptr = io_pdm_rx_sptr; //ecx = io_pdm_rx_rptr; if (io_pdm_rx_rptr != io_pdm_rx_wptr) goto loop1;//156ef if (edi == 0) return; edi = dp_demod_cnv(dp_sh_buffer, edi, dp_desc_buffer); ebx = edi / 2; // Descramble the words. ptrDescramBuff = dp_desc_buffer; // Array of unsigned short.loop2: //15717 eax = *(unsigned short*)ptrDescramBuff; *(unsigned short*)ptrDescramBuff = descramword_pcm((unsigned short)eax); ptrDescramBuff++; ptrDescramBuff++; ebx--; if (ebx != 0) goto loop2; if (edi != 1) { unsigned char rawByte = *ptrDescramBuff; *ptrDescramBuff = descrambyte_pcm(rawByte); } io_pdm_background(dp_desc_buffer, edi);}// 535 version, but 568 looks the same, just harder to follow!// Needs tidying up and checking for errors.// The arg buff1 appears to be the source byte array.unsigned short dp_demod_cnv(unsigned char* buff1, unsigned short arg2, unsigned char* buff2){ unsigned short var_4; unsigned char* K_bytes_ptr; unsigned char* buff1_ptr; unsigned char aByte; int loopCnt; unsigned int eax; // arg_0 = dword ptr 8 // arg_4 = dword ptr 0Ch // arg_8 = dword ptr 10h // var_4 = dword ptr -4 var_4 = 0; //esi = 0xFFFF; // -1 if (old_K_bytes_num == 0) goto loc_35860; //157c7 if (old_K_bytes_num >= 6) goto loc_3583A; //157a2 buff1_ptr = buff1; K_bytes_ptr = (unsigned char*)(stored_K_bytes + old_K_bytes_num); loopCnt = (6 - old_K_bytes_num);// Loop, transfers some bytes from buff1 to stored_K_bytes.loc_3582C: aByte = *buff1_ptr; arg2--; *K_bytes_ptr = aByte; buff1_ptr++; K_bytes_ptr++; loopCnt--; if (loopCnt > 0) goto loc_3582C; goto loc_3583D;loc_3583A: buff1_ptr = buff1; loc_3583D: aByte = vpcm_RxSymbolBitProc(stored_K_bytes); var_4 = pack_vpcm_bits(aByte, buff2); buff2 = buff2 + var_4; goto loc_35863;loc_35860: buff1_ptr = buff1;loc_35863: old_K_bytes_num = arg2 % 6; // remainder goes in edx // 535 and 568 differ in implementation here, // 535 version. loopCnt = (int)(arg2 / 6); //568 version, at 157db: /*{ unsigned int local_var; // Believe it or not this actually works out the same // as the 535 version! local_var = arg2 * 5; local_var = local_var + (local_var * 16); local_var = local_var + (local_var * 256); local_var = (arg2 + (local_var * 2)) / 65536; loopCnt = local_var / 4; }*/ if (loopCnt == 0) goto loc_358AE; // was ecxloc_3588B: // Loop aByte = vpcm_RxSymbolBitProc(buff1_ptr); eax = pack_vpcm_bits(aByte, buff2); buff1_ptr = buff1_ptr + 6; var_4 = var_4 + eax; buff2 = buff2 + eax; loopCnt--; if (loopCnt != 0) goto loc_3588B;loc_358AE: //ecx = old_K_bytes_num; if (old_K_bytes_num <= 0) return var_4; K_bytes_ptr = stored_K_bytes; loopCnt = old_K_bytes_num;loc_358C2: // Loop aByte = *buff1_ptr; buff1_ptr++; *K_bytes_ptr = aByte; K_bytes_ptr++; loopCnt--; if (loopCnt > 0) goto loc_358C2; //loc_358CB: return var_4;}// 568 version.unsigned short pack_vpcm_bits(unsigned char arg1 , unsigned char* Kbuff){ unsigned short bytesProcessed; // Guess at meaning! unsigned char* ptrKbuff; unsigned char num_bits; // 1586f: 8b 5c 24 14 movl 0x14(%esp,1),%ebx // Kbuff // 15874: 0f b6 44 24 14 movzbl 0x14(%esp,1),%eax // arg1 bytesProcessed = pack_KQ_bits (num_sign_bits, arg1, Kbuff); ptrKbuff = Kbuff + bytesProcessed; if (vpcm_rx_K_size <= 0x1f) num_bits = vpcm_rx_K_size; else num_bits = 0x20; bytesProcessed = bytesProcessed + pack_KQ_bits(num_bits, vpcm_D_low_bits, ptrKbuff); ptrKbuff = Kbuff + bytesProcessed; num_bits = vpcm_rx_K_size - num_bits; if (num_bits == 0) return bytesProcessed; bytesProcessed = bytesProcessed + pack_KQ_bits(num_bits, vpcm_D_high_bits, ptrKbuff); return bytesProcessed;}unsigned char vpcm_RxSymbolBitProc(unsigned char* KBuff){ printf("vpcm_RxSymbolBitProc(%p): Not yet implemented!\n", KBuff); return 0;/* 568 version.000158f4 <vpcm_RxSymbolBitProc>: 158f4: 83 ec 48 subl $0x48,%esp 158f7: 55 pushl %ebp 158f8: 57 pushl %edi 158f9: 56 pushl %esi 158fa: 53 pushl %ebx 158fb: c6 44 24 2f 00 movb $0x0,0x2f(%esp,1) 15900: 8b 4c 24 5c movl 0x5c(%esp,1),%ecx 15904: 89 4c 24 28 movl %ecx,0x28(%esp,1) 15908: 8d 5c 24 30 leal 0x30(%esp,1),%ebx 1590c: 89 5c 24 24 movl %ebx,0x24(%esp,1) 15910: 89 df movl %ebx,%edi 15912: be 1c 43 01 00 movl .rodata + $0x1431c,%esi 15917: fc cld 15918: b9 06 00 00 00 movl $0x6,%ecx 1591d: f3 a5 repz movsl %ds:(%esi),%es:(%edi) 1591f: 66 c7 44 24 1e movw $0x0,0x1e(%esp,1) 15924: 00 00 15926: 31 f6 xorl %esi,%esi 15928: bf 00 00 00 00 movl vpcmModulus,%edi 1592d: 8d 76 00 leal 0x0(%esi),%esi 15930: 0f b7 54 24 1e movzwl 0x1e(%esp,1),%edx 15935: 8b 5c 24 5c movl 0x5c(%esp,1),%ebx 15939: 8a 03 movb (%ebx),%al 1593b: 24 7f andb $0x7f,%al 1593d: 25 ff 00 00 00 andl $0xff,%eax 15942: 0f af 04 97 imull (%edi,%edx,4),%eax 15946: 01 c6 addl %eax,%esi 15948: 43 incl %ebx 15949: 89 5c 24 5c movl %ebx,0x5c(%esp,1) 1594d: 66 ff 44 24 1e incw 0x1e(%esp,1) 15952: 66 83 7c 24 1e cmpw $0x3,0x1e(%esp,1) 15957: 03 15958: 76 d6 jbe 15930 <vpcm_RxSymbolBitProc+0x3c> 1595a: 8a 03 movb (%ebx),%al 1595c: 24 7f andb $0x7f,%al 1595e: 25 ff 00 00 00 andl $0xff,%eax 15963: 50 pushl %eax 15964: 43 incl %ebx 15965: 89 5c 24 60 movl %ebx,0x60(%esp,1) 15969: ff 35 10 00 00 pushl (unsigned int)(vpcmModulus + 0x10) 1596f: e8 24 02 00 00 call 15b98 <longLong_Multiply> 15974: 89 c7 movl %eax,%edi 15976: 89 d5 movl %edx,%ebp 15978: 0f b7 05 08 00 movzwl 0x8,%eax 1597d: 00 00 1597b: R_386_32 Vpcm_M_Level 1597f: 8b 4c 24 64 movl 0x64(%esp,1),%ecx 15983: 8a 11 movb (%ecx),%dl 15985: 80 e2 7f andb $0x7f,%dl 15988: 0f b6 d2 movzbl %dl,%edx 1598b: 0f af c2 imull %edx,%eax 1598e: 50 pushl %eax 1598f: ff 35 10 00 00 pushl (unsigned int)(vpcmModulus + 0x10) 15995: e8 fe 01 00 00 call 15b98 <longLong_Multiply> 1599a: 89 44 24 24 movl %eax,0x24(%esp,1) 1599e: 89 54 24 28 movl %edx,0x28(%esp,1) 159a2: 89 f0 movl %esi,%eax 159a4: 31 d2 xorl %edx,%edx 159a6: 52 pushl %edx 159a7: 50 pushl %eax 159a8: 8b 4c 24 2c movl 0x2c(%esp,1),%ecx 159ac: 8b 5c 24 30 movl 0x30(%esp,1),%ebx 159b0: 53 pushl %ebx 159b1: 51 pushl %ecx 159b2: 55 pushl %ebp 159b3: 57 pushl %edi 159b4: e8 eb 01 00 00 call 15ba4 <longLong_Add> 159b9: 66 c7 44 24 46 movw $0x0,0x46(%esp,1) 159be: 00 00 159c0: 83 c4 28 addl $0x28,%esp 159c3: 8d 5c 24 50 leal 0x50(%esp,1),%ebx 159c7: 89 5c 24 20 movl %ebx,0x20(%esp,1) 159cb: 89 da movl %ebx,%edx 159cd: 8d 76 00 leal 0x0(%esi),%esi 159d0: 8b 4c 24 28 movl 0x28(%esp,1),%ecx 159d4: 8a 01 movb (%ecx),%al 159d6: 24 80 andb $0x80,%al 159d8: 41 incl %ecx 159d9: 89 4c 24 28 movl %ecx,0x28(%esp,1) 159dd: 84 c0 testb %al,%al 159df: 74 0f je 159f0 <vpcm_RxSymbolBitProc+0xfc> 159e1: 0f b7 44 24 1e movzwl 0x1e(%esp,1),%eax 159e6: c6 04 10 01 movb $0x1,(%eax,%edx,1) 159ea: eb 0d jmp 159f9 <vpcm_RxSymbolBitProc+0x105> 159ec: 8d 74 26 00 leal 0x0(%esi,1),%esi 159f0: 0f b7 44 24 1e movzwl 0x1e(%esp,1),%eax 159f5: c6 04 10 00 movb $0x0,(%eax,%edx,1) 159f9: 66 ff 44 24 1e incw 0x1e(%esp,1) 159fe: 66 83 7c 24 1e cmpw $0x5,0x1e(%esp,1) 15a03: 05 15a04: 76 ca jbe 159d0 <vpcm_RxSymbolBitProc+0xdc> 15a06: 0f b6 05 00 00 movzbl num_sign_bits,%eax 15a0d: 83 f8 05 cmpl $0x5,%eax 15a10: 74 51 je 15a63 <vpcm_RxSymbolBitProc+0x16f> 15a12: 83 f8 06 cmpl $0x6,%eax 15a15: 0f 85 00 01 00 jne 15b1b <vpcm_RxSymbolBitProc+0x227> 15a1a: 00 15a1b: 66 c7 44 24 1e movw $0x5,0x1e(%esp,1) 15a20: 05 00 15a22: 8b 54 24 20 movl 0x20(%esp,1),%edx 15a26: 0f b7 44 24 1e movzwl 0x1e(%esp,1),%eax 15a2b: 8a 1c 10 movb (%eax,%edx,1),%bl 15a2e: 32 5c 02 ff xorb 0xffffffff(%edx,%eax,1),%bl 15a32: 88 d8 movb %bl,%al 15a34: 08 44 24 2f orb %al,0x2f(%esp,1) 15a38: c0 64 24 2f 01 shlb $0x1,0x2f(%esp,1) 15a3d: 66 ff 4c 24 1e decw 0x1e(%esp,1) 15a42: 75 e2 jne 15a26 <vpcm_RxSymbolBitProc+0x132> 15a44: 8b 4c 24 20 movl 0x20(%esp,1),%ecx 15a48: 8a 01 movb (%ecx),%al 15a4a: 32 05 05 00 00 xorb 0x5,%al 15a4f: 00 15a4c: R_386_32 _$J1 15a50: 08 44 24 2f orb %al,0x2f(%esp,1) 15a54: 8a 44 24 55 movb 0x55(%esp,1),%al 15a58: 88 05 05 00 00 movb %al,0x5 15a5d: 00 15a5a: R_386_32 _$J1 15a5e: e9 b8 00 00 00 jmp 15b1b <vpcm_RxSymbolBitProc+0x227> 15a63: 0f b6 05 00 00 movzbl 0x0,%eax 15a68: 00 00 15a66: R_386_32 _$J1 15a6a: 0f b6 54 24 50 movzbl 0x50(%esp,1),%edx 15a6f: 8d 04 42 leal (%edx,%eax,2),%eax 15a72: 8d 04 40 leal (%eax,%eax,2),%eax 15a75: 8b 5c 24 24 movl 0x24(%esp,1),%ebx 15a79: 8d 2c 43 leal (%ebx,%eax,2),%ebp 15a7c: 66 c7 44 24 1e movw $0x0,0x1e(%esp,1) 15a81: 00 00 15a83: 8d 7c 24 48 leal 0x48(%esp,1),%edi 15a87: 8b 4c 24 20 movl 0x20(%esp,1),%ecx 15a8b: 89 4c 24 10 movl %ecx,0x10(%esp,1) 15a8f: be 00 00 00 00 movl $0x0,%esi 15a90: R_386_32 _$J1 15a94: 0f b7 44 24 1e movzwl 0x1e(%esp,1),%eax 15a99: 8b 5c 24 10 movl 0x10(%esp,1),%ebx 15a9d: 8a 14 18 movb (%eax,%ebx,1),%dl 15aa0: 32 14 30 xorb (%eax,%esi,1),%dl 15aa3: 32 14 28 xorb (%eax,%ebp,1),%dl 15aa6: 88 14 38 movb %dl,(%eax,%edi,1) 15aa9: 8a 14 18 movb (%eax,%ebx,1),%dl 15aac: 88 14 30 movb %dl,(%eax,%esi,1) 15aaf: 66 ff 44 24 1e incw 0x1e(%esp,1) 15ab4: 66 83 7c 24 1e cmpw $0x5,0x1e(%esp,1) 15ab9: 05 15aba: 76 d8 jbe 15a94 <vpcm_RxSymbolBitProc+0x1a0> 15abc: 8a 54 24 49 movb 0x49(%esp,1),%dl 15ac0: 8a 0d 00 00 00 movb 0x0,%cl 15ac5: 00 15ac2: R_386_32 ppj1_5 15ac6: 30 d1 xorb %dl,%cl 15ac8: 88 4c 24 51 movb %cl,0x51(%esp,1) 15acc: 8a 44 24 4a movb 0x4a(%esp,1),%al 15ad0: 88 44 24 52 movb %al,0x52(%esp,1) 15ad4: 32 54 24 4b xorb 0x4b(%esp,1),%dl 15ad8: 88 54 24 53 movb %dl,0x53(%esp,1) 15adc: 8a 44 24 4c movb 0x4c(%esp,1),%al 15ae0: 88 44 24 54 movb %al,0x54(%esp,1) 15ae4: 8a 44 24 4d movb 0x4d(%esp,1),%al 15ae8: 8a 5c 24 4b movb 0x4b(%esp,1),%bl 15aec: 30 c3 xorb %al,%bl 15aee: 88 5c 24 55 movb %bl,0x55(%esp,1) 15af2: 88 05 00 00 00 movb %al,0x0 15af7: 00 15af4: R_386_32 ppj1_5 15af8: 66 c7 44 24 1e movw $0x5,0x1e(%esp,1) 15afd: 05 00 15aff: 8b 54 24 20 movl 0x20(%esp,1),%edx 15b03: c0 64 24 2f 01 shlb $0x1,0x2f(%esp,1) 15b08: 0f b7 44 24 1e movzwl 0x1e(%esp,1),%eax 15b0d: 8a 04 10 movb (%eax,%edx,1),%al 15b10: 08 44 24 2f orb %al,0x2f(%esp,1) 15b14: 66 ff 4c 24 1e decw 0x1e(%esp,1) 15b19: 75 e8 jne 15b03 <vpcm_RxSymbolBitProc+0x20f> 15b1b: 0f b6 44 24 2f movzbl 0x2f(%esp,1),%eax 15b20: 5b popl %ebx 15b21: 5e popl %esi 15b22: 5f popl %edi 15b23: 5d popl %ebp 15b24: 83 c4 48 addl $0x48,%esp 15b27: c3 ret */}// Translated from 568 version.unsigned char descrambyte_pcm(unsigned char rawByte){ unsigned short old_descramLong = descramLong ; descramLong = (descramLong >> 8) | (rawByte << 15); return (unsigned char)(rawByte ^ ((old_descramLong >> 5) ^ old_descramLong));}// Translated from 568 version.unsigned short descramword_pcm(unsigned short rawData){ unsigned short old_descramLong = descramLong ; descramLong = (descramLong >> 16) | (rawData << 7); return (rawData ^ ((old_descramLong >> 5) ^ old_descramLong));}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -