Флейм
GameDev.ru / Флейм / Форум / Блеск и нищета 8/16-битных консолей и ПК (11 стр)

Блеск и нищета 8/16-битных консолей и ПК (11 стр)

Страницы: 110 11 12 1318 Следующая »
=A=L=X=Постоялецwww13 дек. 201711:53#150
Dexus
> Сами писали драйверы с пресетами миди-инструментов для OPL2/OPL3 чипов (вторые
> были намного качественнее). Общего стандарта ж не было.

Отэтожь трешъ. :) Вот тут еще есть интересное замечание: http://www.shipbrook.net/jeff/sb.html

AdLib Inc. and Creative Labs, Inc. both sell developers' kits for their sound cards, but these are expensive, and (in the case of the Sound Blaster developers' kit) can be extremely cryptic.

:) Походу там весело было еще как...

Правка: 13 дек. 2017 11:55

monobogdanЗабаненwww13 дек. 201712:00#151
т.е MIDI там никакого не было?
Если было то как это все посылали в звуковуху? В MIDI же есть свои таймлайны, можно было прямо с ними в звуковуху отправлять, или свой таймер писать?
Ещё не понятен вопрос с многопоточностью.
Многопоточности тогда не было, получается что звук работал в цикле с основной игрой? Но например в Doom была музыка на уровнях, и работал он на большинстве ПК того времени 30FPS, что не очень быстро и может не хватить.
0iStalkerМодераторwww13 дек. 201712:11#152
monobogdan
> Многопоточности тогда не было, получается что звук работал в цикле с основной
> игрой?

В чем проблема в отсутствии многопоточности? Записал в буфер карточки данные (часто даже через DMA контроллер) и пока они в обработке - выполняешь какие-то вычисления, как только звуковой чип завершил работу, дёргается прерывание. С FM ещё проще, загрузил данные в регистры и оно генерирует звуки в соответствии с этими данными

=A=L=X=Постоялецwww13 дек. 201712:11#153
monobogdan
> 30FPS, что не очень быстро и может не хватить.

100% звуковой драйвер садился по части подпитки буферов и тому подобное на прерывания.

nonamezeroxПостоялецwww13 дек. 201713:25#154
monobogdan

MIDI - это всего лишь стандарт, чтобы любые электронные музыкальные инструменты одним шнурком друг-с дружкой  соединялись и все работало (и он, к слову -не первый, до него был такой аналоговый стандарт CV/gate). Музыку для программируемого синтезаторного чипа не обязательно в этом формате хранить и ему в любом случае понадобится драйвер для перевода MIDI во внутренние команды. Если проводить аналогию - то MIDI - это такой язык программирования вроде паскаля ил  С, в то время как у каждого звукового процессора ассемблер свой.

> Многопоточности тогда не было, получается что звук работал в цикле с основной игрой? Но например в Doom была музыка на уровнях, и работал он на большинстве ПК того времени 30FPS, что не очень быстро и может не хватить.

Я ж тебе ссылку кинул, там все описано.

To record or play back sound, you should use the following sequence:

    Allocate a buffer that does not cross a 64k physical page boundary
    Install an interrupt service routine
    Program the DMA controller for background transfer
    Set the sampling rate
    Write the I/O command to the DSP
    Write the I/O transfer mode to the DSP
    Write the block size to the DSP (Low byte/high byte)

Upon interrupt when using single-cycle DMA:

    Program DMA controller for next block
    Program DSP for next block
    Copy next block if double-buffering
    Acknowledge the interrupt with the SB by reading from port 2xE for 8-bit sound or port 2xF for 16-bit sound.
    Acknowledge the end of interrupt with the PIC by writing 20h to port 20h. If the sound card is on IRQ8-15, you must also write 20h to A0h.

.......

Auto-initialized DMA
When single-cycle DMA is used, sound output stops at the end of each block. The interrupt handler can start another transfer, but there will be a break in output. This causes a click between each block, reducing sound quality. When auto-initialized DMA is used, sound output loops around at the end of the buffer. The DMA controller keeps transfering the same block of memory that the DMA transfer was initiated with. When the end of the buffer is reached, it will start sending the buffer again by auto-initializing the current offset and count registers with the values stored in the base offset and count registers. The usual method for achieving click-less output is to allocate a buffer and divide it into two blocks. Program the DMA controller with the length of the whole buffer, but program the SB16 with the length of a block. (Half of the buffer) An interrupt occurs for each sound card block, so two interrupts will occur each time the buffer is played, once at the midpoint (Start of the second block) and once at the end (In effect, the start of the first block) The interrupt handler should copy data into the block that was just finished so that the data is ready when it is needed for output. The programming procedure for an auto-initialized DMA transfer is identical to the procedure for a single-cycle DMA transfer, except that bit 4 of the DMA mode register and bit 3 of the DSP command are set.

Upon interrupt when using auto-initialized DMA:

    Copy next chunk into output buffer block that just finished
    Acknowledge the interrupt with the SB by reading from port 2xE for 8-bit sound or port 2xF for 16-bit sound.
    Acknowledge the end of interrupt with the PIC by writing 20h to port 20h. If the sound card is on IRQ8-15, you must also write 20h to A0h.

To stop sound immediately:

    8-bit - Write DSP command D0h (Pause 8-bit DMA mode digitized sound I/O)
    16-bit - Write DSP command D5h (Pause 16-bit DMA mode digitized sound I/O)

Both commands stop sound immediately, without an interrupt.

To stop the sound at the end of the currently block:

    8-bit - Write DSP command DAh (Stop 8-bit auto-init DMA sound I/O)
    16-bit - Write DSP command D9h (Stop 16-bit auto-init DMA sound I/O)

These two commands will stop the sound at the end of the current block. If your program is not prepared for an interrupt after output is finished, it may cause problems.

You can also end auto-initialized mode by reprogramming the DSP for single-cycle mode. The card then switches from A/I mode to S/C mode after the next interrupt. It will then contiue to play or record for the length specified, generate an interrupt and stop. This will allow you to stop output exactly at the end of the data, without requiring the remainder of the DMA buffer to be filled with silence. This technique may or may not be useful to you. I would recommend using the pause commands documented in in the immediate stop section unless another method is more suited to your purpose.

Правка: 13 дек. 2017 13:36

=A=L=X=Постоялецwww13 дек. 201713:47#155
Dexus
> Сами писали драйверы с пресетами миди-инструментов для OPL2/OPL3 чипов

О, нашёл еще одно подтверждение этому факту:
Энтузиасты давно уже сделали имитатор ямаховских OPL2/3 и плеер из разных форматов, в том числе игр для него - AdPlug: http://www.vgmpf.com/Wiki/index.php/AdPlug
И вот напротив формата MID там так и написано:

MIDI files are played with General MIDI instrumentation, but this rarely matches the custom engines of most games, particularly those made prior to the General MIDI standard.

То есть да, не только в XCOM, но и вообще в большинстве игр под DOS были свои наборы инструментов - откуда их брали вот даже дико интересно. Неужели как на консолях - музыканты сами экспериментировали с настройками операторов у каналов OPL? Мде... Хм...

nonamezeroxПостоялецwww13 дек. 201713:52#156
=A=L=X=
>
> То есть да, не только в XCOM, но и вообще в большинстве игр под DOS были свои
> наборы инструментов - откуда их брали вот даже дико интересно. Неужели как на
> консолях - музыканты сами экспериментировали с настройками операторов у каналов
> OPL? Мде... Хм...

Так в чем проблема, на DX7 музыканты точно так же накручивали звук и экспериментировали с настройками операторов (только еще более геморно, учитывая "интерфейс" оной пианины). Синтезаторы для того и созданы и потому так и называются, что бы самому делать звук.  Собственно, на момент появления OPL чипов у музыкантов уже был 10-летний опыт музыкальной индустрии  как работать с FM-синтезом и какой оператор куда подтыкать с какими огибающими чтобы тот или иной звук накрутить.

=A=L=X=Постоялецwww13 дек. 201713:57#157
nonamezerox
> Так в чем проблема

Я лично всю жизнь считал, еще с DOS, что в этой сфере был единый стандарт MIDI и просто разные звуковые карточки по разному инструменты реализоваывали, но сам протокол был изначально MIDI - какие типа кнопки на синтезаторе жмакаются, считай что напрямую содержимое MIDI-файлов лили в порты, за вычетом заголовочных байтов.
А оно вон оно как - считай что ничем от консольных реалий и не отличалось... Для меня это открытие.

nonamezeroxПостоялецwww13 дек. 201714:07#158
=A=L=X=

Во времена доса практически ничего от консольных реалий не отличалось. Те же "хацкерские" ассемблерные приемы и экономия на тактах, та же низкоуровневая возня с портами, прерываниями и железками напрямую, только еще усугубленная многообразием железа, под каждое из которых чуть ли не свой самописный драйвер писали. Да и те же ограничения в плане звука, разве что PCM на домашних компах все же раньше консолей появился (да и то, у маков и амиги).  Консоли даже выгодно отличались в этом плане от пека того времени наличием 2D ускорения, которое на большинстве компов того времени приходилось делать процессором руками.

Правка: 13 дек. 2017 14:09

=A=L=X=Постоялецwww14 дек. 201712:47#159
Таки да, посмотрел сейчас еще минуту в исходники вышеупомянутого AdPlug: https://github.com/adplug/adplug/blob/master/src/mididata.h
Вот оно - таблица инструментов для Yamaha OPL2/3 в стиле General MIDI от некоего Jorrit Rouwe.
Видно что на канал задаётся 14 байт, при этом в данном случае 3 последних всегда нулевые. Остальные, очевидно, задают все нужные параметры осцилляторов-операторов.
0iStalkerМодераторwww22 дек. 201716:12#160
Смотрите, какая интересная штука есть, - https://www.8bits4ever.net/product-page/stmini    может работать почти всем 8-ми битным, что было более-менее популярным

It can run as many retro systems. Some of the available systems are: Atari ST, Amiga, Amstrad CPC, Radio86RK, Apple II, Apple Mac Classic, Archimedes, Astrocade, Atari 2600, Atari 800, Atari 5200, BBC Micro, BK0011M, Commodore 64, ColecoVision, Gameboy, SMS, Mattel Aquarius, MSX2, NES, PC Engine, ZX Spectrum, Sinclair QL, ZX 81, Vector 6, Sega Megadrive, VIC-20, Videopac and some arcade cores like Pacman, Space Invaders, etc.

=A=L=X=Постоялецwww22 дек. 201718:48#161
0iStalker

Я вот на самом деле абсолютно не фанат железа. Аутентичность, запах канифоли и так далее абсолютно не возбуждает.
Но то, что там на FPGA всё воссоздаётся как бы из железа - это восхищает чисто эстетически. :)))
Да, забавные вещи, причём проект там даже шире - можно на гитхаб выйти где, если я правильно понял, в опенсоурсе эти все вещи лежат в виде пригодном для изучения, но надо 100 лет потратить чтобы изучить как свои процессоры ваять уровня Z80 на FPGA...

0iStalkerМодераторwww23 дек. 201714:26#162
Еще вброшу, про железо - http://www.breaknes.com/download
=A=L=X=Постоялецwww23 дек. 201714:35#163
0iStalker
> Еще вброшу, про железо - http://www.breaknes.com/download

Красиво... блин, мне не так давно понравилось описание современной компьютерной вычислительной техники Пелевиным, мол с точки зрения существа живущего в магическом мире это прелесть совершенства - мол по очень тонким нитям алюминиевым бегают очень слабые и тонкие молнии, которые....

Правка: 23 дек. 2017 14:35

=A=L=X=Постоялецwww23 дек. 201714:55#164
То есть представьте себе это глазами человека из магического параллела:
http://bukva.mobi/viktor-pelevin-smotritel-kniga-2-gheleznaya-bez… a.html?page=8
Молитвенный барабан назывался у ветхих людей словом «Хад», а произносящий заклинания голос — словом «Цоф» (так я расслышал). Мантры на барабане «Хад» были все время одни и те же, а заклинания «Цоф» постоянно менялись.

И каждый раз, когда эти «Хад» и «Цоф» встречались, электрическая сила как бы околдовывала себя сама — подчиняясь заклинаниям, она разбегалась по металлическому лабиринту таким хитрым способом, что функции умофона проявлялись совершенно безблагодатно — то есть вообще без вмешательства Ангелов!

Трудно было поверить, но те удивительные вещи, которые могли делать эти маленькие коробочки, всего лишь вытекали из железных необходимостей материи — и свойств хитрой тюрьмы, построенной для нее людьми.

Мы, конечно, не сумели бы повторить у себя ничего похожего: эти мелкие до невидимости иероглифы, вытравленные в кристалле, вобрали так много разных смыслов, что при самом мелком почерке все заключенные в них команды нельзя было бы вместить даже в миллион латунных цилиндров с бумажными свитками.

Смысл происходящего, однако, оставался неизменным — зафиксированная человеческая воля принуждала физические эффекты происходить определенным образом, и они происходили. По сути, наша технология работала так же, но была намного дешевле и компактней. А вот в мистическом отношении техника Ветхой Земли показалась мне куда мрачнее.

Дело в том, что вытравленные в камне иероглифы были основаны на открытиях, когда-то давно (иногда за века до этого) нащупанных и записанных людьми. Этих людей было очень много — и большей частью они давно умерли. Каждый из них походил на древнего раба, выбившего на гранитной плите крошечный отрезок длинного-предлинного заклинания.

И уже давно на Ветхой Земле не было ни одного человека, кто знал бы все некрозаклинание целиком. Люди в лучшем случае понимали, как соединить один этаж библиотеки с другим, чтобы накопленные в веках смыслы растеклись по их черным электрическим маркам, выныривая из формул и таблиц, составленных мертвецами, почти не видевшими при жизни счастья — и горько ушедшими в небытие.

Умофон Ветхой Земли, несмотря на свою безблагодатность, был сосудом ритуальной некромантии. Мало того, это был продукт безжалостных азиатских потогонок — таких пирамид человеческого страдания и тоски, что древнеегипетский проект рядом с ними казался шуткой. Вряд ли эти пропитанные болью коробочки могли принести кому-нибудь из живых счастье.

Но я уже знал, что на Ветхой Земле инженеры думают не о счастье, а о скорости, с какой письмена мертвых душ приказывают электрической силе прыгать туда-сюда по медным волосам этих карманных големов.

Теперь я понимал, почему умофон показался мне похожим на погребальную ладью. Он и был ладьей, огромной ладьей, где гребли мертвецы. Их набилось там очень много, и чем совершенней становилось устройство, тем больше их собиралось. Но никто не гнал ветхих людей плетью в это жуткое загробье.

Молодежь, постиг я, сознательно стремилась на эту призрачную галеру: превратить свою жизнь в цепочку заклинаний, которая обретает мимолетный смысл, лишь сплетаясь с другими похожими цепочками, считалось у них чуть ли не лучшим доступным человеку шансом.

Страницы: 110 11 12 1318 Следующая »

/ Форум / Флейм / Железо

2001—2018 © GameDev.ru — Разработка игр