Проигрываем SoundFX на NEOGS в играх. Имеем 8 каналов. Семплы используем 8 bit, wav, сохраняем как PCM. Процедура сама выбирает свободный канал и играет семпл. Каждое обращение к загрузке семпла определяет его номер от 1....255. При проигрывании просто указываем этот номер семпла.
Не забываем сбросить карту.
LD A,#F4; resset
CALL SC
CALL WC
LD IX,PARAMETR
LD HL,ADDR_SAMPLE
LD DE,LENGHT_SAMPLE
CALL SAMPLE_LOAD
RET
SAMPLE_LOAD:
LD A,#38
CALL SENDCOM
LD A,#D1; Открыли поток
CALL SENDCOM
LD A,(HL)
LOOPG:
IN B,(C)
JP P,READY
IN B,(C)
JP M,LOOP
READY:
OUT (GSDAT),A
INC HL
LD A,(HL)
INC E
JP NZ,LOOP
DEC D
JP NZ,LOOP
WAIT:
IN B,(C)
JP M,WAIT
LD A,#D2; Конец стрима
CALL SENDCOM
LD A,(IX)
OUT (GSDAT),A
LD A,#40
CALL SENDCOM
LD A,(IX+1)
OUT (GSDAT),A
LD A,#41
SENDCOM:
OUT (GSCOM),A
WAITCOM:
IN A,(GSCOM)
RRCA
JR C,WAITCOM
RET
PLAY:
LD A,1; номер семпла ноль не задавать
CALL SD
LD A,#39
CALL SC
CALL WC
RET
PARAMETR:
DB 60
DB #40
GSCOM EQU 187
GSDAT EQU 179
SC:
OUT (GSCOM),A
RET
WC:
IN A,(GSCOM)
RRCA
JR C,WC
RET
SD:
OUT (GSDAT),A
RET
WD:
IN A,(GSCOM)
RLCA
JR C,WD
RET
GD:
IN A,(GSDAT)
RET
WN:
IN A,(GSCOM)
RLCA
JR NC,WN
RET
Комментарии
Отправить комментарий