プログラミング

ただのショートカットとしてのnewtypeにMonadState/MonadTrans/MonadIOのinstanceを定義する

{-# 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…

WindowsTerminal/powershellでのstack/GHCの文字化け

<stderr>: commitAndReleaseBuffer: invalid argument (invalid character)で動かないぞ 文字コードが悪いらしいぞ chcp 65001でutf8にするぞ 動くようになったけど文字化けするぞ powershellでエンコーディングの設定するぞ 直ったぞ という話。 app\Main.hs:36:27:</stderr>…

たなこふ先生のRustでGBE

Rustでゲームボーイエミュレーターを書いた 僕は最初、Rustで書こうとしたが所有権のあれこれをクリアできず挫折した。 メモリをRc<RefCell<Memory>とかでごまかそうとしたけど、さすがにあかんやろて思った。 Rc<RefCell<>>のオーバーヘッドがどれくらいなのか知らんけど、メモリアク</refcell<></refcell<memory>…

リンクのY位置

LY < 10の時になぜかリンクのYがリセットされる LY == 152でリンクの正しいYがセットされる LY == 144でレンダリングをしていた。リンクの座標がリセットされたままだったため非表示になっていた LY > 152でレンダリングするようにしたら、リンクは表示され…

またゲームボーイエミュレータ触ってる

一年位放置してたゲームボーイエミュレータをここ一週間位気になりだして触ってる。前回まではコントローラーの実装が良くなくてオープニングムービーは流れるけど、そこから操作できず進めないというところで詰んでた。そのへんを考え直して実装し直した。 …

Powershellで数値を二進数に変換

地味にべんりなのでprofile.ps1に入れた function bin($n) { return [convert]::ToString($n,2) }

VimでクリップボードからMarkdownのYoutubeサムネリンクを生成する

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>…

vimのstatus line

powerlineとかairlineとかlightlineとか、結局やめてこれで十分だった。 set statusline=%<\ %n\ %t\ %m\ %r%h%w%=\ \|\ %{&fenc!=''?&fenc:&enc}\ %{&ff}\ %{&filetype}\ \|\ %l/%LL\ %2vC\ %3p%%

WindowsでRust-SDL2をビルドする

rust-sdl2、vcpkgを使う場合これどうりやってもx86をなぜかインストールするので、cargo vcpkg build --target x64-windows-static-mdと指定しても無視されるので直接vcpkgにtripletを指定して叩くと耳を傾けてくれる。 # Cargo.toml [dependencies.sdl2] ve…

Powershellで正規表現にマッチする内容のファイル名が欲しい時

ls | ? { Get-Content $_ | ? { $_ -match 'hoge' } }

APIを使ってMarkdownをはてなブログに投稿する

はまったこと <content type="text/x-markdown">を指定してもplain textで投稿されてしまう 対策 ブログの設定画面からデフォルトの編集モードをMarkdownモードに設定する。 const http = require('https') const fs = require('fs') const process = require('process') const matter = requ</content>…

Vimで楽にBlogを書く

このブログは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…

Next.jsで静的にネストしたルーティングのページを生成する

やりたいこと /blog/[$category]/[$index]みたいなページをビルド時に生成したい やったこと /blog/category/[...id].jsのgetStaticPathsでparamsのidにパスのリストを入れる つまずいたこと /blog/category/[id].jsではネストしたパスのページは生成できな…

VercelにNext.jsで作ったブログをデプロイした

ドチャクソかんたんなんのね、いまどき。HeadlessCMSなしでGitだけでブログエントリー追加していく感じなので良くも悪くもいつも通りな感じ。なじみがあるし、リッチコンテンツゼロなので必要十分。ドメイン買おうかどうしようかと微妙な悩み。一年で20ドル…

ブログなど今時のものじゃないんよ、でも、ほら、そう、僕はそれがいい

Nextjsでブログ作ってる。悪くないんだけど、よくわからないところがあってよくわからない。getStaticPropsで作ったデータがトップのコンポーネントに渡されるわけだけど、そのデータはビルドタイムにもっているだけなのか、クライアント側でも持つことにな…

Powershellをいい感じに設定する

Powershellにおいて、.zshrcや.bashrcにあたるのがprofile.ps1。 echo $PROFILEにどこのパスに設定ファイルを置けばいいか書いてある。 自分の場合はC:\Users\Name\OneDrive\ドキュメント\PowerShell\Microsoft.PowerShell_profile.ps1だった。 profile.ps1…

ぴかちゅう

オープニングが動いたしもういいやって感じになってる。どこを直していいかわからんから。私はこの笑顔を見るために頑張ったんだ...

cpu_instrsテスト通った

作り始めて4か月... 16ビット演算系とdaaで死んでたな。 interruptとかtimerとかは通ってないのでまだ道のり遠く。

ゲームボーイのDAA(BCD)完全に理解した

なにもわからない。どこからともなくコピペして完全に敗北した。 BCD(Binary Coded Decimal)は16進数を10進数に変換したもの。 ゲームボーイではDAA命令を使って変換する。 0x9 -> 0x09 0xa -> 0x10 0xb -> 0x11 0x1a -> 0x20 0x2a -> 0x30 みたいな感じ。 …

公式ゲームボーイ開発マニュアル

archive.org 今更見つけた。。。 初期にこれ見つけれていればGBエミュを3倍くらい早く開発できた気がする。。。 なお、Confidentialのようです。

set Test "POP AF"

本当に悩んで考えて、どうしてもわからなかったから、出てくるわけないだろと思って、テストコードそのままぐぐったら出てきた。 gb-test-rom-emulation-issues つまりFの下位4ビットは何か値が書き込まれても無視するということ。 set_test 5,"POP AF" ld b…

GBのHALTつらい

HALTはInterruptで復帰するんだから、DIしたら帰ってこれない。IME=0のTimerはIF立てるだけでIEは立てないんだからInterruptしない。そういう理解。どないやねん。TimerはIEかIMEをオンにするの?すごい振出しに戻る感あってつらい。

自作ゲームボーイエミュレータメモ

正直なところエミュレータを完成させていないし、完成しない気もしているので理解がいろいろとおかしいところもあるかと思うので基本的には元資料見ていただくのが正解かと。 (ターミナルでもグラフィックのデバッグできたりします) 資料 Gameboy Developmen…

自作ゲームボーイエミュレータ少し動いた

10月くらいからちょこちょこ作り始めてやっと入口に立てたような気がする。とりあえずバグだらけではあるがゼルダの夢見る島のオープニングくらいは動くようになったので記念カキコ(死語)CPUだいたい実装してからPPUがどうしていいかまったくわからんかっ…