Sona 0.50 Source

Sona 0.50/src-z80/fm_init.z80

;****************************************************************************
; InitFmReg
; Sets up all YM2612 registers that need to be set up.
;----------------------------------------------------------------------------
; breaks ... all
;----------------------------------------------------------------------------
; to-do maybe? see if it can be optimized
;****************************************************************************

InitFmReg:
    ld      hl, FmInitList              ; Pointer to list of register values
    ld      b, 4                        ; Number of registers to set up
    
InitFmRegLoop:
    ld      a, (hl)                     ; Read register number
    ld      (ix+0), a                   ; Write it
    inc     hl
    
    push    hl                          ; Wait a bit
    pop     hl
    
    ld      a, (hl)                     ; Read register value
    ld      (ix+1), a                   ; Write it
    inc     hl
    
    push    hl                          ; Wait a bit
    pop     hl
    push    hl
    pop     hl
    
    djnz    InitFmRegLoop               ; Onto next register
    ret                                 ; End of subroutine

;----------------------------------------------------------------------------

FmInitList:
    db      YMREG_TIMERA_HI,    TIMERA_DEFAULT>>2   ; Timer A rate (~10650Hz)
    db      YMREG_TIMERA_LO,    TIMERA_DEFAULT&3    ;   "   "  "
    db      YMREG_TIMERB,       TIMERB_DEFAULT      ; Timer B rate (~120Hz)
    db      YMREG_MODE,         YMACK_TIMERAB       ; Make the timers run