亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? m6585.c

?? 十七種模擬器源代碼 非常有用的作課程設(shè)計(jì)不可缺少的
?? C
字號(hào):
/******************************************************************************//*                                                                            *//*                  M6585 - ANOTHER ADPCM PLAYBACK CHIP :)                    *//*                                                                            *//******************************************************************************/#include "raine.h"#include "sasound.h"#include "m6585.h"#include "smp16bit.h"#ifdef RAINE_DEBUG#include "debug.h"#include "ingame.h"#endifstatic DEF_INLINE int aLimit( int val, int max, int min ){  if ( val > max )    val = max;  else if ( val < min )    val = min;  return val;}M6585Rec M6585_entry[M6585BF_MAX], *M6585;static int chip_max;static int sample_len;static int emu_rate;static int stream[M6585BF_MAX];#define UPDATE_SHIFT (8)/**************************************************//*    sh start                                    *//**************************************************/int M6585buffer_sh_start( struct M6585_interface *intf ){  char buf[40];  int ta, i;  int rate;  M6585_ROM *rom;  M6585_SAMPLE *sample_decode;  rate       = audio_sample_rate;  chip_max   = intf->num;  sample_len = rate / 60;  emu_rate   = sample_len * 60;  for( i = 0; i < chip_max; i++ ){    M6585_entry[i].rate    = intf->sample_rate[i];    M6585_entry[i].add     = (UINT32) (((float)intf->sample_rate[i] / (float)emu_rate)*(1<<UPDATE_SHIFT));    M6585_entry[i].offset  = (UINT32) -1;    M6585_entry[i].req_len = 0;    M6585_entry[i].req_buf = NULL;    M6585_entry[i].current_bank = 0;    // rom bank base pointers    rom = intf->rom[i];    // Calculate sample bank count    ta=0;    while(rom[ta].data){       ta++;    }    M6585_entry[i].banks = ta;    // Make decode rom data    sample_decode = (M6585_SAMPLE *) malloc(M6585_entry[i].banks * sizeof(M6585_SAMPLE));    M6585_entry[i].sample_decode = sample_decode;    // malloc error    if(!sample_decode)       M6585_entry[i].banks = 0;    // Decode them    for(ta = 0; (UINT32)ta < M6585_entry[i].banks; ta++){       sample_decode[ta].len  = (UINT32)   (rom[ta].size);       sample_decode[ta].data = (UINT8 *) (rom[ta].data);    }    // Stream setup    sprintf( buf, "M6585 #%d", i );    stream[i] = stream_init( buf, emu_rate, 16, i, M6585buffer_UpdateOne );  }  return 0;}/**************************************************//*    sh end                                      *//**************************************************/void M6585buffer_sh_stop( void ){  int ta,i;  M6585_SAMPLE *sample_decode;  for(i = 0; i < chip_max; i++){    sample_decode = M6585_entry[i].sample_decode;    for(ta = 0; (UINT32)ta < M6585_entry[i].banks; ta++){       if(sample_decode[ta].data) free(sample_decode[ta].data);    }  }  chip_max = 0;}static int ad_sample;static int ad_index;/**************************************************//*    rom bank                                    *//**************************************************/void M6585buffer_bank_write(int num, int bank){   if( num >= chip_max ) return;   M6585 = &M6585_entry[num];   if((UINT32)bank >= M6585->banks){#ifdef RAINE_DEBUG      print_ingame(1200,"M6585(%d) Bank out of range:%02x", num, bank );#endif      return;   }   M6585->current_bank = bank;}/**************************************************//*    request                                     *//**************************************************/void M6585buffer_request(int num, int offset, int data){   int ta,tb;   M6585_SAMPLE *sample_decode;   if( num >= chip_max ) return;   M6585 = &M6585_entry[num];   offset &= 7;   M6585->command[offset] = data;   if(offset==6){	// Trigger   sample_decode = M6585->sample_decode;   M6585->req_buf = NULL;   ta=0;   tb=0;   if(sample_decode){      ad_sample = 0;      ad_index = 0;      ta = ((M6585->command[2]<<16) | (M6585->command[1]<<8) | (M6585->command[0]<<0)) & 0x0FFFFF;      tb = ((M6585->command[5]<<16) | (M6585->command[4]<<8) | (M6585->command[3]<<0)) & 0x0FFFFF;      if( (tb > ta) &&      ((UINT32)ta < sample_decode[M6585->current_bank].len) &&      ((UINT32)tb < sample_decode[M6585->current_bank].len) ){      M6585->req_buf = ((UINT8 *) (sample_decode[M6585->current_bank].data)) + ta;      M6585->offset  = 0;      M6585->req_len = tb - ta;      M6585->req_len <<= 1;      M6585->req_len <<= UPDATE_SHIFT;      }   }   if(!(M6585->req_buf)){      M6585->offset = (UINT32) -1;      #ifdef RAINE_DEBUG      print_ingame(1200,"M6585(%d) out of range: %06x %06x", num, ta, tb );      #endif   }   else{      /*#ifdef RAINE_DEBUG      print_ingame(1200,"M6585(%d) %06x %06x", num, ta, tb );      #endif*/   }   }}/**************************************************//*    read status                                 *//**************************************************/// 0 = not playing// 1 = playingint M6585buffer_status( int num ){  int ret;  if( num >= chip_max ) return 0;  ret = 0;  M6585 = &M6585_entry[num];  if( M6585->offset != (UINT32) -1 ) ret |= 1;  return ret;}/**************************************************//*    update                                      *//**************************************************/static int ad_index_table[8] ={  -1, -1, -1, -1, 2, 4, 6, 8};static int ad_offset_table[49] ={  0x0010, 0x0011, 0x0013, 0x0015, 0x0017, 0x0019, 0x001c, 0x001f,  0x0022, 0x0025, 0x0029, 0x002d, 0x0032, 0x0037, 0x003c, 0x0042,  0x0049, 0x0050, 0x0058, 0x0061, 0x006b, 0x0076, 0x0082, 0x008f,  0x009d, 0x00ad, 0x00be, 0x00d1, 0x00e6, 0x00fd, 0x0117, 0x0133,  0x0151, 0x0173, 0x0198, 0x01c1, 0x01ee, 0x0220, 0x0256, 0x0292,  0x02d4, 0x031c, 0x036c, 0x03c3, 0x0424, 0x048e, 0x0502, 0x0583,  0x0610};static void ad_decode(int ad_code){  int ad_base;  int ad_offset;  ad_base   = ad_offset_table[ad_index];  ad_offset = ad_base/8;    if( ad_code&0x01 ) ad_offset += ad_base>>2;  if( ad_code&0x02 ) ad_offset += ad_base>>1;  if( ad_code&0x04 ) ad_offset += ad_base;  if( ad_code&0x08 ) ad_offset  = 0 - ad_offset;  ad_sample = aLimit( ad_sample + ad_offset , 0x7FF, -0x800 );  ad_index = aLimit( ad_index + ad_index_table[ad_code&7], 48, 0 );}void M6585buffer_UpdateOne( int num, void *buffer, int length ){   int data,ta;   INT16 *sp;   if(!length) return;   sp = (INT16 *) buffer;   M6585 = &M6585_entry[num];   do{      data = 0;      if(M6585->offset != (UINT32) -1){         if( (M6585->offset + M6585->add) >= M6585->req_len ){            M6585->offset = (UINT32) -1;         }         else{         for(ta = (M6585->offset >> UPDATE_SHIFT); (UINT32)ta<((M6585->offset + M6585->add) >> UPDATE_SHIFT); ta++){         if((ta&1)==0)            ad_decode((M6585->req_buf[ta>>1]>>4)&0x0F);         else            ad_decode((M6585->req_buf[ta>>1]>>0)&0x0F);         }         M6585->offset += M6585->add;         data += (((ad_sample * 16) * 80) / 16);         }      }      *sp++ = aLimit( data, 0x7FFF, -0x8000 );   }while(--length);}/**************** end of file ****************/

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩成人一区| 性欧美大战久久久久久久久| 麻豆成人免费电影| 91精品国产综合久久久久| 亚洲男人天堂av| 91丨九色porny丨蝌蚪| 国产精品少妇自拍| 国产·精品毛片| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 精品一区二区三区香蕉蜜桃| 欧美一级午夜免费电影| 久久99国产精品免费| 一二三区精品视频| 国产精品久久久久久久岛一牛影视| 久久99国产精品麻豆| 久久久久97国产精华液好用吗| 国产一区在线不卡| 国产精品天天看| 在线观看精品一区| 青青国产91久久久久久| 久久综合99re88久久爱| 成人动漫一区二区在线| 综合欧美一区二区三区| 欧美少妇性性性| 青娱乐精品视频在线| 欧美韩日一区二区三区四区| 色悠悠久久综合| 看电视剧不卡顿的网站| 中文av一区二区| 99久久精品国产毛片| 26uuu精品一区二区在线观看| 久久精品国产一区二区三| 国产精品成人免费| 日韩你懂的在线播放| 91在线免费视频观看| 韩国毛片一区二区三区| 亚洲高清三级视频| 亚洲三级小视频| 精品国精品国产| 欧美一区二区观看视频| 欧美色图免费看| 色狠狠色狠狠综合| 成人一区二区三区在线观看| 视频在线在亚洲| 一区二区视频在线看| 欧美韩日一区二区三区四区| 日韩欧美美女一区二区三区| 在线免费视频一区二区| 91免费观看国产| 99久久99精品久久久久久| 国产精品夜夜嗨| 蜜桃视频在线观看一区二区| 日韩在线a电影| 麻豆精品在线看| 国产一区二区三区四区五区入口| 日本亚洲欧美天堂免费| 麻豆久久久久久| 国内精品免费**视频| 国产成a人亚洲| youjizz国产精品| 99视频一区二区| 欧美无乱码久久久免费午夜一区 | 99精品国产一区二区三区不卡| 国产成人综合在线| 99re6这里只有精品视频在线观看| 9l国产精品久久久久麻豆| 一本久久a久久免费精品不卡| 色狠狠一区二区| 日韩精品中文字幕一区二区三区| 精品国产免费一区二区三区四区| 久久久蜜桃精品| 一区二区在线免费| 国内久久精品视频| 99视频精品免费视频| 欧美一区二区在线观看| 久久久久国产免费免费| 一区二区国产盗摄色噜噜| 日韩精品欧美成人高清一区二区| 国产精品综合av一区二区国产馆| 成人h精品动漫一区二区三区| 91精品久久久久久久91蜜桃| 国产日本欧美一区二区| 日韩电影一区二区三区| 99久久综合99久久综合网站| 日韩片之四级片| 亚洲一区二区三区激情| 成人av影视在线观看| 精品国产成人系列| 日韩高清不卡一区二区三区| a美女胸又www黄视频久久| 久久综合九色欧美综合狠狠 | 东方aⅴ免费观看久久av| 欧美日韩国产色站一区二区三区| 国产亚洲成av人在线观看导航| 午夜不卡av免费| 欧美日韩精品一区二区三区| 国产精品成人网| av在线一区二区| 亚洲欧洲成人自拍| 成人性色生活片免费看爆迷你毛片| 日韩精品在线一区| 久久99精品国产| 精品国产sm最大网站免费看| 美腿丝袜一区二区三区| 日韩欧美视频在线| 黄色日韩三级电影| 久久综合av免费| 成人性生交大片| 一区二区免费视频| 欧美伦理电影网| 国产一区二区不卡| 国产精品午夜春色av| 91亚洲精品久久久蜜桃网站| 一区二区三区在线免费| 精品1区2区3区| 国产河南妇女毛片精品久久久| 久久久久久久久伊人| 色综合色综合色综合色综合色综合| 最新中文字幕一区二区三区 | 国产视频视频一区| 国产成人亚洲综合a∨猫咪| 欧美国产欧美综合| 日本道免费精品一区二区三区| 91丨porny丨国产| 国产黄色91视频| 亚洲专区一二三| 日韩欧美久久久| 94-欧美-setu| 国产一区二区三区国产| 日韩伦理免费电影| 精品国产一区二区三区久久影院| 成人午夜大片免费观看| 天天做天天摸天天爽国产一区| 日本一区二区成人| 日韩一区二区视频在线观看| 99国产精品国产精品久久| 日本网站在线观看一区二区三区 | 粉嫩久久99精品久久久久久夜| 久久99精品国产麻豆婷婷| 中文字幕在线不卡视频| 5858s免费视频成人| 欧美视频你懂的| 91福利视频久久久久| 成人h动漫精品| 精品无人区卡一卡二卡三乱码免费卡| 亚洲永久免费av| 亚洲天堂免费看| 欧美极品aⅴ影院| 国产欧美久久久精品影院 | 成人综合在线观看| 国产九色精品成人porny| 蜜桃av一区二区三区电影| 亚洲男人天堂一区| 91精品国产欧美一区二区18| 91丨porny丨最新| 成人h精品动漫一区二区三区| 久久机这里只有精品| 国产一区二区久久| 国产一区二区调教| 欧美三级电影精品| 欧美人与禽zozo性伦| 日韩欧美国产一区二区三区| 日韩欧美成人激情| 国产亲近乱来精品视频| 亚洲日本在线a| 另类调教123区| 99视频国产精品| 精品久久久久久亚洲综合网| 国产精品午夜免费| 日韩中文字幕av电影| 高清久久久久久| 91精品国产一区二区| 国产精品丝袜一区| 亚洲国产aⅴ天堂久久| 国产成人在线看| 日韩一区二区三免费高清| 亚洲欧洲99久久| 亚洲欧美乱综合| 九九热在线视频观看这里只有精品| 成人午夜私人影院| 欧美一区二区三区啪啪| 中文字幕精品一区| 麻豆精品一区二区av白丝在线| 国产精品一线二线三线精华| 欧美日韩亚洲国产综合| 国产精品拍天天在线| 青青草原综合久久大伊人精品| 91丨九色丨蝌蚪丨老版| 精品国免费一区二区三区| 日韩精品免费视频人成| 国产成人在线视频免费播放| 精品福利一区二区三区 | 2020国产精品| 日本中文一区二区三区| 91麻豆免费看片| 中文字幕亚洲电影| av在线不卡电影| 亚洲欧洲成人自拍| 99精品一区二区三区| 亚洲三级在线免费观看|