壊れた電源

ほぼ同時期に二つの電源が動かなくなった。
一つは+5V、+12Vの出力が安定しない。メモリが二つ同時に破損して気がついた。メモリチップが過電圧にさらされていた模様。
分解すると電解コンデンサが二つ膨らんで液漏れした箇所がみられた。
同等のコンデンサを付け直して様子見。
ついでにうるさかった電源用ファンに適当な抵抗をはさんで回転数を少し下げておいた。

もう一つは電源が入らずファンも回らない。Powerスイッチを押すと焦げ臭い。
分解すると、整流用のDIPチップが溶けていて、トランジスタICが二つ割れていた。

以前壊れた電源はシャンテレギュレータが破損していたため、部品の流用ができないかと調べたものの、同等品のICは使われていない模様。

SPU2ghz お遊び版

http://www.eggdisk.com/files/133580_v0kqc/spu2ghz_ds061213.zip

タイムシフト関数をいくつかテストしてみるも難あり。
フレームが足りない部分は単純にひとつ前に出力した音声をエコーとして補完。
スレッドセーフになっていない。
ADSRにエコーがかかる場合あり。
実機fpsより速い場合を考慮していない。単純に音声を飛ばしている。
周波数を可変し、合わせてピッチを可変するもノイズが混じる。
ピッチ関数に難あり。タイムシフトが処理的には無難か。

DirectSound ミキシング 通知 セカンダリバッファ

セカンダリバッファを複数作成しNotifyイベントにてデータを出力
通知を設定したバッファだけではなく、全バッファ分 通知される
DSBCAPS_LOCHARDWAREでの通知にサウンドボードやドライバが対応していないためらしい

DSBCAPS_LOCSOFTWAREで通知は正常に動作するもミキシングするとノイズが激しい
一つ余分にセカンダリバッファを作成して無音を再生し続けると対処できるとのこと

boost::regexライブラリ

boost::regexはstd::stringなどのiteratorが必要

char型を使うには
boost::basic_regex r1("(\\d+)");

boost::basic_regex r2 = "(\\w*)"; // compile error at vc8

r1 = "^\\D$";
は可能なところをみると operator= が無いわけではないらしい。
コンストラクタは・・・

アセンブラ4

インラインアセンブラ
関数の最後に他の関数を呼び出すような場合
callをjmpに置き換えてcall/retを一組減らすことができる
esp+4に引数1
espにリターンアドレス

near call/near ret or far call/far ret
の共通する関数呼び出しであれば可能

似たようなやり方で
呼び出された側でespのリターンアドレスを呼び出し元の、さらに元のアドレスまで
スタックを戻してretする方法もある
こちらはプロセッサのcall/retの関連付けた情報に整合性がとれなくなり
よくない? らしい