User Tag List

Страница 4 из 7 ПерваяПервая 1234567 ПоследняяПоследняя
Показано с 31 по 40 из 85

Тема: Упаковщики

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    У z80 команда 16 битного вычитания длиннее и медленнее 16 битного сложения, а у 8080 нет команды 16 битного вычитания.
    Было у меня такое подозрение.

    Цитата Сообщение от ivagor Посмотреть сообщение
    Для pdp11 это без разницы
    В данном случае можно было бы в распаковщике сэкономить несколько инструкций, если бы оффсеты во входном потоке хранились положительные. А это плюс к быстродействию.
    manwe.pdp-11.ru

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Хм, похоже, при распаковке LZSA2 нужно сперва обрабатывать LL, а только потом всё остальное (в документации об этом, конечно, не сказано). Странно и неудобно, ведь MMM и XYZ по краям байта, проще и короче с них начать. Неоптимальный формат, однако.
    manwe.pdp-11.ru

  4. #3

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,393
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    нужно сперва обрабатывать LL, а только потом всё остальное
    Не скажу про все случаи, но например в начале распаковки это потенциально экономит токен, скопировали затравочный фрагмент и потом еще можем сослаться в него ссылкой, и все в одном токене.
    Цитата Сообщение от Manwe Посмотреть сообщение
    Неоптимальный формат
    "LZSA is a collection of byte-aligned compression formats that are specifically engineered for very fast decompression on 8-bit systems.", на pdp11 они не замахивались.

  5. #4

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    "LZSA is a collection of byte-aligned compression formats that are specifically engineered for very fast decompression on 8-bit systems.", на pdp11 они не замахивались.
    На 8-битках тоже оптимальней доставать LL с краю байта, а не из середины.
    manwe.pdp-11.ru

  6. #5

    Регистрация
    07.08.2008
    Адрес
    г. Уфа
    Сообщений
    8,393
    Спасибо Благодарностей отдано 
    763
    Спасибо Благодарностей получено 
    2,367
    Поблагодарили
    1,317 сообщений
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В токене три компонента и не получится все расположить с краю. Насколько я понимаю, они набрали статистику на типичных файлах, какие токены встречаются чаще и оптимизировали разбор наиболее частых. Автор бывал на форуме или можно написать ему напрямую, если что.

    - - - Добавлено - - -

    Вспомнил пример exomizera, когда автор выбрал формат битового потока удобный для 6502, не очень удобный для z80 и совсем неудобный для 8080. В том случае я даже не стал пересобирать упаковщик, а сделал отдельный постобработчик, который переставлял биты. Но я конечно был не один такой умный и вскоре автор добавил опцию для изменения формата битового потока в упаковщик. Аналогично можно поступить и с lzsa, или изменить упаковщик или сделать отдельную утилиту для постобработки сжатых файлов, которая будет переставлять биты в токене или где угодно и как угодно.

  7. #6

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от ivagor Посмотреть сообщение
    Аналогично можно поступить и с lzsa, или изменить упаковщик или сделать отдельную утилиту для постобработки сжатых файлов, которая будет переставлять биты в токене или где угодно и как угодно.
    Да, тоже задумался об этом.
    Пока вот как получилось: на 26 байт короче (перемещаемый вариант - на 16 байт короче) и на 5.4% быстрей. Потестируйте, пожалуйста, на сложных файлах.
    Код:
    ; LZSA2 PDP-11 decompressor by Manwe/SandS
    ; Thanks to Ivan Gorodetsky
    ; Usage:
    ; MOV #src_adr,R1
    ; MOV #dst_adr,R2
    ; CALL Unpack
    
    
    Unpack: MOV PC,Table+2      ; correct table address
            ADD #XYZ-Unpack-2,Table+2
            CLR R4              ; no nibbles sign
    Token:  MOVB (R1)+,R3       ; read token
    
    Liter:  MOV R3,R0
            ASR R0
            ASR R0
            ASR R0
            BIC #177774,R0      ; get 2 bits
            BEQ Decode
            CMP R0,#3           ; literals length
            BNE Copy
                MOV #239.,Limit
                CALL Extend
    Copy:   MOVB (R1)+,(R2)+    ; literals length in R0
            SOB R0,Copy
    
    Decode: MOV R3,-(SP)    
            COM R3              ; invert for faster detect
            ROLB R3             ; get 2 bits
            ROL R0
            ROLB R3
            ROL R0
    Table:  MOVB XYZ(R0),R0
            ADD R0,PC           ; run subroutine
    Save:   MOV R0,(PC)+        ; save offset for future
    Offset: .WORD 0
    
    Match:  MOV (SP)+,R0
            BIC #177770,R0      ; get 3 bits
            CMP R0,#7
            BNE Clone
                MOV #233.,Limit
                CALL Extend
    Clone:  ADD #2,R0           ; match length
            TSTB R0
            BEQ Exit
    
            MOV R2,R3
            ADD Offset,R3
    1:      MOVB (R3)+,(R2)+
            SOB R0,1
            BR Token
    
    
    XYZ:    .BYTE oOther-Save, o13bit-Save, o9bit-Save, o5bit-Save
    
    o5bit:  CALL Nibble         ; get nibble in R0
            ROLB R3
            ROL R0
            BIS #177740,R0      ; set bits 5-15
            BR Save
    
    o9bit:  ROLB R3
            ROL R0
            SWAB R0
            BISB (R1)+,R0
            BIS #177000,R0      ; set bits 9-15
            BR Save
    
    o13bit: CALL Nibble         ; get nibble in R0
            ROLB R3
            ROL R0
            SWAB R0
            BISB (R1)+,R0       ; 8 bits
            BIS #160000,R0      ; set bits 13-15
            SUB #512.,R0
            BR Save
    
    oOther: ROLB R3
            BCS 1
                MOV Offset,R0   ; reuse offset
                BR Match
    1:      MOVB (R1)+,R0
            SWAB R0
            CLRB R0
            BISB (R1)+,R0
            BR Save
    
    Nibble: COM R4
            BNE 1
                MOV R5,R0
                BR 2
    1:      MOVB (R1)+,R5       ; read 2 nibbles
            MOV R5,R0
            ASR R0
            ASR R0
            ASR R0
            ASR R0
    2:      BIC #177760,R0      ; leave 4 low bits
            RET
    
    Extend: MOV R0,-(SP)        ; save original value
            CALL Nibble         ; get nibble in R0
            CMP R0,#15.
            BNE Ext2
                CLR R0
                BISB (R1)+,R0
                CMP R0,(PC)+
    Limit:      .WORD 239.
                BNE Ext1
                    MOVB (R1)+,R0   ; read low byte
                    SWAB R0
                    CLRB R0
                    BISB (R1)+,R0   ; read high byte
                    SWAB R0
                    TST (SP)+       ; skip saved R0
                    RET
    Ext1:       ADD #15.,R0
    Ext2:   ADD (SP)+,R0        ; add original value
    Exit:   RET
    
    .END
    Попробую ещё с отрицательными оффсетами поколдовать - вдруг получится чуть оптимизировать.
    Последний раз редактировалось Manwe; 08.08.2021 в 12:39.
    manwe.pdp-11.ru

  8. #7

    Регистрация
    20.04.2013
    Адрес
    г. Павловский Посад
    Сообщений
    4,246
    Спасибо Благодарностей отдано 
    498
    Спасибо Благодарностей получено 
    557
    Поблагодарили
    436 сообщений
    Mentioned
    42 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Пожалуйста, посоветуйте по упаковке 4-битного звука ( речевое сообщение о разряде батарейки ) с семплрейтом 8 Кгц - это будет эффективнее хотя бы на 50% по сравнению с обычным хранением в формате .WAV ?
    Какая скорость декомпрессии отрезка 3.5 Кбайт ( размер выходного файла ) на БК11М-4 мгц ?
    Блог : http://collectingrd.kxk.ru/ . В ЛС прошу не писать, все сообщения MMTEMA@MAIL.RU

  9. #8

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от MM Посмотреть сообщение
    Пожалуйста, посоветуйте по упаковке 4-битного звука ( речевое сообщение о разряде батарейки ) с семплрейтом 8 Кгц - это будет эффективнее хотя бы на 50% по сравнению с обычным хранением в формате .WAV ?
    Какая скорость декомпрессии отрезка 3.5 Кбайт ( размер выходного файла ) на БК11М-4 мгц ?
    Я писал алгоритм 4-битного ADPCM, скорость приемлемая. Кажется, там использовались таблицы для распаковки. С ходу не вспомню, надо искать алгоритм. Поищу попозже.
    manwe.pdp-11.ru

  10. #9

    Регистрация
    06.12.2017
    Адрес
    г. Москва
    Сообщений
    1,724
    Спасибо Благодарностей отдано 
    167
    Спасибо Благодарностей получено 
    406
    Поблагодарили
    257 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от MM Посмотреть сообщение
    Пожалуйста, посоветуйте по упаковке 4-битного звука
    Посмотрел свои исходники, у меня такой изврат: два сэмпла хранятся по одним и тем же адресам - один сэмпл в младших 4-х битах каждого байта, другой сэмпл в старших 4-х битах этого же байта. Использовалось для микширования многоканального звука. Немного иная задача.
    Чистый ADPCM сделать не сложно, напишу на досуге. Там главное выровнять по времени выдачу данных в Covox, чтобы через одинаковые промежутки времени шло. какие-то пустые команды придётся вставлять, замерять такты.

    - - - Добавлено - - -

    Цитата Сообщение от ivagor Посмотреть сообщение
    длинные файлы я взял с вектора
    Можно ссылку?
    manwe.pdp-11.ru

  11. #10

    Регистрация
    03.07.2021
    Адрес
    г. Кировск
    Сообщений
    922
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    211
    Поблагодарили
    156 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Manwe Посмотреть сообщение
    один сэмпл в младших 4-х битах каждого байта, другой сэмпл в старших 4-х битах этого же байта
    Таким же образом хранили оцифровки для AY на Спектруме))
    Можно извратиться еще больще, оставив два бита и приделав интерполяцию. Хоть линейную, хоть навроде кривых Безье.

Страница 4 из 7 ПерваяПервая 1234567 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •