Как вобще можно вставить в свою программу play mod файла?
Имеется ввиду GS а не оцифровка.
Так-же вопрос-можно ли как нибудь воспроизвести музыку с редактора Instrument?
Вид для печати
Как вобще можно вставить в свою программу play mod файла?
Имеется ввиду GS а не оцифровка.
Так-же вопрос-можно ли как нибудь воспроизвести музыку с редактора Instrument?
http://vtrdos.ru/system.htm ну наверное тут смотри, в плеерах.
Вот немного модифицированный драйвер GS, написанный для 10-го номера Insanity. Пользуйтесь на здоровье :)
Код:
; / Driver General Sound for Insanity /
; Version 1.1
;-= (c) 2001-2003 Stingrey/GPC/Insanity Org. =-
;-----------------------------------------------------
; Реализованные в данной версии точки входа в драйвер:
;
; INIT - Инициализация и проверки General Sound
; LOAD_MOD - Навороченная процедура загрузки и запуска MOD'а
; VOLUME_MOD - Регулировка громкости
; STOP_MOD - Пауза
; CONT_PLAY - Продолжаем слушать музыку
;
ORG #C000
; Инициализация:
; Входные параметры: (отсутствуют)
; На выходе: z=0 - GS PRESENT/ z=1 - GS NOT PRESENT OR BROKEN
; (c=0 - ALL O'K/ c=1 - BROKEN GS)
; ----
; Total RAM of GS = E * 65536 + HL (bytes)
INIT DI
LD A,#23
LD B,A
OUT (#BB),A
LOOP1 IN A,(#BB)
RRCA
JR NC,GS_PRESENT
DEC BC
LD A,B
OR C
JR NZ,LOOP1
IN A,(#7B) ; блокировка ПЗУ ZX-LPRINT
RET ; GS отсутствует совсем !
GS_PRESENT
EI
HALT
DI
IN A,(#B3)
INC A
AND 252
RET Z ; Глючный GS !!!
LD A,#20
LD C,#B3
CALL SENDCOM
IN L,(C)
CALL WAITNEXT
IN H,(C)
CALL WAITNEXT
IN E,(C)
CCF
RET
; Загрузка модуля в память GS и его проигрывание:
; Входные параметры: HL - адрес буфера в памяти ZX;
; A - количество 16K (32K) блоков в модуле:
; (ABS [bloks] = MODULE_LENGHT (bytes)/16384)
; DE - длина текущего блока в байтах
;
; Выходные параметры: A - количество оставшихся блоков
; z=1 - модуль полностью загружен
LOAD_MOD
DI
LD C,A
LD A,(BLOKS)
OR A
JP NZ,LOAD2
LD A,C
LD (BLOKS),A
CALL FADE_VOL
LD A,#30
CALL SENDCOM
LD A,#D1
CALL SENDCOM
LOAD2 LD A,D
CPL
LD D,A
LD A,E
CPL
LD E,A
INC DE
LD C,#BB
LOOP2 LD A,(HL)
IN B,(C)
JP P,READY
IN B,(C)
JP M,LOOP2
READY OUT (#B3),A
INC HL
DEC E
JP NZ,LOOP2
INC D
JP NZ,LOOP2
LD A,(BLOKS)
DEC A
LD (BLOKS),A
RET NZ
LOOP3 IN B,(C)
JP M,LOOP3
LD A,#D2
CALL SENDCOM
LD A,1
OUT (#B3),A
LD A,#31
CALL SENDCOM
LD A,(M_VOL)
JP VOL2
FADE_VOL
LD A,(M_VOL)
LD B,A
LOOP4 LD A,B
CALL VOL2
EI
HALT
DI
DJNZ LOOP4
CALL STOP_MOD
RET
BLOKS DB 0
M_VOL DB #40
; Установка громкости:
; Входной параметр: A - уровень громкости (#00 - #40)
VOLUME_MOD
LD (M_VOL),A
VOL2 OUT (#B3),A
LD A,#2A
JP SENDCOM
; Остановка проигрывания модуля (типа кнопки PAUSE):
; (параметров не требует)
STOP_MOD
LD A,#32
JP SENDCOM
; Продолжение проигрывания после 'PAUSE':
; (параметров не требует)
CONT_PLAY
LD A,#33
JP SENDCOM
SENDCOM
OUT (#BB),A
WAITCOM
IN A,(#BB)
RRCA
RET NC
JR WAITCOM
WAITNEXT
IN A,(#BB)
RLCA
RET C
JR WAITNEXT
END