Важная информация

User Tag List

Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 27

Тема: Запакованный текст на C64 и Apple][

  1. #1
    Activist Аватар для GARNIZON
    Регистрация
    12.02.2008
    Адрес
    S-Posad
    Сообщений
    383
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Запакованный текст на C64 и Apple][

    Помогите распокавать текст. Речь идет о игрушке (квест) "Алиса в стране чудес" вышедшей в 1985 году на Commodore64 и Apple][.
    Для обоих машин используется идентичная система хранения текста - прям блок содержащий набор фраз у обох машин байт в байт.

    Вот например первый попавшийся персонаж заявляет такую фразу:



    D007 - отсюда движок его начинает читать, но там в каждом байте - от 1 до 3 букв.

    D000- 00 00 00 00 00 FF 4E CC D0 30 35 2F 80 04 EC CD .....ЪnLP.....ЛM
    D010- 05 4B 39 A4 4C D0 18 1A 97 C0 02 76 66 F4 89 A0 .k.$lP...@.жфТ.
    D020- 69 59 C2 D4 66 80 C0 D4 BE 00 20 8D D0 02 B5 40 иyBTф.@T>...P.5
    D030- 9D 99 A0 AC 21 DD 42 CE 38 2B 00 08 A0 08 22 14 .. ,.]bN.... ...
    D040- CC 10 30 0A 19 81 B6 31 A9 E0 00 FF 0B 12 32 EE L.....6.)Ю.Ъ...Н
    D050- 80 D4 2C 06 14 D5 06 A1 69 82 21 98 69 06 01 2E .T...U.!и...и...
    D060- 03 75 D1 40 35 F0 00 FF 1C 1A 5D D0 01 62 46 5F .уQ.П.Ъ..}P.бf.
    D070- 00 00 8C C2 3A A4 65 06 A1 69 80 D3 2B 86 8F 00 ...B.$е.!и.S....

    1байт: = "I'"
    2байт: = "M"
    3байт: = "L"
    4байт: = "A"
    5байт: = "TE"
    В общем , где-то 1-2 знака в байте, иногда вроде бы до 3-х, ну это включая пробелы

    Скорее всего, упаковка без сложного сжатия, просто отрезаются старшие разряды (вероятно, отрезаются 3, остаётся 5), оставшиеся запихиваются в байты. При этом эти 5 - не коды ASCII, а указатели на таблицу вида char[0x40] = (' ', 'a', 'b'... и какие-то ещё символы). Известно, что есть два спецсимвола (действуют после раскодирования) : 0x1B и 0xFF. 0x1B - после него следующий символ выводится в видеопамять через другую таблицу, а 0xFF - скорее всего конец строки (неизвестно, как он возникает из 5 бит). Также есть предположение, что байты в выбираются не подряд, а, в зависимости от чего-то, возможны переходы назад/вперед.
    Причем вот что ещё: там как действительно сокращённый знакогенератор, т.е. в "архиве" лежит некий код , который тоже ещё не символы, он уже в обычную кодировку преобразуется по таблице. Ну там просто " abcdef...какие-то ещё символы"

    В 92 году, в Москве, человек имея только бумажную распечатку куска текстового блока, смог выяснить принцип системы хранения. Значит это реально и сейчас?

    Для C64 тоже самое, только смешение блока в ОЗУ другое:
    Последний раз редактировалось GARNIZON; 09.12.2018 в 16:21.

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

  3. #2
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,730
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    34 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    GARNIZON, ты как это ломаешь?
    если идой ты выложи весь пак
    если ковыряешь как то по другому то дай снап памяти и точку входа

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

    для с64
    с адреса C000 находится бакграунд
    с адреса с800 находится набор тайлов бакграунда
    с адреса D000 находится фонт
    С уважением,
    Jerri / Red Triangle.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%]

  4. #3
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,730
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    34 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    короче так

    идет набор символов
    очередной байт загребается в буфер
    если встречается #ff значит конец фразы

    из очередного байта добираются 5 бит
    #00-#1f

    и берем буквы из таблицы

    Код:
    RAM:7293 first_char_set: .BYTE  ' ', 'A', 'B', 'C', 'D', 'E', 'F', 'G'
    RAM:7293                 .BYTE  'H', 'I', 'J', 'K', 'L', 'M', 'N', ' '
    RAM:7293                 .BYTE  'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V'
    RAM:7293                 .BYTE  'W', 'X', 'Y', ' ', 'Z',  $D, '.', ' '
    если встречаем #1b
    то берем очередные 5 бит

    Код:
    RAM:72B3 second_char_set:.BYTE  '-', '?', '!', ':', ';', '*', $27, '0'
    RAM:72B3                 .BYTE  '1', '2', '3', '4', '5', '6', '7', ' '
    RAM:72B3                 .BYTE  '8', '9', '(', ')', ',', ' ', ' ', ' '
    RAM:72B3                 .BYTE  ' ', ' ', ' ', ' ', ' ', ' ', $FF, $1A
    точнее не 5 бит а заданное количество бит, но задано было 5

    как видно из таблицы символ #1f не используется чтобы не было случайных #ff в текстовых сообщениях
    Последний раз редактировалось jerri; 09.12.2018 в 21:09.
    С уважением,
    Jerri / Red Triangle.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%]

  5. #4
    Veteran
    Регистрация
    22.11.2009
    Адрес
    Москва
    Сообщений
    1,321
    Спасибо Благодарностей отдано 
    11
    Спасибо Благодарностей получено 
    20
    Поблагодарили
    13 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    хм, этакий Radix-50

  6. #5
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,730
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    34 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от shattered Посмотреть сообщение
    хм, этакий Radix-50
    а как в нем кодируется?
    С уважением,
    Jerri / Red Triangle.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%]

  7. #6
    Guru Аватар для goodboy
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    11,324
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    13
    Спасибо Благодарностей получено 
    206
    Поблагодарили
    130 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    а как в нем кодируется?
    https://ru.wikipedia.org/wiki/RADIX-50

  8. #7
    Activist Аватар для GARNIZON
    Регистрация
    12.02.2008
    Адрес
    S-Posad
    Сообщений
    383
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    ты как это ломаешь?
    если идой ты выложи весь пак
    если ковыряешь как то по другому то дай снап памяти и точку входа
    Спасибо огромное! Ковыряю просто отладчиком эмулятора.
    Поделитесь плиз, как вам это удалось сделать? Использовался диск от Комодора?

    В аттаче дамп от Apple

    Дамп снят во время выполнения команды по адресу 4372.
    В дампе нет региона Cxxx - это порты ввода-вывода (в дампе заполнен NOP)

    Код:
    Сейчас известны следующие метки:
    
    0076      DepackCnt  
    0077         pBuf_L  
    0078         pBuf_H  
    0079            Acc  
    007A          SaveY  
    00A5          CursH  Координата курсора по горизонтали
    00A6        pSLineL  
    00A7        pSLineH
    00A8           Attr  Аттрибут текстового знакоместа
    00DE        pBufX_L
    00DF        pBufX_H  
    
    41F8          CursY  Координата курсора по вертикали
    4201     EncoderTab  Таблицы декодера  
    4221    EncoderTab2
    4311      CallPrint  Отсюда начинается вывод фразы. A содержит номер фразы
    4328          Print  Y - счётчик бит восстановленного байта?
    432F           Loop  
    4362         Byte1B  Байт, следующий за 1B, декодируется по отдельной таблице
    436F          COut1  
    4375             CR  Перевод строки ?
    438F           COut  C=0 на обычные символы и C=1 на FF
    43A8         COut.1  C=0 на выходе
    43BA        ByteFF2  
    43CF     Init_Print  Вызывается перед обращением к Print
    43F8         Encode  
    441F        EncLoop  
    
    Эти процедуры могут изменять отображение банков памяти, но,
    вроде бы, мне не встречалось их вызовов в дешифраторе текста:
    
    5599        MemSet1  Включает банк 1 на Dxxx (сегмент F)
    55A3        MemSet2  Включает банк 0 на Dxxx (сегмент E)
    55AD        MemSet3  Включает ПЗУ (сегмент 6-7)
    
    Вывод строки начинается от процедуры CallPrint, ей в регистре A передаётся номер фразы,
    но, возможно, для окончательного выбора фразы используются какие-то ещё данные (например, номер экрана).
    
    Данные для разных фраз могут браться из разных частей памяти, например, наблюдалась выборка из Dxxx.
    Возможно, байты фразы идут не подряд!
    Итоговый результат (код символа) передаётся процедуре COut для вывода в видеоозу.
    Вложения Вложения
    Последний раз редактировалось GARNIZON; 10.12.2018 в 11:47.

  9. #8
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,730
    Спасибо Благодарностей отдано 
    87
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    34 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    GARNIZON, просто есть такая штука ICU64 и IDA
    vice как самый удобный эмуль с64

    Эппловскую версию наверное ковырять не буду, не уверен в адекватном эмуле.

    в вайсе нахожу заполнение текстовой области и ставлю там ватчпойнт
    как только идет обращение смотрю откуда и соответственно говорю иде где код
    но я так понял там некий интерпретатор
    вроде SCUMM

    но настолько я конечно его не ковырял

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

    Цитата Сообщение от goodboy Посмотреть сообщение
    я читать умею
    но вот есть нюанс
    RADIX-50 — это символьный код, который позволяет записать в одном 16-битном слове три символа
    16/3=5
    5=32 символа
    у них 40 символов
    как они кодируют еще 8?
    С уважением,
    Jerri / Red Triangle.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%]

  10. #9
    Activist Аватар для GARNIZON
    Регистрация
    12.02.2008
    Адрес
    S-Posad
    Сообщений
    383
    Спасибо Благодарностей отдано 
    3
    Спасибо Благодарностей получено 
    2
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    Эппловскую версию наверное ковырять не буду
    Что вы, и на этом спасибо! Единственное что, нельзя ли увидеть в моем дампе хотя бы - где хранится каталог фраз. Т.е. есть ли где-то в явном виде начала строк?

  11. #10
    Guru Аватар для goodboy
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    11,324
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    13
    Спасибо Благодарностей получено 
    206
    Поблагодарили
    130 сообщений
    Mentioned
    8 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    но я так понял там некий интерпретатор
    ага, в нём ещё сделана игрушка "Below the Root"

Страница 1 из 3 123 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Конвертер из Tasm и Alasm в текст
    от Raider в разделе Программирование
    Ответов: 8
    Последнее: 26.03.2019, 16:40
  2. Ответов: 12
    Последнее: 09.06.2018, 08:22
  3. Пишем текст на ПЦ формат 42 ZX как???
    от Mad Killer/PG в разделе Утилиты
    Ответов: 18
    Последнее: 15.07.2011, 22:39

Ваши права

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