Rev 835 |
Blame |
Compare with Previous |
Last modification |
View Log
| Download
| RSS feed
;export _music_play
;export _music_stop
;export _sample_play
;export _sfx_play
;export _sfx_stop
_sample_play
;╨┐╤А╨╛╨╕╨│╤А╤Л╨▓╨░╨╜╨╕╨╡ ╤Б╤Н╨╝╨┐╨╗╨░
;l=╨╜╨╛╨╝╨╡╤А ╤Б╤Н╨╝╨┐╨╗╨░
push ix
ld a,(curpg32khigh) ;ok
push af
ld a,SND_PAGE
call setpgc000
ld a,(SMP_COUNT|0xc000)
ld e,a
ld a,l
cp e
jr nc,.skip
ld h,high (SMP_LIST|0xc000)
ld e,(hl) ;lsb
inc h
ld a,(hl) ;msb
or 0xc0
ld d,a
inc h
ld a,(hl) ;page
cpl
inc h
ld h,(hl) ;delay
ex de,hl ;hl=data
ld hx,d ;delay
ld e,a
ld d,tpages/256
;hl=data (0xc000+, 0x00=end), de=pagetable (0x0000+), hx=delay (18=11kHz, 7=22kHz, 1=44kHz)
OS_PLAYCOVOX
.skip
pop af
SETPG32KHIGH
pop ix
ret
;╨▓╤Л╨║╨╗╤О╤З╨╡╨╜╨╕╨╡ ╨╖╨▓╤Г╨║╨░ ╨╜╨░ ╤Г╨║╨░╨╖╨░╨╜╨╜╨╛╨╝ ╤З╨╕╨┐╨╡
;a=0 ╨╕╨╗╨╕ 1
reset_ay
;╨╕╤Б╨┐╨╛╨╗╤М╨╖╤Г╨╡╤В╤Б╤П ╨▓ _sfx_stop, _music_stop
ifdef TFM
push af
;di
call turbo_off
ld a,SND_PAGE
call setpg4000
ld a,(TURBOFMON)
or a
call nz,#400f;tfmshut
ld a,CC_PAGE1
call setpg4000
pop af
call reset_ay_ay
;call turbo_on
;ei ;╨╜╨╡╨╗╤М╨╖╤П ╨▓ ╨┐╤А╨╡╤А╤Л╨▓╨░╨╜╨╕╨╕!
;ret
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
else
;di
;call reset_ay_ay
;ei ;╨╜╨╡╨╗╤М╨╖╤П ╨▓ ╨┐╤А╨╡╤А╤Л╨▓╨░╨╜╨╕╨╕!
;ret
endif
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 setpg4000
pop bc
ld a,b
call AFX_PLAY
ld a,CC_PAGE1
jp setpg4000
;╨▓╤Л╨║╨╗╤О╤З╨╡╨╜╨╕╨╡ ╨╝╤Г╨╖╤Л╨║╨╕
_music_stop
xor a
ld (musicPage),a
;jp _di_reset_ay_ei
;╨╛╤Б╤В╨░╨╜╨╛╨▓ ╨╖╨▓╤Г╨║╨╛╨▓╤Л╤Е ╤Н╤Д╤Д╨╡╨║╤В╨╛╨▓
_sfx_stop
xor a
_di_reset_ay_ei
di
call reset_ay
ei
ret
;╨╖╨░╨┐╤Г╤Б╨║ ╨╝╤Г╨╖╤Л╨║╨╕
_music_play
push ix
push iy
push af
ld a,SND_PAGE
call setpg4000
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
di
ld (musicPage),a
call setpg8000
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 setpg8000
.skip
pop iy
pop ix
ld a,CC_PAGE1
jp setpg4000
initsfx
;╨╛╨┐╤А╨╡╨┤╨╡╨╗╨╡╨╜╨╕╨╡ TS
ld bc,#fffd ;╤З╨╕╨┐ 0
out (c),b
xor a ;╤А╨╡╨│╨╕╤Б╤В╤А 0
out (c),a
ld b,#bf ;╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡ #bf
out (c),b
ld b,#ff ;╤З╨╕╨┐ 1
ld a,#fe
out (c),a
xor a ;╤А╨╡╨│╨╕╤Б╤В╤А 0
out (c),a
ld b,#bf ;╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡ 0
out (c),a
ld b,#ff ;╤З╨╕╨┐ 0
out (c),b
xor a ;╤А╨╡╨│╨╕╤Б╤В╤А 0
out (c),a
in a,(c)
ld (turboSound),a
ld a,SND_PAGE
call setpg4000
xor a
call reset_ay_ay
inc a
call reset_ay_ay
ld hl,SFX_DATA
jp AFX_INIT