新GCC402(xorloser)2006-05/19版 になった。 | //www.旧型、PSP開発幼稚園.game.jp/(本館)

新GCC402(xorloser)2006-05/19版 になった。

■今度は、新GCC402(xorloser)になったんでよろしく。やり方。(subversionもtoolschin.shも要らない)
前提条件:cygwinが入ってるとする。(makeとかも入ってるとする)

手順1: http://xorloser.com/ から PSPDevWin32.zip (15286kb)をDL。

PSPDev for Win32 Author:   xorloser Posted:   2nd June 2006 って奴。
(投稿日付2006-07/02の奴。これの中身が「新GCC402(xorloser)2006-05/19版(toolschain.sh動かした日付)」 )

手順2: これを解凍すると、
readme.txt (4kb)
PSPDevSetup-06060214.exe (15294kb)
が出てくる。

んで、このEXEは、windows 9x/MEまたはwindows NT/2K/XP/2K3で動くらしい。それ以外の環境では、
ワカラン(ってゆーか多分駄目だ)

手順3:で、このEXEを実行させる。そーするとインストーラーが起動する。インストール形式だな。
(だからWin系でないとタブン動かない)installshieldではないけど、そーゆー感じのインストーラー。
んで、ダイアログが出てきて3つ選択肢がある。上の二つは環境書き換えるっぽいんでパス。
(たぶん.bashrc書き換えるダケだと思うが、ヨクワカンナイし。)
一番下の「BATでマニュアル操作」ちゅー奴にする(エーゴ)。んで「インストール(ちゅうか解凍)」
次に「インストール先」

PSPの開発ツールの、標準の位置は。「C:\cygwin\usr\local\pspdev」だけど、(toolschain.shの標準がそおなってるらしい)
ウチはうざい(W98のスキャンディスクに文句言われる)から、「C:\cygwin\pspdev」で使ってる。

とにかく、既にあるならさしあたり、元の奴は「ディレクトリ名(フォルダ名)変えておこう。例えば、
「C:\cygwin\usr\local\pspdev」なら、(失敗したら戻せるよーに)
「C:\cygwin\usr\local\pspdev000」とかてきとーに変えておく。んで、
「C:\cygwin\usr\local\pspdev」がなくなったんで、
「C:\cygwin\usr\local\pspdev」で(新しい奴を)インストールすれば良い。

「インストール」って言っても要するに解凍してるだけなんで、終わったよってダイアログが出てくるから。
閉じよう。

手順4:この開発ツールはもしかしたらcygwinが無くても出来るのかも知れない。が使い方ヨクワカンナかった。
出来ないかもしれない。とにかくGCC402だけ使うには、インストール先フォルダ。仮に
「C:\cygwin\usr\local\pspdev」とすると、
「C:\cygwin\usr\local\pspdev\bin」の中では「psp*.*」つまり頭が「psp」で始まるもの以外のものは、
全部要らないんで(ここのmakeとかは使わん)、消すかどっか(パスの通ってない場所へ)移動しよう。
(ここにmakeとかの名前があるんで、本来のmakeとかが、(同名だから)実行されなくなっちゃう。)
残りはゴミがあってもGCC402として使える。
(「C:\cygwin\usr\local\pspdev\bin」の中で、頭にpspが付くファイルは全部要るにょ。他のフォルダは勿論いるにょ)

■パスの通しかたはcygwinの場合。「.bashrc」の最後に追記しとけばいいにょ。 例えば、「PATH=/usr/local/pspdev/psp/bin:$PATH」、 ちなみに「.bashrc」の位置は「C:\cygwin\home\xxxx\.bashrc」、「xxxxはログイン名」
ワタシは「PATH=/pspdev/bin:$PATH」にしてる。 ■よく見たら上記、 「PATH=/usr/local/pspdev/psp/bin:$PATH」、ではなくて、この開発ツール使うなら、 「PATH=/usr/local/pspdev/bin:$PATH」、だね。(「C:\cygwin\usr\local\pspdev」にインストールした場合) やっぱこんな長いパスはウザイと(toolschain.sh動かした人は)みんな思ってるんだろーな。 ちう訳で、どっちも同じ。(相対パス指定は変えられないかもしんないので注意)とにかく「bin」にパス通せ。 んでその「パス」は「本来のパス」より優先(前に書く)する事。それが要点。cygwinの場合。bashが起動前に、 「.bashrc」が自動で実行される。だから、そこに書いとく。んで、 書式は、「PATH=<PSPGCC402のBINのパス>:$PATH」ちう事。(「$PATH」はそれまでに設定されてた、 「本来のパス」。例えばmakeなんかはそれを使ってる。それらより、PSPGCC402のBINを優先にしよって事)
■一方SEGADRIVE。昨日の今日だが、大幅にCPP削除/変更したんで、BF03は重くなった。がゲームは 少しやりやすくなった。(いつものパターンだな)んで、 結果: OFF 44 22 11 55 A32m22z05 84 62 71+ 76+ 79 625kb /GCC402_o3+uz402_o1(devkitR6)(改造前==ほぼ別館のA32) A32m22z05 82 60 69 74 76+ 621kb /GCC402_o3+uz402_o1(devkitR6)(現在) A32m22z05 86 62+ 72+ 77+ 80 616kb /GCC402_o3+uz402_o1(xorloser)(現在) A32m44z05 81 59+ 68+ 73 76 607kb /GCC402_o3+uz402_o1(devkitR6)(改造前==ほぼ別館のA32) A32m44z05 81 59+ 68+ 73 76 605kb /GCC402_o3+uz402_o1(devkitR6)(現在) A32m44z05 84 62 71+ 76 79 600kb /GCC402_o3+uz402_o1(xorloser)(現在) (devkitR6)つまり「GCC402もどき」と (xorloser)つまり「GCC402」を比較したベンチ。 「GCC402」の方が(まったく同じソースなのに)速い。これは体感的にも全然違う。 「GCC400」なら「GCC402」にするべきだと思う。同一ソースでのEBOOT.PBPの実行速度は、 「GCC402」 > 「GCC402もどき」 > 「GCC400」 だと思う。 (2006-07/23、08:10)
■m22+とm44+で傾向が結構違うんで、もう一度同じチェックをしてみた。 上記の A32m44z05 84 62 71+ 76 79 600kb /GCC402_o3+uz402_o1(xorloser)(現在)(再チェック) は今朝は、 A32m44z05 84 62 71+ 76 78+ 600kb /GCC402_o3+uz402_o1(xorloser)(現在)(08:00にチェック) だった。(同じバイナリで測定) どおも(BF03は)PSPのバッテリーの具合によって多少は誤差がでるミタイ。 (たぶん割り込みで、微妙にパフォーマンスが低下するんじゃろ) (2006-07/23、16:55)
■EBOOT.PBPバイナリを覗くと、 000095580|00 00 00 00 00 00 d0 b9 99 08 00 47 43 43 3a 20 | ......ミケ...GCC: 000095590|28 47 4e 55 29 20 34 2e 30 2e 32 20 28 50 53 50 | (GNU) 4.0.2 (PSP 0000955a0|44 45 56 20 32 30 30 35 31 30 32 32 29 00 00 47 | DEV 20051022)..G <以下略> ってな感じ。toolschain.shは(2005-10/22)を使ってる模様。でも、check-outした日付が、 2006-05/19だから(タブン)devkitR6の奴より中身は新しい。(つまりそれで速い) 関係ないけど、リンカの吐くバイナリの配置順序の方式が、ちと変わったっぽいな。 (ちなみに「GCC344」と「GCC400」と「GCC402もどき」は同じミタイだった。) それで(サイズが小さくなって、短くて届くから)速くなったのかも知れない。 (2006-07/23、17:26)
■関係ナイけど、SEGADRIVE。m44+のmake68k弄ってm22+みたいにクロック直引きするVER (m40+)を作ってみた。(600kb⇒618kb)が、不当に(?)重くなる。(ゲームもやってミタ) 大体曖昧な記憶だが、BF03、OFFで(84→68)グライだった。確か。...んで、元に戻した。 んだけど、バックアップも取ってなかったんで、元に戻すのにエライ苦労する。が、何とか戻った。(バイナリ一致) んで苦労はどーでもイイけど、ヘンな現象が。 えっと、「元にもどったな」と思ってコンパイル594kb。(?)オカシイ小さくなってる。(600kbのハズ) PSPに持ってって実行。BF03(84→82)重くなってる。(ゲームやってみる→確かに重い) んで(使ってないルーチン復活)。元に戻った。(600kb)(古いPBPとバイナリ一致) (管理が悪いから)念の為、再度PSPで実行。BF03、84。確かに完全に元に戻った。
使ってないルーチンって。INLINE。定義したけど、何処でも使ってない。普通そおいうのは、暗黙で消えるよな。 が、PSPのGCCは消えない。OBJにゴミが残る。つまりINLINE→static変換が行われ、 (C:\WINDOWS\TEMPに出来るassenblerのテンポラリソース(作成中にコピーする)より推測) 次にINLINEにしたほーがよさげのものを、GCCが判断し、勝手にINLINEにする。つまり元がstaticでも、 勝手にINLINEにされちゃう場合がある。んで、残りがstaticな関数のまま残る。そおいう仕組みになってるっぽい。 上の場合はそーゆー経路を辿り、結局ゴミが残っただから600kb。んで、ゴミが排除された594kb。より、 アドレス配置がたまたま良かった為パフォーマンスUP。 総て憶測だが、大体こんな感じっぽい。
疑うなら、INLINEをstaticにしたり、staticをINLINEにしてEBOOT.PBPバイナリを(fc /b aaa bbb)チェックしよー。 何も変わらないから。(或いはassenblerのソースが別になってたり、INLINE展開されてたりする。 そんで元がstaticの場合は-Wallでチェックしてエラーが出るが、元がINLINEの場合は出ない。んでゴミが残る)
ちなみにINLINEは「__inline__」の事。それから、両方書くのも許される。その場合はstaticに判断されるっぽい。 static foo(); //ok __inline__ foo(); //ok static __inline__ foo(); //ok __inline__ static foo(); //ok static static foo(); //ng (註:INLINE→static→INLINE変換は、あくまで-O3の話で他の場合は知らん。) (2006-07/24、22:07)
駄目だ、この話(ここまでのINLINE話)全部間違ってる。だってよく見たら、 「INLINE」が「static __inline__」だった。いつ直したやら、でもそーすると、「static __inline__」だと、 warningが出ないで、しかもobjに使ってないのにゴミが残る。何れにせよGCCって変な仕様だな。 (2006-07/30、04:35)
■ゼンゼン全く関係ないけど、(一部のソフトで)SRAM使えるの判明したんで「シャイダグ」チェック中。 まだ14才(れべる)なのに、カニ(...)が逃げちゃう。そろそろ先に進もうかな?それにしてもカニのパターン(絵)は、 プログラマーから見ると、異常によく出来てる。あれ、アニメパターンなんてなくて、「一枚絵」なのな?左右反転 だけであれだけ表情をみせる絵描き(註:ドッター)のレベルって凄いよな。(2006-07/26) 17才になったんで、誕生日に「へーびー」をぷれじぇんと、カニは3発殴ってKOできるよーになった。 気休めで「ちから」と「ゆうき」を何も見ないで併せて30分くらいでくりあー。MAPが深層心理に刷り込まれてイルのか? 既にコノ件に関しては社会復帰が㍉か?実生活では口が裂けても口外しないよーにしよー。 さらにシャイダグ、変なぷれーに嵌ってる。オプション外したくないんで、宿屋に行けない。 だから、魔法が一切使えない。壁(150+100)より向こうの肉弾戦は辛い。壁復活は洞窟出たり入ったり、 やっぱカニのほーがましか?回復はすべて薬草を大量購入、大量消費。今やっと18才。(2006-07/26) 20才になった。MPの回復法はあった。金を消費してから全滅すればよい。大丈夫オプションは外れない。 回転床たるいな。コツは後ろから乗る事。MPが使えるしまだマッピングはしなくていいな。現在「しんじつ」(7/27) 22才「しんじつ」はくりあしたが、あいてむ忘れたんでまたくりあしなけりゃなんない。めんどー(7/27) いつのまに26才、いつのまに「えいち」MAP2の少し先でMPが尽きた。MP補給の為全滅したいんだけど、 20000Gぐらいあるし、「万屋」はまだだし、もう買うもんないし、もちものいっぱいだし、しゅおうがない。 ビルとマーには一度死んで貰って教会で生き返らせるとしよう。(明らかに間違った遊び方でし)(7/28、07:23) 27才になった。ついに「二階」へ進入。まだ4人で戦ってるんですけど、いいのか?「万屋」も開業。銀が2つあるんで、 とりあえずマーの盾を作って貰う。が、本当は何作るんだっけ?忘れちゃった。(7/29、03:00) >>これ以上遊んでも開発進まんし、一時氷結しとこ(?)(どおせ何度か解いてるし、他のが遊びたいし)
■さらに全くゼンゼン関係ないけど、別館に掲示板を設置してみた。 掲示板設置(ほんとーに誰か使ってるんだろーか?と不安になったんで) 「取り敢えずDLした」だけでもいいんで、何でもいいから書いてみて? >いんたーねっとにあるだけじゃ。誰も使ってくれないの明らかだからな。もっと宣伝せんと駄目かな。めんどくさ。 (2006-07/26、23:47)
ちうわけで「宣伝」してみた。んが、これでいいんかいな?ワカラン。(「人気blogRanking」ってゆーのを貼ってみた) これ以上は解からん。宣伝能力ないし、げっそし。 (2006-07/27、23:00) なんか知らんがもう4INになってる。クリックしてくれた方、ありがとお。(4のうち1つはもちろんワタシ) 第247位 PSP開発幼稚園(本館) SEGADRIVE開発ブロクです。 4 0 4 (2006-07/27、23:10) 第174位 PSP開発幼稚園(本館) SEGADRIVE開発ブロクです。10 0 10 キタキタ、あがっとりやす。オモシレー。 (2006-07/27、23:20) 第104位 PSP開発幼稚園(本館) SEGADRIVE開発ブロクです。20 20 20 ゴイス!こんなに簡単にアクセスって上がるもんなのか?? (2006-07/28、00:57) 第74位 PSP開発幼稚園(本館) SEGADRIVE開発ブロクです。40 90 40 さてみなさん受験最後の追い込みです。ガンガリやしょう。(今週だけにしとこ) (2006-07/29、03:16) >>ってなんだあ。本当は10で割るんだって。やっぱ宣伝のーりょくナイからなあ。 (2006-07/29、04:49) (宣伝の為?)「学び・教育」から「漫画・アニメ・ゲーム」にジャンルを変更した。 ケドさあ。この「漫画・アニメ・ゲーム」ってジャンル、作った人の微妙な悪意を感じるよなあ。 強引に纏めるのなら「漫画・アニメ・小説」とか「漫画・アニメ・映画」とかだろ? (それだって各々から苦情が来るに違いない。漫画とアニメ一緒にすんなとかさ。)作った人センス絶望的。 強引に纏めるなら「ギャンブル・ゲーム」(?)ってゆーか「オンラインゲーム」ってジャンルがあって、なんで 普通の「ゲーム」がないんだか?「ゲーム」ってカテゴリで、「トランプのブログ始めました」って人。 少数派の気がスルんだが... (宣伝註:賞金とかは下らな過ぎるから興味が無いデス。ってゆーか単なるひがみ。そんなんが目的ではなくて、 SEGADRIVEもちっと使って貰いたいのが本音です。開発しても誰も使ってくれないんじゃ、むなしすぎる。 何度か書いてるよーに「おまいのSEGADRIVEはコードがタコすぎるワイがもっと速くしといたで」ちゅー方が、 現れてくれると気が楽なんですが...、おっとまたもや妄想が...) □ハッ「漫画・アニメ・ゲーム」っての考えた人モシカシテXXの手先?強引にメディアミックス推奨してたからなあ (ごめん見なかった事にしてえでも本音こら!) いやねえ、アクセスあるのは知ってたケド。アクセスだけあって、SEGADRIVE誰も使ってないんじゃないかと 思ってさ。いちおー遊ぶ為に作ってるんで、使ってくれないとかなしーのです。DGENにはDGENの良さ。 SEGADRIVEにはSEGADRIVEの良さがあると思ってる。picodriveは、...もちっと修行しろな?補習。 (2006-07/28、00:10) >>デモデモ、風のウワサでpicodriveは、Double dragonとかContra Hard Corpsとかウゴクみたいですね。いや、 よくシラナイんですけど?
■さらにかんけーない妄想話。そら、すてーととかだってさ。考えてはいるです。いるんだけどさ。 ワタシの技術力じゃあ、現状よりタブン遅くなっちゃう。って遅いんだったらワタシはイラナイ訳です。 イランもん作ってもしょーがないから、現状は無い。が、一応妄想では計画してる。 ステート。つまり現在のパラメーター全部保存する訳。CPUとメモリは特に問題ない。んで、音源も苦労すりゃ、 まあ何とかなる気がする。ケドCPPコアの部分。これが結構デリケートでさあ。ちょっと要らんとこ外すと、 途端に重くなる。んでそこだけ迂闊な事出来ないの。んで、考えてる妄想は、CPPコア内部で使用する変数は、 総て配列内部に確保。ステートSAVE/LOADは配列のポインタを取得してサイズ分をLOAD/SAVE。 ちゅう感じにしたい。よーするに、 unsigned char aaa; unsigned char bbb; unsigned char ccc; みたいなのを、 #define val_aaa 0 #define val_bbb 1 #define val_ccc 2 unsigned char ssss[100];//使う変数量 で、 if(aaa > bbb) ccc=123; みたいのを、 if(ssss[val_aaa] > ssss[val_bbb]) ssss[val_ccc]=123; みたいにしたい。 って重くなんないの?って多分重くなんない。やってみないとワカンナイケド。これが駄目なら、 unsigned char* ptr_aaa; unsigned char* ptr_bbb; unsigned char* ptr_ccc; で、初期化時に、 ptr_aaa=&ssss[val_aaa]; ptr_bbb=&ssss[val_bbb]; ptr_ccc=&ssss[val_ccc]; んで、 if( (*ptr_aaa) > (*ptr_bbb) ) (*ptr_ccc)=123; すべてはアッセンブラでどんなコードになるか次第なんですが、...。でもやってないから妄想です。ハイ。 んーんー。でもやっぱ重くなるかもなあ。でも、素直に作っても重くなるんだよなあ。(どおせ妄想だ) やっぱ地道にクリーンアップ&バグ抜きのほーが効果ありそーだしなあ。 (2006-07/28、01:36)
http://yun.cup.com/psppg009.htmlによると、 startup.Sのスタブの上位桁ってスタブする関数の数なんですね。しらなかったつ。次回から修正します。 (2006-07/28、21:46)
■ちょっとpicodriveにsegadriveから持ってきたmpu22乗せてみた、のはいいんだが、謎が一つ。 mpu22は命令をソートしてないから(実行時に)後でソートするんだが。とにかくソートしてくれれば、 「バブルソート」でも何でもいいんだが。さしあたりqsort();(註:クイックソート)の標準関数呼んでる。 (註:qsortの必要性は全くない。本当は単なる無駄) これsegadriveの場合。んで、全く同じもんなのにpicodriveに持ってくと、リンク出来ない。 全く同じ開発環境なのに。インクルードするヘッダも合わせてみた(ってゆーかこれはコンパイル時にエラーが出る筈) SEGADRIVEとpicodriveの違い。cpp含むか含まないか。この辺でそうなるのかも(?)ヨクワカラン。 でも、mpuの部分は明らかにどっちも単なるC言語なんすケド。 「C言語のみ」の場合と、「C言語とC++言語を両方使う」場合で、「リンクする(実態の)標準ライブラリが違う」 って可能性はあるよなあ。 (2006-07/30、04:50) (註「バブルソート」:質実剛健、実直タイプのソート。誰でもまず真っ先に考えつくソート。アルゴリズム事典等では、 真っ先に載っていて、後で違うタイプと性能比較され、使っちゃ悪いような雰囲気に書かれているがそんな事は無い。 処理件数が大した事ない場合。どのソートでも対して変わらん。むしろ本体が小さい分(キャッシュに乗って)有利な事もある。) (註「クイックソート」:速いと云われる事もあるソート。だが最悪値は実行時間がバブルソートの約2倍(だっけ?)かかるのは秘密。)
■「picodrive」(AutoFPSモードが)アマリに不安定で使えないんで、対策中。 で、開発中版のA14では、「固定FPSなのに死ぬ」のを発見。 m22z05の「INSECTOR-X」。「FSKIP1固定」だと死なないのに、「FSKIP0固定」だとエミュが死ぬ。 (これは本当は死んでない。つまりアクセス違反などはしていない。アクセス違反するとOSの世話になって、 数秒後に強制電源断される。)メニュー等に行けなくなり、「HOME終了」するしかなくなる。
これはどおもFPSの取得の方法が駄目っぽい。現在picodriveは「カウンタ」から取得する方法(お魚さん方式)だが、 これは諦めて、素直に「タイマー」から(1/60秒相当の時間を)割り出す事にしよう。(DGEN100方式)
註:「カウンタ」から取得する方法(お魚さん方式)は、ctl.frameの値。(仮に構造体名が「ctl」の場合) sceCtrlReadBufferPositive(&ctl,1);//パッド取得と同じ構造体に入る。 syorioti =ctl.frame;//このメンバ「frame」がVのカウンタなんで、これを使って処理。 註:「タイマー」はSCEの関数unsigned long sceKernelLibcClock(void);で取得。(DGEN100方式) tm_ed = sceKernelLibcClock();//時間を取得。 こうやる。
もしかしたらこの「お魚さん」方式は(1/60秒)より速くなった場合に、巧くいかないのかもしれない。 (それで「picoengine」は巧くいかなかったのかも→いや確か「強制電源断」だったから「align死(ロングアクセス出来ず死)」だろう)
この場合のalign死は具体的にこんな奴(例)。(←って日本語??) //ロング=32ビット書き込み。(uint32==unsigned int==unsigned long, uint8==unsigned char) void WRITE_LONG(void *address, uint32 data) { if ((uint32)address & 3)//4バイト境界にない場合 { //(この括弧内の部分を「*(uint32 *)address = data;」にすると死ぬ。→アドレスエラー??→「強制電源断」) //PSPの場合、こーゆー順序。 *((uint8 *)address ) = (uint8)data; *((uint8 *)address+1) = (uint8)(data>> 8); *((uint8 *)address+2) = (uint8)(data>&gt16); *((uint8 *)address+3) = (uint8)(data>&gt24); return; } else//4バイト境界の場合。 { *(uint32 *)address = data; } } (2006-07/30、21:05)
■とにかくヨクワカランと、segadriveA33から該当部分を抜いてきてpicodriveA14にコピペ。 んが、動作とてつもなくオカシイ。とてつもなくトロイ。が、「絶対に死ななくなった」。 (もちろんゲームが遊べる速度ではない) でも、明らかにエンバグしてんな。今日はもう遅いから寝ないと。明日からはちと忙しい。残念。 (2006-07/31、03:45、暫く更新出来ないかも) やっぱ死ぬこともある。んで、今までローカルの配列(staticな配列)に画面をレンダーしてたのを止めて、 VRAMに直接レンダーするよーに変更。したら速くなった。んでA14UP。 不安定なのは、Geの転送のせいだったのかな?(RAM→VRAM転送) (2006-08/01、12:50、アメブロ管理画面ちと使いにくくなつた気がする)
■カウンタ7000だって、カウンタ設置したの2006-1/16だった。一体何人SEGADRIVE試してくれたんだろ? DLしてもPSPのVERで動くとは限らんからなあ。動いた方はラッキーだと思うよ。1.00と(加工すれば)1.50で動く事は、 解かってるんだけど、それ以外のVERでもし動いたら、報告(SEGADRIVEのVERとPSPのVER)お願いね。よろしく。 (2006-07/30、21:18)
■開発で使ってるメインマシン-ノートPen、266MHz(註:0.266GHz)(1999年生まれ、7才)、があつそーだつたんで、 麦茶をイッパイごちそーしたら、壊れた。(おなかひやしたのかな?) んで、今日ちゅーちゅーちりょおしつ、で、ないぞーさらして、OP敢行してた。執刀医はワタシうふふふふ。 どおも、黄泉の国がお気に入りのよーで、もうお星☆になつたとおもつて。てけとーにテープでないぞー止たら、復活。 よっぽど、この世に未練があつたのかいな? (2006-08/03、03:14)
■さらに宣伝。悪乗りして、http://www.dcemu.co.uk/の開発スレ?に宣伝してみた。こんなん、
I developments sega genesis emulator for PSP. the name was 'SEGADRIVE'. now newerrst version on 'A33'.(alpha #33) location at ... http://psp.nukenin.jp/download_E.html (including EBOOT.PBP & source list & Makefile & Maketools) all license GPL2. try it?
SEGADRIVE (2006-08/04、16:42)
■GBA(v12)とVBA(v123)のソース。ちとコンパイルしてみた。ケドMyPen0.266じゃあ無理みたい。 (多分メモリが足りない、64MBのメモリ) 両方、GBA.CPPとGBA.Cでこける。VBAの場合のエラーはこんなん。 make: /pspdev/psp/bin/sdl-config: Command not found(とりあえずSDLはない) make: /pspdev/psp/bin/sdl-config: Command not found(とりあえずSDLはない) psp-gcc -I. -I/pspdev/psp/sdk/include -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE =\"VisualBoyAdvance\" -DVERSION=\"1.7.2\" -DHAVE_LIBZ=1 -DHAVE_LIBPNG=1 -DSTDC_H EADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRIN G_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_MALLOC_H=1 -DHAVE_UNISTD_H=1 -DHAVE_ARPA_INET_H=1 -DHAVE_NETINET_IN_H=1 -I. -I./me -I../.. /src -DSYSCONFDIR=\".\" -fno-exceptions -DC_CORE -DDEV_VERSION -DSDL -DPSP_ME -Wall -std=c99 -O3 -G0 -c -o GBA.o GBA.c GBA.c : In function 'CPUWritePNGFile': GBA.c(1076) : warning: implicit declaration of function 'psp_gu_get_vram_addr' GBA.c(1076) : warning: passing argument 4 of 'utilWritePNGFile' makes pointer fr om integer without a cast GBA.c : In function 'CPUWriteBMPFile': GBA.c(1081) : warning: passing argument 4 of 'utilWriteBMPFile' makes pointer fr om integer without a cast GBA.c : In function 'CPULoop': GBA.c(3284) : warning: implicit declaration of function 'gba_sdl_render' cc1: out of memory allocating 27833964 bytes after a total of 55078912 bytes make: *** [GBA.o] Error 1 (「55MB要るのに27MBしかねー」って言ってんのかな?) (2006-08/04、22:16)
■現実逃避モードで、Webをだらだら巡回してた。 http://haze.mameworld.info/ ん?これは? MW4のあれが出てるよな? ってMAMEのドライバ参考にすればいいのかな? ってゆーかMAMEのドライバってよーするにMESSだろ?(描画部はMAME) タブン。 まあ探ってみるか (2006-08/05、22:05)
August 5th, 2006(註:つまり今日ですな) Charles also pointed out that the Star Wars scroller text in Monster World 4 is missing in both Gens and Kega. For some reason it shows up in MAME. (意訳:MW4でのスターウォーズな文字スクロールはGensやKegaでは(現在まだ)ダメなんにゃが、 チャーリーたんはMAMEでこの点が解かったのでつ) Monster World 4 (DGEN160はちゃんと出るケド(DGEN150で確認(別館))、SEGADRIVEやpicodriveや その他PCのエミュGensやKegaやGenecyst等は駄目なの)
こんなんだじぇー。 (2006-08/05、22:09) で、すかさず宣伝したです。 Great work!(MW4) if will be opend code gives me pleasure. (しゅごいてつ、MW4。ソースコード見るの楽しみ♪) I wrote an article item it by my japan blog from … http://ameblo.jp/pspdevblog/entry-10014991782.html (日本のワタシのブログにこの件書いちゃったでつ) Posted by: segadrive at August 5, 2006 2:21 pm 宣伝は一日にしてならず。 (2006-08/05、22:22)
■おっと、(Hazeさんから)お返事が来たです。 the source will be distributed, although I can’t promise MW4 will still work at that point. (このソースリストはまだ公開してないが、MW4はこの点が直る事を約束できないにゃー) At the moment it’s a MAME driver with ~1400 sets based on the goodgen database (yes, I’m crazy, but I prefer working in MAME to MESS ;-) (だってMAMEは1400とかゲームサポートしてるし、... (..って、そりゃやりすぎだろ。だからMAMEの中のMESSの話だ)) If I can get the raster effects sorted and a few other bugs fixed I’ll probably release it as a standalone ‘tiny’ MAME build with these genesis sets supported. (もし、ラスターソート効果とかのちょっとしたバグを直したいんだったら、 メガドラ専用エミュにして「tiny」コンパイルでやってね。) Posted by: Haze at August 5, 2006 5:41 pm
(2006-08/06、14:59)
んで、お返事。 ok,understand. (わ、わかったでちゅ) MESS on tiny compiles only genesis. (additional src from MAME genesis driver) & furturing support this. (MESSはメガドラ専用でコンパイルして、MAMEのソース追加するでちゅね。 んで、このサポートは未来、...と。) Posted by: segadrive at August 6, 2006 6:12 am (2006-08/06、15:19)
エーゴのベンキョーにもなるでよ(スペル間違ってる所とか) (2006-08/06、20:54)
■結局SEGADRIVEもpicodriveも弄ってる。何だか例に拠って、泥沼の様相に...。(そりゃいつもの事だ) そりゃともかく(Hazeさんが最も言いたかったであろう)「the raster effects sorted」って何だろな? 直前の「get」は辞書にはないが「導入した」って意味だろな。 そういえば、「FinalBurnのpicodrive」は「必要なラスターだけ(順番を考えないで)更新」する「受動的な描画」だった。 (CRTのビームの動作は基本的に考えない。割り込みとVRAM更新に着目する) 一般的なエミュは、必要なラスター「を」(順番に)更新する「能動的な描画」だから全然違う。 (CRTのビームの動作を基本として考える。割り込みはラスターごとに考える) あれと同じものかな? 「FinalBurnのpicodrive」と「元がGens plusな別館のpicodrive」は、実装方法が全然違うものの。 (元は)同じ人がやってるから、義兄弟みたいなもんだしな。いずれにせよヨクワカランな。 CRTCの実装方法が全く変わるかもしんないな。 (2006-08/07、04:04)
■ここには書けんが、Dino Dini’s Soccer(E)<以下5行自主規制> ってゆーわけで、なかなかHazeさんの(最近の)ブログは(メガドラの)「的を得てる」。 (註:あそこはMAMEの開発ブログです。念の為) 以下概要。(すべてメガドラ関連のみ) 「2006-08-07」DMA転送。 「2006-08-06」0ラスター目のIRQ。 「2006-08-06」Z80にバグ。(マーベルランド) 「2006-08-05」ラスターソート。(MW4) 「2006-08-04」ROMエリア内の特殊RAM配置。(ゲームのカンズメMEGACD内のディティーボーイブルース、他) 「2006-08-03」(Genesis 12-in-1)のカスタムバンクセレクト。 「2006-08-02」インターレースモード(ソニック2)。割り込みタイミングが厳しい(ダブルドラゴン2) 「2006-08-02」ダブルドラゴン起動、バンキングコード。ソニック2のインターレースモード。(Hardball 95)の特殊SRAM。 「2006-08-01」ラスター関連(コントラハードコア)。 「2006-07-30」(Realtek、註:ゲーム会社名)の特殊バンキング。 「2006-07-29」ハードウェアー当たり判定。(Strider Returns、註:「ストライダー飛竜2」とは関係ない)(海賊版?Rockman X3) 「2006-07-29」起動コードチェック。(A Bug’s Life)(Sonic Jam 6) SEGADRIVEもpicodriveも、もっと修行が必要だな。
ちっと驚いて欲しいのがm68000もZ80もまだ完璧な奴は世界の何処にもないって事。 RazeだろーがMUSASIだろーが厳密には全部ダメ。現実的にはバグがあっても不自由しないんだけど... ワタシもシロートだから、もうそんなもんは前世紀にとっくに解決されたと思ってた。が、現実は深いです。 (註:Z80、世界で最も有名なCPU。多分30才ぐらい?(ヨクシラネ)技術情報はすべて開示されてるし、もっともエミュの種類も多い。 完成度の高いエミュも多い。ちなみにMAME元祖はCPUにZ80しかなかった。シングルCPUのエミュだった。 (マルチCPU対応は初めからしてあった)(直ぐにm6502が追加された)) (註:m68000、Z80に次いでエミュのコアが多い。だが何故かi8086のアセンプラの奴ばかり、C言語のコアは片手で足りるかな? ぐらいしか種類がない。(MUSASI、C68K、generatorの奴、Amigaの奴、他) もっとも旧VERは恐らくC言語だったろうが、現在旧版が簡単に手に入るのはMAMEぐらい。) (2006-08/07、14:00)
■地味にMAME(MESS)107Sのソース見て過ごす。現在の107Sのメガドラ部分はSEGADRIVEとpicodriveを 足して2で割って、コサジ少々みりん一杯加えた感じだ。(あくまで感じ、です) やっぱ「予習」は、しとかんとダメでしょ?あ、夏休み中だったっけ。 それから、MAME106Sに比べて、m68000とZ80は全く同じ物である事を確認。つまり別館の SEGADRIVEとpicodriveは、まだ最新版(のカイゾー版)だな。よかった♪なんちて。 (2006-08/08、04:48)
■見てるダケではつまらんから、移植を始めた。これはpicodriveのgenesis.cを削除して、代わりにMAME/MESS107Sの メガドラコアをはめ込む。とゆー物。 口で言うのは簡単だが、めんどい。多分完成しないだろう。でも、そーす眺めててもつまらんし。経験値かせぎちゅー事で由としよー。
それでも、 「genesis_vdp_write();」はメガドラ用なのでいるが(註:メガドラ専用) 「genesis_vdp_w();」はメガドラ用ではないので要らない。(註:C2専用) とかMAMEそーすマニアになつたり... (C2:SEGAC2、ゲーセン用、メガドラ基盤、サンダーフォースAC等、Z80専用にROMが割り当てられているので、 多少メモリマップが、違うが、メガドラと殆ど一緒。 (メガドラはm68kがZ80を止めてZ80に(Z80用プログラムを)転送する。 C2は始めからROMが割り当てられているので、そんな処理は要らねー。 だからプログラムの作りが多少変わる。) (2006-08/08、22:38)
■うーん。結局MAME107Sのそーすは見たケド。確かに現状「FinalBurnのpicodrive」に近い方式ミタイ。 とゆーのは、現状SEGADRIVEもpicodriveもイワユルGens(DGEN)方式で、CRTC==main(メインルーチン)だ。 CRTCでは時分割でm68とz80を処理。レンダーもする。(レンダー:差し当たりここでは画面の話のみ) MAMEの方式は、MAMEのmainで時分割でm68とz80を処理。するんだが、レンダーはしない。 レンダーは(1/60)単位の「VIDEO_UPDATE」でもしない。んじゃあどこでスルかというと、 「INTERRUPT_GEN( genesis_interrupt )」で行う。(m68kの割り込みが発生した場合に割り込みの種類を判断し、必要ならレンダーする) つまりm68で割り込みが発生した場合。画像バッファ(仮想画面)にレンダーする。 「VIDEO_UPDATE」では画像バッファ(仮想画面)から(原理的には)実画面へ単なるコピーを行う。 (註:実画面:PSPの場合はVRAMで良い。(但しVSYNCを考えるなら見えない所)MAMEの場合は、構造上 ここもまだ仮想画面。このあと3回(4回?)ぐらいは仮想画面を転送されて、やっと画面に表示されるの。画面に出るまでは大変なのだ) (註:PSPはメモリ→VRAMにGe転送を使うと、トロイ。その上、場合によっては不安定になる。 picodriveA13はメモリ→VRAM転送。picodriveA14はVRAM→VRAM転送。 dgen1.00はVRAM→VRAM転送。つまりSEGADRIVEは初めからVRAM→VRAM転送。 だから「仮想画面」はぜひVRAMにとろう。どうせVRAM余りまくってるんだ。 RUKAさんは、GeコマンドのワークにもVRAMを使ってる。(ワタシはやってないが多分その方が原理上速いと思う) エミュと全然関係がない、3Dのプログラムを作るにしたって、ポリゴンのGeコマンドはVRAMに置いた方が原理上速いと思う。 PSPSDK標準では多分RAMになってると思うから、VRAMに配置するように改造したほーが、速度出ると思うよ。(註:やってないんで妄想) (つまりGuのバッファはVRAM配置すべき))
ちなみに現状(107S)の「INTERRUPT_GEN( genesis_interrupt )」のコメント。 /* this (and the hv counter stuff) appear to be wrong .. various glitches .. rasters not working right in many games */ (この方式はまだダメで巧くいかね。ラスターエフェクトとかちゃんと動かないし)
でもHazeさんの奴は、これの延長上だと思う。タブン。 (2006-08/08、04:00)
■うーんやっぱてきとーにテープで止めただけじゃダメみたい。このPC(P0.266、開発、ブログ用)が不安定で、 なかなか立ち上がらなかった。そーゆー訳で、今からバックアップ。多分しばらくここは更新しない(出来ない)。ゴメンネ。 (2006-08/09、18:57)
■ふう、ぜーんぶバックアップ取ったです。(CDに焼いた)これでこのPC(P0.266、開発、ブログ用)はいつ壊れても、 困らないです。ヨカッタヨカッタ。んで、cygwinとかも全部CDに焼いたから、インターネットに繋がってない別のPCでも、 (PSP開発可能かどうか?)試せる。と、思うです。(やってないから妄想だが、タブン出来るでしょ?) あと、Gensのソースとかも焼いたから、一度(もちろんPC用の)コンパイルしてみたいな。マダ一度もやった事ないからね。 (2006-08/10、03:26)
■ワタシが、あじーって云って。あんぐり口開けて、したべろ出してヨダレ垂らしながらハアハア逝ってる間に、 VBAが124になりましたな。ZX81氏、すべてソース付。WEB開発者のあるべき姿ですな。えらいつ。 (註:「リンク(の伝説)」(内部)から行けます) (註:ZX81:シンクレア社のZ80を乗せた超ビンテージ、パソコンの名称:MESSではサポート。一般人は絶対に知らない。 おそらくハンドル名は、関係ないかも?あるかも?いずれにしろ氏はマニア) (註:それを見たバンダイが(現バンダイナムコホールディングス)RX78(註:初代ガンダムの形式番号)とゆー名前のパソコンを 発売した。が、単なるMSX1互換機だった。) sinclairZX81 (激シブPC。性能も激シブ。但し大きさは上のバド缶から想像するに、PSPを2回り大きくしたグライ) (2006-08/12、00:07)
■暑さにやられて幻覚でも見たのかと思った。HazeさんちでMDのソース+バイナリ(PC用)が配布されてるぞー。 (別館リンクから行ける)もちろん開発者用ベータだから、苦情その他は筋違い。ワカッテルとは思うケド。念の為。 まだ中身見てないんだけど、暑い。熱い。 (2006-08/14、15:52)
さしあたりBINが添付されてたんで動かしてみる。まず、「hazemd -cc↓」でMAMEコンフィグ作成。これを書き換える。 video gdi とか rompath c:\haze\roms とか うーん、それでも上手くいかない。うちのROMは世間のとCRCが違っちゃってる可能性が高いからな。
■要は「\src\drivers\megadriv.c」 まだヨク見てないけど、 switch (size) { case 0x00: hsize = 32; vsize = 32; break; case 0x01: hsize = 64; vsize = 32; break; case 0x02: hsize = 64; vsize = 1; /* printf("Invalid HSize! %02x\n",size);*/ break; case 0x03: hsize = 128;vsize = 32; break; case 0x10: hsize = 32; vsize = 64; break; case 0x11: hsize = 64; vsize = 64; break; case 0x12: hsize = 64; vsize = 1; /*printf("Invalid HSize! %02x\n",size);*/ break; case 0x13: hsize = 128;vsize = 32;/*printf("Invalid Total Size! %02x\n",size);*/break; case 0x20: hsize = 32; vsize = 64; printf("Invalid VSize!\n"); break; case 0x21: hsize = 64; vsize = 64; printf("Invalid VSize!\n"); break; case 0x22: hsize = 64; vsize = 1; /*printf("Invalid HSize & Invalid VSize!\n");*/ break; case 0x23: hsize = 128;vsize = 64; printf("Invalid VSize!\n"); break; case 0x30: hsize = 32; vsize = 128; break; case 0x31: hsize = 64; vsize = 64; /*printf("Invalid Total Size! %02x\n",size);*/break; // super skidmarks attempts this.. case 0x32: hsize = 64; vsize = 1; /*printf("Invalid HSize & Invalid Total Size!\n");*/ break; case 0x33: hsize = 128;vsize = 128; printf("Invalid Total Size! %02x\n",size);break; } とか。いかにもGens地方から偽装派遣されて来た感じ。
レンダーはタイマー割で描いてる。うへー重そう。こんなん。 timer_adjust(render_timer, TIME_IN_USEC(1), 0, 0); 1μSec(マイクロ秒=10-6秒=0.000001秒)かあ。 (ちなみにメガドラ1ラスター当たりの消費時間は約63.61μS。(1000000[μS]÷60[枚]÷262[ラスター])) (2006-08/14、17:02)
■e氏の「え!?みゅれーたー」081fix3になつて容量が増えたとおもったら、 Win用の確認バイナリが添付されてる。やはりいづこも考える事は同じ。 (デバッグ手法の一部として)効率が良いデバッグ方法だもんなあ。 以下勝手に転載。 e[mulator] for Win32 0.81 fix3 (test) 0.81fix2に修正を施してfix3としWindowsに移植してみました。 動作確認は適当にしかやってないので問題が多々あると思います。 PSP移植の動作確認用で作ってるので微妙です。 <注意> (1) ZIPは読めません。 (2) ステートセーブできません。 (3) ROMの読み直しなどができません。 (4) GUIが存在しません。 (5) 画面の拡大ができません。
[*] 現在サポートしているハード (1) PCエンジン+スーパーグラフィックス+CDROM2(未成熟) (2) ワンダースワン (3) ファミコン(NesterJ for PSPのソースを利用し改造) (4) ゲームボーイ(RINのソースを利用し改造) (5) ネオジオポケット(NEOPOPを移植し大幅改造)
ちなみにこのヘッポコのーと(Pen0.266GHz@Win98SE)でも、凄く重いながらも動きましたヨ。 (2006-08/14、20:15)
PSP開発にまったく関係ない話。:まずアメブロ管理画面少しダケ使いやすくなった。(2006-08/15)明日には どおなるか判らんが。そりゃどおでも良くて、すとりーみんぐの話。ワタシはエロ関連は興味ないんでそれ以外の話。 なんか嫌がらせにしか思えないすとりーみんぐ。でもNET初心者だからどおしよーもない。んで、 ttp://tetora.orz.ne.jp/forum/gasdown/download.cgiの New! Ver2.2.0.2d GetASFStream2202d 699KB 2006/08/06 (要するにDLツール) を試してみた。OKでつ。興味ない人には変な話でゴメン。(Gyaoとかもあんまきょーみ無い) (註:「嫌がらせ」:ワタシのよーに遅いPCしかNETに繋がってない場合は、動画再生しても、音は鳴るが画はコマ送り。 DLして、同じPCか違うPCに転送して再生すれば「動画」が見れるのに。別に個人で見るダケであって、そんなんコピーだの 何だのするつもり無い。(一度は見てみたいが、そもそも残しておく価値を感じない) そもそも「見れない」のは「嫌がらせ」以外なにものでもない。つまりワタシの場合は現実に「嫌がらせ」。他の人の場合は知らん) (註:「エロ関連は興味ない」:別に聖人君子って訳じゃない。そんなの教えて貰わなくったって(必要なら)簡単に情報収集出来る だろって話。少なくともワタシには簡単。他の人の場合は知らん。註:ウチは情報の効率収集の為、総てのエロ系フィルターは、 最強(きつく)設定してある。でも現実にはザル。つまり情報の効率収集に役だってるかは謎。気休め) (2006-08/15、20:22)
■ちょwwっとHazeさ~ん。HazeMDにSMSを追加したそーな。気持ちはワカルんだが、(註:ACにはメガドラとSMSが 筐体内に両方入ってて、ボタンで切り替える業務用ゲーム機が存在する)それやったらMAMEになっちゃうよーな。 あ、MAMEか。 なーんかSMSのmode4がメガドラでどおなるか話題になってるがヨクワカラン。そおいやpicodrive。お魚さんのgenesis_plusの時代には 透明色の実装がちょっと変じゃないかなーと思ってMSXやSMSと同じ方式の透明色に(ダイブ前に)変更した。これは「ソニック2」の オープニングとかで、確認できる。そおゆー訳で、メガドラの一部は上位互換になってるから、本当に融合するのなら、それはそれで 無駄な努力では無いんだが、どおなるやら... (註:上位互換:メガドラには「メガアダプタ」というオプションがあり、それを付けるとSMSが完全動作する。それの中身はバス調停装置、 みたい(詳しい事は解からなかった)それを付けてメガドラを動作させた場合。VDPはもちろんメガドラの物を使う) (註:ちなみにメガドラは吸い出せてるんだから、その(自作)吸出し機に「メガアダプタ」をセットしてSMSの吸出しにトライした事はある。 が、これは出来ない。結局「メガアダプタ」の仕様が不明で、断念した。ガンバレば出来るかも知れんが、それよりSMS用の 吸出し機を作った方がハヤイ) (2006-08/16、02:22)