2025.2.6
前へ
次へ
ホームページトップへ戻る


PICBASICコンパイラ

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第212回]



●PIC16F627(7)リバースエンジニアリング

PIC16F627のBULK ERASEができないことについては[第208回]ほかで書いてきました。
[第210回]にも書きましたがとにかくおかしいのですよね。
ちゃんとドキュメントに書いてある通りにやっているはずなのですがまったく消去してくれません。
こういう場合にはまずドキュメントを疑ったりいたします。
自分が間違っているとは思わないものです。
まことに困ったものであります。
自分は断じて間違っていない。
ちゃんとドキュメントの通りにプログラムを書いている(はず…)。
なのにその通りに動作しないのは。
これはきっとあれだ。
ドキュメントのどこかに記載ミスがあるに違いないのだ。
かくして問題解決からどんどん遠ざかっていってしまいます。
いずれことの真相が明らかになります。

ま。
それはしばし置くことにしまして。
とにかくどうにも納得できません。
ところがかの秋月のPICプログラマPICKITUさまは何の問題もなくきれいに消去されてしまわれます。
一体PICKITUさまは何をなさっておいでなのでしょう。
ここはやっぱりそっと覗いてみたくなります。
だめ。決して見てはなりませぬ。
そう言われると余計に見たくなりまする。
とうとう見てしまったのですね。
ああ。鶴が飛んでいく。
何の話だ。

秋月のPICKITUにはPIC18F2550が使われています。
普通はこういうものはコピープロテクトがかかっているはずなのですが。
なぜかそれがかかっていなかったのです(「PICでUSBを!」[第11回])。
あれ?
余談ですけれど。
この記事の初出は2009年12月になっています。
もう15年も前の話です。
あらためてざっと読んでみましたらなんとPIC18FのためのPIC WRITERプログラムを作ったと書いてあります。
なんだ。
そんな昔にちゃんと作っているじゃないか。
当時のファイルが残っているかどうかと思って探してみましたら。
ありました!
;;; pic writer for pic18F
;;; 09/12/02 12/03 12/04 12/05 12/6 12/7 12/8
;
        RDBF=1000
        RDBF2=1010
        RDBFMAX=EFFF
        PRNPORT=F000;&F001
        DVIDH=F002
        DVIDL=F003
        ERRMK=F004;1BYTE
;
        LDFILEHDL=F006
        SVFILEHDL=F008
        HADRS_BASE=F00A
        RDBFEND=F00C
        ADRSWK=F00E
        READADRS=F010
        DUMPADRS=F012
;
        KEYBF=F020
        KEYBF1=F021
        KEYBF2=F022
;
        ORG=100
;
        CLD
        MOV [PRNPORT]W,378
        MOV [RDBFEND]W,RDBF
        MOV [*DUMPADRS]W,RDBF
        MOV [READADRS]W,0
        MOV DX,TSTART
        MOV AH,9
        INT 21
        CALL CRLF
;
; PICWEITER INIT
;

これは8086アセンブラですね。
Windows98のプリンタポートを使ったPIC18F用のプログラムです。
そうかあ。
書いていたんだ。
すっかり忘れていました。

ま。これは余談でありました。
つい懐かしくなりまして。
本題に戻ります。
ですからPICKITUのPIC18F2550のプログラムを読み出してそれを解読すれば何をやってるかはわかるはず。
理屈としてはそうなります。
でも。
言うは易く行なうはめっちゃ困難でありまする。
そんなことをやりますかねえ。
ひと様が書いたプログラムの解読なんてとてもやる気にはなれません。
おまけに読み出せるのはPICプログラムのマシン語コードです。
そんなものやってられませんでしょう。

ソフトもハードもまるごとコピーして、なんて某国発のモノでよく見かけますけれど。
それはいかんでしょう。
でも意外とよく聞く話ではあります。
開発する側もそこはいろいろワナをしかけたりしまして。
プログラムコードのどこかにそっと開発者の名前なんかを暗号的に散りばめたり、回路の中に使わない(使えない)ダミー回路を付けたりして。
これが動かぬ証拠じゃあ。
なんてことになったりして。

そうそう思い出しました。
「鉄腕アトム」に出てきますね。
壊れてしまったコバルトを某国が「親切にも」直してくれるのですけれど、ただ直すのではなくてついでに解体して中身をそっくりコピーして自国のロボットにその回路を移植してしまいます。
アトムからその話を聞いた御茶ノ水博士は突然笑い出します。
「え?全部コピーした?そっくりそのまま?」
最後にとんでもないオチがあります。
いやあ。
さすが手塚治虫です。
雑誌「少年」昭和29年6月「コバルトの巻」です。
某国のM44号なんてロボットが登場します。
もっともなにしろ昭和29年ですからアトムは超小型電子脳ながらなんと真空管が使われているのです。

あ。
また余談になってしまいました。
こういうのをリバースエンジニアリングといいます。
そっくりそのままコピーはいけませぬ。
でも昔からみんなフツーにやってきたのではありませんか。
技術とかワザなども教わるのではなくて盗むのだとか。
丸ごとコピーは特許権の侵害になったりしますがそれをヒントに自分なりの工夫で発展させればそれはもうオリジナルです。
学ぶよりも真似よとか。
そこに技術の進歩があるのかもしれません。

えっと。
何の話でしたっけ。
そうそう。
PIC16F627のBULK ERASEがどうしてもできません。
でも秋月のPICKITUだとちゃんとできてしまいます。
一体どうやっているのだろう。
ごく普通に感じる疑問であります。
ならば。
PICKITUに搭載しているPIC18F2550からプログラムコードを読み出してそれを解読するか?
んなことはやりませぬ。
んな面倒なことはやらずとも。
書き込みとか消去の際にPICプログラマから出力されるPGC(クロックパルス)とPGD(データパルス)を読めば何をやっているかわかるはず。
どうやって?
おお。
LOGIANAがあるではないか?

しかし。
思ったほど簡単なことではありませんでした。

つい余談をしたりしていて時間がなくなってしまいました。
次回に続きます。

PICBASICコンパイラ[第212回]
2025.2.6 upload

前へ
次へ
ホームページトップへ戻る