Лишь бы оно не протухло как 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 я заботливо иногда с одной полки переставляю на другую).
Так что на такой подвиг я пока не готов, но потихоньку зрею. Всему своё время...
Ну вот видишь, ты смог разобраться с форматом этого чудного ассемблера.
Все же теперь полегче будет разбираться.
Спасибо большое.
Поглядел файлики сегодня, да уж запутали эти файлы MWM и MWK до нельзя, нельзя что ли было все в одном файле сделать. А то получается надо знать какой MWK к какому MWM. Думаю для спека надо объединять эти файлы. В принципе для демок оно и пофиг, но если вот плеер катать, то будет не совсем айс. Кстати думается что плеер надо бацать сразу под работу SD карты или IDE. А попутно вопрос, есть ли уже либы для работы с оными девайсами, а конкретнее под FAT32. Нужны примитивные функции: чтение каталога, чтение данных их файлов.
А может кто рискнет осилить плеер.
Скажите - вот размечтался, отвечаю - ну дайте хоть помечтать немного. :)
Mick, прикрутите SD карточку к звуковухе — будет вообще красота.
Потихоньку смотрю исходники mwm плеера и обнаруживаю очень занятную вещь.
Частота проигрывания может задаваться в самом mwm файле. Тоесть она может быть 60Гц, 50Гц и пользователя. Иными словами без изменения режима прерываний не обойтись никак. Либо вылавливать только 50Гц треки, что скажем наверное редкость, так как музыку похоже только наверное японцы катали. :)
Посему у меня вопрос, как сформировать подменный векторо прерывания для Z80.
Насколько понял талмут Черного кота, в момент подтверждения сигнала прерывания выставляется на шину данных байт вектора. Тоесть когда у нас нет ничего, а только прерывания от видеоконтроллера то у нас как бы вектор равен FFh на стабильной шине. А вот хочу допустим подсунуть ему например байт вектора 80h или FEh, то как мне организовать обработчик прерывания, чтобы пришедшее прерывание попало ко мне в подпрограмму.
Mick, а если дать карточке больше автономии (как в GS), то нужно-ли прерывания в спектруме трогать? Или прикрутить к ней Z80 это фантастика?
Вот есть реальная карта, у ней нет Z80 и она меня интересует в данный момент. Фантастику или нет, мне пока неинтересно обсуждать.
---------- Post added at 14:16 ---------- Previous post was at 14:12 ----------
Ничего короче я не понял. Такая вроде фигня была в DMA Utrasound, вот как они обработчик строили прерывания.
Никто не мешает дальше развивать. Но вопрос сейчас стоит не в развитии, а о том как сварганить прерывание. Выход прерывания есть и на этой карте и она может генерить как само прерывание, так и вектор отличный от FF. Как мне этот вектор описать в программе. Иными словами, тупо нужен пример кода формирователя такого прерывания.
Ты на пальцах наглядно объясни.
Вот есть допустим два прерывания, одно выдает FFh на шину (от видеоконтроллера), а пользовательское устанавливает на шине данных F0h, а в регистре I при этом будет 60h. Как будет выглядеть процедура установки обработчика.
Меня вот именно это интересует. Кто может показать наглядно?
Можно даже не заводить отдельный вектор - у OPL есть два таймера с битами состояния, а значит их можно прочитать в обработчике и проверить: OPL ли это прерывания прислал? Они на MSX так ведь и проверяют:
Но вот у VSYNC прерывания у Speccy не такого бита, а главное он широкий (по крайней мере на некоторых клонах), при том, что z80 принимает прерывание по срезу сигнала, это кадровый гасящий возможно будет гадить и прерывание от OPL будет пропущено. Если был бы контроллер прерываний или хотя бы они по уровню обрабатывались, а не импульсом... Беда в общем, остаётся надеяться, что такое редко будет случаться и на следующем VSYNС подхватим потерянное прерывание или в паузе придёт очередное от OPL (оопс, а подтверждение он получил?) И надеяться, что никто это не услышит.Код: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
Другой вариант - задействовать под прерывание другой вход процессора, NMI...
P.S. Сколько себя помню в IM2 режиме никто не надеялся, что с шины придёт именно 0xFF, всегда лепили таблички в 257 одинаковых байт.
---------- Post added at 21:06 ---------- Previous post was at 20:29 ----------
Я чего-то не понял: криокамера или таки музыка от Sage Dreamcast вещь доступная?
Микросхема SEGA 315-6232 (QFP -100) - 80,00 руб.
Микросхема Stereo DAC PCM1725U - 50,00 руб.
80 рублей, Карл...
Ну да странный какой-то G2 интерфейс 16-ти битный, загрузка ARM7DI через него, но это же кошерный Ямаховский чипец "Yamaha Super Intelligent Sound Processor" AICA, умеющий MIDI XG, поддерживающий до 8MB SDRAM, имеющий встроенный эффект процессор... В MAME для аркадных автоматов давным-давно научились эмулировать.
Ты не до конца написал тот обработчик
Код: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
Код:play_int:
di
ld a,4
out (0C4H),a
opl4_wait ; wait if Turbo-R
ld a,128+1
out (0C5H),a ; reset opl4 IRQ
.....
хреновасто он там эмулируется ;), лучше вот этим http://www.foobar2000.org/components/view/foo_input_ht
его слегка погнули копипастой не верного кода из МАМЕ, но это лучшее что пока есть
музычку можно взять там - http://dsf.joshw.info/ (дримкаст/наоми) или там http://ssf.joshw.info/ (сатурн/ств)
ps: жирные архивы не имеет смысла качать, там потоковое аудио в каком-нибудь .adx, а в мелких - более интересные секвенсорные музоны.
из хороших примеров - http://dsf.joshw.info/s/Skies%20of%2...orks)(Sega).7z
Чуть посложнее, чем описано по треду далее.
Во первых, каждому источнику прерывания, включая кадровое, соответствовал отдельный бит в векторе прерывания. Это нужно, чтобы можно было обработать прерывание сразу из нескольких источников. Т.е. концу цикла ДМА соответствовал бит 7, первому таймеру бит 6, второму - бит 5, кадровому - инверсный бит 4. Соответственно, в таблице прерываний расставлялось 16 переходов на обработчики. На вектор #6F ставился обработчик конца ДМА, на вектор #BF - первый таймер, на #2F - конец ДМА и первый таймер, и т.д. Бит кадрового прерывания был инверсным, соответственно кадровое прерывание - вектор #FF, кадровое и конец ДМА - #7F и т.д.
Во вторых, запрос на все прерывания, кроме кадрового, не снимался до подтверждения, можно было в программе по ходу пользоваться DI и EI, это не вело к пропуску прерывания.
Вектор выставлялся на шину по совместному сигналу /IORQ и /M1, этим же сигналом сбрасывались триггеры запроса прерывания.
Вот как-то так было, если склероз не подводит.
https://www.youtube.com/watch?v=ZHuo4O9NJoI
Интересно, а эта музыка записывалась с настоящего SID? Автор пишет про реверберацию, панирование и задержки как вроде бы сторонние эффекты. Что скажете, специалисты? :)
Человек выложил видео с музыкой OPL4:
https://www.youtube.com/watch?v=GdWwaiav_fQ
http://sderni.ru/290730
собственно..
Сдёрни.ру испортился. Пользуйтесь ргхостом.
Не в тему, но скорее всего прибалдеете http://zx-pk.ru/showthread.php?t=152...l=1#post857373 (для тех, кто следит за этой темой).
В OPL4 ничего нового не нашёл, но вот смотрел программу LMMS и заслушался демонстрационной музыкальной композицией Farbro - Tectonic
https://www.youtube.com/watch?v=bJ2wrn4-vfQ