n度あることはn+1度ある

憶測が多いブログなので鵜呑みにしないこと

MIPSのジャンプ命令について(jr命令)

MIPSアセンブラを見なくてはならなかったので見ていたら疑問に思うことがあったのでそれをメモ
問題のソースは以下

int return_one(){
  return 1;
}

これをコンパイルして逆アセンブルすると

jr   ra
li   v0, 1

といった結果になった。(機械語などは省略)
コンパイルしたソースは見てわかるように呼び出されたら1を返すだけの関数である。
アセンブルの結果の方はjrがリターンアドレスに戻る命令、liが第一オペランドレジスタ)に第二オペランド(定数)を設定する命令である。
またこの場合v0レジスタというのは戻り値のことである。 これらを把握してからもう一度逆アセンブル結果を見てわかるように先にジャンプ命令が実行されている。
これでは関数の戻り値が設定できないのではと思ったがこれはMIPSの遅延分岐というものの影響であるらしい。
端的にいうと、ジャンプ命令はジャンプ命令の次の命令を実行してから実行するというものらしい。
パイプラインが影響しているらしいがそのへんは熱血アセンブラ入門に詳しく載っている。
こういうこともあるのだなあとまた一つ学びました。

参考:熱血!アセンブラ入門(著:坂井弘亮)

熱血! アセンブラ入門

熱血! アセンブラ入門

Tree of SaviorのDS2のキーコンフィグ

最近はToSばかりやってます。ToSの基本操作はアローキーとキーボードの左側だけど、アローキーで操作するのが非常に疲れるのでDS2でプレイしようとした。
しかしそのまま繋いだらキーがぐちゃぐちゃでわけがわからなかったのでToSのフォルダ内にあるゲームパッドの設定ファイルを直接いじってそれっぽくしたので一応公開しておく。
L1+R1のスキルセットは設定ファイルに書かれていなかったので狂ったままにした。
まあ多分QuickSlotらへんを追記すればいいんだけど特に問題はないので放っておく。

<Category>
    <HotKey ID="MoveUp" Name="위쪽 방향 이동" DownScp="None" UpScp="None" Key="JOY_UP" PressedKey="None" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="YES" Category="Battle"/>
    <HotKey ID="MoveDown" Name="아래쪽 방향 이동" DownScp="None" UpScp="None" Key="JOY_DOWN" PressedKey="None" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="YES" Category="Battle"/>
    <HotKey ID="MoveLeft" Name="왼쪽 방향 이동" DownScp="None" UpScp="None" Key="JOY_LEFT" PressedKey="None" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="YES" Category="Battle"/>
    <HotKey ID="MoveRight" Name="오른쪽 방향 이동" DownScp="None" UpScp="None" Key="JOY_RIGHT" PressedKey="None" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="YES" Category="Battle"/>
    <HotKey ID="QuickSlotExecute1" Name="퀵슬롯1" DownScp="JOYSTICK_QUICKSLOT_EXECUTE(0)" UpScp="None" Key="JOY_BTN_3" PressedKey="JOY_BTN_5" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="QuickSlotExecute2" Name="퀵슬롯2" DownScp="JOYSTICK_QUICKSLOT_EXECUTE(1)" UpScp="None" Key="JOY_BTN_1" PressedKey="JOY_BTN_5" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="QuickSlotExecute3" Name="퀵슬롯3" DownScp="JOYSTICK_QUICKSLOT_EXECUTE(2)" UpScp="None" Key="JOY_BTN_4" PressedKey="JOY_BTN_5" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="QuickSlotExecute4" Name="퀵슬롯4" DownScp="JOYSTICK_QUICKSLOT_EXECUTE(3)" UpScp="None" Key="JOY_BTN_2" PressedKey="JOY_BTN_5" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="QuickSlotExecute5" Name="퀵슬롯5" DownScp="JOYSTICK_QUICKSLOT_EXECUTE(4)" UpScp="None" Key="JOY_BTN_3" PressedKey="JOY_BTN_6" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="QuickSlotExecute6" Name="퀵슬롯6" DownScp="JOYSTICK_QUICKSLOT_EXECUTE(5)" UpScp="None" Key="JOY_BTN_1" PressedKey="JOY_BTN_6" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="QuickSlotExecute7" Name="퀵슬롯7" DownScp="JOYSTICK_QUICKSLOT_EXECUTE(6)" UpScp="None" Key="JOY_BTN_4" PressedKey="JOY_BTN_6" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="QuickSlotExecute8" Name="퀵슬롯8" DownScp="JOYSTICK_QUICKSLOT_EXECUTE(7)" UpScp="None" Key="JOY_BTN_2" PressedKey="JOY_BTN_6" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="QuickSlotExecute9" Name="퀵슬롯9" DownScp="JOYSTICK_QUICKSLOT_EXECUTE(12)" UpScp="None" Key="JOY_BTN_3" PressedKey="JOY_BTN_7" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="QuickSlotExecute14" Name="퀵슬롯14" DownScp="JOYSTICK_QUICKSLOT_EXECUTE(13)" UpScp="None" Key="JOY_BTN_1" PressedKey="JOY_BTN_7" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="QuickSlotExecute15" Name="퀵슬롯15" DownScp="JOYSTICK_QUICKSLOT_EXECUTE(14)" UpScp="None" Key="JOY_BTN_4" PressedKey="JOY_BTN_7" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="QuickSlotExecute16" Name="퀵슬롯16" DownScp="JOYSTICK_QUICKSLOT_EXECUTE(15)" UpScp="None" Key="JOY_BTN_2" PressedKey="JOY_BTN_7" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="QuickSlotExecute17" Name="퀵슬롯17" DownScp="JOYSTICK_QUICKSLOT_EXECUTE(16)" UpScp="None" Key="JOY_BTN_3" PressedKey="JOY_BTN_8" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="QuickSlotExecute18" Name="퀵슬롯18" DownScp="JOYSTICK_QUICKSLOT_EXECUTE(17)" UpScp="None" Key="JOY_BTN_1" PressedKey="JOY_BTN_8" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="QuickSlotExecute19" Name="퀵슬롯19" DownScp="JOYSTICK_QUICKSLOT_EXECUTE(18)" UpScp="None" Key="JOY_BTN_4" PressedKey="JOY_BTN_8" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="QuickSlotExecute20" Name="퀵슬롯20" DownScp="JOYSTICK_QUICKSLOT_EXECUTE(19)" UpScp="None" Key="JOY_BTN_2" PressedKey="JOY_BTN_8" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="NormalAttack" Name="일반공격" DownScp="None" UpScp="None" Key="JOY_BTN_3" PressedKey="MustNone" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="Jump" Name="점프" DownScp="None" UpScp="None" Key="JOY_BTN_1" PressedKey="None" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Basic"/>
    <HotKey ID="ToggleMouseMode" Name="마우스모드토글" DownScp="joystick.ToggleMouseMode()" UpScp="None" Key="JOY_BTN_10" PressedKey="JOY_BTN_6" Mode="Both" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Basic"/>
    <HotKey ID="Map" Name="맵" DownScp="UI_TOGGLE_MAP()" UpScp="None" Key="JOY_BTN_9" PressedKey="JOY_BTN_5" Mode="Both" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Basic"/>
    <HotKey ID="Select" Name="선택/스킵" DownScp="None" UpScp="None" Key="JOY_BTN_2" PressedKey="None" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Basic"/>
    <HotKey ID="QuestItemUse" Name="퀘스트아이템 사용" DownScp="QUESTITEMUSE_EXECUTE()" UpScp="None" Key="JOY_BTN_10" PressedKey="JOY_BTN_5" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Basic"/>
    <HotKey ID="MouseSpeedUP" Name="마우스속도증가" DownScp="joystick.MouseSpeedUp(5)" UpScp="joystick.MouseSpeedUp(-5)" Key="JOY_BTN_1" PressedKey="None" Mode="Mouse" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Basic"/>
    <HotKey ID="Escape" Name="ESC버튼" DownScp="None" UpScp="None" Key="JOY_BTN_10" PressedKey="None" Mode="Both" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Basic"/>
    <HotKey ID="QuickSlotSwap1" Name="퀵슬롯 변경" DownScp="JOYSTICK_QUICKSLOT_SWAP(1)" UpScp="None" Key="JOY_BTN_8" PressedKey="JOY_BTN_6" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Basic"/>
    <HotKey ID="QuickSlotSwap2" Name="퀵슬롯 변경" DownScp="JOYSTICK_QUICKSLOT_SWAP(2)" UpScp="None" Key="JOY_BTN_6" PressedKey="JOY_BTN_8" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Basic"/>
    <HotKey ID="WeaponSwap1" Name="무기 스왑" DownScp="WEAPONSWAP_SWAP_EQUIP()" UpScp="None" Key="JOY_BTN_11" PressedKey="None" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Basic"/>
    <HotKey ID="TargetFixed" Name="타겟 고정" DownScp="None" UpScp="None" Key="JOY_BTN_12" PressedKey="None" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Basic"/>
    <HotKey ID="TargetChange" Name="타겟 변경" DownScp="None" UpScp="None" Key="JOY_TARGET_CHANGE" PressedKey="None" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Basic"/>
    <HotKey ID="WarpQuest" Name="되돌아가기" DownScp="SELECT_QUEST_WARP()" UpScp="None" Key="JOY_BTN_9" PressedKey="None" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Basic"/>
    <HotKey ID="LHand" Name="보조 무기" DownScp="None" UpScp="None" Key="JOY_BTN_4" PressedKey="None" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Basic"/>
    <HotKey ID="RideOn" Name="탈것 타기" DownScp="ON_RIDING_VEHICLE(1)" UpScp="None" Key="JOY_UP" PressedKey="JOY_L1L2" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Basic"/>
    <HotKey ID="RideOff" Name="탈것 내리기" DownScp="ON_RIDING_VEHICLE(0)" UpScp="None" Key="JOY_DOWN" PressedKey="JOY_L1L2" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Basic"/>
    <HotKey ID="CrossUp" Name="십자키 위" DownScp="None" UpScp="None" Key="JOY_CROSS_UP" PressedKey="None" Mode="Mouse" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="CrossDown" Name="십자키 아래" DownScp="None" UpScp="None" Key="JOY_CROSS_DOWN" PressedKey="None" Mode="Mouse" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="CrossLeft" Name="십자키 왼쪽" DownScp="None" UpScp="None" Key="JOY_CROSS_LEFT" PressedKey="None" Mode="Mouse" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="CrossRight" Name="십자키 오른쪽" DownScp="None" UpScp="None" Key="JOY_CROSS_RIGHT" PressedKey="None" Mode="Mouse" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="ToggleRest" Name="앉기" DownScp="control.RestSit()" UpScp="None" Key="JOY_BTN_7" PressedKey="JOY_BTN_8" Mode="Key" UseAlt="NO" UseCtrl="NO" OnEdit="NO" Category="Battle"/>
    <HotKey ID="ChatType" Name="채팅변경" DownScp="ui.ProcessTabKey()" UpScp="None" Key="TAB" UseShift="NO" UseAlt="NO" UseCtrl="NO" OnEdit="YES" Category="System"/>
</Category>

もちろん自己責任で行ってください。ファイルはreleaseの中にあるhotkey_joystick.xmlです。
ちなみにDS2を繋いだ時のjoykeyの割当は

DS2 joykey
1
2
3
4
L1 5
L2 6
R1 7
R2 8
SELECT 9
START 10
L3 11
R3 12

だった。

追記

コンフィグしたのにL2を押してもR1のスキルセットが画面で光っているってことがあるかもしれないが、それはこの設定ファイルとは違うところで設定されているからだと思う。
もし確認の時にこのような現象が起こってもスキルが発動されるかどうかで確認してもらいたい。

2016年セキュリティキャンプ感想

実はキャンプ参加してました。感想というか殆ど反省ですが書きます。
解析ばっか受けました。

一日目

一日目は会場に着くとさっそく定例?の名刺交換を行っていた。とりあえず何人かと交換した。
次にチュートリアル的な話をして終わった。セキュリティベンダーのプロとか結構すごいらしい人がきてた。
最後にグループワークというものをした。4~5人のメンバーで一つの議題に絞って最終日に発表するというものである。
僕のグループはメンバーがいきなり頭よさそうなこと言い出したこととコミュ障と眠さが重なって終始沈黙しかできなかった。

二日目

専門講義が始まった。朝は5時50分くらいにおきて非常に眠かった。朝飯はバイキングなのでダルい。
最初の講義はマルウェアの解析の講義だった。逆アセンブルするソフトでいろんなバイナリを読んで、こういうふうに解析するんだよという基礎を教わった。
これは結構受けたくてとったのだが眠さがやばくて6割くらいしか話が聞けなかった。講師の方本当にすいません・・・
WinAPI全く触ったことが無くて解析がすごい難しいってことが分かった。(小学生並の感想)
次の講義は振る舞い検知に関する講義。アンチマルウェアに検知されるような無害なソフトを作れといわれた。5社のベンダーに検知させるのが手一杯だった。
UPXでパックすると必ずトレンドマイクロが検知してくるんだけど恨みでもあるのかと思った。セキュリティベンダーの仕事は大変なんだと思った。(小学生並の感想)
最後に旗取り合戦をした。わけが分からなかった。サービス問題一問だけ正解できたが自分の情けなさを感じた。

三日目

最初の講義はファジングの講義だった。講義に参加しているメンバーが好きな機材を選択してファジングを行ってた。ゲーム機にやってる人もいたが自分は携帯に対してファジングをしていた。
脆弱性とかは見つけられなかったが存在する機材を使用するということが面白かった。
次の講義は実行ファイルのASLRを突破するという講義。ランダム化されたアドレスをリークさせてシェルを起動させるというものだがわけが分からず泣きたくなった。
情けない自分にも丁寧に教えてくれた講師のれっくすさんの優しさに涙した。
また自分はC言語x86も何も理解していないという悲しさを学んだ。
最後の講義はROPチェーンを組み立てるものだった。一応事前課題では組めていて、その流れでチェーンを組んだらシェルが起動できず泣きたくなった。
夜は企業説明会みたいなのを聞いてた。ほーんってなった。
最後にグループワークだがまた何も出来なかった・・・・

四日目

専門講義最終日、最初の講義はリバエンの自動化するやつでシンボリック実効エンジンみたいなのを使って自動化しようとしたのだがそのエンジンの使い方も分からずPythonも分からず泣きたくなった。
最後の講義は遠隔マルウェアを作ったりするやつ。憧れの凌さんの講義で実際にマルウェアのようなものを作ったりシグネチャを作って検知したりして面白かった。あと凌さんがかっこよかった
また企業説明会があってほーんってなった。
グループワークは・・・・

五日目

グループワークの発表と閉会式をした。表彰されてたところはどこもとても面白い発表だった。YouTuberの発表は個人的に一番好き

キャンプを終えて

自分がキャンプで得られたことは自分の未熟さに対する悔しさだけである。解析の講義は泣きたくなることが多くて自分の未熟さを痛いというほど知った。
あとから教えてもらったのだが、解析の講義は他の講義より難しい傾向にあるらしい。確かに解析の講義は演習が多くて、予習をしっかりしていないと、分からないものが多くあった。
自分は検知と解析しか受けていないが、バイナリという人間では理解しずらいところを扱うため難しいのだと思う。
Pythonとかリファレンス見ながらやれば余裕っしょwとか思っていたけどそんなことでは講義にはついていけなかった。
もし来年のキャンプを受けようと思っていて解析を多く受けるつもりなら参加したもののアドバイスとして以下のスキルを身につけたほうがいいとおもう。

  1. C言語は普通に書ける。
  2. WinAPIが分かる。
  3. Pythonの様々な基本ライブラリを使いこなせる。
  4. x86が読める。
  5. LinuxWindowsを深く理解している。
  6. シェルが使える。

更に講義で使うツールなどは事前課題がなくてもつかるようにしておくことが大切である。これでようやく講義についていけるレベルになると思った。
また自分はTwitterのIDを公開しなったことやコミュ障が重なってまったく参加者との交流ができなかった。
それだけにあらずグループワークも全く参加できずにメンバーへ迷惑もかけてしまった。
もしメンバーの方が見ていたら本当にキャンプの日はすいませんでしたとこの場でお詫びします。
自分はこのようにこのキャンプでは悔しさしか得られなかったのでもし今後参加する方読んでいればキャンプに参加したときは知識や交流などを得られるように頑張ってください。

Arch Linuxが起動しなくなって一悶着

ArchLinuxでnslookupを使おうとパッケージを更新したらArchが起動しなくなった。

自分はwinとデュアルブートしているのだがgrubのブートメニューでArchを選択するとkvmが有効ではないというようなメッセージから進まなくなる。ためしにkvmを有効にしてみてブートするとそのメッセージが消えるのみでありコマンドはずっと打てないままである。このメッセージから起動しなくなった案件は日本語のwebサイトでは自分が探した限りでは見つからず、海外のフォーラムのほうでも報告されたのは数件であった。フォーラムのほうも明快な答えのようなものは見られず、探すのもめんどくさくなったので一回消してもう一回インストールすることにした。

とりあえずパーティーションの分割とかはしてあるのでddコマンドで/boot用の/dev/sda5と/用の/dev/sda6を一掃。あとはチュートリアル通りに色々やって言って、ある程度の設定が終わったところでrebootしたらgrubのメニューにwinしか表示されなくなった。

チュートリアルから外れたことはまったく行っておらず原因は不明であった。とりあえずマウントされてないのかと思いfstabを見るも正常。grubの設定がおかしいかと思ったが設定ファイルを見ても素人なのでさっぱり分からなかったがgrubが入っているのはArchのパーティーションなのでwinが起動することはあってもArchが認識すらされないのはおかしいと思ったのでgrubが原因とも考えられなかった。

ここでArchのセットアップにあたって一つだけチュートリアル通りに行かなかったことがあった。それは一部のコマンドが使用できないことである。具体的にはvi、nanoが使用できなかった。使用していない例もあるので気にすることなく行っていたがこれこそがArchが起動はおろか認識すらされないことを表しているのだった。

pacstrap /mnt base

がなぜか途中で終了していたのである。なぜbaseのインストールが途中で終了していたか分からないがこれの所為で認識されなかったのである。

まさかこんな理由で起動できないとは思わなかったので非常に手間取ってしまった。これからは何かを行う際、そのチュートリアルなどの出力と違う結果が出力された場合などはなぜ異なったかなどを考えていきたい。

黒い砂漠のCC(Character Change)やチャンネル移動による通信切断への対象法

黒い砂漠をやっていてCCやチャンネル移動すると80%くらいの確率で落ちる。そしてその直後にもう一度ゲームをしようとすると必ずといっていいほど入れない。他の人もこの症状がでているようだが落ちない人もいるのでなぜかなと思い調べていると公式ホームページの掲示板にその解決法としてオフロードの無効化というものが挙げられていた。オフロードは通信処理の一部をNICに任せることでCPUの処理を減らす機能らしいのだがどうやらそれが通信不良の原因として考えられるようだ。こちらのやり方にしたがってオフロードを無効化して一日たったが前日までのように落ちることはなく問題なくCCができている。自分が使っていたネットワーク機器が3000円くらいの安物の無線LAN子機だったのでこのような問題がでたのだろう。ネットワーク機器の重要性を知った出来事だった

RAMの重要性

黒い砂漠という要求スペックが無料の癖にえげつないゲームのためにZOTACのGTX970を中古で買った。前のグラフィックボードは6年前の代物で当然黒い砂漠の最低限のスペックすら満たしていなかった。なのでテクスチャ、画質を最低にしていても当然街にはいればオブジェクトの数や人の数でフリーズは当たり前で落ちることもよくあった。また道を馬で走っていれば地面のテクスチャを読み込めずにフリーズすることもあった。FPSも1280*720の解像度で20FPSを常に下回っていた。これらの問題も偏差値23の自分からすればグラボを買えれば全て解決するとおもっていた。しかし現実は厳しくテクスチャ、画質共にmiddle設定で解像度は1600*900にしてようやくFPS50くらいで安定したもののやはり街に行けばFPSは落ちてテクスチャが読み込まれずにフリーズすることが多々あった。しかし同じGTX970なのに最高設定(β)でヌルヌル動いてる人もいた。これはおかしいとおもってグラボの不良品を掴まされたとおもったが自分のマシンはRAMが4GBだった。一応黒い砂漠の基準は満たしているしメモリ如きでそこまでならんだろとはおもったが今時4GBは少ないだろうとアマゾンで売ってるアレを買った。

これで一応フルHDでテクスチャ、画質をhighにしてもFPSが40~60で安定するようになった。しかしこれはウィンドウモードの場合であってフルスクリーンにすると同じ解像度でもFPSが20を下回るようになる。ウィンドウモードだとゲーム以外の描画もしなくてはならなくて処理が多くなると聞いたことがあるが今回ウィンドウモードのほうがFPSがでている。ソフト側でフルスクリーンのFPS規制でもかかっているんだろうか。

 

nucleo boardとmbedでギターエフェクターを作る 3.完成品

とりあえず完成した。外装はこんな感じ

f:id:benntann:20160205005750j:plain

 

100均で買った道具箱に無理矢理ぶちこんである。フォンジャックの穴ははんだごてで溶かして開けた(臭い)

上から黒いのでてるけど上がペダルワウ(違う)の周波数調整用で下がエフェクター切り替え用のフォトリフレクタ。手とかを近づけると切り替わる。エフェクターの音は↓見たいな感じ

エフェクターなし

オーバードライブ

オートワウ

ペダルワウてきなやつ

 ワウみたいな周波数を見るエフェクターでも畳み込みで実現できるからデジタルフィルタを作った人は偉いですね