changeset 15:6c558cd2ac8b

*** empty log message ***
author gongo
date Sat, 29 Mar 2008 09:33:55 +0900
parents 091d888f7729
children c66181a100e3
files Makefile cell.tex cerium-manager.tex cerium-rendering.tex cerium-scene_graph.tex cerium_dev.tex compare.tex conclusion.tex figure/sync.bb figure/sync.graffle figure/sync.pdf introduction.tex ipsjsort.bst ipsjunsrt.bst osmesa.tex sigos.bib sigos.tex sigos2008.pdf
diffstat 18 files changed, 2654 insertions(+), 78 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Thu Mar 27 02:24:48 2008 +0900
+++ b/Makefile	Sat Mar 29 09:33:55 2008 +0900
@@ -19,6 +19,8 @@
 dvi:
 	@echo "----------- make dvi file ($(TARGET).dvi) ----------"
 	$(LATEX) $(TARGET)
+	$(BIBTEX) $(TARGET)
+	$(LATEX) $(TARGET)
 	$(LATEX) $(TARGET)
 pdf: dvi
 	$(DVIPDFM) $(DVIPDFMOPT) $(TARGET)
--- a/cell.tex	Thu Mar 27 02:24:48 2008 +0900
+++ b/cell.tex	Sat Mar 29 09:33:55 2008 +0900
@@ -35,7 +35,7 @@
 
 
 \subsection{SPURS}
-ここでは、現在発表されている Cell の開発環境である SPURS について説明する。
+ここでは、現在発表されている Cell の開発環境である SPURS \cite{spurs} について説明する。
 
 SPURS は、閉じた並列分散と考えることができる Cell の環境で、
 いかに効率よく動作させるかということを考えたシステムである (\figref{fig-spurs-pipeline}) (\figref{fig-spurs-task}) 。
--- a/cerium-manager.tex	Thu Mar 27 02:24:48 2008 +0900
+++ b/cerium-manager.tex	Sat Mar 29 09:33:55 2008 +0900
@@ -228,12 +228,31 @@
 
 
 \subsubsection{PPE と SPE 間の同期}
-\ref{sec:task} で述べたように、PPE から SPE へはタスクの実行命令を、
-SPE から PPE へはタスクの終了などを伝える必要がある。
-その際、待ち合わせを行うと処理が止まってしまい、並列度が下がってしまう。
+Cerium では、以下の二種類のスレッドを扱う。
+
+\begin{enumerate}
+\item SPE に対応した PPE 上の Thread \label{spe-thread}
+\item Mailbox を待つ Thread \label{mail-thread}
+\end{enumerate}
+
+スレッド (\ref{spe-thread}) では、各 SPE の起動と終了を見るだけである。
+スレッド (\ref{mail-thread}) では、Outbound Mailbox (SPE $\rightarrow$ PPE
+メッセージ) を見て、その内容に対応する処理を PPE 上で行う。
+対処した結果を Inbound Mailbox (PPE $\rightarrow$ SPE メッセージ) で伝え、
+受け取った SPE はタスクを再実行する (\figref{fig-sync}) 。
 
-Cell では、PPE と SPE 間のメッセージのやりとりには
-Mailbox という FIFO メッセージキューを用いることができる。
+\begin{figure}[tb]
+  \begin{center}
+    \includegraphics[scale=0.353]{figure/sync.pdf}
+    \caption{PPE, SPE threads}
+    \label{fig-sync}
+  \end{center}
+\end{figure}
+
+Mailbox とは SPE の MFC 内の FIFO キューであり、
+PPE と SPE 間の 32 ビットメッセージの交換に用いられる \cite{mailbox} 。
+通常、スレッド間で待ち合わせを行うと処理が止まってしまい、
+並列度が下がってしまうことがあるが、Mailbox は
 メッセージ交換なので待ち合わせを避けることが可能である。
 
 %%PPE が SPE からメールを受け取る場合、
--- a/cerium-rendering.tex	Thu Mar 27 02:24:48 2008 +0900
+++ b/cerium-rendering.tex	Sat Mar 29 09:33:55 2008 +0900
@@ -12,25 +12,35 @@
   \end{center}
 \end{figure}
 
-Span はテクスチャ情報のアドレスと高さと幅、それに加えて
-ポリゴンのある Y 座標に対する左端のピクセル情報、右端のピクセル情報、
-そして Span の長さを持つ。
+%%Span はテクスチャ情報のアドレスと高さと幅、それに加えて
+%%ポリゴンのある Y 座標に対する左端のピクセル情報、右端のピクセル情報、
+%%そして Span の長さを持つ。
+
+生成された Span を SPE が DMA で受け取り、Z Buffer を用いて
+Frame Buffer に書き込むピクセルの座標に対応する RGB 値を、
+テクスチャデータから取り出して書き込む。
+テクスチャデータは、プログラム起動時に一度だけ DMA で全て取得する。
+
+Frame Buffer は mmap されているので、ピクセルデータを DMA 転送することで
+描画している。
 
-生成された Span を SPE に DMA 転送し描画処理を行うわけだが、
-全ての Span を SPE に送るのは問題がある。
-先に述べたように、SPE が扱えるメモリ領域は 256KB と非常に小さい。
-本研究の画面環境が 1920x1080 であるため、Span の情報は元より、
-描画に使う Z Buffer のサイズも、
-1 line だけで 1920 * 4byte(RGB$\alpha$) = 7 KB となる。
-そこで、SPE に DMA 転送する前に、Y 座標を 8 line 毎に
-Span のリストを生成する。これを SpanPack とする。
-8 line 毎にとっている理由は、SPE が持てる Z Buffer が 8 line 分 (60KB)
-ぐらいだろうという見解からくるものである。
-
-Span が持つ情報からテクスチャを計算し、ピクセル毎の RGB$\alpha$情報を
-取得する。しかし、SPE の メモリ領域の問題から、あらかじめ
-全てのテクスチャを転送しておくことが不可能な場合がある。
-それらを考慮し、テクスチャを分割する必要がある。
-テクスチャは、8x8 の大きさに分割される。
-Span はそれぞれのテクスチャに沿って生成される。つまり、
-Span 一つにつき、分割したテクスチャ一つが DMA される。
+%%
+%%生成された Span を SPE に DMA 転送し描画処理を行うわけだが、
+%%全ての Span を SPE に送るのは問題がある。
+%%先に述べたように、SPE が扱えるメモリ領域は 256KB と非常に小さい。
+%%本研究の画面環境が 1920x1080 であるため、Span の情報は元より、
+%%描画に使う Z Buffer のサイズも、
+%%1 line だけで 1920 * 4byte(RGB$\alpha$) = 7 KB となる。
+%%そこで、SPE に DMA 転送する前に、Y 座標を 8 line 毎に
+%%Span のリストを生成する。これを SpanPack とする。
+%%8 line 毎にとっている理由は、SPE が持てる Z Buffer が 8 line 分 (60KB)
+%%ぐらいだろうという見解からくるものである。
+%%
+%%Span が持つ情報からテクスチャを計算し、ピクセル毎の RGB$\alpha$情報を
+%%取得する。しかし、SPE の メモリ領域の問題から、あらかじめ
+%%全てのテクスチャを転送しておくことが不可能な場合がある。
+%%それらを考慮し、テクスチャを分割する必要がある。
+%%テクスチャは、8x8 の大きさに分割される。
+%%Span はそれぞれのテクスチャに沿って生成される。つまり、
+%%Span 一つにつき、分割したテクスチャ一つが DMA される。
+%%
--- a/cerium-scene_graph.tex	Thu Mar 27 02:24:48 2008 +0900
+++ b/cerium-scene_graph.tex	Sat Mar 29 09:33:55 2008 +0900
@@ -14,6 +14,12 @@
   \end{center}
 \end{figure}
 
+Scene Graph によりプログラムが個々のゲーム場面に分割され、
+ゲーム場面の遷移を StatePattern を用いて記述すると、
+if,case 文が排除できるので、プログラムの可読性と独立性が向上する。
+これにより、過去の PS、PS2 によるゲームプログラムの移植や改良にかかる
+作業時間短縮が見込める。
+
 Scene Graph Node は以下のようなデータと動作を持つ。
 
 \begin{itemize}
--- a/cerium_dev.tex	Thu Mar 27 02:24:48 2008 +0900
+++ b/cerium_dev.tex	Sat Mar 29 09:33:55 2008 +0900
@@ -1,5 +1,6 @@
-\section{Cerium によるゲーム開発} \label{cerium_dev}
-Cerium 自身や Cerium を用いた開発では、以下の段階にそれぞれ実装とテストを行う。
+\section{Cerium の開発行程} \label{cerium_dev}
+Cerium 自身や Cerium を用いたプログラムの作成では、
+以下の段階にそれぞれ実装とテストを行う。
 
 \begin{enumerate}
   \item C によるシーケンシャルな実装 \label{list_dev_1}
--- a/compare.tex	Thu Mar 27 02:24:48 2008 +0900
+++ b/compare.tex	Sat Mar 29 09:33:55 2008 +0900
@@ -56,9 +56,9 @@
 ことができない。SPE の LS の容量では、全てのタスクを SPE 上に乗せることは
 できないため、現在は Renderer のタスクだけを SPE 上にマッピングしてある。
 
-また、Texture の分割と、Texture の必要な部分だけ DMA で
-取得するという機能も実装されていない。
-そのため、ここでは開始直後に Texture を全て SPE 上にロードしている。
+また、プログラム開始直後にテクスチャデータを全て SPE 上にロードしている。
+そのため、必要無いデータまで SPE 上に置いている状態なので、
+メモリ領域を無駄に消費している。
 
 Cerium の描画領域の横幅が 640 に抑えてあるのも、上記の問題が原因で
 1920 pixel 分の Z Buffer を SPE 上に置くスペースが無いからである。
@@ -67,5 +67,3 @@
 
 また、パイプラインが正常に動いているかなど、
 アルゴリズムの検証を行う必要もある。
-この場合、C の下位言語である Continuation based C (CbC) を用いて、
-開発過程の各段階で検証する手法がある \cite{kono} 。
--- a/conclusion.tex	Thu Mar 27 02:24:48 2008 +0900
+++ b/conclusion.tex	Sat Mar 29 09:33:55 2008 +0900
@@ -1,32 +1,25 @@
 \section{まとめ}
-本研究では、Cell 上で動作する Task Manager を実装し、
-3D Graphics Renderer である Cerium を開発した。
-Cerium を用いることで、PlayStation 3 上という限られた環境だけでなく、
-Linux や Mac OS X でもテストやデバッグを行うことが出来る。
-
-また、 Task Manager の実装を進めれば、Cell 以外の
-Multi Core Architecture に対しても使用できると考えている。
+本研究では、Many Core Architecture 向けの Fine Grain Task OS を提案し、
+例題として Cell 上で動作する、ゲームプログラム用 OS である Cerium を開発した。
+Cerium を用いることで、PS3 上という限られた環境だけでなく、
+Linux や Mac OS X でもテストやデバッグを行うことが出来るため、
+並列プログラミング経験の低い学生の実験にも使用できる。
 
 \section{今後の課題}
+ここでは、Cerium に関する課題を示す。
 
 \subsection{Scene Graph}
 カメラや光源、コントローラ等からの入力に対応するノードが未実装である
 
-また、ネットワークを管理するノードを実装すれば、
-Federated Linda \cite{fuchita} を用いた
-ネットワークゲーム開発も可能である。
-
 \subsection{Rendering}
-必要最低限の機能は実装しているが、ゲームとしては
+必要最低限の機能は実装しているが、ゲームとしては以下の機能が必須といえる。
 
 \begin{itemize}
   \item Shading
   \item Alpha blending
 \end{itemize}
 
-が欲しいところである。
-
-現在は描画時に Z Buffer を用いているが、Z sort を用いることにより、
+また、現在は描画時に Z Buffer を用いているが、Z sort を用いることにより、
 SPE 上に Z Buffer の領域は必要なくなる。
 Z sort とは、面に対してどちらが手前にあるかというのを判断し、
 おくにある面から描画していく手法である。
@@ -45,6 +38,3 @@
 しかし、ユーザが勝手に DMA 命令を発効すると、DMA 完了待ちやデータ重複など、
 パイプラインの流れが崩れてしまう恐れがある。
 それを回避する実装が必要である。
-
-現在は C++ で記述しているが、CbC に書き換えることで
-モデル検査を行うことができ、高い信頼性を得られる。
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/figure/sync.bb	Sat Mar 29 09:33:55 2008 +0900
@@ -0,0 +1,5 @@
+%%Title: ./sync.pdf
+%%Creator: ebb Version 0.5.2 (+ArtBox)
+%%BoundingBox: 0 0 577 554
+%%CreationDate: Sat Mar 29 08:29:28 2008
+
Binary file figure/sync.graffle has changed
Binary file figure/sync.pdf has changed
--- a/introduction.tex	Thu Mar 27 02:24:48 2008 +0900
+++ b/introduction.tex	Sat Mar 29 09:33:55 2008 +0900
@@ -1,26 +1,61 @@
 \section{研究の目的}
-PlayStation 3 (以下 PS3) では、搭載された Linux を用いて、
-PS3 上で動くゲーム開発することができる。
-しかし、現在 GPU (Graphics Processing Unit) の API は
-一般には公開されていないため、GPU を使った描画はできない。
-Frame Buffer 上には直接描画することはできるため、
-我々は Frame Buffer 上に描画するゲームフレームワークを提案してきた。
 
-本研究では、PS3 上で高速な描画が可能な、独自のレンダリングエンジンとして、
-Cerium Rendering Engine の開発を行う。
+%% % これは研究の目的としては「近すぎる」
+%% % 最終目標は「レンダリングエンジンを作る」ではなく
+%% % 「OSを作る」だから。(でいいのかな
+%%
+%%PlayStation 3 (以下 PS3) では、搭載された Linux を用いて、
+%%PS3 上で動くゲーム開発することができる。
+%%しかし、現在 GPU (Graphics Processing Unit) の API は
+%%一般には公開されていないため、GPU を使った描画はできない。
+%%Frame Buffer 上には直接描画することはできるため、
+%%我々は Frame Buffer 上に描画するゲームフレームワークを提案してきた。
+%%
+%%本研究では、PS3 上で高速な描画が可能な、独自のレンダリングエンジンとして、
+%%Cerium Rendering Engine の開発を行う。
+%%Cerium は、次の 3 つから構成される。
+%%
+%%\begin{itemize}
+%%  \item Scene Graph
+%%  \item Rendering Engine
+%%  \item Task Manager
+%%\end{itemize}
+%%
+%%Cerium は Cell 上だけでなく、Linux や Mac OS X 上でも
+%%動く、シーケンシャルなプログラムも実装することが出来る。
+%%並列プログラムとシーケンシャルプログラムの相互の変換は容易である。
+%%これにより、全体の動作のデバッグはシーケンシャルプログラムで行い、
+%%仕様が正しいと確認できたら、 Cell 上などの特有の環境で
+%%動作、デバッグを行えばいい。
+%%
+
+近年、CPU の性能向上は、クロックサイクルを上げることよりも、
+複数の CPU コア (Many Core Architecture) を導入することにより
+得られるようになってきている。しかし、Many Core Architecture の
+プログラムは複雑であり、その信頼性を確保することは難しい。
+
+本研究では、Many Core Architecture 向けの Fine Grain Task OS を設計する。
+この OS では、Amdahl 則を考慮して、
+定常的な並列性を細粒度タスクを使って実現する。
+そのために、シーングラフレベルから並列実行を考慮したプログラムとする。
+
+細粒度タスク自体や、タスク全体のデバッグを容易にするために、
+同じタスクが Mac OS X や Linux、PS3 上など複数の環境で動くようにする。
+また、Thread を多用せず、細粒度タスク内での同期は行わない。
+これにより、並列プログラミングの経験の低いプログラマでも
+容易に使用できる。
+
+例題として、本研究室で作成した、Rendering を含む PS3 上のゲームプログラム用
+OS である Cerium \cite{gongo} を用いる。
+
 Cerium は、次の 3 つから構成される。
 
 \begin{itemize}
   \item Scene Graph
   \item Rendering Engine
-  \item Task Manager
+  \item Fine Grain Task Manager
 \end{itemize}
 
-Cerium は Cell 上だけでなく、Linux や Mac OS X 上でも
-動く、シーケンシャルなプログラムも実装することが出来る。
-並列プログラムとシーケンシャルプログラムの相互の変換は容易である。
-これにより、全体の動作のデバッグはシーケンシャルプログラムで行い、
-仕様が正しいと確認できたら、 Cell 上などの特有の環境で
-動作、デバッグを行えばいい。
-
-
+Cerium では、Cell の性能を十分に引き出し、
+今まで作成してきた PS、PS2 のゲームプログラムを PS3 へ
+容易に移植できることを目的とする。
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ipsjsort.bst	Sat Mar 29 09:33:55 2008 +0900
@@ -0,0 +1,1285 @@
+% ipsjsort.bst 15-Jun-07 by Hiroshi Nakashima (ver 2.12)
+% ipsjsort.bst 30-Jan-02 by Hiroshi Nakashima (ver 2.00)
+% ipsjsort.bst 28-Dec-93 by Hiroshi Nakashima (ver 1.00)
+% jssst.bst tomura@etl.go.jp (Satoru Tomura)
+% BibTeX standard bibliography style `jplain'
+	% version 0.10 for JBibTeX versions 0.10 or later, JLaTeX version 2.09.
+	% by Shouichi Matsui, matsui@denken.junet
+
+ENTRY
+  { address
+    author
+    booktitle
+    chapter
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    month
+    note
+    number
+    organization
+    pages
+    publisher
+    school
+    series
+    title
+    type
+    volume
+    year
+    yomi
+  }
+  {}
+  { label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+INTEGERS { before.year }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+  #4 'before.year :=					% 1.00(1)
+}
+
+STRINGS { s t }
+
+FUNCTION {is.kanji}
+{ is.kanji.str$ }					% 1.00(2), 2.00(1)
+
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { duplicate$ is.kanji				% 2.00(2)
+	{ "," * write$ }
+	{ ", " * write$ }
+      if$
+    }
+    { output.state after.block =
+	{ add.period$ write$
+	  newline$
+	  "\newblock " write$
+	}
+	{ output.state before.all =
+	    'write$
+	    { output.state before.year =		% 1.00(1)
+		{ " " * write$ }
+		{ add.period$ " " * write$ }
+	      if$
+	    }
+	  if$
+	}
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {required.argument}
+{ 't :=
+  empty$
+    {"Missing required argument " t * " in " * cite$ * warning$}
+    'skip$
+  if$
+}
+
+FUNCTION {required.exclusive.or.argument}
+{ 't :=
+  empty$
+    { 's := 
+      empty$
+        { t " or " * s * " is missing in " * cite$ * warning$}
+        'skip$
+      if$
+    }
+    { 's :=
+      empty$
+        'skip$
+        { "You can use only one of " t * " and " * s * " in " * cite$ * warning$}
+      if$
+    }
+  if$
+}
+
+FUNCTION {required.and.or.argument}
+{ 't := empty$
+     { 's := empty$
+         { "there's no " t * " and/or " * s * cite$ * warning$ }
+         'skip$
+       if$
+     }
+     { pop$ pop$ }
+  if$
+}
+
+FUNCTION {optional.series.volume.number.argument}
+{ series empty$
+    { volume empty$
+        { number empty$
+            'skip$
+            { "there's a number but no series in " cite$ * warning$ }
+          if$
+        }
+        { number empty$
+            { "there's a volume but no series in " cite$ * warning$ }
+            { "you can use only one of volume and number in " cite$ * warning$}
+          if$
+        }
+     if$
+    }
+    { volume empty$
+        { number empty$
+            { "there's a series but neither volume nor number in " cite$ * warning$ }
+            'skip$
+          if$
+        }
+        { number empty$
+            'skip$
+            { "you can use only one of volume and number in " cite$ * warning$ }
+          if$
+        }
+     if$
+   }
+   if$
+}            
+
+FUNCTION {output.bibitem}
+{ newline$
+  "\bibitem{" write$
+  cite$ write$
+  "}" write$
+  newline$
+  before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+	'skip$
+	{ after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { duplicate$ is.kanji
+        'skip$						% 1.00(3)
+        { "{\em " swap$ * "}" * }			% 2.00(3)
+      if$
+    }
+  if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}					% 1.00(4), 2.00(4)
+{ 's :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { s nameptr "{ff}{ll}" format.name$ duplicate$ is.kanji
+	{ duplicate$ text.length$ #6 >
+	    { 't := }
+	    { pop$ s nameptr "{ff} {ll}" format.name$ 't := }
+	  if$
+	}
+        { pop$ s nameptr "{vv }{ll}{, jj}{, f.}" format.name$ 't := }
+      if$
+      nameptr #1 >
+	{ namesleft #1 >
+	    { s is.kanji
+		{ "," }
+		{ ", " }
+	      if$
+	      * t * }
+	    { t "others" =
+		{ s is.kanji
+			{"ほか" * }
+			{" et al." * }
+		      if$
+                }
+		{ s is.kanji
+			{"," * t * }	% put "," here for Kanji (H.N.)
+			{" and " * t * }
+	     	      if$
+		}
+	      if$
+	    }
+	  if$
+	}
+	't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+    { "" }
+    { author format.names }
+  if$
+}
+
+FUNCTION {add.colon}					% 2.00(5)
+{ duplicate$ is.kanji
+    { "\:" * }						% 2.12(1)
+    { ": " * }
+  if$
+}
+
+FUNCTION {format.editors.inparen}			% 2.00(6)
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+	{ editor is.kanji
+		{",編" * } {", eds." *} if$
+	}
+	{ editor is.kanji
+		{",編" *}  {", ed." *} if$
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+	{ editor is.kanji
+		{"(編)" * } {"(eds.)" *} if$		% 2.00(7)
+	}
+	{ editor is.kanji
+		{"(編)" *}  {"(ed.)" *} if$		% 2.00(7)
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+	{ t #1 #2 substring$ "--" = not
+	    { "--" *
+	      t #2 global.max$ substring$ 't :=
+	    }
+	    {   { t #1 #1 substring$ "-" = }
+		{ "-" *
+		  t #2 global.max$ substring$ 't :=
+		}
+	      while$
+	    }
+	  if$
+	}
+	{ t #1 #1 substring$ *
+	  t #2 global.max$ substring$ 't :=
+	}
+      if$
+    }
+  while$
+}
+
+FUNCTION {format.date}
+{ before.year 'output.state :=				% 1.00(1)
+  year empty$
+    { month empty$
+	{ "" }
+	{ "there's a month but no year in " cite$ * warning$
+          ""						% 1.00(5)
+	}
+      if$
+    }
+    { "(" year ")" * * }				% 1.00(5)
+  if$
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+    { "~" }
+    { "\ " }						% 1.00(6)
+  if$
+  swap$ * *
+}
+
+FUNCTION {output.volume}
+{ 
+  volume empty$
+    'skip$
+    { "Vol.~" volume * output}
+  if$
+
+}
+
+FUNCTION {output.number}
+{
+  number empty$
+    'skip$
+    { "No.~" number * output}
+  if$
+}
+
+FUNCTION {output.series.volume.number}
+{ series empty$
+    { output.volume
+      output.number }
+    { series is.kanji
+      volume empty$
+      number empty$
+      or
+      and
+        { series " " * volume * number * output}
+        { series output
+          output.volume
+          output.number}
+      if$
+   }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+    { "" }
+    { output.state mid.sentence =
+	{ edition "l" change.case$ " edition" * }
+	{ edition "t" change.case$ " edition" * }
+      if$
+    }
+  if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+  #0 'multiresult :=
+    { multiresult not
+      t empty$ not
+      and
+    }
+    { t #1 #1 substring$
+      duplicate$ "-" =
+      swap$ duplicate$ "," =
+      swap$ "+" =
+      or or
+	{ #1 'multiresult := }
+	{ t #2 global.max$ substring$ 't := }
+      if$
+    }
+  while$
+  multiresult
+}
+
+FUNCTION {format.pages}					% 1.00(7)
+{ pages empty$
+    { "" }
+    { pages multi.page.check
+	{ "pp." pages n.dashify tie.or.space.connect }
+	{ "p." pages tie.or.space.connect }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.vol.num.pages}				% 1.00(8)
+{ volume empty$
+  { ""}
+  { " Vol.~" volume * }
+  if$ 
+  number empty$
+    'skip$
+    { volume empty$
+	{ "there's a number but no volume in " cite$ * warning$ }
+	{ "," *}
+      if$
+      " No.~" number * *
+    }
+  if$
+  pages empty$
+    'skip$
+    { duplicate$ empty$
+	{ pop$ format.pages }
+	{ ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+    'format.pages
+    { type empty$
+	{ "chapter" chapter tie.or.space.connect }
+        { type is.kanji 
+             { chapter type tie.or.space.connect }
+             { type "l" change.case$ chapter tie.or.space.connect }
+          if$
+        }
+      if$
+      pages empty$
+	'skip$
+	{ ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+    { "" }
+    { booktitle emphasize
+      editor empty$
+	'skip$
+	{ booktitle is.kanji
+	    { "(" * format.editors.inparen * ")" *}	% 2.00(6,7)
+	    { " (" * format.editors.inparen * ")" *}	% 1.00(9), 2.00(6)
+	  if$
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+  month empty$ year empty$ note empty$
+  and and and and and
+  key empty$ not and
+    { "all relevant fields are empty in " cite$ * warning$ }
+    'skip$
+  if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+    'skip$
+    { pop$
+      type "t" change.case$
+    }
+  if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+    { title empty$
+        { "Technical Report" }
+        { title is.kanji
+            { "技術報告" }
+            { "Technical Report" }
+          if$
+        }
+      if$
+    }
+    {type}
+  if$
+  number empty$
+    { "t" change.case$ }
+    { " " number * * }
+  if$
+}
+
+FUNCTION {format.article.crossref}			% 2.00(8)
+{ key empty$
+    { journal empty$
+	{ "need key or journal for " cite$ * " to crossref " * crossref *
+	  warning$
+	  ""
+	}
+	{ journal emphasize }				% 1.00(10)
+      if$
+    }
+    { "In " key * }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}			% 1.00(11)
+{ editor #1
+  editor is.kanji { "{ff}" } { "{vv }{ll}" } if$
+  format.name$
+  editor num.names$ duplicate$
+  #2 >
+    { editor is.kanji
+	  {pop$ "ほか" *} {pop$ " et al." * } if$
+    }
+    { #2 <
+	'skip$
+	{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+	    { editor is.kanji
+		{"ほか" *} {" et al." * } if$
+	    }
+	    { editor is.kanji
+		{"・" * editor #2 "{ff}" format.name$ * }
+		{" and " * editor #2 "{vv }{ll}" format.name$ * }
+	      if$
+	    }
+	  if$
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.book.crossref}				% 2.00(8)
+{ editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+	{ series empty$
+	    { "need editor, key, or series for " cite$ * " to crossref " *
+	      crossref * warning$
+	      ""
+	    }
+	    { series emphasize }			% 1.00(10)
+	  if$
+	}
+	{ "In " key * }
+      if$
+    }
+    { format.crossref.editor }
+  if$
+  " \cite{" * crossref * "}" *
+  volume empty$
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ }
+    { duplicate$ is.kanji { "," } { ", "} if$ *
+      "Vol." * volume tie.or.space.connect
+    }
+  if$
+}
+
+FUNCTION {format.incoll.inproc.crossref}		% 2.00(8)
+{ editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+	{ booktitle empty$
+	    { "need editor, key, or booktitle for " cite$ * " to crossref " *
+	      crossref * warning$
+	      ""
+	    }
+	    { booktitle emphasize }			% 1.00(10)
+	  if$
+	}
+	{ "In " key * }
+      if$
+    }
+    { format.crossref.editor }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ 
+%%%%
+  author  "author"  required.argument
+  title   "title"   required.argument
+  journal "journal" required.argument
+  year    "year"    required.argument
+%%%% jssst
+  volume  "volume"  
+  number  "number"  
+     required.and.or.argument
+  pages   "pages"   required.argument
+%%%%
+  output.bibitem 
+  format.authors add.colon				% 2.00(5)
+  title output
+  crossref missing$
+    { journal emphasize output
+      format.vol.num.pages output			% 1.00(12)
+      format.date output
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {book}
+{ 
+%%%%
+  author  "author"
+  editor  "editor"
+    required.exclusive.or.argument
+  title   "title"  required.argument
+  publisher "publisher" required.argument
+  year    "year" required.argument
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem
+  author empty$
+    { format.editors}
+    { format.authors}
+  if$
+  add.colon						% 2.00(5)
+  title emphasize output
+  crossref missing$
+    { output.series.volume.number
+      publisher output
+      address output
+    }
+    { new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {booklet}
+{
+%%%%
+  title   "title"   required.argument
+%%%% jssst
+  author  "author"  required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  howpublished output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inbook}
+{ 
+%%%%
+  author  "author"
+  editor  "editor"
+     required.exclusive.or.argument
+  title   "title"  required.argument
+  chapter "chapter"
+  pages   "pages"
+     required.and.or.argument
+  publisher  "publisher" required.argument
+  year       "year"      required.argument
+
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem 
+  author empty$
+    { format.editors}
+    { format.authors}
+  if$
+  add.colon						% 2.00(5)
+  title emphasize output
+  crossref missing$
+    { output.series.volume.number
+      format.chapter.pages output
+      publisher output
+    }
+    { format.chapter.pages output
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date output					% 1.00(13)
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {incollection}
+{
+%%%%
+  author    "author"    required.argument
+  title     "title"     required.argument
+  booktitle "booktitle" required.argument
+  publisher "publisher" required.argument
+  year      "year"      required.argument
+
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  crossref missing$
+    { format.in.ed.booktitle output
+      output.series.volume.number
+      publisher output
+      address output
+      format.edition output
+      format.chapter.pages output			% 1.00(13)
+      format.date output
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inproceedings}
+{
+%%%%
+  author    "author"    required.argument
+  title     "title"     required.argument
+  year      "year"      required.argument
+
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem 
+  format.authors add.colon				% 2.00(5)
+  title output
+  crossref missing$
+    { format.in.ed.booktitle output
+      booktitle "booktitle" required.argument
+      output.series.volume.number
+      address output
+      organization output
+      publisher output
+      format.pages output
+      format.date output				% 1.00(13)
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{	
+%%%%
+  title   "title"    required.argument
+%%%% jssst
+  author   "author"
+  organization "organazaion"
+     required.exclusive.or.argument
+%%%%
+  output.bibitem
+  author empty$
+    { organization}
+    { format.authors}
+  if$
+  add.colon						% 2.00(5)
+  title emphasize output
+  author empty$
+    'skip$
+    { organization output }
+  if$
+  address output
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {mastersthesis}
+{
+%%%%
+  author   "author"  required.argument
+  title    "title"   required.argument
+  school   "school"  required.argument
+  year     "year"    required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  author empty$
+    { "Master's thesis" }
+    { author is.kanji
+        { "修士論文" }  
+        { "Master's thesis" }
+      if$
+    }
+  if$
+  format.thesis.type output.nonnull
+  school output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {misc}
+{
+%%%%
+%%%% jssst
+  author "author" required.argument
+  title  "title"  required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  howpublished output
+  format.date output
+  new.block
+  note output
+  fin.entry
+  empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{
+%%%%
+  author   "author"  required.argument
+  title    "title"   required.argument
+  school   "school"  required.argument
+  year     "year"    required.argument
+%%%%
+  output.bibitem 
+  format.authors add.colon				% 2.00(5)
+  title output						% 2.00(9)
+  author empty$
+    { "PhD Thesis" }
+    { author is.kanji
+        { "博士論文" }
+        { "PhD Thesis" }
+      if$
+    }
+  if$
+  format.thesis.type output.nonnull
+  school output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {proceedings}
+{
+%%%%
+  title  "title"  required.argument
+  year   "year"   required.argument
+
+  optional.series.volume.number.argument
+%%%% jssst
+  editor  "editor"
+  organization "organization"
+      required.exclusive.or.argument 
+%%%%
+  output.bibitem 
+  editor empty$
+    { organization }
+    { format.editors }
+  if$
+  add.colon						% 2.00(5)
+  title emphasize output
+  output.series.volume.number
+  address output
+  editor empty$
+    'skip$
+    { organization output }
+  if$
+  publisher output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {techreport}
+{
+%%%%
+  author   "author"   required.argument
+  title    "title"    required.argument
+  institution "institution" required.argument
+  year     "year"     required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  format.tr.number output.nonnull
+  institution output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {unpublished}
+{
+%%%%
+  author   "author"   required.argument
+  title    "title"    required.argument
+  note     "note"     required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+FUNCTION {sortify}
+{ purify$
+  "l" change.case$
+}
+
+INTEGERS { len }
+
+FUNCTION {chop.word}
+{ 's :=
+  'len :=
+  s #1 len substring$ =
+    { s len #1 + global.max$ substring$ }
+    's
+  if$
+}
+
+FUNCTION {sort.format.names}
+{ 's :=
+  yomi empty$
+     'skip$
+     { yomi 's := }
+  if$
+
+  #1 'nameptr :=
+  ""
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { nameptr #1 >
+	{ "   " * }
+	'skip$
+      if$
+      s nameptr "{vv{ } }{ll{ }}{  ff{ }}{  jj{ }}" format.name$ 't :=
+      nameptr numnames = t "others" = and
+	{ "et al" * }
+	{ t sortify * }
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {sort.format.title}
+{ 't :=
+  "A " #2
+    "An " #3
+      "The " #4 t chop.word
+    chop.word
+  chop.word
+  sortify
+  #1 global.max$ substring$
+}
+
+FUNCTION {author.sort}
+{ author empty$
+    { key empty$
+	{ "to sort, need author or key in " cite$ * warning$
+	  ""
+	}
+	{ key sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.editor.sort}
+{ author empty$
+    { editor empty$
+	{ key empty$
+	    { "to sort, need author, editor, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ editor sort.format.names }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {author.organization.sort}
+{ author empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need author, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ "The " #4 organization chop.word sortify }
+      if$
+    }
+    { author sort.format.names }
+  if$
+}
+
+FUNCTION {editor.organization.sort}
+{ editor empty$
+    { organization empty$
+	{ key empty$
+	    { "to sort, need editor, organization, or key in " cite$ * warning$
+	      ""
+	    }
+	    { key sortify }
+	  if$
+	}
+	{ "The " #4 organization chop.word sortify }
+      if$
+    }
+    { editor sort.format.names }
+  if$
+}
+
+FUNCTION {presort}
+{ type$ "book" =
+  type$ "inbook" =
+  or
+    'author.editor.sort
+    { type$ "proceedings" =
+	'editor.organization.sort
+	{ type$ "manual" =
+	    'author.organization.sort
+	    'author.sort
+	  if$
+	}
+      if$
+    }
+  if$
+  "    "
+  *
+  year field.or.null sortify
+  *
+  "    "
+  *
+  title field.or.null
+  sort.format.title
+  *
+  #1 entry.max$ substring$
+  'sort.key$ :=
+}
+
+ITERATE {presort}
+
+SORT
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #1 'number.label :=
+  #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+  number.label #1 + 'number.label :=
+  label width$ longest.label.width >
+    { label 'longest.label :=
+      label width$ 'longest.label.width :=
+    }
+    'skip$
+  if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+    'skip$
+    { preamble$ write$ newline$ }
+  if$
+  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+  "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ipsjunsrt.bst	Sat Mar 29 09:33:55 2008 +0900
@@ -0,0 +1,1135 @@
+% ipsjunsrt.bst 15-Jun-07 by Hiroshi Nakashima (ver 2.12)
+% ipsjunsrt.bst 30-Jan-02 by Hiroshi Nakashima (ver 2.00)
+% ipsjunsrt.bst 28-Dec-93 by Hiroshi Nakashima (ver 1.00)
+% jssst.bst tomura@etl.go.jp (Satoru Tomura)
+% BibTeX standard bibliography style `jplain'
+	% version 0.10 for JBibTeX versions 0.10 or later, JLaTeX version 2.09.
+	% by Shouichi Matsui, matsui@denken.junet
+
+ENTRY
+  { address
+    author
+    booktitle
+    chapter
+    edition
+    editor
+    howpublished
+    institution
+    journal
+    key
+    month
+    note
+    number
+    organization
+    pages
+    publisher
+    school
+    series
+    title
+    type
+    volume
+    year
+    yomi
+  }
+  {}
+  { label }
+
+INTEGERS { output.state before.all mid.sentence after.sentence after.block }
+
+INTEGERS { before.year }
+
+FUNCTION {init.state.consts}
+{ #0 'before.all :=
+  #1 'mid.sentence :=
+  #2 'after.sentence :=
+  #3 'after.block :=
+  #4 'before.year :=					% 1.00(1)
+}
+
+STRINGS { s t }
+
+FUNCTION {is.kanji}
+{ is.kanji.str$ }					% 1.00(2), 2.00(1)
+
+FUNCTION {output.nonnull}
+{ 's :=
+  output.state mid.sentence =
+    { duplicate$ is.kanji				% 2.00(2)
+	{ "," * write$ }
+	{ ", " * write$ }
+      if$
+    }
+    { output.state after.block =
+	{ add.period$ write$
+	  newline$
+	  "\newblock " write$
+	}
+	{ output.state before.all =
+	    'write$
+	    { output.state before.year =		% 1.00(1)
+		{ " " * write$ }
+		{ add.period$ " " * write$ }
+	      if$
+	    }
+	  if$
+	}
+      if$
+      mid.sentence 'output.state :=
+    }
+  if$
+  s
+}
+
+FUNCTION {output}
+{ duplicate$ empty$
+    'pop$
+    'output.nonnull
+  if$
+}
+
+FUNCTION {required.argument}
+{ 't :=
+  empty$
+    {"Missing required argument " t * " in " * cite$ * warning$}
+    'skip$
+  if$
+}
+
+FUNCTION {required.exclusive.or.argument}
+{ 't :=
+  empty$
+    { 's := 
+      empty$
+        { t " or " * s * " is missing in " * cite$ * warning$}
+        'skip$
+      if$
+    }
+    { 's :=
+      empty$
+        'skip$
+        { "You can use only one of " t * " and " * s * " in " * cite$ * warning$}
+      if$
+    }
+  if$
+}
+
+FUNCTION {required.and.or.argument}
+{ 't := empty$
+     { 's := empty$
+         { "there's no " t * " and/or " * s * cite$ * warning$ }
+         'skip$
+       if$
+     }
+     { pop$ pop$ }
+  if$
+}
+
+FUNCTION {optional.series.volume.number.argument}
+{ series empty$
+    { volume empty$
+        { number empty$
+            'skip$
+            { "there's a number but no series in " cite$ * warning$ }
+          if$
+        }
+        { number empty$
+            { "there's a volume but no series in " cite$ * warning$ }
+            { "you can use only one of volume and number in " cite$ * warning$}
+          if$
+        }
+     if$
+    }
+    { volume empty$
+        { number empty$
+            { "there's a series but neither volume nor number in " cite$ * warning$ }
+            'skip$
+          if$
+        }
+        { number empty$
+            'skip$
+            { "you can use only one of volume and number in " cite$ * warning$ }
+          if$
+        }
+     if$
+   }
+   if$
+}            
+
+FUNCTION {output.bibitem}
+{ newline$
+  "\bibitem{" write$
+  cite$ write$
+  "}" write$
+  newline$
+  before.all 'output.state :=
+}
+
+FUNCTION {fin.entry}
+{ add.period$
+  write$
+  newline$
+}
+
+FUNCTION {new.block}
+{ output.state before.all =
+    'skip$
+    { after.block 'output.state := }
+  if$
+}
+
+FUNCTION {new.sentence}
+{ output.state after.block =
+    'skip$
+    { output.state before.all =
+	'skip$
+	{ after.sentence 'output.state := }
+      if$
+    }
+  if$
+}
+
+FUNCTION {not}
+{   { #0 }
+    { #1 }
+  if$
+}
+
+FUNCTION {and}
+{   'skip$
+    { pop$ #0 }
+  if$
+}
+
+FUNCTION {or}
+{   { pop$ #1 }
+    'skip$
+  if$
+}
+
+FUNCTION {new.block.checka}
+{ empty$
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.block.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.block
+  if$
+}
+
+FUNCTION {new.sentence.checka}
+{ empty$
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {new.sentence.checkb}
+{ empty$
+  swap$ empty$
+  and
+    'skip$
+    'new.sentence
+  if$
+}
+
+FUNCTION {field.or.null}
+{ duplicate$ empty$
+    { pop$ "" }
+    'skip$
+  if$
+}
+
+FUNCTION {emphasize}
+{ duplicate$ empty$
+    { pop$ "" }
+    { duplicate$ is.kanji
+        'skip$						% 1.00(3)
+        { "{\em " swap$ * "}" * }			% 2.00(3)
+      if$
+    }
+  if$
+}
+
+INTEGERS { nameptr namesleft numnames }
+
+FUNCTION {format.names}					% 1.00(4), 2.00(4)
+{ 's :=
+  #1 'nameptr :=
+  s num.names$ 'numnames :=
+  numnames 'namesleft :=
+    { namesleft #0 > }
+    { s nameptr "{ff}{ll}" format.name$ duplicate$ is.kanji
+	{ duplicate$ text.length$ #6 >
+	    { 't := }
+	    { pop$ s nameptr "{ff} {ll}" format.name$ 't := }
+	  if$
+	}
+        { pop$ s nameptr "{vv }{ll}{, jj}{, f.}" format.name$ 't := }
+      if$
+      nameptr #1 >
+	{ namesleft #1 >
+	    { s is.kanji
+		{ "," }
+		{ ", " }
+	      if$
+	      * t * }
+	    { t "others" =
+		{ s is.kanji
+			{"ほか" * }
+			{" et al." * }
+		      if$
+                }
+		{ s is.kanji
+			{"," * t * }	% put "," here for Kanji (H.N.)
+			{" and " * t * }
+	     	      if$
+		}
+	      if$
+	    }
+	  if$
+	}
+	't
+      if$
+      nameptr #1 + 'nameptr :=
+      namesleft #1 - 'namesleft :=
+    }
+  while$
+}
+
+FUNCTION {format.authors}
+{ author empty$
+    { "" }
+    { author format.names }
+  if$
+}
+
+FUNCTION {add.colon}					% 2.00(5)
+{ duplicate$ is.kanji
+    { "\:" * }						% 2.12(1)
+    { ": " * }
+  if$
+}
+
+FUNCTION {format.editors.inparen}			% 2.00(6)
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+	{ editor is.kanji
+		{",編" * } {", eds." *} if$
+	}
+	{ editor is.kanji
+		{",編" *}  {", ed." *} if$
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.editors}
+{ editor empty$
+    { "" }
+    { editor format.names
+      editor num.names$ #1 >
+	{ editor is.kanji
+		{"(編)" * } {"(eds.)" *} if$		% 2.00(7)
+	}
+	{ editor is.kanji
+		{"(編)" *}  {"(ed.)" *} if$		% 2.00(7)
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {n.dashify}
+{ 't :=
+  ""
+    { t empty$ not }
+    { t #1 #1 substring$ "-" =
+	{ t #1 #2 substring$ "--" = not
+	    { "--" *
+	      t #2 global.max$ substring$ 't :=
+	    }
+	    {   { t #1 #1 substring$ "-" = }
+		{ "-" *
+		  t #2 global.max$ substring$ 't :=
+		}
+	      while$
+	    }
+	  if$
+	}
+	{ t #1 #1 substring$ *
+	  t #2 global.max$ substring$ 't :=
+	}
+      if$
+    }
+  while$
+}
+
+FUNCTION {format.date}
+{ before.year 'output.state :=				% 1.00(1)
+  year empty$
+    { month empty$
+	{ "" }
+	{ "there's a month but no year in " cite$ * warning$
+          ""						% 1.00(5)
+	}
+      if$
+    }
+    { "(" year ")" * * }				% 1.00(5)
+  if$
+}
+
+FUNCTION {tie.or.space.connect}
+{ duplicate$ text.length$ #3 <
+    { "~" }
+    { "\ " }						% 1.00(6)
+  if$
+  swap$ * *
+}
+
+FUNCTION {output.volume}
+{ 
+  volume empty$
+    'skip$
+    { "Vol.~" volume * output}
+  if$
+
+}
+
+FUNCTION {output.number}
+{
+  number empty$
+    'skip$
+    { "No.~" number * output}
+  if$
+}
+
+FUNCTION {output.series.volume.number}
+{ series empty$
+    { output.volume
+      output.number }
+    { series is.kanji
+      volume empty$
+      number empty$
+      or
+      and
+        { series " " * volume * number * output}
+        { series output
+          output.volume
+          output.number}
+      if$
+   }
+ if$
+}
+
+FUNCTION {format.edition}
+{ edition empty$
+    { "" }
+    { output.state mid.sentence =
+	{ edition "l" change.case$ " edition" * }
+	{ edition "t" change.case$ " edition" * }
+      if$
+    }
+  if$
+}
+
+INTEGERS { multiresult }
+
+FUNCTION {multi.page.check}
+{ 't :=
+  #0 'multiresult :=
+    { multiresult not
+      t empty$ not
+      and
+    }
+    { t #1 #1 substring$
+      duplicate$ "-" =
+      swap$ duplicate$ "," =
+      swap$ "+" =
+      or or
+	{ #1 'multiresult := }
+	{ t #2 global.max$ substring$ 't := }
+      if$
+    }
+  while$
+  multiresult
+}
+
+FUNCTION {format.pages}					% 1.00(7)
+{ pages empty$
+    { "" }
+    { pages multi.page.check
+	{ "pp." pages n.dashify tie.or.space.connect }
+	{ "p." pages tie.or.space.connect }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.vol.num.pages}				% 1.00(8)
+{ volume empty$
+  { ""}
+  { " Vol.~" volume * }
+  if$ 
+  number empty$
+    'skip$
+    { volume empty$
+	{ "there's a number but no volume in " cite$ * warning$ }
+	{ "," *}
+      if$
+      " No.~" number * *
+    }
+  if$
+  pages empty$
+    'skip$
+    { duplicate$ empty$
+	{ pop$ format.pages }
+	{ ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.chapter.pages}
+{ chapter empty$
+    'format.pages
+    { type empty$
+	{ "chapter" chapter tie.or.space.connect }
+        { type is.kanji 
+             { chapter type tie.or.space.connect }
+             { type "l" change.case$ chapter tie.or.space.connect }
+          if$
+        }
+      if$
+      pages empty$
+	'skip$
+	{ ", " * format.pages * }
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.in.ed.booktitle}
+{ booktitle empty$
+    { "" }
+    { booktitle emphasize
+      editor empty$
+	'skip$
+	{ booktitle is.kanji
+	    { "(" * format.editors.inparen * ")" *}	% 2.00(6,7)
+	    { " (" * format.editors.inparen * ")" *}	% 1.00(9), 2.00(6)
+	  if$
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {empty.misc.check}
+{ author empty$ title empty$ howpublished empty$
+  month empty$ year empty$ note empty$
+  and and and and and
+  key empty$ not and
+    { "all relevant fields are empty in " cite$ * warning$ }
+    'skip$
+  if$
+}
+
+FUNCTION {format.thesis.type}
+{ type empty$
+    'skip$
+    { pop$
+      type "t" change.case$
+    }
+  if$
+}
+
+FUNCTION {format.tr.number}
+{ type empty$
+    { title empty$
+        { "Technical Report" }
+        { title is.kanji
+            { "技術報告" }
+            { "Technical Report" }
+          if$
+        }
+      if$
+    }
+    {type}
+  if$
+  number empty$
+    { "t" change.case$ }
+    { " " number * * }
+  if$
+}
+
+FUNCTION {format.article.crossref}			% 2.00(8)
+{ key empty$
+    { journal empty$
+	{ "need key or journal for " cite$ * " to crossref " * crossref *
+	  warning$
+	  ""
+	}
+	{ journal emphasize }				% 1.00(10)
+      if$
+    }
+    { "In " key * }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {format.crossref.editor}			% 1.00(11)
+{ editor #1
+  editor is.kanji { "{ff}" } { "{vv }{ll}" } if$
+  format.name$
+  editor num.names$ duplicate$
+  #2 >
+    { editor is.kanji
+	  {pop$ "ほか" *} {pop$ " et al." * } if$
+    }
+    { #2 <
+	'skip$
+	{ editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
+	    { editor is.kanji
+		{"ほか" *} {" et al." * } if$
+	    }
+	    { editor is.kanji
+		{"・" * editor #2 "{ff}" format.name$ * }
+		{" and " * editor #2 "{vv }{ll}" format.name$ * }
+	      if$
+	    }
+	  if$
+	}
+      if$
+    }
+  if$
+}
+
+FUNCTION {format.book.crossref}				% 2.00(8)
+{ editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+	{ series empty$
+	    { "need editor, key, or series for " cite$ * " to crossref " *
+	      crossref * warning$
+	      ""
+	    }
+	    { series emphasize }			% 1.00(10)
+	  if$
+	}
+	{ "In " key * }
+      if$
+    }
+    { format.crossref.editor }
+  if$
+  " \cite{" * crossref * "}" *
+  volume empty$
+    { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ }
+    { duplicate$ is.kanji { "," } { ", "} if$ *
+      "Vol." * volume tie.or.space.connect
+    }
+  if$
+}
+
+FUNCTION {format.incoll.inproc.crossref}		% 2.00(8)
+{ editor empty$
+  editor field.or.null author field.or.null =
+  or
+    { key empty$
+	{ booktitle empty$
+	    { "need editor, key, or booktitle for " cite$ * " to crossref " *
+	      crossref * warning$
+	      ""
+	    }
+	    { booktitle emphasize }			% 1.00(10)
+	  if$
+	}
+	{ "In " key * }
+      if$
+    }
+    { format.crossref.editor }
+  if$
+  " \cite{" * crossref * "}" *
+}
+
+FUNCTION {article}
+{ 
+%%%%
+  author  "author"  required.argument
+  title   "title"   required.argument
+  journal "journal" required.argument
+  year    "year"    required.argument
+%%%% jssst
+  volume  "volume"  
+  number  "number"  
+     required.and.or.argument
+  pages   "pages"   required.argument
+%%%%
+  output.bibitem 
+  format.authors add.colon				% 2.00(5)
+  title output
+  crossref missing$
+    { journal emphasize output
+      format.vol.num.pages output			% 1.00(12)
+      format.date output
+    }
+    { format.article.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {book}
+{ 
+%%%%
+  author  "author"
+  editor  "editor"
+    required.exclusive.or.argument
+  title   "title"  required.argument
+  publisher "publisher" required.argument
+  year    "year" required.argument
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem
+  author empty$
+    { format.editors}
+    { format.authors}
+  if$
+  add.colon						% 2.00(5)
+  title emphasize output
+  crossref missing$
+    { output.series.volume.number
+      publisher output
+      address output
+    }
+    { new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {booklet}
+{
+%%%%
+  title   "title"   required.argument
+%%%% jssst
+  author  "author"  required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  howpublished output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inbook}
+{ 
+%%%%
+  author  "author"
+  editor  "editor"
+     required.exclusive.or.argument
+  title   "title"  required.argument
+  chapter "chapter"
+  pages   "pages"
+     required.and.or.argument
+  publisher  "publisher" required.argument
+  year       "year"      required.argument
+
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem 
+  author empty$
+    { format.editors}
+    { format.authors}
+  if$
+  add.colon						% 2.00(5)
+  title emphasize output
+  crossref missing$
+    { output.series.volume.number
+      format.chapter.pages output
+      publisher output
+    }
+    { format.chapter.pages output
+      new.block
+      format.book.crossref output.nonnull
+    }
+  if$
+  format.edition output
+  format.date output					% 1.00(13)
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {incollection}
+{
+%%%%
+  author    "author"    required.argument
+  title     "title"     required.argument
+  booktitle "booktitle" required.argument
+  publisher "publisher" required.argument
+  year      "year"      required.argument
+
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  crossref missing$
+    { format.in.ed.booktitle output
+      output.series.volume.number
+      publisher output
+      address output
+      format.edition output
+      format.chapter.pages output			% 1.00(13)
+      format.date output
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.chapter.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {inproceedings}
+{
+%%%%
+  author    "author"    required.argument
+  title     "title"     required.argument
+  year      "year"      required.argument
+
+  optional.series.volume.number.argument
+%%%%
+  output.bibitem 
+  format.authors add.colon				% 2.00(5)
+  title output
+  crossref missing$
+    { format.in.ed.booktitle output
+      booktitle "booktitle" required.argument
+      output.series.volume.number
+      address output
+      organization output
+      publisher output
+      format.pages output
+      format.date output				% 1.00(13)
+    }
+    { format.incoll.inproc.crossref output.nonnull
+      format.pages output
+    }
+  if$
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {conference} { inproceedings }
+
+FUNCTION {manual}
+{	
+%%%%
+  title   "title"    required.argument
+%%%% jssst
+  author   "author"
+  organization "organazaion"
+     required.exclusive.or.argument
+%%%%
+  output.bibitem
+  author empty$
+    { organization}
+    { format.authors}
+  if$
+  add.colon						% 2.00(5)
+  title emphasize output
+  author empty$
+    'skip$
+    { organization output }
+  if$
+  address output
+  format.edition output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {mastersthesis}
+{
+%%%%
+  author   "author"  required.argument
+  title    "title"   required.argument
+  school   "school"  required.argument
+  year     "year"    required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  author empty$
+    { "Master's thesis" }
+    { author is.kanji
+        { "修士論文" }  
+        { "Master's thesis" }
+      if$
+    }
+  if$
+  format.thesis.type output.nonnull
+  school output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {misc}
+{
+%%%%
+%%%% jssst
+  author "author" required.argument
+  title  "title"  required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  howpublished output
+  format.date output
+  new.block
+  note output
+  fin.entry
+  empty.misc.check
+}
+
+FUNCTION {phdthesis}
+{
+%%%%
+  author   "author"  required.argument
+  title    "title"   required.argument
+  school   "school"  required.argument
+  year     "year"    required.argument
+%%%%
+  output.bibitem 
+  format.authors add.colon				% 2.00(5)
+  title output						% 2.00(9)
+  author empty$
+    { "PhD Thesis" }
+    { author is.kanji
+        { "博士論文" }
+        { "PhD Thesis" }
+      if$
+    }
+  if$
+  format.thesis.type output.nonnull
+  school output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {proceedings}
+{
+%%%%
+  title  "title"  required.argument
+  year   "year"   required.argument
+
+  optional.series.volume.number.argument
+%%%% jssst
+  editor  "editor"
+  organization "organization"
+      required.exclusive.or.argument 
+%%%%
+  output.bibitem 
+  editor empty$
+    { organization }
+    { format.editors }
+  if$
+  add.colon						% 2.00(5)
+  title emphasize output
+  output.series.volume.number
+  address output
+  editor empty$
+    'skip$
+    { organization output }
+  if$
+  publisher output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {techreport}
+{
+%%%%
+  author   "author"   required.argument
+  title    "title"    required.argument
+  institution "institution" required.argument
+  year     "year"     required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  format.tr.number output.nonnull
+  institution output
+  address output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {unpublished}
+{
+%%%%
+  author   "author"   required.argument
+  title    "title"    required.argument
+  note     "note"     required.argument
+%%%%
+  output.bibitem
+  format.authors add.colon				% 2.00(5)
+  title output
+  format.date output
+  new.block
+  note output
+  fin.entry
+}
+
+FUNCTION {default.type} { misc }
+
+MACRO {jan} {"January"}
+
+MACRO {feb} {"February"}
+
+MACRO {mar} {"March"}
+
+MACRO {apr} {"April"}
+
+MACRO {may} {"May"}
+
+MACRO {jun} {"June"}
+
+MACRO {jul} {"July"}
+
+MACRO {aug} {"August"}
+
+MACRO {sep} {"September"}
+
+MACRO {oct} {"October"}
+
+MACRO {nov} {"November"}
+
+MACRO {dec} {"December"}
+
+MACRO {acmcs} {"ACM Computing Surveys"}
+
+MACRO {acta} {"Acta Informatica"}
+
+MACRO {cacm} {"Communications of the ACM"}
+
+MACRO {ibmjrd} {"IBM Journal of Research and Development"}
+
+MACRO {ibmsj} {"IBM Systems Journal"}
+
+MACRO {ieeese} {"IEEE Transactions on Software Engineering"}
+
+MACRO {ieeetc} {"IEEE Transactions on Computers"}
+
+MACRO {ieeetcad}
+ {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"}
+
+MACRO {ipl} {"Information Processing Letters"}
+
+MACRO {jacm} {"Journal of the ACM"}
+
+MACRO {jcss} {"Journal of Computer and System Sciences"}
+
+MACRO {scp} {"Science of Computer Programming"}
+
+MACRO {sicomp} {"SIAM Journal on Computing"}
+
+MACRO {tocs} {"ACM Transactions on Computer Systems"}
+
+MACRO {tods} {"ACM Transactions on Database Systems"}
+
+MACRO {tog} {"ACM Transactions on Graphics"}
+
+MACRO {toms} {"ACM Transactions on Mathematical Software"}
+
+MACRO {toois} {"ACM Transactions on Office Information Systems"}
+
+MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"}
+
+MACRO {tcs} {"Theoretical Computer Science"}
+
+READ
+
+STRINGS { longest.label }
+
+INTEGERS { number.label longest.label.width }
+
+FUNCTION {initialize.longest.label}
+{ "" 'longest.label :=
+  #1 'number.label :=
+  #0 'longest.label.width :=
+}
+
+FUNCTION {longest.label.pass}
+{ number.label int.to.str$ 'label :=
+  number.label #1 + 'number.label :=
+  label width$ longest.label.width >
+    { label 'longest.label :=
+      label width$ 'longest.label.width :=
+    }
+    'skip$
+  if$
+}
+
+EXECUTE {initialize.longest.label}
+
+ITERATE {longest.label.pass}
+
+FUNCTION {begin.bib}
+{ preamble$ empty$
+    'skip$
+    { preamble$ write$ newline$ }
+  if$
+  "\begin{thebibliography}{"  longest.label  * "}" * write$ newline$
+}
+
+EXECUTE {begin.bib}
+
+EXECUTE {init.state.consts}
+
+ITERATE {call.type$}
+
+FUNCTION {end.bib}
+{ newline$
+  "\end{thebibliography}" write$ newline$
+}
+
+EXECUTE {end.bib}
+
+
--- a/osmesa.tex	Thu Mar 27 02:24:48 2008 +0900
+++ b/osmesa.tex	Sat Mar 29 09:33:55 2008 +0900
@@ -1,8 +1,15 @@
 \section{OSMesa/SDL を用いた Cell 上でのゲームプログラミング}
-先行研究 \cite{akira} では、Frame Buffer Engine 用のレンダリングエンジンである
-OSMesa \cite{osmesa} と、マルチメディアライブラリの SDL \cite{sdl} の二つを
-用いて開発を行った。
-例題として、一つの立方体を回転させるというプログラムを用いた。
+PS3 では、搭載された Linux を用いて、
+PS3 上で動くゲーム開発することができる。
+しかし、現在 GPU (Graphics Processing Unit) の API は
+一般には公開されていないため、GPU を使った描画はできない。
+Frame Buffer 上には直接描画することはできるため、
+Cerium の先行研究 \cite{akira} では、
+Frame Buffer Engine 用のレンダリングエンジンである
+OSMesa \cite{osmesa} と、マルチメディアライブラリの
+SDL \cite{sdl} の二つを用いて開発を行っている。
+例題として、テクスチャを貼っていない一つの立方体を
+回転させるというプログラムを用いた。
 
 PPE のみを使用した場合の実行速度は約 18 FPS (Frame Per Second)
 という結果になった。
@@ -31,5 +38,9 @@
 より速くなる可能性を示すものである。
 
 しかし、OSMesa は巨大なマクロによるプログラム記述や
-コピーの多用、巨大な構造体等があり、細分化はもちろん、
-後に拡張をすることも難しい。
+コピーの多用、巨大な構造体等がある。
+テクスチャに関しても、使用するテクスチャモードによって
+いくつものコードが呼び出される。
+それら全てのコードに対しての細分化や、
+後に拡張をすることは難しい。
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sigos.bib	Sat Mar 29 09:33:55 2008 +0900
@@ -0,0 +1,76 @@
+
+@misc{osmesa,
+author = "",
+title  = "{The Mesa 3D Graphics Library}",
+howpublished = "\url{http://www.mesa3d.org/}"
+}
+
+@misc{sdl,
+author = "",
+title = "{Simple DirectMedia Layer}",
+howpublished = "\url{http://www.libsdl.org/}"
+}
+
+@article{akira,
+author = "{Akira KAMIZATO}",
+title = "{Cell を用いたゲームフレームワークの提案}",
+journal = "{琉球大学理工学研究科情報工学専攻 平成19年度学位論文}",
+year = 2008
+}
+
+@book{amdahl,
+author = "{Brian Goetz, Tim Peierls, Joshua Bloch, Joseph Bowbeer, David Holmes, and Doug Lea}",
+title = "{Java Concurrency in Prac-tice}",
+publisher = "{Addison-Wesley Professional}",
+year = "2005"
+}
+
+@misc{gongo,
+author = "",
+title = "{SourceForge.JP: Project Info - Cerium Rendering Engine}",
+howpublished = "\url{https://sourceforge.jp/projects/cerium/}"
+}
+
+@misc{spurs,
+author = "{Keisuke Inoue}",
+title = "{SPU Centric Execution Model}",
+text = "SACSIS 2006",
+year = 2006
+}
+
+@misc{cell,
+author = "{Sony Corporation}",
+title = "{Cell broadband engine architecture}",
+year = 2005
+}
+
+@journal{chiaki,
+author = "{Chiaki SUGIYAMA}",
+title = "{SceneGraph と StatePattern を用いたゲームフレームワークの設計と実装}",
+journal = "{琉球大学工学部情報工学科 平成19年度卒業論文}",
+year = 2008
+}
+
+@misc{blender,
+title = "{Blender.jp - Blender Japanese Website}",
+howpublished = "\url{http://blender.jp/}"
+}
+
+@manual{libspe2,
+author = "{International Business Machines Corporation, Sony Computer Entertainment Incorporated, Toshiba Corporation}",
+title = "{SPE Runtime Management Library}",
+year = 2006
+}
+
+@article{kono,
+author = "{Shinji KONO}",
+title = "{検証を自身で表現できるハードウェア、ソフトウェア記述言語 Continuation ba sed C と、その Cell への応用}",
+journal = "{電子情報通信学会VLSI設計技術研究会}",
+year = 2008
+}
+
+@manual{mailbox,
+author = "{Sony Corporation}",
+title = "{Cell BroadbandEngine アーキテクチャ}",
+year = 2006
+}
--- a/sigos.tex	Thu Mar 27 02:24:48 2008 +0900
+++ b/sigos.tex	Sat Mar 29 09:33:55 2008 +0900
@@ -76,10 +76,13 @@
 \input{cerium_dev}     % 開発過程
 \input{compare}        % 評価と考察
 \input{conclusion}     % まとめ
-\input{bibliography}   % 参考文献
 
-%\bibliographystyle{ipsjunsrt}
-%\bibliography{sigos}
+\nocite{kono}
+\nocite{libspe2}
+\bibliographystyle{ipsjunsrt}
+\bibliography{sigos}
+
+%\input{bibliography}   % 参考文献
 
 
 \end{document}
Binary file sigos2008.pdf has changed