標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第398回]

●お客様から写真を送っていただきました

MYCPU80をご購入いただいたHT様から、「最初のPC(プログラムカウンタ)のところまで実装しました」というメールをいただきました。写真も添付していただきました。

「ステップ動作をさせると面白いです」とのご感想をいただきました。
気に入っていただけて何よりです。
まだ先は長いですから、ゆっくりと楽しみながら仕上げていってください。
HT様。写真をお送りいただき有難うございました。
ゆっくり楽しみながら、がんばってください。

●Windows98とアセンブラ

もう何度も書いておりますように、私はいまだにWindows98を使っております。
WindowsXPは、もっていますけれどほとんど使いません。

そのように書くと、
「まあなんと時代遅れなのだろう。きっと新しいものは使いこなせないんだ。かわいそうに。」
などと思われてしまったりします。

また前回のように、「私はCコンパイラが嫌いだから、PICライターのプログラムをアセンブラで書きます」などと書いたりしていますと、
「いまどきCを使わなくて何ができるというのだろう?多分使いこなせないんだ。かわいそうに。」
とまたまた同情されてしまいそうです。

でもですね。
私は思うのです。
世の中、少し間違ってんじゃないだろうか?

猫も杓子も、なんでもかんでもCプログラミングだなんて、私にはちょいと異常に思えます。
なんだか知らないけれど、みんな、「はじめにCありき」と思い込んでいらっしゃるのではありませんか?

そこで、これから、PICライターのプログラムにとりかかるのですけれど、その前に。
まずは、ちょいと皆様に、「目からウロコ」のお話しをしておきたいと思います(こんなことは8086アセンブラがおわかりの方には当たり前のことなのですけれど)。

前回、MicrochipのサイトからダウンロードしたPICライターのプログラム(AN589ソースプログラム)をBorlandC++でコンパイルしたところ、エラーになってしまいました、と書きました。
「biosprintが未定義」というエラーです。

そのリストには確かにbiosprintは定義されていません。
どうやらヘッダーファイルbios.hにその定義がありそうです。
で、Borlandのヘッダーファイルをさぐってみたら、bios.hというファイルがあって、その中に「_bios_printer()」というのがありましたので、多分これのことでしょう、と書きました。

でも、このBorlandC++にあるbios.hも「抜け殻」で使えないようなのです。
そもそも、このbios.hを見ていると、何でこんなものがいるのかなあ、と考えてしまいます。

で、考えていましたら、「ああ、そうか」
わかりました。

●Cでポートに出力、ってどうする?

前回お見せしたパラレルポートを使用するPICライターの回路ですけれど、当然のことながら、パラレルポートから書き込みパルスを出力しなければなりません。
でも、Cでは、そこんところをどうやるのでしょう?

DOS/Vパソコンのパラレルポートアドレスは378Hです(違うアドレスもあるのですがここでは簡単に)。
そのビット0からPICの書き込みのために連続してパルスを出力するプログラムをC(またはC++)で書くにはどうしたらよいのでしょう?

「XPじゃそんなこと、出来ないよ」
ですね。そこがまた別の問題なのです。

ですけれど、それはちょっと置くことにして、XPより以前のWindows98などでしたらできますから、気にしないで、どうぞCまたはC++で書いてみてくださいませ。

私が不勉強なのかも知れませんが、どうもCにおいては、ダイレクトにパラレルポートにアクセスするのは、一般的な方法ではなさそうなのですねぇ。
どうするのでしょう?

あ。別にCにけちをつけているのではありません(ってしっかりつけてますけれど)。
CにはCの役割があるのです(と思います)。

でもCはオールマイティではない。しっかり不得意なところがある。
近ごろ世間はそこんところを誤解しているのではありますまいか?
なんでもCで書こうとして自縄自縛に陥っているように思えます。

多分、どこかのだれか(たいていはMicrosoftだったりして)が用意してくれた、ヘッダーファイルをインクルードしなければ、何もできませぬ。
でも、それがまた大変で。
これこれをしたいけど、そのためには、なにをどこからもってきて、それをどのように使うのか、それがまた一苦労、なのではありませんか?

能書きはこのくらいにいたしまして。
はい。目からウロコです。

アセンブラならこうします。

左のOUTTEST.TXTがアセンブラのソースプログラムです。
たったこれだけです。
あっけないくらい、簡単です。
インクルードもヘッダーもクソもありませんです。はい。
いきなり書いて、いきなり終わりです(アセンブラって意外と簡単でしょー)。
もちろん、これだけで、ちゃーんと動きます。

MOV DX,378で、DXレジスタにパラレルポートアドレスの378Hを入れます。
次のOUT DX,ALはもう「そのまんま」です。DXで示すポートアドレスにレジスタALの値を出力せよ、です。
次のXOR AL,01はALのビット0のみを反転するために使っています。
そしてJMP LOOPで繰り返します。

右はOUTTEST.TXTをアセンブルして機械語のファイル、OUTTEST.COMを出力しているところです。
ASMというのは、当社のオリジナル8086アセンブラです。
そして一番下のOUTTESTで、今作ったOUTTEST.COMを早速実行しています。

実行の結果をチェックするためにオシロのプローブをプリンタコネクタにつけているところです。


OUTTEST.COMの実行結果です。

パラレルポート(プリンタポート)のビット0からの出力波形です。

ねーえ。こんなに簡単なことですのに、どうしてCなどを使おうとしか考えないのでしょうか?

いかがでしたでしょうか?
目からウロコが落ちましたでしょうか?
(次回に続きます)
2009.12.13upload

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