Mac OS X Lion(Intel Core i5)環境でのアセンブリ言語開発
ふと思い立って、大してコンピュータの知識も持っていないくせにアセンブリ言語が書きたくなった。
それで調べてみたものの、出てくるのはWindows環境やLinux環境のものばかり。
人に聞いてヒントを貰って、頑張って苦手な英語のページを読んで、ようやく警告が1つ出たものの、Hello Worldプログラムを実行することができた。
以下その手順。
1. NASMのインストール
どうやらMac OS X環境ではNASMというアセンブラを使うのが楽らしいのだが、実はMac OS Xに標準でインストールされているNASMは非常に古いバージョンのもので、使いものにならない(NASMのバージョンを確認するにはターミナルで「$ nasm -v」と打てばいい)。
そこで、NASMのWebページの「Latest version」から最新版のNASM(nasm-O.O.O.tar.bz2)をダウンロード・解凍し、インストールする。(現在の最新版は2.10.01)
インストールにはターミナルを立ち上げ、解凍してできたディレクトリ「nasm-O.O.O」のあるディレクトリに移動し、以下のコマンドを実行すればいい。
$ ./configure
$ make
$ sudo make install
$ nasm -v
と打って、ダウンロードしたバージョンになっていれば、成功。
なってなかったら、知らない。
2. helloWorld.asm ファイルを作成
なにか適当にアセンブリファイルを作ればいいのだが、これがまた厄介で、「mov」とかのよく見かけるアセンブリコード以外にOSとやり取りするためのコードも書いてやらないといけないらしい。
結局今回はここのサイトの「Armed with this information, here’s the final x86_64 Mach-o “Hello World”」と書かれているところの下のコードをコピーして、テキストエディタmiに貼り付けて「helloWorld.asm」という名前で保存した。
3. NASMでアセンブル
ここまで来たら、後はアセンブルするだけ。ターミナルを開いて先ほど作成した「helloWorld.asm」のあるディレクトリに移動し、以下のコマンドを実行する。
$ nasm -f macho64 helloWorld.asm
何も出なければ成功。
「-f macho64」は64ビットMac OS Xのオブジェクトファイルとして生成することを表すオプションで、1. のバージョン更新ができていないと、「unrecognised output format 'macho64'」とか言われる。
成功したら次に、以下のコマンドを実行する。
$ ld helloWorld.o
これでリンクが上手く処理できれば何も出ず、
$ ./a.out
とすることで晴れてプログラムが実行され
と表示されるはずなのだが、
今回の環境ではld実行時に
ld: warning: -macosx_version_min not specificed, assuming 10.7
と表示されてしまった。
まあ実行できたから、いいか。
以上、全然理解していないので、この操作がほんとうに正しいかはさておき、とりあえずMac OS X環境でNASMを使ってアセンブリ言語プログラミングを行う方法でした。
<参考サイト>
・NASMインストール方法 - Compiling and Installing NASM on Mac OS X | Neural Advance
・アセンブル方法 - Mac OS X 64 bit Assembly Hello World | TheXploit | Security Blog
・NASMでのアセンブル時のフォーマットについて - osx - Can't link assembly file in Mac OS X using ld - Stack Overflow
Java JScrollPaneで自動的に一番下まで移動する
地味にハマったので、メモ。
やりたかったのはただ、JScrollPaneを設定したJListにJTextFieldに入力した文字をJButtonを押して追加することなのですが、このときに要素数がJListの幅を超えてスクロールが必要になる状態までいくと、新しくJListModel.addした要素が、自分でスクロールしないと見られないという問題が発生。
本来ならばJButtonのActionListener内で
JScrollBar scrollBar = scrollPane.getVerticalScrollBar();
scrollBar.setValue(scrollBar.getMaximum());
とでもすれば勝手に下までスクロールしてくれそうなものですが、これがうまく行かなかった。
結局、どうすればいいかというと、
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JScrollBar scrollBar = scrollPane.getVerticalScrollBar();
scrollBar.setValue(scrollBar.getMaximum());
}
});
とする必要があった。
つまり、そのまま書くだけではなぜか、JListModel.addより先にJScrollBar.setValueが呼び出されてしまうのです。
へえ。
<参考サイト>
・JScrollBar problems( http://objectmix.com/java/73776-jscrollbar-problems.html )
Mac OS X LionでのAtmel AVR開発環境構築
使用OS: Mac OS X Lion(10.7.4)
使用ソフト: CrossPack for AVR
使用マイコン: ATmega168P
相当苦労したので、とりあえず手順だけ書いておきます。
①Xcodeをインストール
②Command Line Tools for Xcodeをインストール
③CrossPack for AVRをインストール
④MacPortsをインストール
⑤FTDI VCP Driver FTDIUSBSerialDriverをインストール
⑥以下のコマンドを実行
$ sudo port selfupdate
$ sudo port install avrdude +serjtag
これで環境構築はできるはず。
自分の場合は武藤佳恭さんの「インターネットガジェット入門」のUSBライタを組み立て、以下のコマンドを実行することで無事Cプログラムを書き込むことができました。
$ sudo kextunload /System/Library/Extensions/FTDIUSBSerialDriver.kext/
$ avrdude -c duemilanove -p m168p -P ft0 -B 4800 -U flash:w:(ファイル名).hex
kextunloadは保存されないので、プログラムの書き込み前には毎回実行する必要があります。
Mac OSでのスタイルファイル(.sty)のインストール
使用OS: Mac OS X Lion(10.7.4)
使用ソフトウェア: TeXShop ver. 3.10
基本的にインターネット上の日本語での解説の少ないLionでのLaTeX環境構築は奥村晴彦さんの「LaTeX2ε美文書作成入門」を購入すればなんの問題もなくできそうなのですが(書店で立ち読みしただけなので定かではない)、本を買うお金すら無い学生にとってはなるべくインターネット上の無料リソースで全てを済ませたいものです。
というわけで今回はLionでLaTeXのスタイルファイルを使う時の話。
自分で拾ってきたスタイルファイルはちゃんとLaTeXのシステムに教えてあげないと、
\usepackage{○○.sty}
とするだけでは
! LaTeX Error: File '○○.sty' not found.
となって、いちいちファイルの場所を指定しないといけなくなります。
そこで、その教えてあげる方法。
ターミナルを開き、ダウンロードしたスタイルファイルのあるディレクトリに移動して、以下のコマンドを実行します(スペースの位置に気をつけて下さい)。
$ sudo mkdir -p -v /usr/local/texlive/texmf-local/tex/latex/○○
$ sudo mv ○○.sty /usr/local/texlive/texmf-local/tex/latex/○○
$ sudo mktexlsr
各コマンドの意味は以下のとおりです。
sudo
:super user doの略で、管理者権限での操作をすることを表します。そのため、上記コマンドを入力すると
Password:
と表示され、Lionで設定したパスワードを求められます(パスワードは入力しても表示されないので注意)。
mkdir
:make directoryの略で、新規ディレクトリを作成するコマンドです。
-p
:mkdirのオプションです。作成するディレクトリの親ディレクトリがない場合に、そのディレクトリも作成します。
-v
:mkdirのオプションです。mkdirによって作成されたディレクトリ1つ1つに対して、作成されたことを表すメッセージを表示します。
mv
:moveの略で、ファイルを移動するコマンドです。
mktexlsr
:LaTeXシステムはtexmfやtexmf-localなどのディレクトリ下のファイル検索を高速化するため、それぞれのディレクトリにあるls-Rファイルにその情報をリスト化し、保存しています。mktexlsrはそのままmake TeX ls-Rと読めるように、このリストを更新するためのコマンドです。
/usr/local/texlive/texmf-local/tex/latex/○○
:作成するディレクトリや移動先のディレクトリの場所と名前です。「○○」にはスタイルファイル○○.styのな前を入力します。この場所は環境によって異なる場合がありますので、mkdirコマンド実行後、あまりにも多くのディレクトリが作成されている場合にはtexmf-localの場所を見なおしてみてください。
以上ですが、実はこれ以外にも方法はあるようです。
また、ls-Rについては、
http://0xcc.net/misc/mktexlsr.html
にあるような意見も見られました。情報の信頼性は、ご自身の判断でお願いします。
以下参考サイト
・mkdirとrmdirの -p --parents オプション - http://sonic64.com/2004-12-13.html (mkdirのオプションの説明)
・Re: installing new packages under mactex and texshop - http://newsgroups.derkeiler.com/Archive/Comp/comp.text.tex/2008-05/msg00295.html(スタイルファイル登録のためのコマンド)
このブログについて
今まで行き当たりばったりにPCの環境設定等を行なってきたために、過去にやった設定を思い出すことなど到底できず、せっかく頑張って調べた方法もどこへやら。
メインPCを買い変えるとまた、いちから調べ直すことになってしまった。
どうにも面倒に感じていたのでそれを書き残すことは今までして来なかったのだが、もうさすがに限界である。
まだまだコンピューティングのひよっことも言えない程度の技術しか無いものの、だからこそ自分が苦労して見つけた(本当ならば苦労しなくていいのかもしれないが)方法を、ここに書き残しておこうと思う。
内容は主にMac OS X Lionでの様々なソフトウェアの環境設定の方法である。
おそらくその道の専門家からすればてんで的はずれなことをしている記録かも知れないが、そういった点を指摘してもらえるのではないかと淡い期待も抱きつつ、記録していこうと思う。