したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

Free

443名無しさん:2024/05/04(土) 11:42:53 ID:1kt4pYwo0
>>442
便宜上 YM2608 OPNA の場合だと、fmopna_2608.h を include してfmopna_t型の構造体を指すポインタとマスタークロック(0もしくは1(非0)で、交互?)を渡して FMOPNA_Clock() を呼び出す度にfmopna_t型の構造体が1クロック(半クロック?)後の状態に更新されるって形だと思います

https://github.com/nukeykt/YM2608-LLE/blob/main/fmopna_impl.h を見ると fmopna_t は最初のメンバーとしてfmopna_input_t型の input を持ってるんですが、fmopna_input_t型は YM2608 OPNA の入力端子に相当するみたいです
具体的には全てのメンバーがint型として定義されてて、clk, ic, cs, wr, rd, a0, a1, data, test, gpio_a, gpio_b, dt0, dm, ad, da とあります
YAMAHA LSI Data Book 音源編(1994-10、CATALOG No.: 7610002)の YM2608B の節(https://www.quarter-dev.info/archives/yamaha/YM2608B.pdf)で、端子機能を見るとこれらが入力(もしくは入出力)の端子として記されています
「変数名,番号,機能」の順に対応を記すと
clk,63,マスタークロック(7.9872MHz)
ic,33,初期化
cs,57,CPUインターフェース チップセレクト信号
wr,58,CPUインターフェース データライト信号
rd,59,CPUインターフェース データリード信号
a0,60,CPUインターフェース バスコントロール信号
a1,61,CPUインターフェース バスコントロール信号
data,2〜9,CPUインターフェース データバス D0(最下位ビット)〜D7(最上位ビット)
test,40,LSIテスト端子
gpio_a,17〜10,汎用I/Oポート A0(最下位ビット)〜A7(最上位ビット)
gpio_b,25〜18,汎用I/Oポート B0(最下位ビット)〜B7(最上位ビット)
dt0,41,外部メモリからのデータ出力 DO0
dm,49〜55,外部メモリからのデータ出力 DO1〜DO7(DO0は48番にはなく上記の41番)
ad,36,ADコンバーター アナログ入力
da,38,ADコンバーター AD変換 基準電圧

見事に(プログラムでのシミュレーションでは必要のない)電源とAD変換用のコンデンサーの入力以外は全て定義されています

同様に、出力も fmopna_t 内に定義されています
「変数名,番号,機能」の順に対応を記すと
int o_gpio_a,17〜10,汎用I/Oポート A0(最下位ビット)〜A7(最上位ビット)
int o_gpio_b,25〜18,汎用I/Oポート B0(最下位ビット)〜B7(最上位ビット)
int o_spoff,34,スピーカー ON/OFF 用スイッチ
int o_a8,42,外部メモリへのアドレス出力 A8
int o_romcs,43,外部メモリに ROM を使用した場合のデータ取り込み用タイミング信号
int o_mden,44,外部メモリに DRAM を使用した場合のデータ取り込み用タイミング信号
int o_we,45,外部メモリインターフェース 有効化信号
int o_cas,46,外部メモリインターフェース CASアドレスラッチ信号
int o_ras,47,外部メモリインターフェース RASアドレスラッチ信号
int o_dm,48〜55,外部メモリへのアドレス出力 A0〜A7、外部メモリへのデータ入力 DI0〜DI7
float o_analog,27,SSG部アナログ信号(ソースフォロワ出力)
int o_sh1,29,DACインターフェース CHANNEL1 ラッチ出力(同期信号)
int o_sh2,30,DACインターフェース CHANNEL2 ラッチ出力(同期信号)
int o_opo,31,DACインターフェース シリアルデータ
int o_s,64,DACインターフェース DAC用ビットクロック
int o_irq_pull,56,CPUインターフェース 割り込み要求信号
int o_data,2〜9,CPUインターフェース データバス D0(最下位ビット)〜D7(最上位ビット)

まとめると、素人目でソースコードを見るに
・fmopna_t のインスタンスを変数に保持する
・fmopna_t.input(fmopna_input_t型)に必要なら値を書き込む
 → FMOPNA_Clock() にポインタ渡してクロック進める
 → fmopna_t の o_〜 メンバーから必要なら適宜出力を読む
 を繰り返す
みたいに使うように見えます

こちらの YAMAHA LSI の資料が参考になるのかも
https://www.quarter-dev.info/archives.php


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板