MPT.BINの上位・下位4Bit入れ替え

教えてもらった情報をもとに、以下のようなswap.rbを用意した。

puts ARGF.binmode.read.unpack('C*').map{|c|c>>4|(c&15)<<4}.pack('C*')

これを使ってMPT.BINを変換

> ruby swap.rb MPT.BIN > out.bin

SJIS見えた!
固定幅のダンプだと見にくいので、00 00かff ffで折り返す整形スクリプトを使う。

puts ARGF.binmode.read.
          unpack('C*').map{|c|c>>4|(c&15)<<4}.pack('C*').
          unpack('H*').first.
          gsub(/../,'\& ').gsub(/00 00|ff ff/,"\n\\&")

出てきた結果から、とりあえずぱっと見でわかるところをメモ
やっぱり座標情報は難しそう

88 88 88 88 4d 50 54 00 06 01 00 01 30 30 30 30
00 00 00 31 00 01 00 xx xx xx xx xx xx 10
00 00          ↑ここが02 03と連番になる
00 00                ↑xの6バイトが座標情報
ff ff
ff ff
ff ff バイト数 ユーザ入力テキスト(SJIS)
00 00 バイト数 地点名テキスト(SJIS)
ff ff 00 01 00
ff ff
00 00
00 00

ちなみに、ここで使ったデータは単なるサンプルで、私の自宅ではないです。