Super AKI-80 で遊ぶ その七

前回Super AKI-80 とパソコンを RS-232C で接続して付属 ROM の BASIC で遊んでみるところまでやりました。

今回はエルチカにチャレンジです。エルチカって初めて聞いたとき、??? ってなりましたが、LED が光ればいいらしいです。そういう意味では付属 ROM の動作確認モードで LED は光らせているのですが、そこはそれ、やはり自力? で光らせたいものです。

というわけで、ブレッドボードやジャンパーケーブル (オス-メス、オス-オス) 、書籍「コンピュータはなぜ動くのか」に合わせるために 7404 を買ってきました。早速接続します。(ブレッドボードの詳しい使い方はネット上にたくさんあるのでそちらを参考にしてください)

まずはブレッドボードに電源を供給します。Super AKI-80 の場合 Z80 PIO は CN1 にありますので、そこから GND/VCC をとります。Super AKI-80 CN1 50 番ピンをブレッドボードのマイナスに、CN1 49 番ピンをプラスにつなぎます。ブレッドボードには複数の電源ラインがありますので、それらを接続します。

そして 7404 をブレッドボードに載せます。半円形の切り欠きから反時計回りに 1 番ピンから 14 番ピンになります。7 番ピンが GND なのでブレッドボードのマイナスと、15 番ピンが VCC なのでプラスに接続します。

次は信号です。「コンピュータはなぜ動くのか」に合わせるため、Z80 PIO のポート B を使って LED を光らせることにします。Super AKI-80 の CN1 31 番ピンが PB0 になります。こちらを 7404 の 1 番ピンに接続します。31 番ピンは真ん中あたりで数えるのが大変でした。けど、よく見るとシルク印刷で PB0 と書かれているのでそれを目印にしてください。ピン配置は、必ず付属のマニュアルを見てください。

最後に LED の出番です。抵抗付き LED を利用していますので、直接 7404 と接続します。7404 の 2 番ピンと LED のプラス側 (足の長い方) に、ブレッドボードのマイナス側と LED のマイナス側を接続します。

これで配線は完了です。パソコンと RS-232C で接続し、電源を投入します。そして、BASIC で制御を試みます。相変わらずたまにしか動きませんが...

Start Z80 remote basic Ver.1.0 made by System Load
                                ..since 1992. 
>

「コンピュータはなぜ動くのか」を見ながら Z80 PIO のポート B を出力用にします。

> out &h3 207
ok
> out &h3 0
ok

そして、ポート B の出力値を書き換えます。

> out &h1 255
ok

逆は

> out &h1 0
ok

です。でも反応がありません。

というか何もしていないのに光ったり消えたりします。手をかざすと数秒光って、徐々に暗くなります。謎現象です。私はデジタルの人なので、こういうわけがわからない状況は苦手です。

さて、今回は自宅ではなく、組み込み系の猛者が集う場で行いました。そこで、プロの方に見てもらうと、「ハンダ付けが許せないレベル」だそうです。その方が、軽くハンダごてをあてるとこの現象はとりあえず出なくなりました。しかし、全体的によくないので、今度ハンダ付けをやり直さないといけないですね。

さて、光ったり消えたりがなくなったのですが、I/O ポートをいくら叩いても LED が消えません。out 命令のオペランドの位置を変えたりとか、本当は良くないんですけど、やってみたけどダメでした。「コンピュータはなぜ動くのか」では機械語ですが、今回は BASIC で、なおかつ詳細な仕様がよく分からないので、機械語でやるしかないかなあと思っていました...

まあその前に、念のため Super AKI-80 のマニュアルを読み直します。昔のマイコン・パソコンのマニュアルには必ず I/O マップがあったんです。というわけで、ビンゴ! I/O アドレスが違いました。Z80 ソフトウェアフルコンパチで PIO/SIO/CTC/CGC 内蔵だからアドレスも同じだと思ってたのですが、このあたりオフセットできるんでしょうね。「I/O アドレスはフルデコードされています。」と書かれているから、これですかね。

1CH: PIOA DATA
1DH: PIOA COMMAND
1EH: PIOB DATA
1FH: PIOB COMMAND

というわけでプログラムを組み直します。まずはポート B を出力用にします。

> out &h1f 207
ok
> out &h1f 0
ok

そして、出力値を書き換えます。

> out &h1e 255
ok

消えました!

> out &h1e 0
ok

付きました

今回は、それ以外にも LED を高速で点滅させて明るさを調整するのにもチャレンジしてみたのですが、BASIC の速度では暗くしようとすると点滅しているのがばれてしまいます。このあたりはやはり機械語でないと難しそうです。

Image: 
消えました!
付きました

コメントを追加

Filtered HTML

  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 使用できるHTMLタグ: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <img>
  • 次のタグを使用してソースコード構文をハイライトすることができます。: <code>, <blockcode>, <c>, <cpp>, <drupal5>, <drupal6>, <java>, <javascript>, <php>, <python>, <ruby> The supported tag styles are: <foo>, [foo].
  • 行と段落は自動的に折り返されます。

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。
CAPTCHA
This question is for testing whether you are a human visitor and to prevent automated spam submissions.
イメージ CAPTCHA
Enter the characters shown in the image.