なるほどよくわからん(MAME雑記)【解決】

ROM抽出,エミュレーター,日常

MAMEのROM読込のバリエーションについて

Twitterでも書いたのですが、よくわからんので書きました!
わかる人はコメントで突っ込んでくれると幸いです。

ROM_LOAD16_BYTE は1バイト飛ばしで交互に読み込む形式
0101010101010101…ODD/EVENでよく使います

ROM_LOAD16_BYTE(name,offset,length,hash)    ROMX_LOAD(name, offset, length, hash, ROM_SKIP(1)

古いMAMEソースで確認、これはわかりますROM_SKIP(1)とありますから

上記のMSC_extract_v2.zipに同梱されている
Bswap.exeで分離するなら、最初についてるoddeven.txtでいけますね。

次が ROM_LOAD32_WORD なんですが
ROM_SKIP(2)とありますので2バイト飛ばしで交互によむ形式
00110011001100110011でROM_LOAD16_BYTEよりも1バイト増えてます

ROM_LOAD32_WORD(name,offset,length,hash)    ROMX_LOAD(name, offset, length, hash, ROM_GROUPWORD | ROM_SKIP(2))

2バイト飛ばしなので、8の倍数を無視して雑にやるならSwapsetting.txtはこうなるはず。

4
0	0
1	0
2	1
3	1

こちらは問題なさそうかなと。

ROM_LOAD32_WORD_SWAP

#define ROM_LOAD32_WORD_SWAP(name,offset,length,hash) ROMX_LOAD(name, offset, length, hash, ROM_GROUPWORD | ROM_REVERSE | ROM_SKIP(2))

ROM_REVERSE(反転)と ROM_SKIP(2)がついていますので
反転は入れ替え、SKIP2は2バイト飛ばしになるはず

A1 A2 をロードするとA2A1に入れ替わり
さらに2バイト飛ばすのでダミーに00を入れるとするとA2 A1 00 00 ですね
A1 A2 A3 A4を入れると A2 A1 00 00 A4 A3 00 00になります。

ROM1がA1 A2 A3 A4でROM2がB1 B2 B3 B4だと
A2 A1 B2 B1 A4 A3 B4 B3になるわけです。うん、だんだん目がグルグルしてきた。

4
1	0
0	0
3	1
2	1

これでいけそうな感じ?(あやうい

こちらで検証されてるので間違いないと思います。詳細はリンク先の続きでどうぞ。

ここから本題

ROM_LOAD64_WORDなんですが
0,2,4,6と4ファイルの指定がありまして(オフセットの指定とのこと)
とりあえず交互で複数ファイルというのはわかりました、ソースを見てみましょう

ROM_LOAD64_WORD(name,offset,length,hash)    ROMX_LOAD(name, offset, length, hash, ROM_GROUPWORD | ROM_SKIP(6))

ROM_SKIPを見ると6になってます。
ここら辺でこんがらがるのですよねえ;
000000222222444444666666000000222222444444666…
ということなのかな?(まったく違いました!

追記 スクラップAさんが、とてもわかりやすく教えてくださいました!

素晴らしい、このわかりやすさ!!もう足を向けて眠れませんよ!(圧倒的感謝

8
0	0
1	0
2	1
3	1
4	2
5	2
6	3
7	3
16
0	0
1	0
2	1
3	1
4	2
5	2
6	3
7	3
8	0
9	0
10	1
11	1
12	2
13	2
14	3
15	3

これで大丈夫だとおもいます!
Swapsetting.txtの文字間空白はスペースではなくTABですのでご注意を。
すっきり解決しましたが、やっぱメモリ回りとか
プログラミングやら基礎部分やらの知識がないんで勉強せねば;と痛感しました。