一応APU実装完了

NES

どうにか全チャネルがそれなりに鳴ってくれるようになりました(DMCは以前作ったPCM再生ROMでテストしましたが、本来の使い方であるDelta PCMについてはまだテストしてません)。ただ、ほとんどFCEUXのパクリなので理解度は半分以下です。 NesDevWikiの記述通…

NESエミュレータ(未完成)のリポジトリ作成

NES

とりあえず矩形波と三角波はそれっぽく鳴るようになったので一応リポジトリを作ってみました。ノイズとDMCは未実装です。 まだエミュレーション精度はガバガバです。最終的にはFCEUX互換にしたいですが…。 なお、このプロジェクトはとにかくシンプルでわかり…

SDL2のオーディオ再生

NESエミュレータはどうにか三角波がまともに鳴るようになりました。どうもSDL_QueueAudio()を使っていたのが良くなかったようで、従来のコールバック方式にしたら改善しました。そこで一応コールバック方式での再生について書いてみます(知識ゼロから調べた…

はてなダイアリーから移転しました

いきなりですがMarkdownを使いたかったので移転してみました。なんか横幅の狭いデザインばっかりなのが気になりますが…。スマホの影響なんですかね?

APUむずい

NES

とりあえず三角波だけ実装してみたけど音がおかしい(;´Д`) 音のタイミング自体は正しそうなんだけど凄く耳障りな感じになる…。エミュレーションがおかしいのかWAVEへの変換がおかしいのかよくわからないんですよねー。固定周波数の正弦波を出力する仮想チャ…

bjneのビルドが通らないのを修正

NES

元リポジトリのソースはそのままだとDebian stableでビルドが通らなかったので、一応修正版を置いておきます。ビルドシステムをwafからsconsに変更した*1ので、sconsのインストールが必要です。まあLinuxならパッケージがあるでしょうから許してくださいとい…

APUメモ

NES

APUが1割くらい理解できた(NesDevWikiを読んだだけですが)ので、既存のエミュレータの実装も合わせて少し書いてみます。まずAPUはフレームカウンタを内蔵しており、フレームカウンタはCPUサイクルに連動するシーケンサを持ちます。このシーケンサの動作サイ…

bitfield templateでハマった件

C++

C++ではテンプレートを使ってビットフィールドを実現するというテクニックがあるようです(検索すると色々出てきます)。しかしこれは注意して実装しないとハマるであろう落とし穴があった(私もハマりました)のでメモしておきます(gcc 4.9.2, clang 3.5.0で検…

FC『チャレンジャー』の乱数について

$EA-$EC が乱数、$87D9 が乱数生成器のようです。 $87D9 は乱数更新後に1Pおよび2P入力($10, $11)を加えた値を結果として返すので、適切に2P入力を行うことでかなり自由に乱数調整ができると思われます。ただし乱数が1Fで複数消費される場合は完璧とまではい…

GB『ルクル』testrun

なぜかYouTubeの一覧に出なかったので一応こっちに貼り。超適当プレイです。 地味に良ゲーだけどTASだとどうにも段差の待ち時間がダレるんですよね…。あと最適化を真面目に考えると氏ねそう\(^o^)/たまにスクロールが追いつかなくなって画面ズレが発生する…

ミニパットやってみた

submission movie: nicovideo | youtube4-2はHIO無理でした\(^o^)/ エンコードについて 今回はL-SMASHでmuxしましたが、FPSを手で指定する必要があったり、ストリーミング向けの場合 --optimize-pd を付けた方がいいという話があったり少々ややこしいです(…

FC『内藤九段将棋秘伝』の思考ログをとってみた

この局面のCOM玉の詰み判定がおかしい件について調べ中です(再現用ムービーと棋譜を置いておきます)。まだ思考ルーチンの評価ロジックまでは完全にはわかってませんが、コード自体は大体読めたのでLuaスクリプトでこの局面の思考ログをとってみました。ログ…

FC『内藤九段将棋秘伝』解析中

思考ルーチンを少しずつ読んでます。以下の要素はだいたい読めた感じです: 局面の特徴量計算 候補手生成(1手読み) PLAYER玉詰み判定 後は評価部だけと思われますが、結構いろいろな要素を評価してるのでもう少しかかりそうです。以前COM玉の詰み判定がおかし…

FC『スターソルジャー』のちょっと気になるコード

以前アップされた8面までのスコアアタックTASを引き継ごうかと思って色々調べ中です。今のところコードを読んでるだけですが、気になった点について少しメモ。 CHRバンク切り替え ; マッパー3 CHRバンク切り替え 9F88 : BD 44 D0 lda $D044,x 9F8B : 9D 44 D…

ミニパットのTASが来てる

http://tasvideos.org/5083S.html これ1-5と1-9でHIOが取れなくて投げたんですよね…。やっぱりこのムービーでもできてないようです。 1-5は頑張ればギリギリ近くまでは行けるんですが無理でした。1-9は以前手でプレイしたとき壁と遮断機の間に打ち込むことで…

FC 平成天才バカボン 資料まとめ

TAS 28:23.10基礎知識テクニック1面ボス解析2面ボス解析3面ボス解析4面ボス解析

FC 平成天才バカボン 4面ボス解析

$0396 現在の数字(0-origin) $039C 正解数 24回正解でクリアとなります。数字床は速度 0.938 以下でないと反応しないようです。$A8A2 が数字($0396)決定処理です。前回と同じになった場合、+1して8で割った余りとなります。乱数調整は床を踏むフレームをずら…

FC 平成天才バカボン 3面ボス解析

$0401 U8 ボス座標y $0402 U16 ボス座標x ボスがゴールするまで待たなければならないので、勝ちさえすれば所要フレーム数はどうやっても同じと思われます。自機が x=1184 に達した時点でゴールと判定されるようです。

FC 平成天才バカボン 2面ボス解析

最初のコインは右上で固定と思われます。このコインで500点取るのはおそらく不可能なので、最短でも11個取る必要があると思われます。$A520 がコイン位置決定処理です。前回と同じ位置になった場合1つ先の位置に変更する処理となっているので、連続で同じ場…

FC 平成天才バカボン 1面ボス解析

$039A ボール取得数 $0405 ボールy座標 $0406 ボールx座標 $04A0 ボール発射カウンタ(0x00, 0x80 で発射) $04A1 ボールy速度に関係? ボール20個取ればクリアとなります。ボール発射タイミングは一定なので、20個目を最速で取れるように調整すればOK。$B954 …

FC 平成天才バカボン テクニック

LR待機 左右同時押しするとその場で静止するので、もろもろの調整に利用できます。また、着地直後に歩き出してしばらくはジャンプができませんが、LR待機によってこの待ち時間を消化できるので、少しだけ助走してジャンプしたい場合にも利用できます。 しゃ…

FC 平成天才バカボン 基礎知識

※特に断らない限りリトルエンディアンです。 仕様 iNESマッパー: 19 (私はナムコ系マッパーはよく知りません。一応NesDevWikiに解説があります) メモリマップ 水平移動 画面内x座標 $53 とカメラx座標 $5D の和が自機のマップ内x座標(ピクセル)となります。…

ニコニコがGINZAで再生できなかった件について

Flashのグローバル記憶領域設定で「サードパーティ製 Flash コンテンツにコンピューター上のデータを格納することを許可します」にチェックを入れる必要があるようです。上のスライダーを一番左(容量0)にしておくと初めて要求された際に確認メッセージが出る…

FC 平成天才バカボン in 28:23.10

movie: website microstorage frames: 102354 re-records: 108728 (TAS Editor使用) encode: nicovideo (account | free) とりあえずうp。資料作りました。 私は原宿化してる人なのでエンコ設定は以前と同じにしてます。というかGINZAで視聴チェックしよう…

FC『平成天才バカボン』3面ボス戦

更新ポイントを見つけてはやり直すループにハマり続けてましたがようやく抜け出した感があります。現在3面ボス戦まで進んでいます。3面ボス戦ですが画像の高さ3のハードルをよじ登りなしで越える方法が見つかっていません。高さ3なので手前の高さ1のハードル…

FC『平成天才バカボン』落下キャンセルバグ

以前まで「ハシゴバグ」と呼んでいたものですが、別にハシゴがなくてもできることが判明しました。床も壁も1マス幅ならばこれで壁抜けができるようです。なお、床が2マス幅以上の場合、1マス歩いた時点で少しの間勝手にしゃがみ状態に切り替わり、その後歩き…

バカボンのRTAをやってる人がいた

普通のプレイ動画すらあまり見当たらないゲームだったんですが世界は広いですね。ゲームセンターCXでやったらしいので若干知名度が上がったのかも?なおTAS(testrun)の方は3-1-2まで進んでいます。残念ながらハシゴバグの出番はなさそうです(一応2-1-2で壁抜…

メモリの読み込み処理は emu.registerafter() で登録する

TAS

gui.register() は1フレームに1回呼び出されるわけではないので、メモリ読み込みに使うと色々おかしなことになります。例えば以下のスクリプトをFCEUXで実行するとポーズ中でもXが増え続けます。 local x_prev = 0 function f() local x = x_prev x = x + 1 …

FC『平成天才バカボン』調査メモ

$53 U8 画面内座標x $59 U8 座標y $5D U16 カメラx $7E U16 スピードx $0178 U8 座標xサブピクセル(ただし静止したりすると0にリセットされる) $017D U16 スピードy $0180 U8 ハシゴ登りや突っ張り登り時の移動カウント(意外と重要そう) $0181 U8 座標yサブ…

minttyで全角記号を正しく表示

.minttyrc で以下のようにロケール/文字セットを設定しないと全角記号が正しく表示されないようです(GUIの Options→Text からも設定できます)。 Locale=ja_JP Charset=UTF-8 これはロケールが設定されていないと wcwidth, wcswidth が1を返すのが原因のよう…