読者です 読者をやめる 読者になる 読者になる

Ichigo Exception <3

スマブラDXと、Linuxカーネルと、日々のつらい気持ち

引っ越しをした/引っ越しをせよ

これまでの賃貸住宅を解約し、新たな賃貸住宅に引っ越して約一ヶ月が経った。家賃が月3万円程度増えたが、それを上回るメリットを感じているので、大成功だ。素晴らしい…
私は、オタクが処女しか認めないという特性を例に漏れず継承しているので、前回と同じく今回も新築物件を選んだ。
満たしていると QOL が上がる賃貸住宅のポイントを、とりあえず 30 分で思いついた分だけ列挙する。主にオタク趣味がある新築希望者が対象。

  • 環境
    • 3F 以上である(1F は論外。ホコリの溜まる速さが数倍違う)
    • 大型トラックの通行が多い道路に面していない(幹線の国道は高速道路よりもずっと排ガス被害が大きい。高速道路では通過するだけだが、国道は停車してガス攻撃してくる)
    • 家の前を、マフラーを改造した二輪車で隊列走行するタイプの人種が通過しない(窓を締め切っていても、ゲーム・アニメの音が数十秒かき消されて殺意を覚える)
    • 24 時間ゴミ出し可能(でないと夏は臭いで死ねる)
  • 設備
    • 宅配ボックスがある(そのうち再配達は有料が当たり前になる…?)
    • テレビを置きたくなる場所が部屋側ではなく窓側を向いている(夜中に別の部屋がある壁に向かってコントローラをカチャカチャ、かつ奇声を上げていると、翌日郵便受けには手紙が入っているだろう)
    • 自由な光ネットワーク回線がある(インターネット使い放題系で妥協するなら、構成・キャリア・プロバイダを確認しておく。別の部屋から出たブロードキャストフレームが見える圧倒的糞構成を見たことがある)
    • クッションフロアでない(あれはブラウン管を置くだけで沈む)
    • 自転車を 2 台以上駐輪できる(事前に聞かないと資料には載ってない)
    • 照明がリモコンで ON/OFF できる
    • 洗濯機置き場がある
    • 浴室乾燥機がある(ベランダに干せる日・時間は限られている)
    • 照明が付属している(ケチな新築には蛍光灯などついていない)
    • アース付きコンセントが部屋のすべての面にある
    • 電圧が正常(無負荷で 103V くらいなら正常。ついでに、コンセントの極性が正しく結線されているかどうか見てもいい。正しく工事されていれば、コンセントの長い方は指を入れても感電しない)
  • 契約
    • 任意のクレジットカードで支払える
    • 契約更新が無料(有料のところ、契約期限を変更するためだけに何故数万円も必要なのか…)

住所変更の手続きは目眩がするほど面倒だった(死)。平日のみ、それも 17 時までしか受付せず、遅延すると罰金があるなど、ブラック企業が蔓延する日本で許されるのか?(転出・転入届のことを言っている)。受付員は週休 5 日でいいから、土日のどちらかはオープンしてほしい…(例えば、土曜日は常にオープン、ほかは平日のうちいずれかが毎週ランダムでオープンなど)

PIC18で遊んだ

以前作成した PIC18F26K20 を使った GC 入力信号表示装置の改良版として、信号を GC に入力できるような装置を作ろうと思っています(思っているだけ)。

それで久々に PIC18 を触りましたが、やはり C で普通に記述できる魅力はすごいです(アーキテクチャの特性上自由にポインタ操作はできませんが)。フリーで使用できる開発環境 MPLAB とコンパイラ xc8/16/32 がチップベンダーの Microchip 社から提供されています。
GC 信号を入出力するには、1us 周期で HIGH/LOW を制御できる必要がありますが、この調整に苦労していました。
PIC18F26K20 ではチップ内蔵オシレータを最大の 16 MHz で動作させ、PLL で 4 倍の周波数を得ると、IPC が 4 なので秒間 16 サイクルを得られます。随分余裕があるように思いましたが、配列操作にやたら時間がかかり、以下のような普通の for ループでは間に合わず、アセンブリで書いても微妙に 1us に収まりませんでした。

for (i = 0; i < ARRAY_SIZE(a); i++) {
  arr[i] = PORTCbits.RC0;
}

結局全部マクロ展開に任せることにしました。xc8 の制約として、配列インデックスは 128 が最大なので、要素 2n 個で使える方法でぴったりです。

#define EVAL_128(exp, arr, port, n) EVAL_64(exp, arr, port, n - 64) EVAL_64(exp, arr, port, n)
#define EVAL_64(exp, arr, port, n)  EVAL_32(exp, arr, port, n - 32) EVAL_32(exp, arr, port, n)
#define EVAL_32(exp, arr, port, n)  EVAL_16(exp, arr, port, n - 16) EVAL_16(exp, arr, port, n)
#define EVAL_16(exp, arr, port, n)  EVAL_8(exp, arr, port, n - 8)   EVAL_8(exp, arr, port, n)
#define EVAL_8(exp, arr, port, n)   EVAL_4(exp, arr, port, n - 4)   EVAL_4(exp, arr, port, n)
#define EVAL_4(exp, arr, port, n)   EVAL_2(exp, arr, port, n - 2)   EVAL_2(exp, arr, port, n)
#define EVAL_2(exp, arr, port, n)   EVAL_1(exp, arr, port, n - 1)   EVAL_1(exp, arr, port, n)
#define EVAL_1(exp, arr, port, n) exp(arr, port, n)
#define RD(arr, port, n) arr[n] = port;
#define WB(arr, port, n) port = arr[n];

EVAL_128(RD, a, reg, ARRAY_SIZE(a) - 1)  // ポート入力
EVAL_128(WB, a, out, ARRAY_SIZE(a) - 1)  // ポート出力

EVO2017 のホテル・航空券予約が終わり、もう引き返せないところまできました。POINT OF NO RETURN です。

先週、プラスティック・メモリーズを見ました。老体になる前に寿命が来るとは、残酷な世界観です。まほろまてぃっくを感じました。
とはいえ、キャラクター達は悪意のない性格で、少女に戻ったような素直な気持ちで全話観終わることができました(少女ではなかった)。 アイラ可愛いです。

GC コントローラの配線

コントローラの信号を取り出す上で必要な、ケーブルの配線の説明です。ケーブルを切ると、以下の画像のように6本のワイヤが引き出せます。画像ではすでに撚ってしまっていますが、被覆無しのワイヤは元々他5本のシールド線になっています。

f:id:ichigo-exception:20170211231039j:plain

尚、GC 本体側のピンは7本あり、うち1本は浮いているので、残った6本のみが使用されています。それぞれの色は、以下の信号に対応しています。

ケーブル色 機能
振動用電源 +5V
データ用電源 +3.43V
データ用信号 +3.43V Active Low
GND
GND
シールド GND

GND がいっぱいありますが、GC 本体側、コントローラ側両方共に、白はシールド線に繋がっています。緑に関しては、GC 側は白とシールドと全部一緒に繋がっていますが、コントローラ側はシールドにだけ繋がっていて、白には繋がっていません。ノイズ対策で、コントローラ側の回路を本体側で一点アースしているということでしょうか(電気属性の人間じゃないので、良くわかりませんが)。