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

User Tag List

Страница 663 из 665 ПерваяПервая ... 659660661662663664665 ПоследняяПоследняя
Показано с 6,621 по 6,630 из 6647

Тема: Версии игр и софта, найденные на кассетах

  1. #6621
    Member
    Регистрация
    28.08.2023
    Адрес
    г. Брест, Беларусь
    Сообщений
    119
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    48
    Поблагодарили
    27 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Разгадал загадку, с помощью киножурнала «Хочу всё знать!» ZXS это комбинация length-block, только там внутри неонка RLE. Зачем так сложно, не знаю, может, чтобы блоки можно было индивидуально распаковывать.

    https://mega.nz/file/YS9CmBgD#1QmsUl...Y7NtmXHuVjeZiU

    Значит, формат такой:
    - файл состоит из блоков, блоки записаны как в TAP: два байта длина и соответствующее количество байт
    - каждый блок, в свою очередь, запакован RLE: там последовательность cc CC b1 [... bN], где cc CC количество байт в фрагменте. Если старший бит CC выставлен в 1, то дальше идёт один байт, который надо повторить cc+((CC&0x7f)<<8) раз. Если старший бит CC -- 0, то следует последовательность байт длинной cc+CC<<8
    - RLE блок заканчивается двумя нулевыми байтами, тоже не совсем понятно, зачем, но потоковое раскодирование упрощает

    zxs2tap.py


    Код:
    #!/usr/bin/env python3
    
    # Copyright 2025 TIsland Crew
    # SPDX-License-Identifier: Apache-2.0
    
    # ZXS archive unpacker, see
    # https://zx-pk.ru/threads/11422-versii-igr-i-softa-najdennye-na-kassetakh.html?p=1210270&viewfull=1#post1210270
    
    from sys import argv
    from struct import pack, unpack
    
    DEBUG = False
    
    def chksum(*args):
      chksum = 0
      for data in args:
        for b in data: chksum ^= b
      return chksum
    
    def zxs_unpack(n: str):
        print(n, 'to TAP')
        with open(f'{n}.tap', 'wb') as t:
            with open(n, 'rb') as f:
                zxs_block_read(f, t)
        print(n, 'TAP ready')
    
    def zxs_block_read(f, t):
        # phase 1: read "container" blocks
        blkn = 0
        while buf := f.read(2):
            blkn += 1
            size = unpack('<H', buf)[0]
            if 0 == size: break
            print('#{: 2d} @0x{:06x} length {:d}'.format(blkn, f.tell()-2, size))
            # phase 2: unpack RLE encoded data for each block
            # NOTE: so far in all files we've seen the RLE sequence ends with 00 00
            # hence there was no need to track RLE block size
            zxs_rle_unpack(f, t)
    
    
    def zxs_rle_unpack(f, t):
        print('    ', end='')
        data = bytearray(2) # placeholder for unpacked size (2 bytes)
        while buf := f.read(2):
            ( count, flag ) = unpack('<BB', buf)
            if 0 == count and 0 == flag:
                break # end of RLE encoded block
            count += (flag&0x7f)<<8
            if 0x80 == flag&0x80: # repeating byte
                b = f.read(1)
                if DEBUG: print('0x{}X{:d};'.format(b.hex(), count), end='')
                data.extend(b * count)
            else:   # arbitrary sequence
                if DEBUG: print('b{:d};'.format(count), end='')
                data.extend(f.read(count))
        cs = chksum(data[2:-1]) # unpacked data checksum
        csa = unpack('<B', data[-1:])[0]    # recorded checksum
        data[0:2] = pack('<H', len(data)-2) # unpacked block length
        if DEBUG: print(' checksum {:d} vs {:d}'.format(cs, csa))
        if csa != cs:
            print('    WARNING: checksum mismatch, fixed')
            data[-1] = cs
        print('    Unpacked size: {:d}'.format(len(data)-2))
        t.write(data)
    
    if __name__ == '__main__':
        for arg in argv[1:]:
            if '-d' == arg:
                DEBUG = not DEBUG
            else:
                zxs_unpack(arg)
    
    # EOF vim: et:ai:ts=4:sw=4:
    [свернуть]


    P.S. В принципе, формат остроумный, позволяет декодировать файл используя только буфер в 2 байта (не считая переменных, конечно). Опять же, зачем такая оптимизация, когда есть как минимум 640k... Было бы очень интересно узнать откуда есть пошло то ПО для обработки/записи.
    Последний раз редактировалось Chwe; 02.02.2025 в 23:47. Причина: Программка для преобразования ZXS в TAP

  2. Эти 4 пользователя(ей) поблагодарили Chwe за это полезное сообщение:

    Bedazzle (03.02.2025), crackintosh (03.02.2025), SlashNet (02.02.2025), SoftLight (03.02.2025)

  3. #6622
    Guru Аватар для Lethargeek
    Регистрация
    08.09.2005
    Адрес
    Воронеж
    Сообщений
    4,880
    Записей в дневнике
    3
    Спасибо Благодарностей отдано 
    307
    Спасибо Благодарностей получено 
    279
    Поблагодарили
    220 сообщений
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Bedazzle Посмотреть сообщение
    Разговор был про формат тап файла,
    я и говорю же именно про формат, который никаких требований к смыслу и назначению конкретных байтов не предъявляет
    Прихожу без разрешения, сею смерть и разрушение...

  4. #6623
    Veteran Аватар для JeRrS
    Регистрация
    02.02.2005
    Адрес
    г. Екатеринбург
    Сообщений
    1,403
    Спасибо Благодарностей отдано 
    67
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    89 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Кстати, если вдруг у кого остались в процессе каких-то ранних оцифровок хакнутые версии которые по факту оказались с битыми блоками или допустим сохранился только загрузчик - можете скинуть я посмотрю что с этим можно будет сделать.
    Группа в ВК, посвященная кассетным версиям игр для спектрума
    В коллекции:Plazma-128K (YM+TR-DOS), GRM-128 (YM+TR-DOS), Кворум 128+, Эксперт-006, Квант V3.а, Квант (Didaktik), Sintez-M (Intercompex), Компаньон-2 (V2.2), Radon Plus, Урал 8-64К

  5. #6624
    Veteran Аватар для JeRrS
    Регистрация
    02.02.2005
    Адрес
    г. Екатеринбург
    Сообщений
    1,403
    Спасибо Благодарностей отдано 
    67
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    89 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Народ, сможете поглядеть эти два релиза? после загрузки не откликается на нажатие клавиш https://transfiles.ru/eqcs1

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

    p.s: и еще https://transfiles.ru/xsole тут второму блоку конечно хорошо досталось, но может хотя бы можно перевести и подправить загрузчик чтобы без второго грузилось? во втором конечно какая-то бегущая строка должна была быть:

    �HELLO DEAR USERSDїZX-SPECTRUM.DMITRY LABUTCKY PRESENT FOR YOU e}e odnu igru na{ihџ ote~estwennyh programmistow
    Группа в ВК, посвященная кассетным версиям игр для спектрума
    В коллекции:Plazma-128K (YM+TR-DOS), GRM-128 (YM+TR-DOS), Кворум 128+, Эксперт-006, Квант V3.а, Квант (Didaktik), Sintez-M (Intercompex), Компаньон-2 (V2.2), Radon Plus, Урал 8-64К

  6. #6625
    Member
    Регистрация
    28.08.2023
    Адрес
    г. Брест, Беларусь
    Сообщений
    119
    Спасибо Благодарностей отдано 
    12
    Спасибо Благодарностей получено 
    48
    Поблагодарили
    27 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от JeRrS Посмотреть сообщение
    Народ, сможете поглядеть эти два релиза? после загрузки не откликается на нажатие клавиш https://transfiles.ru/eqcs1
    И там и там с 0x4004 крутится цикл опроса клавиатуры, который заключается в чтении LAST-K. Но почему-то клавиатура находится в G режиме и вместо '1' и '2' приходит 0x81 и 0x82. Дальше не смотрел.

  7. #6626
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,101
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    174
    Спасибо Благодарностей получено 
    1,353
    Поблагодарили
    887 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от JeRrS Посмотреть сообщение
    два релиза? после загрузки не откликается на нажатие клавиш
    вот оригиналы
    https://vtrd.in/gtrd.php?f=dHJhbnNsYXQvSkIyUl9XTFMuemlw
    http://spectrum4ever.org/download.ph...lltape&id=3048

  8. #6627
    Veteran Аватар для JeRrS
    Регистрация
    02.02.2005
    Адрес
    г. Екатеринбург
    Сообщений
    1,403
    Спасибо Благодарностей отдано 
    67
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    89 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Короче, в Krakout3 если я правильно понял не происходит самого главного, а именно randomize usr 16384, ибо если я за ранее просто дампами загружу блоки в 25000 и уже распакованную в конце картинку в 16384 и сделаю randomize usr 16384 то у меня все работает, вопрос как это пофиксить в загрузчике?
    Группа в ВК, посвященная кассетным версиям игр для спектрума
    В коллекции:Plazma-128K (YM+TR-DOS), GRM-128 (YM+TR-DOS), Кворум 128+, Эксперт-006, Квант V3.а, Квант (Didaktik), Sintez-M (Intercompex), Компаньон-2 (V2.2), Radon Plus, Урал 8-64К

  9. #6628
    Veteran Аватар для JeRrS
    Регистрация
    02.02.2005
    Адрес
    г. Екатеринбург
    Сообщений
    1,403
    Спасибо Благодарностей отдано 
    67
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    89 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    p.s: тоже самое и с joe blade 2. я спокойно могу загрузить в память кодовый блок в адрес 27000, вызвать его, затем загрузить последний, вызвать 61000 и затем вызвать 16384 и у меня все прекрасно работает. т.е явно какая-то проблема именно с загрузчиками
    Группа в ВК, посвященная кассетным версиям игр для спектрума
    В коллекции:Plazma-128K (YM+TR-DOS), GRM-128 (YM+TR-DOS), Кворум 128+, Эксперт-006, Квант V3.а, Квант (Didaktik), Sintez-M (Intercompex), Компаньон-2 (V2.2), Radon Plus, Урал 8-64К

  10. #6629
    Guru
    Регистрация
    27.02.2005
    Адрес
    москва
    Сообщений
    14,101
    Записей в дневнике
    1
    Спасибо Благодарностей отдано 
    174
    Спасибо Благодарностей получено 
    1,353
    Поблагодарили
    887 сообщений
    Mentioned
    18 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    удалось разобраться.
    распаковщик (последней) картинки для своей работы использует/портит IY !!!,
    но в оригинальной версии IY восстанавливается (перед возвратом в бейсик),
    тут этого не происходит и в результате сбивается указатель на системные переменные (меняется режим ввода).
    (исправить можно заменив IY/IX)
    Последний раз редактировалось goodboy; 12.02.2025 в 12:56.

  11. #6630
    Veteran Аватар для JeRrS
    Регистрация
    02.02.2005
    Адрес
    г. Екатеринбург
    Сообщений
    1,403
    Спасибо Благодарностей отдано 
    67
    Спасибо Благодарностей получено 
    124
    Поблагодарили
    89 сообщений
    Mentioned
    13 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от goodboy Посмотреть сообщение
    (исправить можно заменив IY/IX)
    Если это меняется заменив какой-то ряд байтов то сможешь указать какой и на какие?
    Группа в ВК, посвященная кассетным версиям игр для спектрума
    В коллекции:Plazma-128K (YM+TR-DOS), GRM-128 (YM+TR-DOS), Кворум 128+, Эксперт-006, Квант V3.а, Квант (Didaktik), Sintez-M (Intercompex), Компаньон-2 (V2.2), Radon Plus, Урал 8-64К

Страница 663 из 665 ПерваяПервая ... 659660661662663664665 ПоследняяПоследняя

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

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

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

Похожие темы

  1. Исходники софта
    от Sayman в разделе Софт
    Ответов: 3
    Последнее: 14.08.2009, 18:11
  2. Полезные ссылки вновь найденные:
    от AAA в разделе Разный софт
    Ответов: 3
    Последнее: 23.06.2008, 20:10
  3. моя коллекция софта
    от moroz1999 в разделе Игры
    Ответов: 7
    Последнее: 25.07.2007, 12:21
  4. Перегон софта PC-ZX
    от spleen в разделе Утилиты
    Ответов: 12
    Последнее: 14.05.2007, 17:33
  5. Архив софта от Himik's ZxZ/PoS-WT
    от himik в разделе Софт
    Ответов: 23
    Последнее: 12.01.2007, 06:41

Ваши права

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