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