Reading CDDA sound levels

From NeoGeo Development Wiki
Revision as of 05:31, 8 March 2011 by Furrtek (talk | contribs) (Created page with "Registers '''REG_CDDALEFTL''' ($FF0188) and '''REG_CDDARIGHTL''' ($FF01AA) hold the values of the currently streamed CD audio data, in a reversed 16bit 2's complement format suit…")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Registers REG_CDDALEFTL ($FF0188) and REG_CDDARIGHTL ($FF01AA) hold the values of the currently streamed CD audio data, in a reversed 16bit 2's complement format suited for the LC78815 DAC (Sample rate =~ 100kHz ?).

The CD2 BIOS uses the following code to reverse the bits:

;D1:Input
;D0:Output
reverse16bits:
        moveq	#16-1,d7
	moveq	#0,d0
rev:
	lsr	#1,d1
	bcc	zerobit
	bset	d7,d0
zerobit:
	dbf	d7,rev

And this to get its absolute value:

abs:
        tst    d1
	bpl    notneg
	not    d1
notneg:

The CD2 BIOS reads both registers multiple times during each frame (by using the raster interrupt) to get an average value. The displayed vu-meters use a double buffer to avoid getting updated with the average of only the first few register reads (those that were made before the vu-meters were actually drawn to the screen).

[Youtube video of a standalone vu-meter] (need source for this)