Orchestra 90 CC Stereo Music Synthesizer

Radio Shack Catalog Number 26–3143. The Orchestra–90 CC is a stereo 8-bit audio player for the Color Computer. It works by mapping two addresses in the Coco’s address space to two 8-bit DACs. $FF7A is for left, and $FF7B is for the right. This is the first time I have been able to use this cart, never mind program it! So far, it’s pretty easy to program.

 

You would normally use the orch–90 for creating music scores using the built in software, but you could also plug it into an MPI and use it for a stereo sound card. The sound quality is much better then the Coco’s built in 6-bit DAC.

I created the following sound program which plays on the left and right speakers. I did it as a quick Hello World for the orch–90.

####################################################################################################
# Test the Orch-90 cart by outputting a sound on each channel
# http://8BitCoder.com
####################################################################################################

# lwasm -9 -b -o sndorch.bin sndorch.asm && writecocofile --verbose sound.dsk sndorch.bin && coco3 `pwd`/sound.dsk sndorch

SPEAKER_LEFT    equ     $FF7A
SPEAKER_RIGHT   equ     $FF7B

                org     $3F00

start           ldx     #msg            point to our message
lee             lda     ,x+             get current ASCII character
                beq     x@              exit if its the NULL-terminator
                jsr     [40962]         print the character using stdout hook
                bra     lee             keep printing
x@              jsr     init

                ldd     #SPEAKER_LEFT
                jsr     makesnd
                ldd     #SPEAKER_RIGHT
                jsr     makesnd

                rts

msg             fcc     "MAKING A SOUND"
                fcb     13,0

####################################################################################################
makesnd
                ldx     #chan2
                std     1,x
                ldx     #chan1
                std     1,x
                jsr     maket
                rts

####################################################################################################
maket           
maket_loop2     ldx     #tonemap
maket_loop1     

                * sound off
                lda     #0
chan2           sta     $FF7B
                bsr     maket_delay

                * sound on
                lda     ,x+
chan1           sta     $FF7B
                bsr     maket_delay

                cmpx    #tonemapend
                bne     maket_loop1

                rts

maket_delay     ldy     #$1F4           # how long of a delay
maket_wait      leay    -1,y
                bne     maket_wait      
                rts

tonemap         fcb     10,20,30,40,50,60,70,80,90,100,130,160,190,220,255,255,220,190,160,130,100,90,80,70,60,50,40,30,20,10
tonemapend      fcb     0


####################################################################################################
init            
                rts                     ; do nothing

                ldx     #$ffd9          ; high speed on coco3
                sta     ,x
                rts

####################################################################################################

                end     start