С мартовской почтой пришло еще несколько интересных писем от наших читателей, касающихся вопросов совместимости версий компьютера. Товарищ Бочанцев из Владивостока разобрался, почему на некоторых моделях "Спектрума" самодельной сборки не идет программа "BOMB JACK". Причина - в измененном в связи с русификацией ПЗУ компьютера.
Товарищ Паньшин из Свердловска исследовал вопрос, почему на многих "нефирменных" компьютерах не идет программа "ARKANOID-I". Дисассемблирование программы позволило ему установить, что при чтении порта номер FF должны выполняться следующие условия:
1. Должен поступать код FF.
2. На 5-ый разряд этого порта необходимо подать синхросерию.
На своем компьютере (Ленинградский вариант) он произвел следующие доработки.
Входы 3,6,10,13 микросхем D37,D38 (КП11) должны быть в состоянии логической единицы, в том числе и незадействованные. Если джойстик подключается через инверторы, то входные контакты необходимо заземлить.
На 6-ую ногу микросхемы D38 (пятый разряд порта FF) он подал синхросерию, взяв ее с 8-ой ножки триггера D8.2 (сигнал INT). В этом случае не пропадает часть элементов экрана во время игры. От частоты поданной синхросерии зависит скорость игры.
Он высказал предположение, что по всей видимости машинный код программы проверяет некоторые особенности конструкции "фирменного" компьютера.
Мы связались со специалистами НТК "ПЛЮС" по этому вопросу и получили следующий комментарий. (Физику происходящих процессов мы опускаем, приводя только логику).
1. Не вполне корректно считать порт FF - портом Кемпстон-джойстика. Стандартно это порт 31, а в схеме "ЛЕНИНГРАД" просто дешифрация выполнена довольно грубо, хотя это мало где проявляется.
2. Наш читатель совершенно прав в том, что при опросе порта FF, как впрочем и вообще любого нечетного порта ввода фирменный компьютер должен выдавать FF, если физическое внешнее устройство или его интерфейс отсутствуют. Но дело в том, что это происходит не всегда! Есть отклонение, которое и было принято за синхросерию. Поставьте такой эксперимент:
10 PRINT IN 255: GO TO 10
Компьютер начнет распечатывать числа 255, 255, 255... , но вдруг в этой последовательности проскакивает код 56 (на фирменной машине), а затем опять 255, 255 и т.д. В чем же тут дело?
(Кстати, если внешнее устройство физически подключено, но не задействовано, например если компьютер имеет встроенный интерфейс для подключения джойстика, то будут выдаваться нули).
Код 56 в двоичной записи имеет вид 00111000. Это не что иное, как цветовой атрибут, соответствующий черному цвету символов на белом поле. Справа налево:
000 = 0 - цвет INK - черный;
111 = 7 - цвет PAPER - белый;
0 - BRIGHT - выключен;
0 - FLASH - выключен.
1данные, считанные с внешнего порта, к которому ничего не подключено?
Здесь Вам поможет описание, данное в 1-ом выпуске "РЕВЮ" на стр. 16 (левая колонка). В фирменном компьютере микросхема ULA занимается среди прочих вопросов и регенерацией (освежением) памяти дисплея. Она выполняет это по двухимпульсной схеме.
1 В оригинале пропущена строка (Прим. OCR)
По первому регенерируются данные экрана, по второму - атрибуты. В момент этой регенерации ULA отключает процессор. После того, как она закончила эту операцию, процессор включается и "подхватывает" с шины данных то, что там выставляла последний раз ULA. Вот и получается, что код, отличный от 255 иногда может прочитаться с внешнего незадействованного порта. Именно это и интерпретировал наш читатель как наличие непонятной синхросерии.
Конечно программа проверяла не весь байт, а только один бит (в данном случае пятый) - ей этого вполне достаточно.
Мы благодарим товарища Паньшина от своего имени и от имени тысяч читателей, которым исследование, начатое им, поможет лучше понять работу своего компьютера.
Остается открытым вопрос зачем это было нужно проверять в программе. Гипотезу, что таким образом "фирмачи" хотели бороться с "самодельщиками" отбросим сразу. Поскольку нигде в мире кроме СССР самодельных "Синклеров" не бывает, а в те годы не было и у нас. Скорее всего это оригинальный метод выполнения синхронизации динамики перестроения экрана с динамикой управления игрой. Это может быть полезным, если например программисты хотели, чтобы угол отражения шарика от ракетки был бы не просто равен углу падения, но еще зависел бы и от скорости и направления движения ракетки в момент касания (как бы "подкрутка" шарика).
Вместе с тем, обращаем внимание на такую деталь. Конечно, разобраться с пределами совместимости очень важно, но многие наши читатели не специалисты в электронике. Не менее полезно вскрыв в программе такие "жучки" сделать просто их обход посредством нескольких операторов POKE. В этом случае достижение одного могло бы сразу служить всем. И мы рассчитываем на то, что наши читатели будут писать о найденных решениях.
ПОСЛЕДНИЙ МЕСЯЦ
Апрель - последний месяц, в течение которого Вы еще можете сделать заказ на полный комплект ZX-РЕВЮ. Вы получите все выпуски, вышедшие до того, как Вы сделали заказ, и будете ежемесячно получать по новому выпуску в течение всего года.
Стоимость подписки на год (а на меньшие сроки мы заказы не принимаем) составляет для частных лиц 90 рублей.
Своих постоянных заказчиков "ИКФОРКОМ" также регулярно оповещает об имеющихся и вновь сделанных разработках.
Заказы направляйте по адресу 107241, Москва, Б-241, а/я 37, "ИНФОРКОМ". Здесь же укажите, когда и откуда был сделан перевод.
Для организаций при оплате по безналичному расчету действует повышенный тариф -252 руб. за полный годовой комплект. Этот тариф не распространяется на школы, Дома Пионеров и т.п. организации, для них тариф - 90 р.
Оплату для организаций и индивидуальных заказчиков производить по адресу: Фрунзенское отделение Жилсоцбанка г.Москвы МФО 201412, р/с 500461778, кооператив "ИНФОРКОМ".