"Ootake" Nonsupport BBS ノンサポート掲示板 管理:ソフト開発グループ「Finath(ファイナス)」

現在までに、8454人の方が、この書き込みをご覧になっています。

17/08/30(水)21:45 ひろ
Re)ADPCMの動作について

こんばんは

_Port[3]のリード時にSIGNAL_ADPCM1を落とすことで
割り込みがそれらしくなるようです。


参考程度に下記の変更で「Speed -> Fast CD」を
外せば時折引っかかりますが近い動きかと思います。


ADPCM.cpp

_PlayBitはグローバルで定義

ADPCM_Reset関数 追加
_PlayBit = FALSE;
_PlayLength = 0;
_PlayedSampleCount=0;


ADPCM_Play関数 先頭で
if(bPlay || _bPlay) _PlayBit=TRUE;
else _PlayBit=FALSE;
if (_bRepeat && _PlayBit==FALSE)
{
 //停止中に_bRepeatがセットされた場合に128Byte単位で割り込み発生
 _PlayAddr = _ReadAddr;
 _PlayHalfAddr = _LengthCount&0xff;//根拠はないです
 _PlayedSampleCount = 0;
 ad_sample = 0;
 _DecodeBuffer = decode(_Ram[_PlayAddr] >> 4);
 _bLowNibble = TRUE;
 _Phase = 0;
 _CDDAAjustCount = 0;
 _bPlay = TRUE;
}
else if (bPlay)

makeSample関数
else if (_bRepeat && _PlayBit==FALSE) //HuVideo再生時。テスト
{
 if (_PlayAddr == _PlayHalfAddr)
 {
  _PlayHalfAddr += 0x80;
  if (_pfnNotification != NULL) _pfnNotification(ADPCM_STATE_HALF_PLAYED);
 }
}

CDROM.cpp
CDROM_Read関数 case 0x3
ret = _Port[3] | SIGNAL_BRAM; //Kitao更新
_Port[3] &= ~SIGNAL_ADPCM1;//<-追加


メッセージ一覧へ戻る

Copyright(C)1997-2007 Kitao Nakamura.