"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.
|