Reading CDDA sound levels: Difference between revisions

From NeoGeo Development Wiki
Jump to navigation Jump to search
(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…")
 
mNo edit summary
(10 intermediate revisions by 3 users not shown)
Line 1: Line 1:
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 ?).
Registers {{Reg|REG_CDDALEFTL}} and {{Reg|REG_CDDARIGHTL}} 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 [[BIOSes|BIOS]] uses the following code to reverse the bits:
The CD2 [[System ROM]] uses the following code to reverse the bits:
<pre>
<syntaxhighlight>
;D1:Input
;D1:Input, D0:Output
;D0:Output
reverse16bits:
reverse16bits:
         moveq #16-1,d7
         moveq #16-1,d7
Line 14: Line 13:
zerobit:
zerobit:
dbf d7,rev
dbf d7,rev
</pre>
</syntaxhighlight>


And this to get its absolute value:
The CD2 system ROM reads both registers multiple times during each frame (every 16 raster lines, by using the [[68k interrupts|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).
<pre>
abs:
        tst    d1
bpl    notneg
not    d1
notneg:
</pre>


The CD2 BIOS reads both registers multiple times during each frame (by using the [[68k interrupts|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).
==Demo==
[[File:screencap_cddaviz.png|right]]
This does NOT work on current emulators.


[[http://www.youtube.com/watch?v=JP5VAypJIYk Youtube video of a standalone vu-meter]] (need source for this)
Uses:
*Raster line interrupts
*[[Sprites]] (shrink and displacement)
*[[Fix layer|Fix]] (frame counter)
*[[Palettes]]


Source for AS and iso image: [[File:Vumeter1.zip]]
[[http://www.youtube.com/watch?v=JP5VAypJIYk Youtube video]]
[[Category:Code]]
[[Category:Sound Code]]
[[Category:CD systems]]
[[Category:CD systems]]
[[Category:Code]]

Revision as of 18:00, 7 January 2016

Registers REG_CDDALEFTL and REG_CDDARIGHTL 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 System ROM 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

The CD2 system ROM reads both registers multiple times during each frame (every 16 raster lines, 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).

Demo

File:Screencap cddaviz.png

This does NOT work on current emulators.

Uses:

Source for AS and iso image: File:Vumeter1.zip

[Youtube video]