スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


X68000エミュレータPX68KをiOSに移植する(準備編その2)

そんなわけで、X68000エミュをiOSデバイスでも動かそうということで前回の続きです。

開発がらみの話で興味のない方はすみません。ちゃんとメモしておかないと忘れてしまうので半分は自分用です。
まぁ、XcodeのようなIDEはバージョンアップでUIがころころ変わったりして、メモが役立たなくなることも多々ありますが...

前回はPX68Kが利用するSDLライブラリの作成を行いましたので、今回はPX68K本体のプロジェクトを作成し、Xcodeに付属のiOSシミュレータ上でPX68K for iOSを動作させるところまで解説したいと思います。

最終的にはこんな感じになります。
スクリーンショット 2013-12-02 午後35548


■Mac OS XにGitHub上のpx68kレポジトリをcloneする

まずは、Github上のpx68kレポジトリを取得します。
今回は~/src以下に展開しています。

cd src
git clone http://github.com/hissorii/px68k


■Xcodeで空のプロジェクトを作成

Xcodeを起動します。
[Create a new Xcode project]を選択します。
スクリーンショット 2013-11-28 午前104108

次に [iOS/Application] -> [Empty Application] を選択して、[Next]をクリックします。
スクリーンショット 2013-11-28 午前104430

プロダクト名等を適当に入力し、[Next]をクリック。
スクリーンショット 2013-11-28 午前104800

プロジェクトを作成するディレクトリを指定します。今回は~/src/px68kにgitリポジトリを展開しているので、その直下に作成します。
[Source Control]については、既にGitHub上にリポジトリがあるので、チェックしません。
ディレクトリ指定ができたら、[Create]をクリックします。
スクリーンショット 2013-11-28 午前105352

これで、px68k向けのプロジェクトが作成されました。
スクリーンショット 2013-11-28 午前110140


コマンドラインからも確認しておきます。
~/src/px68kディレクトリ直下に、新たにpx68k-iosディレクトリができています。

hissoriis-Mac:px68k hissorii$ ls -F
Imakefile config.tmpl icons/ px68k-ios/ x68k/
Makefile develop.txt kaiseki.txt readme.txt xkeropi.man
Makefile.psp doc/ m68000/ win32api/
README.ja fmgen/ px68k-android/ x11/
hissoriis-Mac:px68k hissorii$


git statusの結果は以下の通り。
いろいろとファイルが作成されています。

hissoriis-Mac:px68k hissorii$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD ..." to unstage)
#
# new file: px68k-ios/px68k-ios.xcodeproj/project.pbxproj
# new file: px68k-ios/px68k-ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata
# new file: px68k-ios/px68k-ios.xcodeproj/project.xcworkspace/xcuserdata/hissorii.xcuserdatad/UserInterfaceState.xcuserstate
# new file: px68k-ios/px68k-ios.xcodeproj/xcuserdata/hissorii.xcuserdatad/xcschemes/px68k-ios.xcscheme
# new file: px68k-ios/px68k-ios/AppDelegate.h
# new file: px68k-ios/px68k-ios/AppDelegate.m
# new file: px68k-ios/px68k-ios/Images.xcassets/AppIcon.appiconset/Contents.json
# new file: px68k-ios/px68k-ios/Images.xcassets/LaunchImage.launchimage/Contents.json
# new file: px68k-ios/px68k-ios/en.lproj/InfoPlist.strings
# new file: px68k-ios/px68k-ios/main.m
# new file: px68k-ios/px68k-ios/px68k-ios-Info.plist
# new file: px68k-ios/px68k-ios/px68k-ios-Prefix.pch
# new file: px68k-ios/px68k-iosTests/en.lproj/InfoPlist.strings
# new file: px68k-ios/px68k-iosTests/px68k-iosTests-Info.plist
# new file: px68k-ios/px68k-iosTests/px68k_iosTests.m
#
# Changes not staged for commit:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
# modified: px68k-ios/px68k-ios.xcodeproj/project.xcworkspace/xcuserdata/hissorii.xcuserdatad/UserInterfaceState.xcuserstate
# modified: px68k-ios/px68k-ios.xcodeproj/xcuserdata/hissorii.xcuserdatad/xcschemes/px68k-ios.xcscheme
#
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# px68k-ios/px68k-ios.xcodeproj/xcuserdata/hissorii.xcuserdatad/xcschemes/xcschememanagement.plist
hissoriis-Mac:px68k hissorii$



■不要ファイルの削除と、px68k関連ファイルのプロジェクトへの追加

今回プロジェクトはEmpty Applicationとして作成しています。このままでは何もしないスケルトンアプリができるだけなので、不要なファイルを削除し、px68kのソースを追加していくことで、px68kプロジェクトに仕上げていきます。

まずは、px68k-iosフォルダの下のAppDelegate.hを右クリックで[Delete] -> [Move to Trash]します。
[Remove Reference]を選んだ場合は、プロジェクトから参照しなくなるだけでソースファイルの実態は消えないようです。
今回は、スケルトンアプリのソースは不要なので[Move to Trash]を選んでいます。
スクリーンショット 2013-11-28 午前112149

同様に、px68k-ios/AppDelegate.m、px68k-ios/Supporting Files/main.m を右クリックでDelete -> [Move to Trash]で削除します。
まだ削れるファイルもありそうですが、よく分からないのでとりあえずここまで。

次に、px68kのソースファイルをプロジェクトに登録していきます。

メニューから[File]->[Add Files to "px68k-ios"...]を選択します。

[Destination]のチェックはoffのままにします。これをチェックするとプロジェクト内に追加したソースファイルがコピーされてしまいます。
[Folders]に関してはよく分からないのでデフォルトで。
[Add to targets]はpx68k-iosを選択。
スクリーンショット 2013-11-28 午前114150

px68kディレクトリ直下のfmgen、m68000、win32api、x11、x68kの各フォルダを選択して[Add]をクリックします。複数選択はコマンドボタンを押しながら。
スクリーンショット 2013-11-28 午前115138

すると、左側のツリーに、今登録したフォルダが出現します。
スクリーンショット 2013-11-28 午前115459

この状態では、コンパイル不要なファイルまでコンパイル対象として登録されています。
すでに使っていないアセンブリファイル等はプロジェクトの対象から外しておきます。

ツリーからファイルを選択し、右クリックで[Delete]->[Remove Reference]でプロジェクトから外します。
間違って[Move to Trash]を選んでしまうと、gitで管理しているファイルそのものがゴミ箱に捨てられてしまうので注意。

以下がXcodeのコンパイル対象から除外するファイルです。

x68k/68kem.asm, x68k/bg.x86 x68k/bga.asm x68k/comptab.asm, x68k/memory.asm x68k/memory_glue.asm, x11/haveunit.asm
x11/keyconf.c, x11/mkcgrom.c, x68k/cpu_glue.c, x11/mk_kbdtbl.c


x11/mk_kbttbl.cはkbttblの配列を生成する個別プログラムですが、px68k本体には含みません。
それ以外は不要なファイルなので、今後ソース整理の時にでもpx68kレポジトリから削除しておきます。

また、m68000/c68k_ini.c、m68000/c68k_op.cに関しては、他の.cファイルからincludeされることが前提のファイルです。
これらはプロジェクトには含めるが、このファイル単体でコンパイルするとエラーになるので、ファイルを選択後、画面右側の[Target Membership]のpx68k-iosのチェックを外しておきます。
スクリーンショット 2013-11-28 午後32117


■とりあえずビルドテストしてみる

とりあえずここでビルドテストをしてみます。
[Product]->[Scheme]でpx68k-iosのチェックを確認します。
[Product]->[Destination]でiOS SimulatorのiPhone Retina (3.5-inch)を選択します。
スクリーンショット 2013-11-28 午後34132

ここで[Product]->[Build]を選択し、ビルドを開始します。
いくつかエラーが出て止まりました。
px68kで使っているvlineという変数名が、includeしたシステムヘッダの中で定義される関数名vline()とかぶってしまったようです。
スクリーンショット 2013-11-28 午後40252

仕方がないので、workaroundを入れます。
うむ、かっこ悪いな。

hissoriis-Mac:px68k hissorii$ git diff x11/winx68k.h
diff --git a/x11/winx68k.h b/x11/winx68k.h
index f7069e1..7b13b96 100644
--- a/x11/winx68k.h
+++ b/x11/winx68k.h
@@ -3,6 +3,8 @@

#include "common.h"

+#define vline HOGEvline // workaround for redefinition of 'vline'
+
#define SCREEN_WIDTH 768
#define SCREEN_HEIGHT 512

hissoriis-Mac:px68k hissorii$


続けて[Product]->[Build]を実行してエラーをぶちぶちつぶしていきます。
#include で<>の代わりに""使えとか、IDEちゃんは親切ですね。
unix/psp/Android版に影響が出ないか後で確認しないといけませんが、とりあえずゴリゴリ修正します。
スクリーンショット 2013-11-28 午後41515


■SDLのヘッダファイル登録

2か所程、includeの<>を""に修正した後のビルドで、SDL.hが見つからないというエラーになりました。
SDLの下準備に関しては、前回の記事を参照していただくとして、現状はpx68kのレポジトリとSDL2のソースは以下の様なディレクトリ配置になっており、SDL.hを含むSDL関連のヘッダファイルは~/src/SDL2-2.0.1/include以下にあります。

~/src +-- px68k (px68kレポジトリ)
| |
| +--- px68k-ios (今回作成したXcodeプロジェクト)
|
+-- SDL2-2.0.1 (SDL2のソース)
|
+---include (SDLのヘッダファイル)


Xcodeにヘッダファイルの探索場所として../../SDL2-2.0.1/includeを教えてあげます。

まず、以下の画面のpx68k-iosという青いアイコンをダブルクリックします。
スクリーンショット 2013-11-28 午後92114

次に、General Capabilities Info ... と並んでいる中のGeneralをクリック。
SDLのヘッダとは関係ないですが、ここでDeployment InfoのDeployment Target を6.1に変更しておきます。
プロジェクトの対象iOSバージョンが6.1以上、ということになります。
スクリーンショット 2013-11-28 午後92454

次に、General Capabilities Info ... と並んでいる中のBuild Settingsをクリック。
Basic Allと並んでいる個所のAllをクリック。
Search PathsのHeader Search Pathsの右側、/Application/Xcode.app/... と表示されている部分をダブルクリックすると、小さなポップウィンドウが出ます。
ポップウィンドウの左下の+をクリックし、../../SDL2-2.0.1/includeを追加します。
スクリーンショット 2013-11-28 午後93714

ここまで来たら、[Product]->[Build]に再挑戦してみます。
いくつかエラーになりましたが、ちょこっと修正。

個々のファイルのコンパイルは完了し、リンクフェーズで、やっとSDLの関数が見つからないというエラーまでたどり着きました。
もう少し。
スクリーンショット 2013-11-28 午後102655

■SDLライブラリの登録

ここでやっと、前回の記事で作成したSDLのスタティックリンクライブラリ、libSDL2.aの出番になります。
まず、~/src/px68k/px68k-iosに移動し、libsdl/debug, libsdl/release とディレクトリを作成します。

hissoriis-Mac:px68k-ios hissorii$ cd ~/src/px68k/px68k-ios/
hissoriis-Mac:px68k-ios hissorii$ mkdir -p libsdl/{debug,release}


そして、前回の記事で作成した、debug/iOSシミュ用と、release/実機デバイス用の二つのlibSDL2.aをコピーします。

hissoriis-Mac:px68k-ios hissorii$ cp -p ~/Library/Developer/Xcode/DerivedData/SDL-bydmekuazgquqgarccdpapcovtbe/Build/Products/Debug-iphonesimulator/libSDL2.a libsdl/debug/
hissoriis-Mac:px68k-ios hissorii$ cp -p ~/Library/Developer/Xcode/DerivedData/SDL-bydmekuazgquqgarccdpapcovtbe/Build/Intermediates/ArchiveIntermediates/libSDL/BuildProductsPath/Release-iphoneos/libSDL2.a libsdl/release/


次にXcodeにライブラリファイルの場所を教えてあげます。
ヘッダファイルのパスを指定した時と同じように、XcodeでBuild Settings、Allを選択し、Search PathsのLibrary Search Pathsを選ぶと、debug/releaseの二つの項目がありますので、それぞれlibsdl/debug, libsdl/releaseを指定します。
スクリーンショット 2013-11-28 午後105554

次に、Linkingの中のOther Linker Flagsに-lSDL2を追加します。
これはリンカに渡す引数になります。-lSDL2と指定することで、libSDL2.aをリンクしてくれます。
外部ライブラリのXcodeへの指定法はもっとスマートな方法があるような気がしますが、とりあえず良しとしましょう。

■SDLライブラリが使用するiOS frameworkの登録

ここで、[Product]->[Build]に再挑戦します。
今度は_Audio~とか_gl~等のSDLライブラリが呼び出しているAudioやOpenGL ESのシステム側関数が見つからない旨のエラーが出ましたので追加します。

[General]の[Linked Frameworks and Libraries]にAudioToolbox.framework, CoreAudio.framework, OpenGLES.framework, QuartzCore.framework を追加します。
スクリーンショット 2013-11-28 午後111217

ここまでで、やっとビルドがエラーなくバイナリ作成まで到着です。warningはやたら出ていますが...

■とりあえずiOSシミュレータ上で動作させる

現状のリポジトリから持ってきたままのpx68kソースでは、iOSではOpenGL ESが使えず、メニューも封印状態です。
とりあえず最低限の動作確認ができるように、カレントディレクトリのFDD1.XDFを強制的に読み込むのと、BIOSの読み込み場所をiOS向けに変更するなど、ソースを修正します。

それから、iOSシミュレータがデフォルトではiOS7用しかインストールされていなかったので、別途iOS6.1用のシミュレータも追加インストールしています。

jailbreak済みの実機では、/var/mobile/px68kディレクトリにBIOSやディスクイメージを置くようにしますが、apple純正のiOSシミュレータでは、アプリは自分自身のディレクトリ以外は読み書きできないようなので、アプリのディレクトリ直下に、.keropiディレクトリを配置します。
アプリのディレクトリ名は数値の羅列でよくわかりませんが。

~/Library/Application Support/iPhone Simulator/6.1/Applications/0273BAFF-3F6D-4C22-AC67-358D54D515A3/.keropi


上記はiOS6.1シミュの場合で、iOS7の場合は、ディレクトリ名が7.0.3になっています。アプリディレクトリの数値の羅列もiOS6とiOS7とで変化するようです。

また、メニューがなくてFDイメージ選択ができないので、HumanのFDイメージをFDD1.XDFと変更し、以下のディレクトリに置きます。

~/Library/Application Support/iPhone Simulator/6.1/Applications/0273BAFF-3F6D-4C22-AC67-358D54D515A3/px68k-ios.app/


さらに、プロジェクトのGeneral->Deployment InfoのDevice Orientaionで、Portrait/Upside Downのチェックを外します。
こうすることで、強制的にLandscape(端末横向き)表示できるようになります。
iPadについても同様にチェックを外します。
スクリーンショット 2013-12-01 午前14859

メニューの[Product]->[Destination]にiOSシミュレータのいずれかのデバイスを選択している状態で、[Product]->[Run]を選択すれば、必要であればビルドを実行後、iOSシミュレータが起動し、自動的にpx68kが実行されます。
Human68kの実行画面までたどり着きました。
スクリーンショット 2013-12-02 午後40253

ふぅ、ここまでが、Twitter上で報告した11/15時点の作業内容です。
次は、実機での動作確認と、OpenGL ESを使った画面描画に対応しようかな、と思います。

ではでは。


Comment

[277] 管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

[278] Re: タイトルなし

実機へ出すのは、以下を参考にしました。

http://www.sysrage.net/guides/ios-programming/building-and-running-ios-applications-without-a-paid-developer-license

ただし、ldidコマンドの作成は、コンパイルエラーが回避出来なかったのでググってバイナリを探してきました。

上記でも解決できなければ再度ご相談ください。

[279] 管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

[280] Re: 返信ありがとうございます

> 先にも述べた様にiOSシミュでは問題なく(11/15時点の作業内容)までの分は動いています。
> 例えばiPhone実機への時に出たエラーメッセージは以下の様な感じです。
> !Apple Mach-O Linker Error
> Linker command failed with exit code 1(use -v to see inovocation)
>
> ld:warning:ignoring file libsdl/debug/libSDL2.a,file was built for archive which is not the architecture being linked (arm64):libsdl/debug/libSDL2.a
> ld:entry point (_main) undefined. for architecture arm64
> clang: error:linker command failede with exit code 1 (use -v to see invocation)

実機に出せないのではなくて、ビルドできていないのですね。
[Destination]を[iOS Device]にしている場合は、[Product]->[Archive]でバイナリを生成してください。
実機用のlibSDL2.aをリンクするはずです。

この後、実機に出す段階については、前回のリンクを参照してください。

> Apple Developer(iOS) 会員です。
> 実機はJailBreakしていないと無理ですか?

デベロッパ有料会員ならば実機IDをAppleに登録することで、生成したアプリを登録した実機でのみ実行できます。
無料会員ならJailbreak必須です。

他の方の参考になりますので、特に理由がなければ「管理者にだけ表示を許可する」をはずしてもらえると助かります。

追伸の件、ありがとうございます。お店に行ったらカードがいろいろ売っていて、結局買わなかった...

[281] 返信ありがとうございます

>実機に出せないのではなくて、ビルドできていないのですね。
>[Destination]を[iOS Device]にしている場合は、[Product]->[Archive]でバイナリを生成してください。
>実機用のlibSDL2.aをリンクするはずです。
早速試したところ、今度は
!Apple LLVM 5.0 Error
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang failed with exit code 70
というエラーメッセージが出てきます。(当然これでは実機にも出ません。)

fatal error: error in backend: expected relocatable expression
clang: error: clang frontend command failed with exit code 70 (use -v to see invocation)
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: arm64-apple-darwin13.0.0
Thread model: posix
clang: note: diagnostic msg: PLEASE submit a bug report to http://developer.apple.com/bugreporter/ and include the crash backtrace, preprocessed source, and associated run script.
clang: note: diagnostic msg:
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /var/folders/pr/1f8v2pws2g5fwwhncyppr64m0000gn/T/c68k-I5SVRA.c
clang: note: diagnostic msg: /var/folders/pr/1f8v2pws2g5fwwhncyppr64m0000gn/T/c68k-I5SVRA.sh
clang: note: diagnostic msg:

********************
ほかの手がかりとしてエラーメッセージの一部を抜粋します。
抜粋の仕方が悪いかもわかりません、悪しからず。

>この後、実機に出す段階については、前回のリンクを参照してください。
具体的にどの部分が参照になりましょうか?

>デベロッパ有料会員ならば実機IDをAppleに登録することで、生成したアプリを登録した実機でのみ実行できます。
>無料会員ならJailbreak必須です。
了解しました。

>他の方の参考になりますので、特に理由がなければ「管理者にだけ表示を許可する」をはずしてもらえると助かります。
はじめどうするか色々迷ったのですが、確かに仰ることもわかりますのでこれ以降はチェックをはずします。

>お店に行ったらカードがいろいろ売っていて、結局買わなかった...
いまはコンビニでも取り扱っているようですね。
自分は3ds専用ダウンロードゲームではギャラクシーフォースの立体視感が好きです。

[282] Re: 返信ありがとうございます

お返事遅れてすみません。

さて、言葉の定義がお互いに違っていると誤解を生じそうですので、まずはそこから。

「実機に出す」というのは、「バイナリをiPhoneやiPad等の実機デバイスに転送する」という意味で
私は使っています。ビルドがエラーなく完了した時点で「バイナリが完成」します。
バイナリが完成しても、まだ実機には出したとはいいません。

それから、エラーは抜粋せず、全部載せてください。
コメント欄に載りきらなければ、別の手段でも構いませんので。dropboxとかアップローダ等。

で、エラーメッセージに以下があるので、arm64用にコンパイルしてしまっているのでは、と思います。
Target: arm64-apple-darwin13.0.0

arm64はiPhone5s/iPad Air/iPad mini Retina等の新しいデバイスでiOS7を使う場合に64bit対応なバイナリを作成します。
今回はarmv7/armv7s用にバイナリを作成したいので、[Build Settings]の[Architectures]でarm64が含まれないほうを選択してください。

> >この後、実機に出す段階については、前回のリンクを参照してください。
> 具体的にどの部分が参照になりましょうか?

全部です。
とりえあず全部読んでみて、わからない箇所があったらご質問ください。
できる範囲で回答します。

> >他の方の参考になりますので、特に理由がなければ「管理者にだけ表示を許可する」をはずしてもらえると助かります。
> はじめどうするか色々迷ったのですが、確かに仰ることもわかりますのでこれ以降はチェックをはずします。

ご理解感謝します。

> >お店に行ったらカードがいろいろ売っていて、結局買わなかった...
> いまはコンビニでも取り扱っているようですね。
> 自分は3ds専用ダウンロードゲームではギャラクシーフォースの立体視感が好きです。

あ、コンビニにも置いているところあるんですね。今度最寄りのコンビニで探してみます。

[283] 年末年始の忙しい折、気にかけて下さりありがとうございます

>「実機に出す」というのは、「バイナリをiPhoneやiPad等の実機デバイスに転送する」という意味>で私は使っています。ビルドがエラーなく完了した時点で「バイナリが完成」します。
>バイナリが完成しても、まだ実機には出したとはいいません。
これは私も同じ様に解釈しています。

>それから、エラーは抜粋せず、全部載せてください。
>コメント欄に載りきらなければ、別の手段でも構いませんので。dropboxとかアップローダ等。
これは出てきたエラーメッセージが膨大で、どうするか散々迷ったうえで抜粋させて頂きました。
書くまでもないですが、質問する前にこちらでも色々調べた上での事です。

>で、エラーメッセージに以下があるので、arm64用にコンパイルしてしまっているのでは、と思>います。Target: arm64-apple-darwin13.0.0 、、、
言われた様にarm64をはずしたらアーカイヴ化は出来る様になりました。
が、やはり実機上(iPadminiRerina,iPhone5S)では動きません。
MacのiOSシミュのiPad,iPhoneでは動くのに、実機上では動かないということは良くあることなのでしょうか?

>全部です。
>とりえあず全部読んでみて、わからない箇所があったらご質問ください。
>できる範囲で回答します。
これが一番わからないのですが、ここに書いてある事はアップルにお金を支払わずに実機上で動かす方法ですよね?前述した様に有料会員ですので特に関係ないのかな?と思っているのですが?

[284] Re: 年末年始の忙しい折、気にかけて下さりありがとうございます

わしんさん、こんにちは。

> これが一番わからないのですが、ここに書いてある事はアップルにお金を支払わずに実機上で動かす方法ですよね?前述した様に有料会員ですので特に関係ないのかな?と思っているのですが?

おっと、有料会員様でしたか、失礼しました。
私と同じ無料会員と勘違いしておりました。

前にも書きましたが、有料会員の場合はお持ちのデバイスをAppleに登録することで、そのデバイスでのみアプリを動作させることができるようです。

お察しの通り件のサイトは無料会員や、有料会員でも登録していないデバイスでアプリを動かしたい場合についてです。
有料会員向けの実機の出し方については経験がないのでご助言できかねます。
Appleに問い合わせるのが一番なのではと思います。

[285] 返信ありがとうございます

こちらでも、引き続き情報を集めて、
もう少し勉強重ね、
実機でも出せる様にしたいと思います。

psp版含めてのアップデート(マウスとか)お待ちしています。

[289] 管理人のみ閲覧できます

このコメントは管理人のみ閲覧できます

コメントの投稿


管理者にだけ表示を許可する

Trackback

http://hissorii.blog45.fc2.com/tb.php/241-c7c5f6c1

«  | HOME |  »

プロフィール

ひっそりぃ

Author:ひっそりぃ
Twitter:@hissorii_com
GitHub:hissorii


月別アーカイブ


最新記事


カテゴリ



最新コメント


最新トラックバック




RSSリンクの表示


Amazon


QRコード

QRコード

Amazon


ブログランキング

ブログランキング【くつろぐ】
にほんブログ村 ゲームブログ×PlayNCBlogへ

メールフォーム

名前:
メール:
件名:
本文:


カウンタ


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。