ЧИТАТЕЛЬ - ЧИТАТЕЛЮ
В силу объективных причин так сложилось, что "ИНФОРКОМ" серьезно не занимается аппаратными вопросами, связанными со "Спектрумом". Кстати, ведь каждый знает, что нельзя объять необъятное и как знать, что бы из нас получилось, если бы мы начали зани-тться несвойственными нам делами, может быть и ZX-РЕВЮ уже не было бы.
Но то, что мы этим вопросом не занимаемся вовсе не означает, что мы его игнорируем. Наоборот, мы очень высоко ставим эту проблему, просто не чувствуем себя мало-мальски компетентными, чтобы самим писать на эту тему или давать какие-то рекомендации. И чем меньше мы в этих вопросах разбираемся, тем ценнее для нас каждое письмо, приходящее от наших читателей на эту тему. Особенно, если в ней затрагиваются глубинные проблемы стандартизации и обеспечения совместимости разных машин.
Сегодня своими мыслями и пожеланиями с Вами делится наш корреспондент из г. Казани Дмитрий Киселев. Это далеко не окончательная точка в проблеме. Это приглашение к свободному диалогу, к обмену идеями и мыслями, а на первых порах и это тоже большое дело. И мы полагаем, что даже тем читателям, которые и не помышляют о доработках и совершенствовании своих машин, эта статья будет интересна, поскольку они смогут узнать больше о том, в какой среде работают их коллеги, каково положение дел на сегодняшний день.
(С) Киселев Д., Казань, 1993г.
К ВОПРОСУ О СТАНДАРТИЗАЦИИ
В связи с созданием Ассоциации Пользователей Домашних компьютеров и Фонда "ФЛОП" представляю Вашему вниманию мои соображения по поводу стандартизации дальнейших расширений к ПК "Спектрум". Не секрет, что многие системные программисты уже сейчас недовольны скоростными и информативными качествами этой в общем-то неплохой машины. Пример тому - создание многочисленных режимов, не существующих в стандартном "Спектруме 48K" и даже в "128+2".
В некоторых моделях, таких как "Балтика", "АТМ" и "Пентагон профи" даже были попытки внедрить ОС СР/M (ZX-РЕВЮ 5,6-93 и "Радиолюбитель N4 за 1993 г.). Однако и здесь наблюдается неразбериха в адресном пространстве этих режимов, от внешнего порта для пользователя (программатор и т.д.) на ВВ55 до разных режимов графики и цвета. Даже на ПК "ОРИОН-128", который недавно начал развиваться, уже существует стандартная таблица портов расширения ("Радио", N4, 1993 г.) Настала пора подумать о подобной таблице и для ПК типа "Спектрум". Я понимаю, что "ИНФОРКОМ" аппаратными вопросами не занимается, однако хотелось бы узнать о программных решениях этого вопроса. В частности, было бы интересно узнать о карте памяти и портах в таких ПЭВМ как "Таймекс 48 и 68" "Энтерпрайз", "Амстрад 464" и им подобных (см. Примечание "Инфоркома" в конце статьи). На Западе ведь тоже люди не только целыми днями в "Элиту" играют, но и пытаются иногда сменить картриджи и приблизиться к более серьезной среде программирования. Неплохо было бы также услышать мнение специалистов по поводу удобства программирования и логической законченности подобных расширений. Само собой разумеется, что в одном письме всех аспектов этой проблемы не отразишь, поэтому я попросил бы вкратце ознакомить читателей с этим вопросом и пусть они выскажутся и предложат свои решения. Со своей стороны я предлагаю в качестве затравки стандартизацию следующих расширений.
Во-первых, расширение памяти свыше 128K удобно адресовать через 2 старших бита в системном порту SP128 (ZX-РЕВЮ 2/91). Таким образом можно адресовать до 2Л5*16К=512К ОЗУ. Однако здесь встают по крайней мере 2 проблемы:
1) Необходимо так пронумеровать страницы, чтобы пользователь мог наращивать ОЗУ постепенно: сначала 1 линейка РУ5 (я предлагаю страницы 5,2,0 закрепить за ней, а в качестве первой сделать страницу 4, но об этом ниже). Далее при установке 2 линейки РУ5 адресовать к ней остальные 4 страницы, а при установке во 2-ую линейку РУ7 изменять только банки этих 4 страниц.
2) Так как в режиме 320К будут существовать 4 страницы с номером 7, необходима договоренность об использовании только одного SCREEN1 (ZX-РЕВЮ 2/91) или нескольких, что потребует дополнительных условий для переключения. В любом случае следует достичь максимальной совместимости с режимом 128К, а также возможности легкой доработки копировщиков, текстовых редакторов и т.д. на режим 320К. Все, кто может предложить какое-нибудь решение, пусть напишет о нем в "ИНФОРКОМ".
Теперь про теневую страницу. Номер 4 я выбрал потому, что по физическим адресам она является предыдущей к 5-й и нижние 32К переадресовывать не нужно. В теневой странице можно размещать доп. экраны, отладчики и даже альтернативные версии ПЗУ, будь то Бейсик-система с 3-х скоростной загрузкой-выгрузкой, которой я пользуюсь, или TR-DOS. Эта возможность прекрасно реализована в ПК "Балтика". Порт, расположенный по 7ЕН может не только отключать ПЗУ, но и выбирать 4 разновидности экранного пространства, о чем будет рассказано ниже.
К сожалению, при включенном ПЗУ отключается всякое обращение к этой странице, что затрудняет загрузку в нее. С помощью небольшой доработки (нужно от элемента D32 (ЛЛ1), отключить выход D33.2(ЛЕ4 выв. 6) и подключить выход D33.3 (ЛЕ4 выв. 8)) можно загружать любые данные с адреса 0000Н с помощью стандартного загрузчика в ПЗУ. Способность записывать данные в ОЗУ через ПЗУ пригодится также и для мониторов и отладчиков, имеющих собственный экран в этой области.
Кстати об экранах. В том же ПК "Балтика" реализовано 4 экрана, о чем говорилось выше. Первый экран - стандартный, расположен с адреса 4000Н. Второй экран - такой же по формату, но расположен с адреса 2000Н и может использоваться отдельным отладчиком, после этого экрана остается 2К на матрицы шрифтов 16x16. Третий и четвертый экраны заслуживают особого описания. Дело в том, что при формировании адресов их атрибутов отключается частота, делящая экран на 24 знакоместа в столбце и атрибуты адресуются так же, как и графика.
Таким простым фокусом, который легко сделать и на "Ленинграде" и на "Пентагоне 48", достигается графика не только высокого графического, но и цветного изображения (один байт пикселов на один байт цвета). Третий экран расположен с 0000Н, а четвертый с 4000Н. эти 4 экрана коммутируются битами 0 и 1, а ПЗУ отключается битом 7 порта 7ЕН. Таким образом, еще остается место для других расширений.
Я предлагаю в качестве стандартного расширения экран с 2000Н и экран высокого цветного разрешения с 4000Н, т.к. он позволяет загружать стандартные картинки, а атрибуты в крайнем случае можно или пересчитывать, или убирать совсем. Конечно, при этом будет затрагиваться область буфера принтера, но в этих областях "сорят" и многие фирменные программы. Наличие же загружаемого "ПЗУ" позволит сместить эти области вверх и полностью решить проблему.
Конечно, найдутся люди, которые скажут: - "зачем нам эти 12К графики, у нас и с 6К Спектрум не успевает работать". Однако, если стандартизировать также и турбо-режим процессора, который кстати можно прикрепить к одному из свободных битов порта 7ЕН, то соотношение 12К/7(8) Mhz будет даже лучше стандартного, да и проблема с "клэшингом" атрибутов почти решится. Остается, правда, вопрос о том, хватит ли быстродействия у ОЗУ, но это уже проблема технологов, а не программистов.
Следующий вопрос, который подымался на страницах "ZX-РЕВЮ" - это вопрос стандартизации русского шрифта. И если создать доп. матрицы знаков и разместить их в удобном месте - это не проблема, то привязку русских букв к латинским клавишам, а также вопрос о выборе способа и кода переключения нельзя оставлять без внимания. Здесь я тоже предлагаю не изобретать велосипед, а пойти навстречу рядовым пользователям -секретарям, писателям и машинисткам. Достаточно взглянуть на решение этой проблемы со стороны фирмы IBM, которая выпускает клавиатуру именно в стандарте QWERTY (ЙЦУКЕН), а не в стандарте QWERTY (ЯВЕРТЫ), который нравится лишь программистам-системщикам, а не машинисткам. Что же касается недостающих клавиш, то здесь можно предложить ввести дополнительные линии данных в порту клавиатуры FEH. Это легко аппаратно реализуемо и используется в таких ПК, как "Оризон", "Оризон-микро", "Магик" (изг. в г. Ижевске), "Байт", а также, вероятно, в фирменном SP128+2, где есть разъем KEYPAD. Нужно лишь стандартизировать определенную привязку этих клавиш к линиям адресов и внести небольшие изменения в ПЗУ, связанные также с кодами переключения РУС/LAT, в качестве которых я предлагаю использовать коды 02/03, которые в Спектруме не используются, а в ASCII именуются как начало и конец текста соответственно.
Необходимо также подправить синтаксис БЕЙСИКа, чтобы он не интерпретировал коды переключения внутри чисел и т.п. Впрочем, мне будет интересно узнать и другие мнения по этому поводу.
Следующая доработка не встречалась мною ни в одном компьютере и потому я рискну назвать ее своей собственной. Речь идет о расширении музыкальных возможностей Спектрума. Сегодня существует множество программ, использующих музыкальный процессор 8912(10) в режиме 48К. Может быть, они используют также и порт динамика и записи на магнитофон для имитации ударников, хотя я лично таких о программ не слышал. Во всяком случае, я предлагаю использовать этот порт для создания ритм-фона и обращаю ваше внимание на следующий факт: в 8912(10) существуют 1(2) порта, которые предназначены для обмена данными с внешними устройствами и находятся внутри адресного пространства регистров 8912(10) и которые не используются.
Я предлагаю поставить на порт A (который есть на обоих процессорах) два 4-х разрядных ЦАПа, которые будут делить сигналы динамика и магнитофона на 16 уровней, что дополнительно расширит диапазон музыкальных возможностей ПК. Конечно, ЦАП это слишком громко сказано, я имею в виду всего лишь известную R-2R цепочку. Кстати, 16 уровней выходного сигнала вполне достаточно (в крайнем случае можно сделать эти 16 уровней промежуточными между "0" и "1", т.е. получим "0" плюс еще 16 уровней от +5в лог. 1), т.к. 8912(10) тоже имеет 16 уровней громкости и модуляции, во что я поверил только тогда, когда прочел его техническое описание.
Из написанного видно, что желательно проводить комплексную стандартизацию расширений для наиболее полного их использования. Теперь слово за остальными читателями. Вообще нужно активнее работать в этом направлении, чтобы потом не было мучительно больно за то, что наш любимые компьютеры - это прыжок в будущее из позапрошлого. А основными критериями для стандартизации я предлагаю сделать в порядке важности
1) минимальную несовместимость на программном уровне;
2) удобство программирования, близость в адресном пространстве однотипных устройств и расположение "опасных" портов по четным адресам, меньшим 128;
3) легкость аппаратной доработки на наиболее распространенных моделях.
Внедрение этих доработок позволив всколыхнуть необъятные программирующие умы наших Родин, которые наделают на них (компьютерах) такие крутые программы, что на
Западе (я надеюсь) люди начнут потихоньку собирать в гаражах "СНГовские Спектрумы".
* * *
КОММЕНТАРИЙ "ИНФОРКОМа".
Читатель поставил вопрос о том, что ему интересен подход зарубежных производителей ПК "Энтерпрайз", "Амстрад-464", "Таймекс-2048" и "Таймекс-2068". Это уже вопрос по нашей части, кое-какой информацией мы располагаем.
Сразу должны сказать, что опыт "Энтерпрайза", и "Амстрада" нам мало пригодится, поскольку эти машины по архитектуре существенно отличаются от "Спектрума", несмотря на то, что собраны на том же процессоре Z-80. То же можно сказать и о "Шарпе" и о стандарте MSX ("Ямаха", "Хит-Бит", "Спектравидео" и пр.). Все эти машины (кроме м.б. "Шарпа") уже при своем "зачатии" планировались под работу в дисковой системе, чего нельзя сказать о "Спектруме", в котором ничего для этого не было сделано, и потому это скорее промежуточные прототипы для более поздних действительно интересных (по своему) машин, и их архитектура сейчас представляет скорее академический, чем практический интерес для наших условий.
Совсем другое дело - "Таймекс". Эта фирма долгое время (до 1985 г.) работала по прямому заказу К.Синклера. Основная цель, стоявшая перед этими машинами была такая -"Обеспечить проникновение "Спектрума" на американский континент" (было открыто представительство Синклера в Бостоне). Все-таки существовала определенная разница между Европейским и Американским рынками. У американцев и требования к машинам покруче, да и звонкой монеты в карманах всегда было побольше. То, что эта цель достигнута не была, другой вопрос, а вот как это делалось, нам действительно может быть интересно, ведь мы тоже сейчас находимся в аналогичной позиции - обеспечиваем захват "Спектрумом" рынка СНГ.
Модель 2048 - почти полностью идентична стандартному "Спектруму". Естественно, для американцев сделали красивый дизайн, дешевая, надежная и очень удобная клавиатура и сейчас может служить отличным образцом для большинства наших производителей. Встроили порт джойстика и даже ВЫКЛЮЧАТЕЛЬ ПИТАНИЯ! Но это нам не так важно, важнее скорее то, что был применен новый контроллер экрана - на нестандартной, специально для этого случая сделанной БИС - единственное значительное изменение в архитектуре.
Благодаря ей, стало возможным (теоретически) введение дополнительных экранных режимов и второго экрана, что делалось управлением по 255-ому порту. Практически же, надо сказать, это нигде не использовалось.
Переключение экранов выполнялось командой OUT 255,1.
Кроме того, был введен дополнительный экранный режим (54 знака на 22 вместо 32X22), что исполнялось командой OUT 255,n, где n - число, которое определяет цвет символов и фона, например, OUT 255,62 - печать черным по белому.
Появилась возможность реализации цветной графики высокого разрешения. На каждое знакоместо отводилось по 8 байтов атрибутов (вместо 1), т.е. в каждой линии знакоместа можно было задавать свой цвет INK и свой цвет PAPER. Эта возможность исполнялась командой OUT 255,2.
Команда OUT 255,0 - возврат к стандартному "Спектрумовскому" экрану.
Никакой поддержки в ПЗУ для этих нестандартных режимов работы не было и они могли реализовываться только программированием в машинных кодах. Стандартное программное обеспечение, поддерживающее эти режимы также неизвестно.
Существенным шагом по изменению архитектуры компьютера была модель 2068. Она имела два встроенных порта джойстика, звуковой процессор и тот же оригинальный видеоконтроллер. Существенные изменения имело и базовое ПЗУ. Здесь действительно появилась новая карта памяти, новые системные переменные и новые порты ввода/вывода.
БЕЙСИК приобрел несколько новых команд: DELETE, FREE, STICK, ON ERROR и SOUND.
Команда DELETE позволяла удалять строку по ее номеру или группу строк (DELETE.......).
Команда FREE позволяла узнать объем свободной памяти БЕЙСИКА, например (PRINT
FREE).
Команда STICK читала положение одного из двух джойстиков и работала аналогично команде INKEY$. Ее формат, например:
PRINT STICK (m,n)
Здесь m=1, если интересует положение рукоятки или m=2, если интересует состояние кнопки "ОГОНЬ". Параметр n=1 или 2 (соответственно левый или правый джойстик).
Команда ON ERROR обеспечивала переход в заданное место программы в случае возникновения ошибки. Команда SOUND служила для управления звуковым процессором, который имел три музыкальных и три шумовых канала, из БЕЙСИКа.
Как и в "Таймексе-2048" здесь возможны те же режимы управления экраном, тоже возможно иметь два экрана или высокое разрешение атрибутов или 64 символа в экранной строке.
Соответственно, была изменена карта памяти (звездочками отмечены участки, совпадающие со стандартным "Спектрумом").
Карта памяти с одним экраном.
0000H
Системное ПЗУ. (*)
1000H
Графический экран. (*)
5800H
Атрибуты. (*)
5B00H
Буфер принтера. (*)
5C00H
Системные переменные.
6000H
Машинный стек.
6200H
Диспетчер прикладных программ в машинных кодах.
6315H
Код управления банками памяти.
6840H
Блок переменных для прикладных программ в машинных кодах.
ARSBUF CHANS
Информация о каналах.
PROG
БЕЙСИК - программа.
VARS
Переменные БЕЙСИКа.
ELINE
Буфер редактируемой строки.
WORKSP
Буфер INPUT.
STKBOT
Стек калькулятора.
STKEND
Свободно.
RAMTOP
Верхний предел БЕЙСИКа.
UDG
Графика пользователя.
P_RAMT
Физический конец ОЗУ.
Как видно из этой карты памяти, во многом ее структура совладает с картой стандартного "Спектрума". В то же время, выделение зарезервированных областей для машинного стека, блока диспетчера прикладных программ в машинных кодах и блока машиннокодовых переменных, говорит о том, что во-первых, была попытка стандартизировать программы пользователя в кодах и, во-вторых, по-видимому, предполагалось в дальнейшем надстраивать архитектуру компьютера, оставив эти области неизменными для обеспечения совместимости с ранее выпущенным программным обеспечением.
Переключение графических режимов выполнялось теми же командами OUT, что и на Таймексе-2048, но здесь это поддержано новой картой памяти и новыми системными переменными.
Карта памяти с двумя экранами.
0000H
Системное ПЗУ. (*)
4000H
графический экран-1. (*)
5800H
Атрибуты-1. (*)
5B00H
Буфер принтера. (*)
5C00H
Системные переменные.
6C00H
Графический зкран-2. Атрибуты - 2.
7B00H
Блок переменных для прикладных программ в машинных кодах.
ARSBUF CHANS
Информация о каналах.
PROG
БЕЙСИК-программа.
VARS
Переменные БЕЙСИКа.
ELINE
Буфер редактируемой строки.
WORKSP
Буфер INPUT.
STKBOT
Стек калькулятора.
STKEND
Свободно.
RAMTOP
Верхний предел БЕЙСИКа.
UDG
Графика пользователя.
F7C0H
Машинный стек.
F9C0H
Диспетчер прикладных программ в машинных кодах.
FAD5H
Код управления байтами памяти.
P_RAMT
Физический конец ОЗУ.
Новые порты I/O.
В Таймексе-2068 было задействовано несколько новых портов ввода/вывода для обслуживания во-первых двух джойстиков и, во-вторых, для обслуживания музыкального процессора.
Управление музыкальным процессором осуществлялось командами OUT по портам F6H - регистр данных и F5H - индексный регистр. Сначала командой OUT по порту F5H получим доступ к одному из регистров музыкального процессора, а потом командой OUT по
порту F6H -вводим в него нужное число.
Для чтения джойстиков сначала включался контроллер командой
OUT F5H,DEH
а затем их положение определялось анализом портов:
F5FEH - левый
F6FDH - правый.
Дополнительные возможности.
Из-за существенных изменений в ПЗУ, в системных переменных и в карте памяти стала проблематичной совместимость с программами, написанными для фирменного "Спектрума". В принципе, эта совместимость возможна, но это скорее исключение, чем правило. Для того, чтобы все-таки добиться полной совместимости, фирма "Таймекс" начала выпускать дополнительные картриджи ПЗУ, для подключения которых компьютер имеет специальный отсек.
После подключения такого картриджа компьютер становятся полностью аналогичен фирменному варианту, сохраняя свои дополнительные возможности для тех, кто обращается к ним через внешние порты из машинного кода.
Для удобства пользователей на подобных картриджах выпускались и игровые и прикладное программы, например текстовый редактор, а с учетом того, что американцы испытывали в то время явную ностальгию по CP/M, был выпущен и картридж "Зебра", превращающий компьютер в CP/M-совместимую машину.
У наших программистов, имеющих со старых времен большие заделы работ в CP/M тоже явно прослеживается ностальгия по этой системе, и вообще во многом пути развития могут быть схожи. Сейчас не хотелось бы делать выводы и рекомендации, еще не время, но опыт предшественников может дать пищу для размышлений...
Единственное, что можно было бы сказать тем, кто думает над доработками и стандартизацией. Опыт показывает, что это не должно быть самоцелью и обязательно должно быть ПОДДЕРЖАНО ЭКОНОМИЧЕСКИ.
Пусть мы скажем грубо, но прямо. Вы можете быть альтруистом сколько хотите и можете делать какие угодно открытия просто за спасибо, из любви к работе. Но если то, что Вы придумали, не даст другим людям заработать ни копейки, Ваше дело не приживется. И наоборот, если Вы открываете новый путь, по которому пойдут люди и увидят для себя в этом возможность не только поработать, но и ЗАРАБОТАТЬ, они подхватят, разовьют и увековечат Вашу идею и Вас вместе с ней. На этом построен весь многолетний опыт К. Синклера.
Он дал возможность развернуться тысячам фирм, выпускающим программы и сотням фирм, выпускающим периферию. Те сделали свой капитал, а его компьютер стал самым популярным в мире. То же самое происходит и у нас.
Врочем, последнее слово останется конечно за Вами, дорогие читатели и мы будем ждать Ваши письма и Ваше мнение.