SVX日記

2004|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|11|12|
2025|01|02|03|04|05|06|07|08|

2005-04-02(Sat) コードを書きつつ、PICのUSART機能の翻訳(受信の巻)

  画像の説明

  えー、今日明日とカミさんがお出かけなので、丸二日ねっとりとプロッタを改造するのである。実は昨日、ウソネタをシコシコと書きつつも、めでたくPIC単体でのパラレル通信および印字には成功し「イ号作戦」を完遂していたのであった。ちなみに、一昨日の時点でハマっていた原因は「オイラSTROBEは正論理だもんね」という理由であった。実はシャープはMZ-1500の時代あたりまで神をも恐れぬ「MZ仕様」というプリンタを生産し続けていて、単純に言うとコレは「セントロニクス仕様」とSTROBEの意味が逆の通信仕様なのである。セントロでは「STROBEをH→Lと変化したらD0〜D7読んでね」という意味なのだが「MZ仕様ではL→Hと変化したらD0〜D7読んでね」なのである。このX1C用のプロッタは、MZ-700時代から生産されているプロッタの兄弟なのであるから、ちょっと考えればスグ気づきそうなものであるが、オイラはこの事実を知りつつも、接続先がX1だからという理由でしばらくタコっていたのであった。X1Cのプリンタポートは清く正しくセントロ仕様であるが、きっとプロッタの接続ポートには専用に論理反転回路が組まれていたのであろう。まーそれはともかく、PICが発するSTOROBEの論理を反転したらあっさり動いたというコトである。

  で、次はシリアル通信を実装するという「ロ号作戦」に突入するのであるが、ついでにかなり前に予告しつつもすっぽかしていたPICのUSARTの機能の受信部の翻訳を進めながらコードを書くコトにするのである。オイラが先日苦心の末にあみだしたバルーンヘルプ法(訳文中の「。」にマウスカーソルを当てると原文が表示される)は翻訳中や開発中に自分が参照するぶんにも便利なので、今日は更新しながらの作業である。ひとつライブ感覚でヨロシクシェケナベィベェ。

  12.2.2 USART非同期通信受信ポート_

USART受信ポートのブロックダイアグラムを図12-8に示しますRB1/RX/DTピンで受信された信号は、データ復号器にかけられますデータ復号器は実質的にはボーレートの16倍の高速シフト演算器で、実際にはメインの受信シリアルシフト演算はビットレートかFOSCで稼動します

非同期モードの場合、受信動作を行うにはCRENビット(RCSTA<4>)をセットする必要があります

受信ポートの主役は受信(シリアル)シフトレジスタ(RSR)ですストップビットが検出されると、RSR内の受信データはRCREGレジスタに移動(RCREGに空きがある場合)され、移動が完了すると、RCIFビット(PIR1<5>)がセットされますこの時に割り込みを発生させるか否かは、ビットRCIE(PIE1<5>)で設定できますなお、RCIFビットは読み出し専用ですが、RCREGレジスタが読み出されて空になると自動的にクリアされますいうなればRCREGレジスタはダブルバッファリングされたレジスタです(深さ2のFIFOバッファと言えます)2バイトのデータをRCREGバッファに転送、溜めておくことができ、3バイト目のデータもRSRレジスタで受信開始することができますただし、3バイト目のデータのストップビットを検出した時点でRCREGレジスタがデータで一杯だった場合、オーバランエラーが発生しOERRビット(RCSTA<1>)がセット、RSR内のデータは失われてしまいますRCREGレジスタは、FIFOバッファ内の2バイトを取り出すため、連続2回読み出すことができます

オーバランエラーのOERRビットはユーザがクリアする必要があり、これは受信回路をリセット(CRENをクリアしセット)することで実行できますOERRビットが一旦セットされると、RSRレジスタからRCREGレジスタへの移動は停止してしまうので、OERRビットをクリアすることは重要です

一方で、ストップビットがクリア(LOW)で検出された場合、フレーミングエラーのFERRビット(RCSTA(<2>)がセットされますFERRビットとパリティビットは受信データと同じようにバファリングされるので、RCREGを読み出すとRX9DとFRRは次の値に更新されますしたがって、直前のRX9DとFRRの情報を失わないよう、RCREGレジスタ読み出す前に、RCSTAレジスタの内容を確認することが重要です

非同期通信モードに設定する場合は、以下の順序で行います

1. RB2/TX/CKピンとRB1/RX/DTピンを同期/非同期通信用の送受信ピンとして設定するため、TRISB<1>ビットをセット、TRISB<2>ビットをクリアします

2. 望むボーレートが得られるようにSPBRGレジスタを設定します。高速ボーレートモードを利用する場合は、BRGHビットもセットします(12.1節 USARTボーレートジェネレータ(BRG)参照)

3. SYNCビットをクリアし、SPENビットをセットすることで、非同期通信モードに設定します

4. 割り込みを利用する場合は、RCIEビットをセットします

5. パリティ付き9ビット送信を利用する場合、RX9ビットをセットします

6. CRENビットをセットし受信許可の状態にします

7. 受信が完了するとRCIFビットがセットされます。RCIEビットをセットしていたなら割り込みも発生します

8. RCSTAビットを読んでパリティビットを取得し(有効にした場合)、受信中のエラーの有無を判定します

9. RCREGレジスタから、8ビットの受信データを取得します

10. 何らかのエラーが発生した場合、CRENビットをクリアしてエラーをクリアします

  画像の説明

  ……などと、マニュアルはガシガシと訳せても、コードはサッパリ動いてくれないのが世の常である。翻訳は質が低くてもある程度は役立つが、コードは動かなければまったく役に立たない。翻訳の質には上には上があるが、コードは動けばその上はあまりない。このあたり、文系と理系のソリが合わない理由なのかもしれない。

  散々、悩みに悩んだのでアッサリと原因を書いてしまうのはもったいない気もするのだが、もったいぶっていても仕方ないのでアッサリ書く。ひとつの原因はメモリバンクの切り替え忘れであった。SPBRGとTXSTAにアクセスするにはバンク1に切り替える必要があるのだ。概ねPICに実装された特殊機能というのは、一度コードが書きあがってしまえば流用が利くのだが、一発目が動くまでが大変なのだ。ガッチリとマニュアルを訳し、その機能について深く知れば知るほど、うっかりタコまでの距離は離れてゆくのである……と、これくらいいーわけすれば、ダサミスをごまかせるだろ。ふぅ。

  画像の説明

  あまりにもコードでハマってたので、気分転換にハンダ付け(?)だ。先日サボッて接続してなかった、RX/TXの配線を済ませて……コテが温まったついでに、USB変換基板の抵抗なんかも付けておくか……って、ご本尊のFT232BMのみ付けないのも不自然だな……付けちゃうか!? 今度は細いコテを温めて0.8mmピッチの足をハンダ付け。作業が2度目のせいか、非常にアッサリと付いてしまった。意外とお上手じゃんオイラ。こんなにアッサリ付くなら配布中の変換基板にサービスでFT232BMのみ実装コースを設けようかしらん。

  画像の説明

  とかなんとかで、ようやくオシロレベルながら、PICのRB2/TX/CKポートからシリアル信号が出るようになりましたゼ!! で、USB変換基板経由でPCに接続し、Rubyで簡易通信スクリプト組んだら、画面に'A'がゾロゾロと出てきましたわ。FT232BMバンザイ!! USB変換基板バンザイ!!

  つーわけで、なりゆきでPIC→PCへのUSB通信が成功してしまったので「ロ号作戦」を完了せずして、一気に「ハ号作戦」に差し掛かってしまったコトになるのだが、PC→PIC側の通信ができないったら、できないったら、できないったらない。目標は単なるエコーバック(PCからPICへ送ったデータを送り返す動作)なのだが、受信してるのかしてないのか、まったくの沈黙なのである。

  ココまでかなりの連続作業でのーみそも熱暴走寸前であるから、こーゆー場合は寝るに限る。寝るに限るがその前に、1999年の本日、志半ばにして亡くなられた我が心の師匠、祝一平氏に一分間の黙祷を捧げるのである。氏の存在がなければ、今のオイラはないといっても過言ではない。師匠!! ここ数年ではありますが、オイラはあなたの掲げられていた「硬軟両道(はーどもそふとも)」を実践すべく励み、老後のZ80プログラミングに向けてマイ進しております。これからも遠い空から見守って下さい。

  今日もまずまずのゲインであった。では、また明日。


2006-04-02(Sun) 電車の中でLANを組む

  なんだか、だいぶ間があいてしまったが、まずは今年も、志半ばにして病に倒れてしまった我が心の師、祝一平氏を偲んで、1分間の黙祷を捧げさせていただく。そちらはどんな塩梅でしょうか? 今もその筋なコトを考え、実践されていらっしゃるのでしょうか? もしかしたら、もう生まれ変わって、コチラの世界で再びその筋を目指してマイ進中なのでしょうか?

  さて、今日は予告どおりWBEL3とWBEL4を同時に起動して、互いに通信をしてみちゃったりしたい。フツーならWBEL4をcoLinuxで動かしたりしたら、次はXの設定なんかに進んでGUI環境を整えちゃったりするものなのだが、オイラはXにまるで興味がない。よって、こーゆー地味な方に突っ走っていってしまうのである。あーぁ、こんなコトだから、今日もスクリーンショットが地味すぎて困ってしまうのだ。

  まずは、WBEL4を起動したら、いきなりネットワークがつながらない。WBEL3を起動していたりすると、Win側にひとつしかないTAPドライバの口を取り合ってしまうのが常だが、それが原因ではなくネットワークがつながらない。なぜなら、一旦ノートPCにインストールした時にeth0の設定にMACアドレスが書き込まれてしまっているので、それとインターフェイスが矛盾していると上がらないのだ。これの修正は矛盾したHWADDRを消すだけ。ついでにeth0のネットワークの設定もしておこう……

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.5.129
NETMASK=255.255.255.224
ONBOOT=yes
TYPE=Ethernet
GATEWAY=192.168.5.130
・HWADDRの行は消す
# ifup eth0
・これでインターフェイスは起動するはず
# ifconfig
・上がっているか確認する

  ……妙なネットマスクだが、WBEL3とWBEL4を同時に使いつつ、いろいろ実験をしたいんでこんなことにしている。GATEWAYはWin側のインターフェイスのIPアドレス(の予定)だ。

  で、あまり必要ではないのだが、Win側のIPアドレスはcoLinux側のdhcp機能で設定させたりしてみたい。こーすると、Win側のTAPの設定は自動にしておくだけで済む。あ、まずはdhcpパッケージのインストールね。

# rpm -ivh /mnt/bin3/WhiteBox/RPMS/dhcp-3.0.1-38_EL4.i386.rpm
# cp /usr/share/doc/dhcp-3.0.1/dhcpd.conf.sample /etc/dhcpd.conf
# vi /etc/dpcpd.conf
 
ddns-update-style interim;
ignore client-updates;
 
subnet 192.168.5.128 netmask 255.255.255.224 {
 
        option subnet-mask              255.255.255.224;
 
        range dynamic-bootp 192.168.5.144 192.168.5.159;
        default-lease-time 21600;
        max-lease-time 43200;
 
        host suzaku40 {
                hardware ethernet 00:FF:00:D7:A7:A1;
                fixed-address 192.168.5.130;
        }
}

  縁起モンなので、ここらで一度、再起動しておこう……と、その前にうっとおしいサービスを落としておく。落としとくとよいサービスは、canna, kudzu, messagebus, smartdあたり。あと、cronを生かしておくと、突然makewhatisというmanページかなんかのインデックス処理が走ってCPUを食いまくるので、cronを落としておくか、/etc/cron.daily, /etc/cron.weeklyの中のmakewhatisをコメントアウトしておくのもよい。サービスを落とすにはntsysvコマンドを利用するとラクでいいぞ。

  再起動したら、起動時の[FAILED]エラーが相当減ったはずである。気分よく、一般ユーザを追加したりしてみよう。apacheを動かした時にsuexecで悩まないように、uid, gidとも500で作る。

# groupadd -g 500 furuta
# useradd -u 500 -g 500 -m mitsu
# passwd mitsu

  一般ユーザが作成できたら、主な作業はそっちでする。cygwinからsshでログインだ。

$ ssh 192.168.5.129 -l mitsu

  作業の順番が前後するが、WBEL3とWBEL4を同時に使う場合、TAPデバイスを追加する必要がある。つまりは、仮想Linuxサーバとはいってもサーバであるから、2台のサーバに各々1枚ずつ(1枚以上でもよい)ネットワークカードが必要になるのだ。PC内部に存在するサーバに対し、ネットワークカードを1枚追加で挿すイメージである。

  設定、コントロールパネル、ハードウェアの追加、次へ、ハードウェアを接続しています、次へ、新しいハードウェアデバイスの追加、次へ、一覧から選択したハードウェアをインストールする、次へ、次へ、ネットワークアダプタ、次へ、TAP-Win32 Provider(coLinux)、TAP-Win32 Adapter V8(coLinux)、次へ、次へ、続行、完了……って感じだ。

  TAPデバイスが追加できたら、名前をcoLinux30とかcoLinux40とかにしておく。で、この名前は、coLinuxの起動設定ファイル、wbel4.colinux.xml等から参照される。具体的には設定ファイルの末尾の設定を、以下のような記述に変更する。

<network index="0" type="tap" name="coLinux40" />

  各々の環境をちゃんと設定すると、WBEL3とWBEL4の両方が立ち上がるようになる。cygwinの端末から、各々の環境にsshでログインできるか確認してほしい。この時点で/etc/hostsはこんな感じかな。

192.168.5.65    wbel3-co wbel3-co0
192.168.5.66    suzaku3 suzaku30
192.168.5.129   wbel4-co wbel4-co0
192.168.5.130   suzaku4 suzaku40

  実はcoLinuxは起動直後にTAPデバイスが有効になるので、Win側からはその時点でdhcpへの照会が始まるのだが、coLinux上でdhcpdが起動するまでには相当のタイムラグがあるので間に合わず、Win側のTAPデバイスに変なIPが付くコトがある。その場合は、Win側でipconfig /renewを実行し、IPを設定しなおすとよい。

  で、仕上げ。この状況ではWinマシンがルータの役割をしないので、WBEL3とWBEL4の間で通信ができない。Winマシンをルータにするには、サービスを立ち上げればいい。マイコンピュータ、管理、サービスとアプリケーション、サービス、Routing and Remote Access、開始だ。スタートアップの種類を自動に設定しておくと、再起動毎にサービスを開始する手間がなくていい。

  さて、WBEL3からWBEL4へのpingは通るだろうか? ルーティングの設定をちゃんとすると、個々の環境からLynxでWebアクセスもできるようになる。時々はwgetでrpmファイルをゲットする必要もあるであろうから、ネットワークはちゃんと設定しておくに越したことはない。

  なお、Win側でルーティングサービスを上げる代わりに、ブリッジ接続を使うという手もあるらしい。おそらく、スイッチ(ハブ)につなぐような感じになるのだろうな。こっちのが設定は簡単だが、ネットワークが別にならないので面白みがないという問題はあるが。

  最後に、以前からやってみたかった、仮想TAP2本を使ったBonding環境(2本を束ねて1本にし、通信速度を倍もしくは信頼性を倍にする手法)の構築であるが……coLinuxにはBondingドライバは用意されてませんでした……そりゃそうか。ちゃんちゃん。


2008-04-02(Wed) ゼビウススティック、ナハトムジーク

  今日は祝氏の命日だ。せっかくなので勝手に故人を偲んで思い出話をする。

  氏はゲームをする時に、いわゆる「ゼビウススティック」を愛用されていた。「ゼビウススティック」とは、電波新聞社がシャープのX1用ゲームソフト「ゼビウス」を出す際、せっかくだからキーボードでなく、ジョイスティックでゲームセンターの雰囲気を満喫して欲しい、との思いから、ソフトに同梱されて発売された周辺機器の通称だ。正式名称はXE-1。なお、ジョイスティックを同梱しないバージョンも同時発売されたが、値段差は2〜3千円だったと思う。つまり、このスティックは2〜3千円の品ってコトになる。

  このジョイスティックは、想像以上に評判がよく、その後に発売された他機種用のゼビウスにも、その機種用にI/Fをカスタマイズされたバージョンが同梱されたばかりか、単体発売までされるほどの人気であった。元祖はクリーム色だったが、黒バージョンや、金ピカバージョンも出ていた気がする。実はオイラも、単体発売された黒バージョンを購入し、愛用していた。

  祝氏は、電波新聞社がこのゼビウススティックをディスコンにし、もっとゲームセンターのモノに近い、プロバージョンを出すようになってしばらくの後、氏の創刊したディスクマガジンである電脳倶楽部上で、中古を大量購入したい旨の告知を出していた……あ、あれ? 昨日の今日だが、気が付けば、これは「お気に入りガヂェット一生分購入」に他ならないではないか。なんかオイラと共通点の性癖があったんだな……あはは。あは。

  なんか、久々に「ゼビウススティック」で懐ゲーをやってみたくなったなぁ。もう、捨てちまったかなぁ。ひょっこり出てきたりしないかなぁ。Wiiのバーチャルコンソールで遊ぶにはピッタリなんだけどなぁ。

  ちなみに、ふと電波新聞社の近況が気になって調べたとところ、今もコンシューマー向けにアイテムを発売しているようだ。PCとTVの映像信号を変換する系の機械が十数種類。既にジョイスティックは作っていないようだが、この映像変換機にも「型番がXで始まる」という「ゼビウススティック」の名残が残っている……というか、そもそもこの映像変換機も、当初はゲームをするのを主用途に発売されたものなのだが。

  桜が舞い散るこの季節、あらゆることが諸行無常であることを思い起こす今日この頃である。しかし「その筋」関係という、もっとも移ろい易い業界においても、やはり電子計算機の基本は変わっていないし、そのお陰もあってオイラは「趣味で」メシを食えている。今ここで改めて氏に感謝しつつ、黙祷。

  ※ゼビウススティックを持っている方がいらしたら、よろしければ画像を提供してください。

  画像の説明

  いまさら(2024/12/29)ながら、オークションに出ている画像を見つけたので、拝借させていただいた。なんと箱付きだ。箱の記憶はないなぁ。


2009-04-02(Thu) サーバ2009

本日のツッコミ(全1件) [ツッコミを入れる]

 [かきかけ、すら無いですよ?? エラーなのでしょうか?]



2017-04-02(Sun) 戦士のマウス、製作中

  3年以上も寝かせていたプロジェクトを進捗してみた。

  画像の説明

  形状的に重力サーベルっぽいこともあり、そのうち公式に発売されるんじゃないかと思っていたのだが、発売されず、誰かがやってんじゃないかとも思っていたのだが、誰もやってないようだ

  一応、過去の作品である、DVDや、原作の漫画で考証したが、どれも割とドクロのデザインは適当なので、それとなく最新の超合金を参考にすることにした。

  元のマウスは、ロジクールの安いワイヤレス。だが、前回と同様、デザインがシンプルで邪魔をしないところがいいのだ。

  一応、最初に作る「戦士のマウス」ということなので、シリアルナンバー1の大山トチローモデルらしく、グレーと茶色にしてみた。これがハーロックモデルなら「黒か深緑」エメラルダスモデルなら「赤」になるところだろう。鉄郎モデルなら「ガンメタ」かな。

  塗装は、数年前に吹いたサフェーサの上に、アクリルガッシュで行った。

  割と意図したデザインに仕上がった。次の週末にでもクリアで仕上げることにしようかな。