MIDAS 1.1.2 buglist

winwave.c: winwTryMode

On 8bit soundcards only 16bit modes are tested, no one found working and error thrown, because of one "outputMode" where only "mode" should be.

midasdll.c: MIDASplayModuleSection

When user doesn't allocate enough channels and tries to play module, Midas locks up. Search for cycle with u = 0 and replace i++ with u++ :). Now it doesn't lock up but MIDASclose() returns error or crashes. Add mPlayHandles[handleNum] = 0;.

doscnf.c: MIDASsaveConfig

If you think everything should be perfect, return TRUE instead of FALSE.

win32cnf.c: MIDASsaveConfig

Return TRUE instead of FALSE.

how to compile with watcom 11.0

This is really not a bug, but somebody could appreciate these hints. Btw, I'm not sure with some things, I don't want to make dirty hacks, but following steps helped me to compile:
  • Structures must be packed with cmdline switch -zp1 (otherwise you get runtime errors like bad wave file, unexpected end of file).
  • Function LibMain must be removed or renamed before compiling to lib (linker error). (especially here I don't remember if it is bugfix or dirty hack, but everything I tested works now)
  • NULL parameter from _beginthread must be removed (compiler error, Watcom removed this parameter to be MS compatible in version 11).
  • When arguments passed to compiler are too long for good old DOS, something must be cut off.. for instance long paths to OBJ directories could be reduced to o: by "subst o: OBJ_directory".... which could be done automaticly in makefile (of course some drive letter like o: must be free for this purpose).

    MIDAS 0.40 buglist

    Because some strange people (like me) still code in 16bit and version 0.40 is last 16bit Midas version, it has sense to write also Midas 0.40 buglist. (Ok, it had sense before RAIN)

    Please, mail me if you are interested in this buglist and don't understand Czech. I'm too lazy to translate without reason.

    Verze 0.40 je poslední, kterou lze použít pod DOSem v Turbo/Borland Pascalu. Jelikož se autoři už nehodlají zabývat verzí 0.40, rozhodl jsem se pro programátory podobně postižené Pascalem shromáždit seznam chyb verze 0.40.

    mutils.asm: mMemEqual

    Po intrukci repe cmpsb je výsledek porovnání v ZF. Takže bezprostředně následující instrukce test cx,cx tam nemá být. Nevím o tom, že by se tato chyba nějak projevovala v MIDASu, i vadná verze mMemEqual jakž takž funguje, pouze porovnává o bajt méně.

    dpmi.asm: dpmiSegmentDescriptor

    Před @err: chybí dvě instrukce, xor ax,ax a jmp @@done. To je triviální věc, bez nich funkce nefunguje. V MIDASu taky nikde není použitá :).

    dpmi.asm: dpmiRealModeInt

    Před int 31h chybí xor cx,cx. Tím se DPMI serveru říká, že má vytvořit vlastní stack. Pravděpodobným projevem této chyby je autory zdokumentované a nevysvětlené hroucení MIDASu při opakovaném setupu v protektu a s kartou PAS. Záludnost je v tom, že to, jestli se program zhroutí, záleží na stavu registru CX před voláním funkce. V MIDASu to náhodou většinou vychází.

    gus.asm: gusMalloc

    Za @justalloc: chybí dvě intrukce, mov si,[bestfitofs] a mov es,[bestfitseg]. Projevem této chyby jsou neopodstatněné hlášky Out of soundcard memory a Invalid conventional memory block při hraní přes Gravise. Problém vzniká řídce, pouze při fragmentované paměti Gravise, je-li při požadavku na naalokování X bajtů nalezena díra velikosti přesně X. Tuto chybu si můžou opravit i uživatelé verze 0.60, protože jsem ji odhalil a ohlásil Alfredovi až po releasu 0.60.

    gus.asm: ?

    Dosud nenalezená chyba v gus.asm. Jejím projevem je porušení délek instrumentů, takže z přehrávaného efektu je slyšet jen část nebo naopak skončí později a je slyšet i kus dat za ním.

    Nefatální drobnosti:

    Inicializace timeru vytuhne pod Windows a na některých grafických kartách v některých módech. Jediným řešením je v takových situacích timer nepoužívat.
    Některé problémy se hlásí špatnou hláškou. Unexpected end of file často znamená třeba nepovolený typ samplu v modulu. Out of conventional memory někdy znamená nedostatek paměti na Gravisovi.

    s3mload.c: ?

    Prislo postou:
     Pri loadovani nekterych S3Mek haze "unexpected end of file", tyto soubory
     maji velikost order_tabulky liche cislo (word na offsetu 20h v s3m).
     V "originalni" dokumentaci se pise, ze tato tabulka musi mit sudou
     velikost.
     ST3 vytvoreni takoveho modulu nejak zabrani, ale v jinych trackerech
     tomu tak asi neni. Takze kdyz se tam najde ono liche cislo, midas to
     upravi na cislo+1, a dale nacitane offsety na patterny, samply .. jsou
     kapanek nezpravne.
    
     Reseni - v souboru s3mload.c radek 317 "ordersize=2*(.." zmenit na
     "ordersize=ms3m->songLength"
    
     Nevim zda midas nevyhodi stejnou chybu i pri jinych problemech. Takoveto
     nekorektni moduly jsem nasel doma dva, po oprave uz chodi.
    
     Oznaceni bug asi nevystihuje to prave... spis ocharana pred nekorektnimi
     moduly.
    
                                                           Navel/Jiri Hemzal
    

    Contact

    If you have any comments, suggestions, want to help or anything, write to

    Dee

    dee at dee.cz, homepage