新ROM起動!A24(2006-04/16) | //www.旧型、PSP開発幼稚園.game.jp/(本館)

新ROM起動!A24(2006-04/16)

■■ダイナマイトヘッディー公式の裏技までジャンプ
■■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)


ERAI_BUKA (えらーい、ブカ) なんと、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)

PSP_PHELIOS_V (まだ作り中です。) ちょっと、こんなん。やってみた。 が、現状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)