【Obsidian】Obsidian gitプラグイン
(2022/4/13 加筆修正しました)
Obsidian gitプラグインとは
Obsidianからgitのローカル/リモートリポジトリ操作を行えるプラグイン。
予めVaultに対してgitの操作を行い、githubなどのリモートリポジトリと関連付けさせておく必要があるため、gitの知識があることが前提となりますが、利用できるのであればほぼ自動でバックアップしてくれるので便利なプラグインです。
ここでは、プラグインのドキュメント、設定画面の和訳と、具体的な利用方法を記載します。
個人的にはGoogleドライブやOne Driveなどのクラウドストレージはいつ壊れてもおかしくないと考えているので、githubに保存できるのは安心。
目次
プラグイン配布元
Obsidian gitプラグインは、以下で公開されています。
プラグインドキュメント和訳
Obsidian.mdのデータ保管庫をリモートのgitリポジトリ(GitHubのプライベートリポジトリなど)にバックアップするためのシンプルなプラグインです。
このプラグインは、認証情報が設定されていることを前提にしています。
git でデータ保管庫をバックアップすることの利点については、@tallguyjenks による素晴らしい記事を読むことをお勧めします。
このプラグインは現時点ではモバイルでは動作しません。更新については #57 を参照してください。
1. インストール方法
詳しい説明は、インストールガイドをご覧ください。
2. ドキュメンテーション
要件、ヒント、よくある問題などは、Wikiで確認できます。
3. 特徴
- 保管庫の自動バックアップ(X分毎)
- Obsidian起動時にリモートリポジトリから変更を取り込みます。
- リモートリポジトリへの変更のプル/プッシュのためのホットキーの割り当て
- Gitサブモジュールによる異なるリポジトリの管理
4. サイドバービュー
ソースコントロールビューでは、個々のファイルのステージングとコミットを行うことができます。
「ソースコントロールビューを開く」コマンドで開くことができます。
5. 使用可能なコマンド
- Create Backup(バックアップを作成する): すべての変更をコミットし、バックアップ時にプッシュするかどうかの設定に応じてプッシュします。
- Create Backup with specific message(特定のメッセージでバックアップを作成する): 上記と同じですが、カスタムメッセージを使用します。
- Commit all changes(すべての変更をコミットする): プッシュせずに全変更のコミットのみ行います。
- Commit all changes with specific message(特定のメッセージとともにすべての変更をコミットする): 上記と同じですが、カスタムメッセージを使用します。
- Push(プッシュ)
- Pull(プル)
- List changed files(変更されたファイルを一覧表示する): すべての変更点をモーダルにリストアップします。
- Edit remotes and Remove remote(リモートの編集とリモートの削除)
- Initialize a new repo(新しいリポジトリを初期化する)
- Clone an existing remote repo(既存のリモートレポジトリをクローンする)
最新バージョン(執筆時点はversion 1.24.1)では、gitの基本的な操作を行うコマンドがObsidianから実行できるようになりました。
簡単な操作だけであれば、Obsidian上で全て完結できるでしょう。
6. 連絡先
フィードバックや質問がある場合は、GitHub issues または Obsidian Discord の @evrwhr までご連絡ください。
このプラグインは denolehov が最初に開発しました。3月以降は、主にVinzent03がこのプラグインを開発しています。
もし私(Vinzent03)をサポートしたいなら、Ko-fiでサポートできます。
設定画面和訳
Vault backup interval (minutes)
Commit and push changes every X minutes. Set to 0 (default) to disable. (See bellow setting for further configuration!)X分ごとに変更をコミットしてプッシュする。
0(デフォルト)に設定すると無効になります。(さらに詳しい設定は下の設定を見てください!)If turned on, do auto backup every X minutes after last change. Prevents auto backup while editing a file. If turned off, do auto backup every X minutes. It's independent from last change.
オンにした場合、最後の変更からX分ごとに自動バックアップを行います。
編集中のファイルは自動バックアップしません。
オフにした場合は、最後の変更に関係なく、X分ごとに自動バックアップを行います。Auto pull interval (minutes)
Pull changes every X minutes. Set to 0 (default) to disable.X分ごとに変更をプルします。
0(デフォルト)を設定すると無効となります。Sync Method
Selects the method used for handling new changes found in your remote git repository.リモート git リポジトリで見つかった新しい変更の処理に使用する方法を選択します。
訳注)通常はMergeで問題ありません。
- Merge
- Rebase
- Other sync service (Only updates the HEAD without touching the working directory)
その他の同期サービス(作業ディレクトリを触らずにHEADだけ更新する)
Commit message on manual backup/commit Avaliable placeholders: {{date}} (see below), {{hostname}} (see below) and {{numFiles}} (number of changed files in the commit)
手動バックアップ/コミット時のコミットメッセージ。 使用可能なプレースホルダーは以下。 {{date}} この下の日付フォーマットに従った書式の日付を埋め込みます。 {{hostname}} この下のホスト名フォーマットに従った書式のホスト名を埋め込みます。 {{numFiles}} コミットで変更されたファイル数を埋め込みます。
{{date}} placeholder format Specify custom date format. E.g. "YYYY-MM-DD HH:mm:ss"
日付の書式をデフォルトから変更したいときに指定します。
{{hostname}} placeholder replacement Specify custom hostname for every device.
コミットメッセージにホスト名を埋め込む場合、ホスト名を指定します。
Preview commit message
訳注)Previewボタンを押すと、右上にコミットメッセージのサンプルが表示されます。
List filenames affected by commit in the commit body
コミット時のファイル名の一覧をリストアップします。
Specify custom commit message on auto backup You will get a pop up to specify your message
自動バックアップ時のコミットメッセージをカスタムで指定します。
メッセージを指定するためのポップアップが表示されます。Current branch
Switch to a defferent branch.現在のブランチ。 別のブランチに切り替えることができます。
Pull updates on startup
Automatically pull updates when Obsidian starts.起動時に変更を Pull する。
Obsidianの起動時に自動的にアップデートを取得します。Disable push Do not push changes to the remote repository.
プッシュを無効にする。 リモートリポジトリに変更をプッシュしない場合にONにする。
Pull changes before push Commit → Pull → push (Only if pushing is enabled)
プッシュする前に変更をプルする コミット後、プルしてからプッシュする(プッシュが有効な場合のみ)
Automatically refresh Source Control View on file changes
On slower machines this may cause lags. If so, just disable this option.ファイル変更時にソースコントロールビューを自動的に更新する。 低速なマシンではラグが発生する可能性があります。その場合は、このオプションを無効にしてください。
Update submodules
"Create backup" and "pull" takes care of submodules. Missing features: Conflicted files, count of pulled/pushed/committed files. Tracking branch needs to be set for each submodule.サブモジュールの更新 "バックアップの作成 "と "プル "の処理は、サブモジュールが担当します。
不足している機能:ファイルの競合、プル/プッシュ/コミットされたファイルのカウント。 サブモジュールごとにトラッキングブランチを設定する必要があります。
訳注)具体的にどういう設定なのかわからないため、問題が無ければオフのままで良いと思います。Disable notifications
Disable notifications for git operations to minimize distraction. (refre to status bar for updates)通知機能を無効にする git の操作に気を取られることがないよう、通知を無効にします。(更新はステータスバーに反映されます) 訳注)処理されるごとに右上に出る通知メッセージが鬱陶しい場合は、オンにします。
Show status bar
Obsidian must be restarted for the changes to take affect.ステータスバーを表示する 変更を反映させるには、Obsidianを再起動する必要があります。
Custom Git binary path
訳注)通常はパスが通った場所にあるため設定不要ですが、設定が必要な場合はここにgitのパスを指定します。
Obsidian gitプラグインの利用手順
ローカルのVaultにGithubのリモートリポジトリを登録し、Obsidian gitプラグインでGithubへVaultの内容を保存するまでの手順を記載します。
1. 前提
ここでは、以下を前提としています。
なお、まっさらな新規Vaultを作るところからで良い場合は、Githubに適当なリポジトリを作成し、ローカルにcloneしてくるやり方が一番簡単です。
2. Valutをローカルリポジトリにする
ObsidianのVaultにしているディレクトリで、git bashなどを使用して、以下コマンドを実行します。
$ git init
既にVaultにファイルがある場合は、以下を実行してコミットします。
(git commitのメッセージは例です、好きな内容に変更してください)
$ git add -A $ git commit -M 'first commit.'
ここまでの手順で、ローカルのValutがgitリポジトリとなり、ファイルがあれば登録された状態になります。
3. githubにリモートリポジトリを作成する
続いて、githubにローカルのVaultを保存するためのリポジトリを作成します。
githubの自分のページでRepositoriesタブを開き、「NEW」ボタンをクリック。
リポジトリ名を指定して作成します。
Publicだと誰からも見られてしまうため、Privateにしてください。
4. ローカルリポジトリにgithubのリモートリポジトリを追加する
Githubにリポジトリが作成されると、以下にようにクイックセットアップページが表示されます。
基本的にはここに書かれている通りにコマンドを実行していきます。
コマンドは、完全に新規であれば一番上の「...or create a new repository on the command line」のものになりますが、今回は既にあるリポジトリからプッシュしたいので、真ん中の「...or push an existing repository from the command line」の手順を実行します。
なお、このコマンドはリポジトリ名に応じて自動的に生成されるものなので、実際は作成したリポジトリで表示されたコマンドを使用してください。
また、ローカルのリポジトリ名(ディレクトリ名)とリモートのリポジトリ名は一致している必要はありません。
ここまでの操作で、ローカルのgitリポジトリにgithubのリモートリポジトリが登録され、相互に通信ができる状態になります。
あとは、自動的にGithubにValutの内容がバックアップされるように、Obsidian gitプラグインの設定を行います。
5. Obsidian gitプラグインを設定する
各設定値については先の和訳を参照頂くとして、参考として私の設定している内容を記載しておきます。(ほとんど設定を変更していません)
設定項目 | 値 |
---|---|
Vault backup interval (minutes) | 10 |
If turned on, do auto backup every X minutes after last change. ... | オン |
上記以外 | 初期値のまま |
右上の表示が鬱陶しくなったら、「Disable notifications」をオンにするかもしれません。
モバイルアプリとの共存について
PCだけでObsidianを利用する場合は、各端末でそれぞれリモートリポジトリをcloneして同じ設定をしていけば、Github経由でVaultが同期できます。
しかし、モバイルアプリも併用すると、問題が発生します。
モバイルアプリではObsidian gitプラグインが(この記事を執筆している4/14時点では)利用できないため、Vaultの同期は別のクラウドストレージを利用して行うしかありません。
この場合、GithubはあくまでPCからのバックアップ、という目的で利用することになります。
例えば、私の場合は以下のような構成で運用しています。
一見して無駄に思えるかも知れませんが、Githubはブラウザからアクセスしてデータを検索・参照できますし、過去の更新履歴も保存されますので、バックアップ目的としても充分有用です。
ObsidianのVaultは個人的なデータを蓄積していく大事なものですので、Githubという信頼性の高いシステムにバックアップできるのは非常に安心材料なのではないかと考えます。
さいごに
Obsidian gitプラグインは比較的開発が活発なので、この記事も都度アップデートできればと思います。
(この記事を書いた時点で、既に1.25.0が公開されている)
【MSX】AndroidでMSXクロス開発環境を構築する(3)
今回は、ubuntuにz88dkとcode-serverをインストールし、Z80アセンブラの開発を行えるようにします。
最後に簡単なサンプルプログラムを作り、動作確認を行います。
これまでの作業については、以下の記事を参照してください。
z88dkのインストール・設定
z88dkをソースからビルドします。
手順は以下のサイトに詳しく書いてありますが、一応記載しておきます。
まず、適当なディレクトリで以下を実行してソースを取得します。
ここではホームディレクトリで実行する前提で進めます。
git clone --recursive https://github.com/z88dk/z88dk.git
依存関係のあるライブラリをインストール。
sudo apt install build-essential dos2unix libboost-all-dev texinfo texi2html libxml2-dev subversion bison flex zlib1g-dev m4 libtemplate-perl libtemplate-plugin-yaml-perl libfile-slurp-perl ragel re2c
恐らく上記で依存関係にある上位のパッケージが無くてもインストールされると思いますが、ビルド時にエラーになった場合は不足しているパッケージを追加でインストールしてください。
以下コマンドを順次実行してビルド。
cd z88dk export BUILD_SDCC=1 chmod 777 build.sh ./build.sh
現在はシステムインストールは完全にサポートされていないため、ビルド後の z88dk\bin
に直接パスを通すことで使用します。
~/.bashrc
の最後に以下を追加します。
export Z88DK_HOME=~/z88dk export PATH=${PATH}:${Z88DK_HOME}/bin export ZCCCFG=${Z88DK_HOME}/lib/config
最初にホームディレクトリ以外でソースの取得を行った場合は、
Z88DK_HOME
のディレクトリを適切なパスに置き換えてください。
追加後、以下を実行して設定を反映させます。
source ~/.bashrc
以下でコマンドにパスが通っていることを確認できます。
zcc
code-serverのインストール・設定
Termuxのubuntu環境では、code-serverを起動し、ブラウザからVS Codeを使用します。
code-serverのインストール手順は以下サイトに書かれています。
具体的には、インストールスクリプトが用意されているので、それを実行するだけです。
スクリプトを取得するためにcurl
をインストールします。
sudo apt install curl
その後、ホームディレクトリでインストールスクリプトを取得して実行します。
curl -fsSL https://code-server.dev/install.sh | sh
インストール完了後、デフォルトではパスワード入力を要求される設定になっています。
ここでは、ローカルから自分のみアクセスする想定ですので、パスワードを無効にします。
sed -i.bak 's/auth: password/auth: none/' ~/.config/code-server/config.yaml
code-serverを起動します。
code-server &
起動までしばらく時間がかかります。
以下のようなメッセージがコンソールに表示されたら、起動完了です。
[2022-03-16T16:44:13.482Z] info HTTP server listening on http://127.0.0.1:8080/ [2022-03-16T16:44:13.482Z] info - Authentication is disabled [2022-03-16T16:44:13.483Z] info - Not serving HTTPS
ブラウザアプリを起動し、以下のURLにアクセスします。
http://127.0.0.1:8080
画面が表示されたら、必要な拡張機能を入れて準備完了です。
具体的な方法は、一般的なVSCodeの使用方法と同じですので、ここでは割愛します。
日本語化するのと、Z80アセンブラの開発を行うため、以下の拡張機能を入れることを推奨します。
- Japanese Language Pack fot Visual Studio Code
- ASM Code Lens
- Z80 Macro-Assembler
テストプログラムの作成
適当なディレクトリを作り、 hello.asm
のファイル名で新規ファイルを作り、以下のコードを貼り付けます。
SECTION code_user PUBLIC _main _main: CHGMOD: EQU $005F ; BIOS スクリーンモード変更 WRTVRM: EQU $004D ; BIOS WRTVRM LINL32: EQU $F3AF ; WIDTH値 LD A,1 ; Aレジスタにスクリーンモードの値を設定 CALL CHGMOD ; BIOS スクリーンモード変更 LD A,32 ; AレジスタにWIDTHの値を設定 LD (LINL32),A ; Aレジスタの値をワークエリアに格納 LD HL,$1800 ; 表示開始アドレス LD DE,TEXT ; 表示データアドレス PRTSTR: LD A,(DE) ; AレジスタにDEレジスタの示すアドレスのデータを取得 OR A ; 0かどうか JR Z,PRTSTR_END ; 0の場合はPRTSTR_ENDへ CALL WRTVRM ; BIOS WRTVRM呼び出し ; - HL : 書き込み先のVRAMアドレス ; - A : 書き込むデータ INC HL ; HL=HL+1 INC DE ; DE=DE+1 JR PRTSTR PRTSTR_END: JR PRTSTR_END ; 無限ループ SECTION rodata_user TEXT: DB "HELLO MSX !",0
コンソールで以下コマンドを実行して、コンパイルします。
zcc +msx -create-app -subtype=rom hello.asm
以下のメッセージが表示され、ソースのディレクトリにa.rom
が出来ていれば、コンパイル成功です。
Program requires cartridge with 1 16k ROM banks Notice: Available RAM space is 16173 bytes ignoring the stack Adding main bank 0x00 (16206 bytes free)
作成した.rom
ファイルを、他のアプリから参照できるように、端末のストレージへコピーします。
内部ストレージは直接アクセスできないアプリがあるため、SDカードにコピーします。
コピー先のディレクトリを調べるには、以下のようにします。
cd /storage ls -al
合計 0 drwxr-xr-x 5 root root 100 3月 19 19:32 . drwxr-xr-x 22 hitoshi hitoshi 4096 3月 19 21:07 .. drwxr-xr-x 3 root aid_everybody 131072 3月 19 19:32 129B-6156 drwx--x--x 4 root aid_everybody 4096 8月 13 2019 emulated drwxr-x--x 2 root root 60 3月 19 19:32 self hitoshi@localhost:/storage$
このうち、emulated
は内部ストレージ、129B-6156
のような名前のディレクトリ(環境によって異なる)がSDカードになります。
129B-6156
の部分は自分の環境に合わせて読み替えてください。
cp <ソースを作成したディレクトリ>\a.rom \storage\129B-6156\Android\data\com.termux\files
動作確認は色々な手段がありますが、今回は webmsx
を使用します。
ブラウザから以下サイトにアクセスします。
WebMSX
画面左下の電源ボタンをクリックし、Open File
を選択、ファイル選択ダイアログから先ほどのディレクトリのa.rom
を選択します。
画面に文字が表示されれば成功です。
RAMが4Gの場合は、ブラウザによってはメモリ不足のエラーが出ることがあります。 その場合は、OpenMSXなどのエミュレータアプリをインストールして実行してください。
さいごに
ここまでの作業で、Android上にz88dkとVSCode(code-server)を使ったMSXクロス開発環境ができました。
z88dkを使っていますのでC言語での開発もできますし、SDCC互換ライブラリも導入していますので、SDCCで開発したものでも簡単に移行できると思います。
なお、以下URLに便利なテンプレートプロジェクトやcmakeでのビルドなどが記載されていますので、参考にすると良いでしょう。
ではでは。
【MSX】AndroidでMSXクロス開発環境を構築する(2)
今回は、ubuntuにgit環境を構築し、GitHubとSSH通信するまでの設定を行います。
一般的な内容になりますので、詳細は色々と検索すると出てくるかと思います。
Android上にubuntu環境を構築するまでの手順については、前回の記事を参照願います。
ubuntuへのgitインストール・設定
(1) インストール
以下コマンドを実行して、gitをインストールします。
sudo apt update sudo apt install git
よく
apt
ではなくapt-get
でインストールする、という手順が書かれていますが、結論からするとどちらでも良いです。
apt-get
はAPTの最初のコマンドラインベースフロントエンドで、その設計上のミスを克服したものがapt
になります。
ubuntuの14.04以降からapt
コマンドが推奨されています。
gitのインストール結果を確認します。
git --version
(2) 設定
初期設定として、まず、以下を設定します。
これらは、コミット履歴などで他ユーザーから見える情報です。
git config --global user.ename = '<ユーザー名>' git config --global user.email = '<メールアドレス>'
続いて、git push
する際にブランチ名/タグ名を指定しなかったときの挙動を設定します。
git config --global push.default 'simple'
ここで設定する値と意味は以下になります。
- simple
- 現在のブランチをupstreamのブランチにpushする。ただしupstreamのブランチ名が現在のブランチ名と違っている場合はpushしない。
- matching
- 同名のブランチをpushする。
- nothing
- refsが設定されてない場合はpushしない。
- current
- 現在のブランチを同名のリモートブランチにpushする。
- upstream
- 現在のブランチをupstreamのブランチにpushする。
これまでのデフォルトは
matching
でしたが、git 2.0以降からはsimple
になっているようです。
以前と同じ挙動にしたい場合は、matching
を指定してください。
最後に、これは任意ですが、git commit
などを行った際に使うツールの設定を行います。
VS CodeはWindowsでもLinux(ubuntu)でも使えるので、設定しておくと便利かと。
git config --global code.editor 'code --wait' git config --global merge.tool 'code --wait "$MERGED"'
設定値の確認は、以下で行います。
git config --global --list
GitHubとSSH通信する設定を行う
GitHubとSSH通信するための設定を行います。
SSH キーを使用すると、アクセスのたびにユーザ名と個人アクセストークンを入力することなく GitHub に接続できます。
手順の詳細については、以下の記事を参照願います。
なお、上記で記載した手順はWindows(Git bash)で実行するものですが、Linux(ubuntu)でも同じ手順になります。
以上で、Termux上のubuntuにgitの環境を構築しました。
次回はクロス開発環境であるz88dk
と、VS Codeをブラウザから使うためのCode-Server
のインストールを行います。
【MSX】AndroidでMSXクロス開発環境を構築する(1)
はじめに
今回から数回に分けて、Android端末にMSX開発環境を構築する手順を紹介します。
とは言え、AndroidにMSX開発用のアプリという都合のいいものはないので、AndroidにPCと同様の開発環境(※1)を構築することにします。
具体的には、gitでソースのバージョン管理、VSCodeでソースの編集、z88dkでZ80のCまたはアセンブラソースからromファイルを作成、WebMSXで実行という構成になります。
宜しければお試しください。
※1
ほぼ同様で、違いと言えば実行環境がPCほど選べない(アプリで提供されているMSXエミュレータかWebMSXが選択肢となる)のと、デバッグ環境が無いところだけが違いです。
とはいえ、このデバッグ環境がないのが、結構ツラいところですが・・・
全体の流れ
全体の流れは、以下になります。
- Android端末上にLinux(ubuntu)環境を構築する
- ubuntuにgitをインストール、GitHubとSSH通信する設定を行う
- ubuntuにz88dkをインストールする
- ubuntuにcode serverをインストールする
- テストプログラムをコンパイルし、MSXエミュレータ上で実行する
今回は、「1. Android端末上にLinux(ubuntu)環境を構築する」部分について記載します。
1.AndroidにLinux環境を構築する
(1) Termuxのインストール
まず、AndroidにLinux環境を構築します。
これにはroot権限不要でLinux環境を構築できる「Termux」というアプリを使用します。
詳細については以下リンク先を参照してください。
Termux wiki
なお、以前はPlayストアで配信されていましたが、現在はF-Droidで配信されているものを使用することになっています。(Android7.0以降に対応)
F-Froid / Termux
基本的には、apkをダウンロードしてインストールするだけです。
ここで、自分のAndroid端末へのapkのインストール方法が判らない場合は、この先に進むのは止めた方が良いと思います。
(2) Termuxの設定
ダウンロード後の最初の起動時に権限を求められるので、それぞれ許可してください。
その後、コマンドプロンプトが表示されます。
Termuxは基本的にシングルユーザーのため、rootで使用します。特にユーザーの追加などは不要です。
まず、TermuxからSDカードなどにアクセスできるよう、以下のコマンドを入力します。
pkg update && pkg install termux-setup-storage
この結果、ホームディレクトリに storage
ディレクトリが作成され、内部ストレージやSDカードにアクセスできるようになります。
以下は、pkg install後のディレクトリ内容を確認した例です。
~ $ ls -al total 24 drwx------ 4 u0_a245 u0_a245 4096 Mar 5 22:38 . drwxrwx--x 4 u0_a245 u0_a245 4096 Feb 20 19:06 .. -rw------- 1 u0_a245 u0_a245 302 Mar 5 22:25 .bash_history -rw------- 1 u0_a245 u0_a245 26 Feb 20 19:22 .bashrc drwx------ 2 u0_a245 u0_a245 4096 Feb 20 19:06 .termux drwx------ 2 u0_a245 u0_a245 4096 Feb 23 00:44 storage ~ $ cd storage/ ~/storage $ ls -al total 8 drwx------ 2 u0_a245 u0_a245 4096 Feb 23 00:44 . drwx------ 4 u0_a245 u0_a245 4096 Mar 5 22:38 .. lrwxrwxrwx 1 u0_a245 u0_a245 24 Feb 23 00:44 dcim -> /storage/emulated/0/DCIM lrwxrwxrwx 1 u0_a245 u0_a245 28 Feb 23 00:44 downloads -> /storage/emulated/0/Download lrwxrwxrwx 1 u0_a245 u0_a245 48 Feb 23 00:44 external-1 -> /storage/129B-6156/Android/data/com.termux/files lrwxrwxrwx 1 u0_a245 u0_a245 26 Feb 23 00:44 movies -> /storage/emulated/0/Movies lrwxrwxrwx 1 u0_a245 u0_a245 25 Feb 23 00:44 music -> /storage/emulated/0/Music lrwxrwxrwx 1 u0_a245 u0_a245 28 Feb 23 00:44 pictures -> /storage/emulated/0/Pictures lrwxrwxrwx 1 u0_a245 u0_a245 19 Feb 23 00:44 shared -> /storage/emulated/0 ~/storage $
(3) ubuntuのインストール
上記でインストールしたTermuxはDebianベースのLinux環境ですが、若干使い勝手が悪いため、ubuntu環境を使えるようにします。
PCでもubuntuを使っているという場合は、同じコマンドを使えるので、この方が便利だと思います。
もしDebianに慣れている場合は、以降はスキップしても問題ありません。
ます、コンソールで以下のコマンドを実行し、proot
とproot-distro
をインストールします。
pkg install proot proot-distro
その後、以下コマンドで、ubuntuをインストールします。
proot-distro install ubuntu
インストールが完了したら、以下コマンドで確認します。
proot-distro list
ubuntu
のstatus
がinstalled
になっていれば、インストールが成功して利用可能な状態となります。
インストール後は、以下のコマンドで、ubuntuを開始できます。
proot-distro login ubuntu
ログインできたことを確認したら、一度exit
としてubuntuから抜け、以下のコマンドを実行します。
echo 'proot-distro login ubuntu' >> ~/.bashrc
これで、次回からコマンドを実行しなくても、Termux起動後に自動的にubuntuにログインした状態になります。
(4) ubuntuの基本設定
ここまででインストールしたubuntuは、一般的にPCにインストールされるものと違い、必要最低限なものです。
GUI環境でもありませんし、日本語にも対応しておらず、wgetなどもインストールされていません。
また、シングルユーザー(root)の状態ですので、まずはubuntuの基本設定を進めていきます。
日本語ロケールへの変更
まずは日本語ロケールに変更します。
これは全ユーザーに適用されても問題ないので、root(デフォルトのユーザー)のままで行います。
pkg update && pkg upgrade -y apt install language-pack-ja -y locale -a
3つ目のコマンドの実行結果で、ja_JP.utf8
が表示されていればインストール完了です。
引き続き、以下のコマンドを実行し、システムの設定を変更します。
echo 'export LANG=ja_JP.UTF-8' >> ~/.bashrc echo 'export LANGUAGE="ja_JP:ja"' >> ~/.bashrc source ~/.bashrc
一般ユーザーの追加
現状ではrootでの作業となり危険ですので、一般ユーザーを追加します。
まず、sudo
がないため、以下コマンドを実行します。
apt update apt dist-upgrade apt install sudo
その後、ユーザーを追加し、sudo
グループに追加します。
adduser <ユーザー名> gpasswd -a <ユーザー名> sudo
最後に、シェル起動時のスクリプトにsu
するコマンドを追加し、実行します。
echo 'su <ユーザー名>' >> ~/.bashrc source ~/.bashrc
ここで、プロンプトが以下の表示になっていれば成功です。
<ユーザー名>@localhost:/root$
ただし、sudo
コマンドが使えない場合があります。(少なくとも私は使えなかった)
その場合は一度exit
してroot
に戻り、以下コマンドを実行して、設定ファイルを編集します。
一行目は初回のみ必要なものです。
apt install vim visudo
vim
の画面になるので、以下の行を追加します。
: root ALL=(ALL:ALL) ALL <ユーザー名> ALL=(ALL:ALL) ALL ←この行を追加 :
この後、su <ユーザー名>
とすると、sudo
が使えるようになっていると思います。
意味的にはrootと同じ権限をユーザーに与えるということなので、実際はユーザーを切り替える必要性はあまりありません。 しかし、一般的な情報にある手順は
sudo
コマンドを使うものですので、読み替えしなくても使えるというメリットはあります。
なお、su
した後のカレントディレクトリがroot
のホームディレクトリになっています。
これをユーザーのホームディレクトリに変更するには、一般ユーザーでログインした状態で以下のようにします。
echo 'cd ~' > ~/.bashrc source ~/.bashrc
以上で、Termuxにubuntuをインストールし、必要最低限の設定を行いました。
次回はgit
をインストールし、GitHubとSSH通信するための設定を行います。
【MSX】ubuntu20.04でopenMSX+debuggerの環境を構築する
WindowsにはblueMSXというデバッガ機能を内蔵した強力なエミュレータがあるが、Linux(ubuntu)には用意されていない。
そこで、openMSXに用意されているdebuggerを使って、デバッグ環境を構築してみる。
なお、openMSXはリポジトリからのインストールも可能だが、今回はgithubに公開されているソースからビルドする。
openMSXのインストール
githubからcloneする。
$ git clone https://github.com/openMSX/openMSX.git
configureする。
$ cd openMSX $ ./configure
すると以下の出力がされる。
Using Python: python3 Probing target system... Creating derived/x86_64-linux-opt/config/probed_defs.mk... Creating derived/x86_64-linux-opt/config/systemfuncs.hh... Found libraries: ALSA: version 1.2.2 GLEW: no libogg: no libpng: version 1.6.37 libtheora: no libvorbis: no OpenGL: version 4.6 SDL2: version 2.0.10 SDL2_ttf: no Tcl: version 8.6.10 zlib: version 1.2.11 Components overview: Emulation core: no GL renderer: no Laserdisc: no ALSA MIDI: yes Customisable options: Install to /opt/openMSX (you can edit these in build/custom.mk) Please install missing libraries and headers and rerun "configure". If the detected libraries differ from what you think is installed on this system, please check the log file: derived/x86_64-linux-opt/config/probe.log
このうち、Found Libraries
のところでno
と出ているのが不足しているライブラリになる。
追加でインストールする。
$ sudo apt install libglew-dev $ sudo apt install libogg-dev $ sudo apt install libtheora-dev $ sudo apt install libvorbis-dev $ sudo apt install libsdl2-ttf-dev
make、install。
$ sudo make $ sudo make install
起動する。
BIOSを適切に配置して設定すると実機と同様にBASICが使えるが、素の状態ではC-BIOSという互換BIOSが起動する。
$ openmsx &
debuggerのインストール
OpenMSX debuggerにはqt5が必要なのでインストールする。
$ sudo apt install qtbase5-dev qttools5-dev-tools qt5-default
githubからcloneする。
$ git clone https://github.com/openMSX/debugger.git
configureはないので、そのままmake。
$ cd debugger $ make
するとエラーが出る。
Compiling DebuggerForm.cpp... src/DebuggerForm.cpp: In member function ‘void DebuggerForm::createForm()’: src/DebuggerForm.cpp:624:45: error: ‘SkipEmptyParts’ is not a member of ‘Qt’ 624 | QStringList s = list.at(i).split(" ", Qt::SkipEmptyParts); | ^~~~~~~~~~~~~~ src/DebuggerForm.cpp: In member function ‘void DebuggerForm::setDebuggables(const QString&)’: src/DebuggerForm.cpp:1454:38: error: ‘SkipEmptyParts’ is not a member of ‘Qt’ 1454 | QStringList l = list.split(" ", Qt::SkipEmptyParts); | ^~~~~~~~~~~~~~ make: *** [build/main.mk:326: derived/obj/DebuggerForm.o] Error 1
表示されたとおり、Qt::SkipEmptyParts
がqt
にないよ、と言われている。
調べてみると現在のバージョンでは廃止になっているようで、代わりにQString::SplitBehavior::SkipEmptyParts
を使う模様。
エラーに出ているsrc/DebuggerForm/cpp
の624行目と1454行目の該当箇所を書き換えて、改めてmake。
2021/9/9 追記
z88dkの.mapを読んでdisassemblerウィンドウにラベルを表示するパッチを適用する。
以下からzipを取得して展開。
[openmsx-debugger で z88dk の -m 形式の .map symbol を読ませる hack (github.com)]
中にある0001-add-z88dk-symbol-read-hack.patch
をopenmsx-debugger
ディレクトリに配置し、以下コマンドを実行。
$ patch -p1 < 0001-add-z88dk-symbol-read-hack.patch
@h1romas4さん、ありがとうございました!
無事にコンパイルできたら、openmsxと同じ場所にコピーしておく。(make install
は用意されていない)
$ sudo cp -p derived/bin/openmsx-debugger /usr/local/bin
起動してみる。
$ openmsx & $ openmsx-debugger &
起動したデバッガーウィンドウのメニューから[System]-[Connect]を選ぶか、[Ctrl]+[C]を押す。 メモリやレジスタなどの情報が表示されれば、ひとまず成功。
補足
この記事の内容は、ubuntu20.04、及びWindows10+WSL2のubuntu20.04で実施済です。
また、記事執筆時点(2021/8/31)でのソース及びライブラリの状態での結果ですので、今後はエラーが解消していたり、新しいエラーが発生する可能性があります。
この記事を参考に作業される場合は、上記をご理解の上、行ってください。
【MSX】GALAXY ZONE
これまでのMSX-BASICの研究結果をもとに、ちょっとしたゲームを作ってみました。
以下のURLで遊べます。
webmsx.org
遊び方
しばらく待って、タイトルが出たらSPACE or Aボタンでスタート。
カーソルキー or コントローラの左右で移動、スペースキーで前進して、ミサイルを動かします。
アステロイドにぶつからないように、画面上部のマザーシップを破壊してください。
以下のいずれかの条件でミスになります。
- アステロイドに当たった
- 燃料がなくなった
- マザーシップに当てられなかった
3回ミスするとゲームオーバーです。
ソースなど
githubでもソースとディスクイメージを公開しています。
詳細については、こちらを参照してください。
github.com
ではでは。
【MSX】MSX-BASICの研究(2) PRINTとVPOKEの性能比較
- この記事について
- テスト方法
- 1文字表示編
- 比較結果
- 2×2キャラクタ表示編
- パターン4:PRINT(セミコロンなし)
- パターン5:PRINT(セミコロンあり)
- パターン6:VPOKE
- 比較結果
- 余談
- 関連記事
この記事について
MSXでキャラクタを画面表示する際には、PRINT
を使うよりはVPOKE
を使う方が速いのだが、ではどれくらい速度差があるのだろうか?
具体的に数値として知らなかったので、調べてみました。
テスト方法
今回のテスト方法は、以下の方針としています。
- WebMSXで実施。
- 一般的に使用される、SCREEN 1、WIDTH 32、DEFINT A-Zで初期化した状態で実行する。
- 文字表示を1,000回繰り返し、経過時間を測る。(
TIME
を使用)
1文字表示編
パターン1:PRINT(セミコロンなし)
プログラムリスト
10 SCREEN 1:WIDTH 32:DEFINT A-Z 20 TI=TIME 30 FOR I=0 TO 999:LOCATE 0,0:PRINT "A":NEXT 40 LOCATE 0,5:PRINT "TIME="; TIME-TI
結果
パターン2:PRINT(セミコロンあり)
プログラムリスト
10 SCREEN 1:WIDTH 32:DEFINT A-Z 20 TI=TIME 30 FOR I=0 TO 999:LOCATE 0,0:PRINT "A";:NEXT 40 LOCATE 0,5:PRINT "TIME="; TIME-TI
結果
パターン3:VPOKE
プログラムリスト
10 SCREEN 1:WIDTH 32:DEFINT A-Z 20 TI=TIME 30 FOR I=0 TO 999:VPOKE &H1800,&H41:NEXT 40 LOCATE 0,5:PRINT "TIME="; TIME-TI
結果
比較結果
パターン | 概要 | 処理時間 |
---|---|---|
1 | PRINT(セミコロンなし) | 355 |
2 | PRINT(セミコロンあり) | 305 |
3 | VPOKE | 116 |
VPOKE
がPRINT
の2倍以上速いという結果になりました。
また、PRINT
も、セミコロンをつけることで若干高速化されています。
2×2キャラクタ表示編
パターン4:PRINT(セミコロンなし)
プログラムリスト
10 SCREEN 1:WIDTH 32:DEFINT A-Z 20 TI=TIME 30 FOR I=0 TO 999:LOCATE 0,0:PRINT "マイ":LOCATE 0,1:PRINT "コン":NEXT 40 LOCATE 0,5:PRINT "TIME="; TIME-TI
結果
パターン5:PRINT(セミコロンあり)
プログラムリスト
10 SCREEN 1:WIDTH 32:DEFINT A-Z 20 TI=TIME 30 FOR I=0 TO 999:LOCATE 0,0:PRINT "マイ";:LOCATE 0,1:PRINT "コン";:NEXT 40 LOCATE 0,5:PRINT "TIME="; TIME-TI
結果
パターン6:VPOKE
プログラムリスト
10 SCREEN 1:WIDTH 32:DEFINT A-Z 20 TI=TIME 30 FOR I=0 TO 999:VPOKE&H1800,&HCF:VPOKE&H1801,&HB2:VPOKE&H1820,&HBA:VPOKE&H1821,&HDD:NEXT 40 LOCATE 0,5:PRINT "TIME="; TIME-TI
結果
比較結果
パターン | 概要 | 処理時間 |
---|---|---|
4 | PRINT(セミコロンなし) | 733 |
5 | PRINT(セミコロンあり) | 633 |
6 | VPOKE | 362 |
1文字表示の時と比べての処理時間は、PRINT
は約2倍強ですが、VPOKE
は約3倍強ほどになっています。
これは、プログラムリストの通り、キャラクタの数だけVPOKE
する(=4回実行する)必要があるためですが、それを差し引いても、PRINT
よりは速いですね。
通常、ゲームで表示するパターンは2×2キャラクタ(16×16ドット)が多いと思われるため、なるべくVPOKE
を使うことで高速化が見込めると思います。
余談
なお、VPOKE
する値を10進数で書いて計測もしてみたのでが、16進数の時とほとんど変わりませんでした。
MSXのBASICプログラムでは、16進数、10進数のどちらで書いても良いと思います。
※2021/8/11追記: エスケープシーケンスで、1回のPRINT文で2×2キャラクタを表示した場合の処理速度を計測してみました。
パターン7:PRINT(エスケープシーケンス使用)
プログラムリスト
10 SCREEN 1:WIDTH 32 20 TI=TIME 30 FOR I=0 TO 999:LOCATE 0,0:PRINT "マイ"+CHR$(29)+CHR$(29)+CHR$(31)+"コン";:NEXT 40 LOCATE 0,5:PRINT "TIME="; TIME-TI
CHR$(29)がカーソル左移動、CHR$(31)がカーソル下移動になります。
処理結果
結果、961とPRINT2回より遅いという結果になりました。
MZとかだと速かった気がしたんですけど、MSXだと結構遅かったのですね…。