誰もがさまざまな方法で新年を祝います。
誰かが彼を覚えているが、誰かは覚えていない。
私はバルコニーに立って、花火を見ながら喫煙しました。 一般的に、ディスクが焼けるのを待っていました。
ディスクは、このような実験のために残念ではありませんでした-それは価値がありました。
これがPlayStation 2の最初のアプリケーションでした。確かに、キーボードを印刷し、ジョイスティックを使用して入力するだけでしたが、すでに進歩していました。
だから、起動! うまくいく!
まさにその本質
それで、PlayStation 2向けの一連のプログラミング記事を始めています。
まず、長い理論があります。
それから練習してください。 私はプロのC ++ではないので(またはC-好きなようですが、C ++で話します)、コードを厳密に判断しないでください。
また、PlayStation 2 SDKでは、Red Hat 6以降を使用することが望ましいですが、これはすべてWindows 7で記述しています。すべてが曲がって動作しますが、動作します。
実際の実験が始まるまでに、チップ制御のPlayStation 2とネットワークケーブルを用意することをお勧めします。 私の実験では、PlayStation 2 Slim 90006 NTSCフォーマットチップと青いネットワークケーブル=)が選択されました()キットのドライバーはLinux専用であり、ハードドライブが必要なので、デバッグにはiLinkモードを使用しませんでした)。
公式に
当然、あなたのゲームは公式ではありません。 ソニーはそのようなスロブを許さないかもしれないと確信しています。 公式には、サポート、SDK、および機器自体を購入できます。10,000ドルで嘘をつくことはありません。すべての人にライセンスが与えられるわけではありません...
私たちは金持ちではないので、私たちは道を行きます...
非公式に
非公式に、このSDKを数日間検索し、2週間(またはそれ以上)ダウンロードし、さらに多くのドックを見つけました。 現在、SDKはVisual Studio 6なしのソフトウェアを含む608メートルです。
だから。 はじめに、13の簡単な章をたどる必要があります(一部については、たとえばメモリカードなど、まだ理解している質問があります)。
次の順序で説明する章:
コントローラーライブラリー(2つの章は、ジョイスティックとマルチタップについてです);
CD(DVD)-ROMライブラリ(ゲームはCDとDVDの両方にあります);
メモリカードライブラリ。 (メモリカード。2つの章があり、理解するのは非常に困難です)。
PS2メモリーカードファイルシステム(FATメモリーカードファイルシステム);
EE Kernel(最もhemoのトピックですが、知る価値があります);
グラフィックライブラリ(長い時間がかかりますが、多くの人がこの記事を待っています-きっと)。
サウンドライブラリ(多くも);
ムービーライブラリ(MPEGおよびIPU);
ネットワークライブラリ(ネットワークおよびそれに関連するすべてのものを操作します);
ハードディスクライブラリ(ハードディスクはありませんので、理論的にのみ説明します);
基本的な要件
Pentium 3、FIGはRAMの量を知っていますが、500メートルで十分だと思います。
ある時点で、理論から抜け出すことができるようになったら、PlayStation 2 SDKを投稿します(ペニーは機能しませんでしたが、書き込みは干渉しないようです)。
また、私はまだすべての情報を習得していないため、ある時点であなたと一緒に勉強を始めます。 今のところ、ただ書くことをお勧めしますが、それがどうなるか、SDKをレイアウトし、組み合わせることが可能になります。
Metrowerks CodeWarrior 4.2.6.844を使用しています。 残念ながら、PS2 SDKはそこだけで正常に起動しました。 コンパイラはGCCまたはVisual Studio 6です。
情報と「何でもできる」人のために
PS2はLinuxを使用します。 私の推測が正しい場合、この「何か」はRed Hatを思い出させます。 当然、すべてのファイルとコマンドでは大文字と小文字が区別されます。
スレッドを使用できますが、プロセッサは1つだけです(ARM)。
ご存知のように、バイトを操作する必要があります。 たとえば、スレッドリクエストへの応答に含まれるもの(タイプ-DBGP_EE_THREADLIST_DATA )は次のとおりです。
- Id-ストリームID
- 優先度-その優先度
- ステータス-ストリームのステータス。次のタイプが含まれる場合があります。
- THS_RUN = 0x01 //起動
- THS_READY = 0x02 //準備完了
- THS_WAIT = 0x04 //保留中
- THS_SUSPEND = 0x08 //一時停止
- THS_WAITSUSPEND = 0xc //中断を待っている間(私にとっては、これは一般に秘密の秘密です)
- THS_DORMANT = 0x10 //非アクティブなスレッド
- 原因-待機の実際の理由:0-なし、1-スリープ、2-セマ(つまり、セマフォ)
- 待機-セマフォID
- ウェイクアップカウント-ウェイクアップリクエストの数
- カウント-スレッドがRUN状態になった回数
- PC-コマンドカウンター
- Sp-29ドルのスタックの先頭へのポインター( Maccimoに感謝)
- Func-実行ポイントアドレス
- Ra-戻り点アドレス$ 31
- reserved [0]-予約されたinfa
- reserved [1]-予約されたinfa。
ああ、はい、ストリームがRUN状態の場合、現在の値はpc、sp、raになります。
ご覧のとおり、PS2でのプログラミングは最も簡単なタスクではありません。 言語と標準機能の呼び出しでのみ、PCのプログラミングと比較できます。 当然、メモリを節約する必要があります。 余分なものをアンロードする必要があります。 ディスクから何かを読みたい場合-読む直前に頭を動かす必要があります-情報は無関係になります。 これは非常に難しいプログラミングなので、本当に自分の強さを評価してください。
一般的に、次の記事まで。 私はそれをより速くしようとします...
PS :PS2 SDKを今すぐ投稿できないのは残念です。 しかし、すべてが次の記事になることを願っています。
更新 :最初の記事の執筆を開始し、記憶しました。
通常のメイクファイルが使用されていることを示すのを忘れていました。
次のようなものになります(ジョイスティックの最初の例から引用):
SHELL = /bin/sh
TOP = /usr/local/sce/ee
LIBDIR = $(TOP)/lib
INCDIR = $(TOP)/include
TARGET = main
OBJS = crt0.o \
$(TARGET).o
LCFILE = $(LIBDIR)/app.cmd
LIBS = $(LIBDIR)/libgraph.a \
$(LIBDIR)/libdma.a \
$(LIBDIR)/libdev.a \
$(LIBDIR)/libpkt.a \
$(LIBDIR)/libkernl.a \
$(LIBDIR)/libpad.a
PREFIX = ee
AS = $(PREFIX)-gcc
CC = $(PREFIX)-gcc
LD = $(PREFIX)-gcc
DVPASM = $(PREFIX)-dvp-as
OBJDUMP = $(PREFIX)-objdump
RUN = dsedb -r run
RM = /bin/rm -f
CFLAGS = -O2 -Wall -Wa,-al -fno-common
CXXFLAGS = -O2 -Wall -Werror -Wa,-al -fno-exceptions -fno-common
ASFLAGS = -c -xassembler-with-cpp -Wa,-al
DVPASMFLAGS = -g
LDFLAGS = -Wl,-Map,$(TARGET).map -mno-crt0 -L$(LIBDIR) -lm
TMPFLAGS =
.SUFFIXES: .c .s .cc .dsm
all: $(TARGET).elf
$(TARGET).elf: $(OBJS) $(LIBS)
$(LD) -o $@ -T $(LCFILE) $(OBJS) $(LIBS) $(LDFLAGS)
crt0.o: $(LIBDIR)/crt0.s
$(AS) $(ASFLAGS) $(TMPFLAGS) -o $@ $< > $*.lst
.so:
$(AS) $(ASFLAGS) $(TMPFLAGS) -I$(INCDIR) -o $@ $< > $*.lst
.dsm.o:
$(DVPASM) $(DVPASMFLAGS) -I$(INCDIR) -o $@ $< > $*.lst
.co:
$(CC) $(CFLAGS) $(TMPFLAGS) -I$(INCDIR) -c $< -o $*.o > $*.lst
.cc.o:
$(CC) $(CXXFLAGS) $(TMPFLAGS) -I$(INCDIR) -c $< -o $*.o > $*.lst
run: $(TARGET).elf
$(RUN) $(TARGET).elf
clean:
$(RM) *.o *.map *.lst core *.dis *.elf
あなたのプログラムはmain関数で動作します。
あなたのコードは無限ループで動作するはずです。 空のプロジェクトは次のようになります。
#include #include <mwutils.h>
//
int main (void);
int main (void)
{
while(1){
//
}
return 0;
}