MP3@64
MP3@64 | |
---|---|
Typ | Erweiterung für MMC64 |
Hersteller | Oliver Achten (aka Necronomfive) |
Neupreis | ? € |
Erscheinungsjahr | 2005 |
Produktionsende | 2013 |
Prozessor | MAS3507-G12 MP3 |
Sonstiges | Mehrer Versionen sind erschienen |
MP3@64 ist eine 2005 entwickelte Zusatzplatine zum MP3-Decoding in Hardware, die von Oliver Achten alias Necronomfive ursprünglich speziell für das ebenfalls von ihm entworfene MMC64 entwickelt wurde. Den Vertrieb übernahm auch hier Individual Computers. Die Platine wird am sogenannten Uhrenport (Clockport) des MMC64 verwendet. Basierend auf dem MAS3507-G12 MP3 Decoder von Micronas Intermetall können damit MP3-Daten in einer Auflösung von 24 Bit Stereo mit 96 kHz wiedergegeben werden. Dadurch ist prinzipiell eine bessere Qualität als bei einer Compact Disc möglich, wo Audio üblicherweise mit 16 Bit Stereo bei einer Abtastrate von 44,1 kHz Verwendung findet. Ein ähnlicher wie der hier verwendete DSP (digitaler Signalprozessor) kam bei einem der ersten portablen MP3-Player zum Einsatz.[1]
Neben dem MMC64 kann die Platine am C64 auch mit dem IDE64 verwendet werden sowie an Amigas, bei denen ein Uhrenport zur Verfügung steht. Eine Nutzung am Uhrenport des MMC Replay wird wegen der Gefahr von Kurzschlüssen nicht empfohlen.[2] Erkenntnisse über den Betrieb am Retro Replay, das ebenfalls einen Clock Port hat, liegen nicht vor.
Die Herstellung des MP3@64 wurde von Individual Computers mit der Begründung eingestellt, dass der verwendete Decoder-Chip nicht mehr erhältlich sei. Durch Zufall konnte Comos aus dem IDE64-Umkreis im Jahr 2016 doch noch einige dieser Chips auftreiben und so eine kleine Neuauflage der Platine anbieten.[3]
Software zur MP3-Wiedergabe[Bearbeiten | Quelltext bearbeiten]
Zur Wiedergabe von MP3-Dateien wird in jedem Fall eine Software benötigt. Beim MMC64 gibt es dazu das MP3 Plugin von Oliver Achten (Necronomfive). Für IDE64 gibt es das MP3 plugin v0.6 sowie den MP3@64 player v5. Die MP3-Dateien müssen je nach verwendetem Setup z.T. in demselben Verzeichnis auf dem verwendeten Datenträger vorliegen, in dem sich die Software zum abspielen befindet.
Audio-Ausgänge[Bearbeiten | Quelltext bearbeiten]
Das Stereo-Ausgangssignal steht an zwei Cinch-Anschlüssen (linker und rechter Kanal) sowie einem 4-Pin-Audio-Anschluss, wie er von CD-ROM- oder DVD-Laufwerken bekannt ist, zur Verfügung.
Interne Funktion[Bearbeiten | Quelltext bearbeiten]
Die Kommunikation zwischen DSP und Computer erfolgt über einen CPLD, der automatisch eine Konvertierung der MP3-Daten von parallel nach seriell vornimmt, sowie einer schlanken I²C-Schnittstelle.
Direkt mit Einschalten des Computers ist der DSP bereit, MP3-Daten und I²C-Befehle zu empfangen. Wenn MP3-Daten in's Datenregister geschrieben werden, erfolgt die Wiedergabe, sobald ausreichend Daten zum Decoding vorhanden sind. Das Senden eines Bytes an den MP3-Decoder benötigt etwa 10 CPU-Zyklen. Daher muss das fortlaufende Senden von MP3-Daten verzögert werden. Empfohlen wird dazu für PAL-C64 der Befehl NOP und für NTSC-Geräte BIT $80.
Um Pufferüberläufe des Decoders zu vermeiden, muss Bit 7 des MP3-Datenregisters regelmäßig abgefragt werden. Es gilt als sicher, wenn diese Abfrage nach maximal 16 gesendeten Bytes erfolgt. So leidet einerseits die Transfergeschwindigkeit der Daten nicht unnötig. Auf der anderen Seite hat der MAS3507 selbst zumindest geringe Kompensationsmöglichkeiten bei Pufferüberläufen.
Zugriff auf die internen Register des DSP erfolgt mittels der I²C-Schnittstelle.
Register[Bearbeiten | Quelltext bearbeiten]
Die Register der I²C-Schnittstelle werden im C64 im I/O-Bereich ab $DE00 eingeblendet.
$DE04 (Schreibzugriff): MP3-Datenregister
In dieses Register geschriebene Bytes werden direkt zum MP3-DSP geschickt. Der Transfer benötigt etwa 10 CPU-Taktzyklen (8680 ns).
$DE04 (Lesezugriff): MP3 Statusregister
Bit 7: 1 = mehr Daten benötigt, um das Decoding vornehmen zu können; 0 = MP3-Puffer voll
$DE05 (Schreib-/Lesezugriff): I²C-Datenregister
Bit 0: 1 = I²C Data auf 'high' setzen; 0 = I²C Data auf 'low' setzen
$DE06 (Schreib-/Lesezugriff): I²C Clock-Register
Bit 0: 1 = I²C Clock auf 'high' setzen; 0 = I²C clock auf 'low' setzen
Weiterführende als die hier beschriebenen Einzelheiten sind dem entsprechenden Datenblatt zu entnehmen.[4]