Мм не имея перед глазами картинок, честно говоря, очень трудно все это представлять. Заходи почирикать http://www.webwhiteboard.com/#pnd86254
- - - Добавлено - - -
Протокол заседания двух Леонардо:
http://i.imgur.com/U9TOXXY.png
Вид для печати
Мм не имея перед глазами картинок, честно говоря, очень трудно все это представлять. Заходи почирикать http://www.webwhiteboard.com/#pnd86254
- - - Добавлено - - -
Протокол заседания двух Леонардо:
http://i.imgur.com/U9TOXXY.png
А чего сразу не RLL ???
https://en.wikipedia.org/wiki/Run-length_limited
Или он не регулярный (или как это там называется когда один принятый бит не всегда равен одному биту)...
KTSerg, RLL на 8080 очень сложно декодировать в реальном времени, даже (1,7). Скорости так точно не добиться. Вот если бы разработчики мудро использовали таймер, это возможно могло бы дать возможность заниматься декодированием пока замеряется очередной интервал. И тогда, может быть, можно было бы успевать делать что-то нетривиальное во время загрузки. Но ничего такогов Векторе, увы, нет.
Немного подтюнинговал fm6 и получился fm7 - планка минимальной скорости поднялась до 11950 бит/сек. Темой турбо-загрузки я заинтересовался после того, как побаловался со спектрумом Ewgeny7 на de1. Диска там нет, приходилось грузить с магнитофонного входа и турбо-варианты грузились быстро и впечатлили меня. Но замечу, что в de1 грузились только файлы полученные при сравнительно "медленных" настройках, в районе 12600 бит/сек. Не ожидал, что на векторе почти удастся догнать. Может даже еще смогу немного ускорить.
Rom2fm7new - конвертер и примеры старые, только доработал загрузчик. Теперь в de1 грузит при установке любой частоты дискретизации звуковой карты от 44.1 до 192 включительно. В эмуляторы, конечно, тоже грузит, как и раньше.
попробовал на реальном векторе всё это - работает. Спасибо.
Пищат (точнее, скорее, шипят) они противнооо.. у меня итак зуб болел.. А тут хуже стало :)
vazman, спасибо за проверку на реале! Сейчас уже есть еще более быстрый вариант Rom2fm8 - скорость передачи информации 13500 бит/сек (без синхробитов было бы 14700). Заметно увеличить скорость уже вряд ли получится, но по мелочам возможно еще что-нибудь доработаю, например подсчет контрольной суммы.
Спасибо! Rom2fm8 тоже попробовал -работает. Конечно, всё без участия магнитофона, напрямую с выхода звуковухи.
Кстати - почему то часто сам "загрузчик" двухблоковый не запускается с первого раза.. загружаешь два блока, мигает рус/лат, нажимаешь блк/сбр.. что то непонятное на экране. удерживая ус нажимаешь ввод/блк. потом опять блк/сбр - тогда запускается (очищается экран и загружает).
Если нужно - могу потом попробовать прогнать всё через магнитофон
И иногда не загружает. вот я создал дос (у меня пока нет ФДД рабочего). с первого раза не запустился, только со второго
Это бывает только с loadfm или другие программы тоже иногда не стартуют с первого раза (может вектор не на 100% исправен)? Речь про старт из загрузчика? Из под дос может не стартовать - доработал в Rom2fm8new3 - этот вариант стартует и из любого доса.
Спасибо, но высокоскоростные варианты пробовать с магнитофоном смысла нет.
Т.е. в loadfm8 столбик доходит до конца, потом сбрасывает, а если еще раз попробовать, то столбик доходит до конца и программа запускается? А fm7 всегда грузил с первого раза или там тоже так бывало?
С другими программами не бывает, Вектор, вроде, работает нормально. речь про старт из загрузчика
Визуально столбик не доходит немного до конца. и всё, программа не стартует, ничего дальше не происходит
Хотя, может, столбик и доходит, просто программа не стартует....
c 7 не было, вроде.. но я запускал то по разу :)
Загрузку в de1 я проверяю на примерно 10 файлах разного размера. Некоторые по несколько раз. В de1 fm8 грузит без проблем, ошибок не было. Но понятно, что характеристики магнитофонного входа реального вектора отличаются. Да и звуковая карта оказывает влияние. Кстати, для загрузки я выкручиваю громкость на максимум, при меньшей громкости может грузить хуже. Думаю, что в принципе можно дожать до стабильности и загрузку fm8 в реал, но т.к. я не могу это отладить, наверно сделаю выбор скорости, хотя бы 2-3 варианта. Сам буду грузить в de1 на максимале, а более умеренные варианты может пригодятся кому-нибудь еще.
Могу, кстати, на de2 тоже погонять.. хотя наверняка от de1 ничем не отличается?
Тут даже немного смешно получается. У меня три плисовые девборды и на всех аудиокодек wm8731. Плюс еще платка от waveshare, которую можно подключать к GPIO - там тоже wm8731. И на de2 тоже 8731. В общем de2 можно на эту тему не мучать. Если останется запал, то лучше потом потратить его на пробу доработанной версии.
Еще, например, в плане удобства использования :) Как я говорил - пока нет дисковода. поэтому в первую очередь гружу дос с магнитофона. Так вот, в первый раз после его загрузки при старте надо удерживать УС (тогда, как я понимаю, форматируется квазидиск) Так вот, с быстрой загрузкой так не получается. Пытался начать удерживать ус ещё при загрузке.. но тогда после загрузки всё виснет и ничего не получается
Про удержание клавиш при старте я как-то не подумал. Добавил второй вариант загрузчика, без автостарта - после успешной загрузки замигает рус/лат и будет ждать нажатия сбр+блк
Rom2fm9 - теперь можно выбрать один из двух вариантов скорости (меньшая примерно соответствует fm7, большая - fm8). Сразу приложены два варианта загрузчика - один запускает загруженный fm9, другой мигает рус/латом и ждет блк+сбр.
Сделал загрузчик с определением длительности бита по таймеру - работает! Профит в увеличении точности определения длительности.
Раньше делал так:
inr b\ in 01\ cmp d\ jz $-4
Дискретность 36 тактов.
Убираем увеличение счетчика и уменьшаем дискретность до 28 тактов. А чтобы узнать, сколько мы там крутились, используем таймер. Т.е. фактически точность как в развернутом цикле, который предлагал svofski, но без развертывания. Преимущество таймера перед развертыванием - легко подстроить (изменением порога сравнения) под разные скорости и код компактнее.
- - - Добавлено - - -
С другой стороны у развертывания меньше накладные расходы между битами и таймер (причем согласованный по частоте с процом) не нужен (это если не для вектора делать). Но накладные расходы на запись/чтение таймера между битами для частоты дискретизации 44100 имхо вполне приемлемы, т.к. один интервал дискретизации 68 тактов и даже при использовании развертывания имеет смысл добавить балластные команды (короткие, но долгие), чтобы сократить код. А тут вместо балласта взаимодействие с таймером.
Супер! Это новое слово в использовании таймера на Векторе.
Да я даже немного горжусь :)
Пока не выложил, т.к. сделал альтернативный загрузчик только для fm8, надо бы для fm9 с поддержкой задания скорости.
Интересно, а на других ретрокомпах были примеры использования таймера при загрузке?
- - - Добавлено - - -
Вспомнил, С. Бергич использовал таймер для приема чего-то радиолюбительского
Совсем оффтоп
Похоже в идее использования таймера при загрузке есть что-то башкирское или уфимское. Наверно экология сказывается
Идея не уникальная, но только у вас водятся безумцы, готовые ее воплотить ;)
Rom2fm9_2 - добавил загрузчики (с автостартом/без автостарта) использующие таймер
А на эмуляторе это работает?
Реал я пока не подключил к компу через выход на динамики. А на эмуляторе чет у меня не получается, или что-то не так делаю. После запуска загрузчиков fm9, просто чёрный экран? или что-то должно быть?
Забыл вчера написать - в VV загрузчики использующие ви53 работают если отключить ускорение при загрузке (To Force CPU Speed, по умолчанию включено). Не трассировал, но скорее всего проц при включении этой фичи ускоряется, а таймер нет.
- - - Добавлено - - -
Да, так и должно быть. Теперь можно грузить wavы полученные с использованием Rom2fm9. При начале загрузки справа появится две метки, обозначающие начальный и конечный блок. При загрузке будет расти столбик от начального блока к конечному.
Про эмулятор, я в emu пробовал.
Подключил, Вектор к компу через выход на динамики. Чувствительный зараза... :(
При подключенных параллельно активных динамиках или наушниках, Вектор (в штатном загрузчике) вообще даже синхру не ловит...
Если к выходу подключен только Вектор, то в очень узком диапазоне, около максимальной громкости, Вектор начинает грузить. Но, только на низкой скорости (штатным загрузчиком).
Оба загрузчика fm9, сделал wav-ы на низкой скорости утилитой rom2wav (из пакета эмулятора VV).
Оба загрузчика нормально грузят файлы из папки exemples\11700, и видимо с ошибками грузят из папки 13500, т.к. после загрузки экран снова - просто чёрный. Хоть-бы какие-то точки или полоску, для идентификации, или как в штатном - стек на экран выводить.
Если пробую изменить громкость, даже "столбик" расти перестаёт (в обоих загрузчиках).
Спасибо за проверку на реале!
Да, значит при проверке контрольной суммы обнаруживается ошибка и загрузчик рестартует.
У vazmana fm8 (13500) тоже грузился не со 100% результатом, но как я понял, как минимум один раз загрузился правильно. Но 11700 грузится стабильно, и это здорово (все же значительно быстрее romа). Возможно добавлю промежуточный вариант - соотношение длительностей как в 11700, но с частотой 48000 - результирующая скорость 12800, de1 грузит (но она и 13500 грузит без проблем).
Вот тут не понял, идентификации чего? Загружаемого файла? Можно бы добавить вывод имени, но тогда резко разбухнет загрузчик.
Или речь про отслеживание процесса загрузки? Сейчас прогресс загрузки показывает столбик справа.
- - - Добавлено - - -
Только что сообразил, в принципе можно грузить имя в графическом виде в самом файле.
Ну можно и так. Но возрастёт длительность загрузки, весь "выигрыш" во времени пропадёт...
Я имел в виду, хоть какую-то идентификацию, что работает загрузчик. А то просто чистый экран, смущает...
- - - Добавлено - - -
Найду стерео-штекер и экранированный провод, сделаю нормальный переходник, надеюсь будет меньше искажений, и может будет грузить стабильнее ...
- - - Добавлено - - -
Кстати, ещё, стоит-ли закоротить каналы, или подавать на вход Вектора только один какой-то канал?
Если в состав загрузчика включить шрифт, то это 768 байт на низкой скорости, а если грузить рисунок букв в преамбуле, то это 8*11=88 байт, причем на высокой скорости. Т.е. все же второй вариант лучше. Но я понял, что речь про индикацию того, что загрузчик живой в моменты, когда загрузка не производится. Наверно можно при ожидании загрузки мигать бордюром.
Насчет моно/стерео - когда грузили с магнитофона, у меня был коммутатор, можно было выбрать левый, правый или сумму, вроде суммой практически не пользовался. При загрузке по шнурку с PC вряд ли имеет смысл объединять каналы в один, да и заметной разницы между правым и левым в данном случае не будет, т.ч. скорее всего можно взять любой один канал.
Записывал сигнал, прошедший по достаточно длинному шнурку в de1 и обратно - особых шумов там не видно, проблема в некотором расплывании фронтов. Скорее всего магнитофонный вход вектора еще сильнее растягивает фронты.
Ну да, "лишние" 88 байт к программе, это не критично :)
В схеме Вектора на входе дифференцирующая RC цепь, а на de1 есть такая?
По моно/стерео - понял.
Сегодня не дома, схему de1 сейчас не буду качать, да и не факт, что с ходу пойму, что там в аналоговой части аудиовхода. Насчет цифровой обработки - точно помню, что в 8731 есть отключаемый фвч, удаляющий постоянную составляющую, и в v06cc он включен.
ivagor, а блоки, как в исторических загрузчиках, у тебя остались? Если да, то можно просто в начало засовывать блоки с соответствующими адресами, которые будут загружаться прямо в экранную память в качестве иконки. Плюс в том, что не надо ограничивать никого количеством байт — сколько захотел, столько и сгенерировал. А если сделать размер блока не фиксированным, то можно вообще разойтись — сделать дырявый сплешскрин на весь экран.
Блоки есть, но кроме синхробайта там никакой служебной информации - ни начального адреса (все по порядку), ни размера (фиксированный 256 байт). Грузить заставки в принципе неплохо бы, но где их брать?
По умолчанию генерировать текст в битмапе. Но оставить возможность указать свой битмап.
Возможно действительно стоит увеличить гибкость. Но каждая дополнительная возможность приводит к разбуханию загрузчика и, в некоторых случаях, к замедлению.
Для эксперимента, можно попробовать сделать первый блок служебным (изменяемого размера), для (спрайта) имени файла или картинки. Байт идентификации (есть ли спрайт, или блок 0-вой длины), пара байт на адрес на экране для "спрайта", пара байт на размеры. Остаётся для "спрайта" 48*42 пикселя (если делать его почти квадратным). По горизонтали можно с шагом 8 пикселей, чтоб сильно загрузчик не перегружать...
Если все блоки равноправные, загрузчику проще.
Загрузчику проще, но возникает вопрос, как отображать прогресс загрузки. Сейчас черточки в правом столбце соответствуют загружаемым блокам по количеству и положению. Если разрешить грузить вразнобой, то положению уже лучше не соответствовать, разве что количество оставить.
Еще думаю, может две плоскости под картинки выделить. Три не получится, т.к. есть romы по 45 кб.