Читал что в TS Config программно аппаратно реализован эмулятор ВГ93 в том числе работает с хаками через нестандартные точки входа, думаю там можно подсмотреть код
Вид для печати
Читал что в TS Config программно аппаратно реализован эмулятор ВГ93 в том числе работает с хаками через нестандартные точки входа, думаю там можно подсмотреть код
Да это я тоже смотрел, там проблема в том что оно под ATM и еще порт #F7 для чтения #7FFD + нет исходников тырдоса, я дизасмил, но лень там всё переделывать под свой менеджер памяти + там еще всякая лабуда от ATM напихана
По идее с натяжкой AVR на 20MHz успеет ответить процессору на 3.5мгц
У меня получается 6 тактов на выставление данных + 5 латентность irq, где то нос в нос получается
https://pastebin.com/3TqEqccH
Собрал-завел таки и я этот эмулятор, спасибо автору, весьма уютная штуковина вышла (вот бы еще запись - была бы совсем конфета ;))
Но есть и пара моментов: иногда не сразу энкодером листается содержимое карты, на некоторых директориях слегонца притормаживает, а затем быстро бегать начинает (прекэширование?), еще заметил, что буты, которые проверяют смену диска, сразу же чувствуют подвох и начинают циклически пытаться перечитывать оглавление диска. То есть запустить из такого бута ничего не возможно. Это у всех так или я кривовато собрал?
Спасибо автору за проделанный труд! Я конечно понимаю, что в чужой монастырь со своим уставом не ходят, но наткнулся вот на такой дисплей:
http://www.ebay.com/itm/IIC-I2C-0-91...wAAOSwo4pYPZqe
По мне, так замечательный дисплей: i2c присутсвует изначально, его размеры позволяют его легко уместить в корпус 3.5 дисковода, и есть библиотека под Arduino.
Если автору не сложно, может он сделает версию эмуля под этот дисплей?
На самом деле, ОЗУ тут не вообще требуется и фреймбуфер тоже. Экранная память есть в самом контроллере дисплея и дублировать его в МК необязательно.
Например, цветной дисплей 128х128 потребовал бы 32К памяти (128*128*2), но любая атмега легко может с ним работать.
А есть библиотека для контроллера SSD1306, которая работает по шине i2c, использует внутреннюю память дисплея и не использует фреймбуффер?
Было бы интересно посмотреть по скорости, особенно в плане вывода растровой графики и шрифтов.
На счёт SSD1306 не знаю, но делал аналогичное для дисплея 128х128 (https://github.com/trol73/avr-lcd-module-128x128). По скорости там вышло весьма нормально.
Идея в том, чтобы стараться избегать повторного рисования одних и тех же мест. Т.е., если надо отрисовать текст на фоне, то это лучше делать в один проход - не заливать сначала фон, а потом второй операцией рисовать текст поверх, а сразу заполнять все точки в прямоугольнике. Тогда и буфер не нужен, и мерцания при обновления картинки нет.
Теоретически можно фоновую картинку во флеш запихнуть, а на экран уже выводить то что нужно, у меня такие дисплеи есть, есть какой-то еще маленький в 2 раза уже (кажется по ссылке это он и есть), надо будет попробовать что ли :)
Получается, если 1 пиксель это один бит, то весь экран 0.5к получается, еще шрифт можно во флеш засунуть, тогда текстовый режим без проблем можно сделать.
У меня дисплей 128x32, ssd1306. Если i2c работает на 800кгц, то обновление экрана на глаз не заметно, по крайней мере из под bascom.
А вот такой вопросик..
Как должен повести себя эмулятор с турбированным контролером дисковода??
А то я разницы не увидел...
А какая должна быть разница? Просто вроде как турбированный позволяет использовать HD, а тут в любом случае DD идет.
Ну, тут сложно сказать, тут же нет механики, может из-за этого. Основное замедление в эмуляторе из-за переключения сторон при чтении сектора, если сторона переключилась, то эмулятор прерывает чтение сектора, сообщая контроллеру некорректную CRC и перечитывает его заново, с другой стороны, после чего производится повторное чтение. Но это вроде бы к самой ВГ93 не имеет отношения, т.к. переключение сторон производится минуя ВГ.
А может кто нибудь нарисовать корпус эмулятора для изготовлении на 3д принтере??? или может есть уже проект???
Тут проблемка в том, что у тех плат, что сделали, карта вставляется сбоку, так что для 3.5 или 5.25 неудобно делать, разве что вынести карту отдельно, короче, нужен итоговый вариант, тогда можно и корпус наваять, это не сложно.
Надо бы еще сделать поддержку мелкого экранчика, и тогда можно отдельную плату с картой и экраном сделать, тогда прям корпус получится как от 3.5 дисковода.
Двумя руками и ногами (тоже двумя) за мааааааленький экранчик)))
А можно как-то сделать, чтобы эмулятор запоминал последний диск и при следующем включении загружал его?
Или хотя-бы просто при включении загружать boot.trd, при его наличии на карте?
А то эмулятор при включении выходит в режим выбора дисков и светит и светит и светит своей подсветкой. И светит, мля, и светит! Пока не ткнёшь в него пальцем. А я может с магнитофоном решил поработать, мне прямо влом на него отвлекаться. ;)
И без карты тоже, светит постоянно. Ну посветил секунд десять, да погасни уже.
Ну так там же это уже есть, при выборе диска нужно подержать кнопку секунды 3, тогда выбранный образ сохранится в еепром и будет выбран автоматически при следующем включении, при условии, что он есть на флешке и флешка та же самая
EvgenRU, круто, спасибо! А я мучался. :)
Подскажите где взять Hex-файл, и как выставить фъюзы для меги, в начале темы не нашел, на гитхаб тоже вроде нет.
Ардуиной воспользоваться не судьба? :)
А я из обычных деталек из радиомагазина вот так сделал:
https://www.dropbox.com/s/r87tt6fjmv...%2010.jpg?dl=0
Так что там насчет поддержки SSD1306?)
Да, и как дела будут обстоять с записью, будет ли реализована?
Как-то у меня странно работает код, когда ходишь по какой-нибудь поддиректории.
Пример:
1) в корне SD карточки есть директория DEMOS
2) в ней - 2 TRD файлика
3) когда листаешь вперед - все ок, упираемся в конец и дальше не листается
4) но вот когда листаешь назад - не могу долистать до "..", имена файлов на экране дублируются и вообще происходит какая-то аномалия
копание привело к коду внутри readdir(), но я не совсем понимаю что этот код делает:
Вот эту строчку если закомментировать
, можно долистать до "..", но при этом в какой-то момент времени видно, как дублируется один из файлов на каком-то шаге.Код:if(dire == 1) if(memcmp(&disp_files[0],&disp_files[1],sizeof(fnfo)) == 0) return 0;
В общем, большая просьба просветить и дать рекомендации, как пофиксить :)
2djspawn: Насчет SSD1306 - буду делать, но пока что со временем напряг, насчет записи пока что не думал, но техническая возможность есть
2andykarpov: эта строчка - костыль, как раз чтобы убрать описанные глюки, но, видимо не всегда этот костыль помогает :) как буду делать 1306, так и это попробую поправить, может быть полностью перепишу код хождения по каталогам, немножко подтянул сейчас знания по C/C++ :)
Действительно, тут может быть проблема, я что-то не стал strncmp использовать, т.к. она еще добавит кода, хотя для атмеги328 это не существенно, там еще полно места
Будет так
PS: проверьте, если нормально будет работать, то сделаю коммитКод:if( dire && !strncmp(disp_files[0].fname,disp_files[1].fname,12) &&
disp_files[0].fsize == disp_files[1].fsize && disp_files[0].fdate == disp_files[1].fdate &&
disp_files[0].ftime == disp_files[1].ftime && disp_files[0].fattrib == disp_files[1].fattrib
) return 0;
UPD: или вот еще такой вариант
UPD2: закоммитил последний вариантКод:if( dire && !memcmp(&disp_files[0],&disp_files[1],sizeof(fnfo)-13) && !strncmp(disp_files[0].fname,disp_files[1].fname,12) ) return 0;
Приветствую всех! И всех с Новым Годом.
Помогите кто чем может. Собрал устройство, только вот не работает.
Disc Error
Trc 0 esc 9
Распайку раз двести проверил.. Arduino Pro Mini 16Mhz. С железным приводом работает без проблем.. Может кто сталкивался?
Судя по ошибке не может оглавление считать, видимо формат не понимает или еще чего...
Тогда несколько вопросов.
1. Пробовали предыдущие варианты прошивок?
2. Какой контроллер дисковода, ВГ93 или еще какой?
3. Экран нормально показывает как положено дорожку сторону?
4. Точно там 16МГц кварц, а не 8?
5. Точно все пины подпаяны корректно?
azx987sa, попробуй поменять местами 0 и 1 (RX TX).
1. А где они, прошлые прошивки? https://github.com/EvgeniyRU/ZX_FDD_Emulator - тут только одна.
Еще пара-тройка экспериментальных и "самопальных" рассыпанных по форуму.
2. ВГ93
3. Да, нормально
4. 16Мгц. по частотомеру
5. 200 раз проверил.
- - - Добавлено - - -
Это помогло. Со второго раза. С первого раза сгорел буфер 155ЛП9 и все остальные попытки запустить девайс продолжались на дохлом контроллере дискет. Пока в какой то момент не пришло в голову подключить флопик и посмотреть осциллографом... перепаял буфер, все заработало.
- - - Добавлено - - -
Вот еще такой момент интересен.... почему бы на первой странице не разместить основную инфу?
Например по адресации дисплея, про эту дурацкую путаницу RX TX, ссылки на другие версии программ. может еще что.
Кстати, где в коде подсветка отключается? хочу ее чуть дольше сделать.
Поправил первое сообщение, пояснил там как предыдущие версии получить с гитхаба
Почему-то я именно так и подумал, поэтому и плюсанул предыдущее сообщение :)
Добавил немного инфы в первое сообщение.
По адресации дисплея вроде бы в комментариях в коде всё подробно написано.
Насчет подсветки... она работает пока не запущен образ диска, потом гаснет, если дисковод не активен.
Ну разве что подшаманить строчку _delay_ms(1500);
Вот сейчас еще раз посмотрел и не увидел.. может не туда смотрю..
вот про эту строку речь -
#define LCDEX_ADDR 0x4E // Extender address, 0x27*2 for standard chinese module, you should multiply your address by 2!
может просто указать адрес вот так:
PCF8573 - 0x20*2 - 0x40
PCF8573T - 0x??*2 - 0x?? - может есть у кого?
PCF8573A - 0x38*2 - 0x70
PCF8573AT - 0x3F*2 - 0x7E
наглядно и понятно.
vetal555 такую же табличку показывал, может стоит ее добавить в шапку или LCDModule.h ?