AY-3-8910チップ(またはYamaha YM2149F)のサウンドは、USB経由でPCのZX Spectrumから送られます

YM2149F音楽シンセサイザーがコンピューターのLPTポートに正常に接続されてから約1年が経過しました。 LPTは確かに優れていますが、時間が止まることはなく、LPTポートを備えたコンピューターまたはラップトップを見つけることはますます難しくなっています。 はい。著者自身(つまり、私)は、システムユニットがあるテーブルの下に毎回登り、LPTボードを他の何か、たとえばプログラマーに貼り付けることにうんざりしていました(私はウィレムLPTプログラマーを持っていますが、それはポイントではありません)。 したがって、今回はYM2149FチップをUSBに接続します。 そしてもちろん、時代に合わせて、ペニー古代のマイクロコントローラーPIC16F628でそれを行います。



画像



要するに、YM2149F(またはその機能的アナログAY-3-8910 )は、Atari ST、Amstrad CPC、ZX Spectrum、MSXなどの古いコンピューターで音楽を再生するために使用される3音声シンセサイザーマイクロサーキットです。 ロシアでは、ZX Spectrumのさまざまなクローンにインストールされているため、このチップは名声を得ています。 旧ソ連でのZX Spectrumの行列の間に、ミュージシャンはこのサウンドプログラマブルジェネレーターのために何千もの曲を書きました。 そして今、あなたはこのチップ専用の音楽を作っている人々を見つけることができます。 記事の最後に、YM / AYのチップチューンの膨大なアーカイブへのリンクが、数百時間連続して聴かれます。



デモ



前回と同様に、開始する前に、最終結果を聞くためのリンクをすぐに提供します: https : //soundcloud.com/tronix286最新のエントリはこのデバイスから作成されました。 最大128Kb / sのMP3を書き込むプレーヤーで録音したため、実際にはデバイスは「明るく」聞こえます。 しかし、音の一般的な考え方は可能です。





なぜそんなに奇妙なコントローラーの選択なのでしょうか? なぜAVR / ARM / iCore i7 / FTDIが最悪ではないのですか? この質問に対する部分的な答えは、トピックの冒頭に記載されています:レトロなシンセサイザー-レトロなマイクロコントローラー! さらに、AY-3-8910とMicrochipには共通のルーツがあります。 一般的に、これは一連の奇妙な状況です。 最初に、PIC16F628マイクロコントローラ用のソフトウェア(ソフトウェア)USB 1.1スタックを実装するライブラリ-16FUSB-で、つまずいた 。 第二に、どこに置くべきかわからないPIC16F628Aのカップルが、長い間横になって塵を集めていました。 第三に、コンピューターには既にソフトウェア(MPLABX、MPASM)が構成されており、PICのプログラマーがいます。 多くの人に知られているAVRのV-USBソフトウェアスタックとは異なり、ハードウェアUSBのないPICにはほとんどプロジェクトがありません。 そしてこれは、歴史的不公正を回復しなければならないことを意味します。



16fusbライブラリサイトの典型的な包含図を次に示します。



画像



16fusbライブラリには、「direct-io」と呼ばれる良い例が付属しています。 意味は簡単です-USBバイトを介して送信し、マイクロコントローラの8本の脚に「表示」されます。 追加の2つの制御信号、つまり、さらに2ビット(または2レッグ)を送信することもできます。 そして反対方向、つまりコントローラーからホスト(コンピューター)へ。

画像



YM2149Fの制御には、8ビットのデータバスD0〜D7と3つの制御信号BC1、BDIR、RESETが使用されます。 BC1とBDIRは、レジスタアドレスとその値の選択を制御し、チップを非アクティブ状態にします。 RESET信号は、すべてのレジスタを元の値にリセットするために使用されます。 したがって、PICからコンピューターへの読み取りは不要です。 必要なのは、コマンドをYMに送信する機能だけです。 そして、別のMKレッグを意味する別の3番目の制御信号が必要です。



特にYM2149Fを制御するためのファームウェアでは、次のことが行われました。





上記のように、別の制御信号-RESETが必要であり、空きレッグはありません。 そのため、PICではなくクォーツではなくクォーツ発振器を使用して、RESET信号の制御に必要な1つのMKレッグ(RA6)を解放しました。 このファミリでは、空中に突き出ているレッグRA5は入力でのみ機能し、出力信号の制御には使用できません。 USBパケット(EOP)の終わりをキャッチするための機能をRB2レッグからそれにシフトすることは可能ですが、それはそれほど単純ではありません-RB2レッグとは異なり、RA5レッグはプログラミングのためにMCLRおよびVPPと機能を共有し、入力はシュミットトリガーとして内部で編成されます。 彼は、ダイオードがトリップするのに十分な電圧がありません。 一方、YM2149Fのクロッキングのために、74HC02チップと3.579545 MHzクオーツに基づいた発振器が組み立てられました。 マイクロ回路の2番目の半分を使用して、同様のジェネレーターとPICを作成しようとしましたが、2つのことを止めました:1)24 MHzの水晶を持っていません(そして古代の母親の水晶発振器がありました)2)方法がわかりません74HC02は、「異なるサイド」とは異なる周波数を持つ場合に動作し、そのうちの1つは非常に高いです(24 MHzは依然として非常に高い周波数です)。 クオーツ用にRA6レッグを解放する別のオプション:BC1およびBDIR信号はこれらの値のみを取ります。



BC1 BDIR 0 0 0 1 1 1
      
      





また、BC1 = 1、BDIR = 0ではありません。74HC02チップの半分からNOTおよびNORロジックを追加し、トランジスタを使用して出力信号を反転することにより、RESETとして使用できます。 もちろん、BC = 1およびBDIR = 0を発行するには、ファームウェアを少し調整する必要があります。



それでも、BDIR信号を制御するRA4レッグはオープンコレクターであるため、電源にプルアップする必要があります-図では、10Kの抵抗R5です。



ソフトウェア



コンピューターの側面からは、音楽プレーヤーとして、チップチューンZX Tuneの優れたクロスプラットフォームプレーヤーがあります。



画像



USBを直接サポートしていませんが、ディレクトリでdlportio.dll / inpout32.dll / inpoutx64.dllライブラリの1つが見つかった場合、オーディオ出力設定( 前のプロジェクト用 )でYM-LPTに切り替えてから__stdcall関数を使用できますvoid DlPortWritePortUchar(unsigned short port、unsigned char val); バイトYM2149を発行します。 ポート0x378データ、ポート0x37aは制御信号を送信します(D1-〜BDIR、D2-BC1、D3-〜RESET)。 したがって、1つの関数DlPortWritePortUcharを使用して小さなスタブライブラリを記述できます。この関数では、バイトの出力をUSBデバイスにリダイレクトします。 inpout32ライブラリのソースコードを基礎として 、バイトの出力をこのデバイスにリダイレクトするスタブ関数を作成しました。 その結果、このスタブライブラリinpout32.dllまたはinpoutx64.dllを 、使用するプレーヤーのバージョン(x86 / x64)に応じて、 ZX Tuneプレーヤーと同じディレクトリに配置し、サウンド設定でaylptデバイスを最上部に移動するだけで十分です (上記のスクリーンショットのように)。



無料でSMSなしでダウンロード



Win XP、Win 7(x32 / x64)のドライバーは、 16FUSB_driver-libusb-win32-1.2.6.0.zipからダウンロードできます。



デバイス図: ym-usb_scheme_1.0.rar

コンパイル済みファームウェア(.hex)およびコンパイル済みDLLスタブ: ym-usb_firmware_and_DLLs_v1.2.rar

ファームウェアソースコード: ym-usb_PIC16F628A_source_v1.2.rar

スタブライブラリのソースコード: inpout32-64_DLL_source_v1.2.rar

General Instruments AY-3-8910 / 8912 Programmable Sound Generator(PSG)data Manual: http : //bulba.untergrund.net/AY-3-8910.rar

デバイスが「生まれた」元のZX.PK.ruフォーラムのトピック:http://zx-pk.ru/showthread.php?t=22202



トラッカー音楽の巨大なアーカイブ: ModlandFTP

ZXミュージックオンライン: http : //zxtunes.com/



すべてに良い!



All Articles