AdLib-Musik/Player?
AdLib-Musik/Player?
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.
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.
-
- DOS-Übermensch
- Beiträge: 1035
- Registriert: Mi 31. Jan 2007, 19:04
- Wohnort: Halle
- Kontaktdaten:
Re: AdLib-Musik/Player?
Vielleicht hilft Dir das weiter:
http://sourceforge.net/projects/adplug/files/
http://sourceforge.net/projects/adplug/files/
Diverse Retro-Computer vorhanden.
- AlCarbonara
- Norton Commander
- Beiträge: 127
- Registriert: Do 9. Feb 2012, 18:04
Re: AdLib-Musik/Player?
Ollah Untertan,
möge er hier mal schauen:
http://www.vibrants.dk/adlib.htm
http://www.oplx.com/opl2.htm
http://www.ugcs.caltech.edu/~john/compu ... h/opl3.txt
http://webtweakers.com/swag/SOUND/0055.PAS.html
http://webtweakers.com/swag/SOUND/index.html <----der scheint interessant zu sein !
Greetings from the king.....
möge er hier mal schauen:
http://www.vibrants.dk/adlib.htm
http://www.oplx.com/opl2.htm
http://www.ugcs.caltech.edu/~john/compu ... h/opl3.txt
http://webtweakers.com/swag/SOUND/0055.PAS.html
http://webtweakers.com/swag/SOUND/index.html <----der scheint interessant zu sein !
Greetings from the king.....
I was the Amiga - GURU
Re: AdLib-Musik/Player?
http://sourceforge.net/projects/at2-osp/files/
das sind die sourcen vom adlib tracker II ( http://www.adlibtracker.net )- vielleicht auch ganz interessant.
Gruss
das sind die sourcen vom adlib tracker II ( http://www.adlibtracker.net )- vielleicht auch ganz interessant.
Gruss
Re: AdLib-Musik/Player?
@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.
@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.
- AlCarbonara
- Norton Commander
- Beiträge: 127
- Registriert: Do 9. Feb 2012, 18:04
Re: AdLib-Musik/Player?
Sorry Timo, das wird auch leider nichts mehr werden, ist zuviel dazwischen gekommen !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.
CU,
AC
I was the Amiga - GURU
Re: AdLib-Musik/Player?
Kein Thema - kenn ich. Das klappt schonmal wieder
Re: AdLib-Musik/Player?
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.
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;
int 10h
while vorne_frei do vor;
Re: AdLib-Musik/Player?
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.
<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.
Re: AdLib-Musik/Player?
Ich habe in einem alten ASM Programm von mir für die AdLib-Ausgabe folgenden Code
wiedergefunden:
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.
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
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;
int 10h
while vorne_frei do vor;
-
- DOS-Übermensch
- Beiträge: 1035
- Registriert: Mi 31. Jan 2007, 19:04
- Wohnort: Halle
- Kontaktdaten:
Re: AdLib-Musik/Player?
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.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.
Diverse Retro-Computer vorhanden.
Re: AdLib-Musik/Player?
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.
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;
int 10h
while vorne_frei do vor;