Electronic Works: July 2009アーカイブ

続きです。 西田さんからBELUGAのアダプターの回路図を参考にせよとの指摘があったので、それに習って調べています。

まず、BELUGAのアダプターは次のように信号を作っています。

CS = (RAS2 and EXCAS) or (MREQ & デコード済みアドレス)
OE = DRD2 or CS3

なお、全部負論理である点に注意してください。

私のカードの論理は次のように修正しました。

CS = EXCAS or (MREQ & デコード済みアドレス)
OE = DRD2 or RD

これで動かしてみたことろ、テキストモードのページ1とページ4がちらついた状態で表示されました。 ただし、スクリーンモードを4などにすると画面が乱れます。

どうも、ページ1にはページ1とページ3が、ページ4にはページ2とページ4が混じって表示されているみたいです。 その証拠に、画面左下のページ番号がちらついて両方表示されており、たとえばページ3のスクリーンモードを変更するとページ1の表示に影響しています。

BELUGAのカートリッジでCS3を使っているのはROMエリア読み出し用だと思うのですが、DRD2のみでRDを使ってない理由はよく分かりません。 DRD2はVRAM DMA用のRD信号ですが、通常のメモリアクセスでもアサートされるのでしょうか?

CSを作るのにRASとのandを取っているのもよく分かりません。 SRAMですから、CASだけ見れば十分じゃないかと思っているのですが、タイミング的にRASも見ないとネゲートのタイミングが遅すぎたりするのかな?

CS2/CS3などを扱うROMエリアがメモリデコードだけでアクセス可能になるかどうかも気になりますが、その前にRAMエリアももう少し調査・実験が必要です。

(20 July 2009追記)

CSの入力をEXCASの代わりにRAS2に変更してみると、まったく画面が乱れたままなので、やはりEXCASのほうが「近い」のですが、andを取らなければならないのかもしれません。

と思い、EXCASとRAS2の両方を使ってみました。 つまり、

CS = (RAS2 and EXCAS) or (MREQ & デコード済みアドレス)
OE = DRD2 or RD

であり、ほとんどBELUGAと同じです。 しかし、何も症状が変わりません。 画面は乱れたままです。 RAS2の入力をはずすと元に戻ります。 すなわち、ちらついた状態になります。 何で...???

もう降参。 ダレカタスケテ...;-(

ちなみに表示の様子。

P1000816.JPG

ちらついてるのが分かるでしょうか?


少しづつ原因を特定しようと頑張っています。 今のところ、明らかになっているのは次のような動きです。

  • 起動時、本体は32kBとして認識している。これは、BIOSで以下のようなロジックを実行することで判定している。
    ld      hl, 0xbfff
    ld      b,(hl)
    ld      (hl),a
    cp      (hl)
    
    ちなみに0xbfffは拡張RAMの最終アドレス。
  • スクリーン1(0x8000-0x83ff)およびスクリーン4(0xa000-0xb9ff)の表示は同じように乱れている。
  • スクリーン1のアトリビュートエリア(0x8000-0x81ff)やテキストエリア(0x8200-0x83ff)をpeekすると内容は正しい。
  • スクリーン2(内蔵RAM)を表示した状態でプログラムを入力したり実行したりできる。すなわち、0x8400からのメモリを正しくアクセスしている。
  • スクリーン1または4でキー入力をするとかなりの確率でリブートしてしまう。
  • screen 4,4を実行するとかなりの確率でリブートしてしまう。

ここから言えることは、以下のようなことです。

  • SRAMはほぼ正常に動作している。
  • VDGからのDMAで正しいデータを読めていない。現在はDRD(拡張コネクタ3番ピン)が0になるときにSRAMからのCSおよびOEをアサートしてますが、それでは足りない?
  • VRAMに書き込みをするとリブートしてしまう。

DMA関連の不具合は、ハードウェアに起因した現象なので、ちょっと困り果てています。

もともと、PC-6001の拡張RAMはDynamic RAMを想定しているので、ひょっとすると、DRDのみでSRAMをリードにしてしまうのが原因なのかも。 DRDのタイミングのみでSRAMをアクティベートしていることで、何か他の信号との関係でデータバスがコンフリクトしていることが考えられます。 もしそうだとすると、RAS and/or CASのアサートも見なければいけないのかもしれません。

そうなると、さらにCPLDに入力しなければならない信号が増えてしまいますね...。

Discrete logicに外出しにするにしても、DRDとRDはand(7408)で、RAS/CASはor(7432)なので、ひとつのチップで処理できません。 まぁ、74139を使ってデコードするという手はありますが、手元にあったかな?


続きです。 ページ1(0x8000-0x83ff)およびページ4(0xa000-0xb9ff)の画面は乱れるものの、なんとなく動いていたSDアダプタですが。 たまに入力を受け付けなくなって暴走するなど、やはり不安定です。

どこか結線の問題だと思っているのですが、正直調べるのはかなりの苦行です。 回路図と睨めっこしながらハーフピッチのコネクタにショートや断線がないかどうか一本ずつ調べる必要があります。

なまじジャンパが結構這っているので、それも含めて丁寧に追いかけなければいけません。 ジャンパはUEWなので、断線ならまだしも結線の際に熱でどこかショートしてたとしたら、発見するのは相当厄介です。

これまでいろいろ作って一番経験したデータバスの誤配線はなさそうです。

また意外にも、パッドとラインの間の隙間が非常に狭いところなどには今のところショートなどは見つかっていません。

CPLDやAVRのプログラミングを行うのも特に問題は起きていないので、電源周りも大丈夫そうです。

う~ん、やはり地道にやっていくしかないのか...。


続きです。

回路に一箇所誤接続がありました。 データバスの部分でしたので、動かなかったのも納得です。

とりあえず似非ROMは後回しで、外したままですが、早速直して動かしてみると...画面が真っ白。

よく調べてみると、キーを受け付けますし、プログラムを入力したり実行したりできます。 プログラムを入れて0x8400近辺のアドレスをpeekすると、ちゃんと入っているのです。 ところが、スクリーン1と4が真っ白で、2と3はちゃんと出力されます。

それで気づいたのですが、6847からのDMAって、MREQまたはRDを使っていない?!

またしてもオマエカー!! VDG!!

これは気づきませんでした。 ええと、6847からのリード要求はコネクタ3番かな? 唯一残っているCPLDに入力して、CSのロジックを変えてみました。


...動かない。

よく考えてみたら、SRAMのRDがアクティベートしていないようなのですから、いくらCSをいじったところで読み出しができるわけがありません。 ということは、現在拡張コネクタからダイレクトに入力してしまっているSRAMのOE信号自体に細工をする必要があるということです。

たったAND1個ですよ。 でも、CPLDのI/Oがたった1本(SRAM OE用出力)だけ足りない...。 そのために08をつけるのは馬鹿馬鹿しいし、パターンもありません。


「こ...こうなったら、醜くてイヤだが、大猿に変身してアドレス線を1本削ってぶっつぶしてやる......!!」


で、A4を削ってやってみました。 白い画面ではなくなりましたが、ページ1と4が乱れまくっています。 ちなみに、以下のようなロジックです。

  OE <= RD and DRD;

  process (MREQ, Address15, Address14, INIT, WR, DRD)
  begin
    if DRD = '0' then
      CS <= '0';
    elsif MREQ = '0' and Address15 = '0' and Address14 = '1' then
      if INIT = '1' or WR = '0' then
        CS <= '0';
      else
        CS <= '1';
      end if;
    elsif MREQ = '0' and Address15 = '1' and Address14 = '0' then
      CS <= '0';
    else
      CS <= '1';
    end if;
  end process;

DRDは拡張コネクタ3番、OEはSRAMへ行っています。 もう、DRDがアクティベートされたら無条件でSRAM READにしている感じです。

でも、ちゃんと動きません。 う~~ん、あと何が足りないんだ??


続き。SDアダプタですが、まだ動いていません。

tiny2313をつけた状態で電源をつけると暴走しているので、データバスがコンフリクトしているのではないかと思います。 tiny2313はROM代わりですので、とりあえず外してしまえば単なる拡張RAMカードとして機能するはずなのですが、外すと何も起こらず普通に起動し、内蔵の16kBしか認識されていません。

というわけで、CPLDがうまく動いていないのではないかと思います。

たいしたロジックを入れているわけではないし、ISEではフィッティング含めエラーも出ません。 Timing constraintsは何もかけていないのでwarningが出ますが、たいした問題ではないでしょう。

ロジアナがあるとはいえ、回路上で実動作を確かめるのはとても大変です。 そのため、Behaviour modelをベースにシミュレーションをしているのですが、今のところ特に問題らしいところも発見されていません。

とりあえず今のソースを貼り付けておきます。

SDDecoder.vhd

拡張バスからの信号は、アドレス線、データ線とRDおよびWRは直接SRAMに接続し、CSのみ次のようにCPLDでデコードしています。

  process (MREQ, Address15, Address14, INIT, WR)
  begin
    if MREQ = '0' and Address15 = '0' and Address14 = '1' then
      if INIT = '1' or WR = '0' then
        CS <= '0';
      else
        CS <= '1';
      end if;
    elsif MREQ = '0' and Address15 = '1' and Address14 = '0' then
      CS <= '0';
    else
      CS <= '1';
    end if;
  end process;
  • 初期化時(AVRから^INITが入る)の0x4000-0x7fffへの読み込みはインアクティブ
  • 初期化時の0x4000-0x7fffへの書き込みはアクティブ
  • 0x8000-0xbfffへのアクセスは常にアクティブ

ひょっとしてCPLDにクロック供給とかいるのかなぁ。 クロックとして使われるピンも普通のI/Oにしちゃってますが。

あ、それともSRAMにCS以外の信号線を垂れ流し続けるのって無謀? データシート上ではCSさえインアクティブにしておけばデータバスはHigh-Zになって楽なのでこんな感じにしたんですが。


先週基板ができたので、今日はジャンパを通しました。 およそ30本。 面倒ですが、全部手配線に比べたら圧倒的に楽です。 ちなみにUEWを使って半田面に配線したので、部品面は未だにスッカスカです。 ISP用に背の高いコネクタをつけたくらい。

P1000708.jpg

プログラミングはCPLD、tiny2313、mega88の3種類に必要です。 デバイスへの書き込みはこれだけのために用意してある古いノートパソコンを使います。 タダでもらったVAIOで、シリアル&パラレルポートを持っています。

なおこれ、液晶のヒンジが折れています。 ありあわせのネジで直しても直しても折れてしまうので、スピーカーに寄りかかった状態で使っています。

P1000706.jpg

CPLDは特に問題もなく終了。

tiny2313が、どうしてもDevice connection failedでうまくいかない...。 RS-232Cを疑ったり書き込みデバイスを変えたり、いろいろしてもなかなか見えず、仕方ないので試しに別のチップでやってみたら...できた。

見事にババ引いちゃったみたいです。 その間、電源取りに使っていたFT245Rのボードを壊してしまったみたいです(泣)。

mega88のほうは、まだプログラムのほうが古いままで、新しいアダプタに対応していません。

明日の引越し荷物到着の準備をしなきゃいけないし、今日はもう疲れたので、こちらは明日以降にしましょう...。

それでも、面倒なハードウェア部分はおおよそ終わったので一段落かな。


私はいつも日本に行ったときに基板やらパーツやらを買ってくるのですが、当然イギリスでもこれらのものを手に入れることは可能です。 ただ通販ベースのものが多く、秋葉原のように手にとって選べないことが多いのと、慣れの関係で、日本で買っています。

こちらでメジャーなパーツショップといえばMaplinですが、見てみるといわゆるポジ感光基板も扱っていました。 価格は全般的にサンハヤトのものよりは安いようです。 たとえば、Fibreglass(ガラエポに相当すると思われる)100x75mmサイズの両面基板で1.73ポンド。 日本だったら1000円弱します。

ちなみに銅箔が施された生基板はCopper-Clad Board、感光基板はPre-Sensitised Copper-Clad Boardです。

商品情報を見ると紫外線で感光させるようなのですが、どのくらいの波長かなどはよく分かりません。 UV-EPROMを消去するのに使うものでよければそんなに問題はないですね。

また、エッチングのあとに再び感光するように説明されています。 ちょっと扱い方が違うのかもしれません。

以下抜粋:

The PCB should be exposed using our UV exposure box and a circuit overlay transparency. Exposure time will be from 8 to 15 minutes. Mix together 0.5 litres approximately with one teaspoonful of sodium hydroxide (available from most chemists) and pour into a tray (CH38R). Gently rock the exposed PCB in the tray until the unwanted photo resist is dissolved away. Etch the board in a bath of ferric chloride and after rinsing, expose the PCB in the UV box for a further 10 minutes. Wash off all the remaining etch resist in a tray of sodium hydroxide solution.

サンハヤトの現像液はメタ珪酸塩ですが、こちらは水酸化ナトリウム(sodium hydroxide)を使うようです。

でもちょっと面白そう。 Maplinは店舗自身はたくさんあり、こういった商品の在庫を持つ店も時々存在するので、そのうち試してみたいものです。


SBC-456

| | コメント(0) | トラックバック(0)

先日日本でジャンク漁りをしました。

私の狙いはもともと、XTバス用のカードなんですが、1~2年前にはそこそこ見かけたカードも今やほとんどありません。 ていうか、ISAのカードですら逆にプレミアムがついているのか、高いのです。

特に、8ビットでのビデオカードが狙いだったのですが、ちょっと変わったカードを見つけました。 最初ビデオを含むマルチファンクションカードだと思ったのですが、どうも違います。

P1000705.JPG

ALiのチップがついていて、AMI BIOSやらRTCが載っている時点で怪しさ満開なのですが、調べたらやっぱり違いました。

これはいわゆるSingle Board Computer (SBC)で、組み込み用途などでよく使われているもののようです。 ISAインタフェースに準拠しているように見えますが、実際には既存のPCにインストールするのではなく、特別のバックパネルに入れて使います。

今風に言えば「ブレードサーバ」ですかね。:-)

右上にAT電源コネクタがついていることからも分かるように、これ単体でもコンピュータとして機能します。

型番はSBC-456。シリーズにSBC-456Eというのもあって、これはEthernetがついているのですが、残念ながらそれはありませんでした。 ただ、右のほうに空きパターンは用意されていて、Realtekの8029とパルストランス、いくつかの受動部品を実装すれば動くみたいです。 そう、8029。 PCIバスなのです。 見たまんまISAバスの顔をしたPCIベースのコンピュータです。 ただし規格の関係で、下にある大きな2つのコネクタにマウントできるのはPC/104準拠、すなわちISA準拠のモジュールのみとなります。

CPUはAMDのDX5-133(486互換、133MHz)で、ALiの2つのチップは想像通りチップセット。 基本的なI/Oはすべて装備しているので、電源、メモリ、ディスクをつけてキーボードとモニタに接続すればパソコンとして動作します。 AT電源なんてもう持ってませんが、+5V(3A)と+12Vで動作するようなので、ハードルは高くないですね。

パソコンとしてのスペックは以下のとおりです。

  • AMD DX5-133 CPU
  • L2 cache 128kB onboard
  • C&T 16550 with display memory 1MB onboard (2MB optional)
  • Memory up to 64MB with two 72-pin SIMM sockets
  • 32-pin DIP SSD up to 144MB
  • EIDE, FDD, RS-232, RS-232/422/485, IrDA

左下のソケットにはフラッシュメモリ(ROM互換)が挿せるようになっていて、ディスクレスシステムを構築することもできます。 また、LCDコントローラが内蔵されていて、いくつかのLCDを直接ドライブできるようです。

ちなみに、左端のメモリは私が持っていたジャンクを挿しています。

買ったときは部品取りに使うつもりだったのですが、これはこれで楽しそうなので、このままそのうち活用してみようかと思います。

あ、ちなみに価格は840円でした。 ネットで調べると今でも現役で売っているところもあるみたいですね。 数100ドルと、結構高いですよ。


感光基板再挑戦

| | コメント(2) | トラックバック(0)

SDカードアダプタ、まだやってます。 先日失敗した感光基板作成、日本で基板を買って戻ってきたので、再挑戦です。

今回は出力11Wの蛍光灯を使いました。基板との距離は10cmちょっとくらいです。 10分ごとに蛍光灯の位置をずらしつつ、感光時間は1時間弱行いました。

感光の様子。

P1000696.JPG

現像の結果。 一部ベタ部分で基板にインクがついてしまったところは感光剤がはがれてしまいましたが、おおよそ良好な結果になっています。

P1000697.JPG

感光剤がはがれた部分はレジストペンで修正をかけて、15分エッチング。 エッチング液はおよそ40~45度。

今回はきれいにできました。

穴あけは、基本が0.6mm、ICソケット(1箇所)および太目の線を通す部分は0.8mm、レギュレータは1.0mmです。

んで、部品実装を開始しました。

部品面のエッジコネクタをどうするのか、いまさらになって問題になりました。 EジスPenを使うつもりだったのですが、摩擦に弱いんですよね。

仕方ないので、例により(?)ファミコンカセットのジャンクから毟り取ったコネクタを接続。 必要部分だけとはいえ、40本近くの配線量になりました。 結構面倒だしやりにくい。 しかも何度も再利用しているのもあって、出来が汚い...。

で、今はこんな感じです。

P1000703.JPG P1000704.JPG

ボードが大きくてスカスカに見えるかもしれませんが、片面基板のため、配線は右側の銀色の部分を除いてかなりびっしりです。 配線間隔は50mil(1.27mm)です。

そのため、100mm x 150mmの基板を使いました。 75mm x 100mm両面でもいけるかと思ってアートワークしてみていますが、せっかく両面なのだからジャンパを飛ばさずにと思うとかなり難しいです。

主要な部品はつけ終わりましたが、今回の片面基板バージョンではジャンパも結構飛ばさなければいけないので、のんびりやります。