概要
ファミコンプログラミングを始めたいと思ったけど、Macのターミナルの知識がほぼなく、ネットにある情報はWindowsのものばかりで苦戦しまい、結局どれが有効な手段だったのかよくわからなかったので時系列順に書いていきます。結果として、cc65コンパイラのコマンド(cc65, cl65, ld65など)をMacのターミナル上で動かせるようになりました。ちなみに、環境は以下のような感じです。
- macOS Sonoma 14.1.1
- cc64 v2.19
Qiitaの記事を書くのが初めてで、Gitやターミナルの知識も十分にないままこの記事を書いているので不適切な記述や言葉の使用があるかもしれませんが、ご了承ください。(有識者の方、コメントで優しく補足・訂正してくださると嬉しいです!)
さっさとやり方だけ知りたい方は結論、およびCommand Line ToolsのインストールとPATHを通してコンパイラのコマンドを有効化するの章をご覧ください。
Command Line Toolsのインストール
まず、NES研究所さんのサンプルのHello World!をコンパイルできるようにしたいと思いました。ここでぶち当たった壁は、まずcc65コンパイラをインストールできないというところ。公式サイトのGNU/Linuxの欄にある、
git clone https://github.com/cc65/cc65.git
というコマンドが実行できませんでした。原因は、Gitが使えないことでした。ここは、ターミナルのCommand Line Toolsをインストールしてから、公式サイトで書いてあるようにGitでクローンし、それからインストールされたディレクトリに移動し(cd cc65
)、make
コマンドを実行することで、正しくファイルを揃えることができました。
コンパイラの有効化
今度こそできると思い、ターミナルでmakeコマンドを打ってmakefileを実行しようとすると、
command not found
と出てしまいました。ここでの問題は、makefileに書かれたcl65
とld65
というコマンドが見つからないことが原因でした。これを解決するために、いくつかの方法を試しました。
Visual Studio Codeの拡張機能の利用
最初は、よくわからなかったのでとりあえず見つけたcc65用のVSCodeの拡張機能を入れました。結果として、これは意味がありませんでした。これはWindowsを想定して作られた拡張機能のため、いろいろなディレクトリが有効なものではありませんでした。また、PowerShellが開けないため動きませんでした。
HomebrewをインストールしてGNUコマンドを使えるようにする
これは、結局はやっていないので意味があったかどうかはわかりません。Linux向けのインストール手順を踏んだからできないのかと思い、GNUコマンドが使えるようにしようと思いました。しかし、それをする前に他のやり方を見つけたことと、Homebrewをインストールするのに難航してしまったのが原因です。私は家族共用のPCでやろうとしたため、Homebrewをホームディレクトリにインストールしようとしたため、まあまあな時間がかかりました。結局以下のサイトを参考にしてできましたが、結活用はしませんでした。
参考までに、私は試していませんが、Homebrew側からでもcc65をインストールできそうな感じだったので、公式サイトにあるようにGitを使わずに、こっちを使ってもいいかもしれません。ただ、その際にもcc65がインストールされているディレクトリに移動し、make
コマンドを使って必要なファイルを揃える必要があるかもしれません。
PATHを通してコンパイラのコマンドを有効化する
これをやったら成功しました。ターミナルでwhich cc65
と実行しcc65がちゃんとあるのか、どこにあるのかを調べたところ、まず全くターミナル側に認識されていなかったようでした。調べてみたところ、環境変数であるPATHを通さないときちんと認識してくれないようでした。
https://qiita.com/HORIZONium/items/b608f46c900ce527dbc9
上の記事を参考にし、パスを通したところ、きちんと認識してくれるようになりました。まず、Gitからクローンしたcc65のフォルダの構成はこのようになっているかと思います。
cc65
├─ ...
|
├─ bin
│ ├─ ar65
│ ├─ ...
│ └─ sp65
|
└─ ...
ここで、bin
に入っているar65
などのファイルがUNIX実行ファイルであり、これらをUNIXコマンドとして認識してもらいターミナルで実行できるようにする必要があります。上の記事や他の記事を参考に、
export PATH= ... /cc65/bin:$PATH
(...は省略)
のように書くことで、ターミナルに認識させ、コンパイルが実行できるようになりました。しかし、コンパイルできるようになったはいいものの、ターミナルを再起動すると、さっき通したパスがまた無効になってしまいました。そこで、調べてみると、bash_profileというところに書き込まないといけないことがわかりました。
しかし、書き込んでも反映されません。調べてみると、別の記事を見つけました。
どうやら、シェルの種類にはbashとzshと(他にもあるかも)があるみたいで、私の場合zshであったためbash_profileではなくzprofileに書き込まないといけないようでした。ターミナルでのいじり方がよくわからなかったので、VSCodeでzprofileのファイルを直接編集し、上のexportコマンドを書き込みましたが、問題なく読み込んでくれました。ちなみに、bash_profileおよびzprofileは最初はないようで、
touch .bash_profile
または
touch .zprofile
とすることで作成できるみたいです。
今回は付け焼き刃で動かしてしまい、ここら辺のシェルの話は結構込み入っているようなので、また改めて勉強できればと思います。
パスを繋げたことによって、コンパイラは正しく動作するようになりました。途中から、動作確認は公式サイトにあるのを参考に、cc65のサンプルフォルダ内にあったtutorialのコンパイルを試すことで行っていました。
しかし、tutorialのコンパイルができることを確認したのはいいものの、NES研究所さんのサンプルをmakefileでコンパイルしようとしたところ、問題が発生しました。attribute expected
と出て、コンパイルができませんでした。しかしこれは既知の問題であったようで、配布されていたmakefileに問題があったものを改良したプロジェクトフォルダが配布されていたのでそちらのmakefileを実行したところうまくいきました。
結論
結局、Macでcc65を使えるようにするには
という手順でできると思います。Homebrewは正直必要かどうかは分かりません。また、Homebrewを用いてインストールした場合はGitクローンとパスを繋げる作業は省略できることになります。
これで一応コンパイラが使えるようにはなりましたが、実際のソフト制作で動かして見たわけではないのでここからどんな不測の事態か起こるか分かりません。また何かわかったことがあれば追記していきます。参考にした記事の投稿者の方々、ありがとうございました!また、この記事が誰かの開発の一助となれば幸いです。