svofski, чистой воды магия!Ты потоком распаковываешь музыку и проигрываешь?
А в случае с текстом ты как делаешь? Используешь какую-то функцию операционки для вывода буфера длинной 256 байт?
svofski, чистой воды магия!Ты потоком распаковываешь музыку и проигрываешь?
А в случае с текстом ты как делаешь? Используешь какую-то функцию операционки для вывода буфера длинной 256 байт?
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
parallelno, это было бы разумно так делать, но я просто сделал тупой колбек на каждый символ и печатаю их один за другим. С музыкой то же самое (колбаск следит, когда накопится строка из 16 регистров и выплевывает их в AY). Собственно переделка распаковщика сводится к тому, что по адресу назначения находится циклический буфер 256 байт и inx b заменяется на inr c (и еще пара нюансов связанных с тем же самым). Этот же буфер является окном, поэтому и паковать надо с -w 255.
Думал про группировку ym по регистрам (это когда сначала все фреймы регистра 0, потом все фреймы регистра 1 итд). RLE там делать нечего, по крайней мере на тех примерах, что у меня. Допустим музон "EA demosong" по строкам с окном 255 упаковывается в 17322 байт, а если он по столбцам -- в 2141 при том же размере окна. Но чтобы таким воспользоваться, надо либо распаковать его целиком, что невозможно (ок, можно в кваз, но это неспортивно совсем), либо запаковывать и распаковывать 14 потоков параллельно. Для 14 параллельных потоков надо 14 буферов в 256 байт, что ну как бы тоже так себе прикол -- получается, что мы сэкономили на сжатии, но потом ту же самую память отжали на распаковку. Но с другой стороны это всего 3584 байта, то есть размер более-менее сопоставимый с плохо рекомпилированным плеером pt2.
Еще интересный вариант -- использовать микро-окна. Например 16 байт дает 12137 байт, или 32 байта дают 5836 байт. Допустим для окна 32, нужно всего 448 байт на распаковку 14 потоков и собственно данные 5836 байт.
В принципе этот способ конечно не самый красивый, но мне нравится его универсальность. И для ви53 таким образом тоже можно.
Meanwhile, я заинтересовался плеером в демке polet4k, которая на Базыре не светится так ярко и может быть он покомпактней и поприятней на ощупь. Но это надо вынимать.
Больше игр нет
Насчет 255 это я зря написал, лучше -w256. И я бы особо не рассчитывал на буфер <256 при сжатии сравнительно больших блоков, слишком уж упадет степень сжатия.
Если ты скачал AY_Emul из альтернативного источника и можешь генерировать psg, то есть еще один подход. Можно сжать спецупаковщиком psg, распаковщик я переводил в 8080, он там простой. Результат упаковки ориентировочно в 3-3.5 раза больше исходного pt3. zx0 с большим окном жмет лучше, с маленьким где-то в этом районе.
Я написал в прошлом сообщении цифры, полученные на отдельно взятом, но реальном примере. Буфер = 32 -- золотая середина при организации данных по столбцам. Вот если по строкам, разумеется это вообще почти что ничего.
Вопрос 255 vs 256 меня беспокоил, но время было ближе к 4 утра и я пока оставил его без внимания. Размер выхлопа на этом примере был одинаковый или отличался на пару байт, не стоило того.
Есть еще такой момент, что в YM есть два столбца для регистров, которых у нас нет, и там все равно нули. Но при сжатии по строкам это удобно, потому что выровнено по 16.
Жматель PSG интересно.
- - - Добавлено - - -
"Vortex Tracker - в принципе стандартный ProTracker 3.x (размер плэера 1617 байт)"
Вот тут хочется заплакать. 1617 байт. И в них каждая вторая инструкция не "sta L1234+1 \ L1234 mvi a, 0", вот наверняка.
Больше игр нет
Больше игр нет
На запретном сайте есть, среди прочих, вариант плеера без самомодификаций (PT3PROM). Размер немного> 2 Кб.
(Да че-то это malwarebytes дал маху. Жаль, раньше была хорошая штука.)
Но как pt3prom поможет? Он написан на густом z80 с индексными регистрами, бит тестами и проч. Или я куда-то не туда смотрю?
Больше игр нет
На тебя не угодишь
Ты покритиковал тот вариант плеера за самомодифицируемость, а я написал, что плееры есть разные (но тоже, увы, не для 8080).
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)