エムジェイ(MJHD, Yusuke Otsuka)

24.7K posts

エムジェイ(MJHD, Yusuke Otsuka) banner
エムジェイ(MJHD, Yusuke Otsuka)

エムジェイ(MJHD, Yusuke Otsuka)

@wait00002

vimをカタカタする人。エミュレータ作ります。GB/NES/GBA/PS/RISC-V... Discord: .mjhd 発言は個人のものであり所属等とは一切関係ありません。 Webフロント/バックエンド/Flutter

Tokyo Beigetreten Nisan 2018
506 Folgt560 Follower
エムジェイ(MJHD, Yusuke Otsuka)
skillsのパッケージ管理とか多分みんな思いついてるしすぐ作られるので、brewとかsnapのレシピ作ったほうが流行るのではないか (流行りを求めてないのでやらない)
日本語
0
0
0
93
エムジェイ(MJHD, Yusuke Otsuka)
framebuffer経由して描画でも3FPSしか出ないのは、Pythonという言語があまりにもアレなのか...
やねうら王@yaneuraou

Codexに書いてもらったPython製のNESエミュレーター、やっとSMB3(スーパーマリオ3)が正常に動くようになったが、3FPSしかでなくて遅すぎて泣いてる。😢 【以下、誰も興味ないだろうけどNESについて長文を垂れ流す】 10数年ぐらい前に私が自力でC++実装したときはここまでに丸二日ぐらいかかったのでそれが少し指示して30分程度待つだけでここまで動くようになるのはほんま凄いことではあるが。 SMB3のエミュレーションで何が難しいかって、SMB3はMMC3という、カートリッジ上の高機能mapperチップを使っている点なんだ。これがPRGやCHRのバンク切り替えだけでなく、scanline IRQという仕組みまで持っている。エミュレータではこのMMC3の挙動を正確に再現してやらないと、画面が正常に描画されない。 MMC3はPPUのアドレスラインの一つ、A12の変化を監視している。PPUは背景やスプライトのタイルパターンをCHR ROMから読み出すときに、0x0000〜0x0FFFと0x1000〜0x1FFFの領域を行き来するんだけど、このときアドレスの12bit目、つまりA12が0→1に変化する。この変化をMMC3が検出してscanlineカウンタをデクリメントし、一定回数に達するとCPUにIRQを発生させる。 そのIRQハンドラの中で、ゲーム側はCHR bankを切り替えたりスクロール設定を変更したりする。つまり、画面の描画途中でPPUの参照するパターンテーブルを変えて、以降のスキャンラインを別の見え方で描かせているわけ。ステータスバーとゲーム画面でグラフィック構成を変えたりするのもこの仕組み。だからMMC3のIRQタイミングが少しでもズレると画面が壊れる。エミュレーションが難しい理由の一つがここ。 そもそもファミコンのCPUは6502系として知られているけど、正確には任天堂とリコーがカスタムしたRicoh 2A03というチップで、これは6502ベースのCPUにAPU(Audio Processing Unit)が統合されたものになっている。グラフィック処理はこのCPUとは別チップで、Ricoh 2C02というPPU(Picture Processing Unit)が担当している。このようにカスタムチップにしたのは、他社に互換品を作られたくないという思惑もあったのかもしれない。 このPPUはタイルベースの描画方式になっていて、8×8ドットのパターンを基本単位として画面を構成する。このパターンはCHR ROMやCHR RAMに格納されていて、背景はName Tableというタイルマップを参照して描画される。各タイルにはattribute tableによってパレットが割り当てられるので、同じパターンでも色を変えて表示できる。だからテキスト文字を並べるような感覚で背景グラフィックを構成できる。 さらにPPUにはハードウェアスクロールの仕組みがあって、描画開始位置をレジスタで指定することで画面を滑らかにスクロールさせることができる。背景はName Table単位で管理されていて、論理的には4画面分(0x2000〜0x2FFF)のアドレス空間が用意されている。ただし本体側のVRAMは2KBしかないので、実際にはカートリッジの配線によってhorizontal mirroringやvertical mirroringでName Tableが共有される。こうすることで縦スクロールや横スクロールを実現している。 1983年のハードウェアとしては、このタイル+パレット+スクロールという設計はかなり合理的で、限られたメモリと帯域でゲーム画面を効率よく描画するための工夫が詰まっている。今見ても感動する。これを設計した人は間違いなく天才だと思う。

日本語
0
0
1
261
エムジェイ(MJHD, Yusuke Otsuka)
shinkokuスキルを使ってClaude Codeで確定申告をした。試しにCodexでshinkokuスキルを使ってみると、後半バグり出してダメでした
日本語
1
0
2
248
エムジェイ(MJHD, Yusuke Otsuka) retweetet
杉本啓
杉本啓@sugimoto_kei·
仕事のできない自分、パフォーマンスの高くない自分、そんなに優秀じゃない自分を素直に受け入れた方がいいと思うんだよね。みなさん、自分のスキルや優秀さにこだわり過ぎ。それよりも、仕事をしていて、何を達成したいか、何に喜びを見出すかに視線を注ぐ。自分から離れ、対象に美しさを見出す。
日本語
5
178
1.8K
57.3K
エムジェイ(MJHD, Yusuke Otsuka)
SDカードに格納されてるデータに依存するアプリケーションは、SDカード内に.appを置くようにして完結させたので、取り外しても問題ない。良い
日本語
0
0
0
88
エムジェイ(MJHD, Yusuke Otsuka)
普段使ってるMacBook Airが512GBで足りなくなったのでマイクロSDカードを常時接続する体制に移行した。 SanDiskのCreator microSD 1TB。Amazonだと値上げ圧を受けて4万円する(!?)ので、公式ストアでクーポン使った sandisk.com/ja-jp/products…
日本語
1
0
0
838