PSP xvi

PSPプログラミングを教えるブログ(本気で頑張る人アクセス大歓迎サイト)

PSP-X.gif

記事の間違いを報告  新アップローダー
記事修正情報 PSPプログラミング資料 自作ゲーム PSP用エミュレータ リンク

公認リンク
公式PSP専科 公式PSVita専科 はじめるPSPSDK PSP EXEC GAME M@STER PSP 猫山のYouTubeチャンネル

TAG
全記事にタグをつけています  http://nekoyama2gillien.blog36.fc2.com/?tag=タグ
PSP PSPプログラミング DXライブラリPortable OSLib ショートプログラム ハローワールド
PSP自作ゲーム PSP自作ソフト エミュレータ ゲームアーカイブス PSP動画
動画 初音ミク ミクミクダンス MMDドラマ ゲーム 魔法少女まどか☆マギカ 侵略!イカ娘
アイドルマスター

このブログについて

このブログでは、非公式のPSPソフト、いわゆる自作ソフト( PSP Homebrew )を作る事を目的とします。

著作権などの こまかい利用規約については、こちらを開いてお読み下さい

このブログについて知りたい方、初めて来訪された方はこちらを開いてお読みください
お問い合わせは 猫山猫宗(nekomune@gmail.com)までどうぞ


当ブログはリンクフリーです。ブログ名は、アルファベットで「PSP xvi」と書いて『ピーエスピー・エクシビ』とお読みください。
相互リンクを希望されるブログ運営者様は、ココで申請して下さい。


このブログで全記事から探し物の方は、ここをクリックして下さい。
http://nekoyama2gillien.blog36.fc2.com/?all

スポンサーサイト 

--/--/--
--. --:--

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

[edit]

CM: --
TB: --

page top

今回は、サンプルソースとライブラリの導入です.

ダークアレックス氏の開発したライブラリを導入してみます.
ダウンロード
http://dl.qj.net/psp/hacks-exploits/team-m33-psp-cfw-371.html

URL をむき出しにしてみました。これは、カスタムファームウェア 3.71 M33 です.
この中に、ライブラリが入っているのです. PSP用の OpenBOR は CFW3.71以降専用なので、調べてみるとカーネルNIDS の大幅更新情報とSDKが混入されてました.
急ぐ事は無いと思いますので、必要だと判断された方のみ導入してください.

今回で、sctrlHENSetOnApplyPspRelSectionEven が sctrlHENSetStartModuleHandler に置き換えられたという話です.

Slim (PSP-2000) での拡張32MBメモリの使い方のサンプルソースが付属しています.


FW3.71 で カーネルNIDS の大幅更新がされていて、FW3.80 にて更に更新されているそうな.

http://my96soft.com/memo/2008/01/14/cfw-380-m33 リリース!/
↑このページに書いてありますが、FW3.71 から FW3.80 へ更新する際においてカーネルNIDS の変更が なされたという事実.

NIDS って何だろう?
アセンブリではじめるPSPセミナー(資料)
↑このページに、「カーネルライブラリのために、関数名の先頭32ビットがSHA1でハッシュされており、NIDで認証されている」という文章を発見.

2010年6月17日(木)追加 転載禁止記事
NIDS についての詳細は、メーカーであるSONYの企業秘密でしょうから関係者以外の人たちは、詳細を知らないのです。ネットでNIDSという単語が使われていても、NIDSとは何であるかを知り尽くしている人はごく僅かのハッカー達だと思います。
私は 色々と調査していくうちに、NIDSとは何か解りかけてきました。
以下、自分なりの「NIDSとは何か?」についての答えを書きます(私の考えなので転載しないで下さい。知ったかぶりも禁止)。

アップデータに含まれる PRX ファイルで提供されるミニプログラム集の事だと思います。事実はSONYの企業秘密です。
PRX はプラグインだと思っている人が多いかと思いますが、プラグインも PRXの一つであるだけで、「 PRX = プラグイン 」という解釈は間違いです。
PRX で提供されるミニプログラムは、映像や音声のコーデックであったり、デコーダーであったり、サブCPU(メディアエンジン)を作動させる補助プログラムであったり、システムのアップデート補助プログラムであったり、普通のプラグイン的な役割のプログラムであったり、システム用のライブラリであったり、モジュールと呼ばれるプログラムであったり、………、全部書けない程 種類が沢山あるので他は割愛します。
PSP Homebrew開発に使われている PSPSDK のライブラリは、このNIDS(=PRX)を解析して作られていると、私は思っています。
色んな技術は、市販UMDゲームに使われている技術をリバースエンジニアリングして解析して実験の上で「これは役に立つ」というのがハッカーによりプログラム開発ネタに採用されているとの私の考えです。

つまり、メーカーの技術が上がるとハッカーの腕前も上がる、という事。なんかイタチゴッコですなw


CFW 3.80 M33 の ダウンロード
http://www.psp-ita.com/?module=fileview&file_id=874
SDKは付属していませんが、付属テキストに用があります.
欲しい人だけダウンロードして下さい.


【 SDK for 3.71M33 導入方法 】
1. どこかにフォルダを作って、その中で CFW3.71M33 のファイルを解凍します.
2. マイコンピュータを開いて、C:\pspsdk\psp\sdk\ を開いてください(PSPSDKの標準PATHで表記)
3. そこに CFW3.71 というフォルダを作ります.
4. 解凍した中身の SDKフォルダを開いて、以下のファイル全部をコピーして、その CFW3.71フォルダへ貼り付けます。
5. 完了

Q. どうやって使うのか?
A. ライブラリなので、コンパイル時に使います。

以下に Makefile の書き方を記述(これは雛形です)
↓↓赤い文字部分は、記述必須。青い文字部分は自由に書き換えてください.

TARGET = NICEGAME
OBJS = main.o sub1.o sub2.o sub3.o・・・・・・・・

PSPSDK=$(shell psp-config --pspsdk-path)
INCS = $(PSPSDK)/include $(PSPSDK)/CFW3.71/include
INCDIR = $(INCS)

CFLAGS = -Wall -G0 -O3 -fomit-frame-pointer -mgp32 -mlong32

CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

LIBDIR = $(PSPSDK)/CFW3.71/lib
LDFLAGS =
LIBS = -lpspinit -lpspkdebug -lpspkubridge -lpsploadexec_kernel\
-lpspmodulemgr_kernel -lpspmodulemgr_user -lpspsysmem_kernel\
-lpspsysmem_user -lpspsystemctrl_kernel -lpspsystemctrl_user\
-lpspumd_kernel -lpspusbdevice -lpspusbdevice_driver\
-lpspvshctrl


EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = 開発ソフトウェア名
PSP_EBOOT_ICON = NULL or アイコンのPATH(ICON0.png)144x80
PSP_EBOOT_ICON1 = NULL or 動画アイコンのPATH(ICON1.PMF)144x80
PSP_EBOOT_UNKPNG= NULL or ゲーム説明画像のPATH(ICON1.PNG)310x180
PSP_EBOOT_PIC1 = NULL or アイコンの背景画像PATH(PIC1.png)480x272
PSP_EBOOT_SND0 = NULL or 音楽ファイルのPATH(SND0.AT3)500KB以内

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

# ここから下は、任意です。
main.o : main.c main.h
sub1.o : sub1.c sub1.h
sub2.o : sub2.c sub2.h
sub3.o : sub3.c sub3.h


これは使えそうな予感・・・・・.
Slim (PSP-2000) での拡張32MBメモリの使い方のサンプルソースは、是非参考にしてみて下さい.


【 関連記事 】
MAKEFILEの書き方 EBOOT.PBP 生成用
MAKEFILEの書き方 プラグイン生成用
PSPSDK 同梱のライブラリ一覧

関連記事
スポンサーサイト

[edit]

CM: 0
TB: 0

page top

本日は、私のお気に入りキャラである アイドルマスターの天海春香さんの 永遠の16歳の誕生日です!

何をして祝おうか考えたのですが、アイドルマスターSP を チートでポージングして撮影してみることになった模様
撮れた写真はこれ↓↓

春香さん「シェー」をする、の巻A

春香さん「シェー」をする、の巻B
なんか「シェー」では無い感じ。ぐはw

ボクは MMD(MikuMikuDance)をいじったことも無く3Dデータの扱いには不慣れだったのでこんな有様ですよ…Orz。


あー、アイマスSPは、チートを使うと私服で歌わせたり出来るのですが、その動画を録画してアップロードするのは違反行為ですので絶対にしないでね。

関連記事

[edit]

CM: 0
TB: 0

page top

PSPパッドの読み取りについての解説をします.

今回は、DXライブラリPortable での読み取りは行ないません.生データの検出からやります.
この記事でデジタル部分、次回記事でアナログ部分を解説します.
read frame(読み出しフレーム)というのも検出できるようですが、省略です.

定義されている構造体
/** Returned controller data */
typedef struct SceCtrlData {
  /** The current read frame. */
  unsigned int   TimeStamp;
  /** Bit mask containing zero or more of ::PspCtrlButtons. */
  unsigned int   Buttons;
  /** Analogue stick, X axis. */
  unsigned char  Lx;
  /** Analogue stick, Y axis. */
  unsigned char  Ly;
  /** Reserved. */
  unsigned char  Rsrv[6];
} SceCtrlData;

カーネルモードとユーザーモードでは、PSPパッドの読み取れる内容が異なります.
全部 読めるのがカーネルモードで、一部 読めないのがあるのがユーザーモードです.

プログラマブルキーと特殊キーとに区別しようかと.
勝手に命名すると混乱を招く恐れがあるのですが、察して下さい.

参考にした資料 / ヘッダーファイル
pspctrl.h


[ カーネルモードで読み取れるデータ ]

定義されている変数    値(16進数 32ビット)
セレクトキー  PSP_CTRL_SELECT 0x00000001
スタートキー  PSP_CTRL_START 0x00000008
十字キー上   PSP_CTRL_UP 0x00000010
十字キー右   PSP_CTRL_RIGHT 0x00000020
十字キー下   PSP_CTRL_DOWN 0x00000040
十字キー左   PSP_CTRL_LEFT 0x00000080
Lトリガー   PSP_CTRL_LTRIGGER 0x00000100
Rトリガー   PSP_CTRL_RTRIGGER 0x00000200
△ボタン    PSP_CTRL_TRIANGLE 0x00001000
○ボタン    PSP_CTRL_CIRCLE 0x00002000
×ボタン    PSP_CTRL_CROSS 0x00004000
□ボタン    PSP_CTRL_SQUARE 0x00008000
ホーム     PSP_CTRL_HOME 0x00010000
ホールド    PSP_CTRL_HOLD 0x00020000
WLANスイッチ  PSP_CTRL_WLAN_UP 0x00040000
リモコン差込  PSP_CTRL_REMOTE 0x00080000
音量+     PSP_CTRL_VOLUP 0x00100000
音量-     PSP_CTRL_VOLDOWN 0x00200000
スクリーン   PSP_CTRL_SCREEN 0x00400000
♪       PSP_CTRL_NOTE 0x00800000
UMD挿入   PSP_CTRL_DISC 0x01000000
メモステ挿入  PSP_CTRL_MS 0x02000000
プログラマブルキー&特殊キー(全部のキー)

2010年04月08日 00:30 更新
「PSP_CTRL_REMOTE」はリモコン付きヘッドフォンをPSPに挿したらONになりました.
書き間違いの訂正
最初、WANと書きましたが、WLAN(無線LAN)の間違いです.ごめんなさい.
イーサネット -Wikipedia
無線LAN -Wikipedia
WAN -Wikipedia


[ ユーザーモードで読み取れるデータ ]
定義されている変数    値(16進数 32ビット)
セレクトキー  PSP_CTRL_SELECT 0x00000001
スタートキー  PSP_CTRL_START 0x00000008
十字キー上   PSP_CTRL_UP 0x00000010
十字キー右   PSP_CTRL_RIGHT 0x00000020
十字キー下   PSP_CTRL_DOWN 0x00000040
十字キー左   PSP_CTRL_LEFT 0x00000080
Lトリガー   PSP_CTRL_LTRIGGER 0x00000100
Rトリガー   PSP_CTRL_RTRIGGER 0x00000200
△ボタン    PSP_CTRL_TRIANGLE 0x00001000
○ボタン    PSP_CTRL_CIRCLE 0x00002000
×ボタン    PSP_CTRL_CROSS 0x00004000
□ボタン    PSP_CTRL_SQUARE 0x00008000
ホーム     PSP_CTRL_HOME 0x00010000
ホールド    PSP_CTRL_HOLD 0x00020000
プログラマブルキーのみ


PADの読み取りについて 今までやらなかったのは、ユーザーモードでも 音量+ とか 音量- とか WLANスイッチ などを読み取れないか試行錯誤していたからです.

で、昨日 解決したので、PSPパッド入力について一挙公開です.

PSPパッドの読み取りテストプログラム(生データ閲覧用)のダウンロード(ソース付き)
ダウンロードする
(PSPパッド読み取りテスト.7z)
通常のカーネルモード版とユーザーモード版と、特殊なユーザーモード版の3種類同梱.


【 ユーザーモードで どうやって特殊キーの読み取りを行なっているのか説明 】

カーネルモードで動作するプラグインを作り、そのプラグイン内にPSPパッドの読み取りを行なう関数を書いておき、ユーザーモードのメインコードから そのプラグインモジュールを読み込んで 関数呼び出しでPSPパッド値を得ています.

ですから、PSPパッドの特殊キー読み取り部分はカーネルモードで実行しています.
PSP-2000でも、カーネルモードのプラグインは実行可能ですよ.
解かったかな?

このソースでプラグイン初公開ですがコードはプラグイン作り勉強向けではありません.これ専用のプラグインです.
技術を色々勉強できるかと思いますので、興味ある方は挑戦してください.

今日はもう遅いので、詳しく解説するのは後日.


【 関連記事 】
PSPプログラミング PSPSDKにライブラリを追加しよう(4) DXLibP v0.5.7
PSPプログラミング DXライブラリPortable でプログラムの「核」を書く
PSPプログラミング PSPパッドの読み取り(デジタル部分)
PSPプログラミング PSPパッドの読み取り(アナログパッド部分) 戦車ゲーム紹介
PSPプログラミング DXライブラリPortable でのパッド入力 その1
PSPプログラミング DXライブラリPortable でのパッド入力 その2
PSPプログラミング DXライブラリPortable でのパッド入力 その3 OSK
PSPプログラミング DXライブラリPortable でのパッド入力 その4 アナログ系


関連記事

[edit]

CM: 14
TB: 0

page top

前回、PSPのデジタルパッド解説をやりましたので、今回はアナログパッド解説です。

入力は、
X方向 = 256段階/数値は(0~255) 8ビット長
Y方向 = 256段階/数値は(0~255) 8ビット長
です。
構造体には unsigned char のキャストで定義されています。

実際の判定には、128を引いてから判別すると良いと思われます。

[A]取得データのまま          [B]128を引いたデータ
    0                   -128

0  基準  255   →    -128   基準  +127

   255                  +127

[B]図で基準の位置は、(0,0)ですが、それは計算上での話です。
生データの検出を行なうと、値が 基準から ±15くらいの範囲でプルプルと変動しています。

アナログパッドの検出結果は PSPの機種別でも異なるようですし、「遊び」があるのがアナログ的でもあり。

PSP-1000 ならアナログパッド部品が簡単に取り外せるので、取り外して眺めながらいじってみてください。
(無くさないように注意してね)
くぼみは円形にえぐられているので、(-128,-128)という値にはなりません。


せっかくなので、アナログパッドも使用する PSP Homebrew を ご紹介。


Battlegrounds QJ.NET へリンクしています。

「本格的3D戦車ゲーム」です.戦車に乗った気分に浸れるゲーム。ないすっ
PSP-2000対応


【 関連記事 】
PSPプログラミング PSPSDKにライブラリを追加しよう(4) DXLibP v0.5.7
PSPプログラミング DXライブラリPortable でプログラムの「核」を書く
PSPプログラミング PSPパッドの読み取り(デジタル部分)
PSPプログラミング PSPパッドの読み取り(アナログパッド部分) 戦車ゲーム紹介
PSPプログラミング DXライブラリPortable でのパッド入力 その1
PSPプログラミング DXライブラリPortable でのパッド入力 その2
PSPプログラミング DXライブラリPortable でのパッド入力 その3 OSK
PSPプログラミング DXライブラリPortable でのパッド入力 その4 アナログ系


関連記事

[edit]

CM: 0
TB: 0

page top

ニコニコ動画のコミュニティ「巻尾工房(まきおこうぼう)」さんにて、

第一回 初心者向け C言語+Win32API講座【ウィンドウを表示してみよう】
という生放送が行なわれます。要チェックですよー!!

URLは、http://com.nicovideo.jp/community/co72768

生放送の日時
2010年4月17日(土曜日) AM 8:00~
終了時刻未定

以前もこの時間帯に生放送がありました。私はタイムシフト予約をして観ました。
忙しい人はタイムシフト機能を使えば良いと思います。


関連記事

[edit]

CM: 0
TB: 0

page top

ニコニコ動画のコミュニティ「巻尾工房(まきおこうぼう)」さんにて、

第二回 初心者向け C言語+Win32API講座【何かグリグリ動けばいいね】
という生放送が行なわれます。要チェックですよー!!

URLは、http://com.nicovideo.jp/community/co72768

生放送の日時
2010年4月24日(土曜日) AM 8:30~
終了時刻未定

以前もこの時間帯に生放送がありました。
忙しい人はタイムシフト機能を使えば良いと思います。
関連記事

[edit]

CM: 0
TB: 0

page top

さて、いよいよ DXライブラリPortable を使ったパッド入力を解説する時が来ました.

DXライブラリPortable でのPSPパッド操作では、パッド入力にキーボードの指定キー押し割り当てが出来たり、キー入力に指定パッド入力割り当て(複数ボタン同時押し割り当て可能)や、OSKによる文字列の取得などをする事が可能です.

×ボタンにスペースキーを割り当てておくと、
×ボタンを押した時にスペースキーが押されたという情報を得る事が出来ます.

また、キー押下には複数のPSPパッド入力を割り当てることも可能なので
ZキーにLトリガーと×ボタンの2つを割り当てておくこともできます.

でも実際PSPにはキーボードが無いのでLトリガーと×ボタンの同時押しで
Zキーが押されたという情報になるみたいです.


まず、基本のパッド入力から

GetInputState(); という関数により、PSPSDK の sceCtrlReadBufferPositive(&pad, 1); と互換なパッド入力値を得ることが出来ます.

【 記述例 】
    int pad_states;       // パッド値を入れる変数

ProcessMessage(); // パッド読み取り本体
pad_states = GetInputState(); // パッド値を得る

これで得られる値の判定には、dxlibp.h での54行目からの定義値 を使います.
もちろん、pspctrl.h の定義値を使っても良いです(ユーザーモードのん限定).
コピペ用に書いておきます.
DXP_INPUT_UP        DXP_INPUT_RIGHT     DXP_INPUT_DOWN   DXP_INPUT_LEFT
DXP_INPUT_TRIANGLE DXP_INPUT_CIRCLE DXP_INPUT_CROSS DXP_INPUT_SQUARE
DXP_INPUT_LTRIGGER DXP_INPUT_RTRIGGER DXP_INPUT_START DXP_INPUT_SELECT

[ ちゅうい ]
GetInputState(); 単体には パッドの読み取り機能は無いので、ProcessMessage(); を実行してパッド読み取りを行なう必要があります.ちょっと不便.


次に、DXライブリラリ互換なパッド読み取りの関数を紹介します.

【 記述例 】
    int pad_Buttons;     // パッド値を入れる変数

ProcessMessage(); // パッド読み取り本体
pad_Buttons = GetJoypadInputState(DX_INPUT_PAD1); // DXライブラリ用に変換されたパッド値を得る

これで得られる値の判定には、dxlibp.h での80行目からの定義値 を使います.
コピペ用に書いておきます.
PAD_INPUT_DOWN    PAD_INPUT_LEFT  PAD_INPUT_RIGHT  PAD_INPUT_UP
PAD_INPUT_A PAD_INPUT_B PAD_INPUT_C
PAD_INPUT_X PAD_INPUT_Y PAD_INPUT_Z
PAD_INPUT_L PAD_INPUT_R
PAD_INPUT_START
PAD_INPUT_M PAD_INPUT_D PAD_INPUT_F PAD_INPUT_G
PAD_INPUT_H PAD_INPUT_I PAD_INPUT_J PAD_INPUT_K
PAD_INPUT_LL PAD_INPUT_N PAD_INPUT_O PAD_INPUT_P
PAD_INPUT_RR PAD_INPUT_S PAD_INPUT_T PAD_INPUT_U
PAD_INPUT_V PAD_INPUT_W PAD_INPUT_XX

DXライブラリは Windows用のライブラリです.パソコンの特殊パッドにも対応する為に沢山の入力値が用意されているのだと思います.


パッド押下にキー押下を割り当てるには?

【 記述例 】○ボタンにリターンキーを割り当てる
SetJoypadInputToKeyInput( DX_INPUT_PAD1, PAD_INPUT_A, KEY_INPUT_RETURN, -1, -1, -1 ) ;

パッドの入力値には、GetJoypadInputState(); で得られる値を記述します

早見対応表
[↓] PAD_INPUT_DOWN    [○] PAD_INPUT_A   [L]  PAD_INPUT_L
[←] PAD_INPUT_LEFT [×] PAD_INPUT_B [R]  PAD_INPUT_R
[→] PAD_INPUT_RIGHT [△] PAD_INPUT_X [スタート] PAD_INPUT_START
[↑] PAD_INPUT_UP [□] PAD_INPUT_Y [セレクト] PAD_INPUT_M

キーの入力値には、dxlibp.h での118行目からの定義値 を使います.

KEY_INPUT_BACK    KEY_INPUT_TAB     KEY_INPUT_RETURN
KEY_INPUT_LSHIFT   KEY_INPUT_RSHIFT   KEY_INPUT_LCONTROL
KEY_INPUT_RCONTROL  KEY_INPUT_ESCAPE   KEY_INPUT_SPACE
KEY_INPUT_PGUP    KEY_INPUT_PGDN    KEY_INPUT_END
KEY_INPUT_HOME    KEY_INPUT_LEFT    KEY_INPUT_UP
KEY_INPUT_RIGHT   KEY_INPUT_DOWN    KEY_INPUT_INSERT
KEY_INPUT_DELETE   KEY_INPUT_MINUS    KEY_INPUT_YEN
KEY_INPUT_PREVTRACK KEY_INPUT_PERIOD   KEY_INPUT_SLASH
KEY_INPUT_LALT    KEY_INPUT_RALT    KEY_INPUT_SCROLL
KEY_INPUT_SEMICOLON KEY_INPUT_COLON    KEY_INPUT_LBRACKET
KEY_INPUT_RBRACKET  KEY_INPUT_AT     KEY_INPUT_BACKSLASH
KEY_INPUT_COMMA   KEY_INPUT_CAPSLOCK  KEY_INPUT_SYSRQ
KEY_INPUT_PAUSE
KEY_INPUT_NUMPAD0  KEY_INPUT_NUMPAD1  KEY_INPUT_NUMPAD2
KEY_INPUT_NUMPAD3  KEY_INPUT_NUMPAD4  KEY_INPUT_NUMPAD5
KEY_INPUT_NUMPAD6  KEY_INPUT_NUMPAD7  KEY_INPUT_NUMPAD8
KEY_INPUT_NUMPAD9
KEY_INPUT_MULTIPLY  KEY_INPUT_ADD   KEY_INPUT_SUBTRACT
KEY_INPUT_DECIMAL  KEY_INPUT_DIVIDE  KEY_INPUT_NUMPADENTER
KEY_INPUT_F1  KEY_INPUT_F2  KEY_INPUT_F3
KEY_INPUT_F4  KEY_INPUT_F5  KEY_INPUT_F6
KEY_INPUT_F7  KEY_INPUT_F8  KEY_INPUT_F9
KEY_INPUT_F10 KEY_INPUT_F11 KEY_INPUT_F12
KEY_INPUT_A KEY_INPUT_B KEY_INPUT_C KEY_INPUT_D
KEY_INPUT_E KEY_INPUT_F KEY_INPUT_G KEY_INPUT_H
KEY_INPUT_I KEY_INPUT_J KEY_INPUT_K KEY_INPUT_L
KEY_INPUT_M KEY_INPUT_N KEY_INPUT_O KEY_INPUT_P
KEY_INPUT_Q KEY_INPUT_R KEY_INPUT_S KEY_INPUT_T
KEY_INPUT_U KEY_INPUT_V KEY_INPUT_W KEY_INPUT_X
KEY_INPUT_Y KEY_INPUT_Z
KEY_INPUT_0 KEY_INPUT_1 KEY_INPUT_2 KEY_INPUT_3
KEY_INPUT_4 KEY_INPUT_5 KEY_INPUT_6 KEY_INPUT_7 
KEY_INPUT_8 KEY_INPUT_9 



複数のパッド押下にキー押下を割り当てるには?

【 記述例 】十字キー[↑]と□ボタンの同時押下に [F10]キーを割り当てる

SetKeyInputToPspInput( KEY_INPUT_F10, (DXP_INPUT_UP|DXP_INPUT_SQUARE) );

[ ちゅうい ]
パッドの入力値は GetInputState(); で得られる値でっす.DXP_INPUT_ナントカ



その2に続きますぅ~

【 関連記事 】
PSPプログラミング PSPパッドの読み取り(デジタル部分)
PSPプログラミング PSPパッドの読み取り(アナログパッド部分) 戦車ゲーム紹介
PSPプログラミング DXライブラリPortable でのパッド入力 その1
PSPプログラミング DXライブラリPortable でのパッド入力 その2
PSPプログラミング DXライブラリPortable でのパッド入力 その3 OSK
PSPプログラミング DXライブラリPortable でのパッド入力 その4 アナログ系



関連記事

[edit]

CM: 1
TB: 0

page top

DXライブラリPortable を使ったパッド入力の続きです


「何か押してください」に使える記述の例

    do    {
ProcessMessage();
}while(CheckHitKeyAll() == 0);

[ ちゅうい ]
CheckHitKeyAll(); 関数は、ProcessMessage(); を呼ばない限り 正しく機能しません


「○ボタンを押して下さい」に使える記述の例

    SetKeyInputToPspInput( KEY_INPUT_RETURN, DXP_INPUT_CIRCLE );
while(1)
{
ProcessMessage();
if(CheckHitKey( KEY_INPUT_RETURN ) == 1) {
break;
}
}

[ ちゅうい ]
CheckHitKey(); 関数は、ProcessMessage(); を呼ばない限り 正しく機能しません
CheckHitKey(); 関数は、SetKeyInputToPspInput(); でパッドにキーを割り当てておく必要があります



キーボードのすべてのキーの押下情報を取得するには

  すべてのキーの押下情報を取得して、たくさんの判定をする時とかは、CheckHitKey();を使わないで GetHitKeyStateAll( ); で押下情報をまとめて取得しておいてから行なうと便利

char keystatebuf[256]; // キーの押下情報バッファ

ProcessMessage(); // パッドの読み込み
GetHitKeyStateAll( &keystatebuf[0] ); // 全キーの押下情報を取り込み

if( keystatebuf[KEY_INPUT_ESCAPE] != 0 ) {
エスケープキーが押された時の処理(キャンセル)
}else if( keystatebuf[KEY_INPUT_RETURN] != 0 ) {
リターンキーが押された時の処理(決定)
}else if( (keystatebuf[KEY_INPUT_LEFT] != 0)||( keystatebuf[KEY_INPUT_NUMPAD4] != 0 ) ) {
左に移動 の処理
}else if( (keystatebuf[KEY_INPUT_RIGHT] != 0)||( keystatebuf[KEY_INPUT_NUMPAD6] != 0 ) ) {
右に移動 の処理
}else if( (keystatebuf[KEY_INPUT_UP] != 0)||( keystatebuf[KEY_INPUT_NUMPAD8] != 0 ) ) {
上に移動 の処理
}else if( (keystatebuf[KEY_INPUT_DOWN] != 0)||( keystatebuf[KEY_INPUT_NUMPAD2] != 0 ) ) {
下に移動 の処理
}




その3へ続きますぅ~

【 関連記事 】
PSPプログラミング PSPパッドの読み取り(デジタル部分)
PSPプログラミング PSPパッドの読み取り(アナログパッド部分) 戦車ゲーム紹介
PSPプログラミング DXライブラリPortable でのパッド入力 その1
PSPプログラミング DXライブラリPortable でのパッド入力 その2
PSPプログラミング DXライブラリPortable でのパッド入力 その3 OSK
PSPプログラミング DXライブラリPortable でのパッド入力 その4 アナログ系


関連記事

[edit]

CM: 0
TB: 0

page top

この記事では OSKについて解説

OSKとは、「On Screen Keybord」の略で、PSPでの文字入力インターフェースです.PSP-2000の説明書では、「キーボード」として説明されています.
PSPに名前を付ける場合とかUMDゲームでの名前入力の場合とかで使われていますね.

OSK

DXライブラリPortable ではOSKでの文字列の取得が簡単にできます.


OSKを呼び出す関数

int GetTextOSK( StrBUFF, StrLen, MODE, TITLE, INIT )
//パラメータの内訳
char *StrBUFF // 取得する文字列を格納するバッファの先頭ポインタ
int  StrLen // 取得する文字列の長さ(バイト数)
int  MODE // 入力モード(下で解説)
const char* TITLE // OSKのタイトル
const char* INIT // 既に入力されている文字列
//この関数の返り値
  成功:0
  失敗:-1

MODE について
  どのような文字列を入力するか指定するパラメータです.
  OR演算子 | で複数のを組み合わせて指定可能です.
       定義値              種類
   DXP_OSK_ALL 全て
   DXP_OSK_DIGIT 半角数字
   DXP_OSK_SYMBOL 半角記号
   DXP_OSK_SMALL 半角小文字
   DXP_OSK_LARGE 半角大文字
   DXP_OSK_DIGIT2 全角数字
   DXP_OSK_SYMBOL2 全角記号
   DXP_OSK_SMALL2 全角小文字
   DXP_OSK_LARGE2 全角大文字
   DXP_OSK_HIRAGANA ひらがな
   DXP_OSK_KATAKANA_H 半角カタカナ
   DXP_OSK_KATAKANA 全角カタカナ
   DXP_OSK_KANJI 漢字
   DXP_OSK_URL URL入力支援


文字列の入力が楽ちんになります♪
ただし、カーネルモードでは使用できません.ユーザーモード限定の機能でっす.


次はアナログパッドについてですぅ~

【 関連記事 】
PSPプログラミング PSPパッドの読み取り(デジタル部分)
PSPプログラミング PSPパッドの読み取り(アナログパッド部分) 戦車ゲーム紹介
PSPプログラミング DXライブラリPortable でのパッド入力 その1
PSPプログラミング DXライブラリPortable でのパッド入力 その2
PSPプログラミング DXライブラリPortable でのパッド入力 その3 OSK
PSPプログラミング DXライブラリPortable でのパッド入力 その4 アナログ系



関連記事

[edit]

CM: 0
TB: 0

page top

PSPパッド入力のシメの解説は、アナログパッドについてです.

PSPSDKでは 全256段階の入力検出が可能ですが、DXライブラリPortable では ±1000の精度で検出が可能です.
【 サンプル 】

int analogX,analogY;


GetJoypadAnalogInput( &analogX, &analogY, DX_INPUT_PAD1 ); // アナログパッドの値を取得

関数の返り値は、成功:0、失敗:-1 です.
引数として渡すパラメータに、値が入力されます(ポインタを渡している事に注目!).

つまり、この場合は analogX analogY に それぞれ 値が入ってくる、という事です
 
 

まだあるよ、パッド関数
 
あまり有り難くない関数とか
・GetJoypadNum();
  → PSPにはパッドが1個だけ接続されているので、返り値は常に1です.
・StartJoypadVibration( DX_INPUT_PAD1, 1000, 2000 );
・StopJoypadVibration( DX_INPUT_PAD1 );
  → PSPには振動機能は無いので、呼び出しても無駄です.
・GetJoypadAnalogInputRight( &x, &y, DX_INPUT_PAD1 );
  → PSPには右側にアナログパッドが無いので、呼び出しても無駄です.



PSPの左側にだけ存在する、アナログパッド.右側にもあっても良いようなモノですが?
そしたらアナログパッドで リブルラブルが遊べちゃいますなww

(C)遊びをクリエイトするNAMCO - Libble Rabble -
libble_rabble.jpg
画像は Google検索で入手しました


【 関連記事 】
PSPプログラミング PSPパッドの読み取り(デジタル部分)
PSPプログラミング PSPパッドの読み取り(アナログパッド部分) 戦車ゲーム紹介
PSPプログラミング DXライブラリPortable でのパッド入力 その1
PSPプログラミング DXライブラリPortable でのパッド入力 その2
PSPプログラミング DXライブラリPortable でのパッド入力 その3 OSK
PSPプログラミング DXライブラリPortable でのパッド入力 その4 アナログ系


関連記事

[edit]

CM: 2
TB: 0

page top

アイドルマスターSP カタログ15号 PSP 

2010/04/27
Tue. 20:56

PSPアイドルマスターSP』の、その後のニュースです。

アイドルマスターSP PSP(R)・the Best 発売中!
Amazon.co.jp『アイドルマスターSP PSP the BEST』
バンダイナムコゲームスは、PSP用ソフト『アイドルマスターSP(エスピー) パーフェクトサン/ワンダリングスター/ミッシングムーン』の PSP the Best版(ゲームソフト)を、2010年1月28日に発売しました。

バンダイナムコゲームスは、PSP用ソフト『アイドルマスターSP(エスピー) パーフェクトサン/ワンダリングスター/ミッシングムーン』のダウンロードコンテンツ (DLC)第15弾を、2010年4月28日より配信する。

-- 続きを読む --
関連記事

[edit]

CM: 0
TB: 0

page top


h o m e |


 

2010-04