279 lines
7.5 KiB
NASM
279 lines
7.5 KiB
NASM
|
; NASM.ASM
|
||
|
; --------
|
||
|
; uFMOD public source code release. Provided as-is.
|
||
|
|
||
|
; *** This stub allows compiling uFMOD sources using NASM.
|
||
|
; Everything documented in fasm stub!
|
||
|
|
||
|
; %error directive in NASM causes multiple prompts to appear due to
|
||
|
; multiple passes :( So, we'd better avoid using %error.
|
||
|
|
||
|
ifdef f44100
|
||
|
FSOUND_MixRate equ 44100
|
||
|
FREQ_40HZ_p equ 1DB8Bh
|
||
|
FREQ_40HZ_f equ 3B7160h
|
||
|
PCM_format equ 3
|
||
|
else
|
||
|
ifdef f22050
|
||
|
FSOUND_MixRate equ 22050
|
||
|
FREQ_40HZ_p equ 3B716h
|
||
|
FREQ_40HZ_f equ 76E2C0h
|
||
|
PCM_format equ 9
|
||
|
else
|
||
|
FSOUND_MixRate equ 48000
|
||
|
FREQ_40HZ_p equ 1B4E8h
|
||
|
FREQ_40HZ_f equ 369D00h
|
||
|
PCM_format equ 1
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
ifdef NONE
|
||
|
RAMP_NONE equ 1
|
||
|
RAMP_WEAK equ 0
|
||
|
RAMP_STRONG equ 0
|
||
|
else
|
||
|
ifdef WEAK
|
||
|
RAMP_NONE equ 0
|
||
|
RAMP_WEAK equ 1
|
||
|
RAMP_STRONG equ 0
|
||
|
else
|
||
|
RAMP_NONE equ 0
|
||
|
RAMP_WEAK equ 0
|
||
|
RAMP_STRONG equ 1
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
UCODE equ 0
|
||
|
|
||
|
ifdef NODEBUG
|
||
|
DEBUG equ 0
|
||
|
else
|
||
|
DEBUG equ 1
|
||
|
endif
|
||
|
|
||
|
ifdef UNSAFE
|
||
|
CHK4VALIDITY equ 0
|
||
|
AC97SND_ON equ 0
|
||
|
else
|
||
|
CHK4VALIDITY equ 1
|
||
|
ifdef AC97SND
|
||
|
AC97SND_ON equ 1
|
||
|
else
|
||
|
AC97SND_ON equ 0
|
||
|
endif
|
||
|
endif
|
||
|
|
||
|
ifndef NOLINKER
|
||
|
%include "eff.inc"
|
||
|
|
||
|
[segment .text align=4]
|
||
|
endif
|
||
|
|
||
|
STRUC FSOUND_SAMPLE
|
||
|
FSOUND_SAMPLE._length resd 1
|
||
|
FSOUND_SAMPLE.loopstart resd 1
|
||
|
FSOUND_SAMPLE.looplen resd 1
|
||
|
FSOUND_SAMPLE.defvol resb 1
|
||
|
FSOUND_SAMPLE.finetune resb 1
|
||
|
FSOUND_SAMPLE.bytes resb 1
|
||
|
FSOUND_SAMPLE.defpan resb 1
|
||
|
FSOUND_SAMPLE.relative resb 1
|
||
|
FSOUND_SAMPLE.Resved resb 1
|
||
|
FSOUND_SAMPLE.loopmode resb 1
|
||
|
FSOUND_SAMPLE._align resb 1
|
||
|
FSOUND_SAMPLE.buff resb 2
|
||
|
ENDSTRUC
|
||
|
|
||
|
STRUC FSOUND_CHANNEL
|
||
|
FSOUND_CHANNEL.actualvolume resd 1
|
||
|
FSOUND_CHANNEL.actualpan resd 1
|
||
|
FSOUND_CHANNEL.fsampleoffset resd 1
|
||
|
FSOUND_CHANNEL.leftvolume resd 1
|
||
|
FSOUND_CHANNEL.rightvolume resd 1
|
||
|
FSOUND_CHANNEL.mixpos resd 1
|
||
|
FSOUND_CHANNEL.speedlo resd 1
|
||
|
FSOUND_CHANNEL.speedhi resd 1
|
||
|
FSOUND_CHANNEL.ramp_lefttarget resw 1
|
||
|
FSOUND_CHANNEL.ramp_righttarget resw 1
|
||
|
FSOUND_CHANNEL.ramp_leftspeed resd 1
|
||
|
FSOUND_CHANNEL.ramp_rightspeed resd 1
|
||
|
FSOUND_CHANNEL.fsptr resd 1
|
||
|
FSOUND_CHANNEL.mixposlo resd 1
|
||
|
FSOUND_CHANNEL.ramp_leftvolume resd 1
|
||
|
FSOUND_CHANNEL.ramp_rightvolume resd 1
|
||
|
FSOUND_CHANNEL.ramp_count resw 1
|
||
|
FSOUND_CHANNEL.speeddir resb 2
|
||
|
ENDSTRUC
|
||
|
|
||
|
STRUC FMUSIC_NOTE
|
||
|
FMUSIC_NOTE.unote resb 1
|
||
|
FMUSIC_NOTE.number resb 1
|
||
|
FMUSIC_NOTE.uvolume resb 1
|
||
|
FMUSIC_NOTE.effect resb 1
|
||
|
FMUSIC_NOTE.eparam resb 1
|
||
|
ENDSTRUC
|
||
|
|
||
|
STRUC FMUSIC_PATTERN
|
||
|
FMUSIC_PATTERN.rows resw 1
|
||
|
FMUSIC_PATTERN.patternsize resw 1
|
||
|
FMUSIC_PATTERN.data resd 1
|
||
|
ENDSTRUC
|
||
|
|
||
|
STRUC FMUSIC_INSTRUMENT
|
||
|
FMUSIC_INSTRUMENT.sample resd 16
|
||
|
FMUSIC_INSTRUMENT.keymap resb 96
|
||
|
FMUSIC_INSTRUMENT.VOLPoints resw 24
|
||
|
FMUSIC_INSTRUMENT.PANPoints resw 24
|
||
|
FMUSIC_INSTRUMENT.VOLnumpoints resb 1
|
||
|
FMUSIC_INSTRUMENT.PANnumpoints resb 1
|
||
|
FMUSIC_INSTRUMENT.VOLsustain resb 1
|
||
|
FMUSIC_INSTRUMENT.VOLLoopStart resb 1
|
||
|
FMUSIC_INSTRUMENT.VOLLoopEnd resb 1
|
||
|
FMUSIC_INSTRUMENT.PANsustain resb 1
|
||
|
FMUSIC_INSTRUMENT.PANLoopStart resb 1
|
||
|
FMUSIC_INSTRUMENT.PANLoopEnd resb 1
|
||
|
FMUSIC_INSTRUMENT.VOLtype resb 1
|
||
|
FMUSIC_INSTRUMENT.PANtype resb 1
|
||
|
FMUSIC_INSTRUMENT.VIBtype resb 1
|
||
|
FMUSIC_INSTRUMENT.VIBsweep resb 1
|
||
|
FMUSIC_INSTRUMENT.iVIBdepth resb 1
|
||
|
FMUSIC_INSTRUMENT.VIBrate resb 1
|
||
|
FMUSIC_INSTRUMENT.VOLfade resw 1
|
||
|
ENDSTRUC
|
||
|
|
||
|
STRUC FMUSIC_CHANNEL
|
||
|
FMUSIC_CHANNEL.note resb 1
|
||
|
FMUSIC_CHANNEL.samp resb 1
|
||
|
FMUSIC_CHANNEL.notectrl resb 1
|
||
|
FMUSIC_CHANNEL.inst resb 1
|
||
|
FMUSIC_CHANNEL.cptr resd 1
|
||
|
FMUSIC_CHANNEL.freq resd 1
|
||
|
FMUSIC_CHANNEL.volume resd 1
|
||
|
FMUSIC_CHANNEL.voldelta resd 1
|
||
|
FMUSIC_CHANNEL.freqdelta resd 1
|
||
|
FMUSIC_CHANNEL.pan resd 1
|
||
|
FMUSIC_CHANNEL.envvoltick resd 1
|
||
|
FMUSIC_CHANNEL.envvolpos resd 1
|
||
|
FMUSIC_CHANNEL.envvoldelta resd 1
|
||
|
FMUSIC_CHANNEL.envpantick resd 1
|
||
|
FMUSIC_CHANNEL.envpanpos resd 1
|
||
|
FMUSIC_CHANNEL.envpandelta resd 1
|
||
|
FMUSIC_CHANNEL.ivibsweeppos resd 1
|
||
|
FMUSIC_CHANNEL.ivibpos resd 1
|
||
|
FMUSIC_CHANNEL.keyoff resb 2
|
||
|
FMUSIC_CHANNEL.envvolstopped resb 1
|
||
|
FMUSIC_CHANNEL.envpanstopped resb 1
|
||
|
FMUSIC_CHANNEL.envvolfrac resd 1
|
||
|
FMUSIC_CHANNEL.envvol resd 1
|
||
|
FMUSIC_CHANNEL.fadeoutvol resd 1
|
||
|
FMUSIC_CHANNEL.envpanfrac resd 1
|
||
|
FMUSIC_CHANNEL.envpan resd 1
|
||
|
FMUSIC_CHANNEL.period resd 1
|
||
|
FMUSIC_CHANNEL.sampleoffset resd 1
|
||
|
FMUSIC_CHANNEL.portatarget resd 1
|
||
|
FMUSIC_CHANNEL.patloopno resb 4
|
||
|
FMUSIC_CHANNEL.patlooprow resd 1
|
||
|
FMUSIC_CHANNEL.realnote resb 1
|
||
|
FMUSIC_CHANNEL.recenteffect resb 1
|
||
|
FMUSIC_CHANNEL.portaupdown resb 2
|
||
|
FMUSIC_CHANNEL.xtraportadown resb 1
|
||
|
FMUSIC_CHANNEL.xtraportaup resb 1
|
||
|
FMUSIC_CHANNEL.volslide resb 1
|
||
|
FMUSIC_CHANNEL.panslide resb 1
|
||
|
FMUSIC_CHANNEL.retrigx resb 1
|
||
|
FMUSIC_CHANNEL.retrigy resb 1
|
||
|
FMUSIC_CHANNEL.portaspeed resb 1
|
||
|
FMUSIC_CHANNEL.vibpos resb 1
|
||
|
FMUSIC_CHANNEL.vibspeed resb 1
|
||
|
FMUSIC_CHANNEL.vibdepth resb 1
|
||
|
FMUSIC_CHANNEL.tremolopos resb 1
|
||
|
FMUSIC_CHANNEL.tremolospeed resb 1
|
||
|
FMUSIC_CHANNEL.tremolodepth resb 1
|
||
|
FMUSIC_CHANNEL.tremorpos resb 1
|
||
|
FMUSIC_CHANNEL.tremoron resb 1
|
||
|
FMUSIC_CHANNEL.tremoroff resb 1
|
||
|
FMUSIC_CHANNEL.wavecontrol resb 1
|
||
|
FMUSIC_CHANNEL.finevslup resb 1
|
||
|
FMUSIC_CHANNEL.fineportaup resb 1
|
||
|
FMUSIC_CHANNEL.fineportadown resb 1
|
||
|
ENDSTRUC
|
||
|
|
||
|
STRUC FMUSIC_MODULE
|
||
|
FMUSIC_MODULE.pattern resd 1
|
||
|
FMUSIC_MODULE.instrument resd 1
|
||
|
FMUSIC_MODULE.mixer_samplesleft resd 1
|
||
|
FMUSIC_MODULE.globalvolume resd 1
|
||
|
FMUSIC_MODULE.tick resd 1
|
||
|
FMUSIC_MODULE.speed resd 1
|
||
|
FMUSIC_MODULE.order resd 1
|
||
|
FMUSIC_MODULE.row resd 1
|
||
|
FMUSIC_MODULE.patterndelay resd 1
|
||
|
FMUSIC_MODULE.nextorder resd 1
|
||
|
FMUSIC_MODULE.nextrow resd 1
|
||
|
FMUSIC_MODULE.unused1 resd 1
|
||
|
FMUSIC_MODULE.numchannels resd 1
|
||
|
FMUSIC_MODULE.Channels resd 1
|
||
|
FMUSIC_MODULE.uFMOD_Ch resd 1
|
||
|
FMUSIC_MODULE.mixer_samplespertick resd 1
|
||
|
FMUSIC_MODULE.numorders resw 1
|
||
|
FMUSIC_MODULE.restart resw 1
|
||
|
FMUSIC_MODULE.numchannels_xm resb 1
|
||
|
FMUSIC_MODULE.globalvsl resb 1
|
||
|
FMUSIC_MODULE.numpatternsmem resw 1
|
||
|
FMUSIC_MODULE.numinsts resw 1
|
||
|
FMUSIC_MODULE.flags resw 1
|
||
|
FMUSIC_MODULE.defaultspeed resw 1
|
||
|
FMUSIC_MODULE.defaultbpm resw 1
|
||
|
FMUSIC_MODULE.orderlist resb 256
|
||
|
ENDSTRUC
|
||
|
|
||
|
%macro PUBLIC 1
|
||
|
ifndef NOLINKER
|
||
|
GLOBAL %1
|
||
|
endif
|
||
|
%endmacro
|
||
|
%define OFFSET
|
||
|
%define PTR
|
||
|
|
||
|
include "ufmod.asm"
|
||
|
include "core.asm"
|
||
|
|
||
|
ifdef NOLINKER
|
||
|
uFMOD_IMG_END: ; End of uFMOD's code. BSS follows.
|
||
|
align 16
|
||
|
[segment .bss]
|
||
|
else
|
||
|
[segment .bss align=16]
|
||
|
endif
|
||
|
|
||
|
_mod resb FMUSIC_MODULE_size
|
||
|
mmt resd 3
|
||
|
ufmod_heap resd 2
|
||
|
if AC97SND_ON
|
||
|
extern hSound
|
||
|
resd 1
|
||
|
else
|
||
|
hSound resd 1
|
||
|
endif
|
||
|
hBuff resd 1
|
||
|
SW_Exit resd 1
|
||
|
MixBuf resb FSOUND_BlockSize*8
|
||
|
ufmod_noloop resb 1
|
||
|
ufmod_pause_ resb 1
|
||
|
mix_endflag resb 2
|
||
|
mmf resd 4
|
||
|
ufmod_vol resd 1
|
||
|
uFMOD_fopen resd 1
|
||
|
uFMOD_fread resd 1
|
||
|
file_struct resd 7
|
||
|
cache_offset resd 1
|
||
|
if INFO_API_ON
|
||
|
time_ms resd 1
|
||
|
L_vol resw 1
|
||
|
R_vol resw 1
|
||
|
s_row resw 1
|
||
|
s_order resw 1
|
||
|
szTtl resb 24
|
||
|
endif
|
||
|
DummySamp resb FSOUND_SAMPLE_size
|