export _sfx_play
export _sfx_stop
export _music_play
export _music_stop
export _sample_play
;т√ъы■ўхэшх чтєър эр єърчрээюь ўшях
;a=0 шыш 1
reset_ay
;шёяюы№чєхЄё т _sfx_stop, _music_stop
ifdef TFM
push af
di
call turbo_off
ld a,SND_PAGE
call setSlot1
ld a,(TURBOFMON)
or a
call nz,#400f;tfmshut
ld a,CC_PAGE1
call setSlot1
pop af
call reset_ay_ay
call turbo_on
ei
ret
else
di
call reset_ay_ay
ei
ret
endif
turbo_on
ld a,%10101000 ;Ёхцшь EGA ё ЄєЁсю
ld bc,#bd77
out (c),a
ret
turbo_off
ld a,%10100000 ;Ёхцшь EGA схч ЄєЁсю, Єръ ъръ т 14 ╠├Ў ёъюЁюёЄ№ эхёЄрсшы№эр
ld bc,#bd77
out (c),a
ret
reset_ay_ay
;т TFM эєцэю фы уыє°хэш AY яхЁхф т√тюфюь ¤ЇЇхъЄют
push af
ifdef TFM
or %11111000
;or %11111010 ;no wait sync
else
or #fe
endif
ld bc,#fffd
out (c),a
xor a
ld l,a
.l0
ld b,#ff
ifdef TFM
call libstartup_waitstatus
endif
out (c),a
ifdef TFM
call libstartup_waitstatus
endif
ld b,#bf
out (c),l
inc a
cp 14
jr nz,.l0
pop af
ret
;чряєёъ чтєъютюую ¤ЇЇхъЄр
_sfx_play
push bc
ld a,SND_PAGE
call setSlot1
pop bc
ld a,b
call AFX_PLAY
ld a,CC_PAGE1
jp setSlot1
;юёЄрэют чтєъют√ї ¤ЇЇхъЄют
_sfx_stop
xor a
jp reset_ay
;чряєёъ ьєч√ъш
_music_play
push ix
push iy
push af
ld a,SND_PAGE
call setSlot1
ld a,(MUS_COUNT)
ld l,a
pop af
cp l
jr nc,.skip
ld h,high MUS_LIST
ld l,a
ld e,(hl)
inc h
ld d,(hl)
inc h
ld a,(hl)
ex de,hl
ifdef EVO
cpl
else
xor 127
endif
call setSlot2
di
ld (musicPage),a
ifdef TFM
ld a,(TURBOFMON)
or a
call nz,PT3_INIT
else
ld bc,#fffd
ld a,#fe
out (c),a
call PT3_INIT
endif
ei
ld a,CC_PAGE2
call setSlot2
.skip
pop iy
pop ix
ld a,CC_PAGE1
jp setSlot1
;т√ъы■ўхэшх ьєч√ъш
_music_stop
xor a
ld (musicPage),a
jp reset_ay
;яЁюшуЁ√трэшх ё¤ьяыр
;l=эюьхЁ ё¤ьяыр
_sample_play
;ld bc,MEM_SLOT0
;ld a,SND_PAGE
;out (c),a
;ld a,(SMP_COUNTfff)
;ld e,a
;ld a,l
;cp e
;jr nc,.skip
;ld h,high (SMP_LISTf00)
;ld e,(hl) ;lsb
;inc h
;ld d,(hl) ;msb
;inc h
;ld a,(hl) ;page
;inc h
;ld h,(hl) ;delay
;ex de,hl
;ifdef ATM
;xor 128
;endif
;out (c),a
;ld e,a
;di
;ld a,%10100000 ;Ёхцшь EGA схч ЄєЁсю, Єръ ъръ т 14 ╠├Ў ёъюЁюёЄ№ эхёЄрсшы№эр
;ld bc,#bd77
;out (c),a
;call turbo_off
;ld bc,MEM_SLOT0
.l0
;ld a,(hl) ;7
;out (#fb),a ;11
;or a ;4
;jr z,.done ;7/12
;inc hl ;6
;bit 6,h ;8
;jr nz,.page ;7/12
.delay
;ld a,d ;4
;dec a ;4
;jp nz,$-1 ;10
;jp .l0 ;10=78t яЁш d=1, °ру чрфхЁцъш 14 ЄръЄют
.page
;ld h,0
;dec e
; out (c),e
; jp .delay
.done
;ld a,%10101000 ;Ёхцшь EGA ё ЄєЁсю
;ld bc,#bd77
;out (c),a
;call turbo_on
;ei
.skip
;ld bc,MEM_SLOT0
;ld a,CC_PAGE0
;out (c),a
ret