Subversion Repositories NedoOS

Rev

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

  1.         macro opn_write_music_only write_register
  2.         ld a,e
  3.         cp 0x30
  4.         jp nc,write_register
  5.         cp 0x0e
  6.         jp c,write_register
  7. ;block both timers and the prescaler (the TFM prescaler is fairly unique)
  8.         cp 0x28
  9.         jp z,write_register
  10.         endm
  11.  
  12. opnwritemusiconlyfm1
  13. ;skips writes to control registers
  14. ;e = register
  15. ;d = value
  16.         opn_write_music_only opnwritefm1
  17.         ret
  18.  
  19. opnwritemusiconlyfm2
  20. ;skips writes to control registers
  21. ;e = register
  22. ;d = value
  23.         opn_write_music_only opnwritefm2
  24.         ret
  25.  
  26. vgmopninit
  27. .callturnturbooff
  28.         call turnturbooff
  29.         jp opninit
  30.  
  31. vgmopnmute
  32.         call opnmute
  33.         jp turnturboon
  34.  
  35. opnsettimer
  36. ;a = rate in hz
  37. ;output: zf=1 if timer is set, zf=0 otherwise
  38.         cp 14
  39.         ret c
  40.         push af
  41.         call settimerstep
  42.         pop af
  43.         ld de,0x07a1
  44.         ld hl,0x2000
  45.         exx
  46.         ld c,a
  47.         ld b,0
  48.         cp 56
  49.         jr c,.usetimerb
  50.         ld de,2633
  51.         call uintmul16
  52.         exx
  53.         call uintdiv32
  54.         xor a
  55.         sub l
  56.         ld l,a
  57.         sbc a,h
  58.         sub l
  59.         ld d,l
  60. ;high 8 bits
  61.         rrca : rr d
  62.         rrca : rr d
  63.         ld e,0x24
  64.         call opnwritefm1
  65. ;low 2 bits
  66.         ld d,l
  67.         inc e
  68.         call opnwritefm1
  69.         ld de,0x1527
  70.         call opnwritefm1
  71.         ld hl,opnwaittimera
  72.         ld (waittimercallback),hl
  73.         xor a
  74.         ret
  75. .usetimerb
  76.         ld de,42130
  77.         call uintmul16
  78.         exx
  79.         call uintdiv32
  80.         xor a
  81.         sub l
  82.         ld d,a
  83.         ld e,0x26
  84.         call opnwritefm1
  85.         ld de,0x2a27
  86.         call opnwritefm1
  87.         ld hl,opnwaittimerb
  88.         ld (waittimercallback),hl
  89.         xor a
  90.         ret
  91.  
  92. opnwaittimera
  93.         ld bc,OPN_REG
  94.         ld a,%11111000
  95.         out (c),a
  96.         in a,(c)
  97.         and 1
  98.         jr z,$-4
  99.         ld de,0x1527
  100.         jp opnwritefm1
  101.  
  102. opnwaittimerb
  103.         ld bc,OPN_REG
  104.         ld a,%11111000
  105.         out (c),a
  106.         in a,(c)
  107.         and 2
  108.         jr z,$-4
  109.         ld de,0x2a27
  110.         jp opnwritefm1
  111.