AdLib-Musik/Player?

Diskussion zum Thema Programmierung unter DOS (Intel x86)
Antworten
Brueggi

AdLib-Musik/Player?

Beitrag von Brueggi »

Huhu Programmierer-Gemeinde!

Vielleicht kann mir einer weiterhelfen: Ich bin auf der suche nach diesen typischen DOS-Spiele-Adlib-Musiken und einem Tutorial, wie man sich den dazu passenden Player schreibt. Hintergrund: Ich möchte meinen Programmen nun auch mal Musik spendieren und meine SB etwas nutzen. Gibt es - vergleichbar mit dem Amiga oder C64 - auch für den PC solche Musikstücke? Und wenn ja: Wo kriegt man infos, wie man sich einen Player dafür schreibt?

Viele Grüße,

Brüggi.
elianda
DOS-Übermensch
Beiträge: 1150
Registriert: Mi 31. Jan 2007, 19:04
Wohnort: Halle
Kontaktdaten:

Re: AdLib-Musik/Player?

Beitrag von elianda »

Vielleicht hilft Dir das weiter:
http://sourceforge.net/projects/adplug/files/
Diverse Retro-Computer vorhanden.
Benutzeravatar
AlCarbonara
LAN Manager
Beiträge: 217
Registriert: Do 9. Feb 2012, 18:04

Re: AdLib-Musik/Player?

Beitrag von AlCarbonara »

I was the Amiga - GURU
plentus
CONFIG.SYS-Autor
Beiträge: 293
Registriert: Mo 6. Dez 2010, 15:23

Re: AdLib-Musik/Player?

Beitrag von plentus »

http://sourceforge.net/projects/at2-osp/files/

das sind die sourcen vom adlib tracker II ( http://www.adlibtracker.net )- vielleicht auch ganz interessant.

Gruss
Brueggi

Re: AdLib-Musik/Player?

Beitrag von Brueggi »

@All: Vielen Dank für die Links - da hab ich ja ne Menge zum Probieren :-)

@AlCarbonara: Danke Dir! So ist es nun schon der zehnte Monat des Jahres, und der ehrwürdige König hat seine entlegenen Provinzen im Reich noch nicht besuchet. ;-) ;-)
Benutzeravatar
AlCarbonara
LAN Manager
Beiträge: 217
Registriert: Do 9. Feb 2012, 18:04

Re: AdLib-Musik/Player?

Beitrag von AlCarbonara »

Brueggi hat geschrieben:@All: Vielen Dank für die Links - da hab ich ja ne Menge zum Probieren :-)

@AlCarbonara: Danke Dir! So ist es nun schon der zehnte Monat des Jahres, und der ehrwürdige König hat seine entlegenen Provinzen im Reich noch nicht besuchet. ;-) ;-)
Sorry Timo, das wird auch leider nichts mehr werden, ist zuviel dazwischen gekommen ! :-(

CU,

AC
I was the Amiga - GURU
Brueggi

Re: AdLib-Musik/Player?

Beitrag von Brueggi »

Kein Thema - kenn ich. Das klappt schonmal wieder :-)
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: AdLib-Musik/Player?

Beitrag von zatzen »

AdLib dürfte nicht so schwer sein. Ich habe mich 1995 durch "Das Soundblaster Profi Buch" gelesen
und in QBasic einen AdLib Tracker programmiert, spartanisch, aber für mich ausreichend. Das
einzige was mir ein bisschen einen Strich durch die Rechnung gemacht hat war, dass das Datenregister
der AdLib (angeblich, vermutlich aber auch tatsächlich) eine Weile braucht bis man es erneut
ansprechen kann. Dadurch konnte ich die Instrumente auf den Kanälen im Tracker nicht
wechseln, sie waren für jeden Kanal fest eingestellt. Im offiziellen AdLib Tracker wird
das anders sein, würde mich mal interessieren wie das Problem da gelöst ist.
mov ax, 13h
int 10h

while vorne_frei do vor;
DOSferatu
DOS-Übermensch
Beiträge: 1220
Registriert: Di 25. Sep 2007, 12:05
Kontaktdaten:

Re: AdLib-Musik/Player?

Beitrag von DOSferatu »

Ja, das mit dem "aufs Register warten, bis wieder ansprechbar" ist in der Tat ein bekanntes AdLib (bzw OPL) Problem. Und man löste es früher natürlich mit....
<trommelwirbel>
WARTESCHLEIFEN.

Und die sind natürlich Mist. Warum? Nunja, selbst wenn man ein altes Spiel z.B. patcht - d.h. bei der Warteschleifen-Timerschleife am Anfang verhindert, daß der DIV0 Error-INT auftritt, führt das trotzdem auf zu schnellen Rechnern dann dazu, daß wenn Warteschleifen auch wirklich BENUTZT wurden, diese zu schnell laufen - mit anderen Worten: Nicht lange genug warten. Und das ergibt dann diese schönen Effekte: Nämlich, daß alte Games auf neuen Rechnern dann zwar laufen, aber ohne Musik - oder irgendwann mit Komplettausfall der Musik oder hängendem Dauerton oder plötzlich fiesen unregelmäßigen (und für die Ohren schmerzhaften) Zufallsgeräuschen.
Und ja - man kann zwar die Testroutine am Anfang patchen (die durch die CRT.TPU in BP und in einer adäquaten Bibliothek in BC verwendet wird) - aber man kann meist nicht die ganzen Stellen patchen, falls die Timerschleife auch WIRKLICH irgendwo im Programm eingesetzt wird.
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: AdLib-Musik/Player?

Beitrag von zatzen »

Ich habe in einem alten ASM Programm von mir für die AdLib-Ausgabe folgenden Code
wiedergefunden:

Code: Alles auswählen

  
  adlib_out  PROC NEAR;    al: register; ah:wert

    push dx
    push cx
    push ax
    mov dx, 0388h
    out dx, al       ; register in registerport schreiben}
    mov cx, 6
    delayloop:
      in al, dx
    loop delayloop   ; 3.3ms warten}
    inc dx
    mov al, ah
    out dx, al        ; wert in datenport schreiben}
    mov cx, 35
    dec dx
    delayloop2:
      in al, dx
    loop delayloop2  ; 23ms warten}
    pop ax
    pop cx
    pop dx

  ret
  adlib_out ENDP  
Ich glaube ich habe mir das damals mehr oder weniger irgendwo "geklaut". In meinem Soundblaster-Buch
stand dieser konkrete Trick nämlich so nicht drin.
Und ich denke mal, es handelt sich hier nicht um Millisekunden, sondern um Mikrosekunden. Das Progrämmchen
woraus ich den Code hier habe funktioniert nämlich, ohne dass man nur eine "Framerate" von 37 Hz hat (1 / 26.3ms),
bzw. noch langsamer weil ja für Musik noch viel mehr Daten in der Sekunde an die AdLib geschickt werden!
Der Witz an der Sache hier scheint also zu sein, dass das Lesen der AdLib-Register (genauer des Ports 388h) quasi
wie ein verlässlicher Timer fungiert, wodurch man unabhängig von der Rechnergeschwindigkeit ist.
mov ax, 13h
int 10h

while vorne_frei do vor;
elianda
DOS-Übermensch
Beiträge: 1150
Registriert: Mi 31. Jan 2007, 19:04
Wohnort: Halle
Kontaktdaten:

Re: AdLib-Musik/Player?

Beitrag von elianda »

zatzen hat geschrieben: Der Witz an der Sache hier scheint also zu sein, dass das Lesen der AdLib-Register (genauer des Ports 388h) quasi
wie ein verlässlicher Timer fungiert, wodurch man unabhängig von der Rechnergeschwindigkeit ist.
Das bezweifle ich stark. Vielleicht geht das in dem Spezialfall, dass man eine ISA Karte hat und 8 MHz ISA clock, in allen anderen Faellen stimmt die Zeit nicht. Vielleicht sind PCI Soundchips nicht so anfaellig auf schnellere Zugriffe, aber es gibt ja auch MCA z.B.
Diverse Retro-Computer vorhanden.
Benutzeravatar
zatzen
DOS-Guru
Beiträge: 518
Registriert: Di 17. Apr 2012, 05:10
Wohnort: bei Köln
Kontaktdaten:

Re: AdLib-Musik/Player?

Beitrag von zatzen »

Schade, wenn es so ist. Auf einem Pentium 200 MMX mit Soundblaster AWE 64 Gold funktioniert es jedenfalls.
Lesen aus dem Grafikspeicher ist auch langsamer als Schreiben, aber ich kann mir mangels Überblick kein
Urteil darüber erlauben, ob das Lesen eines AdLib Registers nun wegen der Karte selbst eine Verzögerung
mit sich bringt oder allgemein wegen der ISA Geschwindigkeit.

8 Mhz würde, wenn man obigem Code glauben schenken kann, und mal einfach angenommen man bräuchte nur einen
ISA Takt pro Zugriff, aber auch nicht hinkommen, da komme ich rein rechnerisch nur auf 0,75 µs anstatt 3.3 . Weitere
Verzögerungen durch den Code selbst mal beiseite gelassen.
mov ax, 13h
int 10h

while vorne_frei do vor;
Antworten