?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1. ;Define ENABLE_FM to enable FM DACs
  2.  
  3. OPN_REG = 0xfffd
  4. OPN_DAT = 0xbffd
  5.  
  6.         macro opn_write_fm_reg chip_n
  7. ;e = register
  8. ;d = value
  9.         ld bc,OPN_REG
  10.         ifdef ENABLE_FM
  11.         ld a,chip_n+%11111000
  12.         else
  13.         ld a,chip_n+%11111100
  14.         endif
  15.         out (c),a
  16.         in a,(c)
  17.         rlca
  18.         jr c,$-3
  19.         out (c),e
  20.         in a,(c)
  21.         rlca
  22.         jr c,$-3
  23.         ld bc,OPN_DAT
  24.         out (c),d
  25.         endm
  26.  
  27. opnwritefm1
  28. ;e = register
  29. ;d = value
  30.         opn_write_fm_reg 0
  31.         ret
  32.  
  33. opnwritefm2
  34. ;e = register
  35. ;d = value
  36.         opn_write_fm_reg 1
  37.         ret
  38.  
  39.         macro opn_write_fm_regs incr,incd
  40. ;e = base register
  41. ;d = value
  42. ;l = count
  43. .loop
  44.         call opnwritefm1
  45.         call opnwritefm2
  46.         IF incr
  47.         inc e
  48.         ENDIF
  49.         IF incd
  50.         inc d
  51.         ENDIF
  52.         dec l
  53.         jr nz,.loop
  54.         endm
  55.  
  56. opninit
  57.         ld l,0xb4
  58.         ld de,0x0000
  59.         opn_write_fm_regs 1,0
  60. ;configure prescaler
  61.         ld de,0x002f
  62.         call opnwritefm1
  63.         call opnwritefm2
  64.         ld de,0x002d
  65.         call opnwritefm1
  66.         jp opnwritefm2
  67.  
  68. opnmute
  69. ;stop timers
  70.         ld de,0x3027
  71.         call opnwritefm1
  72.         call opnwritefm2
  73.         ld de,0x0027
  74.         call opnwritefm1
  75.         call opnwritefm2
  76. ;mute SSG
  77.         ld l,3
  78.         ld de,0x0008
  79.         opn_write_fm_regs 1,0
  80.         ld l,14
  81.         ld de,0x0000
  82.         opn_write_fm_regs 1,0
  83. ;max release rate
  84.         ld l,0x10
  85.         ld de,0x0f80
  86.         opn_write_fm_regs 1,0
  87. ;min total level
  88.         ld l,0x10
  89.         ld de,0x7f40
  90.         opn_write_fm_regs 1,0
  91. ;key off
  92.         ld l,0x04
  93.         ld de,0x0028
  94.         opn_write_fm_regs 0,1
  95. ;default tfm state
  96.         ld bc,OPN_REG
  97.         ld a,%11111111
  98.         out (c),a
  99.         ret
  100.