Кто там чего поселил? Госпаде... Не было никакого заговора, никто целеноправлено не разваливал СССР. Экономически он естественным путем дошел до ручки.
Но вы почему-то сравниваете какие-то "действия со стороны народа" с сегодняшними реалиями. Начнем с того, что и тогда в РСФСР не было никаких "действий народа". Это народ в республиках (начиная с Прибалтики) решил выйти из состава СССР.
Очереди и дефицит был постоянным явлением в СССР, а не "начинался" в каком-то там году. Просто в одном регионе за маслом стояли в одни годы, за молоком в другие, а в другом регионе наоборот... Но кризис и дефицит то на одни товары, то на другие - был нормой жизни. В одном городе велосипеды "Салют" в "спорттоварах" стояли свободно, в другом городе их приходилось за взятку со склада покупать в моменты их завоза (партией в 50 штук на весь город).
Где-то люди БК и Агат видали в магазинах, но не могли купить нормальную фотопленку и проявитель. Где-то пепси-колу пили в любое время, а где-то лимонад "колокольчик" бы не постоянным гостем прилавков.
А уж отличия в снабжении каких-нибудь закрытых "академ-городков" и Москвы с остальными средне-статистическими регионами - вообще космические. Я уж не говорю о социальном разделении на парт-номенклатуру(и управленцев) и остальных трудящихся.
Что-то подобное VFX-1 я в принципе видел в 90-х, но играть в нем не доводилось. Говорят - играть в них было не очень приятно, вестибулярка выходила покурить.
Признаю, был не прав. Как минимум в DosBox-X "Gobliiins" на 8086 запускается. VGA конечно да, с обязательностью я тоже погорячился, просто я как поклонник данной серии игр не представляю себе гоблинов на CGA, EGA, это кощунство :)
Да, но те реализации что работали на XT-шке выглядели как гавно. По сравнению с тем что было на тех же аркадных автоматах, а позже на приставках и Амиге.
Я в курсе. Хотя например Gobliiins и Gods это порты с Амиги и вышли в 91-92 годах, требуют VGA-адаптер, и что-то очень сомнительно, что будут на XT-шке работать. Ну и уж точно там юзается и таймер и прерывания (в Gods апаратный скроллинг, в Gobliiins звуковое сопровождение очень продвинутое.
PS: погуглил, Gods требует минимум 286-го, Gobliiins минимум 386-й. Так ша не морочьте мне голову.
"лишь на 286" - ну до 286-го то что было на PC и играми сложно назвать. На 286-м что-то както шевелиться начало, но все еще по сравнению с приставками и Амигой - это все был шлак.
Хотя, сейчас есть энтузиасты, которые и для XT-шки делают прикольные движки https://www.youtube.com/watch?v=nsXIA7VIqXM (исходники доступны, можете ознакомится, посмотреть - зачем и как используются прервывания :) )
Это если ваш цикл работает с достаточной скоростью и эта скорость никак не меняется. Вообще так никто не делал. Это и неудобно и неправильно. Прерывания для того и существуют, чтобы распараллелить процессы, и звук и ввод с клавиатуры никак не зависели от текущей позиции выполнения кода в основном цикле. Вы там можете хоть все на паузу поставить, но это не повредит плееру и обработки клавиатуры (мыши, или джойстика). Ну а тем более в старых играх... И на старых IBM PC. Там рендер-цикл ваще никогда 60 фпс не выдавал. Графика очень медленная была. Отрисовка очередного кадра могла быть и 10 фпс, и 5 фпс.
По вашей схеме можно делать игры аля "Поле чудес", или "Балда", или какой-нибудь пасьянс, "шарики", "Перестройка". Даже какой-нибудь квест, вроде первых версий Space Quest и Larry. Но что-то более аркадное и технологичное, вроде Dangerous Dave, Prince of Persia или Commander Keen так не создать. Уже не говоря о чем-то вроде Алладина, Zool, Червяка Джима, Golden Axe, Jazz JackRabbit, Prehistorik 2, Realms of Chaos и прочем.
Ммм, а зачем нам нужно прерывание? Как раз наоборот, мы запрещаем прерывания
Берем прерывание таймера, вешаем туда обработчик типа timer=timer+1, и вот у вас счетчик милисекунд, и можете делать хоть делэй правильный, хоть считать скорость рендера кадров, чтобы правильно инкременировать переменную анимации. И это позволит вашей игре работать правильно и на быстрых компьютерах, и на медленных.
Если вы запретите прерывания (даже на время вашего delay) станет невозможно озвучить игру фоновой музыкой и управление станет плохо-отзывчатым.
То, про что вы пишете, это стало актуальным где-то во времена второго Дума.
Во времена второго Дума уже Пентиумы и Виндовс вышли. Нет, все было актуально раньше :) Кармак написал Commander Keen в 1990-м, и там уже все было как надо. Хотя полно и более ранних игр, где все синхронизировано правильно и надежно :)
Ну как... Если железо тянет 30 фпс, то игра все еще вполне гладко выглядит. Просто надо шаг анимации (движения камеры, и т.д.) умножить на количество пропущенных кадров, или прокрутить логику анимации/физики n-раз (в самом упрощенном случае. Есть, конечно, более продвинутые формулы). То есть компенсировать число пропущенных кадров.
Так делается в любых играх. Кто с этим неумеет работать? Не представляю.
Можно и без прерывания, главное чтобы сам таймер был.
Без прерывания как? Аппаратный скроллинг экрана нужно инициировать только в момент обратного хода луча. Иначе будут дёргания экрана. При этом компьютер может и не успевать выполнить рендер-цикл за 1/60 секунды.
Также, если у нас (в DOS-игре) есть звук, музыка - как это должно работать без прерываний? Как в некоторых поделках , где все замирает в момент, когда из PC Speaker'a раздаются звуки? :)
Это сработает если рендер работает со скоростью вертикальной развертки или быстрее. Что будет когда рендер делает только 30 фпс? Делэй очевидно в этом случае не происходит, и не нужен. Но у вас все будет двигаться в два раза медленее.
Что касается старого железа и старых игр под DOS. Вы играли когда-нибудь в Jazz Jackrabbit, или в Zool? Ну или в подобные платформеры с плавной прокруткой экрана? Так используется аппаратный скроллинг. Чтобы он работал, нужно 60 раз в секунду (или 70, зависит от видео-режима) дергать порты видеокарты. При этом спрайты в игре могут и не обновлятся/двигаться с такой же частотой. Реализуется это через прерывание, которое срабатывает 60 раз в секунду, выполняя вашу определенную процедуру. При этом рендер цикл может и не успевать обновляться, скроллинг экрана будет всеравно гладким.
Ну допустим вы откалибровали delay и он задает более менее одинаковую паузу на железе с разной производительностью. Но рендер кадра ведь в разной ситуации может происходить с разной скоростью. И конечно на разных компьютерах кадр будет рендерится за разной время. В итоге и получается, что на 286-м игра работает с задуманной авторами скоростью, а уже на 386-м начинает летать в 2 раза быстрее. А на XT-шке наоборот будет все трагически медленно.
Вы же понимаете для чего нам таймер и как с его помощью сделать скорость движения объектов одинаковой на компьютерах с совершенно разной производительностью?
Интересное решение, но документацию тут вообще не найти.
Да совершенно традиционная штука. Какая документация вам нужна? Вот традиционный код ожидания начала обратного хода вертикальной развертки:
mov dx, 3DAh
@w1:
in al, dx
test al, 8h
jnz @w1
@w2:
in al, dx
test al, 8h
jz @w2
Ну вот с таким опытом программирования люди и писали на PC игрушки, незная ничего о таймере, которые в итоге на более быстрых процессорах начинали работать ненормально быстро :)
И одно дело написать игру аля Alley cat, а другое дело - действительно что-то сложное и которая будет нормально работать на разном железе. Поэтому старые игры Кармака работают хоть на 286-м, хоть на Пентиуме, не требуя замедления. Кармак знал как программировать таймер :)
Чтобы пользоваться хотя бы нулевым с каким-то иным разрешением, нежели 18.2мс, нужно было, чтобы ваша софтинка сама контролировала системное время.
Не вижу проблемы. Системное время не надо контролировать, просто вешаем свой обработчик на вектор 8 (сохранив старый) и из своего обработкичка вызываем старый через нужные промежутки тиков.
Если бы я сам не программировал таймер, я бы не спорил. А вы спорите со мной по вещам, которые я делал буквально вчера (чекайте мои статьи).
И как вы думаете в DOS работают музыкальные плееры Adlib (OPL2), в том числе в играх, у которого в отличии от Sound Blaster нет своего прерывания? Ессесно на таймер вешается.
Пытаться измерить производительность и на этой основе выставлять временные коэфициенты - это полная хрень. Нам ведь нужно прерывание, а не просто delay(). А просто "делэй" можно сделать ожиданием обратного хода луча развертки, поскольку частота развертки у конкретных видеорежимов была одинаковая на всех компьютерах. Но это полумера.
Кто там чего поселил? Госпаде... Не было никакого заговора, никто целеноправлено не разваливал СССР. Экономически он естественным путем дошел до ручки.
Но вы почему-то сравниваете какие-то "действия со стороны народа" с сегодняшними реалиями. Начнем с того, что и тогда в РСФСР не было никаких "действий народа". Это народ в республиках (начиная с Прибалтики) решил выйти из состава СССР.
Срослось так себе
Очереди и дефицит был постоянным явлением в СССР, а не "начинался" в каком-то там году. Просто в одном регионе за маслом стояли в одни годы, за молоком в другие, а в другом регионе наоборот... Но кризис и дефицит то на одни товары, то на другие - был нормой жизни. В одном городе велосипеды "Салют" в "спорттоварах" стояли свободно, в другом городе их приходилось за взятку со склада покупать в моменты их завоза (партией в 50 штук на весь город).
Где-то люди БК и Агат видали в магазинах, но не могли купить нормальную фотопленку и проявитель. Где-то пепси-колу пили в любое время, а где-то лимонад "колокольчик" бы не постоянным гостем прилавков.
А уж отличия в снабжении каких-нибудь закрытых "академ-городков" и Москвы с остальными средне-статистическими регионами - вообще космические. Я уж не говорю о социальном разделении на парт-номенклатуру(и управленцев) и остальных трудящихся.
Что-то подобное VFX-1 я в принципе видел в 90-х, но играть в нем не доводилось. Говорят - играть в них было не очень приятно, вестибулярка выходила покурить.
Признаю, был не прав. Как минимум в DosBox-X "Gobliiins" на 8086 запускается. VGA конечно да, с обязательностью я тоже погорячился, просто я как поклонник данной серии игр не представляю себе гоблинов на CGA, EGA, это кощунство :)
Да, но те реализации что работали на XT-шке выглядели как гавно. По сравнению с тем что было на тех же аркадных автоматах, а позже на приставках и Амиге.
Я в курсе. Хотя например Gobliiins и Gods это порты с Амиги и вышли в 91-92 годах, требуют VGA-адаптер, и что-то очень сомнительно, что будут на XT-шке работать. Ну и уж точно там юзается и таймер и прерывания (в Gods апаратный скроллинг, в Gobliiins звуковое сопровождение очень продвинутое.
PS: погуглил, Gods требует минимум 286-го, Gobliiins минимум 386-й. Так ша не морочьте мне голову.
Это не значит что при портировании на другие платформы все также и осталось. В дизасемблированных сорцах ДОС-порта таймер используется.
"лишь на 286" - ну до 286-го то что было на PC и играми сложно назвать. На 286-м что-то както шевелиться начало, но все еще по сравнению с приставками и Амигой - это все был шлак.
Хотя, сейчас есть энтузиасты, которые и для XT-шки делают прикольные движки https://www.youtube.com/watch?v=nsXIA7VIqXM (исходники доступны, можете ознакомится, посмотреть - зачем и как используются прервывания :) )
Это если ваш цикл работает с достаточной скоростью и эта скорость никак не меняется. Вообще так никто не делал. Это и неудобно и неправильно. Прерывания для того и существуют, чтобы распараллелить процессы, и звук и ввод с клавиатуры никак не зависели от текущей позиции выполнения кода в основном цикле. Вы там можете хоть все на паузу поставить, но это не повредит плееру и обработки клавиатуры (мыши, или джойстика).
Ну а тем более в старых играх... И на старых IBM PC. Там рендер-цикл ваще никогда 60 фпс не выдавал. Графика очень медленная была. Отрисовка очередного кадра могла быть и 10 фпс, и 5 фпс.
По вашей схеме можно делать игры аля "Поле чудес", или "Балда", или какой-нибудь пасьянс, "шарики", "Перестройка". Даже какой-нибудь квест, вроде первых версий Space Quest и Larry. Но что-то более аркадное и технологичное, вроде Dangerous Dave, Prince of Persia или Commander Keen так не создать. Уже не говоря о чем-то вроде Алладина, Zool, Червяка Джима, Golden Axe, Jazz JackRabbit, Prehistorik 2, Realms of Chaos и прочем.
В ДОС тоже можно получить 1 мс таймер. Просто готовой API не было.
Берем прерывание таймера, вешаем туда обработчик типа timer=timer+1, и вот у вас счетчик милисекунд, и можете делать хоть делэй правильный, хоть считать скорость рендера кадров, чтобы правильно инкременировать переменную анимации. И это позволит вашей игре работать правильно и на быстрых компьютерах, и на медленных.
Если вы запретите прерывания (даже на время вашего delay) станет невозможно озвучить игру фоновой музыкой и управление станет плохо-отзывчатым.
Во времена второго Дума уже Пентиумы и Виндовс вышли. Нет, все было актуально раньше :) Кармак написал Commander Keen в 1990-м, и там уже все было как надо. Хотя полно и более ранних игр, где все синхронизировано правильно и надежно :)
Ну а я могу :) И проверял.
На глаз сильно отличается. Скролл с 60 фпс намного приятнее :)
Ясно... Вопросов больше нет )
Ну как... Если железо тянет 30 фпс, то игра все еще вполне гладко выглядит. Просто надо шаг анимации (движения камеры, и т.д.) умножить на количество пропущенных кадров, или прокрутить логику анимации/физики n-раз (в самом упрощенном случае. Есть, конечно, более продвинутые формулы). То есть компенсировать число пропущенных кадров.
Так делается в любых играх. Кто с этим неумеет работать? Не представляю.
Без прерывания как? Аппаратный скроллинг экрана нужно инициировать только в момент обратного хода луча. Иначе будут дёргания экрана. При этом компьютер может и не успевать выполнить рендер-цикл за 1/60 секунды.
Также, если у нас (в DOS-игре) есть звук, музыка - как это должно работать без прерываний? Как в некоторых поделках , где все замирает в момент, когда из PC Speaker'a раздаются звуки? :)
Это сработает если рендер работает со скоростью вертикальной развертки или быстрее. Что будет когда рендер делает только 30 фпс? Делэй очевидно в этом случае не происходит, и не нужен. Но у вас все будет двигаться в два раза медленее.
Что касается старого железа и старых игр под DOS. Вы играли когда-нибудь в Jazz Jackrabbit, или в Zool? Ну или в подобные платформеры с плавной прокруткой экрана?
Так используется аппаратный скроллинг. Чтобы он работал, нужно 60 раз в секунду (или 70, зависит от видео-режима) дергать порты видеокарты. При этом спрайты в игре могут и не обновлятся/двигаться с такой же частотой. Реализуется это через прерывание, которое срабатывает 60 раз в секунду, выполняя вашу определенную процедуру. При этом рендер цикл может и не успевать обновляться, скроллинг экрана будет всеравно гладким.
Ну допустим вы откалибровали delay и он задает более менее одинаковую паузу на железе с разной производительностью.
Но рендер кадра ведь в разной ситуации может происходить с разной скоростью. И конечно на разных компьютерах кадр будет рендерится за разной время. В итоге и получается, что на 286-м игра работает с задуманной авторами скоростью, а уже на 386-м начинает летать в 2 раза быстрее. А на XT-шке наоборот будет все трагически медленно.
Вы же понимаете для чего нам таймер и как с его помощью сделать скорость движения объектов одинаковой на компьютерах с совершенно разной производительностью?
Да совершенно традиционная штука. Какая документация вам нужна? Вот традиционный код ожидания начала обратного хода вертикальной развертки:
Ну вот с таким опытом программирования люди и писали на PC игрушки, незная ничего о таймере, которые в итоге на более быстрых процессорах начинали работать ненормально быстро :)
И одно дело написать игру аля Alley cat, а другое дело - действительно что-то сложное и которая будет нормально работать на разном железе. Поэтому старые игры Кармака работают хоть на 286-м, хоть на Пентиуме, не требуя замедления. Кармак знал как программировать таймер :)
Почему "самого первого"? Игры, например, далеко не сразу на IBM PC появились. И уж в 80-х годах вполне себе были стандарты.
Как вы вообще представляете себе работу анимации в играх без использования таймера? Как создать музыкальное сопровождение?
Вы программировали мультимедиа под DOS?
Скорость таймера программируется. Программа может любое разрешение поставить, 1/100 секунды, или 1/1000.
И нормальные игры и программы использовали таймер, так что работают прекрасно даже на современных компьютерах.
Не вижу проблемы. Системное время не надо контролировать, просто вешаем свой обработчик на вектор 8 (сохранив старый) и из своего обработкичка вызываем старый через нужные промежутки тиков.
Вкратце:
Скрытый текст
Если бы я сам не программировал таймер, я бы не спорил. А вы спорите со мной по вещам, которые я делал буквально вчера (чекайте мои статьи).
И как вы думаете в DOS работают музыкальные плееры Adlib (OPL2), в том числе в играх, у которого в отличии от Sound Blaster нет своего прерывания? Ессесно на таймер вешается.
Пытаться измерить производительность и на этой основе выставлять временные коэфициенты - это полная хрень. Нам ведь нужно прерывание, а не просто delay(). А просто "делэй" можно сделать ожиданием обратного хода луча развертки, поскольку частота развертки у конкретных видеорежимов была одинаковая на всех компьютерах. Но это полумера.