[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Single tones on the Mockingboard?



Replying to myself.

I figured out the data the 8910 wants (using the Mockingboard exerciser), but I seem not to be implementing the code right.

Here's my code, it's supposed to initialize the board when entered from 36864/$9000 and then beep the 8910 when entered from 36867/$9003. The second call just does a short pause - no sound. :<

-uso.

;these values were determined empirically with the MockingBoard exerciser:
;
;Tone Control Fine     80($50) (register 0/2/4)
;Tone Control Coarse    0      (register 1/3/5)
;Noise Period           0      (register 6)
;Enable Mask           62($3E) (register 7)
;Amplitude             15($0F) (register 8/9/A)
;Envelope Fine          0      (register B)
;Envelope Coarse        0      (register C)
;Envelope Shape         0      (register D)

ADR6522    =        $C400

          .org      $9000
signon:   jmp       init
entry:    ldx       #$00
          ldy       #$80
          jsr       push
          ldx       #$02
          jsr       push
          ldx       #$04
          jsr       push
          ldx       #$07
          ldy       #$3E
          jsr       push
          ldy       #$0F
          inx
          jsr       push
          inx
          jsr       push
          inx
          jsr       push
          ldy       #$00
          ldx       #$01
          jsr       push
          ldx       #$03
          jsr       push
          ldx       #$05
          jsr       push
          inx
          jsr       push
          ldx       #$0B
          jsr       push
          inx
          jsr       push
          inx
          jsr       push
          lda       #$00
          tax
          tay
@1:       inx
          bne       @1
          iny
          bne       @1
@2:       jsr       push
          inx
          cpx       #$B
          bcc       @2
          rts

push:     sty       ADR6522+1
          jsr       setreg
          stx       ADR6522+1
          jsr       setdata
          rts
init:     lda       #$FF
          sta       ADR6522+2
          sta       ADR6522+3
reset:    lda       #$00
          sta       ADR6522
          beq       common
setreg:   lda       #$07
          sta       ADR6522
          bne       common
setdata:  lda       #$06
          sta       ADR6522
common:   lda       #$04
          sta       ADR6522
          rts