PSGで音程を指定する時、F-numと呼ばれる値をregisterに設定するのだが、その求め方がはっきりしない。大筋においては、次のようなプログラムで求められると思うのだが、これで求めた値はDatapackやクリガイの記述と微妙に食い違うんである。
10 DEFDBL A-Z:DEFINT I-J:DEFSTR S 20 DIM X[12-1] 30 BS=2^(1/12):FB=1789772.5#:FQ=440# 40 CLS:PRINT SPC(5) 50 FOR I=0 TO 11 60 X[I]=FQ*(BS^(I+3)) 70 READ S 80 PRINT S;SPC(5-LEN(S)); 90 NEXT 100 FOR I=0 TO 7 110 PRINT:PRINT I+1; 120 FOR J=0 TO 11 130 F=X[J]*(2^I) 140 PRINT " "RIGHT$("00"+HEX$(INT(FB/F+.5)),3); 150 NEXT 160 NEXT 170 DATA "C", "C+", "D", "D+", "E", "F", "F+", "G", "G+", "A", "A+", "B"
単に精度の問題なのか、それとも音律が異なるのか。いずれにしてもクリガイのO8Aは間違ってると思うのであった。
会社がやたらと暇なんで、VC++を色々いじってて思い付いたネタ。
ANSI C++ではいくつまで予約語を連ねられるか?
ちなみに、積極的な意味はなにもない。
予約語というの正確な用語じゃないかも知れないが、ここではifやfor、sizeofやintといった識別子にできない単語の事。とりあえず、条件は次の2つ。
2の条件は do do do; while(0); while(0); while(0); や、sizeof sizeof sizeof 0; といった、予約語を無限に続けられるケースを排除するものである。今のところ、次の8語連続が最長である(else〜int)。
size_t func(void) { if(0); else do return sizeof new unsigned long int; while(0); }
ガベージコレクションの機能を(標準では)持たないC++ではかなり危険といえる内容だが、文法的には間違っていない。内容的にも安全なものにしたければ、少々長くなるが次の様にする。
size_t func(void) { if(1) return 0; else do return sizeof new unsigned long int; while(0); }
else節は絶対に実行されないので、たぶんコンパイラが勝手に削除して、return 0のみが残ることになるだろう。
劇場版機動戦艦ナデシコを観た。
TV版最終回が放送された週の金曜日に映画化の情報を得てから16ヶ月。この間、可能な限り映画についての情報は見ないようにしてきたのだが、そうするだけの意味はあったと思う。先にストーリーを知っていたら、これほど楽しむ事は出来なかっただろうから。
観ていて意外だったのが、懐かしい顔、懐かしいシチュエーションが出てくる度に、感情の昂りを感じたこと。自分が意識していた以上に、ナデシコという作品への思い入れは大きかったらしい。
なにはともあれ、佐藤竜雄監督を初めとする劇場版スタッフに感謝。待った甲斐がありました。
MSX Creater's Guide Bookの正誤表作成に取り掛かる。間違いを見つけてはその訂正文を書くという繰り返しで、かなり疲れる。
しかも、自分の書いた部分にかなりのミスがあって、それが最終校正でわざわざ追加したものだったりするので、もうなんとも言えない気分である。具体的にはSCREEN 4以下の横スクロール関係で、使える機能を使えないと書いているのが数ヶ所。なんでこんな阿呆なことを書いたんだろ〜。
一年に一度のお祭り、MSX Festaである。10:30頃会場に着いたのだが、やけに人が少ない。コミケの三日目と重なった事、今日に限って総武線・中央線が止まっている事が影響したようだ。
サークル入場も遅れているようで、おそらく開場も遅れるだろうと予測し、秋葉原に本を捜しに行く。アルゴリズム関係の本を入手して会場に戻ると、なぜか人がいっぱいいた。どうやら時間通り開いたらしい。
今回の目的はMSX Creater's Guide Book。これまで2度のフェスタ落ちがあっただけに、緑色の本が積まれているのを見たときには安堵で力が抜けた。Xi.さん達、編集スタッフに感謝。いま見直すと色々不満なところもあるけど、出せてよかったなぁ。
他にはTPM.COさんの新作・旧作をまとめ買い。SPHEREは、K.Betaさんのパンプ版しか打ち込んでなかったから、御本人の版が手に入って妙に嬉しかったり。
そ〜いや、何人かにHomepageの復活時期を聞かれた様な気がするけど、たぶんおそらくきっと気のせいだろう。
フェスタが終わった後は、SYNTAX主催の集いに参加。ただし体力切れで動けず。大して話もしないまま、なんとなくもんじゃ屋に移動。お馴染のメンツにG-NET関係者を加えて雑談しながらのもんじゃは、なんとなく美味いのであった。
アジトに戻った後は、帰るのが面倒になってそのままお泊まり。この夜行われたA.Hiramatsu VS K.TsujikawaのPICPCM対決は、この夏一番の見物であった。
昨日に続いて、母の実家。山に入って竹を切ったり、庭先の木を切ったり、屋根に昇って積もり積もった葉を落としたり。日差しと藪蚊が手強かった。
母の実家といっても10年以上無人なので建物の傷みがひどく、山側の部屋などは床が腐っているのだが、押し入れを捜すと結構妙な物が出てくる。今回の収穫は弟が見つけた古新聞で、日付は昭和20年8月16日。つまり玉音放送の翌日で、1面にその全文が載っている。旧字ばかりでほとんど読めないのがアレだが。
終戦記念日にこんな物を見つけるなんてなぁと思ったが、盆と彼岸にしか来ないのだから見つかる日が終戦記念日に当たる確率はかなり高く、よくよく考えてみれば大した偶然ではなかったりする。なんにせよ、時代というものを感じられる出来事であった。
今日から5連休(土日を含む)。とりあえず帰省。
途中、フロントラインのアジトにお邪魔する。成り行きで、GIGAMIX・フロントラインのコミケ搬入に同行。初めて見た会場はひたすら広かった。会場内に車で乗り入れるんだもんなぁ。
んで、フェスタで購入予定だったGプレ総集編を買う。資料的な価値云々はともかく、読み物として面白い。banさんってやっぱり凄いわ。
STRING.MACを見直していて涙。
数字文字列を数値に変換する、Cでいうところのatoi()的ルーチンがあるのだが、なにやら無茶苦茶なアルゴリズムを使っている。普通に考えたら、先頭から1文字ずつ読んでいって数字なら数値(0〜9)に変換・保存し、数字でなければ変換終了。2文字以上続いた場合は、1文字読み進む毎に保存値を10倍して読み込んだ値を足すとなるだろう。
しかし、STRING.MACの実装は先頭から数字以外の文字を検索し、数字文字列の最後を検出。後ろから10^n倍しながら保存値を足し込んでいくという、阿呆なやり方を採用している。
これを組んだ当時、何を考えていたのか全くの謎なわけだが、実は後々のネタにすべく意図的にタコな方法を使った、というのは無さそうである。
まぁ、修正したからいいや。
常駐タイマーの仕様を決定。とりあえず、時刻設定ファイルを解釈するルーチンを書き始めた。
私はこの手のテキストを解釈してどうたらといったプログラムが苦手で、オプション解釈ルーチンなんかも長いこと同じ物を使い回している。あまり性能がいいとは言えないにもかかわらず、である。まぁ、アセンブラなんぞで書くから、大した事ないものまで大変になるのだが。
で、仕様的には次のような感じで考えている。
; NADESICO 再放送 毎週木曜 AM2:15 name NADESICO ;timerの名前 message TV osaka ;timerが出すmessage date 98/07/30 + 7 every ;1998年7月30日から7日毎 time 02:14:20 ;午前2時14分20秒 ; cup noodle name NOODLE ;麺 message 3 minutes passed. ;3分経った date today ;本日(todayは'今日'を表す予約語) time now + 3:00 once ;現在から3分後にtimer起動(1回だけ) ; この日は調布で空を見る date 1999.7.7 ;1999年7の月 time 07:07:07 ;時刻は適当 name NOSTRA_DAMAS ;騙されてはいけない message 調布の大王 ;調布の大王が降ってくるのだ
これだけじゃ意味分からんか。
ちなみに名前はラーメンタイマー ぐらぐら君
の予定。ひでえネーミング......。