kolibrios/programs/develop/libraries/ufmod/nasm.asm

279 lines
7.5 KiB
NASM
Raw Normal View History

; 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