WSR

wsr

BANDAI社WonderSwanの曲データを演奏するためのフォーマット。

演奏方法

Audio Overload、若しくはOswan等のWonderSwanエミュレーター、再生用プラグイン(in_wsr)で可能。


作成方法

WSRフォーマットはOswan等のROMイメージと同じフォーマットであり、演奏プログラムと曲データで構成されるROMイメージを作る事で行える。

又、WTDにて、MML(Music Macro Language)をWSC形式にコンパイルする事でも可能。但し、1ファイル中1曲となる。
Audio Overloadにて再生するには、拡張子を"wsc"から"wsr"に変更しなければならない。

既存ROMデータからの切り出しについては、やはりNSFなどと同じくCPU(V30MZ (80186))の仕様を把握しなければ難しい。
デバッガー付きのWSエミュレータはMednafenのみ?

再生用プラグイン(in_wsr)+ソース


winamp用

  • 上記のin_wsrを使う。
    • なおin_wsrはベースとなったOswanのバージョンが0.70と古いため
      Oswan1.73やAudioOverloadと比べてサウンドの再現性が低めとなっている。

KBMediaPlayerの場合

  • Player作者がin_wsrから移植を行ったkbwsrを用いて再生可能
    • KbMedia Player Version 2.80beta6以降に同梱されている。
  • in_wsrはkbwinampを用いることで一応使用できるが以下の問題点あり。
    • .wsrの拡張子に対応していないためプレイリストを介してしかファイルを読み込めない
    • プレイリストで番号指定をして再生しても
      最初の曲番号固定+同じファイルを連続再生するたびに曲番号が+1hされてしまう。
    • 再生時間が5:00+フェード時間に固定されてしまう。

foobar2000の場合

    • http://ux.getuploader.com/foobar2000/ にある foo_input_wsr で再生できる。
    • こちらは2015-09-12 ver0.25以降よりエミュレーションコアを
      mednafen、Oswan v1.73、in_wsr 2006-05-03の三つから選択できるようになっている。


添付資料


WSR形式のファイルフォーマット


WSRファイルとメモリ空間の関係
WSR形式のファイルサイズは、64k×整数[Byte]のサイズとなり、
64kByteのファイルの場合、物理アドレス0xF0000-0xFFFFF
128kByteのファイルの場合、物理アドレス0xE0000-0xFFFFF
256kByteのファイルの場合、物理アドレス0xC0000-0xFFFFF
のように配置される。
WSR形式の最後の32Byteはヘッダー領域であり、以下表の通り。

Address Size Contents
0xFFFE0 4Byte 文字列"WSRF"
0xFFFE4 1Byte Version(現在は、0x00)
0xFFFE5 1Byte 最初の曲番号
0xFFFE6 10Byte 予約領域
0xFFFF0 5Byte x86系CPUのスタートアップ(通常、far JMP命令が書かれる。)
0xFFFF5 1Byte 予約領域
0xFFFF6 2Byte メーカーコード
0xFFFF8 1Byte タイトルコード
0xFFFF9 1Byte バージョン
0xFFFFA 1Byte ROM容量(※1)
0xFFFFB 1Byte RAM容量(※2), EEPROM容量(※3)
0xFFFFC 1Byte ROMのwait数
0xFFFFD 1Byte Sub System LSIの有無
0xFFFFE 2Byte チェックサム

※1 ROM容量
 0x00 1Mbit
 0x01 2Mbit
 0x02 4Mbit
 0x03 8Mbit
 0x04 16Mbit
 0x05 24Mbit
 0x06 32Mbit
 0x07 48Mbit
 0x08 64Mbit
 0x09 128Mbit

※2 RAM容量
 0x?0 なし
 0x?1 256Kbit
 0x?2 1Mbit
 0x?3 2Mbit

※3 EEPROM容量
 0x0? なし
 0x1? 1Kbit
 0x2? 2Kbit
 0x3? 4Kbit
 0x4? 8Kbit
 0x5? 16Kbit
 0x6? 32Kbit
 0x7? 64Kbit
 0x8? 128Kbit


スタートアップ
CPUのレジスタには、以下の値が入って開始される。
CS = 0xFFFF (x86系CPUの仕様)
IP = 0x0000 (x86系CPUの仕様)
AX = 演奏する曲データの番号 (通常のWonderSwanエミュレータでは設定されない)



WonderSwanのメモリについて

Address 内容
0x00000~0x03FFF WonderSwan本体のS-RAM(V-RAMも兼ねる)
0x04000~0x0FFFF WonderSwanColorで拡張されたS-RAM(V-RAMも兼ねる)
0x10000~0x1FFFF RAM Bank (カートリッジ内)
0x20000~0x2FFFF ROM Bank1 (カートリッジ内)
0x30000~0x3FFFF ROM Bank2 (カートリッジ内)
0x40000~0xFFFFF ROM(WSRファイルのROMイメージは、ここに配置される)



WonderSwanのI/O Deviceについて

Sound DMA
0x4A(word) 開始アドレス(下位16bit)
0x4C(byte) 開始アドレス(上位 4bit)
0x4E(word) 送信サイズ(下位16bit)
0x50(byte) 送信サイズ(上位 4bit)
0x52(byte)
 bit7 = 0:DMA停止 / 1:DMA開始
 bit5 = 0:インクリメント / 1:デクリメント
 bit6 = ?
 bit4 = ?
 bit3 = 0:1shot / 1:Loop
 bit2 = 0:Play / 1:Stop
 bit1 = Sampling Rate ( 10:12kHz / 11:24kHz )
 bit0 = Sampling Rate ( 00: 4kHz / 01: 6kHz )


SCC音源
0x80(word) Pitch1(ch1)
0x82(word) Pitch2(ch2)
0x84(word) Pitch3(ch3)
0x86(word) Pitch4(ch4)
0x88(byte) Volume1(ch1)
0x89(byte) Volume2(ch2)
0x8A(byte) Volume3(ch3)
0x8B(byte) Volume4(ch4)
0x8C(byte) Sweep Level(ch3)
0x8D(byte) Sweep Time(ch3)
0x8E(byte) Noise Mode(ch4)
0x8F(byte) Wave Table Address
0x90(byte) Channel Mode
0x91(byte) Output Mode
0x92(word) Random
0x94(byte) PCM Volume


タイマー
0xA2(word) Status
 bit3 = V-blank 0:1shot / 1:Loop
 bit2 = V-blank 0:Disable / 1:Enable
 bit1 = H-blank 0:1shot / 1:Loop
 bit0 = H-blank 0:Disable / 1:Enable
0xA4(word) H-blank(周期)
0xA6(word) V-blank(周期)
0xA8(word) H-blank(カウンター)
0xAA(word) V-blank(カウンター)


割り込みコントローラ
0xB0(word) Interrupt Vector(下位3bitは無効)
 ※設定した数値から8個が、割り込みベクタの番号になる。
0xB2(word) Disable / Enable
0xB4(word) Interrupt Cause(割り込み要求)
0xB6(word) EOIの発行

0xB2,0xB4,0xB6の各bitについて
 bit7 = H-blankタイマー割り込み
 bit6 = V-blank帰還開始
 bit5 = V-blankタイマー割り込み
 bit4 = 描画ライン検知割り込み
 bit3 = シリアル受信レディー
 bit2 = カセット割り込み
 bit1 = キー割り込み
 bit0 = シリアル送信エンプティー


Bank
0xC0(byte) アドレス空間0x40000~0xFFFFFのBank切り替え(アドレスラインA20~A23を指定)
0xC1(byte) RAM bankの切り替え
0xC2(byte) ROM bank1の切り替え(アドレスラインA17~A23を指定)
0xC3(byte) ROM bank2の切り替え(アドレスラインA17~A23を指定)



なお、WSR形式のプレイヤーの多くは、音楽の再生に必要な機能のみを実装したWonderSwanエミュレータであり、
キー、LCD画面、シリアル送受信等のデバイスは使用出来ない事が多い。

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2019年07月01日 23:16