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

質問に答えるシリーズ
- メモリ内容の書き換え編 -

さて メモリ書き換えですが、方法は、メモリの値を読み込み、内容に変更を加えてから メモリの同じ場所へ書き込むことが基本です。

では早速

例1
8D120000番地(16進数) からの連続9バイトに、各 25(10進数)ずつ足す

char data; // 足し算用
long i; // アドレス 兼、ループ用
for( i = 0x8D12000; i < 0x8D120000+9; i++)
{
data = (char *)i; // メモリ内容の読み込み
data += 25; // 足し算
(char *)i = data; // メモリへ書き出し
}


例2
グラフィック画面(32ビットカラーモード & フレーム0)全体に、青みをかける

#define VRAM_ADDRESS 0x44000000 // グラフィック画面の開始アドレス
#define FRAMESIZE 0x88000 // 1フレーム辺りのサイズ(横512pixel×縦272pixel
// ×色深度4bytes)
long rgb; // データ用
long i; // アドレス 兼、ループ用
for( i = VRAM_ADDRESS; i < VRAM_ADDRESS + FRAMESIZE; i+=4 )
{
rgb = (long *) i ; // 読み出し1回目
rgb = (long *) i ; // 読み出し2回目注 1
rgb |= 0x008F0000; // 青っぽい色(=0x8F0000) を OR でくっつける
(long *) i = rgb; // 書き出し
}
注 1
PSPのグラフィックメモリは、二度読みしないと正しい値が求められない様です。

例3
グラフィック画面(32ビットカラーモード & フレーム0)全体を、少し暗くする

#define VRAM_ADDRESS 0x44000000 // グラフィック画面の開始アドレス
#define FRAMESIZE 0x88000 // 1フレーム辺りのサイズ(横512pixel×縦272pixel
// ×色深度4bytes)
long rgb; // データ用
unsigned char rgbA, rgbR, rgbG, rgbB; // 色成分用
long i; // アドレス 兼、ループ用
for( i = VRAM_ADDRESS; i < VRAM_ADDRESS + FRAMESIZE; i+=4 )
{
rgb = (long *) i ; // 読み出し1回目
rgb = (long *) i ; // 読み出し2回目
rgbA = ((rgb & 0xFF000000) >> 3) & 0xFF000000; // α成分(念のため)
rgbR = ((rgb & 0x000000FF) >> 3) & 0x000000FF; // 赤成分
rgbG = ((rgb & 0x0000FF00) >> 3) & 0x0000FF00; // 緑成分
rgbB = ((rgb & 0x00FF0000) >> 3) & 0x00FF0000; // 青成分
(long *) i = rgbA | rgbR | rgbG | rgbB; // 書き出し
}
RGB各色の情報を、3ビット右にずらして削って、輝度を下げています。


ビット操作も出来ます。


9152FF01番地(16進数)の、1ビット目をOFF にして2ビット目をON にして 6~8ビット目を反転したい

char *pointer; // ポインター変数
char data; // ビット操作用

pointer = 0x9152FF01; // ポインタ変数にアドレス設定
data = *pointer; // 読み出し
data &= 0xFE; // 1ビット目をOFF(アンド記号) 0xFE = 11111110b(2進数)
data |= 0x02; // 2ビット目をON(縦線記号) 0x02 = 00000010b(2進数)
data ^= 0x70; // 6~8ビット目を反転(べき記号)0x70 = 11100000b(2進数)
*pointer = data; // 書き込み

最下位ビット(右側)が 1ビット目で、最上位ビット(左側)が8ビット目です。




さて、お次は本命のファイル操作ですが、その前にビット操作についての講釈をします。

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

[edit]

CM: 9
TB: 0

page top

この記事に対するコメント

なんかすごい勉強になります。
本当にいい管理人様にサイトです!

solve #- | URL | 2009/09/19 22:10 * edit *

GE側のキャッシュをフラッシュしてやればVRAMの内容も一発で読み込めますよん♪

憂煉 #- | URL | 2009/09/20 09:42 * edit *

solve さんへ

もっと勉強して、すんごいプログラムを作ってチョ。


憂煉 さんへ

ほう、その手がありましたかっ。

猫山猫宗 #waiQioXc | URL | 2009/09/21 16:01 * edit *

あの・・・

あまりにもアホな質問かも知れないんですけど頭がこんがらがってきたので聞いてみます。

>●メインメモリは、0x80000000 ~ 0x9FFFFFFF
とあるんですがアドレスというのは1byteの格納されている住所みたいな物ですよね
そうなるとこの場合は 0x80000000 ~ 0x9FFFFFFF までのアドレスつまり 0x20000000byte分がメモリに割り当てられてるという事になるんでしょうか?

その考え方でも最初は20000000=20000K=20Mという事で納得してたんですけど
よく考えると16進数なんですよね
0x20000000を十進数に直すと536870912と出てきました
これはPSPのメインメモリが512MBあるということ…ではないですよね
どう解釈したらいいのでしょうか

pppm #rkzq7EIc | URL | 2009/09/21 21:12 * edit *

考えてみると、一桁 多いです。

> >●メインメモリは、0x80000000 ~ 0x9FFFFFFF
> とあるんですがアドレスというのは1byteの格納されている住所みたいな物ですよね
> そうなるとこの場合は 0x80000000 ~ 0x9FFFFFFF までのアドレスつまり 0x20000000byte分がメモリに割り当てられてるという事になるんでしょうか?

512メガバイトあるのは、WindowsXP デショ? という訳で、ツッコミありがとう。

PSPのメインメモリは、32メガバイトです。

33554432 Bytes(10進数)
0x2000000 Bytes(16進数)

多分、メインメモリは、0x08000000 ~ 0x09FFFFFF ではないかと思います。

この容量の、アドレスマップを調べなければっっ!!
正確なのは、しばらく待ってチョ

猫山猫宗 #- | URL | 2009/09/21 23:13 * edit *

なるほど

そういうことでしたか
てっきりアドレスに対する認識が間違ってるのかと思いましたw

また楽しい記事をお待ちしております

pppm #rkzq7EIc | URL | 2009/09/23 16:12 * edit *

メモリマップとかの情報はここがいいですよ
ttp://hitmen.c02.at/files/yapspd/psp_doc/index.html

憂煉 #- | URL | 2009/09/23 21:54 * edit *

PSP先生!

> メモリマップとかの情報はここがいいですよ
> ttp://hitmen.c02.at/files/yapspd/psp_doc/index.html

ほうほう、英語ですか。WLANの項目が白紙だったりとか?


ボクは、コッチを観てましたが?
ttp://www23.atwiki.jp/amorphophallus/m/pages/38.html

猫山猫宗 #G.XhfRxg | URL | 2009/09/24 17:23 * edit *

うおおお!スレッドの詳細とかが日本語だ!?
びみょうに間違ってる部分が散見されますけど解りやすいですね^^

憂煉 #- | URL | 2009/09/24 20:42 * edit *

page top

コメントの投稿

Secret

page top

トラックバック

トラックバックURL
→http://nekoyama2gillien.blog36.fc2.com/tb.php/144-9e3c551a
この記事にトラックバックする(FC2ブログユーザー)

page top


h o m e |


 

2017-09