フォト
2023年10月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        
無料ブログはココログ

本 : My Favorite!

  • 磯田道史: 武士の家計簿

« 柴犬を連れて群馬県甘楽町へ行ってきました | トップページ | 19年前の自己記録を更新! - 50m自由形 32秒34 »

2016年3月 4日 (金)

「40年前のマイコンを作って動かす」 第八話 : 動作確認3

SRAM (CY62256) のリード/ライト制御の回路はこのようにして
あります(クリックで拡大)。 図中で、添え字の"85"は i8085の
信号、"32"は 32bit マイコンの信号を表します。 逆スラッシュ
は負論理の信号です。

Dmas_2

32bit マイコンが i8085にHOLDをかけてDMA転送でSRAMに
書き込むときは、1段目ゲートが閉じ、i8085からのリード/ライ
ト信号は遮断されます。 DMA転送が終わり、HOLDが解除に
なると1段目ゲートが開きますが、このとき32bit マイコンは
リード/ライト信号を共に"H"にします。 すると i8085からの
リード/ライト信号が2段目ゲートを通過できるので、i8085から
SRAMの読み書きが可能になります。

前出のお手製ロジックアナライザを使い、HOLD信号の変化で
トリガをかけて、HOLD信号(の元の負論理信号)と 32bit マイ
コンからのライト信号をチェックしました。 タイミング任せで
すが、この"ロジアナ"の信号記録はトリガ信号の最大 2μs前
から始まるので、うまくいくとトリガ信号の直前の状態から見ら
れます。 結果です。

Bad_wr

これを見て、はたと気が付きました。
32bit マイコン側の I/Oピンで i8085のアドレスバス/データバス
にWired-ORで直結しているものは、DMA転送が終わり i8085
側が走るときには、競合しないように入力状態 (3-stateでは
ないので) にしなくてはなりません。 ところが、そうしなくても
良いSRAMへのリード/ライト信号まで入力状態で待機させて
いました。 プルUpもプルDownもしていないので、信号を受け
取るデバイスから見れば"H"と同じになっていました。
さらに、i8085にHOLDをかけた後でSRAMへのライト信号の
I/Oピンを出力モードに切り替え、待機状態の"L"にしていた
のです。 そのため、その"L"にするまでの間=上図中の点線
で囲んだタイミングでは、SRAMは"書き込み"状態になって
いたのです! ここで不要な書き込みが起こって、i8085側の
プログラムの一部を破壊してしまったようです。

原因が推測できたので、32bit マイコン側のプログラムを手直し
しました。

Photo_2

今度は、先にSRAMへのライト信号のI/Oピンを待機状態の"L"
にし、その後で i8085にHOLDをかけるようにしたので、ここで
SRAMに不要な書き込みは発生しません。 (HOLDがかかる
直前のタイミングでは i8085側が無用にSRAMにライト信号を
出さないようにしてあります)

Good_wr

実際にターミナルソフト側で1文字キー入力すると、ちゃんと
正しい文字が1文字だけエコーバックされるようになりました!

ということで、"Palo-Alto版Tiny BASIC" のプログラムに書き
換えて、いよいよ最終テストです。

Tinybasic

動きました! 感動の一瞬でした。

にほんブログ村 その他趣味ブログ アマチュア無線へ
にほんブログ村

« 柴犬を連れて群馬県甘楽町へ行ってきました | トップページ | 19年前の自己記録を更新! - 50m自由形 32秒34 »

工作」カテゴリの記事

コンピュータ」カテゴリの記事

コメント

この記事へのコメントは終了しました。

トラックバック


この記事へのトラックバック一覧です: 「40年前のマイコンを作って動かす」 第八話 : 動作確認3:

« 柴犬を連れて群馬県甘楽町へ行ってきました | トップページ | 19年前の自己記録を更新! - 50m自由形 32秒34 »