** Сайт посвящённый ПЭВМ АГАТ **
Скачать архив с диском. АГАТ-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, надеясь там увидеть код клавиши. В девятке он его и получит (со сброшенным старшим битом), а на семёрке он получает просто постоянный ноль.
Т.е. девяточная схема полностью согласуется с неизменными рекомендациями по конструированию драйверов, но в реализации своей отличается от семёрочной. И автор проги специально или случайно это использовал.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *