wsr
BANDAI社WonderSwanの曲データを演奏するためのフォーマット。
演奏方法
作成方法
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の場合
添付資料
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画面、シリアル送受信等のデバイスは使用出来ない事が多い。
最終更新:2019年07月01日 23:16