Лишь бы оно не протухло как NeoGS, все возможности которой никто так и не использовал.
Вид для печати
С ним всё очень-очень сложно. Это чип который все данные берет из памяти процессора по PCI шине, у него нет возможности подключить локальную память для семплов.
Если говорить про wavetable синтез, то YMF754 аппаратно его делает, но при этом очень сильно загружает PCI шину, а центральный процессор там парсит MIDI поток и делает пост обработки (эффекты). Исходников драйверов XG от Ямахи нет. FM синтез в этом чипе заявлен тоже аппаратный, но с передискретизацией в 44.1 кГц.
YMF704 это на одном чипе OPL4 (YMF278) + 1MB ROM + UART + микроконтроллер который парсит MIDI поток. Вроде как можно использовать только пару OPL4+ROM и не обращать внимание на остальные дополнения.
Не знаю. Мне больше интересен сам зоопарк чипов, что умеют извлекать звуки, чем задача по их подключению к Спекки. Сделать реплику чипа на другом, эмулировать его - вот это меня привлекает. Каждому своё.
Как раз про wavetable музыку уже не скажешь, что она "имеет индивидуальное звучание", там всё звучание уже в основное определяется семплами и только малая часть особенностью реализации конкретного синтезатора/плеера. А если говорить про постобрабоку и эффекты, то там со стандартизацией хуже чем у midi, поэтому звучать также будет поразному...
Трекерные модули, если не брать в расчет хранение описаний инструментов (семплы и/или параметры FM синтеза), это просто более наглядный и в тоже самое время более компактный способ хранения той же информации (событий), что содержится в midi файлах.
Но в тоже самое время MIDI это всё же группа каких-никаких, но всё же стандартов, и очень много аппаратуры таким способом управляется, есть множество софта. А трекерные модули, это множество различных стандартов (зачастую весьма плохо задокументиролванных), расчитанные под конкретные плееры, под конкретную аппаратуру.
ZXM-MoonSound это определенно крутой проект. Даже и представить не могу, что можно ещё круче сделать, особенно если смотреть только на кошерные Ямахи. Хотя в стиле ретро загружать 1 Мбайт дополнительных семплов с плёнки тоже было бы не очень здорово. Поэтому, я за то, чтоб семплами реализовывать только отдельные звуки, которые иначе плохо получаются.
Я бы помог но с программированием у меня чуть более чем "никак" :) тем кто силен в этом рекомендовал бы начать с MOD плеера.
Всё же доработка NeoGS - это задача для программера-железячника. А таковые как правило предпочитают заниматься своими проектами. Вот потому-то воз и ныне там. Но, тем не менее, разработчики NeoGS по большему счёту свою задачу выполнили. Дали народу возможность приобрести новодельную GS-совместимую карточку с дополнительными плюшками. За что группе NedoPC огромное спасибо.
А в случае с ZXM-MoonSound нужен только программист, которые либо дизассемблирует готовые прожки и адаптирует их под Спекки, либо разберётся с мануалами и напишет свой плеер.
Ежели таковые профи-спецы в этой теме есть, от всего сердца прошу помочь Мику в наполнении железки софтом.
Раз уж чипов YMF278 у японца ещё много, в случае добротной софтовой поддержки MoonSound, есть большая вероятность, что производство карты может продолжить MV1971. Я же, увы, смогу лишь заняться бета-тестом и баг-репортом, ибо в программировании не силён.
Это тоже классное направление и тоже нужное!
Трекерные модули я упомянул лишь потому, что ZXM-MoonSound тоже сможет большинство из них проиграть. Да и легендарная Амига ими известна. А это тоже ретро.
И да, мне не попадалось практически ни одного коряво звучащего трекерного модуля (мог не понравится лишь жанр либо не подойти плеер), а вот мидишек, написанных как курица лапой, встречал с избытком. ;)
Дык метр сэмплов уже в пзу Мунсаунда прошит, зачем их подгружать? А так-то да, меня в этой карточке тоже больше интересует FM музыка, или FM+PCM (есть вроде на MSX такие модули).
А с чем сложности то? Я просто не понял пока... Вроде по регистрам специально сделали совместимым, код плеера должен работать, только выдели его из какой-нибудь игры (я просто никогда с MSX не имел дел, не знаю какие там особенности).
И почему обязательно от MSX отталкиваться? Зачем дизассемблировать что-то, если есть Си код с комментариями? OPL4 ведь из мира PC пришел, там тоже есть его поддержка, вот в linux весьма хорошо синтез и через opl3 и через opl4 поддержан, инструменты в ПЗУшке YRW801 расписаны.
Ну как бы есть музыка, которая написана для MSX и спрашивается причем тут линукс и PC, если плеер на MSX.
Вот к примеру на MSX есть файлы MWM и MWK. Спрашивается как может помочь линукс и Си с комментариями?
Насколько я вот понял MWK зягоняются в внешнее ОЗУ YMF278 и представляют собой по всей видимости любительские сэмплы, а MWM непосредственно сама музыка.
Если не так сложно по вашему, ну запилите что ли плеер или демку.
Ну это судьба большинства новодельных плат.:(
Меня уже устраивает то, что под TS-конфой из коробки отлично крутятся mod'ы. Да и в новых демках, где GS поддерживается, звук есть. SAA, кстати, тоже под TS-конфой зазвучал. Будут портированы плееры под ZXM-MoonSound с MSX - уже большое дело! А дальше видно будет.
1) Исходники на Си помогут проигрывать midi файлы используя сэмплы через Wavetable синтезатор OPL4. Ну и понять какие-то моменты в коде того же MWM плеера, - по двум книгам всегда легче учиться.
2) Если требуется плеер именно для воспроизведения MWM на z80, то зачем дизассамблировать какой-то бинарник, если есть исходники? Хотя я может быть туплю, но вот смотрю я на WAVEDRV.LZH, там .asm файлы, правда в каком-то жутком формате (какой-то MSX ассемблер Compass что-ли?). В общем посмотрел на этих файлы, быстро на коленке сделал скрипт для конвертации, в итоге что-то более менее читаемое получилось (хотя и кажется будто некоторые строки переставлены или это у авторов стиль такой размазывать комментарии по коду, плюс там конце похоже какая-то важная информация, но возиться не стал), вот фрагменты:
Я прикладываю архив с тем, что ковырял (простите за unix-овые переводы строк), но определенно нужно использовать не эти файлы, а обратиться к знающим MSX людям, чтоб они идентифицировали используемый ассемблер и перегнали его в текстовый формат. Ибо повторюсь, я MSX файлы вот-вот только впервые увидел.Код:basic.txt
...
--- Load MWM file ---
; Note: The routine below is a bit complex because it supports
; songs > 16K. However, if you know that your song will always be < 16K you
; can simplify it a lot:
; - read the header and trash it!
; - read the rest of the file
; - modify the play_nextpos routine so that 3 is added to the pattern address
mbload: ld a,(DOSinit)
or a
jp z,initerror
ld ix,04c64h
call basic_call
push hl
ld ix,067d0h ; get filename
call basic_call
push hl
pop ix
call build_fcb ; build right FCB
call curbank_FE
push af
call open_file ; open song file
or a
jp nz,loderr
ld hl,songdata_bank1 ; select first song bank
ld (load_bank),hl
ld a,(hl)
call selbank_FE
...
--- Load MWM file ---
; Note: The routine below is a bit complex because it supports
; songs > 16K. However, if you know that your song will always be < 16K you
; can simplify it a lot:
; - read the header and trash it!
; - read the rest of the file
; - modify the play_nextpos routine so that 3 is added to the pattern address
mbload: ld a,(DOSinit)
or a
jp z,initerror
ld ix,04c64h
call basic_call
push hl
ld ix,067d0h ; get filename
call basic_call
push hl
pop ix
call build_fcb ; build right FCB
call curbank_FE
push af
call open_file ; open song file
or a
jp nz,loderr
ld hl,songdata_bank1 ; select first song bank
ld (load_bank),hl
ld a,(hl)
call selbank_FE
...
;------------------------------------
;--- Set OPL4 for SRAM read/write ---
;------------------------------------
; In: EHL = SRAM address
; Out: C = wave data port
set_opl4_wrt: ld c,2 ; enable SRAM access
ld a,10001b
call opl4_out_wave
inc c
ld a,e
and 111111b
call opl4_out_wave
inc c
ld a,h
call opl4_out_wave
inc c
ld a,l
call opl4_out_wave
ld a,6
out (WVIO),a
ld c,WVIO + 1
ret
...
start_mus_cnt:
di
ld hl,0fd9Ah
ld de,old_int
ld bc,5
ldir ; save interrupt hook
ld a,(0f342h)
ld (Page_nmb),a
ld hl,opl4_int_han
ld de,0fb04h
ld bc,9
ldir
ld hl,0FD9Ah ;Init On Hook 0FD9Ah a Jump to empty RS232 area
ld (hl),0C3h ; JP
inc hl
ld (hl),004h ; 04
inc hl
ld (hl),0FBh ; FB
ld a,2
out (0c4h),a
ld a,(xhzequal)
or a
jr z,Speed60Hz
cp 1
jr nz,Speedxhz
ld a,248
jr Speedxhz
Speed60Hz:
ld a,208
Speedxhz:
neg
out (0c5h),a
opl4_wait ; wait if Turbo-R
ld a,4
out (0c4h),a
opl4_wait ; wait if Turbo-R
ld a,00100001b
out (0c5h),a
ei
ret
opl4_int_han:
in a,(0C4H) ; Put this shit in the RS232 area
rla ; this is to prevent 50 or 60 CALLFs
ret nc ; to the replayer
rst 030h
Page_nmb: db 0
dw play_int
ret
...
;--- initialise OPL4 registers ---
init_opl4: ld a,5
out (FMIO+2),a
opl4_wait ; wait if TURBO R
ld a,3
out (FMIO+3),a
ld c,2
ld a,10000b
jp opl4_out_wave ; init Wave ROM stuff
...
Я и не говорю, что это легко. Просто пытаюсь в меру сил помочь, как могу...
У меня нет ни OPL4 карты (ни под спековский ZX Bus, ни под ISA), нет и куда её вставлять (останки своего давно неработающего своего Ленинграда-2 я заботливо иногда с одной полки переставляю на другую).
Так что на такой подвиг я пока не готов, но потихоньку зрею. Всему своё время...