Просмотр полной версии : Планирую сделать FDD эмулятор на Atmega8
если делать что то универсальное то нужно брать теледисковый формат в него можно перевести все что угодно
CodeMaster
02.05.2016, 17:07
идеально было бы вообще спуститься на mega8
Это-то однозначно за.
Пожелания по эмулятору за последние дни все больше напоминают мне:
http://www.kontra20.ru/wp-content/uploads/2013/05/семеро-с-ложкой.jpeg
Вопрос к автору разработки: На данном этапе проект можно считать законченным?
Если ничего меняться не будет, сяду платку рисовать, под ардуино нано+2х16+энкодер, пока энкодер едет с китаю, думаю сделаю.
Вопрос еще один, ламерский.
В нано вроде ноги не совпадают на плате с уно, для простоты и "красоты" разводки возможно потребуется сменить привязку выводов, это сложно сделать?
Я п программировании нулевой, потому и спрашиваю. Может вы возьметесь это сделать, как до рисования дойдет и вопросы возникнут?
EvgenRU, насколько я понял последний скетч под индикатор 0802, потому как на 1602 используется только первые 8 символов в каждой строке, тогда уже можно выводить по 7 символов и второй столбец задействовать
или у меня что то не работает ? на и2ц конверторе не нужно перемычки ни какие ставить ???
разобрался, оказался подбитый дисплей, причем в ав-метре он отображал весь ряд
- - - Добавлено - - -
собрал на скорую руку эмуль, вот что получилось https://yadi.sk/i/69W7FhfZrYeX6
теперь нужно подключить к спеку
- - - Добавлено - - -
подцепил к фене06, сразу не завелось, оказалось на друйке про мини перепутаны краевые контакты 0 и 1
- - - Добавлено - - -
https://yadi.sk/i/z0IX3O6lrYmzm
- - - Добавлено - - -
хотелось бы всетаки еще запись, а так супер, сляпал , наляпал , пролил скетч и все работает
Извиняюсь за долгое молчание, дачный сезон... будь он неладен :)
gdv2002, меняться пока что ничего не будет по выводам всё так останется, разве что будут исправляться какие-то недочеты в интерфейсе или еще что-то по мелочи. Выводы можно менять в Config.h На порту D можно переставлять местами всё кроме READ_DATA и STEP, остальное лучше не трогать.
tank-uk, отлично, что все работает :) с записью пока что никак, скорее всего на этом чипе это сделать будет проблематично, мне уже пришли атмеги1284p буду на них позже пробовать, возможно....
PS: еще планирую сделать, чтобы при выборе образа при длительном нажатии он сохранялся в EEPROM и при следующем включении сразу выбирался пока не будет нажата кнопка энкодера для выхода.
меняться пока что ничего не будет по выводам всё так останется
А ничего уже и не нужно менять. Накидал уже шилду в Спринте, буду максимально уменьшать платку, да и проводников-то там кот наплакал. Экран и валкодер будут на отдельной платке, под "вставку" в окошко дисковода 3,5".
А какую модель энкодера использовать (никогда еще не сталкивался), в моем радиолабазе ассортимент с ценовым размером от 70 до 260 руб.
А какую модель энкодера использовать (никогда еще не сталкивался), в моем радиолабазе ассортимент с ценовым размером от 70 до 260 руб.
Я использую самый дешевский китайский (ржавеющий на улице) вот такой
Ключевые слова для поиска на алиэкспрессе "EC11 ENCODER"
http://thumbs3.ebaystatic.com/d/l225/m/mERi8-Ja3J_1OPo1zLEKu6A.jpg
Mor-Da, я вообще выколупал из старого муз-центра, только кнопку отдельно прилепил
Вот, набросал простенький корпусочек для вставки в 5.25 :)
UPD: в последней версии добавлена поддержка кварца на 8 МГц, т.е. можно использовать внутренний генератор атмеги! Достаточно в Config.h установить #define CRYSTAL_8MHZ 1 и этого достаточно для работы скетча от внутреннего генератора, правда скетч тогда нужно заливать при помощи avrdude
Строка для заливки в таком случае avrdude -p atmega328p -c USBasp -U flash:w:ZX_FDD_Emulator.ino.standard.hex -U lfuse:w:0xe2:m -U hfuse:w:0xd7:m
Если заливаете через Arduino IDE в Arduino Pro Mini с кристаллом на 8 MHz, то avrdude не нужен, можно лить прямо из IDE установив соответствующий процессор
UPD2: добавлена поддержка сохранения имени образа в EEPROM и его автоматического открытия после перезапуска эмулятора. Для сохранения, при выборе файла, нужно удерживать кнопку выбора более 3 секунд.
PS: попробую еще в ближайшее время добавить поддержку SCL
Окончательный вид эмулятора вставленного в корпус. (Ручка правда гумно, напечатаю потом другую) :-D
EvgenRU, все-таки скажите, возможно и как сложно сделать управление на 3-х кнопочках?
Согласитесь, как-то крутилка на мордочке компа не особо смотрится, это же не усилитель!
Может любезно сделаете такую версию прошивки?
А по мне так крутилка выглядит свежо и удобно. Вот реально задрало эти тактовые кнопки давить многократно.
EvgenRU, все-таки скажите, возможно и как сложно сделать управление на 3-х кнопочках?
Согласитесь, как-то крутилка на мордочке компа не особо смотрится, это же не усилитель!
Может любезно сделаете такую версию прошивки?
Если нужны кнопки - не проблема, сделаю такую возможность в конфиге добавлю настройку для выбора энкодера или кнопок. Возможно даже сегодня. Подключение кнопок будет в те же пины, что и A/B энкодера.
PS: мне тоже кажется, что с крутилкой удобнее, всего один элемент управления для всего. Да и человеческая натру такова, что ему крутить-вертеть гораздо удобнее и интереснее, чем многократно давить :)
Если нужны кнопки - не проблема, сделаю такую возможность в конфиге добавлю настройку для выбора энкодера или кнопок.
Вот огромное спасибо, я с технической стороны понимаю, что вращение энкодера - это по сути постоянное нажимание кнопки вправо или влево, но программить не умею, потому и прошу :(
petrov1962
25.05.2016, 13:18
EvgenRU, а такой энкодер подойдет?
57264
Согласитесь, как-то крутилка на мордочке компа не особо смотрится, это же не усилитель!
Просто возьми простую цилиндрическую ручку большого диаметра, утопи ее заподлицо или почти заподлицо с передней панелью. Можно углубление в ручке под палец сделать. Будет и крутить удобно одним пальцем и смотреться будет хорошо.
andykarpov
25.05.2016, 16:20
Кстати, на большинстве факсов именно такая ручка и есть - jog dial. И ничего, никто факс с усилителем не путает :)))
- - - Добавлено - - -
EvgenRU, а такой энкодер подойдет?
57264
Судя по внешнему виду и количеству выводов самого энкодера - похоже на правду, с кнопочкой.
А вот судя по названиям сигналов, которые с этой платки выходят - на платке еще есть какая-то микросхема ?
Можно сделать предположение, что сам энкодер подходит, если его выпаять с платки :)
Судя по внешнему виду и количеству выводов самого энкодера - похоже на правду, с кнопочкой.
А вот судя по названиям сигналов, которые с этой платки выходят - на платке еще есть какая-то микросхема ?
Можно сделать предположение, что сам энкодер подходит, если его выпаять с платки :)
На этой плате стоят 3 подтягивающих резистора для кнопки и 2 выходов энкодера, в эмуляторе же эту роль выполняет Pull-Up на входах МК, поэтому они не нужны, так что, если выпаять резисторы и соединить выводы как нужно, то можно энкодер и не выпаивать, но, не уверен, что это будет просто сделать.
Хотелось поинтересоваться, есть ли у кого-то успехи в реализации данного девайса кроме меня? :) может фотки там и т.д. есть ли смысл продолжать...
Я, собственно, и форум нашел по этой теме, в поисках детальных спецификаций формата дорожки FDD)
Кое-что важное, из полученных вами результатов, нигде больше не встретилось.
Круто, что вы умудрились решить задачу на ресурсах дешевой Меги; но, как я понял, для этого пришлось прибегнуть к трюкам.
У меня несколько другая задача - эмуляция стандартного 1,44 HD FDD.
Вероятно, попробую реализовать на STM32, в рамках практического освоения как этого контроллера, так и современных инструментов в целом.
Мой опыт на С пока ограничен; на ассемблерах 8080 и HC08 делал кое-что, но давно и эпизодически. Так что времени потребуется прилично)
Если интересно, процесс реализации своих намерений могу отражать в этой теме.
EvgenRU, у меня пока руки не дошли, времени совсем нет пока, но все готово для сборки и Феникс ждет!!!
процесс реализации своих намерений могу отражать в этой теме
лучше отдельную сделать, тут немного про другое речь идет.
Смысл есть.
На днях прикрутил дисплей и энкодер- фотки завтра выложу.
ЗЫ: А что вы имеете ввиду под продолжением? Запись прикрутить? Или поддержку SCL забабахать?
ЗЫ: А что вы имеете ввиду под продолжением? Запись прикрутить? Или поддержку SCL забабахать?
SCL конечно же, с записью я уже решил, что заморачиваться не буду, т.к. это неоправданно сложно и нет в этом острой необходимости.
Круто, что вы умудрились решить задачу на ресурсах дешевой Меги; но, как я понял, для этого пришлось прибегнуть к трюкам.
У меня несколько другая задача - эмуляция стандартного 1,44 HD FDD.
Вероятно, попробую реализовать на STM32
если только режим чтения, то можно и в 328 атмегу уложится :)
Я, собственно, и форум нашел по этой теме, в поисках детальных спецификаций формата дорожки FDD)
Кое-что важное, из полученных вами результатов, нигде больше не встретилось.
Круто, что вы умудрились решить задачу на ресурсах дешевой Меги; но, как я понял, для этого пришлось прибегнуть к трюкам.
У меня несколько другая задача - эмуляция стандартного 1,44 HD FDD.
Вероятно, попробую реализовать на STM32, в рамках практического освоения как этого контроллера, так и современных инструментов в целом.
Мой опыт на С пока ограничен; на ассемблерах 8080 и HC08 делал кое-что, но давно и эпизодически. Так что времени потребуется прилично)
Если интересно, процесс реализации своих намерений могу отражать в этой теме.
Создавайте тему. Готов присоединиться к проекту. Есть небольшой опыт с STM32F103C8T6 и два вариант отладочных плат на нём.
EvgenRU, ну так я уже фотки выкладывал в этом http://zx-pk.ru/threads/26328-planiruyu-sdelat-fdd-emulyator-na-atmega8.html?p=870227&viewfull=1#post870227 посте
в корпус пока не пихал, но проверял на разных клонах, эва, феня 6, профик 3.2, пятногон 1.42 на всех проблем не наблюдалось
andykarpov
28.07.2016, 03:12
Собрал девайс, что-то завести никак не могу, все время пишет "NO CARD INSERTED".
Думал может с SD-карточкой не то что-то, или не так прикрутил - а нет, родные примеры (SD) Arduino'вские работают без проблем.
Подскажите, куда копать ? Пробовал 2 разных SD-карточки, на 1 и на 2 Гб, отформатированы в FAT32....
Единственное что менял - это в Config.h USE_ENCODER 0.
ЗЫ: платка Arduino на Atmega328p, Arduino IDE 1.6.9... Может проблема в версии Arduino и/или avr-gcc ?
- - - Добавлено - - -
UPD: нашел проблему: скорость обмена по SPI. Убрал SPSR |= _BV(SPI2X); - и все заработало :)
- - - Добавлено - - -
Проблема со скоростью SPI была из-за недостаточной фильтрации питания SD-карточки. Навесил конденсаторов - все завелось с SPI2X.
Теперь пытаюсь все это дело завести вместе с BDI 2.0 - пока ловлю ошибку Track 0 Sector 9 :(
Ума не приложу, куда копать дальше.
Если у вас Arduino Mini, проверьте, чтобы там кварц на 16МГц был, а не на 8, т.к. на 8МГц данный код не рассчитан, еще может быть что-то перепутано из проводов
andykarpov
28.07.2016, 07:55
У меня Arduino Duemilanove, с кварцем там все в порядке (16Мгц); Провода все проверил много раз, шлейф тоже..
Может быть проблема в микросхеме контроллера, которая не ВГ93, а MB8877A, как у kox ?
Читал ветку, слышал Вы какой-то там конденсатор и подтяжку на INDEX обсуждали, а расскажите поподробнее плз ?
У kox была проблема, его контроллер не понимал упрощенную версию MFM, после чего я её вернул в нормальный вид.
Если у вас другой контроллер, то ему так же может что-то не понравиться в кодировании, попробуйте может в коде поиграться с длиной пробелов или из более старых версий добавить заголовок C2 (можно на GitHub просто выбрать версию где этот заголовок присутствует и попробовать вставить в текущую версию или просто проверить, заработает ли более старая версия). Если всё удачно заработает, могу в текущую версию вернуть заголовок дорожки.
Еще, как вариант, попробуйте взять более старую функцию send_byte может в последней версии я что-то упростил...
Идея интересная, меня заинтересовала, т.к., есть спектрум с дисководом.
Вознивают следующие вопросы и идеи. Будет же проще реализовать сам контроллер, а не дисковод к готовому. Т.е., МК эмулирует ВГ93, отрабатывает все команды. Не нужно никакого MFM кодирования, требования по времени чтения с карты будут мягче и памяти в МК меньше потребуется, насколько понимаю.
При использовании плюс в том, что его могут подключить и те, у кого до этого небыло контроллера дисковода. Более того, можно будет реализовать пару дополнительных команд, которых нет в ВГ93, чтобы программно с компа менять образы. Например, контроллер автоматически подключит к B образ диска со спец загрузчиком, который позволит с самого спектрума выбрать и подключить нужный образ на A и загрузит с него BOOT, если есть.
Или, как вариант, сделать плату для МК такую, чтобы можно было просто заменить ею ВГ93 на имеющемся контроллере дисковода и работать уже с образами.
Боюсь, что для эмуляции BDI обойтись одной атмегой328 не получится, да и вообще не уверен что с этим справится какой-то из простых МК, т.к. задействованы будут 8 линий данных, еще куча линий адреса, опять же ПЗУ и обработка портов ввода-вывода
Всем Привет
Вот и мой набросок https://yadi.sk/i/jv7Cus7IuFyya
Ну вот и окончательный вариант
по Китайски , за то быстро и работает
https://yadi.sk/i/84Jfa088uJiXV
https://yadi.sk/i/qpTcsmYxuJiYK
https://yadi.sk/i/iqFTycBzuJiYz
https://yadi.sk/i/CHAbe4EXuJiZj
https://yadi.sk/i/_Ju05dLauJian
https://yadi.sk/i/t60CaStyuJibp
vetal5555
22.08.2016, 12:14
Здравствуйте,приобрел i2c переходник но с буквами ат,после курения даташитов понял что разница в адресации i2c-0x3f.подскажите где что поменять чтоб заработал экран.в программировании дерево-я с железом дружу.заранее спасибо.
vetal5555, фото в студию
такой ?
http://www.doneathome.ru/wp-content/uploads/2014/02/718631826_075.jpg
для адреса 0х27 должны быть сняты перемычки А0 А1 А2
vetal5555
22.08.2016, 13:15
vetal5555, фото в студию
такой ?
http://www.doneathome.ru/wp-content/uploads/2014/02/718631826_075.jpg
для адреса 0х27 должны быть сняты перемычки А0 А1 А2
Да такой,перемычки сняты.у микросхемы индекс АТ и смотрел по спеуификации-нету у нее адреса 0x27 в любом варианте перемычек.если установить все то адрес 0x38.фото через час-полтора сброшу.экран и контроллер рабочие.могу скинуть фото с тестом по адресу 0x38 и 0x3f
vetal5555, поправь эту строку под свой адрес
// I2C Extender settings
#define LCDEX_ADDR 0x4E // Extender address, 0x27 for standard chinese module
vetal5555
22.08.2016, 18:48
vetal5555, поправь эту строку под свой адрес
// I2C Extender settings
#define LCDEX_ADDR 0x4E // Extender address, 0x27 for standard chinese module
Эту строку уже редактировал-результат нулевой.
Где-то собака еще зарыта.
Не могу почему-то фото добавить,только зарегистрировался но в принципе наличие фото в данной ситуации ничего не меняет.
Спасибо за ответ
- - - Добавлено - - -
все верно надо указать правильный адрес
If you have a PCF8574AT IC2, Adress is 0x3F, for those who have a problem with not seeing anything. To find your number look at the black CHIP of the IC2.
PCF8574 -> address 0x20
PCF8574A - > address 0x38
PCF8574AT -> address 0x3F
Just change this code if you have the PCF8574AT
#define I2C_ADDR 0x3F
почему не работает?
есть ли еще где настройки для адреса i2c?
по этому гайду изображение есть
http://arduino.ru/forum/apparatnye-voprosy/lcd-1602-i-i2c-pcf8574at
vetal5555, обрати внимание на это #define LCDEX_ADDR 0x4E // Extender address, 0x27 for standard chinese module
адрес задается со смещением, а вообще обратись к автору может что и прояснится
кстати у меня PCF8574T стоит
vetal5555
22.08.2016, 22:53
vetal5555, обрати внимание на это #define LCDEX_ADDR 0x4E // Extender address, 0x27 for standard chinese module
адрес задается со смещением, а вообще обратись к автору может что и прояснится
кстати у меня PCF8574T стоит
по спецификации PCF8574T
дефолтный адрес 0x20
с тремя перемычками 0x27
у Вас без перемычек работает?
если да то я что-то уже ничего не понимаю...
к автору уже в крайнем случае,стараюсь пока разобраться,не привык к готовому :v2_dizzy_vodka2:
- - - Добавлено - - -
PROFIT!!!
Вместо 0x4e нужно значение 0x7e
Говорит NO Card Incerted.
Всем отозвавшимся спасибо
у Вас без перемычек работает?
на плате перемычки на землю, то есть все адреса без перемычек в лог"1"
vetal5555
22.08.2016, 23:33
на плате перемычки на землю, то есть все адреса без перемычек в лог"1"
теперь понятно.
танцы кстати еще не закончились-не видит сд карту
возможно не подходит адаптер -на плате присутствует еще какая-то микросхема-скорее всего буфер
адаптер сразу под микро сд
могу или выбросить микросхему с платы и поставить перемычки соответственно схеме или есть еще какой-то нюанс?
флешку форматировал в фат 32 1гб и 2гб
образ .trd закидывал в корень
не видит
vetal5555, у меня микросд и все пучком, проверь сигналы там они по отношению к сд перепутаны
vetal5555
22.08.2016, 23:44
vetal5555, у меня микросд и все пучком, проверь сигналы там они по отношению к сд перепутаны
подскажете какие перепутаны а то уже от курения гугла котелок не варит
на SD - адаптере
MISO
SCK
SS
MOSI
GND
+5V
на MickoSD
SS
SCK
MOSI
MISO
+5V
GND
vetal5555
22.08.2016, 23:54
а не, это не перепутаны
я не по фото их соединял а по совпадению названия контактов так что верно
у меня вместо SS есть СS но пока не знаю играет ли он решающую роль
но все равно спасибо
PROFIT!!!
Вместо 0x4e нужно значение 0x7e
Говорит NO Card Incerted.
Всем отозвавшимся спасибо
Ну вот, 0x7e это как раз и есть 0x3f * 2 :)
Насчет NO Card, было тут, может у вас карта не тянет SPI2X
закоментируйте в главном файле эмулятора строчку
SPSR |= _BV(SPI2X); // set double speed
vetal5555
23.08.2016, 00:38
Ну вот, 0x7e это как раз и есть 0x3f * 2 :)
Насчет NO Card, было тут, может у вас карта не тянет SPI2X
закоментируйте в главном файле эмулятора строчку
сейчас попробую
- - - Добавлено - - -
не,не пошло
не видит
по spi2x погуглю а то пока для меня далеко
andykarpov
23.08.2016, 09:19
Насчет NO Card, было тут, может у вас карта не тянет SPI2X
Заметил одну интересную особенность, вероятно сама карта тут ни при чем.
Есть breakout board для SD-карточки простая, с резистивными делителями,
и есть вторая - с буферами на 4050. Так вот, последняя ни в какую не хочет работать с одной и той же карточкой в режиме spi2x.
andykarpov, у меня стоит Micro-SD адаптер на 74LVC125A и прекрасно работает с любыми картами
vetal5555
23.08.2016, 15:00
У меня тоже на lvc125.пока не получилось заставить работать.
- - - Добавлено - - -
Спаял шилд из переходника на микросд,семь раз проверил-все верно.не работает.no card.
В наличии микросд-sandisk 1gb
Kingston 2gb
Добавлял по питанию конденсатор-ничего.
Apacer 2gb
А кварц у вас точно 16МГц?
vetal5555
24.08.2016, 11:06
110%
только что вопрос решился заменой флешки на 4гб sdhc
предположение было но не было флешки в наличии
осталось разъем флопика впаять и в путь
кстати работает с тем же переходником с lvc125
Огромное спасибо за разработку полезного девайса от меня и Пентагона 1992
- - - Добавлено - - -
Уже все собрано и запихнуто в корпус.
Работает
- - - Добавлено - - -
Ну вот, как-то так
http://www.ex.ua/453100351425
из четырех microsd заработало только с одной
иногда почему-то зависает-перестает реагировать на энкодер
и питания от компа не хватает-слишком слабый контраст на экране,поставил отдельный блок питания.
иногда почему-то зависает-перестает реагировать на энкодер
и питания от компа не хватает-слишком слабый контраст на экране,поставил отдельный блок питания.
Видимо у вас питание не очень стабильное или помехи есть, попробуйте на ресет ему конденсатор повесить как рекомендуется для AVR.
Насчет контраста... это даже если его регулировать не хватает?
vetal5555
24.08.2016, 21:55
Видимо у вас питание не очень стабильное или помехи есть, попробуйте на ресет ему конденсатор повесить как рекомендуется для AVR.
Насчет контраста... это даже если его регулировать не хватает?
да не хватает
но подключал к лабораторному блоку для теста-аналогичная ситуация,контраст плохой а там уже 5 человеческих ампер
скорее всего просаживается напряжение при подключении через штырьковый разъем питания
при подключении к компу или зарядке юсб контраст в норме
возможно ардуина дефектная?я честно говоря первый раз занялся ею только из-за Вашей разработки потому много вопросов
сд карты уже три работающие подобрал-две по 4гб и одна 8гб
я конденсатор вешал на вход по питанию а не на резет,попробую еще этот вариант и отпишу
помехи в сети могут быть-спектрум находится в мастерской по ремонту техники и постоянно включено довольно много всякой всячины.
в принципе меня и так уже устраивает-я не придирчивый,запустил мелодии ау и работа лучше работается:v2_dizzy_botan:
еще попробую с конденсатором и если не пойдет то при возможности сменю ардуину но острой необходимости уже нету
vetal5555
26.08.2016, 21:58
Добавил конденсатор на ресет и питание подал через порт прошивальщика
Нормально работает ,без зависаний.
А, так у вас питание через регулятор шло, тогда понятно почему не хватало :)
Собрал эмулятор из темы. Работает отлично. Спасибо EvgenRU за разработку. При сборке традиционно собрал немало граблей, некоторыми из которых хочу поделиться с теми, кто будет собирать этот эмулятор. Возможно автор вынесет что-нибудь из этого в шапку темы.
1. В последних версиях Arduino IDE (1.6.13, 1.6.12) проект у меня собираться отказался, выдавая маловразумительное сообщение об ошибке №5 ld.exe. Беглое гугление на эту тему и пляски вокруг версии ld успеха не принесли. Собрать проект удалось только в версии 1.6.5. Возможно это стоит вынести в шапку темы.
2. Имена файлов на карте памяти должны быть в нижнем регистре. Записав на карту файл TEST.TRD я довольно долго плясал с бубном вокруг эмулятора, пытаясь понять почему оно не работает. Счастье наступило только после того, как переименовал его в test.trd.
А в целом - отличный проект. Работает бодро, все, что я накидал на карту прожевал и ничем не подавился. Жаль, только, писать не умеет, но это уже другая история. Еще раз спасибо EvgenRU за проделанную работу.
Всегда приятно слышать благодарности :)
Но, по поводу ваших замечаний вынужден не согласиться.
1. Только что специально скачал 1.6.13, скомпилировалось нормально, без каких-либо проблем. Ранее я компилировал на 1.6.8 и 1.0.5, так же проблем не было. С гитхаба нужно скачивать архивом, а не копировать файлы отдельно, может в этом проблема. Например такой ссылкой https://github.com/EvgeniyRU/ZX_FDD_Emulator/archive/master.zip
2. Насчет имен файлов тоже непонятно, у меня с этим проблем не было, да и в коде указано strcasestr(fnfo.fname,".trd"), что означает не учитывать регистр. У меня на карте файлы и разных регистрах и всё нормально видится.
Так что, разбирайтесь, что там не так у вас :) Хотя, раз работает, то и ладно.
PS: просьба, проверьте кто-нибудь последний коммит на гитхабе, рабочий он или нет, удалось немного уменьшить код за счет глобальных переменных и немного поправить цикл в 256 шагов на 8 битной переменной :) но, возможны глюки, у меня сейчас возможности проверить нет. Если у кого-то есть возможность - проверьте, пожалуйста.
PS2: проверил, всё работает как надо, так что можно не проверять )
EvgenRU
Проблема со сборкой в новых версиях у меня воспроизводится на XP. На 7 собирается нормально, так что это скорее проблема с тулчейном, а не с проектом.
А вот проблема с видимостью файлов на карте все-таки есть. Первая запись в каталоге не отображается в списке на эмуляторе. На скрине это файл LINUX.TRD. Эмулятор его не показывает. От регистра, как я подумал сначала, это не зависит. Не показывается именно первый файл в корневом каталоге.
http://savepic.net/8589886.png
Потестировать правки кода пока, к сожалению, не смогу - эмулятор собирал на соплях, и убедившись в работоспособности разобрал - буду переделывать в нормальном виде.
Да, проблема с первым файлом была ранее, видимо я подумал что она решилась (т.к. у меня несколько папок еще есть), а оказывается еще не решилась, ок, попробую её решить как будет еще свободное время :) (на неделе или выходных)
PS: со вложенными папками проблем нет, т.к. в них присутствуют файлы "." и "..", а в корневом каталоге их нет.
PS2: уже даже нашел конкретное место, где эта проблема возникает, так что на неделе исправлю.
PS3: если кто-то пользуется кнопками вместо энкодера, наверняка неудобно для перемещения каждый раз давить кнопку, попробую сделать, чтобы через какое-то время после нажатия листалось дальше, а то тогда делал на скорую руку :)
если кто-то пользуется кнопками вместо энкодера
Раз уж все равно будете перерабатывать эту часть кода, то было бы неплохо увеличить задержку для антидребезга контактов. На тактовых кнопках приходится ловить подходящий ритм нажатий. Частенько пролистывается по несколько файлов за одно нажатие. По крайней мере у меня так.
И еще раз спасибо, за то, что не забросили проект.
piroxilin
13.12.2016, 16:34
jel, Я проблему с ld.exe борол банально - заменил его на файл из старого релиза и всё заработало. В 165-й версии он (лд) тупой, это факт. Исправили-ли его в более новых релизах, я не знаю, .т.к. уже не слежу за ними.
oracleua
16.12.2016, 21:51
Вот и у меня появилось время сделать эмулятор.
Работает супер!!!!!
Спасибо EvgenRU за разработку.
Заработало с первого раза...без граблей.
Я проблему с ld.exe борол банально - заменил его на файл из старого релиза и всё заработало.
Чет у меня не очень то и помогло с файлом от старого релиза. Помогало запускать в режиме совместимости с Windows 95.
Потом поставил вот эту галку
http://s3.micp.ru/thumb/3L6ar.jpg (http://micropic.ru/3L6ar)
вроде все нормально. Что интересно , как раз этот проект компилится всегда хорошо, а вот простейший Blink без этой галки
на моей винде:) не компилируется, вылетает с ошибкой.
Ну и конечно мои благодарности автору этого проекта.
Пока что собрал проект от 23.04.16 без кнопучек, энкодера и 1602, чисто с одним файлом default.trd
Заработало с первого раза на моем Профи-ке :) Пока так, но энкодер и 1602 уже заказаны в Поднебесной и где-то в пути:)
Спасибо огромное!!!
Утром соберу тестовый стенд на эве, а то на кворуме неохота перетыкать микросхемы, и продолжу исследования, может быть получится и запись сделать, или хотя бы поддержку SCL, сделаю стенд с кнопками, т.к. энкодер вроде как уже довел до ума и не прыгает он как раньше. Если есть какие-то еще пожелания - пишите, пока есть настрой, но основная часть конечно же после НГ
EvgenRU, если получится сделать запись эмулятор из отличного превратится в великолепный и несравненный! :) А поддержка scl ИМХО не так уж и нужна - один раз конвертируется в trd в любом эмуляторе.
Можно вывод информации на дисплей слегка подправить? Чтобы показывал не только трек/головку но и сектор или будет слишком затратно по ресурсам?
ну и светодиод по чтению можно ли куда подключить?
Дык вроде и так подключен. Штатный ардуиновский диод весело моргает при обращении к диску.
Если есть какие-то еще пожелания - пишите
Из по-желаний :)
Нельзя ли совместить вот с этим проектом :
http://arduitapemarkii.blogspot.ru/
https://github.com/sadken/TZXDuino
http://savepic.net/8773285m.jpg (http://savepic.net/8773285.htm)
и сделать 2-в-1, ибо 9 вывод вроде свободен, ну и уменьшить на одну кнопочку.
Все остальное такойе же. Сложно ли:?
Если да, то хотя бы помочь запустить этот проект, ибо не компилится ни разу,
или библиотеки кривые или руки :(
Спасибо.
Ок, как доделаю то что запланировал по мелочи, добавлю поддержку тапков :) Ну а так, чтобы это скомпилировать нужно библиотеки проекта кинуть в Libraries, TZXDuino_V1.0.ino переименовать в TZXDuino.ino
Собрал тестовый стенд
59263
Долго не мог запустить, видимо у некоторых такая же проблема была с некоторыми картами.
Выходит, что у некоторых дешевых карт нет поддержки команды STOP при чтении сектора, поэтому чтение подвисало,
Исправил функцию чтения с карты, чтобы не использовалась данная команда и сразу все заработало.
ИСПРАВЛЕНИЯ:
1. Исправлена проблема с некоторыми картами не поддерживающими операцию останова приема данных.
2. Добавлена поддержка нажатой кнопки (т.е. пролистывание идет при нажатой кнопке, не нужно тыкать много раз).
--- Сделан коммит на гитхабе
3. Добавлено отображение кружочка :) если дисковод активен
--- Сделан коммит на гитхабе
4. Подумалось мне, что лучше убрать этот кружочек и сделать включение/отключение подсветки :)
--- Сделан коммит на гитхабе
5. Исправлен глюк с мигающим дисплеем в некоторых кривых приложениях, которые с большой частотой запускают/выключают мотор на реальных дисководах, сделал, чтобы не мигал :)
--- Сделан коммит на гитхабе
PS: проблему с неправильно отображающимся первым файлом пока что воспроизвести не удалось, сколько не пытался
PS2: было предложение отображать сектор, это бессмысленно, т.к. дискета крутится по кругу 300 оборотов и сектор меняется от 1 до 16, вы даже не успеете увидеть его номер :)
и библиотеки , идущие в комплекте кидал, и переименовывал, и в 1.8.1 пробовал компилить - нифига (
Нормально компилится, переименовывать не надо, библиотеки кидать в "arduino-1.8.1\libraries".
А я попробовал скомпилировать ZX_FDD_Emulator под Arduino Pro Mini на ATmega168 5V 16Mhz:
Скетч использует 9258 байт (64%) памяти устройства. Всего доступно 14336 байт.
Глобальные переменные используют 1052 байт (102%) динамической памяти, оставляя -28 байт для локальных переменных. Максимум: 1024 байт.
И ведь совсем чуть-чуть не хватило. А под код так и вообще 5КБ свободных осталось. Чего бы такого заоптимизировать? ;)
Можете уменьшить количество дорожек :)
#define MAX_CYL 82 /// maximal cylinder supported by FDD. More cylinders - more memory used.
#define MAX_DIR_LEVEL 10 /// maximal subfolders support 15 MAX. The higher level the more memory used
или уровень вложенности каталогов.
Класс! Сделал #define MAX_DIR_LEVEL 5:
Скетч использует 9258 байт (64%) памяти устройства. Всего доступно 14336 байт.
Глобальные переменные используют 987 байт (96%) динамической памяти, оставляя 37 байт для локальных переменных. Максимум: 1024 байт.
Недостаточно памяти, программа может работать нестабильно.
Да пофиг, главное влезла, побежал паять, отпишусь о результатах!
Нормально компилится, переименовывать не надо
процитирую
Проблема со сборкой в новых версиях у меня воспроизводится на XP. На 7 собирается нормально, так что это скорее проблема с тулчейном, а не с проектом.
вот и у мня на Хрюшке все компилиЦЦа, акромя этого проекта. Значит ли это, что у меня руки неправильной кривизны?
На другом компе на 7-ке
Нормально компилится, переименовывать не надо
Но все же жду от автора
Ок, как доделаю то что запланировал по мелочи, добавлю поддержку тапков
Попаял-попаял, вроде как оно конечно должно, но я пока что столкнулся вообще с принципиальной неработоспособностью своих комплектующих. Дисплей тупо светит подсветкой, я на нём даже Hello World пока что получить не смог. :v2_dizzy_facepalm: Ковыряю, разбираюсь. Чистое колдунство. А ардуину я вообще через SinaProg шью. :v2_biggr:
Скажите, а .scl пока не получилось прикрутить?
Скажите, а .scl пока не получилось прикрутить?
Пока что нет, т.к. для SCL нужно больше памяти или что-то изобретать, т.к. там данные расположены со смещением из-за укороченного заголовка. Попробую конечно еще поколдовать, как время будет...
Дисплей тупо светит подсветкой, я на нём даже Hello World пока что получить не смог.
А подстроечник крутили? Может просто выкручен в 0?
Но все же жду от автора
Честно, еще не начинал разбираться, с tap и tzx еще не работал, так что сначала придется разбираться с форматами, так не охота столько времени на это тратить :) но, обещаю, что разберусь, как будет время.
с tap и tzx еще не работал, так что сначала придется разбираться с форматами, так не охота столько времени на это тратить
Так это, а если из вышеприведенного проекта что выковырять?? он даже так себе вполне прилично писчит в 9-й выход, и на индикаторе отображает, и даже три кнопки вполне хватает :) Зачем изобретать велосипеды? а не совмещать их
Так это, а если из вышеприведенного проекта что выковырять?? он даже так себе вполне прилично писчит в 9-й выход, и на индикаторе отображает, и даже три кнопки вполне хватает :) Зачем изобретать велосипеды? а не совмещать их
Это то понятно, но чтобы хорошо совместить - нужно разобраться что там и куда вставлять, а на это нужно время...
andykarpov
10.03.2017, 12:57
Я тут платку ZX FDD Emulator развел для себя, может кому-нибудь еще пригодится: https://github.com/andykarpov/zx-fdd-emulator-pcb/
https://github.com/andykarpov/zx-fdd-emulator-pcb/raw/master/docs/pcb_3d.png
- - - Добавлено - - -
Только разъем для micro SD карточки взял первый попавшийся в Eagle, это Molex 49225-0821, вероятно это не самый дешевый разъем :) К тому же он перевернутый, ну то есть карточка вставляется в него вверх ногами. Нужно поискать что-то попроще, есть может у кого что-то более-менее распространенное / китайское в виде библиотеки для Eagle? :)
UPD: Версию с разъемом molex перенес в отдельный бранч, текущая версия в master - с другим слотом для SD-карточки.
Только разъем для micro SD карточки взял первый попавшийся в Eagle, это Molex 49225-0821
А может не разъём? Может модуль? В смысле сейчас цена модуля (https://aliexpress.com/wholesale?catId=0&initiative_id=SB_20170311131609&SearchText=sd+arduino) дешевле, чем цена разъёма.
Шаг выводов у них стандартный, цоколёвка правда бывает разной... но можно взять за основу которые подешевле или развести сразу под две модели (покупай любую и впаивай/приклеивай)
andykarpov
12.03.2017, 16:36
Модули все разные, размеры разные, распиновка тоже, в общем непонятно, универсального стандарта нет.
В репозитарий добавил новую версию платы, micro SD карточка другая, добавил 6-контактный разъем SPI для SD-модуля, но его все равно прийдется паять на проводках. Еще забыл 2 pull-up резистора на i2c шину, добавил в схему.
В любом случае - исходники платы открыты, можно брать и править под себя :)
Теоретически, если пожертвовать крепежными отверстиями, можно и полноразмерную SD-карточку приделать.
andykarpov
07.04.2017, 10:45
Приехали платки v1.0 и разъемы molex для sd-карточки, спаял первую ревизию платы.
60534
Нашлось сразу много мелких косяков:
1) если в качестве разъема для дисковода использовать shrouded header - ему не хватает буквально полтора миллиметра, чтобы встать нормально, мешается 3.3v регулятор. пришлось сам разъем снизу немного подпилить надфилем в этом месте :)
2) такая же история с разъемом для ISP, обычные pin headers встают без проблем. UPD: все норм становится, если разъем для SD-карты паять первым :)
3) посадочное место под подстроечный резистор не соответствует расстоянию между выводами подстроечника, имеющегося в наличии. мелочь, а неприятно
4) отсутствие pull-up резисторов на i2c шине, пока хз, насколько это критично и будет ли работать на внутренних подтяжках atmega328 UPD: не критично, хватает подтяжек на стороне атмеги.
5) порядок подключения дисплея к выводам pcf8574 отличается от порядка, принятого в китайских адаптерах
6) перемычки для выбора адреса pcf8574 не работают в открытом состоянии, потому что нет подтяжек. будет работать, только если все они замкнуты. соответственно, i2c адрес будет 0x20.
Завести текущую версию проекта пока полностью не получилось:
1) была попытка указать адрес и порядок пинов в LCDModule.h, но потом выяснилось, что в коде используется только LCDEX_ADDR, а остальные дефайны не используются, работа с i2c дисплеем захардкожена.
2) переписал LCDModule.h и LCDModule.cpp на использование библиотеки LiquidCrysyal_I2C, в конструктор которой можно передать в качестве аргументов порядок пинов
3) после чего было обнаружено, что текущая версия Arduino IDE 1.8.1 как-то не так интерпретирует main() - он просто не работает. пришлось int main() заменить на void loop() и добавить void setup().
4) после этого платка завелась, на экране отображается список файлов, по кнопке энкодера можно монтировать и отмонтировать образ
5) но сам энкодер не хочет работать по какой-то причине. после того, как его покрутить - все зависает намертво.
вот с этим пунктом, если можно - дайте, плз, совет. может энкодер какой-то не такой? или что-то можно подкрутить в коде?
Все завелось, версия ПО для ревизии платы 1.0: https://github.com/andykarpov/ZX_FDD_Emulator
Приехали платки v1.0 и разъемы molex для sd-карточки, спаял первую ревизию платы.
4) отсутствие pull-up резисторов на i2c шине, пока хз, насколько это критично и будет ли работать на внутренних подтяжках atmega328
Резисторы есть в клавиатуре
1) была попытка указать адрес и порядок пинов в LCDModule.h, но потом выяснилось, что в коде используется только LCDEX_ADDR, а остальные дефайны не используются, работа с i2c дисплеем захардкожена.
Захардкожены только датапины, остальные можно менять, если нужно, могу допилить эту часть
3) после чего было обнаружено, что текущая версия Arduino IDE 1.8.1 как-то не так интерпретирует main() - он просто не работает. пришлось int main() заменить на void loop() и добавить void setup().
Весьма странно, я проверял на всех версиях, вроде проблем с этим не было.
5) но сам энкодер не хочет работать по какой-то причине. после того, как его покрутить - все зависает намертво.
возможно подключенная библиотека или еще что-то использует те прерывания, которые повешены на энкодер.
andykarpov
09.04.2017, 15:51
Резисторы есть в клавиатуре
Ммм, в какой клавиатуре ? :)
Захардкожены только датапины, остальные можно менять, если нужно, могу допилить эту часть
Если можно - было бы здорово!
По поводу Arduino IDE и энкодеров - попробую проапгрейдиться, параллельно уберу лишние платформы, например STM32 и ESP8266, может где-то что-то подглюкивает :)
Ммм, в какой клавиатуре ? :)
Ой, это я с эмулятором клавиатуры попутал :-D
PS: а какие именно пины нужно переставить? А то я там что-то в коде уже потерялся, давно эту библиотеку писал...
PS2: предлагаю попробовать вот такой вариант функции отправки данный в экстендер
void twi_send_byte(unsigned char data)
{
twi_start(LCDEX_ADDR);
unsigned char data_out = 0;
if(data & 16) data_out |= _BV(LCDEX_D4);
if(data & 32) data_out |= _BV(LCDEX_D5);
if(data & 64) data_out |= _BV(LCDEX_D6);
if(data & 128) data_out |= _BV(LCDEX_D7);
TWDR = data | _BV(LCDEX_LIGHT & light_val); //temporary
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT)));
twi_stop();
}
andykarpov
09.04.2017, 19:48
Кусок не работает.
В нет, как минимум, перестановки остальных значащих битов (RS,RW,EN), + мы инициализируем data_out, но при этом передаем все равно data :)
Ну и непонятно откуда взявшаяся переменная light_val.
Кусок не работает.
В нет, как минимум, перестановки остальных значащих битов (RS,RW,EN), + мы инициализируем data_out, но при этом передаем все равно data :)
Ну и непонятно откуда взявшаяся переменная light_val.
Да, что-то я поторопился :)
void twi_send_byte(unsigned char data)
{
twi_start(LCDEX_ADDR);
unsigned char data_out = 0;
if(data & 16) data_out |= _BV(LCDEX_D4);
if(data & 32) data_out |= _BV(LCDEX_D5);
if(data & 64) data_out |= _BV(LCDEX_D6);
if(data & 128) data_out |= _BV(LCDEX_D7);
TWDR = data_out | _BV(LCDEX_LIGHT & light_val); //temporary
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT)));
twi_stop();
}
light_val определена как
uint8_t light_val = LCDEX_LIGHT;
в функции включения подсветки ей присваивается light_val = LCDEX_LIGHT;
а в выключении ноль, что вполне нормально, т.е. этот пин можно спокойно переставлять.
в крайнем случае, чтобы всё время светилась можно
вместо _BV(LCDEX_LIGHT & light_val)
написать _BV(LCDEX_LIGHT);
(RS,RW,EN) не нужно переставлять, т.к. они определены в дефайне
и везде заданы как data |= _BV(LCDEX_EN); и т.д. т.е. берется номер бита и преобразуется в значение.
UPD: совсем забыл еще, что в дате могут быть другие данные :)
тогда переделаю всё библиотеку в ближайшие 2-3 дня....
andykarpov
10.04.2017, 00:17
Вот форк репозитария https://github.com/andykarpov/ZX_FDD_Emulator с прошивкой для платы ревизии 1.0.
Изменения:
- работа с port extender PCF8574 идет через библиотеку Wire + кастомную распиновку
- отключен encoder до выяснения причин
- int main() заменен на setup() и loop() - так и не понятно, почему так. может сборка Arduino (1.8.2) и/или avr-gcc под мак какая-то не такая
Попробуйте такой вариант, вроде должен работать.
andykarpov
10.04.2017, 09:11
Попробуйте такой вариант, вроде должен работать.
Спасибо большое! Код должен работать, по-идее, но не хочет.
Мне кажется, где-то что-то с таймингами в самой реализации немного не то, или дисплей медленный.
С библиотекой Wire работает, Ваша реализация - не хочет заводиться. :(
andykarpov
10.04.2017, 12:38
Может попробовать на чистом avr-gcc проект собрать, без участия Arduino? Попробую на досуге. Makefile нарисовать надобно :)
andykarpov
13.04.2017, 12:13
Поизучал исходники ардуиновской библиотеки Wire - и теперь понятно, почему ее нельзя использовать для ZX FDD Emulator, она использует прерывание TWI_vect, и, вероятно, это есть причина конфликта и зависаний.
Ну да, оно как раз на порту C, где и энкодер, видимо библиотека производит инициализацию прерывания так, что забивает PCINT10 и PCINT11, тут или перенести прерывания на другой порт, или попробовать проинициализировать энкодер после инициализации Wire (SCL/SDA это вроде как PCINT12, PCINT13)
А вот и я собрал!
На ATmega168 не взлетел — после монтирования карточки начинает истошно моргать надписью "CARD MOUNT OK", памяти всё-таки не хватает.
Разобрался почему у меня индикатор не показывал — у моих китайских I2C device адрес оказался 0x3F.
И сначала "не читались диски", поменял местами 0 и 1 (они вообще забавно на плате обозначены как RX1 и TX0 !!!).
http://i89.fastpic.ru/thumb/2017/0414/c1/920723cf1fdc87c96d38ef143570e3c1.jpeg (http://fastpic.ru/view/89/2017/0414/920723cf1fdc87c96d38ef143570e3c1.jpg.html) http://i89.fastpic.ru/thumb/2017/0414/f9/ee625ca2c61b966b3e04fb1c27c8c3f9.jpeg (http://fastpic.ru/view/89/2017/0414/ee625ca2c61b966b3e04fb1c27c8c3f9.jpg.html)
Вопрос:
#define MAX_CYL 82 /// maximal cylinder supported by FDD. More cylinders - more memory used.
Т.е. будут работать более длинные TRD на 82 дорожки? Или сколько зададим (понятно что лишь бы памяти хватило).
Хочется "перделку". Если невозможно, то в крайнем случае я вот так сделаю (на прототип HxC уже поставил):
http://retroramblings.net/wp-content/uploads/2014/04/GotekSounder2.png
Вопрос:
#define MAX_CYL 82 /// maximal cylinder supported by FDD. More cylinders - more memory used.
Т.е. будут работать более длинные TRD на 82 дорожки? Или сколько зададим (понятно что лишь бы памяти хватило).
Да, именно так, эта константа указывается для предварительной генерации таблицы смещений кластеров, соответственно, чем больше дорожек попадает в эту таблицу, тем больше памяти будет использоваться под неё.
Хочется "перделку". Если невозможно, то в крайнем случае я вот так сделаю (на прототип HxC уже поставил):
:-D зачем эта перделка?.... ну, как бы можно сделать, только вот как частоту туда... через PWM? и какая частота нужна? и в какой момент? пока идет чтение?
andykarpov
14.04.2017, 13:34
Попробуйте такой вариант, вроде должен работать.
Код заработал! Все это время я пытался завести Ваш код с неправильным адресом 0x20 вместо 0x40 ;)
Поймал глюки - дисплей не успевал отрисовывать 2 строчки, видимо из-за медленного дисплея, полечилось увеличением значения LCD_DELAY_ENABLE_PULSE до 2.
Спасибо большое! Залил в свой форк: https://github.com/andykarpov/ZX_FDD_Emulator
В Вашем репозитарии завел один issue, просьба глянуть: https://github.com/EvgeniyRU/ZX_FDD_Emulator/issues
Всё поправил, Спасибо!
PS: -2 там не анализируется, т.к. он используется для проверки на начало - конец списка, так что на монтирование в данном случае не нужно переходить!
andykarpov
21.04.2017, 14:05
Видео с демонстрацией работы собранного устройства ZX FDD Emulator v1.0:
https://www.youtube.com/watch?v=w26ZNigpayE
Можите ли выложить прошивку для платы ревизии 1.0 в HEX или BIN
andykarpov
26.04.2017, 16:32
Можите ли выложить прошивку для платы ревизии 1.0 в HEX или BIN
Да, конечно, надо только ее из Arduino'вской IDE как-то выудить :)
Вам под кнопки или под энкодер?
- - - Добавлено - - -
https://yadi.sk/d/ueRsEJRz3HNgNM - собрал и под кнопки, и под энкодер.
А затею с выбором образа непосредственно со Спектрума не стали развивать? В этом случае железо упрощается: - дисплей, - энкодер, наверняка можно освободить часть кода и тогда он, возможно, полезет и в меньшие ардуинки. Пины освободятся опять же для новых идей. Да и на экране список файлов всяко нагляднее.
CLR, это всё хорошо, но при запущенной программе невозможно сменить диск.
Проект просто потрясный.
READ DATA в формате MFM
А методом FM, при изменении программы, слать можно?
У Радио-86РК запись идет FM методом. В остальном, все должно быть совместимо.
Прикрутить этот девайс к РК, вместо устаревших и неудобных флопиков, было бы очень здорово.
Зачем так надрываться и эмулировать дисковод с его сложным протоколом обмена с микросекундными и жёсткими времянками? На два порядка проще сделать аппаратный эмулятор IDE-винчестера, с его простейшим обменом в параллельном интерфейсе и без всяких привязок ко времени (особенно, если контроллер винта работает в 8-ми разрядном режиме). ДОС работают с диском через подпрограммы чтения и записи сектора и им без разницы как устроен физический носитель. Для этого сгодится не только atmega8, но и простейший контроллер на Z80 с ПЗУ на РФ2 и ОЗУ в 1 кб (на статике 6514). И скорость обмена будет на порядок выше.
Понятно, что эмуляция флопа даёт универсальность. Но в стране все КНГМД на базе ВГ93. Потому, если уж так надо иметь в системе дисковод (например, нет ДОС с поддержкой винчестера), то почему не эмулировать контроллер НГМД, вместо самого НГМД ? Причём это тоже может сделать любой низкоскоростной контроллер с минимумом ресурсов.
почему не эмулировать контроллер НГМД, вместо самого НГМД
Я тоже об этом думала. Но это ведь нужно делать, верно?
А тут готовый проект, да еще и на Ардуино (тоже готовая плата и модули). Все супер, только нужна небольшая адаптация по кодированию.
s_kosorev
03.06.2017, 20:50
то почему не эмулировать контроллер НГМД, вместо самого НГМД ?
Контролер подключен к процессору и должен реагировать на скорости процессора, дискета гораздо более медленное устройство
Проект просто потрясный.
А методом FM, при изменении программы, слать можно?
У Радио-86РК запись идет FM методом. В остальном, все должно быть совместимо.
Прикрутить этот девайс к РК, вместо устаревших и неудобных флопиков, было бы очень здорово.
Можно, проблем никаких, только если размер сектора 256 байт, или хотя бы кратен, напишите какой там формат образа диска, может будет время - сделаю.
Зачем так надрываться и эмулировать дисковод с его сложным протоколом обмена с микросекундными и жёсткими времянками? На два порядка проще сделать аппаратный эмулятор IDE-винчестера, с его простейшим обменом в параллельном интерфейсе и без всяких привязок ко времени (особенно, если контроллер винта работает в 8-ми разрядном режиме). ДОС работают с диском через подпрограммы чтения и записи сектора и им без разницы как устроен физический носитель. Для этого сгодится не только atmega8, но и простейший контроллер на Z80 с ПЗУ на РФ2 и ОЗУ в 1 кб (на статике 6514). И скорость обмена будет на порядок выше.
Понятно, что эмуляция флопа даёт универсальность. Но в стране все КНГМД на базе ВГ93. Потому, если уж так надо иметь в системе дисковод (например, нет ДОС с поддержкой винчестера), то почему не эмулировать контроллер НГМД, вместо самого НГМД ? Причём это тоже может сделать любой низкоскоростной контроллер с минимумом ресурсов.
Тогда уж проще Z-Controller сделать на мелкой CPLD.
Тырдос с поддержкой HDD есть не под все модели памяти, к сожалению, а писать эмуляцию ВГ с нуля как-то затратно по времени будет.
Насчет эмуляции ВГ на МК, думаю это технически возможно, на какой-нибудь Atmega644 или Atmega1284P.
Насчет эмуляции ВГ93 на МК, думаю это технически возможно, на... Atmega1284P
Контролер подключен к процессору и должен реагировать на скорости процессора
Нет. Всё наоборот. Это процессор должен поспевать за контроллером. Контроллер может работать с какой угодно низкой скоростью и никого это не волнует. В петле чтения/записи байта просто нет времени на проверку "тайм-аутов", поэтому она и не делается. Процессор работает по готовности. Процессор считывает готовность, - аппаратную (с 38-й или 39-той ног ВГ93), или же программную (из регистра статуса). Он в цикле ждёт готовности от контроллера и (т.к проверки на "тайм-аут" нет) готов ждать этого часами. Как только выставлен флаг готовности, то процессор читает из регистра данных считанный байт или записывает туда байт подлежащий записи в сектор. Пауза между готовностями может быть любой, процессору это без разницы, лишь бы он в паузе между выдачей/запросом двух байтов успевал скинуть считанный байт по LD (HL),A и сделать INC HL. Минимальная частота на которой CPU успевает это делать - 2.5 МГЦ. Поэтому если выдавать считанные байты медленнее, то процессор будет только рад. В смысле, что никаких проблем это не вызывает. Надеюсь, все это знают и приводить фрагменты листингов не требуется.
Это в случае программного обмена. Так работают все известные отечественные контроллеры на ВГ93, за двумя исключениями. Это промышленный контроллер от одного клона РК86, в котором обмен с ВГ93 не программный (т.к скоростей РК86 на это не хватает), а аппаратный с использованием ПДП. А также контроллер НГМД от ИРИШИ, которая тоже слишком медленна, чтобы обойтись без ПДП. Но и использование ПДП не создаёт особых проблем.
Микроконтроллер эмулирующий КНГМД должен просто ждать когда в регистр команд ВГ93 запишут команду (например чтения/записи сектора, формат трека, шаг головки и т.п) а затем её выполнить (т.е эмулировать). А с какой скоростью он это делает никого не волнует. В отличие от эмулятора дисковода, где такт импульсов очень высокий и не может быть понижен. Но даже это излишняя работа, т.к эмуляция работы контроллера IDE ещё на порядок проще.
Поэтому для эмулятора контроллеров НГМД и IDE вовсе не нужен скоростной Atmega1284P, а наоборот, достаточно процессора 4004 с тактом 750 кГЦ выпуска 1971 года.
Поэтому для эмулятора контроллеров НГМД и IDE вовсе не нужен скоростной Atmega1284P, а наоборот, достаточно процессора 4004 с тактом 750 кГЦ выпуска 1971 года.
Вот здесь я немножко поспорю, ведь контроллер должен отдавать данные дисководу и принимать их в MFM/FM на скорости 1МГц, при этом, данные нужно еще кодировать/раскодировать, у обычных атмег типа 328p может не хватить ног для подключения одного регистра на шину данных или памяти под буфер чтения/записи (уж очень у них глупо ноги расположили), а у Atmega128 и подобных нет MASTER SPI для комфортной передачи данных в FM/MFM.
контроллер должен отдавать данные дисководу и принимать их в MFM/FM на скорости 1МГц, при этом, данные нужно еще кодировать/раскодировать
Эмуляторы контроллера дисковода или винчестера IDE работают не с дисководом, а с любым другим достаточно быстрым носителем, будь это просто ОЗУ из SIMM на 1...64 мб (тогда для регенерации удобен Z80 с его /RFSH + счётчик для формирования доп.адресов регенерации), 'micro-SD' от телефона на 1/2/4 Гб или даже обычный кассетный магнитофон МАЯК-231 с электронным управлением (позволяющий быстрый автоматический поиск нужной записи). И процессор эмулятора контроллера должен соответствовать требованиям к быстродействию только этих устройств.
Эмуляторы контроллера дисковода или винчестера IDE работают не с дисководом, а с любым другим достаточно быстрым носителем, будь это просто ОЗУ из SIMM на 1...64 мб (тогда для регенерации удобен Z80 с его /RFSH + счётчик для формирования доп.адресов регенерации), 'micro-SD' от телефона на 1/2/4 Гб или даже обычный кассетный магнитофон МАЯК-204 с электронным управлением (позволяющий быстрый автоматический поиск нужной записи). И процессор эмулятора контроллера должен соответствовать требованиям к быстродействию только этих устройств.
Если речь не идет о работе с реальным дисководом, то вынужден вас огорчить, это всё уже реализовано в проекте Speccy 2007 + TRDOS на Atmega32 и даже имеются исходники.
EvgenRU, barsik, эмулятор контроллера флопа работал бы медленнее, чем эмулятор самого флопа. Если флоп работает с каждым битом, то контроллер (со стороны ДОС) работает уже с целыми байтами. И кодировать эти байты ни во что не надо, и отдавать ДОСу надо намного медленнее (реже), чем биты - контроллеру.
Понятно, что это уже совсем другое устройство (проект) и другие тайминги. Из плюсов - любой человек, не имеющий не только флопа, но и контроллера, сможет пользоваться ДОС. То есть ДОС становится равной магнитофону, который всегда доступен любой ретро-ПЭВМ. Учитывая тот факт, что ДОС иногда запихивают на плату с контроллером, устройство могло бы размещать эти ПЗУ на себе (эмуляция ПЗУ будет не по силам слабым мега-м).
Эмуляция контроллера флопа особенно актуальна на той же Суре, у которой комплект для работы с FDD стоил диких денег, и доступен был лишь очень немногим.
Хотя, это уже совсем другой проект, и как говорится не в то время, и не в том месте. :)
Можно, проблем никаких, только если размер сектора 256 байт, или хотя бы кратен
Упс, я с лету забыла про проблему памяти на меге328. Сама сталкивалась с 2048 байтами и ее постоянно нехваткой, это жесть.
Размер сектора кратный, но он 512 байт (не считая служебных данных в начале и конце сектора + 42 байта).
В моем формате образа диска РК (RDI), начало каждого трека и сектора вычисляемое (фиксированное). Внутри трека добавлены межсекторные промежутки в 71 байт, чтобы соответствовать стандарту скорости вращения (300 об/мин = 3125 байт на сектор). Сам сектор пишется со всеми служебными данными "один в один".
Этот формат полностью поддерживается программным эмулятором Emu80 (http://zx-pk.ru/threads/27488-emu80-v-4.html).
INDEX - LOW - 3.52ms, между индексами HIGH примерно 196ms, погрешность 0.1%
Да, 200 мс. Между битами 8 мкс, между байтами 64 мкс. (200 мс / 0,064 мс = 3125 байт).
Частота вывода бит на линию получается 125кгц.
Идея эмуляции КНГМД и дисковода более простым и дешёвым контроллером использующим в качестве носителя магнитофон с электронным управлением опоздала на ~30 лет. Да и в дешёвых отечественных магнитофонах (за 150 рублей) управление режимами было механическим. Электронное управление, т.е кнопками с электрическими контактами было только на дорогих моделях конца 80-тых: Вега-МП-120, ОРЕЛЬ-101, МАЯК-231...233, НОТА-225, ЯУЗА-220, Вильма-312. И стоили они дорого, 250...550 рублей. Например: ОРЕЛЬ-101 - 440 рублей, ЯУЗА-220 - 405 рублей.
Новый дисковод 5050 с резиновым пассиком (35 треков, 1 сторона, 140 кб) обошёлся мне летом 1989 всего в 180 рублей. Дисковод 5305 летом 1990 обошёлся в 500 рублей. А летом 1991 цена дисководов 5311 упала уже всего до 400 рублей. А дальше цены на НГМД падали ещё быстрее. Так что эмуляция дисковода на магнитофоне в 1990-93 не дала бы существенной экономии. К тому же с магнитофоном только авто-поиск файла занимает 20-30 секунд, плюс еще время загрузки файла со скоростью килобайт за 4 секунды.
Но при использовании 'micro-SD' или даже просто большой статической памяти подобное устройство эмуляции винчестера даже сейчас имеет смысл.
всё уже реализовано в проекте Speccy 2007 на Atmega32 и даже имеются исходники
Не думаю, что там эмулирован РК-КНГМД с FM и секторами в 512 байт, в котором нет ВГ93, а схема реализована на TTL-микросхемах. Чужие исходники для Atmeg мне не интересны, т.к в них ничего не понимаю. Но сделать такой контроллер на простейшем ядре на Z80 несложно.
Упс, я с лету забыла про проблему памяти на меге328. Сама сталкивалась с 2048 байтами и ее постоянно нехваткой, это жесть.
К атмеге несложно прикручивается внешняя DRAM с программным CAS-before-RAS рефрешем. В частности, так было сделано в моем эмуляторе дисковода Megadrive256 (mega2560 + SIMM на 4 или 8 мегабайт). Но вот формировать битовый поток для флопа хотя бы на чтение на меге можно, но сложно. У меня были очень тесные, до такта выверенные циклы на ассемблере, перемешанные с регенерацией DRAM и обработкой прочей периферии. А ведь рано или поздно захочется и запись. Резюме: оставить AVR для несложных поделок, а сколь-нибудь быстрые вещи делать на STM32.
К атмеге несложно прикручивается внешняя DRAM с программным CAS-before-RAS рефрешем. В частности, так было сделано в моем эмуляторе дисковода Megadrive256 (mega2560 + SIMM на 4 или 8 мегабайт).
Да я видела, но это ведь закрытый проект. И память в нем раритетная (SIMM). :)
А тут автор сделал все замечательно, на копеешных ардуино модулях (которые более чем доступны в продаже) и с открытыми исходниками, за что ему огромный респект. :v2_thumb:
Доступность рулит, имхо. :v2_yahoo:
А тут автор сделал все замечательно, на копеешных ардуино модулях (которые более чем доступны в продаже) и с открытыми исходниками, за что ему огромный респект.
Доступность рулит, имхо.
Полностью согласен! :)
PicNov76
04.06.2017, 14:32
Можно ли установить atmega328 вместо arduino uno, если да, то какой прошивкой шить?
Можно ли установить atmega328 вместо arduino uno, если да, то какой прошивкой шить?
Можно, я свой именно так и делал, открываете проект в Arduino IDE последних версий,
В меню "Инструменты" выбираете "Процессор" ATmega328
В меню "Скетч" жмете "Экспорт бинарного файла"
Ищете в папке со скетчем HEX файл и шьете его любым удобным способом в атмегу328
Я, например, шью с помощью avrdude такой строчкой
avrdude -p atmega328p -c USBasp -U flash:w:ZX_FDD_Emulator.ino.standard.hex -U lfuse:w:0xcf:m -U hfuse:w:0xd7:m
можно зашить и на плате ардуино без программатора или зашить программатором на ней же, это уже как хотите.
PicNov76
04.06.2017, 15:47
Платы arduino нет, буду шить в дудке. Есть модули sd с преобразователем уровней pf3ab v125 и стабом на 3,3 вольта, есть без преобразователя. Какой предпочтительней? Я так понимаю, что уровни согласовывать надо? Еще вопрос, запись на диск удалось организовать?
Платы arduino нет, буду шить в дудке. Есть модули sd с преобразователем уровней pf3ab v125 и стабом на 3,3 вольта, есть без преобразователя. Какой предпочтительней? Я так понимаю, что уровни согласовывать надо? Еще вопрос, запись на диск удалось организовать?
Лучше с преобразователем.
Пока что нет, времени разбираться пока что нет.... много всяких дел...
s_kosorev
04.06.2017, 21:06
Нет. Всё наоборот. Это процессор должен поспевать за контроллером.
Да, ладно, смотрим к примеру KAY и не наблюдаем что бы FDC управлял wait для процессора
Тогда простейший кей, проц читает регистр статуса или регистр данных, AVR не успеет выставить данные на шину, что бы процессор успел прочитать. Именно о этом речь. Аналогичная ситуация может быть с латчем данных от процессора, но тут как бы проще, не нужно дополниетльно менять направление gpio или выставлять OE для внешнего буфера
OrionExt
04.06.2017, 21:37
Эх, barsik. Понеслась. Возвращайте к теме. А эти вставки если бы да кабы – лесом.
- - - Добавлено - - -
Не - это ппц. Может я тоже предложу сделать КГМД (ide) на парфо-картах. А чего будет работать=). В этой теме.
Да ладно, смотрим к примеру KAY и не наблюдаем что бы FDC управлял WAIT для процессора
Не знаю о каком KAY речь. Я имею схему только KAY-256 из 1994. На нём используется внешний КНГМД (для чего и стоят два слота). Т.е используется обычный контроллер для TR-DOS. А там WAIT для ожидания готовности данных не используется.
Хотя есть схемы КНГМД, где для того чтобы процессор успевал на такте ниже 2.5 МГЦ, WAIT используется именно для этих целей. Но даже при таком принципе работы КНГМД эмулятору не нужна бешенная скорость. Впрочем, таких схем КНГМД для ZX нет, т.к его скоростей хватает.
Процессор читает регистр статуса или регистр данных, AVR не успеет выставить данные на шину, что бы процессор успел прочитать
А зачем же Ваш AVR с'эмулировал в регистре статуса флаг готовности, если еще не записал данные в регистр данных. Пока нет флага готовности процессор ничего не будет читать из регистра данных, а будет покорно ждать флага готовности часами. Медленный процессор 4004 сначала запишет в регистр данных данные для считывания, а только затем поставит флаг готовности в регистре статуса.
нужно дополнительно менять направление GPIO
Ничего не знаю о GPIO. Я не знаком с AVR, для меня вообще AVR, Atmega, Arduino, ПЛИС и т.п - пустой звук. А точнее, такие абсолютно непонятные слова я приравниваю к матерным ругательствам. Т.к у меня рэтро-хобби. Но со схемами КНГМД, алгоритмами их работы и с их программированием я знаком.
s_kosorev
04.06.2017, 22:02
Но со схемами КНГМД, алгоритмами их работы и с их программированием я знаком.
если процессор не ждет пока FDC выставит данные, а FDC не успевает, будет фейл, доступно? :)
- - - Добавлено - - -
Хотя мы может говорим о разных вещах, под FDC я понимаю ВГ93 а не весь девайс в сборе, т.е. вставляемый в панельку вместо реальной микросхемы
OrionExt
04.06.2017, 22:15
Хи. Вы о разном говорите. Если бы я автором топика – гнал бы я вас допустим (метлой):D
Хи. Вы о разном говорите. Если бы я автором топика – гнал бы я вас допустим (метлой):D
В споре рождается истина (с)
По теме, есть регистр #FF, у него 2 старших бита это сигналы DRQ (бит6) и INTRQ (бит7), они никакого отношения к самому регистру не имеют, а являются внешними сигналами, т.е. даже если атмега(или кто-то еще) не выставила на ШД статус, но заранее выставила эти 2 сигнала, говорящих о неготовности регистра, то регистр можно читать и анализировать готовность, насколько я на данный момент понимаю. Т.е. если есть готовность, то данные в регистре актуальны, иначе читаем дальше.
Ну и еще чтение #1F дает нам информацию о выполненных/выполняющихся командах ВГ.
TR-DOS всё это дело анализирует при чтении портов, и это главный геморрой в деле прикручивания полноценного рамдиска и различных внешних накопителей, таких как SD и HDD, требуется переработка кода TR-DOS для эмуляции ВГ.
omercury
05.06.2017, 02:21
В споре рождается истина (с)
В споре рождается срачь (с)
А зачем же Ваш AVR с'эмулировал в регистре статуса флаг готовности, если еще не записал данные в регистр данных.
Записал, не сомневайтесь, только шина-то одна...
В контроллере адрес регистра статуса либо регистр данных выбирается аппаратно (то есть на уровне быстродействия логики), а любой МК должен проанализировать управляющие сигналы и выдать в порт нужные данные, на что, как ни странно, тратится время.
Вот собственно и вся разница.
абсолютно непонятные слова я приравниваю к матерным ругательствам
Вот и не ввязывайтесь в спор о материях, в которых ничего не понимаете.
В споре рождается срачь
В споре рождается срач, только если в форум сра... гадить.
И никакого спора нет. Все давно поняли мою правоту. Похоже, Вы единственный, до кого еще не дошло. Кроме того, как указали в предыдущих постах, данную идею уже давно реализовали. Так что, о чём тут спорить и что доказывать ?
не ввязывайтесь в спор о материях, в которых ничего не понимаете
В качестве примера я рассматриваю реализацию МК на обычном МП ядре с обычным CPU. Здесь речь идёт об идее, о алгоритме работы и его реализуемости. Сложности реализации на AVR или другом прогрессивном кристалле вне данного вопроса. Чтобы обсуждать алгоритм не нужны знания о данных "материях". Достаточно посмотреть в исходном тексте программы как CPU работает с контроллером дисковода или винта. Тут вообще не требуется никаких знаний даже аппаратуры этих контроллеров. Исходный текст даёт знание алгоритма и этого достаточно, чтобы разработать эмулятор, хоть на прогрессивном МК, хоть на самом древнем CPU со своим ОЗУ, ПЗУ и интерфейсом с шиной основного процессора.
В контроллере адрес регистра статуса либо регистр данных выбирается аппаратно (то есть на уровне быстродействия логики), а любой МК должен проанализировать управляющие сигналы и выдать в порт нужные данные, на что, как ни странно, тратится время.
Регистр данных и регистр статуса находятся внутри ВГ93, а в эмуляторе контроллера НГМД и винта эти регистры тоже есть аппаратно (хотя задействовав WAIT можно сократить железо и обойтись всего одним регистром на вывод). Что Вы оспариваете ? Процесор читает данные из регистра данных, когда они уже готовы и скорость с какой он это делает ни на что не влияет. Также и при записи, процессор не будет писать в регистр данных ничего, пока не будет готовности. Все операции выполняются только по готовности. И процессор готов ждать этого часами.
есть регистр #FF, у него 2 старших бита это сигналы DRQ и INTRQ
Это 38-я и 39-я ноги ВГ93. Они в КНГМД большинства ЭВМ не используются (т.к для их чтения тратится лишний буфер) и используются только в ZX. Но эти выходы ВГ93 позволяют сделать опрос готовности аппаратным. Например, в КНГМД разработанным Л.Афанасьевым для СПЕЦИАЛИСТА, где такт КР580 всего 2 МГЦ, для ускорения работы эти выходы используются для вывода КР580 из захвата шины. Когда КР580 хочет считать байт из ВГ93, он переводит себя в HOLD и зависает. По сигналу на выводе DRQ ВГ93 процессор выходит их HOLD и сразу же читает или пишет байт данных, не теряя время на цикл и анализ готовности. Я встречал аналогичную схему, где CPU с этой же целью переводится в WAIT, что по-моему традиционнее.
TomaTLAB
05.06.2017, 08:39
Записал, не сомневайтесь, только шина-то одна...
В контроллере адрес регистра статуса либо регистр данных выбирается аппаратно (то есть на уровне быстродействия логики), а любой МК должен проанализировать управляющие сигналы и выдать в порт нужные данные, на что, как ни странно, тратится время. Если микроконтроллер успевает по сигналу чтения отдать на шину слово состояния, то по какой такой причине он не успеет таким же макаром отдать байт данных? Ну а если не успевает, то и говорить не о чем, городим внешние защелки, так же как и в случае если у нас не МК со встроенными портами ВВ, а голый процессор этим занимается. Или берем МК пошустрее, или вообще какой нибудь 8042 у которого встроенный интерфейс с шиной.
omercury
05.06.2017, 09:24
Если микроконтроллер успевает по сигналу чтения отдать на шину слово состояния, то по какой такой причине он не успеет таким же макаром отдать байт данных?
Люди говорят: "не успевает" - значит не успевает. :D
Наверное потому, что статус уже лежит в буфере порта.
Ну а если не успевает, то и говорить не о чем, городим внешние защелки
Вот и я про это.
Мы тут с котом тиаритезируем, вот я базу под это и подвёл. ;)
Вы единственный, до кого еще не дошло.
Убейте - не понимаю - зачем делать то же самое, но хуже?
TomaTLAB
05.06.2017, 09:54
Наверное потому, что статус уже лежит в буфере порта.
А с чего это он вдруг там уже лежит? Кто сказал, что вот прям щас там нужен именно статус а не данные?
Чем же они так кардинально различаются с точки зрения чтения с шины?
+ еще нужно учитывать тот факт, что после чтения сектора мы спокойно можем делать задержку, на любое время перед чтением следующего
UPD: меня вот что интересует, команда ВГ 100xxxxx чтение сектора, куда она его читает? в буфер и потом из буфера читается портом #7F или она сразу в память читает?
Если микроконтроллер успевает по сигналу чтения отдать на шину слово состояния, то по какой причине он не успеет отдать байт данных?
Да зачем микроконтроллеру успевать отдавать данные ?
Похоже, что мы говорим о разных схемах эмулятора. Зачем микроконтроллеру заменять программным путем регистр данных или статуса ? Проще иметь эти регистры аппаратно, ведь все регистры размещаются по разным адресам. Это может быть часть ППА или просто ИР22/23. Если помните, в ИР23 сигнал /OE не мешает защелкивать данные в регистр. Процессор 8008 записал в ИР23 байт, который якобы считался из дисковода (а на самом деле из очень большого ОЗУ), а затем записал в регистр статуса или в 2-х разрядный регистр имитирующий ноги 38,39 ВГ93 (что зависит от схемы КНГМД) признак готовности. И всё. Дальше от отдыхает. Ждёт когда произойдёт чтение регистра данных основным процессором, по которому автоматически (аппаратно, т.е без участия процессора 8008) бит в регистре статуса сам сбросится. Узнав об этом, процессор эмулятора, не торопясь, проверит, что в счётчике пакета (BC, где изначально число байтов в секторе) не 0, а после чего снова считает очередной байт: LD A,(HL) : LD (DATA),A : INC HL : LD (READY),A и на петлю контроля флага в регистре статуса.
А Вы, похоже, говорите о схеме, в которой в качестве интерфейса с ЦП на чтение c контроллера есть всего один ИР22. Тогда нужен триггер формирующий сигнал WAIT шины ЦП. Как только ЦП попытается считать что-то с регистра данных или статуса, то он зависнет по WAIT и будет ждать данных. Тогда 8008 должен выяснять какой адрес стоит на шине, чтобы понять читается регистр данных или регистр статуса и соответственно записать в ИР23 нужное число, а потом сбросить триггер WAIT для ЦП. Это тоже не станет проблемой скорости, т.к не важно с какой скоростью ЦП читает данные из регистра данных и переносит их в своё ОЗУ.
меня вот что интересует, команда ВГ93 чтение сектора, куда она его читает? В буфер и потом из буфера читается портом #7F или она сразу в память читает?
Вопрос неточный, но суть вопроса ясна. Это зависит от типа носителя. В старых microSD до 2 Гб была байтовая адресация (32 разряда адреса хватает лишь на 2 Гб). Также в обычном ОЗУ адресация побайтовая. Зачем же эмулятору читать в какой-то промежуточный буфер целый сектор и только потом выдавать его на интерфейс? Это только тормознёт. Но в новых 'microSD' в которых адресация посекторная, а также, возможно для ускорения, можно считывать целый сектор в промежуточный буфер.
В отличие от прогрессивных МК, древний CPU может адресоваться только к 64К (а 8008 вообще лишь 16К). Поэтому для адресации большого ОЗУ следует применять HD64180ZP8, с встроенным MMU или же нужен регистр, играющий роль менеджера памяти. Удобно сделать окно доступа к большому ОЗУ в 32К, отчего и от 8008 придётся отказаться (т.к он адресуется лишь к 16К) и применить КМОП Z80 (SU880) на такте, например, 2 МГЦ. Тогда по числам, что ЦП записал в регистр трека и регистр сектора, получив команду чтения сектора, Z80 эмулятора вычисляет номер полу-банки и записывает это в регистр выбора полубанки. Отчего в адресном пространстве Z80 возникает фрагмент большой памяти, где находятся нужные данные. Далее по числу в регистре сектора вычисляется адрес начала нужных данных в ОЗУ и загружается в HL, а в BC размер сектора и начинается передача байта за байтом данных (якобы считанных из сектора).
У меня возник другой вопрос. Если Вы в качестве носителя используете флэш память у которой очень ограниченное число перезаписей, то раз в сколько дней надо менять карточку 'microSD' на новую. Это обычное ОЗУ может работать по 40 лет и скорость их выхода из строя не зависит от числа перезаписей. А на 'microSD' и других флэш носителях можно делать только устройства типа ROM. Вот почему в новомодные цифровые магнитофоны на базе флеш-памяти не вводят запись.
TomaTLAB
05.06.2017, 14:29
А Вы, похоже, говорите о схеме, в которой в качестве интерфейса с ЦП на чтение c контроллера есть всего один ИР22. В которой вообще нет ни ИР22, ни ИР23 :D
Владимир, я Вашу идею прекрасно понимаю. И не вижу в ней никаких противоречий.
Здесь скорее в другом вопрос, успеет или нет голая AVR-ка обмен на шине переварить или нет. Не могу я навскидку сказать. Говорят вот, что нет. :)
Но если она успеет дернуть WAIT по своему прерыванию от /RD, то уже никуда не денется. :) Ну накрайняк, я думаю, половинки ТМ2 должно хватить на это все безобразие.
Я вообще не понимаю смысла разводить антимонии здесь, на 39-й странице темы.
Вроде, определились уже со всем.
И тут раздается пионерский клич...
Барсик ! Можно по-другому ? Сделайте ! Но нехрен теоретизировать и поучать, ни пальца не приложив к воплощению ваших мечт в реальность.
Я вообще не понимаю смысла разводить антимонии.
Можно по-другому ? Сделайте ! Но нехрен теоретизировать и поучать
Разве я поучал кого-то ? Я высказал своё мнение, что можно получить тот же результат дешевле и проще, а дальше лишь отвечал на реплики. Невежливо было бы отмолчаться.
Форум в первую очередь хорош для обмена идеями и моральной поддержки друг друга. Может быть высказанные идеи кому-то пригодятся. А вот грубости и непонятное раздражение на кого-либо портят форум. Ну а если что-то и написал не так, так для того и предназначены модераторы. Отредактируйте как надо мои посты или просто удалите их, как нарушающие правила форума.
А делать я не стану, хотя и не вижу препятствий для этого. Нет смысла, т.к у меня есть исходники всех ДОС, которые я использую. Да и вообще встроить в любую ДОС винчестер IDE это не проблема. Причём часто годится даже дохлый винчестер, который уже не работает на PC. Не надо цепляться за FAT16/32. Проще работать с физическими секторами носителя средствами конкретной ДОС. Поддержка FAT16/32 конечно удобна для загрузки файлов, используя телефон или планшет, но тогда нужны расходы на интерфейс между ДОС и FAT16/32. Судите сами, проще спаять контроллер IDE на нескольких TTL-корпусах и потратить пару часов на дизассемблирование и перетрансляцию ДОС, чем раздобыть платку "сабжа", детали, спаять и настроить.
И даже при реализации, имея исходник ДОС и зная программный интерфейс, нет смысла эмулировать систему команд реального контроллера. Контроллер должен выполнять всего 2 процедуры - считать и записать сектор. ДОС всё-равно как это делается, поэтому при использовании электронного носителя нет никакого смысла эмулировать интерфейс реального дискового устройства, хотя ATA-интерфейс и прост. Тогда на флеш или большом статическом ОЗУ просто реализуется энергонезависимый VDISK. И для флеш-карт это сделано уже лет 20 назад.
Нет сомнения, что данный проект великолепный, выручит очень многих пользователей не желающих и не могущих возиться с реальным дисководом (т.к дискеты уже невозможно купить, а старые, несмотря на пожизненную гарантию, почти все сдохли). Единственно, что у меня по-прежнему остаются сомнения относительно долговечности девайса. Т.е если интенсивно использовать его для работы, перезаписывая флеш-память тысячи раз в день (что и происходит с областью каталога, если работать в ДОС хотя-бы час в день), то на сколько дней хватит ресурса перезаписей флеш памяти ? Но если нужно только запускать игры, то никаких проблем не будет.
s_kosorev
05.06.2017, 18:22
Поддержка FAT16/32 конечно удобна для загрузки файлов, используя телефон или планшет, но тогда нужны расходы на интерфейс между ДОС и FAT16/32. Судите сами, проще спаять контроллер IDE на нескольких TTL-корпусах и потратить пару часов на дизассемблирование и перетрансляцию ДОС, чем раздобыть платку "сабжа", детали, спаять и настроить.
И внезапно заработают все нестандартные загрузчики?, которые даже wait может поломать, который не ожидают, чуть ли не потактово рассчитанные выкрутасы
- - - Добавлено - - -
Если эмулировать на уровне контролера, то есть смысл на уровне микросхемы контролера, которая всегда в панельке так как дохнули достаточно активно. Из плюсов ничего не нужно изменять в компьютере, какие то лишние сопли итд, вставил в панель и профит.
Формат FAT16/32 на электронном носителе удобен для загрузки туда файлов с помощью телефона или планшетаИ внезапно заработают все нестандартные загрузчики ? Которые может поломать даже WAIT, который они не ожидают
Формат файлов на электронном носителе никак не связан с работой программ работающих не через ДОС, а напрямую по железу КНГМД. В формате FAT32 на 'microSD' хранится 3...6 тысяч файлов представляющих собой слепки дискет для разных ДОС (TR-DOS, CP/M, is-DOS и др).
Если и есть игры, что сами лезут в КНГМД, то это только на ZX. На всех остальных компьютерах такого нет. Такт WAIT иногда добавляют в КНГМД для повышения надёжности. Сомневаюсь, что кто-то в здравом уме станет привязываться к времянкам применительно к дисководу. А если такие игры и есть, то их так мало, что ради них не стоит тратить даже одного доп.корпуса или лишних строк программы МК.
А если так уж необходима 100% эмуляция не только прямого доступа к железу КНГМД, но и соблюдение времянок, то просто достаточно использовать схему эмулятора без WAIT.
omercury
05.06.2017, 22:05
А Вы, похоже, говорите о схеме, в которой в качестве интерфейса с ЦП на чтение c контроллера есть всего один ИР22.
Как тонко подметили выше, именно без внешней обвязки, иначе какой смысл ставить МК?
У меня возник другой вопрос. Если Вы в качестве носителя используете флэш память у которой очень ограниченное число перезаписей, то раз в сколько дней надо менять карточку 'microSD' на новую.
Единственно, что у меня по-прежнему остаются сомнения относительно долговечности девайса. Т.е если интенсивно использовать его для работы, перезаписывая флеш-память тысячи раз в день (что и происходит с областью каталога, если работать в ДОС хотя-бы час в день), то на сколько дней хватит ресурса перезаписей флеш памяти ? Но если нужно только запускать игры, то никаких проблем не будет.
О, так Вы и тут не в курсе?
Вот именно для того и ставят контроллеры в твердотельные накопители и разрабатывают файловые системы, чтоб не убивать девайсы раньше времени, чтоб ресурс флеши расходовать равномерно.
Не надо цепляться за FAT16/32. Проще работать с физическими секторами носителя средствами конкретной ДОС.
Порочная практика. Именно таким способом накопитель и гробится.
Впрочем читайте лучше первоисточники хотя бы ради самообразования.
TomaTLAB
06.06.2017, 10:23
Не надо цепляться за FAT16/32. Проще работать с физическими секторами носителя средствами конкретной ДОС.
Вот с этим не согласен. Если уж эмулятор имеет собственные мозги то пусть будет добр мочь в FAT16/32 на носителе который на раз можно будет сунуть в писюк и там без бубна пошуршать хоть в винде, хоть в лине.
Нативный формат может быть оправдан, ИМХО, только на IDE устройствах подключенных напрямую в систему через пару регистров.
Порочная практика. Именно таким способом накопитель и гробится.
В целом конечно верно, но есть у меня подозрение, что они гробятся в любом случае "топтанья" по одним и тем же файлам (секторам). Разве что, у новых SSD, причем в связке с оптимизированными процедурами последних ОСей как то удается немного жизнь продлить. И то до "механических" хардов еще ой как далеко.
Я бы так не драматизировал, современные флэшки гораздо более живучие. Я "желая" убить флэшку воткнул её в качестве time-shift буфера в рессивер, 2 или 3 года отработала без вопросов, потом разобрал. Флэшка была отформатирована в FAT32. Вышесказаное не относится к абсолютно левым флэшкам из китая, те дохнут просто от положения звезд на небе. Навскидку, K9K2G08(Samsung 256Mx8) имеет ресурс в 100К циклов(Endurance : 100K Program/Erase Cycles). Даже, если каждый день тереть по 100 раз один и тот же сектор, то ГАРАНТИРОВАННО флэшки хватит почти на 3 года(2.7). А если не каждый день, и не один и тот же сектор, и не 100 перезаписей, получится лет под 30. По-моему заморачиваться на "экономию" флэшки не стоит, учитывая что это потребует дополнительных затрат.
omercury
06.06.2017, 17:28
Вот с этим не согласен.
Посмотрите пожалуйста внимательно авторство приведённой цитаты.
Спасибо!
И то до "механических" хардов еще ой как далеко.
А тем уже ой как далеко по скорости.
Хотя хороший 15-тысячник примерно сопоставим с дешевым SSD.
Навскидку, K9K2G08(Samsung 256Mx8) имеет ресурс в 100К циклов(Endurance : 100K Program/Erase Cycles).
Увы и ах, но современные (многослойные) сползли по этому параметру до жалких 1к-циклов - только контроллер и спасает.
Я бы так не драматизировал, современные флэшки гораздо более живучие.
А вот тут теперь я не согласен, современные дохнут первыми.
Увы и ах, но современные (многослойные) сползли по этому параметру до жалких 1к-циклов - только контроллер и спасает.
Это справедливо и для SD/USB или только SSD? Есть идеи как проверить? Забивать флэшку на 100% файлов слишком долго получится.
Навскидку, флэшка SD/USB 8G(меньше не продаются), скорость записи 5Mb/sec, забиваем полностью, 10000циклов, получается 83 дня должно работать(долго). При 1тыс. циклов 8.3 дня, еще премлемо, но я сильно сомневаюсь, что помрет.
8192M/5Mb/sec=1638sec=12min
12min*10Kциклов=120 000min=2000hours=83.3days
Вариант с перезаписью только одного блока, скажем нулевого будет показателен? Наверное да, речь ведь идет о затирании блока в районе FAT.
Если и есть игры, что сами лезут в КНГМД, то это только на ZX. На всех остальных компьютерах такого нет.
да ладно.
на Амиге ~90% игр NonDos
и это при наличии относительно стандартной файловой системы
TomaTLAB
06.06.2017, 18:44
Посмотрите пожалуйста внимательно авторство приведённой цитаты.
Пардоне муа, с цитированием лажа вышла. Про FAT это Барсику адресовано было, не Вам... :v2_down:
А тем уже ой как далеко по скорости.
А вот с этим не поспоришь :)
Посему и компромисс в виде ссд под систему и хард под данные. Вот прошлой осенью только пришлось ссд на компе менять, примерно три года отработал.
Но на хард систему уже ставить ни за какие коврижки, ибо скорость таки да. :)
современные дохнут первыми.
у современных флешек 99% дохнут контроллеры USB, сама флеш практически всегда остается живой
Насколько я понимаю анализируя код TR-DOS, для чтения сектора в порт #1F отдается команда #80 и потом по DRQ из порта #7F читаются данные инструкцией INI до тех пор, пока не придет INTRQ ? Я прав? Я просто делаю эмуляцию ВГ в TR-DOS для полноценной работы рамдиска :)
Т.е. можно тупо по #80 в #1F загрузить сектор в HL и затем игнорировать чтение из #7F
s_kosorev
06.06.2017, 22:39
Читал что в TS Config программно аппаратно реализован эмулятор ВГ93 в том числе работает с хаками через нестандартные точки входа, думаю там можно подсмотреть код
Да это я тоже смотрел, там проблема в том что оно под ATM и еще порт #F7 для чтения #7FFD + нет исходников тырдоса, я дизасмил, но лень там всё переделывать под свой менеджер памяти + там еще всякая лабуда от ATM напихана
s_kosorev
07.06.2017, 12:17
По идее с натяжкой AVR на 20MHz успеет ответить процессору на 3.5мгц
У меня получается 6 тактов на выставление данных + 5 латентность irq, где то нос в нос получается
https://pastebin.com/3TqEqccH
Собрал-завел таки и я этот эмулятор, спасибо автору, весьма уютная штуковина вышла (вот бы еще запись - была бы совсем конфета ;))
Но есть и пара моментов: иногда не сразу энкодером листается содержимое карты, на некоторых директориях слегонца притормаживает, а затем быстро бегать начинает (прекэширование?), еще заметил, что буты, которые проверяют смену диска, сразу же чувствуют подвох и начинают циклически пытаться перечитывать оглавление диска. То есть запустить из такого бута ничего не возможно. Это у всех так или я кривовато собрал?
Спасибо автору за проделанный труд! Я конечно понимаю, что в чужой монастырь со своим уставом не ходят, но наткнулся вот на такой дисплей:
http://www.ebay.com/itm/IIC-I2C-0-91-128x32-OLED-LCD-Display-Module-White-For-Arduino-PIC-SSD1306-IC-/142195094151?epid=622790913&hash=item211b7cf287:g:-UwAAOSwo4pYPZqe
По мне, так замечательный дисплей: i2c присутсвует изначально, его размеры позволяют его легко уместить в корпус 3.5 дисковода, и есть библиотека под Arduino.
Если автору не сложно, может он сделает версию эмуля под этот дисплей?
andykarpov
07.07.2017, 18:18
замечательный дисплей: i2c присутсвует изначально, его размеры позволяют его легко уместить в корпус 3.5 дисковода, и есть библиотека под Arduino.
Боюсь, что поддержка данного дисплея откушает всю свободную память у контроллера, потому как нужно раскошелиться на фреймбуффер, 128x32 = минимум 0.5кБ ОЗУ...
На самом деле, ОЗУ тут не вообще требуется и фреймбуфер тоже. Экранная память есть в самом контроллере дисплея и дублировать его в МК необязательно.
Например, цветной дисплей 128х128 потребовал бы 32К памяти (128*128*2), но любая атмега легко может с ним работать.
andykarpov
07.07.2017, 21:00
А есть библиотека для контроллера SSD1306, которая работает по шине i2c, использует внутреннюю память дисплея и не использует фреймбуффер?
Было бы интересно посмотреть по скорости, особенно в плане вывода растровой графики и шрифтов.
На счёт SSD1306 не знаю, но делал аналогичное для дисплея 128х128 (https://github.com/trol73/avr-lcd-module-128x128). По скорости там вышло весьма нормально.
Идея в том, чтобы стараться избегать повторного рисования одних и тех же мест. Т.е., если надо отрисовать текст на фоне, то это лучше делать в один проход - не заливать сначала фон, а потом второй операцией рисовать текст поверх, а сразу заполнять все точки в прямоугольнике. Тогда и буфер не нужен, и мерцания при обновления картинки нет.
omercury
08.07.2017, 00:14
в плане вывода растровой графики и шрифтов
Монохромная графика с равной яркостью в разрешении 128х32 да на 2 сантиметра в диагонали?
Вы это серьёзно? :)
В принципе на I2C 20-25 fps обеспечить можно. 1МГц I2C поддерживает.
По SPI на 32МГц работает.
Теоретически можно фоновую картинку во флеш запихнуть, а на экран уже выводить то что нужно, у меня такие дисплеи есть, есть какой-то еще маленький в 2 раза уже (кажется по ссылке это он и есть), надо будет попробовать что ли :)
Получается, если 1 пиксель это один бит, то весь экран 0.5к получается, еще шрифт можно во флеш засунуть, тогда текстовый режим без проблем можно сделать.
У меня дисплей 128x32, ssd1306. Если i2c работает на 800кгц, то обновление экрана на глаз не заметно, по крайней мере из под bascom.
oracleua
24.07.2017, 18:52
А вот такой вопросик..
Как должен повести себя эмулятор с турбированным контролером дисковода??
А то я разницы не увидел...
А какая должна быть разница? Просто вроде как турбированный позволяет использовать HD, а тут в любом случае DD идет.
oracleua
24.07.2017, 19:40
А какая должна быть разница? Просто вроде как турбированный позволяет использовать HD, а тут в любом случае DD идет.
Обычная частота ВГ93 1мгц..а турбо 2мгц...что позволяет быстрее перемещать головку...
В моем случае эмулятор однаково по времени считывает файлы..
Ну, тут сложно сказать, тут же нет механики, может из-за этого. Основное замедление в эмуляторе из-за переключения сторон при чтении сектора, если сторона переключилась, то эмулятор прерывает чтение сектора, сообщая контроллеру некорректную CRC и перечитывает его заново, с другой стороны, после чего производится повторное чтение. Но это вроде бы к самой ВГ93 не имеет отношения, т.к. переключение сторон производится минуя ВГ.
oracleua
24.08.2017, 09:37
А может кто нибудь нарисовать корпус эмулятора для изготовлении на 3д принтере??? или может есть уже проект???
Тут проблемка в том, что у тех плат, что сделали, карта вставляется сбоку, так что для 3.5 или 5.25 неудобно делать, разве что вынести карту отдельно, короче, нужен итоговый вариант, тогда можно и корпус наваять, это не сложно.
Надо бы еще сделать поддержку мелкого экранчика, и тогда можно отдельную плату с картой и экраном сделать, тогда прям корпус получится как от 3.5 дисковода.
oracleua
24.08.2017, 09:57
Тут проблемка в том, что у тех плат, что сделали, карта вставляется сбоку, так что для 3.5 или 5.25 неудобно делать, разве что вынести карту отдельно, короче, нужен итоговый вариант, тогда можно и корпус наваять, это не сложно.
Надо бы еще сделать поддержку мелкого экранчика, и тогда можно отдельную плату с картой и экраном сделать, тогда прям корпус получится как от 3.5 дисковода.
С мелким экраном в корпусе 3.5 это то что нужно...
Двумя руками и ногами (тоже двумя) за мааааааленький экранчик)))
А можно как-то сделать, чтобы эмулятор запоминал последний диск и при следующем включении загружал его?
Или хотя-бы просто при включении загружать boot.trd, при его наличии на карте?
А то эмулятор при включении выходит в режим выбора дисков и светит и светит и светит своей подсветкой. И светит, мля, и светит! Пока не ткнёшь в него пальцем. А я может с магнитофоном решил поработать, мне прямо влом на него отвлекаться. ;)
И без карты тоже, светит постоянно. Ну посветил секунд десять, да погасни уже.
Ну так там же это уже есть, при выборе диска нужно подержать кнопку секунды 3, тогда выбранный образ сохранится в еепром и будет выбран автоматически при следующем включении, при условии, что он есть на флешке и флешка та же самая
EvgenRU, круто, спасибо! А я мучался. :)
Подскажите где взять Hex-файл, и как выставить фъюзы для меги, в начале темы не нашел, на гитхаб тоже вроде нет.
Ардуиной воспользоваться не судьба? :)
andykarpov
21.10.2017, 23:40
Подскажите где взять Hex-файл, и как выставить фъюзы для меги
Если на чистую мегу прошить bootloader от какой-нибудь Nano из Arduino IDE - все нужные фьюзы тоже прошьются.
Потом из той же IDE шить штатными средствами через программатор.
А может кто нибудь нарисовать корпус эмулятора для изготовлении на 3д принтере??? или может есть уже проект???
А я из обычных деталек из радиомагазина вот так сделал:
https://www.dropbox.com/s/r87tt6fjmvve0z7/%D0%A4%D0%BE%D1%82%D0%BE%2020.06.17%2C%2015%2021%2 010.jpg?dl=0
andykarpov
22.10.2017, 21:52
А может кто нибудь нарисовать корпус эмулятора для изготовлении на 3д принтере??? или может есть уже проект???
Официальной платы нет, поэтому пока непонятно, под что именно проектировать корпус.
Так что там насчет поддержки SSD1306?)
Да, и как дела будут обстоять с записью, будет ли реализована?
andykarpov
03.11.2017, 01:30
Как-то у меня странно работает код, когда ходишь по какой-нибудь поддиректории.
Пример:
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++ :)
2djspawn: Насчет SSD1306 - буду делать, но пока что со временем напряг, насчет записи пока что не думал, но техническая возможность есть
Было бы отлично!;)
s_kosorev
03.11.2017, 11:15
В общем, большая просьба просветить и дать рекомендации, как пофиксить
судя по сыркам, в частности get_fileinfo в FILE_INFO в поле name обычная си строка и при перезаписи в эту структуру, может оставаться мусор от предыдущих имен
сравнивая memcmp сравнивается и мусор, нужно имена сравнивать через strcmp
Действительно, тут может быть проблема, я что-то не стал strncmp использовать, т.к. она еще добавит кода, хотя для атмеги328 это не существенно, там еще полно места
Будет так
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;
PS: проверьте, если нормально будет работать, то сделаю коммит
UPD: или вот еще такой вариант
if( dire && !memcmp(&disp_files[0],&disp_files[1],sizeof(fnfo)-13) && !strncmp(disp_files[0].fname,disp_files[1].fname,12) ) return 0;
UPD2: закоммитил последний вариант
azx987sa
06.01.2018, 15:01
Приветствую всех! И всех с Новым Годом.
Помогите кто чем может. Собрал устройство, только вот не работает.
Disc Error
Trc 0 esc 9
Распайку раз двести проверил.. Arduino Pro Mini 16Mhz. С железным приводом работает без проблем.. Может кто сталкивался?
Помогите кто чем может. Собрал устройство, только вот не работает.
Disc Error
Trc 0 esc 9
Распайку раз двести проверил.. Arduino Pro Mini 16Mhz. С железным приводом работает без проблем.. Может кто сталкивался?
Судя по ошибке не может оглавление считать, видимо формат не понимает или еще чего...
Тогда несколько вопросов.
1. Пробовали предыдущие варианты прошивок?
2. Какой контроллер дисковода, ВГ93 или еще какой?
3. Экран нормально показывает как положено дорожку сторону?
4. Точно там 16МГц кварц, а не 8?
5. Точно все пины подпаяны корректно?
azx987sa, попробуй поменять местами 0 и 1 (RX TX).
azx987sa
07.01.2018, 15:55
Судя по ошибке не может оглавление считать, видимо формат не понимает или еще чего...
Тогда несколько вопросов.
1. Пробовали предыдущие варианты прошивок?
2. Какой контроллер дисковода, ВГ93 или еще какой?
3. Экран нормально показывает как положено дорожку сторону?
4. Точно там 16МГц кварц, а не 8?
5. Точно все пины подпаяны корректно?
1. А где они, прошлые прошивки? https://github.com/EvgeniyRU/ZX_FDD_Emulator - тут только одна.
Еще пара-тройка экспериментальных и "самопальных" рассыпанных по форуму.
2. ВГ93
3. Да, нормально
4. 16Мгц. по частотомеру
5. 200 раз проверил.
- - - Добавлено - - -
azx987sa, попробуй поменять местами 0 и 1 (RX TX).
Это помогло. Со второго раза. С первого раза сгорел буфер 155ЛП9 и все остальные попытки запустить девайс продолжались на дохлом контроллере дискет. Пока в какой то момент не пришло в голову подключить флопик и посмотреть осциллографом... перепаял буфер, все заработало.
- - - Добавлено - - -
Вот еще такой момент интересен.... почему бы на первой странице не разместить основную инфу?
Например по адресации дисплея, про эту дурацкую путаницу RX TX, ссылки на другие версии программ. может еще что.
Кстати, где в коде подсветка отключается? хочу ее чуть дольше сделать.
А где они, прошлые прошивки? https://github.com/EvgeniyRU/ZX_FDD_Emulator - тут только одна.
Еще пара-тройка экспериментальных и "самопальных" рассыпанных по форуму.
Поправил первое сообщение, пояснил там как предыдущие версии получить с гитхаба
Это помогло. Со второго раза. С первого раза сгорел буфер 155ЛП9 и все остальные попытки запустить девайс продолжались на дохлом контроллере дискет. Пока в какой то момент не пришло в голову подключить флопик и посмотреть осциллографом... перепаял буфер, все заработало.
Почему-то я именно так и подумал, поэтому и плюсанул предыдущее сообщение :)
Вот еще такой момент интересен.... почему бы на первой странице не разместить основную инфу?
Например по адресации дисплея, про эту дурацкую путаницу RX TX, ссылки на другие версии программ. может еще что.
Кстати, где в коде подсветка отключается? хочу ее чуть дольше сделать.
Добавил немного инфы в первое сообщение.
По адресации дисплея вроде бы в комментариях в коде всё подробно написано.
Насчет подсветки... она работает пока не запущен образ диска, потом гаснет, если дисковод не активен.
Ну разве что подшаманить строчку _delay_ms(1500);
azx987sa
07.01.2018, 20:13
Добавил немного инфы в первое сообщение.
По адресации дисплея вроде бы в комментариях в коде всё подробно написано.
Вот сейчас еще раз посмотрел и не увидел.. может не туда смотрю..
вот про эту строку речь -
#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 ?
andykarpov
07.01.2018, 20:34
PCF8573 - 0x20*2 - 0x40
PCF8573T - 0x??*2 - 0x?? - может есть у кого?
PCF8573A - 0x38*2 - 0x70
PCF8573AT - 0x3F*2 - 0x7E
Во-первых, PCF8574 все-таки, а не PCF8573.
Во-вторых, буква T - это тип корпуса, на адрес не влияет. Влияет только буква A.
В зависимости от конфигурации модуля (в китайский экстендерах A0 - A2 подтянуты к VCC по-умолчанию), адрес будет:
1) для PCF8574 - 0x27*2 = 0x4E
2) для PCF8574A - 0x3F*2 = 0x7E
При других конфигурациях перемычек адрес будет согласно документации на микросхему.
azx987sa
07.01.2018, 22:51
Во-вторых, буква T - это тип корпуса, на адрес не влияет. Влияет только буква A.
В зависимости от конфигурации модуля (в китайский экстендерах A0 - A2 подтянуты к VCC по-умолчанию), адрес будет:
1) для PCF8574 - 0x27*2 = 0x4E
2) для PCF8574A - 0x3F*2 = 0x7E
При других конфигурациях перемычек адрес будет согласно документации на микросхему.
Вот это и надо указать. Для всех.
Переделал исходники под дисплей SSD1306 (0.96'' 128x64) Причем оригинал не трогал, 1602 будет так же работать на этой прошивке, места в чипе стало ~ 3% меньше,
Вот лог с Arduino IDE:
"Скетч использует 14598 байт (47%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 1283 байт (62%) динамической памяти, оставляя 765 байт для локальных переменных. Максимум: 2048 байт."
Брал самую простую библиотеку для этого экрана.
Архив с исходниками для экрана SSD1306 (https://mega.nz/#!0KZlQARA!uNbJbZxHwterAyp83KunQ7yApJ4tuFzxitgZtVx MQOA)
https://pp.userapi.com/c834403/v834403359/86030/8tZuVacARt4.jpg
https://pp.userapi.com/c834403/v834403359/86026/qqxnuPTS8BY.jpg
https://pp.userapi.com/c834403/v834403359/8603a/3usuAarmoX8.jpg
https://pp.userapi.com/c841534/v841534359/56c7e/h2ySF5yx46E.jpg
Прошу автора пересмотреть и может добавить в репу?)
P.S. Да и почему-то когда перемычка стоит на диск В - он определяется как С (первый флоп 3,5 (А))
P.S. Да и почему-то когда перемычка стоит на диск В - он определяется как С (первый флоп 3,5 (А))
Проблема была в самом пентагоне, там перепутаны линии адресации B и C местами, добавил еще одну панельку перемычек для выбора дисков С и D, получилось когда поставить перемычку на C - получим искомый В дисковод)
Anubis_OD
14.01.2018, 23:22
Собрал девайс на плате от andykarpov.
Включил - короткое по +5V. Черная маска не сильно добавляла скорости поиска проблемы. В итоге микроскоп помог.
Найден "непротрав" в районе надписи +5V. Глазной скальпель помог. В итоге место "вмешательства" удачно закрыл собой пятивольтовый светодиод.
http://f23.ifotki_.info/thumb/116f1d670162ba1888f0cf2d2a026732c38a47298620338.jp g (http://i-fotki.info/23/116f1d670162ba1888f0cf2d2a026732c38a47298620338.jp g.html)
Атмегу прошивал Minipro 866 программатором. У меня версия с поддержкой ICSP. Разобрал кабель. Подключил по распиновке по схеме.
http://f23.ifotki_.info/thumb/8f3d7b3cea1475dfa36e823cbd918155c38a47298620524.jp g (http://i-fotki.info/23/8f3d7b3cea1475dfa36e823cbd918155c38a47298620524.jp g.html)
http://f23.ifotki_.info/thumb/9ad1b91dfec5cb57acf5c4e8146ce52ac38a47298620553.jp g (http://i-fotki.info/23/9ad1b91dfec5cb57acf5c4e8146ce52ac38a47298620553.jp g.html)
Проц отозвался сразу.. Вопрос возник в прошивке фьюзов. Сильно копать/думать не хотелось. Благо несколько постов тому назад, EvgenRU выкладывал прошивку с командной строкой для avrdude. Оттуда подсмотрел коды и поставил соот. галки в программаторе.
http://f23.ifotki_.info/thumb/12a1e7094d073e8ea361924da038367ec38a47298620719.jp g (http://i-fotki.info/23/12a1e7094d073e8ea361924da038367ec38a47298620719.jp g.html)
На плате есть "косячек" - перепутаны 2 ноги енкодера.
Исправил с резюками 0ом вот так: (andykarpov подсказал)
http://f23.ifotki_.info/thumb/c0cde70700c8a57ca462fecd13951591c38a47298620784.jp g (http://i-fotki.info/23/c0cde70700c8a57ca462fecd13951591c38a47298620784.jp g.html)
В итоге:
http://f23.ifotki_.info/thumb/0ef9992b3c7118df5d145f73419289c8c38a47298620918.jp g (http://i-fotki.info/23/0ef9992b3c7118df5d145f73419289c8c38a47298620918.jp g.html)
http://f23.ifotki_.info/thumb/c7e83ae96030ec38c24453e24e72b4e7c38a47298620966.jp g (http://i-fotki.info/23/c7e83ae96030ec38c24453e24e72b4e7c38a47298620966.jp g.html)
Для индикатора идеально подошли стойки м2 12мм:
http://f23.ifotki_.info/thumb/e5f57505d8b6e47208852abb8a2dbd5bc38a47298621003.jp g (http://i-fotki.info/23/e5f57505d8b6e47208852abb8a2dbd5bc38a47298621003.jp g.html)
http://f23.ifotki_.info/thumb/21092ee80f32cd32d10a29a90d5e4d82c38a47298621043.jp g (http://i-fotki.info/23/21092ee80f32cd32d10a29a90d5e4d82c38a47298621043.jp g.html)
В итоге заработало:
http://f23.ifotki_.info/thumb/21f944548861a55111e2f17be8d19656c38a47298621085.jp g (http://i-fotki.info/23/21f944548861a55111e2f17be8d19656c38a47298621085.jp g.html)
На днях подключу к реальному железу для окончательной проверки.
Вопрос к EvgenRU: насколько сложно реализовать поддержку не только TRD образов а, например, +D или UNI-DOS.. ?
P.S. Спасибо авторам проекта и, в частности, andykarpov за конструктор для сборки и за онлайн FB поддержку при запуске.
Вопрос к EvgenRU: насколько сложно реализовать поддержку не только TRD образов а, например, +D или UNI-DOS.. ?
Если размер сектора 256 байт и нет ничего специфического, то проблем никаких. Если есть ссылка на описание формата, то могу посмотреть на днях.
Тут бы реализовать возможность записи в образ!:v2_dizzy_roll:
Black Cat / Era CG
15.01.2018, 09:26
Абсолютно согласен с предыдущим оратором.
Тут бы реализовать возможность записи в образ!Есть железяка, есть дисковерт 5'25, есть масса умирающих дисков, в том числе и с защитой, в том числе и под Профиковскую CP/M, и в прочих других извратных форматах. В идеале б хотелось иметь девайсину, позволяющую запустить на реале SoftCopy и скопировать любой реальный диск (читаемый на реале) в образ на сд-карте, чтобы потом пользовать только девайс, а дискеты уже пусть сыпятся. А то все идет к тому, что если с обычными TR-DOS-дисками на реалах все более-менее в порядке (хотя иметь возможно сохраниться на дискету бывает очень полезно), то с нестандартными дисками дело стремится к абсурду: хотим нестандартные диски посмотреть - идем на пц, запускаем эмуль и смотрим, а на реале как бы...
- - - Добавлено - - -
Ну а ваще штука классная, конечно!
иметь девайсину, позволяющую запустить на реале SoftCopy и скопировать любой реальный диск (читаемый на реале) в образ на сд-карте, чтобы потом пользовать только девайс
HxC Floppy Drive Emulator тебе поможет. Даже прототип (http://service4u.narod.ru/html/emulator.html) со многим справится, а уж коммерческая версия (http://hxc2001.free.fr/floppy_drive_emulator/index.html#SDCARDFloppyemulator) вообще чёрта лысого сможет.
Black Cat / Era CG
15.01.2018, 09:58
Извиняюсь. Еще немного оффтопа.
HxC Floppy Drive Emulator тебе поможет. Даже прототип со многим справится, а уж коммерческая версия вообще чёрта лысого сможет.
Слышал немного (до поры до времени вопрос не был для меня актуальным, да и сейчас это скорее забота о не скором будущем). Это ж, насколько я понимаю, тот самый "Флоппи-эмулятор француза"? И сколько же стоит сие чудо?
- - - Добавлено - - -
Тыщ 8 выходит где-то в готовом виде. Неплохо-неплохо...
Black Cat / Era CG, 2500-3000 руб., без корпуса.
Есть открытая прошивка для Gotek, есть открытый проект IPFE на этом форуме, скоро, надеюсь, появится еще один открытый проект флоппиэмуля.
SoftFelix
15.01.2018, 12:52
Собрал девайс на плате от andykarpov.
Пофиксить бы плату с учётом вышесказанного и в Барахолку. Я б даже взял. Вот только доставка с Украины...
andykarpov
15.01.2018, 13:05
Пофиксить бы плату с учётом вышесказанного и в Барахолку. Я б даже взял. Вот только доставка с Украины...
Исходники платы открыты - https://github.com/andykarpov/zx-fdd-emulator-pcb, баг на ней только один - попутаны 2 ноги у энкодера. при чем попутаны в стандартной библиотеке Eagle, подозреваю - просто есть такие энкодеры, в которых именно такая распиновка :(
Чуть позже выкачу новую версию платы 1.2a, в которой вышеуказанный баг будет поправлен.
Платки были в барахолке, обычно разлетаются как пирожки :)
Для жителей за пределами Украины желательно заказать выпуск плат самостоятельно, это будет на порядок дешевле, чем пытаться передать ее с Украины.
Например на jlcpcb.com, цены очень вкусные.
ЗЫ: в барахолке у Павла Рябцева, вроде бы, были свои платки данного эмулятора. Ничего не скажу по поводу безбажности разводки :)
Anubis_OD
15.01.2018, 13:27
EvgenRU, Вот тут есть про +D формат.
http://www.worldofspectrum.org/NotThePlusD/
Вот про Uni-DOS
http://www.worldofspectrum.org/infoseekid.cgi?id=0014032
Посмотри.. было бы здорово, если не сложно сделать..
EvgenRU, Вот тут есть про +D формат.
http://www.worldofspectrum.org/NotThePlusD/
Вот про Uni-DOS
http://www.worldofspectrum.org/infoseekid.cgi?id=0014032
Посмотри.. было бы здорово, если не сложно сделать..
+D: The DISCiPLE numbers its tracks beginning with 0 for side 0 and 128 for side 1. Sectors
are 512 (Double Density) or 256 (Single Density) bytes long and are numbered 1 to 10.
The DISCiPLE catalogue starts at track 0 sector 1 and ends at track 3 sector 10. Each
catalogue sector holds the information of two (DD) or one (SD) file(s).
Uni-DOS: 10 sectors per track, with 512-byte sectors.
А у нас сектор 256 байт 16 секторов на дорожку.... так что малой кровью не получится...
Переделал исходники под дисплей SSD1306 (0.96'' 128x64)
Отличная работа! У меня как раз есть под это дело минипро ардуинка и 1306.
Только вот вопрос - можно ли в листинге сделать более двух строк? Разрешение вроде позволяет, будет куда нагляднее.
Отличная работа! У меня как раз есть под это дело минипро ардуинка и 1306.
Только вот вопрос - можно ли в листинге сделать более двух строк? Разрешение вроде позволяет, будет куда нагляднее.
Можно попробовать, я не делал больше двух строк, чтоб не потерять возможность "универсальности" для двух дисплеев, хотя идея была, но не совсем понял как выводить больше двух строк, это надо помощь EvgenRU
а вообще по-моему здесь идет вывод строк:
///////
/// Print 2 files on LCD and file pointer
////////////////////////////////////////////////////////////////
FILINFO disp_files[2], fnfo;
DIR dir, first_dir;
void print_files(uint8_t index)
{
oled.setTextXY(0,2); // Set cursor position
oled.putString("ZX Disk Emul");
oled.setTextXY(6,4); // Set cursor position
oled.setTextXY(index+3,1); // Set cursor position
oled.putChar(62);
for(uint8_t i = 0; i < 2; i++)
{
if((disp_files[i].fattrib & AM_DIR) != 0)
{
LCD_print_char(1,i,1); // display folder icon
oled.setTextXY(i+3,2); // Set cursor position
oled.putChar(47);
oled.setTextXY(i+3,3);
oled.putString(" ");
oled.setTextXY(i+3,3); // Set cursor position
oled.putString(disp_files[i].fname);
}
if((disp_files[i].fattrib & AM_DIR) == 0)
{
oled.setTextXY(i+3,2);
oled.putChar(0);
LCD_print(2,i,disp_files[i].fname); // display file name
oled.setTextXY(i+3,3); // Set cursor position
oled.putString(" ");
oled.setTextXY(i+3,3); // Set cursor position
oled.putString(disp_files[i].fname);
}
}
}
///////
/// f_array_ind - LCD display line number
/// dire - direction 0 - forward, 1 - backward
/// READ DIRECTORY ENTRY (1 file name) and put it to array (disp_files) for print on LCD
/////////////////////////////////////////////////////
int8_t readdir(uint8_t f_array_ind, uint8_t dire)
{
for(;;)
{
if(dire)
{
if(!memcmp(&dir,&first_dir,sizeof(dir))) return -2;
if(pf_dirprev(&dir) != FR_OK) return -2;
}
else
{
if(pf_dirnext(&dir) != FR_OK) return -2;
}
if(pf_readdir(&dir, &fnfo, dire) != FR_OK) return -1; // read directory entry
//if(fnfo.fname[0] != 0 && ( ( (strcasestr(fnfo.fname,".trd") || strcasestr(fnfo.fname,".scl") ) && (fnfo.fattrib & AM_DIR) == 0) || (fnfo.fattrib & AM_DIR) != 0) )
if(fnfo.fname[0] != 0 && ( ( strcasestr(fnfo.fname,".trd") && (fnfo.fattrib & AM_DIR) == 0) || (fnfo.fattrib & AM_DIR) != 0) )
{
if( dire && !memcmp(&disp_files[0],&disp_files[1],sizeof(fnfo)-13) && !strncmp(disp_files[0].fname,disp_files[1].fname,12) )
return 0;
if(f_array_ind == 0) memcpy(&disp_files[1],&disp_files[0],sizeof(fnfo));
if(f_array_ind == 1) memcpy(&disp_files[0],&disp_files[1],sizeof(fnfo));
memcpy(&disp_files[f_array_ind%2],&fnfo,sizeof(fnfo));
return 0;
}
}
return -3;
}
Да, именно тут, попробую на днях вынести в конфиг возможность задавать количество строк на дисплее, а может еще чего придумаю. У меня есть этот дислей, правда он SPI, что обидно :( и есть I2C 128х32, он на 2 строки
Да, именно тут, попробую на днях вынести в конфиг возможность задавать количество строк на дисплее
Было бы оч круто!
Автору конечно Спасибо! Но когда это дело можно будет в металле?
Кто-нить возьмется за Производство? Хотя бы Trol73!
Да, именно тут, попробую на днях вынести в конфиг возможность задавать количество строк на дисплее, а может еще чего придумаю. У меня есть этот дислей, правда он SPI, что обидно :( и есть I2C 128х32, он на 2 строки
Есть шанс, что этот дисплей можно перенастроить на I2C перепайкой пары перемычек на плате.
stepmotor
21.01.2018, 10:01
баг на ней только один - попутаны 2 ноги у энкодера. при чем попутаны в стандартной библиотеке Eagle
andykarpov, Энкодеры могут быть внешне одинаковые, а один в одну, другой в другую, сторону работают, это не баг Eagle, это реальность. Я в таком случае добавляю в меню настройку направления вращения энкодера, чтобы можно было инвертировать.
petrov1962
11.05.2018, 07:23
Да, именно тут, попробую на днях вынести в конфиг возможность задавать количество строк на дисплее, а может еще чего придумаю. У меня есть этот дислей, правда он SPI, что обидно :( и есть I2C 128х32, он на 2 строки
Возможность вывода нескольких строк на дисплей уже есть?
Да, что-то с работой совсем времени нет, но экранчик у меня уже есть, как времени немного появится - соберу и допишу прошивку, наверное через неделю.
petrov1962
11.05.2018, 22:34
Да, что-то с работой совсем времени нет, но экранчик у меня уже есть, как времени немного появится - соберу и допишу прошивку, наверное через неделю.
Спасибо, что не забываете проект.
Hi Folks,
I made my version of the shield for the Evgeniy's simulator. I designed it around off shelf components no SMD soldering except the SD socket. It is in shape of TZXDuino and have a look on the photo below.
http://www.fotogalleria.info/pub/TRDuino/FDD_Emul_10.jpg
I am happy that works on newer version of sketch are in progress. Having there a larger screen is a nice idea.
HighLander
09.06.2018, 10:24
Идея для управления со спектрума:
Так как эмулятор работает только с TRD, значит секторов на дорожке не больше 16-ти, например читаем 20-й сектор, эмуль выдает спектруму сектор в данных которого например имя текущего TRD, 21-й сектор - перемещение по каталогу флешки на позицию вверх и в данных сектора выдать куда попали, 22- тоже что и 21-й, но вниз, 23 - выбор TRD.
Как-то так...
Вопрос к автору, реализуемо такое?
Прочитал первое сообщение темы внимательно...:v2_dizzy_facepalm:
Как вариант можно попробовать выбирать треки с запредельным номером, но если вдруг с реальным дисководом такая программа столкнется, он об ограничитель задолбится...
azx987sa
09.07.2018, 11:11
Запись в TRD ожидается?
Есть ли какой прогресс с поддержкой дисплея OLED 0.96?
SoftLight
15.11.2018, 15:07
Hi Folks,
I made my version of the shield for the Evgeniy's simulator. I designed it around off shelf components no SMD soldering except the SD socket. It is in shape of TZXDuino and have a look on the photo below.
I am happy that works on newer version of sketch are in progress. Having there a larger screen is a nice idea.
A great design! I just have arduino mini somewhere. Could you share your pcb design among our community?
Есть ли какой прогресс с поддержкой дисплея OLED 0.96?
Буду честен, пока что было не до него, как и в целом не до ZX, но вот сейчас как раз немного посвободнее стал, так что займусь
SoftLight
16.11.2018, 10:11
Поддержка записи не планируется?
Поддержка записи не планируется?
Теоретически это возможно, практически потребует значительных усилий мозга и рабочего пространства :)
A great design! I just have arduino mini somewhere. Could you share your pcb design among our community?
Thanks a lot and my response to your query is just simple "Yes, I am happy to share this PCB design". If you are interested in it, please see there: PCB (https://drive.google.com/open?id=1zxQuYDV1XyYS4s-Gm6eS6rEKrgJBb8D6)
Внезапно пришла в голову «идея для стартапа»: прицепить к девайсу модуль на ESP8266/32 и сделать веб-интерфейсик для выбора образа, чтобы не городить экраны и кнопки и «вставлять» образы дисков прямо с телефончика-планшета. Вот это будет я понимаю киберпанк! ))))
Развивая идею, на ебеях можно купить микросд2сд адаптеры со встроенным веб-сервером, подключившись к которому с компьютера можно записывать образы по воздуху прямо на микросд карту.
Lapu-Leen
16.06.2019, 20:16
Собрал девайс, но что-то пока не работает(хотя возможно траблы с контроллером компа). Вопрос такой, пробовал несколько образов TRD и на всех CYL:00 HEAD: 0, это вариант нормы или что-то не так? При попытке прочитать каталог (или сменить диск) подсветка моргает один раз и комп выдаёт NO DISK. Все пайки проверил, провода по схеме совпадают. Комп - Пентагон 48К.
https://d.radikal.ru/d36/1906/c3/f4020234161ct.jpg (https://d.radikal.ru/d36/1906/c3/f4020234161c.jpg)
Собрал девайс, но что-то пока не работает(хотя возможно траблы с контроллером компа). Вопрос такой, пробовал несколько образов TRD и на всех CYL:00 HEAD: 0, это вариант нормы или что-то не так? При попытке прочитать каталог (или сменить диск) подсветка моргает один раз и комп выдаёт NO DISK. Все пайки проверил, провода по схеме совпадают. Комп - Пентагон 48К.
При выборе образа головка устанавливается на нулевой трек, это нормально.
Подсветка гаснет, когда дисковод неактивен. Значит, или не тот дисковод выбран или перемычка не там стоит для выбора дисковода.
Lapu-Leen
17.06.2019, 18:29
При выборе образа головка устанавливается на нулевой трек, это нормально.
Подсветка гаснет, когда дисковод неактивен. Значит, или не тот дисковод выбран или перемычка не там стоит для выбора дисковода.
Пока нет возможности проверить контроллер дисковода, пробовал менял КР1818ВГ93- не помогло. Отпишусь о результатах когда буду уверен, что у меня комп загружает хотя бы с реального дисковода.
brian4ever
19.06.2019, 21:12
Теоретический вопрос. Насколько реально эмулировать связку дисковод+ВГ93 ? Я не специалист, но мне кажется это даже проще, читать команды и выдавать байты из файла с содержимым секторов. Имеется ввиду не эмуляция всего BDI контроллера, а именно реализовать сигналы которые ВГ выдаёт в схему BDI.
Насколько реально эмулировать связку дисковод+ВГ93 ?
элементарно
в прошивке TRDOS делается перехват/обработка и стороннее железо для этого вообще не требуется.
...
требуется только поддержка носителя информации hd/cf/sd
brian4ever
20.06.2019, 10:02
Этим я уже пользовался. DNA+прошивка от Matlash&Zet-9 и это потрясающая вещь, но совместимость оставляет желать лучшего и всё равно нужен маппер с дешифратором на ПЗУ ТR-DOS.
А вот если бы к этому мапперу подцепить ещё Atmega. Получится 4 микросхемы логики маппер, + ТМ9 буфер на команды управления + наверное АП6 куда мега будет писать данные и всё. 7-8 микросхем и полноценный BDI c загрузкой TRD c SD карты. Это реально?
Lapu-Leen
28.07.2019, 10:57
Отремонтировал BDI и FDD эмулятор заработал!
EvgenRU, слышно что-нибудь по реализации записи?)
EvgenRU, слышно что-нибудь по реализации записи?)
Я бы с радостью этим занялся, но, к сожалению, с текущей работой у меня нет столько свободного времени, как было раньше :( я надеялся, что кто-то продолжит мое дело :)
HardWareMan
10.09.2019, 07:34
EvgenRU, к сожалению, таких надеющихся тут пруд пруди. Я тоже свой СпециалистМХ2 хотел сам всё добить, но времени хватило только на схему (плату тоже не я делал) и BIOS. Эх.
АлександрПП
13.03.2021, 21:41
Так у меня этот эмулятор и не заработал. В чем причина, не пойму.
Собран на плате v1.2.
Atmega328 прошита успешно, фузы выставлены правильно.
На экране верхний ряд прямоугольников.
С Меги на HEF4052 приходят все сигналы и выходят с нее на слот карты.
А вот на PCF8574 с выводов 27, 28 Меги ничего ни приходит. Там постоянно высокий уровень, практически равный напряжению питания. Нет SDA, SCL, значит пусто и на выходах PCF.
Прошивал Мегу хексами из папок FDD_Emul_HEX1 (2,3). Никакой разницы.
Мегу менял.
Что я делаю не так?
Копейкин
08.07.2021, 10:38
Нужны советы - как запустить.
Собрал девайс, энкодер ЕС11, добавил конденсаторы к земле на кнопку и фазы (это не помогло).
Отформатировал FAT32 микроСД 16Гб SunDisk Ultra и записал туда несколько файлов TRD.
https://drive.google.com/file/d/1Eux-WtrSMJabc4Ta3QKWWT4RHEPH2_B9/view?usp=sharing
На дисплее при старте:
https://drive.google.com/file/d/1EkiOhCyhr5xUy95MtY605FCXoVnbOGj6/view?usp=sharing
Если повращать энкодер, то появляется следующая картинка
https://drive.google.com/file/d/1EiIo8RG-dLegjyTJXtbB2th1Jw_FLAZE/view?usp=sharing
при дальнейшем вращении, переход между картинками 1 и 2.
Что я сделал не так?/Куда смотреть?
PS
Я для пробы на ардуине собрал макет, который читает и выводит в uart корневой каталог через PetitFS.
Карта читается норм, только первым присутствует каталог SYSTEM->1
Ссылки на Google Drive не получается обрамить тегом[img]
otrazhenie
10.09.2021, 08:33
Что я делаю не так?
поднимите 1, 2 и 3 ноги PCF8574 и будет Вам счастье
Копейкин
10.09.2021, 09:35
Лучше перекомпилировать под нужные I2C адреса.
АлександрПП
10.09.2021, 17:35
А как узнать нужные адреса?
Копейкин
10.09.2021, 18:53
В зависимости от применённой микросхемы, PCF8574 имеет 7-битный адрес 20h - 27h в зависимости от того, куда подключены 3 адресных линии. Соответственно PCF8574A имеет 7-битный адрес 38h - 3Fh. В файле LCDModule.h надо найти строчку типа:
#define LCDEX_ADDR 0x40
и вместо 0x40 подставить свой адрес, сдвинутый влево на 1. В младший бит при сдвиге подставить 0.
Напишите, что получилось.
У меня так и не заработал просмотр/выбор файлов.
АлександрПП
10.09.2021, 23:30
А что это даст? Или под "поднимите" подразумевается "подключить к плюсу питания"
, т.е. включить на "единицу"?
- - - Добавлено - - -
В зависимости от применённой микросхемы
У меня PCF8574T.
Копейкин
11.09.2021, 08:43
По шине i2c обмен идёт с адресацией устройства. Если адрес целевого устройства указать неверный, обмена не будет, вывода данных и команд в дисплей не будет. Для 8574 без буквы А, если все 3 адресные линии мсх подключены к земле, в указаной строке должно стоять значение 0×40. Проверьте это в исходнике, откомпилируйте и пробуйте. В выложеном готовом файле прошивки м.б. другой адрес.
otrazhenie
13.09.2021, 08:01
У меня PCF8574T.
в китайской плате конвертера I2C для CLD экрана адресные ноги висят в воздухе.
Там применена микросхема PCF8574T. Я сделал так же и у меня все заработало.
в скетче у меня так:
#define LCDEX_ADDR 0x4E
и еще....тут мелькало где-то.....подключение китайской платы microSD на 125 микросхеме....
у меня она завелась....
1. убрал стабилизатор на 3.3В за ненадобностью
2. убрал с платы эмулятора 4050 за ненадобностью. Выводы соединил перемычками.
может кому пригодится
tigr101274
15.11.2021, 04:34
Други всем привет! Кто нибудь собирал данный эмулятор на этих платах?
Фото:
https://i.ibb.co/9bVtqxG/20211115-064213.jpg (https://ibb.co/9bVtqxG) https://i.ibb.co/M5y23Gf/20211115-064228.jpg (https://ibb.co/M5y23Gf)
Прошивка "FDD_Emul_HEX_15_04_16" после прошивки программатор отказался видеть атмегу (так и должно?) прошивал на чистой плате.
В итоге на экранчике полный штиль.
Копейкин
15.11.2021, 09:33
А кварцевый генератор запускается? Надо смотреть осцилографом или, для пробы, подать частоту с внешнего, гарантировано рабочего генератора. После программирования контроллер переключается на внешний кварц. И если генератор не запускается, то программатор его не видит. Мне попадались из Китая контроллеры, не запускавшиеся от внешнего кварца.
tigr101274
15.11.2021, 10:56
А кварцевый генератор запускается? Надо смотреть осцилографом или, для пробы, подать частоту с внешнего, гарантировано рабочего генератора. После программирования контроллер переключается на внешний кварц. И если генератор не запускается, то программатор его не видит. Мне попадались из Китая контроллеры, не запускавшиеся от внешнего кварца.
Спасибо, я об этом даже и не подумал. Вечером буду смотреть.
Копейкин
15.11.2021, 11:04
Напишите потом пожалуйста результат запуска.
tigr101274
15.11.2021, 11:32
Напишите потом пожалуйста результат запуска.
Хорошо
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot