ЗЫ. В СОЛОНовской программе ЧТЕНИЕ ДИСКА работает с возвратом к нулевому треку на каждом цилиндре (с HxC FloppyEmul так не делает). Возможно, причина в слишком долгой загрузке цилиндра. В других программах такого не наблюдал. Выяснилось после включения индикации.
1. Формат записи-чтения - стандартный MFM (в обе стороны конвертируется утилитой от Эмулятора HxC). Эмулируется 80-дорожечный 2-сторонний дисковод.
2. Читается цилиндр (2 трека = 26КБ), пишется потреково (13 КБ).
3. MFM-последовательность чтения генерируется выводом таймера TIM3 - длительность импульса (уровня 0) постоянная, период программируется на ходу в прерывании, исходя из количества 0 перед 1.
4. Запись осуществляется аналогично, замером времени между фронтами WDATA. Частота таймера подобрана так, что измеренный период, деленный на 32 (сдвинутый на 5 вправо), разбивается на 4 возможных значения: 0 - самый первый импульс (от активации WGATE до первого импульса WDATA проходит около 2 мкс), далее 1,2,3 - соответствующие 4,6,8 микроксекундным импульсам (01,001,0001). Все остальные значения на практике не наблюдались и считаются ошибочными.
5. Программа представляет из себя вечный цикл с ветвлением согласно текущему состоянию (смысл названий очевиден: INIT, IDLE, LOADCYL, READTR, WRITETR). Обработчиками прерываний: таймер 3 - чтение, таймер 4 - запись, внешние прерывания от STEP и WGATE. Переход из одного состояние в другое сопровождается перепрограммированием периферии контроллера.
6. Частота контроллера выбрана 72 МГц, чтобы портировать на серию STM32F103. В качестве прототипа используется STM32F4-discovery с доп. платой интерфейсов STM32F4DIS-BB и самодельной платой с подтягивающими резисторами и доп. блоком интерфейса на WH1602 и кнопками.




ZXM-Phoenix rev.01 2048K, VG93 hw emulator
Ответить с цитированием