Теперь ничё не грузит, вобще, даже пилот не ловит.
Вид для печати
Теперь ничё не грузит, вобще, даже пилот не ловит.
Во, в турбе еррор, без турбы загрузилось. Знач стало хуже.
Мафон ушёл из жизни полностью... Головку негде достать... (BRG)
---------- Post added at 23:18 ---------- Previous post was at 23:16 ----------
Или сейвер доделывай, мож он глючит.
---------- Post added at 23:20 ---------- Previous post was at 23:18 ----------
Кстати, в турбе пару полос и эррор на пилоте
Когда у меня на унриле было турбо включено, старая версия загрузчика тоже не ловила пилот. Так что это зависит от тонкостей. В любом случае я не рассчитывал загрузчик на работу в турборежиме, когда данные идут с нормальной скоростью. Там все времянки переколбашиваются.
Известные мне глюки сейвера не должны критически сказываться на тестах, которые мы сейчас проводим. Да, из-за неточно выдержанных времянок будет немного плавать скорость; из-за ошибки кодирования будут появляться 5-битовые последовательности чаще, чем необходимо. Но загрузчик должен с этим справляться.
Нет никаких проблем, вы бы раньше сказали - я бы раньше это сделал. Я ведь тупой бот, и не знаю, что надо. У меня смутные подозрения, что компаратор (или ХЗ что там в кишках Спектрума) как-то не так работает, а кассету я цифрую с мафона, там совсем другая система. Вот пожалуйста оцифровка этой кассеты с мафона, а как цифровать со Спектрума - я не знаю, как и откуда брать сигнал. Если подскажите - сделаю.
http://www.sanarin.ru/download/Untitled7.wav
вот еще пример CSW файла который в unreal неправильно работает, в этом случае файл открывается корректно, но чтото не так с паузами - сразу конец ленты наступает...
Да ладно, при чем здесь бот... Я и сам раньше не знал, что так можно :)
Спасибо! Наконец-то мы сможем приблизиться к пониманию того, почему на твоем реале не грузится.
Послушал запись. Сразу заподозрил неладное. Потом посмотрел в звукоредакторе. Нда. Такого качества записи я давно не встречал даже на мафонах! Неудивительно что оно не грузилось. Полоса частот задавлена настолько, что отдельных битов не видно. Даже пилот еле пробивается, хотя его частота в 2 раза меньше битовой частоты. Кроме того присутствует наводка около 4кГц.
Загрузить это шансов нет никаких. Ни с каким угодно хорошим компаратором. Тут не то что загрузчику - тут человеку ничего не видно!Отдельных бит в записи не видно, они пропадают, т.к. очень сильно задавлена полоса частот или сильные фазовые искажения.
Я бы удивился, если бы с записи с таким качеством что-нибудь загрузилось в стандартном формате. Если ты говоришь, что у тебя грузится записанное стандартным синклерским загрузчиком - можешь выложить небольшую запись, сделанную на твоем спеке на ту же кассету в стандартном формате? Просто хочу сравнить и понять, как такое может грузиться.
Головку магнитофона (спековского и того, на котором цифруешь) пробовал спиртом протирать? Такая запись еще часто бывает, если головка загажена.
Фух. У меня прямо гора с плеч. Я-то думал, что дело в несовершенстве загрузчика или зависимости его работоспособности от компаратора, а тут - просто запись плохая.
Мысли прочитал. Я как раз пытался это сделать. Эквалайзером обработал, подавил низкие частоты - потому что они забивали все. Вроде стало лучше выглядеть, на глаз стали различимы биты. Но под эмулятором все равно не грузится. Я не очень большой спец в работе с эквалайзерами, да и инструментов нормальных нет - так, чтобы было видно форму сигнала сразу при подстройке параметров эквалайзера. Но это уже чисто спортивный интерес. Очевидно, что такая запись если и может быть загружена - то только после профессионального ремастеринга.
---------- Post added at 00:14 ---------- Previous post was at 00:13 ----------
Сейчас еще попробую отфильтровать наводку 4кГц - может из-за нее не грузится.
Пожалуйста, вот стандартный загрузчик, грузится без единой проблемы
http://www.sanarin.ru/download/Untitled4.wav
---------- Post added at 01:24 ---------- Previous post was at 01:15 ----------
> Головку магнитофона (спековского и того, на котором цифруешь) пробовал спиртом протирать?
С этой головки грузятся фирменные кассеты, которым по 30 лет. Не имею привычки чинить то, что работает.
Цифрую я с мафона, это отдельный аппарат, с него игры не гружу. Гружу со встроенного мафона спектрума +2. Это маленький мафон, встроенный в Спек, у него вся платка - это один операционник + пассивные элементы, как правильно с неё цифровать - не знаю. Подскажите - сделаю.
Спасибо. Такая запись тоже без обработки эквалайзером не загрузится, хотя и выглядит немного чище. Возможно, дело в головке того магнитофона, с которого ты цифровал кассету. В любом случае протирка головки ваткой, смоченной спиртом - это безопасная операция, от которой хуже не станет.
Как правильно цифровать со встроенного мафона - не знаю. Рыться надо в инете, инфу искать, сейчас уже сил нет.
---------- Post added at 01:13 ---------- Previous post was at 00:46 ----------
Можно попробовать такой вариант оцифровки - подключить комп к звуковому выходу Спека+2. Туда вроде как выводится сигнал с магнитофона, правда, после компаратора - но это даже лучше. Большой плюс - не надо вскрывать комп и работать паяльником. haywire - сможешь оцифровать этот сигнал? Для записи в стандартном и 8b10b-форматах. При этом в стандартном формате, если не трудно, запиши что-нибудь поинтереснее, чем пустой экран. Например, SAVE "a" CODE 0,6912 - будет кусочек ПЗУ, там шумоподобные данные. Для возможности более детально проанализировать сигнал.
вот небольшая статья про мафон в +2 со схемой (на чешском)
http://cygnus.speccy.cz/popis_spectrum128plus2_mgf.php
Оцифровки с выхода Спектрума :
сабжеввый формат, не грузится
http://www.sanarin.ru/download/Untitled8.wav
первые 6912 байт ПЗУ, стандартный загрузчик, грузится отлично
http://www.sanarin.ru/download/Untitled9.wav
haywire, большое спасибо. Сигнал в этих записях выглядит отлично в обоих форматах. Вероятно, причина плохой записи в тех файлах, что ты раньше присылал - это состояние того магнитофона, на котором шло воспроизведение. Тем не менее, после конвертации в tzx файл в формате 8b/10b не грузится у меня под эмулятором! Буду разбираться. Твои записи в этом плане получаются очень ценными, не только давая отрицательный результат, но и давая мне какие-то зацепки для выяснения причин.
---------- Post added at 23:09 ---------- Previous post was at 21:45 ----------
Изучил, почему не грузится. Хоть импульсы и красивые (после работы встроенного компаратора), их длительность гуляет в широких пределах. Половина битового интервала - запросто. В таких условиях у ФАПЧ нет никаких шансов отследить эту пляску. Что ж - попробую еще реализовать загрузчик на том же принципе, что синклерский, тупое измерение времени между фронтами. Можно даже сделать для начала обработчик сигнала на языке высокого уровня, чтобы проверить, можно ли его загрузить таким методом.
Относительно природы искажений, мне кажется, что скорее всего (хотя это и не заметно на сигнале после компаратора), что-то очень нехорошее делается с полосой частот в аналоговом тракте. Очень высокая неравномерность коэффициента передачи, хотя и не такая, как на тех файлах, что я вчера смотрел. Но это лишь догадки. Одно ясно - синклерский формат оказался более устойчивым к такого типа искажениям, чем 8b10b. Буду думать дальше.
Если снижать скорость записи - то зачем вообще нужен этот формат? Я так считаю, что он имеет право на жизнь только если обеспечит существенный прирост скорости при сохранении надежности. В противном случае это менять проверенное шило на непроверенное мыло. Нужно еще учитывать конкуренцию от турбированного синклерского формата (с повышением битовой частоты). Кассетные турбы ведь и раньше существовали, только их распространение было ограничено снижением надежности загрузки. Вот и хотелось заполнить этот пробел новым форматом.
Ладно. Посмотрим, что получится после полного переписывания загрузчика. Сможет ли новый загрузчик загрузить файл, присланный haywire.
Если у вас гуляет длительность импульса на половину битового интервала то это все, сливай масло. Как вы значащий момент то будете вылавливать ?
Тут только интергирование остается, по значащему моменту импульс определить нельзя, надо искать передний фронт, по переднему фронту надо делать кучу замеров до заднего фронта, а потом пытаться понять сколько там бит влезло. Но поскольку у вас на полбита минимум длительность гуляет на один бит просчитаться запросто.
Разве только помехоустойчивое кодирование попытаться добавлять...
Не знаю, не замечал никакого снижения надёжности. Вот кассета terminator 2. x1.6 turbo, 1991 год. Грузится как новенькая, ни разу не сбоила. А насчёт распространённости - практически все фирменнае загрузчики - турбированные в той или иной степени. Просто из-за того, что сам загрузчик надо загрузить, причём, на стандартной скорости, результирующий выигрыш был не особо впечатляющим.Цитата:
Кассетные турбы ведь и раньше существовали, только их распространение было ограничено снижением надежности загрузки.
Мой кассетный опыт в 1992-1993гг говорит о снижении надежности. Хотя я использовал гораздо более быстрые турбы. Вот ходило у нас в Днепропетровске турбо 3х на базе копировщика Sormos-3 и бейсика "Рапид". Для быстрой загрузки игр или рабочих файлов (которые часто перезаписывались) годилось, а для архивации данных - сомнительно.
Это смотря какой загрузчик. В принципе можно сделать турбозагрузчик на сотню с небольшим байт. Это если он скопирует загрузчик из ПЗУ в ОЗУ, релоцирует его и подставит другие значения констант скорости. По сравнению с порядка 30-40кБ данных для средней игры это большая разница, и выигрыш в скорости получается существенный. Другое дело, что в фирменных загрузчиков была навороченная защита, ксорки всякие, и их приходилось долго загружать.
Изучал возможность загрузки файла с искажениями магнитофона Spectrum+2 в формате 8b10b альтернативным методом - измерение интервала между фронтами сигнала.
Прежде, чем писать загрузчик на ассемблере Z80, я решил проверить принципиальную возможность загрузки этим методом. Для этого была написана небольшая программа на Матлабе, которая измеряет время между фронтами сигнала и строит гистограмму этих интервалов. Поскольку в формате 8b/10b встречаются интервалы длиной в 1, 2, 3, 4 и 5 битовых интервалов - то логично было бы увидеть на гистограмме 5 пиков. Что я и увидел при обработке одного из вав-файлов в формате 8b/10b, записанного на эмуляторе. Пики четко разделены между собой, что позволяет различать биты путем сравнения измеренного интервала со средним значением между соседними пиками.
Я построил аналогичную гистограмму для wav-файла, присланного haywire. Из нее четко видно, что пики сливаются и, следовательно, различение битов путем сравнения с пороговыми числами интервалов между фронтами невозможно.
Картинки прилагаю.
Быть может, этот файл все же можно загрузить, но уже не на Спеке и не в реальном времени, а с помощью какой-нибудь более умной программы на том же Матлабе, которая бы использовала более тонкий ФАПЧ, чем тот, который в загрузчике. Который бы, к примеру, лучше подавлял фазовое дрожание входного сигнала. Более точно подстраивался к частоте за счет использования чисел с плавающей точкой и имел бы фазовый детектор, который не просто дает ответ вида "1/0", т.е. опережает ли фронт импульса внутренние часы или отстает от них, а также измерял бы, насколько. Может быть, с такими средствами этот файл и можно загрузить, кто знает.
Но я склоняюсь к мысли, что на Спектруме в реальном времени это невозможно. И обусловлено это не качеством загрузчика, а самим форматом 8b/10b, который оказался менее устойчивым к тому типу искажений, которые возникают в магнитофонной системе у Haywire, чем стандартный синклерский формат.
На этом, пожалуй, я сдаюсь и заканчиваю работу над проектом. Спасибо всем, кто участвовал и наблюдал! Опыт был поучительный - надеюсь, не только для меня. Работая над этим форматом и, в особенности, над загрузчиком, я попрактиковался в вещах, которые не делал никогда раньше, и не исключено, что этот опыт пригодится в каких-то будущих проектах.
Синклерский же кассетный формат в очередной раз утер всем нос и заслужил дополнительное почтение. Респект инженерам, которые его разработали.
Ящитаю, начать стоит с того, чтоб проанализировать характер искажений, вносимых в сигнал мафоном. Исходя из этого, думать об алго модуляции, коррекции и детекции сигнала. Уровнем выше делать 8->10 и коррекцию ошибок.
Я думаю, вероятнее всего, это искажения вида "неравномерность частотной характеристики". Вероятно, на низких частотах имеется большой горб. Из-за этого сигнал как бы "едет" на длинной волне, компаратор каждый раз сравнивает импульсы на разном участке их фронта. Отсюда и переменное расстояние между фронтами каждый раз.
Я даже считаю, что на нормальном магнитофоне таких сильных искажений быть не должно. У меня был магнитофон "Легенда-404" четвертой (т.е. самой худшей) группы сложности - и то лучше звучал; я звуковой сигнал, оцифрованный в конце 2000х с кассет, записанных на этом маге в начале 90х годов, смотрел в звукоредакторе - конфетка по сравнению с тем, что прислал Haywire. Может быть, у него головка давно не чищена или вообще расстроена, может быть еще что-то... Но факт - что синклерский формат при этом выжил, а 8b10b - нет.
В телекоммуникациях, где находил применение этот формат, обычно нет большой неравномерности АЧХ. Там обычно высокие частоты только задавлены, но низкие хотя бы не выпирают. Я тестировал и 8b/10b с задавленными высокими еще до того, как тему эту открыл. Все грузилось. Но кто же знал, что так будет.
Если делать модуляцию - то вся скорость сойдет на нет. А коррекция тут лучше всего - это эквалайзером обработать сигнал, но это должен быть аналоговый эквалайзер, программно на Спеке его не реализуешь.
Хоть я и оставляю формат 8b/10b как бесперспективный для Спектрума, я задумался над интересной задачей - контроль спектра битовой последовательности. В коде 8b/10b подавляется постоянная составляющая, т.е. сам спектр последовательности заполняет всю полосу от 0 до 2кГц, однако на постоянной составляющей имеет нуль. В ходе некоторых размышлений я понял, что в битовой последовательности, содержащей неограниченную информацию, нули могут быть только на конечном количестве частот. Если сделать несколько нулей на низких частотах - там, где, предположительно, АЧХ имеет горб - то может быть удастся победить проблему. В общем, я на досуге попытаюсь разработать или найти другую схему кодирования - а там посмотрим, удастся ли с ее помощью добиться чего-нибудь интересного на Спектруме.
Нашел интересную книжку John R. Barry, Edward A. Lee , David G. Messerschmitt "Digital communication", ее 19 глава, посвященная контролю спектра кодированных данных, имеется в свободном доступе. Там как раз рассматривается теория построения блочных кодов, вроде 8b/10b (он является лишь частным случаем). Читаю запоем. Надежда есть!
Провел эксперимент на устойчивость форматов к неравномерности частотной характеристики. Обработал две записи, одну в синклерском формате, а другую в 8b/10b, сначала фильтром Баттерворта 4 порядка с частотой среза (по -3дБ) на 1800Гц. Оба формата с этим справились. Затем обработал эквалайзером, сделав пик на частоте 183Гц амплитудой 12дБ и добротностью 2. После этого синклерский загрузчик смог загрузить файл, а 8b/10b - нет. Процесс сорвался на первых же байтах, аналогично тому, как это происходило у Haywire. Поэтому думаю, что я нашел "образцовую" конфигурацию искажений, на которой можно тестировать форматы. Есть идея сделать формат попроще, чем 8b/10b, который был бы не так эффективен в скорости, зато более устойчив к горбам на низких частотах. Этот "компромиссный" формат имеет простое кодирование и немного выигрывает в скорости по сравнению с синклерским. Как сделаю для него сейвер и загрузчик - отпишусь.
В любом случае коды типа 8b/10b для работы с лентой не стрельнут. У них широкий спектр, поэтому ФАПЧ будет постоянно пролетать мимо тазика. Такой метод кодирования можно использовать на "линии связи" на которой задержка и крутизна фронта не гуляет.
Магнитофон в этом смысле штука очень капризная (очень сильно гуляет как скорость так и АЧХ/ФЧХ тракта), а для того чтобы от ФАПЧ была реальная польза нужно чтобы сигнал в спектре имел всего один ярко выраженный пик, то есть либо манчестер, либо дифференциальный манчестер.
Собственно очень похожая (почти такая-же но другая, там FM в чистом виде) кухня и реализована в фирменном спековском загрузчике.
На мой взгляд у метода есть реальный запас по увеличению символьной скорости, правда придется добавлять помехозащищенное кодирование (магнитная лента имеет склонность к выпадениям сигнала), причем хэмминг на большой скорости не потянет (будет выпадать пачка мит идущих подряд), и надо использовать пакетный код, что-нть вроде рида-соломона (да дохрена их).
По умозрительным прикидкам символьная скорость будет расти быстрее избыточности корректирующего кода, поэтому выигрыш в 1.5...1.75 раза по сравнению со стандартной я думаю получить можно без снижения надежности считывания по сравнению со стандартной.
Если на магнитной ленте выпадают биты, то обычно это десятки-сотни бит. С такой коррекцией никаким обозримо простым лоадером не обойдешься.
Еще одна проблема - это сильный завал АЧХ в области высоких частот, неравномерность АЧХ в процессе одной записи, изрядное гуляние скорости, а так же в некоторых случаях фазово-частотные искажения, из-за которых слепляются кобинации 1->0 и 0->1 в нечто среднее и сложноразличимое.
От пылинок выпадают обычно два-три бита (зажеванность ленты не рассматриваем). На самом деле рид-соломон позволяет исправлять и 100 выпавших бит и 200, просто вычислительных мощностей надо больше, и избыточной информации тоже.
Завал АЧХ влияет только на крутость фронтов, при манчестере это некритично. Гуляние скорости - тоже, спектр сигнала сосредоточен либо на символьной скорости N либо на N/2 (в зависимости от того нули или единицы пишутся), причем манчестер самосинхронизирующийся (то есть в каждом бите можно выделить несущую).
Единственная серьезная проблема - выпадения сигнала и достаточно большая вычислительная сложность рида-соломона.
Нет, от пылинок, пожалуй, не выпадает.
Завал АЧХ влияет не просто на крутизну фронтов, а в плохих случаях способно вообще уничтожить нулевые биты:
http://s018.radikal.ru/i513/1307/a8/ca16a4a5179d.png
Гуляние скорости тоже может тоже быть весьма интенсивным, затрудняя синхронизацию даже в стандартном ЧМ сигнале.
Новости следующие.
Начитавшись теории и по результатам размышлений, я реализовал еще один кассетный формат для экспериментов. Он очень похож на синклерский формат, как по смыслу, так и по звуку и скорости. Однако у него постоянная (в отличие от синклерского) скорость записи, которая равна скорости записи нулей в синклерском формате. Поэтому, в наихудшем случае скорость нового формата совпадает с синклерским; в наилучшем - превосходит его в 2 раза, а в среднем - превосходит его в полтора раза. Так как выигрыш в скорости незначительный, формат подходит главным образом для испытаний на магнитофоне haywire. Я испытывал его на эмуляторе, создавая сигнал с выбросами АЧХ на низких частотах при заваленных высоких - грузится не хуже, чем синклерский. Так что надеюсь, что на этот раз все пойдет. Прилагаются, как обычно, исходники загрузчика и сохранялки, программа-конвертор с исходником, и tap-файл с тестовой программой, которую следует запустить на реале.
Загрузчик не на 100% вылизан по тактам, но вроде работает. Вылизывать загрузчик буду, когда создам формат с приемлемой работоспособностью.
Кодировка в новом формате является простейшим бимодальным блочным кодом, преобразующим каждый бит данных в 2 кодированных бита следующим образом. В первом состоянии кодера, "0" кодируется как "10", а "1" - как "11". Во втором состоянии все инвертируется: "0" кодируется как "01", а "1" - как "00". Состояния кодера переключаются всякий раз, когда кодируется бит данных "1".
Отсюда можно заметить, что код сбалансирован по постоянному току, а максимальная длина последовательности одинаковых бит составляет 2. Максимальное значение текущей битовой суммы (Running Digital Sum, RDS) составляет +-1. Эти характеристики кода такие же, как у синклерского формата.
Этот код также можно описать так, что лог. "0" соответствует два фронта сигнала, а лог. "1" - один фронт. Такой же код применяется при передаче сигнала по кабелю S/PDIF. Формат этот применяется и на дискетах, где он называется "FM".
Просьба к haywire - провести испытания формата на своем реале. По результатам испытаний будем изобретать более эффективные форматы.
Не работает.
http://www.sanarin.ru/pic/r4.jpg
Ну и ну! Это уже начинает напоминать детективную историю! Haywire, можешь прислать вав-файл с сигналом магнитофона? Попробую покумекать, в чем еще может быть дело. Если можешь, пришли два файла: первый со Спектрума, с аудиовыхода, а второй - с другого магнитофона. Спасибо!