Передовица » Software » Игры » Rocker's Lair

Rocker's Lair

Скачать архив с диском. АГАТ-9. НГМД 840.

Автор: Сергей Игнатов. Москва 1993 год.

Сергей Игнатов (IS CORP) известен своими играми для ЭВМ "Микроша". Среди них игровой сериал "Голубые береты" и power boat (игра с дозагрузками). Все это можно найти на замечательном сайте о Микроше.

На Агате автор реализовал только одну игру - Rocker's Lair, прототипом послужила аналогичная игрушка на Спектруме (какая?). Игра довольно сложная, ведь любое касание стенок приводит к гибели.

Несколько уровней из игры:

  

  

Управление
Стрелки - движение
"Пробел" - остановить движение

Почему эта игра не слушает клавиш на Агат-7 ?

В Мымрине схема работы клавиатуры описывается так: сдвиговый регистр, получает по синхросигналам данные от клавиатуры. Данные идут начиная от старшего бита, в регистр заносятся справа. Сдвигаются справа налево. Когда последний младший бит будет получен, старший бит - принятый первым - оказывается в старшем разряде регистра. Регистр программно доступен процессору для чтения по адресам C00x. При обращении к адресам C01x схемой сброса формируется сигнал Reset, который обнуляет весь регистр одновременно.

Либо Мымрин что-то недопонял в схеме или он описал раннюю версию - неизвестно, но по факту в семёрке было сделано всё немного сложнее. Там схема похожа на Мымринское описание, но добавлен ещё один регистр, который параллельно (не сдвигом!) забирает данные из регистра приёма и отдаёт их процессору. Разница в том, что Мымрин явно подчёркивал, что важно дождаться, когда в C00x старший разряд станет равным 1, т.к. в противном случае можно считать ещё недополученный байт данных. А в реальности семёрка выставляет процессору второй регистр, который содержит либо ноль либо полный (!) код клавиши. Но "рекомендуемая" программная модель от этого не меняется: драйвер должен дождаться, когда в регистре старший бит станет = 1 и после этого читать данные.

В девятке схему изменили, там почему-то старший разряд, читаемый процессором, выдаётся обычным R-S триггером. Этот триггер перебрасывается в 1 по факту получения данных от клавиатуры и сбрасывается по стробу C01x. Но важно то, что в девятке строб C01x сбрасывает именно этот триггер, но не регистры! Получается, что после того, как драйвер обратился к C01x , в регистре C00x сохраняется код нажатой клавиши, а не заменяется на ноль. Но в инструкции на девятку это не отражено. Там рекомендуемая схема опроса клавиатуры оставлена прежней. Так вот автор этой игрушки, видимо просто решил воспользоваться этим сохранённым кодом. Он делает так: он ждёт установки старшего бита в C00x, потом делает сброс C01x , а потом читает C00x, надеясь там увидеть код клавиши. В девятке он его и получит (со сброшенным старшим битом), а на семёрке он получает просто постоянный ноль.

Т.е. девяточная схема полностью согласуется с неизменными рекомендациями по конструированию драйверов, но в реализации своей отличается от семёрочной. И автор проги специально или случайно это использовал.

* * *

Использование материалов проекта agatcomp без получения предварительного письменного разрешения agatcomp запрещено.


Почта для обратной связи: mail@agatcomp.ru


Живое общение по теме Агата: Telegram группа Agatcomp.


Накопленные знания и проекты: тематический ФОРУМ.


© 2004-2024 agatcomp.su / agatcomp.ru

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