?login_element?

Subversion Repositories NedoOS

Rev

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