Как стать автором
Обновить

Величайшие программисты 21 века. Джон-Движок Кармак

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров50K
Всего голосов 84: ↑80 и ↓4+110
Комментарии63

Комментарии 63

В свое время понравилось, как он решал проблемы создания очков виртуальной реальности, и возмущался, что мы можем получать сигнал с другого устройства на другой точке земного шара быстрее, чем передать этот сигнал через метровый кабель от самого устройства до телевизора.

И, что интересно, революции в этом так и не произошло, и все эти 240 герц это не сколько про отклик сколько про плавность

Квест принес людям доступный и хорошо работающий беспроводной PCVR, что, если вдуматься (в сильно повышенные требования к отклику) - очень круто. Я лично теперь никакой проводной VR шлем даже в перспективе не рассматриваю.

На слабеньких 486SX, без видеокарт (!)

Это не так. Видеоадаптеры тогда существовали именно как карты расширения, их единственное отличие от видеокарт - отсутствие специализированного сопроцессора (GPU). Но своя собственная память и регистры управления у них были уже тогда, и эффективная работа со всем этим требовала особых умений и квалификации ничуть не меньше, чем сейчас.

отказ от музыки в пользу окружающих шумов (идея Кармака)

В Doom не было музыки? А мужики-то и не знают. Даже в первом Quake она ещё была.

И во втором, и в третьем

кстати из-за пиратства многие действительно не знали, что в квейках была музыка))

причем огненная музыка =) До сих пор с первыми моментами quake 2 сразу вспоминаются гитарные рифы саундтрека!

Видеокарты это был кусок памяти(frame buffer) либо просто линейный, либо с переключением банков (если совсем древние). Единственная задача была перегнать туда данные. Настройка режима и других параметров обычно производилась через прерывания VESA биоса. Самое сложное по скорости это был 3д растеризатор реализованный на cpu.

И тем не менее, видеокарты (!) были. Не было 3D-ускорителей для PC.

Ну, не так всё просто. На том же 486SX и ISAшной Trident 9000 DOOM у меня бегал в окне 50% от исходного, иначе это было слайдшоу. А на PCIной S3 Trio всё просто летало в фуллскрине.

Тут скорее проблемы с шиной, у ISA были жалкие 16 бит на 8 МГц, а у PCI уже 32х33

Зависит от шины и скорости памяти, s3 trio умело в плоский буфер в 32 битном режиме, было pci и относительно быстрая память. Trident висела на isa и доступ к памяти фреймбуфера был bank switched.

PS: у меня как раз были такая же эволюция железок в конце 90х 486/Trident, Pentium/S3 Trio, и я писал для них крутящиеся кубики, когда временами прогуливал школу.

Какое отношение плоский буфер, и bank-switch имеют к Doom, который работал в 13 -о режиме, который 320х200 и занимал чуть меньше одного сегмента памяти?

Это было про большие разрешения и Quake в частности. По поводу DOOM он работал в 32 битном режиме. Сегментация и bank switch ортогональные концепции, можно было иметь плоскую память в 32 битном защищенном режиме, но видюха все равно была bank-switched. В случаи 320x200 фрэймбуфер умещался в один сегмент/банк.

Запускать Quake на ISA карте - это надо было быть большим любителем боли :)

Для любителей слайд-шоу и пошаговых стратегий норм

в первой кваке музыка была записана на диск как audioCD и плеилась как в обычном CD проигрывателе, минуя цпу. собственно многие потом в музыкальных центрах и слушали саундтрек к игре.

НЛО прилетело и опубликовало эту надпись здесь

Нет, это эмоциональная стабильность и отсутствие выброса стрессового микса в кровь из-за проблем, от которых ты не помрешь и от которых не нужно прямо сейчас бежать по саванне с копьем. Это и вызывает основную усталость и потом выгорание. Умеешь с этим работать - всё прекрасно в твоей жизни, ты эффективен.

НЛО прилетело и опубликовало эту надпись здесь

Поможет. Чтобы не триггериться на ерунду и делать действительно важные вещи, чтобы высыпаться.

Красивый комп у Кармака. Очень стильно.

На слабеньких 486SX, без видеокарт (!) они выдали настоящий 3D-шутер без лагов

Doom успешно бегал на 386DX с 4 мегами оперативки. Это были минимальные требования. Ну а Wolf 3D и на 286-х шел с 640 кБ оперативки. 486-й (даже SX) - это уже роскошь.

Ооооо... 386й и 4метра памяти! У меня первый дум "бегал" только если уменьшить экран на 1 шаг, иначе тормозил.

В статье восклицательный знак не там. Я бы его поставил 486SX(!) - вот так. Потому что 486SX бомжеватая версия нормального 486, без FPU. Молодому поколению может диким показаться что процессор может не иметь модуля по работе с плавающей точкой - FPU (float point unit). Потому, что начиная с пентиума эта всегда часть CPU.

486SX были сравнимы по цене 386DX. И где-то DX и клал на лопатки, за счет наличия FPU. А бывало, что-то даже не запускалось, или запускалось с просадкой по производительности за счет софтовой эмуляции этих самы float point вычислений. Не могу привести пример, у меня был доступ к 486sx в старших классах школы, очень давно, году так 93-94.

Процессор с плавающей точкой - это была роскошь, не везде доступная. В конце 80-х на болгарских СМ-4 (аналог PDP-11, чего уж тут) стоял FIS (Floating Instruction Set) с 4-мя командами (FMUL, FDIV, FADD и FSUB, если не забыл). А на пришедших к нам ГэДээРовских машинах, тоже на базе PDP-11 (операционка MOOS-1600), на которых стояли дисплейные процессоры нашей разработки, присутствовал аж целый FPP (Floating Point Processor) с множеством команд, включая тригонометрию. Но команд FIS там не было!

А тут к нам завезли ленту DECUS (кто знает, тот поймёт), где была и компьютерная игра EMPIRE. Она была собрана для FIS. Исходников не было, почему-то. И на машинах с FPP она не шла (invalid processor instruction execution), хоть ты убейся.

Пришлось привлечь знание операционной системы. В бинарном образе игры были найдены адреса (они были достаточно стандартные, где-то в начале секции кода), отвечающие за прерывание по выполнению неверной команды. Также, стек для задач MOOS 1600 (она же ОС РВ, она же RSX-11) выделялся при сборке и находился в самом начале образа задачи. В верхних адресах стека была размещена мини-программа на ассемблере, преобразующая вызовы FIS в вызовы FPP, возвращающая результат в нужном формате float 32 бита. И адрес прерывания по неверной команде был перенаправлен на эту подпрограмму!

Стек был выделен с запасом и до кода внедрённой подпрограммы никогда не доходил.
И модифицированная программа заработала и на болгарских и на немецких машинах)))

P.S. Были ещё приключения по переводу бинарных образов программ с VT52 на VT100, но это уже другая история. Не для Кармака :o)

На БК0010(01)/11/11M - на базе PDP-11 - не было целочисленных mul и div. op-коды были, но аппаратно команды были не реализованы. Даже сдвиг битовый был только одинарным: asl r0 - сдвинуть на один бит влево и вся роскошь. Чего уж тут говорить о Floating Point.

Всё верно. MUL и DIV - это тоже были дополнительные команды. Входящие в состав EIS (Extended Instruction Set).
А БК, будучи микрокомпьютером, поддерживал только базовый набор команд, от самых первых PDP-11 моделей.
На машинах 80-х такого не застал, там уж был везде какой-то, да процессор с плавающей запятой и EIS.
Но следы эпохи до EIS ещё виднелись в инсталляторе. В исходниках, а ОС поставлялась в исходниках и компилировалась под каждую конкретную машину,
была условная компиляция для машин до EIS, где MUL и DIV эмулировались подпрограммами, реализованными простыми командами, наподобие упомянутых Вами ASR и ASL в т.ч. Помню, что это были очень короткие подпрограммы, 5-10 строк ассемблера, не более.

И сдвиги были принципиально только однобитовые, система команд была простая и красиво построенная, оптимизациями набора команд DEC не занимался принципиально.
И это было правильно, мне кажется. Их набор команд был чем-то средним между RISC и CISC. И был он - приятен и очень внятен.
С ним можно было программировать в кодах! Думаю, что безусловный JMP и сегодня смогу в оперативной памяти составить, после освежения в мозгу :o)
Только восьмеричная система записи чисел иногда мешала, особенно при переходе с байта на байт в 16-битовых словах.

Эх, зря DEC не попробовала свой микропроцессор сделать, совместимый по командам с PDP. Можно было бы UNIX на него поставить, а не убогую MS-DOS!
Но она начала использовать Intel 8086 или 8088(?) в своём "Rainbow" (аналог PC у DEC).
Учитывая огромную популярность PDP и количество наработанного софта, DEC PC составил бы реальную сильнейшую конкуренцию тогдашнему Intel. Тем более, что 32-битовый вариант системы команд у них уже был опробован, на VAXе.
Правда, на стороне Intel выступала тогда IBM с Биллом Гейтсом и Полом Алленом. Это и определило "рыночный выбор", похоже.

У троек DX/SX различается шириной шин, а не наличием или отсутствием fpu как для 486

Открою страшную тайну, 486DX и 486SX внутренне отличались друг от друга только одним маленьким пунктом, заблокированным FPU у SX не прошедшего проверку. А в остальном SX и DX полностью идентичны. Т.е. 486SX были отбраковкой 486DX. Более того, сопроцессор 487SX по факту был полноценным 486DX для другого сокета.

отказ от музыки в пользу окружающих шумов (идея Кармака),

Всё же стоит наверное хотя отдалённо иметь представление о предметах статьи. Музыкальный саундтрек Doom один из самых узнаваемых в истории видеоигр. А окружающие шумы с совершенно другой музыкой были в версии для PS1, разработанной другими людьми, и это было спорное решение, которое той версии до сих пор припоминают.

я зануда, поэтому не люблю когда для несведущих пишутся статьи с заголовками в стиле "Стив Джобс придумал первый компьютер" или "Стив Джобс придумал первый смартфон".

Кармак в вольфе и думе реализовал кучу фишек - это правда, он можно сказать открыл направление игр - FPS, таким, какой он есть до сих пор. Но в 1993 3D шутер не был чем-то особенным, такие игры делали уже 10 лет. Вопрос тут как раз в подаче - до Кармака не было шутера где нужно было стрелять в бегающих фантастических монстров, а так же не было движка, который бы мог в таком виде реализовать это без аппаратных фишек специализированного ускорителя, которые в то время ставились в ПК (тут под ПК я понимаю не IBM PC совместимое, а вообще персоналки тех лет.

Это кстати определило визуальную разницу в играх например на C64 и ZX, первый имел отличный чип для работы с графикой, а последний - нет, поэтому программисты под спектрумы тоже как Кармак превозмогали и писали такое, что иной раз просто поражаешься

Поэтому ничуть не умоляя профессионализма Кармака давайте не будем ему приписывать те вещи, которые он не совершал (Как в описанном ранее о Стиве Джобсе).

Недавно поспорил с Хабром, что это не Стив Джобс изобрёл айфон, но проиграл ? ... Так что пойду спать в спальнике в офисе твиттера под столом, чтобы стать успешным... Ой, или это из другого персонажа? Кстати, о персонажах. На мой взгляд, характерная черта Кармака и других гениальных создателей (не псевдосоздателей) в том, что они способны вот так вот глубоко погружаться в задачу, при этом свободно игнорируя всё остальное. У меня сложилось впечатление, что похожие люди часто очень токсичны, а иногда и просто злы. Но кажется, это не про Кармака, а наоборот создаёт впечатление приятного в общении человека. Или мне кажется?

Но кажется, это не про Кармака, а наоборот создаёт впечатление приятного в общении человека. Или мне кажется?

Это в интервью. В книге "Повелители DOOM" (она заканчивается примерно 2000 годом) пишут, что не очень приятного.

Полное название

Д. Кушнер. Повелители DOOM. Как два парня создали культовый шутер и раскачали индустрию видеоигр.

насколько помню из книги, он как начальник был очень требовательный/строгий. Но начальство редко бывает хорошим)

Кармак отдал свою кошку на усыпление в приют, потому что мешала ему программировать. :)

Так развечиваются кумиры детства)

Болезненная тема для многих, но мои фразы про Джобса несколько иные, всё же iPhone это детище Apple и не важно какая именно роль была у Джобса. Мы же знаем что и Apple I не он спаял, от этого его роль меньше не становится, всё же Возняк в одного Apple не создал бы, другой тип личности.

Другой вопрос в чем конкретно фишка iPhone, так как лично по моим наблюдениям - это доступность для обывателя, всё же смартфоны с 80-х еще были (и по факту позиционировались) как устройства для бизнеса, для активного делового человека, а Джобс предложил балалайку для домохозяек, где котики и подружки. И так как рынок реально выстрелил, то появилась благодатная почва для инноваций, хотя лично я считаю интерфейс с икноками - пережитком нулевых, а тач-скрины - одним из самых неудобных интерфейсов в истории, НО!!!!!! ВАЖНО понимать, что тач даёт ультра-гибкость управления и при отсутствии кривых рук (а пока эта эпоха не наступила) заточенный софт под такое управление.

Касательно Кармака - мне никогда не было интересно у людей, которых я могу оценить как профессионалов чего-либо, узнавать их личные качества. Для меня Кармак-программист и Кармак-личность - два разделяемых объекта. И при интересе к программерским фишкам у меня напрочь отсутствует интерес к его личной жизни и качествам.

Тачскрин - это постоянное разглядывание грязного экрана. Почти мазохизм.

отчасти, но я скорее о том, что нажатие на кнопку, физическую - это механический процесс с фиксацией факта нажатия, а тач - это набор алгоритмов, который пытается на основании вашего профиля работы с устройством предсказывать и интерпретировать ваши касания. У меня нет и не было айфонов, не знаю как там (говорят неплохо), но в андроид устройствах с этим всё очень плохо.

из того что я реально одобряю - это ввод через рисование линий от символа к символу, по буквам я текст не набираю уже очень давно. В механическом исполнении такое невозможно.

WinPhone пытался парадигму сменить, буквально представляя экран как маленькое окошко, которое пользователь двигает по большому плакату с разными данными. Не оценили.

с помощью Square Home я сделал почти такое же на андроиде, но все равно это не то. Вообще UI на современных системах, особенно в вэб исполнении если что-то универсальное - это такой вырвиглаз. Особенно доставляют пустые белые квадраты где чтобы что-то ввести нужно ткнуть в экран и попасть в поле для ввода, визуально оно никак не отличается от самой формы, а так же исчезающие или вовсе непоказывающиеся полоски скролла.

Совмещение телефона с постоянно носимым информационным терминалом - уже разглядывание грязного экрана: не ладонью, так ухом...

Но вот принять это и целенаправленно поработать с проблемой, добавив олеофобное покрытие, до Apple никто не удосужился.

Ну справедливости ради экраны не были никогда особо заляпанными, они были матовые в основном и без стекла. При этом встретить старый КПК с разбитым экраном было весьма трудно, а сегодня это — норма. Разница именно в том кто этими устройствами пользуется. Олеофобность покрытия нивелируется необходимостью клеить защитное стекло, а без такого стекла можно огрести проблем. Я телефоны не роняю почти, отношусь бережно, при этом уже сменил 3 стекла, супруга — 2. А так это были бы экраны, а целесообразность замены экрана для многих телефонов просто отсутствует.
Поэтому, как я и заметил ранее, Эпл тут только фаворит в том, что предложили аппарат для домохозяек.

А это и есть способ сделать продукт, который оценят и домохозяйки - внимание к мелочам. Иногда бывают проколы типа anntennagate, но в целом подход такой.

так вроде я сам об этом и сказал, речь про тот факт что Джобс не был первым кто сделал смартфон, он был первым кто сделал iPhone с теми характеристиками, которые его отличали от конкурентов. Мы же не говорим что Маск придумал электромобили, они вообще-то были еще в 19 веке.

Пока возможностей VIC'а в C64 хватало -- конечно игры были веселее на C64. Как только перестало хватать -- сразу оказалось, что на спектруме, например, есть R-Type нормальный и динамичный, а на C64 какой-то треш. Или что fps (frames per second) в Fairlight на спектруме как-то сильно побольше, чем на C64. Так что -- превосходство C64 такое себе.

например, есть R-Type нормальный и динамичный

в данном случае это дело вкуса, я не перевариваю спековский способ отображения цвета и вырвиглазную фиксированную палитру, в 90-е я тупо убирал цвет и играл в оттенках серого.

а на C64 какой-то треш

О данной игре ничего не знал, зашёл посмотреть на ютуб, пардон конечно, но спековская версия ужасна, как по цветовому оформлению, так и по тормозам.

Или что fps (frames per second)

Вы надеюсь в курсе, что FPS у C64/AtariXL_XE/NES фиксирован на 50/60 Гц в зависимости от региона? А вот на спеке fps для многих игр всегда гуляет, если посмотреть на тот же R-Type то это видно по динамичным сценам.

Так что -- превосходство C64 такое себе

Ну и всё же стоит внимательно читать что пишут люди, а не зацикливаться на том что у кого болит. Я написал что "Это кстати определило визуальную разницу в играх например на C64 и ZX, первый имел отличный чип для работы с графикой, а последний - нет, поэтому программисты под спектрумы тоже как Кармак превозмогали и писали такое, что иной раз просто поражаешься" и если бы вы были внимательны, то из моих слов можно вынести две мысли и только две: 1) Наличие специализированного чипа в C64 давало визуальную разницу в играх в сравнении со спеком, 2) Есть масса отличных игр на спектруме и масса разработчиков (в том числе современных), перед которыми я склоняю голову.

Я вообще не даю оценок "лучше/хуже", так как это скорее дело вкуса и глупо отрицать влияние ZX на мир пк и игр в целом. Для меня это второй ПК после Атари 130ХЕ, за спеком я провёл 4 года. Меня обвинять в унижении или принебрежении к ZX это прям фуфуфу. Я рассматривал объективные аппаратные возможности и аспекты с ними связанные, будьте внимательны в попытках устроить холивар.

Вы надеюсь в курсе, что FPS у C64/AtariXL_XE/NES фиксирован на 50/60 Гц в зависимости от региона? А вот на спеке fps для многих игр всегда гуляет, если посмотреть на тот же R-Type то это видно по динамичным сценам.

Вы, надеюсь, посмотрели в ютубе fairlight там и там? Где фпс не гуляет? Где он больше?

r-type на комоде отличается крайне небольшим размером и количеством спрайтов, в то время как на спектруме и (программные) спрайты больше и их количество.

На комоде упёрлись в аппаратные возможности VIC'а (8 спрайтов 24x21, можно переиспользовать), а на спектруме изначально был программный рендеринг более-менее быстрым (по сравнению с 6502 в комоде) процессором Z80. Вот тут-то спектрум и выигрывает.

Меня обвинять в унижении или принебрежении к ZX это прям фуфуфу.

А это уже попытка приписать то, чего не говорилось :)

Если подходить чисто технически, то начинал он в 20 веке. И имя себе сделал в 20.

P. S. Один мой хороший знакомый, в разделе благодарности своего диплома, поблагодарил именно Кармака. Как он рассказывал, момент когда один из членов комиссии добрался до этого места он отлично увидел :) НГУ, 2000й год.

"Кармак действительно использовал кучу нестандартных приёмов вроде конверсии указателей или выхода за границы объектов, чтобы в циклах получать доступ к другому объекту, который гарантировано идёт следом."

Это используется в арифметике указателей, которую к тому времени уже изучали на уроках computer science.

Двоичное разбиение пространства и BSP-деревья были впервые применены специалистами компании LucasArts в начале 80-х годов. 

Круто. Спасибо. Понравилась статейка.

На слабеньких 486SX, без видеокарт

Это вы прям перескочили :-) Первый wolf у меня игрался на AT-286 с памятью 1М

Его сильной стороной была сосредоточенность. 

Тогда не было ни хабра, ни тик-тока прастигоспади, ему просто не на что было отвлекаться ))

Но да, это не про меня.

С другой стороны, какая же это была боль в начале 90-х, без доступа к информации пытаться учиться программировать по хелпу к FoxPro и Турбо Паскалю. За книгами надо было ехать в соседний большой город.

Кармак крут.

какая же это была боль в начале 90-х, без доступа к информации пытаться учиться программировать по хелпу к FoxPro и Турбо Паскалю.

Верно. Боль.

Но те, кто прошёл эти испытания, практически наверняка становился профессионалом... ??‍♂️

кучу нестандартных приёмов вроде конверсии указателей или выхода за границы объектов, чтобы в циклах получать доступ к другому объекту, который гарантировано идёт следом

Так и не увидел в статье описания кучи нестандартных приёмов и хаков, написано только про BSP.

"Кармак действительно использовал кучу нестандартных приёмов"

Времена меняются -- нынче такие приёмы называются индусским кодом.

Оффтоп (смотрю фото) А как горб лечить-то? У Кармака есть метод предложить?

Ализар себя переализарил тут. Хоть бы посмотрел как Carmack пишется. И "джон-движок", что? Статья позорная абсолютно.

Кармак - красаучег, что бы не говорили

i = 0x5f3759df - ( i >> 1 );

Зарегистрируйтесь на Хабре, чтобы оставить комментарий