; @language: Z80 ASM

SndTest_test:
    ; ch1 max volume
    ld a,%10010000
    out (SND_DATA_REG),a
    ; play note ch1
    ld a,%10000000
    out (SND_DATA_REG),a
    ld a,%00100000
    out (SND_DATA_REG),a
    ; wait
    ld bc, 1200
    call Time_delay55

    ; ch2 max volume
    ld a,%10110010
    out (SND_DATA_REG),a
    ; play note ch2
    ld a,%10100000
    out (SND_DATA_REG),a
    ld a,%00010000
    out (SND_DATA_REG),a
    ; wait
    ld bc, 1200
    call Time_delay55

    ; ch3 max volume
    ld a,%11010100
    out (SND_DATA_REG),a
    ; play note ch3
    ld a,%11000000
    out (SND_DATA_REG),a
    ld a,%00001000
    out (SND_DATA_REG),a
    ; wait
    ld bc, 2400
    call Time_delay55

    ; fade ch1,ch2,ch3
    ld d, 0 ; attenuation
    sndTest_fade:   ; BROKEN!
        inc d
        ; update ch1 atten
        ld a, d ; use A as attenuation
        and %10010000; place channel number in upper bits to compose attenuation byte
        out (SND_DATA_REG),a
        ; update ch2 atten
        ld a, d ; use A as attenuation
        and %10110010; place channel number in upper bits to compose attenuation byte
        out (SND_DATA_REG),a
        ; update ch3 atten
        ld a, d ; use A as attenuation
        and %11010100; place channel number in upper bits to compose attenuation byte
        out (SND_DATA_REG),a
        ; wait
        ld bc, 100
        call Time_delay55
        ; cycle until attenuation is 1111
        cp d %1111
        jp nz, sndTest_fade

    ; wait
    ld bc, 2400
    call Time_delay55

    ; play noise

    ret