標準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
前へ
次へ
ホームページトップへ戻る