--------------------------------------------------------------------------
Eternal 1.50 beta 1 ->Eternal 1.50 beta 2 (2005/08/21)

EVo[uBƓcn֎̉͌ʂQlɐVKB(05.06.26) by Yano

EVo[uLPF̎gCB(05.06.28) by Yano
  LPFǂ̔ˌW̎g̖͋[Ɏg悤ɂBƓcn֎͒Pɓ͂FIRƋpLPF(IIR)gĂƍlĂ悤AvZbg̃p[^ł͖wǒ̌ʂ͓ȂB܂ANeill Corlett͏˂̒ŗpĂ邪AgԈĂ邽ߎcɂĎ@Ƃ̑𐶂ł܂ĂB

EVo[ȕ(Wall Reflection)̍ËCB(05.06.29) by Yano
  ˂̍ËɂăvZbgEchõp[^ݒƓƓcn֎̌ʂ͊ԈĂ(Corlett)Ȃ̂ŁACB

EVo[ȕo͕FIRŕ(22k->44k)悤ɂB(05.06.29) by Yano

EVo[uLPF̑}ʒuύXB(05.07.04) by Yano

EReverb offWork Areaւ݂̏~B(05.07.04) by Yano

ENeill's  "+1sample"YꂽoOC (05.07.07) by T.Yano
  Neill Corlett̉͌ʂɊÂo[u("Neill's")ƂɁA݂ɂ"+1sample"̈ʒuɂĂȂoOCB

EVo[uɂāAAE1Tv݂ɏ悤ɏC 05.07.07 by T.Yano
  @̌ʁÃItZbgɑ΂鏑݂ɂāA܂ATvÃTvŉE邱Ƃ̂ŁACB

EVo[uComb FilterLPF1sample delaySPUg悤ɏC 05.07.07 by T.Yano
  @̌ʁASPU̓ǂݏoŎĂ邱Ƃ̂ŁACB

ENoise̗ASY32Mn(32,22,2,1)16Mn(16,13,12,11)ɕύXB 05.07.09 by T.Yano
  @̌ʁANoisêŁACBłBit ReverseASYbit̑ΐԂŏł̂ɕύXB

ENoiseEnvelope.stop()ۗ悤ɂB 05.07.10 by T.Yano
  NoiseɁANoise͗œĂVAGfR[hflag 1,5Envelope.stop()ۗANoiseModeꂽɎs邱Ƃ̂ŁACB

ETales of Destiny, Valkyrie ProfileŋNĂSPU-IRQҒʂ蔭ȂɂāA
  uSPU IRQ - Force interruption flag7vŉĂ̂AVoice::processVagHeader()
  Flag7RepeatAddressSpuIRQAddressIRQ𔭐悤ɕύXB(05.07.24) by Iori

EVolume@͂ɊÂAGx[vĎB(05.08.21) by Iori
  Volume::getCurrentVolume()-32768`32767Ԃ悤ɕύXB
  LύXɂASPUCurrentVolumelRead<<1폜, MixerVolumeZ̃Vtgl1415ɕύXB

--------------------------------------------------------------------------
Eternal 1.41 release ->Eternal 1.50 beta 1 (v1.42) (2005/06/02) by T.Yano

ESPUopen()܂SPUIRQWaitCPUAction𖳌 (03.08.27)
  SPUIRQWaitCPUActionɂȂĂIRQSPUrender()ŗvTCYg`ȂȂĂ܂̂...

EQuick Hack for "Update before accessing registers" (2004.11.9)
  UAobt@O邱ƂAudioDeviceւ̋ɒ[ɕpɂȃANZXh~BAb΍BʏSPUasync()̍pxĂяo܂߂΍̗\B

ESPUasyncłAWaitCPUaction悤ɕύX (2005/01/21)
  ePSXe 1.6.0  PCSX ł́ASPU IRQւ̉ɒ[ɒxȂꍇAMetal Gear SolidׂpfBEX̃I[vjOŉr؂r؂ɂȂǏ󂪌ꂽ̂ŁASPUő΍B{A{̖̑肾...

EVolume̓ǂݏoWX^𔭌̂ŎB(05.02.19)
  WX^0x1f801e002*24 wordAVoice 0Voice 23܂ł̎ʂǂݏoƂo邱ƂB܂Al0x1f801db8,0x1f801dbaɂăCVolume̎ʂǂݏo邱ƂBʁATales of PhantasiaSound modeŊeVoicẽx[^삷悤ɂȂB

EDecoded Sound Buffer (0x0000 - 0x0fff) ̈̏B(2005.02.19)
  XA ADPCM/CD-DAL/Rf[^݂̏ɉAVoice 0, Voice 3̃fR[hf[^݂̏BXɁAŸł̊荞݂̔ƃXe[^XWX^bit 0x0800ւ̏Lݗ̈(O/㔼)̔fBcaetlaXA ADPCM/CD-DÃv[ł̔g`AXyNg\A"i miss you."̃XyNg\AhV[Ỷb̌̓Ȃǂ삷悤ɂȂB

ESPUasync - Smooth̏C (2005.02.24)
  ܂ӖȂB

EReverb offłReverb work area̓ǂݏoĐs悤ɕύXB(05.05.14)
  EW}~[̃M^[AReverb offɐݒ肵Reverb work area22050HzPCMf[^ނƂŎĂ邱ƂB̏CŃM^[̉to悤ɂȂB

EXA ADPCM/CD-DAp̃obt@Underflow̃NXtF[hƂ肠B(05.05.14)
  v1.41œoOAʕŎ\B

ESPUasync()Ă΂ꂽSPUupdate()𖳌悤ɂB (05.05.21)
  SPUupdate()SPUasync(68928)ŃG~[gĂASPUasync()ƗĂ΂ƍ̂...

EAudioOut::async()𐮗B (05.06.01)
  AudioOut::async()SmoothpPLL AudioOut::updatePLL(), Waitp҂ AudioOut::asyncWait()ƂĕB

EpɂSPUasync()ĂяoɑΉ邽߁AAudioOut::async()SʏB (05.06.01)
  ꎞobt@ɂ܂~Ax܂AudioDeviceɏނ悤ɂB

E"SPU IRQ - Wait CPU action""Update before accessing register"̓wɃoÔŏCB (05.06.02)
  WaitCPUActionɃWX^ANZXƈCɎԂ߂Ă܂ĈӖCB

ESʏAudioOut::async()ɂāASmoothAAudioOut::updatePLL()ɓncycleԈĂ̂ŏCB(05.06.07)

ESmoothAAudioOut::updatePLL()˂̃ZbgǉB(05.06.08)

EVGx[vB EnvelopeAADSRAVolumeɃNX𕪂B(05.06.20) by Iori

--------------------------------------------------------------------------
Eternal 1.40 release ->Eternal 1.41 release (2003/05/29)

ERecordingSPUclose()Ă΂ꂽꍇAɋL^łȂCBSPUclose()ɁARecording~悤ɂB

ERealtimeConfigDialoggpAobt@TCYύXȂǂAudioOutThread̍ċN𔺂쒆ɁASPUclose()Ă΂ƁAsI邱ƂCB

ESPUplayCDDAchannel()܂ȂCBłXÃobt@ꎞɏ݃|C^߂A㏑̂ł͂ȂNXtF[h悤ɕύXBGwǖڗȂȂB

ESPUinit()̏s\߁ASPUshutdown()ASPUinit(),SPUopen()ƑỎȂ葱ĂCB

ESPUrender()"Wait for XA buffer is free"LƃfbhbNCB

--------------------------------------------------------------------------
Eternal 1.40 beta 7c->Eternal 1.40 release (2003/05/15)

EWindowsłRealtimeConfigDialoggpAobt@TCYύXȂǂAudioOutThread̍ċN𔺂sARealtimeConfigDialogƁAĐ~Ă܂CB
  AudioOutThreadNXbhIƁADirectSound, WaveMapper̍Đ~Ă܂̂BRealtimeConfigThreadstopRealtimeConfigThread()Ă΂܂ŏIȂ悤ɂB

ESPUasyncAstopAudioOutThread()HɕsICB
  SPUasync()AudioOut::stop()Ă΂ƁAAudioDeviceɃANZXɉ邽߁BAudioOut::stop()̌ĂяoenterCS(), leaveCS()ŕی삵B

EAudioDeviceOss.cppgunshinn4/29Ńx[XOssThreadProc()́AĐIɂȂCB
  A1.40[Xł̓ubLÔ݂write()Pȕ@̗pB

ELinuxł/dev/dspopen()oȂƂ̃G[CB

ESDL̓ǂݍ݂Ɏs̃G[CB

ELinuxłŃRtBOt@Copen()oȂƂ̃G[CB

EADSR{[0̎łPitch modulatioňvZ悤ɂB

EAudioDevice.cppAusing namespace std; #ifdef __GNUC__ň͂ł̂ #ifndef _MSC_VERɕύXB
  Visual C++́AW C Cu֐ std OԂɒ`Ȃ̂...

ELinuxłlibpthread.sogĂ邭ɃN(I)ĂȂSDLpbP[W̓ǂݍ݂ɑΏB
  libSDL.so̓ǂݍ݂ɐ旧Alibpthread.soRTLD_GLOBALIvVtdlopen()悤ɂB

EConfigDialog̃fUC𐮗B

ERecordingRecord OptionȂ悤ɕύXB

EAudioDevice.cppEmulatedSoundBuffer::getCurrentPosition()~LVO|CgԂ悤ɂB
  Timerőpƕ\͏オ邩ȂAxƕAłɎG炯ɂȂ̂ŁBɔAAudioDeviceSdl.cppSDL_OpenAudio()ɓndesired.samplesLinuxł̂128ɕύX(Windowsł͂Ȃ2048łȂƑʖ?)B

ELinuxłFLTKgpɊւLڂAboutDialogɒǉB

--------------------------------------------------------------------------
Eternal 1.40 beta 7->Eternal 1.40 beta 7c (2003/05/06)

2003/04/29_gunshinn̕ύXłɑ΂AXɈȉύX by T.Yano

EAudioDeviceOss.cppOssThreadProc()Xɑ啝ς
  RedHat Linux 8.0 (Kernel 2.4.18-14) + Celeron 1.4GHzɂāA܂ĐIɂȂ̂...

ELinuxłConfigDialogCancel{^ĂDefautRec OptionɂݒύXfĂ܂C
  spuEternal_fl.fl: makeConfigDialog()̕Ԃl𓱓BɔAConfigLinux.cpp: showConfigDialog()ق֘AӏCB

ELinuxłRealtimeConfigDialogESCL[ɂ钆f̖C
  RealtimeConfigDialogANeBuɂ܂ŒfIȂWindowɎc[̂Fl::flush()ǉ邱ƂŉB

ELinuxłŖAudioDeviceXg{bNX̔r@hide()deactivate()ɕύX
  FLTK̃oO(?)Ő擪Item("DirectSound")hide()Ă\Ă܂ċĈ...

ELinuxłConfigDialogł̐ݒ莞ɁASDLCuɓǂݍ߂邩ǂ̃`FbNǉ
  linux.makA-lSDLw肵ĂĂAslibSDL.soėǂł͂Ȃ̂ŁAWindowsłƓlɃ`FbN悤ɂB
  (-lSDLw肵ȂlibSDL.soshared libraryNĂꍇAdlopen()Ń[hlibSDL.soˑshared libraryƂdynamic linkɎs(?)B -lSDLw肵ĂĂ-staticIvVw肵Ȃshared libraryN̂LGPLȂ͂B)

EAudioDevice.cppVisual C++ŃRpCłȂȂĂ̂C
  using namespace std; #ifdef __GNUC__ň͂


ȉAgunshinnɂύX_
2003/04/29_ł̃t@CύX_
1.40 beta 7a ̕ύX_

Elinux.h
	<sys/select.h>  <errno.h> includeɒǉ
EAudioDevice.cpp
	EmulatedSoundBuffer̃RXgN^ŁA m_pBuffer ̓e0ŏ悤
EAudioDeviceOss.cpp
	SNDCTL_DSP_SETFRAGMENT ̃p[^ύXAуRgǉ
	OssThreadProc() 啝ɏBX[YɍĐ悤ɁB
EAudioOut.cpp
	async() ŁA RgAEgĂ AudioDevice::signal() L

--------------------------------------------------------------------------
Eternal 1.40 beta 6->Eternal 1.40 beta 7 (2003/04/20)

2003/03/23_gunshinn̕ύXłɑ΂AXɈȉύX by T.Yano

Egcc -Wall warning΍̂߂̌yȕύX
  AudioDevice.cpp, AudioDeviceOss.cpp, AudioDeviceWmapper.cpp, Envelope.h,
  Reverb.cpp, SPU_Main.cpp, Linux.cpp

ESPUasync()-WaitɂWait̊|ύX
  AudioOut.cpp

EReverb𐮗 (Off, TiMidity, Freeverb, Iori's, Neill's)
  "Inchiki" -> p~
  "Tmidity" -> "TiMidity"
  "Freeverb" -> ̂܂
  "Inchiki2" -> "Iori's"
  "Neill Corlett" -> "Neill's"
  Config.cpp, ConfigWindows.cpp, Reverb.h, spuEternal_fl.fl

ERealtime Config WindowL̂ƂASPUopen()SPUclose()ƐcloseoȂC
  ConfigLinux.cpp, ConfigWindows.cpp, SPU_Main.cpp

EAudioOutMethodTimer̎A~ɋHɕsIC
  TimerCxgsɒ~AudioDevicegpɉĕsI邱Ƃ̂CriticalSectiongp悤ɕύX
  SPU_Main.cpp

ESPUւ̃f[^]SPUt@CL^JnsƓ]̃f[^L^łȂɎbΏB
  {AState SavegׂAƂ肠ȈՑΏ̂
  ConfigWindows.cpp, SPU.cpp, SPU.h, spuEternal_fl.fl

EMinGWłlibraryName"Eternal SPU Plugin (MinGW)"ɕύX
  InterfaceFPSE.cpp, InterfacePSEmuPro.cpp

ESPUwriteDMA(), SPUreadDMA()SPUt@CɋL^悤ɕύX
  InterfacePSEmuPro.cpp

ESPUfreeze()̃WX^ɁAԕAłȂWX^ݎɔ铮NĂC
  InterfacePSEmuPro.cpp, SPU.cpp SPU.h

ESPUupdate()SPUasync()ւWrapperƂĎ
  InterfacePSEmuPro.cpp, InterfacePSEmuPro.h, spuEternal.def

EInchiki2o[uZoverflowŉ邱ƂC
  Reverb.h

EMinGWłDllMain()Ă΂ȂC
  SPU_Main.h

EMinGWŁALinuxłMakefile𐮗
  base.mak, windows.mak, linux.mak

EfluidShift-JISR[h𐳂ɕςɂȂ邱Ƃ̂spuEternal_fl.fl̊R[hEUCɕύX
  Shift-JIS2oCgڂ'{''}'̎A'{}'̑Ή֌W딻肷̂...

EComponents/revmodel.cppVisual C++ŃRpCłȂȂĂ̂ŏC
  for (int x;;) ̃XR[v̖̌݊

EspuEternal.rcwindresŃRpCł悤afxres.hC


ȉAgunshinnɂύX_
2003/03/23_ł̃t@CύX_
1.40 beta 6 { YanoAudioOut.cppC ̕ύX_

EAudioDevice.h
	AudioDevice::signal() ǉ

EAudioDeviceDsound.cpp
	AudioDeviceDsound::signal() ǉ

EAudioDeviceDsound.h
	AudioDeviceDsound::signal() ǉ

EAudioDeviceOss.cpp
	pthread_mutex_init()̈C
	assert()ɂ`FbNXɑ}
	pthread_create()pthread_attr_tw肷悤Ɂił͈ӖȂj
	pthread_mutexattr_settype()gȂ悤Ȃ̂ŊO
	AudioDeviceOss::signal() ǉAɔ̃o֐CF AudioDeviceOss::AudioDeviceOss() AudioDeviceOss::~AudioDeviceOss() AudioDeviceOss::stop() AudioDeviceOss::OssThreadProc()
	AudioDeviceOss::lock()  AudioDeviceOss::unlock() ςmutexg悤ɂĂ݂
	AudioDeviceOss::OssThreadProc() ̃WbNĒ

EAudioDeviceOss.h
	bOssThreadEndvolatile
	doxygen`̃RgKXǉ
	o AudioDeviceOss::signal() AudioDeviceOss::condOssThread ǉ

EAudioDeviceSdl.cpp
	AudioDeviceSdl::signal() ǉ

EAudioDeviceSdl.h
	o AudioDeviceSdl::signal() ǉ

EAudioDeviceWmapper.cpp
	o AudioDeviceWmapper::signal() ǉ
	o AudioDeviceWmapper::hWaveOutThreadMutex AudioDeviceWmapper::hWaveOutThreadSignal ̒ǉɔFXC
	AudioDeviceWmapper::lock()  AudioDeviceWmapper::unlock() ƃXbhZ[tɂƂŁAx኱ɏȂobt@ōςނ悤ɂȂH

EAudioDeviceWmapper.h
	o AudioDeviceWmapper::signal() ǉ
	o AudioDeviceWmapper::hWaveOutThreadMutex ǉ
	o AudioDeviceWmapper::hWaveOutThreadSignal ǉ

EAudioOut.cpp
	RXgN^ł̃oŌxoĂ̂C
	AudioOut::init() ŁA ConfigAudioDevice̒lWin/LinuxpɂBAudioDeviceOss13ɁAAudioDeviceOpenal34
	AudioOut::async() Windowsł̋CQlɁALinuxłC
	AudioOut::async() ŁA AudioDevice::unlock() ̌Ăяo AudioDevice::signal() ǉ

Ebase.mak
	ׂC

EConfig.cpp
	Config::setDefaultValue() ɂāA Config::AudioDevice ̃ftHglWinLinuxŏꍇ

EConfig.h
	Config::logWriteRegister() 錾 F_INLINE ̈ʒuŌxoĂ̂CBccƂAgĂȂH

EConfigFPSE.cpp
	GETINTVAR()  SETINTVAR() xo܂Ȃ̂ŁA##var(var)ɕύX

EConfigLinux.cpp
	CuGTK+FLTKɕύX

EConfigLinux.h
	CuGTK+FLTKɕύX

EConfigLinuxPSEmuPro.cpp
	ConfigWindowsPSEmuPro.cppɍ킹A ConfigLinuxPSEmuPro::loadConfig()  ConfigLinuxPSEmuPro::saveConfig() ɃZ[uڂ̒ǉ

EInterfacePSEmuPro.cpp
	SPUabout() WinLinuxŋʂ̏

ELinux.cpp
	VK쐬
	nanosleepStrict()̎

Elinux.h
	Rg̉
	#include <gtk/gtk.h> 폜 #include <signal.h> ǉ

Elinux.mak
	ׂC

EMakefile
	VK쐬
	 make -f *.mak ƂȂĂςނ悤

ESPU_Main.cpp
	pthread_mutex_init()̈C
	assert()ɂ`FbNXɑ}
	volatile bAudioOutThreadEnd bCriticalSection ɒǉiӖ𕪂₷邽߂Ɂj
	doxygen`̃RgKXǉ
	initCS() bVtalrmYĂ̂C
	pthread_mutexattr_settype()gȂ悤Ȃ̂ŊO

EspuEternal_fl.cxx
	VK쐬
	FLTKgRtBOEabout_CAO

EspuEternal_fl.fl
	VK쐬
	FLUID̃t@C

EspuEternal_fl.h
	VK쐬
	spuEternal_fl.cxx̃wb_

EStreamSound.cpp
	RXgN^ł̃oŌxoĂ̂C

EVagBlock.cpp
	RXgN^ł̃oŌxoĂ̂C

EComponents\revmodel.cpp
	forXR[vint i錾C

Ewindows.mak
	ׂC

--------------------------------------------------------------------------
Eternal 1.40 beta 5->Eternal 1.40 beta 6 (2003/03/09)

ESPUasync - Smooth  (by T.Yano)
"Update before accessing register"LɂȂĂSPUasync - SmoothȂoOCB

E"Update before accessing register"̎dg݂ (by T.Yano)
obt@ɗ]TAWX^QƂ̑OɍŒ1Tvmɐ悤ɂB

ESPUasync - Wait  Sleep() s Priority𒲐 (by T.Yano)
WȏPrioritỹXbhSPUasync()Ă΂ƃVXe݂̔ȂɑΏB

--------------------------------------------------------------------------
Eternal 1.40 beta 4->Eternal 1.40 beta 5 (2003/02/09)

ENeill Corlett͂ɊÂReverb (by T.Yano)
P.E.Op.S. DSound Driver 1.4ŐVKꂽANeill Corlett͂ɊÂReverbĂ݂B

--------------------------------------------------------------------------
Eternal 1.40 beta 3->Eternal 1.40 beta 4 (2002/09/23)

ENoiseSʓIɕύX (by T.Yano)
Noisemn񔭐ɕύXAS`lŋʉBNoiseǧvZƁAɊÂNoiseg`XV^C~OύXB

--------------------------------------------------------------------------
Eternal 1.40 beta 2->Eternal 1.40 beta 3 (2002/09/??)

EPMODTruePitch0x3fffɃNbv悤ɏCB
Yanỏ͂ɊÂAPMODɋPitch̓NbvAPMOD̃IItɊւ炸TruePitchNbv悤ɂ܂B

--------------------------------------------------------------------------
Eternal 1.40 beta 1->Eternal 1.40 beta 2 (2002/09/14)

Eo[ũ~bNXCB
MixerɂāAMainReverb͂ꂼƗĉʒߌ~bNXĂ̂AReverb volumeReverbMainɃ~bNXMain volumê悤ŁAC܂B

EPitch, TruePitch0x3fffɃNbv悤ɏCB
ȑOAPitch14bitsɗ}ׂɁu& 0x3fffvāAKpŃsAmɒႢɂȂĂA16bitstɎg悤ɂo܂܂B
ŁATOD̃TEheXgSEłǁ[@ƈႤȂ...ƏXvĂłB(ɉ...)
ŁAPitchl14bitsŃNbvĂ݂ƂA@Ɠl̃sb`ŖĂ悤ɂȂ܂B(SE No.17,25)
ɁAPMOD|̃sb`(TruePitch)ɂl̏ƁAFF7̃iCcIuEh9l(𓊂郄c)oꎞ̌ʉ@ʂ́uvɂȂ܂B
̐S̃Kp, sAmA16bitsƎ኱悤ŁA14bitsNbvɂ@ʂ̉ɂȂ܂B
14bitsI[o[PitchĺẢc̋Ȃł0x49ac, 0x41a0mFł܂B
# AKp̃TEhhCóAPitch0x3fffŃNbv鎖OɂăvOĂ!?
# ƂAPGS҂͂̎ɋCtĂ̂낤...?()
# SMFł͂̉ɂȂ锤̂AƎ`ɕϊPSŖ炵特ႭȂ񂶂ᖳ낤...

EuReverb typevǉB
V2ނ̃o[uASY(Freeverb, Inchiki2)ǉāAV킹4ނ؂ւ悤ɂ܂B
...܂eXgpȂł()
́EInchiki2ŁAvZԈႢāu킠[[vƃfJmCYoɁAo[u؂悤ɂƂpr()

--------------------------------------------------------------------------
Eternal 1.31 beta 3->Eternal 1.40 beta 1 (2002/08/29)

EuCache VAG decodev@\ǉB
VAGubNɃfR[hς݃TvLbVāAژ_ł݂܂B
eVAGubNLbVs_1, s_2ێ邱ƂɂAVAGXg[̂悤ȓȏɂΉ\łB
_́ALbVȂƔׂĔg`ςĂ܂ł...
̂ƂAsb`W[VSʂω̂ƁASO2̋No.42, VP̋No.9ŉF̕ωڗĂ܂Ă܂B

EVo[uɌāA@̉͂Jn...

--------------------------------------------------------------------------
Eternal 1.31 beta 2->Eternal 1.31 beta 3 (2002/07/04)

EׂCB
ʑ]ɊւoOC܂B}CiX̒l1悤ł()
SDLLockAudio, UnlockAudiöʒuR[obN֐̂Alock, unlockɈړ܂B
Ŝ߁ABuffer sizẽftHgl64ɕύX܂B
About_CAO\Configɂ܂Ƃ߂܂B(Win̂)
Wait̃EFCgA덷44Tv0TvɕύX܂B(Linuxł͐xオ...)
WaitASleep̑ɃptH[}XJE^gpĂ݂܂B(Win̂, ܂ʖł())
Gx[ve[ȕEnvelopegs悤ɂ܂B
Enter, LeaveCriticalSectiońAKvȏꍇs悤ɂ܂B(Win̂)
Update before accessing register̔`FbNp~܂B SPUasyncɂĕKvȂ̂...
mCYgĂ݂܂B@̃mCYɋ߂Ȃ܂A񂹂񐶐WbNႤ̂ŁASĂ̎gƂ킯ɂ͂Ȃ悤ł...()
RtBOASDLCu(sdl.dll)̑݃`FbNǉ܂B

ERecord@\B
WX^Write, ReadADMAWrite, ReadAXA, CDDÃO悤ɂȂ܂B
ERecording optionŁAMOCxgIł܂B
WISPUOƂẮAREG writeDMA writê݂ŗǂƎv܂B

--------------------------------------------------------------------------
Eternal 1.31 beta 1->Eternal 1.31 beta 2 (2002/05/30)

EXg[TEh̃obt@ӂꏈύXB
obt@tɂȂA݈ʒuƓǂݍ݈ʒuƂ̋ɕ␳悤ɂ܂B
ePSXe & SPUasyncɁAuvvvvv...vƃmCY葱̂h悤ɂȂɁA
ł܂悤ɂȂ܂()
́A̕₷Ɗ܂..._bX?()

EXg[TEhCDDA̍ĐɑΉB
CDDAĐ́ARs[Ōǂ]悤ɂ܂B
FPSE, AdriPSXpɓĂACDDAĐ̃p[^ƓɂȂĂ̂ŁA
f̕@ς܂B

EXg[TEh̖ĐTCỸ`FbNB
4096->2048ɕύX܂B
SPUplayADPCMchannelł̃`FbNԊuSleep(0)ɂ̂ŁA̒xłvł낤Ǝv܂...
WaitForXABufferIsFreeL̏ꍇɁAK^Ă܂悤ł΁A4096ɖ߂Kv邩܂...

ECDDAĐpC^[tF[XǉB
uvoid CALLBACK SPUplayCDDAchannel(short *pcm, int nbytes)v
calbւ̃v[e[VpłB

E{CX̏ύXB
ADSR{[0łAVAG|WVړ͏ɑS{CXs悤ɂ܂B
ׂpfBEX̏Ǐ󂪉PꂽƂ̎łB

Eׂ\̍œKB

EȉAR_̏CB

(patch2.txt)

131beta1̕ύX_F

base.mak, windows.mak, linux.mak
E

linux.h, AudioOut.cpp
Enanosleep()̎gPB

AudioDeviceOss.cpp
EXbh𒲐߁AƂs뒆B

ConfigLinux
EfobOo͊O
E]venterCSleaveCSO
EgȂEBWFbg|C^oO

ConfigLinuxPSEmuPro.cpp
EG[B

InterfacePSEmuPro.cpp
ESPUfreeze()́uSPUplayADPCMchannel(&pF->xaS);vOleaveCSenterCSǉiȂƁALinuxŃXe[g[hɃfbhbNj
ERgǉB

SPU_Main.cpp
ELinuxł́AAudioOutThread̃XbhD揇ʂύXBccڂɌʂ͌ꂸAƂg悭ȂijB

(patch3.txt)

SPU_Main.cpp
ELinuxłTimer[hǉiJ[l2.4ȍ~łȂƓ񂩂ccHj

Config.h
EdestroyRealtimeConfigDialog()virtualɁB

ConfigLinux
ERealtimeConfigGTK+̃^C}[ĝ߂BiǂN悤Ȃ̂Łccj
ERtBOTimerI\ɁB

linux.mak
E^C}[ǉɓāAgpCuǉ

--------------------------------------------------------------------------
Eternal 1.30->Eternal 1.31 beta 1 (2002/05/25)

EGCC, Linuxł̃RpC\ɂB
ɔAI[fBIo͊֘A啝ɏC܂B

EAudioDeviceǉB

WindowsF

DirectSound ... DirectSoundgăI[fBIo͂܂B
                DirectX3ȏオCXg[ĂKv܂B

SDL         ... SDLCugăI[fBIo͂܂B
                SDL.dllKvłB
                SystemtH_, PSG~{̂̂tH_, PlugintH_̂ꂩɒuĉB

Wave Mapper ... WindowsWWave MappergăI[fBIo͂܂B
                Windows95ȍ~łΎg͂łB
                AWavefoCX1ł́Agpł܂B

 Wave MappeŕA݂̎Ƃǂςۂł...

LinuxF

OSS         ... LinuxW(?)OSSgăI[fBIo͂܂B

SDL         ... SDLCugăI[fBIo͂܂B
                libSDL.so(?)KvłB

EThread, Timer̓Eternal 1.3 beta 2̎ɖ߂B
AudioDeviceǉɂAudioOut̏C܂rł...
Yanosyo̖̊ŁAasyncg@薳΁A{̗pɂƎv܂B

EXATEh̔g`A0x00000 - 0x007ffɔf悤ɂB
TODXATEhĐɃx[^[悤ɂȂ܂B
uI miss you.vł̓_͗l...

EȉAR_̏CB(patch.txt)

ǉt@C
@AudioDeviceOss.h AudioDeviceOss.cpp
@ConfigLinux.h ConfigLinux.cpp ConfigWindows.h ConfigWindows.cpp 
@ConfigLinuxPSEmuPro.h ConfigLinuxPSEmuPro.cpp ConfigWindowsPSEmuPro.h ConfigWindowsPSEmuPro.cpp 
@linux.h win.h 
imaket@C windows.mak linux.mak base.makj

ǉt@C̐
AudioDeviceOss
EAudioDeviceOSSgpŁB
ConfigWindows
EConfigWindowsphNXB
ConfigLinux
EConfigLinuxphNXB
ConfigWindowsPSEmuPro
EConfigPSEmuProWindowsŁB
ConfigLinuxPSEmuPro
EConfigPSEmuProLinuxŁB
linux.h
ELinuxłgȂvȃt@C̃CN[hBWindowsɂȂ^萔A֐̐錾A`B
win.h
EPɁu#ifdef _WINDOWSvŁu#include <windows.h>v邾B

t@C̕ύX_
AudioDevice
ELinux֘ȀǉB
AudioDeviceSdl
EAudioDeviceOłSDL APIɂXbhƃ^C}[ÔŁASDL__InitSubSystemSDL__QuitSubSystemASDL__InitSDL__QuitɁB
ELinux֘ȀǉB
AudioOut
ELinux֘ȀǉB
Config
EOSˑAhNXi`WindowsA`LinuxjɈڍsB
ELɔAꕔoprotectɁB
ConfigPSEmuPro
E@\ConfigLinuxPSEmuProConfigWindowsPSEmuProɈڍsāA폜B
EConfigPSEmuPro.hɂConfigLinuxPSEmuProConfigWindowsPSEmuPrõCN[ht@CǂݕBit@C̏Cŏɗ}邽߂Ɂj
Envelope.h
ERPs ustatic int ADSRResolution; // ADSRVolumeX\v ̖ɔpXy[XǉBiȂgccŃRpCG[j
FPSE_Sdk.h
EŜextern "C" {}ň͂ށB
Global.h
Egccł́uF_INLINEv́uinlinevƒ`B
InterfacePSEmuPro
E֐錾extern "C" {}ň͂ށB
ELinux֘ȀǉBSPUabout()֘AB
Eu#include "PSEmuPro_PSEmu PlugIn Defs.h"vu#include "PSEmuPro_PSEmu Plugin Defs.h"vɁBiUnixł͑啶E̎ʂ邳łj
SPU_Main
ELinux֘ȀǉB
EConfigPSEmuProCB
ENeBJZNVAXbhA^C}[ꂼWindows, LinuxŏꍇBLinuxłAudioOutThread_Timer𖳌Bi^C}[nAPI̓J[l2.4ȍ~łgȂƂz[y[ŴŁj
SPUDebug
Eu#include <windows.h>vu#include "win.h"vɁB

--------------------------------------------------------------------------
Eternal 1.3 beta 2->Eternal 1.3 beta 3 (2002/05/05)

EGUIύXB
Audio out methodSPUasync̎̂Async modeI\Ȃ悤ɂ܂B
Audio out methodSPUasync̎́AWait for XA bufferItŒɂȂ悤ɂ܂B
(IłƁA{̂bNꑱĂ܂܂)

EConfigCB
PCSXŁAj[Configuration->SoundRtBOʂĂяoAIƗsC܂B

EDecimateOB
FF7ꕔ̃Q[ŁAFɊւ肪̂ŁAꎞIɊO܂B

EmCYʂグB
SPUasyncɂāAFF7̌ʉɍČł悤ɂȂ̂ŁA_mCY̐U]2457632767ɖ߂܂B

ERpCIvVύXB
* ĂяoK__cdecl__fastcallɕύX
* CCWJ̐CC֐݂̂K\Ȃׂ̂ĂɕύX
...͑ȂƎv܂B

EYanoSPUasyncCB
(1) asyncpϐ̏C
  ŏobt@Sɂ悤ɂ܂B
(2) AudioOut::async() ̑啝ύX
  - "Smooth"  PLL䉻sA݈ʒu̕␳
    g`OɂĂ܂B
  - ̃bvAEh
  - async() Ă΂xɁA񏑂݈ʒu`FbNs
  - "Wait"1msecȏジꂽ Sleep()悤ɂ(Waitx)
(3) xLock() oȂ悤ȑ傫 Lock() 𕪊s

--------------------------------------------------------------------------
Eternal 1.3 beta 1->Eternal 1.3 beta 2 (2002/05/01)

EGUI֌WS̓IɏCB

* Audio out methodR{{bNX
Audio out method̐F(readmeɂ̂܂܎gŏ܂)

TEho͂@w肵܂B
gPCɂāAœKȂ̂IĉB

Thread   ... ݊TimerAׂTimer傫B

Timer    ... ݊ThreadႭAׂThreadB

SPUasync ... ͍݊łAׂł傫B
             PSG~{̂̋@\ɑΉĂKv܂B

* Change total samplesAsync modeɕύXAR{{bNX
Async mode̐F(readmeɂ̂܂܎gŏ܂)

SPUasync̓샂[hw肵܂B

Simple   ... Gȏs܂B
             t[[g܂͒xƁAƂтpɂɔ܂B

Wait     ... t[[gꍇAœKȃt[[gɂȂ悤ɃEFCg܂B
             t[[gxꍇAJԂ̂h߁AxĂ镪NA܂B

Smooth   ... t[[gɉāATv̗ʂ𒲐߂܂B
             ƂтɂȂ܂B
             AValkyrie Profile, Metal Gear Solid̂悤ȉ̍ĐSPU-IRQgp\tgł́A
             G~[gɖ肪\Ȃ܂̂ŁAӂĉB

* LGUIύXɔAConfigʂ̕\֌W̏C

* realtime configύX
Cancel, Default{^𖳂ADefault̂ƂRecord\
realtime config悤ɂ (EX{^ESCL[)

EFPSEC^[tF[X֌W𐮗B
FPSEC^[tF[XAPȂPSEmuProvOC̃bp[ɂĂ܂܂B
ꂾ̂߂SPUCĈAz炵̂...

RtBO̐ݒf[^́AFPSEPSEmuProŋʂɂȂ܂B(WXg)

ERpCIvVύXB
^CCuAu}`Xbhvu}`Xbh(DLL)vɕύXƂAoCiTCY70KB܂()
ɖ͔ĂȂ悤łA\Ă܂B
AÕ^CCuKvɂȂ̂܂...

ɑ̃IvVĂ݂܂B
^[QbgvZbTuhPentium ProɕύX ... Sς炸
ĂяoK__cdecl__fastcallɕύX ... ẑƑȂ
CCWJ̐CC֐݂̂K\Ȃׂ̂ĂɕύX ... ƑȂAoCiTCY8KB

[...ł()

EWait for XA buffer is free̓ύXB
obt@̏Ԃ`FbNC^[oASleep(1)Sleep(0)ɕύX܂B
ɂāACPUgp100%߂ɂȂĂ܂܂ASleep(1)Ŗ肪NĂłA
Wait for XA buffer is free܂悤ɂȂĂƎv܂B

ESPUasync֌W̏C
ݐcycle0ł͂Ȃ768ȏ̏ꍇɔg`s悤ɏC܂B
SPUasyncUpdate before accessing registerIɂɁA\ɂȂ܂B
Async modẽR[hǉ܂B

EThread, Timer̓CB
̏C͈ꎞIȎpɎgp邽߂̂̂ŁAʏ탊[Xō폜Ǝv܂B

updateBufferĂяoɁAAudioOut::asyncgĕ\ɕۂ悤ɍHvĂ݂܂B
GetCurrentPosition()ł͂ȂAtimeGetTime()̐xɈˑĔg`悤ɂ܂B
timeGetTime()1ms̕\AGetCurrentPosition()̋t߂̂悤ȌۂNȂ΁A
Sound buffer size̒߂ŁAPCɈˑȂ鎖\ɂȂĂƎv܂B

ӁFAsync modeSimpleɂĂĉB

Wait CPU actionAPłĂ܂̂ŁAVPłƍĐȂ́̕A񎎂ĒƎv܂B

--------------------------------------------------------------------------
Test11->Eternal 1.3 beta 1 (2002/04/29)

EXATEh̕ԏPB
XAobt@Jb|̎́Aԗpobt@̐擪NA悤ɂ܂B
XAf[^ƘAđĂĂ΁AXAobt@Jb|ɂȂ钼OɐVf[^Ă͂łAJb|ɂȂƂ́AFPS񂾂XAf[^I[ɒBƂɂȂ܂B
FPSXAr؂ꂽꍇAƕԂĂǂv`mCY͔̔Ȃ̂ŁA̎ł薳Ɣf܂B

EChange total samplesǉB
Audio out threadSPUasync̎ɍp܂B
̃IvVIɂƁASPUasync̎łr؂ꂸɍĐ鎖\ɂȂ܂B
A܂ɂFPSx肷ƁA܂Ȃ܂B
̃IvVIɂƁAg`ʂɂĕς邽߁ASPU-IRQg\tgł͎gȂǂ܂B

...̃l[~Oł̓}ŶŁA@\ɍ킩₷Otł...

ESPUasync֌W̓XCB
Audio out threadSPUasync̎AeSpecial game fix͈ȉ̓܂B
* Update before accessing register
WX^ANZXOɁAK1Tv܂B
A1xSPUasyncԓ1Tv܂B
FF9(q_Kf̃e[})ł́AȂƕ\グĂĂ܂܂B
* SPU IRQ-Wait CPU action
SPUasyncŔg`ہASPU-IRQ_Ŕg`f܂B
ASPUasyncłSPU IRQ-Wait CPU action͗LɂȂ܂B
܂SPU-IRQSPUasyncԂf܂B
* SPU IRQ-Force interruption flag7
ʏƓłB

EMove vag position method폜B
YanoVAGړ֘ȀCɂAXe[g[hSPUt@CĐ̉ۂĂ܂B
Ƃ킯ŁAOld͕svɂȂ܂B

ERealtime config windowCB
Audio out thread̕ύX\ɂȂ܂B

--------------------------------------------------------------------------
Test10->Test11 (2002/04/27)

EXATEh`ԏ悤ɂB
ŏ̃ZN^ĂꍇAŁuv`vƎG鎖Ƃ_܂B
{̑Ő`ԏ(44100Hzւ̃Tv܂)Ă炤A
{̂ɁũZN^͐擪̃ZN^vƋĂ炤@܂B

EVC^[tF[X SPUasyncǉB

void CALLBACK SPUasync(unsigned long cycle)

̊֐́AAudio out methoduSPUasyncvɐݒ肷鎖Ŏgp鎖ł܂B
{̂瑗ĂR3000Ǎo߃NbN󂯎A̗ݐϐƂɔg`s܂B
{͕̑KAԂ1bԌo߂閈cycle̍v33868800ɂȂ悤ɂKv܂B

̓Iɂ́AYtĂPCSX̃\[XR3000A.c102-108sڂQƂĉB
݂́AׂƂ̃oXl64TvCɂ킽Ă܂B
VP̉ł́A256Tv܂ł͑vŁA512ɂ̌ۂN܂B

--------------------------------------------------------------------------
Test9(Eternal SPU 1.2)->Test10 (2002/02)

YanȍCB

Eternal SPU v1.20(Test9)̎ȕύX_ by T.Yano (02.02.09)

[0] VersionԍύX
v1.20(Test9)Ɨׂ邽߂ɁAv1.21ɂĂ܂܂B

[1] WaitCPUAction̔g`ύX
ɐꂽg`̍ĐI肻ɂȂ܂Ŕg`ۗǍ
WriteCursori񂾕Âg`BWaitCPUActionꂽAPlayCursor
ʒu܂ňCɔg`BɂASPU-IRQɂȂȂȂ\tgł
WaitCPUActionɂ肪oɂȂ͂B

[2] g`̃Tv̌vZASYύX
DirectSoundBufferPlayCursor߂(?)̑΍BOg`
̎Ԍo߂猩ςׂTvƁAPlayCursorׂ̍
wrap around̕Kv𔻒BPlayCursorobt@ʂ̔ȏ߂炸A
PlayCursorobt@ʈȏi܂Ȃΐ\B

[3] SPU::updateRegister()p~
SPU::updateRegister()pASPU::readRegister()ɖߍ񂾁B}`Xbh
Z[tɌz(?)BH_SPUIsOn1,2̓ǏoƒxȂ...

[4] H_SPUstat, H_SPUctrl̓ǏolC
spu_memo.txtɋLڂDMAread, DMAwrite, DMAwriteݒɂ鋓B

[5] H_SPUaddr, H_SPUdata̓ǏolC
spu_memo.txtɋLڂ悤ɍŌɏlǂ߂邾̂悤ɕύX

[6] DMA]ASYC
spu_memo.txtɋLڂDMA]̋BH_SPUdataւ݂̏ő
32wordobt@OAH_SPUctrl̃rbg0x04ւ݂̏
SPU::flushXferBuffer()s悤ɂB

[7] Flag7IRQ̏𐧌
OɒʏSPU-IRQ𔭐Ă`l݂̂Flag7IRQ悤
ɏCB

[8] Voice::processVagHeader()ǉ
Voice::moveNextVagPosition()珈̈ꕔ𔲂oAVoice::processVagHeader()
ɕB(܂APȂD݂̖łB) ܂AChannelActive̕ύX
^C~Ospu_memo.txtɏ]ĕύXB

[9] StartAddress, RepeatAddress̎̋C
StartAddress, RepeatAddress̎̋Ƃ肠r[ɎBP
AhXɂĎgB

[10] o̓TṽtB^OύX
(Interpolate)łȂDecimateB܂ʂȂ? (XÃtB^
OĂł?()


(2002/02/11t̃[)
SPU::XferCount̏Y𒼂̂ƁAL̃eXgR[h𖄂ߍ
AudioOut.cpp肵܂B

--------------------------------------------------------------------------
Test8->Test9 (2002/01/23)

EAudio out methodǉB
1. Another thread
]̕@Bg`p̕ʃXbh쐬ASleep(1)ɔg`sB
_F
1bԂɖ500(Win98)g`ŝŁASoundBufferSizeE܂ŏłB
GPUvOCFPS limitƊɂ̂ŁAFPS肷B
_F
Xbh؂ւASleep(1)̏pɂɍŝŁAׂ傫B
Winł́AXbh؂ւ̃^CXCX20ms(9xn?)`50ms(NTn?)炵̂ŁAɉNB(FF9ł͌...ĂċC)
(500g`s邪A500Xbh؂ւĂ킯ł͂ȂAPɃXbh؂ւȂSleep(1)sĂɂȂ悤ł)

2. Multimedia timer
^C}[荞݂Ŕg`sB
_F
C^[oԊuɂ邪AׂyB
{̂ƓXbhȂ̂ŃXbh؂ւɂI[o[wbh͖Aw肵C^[ołقڊmɊ荞ł̂ŁA͋NȂB
_F
Pete's GPUFPS limitƑ炵AFPS肵ȂA68FPSɐݒ肵Ă̂66.5FPS炢œĂ܂B
(́Adg݂łƎvNull2's SPUłN)
݂̃C^[o10msAVP̉Đɂ͉𑜓x肸A5msxɂKvB
AC^[oƁAAnother thread菈dȂĂ܂B

EMove vag position methodǉB
1. Old
]VAGړB
SPUt@CĐȊO̗_͖B

2. New
ݒEVAGړB
]̂KpEZANACxZANACAقڐ悤ɂȂB
BASPUt@CĐȂȂĂ܂̂lbN...
([vAhX̕A@ɖ肪悤ŁAݒ)

ESPU IRQ-Force interruption flag7ǉB
tO7VAGubNʉ߂ꍇASPU-IRQIɔB
AX^[gAhXtO7̏ꍇ͔ȂB(TODp̎dl)

EsKvȃIvV폜B
XA buffer size...Enable XA buffer auto adjustIŒɂɂ폜B
High resolution mode...ʏłł̓IACgłł̓ItɌŒB
Enable XA buffer auto adjust...IŒB
Enable Reverb...ʏłł͔`FbNACgłł̓ItɌŒB
Enable SPU IRQ...IŒB
Enable Noise and Pitch Modulation...ʏłł̓IACgłł̓ItɌŒB
Enable Compressor...@\폜B

EVAGfR[hCB
Nbv̒ǉ...[mMAX̌ʉB
̊ȑf...xAbvB(Nbv̒ǉőEꂽ...)

Eo[u𒲐B
o[uobt@̒Ao[up[^ɂĕω悤ɂB
ɂ́ATOD̃TEh[hɂREVERB TYPEgpB

EmCY𒲐B
ɂ́AFF7ZANACxZANACgpB
AǂĂ@̂悤ȕ͋C̃mCYoȂB
ASYႤ炾ƎvB

ExAbv̂߂̃R}S}ƂCB
vIuWFNǵAnewstaticɁB
Nbv̉ǁB
̑B

--------------------------------------------------------------------------
Eternal 1.1->Test8 (2001/11/22)

EVAG|WVړCB
tO7ƃtO8ȏ̈ēxύXB
tO7FStartɐݒ肳Ăꍇfʂ肵AtO7̃ubNP[v悤ɂB
tO8ȏFړ悪tO8ȏゾꍇARepeatɔԂ悤ɂB

EGx[ve[uvZB
̂Ƃ͖͗lB
fBPCmɍČł̂ł͂ȂB

ELitełꂽB
ʏłƔׂāAyɁA
uo[uEF͕ԖEmCY,sb`ENXtF[hEEEFPSsv
...łB

--------------------------------------------------------------------------
Test7->Eternal 1.1 beta (2001/11/05)

EtO7SPU-IRQ́AIvVOĕWdlƂB

EuUpdate before readRegistervCB
3Xe[gɂāAȉ̓悤ɂB
`FbN...WX^ANZXDirectSoundobt@XVȂ
`FbN...WX^ǂݍݎDirectSoundobt@XV
`FbN...WX^ǂݍ݁EݎDirectSoundobt@XV

ɔÂuUpdate before register accessvɕύXB

̃IvV́Ẫ\tgɂs邽߂̃IvVłB

IvVu`FbNvɂ鎖ŉłF
FF8...^CgBGM(Demo)AOiÑe[}(Hikutei)
FF9...Disc3.q_Kf̃e[}
NmNX...NmNXgăX{X|̃e[}(BGM59)
hNG7...GfBOBGM
z`2...ʏogBGM(VoA)
ق

`FbNɂƁA̃\tgɂĔ̃v`mCYy܂B

̃IvV́A\tgV[ɂĂ͑ȕׂ邱Ƃ܂B
ӉB

E\[XŜɐ

--------------------------------------------------------------------------
Test6->Test7 (2001/11/03)

EǉIvVWXgɕۑĂȂ̂ŏCB

Ẽ\tgŋN鉹ۂB
IvVǉB
uUpdate before readRegisterv
WX^ǂݍ݂ɂāASPU烌WX^ǂޒOɁADirectSoundobt@XV܂B
ɂASPUŐV̏ԂɍXV̂ŁA萳mȒl擾鎖ł܂B(ADSR{[)
Ɗˑ₷܂B
(DirectSound̍Đ|WVׂړĂȂƌʂ܂)

IvVLɂ鎖ŉłF
FF8...^CgBGM(Demo)AOiÑe[}(Hikutei)
FF9...Disc3.q_Kf̃e[}
NmNX...NmNXgăX{X|̃e[}(BGM59)
hNG7...GfBOBGM
z`2...ʏogBGM(VoA)

ÃIvV̓\tgIт܂B
SPUreadRegister()ĂяoɖtheAudioOut->updateBuffer()̂ŁA
pɂɃWX^ǂݍ݂ƁAȂptH[}Xቺ܂B

FeCYIufXeBj[̃TEh[h
x[^[XyNgAiCU[AASDR{[Esb`ɑ̕px
ANZXĂ邽߁Âׂ|܂B

EtO1̔g`f܂̂ŏCB
_̊mFEłF
Rj[EH[Y...ʉ葱
Xe[g[hEPSSt@CĐɁA͂̉錻

EGx[v𒲐B
fBPC̐Lт@ʂ̒ɁB(܂ł͎l15/16)
\EyʉB
̑c^_̊mFB(݂̎łĂ)

E\[XŜ𐮗B
PSSo͋@\Eo[ũNXB(FPSEłPSSo͂ł悤ɂȂ)
SPUȍ~̃NX̊OˑȂׂ炵B
̑낢B

--------------------------------------------------------------------------
Eternal 1.0->Test6 (2001/10/30)

EXe[^XWX^́uSPU-IRQIItvtOB
Yano̎wEʂ薢̂ŁAXe[^XWX^̒łɎB

ESPU-IRQ܂̍Đ݌vB
SPU-IRQ VP fix̎pɁAS`S`ĂSPU-IRQ܂肳B

ESPU-IRQ VP fix
2̃IvVtB

uSPU IRQ-Wait CPU actionv
SPU-IRQAg`ꎞXgbvāA{̂SPUɉ疽߂𔭂܂őҋ@܂B
{̂邩A0.2b҂Ă{̂ɂȂAĊJ܂B

uSPU IRQ-force interruption Flag7v
VAGubNtO7̎AISPU-IRQ𔭐܂B
AStartAddresstO7ꍇ͔܂B

--------------------------------------------------------------------------
Test4->Test5 (2001/10/08)

EAbout_CAO{bNXɕύXB
andyɃfUCĒ\[X\悤ɂB
tHg̊֌WŃ_CAOkŁA؂Ă...

EXAobt@TCYߋ@\tB
ꉞ߂ĂĂ݂͂...
AɌ܂XA̔xZ@́A͂Wait for XA bufferIɂXA buffer sizeeXAtH[}bǧElɐݒ肷邵Ȃ񂾂...
xɂȂ΁AXA buffer size50炢ɐݒ肷ΗǂbB

ESPU-IRQ̔ʒuCB
Yano̎wEǂAtO7VAGubNSPU-IRQAhXݒ肳ĂƁASPU-IRQĂȂB

Erealtime config windowŗoOCB
realtime config window\ĂāAGUIɖ߂ĕA(or RESET)ƗoO𒼂B

--------------------------------------------------------------------------
Test3->Test4 (2001/09/28)

EGNX|[g֐SPUrender()ǉB
Ƃ肠KbMediaPlayerpɕtĂ݂ǁAɂp@肻B
{̂TEho͂Ă΁A}`XbhɂKvyȂ邵B
({̂SPUrender()ƂȊO̊֐rIɌĂяoȂƂȂt)
\RɌłB(1TvÂ鎖\)

--------------------------------------------------------------------------
Test2->Test3 (2001/09/26)

EPSSo͋@\ǉB
Xe[gZ[u@\ōŏ̉ŎłB
vOCԂ̌݊܂܂łB

