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

はじめに・・・ 

2000/02/01
Tue. 05:55

はいはい、わたくし猫山は、自作ソフト、自作ゲーム、自作アプリ、などが大好きで、自作ソフトを作ってみたかったのでシステムソフトウェア1.50 の PSPを購入しました。 不純な気持ちで無いことは明白! パソコンで自作をやればいい!という人も居るでしょう。 PSPなので、「持ち運びできる自作ゲーム」という魅力がタマランチ♪ そんな訳でPSPなのです

このブログでは、皆さんにも自作ソフトの作り方などを分かりやすく解説して、自作ゲームとか作っちゃおう、という野望(?)を原動力にお送りする次第であります。

自作ゲームと言えば、とてもメーカーが作りそうも無い作品だったり、某キャラの○○○な姿を見せてくれる作品だったり、A社のキャラとB社のキャラのコラボした作品だったり、不謹慎ネタなので絶対発売は出来ない作品だったり・・・。

つまり、公式メーカーが作れないゲーム(販売できないゲーム)を作れるのが魅力だと思います。
たとえゲーム性が無くても、充分楽しめるゲーム(例えば、音楽に合わせてネギを振る「はちゅねミク」とか)はファンに根強い人気を誇っています。

それに、作りが単純でシンプルなゲームが多い、自作ゲームたち。
猫山は、自作ゲームというものは、利用者さんに迷惑をかけないもの、利用者さんを困らせないもの、なら何だって作っていいと思います。でも、アダルト物は同人とかでやってね! 暴力的なものは、ちゃんと明記して同意した上で遊んでもらうように配慮した方がいいかも、です

本来ゲームというのは、現実逃避できる架空の世界を楽しむ手段ではないかと思います。なので、一発ネタのゲーム(例:旗揚げゲーム「みくねぎっと。」)であっても、楽しんでいただけたらそれはそれで成功している、と言えます。

「自作ゲームなんだし、大したこと無いよ」というゲームでも、たまに遊びたくなるから不思議。猫山の作品では、じゃんけんゲームが一番人気みたいですね。一人ではじゃんけん出来ないから・・・??

なので、皆さんは自由な発想で、色んな自作ゲームを編み出して欲しいのです。「俺には作れないよ、ムリ。」という人は気持ち一杯になってるだけです。作りたいゲームを徹底的に調べてアルゴリズムを導けば、どんな自作ゲームだって作れる道が開けると思います。

・・・そんな気持ちを込めて、わたくし猫山は自作ゲームの作り方を公開してゆこうという訳です


                                        2011.08.09(TUE)   猫山猫宗


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

[edit]

CM: 6
TB: 0

page top

PSPプログラミング資料 - ガイド - 

2000/02/01
Tue. 07:00

  
 
 
基礎学習   PSPプログラミングを始める前に・・・


PSP自作ソフトの作り方   読み物


コラム   豆知識など


Makefile書き方(EBOOT.PBP)   Makefile書き方(プラグイン)


PSPSDK
  パソコンにインストール
  英語版「ハローワールド」   全角文字版「ハローワールド」
  PSPSDKで描画   PSPSDKでパッド入力   PSPSDKでファイル操作


DXライブラリPortable
  パソコンにインストール
  「ハローワールド」署名版    プログラムの書き方(ひな形)
  DXライブラリPortableで描画  DXライブラリPortableで文字列描画  DXライブラリPortableでパッド入力
  DXライブラリPortableで音楽  


OSLib
  パソコンにインストール
  「ハローワールド」署名版    プログラムの書き方(ひな形)   日本語文字列の描画

 

【 ぷちプログラミング 】
  画面を青く塗りつぶすプログラム
  ドット打ち&ドット移動プログラム
  PSP画面に ビットマップ画像を描画するプログラム
  東雲フォント文字を全部表示しちゃうプログラム
  PSPデスクトップ ドドド v0.1
  サウンド関数で「ドドド」
  PSPパッドの読み取り(デジタル部分)
  簡易アニメーション
  『UTAUスライドショウ』DXLibP版(音無し版)
  『UTAUスライドショウ』NEO』DXLibP版(音声付き)
  『UTAUスライドショウ』 旧OSLib版(音声付き)
  スクリーンショット撮影関数(PNG画像)
  サイコロさんゲーム
  DXライブラリPortableでRPG製作



署名についての資料


Half-Byte Loader のコンパイル

関連記事

[edit]

CM: 2
TB: 0

page top

  


何かを開発する時は、「開発費」が無くては出来ないことを肝に銘じておいて下さい。

PSP Homebrew(自作ソフト)の開発にも、その事は言えます。

絶対必要なのん
・実機
・実機の詳しい資料
・開発用マシーン(ワークステーションとかパソコンとか)
・ソフトウェアの企画者…どういうのを作るか決めます
・プログラム開発者…プログラム作りをします
・リソース開発者…そのソフトウェア用の素材(画像・音声など)を作ります
・テストプレイヤー…作品を鬼のように試験して、挙動がおかしい箇所が無いか確認します

一人で作る人は(私もそうです)、全部一人で行ないます。
企業では、プログラマーとかイラストデザイナーとかサウンドクリエイターとかプロの職人さんを雇えるので、チームを組ませてソフトウェア開発をします。

たとえ多額の開発費を投じても開発したソフトウェアがヒットするとは限りませんし、小額ではショボイ作品しか作れません。
アイドルマスターの3D-CG を開発したソフトウェアを調べると、総額200万円以上する業務用ソフトである事が判明して 気合入ってるなぁとか思ったり。

ここで、「みくねぎっと。」の開発に使ったモノ全部を書いてみます


・PSP
・開発用パソコン
・プログラム開発用ソフトウェア(PSPSDK & DXライブラリPortable & ほか)
・PSPの資料
・ねんどろいど初音ミク
・デジカメ
・写真加工ソフト
・VOCALOID2 初音ミク
・音声加工ソフト
・効果音作成ソフト
・旗揚げゲームについての資料

・電気代
・製作&開発時間
・技術
・根性

私はこれだけ投じて無料配布やってますよ?
(ホームページの運営費とか動画製作費とかは除く)
いくらかかっているか調べたい人はドゾ(但し、金額をコメント欄に書き込んではダメ)

以前私は「PSPデスクトップ ドドド 改」の開発中に、「そんなくだらないもの作るな!」とコメント欄に書き込まれた訳ですが、無料配布するんだし無視すればいいだけなのに、何故?
このブログに自作ゲームのダウンロードだけに来ているんでしょうか?
プログラマーらしからぬ発言ですね。正当な理由もなくあなたの価値観を押し付けないで下さい。
無料で使用できる作品の製作にまでケチつけられてはやっていけませんよ?



ここで、PSPの自作ソフトウェアの作り方を書いてみます(某所のQAコーナーに過去に書いたものです)

いきなりPSPでプログラミングするのは難関なので、Windows でプログラミングが出来るように慣らしておいたほうが良いです

必要なのは、改造したPSPとパソコンとお金と根性です。
改造PSPは、カスタムファームウェアが導入されたPSP。改造がイヤならファームウェア Ver1.50 のPSPを用意します。
パソコンは、プログラムを作る作業をさせます。
お金は、作品をより良い物に仕上げる為に投じる開発費です。
根性は、最後までやり遂げる忍耐力のことです。途中で投げ出すような軟弱な人には、どんなソフトウェアだって作れません。

個人での自作ソフト開発であるなら、Windowsパソコンに PSPSDK というCコンパイラをインストールします。
PSPSDKは、C言語やC++言語でプログラムソースを書いたものしか理解できないので、C言語、C++言語の知識が必要です。
PSPSDKには見本のプログラムソースが付いているので、まずソレを実行ファイルに変換する作業(コンパイルやリンク、まとめてビルドするなどと言います)をします。
実行ファイルが出来たら、PSPに転送して起動テストをします。

まずはこんな感じです。ここまで出来ないと、先には進めません。

初歩的なことが出来るようになったら、ネット検索で「PSPプログラミング」「PSPサンプルソース 解説」などで検索して、「○○をしたい時は△△△と書いたら良い」など、お決まりのプログラムの書き方を憶えます。

最初は、PSP画面に「Hello, world」という文字列を表示させるプログラムソースと、その意味を調べるといいです。
「Hello, world」というのは、C言語を発明した方が、C言語で最初に作ったプログラムです。

どのC言語の参考書にも、「Hello, world」のことは書いてあるので、手ごろなC言語の本を一冊買って勉強するのもいいでしょう。
現在は、PSPプログラミングについての日本語書籍は未存在なので、PSPプログラミングについて研究している人のサイトを見つけて勉強すると良いかも知れません。


では、開発費がかかっているのに 何故無料配布するんでしょうか? 儲かりませんよ?
それは、無料作品を試してもらい、仕事を得るきっかけを待っているからです。

現に私は「みくねぎっと。」を公開して某同人サークルに認められ、雇われました。給料が貰える副業に在り付いたのです。(ニートとか無職とかだった訳ではありませんが)
同人サークルは企業の前身みたいで、絵とか音声とかの専門家が作った素材(リソース)を使って作品作りをします。

PSP Revolution の作者さんも、今 何かの仕事に在り付いてるんでは無いかと思ってます。

ビルゲイツ君は世界一の大金持ちプログラマーで有名ですが、日本ではプログラマーの地位は何故か低いので、給料も少なめです。コンピュータソフト会社は結構給料は良いのですがね。


どうですか? PSP自作ソフトの開発をやりたいですか? やめるなら今のうちですよ。 強制はしません。


みくねぎっと。配布条件に 使用者さんの意見を求めていたのですが、動作報告と「ムズイ」という感想だけでした。
公開してから6ヶ月しか経過していませんが、本日で総ダウンロード数は350件超いってます。
これって多いのかなぁ???

みくねぎっと。って一発ネタだし、一回遊んだらそれでおしまいな作品なのは分かってます。
でも、未だに人気あるみたいですな。


PSP自作ゲームを作ってみたい方は、こっちのページを読んでみて下さい
まだ作り中の記事ですが


関連記事

[edit]

CM: 13
TB: 0

page top



おことわり
こちらから始まる講座は、若い人向けに分かりやすく書いています。ですから詳しく調べると間違った書き方になっているものもあります。色々な事が分かるようになったら、もっと詳しく自己学習してくださいますよう、お願いします


初回のテーマは「2進数に慣れよう」

コンピュータというか、電子部品の基礎からお勉強するのだっ。

電気が入る   = 通電 = ON
電気が切れる = 断電 = OFF


上記の事は、理解して欲しい。分かりますよね?

電気が入る、切れる、で ON、OFFです。
これは、通電ON / 通電OFF(断電)。

コンピュータの世界では、条件式を演算し、その結果、
その答えが、真なのか偽なのかの判定をして、それぞれの場合の処理を行います。

電子回路(コンピュータも含む)に演算させると、判定結果のフラグ(=旗)の電流の状態が変化します。 通電ON / 通電OFF(断電)。

この 通電ON / 通電OFF は2パターンなので、「0」と「1」の2進数の数値で表す事ができますが、詳細は書きませんので知りたい方は独学で勉強してくださいね

[基礎]
通常 慣れ親しんでいる10進数は、0,1,2,3,4,5,6,7,8,9 の10パターンですね?
2進数は、0,1 の2パターンしか無いのです。


(例) これを踏まえて、プログラミング例

0001 ////////////////////////////////////
0002 //  コメント欄
0003 //     リンゴの色は?
0004 ////////////////////////////////////
0005 
0006 定  義:リンゴを1個、調達
0007 
0008 条件式:リンゴの色は赤色か?
0009 判  定:真(赤色)なら、[ラベル]*AKA の行へ飛べ
0010 //  (偽(赤色でない)場合の処理を下記に書く)
0011 // リンゴは赤くない
0012 処理A1:リンゴの色を赤く塗る
0013 処理A2:売りに出す
0014 処理A3:終了
0015 // リンゴは赤い
0016 *AKA   // [ラベル]
0017 処理B1:リンゴを蒸す
0018 処理B2:売りに出す
0019 処理B3:終了

C++ライクな日本語で、プログラムの核を書いてみた。
理解して頂けるであろうか。
[C++ライク]と定義したのは、C++言語でのプログラミングを想定しているからです。
プログラム中に // とあったら、その2文字(スラッシュ)以降の行は注釈(コメント)です(C++で拡張されたのです)。
また、C言語/C++言語での注釈は、 /* ~~~~~ */ という記号で囲んだ部分に当てはまります。詳しくは、C言語 / C++言語 の教科書参照の事。

では、今回はこれだけ。

関連記事

[edit]

CM: 4
TB: 0

page top

2010年1月15日 更新
今回は2本立て!

まず、「ビット」と「バイト」について

ビットとは、0もしくは1の2進数表現であり、データの最小単位です。
3ビットと言うと、2進数3桁の数値を指します。
16ビットと言うと、2進数16桁の数値を指します。
バイトとは、記憶容量の最小単位です。

KB=キロバイト
   ↓ 1000倍(注1)
MB=メガバイト
   ↓ 1000倍
GB=ギガバイト
   ↓ 1000倍
TB=テラバイト
   ↓ 1000倍
PB=ペタバイト

※注1・・・正確には、1024倍なのです。(2^10)・・・2の10乗が、1024。よって1024倍。

で、PSPプログラミングに於いては1バイト=8ビット(2進数8桁)で覚えておいてください。
故に 2バイト=16ビット(8ビット×2倍)、4バイト=32ビット(8ビット×4倍)、8バイト=64ビット(8ビット×8倍)、16バイト=128ビット(8ビット×16倍)、………、となります。

コンピュータのCPU(MPU)の性能表現の一つとして、nnビットCPUとかいうのは、一度に扱える2進数の桁数の事を言っているのです(情報量)。

PSP32ビットCPU2基 搭載した高性能コンピュータです。そのCPUは、メイン処理用とサウンド処理用とに割り当てられています。
PlayStation2は、128ビットCPUのコンピュータです。凄いっ!

8ビットで1バイトというのは、PSPプログラミングに於いても都合が良い単位です。覚えて下さい。


では次。「16進数」に慣れましょう。

数値はn進数で表現されます。人間は10進数を良く使いますが、コンピュータは2進数や16進数や8進数(もちろん10進数の演算も行なえます)を好んで使用します(厳密に言うと、2進数のみ理解できる)。

[ 10進数16進数 対応表 ]
 10進数  16進数
    0      0
    1      1
    2      2
    3      3
    4      4
    5      5
    6      6
    7      7
    8      8
    9      9
   10      A
   11      B
   12      C
   13      D
   14      E
   15      F

この16通りの値が、16進数の基本です。
16進数で、Fの次は10です。いちぜろ。10進数の場合と同じように桁上がりします。
16進数は2進数を元に考案されたものかも知れません。
早見対応表にて、即、2進←→16進 変換ができるかと存じます。

[ 2進数8進数16進数10進数 対応表 ]
  2進数   8進数  16進数   10進数

  0000     0     0       0
  0001     1     1       1
  0010     2     2       2
  0011     3     3       3
  0100     4     4       4
  0101     5     5       5
  0110     6     6       6
  0111     7     7       7
  1000    10     8       8
  1001    11     9       9
  1010    12     A      10
  1011    13     B      11
  1100    14     C      12
  1101    15     D      13
  1110    16     E      14
  1111    17     F      15

どうですか?4ビットで16進数の基本が表現出来ますね。

2進数と16進数の相互変換は、対応表を見なくても、自分の手の指を折って数えて計算できるので確認してみて下さい。

ちゃんと数えられますね。

nビット「2のn乗」桁の値を表現できます。4ビットは2の4乗=16通りです。
4ビットで16通りが表現できるので、8ビット(1バイト)では2の8乗=256通りの数値が表現できます

つまり、
1バイト(8ビット)で256通りの表現が でき、

10進数では 0 ~ 255 で、
16進数では 00 ~ FF で、
2進数では 00000000 ~ 11111111

です。


関連記事

[edit]

CM: 5
TB: 0

page top

今回は、何と4本立てっ!

まず、「バイト(=Byte/Bytes)」を解説します。

昔の8ビット・パソコンの頃は「メモリ64KBです」とか、
OS = Windows 98 , 「メインメモリ128MB!」とか、
OS = Windows XP , 「メインメモリ512MB!」とか、
OS = Windows VISTA , 「メインメモリ4GB!」とか、
OSやパソコンによって様々ですが、この「バイト」について突っ込みします。

「コンピュータ(CPU)は、本当は2進数しか理解できない」という事を肝に銘じて欲しい。

故に、CPUは「2のn乗」単位でのみ、情報を入力/出力しています。
「キロバイトというのは 簡単に バイトの1000倍」と思われがちですが、実際は1024倍なのです。
これは、2の10乗が1024だからです。

よって、1キロバイト(=1KB)は、1024バイトという事になります。

メガバイト(=MB)は、キロバイト(=KB)の1024倍です。
問い詰めると、メガバイトは、1024バイト×1024倍=1048576バイトです。

以下、表記すると

1 Byte
1 KBytes(キロバイト) = 1024 Bytes
1 MBytes(メガバイト) = 1024 KBytes (=1024x1024=1048576 Bytes)
1 GBytes(ギガバイト) = 1024 MBytes (=1024x1024x1024=1073741824 Bytes)
1 TBytes(テラバイト) = 1024 GBytes (=1024x1024x1024x1024)
1 PBytes(ペタバイト) = 1024 TBytes (=1024x1024x1024x1024x1024)

です。

64KB(64キロバイト)というのは、65536バイトです。
16ビット数値で表現できる 数値の個数が、65536個です。
(符号無し 16ビット数値での最大値は 65535 です、注意! / 理由は、ゼロも一つの数値として表現するからです)
範囲は 0~65535 で、個数が 65536個。


「バイト」「ワード」「ダブルワード」等の概念について

1バイトの2倍、2バイト(2 Bytes)は、1ワード(1 words)と表現される事があります。
1ワードの2倍、4バイト(4 Bytes)は、1ダブルワード(1 doubble words)と表現される事があります。
1ダブルワードの2倍、8バイト(8 Bytes)は、1ロングワード(1 long words)と表現される事があります。


「符号」とは何ですか?

符号の概念は、算数や数学のソレと同じですが、CPUが判断するのは、
・数値の一番上のビット(最上位ビット)が0なら正の値
・数値の一番上のビット(最上位ビット)が1なら負の値
と、その数値を2進数に変換して見れば一目瞭然です。
数値が正なのか負なのか 解からなかったら、数値を2進数で考えると理解できるかと存じます。

(例 / テーマはPSPなので32ビットで考えます)
3(10進)  → 00000000000000000000000000000011(2進)
              → 最上位ビットがなので、正の値

-1(10進) → 11111111111111111111111111111111(2進)
              → 最上位ビットがなので、負の値

65534(10進) → 00000000000000001111111111111110(2進)
              → 最上位ビットがなので、正の値

0(10進) → 00000000000000000000000000000000(2進)
              → 最上位ビットがなので、正の値(但し、ゼロである)

? → 1001100101011100110110001011011(2進)
              → 最上位ビットがなので、負の値

"- (マイナス)" という記号を 数値に埋め込む事は、CPU や プログラム上では行ないません。
ソースコード上で、signed で定義されていれば数値がマイナスの数値になることがあります
ソースコード上で、unsigned で定義されていれば数値はマイナスの数値になることはありません


「変数」とは何ですか?

変数とは、数値を代入して演算する為の、英数文字で表記される、値が変動する入れ物、と覚えて下さい。
数学での「Z = X+(Yx4)-12」での、Z , X , Y が それぞれ 変数です。


符号付き1バイトは、-128 ~ 0 ~ 127 の範囲の値 となります。
C言語/C++言語では、符号付き1バイト変数「i」を定義する際は、

signed char  i; // i は符号付き1バイトの値を扱う変数

などと表記します。

逆に、符号無し1バイトは、0 ~ 255 の範囲の値 となります。
C言語/C++言語では、符号無し1バイト変数「i」を定義する際は、

unsigned char  i; // i は符号無し1バイトの値を扱う変数

などと表記します。
行中の // 以降は注釈ですので、プログラム上では無視して下さい。

符号付き2バイト(1ワード)は、-32768 ~ 0 ~ 32767 の範囲の値 となります。
C言語/C++言語では、符号付き1ワード変数「i」を定義する際は、

signed short  i; // i は符号付き2バイトの値を扱う変数

などと表記します。
符号無し1ワード変数「i」を定義する際は、

unsigned short  i; // i は符号無し2バイトの値を扱う変数

などと表記します。i = 0 ~ 65535 の範囲の値。

1ダブルワード変数の定義は、

signed long    i; // i は符号付き4バイトの値を扱う変数
unsigned long  j; // j は符号無し4バイトの値を扱う変数

( i = -2147483648 ~ 0 ~ 2147483647 の範囲の値 )
( j = 0 ~ 4294967295 の範囲の値 )

などと表記します。

また、1ダブルワードは4バイト数値を扱うので int でも定義可能でして・・・

signed int    i; // i は符号付き4バイトの値を扱う変数
unsigned int  j; // j は符号無し4バイトの値を扱う変数

( i = -2147483648 ~ 0 ~ 2147483647 の範囲の値 )
( j = 0 ~ 4294967295 の範囲の値 )

などと表記します。


1ロングワード変数の定義は、

__extension__ signed long long    i; // i は符号付き8バイトの値を扱う変数
__extension__ unsigned long long  j; // j は符号無し8バイトの値を扱う変数
(long long キャストは、先頭に __extension__ を記述しないとダメみたいです )

などと表記します。

変数が何バイトの型であるか宣言するのに使う、char や short や long は、キャストと呼ばれます。
int というキャスト は、C++コンパイラによって2バイト扱いだったり4バイト扱いだったりするので、short か long を使ったほうが無難です。
この講座で使う C++コンパイラ=PSPSDK は、intを32ビット扱いしますので、long と同じです。覚えておいて下さい。

尚、小数点付きの数値を扱うには、float や double というキャストがありますが、省略します。各自、学習しておいて下さい。

ここまで書いておいて何ですが、'signed' の場合は、記述を省略できます。
long だったら 符号付きの 32ビットキャスト(signed long)と考えて良いのです。
私は signed は省略して記述しませんので、各自、覚えておいて下さい。

以下、覚え書き程度に。
char は signed char と同じ
short は signed short と同じ
int は signed int と同じ
long は signed long と同じ


関連記事

[edit]

CM: 2
TB: 0

page top

2010年01月15日 更新
「コンパイル」「アセンブル」「リンク」とは?

プログラムは、通常、プログラム開発言語 専用の付属プログラム編集システム上にて記述(作成)します。
プログラム開発言語により異なりますが、ワープロソフトみたいな感じで入力/編集が出来ます。
この専用の付属プログラム編集システムが無い場合もありますので、その際は、プログラムソースをテキストエディター(Windowsの場合は メモ帳、テラパッド、秀丸エディター等)や、コードエディター等で作成/編集/校正します。

「秀丸エディター」はプログラミングに特化していて、注釈の部分を緑色文字列部分を赤色、等と色分けして逐次表示してくれます。
他にも、" ~~~~~ "と記述してある部分の にカーソルを当てると、相方の を強調表示してくれます。見やすい!親切!
この秀丸エディターは、シェアウェア(使用期限付き有料ソフトウェア /¥4,200-)です。
お金に余裕があれば、是非 導入したい逸品です。


PSP用の実行ファイル EBOOT.PBP を作るには、
プログラミング部分だけを抜粋すると、

1. プログラムソースを作成/編集/校正
2. プログラムソースをコンパイル or アセンブル
3. リンク
4. 生成されるELFファイルを、PBPファイルに変換
5. PSP に転送して、実行してみる

となります。


C++言語プログラムソースを、中間ファイルに翻訳変換する事をコンパイルと言います。
コンパイルを行なうプログラムを、コンパイラーと呼びます。

アセンブリ言語プログラムソースを、中間ファイルに翻訳変換する事をアセンブルと言います。
アセンブルを行なうプログラムを、アセンブラーと呼びます。

コンパイルやアセンブルを行なうと、中間ファイル(オブジェクトファイル)という物が生成されます。

その中間ファイルを、実行可能なプログラムに翻訳変換する事を、リンクと言います。

リンクを行なうプログラムを、リンカーと呼びます。

最近では、コンパイル・アセンブル・リンクの全部の作業をまとめて「ビルド」する、という言い回しが使われるようになってきました。私も、「ビルド」するという言い回しを推奨しています。
コンパイラ - Wikipedia
アセンブリ言語 - Wikipedia
オブジェクトファイル - Wikipedia
リンケージエディタ - Wikipedia
ビルド (ソフトウェア) - Wikipedia

一般に、ゲームソフト制作会社は、莫大な資金をゲーム機開発元に支払って、ゲーム機用の開発キット一式購入しています。

PSPも、しかり。

海外の PS2DEV.ORG が独自に開発した システムソフトウェア 1.00用 EBOOT.PBP 開発キット(フリーウェア)が存在するので、このブログでは それを使用してプログラミングをします。
Cygwinpsp-toolchainPSPSDK で何とかやってみます。

 ※ システムソフトウェア 1.00用 EBOOT.PBP は、PBPmaker.exe や PSP Easy Installer.exe 等で変換すると、システムソフトウェア 1.50 のPSPでも動作します ※
 ※ また、システムソフトウェア 1.00用 EBOOT.PBP は、カスタムファームウェアが導入されたPSPで そのまま動作可能です ※

 ただし、暗号化されてない実行モジュールしか作れないので、今 販売中の正規PSPでは起動できませんので理解して下さい。

PSPプログラムがソースから実行形式になるまでの流れ

A 各種 C++言語プログラムソース(~.C / ~.CPP)を作成
                 ↓
       コンパイラーでコンパイルする
                 ↓
           中間ファイル(オブジェクトファイル(~.o))に翻訳される


B 各種 アセンブリ言語プログラムソース(~.S)を作成
                 ↓
       アセンブラーでアセンブルする
                 ↓
           中間ファイル(オブジェクトファイル(~.o))に翻訳される


C 中間ファイル(オブジェクトファイル)を全部まとめてリンクする
                 ↓
           マップファイル(~.MAP)が生成される
                 ↓
           ELFファイルが生成される(OUTP)
                 ↓
       ELFファイルをPBPファイルに変換する(EBOOT.PBP)


この方法で、PSPプログラミングをします。夜呂氏区!

関連記事

[edit]

CM: 0
TB: 0

page top

PSPプログラミング PSPの性能を知ろう! 

2009/01/31
Sat. 23:05

前回までで、PSPプログラミングの方法を教えたつもりです。
さて、今回は、PSPの性能を調べる事に重点を置きます。

プログラムを開発するマシーンの事をお勉強するのです。

まず、下記サイトをご覧下さい。PSP-1000 の性能が 分かるかと存じます。

PSPの性能(スペック)
  http://bu-nyan.m.to/psp/psp01.htm

要約マニュアル(PDFファイル)
  http://www.scei.co.jp/corporate/release/pdf/030514a.pdf

PSP-1000 の取扱説明書(PDFファイル)
  http://www.playstation.com/manual/pdf/PSP-1000.pdf


抜粋すると、

MIPS系の R4000 という型番の32ビットCPU を2基 搭載
CPUの動作クロックは、1~333MHzで、範囲内なら 自由に速度変更 可能

PSP-1000 は、メインメモリは、32MBで、プラスで eDRAM が4MB
PSP-2000 は、メインメモリ64MBですが、拡張された32MB分は
UMD読み込みのキャッシュ(一時退避記憶)に使われていて、正式に
メインメモリが増えた、という感じでは無い。
一部のカスタムファームウェアでは メインメモリ容量54MB位 として扱えるらしいです


画面に表現できる色の鮮やかさは、16ビットカラー(65536色)もしくは
24ビットカラー(16777216色)
公式表記では「16ビットカラーもしくは32ビットカラー」となっている

画面の解像度は、横480ピクセル×縦272ピクセル(固定)で、
フレーム0とフレーム1の、2画面を実装している

つまり、フレーム0の画面を表示させておいて、その間にフレーム1の画面に
描画し、描画し終わるとフレーム1の画面を表示させ、その間にフレーム0
画面に描画する、………、と繰り返す事で、チラつきのない綺麗な映像が表現
可能!

※グラフィック画面の構成は、物理的には、512x272の寸法で2枚の画面です


認識できるメモリカードの容量は、最大32GBですが、本当か判りませんが160GBのUSBハードディスクを繋げられて認識できるらしい

SONY純正のリチウムイオンバッテリーでの駆動時間は、最大 約 5時間弱
フル充電には約2時間20分かかるらしい

次回は、PSPの実行ファイル EBOOT.PBP の構造について解説します。

関連記事

[edit]

CM: 0
TB: 0

page top

PSPプログラミング EBOOT.PBPの構造を知ろう! 

2009/02/01
Sun. 06:55

PSPの実行ファイル EBOOT.PBP の構造について

まずは、下記URLを参照して下さい。

>[ EBOOT.PBPのファイル構造 ]
> http://nagaokastation.com/psp_ebootpbp.html

「見てみても、良く解かりません。」と思われるかも知れません。

UMDビデオやUMDゲームやHomebrewアプリ等、XMBより ゲームのメモリースティック Pro Duo
や UMD を選択した時に、アプリにアイコン(画像)やアプリ名(文字列)や背景画像などが表示されるのをご存知ですね。
中にはBGMが流れる物もあります。

EBOOT.PBPファイルは、実行プログラム以外に、映像効果音声効果の付いた構成になっています。やるな SONY!(w

では、解説します。


ICON0.PNG アイコン画像 / PNG画像 形式
  寸法 横144ピクセル × 縦80ピクセル

ICON1.PMF アイコン動画 / PMF動画 形式
  寸法 横144ピクセル × 縦80ピクセル / FILESIZE 500KBytes以内

ICON1.PNG 詳細説明画像 / PNG画像 形式
  寸法 横310ピクセル × 縦180ピクセル

PIC1.PNG 背景画像 / PNG画像 形式
  寸法 横480ピクセル × 縦272ピクセル

SND0.AT3 サウンドファイル
  ATRCA3plus形式圧縮オーディオ / FILESIZE 500KBytes以内

BGM については、PMF動画ファイルに付属させるか AT3ファイルに付属させるか、という選択肢があります。

上記の物を、オプションで EBOOT.PBP に埋め込みする事が可能です。
無くても、デフォルトのアイコン&無音声&背景無しという構成の EBOOT.PBP が作成可能です。

この、ICON0.PNG を例に挙げると、これは標準でのファイル名です。別のファイル名でも良いです。
指定する際、144x80サイズの PNG画像ファイル名 を設定します。

PNG画像は、グラフィックソフト等で作成できますが、PMF動画AT3オーディオは、専用のソフトウェアを使用して作成します。
以下に方法を解説しているサイトを紹介。

PMFデータ 作成方法
> http://schneemondblume.blog109.fc2.com/blog-entry-39.html

AT3データ [ATRAC3plus](SONYが開発したオーディオ圧縮技術) 作成方法
SONYが開発した SonicStage という市販ソフトで作成が可能です。買わなければならないのだ。


これらは、後から EBOOT.PBP ファイルに埋め込みする事が可能なので、オマケ機能として参考して下さい。
>> EBOOT.PBPを弄れるアプリ PSP brew の使い方が書いてあるサイト
EBOOT.PBPを編集しよう - $$な趣味生活
> http://maisokikan.blog105.fc2.com/blog-entry-56.html


これらを設定する際に注意する点は、背景画像を設定した際は、アプリ名が表示されないという事
(但し、アプリのアイコンを△→情報→○を実行する事でアプリタイトルを見る事は可能)

また、リカバリーモードでの設定で、

"Configuration ->" 選択後 ×ボタン押し
"Hide PIC0.PNG and PIC1.PNG in game menu" を、Enabled に設定

をする事により、PIC0.PNG(詳細説明画像)とPIC1.PNG(背景画像)を非表示にでき、アプリ名がアイコンの右側に表示されるようになります。


まずは実行プログラムを作成しなければなりません。
では、どうするか?

PSP Homebrew 開発キット』を導入して、付属で付いてくるサンプルプログラムソースを実行ファイルにしてみる事から始める事にします。

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

について解説します。

関連記事

[edit]

CM: 0
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

「PSPプログラムは、どうやって作るのか?」

1. 構想を練る。
    どういうソフトウェアを作るか、思案/討論する。
    著作権問題も考慮する。
    この段階で、ボツになる事もある。

2. 企画する。
    PSPにて実現可能か検証する。
    PSPの性能を熟知した人々に、意見を伺う。

3. プロジェクト。
    総指揮官(監督)を調達する。
    脚本家を調達する。
    プログラムの製作者を調達する。
    絵(グラフィック/視覚効果)の製作者を調達する。
    音(効果音/BGM等のサウンド)の製作者を調達する。
    テストプレイヤー(プログラムの不具合 発見担当者)を調達する。

4. 製作開始。
    ・絵(グラフィック/視覚効果)開発
       専用のソフトウェア等で開発する。
       実際に、PSPで表示してみて、どう見えるか確認する。

    ・音(効果音/BGM等のサウンド)開発
       楽団に演奏させたり、声の専門家に喋ってもらったりして、
       それを録音して使用する場合もあるが、ファイルサイズが
       とても大きくなるので、専用のソフトウェア等で
       ファイルサイズが小さい演奏データ等を作成する。
       会話は演奏データに出来ないので、そのまま使用する場合が多い。
       実際に、PSPで視聴してみて、どう聴こえるか確認する。

    ・プログラム開発
       専用のソフトウェア等で開発する。
       一般的には、コンピュータを使用する。
       プログラマーの腕の見せ所。

    ・デバッグ
       テストプレイヤー(プログラムの不具合 発見担当者)に、動作確認を
       させて、ソフトウェアの不具合を発見/指摘/報告して貰う。
       プログラム開発者は、それを聞いて、プログラムを改善する。
       鬼のように厳しい仕事。高度なゲーマー技術が必要。

5. サンプル配布。
    試作版が完成すると、特定の関係者等に配布され、試し動作確認をして貰う。
    使用感、感動、苦情、著作権問題、等が飛び交う。

6. 発売へ。
    開発側の発売許可が下りれば、いよいよ発売です。
    発売記念の打ち上げ会 等も行われるらしい。


[ 豆知識 ]
某ゲームソフトメーカーでは、プログラムが完成するまで、スタッフ一同をマンションの一室に監禁するとか。

「バグ」「デバッグ」とは?
プログラムの不具合を、「バグ(=BUG/虫)」と言います。
そのバグを取り除くことを、「デバッグ」と言います。


関連記事

[edit]

CM: 1
TB: 0

page top

前回「今度は makefile について書きます」と宣言しましたが、急きょ変更です

偉大なる先人達のホームページ&ブログ(PSPプログラミング関連限定)を紹介します。
内容が濃いので、皆さん、しっかり学んでください。
ブックマークしておくと吉かもっ

[ 以下 ]

◇PSPでプログラミング (大御所のPSPプログラミング塾 / まず、登竜門です)

やねうらお PSPであそぼう! (PSPの偉い人、やねうらお サン のブログ)

ぶーにゃんのPSPプログラミング (大御所のPSPプログラミング塾)

PSP開発幼稚園.game.jp/(本館) (色々あるでよ)

PSP自作ソフトプログラミング/開発wiki (PSPプログラマー向け)

なんとなく実験 PSPプログラミングその2 (ズバリ、PSPプログラミング塾)

Ruka's homepage (PSP用 NesterJ 関連がダウンロード可能 / プログラム・ソースも)

QuickJump Downloads-Source-Code-Development-PSP- - (色々なプログラム・ソースがダウンロード可能)

PSPnfo / PSP software 2nd. (基本が学べます)

PS2DEV.ORG: Playstation Programming - psp PSPSDKの産みの元!必読せよっ!!

PSPwiki (PSPについてのイロハ)


次回予告「次回こそ、makefile について、学んだ事を、ほとんど書きます」

こう、ご期待!! バーーーーーーーーーーーーーーーーーーーン!!

関連記事

[edit]

CM: 1
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

ICON3.png
ICON3.png


『ハローワールド!ひねくれ版』を作ったので、ご報告です。

これは、" Hello, World ! " とかを表示させます。
無限ループで、パッド情報を調べています。
もし、Rトリガーボタンが押されたら、即座に終了してXMBへ戻ってきます。
もちろん、[HOME]ボタンからでも終了可能ですよん。
な、何て親切なんだ(笑)。

全部まとめてココに! ↓↓
ダウンロード
PSP_HELLO_hinekure.zip


「Hello, world」は、エミュレーターとかを起動可能にするソフトウェアではないので勘違いしないで下さいね。
Hello world - ウィキペディア


[ インストール方法 ]

FW 1.00 の人 → /HELLO/ フォルダーを、ms0:/PSP/GAME/ 以下フォルダーへコピーする。

FW 1.50 の人 → /HELLO/ フォルダーをPBPmakerやEasyPBP InstallerやKxploit等で分割して、
         ms0:/PSP/GAME/ 以下フォルダーへコピーする。

CFW PSP-1000 の人 → /HELLO/ フォルダーを、ms0:/PSP/GAME150/ 以下フォルダーへコピーする。

CFW PSP-2000 の人 → /HELLO/ フォルダーを、ms0:/PSP/GAME/ 以下フォルダーへコピーする。

以下、プログラム・ソースとか(文中の、緑色の文字注釈なので読み飛ばしOK!
------------------------------------------------------------------------
ファイル名 == main.c
------------------------------------------------------------------------

/////////////////////////////////////////////////////////////
//                             //
// HELLO, World arranged. //
// //
// Created by : 猫山 猫宗 in 2009/03/08(SUN) //
// //
/////////////////////////////////////////////////////////////


// ココからは、インクルード部分ですよ~~♪
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspdisplay.h>
#include <pspctrl.h>

#include <pspsdk.h>
#include <pspkernel.h>
#include <stdio.h>

#include <pspctrl.h>
#include <stdlib.h>
// インクルード部分お終い~~♪


// モジュール名を設定する。
PSP_MODULE_INFO("HELLO", 0, 1, 1);
// スレッドの情報を設定する。
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);

// #define は、「定義する」という意味です。
// 'pspDebugScreenPrintf' と書くと長いので、'printf' に省略します。

#define printf pspDebugScreenPrintf


///////////////////////////////////////////////////////////////////
// ↓↓  ココから、[HOME]ボタン押しで終了できるように記述します。


// Exit callback コールバックの終了
int exitCallback(int arg1, int arg2, void *common)
{
sceKernelExitGame();
return 0;
}

// Callback thread コールバックスレッド
int callbackThread(SceSize args, void *argp)
{
int cbid;

cbid = sceKernelCreateCallback("Exit Callback", (void*) exitCallback, NULL);
sceKernelRegisterExitCallback(cbid);

// ポーリング
sceKernelSleepThreadCB();

return 0;
}

// コールバックスレッドの生成
int setupCallbacks(void)
{
int thid = 0;

thid = sceKernelCreateThread("update_thread", callbackThread, 0x11, 0xFA0, 0, 0);
if (thid >= 0)
{
sceKernelStartThread(thid, 0, 0);
}
return thid;
}

//// お疲れ~♪ ↑↑ ここまで書いたら、[HOME]ボタンで終了できます
///////////////////////////////////////////////////////////////////



/////////////////////////////////////////////////////////////////
// //
//   いやほう!メイン関数でーーす!ここから始まります //
// //
/////////////////////////////////////////////////////////////////


int main(void)
{
SceCtrlData pad; // 構造体変数 pad に、パッド入力情報が入る。


pspDebugScreenInit(); // 画面を初期化する
setupCallbacks(); // [HOME]ボタン押しでXMBに戻れる様に設定

sceCtrlSetSamplingCycle(0); // パッド情報を読み込むために、まず行ないます
sceDisplayWaitVblankStart(); // 画面表示の垂直同期信号待ちをします(チラつき防止)

pspDebugScreenInit(); // 画面を初期化する

printf(" Hello, world !!\n\n"); // 画面に書く( \n は、改行文字です )
printf(" Hello, Ludorph !!\n\n"); // 画面に書く(つまり、2行、改行する)
printf(" Hello, kitty !!\n\n"); // 画面に書く
printf("\n Press R button to EXIT."); // 画面に書く( Rトリガーボタンを押せ! )

do
{
// ↓↓ PSPのパッド情報読み取り作業
sceCtrlReadBufferPositive(&pad, 1);
}while(pad.Buttons != PSP_CTRL_RTRIGGER); // Rトリガー押されない限り、無限ループよん
// 一応、[HOME]キーからでも終了できますので。

sceKernelExitGame(); // PSPのゲームを終了させる関数(XMBに戻ります)
return 1; // ダミーですが、書いてみたり。
}

------------------------------------------------------------------------
↓↓ makefile です
------------------------------------------------------------------------

TARGET = HELLO
OBJS = main.o

INCDIR = lib/
CFLAGS = -Wall -G0 -O2 -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 = HELLO, World Arranged.
PSP_EBOOT_ICON = ICON3.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

main.o : main.c

------------------------------------------------------------------------

付属の !_mk.bat をダブルクリックでコンパイル開始です。
コンパイルが終ったら、FW 1.00用の EBOOT.PBP が生成されます。

次回は、全角文字版の『 はろぅ わーるど for PSP 』 を製作&掲載します。
皆さん、mediumgauge様に感謝して全角文字ライブラリが含まれている、PSP用rar展開サンプルプログラム(RAR extract sample for PSP)をダウンロードさせて頂きましょう(#^.^#)

関連記事

[edit]

CM: 0
TB: 0

page top

     HELLO2.png →  HELLO2.png

アイコンのスクリーンショット
クロスメディアバーの [ゲーム] から見たトコロ。

実行画面のスクリーンショット1
かなーーーり乱文ですが、ご了承下さい。ヘコヘコ。m(_ _)m

実行画面のスクリーンショット2
下側の5行の文字列が、明るくなったり暗くなったりします。
Rトリガー押しで一発終了!




謝辞

このプログラムを作るにあたり、ミディアムゲージ様 製作の『全角文字表示ライブラリ』を、一部改変して使用しております。ソースのコンパイルには、『全角文字表示ライブラリ』が必須です。

ミディアムゲージ様に感謝です。

【 注意 】
2010年01月10日 現在、『全角文字表示ライブラリ』は配布停止中です。
理由は、心無いユーザーによる無断使用のため、です。なんてこったい!


ファームウェア1.00/カスタム・ファームウェア完全対応してます!!
もちろん、カーネル1.00版と、カーネル3.xx版があります。
for PSP-1000 / for PSP-2000

Q. ソースは?
A. 付属しています(付属しないと駄目じゃん!!)


ダウンロードページへご案内~

解説は、また、後ほど………イソイソイソ……。

関連記事

[edit]

CM: 6
TB: 0

page top

さて、前出の 「全角文字版はろ~わーるど」 の解説です。
大した事はしていません。

本家 『 全角文字表示ライブラリ zenkaku.c 』 への変更は、下記の通りです。
文字の描画色のキャスト(型宣言)を、"int"から"long"に変更しただけです。

理由は、
ただの気まぐれです。気まぐれオレンジロード(古っwww
「C++コンパイラーは、CPUやコンパイラーに渡すパラメータ等で int の扱いが変化する為」です。
PSPは32BIT-CPUですし、色の表現は32Bit可能ですし、ソースを見ていたら32Bitで扱われている事などから、"long"に統一しました。

昔ながらのプログラマーは、int は2バイトって固定観念があるんですよ。PSPは32ビットCPUを装備してるので、int は4バイト(固定)なのですが…。

で、文字の描画処理は、フォントの有効データがあれば、指定された色で点を打ち、フォントの有効データが無ければ何もしない、という事が行なわれています(擬似透明処理)。
空白文字だと全く点が打たれません。"●"という文字だと円状に点が打たれます。

こういう処理をしていると、暗い色で文字列を描画して、左上に(-1,-1)した座標から明るめの色で文字列を描画し、『立体感が出ている影つきの文字列』が描画できます。

私は、『 全角文字表示ライブラリ zenkaku.c 』を更に改良して、文字色を透明に出来るようにしたり、背景色を有効(32Bitカラー)にする事も考えています。
そうするとカラフルな文字が描画できて楽しいのでは?とか思ったり。

関数 mh_print のフォントについて
書体は東雲フォント(しののめふぉんと)です。
半角文字では横6ピクセル×縦12ピクセル
全角文字では横12ピクセル×縦12ピクセル
となっております。
Windows文字を全てサポートし、更に絵文字も入っています。

関数 mh_print の使い方
/*****************************************************************************
*文字列の描画
*****************************************************************************/

void mh_print(int x,int y,const char *str,long col)

int x == 描画始点のX座標(左端 / 0~479の範囲で指定:PSP横は480ピクセル)
int y == 描画始点のY座標(上端 / 0~271の範囲で指定:PSP縦は272ピクセル)
const char *str == 描画する文字列のオフセット値(アドレス:32Bitの値で指定)
long col == 描画する文字列の色を32Bitカラーで指定(実は24Bitカラー)

<使用例>
mh_print(32, 27, "Hello,world !",0xffffff); // 白色


尚、PSPでの32Bitカラーは、下記のようになっています。

( 上位 Bit  ←←←←←←←←←←    →→→→→→→→→→ 下位 Bit )
無無無無無無無無 青青青青青青青青 緑緑緑緑緑緑緑緑 赤赤赤赤赤赤赤赤

簡単に述べると、無青緑赤の順に、各色成分が 8 Bit 持っています。
Windowsでは、無赤緑青なので、PSPとは 青成分と赤成分が逆になっている、という事実。

8 Bit という事は、0~255 の 256通り の表現が可能という事です。
0 は無色で、255 は最大に明るい色、です。
C++言語での色表現を下記に書いてみました。C++言語では16進数を 0x数値 と書きます

< 例 >
青色:0x00FF0000
赤色:0x000000FF
緑色:0x0000FF00
紫色:0x00FF00FF
黄色:0x0000FFFF
水色:0x00FFFF00
黒色:0x00000000
灰色:0x00777777

32Bitカラーといっても、実際は24Bitカラーなんですねぇ。

この関数に対して不明点・質問があったら、コメント欄に書いてください。解かる範囲でお答えします。

関連記事

[edit]

CM: 1
TB: 0

page top

2009年10月25日、ようやく間違いを訂正。 下の RGB( ) の計算式の閉じカッコが一文字抜けてました。
2010年01月10日、また間違いを訂正。 PSPSDK での int は、32ビット値(固定)です。今まで放置していてご迷惑をおかけしました。


さて、いよいよ お楽しみのグラフィック描画にチャレンジします。
まず今回は、PSPのグラフィック・ビデオRAM(V-RAMとも呼ばれます)を 32ビットカラーモードで点を打つ際の基礎からレッスンです。
これを理解すれば、V-RAMに線を引いたり四角枠や円を描いたり、塗りつぶし長方形や塗りつぶし円を描いたりする事が出来ます
(円を描く際は、数学のSin・Cos等の関数を用いて演算処理をして描画します→CPUでV-RAMに描画する場合であり、GPU描画を行なわない場合)。

 まず、32ビットカラーとは4バイトの値です。実際には現在のパソコンと同じく 24ビットカラー(最大1677万7216色)の表現が出来ますね。
 24ビットカラーと32ビットカラーの違いは、本当は24ビットカラーであり32ビット中 上位8ビットがカラッポの正味24ビットの値でありPSPのような32ビットCPU系では32ビット単位で扱うと楽チンな値でもあります。

 で、32ビットは4バイトなのでキャスト(型宣言)は long を使うと良いでしょう。 int でも良いのです。


 以下、PSPにおける、32ビットカラー(本質24ビットカラー)の割り当て配分表を書いてみます。

ビット  桁

 32 : 8    ↑
 31 : 7    |
 30 : 6    |
 29 : 5    |
 28 : 4 無効なビット(常にゼロ) +3バイト目 (オフセット値3)
 27 : 3    |
 26 : 2    |
 25 : 1    ↓

 24 : 8       
 23 : 7    
 22 : 6    
 21 : 5    
 20 : 4   青成分  +2バイト目 (オフセット値2)
 19 : 3    
 18 : 2    
 17 : 1       

 16 : 8       
 15 : 7    
 14 : 6    
 13 : 5    
 12 : 4   緑成分  +1バイト目 (オフセット値1)
 11 : 3    
 10 : 2    
 09 : 1       

 08 : 8       
 07 : 7    
 06 : 6    
 05 : 5    
 04 : 4   赤成分  +0バイト目 (オフセット値0)
 03 : 3    
 02 : 2    
 01 : 1       


↑↑ 縦長で見づらいかも知れません。ごめんなさい。

青、緑、赤は、それぞれ 8ビット長(1バイト)です。
値は、10進数で 0~255、16進数で 0x00~0xFF の範囲です。

これは、とても計算しやすいかと思いますが、どうですか?

例を挙げると、
青色を指定する際は、コード 0x00FF0000 を渡します。
緑色を指定する際は、コード 0x0000FF00 を渡します。
赤色を指定する際は、コード 0x000000FF を渡します。
と なります。

この時、良く考えてみると、
点を打つ V-RAMアドレスからの距離 赤は+0   (オフセット値==0)
点を打つ V-RAMアドレスからの距離 緑は+1   (オフセット値==1)
点を打つ V-RAMアドレスからの距離 青は+2   (オフセット値==2)
点を打つ V-RAMアドレスからの距離 ダミーは+3 (オフセット値==3)

となるので、仮にPSPの 左上( 0, 0) のV-RAMアドレスの先頭は 0x44000000 なので

0x44000000: 赤成分
0x44000001: 緑成分  (x,y)=(0,0)
0x44000002: 青成分
0x44000003: カラッポ
0x44000004: 赤成分
0x44000005: 緑成分  (x,y)=(1,0)
0x44000006: 青成分
0x44000007: カラッポ
0x44000008: 赤成分
0x44000009: 緑成分  (x,y)=(2,0)
0x4400000A: 青成分
0x4400000B: カラッポ

となるのですが、キャスト(型宣言)long 若しくは int で定義した値で座標(0,0)に色の点を 打つなら、

0x44000000: (long) 空青緑赤

の構成で点が打たれます。まぁ、こういう難しい事は考えずに、long 定義の値で そのままV-RAM書き込みしてやれば良いとだけ記憶しておいて下さい。 ノシ


色のコード対応表とかは、続きに記載する事にします。興味ある人は読んで下さい。
#define でカラーコードを定義して、プログラム中で使えるようにしています(コピペ対応)。

→ PSPプログラミング - 32ビットカラーで描画しよう!その1(後編 / 座標) へ続きます。
今回はダウンロード物はありません。
コピペできる物だけ あります。


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

[edit]

CM: 0
TB: 0

page top


h o m e | n e x t  »


 

2017-03