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

User Tag List

Страница 1 из 32 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 313

Тема: Новый, более эффективный кассетный формат

  1. #1
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,053
    Спасибо Благодарностей отдано 
    218
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    Cool Новый, более эффективный кассетный формат

    Предлагаю вашему вниманию реализацию нового кассетного формата для ZX Spectrum.

    Среди современных ему компьютеров, кассетный формат ZX Spectrum всегда выглядел в выгодном свете. По сравнению с Atari, C64, Радио-86РК и др., он не требовал специализированных магнитофонов, имел относительно высокую плотность записи и надежность хранения информации на кассете. Тем не менее, мне издавна не давал покоя вопрос о некоторой неэффективности формата "FM", как его называли в литературе. Ведь для записи каждого бита используется два фронта сигнала, да и само слово "FM" всегда ассоциируется со словом "MFM", где применяется более эффективное кодирование. По прошествии лет я так и не придумал, как можно прикрутить MFM к кассете, зато наткнулся на более интересную вещь - код 8b/10b.

    Этот код заменяет каждые 8 бит данных на последовательность из 10 бит, обладающую следующими важными свойствами:
    1) Количество нулей и единиц в такой последовательности либо одинаково, либо отличается нормированно. Тем самым кодированный сигнал имеет нулевую постоянную составляющую, что позволяет записывать его на магнитофон, передавать по линии без связи по постоянному току и т.д. без потери информации.
    2) Количество подряд идущих одинаковых бит никогда не превышает 4. Тем самым снижаются требования по передаче низких и ультранизких частот, а также гарантируется достаточно фронтов сигнала для синхронизации.

    Меня заинтересовал вопрос реализации формата для записи на кассету в ZX Spectrum, использующего этот код, и я сначала сделал программу сохранения - чтобы послушать, как звучат данные в этом формате, а затем и загрузчик: ведь мало ли, как они звучат, если их загрузить нельзя!

    При реализации формата я делал упор на устойчивость к типичным искажениям сигнала магнитофона, а именно: отличающаяся на разных магнитофонах скорость записи, ограниченный спектр пропускаемых частот. Так как оригинальный кассетный формат Sinclair весьма неприхотлив к качеству записи и состоянию кассеты - то я постарался сделать новый формат таким, чтобы он не уступал, а по возможности - и превосходил оригинальный формат в этом. Время между ближайшими фронтами сигнала было выбрано таким же: 0.25мс. В результате требуемый диапазон частот составляет 2кГц, причем его верхняя часть может быть даже подрезана. Я специально обрабатывал сигнал фильтром Баттерворта с частотой среза около 1700Гц (при этом 2кГц, хоть и ослабленная, но немного пропускается), и загрузка происходила без ошибок. Также я менял скорость записи в пределах +-30%, в том
    числе плавно во время загрузки - и это тоже не приводило к ошибкам. Справедливости ради следует заметить, что оригинальный формат имеет примерно такие же требования к скорости и полосе частот сигнала.

    Добиться такой устойчивости стало возможным только за счет тщательно разработанного загрузчика. В нем, для подстройки к скорости записи, используется программно реализованная система ФАПЧ. Вместо ожидания фронта сигнала, как это сделано в загрузчике от Sinclair, в моем загрузчике используется фазовый детектор. При загрузке каждого бита производится два измерения сигнала магнитофона: одно в середине временного интервала, который приходится на этот бит, а второе - на границе между битами. Если два подряд идущих бита различны
    (если был фронт) - то измерение "на границе" совпадет с предыдущим, либо последующим битом. И тогда, если оно совпало с предыдущим - значит "внутренние часы" загрузчика идут быстрее, чем скорость записи, а если совпало с последующим - то наоборот, медленнее. На этой основе
    производится подстройка "внутренних часов" загрузчика. Подобным образом в современной электронике осуществляется прием данных по линиям связи с автоподстройкой к скорости и/или к задержке. При этом собственно данные считываются в наиболее выгодный момент времени - в середине временного интервала, в котором записан
    бит. Это дает дополнительную устойчивость к шумам и искажениям сигнала. Не исключено, что устойчивость нового формата даже выше, чем оригинального, но тут надо еще проводить испытания. На реале я пока что ничего не испытывал, нет возможности. Поэтому, если кто-нибудь может проверить мою систему на реале с магнитофоном - это будет очень полезно для проекта.

    Загрузчик также может корректно принимать инвертированный сигнал - для тех случаев, когда тракт магнитофона его инвертирует.

    Скорость. Тут ситуация не очень простая. Формат 8b/10b дает постоянную скорость записи независимо от состава данных, однако скорость оригинального синклеровского формата зависит от их состава. У синклеровского формата на запись 8 нулей расходуется 16 временных интервалов по 0.25мс, а на запись 8 единиц - 32 интервала. У формата
    8b/10b для записи любых 8 бит используется 10 интервалов. Поэтому, если все данные нулевые - то формат 8b/10b дает приращение скорости записи в 1.6 раза, если все единицы - в 3.2 раза, а если данные содержат примерно одинаковое количество нулей и единиц, что имеет место в случае компрессированных данных - то средняя скорость записи выше оригинала в 2.4 раза.

    Контроль ошибок. В своей реализации формата я применил контрольную сумму Флетчера, которая имеет лучшую способность к обнаружению ошибок, чем простая битовая четность, примененная в оригинальном синклеровском формате.

    Применение. Думаю, что формат мог бы найти применение у тех владельцев реалов, которые все еще используют магнитофон для загрузки программ. Можно делать новые кассетные релизы
    дем или игр в этом формате. Также из него могла бы получиться неплохая защита от копирования, если бы это в настоящее время имело смысл.

    "Музыка загрузки". Данный формат, как и оригинальный синклеровский, дает некоторую "музыкальность" на последовательностях данных, содержащих закономерности. Попробуйте сохранить в нем какой-нибудь экран, например! На случайных данных звук сигнала 8b/10b ближе к "белому шуму". Это и логично: повышение плотности записи при той же полосе частот должно приближать сигнал к шумоподобному виду.

    Приложение. Программы сохранения и загрузки, имеющие такой же интерфейс, как и оригинальные синклеровские загрузчик и сохранялка. LD IX, addr, LD DE, len, LD A, flag. Также прилагается программа на Си, которая конвертирует tzx- и bin-файлы в tzx- или csw-файлы в кодировке 8b/10b, так что их можно подставить загрузчику на эмуляторе или реале.

    Надеюсь, кому-нибудь будет интересно!

    Вторая версия от 25.05.2013 (устарела)

    Последнее обновление от 17.07.2013: существенно улучшена работа загрузчика, уменьшено фазовое дрожание ФАПЧ, верхний предел скорости записи поднят до +30% (было +25%). Новая программа на Си (исходник и екзешник) для создания tzx- и csw-файлов с данными в формате 8b/10b.
    Вложения Вложения
    Последний раз редактировалось Barmaley_m; 17.07.2013 в 23:23. Причина: выпуск обновления

  2. Этот пользователь поблагодарил Barmaley_m за это полезное сообщение:

    Тайльнемер (19.03.2021)

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

  4. #2
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    4,746
    Спасибо Благодарностей отдано 
    256
    Спасибо Благодарностей получено 
    265
    Поблагодарили
    199 сообщений
    Mentioned
    12 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Какие возможности в организации красивых бордюрных эффектов?
    Можно сделать пламя как в академии?
    С уважением,
    Jerri / Red Triangle.

  5. #3
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,053
    Спасибо Благодарностей отдано 
    218
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от jerri Посмотреть сообщение
    Какие возможности в организации красивых бордюрных эффектов?
    Можно сделать пламя как в академии?
    Я сделал бордюрные эффекты похожими на оригинальный синклеровский загрузчик. Но при желании можно сделать что угодно. Там много мест с задержками, которые можно (при условии строгого сохранения кол-ва тактов) заменять любым кодом. Вообще загрузчик в большей части своей строго рассчитан по времени выполнения каждого его участка. Если это нарушить - снизится надежность загрузки.

  6. #4
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,435
    Спасибо Благодарностей отдано 
    191
    Спасибо Благодарностей получено 
    145
    Поблагодарили
    61 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А в сухом остатке что?

    1. Красивости при загрузке - под вопросом
    2. Защита от копирования - не актуально
    3. Скорость загрузки - тестов нет (хотя бы на 5-10 известных играх)
    4. Нет сравнения длинны с оригинальным загрузчиком

  7. #5
    Guru Аватар для SoftLight
    Регистрация
    28.02.2005
    Адрес
    Москва
    Сообщений
    2,081
    Спасибо Благодарностей отдано 
    732
    Спасибо Благодарностей получено 
    450
    Поблагодарили
    249 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Красивости при загрузке все те же что и в стандартном загрузчике. Скорость загрузки в среднем в 1,5 быстрее. Мне интересно с научной точки зрения.

  8. #6
    Master
    Регистрация
    04.07.2012
    Адрес
    г. Москва
    Сообщений
    550
    Спасибо Благодарностей отдано 
    5
    Спасибо Благодарностей получено 
    83
    Поблагодарили
    39 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    1. Всё это, конечно, хорошо. Но требовать наличия на компьютере программы за 150 тысяч рублей, это конечно, круто, но
    2. Не работает на реале. ZX-Spectrum +2 серый. Проблем с лентой нет, грузит турбированные лицензии, которым по 30 лет. Tape loading error.
    Загрузил tape.bin с адреса 32768
    сохранил экран (print usr 32768)
    перемотал ленту
    Загрузил loader.bin адреса 32768
    randomize usr 32678
    результат на скрине

    Длительность записи получается действительно в разы меньше. Дело за малым - чтоб оно ещё работало.
    Последний раз редактировалось haywire; 19.05.2013 в 12:59.

  9. #7
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,053
    Спасибо Благодарностей отдано 
    218
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Ндп, жаль, что первый тест на реале не удался. Я вел разработку на эмуляторе и, хоть и вносил в сигнал преднамеренные искажения, ничто не заменит тест в реальной жизни. Если кто-нибудь еще сможет провести тест на других реалах - буду благодарен. Со временем и сам доберусь до реала и буду выяснять, в чем проблемы, и дорабатывать загрузчик.

    По скорости тесты проводить не надо: ее можно и теоретически предсказать. В среднем в 2.4 раза выше оригинала. Длина загрузчика - около 600 байт.

  10. #8
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    11,435
    Спасибо Благодарностей отдано 
    191
    Спасибо Благодарностей получено 
    145
    Поблагодарили
    61 сообщений
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Barmaley_m Посмотреть сообщение
    Длина загрузчика - около 600 байт.
    А у фирменного?

  11. #9
    Veteran
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    1,053
    Спасибо Благодарностей отдано 
    218
    Спасибо Благодарностей получено 
    47
    Поблагодарили
    31 сообщений
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от newart Посмотреть сообщение
    А у фирменного?
    У фирменного меньше. Но мой, думаю, тоже можно запихнуть в свободное место ПЗУ бейсика, если возникнет такое желание.

  12. #10
    Master
    Регистрация
    25.03.2013
    Адрес
    г. Лондон, Великобритания
    Сообщений
    948
    Спасибо Благодарностей отдано 
    9
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    3 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Мне кажется, работа очень интересная и полезная, даже если пока не работает до конца полноценно.
    Во-первых, интересно лучше понять природу ошибок чтения с ленты с т.зр. кассетного загрузчика (что не то же самое, что базовые принципы, вполне себе очевидные). Например, я писал в своё время турбированный загрузчик, навеянный рассказами о загрузчике БК, который на моём магнитофоне работал очень ненадёжно. Было бы интересно понять, возможно ли найти схему турбирования, которая дала бы стабильное чтение при, скажем, двойной плотности.
    Во-вторых, применён интересный нетривиальный код, что образовательно (для меня, по крайней мере).
    В-третьих, не нужно забывать, что всё ещё есть люди пишущие на кассеты и читающие игры на реалах. Это мог бы быть неплохой для них подарок.

Страница 1 из 32 12345 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. [Поиск 1] Кассетный интерфейс
    от Tronix в разделе Поиск
    Ответов: 112
    Последнее: 06.02.2024, 08:14
  2. Кассетный магнитофон.
    от Николай в разделе Барахолка (архив)
    Ответов: 1
    Последнее: 03.04.2010, 15:49
  3. Куплю Магнитофон кассетный Электроника-302-1
    от hardrice в разделе Барахолка (архив)
    Ответов: 16
    Последнее: 18.02.2010, 12:13
  4. Ответов: 13
    Последнее: 05.11.2007, 22:48
  5. Ответов: 2
    Последнее: 26.02.2005, 18:17

Ваши права

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