Difference between revisions of "Sega Mega Drive/Quirks"

From Sega Retro

(→‎TAS instruction support: Games that use TAS and hence break on Genesis 3)
(→‎TAS instruction support: TAS works on registers, but not memory, on MD1 and MD2. Also, indicate that Gens and Gens/GS treat TAS to memory as no-op.)
Line 9: Line 9:
  
 
==TAS instruction support==
 
==TAS instruction support==
The MC68000 has an instruction, TAS (test-and-set), that is used for synchronizing multiple MC68000s in a multi-CPU system. The TAS instruction uses a different bus cycle than other instructions, and isn't supported by either the MD1 or MD2 hardware. However, the Majesco Genesis 3 does support TAS, which breaks a few games that incorrectly use the TAS instruction.
+
The MC68000 has an instruction, TAS (test-and-set), that is used for synchronizing multiple MC68000s in a multi-CPU system. The TAS instruction uses a different bus cycle than other instructions, and is effectively treated as a no-op for memory writes by both the MD1 or MD2 hardware. However, the Majesco Genesis 3 does support TAS, which breaks a few games that incorrectly use the TAS instruction. (The TAS instruction ends up setting the high bit of the destination memory operand.)
  
* Emulators that do not implement TAS: Probably all.
+
* Emulators that implement TAS as no-op for memory access: [[Gens]], [[Gens/GS]], [[Gens/GS II]], probably all others
* Emulators that do implement TAS: '''Unknown'''
+
* Emulators that implement TAS as write to memory: '''Unknown'''
  
 
Games that use the TAS instruction:
 
Games that use the TAS instruction:

Revision as of 00:53, 28 December 2010

This is a list of several MD hardware quirks that don't exactly fit in any other categories.

CLR on VDP data port

If the VDP is set to VRAM/CRAM/VSRAM Write, using the clr instruction on the VDP data port will result in a system crash: clr.w $C00000 This is because the clr instruction is treated as a Read-Modify-Write instruction on the MC68000 and MC68008 CPUs. The CPU first attempts to read the value located at $C00000, but the VDP's in data write mode, so the system hangs. This was fixed in the MC68010 CPU, which does not read the address before writing 0.

  • Emulators that implement this quirk: Unknown

TAS instruction support

The MC68000 has an instruction, TAS (test-and-set), that is used for synchronizing multiple MC68000s in a multi-CPU system. The TAS instruction uses a different bus cycle than other instructions, and is effectively treated as a no-op for memory writes by both the MD1 or MD2 hardware. However, the Majesco Genesis 3 does support TAS, which breaks a few games that incorrectly use the TAS instruction. (The TAS instruction ends up setting the high bit of the destination memory operand.)

  • Emulators that implement TAS as no-op for memory access: Gens, Gens/GS, Gens/GS II, probably all others
  • Emulators that implement TAS as write to memory: Unknown

Games that use the TAS instruction: