基礎知識:ええと、現在遊べる。最強のPSPでメガドラえみゅは、DGEN160であって、他のは要りません。
ってな前提で読んでくれたまえ。
ちうか、DGEN160はヨイ。DGEN150に比べて進化してる。「バーニングフォース」も案の定(ちゃんとした画面で)動くし、
「スラップファイト」が起動する。(ちゃんと動く)(「不思議ちゃん2」も起動してちゃんと動く)
SYNZさんのページ(外部サイト)
はい、おしまい。
...てな訳にいかない所が、世の中のヘンなとこ。いーや、ソレで終わりでもヨイね。十分だ。
で、ちと。書いていいのか迷う「マニアック」ねた。
あのさ、実はここ数ヶ月頭悩ましてる。「某トレジャー」の「某エリソル」ってげえむがアルんだけど。
(もちろん日本版を)起動して、ボタンを押してタイトル画面にする。で、そのままほっぽらかす。
ええと、「PCのGENS」。それから「pspDGEN160」。そして「pspSEGADRIVEA30」。
1から4まで戦闘デモがあるケド。「完璧なのは(エミュは)一つもない」。
でも、SEGADRIVEA30の3と4の戦闘デモは「不思議」でしょ?(ナゼ再現するのだ)(タブンpicodriveA12でも再現する)
(SEGADRIVEでは5512必須)
しかも、現在開発中の「SEGADRIVEA31」では「4の戦闘デモは、もう再現しない」。(開発中picodriveA13でも再現しない)
で、A31の話。
ええと、ちとカイゾーすると「スラップファイト」が起動する。(ついでに不思議ちゃん2も正常動作)
でも、その「カイゾー」すると。他の殆どのゲームが異常動作。もしくは起動しない。
つまり「原因」が見えてきつつあるケド、対処にちと困ってるジョータイ。
ええと問題の個所は、src/cpp/memory.cppの
/* 古いタイプ*/
/* 68000 read byte[A18] */
static unsigned s68k_readbyte(unsigned a)
の関数。さしあたり、
/* 古いタイプ*/
/* 68000 read byte[A18] */
static unsigned s68k_readbyte(unsigned a)
{
if( a < MAX_ROM_SIZE ){ return rom[(a^1)];}
else if( a > 0x00dfffff ){ return ram[(a^1)&0xffff]; }
else if( a < 0x00a08000 ){ return ( z80_read((a^1)&0x7fff) ); } /*z80 shared */
else
{
switch((a^1))
{
case 0x00c00000:
case 0x00c00001:
return vdp_readbyte();
case 0x00c00004: //coo4 ^= 0x03; return coo4;
case 0x00c00005: //return vdp_status | (pal_mode? 1 : 0);
return (md_vdp_ctrl_r());
case 0x00c00008: return calc_HVC_high();
case 0x00c00009: return calc_HVC_low();
case 0x00a11100: return z80_online;
case 0x00a11000:
case 0x00a11001:
case 0x00a11200:
case 0x00a11201:
return 0xFF;
case 0x00a130f1:
return save_active | save_prot;
}
if(0x00a10000==((a^1)&0x00FFFFe0)) /* 0xa10000-0xa1001f */
{
switch((a^1)&0x1e){
case (0x00<<1):
return read_country_ver();
case (0x01<<1):
return read_joypad1();
default:
return 0xff;
}
}
}
return 0x00;
}
ってな感じで起動してた気がする。が、ここはカナリアヤシーな現状。他との兼ね合いもあるから、
「SEGADRIVEA30」で実験可能かどうかワカラン。(が、タブン大丈夫な気がスル...)
(「SLAP_A31PSD.zip」で別館にバイナリUP。一応)
(2006-06/18、08:19)
■上の奴良く見りゃ、論点は一ヶ所じゃねーか。うううう、朝はやっぱし「寝ぼけてたんだ」な。つまり、
#if 00
/* slap fight / fushigi-2 */
else if( a < 0x00a08000 ){ return ( z80_read((a^1)&0x7fff) ); } /*z80 shared */
#else
/* others */
else if( a < 0x00a08000 ){ return ( z80_read((a )&0x7fff) ); } /*z80 shared */
#endif
ちう事。それ以外は「同じ」。
(2006-06/18、13:39)
↑間違い。現在検討中。(2006-06/19、07:18)
で、スラップファイトに関しては(問題点は)ここらしい。(不思議ちゃん2は除く)
static unsigned s68k_readbyte(unsigned addr )
{
<中略>
switch( addr )
{
<中略>
#if 00
case 0x00a11100: return z80_online;/* others */
#else
case 0x00a11101: return z80_online;/* slapfight? */
#endif
で、これを両方つければ、両方駄目。どっちか片方のみ(エリソルとかヘッディーとか立ち上がらなくなる)。
これはm68000のバイトアクセス。(s68k_readbyte)
で、m68000のワードアクセス(s68k_readword)で、フックしてみた。が、うまくいかない。む~ん。
(2006-06/19、10:18)
「picodrive」の該当部分眺めてみたけど、bus_ackとか結構めんどい事してるな。実機のz80_resetとかさ。
(SEGADRIVEで)何処まで手を染めるかまではワカンナイ。ちうか計画中。ちうか要調査だな。
(2006-06/19、20:08)
■さてと、やっとアソブ時間が取れた♪
え?何がって、もちろん「スラップファイト@縦画面モード」にキマッテルじゃん。何の為に対応させて、
別館にアルと思ってるの?「アソブ為でし!」理屈はど~でもイイから、アソブあそぶ♭
で、やってみた。
設定はFSKIP60、SCREENMODE:Minios(B)、padmode:allow-button(XY)、ScreenSwap:ON、5512、
オーソドックスな縦画面の設定だな。
やる前から想像がついていたが、やはりスラップファイトは、グラディウスと違って、ゲージが見えないと、
何取って良いのかワカンナクて辛い。ちうか間違える。グラで間違えてダブル取ったってバリア取ったって、
大勢には影響がないが、スラップファイトは間違えると、ううう結構辛い物があるよな。
ちうかそれ以前に、難しいゲームなんで、スピード以外たいして役に立たんから、何とっても同じって説もあるが、
やっぱり「まにあ」は「レーザー促成栽培」がやりたいんじゃい。(ううう、どれだけの人が知ってるやら...)
レーザー狙って取るには、やはりしゅぎょーがひつよー。
ムムム難しい。難しいっ。難しいつつつ!
でもデモ「縦画面」やっぱ作っといて良かった♪
デモ~。難しい!
(ムズイ、2006-06/18、20:54)
まず「すくろーる」が波打つのが「イライラ」する。(22050とかにしたほーがいいかも)
ううう、それから「PSPの持ち方」にも多少工夫が必要だよ。
ええと左手は方向キーだから、そのままでイイんだけど、
(「解説そのままとは...」:
「左手の一指し指は、PSP横のUSBポートのあたり。」
「連射用に左手の腹でLキー押しっぱなし。」
「中指はPSP背面ロゴのSのあたり。」
「薬指と小指は曲げて手前、magicgateのロゴ近くに。」
これで、左手のみで完全にPSPを固定できると思う)
さて問題は「右手」。
ええと、中指から小指まで、を折り曲げて第一間接でPSPが落ちないように引っ掛ける。(Lキーの腹押しとで挟む)
一指し指は軽く横(ほんの少し上)にそえる。
つまり立体的に、左手が下。右手が上。ホンの少しだが。
このポジションじゃないとスラップファイトは辛いよーな気がする。
(ムズズズ~イ、2006-06/18、21:05)
そうそう本日の結言だったな。エエト...
スラップファイト動くケド。むずくてあそべねえええ
はあ...