SegaAges2500 テトリスコレクションの抽出

ROM抽出,エミュレーターFinalBurnNEO,MAME,エミュレーター

PS2版 テトリスコレクションの抽出

抽出は全て自己責任でお願いいたします。
記述ミスなどのまちがいがありましたら
お手数ですが、コメントにて指摘をお願いいたします。

アーケード版の動作には、セガのようかん(FD1094)の鍵が必要になる物があります
羊羹の鍵と復号化ROMのもろもろ関しては、前回の記事を参考にして下さい。

特に対策その3とリンク先をよく読むと
いろいろな事が分かるかと思います。

必要なもの

スクラップAさんの記事より
メタルスラッグコンプリート抽出用ツールである
MSC_extract_v2.zipをダウンロードしておきます。

解凍したのちBswap.exeとoddeven.txtとbcut.exeを任意の作業場所にコピーしましょう。

Bloxeed (System 16B, PS2 data file) 隠しタイトル

FinalBurnNeoのみセットが追加されているようです。

# blox16b.zip

bs16b.p00
bs16b.scr
bs16b.obj
bs16b.snd

鍵なども必要なくblox16b.zipとして圧縮すればOKです。

Bloxeed (Japan, FD1094 317-0139)

動作には鍵が必要になります。

#dummy_ff_64k.ps1

# 任意の名前
$filePath = "dummy_ff_64k.tmp"
# 任意の容量
$fileSize = 64kb
# FFで埋める
$fillByte = 0xFF

#書込
$fileStream = New-Object IO.FileStream($filePath, [IO.FileMode]::Create)
$byteArray = New-Object byte[] $fileSize
for ($i = 0; $i -lt $fileSize; $i++) {
    $byteArray[$i] = $fillByte
}
$fileStream.Write($byteArray, 0, $byteArray.Length)
$fileStream.Close()

ダミーのFF埋め64kbファイルを用意します。

# bloxeed.zip

# bs18d.obj
BSwap.exe d B bs18d.obj oddeven.txt opr-12887.c11 opr-12891.a11

# bs18.snd
copy bs18.snd epr-12888.a4

# bs18d.p94
BSwap.exe d B bs18d.p94 oddeven.txt odd.tmp even.tmp

copy /b odd.tmp+dummy_ff_64k.tmp epr-12910.a5
copy /b even.tmp+dummy_ff_64k.tmp epr-12911.a6

# bs18.scr
# opr-12884.b1
# opr-12885.b2
# opr-12885.b3
# HSPスクリプトで抽出

# 317-0139.key

HSP3.1で動作確認済。
実行ファイル自動作成でbs18.exeを作ったら
bs18.scrのあるフォルダで実行します。

#packopt name "bs18"
	notesel filedat

;//bg
	noteload "bs18.scr" : filesize = strsize

	sdim outbuf,filesize/4,3
	repeat filesize/4
		ofs1 = cnt*4 : ofs2 = cnt
		tmp = 0 : repeat 4 : tmp = (tmp<<8)|peek(filedat,ofs1+cnt) : loop

		dim bytebuf,3
		repeat 8
			tmp2 = tmp&($70000000>>(cnt*4)) : tmp2 = tmp2>>(28-cnt*4) ;特定位置の4bitを取り出す
			tmp3 = $80>>cnt
			if (tmp2&1)!0 : bytebuf.0 = bytebuf.0 | tmp3
			if (tmp2&2)!0 : bytebuf.1 = bytebuf.1 | tmp3
			if (tmp2&4)!0 : bytebuf.2 = bytebuf.2 | tmp3
		loop
		repeat 3 : poke outbuf.cnt,ofs2,bytebuf.cnt : loop
	loop

	bsave "opr-12884.b1", outbuf.0, filesize/4
	bsave "opr-12885.b2", outbuf.1, filesize/4
	bsave "opr-12885.b3", outbuf.2, filesize/4

end

後は鍵と一緒に圧縮すれば完了です。

Bloxeed (World, C System) 隠しタイトル

JACKさんのコメント(感謝!)を参考に



抽出ファイルをbloxeedc.zipとして圧縮すればOK
海外輸出とされたようで英語になっていますね。

Flash Point (set 2, Japan, FD1094 317-0127A)

動作には鍵が必要です。

#flashp.obj
BSwap.exe d B flashp.obj oddeven.txt opr-12597.b5 opr-12596.b1

#flashpd.p94
BSwap.exe d B flashpd.p94 oddeven.txt epr-12598b.a1 epr-12599b.a4

# flashp.snd 
copy flashp.snd epr12592.a10

# flashp.scr
# HSP3.1 別スクリプトにて抽出 
# opr-12953.a14
# opr-12954.a15
# opr-12955.a16

# 317-127a.key

HSP3.1で動作確認済。
実行ファイル自動作成でflashp.exeを作成し
flashp.scrがある場所で実行します。

#packopt name "flashp"
	notesel filedat

;//bg
	noteload "flashp.scr" : filesize = strsize

	sdim outbuf,filesize/4,3
	repeat filesize/4
		ofs1 = cnt*4 : ofs2 = cnt
		tmp = 0 : repeat 4 : tmp = (tmp<<8)|peek(filedat,ofs1+cnt) : loop

		dim bytebuf,3
		repeat 8
			tmp2 = tmp&($70000000>>(cnt*4)) : tmp2 = tmp2>>(28-cnt*4) ;特定位置の4bitを取り出す
			tmp3 = $80>>cnt
			if (tmp2&1)!0 : bytebuf.0 = bytebuf.0 | tmp3
			if (tmp2&2)!0 : bytebuf.1 = bytebuf.1 | tmp3
			if (tmp2&4)!0 : bytebuf.2 = bytebuf.2 | tmp3
		loop
		repeat 3 : poke outbuf.cnt,ofs2,bytebuf.cnt : loop
	loop

	bsave "opr-12953.a14", outbuf.0, filesize/4
	bsave "opr-12954.a15", outbuf.1, filesize/4
	bsave "opr-12955.a16", outbuf.2, filesize/4

end

鍵と一緒に圧縮で完了です。

Flashpoint (Mega Drive) 隠しタイトル

sdgファイルをbinまたはmdに拡張子リネーム。
メガドライブ対応エミュレーターに読み込ませればOK

Tetris (Mega Drive)

tetris.sgdファイルをbinまたはmdに変更して
メガドライブ対応エミュレーターに読み込ませればOK

Tetris (Japan, System E)

JACKさんのコメントを参考に

tetrisse.zipとして抽出ファイルを圧縮すればOK

Tetris (set 2, Japan, System 16B, FD1094 317-0092) (CRC不一致・動作不良)

正規セットには鍵が必要になります。
確認したところmpr-12194.b1と12195.b5がCRCエラーとなりました
カンでXORかかってる気がします。情報求。
64kbFFダミーを用意します、前出のブロクシード記事を参考にして下さい。

# 初出時ROM名を盛大に間違えていたので修正。

# tetrisd.p94
# ODD/EVEN
BSwap.exe d B tetrisd.p94 oddeven.txt epr12192.rom epr12193.rom

copy /b epr12192.rom+dummy_ff_64k.tmp epr-12192.a5
copy /b epr12193.rom+dummy_ff_64k.tmp epr-12193.a7

# tet_dec.p00 & tet_prg.p00 CRCBAD
# ODD/EVEN 
# FD1094復号済データが存在?
# おそらくbootleg_epr-12193.a7 と bootleg_epr-12192.a5 だが CRC不一致

copy /b tet_dec.p00+tet_prg.p00 tetrisrom.tmp
BSwap.exe d B tetrisrom.tmp oddeven.txt 01.bin 02.bin

# tetris.obj CRCBAD
# ODD/EVEN
# おそらくmpr-12194.b1 & mpr-12195.b5 だが CRC不一致

BSwap.exe d B tetris.obj oddeven.txt xx.bin yy.bin

# tetris.snd
copy tetris.snd epr-12168.a7

# tetris.scr
# epr-12165.b9
# epr-12166.b10
# epr-12167.b11
# HSP3.1で別記スクリプトを実行する事で生成可能

# 317-0092.key

以下はHSP3.1で動作確認。実行ファイル自動作成を行い、tetris.scrがある場所で実行。

#packopt name "tetris"
	notesel filedat

;//bg
	noteload "tetris.scr" : filesize = strsize

	sdim outbuf,filesize/4,3
	repeat filesize/4
		ofs1 = cnt*4 : ofs2 = cnt
		tmp = 0 : repeat 4 : tmp = (tmp<<8)|peek(filedat,ofs1+cnt) : loop

		dim bytebuf,3
		repeat 8
			tmp2 = tmp&($70000000>>(cnt*4)) : tmp2 = tmp2>>(28-cnt*4) ;特定位置の4bitを取り出す
			tmp3 = $80>>cnt
			if (tmp2&1)!0 : bytebuf.0 = bytebuf.0 | tmp3
			if (tmp2&2)!0 : bytebuf.1 = bytebuf.1 | tmp3
			if (tmp2&4)!0 : bytebuf.2 = bytebuf.2 | tmp3
		loop
		repeat 3 : poke outbuf.cnt,ofs2,bytebuf.cnt : loop
	loop

	bsave "epr-12165.b9", outbuf.0, filesize/4
	bsave "epr-12166.b10", outbuf.1, filesize/4
	bsave "epr-12167.b11", outbuf.2, filesize/4

end

コメントで解析をいただいたJACKさん
ありがとうございます、この場でお礼申し上げます。

テトリスだけガード堅いのは・・・そういうことでしょうか
幸いにもプレミア付いていないタイトルです
まぁそんな事を言ったら、以前はテトリスの基板も1000円とかでしたけど。
単純に解析多過ぎで、ボケ倒してる可能性もありますが。

一部の機種で必要となる、暗号化解除の鍵は
現在のところ抽出出来ていません。ようかん記事を読んでください。



ディスク内から抽出できる情報がありましたら
ぜひコメントいただければ幸いです。
PCSX2のメモリダンプしちゃえと言う話もありますが、手つかずです。