10周年のSPコンテンツ!

ATARI用 Ethernetアダプタ EtherNEC製作&ドライバ作成記

2010年のOSC神戸で展示した ATARI用Ethernet SMC_TT http://togetter.com/li/76769 の続編として作成した、ATARIマシンのROMカートリッジスロットにISA NE2000を接続するアダプタである "EtherNEC" のハード製作およびNetBSDドライバ作成関連のつぶやきアーカイブです。全然まとめになっていなくてすいません。 4月16日に迫った今年のOSC神戸のNetBSDセミナーで、このEtherNECとbus_space()の解説話ができたらな〜、と鋭意準備中です……
NetBSD ethernec デバイスドライバ ATARI ハード製作
1
Izumi Tsutsui @tsutsuii
http://hardware.atari.org/ether/ のドライバ書いてくれるなら俺の余ってる奴を送ってやるぜ! とまたまたドイツからメールが
Izumi Tsutsui @tsutsuii
こっちはVMEバスじゃなくてROMカートリッジスロットに差すタイプ。作るならこっちのほうが超簡単だけど、ポーリングonlyなのと、スロットにあう2mmピッチ?のカードエッジ部分基板を自分で作らないと世間には無さそうだったのでパスしてたんだけど。
Izumi Tsutsui @tsutsuii
回路図を見ると、データバスのリード側は8bitで直結。ROMカートリッジというだけあってライトはデータバスに出ないらしく、書き込みは別アドレスでアクセスしてアドレスバスのA1-A8をバスバッファを介してデータバスにつなぐという荒技な実装っぽい。
Izumi Tsutsui @tsutsuii
割り込みはないので送受信はポーリングのみ。dreamcastのNE2000の初期はcallout(9)でポーリングだったけど速度的に結構つらかったような。しかもatariだとCPUが10倍以上遅いし。
Izumi Tsutsui @tsutsuii
atariのbus_space(9)は全部関数ポインタなので書こうと思えば原理的にそんなに難しくないと思うけど、結構トリッキーだから適当に書いてこれで試して、っとリモートデバッグするのはつらいかも
Izumi Tsutsui @tsutsuii
パターンのデータはあるっぽいので http://hardware.atari.org/images/snap0.jpg の一番右の挿すとこだけ誰か作って下さい。残りは自分で作るから。ってダメか。
Izumi Tsutsui @tsutsuii
http://www.asamnet.de/~hilgarte/ether_e.php こういうのがちゃんと売られていたりしたのかしら。性能は 30〜100KB とやはり結構つらい感じ。
Izumi Tsutsui @tsutsuii
Atari界でメジャーなEthernetデバイスはどれなのだろうか。先に書いたEtherNECがx68kでのNeptune-Xのような存在で、例のSMC ISAなカードを使って作る方はマイナーだったりするのだろうか
Izumi Tsutsui @tsutsuii
回路規模、GALライタ、機械加工等々の手間からすると後者のほうが圧倒的にめんどくさいからみんな前者のROMカートリッジポートNE2000なのかなあ。後者はWebページすら存在しないし。
Izumi Tsutsui @tsutsuii
今の時代は個人で基板を起こすのもそんなに大変じゃないとは聞きますが、この規模のを1,2枚作る場合っていくらくらいなんですかね。
Izumi Tsutsui @tsutsuii
360DPIのビットマップのパターン図はあるんですが、そもそもそういうので受け付けてくれるのかとか。聞いてみればそれなりのCADのデータも存在するんでしょうけど
Izumi Tsutsui @tsutsuii
ドライバを書くためにデバイスを買うのは普通のことだという人はいるかもしれないけれど、ドライバを書くためにデバイスを作るのはどうなのだろうか
Izumi Tsutsui @tsutsuii
EtherNEC is the most used and most available network solution on Atari. らしい。うーむ
Izumi Tsutsui @tsutsuii
http://www.amy.hi-ho.ne.jp/shimada/neptune/data.html のNeptune-Xの資料によれば、NE2000を8bitのXTバスのみに接続した場合、自動でバス幅が検出されて8bitモードになるはず。
Izumi Tsutsui @tsutsuii
が、その場合 src/sys/dev/ic/ne2000.c ではNE1000として検出されてしまうのか?
Izumi Tsutsui @tsutsuii
NE1000とNE2000とではバス幅以外にメモリの量も違うようなので、NE2000 in 8bit bus mode の検出手段を新たに用意してやらないといけないのだろうか。
Izumi Tsutsui @tsutsuii
さらに dmawidth は外部のバス幅と連動しないのであれば外部 8bit で DMA 16bit なんてややこしい設定にしないといけないのだろうか。
Izumi Tsutsui @tsutsuii
RTL8019ASのデータシートによれば、バス幅の検出はNeptune-Xのページにあるように IOCS16B の端子レベルを起動時に見て判定。
Izumi Tsutsui @tsutsuii
NE2000で dmawidth が 8bit でバス幅は 16bit (=bus_space_*_stream_2() を使用)っていうのはどういうハードですか おしえて nonakap@ さん (´・ω・`)
Izumi Tsutsui @tsutsuii
いつぞやの42円のRTL8019ASなNE2000のIOCS16B端子にテープを貼ってi386に挿して起動。NE2000と認識するが invalid packet length と文句を言われて通信はできないっぽい。
Izumi Tsutsui @tsutsuii
その状態で ne2000.c をいじって無理矢理 dmawidth = NE2000_DMAWIDTH_8BIT にすると動く。うーん。 @nonakap さん、当該ハードの設計上の問題だったりしませんか (´・ω・`)
Izumi Tsutsui @tsutsuii
ちゃんと読んでないけど、 NE2000とNE1000の違いってバス幅とメモリ量だけじゃなくてメモリの配置も違うのかしら。だとするとNE2000 on 8bitの場合はそれなりの検出用コードを ne2000_detect() 関数内に書かないとだめなのかしら
Izumi Tsutsui @tsutsuii
ISA 16bit側の D8-D15 もテープでマスクしてみたけど、なぜかちゃんと NE2000 として認識されて DMAWIDTH_8BIT に設定するだけで動く。あれ?
Izumi Tsutsui @tsutsuii
うーん。D8-15をつないでなくても sc_useword=1 で動いてるってこと? それとも何か一目見ただけではわからない小細工が入ってる? はたまた単にテープが外れてる?
Izumi Tsutsui @tsutsuii
テープは外れてないっぽいけど、いろいろ試すと動いているかと思いきや ftp で get すると invalid packet length を大量に吐く。が、全然動いてないわけではなくて文句を言いながら受信はできてる。うーん。何が起きているんだ。
残りを読む(350)

コメント

Izumi Tsutsui @tsutsuii 2011年4月20日
無事にOSC神戸も終わったので、続き(?)の準備から展示発表までのまとめも作成しました。「OSC 2011 Kansai@神戸 NetBSDブース 030マシン展示とセミナー発表」 http://togetter.com/li/125708
ログインして広告を非表示にする
ログインして広告を非表示にする