Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. ; NASM.ASM
  2. ; --------
  3. ; uFMOD public source code release. Provided as-is.
  4.  
  5. ; *** This stub allows compiling uFMOD sources using NASM.
  6. ; Everything documented in fasm stub!
  7.  
  8. ; %error directive in NASM causes multiple prompts to appear due to
  9. ; multiple passes :( So, we'd better avoid using %error.
  10.  
  11. ifdef f44100
  12.         FSOUND_MixRate equ 44100
  13.         FREQ_40HZ_p    equ 1DB8Bh
  14.         FREQ_40HZ_f    equ 3B7160h
  15.         PCM_format     equ 3
  16. else
  17.         ifdef f22050
  18.                 FSOUND_MixRate equ 22050
  19.                 FREQ_40HZ_p    equ 3B716h
  20.                 FREQ_40HZ_f    equ 76E2C0h
  21.                 PCM_format     equ 9
  22.         else
  23.                 FSOUND_MixRate equ 48000
  24.                 FREQ_40HZ_p    equ 1B4E8h
  25.                 FREQ_40HZ_f    equ 369D00h
  26.                 PCM_format     equ 1
  27.         endif
  28. endif
  29.  
  30. ifdef NONE
  31.         RAMP_NONE   equ 1
  32.         RAMP_WEAK   equ 0
  33.         RAMP_STRONG equ 0
  34. else
  35.         ifdef WEAK
  36.                 RAMP_NONE   equ 0
  37.                 RAMP_WEAK   equ 1
  38.                 RAMP_STRONG equ 0
  39.         else
  40.                 RAMP_NONE   equ 0
  41.                 RAMP_WEAK   equ 0
  42.                 RAMP_STRONG equ 1
  43.         endif
  44. endif
  45.  
  46. UCODE equ 0
  47.  
  48. ifdef NODEBUG
  49.         DEBUG equ 0
  50. else
  51.         DEBUG equ 1
  52. endif
  53.  
  54. ifdef UNSAFE
  55.         CHK4VALIDITY equ 0
  56.         AC97SND_ON   equ 0
  57. else
  58.         CHK4VALIDITY equ 1
  59.         ifdef AC97SND
  60.                 AC97SND_ON equ 1
  61.         else
  62.                 AC97SND_ON equ 0
  63.         endif
  64. endif
  65.  
  66. ifndef NOLINKER
  67.         %include "eff.inc"
  68.  
  69.         [segment .text align=4]
  70. endif
  71.  
  72. STRUC FSOUND_SAMPLE
  73.         FSOUND_SAMPLE._length   resd 1
  74.         FSOUND_SAMPLE.loopstart resd 1
  75.         FSOUND_SAMPLE.looplen   resd 1
  76.         FSOUND_SAMPLE.defvol    resb 1
  77.         FSOUND_SAMPLE.finetune  resb 1
  78.         FSOUND_SAMPLE.bytes     resb 1
  79.         FSOUND_SAMPLE.defpan    resb 1
  80.         FSOUND_SAMPLE.relative  resb 1
  81.         FSOUND_SAMPLE.Resved    resb 1
  82.         FSOUND_SAMPLE.loopmode  resb 1
  83.         FSOUND_SAMPLE._align    resb 1
  84.         FSOUND_SAMPLE.buff      resb 2
  85. ENDSTRUC
  86.  
  87. STRUC FSOUND_CHANNEL
  88.         FSOUND_CHANNEL.actualvolume     resd 1
  89.         FSOUND_CHANNEL.actualpan        resd 1
  90.         FSOUND_CHANNEL.fsampleoffset    resd 1
  91.         FSOUND_CHANNEL.leftvolume       resd 1
  92.         FSOUND_CHANNEL.rightvolume      resd 1
  93.         FSOUND_CHANNEL.mixpos           resd 1
  94.         FSOUND_CHANNEL.speedlo          resd 1
  95.         FSOUND_CHANNEL.speedhi          resd 1
  96.         FSOUND_CHANNEL.ramp_lefttarget  resw 1
  97.         FSOUND_CHANNEL.ramp_righttarget resw 1
  98.         FSOUND_CHANNEL.ramp_leftspeed   resd 1
  99.         FSOUND_CHANNEL.ramp_rightspeed  resd 1
  100.         FSOUND_CHANNEL.fsptr            resd 1
  101.         FSOUND_CHANNEL.mixposlo         resd 1
  102.         FSOUND_CHANNEL.ramp_leftvolume  resd 1
  103.         FSOUND_CHANNEL.ramp_rightvolume resd 1
  104.         FSOUND_CHANNEL.ramp_count       resw 1
  105.         FSOUND_CHANNEL.speeddir         resb 2
  106. ENDSTRUC
  107.  
  108. STRUC FMUSIC_NOTE
  109.         FMUSIC_NOTE.unote   resb 1
  110.         FMUSIC_NOTE.number  resb 1
  111.         FMUSIC_NOTE.uvolume resb 1
  112.         FMUSIC_NOTE.effect  resb 1
  113.         FMUSIC_NOTE.eparam  resb 1
  114. ENDSTRUC
  115.  
  116. STRUC FMUSIC_PATTERN
  117.         FMUSIC_PATTERN.rows        resw 1
  118.         FMUSIC_PATTERN.patternsize resw 1
  119.         FMUSIC_PATTERN.data        resd 1
  120. ENDSTRUC
  121.  
  122. STRUC FMUSIC_INSTRUMENT
  123.         FMUSIC_INSTRUMENT.sample       resd 16
  124.         FMUSIC_INSTRUMENT.keymap       resb 96
  125.         FMUSIC_INSTRUMENT.VOLPoints    resw 24
  126.         FMUSIC_INSTRUMENT.PANPoints    resw 24
  127.         FMUSIC_INSTRUMENT.VOLnumpoints resb 1
  128.         FMUSIC_INSTRUMENT.PANnumpoints resb 1
  129.         FMUSIC_INSTRUMENT.VOLsustain   resb 1
  130.         FMUSIC_INSTRUMENT.VOLLoopStart resb 1
  131.         FMUSIC_INSTRUMENT.VOLLoopEnd   resb 1
  132.         FMUSIC_INSTRUMENT.PANsustain   resb 1
  133.         FMUSIC_INSTRUMENT.PANLoopStart resb 1
  134.         FMUSIC_INSTRUMENT.PANLoopEnd   resb 1
  135.         FMUSIC_INSTRUMENT.VOLtype      resb 1
  136.         FMUSIC_INSTRUMENT.PANtype      resb 1
  137.         FMUSIC_INSTRUMENT.VIBtype      resb 1
  138.         FMUSIC_INSTRUMENT.VIBsweep     resb 1
  139.         FMUSIC_INSTRUMENT.iVIBdepth    resb 1
  140.         FMUSIC_INSTRUMENT.VIBrate      resb 1
  141.         FMUSIC_INSTRUMENT.VOLfade      resw 1
  142. ENDSTRUC
  143.  
  144. STRUC FMUSIC_CHANNEL
  145.         FMUSIC_CHANNEL.note          resb 1
  146.         FMUSIC_CHANNEL.samp          resb 1
  147.         FMUSIC_CHANNEL.notectrl      resb 1
  148.         FMUSIC_CHANNEL.inst          resb 1
  149.         FMUSIC_CHANNEL.cptr          resd 1
  150.         FMUSIC_CHANNEL.freq          resd 1
  151.         FMUSIC_CHANNEL.volume        resd 1
  152.         FMUSIC_CHANNEL.voldelta      resd 1
  153.         FMUSIC_CHANNEL.freqdelta     resd 1
  154.         FMUSIC_CHANNEL.pan           resd 1
  155.         FMUSIC_CHANNEL.envvoltick    resd 1
  156.         FMUSIC_CHANNEL.envvolpos     resd 1
  157.         FMUSIC_CHANNEL.envvoldelta   resd 1
  158.         FMUSIC_CHANNEL.envpantick    resd 1
  159.         FMUSIC_CHANNEL.envpanpos     resd 1
  160.         FMUSIC_CHANNEL.envpandelta   resd 1
  161.         FMUSIC_CHANNEL.ivibsweeppos  resd 1
  162.         FMUSIC_CHANNEL.ivibpos       resd 1
  163.         FMUSIC_CHANNEL.keyoff        resb 2
  164.         FMUSIC_CHANNEL.envvolstopped resb 1
  165.         FMUSIC_CHANNEL.envpanstopped resb 1
  166.         FMUSIC_CHANNEL.envvolfrac    resd 1
  167.         FMUSIC_CHANNEL.envvol        resd 1
  168.         FMUSIC_CHANNEL.fadeoutvol    resd 1
  169.         FMUSIC_CHANNEL.envpanfrac    resd 1
  170.         FMUSIC_CHANNEL.envpan        resd 1
  171.         FMUSIC_CHANNEL.period        resd 1
  172.         FMUSIC_CHANNEL.sampleoffset  resd 1
  173.         FMUSIC_CHANNEL.portatarget   resd 1
  174.         FMUSIC_CHANNEL.patloopno     resb 4
  175.         FMUSIC_CHANNEL.patlooprow    resd 1
  176.         FMUSIC_CHANNEL.realnote      resb 1
  177.         FMUSIC_CHANNEL.recenteffect  resb 1
  178.         FMUSIC_CHANNEL.portaupdown   resb 2
  179.         FMUSIC_CHANNEL.xtraportadown resb 1
  180.         FMUSIC_CHANNEL.xtraportaup   resb 1
  181.         FMUSIC_CHANNEL.volslide      resb 1
  182.         FMUSIC_CHANNEL.panslide      resb 1
  183.         FMUSIC_CHANNEL.retrigx       resb 1
  184.         FMUSIC_CHANNEL.retrigy       resb 1
  185.         FMUSIC_CHANNEL.portaspeed    resb 1
  186.         FMUSIC_CHANNEL.vibpos        resb 1
  187.         FMUSIC_CHANNEL.vibspeed      resb 1
  188.         FMUSIC_CHANNEL.vibdepth      resb 1
  189.         FMUSIC_CHANNEL.tremolopos    resb 1
  190.         FMUSIC_CHANNEL.tremolospeed  resb 1
  191.         FMUSIC_CHANNEL.tremolodepth  resb 1
  192.         FMUSIC_CHANNEL.tremorpos     resb 1
  193.         FMUSIC_CHANNEL.tremoron      resb 1
  194.         FMUSIC_CHANNEL.tremoroff     resb 1
  195.         FMUSIC_CHANNEL.wavecontrol   resb 1
  196.         FMUSIC_CHANNEL.finevslup     resb 1
  197.         FMUSIC_CHANNEL.fineportaup   resb 1
  198.         FMUSIC_CHANNEL.fineportadown resb 1
  199. ENDSTRUC
  200.  
  201. STRUC FMUSIC_MODULE
  202.         FMUSIC_MODULE.pattern              resd 1
  203.         FMUSIC_MODULE.instrument           resd 1
  204.         FMUSIC_MODULE.mixer_samplesleft    resd 1
  205.         FMUSIC_MODULE.globalvolume         resd 1
  206.         FMUSIC_MODULE.tick                 resd 1
  207.         FMUSIC_MODULE.speed                resd 1
  208.         FMUSIC_MODULE.order                resd 1
  209.         FMUSIC_MODULE.row                  resd 1
  210.         FMUSIC_MODULE.patterndelay         resd 1
  211.         FMUSIC_MODULE.nextorder            resd 1
  212.         FMUSIC_MODULE.nextrow              resd 1
  213.         FMUSIC_MODULE.unused1              resd 1
  214.         FMUSIC_MODULE.numchannels          resd 1
  215.         FMUSIC_MODULE.Channels             resd 1
  216.         FMUSIC_MODULE.uFMOD_Ch             resd 1
  217.         FMUSIC_MODULE.mixer_samplespertick resd 1
  218.         FMUSIC_MODULE.numorders            resw 1
  219.         FMUSIC_MODULE.restart              resw 1
  220.         FMUSIC_MODULE.numchannels_xm       resb 1
  221.         FMUSIC_MODULE.globalvsl            resb 1
  222.         FMUSIC_MODULE.numpatternsmem       resw 1
  223.         FMUSIC_MODULE.numinsts             resw 1
  224.         FMUSIC_MODULE.flags                resw 1
  225.         FMUSIC_MODULE.defaultspeed         resw 1
  226.         FMUSIC_MODULE.defaultbpm           resw 1
  227.         FMUSIC_MODULE.orderlist            resb 256
  228. ENDSTRUC
  229.  
  230. %macro PUBLIC 1
  231.         ifndef NOLINKER
  232.                 GLOBAL %1
  233.         endif
  234. %endmacro
  235. %define OFFSET
  236. %define PTR
  237.  
  238. include "ufmod.asm"
  239. include "core.asm"
  240.  
  241. ifdef NOLINKER
  242.         uFMOD_IMG_END: ; End of uFMOD's code. BSS follows.
  243.         align 16
  244.         [segment .bss]
  245. else
  246.         [segment .bss align=16]
  247. endif
  248.  
  249. _mod          resb FMUSIC_MODULE_size
  250. mmt           resd 3
  251. ufmod_heap    resd 2
  252. if AC97SND_ON
  253.         extern hSound
  254.               resd 1
  255. else
  256.         hSound resd 1
  257. endif
  258. hBuff         resd 1
  259. SW_Exit       resd 1
  260. MixBuf        resb FSOUND_BlockSize*8
  261. ufmod_noloop  resb 1
  262. ufmod_pause_  resb 1
  263. mix_endflag   resb 2
  264. mmf           resd 4
  265. ufmod_vol     resd 1
  266. uFMOD_fopen   resd 1
  267. uFMOD_fread   resd 1
  268. file_struct   resd 7
  269. cache_offset  resd 1
  270. if INFO_API_ON
  271.         time_ms   resd 1
  272.         L_vol     resw 1
  273.         R_vol     resw 1
  274.         s_row     resw 1
  275.         s_order   resw 1
  276.         szTtl     resb 24
  277. endif
  278. DummySamp resb FSOUND_SAMPLE_size
  279.