Вернуться на ГЛАВНУЮ страницу
Вернуться к СПИСКУ СТАТЕЙ


Автор: Максим Тимонин aka Максагор
Дата:
31.12.2017 г.
Примечание: опубликовано в электронном журнале "InfoGuide" №12


Знакомьтесь, ATM-turbo 3 (v8.0) – что это такое и с чем его едят

Сейчас в процессе рождения находится новая модель спектрума – ATM-turbo 3 (версия платы 8.0). А если точнее, то опытная партия первой «бета-версии» плат уже проходят  тестовую сборку сразу у нескольких спектрумистов. На сегодня (декабрь 2017 года) в процессе сборки выявлены некоторые ошибки и недочеты, исправляющиеся  по ходу сборки, и которые будут учтены в окончательной ревизии платы. Но с учетом и исправлением выявленных ошибок текущая версия платы уже заработала, поэтому уже сейчас можно сказать – новая модель спектрум-клона состоялась. Осталось только разобраться – что это за зверь такой – ATM-turbo 3 (далее везде для краткости – ATM-3), чем он связан с другими актуальными на данный момент компьютерами линейки ATM – ATM-turbo 2+ (ATM-2+) и ZX-Evolution/BaseConf (ZX-Evo), который сам, вообще-то, до сего момента в базовой конфигурации негласно считался неким ATM-3.

Для начала давайте вкратце вспомним новейшую историю развития линейки ATM после того как ею прекратила заниматься фирма МикроАРТ и ее производство было возобновлено с 2005 года нашей группой NedoPC, получив все материалы (прошивки, файлы разводки платы) и разрешение от МикроАРТа. ATM-2+ производился на основе материалов от МикроАРТа нашей группой примерно в течение 2005-2007 гг. В ходе производства были выявлены и исправлены небольшие ошибочки и огрехи (вроде исправления перепутывания памяти при смене графических режимов или улучшение дешифрации порта #FD при неполной адресации), дорабатывались прошивки ПЗУ как основного, так и контроллера клавиатуры, но в целом перед нами оставался все тот же классический ATM-turbo 2+.

Через некоторое время группа переключилась на давно планировавшуюся разработку новой модели Спекки на современной элементной базе и загружаемой конфигурации – так в железе в итоге появился ZX-Evo. В основу базовой прошивки к нему после определенных дискуссий и рассмотрения иных вариантов было решено положить все тот же ATM-2+ по ряду причин. Прежде всего потому, что его дополнительные навороты, вроде расширенной памяти или графики не надо было изобретать с нуля – ATM-2+ прижился в народе, его навороты как ранее были существенно поддержаны софтом еще во времена МикроАРТа, так и на новом уровне задействовались уже более современными пользователями. Т.е. не надо было изобретать что-то совершенно с нуля, никем не виданное, а потом надеяться, что эти нововведения приживутся. Нужно было только, при необходимости, к уже имеющемуся добавлять какие-то параметры, улучшения с обратной совместимостью с базовой моделью ATM-2+. И, в целом, идея себя оправдала. И вот что тогда вышло:

По сравнению с ATM-2+ в ZX-Evo/BaseConf было увеличено ОЗУ до 4Мб, для чего был модернизирован путем введения дополнительного порта #x7F7 диспетчер памяти, введен новый порт #BF, помимо прочего, позволяющий, включать теневые порты не залезая для этого в ПЗУ TR-DOS. Еще из приятных добавлений – появилась возможность на лету перешивать ПЗУ, менять шрифт, сделано еще один текстовый экран с более удобным расположением в странице, добавлены на плату контроллеры кемпстон-джойстика и мыши, контроллер SD-карточки, плюс более мелкие программно-«железные» улучшения в сфере программного перехвата NMI. При этом кое-что из АТМ-2+ в новую машину или не вошло, или было сделано по-иному. Так, например, контроллер IDE был реализован не по портам ATM-2+, а по стандарту NEMO, как, по мнению (сомнительному с моей точки зрения) разработчиков, более распространенный и, следовательно, более поддержанный программно. По иному, в том числе с точки зрения программного управления, реализован контроллер PC-клавиатуры и т.д. Выброшен полностью («за ненадобностью») восьмиканальный АЦП, порт внешних устройств #FA, через который ранее подключался модем и программатор Uniprog, а принтер реализован не по стандарту ZX-Lprint III (порт #FB), а через порты сопроцессора AY. Также обязательно стоит отметить, что эмуляция дискет TR-DOS также сделана по иному – разработчики отказались от ПЗУ ATM-2+ - связки xBIOS/vTR-DOS. ПЗУ для ZX-Evo  разрабатывался отдельно путем коренной переработки и развития Gluk Reset Service как основы, а эмуляция работы с контроллером дисковода реализована аппаратно-программным способом – т.е. одновременно переработкой ПЗУ и добавлением спецпортов в базовую конфигурацию, в отличие от vTR-DOS на ATM-2+, где эмуляция 1818ВГ93 была сделана исключительно аппаратно.

Но, как бы то ни было, ZX-Evo сохранил в основном обратную совместимость и успешно «вышел в массы» в конце «нулевых» годов. А производство плат ATM2+ было группой NedoPC свернуто. Но история модели ATM-2+, как оказалась, на этом не закончилась. Производство плат возродил в Днепропетровске спектрумист Александр Коровников aka Zorel. И оказалось, что они продолжают пользоваться спросом – далеко не всем по душе оказались современные прошиваемые ПЛИСы, велик оказался и запрос на «теплую ламповую» сборку паяльником. А, положа руку на сердце, ATM-turbo 2+ является одним из лучших и навороченных спектрум-совместимых машин, созданных в 90-е годы по «классическим» технологиям.

Сначала Zorel выпускал платы в последней ревизии от NedoPC (т.е. со всеми сделанными исправлениями недочетов), но со временем стал задумываться о дальнейших доработках платы в целях устранения функциональных недостатоков (не ошибок) текущей версии АТМ-2+. А их еще с 90-х называлось несколько, и прежде всего – это отсутствие слотов для внешних расширений, и отсутствие кемпстон-джойстика. Впоследствии, когда в жизни Спекки плотно укоренилась кемпстон-мышка, ее нехватка (при невозможности просто подключить ее контроллер через слот) также отмечалась. Но плата АТМ-2+ и так при ее внушительных размерах 335x190мм была почти полностью забита корпусами микросхем – свободного места для серьезных доработок не найти. Поэтому место необходимо было освободить. Так родилась идея заменить на плате устаревшие 16 микросхем ОЗУ 565РУ7 (512Кб в сумме – а для 1024Кб приходится напаивать еще 15 микросхем вторым этажом) на две (потому что в АТМ используется опрос сразу по двум линейкам памяти) современные микросхемки ОЗУ с SIMM-модуля.

Сначала идея была опробована на отдельной платке, которая подпаивалась к выходам панелек из-под вынутых РУшек. И когда эксперимент удался, была переразведена и пошла «в народ» новая плата ATM-turbo 2+ v7.18. После этого начались также на отдельной плате эксперименты со слотами, также закончившиеся успехом – платка с двумя слотами и Z80 на борту, вставляющаяся в панельку из-под процессора на плате также успешно заработала. После этого начались попытки придумать, как, используя свободные площади платы, внедрить туда 1-2 слота, да по возможности добавить туда еще доработки – в частности, эти две SIMM-ОЗУ на самом деле имеют объем 4Мб. Возник вопрос – можно ли как-то использовать весь их объем? Так или иначе, выходило, что придется переразвести всю плату на основе файлов разводки МикроАРТа заново, сменив форм-фактор – т.е. по иному, с учетом новых задач разместив элементы и, возможно, несколько изменив площадь платы в сторону увеличения. Так родилась идея совершенно новой АТМки, которая, во-первых, полностью основана на ATM-2+ и является такой-же «теплой и ламповой», а во-вторых, будет как и ZX-Evo совместима со стандартом ATM-3, признаком которого является наличие всего двух вещей – модернизированный через введение дополнительных к существующим теневых портов #x7F7 до поддержки 4Мб ОЗУ диспетчер памяти, обратно совместимый с диспетчером ATM-2+, и дополнительный порт конфигурации #BF, доступный как на чтение, так и на запись. Ну и в-третьих, в отличие от ZX-Evo, в «теплой ламповой» ATMке принципиально не выброшено никаких узлов, изначально бывших в модели 2+. И прежде всего это касается LPT-порта принтера, порта внешних устройств для подключения программатора и восьмиканального АЦП, хотя в процессе обсуждения концепции и поступали предложения – «давайте выкинем то и это – сейчас это нафиг никому не нужно – люди только геймятся и демки смотрят». Но в итоге решено было оставить все как есть как уникальные особенности ATM как настоящего компьютера, по сравнению с другими спектрумами 90-х. Осталась и ориентация на xBIOS, и на использование посредством него профессиональных ОС типа CP/M и iS-DOS, где TR-DOS является лишь необходимым для совместимости элементом, а не переразвитого ПЗУ, сводящего всю работу на Спекки к подмаунчиванию TRD-образов как виртуальных картриджей. Итого – ATM3 – это полноценный ATM-2+ и «новые плюшки» сверху.

Итак, что вышло в итоге по сравнению с ATM-turbo 2+:

Было: Формфактор классический - 335 х 190 мм, стало - полноценный ATX, размером 305 × 244 мм. Переразведены под современные все разъемы. Добавлено два слота ZX-BUS. Для экономии места убраны разъемы двух синклер-джойстиков, однако сигналы для них можно взять с «гребенки» сигналов механической клавиатуры. Убран преобразователь напряжения. -12 вольт берется с АТ/АТХ блока питания – разъемы для подключения обоих типов блоков питания также теперь присутствуют на плате.

Было - ОЗУ 1 МБ и стандартный диспетчер памяти, стало - ОЗУ 4МБ по стандарту ZX-Evolution BaseConf (порты расширения #x7F7, #BF) с небольшими схемотехническими особенностями, позволяющими обходить возникающую несовместимость при работе на ZX-Evo с диспетчером памяти АТМ через неполную адресацию (#xxF7 - тогда идет пересечение с #x7F7 - но сейчас это обойдено. Из-за этого на ZX-Evolution нельзя запустить ПЗУ xBIOS. На новой АТМ прежняя совместимость сохранена. В будущем планируется доработка xBIOS и vTR-DOS до поддержки всех 4Мб (пока все, что выше 1Мб ПЗУ просто не увидит, но работать будет), пока просто руки не дошли. Остановлюсь на этом подробнее:

При создании схемотехники ATM3 на старой элементной основе главным препятствием на пути расширения ОЗУ по стандарту ZX-Evolution стало то, что порт расширенного доступа к ОЗУ #x7F7 сделан на основе дополнения одной адресной линии к порту стандартного диспетчера памяти #xFF7. Все процедуры, типа LD C,#F7: LDI или LD A,xx : OUT (#F7),A сразу же посылают нас далеко и надолго. А это прежде всего стандартная прошивка от МикроАРТа, «базовая» для АТМ на данный момент прошивка xBIOS и ее часть – система vTR-DOS. Таким образом, «одним росчерком пера» мы лишаемся всех ПЗУшек. И если путем изысканий в мониторе отладчике удалось так подправить код стандартной ПЗУ и процедуры запуска ПЗУ xBIOS, чтобы добиться их нормальной работы (там вызов диспетчера памяти по неполной адресации был только в самом начале работы в качестве предварительной настройки диспетчера), то с vTR-DOS это оказалось сделать невозможно – слишком во многих местах и самыми разными способами там используется неполная адресация, в т.ч. и ради ускорения работы системы. А ведь работа с эмуляторов ВГ93 при работе с TR-DOS – это важнейшее преимущество АТМ перед всеми спектрумами поколения, предшествующего ZX-Evolution, и если не найти выхода, то все преимущества будут нивелированы напрочь.

Выход был найден путем введения некоторых других портов ZX-Evolution с небольшими особенностями, не влияющими на текущую совместимость с имеющимся софтом. Идея была подсказана Романом CHRV, а дальше я ее просто довел до логического завершения. Вот ее суть:

В АТМ теневые порты можно включить только одним способом: перейти в ПЗУ TR-DOS по адресу #3Dxx (и если надо, потом оставить их включенными через вывода нужного значения в системный порт #xx77) – так мы добираемся до диспетчера памяти #xFF7. Тоже самое для совместимости сделано и в ZX-Evolution, только мы получаем доступ в том числе ко всем новым портам, в том числе к порту расширенного диспетчера памяти #x7F7, с помощью которого добираемся до 4Мб ОЗУ. Но этот способ в ZX-Evolution существует и применяется только для совместимости со своим предшественником – АТМ-2+ и его софтом - помимо него в ZX-Evolution существует также открытый (нетеневой) порт #xxBF, который, помимо прочих функций включает все теневые порты. При этом, особенностью данного порта является то, что включение теневых портов (включая порты ВГ93) тут имеет наивысший приоритет – т.е. никакие иные способы, кроме как снова обратиться к данному порту, эти порты не выключат. Причем включение теневых портов через порт #xxBF не включает ПЗУ TR-DOS. Так как этот порт очень удобен для работы с теневыми портами, то весь новый софт, ориентированный на 2-4Мб ОЗУ, да и просто на 1Мб ОЗУ, но в расчете на запуск исключительно на ZX-Evolution использует именно порт #xxBF, забыв об иных способах «как о страшном сне». И только, если пишется универсальная программа под Evo/ATM, идет обращение к теневым портам через TR-DOS. Но в таких программах, как правило, идет работа только в пределах 1Мб и только через порт #xFF7, так как #x7F7 хоть и доступен, использовать его нет смысла ввиду его отсутствия в АТМ.

Отсюда созрела идея: также реализовать в новой переразведенной АТМ порт #BF, но с одной отличительной особенностью работы с диспетчером памяти:

Если мы добираемся до теневых портов «классическим» способом через TR-DOS, то мы видим все теневые порты, КРОМЕ порта #x7F7, таким образом сохраняя возможность работать с портом #xFF7 через неполную адресацию. А вот если мы включаем теневые порты через порт #xxBF, то мы видим ВСЕ порты, включая расширенный порт #x7F7, получая доступ ко всем 4Мб ОЗУ Останется доступ и к стандартному порту диспетчера памяти #xFF7, но, конечно, только через полную адресацию. Таким образом все старые ПЗУшки будут работать без проблем.

Единственный минус в том, что xBIOS/vTR-DOS, хоть и заработает полноценно, видеть он будет только «старые» 1Мб ОЗУ. Чтобы переделать его под работу с 4Мб, надо заменить все обращения по короткой адресации на полную, что практически невозможно, ибо почти равно к переписыванию сабжа заново. Выход также был найден:

В ATM-turbo 2+ издавна есть два незадействованных порта IN/OUT #FFE7 и #FEE7. Сами их сигналы на дешифраторе присутствуют (микросхема D31 на схеме), но ведут «в никуда». Эти порты остались в наследство от старых ATM-turbo 2 (v6.xx) с иными контроллерами XT-клавиатуры, для которых эти порты были нужны. Теперь же я решил задействовать эти порты (на запись) для альтернативного доступа к диспетчеру памяти по короткой адресации. Единственное, что пришлось задействовать для этого сразу оба порта, ибо отличие #FFE7 от #FEE7 в адресной линии А8 – при неполной адресации это существенно. А так этот фактор нивелируется. В итоге мы получаем параллельный порт диспетчера памяти #xxE7 (четверти адресного пространства тут также выбираются по A14 и A15). Но его особенностью является то, что он может работать функционально либо как «классический» порт #xFF7 (1Мб ОЗУ), либо как дополнительный #x7F7 (до 4Мб ОЗУ), но с полным сохранением неполной адресации (ведь никаких дополнительных адресных линий не требуется). А вот режим работы («классический» или «расширенный») будет определяться портом #xxBF, только другим битом, не тем, что включает теневые порты. Одно значение – «классика», другое – «расширенный диспетчер». Поэтому при переделке xBIOS/vTR-DOS останется только заменить все обращения к #xxF7 на #xxE7, да включать расширенный диспетчер по порту #BF для порта #xxE7 при первом входе в ПЗУ vTR-DOS, И ВСЁ.

Кстати, порт #xxBF в данном случае будет выглядеть так:

D0 – в ZX-EVO – приоритетное включение теневых портов. В АТМ – тоже.

D1 – в ZX-EVO – 1=разрешение записи в ПЗУ. В АТМ – 0=#xxE7 работает как #xFF7. 1=как #x7F7

D2 – в ZX-EVO – 1=разрешение загрузки шрифта. В АТМ – НЕ ИСПОЛЬЗУЕТСЯ (хотя есть планы)

D3 – в ZX-EVO – генерация NMI для процессора. В АТМ – НЕ ИСПОЛЬЗУЕТСЯ

D4 – в ZX-EVO – 1=срабатывание аппаратной ловушки. В АТМ – НЕ ИСПОЛЬЗУЕТСЯ

D5 – в ZX-EVO - НЕ ИСПОЛЬЗУЕТСЯ (пока что). В АТМ – 1=включение РАСШИРЕННОЙ палитры до 4096 цветов (при 16 отображающихся одновременно) – о ней чуть позднее.

D6 и D7 – НЕ ИСПОЛЬЗУЮТСЯ.

При чтении из порта #BF считываются ранее записанные значения (если бит не используется, то считывается 0).

Было: Палитра 16 цветов из 64, стало: опционально Палитра 16 цветов из 64 по дефолту после ресета (для совместимости) и возможность включения расширенной палитры 16 из 4096. Взята из несколько доработанной экспериментальной схемы от DDp, а именно:

Стандартная палитра ATM (64 цвета при 16 отображающихся одновременно), по которой на каждый цвет RGB приходится по два бита, управляется теневым портом #FF. В случае палитры из 4096 цветов, на каждый RGB-элемент приходится уже по 4 бита. При этом идея была проста – использовать тот же порт #FF, где старшие два бита как и прежде выводить через шину данных, а вот дополнительные биты – через старшие биты A8-A15 шины адреса. Т.е. порт #FF превращался бы в #xxFF.

Однако изначально у этой схемы оказался один недостаток: при неполной адресации возможны всякие казусы. И если конструкцию LD A,xx: OUT (#FF) такая схема еще переварит, то уже LD C,#FF:OUTI вызовет приступ несовместимости. В итоге введенный Бит палитры D5=0 порта #xxBF блокирует расширенную палитру, как будто ее и не было, а D5=1 включает. Это способ оказался очень удобным. Кстати, при сбросе и сразу после включения все биты порта #BF будут равны 0, что означает: отключено приоритетное включение теневика, в ZX-EVO отключены все записи в ПЗУ и шрифты, отключены все генераторы NMI и аппаратных ловушек. А в АТМ – включено соответствие порта #xxE7 порту #xFF7 и отключена расширенная палитра – т.е. сохраняется совместимость «снизу вверх» с предыдущим софтом.

Ну и еще, что касается диспетчера памяти: Было - ПЗУ от 64Кб до 128 Кб, стало ПЗУ от 64Кб до 1024Кб. На самом деле это не совсем признак ATM-3: даже в существующей АТМке уже есть возможность работать с ПЗУ объемом 1Мб - просто для такой большой микросхемы не подведены на панельку, куда она вставляется три дополнительных адресных сигнала, но во всех портах управления возможность работать с 64-мя страницами ПЗУ есть. Так что если в обычный АТМ вставить ПЗУ 27080, а три недостающих сигнала провести от страничного порта тремя проводочками на соответствующие ножки микросхемы, то все будет работать (а в новой АТМ просто надо установить как надо три перемычки). Более того, такой объем ПЗУ уже 12 лет как поддержан в xBIOS - т.е. если вы поставите "большое ПЗУ" и в нижние 640Кб прошьете образ TRD (сама "классическая" прошивка xBIOS должна будет располагаться в верхних 128Кб данного ПЗУ), то можно сразу после старта, просто выбрав в меню в опции переключения между RAM- и ROM-диском именно ROM-диск, работать с прошитым образом. Так что можно будет на свое усмотрение сформировать дискетку с самый первостепенным софтом и прошить себе в ПЗУ и работать с ним через vTR-DOS. Это уже сейчас можно попробовать на эмуляторе Unreal, просто сформировав соответствующий большой образ ПЗУ.

Из иных изменений и добавлений:

Было: кемпстон-джойстик и кемпстон-мышка отсутствовали. Стало – оба девайса разведены на плате. Причем мышка доступна как по кемпстон-портам, так и через программирования контроллера клавиатуры на основе i8051.

Было: энергонезависимые часы отсутствовали. Стало: К тем часикам, что есть в контроллере клавы (но не посаженые на батарейку и обнуляющиеся после выключения питания), добавятся часики на батарейке, управляемые через расширенные функции контроллера клавиатуры. Увы, найти место под порты часиков по стандарту Глюка не удалось.

Было - COM-порт на 170ап2 и 170уп2, стало COM-порт на GD75232. COM-порт уже есть в текущей АТМ, работа с ним возможна через программирование контроллера клавиатуры (поддержана в текущей используемой прошивке от Камиля Каримова и классической от МикроАРТа). Изменились только микросхемы, через которые формируются сигналы.
В целом, можно увидеть выше, основа контроллера PC-клавиатуры осталась прежней, но на нее навешан ряд новых функций. Из недостатков тут пока то, что это всё новьё пока не поддержано в прошивке контроллера. Но это уже программная задача и она будет решаться.

Было - обычный контроллер FDD без изменений, стало - турбированный ВГ93, который теперь поддерживает HD-дисков 1.44Мб и 1.2Мб (Режим плотности (обычная/высокая) переключается программно). Это реализовано по давно опубликованной схеме (еще в "нулевых"). Турбированный контроллер "прозрачно" работает с TR-DOS. Работа с "большими" дискетами программно поддержана в iS-DOS/TASiS - схема и софт лежат на сайте АТМ. Так же в контроллер внесены мелкие доработки по повышению помехоустойчивости ATM-turbo 2(+) при работе с FDD.

Было: Аудиовход как таковой отсутствовал: смешивать звук например GS+АТМ без паяльника было не реально.  Стало: добавлено 2 аудиовхода.

Что принципиально осталось прежним:

Турбирование: в отличие от 14МГц на ZX-Evolution это все тот же классический ATM с 7МГц на борту. Под большую тактовую частоту пришлось бы изобретать все с нуля, как в ZX-Evo.

Контроллер IDE: остался прежний на портах ATM. Если уж кому-то понадобится NEMO-контроллер, он сможет подключить его через слот.
Вот такой он, новый ATM-turbo 3. Сейчас, с учетом выявленных допущенных при переразводке ошибок, будет подготовлена окончательная ревизия. Если удастся найти место, то, возможно получиться вставить туда еще два узла:

Контроллер SD-карточек, совместимый по портам с ZX-Evo. Изначально планировался, но места не нашлось. Сейчас, по первым прикидкам.

Поддержка разных шрифтов: реализация загрузки шрифтов извне как в ZX-Evo на оставшемся скудном пространстве вещь достаточно сложная, а вот поддержать ПЗУ для прошиваемого шрифта объемом больше нынешних 2Кб вполне возможно. Тем более что почти все для этого есть. В порте #BF уже есть бит D2, разрешающий в ZX-EVO запись шрифтов. В ATM3 он может разрешать программное переключение 2Кб-частей с прошивками шрифтов в большой ПЗУшке, а адресовать эти части ПЗУшки вполне можно адресами A8-A15 того же порта #BF. Если для этого использовать ПЗУ 27010 (128Кб), то это позволит иметь на борту 64 шрифта. А вообще такая адресация позволяет адресовать ПЗУ вплоть до 27040 (512Кб) с 256 шрифтами. Но это еще пока планы перед выпуском окончательной версии.
Главное сейчас другое – большая работа проведена успешно. Новая модель спектрум-клона ATM-turbo 3 уже работает. Zorel’ом при моем и ряда других спектрумистов скромном консультативном участии проделана большая работа. Прошу любить и жаловать.