■ROUND12 Fight!
MUSASI3.3 vs MUSASI3.3
あ、やっぱり戦う幼稚園なんだ~。
既に内容が、マニアックな方向にいっちゃってて、
PSP版のDGENと関係がなさそうで、実は関係がある情報。
(注:このDGENは1.00です。最新のDGENはもっとずっと進んでいます。
スキルがあり、開発をしたい方は開発者に直接コンタクトをとって下さい。
私は開発者とは全く関係のない第三者です。
あくまでこのページの話はマニアックな方向にイっちゃてて、
多分誰にも、今日の情報は役に立たないです。
(m68kmake.cとm68k_in.cが無い開発者なら役立つが?)
それでも良ければ、読んでね。昨日のも多分役に立たなかったと思うが)
本日特別マニアック企画
朝まで徹底討論!ぢゃなくて、徹底比較。
yoyofrのNEO_PSP0.5に入ってた旧MUSASI3.3
と、
MAME1.03に入ってる新MUSASI3.3はこんなに違うぜ!
の巻
(昨日苦労して一般人には必要性の判らん作業をしていたのはひとえに、
こいつらを調べたかったんだ。その戦果。もちろん両方のソース全部調べた。
全部調べないと殆ど価値がないもんね。ていうか全部調べても実は、
元の(m68kmake.cとm68k_in.c)さえあれば、価値がない。
肝心のこの2つさえ調べれば、済む話だって事は、
全部調べたからこそ判った話なんだけどね。
で、この2つはまだ調べてないです。っていうか分量的にすぐ終わる。)
「opac.c」 ASR/ASLのサイクルが追加されてる!
「opdm.c」 DBF_Wもサイクルが追加されてる! (←ここはシフト系じゃあないよ)
LSR/LSLのサイクルが追加されてる!
「opnz.c」 ROR/ROLのサイクルが追加されてる!
ROXR/ROXLのサイクルが追加されてる!
Scc系命令のサイクルが追加されてる!
ccに入るもの。(HI,LS,CC,CS,NE,EQ,VC,VS,PL,MI,GE,LT,GT,LE)(この行は初心者用)
「m68kops.c」
Bcc系命令のサイクルが追加されてる!
ccに入るもの。(HI,LS,CC,CS,NE,EQ,VC,VS,PL,MI,GE,LT,GT,LE)(この行は初心者用)
/* function mask match 000 010 020 */
{m68k_op_bhi_8 , 0xff00, 0x6200, { 8, 8, 6}},
↓
{m68k_op_bhi_8 , 0xff00, 0x6200, { 10, 10, 6}},
算術系命令全域でクロックが違う(68Kはとろい)で追加
/* function mask match 000 010 020 */
{m68k_op_or_32_er_d , 0xf1f8, 0x8080, { 6, 6, 2}},
{m68k_op_sub_32_er_d , 0xf1f8, 0x9080, { 6, 6, 2}},
{m68k_op_sub_32_er_a , 0xf1f8, 0x9088, { 6, 6, 2}},
{m68k_op_suba_32_d , 0xf1f8, 0x91c0, { 6, 6, 2}},
{m68k_op_suba_32_a , 0xf1f8, 0x91c8, { 6, 6, 2}},
{m68k_op_and_32_er_d , 0xf1f8, 0xc080, { 6, 6, 2}},
{m68k_op_add_32_er_d , 0xf1f8, 0xd080, { 6, 6, 2}},
{m68k_op_add_32_er_a , 0xf1f8, 0xd088, { 6, 6, 2}},
{m68k_op_adda_32_d , 0xf1f8, 0xd1c0, { 6, 6, 2}},
{m68k_op_adda_32_a , 0xf1f8, 0xd1c8, { 6, 6, 2}},
↓
{m68k_op_or_32_er_d , 0xf1f8, 0x8080, { 8, 6, 2}},
{m68k_op_sub_32_er_d , 0xf1f8, 0x9080, { 8, 6, 2}},
{m68k_op_sub_32_er_a , 0xf1f8, 0x9088, { 8, 6, 2}},
{m68k_op_suba_32_d , 0xf1f8, 0x91c0, { 8, 6, 2}},
{m68k_op_suba_32_a , 0xf1f8, 0x91c8, { 8, 6, 2}},
{m68k_op_and_32_er_d , 0xf1f8, 0xc080, { 8, 6, 2}},
{m68k_op_add_32_er_d , 0xf1f8, 0xd080, { 8, 6, 2}},
{m68k_op_add_32_er_a , 0xf1f8, 0xd088, { 8, 6, 2}},
{m68k_op_adda_32_d , 0xf1f8, 0xd1c0, { 8, 6, 2}},
{m68k_op_adda_32_a , 0xf1f8, 0xd1c8, { 8, 6, 2}},
こちらの算術系は逆に68000の方が速かった。
/* function mask match 000 010 020 */
{m68k_op_or_8_er_i , 0xf1ff, 0x803c, { 10, 8, 4}},
{m68k_op_or_16_er_i , 0xf1ff, 0x807c, { 10, 8, 4}},
{m68k_op_sub_8_er_i , 0xf1ff, 0x903c, { 10, 8, 4}},
{m68k_op_sub_16_er_i , 0xf1ff, 0x907c, { 10, 8, 4}},
{m68k_op_suba_16_i , 0xf1ff, 0x90fc, { 14, 12, 4}},
{m68k_op_and_8_er_i , 0xf1ff, 0xc03c, { 10, 8, 4}},
{m68k_op_and_16_er_i , 0xf1ff, 0xc07c, { 10, 8, 4}},
{m68k_op_add_8_er_i , 0xf1ff, 0xd03c, { 10, 8, 4}},
{m68k_op_add_16_er_i , 0xf1ff, 0xd07c, { 10, 8, 4}},
{m68k_op_adda_16_i , 0xf1ff, 0xd0fc, { 14, 12, 4}},
↓
{m68k_op_or_8_er_i , 0xf1ff, 0x803c, { 8, 8, 4}},
{m68k_op_or_16_er_i , 0xf1ff, 0x807c, { 8, 8, 4}},
{m68k_op_sub_8_er_i , 0xf1ff, 0x903c, { 8, 8, 4}},
{m68k_op_sub_16_er_i , 0xf1ff, 0x907c, { 8, 8, 4}},
{m68k_op_suba_16_i , 0xf1ff, 0x90fc, { 12, 12, 4}},
{m68k_op_and_8_er_i , 0xf1ff, 0xc03c, { 8, 8, 4}},
{m68k_op_and_16_er_i , 0xf1ff, 0xc07c, { 8, 8, 4}},
{m68k_op_add_8_er_i , 0xf1ff, 0xd03c, { 8, 8, 4}},
{m68k_op_add_16_er_i , 0xf1ff, 0xd07c, { 8, 8, 4}},
{m68k_op_adda_16_i , 0xf1ff, 0xd0fc, { 12, 12, 4}},
(注、初心者様:PEAは要するにMOVEだ。単なるモトローラのこだわりで名前が違う)
こちらのMOVE系(殆どMOVEMだが)も違う!
/* function mask match 000 010 020 */
{m68k_op_pea_32_ai , 0xfff8, 0x4850, { 10, 10, 9}},
{m68k_op_movem_16_re_ai , 0xfff8, 0x4890, { 12, 12, 8}},
{m68k_op_movem_16_re_di , 0xfff8, 0x48a8, { 16, 16, 9}},
{m68k_op_movem_16_re_ix , 0xfff8, 0x48b0, { 18, 18, 11}},
{m68k_op_movem_32_re_ai , 0xfff8, 0x48d0, { 16, 16, 8}},
{m68k_op_movem_32_re_di , 0xfff8, 0x48e8, { 20, 20, 9}},
{m68k_op_movem_32_re_ix , 0xfff8, 0x48f0, { 22, 22, 11}},
{m68k_op_movem_16_er_ai , 0xfff8, 0x4c90, { 16, 16, 12}},
{m68k_op_movem_16_er_di , 0xfff8, 0x4ca8, { 20, 20, 13}},
{m68k_op_movem_16_er_ix , 0xfff8, 0x4cb0, { 22, 22, 15}},
{m68k_op_movem_32_er_ai , 0xfff8, 0x4cd0, { 20, 20, 12}},
{m68k_op_movem_32_er_di , 0xfff8, 0x4ce8, { 24, 24, 13}},
{m68k_op_movem_32_er_ix , 0xfff8, 0x4cf0, { 26, 26, 15}},
↓
{m68k_op_pea_32_ai , 0xfff8, 0x4850, { 12, 12, 9}},
{m68k_op_movem_16_re_ai , 0xfff8, 0x4890, { 8, 8, 8}},
{m68k_op_movem_16_re_di , 0xfff8, 0x48a8, { 12, 12, 9}},
{m68k_op_movem_16_re_ix , 0xfff8, 0x48b0, { 14, 14, 11}},
{m68k_op_movem_32_re_ai , 0xfff8, 0x48d0, { 8, 8, 8}},
{m68k_op_movem_32_re_di , 0xfff8, 0x48e8, { 12, 12, 9}},
{m68k_op_movem_32_re_ix , 0xfff8, 0x48f0, { 14, 14, 11}},
{m68k_op_movem_16_er_ai , 0xfff8, 0x4c90, { 12, 12, 12}},
{m68k_op_movem_16_er_di , 0xfff8, 0x4ca8, { 16, 16, 13}},
{m68k_op_movem_16_er_ix , 0xfff8, 0x4cb0, { 18, 18, 15}},
{m68k_op_movem_32_er_ai , 0xfff8, 0x4cd0, { 12, 12, 12}},
{m68k_op_movem_32_er_di , 0xfff8, 0x4ce8, { 16, 16, 13}},
{m68k_op_movem_32_er_ix , 0xfff8, 0x4cf0, { 18, 18, 15}},
こちらのブランチ系も違う!
/* function mask match 000 010 020 */
{m68k_op_jmp_32_ix , 0xfff8, 0x4ef0, { 12, 12, 7}},
{m68k_op_dbf_16 , 0xfff8, 0x51c8, { 14, 14, 6}},
↓
{m68k_op_jmp_32_ix , 0xfff8, 0x4ef0, { 14, 14, 7}},
{m68k_op_dbf_16 , 0xfff8, 0x51c8, { 12, 12, 6}},
リラティブMOVEM系も違う!
/* function mask match 000 010 020 */
{m68k_op_movem_16_re_aw , 0xffff, 0x48b8, { 16, 16, 8}},
{m68k_op_movem_16_re_al , 0xffff, 0x48b9, { 20, 20, 8}},
{m68k_op_movem_32_re_aw , 0xffff, 0x48f8, { 20, 20, 8}},
{m68k_op_movem_32_re_al , 0xffff, 0x48f9, { 24, 24, 8}},
↓
{m68k_op_movem_16_re_aw , 0xffff, 0x48b8, { 12, 12, 8}},
{m68k_op_movem_16_re_al , 0xffff, 0x48b9, { 16, 16, 8}},
{m68k_op_movem_32_re_aw , 0xffff, 0x48f8, { 12, 12, 8}},
{m68k_op_movem_32_re_al , 0xffff, 0x48f9, { 16, 16, 8}},
MOVEM系も違う!
/* function mask match 000 010 020 */
{m68k_op_movem_16_er_aw , 0xffff, 0x4cb8, { 20, 20, 12}},
{m68k_op_movem_16_er_al , 0xffff, 0x4cb9, { 24, 24, 12}},
{m68k_op_movem_32_er_aw , 0xffff, 0x4cf8, { 24, 24, 12}},
{m68k_op_movem_32_er_al , 0xffff, 0x4cf9, { 28, 28, 12}},
{m68k_op_movem_32_er_pcdi , 0xffff, 0x4cfa, { 20, 20, 9}},
{m68k_op_movem_32_er_pcix , 0xffff, 0x4cfb, { 22, 22, 11}},
↓
{m68k_op_movem_16_er_aw , 0xffff, 0x4cb8, { 16, 16, 12}},
{m68k_op_movem_16_er_al , 0xffff, 0x4cb9, { 20, 20, 12}},
{m68k_op_movem_32_er_aw , 0xffff, 0x4cf8, { 16, 16, 12}},
{m68k_op_movem_32_er_al , 0xffff, 0x4cf9, { 20, 20, 12}},
{m68k_op_movem_32_er_pcdi , 0xffff, 0x4cfa, { 16, 16, 9}},
{m68k_op_movem_32_er_pcix , 0xffff, 0x4cfb, { 18, 18, 11}},
(シフト系の命令テーブル作成が)とにかく違う
while(ostruct->mask == 0xf1f8) /*演算系に限定*/
{
for(i = 0;i < 8;i++)
{
for(j = 0;j < 8;j++)
{
instr = ostruct->match | (i << 9) | j;
m68ki_instruction_jump_table[instr] = ostruct->opcode_handler;
for(k=0;kcycles[k];
(0xe000はシフト系なのでシフト系に限定)
廃止 if((instr & 0xf000) == 0xe000 && (!(instr & 0x20)))
廃止 m68ki_cycles[0][instr] = m68ki_cycles[1][instr] = ostruct->cycles[k] + ((((j-1)&7)+1)<<1);
}
}
ostruct++;
}
↓
「上に注記してある以外同じ」
while(ostruct->mask == 0xf1f8)
{
for(i = 0;i < 8;i++)
{
for(j = 0;j < 8;j++)
{
instr = ostruct->match | (i << 9) | j;
m68ki_instruction_jump_table[instr] = ostruct->opcode_handler;
for(k=0;kcycles[k];
}
}
ostruct++;
}
違いはクロックだけ、命令動作その他はまったく同じ、
だけどクロックがこれだけ違うのは致命的だぉ。
おひまひ。
本日一日限りのプロレス興行マニアック企画です。明日から普通に戻るといいなぁ。