CDDA: Difference between revisions

From NeoGeo Development Wiki
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
Line 3: Line 3:
When loading a game (or even when the system boots ?), the "CDDA flag" byte at location $000107 in the [[68k]] program is checked. Bit 7 is masked off.
When loading a game (or even when the system boots ?), the "CDDA flag" byte at location $000107 in the [[68k]] program is checked. Bit 7 is masked off.


== Z80 RAM check method ==
==Z80 RAM check method==
This method was probably implemented to simplify the porting of small games to the NeoGeo CD. Games that didn't need in-game file loading only had to have their vector table and [[sound driver]] code replaced. The sound driver itself translates these commands to CDDA ones and drops them to a specific location in its own RAM, which is then read back and executed by the BIOS when using the [[BIOS calls|$C0044A call]].
This method was probably implemented to simplify the porting of small games to the NeoGeo CD. Games that didn't need in-game file loading only had to have their vector table and [[sound driver]] code replaced. The sound driver itself translates the regular music commands to CDDA command/tracl pairs and drops them to a specific location in its own RAM, which is then read back and executed by the BIOS when using the [[BIOS Calls|$C0044A call]].
 
In the sound drivers of CD games, a table is used to figure out if a received command concerns the YM2610 (mostly sound effects) or a CDDA track.


Putting the CDDA flag byte at $000107 to 0 or 1 enables this method and sets the Z80 return address to $FEF8.
Putting the CDDA flag byte at $000107 to 0 or 1 enables this method and sets the Z80 return address to $FEF8.
Setting the CDDA flag to any other values allows to choose what the return address will be (set with the 16bit value at $00013A).
Setting the CDDA flag to any other values allows to choose what the return address will be (set with the 16bit value at $00013A).


For example, [[Puzzled]] uses this method. The CDDA flag is set to 0 in the program header. The 68k sends the exact same "play music" Z80 commands as the MVS version of the game, the [[sound driver]] then converts them to CDDA ones and drops them at $FEF8.
For example, [[Puzzled]] uses this method. The CDDA flag is set to 0 in the program header. The 68k sends the exact same "play music" Z80 commands as the MVS version of the game, the sound driver then converts them to CDDA ones and drops them at $FEF8. Command $0743 gets translated to $0532 (intro music, track 32).


== Direct method ==
==Direct method==


BIOS call $C0056A. Command/track pair in D0. (05=read, track number in BCD format).
BIOS call $C0056A. Command/track pair in D0. (track number in BCD format).


==Commands==


*$00: Read track and loop
*$02: Pause ?
*$05: Read track


CDDA functionalities are disabled if ($00013A)=$0000. Set to $FFFF if using the default $FEF8 value.
CDDA functionalities are disabled if ($00013A)=$0000. Set to $FFFF if using the default $FEF8 value.


[[Category:Audio system]]
[[Category:Audio system]]

Revision as of 00:54, 14 February 2011

CDDA stands for CD Digital Audio.

When loading a game (or even when the system boots ?), the "CDDA flag" byte at location $000107 in the 68k program is checked. Bit 7 is masked off.

Z80 RAM check method

This method was probably implemented to simplify the porting of small games to the NeoGeo CD. Games that didn't need in-game file loading only had to have their vector table and sound driver code replaced. The sound driver itself translates the regular music commands to CDDA command/tracl pairs and drops them to a specific location in its own RAM, which is then read back and executed by the BIOS when using the $C0044A call.

In the sound drivers of CD games, a table is used to figure out if a received command concerns the YM2610 (mostly sound effects) or a CDDA track.

Putting the CDDA flag byte at $000107 to 0 or 1 enables this method and sets the Z80 return address to $FEF8. Setting the CDDA flag to any other values allows to choose what the return address will be (set with the 16bit value at $00013A).

For example, Puzzled uses this method. The CDDA flag is set to 0 in the program header. The 68k sends the exact same "play music" Z80 commands as the MVS version of the game, the sound driver then converts them to CDDA ones and drops them at $FEF8. Command $0743 gets translated to $0532 (intro music, track 32).

Direct method

BIOS call $C0056A. Command/track pair in D0. (track number in BCD format).

Commands

  • $00: Read track and loop
  • $02: Pause ?
  • $05: Read track

CDDA functionalities are disabled if ($00013A)=$0000. Set to $FFFF if using the default $FEF8 value.