[ファイル] OCRソフトを使いマシン語をmztデータに変換
OCRソフトを使用して昔のダンプリストをエミュレーターに使えるファイルにしたい
■ 序
2001年のある寒い夜、工学社刊「MZ-1500活用研究」をフロの中でボケっとしながら「走れスカイライン」というゲームの記事を読んでおりました。
「うー...他のゲームは当時買っちまったが、このゲームは買ってねぇ。(理由:車キライ)
今さらクソ長ぇダンプリスト入力するのも面倒くせぇ!...楽して入力してぇヤツはOh! Hell Yeah!!」
Oh! Hell Yeah~!!(会場大絶叫)
↑深い意味はないです。
ちなみに他のゲーム(マジックファクトリー/ノンバーラパニック)を買った後にこの本が出ましたので入力する必要はありませんでしたし、なにせリストも長いので実際のところ当時は入力する気も全然ありませんでした。
しかし最近は便利な時代になりましたので、WindowsでもMZ-1500を動かせる時代...
ええ時代や...だったらスキャナもあることだし、OCRソフトでも使って簡単にMZエミュレータに使用可能なファイルにできるのではなかろうか?
とゆー怠け心から作業を始めました。(当時の長い16進のリストをシコシコと時間をかけて入力していた人なら、絶対に同じような事を考えているだろーと思った。)
■ OCRソフト
とりあえずOCRソフトにはどんなソフトがあるか、を調べるには、「infoseek」なりの検索エンジンで「OCRソフト」と入力。
なかには物好きな人がいるもので、OCRソフトの比較検証をされているページもありましたが、
自分の目で確かめる必要があるので、ソフトメーカーから体験版をダウンロードして使用することにしました。
こんなトコロでしょうかね...2001年1月現在。
ソフト名
読んde!!ココ Ver6.0
e.Typist v6.0 バイリンガル
Scanbox Pro OCR V5.0
OKREADER 2000
他にもいくつかOCRソフトを作っているメーカーはありましたが、体験版がダウンロードできないとかそーいった事情で割愛。(サイトが解りにくいので割愛したのもありましたな...)
■ 入力リスト
上記が今回のリストの一部を縮尺したものです。
実際は400dpiの白黒256色のbmpファイルとしてスキャニングします。
(なかには白黒2値にしないと読み込んでくれない製品もありました。そーゆー場合はそのように変換。)
実際にはこのくらいの大きさになります。
ほんのりと髪の毛がスキャニングされてしまったが、これはあえて髪の毛を除いて再スキャンしないでどれだけ認識力があるかも検証できるのではないだろうか?と思ってそのままテストしてみました。
■ 認識
大体どのソフトも認識したい部分を「枠」で囲って認識させます。
実際に認識させたいのはリスト部分なので以下の部分になります。
ソフトによっては「傾き自動補正」、「日本語/英語別認識」、「スキャン間違い修正学習辞書」などのユーザーライクな機能がいろいろとあり、なかなか面白かったですが、
今回は「0123456789ABCDEF」の16文字をいかに正しく認識してくれるか、が重要なわけで。
以下のリンクにあるTXTファイルがそれぞれの認識結果。
「eTypist」は体験版が3日しか使えないのでファイルが取れませんでした。
体験版はせめて30日くらい使えるようにしてくれい。
読んde!ココ
OK_READER
SCANBOX_PRO
それぞれが機能/識字率に一長一短があるので「ベストBuy」とかはしません。
要は使ってる本人が「これいいんじゃねーの?」と思うのがベストなのだ。
ワタシの場合は「SCANBOX PRO」が気に入りました。まぁどれも及第点は満たしているんですが。
■ 修正作業
使って思ったのは大抵のソフトが「O(オー)」と「0(ゼロ)」は大体のソフトが誤認識をしました。
あとはソフトに依って認識ミスの特徴が色々と有りました。
(A → 4 とか 1→l(小文字のエル) とか...)
14ページほど有ったソースリストを全部処理して1つのTXTファイルにまとめて、
それぞれの変換の特徴を掴んだ上で、テキストエディタ(メモ帳など)で一括に「置換」をします。
ついでに16進数以外の文字(G,H,I,J...)がリスト内にないかを確認しておきます。
(「!」や「?」などの記号に関しては「記号を認識しない」設定が大体のソフトにあったので
気にしないで大丈夫だと思う。)
31 00 CF CD 03 70 CD 03
70 21 00 15 22 29 CD 21
00 B0 11 00 15 01 00 04
ED B0 AF 32 13 CD 00 00
F3 21 80 CD 06 1F 36 00
23 10 FB AF 21 00 00 22
A0 CD 32 A2 CD 32 A3 CD
31 00 CF D3 E3 AF 32 97
CD 21 00 00 22 9C CD CD
2C 67 CD E1 65 CD 1B 00
28 FB 00 00 00 00 00 FE
33 CA C6 60 FE 32 20 07
3E 01 32 97 CD 18 04 FE
31 20 E2 CD 1B 00 20 FB
11 94 66 CD 15 00 CD CE
60 CD 1B 00 28 FB FE 64
上記のリストがこんな感じの内容のTXTファイルになります。
例えば1行目の「31 00」だが、「31」と「00」の間にはスペース(&h20)が入り、
各々の行には改行マーク(&h0D,&h0A)が最後に入っています。
これらはエディタで消しておきます。この作業はテキストエディタではなく、
バイナリエディタで行うと楽に出来ます。
上記の作業を行うと
3100CFCD0370CD03702100152229CD21....
ってな具合でズラズラと16進数が並んだTXTファイルが出来上がります。
場合によってはファイルの最後に「EOF(エンドオブファイル=&H1A)」が入るのでそれも除いておきましょう。
■ MZT形式ファイルへの変換
TXTファイルはそのままMZのエミュレータでは使用できませんので、
バイナリファイルに変換し、その後にMZ用のヘッダを付ける必要があります。
作業としては
(1).バイナリに変換
(2).ヘッダを付属
まず(1).ですが、便利なことにテキスト→バイナリ変換ツールが存在しています。
「CovBtT & CovTtB (Win)」 というツールです。感謝感激雨アラレ。
(場所は http://www.vector.co.jp/soft/win95/util/se175394.html )
(2).に関しては、とりあえずテキトーにこれをバイナリファイルとしてヘッダファイルを作っておきます。
(例)
ファイル名:TEST
開始アドレス :$1200
ファイルサイズ:$1020
実行アドレス :$1280
こんな感じになります。
01 54 45 53 54 0D 4E 41 4D 45 05 3F 20 54 45 53
54 0D 20 10 00 12 80 12 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
色つきの部分は実際のプログラムのアドレスに変更しておく必要があります。
これを (1).で作成したファイルと合体させて、「テスト.mzt」など名付けて保存します。
■ エミュレータ上での作業
ダンプリストと比較してチェックサムを確認後、正しいファイル名で保存して実行します。
保存されたファイルは「$qd$.mzt」になりますので、解りやすい名前にしておきましょう。
そんだけ。
実際にOCRソフトや変換ソフトを試行錯誤して使いながらの作業でしたので、
エミュレータや実機上でダンプリストを入力する時間と比較すると、
2分の1~3分の1くらいの作業時間でしたが、
慣れると5分の1~10分の1くらいの作業時間で終わるようになると思います。
あとは、OCRソフト側で「0123456789ABCDEF」以外の認識をしないような
排他制御認識機能があればもっと楽に作業が行える、と思いますね。
でも、全部自動で出来る日が来るとええなぁ...
いや、ステキな女性型アンドロイドに入力/変換してもらうとかの方がええですな...
そんな未来に期待したいボクです。
...それまでに入力するリストがあるのがどうか、は疑問だけんど。
古PC関連のページ
http://www.retinamix.com/~marus/omake/ocr.html
0 件のコメント:
コメントを投稿