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

User Tag List

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

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

  1. #1
    Master
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    880
    Благодарностей: 470
    Mentioned
    0 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 в 21:23. Причина: выпуск обновления

  2. Эти 45 пользователя(ей) поблагодарили Barmaley_m за это полезное сообщение:
    Alex Rider (19.05.2013), alvis (20.05.2013), bakanovse (29.05.2013), bigral (19.05.2013), breeze (19.05.2013), BYTEMAN (19.05.2013), CityAceE (23.05.2013), CodeMaster (21.05.2013), Cooper (19.05.2013), DDp (19.05.2013), Dimaz (19.05.2013), Djoni (19.05.2013), drbars (19.05.2013), Edward (29.05.2013), Eltaron (19.05.2013), GriV (10.11.2016), introspec (19.05.2013), jerri (19.05.2013), John North (19.05.2013), key-jee (19.05.2013), klondike (13.06.2013), Kubas (19.07.2013), Lion17 (19.05.2013), mastermind (26.03.2017), Mdesk (19.05.2013), MEGAMONSTER (23.07.2013), NEO SPECTRUMAN (21.04.2017), NovaStorm (20.05.2013), perestoronin (18.05.2013), PERESTROiKA (23.05.2013), Protom (19.05.2013), psb (18.05.2013), Raydac (19.05.2013), Robus (20.05.2013), Slil (19.05.2013), SoftLight (19.05.2013), solegstar (21.05.2013), sq/skrju (23.05.2013), svofski (21.05.2013), Titus (18.05.2013), UEA (20.05.2013), Vadim (19.05.2013), Граф Куракин (19.05.2013), Максагор (27.05.2013), проф (21.05.2013)

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

  4. #2
    Guru Аватар для jerri
    Регистрация
    01.03.2005
    Адрес
    Samara
    Сообщений
    3,363
    Благодарностей: 706
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Какие возможности в организации красивых бордюрных эффектов?
    Можно сделать пламя как в академии?
    С уважением,
    Jerri / Red Triangle.
    [02.05.2014] не забудь этот день. Чубайс должен умереть. Dixi.
    [l'Abbey des morts TSEvo EV...5%] kiwi кошелек +79178162712

  5. #3
    Master
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    880
    Благодарностей: 470
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  6. #4
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    10,947
    Благодарностей: 1520
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

  7. #5
    Banned Аватар для SoftLight
    Регистрация
    28.02.2005
    Адрес
    Москва
    Сообщений
    1,054
    Благодарностей: 789
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  8. #6
    Activist
    Регистрация
    04.07.2012
    Адрес
    г. Москва
    Сообщений
    362
    Благодарностей: 180
    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 в 10:59.

  9. Этот пользователь поблагодарил haywire за это полезное сообщение:
    Barmaley_m (19.05.2013)

  10. #7
    Master
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    880
    Благодарностей: 470
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

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

  11. #8
    Guru Аватар для newart
    Регистрация
    19.01.2005
    Адрес
    Санкт-Петербург
    Сообщений
    10,947
    Благодарностей: 1520
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  12. #9
    Master
    Регистрация
    08.05.2007
    Адрес
    Dnepropetrovsk
    Сообщений
    880
    Благодарностей: 470
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  13. #10
    Master
    Регистрация
    25.03.2013
    Адрес
    г. Лондон, Великобритания
    Сообщений
    948
    Благодарностей: 645
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

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

  14. Этот пользователь поблагодарил introspec за это полезное сообщение:
    Barmaley_m (19.05.2013)

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

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

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

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

Похожие темы

  1. ПК Поиск - Кассетный интерфейс
    от Tronix в разделе Поиск
    Ответов: 101
    Последнее: 24.10.2017, 19:58
  2. Кассетный магнитофон.
    от Николай в разделе Барахолка (архив)
    Ответов: 1
    Последнее: 03.04.2010, 14: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

Ваши права

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