アプリの build.gradle の dependencies
に以下を追加してください。
implementation 'com.suzukiplan:msx2:0.1'
micro-msx2p を簡単に扱える Android 用の View です
(基本的な使い方)
1. activity_main.xml などで定義
<com.suzukiplan.msx2.MSX2View
android:id="@+id/emulator"
android:layout_width="match_parent"
android:layout_height="match_parent" />
MSX2+ の画面領域(568x480)は
MSX2View
内で aspect-fit で配置されます。View の画角が 568:480 と異なる場合、上下または左右に黒色の帯が表示されます。
MSX2View
はレイアウトで配置した状態だと初期化待ち状態(ブラックスクリーン)になります。
Activity や Fragment 上で MSX2View.initialize
を呼び出し、初期化処理を行うことで動き始めます。
executor.execute {
msx2View.initialize(
0x1B, // SELECT ボタンのキー割当 (0x1B = ESC)
0x20, // START ボタンのキー割当 (0x20 = SPACE)
assets.open("cbios_main_msx2+_jp.rom").readBytes(),
assets.open("cbios_logo_msx2+.rom").readBytes(),
assets.open("cbios_sub.rom").readBytes(),
assets.open("game.rom").readBytes(),
RomType.NORMAL
)
}
MSX2View
を扱う Activity または Fragment 上で MSX2View.Delegate
の実装を行います。
class MainActivity : AppCompatActivity(), MSX2View.Delegate {
private lateinit var msx2View: MSX2View
private val joyPad = JoyPad()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
msx2View = findViewById(R.id.emulator)
msx2View.delegate = this
:
}
// 毎フレームコールバックされる(入力キーコードを返す)
override fun msx2ViewDidRequirePad1Code() = joyPad.code
// エミュレータ起動時(動作直前)に呼び出される(quickLoadで状態復元を行う)
override fun msx2ViewDidStart() {
val save = File(applicationContext.cacheDir, "save.dat")
if (save.exists()) {
val data = save.readBytes()
msx2View.quickLoad(data)
}
}
// エミュレータ停止時(破棄直前)に呼び出される(quickSaveで状態保持を行う)
override fun msx2ViewDidStop() {
val save = msx2View.quickSave() ?: return
File(applicationContext.cacheDir, "save.dat").writeBytes(save)
}
}
MSX2View
は SurfaceView
の派生クラスで、micro-msx2p のインスタンスはサーフェースのライフサイクルに従います。そして、サーフェースはアプリを終了する時やホーム画面に戻った時に破棄されます。そこで、基本的には上記で例に示しているように、クイックセーブ・ロードで状態の保持を復元を行うことを想定しています。これにより、ゲームプレイ中に突然電話が鳴ってきても、電話応対後にアプリを起動すれば状態を維持することができます。
なお MSX2View.Delegate
の全てのコールバックは、サブスレッドから呼び出されます。
app ディレクトリ以下が MSX2View
を用いたアプリケーション実装の例です。
- MainActivity.kt の実装を見れば
MSX2View
の使い方を簡単に把握できるようになっています - Android Studio でビルドすれば assets に組み込まれた game.rom が起動します
- デフォルトの game.rom は
Hello, World!
を表示するシンプルな ROM ファイルです - game.rom を置き換えることで任意のゲームを起動できます
- メガロムを起動する時は
MSX2View.initialize
に指定しているRomType
を適切に変更してください
MSX2View
を用いることで、Androidで簡単に micro-msx2p を用いることができますが、JNI インタフェースをそのまま利用できる Coreクラス を用いることで、micro-msx2p の全ての機能を活用した高度なプログラムを開発することもできます。
本プログラムには次の OSS が含まれています。利用に当たっては、著作権(財産権)及び著作者人格権は各作者に帰属する点の理解と、ライセンス条項の厳守をお願いいたします。
- Android Open Source Project
- Web Site: https://source.android.com/
- License: Apache License, Version 2.0
- LZ4 Library
- Web Site: https://github.com/lz4/lz4 - lib
- License: 2-Clause BSD
Copyright (c) 2011-2020, Yann Collet
- C-BIOS
- Web Site: https://cbios.sourceforge.net/
- License: 2-Clause BSD
Copyright (c) 2002-2005 BouKiCHi. All rights reserved.
Copyright (c) 2003 Reikan. All rights reserved.
Copyright (c) 2004-2006,2008-2010 Maarten ter Huurne. All rights reserved.
Copyright (c) 2004-2006,2008-2011 Albert Beevendorp. All rights reserved.
Copyright (c) 2004-2005 Patrick van Arkel. All rights reserved.
Copyright (c) 2004,2010-2011 Manuel Bilderbeek. All rights reserved.
Copyright (c) 2004-2006 Joost Yervante Damad. All rights reserved.
Copyright (c) 2004-2006 Jussi Pitkänen. All rights reserved.
Copyright (c) 2004-2007 Eric Boon. All rights reserved.
- emu2413
- Web Site: https://github.com/digital-sound-antiques/emu2413
- License: MIT
Copyright (c) 2001-2019 Mitsutaka Okazaki
- SUZUKI PLAN - Z80 Emulator
- Web Site: https://github.com/suzukiplan/z80
- License: MIT
Copyright (c) 2019 Yoji Suzuki.
- micro MSX2+
- Web Site: https://github.com/suzukiplan/micro-msx2p
- License: MIT
Copyright (c) 2023 Yoji Suzuki.
appディレクトリ配下とmsx2ディレクトリ配下のソースコードは全て micro MSX2+ の一部として同じライセンス下で利用可能です。