90% населения никогда не видели тех ништяков, которые закупались за валюту.
100% видели. "Пирамидки" молока, например (линии тетрапак, картон тоже закупался), Советское "Пепси" (заводы закуплены у ФРГ, сырье закупалось). Но это то что на поверхности лежит. А если копнуть, то... Каждый вечер советские граждане смотрели ТВ, а в телестудиях "Останкино" стояло французское теле-оборудование (видео-магнитофоны, монтажные пульты, телекамеры - все в основном было западным). Так что получается вы каждый вечер видели "ништяки" закупленные за валюту :)
А так-то.... Практически любые конвеерно-производственные линии и технологические процессы были закуплены у запада (за валюту), начиная от производства туалетной бумаги и разливом кефира с крышечными из фольги, заканчивая автомобилями "Жигули", "Москвич", "Камаз".
а на что КНДР-то разваливаться должен? СССР состоял из республик, которые и отделились. Это называется развал. А РСФСР как был, так и остался, только называется РФ. Поэтому не понятно, причем тут КНДР?
Вы вероятно про развал государственно-политического строя говорите? В КНДР диктатура Кимов поддерживалась СССР, когда Союз гикнулся, то КНДР тоже чуть не крякнула, но её поддержал Китай, и до сих пор поддерживает, в геополитических интересах.
Кто там чего поселил? Госпаде... Не было никакого заговора, никто целеноправлено не разваливал СССР. Экономически он естественным путем дошел до ручки.
Но вы почему-то сравниваете какие-то "действия со стороны народа" с сегодняшними реалиями. Начнем с того, что и тогда в РСФСР не было никаких "действий народа". Это народ в республиках (начиная с Прибалтики) решил выйти из состава СССР.
Очереди и дефицит был постоянным явлением в СССР, а не "начинался" в каком-то там году. Просто в одном регионе за маслом стояли в одни годы, за молоком в другие, а в другом регионе наоборот... Но кризис и дефицит то на одни товары, то на другие - был нормой жизни. В одном городе велосипеды "Салют" в "спорттоварах" стояли свободно, в другом городе их приходилось за взятку со склада покупать в моменты их завоза (партией в 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-м, хоть на Пентиуме, не требуя замедления. Кармак знал как программировать таймер :)
100% видели. "Пирамидки" молока, например (линии тетрапак, картон тоже закупался), Советское "Пепси" (заводы закуплены у ФРГ, сырье закупалось). Но это то что на поверхности лежит. А если копнуть, то... Каждый вечер советские граждане смотрели ТВ, а в телестудиях "Останкино" стояло французское теле-оборудование (видео-магнитофоны, монтажные пульты, телекамеры - все в основном было западным). Так что получается вы каждый вечер видели "ништяки" закупленные за валюту :)
А так-то.... Практически любые конвеерно-производственные линии и технологические процессы были закуплены у запада (за валюту), начиная от производства туалетной бумаги и разливом кефира с крышечными из фольги, заканчивая автомобилями "Жигули", "Москвич", "Камаз".
а на что КНДР-то разваливаться должен? СССР состоял из республик, которые и отделились. Это называется развал. А РСФСР как был, так и остался, только называется РФ. Поэтому не понятно, причем тут КНДР?
Вы вероятно про развал государственно-политического строя говорите? В КНДР диктатура Кимов поддерживалась СССР, когда Союз гикнулся, то КНДР тоже чуть не крякнула, но её поддержал Китай, и до сих пор поддерживает, в геополитических интересах.
Кто там чего поселил? Госпаде... Не было никакого заговора, никто целеноправлено не разваливал СССР. Экономически он естественным путем дошел до ручки.
Но вы почему-то сравниваете какие-то "действия со стороны народа" с сегодняшними реалиями. Начнем с того, что и тогда в РСФСР не было никаких "действий народа". Это народ в республиках (начиная с Прибалтики) решил выйти из состава СССР.
Срослось так себе
Очереди и дефицит был постоянным явлением в СССР, а не "начинался" в каком-то там году. Просто в одном регионе за маслом стояли в одни годы, за молоком в другие, а в другом регионе наоборот... Но кризис и дефицит то на одни товары, то на другие - был нормой жизни. В одном городе велосипеды "Салют" в "спорттоварах" стояли свободно, в другом городе их приходилось за взятку со склада покупать в моменты их завоза (партией в 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?