У меня всё загружается. При том, что картинка считалась не до конца. Но как я понимаю, вся ценность релиза в картинке.
https://yadi.sk/d/DZlMiAvG3KbADk
- - - Добавлено - - -
Вот как картинку спасти?
У меня всё загружается. При том, что картинка считалась не до конца. Но как я понимаю, вся ценность релиза в картинке.
https://yadi.sk/d/DZlMiAvG3KbADk
- - - Добавлено - - -
Вот как картинку спасти?
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
Bambr, Ну, то что вы выложили на Яндекс это собственно я сам вчера вам и выложил в виде WAV'ки. Пошаманив с данными я попытался восстановить блок с картинкой, взяв выпавшие байты с блока от Дупанова, он её прогрузил но она идет киш-мякишом и выглядит это по уродский. Единственное отличие в том, что внизу написано "Челябинск" с номером телефона. Т.е формально я готов проститься с той картинкой и даже вставить оригинал ,но как я уже говорил, подсунув ей другой блок, он отказывается грузить основной (последний).
Группа в ВК, посвященная кассетным версиям игр для спектрума
В коллекции:Plazma-128K (YM+TR-DOS), Кворум 128+, Эксперт-006, Квант V3.а, Квант (Didaktik), Компаньон-2 (V2.2), Radon Plus, Урал 8-64К, Byte, Хоббит, Байт, Compact-256, Profi-128K (Kramis V.02), Himac 48K
Неплохую защиту навернул там Андрей)
Теоретически пофиксить этот релиз можно, но практически ради надписи 'Челябинск' и, возможно, номера телефона - какой смысл?
Для фикса нужно разобраться в работе депакера, а он там навороченный, распаковать оба блока данных, до вмятины и после, дорисовать середину и упаковать обратно.
В данном случае овчинка выделки не стоит.
А главный блок прекрасно грузится и игра запускается.
p.s.: И еще раз выскажусь - долой моно-записи! В данной записи четко видно, как смешаны два канала, причем один с задержкой, из-за чего на единичных фронтах появляются лишние гармоники. То, что читалка это распознала - еще не значит, что так надо делать.
Хорошо, другой тогда вопрос. Можно ли сделать так, чтобы он грузил блок любой длины? И подсунуть ему хотя бы для проверки блок от Дупанова, чтобы он спокойно его распаковал и отобразил.
Группа в ВК, посвященная кассетным версиям игр для спектрума
В коллекции:Plazma-128K (YM+TR-DOS), Кворум 128+, Эксперт-006, Квант V3.а, Квант (Didaktik), Компаньон-2 (V2.2), Radon Plus, Урал 8-64К, Byte, Хоббит, Байт, Compact-256, Profi-128K (Kramis V.02), Himac 48K
Любой нельзя. Он грузит блок длиной не более $147b. Старт $9c40.
Titus, Ну сделал, но грузит почему-то только при FastLoad. В чем может быть косяк?
Группа в ВК, посвященная кассетным версиям игр для спектрума
В коллекции:Plazma-128K (YM+TR-DOS), Кворум 128+, Эксперт-006, Квант V3.а, Квант (Didaktik), Компаньон-2 (V2.2), Radon Plus, Урал 8-64К, Byte, Хоббит, Байт, Compact-256, Profi-128K (Kramis V.02), Himac 48K
Уже есть подвижки с восстановлением экрана. Вертикальный полосатый фрагмент в середине экрана - это потерянный кусок.
Декомпрессор оказался на редкость примитивным, и при этом жутко монстроидальным. Наверное тот, кто писал его, только учился программировать. Если кому интересно, выкладываю краткий дизассемблер, по которому я разбирался с ним.
- - - Добавлено - - -Код:+1 номер трети (0..2) +2 число третей (1..3) +3 bit 0 0 - ширина строки 1 байт, 1 - ширина строки 32 байта bit 2 0 - обычный режим, 1 - режим fill (заполнения области) bit 3 0 - распаковка экрана, 1 - распаковка атрибутов 9C40 JR $9C46 9C42 (begin) DB $01, $FF, $FF, $0C ; Сигнатура текущей команды 9C46 CALL $007C ; RET (Получить на стеке адрес выхода this) 9C49 (this) DEC SP DEC SP EX (SP),HL ; HL - адрес this INC SP INC SP AND A LD DE,$0007 SBC HL,DE PUSH HL POP IY ; IY = this - 7 (begin) = $9C42 LD DE,$012A ADD HL,DE ; HL = this - 7 + $012A = $9D6C LD A,(IY+$00) ; (IY) -> A (A = $01) $9C5E DEC A ; JR Z,$9C67 ; Если A = 1, то --> $9C67 ( не используется) LD E,(HL) ; HL = HL + (HL) INC HL ; LD D,(HL) ; ADD HL,DE ; JR $9C5E ; --> $9C5E $9C67 LD DE,$4000 ; DE = $4000 (адрес начала экрана) INC HL INC HL ; HL = HL + 2 = $9D6E LD A,(IY+$01) ; A = (IY+1) ($FF) INC A ; JR NZ,$9C76 ; Если A <> $FF, то --> $9C76 LD A,(HL) ; (HL)->(IY+1) (обновить номер трети) LD (IY+$01),A ; $9C76 INC HL ; HL = HL + 1 LD A,(IY+$02) ; A = (IY+2) INC A ; JR NZ,$9C81 ; Если А <> $FF, то --> $9C81 LD A,(HL) ; (HL) -> (IY+2) (обновить число третей) LD (IY+$02),A ; $9C81 INC HL ; HL = HL + 1 LD A,(HL) ; (HL) -> (IY+3) (флаги) LD (IY+$03),A ; LD A,(IY+$01) ; Если (IY+1) >= 3, ; Скорректировать номер трети 0..2 CP $03 ; то (IY+1) = 0 JR C,$9C91 ; LD (IY+$01),$00 ; $9C91 LD A,(IY+$02) ; A = (IY+2) ; Скорректировать число третей 0..3 CP $04 ; Если (IY+2) >= 4, JR C,$9C9C ; то (IY+2) = 1 LD (IY+$02),$01 ; $9C9C ADD A,(IY+$01) ; A = A + (IY+1) ; Сложить число третй и номер трети, CP $04 ; Если A >= 4, ; чтобы сумма не привышала 3 JR C,$9CA7 ; то (IY+2) = 1 LD (IY+$02),$01 ; $9CA7 LD A,(IY+$02) ; Если (IY+2) = 0, ; Скорректировать число третей 1..3 AND A ; то (IY+2) = 1 JR NZ,$9CB1 ; LD (IY+$02),$01 ; $9CB1 INC HL ; HL = HL + 1 LD E,$00 ; E = 0 LD A,(IY+$01) ; A = (IY+1) ; (IY+1) - номер трети (0..2) ADD A,A ; ADD A,A ; ADD A,A ; ADD A,$40 ; А = $40 + (A * 8) LD D,A ; D = A LD C,A ; C = A LD B,$01 ; ; Число столбцов BIT 0,(IY+$03) ; Если бит 0 (IY+3) = 0, JR NZ,$9CC8 ; то B = $20, LD B,$20 ; иначе B = $01 $9CC8 PUSH BC ; Сохранить BC LD B,(IY+$02) ; B = (IY+2) (цикл на N третей) $9CCC PUSH BC ; Сохранить BC LD B,$08 ; B = 8 (цикл на 8 знакоместв в трети) $9CCF PUSH BC ; Сохранить BC LD B,$08 ; B = 8 (цикл на высоту знакоместа) $9CD2 PUSH BC ; Сохранить BC ; Выбрать длину цикла - 1 байт или 32 байта (ширина строки) LD B,$01 ; Если бит 0 (IY+3) = 0, BIT 0,(IY+$03) ; то B = $01, JR Z,$9CDD ; иначе B = $20 LD B,$20 ; $9CDD PUSH DE ; Сохранить DE $9CDE PUSH BC ; Сохранить BC JR $9D24 ; --> $9D24 (распаковка одного байта) $9CE1 ; Цикл на ширину строки (1 или 32) POP BC ; Восстановить BC INC DE ; DE = DE + 1 DJNZ $9CDE ; Цикл --> $9CDE ; Цикл на высоту знакоместа POP DE ; Восстановить DE POP BC ; Восстановить BC INC D ; D = D + 1 DJNZ $9CD2 ; Цикл --> $9CD2 LD A,D ; Коррекция перехода на знакоместо ниже SUB $08 ; LD D,A ; LD A,E ; ADD A,$20 ; LD E,A ; POP BC ; DJNZ $9CCF ; Цикл на число знакоместв в трети LD A,D ; Коррекция перехода на треть ниже ADD A,$08 ; LD D,A ; POP BC ; DJNZ $9CCC ; Цикл на число третей LD D,C ; Переход на следующий столбец INC E ; POP BC ; DJNZ $9CC8 ; Цикл на число столбцов ; Распаковка атрибутов LD E,$00 ; LD A,$58 ; ADD A,(IY+$01) ; D = (IY+1) + $58 LD D,A ; E = 0 LD B,(IY+$02) ; B = (IY+2) (BC - длина области) LD C,E ; C = 0 SET 3,(IY+$03) ; бит 3 (IY+3) = 1 $9D11 PUSH BC JR $9D24 $9D14 POP BC DEC BC INC DE LD A,B OR C JR NZ,$9D11 LD (IY+$01),$FF LD (IY+$02),$FF RET ; Распаковка одного байта $9D24 BIT 2,(IY+$03) ; Если бит 2 (IY+3) = 0, (не режим fill) JR Z,$9D37 ; то --> $9D37 EXX ; DEC B ; B' = B' - 1 LD A,C ; EXX ; JR Z,$9D33 ; Если B' = 0, то --> $9D33 LD (DE),A ; C' -> (DE) JR $9D4B ; --> $9D4B $9D33 RES 2,(IY+$03) ; бит 2 (IY+3) = 0 (сбросить режим fill) $9D37 LD A,(HL) ; A = (HL) INC HL ; HL = HL + 1 AND A ; Если A <> 0, JR NZ,$9D4A ; то --> $9D4A (обычный режим) ; переход в режим fill LD A,(HL) ; B' = (HL) ; B' - длина fill-области EXX ; LD B,A ; EXX ; INC HL ; HL = HL + 1 LD A,(HL) ; C' = (HL) ; C' - байт для заполнения fill-области EXX ; LD C,A ; EXX ; INC HL ; HL = HL + 1 SET 2,(IY+$03) ; бит 2 (IY+3) = 1 (установить fill-режим) $9D4A LD (DE),A ; A -> (DE) $9D4B BIT 3,(IY+$03) ; Если бит 3 (IY+3) = 1 (распаковка атрибутов) JR NZ,$9D14 ; то --> $9D14, JR $9CE1 ; иначе --> $9CE1 $01-$FF - режим обычного копирования $00,len,byte - режим fill, где len - длина, byte - байт для заполнения
Восстановил, запаковав ручками выпавший кусок картинки, по алгоритму данного пакера.
p.s.: Пакер - это нечто) Неэкономный, монстроидальный) Но спишем на ученичество автора, каждый через это проходил.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)