TBK PSG Packer

Системный софт

Postby psndcj » Sun, 02.03.2014 16:30:21

Image
Не прошло и пары лет... Легендарный psg-packer, написанный еще 3 года назад, наконец-то поступает в массовый неограниченный доступ. В чем причина такой "задержки" - объяснить сложно, тут и лень, и нехватка времени и интереса, ну и куча всего.

Несмотря на такое длительное время инкубации - никакого бета-тестинга не проводилось, просьба о возможных багах и прочем писать мне. Буду благодарен.

Credits:
psndcj - idea, code win/zx
key-jee - lots of ideas
introspec - help with player, info, motivation
sq//skrju - ascii-logo

2014-03-02 tbk_psg_packer_1_1.zip
(551.56 KiB) Downloaded 680 times
User avatar
psndcj
 
Posts: 81
Joined: Sun, 28.07.2013 22:39:27
LOCATION: оттуда

Postby psndcj » Sun, 02.03.2014 16:32:24

(реадми - кому неохота качать архив, чтобы понять что там внутри).

PSG packer - это упаковщик файлов PSG, музыкального формата звукового
чипа AY/YM, представляющего собой дамп регистров. Создавался с целью
быстрого проигрывания музыки в демах, так как существовавшие плэеры не
устраивали чудовищной скоростью работы. Проигрывание же обычного PSG на
реальном спектруме практически невозможно из-за огромного размера файла.
Данный пакер и есть компромисс между скоростью и объемом.

Прототип пакера был написан еще в 2009 году, вначале на спектруме, но
памяти и скорости 128к машины было недостаточно для усовершенствования
алгоритма, поэтому в итоге пакер был написан на С для пц в 2010-2011
году. Через год был написан плэйер для z80, а еще через год наконец-то
все собрано в приличный вид и готово к выпуску в массы. Но временный
(надеюсь) отход от сцены, незаинтересованность общественности, появление
альтернативных вариантов задержали релиз на полгода. Огромное спасибо
introspec'у за постоянную мотивацию и помощь, без него этого "релиза"
так бы и не было.

Основная идея компрессора слегка напоминает стандартную схему LZ77
(поиск сопадений с уже распакованным потоком), вывернутую наизнанку:
ищутся совпадения с фрагментами запакованного потока, без распаковки
данных в память. При этом для достижения высокой производительности
проигрывателя данные хранятся в виде PSG1 и PSG2 (в зависимости от
сложности фрейма музыки).

Характеристики пакера/плэера:

+ высокая скорость проигрывания: средняя скорость примерно 650 тактов,
пиковая 1089 тактов (не учитывая зацикливания музона). К примеру
используемый нами плэер Vortex Tracker'а имеет среднюю скорость в 5К,
пиковую около 10K при смене паттернов.
+ существует вариант плэера, выровненный на 4 такта (для использования с
мультиколорами и бордер-эффектами) со скоростью 1329 тактов. Огромная
благодарность introspec'у эа него. В планах у него же еще ровный плэер
с распаковкой в буфер.
+ независимость от исходного формата музыки. Так как упаковывается
PSG-файл, то нет никаких ограничений на формат оригинала, размеры
паттернов и скорость.
+ размер плэера - 348 байт для быстрого варианта и 427 байт для
выровненного (1617 байт у вортекса для сравнения).
- несмотря на паковку в 40-50% все равно достаточно большой размер
получаемого файла.
- зацикливание только на начало музыки (при этом происходит ощутимый по
масштабам плэера тормоз (до примерно 1800 тактов). Объясняется тем,
что писалось для себя и только для использования в демах, где loop
трека не нужен.

Использование пакера:

1. Экспортируйте ваш трек в регистровый формат (*.psg), это можно
проделать, например, с помощью программы AY-Emul версии 2.х (экспорт
в *.psg является одной из опций меню экспорта трека в плейлисте
программы) и сохраните его в папку к пакеру.

ВНИМАНИЕ! Использовать PSG-файл, сохраняемый в эмуляторе FUSE НЕЛЬЗЯ!!!
Там сохраняется дамп-регистров без упаковки, которая присутствует в
PSG, на которую пакер надеется и не проверяет. Файл упакуется, но
размер его будет огромным.

2. Перейдите в папку с пакером и наберите в командной строке

build имя_вашего_файла.psg

В качестве примера прилагается музыкальный трек из нашей демы Machined,
сочинённый Fatal Snipe; он назван "machined.psg". Чтобы скомпилировать
этой файл нужно выполнить в командной строке команду

build machined.psg

Батник автоматически создаст снэпшот с плейером (*.sna), магнитофонный
и дисковый образы (*.tap и *.scl); их можно запустить чтобы убедиться
в верности конверсии. Кроме этих файлов, программа создаст бинарный
файл (*.bin) который можно загрузить на спектруме с адреса 32768.

Плейер доступен в виде ассемблерного кода для ассемблера sjasmplus. Есть
2 версии плейера: "быстрая" версия, оптимизированная по скорости, и
"ровная" версия, приспособленная для использования в программах, которые
должны точно учитывать время исполнения (бордерные эффекты, мультиколоры
и т.п.). Обе версии проигрывателя должны компилироваться с адреса,
кратного 256.

Точки входа "быстрого" плейера совпадают с наиболее распространненным
плэером PT3.x(Vortex):

PLAYER: инициализация плейера
PLAYER+5: распаковка и проигрывание одного фрейма
PLAYER+8: остановка проигрывателя

Схема проигрывателя совершенно стандартна:

call PLAYER
loop: ei
halt
call PLAYER+5
jr loop

Слово передается introspec'у:

"Ровный" плейер устроен немного сложнее. Проигрывание музыки разделено
в нём на 2 шага: распаковка фрейма в буфер и проигрывание фрейма из
буфера. Буфер находится по стартовому адресу плейера (первые 13 значений
соответствуют регистрам 0..12, регистр 13 хранится по адресу PLAYER+14).
Это может пригодится для визуализаторов музыки.

У "ровного" плейера сделаны следующие точки входа:

PLAYER+16: инициализация плейера (требует 226 тактов процессора)
PLAYER+16+5: распаковка в буфер одного фрейма (требует не более 760
тактов, конкретное число тактов всегда кратно 4).
PLAYER+16+8: остановка проигрывателя (требует 212 тактов)
PLAYER+16+10: проигрывание текущего фрейма в буфере (требует 569 тактов
процессора)

Проигрыватель в этом случае будет выглядеть примерно так:

call PLAYER+16
loop: ei
halt
call PLAYER+16+10 ; постоянное число тактов
[...] ; другой код с постоянным числом тактов
; или числом тактов кратным 4
call PLAYER+16+5 ; число тактов кратное 4
jr loop

Пожалуйста учтите, что "ровный" плейер написан подразумевая отсутствие
задержек памяти и/или процессора. Т.е. на классических спектрумах он
должен либо выполняться в быстрой памяти, либо не одновременно с
отрисовкой экрана. Плейер не учитывает задержки М1 и, вообще, не
гарантирует правильное время исполнения на "жёлтых" Скорпионах и других
машинах с задержками различных сортов.

Благодарности:
+ key-jee//tbk - за идеи и помощь с пакером и плэером.
+ introspec - за мотивацию, сборку, помощь с плэером и за "ровный
вариант" оного.
+ sq//skrju - за аски-логу

Не буду претендовать на идеальность плэера, сорцы прилагаются. Если у
кого-то получится улучшить/убыстрить, буду только рад. Присылайте письма
на psndcj.tbk@gmail.com.

(c) Triebkraft 02.03.2014
User avatar
psndcj
 
Posts: 81
Joined: Sun, 28.07.2013 22:39:27
LOCATION: оттуда

Postby g0blinish » Sun, 02.03.2014 16:41:05

блядь, а приатачить сюда религия не позволяет?
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby g0blinish » Sun, 02.03.2014 16:45:31

и еще- добавьте к гуи осмысленные сообщения а не уебанскую аски. скормил пакеру бинарнику, на выходе - хуй
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby moroz1999 » Sun, 02.03.2014 17:24:43

Спасибо, попробуем!
User avatar
moroz1999
 
Posts: 1872
Joined: Wed, 01.08.2012 11:23:51

Postby introspec » Sun, 02.03.2014 17:55:12

g0blinish wrote:скормил пакеру бинарнику, на выходе - хуй

Что скормил, кому скормил? зато матерное слово пригодилось!
User avatar
introspec
 
Posts: 579
Joined: Sun, 14.07.2013 15:36:47

Postby g0blinish » Sun, 02.03.2014 18:11:52

introspec wrote:Что скормил, кому скормил?

специально для товарищей прапорщиков:
g0blinish wrote:скормил пакеру бинарнику


из того, что дя Женя дал древним попользоваться, остались одни впечатления: пакер не проверял формата .psg и давился на компрессии. опробую намедни.
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby introspec » Sun, 02.03.2014 18:32:42

g0blinish, садится такой чувак в двухместный гоночный автомобиль, оглядывается по сторонам и спрашивает: "Я что-то не понял, а если я мешок картошки захочу отвести, куда его тут класть-то?"

Sent from my HTC Sensation XE with Beats Audio Z715e using Tapatalk
User avatar
introspec
 
Posts: 579
Joined: Sun, 14.07.2013 15:36:47

Postby VBI » Sun, 02.03.2014 18:37:48

introspec, оглядываюсь по сторонам и тихо спрашиваю: "по_класть или по_ложить?"
User avatar
VBI
 
Posts: 1965
Joined: Mon, 03.06.2013 09:20:29

Postby introspec » Sun, 02.03.2014 18:41:41

Побросать же! :)))

Sent from my HTC Sensation XE with Beats Audio Z715e using Tapatalk
User avatar
introspec
 
Posts: 579
Joined: Sun, 14.07.2013 15:36:47

Postby g0blinish » Sun, 02.03.2014 18:44:26

introspec wrote:g0blinish, садится такой чувак в двухместный гоночный автомобиль, оглядывается по сторонам и спрашивает: "Я что-то не понял, а если я мешок картошки захочу отвести, куда его тут класть-то?"

Бугога! еще раз, др меня не дошло.

спасибо за работу, однако мои пожелание о проверке формата псг остаются в силею
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby introspec » Sun, 02.03.2014 19:02:09

Для кого эта проверка нужна, объясни, будь добр.
User avatar
introspec
 
Posts: 579
Joined: Sun, 14.07.2013 15:36:47

Postby nyuk » Sun, 02.03.2014 19:07:02

psndcj, спасибо!
Следующую дему обязательно буду писать с использованием твоего пакера! Правда, пока не знаю, когда это случиться.
не отрастил
User avatar
nyuk
 
Posts: 556
Joined: Thu, 26.07.2012 09:08:24

Postby g0blinish » Sun, 02.03.2014 19:16:14

introspec wrote:Для кого эта проверка нужна, объясни, будь добр.

в идеале - для пакера.

о, еще один момент под названием "Нюк, обломись!"
Может быть такая ситуация, как размер файла больше страниц(16384 байт).не проверял код, но как плеер поступит с этим?

а спас меня пакер psb для Reality) файл просто сжался лучшим образом.
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby introspec » Sun, 02.03.2014 19:23:10

g0blinish wrote:Может быть такая ситуация, как размер файла больше страниц(16384 байт).не проверял код, но как плеер поступит с этим?

g0blinish, есть такая пословица: после сборки обработать напильником. Без обработки напильником, само, всё равно не заработает.
User avatar
introspec
 
Posts: 579
Joined: Sun, 14.07.2013 15:36:47

Postby g0blinish » Sun, 02.03.2014 19:29:18

introspec wrote:Без обработки напильником, само, всё равно не заработает

это я и хотел услышать, и так от дяди Жени не добился ничего.
вывод: для удобства уповать на полученный упакованный размер, либо ебстись с напильником.
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby introspec » Sun, 02.03.2014 19:32:58

Нет, вывод неправильный. Должен быть такой: не совать каку в мясорубку, курить доки и не психовать.
User avatar
introspec
 
Posts: 579
Joined: Sun, 14.07.2013 15:36:47

Postby g0blinish » Sun, 02.03.2014 19:49:35

introspec wrote:Должен быть такой: не совать каку в мясорубку, курить доки и не психовать.

Ладно, я все равно в раздумьях - делать дему или нет. моя кака приложена, теперь твоя кака B)
Attachments
test.rar
(36.82 KiB) Downloaded 945 times
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby introspec » Sun, 02.03.2014 19:54:57

g0blinish wrote:моя кака приложена, теперь твоя кака

4 минуты 51 секунда? делай, родной, но не забудь порезать свой муз. трек перед тем, как сбрасывать его в psg.
User avatar
introspec
 
Posts: 579
Joined: Sun, 14.07.2013 15:36:47

Postby g0blinish » Sun, 02.03.2014 19:59:08

introspec wrote:но не забудь порезать свой муз. трек перед тем, как сбрасывать его в psg.

ну чо..спасибо, что нахуй не послали..
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby introspec » Sun, 02.03.2014 20:01:27

А что, какие-то проблемы? ну ты бы написал автору, объяснил свои трудности, наверняка, он вошёл бы в твоё трудное положение.
User avatar
introspec
 
Posts: 579
Joined: Sun, 14.07.2013 15:36:47

Postby g0blinish » Sun, 02.03.2014 21:03:56

introspec wrote: что, какие-то проблемы? ну ты бы написал автору

Кэп намекает, что проблема в прокладке - между афтаром и клавиатурой.
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby introspec » Mon, 03.03.2014 02:39:24

g0blinish, ты размахиваешь у меня перед носом спираченным psg известного происхождения. Кэп подсказывает: 5 минут в страницу не влезет. Возможно, влезет с пакером psb, но даже это не факт. Что ты хочешь, чтобы я тебе сказал? Если хочешь быстрый плейер - нужно резать трек. Нет, я твой трек резать не буду и писать этот тул, раз он мне сейчас не нужен, я тоже не собираюсь. Возможно ли порезать трек? да, для этого даже не нужно быть музыкантом. Можно ли порезать напрямую psg? тоже да, но опять же, кто-то должен сесть на жопу и сделать. Я это делать не собираюсь, psndcj, подозреваю, тоже.

А теперь спроси себя, у кого из нас всех больше всего мотивации сесть и таки сделать нужный тебе тул.
User avatar
introspec
 
Posts: 579
Joined: Sun, 14.07.2013 15:36:47

Postby g0blinish » Mon, 03.03.2014 06:16:38

introspec wrote:g0blinish, ты размахиваешь у меня перед носом спираченным psg известного происхождения.

а что, трудно догадаться? .YM->.PSG по прежней схеме

introspec wrote:тоже да, но опять же, кто-то должен сесть на жопу и сделать.

и шо? утилит для резки не будет?

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

Начнем поманеньку - ТС-Лабс начал писать пакер и забросил, psb потихоньку делает пакер по его словам и не торопиться релизить, и тут с "рилизом" являешься ты как лохоун.
В данный момент я не мотивирован писать такую тулзу.

Не знаю, нужная вещь это или нет, но я дважды столкнулся с тем, что музон длинный, от вас видимо хер дождешься.
[x] No Screenshot
User avatar
g0blinish
Упырь говнофорума
 
Posts: 3641
Joined: Tue, 18.06.2013 10:59:01

Postby TS-Labs » Mon, 03.03.2014 07:26:54

Гоблин, тебя покусал алкс, я гарантирую это.
User avatar
TS-Labs
 
Posts: 5398
Joined: Thu, 26.07.2012 01:29:56

Next

Return to Utilities

Who is online

Users browsing this forum: No registered users and 0 guests

x