David Haywood's Homepage
MAME work and other stuff
July 11, 2017 Haze Categories: General News. 6 Comments on The Super Real Darwin Award

Super Real Darwin is a game that was released by Data East in 1987


Super Real Darwin Super Real Darwin

It has been emulated in MAME for a VERY long time. Imperfectly.

If we look at the MAME history of the driver, this is an important entry.

“0.35b12: Boss order in Super Real Darwin should be correct [Jose Miguel Morales Farreras]. Added 2nd player.”

MAME 0.35b12 was released on 1 May 1999, that was the last development on the driver that had any real impact on the gameplay.

The change listed above, made in 1999 is the source of the following piece of code in the simulation of the i8751 protection device that Super Real Darwin makes use of. Prior to this the boss order was *completely* wrong.


The table below is hopefully correct thanks to Jose Miguel Morales Farreras,
but Boss #6 is uncomfirmed as correct.
*/
if (m_i8751_value == 0x8000) m_i8751_return = 0xf580 + 0; /* Boss #1: Snake + Bees */
if (m_i8751_value == 0x8001) m_i8751_return = 0xf580 + 30; /* Boss #2: 4 Corners */
if (m_i8751_value == 0x8002) m_i8751_return = 0xf580 + 26; /* Boss #3: Clock */
if (m_i8751_value == 0x8003) m_i8751_return = 0xf580 + 2; /* Boss #4: Pyramid */
if (m_i8751_value == 0x8004) m_i8751_return = 0xf580 + 6; /* Boss #5: Snake + Head Combo */
if (m_i8751_value == 0x8005) m_i8751_return = 0xf580 + 24; /* Boss #6: LED Panels */
if (m_i8751_value == 0x8006) m_i8751_return = 0xf580 + 28; /* Boss #7: Dragon */
if (m_i8751_value == 0x8007) m_i8751_return = 0xf580 + 32; /* Boss #8: Teleport */
if (m_i8751_value == 0x8008) m_i8751_return = 0xf580 + 38; /* Boss #9: Octopus (Pincer) */
if (m_i8751_value == 0x8009) m_i8751_return = 0xf580 + 40; /* Boss #10: Bird */
if (m_i8751_value == 0x800a) m_i8751_return = 0xf580 + 42; /* End Game(bad address?) */

A couple of months ago Caps0ff dumped the actual i8751 MCU from Super Real Darwin, and today I studied that dump, and hooked it up.

Maybe it shouldn’t come as too much of a surprise that the above piece of simulation code is incorrect, and has been incorrect since 1st May 1999, over 18 years ago.

The value in the table for Boss 6 is actually incorrect as the comment speculates is possible. The code for handling MCU command 0x80xx in the actual MCU dump is as follows, you can see where I’ve commented the different value in the actual code compared to the existing simulation.


-- handling 0x80 (boss selection)
01E7: 75 D0 00 mov psw,#$00
01EA: 11 E7 acall $00E7
01EC: 54 0F anl a,#$0F
01EE: C3 clr c
01EF: 33 rlc a
01F0: FA mov r2,a
01F1: 24 11 add a,#$11
01F3: 83 movc a,@a+pc // 0x1f4 + 0x11 (Table below)
01F4: F8 mov r0,a
01F5: 0A inc r2
01F6: EA mov a,r2
01F7: 24 0B add a,#$0B
01F9: 83 movc a,@a+pc // 0x1fa + 0x0b (Table below)
01FA: F9 mov r1,a
01FB: 89 80 mov p0,r1
01FD: 31 00 acall $0100
01FF: 88 80 mov p0,r0
0201: 11 F9 acall $00F9
0203: 01 D2 ajmp $00D2

-- protection table
0205: F5 80 mov p0,a /* Boss #1: Snake + Bees */
0207: F5 9E mov $9E,a /* Boss #2: 4 Corners */
0209: F5 9A mov $9A,a /* Boss #3: Clock */
020B: F5 82 mov dpl,a /* Boss #4: Pyramid */
020D: F5 86 mov $86,a /* Boss #5: Snake + Head Combo */
020F: F5 8E mov $8E,a /* Boss #6 - F598 is used in the simulation! */
0211: F5 9C mov $9C,a /* Boss #7: Dragon */
0213: F5 A0 mov p2,a /* Boss #8: Teleport */
0215: F5 A6 mov $A6,a /* Boss #9: Octopus (Pincer) */
0217: F5 A8 mov ie,a /* Boss #10: Bird */
0219: 00 nop
021A: 00 nop

Boss 6 has 2 forms, after you destroy the first form / pattern it evolves into the 2nd form. The value in the table above puts the boss directly in the 2nd form which causes issues with how it appears, priority, and of course makes it a lot easier than it should be as you only have to destroy the 2nd form. Using the real MCU dump (or a corrected value obtained from it) gives the correct boss form / order.

I’ve recorded 2 videos of this. First is the old, buggy behavior. (Cheats are enabled to make demonstration easier, so nothing can kill me)



The 2nd video is the fixed behavior, which should be how things are as of the next MAME release.



I’ve had to bump the interleave in the driver significantly to stop it missing protection commands from time to time and crashing (hopefully what I’ve done is good enough) but the actual data from the MCU is now 100% correct to the original as we’re running the actual MCU code rather than a simulation. This is just one of many reasons why getting certain MCUs to people who can dump them is important, you never quite know if things are accurate until you’ve studied the real code.

6 Comments

You can follow any responses to this entry through the RSS 2.0 feed.

If the perfection is the game,Haze is the master of it!
I’ve never mention this imperfection,when i play it!
Just curiosity…
A few other games I played,are marked as imperfect,like little robin,or even as non working,like birdie try,but they looks great to me!
And a few others like laser quiz Italy,are marked as working,but they are not now,but they worked in older version (0.153 the specific one)
Is there any reason for this?
nikolas1960

ace, nice work! i have always really enjoyed playing this game

Nice one Haze!! I’m pretty sure that Jaleco’s Saint Dragon suffers from the same disease. In that game, the start screen after you insert a coin is incorrect and I’m quite sure that the 3rd level boss should appear everytime, whether you destroy some structures or not.

I’m not really sure, the Jaleco Megasystem 1 games only have protection in the loosest possible sense, I’m not sure there’s anything in there that could influence boss behavior. I’d still put my bets on it being conditional, or some other imperfectly emulated part of the hardware.

Of course, if the protection chips used on them ever do get decapped they might tell us otherwise, but it would be a strange thing to protect when nothing else seems to be.

>> marked as imperfect,like little robin

The sound hardware isn’t properly understood, and it’s taken overclocking the TMS to fix the graphics on the map screen (which only happened in a recent release) so I’d say imperfect was accurate

> even as non working,like birdie try,but they looks great to me!

The MCU controls movement of the ball, the shot power, direction, wind effect etc. is in no way correct at the moment. This is a serious gameplay issue, so it’s marked as NOT WORKING. This is one I’d really like to see decapped / read out.

> And a few others like laser quiz Italy,are marked as working,but they are not now,but they worked in older version (0.153 the specific one)
> Is there any reason for this?

It was recently demoted to NOT WORKING as we decided it never really worked properly and shouldn’t have been promoted in the first place, even in 0.153 it’s not exactly stable / correct and relies on a lot of hacks to do what it does.

Thank you Haze!
I understand what is imperfect clearly,and why a programmer like you,is not satisfied until everything works fine!
But birdie try can also be marked aw imperfect,or working with problems,but no working means nothing happens,not loads est…!
Well as a user i am happy,i got back my memories with all of these games,anyway some games even they works perfectly ,are very hard now for me,i am getting older,my reflex and patience are down,so they all looks good to me!
Thanks again!

Leave a Reply

Your email address will not be published. Required fields are marked *

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close