ダンプリストをOCRで取り込む!

昔の雑誌に載っていたダンプリスト。あれって打ち込むの大変でしたよね。そのために、数多くの打ち込みソフトが作られたわけですが、それでも打ち込むには非常なストレスと、多大な時間がかかります(涙)。

先日、XM7の掲示板で「OCRでダンプリストを読み込めたら」という発言を目にして、「お、これは新ネタが…(ニヤリ)」と思い、dmp2motというプログラムを作りました。

dmp2motは、ダンプリスト形式で保存されたテキストファイルを解析し、Motorola-Sフォーマットに変換します。出来上がったMotorola-SファイルはFTOOLSを利用することでXM7にマシン語ファイルとして渡すことが可能になります。

ここでは、上記の作業を具体例を示しながら解説します。

っとと、、先に断っておきますが、私(Apollo)はスキャナもOCRも持っていますが、実際に試したことはまだありません(コラコラ)…
 うまくいった方はレポートいただけるとうれしかったりします。


●OCRで取り込み! (一番厄介な作業…)

…いきなりでナンですが、ここはお手持ちのスキャナのマニュアルと、OCRソフトのマニュアルを参考にがんばってください。
要は雑誌のダンプリスト掲載ページをスキャナで読み込み、OCRソフトでテキストに変換すればOKです。
この際、1ページに2段とか3段組でダンプリストがある場合は切り貼りして1段組に修正する必要があります。

なお、ダンプファイルは'-----'だけの行や、'ADRS +0 +1...'のような行、および空行を含んだままでもOKです。
ただし、行の最初のトークン(単語)が0〜9+A〜Fだけでできているとアドレス値だと誤認識してしまいますので、この点にだけは注意してください。データ行は':'と'='が混じっていても無視します。これは多くのダンプリストがこれらの文字を含んでいるためです(cnvtbl.txtファイルでスペースに置換しています)。

お使いのOCRソフトの変換の癖にあわせてcnvtbl.txtファイルを書き換えると効率よく変換できます。cnvtbl.txtの書式についてはdmp2motのダウンロードページを参照してください。0とか1とかのよく誤変換される文字を登録しておき、一括置換しながら変換を行うことができるようになります。

ダンプファイル中のアドレスは前後してもかまいません。dmp2motは1行づつMotorola-S形式に変換するため、アドレスが昇順に並んでいる必要は全くありません。

また、1行は16バイトである必要もありません。8バイトでもOKです(128バイト以下ならOK)。

ここまででできたファイルをtest.dmpという名前で保存してあることとして話を進めます。


●Motorola-Sフォーマットに変換

ここで、dmp2motを利用します。私のHPからdmp2motをダウンロードし、解凍しておいてください。
dmp2motと同一ディレクトリに、先ほどのtest.dmpを保存し、

c:\>dmp2mot test.dmp test.mot -s

と入力します。これで、同一ディレクトリにtest.motというMotorola-Sファイルが生成されます。
ここでは’-s'オプションをつけていますが、これはダンプリストの最後にチェックサムがある場合に指定します。これを指定しないとチェックサムの値をデータと思いこんでしまい、Motorola-Sファイルに出力してしまいます。ですから、ほとんどの場合'-s'オプションを指定することになります。
なお、チェックサムエラーがあった場合、エラーとしてそのアドレスを表示します。その行の内容はMotorola-Sファイルに出力されません。

・実行例
c
:/>dmp2mot test.dmp test.mot -s
Dump file to Motorola-S converter v0.0
Check sum error at $5050       
←エラーのあった場合

・テストに使用したファイル(test.dmp)
addr +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +a +c +d +e +f sum    ←この行は無視される
-------------------------------------------------------  ←この行は無視される
5000: 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f :78   :は無視される(各種ダンプが:を含むため)
5010= 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 78   
=は無視される(秀和のダンプが=を使うため)
5020 f1 a2 b3 c4 d5 e6 f7 38 49 6a 0b 0c 0d 0e 0f e8
5030 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 78
5h40 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10    
  ←アドレス値がおかしい(この行は無視される)
5050 51 52 53 54 55 56 67 68 69 6a 6b 7c 7d 7e 7f 10    
←チェックサム値が異常なのでエラーになる(この行は無視される)

・出力例(test.mot)
S11250000102030405060708090A0B0C0D0E0F25
S11250100102030405060708090A0B0C0D0E0F15
S1125020F1A2B3C4D5E6F738496A0B0C0D0E0F95
S11250300102030405060708090A0B0C0D0E0FF5


●XM7にデータを渡す

FTOOLSの中のFMENCODEコマンドとFMWRITEコマンドを使用して、D77ディスクイメージファイルにMotorola-S形式に変換したファイルを書き込みます(長い…)。

なお、FTOOLSはまだα版なのでXM7で空っぽのディスクイメージを作成し、それに書き込むことをお勧めします。

1.ブランクディスクを作る

FMTOOLSは、フォーマットされたD77ファイルしか扱うことができませんので、ブランクイメージを作成したらフォーマットを行う必要があります。

(1) XM7のメニューから"Tools" - "Make Blank Disk..."を選択。
(2) 「Enter Disk Title」には適当な名前を設定(任意)
(3) 「名前を付けて保存」では適当なファイル名を設定(ここではblank.d77とします)
(4) ドライブ0にDisk Basicのディスクを、ドライブ1に作成したブランクディスク(blank.d77)を設定します
(5) XM7をリセット(F12キー)し、Disk Basic(システムディスク)を起動します。
(6) Disk Basicディスクに入っている"SYSDSK"プログラムを実行し、ブランクディスクをフォーマットします

(6) ディスクコードもコピーします。

(7) DSKINIコマンドを使用して、ファイルシステムの初期化をします。

これでブランクディスクにファイルシステムが構築されました。

 

2.ブランクディスクにMotorola-Sに変換したファイルを書き込む

以下のようにコマンドを発行してください。FMENCODEコマンドでFM-FILE形式にファイルを変換し、それをFMWRITEコマンドで書き込むという2ステップを踏む必要があります。

C:\>fmencode test.mot -v
fn=test.mot ext=MOT 2 B 0
FM-FILE file ='test.2B0'

C:\>fmwrite blank.d77 test.2b0

これで、blank.d77にマシン語ファイルが書き込まれます。blankディスクの中身をのぞいてみると、今書き込んだファイルが見えるはずです。

 

理論的にはこれで雑誌のダンプリストをXM7に読み込ませることが可能です。あとは実践あるのみ…なのですが…誰かチャレンジしてくれませんか?