| FCOS
В этом разделе помещена лента новостей, касающихся FCOS. Здесь описываются изменения в ядре, приложениях, драйверах и утилитах. Если Вы захотите установить новые версии FCOS, драйверов и приложений, заходите в раздел [Закачать!].
В процедуре Shade организован учет коэффициента преломления Kt, задаваемого в материалах объектах. По нормали определяется, входит ли луч в объект, или выходит. Соответственно, получаются разные результаты работы процедуры Trace. На данный момент имеется недоработка: в процедуру Trace передаются не все данные о среде распространения лучей.
В процедуре Shade стал учитываться коэффициент Kr отражения лучей от объекта. Для этого потребовалось рекуррентно вызывать процедуру Trace. Отдельное внимание стало уделяться вопросу оптимизации работы с векторными величинами. Здесь очень пригодились бы инструкции XMM-расшерения. Иногда приходится жертвовать вызовами HSV\mat для ускорения работы. На данный момент ассемблерная версия программы работает в 2.5 раза медленнее программы-прототипа на C++.
Исправлен макрос, обеспечивающий возведение числа 2 в произвольную действительную степень. Во-первых, он стал работать с отрицательной степенью. Для этого пришлось выделить расчет положительной степени в отдельный макрос. Во-вторых, стало возможным вычисление степени до 231 (или 2–31). Более высокие (по модулю) степени приравниваются к 31 (или –31). Это избавляет от ошибки переполнения счетчика. Кстати, сам счетчик расширен с 16 до 32 бит.
В процедуре Shade обеспечено вычисление коэффициентов Kd диффузной и Ks зеркальной освещенности. Обе величины зависят от мощности, цвета и расположения всех источников сцены.
Введена в рассмотрение структура источников точечного света. Для единообразия шапка этой структуры совпадает с шапкой структуры объектов. Точечные источники хранятся наравне с геометрическими объектами в сегменте GS. В качестве примера на сцене размещен один источник.
В процедуре Shade обеспечен расчет фоновой освещенности объекта, на который попал луч. Используется материал объектов.
Введено понятие «материал». Для отладочных целей после треугольников и источников света размещены два материала — красного и зеленого цветов. За материалами закреплен сегмент данных FS, а за объектами — GS.
В процедуре Shade обеспечен блок инициализации, в котором обрабатываются входные аргументы, а так же присваиваются исходные значения локальным переменным.
Разделён модуль исходных кодов tras.inc, с выделением из него модуля shad.inc, в котором теперь размещены процедуры Shade и Shadow.
Началась разработка процедуры Shade. Пока она обеспечивает только возврат цвета (1.0, 1.0, 1.0). Реализована вся структура локальных переменных и входных аргументов.
Разаработана процедура Vector\RayPoint, которая по лучу и коэффициенту выдает точку на этом луче.
При запуске FCOS производится переключение на 40-символьный текстовый режим.
Исходные коды супервизора разделены на отдельные inc-модули: syst, intg, real, vect, matr.
В процедуре Trace сделано «затухание» луча по экспоненте в зависимости от расстояния до объекта — параметра t. Объекты окрасились в градации серого.
Разработаны процедуры PovXY, Exp_X, Two_X, Ten_X с модификациями _rd (для любых действительных чисел) и _gz (для положительных чисел). В качестве экспериментальной была оставлена процедура PowXY_lp, которая медленно работает и сбоит в окрестности нуля.
Для отладочных целей в состав FVR влючена процедура graphic, которая в окне FVR строит график любой функции. Здесь же началась разработка функций xy, ex.
Пересмотрены и исправлены процедуры RendScen, Trace, Intersect и в плотную подошел к Shade и Shadow. Все счетчики стали 32-х битными. Геометрические объекты и источники света стали неразличимы на уровне счетчиков, хотя при обработке все объекты анализируются корректно.
Написаны (в Kernel\Base) процедуры PackSco1 и UnPkSco1, которые архивируют и разархивируют ICO-картинку в CR1 (256 цветов). Эти процедуры работают только с данными о цвете и не используют предваряющие информационные поля. Все параметры (в/из) передаются через регистры.
В процедуру IdentCPU добавлено определение процессоров младших моделей (от i8086 до i80486), не имеющих инструкции CPUID. Теперь FCOS может по результатам тестирования процессора сообщить пользователю о невозможности работы системы на данном процессоре.
В процедуру IdentCPU добавлено маскирование битов степпинга в коде идентификации процессора. Это необходимо для одинакового распознавания процессоров с различным степпингом.
Процедуры InitTask, Ini8259A, IdentCPU, PrCPU_ID, ProtMode, RealMode перенесены из модуля fcosbase.inc в новый модуль fcosinit.inc. В дальнейшем этот модуль будет содержать процедуры определения различных периферийных устройств, поддерживать технологию Piug&Play и др.
Созданы процедуры IdentCPU (для RealMode) и PrCPU_ID (для ProtMode), которые соответственно идентифицируют (с сохранением полученных данных в SEG DATA) процессор и его параметры, и выводят в stdout всю доступную о CPU информацию.
Если Ваш процессор не опознан (или неправильно опознан),
большая просьба сообщить на
eMail: fndp@rambler.ru
кодовое число (CPU code) и настоящее имя процессора.
Например:
Vendor ID: GenuineIntel CPU code: 00000660 CPU type: Celeron 300A
Началась реализация концепции гибкой обработки ошибок в файловой системе. Теперь gamma-уровень AFS (пока это модуль v_86.inc) будет передавать код ошибки сквозь уровни betta- и alpha- приложению FCOS, которое само будет решать: игнорировать ошибку, самостоятельно обработать её или отдать ядру FCOS для стандартной обработки.
Исправлены независимые программы (на С++) wintodos и dostowin с тем, чтобы они корректно обрабатывали символы 'ё' и 'Ё'. Раньше вместо них в текст вставлялись пробелы.
Написаны процедуры C256t16M и C16Mt256, которые преобразуют цвет палитры в TrueColor и назад. Проведён эксперимент с двойным преобразованием цветов 256=>16M=>256. Работа с графикой сильно замедляется.
В дальнейшем планируется перевести FCOS на работу в 16M-цвете (TrueColor) с 8-битовым alpha-каналом прозрачности.
Организован новый модуль HSV\gfx=052h «Поддержка видеоадаптера». Он обеспечивает все низкоуровневые операции с экраном и работу с графическими примитивами.
В HSV\mem реализована процедура TestMem, которая проверяет всю память (с шагом 64 байта) и вызывает процедуру PrAllMem, которая выдает в stdout сообщение:
Avaliable memory: 0xxxxxxxxh bytesЕсли в файле variable.run указывается значение ScoreMEM меньше количества физической памяти, то берется именно это значение, иначе — реальное количество физической памяти.
*
Написана процедура _if_draw, которая при необходимости прорисовывает линию между узловыми точками символов. Если точка одиночна, вокруг нее рисуется прямоугольник. Теперь растровый шрифт можно отображать с произвольным растяжением, не ухудшая «читабельность». При этом процедура Drw1Symb оптимизирована под масштаб 1:1, обеспечивая максимальную скорость при выводе стандартного текста.
*
Началась реализация идеи о «Нижней Линии TBR» (DLT). 20 пикселей внизу экрана отводятся под область, где находятся часы и пиктограммы приложений.
*
Все попытки избавиться от фирменного инициализатор мыши не увенчались
успехом, поэтому выделено ~29kB в сегменте данных мыши. В процедуре
MouDwIni загружается и запускается mouseini.dat.
Занимать место инициализатора в дальнейшей работе нельзя, т.к. там
находятся какие-то отработчики перехваченных прерываний.
Добавлены процедуры Sxy~, Box~, Smp~ ~Mouse
(точнее, восстановлена их работоспособность).
Процедура IniMouse ликвидирована полностью.
*
Отлажены и оптимизированы коды переключателя задач и драйвера мыши высокого уровня. Ликвидировал основные «глюки» дисковода и мыши. Теперь осуществляется корректный возврат в DOS.
Начась работа по составлению системной палитры FCOS.
*
Обеспечена основа многозадачности: выделил два TSS. Пока работает кооперативная многозадачность в ограничении: вторая задача вызывается, как процедура со своим LDT.
*
FCOS переписан с «чистого листа». За основу взят листинг 16-1 книги «Assembler: учебный курс». Теперь FCOS загружается из под MS-DOS и переходит в защищённый режим. Будет реализована многозадачность и защита памяти системы и приложений. Станет возможным использование памяти за пределами первого мегабайта сегментами, размер которых превышает 64kB.
Написана функция GetSiCoT (AX=0000Bh, fnFCOS), которая возвращает в (ES:BX) адрес таблицы значений sin и cos
FVR полностью перенен в отдельный файл fvr.exe, причём сама система размещается в файле fcos.exe.
*
Некоторые участки FCOS и FVR переведены в режим «Ideal Mode» Tasm 2.0.
Изменен SetBox: теперь AdrPix вызывается только один раз на всю графическую линию, что позволяет сократить число вызовов процедуры рассчета адреса в видеопамяти и переключения видеостраниц.
Немного оптимизированы (упрощены) процедуры из модуля fcoskern.inc.
*
Сделан вызов функций, обслуживающих интерфейсные пиктограммы. Их адреса
хранятся в массиве ArWndPct DD CP_Prop, CP_Quit, ....
Реализована пиктограмма CP_Quit. В отработчике пиктограммы
CP_Prop сделан вызов процедуры DrwGamma.
Отработчики CP_Full и CP_Mini
реализованы без учёта своппингов на диск (только пересчёт и перерисовка).
После вызова InitScrn в процедуре InitFCOS добавил задержку около секунды для нормального открытия графического экрана, иначе графика «глючит».
*
Проект переведен на программирование в Tasm 3.1 + Tlink 5.1.
Началось перенесение FCOS из C++ в TASMе.
Написаны (по аналогии с версией на C++) процедуры SetPix и
SetBox.
*