ref: eef4f61c8ab29cc77f5fa4cc21c6f962490fec11
parent: 61937e2a0e13879a574fed50335b1b80220fbeac
author: Olav Sørensen <olav.sorensen@live.no>
date: Tue Feb 4 08:42:07 EST 2020
Remove accidental assembly output file from Visual Studio project
--- a/.gitignore
+++ b/.gitignore
@@ -17,3 +17,4 @@
vs2019_project/pt2-clone/Release/pt2-clone.vcxproj.FileListAbsolute.txt
vs2019_project/pt2-clone/x64/Debug/pt2-clone.vcxproj.FileListAbsolute.txt
*.opendb
+*.cod
--- a/vs2019_project/pt2-clone/Release/pt2_audio.cod
+++ /dev/null
@@ -1,8938 +1,0 @@
-; Listing generated by Microsoft (R) Optimizing Compiler Version 19.24.28315.0
-
-include listing.inc
-
-INCLUDELIB OLDNAMES
-
-PUBLIC ??_C@_0BC@PKEIPOBC@FILTER?5MOD?3?5A1200@ ; `string'
-PUBLIC ??_C@_0BB@ONPMACIL@FILTER?5MOD?3?5A500@ ; `string'
-PUBLIC ??_C@_0CA@DJMKAAEN@Unable?5to?5open?5audio?5device?3?5?$CFs@ ; `string'
-PUBLIC ??_C@_0DO@LPEDDBAN@Unable?5to?5open?5audio?3?5The?5audio@ ; `string'
-PUBLIC ??_C@_0EK@FLPNBHOI@Unable?5to?5open?5audio?3?5The?5sampl@ ; `string'
-PUBLIC ??_C@_0P@MCKMEEL@Out?5of?5memory?$CB@ ; `string'
-PUBLIC ??_C@_0BC@BCFDABOJ@AMIGA?5PANNING?5OFF@ ; `string'
-PUBLIC ??_C@_0BB@LDIONHPE@AMIGA?5PANNING?5ON@ ; `string'
-PUBLIC ??_C@_0BA@ELDAEBLE@OVERWRITE?5FILE?$DP@ ; `string'
-PUBLIC ??_C@_02GMLFBBN@wb@ ; `string'
-PUBLIC ??_C@_0P@KJEHIBPC@FILE?5I?1O?5ERROR@ ; `string'
-PUBLIC ??_C@_0BB@JCAIEAIK@RENDERING?5MOD?4?4?4@ ; `string'
-PUBLIC ??_C@_0N@HDBMFKCM@THREAD?5ERROR@ ; `string'
-PUBLIC forceMixerOff
-EXTRN malloc:PROC
-EXTRN free:PROC
-EXTRN __imp_SDL_CreateThread:PROC
-EXTRN __imp_SDL_UnlockAudioDevice:PROC
-EXTRN __imp_SDL_OpenAudioDevice:PROC
-EXTRN __imp_SDL_CloseAudioDevice:PROC
-EXTRN fwrite:PROC
-EXTRN _stat64i32:PROC
-EXTRN __imp_SDL_LockAudioDevice:PROC
-EXTRN fseek:PROC
-EXTRN __imp_SDL_GetError:PROC
-EXTRN _beginthreadex:PROC
-EXTRN fclose:PROC
-EXTRN fopen:PROC
-EXTRN _endthreadex:PROC
-EXTRN __imp_SDL_PauseAudioDevice:PROC
-EXTRN fputc:PROC
-EXTRN __imp_SDL_DetachThread:PROC
-EXTRN ftell:PROC
-COMM audio:BYTE:0558H
-COMM cpu:WORD
-COMM ?_OptionsStorage@?1??__local_stdio_scanf_options@@9@9:QWORD ; `__local_stdio_scanf_options'::`2'::_OptionsStorage
-COMM editor:BYTE:038f8H
-COMM ?_OptionsStorage@?1??__local_stdio_printf_options@@9@9:QWORD ; `__local_stdio_printf_options'::`2'::_OptionsStorage
-forceMixerOff DB 01H DUP (?)
-COMM input:BYTE:048H
-COMM ptConfig:BYTE:030H
-COMM samplesPerTick:DWORD
-_DATA ENDS
-; COMDAT ??_C@_0N@HDBMFKCM@THREAD?5ERROR@
-CONST SEGMENT
-??_C@_0N@HDBMFKCM@THREAD?5ERROR@ DB 'THREAD ERROR', 00H ; `string'
-CONST ENDS
-; COMDAT ??_C@_0BB@JCAIEAIK@RENDERING?5MOD?4?4?4@
-CONST SEGMENT
-??_C@_0BB@JCAIEAIK@RENDERING?5MOD?4?4?4@ DB 'RENDERING MOD...', 00H ; `string'
-CONST ENDS
-; COMDAT ??_C@_0P@KJEHIBPC@FILE?5I?1O?5ERROR@
-CONST SEGMENT
-??_C@_0P@KJEHIBPC@FILE?5I?1O?5ERROR@ DB 'FILE I/O ERROR', 00H ; `string'
-CONST ENDS
-; COMDAT ??_C@_02GMLFBBN@wb@
-CONST SEGMENT
-??_C@_02GMLFBBN@wb@ DB 'wb', 00H ; `string'
-CONST ENDS
-; COMDAT ??_C@_0BA@ELDAEBLE@OVERWRITE?5FILE?$DP@
-CONST SEGMENT
-??_C@_0BA@ELDAEBLE@OVERWRITE?5FILE?$DP@ DB 'OVERWRITE FILE?', 00H ; `string'
-CONST ENDS
-; COMDAT ??_C@_0BB@LDIONHPE@AMIGA?5PANNING?5ON@
-CONST SEGMENT
-??_C@_0BB@LDIONHPE@AMIGA?5PANNING?5ON@ DB 'AMIGA PANNING ON', 00H ; `string'
-CONST ENDS
-; COMDAT ??_C@_0BC@BCFDABOJ@AMIGA?5PANNING?5OFF@
-CONST SEGMENT
-??_C@_0BC@BCFDABOJ@AMIGA?5PANNING?5OFF@ DB 'AMIGA PANNING OFF', 00H ; `string'
-CONST ENDS
-; COMDAT ??_C@_0P@MCKMEEL@Out?5of?5memory?$CB@
-CONST SEGMENT
-??_C@_0P@MCKMEEL@Out?5of?5memory?$CB@ DB 'Out of memory!', 00H ; `string'
-CONST ENDS
-; COMDAT ??_C@_0EK@FLPNBHOI@Unable?5to?5open?5audio?3?5The?5sampl@
-CONST SEGMENT
-??_C@_0EK@FLPNBHOI@Unable?5to?5open?5audio?3?5The?5sampl@ DB 'Unable to o'
- DB 'pen audio: The sample format (signed 16-bit) couldn''t be use'
- DB 'd!', 00H ; `string'
-CONST ENDS
-; COMDAT ??_C@_0DO@LPEDDBAN@Unable?5to?5open?5audio?3?5The?5audio@
-CONST SEGMENT
-??_C@_0DO@LPEDDBAN@Unable?5to?5open?5audio?3?5The?5audio@ DB 'Unable to o'
- DB 'pen audio: The audio output rate couldn''t be used!', 00H ; `string'
-CONST ENDS
-; COMDAT ??_C@_0CA@DJMKAAEN@Unable?5to?5open?5audio?5device?3?5?$CFs@
-CONST SEGMENT
-??_C@_0CA@DJMKAAEN@Unable?5to?5open?5audio?5device?3?5?$CFs@ DB 'Unable t'
- DB 'o open audio device: %s', 00H ; `string'
-CONST ENDS
-; COMDAT ??_C@_0BB@ONPMACIL@FILTER?5MOD?3?5A500@
-CONST SEGMENT
-??_C@_0BB@ONPMACIL@FILTER?5MOD?3?5A500@ DB 'FILTER MOD: A500', 00H ; `string'
-CONST ENDS
-; COMDAT ??_C@_0BC@PKEIPOBC@FILTER?5MOD?3?5A1200@
-CONST SEGMENT
-??_C@_0BC@PKEIPOBC@FILTER?5MOD?3?5A1200@ DB 'FILTER MOD: A1200', 00H ; `string'
-CONST ENDS
-PUBLIC normalize8bitDoubleSigned
-PUBLIC normalize8bitFloatSigned
-PUBLIC normalize16bitSigned
-PUBLIC normalize32bitSigned
-PUBLIC calcMod2WavTotalRows
-PUBLIC renderToWav
-PUBLIC getAudioFrame
-PUBLIC toggleAmigaPanMode
-PUBLIC mixerClearSampleCounter
-PUBLIC mixerSetSamplesPerTick
-PUBLIC audioClose
-PUBLIC setupAudio
-PUBLIC mixerCalcVoicePans
-PUBLIC outputAudio
-PUBLIC resetDitherSeed
-PUBLIC mixChannels
-PUBLIC toggleA500Filters
-PUBLIC paulaSetData
-PUBLIC paulaSetLength
-PUBLIC paulaSetVolume
-PUBLIC paulaSetPeriod
-PUBLIC resetCachedMixerPeriod
-PUBLIC paulaStartDMA
-PUBLIC paulaStopDMA
-PUBLIC turnOffVoices
-PUBLIC mixerKillVoice
-PUBLIC mixerUpdateLoops
-PUBLIC clearPaulaAndScopes
-PUBLIC unlockAudio
-PUBLIC lockAudio
-PUBLIC lossyIntegratorHighPass
-PUBLIC lossyIntegrator
-PUBLIC calcCoeffLossyIntegrator
-PUBLIC toggleLEDFilter
-PUBLIC setLEDFilter
-PUBLIC fabsf
- ALIGN 4
-
-oldPeriod DW 01H DUP (?)
- ALIGN 4
-
-wavRenderingDone DB 01H DUP (?)
- ALIGN 4
-
-filterLED DB 020H DUP (?)
- ALIGN 8
-
-dMixBufferR DQ 01H DUP (?)
-oldScopeDelta DD 01H DUP (?)
-audioLocked DB 01H DUP (?)
- ALIGN 8
-
-dMixBufferRUnaligned DQ 01H DUP (?)
-maxSamplesToMix DD 01H DUP (?)
- ALIGN 8
-
-dMixBufferL DQ 01H DUP (?)
-filterHi DB 020H DUP (?)
-defStereoSep DB 01H DUP (?)
- ALIGN 4
-
-sampleCounter DD 01H DUP (?)
-ch4Pan DW 01H DUP (?)
- ALIGN 8
-
-dOldVoiceDeltaMul DQ 01H DUP (?)
-blepVol DB 0140H DUP (?)
-ch3Pan DW 01H DUP (?)
- ALIGN 4
-
-ch2Pan DW 01H DUP (?)
- ALIGN 4
-
-blep DB 0140H DUP (?)
-paula DB 01c0H DUP (?)
-dMixBufferLUnaligned DQ 01H DUP (?)
-filterLEDC DB 010H DUP (?)
-amigaPanFlag DB 01H DUP (?)
- ALIGN 4
-
-filterLo DB 020H DUP (?)
- ALIGN 8
-
-dOldVoiceDelta DQ 01H DUP (?)
-dev DD 01H DUP (?)
-filterFlags DB 01H DUP (?)
- ALIGN 4
-
-ch1Pan DW 01H DUP (?)
-_BSS ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$normalize8bitDoubleSigned DD imagerel $LN53
- DD imagerel $LN53+113
- DD imagerel $unwind$normalize8bitDoubleSigned
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$0$normalize8bitDoubleSigned DD imagerel $LN53+113
- DD imagerel $LN53+262
- DD imagerel $chain$0$normalize8bitDoubleSigned
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$1$normalize8bitDoubleSigned DD imagerel $LN53+262
- DD imagerel $LN53+568
- DD imagerel $chain$1$normalize8bitDoubleSigned
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$normalize8bitFloatSigned DD imagerel $LN55
- DD imagerel $LN55+130
- DD imagerel $unwind$normalize8bitFloatSigned
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$0$normalize8bitFloatSigned DD imagerel $LN55+130
- DD imagerel $LN55+281
- DD imagerel $chain$0$normalize8bitFloatSigned
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$1$normalize8bitFloatSigned DD imagerel $LN55+281
- DD imagerel $LN55+584
- DD imagerel $chain$1$normalize8bitFloatSigned
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$normalize16bitSigned DD imagerel $LN37
- DD imagerel $LN37+403
- DD imagerel $unwind$normalize16bitSigned
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$normalize32bitSigned DD imagerel $LN47
- DD imagerel $LN47+603
- DD imagerel $unwind$normalize32bitSigned
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$calcMod2WavTotalRows DD imagerel $LN55
- DD imagerel $LN55+625
- DD imagerel $unwind$calcMod2WavTotalRows
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$renderToWav DD imagerel $LN106
- DD imagerel $LN106+135
- DD imagerel $unwind$renderToWav
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$0$renderToWav DD imagerel $LN106+135
- DD imagerel $LN106+263
- DD imagerel $chain$0$renderToWav
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$2$renderToWav DD imagerel $LN106+263
- DD imagerel $LN106+499
- DD imagerel $chain$2$renderToWav
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$4$renderToWav DD imagerel $LN106+499
- DD imagerel $LN106+609
- DD imagerel $chain$4$renderToWav
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$mod2WavThreadFunc DD imagerel mod2WavThreadFunc
- DD imagerel mod2WavThreadFunc+92
- DD imagerel $unwind$mod2WavThreadFunc
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$5$mod2WavThreadFunc DD imagerel mod2WavThreadFunc+92
- DD imagerel mod2WavThreadFunc+313
- DD imagerel $chain$5$mod2WavThreadFunc
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$6$mod2WavThreadFunc DD imagerel mod2WavThreadFunc+313
- DD imagerel mod2WavThreadFunc+521
- DD imagerel $chain$6$mod2WavThreadFunc
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$getAudioFrame DD imagerel $LN13
- DD imagerel $LN13+51
- DD imagerel $unwind$getAudioFrame
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$0$getAudioFrame DD imagerel $LN13+51
- DD imagerel $LN13+126
- DD imagerel $chain$0$getAudioFrame
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$1$getAudioFrame DD imagerel $LN13+126
- DD imagerel $LN13+140
- DD imagerel $chain$1$getAudioFrame
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$toggleAmigaPanMode DD imagerel $LN36
- DD imagerel $LN36+179
- DD imagerel $unwind$toggleAmigaPanMode
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$audioClose DD imagerel $LN8
- DD imagerel $LN8+123
- DD imagerel $unwind$audioClose
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$setupAudio DD imagerel $LN52
- DD imagerel $LN52+437
- DD imagerel $unwind$setupAudio
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$0$setupAudio DD imagerel $LN52+437
- DD imagerel $LN52+816
- DD imagerel $chain$0$setupAudio
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$1$setupAudio DD imagerel $LN52+816
- DD imagerel $LN52+1071
- DD imagerel $chain$1$setupAudio
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$mixerCalcVoicePans DD imagerel $LN4
- DD imagerel $LN4+123
- DD imagerel $unwind$mixerCalcVoicePans
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$audioCallback DD imagerel audioCallback
- DD imagerel audioCallback+61
- DD imagerel $unwind$audioCallback
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$0$audioCallback DD imagerel audioCallback+61
- DD imagerel audioCallback+143
- DD imagerel $chain$0$audioCallback
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$1$audioCallback DD imagerel audioCallback+143
- DD imagerel audioCallback+154
- DD imagerel $chain$1$audioCallback
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$outputAudio DD imagerel $LN126
- DD imagerel $LN126+32
- DD imagerel $unwind$outputAudio
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$0$outputAudio DD imagerel $LN126+32
- DD imagerel $LN126+72
- DD imagerel $chain$0$outputAudio
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$1$outputAudio DD imagerel $LN126+72
- DD imagerel $LN126+1794
- DD imagerel $chain$1$outputAudio
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$processMixedSamplesA500 DD imagerel processMixedSamplesA500
- DD imagerel processMixedSamplesA500+596
- DD imagerel $unwind$processMixedSamplesA500
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$processMixedSamplesA1200 DD imagerel processMixedSamplesA1200
- DD imagerel processMixedSamplesA1200+516
- DD imagerel $unwind$processMixedSamplesA1200
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$mixChannels DD imagerel $LN67
- DD imagerel $LN67+842
- DD imagerel $unwind$mixChannels
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$paulaSetData DD imagerel $LN5
- DD imagerel $LN5+168
- DD imagerel $unwind$paulaSetData
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$paulaSetPeriod DD imagerel $LN21
- DD imagerel $LN21+74
- DD imagerel $unwind$paulaSetPeriod
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$0$paulaSetPeriod DD imagerel $LN21+74
- DD imagerel $LN21+345
- DD imagerel $chain$0$paulaSetPeriod
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$1$paulaSetPeriod DD imagerel $LN21+345
- DD imagerel $LN21+361
- DD imagerel $chain$1$paulaSetPeriod
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$paulaStartDMA DD imagerel $LN7
- DD imagerel $LN7+217
- DD imagerel $unwind$paulaStartDMA
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$mixerUpdateLoops DD imagerel $LN19
- DD imagerel $LN19+271
- DD imagerel $unwind$mixerUpdateLoops
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$clearPaulaAndScopes DD imagerel $LN58
- DD imagerel $LN58+370
- DD imagerel $unwind$clearPaulaAndScopes
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$unlockAudio DD imagerel $LN6
- DD imagerel $LN6+32
- DD imagerel $unwind$unlockAudio
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$lockAudio DD imagerel $LN6
- DD imagerel $LN6+32
- DD imagerel $unwind$lockAudio
-pdata ENDS
-; COMDAT pdata
-pdata SEGMENT
-$pdata$lossyIntegratorLED DD imagerel lossyIntegratorLED
- DD imagerel lossyIntegratorLED+211
- DD imagerel $unwind$lossyIntegratorLED
- ORG $+2576
-?dFb@?1??calcCoeffLED@@9@9 DQ 03fc0000000000000r ; 0.125 ; `calcCoeffLED'::`2'::dFb
-randSeed DD 012345000H
-_DATA ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$lossyIntegratorLED DD 033001H
- DD 06830H
- DD 02204H
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$lockAudio DD 010401H
- DD 04204H
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$unlockAudio DD 010401H
- DD 04204H
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$clearPaulaAndScopes DD 081401H
- DD 0106414H
- DD 0f5414H
- DD 0e3414H
- DD 07010b214H
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$mixerUpdateLoops DD 062f01H
- DD 06642fH
- DD 07340aH
- DD 07006320aH
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$paulaStartDMA DD 010401H
- DD 04204H
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$chain$1$paulaSetPeriod DD 021H
- DD imagerel $LN21
- DD imagerel $LN21+74
- DD imagerel $unwind$paulaSetPeriod
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$chain$0$paulaSetPeriod DD 020421H
- DD 03404H
- DD imagerel $LN21
- DD imagerel $LN21+74
- DD imagerel $unwind$paulaSetPeriod
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$paulaSetPeriod DD 010401H
- DD 0204H
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$paulaSetData DD 010401H
- DD 04204H
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$mixChannels DD 0124001H
- DD 028840H
- DD 037832H
- DD 04682dH
- DD 012641cH
- DD 011541cH
- DD 010341cH
- DD 0f018921cH
- DD 0d014e016H
- DD 07010c012H
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$processMixedSamplesA1200 DD 051801H
- DD 017818H
- DD 026813H
- DD 06204H
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$processMixedSamplesA500 DD 053001H
- DD 017830H
- DD 02682bH
- DD 06204H
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$chain$1$outputAudio DD 021H
- DD imagerel $LN126
- DD imagerel $LN126+32
- DD imagerel $unwind$outputAudio
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$chain$0$outputAudio DD 020421H
- DD 01e3404H
- DD imagerel $LN126
- DD imagerel $LN126+32
- DD imagerel $unwind$outputAudio
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$outputAudio DD 0b2001H
- DD 0a9820H
- DD 0b881bH
- DD 0c7816H
- DD 0d680fH
- DD 01c010bH
- DD 07004H
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$chain$1$audioCallback DD 021H
- DD imagerel audioCallback
- DD imagerel audioCallback+61
- DD imagerel $unwind$audioCallback
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$chain$0$audioCallback DD 020521H
- DD 067405H
- DD imagerel audioCallback
- DD imagerel audioCallback+61
- DD imagerel $unwind$audioCallback
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$audioCallback DD 040a01H
- DD 07340aH
- DD 06006320aH
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$mixerCalcVoicePans DD 010401H
- DD 04204H
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$chain$1$setupAudio DD 021H
- DD imagerel $LN52
- DD imagerel $LN52+437
- DD imagerel $unwind$setupAudio
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$chain$0$setupAudio DD 020521H
- DD 076805H
- DD imagerel $LN52
- DD imagerel $LN52+437
- DD imagerel $unwind$setupAudio
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$setupAudio DD 020901H
- DD 03002f209H
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$audioClose DD 020601H
- DD 030023206H
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$toggleAmigaPanMode DD 010401H
- DD 04204H
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$chain$1$getAudioFrame DD 021H
- DD imagerel $LN13
- DD imagerel $LN13+51
- DD imagerel $unwind$getAudioFrame
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$chain$0$getAudioFrame DD 020521H
- DD 067405H
- DD imagerel $LN13
- DD imagerel $LN13+51
- DD imagerel $unwind$getAudioFrame
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$getAudioFrame DD 040a01H
- DD 07340aH
- DD 06006320aH
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$chain$6$mod2WavThreadFunc DD 021H
- DD imagerel mod2WavThreadFunc
- DD imagerel mod2WavThreadFunc+92
- DD imagerel $unwind$mod2WavThreadFunc
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$chain$5$mod2WavThreadFunc DD 061821H
- DD 0127418H
- DD 0116410H
- DD 0103408H
- DD imagerel mod2WavThreadFunc
- DD imagerel mod2WavThreadFunc+92
- DD imagerel $unwind$mod2WavThreadFunc
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$mod2WavThreadFunc DD 092d01H
- DD 0ae42dH
- DD 0bd428H
- DD 0cc423H
- DD 0f004c208H
- DD 05002H
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$chain$4$renderToWav DD 020021H
- DD 0e6400H
- DD imagerel $LN106
- DD imagerel $LN106+135
- DD imagerel $unwind$renderToWav
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$chain$2$renderToWav DD 020021H
- DD 0e6400H
- DD imagerel $LN106
- DD imagerel $LN106+135
- DD imagerel $unwind$renderToWav
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$chain$0$renderToWav DD 020521H
- DD 0e6405H
- DD imagerel $LN106
- DD imagerel $LN106+135
- DD imagerel $unwind$renderToWav
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$renderToWav DD 040a01H
- DD 0f340aH
- DD 07006b20aH
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$calcMod2WavTotalRows DD 0a1401H
- DD 0e3414H
- DD 0f0103214H
- DD 0d00ce00eH
- DD 07008c00aH
- DD 050066007H
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$normalize32bitSigned DD 020501H
- DD 013405H
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$normalize16bitSigned DD 041201H
- DD 027412H
- DD 01340dH
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$chain$1$normalize8bitFloatSigned DD 021H
- DD imagerel $LN55
- DD imagerel $LN55+130
- DD imagerel $unwind$normalize8bitFloatSigned
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$chain$0$normalize8bitFloatSigned DD 020421H
- DD 03404H
- DD imagerel $LN55
- DD imagerel $LN55+130
- DD imagerel $unwind$normalize8bitFloatSigned
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$normalize8bitFloatSigned DD 010401H
- DD 0204H
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$chain$1$normalize8bitDoubleSigned DD 021H
- DD imagerel $LN53
- DD imagerel $LN53+113
- DD imagerel $unwind$normalize8bitDoubleSigned
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$chain$0$normalize8bitDoubleSigned DD 020421H
- DD 03404H
- DD imagerel $LN53
- DD imagerel $LN53+113
- DD imagerel $unwind$normalize8bitDoubleSigned
-xdata ENDS
-; COMDAT xdata
-xdata SEGMENT
-$unwind$normalize8bitDoubleSigned DD 010401H
- DD 0204H
-; Function compile flags: /Ogtpy
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_math.h
-; COMDAT fabsf
-_TEXT SEGMENT
-_X$ = 8
-fabsf PROC ; COMDAT
-
-; 672 : return (float)fabs(_X);
-
- 00000 0f 54 05 00 00
- 00 00 andps xmm0, DWORD PTR __xmm@7fffffff7fffffff7fffffff7fffffff
-
-; 673 : }
-
- 00007 c3 ret 0
-fabsf ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\sys\stat.h
-; COMDAT stat
-_TEXT SEGMENT
-_FileName$ = 8
-_Stat$ = 16
-stat PROC ; COMDAT
-
-; 241 : _STATIC_ASSERT(sizeof(struct stat) == sizeof(struct _stat64i32));
-; 242 : return _stat64i32(_FileName, (struct _stat64i32*)_Stat);
-
- 00000 e9 00 00 00 00 jmp _stat64i32
-stat ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT bpm2SmpsPerTick
-_TEXT SEGMENT
-bpm$ = 8
-audioFreq$ = 16
-bpm2SmpsPerTick PROC ; COMDAT
-
-; 82 : {
-
- 00000 44 8b c2 mov r8d, edx
-
-; 83 : uint32_t ciaVal;
-; 84 : double dFreqMul;
-; 85 :
-; 86 : if (bpm == 0)
-
- 00003 85 c9 test ecx, ecx
- 00005 75 03 jne SHORT $LN2@bpm2SmpsPe
-
-; 87 : return 0;
-
- 00007 33 c0 xor eax, eax
-
-; 93 : }
-
- 00009 c3 ret 0
-$LN2@bpm2SmpsPe:
- 0000a 0f 57 c9 xorps xmm1, xmm1
-
-; 88 :
-; 89 : ciaVal = (uint32_t)(1773447 / bpm); // yes, PT truncates here
-
- 0000d 33 d2 xor edx, edx
- 0000f b8 87 0f 1b 00 mov eax, 1773447 ; 001b0f87H
- 00014 0f 57 c0 xorps xmm0, xmm0
- 00017 f7 f1 div ecx
-
-; 90 : dFreqMul = ciaVal * (1.0 / CIA_PAL_CLK);
-; 91 :
-; 92 : return (uint16_t)((audioFreq * dFreqMul) + 0.5);
-
- 00019 f2 49 0f 2a c0 cvtsi2sd xmm0, r8
- 0001e 8b c8 mov ecx, eax
- 00020 f2 48 0f 2a c9 cvtsi2sd xmm1, rcx
- 00025 f2 0f 59 0d 00
- 00 00 00 mulsd xmm1, QWORD PTR __real@3eb7a68b994d1178
- 0002d f2 0f 59 c8 mulsd xmm1, xmm0
- 00031 f2 0f 58 0d 00
- 00 00 00 addsd xmm1, QWORD PTR __real@3fe0000000000000
- 00039 f2 0f 2c c1 cvttsd2si eax, xmm1
-
-; 93 : }
-
- 0003d c3 ret 0
-bpm2SmpsPerTick ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT generateBpmTables
-_TEXT SEGMENT
-generateBpmTables PROC ; COMDAT
-
-; 97 : for (uint32_t i = 32; i <= 255; i++)
-
- 00000 f2 0f 10 2d 00
- 00 00 00 movsd xmm5, QWORD PTR __real@3eb7a68b994d1178
- 00008 4c 8d 1d 00 00
- 00 00 lea r11, OFFSET FLAT:audio
- 0000f f2 0f 10 15 00
- 00 00 00 movsd xmm2, QWORD PTR __real@3fe0000000000000
- 00017 41 b8 20 00 00
- 00 mov r8d, 32 ; 00000020H
- 0001d f2 0f 10 1d 00
- 00 00 00 movsd xmm3, QWORD PTR __real@3fa4d00788ffda07
- 00025 45 33 d2 xor r10d, r10d
- 00028 f2 0f 10 25 00
- 00 00 00 movsd xmm4, QWORD PTR __real@3f9ffff7218ba683
-$LL17@generateBp:
-
-; 86 : if (bpm == 0)
-
- 00030 45 85 c0 test r8d, r8d
- 00033 75 06 jne SHORT $LN18@generateBp
-
-; 87 : return 0;
-
- 00035 41 0f b7 ca movzx ecx, r10w
- 00039 eb 32 jmp SHORT $LN19@generateBp
-$LN18@generateBp:
- 0003b 0f 57 c9 xorps xmm1, xmm1
-
-; 88 :
-; 89 : ciaVal = (uint32_t)(1773447 / bpm); // yes, PT truncates here
-
- 0003e b8 87 0f 1b 00 mov eax, 1773447 ; 001b0f87H
- 00043 33 d2 xor edx, edx
- 00045 0f 57 c0 xorps xmm0, xmm0
- 00048 41 f7 f0 div r8d
- 0004b 8b c8 mov ecx, eax
-
-; 91 :
-; 92 : return (uint16_t)((audioFreq * dFreqMul) + 0.5);
-
- 0004d 8b 05 40 05 00
- 00 mov eax, DWORD PTR audio+1344
- 00053 f2 48 0f 2a c9 cvtsi2sd xmm1, rcx
- 00058 f2 48 0f 2a c0 cvtsi2sd xmm0, rax
- 0005d f2 0f 59 cd mulsd xmm1, xmm5
- 00061 f2 0f 59 c8 mulsd xmm1, xmm0
- 00065 f2 0f 58 ca addsd xmm1, xmm2
- 00069 f2 0f 2c c9 cvttsd2si ecx, xmm1
-$LN19@generateBp:
-
-; 98 : {
-; 99 : audio.bpmTab[i-32] = bpm2SmpsPerTick(i, audio.audioFreq);
-
- 0006d 41 8d 40 e0 lea eax, DWORD PTR [r8-32]
- 00071 44 8b c8 mov r9d, eax
- 00074 66 41 89 0c 43 mov WORD PTR [r11+rax*2], cx
-
-; 86 : if (bpm == 0)
-
- 00079 45 85 c0 test r8d, r8d
- 0007c 75 06 jne SHORT $LN20@generateBp
-
-; 87 : return 0;
-
- 0007e 41 0f b7 c2 movzx eax, r10w
- 00082 eb 20 jmp SHORT $LN21@generateBp
-$LN20@generateBp:
- 00084 0f 57 c0 xorps xmm0, xmm0
-
-; 88 :
-; 89 : ciaVal = (uint32_t)(1773447 / bpm); // yes, PT truncates here
-
- 00087 33 d2 xor edx, edx
- 00089 b8 87 0f 1b 00 mov eax, 1773447 ; 001b0f87H
- 0008e 41 f7 f0 div r8d
- 00091 8b c8 mov ecx, eax
-
-; 90 : dFreqMul = ciaVal * (1.0 / CIA_PAL_CLK);
-
- 00093 f2 48 0f 2a c1 cvtsi2sd xmm0, rcx
-
-; 91 :
-; 92 : return (uint16_t)((audioFreq * dFreqMul) + 0.5);
-
- 00098 f2 0f 59 c3 mulsd xmm0, xmm3
- 0009c f2 0f 58 c2 addsd xmm0, xmm2
- 000a0 f2 0f 2c c0 cvttsd2si eax, xmm0
-$LN21@generateBp:
-
-; 100 : audio.bpmTab28kHz[i-32] = bpm2SmpsPerTick(i, 28836);
-
- 000a4 66 43 89 84 4b
- c0 01 00 00 mov WORD PTR [r11+r9*2+448], ax
-
-; 86 : if (bpm == 0)
-
- 000ad 45 85 c0 test r8d, r8d
- 000b0 75 06 jne SHORT $LN22@generateBp
-
-; 87 : return 0;
-
- 000b2 41 0f b7 c2 movzx eax, r10w
- 000b6 eb 20 jmp SHORT $LN23@generateBp
-$LN22@generateBp:
- 000b8 0f 57 c0 xorps xmm0, xmm0
-
-; 88 :
-; 89 : ciaVal = (uint32_t)(1773447 / bpm); // yes, PT truncates here
-
- 000bb 33 d2 xor edx, edx
- 000bd b8 87 0f 1b 00 mov eax, 1773447 ; 001b0f87H
- 000c2 41 f7 f0 div r8d
- 000c5 8b c8 mov ecx, eax
-
-; 90 : dFreqMul = ciaVal * (1.0 / CIA_PAL_CLK);
-
- 000c7 f2 48 0f 2a c1 cvtsi2sd xmm0, rcx
-
-; 91 :
-; 92 : return (uint16_t)((audioFreq * dFreqMul) + 0.5);
-
- 000cc f2 0f 59 c4 mulsd xmm0, xmm4
- 000d0 f2 0f 58 c2 addsd xmm0, xmm2
- 000d4 f2 0f 2c c0 cvttsd2si eax, xmm0
-$LN23@generateBp:
-
-; 97 : for (uint32_t i = 32; i <= 255; i++)
-
- 000d8 41 ff c0 inc r8d
-
-; 101 : audio.bpmTab22kHz[i-32] = bpm2SmpsPerTick(i, 22168);
-
- 000db 66 43 89 84 4b
- 80 03 00 00 mov WORD PTR [r11+r9*2+896], ax
- 000e4 41 81 f8 ff 00
- 00 00 cmp r8d, 255 ; 000000ffH
- 000eb 0f 86 3f ff ff
- ff jbe $LL17@generateBp
-
-; 102 : }
-; 103 : }
-
- 000f1 c3 ret 0
-generateBpmTables ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT setLEDFilter
-_TEXT SEGMENT
-state$ = 8
-setLEDFilter PROC ; COMDAT
-
-; 107 : editor.useLEDFilter = state;
-; 108 :
-; 109 : if (editor.useLEDFilter)
-
- 00000 0f b6 05 00 00
- 00 00 movzx eax, BYTE PTR filterFlags
- 00007 88 0d 13 01 00
- 00 mov BYTE PTR editor+275, cl
- 0000d 84 c9 test cl, cl
- 0000f 74 09 je SHORT $LN2@setLEDFilt
-
-; 110 : filterFlags |= FILTER_LED_ENABLED;
-
- 00011 0c 02 or al, 2
-
-; 113 : }
-
- 00013 88 05 00 00 00
- 00 mov BYTE PTR filterFlags, al
- 00019 c3 ret 0
-$LN2@setLEDFilt:
-
-; 111 : else
-; 112 : filterFlags &= ~FILTER_LED_ENABLED;
-
- 0001a 24 fd and al, -3
-
-; 113 : }
-
- 0001c 88 05 00 00 00
- 00 mov BYTE PTR filterFlags, al
- 00022 c3 ret 0
-setLEDFilter ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT toggleLEDFilter
-_TEXT SEGMENT
-toggleLEDFilter PROC ; COMDAT
-
-; 117 : editor.useLEDFilter ^= 1;
-
- 00000 0f b6 05 13 01
- 00 00 movzx eax, BYTE PTR editor+275
- 00007 34 01 xor al, 1
- 00009 0f 95 05 13 01
- 00 00 setne BYTE PTR editor+275
- 00010 84 c0 test al, al
-
-; 118 :
-; 119 : if (editor.useLEDFilter)
-
- 00012 0f b6 05 00 00
- 00 00 movzx eax, BYTE PTR filterFlags
- 00019 74 09 je SHORT $LN2@toggleLEDF
-
-; 120 : filterFlags |= FILTER_LED_ENABLED;
-
- 0001b 0c 02 or al, 2
-
-; 123 : }
-
- 0001d 88 05 00 00 00
- 00 mov BYTE PTR filterFlags, al
- 00023 c3 ret 0
-$LN2@toggleLEDF:
-
-; 121 : else
-; 122 : filterFlags &= ~FILTER_LED_ENABLED;
-
- 00024 24 fd and al, -3
-
-; 123 : }
-
- 00026 88 05 00 00 00
- 00 mov BYTE PTR filterFlags, al
- 0002c c3 ret 0
-toggleLEDFilter ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT calcCoeffLED
-_TEXT SEGMENT
-dSr$ = 8
-dHz$ = 16
-filter$dead$ = 24
-calcCoeffLED PROC ; COMDAT
-
-; 127 : static double dFb = 0.125;
-; 128 :
-; 129 : #ifndef NO_FILTER_FINETUNING
-; 130 : /* 8bitbubsy: makes the filter curve sound (and look) much closer to the real deal.
-; 131 : ** This has been tested against both an A500 and A1200 (real units). */
-; 132 : dFb *= 0.62;
-
- 00000 f2 0f 10 25 00
- 00 00 00 movsd xmm4, QWORD PTR ?dFb@?1??calcCoeffLED@@9@9
-
-; 133 : #endif
-; 134 :
-; 135 : if (dHz < dSr/2.0)
-
- 00008 0f 28 d0 movaps xmm2, xmm0
- 0000b f2 0f 59 15 00
- 00 00 00 mulsd xmm2, QWORD PTR __real@3fe0000000000000
- 00013 f2 0f 59 25 00
- 00 00 00 mulsd xmm4, QWORD PTR __real@3fe3d70a3d70a3d7
- 0001b f2 0f 10 1d 00
- 00 00 00 movsd xmm3, QWORD PTR __real@3ff0000000000000
- 00023 66 0f 2f ca comisd xmm1, xmm2
- 00027 f2 0f 11 25 00
- 00 00 00 movsd QWORD PTR ?dFb@?1??calcCoeffLED@@9@9, xmm4
- 0002f 73 16 jae SHORT $LN2@calcCoeffL
-
-; 136 : filter->dLed = ((2.0 * M_PI) * dHz) / dSr;
-
- 00031 f2 0f 59 0d 00
- 00 00 00 mulsd xmm1, QWORD PTR __real@401921fb54442d18
- 00039 f2 0f 5e c8 divsd xmm1, xmm0
- 0003d f2 0f 11 0d 00
- 00 00 00 movsd QWORD PTR filterLEDC, xmm1
- 00045 eb 0b jmp SHORT $LN3@calcCoeffL
-$LN2@calcCoeffL:
-
-; 137 : else
-; 138 : filter->dLed = 1.0;
-
- 00047 f2 0f 11 1d 00
- 00 00 00 movsd QWORD PTR filterLEDC, xmm3
- 0004f 0f 28 cb movaps xmm1, xmm3
-$LN3@calcCoeffL:
-
-; 139 :
-; 140 : filter->dLedFb = dFb + (dFb / (1.0 - filter->dLed)); // Q ~= 1/sqrt(2) (Butterworth)
-
- 00052 f2 0f 5c d9 subsd xmm3, xmm1
- 00056 0f 28 c4 movaps xmm0, xmm4
- 00059 f2 0f 5e c3 divsd xmm0, xmm3
- 0005d f2 0f 58 c4 addsd xmm0, xmm4
- 00061 f2 0f 11 05 08
- 00 00 00 movsd QWORD PTR filterLEDC+8, xmm0
-
-; 141 : }
-
- 00069 c3 ret 0
-calcCoeffLED ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT calcCoeffLossyIntegrator
-_TEXT SEGMENT
-dSr$ = 8
-dHz$ = 16
-filter$ = 24
-calcCoeffLossyIntegrator PROC ; COMDAT
-
-; 145 : double dOmega = ((2.0 * M_PI) * dHz) / dSr;
-; 146 : filter->b0 = 1.0 / (1.0 + (1.0 / dOmega));
-
- 00000 f2 0f 10 1d 00
- 00 00 00 movsd xmm3, QWORD PTR __real@3ff0000000000000
- 00008 f2 0f 59 0d 00
- 00 00 00 mulsd xmm1, QWORD PTR __real@401921fb54442d18
- 00010 0f 28 d3 movaps xmm2, xmm3
- 00013 f2 0f 5e c8 divsd xmm1, xmm0
- 00017 0f 28 c3 movaps xmm0, xmm3
- 0001a f2 0f 5e d1 divsd xmm2, xmm1
- 0001e f2 0f 58 d3 addsd xmm2, xmm3
- 00022 f2 0f 5e c2 divsd xmm0, xmm2
-
-; 147 : filter->b1 = 1.0 - filter->b0;
-
- 00026 f2 0f 5c d8 subsd xmm3, xmm0
- 0002a f2 41 0f 11 40
- 10 movsd QWORD PTR [r8+16], xmm0
- 00030 f2 41 0f 11 58
- 18 movsd QWORD PTR [r8+24], xmm3
-
-; 148 : }
-
- 00036 c3 ret 0
-calcCoeffLossyIntegrator ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT clearLossyIntegrator
-_TEXT SEGMENT
-filter$ = 8
-clearLossyIntegrator PROC ; COMDAT
-
-; 152 : filter->dBuffer[0] = 0.0; // L
-
- 00000 33 c0 xor eax, eax
- 00002 48 89 01 mov QWORD PTR [rcx], rax
- 00005 48 89 41 08 mov QWORD PTR [rcx+8], rax
-
-; 153 : filter->dBuffer[1] = 0.0; // R
-; 154 : }
-
- 00009 c3 ret 0
-clearLossyIntegrator ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT clearLEDFilter
-_TEXT SEGMENT
-filter$dead$ = 8
-clearLEDFilter PROC ; COMDAT
-
-; 157 : {
-
- 00000 0f 57 c0 xorps xmm0, xmm0
- 00003 0f 57 c9 xorps xmm1, xmm1
-
-; 158 : filter->dLed[0] = 0.0; // L
-
- 00006 0f 11 05 00 00
- 00 00 movups XMMWORD PTR filterLED, xmm0
- 0000d 0f 11 0d 10 00
- 00 00 movups XMMWORD PTR filterLED+16, xmm1
-
-; 159 : filter->dLed[1] = 0.0;
-; 160 : filter->dLed[2] = 0.0; // R
-; 161 : filter->dLed[3] = 0.0;
-; 162 : }
-
- 00014 c3 ret 0
-clearLEDFilter ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT lossyIntegratorLED
-_TEXT SEGMENT
-filterC$ = 32
-filter$dead$ = 40
-dIn$ = 48
-dOut$ = 56
-lossyIntegratorLED PROC ; COMDAT
-
-; 165 : {
-
- 00000 48 83 ec 18 sub rsp, 24
-
-; 166 : // left channel "LED" filter
-; 167 : filter->dLed[0] += filterC.dLed * (dIn[0] - filter->dLed[0])
-
- 00004 f2 41 0f 10 08 movsd xmm1, QWORD PTR [r8]
- 00009 f2 0f 10 1d 00
- 00 00 00 movsd xmm3, QWORD PTR filterLED
- 00011 f2 0f 10 15 08
- 00 00 00 movsd xmm2, QWORD PTR filterLED+8
- 00019 f2 0f 5c cb subsd xmm1, xmm3
- 0001d f2 0f 10 25 00
- 00 00 00 movsd xmm4, QWORD PTR __real@3ddb7cdfd9d7bdbb
- 00025 0f 28 c3 movaps xmm0, xmm3
- 00028 f2 0f 5c c2 subsd xmm0, xmm2
- 0002c 0f 29 34 24 movaps XMMWORD PTR [rsp], xmm6
- 00030 f2 0f 10 31 movsd xmm6, QWORD PTR [rcx]
- 00034 f2 0f 59 ce mulsd xmm1, xmm6
- 00038 f2 0f 59 41 08 mulsd xmm0, QWORD PTR [rcx+8]
- 0003d f2 0f 58 c8 addsd xmm1, xmm0
- 00041 f2 0f 58 cc addsd xmm1, xmm4
- 00045 f2 0f 58 d9 addsd xmm3, xmm1
- 00049 f2 0f 11 1d 00
- 00 00 00 movsd QWORD PTR filterLED, xmm3
-
-; 168 : + filterC.dLedFb * (filter->dLed[0] - filter->dLed[1]) + DENORMAL_OFFSET;
-; 169 : filter->dLed[1] += filterC.dLed * (filter->dLed[0] - filter->dLed[1]) + DENORMAL_OFFSET;
-
- 00051 f2 0f 5c da subsd xmm3, xmm2
- 00055 f2 0f 59 de mulsd xmm3, xmm6
- 00059 f2 0f 58 dc addsd xmm3, xmm4
- 0005d f2 0f 58 d3 addsd xmm2, xmm3
- 00061 f2 0f 11 15 08
- 00 00 00 movsd QWORD PTR filterLED+8, xmm2
-
-; 170 : dOut[0] = filter->dLed[1];
-
- 00069 f2 41 0f 11 11 movsd QWORD PTR [r9], xmm2
-
-; 171 :
-; 172 : // right channel "LED" filter
-; 173 : filter->dLed[2] += filterC.dLed * (dIn[1] - filter->dLed[2])
-
- 0006e f2 0f 10 1d 10
- 00 00 00 movsd xmm3, QWORD PTR filterLED+16
- 00076 f2 0f 10 15 18
- 00 00 00 movsd xmm2, QWORD PTR filterLED+24
- 0007e 0f 28 c3 movaps xmm0, xmm3
- 00081 f2 41 0f 10 48
- 08 movsd xmm1, QWORD PTR [r8+8]
- 00087 f2 0f 5c c2 subsd xmm0, xmm2
- 0008b f2 0f 5c cb subsd xmm1, xmm3
- 0008f f2 0f 59 41 08 mulsd xmm0, QWORD PTR [rcx+8]
- 00094 f2 0f 59 ce mulsd xmm1, xmm6
- 00098 f2 0f 58 c8 addsd xmm1, xmm0
- 0009c f2 0f 58 cc addsd xmm1, xmm4
- 000a0 f2 0f 58 d9 addsd xmm3, xmm1
- 000a4 f2 0f 11 1d 10
- 00 00 00 movsd QWORD PTR filterLED+16, xmm3
-
-; 174 : + filterC.dLedFb * (filter->dLed[2] - filter->dLed[3]) + DENORMAL_OFFSET;
-; 175 : filter->dLed[3] += filterC.dLed * (filter->dLed[2] - filter->dLed[3]) + DENORMAL_OFFSET;
-
- 000ac f2 0f 5c da subsd xmm3, xmm2
- 000b0 f2 0f 59 de mulsd xmm3, xmm6
-
-; 176 : dOut[1] = filter->dLed[3];
-; 177 : }
-
- 000b4 0f 28 34 24 movaps xmm6, XMMWORD PTR [rsp]
- 000b8 f2 0f 58 dc addsd xmm3, xmm4
- 000bc f2 0f 58 d3 addsd xmm2, xmm3
- 000c0 f2 0f 11 15 18
- 00 00 00 movsd QWORD PTR filterLED+24, xmm2
- 000c8 f2 41 0f 11 51
- 08 movsd QWORD PTR [r9+8], xmm2
- 000ce 48 83 c4 18 add rsp, 24
- 000d2 c3 ret 0
-lossyIntegratorLED ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT lossyIntegrator
-_TEXT SEGMENT
-filter$ = 8
-dIn$ = 16
-dOut$ = 24
-lossyIntegrator PROC ; COMDAT
-
-; 181 : /* Low-pass filter implementation taken from:
-; 182 : ** https://bel.fi/alankila/modguide/interpolate.txt
-; 183 : **
-; 184 : ** This implementation has a less smooth cutoff curve compared to the old one, so it's
-; 185 : ** maybe not the best. However, I stick to this one because it has a higher gain
-; 186 : ** at the end of the curve (closer to real tested Amiga 500). It also sounds much closer when
-; 187 : ** comparing whitenoise on an A500. */
-; 188 :
-; 189 : // left channel low-pass
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 00000 f2 0f 10 09 movsd xmm1, QWORD PTR [rcx]
- 00004 f2 0f 59 49 18 mulsd xmm1, QWORD PTR [rcx+24]
- 00009 f2 0f 10 41 10 movsd xmm0, QWORD PTR [rcx+16]
- 0000e f2 0f 59 02 mulsd xmm0, QWORD PTR [rdx]
- 00012 f2 0f 58 c8 addsd xmm1, xmm0
- 00016 f2 0f 58 0d 00
- 00 00 00 addsd xmm1, QWORD PTR __real@3ddb7cdfd9d7bdbb
- 0001e f2 0f 11 09 movsd QWORD PTR [rcx], xmm1
-
-; 191 : dOut[0] = filter->dBuffer[0];
-
- 00022 f2 41 0f 11 08 movsd QWORD PTR [r8], xmm1
-
-; 192 :
-; 193 : // right channel low-pass
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 00027 f2 0f 10 4a 08 movsd xmm1, QWORD PTR [rdx+8]
- 0002c f2 0f 10 41 08 movsd xmm0, QWORD PTR [rcx+8]
- 00031 f2 0f 59 49 10 mulsd xmm1, QWORD PTR [rcx+16]
- 00036 f2 0f 59 41 18 mulsd xmm0, QWORD PTR [rcx+24]
- 0003b f2 0f 58 c8 addsd xmm1, xmm0
- 0003f f2 0f 58 0d 00
- 00 00 00 addsd xmm1, QWORD PTR __real@3ddb7cdfd9d7bdbb
- 00047 f2 0f 11 49 08 movsd QWORD PTR [rcx+8], xmm1
-
-; 195 : dOut[1] = filter->dBuffer[1];
-
- 0004c f2 41 0f 11 48
- 08 movsd QWORD PTR [r8+8], xmm1
-
-; 196 : }
-
- 00052 c3 ret 0
-lossyIntegrator ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT lossyIntegratorHighPass
-_TEXT SEGMENT
-filter$ = 8
-dIn$ = 16
-dOut$ = 24
-lossyIntegratorHighPass PROC ; COMDAT
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 00000 f2 0f 10 51 18 movsd xmm2, QWORD PTR [rcx+24]
- 00005 f2 0f 10 61 10 movsd xmm4, QWORD PTR [rcx+16]
- 0000a 0f 28 da movaps xmm3, xmm2
- 0000d f2 0f 59 19 mulsd xmm3, QWORD PTR [rcx]
- 00011 0f 28 c4 movaps xmm0, xmm4
- 00014 f2 0f 59 02 mulsd xmm0, QWORD PTR [rdx]
-
-; 191 : dOut[0] = filter->dBuffer[0];
-; 192 :
-; 193 : // right channel low-pass
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 00018 f2 0f 59 51 08 mulsd xmm2, QWORD PTR [rcx+8]
- 0001d f2 0f 58 d8 addsd xmm3, xmm0
- 00021 f2 0f 58 1d 00
- 00 00 00 addsd xmm3, QWORD PTR __real@3ddb7cdfd9d7bdbb
- 00029 f2 0f 11 19 movsd QWORD PTR [rcx], xmm3
- 0002d f2 0f 59 62 08 mulsd xmm4, QWORD PTR [rdx+8]
- 00032 f2 0f 58 e2 addsd xmm4, xmm2
- 00036 f2 0f 58 25 00
- 00 00 00 addsd xmm4, QWORD PTR __real@3ddb7cdfd9d7bdbb
- 0003e f2 0f 11 61 08 movsd QWORD PTR [rcx+8], xmm4
-
-; 200 : double dLow[2];
-; 201 :
-; 202 : lossyIntegrator(filter, dIn, dLow);
-; 203 :
-; 204 : dOut[0] = dIn[0] - dLow[0]; // left channel high-pass
-
- 00043 f2 0f 10 02 movsd xmm0, QWORD PTR [rdx]
- 00047 f2 0f 5c c3 subsd xmm0, xmm3
- 0004b f2 41 0f 11 00 movsd QWORD PTR [r8], xmm0
- 00050 f2 0f 10 4a 08 movsd xmm1, QWORD PTR [rdx+8]
- 00055 f2 0f 5c cc subsd xmm1, xmm4
- 00059 f2 41 0f 11 48
- 08 movsd QWORD PTR [r8+8], xmm1
-
-; 205 : dOut[1] = dIn[1] - dLow[1]; // right channel high-pass
-; 206 : }
-
- 0005f c3 ret 0
-lossyIntegratorHighPass ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT sinApx
-_TEXT SEGMENT
-fX$ = 8
-sinApx PROC ; COMDAT
-
-; 215 : fX = fX * (2.0 - fX);
-
- 00000 f2 0f 10 0d 00
- 00 00 00 movsd xmm1, QWORD PTR __real@4000000000000000
- 00008 0f 28 d0 movaps xmm2, xmm0
- 0000b f2 0f 5c c8 subsd xmm1, xmm0
- 0000f f2 0f 59 d1 mulsd xmm2, xmm1
-
-; 216 : return fX * 1.09742972 + fX * fX * 0.31678383;
-
- 00013 0f 28 c2 movaps xmm0, xmm2
- 00016 f2 0f 59 c2 mulsd xmm0, xmm2
- 0001a f2 0f 59 15 00
- 00 00 00 mulsd xmm2, QWORD PTR __real@3ff18f127750ef5c
- 00022 f2 0f 59 05 00
- 00 00 00 mulsd xmm0, QWORD PTR __real@3fd4462faf701a9a
- 0002a f2 0f 58 c2 addsd xmm0, xmm2
-
-; 217 : }
-
- 0002e c3 ret 0
-sinApx ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT cosApx
-_TEXT SEGMENT
-fX$ = 8
-cosApx PROC ; COMDAT
-
-; 221 : fX = (1.0 - fX) * (1.0 + fX);
-
- 00000 f2 0f 10 15 00
- 00 00 00 movsd xmm2, QWORD PTR __real@3ff0000000000000
- 00008 f2 0f 5c d0 subsd xmm2, xmm0
- 0000c f2 0f 58 05 00
- 00 00 00 addsd xmm0, QWORD PTR __real@3ff0000000000000
- 00014 f2 0f 59 d0 mulsd xmm2, xmm0
-
-; 222 : return fX * 1.09742972 + fX * fX * 0.31678383;
-
- 00018 0f 28 c2 movaps xmm0, xmm2
- 0001b f2 0f 59 c2 mulsd xmm0, xmm2
- 0001f f2 0f 59 15 00
- 00 00 00 mulsd xmm2, QWORD PTR __real@3ff18f127750ef5c
- 00027 f2 0f 59 05 00
- 00 00 00 mulsd xmm0, QWORD PTR __real@3fd4462faf701a9a
- 0002f f2 0f 58 c2 addsd xmm0, xmm2
-
-; 223 : }
-
- 00033 c3 ret 0
-cosApx ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT lockAudio
-_TEXT SEGMENT
-lockAudio PROC ; COMDAT
-
-; 226 : {
-
-$LN6:
- 00000 48 83 ec 28 sub rsp, 40 ; 00000028H
-
-; 227 : if (dev != 0)
-
- 00004 8b 0d 00 00 00
- 00 mov ecx, DWORD PTR dev
- 0000a 85 c9 test ecx, ecx
- 0000c 74 06 je SHORT $LN4@lockAudio
-
-; 228 : SDL_LockAudioDevice(dev);
-
- 0000e ff 15 00 00 00
- 00 call QWORD PTR __imp_SDL_LockAudioDevice
-$LN4@lockAudio:
-
-; 229 :
-; 230 : audioLocked = true;
-; 231 : }
-
- 00014 c6 05 00 00 00
- 00 01 mov BYTE PTR audioLocked, 1
- 0001b 48 83 c4 28 add rsp, 40 ; 00000028H
- 0001f c3 ret 0
-lockAudio ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT unlockAudio
-_TEXT SEGMENT
-unlockAudio PROC ; COMDAT
-
-; 234 : {
-
-$LN6:
- 00000 48 83 ec 28 sub rsp, 40 ; 00000028H
-
-; 235 : if (dev != 0)
-
- 00004 8b 0d 00 00 00
- 00 mov ecx, DWORD PTR dev
- 0000a 85 c9 test ecx, ecx
- 0000c 74 06 je SHORT $LN4@unlockAudi
-
-; 236 : SDL_UnlockAudioDevice(dev);
-
- 0000e ff 15 00 00 00
- 00 call QWORD PTR __imp_SDL_UnlockAudioDevice
-$LN4@unlockAudi:
-
-; 237 :
-; 238 : audioLocked = false;
-; 239 : }
-
- 00014 c6 05 00 00 00
- 00 00 mov BYTE PTR audioLocked, 0
- 0001b 48 83 c4 28 add rsp, 40 ; 00000028H
- 0001f c3 ret 0
-unlockAudio ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_scopes.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT clearPaulaAndScopes
-_TEXT SEGMENT
-dOldPanL$ = 32
-dOldPanR$ = 64
-clearPaulaAndScopes PROC ; COMDAT
-
-; 242 : {
-
-$LN58:
- 00000 48 89 5c 24 08 mov QWORD PTR [rsp+8], rbx
- 00005 48 89 6c 24 10 mov QWORD PTR [rsp+16], rbp
- 0000a 48 89 74 24 18 mov QWORD PTR [rsp+24], rsi
- 0000f 57 push rdi
- 00010 48 83 ec 60 sub rsp, 96 ; 00000060H
-
-; 243 : uint8_t i;
-; 244 : double dOldPanL[4], dOldPanR[4];
-; 245 :
-; 246 : // copy old pans
-; 247 : for (i = 0; i < AMIGA_VOICES; i++)
-
- 00014 48 8d 1d 68 00
- 00 00 lea rbx, OFFSET FLAT:paula+104
- 0001b 33 ff xor edi, edi
- 0001d be 04 00 00 00 mov esi, 4
- 00022 48 8b cb mov rcx, rbx
- 00025 8b d7 mov edx, edi
- 00027 44 8b c6 mov r8d, esi
- 0002a 66 0f 1f 44 00
- 00 npad 6
-$LL4@clearPaula:
-
-; 248 : {
-; 249 : dOldPanL[i] = paula[i].dPanL;
-
- 00030 48 8b 41 f8 mov rax, QWORD PTR [rcx-8]
- 00034 48 8d 49 70 lea rcx, QWORD PTR [rcx+112]
- 00038 48 89 44 14 20 mov QWORD PTR dOldPanL$[rsp+rdx], rax
- 0003d 48 8d 52 08 lea rdx, QWORD PTR [rdx+8]
-
-; 250 : dOldPanR[i] = paula[i].dPanR;
-
- 00041 48 8b 41 90 mov rax, QWORD PTR [rcx-112]
- 00045 48 89 44 14 38 mov QWORD PTR dOldPanR$[rsp+rdx-8], rax
- 0004a 49 83 e8 01 sub r8, 1
- 0004e 75 e0 jne SHORT $LL4@clearPaula
-
-; 227 : if (dev != 0)
-
- 00050 8b 2d 00 00 00
- 00 mov ebp, DWORD PTR dev
- 00056 85 ed test ebp, ebp
- 00058 74 0e je SHORT $LN10@clearPaula
-
-; 228 : SDL_LockAudioDevice(dev);
-
- 0005a 8b cd mov ecx, ebp
- 0005c ff 15 00 00 00
- 00 call QWORD PTR __imp_SDL_LockAudioDevice
- 00062 8b 2d 00 00 00
- 00 mov ebp, DWORD PTR dev
-$LN10@clearPaula:
-
-; 251 : }
-; 252 :
-; 253 : lockAudio();
-; 254 : memset(paula, 0, sizeof (paula));
-
- 00068 33 d2 xor edx, edx
-
-; 230 : audioLocked = true;
-
- 0006a c6 05 00 00 00
- 00 01 mov BYTE PTR audioLocked, 1
-
-; 251 : }
-; 252 :
-; 253 : lockAudio();
-; 254 : memset(paula, 0, sizeof (paula));
-
- 00071 41 b8 c0 01 00
- 00 mov r8d, 448 ; 000001c0H
- 00077 48 8d 0d 00 00
- 00 00 lea rcx, OFFSET FLAT:paula
- 0007e e8 00 00 00 00 call memset
-
-; 235 : if (dev != 0)
-
- 00083 85 ed test ebp, ebp
- 00085 74 08 je SHORT $LN13@clearPaula
-
-; 236 : SDL_UnlockAudioDevice(dev);
-
- 00087 8b cd mov ecx, ebp
- 00089 ff 15 00 00 00
- 00 call QWORD PTR __imp_SDL_UnlockAudioDevice
-$LN13@clearPaula:
-
-; 237 :
-; 238 : audioLocked = false;
-
- 0008f 40 88 3d 00 00
- 00 00 mov BYTE PTR audioLocked, dil
- 00096 48 8b ce mov rcx, rsi
- 00099 0f 1f 80 00 00
- 00 00 npad 7
-$LL7@clearPaula:
-
-; 255 : unlockAudio();
-; 256 :
-; 257 : // store old pans
-; 258 : for (i = 0; i < AMIGA_VOICES; i++)
-; 259 : {
-; 260 : paula[i].dPanL = dOldPanL[i];
-
- 000a0 48 8b 44 3c 20 mov rax, QWORD PTR dOldPanL$[rsp+rdi]
- 000a5 48 8d 7f 08 lea rdi, QWORD PTR [rdi+8]
- 000a9 48 89 43 f8 mov QWORD PTR [rbx-8], rax
- 000ad 48 8d 5b 70 lea rbx, QWORD PTR [rbx+112]
-
-; 261 : paula[i].dPanR = dOldPanR[i];
-
- 000b1 48 8b 44 3c 38 mov rax, QWORD PTR dOldPanR$[rsp+rdi-8]
- 000b6 48 89 43 90 mov QWORD PTR [rbx-112], rax
- 000ba 48 83 e9 01 sub rcx, 1
- 000be 75 e0 jne SHORT $LL7@clearPaula
-$LL21@clearPaula:
-; File C:\Programming\pt2-clone\src\pt2_scopes.c
-
-; 407 : while (scopesReading);
-
- 000c0 0f b6 05 00 00
- 00 00 movzx eax, BYTE PTR scopesReading
- 000c7 84 c0 test al, al
- 000c9 75 f5 jne SHORT $LL21@clearPaula
- 000cb 0f 57 c0 xorps xmm0, xmm0
-
-; 414 : memset(scope, 0, sizeof (scope));
-
- 000ce 48 8d 05 0c 00
- 00 00 lea rax, OFFSET FLAT:scope+12
- 000d5 0f 11 05 00 00
- 00 00 movups XMMWORD PTR scope, xmm0
- 000dc 48 8d 0d 0c 00
- 00 00 lea rcx, OFFSET FLAT:scopeExt+12
- 000e3 0f 11 05 10 00
- 00 00 movups XMMWORD PTR scope+16, xmm0
- 000ea 0f 11 05 20 00
- 00 00 movups XMMWORD PTR scope+32, xmm0
- 000f1 0f 11 05 30 00
- 00 00 movups XMMWORD PTR scope+48, xmm0
- 000f8 0f 11 05 40 00
- 00 00 movups XMMWORD PTR scope+64, xmm0
- 000ff 0f 11 05 50 00
- 00 00 movups XMMWORD PTR scope+80, xmm0
- 00106 0f 11 05 60 00
- 00 00 movups XMMWORD PTR scope+96, xmm0
- 0010d 0f 11 05 70 00
- 00 00 movups XMMWORD PTR scope+112, xmm0
-
-; 415 : memset(scopeExt, 0, sizeof (scopeExt));
-
- 00114 0f 11 05 00 00
- 00 00 movups XMMWORD PTR scopeExt, xmm0
- 0011b 0f 11 05 10 00
- 00 00 movups XMMWORD PTR scopeExt+16, xmm0
- 00122 0f 11 05 20 00
- 00 00 movups XMMWORD PTR scopeExt+32, xmm0
- 00129 0f 11 05 30 00
- 00 00 movups XMMWORD PTR scopeExt+48, xmm0
- 00130 0f 11 05 40 00
- 00 00 movups XMMWORD PTR scopeExt+64, xmm0
- 00137 0f 11 05 50 00
- 00 00 movups XMMWORD PTR scopeExt+80, xmm0
- 0013e 66 90 npad 2
-$LL18@clearPaula:
-
-; 416 :
-; 417 : for (uint8_t i = 0; i < AMIGA_VOICES; i++)
-; 418 : scope[i].length = scopeExt[i].newLength = 2;
-
- 00140 c7 01 02 00 00
- 00 mov DWORD PTR [rcx], 2
- 00146 48 8d 49 18 lea rcx, QWORD PTR [rcx+24]
- 0014a c7 00 02 00 00
- 00 mov DWORD PTR [rax], 2
- 00150 48 8d 40 20 lea rax, QWORD PTR [rax+32]
- 00154 48 83 ee 01 sub rsi, 1
- 00158 75 e6 jne SHORT $LL18@clearPaula
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 265 : }
-
- 0015a 48 8b 5c 24 70 mov rbx, QWORD PTR [rsp+112]
- 0015f 48 8b 6c 24 78 mov rbp, QWORD PTR [rsp+120]
- 00164 48 8b b4 24 80
- 00 00 00 mov rsi, QWORD PTR [rsp+128]
- 0016c 48 83 c4 60 add rsp, 96 ; 00000060H
- 00170 5f pop rdi
- 00171 c3 ret 0
-clearPaulaAndScopes ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT mixerUpdateLoops
-_TEXT SEGMENT
-tmp$1 = 0
-mixerUpdateLoops PROC ; COMDAT
-
-; 268 : {
-
-$LN19:
- 00000 48 89 5c 24 10 mov QWORD PTR [rsp+16], rbx
- 00005 57 push rdi
- 00006 48 83 ec 20 sub rsp, 32 ; 00000020H
-
-; 269 : moduleChannel_t *ch;
-; 270 : moduleSample_t *s;
-; 271 :
-; 272 : for (uint8_t i = 0; i < AMIGA_VOICES; i++)
-
- 0000a 4c 8b 1d 00 00
- 00 00 mov r11, QWORD PTR modEntry
- 00011 4c 8d 15 1c 00
- 00 00 lea r10, OFFSET FLAT:paula+28
- 00018 48 0f be 3d 70
- 22 00 00 movsx rdi, BYTE PTR editor+8816
- 00020 4c 8d 05 00 00
- 00 00 lea r8, OFFSET FLAT:scopeExt
- 00027 45 33 c9 xor r9d, r9d
- 0002a 48 89 74 24 30 mov QWORD PTR [rsp+48], rsi
- 0002f 41 8d 59 04 lea ebx, QWORD PTR [r9+4]
-$LL4@mixerUpdat:
-
-; 273 : {
-; 274 : ch = &modEntry->channels[i];
-; 275 : if (ch->n_samplenum == editor.currSample)
-
- 00033 43 0f b6 8c 19
- 27 0b 00 00 movzx ecx, BYTE PTR [r9+r11+2855]
- 0003c 3b cf cmp ecx, edi
- 0003e 0f 85 a5 00 00
- 00 jne $LN2@mixerUpdat
-
-; 483 : s = &modEntry->samples[smp];
-
- 00044 43 0f b6 8c 19
- 27 0b 00 00 movzx ecx, BYTE PTR [r9+r11+2855]
-
-; 276 : {
-; 277 : s = &modEntry->samples[editor.currSample];
-
- 0004d 48 8d 34 bf lea rsi, QWORD PTR [rdi+rdi*4]
- 00051 48 03 f6 add rsi, rsi
-
-; 483 : s = &modEntry->samples[smp];
-
- 00054 48 8d 14 89 lea rdx, QWORD PTR [rcx+rcx*4]
-
-; 278 : paulaSetData(i, ch->n_start + s->loopStart);
-
- 00058 41 0f b7 84 f3
- 8c 01 00 00 movzx eax, WORD PTR [r11+rsi*8+396]
-
-; 483 : s = &modEntry->samples[smp];
-
- 00061 48 03 d2 add rdx, rdx
-
-; 278 : paulaSetData(i, ch->n_start + s->loopStart);
-
- 00064 4b 03 84 19 00
- 0b 00 00 add rax, QWORD PTR [r9+r11+2816]
-
-; 486 : if (src == NULL)
-
- 0006c 48 85 c0 test rax, rax
- 0006f 75 09 jne SHORT $LN8@mixerUpdat
-
-; 487 : src = &modEntry->sampleData[RESERVED_SAMPLE_OFFSET]; // dummy sample
-
- 00071 49 8b 03 mov rax, QWORD PTR [r11]
- 00074 48 05 c2 ff 1e
- 00 add rax, 2031554 ; 001effc2H
-$LN8@mixerUpdat:
-
-; 488 :
-; 489 : paula[ch].newData = src;
-; 490 :
-; 491 : // set external scope data
-; 492 : se = &scopeExt[ch];
-; 493 : tmp = *se; // cache it
-
- 0007a 41 0f 10 00 movups xmm0, XMMWORD PTR [r8]
- 0007e 49 89 42 f4 mov QWORD PTR [r10-12], rax
-
-; 494 :
-; 495 : tmp.newData = src;
-; 496 : tmp.newLoopFlag = (s->loopStart + s->loopLength) > 2;
-
- 00082 41 0f b7 8c d3
- 8c 01 00 00 movzx ecx, WORD PTR [r11+rdx*8+396]
- 0008b f2 41 0f 10 48
- 10 movsd xmm1, QWORD PTR [r8+16]
- 00091 0f 11 04 24 movups XMMWORD PTR tmp$1[rsp], xmm0
- 00095 48 89 04 24 mov QWORD PTR tmp$1[rsp], rax
- 00099 41 0f b7 84 d3
- 8e 01 00 00 movzx eax, WORD PTR [r11+rdx*8+398]
- 000a2 03 c1 add eax, ecx
- 000a4 f2 0f 11 4c 24
- 10 movsd QWORD PTR tmp$1[rsp+16], xmm1
- 000aa 83 f8 02 cmp eax, 2
-
-; 497 : tmp.newLoopStart = s->loopStart;
-
- 000ad 89 4c 24 10 mov DWORD PTR tmp$1[rsp+16], ecx
-
-; 498 :
-; 499 : *se = tmp; // update it
-
- 000b1 f2 0f 10 4c 24
- 10 movsd xmm1, QWORD PTR tmp$1[rsp+16]
- 000b7 0f 97 44 24 0b seta BYTE PTR tmp$1[rsp+11]
- 000bc 0f 10 04 24 movups xmm0, XMMWORD PTR tmp$1[rsp]
- 000c0 41 0f 11 00 movups XMMWORD PTR [r8], xmm0
- 000c4 f2 41 0f 11 48
- 10 movsd QWORD PTR [r8+16], xmm1
-
-; 279 : paulaSetLength(i, s->loopLength / 2);
-
- 000ca 41 0f b7 84 f3
- 8e 01 00 00 movzx eax, WORD PTR [r11+rsi*8+398]
- 000d3 66 d1 e8 shr ax, 1
-
-; 463 : if (len == 0)
-
- 000d6 75 05 jne SHORT $LN11@mixerUpdat
-
-; 464 : {
-; 465 : len = 65535;
-
- 000d8 b8 ff ff 00 00 mov eax, 65535 ; 0000ffffH
-$LN11@mixerUpdat:
-
-; 466 : /* confirmed behavior on real Amiga (also needed for safety)
-; 467 : ** And yes, we have room for this, it will never overflow!
-; 468 : */
-; 469 : }
-; 470 :
-; 471 : // our mixer works with bytes, not words. Multiply by two
-; 472 : scopeExt[ch].newLength = paula[ch].newLength = len * 2;
-
- 000dd 0f b7 c0 movzx eax, ax
- 000e0 03 c0 add eax, eax
- 000e2 41 89 02 mov DWORD PTR [r10], eax
- 000e5 41 89 40 0c mov DWORD PTR [r8+12], eax
-$LN2@mixerUpdat:
-
-; 269 : moduleChannel_t *ch;
-; 270 : moduleSample_t *s;
-; 271 :
-; 272 : for (uint8_t i = 0; i < AMIGA_VOICES; i++)
-
- 000e9 49 83 c1 40 add r9, 64 ; 00000040H
- 000ed 49 83 c2 70 add r10, 112 ; 00000070H
- 000f1 49 83 c0 18 add r8, 24
- 000f5 48 83 eb 01 sub rbx, 1
- 000f9 0f 85 34 ff ff
- ff jne $LL4@mixerUpdat
-
-; 280 : }
-; 281 : }
-; 282 : }
-
- 000ff 48 8b 74 24 30 mov rsi, QWORD PTR [rsp+48]
- 00104 48 8b 5c 24 38 mov rbx, QWORD PTR [rsp+56]
- 00109 48 83 c4 20 add rsp, 32 ; 00000020H
- 0010d 5f pop rdi
- 0010e c3 ret 0
-mixerUpdateLoops ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT mixerSetVoicePan
-_TEXT SEGMENT
-ch$ = 8
-pan$ = 16
-mixerSetVoicePan PROC ; COMDAT
-
-; 221 : fX = (1.0 - fX) * (1.0 + fX);
-
- 00000 f2 0f 10 0d 00
- 00 00 00 movsd xmm1, QWORD PTR __real@3ff0000000000000
- 00008 0f 57 ed xorps xmm5, xmm5
-
-; 215 : fX = fX * (2.0 - fX);
-
- 0000b f2 0f 10 1d 00
- 00 00 00 movsd xmm3, QWORD PTR __real@4000000000000000
-
-; 286 : double dPan;
-; 287 :
-; 288 : /* proper 'normalized' equal-power panning is (assuming pan left to right):
-; 289 : ** L = cos(p * pi * 1/2) * sqrt(2);
-; 290 : ** R = sin(p * pi * 1/2) * sqrt(2); */
-; 291 : dPan = pan * (1.0 / 256.0); // 0.0..1.0
-
- 00013 0f b7 c2 movzx eax, dx
- 00016 f2 0f 2a e8 cvtsi2sd xmm5, eax
-
-; 292 :
-; 293 : paula[ch].dPanL = cosApx(dPan);
-
- 0001a 0f b6 c1 movzx eax, cl
- 0001d 48 6b c8 70 imul rcx, rax, 112 ; 00000070H
-
-; 221 : fX = (1.0 - fX) * (1.0 + fX);
-
- 00021 0f 28 c5 movaps xmm0, xmm5
-
-; 286 : double dPan;
-; 287 :
-; 288 : /* proper 'normalized' equal-power panning is (assuming pan left to right):
-; 289 : ** L = cos(p * pi * 1/2) * sqrt(2);
-; 290 : ** R = sin(p * pi * 1/2) * sqrt(2); */
-; 291 : dPan = pan * (1.0 / 256.0); // 0.0..1.0
-
- 00024 0f 28 d5 movaps xmm2, xmm5
- 00027 f2 0f 59 15 00
- 00 00 00 mulsd xmm2, QWORD PTR __real@3f70000000000000
-
-; 221 : fX = (1.0 - fX) * (1.0 + fX);
-
- 0002f f2 0f 59 c5 mulsd xmm0, xmm5
-
-; 292 :
-; 293 : paula[ch].dPanL = cosApx(dPan);
-
- 00033 48 8d 05 00 00
- 00 00 lea rax, OFFSET FLAT:paula
-
-; 215 : fX = fX * (2.0 - fX);
-
- 0003a f2 0f 5c da subsd xmm3, xmm2
-
-; 221 : fX = (1.0 - fX) * (1.0 + fX);
-
- 0003e f2 0f 59 05 00
- 00 00 00 mulsd xmm0, QWORD PTR __real@3ef0000000000000
-
-; 216 : return fX * 1.09742972 + fX * fX * 0.31678383;
-
- 00046 0f 28 e3 movaps xmm4, xmm3
- 00049 f2 0f 59 e5 mulsd xmm4, xmm5
-
-; 221 : fX = (1.0 - fX) * (1.0 + fX);
-
- 0004d f2 0f 5c c8 subsd xmm1, xmm0
-
-; 222 : return fX * 1.09742972 + fX * fX * 0.31678383;
-
- 00051 0f 28 c1 movaps xmm0, xmm1
- 00054 f2 0f 59 c1 mulsd xmm0, xmm1
- 00058 f2 0f 59 0d 00
- 00 00 00 mulsd xmm1, QWORD PTR __real@3ff18f127750ef5c
- 00060 f2 0f 59 05 00
- 00 00 00 mulsd xmm0, QWORD PTR __real@3fd4462faf701a9a
- 00068 f2 0f 58 c1 addsd xmm0, xmm1
-
-; 216 : return fX * 1.09742972 + fX * fX * 0.31678383;
-
- 0006c 0f 28 cd movaps xmm1, xmm5
- 0006f f2 0f 59 0d 00
- 00 00 00 mulsd xmm1, QWORD PTR __real@3e54462faf701a9a
-
-; 292 :
-; 293 : paula[ch].dPanL = cosApx(dPan);
-
- 00077 f2 0f 11 44 01
- 60 movsd QWORD PTR [rcx+rax+96], xmm0
-
-; 216 : return fX * 1.09742972 + fX * fX * 0.31678383;
-
- 0007d 0f 28 c5 movaps xmm0, xmm5
- 00080 f2 0f 59 05 00
- 00 00 00 mulsd xmm0, QWORD PTR __real@3ed4462faf701a9a
- 00088 f2 0f 59 cb mulsd xmm1, xmm3
- 0008c f2 0f 59 e0 mulsd xmm4, xmm0
- 00090 0f 28 c5 movaps xmm0, xmm5
- 00093 f2 0f 59 c5 mulsd xmm0, xmm5
- 00097 f2 0f 59 2d 00
- 00 00 00 mulsd xmm5, QWORD PTR __real@3f718f127750ef5c
- 0009f f2 0f 58 e4 addsd xmm4, xmm4
- 000a3 f2 0f 59 c8 mulsd xmm1, xmm0
- 000a7 f2 0f 59 eb mulsd xmm5, xmm3
- 000ab f2 0f 5c e1 subsd xmm4, xmm1
- 000af f2 0f 58 e5 addsd xmm4, xmm5
-
-; 294 : paula[ch].dPanR = sinApx(dPan);
-
- 000b3 f2 0f 11 64 01
- 68 movsd QWORD PTR [rcx+rax+104], xmm4
-
-; 295 : }
-
- 000b9 c3 ret 0
-mixerSetVoicePan ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT mixerKillVoice
-_TEXT SEGMENT
-ch$ = 8
-mixerKillVoice PROC ; COMDAT
-
-; 299 : paulaVoice_t *v;
-; 300 : scopeChannelExt_t *s;
-; 301 :
-; 302 : v = &paula[ch];
-
- 00000 4c 8d 05 00 00
- 00 00 lea r8, OFFSET FLAT:__ImageBase
- 00007 0f b6 d1 movzx edx, cl
- 0000a 0f 57 c0 xorps xmm0, xmm0
- 0000d 48 6b c2 70 imul rax, rdx, 112 ; 00000070H
-
-; 303 : s = &scopeExt[ch];
-
- 00011 48 8d 0c 52 lea rcx, QWORD PTR [rdx+rdx*2]
-
-; 304 :
-; 305 : v->active = false;
-
- 00015 42 c6 84 00 00
- 00 00 00 00 mov BYTE PTR paula[rax+r8], 0
-
-; 306 : v->dVolume = 0.0;
-
- 0001e 4a c7 84 00 28
- 00 00 00 00 00
- 00 00 mov QWORD PTR paula[rax+r8+40], 0
-
-; 307 :
-; 308 : s->active = false;
-; 309 : s->didSwapData = false;
-; 310 :
-; 311 : memset(&blep[ch], 0, sizeof (blep_t));
-
- 0002a 48 8d 04 92 lea rax, QWORD PTR [rdx+rdx*4]
- 0002e 48 03 c0 add rax, rax
- 00031 41 c6 84 c8 08
- 00 00 00 00 mov BYTE PTR scopeExt[r8+rcx*8+8], 0
- 0003a 41 c6 84 c8 09
- 00 00 00 00 mov BYTE PTR scopeExt[r8+rcx*8+9], 0
- 00043 41 0f 11 84 c0
- 00 00 00 00 movups XMMWORD PTR blep[r8+rax*8], xmm0
-
-; 312 : memset(&blepVol[ch], 0, sizeof (blep_t));
-
- 0004c 41 0f 11 84 c0
- 00 00 00 00 movups XMMWORD PTR blepVol[r8+rax*8], xmm0
- 00055 41 0f 11 84 c0
- 10 00 00 00 movups XMMWORD PTR blep[r8+rax*8+16], xmm0
- 0005e 41 0f 11 84 c0
- 10 00 00 00 movups XMMWORD PTR blepVol[r8+rax*8+16], xmm0
- 00067 41 0f 11 84 c0
- 20 00 00 00 movups XMMWORD PTR blep[r8+rax*8+32], xmm0
- 00070 41 0f 11 84 c0
- 20 00 00 00 movups XMMWORD PTR blepVol[r8+rax*8+32], xmm0
- 00079 41 0f 11 84 c0
- 30 00 00 00 movups XMMWORD PTR blep[r8+rax*8+48], xmm0
- 00082 41 0f 11 84 c0
- 30 00 00 00 movups XMMWORD PTR blepVol[r8+rax*8+48], xmm0
- 0008b 41 0f 11 84 c0
- 40 00 00 00 movups XMMWORD PTR blep[r8+rax*8+64], xmm0
- 00094 41 0f 11 84 c0
- 40 00 00 00 movups XMMWORD PTR blepVol[r8+rax*8+64], xmm0
-
-; 313 : }
-
- 0009d c3 ret 0
-mixerKillVoice ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT turnOffVoices
-_TEXT SEGMENT
-turnOffVoices PROC ; COMDAT
-
-; 317 : for (uint8_t i = 0; i < AMIGA_VOICES; i++)
-
- 00000 45 33 d2 xor r10d, r10d
- 00003 48 8d 0d 09 00
- 00 00 lea rcx, OFFSET FLAT:scopeExt+9
- 0000a 48 8d 15 28 00
- 00 00 lea rdx, OFFSET FLAT:paula+40
- 00011 41 8b c2 mov eax, r10d
- 00014 4c 8d 0d 00 00
- 00 00 lea r9, OFFSET FLAT:__ImageBase
- 0001b 45 8d 42 04 lea r8d, QWORD PTR [r10+4]
- 0001f 90 npad 1
-$LL4@turnOffVoi:
-
-; 305 : v->active = false;
-
- 00020 44 88 52 d8 mov BYTE PTR [rdx-40], r10b
- 00024 0f 57 c0 xorps xmm0, xmm0
-
-; 306 : v->dVolume = 0.0;
-
- 00027 4c 89 12 mov QWORD PTR [rdx], r10
-
-; 317 : for (uint8_t i = 0; i < AMIGA_VOICES; i++)
-
- 0002a 48 8d 52 70 lea rdx, QWORD PTR [rdx+112]
-
-; 308 : s->active = false;
-
- 0002e 44 88 51 ff mov BYTE PTR [rcx-1], r10b
-
-; 309 : s->didSwapData = false;
-
- 00032 44 88 11 mov BYTE PTR [rcx], r10b
-
-; 317 : for (uint8_t i = 0; i < AMIGA_VOICES; i++)
-
- 00035 48 8d 49 18 lea rcx, QWORD PTR [rcx+24]
-
-; 311 : memset(&blep[ch], 0, sizeof (blep_t));
-
- 00039 42 0f 11 84 08
- 00 00 00 00 movups XMMWORD PTR blep[rax+r9], xmm0
-
-; 312 : memset(&blepVol[ch], 0, sizeof (blep_t));
-
- 00042 42 0f 11 84 08
- 00 00 00 00 movups XMMWORD PTR blepVol[rax+r9], xmm0
- 0004b 42 0f 11 84 08
- 10 00 00 00 movups XMMWORD PTR blep[rax+r9+16], xmm0
- 00054 42 0f 11 84 08
- 10 00 00 00 movups XMMWORD PTR blepVol[rax+r9+16], xmm0
- 0005d 42 0f 11 84 08
- 20 00 00 00 movups XMMWORD PTR blep[rax+r9+32], xmm0
- 00066 42 0f 11 84 08
- 20 00 00 00 movups XMMWORD PTR blepVol[rax+r9+32], xmm0
- 0006f 42 0f 11 84 08
- 30 00 00 00 movups XMMWORD PTR blep[rax+r9+48], xmm0
- 00078 42 0f 11 84 08
- 30 00 00 00 movups XMMWORD PTR blepVol[rax+r9+48], xmm0
- 00081 42 0f 11 84 08
- 40 00 00 00 movups XMMWORD PTR blep[rax+r9+64], xmm0
- 0008a 42 0f 11 84 08
- 40 00 00 00 movups XMMWORD PTR blepVol[rax+r9+64], xmm0
-
-; 317 : for (uint8_t i = 0; i < AMIGA_VOICES; i++)
-
- 00093 48 8d 40 50 lea rax, QWORD PTR [rax+80]
- 00097 49 83 e8 01 sub r8, 1
- 0009b 75 83 jne SHORT $LL4@turnOffVoi
-
-; 318 : mixerKillVoice(i);
-; 319 :
-; 320 : clearLossyIntegrator(&filterLo);
-; 321 : clearLossyIntegrator(&filterHi);
-; 322 : clearLEDFilter(&filterLED);
-; 323 :
-; 324 : resetDitherSeed();
-
- 0009d 0f 57 c9 xorps xmm1, xmm1
- 000a0 c7 05 00 00 00
- 00 00 50 34 12 mov DWORD PTR randSeed, 305418240 ; 12345000H
-
-; 152 : filter->dBuffer[0] = 0.0; // L
-
- 000aa 0f 11 0d 00 00
- 00 00 movups XMMWORD PTR filterHi, xmm1
-
-; 325 :
-; 326 : editor.tuningFlag = false;
-
- 000b1 44 88 15 19 01
- 00 00 mov BYTE PTR editor+281, r10b
-
-; 158 : filter->dLed[0] = 0.0; // L
-
- 000b8 0f 11 0d 10 00
- 00 00 movups XMMWORD PTR filterLED+16, xmm1
-
-; 152 : filter->dBuffer[0] = 0.0; // L
-
- 000bf 0f 11 05 00 00
- 00 00 movups XMMWORD PTR filterLo, xmm0
-
-; 158 : filter->dLed[0] = 0.0; // L
-
- 000c6 0f 11 05 00 00
- 00 00 movups XMMWORD PTR filterLED, xmm0
-
-; 327 : }
-
- 000cd c3 ret 0
-turnOffVoices ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT paulaStopDMA
-_TEXT SEGMENT
-ch$ = 8
-paulaStopDMA PROC ; COMDAT
-
-; 331 : scopeExt[ch].active = paula[ch].active = false;
-
- 00000 0f b6 d1 movzx edx, cl
- 00003 48 8d 0d 00 00
- 00 00 lea rcx, OFFSET FLAT:__ImageBase
- 0000a 48 6b c2 70 imul rax, rdx, 112 ; 00000070H
- 0000e c6 84 08 00 00
- 00 00 00 mov BYTE PTR paula[rax+rcx], 0
- 00016 48 8d 04 52 lea rax, QWORD PTR [rdx+rdx*2]
- 0001a c6 84 c1 08 00
- 00 00 00 mov BYTE PTR scopeExt[rcx+rax*8+8], 0
-
-; 332 : }
-
- 00022 c3 ret 0
-paulaStopDMA ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT paulaStartDMA
-_TEXT SEGMENT
-s$ = 0
-ch$ = 48
-paulaStartDMA PROC ; COMDAT
-
-; 335 : {
-
-$LN7:
- 00000 48 83 ec 28 sub rsp, 40 ; 00000028H
-
-; 336 : const int8_t *dat;
-; 337 : int32_t length;
-; 338 : paulaVoice_t *v;
-; 339 : scopeChannel_t s, *sc;
-; 340 : scopeChannelExt_t *se;
-; 341 :
-; 342 : // trigger voice
-; 343 :
-; 344 : v = &paula[ch];
-; 345 :
-; 346 : dat = v->newData;
-; 347 : if (dat == NULL)
-
- 00004 4c 8b 05 00 00
- 00 00 mov r8, QWORD PTR modEntry
- 0000b 48 8d 05 00 00
- 00 00 lea rax, OFFSET FLAT:paula
- 00012 44 0f b6 c9 movzx r9d, cl
- 00016 49 6b c9 70 imul rcx, r9, 112 ; 00000070H
- 0001a 48 03 c8 add rcx, rax
- 0001d 48 8b 41 10 mov rax, QWORD PTR [rcx+16]
- 00021 48 85 c0 test rax, rax
- 00024 75 09 jne SHORT $LN2@paulaStart
-
-; 348 : dat = &modEntry->sampleData[RESERVED_SAMPLE_OFFSET]; // dummy sample
-
- 00026 49 8b 00 mov rax, QWORD PTR [r8]
- 00029 48 05 c2 ff 1e
- 00 add rax, 2031554 ; 001effc2H
-$LN2@paulaStart:
-
-; 349 :
-; 350 : length = v->newLength;
-
- 0002f 44 8b 51 1c mov r10d, DWORD PTR [rcx+28]
-
-; 351 : if (length < 2)
-
- 00033 ba 02 00 00 00 mov edx, 2
- 00038 44 3b d2 cmp r10d, edx
-
-; 352 : length = 2; // for safety
-; 353 :
-; 354 : v->dPhase = 0.0;
-; 355 : v->pos = 0;
-; 356 : v->data = dat;
-
- 0003b 48 89 41 08 mov QWORD PTR [rcx+8], rax
-
-; 357 : v->length = length;
-; 358 : v->active = true;
-; 359 :
-; 360 : // trigger scope
-; 361 :
-; 362 : sc = &scope[ch];
-
- 0003f 48 8d 05 00 00
- 00 00 lea rax, OFFSET FLAT:scope
- 00046 44 0f 4c d2 cmovl r10d, edx
- 0004a 45 33 db xor r11d, r11d
- 0004d 49 8b d1 mov rdx, r9
- 00050 4c 89 59 40 mov QWORD PTR [rcx+64], r11
- 00054 48 c1 e2 05 shl rdx, 5
- 00058 48 03 d0 add rdx, rax
- 0005b 44 89 59 20 mov DWORD PTR [rcx+32], r11d
- 0005f 44 89 51 18 mov DWORD PTR [rcx+24], r10d
- 00063 c6 01 01 mov BYTE PTR [rcx], 1
-
-; 363 : se = &scopeExt[ch];
-
- 00066 4b 8d 0c 49 lea rcx, QWORD PTR [r9+r9*2]
- 0006a 4c 8d 0d 00 00
- 00 00 lea r9, OFFSET FLAT:scopeExt
-
-; 364 : s = *sc; // cache it
-
- 00071 0f 10 02 movups xmm0, XMMWORD PTR [rdx]
-
-; 365 :
-; 366 : dat = se->newData;
-
- 00074 49 8b 04 c9 mov rax, QWORD PTR [r9+rcx*8]
- 00078 0f 10 4a 10 movups xmm1, XMMWORD PTR [rdx+16]
- 0007c 0f 11 04 24 movups XMMWORD PTR s$[rsp], xmm0
- 00080 0f 11 4c 24 10 movups XMMWORD PTR s$[rsp+16], xmm1
-
-; 367 : if (dat == NULL)
-
- 00085 48 85 c0 test rax, rax
- 00088 75 09 jne SHORT $LN4@paulaStart
-
-; 368 : dat = &modEntry->sampleData[RESERVED_SAMPLE_OFFSET]; // dummy sample
-
- 0008a 49 8b 00 mov rax, QWORD PTR [r8]
- 0008d 48 05 c2 ff 1e
- 00 add rax, 2031554 ; 001effc2H
-$LN4@paulaStart:
-
-; 369 :
-; 370 : s.length = length;
-; 371 : s.data = dat;
-
- 00093 48 89 04 24 mov QWORD PTR s$[rsp], rax
-
-; 372 :
-; 373 : s.pos = 0;
-; 374 : s.posFrac = 0;
-; 375 :
-; 376 : // data/length is already set from replayer thread (important)
-; 377 : s.loopFlag = se->newLoopFlag;
-
- 00097 41 0f b6 44 c9
- 0b movzx eax, BYTE PTR [r9+rcx*8+11]
- 0009d 88 44 24 08 mov BYTE PTR s$[rsp+8], al
-
-; 378 : s.loopStart = se->newLoopStart;
-
- 000a1 41 8b 44 c9 10 mov eax, DWORD PTR [r9+rcx*8+16]
- 000a6 44 89 54 24 0c mov DWORD PTR s$[rsp+12], r10d
-
-; 379 :
-; 380 : se->didSwapData = false;
-; 381 : se->active = true;
-; 382 :
-; 383 : *sc = s; // update it
-
- 000ab 0f 10 04 24 movups xmm0, XMMWORD PTR s$[rsp]
- 000af 89 44 24 14 mov DWORD PTR s$[rsp+20], eax
- 000b3 44 89 5c 24 10 mov DWORD PTR s$[rsp+16], r11d
- 000b8 44 89 5c 24 1c mov DWORD PTR s$[rsp+28], r11d
- 000bd 0f 10 4c 24 10 movups xmm1, XMMWORD PTR s$[rsp+16]
- 000c2 45 88 5c c9 09 mov BYTE PTR [r9+rcx*8+9], r11b
- 000c7 0f 11 02 movups XMMWORD PTR [rdx], xmm0
- 000ca 41 c6 44 c9 08
- 01 mov BYTE PTR [r9+rcx*8+8], 1
- 000d0 0f 11 4a 10 movups XMMWORD PTR [rdx+16], xmm1
-
-; 384 : }
-
- 000d4 48 83 c4 28 add rsp, 40 ; 00000028H
- 000d8 c3 ret 0
-paulaStartDMA ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT resetCachedMixerPeriod
-_TEXT SEGMENT
-resetCachedMixerPeriod PROC ; COMDAT
-
-; 388 : oldPeriod = 0;
-
- 00000 33 c0 xor eax, eax
- 00002 66 89 05 00 00
- 00 00 mov WORD PTR oldPeriod, ax
-
-; 389 : }
-
- 00009 c3 ret 0
-resetCachedMixerPeriod ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_scopes.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_scopes.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_scopes.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT paulaSetPeriod
-_TEXT SEGMENT
-ch$ = 16
-period$ = 24
-paulaSetPeriod PROC ; COMDAT
-
-; 392 : {
-
-$LN21:
- 00000 48 83 ec 08 sub rsp, 8
-
-; 393 : double dPeriodToDeltaDiv;
-; 394 : paulaVoice_t *v;
-; 395 :
-; 396 : v = &paula[ch];
-
- 00004 44 0f b6 d1 movzx r10d, cl
- 00008 4d 6b ca 70 imul r9, r10, 112 ; 00000070H
-
-; 397 :
-; 398 : if (period == 0)
-
- 0000c 66 85 d2 test dx, dx
- 0000f 75 34 jne SHORT $LN2@paulaSetPe
-
-; 399 : {
-; 400 : v->dDelta = 0.0; // confirmed behavior on real Amiga
-
- 00011 33 c9 xor ecx, ecx
- 00013 4c 8d 05 00 00
- 00 00 lea r8, OFFSET FLAT:__ImageBase
-; File C:\Programming\pt2-clone\src\pt2_scopes.c
-
-; 65 : scope[ch].delta = delta;
-
- 0001a 49 c1 e2 05 shl r10, 5
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 401 : v->dDeltaMul = 1.0; // for BLEP synthesis
-
- 0001e 48 b8 00 00 00
- 00 00 00 f0 3f mov rax, 4607182418800017408 ; 3ff0000000000000H
- 00028 4b 89 8c 01 30
- 00 00 00 mov QWORD PTR paula[r9+r8+48], rcx
- 00030 4b 89 84 01 38
- 00 00 00 mov QWORD PTR paula[r9+r8+56], rax
-; File C:\Programming\pt2-clone\src\pt2_scopes.c
-
-; 65 : scope[ch].delta = delta;
-
- 00038 43 89 8c 02 18
- 00 00 00 mov DWORD PTR scope[r10+r8+24], ecx
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 449 : }
-
- 00040 48 83 c4 08 add rsp, 8
- 00044 c3 ret 0
-$LN2@paulaSetPe:
-
-; 402 : setScopeDelta(ch, 0);
-; 403 : return;
-; 404 : }
-; 405 :
-; 406 : if (period < 113)
-; 407 : period = 113; // confirmed behavior on real Amiga
-; 408 :
-; 409 : // if the new period was the same as the previous period, use cached deltas
-; 410 : if (period == oldPeriod)
-
- 00045 b9 71 00 00 00 mov ecx, 113 ; 00000071H
- 0004a 48 89 1c 24 mov QWORD PTR [rsp], rbx
- 0004e 66 3b d1 cmp dx, cx
- 00051 66 0f 43 ca cmovae cx, dx
- 00055 66 3b 0d 00 00
- 00 00 cmp cx, WORD PTR oldPeriod
- 0005c 75 30 jne SHORT $LN4@paulaSetPe
-
-; 412 : v->dDelta = dOldVoiceDelta;
-
- 0005e f2 0f 10 05 00
- 00 00 00 movsd xmm0, QWORD PTR dOldVoiceDelta
- 00066 4c 8d 05 00 00
- 00 00 lea r8, OFFSET FLAT:__ImageBase
-; File C:\Programming\pt2-clone\src\pt2_scopes.c
-
-; 65 : scope[ch].delta = delta;
-
- 0006d 8b 05 00 00 00
- 00 mov eax, DWORD PTR oldScopeDelta
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 412 : v->dDelta = dOldVoiceDelta;
-
- 00073 49 8d 98 30 00
- 00 00 lea rbx, QWORD PTR paula[r8+48]
- 0007a 49 03 d9 add rbx, r9
- 0007d f2 0f 11 03 movsd QWORD PTR [rbx], xmm0
-
-; 413 : v->dDeltaMul = dOldVoiceDeltaMul; // for BLEP synthesis
-
- 00081 f2 0f 10 05 00
- 00 00 00 movsd xmm0, QWORD PTR dOldVoiceDeltaMul
-
-; 414 : setScopeDelta(ch, oldScopeDelta);
-; 415 : }
-
- 00089 e9 86 00 00 00 jmp $LN19@paulaSetPe
-$LN4@paulaSetPe:
-
-; 416 : else
-; 417 : {
-; 418 : // this period is not cached, calculate mixer/scope deltas
-; 419 :
-; 420 : #if SCOPE_HZ != 64
-; 421 : #error Scope Hz is not 64 (2^n), change rate calc. to use doubles+round in pt2_scope.c
-; 422 : #endif
-; 423 : oldPeriod = period;
-; 424 :
-; 425 : // if we are rendering pattern to sample (PAT2SMP), use different frequencies
-; 426 : if (editor.isSMPRendering)
-
- 0008e 0f b6 05 3f 00
- 00 00 movzx eax, BYTE PTR editor+63
- 00095 66 89 0d 00 00
- 00 00 mov WORD PTR oldPeriod, cx
- 0009c 84 c0 test al, al
- 0009e 74 1d je SHORT $LN6@paulaSetPe
-
-; 427 : dPeriodToDeltaDiv = editor.pat2SmpHQ ? (PAULA_PAL_CLK / 28836.0) : (PAULA_PAL_CLK / 22168.0);
-
- 000a0 80 3d 11 01 00
- 00 00 cmp BYTE PTR editor+273, 0
- 000a7 74 0a je SHORT $LN11@paulaSetPe
- 000a9 f2 0f 10 0d 00
- 00 00 00 movsd xmm1, QWORD PTR __real@405ec0261166854f
- 000b1 eb 12 jmp SHORT $LN7@paulaSetPe
-$LN11@paulaSetPe:
- 000b3 f2 0f 10 0d 00
- 00 00 00 movsd xmm1, QWORD PTR __real@406400058b0a4139
- 000bb eb 08 jmp SHORT $LN7@paulaSetPe
-$LN6@paulaSetPe:
-
-; 428 : else
-; 429 : dPeriodToDeltaDiv = audio.dPeriodToDeltaDiv;
-
- 000bd f2 0f 10 0d 50
- 05 00 00 movsd xmm1, QWORD PTR audio+1360
-$LN7@paulaSetPe:
-
-; 430 :
-; 431 : v->dDelta = dPeriodToDeltaDiv / period;
-
- 000c5 0f b7 c9 movzx ecx, cx
- 000c8 4c 8d 05 00 00
- 00 00 lea r8, OFFSET FLAT:__ImageBase
- 000cf 49 8d 98 30 00
- 00 00 lea rbx, QWORD PTR paula[r8+48]
-
-; 432 : v->dDeltaMul = 1.0 / v->dDelta; // for BLEP synthesis
-; 433 :
-; 434 : // cache these
-; 435 : dOldVoiceDelta = v->dDelta;
-; 436 : dOldVoiceDeltaMul = v->dDeltaMul; // for BLEP synthesis
-; 437 : oldScopeDelta = (PAULA_PAL_CLK * (65536UL / SCOPE_HZ)) / period;
-
- 000d6 33 d2 xor edx, edx
- 000d8 49 03 d9 add rbx, r9
- 000db b8 00 3c 7c d8 mov eax, -662946816 ; d87c3c00H
- 000e0 f7 f1 div ecx
- 000e2 66 0f 6e c1 movd xmm0, ecx
- 000e6 f3 0f e6 c0 cvtdq2pd xmm0, xmm0
- 000ea 89 05 00 00 00
- 00 mov DWORD PTR oldScopeDelta, eax
- 000f0 f2 0f 5e c8 divsd xmm1, xmm0
- 000f4 f2 0f 10 05 00
- 00 00 00 movsd xmm0, QWORD PTR __real@3ff0000000000000
- 000fc f2 0f 5e c1 divsd xmm0, xmm1
- 00100 f2 0f 11 0b movsd QWORD PTR [rbx], xmm1
- 00104 f2 0f 11 05 00
- 00 00 00 movsd QWORD PTR dOldVoiceDeltaMul, xmm0
- 0010c f2 0f 11 0d 00
- 00 00 00 movsd QWORD PTR dOldVoiceDelta, xmm1
-$LN19@paulaSetPe:
-
-; 438 :
-; 439 : setScopeDelta(ch, oldScopeDelta);
-; 440 : }
-; 441 :
-; 442 : // for BLEP synthesis
-; 443 :
-; 444 : if (v->dLastDelta == 0.0)
-
- 00114 49 c1 e2 05 shl r10, 5
- 00118 4d 8d 98 38 00
- 00 00 lea r11, QWORD PTR paula[r8+56]
- 0011f 4d 03 d9 add r11, r9
- 00122 43 89 84 02 18
- 00 00 00 mov DWORD PTR scope[r10+r8+24], eax
- 0012a f2 41 0f 11 03 movsd QWORD PTR [r11], xmm0
- 0012f 0f 57 c0 xorps xmm0, xmm0
- 00132 66 43 0f 2e 84
- 01 48 00 00 00 ucomisd xmm0, QWORD PTR paula[r9+r8+72]
- 0013c 75 0b jne SHORT $LN8@paulaSetPe
-
-; 445 : v->dLastDelta = v->dDelta;
-
- 0013e 48 8b 03 mov rax, QWORD PTR [rbx]
- 00141 4b 89 84 01 48
- 00 00 00 mov QWORD PTR paula[r9+r8+72], rax
-$LN8@paulaSetPe:
-
-; 446 :
-; 447 : if (v->dLastDeltaMul == 0.0)
-
- 00149 66 43 0f 2e 84
- 01 50 00 00 00 ucomisd xmm0, QWORD PTR paula[r9+r8+80]
- 00153 48 8b 1c 24 mov rbx, QWORD PTR [rsp]
- 00157 75 0b jne SHORT $LN9@paulaSetPe
-
-; 448 : v->dLastDeltaMul = v->dDeltaMul;
-
- 00159 49 8b 03 mov rax, QWORD PTR [r11]
- 0015c 4b 89 84 01 50
- 00 00 00 mov QWORD PTR paula[r9+r8+80], rax
-$LN9@paulaSetPe:
-
-; 449 : }
-
- 00164 48 83 c4 08 add rsp, 8
- 00168 c3 ret 0
-paulaSetPeriod ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT paulaSetVolume
-_TEXT SEGMENT
-ch$ = 8
-vol$ = 16
-paulaSetVolume PROC ; COMDAT
-
-; 452 : {
-
- 00000 0f b7 c2 movzx eax, dx
-
-; 453 : vol &= 127; // confirmed behavior on real Amiga
-
- 00003 66 83 e0 7f and ax, 127 ; 0000007fH
-
-; 454 :
-; 455 : if (vol > 64)
-
- 00007 66 83 f8 40 cmp ax, 64 ; 00000040H
- 0000b 76 05 jbe SHORT $LN2@paulaSetVo
-
-; 456 : vol = 64; // confirmed behavior on real Amiga
-
- 0000d b8 40 00 00 00 mov eax, 64 ; 00000040H
-$LN2@paulaSetVo:
-
-; 457 :
-; 458 : paula[ch].dVolume = vol * (1.0 / 64.0);
-
- 00012 0f b7 c0 movzx eax, ax
- 00015 66 0f 6e c0 movd xmm0, eax
- 00019 0f b6 c1 movzx eax, cl
- 0001c 48 6b c8 70 imul rcx, rax, 112 ; 00000070H
- 00020 f3 0f e6 c0 cvtdq2pd xmm0, xmm0
- 00024 48 8d 05 28 00
- 00 00 lea rax, OFFSET FLAT:paula+40
- 0002b f2 0f 59 05 00
- 00 00 00 mulsd xmm0, QWORD PTR __real@3f90000000000000
- 00033 f2 0f 11 04 01 movsd QWORD PTR [rcx+rax], xmm0
-
-; 459 : }
-
- 00038 c3 ret 0
-paulaSetVolume ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT paulaSetLength
-_TEXT SEGMENT
-ch$ = 8
-len$ = 16
-paulaSetLength PROC ; COMDAT
-
-; 463 : if (len == 0)
-; 464 : {
-; 465 : len = 65535;
-; 466 : /* confirmed behavior on real Amiga (also needed for safety)
-; 467 : ** And yes, we have room for this, it will never overflow!
-; 468 : */
-; 469 : }
-; 470 :
-; 471 : // our mixer works with bytes, not words. Multiply by two
-; 472 : scopeExt[ch].newLength = paula[ch].newLength = len * 2;
-
- 00000 66 85 d2 test dx, dx
- 00003 0f b6 c9 movzx ecx, cl
- 00006 b8 ff ff 00 00 mov eax, 65535 ; 0000ffffH
- 0000b 4c 8d 05 00 00
- 00 00 lea r8, OFFSET FLAT:__ImageBase
- 00012 66 0f 45 c2 cmovne ax, dx
- 00016 0f b7 d0 movzx edx, ax
- 00019 48 6b c1 70 imul rax, rcx, 112 ; 00000070H
- 0001d 03 d2 add edx, edx
- 0001f 42 89 94 00 1c
- 00 00 00 mov DWORD PTR paula[rax+r8+28], edx
- 00027 48 8d 04 49 lea rax, QWORD PTR [rcx+rcx*2]
- 0002b 41 89 94 c0 0c
- 00 00 00 mov DWORD PTR scopeExt[r8+rax*8+12], edx
-
-; 473 : }
-
- 00033 c3 ret 0
-paulaSetLength ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT paulaSetData
-_TEXT SEGMENT
-tmp$ = 0
-ch$ = 48
-src$ = 56
-paulaSetData PROC ; COMDAT
-
-; 476 : {
-
-$LN5:
- 00000 48 83 ec 28 sub rsp, 40 ; 00000028H
- 00004 4c 8b c2 mov r8, rdx
-
-; 477 : uint8_t smp;
-; 478 : moduleSample_t *s;
-; 479 : scopeChannelExt_t *se, tmp;
-; 480 :
-; 481 : smp = modEntry->channels[ch].n_samplenum;
-
- 00007 44 0f b6 c9 movzx r9d, cl
-
-; 482 : assert(smp <= 30);
-; 483 : s = &modEntry->samples[smp];
-
- 0000b 48 8b 15 00 00
- 00 00 mov rdx, QWORD PTR modEntry
- 00012 41 8b c1 mov eax, r9d
- 00015 48 c1 e0 06 shl rax, 6
- 00019 0f b6 84 10 27
- 0b 00 00 movzx eax, BYTE PTR [rax+rdx+2855]
- 00021 4c 8d 14 80 lea r10, QWORD PTR [rax+rax*4]
- 00025 49 c1 e2 04 shl r10, 4
- 00029 4c 03 d2 add r10, rdx
-
-; 484 :
-; 485 : // set voice data
-; 486 : if (src == NULL)
-
- 0002c 4d 85 c0 test r8, r8
- 0002f 75 0a jne SHORT $LN2@paulaSetDa
-
-; 487 : src = &modEntry->sampleData[RESERVED_SAMPLE_OFFSET]; // dummy sample
-
- 00031 4c 8b 02 mov r8, QWORD PTR [rdx]
- 00034 49 81 c0 c2 ff
- 1e 00 add r8, 2031554 ; 001effc2H
-$LN2@paulaSetDa:
-
-; 488 :
-; 489 : paula[ch].newData = src;
-
- 0003b 49 6b c1 70 imul rax, r9, 112 ; 00000070H
- 0003f 48 8d 0d 00 00
- 00 00 lea rcx, OFFSET FLAT:__ImageBase
-
-; 490 :
-; 491 : // set external scope data
-; 492 : se = &scopeExt[ch];
-
- 00046 48 8d 91 00 00
- 00 00 lea rdx, QWORD PTR scopeExt[rcx]
- 0004d 4c 89 84 08 10
- 00 00 00 mov QWORD PTR paula[rax+rcx+16], r8
- 00055 4b 8d 04 49 lea rax, QWORD PTR [r9+r9*2]
-
-; 493 : tmp = *se; // cache it
-; 494 :
-; 495 : tmp.newData = src;
-; 496 : tmp.newLoopFlag = (s->loopStart + s->loopLength) > 2;
-
- 00059 41 0f b7 8a 8c
- 01 00 00 movzx ecx, WORD PTR [r10+396]
- 00061 48 8d 14 c2 lea rdx, QWORD PTR [rdx+rax*8]
- 00065 0f 10 02 movups xmm0, XMMWORD PTR [rdx]
- 00068 41 0f b7 82 8e
- 01 00 00 movzx eax, WORD PTR [r10+398]
- 00070 f2 0f 10 4a 10 movsd xmm1, QWORD PTR [rdx+16]
- 00075 03 c1 add eax, ecx
- 00077 0f 11 04 24 movups XMMWORD PTR tmp$[rsp], xmm0
- 0007b 83 f8 02 cmp eax, 2
- 0007e 4c 89 04 24 mov QWORD PTR tmp$[rsp], r8
- 00082 f2 0f 11 4c 24
- 10 movsd QWORD PTR tmp$[rsp+16], xmm1
- 00088 0f 97 44 24 0b seta BYTE PTR tmp$[rsp+11]
-
-; 497 : tmp.newLoopStart = s->loopStart;
-
- 0008d 89 4c 24 10 mov DWORD PTR tmp$[rsp+16], ecx
-
-; 498 :
-; 499 : *se = tmp; // update it
-
- 00091 0f 10 04 24 movups xmm0, XMMWORD PTR tmp$[rsp]
- 00095 f2 0f 10 4c 24
- 10 movsd xmm1, QWORD PTR tmp$[rsp+16]
- 0009b 0f 11 02 movups XMMWORD PTR [rdx], xmm0
- 0009e f2 0f 11 4a 10 movsd QWORD PTR [rdx+16], xmm1
-
-; 500 : }
-
- 000a3 48 83 c4 28 add rsp, 40 ; 00000028H
- 000a7 c3 ret 0
-paulaSetData ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT toggleA500Filters
-_TEXT SEGMENT
-toggleA500Filters PROC ; COMDAT
-
-; 504 : if (filterFlags & FILTER_A500)
-
- 00000 0f b6 05 00 00
- 00 00 movzx eax, BYTE PTR filterFlags
- 00007 48 8d 15 00 00
- 00 00 lea rdx, OFFSET FLAT:__ImageBase
- 0000e a8 01 test al, 1
- 00010 0f b6 05 00 00
- 00 00 movzx eax, BYTE PTR filterFlags
- 00017 66 c7 05 08 01
- 00 00 01 00 mov WORD PTR editor+264, 1
- 00020 c6 05 82 22 00
- 00 00 mov BYTE PTR editor+8834, 0
- 00027 74 36 je SHORT $LN2@toggleA500
-
-; 505 : {
-; 506 : filterFlags &= ~FILTER_A500;
-
- 00029 24 fe and al, -2
- 0002b 88 05 00 00 00
- 00 mov BYTE PTR filterFlags, al
- 00031 33 c9 xor ecx, ecx
- 00033 0f 1f 40 00 66
- 0f 1f 84 00 00
- 00 00 00 npad 13
-$LL12@toggleA500:
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-
-; 615 : strcpy(editor.ui.statusMessage, msg);
-
- 00040 0f b6 84 11 00
- 00 00 00 movzx eax, BYTE PTR ??_C@_0BC@PKEIPOBC@FILTER?5MOD?3?5A1200@[rcx+rdx]
- 00048 88 84 11 90 37
- 00 00 mov BYTE PTR editor[rcx+rdx+14224], al
- 0004f 48 8d 49 01 lea rcx, QWORD PTR [rcx+1]
- 00053 84 c0 test al, al
- 00055 75 e9 jne SHORT $LL12@toggleA500
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 515 : }
-
- 00057 c6 05 03 38 00
- 00 01 mov BYTE PTR editor+14339, 1
- 0005e c3 ret 0
-$LN2@toggleA500:
-
-; 507 : displayMsg("FILTER MOD: A1200");
-; 508 : }
-; 509 : else
-; 510 : {
-; 511 : filterFlags |= FILTER_A500;
-
- 0005f 0c 01 or al, 1
- 00061 0f 57 c0 xorps xmm0, xmm0
- 00064 88 05 00 00 00
- 00 mov BYTE PTR filterFlags, al
- 0006a 33 c9 xor ecx, ecx
-
-; 152 : filter->dBuffer[0] = 0.0; // L
-
- 0006c 0f 11 05 00 00
- 00 00 movups XMMWORD PTR filterLo, xmm0
- 00073 0f 1f 40 00 66
- 0f 1f 84 00 00
- 00 00 00 npad 13
-$LL22@toggleA500:
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-
-; 615 : strcpy(editor.ui.statusMessage, msg);
-
- 00080 0f b6 84 11 00
- 00 00 00 movzx eax, BYTE PTR ??_C@_0BB@ONPMACIL@FILTER?5MOD?3?5A500@[rcx+rdx]
- 00088 88 84 11 90 37
- 00 00 mov BYTE PTR editor[rcx+rdx+14224], al
- 0008f 48 8d 49 01 lea rcx, QWORD PTR [rcx+1]
- 00093 84 c0 test al, al
- 00095 75 e9 jne SHORT $LL22@toggleA500
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 515 : }
-
- 00097 c6 05 03 38 00
- 00 01 mov BYTE PTR editor+14339, 1
- 0009e c3 ret 0
-toggleA500Filters ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_blep.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_blep.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_blep.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_blep.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_blep.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_blep.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_blep.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_blep.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_blep.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT mixChannels
-_TEXT SEGMENT
-numSamples$ = 128
-mixChannels PROC ; COMDAT
-
-; 518 : {
-
-$LN67:
- 00000 48 89 5c 24 08 mov QWORD PTR [rsp+8], rbx
- 00005 48 89 6c 24 10 mov QWORD PTR [rsp+16], rbp
- 0000a 48 89 74 24 18 mov QWORD PTR [rsp+24], rsi
- 0000f 57 push rdi
- 00010 41 54 push r12
- 00012 41 55 push r13
- 00014 41 56 push r14
- 00016 41 57 push r15
- 00018 48 83 ec 50 sub rsp, 80 ; 00000050H
-
-; 519 : const int8_t *dataPtr;
-; 520 : double dTempSample, dTempVolume;
-; 521 : blep_t *bSmp, *bVol;
-; 522 : paulaVoice_t *v;
-; 523 :
-; 524 : memset(dMixBufferL, 0, numSamples * sizeof (double));
-
- 0001c 48 63 e9 movsxd rbp, ecx
- 0001f 33 d2 xor edx, edx
- 00021 48 8b 0d 00 00
- 00 00 mov rcx, QWORD PTR dMixBufferL
- 00028 0f 29 74 24 40 movaps XMMWORD PTR [rsp+64], xmm6
- 0002d 0f 29 7c 24 30 movaps XMMWORD PTR [rsp+48], xmm7
- 00032 48 8d 1c ed 00
- 00 00 00 lea rbx, QWORD PTR [rbp*8]
- 0003a 44 0f 29 44 24
- 20 movaps XMMWORD PTR [rsp+32], xmm8
- 00040 4c 8b c3 mov r8, rbx
- 00043 e8 00 00 00 00 call memset
-
-; 525 : memset(dMixBufferR, 0, numSamples * sizeof (double));
-
- 00048 48 8b 0d 00 00
- 00 00 mov rcx, QWORD PTR dMixBufferR
- 0004f 4c 8b c3 mov r8, rbx
- 00052 33 d2 xor edx, edx
- 00054 e8 00 00 00 00 call memset
- 00059 f2 0f 10 3d 00
- 00 00 00 movsd xmm7, QWORD PTR __real@3f80000000000000
- 00061 48 8d 15 58 00
- 00 00 lea rdx, OFFSET FLAT:paula+88
- 00068 f2 44 0f 10 05
- 00 00 00 00 movsd xmm8, QWORD PTR __real@4014000000000000
- 00071 4c 8d 35 00 00
- 00 00 lea r14, OFFSET FLAT:__ImageBase
- 00078 f2 0f 10 35 00
- 00 00 00 movsd xmm6, QWORD PTR __real@3ff0000000000000
- 00080 4c 8d 25 28 00
- 00 00 lea r12, OFFSET FLAT:dBlepData+40
- 00087 45 33 ff xor r15d, r15d
- 0008a 4c 8d 2d 18 02
- 00 00 lea r13, OFFSET FLAT:paula+536
- 00091 45 8b c7 mov r8d, r15d
-$LL4@mixChannel:
-
-; 528 : {
-; 529 : v = &paula[i];
-; 530 : if (!v->active)
-
- 00094 0f b6 42 a8 movzx eax, BYTE PTR [rdx-88]
- 00098 84 c0 test al, al
- 0009a 0f 84 6c 02 00
- 00 je $LN2@mixChannel
-
-; 531 : continue;
-; 532 :
-; 533 : bSmp = &blep[i];
-; 534 : bVol = &blepVol[i];
-; 535 :
-; 536 : for (int32_t j = 0; j < numSamples; j++)
-
- 000a0 48 85 ed test rbp, rbp
- 000a3 0f 8e 63 02 00
- 00 jle $LN2@mixChannel
-
-; 587 : {
-; 588 : v->pos = 0;
-; 589 :
-; 590 : // re-fetch new Paula register values now
-; 591 : v->length = v->newLength;
-
- 000a9 48 8b 1d 00 00
- 00 00 mov rbx, QWORD PTR dMixBufferR
- 000b0 48 8b fd mov rdi, rbp
- 000b3 48 8b 35 00 00
- 00 00 mov rsi, QWORD PTR dMixBufferL
- 000ba 48 2b f3 sub rsi, rbx
- 000bd 0f 1f 00 npad 3
-$LL7@mixChannel:
-
-; 537 : {
-; 538 : dataPtr = v->data;
-; 539 : if (dataPtr == NULL)
-
- 000c0 48 8b 4a b0 mov rcx, QWORD PTR [rdx-80]
- 000c4 48 85 c9 test rcx, rcx
- 000c7 75 08 jne SHORT $LN11@mixChannel
-
-; 540 : {
-; 541 : dTempSample = 0.0;
-; 542 : dTempVolume = 0.0;
-; 543 : }
-
- 000c9 0f 57 d2 xorps xmm2, xmm2
- 000cc 0f 57 ed xorps xmm5, xmm5
- 000cf eb 19 jmp SHORT $LN12@mixChannel
-$LN11@mixChannel:
-
-; 544 : else
-; 545 : {
-; 546 : dTempSample = dataPtr[v->pos] * (1.0 / 128.0);
-
- 000d1 48 63 42 c8 movsxd rax, DWORD PTR [rdx-56]
-
-; 547 : dTempVolume = v->dVolume;
-
- 000d5 f2 0f 10 6a d0 movsd xmm5, QWORD PTR [rdx-48]
- 000da 0f be 0c 08 movsx ecx, BYTE PTR [rax+rcx]
- 000de 66 0f 6e d1 movd xmm2, ecx
- 000e2 f3 0f e6 d2 cvtdq2pd xmm2, xmm2
- 000e6 f2 0f 59 d7 mulsd xmm2, xmm7
-$LN12@mixChannel:
-
-; 548 : }
-; 549 :
-; 550 : if (dTempSample != bSmp->dLastValue)
-
- 000ea f2 43 0f 10 a4
- 30 48 00 00 00 movsd xmm4, QWORD PTR blep[r8+r14+72]
- 000f4 66 0f 2e d4 ucomisd xmm2, xmm4
- 000f8 0f 84 90 00 00
- 00 je $LN61@mixChannel
-
-; 551 : {
-; 552 : if (v->dLastDelta > v->dLastPhase)
-
- 000fe f2 0f 10 1a movsd xmm3, QWORD PTR [rdx]
- 00102 66 0f 2f 5a f0 comisd xmm3, QWORD PTR [rdx-16]
- 00107 73 7b jae SHORT $LN64@mixChannel
-
-; 555 : blepAdd(bSmp, v->dLastPhase * v->dLastDeltaMul, bSmp->dLastValue - dTempSample);
-
- 00109 f2 0f 59 5a f8 mulsd xmm3, QWORD PTR [rdx-8]
-; File C:\Programming\pt2-clone\src\pt2_blep.c
-
-; 44 : i = b->index;
-
- 0010e 4d 8d 9e 00 00
- 00 00 lea r11, QWORD PTR blep[r14]
- 00115 4d 03 d8 add r11, r8
-
-; 45 :
-; 46 : n = BLEP_NS;
-
- 00118 41 b2 08 mov r10b, 8
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 555 : blepAdd(bSmp, v->dLastPhase * v->dLastDeltaMul, bSmp->dLastValue - dTempSample);
-
- 0011b f2 0f 5c e2 subsd xmm4, xmm2
-; File C:\Programming\pt2-clone\src\pt2_blep.c
-
-; 38 : f = dOffset * BLEP_SP;
-
- 0011f f2 41 0f 59 d8 mulsd xmm3, xmm8
-
-; 39 :
-; 40 : i = (int32_t)f; // get integer part of f
-
- 00124 f2 0f 2c cb cvttsd2si ecx, xmm3
-
-; 41 : dBlepSrc = (const double *)dBlepData + i + BLEP_OS;
-
- 00128 48 63 c1 movsxd rax, ecx
- 0012b 66 0f 6e c1 movd xmm0, ecx
-
-; 44 : i = b->index;
-
- 0012f 41 8b 0b mov ecx, DWORD PTR [r11]
- 00132 4d 8d 0c c4 lea r9, QWORD PTR [r12+rax*8]
- 00136 f3 0f e6 c0 cvtdq2pd xmm0, xmm0
- 0013a f2 0f 5c d8 subsd xmm3, xmm0
- 0013e 66 90 npad 2
-$LL21@mixChannel:
-
-; 47 : while (n--)
-; 48 : {
-; 49 : b->dBuffer[i] += dAmplitude * LERP(dBlepSrc[0], dBlepSrc[1], f);
-
- 00140 f2 41 0f 10 49
- 08 movsd xmm1, QWORD PTR [r9+8]
- 00146 f2 41 0f 5c 09 subsd xmm1, QWORD PTR [r9]
- 0014b 48 63 c1 movsxd rax, ecx
-
-; 50 : i = (i + 1) & BLEP_RNS;
-
- 0014e ff c1 inc ecx
- 00150 83 e1 07 and ecx, 7
- 00153 f2 0f 59 cb mulsd xmm1, xmm3
- 00157 f2 41 0f 58 09 addsd xmm1, QWORD PTR [r9]
-
-; 51 : dBlepSrc += BLEP_SP;
-
- 0015c 49 83 c1 28 add r9, 40 ; 00000028H
- 00160 f2 0f 59 cc mulsd xmm1, xmm4
- 00164 f2 41 0f 58 4c
- c3 08 addsd xmm1, QWORD PTR [r11+rax*8+8]
- 0016b f2 41 0f 11 4c
- c3 08 movsd QWORD PTR [r11+rax*8+8], xmm1
- 00172 41 80 ea 01 sub r10b, 1
- 00176 75 c8 jne SHORT $LL21@mixChannel
-
-; 52 : }
-; 53 :
-; 54 : b->samplesLeft = BLEP_NS;
-
- 00178 43 c7 84 30 04
- 00 00 00 08 00
- 00 00 mov DWORD PTR blep[r8+r14+4], 8
-$LN64@mixChannel:
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 558 : bSmp->dLastValue = dTempSample;
-
- 00184 f2 43 0f 11 94
- 30 48 00 00 00 movsd QWORD PTR blep[r8+r14+72], xmm2
-$LN61@mixChannel:
-
-; 559 : }
-; 560 :
-; 561 : if (dTempVolume != bVol->dLastValue)
-
- 0018e f2 43 0f 10 8c
- 30 48 00 00 00 movsd xmm1, QWORD PTR blepVol[r8+r14+72]
- 00198 66 0f 2e e9 ucomisd xmm5, xmm1
- 0019c 74 5c je SHORT $LN65@mixChannel
-; File C:\Programming\pt2-clone\src\pt2_blep.c
-
-; 68 : i = b->index;
-
- 0019e 47 8b 8c 30 00
- 00 00 00 mov r9d, DWORD PTR blepVol[r8+r14]
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 563 : blepVolAdd(bVol, bVol->dLastValue - dTempVolume);
-
- 001a6 f2 0f 5c cd subsd xmm1, xmm5
-; File C:\Programming\pt2-clone\src\pt2_blep.c
-
-; 66 : dBlepSrc = (const double *)dBlepData + BLEP_OS;
-
- 001aa 4d 8b d4 mov r10, r12
-
-; 69 :
-; 70 : n = BLEP_NS;
-
- 001ad 41 b3 08 mov r11b, 8
-$LL25@mixChannel:
-
-; 71 : while (n--)
-; 72 : {
-; 73 : b->dBuffer[i] += dAmplitude * (*dBlepSrc);
-
- 001b0 49 63 c1 movsxd rax, r9d
- 001b3 0f 28 c1 movaps xmm0, xmm1
- 001b6 f2 41 0f 59 02 mulsd xmm0, QWORD PTR [r10]
-
-; 74 : i = (i + 1) & BLEP_RNS;
-
- 001bb 41 ff c1 inc r9d
- 001be 41 83 e1 07 and r9d, 7
-
-; 75 : dBlepSrc += BLEP_SP;
-
- 001c2 49 83 c2 28 add r10, 40 ; 00000028H
- 001c6 49 8d 0c c0 lea rcx, QWORD PTR [r8+rax*8]
- 001ca f2 42 0f 58 84
- 31 08 00 00 00 addsd xmm0, QWORD PTR blepVol[rcx+r14+8]
- 001d4 f2 42 0f 11 84
- 31 08 00 00 00 movsd QWORD PTR blepVol[rcx+r14+8], xmm0
- 001de 41 80 eb 01 sub r11b, 1
- 001e2 75 cc jne SHORT $LL25@mixChannel
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 564 : bVol->dLastValue = dTempVolume;
-
- 001e4 f2 43 0f 11 ac
- 30 48 00 00 00 movsd QWORD PTR blepVol[r8+r14+72], xmm5
-; File C:\Programming\pt2-clone\src\pt2_blep.c
-
-; 78 : b->samplesLeft = BLEP_NS;
-
- 001ee 43 c7 84 30 04
- 00 00 00 08 00
- 00 00 mov DWORD PTR blepVol[r8+r14+4], 8
-$LN65@mixChannel:
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 567 : if (bSmp->samplesLeft > 0) dTempSample += blepRun(bSmp);
-
- 001fa 47 39 bc 30 04
- 00 00 00 cmp DWORD PTR blep[r8+r14+4], r15d
- 00202 7e 2d jle SHORT $LN62@mixChannel
-; File C:\Programming\pt2-clone\src\pt2_blep.c
-
-; 85 : fBlepOutput = b->dBuffer[b->index];
-
- 00204 49 8d 8e 00 00
- 00 00 lea rcx, QWORD PTR blep[r14]
- 0020b 49 03 c8 add rcx, r8
- 0020e 48 63 01 movsxd rax, DWORD PTR [rcx]
- 00211 f2 0f 10 44 c1
- 08 movsd xmm0, QWORD PTR [rcx+rax*8+8]
-
-; 86 : b->dBuffer[b->index] = 0.0;
-
- 00217 4c 89 7c c1 08 mov QWORD PTR [rcx+rax*8+8], r15
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 567 : if (bSmp->samplesLeft > 0) dTempSample += blepRun(bSmp);
-
- 0021c f2 0f 58 d0 addsd xmm2, xmm0
-; File C:\Programming\pt2-clone\src\pt2_blep.c
-
-; 88 : b->index = (b->index + 1) & BLEP_RNS;
-
- 00220 8b 01 mov eax, DWORD PTR [rcx]
- 00222 ff c0 inc eax
- 00224 83 e0 07 and eax, 7
-
-; 89 :
-; 90 : b->samplesLeft--;
-
- 00227 43 ff 8c 30 04
- 00 00 00 dec DWORD PTR blep[r8+r14+4]
- 0022f 89 01 mov DWORD PTR [rcx], eax
-$LN62@mixChannel:
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 568 : if (bVol->samplesLeft > 0) dTempVolume += blepRun(bVol);
-
- 00231 47 39 bc 30 04
- 00 00 00 cmp DWORD PTR blepVol[r8+r14+4], r15d
- 00239 7e 3f jle SHORT $LN63@mixChannel
-; File C:\Programming\pt2-clone\src\pt2_blep.c
-
-; 85 : fBlepOutput = b->dBuffer[b->index];
-
- 0023b 4b 63 84 30 00
- 00 00 00 movsxd rax, DWORD PTR blepVol[r8+r14]
- 00243 49 8d 0c c0 lea rcx, QWORD PTR [r8+rax*8]
- 00247 f2 42 0f 10 84
- 31 08 00 00 00 movsd xmm0, QWORD PTR blepVol[rcx+r14+8]
-
-; 86 : b->dBuffer[b->index] = 0.0;
-
- 00251 4e 89 bc 31 08
- 00 00 00 mov QWORD PTR blepVol[rcx+r14+8], r15
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 568 : if (bVol->samplesLeft > 0) dTempVolume += blepRun(bVol);
-
- 00259 f2 0f 58 e8 addsd xmm5, xmm0
-; File C:\Programming\pt2-clone\src\pt2_blep.c
-
-; 88 : b->index = (b->index + 1) & BLEP_RNS;
-
- 0025d 43 8b 84 30 00
- 00 00 00 mov eax, DWORD PTR blepVol[r8+r14]
- 00265 ff c0 inc eax
- 00267 83 e0 07 and eax, 7
-
-; 89 :
-; 90 : b->samplesLeft--;
-
- 0026a 43 ff 8c 30 04
- 00 00 00 dec DWORD PTR blepVol[r8+r14+4]
- 00272 43 89 84 30 00
- 00 00 00 mov DWORD PTR blepVol[r8+r14], eax
-$LN63@mixChannel:
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 570 : dTempSample *= dTempVolume;
-
- 0027a f2 0f 59 d5 mulsd xmm2, xmm5
-
-; 571 :
-; 572 : dMixBufferL[j] += dTempSample * v->dPanL;
-
- 0027e 0f 28 c2 movaps xmm0, xmm2
- 00281 f2 0f 59 42 08 mulsd xmm0, QWORD PTR [rdx+8]
- 00286 f2 0f 58 04 1e addsd xmm0, QWORD PTR [rsi+rbx]
- 0028b f2 0f 11 04 1e movsd QWORD PTR [rsi+rbx], xmm0
-
-; 573 : dMixBufferR[j] += dTempSample * v->dPanR;
-
- 00290 f2 0f 59 52 10 mulsd xmm2, QWORD PTR [rdx+16]
- 00295 f2 0f 58 13 addsd xmm2, QWORD PTR [rbx]
- 00299 f2 0f 11 13 movsd QWORD PTR [rbx], xmm2
-
-; 574 :
-; 575 : v->dPhase += v->dDelta;
-
- 0029d f2 0f 10 4a d8 movsd xmm1, QWORD PTR [rdx-40]
- 002a2 0f 28 c1 movaps xmm0, xmm1
- 002a5 f2 0f 58 42 e8 addsd xmm0, QWORD PTR [rdx-24]
-
-; 576 :
-; 577 : // PAT2SMP needs multi-step, so use while() here (will be only one iteration in normal mixing mode)
-; 578 : while (v->dPhase >= 1.0)
-
- 002aa 66 0f 2f c6 comisd xmm0, xmm6
- 002ae f2 0f 11 42 e8 movsd QWORD PTR [rdx-24], xmm0
- 002b3 72 49 jb SHORT $LN5@mixChannel
-
-; 579 : {
-; 580 : v->dPhase -= 1.0;
-; 581 :
-; 582 : v->dLastPhase = v->dPhase;
-; 583 : v->dLastDelta = v->dDelta;
-; 584 : v->dLastDeltaMul = v->dDeltaMul;
-
- 002b5 f2 0f 10 52 e0 movsd xmm2, QWORD PTR [rdx-32]
- 002ba 8b 4a c8 mov ecx, DWORD PTR [rdx-56]
- 002bd 44 8b 4a c0 mov r9d, DWORD PTR [rdx-64]
-$LL8@mixChannel:
-
-; 585 :
-; 586 : if (++v->pos >= v->length)
-
- 002c1 8d 41 01 lea eax, DWORD PTR [rcx+1]
- 002c4 f2 0f 5c c6 subsd xmm0, xmm6
- 002c8 8b c8 mov ecx, eax
- 002ca 41 3b c1 cmp eax, r9d
- 002cd 7c 0f jl SHORT $LN48@mixChannel
-
-; 592 : v->data = v->newData;
-
- 002cf 48 8b 42 b8 mov rax, QWORD PTR [rdx-72]
- 002d3 41 8b cf mov ecx, r15d
- 002d6 44 8b 4a c4 mov r9d, DWORD PTR [rdx-60]
- 002da 48 89 42 b0 mov QWORD PTR [rdx-80], rax
-$LN48@mixChannel:
-
-; 576 :
-; 577 : // PAT2SMP needs multi-step, so use while() here (will be only one iteration in normal mixing mode)
-; 578 : while (v->dPhase >= 1.0)
-
- 002de 66 0f 2f c6 comisd xmm0, xmm6
- 002e2 73 dd jae SHORT $LL8@mixChannel
- 002e4 f2 0f 11 4a f0 movsd QWORD PTR [rdx-16], xmm1
- 002e9 f2 0f 11 02 movsd QWORD PTR [rdx], xmm0
- 002ed f2 0f 11 52 f8 movsd QWORD PTR [rdx-8], xmm2
- 002f2 f2 0f 11 42 e8 movsd QWORD PTR [rdx-24], xmm0
- 002f7 89 4a c8 mov DWORD PTR [rdx-56], ecx
- 002fa 44 89 4a c0 mov DWORD PTR [rdx-64], r9d
-$LN5@mixChannel:
-
-; 531 : continue;
-; 532 :
-; 533 : bSmp = &blep[i];
-; 534 : bVol = &blepVol[i];
-; 535 :
-; 536 : for (int32_t j = 0; j < numSamples; j++)
-
- 002fe 48 83 c3 08 add rbx, 8
- 00302 48 83 ef 01 sub rdi, 1
- 00306 0f 85 b4 fd ff
- ff jne $LL7@mixChannel
-$LN2@mixChannel:
-
-; 526 :
-; 527 : for (int32_t i = 0; i < AMIGA_VOICES; i++)
-
- 0030c 48 83 c2 70 add rdx, 112 ; 00000070H
- 00310 49 83 c0 50 add r8, 80 ; 00000050H
- 00314 49 3b d5 cmp rdx, r13
- 00317 0f 8c 77 fd ff
- ff jl $LL4@mixChannel
-
-; 593 : }
-; 594 : }
-; 595 : }
-; 596 : }
-; 597 : }
-
- 0031d 0f 28 74 24 40 movaps xmm6, XMMWORD PTR [rsp+64]
- 00322 4c 8d 5c 24 50 lea r11, QWORD PTR [rsp+80]
- 00327 49 8b 5b 30 mov rbx, QWORD PTR [r11+48]
- 0032b 49 8b 6b 38 mov rbp, QWORD PTR [r11+56]
- 0032f 49 8b 73 40 mov rsi, QWORD PTR [r11+64]
- 00333 45 0f 28 43 d0 movaps xmm8, XMMWORD PTR [r11-48]
- 00338 0f 28 7c 24 30 movaps xmm7, XMMWORD PTR [rsp+48]
- 0033d 49 8b e3 mov rsp, r11
- 00340 41 5f pop r15
- 00342 41 5e pop r14
- 00344 41 5d pop r13
- 00346 41 5c pop r12
- 00348 5f pop rdi
- 00349 c3 ret 0
-mixChannels ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT resetDitherSeed
-_TEXT SEGMENT
-resetDitherSeed PROC ; COMDAT
-
-; 601 : randSeed = INITIAL_DITHER_SEED;
-
- 00000 c7 05 00 00 00
- 00 00 50 34 12 mov DWORD PTR randSeed, 305418240 ; 12345000H
-
-; 602 : }
-
- 0000a c3 ret 0
-resetDitherSeed ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT random32
-_TEXT SEGMENT
-random32 PROC ; COMDAT
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 00000 69 05 00 00 00
- 00 05 84 08 08 imul eax, DWORD PTR randSeed, 134775813 ; 08088405H
- 0000a ff c0 inc eax
- 0000c 89 05 00 00 00
- 00 mov DWORD PTR randSeed, eax
-
-; 608 : return randSeed;
-; 609 : }
-
- 00012 c3 ret 0
-random32 ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT processMixedSamplesA1200
-_TEXT SEGMENT
-dOut$ = 0
-i$ = 64
-out$ = 72
-processMixedSamplesA1200 PROC ; COMDAT
-
-; 612 : {
-
- 00000 48 83 ec 38 sub rsp, 56 ; 00000038H
-
-; 613 : int32_t smp32;
-; 614 : double dOut[2], dDither;
-; 615 :
-; 616 : dOut[0] = dMixBufferL[i];
-
- 00004 48 8b 05 00 00
- 00 00 mov rax, QWORD PTR dMixBufferL
- 0000b 4c 63 c1 movsxd r8, ecx
- 0000e 0f 29 74 24 20 movaps XMMWORD PTR [rsp+32], xmm6
- 00013 0f 29 7c 24 10 movaps XMMWORD PTR [rsp+16], xmm7
-
-; 617 : dOut[1] = dMixBufferR[i];
-; 618 :
-; 619 : // don't process any low-pass filter since the cut-off is around 28-31kHz on A1200
-; 620 :
-; 621 : // process "LED" filter
-; 622 : if (filterFlags & FILTER_LED_ENABLED)
-
- 00018 f2 0f 10 3d 00
- 00 00 00 movsd xmm7, QWORD PTR __real@3ddb7cdfd9d7bdbb
- 00020 f2 42 0f 10 04
- c0 movsd xmm0, QWORD PTR [rax+r8*8]
- 00026 48 8b 05 00 00
- 00 00 mov rax, QWORD PTR dMixBufferR
- 0002d f2 0f 11 04 24 movsd QWORD PTR dOut$[rsp], xmm0
- 00032 f2 42 0f 10 0c
- c0 movsd xmm1, QWORD PTR [rax+r8*8]
- 00038 0f b6 05 00 00
- 00 00 movzx eax, BYTE PTR filterFlags
- 0003f f2 0f 11 4c 24
- 08 movsd QWORD PTR dOut$[rsp+8], xmm1
- 00045 a8 02 test al, 2
- 00047 0f 84 bb 00 00
- 00 je $LN52@processMix
-
-; 167 : filter->dLed[0] += filterC.dLed * (dIn[0] - filter->dLed[0])
-
- 0004d f2 0f 10 15 00
- 00 00 00 movsd xmm2, QWORD PTR filterLED
- 00055 f2 0f 10 2d 08
- 00 00 00 movsd xmm5, QWORD PTR filterLED+8
- 0005d 0f 28 ca movaps xmm1, xmm2
- 00060 f2 0f 10 25 00
- 00 00 00 movsd xmm4, QWORD PTR filterLEDC
- 00068 f2 0f 5c cd subsd xmm1, xmm5
-
-; 168 : + filterC.dLedFb * (filter->dLed[0] - filter->dLed[1]) + DENORMAL_OFFSET;
-; 169 : filter->dLed[1] += filterC.dLed * (filter->dLed[0] - filter->dLed[1]) + DENORMAL_OFFSET;
-; 170 : dOut[0] = filter->dLed[1];
-; 171 :
-; 172 : // right channel "LED" filter
-; 173 : filter->dLed[2] += filterC.dLed * (dIn[1] - filter->dLed[2])
-
- 0006c f2 0f 10 35 18
- 00 00 00 movsd xmm6, QWORD PTR filterLED+24
- 00074 f2 0f 10 04 24 movsd xmm0, QWORD PTR dOut$[rsp]
- 00079 f2 0f 5c c2 subsd xmm0, xmm2
- 0007d f2 0f 59 0d 08
- 00 00 00 mulsd xmm1, QWORD PTR filterLEDC+8
- 00085 f2 0f 59 c4 mulsd xmm0, xmm4
- 00089 f2 0f 58 c8 addsd xmm1, xmm0
- 0008d f2 0f 10 44 24
- 08 movsd xmm0, QWORD PTR dOut$[rsp+8]
- 00093 f2 0f 58 cf addsd xmm1, xmm7
- 00097 f2 0f 58 d1 addsd xmm2, xmm1
- 0009b f2 0f 11 15 00
- 00 00 00 movsd QWORD PTR filterLED, xmm2
- 000a3 f2 0f 5c d5 subsd xmm2, xmm5
- 000a7 f2 0f 59 d4 mulsd xmm2, xmm4
- 000ab f2 0f 58 d7 addsd xmm2, xmm7
- 000af f2 0f 58 ea addsd xmm5, xmm2
- 000b3 f2 0f 10 15 10
- 00 00 00 movsd xmm2, QWORD PTR filterLED+16
- 000bb 0f 28 ca movaps xmm1, xmm2
- 000be f2 0f 5c c2 subsd xmm0, xmm2
- 000c2 f2 0f 5c ce subsd xmm1, xmm6
- 000c6 f2 0f 11 2d 08
- 00 00 00 movsd QWORD PTR filterLED+8, xmm5
- 000ce f2 0f 59 c4 mulsd xmm0, xmm4
- 000d2 f2 0f 59 0d 08
- 00 00 00 mulsd xmm1, QWORD PTR filterLEDC+8
- 000da f2 0f 58 c8 addsd xmm1, xmm0
- 000de f2 0f 58 cf addsd xmm1, xmm7
- 000e2 f2 0f 58 d1 addsd xmm2, xmm1
- 000e6 f2 0f 11 15 10
- 00 00 00 movsd QWORD PTR filterLED+16, xmm2
- 000ee f2 0f 5c d6 subsd xmm2, xmm6
-
-; 174 : + filterC.dLedFb * (filter->dLed[2] - filter->dLed[3]) + DENORMAL_OFFSET;
-; 175 : filter->dLed[3] += filterC.dLed * (filter->dLed[2] - filter->dLed[3]) + DENORMAL_OFFSET;
-
- 000f2 f2 0f 59 d4 mulsd xmm2, xmm4
- 000f6 f2 0f 58 d7 addsd xmm2, xmm7
- 000fa f2 0f 58 f2 addsd xmm6, xmm2
- 000fe f2 0f 11 35 18
- 00 00 00 movsd QWORD PTR filterLED+24, xmm6
-
-; 617 : dOut[1] = dMixBufferR[i];
-; 618 :
-; 619 : // don't process any low-pass filter since the cut-off is around 28-31kHz on A1200
-; 620 :
-; 621 : // process "LED" filter
-; 622 : if (filterFlags & FILTER_LED_ENABLED)
-
- 00106 eb 0b jmp SHORT $LN6@processMix
-$LN52@processMix:
- 00108 f2 0f 10 74 24
- 08 movsd xmm6, QWORD PTR dOut$[rsp+8]
- 0010e f2 0f 10 2c 24 movsd xmm5, QWORD PTR dOut$[rsp]
-$LN6@processMix:
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 00113 69 0d 00 00 00
- 00 05 84 08 08 imul ecx, DWORD PTR randSeed, 134775813 ; 08088405H
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 0011d f2 0f 10 25 00
- 00 00 00 movsd xmm4, QWORD PTR filterHi
- 00125 f2 0f 59 25 18
- 00 00 00 mulsd xmm4, QWORD PTR filterHi+24
-
-; 191 : dOut[0] = filter->dBuffer[0];
-; 192 :
-; 193 : // right channel low-pass
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 0012d f2 0f 10 1d 08
- 00 00 00 movsd xmm3, QWORD PTR filterHi+8
- 00135 f2 0f 59 1d 18
- 00 00 00 mulsd xmm3, QWORD PTR filterHi+24
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 0013d ff c1 inc ecx
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 0013f f2 0f 10 15 10
- 00 00 00 movsd xmm2, QWORD PTR filterHi+16
- 00147 0f 28 c2 movaps xmm0, xmm2
-
-; 634 : dOut[0] += dDither;
-
- 0014a 69 c1 05 84 08
- 08 imul eax, ecx, 134775813 ; 08088405H
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 00150 f2 0f 59 c5 mulsd xmm0, xmm5
-
-; 204 : dOut[0] = dIn[0] - dLow[0]; // left channel high-pass
-
- 00154 66 0f 14 ee unpcklpd xmm5, xmm6
- 00158 66 0f 6e c9 movd xmm1, ecx
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 0015c ff c0 inc eax
-
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 0015e f2 0f 59 d6 mulsd xmm2, xmm6
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 00162 89 05 00 00 00
- 00 mov DWORD PTR randSeed, eax
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 00168 f2 0f 58 e0 addsd xmm4, xmm0
-
-; 634 : dOut[0] += dDither;
-
- 0016c f3 0f e6 c9 cvtdq2pd xmm1, xmm1
-
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 00170 f2 0f 58 da addsd xmm3, xmm2
-
-; 630 : dOut[1] *= -((INT16_MAX+1.0) / AMIGA_VOICES);
-; 631 :
-; 632 : // apply 0.5-bit dither
-; 633 : dDither = random32() * (0.5 / (INT32_MAX+1.0)); // -0.5..0.5
-
- 00174 f2 0f 59 0d 00
- 00 00 00 mulsd xmm1, QWORD PTR __real@3df0000000000000
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 0017c f2 0f 58 e7 addsd xmm4, xmm7
-
-; 191 : dOut[0] = filter->dBuffer[0];
-; 192 :
-; 193 : // right channel low-pass
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 00180 f2 0f 58 df addsd xmm3, xmm7
-
-; 204 : dOut[0] = dIn[0] - dLow[0]; // left channel high-pass
-
- 00184 0f 28 c4 movaps xmm0, xmm4
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 00187 f2 0f 11 25 00
- 00 00 00 movsd QWORD PTR filterHi, xmm4
-
-; 204 : dOut[0] = dIn[0] - dLow[0]; // left channel high-pass
-
- 0018f 66 0f 14 c3 unpcklpd xmm0, xmm3
-
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 00193 f2 0f 11 1d 08
- 00 00 00 movsd QWORD PTR filterHi+8, xmm3
-
-; 204 : dOut[0] = dIn[0] - dLow[0]; // left channel high-pass
-
- 0019b 66 0f 5c e8 subpd xmm5, xmm0
- 0019f 66 0f 6e d8 movd xmm3, eax
-
-; 623 : lossyIntegratorLED(filterLEDC, &filterLED, dOut, dOut);
-; 624 :
-; 625 : // process high-pass filter
-; 626 : lossyIntegratorHighPass(&filterHi, dOut, dOut);
-; 627 :
-; 628 : // normalize and flip phase (A500/A1200 has an inverted audio signal)
-; 629 : dOut[0] *= -((INT16_MAX+1.0) / AMIGA_VOICES);
-
- 001a3 66 0f 59 2d 00
- 00 00 00 mulpd xmm5, XMMWORD PTR __xmm@c0c0000000000000c0c0000000000000
-
-; 634 : dOut[0] += dDither;
-
- 001ab f3 0f e6 db cvtdq2pd xmm3, xmm3
- 001af f2 0f 58 cd addsd xmm1, xmm5
- 001b3 0f 28 c5 movaps xmm0, xmm5
- 001b6 f2 0f 59 1d 00
- 00 00 00 mulsd xmm3, QWORD PTR __real@3df0000000000000
- 001be 66 0f 15 c5 unpckhpd xmm0, xmm5
- 001c2 f2 0f 2c c9 cvttsd2si ecx, xmm1
- 001c6 f2 0f 58 d8 addsd xmm3, xmm0
-
-; 635 : dDither = random32() * (0.5 / (INT32_MAX+1.0));
-; 636 : dOut[1] += dDither;
-; 637 :
-; 638 : smp32 = (int32_t)dOut[0];
-; 639 : CLAMP16(smp32);
-
- 001ca 0f bf c1 movsx eax, cx
- 001cd 3b c1 cmp eax, ecx
- 001cf 74 09 je SHORT $LN3@processMix
- 001d1 c1 f9 1f sar ecx, 31
- 001d4 81 f1 ff 7f 00
- 00 xor ecx, 32767 ; 00007fffH
-$LN3@processMix:
-
-; 640 : out[0] = (int16_t)smp32;
-
- 001da 66 89 0a mov WORD PTR [rdx], cx
- 001dd f2 0f 2c cb cvttsd2si ecx, xmm3
-
-; 641 :
-; 642 : smp32 = (int32_t)dOut[1];
-; 643 : CLAMP16(smp32);
-
- 001e1 0f bf c1 movsx eax, cx
- 001e4 3b c1 cmp eax, ecx
- 001e6 74 09 je SHORT $LN51@processMix
- 001e8 c1 f9 1f sar ecx, 31
- 001eb 81 f1 ff 7f 00
- 00 xor ecx, 32767 ; 00007fffH
-$LN51@processMix:
-
-; 644 : out[1] = (int16_t)smp32;
-; 645 : }
-
- 001f1 0f 28 74 24 20 movaps xmm6, XMMWORD PTR [rsp+32]
- 001f6 0f 28 7c 24 10 movaps xmm7, XMMWORD PTR [rsp+16]
- 001fb 66 89 4a 02 mov WORD PTR [rdx+2], cx
- 001ff 48 83 c4 38 add rsp, 56 ; 00000038H
- 00203 c3 ret 0
-processMixedSamplesA1200 ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT processMixedSamplesA500
-_TEXT SEGMENT
-dOut$ = 0
-i$ = 64
-out$ = 72
-processMixedSamplesA500 PROC ; COMDAT
-
-; 648 : {
-
- 00000 48 83 ec 38 sub rsp, 56 ; 00000038H
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 00004 f2 0f 10 05 00
- 00 00 00 movsd xmm0, QWORD PTR filterLo
- 0000c f2 0f 59 05 18
- 00 00 00 mulsd xmm0, QWORD PTR filterLo+24
-
-; 653 : dOut[1] = dMixBufferR[i];
-
- 00014 48 8b 05 00 00
- 00 00 mov rax, QWORD PTR dMixBufferR
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 0001b f2 0f 10 15 10
- 00 00 00 movsd xmm2, QWORD PTR filterLo+16
-
-; 649 : int32_t smp32;
-; 650 : double dOut[2], dDither;
-; 651 :
-; 652 : dOut[0] = dMixBufferL[i];
-
- 00023 4c 63 c1 movsxd r8, ecx
- 00026 0f 29 74 24 20 movaps XMMWORD PTR [rsp+32], xmm6
- 0002b 0f 29 7c 24 10 movaps XMMWORD PTR [rsp+16], xmm7
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 00030 f2 0f 10 3d 00
- 00 00 00 movsd xmm7, QWORD PTR __real@3ddb7cdfd9d7bdbb
-
-; 653 : dOut[1] = dMixBufferR[i];
-
- 00038 f2 42 0f 10 24
- c0 movsd xmm4, QWORD PTR [rax+r8*8]
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 0003e 48 8b 05 00 00
- 00 00 mov rax, QWORD PTR dMixBufferL
-
-; 191 : dOut[0] = filter->dBuffer[0];
-; 192 :
-; 193 : // right channel low-pass
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 00045 f2 0f 59 25 10
- 00 00 00 mulsd xmm4, QWORD PTR filterLo+16
- 0004d f2 42 0f 59 14
- c0 mulsd xmm2, QWORD PTR [rax+r8*8]
-
-; 654 :
-; 655 : // process low-pass filter
-; 656 : lossyIntegrator(&filterLo, dOut, dOut);
-; 657 :
-; 658 : // process "LED" filter
-; 659 : if (filterFlags & FILTER_LED_ENABLED)
-
- 00053 0f b6 05 00 00
- 00 00 movzx eax, BYTE PTR filterFlags
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 0005a f2 0f 58 d0 addsd xmm2, xmm0
-
-; 191 : dOut[0] = filter->dBuffer[0];
-; 192 :
-; 193 : // right channel low-pass
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 0005e f2 0f 10 05 08
- 00 00 00 movsd xmm0, QWORD PTR filterLo+8
- 00066 f2 0f 59 05 18
- 00 00 00 mulsd xmm0, QWORD PTR filterLo+24
- 0006e f2 0f 58 d7 addsd xmm2, xmm7
- 00072 f2 0f 58 e0 addsd xmm4, xmm0
- 00076 f2 0f 11 15 00
- 00 00 00 movsd QWORD PTR filterLo, xmm2
- 0007e f2 0f 11 14 24 movsd QWORD PTR dOut$[rsp], xmm2
- 00083 f2 0f 58 e7 addsd xmm4, xmm7
- 00087 f2 0f 11 25 08
- 00 00 00 movsd QWORD PTR filterLo+8, xmm4
-
-; 195 : dOut[1] = filter->dBuffer[1];
-
- 0008f f2 0f 11 64 24
- 08 movsd QWORD PTR dOut$[rsp+8], xmm4
-
-; 654 :
-; 655 : // process low-pass filter
-; 656 : lossyIntegrator(&filterLo, dOut, dOut);
-; 657 :
-; 658 : // process "LED" filter
-; 659 : if (filterFlags & FILTER_LED_ENABLED)
-
- 00095 a8 02 test al, 2
- 00097 0f 84 bb 00 00
- 00 je $LN54@processMix
-
-; 167 : filter->dLed[0] += filterC.dLed * (dIn[0] - filter->dLed[0])
-
- 0009d f2 0f 10 15 00
- 00 00 00 movsd xmm2, QWORD PTR filterLED
- 000a5 f2 0f 10 2d 08
- 00 00 00 movsd xmm5, QWORD PTR filterLED+8
- 000ad 0f 28 ca movaps xmm1, xmm2
- 000b0 f2 0f 10 25 00
- 00 00 00 movsd xmm4, QWORD PTR filterLEDC
- 000b8 f2 0f 5c cd subsd xmm1, xmm5
-
-; 168 : + filterC.dLedFb * (filter->dLed[0] - filter->dLed[1]) + DENORMAL_OFFSET;
-; 169 : filter->dLed[1] += filterC.dLed * (filter->dLed[0] - filter->dLed[1]) + DENORMAL_OFFSET;
-; 170 : dOut[0] = filter->dLed[1];
-; 171 :
-; 172 : // right channel "LED" filter
-; 173 : filter->dLed[2] += filterC.dLed * (dIn[1] - filter->dLed[2])
-
- 000bc f2 0f 10 35 18
- 00 00 00 movsd xmm6, QWORD PTR filterLED+24
- 000c4 f2 0f 10 04 24 movsd xmm0, QWORD PTR dOut$[rsp]
- 000c9 f2 0f 5c c2 subsd xmm0, xmm2
- 000cd f2 0f 59 0d 08
- 00 00 00 mulsd xmm1, QWORD PTR filterLEDC+8
- 000d5 f2 0f 59 c4 mulsd xmm0, xmm4
- 000d9 f2 0f 58 c8 addsd xmm1, xmm0
- 000dd f2 0f 10 44 24
- 08 movsd xmm0, QWORD PTR dOut$[rsp+8]
- 000e3 f2 0f 58 cf addsd xmm1, xmm7
- 000e7 f2 0f 58 d1 addsd xmm2, xmm1
- 000eb f2 0f 11 15 00
- 00 00 00 movsd QWORD PTR filterLED, xmm2
- 000f3 f2 0f 5c d5 subsd xmm2, xmm5
- 000f7 f2 0f 59 d4 mulsd xmm2, xmm4
- 000fb f2 0f 58 d7 addsd xmm2, xmm7
- 000ff f2 0f 58 ea addsd xmm5, xmm2
- 00103 f2 0f 10 15 10
- 00 00 00 movsd xmm2, QWORD PTR filterLED+16
- 0010b 0f 28 ca movaps xmm1, xmm2
- 0010e f2 0f 5c c2 subsd xmm0, xmm2
- 00112 f2 0f 5c ce subsd xmm1, xmm6
- 00116 f2 0f 11 2d 08
- 00 00 00 movsd QWORD PTR filterLED+8, xmm5
- 0011e f2 0f 59 c4 mulsd xmm0, xmm4
- 00122 f2 0f 59 0d 08
- 00 00 00 mulsd xmm1, QWORD PTR filterLEDC+8
- 0012a f2 0f 58 c8 addsd xmm1, xmm0
- 0012e f2 0f 58 cf addsd xmm1, xmm7
- 00132 f2 0f 58 d1 addsd xmm2, xmm1
- 00136 f2 0f 11 15 10
- 00 00 00 movsd QWORD PTR filterLED+16, xmm2
- 0013e f2 0f 5c d6 subsd xmm2, xmm6
-
-; 174 : + filterC.dLedFb * (filter->dLed[2] - filter->dLed[3]) + DENORMAL_OFFSET;
-; 175 : filter->dLed[3] += filterC.dLed * (filter->dLed[2] - filter->dLed[3]) + DENORMAL_OFFSET;
-
- 00142 f2 0f 59 d4 mulsd xmm2, xmm4
- 00146 f2 0f 58 d7 addsd xmm2, xmm7
- 0014a f2 0f 58 f2 addsd xmm6, xmm2
- 0014e f2 0f 11 35 18
- 00 00 00 movsd QWORD PTR filterLED+24, xmm6
-
-; 654 :
-; 655 : // process low-pass filter
-; 656 : lossyIntegrator(&filterLo, dOut, dOut);
-; 657 :
-; 658 : // process "LED" filter
-; 659 : if (filterFlags & FILTER_LED_ENABLED)
-
- 00156 eb 0b jmp SHORT $LN8@processMix
-$LN54@processMix:
- 00158 f2 0f 10 74 24
- 08 movsd xmm6, QWORD PTR dOut$[rsp+8]
- 0015e f2 0f 10 2c 24 movsd xmm5, QWORD PTR dOut$[rsp]
-$LN8@processMix:
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 00163 69 0d 00 00 00
- 00 05 84 08 08 imul ecx, DWORD PTR randSeed, 134775813 ; 08088405H
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 0016d f2 0f 10 25 00
- 00 00 00 movsd xmm4, QWORD PTR filterHi
- 00175 f2 0f 59 25 18
- 00 00 00 mulsd xmm4, QWORD PTR filterHi+24
-
-; 191 : dOut[0] = filter->dBuffer[0];
-; 192 :
-; 193 : // right channel low-pass
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 0017d f2 0f 10 1d 08
- 00 00 00 movsd xmm3, QWORD PTR filterHi+8
- 00185 f2 0f 59 1d 18
- 00 00 00 mulsd xmm3, QWORD PTR filterHi+24
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 0018d ff c1 inc ecx
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 0018f f2 0f 10 15 10
- 00 00 00 movsd xmm2, QWORD PTR filterHi+16
- 00197 0f 28 c2 movaps xmm0, xmm2
-
-; 671 : dOut[0] += dDither;
-
- 0019a 69 c1 05 84 08
- 08 imul eax, ecx, 134775813 ; 08088405H
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 001a0 f2 0f 59 c5 mulsd xmm0, xmm5
-
-; 204 : dOut[0] = dIn[0] - dLow[0]; // left channel high-pass
-
- 001a4 66 0f 14 ee unpcklpd xmm5, xmm6
- 001a8 66 0f 6e c9 movd xmm1, ecx
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 001ac ff c0 inc eax
-
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 001ae f2 0f 59 d6 mulsd xmm2, xmm6
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 001b2 89 05 00 00 00
- 00 mov DWORD PTR randSeed, eax
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 001b8 f2 0f 58 e0 addsd xmm4, xmm0
-
-; 671 : dOut[0] += dDither;
-
- 001bc f3 0f e6 c9 cvtdq2pd xmm1, xmm1
-
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 001c0 f2 0f 58 da addsd xmm3, xmm2
-
-; 667 : dOut[1] *= -((INT16_MAX+1.0) / AMIGA_VOICES);
-; 668 :
-; 669 : // apply 0.5-bit dither
-; 670 : dDither = random32() * (0.5 / (INT32_MAX+1.0)); // -0.5..0.5
-
- 001c4 f2 0f 59 0d 00
- 00 00 00 mulsd xmm1, QWORD PTR __real@3df0000000000000
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 001cc f2 0f 58 e7 addsd xmm4, xmm7
-
-; 191 : dOut[0] = filter->dBuffer[0];
-; 192 :
-; 193 : // right channel low-pass
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 001d0 f2 0f 58 df addsd xmm3, xmm7
-
-; 204 : dOut[0] = dIn[0] - dLow[0]; // left channel high-pass
-
- 001d4 0f 28 c4 movaps xmm0, xmm4
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 001d7 f2 0f 11 25 00
- 00 00 00 movsd QWORD PTR filterHi, xmm4
-
-; 204 : dOut[0] = dIn[0] - dLow[0]; // left channel high-pass
-
- 001df 66 0f 14 c3 unpcklpd xmm0, xmm3
-
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 001e3 f2 0f 11 1d 08
- 00 00 00 movsd QWORD PTR filterHi+8, xmm3
-
-; 204 : dOut[0] = dIn[0] - dLow[0]; // left channel high-pass
-
- 001eb 66 0f 5c e8 subpd xmm5, xmm0
- 001ef 66 0f 6e d8 movd xmm3, eax
-
-; 660 : lossyIntegratorLED(filterLEDC, &filterLED, dOut, dOut);
-; 661 :
-; 662 : // process high-pass filter
-; 663 : lossyIntegratorHighPass(&filterHi, dOut, dOut);
-; 664 :
-; 665 : // normalize and flip phase (A500/A1200 has an inverted audio signal)
-; 666 : dOut[0] *= -((INT16_MAX+1.0) / AMIGA_VOICES);
-
- 001f3 66 0f 59 2d 00
- 00 00 00 mulpd xmm5, XMMWORD PTR __xmm@c0c0000000000000c0c0000000000000
-
-; 671 : dOut[0] += dDither;
-
- 001fb f3 0f e6 db cvtdq2pd xmm3, xmm3
- 001ff f2 0f 58 cd addsd xmm1, xmm5
- 00203 0f 28 c5 movaps xmm0, xmm5
- 00206 f2 0f 59 1d 00
- 00 00 00 mulsd xmm3, QWORD PTR __real@3df0000000000000
- 0020e 66 0f 15 c5 unpckhpd xmm0, xmm5
- 00212 f2 0f 2c c9 cvttsd2si ecx, xmm1
- 00216 f2 0f 58 d8 addsd xmm3, xmm0
-
-; 672 : dDither = random32() * (0.5 / (INT32_MAX+1.0));
-; 673 : dOut[1] += dDither;
-; 674 :
-; 675 : smp32 = (int32_t)dOut[0];
-; 676 : CLAMP16(smp32);
-
- 0021a 0f bf c1 movsx eax, cx
- 0021d 3b c1 cmp eax, ecx
- 0021f 74 09 je SHORT $LN3@processMix
- 00221 c1 f9 1f sar ecx, 31
- 00224 81 f1 ff 7f 00
- 00 xor ecx, 32767 ; 00007fffH
-$LN3@processMix:
-
-; 677 : out[0] = (int16_t)smp32;
-
- 0022a 66 89 0a mov WORD PTR [rdx], cx
- 0022d f2 0f 2c cb cvttsd2si ecx, xmm3
-
-; 678 :
-; 679 : smp32 = (int32_t)dOut[1];
-; 680 : CLAMP16(smp32);
-
- 00231 0f bf c1 movsx eax, cx
- 00234 3b c1 cmp eax, ecx
- 00236 74 09 je SHORT $LN53@processMix
- 00238 c1 f9 1f sar ecx, 31
- 0023b 81 f1 ff 7f 00
- 00 xor ecx, 32767 ; 00007fffH
-$LN53@processMix:
-
-; 681 : out[1] = (int16_t)smp32;
-; 682 : }
-
- 00241 0f 28 74 24 20 movaps xmm6, XMMWORD PTR [rsp+32]
- 00246 0f 28 7c 24 10 movaps xmm7, XMMWORD PTR [rsp+16]
- 0024b 66 89 4a 02 mov WORD PTR [rdx+2], cx
- 0024f 48 83 c4 38 add rsp, 56 ; 00000038H
- 00253 c3 ret 0
-processMixedSamplesA500 ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_helpers.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_helpers.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT outputAudio
-_TEXT SEGMENT
-titleTemp$8 = 32
-target$ = 240
-numSamples$ = 248
-outputAudio PROC ; COMDAT
-
-; 685 : {
-
-$LN126:
- 00000 48 8b c4 mov rax, rsp
- 00003 57 push rdi
- 00004 48 81 ec e0 00
- 00 00 sub rsp, 224 ; 000000e0H
- 0000b 0f 29 70 e8 movaps XMMWORD PTR [rax-24], xmm6
- 0000f 48 8b f9 mov rdi, rcx
- 00012 0f 29 78 d8 movaps XMMWORD PTR [rax-40], xmm7
- 00016 44 0f 29 40 c8 movaps XMMWORD PTR [rax-56], xmm8
- 0001b 44 0f 29 48 b8 movaps XMMWORD PTR [rax-72], xmm9
- 00020 48 89 58 08 mov QWORD PTR [rax+8], rbx
- 00024 48 63 da movsxd rbx, edx
-
-; 686 : int16_t *outStream, out[2];
-; 687 : int32_t j;
-; 688 :
-; 689 : mixChannels(numSamples);
-
- 00027 8b cb mov ecx, ebx
- 00029 e8 00 00 00 00 call mixChannels
-
-; 690 :
-; 691 : if (editor.isSMPRendering)
-
- 0002e 0f b6 05 3f 00
- 00 00 movzx eax, BYTE PTR editor+63
- 00035 4c 8b cb mov r9, rbx
- 00038 48 8b 9c 24 f0
- 00 00 00 mov rbx, QWORD PTR [rsp+240]
- 00040 84 c0 test al, al
- 00042 0f 84 8d 02 00
- 00 je $LN11@outputAudi
-
-; 692 : {
-; 693 : // render to sample (PAT2SMP)
-; 694 :
-; 695 : for (j = 0; j < numSamples; j++)
-
- 00048 4d 85 c9 test r9, r9
- 0004b 0f 8e 90 06 00
- 00 jle $LN9@outputAudi
- 00051 f2 0f 10 3d 00
- 00 00 00 movsd xmm7, QWORD PTR __real@3ddb7cdfd9d7bdbb
- 00059 45 33 c0 xor r8d, r8d
- 0005c f2 44 0f 10 05
- 00 00 00 00 movsd xmm8, QWORD PTR __real@3df0000000000000
- 00065 f2 44 0f 10 0d
- 00 00 00 00 movsd xmm9, QWORD PTR __real@40c0000000000000
- 0006e 66 90 npad 2
-$LL4@outputAudi:
-
-; 616 : dOut[0] = dMixBufferL[i];
-
- 00070 48 8b 05 00 00
- 00 00 mov rax, QWORD PTR dMixBufferL
- 00077 f2 42 0f 10 2c
- c0 movsd xmm5, QWORD PTR [rax+r8*8]
-
-; 617 : dOut[1] = dMixBufferR[i];
-
- 0007d 48 8b 05 00 00
- 00 00 mov rax, QWORD PTR dMixBufferR
- 00084 f2 42 0f 10 34
- c0 movsd xmm6, QWORD PTR [rax+r8*8]
-
-; 618 :
-; 619 : // don't process any low-pass filter since the cut-off is around 28-31kHz on A1200
-; 620 :
-; 621 : // process "LED" filter
-; 622 : if (filterFlags & FILTER_LED_ENABLED)
-
- 0008a 0f b6 05 00 00
- 00 00 movzx eax, BYTE PTR filterFlags
- 00091 a8 02 test al, 2
- 00093 0f 84 b4 00 00
- 00 je $LN22@outputAudi
-
-; 167 : filter->dLed[0] += filterC.dLed * (dIn[0] - filter->dLed[0])
-
- 00099 f2 0f 10 15 00
- 00 00 00 movsd xmm2, QWORD PTR filterLED
- 000a1 f2 0f 10 25 00
- 00 00 00 movsd xmm4, QWORD PTR filterLEDC
- 000a9 f2 0f 5c ea subsd xmm5, xmm2
- 000ad 0f 28 c2 movaps xmm0, xmm2
- 000b0 0f 28 cd movaps xmm1, xmm5
- 000b3 f2 0f 10 2d 08
- 00 00 00 movsd xmm5, QWORD PTR filterLED+8
- 000bb f2 0f 59 cc mulsd xmm1, xmm4
- 000bf f2 0f 5c c5 subsd xmm0, xmm5
- 000c3 f2 0f 59 05 08
- 00 00 00 mulsd xmm0, QWORD PTR filterLEDC+8
- 000cb f2 0f 58 c8 addsd xmm1, xmm0
- 000cf f2 0f 58 cf addsd xmm1, xmm7
- 000d3 f2 0f 58 d1 addsd xmm2, xmm1
- 000d7 f2 0f 11 15 00
- 00 00 00 movsd QWORD PTR filterLED, xmm2
- 000df f2 0f 5c d5 subsd xmm2, xmm5
-
-; 168 : + filterC.dLedFb * (filter->dLed[0] - filter->dLed[1]) + DENORMAL_OFFSET;
-; 169 : filter->dLed[1] += filterC.dLed * (filter->dLed[0] - filter->dLed[1]) + DENORMAL_OFFSET;
-
- 000e3 f2 0f 59 d4 mulsd xmm2, xmm4
- 000e7 f2 0f 58 d7 addsd xmm2, xmm7
- 000eb f2 0f 58 ea addsd xmm5, xmm2
-
-; 170 : dOut[0] = filter->dLed[1];
-; 171 :
-; 172 : // right channel "LED" filter
-; 173 : filter->dLed[2] += filterC.dLed * (dIn[1] - filter->dLed[2])
-
- 000ef f2 0f 10 15 10
- 00 00 00 movsd xmm2, QWORD PTR filterLED+16
- 000f7 f2 0f 5c f2 subsd xmm6, xmm2
- 000fb 0f 28 c2 movaps xmm0, xmm2
- 000fe f2 0f 11 2d 08
- 00 00 00 movsd QWORD PTR filterLED+8, xmm5
- 00106 0f 28 ce movaps xmm1, xmm6
- 00109 f2 0f 10 35 18
- 00 00 00 movsd xmm6, QWORD PTR filterLED+24
- 00111 f2 0f 5c c6 subsd xmm0, xmm6
- 00115 f2 0f 59 cc mulsd xmm1, xmm4
- 00119 f2 0f 59 05 08
- 00 00 00 mulsd xmm0, QWORD PTR filterLEDC+8
- 00121 f2 0f 58 c8 addsd xmm1, xmm0
- 00125 f2 0f 58 cf addsd xmm1, xmm7
- 00129 f2 0f 58 d1 addsd xmm2, xmm1
- 0012d f2 0f 11 15 10
- 00 00 00 movsd QWORD PTR filterLED+16, xmm2
- 00135 f2 0f 5c d6 subsd xmm2, xmm6
-
-; 174 : + filterC.dLedFb * (filter->dLed[2] - filter->dLed[3]) + DENORMAL_OFFSET;
-; 175 : filter->dLed[3] += filterC.dLed * (filter->dLed[2] - filter->dLed[3]) + DENORMAL_OFFSET;
-
- 00139 f2 0f 59 d4 mulsd xmm2, xmm4
- 0013d f2 0f 58 d7 addsd xmm2, xmm7
- 00141 f2 0f 58 f2 addsd xmm6, xmm2
- 00145 f2 0f 11 35 18
- 00 00 00 movsd QWORD PTR filterLED+24, xmm6
-$LN22@outputAudi:
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 0014d 69 05 00 00 00
- 00 05 84 08 08 imul eax, DWORD PTR randSeed, 134775813 ; 08088405H
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 00157 0f 28 dd movaps xmm3, xmm5
- 0015a f2 0f 10 05 00
- 00 00 00 movsd xmm0, QWORD PTR filterHi
-
-; 191 : dOut[0] = filter->dBuffer[0];
-; 192 :
-; 193 : // right channel low-pass
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 00162 0f 28 e6 movaps xmm4, xmm6
- 00165 f2 0f 59 05 18
- 00 00 00 mulsd xmm0, QWORD PTR filterHi+24
- 0016d 0f 57 c9 xorps xmm1, xmm1
-
-; 176 : dOut[1] = filter->dLed[3];
-; 177 : }
-; 178 :
-; 179 : void lossyIntegrator(lossyIntegrator_t *filter, double *dIn, double *dOut)
-; 180 : {
-; 181 : /* Low-pass filter implementation taken from:
-; 182 : ** https://bel.fi/alankila/modguide/interpolate.txt
-; 183 : **
-; 184 : ** This implementation has a less smooth cutoff curve compared to the old one, so it's
-; 185 : ** maybe not the best. However, I stick to this one because it has a higher gain
-; 186 : ** at the end of the curve (closer to real tested Amiga 500). It also sounds much closer when
-; 187 : ** comparing whitenoise on an A500. */
-; 188 :
-; 189 : // left channel low-pass
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 00170 f2 0f 59 1d 10
- 00 00 00 mulsd xmm3, QWORD PTR filterHi+16
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 00178 ff c0 inc eax
-
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 0017a f2 0f 59 25 10
- 00 00 00 mulsd xmm4, QWORD PTR filterHi+16
- 00182 f2 0f 58 d8 addsd xmm3, xmm0
- 00186 f2 0f 10 05 08
- 00 00 00 movsd xmm0, QWORD PTR filterHi+8
- 0018e f2 0f 59 05 18
- 00 00 00 mulsd xmm0, QWORD PTR filterHi+24
- 00196 f2 0f 58 df addsd xmm3, xmm7
- 0019a f2 0f 58 e0 addsd xmm4, xmm0
- 0019e 0f 57 c0 xorps xmm0, xmm0
-
-; 634 : dOut[0] += dDither;
-
- 001a1 f2 0f 2a c0 cvtsi2sd xmm0, eax
- 001a5 69 c0 05 84 08
- 08 imul eax, eax, 134775813 ; 08088405H
-
-; 204 : dOut[0] = dIn[0] - dLow[0]; // left channel high-pass
-
- 001ab f2 0f 5c eb subsd xmm5, xmm3
-
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 001af f2 0f 58 e7 addsd xmm4, xmm7
- 001b3 f2 0f 11 1d 00
- 00 00 00 movsd QWORD PTR filterHi, xmm3
-
-; 633 : dDither = random32() * (0.5 / (INT32_MAX+1.0)); // -0.5..0.5
-
- 001bb f2 41 0f 59 c0 mulsd xmm0, xmm8
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 001c0 ff c0 inc eax
-
-; 205 : dOut[1] = dIn[1] - dLow[1]; // right channel high-pass
-
- 001c2 f2 41 0f 59 e9 mulsd xmm5, xmm9
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 001c7 89 05 00 00 00
- 00 mov DWORD PTR randSeed, eax
-
-; 205 : dOut[1] = dIn[1] - dLow[1]; // right channel high-pass
-
- 001cd f2 0f 5c f4 subsd xmm6, xmm4
-
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 001d1 f2 0f 11 25 08
- 00 00 00 movsd QWORD PTR filterHi+8, xmm4
-
-; 634 : dOut[0] += dDither;
-
- 001d9 f2 0f 2a c8 cvtsi2sd xmm1, eax
- 001dd f2 0f 5c c5 subsd xmm0, xmm5
- 001e1 f2 41 0f 59 f1 mulsd xmm6, xmm9
- 001e6 f2 41 0f 59 c8 mulsd xmm1, xmm8
-
-; 635 : dDither = random32() * (0.5 / (INT32_MAX+1.0));
-; 636 : dOut[1] += dDither;
-; 637 :
-; 638 : smp32 = (int32_t)dOut[0];
-
- 001eb f2 0f 2c d0 cvttsd2si edx, xmm0
- 001ef f2 0f 5c ce subsd xmm1, xmm6
-
-; 639 : CLAMP16(smp32);
-
- 001f3 0f bf c2 movsx eax, dx
- 001f6 3b c2 cmp eax, edx
- 001f8 74 09 je SHORT $LN19@outputAudi
- 001fa c1 fa 1f sar edx, 31
- 001fd 81 f2 ff 7f 00
- 00 xor edx, 32767 ; 00007fffH
-$LN19@outputAudi:
-
-; 640 : out[0] = (int16_t)smp32;
-
- 00203 f2 0f 2c c9 cvttsd2si ecx, xmm1
-
-; 641 :
-; 642 : smp32 = (int32_t)dOut[1];
-; 643 : CLAMP16(smp32);
-
- 00207 0f bf c1 movsx eax, cx
- 0020a 3b c1 cmp eax, ecx
- 0020c 74 09 je SHORT $LN20@outputAudi
- 0020e c1 f9 1f sar ecx, 31
- 00211 81 f1 ff 7f 00
- 00 xor ecx, 32767 ; 00007fffH
-$LN20@outputAudi:
-
-; 644 : out[1] = (int16_t)smp32;
-
- 00217 0f bf c1 movsx eax, cx
-
-; 696 : {
-; 697 : processMixedSamplesA1200(j, out);
-; 698 : editor.pat2SmpBuf[editor.pat2SmpPos++] = (int16_t)((out[0] + out[1]) >> 1); // mix to mono
-
- 0021a 8b 0d 64 24 00
- 00 mov ecx, DWORD PTR editor+9316
- 00220 0f bf d2 movsx edx, dx
- 00223 03 d0 add edx, eax
- 00225 48 8b 05 a0 22
- 00 00 mov rax, QWORD PTR editor+8864
- 0022c d1 fa sar edx, 1
- 0022e 66 89 14 48 mov WORD PTR [rax+rcx*2], dx
- 00232 8b 05 64 24 00
- 00 mov eax, DWORD PTR editor+9316
- 00238 ff c0 inc eax
- 0023a 89 05 64 24 00
- 00 mov DWORD PTR editor+9316, eax
- 00240 3d fe ff 00 00 cmp eax, 65534 ; 0000fffeH
-
-; 699 :
-; 700 : if (editor.pat2SmpPos >= MAX_SAMPLE_LEN)
-
- 00245 73 11 jae SHORT $LN85@outputAudi
-
-; 692 : {
-; 693 : // render to sample (PAT2SMP)
-; 694 :
-; 695 : for (j = 0; j < numSamples; j++)
-
- 00247 49 ff c0 inc r8
- 0024a 4d 3b c1 cmp r8, r9
- 0024d 0f 8c 1d fe ff
- ff jl $LL4@outputAudi
-
-; 699 :
-; 700 : if (editor.pat2SmpPos >= MAX_SAMPLE_LEN)
-
- 00253 e9 89 04 00 00 jmp $LN9@outputAudi
-$LN85@outputAudi:
-; File C:\Programming\pt2-clone\src\pt2_helpers.c
-
-; 124 : modEntry->modified = true;
-
- 00258 48 8b 05 00 00
- 00 00 mov rax, QWORD PTR modEntry
-
-; 128 : if (modEntry->head.moduleTitle[0] != '\0')
-
- 0025f 4c 8d 05 00 00
- 00 00 lea r8, OFFSET FLAT:??_C@_04HKDAFHLO@1?404@
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 702 : editor.smpRenderingDone = true;
-
- 00266 c6 05 40 00 00
- 00 01 mov BYTE PTR editor+64, 1
-; File C:\Programming\pt2-clone\src\pt2_helpers.c
-
-; 128 : if (modEntry->head.moduleTitle[0] != '\0')
-
- 0026d 4c 8d 48 24 lea r9, QWORD PTR [rax+36]
- 00271 48 8d 4c 24 20 lea rcx, QWORD PTR titleTemp$8[rsp]
- 00276 c6 40 11 01 mov BYTE PTR [rax+17], 1
- 0027a 41 80 39 00 cmp BYTE PTR [r9], 0
- 0027e 74 20 je SHORT $LN35@outputAudi
-
-; 129 : {
-; 130 : if (modified)
-; 131 : {
-; 132 : if (ptConfig.modDot)
-
- 00280 80 3d 1a 00 00
- 00 00 cmp BYTE PTR ptConfig+26, 0
- 00287 48 8d 05 00 00
- 00 00 lea rax, OFFSET FLAT:??_C@_0CM@EDIGGKIK@ProTracker?52?5clone?5v?$CFs?5?9?5?$CC?$CFs?4mo@
- 0028e 48 8d 15 00 00
- 00 00 lea rdx, OFFSET FLAT:??_C@_0CM@DHKCJFPA@ProTracker?52?5clone?5v?$CFs?5?9?5?$CCmod?4?$CF@
- 00295 48 0f 44 d0 cmove rdx, rax
-
-; 133 : sprintf(titleTemp, "ProTracker 2 clone v%s - \"mod.%s\" (unsaved)", PROG_VER_STR, modEntry->head.moduleTitle);
-; 134 : else
-; 135 : sprintf(titleTemp, "ProTracker 2 clone v%s - \"%s.mod\" (unsaved)", PROG_VER_STR, modEntry->head.moduleTitle);
-; 136 : }
-; 137 : else
-; 138 : {
-; 139 : if (ptConfig.modDot)
-; 140 : sprintf(titleTemp, "ProTracker 2 clone v%s - \"mod.%s\"", PROG_VER_STR, modEntry->head.moduleTitle);
-; 141 : else
-; 142 : sprintf(titleTemp, "ProTracker 2 clone v%s - \"%s.mod\"", PROG_VER_STR, modEntry->head.moduleTitle);
-; 143 : }
-; 144 : }
-
- 00299 e8 00 00 00 00 call sprintf
- 0029e eb 1e jmp SHORT $LN48@outputAudi
-$LN35@outputAudi:
-
-; 145 : else
-; 146 : {
-; 147 : if (modified)
-; 148 : {
-; 149 : if (ptConfig.modDot)
-
- 002a0 80 3d 1a 00 00
- 00 00 cmp BYTE PTR ptConfig+26, 0
- 002a7 48 8d 05 00 00
- 00 00 lea rax, OFFSET FLAT:??_C@_0DC@JKDFPOLK@ProTracker?52?5clone?5v?$CFs?5?9?5?$CCuntit@
- 002ae 48 8d 15 00 00
- 00 00 lea rdx, OFFSET FLAT:??_C@_0DC@NGLNBGC@ProTracker?52?5clone?5v?$CFs?5?9?5?$CCmod?4u@
- 002b5 48 0f 44 d0 cmove rdx, rax
-
-; 150 : sprintf(titleTemp, "ProTracker 2 clone v%s - \"mod.untitled\" (unsaved)", PROG_VER_STR);
-; 151 : else
-; 152 : sprintf(titleTemp, "ProTracker 2 clone v%s - \"untitled.mod\" (unsaved)", PROG_VER_STR);
-; 153 : }
-
- 002b9 e8 00 00 00 00 call sprintf
-$LN48@outputAudi:
-
-; 154 : else
-; 155 : {
-; 156 : if (ptConfig.modDot)
-; 157 : sprintf(titleTemp, "ProTracker 2 clone v%s - \"mod.untitled\"", PROG_VER_STR);
-; 158 : else
-; 159 : sprintf(titleTemp, "ProTracker 2 clone v%s - \"untitled.mod\"", PROG_VER_STR);
-; 160 : }
-; 161 : }
-; 162 :
-; 163 : SDL_SetWindowTitle(window, titleTemp);
-
- 002be 48 8b 0d 00 00
- 00 00 mov rcx, QWORD PTR window
- 002c5 48 8d 54 24 20 lea rdx, QWORD PTR titleTemp$8[rsp]
- 002ca ff 15 00 00 00
- 00 call QWORD PTR __imp_SDL_SetWindowTitle
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 707 : }
-
- 002d0 e9 0c 04 00 00 jmp $LN9@outputAudi
-$LN11@outputAudi:
-
-; 708 : else
-; 709 : {
-; 710 : // render to stream
-; 711 :
-; 712 : outStream = target;
-; 713 : if (filterFlags & FILTER_A500)
-
- 002d5 0f b6 05 00 00
- 00 00 movzx eax, BYTE PTR filterFlags
- 002dc 24 01 and al, 1
-
-; 714 : {
-; 715 : for (j = 0; j < numSamples; j++)
-
- 002de 4d 85 c9 test r9, r9
- 002e1 0f 8e fa 03 00
- 00 jle $LN9@outputAudi
-
-; 708 : else
-; 709 : {
-; 710 : // render to stream
-; 711 :
-; 712 : outStream = target;
-; 713 : if (filterFlags & FILTER_A500)
-
- 002e7 f2 0f 10 3d 00
- 00 00 00 movsd xmm7, QWORD PTR __real@3ddb7cdfd9d7bdbb
- 002ef 45 33 c0 xor r8d, r8d
- 002f2 f2 44 0f 10 05
- 00 00 00 00 movsd xmm8, QWORD PTR __real@3df0000000000000
- 002fb f2 44 0f 10 0d
- 00 00 00 00 movsd xmm9, QWORD PTR __real@40c0000000000000
- 00304 84 c0 test al, al
- 00306 0f 84 17 02 00
- 00 je $LL10@outputAudi
- 0030c 0f 1f 40 00 npad 4
-$LL7@outputAudi:
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 00310 f2 0f 10 05 00
- 00 00 00 movsd xmm0, QWORD PTR filterLo
- 00318 f2 0f 59 05 18
- 00 00 00 mulsd xmm0, QWORD PTR filterLo+24
-
-; 653 : dOut[1] = dMixBufferR[i];
-
- 00320 48 8b 05 00 00
- 00 00 mov rax, QWORD PTR dMixBufferR
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 00327 f2 0f 10 2d 10
- 00 00 00 movsd xmm5, QWORD PTR filterLo+16
-
-; 653 : dOut[1] = dMixBufferR[i];
-
- 0032f f2 42 0f 10 34
- c0 movsd xmm6, QWORD PTR [rax+r8*8]
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 00335 48 8b 05 00 00
- 00 00 mov rax, QWORD PTR dMixBufferL
-
-; 191 : dOut[0] = filter->dBuffer[0];
-; 192 :
-; 193 : // right channel low-pass
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 0033c f2 0f 59 35 10
- 00 00 00 mulsd xmm6, QWORD PTR filterLo+16
- 00344 f2 42 0f 59 2c
- c0 mulsd xmm5, QWORD PTR [rax+r8*8]
-
-; 659 : if (filterFlags & FILTER_LED_ENABLED)
-
- 0034a 0f b6 05 00 00
- 00 00 movzx eax, BYTE PTR filterFlags
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 00351 f2 0f 58 e8 addsd xmm5, xmm0
-
-; 191 : dOut[0] = filter->dBuffer[0];
-; 192 :
-; 193 : // right channel low-pass
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 00355 f2 0f 10 05 08
- 00 00 00 movsd xmm0, QWORD PTR filterLo+8
- 0035d f2 0f 59 05 18
- 00 00 00 mulsd xmm0, QWORD PTR filterLo+24
- 00365 f2 0f 58 ef addsd xmm5, xmm7
- 00369 f2 0f 58 f0 addsd xmm6, xmm0
- 0036d f2 0f 11 2d 00
- 00 00 00 movsd QWORD PTR filterLo, xmm5
- 00375 f2 0f 58 f7 addsd xmm6, xmm7
- 00379 f2 0f 11 35 08
- 00 00 00 movsd QWORD PTR filterLo+8, xmm6
-
-; 659 : if (filterFlags & FILTER_LED_ENABLED)
-
- 00381 a8 02 test al, 2
- 00383 0f 84 b4 00 00
- 00 je $LN57@outputAudi
-
-; 167 : filter->dLed[0] += filterC.dLed * (dIn[0] - filter->dLed[0])
-
- 00389 f2 0f 10 1d 00
- 00 00 00 movsd xmm3, QWORD PTR filterLED
- 00391 f2 0f 10 25 00
- 00 00 00 movsd xmm4, QWORD PTR filterLEDC
- 00399 f2 0f 5c eb subsd xmm5, xmm3
- 0039d 0f 28 c3 movaps xmm0, xmm3
- 003a0 0f 28 cd movaps xmm1, xmm5
- 003a3 f2 0f 10 2d 08
- 00 00 00 movsd xmm5, QWORD PTR filterLED+8
- 003ab f2 0f 5c c5 subsd xmm0, xmm5
- 003af f2 0f 59 cc mulsd xmm1, xmm4
- 003b3 f2 0f 59 05 08
- 00 00 00 mulsd xmm0, QWORD PTR filterLEDC+8
- 003bb f2 0f 58 c8 addsd xmm1, xmm0
- 003bf f2 0f 58 cf addsd xmm1, xmm7
- 003c3 f2 0f 58 d9 addsd xmm3, xmm1
-
-; 170 : dOut[0] = filter->dLed[1];
-; 171 :
-; 172 : // right channel "LED" filter
-; 173 : filter->dLed[2] += filterC.dLed * (dIn[1] - filter->dLed[2])
-
- 003c7 f2 0f 10 0d 10
- 00 00 00 movsd xmm1, QWORD PTR filterLED+16
- 003cf f2 0f 5c f1 subsd xmm6, xmm1
- 003d3 0f 28 c1 movaps xmm0, xmm1
- 003d6 f2 0f 11 1d 00
- 00 00 00 movsd QWORD PTR filterLED, xmm3
- 003de f2 0f 5c dd subsd xmm3, xmm5
- 003e2 f2 0f 59 f4 mulsd xmm6, xmm4
- 003e6 f2 0f 59 dc mulsd xmm3, xmm4
- 003ea f2 0f 58 df addsd xmm3, xmm7
- 003ee f2 0f 58 eb addsd xmm5, xmm3
- 003f2 f2 0f 10 1d 18
- 00 00 00 movsd xmm3, QWORD PTR filterLED+24
- 003fa f2 0f 5c c3 subsd xmm0, xmm3
- 003fe f2 0f 11 2d 08
- 00 00 00 movsd QWORD PTR filterLED+8, xmm5
- 00406 f2 0f 59 05 08
- 00 00 00 mulsd xmm0, QWORD PTR filterLEDC+8
- 0040e f2 0f 58 c6 addsd xmm0, xmm6
- 00412 f2 0f 58 c7 addsd xmm0, xmm7
- 00416 f2 0f 58 c8 addsd xmm1, xmm0
- 0041a f2 0f 11 0d 10
- 00 00 00 movsd QWORD PTR filterLED+16, xmm1
- 00422 f2 0f 5c cb subsd xmm1, xmm3
-
-; 174 : + filterC.dLedFb * (filter->dLed[2] - filter->dLed[3]) + DENORMAL_OFFSET;
-; 175 : filter->dLed[3] += filterC.dLed * (filter->dLed[2] - filter->dLed[3]) + DENORMAL_OFFSET;
-
- 00426 f2 0f 59 cc mulsd xmm1, xmm4
- 0042a f2 0f 58 cf addsd xmm1, xmm7
- 0042e f2 0f 58 d9 addsd xmm3, xmm1
- 00432 f2 0f 11 1d 18
- 00 00 00 movsd QWORD PTR filterLED+24, xmm3
- 0043a 0f 28 f3 movaps xmm6, xmm3
-$LN57@outputAudi:
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 0043d 69 05 00 00 00
- 00 05 84 08 08 imul eax, DWORD PTR randSeed, 134775813 ; 08088405H
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 00447 0f 28 dd movaps xmm3, xmm5
- 0044a f2 0f 10 05 00
- 00 00 00 movsd xmm0, QWORD PTR filterHi
-
-; 191 : dOut[0] = filter->dBuffer[0];
-; 192 :
-; 193 : // right channel low-pass
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 00452 0f 28 e6 movaps xmm4, xmm6
- 00455 f2 0f 59 05 18
- 00 00 00 mulsd xmm0, QWORD PTR filterHi+24
- 0045d 0f 57 c9 xorps xmm1, xmm1
-
-; 176 : dOut[1] = filter->dLed[3];
-; 177 : }
-; 178 :
-; 179 : void lossyIntegrator(lossyIntegrator_t *filter, double *dIn, double *dOut)
-; 180 : {
-; 181 : /* Low-pass filter implementation taken from:
-; 182 : ** https://bel.fi/alankila/modguide/interpolate.txt
-; 183 : **
-; 184 : ** This implementation has a less smooth cutoff curve compared to the old one, so it's
-; 185 : ** maybe not the best. However, I stick to this one because it has a higher gain
-; 186 : ** at the end of the curve (closer to real tested Amiga 500). It also sounds much closer when
-; 187 : ** comparing whitenoise on an A500. */
-; 188 :
-; 189 : // left channel low-pass
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 00460 f2 0f 59 1d 10
- 00 00 00 mulsd xmm3, QWORD PTR filterHi+16
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 00468 ff c0 inc eax
-
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 0046a f2 0f 59 25 10
- 00 00 00 mulsd xmm4, QWORD PTR filterHi+16
- 00472 f2 0f 58 d8 addsd xmm3, xmm0
- 00476 f2 0f 10 05 08
- 00 00 00 movsd xmm0, QWORD PTR filterHi+8
- 0047e f2 0f 59 05 18
- 00 00 00 mulsd xmm0, QWORD PTR filterHi+24
- 00486 f2 0f 58 df addsd xmm3, xmm7
- 0048a f2 0f 58 e0 addsd xmm4, xmm0
- 0048e 0f 57 c0 xorps xmm0, xmm0
-
-; 671 : dOut[0] += dDither;
-
- 00491 f2 0f 2a c0 cvtsi2sd xmm0, eax
- 00495 69 c0 05 84 08
- 08 imul eax, eax, 134775813 ; 08088405H
-
-; 204 : dOut[0] = dIn[0] - dLow[0]; // left channel high-pass
-
- 0049b f2 0f 5c eb subsd xmm5, xmm3
-
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 0049f f2 0f 58 e7 addsd xmm4, xmm7
- 004a3 f2 0f 11 1d 00
- 00 00 00 movsd QWORD PTR filterHi, xmm3
-
-; 670 : dDither = random32() * (0.5 / (INT32_MAX+1.0)); // -0.5..0.5
-
- 004ab f2 41 0f 59 c0 mulsd xmm0, xmm8
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 004b0 ff c0 inc eax
-
-; 205 : dOut[1] = dIn[1] - dLow[1]; // right channel high-pass
-
- 004b2 f2 41 0f 59 e9 mulsd xmm5, xmm9
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 004b7 89 05 00 00 00
- 00 mov DWORD PTR randSeed, eax
-
-; 205 : dOut[1] = dIn[1] - dLow[1]; // right channel high-pass
-
- 004bd f2 0f 5c f4 subsd xmm6, xmm4
-
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 004c1 f2 0f 11 25 08
- 00 00 00 movsd QWORD PTR filterHi+8, xmm4
-
-; 671 : dOut[0] += dDither;
-
- 004c9 f2 0f 2a c8 cvtsi2sd xmm1, eax
- 004cd f2 0f 5c c5 subsd xmm0, xmm5
- 004d1 f2 41 0f 59 f1 mulsd xmm6, xmm9
- 004d6 f2 41 0f 59 c8 mulsd xmm1, xmm8
-
-; 672 : dDither = random32() * (0.5 / (INT32_MAX+1.0));
-; 673 : dOut[1] += dDither;
-; 674 :
-; 675 : smp32 = (int32_t)dOut[0];
-
- 004db f2 0f 2c d0 cvttsd2si edx, xmm0
- 004df f2 0f 5c ce subsd xmm1, xmm6
-
-; 676 : CLAMP16(smp32);
-
- 004e3 0f bf c2 movsx eax, dx
- 004e6 3b c2 cmp eax, edx
- 004e8 74 09 je SHORT $LN52@outputAudi
- 004ea c1 fa 1f sar edx, 31
- 004ed 81 f2 ff 7f 00
- 00 xor edx, 32767 ; 00007fffH
-$LN52@outputAudi:
-
-; 677 : out[0] = (int16_t)smp32;
-
- 004f3 f2 0f 2c c9 cvttsd2si ecx, xmm1
-
-; 678 :
-; 679 : smp32 = (int32_t)dOut[1];
-; 680 : CLAMP16(smp32);
-
- 004f7 0f bf c1 movsx eax, cx
- 004fa 3b c1 cmp eax, ecx
- 004fc 74 09 je SHORT $LN53@outputAudi
- 004fe c1 f9 1f sar ecx, 31
- 00501 81 f1 ff 7f 00
- 00 xor ecx, 32767 ; 00007fffH
-$LN53@outputAudi:
-
-; 716 : {
-; 717 : processMixedSamplesA500(j, out);
-; 718 : *outStream++ = out[0];
-
- 00507 66 89 17 mov WORD PTR [rdi], dx
- 0050a 49 ff c0 inc r8
-
-; 719 : *outStream++ = out[1];
-
- 0050d 66 89 4f 02 mov WORD PTR [rdi+2], cx
- 00511 48 83 c7 04 add rdi, 4
- 00515 4d 3b c1 cmp r8, r9
- 00518 0f 8c f2 fd ff
- ff jl $LL7@outputAudi
-
-; 720 : }
-; 721 : }
-
- 0051e e9 be 01 00 00 jmp $LN9@outputAudi
-$LL10@outputAudi:
-
-; 616 : dOut[0] = dMixBufferL[i];
-
- 00523 48 8b 05 00 00
- 00 00 mov rax, QWORD PTR dMixBufferL
- 0052a f2 42 0f 10 2c
- c0 movsd xmm5, QWORD PTR [rax+r8*8]
-
-; 617 : dOut[1] = dMixBufferR[i];
-
- 00530 48 8b 05 00 00
- 00 00 mov rax, QWORD PTR dMixBufferR
- 00537 f2 42 0f 10 34
- c0 movsd xmm6, QWORD PTR [rax+r8*8]
-
-; 618 :
-; 619 : // don't process any low-pass filter since the cut-off is around 28-31kHz on A1200
-; 620 :
-; 621 : // process "LED" filter
-; 622 : if (filterFlags & FILTER_LED_ENABLED)
-
- 0053d 0f b6 05 00 00
- 00 00 movzx eax, BYTE PTR filterFlags
- 00544 a8 02 test al, 2
- 00546 0f 84 b4 00 00
- 00 je $LN72@outputAudi
-
-; 167 : filter->dLed[0] += filterC.dLed * (dIn[0] - filter->dLed[0])
-
- 0054c f2 0f 10 15 00
- 00 00 00 movsd xmm2, QWORD PTR filterLED
- 00554 f2 0f 10 25 00
- 00 00 00 movsd xmm4, QWORD PTR filterLEDC
- 0055c f2 0f 5c ea subsd xmm5, xmm2
- 00560 0f 28 c2 movaps xmm0, xmm2
- 00563 0f 28 cd movaps xmm1, xmm5
- 00566 f2 0f 10 2d 08
- 00 00 00 movsd xmm5, QWORD PTR filterLED+8
- 0056e f2 0f 59 cc mulsd xmm1, xmm4
- 00572 f2 0f 5c c5 subsd xmm0, xmm5
- 00576 f2 0f 59 05 08
- 00 00 00 mulsd xmm0, QWORD PTR filterLEDC+8
- 0057e f2 0f 58 c8 addsd xmm1, xmm0
- 00582 f2 0f 58 cf addsd xmm1, xmm7
- 00586 f2 0f 58 d1 addsd xmm2, xmm1
- 0058a f2 0f 11 15 00
- 00 00 00 movsd QWORD PTR filterLED, xmm2
- 00592 f2 0f 5c d5 subsd xmm2, xmm5
-
-; 168 : + filterC.dLedFb * (filter->dLed[0] - filter->dLed[1]) + DENORMAL_OFFSET;
-; 169 : filter->dLed[1] += filterC.dLed * (filter->dLed[0] - filter->dLed[1]) + DENORMAL_OFFSET;
-
- 00596 f2 0f 59 d4 mulsd xmm2, xmm4
- 0059a f2 0f 58 d7 addsd xmm2, xmm7
- 0059e f2 0f 58 ea addsd xmm5, xmm2
-
-; 170 : dOut[0] = filter->dLed[1];
-; 171 :
-; 172 : // right channel "LED" filter
-; 173 : filter->dLed[2] += filterC.dLed * (dIn[1] - filter->dLed[2])
-
- 005a2 f2 0f 10 15 10
- 00 00 00 movsd xmm2, QWORD PTR filterLED+16
- 005aa f2 0f 5c f2 subsd xmm6, xmm2
- 005ae 0f 28 c2 movaps xmm0, xmm2
- 005b1 f2 0f 11 2d 08
- 00 00 00 movsd QWORD PTR filterLED+8, xmm5
- 005b9 0f 28 ce movaps xmm1, xmm6
- 005bc f2 0f 10 35 18
- 00 00 00 movsd xmm6, QWORD PTR filterLED+24
- 005c4 f2 0f 5c c6 subsd xmm0, xmm6
- 005c8 f2 0f 59 cc mulsd xmm1, xmm4
- 005cc f2 0f 59 05 08
- 00 00 00 mulsd xmm0, QWORD PTR filterLEDC+8
- 005d4 f2 0f 58 c8 addsd xmm1, xmm0
- 005d8 f2 0f 58 cf addsd xmm1, xmm7
- 005dc f2 0f 58 d1 addsd xmm2, xmm1
- 005e0 f2 0f 11 15 10
- 00 00 00 movsd QWORD PTR filterLED+16, xmm2
- 005e8 f2 0f 5c d6 subsd xmm2, xmm6
-
-; 174 : + filterC.dLedFb * (filter->dLed[2] - filter->dLed[3]) + DENORMAL_OFFSET;
-; 175 : filter->dLed[3] += filterC.dLed * (filter->dLed[2] - filter->dLed[3]) + DENORMAL_OFFSET;
-
- 005ec f2 0f 59 d4 mulsd xmm2, xmm4
- 005f0 f2 0f 58 d7 addsd xmm2, xmm7
- 005f4 f2 0f 58 f2 addsd xmm6, xmm2
- 005f8 f2 0f 11 35 18
- 00 00 00 movsd QWORD PTR filterLED+24, xmm6
-$LN72@outputAudi:
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 00600 69 05 00 00 00
- 00 05 84 08 08 imul eax, DWORD PTR randSeed, 134775813 ; 08088405H
-
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 0060a 0f 28 dd movaps xmm3, xmm5
- 0060d f2 0f 10 05 00
- 00 00 00 movsd xmm0, QWORD PTR filterHi
-
-; 191 : dOut[0] = filter->dBuffer[0];
-; 192 :
-; 193 : // right channel low-pass
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 00615 0f 28 e6 movaps xmm4, xmm6
- 00618 f2 0f 59 05 18
- 00 00 00 mulsd xmm0, QWORD PTR filterHi+24
- 00620 0f 57 c9 xorps xmm1, xmm1
-
-; 176 : dOut[1] = filter->dLed[3];
-; 177 : }
-; 178 :
-; 179 : void lossyIntegrator(lossyIntegrator_t *filter, double *dIn, double *dOut)
-; 180 : {
-; 181 : /* Low-pass filter implementation taken from:
-; 182 : ** https://bel.fi/alankila/modguide/interpolate.txt
-; 183 : **
-; 184 : ** This implementation has a less smooth cutoff curve compared to the old one, so it's
-; 185 : ** maybe not the best. However, I stick to this one because it has a higher gain
-; 186 : ** at the end of the curve (closer to real tested Amiga 500). It also sounds much closer when
-; 187 : ** comparing whitenoise on an A500. */
-; 188 :
-; 189 : // left channel low-pass
-; 190 : filter->dBuffer[0] = (filter->b0 * dIn[0]) + (filter->b1 * filter->dBuffer[0]) + DENORMAL_OFFSET;
-
- 00623 f2 0f 59 1d 10
- 00 00 00 mulsd xmm3, QWORD PTR filterHi+16
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 0062b ff c0 inc eax
-
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 0062d f2 0f 59 25 10
- 00 00 00 mulsd xmm4, QWORD PTR filterHi+16
- 00635 f2 0f 58 d8 addsd xmm3, xmm0
- 00639 f2 0f 10 05 08
- 00 00 00 movsd xmm0, QWORD PTR filterHi+8
- 00641 f2 0f 59 05 18
- 00 00 00 mulsd xmm0, QWORD PTR filterHi+24
- 00649 f2 0f 58 df addsd xmm3, xmm7
- 0064d f2 0f 58 e0 addsd xmm4, xmm0
- 00651 0f 57 c0 xorps xmm0, xmm0
-
-; 634 : dOut[0] += dDither;
-
- 00654 f2 0f 2a c0 cvtsi2sd xmm0, eax
- 00658 69 c0 05 84 08
- 08 imul eax, eax, 134775813 ; 08088405H
-
-; 204 : dOut[0] = dIn[0] - dLow[0]; // left channel high-pass
-
- 0065e f2 0f 5c eb subsd xmm5, xmm3
-
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 00662 f2 0f 58 e7 addsd xmm4, xmm7
- 00666 f2 0f 11 1d 00
- 00 00 00 movsd QWORD PTR filterHi, xmm3
-
-; 633 : dDither = random32() * (0.5 / (INT32_MAX+1.0)); // -0.5..0.5
-
- 0066e f2 41 0f 59 c0 mulsd xmm0, xmm8
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 00673 ff c0 inc eax
-
-; 205 : dOut[1] = dIn[1] - dLow[1]; // right channel high-pass
-
- 00675 f2 41 0f 59 e9 mulsd xmm5, xmm9
-
-; 607 : randSeed = randSeed * 134775813 + 1;
-
- 0067a 89 05 00 00 00
- 00 mov DWORD PTR randSeed, eax
-
-; 205 : dOut[1] = dIn[1] - dLow[1]; // right channel high-pass
-
- 00680 f2 0f 5c f4 subsd xmm6, xmm4
-
-; 194 : filter->dBuffer[1] = (filter->b0 * dIn[1]) + (filter->b1 * filter->dBuffer[1]) + DENORMAL_OFFSET;
-
- 00684 f2 0f 11 25 08
- 00 00 00 movsd QWORD PTR filterHi+8, xmm4
-
-; 634 : dOut[0] += dDither;
-
- 0068c f2 0f 2a c8 cvtsi2sd xmm1, eax
- 00690 f2 0f 5c c5 subsd xmm0, xmm5
- 00694 f2 41 0f 59 f1 mulsd xmm6, xmm9
- 00699 f2 41 0f 59 c8 mulsd xmm1, xmm8
-
-; 635 : dDither = random32() * (0.5 / (INT32_MAX+1.0));
-; 636 : dOut[1] += dDither;
-; 637 :
-; 638 : smp32 = (int32_t)dOut[0];
-
- 0069e f2 0f 2c d0 cvttsd2si edx, xmm0
- 006a2 f2 0f 5c ce subsd xmm1, xmm6
-
-; 639 : CLAMP16(smp32);
-
- 006a6 0f bf c2 movsx eax, dx
- 006a9 3b c2 cmp eax, edx
- 006ab 74 09 je SHORT $LN69@outputAudi
- 006ad c1 fa 1f sar edx, 31
- 006b0 81 f2 ff 7f 00
- 00 xor edx, 32767 ; 00007fffH
-$LN69@outputAudi:
-
-; 640 : out[0] = (int16_t)smp32;
-
- 006b6 f2 0f 2c c9 cvttsd2si ecx, xmm1
-
-; 641 :
-; 642 : smp32 = (int32_t)dOut[1];
-; 643 : CLAMP16(smp32);
-
- 006ba 0f bf c1 movsx eax, cx
- 006bd 3b c1 cmp eax, ecx
- 006bf 74 09 je SHORT $LN70@outputAudi
- 006c1 c1 f9 1f sar ecx, 31
- 006c4 81 f1 ff 7f 00
- 00 xor ecx, 32767 ; 00007fffH
-$LN70@outputAudi:
-
-; 722 : else
-; 723 : {
-; 724 : for (j = 0; j < numSamples; j++)
-; 725 : {
-; 726 : processMixedSamplesA1200(j, out);
-; 727 : *outStream++ = out[0];
-
- 006ca 66 89 17 mov WORD PTR [rdi], dx
- 006cd 49 ff c0 inc r8
-
-; 728 : *outStream++ = out[1];
-
- 006d0 66 89 4f 02 mov WORD PTR [rdi+2], cx
- 006d4 48 83 c7 04 add rdi, 4
- 006d8 4d 3b c1 cmp r8, r9
- 006db 0f 8c 42 fe ff
- ff jl $LL10@outputAudi
-$LN9@outputAudi:
-
-; 729 : }
-; 730 : }
-; 731 : }
-; 732 : }
-
- 006e1 4c 8d 9c 24 e0
- 00 00 00 lea r11, QWORD PTR [rsp+224]
- 006e9 41 0f 28 73 f0 movaps xmm6, XMMWORD PTR [r11-16]
- 006ee 41 0f 28 7b e0 movaps xmm7, XMMWORD PTR [r11-32]
- 006f3 45 0f 28 43 d0 movaps xmm8, XMMWORD PTR [r11-48]
- 006f8 45 0f 28 4b c0 movaps xmm9, XMMWORD PTR [r11-64]
- 006fd 49 8b e3 mov rsp, r11
- 00700 5f pop rdi
- 00701 c3 ret 0
-outputAudio ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT audioCallback
-_TEXT SEGMENT
-userdata$ = 48
-stream$ = 56
-len$ = 64
-audioCallback PROC ; COMDAT
-
-; 735 : {
-
- 00000 48 89 5c 24 10 mov QWORD PTR [rsp+16], rbx
- 00005 56 push rsi
- 00006 48 83 ec 20 sub rsp, 32 ; 00000020H
-
-; 736 : int16_t *out;
-; 737 : int32_t sampleBlock, samplesTodo;
-; 738 :
-; 739 : (void)userdata;
-; 740 :
-; 741 : if (forceMixerOff) // during MOD2WAV
-
- 0000a 80 3d 00 00 00
- 00 00 cmp BYTE PTR forceMixerOff, 0
- 00011 48 8b f2 mov rsi, rdx
- 00014 49 63 d8 movsxd rbx, r8d
- 00017 74 17 je SHORT $LN4@audioCallb
-
-; 742 : {
-; 743 : memset(stream, 0, len);
-
- 00019 4c 8b c3 mov r8, rbx
- 0001c 33 d2 xor edx, edx
- 0001e 48 8b ce mov rcx, rsi
-
-; 767 : }
-; 768 : }
-; 769 : }
-
- 00021 48 8b 5c 24 38 mov rbx, QWORD PTR [rsp+56]
- 00026 48 83 c4 20 add rsp, 32 ; 00000020H
- 0002a 5e pop rsi
-
-; 742 : {
-; 743 : memset(stream, 0, len);
-
- 0002b e9 00 00 00 00 jmp memset
-$LN4@audioCallb:
-
-; 744 : return;
-; 745 : }
-; 746 :
-; 747 : out = (int16_t *)stream;
-; 748 :
-; 749 : sampleBlock = len >> 2;
-
- 00030 c1 fb 02 sar ebx, 2
-
-; 750 : while (sampleBlock)
-
- 00033 85 db test ebx, ebx
- 00035 74 58 je SHORT $LN3@audioCallb
- 00037 8b 05 00 00 00
- 00 mov eax, DWORD PTR sampleCounter
- 0003d 48 89 7c 24 30 mov QWORD PTR [rsp+48], rdi
-$LL2@audioCallb:
-
-; 751 : {
-; 752 : samplesTodo = (sampleBlock < sampleCounter) ? sampleBlock : sampleCounter;
-
- 00042 3b d8 cmp ebx, eax
- 00044 0f 4c c3 cmovl eax, ebx
- 00047 8b f8 mov edi, eax
-
-; 753 : if (samplesTodo > 0)
-
- 00049 85 c0 test eax, eax
- 0004b 7e 1d jle SHORT $LN5@audioCallb
-
-; 754 : {
-; 755 : outputAudio(out, samplesTodo);
-
- 0004d 8b d0 mov edx, eax
- 0004f 48 8b ce mov rcx, rsi
- 00052 e8 00 00 00 00 call outputAudio
-
-; 756 : out += (uint32_t)samplesTodo * 2;
-
- 00057 8d 04 3f lea eax, DWORD PTR [rdi+rdi]
-
-; 757 :
-; 758 : sampleBlock -= samplesTodo;
-
- 0005a 2b df sub ebx, edi
- 0005c 48 8d 34 46 lea rsi, QWORD PTR [rsi+rax*2]
-
-; 759 : sampleCounter -= samplesTodo;
-
- 00060 8b 05 00 00 00
- 00 mov eax, DWORD PTR sampleCounter
- 00066 2b c7 sub eax, edi
-
-; 760 : }
-
- 00068 eb 16 jmp SHORT $LN12@audioCallb
-$LN5@audioCallb:
-
-; 761 : else
-; 762 : {
-; 763 : if (editor.songPlaying)
-
- 0006a 0f b6 05 3c 00
- 00 00 movzx eax, BYTE PTR editor+60
- 00071 84 c0 test al, al
- 00073 74 05 je SHORT $LN7@audioCallb
-
-; 764 : intMusic();
-
- 00075 e8 00 00 00 00 call intMusic
-$LN7@audioCallb:
-
-; 765 :
-; 766 : sampleCounter = samplesPerTick;
-
- 0007a 8b 05 00 00 00
- 00 mov eax, DWORD PTR samplesPerTick
-$LN12@audioCallb:
-
-; 750 : while (sampleBlock)
-
- 00080 89 05 00 00 00
- 00 mov DWORD PTR sampleCounter, eax
- 00086 85 db test ebx, ebx
- 00088 75 b8 jne SHORT $LL2@audioCallb
- 0008a 48 8b 7c 24 30 mov rdi, QWORD PTR [rsp+48]
-$LN3@audioCallb:
-
-; 767 : }
-; 768 : }
-; 769 : }
-
- 0008f 48 8b 5c 24 38 mov rbx, QWORD PTR [rsp+56]
- 00094 48 83 c4 20 add rsp, 32 ; 00000020H
- 00098 5e pop rsi
- 00099 c3 ret 0
-audioCallback ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT calculateFilterCoeffs
-_TEXT SEGMENT
-calculateFilterCoeffs PROC ; COMDAT
-
-; 145 : double dOmega = ((2.0 * M_PI) * dHz) / dSr;
-
- 00000 f2 0f 10 15 00
- 00 00 00 movsd xmm2, QWORD PTR __real@3ff0000000000000
- 00008 f2 0f 10 25 48
- 05 00 00 movsd xmm4, QWORD PTR audio+1352
- 00010 0f 28 ea movaps xmm5, xmm2
-
-; 146 : filter->b0 = 1.0 / (1.0 + (1.0 / dOmega));
-
- 00013 f2 0f 10 05 00
- 00 00 00 movsd xmm0, QWORD PTR __real@3f00af7429c4e0ea
- 0001b 0f 28 ca movaps xmm1, xmm2
-
-; 132 : dFb *= 0.62;
-
- 0001e f2 0f 10 1d 00
- 00 00 00 movsd xmm3, QWORD PTR ?dFb@?1??calcCoeffLED@@9@9
- 00026 f2 0f 59 1d 00
- 00 00 00 mulsd xmm3, QWORD PTR __real@3fe3d70a3d70a3d7
-
-; 145 : double dOmega = ((2.0 * M_PI) * dHz) / dSr;
-
- 0002e f2 0f 5e ec divsd xmm5, xmm4
-
-; 132 : dFb *= 0.62;
-
- 00032 f2 0f 11 1d 00
- 00 00 00 movsd QWORD PTR ?dFb@?1??calcCoeffLED@@9@9, xmm3
-
-; 146 : filter->b0 = 1.0 / (1.0 + (1.0 / dOmega));
-
- 0003a f2 0f 5e c5 divsd xmm0, xmm5
- 0003e f2 0f 58 c2 addsd xmm0, xmm2
- 00042 f2 0f 5e c8 divsd xmm1, xmm0
- 00046 0f 28 c2 movaps xmm0, xmm2
- 00049 f2 0f 5c c1 subsd xmm0, xmm1
- 0004d f2 0f 11 0d 10
- 00 00 00 movsd QWORD PTR filterLo+16, xmm1
-
-; 147 : filter->b1 = 1.0 - filter->b0;
-
- 00055 f2 0f 11 05 18
- 00 00 00 movsd QWORD PTR filterLo+24, xmm0
-
-; 135 : if (dHz < dSr/2.0)
-
- 0005d 0f 28 c4 movaps xmm0, xmm4
- 00060 f2 0f 59 05 00
- 00 00 00 mulsd xmm0, QWORD PTR __real@3fe0000000000000
- 00068 66 0f 2f 05 00
- 00 00 00 comisd xmm0, QWORD PTR __real@40a5cd10d8cf05d9
- 00070 76 16 jbe SHORT $LN6@calculateF
-
-; 136 : filter->dLed = ((2.0 * M_PI) * dHz) / dSr;
-
- 00072 f2 0f 10 0d 00
- 00 00 00 movsd xmm1, QWORD PTR __real@40d11f5bdca6355d
- 0007a f2 0f 5e cc divsd xmm1, xmm4
- 0007e f2 0f 11 0d 00
- 00 00 00 movsd QWORD PTR filterLEDC, xmm1
- 00086 eb 0b jmp SHORT $LN7@calculateF
-$LN6@calculateF:
-
-; 137 : else
-; 138 : filter->dLed = 1.0;
-
- 00088 f2 0f 11 15 00
- 00 00 00 movsd QWORD PTR filterLEDC, xmm2
- 00090 0f 28 ca movaps xmm1, xmm2
-$LN7@calculateF:
-
-; 139 :
-; 140 : filter->dLedFb = dFb + (dFb / (1.0 - filter->dLed)); // Q ~= 1/sqrt(2) (Butterworth)
-
- 00093 0f 28 c2 movaps xmm0, xmm2
- 00096 f2 0f 5c c1 subsd xmm0, xmm1
- 0009a 0f 28 cb movaps xmm1, xmm3
- 0009d f2 0f 5e c8 divsd xmm1, xmm0
-
-; 146 : filter->b0 = 1.0 / (1.0 + (1.0 / dOmega));
-
- 000a1 f2 0f 10 05 00
- 00 00 00 movsd xmm0, QWORD PTR __real@3f984edf1c1e350c
-
-; 140 : filter->dLedFb = dFb + (dFb / (1.0 - filter->dLed)); // Q ~= 1/sqrt(2) (Butterworth)
-
- 000a9 f2 0f 58 cb addsd xmm1, xmm3
-
-; 146 : filter->b0 = 1.0 / (1.0 + (1.0 / dOmega));
-
- 000ad f2 0f 5e c5 divsd xmm0, xmm5
-
-; 140 : filter->dLedFb = dFb + (dFb / (1.0 - filter->dLed)); // Q ~= 1/sqrt(2) (Butterworth)
-
- 000b1 f2 0f 11 0d 08
- 00 00 00 movsd QWORD PTR filterLEDC+8, xmm1
-
-; 146 : filter->b0 = 1.0 / (1.0 + (1.0 / dOmega));
-
- 000b9 0f 28 ca movaps xmm1, xmm2
- 000bc f2 0f 58 c2 addsd xmm0, xmm2
- 000c0 f2 0f 5e c8 divsd xmm1, xmm0
- 000c4 f2 0f 5c d1 subsd xmm2, xmm1
- 000c8 f2 0f 11 0d 10
- 00 00 00 movsd QWORD PTR filterHi+16, xmm1
-
-; 147 : filter->b1 = 1.0 - filter->b0;
-
- 000d0 f2 0f 11 15 18
- 00 00 00 movsd QWORD PTR filterHi+24, xmm2
-
-; 773 : double dCutOffHz;
-; 774 :
-; 775 : /* Amiga 500 filter emulation, by aciddose
-; 776 : **
-; 777 : ** First comes a static low-pass 6dB formed by the supply current
-; 778 : ** from the Paula's mixture of channels A+B / C+D into the opamp with
-; 779 : ** 0.1uF capacitor and 360 ohm resistor feedback in inverting mode biased by
-; 780 : ** dac vRef (used to center the output).
-; 781 : **
-; 782 : ** R = 360 ohm
-; 783 : ** C = 0.1uF
-; 784 : ** Low Hz = 4420.97~ = 1 / (2pi * 360 * 0.0000001)
-; 785 : **
-; 786 : ** Under spice simulation the circuit yields -3dB = 4400Hz.
-; 787 : ** In the Amiga 1200, the low-pass cutoff is 26kHz+, so the
-; 788 : ** static low-pass filter is disabled in the mixer in A1200 mode.
-; 789 : **
-; 790 : ** Next comes a bog-standard Sallen-Key filter ("LED") with:
-; 791 : ** R1 = 10K ohm
-; 792 : ** R2 = 10K ohm
-; 793 : ** C1 = 6800pF
-; 794 : ** C2 = 3900pF
-; 795 : ** Q ~= 1/sqrt(2)
-; 796 : **
-; 797 : ** This filter is optionally bypassed by an MPF-102 JFET chip when
-; 798 : ** the LED filter is turned off.
-; 799 : **
-; 800 : ** Under spice simulation the circuit yields -3dB = 2800Hz.
-; 801 : ** 90 degrees phase = 3000Hz (so, should oscillate at 3kHz!)
-; 802 : **
-; 803 : ** The buffered output of the Sallen-Key passes into an RC high-pass with:
-; 804 : ** R = 1.39K ohm (1K ohm + 390 ohm)
-; 805 : ** C = 22uF (also C = 330nF, for improved high-frequency)
-; 806 : **
-; 807 : ** High Hz = 5.2~ = 1 / (2pi * 1390 * 0.000022)
-; 808 : ** Under spice simulation the circuit yields -3dB = 5.2Hz.
-; 809 : */
-; 810 :
-; 811 : // Amiga 500 rev6 RC low-pass filter:
-; 812 : const double dLp_R = 360.0; // R321 - 360 ohm resistor
-; 813 : const double dLp_C = 1e-7; // C321 - 0.1uF capacitor
-; 814 : dCutOffHz = 1.0 / ((2.0 * M_PI) * dLp_R * dLp_C); // ~4420.97Hz
-; 815 : #ifndef NO_FILTER_FINETUNING
-; 816 : dCutOffHz += 580.0; // 8bitbubsy: finetuning to better match A500 low-pass testing
-; 817 : #endif
-; 818 : calcCoeffLossyIntegrator(audio.dAudioFreq, dCutOffHz, &filterLo);
-; 819 :
-; 820 : // Amiga Sallen-Key "LED" filter:
-; 821 : const double dLed_R1 = 10000.0; // R322 - 10K ohm resistor
-; 822 : const double dLed_R2 = 10000.0; // R323 - 10K ohm resistor
-; 823 : const double dLed_C1 = 6.8e-9; // C322 - 6800pF capacitor
-; 824 : const double dLed_C2 = 3.9e-9; // C323 - 3900pF capacitor
-; 825 : dCutOffHz = 1.0 / ((2.0 * M_PI) * sqrt(dLed_R1 * dLed_R2 * dLed_C1 * dLed_C2)); // ~3090.53Hz
-; 826 : #ifndef NO_FILTER_FINETUNING
-; 827 : dCutOffHz -= 300.0; // 8bitbubsy: finetuning to better match A500 & A1200 "LED" filter testing
-; 828 : #endif
-; 829 : calcCoeffLED(audio.dAudioFreq, dCutOffHz, &filterLEDC);
-; 830 :
-; 831 : // Amiga RC high-pass filter:
-; 832 : const double dHp_R = 1000.0 + 390.0; // R324 - 1K ohm resistor + R325 - 390 ohm resistor
-; 833 : const double dHp_C = 2.2e-5; // C334 - 22uF capacitor
-; 834 : dCutOffHz = 1.0 / ((2.0 * M_PI) * dHp_R * dHp_C); // ~5.20Hz
-; 835 : #ifndef NO_FILTER_FINETUNING
-; 836 : dCutOffHz += 1.5; // 8bitbubsy: finetuning to better match A500 & A1200 high-pass testing
-; 837 : #endif
-; 838 : calcCoeffLossyIntegrator(audio.dAudioFreq, dCutOffHz, &filterHi);
-; 839 : }
-
- 000d8 c3 ret 0
-calculateFilterCoeffs ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT mixerCalcVoicePans
-_TEXT SEGMENT
-stereoSeparation$ = 48
-mixerCalcVoicePans PROC ; COMDAT
-
-; 842 : {
-
-$LN4:
- 00000 48 83 ec 28 sub rsp, 40 ; 00000028H
-
-; 843 : uint8_t scaledPanPos = (stereoSeparation * 128) / 100;
-
- 00004 0f b6 d1 movzx edx, cl
- 00007 b8 1f 85 eb 51 mov eax, 1374389535 ; 51eb851fH
- 0000c c1 e2 07 shl edx, 7
-
-; 844 :
-; 845 : ch1Pan = 128 - scaledPanPos;
-; 846 : ch2Pan = 128 + scaledPanPos;
-; 847 : ch3Pan = 128 + scaledPanPos;
-; 848 : ch4Pan = 128 - scaledPanPos;
-; 849 :
-; 850 : mixerSetVoicePan(0, ch1Pan);
-
- 0000f 33 c9 xor ecx, ecx
- 00011 f7 ea imul edx
- 00013 c1 fa 05 sar edx, 5
- 00016 8b c2 mov eax, edx
- 00018 c1 e8 1f shr eax, 31
- 0001b 03 d0 add edx, eax
- 0001d b8 80 00 00 00 mov eax, 128 ; 00000080H
- 00022 44 0f b6 c2 movzx r8d, dl
- 00026 44 8b c8 mov r9d, eax
- 00029 66 45 2b c8 sub r9w, r8w
- 0002d 66 44 03 c0 add r8w, ax
- 00031 41 0f b7 d1 movzx edx, r9w
- 00035 66 44 89 05 00
- 00 00 00 mov WORD PTR ch2Pan, r8w
- 0003d 66 44 89 05 00
- 00 00 00 mov WORD PTR ch3Pan, r8w
- 00045 66 44 89 0d 00
- 00 00 00 mov WORD PTR ch1Pan, r9w
- 0004d 66 44 89 0d 00
- 00 00 00 mov WORD PTR ch4Pan, r9w
- 00055 e8 00 00 00 00 call mixerSetVoicePan
-
-; 851 : mixerSetVoicePan(1, ch2Pan);
-
- 0005a b1 01 mov cl, 1
- 0005c 41 0f b7 d0 movzx edx, r8w
- 00060 e8 00 00 00 00 call mixerSetVoicePan
-
-; 852 : mixerSetVoicePan(2, ch3Pan);
-
- 00065 b1 02 mov cl, 2
- 00067 e8 00 00 00 00 call mixerSetVoicePan
-
-; 853 : mixerSetVoicePan(3, ch4Pan);
-
- 0006c b1 03 mov cl, 3
- 0006e 41 0f b7 d1 movzx edx, r9w
-
-; 854 : }
-
- 00072 48 83 c4 28 add rsp, 40 ; 00000028H
-
-; 853 : mixerSetVoicePan(3, ch4Pan);
-
- 00076 e9 00 00 00 00 jmp mixerSetVoicePan
-mixerCalcVoicePans ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT setupAudio
-_TEXT SEGMENT
-want$ = 48
-have$ = 80
-setupAudio PROC ; COMDAT
-
-; 857 : {
-
-$LN52:
- 00000 40 53 push rbx
- 00002 48 81 ec 80 00
- 00 00 sub rsp, 128 ; 00000080H
-
-; 858 : SDL_AudioSpec want, have;
-; 859 :
-; 860 : want.freq = ptConfig.soundFrequency;
-
- 00009 8b 05 24 00 00
- 00 mov eax, DWORD PTR ptConfig+36
-
-; 861 : want.format = AUDIO_S16;
-; 862 : want.channels = 2;
-; 863 : want.callback = audioCallback;
-; 864 : want.userdata = NULL;
-; 865 : want.samples = ptConfig.soundBufferSize;
-; 866 :
-; 867 : dev = SDL_OpenAudioDevice(NULL, 0, &want, &have, 0);
-
- 0000f 4c 8d 4c 24 50 lea r9, QWORD PTR have$[rsp]
- 00014 89 44 24 30 mov DWORD PTR want$[rsp], eax
- 00018 4c 8d 44 24 30 lea r8, QWORD PTR want$[rsp]
- 0001d b8 10 80 00 00 mov eax, 32784 ; 00008010H
- 00022 c6 44 24 36 02 mov BYTE PTR want$[rsp+6], 2
- 00027 66 89 44 24 34 mov WORD PTR want$[rsp+4], ax
- 0002c 33 db xor ebx, ebx
- 0002e 48 8d 05 00 00
- 00 00 lea rax, OFFSET FLAT:audioCallback
- 00035 48 89 5c 24 48 mov QWORD PTR want$[rsp+24], rbx
- 0003a 48 89 44 24 40 mov QWORD PTR want$[rsp+16], rax
- 0003f 33 d2 xor edx, edx
- 00041 0f b7 05 28 00
- 00 00 movzx eax, WORD PTR ptConfig+40
- 00048 33 c9 xor ecx, ecx
- 0004a 66 89 44 24 38 mov WORD PTR want$[rsp+8], ax
- 0004f 89 5c 24 20 mov DWORD PTR [rsp+32], ebx
- 00053 ff 15 00 00 00
- 00 call QWORD PTR __imp_SDL_OpenAudioDevice
- 00059 89 05 00 00 00
- 00 mov DWORD PTR dev, eax
-
-; 868 : if (dev == 0)
-
- 0005f 85 c0 test eax, eax
- 00061 75 20 jne SHORT $LN2@setupAudio
-
-; 869 : {
-; 870 : showErrorMsgBox("Unable to open audio device: %s", SDL_GetError());
-
- 00063 ff 15 00 00 00
- 00 call QWORD PTR __imp_SDL_GetError
- 00069 48 8b d0 mov rdx, rax
- 0006c 48 8d 0d 00 00
- 00 00 lea rcx, OFFSET FLAT:??_C@_0CA@DJMKAAEN@Unable?5to?5open?5audio?5device?3?5?$CFs@
- 00073 e8 00 00 00 00 call showErrorMsgBox
-
-; 921 : }
-
- 00078 32 c0 xor al, al
- 0007a 48 81 c4 80 00
- 00 00 add rsp, 128 ; 00000080H
- 00081 5b pop rbx
- 00082 c3 ret 0
-$LN2@setupAudio:
-
-; 871 : return false;
-; 872 : }
-; 873 :
-; 874 : if (have.freq < 32000) // lower than this is not safe for one-step mixer w/ BLEP
-
- 00083 8b 4c 24 50 mov ecx, DWORD PTR have$[rsp]
- 00087 81 f9 00 7d 00
- 00 cmp ecx, 32000 ; 00007d00H
- 0008d 7d 17 jge SHORT $LN3@setupAudio
-
-; 875 : {
-; 876 : showErrorMsgBox("Unable to open audio: The audio output rate couldn't be used!");
-
- 0008f 48 8d 0d 00 00
- 00 00 lea rcx, OFFSET FLAT:??_C@_0DO@LPEDDBAN@Unable?5to?5open?5audio?3?5The?5audio@
-
-; 921 : }
-
- 00096 e8 00 00 00 00 call showErrorMsgBox
- 0009b 32 c0 xor al, al
- 0009d 48 81 c4 80 00
- 00 00 add rsp, 128 ; 00000080H
- 000a4 5b pop rbx
- 000a5 c3 ret 0
-$LN3@setupAudio:
-
-; 877 : return false;
-; 878 : }
-; 879 :
-; 880 : if (have.format != want.format)
-
- 000a6 0f b7 44 24 34 movzx eax, WORD PTR want$[rsp+4]
- 000ab 66 39 44 24 54 cmp WORD PTR have$[rsp+4], ax
- 000b0 74 17 je SHORT $LN4@setupAudio
-
-; 881 : {
-; 882 : showErrorMsgBox("Unable to open audio: The sample format (signed 16-bit) couldn't be used!");
-
- 000b2 48 8d 0d 00 00
- 00 00 lea rcx, OFFSET FLAT:??_C@_0EK@FLPNBHOI@Unable?5to?5open?5audio?3?5The?5sampl@
-
-; 921 : }
-
- 000b9 e8 00 00 00 00 call showErrorMsgBox
- 000be 32 c0 xor al, al
- 000c0 48 81 c4 80 00
- 00 00 add rsp, 128 ; 00000080H
- 000c7 5b pop rbx
- 000c8 c3 ret 0
-$LN4@setupAudio:
- 000c9 66 0f 6e c1 movd xmm0, ecx
-
-; 883 : return false;
-; 884 : }
-; 885 :
-; 886 : maxSamplesToMix = (int32_t)ceil((have.freq * 2.5) / 32.0);
-
- 000cd 48 b8 00 00 00
- 00 00 00 00 80 mov rax, -9223372036854775808 ; 8000000000000000H
- 000d7 f3 0f e6 c0 cvtdq2pd xmm0, xmm0
- 000db 0f 57 c9 xorps xmm1, xmm1
- 000de f2 0f 59 05 00
- 00 00 00 mulsd xmm0, QWORD PTR __real@3fb4000000000000
- 000e6 f2 48 0f 2c c8 cvttsd2si rcx, xmm0
- 000eb 48 3b c8 cmp rcx, rax
- 000ee 74 28 je SHORT $LN44@setupAudio
- 000f0 0f 57 c9 xorps xmm1, xmm1
- 000f3 f2 48 0f 2a c9 cvtsi2sd xmm1, rcx
- 000f8 66 0f 2e c8 ucomisd xmm1, xmm0
- 000fc 74 1a je SHORT $LN44@setupAudio
- 000fe 66 0f 14 c0 unpcklpd xmm0, xmm0
- 00102 66 48 0f 50 c0 movmskpd rax, xmm0
- 00107 0f 57 c0 xorps xmm0, xmm0
- 0010a 83 e0 01 and eax, 1
- 0010d 83 f0 01 xor eax, 1
- 00110 48 03 c8 add rcx, rax
- 00113 f2 48 0f 2a c1 cvtsi2sd xmm0, rcx
-$LN44@setupAudio:
- 00118 f2 0f 2c c0 cvttsd2si eax, xmm0
- 0011c 48 63 c8 movsxd rcx, eax
- 0011f 89 05 00 00 00
- 00 mov DWORD PTR maxSamplesToMix, eax
-
-; 887 :
-; 888 : dMixBufferLUnaligned = (double *)MALLOC_PAD(maxSamplesToMix * sizeof (double), 256);
-
- 00125 48 8d 0c cd 00
- 01 00 00 lea rcx, QWORD PTR [rcx*8+256]
- 0012d e8 00 00 00 00 call malloc
-
-; 889 : dMixBufferRUnaligned = (double *)MALLOC_PAD(maxSamplesToMix * sizeof (double), 256);
-
- 00132 48 63 0d 00 00
- 00 00 movsxd rcx, DWORD PTR maxSamplesToMix
- 00139 48 89 05 00 00
- 00 00 mov QWORD PTR dMixBufferLUnaligned, rax
- 00140 48 8d 0c cd 00
- 01 00 00 lea rcx, QWORD PTR [rcx*8+256]
- 00148 e8 00 00 00 00 call malloc
-
-; 890 :
-; 891 : editor.mod2WavBuffer = (int16_t *)malloc(sizeof (int16_t) * maxSamplesToMix);
-
- 0014d 48 63 0d 00 00
- 00 00 movsxd rcx, DWORD PTR maxSamplesToMix
- 00154 48 03 c9 add rcx, rcx
- 00157 48 89 05 00 00
- 00 00 mov QWORD PTR dMixBufferRUnaligned, rax
- 0015e e8 00 00 00 00 call malloc
-
-; 892 :
-; 893 : if (dMixBufferLUnaligned == NULL || dMixBufferRUnaligned == NULL || editor.mod2WavBuffer == NULL)
-
- 00163 48 8b 15 00 00
- 00 00 mov rdx, QWORD PTR dMixBufferLUnaligned
- 0016a 48 89 05 98 22
- 00 00 mov QWORD PTR editor+8856, rax
- 00171 48 85 d2 test rdx, rdx
- 00174 0f 84 9e 02 00
- 00 je $LN6@setupAudio
- 0017a 48 8b 0d 00 00
- 00 00 mov rcx, QWORD PTR dMixBufferRUnaligned
- 00181 48 85 c9 test rcx, rcx
- 00184 0f 84 8e 02 00
- 00 je $LN6@setupAudio
- 0018a 48 85 c0 test rax, rax
- 0018d 0f 84 85 02 00
- 00 je $LN6@setupAudio
-
-; 896 : return false;
-; 897 : }
-; 898 :
-; 899 : dMixBufferL = (double *)ALIGN_PTR(dMixBufferLUnaligned, 256);
-; 900 : dMixBufferR = (double *)ALIGN_PTR(dMixBufferRUnaligned, 256);
-; 901 :
-; 902 : audio.audioBufferSize = have.samples;
-; 903 : ptConfig.soundFrequency = have.freq;
-
- 00193 44 8b 5c 24 50 mov r11d, DWORD PTR have$[rsp]
- 00198 48 8d 82 ff 00
- 00 00 lea rax, QWORD PTR [rdx+255]
-
-; 904 : audio.audioFreq = ptConfig.soundFrequency;
-; 905 : audio.dAudioFreq = (double)ptConfig.soundFrequency;
-; 906 : audio.dPeriodToDeltaDiv = PAULA_PAL_CLK / audio.dAudioFreq;
-
- 0019f f2 0f 10 05 00
- 00 00 00 movsd xmm0, QWORD PTR __real@414b0f8780000000
- 001a7 48 25 00 ff ff
- ff and rax, -256 ; ffffffffffffff00H
-
-; 907 :
-; 908 : mixerCalcVoicePans(ptConfig.stereoSeparation);
-
- 001ad 44 0f b6 15 1e
- 00 00 00 movzx r10d, BYTE PTR ptConfig+30
- 001b5 0f 29 74 24 70 movaps XMMWORD PTR [rsp+112], xmm6
- 001ba 0f 57 f6 xorps xmm6, xmm6
- 001bd 48 89 05 00 00
- 00 00 mov QWORD PTR dMixBufferL, rax
- 001c4 48 8d 81 ff 00
- 00 00 lea rax, QWORD PTR [rcx+255]
- 001cb f2 49 0f 2a f3 cvtsi2sd xmm6, r11
- 001d0 48 25 00 ff ff
- ff and rax, -256 ; ffffffffffffff00H
- 001d6 44 89 1d 24 00
- 00 00 mov DWORD PTR ptConfig+36, r11d
- 001dd 48 89 05 00 00
- 00 00 mov QWORD PTR dMixBufferR, rax
- 001e4 41 0f b6 ca movzx ecx, r10b
- 001e8 0f b7 44 24 58 movzx eax, WORD PTR have$[rsp+8]
- 001ed 89 05 44 05 00
- 00 mov DWORD PTR audio+1348, eax
- 001f3 44 89 1d 40 05
- 00 00 mov DWORD PTR audio+1344, r11d
- 001fa f2 0f 5e c6 divsd xmm0, xmm6
- 001fe f2 0f 11 35 48
- 05 00 00 movsd QWORD PTR audio+1352, xmm6
- 00206 f2 0f 11 05 50
- 05 00 00 movsd QWORD PTR audio+1360, xmm0
- 0020e e8 00 00 00 00 call mixerCalcVoicePans
-
-; 145 : double dOmega = ((2.0 * M_PI) * dHz) / dSr;
-
- 00213 f2 0f 10 1d 00
- 00 00 00 movsd xmm3, QWORD PTR __real@3ff0000000000000
-
-; 146 : filter->b0 = 1.0 / (1.0 + (1.0 / dOmega));
-
- 0021b f2 0f 10 0d 00
- 00 00 00 movsd xmm1, QWORD PTR __real@3f00af7429c4e0ea
- 00223 0f 28 c3 movaps xmm0, xmm3
-
-; 132 : dFb *= 0.62;
-
- 00226 f2 0f 10 25 00
- 00 00 00 movsd xmm4, QWORD PTR ?dFb@?1??calcCoeffLED@@9@9
-
-; 146 : filter->b0 = 1.0 / (1.0 + (1.0 / dOmega));
-
- 0022e 0f 28 d3 movaps xmm2, xmm3
-
-; 910 :
-; 911 : filterFlags = ptConfig.a500LowPassFilter ? FILTER_A500 : 0;
-
- 00231 38 1d 12 00 00
- 00 cmp BYTE PTR ptConfig+18, bl
-
-; 132 : dFb *= 0.62;
-
- 00237 f2 0f 59 25 00
- 00 00 00 mulsd xmm4, QWORD PTR __real@3fe3d70a3d70a3d7
-
-; 909 : defStereoSep = ptConfig.stereoSeparation;
-
- 0023f 44 88 15 00 00
- 00 00 mov BYTE PTR defStereoSep, r10b
-
-; 145 : double dOmega = ((2.0 * M_PI) * dHz) / dSr;
-
- 00246 f2 0f 5e c6 divsd xmm0, xmm6
-
-; 910 :
-; 911 : filterFlags = ptConfig.a500LowPassFilter ? FILTER_A500 : 0;
-
- 0024a 0f 95 05 00 00
- 00 00 setne BYTE PTR filterFlags
-
-; 132 : dFb *= 0.62;
-
- 00251 f2 0f 11 25 00
- 00 00 00 movsd QWORD PTR ?dFb@?1??calcCoeffLED@@9@9, xmm4
-
-; 146 : filter->b0 = 1.0 / (1.0 + (1.0 / dOmega));
-
- 00259 f2 0f 5e c8 divsd xmm1, xmm0
- 0025d 0f 28 c3 movaps xmm0, xmm3
- 00260 f2 0f 58 cb addsd xmm1, xmm3
- 00264 f2 0f 5e d1 divsd xmm2, xmm1
- 00268 f2 0f 5c c2 subsd xmm0, xmm2
- 0026c f2 0f 11 15 10
- 00 00 00 movsd QWORD PTR filterLo+16, xmm2
-
-; 135 : if (dHz < dSr/2.0)
-
- 00274 f2 0f 10 15 00
- 00 00 00 movsd xmm2, QWORD PTR __real@3fe0000000000000
-
-; 147 : filter->b1 = 1.0 - filter->b0;
-
- 0027c f2 0f 11 05 18
- 00 00 00 movsd QWORD PTR filterLo+24, xmm0
-
-; 135 : if (dHz < dSr/2.0)
-
- 00284 0f 28 c6 movaps xmm0, xmm6
- 00287 f2 0f 59 c2 mulsd xmm0, xmm2
- 0028b 66 0f 2f 05 00
- 00 00 00 comisd xmm0, QWORD PTR __real@40a5cd10d8cf05d9
- 00293 76 16 jbe SHORT $LN13@setupAudio
-
-; 136 : filter->dLed = ((2.0 * M_PI) * dHz) / dSr;
-
- 00295 f2 0f 10 0d 00
- 00 00 00 movsd xmm1, QWORD PTR __real@40d11f5bdca6355d
- 0029d f2 0f 5e ce divsd xmm1, xmm6
- 002a1 f2 0f 11 0d 00
- 00 00 00 movsd QWORD PTR filterLEDC, xmm1
- 002a9 eb 0b jmp SHORT $LN14@setupAudio
-$LN13@setupAudio:
-
-; 137 : else
-; 138 : filter->dLed = 1.0;
-
- 002ab f2 0f 11 1d 00
- 00 00 00 movsd QWORD PTR filterLEDC, xmm3
- 002b3 0f 28 cb movaps xmm1, xmm3
-$LN14@setupAudio:
-
-; 139 :
-; 140 : filter->dLedFb = dFb + (dFb / (1.0 - filter->dLed)); // Q ~= 1/sqrt(2) (Butterworth)
-
- 002b6 f2 0f 10 2d 00
- 00 00 00 movsd xmm5, QWORD PTR __real@3eb7a68b994d1178
- 002be 4c 8d 15 00 00
- 00 00 lea r10, OFFSET FLAT:audio
- 002c5 0f 28 c3 movaps xmm0, xmm3
- 002c8 41 b8 20 00 00
- 00 mov r8d, 32 ; 00000020H
- 002ce f2 0f 5c c1 subsd xmm0, xmm1
- 002d2 0f 28 cc movaps xmm1, xmm4
- 002d5 f2 0f 5e c8 divsd xmm1, xmm0
-
-; 145 : double dOmega = ((2.0 * M_PI) * dHz) / dSr;
-
- 002d9 f2 0f 10 05 00
- 00 00 00 movsd xmm0, QWORD PTR __real@4045101d282be213
- 002e1 f2 0f 5e c6 divsd xmm0, xmm6
-
-; 140 : filter->dLedFb = dFb + (dFb / (1.0 - filter->dLed)); // Q ~= 1/sqrt(2) (Butterworth)
-
- 002e5 0f 28 74 24 70 movaps xmm6, XMMWORD PTR [rsp+112]
- 002ea f2 0f 58 cc addsd xmm1, xmm4
- 002ee f2 0f 10 25 00
- 00 00 00 movsd xmm4, QWORD PTR __real@3f9ffff7218ba683
- 002f6 f2 0f 11 0d 08
- 00 00 00 movsd QWORD PTR filterLEDC+8, xmm1
-
-; 146 : filter->b0 = 1.0 / (1.0 + (1.0 / dOmega));
-
- 002fe 0f 28 cb movaps xmm1, xmm3
- 00301 f2 0f 5e c8 divsd xmm1, xmm0
- 00305 0f 28 c3 movaps xmm0, xmm3
- 00308 f2 0f 58 cb addsd xmm1, xmm3
- 0030c f2 0f 5e c1 divsd xmm0, xmm1
- 00310 f2 0f 5c d8 subsd xmm3, xmm0
- 00314 f2 0f 11 05 10
- 00 00 00 movsd QWORD PTR filterHi+16, xmm0
-
-; 147 : filter->b1 = 1.0 - filter->b0;
-
- 0031c f2 0f 11 1d 18
- 00 00 00 movsd QWORD PTR filterHi+24, xmm3
-
-; 140 : filter->dLedFb = dFb + (dFb / (1.0 - filter->dLed)); // Q ~= 1/sqrt(2) (Butterworth)
-
- 00324 f2 0f 10 1d 00
- 00 00 00 movsd xmm3, QWORD PTR __real@3fa4d00788ffda07
- 0032c 0f 1f 40 00 npad 4
-$LL34@setupAudio:
-
-; 86 : if (bpm == 0)
-
- 00330 45 85 c0 test r8d, r8d
- 00333 75 05 jne SHORT $LN35@setupAudio
-
-; 87 : return 0;
-
- 00335 0f b7 cb movzx ecx, bx
- 00338 eb 2f jmp SHORT $LN36@setupAudio
-$LN35@setupAudio:
- 0033a 0f 57 c9 xorps xmm1, xmm1
-
-; 88 :
-; 89 : ciaVal = (uint32_t)(1773447 / bpm); // yes, PT truncates here
-
- 0033d b8 87 0f 1b 00 mov eax, 1773447 ; 001b0f87H
- 00342 33 d2 xor edx, edx
- 00344 0f 57 c0 xorps xmm0, xmm0
- 00347 41 f7 f0 div r8d
- 0034a 8b c8 mov ecx, eax
-
-; 91 :
-; 92 : return (uint16_t)((audioFreq * dFreqMul) + 0.5);
-
- 0034c 41 8b c3 mov eax, r11d
- 0034f f2 48 0f 2a c9 cvtsi2sd xmm1, rcx
- 00354 f2 48 0f 2a c0 cvtsi2sd xmm0, rax
- 00359 f2 0f 59 cd mulsd xmm1, xmm5
- 0035d f2 0f 59 c8 mulsd xmm1, xmm0
- 00361 f2 0f 58 ca addsd xmm1, xmm2
- 00365 f2 0f 2c c9 cvttsd2si ecx, xmm1
-$LN36@setupAudio:
-
-; 99 : audio.bpmTab[i-32] = bpm2SmpsPerTick(i, audio.audioFreq);
-
- 00369 41 8d 40 e0 lea eax, DWORD PTR [r8-32]
- 0036d 44 8b c8 mov r9d, eax
- 00370 66 41 89 0c 42 mov WORD PTR [r10+rax*2], cx
-
-; 86 : if (bpm == 0)
-
- 00375 45 85 c0 test r8d, r8d
- 00378 75 05 jne SHORT $LN37@setupAudio
-
-; 87 : return 0;
-
- 0037a 0f b7 c3 movzx eax, bx
- 0037d eb 20 jmp SHORT $LN38@setupAudio
-$LN37@setupAudio:
- 0037f 0f 57 c0 xorps xmm0, xmm0
-
-; 88 :
-; 89 : ciaVal = (uint32_t)(1773447 / bpm); // yes, PT truncates here
-
- 00382 33 d2 xor edx, edx
- 00384 b8 87 0f 1b 00 mov eax, 1773447 ; 001b0f87H
- 00389 41 f7 f0 div r8d
- 0038c 8b c8 mov ecx, eax
-
-; 90 : dFreqMul = ciaVal * (1.0 / CIA_PAL_CLK);
-
- 0038e f2 48 0f 2a c1 cvtsi2sd xmm0, rcx
-
-; 91 :
-; 92 : return (uint16_t)((audioFreq * dFreqMul) + 0.5);
-
- 00393 f2 0f 59 c3 mulsd xmm0, xmm3
- 00397 f2 0f 58 c2 addsd xmm0, xmm2
- 0039b f2 0f 2c c0 cvttsd2si eax, xmm0
-$LN38@setupAudio:
-
-; 100 : audio.bpmTab28kHz[i-32] = bpm2SmpsPerTick(i, 28836);
-
- 0039f 66 43 89 84 4a
- c0 01 00 00 mov WORD PTR [r10+r9*2+448], ax
-
-; 86 : if (bpm == 0)
-
- 003a8 45 85 c0 test r8d, r8d
- 003ab 75 05 jne SHORT $LN39@setupAudio
-
-; 87 : return 0;
-
- 003ad 0f b7 c3 movzx eax, bx
- 003b0 eb 20 jmp SHORT $LN40@setupAudio
-$LN39@setupAudio:
- 003b2 0f 57 c0 xorps xmm0, xmm0
-
-; 88 :
-; 89 : ciaVal = (uint32_t)(1773447 / bpm); // yes, PT truncates here
-
- 003b5 33 d2 xor edx, edx
- 003b7 b8 87 0f 1b 00 mov eax, 1773447 ; 001b0f87H
- 003bc 41 f7 f0 div r8d
- 003bf 8b c8 mov ecx, eax
-
-; 90 : dFreqMul = ciaVal * (1.0 / CIA_PAL_CLK);
-
- 003c1 f2 48 0f 2a c1 cvtsi2sd xmm0, rcx
-
-; 91 :
-; 92 : return (uint16_t)((audioFreq * dFreqMul) + 0.5);
-
- 003c6 f2 0f 59 c4 mulsd xmm0, xmm4
- 003ca f2 0f 58 c2 addsd xmm0, xmm2
- 003ce f2 0f 2c c0 cvttsd2si eax, xmm0
-$LN40@setupAudio:
-
-; 97 : for (uint32_t i = 32; i <= 255; i++)
-
- 003d2 41 ff c0 inc r8d
-
-; 101 : audio.bpmTab22kHz[i-32] = bpm2SmpsPerTick(i, 22168);
-
- 003d5 66 43 89 84 4a
- 80 03 00 00 mov WORD PTR [r10+r9*2+896], ax
- 003de 41 81 f8 ff 00
- 00 00 cmp r8d, 255 ; 000000ffH
- 003e5 77 0c ja SHORT $LN48@setupAudio
-
-; 93 : }
-; 94 :
-; 95 : static void generateBpmTables(void)
-; 96 : {
-; 97 : for (uint32_t i = 32; i <= 255; i++)
-
- 003e7 44 8b 1d 40 05
- 00 00 mov r11d, DWORD PTR audio+1344
- 003ee e9 3d ff ff ff jmp $LL34@setupAudio
-$LN48@setupAudio:
-
-; 912 :
-; 913 : calculateFilterCoeffs();
-; 914 : generateBpmTables();
-; 915 :
-; 916 : samplesPerTick = 0;
-; 917 : sampleCounter = 0;
-; 918 :
-; 919 : SDL_PauseAudioDevice(dev, false);
-
- 003f3 8b 0d 00 00 00
- 00 mov ecx, DWORD PTR dev
- 003f9 33 d2 xor edx, edx
- 003fb 89 1d 00 00 00
- 00 mov DWORD PTR samplesPerTick, ebx
- 00401 89 1d 00 00 00
- 00 mov DWORD PTR sampleCounter, ebx
- 00407 ff 15 00 00 00
- 00 call QWORD PTR __imp_SDL_PauseAudioDevice
-
-; 920 : return true;
-
- 0040d b0 01 mov al, 1
-
-; 921 : }
-
- 0040f 48 81 c4 80 00
- 00 00 add rsp, 128 ; 00000080H
- 00416 5b pop rbx
- 00417 c3 ret 0
-$LN6@setupAudio:
-
-; 894 : {
-; 895 : showErrorMsgBox("Out of memory!");
-
- 00418 48 8d 0d 00 00
- 00 00 lea rcx, OFFSET FLAT:??_C@_0P@MCKMEEL@Out?5of?5memory?$CB@
-
-; 921 : }
-
- 0041f e8 00 00 00 00 call showErrorMsgBox
- 00424 32 c0 xor al, al
- 00426 48 81 c4 80 00
- 00 00 add rsp, 128 ; 00000080H
- 0042d 5b pop rbx
- 0042e c3 ret 0
-setupAudio ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT audioClose
-_TEXT SEGMENT
-audioClose PROC ; COMDAT
-
-; 924 : {
-
-$LN8:
- 00000 40 53 push rbx
- 00002 48 83 ec 20 sub rsp, 32 ; 00000020H
-
-; 925 : if (dev > 0)
-
- 00006 8b 0d 00 00 00
- 00 mov ecx, DWORD PTR dev
- 0000c 33 db xor ebx, ebx
- 0000e 85 c9 test ecx, ecx
- 00010 74 1b je SHORT $LN2@audioClose
-
-; 926 : {
-; 927 : SDL_PauseAudioDevice(dev, true);
-
- 00012 8d 53 01 lea edx, QWORD PTR [rbx+1]
- 00015 ff 15 00 00 00
- 00 call QWORD PTR __imp_SDL_PauseAudioDevice
-
-; 928 : SDL_CloseAudioDevice(dev);
-
- 0001b 8b 0d 00 00 00
- 00 mov ecx, DWORD PTR dev
- 00021 ff 15 00 00 00
- 00 call QWORD PTR __imp_SDL_CloseAudioDevice
-
-; 929 : dev = 0;
-
- 00027 89 1d 00 00 00
- 00 mov DWORD PTR dev, ebx
-$LN2@audioClose:
-
-; 930 : }
-; 931 :
-; 932 : if (dMixBufferLUnaligned != NULL)
-
- 0002d 48 8b 0d 00 00
- 00 00 mov rcx, QWORD PTR dMixBufferLUnaligned
- 00034 48 85 c9 test rcx, rcx
- 00037 74 0c je SHORT $LN3@audioClose
-
-; 933 : {
-; 934 : free(dMixBufferLUnaligned);
-
- 00039 e8 00 00 00 00 call free
-
-; 935 : dMixBufferLUnaligned = NULL;
-
- 0003e 48 89 1d 00 00
- 00 00 mov QWORD PTR dMixBufferLUnaligned, rbx
-$LN3@audioClose:
-
-; 936 : }
-; 937 :
-; 938 : if (dMixBufferRUnaligned != NULL)
-
- 00045 48 8b 0d 00 00
- 00 00 mov rcx, QWORD PTR dMixBufferRUnaligned
- 0004c 48 85 c9 test rcx, rcx
- 0004f 74 0c je SHORT $LN4@audioClose
-
-; 939 : {
-; 940 : free(dMixBufferRUnaligned);
-
- 00051 e8 00 00 00 00 call free
-
-; 941 : dMixBufferRUnaligned = NULL;
-
- 00056 48 89 1d 00 00
- 00 00 mov QWORD PTR dMixBufferRUnaligned, rbx
-$LN4@audioClose:
-
-; 942 : }
-; 943 :
-; 944 : if (editor.mod2WavBuffer != NULL)
-
- 0005d 48 8b 0d 98 22
- 00 00 mov rcx, QWORD PTR editor+8856
- 00064 48 85 c9 test rcx, rcx
- 00067 74 0c je SHORT $LN5@audioClose
-
-; 945 : {
-; 946 : free(editor.mod2WavBuffer);
-
- 00069 e8 00 00 00 00 call free
-
-; 947 : editor.mod2WavBuffer = NULL;
-
- 0006e 48 89 1d 98 22
- 00 00 mov QWORD PTR editor+8856, rbx
-$LN5@audioClose:
-
-; 948 : }
-; 949 : }
-
- 00075 48 83 c4 20 add rsp, 32 ; 00000020H
- 00079 5b pop rbx
- 0007a c3 ret 0
-audioClose ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT mixerSetSamplesPerTick
-_TEXT SEGMENT
-val$ = 8
-mixerSetSamplesPerTick PROC ; COMDAT
-
-; 953 : samplesPerTick = val;
-
- 00000 89 0d 00 00 00
- 00 mov DWORD PTR samplesPerTick, ecx
-
-; 954 : }
-
- 00006 c3 ret 0
-mixerSetSamplesPerTick ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT mixerClearSampleCounter
-_TEXT SEGMENT
-mixerClearSampleCounter PROC ; COMDAT
-
-; 958 : sampleCounter = 0;
-
- 00000 c7 05 00 00 00
- 00 00 00 00 00 mov DWORD PTR sampleCounter, 0
-
-; 959 : }
-
- 0000a c3 ret 0
-mixerClearSampleCounter ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT toggleAmigaPanMode
-_TEXT SEGMENT
-toggleAmigaPanMode PROC ; COMDAT
-
-; 962 : {
-
-$LN36:
- 00000 48 83 ec 28 sub rsp, 40 ; 00000028H
-
-; 963 : amigaPanFlag ^= 1;
-
- 00004 0f b6 05 00 00
- 00 00 movzx eax, BYTE PTR amigaPanFlag
- 0000b 34 01 xor al, 1
- 0000d 0f 95 05 00 00
- 00 00 setne BYTE PTR amigaPanFlag
- 00014 84 c0 test al, al
-
-; 964 : if (!amigaPanFlag)
-
- 00016 75 4b jne SHORT $LN2@toggleAmig
-
-; 966 : mixerCalcVoicePans(defStereoSep);
-
- 00018 0f b6 0d 00 00
- 00 00 movzx ecx, BYTE PTR defStereoSep
- 0001f e8 00 00 00 00 call mixerCalcVoicePans
- 00024 33 c0 xor eax, eax
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-
-; 623 : editor.errorMsgActive = true;
-
- 00026 66 c7 05 08 01
- 00 00 01 00 mov WORD PTR editor+264, 1
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 966 : mixerCalcVoicePans(defStereoSep);
-
- 0002f 48 8d 15 00 00
- 00 00 lea rdx, OFFSET FLAT:__ImageBase
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-
-; 625 : editor.errorMsgCounter = 0;
-
- 00036 c6 05 82 22 00
- 00 00 mov BYTE PTR editor+8834, 0
- 0003d 0f 1f 00 npad 3
-$LL12@toggleAmig:
-
-; 615 : strcpy(editor.ui.statusMessage, msg);
-
- 00040 0f b6 8c 10 00
- 00 00 00 movzx ecx, BYTE PTR ??_C@_0BC@BCFDABOJ@AMIGA?5PANNING?5OFF@[rax+rdx]
- 00048 88 8c 10 90 37
- 00 00 mov BYTE PTR editor[rax+rdx+14224], cl
- 0004f 48 8d 40 01 lea rax, QWORD PTR [rax+1]
- 00053 84 c9 test cl, cl
- 00055 75 e9 jne SHORT $LL12@toggleAmig
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 974 : }
-
- 00057 c6 05 03 38 00
- 00 01 mov BYTE PTR editor+14339, 1
- 0005e 48 83 c4 28 add rsp, 40 ; 00000028H
- 00062 c3 ret 0
-$LN2@toggleAmig:
-
-; 971 : mixerCalcVoicePans(100);
-
- 00063 b1 64 mov cl, 100 ; 00000064H
- 00065 e8 00 00 00 00 call mixerCalcVoicePans
- 0006a 33 c0 xor eax, eax
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-
-; 623 : editor.errorMsgActive = true;
-
- 0006c 66 c7 05 08 01
- 00 00 01 00 mov WORD PTR editor+264, 1
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 971 : mixerCalcVoicePans(100);
-
- 00075 48 8d 15 00 00
- 00 00 lea rdx, OFFSET FLAT:__ImageBase
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-
-; 625 : editor.errorMsgCounter = 0;
-
- 0007c c6 05 82 22 00
- 00 00 mov BYTE PTR editor+8834, 0
- 00083 0f 1f 40 00 66
- 0f 1f 84 00 00
- 00 00 00 npad 13
-$LL20@toggleAmig:
-
-; 615 : strcpy(editor.ui.statusMessage, msg);
-
- 00090 0f b6 8c 10 00
- 00 00 00 movzx ecx, BYTE PTR ??_C@_0BB@LDIONHPE@AMIGA?5PANNING?5ON@[rax+rdx]
- 00098 88 8c 10 90 37
- 00 00 mov BYTE PTR editor[rax+rdx+14224], cl
- 0009f 48 8d 40 01 lea rax, QWORD PTR [rax+1]
- 000a3 84 c9 test cl, cl
- 000a5 75 e9 jne SHORT $LL20@toggleAmig
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 974 : }
-
- 000a7 c6 05 03 38 00
- 00 01 mov BYTE PTR editor+14339, 1
- 000ae 48 83 c4 28 add rsp, 40 ; 00000028H
- 000b2 c3 ret 0
-toggleAmigaPanMode ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT getAudioFrame
-_TEXT SEGMENT
-outStream$ = 48
-getAudioFrame PROC ; COMDAT
-
-; 979 : {
-
-$LN13:
- 00000 48 89 5c 24 10 mov QWORD PTR [rsp+16], rbx
- 00005 56 push rsi
- 00006 48 83 ec 20 sub rsp, 32 ; 00000020H
- 0000a 48 8b f1 mov rsi, rcx
-
-; 980 : int32_t smpCounter, samplesToMix;
-; 981 :
-; 982 : if (!intMusic())
-
- 0000d e8 00 00 00 00 call intMusic
- 00012 0f b6 15 00 00
- 00 00 movzx edx, BYTE PTR wavRenderingDone
- 00019 84 c0 test al, al
-
-; 983 : wavRenderingDone = true;
-; 984 :
-; 985 : smpCounter = samplesPerTick;
-
- 0001b 8b 1d 00 00 00
- 00 mov ebx, DWORD PTR samplesPerTick
- 00021 b9 01 00 00 00 mov ecx, 1
- 00026 0f 44 d1 cmove edx, ecx
- 00029 88 15 00 00 00
- 00 mov BYTE PTR wavRenderingDone, dl
-
-; 986 : while (smpCounter > 0)
-
- 0002f 85 db test ebx, ebx
- 00031 7e 4b jle SHORT $LN11@getAudioFr
- 00033 48 89 7c 24 30 mov QWORD PTR [rsp+48], rdi
- 00038 0f 1f 84 00 00
- 00 00 00 npad 8
-$LL2@getAudioFr:
-
-; 987 : {
-; 988 : samplesToMix = smpCounter;
-; 989 : if (samplesToMix > maxSamplesToMix)
-
- 00040 3b 1d 00 00 00
- 00 cmp ebx, DWORD PTR maxSamplesToMix
- 00046 8b fb mov edi, ebx
-
-; 990 : samplesToMix = maxSamplesToMix;
-; 991 :
-; 992 : outputAudio(outStream, samplesToMix);
-
- 00048 48 8b ce mov rcx, rsi
- 0004b 0f 4f 3d 00 00
- 00 00 cmovg edi, DWORD PTR maxSamplesToMix
- 00052 8b d7 mov edx, edi
- 00054 e8 00 00 00 00 call outputAudio
-
-; 993 : outStream += (uint32_t)samplesToMix * 2;
-; 994 :
-; 995 : smpCounter -= samplesToMix;
-
- 00059 2b df sub ebx, edi
- 0005b 8d 04 3f lea eax, DWORD PTR [rdi+rdi]
- 0005e 48 8d 34 46 lea rsi, QWORD PTR [rsi+rax*2]
- 00062 85 db test ebx, ebx
- 00064 7f da jg SHORT $LL2@getAudioFr
-
-; 996 : }
-; 997 :
-; 998 : return (uint32_t)samplesPerTick * 2; // * 2 for stereo
-
- 00066 8b 05 00 00 00
- 00 mov eax, DWORD PTR samplesPerTick
- 0006c 48 8b 7c 24 30 mov rdi, QWORD PTR [rsp+48]
- 00071 03 c0 add eax, eax
-
-; 999 : }
-
- 00073 48 8b 5c 24 38 mov rbx, QWORD PTR [rsp+56]
- 00078 48 83 c4 20 add rsp, 32 ; 00000020H
- 0007c 5e pop rsi
- 0007d c3 ret 0
-$LN11@getAudioFr:
-
-; 996 : }
-; 997 :
-; 998 : return (uint32_t)samplesPerTick * 2; // * 2 for stereo
-
- 0007e 8d 04 1b lea eax, DWORD PTR [rbx+rbx]
-
-; 999 : }
-
- 00081 48 8b 5c 24 38 mov rbx, QWORD PTR [rsp+56]
- 00086 48 83 c4 20 add rsp, 32 ; 00000020H
- 0008a 5e pop rsi
- 0008b c3 ret 0
-getAudioFrame ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT mod2WavThreadFunc
-_TEXT SEGMENT
-wavHeader$ = 32
-ptr$ = 128
-mod2WavThreadFunc PROC ; COMDAT
-
-; 1002 : {
-
- 00000 40 55 push rbp
- 00002 41 57 push r15
- 00004 48 83 ec 68 sub rsp, 104 ; 00000068H
- 00008 48 8b e9 mov rbp, rcx
-
-; 1003 : uint32_t size, totalSampleCounter, totalRiffChunkLen;
-; 1004 : FILE *fOut;
-; 1005 : wavHeader_t wavHeader;
-; 1006 :
-; 1007 : fOut = (FILE *)ptr;
-; 1008 : if (fOut == NULL)
-
- 0000b 48 85 c9 test rcx, rcx
- 0000e 75 0b jne SHORT $LN4@mod2WavThr
-
-; 1009 : return true;
-
- 00010 8d 41 01 lea eax, QWORD PTR [rcx+1]
-
-; 1061 : }
-
- 00013 48 83 c4 68 add rsp, 104 ; 00000068H
- 00017 41 5f pop r15
- 00019 5d pop rbp
- 0001a c3 ret 0
-$LN4@mod2WavThr:
-
-; 1010 :
-; 1011 : // skip wav header place, render data first
-; 1012 : fseek(fOut, sizeof (wavHeader_t), SEEK_SET);
-
- 0001b 45 33 c0 xor r8d, r8d
- 0001e 4c 89 64 24 60 mov QWORD PTR [rsp+96], r12
- 00023 4c 89 6c 24 58 mov QWORD PTR [rsp+88], r13
- 00028 4c 89 74 24 50 mov QWORD PTR [rsp+80], r14
- 0002d 41 8d 50 2c lea edx, QWORD PTR [r8+44]
- 00031 e8 00 00 00 00 call fseek
-
-; 1013 :
-; 1014 : wavRenderingDone = false;
-; 1015 :
-; 1016 : totalSampleCounter = 0;
-; 1017 : while (editor.isWAVRendering && !wavRenderingDone && !editor.abortMod2Wav)
-
- 00036 0f b6 05 3e 00
- 00 00 movzx eax, BYTE PTR editor+62
- 0003d 45 33 e4 xor r12d, r12d
- 00040 c6 05 00 00 00
- 00 00 mov BYTE PTR wavRenderingDone, 0
- 00047 45 8b f4 mov r14d, r12d
- 0004a 45 8d 7c 24 01 lea r15d, QWORD PTR [r12+1]
- 0004f 45 8d 6c 24 02 lea r13d, QWORD PTR [r12+2]
- 00054 84 c0 test al, al
- 00056 0f 84 dd 00 00
- 00 je $LN24@mod2WavThr
- 0005c 48 89 9c 24 80
- 00 00 00 mov QWORD PTR [rsp+128], rbx
- 00064 48 89 b4 24 88
- 00 00 00 mov QWORD PTR [rsp+136], rsi
- 0006c 48 89 bc 24 90
- 00 00 00 mov QWORD PTR [rsp+144], rdi
- 00074 0f 1f 40 00 0f
- 1f 84 00 00 00
- 00 00 npad 12
-$LL2@mod2WavThr:
- 00080 44 38 25 00 00
- 00 00 cmp BYTE PTR wavRenderingDone, r12b
- 00087 0f 85 94 00 00
- 00 jne $LN27@mod2WavThr
- 0008d 44 38 25 21 01
- 00 00 cmp BYTE PTR editor+289, r12b
- 00094 0f 85 87 00 00
- 00 jne $LN27@mod2WavThr
-
-; 1018 : {
-; 1019 : size = getAudioFrame(editor.mod2WavBuffer);
-
- 0009a 48 8b 35 98 22
- 00 00 mov rsi, QWORD PTR editor+8856
-
-; 982 : if (!intMusic())
-
- 000a1 e8 00 00 00 00 call intMusic
- 000a6 0f b6 0d 00 00
- 00 00 movzx ecx, BYTE PTR wavRenderingDone
- 000ad 84 c0 test al, al
-
-; 983 : wavRenderingDone = true;
-; 984 :
-; 985 : smpCounter = samplesPerTick;
-
- 000af 8b 1d 00 00 00
- 00 mov ebx, DWORD PTR samplesPerTick
- 000b5 41 0f 44 cf cmove ecx, r15d
- 000b9 88 0d 00 00 00
- 00 mov BYTE PTR wavRenderingDone, cl
-
-; 986 : while (smpCounter > 0)
-
- 000bf 85 db test ebx, ebx
- 000c1 7e 2c jle SHORT $LN12@mod2WavThr
-$LL11@mod2WavThr:
-
-; 987 : {
-; 988 : samplesToMix = smpCounter;
-; 989 : if (samplesToMix > maxSamplesToMix)
-
- 000c3 3b 1d 00 00 00
- 00 cmp ebx, DWORD PTR maxSamplesToMix
- 000c9 8b fb mov edi, ebx
-
-; 990 : samplesToMix = maxSamplesToMix;
-; 991 :
-; 992 : outputAudio(outStream, samplesToMix);
-
- 000cb 48 8b ce mov rcx, rsi
- 000ce 0f 4f 3d 00 00
- 00 00 cmovg edi, DWORD PTR maxSamplesToMix
- 000d5 8b d7 mov edx, edi
- 000d7 e8 00 00 00 00 call outputAudio
-
-; 993 : outStream += (uint32_t)samplesToMix * 2;
-; 994 :
-; 995 : smpCounter -= samplesToMix;
-
- 000dc 2b df sub ebx, edi
- 000de 8d 04 3f lea eax, DWORD PTR [rdi+rdi]
- 000e1 48 8d 34 46 lea rsi, QWORD PTR [rsi+rax*2]
- 000e5 85 db test ebx, ebx
- 000e7 7f da jg SHORT $LL11@mod2WavThr
- 000e9 8b 1d 00 00 00
- 00 mov ebx, DWORD PTR samplesPerTick
-$LN12@mod2WavThr:
-
-; 996 : }
-; 997 :
-; 998 : return (uint32_t)samplesPerTick * 2; // * 2 for stereo
-
- 000ef 03 db add ebx, ebx
-
-; 1020 : if (size > 0)
-
- 000f1 74 18 je SHORT $LN5@mod2WavThr
-
-; 1021 : {
-; 1022 : fwrite(editor.mod2WavBuffer, sizeof (int16_t), size, fOut);
-
- 000f3 48 8b 0d 98 22
- 00 00 mov rcx, QWORD PTR editor+8856
- 000fa 4c 8b cd mov r9, rbp
- 000fd 44 8b c3 mov r8d, ebx
- 00100 49 8b d5 mov rdx, r13
- 00103 e8 00 00 00 00 call fwrite
-
-; 1023 : totalSampleCounter += size;
-
- 00108 44 03 f3 add r14d, ebx
-$LN5@mod2WavThr:
-
-; 1024 : }
-; 1025 :
-; 1026 : editor.ui.updateMod2WavDialog = true;
-
- 0010b 0f b6 05 3e 00
- 00 00 movzx eax, BYTE PTR editor+62
- 00112 44 88 3d 06 38
- 00 00 mov BYTE PTR editor+14342, r15b
- 00119 84 c0 test al, al
- 0011b 0f 85 5f ff ff
- ff jne $LL2@mod2WavThr
-$LN27@mod2WavThr:
- 00121 48 8b b4 24 88
- 00 00 00 mov rsi, QWORD PTR [rsp+136]
- 00129 48 8b 9c 24 80
- 00 00 00 mov rbx, QWORD PTR [rsp+128]
- 00131 48 8b bc 24 90
- 00 00 00 mov rdi, QWORD PTR [rsp+144]
-$LN24@mod2WavThr:
-
-; 1027 : }
-; 1028 :
-; 1029 : if (totalSampleCounter & 1)
-
- 00139 45 84 f7 test r14b, r15b
- 0013c 74 0a je SHORT $LN6@mod2WavThr
-
-; 1030 : fputc(0, fOut); // pad align byte
-
- 0013e 48 8b d5 mov rdx, rbp
- 00141 33 c9 xor ecx, ecx
- 00143 e8 00 00 00 00 call fputc
-$LN6@mod2WavThr:
-
-; 1031 :
-; 1032 : if ((ftell(fOut) - 8) > 0)
-
- 00148 48 8b cd mov rcx, rbp
- 0014b e8 00 00 00 00 call ftell
- 00150 83 e8 08 sub eax, 8
- 00153 85 c0 test eax, eax
- 00155 7e 0c jle SHORT $LN7@mod2WavThr
-
-; 1033 : totalRiffChunkLen = ftell(fOut) - 8;
-
- 00157 48 8b cd mov rcx, rbp
- 0015a e8 00 00 00 00 call ftell
- 0015f 44 8d 60 f8 lea r12d, DWORD PTR [rax-8]
-$LN7@mod2WavThr:
-
-; 1034 : else
-; 1035 : totalRiffChunkLen = 0;
-; 1036 :
-; 1037 : editor.ui.mod2WavFinished = true;
-; 1038 : editor.ui.updateMod2WavDialog = true;
-; 1039 :
-; 1040 : // go back and fill the missing WAV header
-; 1041 : fseek(fOut, 0, SEEK_SET);
-
- 00163 45 33 c0 xor r8d, r8d
- 00166 66 c7 05 06 38
- 00 00 01 01 mov WORD PTR editor+14342, 257 ; 00000101H
- 0016f 33 d2 xor edx, edx
- 00171 48 8b cd mov rcx, rbp
- 00174 e8 00 00 00 00 call fseek
-
-; 1042 :
-; 1043 : wavHeader.chunkID = 0x46464952; // "RIFF"
-; 1044 : wavHeader.chunkSize = totalRiffChunkLen;
-; 1045 : wavHeader.format = 0x45564157; // "WAVE"
-; 1046 : wavHeader.subchunk1ID = 0x20746D66; // "fmt "
-; 1047 : wavHeader.subchunk1Size = 16;
-; 1048 : wavHeader.audioFormat = 1;
-; 1049 : wavHeader.numChannels = 2;
-; 1050 : wavHeader.sampleRate = audio.audioFreq;
-
- 00179 8b 05 40 05 00
- 00 mov eax, DWORD PTR audio+1344
- 0017f b9 10 00 00 00 mov ecx, 16
- 00184 89 44 24 38 mov DWORD PTR wavHeader$[rsp+24], eax
-
-; 1051 : wavHeader.bitsPerSample = 16;
-; 1052 : wavHeader.byteRate = wavHeader.sampleRate * wavHeader.numChannels * (wavHeader.bitsPerSample / 8);
-; 1053 : wavHeader.blockAlign = wavHeader.numChannels * (wavHeader.bitsPerSample / 8);
-; 1054 : wavHeader.subchunk2ID = 0x61746164; // "data"
-; 1055 : wavHeader.subchunk2Size = totalSampleCounter * (wavHeader.bitsPerSample / 8);
-; 1056 :
-; 1057 : fwrite(&wavHeader, sizeof (wavHeader_t), 1, fOut);
-
- 00188 4c 8b cd mov r9, rbp
- 0018b 89 4c 24 30 mov DWORD PTR wavHeader$[rsp+16], ecx
- 0018f 4d 8b c7 mov r8, r15
- 00192 c7 44 24 20 52
- 49 46 46 mov DWORD PTR wavHeader$[rsp], 1179011410 ; 46464952H
- 0019a 8d 04 85 00 00
- 00 00 lea eax, DWORD PTR [rax*4]
- 001a1 44 89 64 24 24 mov DWORD PTR wavHeader$[rsp+4], r12d
- 001a6 89 44 24 3c mov DWORD PTR wavHeader$[rsp+28], eax
- 001aa 8d 51 1c lea edx, QWORD PTR [rcx+28]
- 001ad 43 8d 04 36 lea eax, DWORD PTR [r14+r14]
- 001b1 c7 44 24 28 57
- 41 56 45 mov DWORD PTR wavHeader$[rsp+8], 1163280727 ; 45564157H
- 001b9 48 8d 4c 24 20 lea rcx, QWORD PTR wavHeader$[rsp]
- 001be 89 44 24 48 mov DWORD PTR wavHeader$[rsp+40], eax
- 001c2 c7 44 24 2c 66
- 6d 74 20 mov DWORD PTR wavHeader$[rsp+12], 544501094 ; 20746d66H
- 001ca c7 44 24 34 01
- 00 02 00 mov DWORD PTR wavHeader$[rsp+20], 131073 ; 00020001H
- 001d2 c7 44 24 40 04
- 00 10 00 mov DWORD PTR wavHeader$[rsp+32], 1048580 ; 00100004H
- 001da c7 44 24 44 64
- 61 74 61 mov DWORD PTR wavHeader$[rsp+36], 1635017060 ; 61746164H
- 001e2 e8 00 00 00 00 call fwrite
-
-; 1058 : fclose(fOut);
-
- 001e7 48 8b cd mov rcx, rbp
- 001ea e8 00 00 00 00 call fclose
-
-; 1059 :
-; 1060 : return true;
-
- 001ef 4c 8b 74 24 50 mov r14, QWORD PTR [rsp+80]
- 001f4 41 8b c7 mov eax, r15d
- 001f7 4c 8b 6c 24 58 mov r13, QWORD PTR [rsp+88]
- 001fc 4c 8b 64 24 60 mov r12, QWORD PTR [rsp+96]
-
-; 1061 : }
-
- 00201 48 83 c4 68 add rsp, 104 ; 00000068H
- 00205 41 5f pop r15
- 00207 5d pop rbp
- 00208 c3 ret 0
-mod2WavThreadFunc ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\sys\stat.h
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_mouse.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_mouse.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-; File C:\Programming\pt2-clone\src\pt2_mouse.c
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-; File C:\Programming\pt2-clone\src\pt2_mouse.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_modplayer.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_mouse.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_mouse.c
-; File C:\Programming\pt2-clone\src\pt2_modplayer.c
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-; File C:\Programming\pt2-clone\src\pt2_mouse.c
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-; File C:\Programming\pt2-clone\src\pt2_mouse.c
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT renderToWav
-_TEXT SEGMENT
-statBuffer$ = 48
-fileName$ = 112
-checkIfFileExist$ = 120
-renderToWav PROC ; COMDAT
-
-; 1064 : {
-
-$LN106:
- 00000 48 89 5c 24 10 mov QWORD PTR [rsp+16], rbx
- 00005 57 push rdi
- 00006 48 83 ec 60 sub rsp, 96 ; 00000060H
- 0000a 48 8b d9 mov rbx, rcx
-
-; 1065 : FILE *fOut;
-; 1066 : struct stat statBuffer;
-; 1067 :
-; 1068 : if (checkIfFileExist)
-
- 0000d 84 d2 test dl, dl
- 0000f 74 6f je SHORT $LN3@renderToWa
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\sys\stat.h
-
-; 242 : return _stat64i32(_FileName, (struct _stat64i32*)_Stat);
-
- 00011 48 8d 54 24 30 lea rdx, QWORD PTR statBuffer$[rsp]
- 00016 e8 00 00 00 00 call _stat64i32
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 1070 : if (stat(fileName, &statBuffer) == 0)
-
- 0001b 85 c0 test eax, eax
- 0001d 75 61 jne SHORT $LN3@renderToWa
-; File C:\Programming\pt2-clone\src\pt2_mouse.c
-
-; 105 : case POINTER_MODE_MSG1: pointerSetColor(POINTER_PURPLE); break;
-
- 0001f b1 03 mov cl, 3
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 1072 : editor.ui.askScreenShown = true;
-
- 00021 c6 05 dc 37 00
- 00 01 mov BYTE PTR editor+14300, 1
-
-; 1073 : editor.ui.askScreenType = ASK_MOD2WAV_OVERWRITE;
-
- 00028 c6 05 fc 37 00
- 00 05 mov BYTE PTR editor+14332, 5
-; File C:\Programming\pt2-clone\src\pt2_mouse.c
-
-; 95 : editor.ui.pointerMode = pointerMode;
-
- 0002f c6 05 f9 37 00
- 00 03 mov BYTE PTR editor+14329, 3
-
-; 105 : case POINTER_MODE_MSG1: pointerSetColor(POINTER_PURPLE); break;
-
- 00036 e8 00 00 00 00 call pointerSetColor
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 1073 : editor.ui.askScreenType = ASK_MOD2WAV_OVERWRITE;
-
- 0003b 33 db xor ebx, ebx
- 0003d 48 8d 3d 00 00
- 00 00 lea rdi, OFFSET FLAT:__ImageBase
- 00044 0f 1f 40 00 0f
- 1f 84 00 00 00
- 00 00 npad 12
-$LL27@renderToWa:
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-
-; 615 : strcpy(editor.ui.statusMessage, msg);
-
- 00050 0f b6 84 3b 00
- 00 00 00 movzx eax, BYTE PTR ??_C@_0BA@ELDAEBLE@OVERWRITE?5FILE?$DP@[rbx+rdi]
- 00058 88 84 3b 90 37
- 00 00 mov BYTE PTR editor[rbx+rdi+14224], al
- 0005f 48 8d 5b 01 lea rbx, QWORD PTR [rbx+1]
- 00063 84 c0 test al, al
- 00065 75 e9 jne SHORT $LL27@renderToWa
-
-; 616 : editor.ui.updateStatusText = true;
-
- 00067 c6 05 03 38 00
- 00 01 mov BYTE PTR editor+14339, 1
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 1078 : renderAskDialog();
-
- 0006e e8 00 00 00 00 call renderAskDialog
-
-; 1079 :
-; 1080 : return false;
-
- 00073 32 c0 xor al, al
-
-; 1132 : }
-
- 00075 48 8b 5c 24 78 mov rbx, QWORD PTR [rsp+120]
- 0007a 48 83 c4 60 add rsp, 96 ; 00000060H
- 0007e 5f pop rdi
- 0007f c3 ret 0
-$LN3@renderToWa:
-
-; 1081 : }
-; 1082 : }
-; 1083 :
-; 1084 : if (editor.ui.askScreenShown)
-
- 00080 80 3d dc 37 00
- 00 00 cmp BYTE PTR editor+14300, 0
- 00087 48 89 74 24 70 mov QWORD PTR [rsp+112], rsi
- 0008c 74 10 je SHORT $LN4@renderToWa
-
-; 1085 : {
-; 1086 : editor.ui.askScreenShown = false;
-
- 0008e c6 05 dc 37 00
- 00 00 mov BYTE PTR editor+14300, 0
-
-; 1087 : editor.ui.answerNo = false;
-
- 00095 66 c7 05 d8 37
- 00 00 00 00 mov WORD PTR editor+14296, 0
-$LN4@renderToWa:
-
-; 1088 : editor.ui.answerYes = false;
-; 1089 : }
-; 1090 :
-; 1091 : fOut = fopen(fileName, "wb");
-
- 0009e 48 8d 15 00 00
- 00 00 lea rdx, OFFSET FLAT:??_C@_02GMLFBBN@wb@
- 000a5 48 8b cb mov rcx, rbx
- 000a8 e8 00 00 00 00 call fopen
- 000ad 48 8b f0 mov rsi, rax
-
-; 1092 : if (fOut == NULL)
-
- 000b0 48 85 c0 test rax, rax
- 000b3 75 52 jne SHORT $LN5@renderToWa
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-
-; 635 : editor.errorMsgActive = true;
-
- 000b5 66 c7 05 08 01
- 00 00 01 01 mov WORD PTR editor+264, 257 ; 00000101H
- 000be 48 8d 3d 00 00
- 00 00 lea rdi, OFFSET FLAT:__ImageBase
-
-; 636 : editor.errorMsgBlock = true;
-; 637 : editor.errorMsgCounter = 0;
-
- 000c5 88 05 82 22 00
- 00 mov BYTE PTR editor+8834, al
- 000cb 33 db xor ebx, ebx
- 000cd 0f 1f 00 npad 3
-$LL35@renderToWa:
-
-; 615 : strcpy(editor.ui.statusMessage, msg);
-
- 000d0 0f b6 84 3b 00
- 00 00 00 movzx eax, BYTE PTR ??_C@_0P@KJEHIBPC@FILE?5I?1O?5ERROR@[rbx+rdi]
- 000d8 88 84 3b 90 37
- 00 00 mov BYTE PTR editor[rbx+rdi+14224], al
- 000df 48 8d 5b 01 lea rbx, QWORD PTR [rbx+1]
- 000e3 84 c0 test al, al
- 000e5 75 e9 jne SHORT $LL35@renderToWa
-; File C:\Programming\pt2-clone\src\pt2_mouse.c
-
-; 126 : pointerSetColor(POINTER_RED);
-
- 000e7 b1 05 mov cl, 5
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-
-; 616 : editor.ui.updateStatusText = true;
-
- 000e9 c6 05 03 38 00
- 00 01 mov BYTE PTR editor+14339, 1
-; File C:\Programming\pt2-clone\src\pt2_mouse.c
-
-; 126 : pointerSetColor(POINTER_RED);
-
- 000f0 e8 00 00 00 00 call pointerSetColor
- 000f5 48 8b 74 24 70 mov rsi, QWORD PTR [rsp+112]
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 1128 : return false;
-
- 000fa 32 c0 xor al, al
-
-; 1132 : }
-
- 000fc 48 8b 5c 24 78 mov rbx, QWORD PTR [rsp+120]
- 00101 48 83 c4 60 add rsp, 96 ; 00000060H
- 00105 5f pop rdi
- 00106 c3 ret 0
-$LN5@renderToWa:
-; File C:\Programming\pt2-clone\src\pt2_modplayer.c
-
-; 97 : oldBPM = modEntry->currBPM;
-
- 00107 48 8b 0d 00 00
- 00 00 mov rcx, QWORD PTR modEntry
- 0010e 0f b7 41 1a movzx eax, WORD PTR [rcx+26]
- 00112 66 89 05 00 00
- 00 00 mov WORD PTR oldBPM, ax
-
-; 98 : oldRow = modEntry->currRow;
-
- 00119 0f b6 41 10 movzx eax, BYTE PTR [rcx+16]
- 0011d 88 05 00 00 00
- 00 mov BYTE PTR oldRow, al
-
-; 99 : oldOrder = modEntry->currOrder;
-
- 00123 0f b7 41 16 movzx eax, WORD PTR [rcx+22]
- 00127 66 89 05 00 00
- 00 00 mov WORD PTR oldOrder, ax
-
-; 100 : oldSpeed = modEntry->currSpeed;
-
- 0012e 0f b6 41 13 movzx eax, BYTE PTR [rcx+19]
- 00132 88 05 00 00 00
- 00 mov BYTE PTR oldSpeed, al
-
-; 101 : oldPattern = modEntry->currPattern;
-
- 00138 0f b7 41 18 movzx eax, WORD PTR [rcx+24]
- 0013c 66 89 05 00 00
- 00 00 mov WORD PTR oldPattern, ax
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 1099 : calcMod2WavTotalRows();
-
- 00143 e8 00 00 00 00 call calcMod2WavTotalRows
-
-; 1100 : restartSong();
-
- 00148 e8 00 00 00 00 call restartSong
-; File C:\Programming\pt2-clone\src\pt2_mouse.c
-
-; 106 : case POINTER_MODE_MSG2: pointerSetColor(POINTER_GREEN); break;
-
- 0014d b1 04 mov cl, 4
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 1102 : editor.blockMarkFlag = false;
-
- 0014f c6 05 1d 01 00
- 00 00 mov BYTE PTR editor+285, 0
-; File C:\Programming\pt2-clone\src\pt2_mouse.c
-
-; 95 : editor.ui.pointerMode = pointerMode;
-
- 00156 c6 05 f9 37 00
- 00 05 mov BYTE PTR editor+14329, 5
-
-; 106 : case POINTER_MODE_MSG2: pointerSetColor(POINTER_GREEN); break;
-
- 0015d e8 00 00 00 00 call pointerSetColor
-; File C:\Programming\pt2-clone\src\pt2_modplayer.c
-
-; 97 : oldBPM = modEntry->currBPM;
-
- 00162 33 db xor ebx, ebx
- 00164 48 8d 3d 00 00
- 00 00 lea rdi, OFFSET FLAT:__ImageBase
- 0016b 8b cb mov ecx, ebx
- 0016d 0f 1f 00 npad 3
-$LL56@renderToWa:
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-
-; 615 : strcpy(editor.ui.statusMessage, msg);
-
- 00170 0f b6 84 39 00
- 00 00 00 movzx eax, BYTE PTR ??_C@_0BB@JCAIEAIK@RENDERING?5MOD?4?4?4@[rcx+rdi]
- 00178 88 84 39 90 37
- 00 00 mov BYTE PTR editor[rcx+rdi+14224], al
- 0017f 48 8d 49 01 lea rcx, QWORD PTR [rcx+1]
- 00183 84 c0 test al, al
- 00185 75 e9 jne SHORT $LL56@renderToWa
-
-; 616 : editor.ui.updateStatusText = true;
-
- 00187 c6 05 03 38 00
- 00 01 mov BYTE PTR editor+14339, 1
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 1107 : editor.ui.disableVisualizer = true;
-
- 0018e c6 05 36 38 00
- 00 01 mov BYTE PTR editor+14390, 1
-
-; 1108 : editor.isWAVRendering = true;
-
- 00195 c6 05 3e 00 00
- 00 01 mov BYTE PTR editor+62, 1
-
-; 1109 : renderMOD2WAVDialog();
-
- 0019c e8 00 00 00 00 call renderMOD2WAVDialog
-
-; 1110 :
-; 1111 : editor.abortMod2Wav = false;
-; 1112 :
-; 1113 : editor.mod2WavThread = SDL_CreateThread(mod2WavThreadFunc, NULL, fOut);
-
- 001a1 48 8d 05 00 00
- 00 00 lea rax, OFFSET FLAT:_endthreadex
- 001a8 88 1d 21 01 00
- 00 mov BYTE PTR editor+289, bl
- 001ae 4c 8d 0d 00 00
- 00 00 lea r9, OFFSET FLAT:_beginthreadex
- 001b5 48 89 44 24 20 mov QWORD PTR [rsp+32], rax
- 001ba 4c 8b c6 mov r8, rsi
- 001bd 48 8d 0d 00 00
- 00 00 lea rcx, OFFSET FLAT:mod2WavThreadFunc
- 001c4 33 d2 xor edx, edx
- 001c6 ff 15 00 00 00
- 00 call QWORD PTR __imp_SDL_CreateThread
- 001cc 48 89 05 f8 34
- 00 00 mov QWORD PTR editor+13560, rax
-
-; 1114 : if (editor.mod2WavThread != NULL)
-
- 001d3 48 85 c0 test rax, rax
- 001d6 74 1b je SHORT $LN6@renderToWa
-
-; 1115 : {
-; 1116 : SDL_DetachThread(editor.mod2WavThread);
-
- 001d8 48 8b c8 mov rcx, rax
- 001db ff 15 00 00 00
- 00 call QWORD PTR __imp_SDL_DetachThread
- 001e1 48 8b 74 24 70 mov rsi, QWORD PTR [rsp+112]
-
-; 1129 : }
-; 1130 :
-; 1131 : return true;
-
- 001e6 b0 01 mov al, 1
-
-; 1132 : }
-
- 001e8 48 8b 5c 24 78 mov rbx, QWORD PTR [rsp+120]
- 001ed 48 83 c4 60 add rsp, 96 ; 00000060H
- 001f1 5f pop rdi
- 001f2 c3 ret 0
-$LN6@renderToWa:
-
-; 1117 : }
-; 1118 : else
-; 1119 : {
-; 1120 : editor.ui.disableVisualizer = false;
-
- 001f3 88 1d 36 38 00
- 00 mov BYTE PTR editor+14390, bl
-
-; 1121 : editor.isWAVRendering = false;
-
- 001f9 88 1d 3e 00 00
- 00 mov BYTE PTR editor+62, bl
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-
-; 635 : editor.errorMsgActive = true;
-
- 001ff 66 c7 05 08 01
- 00 00 01 01 mov WORD PTR editor+264, 257 ; 00000101H
-
-; 636 : editor.errorMsgBlock = true;
-; 637 : editor.errorMsgCounter = 0;
-
- 00208 88 1d 82 22 00
- 00 mov BYTE PTR editor+8834, bl
- 0020e 66 90 npad 2
-$LL64@renderToWa:
-
-; 615 : strcpy(editor.ui.statusMessage, msg);
-
- 00210 0f b6 84 3b 00
- 00 00 00 movzx eax, BYTE PTR ??_C@_0N@HDBMFKCM@THREAD?5ERROR@[rbx+rdi]
- 00218 88 84 3b 90 37
- 00 00 mov BYTE PTR editor[rbx+rdi+14224], al
- 0021f 48 8d 5b 01 lea rbx, QWORD PTR [rbx+1]
- 00223 84 c0 test al, al
- 00225 75 e9 jne SHORT $LL64@renderToWa
-; File C:\Programming\pt2-clone\src\pt2_mouse.c
-
-; 126 : pointerSetColor(POINTER_RED);
-
- 00227 b1 05 mov cl, 5
-; File C:\Programming\pt2-clone\src\pt2_textout.c
-
-; 616 : editor.ui.updateStatusText = true;
-
- 00229 c6 05 03 38 00
- 00 01 mov BYTE PTR editor+14339, 1
-; File C:\Programming\pt2-clone\src\pt2_mouse.c
-
-; 126 : pointerSetColor(POINTER_RED);
-
- 00230 e8 00 00 00 00 call pointerSetColor
-
-; 101 : case POINTER_MODE_IDLE: pointerSetColor(POINTER_GRAY); break;
-
- 00235 33 c9 xor ecx, ecx
- 00237 c6 05 f9 37 00
- 00 00 mov BYTE PTR editor+14329, 0
- 0023e c6 05 fe 37 00
- 00 00 mov BYTE PTR editor+14334, 0
- 00245 e8 00 00 00 00 call pointerSetColor
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 1126 : statusAllRight();
-
- 0024a e8 00 00 00 00 call statusAllRight
- 0024f 48 8b 74 24 70 mov rsi, QWORD PTR [rsp+112]
-
-; 1128 : return false;
-
- 00254 32 c0 xor al, al
-
-; 1132 : }
-
- 00256 48 8b 5c 24 78 mov rbx, QWORD PTR [rsp+120]
- 0025b 48 83 c4 60 add rsp, 96 ; 00000060H
- 0025f 5f pop rdi
- 00260 c3 ret 0
-renderToWav ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT calcMod2WavTotalRows
-_TEXT SEGMENT
-n_loopcount$ = 96
-n_pattpos$ = 104
-calcMod2WavTotalRows PROC ; COMDAT
-
-; 1136 : {
-
-$LN55:
- 00000 48 89 5c 24 18 mov QWORD PTR [rsp+24], rbx
- 00005 55 push rbp
- 00006 56 push rsi
- 00007 57 push rdi
- 00008 41 54 push r12
- 0000a 41 55 push r13
- 0000c 41 56 push r14
- 0000e 41 57 push r15
- 00010 48 83 ec 20 sub rsp, 32 ; 00000020H
-
-; 1137 : bool pBreakFlag, posJumpAssert, calcingRows;
-; 1138 : int8_t n_pattpos[AMIGA_VOICES], n_loopcount[AMIGA_VOICES];
-; 1139 : uint8_t modRow, pBreakPosition, ch, pos;
-; 1140 : int16_t modOrder;
-; 1141 : uint16_t modPattern;
-; 1142 : note_t *note;
-; 1143 :
-; 1144 : // for pattern loop
-; 1145 : memset(n_pattpos, 0, sizeof (n_pattpos));
-; 1146 : memset(n_loopcount, 0, sizeof (n_loopcount));
-; 1147 :
-; 1148 : modEntry->rowsCounter = 0;
-
- 00014 4c 8b 3d 00 00
- 00 00 mov r15, QWORD PTR modEntry
-
-; 1149 : modEntry->rowsInTotal = 0;
-; 1150 :
-; 1151 : modRow = 0;
-; 1152 : modOrder = 0;
-; 1153 : modPattern = modEntry->head.order[0];
-; 1154 : pBreakPosition = 0;
-; 1155 : posJumpAssert = false;
-; 1156 : pBreakFlag = false;
-; 1157 : calcingRows = true;
-; 1158 :
-; 1159 : memset(editor.rowVisitTable, 0, MOD_ORDERS * MOD_ROWS);
-
- 0001b 48 8d 0d 23 01
- 00 00 lea rcx, OFFSET FLAT:editor+291
- 00022 33 c0 xor eax, eax
- 00024 32 db xor bl, bl
- 00026 40 32 ff xor dil, dil
- 00029 89 44 24 68 mov DWORD PTR n_pattpos$[rsp], eax
- 0002d 45 32 f6 xor r14b, r14b
- 00030 89 44 24 60 mov DWORD PTR n_loopcount$[rsp], eax
- 00034 45 0f b7 67 3c movzx r12d, WORD PTR [r15+60]
- 00039 40 32 ed xor bpl, bpl
- 0003c 33 d2 xor edx, edx
- 0003e 49 89 47 1c mov QWORD PTR [r15+28], rax
- 00042 41 b8 00 20 00
- 00 mov r8d, 8192 ; 00002000H
- 00048 0f b7 f0 movzx esi, ax
- 0004b 41 b5 01 mov r13b, 1
- 0004e e8 00 00 00 00 call memset
- 00053 4c 8d 05 00 00
- 00 00 lea r8, OFFSET FLAT:editor
- 0005a 66 0f 1f 44 00
- 00 npad 6
-$LL2@calcMod2Wa:
-
-; 1161 : {
-; 1162 : editor.rowVisitTable[(modOrder * MOD_ROWS) + modRow] = true;
-
- 00060 0f bf c6 movsx eax, si
- 00063 c1 e0 06 shl eax, 6
- 00066 0f b6 cb movzx ecx, bl
- 00069 03 c1 add eax, ecx
- 0006b 48 98 cdqe
-
-; 1163 :
-; 1164 : for (ch = 0; ch < AMIGA_VOICES; ch++)
-
- 0006d 45 32 c9 xor r9b, r9b
- 00070 44 8d 14 8d 00
- 00 00 00 lea r10d, DWORD PTR [rcx*4]
- 00078 42 c6 84 00 23
- 01 00 00 01 mov BYTE PTR [rax+r8+291], 1
- 00081 41 0f b7 c4 movzx eax, r12w
- 00085 4d 8d 1c c7 lea r11, QWORD PTR [r15+rax*8]
- 00089 0f 1f 80 00 00
- 00 00 npad 7
-$LL6@calcMod2Wa:
-
-; 1165 : {
-; 1166 : note = &modEntry->patterns[modPattern][(modRow * AMIGA_VOICES) + ch];
-
- 00090 41 0f b6 c1 movzx eax, r9b
- 00094 41 03 c2 add eax, r10d
- 00097 48 8d 0c 40 lea rcx, QWORD PTR [rax+rax*2]
- 0009b 49 8b 83 00 0c
- 00 00 mov rax, QWORD PTR [r11+3072]
- 000a2 48 8d 14 48 lea rdx, QWORD PTR [rax+rcx*2]
-
-; 1167 : if (note->command == 0x0B) // Bxx - Position Jump
-
- 000a6 0f b6 44 48 02 movzx eax, BYTE PTR [rax+rcx*2+2]
- 000ab 3c 0b cmp al, 11
- 000ad 75 11 jne SHORT $LN13@calcMod2Wa
-
-; 1168 : {
-; 1169 : modOrder = note->param - 1;
-
- 000af 0f b6 32 movzx esi, BYTE PTR [rdx]
-
-; 1170 : pBreakPosition = 0;
-; 1171 : posJumpAssert = true;
-
- 000b2 41 b6 01 mov r14b, 1
- 000b5 66 ff ce dec si
- 000b8 40 32 ff xor dil, dil
-
-; 1172 : }
-
- 000bb e9 9f 01 00 00 jmp $LN4@calcMod2Wa
-$LN13@calcMod2Wa:
-
-; 1173 : else if (note->command == 0x0D) // Dxx - Pattern Break
-
- 000c0 3c 0d cmp al, 13
- 000c2 75 2a jne SHORT $LN15@calcMod2Wa
-
-; 1174 : {
-; 1175 : pBreakPosition = (((note->param >> 4) * 10) + (note->param & 0x0F));
-
- 000c4 0f b6 0a movzx ecx, BYTE PTR [rdx]
-
-; 1176 : if (pBreakPosition > 63)
-; 1177 : pBreakPosition = 0;
-; 1178 :
-; 1179 : posJumpAssert = true;
-
- 000c7 33 ff xor edi, edi
- 000c9 0f b6 d1 movzx edx, cl
- 000cc 41 b6 01 mov r14b, 1
- 000cf c0 ea 04 shr dl, 4
- 000d2 80 e1 0f and cl, 15
- 000d5 0f b6 c2 movzx eax, dl
- 000d8 c0 e0 02 shl al, 2
- 000db 02 d0 add dl, al
- 000dd 02 d2 add dl, dl
- 000df 02 d1 add dl, cl
- 000e1 0f b6 c2 movzx eax, dl
- 000e4 3c 3f cmp al, 63 ; 0000003fH
- 000e6 0f 46 f8 cmovbe edi, eax
-
-; 1180 : }
-
- 000e9 e9 71 01 00 00 jmp $LN4@calcMod2Wa
-$LN15@calcMod2Wa:
-
-; 1181 : else if (note->command == 0x0F && note->param == 0) // F00 - Set Speed 0 (stop)
-
- 000ee 3c 0f cmp al, 15
- 000f0 0f 85 a6 00 00
- 00 jne $LN47@calcMod2Wa
- 000f6 80 3a 00 cmp BYTE PTR [rdx], 0
- 000f9 0f 85 60 01 00
- 00 jne $LN4@calcMod2Wa
-
-; 1182 : {
-; 1183 : calcingRows = false;
-
- 000ff 45 32 ed xor r13b, r13b
-$LN52@calcMod2Wa:
-
-; 1215 : }
-; 1216 : }
-; 1217 : }
-; 1218 : }
-; 1219 : }
-; 1220 :
-; 1221 : modRow++;
-; 1222 : modEntry->rowsInTotal++;
-
- 00102 41 ff 47 20 inc DWORD PTR [r15+32]
-
-; 1223 :
-; 1224 : if (pBreakFlag)
-; 1225 : {
-; 1226 : modRow = pBreakPosition;
-; 1227 : pBreakPosition = 0;
-; 1228 : pBreakFlag = false;
-; 1229 : }
-; 1230 :
-; 1231 : if (modRow >= MOD_ROWS || posJumpAssert)
-
- 00106 33 c9 xor ecx, ecx
- 00108 40 84 ed test bpl, bpl
- 0010b 40 0f b6 c7 movzx eax, dil
- 0010f 0f 44 c8 cmove ecx, eax
- 00112 8d 43 01 lea eax, DWORD PTR [rbx+1]
- 00115 0f b6 c0 movzx eax, al
- 00118 40 0f b6 df movzx ebx, dil
- 0011c 0f 44 d8 cmove ebx, eax
- 0011f 80 fb 40 cmp bl, 64 ; 00000040H
- 00122 73 08 jae SHORT $LN28@calcMod2Wa
- 00124 0f b6 f9 movzx edi, cl
- 00127 45 84 f6 test r14b, r14b
- 0012a 74 30 je SHORT $LN30@calcMod2Wa
-$LN28@calcMod2Wa:
-
-; 1232 : {
-; 1233 : modRow = pBreakPosition;
-; 1234 : pBreakPosition = 0;
-; 1235 : posJumpAssert = false;
-; 1236 :
-; 1237 : modOrder = (modOrder + 1) & 0x7F;
-
- 0012c 66 ff c6 inc si
- 0012f 40 32 ff xor dil, dil
- 00132 66 83 e6 7f and si, 127 ; 0000007fH
- 00136 45 32 f6 xor r14b, r14b
- 00139 0f b6 d9 movzx ebx, cl
- 0013c 0f b7 c6 movzx eax, si
-
-; 1238 : if (modOrder >= modEntry->head.orderCount)
-
- 0013f 66 41 3b b7 3c
- 01 00 00 cmp si, WORD PTR [r15+316]
- 00147 73 3e jae SHORT $LN38@calcMod2Wa
-
-; 1239 : {
-; 1240 : modOrder = 0;
-; 1241 : calcingRows = false;
-; 1242 : break;
-; 1243 : }
-; 1244 :
-; 1245 : modPattern = modEntry->head.order[modOrder];
-
- 00149 45 0f b7 64 47
- 3c movzx r12d, WORD PTR [r15+rax*2+60]
-
-; 1246 : if (modPattern > MAX_PATTERNS-1)
-
- 0014f 66 41 83 fc 63 cmp r12w, 99 ; 00000063H
- 00154 76 06 jbe SHORT $LN30@calcMod2Wa
-
-; 1247 : modPattern = MAX_PATTERNS-1;
-
- 00156 41 bc 63 00 00
- 00 mov r12d, 99 ; 00000063H
-$LN30@calcMod2Wa:
-
-; 1248 : }
-; 1249 :
-; 1250 : if (editor.rowVisitTable[(modOrder * MOD_ROWS) + modRow])
-
- 0015c 0f b6 c3 movzx eax, bl
- 0015f 4c 8d 05 00 00
- 00 00 lea r8, OFFSET FLAT:editor
- 00166 0f bf ce movsx ecx, si
- 00169 c1 e1 06 shl ecx, 6
- 0016c 03 c1 add eax, ecx
- 0016e 48 98 cdqe
- 00170 42 80 bc 00 23
- 01 00 00 00 cmp BYTE PTR [rax+r8+291], 0
- 00179 75 0c jne SHORT $LN38@calcMod2Wa
-
-; 1160 : while (calcingRows)
-
- 0017b 40 32 ed xor bpl, bpl
- 0017e 45 84 ed test r13b, r13b
- 00181 0f 85 d9 fe ff
- ff jne $LL2@calcMod2Wa
-$LN38@calcMod2Wa:
-
-; 1251 : {
-; 1252 : // row has been visited before, we're now done!
-; 1253 : calcingRows = false;
-; 1254 : break;
-; 1255 : }
-; 1256 : }
-; 1257 : }
-
- 00187 48 8b 5c 24 70 mov rbx, QWORD PTR [rsp+112]
- 0018c 48 83 c4 20 add rsp, 32 ; 00000020H
- 00190 41 5f pop r15
- 00192 41 5e pop r14
- 00194 41 5d pop r13
- 00196 41 5c pop r12
- 00198 5f pop rdi
- 00199 5e pop rsi
- 0019a 5d pop rbp
- 0019b c3 ret 0
-$LN47@calcMod2Wa:
-
-; 1184 : break;
-; 1185 : }
-; 1186 : else if (note->command == 0x0E && (note->param >> 4) == 0x06) // E6x - Pattern Loop
-
- 0019c 3c 0e cmp al, 14
- 0019e 0f 85 bb 00 00
- 00 jne $LN4@calcMod2Wa
- 001a4 0f b6 0a movzx ecx, BYTE PTR [rdx]
- 001a7 0f b6 c1 movzx eax, cl
- 001aa 24 f0 and al, 240 ; 000000f0H
- 001ac 3c 60 cmp al, 96 ; 00000060H
- 001ae 0f 85 ab 00 00
- 00 jne $LN4@calcMod2Wa
-
-; 1187 : {
-; 1188 : pos = note->param & 0x0F;
-
- 001b4 41 0f b6 c1 movzx eax, r9b
- 001b8 80 e1 0f and cl, 15
-
-; 1189 : if (pos == 0)
-
- 001bb 75 09 jne SHORT $LN21@calcMod2Wa
-
-; 1190 : {
-; 1191 : n_pattpos[ch] = modRow;
-
- 001bd 88 5c 04 68 mov BYTE PTR n_pattpos$[rsp+rax], bl
-
-; 1192 : }
-
- 001c1 e9 99 00 00 00 jmp $LN4@calcMod2Wa
-$LN21@calcMod2Wa:
-
-; 1193 : else
-; 1194 : {
-; 1195 : // this is so ugly
-; 1196 : if (n_loopcount[ch] == 0)
-
- 001c6 0f b6 54 04 60 movzx edx, BYTE PTR n_loopcount$[rsp+rax]
- 001cb 84 d2 test dl, dl
- 001cd 75 3e jne SHORT $LN23@calcMod2Wa
-
-; 1197 : {
-; 1198 : n_loopcount[ch] = pos;
-; 1199 :
-; 1200 : pBreakPosition = n_pattpos[ch];
-
- 001cf 0f b6 7c 04 68 movzx edi, BYTE PTR n_pattpos$[rsp+rax]
-
-; 1201 : pBreakFlag = true;
-
- 001d4 40 b5 01 mov bpl, 1
- 001d7 88 4c 04 60 mov BYTE PTR n_loopcount$[rsp+rax], cl
-
-; 1202 :
-; 1203 : for (pos = pBreakPosition; pos <= modRow; pos++)
-
- 001db 40 0f b6 d7 movzx edx, dil
- 001df 40 3a fb cmp dil, bl
- 001e2 77 7b ja SHORT $LN4@calcMod2Wa
- 001e4 44 0f bf c6 movsx r8d, si
- 001e8 4c 8d 3d 00 00
- 00 00 lea r15, OFFSET FLAT:editor
- 001ef 41 c1 e0 06 shl r8d, 6
-$LL9@calcMod2Wa:
-
-; 1204 : editor.rowVisitTable[(modOrder * MOD_ROWS) + pos] = false;
-
- 001f3 0f b6 c2 movzx eax, dl
- 001f6 fe c2 inc dl
- 001f8 41 03 c0 add eax, r8d
- 001fb 48 63 c8 movsxd rcx, eax
- 001fe 42 c6 84 39 23
- 01 00 00 00 mov BYTE PTR [rcx+r15+291], 0
- 00207 3a d3 cmp dl, bl
- 00209 76 e8 jbe SHORT $LL9@calcMod2Wa
-
-; 1205 : }
-
- 0020b eb 4b jmp SHORT $LN53@calcMod2Wa
-$LN23@calcMod2Wa:
-
-; 1206 : else
-; 1207 : {
-; 1208 : if (--n_loopcount[ch])
-
- 0020d 80 ea 01 sub dl, 1
- 00210 88 54 04 60 mov BYTE PTR n_loopcount$[rsp+rax], dl
- 00214 74 49 je SHORT $LN4@calcMod2Wa
-
-; 1209 : {
-; 1210 : pBreakPosition = n_pattpos[ch];
-
- 00216 0f b6 7c 04 68 movzx edi, BYTE PTR n_pattpos$[rsp+rax]
-
-; 1211 : pBreakFlag = true;
-
- 0021b 40 b5 01 mov bpl, 1
-
-; 1212 :
-; 1213 : for (pos = pBreakPosition; pos <= modRow; pos++)
-
- 0021e 40 0f b6 c7 movzx eax, dil
- 00222 40 3a fb cmp dil, bl
- 00225 77 38 ja SHORT $LN4@calcMod2Wa
- 00227 44 0f bf c6 movsx r8d, si
- 0022b 4c 8d 3d 00 00
- 00 00 lea r15, OFFSET FLAT:editor
- 00232 41 c1 e0 06 shl r8d, 6
- 00236 66 66 0f 1f 84
- 00 00 00 00 00 npad 10
-$LL12@calcMod2Wa:
-
-; 1214 : editor.rowVisitTable[(modOrder * MOD_ROWS) + pos] = false;
-
- 00240 0f b6 c8 movzx ecx, al
- 00243 fe c0 inc al
- 00245 41 03 c8 add ecx, r8d
- 00248 48 63 d1 movsxd rdx, ecx
- 0024b 42 c6 84 3a 23
- 01 00 00 00 mov BYTE PTR [rdx+r15+291], 0
- 00254 3a c3 cmp al, bl
- 00256 76 e8 jbe SHORT $LL12@calcMod2Wa
-$LN53@calcMod2Wa:
-
-; 1163 :
-; 1164 : for (ch = 0; ch < AMIGA_VOICES; ch++)
-
- 00258 4c 8b 3d 00 00
- 00 00 mov r15, QWORD PTR modEntry
-$LN4@calcMod2Wa:
- 0025f 41 fe c1 inc r9b
- 00262 41 80 f9 04 cmp r9b, 4
- 00266 0f 82 24 fe ff
- ff jb $LL6@calcMod2Wa
- 0026c e9 91 fe ff ff jmp $LN52@calcMod2Wa
-calcMod2WavTotalRows ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT normalize32bitSigned
-_TEXT SEGMENT
-sampleData$ = 8
-sampleLength$ = 16
-normalize32bitSigned PROC ; COMDAT
-
-; 1260 : {
-
-$LN47:
- 00000 48 89 5c 24 08 mov QWORD PTR [rsp+8], rbx
-
-; 1261 : int32_t sample, sampleVolPeak;
-; 1262 : uint32_t i;
-; 1263 : double dGain;
-; 1264 :
-; 1265 : sampleVolPeak = 0;
-
- 00005 45 33 db xor r11d, r11d
- 00008 44 8b d2 mov r10d, edx
- 0000b 48 8b d9 mov rbx, rcx
- 0000e 45 8b c3 mov r8d, r11d
- 00011 45 8b cb mov r9d, r11d
-
-; 1266 : for (i = 0; i < sampleLength; i++)
-
- 00014 85 d2 test edx, edx
- 00016 0f 84 be 00 00
- 00 je $LN44@normalize3
- 0001c 83 fa 08 cmp edx, 8
- 0001f 72 73 jb SHORT $LN22@normalize3
-
-; 1261 : int32_t sample, sampleVolPeak;
-; 1262 : uint32_t i;
-; 1263 : double dGain;
-; 1264 :
-; 1265 : sampleVolPeak = 0;
-
- 00021 83 3d 00 00 00
- 00 02 cmp DWORD PTR __isa_available, 2
- 00028 7c 6a jl SHORT $LN22@normalize3
- 0002a 83 e2 f8 and edx, -8 ; fffffff8H
- 0002d 0f 57 d2 xorps xmm2, xmm2
- 00030 0f 57 db xorps xmm3, xmm3
- 00033 0f 1f 40 00 66
- 0f 1f 84 00 00
- 00 00 00 npad 13
-$LL4@normalize3:
-
-; 1267 : {
-; 1268 : sample = ABS(sampleData[i]);
-
- 00040 41 8b c1 mov eax, r9d
- 00043 f3 0f 6f 04 81 movdqu xmm0, XMMWORD PTR [rcx+rax*4]
- 00048 41 8d 41 04 lea eax, DWORD PTR [r9+4]
- 0004c 41 83 c1 08 add r9d, 8
- 00050 66 0f 38 1e c8 pabsd xmm1, xmm0
-
-; 1269 : if (sampleVolPeak < sample)
-
- 00055 66 0f 38 3d d1 pmaxsd xmm2, xmm1
- 0005a f3 0f 6f 04 81 movdqu xmm0, XMMWORD PTR [rcx+rax*4]
- 0005f 66 0f 38 1e c8 pabsd xmm1, xmm0
- 00064 66 0f 38 3d d9 pmaxsd xmm3, xmm1
- 00069 44 3b ca cmp r9d, edx
- 0006c 72 d2 jb SHORT $LL4@normalize3
-
-; 1261 : int32_t sample, sampleVolPeak;
-; 1262 : uint32_t i;
-; 1263 : double dGain;
-; 1264 :
-; 1265 : sampleVolPeak = 0;
-
- 0006e 66 0f 38 3d d3 pmaxsd xmm2, xmm3
- 00073 66 0f 6f c2 movdqa xmm0, xmm2
- 00077 66 0f 73 d8 08 psrldq xmm0, 8
- 0007c 66 0f 38 3d d0 pmaxsd xmm2, xmm0
- 00081 66 0f 6f c2 movdqa xmm0, xmm2
- 00085 66 0f 73 d8 04 psrldq xmm0, 4
- 0008a 66 0f 38 3d d0 pmaxsd xmm2, xmm0
- 0008f 66 41 0f 7e d0 movd r8d, xmm2
-$LN22@normalize3:
-
-; 1266 : for (i = 0; i < sampleLength; i++)
-
- 00094 45 3b ca cmp r9d, r10d
- 00097 73 2f jae SHORT $LN3@normalize3
- 00099 41 8b c1 mov eax, r9d
- 0009c 48 8d 0c 81 lea rcx, QWORD PTR [rcx+rax*4]
- 000a0 41 8b c2 mov eax, r10d
- 000a3 41 2b c1 sub eax, r9d
- 000a6 44 8b c8 mov r9d, eax
- 000a9 0f 1f 80 00 00
- 00 00 npad 7
-$LL18@normalize3:
-
-; 1269 : if (sampleVolPeak < sample)
-
- 000b0 8b 01 mov eax, DWORD PTR [rcx]
- 000b2 48 8d 49 04 lea rcx, QWORD PTR [rcx+4]
- 000b6 99 cdq
- 000b7 33 c2 xor eax, edx
- 000b9 2b c2 sub eax, edx
- 000bb 44 3b c0 cmp r8d, eax
- 000be 44 0f 4c c0 cmovl r8d, eax
- 000c2 49 83 e9 01 sub r9, 1
- 000c6 75 e8 jne SHORT $LL18@normalize3
-$LN3@normalize3:
-
-; 1270 : sampleVolPeak = sample;
-; 1271 : }
-; 1272 :
-; 1273 : if (sampleVolPeak >= INT32_MAX)
-
- 000c8 41 81 f8 ff ff
- ff 7f cmp r8d, 2147483647 ; 7fffffffH
- 000cf 0f 8d 80 01 00
- 00 jge $LN33@normalize3
-
-; 1274 : return; // sample is already normalized
-; 1275 :
-; 1276 : // prevent division by zero!
-; 1277 : if (sampleVolPeak <= 0)
-
- 000d5 45 85 c0 test r8d, r8d
- 000d8 7f 06 jg SHORT $LN10@normalize3
-$LN44@normalize3:
-
-; 1278 : sampleVolPeak = 1;
-
- 000da 41 b8 01 00 00
- 00 mov r8d, 1
-$LN10@normalize3:
-
-; 1279 :
-; 1280 : dGain = (double)INT32_MAX / sampleVolPeak;
-
- 000e0 f2 0f 10 15 00
- 00 00 00 movsd xmm2, QWORD PTR __real@41dfffffffc00000
- 000e8 66 41 0f 6e c0 movd xmm0, r8d
- 000ed f3 0f e6 c0 cvtdq2pd xmm0, xmm0
- 000f1 f2 0f 5e d0 divsd xmm2, xmm0
- 000f5 0f 28 da movaps xmm3, xmm2
- 000f8 66 0f 14 db unpcklpd xmm3, xmm3
-
-; 1281 : for (i = 0; i < sampleLength; i++)
-
- 000fc 45 85 d2 test r10d, r10d
- 000ff 0f 84 50 01 00
- 00 je $LN33@normalize3
- 00105 41 83 fa 08 cmp r10d, 8
- 00109 0f 82 83 00 00
- 00 jb $LN24@normalize3
-
-; 1279 :
-; 1280 : dGain = (double)INT32_MAX / sampleVolPeak;
-
- 0010f 41 8b d2 mov edx, r10d
- 00112 41 b8 04 00 00
- 00 mov r8d, 4
- 00118 83 e2 f8 and edx, -8 ; fffffff8H
- 0011b 0f 1f 44 00 00 npad 5
-$LL7@normalize3:
-
-; 1282 : {
-; 1283 : sample = (int32_t)(sampleData[i] * dGain);
-
- 00120 f3 42 0f 7e 04
- 9b movq xmm0, QWORD PTR [rbx+r11*4]
- 00126 41 8d 40 fe lea eax, DWORD PTR [r8-2]
- 0012a f3 0f e6 c8 cvtdq2pd xmm1, xmm0
- 0012e 66 0f 59 cb mulpd xmm1, xmm3
- 00132 66 0f e6 c1 cvttpd2dq xmm0, xmm1
-
-; 1284 : sampleData[i] = (int32_t)sample;
-
- 00136 66 42 0f d6 04
- 9b movq QWORD PTR [rbx+r11*4], xmm0
- 0013c 41 83 c3 08 add r11d, 8
- 00140 f3 0f 7e 04 83 movq xmm0, QWORD PTR [rbx+rax*4]
- 00145 f3 0f e6 c8 cvtdq2pd xmm1, xmm0
- 00149 66 0f 59 cb mulpd xmm1, xmm3
- 0014d 66 0f e6 c1 cvttpd2dq xmm0, xmm1
- 00151 66 0f d6 04 83 movq QWORD PTR [rbx+rax*4], xmm0
- 00156 41 8b c0 mov eax, r8d
- 00159 f3 0f 7e 04 83 movq xmm0, QWORD PTR [rbx+rax*4]
- 0015e f3 0f e6 c8 cvtdq2pd xmm1, xmm0
- 00162 66 0f 59 cb mulpd xmm1, xmm3
- 00166 66 0f e6 c1 cvttpd2dq xmm0, xmm1
- 0016a 66 0f d6 04 83 movq QWORD PTR [rbx+rax*4], xmm0
- 0016f 41 8d 40 02 lea eax, DWORD PTR [r8+2]
- 00173 f3 0f 7e 04 83 movq xmm0, QWORD PTR [rbx+rax*4]
- 00178 41 83 c0 08 add r8d, 8
- 0017c f3 0f e6 c8 cvtdq2pd xmm1, xmm0
- 00180 66 0f 59 cb mulpd xmm1, xmm3
- 00184 66 0f e6 c1 cvttpd2dq xmm0, xmm1
- 00188 66 0f d6 04 83 movq QWORD PTR [rbx+rax*4], xmm0
- 0018d 44 3b da cmp r11d, edx
- 00190 72 8e jb SHORT $LL7@normalize3
-$LN24@normalize3:
-
-; 1281 : for (i = 0; i < sampleLength; i++)
-
- 00192 45 3b da cmp r11d, r10d
- 00195 0f 83 ba 00 00
- 00 jae $LN33@normalize3
- 0019b 41 8b c2 mov eax, r10d
- 0019e 45 8b c3 mov r8d, r11d
- 001a1 41 2b c3 sub eax, r11d
- 001a4 83 f8 04 cmp eax, 4
- 001a7 0f 82 81 00 00
- 00 jb $LC34@normalize3
- 001ad 41 8b c2 mov eax, r10d
- 001b0 48 8d 4b 08 lea rcx, QWORD PTR [rbx+8]
- 001b4 41 2b c3 sub eax, r11d
- 001b7 4a 8d 0c 99 lea rcx, QWORD PTR [rcx+r11*4]
- 001bb 83 e8 04 sub eax, 4
- 001be c1 e8 02 shr eax, 2
- 001c1 ff c0 inc eax
- 001c3 8b d0 mov edx, eax
- 001c5 45 8d 1c 83 lea r11d, DWORD PTR [r11+rax*4]
- 001c9 4d 8d 04 80 lea r8, QWORD PTR [r8+rax*4]
- 001cd 0f 1f 00 npad 3
-$LL35@normalize3:
- 001d0 66 0f 6e 41 f8 movd xmm0, DWORD PTR [rcx-8]
- 001d5 66 0f 6e 09 movd xmm1, DWORD PTR [rcx]
-
-; 1284 : sampleData[i] = (int32_t)sample;
-
- 001d9 48 8d 49 10 lea rcx, QWORD PTR [rcx+16]
- 001dd f3 0f e6 c0 cvtdq2pd xmm0, xmm0
- 001e1 f3 0f e6 c9 cvtdq2pd xmm1, xmm1
- 001e5 f2 0f 59 c2 mulsd xmm0, xmm2
- 001e9 f2 0f 59 ca mulsd xmm1, xmm2
- 001ed f2 0f 2c c0 cvttsd2si eax, xmm0
- 001f1 66 0f 6e 41 ec movd xmm0, DWORD PTR [rcx-20]
- 001f6 89 41 e8 mov DWORD PTR [rcx-24], eax
- 001f9 f3 0f e6 c0 cvtdq2pd xmm0, xmm0
- 001fd f2 0f 59 c2 mulsd xmm0, xmm2
- 00201 f2 0f 2c c0 cvttsd2si eax, xmm0
- 00205 66 0f 6e 41 f4 movd xmm0, DWORD PTR [rcx-12]
- 0020a 89 41 ec mov DWORD PTR [rcx-20], eax
- 0020d f2 0f 2c c1 cvttsd2si eax, xmm1
- 00211 f3 0f e6 c0 cvtdq2pd xmm0, xmm0
- 00215 89 41 f0 mov DWORD PTR [rcx-16], eax
- 00218 f2 0f 59 c2 mulsd xmm0, xmm2
- 0021c f2 0f 2c c0 cvttsd2si eax, xmm0
- 00220 89 41 f4 mov DWORD PTR [rcx-12], eax
- 00223 48 83 ea 01 sub rdx, 1
- 00227 75 a7 jne SHORT $LL35@normalize3
-
-; 1281 : for (i = 0; i < sampleLength; i++)
-
- 00229 45 3b da cmp r11d, r10d
- 0022c 73 27 jae SHORT $LN33@normalize3
-$LC34@normalize3:
- 0022e 45 2b d3 sub r10d, r11d
- 00231 4a 8d 0c 83 lea rcx, QWORD PTR [rbx+r8*4]
- 00235 41 8b d2 mov edx, r10d
-$LC42@normalize3:
- 00238 66 0f 6e 01 movd xmm0, DWORD PTR [rcx]
- 0023c 48 8d 49 04 lea rcx, QWORD PTR [rcx+4]
-
-; 1282 : {
-; 1283 : sample = (int32_t)(sampleData[i] * dGain);
-
- 00240 f3 0f e6 c0 cvtdq2pd xmm0, xmm0
- 00244 f2 0f 59 c2 mulsd xmm0, xmm2
- 00248 f2 0f 2c c0 cvttsd2si eax, xmm0
-
-; 1284 : sampleData[i] = (int32_t)sample;
-
- 0024c 89 41 fc mov DWORD PTR [rcx-4], eax
- 0024f 48 83 ea 01 sub rdx, 1
- 00253 75 e3 jne SHORT $LC42@normalize3
-$LN33@normalize3:
-
-; 1285 : }
-; 1286 : }
-
- 00255 48 8b 5c 24 08 mov rbx, QWORD PTR [rsp+8]
- 0025a c3 ret 0
-normalize32bitSigned ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT normalize16bitSigned
-_TEXT SEGMENT
-sampleData$ = 8
-sampleLength$ = 16
-normalize16bitSigned PROC ; COMDAT
-
-; 1289 : {
-
-$LN37:
-
-; 1294 : for (i = 0; i < sampleLength; i++)
-
- 00000 85 d2 test edx, edx
- 00002 0f 84 8a 01 00
- 00 je $LN35@normalize1
- 00008 48 89 5c 24 08 mov QWORD PTR [rsp+8], rbx
- 0000d 48 89 7c 24 10 mov QWORD PTR [rsp+16], rdi
-
-; 1289 : {
-
- 00012 44 8b da mov r11d, edx
-
-; 1290 : uint32_t i;
-; 1291 : int32_t sample, sampleVolPeak, gain;
-; 1292 :
-; 1293 : sampleVolPeak = 0;
-
- 00015 33 db xor ebx, ebx
- 00017 44 8b cb mov r9d, ebx
- 0001a 41 8b d3 mov edx, r11d
- 0001d 48 8b f9 mov rdi, rcx
- 00020 4c 8b d1 mov r10, rcx
- 00023 0f 1f 40 00 66
- 0f 1f 84 00 00
- 00 00 00 npad 13
-$LL18@normalize1:
-
-; 1295 : {
-; 1296 : sample = ABS(sampleData[i]);
-
- 00030 41 0f bf 02 movsx eax, WORD PTR [r10]
- 00034 4d 8d 52 02 lea r10, QWORD PTR [r10+2]
- 00038 8b c8 mov ecx, eax
- 0003a f7 d9 neg ecx
- 0003c 66 85 c0 test ax, ax
- 0003f 0f 49 c8 cmovns ecx, eax
- 00042 44 3b c9 cmp r9d, ecx
- 00045 41 0f 4d c9 cmovge ecx, r9d
- 00049 44 8b c9 mov r9d, ecx
- 0004c 48 83 ea 01 sub rdx, 1
- 00050 75 de jne SHORT $LL18@normalize1
-
-; 1297 : if (sampleVolPeak < sample)
-; 1298 : sampleVolPeak = sample;
-; 1299 : }
-; 1300 :
-; 1301 : if (sampleVolPeak >= INT16_MAX)
-
- 00052 8d 41 ff lea eax, DWORD PTR [rcx-1]
- 00055 3d fd 7f 00 00 cmp eax, 32765 ; 00007ffdH
- 0005a 0f 87 28 01 00
- 00 ja $LN6@normalize1
-
-; 1302 : return; // sample is already normalized
-; 1303 :
-; 1304 : if (sampleVolPeak < 1)
-; 1305 : return;
-; 1306 :
-; 1307 : gain = (INT16_MAX * 65536) / sampleVolPeak;
-
- 00060 b8 00 00 ff 7f mov eax, 2147418112 ; 7fff0000H
- 00065 99 cdq
- 00066 41 f7 f9 idiv r9d
- 00069 44 8b c0 mov r8d, eax
- 0006c 66 0f 6e d8 movd xmm3, eax
- 00070 66 0f 70 db 00 pshufd xmm3, xmm3, 0
-
-; 1308 : for (i = 0; i < sampleLength; i++)
-
- 00075 41 83 fb 10 cmp r11d, 16
- 00079 0f 82 d7 00 00
- 00 jb $LN24@normalize1
-
-; 1302 : return; // sample is already normalized
-; 1303 :
-; 1304 : if (sampleVolPeak < 1)
-; 1305 : return;
-; 1306 :
-; 1307 : gain = (INT16_MAX * 65536) / sampleVolPeak;
-
- 0007f 83 3d 00 00 00
- 00 02 cmp DWORD PTR __isa_available, 2
- 00086 0f 8c ca 00 00
- 00 jl $LN24@normalize1
- 0008c b8 10 00 00 00 mov eax, 16
- 00091 41 8b d3 mov edx, r11d
- 00094 83 e2 f0 and edx, -16 ; fffffff0H
- 00097 66 0f 6e e0 movd xmm4, eax
- 0009b 44 8d 48 f8 lea r9d, QWORD PTR [rax-8]
- 0009f 90 npad 1
-$LL7@normalize1:
-
-; 1309 : sampleData[i] = (int16_t)((sampleData[i] * gain) >> 16);
-
- 000a0 f3 0f 7e 04 5f movq xmm0, QWORD PTR [rdi+rbx*2]
- 000a5 41 8d 41 fc lea eax, DWORD PTR [r9-4]
- 000a9 66 0f 38 23 c8 pmovsxwd xmm1, xmm0
- 000ae 66 0f 38 40 cb pmulld xmm1, xmm3
- 000b3 66 0f e2 cc psrad xmm1, xmm4
- 000b7 f2 0f 70 c1 d8 pshuflw xmm0, xmm1, 216 ; 000000d8H
- 000bc f3 0f 70 c8 d8 pshufhw xmm1, xmm0, 216 ; 000000d8H
- 000c1 66 0f 70 d1 d8 pshufd xmm2, xmm1, 216 ; 000000d8H
- 000c6 66 0f d6 14 5f movq QWORD PTR [rdi+rbx*2], xmm2
- 000cb 83 c3 10 add ebx, 16
- 000ce f3 0f 7e 04 47 movq xmm0, QWORD PTR [rdi+rax*2]
- 000d3 66 0f 38 23 c8 pmovsxwd xmm1, xmm0
- 000d8 66 0f 38 40 cb pmulld xmm1, xmm3
- 000dd 66 0f e2 cc psrad xmm1, xmm4
- 000e1 f2 0f 70 c1 d8 pshuflw xmm0, xmm1, 216 ; 000000d8H
- 000e6 f3 0f 70 c8 d8 pshufhw xmm1, xmm0, 216 ; 000000d8H
- 000eb 66 0f 70 d1 d8 pshufd xmm2, xmm1, 216 ; 000000d8H
- 000f0 66 0f d6 14 47 movq QWORD PTR [rdi+rax*2], xmm2
- 000f5 41 8b c1 mov eax, r9d
- 000f8 f3 0f 7e 04 47 movq xmm0, QWORD PTR [rdi+rax*2]
- 000fd 66 0f 38 23 c8 pmovsxwd xmm1, xmm0
- 00102 66 0f 38 40 cb pmulld xmm1, xmm3
- 00107 66 0f e2 cc psrad xmm1, xmm4
- 0010b f2 0f 70 c1 d8 pshuflw xmm0, xmm1, 216 ; 000000d8H
- 00110 f3 0f 70 c8 d8 pshufhw xmm1, xmm0, 216 ; 000000d8H
- 00115 66 0f 70 d1 d8 pshufd xmm2, xmm1, 216 ; 000000d8H
- 0011a 66 0f d6 14 47 movq QWORD PTR [rdi+rax*2], xmm2
- 0011f 41 8d 41 04 lea eax, DWORD PTR [r9+4]
- 00123 f3 0f 7e 04 47 movq xmm0, QWORD PTR [rdi+rax*2]
- 00128 41 83 c1 10 add r9d, 16
- 0012c 66 0f 38 23 c8 pmovsxwd xmm1, xmm0
- 00131 66 0f 38 40 cb pmulld xmm1, xmm3
- 00136 66 0f e2 cc psrad xmm1, xmm4
- 0013a f2 0f 70 c1 d8 pshuflw xmm0, xmm1, 216 ; 000000d8H
- 0013f f3 0f 70 c8 d8 pshufhw xmm1, xmm0, 216 ; 000000d8H
- 00144 66 0f 70 d1 d8 pshufd xmm2, xmm1, 216 ; 000000d8H
- 00149 66 0f d6 14 47 movq QWORD PTR [rdi+rax*2], xmm2
- 0014e 3b da cmp ebx, edx
- 00150 0f 82 4a ff ff
- ff jb $LL7@normalize1
-$LN24@normalize1:
-
-; 1308 : for (i = 0; i < sampleLength; i++)
-
- 00156 41 3b db cmp ebx, r11d
- 00159 73 2d jae SHORT $LN6@normalize1
- 0015b 44 2b db sub r11d, ebx
- 0015e 48 8d 04 5f lea rax, QWORD PTR [rdi+rbx*2]
- 00162 41 8b d3 mov edx, r11d
- 00165 66 66 66 0f 1f
- 84 00 00 00 00
- 00 npad 11
-$LL23@normalize1:
-
-; 1309 : sampleData[i] = (int16_t)((sampleData[i] * gain) >> 16);
-
- 00170 0f bf 08 movsx ecx, WORD PTR [rax]
- 00173 48 8d 40 02 lea rax, QWORD PTR [rax+2]
- 00177 41 0f af c8 imul ecx, r8d
- 0017b c1 f9 10 sar ecx, 16
- 0017e 66 89 48 fe mov WORD PTR [rax-2], cx
- 00182 48 83 ea 01 sub rdx, 1
- 00186 75 e8 jne SHORT $LL23@normalize1
-$LN6@normalize1:
-
-; 1310 : }
-
- 00188 48 8b 5c 24 08 mov rbx, QWORD PTR [rsp+8]
- 0018d 48 8b 7c 24 10 mov rdi, QWORD PTR [rsp+16]
-$LN35@normalize1:
- 00192 c3 ret 0
-normalize16bitSigned ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_math.h
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_math.h
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_math.h
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_math.h
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_math.h
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_math.h
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_math.h
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_math.h
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_math.h
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT normalize8bitFloatSigned
-_TEXT SEGMENT
-fSampleData$ = 16
-sampleLength$ = 24
-normalize8bitFloatSigned PROC ; COMDAT
-
-; 1313 : {
-
-$LN55:
- 00000 48 83 ec 08 sub rsp, 8
-
-; 1314 : uint32_t i;
-; 1315 : float fSample, fSampleVolPeak, fGain;
-; 1316 :
-; 1317 : fSampleVolPeak = 0.0f;
-
- 00004 45 33 c9 xor r9d, r9d
- 00007 4c 8b d1 mov r10, rcx
- 0000a 0f 57 e4 xorps xmm4, xmm4
- 0000d 0f 57 c9 xorps xmm1, xmm1
- 00010 45 8b c1 mov r8d, r9d
-
-; 1318 : for (i = 0; i < sampleLength; i++)
-
- 00013 85 d2 test edx, edx
- 00015 0f 84 28 02 00
- 00 je $LN32@normalize8
- 0001b 83 fa 08 cmp edx, 8
- 0001e 72 4c jb SHORT $LN18@normalize8
-
-; 1314 : uint32_t i;
-; 1315 : float fSample, fSampleVolPeak, fGain;
-; 1316 :
-; 1317 : fSampleVolPeak = 0.0f;
-
- 00020 0f 28 1d 00 00
- 00 00 movaps xmm3, XMMWORD PTR __xmm@7fffffff7fffffff7fffffff7fffffff
- 00027 44 8b da mov r11d, edx
- 0002a 41 83 e3 f8 and r11d, -8 ; fffffff8H
- 0002e 0f 57 d2 xorps xmm2, xmm2
-$LL4@normalize8:
-
-; 1320 : fSample = fabsf(fSampleData[i]);
-
- 00031 41 8b c0 mov eax, r8d
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_math.h
-
-; 672 : return (float)fabs(_X);
-
- 00034 0f 10 04 81 movups xmm0, XMMWORD PTR [rcx+rax*4]
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 1320 : fSample = fabsf(fSampleData[i]);
-
- 00038 41 8d 40 04 lea eax, DWORD PTR [r8+4]
- 0003c 41 83 c0 08 add r8d, 8
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_math.h
-
-; 672 : return (float)fabs(_X);
-
- 00040 0f 54 c3 andps xmm0, xmm3
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 1321 : if (fSampleVolPeak < fSample)
-
- 00043 0f 5f d0 maxps xmm2, xmm0
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_math.h
-
-; 672 : return (float)fabs(_X);
-
- 00046 0f 10 04 81 movups xmm0, XMMWORD PTR [rcx+rax*4]
- 0004a 0f 54 c3 andps xmm0, xmm3
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 1321 : if (fSampleVolPeak < fSample)
-
- 0004d 0f 5f c8 maxps xmm1, xmm0
- 00050 45 3b c3 cmp r8d, r11d
- 00053 72 dc jb SHORT $LL4@normalize8
-
-; 1314 : uint32_t i;
-; 1315 : float fSample, fSampleVolPeak, fGain;
-; 1316 :
-; 1317 : fSampleVolPeak = 0.0f;
-
- 00055 0f 5f d1 maxps xmm2, xmm1
- 00058 0f 28 ca movaps xmm1, xmm2
- 0005b 0f 12 ca movhlps xmm1, xmm2
- 0005e 0f 5f ca maxps xmm1, xmm2
- 00061 0f 28 c1 movaps xmm0, xmm1
- 00064 0f c6 c1 f5 shufps xmm0, xmm1, 245 ; 000000f5H
- 00068 f3 0f 5f c8 maxss xmm1, xmm0
-$LN18@normalize8:
-
-; 1318 : for (i = 0; i < sampleLength; i++)
-
- 0006c 44 3b c2 cmp r8d, edx
- 0006f 0f 83 a4 00 00
- 00 jae $LN29@normalize8
- 00075 f3 0f 10 1d 00
- 00 00 00 movss xmm3, DWORD PTR __xmm@7fffffff7fffffff7fffffff7fffffff
- 0007d 8b c2 mov eax, edx
- 0007f 41 2b c0 sub eax, r8d
- 00082 48 89 1c 24 mov QWORD PTR [rsp], rbx
- 00086 41 8b d8 mov ebx, r8d
- 00089 83 f8 04 cmp eax, 4
- 0008c 72 63 jb SHORT $LC30@normalize8
- 0008e 8b c2 mov eax, edx
- 00090 48 83 c1 08 add rcx, 8
- 00094 41 2b c0 sub eax, r8d
- 00097 83 e8 04 sub eax, 4
- 0009a c1 e8 02 shr eax, 2
- 0009d ff c0 inc eax
- 0009f 48 8d 0c 99 lea rcx, QWORD PTR [rcx+rbx*4]
- 000a3 44 8b d8 mov r11d, eax
- 000a6 45 8d 04 80 lea r8d, DWORD PTR [r8+rax*4]
- 000aa 48 8d 1c 83 lea rbx, QWORD PTR [rbx+rax*4]
- 000ae 66 90 npad 2
-$LL31@normalize8:
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_math.h
-
-; 672 : return (float)fabs(_X);
-
- 000b0 f3 0f 10 41 f8 movss xmm0, DWORD PTR [rcx-8]
- 000b5 f3 0f 10 11 movss xmm2, DWORD PTR [rcx]
- 000b9 0f 54 c3 andps xmm0, xmm3
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 1321 : if (fSampleVolPeak < fSample)
-
- 000bc f3 0f 5f c1 maxss xmm0, xmm1
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_math.h
-
-; 672 : return (float)fabs(_X);
-
- 000c0 f3 0f 10 49 fc movss xmm1, DWORD PTR [rcx-4]
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 1322 : fSampleVolPeak = fSample;
-
- 000c5 48 8d 49 10 lea rcx, QWORD PTR [rcx+16]
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_math.h
-
-; 672 : return (float)fabs(_X);
-
- 000c9 0f 54 cb andps xmm1, xmm3
- 000cc 0f 54 d3 andps xmm2, xmm3
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 1321 : if (fSampleVolPeak < fSample)
-
- 000cf f3 0f 5f c8 maxss xmm1, xmm0
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_math.h
-
-; 672 : return (float)fabs(_X);
-
- 000d3 f3 0f 10 41 f4 movss xmm0, DWORD PTR [rcx-12]
- 000d8 0f 54 c3 andps xmm0, xmm3
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 1321 : if (fSampleVolPeak < fSample)
-
- 000db f3 0f 5f d1 maxss xmm2, xmm1
- 000df f3 0f 5f c2 maxss xmm0, xmm2
-
-; 1322 : fSampleVolPeak = fSample;
-
- 000e3 0f 28 c8 movaps xmm1, xmm0
- 000e6 49 83 eb 01 sub r11, 1
- 000ea 75 c4 jne SHORT $LL31@normalize8
-
-; 1318 : for (i = 0; i < sampleLength; i++)
-
- 000ec 44 3b c2 cmp r8d, edx
- 000ef 73 24 jae SHORT $LN53@normalize8
-$LC30@normalize8:
- 000f1 8b c2 mov eax, edx
- 000f3 49 8d 0c 9a lea rcx, QWORD PTR [r10+rbx*4]
- 000f7 41 2b c0 sub eax, r8d
- 000fa 44 8b c0 mov r8d, eax
-$LC45@normalize8:
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_math.h
-
-; 672 : return (float)fabs(_X);
-
- 000fd f3 0f 10 01 movss xmm0, DWORD PTR [rcx]
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 1318 : for (i = 0; i < sampleLength; i++)
-
- 00101 48 8d 49 04 lea rcx, QWORD PTR [rcx+4]
-; File C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt\corecrt_math.h
-
-; 672 : return (float)fabs(_X);
-
- 00105 0f 54 c3 andps xmm0, xmm3
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-
-; 1321 : if (fSampleVolPeak < fSample)
-
- 00108 f3 0f 5f c1 maxss xmm0, xmm1
-
-; 1322 : fSampleVolPeak = fSample;
-
- 0010c 0f 28 c8 movaps xmm1, xmm0
- 0010f 49 83 e8 01 sub r8, 1
- 00113 75 e8 jne SHORT $LC45@normalize8
-$LN53@normalize8:
- 00115 48 8b 1c 24 mov rbx, QWORD PTR [rsp]
-$LN29@normalize8:
-
-; 1323 : }
-; 1324 :
-; 1325 : if (fSampleVolPeak <= 0.0f)
-
- 00119 0f 2f cc comiss xmm1, xmm4
- 0011c 0f 86 21 01 00
- 00 jbe $LN32@normalize8
-
-; 1326 : return;
-; 1327 :
-; 1328 : fGain = INT8_MAX / fSampleVolPeak;
-
- 00122 f3 0f 10 15 00
- 00 00 00 movss xmm2, DWORD PTR __real@42fe0000
- 0012a f3 0f 5e d1 divss xmm2, xmm1
- 0012e 0f 28 da movaps xmm3, xmm2
- 00131 0f c6 db 00 shufps xmm3, xmm3, 0
-
-; 1329 : for (i = 0; i < sampleLength; i++)
-
- 00135 83 fa 10 cmp edx, 16
- 00138 72 65 jb SHORT $LN20@normalize8
-
-; 1326 : return;
-; 1327 :
-; 1328 : fGain = INT8_MAX / fSampleVolPeak;
-
- 0013a 44 8b c2 mov r8d, edx
- 0013d 41 bb 08 00 00
- 00 mov r11d, 8
- 00143 41 83 e0 f0 and r8d, -16 ; fffffff0H
- 00147 66 0f 1f 84 00
- 00 00 00 00 npad 9
-$LL7@normalize8:
-
-; 1330 : fSampleData[i] *= fGain;
-
- 00150 43 0f 10 04 8a movups xmm0, XMMWORD PTR [r10+r9*4]
- 00155 41 8d 43 fc lea eax, DWORD PTR [r11-4]
- 00159 0f 28 cb movaps xmm1, xmm3
- 0015c 0f 59 c3 mulps xmm0, xmm3
- 0015f 43 0f 11 04 8a movups XMMWORD PTR [r10+r9*4], xmm0
- 00164 41 83 c1 10 add r9d, 16
- 00168 41 0f 10 04 82 movups xmm0, XMMWORD PTR [r10+rax*4]
- 0016d 0f 59 c8 mulps xmm1, xmm0
- 00170 41 0f 11 0c 82 movups XMMWORD PTR [r10+rax*4], xmm1
- 00175 41 8b c3 mov eax, r11d
- 00178 41 0f 10 04 82 movups xmm0, XMMWORD PTR [r10+rax*4]
- 0017d 0f 59 c3 mulps xmm0, xmm3
- 00180 41 0f 11 04 82 movups XMMWORD PTR [r10+rax*4], xmm0
- 00185 41 8d 43 04 lea eax, DWORD PTR [r11+4]
- 00189 41 83 c3 10 add r11d, 16
- 0018d 41 0f 10 04 82 movups xmm0, XMMWORD PTR [r10+rax*4]
- 00192 0f 59 c3 mulps xmm0, xmm3
- 00195 41 0f 11 04 82 movups XMMWORD PTR [r10+rax*4], xmm0
- 0019a 45 3b c8 cmp r9d, r8d
- 0019d 72 b1 jb SHORT $LL7@normalize8
-$LN20@normalize8:
-
-; 1329 : for (i = 0; i < sampleLength; i++)
-
- 0019f 44 3b ca cmp r9d, edx
- 001a2 0f 83 9b 00 00
- 00 jae $LN32@normalize8
- 001a8 8b c2 mov eax, edx
- 001aa 45 8b d9 mov r11d, r9d
- 001ad 41 2b c1 sub eax, r9d
- 001b0 83 f8 04 cmp eax, 4
- 001b3 72 6e jb SHORT $LC33@normalize8
- 001b5 8b c2 mov eax, edx
- 001b7 49 8d 4a 08 lea rcx, QWORD PTR [r10+8]
- 001bb 41 2b c1 sub eax, r9d
- 001be 4a 8d 0c 89 lea rcx, QWORD PTR [rcx+r9*4]
- 001c2 83 e8 04 sub eax, 4
- 001c5 c1 e8 02 shr eax, 2
- 001c8 ff c0 inc eax
- 001ca 44 8b c0 mov r8d, eax
- 001cd 45 8d 0c 81 lea r9d, DWORD PTR [r9+rax*4]
- 001d1 4d 8d 1c 83 lea r11, QWORD PTR [r11+rax*4]
- 001d5 66 66 66 0f 1f
- 84 00 00 00 00
- 00 npad 11
-$LL34@normalize8:
-
-; 1330 : fSampleData[i] *= fGain;
-
- 001e0 48 8d 49 10 lea rcx, QWORD PTR [rcx+16]
- 001e4 0f 28 c2 movaps xmm0, xmm2
- 001e7 f3 0f 59 41 e8 mulss xmm0, DWORD PTR [rcx-24]
- 001ec 0f 28 ca movaps xmm1, xmm2
- 001ef f3 0f 59 49 ec mulss xmm1, DWORD PTR [rcx-20]
- 001f4 f3 0f 11 41 e8 movss DWORD PTR [rcx-24], xmm0
- 001f9 0f 28 c2 movaps xmm0, xmm2
- 001fc f3 0f 59 41 f0 mulss xmm0, DWORD PTR [rcx-16]
- 00201 f3 0f 11 49 ec movss DWORD PTR [rcx-20], xmm1
- 00206 0f 28 ca movaps xmm1, xmm2
- 00209 f3 0f 59 49 f4 mulss xmm1, DWORD PTR [rcx-12]
- 0020e f3 0f 11 41 f0 movss DWORD PTR [rcx-16], xmm0
- 00213 f3 0f 11 49 f4 movss DWORD PTR [rcx-12], xmm1
- 00218 49 83 e8 01 sub r8, 1
- 0021c 75 c2 jne SHORT $LL34@normalize8
-
-; 1329 : for (i = 0; i < sampleLength; i++)
-
- 0021e 44 3b ca cmp r9d, edx
- 00221 73 20 jae SHORT $LN32@normalize8
-$LC33@normalize8:
- 00223 41 2b d1 sub edx, r9d
- 00226 4b 8d 04 9a lea rax, QWORD PTR [r10+r11*4]
- 0022a 8b ca mov ecx, edx
-$LC48@normalize8:
- 0022c 48 8d 40 04 lea rax, QWORD PTR [rax+4]
-
-; 1330 : fSampleData[i] *= fGain;
-
- 00230 0f 28 c2 movaps xmm0, xmm2
- 00233 f3 0f 59 40 fc mulss xmm0, DWORD PTR [rax-4]
- 00238 f3 0f 11 40 fc movss DWORD PTR [rax-4], xmm0
- 0023d 48 83 e9 01 sub rcx, 1
- 00241 75 e9 jne SHORT $LC48@normalize8
-$LN32@normalize8:
-
-; 1331 : }
-
- 00243 48 83 c4 08 add rsp, 8
- 00247 c3 ret 0
-normalize8bitFloatSigned ENDP
-_TEXT ENDS
-; Function compile flags: /Ogtpy
-; File C:\Programming\pt2-clone\src\pt2_audio.c
-; COMDAT normalize8bitDoubleSigned
-_TEXT SEGMENT
-dSampleData$ = 16
-sampleLength$ = 24
-normalize8bitDoubleSigned PROC ; COMDAT
-
-; 1334 : {
-
-$LN53:
- 00000 48 83 ec 08 sub rsp, 8
-
-; 1335 : uint32_t i;
-; 1336 : double dSample, dSampleVolPeak, dGain;
-; 1337 :
-; 1338 : dSampleVolPeak = 0.0;
-
- 00004 45 33 c9 xor r9d, r9d
- 00007 4c 8b d1 mov r10, rcx
- 0000a 0f 57 e4 xorps xmm4, xmm4
- 0000d 0f 57 c9 xorps xmm1, xmm1
- 00010 45 8b c1 mov r8d, r9d
-
-; 1339 : for (i = 0; i < sampleLength; i++)
-
- 00013 85 d2 test edx, edx
- 00015 0f 84 18 02 00
- 00 je $LN30@normalize8
- 0001b 0f 28 1d 00 00
- 00 00 movaps xmm3, XMMWORD PTR __xmm@7fffffffffffffff7fffffffffffffff
- 00022 83 fa 04 cmp edx, 4
- 00025 72 3f jb SHORT $LN16@normalize8
-
-; 1335 : uint32_t i;
-; 1336 : double dSample, dSampleVolPeak, dGain;
-; 1337 :
-; 1338 : dSampleVolPeak = 0.0;
-
- 00027 44 8b da mov r11d, edx
- 0002a 0f 57 d2 xorps xmm2, xmm2
- 0002d 41 83 e3 fc and r11d, -4 ; fffffffcH
-$LL4@normalize8:
-
-; 1340 : {
-; 1341 : dSample = fabs(dSampleData[i]);
-
- 00031 41 8b c0 mov eax, r8d
- 00034 0f 10 04 c1 movups xmm0, XMMWORD PTR [rcx+rax*8]
- 00038 41 8d 40 02 lea eax, DWORD PTR [r8+2]
- 0003c 41 83 c0 04 add r8d, 4
- 00040 0f 54 c3 andps xmm0, xmm3
-
-; 1342 : if (dSampleVolPeak < dSample)
-
- 00043 66 0f 5f c8 maxpd xmm1, xmm0
- 00047 0f 10 04 c1 movups xmm0, XMMWORD PTR [rcx+rax*8]
- 0004b 0f 54 c3 andps xmm0, xmm3
- 0004e 66 0f 5f d0 maxpd xmm2, xmm0
- 00052 45 3b c3 cmp r8d, r11d
- 00055 72 da jb SHORT $LL4@normalize8
-
-; 1335 : uint32_t i;
-; 1336 : double dSample, dSampleVolPeak, dGain;
-; 1337 :
-; 1338 : dSampleVolPeak = 0.0;
-
- 00057 66 0f 5f ca maxpd xmm1, xmm2
- 0005b 0f 28 c1 movaps xmm0, xmm1
- 0005e 66 0f 15 c1 unpckhpd xmm0, xmm1
- 00062 f2 0f 5f c8 maxsd xmm1, xmm0
-$LN16@normalize8:
-
-; 1339 : for (i = 0; i < sampleLength; i++)
-
- 00066 44 3b c2 cmp r8d, edx
- 00069 0f 83 97 00 00
- 00 jae $LN27@normalize8
- 0006f 8b c2 mov eax, edx
- 00071 48 89 1c 24 mov QWORD PTR [rsp], rbx
- 00075 41 2b c0 sub eax, r8d
- 00078 41 8b d8 mov ebx, r8d
- 0007b 83 f8 04 cmp eax, 4
- 0007e 72 5e jb SHORT $LC28@normalize8
- 00080 8b c2 mov eax, edx
- 00082 48 83 c1 10 add rcx, 16
- 00086 41 2b c0 sub eax, r8d
- 00089 83 e8 04 sub eax, 4
- 0008c c1 e8 02 shr eax, 2
- 0008f ff c0 inc eax
- 00091 48 8d 0c d9 lea rcx, QWORD PTR [rcx+rbx*8]
- 00095 44 8b d8 mov r11d, eax
- 00098 45 8d 04 80 lea r8d, DWORD PTR [r8+rax*4]
- 0009c 48 8d 1c 83 lea rbx, QWORD PTR [rbx+rax*4]
-$LL29@normalize8:
-
-; 1340 : {
-; 1341 : dSample = fabs(dSampleData[i]);
-
- 000a0 f2 0f 10 41 f0 movsd xmm0, QWORD PTR [rcx-16]
- 000a5 f2 0f 10 11 movsd xmm2, QWORD PTR [rcx]
- 000a9 0f 54 c3 andps xmm0, xmm3
-
-; 1342 : if (dSampleVolPeak < dSample)
-
- 000ac f2 0f 5f c1 maxsd xmm0, xmm1
- 000b0 f2 0f 10 49 f8 movsd xmm1, QWORD PTR [rcx-8]
-
-; 1343 : dSampleVolPeak = dSample;
-
- 000b5 48 8d 49 20 lea rcx, QWORD PTR [rcx+32]
- 000b9 0f 54 cb andps xmm1, xmm3
- 000bc 0f 54 d3 andps xmm2, xmm3
- 000bf f2 0f 5f c8 maxsd xmm1, xmm0
- 000c3 f2 0f 5f d1 maxsd xmm2, xmm1
- 000c7 f2 0f 10 49 e8 movsd xmm1, QWORD PTR [rcx-24]
- 000cc 0f 54 cb andps xmm1, xmm3
- 000cf f2 0f 5f ca maxsd xmm1, xmm2
- 000d3 49 83 eb 01 sub r11, 1
- 000d7 75 c7 jne SHORT $LL29@normalize8
-
-; 1339 : for (i = 0; i < sampleLength; i++)
-
- 000d9 44 3b c2 cmp r8d, edx
- 000dc 73 24 jae SHORT $LN51@normalize8
-$LC28@normalize8:
- 000de 8b c2 mov eax, edx
- 000e0 49 8d 0c da lea rcx, QWORD PTR [r10+rbx*8]
- 000e4 41 2b c0 sub eax, r8d
- 000e7 44 8b c0 mov r8d, eax
-$LC43@normalize8:
-
-; 1340 : {
-; 1341 : dSample = fabs(dSampleData[i]);
-
- 000ea f2 0f 10 01 movsd xmm0, QWORD PTR [rcx]
- 000ee 48 8d 49 08 lea rcx, QWORD PTR [rcx+8]
- 000f2 0f 54 c3 andps xmm0, xmm3
-
-; 1342 : if (dSampleVolPeak < dSample)
-
- 000f5 f2 0f 5f c1 maxsd xmm0, xmm1
-
-; 1343 : dSampleVolPeak = dSample;
-
- 000f9 0f 28 c8 movaps xmm1, xmm0
- 000fc 49 83 e8 01 sub r8, 1
- 00100 75 e8 jne SHORT $LC43@normalize8
-$LN51@normalize8:
- 00102 48 8b 1c 24 mov rbx, QWORD PTR [rsp]
-$LN27@normalize8:
-
-; 1344 : }
-; 1345 :
-; 1346 : if (dSampleVolPeak <= 0.0)
-
- 00106 66 0f 2f cc comisd xmm1, xmm4
- 0010a 0f 86 23 01 00
- 00 jbe $LN30@normalize8
-
-; 1347 : return;
-; 1348 :
-; 1349 : dGain = INT8_MAX / dSampleVolPeak;
-
- 00110 f2 0f 10 15 00
- 00 00 00 movsd xmm2, QWORD PTR __real@405fc00000000000
- 00118 f2 0f 5e d1 divsd xmm2, xmm1
- 0011c 0f 28 da movaps xmm3, xmm2
- 0011f 66 0f 14 db unpcklpd xmm3, xmm3
-
-; 1350 : for (i = 0; i < sampleLength; i++)
-
- 00123 83 fa 08 cmp edx, 8
- 00126 72 6b jb SHORT $LN18@normalize8
-
-; 1347 : return;
-; 1348 :
-; 1349 : dGain = INT8_MAX / dSampleVolPeak;
-
- 00128 44 8b c2 mov r8d, edx
- 0012b 41 bb 04 00 00
- 00 mov r11d, 4
- 00131 41 83 e0 f8 and r8d, -8 ; fffffff8H
- 00135 66 66 66 0f 1f
- 84 00 00 00 00
- 00 npad 11
-$LL7@normalize8:
-
-; 1351 : dSampleData[i] *= dGain;
-
- 00140 43 0f 10 04 ca movups xmm0, XMMWORD PTR [r10+r9*8]
- 00145 41 8d 43 fe lea eax, DWORD PTR [r11-2]
- 00149 0f 28 cb movaps xmm1, xmm3
- 0014c 66 0f 59 c3 mulpd xmm0, xmm3
- 00150 43 0f 11 04 ca movups XMMWORD PTR [r10+r9*8], xmm0
- 00155 41 83 c1 08 add r9d, 8
- 00159 41 0f 10 04 c2 movups xmm0, XMMWORD PTR [r10+rax*8]
- 0015e 66 0f 59 c3 mulpd xmm0, xmm3
- 00162 41 0f 11 04 c2 movups XMMWORD PTR [r10+rax*8], xmm0
- 00167 41 8b c3 mov eax, r11d
- 0016a 41 0f 10 04 c2 movups xmm0, XMMWORD PTR [r10+rax*8]
- 0016f 66 0f 59 c8 mulpd xmm1, xmm0
- 00173 41 0f 11 0c c2 movups XMMWORD PTR [r10+rax*8], xmm1
- 00178 41 8d 43 02 lea eax, DWORD PTR [r11+2]
- 0017c 41 83 c3 08 add r11d, 8
- 00180 41 0f 10 04 c2 movups xmm0, XMMWORD PTR [r10+rax*8]
- 00185 66 0f 59 c3 mulpd xmm0, xmm3
- 00189 41 0f 11 04 c2 movups XMMWORD PTR [r10+rax*8], xmm0
- 0018e 45 3b c8 cmp r9d, r8d
- 00191 72 ad jb SHORT $LL7@normalize8
-$LN18@normalize8:
-
-; 1350 : for (i = 0; i < sampleLength; i++)
-
- 00193 44 3b ca cmp r9d, edx
- 00196 0f 83 97 00 00
- 00 jae $LN30@normalize8
- 0019c 8b c2 mov eax, edx
- 0019e 45 8b d9 mov r11d, r9d
- 001a1 41 2b c1 sub eax, r9d
- 001a4 83 f8 04 cmp eax, 4
- 001a7 72 6a jb SHORT $LC31@normalize8
- 001a9 8b c2 mov eax, edx
- 001ab 49 8d 4a 10 lea rcx, QWORD PTR [r10+16]
- 001af 41 2b c1 sub eax, r9d
- 001b2 4a 8d 0c c9 lea rcx, QWORD PTR [rcx+r9*8]
- 001b6 83 e8 04 sub eax, 4
- 001b9 c1 e8 02 shr eax, 2
- 001bc ff c0 inc eax
- 001be 44 8b c0 mov r8d, eax
- 001c1 45 8d 0c 81 lea r9d, DWORD PTR [r9+rax*4]
- 001c5 4d 8d 1c 83 lea r11, QWORD PTR [r11+rax*4]
- 001c9 0f 1f 80 00 00
- 00 00 npad 7
-$LL32@normalize8:
-
-; 1351 : dSampleData[i] *= dGain;
-
- 001d0 48 8d 49 20 lea rcx, QWORD PTR [rcx+32]
- 001d4 0f 28 c2 movaps xmm0, xmm2
- 001d7 f2 0f 59 41 d0 mulsd xmm0, QWORD PTR [rcx-48]
- 001dc 0f 28 ca movaps xmm1, xmm2
- 001df f2 0f 59 49 d8 mulsd xmm1, QWORD PTR [rcx-40]
- 001e4 f2 0f 11 41 d0 movsd QWORD PTR [rcx-48], xmm0
- 001e9 0f 28 c2 movaps xmm0, xmm2
- 001ec f2 0f 59 41 e0 mulsd xmm0, QWORD PTR [rcx-32]
- 001f1 f2 0f 11 49 d8 movsd QWORD PTR [rcx-40], xmm1
- 001f6 0f 28 ca movaps xmm1, xmm2
- 001f9 f2 0f 59 49 e8 mulsd xmm1, QWORD PTR [rcx-24]
- 001fe f2 0f 11 41 e0 movsd QWORD PTR [rcx-32], xmm0
- 00203 f2 0f 11 49 e8 movsd QWORD PTR [rcx-24], xmm1
- 00208 49 83 e8 01 sub r8, 1
- 0020c 75 c2 jne SHORT $LL32@normalize8
-
-; 1350 : for (i = 0; i < sampleLength; i++)
-
- 0020e 44 3b ca cmp r9d, edx
- 00211 73 20 jae SHORT $LN30@normalize8
-$LC31@normalize8:
- 00213 41 2b d1 sub edx, r9d
- 00216 4b 8d 04 da lea rax, QWORD PTR [r10+r11*8]
- 0021a 8b ca mov ecx, edx
-$LC46@normalize8:
- 0021c 48 8d 40 08 lea rax, QWORD PTR [rax+8]
-
-; 1351 : dSampleData[i] *= dGain;
-
- 00220 0f 28 c2 movaps xmm0, xmm2
- 00223 f2 0f 59 40 f8 mulsd xmm0, QWORD PTR [rax-8]
- 00228 f2 0f 11 40 f8 movsd QWORD PTR [rax-8], xmm0
- 0022d 48 83 e9 01 sub rcx, 1
- 00231 75 e9 jne SHORT $LC46@normalize8
-$LN30@normalize8:
-
-; 1352 : }
-
- 00233 48 83 c4 08 add rsp, 8
- 00237 c3 ret 0
-normalize8bitDoubleSigned ENDP
-_TEXT ENDS
-END
--- a/vs2019_project/pt2-clone/pt2-clone.vcxproj
+++ b/vs2019_project/pt2-clone/pt2-clone.vcxproj
@@ -38,12 +38,10 @@
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
- <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
- <UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v142</PlatformToolset>
<CharacterSet>MultiByte</CharacterSet>
</PropertyGroup>
@@ -321,7 +319,6 @@
<ClCompile Include="..\..\src\gfx\pt2_gfx_yes_no_dialog.c" />
<ClCompile Include="..\..\src\pt2_audio.c">
<EnableEnhancedInstructionSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">StreamingSIMDExtensions2</EnableEnhancedInstructionSet>
- <AssemblerOutput Condition="'$(Configuration)|$(Platform)'=='Release|x64'">All</AssemblerOutput>
</ClCompile>
<ClCompile Include="..\..\src\pt2_blep.c" />
<ClCompile Include="..\..\src\pt2_config.c" />