CD Graphics (別名 CDG, CD-G, CD+G) を実験として対応してみようかと思います. とりあえず medfenam のソースコードや CD Graphics の仕様書などを見てます.
調べたことを書いていきます.
CD-ROM2 fifo
CDDA 再生中(CD-ROM read 中でも入りそうですが..?) に fifo に subchannel data が入りそれを 6280 の port から読み込む.
address 0x1ff802.w.4 subcchannel FIFO IRQ MASK address 0x1ff803.r.4 subcchannel FIFO status address 0x1ff807.r.7:0 subcchannel FIFO data (+auto increment) IRQ2 status と IRQ MASK が共に1の場合 IRQ2 の線が low になる.
subchannel の仕様
- 1 sector あたり 98 byte の data を持つ. 先頭 2byte は同期信号.
- 12 byte ごとに P,Q,R,S,T,U,V,W の 8 つに分ける.
- P と Q はどの CD でも使われている. CD Graphics は R から W も使う.
- Compact Disc の仕様では data の並びは 1 byte に P から Wの 1bit ずつを保持する. bit7 が P, bit6 が Q ... bit0 が W となる.
- 各 1bit は MSB ->LSB
subchannel image の仕様
- パソコン上で CD image を作ると .sub のファイルができるが同期信号を捨てて順番を並べてかえている.
- byte offset 0 から 11 を P, byte offset 12 から 23 を Q ... という並びで 1 sector あたり 96 byte となる.
- 経験上 subchannel の data は PCE の CD に限っては(当時の規格として許容される量の)誤りが多い. そのせいなのかドライブによって補正をかける,補正をかけない,全部 data 0にして出すなど対応はばらける.
- subchannel data は CD-G などの派生規格やコピープロテクト目的ではない限り、あまり使われず出力しない場合も多かった.
- subchannel data は通常のCDであればなくても再生成が容易である.
- 一般ユーザーが疑う PCE の CD image の中身が異なる部分は .img の方のデータの中身であって subchannel は調査しないことが多いし、違っていても大した問題ではない.