НЕКОТОРЫЕ ВОПРОСЫ СТАНДАРТИЗАЦИИ
(c) С. Шмелев, г.Москва
Читая статьи по распределению адресного пространства, я
пришел к мнению, что даже те, кто пишет об этом - не совсем
понимают, что такое неполная дешифрация адреса. За счет
таких решений, как частичная дешифрация, мы имеем этот
замечательный компьютер, так как это дает возможность
использовать меньшее количество корпусов микросхем, а значит
это меньшие: стоимость, размеры и потребление
электроэнергии, что и было задумано изначально. Перефразируя
поговорку, можно сказать: "Что позволено схемщику - не
позволено программисту". Но это не значит, что схемщики
могут делать все, что хотят. Неполная дешифрация
накладывает некоторые ограничения (не очень-то значительные)
как на одних так и на других. Неполный адрес или адрес у
которого в ноль сброшено несколько адресных разрядов просто
не имеет права на существование в архитектуре этого
компьютера. А схемщиков это обязывает создавать интерфейсы,
однозначно выбираемые стандартным адресом. Например,
для выбора порта переключения страниц (т.е. порт #7FFD, что в
двоичной системе %0111 1111 1111 1101), обязательным условием
является определение наличия нуля в разрядах А15 и А1
адресной шины. Дополнительное тестирование единиц в
остальных разрядах, приводящее к более полной дешифрации,
необязательно, но допустимо. Поэтому более полная
дешифрация имеет право на существование. А вот программа с
безграмотным (т.е. неполным) обращением к порту не имеет
такого права.
Но уже есть исключения. Мы имеем порт
кемпстон-джойстика #DF (%1101 1111 ), но он выбирается, не
соответствующим архитектуре, адресом #1F (%0001 1111 ), т.к.
и в том и в другом адресе разряд А5 сброшен в ноль. Такой
адрес как #1F просто не заложен в архитектуру компьютера, но
появился и стал стандартом потому, что при разработке платы
компьютера наши умельцы решили установить м/с ВВ55, получив
сразу и порт кемпстона и возможность подключить принтер или
программатор. Однако, поскольку все это нестандатно, они и создали нам всем
головную боль и этот "нестандартный" стандарт. Так получилось потому, что м/с
580ВВ55 имеет соадресную дешифрацию, т.е. кроме основного,
имеет еще три дополнительных адреса. Но, что сделано, то сделано...
Однако, есть предложение переделать подключение м/с ВВ55. Если на вход
CS подать IORQ при тесте А5, а на А0 и А1 - А7 и А6 соответственно, то
адресация у портов станет другая:
#1F == порт А ==
#9F == порт В == (схема 1 и 2)
#5F == порт С ==
#DF == Регистор управления только для записи.
Но нужна более полная дешифрация, т.е. дополнительное тестирование единиц
в разрядах А6 и А7.
Переделка несложная, но дает большие возможности. Во первых,
выбор кемпстона в любом из двух стандартов одновременно (по схеме 2), либо
возможность использовать порт #DF под интерфейс "мышки". Во вторых,
снимается конфликт между м/с ВВ55 и интерфейсом ZX LPRINT, что позволяет
иметь и тот и другой интерфейсы подключенными одновременно. Только придется
в программах, использующих интерфейс ВВ55, исправить адреса
#3F на #9F и #7F на #DF. А главное то, что разряды А6 и А7 остаются
свободными и могут использоваться как соадресные и в других интерфейсах.
Хотелось бы узнать мнение читателей на эту тему.
А теперь вашему вниманию я хотел бы предложить подборку адресов
всех портов ввода-вывода, известных на данный момент:
г=============================================================¬
¦ ПОРТ, ВЫБИРАЕМЫЙ 8-РАЗРЯДНЫМ АДРЕСОМ т.е. IN-OUT (XX),A ¦
¦=============================================================¦
¦ #FF ¦ не тестируется ¦ состаяние шины данных и подхват ¦
¦ ¦ ¦ атрибутов для синхронизации ¦
¦=============================================================¦
¦ #ХХFE ¦ тестируется А0 ¦ при чтении: клавиатура и вход ¦
¦ ¦ становится 16- ¦ сигнала с магнитофона ¦
¦ ¦ разрядным при ¦ при записи: цвет бордюра, выход ¦
¦ ¦ опр.клавиатуры ¦ на магнитофон и динамик ¦
¦=============================================================¦
¦ #FB ¦ тест А2 ¦ ZX LPRINT ¦
¦==========================¦ конфликт с ВВ 55 по А7 ¦
¦ #7B ¦ тест А2 и А7 ¦ ¦
¦=============================================================¦
¦ #EF ¦ тест А4 ¦ МОДЕМ (в Москве стал стандартом) ¦
¦=============================================================¦
¦ #DF ¦ тест А5 ¦ КЕМПСТОН ¦
¦=============================================================¦
¦ #7F ¦ тест А7 + ¦ рег. управления ¦
¦ #5F ¦ комбинация ¦ порт С BUSY и STROBE ¦
¦ #3F ¦ из А5 и А6 ¦ порт В данные на принтер ¦
¦ #1F ¦ ¦ порт А кемпстон ¦
¦=============================================================¦
¦ ЕСЛИ ПЕРЕДЕЛКА ПРИНИМАЕТСЯ ¦
¦=============================================================¦
¦ #1F ¦ тест А5 + ¦ порт А кемпстон ¦
¦ #9F ¦ комбинация ¦ порт В данные на принтер ¦
¦ #5F ¦ из А6 и А7 ¦ порт С BUSY и STROBE ¦
¦ #DF ¦ ¦ рег.управл.только для записи ¦
¦ ¦ ¦ при чтении (?????????) ¦
¦=============================================================¦
¦ ПОРТ, ВЫБИРАЕМЫЙ 16-РАЗРЯДНЫМ АДРЕСОМ т.е. через рег. ВС ¦
¦=============================================================¦
¦ #7FFD ¦ тест А1 + А15 ¦ только для записи ¦
¦ ¦ ¦ переключение страниц памяти ¦
¦=============================================================¦
¦ #FEFE ¦ тест А0 + А8 ¦ при ¦
¦ #FDFE ¦ + А9 ¦ опросе ¦
¦ #FBFE ¦ + А10 ¦ клавиатуры ¦
¦ #F7FE ¦ + А11 ¦ выбор ¦
¦ #EFFE ¦ + А12 ¦ отдельных ¦
¦ #DFFE ¦ + А13 ¦ рядов ¦
¦ #BFFE ¦ + А14 ¦ ¦
¦ #7FFE ¦ + А15 ¦ ¦
¦=============================================================¦
¦ #FFFD ¦ тест А1=0 А15=1 ¦ ¦
¦==========================¦ МУЗЫКАЛЬНЫЙ СОПРОЦЕССОР ¦
¦ #BFFD ¦ тест А1=0 А14=0 ¦ ¦
¦ ¦ А15=1 ¦ ¦
L=============================================================-
Кто такое натворил с адресацией музыкального сопроцессора,
не знаю, но этим все адресное пространство, при младшем
байте #FD, исчерпано, т.к. любой другой старший байт приводит
к выбору одного из этих портов. Чтобы выделить еще адреса
при мл. байте #FD нужна более полная дешифрация. В некоторых
схемах подключения музыкального сопроцессора дополнительной
дешифрацией является тестирование А13 на единицу. Такое
решение позволяет задействовать стандартный адрес #DFFD.
Есть еще возможность с помощью дополнительного тестирования
или м/с дешифрации типа ИД, получить и другие адреса, но все
это имеет тенденцию к накладкам. Слишком много разных
схемных решений, и несовместимость где-нибудь да проявится. А
использовать порт с таким адресом как #1FFD - значит всегда
нарываться на неприятности. Хватит и порта кемпстона с такой
убогой адресацией. И, подводя черту, предлагаю отказаться от
использования новых адресов с мл.байтом #FD. Уж если пользуемся компьютером,
созданным лордом Синклером, давайте использовать принцип адресации,
заложенный им, а не лепить отсебятину. Это касается и схемщиков и
программистов.
А теперь, что у нас осталось? Остался адрес #BF, который
напрямую использовать невозможно, но совместно со старшим байтом можно
получить 8 адресов:
#FEBF тест А6 + А8 , #FDBF тест А6 + А9,
#FBBF тест А6 + А10, #F7BF тест А6 + А11,
#EFBF тест А6 + А12, #DFBF тест А6 + А13,
#BFBF тест А6 + А14, #7FBF тест А6 + А15
Если со мной согласятся относительно переделки адресации ВВ55, то появится
возможность использовать также разряд А7, что даст еще 8 адресов:
#FE7F ........................#7F7F тест А7 + ст. байт
Еще остался разряд А3, что дает адрес #F7, и я хочу
предложить его использование. Вам не надоело загружать и
держать на каждом диске "boot"? Я еще согласен держать
красивый музыкальный загрузчик на игровых дискетах, но для
работы это одна морока. Ведь кроме основных функций, таких, как
копирование, запуск и т.д. хочется, чтобы он имел функции
текстового редактора, дискового монитора, и т.д. и т.п. А
это значит, что он будет занимать очень много места на диске
и в памяти, долго грузиться и медленно работать. В первом
номере ZX РЕВЮ за 96 год была статья "ROM-Drive" о загрузке программ
из теневого ПЗУ по типу картриджа. Может быть для магнитофонной
версии компьютера и есть необходимость в такой загрузке игр,
только вот подключение картриджа непосредственно к шинам
компьютера вызывает опасение. Я предлагаю другой вариант -
ROM диск. Если установить еще одну м/с 580ВВ55 по схеме 1 с
основным адресом #F7, т.е. тест А3 и соадресные разряды А6 и
А7, а вместо регистра будем считывать байт из ПЗУ,
подключеного адресными входами к порту ВВ55, то получим
такую адресную раскладку:
схема 3
#F7 при записи регистр управления
при чтении байт из ПЗУ
#37 порт А мл. байт адреса
#77 порт В ст. байт адреса
#В7 порт С мл. полубайт выбор одной из 15 ПЗУ
Разрядность порта позволяет иметь максимальный размер ROM
диска почти 16 Мбайт, начав с 64 Кбайт и наращивая постепенно
по мере установки м/с. Чтобы не было большого потребления мощности
можно предусмотреть динамическое питание т.е.
запитывать только выбираемую м/с. (жуpнал "PАДИО" N12 -87 г).
Я конечно понимаю, что это очень дорого, поэтому нет смысла
пока использовать ст. полубайт порта С, хотя желательно его
зарезервировать. Но и без ст. полубайта размер ROM диска
составит почти мегабайт, что вполне достаточно для оболочки
операционной системы и многих ее драйверов, плюс несколько
системных программ на ваше усмотрение. Для постепенного
наращивания нужен стандарт. Предлагаю такой:
Каждый файл начинается с 16-ти байт элемента каталога, как на
дискете, только 3 последние байта используем как адрес
следующего файла. Файлы, конечно, лучше заносить в ПЗУ
вплотную, но для наращивания отделньыми м/с, с функционально
законченными программами, байт, равный #00 в начале
имени, должен игнорироваться и, соответственно, остаток м/с забивается
им. А байт #FF будет означать конец диска т.к., если м/с не
выбрана, будет читаться свободная шина данных. И еще один
вопрос, где держать BIOS, работающую с этим диском. Мое
предложение неконкретно, поэтому схему не привожу, но
принцип одинаков для разных схем. Для BIOS предлагаю
задействовать оставшуюся четверть штатного ПЗУ, перенеся туда
исправленный TR-DOS, дополненный функциями работы с
расширенной памятью ОЗУ (диск Е) и ROM диском (F).
Появится новая версия TR DOS - альтернативная. Но надо
изменить схему так, чтобы интерфейс TR DOS'а не блокировал
переключение страниц ПЗУ. И в то же время, для совместимости
блокировка нужна. Для этого предлагаю использовать 7-ой бит
порта переключения страниц по схеме "или" с 5-м битом,
блокирующим порт, т.е. наличие единицы в 5 или 7 бите
приведет к тому, что при включении интерфейса подключится
старый TR DOS. При входе в новый TR DOS по адресу #3D00 надо, чтобы
проверялся дисковод "А" на наличие дискеты (а не тест самого
дисковода - это уже стало бессмысленно) и запускался "boot"
если он там присутствует, а если его нет, то в ОЗУ переносим
загрузчик из ПЗУ, и он загружает и запускает операционку с
ROM диска. Такое решение позволит запускать защищенные
дискеты с навороченным загрузчиком, игровые дискеты с
динамичным музыкальным загрузчиком, и, в то же время, иметь
мощную и удобную оболочку операционной системы для работы.
Ну вот вроде бы и все основные предложения по ROM диску.
Конкретные варианты можно разрабатывать, если будет принята переделка
порта ВВ 55. Десятичные адреса не привожу ввиду их
абсолютной неинформативности. Лично меня коробит от
десятичных чисел в программе, но при работе с бейсиком
приходится их использовать, т.к. спектрумовский бейсик так
очеловечен, что он перестал понимать нормальный компьютерный язык.
Еще хочу предложить использование 6-го бита порта #7FFD
под расширение ОЗУ до 256 Кбайт. Почему только его и почему
до 256-ти? Я считаю, что это разумный предел для платы,
созданой на основе м/с РУ 5. Дальнейшее расширение возможно
только при создании новой платы - на другой основе, иначе плата
превращается в подобие паутины и становится ненадежной.
Доработка только тогда существенна, когда может быть
проведена на существующем парке компьютеров, а используя
6-ой бит в 128-ой машине, достаточно добавить м/с ТМ2 к порту
#7FFD, и сигнал с нее подать на уже существующий мультиплексор.
Сигнал с которого, в свою очередь, будет подключать верхнее
или нижние ОЗУ 1 и 2 линейки.
И еще несколько заметок по статьям.
Есть догадка, почему при ошибке чтения дисковод начинает гонять
головку на нулевой трек и обратно. Вероятно, это не для того,
чтобы додолбать разболтаный "флопер", а это рудимент,
оставшийся в программе для чтения битовой карты диска с
нулевого трека. Если выделить по одному биту на сектор, то
карта будет всего 320 байт т.е. установленный бит в первых
двух байтах отвечает за нечитаемость своего сектора на
нулевом треке первой стороны и т.д. Если это и не так,
то может быть эту идею кому-нибудь удастся использовать
в новом TR DOS'е.
По поводу стандартизации расширения файлов - я считаю - не стоит
городить огород. Предлагаю для текстовых файлов закрепить
стандарт ZX WORD'а с расширением "W" и "Т" для текстов на
языке ассемблера (любого ZEUS, TASM и т.д.), если он не
использует какой-либо своей кодировки файла, что не дает
возможности прочитать файл без загрузки ассемблера. Согласен
с расширением "E" и "X" для запускаемых кодовых файлов.
Только расширение "Х" для файлов перемещаемых.
Относительно кемпстон-джойстика - предлагаю использовать
разряд D5 для функции "отмена" (ESC).