Subversion Repositories NedoOS

Rev

Rev 1992 | 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. opl4stoptimers
  87.         ld de,0x8004
  88.         call opl4writefm1
  89.         ld de,0x0004
  90.         jp opl4writefm1
  91.  
  92. opl4mute
  93.         call opl4stoptimers
  94.         ld de,0x0004
  95.         call opl4writefm2
  96.         ld de,0x00bd
  97.         call opl4writefm1 ;rhythm off
  98.         ld b,0x16
  99.         ld de,0x0f80
  100.         opl4_write_fm_regs ;max release rate
  101.         ld b,0x16
  102.         ld de,0x3f40
  103.         opl4_write_fm_regs ;min total level
  104.         ld b,0x09
  105.         ld de,0x00a0
  106.         opl4_write_fm_regs ;frequency 0
  107.         ld b,0x09
  108.         ld de,0x00b0
  109.         opl4_write_fm_regs ;key off
  110.         ld b,0x18
  111.         ld de,0x4068
  112.         opl4_write_wave_regs ;key off, damp
  113.         ld de,0x0005
  114.         jp opl4writefm2
  115.  
  116. opl4setmemoryaddress
  117. ;dhl = memory address
  118.         ld e,0x03
  119.         call opl4writewave
  120.         ld d,h
  121.         inc e
  122.         call opl4writewave
  123.         inc e
  124.         ld d,l
  125.         jp opl4writewave
  126.  
  127. opl4readmemory
  128. ;bc = byte count
  129. ;dhl = memory address
  130. ;ix = buffer
  131.         call opl4setmemoryaddress
  132.         ld de,0x1102
  133.         call opl4writewave
  134.         opl4_wait
  135.         ld a,6
  136.         out (MOON_WREG),a
  137.         ld de,ix
  138.         ld a,c
  139.         dec bc
  140.         inc b
  141.         ld c,b
  142.         ld b,a
  143. .readloop
  144.         opl4_wait
  145.         in a,(MOON_WDAT)
  146.         ld (de),a
  147.         inc de
  148.         djnz .readloop
  149.         dec c
  150.         jr nz,.readloop
  151.         ld de,0x1002
  152.         jp opl4writewave
  153.  
  154. opl4writememory
  155. ;bc = number of bytes
  156. ;dhl = memory address
  157. ;ix = buffer
  158.         call opl4setmemoryaddress
  159.         ld de,0x1102
  160.         call opl4writewave
  161.         opl4_wait
  162.         ld a,6
  163.         out (MOON_WREG),a
  164.         ld de,ix
  165.         ld a,c
  166.         dec bc
  167.         inc b
  168.         ld c,b
  169.         ld b,a
  170. .writeloop
  171.         opl4_wait
  172.         ld a,(de)
  173.         out (MOON_WDAT),a
  174.         inc de
  175.         djnz .writeloop
  176.         dec c
  177.         jr nz,.writeloop
  178.         ld de,0x1002
  179.         jp opl4writewave
  180.