雑誌掲載リストの打ち込みを攻略?

コメントでのtaktakgkさんから、ログイン1986年5月号にプログラムリストが掲載されたレースゲームの「F」を見たいというリクエストがありました。実は、沢山古い雑誌を持っている者の、プログラムリストの打ち込みをしたことは無かったです。もちろん、「いつかはやりたい」という気持ちは強く、5大誌と呼ばれる1.ベーマガ 2.ログイン 3.ポプコム 4.テクノポリス 5.コンプティーク の他にも、I/O、マイコン、PCマガジン、PiO、プログラムポシェット、、などの雑誌を多数持っています。

雑誌2
雑誌1
ベーマガやログインは創刊号~1990年ごろまではほぼ全冊あると思います。
雑誌3
本棚に入りきらない雑誌たち

他にも1982年ごろからのI/O、コンプティークは1985年以降がほぼ全冊。遊撃手。意外と電波新聞社のゲームリストが掲載されていた月刊マイコン。アソコンとかチャレアベなどの必勝本ですかね。

もちろん、今は1から打ち込むのではなく、スキャナ&OCRでテキスト化し、それをエミュレータに読み込ませればOK、というのは知っていました。それでも、やっぱり「面倒そう」と思って実際に打ち込みをすることはありませんでした。

なので、私自身でも丁度良い機会、雑誌掲載リストの攻略!ということでOCR読み込みにチャレンジしてみました!

雑誌掲載プログラムリストのテキスト化

それでは、早速雑誌掲載プログラムリストのテキスト化方法、テクニックです。

準備するもの

ざっくりと、雑誌に掲載されたプログラムリストを画像化して、OCRというソフトでテキスト化する、という流れです。

1.フラットベッドスキャナー

雑誌を見開いて取り込むためのスキャナーが必要です。600dpiで読み取れれば十分なので、安いスキャナーで十分でしょう。私が使っているのは、EPSONのGT-S640というスキャナ-です。もう6年も前に発売された製品なので、後継機のGT-S650をご紹介します。amazonで2019年1月27日現在、8,817円で販売されています。

EPSON GT-S650

2.画像の修正ソフト

次の工程にあるOCRソフトでの識字率を上げるには、画像を機械が読み取りやすい状態に修正する必要があります。OCRソフトのマニュアルで紹介されていたフリーソフトの「GIMP」があれば十分です。

3.画像をテキストに変換するOCRソフト

テキスト化の心臓部にあたるソフトです。市販のソフトもたくさん出ていますが、ここでは古い雑誌のプログラムリストに特化したOCRソフトをご紹介します。

Program List OCR

eighttails様が運営されている「808 Midway」というサイトで公開されている、フリーのOCRソフトです。その特徴は、、

80年代のパソコン雑誌に掲載されたプログラムの読み取りに特化したOCRです。


808 Midway

お陰様で高い識字率で打ち込み作業はスムーズに行うことができました。ありがとうございました!

4.テキストを整形するエディタ

OCRソフトでテキスト化に成功したプログラムリストですが、残念ながら100%の精度で変換はできません。そのため、テキストファイルを修正する必要があります。また、ベーシックのプログラムはそのままエミュレーターに取り込めますが、マシン語はそのままでは取り込めません。具体的には、アドレス、チェックサム、改行などを削除する必要があります。そのために、テキストエディターを使います。エディターは使い慣れたものでよいと思いますが、私のお気に入りはサクラエディタです。

テキスト化の実行!

準備が整いましたら、いよいよテキスト化の実行です!ここでは、taktakgkさんからリクエストのあった、ログイン1986年5月号掲載のプログラムリスト、「F」を例にして実施いたします。

1.Program List OCRのマニュアルを読む

Program List OCRのマニュアルには、読み取り精度を高めるためのテクニックを作者様が紹介してくれています。また、使用方法も確認をしておきましょう。

Program List OCR マニュアル

2.雑誌掲載プログラムリストの取り込み

この工程は単純に、雑誌をフラットベッドスキャナーで600dpiで読み取れば完了です。こんな感じですね。

600dpiで取り込んだリスト

3.GIMPで取り込んだリストの画像を加工

次の処理は、Program List OCRのマニュアルに書かれていた通り、GIMPを使って画像の明度と文字線の強さを補正します。早速GIMPでリストの画像を開きましょう。

文字が薄い場合、 GIMP を使って補正すると読み取り精度が上がります。
GIMPのメニューから「フィルター」→「汎用」→「明るさの最大値」を実行するとかすれた文字を補正することができます。

私がダウンロードしたGIMPはメニューの一部が英語です。。たぶん、「Filters」→「Generic」→「Dilate」だと思います。

その後、GIMPのメニューから「色」→「しきい値」を用いて画像を2値化しておくことをお勧めします。

こちらは、「色」→「Threshold」です。すると、こんなウィンドウが出てきます。

GIMPの色閾値メニュー

この丸の中の▲矢印を右に動かします。上の四角いところ、右端に向けて少し山がありますが、ここのギリギリぐらいまで右に動かします。 こんな感じです。すると、バックグラウンドのプログラムリストの画像の文字が上の画像と比べて濃くなっていることが分かると思います。濃くすることで認識率が高くなります。ただ、矢印を右にやりすぎると、今度は黒いブツブツができてしまい、認識率が下がります。上手い塩梅がこの山の手前ギリギリですね。

GIMPで補正完了

プログラムリストの画像補正が終わったら、JPEG形式で「エクスポート」して保存しましょう。これでリストの画像補正は完成です。

4.Program List OCRでテキスト化!

いよいよメインイベント、Program List OCRでテキスト化を実施します。まずはソフトウェアの起動です。起動したら、左上のディスクのアイコンで、先ほどエクスポートしたリストの画像を開きましょう。

Program List OCRの起動画面

リストが開きました。この後でプログラムリストの箇所を範囲指定するのですが、リストが斜めだとうまく範囲指定できないことがあります。もし斜めになっていたら、ここで補正しておきましょう。

Program List OCRでリスト画像を開く

続いて、認識させたいプログラムリストが入ったエリアを指定します。このリストのように、1ページに複数のリストが分割されているケースもあります。でも、複数の範囲指定ができますので、1ページを一気にテキスト化することができます。範囲指定は、簡単で、「ctrl」キーを押しながら、マウスで範囲を指定するだけです。1か所指定が終わったら「ctrl」キーを離し、また別の範囲にマウスを動かして「ctrl」キーを押しながらマウスを動かすことで、複数の範囲指定ができます。こんな感じです。

Program List OCRで範囲指定

ここまで終わったら、いよいよOCRでのテキスト化の開始です。赤枠で囲ったボタンを押します。今回は全てマシン語ですので、Recognize Section「hex」を選択します。もしも、ベーシックのプログラムをテキスト化する場合は、「n6x」を選択します。選択したら、クリック!

Program List OCRで認識開始

OCRでのテキスト化には少し時間が掛かります。右下に進捗状況%が見えますので、それでも見ながら待ちましょう。ある程度認識が進むと、右のテキストボックスに読み取ったテキストが入ってきます。全て終われば、ここにマウスのカーソルを持ってきて、全選択→コピー。テキストエディターに張り付ければテキスト化の完成です!

マシン語_認識完了

5.サクラエディタでテキストの修正

お気に入りのテキストエディタ、サクラエディタに先ほどのテキスト化されたプログラムリストを貼りつけてみましょう。

12_マシン語_認識エラー1

分かりづらいかもしれませんが、2か所エラーがありますね。最初の四角は、チェックサムとの境にある「:」が抜けてスペースになっています。2個目の四角は、本来2桁のか所に3桁入ってしまっています。

また、この後エミュレータにマシン語部分のみを自動入力させる必要があります。「マシン語部分のみ」なので、以下のデータは除外する必要があります。1.各行頭にあるアドレス部分 2.チェックサム部分(境目の:含む) 3.半角スペース 4.改行コード 実際にマシン語を入力するときは、これらを除外したデータ部分しか入力しませんよね?要は人がやるのと同じ状態にするということです。ビジネスAIで流行しているRPAみたいです。

まずは、「:+チェックサム」を除外しやすくするためのデータ整形をします。具体的には、各行の「:」を境に右はチェックサムに統一します。そうすることで、”「:~改行」は全て除外”という置換ルールを作ることができます。なので、今回のテキスト化で発生した「:」が認識されずにスペースになってしまうのは都合が悪いのです。サクラエディタでは「:」を検索すれば、該当する箇所が黄色くなります。それによって、「:」が無い箇所が見つけやすくなります。実際にやってみましょう。

13_マシン語_認識エラーの修正1

該当所を見つけたら、ポチポチと「:」を入力して修正してあげましょう。次に、アドレス部分やデータ部分に余計な文字が入って各行の終端位置がずれている行を見つけましょう。明らかにおかしいので、これは目視で見つけることができると思います。見つけたら、ここもポチポチと修正です。。続いて、アドレス部分を除外するには、アドレス部分とデータ部分の境目が「半角スペース」で統一されている必要があります。そうなっていれば、「各行の先頭から半角スペースまでを全て除外する」という置換ルールでアドレス部分を除外することができます。ここも目視です。「半角スペース」で検索することで該当箇所を黄色くさせることで、目視作業もはかどると思います。

13_マシン語_認識エラーの修正2
検索をうまく使うことで、こんな感じで見つけやすくなると思います。

ここまでで、いったんデータ修正は完了とします。「肝心のデータ部分をチェックしてないじゃないか?」と思われたかもしれませんが、それはエミュレータに自動入力して、エミュレータでダンプして出てきたチェックサムで確認すれば良いことなので、ここではデータ部分のチェックはしません。。

それでは、まずはアドレス部分の削除をやってみます。サクラエディタの置換ウィンドウを開きます。「正規表現」にチェックを入れてください。そして、置換前には「^.*? 」と入れます。?の後ろには半角スペースを忘れずに入れてください。簡単に意味を解説すると、「^」(ハット)は行頭を意味します。次の「.*?」は”どんな文字が何文字来てもよい”という意味です。最後は「半角スペース」。つまり、この「^.*? 」というのは、「行頭から最初の半角スペースまでの全て」を選択するようなイメージです。置換後は「」(何も入れない)。つまり、この選択した 「行頭から最初の半角スペースまでの全て」の 文字を消す、ということになります。

16_マシン語_アドレス除外

はい、消えました。

17_マシン語_アドレス消えた

続いてチェックサム以降の削除です。今度は、置換前に「:.*?\r\n」と入れます。これは、「:から改行までの全て」を意味します。これを「」に置換すればOKです。こんな感じです。

18_マシン語_チェックサム除外

はい、こちらも消えました。

19_マシン語_チェックサム消えた

あと邪魔なのは「半角スペース」だけです。こちらは、簡単ですね。「 」(半角スペース)を「」(何もない)で置換すればOKです。これで純粋にデータ部分だけのテキストになりました。これをエミュレータに入力させます。

21_マシン語_スペース消えた

6.エミュレータにテキストを貼りつける

いよいよ、最後の工程です。まずは、PC-6001VW3を起動します。半分忘れかけていますが、今回は ログイン1986年5月号掲載のプログラムリスト、「F」を例にしています。なので、同号に掲載されていたマシン語入力プログラムを読み込んで実行します。マシン語モニターが起動したら、マシン語入力ができるようにします。今回のプログラムは「B1A0」アドレスから入力がスタートするので、「SB1A0」を入力します。すると、「FF-」と表示されます。これは現在B1A0にはFFがセットされていて、それを何にするか?という入力待ち状態です。

22_モニター起動

モニタープログラムはマシン語入力を待ち構えた状態です。ここで、先のテキストに戻って全選択してコピーします。

23_モニター起動_コピーして

そして、PC-6001VW3に戻って、貼りつけます。「ctrl+v」ですね!

24_モニター起動_ペースト

このような感じで、自動的に貼りつけられていきます。画像では分からないので、動画でどうぞ。。

これでマシン語入力が完了しました!しかし、データ部分は未チェック、、ということばバグがあるはずです。バグのチェックは、ダンプリストを出力して、それをプログラムリストのチェックサムと照らし合わせるという地味な作業です。。

27_モニター起動_ダンプ1
右にある「:」以降の2桁がチェックサムです。このモニタはブロック単位のチェックサムも出してくれるので、効率よくバグチェックができますね。。

実際に、このやり方でどの程度のOCRの認識エラーがあったか?全部で297行、エラーは20行。10%未満ですね。画像の加工の設定をもっと煮詰めればもっと上がると思います。Program List OCR、認識の精度が非常に高くて本当にありがたい存在です。。

最後に、ログイン1986年5月号掲載「F」です!

いや、思ったよりも簡単でした。このプログラム、ログインの4ページちょっとの分量です。真面目に打ち込んだら1日掛なのでしょうが、スキャナでの取り込み~入力完了まで3時間ぐらい。調べながらやってこの時間なので、今なら1時間もあれば完了すると思います。では、入力した今回のゲーム、「F」の紹介です。

F

ゲームとしては、、良くも悪くもファミコン時代のカーレースゲームまんまですね。ファミコン初期の任天堂作品の「F1レース」みたいな感じです。P6初代対応なので、ファミコンよりはかなり劣りますが。。「TINY F1レース」です(笑)。ゲームのコツは、、雑誌には「高等ドライビング技能講座」が書かれています。確かに、レースゲームでは役に立つテクニックですが、、このゲームでは大して役に立ちません(笑)。このゲームのコツは、コーナーではコースの端にいることですかね。何故かコースアウトしないんですよ、このゲーム(笑)。真ん中にいると相手の車がくるので、ひたすら端にいると。。

では、ログイン1986年5月号掲載の「F」の動画です!

スピード感があるし、グラフィックも綺麗で、面白いですよ。ゴールシーンもありますしね。。できれば、コースの全体像が見たいですね。いま自分がコース上のどの位置にいるのか、とか。でも、これが市販ソフトではなく雑誌掲載なのですから。クオリティの高さには脱帽です。

今回の雑誌掲載プログラムリストの打ち込みを通じて、「もっと他のゲームもやりたい!」と思いました。初めて購入したI/Oに載っていた「スペースペンギン」、ベーマガの「私の彼はパイロットゲーム」、ログインのアドベンチャー「Le Vieux Chateau」。。入力して攻略したら、またご報告いたします!

スポンサーリンク

フォローする