2022年7月6日水曜日

GPUパススルー(Arch Linux)

 メモ兼テンプレです。

環境

  • Arch Linux
  • Pentium Gold G6405(VT-d対応)
  • GeForce GTX 950(UEFI対応)
  • BIOSTAR H510MH 2.0(IOMMU対応)

手順

  • IOMMUとVT-dを有効化
    • UEFIでVMXをEnable
  • カーネルパラメーター
    • intel_iommu=on
  • モジュールをロード
    • /etc/modprobe.d/vfio.conf
      • 注意点としてCPU由来のPCIeコントローラーを含めないこと
    • /etc/mkinitcpio.conf
      • MODULES=(... vfio_pci vfio vfio_iommu_type1 vfio_virqfd ...)
  • 仮想マシン作成
    • virt-managerにて作成
      • UEFIを選択
      • CPUモデルとしてhost-passthroughを選択
      • SPICEの削除は不要

2022年6月17日金曜日

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

Rustでゲームボーイエミュレータを自作してみました。
なかなか面白くCPUを中心に知識を深めるのにも役立ったので内容と共に紹介したいと思います。ソースコードはこちらにあります。


まずはじめに

実際のところ執筆時点ではゲームボーイエミュレータを自作する為に必要な資料は豊富に揃っている為に比較的容易に作ることが出来ます。ただそれらの資料は一部不完全であったりするので突き合わせて正しい方を選んでいく必要があります。その際に役立つのがGitHubに公開されている完成品のエミュレータで動作させるのもソースコードを見るのも役に立ちます。

完成品と同じ処理を実装していくことで確実に作れる点は大きいです。


概要を把握

エミュレータを作る前にGAME BOYが、どんな機能で、どんな動きをするのか概要を把握しておくと楽になります。CPU、RAM、割り込み、時計、画面、サウンド、ゲームパッド、ゲームカートリッジなどが主たる物としてあげられますが、ざっくらばんでも絵にしておくと把握が楽になります。


準備

必要な資料や開発環境を整えておくと楽が出来ます。
私の開発環境ではGitとRustとVimとSDL2を使用しました。他にもVisual Studio Codeなどもありますし使い慣れた開発環境を準備するのが良いでしょう。また完成品のソースコードの開発環境に合わせられると更に楽が出来ます。
資料については関連サイトが豊富にあります。日本語ではGB Specなど、海外ではBGB homepageGameboy DevelopmentgbdevGame Boy Projectなどがあります。海外の方が詳細であることが多いです。

その他にROMデータが必要になりますが、これはオープンソースのROMがお手軽に利用できます。なかにはテスト用ROMなどもあり使うと確認が楽になります。またデバッグ機能の充実しているエミュレータBGBや、必要な物がまとめられているGitHubのawesome-gbdevなどもあります。


実装

私の場合は概要把握の後は仕様書と完成品のソースコードを相互参照しながら実装していきました。ソースコードに不明点があれば仕様書を参照、テストROMで不具合があればソースコードの見直し、それでも不明なら仕様書を参照、それでも不明なら完成品のソースコードを修正してレジスタの内容を出力して開発品とdiffなど。
ドキュメントには不備が所々ある様で基本的にはテストROMに合わせるのが良いようです。


終わりに

結果として部分的ですがサウンドの再生も可能になり比較的まともにプレイ可能になりましたので今後は吸い出し機を使って購入したカートリッジのデータをプレイしてみる予定です。
自作したエミュレータでマリオやポケモンが動くのは感慨深いかもしれません。

2022年4月27日水曜日

GAME BOY エミュレータを作る(Rust)

メモ兼テンプレです。

    GB Emuの作成にあたり参考資料についてまとめておく


2022年2月19日土曜日

SSHでポートフォワード(リモートからローカルへトンネリング)

メモ兼テンプレです。

ssh -R 8080:localhost:8081 -g -N user@192.168.1.1

解説

  • -R 8080:localhost:8081
    • 192.168.1.1のポート8080への接続をlocalhostの8081にポートフォワード
  • -g
    • 外部からの接続を許可
  • -N
    • ポートフォワード向け便利オプション(コマンド実行なしのモード)
  • user@192.168.1.1
    • userで192.168.1.1に接続
※未検証

SSHでポートフォワード(ローカルからリモートへトンネリング)

メモ兼テンプレです。

ssh -L 8081:192.168.1.123:8080 -g -N user@192.168.1.123

解説

  • -L 8081:192.168.1.123:8080
    • ポート8081への接続を192.168.1.123:8080にポートフォワード
  • -g
    • 外部からの接続を許可
  • -N
    • ポートフォワード向け便利オプション(コマンド実行なしのモード)
  • user@192.168.1.123
    • userで192.168.1.123に接続

2021年1月19日火曜日

Android Studioでgit push(ssh)

前提条件
  • Android StudioでProjectを作成済み
  • Projectのlocal repositoryを作成済み
  • gitサーバーを構築済み
環境
  • Android Studio 4.0.1
  • Git 2.29.2
  • Arch Linux
手順
  1. gitサーバーでbare repositoryを作成
    • git init --bare /home/username/git/repos/リポジトリ名
  2. Androidstudioでpush
    • メニュー>VCS>Git>Push
    • Define Remoteリンクを選択
    • リモートリポジトリ名とURLを入力してOK
      • master
      • ssh://username@0.0.0.0:/home/username/git/repos/リポジトリ名
    • Push

2020年12月20日日曜日

Raspberry Pi Zero WとArchLinuxでBulez(Buletooth)を使う

環境

  • Raspberry Pi Zero W
  • ArchLinux ARM
設定

  • /boot/config.txt(追記)
    • dtparam=krnbt=on
    • enable_uart=0
  • /boot/cmdline.txt(削除)
    • console=ttyAMA0,115200
    • kgdboc=ttyAMA0,115200
  • 再起動
  • pacman -S bluez bluez-utils
  • systemctl enable bluetooth.service
  • systemctl start bluetooth.service
備考

  • bluetoothの設定にはbluetoothctlを使用

ChatGPTを英会話に使う

AIと幅広い対話を行うことができるChatGPTですが、英語教師の役割を担わせることも可能になっています。これを用いて英会話(チャット)による学習を行うことが可能です。 最初に必要なプロンプトを入力します。コピペして使ってください。 初心者 Let's think ste...