■■ダイナマイトヘッディー公式の裏技までジャンプ
■■A25 generator mask(2006-04/29)までジャンプ
■■A27 VERTICAL(2006-04/29)までジャンプ
■■A27 使い方(2006-04/30)までジャンプ
■■A27 PHELIOS(2006-04/30)までジャンプ
■■A28 Ge-command(2006-05/08)までジャンプ
■新ROM起動!A24(2006-04/16)
うをーーーー。すげえ。SEGADRIVEA24で、
「Thunder ForceⅣ」も
「Dynamite Heddy」も
「Phantasy Star Ⅱ」も
起動するっ!!
原因は自動チェックサム訂正機能。
これをOFFにするダケ!!
そーすは、(馬鹿らしいが)
src/cpp/mdcore_main.cpp
{
unsigned short checksum=0;
int i;
/* calculate_checksum */ //checksum=calculate_checksum(rom,romlen);
for(i=512;i<=(romlen-2);i+=2)
{
checksum+=(rom[i+1]<<8);
checksum+= rom[i ];
}
#if 00
/* 自動修正機能 */
if(romlen>=0x190){
rom[0x18f]=checksum>>8;
rom[0x18e]=checksum&255;
}
#endif
}
じゃな。(今日は遅いから寝る!!、04/16、00:45)
(えらーい、ブカ)
なんと、SEGADRIVEで、「Dynamite Heddy」が動かねーという話を聞いた。すわっ。VER違いか?
と思ったが、どうやら「海外版」らしい。「海外版」はライフメーター代わりの「ライト」に「H」に似たマークが、
入ってる模様。
それは、偽者だ!きちんと「日本版」を入手して、吸い出す事。(注:この行どこか誤植)
偽の「MARUYAMA」氏だっ!(注:やっぱ、誤植でない模様)
ちなみに「海外版」は、対応する気がない。
だって、「SEGADRIVE」は「DGEN」じゃないもん。
「GENESIS」エミュじゃなくて、「MEGADRIVE」エミュだもーん。
「不思議ちゃん2」は日本で売ってたから、対応しても。
「不思議ちゃん1」は日本で買えないから、対応する義務はないもーん。
だって、メガドラなんだもーん。本当にPSPじゃなくてメガドラなんだもーん。ほんとだよ。信じてね。
だめならパパに言いつけてやる。えーんDARIUSⅡのPAPA~っ。
(2006-04/18、追記)
■■ダイナマイトヘッディー公式の裏技。
タイトル画面でスタートボタンを押すと、
「START」
「OPTIONS」
のメニューが出る。
□Head Check
「OPTIONS」に合わせて、「C(○)」、「A(□)」、「←」、「→」、「B(×)」、「START(△)」
で、「主人公ヘッディーのキャラクタテスト」つまり単なるオマケ。
スタートボタンを押すと、抜けられる。
□ステージ選択
「START」に合わせて、「C(○)」、「A(□)」、「←」、「→」、「B(×)」、「START(△)」(さっきと同じコマンド)
で「STAGE SELECT」が出る。左右で選んで(スタートボタンで)GO!
■■今日(04/20)はSEGADRIVEA25を弄ってる。気が付いた事は、Z80のダメ加減と、CPPコアに、
あった屑コード。どうりで、32カラムモードトロイ訳だよ。でも大して変わらず。(少し速くなる)
それから、カラムスクロール。この辺ちゅーのは解かったが、結局良くワカンナイで戻した。原状未だバグあり。
本家DGENは直ってるのでなんとかしたい。
で、「generator」のコードサルベージ。したら、「不思議ちゃん2」でOBJでなくなった。原因はマスクしすぎ。
VDPレジスタ取得部分(VDPレジスタキャッシュ)。
vdpreg[regnum]=regdata;
switch(regnum){
/*2*/ case 0x02: /* scrollabase */
vdpreg2_scrollabase=((vdpreg[2]<<10) );//&(0x38<<10));
break;
/*3*/ case 0x03: /* windowbase */
vdpreg3_windowbase =((vdpreg[3]<<10) );//&(0x3e<<10));
break;
/*4*/ case 0x04: /* scrollbbase */
vdpreg4_scrollbbase=((vdpreg[4]<<13) );//&(0x07<<13));
break;
/*5*/ case 0x05: /* spritebase */
vdpreg5_spritebase =((vdpreg[5]<< 9) );//&(0x7e<< 9)); //←ここ!!
break;
/* 不思議ちゃん2でキャラ出ない。 */
このスプライトベースのマスクはきつすぎ、PC版「generator」は、何処か間違ってる。参考まで。
(2006-04/20、17:52)
■■
(まだ作り中です。)
ちょっと、こんなん。やってみた。
が、現状MAME方式なんで、ちと重い。ガタガタして遊べない。残念。
Geの簡単な使い方。ないかな。PSPSDKのGUじゃなくって。
Geコマンド(PSPのパケットコマンド)直接書くタイプ。
情報収集した範囲では無いんだよね。駄目だなあ。情報収集能力ないやあ。
ちなみにSEGADRIVEのGeコマンドは「ブロック転送」みたい。あれで、ポリゴンのコマンドが判れば、
こんな変な事しなくても簡単なのに...
(2006-04/29、18:12)
■■ほい、SEGADRIVE A27別館にUPした。PSP持ってない奴に見せて羨ましがらせる??くらいの用途しかないが、
(つまり現状重くて遊べない)操作系のノウハウはちと吸収出来た。どんな操作系を実装しても、
縦画面モードは、PSPの裏側がウェイブ状になっていて、持ちにくいし、重いし。やりにくい。
短期決戦なら、方向キー+アナログキー(メガドラボタンとして使用)がやりやすい。アナログボタンに疲れたら、
上の(つまり普通の)ボタンを使う。(が、とてつもなくPSPを持ちにくい)
上が開けてあるモード(chelios mode)が付いてるのは、上のボタンを使ったときに画面が隠れない様にって意味と、
あと比率がちと凄い事になるからな。あの比率(phelios mode)だと、PSPを45度くらいに傾けても、メガドラの画面で見える。
まるで「ハーフミラー合成」。「デンジャラスシード」とかやると、縦のスクロールが凄い事に...
上のボタンを縦持ちで使う場合はスタートボタンは下。下のボタンはスタートは上で統一してある。
○---Bボタン
△ ×--Cボタン
| □---スタートボタン
A
ちう事。(右利きでも左利きでも□ボタンは画面が隠れるから嫌だろ。メガドラのアクション系のゲームは、
設定モードで「A、B」のみ。か「B、C」のみ。で、対処出来る様に作ってある。総てのゲームがな。
だから、設定しろ)
■(allow-button(XY))は、右利きじゃなきゃ嫌って人。
↑ スタート
← → A@C
↓ B
(註:「@」はPSPのアナログキー)
■(button-allow(XY))は、左利きでも可能な人。(私は両利き)
スタート
↑
A← →C @方向
↓
B
(註:「@」はPSPのアナログキー)
■(hold-allow(XY))は、まだ作ってない。(現状(button-allow(XY))と同じ)
そおいや、6b padモードとかAJ padモードとかも作ってない。(現状normal padと同じ)
あ、(XY)ってのは縦持ちって意味。
ぢゃ
(2006-04/30、07:17)
■■独断と偏見による。メガドラ版「フェリオス」一番遊べる設定@A27。
えっと、縦持ち。コントロールは「allow-button(XY)」。「Screen swap XY:ON」。
VSYNC、OFF。FSKIP60。「SCREEN MODE:FIT」。5512。
現状とてつもなく重過ぎるから、5512以外ありえない。
少し他の画面モードで遊んで(意外と1xがお勧め)、溜める時間を覚えよう。ある程度慣れたら、うーん。
最低でも「高速面以降」に行けるようになったら、(註:MD版は「高速面」以前は意図的に「とても簡単」に作ってある)
「SCREEN MODE:FIT」にしよう。これが一番遊べる。現状ガタガタだかそれはまだ仕方がない。厭なら別ゲームを探せ。
メガドラ版「デンジャラスシード」とか、チェックする時間が取れない。残念。(アレスタは軽いらしい)
(2006-04/30、16:26)
■■なんだあ、Geの使い方。あるじゃん。おまけにGUの使い方まである。
oopo氏のサイトhttp://www.pspdev.orgから「PSPSDK」を落とす。つまり「PSPSDK_1.0-BETA2.TAR.GZ」
http://ps2dev.org/psp/Projects/PSPSDK/
PSPSDK_1.0+beta2_(Source)。まだベータ2でしゅ 735kBytes
これが「PSPSDK」なのかあ。知らなかった。
で、展開。
\ps2devorg\pspsdk_1.0-beta2\src\gu\doc\commands.txt
にgeの使い方(エーゴ)がある。エーゴでなくてもワカランがな。
で、差し当たり。
4 04 PRIM Primitive Kick(Geコマンド番号:04)
0-15: Number of vertices to kick (0-65535) // 頂点数(キックする頂点数)
16-18: Primitive Type
000: Points // 0:頂点コマンド
001: Lines // 1:線コマンド
010: Line Strips // 2:線コマンド
011: Triangles // 3:三角形コマンド
100: Triangle Strips // 4:三角形コマンド
101: Triangle Fans // 5:三角形コマンド
110: Sprites (2D Rectangles) // 6:2D矩形転送コマンド
ってなってる。「キック」って意味解からんが、取り敢えず、A28ではちゅーかDGEN100から持ってきた、
GEcmd[11] = 0x04000000UL | (6 << 16) | 2; // 6:2D矩形転送コマンド
//(Geコマンド番号:04)、6「2D矩形転送コマンド」、2頂点。
を同じ2頂点の、
GEcmd[11] = 0x04000000UL | (1 << 16) | 2; // 1:線コマンド
//(Geコマンド番号:04)、6「線コマンド」、2頂点。
に変えてPSPで実行。確かにラインを描く。
今まで2Dだったケド、初の「ポリゴン描画」だ。
つまりこの文書「commands.txt」の解釈は正しい。ちゅー事だな。
■\ps2devorg\pspsdk_1.0-beta2\src\gu\には、「GUコマンドの使い方」が載ってる。つまり、
//(Geコマンド番号:04)なら、「sceGuDrawArrayN.c」の
略
void sceGuDrawArrayN(int primitive_type, int vertex_type, int count, int a3, const void* indices, const void* vertices)
{
略
sendCommandi(4,(primitive_type << 16)|count);
略
}
ちゅー事。4が(Geコマンド番号:04)、primitive_type がさっき書いた例えば「6:2D矩形転送コマンド」countは頂点数。
sendCommandi()はGeのマクロ。じゃなくて関数。えっと、「sendCommand.c」の
void sendCommandi(int cmd, int argument)
{
*(gu_list->current++) = (cmd << 24) | (argument & 0xffffff);
}
みたまんま。cmdが(Geコマンド番号、例えば:04)、argument は24ビットの引数。gu_list->currentは単にGeコマンドのバッファだな。
要するに
GEcmd[11] = 0x04000000UL | (6 << 16) | 2; // 6:2D矩形転送コマンド
と同じ。
で、頂点数増やして、(例えば4頂点)
const static short trans_phelios[5*4] = {
//始め
(000), //.U0:src_x0(テクスチャのU座標)
0, //.V1:src_y0(テクスチャのV座標)
0, //.X2:dst_x0(頂点、X座標)
0, //.Y3:dst_y0(頂点、Y座標)
0, //.Z4: (頂点、Z座標)
//////水増し1
(224), //.U5:srcW_x1
0, //.V6:srcH_y1
SCREEN_WIDTH, //.X7:dstW_x1
0, //.Y8:dstH_y1
0, //.Z9:
//////水増し2
0, //.U5:srcW_x1
256, //.V6:srcH_y1
0, //.X7:dstW_x1
SCREEN_HEIGHT, //.Y8:dstH_y1
0, //.Z9:
//////最後
(224), //.U5:srcW_x1
256, //.V6:srcH_y1
SCREEN_WIDTH, //.X7:dstW_x1
SCREEN_HEIGHT, //.Y8:dstH_y1
0 //.Z9:
};
とかやってみた。水増しは、「右周り」か「左周り」か解からんのでテキトー。ちゅーか2通り試せば良い。
で、
GEcmd[11] = 0x04000000UL | (3 << 16) | 3; // 3:三角形コマンド(3頂点)
うまくいかねー。が、そのうちなんとかなるじゃろ。
(2006-05/08)