Login

Subversion Repositories NedoOS

Rev

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