Новости by Alone Coder Прошло всего несколько дней, но прислали столько горячего материала, что пришлось вдогонку делать новый номер газеты :) У меня всё равно новогодние каникулы - празднуем до 8 января включительно. Hippiman/Conscience выпустил новогоднюю игру Dizzy Rescues Santa - на платформе DizzyAGE для Windows, с патчем для плавного скролла от Titus'а. Я прошёл игру 1 января, по дороге разбил шарик и летал в Великий Устюг :) На следующий день игру прошла Louisa, она нашла ещё огромный подарок от Деда Мороза. Если кому-то будет сложно искать подарки - всего их в игре 25 (не считая того огромного). Deathsoft выпустил пару новых версий эмулятора Unreal Speccy и пытается восстановить схему контроллера дисковода 1818ВГ93 по фотографиям кристалла (значительная часть которого оказалась ПЛМ). Новогодний DiHalt Lite в этом году опять не стал объединённым, но уже есть данные, что на него едет около 30 человек - раза в 2 больше, чем раньше. Мы с Louisa'ой на этот раз не едем. Я исправил несколько ошибок в ЗD-движке и неожиданно обнаружил, что рабочая область с существующей математикой ограничена 10x10 единичных кубов. Это годится только для внутренних комнат Total Eclipse. Это я так боролся за 8-битные вычисления. Буду думать дальше :) Польский культуролог Пётр Марецки, который приезжал летом на DiHalt вместе с Yerzmyey, прислал большой опросник для будущей книги. Я перевёл его на русский язык. Пётр говорит, что отвечать можно и по-русски. Пишите ответы желательно до конца января (крайний срок 15 февраля)! Николай Амосов (AmoNik), в прошлом редактор газеты AvroNews, прислал новости из Санкт-Петербурга (а ещё большое дополнение к тексту про SPbZXNet из прошлого номера - см. в соседней статье). Новости by AmoNik Сергей Смирнов (Gogin) возродил свой проект по портированию игры Super Mario для Спектрума. Когда-то была демоверсия первого уровня в конкурсе "Твоя игра". Сейчас Серёга полностью переписывает движок с нуля. Alone> Как он сам говорит, с учётом опыта последних 15 лет. И движок теперь цветной! (Кстати, я сам пытался взяться за написание Super Mario три раза, но каждый раз забрасывал.) Вот тут можно посмотреть, сколько занимает вывод спрайтов по времени: https://monosnap.com/file/jбHxgvxd1YpJOCBgUaxzCdMdMOXЗaY Видео выглядит дёрганым, но как пишет Сергей, это так работает грабилка экрана и в реальности всё довольно плавно. Причём это 3,54 МГц, а не в турбо. На данный момент у него сдох его Скорпион, и я ему удалённо, по симптомам, рассказал, на что обратить внимание и поменять, но он пока не торопится это сделать. Наверно, потому, что у него есть ZX Evolution. В прошлом году я написал новый драйвер для жёстких дисков под систему iS-DOS. Старый драйвер от Валерия Кожевникова, который я много лет использовал до этого момента, содержал ряд ошибок и неточностей, о которых я узнал только, когда написал на базе этого драйвера свой. Причиной, побудившей меня писать свой драйвер, стало то, что после покупки в 2008 году компьютера Amiga 600 у меня скопилось большое количество карт типа CompactFlash. Я покупал их по несколько штук в поисках той, которая заработает с Амигой через переходник PCMCIA. Оказывается, далеко не все карты работают таким образом, а те, что работают, могут сильно тормозить. В конце концов я нашёл ту единственную карту, которая работала на Амиге быстро (Sony), а с оставшейся кучкой карт нужно было что-то делать. Я купил в компьютерном магазине адаптер CF-IDE, который просто втыкался вместо IDE шлейфа, и стал экспериментировать с картами, но уже на Скорпионе. Alone> У меня тоже был такой адаптер, но сделанный CHRV/NedoPC. В местном компьютерном магазине мне говорили, что такой железки вообще не бывает. Я долго им пользовался на Pentagon 1024 и ATM Turbo 2+, пока не отдал Pentagon 1024 вместе с этим адаптером, карточкой, CD-ROM'ом и диском с игрой Time Gal T(c)S'у. Жалко, но дома теперь его негде ставить... Оказалось, что он (Скорпион) тот ещё привереда. То не может таблицу разделов создать на карте, то теряет информацию о подключённых виртуальных дисках. А если и работает с картой без сбоев, то медленно. В конце концов из около полутора десятков карт я нашёл те несколько, которые работают без сбоев и с большой скоростью на Скорпионе. Вот тут-то я и столкнулся в первый раз с неработоспособностью части программ. Конкретно сразу не заработал плагин HDD_0.1 для Real Commander и не заработал драйвер жёсткого диска для iS-DOS. Обе программы зависали на обращении к диску. Автора плагина я так и не смог найти, хотя мы живём в одном городе. Исходные тексты плагина автор не распространял, но из описания было понятно, что причина неработоспособности плагина и драйвера одна и та же. Ведь плагин был всего лишь обёрткой (графическим интерфейсом) над тем же драйвером Кожевникова (Jason Frost). Я изучил в отладчике код плагина и убедился, что драйвер там один в один из iS-DOS. Таким образом, разобравшись с драйвером в iS-DOS, я смогу починить и плагин. Несколько раз я делал попытку дизассемблировать плагин, но каждый раз получал в итоге нерабочий исходник. Т.е. программа, транслированная из этого исходника, получалась короче, либо не работала. Но у меня были исходные тексты драйвера под iS-DOS, и я провёл ряд тестов по его модификации. Это, однако, нисколько не продвинуло меня в понимании, почему драйвер виснет. По работе с жёстким диском я ориентировался в основном по статьям из газеты ZX-NEWS за авторством Влада Сотникова (Vega). Плюс у меня была небольшая выкопировка из стандарта ATA какой-то древней версии. С точки зрения этих документов, драйвер работал правильно. Однако он не работал с картами CompactFlash. Было очевидно, что в последующих версиях этого стандарта что-то "сломали", и на современных устройствах он уже работает не так. На всякий случай я прикупал на ибее старых карточек объёмом от 32 до 512 МБ, но и они тоже уже не работали со старым драйвером. Таким образом, стало очевидно, что изменением пары байт в драйвере я ничего не добьюсь и нужно писать другой драйвер, более соответствующий современным стандартам. В какой-то момент я продал свою плату GMX и раздоработал плату Скорпиона обратно, до начальной схемы. Но плата у меня не заработала. Проковырявшись с ней несколько дней, я решил перейти на запасную плату и заодно сделать ей доработку по открытию портов DOS, чтобы работали быстрые драйверы. Подумав немного, я передумал курочить плату и решил, что лучше сделать доработку самого контроллера SMUC так, чтобы его порты оказались в основном адресном пространстве. Теперь, имея прямой доступ к портам диска, я сел за ассемблер, обложившись распечатками исходных текстов драйверов, и начал писать. У меня было несколько исходников - драйвер от Кожевникова, две версии драйвера от Олега Григорьева (Ruiner) и пара версий моих доработок. Я когда-то делал на базе драйверов Григорьева свои версии, с поддержкой LBA и ещё какую-то. Для меня оказалось проще написать своё, чем разобраться, как оно работает у других. Так, от исходных драйверов я взял только процедуры чтения и записи секторов, а также структуру хранения координат разделов на диске и процедуру расчёта координаты сектора на основе смещения от начала раздела, а всё остальное написал с нуля. Сначала писал небольшие фрагменты процедур чтения заданного количества блоков (по 256 байт) в ALASM. Тестировал их. Потом на базе этой процедуры сделал драйвер под iS-DOS. Он пока не умел писать, но зато умел быстро-быстро читать. Тщательно отладив процедуру чтения, я снова вернулся в ALASM и приступил к самой сложной части - процедурам записи. Так как iS-DOS работает с логическими блоками по 256 байт, а физический сектор на диске имеет длину 512 байт, то необходимо было написать аж целых три процедуры записи. Первая используется для записи блоков, попадающих на первую половинку сектора. Вторая делает то же самое, но для второй половинки сектора. А третья пишет сектор полностью. Логика работы была понятна, и процедуры я написал довольно быстро, но отладка заняла несколько дней. Я создал на диске ещё один раздел, специально для тестов и жёстко прописал его координаты в драйвер. Потом стал копировать на этот раздел файлы и смотреть, чего получится. На всякий случай я исключил возможные ошибки чтений нового драйвера, читая файлы через старый медленный, но проверенный драйвер. Таким образом, все ошибки были порождением нового драйвера. А они были. Хотя их было немного, но времени на их поиск было потрачено много. Я даже написал специальные тестовые программы и специальные тестовые файлы с особым содержимым, по которым можно было судить, в какой части (на каком секторе или головке) происходит сбой записи и что-то пишется не туда. Потом я добавил отладочный вывод нужных переменных в экран и сидел в отладчике, наблюдая за их изменением. Не найдя ошибку в своих процедурах, я заподозрил, что ошибки лезут из внешних процедур, которые я переписал один в один из имеющегося у меня исходника. И точно. Пару ошибок я оттуда выгреб, и в конце концов драйвер заработал. Потом я добавил работу со вторым IDE-каналом и дописал в комплект программу настройки драйвера и подключения разделов. После этого состоялся публичный релиз. А в 2016 году я поменял одну карту памяти, на карту большего объёма, предварительно всё скопировав посекторно на новую карту и не проверил, как работает новый драйвер. Оказалось, что напрасно. Некоторое время спустя я обнаружил на дисках файлы с неправильной контрольной суммой. Начав разбираться, откуда ноги растут, я выяснил, что часть файлов в таком виде перекочевала с моего старенького жёсткого диска. И там файлы уже побились как раз ошибками в драйвере Кожевникова. Но часть файлов побилась уже моим новым драйвером. Я снова засел за отладчик. Снова мне помогли тестовые файлы. Ошибку я обнаружил буквально через 30 минут после начала отладки. Это была, в общем-то, не ошибка драйвера, а снова результат изменения стандартов. А ноги у этой проблемы росли оттуда же - от изменения стандарта. Так, старый HDD, после операции чтения или записи, всегда оставлял в регистрах номера сектора, головки и дорожки координаты следующего сектора. Исходя из этого, старый драйвер не высчитывал каждый раз эти координаты для каждого сектора, с которым собирался поработать. Это увеличивало скорость работы. Первая CF карта вместо следующего сектора всегда возвращала последний считанный и мне пришлось в своём драйвере это предусмотреть и сделать отдельную процедуру перехода на +1 сектор, исходя из "геометрии" устройств. А вторая CF-карта и вовсе возвращала какой-то бред. Таким образом, мне пришлось снова переписать драйвер. На этот раз для каждого сектора, который будет читаться или писаться вне группы, я рассчитываю его координаты и записываю их в регистры устройства. И новая версия драйвера будет работать со всеми устройствами - и с первой картой и со старым жёстким диском. И появление таких вот ошибок на дисках вынудило меня искать пути создания резервных копий разделов iS-DOS на диске. На ПК я не знаю утилиты, которая может залезть в раздел MFS и выковырять оттуда разделы iS-DOS. Вариант с диск-едитором, в котором можно открыть образ диска или само физическое устройство и скинуть часть диска в файл, меня не очень то вдохновляет. Поэтому я решил бэкапить диски через сеть. Сначала остановился на модеме, но с некоторых пор у меня не работает ISA-слот на SMUC. Там что-то сгорело, когда я подключал внутренний модем - неправильно подал внешнее питание. Починить, может быть, и нельзя, если проблема в Altera. Да я и не стал искать причину. У меня на столе лежала Arduino Mega 2560, и я решил - почему бы её не приспособить для этого? Заодно вспомню, как пишутся программы на С. До этого я "вспоминал" на проекте бесшинного контроллера PS/2 клавиатуры для Скорпиона. Но дальше тестов не продвинулся - банально не хватает быстродействия, чтобы "нажимать" кнопки выдавая на шину нужные данные. На данный момент передача trd дисков со Скорпиона на ПК практически налажена. Я протестировал скорость передачи просто текстовой строки и оказалось, что Скорпион вполне выдаёт около 40,5 КБ/с. При работе с диском (считать сектор, передать в сеть) скорость конечно падает и полный образ диска передаются за 39 секунд. Но это при посекторном чтении и в TR-DOS через эмуляцию 3D13. В iS-DOS будет гораздо быстрее из-за быстрого драйвера. А именно - получилось 39,5 КБ/с в режиме Турбо на Скорпионе. Правда, на этой плате турбо нестандартное и заметно выше, чем было в оригинале.