
 wsr plugin for winamp

  - WonderSwanの曲を再現するのが目的なWinamp pluginです。
    拡張子が wsr なファイルが演奏可能です。


 wsr format
  - ファイルのサイズは 64KB*n (n=1,2,3,...) とします。
  - このフォーマットのヘッダーは、ファイルの最後の32バイトになります。
    (ヘッダーとは言わずフッターになるんでしょうけど)

    offset size 内容
    ------ ---- -----------------------------
     0x00  0x04 WSRFという文字列
     0x04  0x01 バージョン番号 (今は00)
     0x05  0x01 最初の曲番号
     0x06  0x10 予約
     0x10  0x06 起動命令 (Jmp命令)
     0x16  0x01 (Developer ID)
     0x17  0x01 (Minimum support system)
     0x18  0x01 (CartID)
     0x19  0x01 (??)
     0x1a  0x01 (ROM Size)
     0x1b  0x01 (SRAM/EEPROM Size)
     0x1c  0x01 (Additional capabilities)
     0x1d  0x01 (RTC)
     0x1e  0x02 (Checksum)

     0x10の起動命令というところですが、ここからCPUが処理を開始しますので
     Jmp命令を置いて好きなアドレスに飛んでください。
     0x16〜0x1fは使っていませんが、ROMからコピーしておいてください。
     DeveloperIDやCartIDがもしかしたら役に立つかもしれませんので。

  - CPU(V30MZ)の実行手順は以下のような感じ。
    1. AX=曲番号
    2. CS=0xFFFF, IP=0x0000として実行開始
       →つまり、メモリ上では 0xFFFF0 の位置から実行開始。これが上記の起動命令という場所。

    割り込みの設定などは、初期処理の中で行ってください。割り込みベクターはRAM上になります。
    kss,hes等の場合は、初期処理をしたらRetしますが、このwsrの場合はRetしないでください。
    初期処理が終わってやることが無くなったら、無限ループでもさせておいてください。

  - 上記の説明は不親切なので、詳しくはソースを見てください。
    たぶん、WonderSwanの挙動が分かれば、何をすればいいのか分かると思います。
    起動時に AX=曲番号 となっていることが、wsr player としての挙動なだけで、
    他のことについては普通に動いているだけだからです。


 2006/3/32
  - 最初のリリース

 2006/4/6
  - Voice出力の修正
  - 波形データの上位／下位ニブル読み込み反転

 2006/4/13
  - CPUコアが無限ループに陥ることがあったので修正
  - ノイズの擬似乱数の処理を OSWAN のソースに合わせた
  - VBlankとHBlankの割り込みが同時に入ると片方を無視していたので、
    まじめに割り込み判定するようにした
  - 「(周波数&0x7FF) = 0x7FF」の場合は音を出さないようにした
    (ロックマン&フォルテで余計な音が出ていたので)

 2006/4/14
  - 前回の周波数判定は間違っていたようなので、「周波数 = 0xFFFF」の場合は音を出さないに変更
  - 擬似乱数の処理にミスがあったので修正

 2006/4/15
  - Sound DMAの転送速度が可変だったみたいなので実装してみた
    (4種類の転送速度のうち、2つは速度が不明なので不完全)
  - PCMVoiceのボリュームに対応

 2006/5/3
  - Sound DMAの転送速度を変更
    4種類の転送速度を 12KHz/16KHz/20KHz/24KHz になるようにしてみた (実際がどうかは知らない)
  - 周波数の初期値を 000 → 7FF に変更した
    (ガンダムSEEDのノイズは初期値の周波数のまま鳴らしていて、たぶん7FFじゃないかと思ったので…。実際がどうかは知らない)
  - ギルティギア プチ2のドラムは、PCMVoice出力を使わず、普通に鳴らしておきながら波形メモリをひたすら更新していく
    という手法を使っているので、波形メモリの更新時にも出力波形に反映されるようにしてみた

 ソースについて
  - このソフトは OSWAN 0.70 のソースから曲演奏に必要な部分を抜き出して
    作ったものです。基本的には画面表示やボタンの入力が無いだけの
    エミュレータです。
  - このソースの改造、配布は自由に行ってください。