0,0 → 1,278 |
; 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 |