home *** CD-ROM | disk | FTP | other *** search
- S3M-player history:
- ^^^^^^^^^^^^^^^^^^^
-
- It was written by Andre' Baresel
-
- introduction: oh well, nobody is interrested in, but anyway ;)
-
- Thx go out to: JUR/GA .... for a lot of Betatesting :)
- (keep on testing ;)
- Craig Jackson .... for those cool SB infos :)
- (come on let's release it - MANY people wait
- for it)
- Airon Jayder .... for your song I found some bugs with
- (thx for the motivation to produce a MusicDisk !)
- Question:
- ~~~~~~~~~
- Should I implement the 'Amiga finetune' command ? - it's really used in S3Ms
- or only in converted MODs ?
-
- version 1.0ß :
- ~~~~~~~~~~~~~
- - first version with all effects
- - only mono 8bit :)
- - rastertime only for samplerate 35714 Hz
-
- version 1.1ß :
- ~~~~~~~~~~~~~~
- - correction with patternloop (thx JUR/GA)
- - rastertime now for all samplerates (>4000Hz)
- - load patterns in EMS is implemented, BUT not yet the
- play routines for that ;) - so switch off EMS usage !
- - a bug with interrupt killed ? - I forgot to restore it ...
-
- version 1.2ß :
- ~~~~~~~~~~~~~~
- - fixed some bugs in EMS routines
- - play routines for pattern in EMS - "EMS for president" :)
- (Cost me hours of my live - computer hangs on X times - beat those stupid
- bugs ! oh well ...)
- - sorry version 1.1ß was 'copro' only (was a wrong setting in BP compiler -
- I don't need a copro
- - bug killed in 'special' effects thx JUR/GA
-
- version 1.3ß :
- ~~~~~~~~~~~~~~
- - playroutines improved for samples in EMS -> 480KB free mem for DOS shell
- (more than iplay hehe :)
- - major "bug" (I forgot about that special case) in note handling killed
- - Notecut was 1 tick to short - fixed thx JUR
- - now calc every screen the same amount of data for playing
- - bug fixed in load routine (was only with EMS usage)
- - stereo play added
- - some extra keys added in PLAYS3M.EXE
- - small bug with to high volumes deleted
- - another bug in 'read notes' killed (why the hell musician use not defined
- instruments ?)
-
- version 1.4ß :
- ~~~~~~~~~~~~~~
- - optimized innerloop in FILLDMA (16 to 8bit converter, but later also
- 16to16 - that's only a question of time :)
- - retrigg corrected (volup & voldown was not correct - sorry for this :)
- - another bug killed in 'readinstrument' deleted (sorry for that what I did
- there before ;)
- - a really horrible bug killed in 'setsamplerate' - thx to JURs SB PRO
- which ofcoz can play only 22Khz stereo (at 45KHz with my SB I couldn't
- hear that :)
- -> after this I got no more computer hang ons !
- - Flag added to switch on/off 'toslow' test. this test had caused in
- former versions some note skips on JURs PC (I can imagin, but I don't
- believe in <- if it's true it would be horrible!).
- - improved plays3m a bit (some new info screens)
- - wrote a new small version of player - more memory for DOSshell, but less
- userfriendly :(
- - a bug in DMApage override test killed
- - a small bug in volslidedown killed (was volsldwn E1)
-
- Speed results on a 486/DX33VLB:
- maxtest.s3m (16 channels full time used)
- about 55% rastertime for 45kHz stereo
- about 45% rastertime for 45kHz mono
- about 33% rastertime for 22kHz stereo
- about 28% rastertime for 22kHz mono
- about 24% rastertime for 16kHz stereo
- about 18% rastertime for 16kHz mono
- about 15% rastertime for 10kHz mono
- --> really shame on me for these results ! Oh well I have to optimize, ...,
- optimize, optimize
-
- version 1.5ß :
- ~~~~~~~~~~~~~~
- - some changes in "toslow?" test ... (hmm does it work on JURs PC ?)
- - killed another bug (oh well sometimes I have to clean up my room ;)
- in read instrument
- - killed another bug in special case NO INSTRUMENT GIVEN - thx to Airon
- Jayder for his song WEDDING.S3M where I found it :)
- - bug in calc posttable deleted (was bugy with some special volumes)
- - bug fixed in retrigg (was one tick to late every retrigg :( )
- - a stupid bug in vibrato and tremolo deleted - I used 128 byte tables -
- sorry for this ! was a wrong interpretation what I got from some of my
- examples :( ... now vibrato sounds really (!!!) like original thing in ST3
- - fine vibrato added (was new in ST3.2)
- - glissando controll not yet, but in next version ...
-
- version 1.6ß :
- ~~~~~~~~~~~~~~
- - bug fixed in 'set global volume' - now check for to high values ...
- - error check removed. I checked for 1Ah at the end of songname, but ST3.00
- (yeah a not released version) wrote 0 there. That check was not that
- important so I removed it.
- - oscillator example added. It's simple and slow, but you will understand
- what I did and that's important, if you want to see a fast oscillator look
- at our musicdisk - coming out ... soon ? I dounno, that depends on how
- many effects we want to put into it.
- - did a lot of optimizing (one 'add' deleted from inner loop + 31 out of 32
- 'dec','jnz' deleted ... I unrolled innerloop 32 times)
- - fixed I SB PRO problem ... now I switch off SB PRO filter automaticly
- (that filter is really shit !).
-
- version 1.7ß :
- ~~~~~~~~~~~~~~
- - low quality mode added (44kHz lowqual = 22kHz Hiqual+every byte twice)
- (44kHz lowqual sounds better than 22kHz lowqual - soundblaster hardware
- sucks at lower frequencies!)
- - EMS access optimized (now I switch for every EMS sample max 2 pages on !)
- - removed a 'bug' in calc_frequency was buggy for C2speeds<3500Hz
-
- Some ideas I thought about, but I haven't yet the time to add it:
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- 1... maybe include panning for SB stereo ? (of course a lost of speed !)
- I dounno yet, maybe a special option like stereo & 16bit play,
- but speed lost from mono2stereo is not that high like stereo2panstereo
- (remember: add every channel to both sides ... 2 times more memory access!)
- 2... idea "main panning": put all left channels abit to right side and all right
- channels abit to the left ... it's better for ear phones ... no real use
- on a big stereo :) ... that kind of panning would take not that much time
- like panning for each channel seperate.
-
- Coding idea for 1. :
- ~~~~~~~~~~~~~~~~~~~~
- another table for panning: locpan: array[0..255,0..255] of byte;
-
- precalc it in this way: locpan[i,j]:=(i*j) shr 8
-
- for opposite side do that later:
- locpan[255-i,j]:=(255-i)*j shr 8 = j - i*j shr 8
-
- bh = vol
-
- xor eax,eax
- mov ah,channelpan
- lll:
-
- mov al,samples[position] ; fs:[di]
- ; .... next position in sample ...
- add edi,edx
- adc di,0
- ; .... panning :
- (*) mov bl, locpan [channelpan,al] = locpan[eax] ; gs:[eax]
- mov bp, volumetab[vol,bl] = volumetab[ebx+ebx] ; ds:[ebx+ebx]
-
- add [original side],bp ; es:[si]
-
- ; to slow : mov bl, locpan [255-channelpan,al]
- ; the better way: (bl = locpan[eax] look above)
- neg bl
- add bl, al
- (*) mov bp, volumetab[vol,bl] = volumetab[ebx+ebx] ; ds:[ebx+ebx]
-
- (*) add [opposite side],bp ; es:[si+2] (or -2 ... two innerloops !)
-
- dec cx , loop to lll if cx>0
-
- 3 memory acesses more than innerloop without panning !
- all registers used ...
-
- Coding idea for 2.:
- ~~~~~~~~~~~~~~~~~~~
- implement it in filldma loop:
-
- rightpan,
- oppositpan : array [0..4095] of byte;
-
- take calculations I used for post8bit/post16bit but now add panning :
- rightpan[i]:=panvalue*post8bit[i] shr 8
- oppositepan[i]:=(255-panvlue)*post8bit[i] shr 8
- = post8bit[i]-rightpan[i]
-
- ... well for optimization put these two tables in one, add the results of both
- sides and write it. -> one 'add' more, and a 3 word accesses instead
- of 2byte,1word acesses.
-