PDA

Просмотр полной версии : Как воспроизвести .mod?



Enigmatic
27.02.2011, 20:30
Как вобще можно вставить в свою программу play mod файла?
Имеется ввиду GS а не оцифровка.
Так-же вопрос-можно ли как нибудь воспроизвести музыку с редактора Instrument?

AER
28.02.2011, 04:54
http://vtrdos.ru/system.htm ну наверное тут смотри, в плеерах.

psb
28.02.2011, 10:55
Как вобще можно вставить в свою программу play mod файла?
Имеется ввиду GS а не оцифровка.
1. даешь команду GS Reset
2. команда загрузки модуля
3. команда открытия потока (#D1, если правильно помню)
4. загружаешь модуль, байт за байтом
5. ком. закрытия потока (#D2?)
6. ком. play

Stingrey
28.02.2011, 17:38
Вот немного модифицированный драйвер 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