А кто писал игры\системный софт для БК0010
как там были организованы прерывания\освежение экрана?
интересует как обычно синхронизировались игры для получения стабильной скорости?
А кто писал игры\системный софт для БК0010
как там были организованы прерывания\освежение экрана?
интересует как обычно синхронизировались игры для получения стабильной скорости?
С уважением,
Jerri / Red Triangle.
С любовью к вам, Yandex.Direct
Размещение рекламы на форуме способствует его дальнейшему развитию
цитирую бкашного программера из ATLANTIS (PRS):
"вопрос, кст, дурацкий. никто не задумывался над синхронизацией скорости. какой проц, так и бегало. и причем тут вообще обновление экрана тоже не пойму. видимо чел далек от структуры БК."
Лично от меня - этот человек на форуме зарегиться не может, поэтому уточни вопрос, я его переспрошу.
Последний раз редактировалось mbojenov; 25.11.2009 в 13:00. Причина: добавки
ZX Evolution
Естественно далек, все общение с БК ограничивалось играми в компьютерном клубе, хотя первая игрушка моя была именно на БК на бейсике написанная.
вопрос стоит в чем: берем любую игру
если просто перерисовывать персонажей не забивая голову
синхронизацией скорости то скорость игры при наличии 1 персонажа и 10 персонажей на экране будет серьезно отличаться, что серьезно сказывается на играбельности
на Спеке в есть комманда HALT и маскируемое прерывание выполняемое с одной и той же частотой 50 раз в секунду
есть ли на БК0010 идентичные способы определения во времени? или у там нельзя определить что луч сейчас пошел на новый круг?
С уважением,
Jerri / Red Triangle.
Насколько я знаю, там есть таймер, не зависящий от скорости процессора -- порты 177706, 177710, 177712.
См. например http://pdp-11.ru/mybk/textbk/FL11M.TXT
Но для меня остаётся загадкой как можно узнать о начале/завершении обновления экрана -- подозреваю что никак.
---------- Post added at 14:45 ---------- Previous post was at 14:43 ----------
Да, коммент конечно крайне познавательный. И полный уважения к тому же.
Насколько я помню, в 0010 таймера не было, был лишь в 0011М, и экраны переключать можно было лишь в 0011М. Поэтому в играх было видно перерисовывание спрайтов. В последних программах для 11М графика уже была плавная, за счет нескольких видео буферов.
Задержки по времени делали через пустые циклы.
---------- Post added at 13:48 ---------- Previous post was at 13:48 ----------
Насколько я помню, в 0010 таймера не было, был лишь в 0011М, и экраны переключать можно было лишь в 0011М. Поэтому в играх было видно перерисовывание спрайтов. В последних программах для 11М графика уже была плавная, за счет нескольких видео буферов.
Задержки по времени делали через пустые циклы.
Вот тут статейка: http://bk0010.moy.su/publ/20-1-0-25 -- из которой можно предположить что таймер в БК-0010(01) был, но не был документирован, соответственно им и не пользовались. Может кто-либо подтведить/опровергнуть?
---------- Post added at 15:51 ---------- Previous post was at 15:48 ----------
Тогда по всей вероятности, таймер должен работать с разной частотой в БК-0010 и БК-0011 -- из-за разной частоты процессора (3 и 4 МГц)?
Похоже, я нашёл этому подтверждение.
Цитата из Донского:
Считаем.Г. Работа с таймером
Подробное описние таймера (счетчика времени) БК с интересными
примерами приводится в [6] и [12]. Здесь лишь приведем простейший
пример работы с ним и порекомендуем читателю поэкспериментировать, так
как в БК разных заводов таймер может работать по-разному. Посмотрите,
что получится, если вместо &O160 записать 0, &O20, &O60, &O120 и как
зависит период Т от начального значения S0 (рис.10):
10 POKE &O177706,32767% 'установка длительности периода S0
20 POKE &O177712,&O160 'запуск таймера
30 ? AT(0,0)PEEK(&O177710) 'смотрим, как он работает
40 GOTO 30
Рис.10. Иллюстрация работы таймера.
Таймер работает независимо от работы программы. Содержимое счетчика
времени определяется как результат функции PEEK(&O177710) и
периодически уменьшается от S0 до 0 (рис.10).
В приведенном примере при S0=32767 период счетчика Т=89,657 с [6].
89,657 сек / 32767 = 2,7362 мс на тик таймера, с учётом делителей на 16 и 4 получаем 2736,2 / 16 / 4 = 42,75 мкс на наименьший тик таймера.
Частота процессора 3 МГц, это 0,333 мкс на такт, умножаем на 128, получаем 42,67 мкс -- довольно близко, можем считать что сходится.
Теперь смотрим тут: http://pdp-11.ru/mybk/textbk/FL11M.TXT
5. СИСТЕМНЫЙ ТАЙМЕР
ТАЙМЕР СОСТОИТ:
A. генератор с периодом 32 мкс (т.к. тактовая частота процессора
В. делители на 4 и 16 БК-11 и БК-11М составляет 4 MHz, а
C. реверсивный счетчик (177710) не 5 MHz, kak написано в литературе)
D. регистр установки (177706)
E. регистр команд и состояний (177712)
* ДЛЯ СПРАВКИ: тактовая частота, поступающая на процессор, делится на
128. , а потом поступает на таймер
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)