XEiJ (X68000 Emulator in Java)- XEiJ - STUDIO KAMADA

Version : 0.25.07.08 バージョン : 0.25.07.08

Author : Makoto Kamada 作者 : Makoto Kamada

Website : https://stdkmd.net/xeij/ ウェブサイト : https://stdkmd.net/xeij/

### Table of contents 目次

1. Introduction はじめに
2. Recent changes 最近の更新
   - 0.25.07.08
   - 0.25.06.08
   - 0.25.05.08
3. Past changes 過去の更新 ▶
4. Download ダウンロード
5. Install インストール ▶
6. Explanation of menu メニューの説明 ▶
7. Configuration file 設定ファイル ▶
8. Parameters パラメータ ▶
9. Source code ソースコード ▶
10. Functions and features 機能と特徴 ▶
11. About IPLROM 1.6 IPLROM 1.6について ▶
12. Explanation of misc/* misc/*の説明 ▶
13. Execution examples 実行サンプル ▶
14. Try to run the NetBSD/x68k NetBSD/x68kを動かしてみる ▶
15. Reference materials 参考資料 ▶
16. Link collection リンク集 ▶
17. License / Copyright / Disclaimer 使用許諾条件/著作権/免責事項 ▶
18. Acknowledgement 謝辞
19. Contact information 連絡先

## 1. Introduction はじめに

XEiJ (X68000 Emulator in Java) is an experimental X68000 emulator written in the Java language. Although XEiJ is an emulator, the sameness to real machines over the details of peripheral circuits is not necessarily top priority. I enjoy thinking new form of X68000 rather than copying old form. When I hit on an idea of an implementation method or a new function, I begin to write a program first of all even if I can not see its entire structure. If the idea goes nowhere, I put it aside until another idea occurs to me. I repeat such things. As a result, many unfinished parts are seen here and there. But I believe that it is meaningful to release XEiJ to the public if any comment in the source code helps someone. XEiJ (X68000 Emulator in Java) は Java 言語で記述された実験的な X68000 エミュレータです。エミュレータといっても周辺回路の隅々まで実機とまったく同じものを作ろうとしているわけではなく、どちらかと言えば X68000 の新しい形を考えることを楽しんでいます。実装方法のアイデアや新しい機能を思い付いたら全体像など見えなくてもとりあえずプログラムを書き始め、詰まったらまた何か湧いてくるまで脇に置いておく、そんなことを繰り返しているので ソースコード は作りかけのところばかりですが、注釈のどれか 1 つでも誰かの役に立つことがあれば公開する意味があると思っています。

## 2. Recent changes 最近の更新

### 0.25.07.08

#### Seamless mouse mode シームレスマウスモード

When the follow scroll checkbox in the input menu is ON in seamless mouse mode, the mouse cursor position follows the hardware scroll of the text screen even outside of SX-Window. This setting is stored in the parameter followscroll. シームレスマウスモードで入力メニューのスクロールに追従するチェックボックスが ON のとき、SX-Window 以外でもマウスカーソルの位置がテキスト画面のハードウェアスクロールに追従します。 この設定はパラメータ followscrollに保存されます。

#### Interlace インターレース

Fixed a problem that caused display confusion when interlaced. When the process was changed to display screens at regular intervals, interlacing was not adequately handled. インターレースのとき表示が乱れる問題を修正しました。 一定の間隔で画面を表示するように処理を変更したとき、インターレースへの対応が不十分でした。

#### IPLROM 1.6 and crtmod16.x IPLROM 1.6 と crtmod16.x

CRTMOD and G_CLR_ON in IPLROM 1.6 and crtmod16.x are now compatible with the extended graphics screen. Added screen modes 48-73. List of screen modes is here. Returns $16000000+(maximum screen mode) when $76FF is specified. Returns -1 when a screen mode out of range is specified. Returns -2 when a screen mode is specified that requires an extended graphic screen when there is no extended graphic screen. IPLROM 1.6 とcrtmod16.xの CRTMOD と G_CLR_ON を拡張グラフィック画面に対応させました。 画面モード 48～73 を追加しました。画面モードの一覧はこちら。$76FF が指定されたとき $16000000+(画面モードの最大値) を返します。 範囲外の画面モードが指定されたとき -1 を返します。 拡張グラフィック画面がないのに拡張グラフィック画面が必要な画面モードが指定されたとき -2 を返します。

#### crtmodtest.x

crtmodtest.x now supports screen modes 48-73. Sprite screen extensions are reflected when the sprite screen is extended and sprdrv.x is installed. crtmodtest.xを画面モード 48～73 に対応させました。 スプライト画面が拡張されていてsprdrv.xが組み込まれているときスプライト画面の拡張が反映されます。

#### crtmod.fnc

Added crtmod.fnc that is an external function file for X-BASIC 2.02. When combined with IPLROM 1.6 or crtmod16.x, additional screen modes such as 384x256 dots and the extended graphic screen can be easily used with X-BASIC. In screen modes that use the extended graphic screen, conventional drawing functions can be used without modification. X-BASIC 2.02 用の外部関数ファイルcrtmod.fncを追加しました。IPLROM 1.6 または crtmod16.x と組み合わせることで、384x256 ドットなどの追加された画面モードや、拡張グラフィック画面を、X-BASIC で手軽に使えるようになります。 拡張グラフィック画面を使う画面モードでは従来の描画関数がそのまま使えます。

#### Row and column scroll 行スクロールと列スクロール

Added row and column scroll. When the row and column scroll checkbox in the modification menu is turned on, background screen can be scrolled row by row and column by column. This setting is stored in the この設定はparameter sprrcscroll. 行スクロールと列スクロールを追加しました。 改造メニューの行スクロールと列スクロールチェックボックスが ON のとき、バックグラウンド画面を行毎および列毎にスクロールできます。 この設定はパラメータ sprrcscrollに保存されます。

64 words from $00EB2000 are BG0 row scroll registers, 64 words from $00EB2080 are BG1 row scroll registers, 64 words from $00EB2200 are BG0 column scroll registers, and 64 words from $00EB2280 are BG1 column scroll registers. $00EB2000 から 64 ワードが BG0 の行スクロールレジスタ、$00EB2080 から 64 ワードが BG1 の行スクロールレジスタ、$00EB2200 から 64 ワードが BG0 の列スクロールレジスタ、$00EB2280 から 64 ワードが BG1 の列スクロールレジスタです。

#### sprdrv.x

Updated sprdrv.x. SP_INIT can now be used to confirm that sprdrv.x is resident. Added the ability to set and get row and column scroll to BGSCRLST and BGSCRLGT. Fixed a bug that SP_INIT sometimes did not return 0 even though it completed successfully. sprdrv.xを更新しました。SP_INIT で sprdrv.x の常駐確認ができるようにしました。BGSCRLST と BGSCRLGT に行スクロールと列スクロールの設定と取得の機能を追加しました。SP_INIT が正常終了したのに 0 を返さないことがある不具合を修正しました。

#### GIF animation recording GIF アニメーション録画

The process to set the lower limit of the frame interval to 20 ms was missing. Adjust to host refresh rate function was not reflected. フレームの間隔の下限を 20ms とする処理が抜けていたので修正しました。 ホストのリフレッシュレートに合わせるが反映されていなかったので修正しました。

#### TCP/IP port TCP/IP ポート

RS-232C and terminal window now allow selection of TCP/IP ports as well as serial ports. (Thanks yunk) RS-232C とターミナルウインドウで、シリアルポートと同様に TCP/IP ポートを選択できるようにしました。(Thanks yunk)

You can select a port number with the TCP/IP port spinner. This setting is stored in the parameter tcpipport. The default port number is 54321. You can confirm the connection by typing "telnet localhost 54321" in another terminal on the same machine. TCP/IP ポートスピナーでポート番号を選択できます。 この設定はパラメータ tcpipportに保存されます。 デフォルトのポート番号は 54321 です。 同じマシンの別のターミナルで「telnet localhost 54321」と入力すると接続を確認できます。

When the UTF-8 checkbox is ON, the character encoding is converted by assuming SJIS on the AUX side and UTF-8 on the TCP/IP side. This setting is stored in the parameter tcpiputf8. UTF-8 チェックボックスが ON のとき、AUX 側を SJIS、TCP/IP 側を UTF-8 と見なして文字コードを変換します。 この設定はパラメータ tcpiputf8に保存されます。

### 0.25.06.08

#### Restore window ウインドウの復元

When restoring a window, the process of finding the screen where the window fits was missing. (Thanks ついっこー (Kotaro Horie)) ウインドウを復元するときウインドウが収まる画面を探す処理が抜け落ちていました。(Thanks ついっこー (Kotaro Horie))

#### RS-232C and terminal RS-232C とターミナル

Added 230400bps to the baud rate options when connecting a serial port to a terminal in the RS-232C and terminal window. RS-232C とターミナルウインドウで、シリアルポートとターミナルを接続するときのボーレートの選択肢に、230400bps を追加しました。

#### Extended graphic screen 拡張グラフィック画面

GVRAM in the extended graphic screen has been integrated with GVRAM in the standard graphic screen. Clearing GVRAM in memory mode 7 also clears GVRAM in memory modes 0, 1, 3, 4, and 5. 拡張グラフィック画面の GVRAM を標準のグラフィック画面の GVRAM と統合しました。 メモリモード 7 の GVRAM をクリアするとメモリモード 0,1,3,4,5 の GVRAM もクリアされます。

#### Rapid clear 高速クリア

Corrected the range of rapid clearing on the graphic screen. グラフィック画面の高速クリアの範囲を修正しました。

#### Data break point データブレークポイント

Fixed a bug that forgot to delete read and write checkboxes when deleting data breakpoints. (Thanks ついっこー (Kotaro Horie)) データブレークポイントを削除するときリードチェックボックスとライトチェックボックスを削除し忘れるバグを修正しました。(Thanks ついっこー (Kotaro Horie))

#### Disassemble list 逆アセンブルリスト

The address and/or offset button have been added. At the beginning of a line in the disassembly list, at the relative branch instruction, and at the program counter relative addressing and absolute long addressing locations, the address is normally displayed, but you can choose whether to display the address or the offset there. When the address and/or offset button is "$", the address is displayed; when it is "L", the offset is displayed; and when it is "$L", both the address and offset are displayed. アドレスとオフセットボタンを追加しました。 逆アセンブルリストの行頭、相対分岐命令、プログラムカウンタ相対アドレッシングおよび絶対ロングアドレッシングの場所には、通常はアドレスが表示されますが、そこにアドレスとオフセットのどちらを表示するか選択できます。 アドレスとオフセットボタンが「$」のときはアドレスが、「L」のときはオフセットが、「$L」のときはアドレスとオフセットの両方が表示されます。

The program name combo box has been added. By selecting device drivers, resident programs, or running programs, you can enter the offset from the top of the program instead of the address in the address spinner. プログラム名コンボボックスを追加しました。デバイスドライバ、常駐プログラム、実行中のプログラムを選択することで、アドレススピナーでアドレスの代わりにプログラムの先頭からのオフセットを入力できます。

When a program name is duplicated, a serial number is added to the end of the program name. プログラム名が重複しているときプログラム名の末尾に通し番号が付きます。

You can scroll with the mouse wheel. マウスホイールでスクロールできます。

### 0.25.05.08

#### Execution environment 実行環境

As of this writing, the latest OpenJDK is 24.0.1. Older versions of JDK may not work. Please use the latest OpenJDK if possible. これを書いている時点で最新の OpenJDK は 24.0.1 です。 これより古いバージョンの JDK では動作しないかも知れません。 可能な限り最新の OpenJDK を使用してください。

#### Manifest file マニフェストファイル

The following line has been added to the manifest file to suppress warning messages about the use of JNI. JNI の使用に対する警告メッセージを抑制するため、マニフェストファイルに以下の 1 行を追加しました。

    Enable-Native-Access: ALL-UNNAMED

#### Disassembler 逆アセンブラ

Adjusted the number of spaces on the right side of st.b/sf.b. st.b/sf.b の右側の空白の数を調整しました。

#### sprdrv.x (2025-04-10)

Changed the numbering of sprites in the argument of IOCS _SP_REGST/_SP_REGGT to a form with packed missing numbers. Modified IOCS _BGTEXTST. IOCS _SP_REGST/_SP_REGGT の引数のスプライトの番号を、欠番を詰めた形式に変更しました。IOCS _BGTEXTST を修正しました。

#### spr1016test.x

Followed changes in sprdrv.x. sprdrv.x の変更に追従しました。

#### Keyboard キーボード

The use of threads for keystrokes has been changed. キー入力時のスレッドの使い方を変更しました。

Fixed a problem in which changing the keyboard availability while in full-screen mode would cause the keyboard availability to revert to the state before the change when the full-screen mode was exited. 全画面表示中にキーボードの有無を変更すると、全画面表示を終了したときに、キーボードの有無が変更する前の状態に戻ってしまう問題を修正しました。

Keys have been removed from the full screen radio button in the display menu and the seamless mouse checkbox in the input menu. The function of the F11 and F12 keys can be changed using the F11/F12 and button function assignments window. 画面メニューの全画面表示ラジオボタンと入力メニューのシームレスマウスチェックボックスからキーの表示を削除しました。F11 キーと F12 キーの機能はF11/F12 およびボタン機能割り当てウインドウで変更できます。

#### crtmod16.s/crtmodtest.s/stupsnd.s

Corrected stou. (Thanks TcbnErik) stou を修正しました。(Thanks TcbnErik)

#### XInput

The technology used to process XInput has been changed from JNI to a standard API derived from Project Panama. XInput の処理に使用する技術を JNI から Project Panama 由来の標準 API に変更しました。

#### Sprite controller スプライトコントローラ

Fixed a problem in which bits 6, 7, and 8 of $00EB0808 were not fixed to 0. $00EB0808 の bit6,7,8 が 0 に固定されていなかった問題を修正しました。

Bit 10 of $00EB0808 is implemented. When this bit is 1, writing to the pattern/text area is ignored and reading it returns $FFFF. $00EB0808 の bit10 を実装しました。 このビットが 1 のとき、パターン / テキストエリアへ書き込むと無視され、読み出すと $FFFF が返ります。

Although there is no proof, bit 10 of $00EB0808 and bit 2 of the priority word in the sprite scroll register are both considered to be bits for selecting the chip select signal output from the sprite controller CYNTHIA. A 32 KB SRAM is connected to the XPC0/PCS0 pin of the CYNTHIA, but the XPC1/PCS1 pin is unconnected. Since no memory is connected to XPC1/PCS1, it is believed that writing to the pattern/text area is ignored and reading back returns $FFFF, resulting in the sprite appearing tofu. 確証はありませんが、$00EB0808 の bit10 とスプライトスクロールレジスタのプライオリティワードの bit2 はいずれも、スプライトコントローラ CYNTHIA から出力されるチップセレクト信号を選択するためのビットであると考えられます。CYNTHIA の XPC0/PCS0 ピンには 32KB の SRAM が接続されていますが、XPC1/PCS1 ピンは非接続です。XPC1/PCS1 ピンにメモリが接続されていないため、パターン / テキストエリアへ書き込むと無視され、読み出すと $FFFF が返り、その結果スプライトが豆腐に見えるのだと考えられます。

#### Wait cycle ウェイトサイクル

Added wait cycles to the sprite scroll register and pattern area. スプライトスクロールレジスタとパターンエリアにウェイトサイクルを追加しました。

#### Minimum screen width 画面の最小幅

The minimum screen width was changed from 256 dots to 64 dots. 画面の最小幅を 256 ドットから 64 ドットに変更しました。

#### MFP

Fixed timer behavior. タイマーの動作を修正しました。

#### Modification menu 改造メニュー

Organized modification menu. 改造メニューを整理しました。

#### Drawing improvements 描画の改善

##### Draw screen at regular intervals 一定の間隔で画面を描画する

The drawing method has been changed from a virtual time vertical cycle to a real time vertical cycle. 仮想時間の垂直周期で行っていた描画を実時間の垂直周期で行う方法に変更しました。

##### Use canvas キャンバスを使う

The canvas is used by default to lighten the drawing process. 描画の処理を軽くするためデフォルトでキャンバスを使います。

The use canvas checkbox in the display menu allows you to choose whether to use the canvas. This setting is saved in the parameter usecanvas. You need to re-launch XEiJ for the changes to take effect. 画面メニューのキャンバスを使うチェックボックスでキャンバスを使うか選択できます。 この設定はパラメータ usecanvasに保存されます。 変更を反映させるには XEiJ を起動し直す必要があります。

##### Adjust to host refresh rate ホストのリフレッシュレートに合わせる

Added adjust to host refresh rate. ホストのリフレッシュレートに合わせるを追加しました。

Adjust VSYNC frequency to the host refresh rate. When the adjust to host refresh rate checkbox in the modification menu is ON, the dot clock frequency is adjusted so that they match if the host refresh rate is 0.75 to 1.25 times the vertical sync frequency. Changes will take effect immediately. This setting is saved in the parameter adjustvsync. 垂直同期周波数をホストのリフレッシュレートに合わせます。 改造メニューのホストのリフレッシュレートに合わせるチェックボックスが ON のとき、ホストのリフレッシュレートが垂直同期周波数の 0.75～1.25 倍ならばそれらが一致するようにドットクロック周波数を調整します。 変更は直ちに反映されます。 この設定はパラメータ adjustvsyncに保存されます。

The host refresh rate text field in the modification menu allows you to specify the host refresh rate. If not specified, DisplayMode.getRefreshRate() is used to try to get the refresh rate. If it is not specified and cannot be obtained, 59.94 Hz is used. Changes will take effect immediately. This setting is saved in the parameter refreshrate. 改造メニューのホストのリフレッシュレートテキストフィールドでホストのリフレッシュレートを指定できます。 指定がないときは DisplayMode.getRefreshRate() を用いてリフレッシュレートの取得を試みます。 指定がなく取得もできなかったときは 59.94Hz を使用します。 変更は直ちに反映されます。 この設定はパラメータ refreshrateに保存されます。

The current vertical sync frequency can be checked with the screen mode test window. 現在の垂直同期周波数は表示モードテストウィンドウで確認できます。

To quickly check the effect, use "echo ^[[?4h" (for ^[, press the ESC key twice) to put the console in 8-dot smooth scroll mode and then display a long text file. If you do not match the refresh rate of the host, the scrolling will rattle, but if you do, the scrolling will be smooth. If you set "mew d0a 1" in db.x to 4-dot smooth scroll mode, the smoothness will increase. 手っ取り早く効果を確認するには、「echo ^[[?4h」(^[は ESC キーを 2 回押す) でコンソールを 8 ドットスムーススクロールモードにしてから長いテキストファイルを表示するとよいでしょう。 ホストのリフレッシュレートに合わせないとガタガタとスクロールしますが、合わせるとスムースにスクロールします。db.x で「mew d0a 1」として 4 ドットスムーススクロールモードにするとヌルヌル感が増します。

With these changes, the intermittent drawing mode has been discontinued. Intermittent drawing mode was a product of the days when it was not possible to draw every frame. It may now be difficult to run XEiJ in environments that are so unpowered that intermittent drawing mode is necessary. これらの変更に伴い、間欠描画モードを廃止しました。 間欠描画モードはすべてのフレームを描画することができなかった時代の産物です。 間欠描画モードが必要なほど非力な環境で XEiJ を動かすことは難しくなったかも知れません。

#### Full screen and maximized 全画面表示と最大化

Since I could not find a way to have the menu bar and canvas coexist in full screen, I have added and modified functions in the direction of using full screen when you want to immerse yourself in the X68000 screen and maximized when you want to make the window wider. 全画面表示の状態でメニューバーとキャンバスを共存させる方法を見つけられなかったので、全画面表示は X68000 の画面に没入したいときに使い、ウインドウを広くしたいときは最大化を使う方向で、機能の追加と修正を行いました。

The F11/F12 and button function assignments window allows you to assign a key or button to toggle full screen and maximized. By default, the F11 key is assigned to toggle full screen and the Shift+F11 key is assigned to toggle maximized. Either key or button can be used to exit both full screen and maximized. F11/F12 およびボタン機能割り当てウィンドウで、キーまたはボタンに全画面表示の切り替えと最大化の切り替えを割り当てることができます。 デフォルトで F11 キーに全画面表示の切り替えが、Shift+F11 キーに最大化の切り替えが割り当てられています。 全画面表示の切り替えと最大化の切り替えのどちらのキーまたはボタンでも、全画面表示と最大化の両方を終了させることができます。

Selecting full screen radio button in the display menu will bring the window into full screen, while selecting maximized radio button will maximize the window. The menu bar is not displayed while in full screen, so it is not possible to exit full screen via the menu. It is not possible to switch to full screen without a key or button assigned to exit full screen. 画面メニューの全画面表示ラジオボタンを選択するとウインドウが全画面表示になり、最大化ラジオボタンを選択するとウインドウが最大化します。 全画面表示の間はメニューバーが表示されないので、メニューで全画面表示を終了させることはできません。 全画面表示を終了させるキーまたはボタンが割り当てられていない状態で全画面表示に切り替えることはできないようにしてあります。

A bubble will appear for 5 seconds after switching to full screen, indicating the key or button to exit full screen. 全画面表示に切り替えてから 5 秒間、全画面表示を終了させるキーまたはボタンを知らせるバブルが表示されます。

When the hide keyboard in full screen checkbox in the input menu is ON, the keyboard is turned off when going to full screen and turned back on when exiting full screen. If the keyboard is changed by pressing Alt+Shift+K while in full screen, it will not be restored. This setting is saved in the parameter hidekeyboard. 入力メニューの全画面表示のときキーボードを隠すチェックボックスが ON のとき、全画面表示へ移行するときキーボードが消え、全画面表示を終了するとき元に戻ります。 全画面表示中に Alt+Shift+K でキーボードの有無を変更した場合は元に戻りません。 この設定はパラメータ hidekeyboardに保存されます。

There was a function to hide the keyboard when stereoscopic viewing and full screen were used together, but it has been eliminated because it was redundant. 立体視と全画面表示を併用したときキーボードを非表示にする機能がありましたが、重複するので廃止しました。

#### RS-232C and terminal RS-232C とターミナル

Added 50000bps to the baud rate options when connecting a serial port to a terminal in the RS-232C and terminal window. When the USB-RS232C converter supports 50000bps, setting X680x0 to asynchronous 51200bps (theoretical value 52083bps) seems to be able to connect just barely, although there is a 4% error margin. RS-232C とターミナルウインドウで、シリアルポートとターミナルを接続するときのボーレートの選択肢に、50000bps を追加しました。USB-RS232C 変換器が 50000bps に対応しているとき、X680x0 を非同期 51200bps(理論値 52083bps) に設定すると、誤差が 4% あるものの、ぎりぎり接続できるようです。

#### 38400bps.x/51200bps.x

Added 38400bps.x and 51200bps.x. 38400bps.xと51200bps.xを追加しました。

## 3. Past changes 過去の更新 ▶

## 4. Download ダウンロード

- XEiJ_0250708.zip (38737KB)…XEiJ (X68000 Emulator in Java) version 0.25.07.08

――Read more―――― 続きを読む ―― ――Hide more―――― 続きを隠す ――

- XEiJ_0250608.zip (38034KB)…XEiJ (X68000 Emulator in Java) version 0.25.06.08

## 5. Install インストール ▶

## 6. Explanation of menu メニューの説明 ▶

## 7. Configuration file 設定ファイル ▶

## 8. Parameters パラメータ ▶

## 9. Source code ソースコード ▶

## 10. Functions and features 機能と特徴 ▶

## 11. About IPLROM 1.6 IPLROM 1.6 について ▶

## 12. Explanation of misc/* misc/* の説明 ▶

## 13. Execution examples 実行サンプル ▶

## 14. Try to run the NetBSD/x68k NetBSD/x68k を動かしてみる ▶

## 15. Reference materials 参考資料 ▶

## 16. Link collection リンク集 ▶

## 17. License / Copyright / Disclaimer 使用許諾条件 / 著作権 / 免責事項 ▶

## 18. Acknowledgement 謝辞

I would like to thank: Right-holder companies and staffs of the SHARP PRODUCTS USERS FORUM who made efforts to distribute the basic software products of X68000 for free to the public. Keitarou Hiraki and Num Kadoma, they distribute beautiful fonts. Authors of free software that are used as execution examples of XEiJ. Everyone who reported problems and supported XEiJ by warm messages. X68000 の基本的なソフトウェアの無償公開に尽力された権利各社およびシャープ・プロダクツ・ユーザーズ・フォーラムの方々、美しいフォントを公開されている平木敬太郎さん、門真なむさん、実行サンプルとして使わせていただいたフリーソフトウェアの作者の方々、動作報告と応援のメッセージを寄せてくださった皆さん、ありがとうございます。

## 19. Contact information 連絡先

### Makoto Kamada

#### X

@kamadox

#### Discord

kamadox68k

#### E-mail メール

STUDIO KAMADA
Copyright © 1999-2025 Makoto Kamada