プログラミング
一昨年の夏にどうやってもテスト通らなくて放置してたゲームボーイエミュレータを根本的に書き換えてみたらだいぶましになった。最初はlens/Stateを使う方針でCPUのレジスタなんかをレコードのフィールドにぶち込んでそれらを書き換えていく感じだったが、ざ…
前記事においてよくわからんなとかいってたやつ。単純にキャリーしないときにオンにするかんじやな。 .carry = (a ^ i ^ result) & 0x100 != 0を逆にして.carry = (a ^ i ^ result) & 0x100 == 0でよいかんじでした。 fn addU16ToSingedU8WithCarryHalf(a: u…
ADD SP NやLD HL SP+N命令においての引き算時のキャリーとハーフキャリーのフラグの建て方がよくわからんかってしばらく詰んでた。昔書いたコード適当にコピペしてパスしたけど、よくわからんままやな。普通の引き算とは違うフラグの建て方してるっぽいんだ…
github/kmtoki/gbe-zig エミュレータ開発用テストROMのgb_test_roms/cpu_instrsがパスしたのでcpuはざっくり書けたっぽい。過去にTypescriptとHaskellとRustで書いてて、TSはなんとか動いたけど、haskellとrustはcpuのテストをパスできなかったので三度目の…
zigが流行ってると聞いて。人類に手動メモリ管理はまだ早いんだよな。もっと脳が進化してくれないと難しい。足りない脳でやってくしかないのだ現代人たる我(々?)は。 SDLのビルドでつまづいたりした。自分でbuild.zigいじるのいやだったので、パッケージマネ…
PopOSをインストールして環境設定してたらくそめんどくさかったんだけど、何一つメモ残してないから何がめんどくさかったのかわからないまま、ブログアップロードテストを迎えてしまったらいなう。 GドライブのSSDのフォーマットがMBRだったのでハマる 音楽…
GBEのPUSH/POPについてはそういうことみたいです。
keymap PreonicのQMKに定義してみた。一年ほど前に。キーマップ書いて一切練習してなかったのを思い出してちょっとやってみるかっと思ってファームウェア書き込んだら、修飾キーあたりが動かんくてなるほど、それで練習しなかったのかとなっとく。調べてみた…
{-# LANGUAGE GeneralizedNewtypeDeriving #-} data InnerState = InnerState { _y :: Int } newtype Inner m a = Inner { runInner :: StateT InnerState m a } deriving (Functor,Applicative,Monad,MonadState InnerState,MonadTrans,MonadIO) data AppSt…
<stderr>: commitAndReleaseBuffer: invalid argument (invalid character)で動かないぞ 文字コードが悪いらしいぞ chcp 65001でutf8にするぞ 動くようになったけど文字化けするぞ powershellでエンコーディングの設定するぞ 直ったぞ という話。 app\Main.hs:36:27:</stderr>…
Rustでゲームボーイエミュレーターを書いた 僕は最初、Rustで書こうとしたが所有権のあれこれをクリアできず挫折した。 メモリをRc<RefCell<Memory>とかでごまかそうとしたけど、さすがにあかんやろて思った。 Rc<RefCell<>>のオーバーヘッドがどれくらいなのか知らんけど、メモリアク</refcell<></refcell<memory>…
LY < 10の時になぜかリンクのYがリセットされる LY == 152でリンクの正しいYがセットされる LY == 144でレンダリングをしていた。リンクの座標がリセットされたままだったため非表示になっていた LY > 152でレンダリングするようにしたら、リンクは表示され…
一年位放置してたゲームボーイエミュレータをここ一週間位気になりだして触ってる。前回まではコントローラーの実装が良くなくてオープニングムービーは流れるけど、そこから操作できず進めないというところで詰んでた。そのへんを考え直して実装し直した。 …
地味にべんりなのでprofile.ps1に入れた function bin($n) { return [convert]::ToString($n,2) }
MarkdownのYoutubeサムネリンクが欲しいときにこれ。ブラウザ上でURLをコピーしたら、VimでF3でおk。なお関数名。 inoremap <F3> <C-R>=YankToMarkdownYoutubeLink()<CR> function YankToMarkdownYoutubeLink() let l:w = matchstr(@*,'\vwatch?v=([^&]+)') let l:id = m</cr></c-r></f3>…
powerlineとかairlineとかlightlineとか、結局やめてこれで十分だった。 set statusline=%<\ %n\ %t\ %m\ %r%h%w%=\ \|\ %{&fenc!=''?&fenc:&enc}\ %{&ff}\ %{&filetype}\ \|\ %l/%LL\ %2vC\ %3p%%
rust-sdl2、vcpkgを使う場合これどうりやってもx86をなぜかインストールするので、cargo vcpkg build --target x64-windows-static-mdと指定しても無視されるので直接vcpkgにtripletを指定して叩くと耳を傾けてくれる。 # Cargo.toml [dependencies.sdl2] ve…
ls | ? { Get-Content $_ | ? { $_ -match 'hoge' } }
はまったこと <content type="text/x-markdown">を指定してもplain textで投稿されてしまう 対策 ブログの設定画面からデフォルトの編集モードをMarkdownモードに設定する。 const http = require('https') const fs = require('fs') const process = require('process') const matter = requ</content>…
このブログはMarkdownをGithubにpushすることで公開になる。 流れとしては terminal開く cd $HOME/Github/blog vim開く e strftime("md/%Y%m%d%H%M.md") ブログヘッダーをyamlでtitle,date,categoryを書く 中身書く 保存してvim閉じる git add && git commit…
やりたいこと /blog/[$category]/[$index]みたいなページをビルド時に生成したい やったこと /blog/category/[...id].jsのgetStaticPathsでparamsのidにパスのリストを入れる つまずいたこと /blog/category/[id].jsではネストしたパスのページは生成できな…
ドチャクソかんたんなんのね、いまどき。HeadlessCMSなしでGitだけでブログエントリー追加していく感じなので良くも悪くもいつも通りな感じ。なじみがあるし、リッチコンテンツゼロなので必要十分。ドメイン買おうかどうしようかと微妙な悩み。一年で20ドル…
Nextjsでブログ作ってる。悪くないんだけど、よくわからないところがあってよくわからない。getStaticPropsで作ったデータがトップのコンポーネントに渡されるわけだけど、そのデータはビルドタイムにもっているだけなのか、クライアント側でも持つことにな…
Powershellにおいて、.zshrcや.bashrcにあたるのがprofile.ps1。 echo $PROFILEにどこのパスに設定ファイルを置けばいいか書いてある。 自分の場合はC:\Users\Name\OneDrive\ドキュメント\PowerShell\Microsoft.PowerShell_profile.ps1だった。 profile.ps1…
オープニングが動いたしもういいやって感じになってる。どこを直していいかわからんから。私はこの笑顔を見るために頑張ったんだ...
作り始めて4か月... 16ビット演算系とdaaで死んでたな。 interruptとかtimerとかは通ってないのでまだ道のり遠く。
なにもわからない。どこからともなくコピペして完全に敗北した。 BCD(Binary Coded Decimal)は16進数を10進数に変換したもの。 ゲームボーイではDAA命令を使って変換する。 0x9 -> 0x09 0xa -> 0x10 0xb -> 0x11 0x1a -> 0x20 0x2a -> 0x30 みたいな感じ。 …
archive.org 今更見つけた。。。 初期にこれ見つけれていればGBエミュを3倍くらい早く開発できた気がする。。。 なお、Confidentialのようです。
本当に悩んで考えて、どうしてもわからなかったから、出てくるわけないだろと思って、テストコードそのままぐぐったら出てきた。 gb-test-rom-emulation-issues つまりFの下位4ビットは何か値が書き込まれても無視するということ。 set_test 5,"POP AF" ld b…
HALTはInterruptで復帰するんだから、DIしたら帰ってこれない。IME=0のTimerはIF立てるだけでIEは立てないんだからInterruptしない。そういう理解。どないやねん。TimerはIEかIMEをオンにするの?すごい振出しに戻る感あってつらい。