SVX日記
2004-10-04(Mon) X68kキーボード変換アダプタケース製作
さて、基板ができたところで、次に行うのはパッケージングである。ケースの穴にケーブルを通して、ケーブルを基板にハンダ付けするのだ。とりあえず、7pinDINジャックのピンに5本のワイヤをハンダ付けし、ケースにハメ込み、裏からナットで固定する。固定ができたら、ケースに基板が収まるかどうか確認だ。……んが、予想外の自体。電解コンデンサの高さが1mmほど高すぎて、ケースが閉まらない。ぐぐぅ、高さ方面だけは多少余裕があると思っていたのだが……。
そう考えても入らないので、仕方なく現在の100uFのモノを外し、手持ちの……おぉ!! SVX用のエアコン修理用の予備として買っておいた高さのないコンデンサがこんなトコロで役に立つとは。22uFと多少容量が小さいが、こんなもん回路の安定のためのオマジナイみたいなもんだから、問題なしだ。
ついでに、基板を固定するためのネジを通す穴も加工する。こんな小さな基板の4隅を留めるのはナンセンスなので、基板の空いている箇所に1本だけφ3mmのネジが通る穴を空け……って、それだけでも十分なスペースがないんですけど。仕方ないので、既存の配線をちょっと迂回させて、空いた場所に3mmのドリルで穴を開ける。するとなんと、基板の左半分のランドの使用率が100%になったぞ。芸術的だ。
基板とジャックがケース内に収まりそうなことを確認して、基板を固定するためのケース側の穴を空ける。基板を固定したい位置に置き、穴を通してエンピツで印をつけ、簡易ボール盤でドリドリ。簡易ボール盤だけあって、非常に動きがしなやか……もとい「しなる」ので狙ったところに落ちるのか心配だったが、概ねOKであった。ちょっと工作精度を要求されるとやはり簡易ボール盤ではツラいですな。
今回のケースは厚みがあることなのでイッチョマエに皿ネジを使ってネジの埋め込み処理をしてみた。といっても、以前から探しているものの皿ネジに合うように円すいにエグるビットに適当なものがない(高かったり、デカかったり、軸がルータに太すぎたり)ので、ありあわせの工具を使い私流の方法で円すいにエグる。といっても簡単。手持ちの一番太いドリル刃(φ6.5mm)を直接手持ちで穴にあてがってグリグリするというもの。ただ、それだけだと心持ち各度が浅く、脇が空き頭が出るので、順にφ6.0,5.5,5.0mmのドリル刃を当てて少し角度を深くする。ちょっと面倒だが、どうよこの仕上がり。ツラからマイナスコンマ数ミリに水平で完璧だ。おまけに中でVccにネジが接触してしまっているので、ネジから5Vが取れるという高機能ぶりだ(アブネーから後でシールでも貼ろう……)。
さて、皿ネジ加工でクリティカルヒットを繰り出したので、そのまま気分良くPS/2側のケーブルを通す穴を空ける。PS/2のキーボードコネクタは「ワイヤレスキーボード&マウス、ただし到達距離10cm」という腐れガジェットからチョン切ってきた(Logicoolコロス)。穴は新兵器のリーマでちょっとずつ広げ、ギリギリケーブルが通るように調整。通した後は配線の配置を間違えないようにハンダ付け。
2005-10-04(Tue) ガスが出ずして、反省す
家に帰ると、カミさんに、ガスレンジに火が着かない、といわれる。ウチのガスレンジは以前から調子が悪く、まったく火が着かなくなったり、ボタンから手を離すと火が消えたりする。しかし、今日はちょっと様子が違うようだ。シューっというガスの出る音さえしない。どうも、ガスが元から止められているような感じ。
当然、元栓は開いてある。カミさんからの追加情報で、そういえば風呂場で足を洗う時にも湯が出なかった、ともいわれる。どうも、ウチの部屋全体のガスが止まっているようだ。うーむ、オイラは朝風呂原理主義者なので、今晩は困らないとしても、明日の朝、風呂に入らずに出勤するのはちょっと気持ち悪い。
とりあえず、部屋の外のメンテナンスハッチ(?)を開ける。アッチが電気で、ソッチが水道。で、コッチがガスだ。バルブらしいものは開位置にある。ガス漏れランプも消灯している。やっぱり問題はなさそうである。しかし、なんだ、コレは? ハッチの前に直径2cmほどの、見慣れないゴム栓のようなモノが落ちている。こんなものが落ちていれば、昨晩にでも気がついているだろうから、何かあったのではないか?
ガス会社に連絡する。24時間対応らしく電話がつながった。よかった。え? なに? ボタンを押す? ガスメータのボタンを押せと指示される。押すとガスが出るようになった……が、数秒で鎮火。どうやら、配電盤で言うところの、ブレーカが落ちている、という状態のようである。ガス漏れでないとすると、ガスメータの故障が疑わしいらしい。
とりあえず、駆けつけてくれるというコトなので、待つ。深夜で悪いが、兄ちゃんが来てくれた。ガサゴソとガスメータの辺りで作業している。ん? ガスレンジを着けてみろって? 着いた! 解決? なんでも、ガスメータが新品に交換されていて、初期設定の不足だったそうだ。おいおい、交換したのはアンタんトコの人間だろ……。
2006-10-04(Wed) 気分はリアル沙羅曼蛇
さて先日、予てから念願であった胃カメラを呑んだわけだが、ただひとつ心残りだったのが、自分の胃の映像を入手できなかったコトであった。しかしウチの会社では、人間ドックや胃カメラなどの重度の検診を実施した場合には、後日、担当医に正式な結果を伺いに行くというシステムがあるのである。オイラの場合、パッ見でなんともないことが判明したので、既に当日「キレイな胃ですね」という所感を頂いているが、そういう結果でない場合には、後日に改めて詳細な結果を伺うワケで……まぁ、なにしろ、今朝はワクワクしながら医療センターに向かうのだ。念のため、カルテをもらえなかった場合に備え「デジカメを忘れずに」である。
しかし、イザ先生と向き合うと先生はうかない顔をして、オイラと視線を合わせようとしない……などというコトもまったくなく「コレが食堂で、コレが胃、コッチは十二指腸」などと、フルタニアン・マジカル・インターナル・ツアー状態である。あぁ、楽しい。
やっぱり再度「問題ないです」という結果を受けつつ、カルテを渡される。このカルテを受付に提出すれば診察終了なのだが「このカルテを撮影しないテはないッ!!」のである。すかさず待ち合い室のソファに胃の映像のプリントを展開し、準備してきたデジカメでバシバシと撮影していると……
……などとイキナリ看護婦さんがッ!! な、なにやってんですか!? い、いやなに、記念にと思って……。そ、そうですか……いつもデジカメ持ち歩いてるんですか? あ、今日はコレを狙って用意してきたんです、だってカルテもらえませんよね。そ、それはダメですけど……。いやぁ、コレを機に自分の内面を見つめなおそうと思ってまして……あは、あはは、あはははは(笑)。
ちゅーわけで、ちょっと呆れられながらも、無事、自分の胃の写真をゲットしたのであった。ただ、そのまま載せるっつーのも、いくらなんでもちょっとアレなので、照れ隠しに「沙羅曼蛇」っぽくしてみるのである。Destroy them all!!
2016-10-04(Tue) sdccのcharがunsignedになっててドハマり物語
ラズベリーパイとPIC間でI2C通信を成立させたくて、PIC用にI2Cスレーブのスタックを、純ソフトウェア実装で書いていたのだが、スレーブとしてとりあえずの受信に成功したところで、ライブラリ化するため、コードを分割しようとしたところ、これがどうにも動かなくなってしまった。
生成されたアセンブラコードに降りていくと、確かに符号付きとして数値比較しているらしきコードが見当たらない。すわコンパイラのバグか!?と、思って「sdcc signed char」でググってみたところ、charはunsignedとして扱われる旨の情報がある。ウッソ!? いつからッ!?
News
June 12th, 2016: Small Device C Compiler 3.6.0 released.
SDCC 3.6.0 Feature List:
char type is now unsiged by default (old behaviour can be restored using --fsigned-char)
$ cat test.c
#include <stdio.h>
void main() {
char x = -1;
signed char sx = -1;
unsigned char ux = -1;
printf(" %lu %x\n", sizeof(x), (unsigned char)x);
printf("s %lu %x\n", sizeof(sx), (unsigned char)sx);
printf("u %lu %x\n", sizeof(sx), (unsigned char)ux);
printf(" %x\n", x > 0);
printf("s %x\n", sx > 0);
printf("u %x\n", ux > 0);
}
$ ./a.out
1 ff
s 1 ff
u 1 ff
0
s 0
u 1
「0, 1, stop condition」の3値を返す関数だったので、オシャレに負数を返すように変更したことが裏目に出た。しかし、char型がデフォルトでunsignedなんてCの仕様として許されないんじゃねーのか? と、K&Rの第2版をパラパラ……「このcharが符合付きか符合なしかは機種によるが……」なんですか、そーでしたか……私が悪うござんした。
--fsigned-char
By default char is unsigned.
To set the signess for characters to signed, use the option --fsigned-char.
If this option is set and no signedness keyword (unsigned/signed) is given, a char will be unsigned.
All other types are unaffected.
--funsigned-char
The default signedness for every type is signed.
In some embedded environments the default signedness of char is unsigned.
To set the signess for characters to unsigned, use the option --funsigned-char.
If this option is set and no signedness keyword (unsigned/signed) is given, a char will be signed.
All other types are unaffected.