?login_element?

Subversion Repositories NedoOS

Rev

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

  1.         ;export _music_play
  2.         ;export _music_stop
  3.         ;export _sample_play
  4.         ;export _sfx_play
  5.         ;export _sfx_stop
  6.  
  7. _sample_play
  8. ;проигрывание сэмпла
  9. ;l=номер сэмпла
  10.        push ix
  11.         ld a,(curpg32khigh) ;ok
  12.         push af
  13.         ld a,SND_PAGE
  14.         call setpgc000
  15.         ld a,(SMP_COUNT|0xc000)
  16.         ld e,a
  17.         ld a,l
  18.         cp e
  19.         jr nc,.skip
  20.  
  21.         ld h,high (SMP_LIST|0xc000)
  22.         ld e,(hl)       ;lsb
  23.         inc h
  24.         ld a,(hl)       ;msb
  25.         or 0xc0
  26.         ld d,a
  27.         inc h
  28.         ld a,(hl)       ;page
  29.         cpl
  30.         inc h
  31.         ld h,(hl)       ;delay
  32.         ex de,hl ;hl=data
  33.         ld hx,d ;delay
  34.         ld e,a
  35.         ld d,tpages/256
  36. ;hl=data (0xc000+, 0x00=end), de=pagetable (0x0000+), hx=delay (18=11kHz, 7=22kHz, 1=44kHz)
  37.         OS_PLAYCOVOX
  38. .skip
  39.         pop af
  40.         SETPG32KHIGH
  41.        pop ix
  42.         ret
  43.  
  44. ;выключение звука на указанном чипе
  45. ;a=0 или 1
  46. reset_ay
  47. ;используется в _sfx_stop, _music_stop
  48.         ifdef TFM
  49.         push af
  50.          ;di
  51.         call turbo_off
  52.         ld a,SND_PAGE
  53.         call setpg4000
  54.         ld a,(TURBOFMON)
  55.         or a
  56.         call nz,#400f;tfmshut
  57.         ld a,CC_PAGE1
  58.         call setpg4000
  59.         pop af
  60.         call reset_ay_ay
  61.         ;call turbo_on
  62.          ;ei ;нельзя в прерывании!
  63.         ;ret
  64. turbo_on
  65.         ld a,%10101000 ;режим EGA с турбо
  66.         ld bc,#bd77
  67.         out (c),a
  68.         ret
  69. turbo_off
  70.         ld a,%10100000 ;режим EGA без турбо, так как в 14 МГц скорость нестабильна
  71.         ld bc,#bd77
  72.         out (c),a
  73.         ret
  74.         else
  75.          ;di
  76.         ;call reset_ay_ay
  77.          ;ei ;нельзя в прерывании!
  78.         ;ret
  79.         endif
  80.  
  81. reset_ay_ay
  82. ;в TFM нужно для глушения AY перед выводом эффектов
  83.         push af
  84.         ifdef TFM
  85.         or %11111000
  86.         ;or %11111010           ;no wait sync
  87.         else
  88.         or #fe
  89.         endif
  90.         ld bc,#fffd
  91.         out (c),a
  92.  
  93.         xor a
  94.         ld l,a
  95. .l0
  96.         ld b,#ff
  97.         ifdef TFM
  98.         call libstartup_waitstatus
  99.         endif
  100.         out (c),a
  101.         ifdef TFM
  102.         call libstartup_waitstatus
  103.         endif
  104.         ld b,#bf
  105.         out (c),l
  106.         inc a
  107.         cp 14
  108.         jr nz,.l0
  109.         pop af
  110.         ret
  111.  
  112. ;запуск звукового эффекта
  113. _sfx_play
  114.         push bc
  115.         ld a,SND_PAGE
  116.         call setpg4000
  117.         pop bc
  118.         ld a,b
  119.         call AFX_PLAY
  120.         ld a,CC_PAGE1
  121.         jp setpg4000
  122.  
  123. ;выключение музыки
  124. _music_stop
  125.         xor a
  126.         ld (musicPage),a
  127.         ;jp _di_reset_ay_ei        
  128. ;останов звуковых эффектов
  129. _sfx_stop
  130.         xor a
  131. _di_reset_ay_ei
  132.         di
  133.         call reset_ay
  134.         ei
  135.         ret
  136.  
  137. ;запуск музыки
  138. _music_play
  139.         push ix
  140.         push iy
  141.         push af
  142.         ld a,SND_PAGE
  143.         call setpg4000
  144.  
  145.         ld a,(MUS_COUNT)
  146.         ld l,a
  147.         pop af
  148.  
  149.         cp l
  150.         jr nc,.skip
  151.  
  152.         ld h,high MUS_LIST
  153.         ld l,a
  154.  
  155.         ld e,(hl)
  156.         inc h
  157.         ld d,(hl)
  158.         inc h
  159.         ld a,(hl)
  160.         ex de,hl
  161.         di
  162.         ld (musicPage),a
  163.         call setpg8000
  164.         ifdef TFM
  165.         ld a,(TURBOFMON)
  166.         or a
  167.         call nz,PT3_INIT
  168.         else
  169.         ld bc,#fffd
  170.         ld a,#fe
  171.         out (c),a
  172.         call PT3_INIT
  173.         endif
  174.         ei
  175.         ld a,CC_PAGE2
  176.         call setpg8000
  177.  
  178. .skip
  179.         pop iy
  180.         pop ix
  181.  
  182.         ld a,CC_PAGE1
  183.         jp setpg4000
  184.  
  185. initsfx
  186.         ;определение TS
  187.         ld bc,#fffd     ;чип 0
  188.         out (c),b
  189.         xor a           ;регистр 0
  190.         out (c),a
  191.         ld b,#bf        ;значение #bf
  192.         out (c),b
  193.         ld b,#ff        ;чип 1
  194.         ld a,#fe
  195.         out (c),a
  196.         xor a           ;регистр 0
  197.         out (c),a
  198.         ld b,#bf        ;значение 0
  199.         out (c),a
  200.         ld b,#ff        ;чип 0
  201.         out (c),b
  202.         xor a           ;регистр 0
  203.         out (c),a
  204.         in a,(c)
  205.         ld (turboSound),a
  206.         ld a,SND_PAGE
  207.         call setpg4000
  208.         xor a
  209.         call reset_ay_ay
  210.         inc a
  211.         call reset_ay_ay
  212.         ld hl,SFX_DATA
  213.         jp AFX_INIT
  214.