Diary 日記
2004 January-December
ブロック崩し壱号機 2004年12月24日(金)
実はブロック崩し壱号機は足痛でぶっ倒れる前に完成してました。その解説を書こうとしてますがなかなか思い出せなくて進みません。写真だけは撮ってみたけど。それと同時にサイト全体の模様替えに手を付けてしまいました。CSSとかJavaScriptとかPerlとか弄っちゃってます。その上思っている以上にページ数があって難航。でも仕事も一区切りついたので年内には更新できるはず・・・。
上段に電源スイッチとリセットスイッチ、下段にボリュームとサーブボタン。 背面は奥から、映像、音声、テストスイッチ、ACアダプタ。
ゲーム画面。NTSC出力。 テストスイッチをオンにするとカラーマトリクスを表示する。


松葉杖は高校の時以来だ 2004年12月01日(水)
失敗したー。
この書き出しは今年二度目だな。
8月下旬、復帰中に足痛が再発。
今度はなんと股関節に激痛が。
股関節の痛みは初めてだったのでとにかく安静にしてた。で、痛みが少なくなったところで歩いてみるとまた激痛がぶり返すというのを二度三度繰り返す。
途中ヒザ痛も併発したりして訳がわからなくなる。
11月になってようやく快方を実感。
今は少し違和感があるくらいの状態まで復活。
これだけ長いこと臥せっていると、体力と気力の復旧にも時間がかかりましたが、もう大丈夫。おっと、油断大敵。健康第一。





CPLD入門 2004年08月27日(金)
ボリュームコントローラーとビデオ出力ができたらもう単体のブロック崩しゲーム機を作るしかないじゃないですか。世の中そういう風になってます。しかし、白黒画面のブロック崩しゲーム機はトラ技で紹介されたことでも有名な「ブレークアウト」があります。よって製作するのはこれより一つ上のレベルのもの、すなわち20数年前に何十万台と販売された「ブロック崩し」そのものを作ります。温故知新。
任天堂「ブロック崩し」。子供の頃持ってました。これは最近入手したものです。 「ブロック崩し」の画面。これをお手本にします。
エポック「TV BLOCK」。ブロック崩しのほかピンボール風のゲームやバスケットのシュートゲームなどが遊べます。 「TV BLOCK」の画面。ブロックはベタっとくっついています。ゲームは激ムズです。

さて、カラー画像を表示したいのですがPICでNTSCのカラー信号を生成することは不可能なので、RGB信号から変換ICを使ってカラーのNTSC信号を出力することにします。ソニーのCXA1645Pは1000円也。

また、滑らかなボールの移動も外せないポイントです。しかしこれはPICだけでは無理があります。そこで登場するのがCPLDなわけです。CPLDはComplex Programmable Logic Deviceの略で、論理回路や順序回路を自由に書き換えて構成できるICチップです。まるでソフトウェアのようにテキストファイルから回路設計を行なえます。PICに比べ単純な動作を高速で処理できます。複雑なことをPICで、高速なことをCPLDで行なうように役割を分担させることで、お互いが補完しあって応用範囲を広げることができます。基板に載せたまま書き換えることができるのも便利です。よって、早速CPLDにレッツトライなわけです。CPLDはザイリンクスのXC9572を選択。記述言語はVHDLにしました。

しかしまずCPLDだけではどうにもなりません。書き込むツールが必要です。専用のツールが売ってたりしますが、回路図を見てみるととってもシンプルだったので自作することにしました。それからエディット、コンパイル、書き込みまでをまとめてサポートしてくれる開発ツールをザイリンクスのホームページからダウンロードしてインストール。このツールは無料です。簡単な論理回路を作成してコンパイル。そして書き込みツール起動。書き込みツールがデバイスを認識した時にはちょっとテンションが上がってしまいました。そしていざ書き込み実行。書き込み中・・・ベリファイ中・・・終了。CPLDは即座に動作を開始しました。簡単なANDやORの回路が動いた!ゲッツ!古っ!その時自らの電子工作スキルが少なからず向上していることを実感したのであります。

さて、テストは成功しましたがPLCC44のソケットに挿しているとはいえ不便極まりないので、ブレッドボードで実験できるように小さな基板に載せてワイヤで接続できるように配線しました。おまけでテスト用のLED8個も付けました。

CPLDはかなり熱くなります。かなり電力を食ってるみたいです。ヒートシンクでも付けといた方が安心かも。

CPLDダウンロードケーブル。プリンタポートに繋ぎます。 裏側。ラッピングワイヤで手配線です。
CPLDテスト用基板。右側のソケットにワイヤを挿してブレッドボードに繋ぎます。シールを貼って何番ピンか分かるようになってます。上部にLED8個。左下にダウンロードケーブルを繋ぐヘッダピンがあります。 これも手配線ですが、44本繋ぐのはちと一苦労でした。

さて、いよいよ次回からはブロック崩しの製作に入ります。


テレビに繋いで絵が出る機器 2004年08月22日(日)
今回はブロック崩しの新展開とは別件の単発電子工作です。

ビデオバルブ(google)にインスパイアされて似たものを作ろうと思いたったのです。ビデオバルブ自体は入手してないんですが1度だけ見かけたことはあります。ボタン電池3個で動くらしい。こっちは単三乾電池1本でいこうと決めた。昇圧回路を試してみたかったのとオキシライド電池が使いたかったのです。乾電池の1.5VをTL499で5Vまで昇圧してPIC12F629を動作させます。10MHz動作のPICでモノクロNTSCの同期信号と輝度信号を出力。抵抗で分圧してNTSC信号としています。
しかしPICだけではデータ容量的に見ても面白い映像を出せそうにないので、外部にROMを接続することにしました。シリアルEEPROMの中からコストパフォーマンスのいい256Kビット(32Kバイト)の24C256を選択。1個160円(秋月)は安いのぉ。さてこのROM、2線の接続だけでデータの読み書きができます。クロック線とデータ線で、データ線は入出力を切り替えて使用します。PIC側が完全にマスタになるのでタイミングはほとんど気にしなくて済みますが、コマンド送信、アドレス送信、データ送受信の手間はそれなりにかかります。しかしプログラム的には1度書くだけのことなので適度に苦労しておこう。それから秋月のPICプログラマーでROMの読み書きができるのもナイスです。書き込みに5分くらいかかるけど。
さて、PIC12F629には出力ピンが3つしかないのですが、すでにNTSC信号出力に2つ使っていました。ROMにも2線必要なので仕方なく輝度信号とデータ線を共通にしました。これによって垂直ブランキング期間にしかROMにアクセスできなくなってしまいました。
レジスタ数の関係から画面解像度は24x16に決定。一画面の情報量は48バイトになります。フルアニメーションさせると32KバイトのROMには約682フレーム入ります。秒60フレームで11秒。ちょっと短いかなってことと、そんだけのアニメーションをどうやって作るんだってことで却下。とりあえずお手軽に電光掲示板風のものにすることに決定。1フレーム2バイトで済むので約273秒入ります。VC++でテキストファイルから指定フォントで描画してデータを出力するプログラムを作成。そのプログラムから吐き出されたデータをROMに焼いて基板に搭載。なかなかいい感じでスクロールしていきますよ。ちょっと速いのと同時に1.5文字分しか見えないので読もうとすると若干目が疲れますがね。

さて、これをいろいろ繋いで試してみました。普通のテレビとかプロジェクターでは問題なく動作しました。しかし、HDDレコーダーでは表示はされますがすこしがたつきます。まさに予想通り。PICで生成する垂直同期信号が60Hzから若干ずれているので、HDDレコーダー側のサンプリングレートとのずれ周波数分のタイミングでがたつくのであります。

それから耐久テストをしました。オキシライド電池でちょうど24時間持ちました。長いの?短いの?よくわからん。厳密な検証はまた後々。

本当は筒状のケースに収めて完成させたいところなのですが、直方体のケースに収めるのに比べると難易度がベラボーに高い。とりあえず現状で一旦締めです。しかしいずれガワをつけて完成させたいと思います。その時初めて命名しましょう。

回路図

サイズは単三乾電池から推測して下さい。できるだけコンパクトに詰め込みました。
動作画面。スクロールスピードを下げて撮影しました。 HDDレコーダー経由の表示。裏で夏海ベンチ再生中。

続・「Block Breaker's High」への道。 2004年08月21日(土)
参号機の製作

基板をケースにマウントするスマートな方法をしばらく考えていた。ネジ止めするとケースからネジが飛び出して不恰好。皿ネジという手もあるが皿ネジに合わせて穴を開けるのってどうすんのよ。そんなこんなで思案していたところナイスな妙案が浮かぶ。「ケースじゃなくてボリュームにマウントしちゃえばいいじゃん」。PIC12F629の採用で基板サイズがかなり小さくなっているのがポイント。さっそく基板設計して製作。なかなかすっきりいい感じにできたと思われます。ケーブルの接続はコネクタにしたかったところですがスペースが無くて直配線になりましたがまあよし。

プリント基板アートワーク(トップビュー) 参号機の内部。すっきりしました。

参号機の内部のアップ。 基板はボリュームにマウント。

四号機の製作

もの凄い昔に買ったきりのロータリーエンコーダーがあったのでこれ版も作ってみようということにあいなりました。たしか5000円近い値段で買った覚えがあります。ボリュームが50個買えるわ!さてCOPALの磁気式ロータリーエンコーダーですが型番が書いてある。RMS20-256-201-1。カタログを見てみると解像度は1周256カウントでラクラク設定らしい。
http://info.tactnet.co.jp/copal/j/product/pdf/rotary_encoders_ja/rms20_ja.pdf
ボリュームに接続していた2ピンをロータリーエンコーダーのA相B相に接続します。タイマー1を使用して0.1ms間隔の割り込みでポーリングすることにしました。A相B相の値の変化から回転方向を検出しカウントするプログラムを書く。参号機の基板を流用してるのだが、ボリュームと形状が違うので基板をマウントできないという事態に。とりあえずめんどうなのでそのままケースに押し込んで完成だ!操作感覚は上々。滑らかさと反応の速さがグッド。さらにいくらでもグルグル回せるのも気持ちいい。キャメルトライも作れますかね。

四号機。ロータリーエンコーダーを接続。 奥から順に壱、弐、参、四号機勢揃い。

つづく・・・しかも次回からは新展開だ!

蔵出し 2004年08月20日(金)
何もできなかったからというわけでもないのだが、夏海ベンチの没カットが発掘されました。ジャンプするシーンは、当時そういうCMがあって、そんな感じでやろうとしてカメラワークが決まらず残念ながら没になったものです。なつかしいなあ。

ところで夏海新作のお話。まったくないというわけではないのだが今はなし。ネタは集めてますが。しかしあれだ毎度スケールアップしていくと現実味のないネタばかりで。いっそ本職のデザイナーに参加してもらうっつーのもいいかもとか思ってみたり。

何もできないので27時間テレビを全部見てやった。 2004年08月17日(火)
失敗したー。
右足首捻挫。引き続き左ヒザが崩壊。
たっぷり3週間は寝込む。
メールボックス溢れまくりで申し訳ない。
その前ひと月更新できなかったのは電子工作にはまりまくって収拾がつかなくなってたもので。
立てるようにはなりましたが、まだ左ヒザが不完全なため、また再発しないように慎重にリブート中。
立てるんだけど腰が一日持たねー。
ところでオリンピック体操男子団体の最後の鉄棒はシビレタね。

「Block Breaker's High」への道。 2004年06月13日(日)
PIC16F84からPIC12F629へ移行。
こいつ8ピンのクセにとっても多機能。小さくて安い。イカスー!命令セットもPIC16F84と同じなので気楽だ。8ピンの内訳は、電源、GND、クロックINとOUT、そして入出力ピンが4つ。4ピンで何ができますか?液晶表示とかするににはちょと無理がありますな。しかし今回ちょうど、簡易AD変換2ピン、シリアル送信1ピン、ボタン入力1ピンの計4ピンなのでぴったり。というわけでPICを変更して基板設計をやり直す。ボタンが基板に干渉する件も考えつつ。それから、シリアルポートをケースに直に付けるのはスマートじゃないことに気付く。すごい邪魔だ。ケースから直接ケーブルを出すのも、手でケースを加工する分にはスマートに行きそうもない。しばらく思案していたところにナイスなアイデアが!ステレオピンジャックを使おう。シリアル9ピンとはいえ使ってるのは3本だけなのでステレオでぴったし。これでいこう。若干、不思議なケーブルを作ることになりますが。

弐号機。ボタンの色はナムコボタンのイメージで。 ステレオピンジャックを接続して使います。

内部の状況。そこそこ詰まっています。 Dサブ9ピンとステレオピンジャックのケーブル。そこはかとない違和感を醸し出している。

基板のアップ。PICが18ピンから8ピンになったので基板サイズもかなり小さくなった。 いろんな径のつまみを試してみたが、やはり径の大きい方が小さなトルクで回せるのと細かい操作が可能という点で操作しやすかった。

さて、PCのプログラムを作る。ブロック崩しを作る。DirectX8、長方形表示だけで全ての描画を行なう。テクスチャなし。とりあえずα版の完成。しかし現状、任天堂のブロック崩しのモロパクリ状態ですが。マウスでもプレイできます。使用は自己責任で。
block.exe
操作法:マウス横移動でラケット移動。左クリックでサーブ。左ボタン長押しでメニュー。
Sキー:FPS表示オンオフ。
1キー・2キー:チャンネル表示
F1〜F7:各メニュー項目実行
ESCキー:終了
Alt+Enter:フルスクリーン切り替え

ブロック崩しの画面。レトロ全開。 実際のプレイ状況。

まだまだ、つづく。

全ては「Block Breaker's High」のために。 2004年06月12日(土)
タイトルの意味は後々語るとして、とにかくブロック崩しを作るのだ。となれば当然ボリュームコントローラでやりたい。というわけで、PCに繋ぐボリュームコントローラを作成することにしました。そこでまずPCの入力ポートについて考えてみた。

1.USBポート
もはやUSBポートの無いPCは皆無といえるわけで、カスケード接続できてプラグアンドプレイ対応で電源供給もしてくれる大変便利なポートであります。しかし、USBコントローラICが1個500円。しかも販売したり配布するつもりならUSB協会に入会して年会費20万円を払ってIDを取得しないといけないんですよ。まあ個人で使う分にはIDは適当でいいんだけど。勉強のためにチャレンジしてみる分には面白いかもしれませんがね。

2.パラレルポート
Dサブ25ピンのポート。元々プリンタを繋ぐためのポートであるが現在では殆ど利用されることはない。シリアルよりも省略される率が高い。

3.シリアルポート
Dサブ9ピンのポート。RS232Cで有名ですか。たいがいのPCにはついている。2つ付いてるマザーボードもある。最近ではシリアルポートのないPCのために、USB接続のシリアルポートコネクタもあるらしい。

4.PS/2ポート
マウスをエミュレートすれば実現できますね。しかし、ここに繋いじゃったらマウスかキーボードが使えなくなってしまいます。繋ぎなおしたり切り替えたりというのは危険すぎて手をつけたくないですな。

5.ゲームポート
昔はサウンドカードにジョイスティックが繋がるDサブ15ピンのポートがありましたが今では廃れてますな。

さて、結論としてはシリアルポートです。しかしながら、最後までUSBポートを選択肢から外せなかった理由は”電源”であります。シリアルポートには電源がないのでACアダプタとか電池と使わなくちゃいけなくてかあんまりスマートにいかないなーと。その点USBは電源供給ありってのがすごい魅力的。(プレステパッドをUSBに変換するケーブルを使って、プレステパッドをエミュレートするという、頭の悪そうな手段も考えましたが・・・)

などと思案していたところ、そういえば昔シリアル接続のマウスとかってあったよなーって思いあたる。そうか、信号線から電力を吸い出せる可能性はあるということか。RS232Cの規格では信号電圧は±5〜15Vと規定されている。マザーボードに供給してる電源をそのまま利用してるんだったら±12Vだろう。電圧は十分だ。問題は吸い出せる電流量ですが・・・、まあとにかく実験してみることにしました。

ボリュームの読み込みは簡易AD変換で。コンデンサの放電時間から抵抗値を概算します。PCへの送信は、RS232C規格を無視して0V−5Vで行ないます。規格ではLowが-15〜-5V、Highが5V〜15Vになってますが、High−Lowのスレッショルドは3Vあたりのはず。試してませんが。試してみればいいのか。とにかく、送信も簡易RS232C通信でいきます。

設計方針は決まったので実験開始です。
まずは外部電源で動作するものをブレッドボード上に作ります。
モニタ用に液晶表示器も接続。簡易AD変換した値を表示しながら実験。充電時間の決定、コンデンサ容量と可変抵抗の値を決定。コンデンサはパスコン用の0.1μF、可変抵抗は5KΩに。コントローラはPIC16F84を使います。久しぶりのPICにとまどうとまどう。開発環境を秋月のPA.EXEとMAKEから統合開発環境MPLABに移行。アセンブラのIDEって新鮮。

シリアル通信の実験。
受信の方はやったことあったけど送信は初めてだぞ。波形をオシロで確認したりしながら、ハイパーターミナルで受信テストなど。ハイパーターミナルで受信に成功したので、PC側のシリアル受信のプログラムを作成する。

さて、ここで電源をPC側からもらう実験をします。
PC側のプログラムでDTSを強制的にHighにします。無負荷時で12V出ています。これを78L05で5Vにして回路に供給します。しかして動作はしましたがなんか変?うまく起動しない場合もある?電流が足りなくなってるのか?とか電解コンデンサを換えたりしたのだがよくわからず。しばらくうまくいかなかったところ、78L05って78M05とか7805とかとピン配が違うという事実に直面。かなりショック。ひっくり返したらきれいに5V出てて安定して動作した。

久しぶりに基板設計して、プリント基板をエッチング。
ケースやボタンを選定、基板を組み込む。けっこうやっつけでやってるだけに、基板にボタンが干渉。基板を凹むようにカットする。この作業は面倒な上失敗確率大なので次回は別の方法を考えねばと。Dサブ9ピンコネクタを取り付け。あ、逆に付けてた。まあとにかく一応完成だな。

壱号機。シリアルポートを付ける位置が予定と逆になっちった。

次回につづく。


「約束」 2004年05月12日(水)
久しぶりに海モモの最終回を観ました。そんな日でした。

マスターアップ 2004年05月04日(火)
「Prodigy Racing Rebirth Edition」ようやくマスターアップしました。
今回はシェアウェアではなく同人ソフトという位置付けになります。パッケージ販売は現状なしですが、今後はあるかも?どちらにしても、DLsite.comでダウンロード販売します。近日販売開始予定。体験版もあるのでそちらで動作試験してから買うのが正しい手順であります。

さてこのタイトルですが、Prodigy Racingの続編ではありません。直訳すると「新しく生まれ変わった版」ですか。意味的にはリメイクとかリファインとか移植とかとたいして変わらないです。

では、主な変更点をつらつらっと書いてみる。

1.DirectX7からDirectX8に移行
時代はDirectX9ですって?まだまだ、インテルの統合チップセットでピクセルシェーダがまともに動くようになってからでいいんじゃないの?と思っている。今回もピクセルシェーダは未使用ですけど何か問題でも。(おぎやはぎ風に)固定頂点処理を全て頂点シェーダ―で記述し直した。コンバータの関係上、もともとLightWave5.5のデータをLightWave6.5に変換。(そういやLightWave7.0以降って何が変わったのか知らぬ存ぜぬ。)テクスチャの貼り方とか変わってるのでオール貼り直しだったりとか。プログラム的にも全編見直して書き換え。へぼかったコードを修正したりした。コンパイラも替わったし、SSEも使うように替えた。

2.影をグレードアップ
まずはコースに落ちる影を作成。静的シャドウマップな感じで。次いで、機体に影を落とす。コースと同じなのだが、複数のシャドウマップにまたがることがあるので一旦機体中心のテクスチャを経由して描画している。レンズフレア・リフレクションの「カメラからライトが見えるか判定」もシャドウマップを利用して実現。今までで一番すっきりした実装になった。さらに発作的にスポットライト的な表現を思考。かなり大胆な手法で実現。スポットライトの絵のテクスチャを平行投影で貼ってるだけでした。射影行列で貼りたかったのだがどうもピクセルシェーダが必要な予感がしたので却下。光源が増えた分の頂点シェーダの変更で苦労する。ここで一言。「陰は立体感、影は存在感」

3.ジョイスティックに対応
プレステ2パッド(USB変換ケーブル経由)をメインに開発を行なった。その他、プレステ1パッドとMSサイドワインダーフォースフィードバック2でもテストした。フォースフィードバックっていうくらいだから接触時の反力を付けてみた。プレステ2パッドでは振動しますよ。ちょっと楽しい。今回、プレステ2パッドでバランス調整をしたので、マウスだと難易度が下がっちゃってると思います。本来マウスでデザインされているのでマウスの方がお得な感じになるのは問題ないかなと。早い話が「親指でアクションゲームは無理!」という感を強くしたものであります。

4.「耐久レース」モードを追加
グランプリとはまた違った走り方を要求されたりして、なかなか一筋縄ではいかないのです。ルールの違いとして、接触によるダメージによって、エンジン出力が落ちてしまいます。なので、前半で受けたダメージがその後ゴールまでずっと影響してしまうことになります。ゆえに、時には強引に敵機を抜きにかかるよりも安全な抜き所を探して減速するような戦略も必要になります。それから、レースが長いので周回遅れの敵機が現れます。一旦トップに立ったからといって気を抜いていると周回遅れに捕まったりします。逆に追い着けそうもない先行機が周回遅れに捕まる可能性もあるのです。周回遅れは速度差があるので大変危険な障害物と化します。

5.夏海出演
キャンペーンガールを夏海にチェンジ。レオタードはないなと思ったのでチームスタッフ風の衣装に。アトラクトデモの他、グランプリとエンデュランスのエンディングにも登場します。

さて、ビデオカードのお話。開発は今だにGeForce2Ultraなわけですが。
動作試験をしました。以下はその結果です。
ビデオ VRAM 結果
GeForce2Ultra 64MB OK
GeForce3 64MB OK
GeForce4MX440 64MB OK
GeForceFX5200 64MB OK
RADEON 64MB OK
RADEON8500 64MB OK
RADEON9200SE 64MB OK
G450 32MB OK
Intel845G 32MB OK
Kyro2 32MB NG(動いたけどブロック状のゴミが出る)
Xabre 128MB NG (どうやらアルファ付きのレンダリングターゲットテクスチャが生成できない模様)
基本的にGeForceかRADEONでお願いします。CPUはPentium4以降。FPSが45以上でる状態でプレイして頂きたい。

へろ〜り@ほ〜む 2004年04月12日(月)
いいかげん大容量のHDDを買った。主にバックアップファイルなどを整理した結果、おうちサーバーのHDDも片付いてきた。そんでもってケーブルモデムも新しくなって下り最大30Mbpsになったので、でかいファイルを公開するテストをしてみていきたい。

へろ〜り@ほ〜む (公開終了しました。2011年9月)

@ROBODEX
これは前からあったものそのまま。
カタログ保管庫
実家が引っ越す時の片付けで古いパソコン雑誌とかカタログとか沢山出てきた。
写真保管庫
帰省して御柱祭上社山出しに行ってきた。去年撮った写真もあり。

夏海裏技最終公開 2004年02月09日(月)
もろもろ工事中。

COPYRIGHT (C) 2004 YO1 KOMORI ALL RIGHTS RESERVED