ZX-Ревю 1996 №1-2 1996 г.

Читатель - читателю - проблемы развития ZX Spectrum.


ЧИТАТЕЛЬ - ЧИТАТЕЛЮ

ПРОБЛЕМЫ РАЗВИТИЯ ZX SPECTRUM.

Paul Smith, S.-Petersburg, September 1995._

Являюсь Вашим постоянным читателем, но пишу впервые. У меня на работе IBM, а дома Спектрум. Ситуация классическая. И вот, как-то сидя за IBM, вспомнив некоторые публикации в ZX РЕВЮ, подумал - а действительно, как выдержать Спектруму конкуренцию в момент нашествия игровых приставок и других компьютеров? (ИФК: ситуация классическая: человек сидит за IBM, а думает о Спектруме!). Всё, что придумал, набрал в MS DOS (ИФК: СПАСИБО ОГРОМНОЕ!) и вот что получилось._

I. Проблема прикладного программного обеспечения.

Спектрум имеет, цитирую: ".широкий спектр языков программирования, графических и музыкальных редакторов." (ZX FORUM, "От редакции"). Все это так, но. Вспомним, когда всё это программное обеспечение было написано. Хоть и не в прошлом веке, но в прошлом десятилетии, это точно. Особенно плохо дело обстоит с языками программирования высокого уровня - ни сервиса, ни качественной компиляции. Зато бурное развитие получили музыкальные редакторы - как говорится, спрос порождает предложения. Приветы и fuck-и, переданные программистами друг другу во всех MEGA-DEMO, можно исчислять гигабайтами.

Господа программисты! Спектруму срочно требуются высококачественные компиляторы языков программирования, желательно в стиле "turbo"! Хватит музыкалок, которые девать уже

некуда! Единственное, что появилось в последнее время, это ассемблер TASM. Допускаю, что у меня не самая лучшая версия, но название "турбо" дано программе либо по недоразумению, либо для рекламы.

От себя лично могу предложить вашему вниманию новую версию языка Форт. К сожалению, этот замечательный язык программирования мало известен в нашей стране. Но я уверен, что среди владельцев Спектрума найдутся не только поклонники этого языка, но и те, кого заинтересует новая версия. Главные её достоинства - русский интерфейс, поддержка ДОС и самое главное - автор (т.е. я), примет, к сведению пожелания и информацию об ошибках и неточностях, даст консультацию как общую, так и по внутренней работе и всем тонкостям (вплоть до машинного кода). Ни о каком другом языке такой информации вы не получите. В конце письма прилагаю заявку. Копию пока не посылаю, так как мой издосовский копировщик не копирует, а только портит дискеты.

Если заинтересует, напишу подробнее. Предупреждаю - это не адаптация других версий. Программа разработана с нуля, то бишь начиная с адресного интерпретатора. В связи с этим в программе есть свои, авторские, причуды. Лишь впоследствии я достал другие версии и смог их сравнить.

II. ZX-STANDART

Можно бесконечно и без толку возвращаться к вопросу о стандартизации - никакого стандарта никогда не будет. Давно пора открывать рубрику с вышеуказанным или подобным названием и конкретно установить - что и как. Аппаратчики и программисты! Будьте любезны соблюдать стандарты и соглашения! А иначе будет продолжаться разброд, шатание и повальная несовместимость различных моделей и программных продуктов! Кроме журнала, взять на себя роль "стандартизатора" некому. (ИФК: готовы открыть новую рубрику - пишите Ваши предложения) Предлагаю некоторые темы для новой рубрики:

1. Порты ввода/вывода. Пора, наконец, разобраться, какие разряды адреса и данных для чего используются, что как выбирается. В конце письма привожу примеры описания стандарта KEMPSTON JOYSTIC и LPRINT-III

2. Порты ввода/вывода для новых устройств. При разработке новых устройств возникает проблема, куда их "цеплять". Предлагаю использовать для этого порты INTERFACE-I: #F7, #EF, #E7. Его в нашей стране всё равно нет, а на Западе наши разработки для Спектрума никого не заинтересуют. Для выборки портов используются разряды A3 и A4, что в сочетании со старшими разрядами даст 256*3=768 адресов. Хотя полная дешифрация аппаратно будет (выглядеть громоздко, это решит проблемы сосуществования разных устройств друг с другом. Адреса портов раздавать на усмотрение ZX-РЕВЮ.

3. Стандарт AY-STEREO. Применяются два способа микширования каналов музыкального сопроцессора для получения стереозвука: ABC и АСВ (левый, средний, правый). Последний используется, в Пентагоне-128 и принят за основной Спектрофоном. Возможно, его и следует объявить стандартным.

Стандарт интерфейса принтера. Два самых распространенных, параллельные LPRINT-III -порты #7В, #FB и ВВ55 - порты #1F, #3F, #5F, #7F. Имеет смысл стандартизировать интерфейс принтера, использующий музыкальный сопроцессор. Все остальные хоть и не объявлять вне закона, но не рекомендовать к использованию.

5. Стандарт раскладки русских букв на обычной, 40-клавишной, клавиатуре: •S Стандарт ЯВЕРТЫ - самый простой в реализации. Хотя ни на одном другом компьютере такого нет, на Спектруме он прижился и имеет право на существование. Однако надо решить проблему с "лишними" русскими буквами. Вешать их на []{}(§)... и вводить в режиме Ext Mode - неудобно, непрактично и несолидно (для хороших программистов, разумеется). Мое предложение, реализованное в программе K-FORTH - дополнительный русский регистр для "лишних" и, кстати, более редких букв. Я их подвесил на TYUIOP (ЧШЩЪЭЮ). Подробнее -описание языка K-FORTH. В результате, каждой русской букве соответствует только одна

клавиша, символы []{}~|. вводятся как обычно: через SymbolShift (если называть обычным для этих символов ввод не в режиме ExtMode). •f Стандарт ИЦУКЕН - используется везде. Но здесь тоже проблема, куда вешать "лишние" русские буквы.

6. Расширенные русифицированные, 48- и 56-клавишные, клавиатуры. Идея заключается не в добавлении новых клавиш с двумя, тремя и более контактов (было где-то такое идиотское предложение), а в использовании разрядов D5 и D7 порта #FE. Действительно, для чтения состояния клавиатуры используются D0.D4, разряд D6 - чтение с магнитофона. Используя D5 и D7 можно прицепить еще несколько клавиш. Идея была высказана в каком-то номере Радиолюбителя. Автор статьи утверждал, что всего можно добавить 15 клавиш, а я думаю, что все 16. В любом случае этого более чем достаточно для русификации. Отличная идея так и не получила развития. Я вижу две причины:

1. Не все владельцы Спектрума читают Радиолюбитель.

2. Нет стандарта, что на какие разряды подсоединять, как располагать клавиши, какой код каждой клавише присваивать. В результате программисты не пишут, а аппаратчики не делают.

Возможны два варианта клавиатуры: •S - с 8 дополнительными клавишами - используется только один дополнительный разряд D5

(русские буквы, регистры) - 48 клавиш; •S - с 16(15) дополнительными клавишами - используются оба дополнительных разряда D5 и D7 (русские буквы, регистры, знаки, функциональные клавиши) - 56 клавиш.

Клавиши с двумя контактами для ввода точек, запятых и т. д. я не считал. С ними клавиатура будет ещё более полной.

7. Стандарт расширений имен (типов) файлов в TR-DOS. К сожалению, расширение имени файла состоит только из одного, хотя и любого символа. Сейчас каждый уважающий себя программист использует свои расширения, мало заботясь, что другой также использует их, но для других целей. При отсутствии каталогов в ДОС это вызывает конфликты. Стандартные расширения:

B - BASIC-файл. Можно понимать и как BAT-файл. D-DATA.

C - CODE. Универсальный кодовый файл. Может содержать все что угодно, начиная с текста и заканчивая программой. Поэтому весьма неудобен для специализированных данных.

# - Файлы прямого и последовательного доступа. Предлагаю другие:

0-9 - Использовать вместо "C" для хранения блоков, всегда присутствующих вместе с основной программой -оверлейные блоки, дозагружаемые уровни и т.п. Таким блокам удобно давать имя, как и у основной программы.

E или X - Запускаемые кодовые файлы - аналог ЕХЕ и СОМ в IBM и СОМ в IS-DOS. Далее я ещё вернусь к этому.

T - Текстовые файлы. Неплохо бы стандартизировать и формат таких файлов. @ - MAGIC-файлы (см. далее).

* - Отзагрузочные блоки. Кстати, так как заранее известно, куда грузится блок и его длина, то 4 байта заголовка файла (адрес и длина) можно использовать для идентификации и поиска в каталоге. Для поиска вместо 9 использовать 13 символов -значение в (#5D06) ячейке ДОС. Эту идею могут использовать и другие программы. Например, для идентификации текстовых файлов использовать два байта адреса загрузки.

a,p,c,h (строчные) - Зарезервировать для языков программирования Ассемблер, Паскаль, Си на тот случай, если их кто-то когда-нибудь напишет. Нынешнее состояние языков высокого уровня, как уже говорилось, плачевное.

G - Предлагаю использовать для текстовых файлов в формате GENS-4. Если заменить байт 2803 от начала с 66("С") на 71("G") (сектор 11 начиная с 1, байт 243) все файлы будут типа G. Очень удобно - в каталоге сразу их видно, и ни с чем не спутаешь. Одна проблема - файлы, записанные командой "О" будут иметь тот же тип. Может, кто сможет решить и эту проблему? F,f - Используются программой K-FORTH.

8. Расширенный KEMPSTON-JOYSTIK за счёт использования разрядов D5, D6 и D7. Возможны варианты KEMPSTON-2 и KEMPSTON-3. В первом варианте добавляются две новые кнопки. Он может использоваться и как расширенный SINCLIAR-JOYSTIK, разумеется если интерфейс последнего сделан отдельно от клавиатуры (INTERFACE-II). Во втором варианте добавлены три кнопки. Непонятно, почему до этого никто не додумался!

III. PROJECT ZX-ROM.

Сэр Синклер, создавая этот замечательный компьютер, при всей своей гениальности, не смог предвидеть популярности своего детища. Скорее всего, стояла задача в минимальные сроки выбросить на рынок новую модель дешевого компьютера. В результате мы пожинаем недостатки неудачно "сляпанного" ПЗУ. Вот если бы одно-два RST было выделено под функции DOS, BIOS. He пришлось бы запрещать модификацию ПЗУ, система получила бы возможность развиваться, да и с дисковыми ОС проблем было бы меньше. А в результате, на текущий момент все застряло на уровне каменного века.

Задача всех поклонников Спектрума исправить ошибку К. Синклера. Ожидаю возражений -внесение изменений в ПЗУ повлечёт за собой повальную несовместимость - именно по этой причине и было наложено табу, тем более полно примеров неудачных русификации и т.д. К сожалению, несовместимость будет. Однако следует подумать, что можно сделать:

1. Идея стара, как сам Спектрум, если не старше - альтернативное ПЗУ (имено альтернативное, а не теневое). Но раньше пользователь с таким ПЗУ вынужден был мучаться в одиночку. А надо делать всё централизовано, чтобы любой пользователь смог получить новую версию ПЗУ. Здесь ИНФОРКОМ может стать дистрибьютором. С кем заключить договор на изготовление (прошивку), кому продать права, Вы знаете лучше меня.

Для начала предлагаю устроить Всеспектрумовское обсуждение ПРОЕКТа ZX-ROM-95 -каким оно должно быть. В результате Спектрум будет иметь два ПЗУ - старое (стандартное) и новое (альтернативное или уже основное?), плюс тумблер для их переключения.

2. Возвращаюсь к проблеме совместимости. Необходимо разобраться с наиболее часто используемыми процедурами и не изменять адреса их наиболее важных входных точек.

3. Некоторые ячейки ПЗУ используются в качестве адресов во втором режиме прерываний (IM 2). Не все адреса в ПЗУ имеют смысл, но остальные придётся обходить. Некоторые предложения по усовершенствованию DOS:

1. Добавление новых функций #3D13. Вызов функций ДОС через RST (об этом ниже).

2. Использование дискового пространства, занимаемого стёртыми файлами.

3. Обновление файлов - запись нового файла поверх старого с тем же именем.

4. Сегментированные файлы. Здесь TR-DOS не предоставляет простого решения, но кое-что можно попробовать.

5. Отмена тестирования дисковода (определения, сколько сторон и дорожек). Традиционно со Спектрумом используются только дисководы на 720 К Отмена тестирования приведёт к ускорению инициализации системы.

6. Прекратить "ёрзанье" головок дисковода туда-сюда при ошибке чтения. Если у кого-то разболтанный флоппер, то почему должны мучаться те, у кого хороший? Опыт работы с DCU показывает, что если сектор не читается, то никакое ёрзанье уже не помогает. Кроме того, если дело в точности позиционирования, не достаточно ли переместить головки на соседний трек и назад?

7. Удалить из ПЗУ ДОС всё, что имеет отношение к INTERFACE-! Освободится не много места.

8. Ещё один способ освободить место - удалить интерпретатор команд Бейсика-128. На мой взгляд, Бейсик-128 давно пора заменить чем-нибудь получше. Говорю как владелец 128 машины (см. далее).

9. Динамическое выделение временного буфера нельзя признать удачным. Предлагаю выделять буфер в области стека. Например:

; Помещаем в HL значение SP:

LD HL,0

ADD HL,SP ; Выделяем 256+1=257 байт

DEC H

DEC HL ; HL адрес буфера.

LD SP,HL ; Буфер выделен.

10. Работа Бейсика с файлами произвольного типа, а не только B, C, D и #. Потребуются и некоторые другие доработки, ведь Бейсик играет роль командного языка ДОС.

11. Усовершенствование MAGIC. Без порчи ячеек памяти, с определением IM 1 или IM 2, корректная работа с R. Кто не знает, как отличить IM 1 от IM 2 расскажу в другой раз. Новая MAGIC не будет совместима со старым. Желательно использовать для MAGIC-файлов специальный тип, например "@".

12. Грамотная обработка ситуаций "Disk error" и "Read only".

13. Запускаемые кодовые файлы типа "E".

14. Передача программе параметров через командную строку. Например: RUN "gens5" BIN ,"/a /с /n". Здесь запускается кодовый файл с расширением E, которому передаются параметры через символьную строку.

15. Ввести ограничения на используемые в именах и расширениях файлов символы.

16. С новым ПЗУ решится проблема с винчестером. Но это отдельная тема. Предложения по усовершенствованию SOS:

1. Разумеется, полная русификация.

2. Устранение ошибок в процедурах ввода/вывода, и незначительное их усовершенствование.

3. Вместо ZX-PRINTERa поддержка LPRINT-III.

4. Связь с TR-DOS через процедуру, обработки ошибок. Во-первых, это позволит вводить операторы в "нормальном" виде. Например: 100 SAVE *"MyFile" CHR$ "H",40000,100,"Y". Здесь приведён пример, как может выглядеть оператор записи на диск кодового файла с произвольным типом. Тип файла в примере "H". Ключ "Y" означает, что система запрос "Overwrite (y/n)?" задавать не будет.

Во-вторых, мы получим возможность вызова функций ДОС через RST! Для этого после RST 8 необходимо разместить байт кода функции ДОС (DEFB fun), отличный от кодов ошибок Бейсика - 0.26 и 255.

5. Пора разработать и "мышиный" стандарт с поддержкой интерфейса мыши через функции

ДОС.

Излагать в данном письме доводы по спорным вопросам и конкретные рекомендации не входит в мою задачу. Если такое новое ПЗУ будет разработано, считайте меня первым клиентом на его приобретение.

IV. PROJECT ZX-SHELL

Следует признать, для уровня 90-х годов TR-DOS лишь по старой памяти претендует на то, чтобы называться операционной системой. По сути, это лишь имитация ленточных операций на дисководе, с некоторыми дополнительными возможностями. Даже место, занятое "стёртыми" файлами использовать не может и пишет как на ленту - последовательно. Вот только ленту можно перемотать и записывать с самого начала, а диск - нет. Кое-что я уже предложил выше. На самом же деле всё не так плохо - уже существует система IS-DOS, которая загружается с дискеты. Однако не следует забывать - главное достоинство Спектрума в том, что вся его ОС (Бейсик и

ДОС) находятся в ПЗУ и не требуют загрузки, то есть всегда под рукой. Значит, то же самое необходимо сделать и с IS-DOS.

Говорят, поддержку IS-DOS в ПЗУ собираются сделать в Скорпионе. Я предлагаю сделать это в обычном компьютере. Вначале речь пойдет о Спектру ме-128.

Идея проста. Два разряда - разряд D4 порта #FFFD Спектрума-128 (переключение ПЗУ 48/128) и сигнал выбора теневого ПЗУ в BETA-DISK, в различных комбинациях позволяют адресовать 4 16-ти килобайтные страницы ПЗУ. Три страницы заняты Бейсиком-48, Бейсиком-128 и ДОС. Получается, что мы сразу нашли 16 не используемых килобайт адресного пространства. Бейсик-128 - это ещё 16 килобайт. На мой взгляд, от этого довеска на Спектрум-128 одна морока с загрузкой программ. Лучше бы Синклер что-нибудь типа ВЕТА-MEGA-BASICa приспособил. Получается 32 килобайта, что достаточно для размещения небольшой оболочки.

Не вдаваясь в технические детали, скажу, что для подобного усовершенствования Спектрума-128, хотя и придётся взять в руки паяльник, не требуется" каких либо особых знаний электроники и дефицитных деталей.

Спектрум-48. Здесь несколько сложней - придётся паять порт #7FFD. Впрочем, проблема не столь велика, как кажется, тем более установка микросхем ОЗУ совсем не обязательна. Возможно, кто-то займётся распространением ПЗУ вместе с небольшой платой, на которой распаяны порты Спектрума-128 (всего три мелкосхемки плюс ПЗУ) и, кроме того, предусмотрено место для установки музыкального сопроцессора и дополнительной линейки ОЗУ (ещё две мелкосхемки) и ещё чего-нибудь (интерфейс принтера, например). Также не буду вдаваться в технические детали. Тем более, я уверен, что для каждой конкретной модели компьютера найдётся владелец, который сразу смекнёт, где что перерезать и что куда подпаять, а потом поделится опытом с остальными.

Надеюсь, что мое предложение все-таки кого-нибудь заинтересует.

Пусть извинят меня владельцы Спектрума без BETA-DISKa. В свое время я достаточно наигрался-напрограммировался с магнитофоном и считаю, что поднятые мною проблемы в целом для них не существенны. Ибо использовать компьютер без ДОС можно с грехом пополам только как игровую приставку.

Готов написать подробнее по некоторых проблемам, подискутировать по спорным вопросам.

Приложение 1.

Примеры описания портов ввода/вывода.

Разряды адреса:

X разряд не анализируется, но для совместимости должен быть установлен в 1; Z разряд не анализируется, но для совместимости должен быть установлен в 0;

- (минусы в старших разрядах адреса) разряды не анализируются и могут быть любыми;

Разряды данных: IN OUT

0 - всегда вчитается 0 всегда должен быть 0

1 - всегда читается 1 всегда должна быть 1

X- - состояние пассивной шины данных не используется и может быть любым

В скобках указан рекомендуемый адрес. 1. KEMPSTON JOYSTIK IN FEDCBA98 7 654 3210

--------ZZ0XXXXX

(#1F,31)

- чтение состояния контактов джойстика D7 = 0

D6 = 0 D5 = 0

D4 = стрельба

D3 = вниз D2 = вверх D1 = вправо D0 = влево

Особенности: Из старших разрядов всегда читаются нули. Это позволяет определить, подключен ли джойстик, что многие программы и делают. Однако в наших компьютерах этот номер часто не проходит.

Конфликты: Интерфейс на ВВ55 (#1F, #3F, #5F, #7F).

Дополнение: Используя старшие разряды можно получить джойстик с большим набором функций. Так как пассивное состояние разрядов порта - ноль, это не помешает определению наличия кемпстона.

2. INTERFACE LPRINT-III IN FEDCBA98 7 654 3210

--------SXXXX0XX

(#7В, 123, #FB, 251) A7 = селектор ПЗУ (0 - основное, 1 -теневое); D7 = "BUSY (0 - принтер занят, 1 - готов к приёму данных); D6.D0 - не используются (в параллельном интерфейсе). OUT FEDCBA98 7 654 3210

--------SXXXX0XX

(#7В, 123, #FB, 251) A7 = "STROBE (в момент изм.0->1 принтер принимает данные); D7.D0 = DATA (данные на принтер).

Адресный разряд A7 может быть как 0 так и 1, поэтому указаны два адреса. Особенности: Подпрограмма в ПЗУ, ответственная за ZX-PRINTER, перед любой операцией, в том числе и перед, записью в буфер, определяет подключен ли принтер чтением из порта #FB. Единица в разряде A7 служит переключателем на теневое ПЗУ. Для обратного переключения используется холостая команда чтения из порта #7B. Именно этот адрес рекомендуется использовать программистам, работающим с портами интерфейса напрямую. Внимание! Самодельный интерфейс может не иметь теневого ПЗУ. Конфликты: Интерфейс на ВВ55 (#1F, #3F, #5F, #7F), который выбирается при нуле в A7.

Алгоритм передачи данных:

; А = байт на принтер.

WAIT IN A,(#7B) ; Байт состояния принтера.

Бит готовности в флаг CF. Переход, если принтер готов. Принтер не готов: Опрос BREAK (CapsShift+Space), Цикл ожидания готовности. Сообщение об ошибке.

PRINT

Принтер готов: Вывод байта. STROBE=0 Вывод байта. STROBE=1

*************************************************************************************

© П.В. и С.П. Макарычевы, Москва.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Обратная связь - контакты редакции.
В следующем номере - Mоре синеет, Экслибрис, Домашняя библиотека, Книжный рынок.
Хит-парад - 10 лучших программ,по итогам продаж фирмы Welcome.
Разное - Слухи. Разьяснения.
Новости - David Saphier изобрел полезную утилиту для игроделов, использующих Arcade Game Desinger (AGD).

В этот день...   29 марта