F-22 Interceptor oddness?

Ask anything your want about Megadrive/Genesis programming.

Moderator: BigEvilCorporation

Post Reply
andlabs
Very interested
Posts: 62
Joined: Sat Aug 08, 2009 4:44 pm

F-22 Interceptor oddness?

Post by andlabs » Thu Jan 26, 2012 11:01 pm

Overlord dumped a bunch of EU carts he had to check for alternate revisions, and his September 1991 copy of F-22 Interceptor didn't match any of our existing dumps (no-intro). It turns out that every other byte starting at $80000 is different — but all are identical. And it's the same situation in each ROM. I won't post the ROM links here, but

Overlord's

Code: Select all

0080000: ff80 ff1e ff00 ff00 ffb9 ff00 ffee ffff  ................
0080010: ff00 ff0f ff00 ff00 ff03 ff03 ff00 ff36  ...............6
0080020: ffb6 ff16 ff03 ff03 ff69 ff1e ff03 ff36  .........i.....6
0080030: ff99 ff26 ff01 ff33 ff8a ff2e ff00 ff66  ...&...3.......f
0080040: ff32 ff00 ff99 ff36 ff0f ff3c ff02 ff2e  .2.....6...<....
0080050: ff00 ff00 ff2a ff32 ff00 ff30 ff3c ff00  .....*.2...0.<..
0080060: ff63 ff3c ff00 ff96 ff3c ff0d ff03 ff09  .c.<.....<......
0080070: ffd5 ff30 ff03 ff00 ff63 ff03 ff00 ff96  ...0.....c......
0080080: ff7a ff00 ff99 ff43 ff5a ff84 ff00 ff64  .z.....C.Z.....d
0080090: ff12 ff01 ff69 ff99 ff8e ff02 ff36 ff6c  .....i.......6.l
00800a0: ff00 ff00 ff97 ff00 ff8f ff00 ff9d ff02  ................
00800b0: ff97 ff00 ffa5 ff02 ffad ff0f ffbd ff0c  ................
00800c0: ff82 ff00 ff84 ff57 ff00 ffd1 ff00 ff96  .......W........
00800d0: ff55 ff0f ff6b ff0c ff76 ff05 ff87 ff00  .U...k...v......
00800e0: ff00 fff0 ff8b ff01 ff82 ff01 ff0d ff1f  ................
00800f0: ff11 ff10 ff01 ff11 ff11 ff00 ff9f ff12  ................
no-intro US/EU September 1991

Code: Select all

0080000: 1a80 1a1e 1a00 1a00 1ab9 1a00 1aee 1aff  ................
0080010: 1a00 1a0f 1a00 1a00 1a03 1a03 1a00 1a36  ...............6
0080020: 1ab6 1a16 1a03 1a03 1a69 1a1e 1a03 1a36  .........i.....6
0080030: 1a99 1a26 1a01 1a33 1a8a 1a2e 1a00 1a66  ...&...3.......f
0080040: 1a32 1a00 1a99 1a36 1a0f 1a3c 1a02 1a2e  .2.....6...<....
0080050: 1a00 1a00 1a2a 1a32 1a00 1a30 1a3c 1a00  .....*.2...0.<..
0080060: 1a63 1a3c 1a00 1a96 1a3c 1a0d 1a03 1a09  .c.<.....<......
0080070: 1ad5 1a30 1a03 1a00 1a63 1a03 1a00 1a96  ...0.....c......
0080080: 1a7a 1a00 1a99 1a43 1a5a 1a84 1a00 1a64  .z.....C.Z.....d
0080090: 1a12 1a01 1a69 1a99 1a8e 1a02 1a36 1a6c  .....i.......6.l
00800a0: 1a00 1a00 1a97 1a00 1a8f 1a00 1a9d 1a02  ................
00800b0: 1a97 1a00 1aa5 1a02 1aad 1a0f 1abd 1a0c  ................
00800c0: 1a82 1a00 1a84 1a57 1a00 1ad1 1a00 1a96  .......W........
00800d0: 1a55 1a0f 1a6b 1a0c 1a76 1a05 1a87 1a00  .U...k...v......
00800e0: 1a00 1af0 1a8b 1a01 1a82 1a01 1a0d 1a1f  ................
00800f0: 1a11 1a10 1a01 1a11 1a11 1a00 1a9f 1a12  ................
no-intro US/EU June 1992

Code: Select all

0080000: 0080 001e 0000 0000 00b9 0000 00ee 00ff  ................
0080010: 0000 000f 0000 0000 0003 0003 0000 0036  ...............6
0080020: 00b6 0016 0003 0003 0069 001e 0003 0036  .........i.....6
0080030: 0099 0026 0001 0033 008a 002e 0000 0066  ...&...3.......f
0080040: 0032 0000 0099 0036 000f 003c 0002 002e  .2.....6...<....
0080050: 0000 0000 002a 0032 0000 0030 003c 0000  .....*.2...0.<..
0080060: 0063 003c 0000 0096 003c 000d 0003 0009  .c.<.....<......
0080070: 00d5 0030 0003 0000 0063 0003 0000 0096  ...0.....c......
0080080: 007a 0000 0099 0043 005a 0084 0000 0064  .z.....C.Z.....d
0080090: 0012 0001 0069 0099 008e 0002 0036 006c  .....i.......6.l
00800a0: 0000 0000 0097 0000 008f 0000 009d 0002  ................
00800b0: 0097 0000 00a5 0002 00ad 000f 00bd 000c  ................
00800c0: 0082 0000 0084 0057 0000 00d1 0000 0096  .......W........
00800d0: 0055 000f 006b 000c 0076 0005 0087 0000  .U...k...v......
00800e0: 0000 00f0 008b 0001 0082 0001 000d 001f  ................
00800f0: 0011 0010 0001 0011 0011 0000 009f 0012  ................
no-intro Japan omitted; this one is quite different (??)
no-intro US prototype

Code: Select all

0080000: 0080 001e 0000 0000 00b9 0000 00ee 00ff  ................
0080010: 0000 000f 0000 0000 0003 0003 0000 0036  ...............6
0080020: 00b6 0016 0003 0003 0069 001e 0003 0036  .........i.....6
0080030: 0099 0026 0001 0033 008a 002e 0000 0066  ...&...3.......f
0080040: 0032 0000 0099 0036 000f 003c 0002 002e  .2.....6...<....
0080050: 0000 0000 002a 0032 0000 0030 003c 0000  .....*.2...0.<..
0080060: 0063 003c 0000 0096 003c 000d 0003 0009  .c.<.....<......
0080070: 00d5 0030 0003 0000 0063 0003 0000 0096  ...0.....c......
0080080: 007a 0000 0099 0043 005a 0084 0000 0064  .z.....C.Z.....d
0080090: 0012 0001 0069 0099 008e 0002 0036 006c  .....i.......6.l
00800a0: 0000 0000 0097 0000 008f 0000 009d 0002  ................
00800b0: 0097 0000 00a5 0002 00ad 000f 00bd 000c  ................
00800c0: 0082 0000 0084 0057 0000 00d1 0000 0096  .......W........
00800d0: 0055 000f 006b 000c 0076 0005 0087 0000  .U...k...v......
00800e0: 0000 00f0 008b 0001 0082 0001 000d 001f  ................
00800f0: 0011 0010 0001 0011 0011 0000 009f 0012  ................
Before each of this is a $60FE (short branch to self).

The pattern is rather suspicious — could something be going on here? Could a ROM be wired differently? I've asked Overlord to take apart his cart and see pictures... he's not sure how to unscrew the cart :/ ("It's tri-wing but the middle is flat to the rest") Thanks.

Chilly Willy
Very interested
Posts: 2984
Joined: Fri Aug 17, 2007 9:33 pm

Post by Chilly Willy » Thu Jan 26, 2012 11:09 pm

That is acting like there's only a single byte on the bus. The other byte is different due to different models with different things on the bus, and/or different method of dumping the rom. In one case, the "empty" byte is pulled high, in another it is pulled low, and in the other, perhaps either floats, or shows the byte from the last bus operation in the empty byte.

Charles MacDonald
Very interested
Posts: 292
Joined: Sat Apr 21, 2007 1:14 am

Post by Charles MacDonald » Fri Jan 27, 2012 3:25 am

Chilly Willy wrote:That is acting like there's only a single byte on the bus. The other byte is different due to different models with different things on the bus, and/or different method of dumping the rom. In one case, the "empty" byte is pulled high, in another it is pulled low, and in the other, perhaps either floats, or shows the byte from the last bus operation in the empty byte.
This game is unusual, it does have a 16-bit ROM and a single 8-bit ROM. I forget exactly, but I think it was a 27c010 or 27c020. No other games do this AFAIK.

I can only imagine 8-bit ROMs were cheaper and this was a cost-cutting move instead of using two 16-bit ROMs or one larger capacity 16-bit ROM.

So the upper half of the ROM area is 8-bit (every other byte should be ignored) and is of a different size than the lower half.

As long as we have weird game trivia going, some versions of Afterburner on the Mark III (8-bit machine) use a 16-bit ROM too. Must have just been what they had at the time.

Nemesis
Very interested
Posts: 791
Joined: Wed Nov 07, 2007 1:09 am
Location: Sydney, Australia

Post by Nemesis » Fri Jan 27, 2012 9:08 am

That's a little odd, I didn't know of any Mega Drive games that used 8-bit memory like this. Seems like it would have been a pain to actually make effective use of such a setup. Obviously no code could exist in that upper region, so it must only contain data.

Another game which is a little weird is the rev01 version of Quackshot from the GoodGen set. The rev00 version of Quackshot is effectively a normal 4Mbit game, with ROM data from 0x0-0x80000. Rev01 of Quackshot is also a 4Mbit game, but it has two separate ROM regions, one mapped at 0x0-0x40000, and the second at 0x100000-0x140000. As for the memory range at 0x40000-0x100000, you might suspect it returns mirrored memory data from 0x0-0x40000, but you'd be wrong, they actually return mirrored data from the 0x100000-0x140000 region. It looks like due to the way the address lines are mapped, every 0x40000 byte region above the first region maps to the second ROM segment. The code itself is compiled to access the second memory segment at 0x100000 though, meaning if you want to make a linear ROM dump, there's an entire region of "dead space" from 0x40000-0x100000.

andlabs
Very interested
Posts: 62
Joined: Sat Aug 08, 2009 4:44 pm

Post by andlabs » Fri Jan 27, 2012 6:00 pm

That isn't only known; that also appears to have been intentional, since one of the compilations (possibly the Sega Ages one on the Saturn) also has its data split like that..

The 8-bit ROM mapping is what I was thinking of when I made the OP; I could take a look at a disassembly later and see what the game does :/ The Japanese version is weirder though — it appears to move the block of code that used to be before this area to AFTER it

Charles MacDonald
Very interested
Posts: 292
Joined: Sat Apr 21, 2007 1:14 am

Post by Charles MacDonald » Fri Jan 27, 2012 6:26 pm

andlabs wrote:That isn't only known; that also appears to have been intentional, since one of the compilations (possibly the Sega Ages one on the Saturn) also has its data split like that..
If the entire ROM image is stored in the disc, does that imply the Sega Ages games are emulated? Not reprogrammed?

Post Reply