?login_element?

Subversion Repositories NedoOS

Rev

Rev 1797 | Blame | Compare with Previous | Last modification | View Log | Download

  1.         include "moonsound.asm"
  2.  
  3. opl4writefm1
  4. ;e = register
  5. ;d = value
  6.         opl4_wait
  7.         ld a,e
  8.         out (MOON_REG1),a
  9.         opl4_wait
  10.         ld a,d
  11.         out (MOON_DAT1),a
  12.         ret
  13.  
  14. opl4writefm2
  15. ;e = register
  16. ;d = value
  17.         opl4_wait
  18.         ld a,e
  19.         out (MOON_REG2),a
  20.         opl4_wait
  21.         ld a,d
  22.         out (MOON_DAT2),a
  23.         ret
  24.  
  25. opl4writewave
  26. ;e = register
  27. ;d = value
  28.         opl4_wait
  29.         ld a,e
  30.         out (MOON_WREG),a
  31.         opl4_wait
  32.         ld a,d
  33.         out (MOON_WDAT),a
  34.         ret
  35.  
  36. opl4readwave
  37. ;e = register
  38.         opl4_wait
  39.         ld a,e
  40.         out (MOON_WREG),a
  41.         opl4_wait
  42.         in a,(MOON_WDAT)
  43.         ret
  44.  
  45.         macro opl4_write_fm_regs
  46. ;e = base register
  47. ;d = value
  48. ;b = count
  49. .loop
  50.         call opl4writefm1
  51.         call opl4writefm2
  52.         inc e
  53.         djnz .loop
  54.         endm
  55.  
  56.         macro opl4_write_wave_regs
  57. ;e = base register
  58. ;d = value
  59. ;b = count
  60. .loop
  61.         call opl4writewave
  62.         inc e
  63.         djnz .loop
  64.         endm
  65.  
  66. opl4init
  67.         ld de,0x0305
  68.         call opl4writefm2
  69.         ld b,0xda
  70.         ld de,0x0020
  71.         opl4_write_wave_regs
  72.         ld de,0x1bf8
  73.         call opl4writewave
  74.         ld de,0x1002
  75.         call opl4writewave
  76.         ld b,0xd6
  77.         ld de,0x0020
  78.         opl4_write_fm_regs
  79.         ld de,0x0001
  80.         call opl4writefm1
  81.         ld de,0x0008
  82.         call opl4writefm1
  83.         ld de,0x0004
  84.         jp opl4writefm2
  85.  
  86. opl4mute
  87.         ld de,0x8004
  88.         call opl4writefm1
  89.         ld de,0x0004
  90.         call opl4writefm1 ;stop timers
  91.         ld de,0x0004
  92.         call opl4writefm2
  93.         ld de,0x00bd
  94.         call opl4writefm1 ;rhythm off
  95.         ld b,0x16
  96.         ld de,0x0f80
  97.         opl4_write_fm_regs ;max release rate
  98.         ld b,0x16
  99.         ld de,0x3f40
  100.         opl4_write_fm_regs ;min total level
  101.         ld b,0x09
  102.         ld de,0x00a0
  103.         opl4_write_fm_regs ;frequency 0
  104.         ld b,0x09
  105.         ld de,0x00b0
  106.         opl4_write_fm_regs ;key off
  107.         ld b,0x18
  108.         ld de,0x4068
  109.         opl4_write_wave_regs ;key off, damp
  110.         ld de,0x0005
  111.         jp opl4writefm2
  112.  
  113. opl4setmemoryaddress
  114. ;dhl = memory address
  115.         ld e,0x03
  116.         call opl4writewave
  117.         ld d,h
  118.         inc e
  119.         call opl4writewave
  120.         inc e
  121.         ld d,l
  122.         jp opl4writewave
  123.  
  124. opl4readmemory
  125. ;bc = byte count
  126. ;dhl = memory address
  127. ;ix = buffer
  128.         call opl4setmemoryaddress
  129.         ld de,0x1102
  130.         call opl4writewave
  131.         opl4_wait
  132.         ld a,6
  133.         out (MOON_WREG),a
  134.         ld de,ix
  135.         ld a,c
  136.         dec bc
  137.         inc b
  138.         ld c,b
  139.         ld b,a
  140. .readloop
  141.         opl4_wait
  142.         in a,(MOON_WDAT)
  143.         ld (de),a
  144.         inc de
  145.         djnz .readloop
  146.         dec c
  147.         jr nz,.readloop
  148.         ld de,0x1002
  149.         jp opl4writewave
  150.  
  151. opl4writememory
  152. ;bc = number of bytes
  153. ;dhl = memory address
  154. ;ix = buffer
  155.         call opl4setmemoryaddress
  156.         ld de,0x1102
  157.         call opl4writewave
  158.         opl4_wait
  159.         ld a,6
  160.         out (MOON_WREG),a
  161.         ld de,ix
  162.         ld a,c
  163.         dec bc
  164.         inc b
  165.         ld c,b
  166.         ld b,a
  167. .writeloop
  168.         opl4_wait
  169.         ld a,(de)
  170.         out (MOON_WDAT),a
  171.         inc de
  172.         djnz .writeloop
  173.         dec c
  174.         jr nz,.writeloop
  175.         ld de,0x1002
  176.         jp opl4writewave
  177.