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

この記事は読むだけにしてください。
トライしてもいいですが、このブログでは簡単インストールの Minimalist PSPSDK で開発をやりますよ。読み飛ばし推奨!



まずは、下記URLを参照して、
http://yun.cup.com/psppg001.html

devkitProをインストール
ps2devをインストール
elf2pbp3.zipを探す

をやってみた。無事、成功。かかった時間もほんの30分ほど。


次に、Cygwin 導入と psptoolchain を導入。以下URL参照してみた。
(過去にあったページで現在は異なる内容になっています)
http://pspnfo.orz.hm/index.php?Development

Cygwin の導入は、Linux の知識が必要。あと、MS-DOS の知識も必要。
これは、無事にクリアー。

次に、psptoolchain を導入

>setup.shを実行する。時間がかかるので、放置しておきましょう。

コレには参った。もの凄く時間がかかった。
約2日も かかった。………Orz。
時間掛かりすぎ(w

HDD容量、約3.8GB必須。
スゲェー!!HDDのバックアップ取っておく事。



以前やった方法は( "Hello world for PSP 改" と "じゃんけんゲーム for PSP パワード!" 製作時)

devkitProをインストール
ps2devをインストール
elf2pbp3.zipを探す

をやってみて、コンパイル時に「Cygwin1.DLLが ありません」というエラーが出たのでグーグル先生で ["CYGWIN1.DLL" "DOWNLOAD"] で検索して、その Cygwin1.DLL を C:¥WINDOWS¥SYSTEM32¥ フォルダにインストールしてコンパイル確認してみた物です。他にも、Cygナントカ.DLL も必要だったかと…。


スポンサーサイト

[edit]

CM: 5
TB: 0

page top

今回は、
『PSP Homebrew 開発キット』の導入
『プログラムソース作成エディタ』の導入
『プログラムソース印刷ソフト』の導入( プリンタを所有の方のみ )

について解説します。


『PSP Homebrew 開発キット』
 いわゆる コンパイラーです。PSPSDK / DevKit です(フリーウェア)。

 Minimalist PSPSDK v0.8.10
  ダウンロード  pspsdk-setup-0.8.10.exe

  これは、シングルバイト系文字のCコンパイラなので、日本語文字の2バイト目が0x5C(制御文字 = '\')の場合、文字化けします。いわゆる、「だめ文字」というヤツです。
  対処方法としては、【はるるん v0.3】でプログラムソースを修正する事です。
  ダウンロード必須です。

『プログラムソース作成エディタ』
 いわゆる テキストエディターです。

 お勧めテキストエディター(フリーウェア)

  当ブログでは【 Apsaly 】を強く推奨しています。

  【 Apsaly 】 (簡易IDE機能 / 外部命令実行機能あり)

  VxEditor(軽快で高機能 / 色分け表示機能あり / 色分け印刷機能あり)

  Peggy Pad(高速カラフル / 色分け表示機能あり / 印刷機能なし)

  TeraPad(軽快に動作する / 色分け表示機能あり / 印刷機能あり=モノクロ)


 他のテキストエディターは、下記URLから探してみて下さい。

  Vector(Download: Windows > 文書作成 > テキストエディタ)

  @nifty:ダウンロード@nifty

  窓の杜 - テキストエディター


『プログラム・ソース印刷ソフト』
 プログラム・ソースを印刷する為のソフトウェアです。無くてもOK!
 ここでは、色分け印刷してくれるフリーソフトウェアを紹介。

  VxEditor(前出 / 色分け印刷機能あり)

  C/C++言語解析印刷

  C言語系ソース印刷ツール


【 関連記事 】
PSPプログラミング EBOOT.PBP 生成用 Makefile 記述方法
PSPプログラミング プラグイン生成用 Makefile 記述方法
PSPプログラミング サンプルプログラムソースをコンパイルしてみよう


『PSP Homebrew 開発キット』のインストール手順については、続きを読んでください。
↓↓↓↓↓
-- 続きを読む --

[edit]

CM: 2
TB: 0

page top

さて、いよいよコンパイルです。
コテ始めはPSPSDK に付属のサンプルプログラムソースコンパイルする事から始めます。

その前に、コンパイル用の設定とかコンパイル方法を記述したバッチファイルを作成しておきます(重要)。


以下。


1. フリーウェアのテキストエディター (TeraPad 等)をインストールしておく。
2. テキストエディター (TeraPad) を起動する
3. 下記をコピーして貼り付ける

PATH=C:\pspsdk\bin\;C:\pspsdk\psp\bin\
DEL *.ELF
DEL *.SFO
DEL *.PBP
make
pause




4. 貼り付けたら、[ファイル] → [名前を付けて保存] にて、
  ファイルの種類 = BATファイル(*.BAT) にしてから
  !_mk.bat という名前で保存する

解説。

PATH は、パス(PATH / 通り道)を通す命令です。
DEL は、ファイル削除 命令です。

1行目:PSPSDK をインストールしたハードディスクのドライブ番号とフォルダへ、\pspsdk\bin\ と \pspsdk\psp\bin\ にPATH を通すように記述する。
2行目:拡張子 .ELF ファイルを削除します。
3行目:拡張子 .SFO ファイルを削除します。
4行目:拡張子 .PBP ファイルを削除します。
5行目:make は、pspsdk の中にある、
     コンパイル&アセンブル&リンク(=つまり、ビルドする事)を行なう外部命令です。
     makefile参照して、実行されます
6行目:pause は、一時停止命令です。DOSプロンプトを一時停止します。
     pause を記述しておかないと、即、DOSプロンプトのウインドウが閉じてしまいます(エラーが発生した場合のメッセージを閲覧する為に記述する)。

補足。
!_mk.bat とか !_ビルド.bat というファイル名にしておくと、並び替えした時に、かなり高い確率で フォルダ内部の先頭(左上)に並びます。
( 文字「 ! 」 は、文字コードが アスキーコード 0x21 なので、一番上に並びます )

作ったら、良く使うので すぐに使用できるフォルダ等へ保存して下さい。


では、コンパイルの開始!!

最初は、「音を出そう!」がテーマです。
初期値で C:\pspsdk\psp\sdk\samples\ フォルダーから探します。読んでいる方は、インストール先を参照して下さい。

コレ → \audio\wavegen\ フォルダー
           → この中に、さっき作った、!_mk.bat ファイルをコピーして貼り付けます。

そして、おもむろに、!_mk.bat をダブルクリックします。

すると、make.exemakefile を解析して、psp-gcc.exepsp-ld.exe を呼び出して実行し(自動で)、コンパイル&アセンブル&リンク&ELF→PBP変換してくれ、感動の EBOOT.PBP ファイル(PSP 1.00 用の 実行ファイル)を生成してくれます。
エラーは出ません(試しましたので)。

【 どうやって EBOOT.PBP を PSPへ転送するのか 】
PSPを、EBOOT.PBP を作ったパソコンとUSB接続してから転送します(コピーして貼り付け)。

【 転送先 】
システムソフトウェア 1.00 の PSP ユーザさん
 ms0/PSP/GAME/ 以下

システムソフトウェア 1.50 の PSP ユーザさん
 ms0/PSP/GAME/ 以下
  PBPmaker.exePBP Easy Installer.exeKxploit.exe のどれかを使って PSP へ USB 転送します。
    方法は 過去記事:PSP Filer 解説 を参照して下さい。

カスタムファームウェアで PSP-1000 のユーザさん
 ms0/PSP/GAME150/ 以下

カスタムファームウェアで PSP-2000 or PSP-3000 のユーザさん
 ms0/PSP/GAME/ 以下
  ユーザーモードで記述されているソースの場合は、出来た EBOOT.PBP をそのままPSPへ転送して実行できますが、カーネルモードで記述されているソースの場合は、カーネル1.50のソフトをCFW3.xx用に変換するソフト Ver.0.2 リリース (NAGAOKA STATION)を使用して、カーネル3.xx用に EBOOT.PBP を変換しながら USB 転送します。この際、指定したフォルダの下に/1.50/EBOOT.PBP の様に変換&転送が行なわれるので、/1.50/ フォルダーから EBOOT.PBP を 切り取って 指定したフォルダ内へ貼り付けます(ちょっと面倒ですね)。
↑↑ そのまま起動して下さい。ただし、完全に起動可能になる訳では無いです。PSP-1000専用のは無理。

では、実行してみます………………!!!
「動いたッッッッ!!」「何か、音がするッッッ!!」


解説します。

このプログラムは、正弦波矩形波三角波(ノコギリ波)のノイズを発生するのです。
×ボタン押しで、切り替えです。
そのノイズの周波数は、アナログキーを上下にする事で、高くなったり低くなったりします。

なお、HOMEキーより終了可能です。

次は、「グラフィック描画を試す!」
C:\pspsdk\psp\sdk\samples\gu\sprite\ フォルダーへ、!_mk.bat ファイルをコピーしてから、ダブルクリックして下さい。

コンパイル&アセンブル&リンク&&ELF→PBP変換してくれ、またもや EBOOT.PBP ファイル(PSP 1.00 用の 実行ファイル)を生成してくれます。
エラーは出ません(試しましたので)。

上に記した手段で、あなたの所有の PSP へ、EBOOT.PBP を USB 転送して下さい。


では、実行します。

ゲーム → MemoryStick → "Sprite Sample"というアプリを○ボタン押しします。

「うわっ!!何か、クルクルとカラフルドーナツが動くッッッッ!!感動ぅぅぅ!!!」

終了は、HOMEキーより。

このプログラムは、グラフィック描画デモソフトでした。
いやー、お腹一杯ですよ…!!


次回は、Makefile を解説します。

[edit]

CM: 8
TB: 0

page top

えーと、お待たせしました。PSPSDK における、makefile の書き方です。
まずは、EBOOT.PBP 編 をお送りします。
何故かというと、PSPSDKでは、????????.prx というプラグインも作れるので、2回に分けて掲載しようという作戦です。

取り合えず、俺作の『じゃけんゲーム for PSP パワードX』で使用したのを公開します。
良く見て下さいませ。

ファイル名は、makefileで!(英小文字でないと、認識されません)
---------------------    コ コ か ら    ----------------------

TARGET = JANKEN

OBJS = JANKEN.o pg.o string.o

INCDIR =
CFLAGS = -Wall -G0 -O3 -fomit-frame-pointer -mgp32 -mlong32
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

LIBDIR =
LDFLAGS =
LIBS = -lpspgu -lpsppower

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = JANKEN GAME Powered X PSP
PSP_EBOOT_ICON = ICON0.png
PSP_EBOOT_ICON1 = NULL
PSP_EBOOT_UNKPNG = NULL
PSP_EBOOT_PIC1 = NULL
PSP_EBOOT_SND0 = NULL

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

JANKEN.o : JANKEN.c pg.h mydef.h HOMEkey.c
pg.o : pg.c pg.h mydef.h
string.o : string.c

---------------------    コ コ ま で    ----------------------

[ 以下、解説 ]

'TARGET = ??????' で指定した名前の ELF ファイルが生成されます。??????.elf というファイルです(この場合、JANKEN.elf ですね)。

'OBJS = ???1.o ???2.o ???3.o ???4.o' は、生成されるオブジェクトファイル名を記述します。ソースがC言語とか、C++言語とか、アセンブラ言語だろうが、そのファイル名で、拡張子を '.o' にして記述します。記述の長さが1行(半角文字で80文字くらい)以上になる場合は、行末に、\ 記号を記述して改行してから、次の行に '???5.o ???6.o ???7.o' などと 延々と書いてゆきます
オブジェクトファイルを生成したいファイル(コンパイルさせたいファイル)を、全部 拡張子 '.o' で記述します。

'INCDIR = ' で指定したフォルダを優先的に検索して、ソース内の
     #include <ナントカ.h> ← (例) を、インクルードします。記述してなかったら、標準のインクルード先を参照します。大抵、記述しなくても良いと思います。

'CFLAGS = ' で指定したパラメータを、コンパイラーに渡してコンパイルや、アセンブルを行ないます
記述しないと、変テコな実行プログラムが吐き出されるかも知れませんので、是非、正しく記述して下さい。

   intは、32ビット扱いです。
   -Oオプションは、最適化オプションです。-O3が より最適化度UP

     当講座では、-O3 を推奨しております。

'CXXFLAGS = ' は、多分、コンパイラーに渡すフラグ(パラメータ以外のん)を記述するのでは無いかと思います。
      解からないので、このまま記述。

'ASFLAGS = ' は、多分、アセンブラに渡すフラグ(パラメータ以外のん)を記述するのでは無いかと思います。
      解からないので、このまま記述。

'LIBDIR =' は、ライブラリのあるフォルダを指定する際に記述します。記述しなかったら、カレントフォルダか、標準のライブラリの場所から検索して結合します。

'LDFLAGS =' は、リンカーに渡すフラグ(パラメータ以外のん)を記述するのだと思われます。

'LIBS =' は、リンクの時に結合させたいアーカイブを指定します。(:)libpspgu.aの場合は、-lpspguと記述します( lib が -l で、拡張子 '.a' は省く)。
   コンパイル済みのオブジェクトファイル(拡張子'.o')をリネームしたファイル(拡張子'.a')だとお考え下さい。
   コンパイルする手間が省けます

'EXTRA_TARGETS = EBOOT.PBP' は、出力する実行ファイル名を記述します。ええ、EBOOT.PBP ですね。

'PSP_EBOOT_TITLE = ' は、その EBOOT.PBP のタイトル名を、半角英数記号で記述します。
     日本語のタイトル名は、UTF-8 の文字コードを使う様ですが この PSPSDK は 日本語に非対応なので 漢字などの全角文字(2バイト文字)や、半角カナ文字は使えません

'PSP_EBOOT_ICON = ' は、その EBOOT.PBP のアイコンのファイル名を記述します。標準では、'ICON0.PNG' です。画像形式は 'PNG' です。PSP ではお馴染みの画像形式ですね。寸法は、横144 × 縦80。

'PSP_EBOOT_ICON1 = ' は、その EBOOT.PBP の動画アイコンのファイル名を記述します。標準では、'ICON1.PMF' です。動画画像形式は 'PMF' です。PSP ではお馴染みの画像形式です。'PMF'動画は、専用のソフトで製作します。寸法は、横144 × 縦80。ファイルサイズは、500KB以下。
> PMFデータ 作成方法

※ 画像アイコン と 動画アイコン は、独立しています。閲覧時は 画像アイコン、選択時は 動画アイコン です。

'PSP_EBOOT_UNKPNG = ' は、ゲームやUMD選択時に表示される背景画像の右中側の位置に中途半端に表示される、解説用の画像ファイル名を記述します。標準では、'ICON1.PNG' です。寸法は、横310 × 縦180 です。

'PSP_EBOOT_PIC1 = ' は、ゲームやUMD選択時に表示される背景画像のファイル名を記述します。標準では、'PIC1.PNG' です。画像形式は、'PNG'です。寸法は、横480 × 縦272 です。

'PSP_EBOOT_SND0 = ' は、ゲームやUMD選択時に流れるBGMの音楽ファイル名を記述します。標準では、'SND0.AT3' です。"ATRCA3plus形式圧縮オーディオ"という、SONY独自の音楽形式です。ファイルサイズは、500KB以下。'AT3'音楽は、SONYのSonicStageという専用の市販ソフトで製作します。
  AT3データ [ATRAC3plus]  (SONYが開発したオーディオ圧縮技術)

'PSPSDK=$(shell psp-config --pspsdk-path)' は、PSPSDK に渡す何かです(良く解かりません)。このまま、記述。

'include $(PSPSDK)/lib/build.mak' は、ソース中の インクルードPATH の参照先 だと思われます。EBOOT.PBP 製作専用 記述です。未調査の為、このまま記述。

'JANKEN.o: JANKEN.c pg.h mydef.h HOMEkey.c' は、プログラム・ソース 'JANKEN.?' を、再度コンパイルするかどうかの判定用の記述です。
       'JANKEN.o' よりも、'JANKEN.c' or 'pg.h' or 'mydef.h' or 'HOMEkey.c' の日付が新しいなら'JANKEN.o'を削除して'JANKEN.o' を作り直します(再コンパイル)

> pg.o: pg.c pg.h mydef.h
> string.o: string.c
   ↑↑ 以下同様の為、省略。

以上makefile EBOOT.PBP 生成編解説でした。

[ 補足 ]
PSP自作ソフトプログラミング/開発wiki
↑↑ このサイトの、「メニュー」の「実行ファイルの作成」の「PBPファイル」をクリックして、内容を読んでみて下さい。こちらの方でも、makefile について解説されています。


この PSPSDK は、製作側が全てを公開していない様なので、ココに記述している内容は、間違っているかも知れません。私の独自調査で書いた記事です。

【 関連記事 】
PSPプログラミング EBOOT.PBP 生成用 makefile 記述方法
PSPプログラミング プラグイン生成用 makefile 記述方法
PSPプログラミング サンプルプログラムソースをコンパイルしてみよう
PSPプログラミング PSPSDK に同梱されているライブラリの一覧とリンク記述

[edit]

CM: 1
TB: 0

page top

2010年01月13日更新
PSPSDK における、makefile の書き方です。
今回は、プラグイン編 をお送りします。
YES! プラグインとは拡張子 '.prx' の、何個でも同時に起動できる実行モジュールですね。

下記の資料は、『カスタムファームウェア 3.10 OE-A』で使われていたソース 'recovery.prx' を生成する為の makefile をちょっと手直ししたものを掲載しています。

ファイル名は、makefileで!(英小文字でないと、認識されません)
---------------------    コ コ か ら    ----------------------
TARGET = recovery
OBJS = main.o conf.o

INCDIR =
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

USE_KERNEL_LIBC = 1
USE_KERNEL_LIBS = 1
BUILD_PRX = 1

LIBDIR =
LIBS =
LDFLAGS += -mno-crt0 -nostartfiles

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

main.o : main.c head.h define.h
conf.o : conf.c head2.h
---------------------    コ コ ま で    ----------------------

[ 以下、解説 ]
'TARGET = ??????' で指定した名前の ELF ファイルが生成されます。??????.elf というファイルです(この場合は、recovery.elf ですね)。
プラグインのファイル名の宣言でもあります。DoDoDo だったら DoDoDo.prx です。

'OBJS = ???1.o ???2.o ???3.o ???4.o' は、生成されるオブジョクトファイル名を記述します。ソースがC言語とか、C++言語とか、アセンブラ言語だろうが、そのファイル名で、拡張子を '.o' にして記述します。記述の長さが1行(80文字くらい)以上になる場合は、行末に、\ 記号を記述して改行して、次の行に、'???5.o ???6.o ???7.o' などと、延々と書いてゆきます。実行プラグインの為に記述したソースを全部、拡張子 '.o' で記述します。

'INCDIR = ' で指定したフォルダを優先的に検索して、ソース内の
     #include <ナントカ.h> ← (例) を、インクルードします。記述してなかったら、標準のインクルード先を参照します。大抵、記述しなくても良いと思います。

'CFLAGS = ' で指定したパラメータを、コンパイラーに渡してコンパイルや、アセンブルを行ないます。記述しないと、変テコな実行プラグイン・コードが吐き出されるかも知れませんので、是非、正しく記述して下さい。

'CXXFLAGS = ' は、多分、コンパイラーに渡すフラグ(パラメータ以外のん)を記述するのでは無いかと思います。
      解からないので、このまま記述。

'ASFLAGS = ' は、多分、アセンブラーに渡すフラグ(パラメータ以外のん)を記述するのでは無いかと思います。
      解からないので、このまま記述。

'USE_KERNEL_LIBC = 1' は、カーネルのLIBC を参照する( = 1 )という意味らしいです。
'USE_KERNEL_LIBS = 1' は、カーネルのLIBS を参照する( = 1 )という意味らしいです。
↑↑この2項目は、カーネルモードのプラグインを生成する場合に記述するのだそうです。
ユーザーモードのプラグインを生成する場合は記述しないで下さい。

'BUILD_PRX = 1' は、プラグインを生成するという宣言です。その際、'TARGET = ??????' で指定した名前に、拡張子 '.prx' を付けたプラグイン(ファイル)が生成されます(この場合、recovery.prx ですね)。

'LIBDIR =' は、ライブラリのあるフォルダを指定する際に記述します。記述しなかったら、カレントフォルダか、標準のライブラリの場所から検索して結合します。

'LIBS =' は、リンクの時に結合されるアーカイブ(libpspgu.a)の場合は、'-lpspgu' と記述します。
  ( lib-l で、拡張子 '.a' は省く / UMD操作には、'libpspumd.a' → '-lpspumd' を記述)。
   コンパイル済みのオブジェクトファイル(拡張子'.o')をリネームしたファイル(拡張子'.a')だとお考え下さい。
   コンパイルする手間が省けます

'LDFLAGS =' は、リンカーに渡すパラメータだと思われます。

'PSPSDK=$(shell psp-config --pspsdk-path)' は、PSPSDK に渡す何かです(良く解かりません)。このまま、記述。

'include $(PSPSDK)/lib/build_prx.mak' は、ソース中の インクルードPATH の参照先 だと思われます。
プラグイン生成専用 記述です。未調査の為、このまま記述。

'main.o : main.c head.h define.h' は、プログラム・ソース 'main.?' を、再度コンパイルするかどうかの判定用の記述です。
       'main.o' よりも、'main.c' or 'head.h' or 'define.h' の日付が新しいなら、'main.o'を削除して、'main.o' を作り直します(再コンパイル)。
'conf.o : conf.c head2.h'
   ↑↑ 以下同様の為、省略。

以上makefile プラグイン生成編解説でした。

[ 補足 ]
PSP自作ソフトプログラミング/開発wiki
↑↑ このサイトの、「メニュー」の「実行ファイルの作成」の「prxファイル(プラグイン)」をクリックして、内容を読んでみて下さい。こちらの方でも、makefile について解説されています。


この PSPSDK は、製作側が全てを公開していない様なので、ココに記述している内容は、間違っているかも知れません。私の独自調査で書いた記事です。

【 関連記事 】
PSPプログラミング EBOOT.PBP 生成用 makefile 記述方法
PSPプログラミング プラグイン生成用 makefile 記述方法
PSPプログラミング サンプルプログラムソースをコンパイルしてみよう
PSPプログラミング PSPSDK に同梱されているライブラリの一覧とリンク記述

[edit]

CM: 3
TB: 0

page top

2012/01/08更新
現在、この記事は読むだけです。

mediumgauge氏が無償配布している、『全角文字表示ライブラリ』ダウンロードしておいて下さい
mediumgauge氏が開発された 『全角文字表示ライブラリ』は、現在 PSP用rar展開サンプルプログラム(RAR extract sample for PSP)という配布物に同梱されています。ある事情で単体での配布ができなくなっていたのですが、こういう形で配布再開してくださり、とても感謝しております(^^♪

在り処は下記URLです。そう、PSP Filer の配布元です。
http://www.geocities.jp/mediumgauge/


この東雲フォントは、Windows文字を殆どサポートしています。更に、絵文字まで入っています(調べました)。

東雲フォントは、PSP自作ソフト製作者さんの為に、mediumgauge氏が無料提供してくれている、有り難いフォントです。

寸法は、

半角文字 = 縦:12 ピクセル × 横:6 ピクセル (9バイト・データ長)
全角文字 = 縦:12 ピクセル × 横:12 ピクセル (18バイト・データ長)

です。


mediumgauge氏に お問い合わしてみた所、

『フォント以外の mh_print 関数部分とかは改造しても良し』

という、実に有り難いお返事を頂いたので、ちょっくら改造してみます。

さあ 諸君、『PSP用rar展開サンプルプログラム』ダウンロードしておいて下さい


【 関連記事 】
PSPプログラミング 全角文字表示ライブラリをダウンロード
PSPプログラミング [ 番外編 ] 日本語の文字 一覧表(ASCII & SHIFT-JIS) 完全版
PSPプログラミング 東雲フォント文字を全部表示しちゃうプログラム
PSPプログラミング 東雲フォントのデータ構造を調べました
PSPプログラミング 全角文字表示ライブラリ公開停止中のお知らせ
PSPプログラミング 『東雲フォント』が動画になった

[edit]

CM: 0
TB: 0

page top

今回は、便利なテキストエディターを ご紹介します。


PSP Homebrew開発をしていて、

      「あっ、エラー発生? 詳細は…??」

なんて時に、エラーメッセージがコンソール出力なので、テキストエディターを開いて 書き写してからブラウザで意味を検索…なんてしておられる方もいらっしゃるかと存じます。

そういう時に便利なのが、IDE などと言われる 「統合開発環境」 です(ちょっと意味が違うけど)。

PSPソフトの開発には、 【 外部コマンド実行機能付きでコンソール出力メッセージを取り込めるテキストエディター 】 で十分なので、今回はソレに合ったソフトウェアをご紹介。



Apsaly(無料ソフトウェア)
軽快な高多機能の本格的汎用テキストエディタ( 2007年 窓の杜大賞 編集部賞)

ダウンロード
 apsaly300.zip ( Filesize: 1,926,551Bytes )
  http://www.vector.co.jp/soft/win95/writing/se423509.html

インストール方法
1.インストール先にフォルダを作って解凍します。
2.Apsaly.exe をダブルクリックで起動して、[ 設定 ] → [ 環境設定 ]をクリックします。
3.「設定対象(Q):」の下の[+外部インターフェイス]をダブルクリックして、「ショートカットの登録/削除」のチェックボックス部分にチェックマークを入れます。
4.[ 登録更新(U) ]ボタンを押すと反映されます。
5.作ったショートカットの名前を「PSPかいはつ」とか(覚えやすい名前)にすると おけ。
   ショートカット

  拡張子の関連付け以外には、レジストリは使っていません、との事。

使い方
1.ショートカットをダブルクリックで起動します。
2.[ ファイル ] → [ 開く ] で、ソースの在り処へ移動してからソ-スを開きます。
3.編集後、上書きして保存。
 (細かい事については README.TXTを読みましょう)

ビルドとは?
EBOOT.PBP を作成する事を、「ビルドする」、と呼ぶらしいです。
コンパイルとは、オブジェクトファイルを作成する作業です。
リンクとは、オブジェクトファイルを結合して、EBOOT.PBP を作成する作業です。

ですから、コンパイルからリンクまで通して作業させる事を、ビルドと言いましょう。

ビルド方法
Apsaly の [ ツール ] → [ 外部プログラムの実行 ] をクリックします。
↓↓ こんな風に設定して下さい。

[実行コマンド]には、make.exe を起動するためのバッチファイルを指定します。
ここでは、!__ビルド.bat というファイルです。

設定し終えたら、[ 実行 ] ボタンを押してください。ビルドが始まります。

今まではコンソール出力の画面でしたが、Apsaly が(標準出力)というタブを作り、そこへ内容が出力されます。
↓↓ こんな風に (クリック拡大して見てください)。
ビルドとメッセージ


ビルドまで試して下さい。
便利でしょ?今まで書き写していたエラーメッセージが、コピペ可能になりました。

再度ビルドする作業は、 [ ツール ] → [ 外部プログラムの実行 ] → [ 実行 ] で出来ます。ラクチンです♪

こういう機能があって、フリーウェアな Apsaly は、是非お勧めしたいソフトウェアです。
是非、導入してみて下さい。


このテキストエディターは、Windows用 Borland C++ Compiler などにも利用可能です。

[edit]

CM: 0
TB: 0

page top

C言語では、プログラムはヘッダーファイルとプログラムコードファイルとライブラリファイルとに大別されます。
一般的には、インクルードとはヘッダーファイルなどを参照することで、リンクとはライブラリを取り込む事のようです。全角文字表示ライブラリでは、東雲フォントのデータ(Shinonomefont.c)をインクルードしています。(注)

ヘッダーファイルとは、プログラムで使用する関数の宣言(返り値や引数のキャストも書かれています)や、定数の定義や変数の構造体の定義や、マクロ定義などを書くテキストファイルで、拡張子は '.h' 。
別名、インクルードするファイルとか、インクルードファイルとか呼ばれます。

ヘッダーファイル中で、変数の本体を宣言したり、関数の本体を書くことはお勧めしません。
理由は、ヘッダーファイルをインクルードした全てのファイルから参照できるので、同じ変数や関数がどこにでも作成されることになり、「本家はどこですか?」というコンパイルエラーが発生します。

一般には、ヘッダーファイルは、「参照すること/参照させること が目的」です。

(注)
全角文字表示ライブラリでの、フォントデータの参照方法
東雲フォントのデータ、const char shinonomefont[ ]; が書かれているファイル shinonomefont.c は、コンパイルされるだけでインクルードはされていませんが、どうやって shinonomefont[ ]; が参照されているのかを紹介します。
ファイル zenkaku.c の、draw_char( ); 関数にて、extern宣言で const char shinonomefont[ ]; を参照する、という記述がされています。
extern宣言で参照させたい変数や関数は、実行ファイルをビルドさせる全てのオブジェクトのどこかに本体が一つだけあれば良いのです。
全角文字表示ライブラリでは、MAKEFILE で

OBJS = main.o zenkaku.o shinonomefont.o

という記述で const char shinonomefont[ ]; のデータ本体があるファイルを リンクさせています。

プログラムコードファイル(という呼び名でいいのかな?)の'.CPP' '.C' '.S' では、変数を宣言したり、関数の実際の処理などを書きます。
プログラムの本体です。このファイルで定数の定義や変数の構造体の定義や、マクロ定義などを書いてもエラーにはなりませんが、美しくないので、プログラムコードとヘッダーとにファイルを分けて書いたほうが良いと思います。
ただし、ヘッダーファイルは参照させたい事を書いておくファイルなので、むやみやたらと分別して書くのでは困ります。
サブルーチンAという関数で、補助サブルーチンB、C、Dを呼び出している場合に、そのヘッダーファイルにも サブルーチンB、C、D の宣言を書いておくと、そのヘッダーファイルをインクルードさせた途端 他からもサブルーチンB、C、D の呼び出しが可能になってしまうので(変数や構造体なども同様)、上手に書き分けて下さい。
参照させたくない定義や変数や補助関数などは ヘッダーファイルに書かないで、プログラムコードソース・ファイル側 に書いて下さい。


ライブラリファイルは、良く使うプログラムソースをコンパイルして出来たオブジェクトファイル(バグ取り済み)を寄せ集めたアーカイブです。拡張子は '.a' 。
「ヘッダーファイルとアーカイブファイル」を指定するだけで利用できる便利な関数群とでも捉えておいて下さい。


PSP用のライブラリには、全角文字表示ライブラリ、画像や音声等を扱える「DXライブラリPortable」、PSP本体内蔵のフォントを利用できるイントラフォントライブラリ、SXライブラリ、タイムマネージャライブラリ、アニメーションライブラリなど、色々あります。

ライブラリは、上手に利用すると、短いソースコードでmp3音楽を再生できたりするので便利です。


次回は、「ライブラリの導入」です。お楽しみに~♪


【 関連記事 】
PSPプログラミング PSPSDK に同梱されているライブラリの一覧とリンク記述
PSPプログラミング EBOOT.PBP 生成用 Makefile 記述方法
PSPプログラミング プラグイン生成用 Makefile 記述方法
PSPプログラミング 正しい main( ) 関数の書き方を ご紹介

[edit]

CM: 14
TB: 0

page top

PSPプログラミング 制御文字への対応・・・。 

2009/11/11
Wed. 07:25

現行のPSPSDKは、シングルバイト文字コードの C++コンパイラ です。

PSPSDK では、エスケープ文字(制御文字)として、¥ (0x5c) が使われています。
このため、ソースをコンパイルさせた段階で、ソースの中の 文字列 の 中に 0x5c というコードを発見すると、コンパイラ(psp-gcc.exe)が勝手に制御文字チェックをしてしまい、無効な制御文字を省いた文字列に改変してしまうのです。

例 だめな文字列
    "あいうえおAB1\\表十噂浬欺圭構蚕 "

これをバイナリで見ると(コンパイル前)

    82 A0 82 A2 82 A4 82 A6 82 A8 41 42 31 5C 5C 95  あいうえおAB1\\表
    5C 8F 5C 89 5C 8A 5C 8B 5C 8C 5C 8D 5C 8E 5C   十噂浬欺圭構蚕

ビルドした EBOOT.PBP のバイナリでは(コンパイル後)

    82 A0 82 A2 82 A4 82 A6 82 A8 41 42 31 5C 95 8F  あいうえおAB1\撫
    89 8A 8B 8C 8D 8E 00 炎旧克

     ↑↑↑ コンパイラにより、文字列が誤変換されています。

そこで、どうしたら良いか いろいろ考えてみました。
文字列中の 0x5C を 全角文字の場合だけ2バイト目が 0x5C だったら 直後に
もう一個 0x5C をつけてやると正常な ¥ になる事が判明したのです。

そこで、『制御文字 0x5C を正しく修繕するアプリ for Win32(仮称)』を作り、
そのパッチでC++ソース中の文字列に \を必要なら追加してファイル上書きしてから
そのC++ソースでビルド作業をすればいいんじゃね? という、実にくだらない発想
をしてみました。

変換するソースは、そのアプリにドロップしたファイルのみ、とか考えています。
パッチあてに失敗したら、ソースがぐちゃぐちゃになる可能性があるので、
上書きはやめておきます。別ファイル名で新規作成とか。

PSPSDKの日本語化パッチ作成 も考えましたが、苦労して制御文字の日本語対応
のみ、では むなしいので却下ですよ。
(実は、psp-gcc.exe を 逆アセンブルしてアセンブラソースで解析していたという裏話)
↑↑ コレをやるなら、エラーメッセージとか警告とかも日本語化させるべきですよ。
私は80x86アセンブラならなんとか解りますよ。R4000アセンブラはムズイ。

では、『制御文字 0x5C を正しく修繕するアプリ for Win32(仮称)』とやらの製作に
入りますので しばらくお待ちください。

【 関連記事 】
Windowsアプリ 制御文字リペア 【はるるん v0.2】 リリース!

[edit]

CM: 5
TB: 0

page top

新年あけまして おめでとうございます

新年です。
今年こそ、「みくねぎっと。」のソース公開&解説をしたいと思ってます。
今年の初仕事は、ライブラリの導入です。


ライブラリとは、オブジェクトファイル等をまとめたファイル群です。
ランタイムライブラリとは違いますので、ご注意ください。
SDKとは、ソフトウェア・デベロップメント・キットの略で、ソフトウェア開発キットの事。

オブジェクトファイル - Wikipedia
SDK(ソフトウェア開発キット) -Wikipedia
ライブラリ - Wikipedia
ランタイムライブラリ - Wikipedia

標準の PSPSDKは mp3ファイルをデコードして再生する といった命令群が無いので、
フリーで使えるmp3再生用のソースやオブジェクトを使います。
それがライブラリを使うきっかけです。

まず、第1回目のライブラリの導入編

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

URL をむき出しにしてみました。これは、カスタムファームウェア 4.01 M33 です。
この中に、ライブラリが入っているのですが、何人の方が覚えてるんでしょうか??

再起動時の HEN モジュールローダー と、PSPパッカー(梱包の意)が同梱してます。


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

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

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

TARGET =
OBJS =

PSPSDK=$(shell psp-config --pspsdk-path)
INCS = $(PSPSDK)/include $(PSPSDK)/DAX/include
INCDIR = $(INCS)

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

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

LIBDIR = $(PSPSDK)/DAX/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 = アイコンのPATH
PSP_EBOOT_ICON1 = NULL
PSP_EBOOT_UNKPNG= NULL
PSP_EBOOT_PIC1 = NULL
PSP_EBOOT_SND0 = NULL

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

# ここから下は、任意です。
main.o : main.c main.h
graphic.o : graphic.c graphic.h
sound.o : sound.c sound.h
input.o : input.c input.h
font.o : font.c


いつか使う時が来るまで封印ですな。

次回は、いよいよDXライブラリPortable の導入編ですよ~~♪

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

[edit]

CM: 0
TB: 0

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

PSPプログラミング PSPSDKをアップデートしよう 

2010/05/22
Sat. 08:25

SOURCEFORGE に PSPSDK の新しいのがあったのでいつか紹介しようと思いつつ放置.
今日ようやくお知らせします.

Minimalist PSPSDK Ver.0.9.5
http://sourceforge.net/projects/minpspw/

OSLib というライブラリが追加されています.
PNG画像を扱えたり、~.WAV や ~.BGM などの音声を扱えるライブラリです.
OldSchool Library という正式名で、QJ.net で このライブラリ単品がダウンロード出来ます.

このブログでは DXライブラリPortable の解説が終わったら、OSLib の解説をしようと考えています.

他にも色々と更新変更点があるようです.調査中.




[edit]

CM: 0
TB: 0

page top

PSPのCPU動作クロックをいじってみる。 PSPSDK 

2010/06/13
Sun. 21:03

メーカーが明かしたPSPの性能表には、PSPに使われているCPUの型番と動作クロック周波数も書かれています。
PSPの性能(過去記事)


必読の資料
第4回 CPU・MPUはどうやって動く? ~ 発振器のナゾ - @IT MONOist
クロック周波数とは?
バスクロックとは? 意味・解説

エミュレータでは実行速度を上げる為に、CPUクロック周波数を333MHzなどに上げる処理がみられますね。

PSP の 333MHz駆動は、長時間持続させるとCPUが壊れる可能性がかなり高いです。危険なので、333MHz駆動をさせる場合は気をつけて下さい

CPUクロック周波数について補足
 CPUが、一番速く処理できる命令(何もしない命令:NOP とか)を 1秒間に何回実行できるかの回数。単位はHz(ヘルツ)。
 1つの機械語命令の、処理開始から処理終了までの実行にかかる時間は クロックという単位で表され、2~3クロック程度の速い命令から 10~30クロックくらい(またはそれ以上)かかる遅い命令などもあります。
 一般に、CPU内部では 掛け算命令は足し算の繰り返しで計算して求められるので 他の命令より処理速度は
遅いのです。
 PSPは、222MHz駆動なので、最速 222百万回/秒 の命令を実行できる、という計算上での話。
 もちろん、値が大きいと処理速度が速い、という事です。


一般に、バスクロックに与えるクロック周波数は、CPUに与えたクロック周波数の半分の値です。
PSPでも、CPUのクロック周波数を半分にした値をバスクロックに設定すればいいのです。


PSPSDK で記述する場合 このソースコードはBSDライセンス
#include <psppower.h>
// CPU動作クロック周波数を変更
int freq;

freq = 300;
if (freq < 222 || freq > 333) freq = 222;
scePowerSetClockFrequency( freq, freq, (int)(freq/2) );
  第1パラメータ内部PLL…………… 19 ~ 333
  第2パラメータCPUクロック……… 1 ~ 333
  第3パラメータバスクロック………… 1 ~ 167



CPUの動作クロック周波数を下げると、消費電力が抑えられますので、PSP Homebrew の mp3プレイヤー などではCPU動作クロック数を下げる処理がされていて、標準で5時間駆動のPSPが9時間駆動とかになるのは この為です。

ちょっと裏技とか
PSP Revolution では 222MHz と 333MHz での切り替えしかありませんが、CWC(チートプラグイン)を使えば 300MHz駆動とか可能になりますよ~


パソコンのCPUクロック周波数についての一覧表は、こっちを見て下さい。


[edit]

CM: 0
TB: 0

page top

SOURCEFORGE に PSPSDK の新しいのがあったので、お知らせします.

Minimalist PSPSDK Ver.0.9.6
http://sourceforge.net/projects/minpspw/
(ちゅうい)このページの、ダウンロードボタンではなくて…↓

20100701__PSPSDK_096.gif

 pspsdk-setup-0.9.6.exe を ダウンロード

更新履歴も読んでください(C:\pspsdk\readme.txt)

なにげに OSLib v2.10 が いい感じなので、DXライブラリPortable の解説が終わったら OSLib の解説をしようと考えています.その前に、みくねぎっと。のソース公開&解説やります.


[edit]

CM: 0
TB: 0

page top

PSPプログラミング PSPSDK用アドオン 

2010/07/04
Sun. 06:51

コメント欄で Minimalist PSPSDK の アドオンを紹介して頂いたので記事にします

PSPSDK用のアドオン……登録ライブラリが増えます。が、GPLライセンスでの利用のみという制限があります(そんなぁ~~
(PSPSDK に付属のサンプルソースコードは、BSDライセンスで提供されています)
GPLライセンス - Wikipedia
BSDライセンス - Wikipedia
フリーウェア - Wikipedia


追加されるライブラリとかの解説を読む
      ↓↓↓↓↓↓
同意してダウンロードしたい方は、そのページの左下隅の Downloads をクリックして開くページからダウンロードできます


別途追加するの面倒だから、PSPSDKに吸収されちゃえばいいのに(ぉ


[edit]

CM: 0
TB: 0

page top

現在時刻の取得 PSPSDK 

2010/07/10
Sat. 21:15

PSPの現在時刻を取得する手順について解説します


PSPSDK編

<psprtc.h> ヘッダーファイルに、こういう定義を発見!
typedef struct {
u16 year; // 年
u16 month; // 月
u16 day; // 日
u16 hour; // 時
u16 minutes; // 分
u16 seconds; // 秒
u32 microseconds; // 1/1000000 秒
} pspTime;
  ↑ ん?符号無し数値ですか。


#include <psprtc.h>
int sceRtcGetCurrentClockLocalTime ( pspTime *time );
   ↑ PSPSDKでは、この関数で現在時刻の取得が出来るようです.
     (精度はマイクロ秒単位!)

【 使い方 】

pspTime tick_time; // こんな風に構造体変数を登録して・・・

sceRtcGetCurrentClockLocalTime( &tick_time ); // これで、構造体変数 tick_time へ入力されます


構造体変数を登録して、そのポインタを渡して呼び出すと、構造体変数の中に現在時刻一式が入力されます.


[edit]

CM: 0
TB: 0

page top

2012/01/08 記事だけ更新

お待たせしました。
今回は一人でデバッグやりました。v0.3 完成でっす。

シングルバイト系のCコンパイラPSPSDKでのソースコード日本語問題、だめ文字 0x5C を正しく修繕してくれる Windowsアプリ「制御文字リペア 【はるるん v0.3】」を更新しましたので配布開始します。


PSPSDK+全角文字表示ライブラリを使ってプログラムを作ると、「表示」という文字が文字化けします

ソースコードを「はるるん」にドロップしてからコンパイルすると・・・


理由
プログラムソースコード中にシフトJIS文字列を含む場合、PSPSDKでコンパイルすると文字化けする現象があります
原因は、文字列にだめ文字を含んでいるからです

だめ文字がある場合のコンパイル時の警告
 「main.c:136:17: warning: unknown escape sequence: '\216'


「はるるん」にかけると、ソースコードのだめ文字の箇所が修正されます

HARURUNN_TEST1.png
↑↑ こういうソースを…。

HARURUNN_TEST2.png
↑↑ このように修正してくれるアプリです。便利。


このバージョンから、ソースコードを何回でも修繕できるようになりました。
また、複数のソースファイルを一度に放り込んで、順番に処理させる事も可能です。

このアプリは安全であることを証明する為に、ソースを付属してあります。
気になったら ソースを確認してくださいね。

作者より
動作不具合、改善要望など御座いましたら ご一報下さい。
皆んなで作ろう! Homebrew !

このソフトの二次配布、転載について

二次配布・転載は自由です。あなたのソースコードに含めて配布する事も可能です。

  このアプリは猫山のPCでウイルスに感染してない事を確認したうえで配布しています 
  しかし、ネットに常時接続の際にPCがウイルスに汚染する場合も充分ありえますので  
  定期的なウイルスチェックはこまめに行ないましょう!

ありか
このブログのあっぷろーだーにあげてあります。
http://yui.oopsup.com/download.php/PSPer/HARURUNNv03.zip


【 関連記事 】
PSPプログラミング 制御文字への対応・・・。

[edit]

CM: 1
TB: 0

page top

ちょっとお伝えしておきたい事があります.
過去バージョンの PSPSDK は 残しておいた方がいい、という事.
PSPSDK は バージョンアップ完全上位互換 では無い様なので、コンパイラのバージョンが違うと構文エラーが発生して無駄なバグ修正をさせられるハメになる場合があるのです.

例を挙げると、NesterJ v1.12 のソースコード(Takka氏 製作)は、PSPSDK v0.8.10 でなら正常にビルドできるのに、バージョンが違う PSPSDK だと余計な構文エラーが発生してビルドするのに手間がかかります.

ですから、過去バージョンは残して下さい.PSPSDKを上書きアップデートしない事をお勧めします.


猫山は、こんなフォルダ構成にしています

C:\PSPDEV \ 0.8.10 \ PSPSDK
\ 0.9.5 \ PSPSDK
\ 0.9.5Addon \ PSPSDK
\ 0.10.0 \ PSPSDK
\ 0.11.1 \ PSPSDK

ビルド.batの中身

set PSPSDK=C:\PSPDEV\0.8.10\pspsdk\
PATH=%PSPSDK%bin\;%PSPSDK%psp\bin\
DEL *.O
DEL *.ELF
DEL *.SFO
DEL *.PBP
make
pause

こんな風に PSPSDKバージョン管理をやっています.
PSPSDKバージョン数値(赤色部分)を書き換えるだけでコンパイラバージョン変更できるので便利です.

明日の記事で、古い PSPSDK も ダウンロードできる場所を教えますので安心してください.


記事を書き換えてたら30分遅刻だw(23:00)

[edit]

CM: 0
TB: 0

page top

はいはい、昨日 告知した、新旧 PSPSDKシリーズのありかを一挙大公開です.


0.8.10 は QJ.net にあります.
>> http://nekoyama2gillien.blog36.fc2.com/blog-entry-48.html

0.8.10 ~ 0.11 .2 は、以下にあります.
>> http://sourceforge.net/projects/minpspw/files/SDK%20%2B%20devpak/

欲しいものをインストールすれば良いでしょう.
オススメは、0.8.10、 0.9.5、 0.9.5-Addon、 0.11.2 です.
猫山は全部入れています

D:\PSPSDK\0.8.l0\
\0.9.5\
\0.9.5-Addon\
\0.10.0\
\0.11.1\
\0.11.2\


インストール手順は、過去記事 0.8.10 導入編 を 参照してください

インストールしたら、DXライブラリPortable、CFW 3.71m33Lib、CFW 4.01m33Lib、署名ツール、・・・かな、入れて下さい.

PSPSDK 0.9.5 のアドオンはこの記事で
http://nekoyama2gillien.blog36.fc2.com/blog-entry-298.html


[edit]

CM: 3
TB: 0

page top

拡張されたメモリを使うには、ダークアレックス氏が開発したSDKを使えばいいのです
このブログでも既に記事にしていますし、takka氏もブログで解説されてらっしゃいます

PSPプログラミング PSPSDKにライブラリを追加しよう(5) CFW3.71m33
http://nekoyama2gillien.blog36.fc2.com/blog-entry-250.html

> 新型PSPの増設メモリの使い方
http://takka.tfact.net/blog/archives/37

おまけで書いておきますが、一部のカスタムファームウェアでは既にメモリが拡張された状態になっており、このSDKを使う必要はありません

[edit]

CM: 0
TB: 0

page top

はい、NCDZPSPの改造制作の時に勉強した、スクリーンショットを撮影する為の関数を公開

これは PSPSDK のサンプルソースコードとネットで見付けた記事をミックスさせたコードです
まぁ、BSDライセンスでいいでしょうと。


スクリーンショット関数のソースコードを見る
http://blog-imgs-17.fc2.com/n/e/k/nekoyama2gillien/ScreenShot.html


JPEGって画像全体で圧縮するのですが、PNGって水平ライン単位で圧縮するのだな、と分かるでしょう。
皆さんの制作ゲームにもスクショ機能付け足してみるとか

次回は、スクリーンショットPNG撮影プラグインでも作ってみようかな?

[edit]

CM: 4
TB: 0

page top

PSPプログラミング ライブラリについて解説 

2012/02/05
Sun. 05:03

「MakefileのLIBSについて詳しく教えて下さい。」という質問を受けたので


Q.ライブラリって何ですか?
A.プログラムコードをまとめてアーカイブしたもの。 プログラム集。 ライブラリを活用すれば、複雑なプログラムを書く手間が減ります

つまり、PSPプログラミングで PNG画像を扱いたい場合、
・LIBPNGライブラリ
DXライブラリPortable
OSLib(OLD School Library)
のどれかを使えばを使えば可能

mp3音楽を再生したい場合
・LIBMADライブラリ
DXライブラリPortable
OSLib(OLD School Library)
のどれかを使えばを使えば可能

などなど、便利なプログラムが詰まっているのがライブラリというものです
ライブラリはプログラムソースコードは公開されず、実行ファイルに取り込める形式で提供されており、使い方がヘッダーファイルで提供されています
ライブラリを使う場合は、そのヘッダーファイルに書いてある記述方法に従って、命令を書きます

プログラムの #include記述 でヘッダーファイルをプログラムソースコードに取り込みして、Makefile の LIBS= でライブラリ本体を実行ファイルに取り込みします


ライブラリの使い方参照のために、インクルード記述をするのです
プログラムソースコード
#include <stdio.h>
#include <stdlib.h>
#include <pspkernel.h>
#include <pspdisplay.h>
#include <png.h>

ライブラリはコンパイル時に合体させます
Makefile
LIBS =  -lpsppower -lpng -lpspgum -lpspgu -lz -lc -lm



Makefile に記述する、ライブラリ名称の書き方についてはこちらを参照の事
PSPプログラミング PSPSDK に同梱されているライブラリの一覧とリンク記述
http://nekoyama2gillien.blog36.fc2.com/blog-entry-179.html


ここで、PSPSDKには複数のバージョンがあるという事と、それに伴いライブラリにもバージョンがあるという事を再度書いておきます

例:LIBPNG
libpng は、PNG画像を扱うライブラリで、現在は 1.5.X系列 / 1.4.X系列 のバージョンですが、1.2.X系列 の過去のバージョンもあります

>libpngのページ
http://www.libpng.org/pub/png/libpng.html


サンプルソースコードの 「 libpng > screenshot 」 は、PSPSDK v0.11.2r3 ではコンパイルできませんが、PSPSDK v0.10.0以前ならコンパイルできます

理由
PSPSDK v0.11.2r3 での libpng は 1.5.X系列 / 1.4.X系列 のバージョンですが PSPSDK v0.10.0 以前の libpng は 1.2.X系列 なのです

PSPSDK v0.11.2r3 でサンプルソースコードの 「 libpng > screenshot 」 をコンパイルすると、こういうエラーがでます
main.c:(.text+0x450): undefined reference to `png_set_gray_1_2_4_to_8'

これは、PSPSDK v0.11.2r3 の libpng では廃止された 1.2.X系列特有の命令が含まれているため、です
なので、「 libpng > screenshot 」 は PSPSDK v0.8.10 でならコンパイルが通ります


なお、ライブラリは Makefile の LIBS= に書かれている順番で、左(先頭)から順に追加されてゆきます
DXライブラリPortableOSLibを先頭に記述するのは、DXライブラリPortableOSLibがlibpngなどを呼び出ししているから、です。親と子の関係。

「 libpng > screenshot 」 はソースコードを手直しする必要があります。
MakefileのLIBS=は
LIBS =  -lpsppower -lpng -lpspgum -lpspgu -lz -lc -lm

の順番でないとリンク参照エラーがでるようです


まとめ
PSPSDKのバージョンによって、ライブラリの内容が異なります
ライブラリには取り込む順番があります


[edit]

CM: 3
TB: 0

page top


h o m e |


 

2017-07