User Tag List

Страница 5 из 8 ПерваяПервая 12345678 ПоследняяПоследняя
Показано с 41 по 50 из 77

Тема: Архиватор с самым быстрым распаковщиком

  1. #41

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от palsw Посмотреть сообщение
    очень хочется попробовать в деле пакер
    Прогнал на тесте сжатия ПЗУ ТР-доса (16384 байта) и сравнил с тестами других пакеров (не полный список, привел только те, что тестировались на этих же данных):
    Код:
    MEGALZ: 8849/8776 (110)
    HRUM: 8928 (145)
    PTC: 9625 (0)
    TLZ: 9711 (67)
    TLZP: 9750 (136)
    LZH2: 9865 (85)
    LZS: 9917 (131)
    LZH1: 10211 (87)
    ESV: 14262/14108/14018/14039/14130 (186)
    PACK2: 11626 (56)
    В скобках- размер депакера, через дробь- результат в разных режимах, если таковые имеются.

  2. #42

    Регистрация
    25.01.2005
    Адрес
    Miass, Chelyabinsk region
    Сообщений
    4,094
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    если у него такой предусмотрен.
    а если нет - предусмотреть!

  3. #43

    Регистрация
    27.03.2005
    Адрес
    CПб
    Сообщений
    711
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Один вариант - загнать феникс в режим совместимости с FD, если у него такой предусмотрен.
    Можно еще делать OUT (#FD),A с установленным 6-м битом. Тогда будет работать на Скорпионе/Фениксе/Кае и не будет на Пентагоне 512.

  4. #44

    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,928
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    44 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Vitamin Посмотреть сообщение
    Код:
    MEGALZ: 8849/8776 (110)
    HRUM: 8928 (145)
    PTC: 9625 (0)
    TLZ: 9711 (67)
    TLZP: 9750 (136)
    LZH2: 9865 (85)
    LZS: 9917 (131)
    LZH1: 10211 (87)
    ESV: 14262/14108/14018/14039/14130 (186)
    PACK2: 11626 (56)
    Что это за буквы? Я знаю тока MegaLZ и Hrum. Где из них титусовский?

    ---------- Post added at 15:41 ---------- Previous post was at 15:39 ----------

    А, чорт. Выделен болдом.

  5. #45

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    Где из них титусовский?
    PTC - Pro Turbo Cruncher (титусовский)
    TLZ - TurboLZ
    TLZP - TurboLZ for internal usage

    у остальных название соответствует коду

  6. #46

    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,928
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    44 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Еще бы узнать за сколько тактов каждый из депакеров этих пакеров теперь раскукожит ПЗУ обратно.

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

  8. #47

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,379
    Спасибо Благодарностей отдано 
    1,698
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

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

  9. #48

    Регистрация
    14.01.2005
    Адрес
    Таганрог, Россия
    Сообщений
    4,286
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    91
    Поблагодарили
    39 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    Еще бы узнать за сколько тактов каждый из депакеров этих пакеров теперь раскукожит ПЗУ обратно.
    Это уж сами. Сжатые блоки в соответствующих папочках находятся тут: https://code.google.com/p/zxtune/sou...formats%2Ftest

  10. #49

    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,928
    Спасибо Благодарностей отдано 
    37
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    44 сообщений
    Mentioned
    5 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Titus Посмотреть сообщение
    Скорее всего депакер, который в исходнике, это не финальный депакер, а чуть более ранний. Надо сравнить с тем, что в кодемастерс коллекшн.
    А он будет работать именно с этой версией пакера нормально?

  11. #50

    Регистрация
    08.10.2005
    Адрес
    Москва
    Сообщений
    14,379
    Спасибо Благодарностей отдано 
    1,698
    Спасибо Благодарностей получено 
    2,217
    Поблагодарили
    871 сообщений
    Mentioned
    69 Post(s)
    Tagged
    1 Thread(s)

    По умолчанию

    Цитата Сообщение от Alex Rider Посмотреть сообщение
    А он будет работать именно с этой версией пакера нормально?
    То, что я этой версией пакера жал свои программы - это точно, т.к. именно этой дискетой пользовался. Другое дело, что депакер мог потом урезать, и использовать более маленький. Надо сравнить.

    ---------- Post added at 16:42 ---------- Previous post was at 16:07 ----------

    Цитата Сообщение от Hrumer Посмотреть сообщение
    Согласен У меня не на авось. Я тут скачал, сделал поиск по "deco", и пробежался по первым командам rlca, jr c... их было три штуки, так что вроде 0,1,2 биты в А включены. Пора тестировать
    Ответ верный)

    ---------- Post added at 16:44 ---------- Previous post was at 16:42 ----------

    Пробежался по исходнику декомпрессора, и сделал комменты:

    Код:
    ; Pro Turbo Cruncher v2.1
    ;     Decompressor
    
    			; HL - Адрес начала упакованного фрагмента
    OPUL:			; DE - Адрес для распаковки
    	LD   A,(HL)	; A' = (HL)			; Взять первый байт из потока
    	EX   AF,AF'	; 
    	LD   B,0	; B =  0
    	LD   IX,DECO	; IX = DECO			; Константа для быстрого перехода
    	CALL DECO-1	; ==> DECO-1			; В цикл депакера
    	EX   AF,AF'	; 
    	LD   (DE),A	; (DE) = A'			; Сохранить последний байт
    	RET		; Выход
    	
    ;--------------------------	
    M5:
    	RLCA		; C<-A-<			; Сдвинуть A влево, получить бит из потока
    	JR   C,M6	; Если C = 1, то --> М6		; 
    							; Метод: LZ, смещение 0..8192, длина 0..255
    	LD   A,(HL)	; A = (HL)			; Получить тот же байт из потока
    	AND  #1F	; A = A and $1F			;
    	LD   B,A	; B = A				; B = 0..31 (старший байт смещения)
    	INC  HL		; HL = HL + 1			; Перейти к следующему байту
    	LD   C,(HL)	; C = (HL)			; Взять байт из потока (C - длина 0..255)
    	JR   IYP	; --> IYP			; --> Копирование со смещением
    M6:
    							; Метод: LZ, смещение 2048..3071, длина 3..10
    	AND  #C0	; A = A and 0xC0		; Оставить старшие 2 бита
    	XOR  2		; A = A + 2			; Бит 1 равен 1
    	JR   M7		; --> M7			; --> Подготовка копирования со смещением
    LZMET:
    	RLCA		; C<-A-<			; Сдвинуть A влево, получить бит из потока
    	JR   C,M5	; Если C = 1, то --> М5		; 
    							; Медод: LZ, смещение 0..2047, длина 3..10
    	AND  #E0	; A = A and 0xE0		; Оставить в A старшие 3 бита 
    	RLCA		; C<-A-<			; Сдвинуть A влево, получить бит из потока
    	
    M7:	RLCA		; C<-A-<			; Сдвинуть A влево, получить бит из потока
    	RLCA		; C<-A-<			; Сдвинуть A влево, получить бит из потока
    	LD   B,A	; B = A				; B - старший байт смещения (2 или 3 бита)
    	LD   A,(HL)	; А = (HL)			; Получить тот же байт из потока
    	AND  7		; A = A and 7			; Оставить в A младшие 3 бита
    	ADD  A,3	; A = A + 3			;
    	LD   C,A	; C = A				; C - 3..10 (длина копируемого фрагмента)
    IYP:	
    	INC  HL		; HL = HL + 1			; Перейти к следующему байту
    	PUSH HL		; Сохранить HL
    	LD   A,E	; A = E				; HL = DE - B.m(HL)
    	SUB  (HL)	; A = A - (HL)			;
    	LD   L,A	; L = A				;
    	LD   A,D	; A = D				;
    	SBC  A,B	; A = A - B - c			;
    	LD   H,A	; H = A				;
    	LD   B,0	; B = 0				;
    	
    DACO:	LDIR		; (HL)->(DE), len BC		; Копирование фрагмента из (HL) в (DE)
    	POP  HL		; Восстановить HL		;
    			;				; --> Вход
    	INC  HL		; HL = HL + 1 			; Перейти к следующему байту 
    	
    							; Начало главного цикла
    DECO:	LD   A,(HL)	; A = (HL) 			; Взять байт из потока
    	RLCA		; C<-А-<			; Сдвинуть A влево, получить бит из потока
    	JR   C,LZMET	; Если C = 1, то --> LZNET
    	RLCA		; C<-A-<			; Сдвинуть A влево на 2 бита, получить
    	RLCA		; C<-A-<			; два младших бита
    	AND  3		; A = A and 3			;
    	JR   NZ,M1	; Если A <> 0, то --> M1	; Если A <> 0, то --> M1
    							; Метод: копирование блока длиной 1..32
    	LD   C,(HL)	; C = (HL)			; Взять тот же байт из потока (длина фрагмента)
    	INC  C		; C = C + 1			; Коррекция длины 1..32
    	INC  HL		; HL = HL + 1			; Перейти к следующему байту
    	LDIR		; (HL)->(DE), len BC		; Скопировать C байт из (HL) в (DE)
    	JP   (IX)	; --> DECO			; в цикл --> DECO
    	
    M1:
    	DEC  A		; A = A - 1			; A - 0..2
    	JR   NZ,M2	; Если A <> 0, то --> M2	; Если A <> 0, то --> M2
    	XOR  (HL)	; A = (HL)			; Взять тот же байть из потока
    	AND  #1F	; A = A and 0x1F		; Сбросить в A бит 5
    	RET  Z		; Если A = 0, то выход -->	; Если A = 0, то конец распаковки -->
    							; Метод: ниббловое копирование длиной 1..31
    	LD   B,A	; B = A				; B - счетчик (1..31)
    	INC  HL		; HL = HL + 1			; Перейти к следующему байту
    	LD   C,(HL)	; C = (HL)			; Взять байт из потока (C - базовая константа) 
    	INC  HL		; HL = HL + 1			; Перейти к следующему байту
    ML:			
    	XOR  A		; A = 0
    	RLD		; A <- (HL) <- 0 (нибблы)	; Получить ниббл из потока
    	ADD  A,C	; A = A + C			; Сложить байт с базовой константой
    	LD   (DE),A	; (DE) = A			; Записать байт
    	INC  DE		; DE = DE + 1			; Перейти к следующему байту
    	XOR  A		; A = 0
    	RLD		; A <- (HL) <- 0 (нибблы)	; Получить ниббл из потока
    	ADD  A,C	; A = A + C			; Сложить байт с базовой константой
    	LD   (DE),A	; (DE) = A			; Записать байт
    	INC  DE		; DE = DE + 1			; Перейти к следующему байту
    	INC  HL		; HL = HL + 1			; Перейти к следующему байту
    	DJNZ ML		; Цикл на B итераций --> ML	;
    	JP   (IX)	; --> DECO			; в цикл --> DECO
    M2:	
    	DEC  A		; A = A - 2			; A - 0..1
    	LD   A,(HL)	; A = (HL)			; Взять байт из потока
    	JR   Z,M4	; Если A^ = 0, то --> M4	; Если А^ = 0, то --> M3
    	AND  #1F	; A = A and 0x1F		;
    	LD   C,A	; C = A
    	INC  C		; C = C + 1			; C в диапазоне 1..32
    	
    M3:	INC  HL		; HL = HL + 1			; Перейти к следующему байту
    	PUSH HL		; Сохранить HL
    	LD   A,(HL)	; A = (HL)			; Взять байт из потока
    	LD   H,D	; H = D
    	LD   L,E	; L = E				; HL = адрес приемника
    	INC  DE		; DE = DE + 1			; DE = адрес приемника + 1
    	LD   (HL),A	; (HL) = A			; Записать байт для заливки в (HL)
    	JR   DACO	; --> DACO			; Заливка фрагмента
    M4:
    	AND  #1F	; A = A and #1F			 
    	LD   B,A	;				; B в диапазоне 0..31 (B - старший байт длины)
    	INC  HL		; HL = HL + 1			; Перейти к следующему байту
    	LD   C,(HL)	; C = (HL)			; Взять байт из потка (C - младший байт длины)
    	JR   M3		; --> M3			; --> Заливка фрагмента

Страница 5 из 8 ПерваяПервая 12345678 ПоследняяПоследняя

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

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

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

Похожие темы

  1. архиватор LZX.COM ( CP/M ).
    от Error404 в разделе Зарубежные компьютеры
    Ответов: 18
    Последнее: 12.11.2009, 15:23

Ваши права

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