Z05始動。 | //www.旧型、PSP開発幼稚園.game.jp/(本館)

Z05始動。

GCC344実験。までw-ぷ
キメラ実験。までわ-p
OPTI実験。までわあぷ
コースケ氏?。までわwwぷ


Z05始動。(Z80死闘編)

■SEGADRIVEA32。如何でした?で、Z80づいてる今日この頃なんですが、暑くてアイスが欠かせません。
ぺろぺろ...そりゃ、ともかく。

SEGADRIVEA31/32に実験的に混入されてる。Z05が始動したす。原因はzBase。
つまりPC(==プログラムカウンタ)、の使い方にオフセットが入ってない為。
ともかく、BF03でパフォーマンスチェック。

ううう、z03とほぼ同じかはええ。で、「ぷよぷよ2」...何の問題もない。

「m22z03EBOOT.PBP」653kB(MAMEベースのZ80)
「m22z05EBOOT.PBP」625kB(CZ80ベースのZ80)
でサイズも小さい。

あの苦労は一体...
(2006-07/15、23:10)

■NEOCDZのページでさあ。CZよりMAMEZの方が早いでちゅって書いてあったから、Z05には 全く全然期待してなかったんですが...正しく使えば速いじゃないか。 「正しく使う」→あのZ80はI/F外して、PCをポインタにしましょう。つまり、
#define zRealPC (zPC - zBase) static unsigned char *zBase;//z80ram base static unsigned char *zPC;//z80pc #define SET_PC(A) zPC = (A) + zBase;
こーゆーふーにしよ。ちなみに現状 #undef CZ80_USE_JUMPTABLE でっす。(だから小さい) (2006-07/15、23:35)
■ 「m33z03EBOOT.PBP」635kB(MAMEベースのZ80) 「m33z05EBOOT.PBP」609kB(CZ80ベースのZ80) って、ちいせえ。ついに500kB台になる気がスル。 大抵のROMより本体が小さい。圧縮してないのに... (2006-07/15、23:42)
■さてと、もしこのZ80カイゾーしたら何処までイケルんでしょうかね。(遅くなるかもしんない) ほいメス。カンシ。(そんなもんはさすがに使わん)しゅゆちゅ。しゅゆちゅ。きょーは遅いからOPはあすにしよー。 (2006-07/16、00:00)
■Z05ちとテストしてみたら、「ソニック3」で音楽あやしー気がする。つまりげんじょー再現度は、やっぱMAMEZ。 速度はまあMAMEZと殆ど一緒だがCZも結構オモシロイな。 再現度:Z03>Z05>Z02>Z01 速度:Z05>Z03>Z01>Z02 サイズ:Z05<Z02<Z01<Z03 てな感じ。現状。 (2006-07/16、06:42) いちおー別館に(さしあたり動く奴を)「A32_Z05TEST.zip」で上げといたです。 (2006-07/16、08:12)



■■GCC344実験。 今日生まれて初めてGCC344を入れてみた...って遅いよ。何ヶ月放置しとんねん。まあまあ。 んで、GCC344でコンパイル。何故か「font3333.c」がちーともコンパイル出来ない。 GCC344は(ワーク増やさない限り)マクロに弱いんだな。と思った。 「font3333.c」はマクロかましてあるが、中身は単なるフォントデーター。仮にOBJに「GCC4.0.0」って付いてたって、 何の問題もないやろって思い。picodriveA14のディレクトリから「font3333.o」をコピー。で、OK。 そのあとCPPでキャストのワーニングが出たんで直す。(2ヵ所、まったく同じ奴) if( (unsigned int)(t[0]&0x80) == (priority<&lt7) ) // 0x8000 こんなん。さしあたり(unsigned int)にキャストして切り抜ける。(上みたいに) (余談だが、ここは本当は(unsigned char)で足りてる。CHARにしときゃヨカッタ。が、差し当たりコンパイルが目的だし)
で、EBOOT.PBPになったんでPSPでBF03チェックしてみた。 結果: OFF 44 22 11 55 Z32m33z05 77 54+ 64 69 71 637kb /GCC344 A32m33z05 80 58+ 67 72 74+ 609kb /GCC402 Z32m22z05 81 57+ 67+ 73 75 683kb /GCC344 A32m22z05 84 62 71+ 76 79 625kb /GCC402 GCC344の方が重いとは思わなかった。ふーん。サイズもGCC344のほーが、でかいしな。 ちうか、運だな。まーでも「運」だから「これ以上ソースに手を入れるのめんどくせえ」って時に、 「もしかして!」ちって試してみるのもアリかと。GCC344のほーが速くなる場合もある(らしい)しな。
それからGCC344の方がfpsが安定しない。+2ぐらい動く。 GCC400/GCC402の場合は+1ぐらいしか動かん。
結局GCC402がいいな。fpsが同じ値ぐらいなら、安定的の方がゲームはやりやすいからな。 まあこれも「運」かもしんないケド。そーゆー傾向はありそう。...な気がする。
それともう一つ。速度が GCC402>GCC344>GCC400 って可能性はある。まあ「運」だと思うケド。 結局。ヨクワカンナイ。GCC344で速くなる方法は(ワタシが使ったことないから)全く解からんし。 基本的にこのページの速くなる方法ってのはGCC400の場合です。タブン。(ってゆーかそれしか知らん) (2006/07-17、00:35)
以下妄想。 いちよー。他の機械(PC)にcygwinとsubversionいれて、toolschain.sh経由で環境を構築する気は(時間が取れれば)ある。 ちゅーか、今の(環境の)状態は世間一般の常識にすれば「異常」だからな。でも、やってないからまだ妄想。 この機械(貧弱NOTE-PC@0.233GHz!PSPより遅い開発マシン。しかし何の不便も無い)には ちと入れたくない事情があってな。 (でも、次の実験PCも小数点以下GHzの予定。NOTE用の無線LANカードをそのまま使う予定の為) (2006/07-17、00:55)
■キメラ実験 GCC402版(本当はもどき)unziplib.aが46kbだったのに、 GCC344版unziplib.aが45kbだったので、これを強引にリンクしたら小さくなるのかどおか実験してみたつ。 対象はsegadriveA32m33z05(609kb) で、やってみたら。出来るのね。そんで予想(ふつーそんなん変わらんと思うでしょ?)と 裏腹に小さくなる。607kbになった。んで、(EBOOT.PBP)バイナリ覗くと、 ---------|-0--1--2--3--4--5--6--7--8--9--A--B--C--D--E--F-|---0123456789ABCDEF 0000970b0|00 00 f4 03 03 b0 00 00 00 00 00 00 00 00 00 00 | .....ー.......... 0000970c0|00 00 00 00 00 00 10 d5 9d 08 00 47 43 43 3a 20 | .......ユ...GCC: 0000970d0|28 47 4e 55 29 20 34 2e 30 2e 30 00 00 47 43 43 | (GNU) 4.0.0..GCC 0000970e0|3a 20 28 47 4e 55 29 20 34 2e 30 2e 30 00 00 47 | : (GNU) 4.0.0..G 0000970f0|43 43 3a 20 28 47 4e 55 29 20 34 2e 30 2e 30 00 | CC: (GNU) 4.0.0. 000097100|00 47 43 43 3a 20 28 47 4e 55 29 20 34 2e 30 2e | .GCC: (GNU) 4.0. 000097110|30 00 00 47 43 43 3a 20 28 47 4e 55 29 20 34 2e | 0..GCC: (GNU) 4. 000097120|30 2e 30 00 00 47 43 43 3a 20 28 47 4e 55 29 20 | 0.0..GCC: (GNU) 000097130|34 2e 30 2e 30 00 00 47 43 43 3a 20 28 47 4e 55 | 4.0.0..GCC: (GNU 000097140|29 20 34 2e 30 2e 30 00 00 47 43 43 3a 20 28 47 | ) 4.0.0..GCC: (G 000097150|4e 55 29 20 34 2e 30 2e 30 00 00 47 43 43 3a 20 | NU) 4.0.0..GCC: 000097160|28 47 4e 55 29 20 34 2e 30 2e 30 00 00 47 43 43 | (GNU) 4.0.0..GCC 000097170|3a 20 28 47 4e 55 29 20 34 2e 30 2e 30 00 00 47 | : (GNU) 4.0.0..G 000097180|43 43 3a 20 28 47 4e 55 29 20 34 2e 30 2e 30 00 | CC: (GNU) 4.0.0. 000097190|00 47 43 43 3a 20 28 47 4e 55 29 20 34 2e 30 2e | .GCC: (GNU) 4.0. 0000971a0|30 00 00 47 43 43 3a 20 28 47 4e 55 29 20 34 2e | 0..GCC: (GNU) 4. 0000971b0|30 2e 30 00 00 47 43 43 3a 20 28 47 4e 55 29 20 | 0.0..GCC: (GNU) 0000971c0|34 2e 30 2e 30 00 00 47 43 43 3a 20 28 47 4e 55 | 4.0.0..GCC: (GNU 0000971d0|29 20 33 2e 34 2e 34 00 00 47 43 43 3a 20 28 47 | ) 3.4.4..GCC: (G 0000971e0|4e 55 29 20 33 2e 34 2e 34 00 00 47 43 43 3a 20 | NU) 3.4.4..GCC: 0000971f0|28 47 4e 55 29 20 33 2e 34 2e 34 00 00 47 43 43 | (GNU) 3.4.4..GCC 000097200|3a 20 28 47 4e 55 29 20 33 2e 34 2e 34 00 00 47 | : (GNU) 3.4.4..G 000097210|43 43 3a 20 28 47 4e 55 29 20 33 2e 34 2e 34 00 | CC: (GNU) 3.4.4. 000097220|00 47 43 43 3a 20 28 47 4e 55 29 20 33 2e 34 2e | .GCC: (GNU) 3.4. 000097230|34 00 00 47 43 43 3a 20 28 47 4e 55 29 20 33 2e | 4..GCC: (GNU) 3. 000097240|34 2e 34 00 00 00 1c c8 96 08 00 00 00 00 00 00 | 4.4....ネ........ 000097250|00 00 00 00 00 00 00 00 00 00 00 00 00 00 1d 00 | ................ こーんな感じで強引にリンクされてる。 ■そんで、そのキメラちゃんで、BF03取ってみた。 結果: OFF 44 22 11 55 Z32m33z05 77 54+ 64 69 71 637kb /GCC344 Z32m22z05 81 57+ 67+ 73 75 683kb /GCC344 A32m33z05 80 58+ 67 72 74+ 609kb /GCC402 A32m33z05 80+ 59+ 68+ 73 75+ 607kb /GCC402+uz344 A32m22z05 84 62 71+ 76 79 625kb /GCC402 ててて、(サイズが小さくなって)速くなるのね。一応。ちゅー事で、unziplib.aは分離した方がいいし、 最適化OPTも-O3(速度最適化)とかは止めて-O1(サイズ最適化)とかに変えたほーがいいんだな。 ...参考になるなあ。でも、「運」かもなあ?(謎)
例えばさあ、「unziplib.a」に勿論「速度」は要らないんだケド。でも現状は、「解凍速度重視」の為、 「CRC32テーブル」とか入ってる。「サイズ重視」なら、んなもんとっぱらっちゃったほーがいいし。 「*.a」止めて「NesterJ」や「MAME」みたいに内蔵型にしちゃったほーがいいって事だね。
■■OPTI実験。 先程の「キメラ」実験で「要点」が解かったんで、んじゃ今度は最適化OPTを変えてみる実験。 今度はGCC402(本当は400?+402LIB?)のみを使う。 ★segadrive本体は-O3.(速度最適化) ★unziblib.aは-O1.(サイズ最適化) にする。おそらくキメラ実験と同じよーな効果が得られるだろー。えっとMakefile
まず CC_OPT = -Werror -Wall -fomit-frame-pointer -fno-exceptions -mgp32 -mlong32 -msingle-float -mabi=eabi -c で最適化指定を外す。 んで、
# UnzipLib 関係は-O1(サイズ最適化)にしてみた。 $(OBJ)/UnzipLib/%.o : src/UnzipLib/%.c $(CC) -O1 $(CC_OPT) $(DEFINES) $< -o $@ # んで、その他は-O3(速度最適化)ね。 $(OBJ)/%.o : src/%.c $(CC) -O3 $(CC_OPT) $(DEFINES) $< -o $@
こーゆーふーに、Makeは書くんだお。そーすると自動で最適化を振り分けてくれる。(だからソースファイルの 位置には意味があるんだお) んで、
# EBOOT.PBPの作り方 $(BINARY): $(OBJS) unziplib.a $(LD) $(SOBJS) $(LIBS) $(LINK_OPT) -o $@ $(STRIP) $(BINARY) $(OUTPATCH) $(BINARY) $(BINARY_P) "USERPROG" $(ELF2PBP) $(BINARY_P) $(TITLE) $(ICON0) $(CP) EBOOT.PBP m$(MV)z$(ZV)EBOOT.PBP $(RM) $(TEMP_FILE) # unziplib.aの作り方 unziplib.a: $(ZOBJS) $(AR) rcs unziplib.a $(ZOBJS)
こーゆーふーに分けた。(きおつけないと古いVERのunziplib.aリンクしちゃうけど、最近中身弄らんし、 万一弄ったら、「make unziplib.a」で更新しときゃ問題はない。(それかmake clean)

とにかく御託より結果。んで、BF03。 結果: OFF 44 22 11 55 Z32m33z05 77 54+ 64 69 71 637kb /GCC344 Z32m22z05 81 57+ 67+ 73 75 683kb /GCC344 A32m33z05 80 58+ 67 72 74+ 609kb /GCC402 A32m33z05 80+ 59+ 68+ 73 75+ 607kb /GCC402+uz344 A32m33z05 81 59+ 68+ 73 75+ 606kb /GCC402_o3+uz402_o1 A32m22z05 84 62 71+ 76 79 625kb /GCC402
なーる程。で、同じ事「A32m22z05」でやってにる。 A32m22z05 84 62 71+ 76+ 79 625kb /GCC402_o3+uz402_o1 これでも「運」だと思うかも知れない。んだけど一般的に、こーゆー傾向があるんじゃあないのかな? つまりエミュのコアとかメモリ周りとか速くないと困るとこは-O3で、 STATEセーブとかメニューとかZIP展開とか、そんなに速くなくて構わんとこは-O1で、 んで、そーゆーふーにしなかった場合とやった場合。悪くなる事はないんじゃあないかなー。 ちゅう仮説。おしまい。(だぶんDGEN100SRCの344のがはえーってのはZIPLIBのせいなんではないかと妄想)
■■■で、コースケ氏?強引に344でコンパイルしてみたんで、出来れば試して欲しいんだが... 別館に「A32Z05GCC344.zip」 (2006/07-17、02:20)