正直日記



2010/04/05

_ Breakpoint 10 wild部門を見た
今年もリアルタイムに見ていたので雑感を。

--

 1. Descent by Karoshier



lolcode という言語を使ったデモ。 ASCII 文字オンリーで、マンデルブロや
CAVE などのデモを実行。

この言語で書かれたソースは俗に言う「厨房臭い」見た目になるようで、これ
でマンデルブロを仕上げるのは、それはそれで気合が入っているのかもしれず。

冒頭のネコは lolcode が生まれるきっかけとなった lolcat が元ネタ。

参考リンク:LOLCODE入門 - SouceForge.JP Magazine


 2. Finally made it by TMT



EOS500 によるストップモーション・アニメーション。 6x4 のビールケースか
らビールを抜いたり入れたりすることで、スネークや pong を再現したりなど。

写真の雰囲気から、どうやらパーティ会場で作られたもののようで(いわゆる
party coding)。題名が「遂にやり終えたぜ」なのも、そういうことなんだろ
うな。


 3. Tentacle Band by Dienstagstreff



全身着ぐるみの二人組みが即興で踊るデモ。これはその場で見ないと面白くな
いタイプのワイルドかな。


 4. K1 by knizz



Linux 上でのデモ、ということだけど詳しいことは分からず。Linux/PC なら
PC demo になるはずなので、実は特殊なプラットフォームなのかもしれない。


 5. Etch-a-sketch by Cybernetics Genethics



Morph OS 上での単色デモ。なぜ単色なのか?
おそらく何かを再現しているのだろうけどよく分からず。


 6. Xnth Demo v1.08 by VJ Bensky and Optics

 動画

自作の VJ ツールを紹介するデモらしいのだけど説明が無いのでよく分からず。
色々出来る様子。


 7. Elixir Android's Wild by Bixo



HTC Magic を使ったデモ。日本では HT-03A として知られている。


 8. Das Shuttlebus by The Alberts



PowerPoint 製のデモ。タイトルが示している通り、パーティ会場につくまでの
シャトルバスの道のりをストップモーションで繋げたドキュメンタリ。

会場にいる人達の中には、このシャトルバスに乗った人もいるわけで、その場で
は盛り上がっているものの、ストリーミングで見ているこちらは……。


 9. No Future by Digital Sounds Sistems



Yes, this demo runs on mIRC :) なデモ。IRC クライアントということで文字
だけしか表示できないのかと思いきや、様々なグラフィックを表示。

mIRC scripting language - Wikipedia:en によると、簡単な図形描画がスクリ
プトだけで行えるらしく、また COM による拡張も出来る模様。

mIRC 上でデモを作ろうと、思いついた時点で勝ち組だよ。


 10. High School Love by adinpsz

 動画

TI-89 という関数電卓によるデモ。思春期真っ盛りな少年が一通のラブレター
をしたため、彼女と世界中を旅する妄想をする……という若干ストーリー仕立
てのデモ。その淡い雰囲気のためか会場では合唱が起こったりなど。

結果的に少年は振られてしまうのだけど「でも問題ないさ。デモシーンはまだ
続くのだから」と締めて喝采。BGM が無いので会場の様子そのものが BGM に
なるんだけど、このライブ感がたまらないよ。


 11. strobborts by K2 & WD



Commodore VC20 によるデモ。日本では VIC-1001 として知られる。単音 BEEP
を時分割で鳴らし和音生成するなど。


 12. going lowres by TRSI

 動画

上と同じく、VC20 によるデモ。プラズマ、トンネル、ツイストなど。相当メ
モリが厳しいらしく、いくつかデモを表示し終わるたびにローディングが入る。


 13. Loopback by Altair

 動画

V6Z80P によるデモ。Spartan II をベースにした基板らしく、スペック的には
MSX2 turboR に近い性能を持っている模様。


 14. Wobble by CRTC



ドリームキャストによるデモ。今回は PowerVR 勢が強いのかなぁと思いつつ
見ていた。


 15. Para 'N' Droid by TRSI & Rabenauge & Brain Control



Android によるデモ。使用機種は Motorola Milestone だとか。画面を触ると
ロゴが入れ替わったり、傾けると星の流れる方向が変わったり、とマシンの特
性を生かしたデモかな。


 16. delta by DMA

 動画

iPhone によるデモ。Android デモのすぐ後にぶつけてくる辺り、運営は狙って
いるだろう? こちらはスタイリッシュな正統派デモ(先のデモも正統派といえ
ば正統派なのだけど)で、iPhone ユーザと Android ユーザの違いを垣間見た
感じがする。ソースが公開されている。


 17. Led it be by Darklite

 動画

4x4x4 に並べた 多色 LED によるデモ。音楽に同期していて美しい「空間」を
演出している。動画はまず製作記から始まり、なんだか「作ってみた」臭を感
じた人は恐らくニコ厨なので(以下略)


 18. BluREU by Crest

 動画

C64REU (REU とは RAM Expansion Unit の略)による、ほぼ全編が動画で構成
されたデモ。16MB に拡張された RAM の力で Second Realityfr-25 など
を動画としてそのまま取り込んでいたり、とやりたい放題。

日本で言うところの「MZ-700 に不可能は無い」みたいな感じかな。


 19. Lineart by Nuance & METALVOTZE

 動画

MB Vectrex によるデモ。日本で言うところの高速船。ワイヤフレームによる
3D 描画。Vectrex を持ち込もうとするのが凄いと思うのだ。


 20. Phasor by lft

 動画

ATmega88 を CPU に据えた自作基板によるデモ。この作者は昨年と一昨年もワ
イルド部門で参加していて、今年も同様に1位を取るのかと思われたが、その
座は BluREU に奪われた模様。音楽も映像もクールでいいんだけど、今回は相
手が悪かったか。

--

今年はコンソールゲーム機によるエントリーが一つしかなく、代わりにスマー
トフォンによるエントリーが多かったのが印象的だった。

掲載画像はこちらから拝借しました。

2010/01/05

_ gnu makeからpcmconv.comを呼び出す
MS-DOS Player for Win32-x64が素晴らしい。
私はいまだに x86 環境なので恩恵無いかな、と思ったら、GNU make から COM 形
式の実行ファイルが呼び出せるようになった。ちょー便利。

[pconv.mk] pcm := $(patsubst %.wav, %.pc8, $(wildcard *.wav)) all: $(pcm) .SUFFIXES: .pc8 .wav %.pc8: %.wav msdos pcmconv //v $< //b $@
というルールを作れば
$ make -f pconv.mk msdos pcmconv //v sound_bassdrum.wav //b sound_bassdrum.pc8 PCM converter PCMCONV ver1.8
符号付 8bit PCM (ヘッダ無し)への変換および更新が楽に行える。 更に一歩進めば、ppz の更新が make で出来るということになり pmdppz データ を作る際の心理的障壁がひとつ取り除かれたということであるのだった。

2010/01/01

_ 今年こそ、と毎年思っている俺
去年は何もしなかったなぁと思っていたのだが、日記を振り返ってみると、どう
やら私はゲーム機用 OS を作っていたようである。その過程でコンパイラも作っ
ていたようだ。(あと麻雀を作ろうとして投げたり、思いつきで手を出しては色
々投げてもいたようだ……)

趣味プログラマが一度は作りたがるものとして OS とオレオレ言語、あとはテキ
ストエディタがあげられるだろう。 OS と言語は一応達成してしまった?わけで、
となると残るはテキストエディタか。ネタとしてはバッファ構造、無限アンドゥ、
grep、置換、色分け、入力補完といったところだろうか。 GreenPad の後追いを
するだけでも相当力がつきそうな気がする。

まぁテキストエディタはもう秀丸と Vim があればいいので……。

あと今年はギャラクシーポリスの年なのでこれ系のネタをやりたい気がする。

いい加減あれの移植も再開したい……。

それとそろそろ PC 向けに何かを作りたい。具体的には CD もしくは DVD 一枚
あれば起動できるゲーム環境を一から作ってみたい。現時点ではこれが有力かな。
_ そうか。もう年末なんだな。(・ω・)
ネンマツー。(’ω`)

2009/12/08

_ 世界初! C++ でメガドラソフトを作るおとこ
と言うネタを温存していたのだが、さすがに温存しすぎたらしく、気づいたら既
にやっている方がいた。これでは今から始めても2位になってしまう。別に1位
でなくても構わない話ではありますが。(←時事ネタは風化するわよ)

メガドラでオブジェクト指向プログラミング


どうやら私の手抜きのせいで面倒をお掛けてしまったようで申し訳なし。

malloc その他の関数が 68020 の命令を使っているのはバグではなくて、 gcc 
のビルド時に --enable-multilib を指定して、かつ適切なビルドオプションを
指定しないとデフォルトのリンクライブラリが 68020 用になるという仕様に起
因していて

$ wine m68k-gen-elf-gcc -dumpspecs ...snip... *multilib_defaults: m68020 m68881
という風に確認できる。 ついでに multilib も確認しておくと…
$ wine m68k-gen-elf-gcc -print-multi-lib .; m68000;@m68000 m5200;@m5200 m5206e;@m5206e m528x;@m528x m5307;@m5307 m5407;@m5407 mcpu32;@mcpu32 m68040;@m68040 m68060;@m68060 msoft-float;@msoft-float
と 68000 用のライブラリも用意されているので、リンクオプションで -A 68000 もしくは --architecture 68000 と指定すればそっちがリンクされるようになる はず。しかし紛らわしいので最初からそちらがリンクされるように(私の方で配 慮を)しておけよって話ですね……。 -- devkitGenesis と謳っている割にはメガドラ用の C ランタイムとリンカスクリ プトが入ってなくて、それは何故かというと非 GPL なライブラリを GPL なソフ ツに混ぜるとどうなるのか分からなかったので保留していたのだよな……。 crt0.o は自分で用意したいとずっと思っているのだけど、セキュリティコード の辺りがよく分からない。これはこういうもんだと割り切って既存のを使わせて もらっちゃうのが正解なのかな。 あとの手順としてはこんなもんだろうか。
  • MPU(68000) 初期化(モード, 割り込み, スタック)
  • CPU(Z80) リセット& HALT
  • VDP 初期化
  • OPN2, DCSG 初期化
  • RAM 初期化(.bss と .sbss をゼロクリアし .data のコピー)
  • libc 初期化(__libc_preinit_array, __libc_init_array, __libc_fini_array ?)
  • グローバルコンストラクタ呼び出し(__do_global_ctors_aux ?)
  • main 呼び出し
68 アセンブリが微妙に書けないので、手始めに C で書いて吐かれたコードを手 直しするかと見てみたら、明らかに dbra が使える局面でそれが使われてなかっ たりする。うーむどうしたら使ってくれるのだろう。
void Copy(u32 dst, u32 src, size_t n) { char* s = (char*)src; char* d = (char*)dst; do { *dst++ = *src++; } while (--n); }
が、こうなる。
Copy: move.l 12(%sp),%d0 move.l 8(%sp),%a1 move.l 4(%sp),%a0 .L2: move.b (%a1)+,(%a0)+ subq.l #1,%d0 jne .L2 rts
gcc/config/m68k/m68k.md を見ると dbra を使ってくれる局面は2種類存在する のだけど、よく分からない。つーかどんどん脱線していくな……。

2009/12/04

_ クウォータービューで頭身の高い歩行アニメを描く
オウガサイズならなんとかなりそうだけど、なぜか頭身の高いものを描く羽目に
なってしまった。なんだか難しそうだ。




まず腰から下を棒人間でざっと描いて、太ももの付け根と、かかとを基準とした
歩幅の位置にマークをつけた。




次にかかとを動かしてみる。




かかとと腰をラインで結んで、それを基準に膝マークをつける。




腰と膝と踵をそれぞれラインで結んだ。平行投影なので、足が一本出来れば奥の
もコピペで使いまわせるはず。




実際にアニメしてみる。腰が広すぎた!
要調整だけどまぁ歩いてるようには見えるかな。




鳥足でも多脚でもなんでもござれですね!
もう怖いものは無い……といいな。

2009/11/14

_ golangクロスコンパイラを捏造する
go 社を会場に繰り広げられた勉強会に赴き、そこで何故か一人黙々と ARM 版 go
のビルドを行ってきた。恥ずかしい話だけど、諸事情で二日寝ておらず目が血走っ
ており、なんだか気を使わせてしまって申し訳ないことをした。寝ぼけたことも
多分言った。

--

(追記:下記で 5c と書いている部分と 5c に絡む解説部分は全て勘違いでした。
エラーが出るのは libcgo のみで、 5c 自体はコンパイル出来るようです)

まず普通の go コンパイラ。 5c libcgo のコンパイル時に、 arm.o の生成ルー
ルを見つけられずにエラー終了する。

golang だけ使う分には 5g と 5l があればいいのだが、 C と連携したい場合に
こま……いや困ることは無いかなぁ。

5c libcgo には go と C の関数を仲介する arm.S と、スレッドを仲介する 
linux_arm.c が必要なのだけど、取り合えず arm.S を捏造して前者だけまかな
うことにする。どちらにしても 5c libcgo が使えないことは変わりないけど。

arm.S のアセンブルには x86-gcc が使われてしまうので、一筋縄ではいかない。
結局 arm-gcc -fPIC でコンパイルしたコードからバイナリを抽出して直接 .long
で埋め込んでやった。バイナリサイコー。

更に linux_arm.c の中身を賄ったとして、こちらも arm-gcc でコンパイルする
必要がある(しかも ARM 版の pthread ライブラリが要るはず)と思うけどどう
するんだろう? libcgo を 5c の外に出して、 5l で使うようにしないといけな
い気がする。


objdump で 5.out を逆アセンブルしたら r0-r3, sp, lr, pc しかレジスタを使っ
ていないようだ。おかげでかなり冗長なコードになっていた。まぁ RISC のコー
ドなんて冗長なものだろという伝説もある。ARM は CISC 的なにおいもするけど。

ちなみに、 5g / 5l で生成した 5.out を qemu-arm (0.11.0) で実行したら
Segmentation Fault が返ってきた……。いつか beagleboard でも試してみたい
ところ。

--

次に gccgo。

gccgo のソースには Split Stacks という拡張が加えられており、goroutine の
(gccgo 版の)肝になっているようなのだが、ARM 版はまだ着手されていないの
で 386 版を参考に同様の変更をする必要がある。えーとどこだったかな、もう
忘れてしまった……。(diff とれば一発だけど面倒くさい)

configure オプションは以下の通り。

../gccgo/configure \
  --enable-languages=c,go \
  --build=i686-pc-linux-gnu \
  --host=i686-pc-linux-gnu \
  --target=arm-eabi \
  --with-cpu=arm9tdmi \
  --enable-interwork \
  --enable-multilib \
  --with-gcc \
  --with-gnu-ld \
  --with-gnu-as \
  --disable-shared \
  --disable-debug \
  --disable-nls \
  --disable-libmudflap \
  --disable-libssp \
  --disable-libgomp \
  --disable-zlib \
  --disable-libstdcxx-pch \
  --prefix=$HOME/gccgo-arm

多分 libffi で詰まると思うので、3.0.9rc3 を落としてきて差し替えると吉。

で、えーと libgo の移植が済んでないのでビルドは途中で終わるよ……。


あまり関係ないけど gccgo/gcc/go/gogo.cc と、[/gco.]だけで構成されている
ディレクトリがあって、なんだか面白かった。イケイケだ。

あとマスコットはかわいいと思うんだよ俺は。

2009/10/31

_ ubuntu 9.10 にしたら Web のスクリーンショットを取りまくれなくなったよ
xulrunner が 1.9.1 になって、いくつかの API が他のクラスに移動したため、
1.9.0 の libxul を当て込んでいる Mozilla::DOM が動かなくなりました。

具体的には nsIDOMNSHTMLElement の scrollXXX, clientXXX が nsIDOMNSElement
に移動したらしい。offsetXXX だけ移動してないのはなぜと思ったら、その理由
についても件のレポートで挙がっていました。なるへそ。

んで、Mozilla::DOM::NSElement を新設して、メソッドをそちらに移動したらコ
ンパイルもインストールも QueryInterface も出来るようになったので(続く)

(続き)パッチを投げておきました。windows からアップしたら octet-stream
になってしまった。なんか恥ずい。


過去へ -->
2010 | 01 04
2009 | 01 02 03 04 05 06 07 09 10 11 12
2008 | 01 02 03 04 05 06 07 08 09 10 11 12
2007 | 02 03 04 05 06 07 08 10 11 12
2006 | 01 02 03 04 05 06 07 08 09 10 11 12
2005 | 01 02 03 04 05 06 07 08 09 10 11 12