Login

Subversion Repositories NedoOS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

        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_COUNT&#3fff)
        ;ld e,a
        ;ld a,l
        ;cp e
        ;jr nc,.skip

        ;ld h,high (SMP_LIST&#3f00)

        ;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