gamedevfor
> Под DOS
graphics.h передавал вам привет
Delfigamer
> graphics.h передавал вам привет
рисовать графики и фигуры им можно было, но для игр это было медленно.
gamedevfor
> Под DOS напрямую писали в видеопамять, благо она уже была линейная
ага - банков памяти конечно не было - забыл как тот драйвер назывался что делал линейный
> CPU в принципе нормально вытягивал 2D графику на ASMе.
elite retalator видел ?
gamedevfor
>
> Под DOS напрямую писали в видеопамять, благо она уже была линейная (без битовых
> масок как в ZX), но тогда разрешение было 320x200 (256 цветов) CPU в принципе
> нормально вытягивал 2D графику на ASMе.
Во-первых, в 95 уже было нормальное разрешение (800х600 изи, 1024х768 тоже возможно), так что хочешь в досе это крутить - иди банки переключай. И с экстендед памятью мозги ломай. И драйвера для геймпадов и саундблястеров сам пиши. Да в вин95 был божественный геймдев по сравнению.
gamedevfor
> Под DOS напрямую писали в видеопамять, , благо она уже была линейная (без битовых масок как в ZX),
Ты EGA видеорежимы вообще видел? И возможность писать в видеопамять не даёт автоматом плавный скроллинг и спрайты. Например, чтобы сделать обновление экрана без мерцаний и снега в 320x200 режиме, нужно было ловить VBI в цикле (т.к. прерывания нет) и обновлять видеопамять именно в этот момент. Не, конечно, можно было залезть руками в регистры VGA и настроить XMODE, чтобы получить (на выбор) или скроллинг или бэк буффер, но это из разряда эзотерики для большинства было. И вообще, в эпоху до DirectX любая 16-ти битная консоль крыла 486 PC, как бык овцу, и по графонию и по саунду.
0iStalker
> И вообще, в эпоху до DirectX любая 16-ти битная консоль крыла 486 PC, как бык
> овцу, и по графонию и по саунду.
Это там где отдельные граф и саунд процессоры ? ну да
innuendo
> ага - банков памяти конечно не было - забыл как тот драйвер назывался что делал
> линейный
320x200x8bit < 64Kb как раз влезал в один сегмент, так что в этом разрешении банки были ни к чему.
gamedevfor
> так что в этом разрешении банки были ни к чему.
это не отменяте факта что линейная не всегда была
0iStalker
> Просто до 3Dfx'ов пэкашное железо вообще не было заточено под игры (даже
> бэкбуффера не было, не говоря уж про спрайты и скролинг).
Позвольте возразить. Карта S3 Trio V64+ имела 2D-ускоритель и могла блитить в видеопамять с учётом цвета прозрачности. И флип сюрфейсов там тоже есть. Родные драйвера этой карты под Win98 давали видимое на глаз ускорение, особенно при быстром провороте полосы прокрутки в офисных программах. По сравнению с дефолтным 16-цветным VGA-драйвером по умолчанию. Добавлю, что лично ковырял эту карту, регистры там отображены на 16-битные порты ввода-вывода, поэтому 2D-ускоритель программировал в реальном режиме CPU.
gamedevfor
> То что было в DOS для игроделов было еще более полной Ж
Никакая не жопа, а рай игродельства! :) Нужно просто иметь руки откуда надо и мышление как у Кармака (в те времена).
Вспомнить хотя бы такие конторы как : BullFrog, Apogee, ... - годноту под DOS лабали ведь )))) Пускай DOS-фанатам икнётся! )))
Когда появился DirectX (вроде как в 98-й винде) то он нах... не нужен был, все писали Full-screen игры под ДОС. )
gamedevfor
> 320x200x8bit < 64Kb как раз влезал в один сегмент, так что в этом разрешении
> банки были ни к чему.
innuendo
> это не отменяте факта что линейная не всегда была
Да, помню была проблема ускорить переключение банка 64 кБ в видеокарте. VESA-функция работала медленно (0x4F05), но всё решалось правильной установкой питча в байтах (функция 0x4F06) - задав ширину степени двойки, мы могли проверять переключение банка уже на уровне строк, а не пикселей!
Ну и спец-ухищрениями с VGA-регистрами, можно было при видео-таймингах 640x480 выставить логическое 320x240 - реорганизовав видеопамять: в итоге имеем 320x240 но в разрешении 640x480 и даже выше.
Дальнешие мои изыскания привели к дизассемблированию видео-BIOS'ов. Расколол nVidia, ATI, S3 - переключение банка видеопамяти там делается по-разному. Но очень быстро: одной или двумя записями в порт! И это быстрее.
Потом пошли в ход защищённый режим, DPMI. Переключение банков стало ненужным. С LFB. Но в WinXP пришлось вернуться к банкам, так как DPMI функцию Map physical to linear - выпилили!
Ну и для олдфагов : режим Chain-4. Когда запись байта в видеопамять приводит к загоранию сразу смежных 4-х пикселей. По отдельности тоже можно- уже через порты. Итого 256 кБ видео-памяти вместо 64.
0iStalker
> И возможность писать в видеопамять не даёт автоматом плавный скроллинг и
> спрайты. Например, чтобы сделать обновление экрана без мерцаний и снега в
> 320x200 режиме, нужно было ловить VBI в цикле (т.к. прерывания нет) и обновлять
> видеопамять именно в этот момент. Не, конечно, можно было залезть руками в
> регистры VGA и настроить XMODE, чтобы получить (на выбор) или скроллинг или бэк
> буффер, но это из разряда эзотерики для большинства было. И вообще, в эпоху до
> DirectX любая 16-ти битная консоль крыла 486 PC, как бык овцу, и по графонию и
> по саунду.
С помощью VESA можно скролить плавно. И флипать.
C VBlank вроде как проблем не было. Всё плавно и без дёргания (с отключенными прерываниями во время пересылки в видеопамять).
Спрайтов, да, не было. И в этом ПиСюк сосал у концолей. И звук первоначально - бипер. Отстой.
Хотя знакогенератор 8x8 (пусть даже и с экстеншеном спрайта до 32x32 из 4-х тайлов) не очень осчастливливает современных пограммистов, клепающих инди-треш на говно-движках )))
Gradius
> С помощью VESA можно скролить плавно. И флипать.
Не попадалось статей/документации по этому поводу. Всё что было известно, - это как выставить видеорежим и переключать банки через прерывание BIOS (очень медленно, мне пришлось трассировать биос видеокарточки S3 чтобы понять как переключать банки через порты IO).
upd.
Возможно это делалось через vesa-bios функцию 0x4f05, но я тогда в этом не разобрался, ибо с интернетами и прочими документациями было реально плохо. Да и DirectDraw буквально почти сразу подвезли... вообще, на досуге, надо будет попробовать устроить небольшой практикум (наверняка даже современные джифорсы rtx до сих пор всё это умеют)
То ли дело сейчас, пара запросов в гугл и первой же строчкой - полнейший даташит на чип, бесплатно www.bitsavers.org/components/s3/DB018-A_Trio64V+_Integrated_Graph… tor_Jul95.pdf только кому оно сейчас надо ?
0iStalker
> Не попадалось статей/документации по этому поводу. Всё что было известно, - это
> как выставить видеорежим и переключать банки через прерывание BIOS (очень
> медленно, мне пришлось трассировать биос видеокарточки S3 чтобы понять как
> переключать банки через порты IO).
Для обучения и практикума пользовался этой книгой: http://mega-avr.com.ua/kulakov/
Владимир Кулаков «Программирование на аппаратном уровне»
Только я её в бумажном варианте покупал в магазине, а не качал.
Там хоть и на ассемблере x86, но зато всё расжёвано и по-русски. Основные моменты перетащить на C будет достаточно легко.
Там есть пример с идеально плавно летящим самолётиком.
Как заготовка для собственного 2D-движка из псевдо-спрайтов сойдёт.
0iStalker
> ну или документация VESA настолько криво написана, что нужно читать между
> строчек, чтобы вынуть оттуда игродельные возможности
Первый ПК у меня появился в 2000 году. В 2001 году уже хорошо разбирался в ассемблере x86, с документацией особо напряга не было. Интернет - диал-ап через городской телефон с модемом по RS-232 или выделенка в институте.
Особую пользу оказал пиратский CD-диск "Студенческая бомба" - и чего там только не было! Начиная с разных компиляторов от Borland, заканчивая большим архивом под названием snippets, где была сосредоточена вся масса прог на Си, Паскаль, Ассемблере - как работать с графикой, VESA, защищёнными режимами и прочим.
И чья-та курсовая про функции VESA VBE 2.0.
0iStalker
> Возможно это делалось через vesa-bios функцию 0x4f05, но я тогда в этом не
> разобрался, ибо с интернетами и прочими документациями было реально плохо. Да и
> DirectDraw буквально почти сразу подвезли... вообще, на досуге, надо будет
> попробовать устроить небольшой практикум (наверняка даже современные джифорсы
> rtx до сих пор всё это умеют)
+ 4f06, 4f07. И ещё там можно палитру расширить с 6 бит до 8 бит на компоненту.
С DDraw я познакомился только несколько лет спустя, и то - вынужденно... Так как в DOS сейчас никого не заставишь грузиться :(
Если карта от ATI или nVidia, подозреваю VIDEO BIOS + VESA VBE там работают. VBE 3.0 не ждите, скорее будет 2.x. По крайней мере, на GeForce 6600 и Radeon 9600 VESA работала и под XP (ДОС-сессия)
0iStalker
> То ли дело сейчас, пара запросов в гугл и первой же строчкой - полнейший
> даташит на чип, бесплатно
> www.bitsavers.org/components/s3/DB018-A_Trio64V+_Integrated_Graph…
> tor_Jul95.pdf только кому оно сейчас надо ?
:) Я из драйвера Линукса выковыривал всё это :) Но тогда был 2004 г. Зато даташит на Voodoo2 и 3 легко нашёл + прогу на асме как выставить режим 3D и затекстурировать треугольник. :) Вся группа института была в ах..е, когда давал им загрузочную дискетку 3,5 дюйма с настоящим 3D-туннелем использующий 3д-ускоритель. Карта Voodoo3 тоже была в демо-комплекте. В то время заканчивалась эра Win98, все начали переходить на XP, и мне она очень сильно не понравилась.
Старые ISA видео-карты и подключение их а микроконтроллерам AVR : http://itnan.ru/post.php?c=2&p=292299
Довольно занятно :)
А тут пиксельный шейдер программируют для получения эффекта кругов по воде - с помощью АСМа и под ДОСом :)
https://wasm.in/threads/sled-ot-vodomerki-na-poverxnosti-vody.31854/